Merge remote-tracking branch 'origin/main' into port-2619

# Conflicts:
#	packages/ui/src/components/sections/openchamber/OpenChamberVisualSettings.tsx
This commit is contained in:
Bohdan Triapitsyn
2026-08-29 00:26:49 +03:00
1318 changed files with 118125 additions and 30528 deletions
+20
View File
@@ -228,6 +228,25 @@ const DE_MESSAGES: BootstrapMessages = {
loadingData: (providersText, agentsText) => `Daten werden geladen (${providersText}, ${agentsText})…`,
};
const TR_MESSAGES: BootstrapMessages = {
startingApi: 'OpenCode API başlatılıyor…',
initializing: 'Başlatılıyor…',
connecting: 'Bağlanıyor…',
connected: 'Bağlandı!',
connectionError: 'Bağlantı hatası',
disconnected: 'Bağlantı kesildi',
reconnecting: 'Yeniden bağlanıyor…',
initialDataLoadFailed: 'OpenCode bağlandı ancak ilk veri yükleme başarısız oldu.',
cliNotFound: 'OpenCode CLI bulunamadı. Lütfen önce kurun.',
providersReady: '✓ Sağlayıcılar',
providersLoading: '… Sağlayıcılar',
agentsReady: '✓ Agent\'ler',
agentsLoading: '… Agent\'ler',
startingDevServer: (hostLabel) => `Webview dev sunucusu başlatılıyor (${hostLabel})...`,
waitingDevServer: (hostLabel, attempt) => `Webview dev sunucusu bekleniyor (${hostLabel})... deneme ${attempt}`,
loadingData: (providersText, agentsText) => `Veriler yükleniyor (${providersText}, ${agentsText})…`,
};
export const getBootstrapMessages = (locale: Locale): BootstrapMessages => {
return BOOTSTRAP_MESSAGES[locale];
};
@@ -244,6 +263,7 @@ const BOOTSTRAP_MESSAGES: Record<Locale, BootstrapMessages> = {
ko: KO_MESSAGES,
pl: PL_MESSAGES,
ja: JA_MESSAGES,
tr: TR_MESSAGES,
};
export const readStoredLocaleForBootstrap = (): Locale => {
+1
View File
@@ -13,6 +13,7 @@ const INTL_LOCALE_BY_LOCALE: Record<Locale, string> = {
ko: 'ko-KR',
pl: 'pl-PL',
ja: 'ja-JP',
tr: 'tr-TR',
};
const getIntlLocale = (locale: Locale): string => INTL_LOCALE_BY_LOCALE[locale] ?? 'en-US';
@@ -11,6 +11,7 @@ import { dict as ptBrDict } from './messages/pt-BR';
import { dict as ukDict } from './messages/uk';
import { dict as zhCnDict } from './messages/zh-CN';
import { dict as zhTwDict } from './messages/zh-TW';
import { dict as trDict } from './messages/tr';
const localeDictionaries = {
en: enDict,
@@ -24,6 +25,7 @@ const localeDictionaries = {
pl: plDict,
'zh-CN': zhCnDict,
'zh-TW': zhTwDict,
tr: trDict,
} as const;
describe('i18n dictionaries', () => {
+163 -41
View File
@@ -1,8 +1,10 @@
import { thirdPartyIntegrationI18n } from './third-party-integrations.i18n';
export const settingsDict = {
'settings.providers.page.openCodeGo.title': 'OpenCode Go Nutzungsverfolgung',
'settings.providers.page.openCodeGo.description': 'Verbinden Sie das OpenCode Go Dashboard, um rollierenden, wöchentlichen und monatlichen Verbrauch anzuzeigen.',
'settings.providers.page.openCodeGo.workspaceId': 'Workspace-ID',
'settings.providers.page.openCodeGo.authCookie': 'Auth-Cookie',
'settings.providers.page.openCodeGo.apiKey': 'API-Schlüssel',
'settings.providers.page.openCodeGo.help': 'Kopieren Sie die Workspace-ID aus der Dashboard-URL und den Auth-Cookie aus den Browser-Entwicklertools. OpenChamber liest niemals den Browser-Cookie-Speicher aus.',
'settings.providers.page.openCodeGo.save': 'Speichern und validieren',
'settings.providers.page.openCodeGo.replace': 'Ersetzen',
@@ -37,6 +39,18 @@ export const settingsDict = {
'settings.view.badge.beta': 'Beta',
'settings.view.actions.reloadOpenCode': 'OpenCode neu laden',
'settings.view.actions.reloadOpenCodeTooltip': 'OpenCode neu starten und Konfiguration neu laden.',
'settings.view.actions.applyAndRestartOpenCode': 'Anwenden & Neu starten',
'settings.view.actions.applyAndRestartOpenCodeTooltipSingle': '1 ausstehende Konfigurationsänderung anwenden und OpenCode neu starten.',
'settings.view.actions.applyAndRestartOpenCodeTooltipPlural': '{count} ausstehende Konfigurationsänderungen anwenden und OpenCode neu starten.',
'settings.view.pendingRestart.applying': 'Neustart…',
'settings.view.pendingRestart.applied': 'OpenCode wurde mit ausstehenden Konfigurationsänderungen neu gestartet.',
'settings.view.pendingRestart.applyFailed': 'Konfigurationsänderungen konnten nicht angewendet werden.',
'settings.view.pendingRestart.manualRestartRequired': 'Auf Datenträger gespeichert. Starten Sie Ihren verbundenen OpenCode-Server neu, um die Änderungen anzuwenden.',
'settings.view.pendingRestart.saved': 'Gespeichert. Starten Sie OpenCode neu, um anzuwenden.',
'settings.view.pendingRestart.confirm.title': 'Anwenden & neu starten?',
'settings.view.pendingRestart.confirm.description': 'Ein Neustart von OpenCode beendet alle laufenden Chats. Ihre gespeicherten Konfigurationsänderungen werden nach dem Neustart wirksam.',
'settings.view.pendingRestart.confirm.dontShowAgain': 'Nicht mehr anzeigen',
'settings.view.pendingRestart.confirm.cancel': 'Abbrechen',
'settings.view.actions.backToSettings': 'Zurück zu Einstellungen',
'settings.view.actions.closeSettings': 'Einstellungen schließen',
'settings.view.actions.openSectionList': 'Abschnittsliste öffnen',
@@ -376,14 +390,14 @@ export const settingsDict = {
'settings.remoteInstances.page.field.modePlaceholder': 'Modus auswählen',
'settings.remoteInstances.page.field.modeManaged': 'Für mich starten',
'settings.remoteInstances.page.field.modeExternal': 'Läuft bereits',
'settings.remoteInstances.page.field.preferredRemotePort': 'Bevorzugter Remote-Port',
'settings.remoteInstances.page.field.preferredRemotePortHint': 'Leer lassen für automatische Auswahl.',
'settings.remoteInstances.page.field.preferredRemotePort': 'Port auf dem entfernten Rechner',
'settings.remoteInstances.page.field.preferredRemotePortHint': 'Port, den OpenChamber auf dem entfernten Rechner belegt. Leer lassen für eine automatische Wahl.',
'settings.remoteInstances.page.field.keepServerRunning': 'Server am Laufen halten',
'settings.remoteInstances.page.field.keepServerRunningHint': 'OpenChamber auf der Remote-Maschine weiterlaufen lassen nach Verbindungstrennung.',
'settings.remoteInstances.page.field.bindHost': 'Bind-Host',
'settings.remoteInstances.page.field.bindHostHint': 'Verwenden Sie 127.0.0.1 oder localhost, es sei denn, Sie benötigen LAN-Zugriff.',
'settings.remoteInstances.page.field.preferredLocalPort': 'Bevorzugter lokaler Port',
'settings.remoteInstances.page.field.preferredLocalPortHint': 'Leer lassen für automatische Auswahl.',
'settings.remoteInstances.page.field.keepServerRunningHint': 'Den entfernten Server nach dem Trennen weiterlaufen lassen. Aus: Er wird beim Trennen gestoppt und beim nächsten Verbinden wieder gestartet.',
'settings.remoteInstances.page.field.bindHost': 'Erreichbar für',
'settings.remoteInstances.page.field.bindHostHint': 'Wer die weitergeleitete Adresse auf diesem Computer öffnen darf. Der entfernte Rechner selbst bleibt in beiden Fällen nur über den SSH-Tunnel erreichbar.',
'settings.remoteInstances.page.field.preferredLocalPort': 'Port auf diesem Computer',
'settings.remoteInstances.page.field.preferredLocalPortHint': 'Port, der auf diesem Computer für den Tunnel geöffnet wird. Leer lassen für eine automatische Wahl.',
'settings.remoteInstances.page.field.forwardType': 'Weiterleitungstyp',
'settings.remoteInstances.page.field.localHostPlaceholder': '127.0.0.1',
'settings.remoteInstances.page.field.remoteHostPlaceholder': '127.0.0.1',
@@ -402,6 +416,10 @@ export const settingsDict = {
'settings.common.actions.cancel': 'Abbrechen',
'settings.common.actions.create': 'Erstellen',
'settings.common.actions.delete': 'Löschen',
'settings.openchamber.appLinks.title': 'Vertrauenswürdige App-Links',
'settings.openchamber.appLinks.info': 'Hier aufgeführte Links öffnen sich auf diesem Gerät ohne erneute Nachfrage. Bei anderen App-Links wird vor dem Öffnen immer nachgefragt.',
'settings.openchamber.appLinks.empty': 'Keine vertrauenswürdigen App-Links auf diesem Gerät. Wähle beim Öffnen eines Links „Vertrauen und öffnen“, um ihn hier hinzuzufügen.',
'settings.openchamber.appLinks.removeAria': 'Vertraute {scheme}-Links entfernen',
'settings.common.actions.reset': 'Zurücksetzen',
'settings.common.actions.rename': 'Umbenennen',
'settings.common.actions.duplicate': 'Duplizieren',
@@ -445,6 +463,9 @@ export const settingsDict = {
'settings.openchamber.about.title': 'Über OpenChamber',
'settings.openchamber.about.field.version': 'Version',
'settings.openchamber.about.field.openCodeVersion': 'OpenCode-Version',
'settings.openchamber.about.field.instanceUrls': 'Instanz-URLs',
'settings.openchamber.about.field.applicationUrl': 'Anwendung',
'settings.openchamber.about.field.tunnelUrl': 'Tunnel',
'settings.openchamber.about.state.checking': 'Wird geprüft...',
'settings.openchamber.about.state.upToDate': 'Aktuell',
'settings.openchamber.about.state.unknown': 'unbekannt',
@@ -828,16 +849,26 @@ export const settingsDict = {
'settings.skills.catalog.page.mode.manual': 'Manuell',
'settings.skills.catalog.page.mode.external': 'Extern',
'settings.skills.catalog.page.title': 'Fähigkeitskatalog',
'settings.skills.catalog.page.subtitle': 'Installiere fertige Skills aus kuratierten Repositories oder füge eine eigene Quelle hinzu.',
'settings.skills.catalog.page.section.sources': 'Quellen',
'settings.skills.catalog.page.searchAllPlaceholder': 'Skills in allen Quellen suchen…',
'settings.skills.catalog.page.search.clear': 'Suche löschen',
'settings.skills.catalog.page.source.skillsCount': 'Skills: {count}',
'settings.skills.catalog.page.source.stars': 'Sterne: {count}',
'settings.skills.catalog.page.source.updated': 'Aktualisiert {time}',
'settings.skills.catalog.page.source.addOwnTitle': 'Eigene Quelle hinzufügen',
'settings.skills.catalog.page.source.addOwnDescription': 'Beliebiges Git-Repository mit Skills',
'settings.skills.catalog.page.source.viewRepo': 'Repository auf GitHub öffnen',
'settings.skills.catalog.page.skill.viewOnGithub': 'Skill auf GitHub ansehen',
'settings.skills.catalog.page.list.searchTitle': 'Suchergebnisse',
'settings.skills.catalog.page.section.sourceRepository': 'Quell-Repository',
'settings.skills.catalog.page.field.selectSourcePlaceholder': 'Quelle auswählen',
'settings.skills.catalog.page.actions.refreshTitle': 'Aktualisieren',
'settings.skills.catalog.page.actions.removeCatalogTitle': 'Katalog entfernen',
'settings.skills.catalog.page.actions.addCatalog': 'Katalog hinzufügen',
'settings.skills.catalog.page.actions.removeCatalog': 'Katalog entfernen',
'settings.skills.catalog.page.actions.loadMoreSkills': 'Weitere Fähigkeiten laden',
'settings.skills.catalog.page.loading.catalog': 'Wird geladen...',
'settings.skills.catalog.page.loading.skills': 'Fähigkeiten werden geladen...',
'settings.skills.catalog.page.loading.more': 'Wird geladen...',
'settings.skills.catalog.page.foundCount': '{count} Fähigkeit(en) gefunden',
'settings.skills.catalog.page.error.catalogTitle': 'Katalogfehler',
'settings.skills.catalog.page.empty.noSkillsTitle': 'Keine Fähigkeiten gefunden',
@@ -845,7 +876,6 @@ export const settingsDict = {
'settings.skills.catalog.page.badge.installed': 'installiert ({scope})',
'settings.skills.catalog.page.badge.notInstallable': 'nicht installierbar',
'settings.skills.catalog.page.badge.unknown': 'unbekannt',
'settings.skills.catalog.page.byOwnerPrefix': 'von',
'settings.skills.catalog.page.removeDialog.title': 'Katalog entfernen',
'settings.skills.catalog.page.removeDialog.description': 'Sind Sie sicher, dass Sie diesen Katalog entfernen möchten?',
'settings.openchamber.passkeys.title': 'Passkeys',
@@ -900,9 +930,9 @@ export const settingsDict = {
'settings.openchamber.desktopNetwork.field.launchAtLoginAria': 'OpenChamber bei Anmeldung starten',
'settings.openchamber.desktopNetwork.field.launchAtLogin': 'OpenChamber beim Einloggen starten',
'settings.openchamber.desktopNetwork.field.launchAtLoginDescription': 'Startet die App im Hintergrund ohne Öffnen eines Fensters. Verwenden Sie das Desktop-Statussymbol, um sie zu öffnen.',
'settings.openchamber.desktopNetwork.field.minimizeToTrayAria': 'OpenChamber in die Systemleiste minimieren und schließen',
'settings.openchamber.desktopNetwork.field.minimizeToTray': 'In die Systemleiste minimieren und schließen',
'settings.openchamber.desktopNetwork.field.minimizeToTrayDescription': 'Lässt OpenChamber im Windows-Systemtray laufen, wenn das Hauptfenster minimiert oder geschlossen wird.',
'settings.openchamber.desktopNetwork.field.minimizeToTrayAria': 'OpenChamber in die Systemleiste schließen',
'settings.openchamber.desktopNetwork.field.minimizeToTray': 'In die Systemleiste schließen',
'settings.openchamber.desktopNetwork.field.minimizeToTrayDescription': 'Lässt OpenChamber in der Systemleiste weiterlaufen, wenn das Hauptfenster geschlossen wird. Beim Minimieren bleibt das Fenster in der Taskleiste.',
'settings.openchamber.desktopNetwork.field.keepAwakeAria': 'Computer wach halten, während OpenChamber läuft',
'settings.openchamber.desktopNetwork.field.keepAwake': 'Computer wach halten, während OpenChamber läuft',
'settings.openchamber.desktopNetwork.field.keepAwakeDescription': 'Verhindert den Ruhezustand des Systems, damit Geräte diese App erreichen können. Der Bildschirm kann weiterhin ausgeschaltet werden.',
@@ -927,6 +957,16 @@ export const settingsDict = {
'settings.openchamber.desktopNetwork.error.keepAwakeUnsupported': 'Verhindern des Schlafens wird auf diesem System nicht unterstützt',
'settings.openchamber.desktopNetwork.error.keepAwakeSaveFailed': 'Fehler beim Aktualisieren der Einstellung für Wachbleiben',
'settings.openchamber.opencodeCli.title': 'OpenCode CLI',
'settings.openchamber.tools.title': 'OpenChamber-Werkzeuge',
'settings.openchamber.tools.field.agentControlTool': 'Agenten-Steuerungswerkzeug',
'settings.openchamber.tools.field.agentControlToolAria': 'Das Agenten-Steuerungswerkzeug aktivieren',
'settings.openchamber.tools.field.agentControlToolInfo': 'Lässt Agenten deine Arbeit per Chat orchestrieren: Sitzungen und Arbeitsbereiche starten, Prompts an andere Agenten delegieren und geplante Aufgaben verwalten. Fügt jeder Sitzung eine kleine Werkzeugbeschreibung hinzu. Gilt nach einem Neustart von OpenCode.',
'settings.openchamber.tools.field.agentWebTool': 'OpenChamber-Web-Werkzeug',
'settings.openchamber.tools.field.agentWebToolAria': 'Das OpenChamber-Web-Werkzeug aktivieren',
'settings.openchamber.tools.field.agentWebToolInfo': 'Lässt Agenten die Seite im Browser-Panel von OpenChamber ansehen und bedienen: eine URL öffnen, den Inhalt lesen, klicken, tippen, scrollen und zwischen mobiler und Desktop-Ansicht wechseln. Fügt jeder Sitzung eine kleine Werkzeugbeschreibung hinzu. Gilt nach einem Neustart von OpenCode.',
'settings.openchamber.tools.field.agentMemoryTool': 'Agenten-Gedächtniswerkzeug',
'settings.openchamber.tools.field.agentMemoryToolAria': 'Agenten-Gedächtniswerkzeug',
'settings.openchamber.tools.field.agentMemoryToolInfo': 'Lässt Agenten Gelerntes über Sitzungen hinweg behalten, in zwei Speichern: was über Sie zutrifft und was über das jeweilige Projekt zutrifft. Sitzungen erhalten die gespeicherten Titel, damit der Agent bei Bedarf einen Eintrag lesen kann. Beim Ausschalten entfallen Werkzeug, Gedächtnis-Tab und Sitzungsindex. Gilt nach einem Neustart von OpenCode.',
'settings.openchamber.opencodeCli.tooltipPrefix': 'Optionaler absoluter Pfad zur',
'settings.openchamber.opencodeCli.tooltipSuffix': 'Binary.',
'settings.openchamber.opencodeCli.field.binaryPath': 'OpenCode Binary-Pfad',
@@ -1040,16 +1080,20 @@ export const settingsDict = {
'settings.openchamber.keyboardShortcuts.action.toggle_terminal_expanded.label': 'Terminal erweitert umschalten',
'settings.openchamber.keyboardShortcuts.action.add_selection_to_chat.label': 'Auswahl zum Chat hinzufügen',
'settings.openchamber.keyboardShortcuts.action.toggle_sidebar.label': 'Seitenleiste umschalten',
'settings.openchamber.keyboardShortcuts.action.toggle_right_sidebar.label': 'Rechte Seitenleiste umschalten',
'settings.openchamber.keyboardShortcuts.action.open_right_sidebar_git.label': 'Git-Tab der rechten Seitenleiste öffnen',
'settings.openchamber.keyboardShortcuts.action.open_right_sidebar_files.label': 'Datei-Tab der rechten Seitenleiste öffnen',
'settings.openchamber.keyboardShortcuts.action.switch_session_tab.label': 'Sitzungs-Tab wechseln',
'settings.openchamber.keyboardShortcuts.action.switch_session_tab.suffix': ' + 1…9',
'settings.openchamber.keyboardShortcuts.action.switch_context_surface.label': 'Kontextpanel-Oberfläche wechseln',
'settings.openchamber.keyboardShortcuts.action.switch_context_surface.suffix': ' + 1…0',
'settings.openchamber.keyboardShortcuts.action.new_chat.label': 'Neue Sitzung',
'settings.openchamber.keyboardShortcuts.action.switch_session_previous.label': 'Vorherige Sitzung',
'settings.openchamber.keyboardShortcuts.action.switch_session_next.label': 'Nächste Sitzung',
'settings.openchamber.keyboardShortcuts.action.rename_current_session.label': 'Aktuelle Sitzung umbenennen',
'settings.openchamber.keyboardShortcuts.action.toggle_permission_auto_accept.label': 'Auto-Genehmigung umschalten',
'settings.openchamber.keyboardShortcuts.action.close_session_tab.label': 'Sitzungs-Tab schließen',
'settings.openchamber.keyboardShortcuts.action.new_chat_worktree.label': 'Neuer Worktree-Entwurf',
'settings.openchamber.keyboardShortcuts.action.new_mini_chat.label': 'Neues Mini-Chat-Fenster',
'settings.openchamber.keyboardShortcuts.action.open_help.label': 'Tastenkürzel öffnen',
'settings.openchamber.keyboardShortcuts.action.toggle_context_plan.label': 'Plan-Kontextpanel umschalten',
'settings.openchamber.keyboardShortcuts.action.toggle_services_menu.label': 'Dienstemenü umschalten',
'settings.openchamber.keyboardShortcuts.action.cycle_services_tab.label': 'Dienste-Tab durchschalten',
'settings.openchamber.keyboardShortcuts.action.cycle_theme.label': 'Thema wechseln',
'settings.openchamber.keyboardShortcuts.action.cycle_agent.label': 'Agent wechseln',
'settings.openchamber.keyboardShortcuts.action.cycle_favorite_model_forward.label': 'Favorites Modell vorwärts durchschalten',
@@ -1058,15 +1102,39 @@ export const settingsDict = {
'settings.openchamber.keyboardShortcuts.action.expand_input.label': 'Eingabe erweitern',
'settings.openchamber.keyboardShortcuts.action.open_timeline_dialog.label': 'Konversations-Zeitleiste öffnen',
'settings.openchamber.keyboardShortcuts.action.toggle_prompt_navigator.label': 'Prompt-Navigator umschalten',
'settings.openchamber.keyboardShortcuts.warning.contextualPrefix': 'Diese Sequenz teilt ein kontextabhängiges Präfix mit {action}. Wenn dessen Kontext aktiv ist, hat diese Aktion Vorrang.',
'settings.openchamber.keyboardShortcuts.category.session': 'Sitzungssteuerung',
'settings.openchamber.keyboardShortcuts.category.models': 'Modelle und Agenten',
'settings.openchamber.keyboardShortcuts.category.panels': 'Panels und Werkzeuge',
'settings.openchamber.keyboardShortcuts.category.navigation': 'Navigation',
'settings.openchamber.keyboardShortcuts.category.application': 'Anwendung',
'settings.openchamber.keyboardShortcuts.actions.edit': 'Bearbeiten',
'settings.openchamber.keyboardShortcuts.actions.confirm': 'Bestätigen',
'settings.openchamber.keyboardShortcuts.dialog.title': '{action} bearbeiten',
'settings.openchamber.keyboardShortcuts.dialog.instructions': 'Drücken Sie bis zu zwei Tastenkombinationen mit jeweils höchstens drei Tasten. Warten Sie nach der ersten bis zu 3 Sekunden auf eine zweite Kombination. Wählen Sie Bestätigen zum Anwenden oder Abbrechen zum Verwerfen. Mit der Rücktaste entfernen Sie die letzte.',
'settings.openchamber.keyboardShortcuts.dialog.firstChord': 'Erste Kombination',
'settings.openchamber.keyboardShortcuts.dialog.secondChord': 'Zweite Kombination',
'settings.openchamber.keyboardShortcuts.dialog.recording': 'Tasten drücken…',
'settings.openchamber.keyboardShortcuts.unassigned': 'Nicht zugewiesen',
'settings.openchamber.keyboardShortcuts.error.prefixConflict': 'Dies kollidiert mit der von {action} verwendeten Sequenz. Wählen Sie eine andere Kombination.',
'settings.openchamber.keyboardShortcuts.error.exactConflict': 'Diese Kombination wird bereits von {action} verwendet.',
'settings.openchamber.keyboardShortcuts.error.internalConflict': 'Diese Kombination kollidiert mit einem integrierten Tastenkürzel, das nicht ersetzt werden kann.',
'settings.openchamber.keyboardShortcuts.action.open_draft_project_picker.label': 'Projektauswahl für Entwurf öffnen',
'settings.openchamber.keyboardShortcuts.action.open_draft_worktree_picker.label': 'Worktree-Auswahl für Entwurf öffnen',
'settings.openchamber.keyboardShortcuts.action.open_session_list.label': 'Letzte Sitzungen öffnen',
'settings.openchamber.keyboardShortcuts.action.toggle_dictation.label': 'Spracheingabe',
'settings.projects.sidebar.total': 'Gesamt {count}',
'settings.projects.sidebar.actions.addProject': 'Projekt hinzufügen',
'settings.projects.page.empty.noProjects': 'Keine Projekte verfügbar.',
'settings.projects.page.title.default': 'Projekt-Einstellungen',
'settings.projects.page.section.worktree': 'Arbeitsbaum',
'settings.projects.page.field.projectName': 'Projektname',
'settings.projects.page.field.projectModel': 'Projektmodell',
'settings.projects.page.field.projectThinking': 'Projekt-Denkstufe',
'settings.projects.page.section.chatDefaults': 'Vorgaben für neue Chats',
'settings.projects.page.section.chatDefaultsDescription': 'Gilt beim Start eines neuen Chats in diesem Projekt. Ohne Angabe greifen die globalen Vorgaben. Die Denkstufe erscheint nur bei Modellen, die Stufen anbieten.',
'settings.projects.page.field.projectNamePlaceholder': 'Projektname',
'settings.projects.page.field.defaultModel': 'Standardmodell für neue Chats',
'settings.projects.page.field.defaultModelDescription': 'Wird verwendet, wenn ein neuer Chat in diesem Projekt gestartet wird. Fallback auf globale Standardeinstellungen, wenn nicht gesetzt.',
'settings.projects.page.option.thinkingDefault': 'Modellvorgabe',
'settings.projects.page.field.accentColor': 'Akzentfarbe',
'settings.projects.page.field.projectIcon': 'Projekt-Icon',
'settings.projects.page.field.projectIconBackgroundAria': 'Hintergrundfarbe des Projekt-Icons',
@@ -1100,15 +1168,15 @@ export const settingsDict = {
'settings.usage.sidebar.field.displayModePlaceholder': 'Anzeigemodus',
'settings.usage.sidebar.field.displayModeUsage': 'Nutzung',
'settings.usage.sidebar.field.displayModeRemaining': 'Verbleibendes Kontingent',
'settings.usage.sidebar.field.showPredictions': 'Vorhersagen anzeigen',
'settings.usage.sidebar.status.notSet': 'Nicht festgelegt',
'settings.usage.page.empty.selectProvider': 'Wählen Sie einen Anbieter aus, um Nutzungsdetails anzuzeigen.',
'settings.usage.page.header.providerUsage': '{provider} Nutzung',
'settings.usage.page.header.refreshing': 'Aktualisiere Nutzung...',
'settings.usage.page.header.lastUpdated': 'Zuletzt aktualisiert: {time}',
'settings.usage.page.options.showInHeaderAria': 'Im Kopfmenü anzeigen',
'settings.usage.page.options.showInHeader': 'Im Kopfmenü anzeigen',
'settings.usage.page.options.showInHeaderTooltip': 'Wenn aktiviert, ist die Nutzung dieses Anbieters im Schnellzugriff-Menü in der App-Kopfzeile sichtbar.',
'settings.usage.page.header.lastUpdatedWithPlan': 'Tarif: {plan} · Zuletzt aktualisiert: {time}',
'settings.usage.page.options.showInWorkStatusAria': 'Im Arbeitsstatusbereich anzeigen',
'settings.usage.page.options.showInWorkStatus': 'Im Arbeitsstatusbereich anzeigen',
'settings.usage.page.options.showInWorkStatusTooltip': 'Wenn aktiviert, ist die Nutzung dieses Anbieters im Arbeitsstatusbereich sichtbar.',
'settings.usage.page.state.noData': 'Noch keine Nutzungsdaten verfügbar.',
'settings.usage.page.state.refreshFailedTitle': 'Aktualisierung der Nutzungsdaten fehlgeschlagen',
'settings.usage.page.state.providerNotConfiguredTitle': 'Anbieter nicht konfiguriert',
@@ -1135,8 +1203,8 @@ export const settingsDict = {
'settings.remoteInstances.page.section.actionsDescription': 'Verbinden, erneut verbinden, Protokolle anzeigen oder diese Verbindung entfernen.',
'settings.remoteInstances.page.section.remoteServer': 'OpenChamber auf dem Remote-Rechner',
'settings.remoteInstances.page.section.remoteServerDescription': 'Wählen Sie aus, wie OpenChamber nach dem SSH-Verbindungsaufbau ausgeführt werden soll.',
'settings.remoteInstances.page.section.mainTunnel': 'Lokaler Zugriff',
'settings.remoteInstances.page.section.mainTunnelDescription': 'Wählen Sie die lokale Adresse, die zum Öffnen des Remote-OpenChamber-Servers verwendet wird.',
'settings.remoteInstances.page.section.mainTunnel': 'Zugriff von diesem Computer',
'settings.remoteInstances.page.section.mainTunnelDescription': 'OpenChamber läuft auf dem entfernten Rechner. Diese Einstellungen betreffen nur die Adresse auf diesem Computer, die per SSH-Tunnel dorthin führt.',
'settings.remoteInstances.page.section.authentication': 'Authentifizierung',
'settings.remoteInstances.page.section.authenticationDescription': 'Optionale Anmeldedaten für SSH und die Remote-OpenChamber-Benutzeroberfläche.',
'settings.remoteInstances.page.section.portForwards': 'Portweiterleitungen',
@@ -1149,8 +1217,6 @@ export const settingsDict = {
'settings.remoteInstances.page.field.installMethod': 'Installationsmethode',
'settings.remoteInstances.page.field.installMethodHint': 'Wie OpenChamber auf dem Remote-Rechner platziert werden soll, wenn diese Anwendung es für Sie startet.',
'settings.remoteInstances.page.field.selectInstallMethodPlaceholder': 'Installationsmethode auswählen',
'settings.remoteInstances.page.field.installMethodDownloadRelease': 'Release herunterladen',
'settings.remoteInstances.page.field.installMethodUploadBundle': 'Bundle hochladen',
'settings.remoteInstances.page.field.selectBindHostPlaceholder': 'Bind-Host auswählen',
'settings.remoteInstances.page.field.sshPasswordOptional': 'SSH-Passwort (optional)',
'settings.remoteInstances.page.field.sshPasswordPlaceholder': 'SSH-Passwort eingeben',
@@ -1174,7 +1240,44 @@ export const settingsDict = {
'settings.remoteInstances.page.actions.enableForwardAria': 'Weiterleitung aktivieren',
'settings.remoteInstances.page.actions.openLocal': 'Lokal öffnen',
'settings.remoteInstances.page.actions.addForward': 'Weiterleitung hinzufügen',
'settings.remoteInstances.page.import.sectionTitle': 'Gespeicherte SSH-Hosts',
'settings.remoteInstances.page.addDialog.description': 'Wähle einen Host aus deiner SSH-Konfiguration oder gib die Verbindung selbst ein.',
'settings.remoteInstances.page.addDialog.sourceLabel': 'Woher die Verbindung stammt',
'settings.remoteInstances.page.addDialog.tab.saved': 'Aus SSH-Konfiguration',
'settings.remoteInstances.page.addDialog.tab.manual': 'Selbst eingeben',
'settings.remoteInstances.page.addDialog.searchPlaceholder': 'Hosts suchen',
'settings.remoteInstances.page.addDialog.emptySaved': 'In deiner SSH-Konfiguration wurden keine Hosts gefunden. Gib die Verbindung stattdessen selbst ein.',
'settings.remoteInstances.page.addDialog.searchEmpty': 'Kein Host passt zu dieser Suche.',
'settings.remoteInstances.page.addDialog.use': 'Verwenden',
'settings.remoteInstances.page.state.notConnected': 'Nicht verbunden',
'settings.remoteInstances.page.state.connecting': 'Verbindung wird aufgebaut',
'settings.remoteInstances.page.state.ready': 'Verbunden',
'settings.remoteInstances.page.state.problem': 'Aktion erforderlich',
'settings.remoteInstances.page.section.advanced': 'Erweiterte Einstellungen',
'settings.remoteInstances.page.section.advancedHint': 'Ports, Installationsmethode, Passwörter und zusätzliche Weiterleitungen. Für die meisten Verbindungen genügen die Standardwerte.',
'settings.remoteInstances.page.field.installMethodAuto': 'Automatisch',
'settings.remoteInstances.page.error.hint.noRuntime': 'Auf dem entfernten Rechner gibt es weder bun noch npm. Installiere dort eines davon oder stelle diese Verbindung auf „Läuft bereits“ um.',
'settings.remoteInstances.page.error.hint.noOpencode': 'Auf dem entfernten Rechner ist die opencode-CLI nicht installiert. Installiere sie dort (siehe opencode.ai) und verbinde dich erneut.',
'settings.remoteInstances.page.error.action.setUiPassword': 'UI-Passwort festlegen',
'settings.remoteInstances.page.error.action.pickRandomPort': 'Anderen lokalen Port verwenden',
'settings.remoteInstances.page.error.action.setRemotePort': 'Entfernten Port festlegen',
'settings.remoteInstances.page.validation.externalPortRequired': 'Lege zuerst einen entfernten Port fest. Im Modus „Läuft bereits“ muss OpenChamber wissen, auf welchem Port der Server lauscht.',
'settings.remoteInstances.page.empty.noInstances': 'Noch keine SSH-Verbindungen.',
'settings.remoteInstances.page.field.uiPasswordRequired': 'UI-Passwort (erforderlich)',
'settings.remoteInstances.page.field.uiPasswordMissingForLan': 'Erforderlich, solange der entfernte Server in seinem Netzwerk erreichbar ist.',
'settings.remoteInstances.page.field.remoteLanAccess': 'Im Netzwerk des entfernten Rechners erreichbar',
'settings.remoteInstances.page.field.remoteLanAccessHint': 'Anderen Geräten im Netzwerk des entfernten Rechners erlauben, dieses OpenChamber direkt ohne SSH-Tunnel zu öffnen. Ein UI-Passwort ist erforderlich.',
'settings.remoteInstances.page.field.remoteLanAccessWarning': 'Jeder in diesem Netzwerk erreicht das entfernte OpenChamber. Es schützt nur das UI-Passwort unten.',
'settings.remoteInstances.page.validation.remoteLanNeedsPassword': 'Lege zuerst ein UI-Passwort fest. Ohne eines wäre das entfernte OpenChamber für jedes Gerät in diesem Netzwerk offen.',
'settings.remoteInstances.page.field.bindHostOption.loopback': 'Nur dieser Computer (127.0.0.1)',
'settings.remoteInstances.page.field.bindHostOption.localhost': 'Nur dieser Computer (localhost)',
'settings.remoteInstances.page.field.bindHostOption.lan': 'Jedes Gerät in meinem Netzwerk (0.0.0.0)',
'settings.remoteInstances.page.field.sshPasswordHint': 'Nur nötig, wenn dieser Host ein Passwort verlangt, statt einen SSH-Schlüssel zu akzeptieren.',
'settings.remoteInstances.page.field.uiPasswordHintManaged': 'Passwort, mit dem die entfernte OpenChamber-Oberfläche geschützt wird. OpenChamber setzt es auf dem Server, den es für dich startet.',
'settings.remoteInstances.page.field.uiPasswordHintExternal': 'Passwort des OpenChamber-Servers, der bereits auf dem entfernten Rechner läuft, für die Anmeldung.',
'settings.remoteInstances.page.tunnelPreview.caption': 'Diese Verbindung leitet weiter:',
'settings.remoteInstances.page.empty.noInstancesWithOneImport': 'Noch keine SSH-Verbindungen. Aus deiner SSH-Konfiguration lässt sich 1 Host importieren.',
'settings.remoteInstances.page.empty.noInstancesWithImports': 'Noch keine SSH-Verbindungen. Aus deiner SSH-Konfiguration lassen sich {count} Hosts importieren.',
'settings.remoteInstances.page.state.loadingInstances': 'Verbindungen werden geladen...',
'settings.remoteInstances.page.import.loading': 'SSH-Hosts werden geladen...',
'settings.remoteInstances.page.import.noneFound': 'Keine SSH-Hosts gefunden.',
'settings.remoteInstances.page.import.noneAvailable': 'Keine SSH-Hosts zum Importieren verfügbar.',
@@ -1271,13 +1374,18 @@ export const settingsDict = {
'settings.providers.page.custom.optionLabel': 'Andere / Benutzerdefiniert',
'settings.providers.page.custom.title': 'Benutzerdefinierter Anbieter',
'settings.providers.page.custom.editTitle': 'Benutzerdefinierten Anbieter bearbeiten',
'settings.providers.page.custom.description': 'Fügen Sie einen OpenAI-kompatiblen Anbieter mit Basis-URL, Anmeldedaten und Modellliste hinzu. Wird in der OpenCode-Konfiguration gespeichert und steht im Chat wie jeder andere Anbieter zur Verfügung.',
'settings.providers.page.custom.description': 'Fügen Sie einen Anbieter mit Basis-URL, Anmeldedaten, Modellliste und unterstütztem API-Protokoll hinzu. Wird zur Nutzung im Chat in der OpenCode-Konfiguration gespeichert.',
'settings.providers.page.custom.field.providerID.label': 'Anbieter-ID',
'settings.providers.page.custom.field.providerID.placeholder': 'mein-anbieter',
'settings.providers.page.custom.field.providerID.info': 'Kleinbuchstaben, Zahlen, Bindestriche und Unterstriche. Wird als OpenCode-Anbieter-ID verwendet.',
'settings.providers.page.custom.field.name.label': 'Anzeigename',
'settings.providers.page.custom.field.name.placeholder': 'Mein Anbieter',
'settings.providers.page.custom.field.name.info': 'Wird in den Anbieter- und Modellauswahlen angezeigt.',
'settings.providers.page.custom.field.protocol.label': 'API-Protokoll',
'settings.providers.page.custom.field.protocol.info': 'Wählen Sie das Anfrageformat, das diese API implementiert.',
'settings.providers.page.custom.field.protocol.openaiChat': 'OpenAI Chat Completions',
'settings.providers.page.custom.field.protocol.openaiResponses': 'OpenAI Responses',
'settings.providers.page.custom.field.protocol.anthropicMessages': 'Anthropic Messages',
'settings.providers.page.custom.field.baseURL.label': 'Basis-URL',
'settings.providers.page.custom.field.baseURL.placeholder': 'https://api.example.com/v1',
'settings.providers.page.custom.field.baseURL.info': 'OpenAI-kompatible API-Basis-URL. Muss mit http:// oder https:// beginnen.',
@@ -1321,6 +1429,17 @@ export const settingsDict = {
'settings.providers.page.auth.apiKeyPlaceholder': 'sk-...',
'settings.providers.page.auth.oauthMethodFallback': 'OAuth-Methode {index}',
'settings.providers.page.auth.pasteAuthorizationCodePlaceholder': 'Autorisierungscode einfügen',
'settings.providers.page.auth.oauth.starting': 'Autorisierung wird gestartet …',
'settings.providers.page.auth.oauth.waiting': 'Warten auf Autorisierung …',
'settings.providers.page.auth.oauth.waitingHint': 'Schließen Sie die Anmeldung im Browser ab. Lassen Sie diese Seite geöffnet – die Verbindung wird von selbst hergestellt.',
'settings.providers.page.auth.oauth.codeHint': 'Kopieren Sie den Autorisierungscode aus dem Browser und fügen Sie ihn hier ein.',
'settings.providers.page.auth.oauth.deviceCodeLabel': 'Gerätecode',
'settings.providers.page.auth.oauth.linkLabel': 'Autorisierungslink',
'settings.providers.page.auth.oauth.promptRequired': 'Füllen Sie „{field}“ aus, um fortzufahren',
'settings.providers.page.auth.oauth.error.sessionExpired': 'Die Autorisierungsanfrage ist abgelaufen. Verbinden Sie erneut, um sie neu zu starten.',
'settings.providers.page.auth.oauth.error.codeRequired': 'Dieser Anbieter benötigt den Autorisierungscode aus Ihrem Browser.',
'settings.providers.page.auth.oauth.error.declined': 'Die Autorisierung wurde abgelehnt oder nicht abgeschlossen.',
'settings.providers.page.auth.oauth.error.invalidInput': 'Die eingegebenen Angaben wurden abgelehnt.',
'settings.providers.page.auth.connected': 'Verbunden',
'settings.providers.page.auth.incomplete': 'Anmeldedaten fehlen',
'settings.providers.page.auth.incompleteHint': '· Fügen Sie einen API-Schlüssel oder {env:VAR} hinzu, bevor Sie diesen Anbieter im Chat verwenden',
@@ -1351,6 +1470,9 @@ export const settingsDict = {
'settings.providers.page.actions.open': 'Öffnen',
'settings.providers.page.actions.copy': 'Kopieren',
'settings.providers.page.actions.complete': 'Vervollständigen',
'settings.providers.page.actions.continue': 'Weiter',
'settings.providers.page.actions.cancel': 'Abbrechen',
'settings.providers.page.actions.tryAgain': 'Wiederholen',
'settings.providers.page.actions.hide': 'Ausblenden',
'settings.providers.page.actions.reconnect': 'Erneut verbinden',
'settings.providers.page.actions.edit': 'Bearbeiten',
@@ -1365,7 +1487,6 @@ export const settingsDict = {
'settings.providers.page.toast.apiKeySaved': 'API-Schlüssel gespeichert',
'settings.providers.page.toast.oauthStartFailed': 'Fehler beim Starten des OAuth-Flows',
'settings.providers.page.toast.oauthDetailsMissing': 'Keine OAuth-Details zurückgegeben',
'settings.providers.page.toast.completeOAuthInBrowser': 'Schließen Sie den OAuth-Flow in Ihrem Browser ab',
'settings.providers.page.toast.oauthCompleteFailed': 'Fehler beim Abschließen des OAuth-Flows',
'settings.providers.page.toast.oauthCompleted': 'OAuth-Verbindung abgeschlossen',
'settings.providers.page.toast.oauthLinkCopied': 'OAuth-Link kopiert',
@@ -1387,6 +1508,8 @@ export const settingsDict = {
'settings.mcp.page.status.label.failed': 'Fehlgeschlagen',
'settings.mcp.page.status.label.needsAuth': 'Autorisierung erforderlich',
'settings.mcp.page.status.label.needsRegistration': 'Registrierung erforderlich',
'settings.mcp.page.status.label.awaitingRestart': 'Wartet auf Neustart',
'settings.mcp.page.status.description.awaitingRestart': 'Dieser Server ist gespeichert, aber noch nicht übernommen. Verwenden Sie „Apply & Restart“, damit OpenCode ihn lädt — danach sind Verbindung und Autorisierung verfügbar.',
'settings.mcp.page.status.description.connected': 'Verbunden und bereit, Tools und Ressourcen zu entdecken.',
'settings.mcp.page.status.description.failedDefault': 'OpenCode konnte diesen MCP-Server nicht erreichen.',
'settings.mcp.page.status.description.needsAuth': 'Dieser entfernte MCP-Server erfordert Autorisierung, bevor eine Verbindung hergestellt werden kann.',
@@ -1745,9 +1868,6 @@ export const settingsDict = {
'settings.voice.page.field.ttsInputModeRaw': 'Rohes Markdown',
'settings.voice.page.field.ttsInputModeSummarized': 'zusammengefasst',
'settings.openchamber.visual.section.colorMode': 'Farbmodus',
'settings.openchamber.visual.section.mobileLayout': 'Mobiles Layout',
'settings.openchamber.visual.option.mobileLayout.default': 'Alt',
'settings.openchamber.visual.option.mobileLayout.new': 'Neu',
'settings.openchamber.visual.section.localization': 'Lokalisierung',
'settings.openchamber.visual.section.spacingAndLayout': 'Abstand & Layout',
'settings.openchamber.visual.section.navigation': 'Navigation',
@@ -1759,6 +1879,10 @@ export const settingsDict = {
'settings.openchamber.visual.section.showToolsOpenedByDefault': 'Werkzeuge standardmäßig geöffnet anzeigen:',
'settings.openchamber.visual.section.sessionAssistance': 'Sitzungshilfe',
'settings.openchamber.visual.section.reasoning': 'Reasoning',
'settings.openchamber.visual.section.streaming': 'Streaming',
'settings.openchamber.visual.field.streamingAutoFollow': 'Neuen Inhalten beim Streaming folgen',
'settings.openchamber.visual.field.streamingAutoFollowAria': 'Neuen Inhalten automatisch folgen, während eine Antwort gestreamt wird',
'settings.openchamber.visual.field.streamingAutoFollowInfo': 'Während eine Antwort eintrifft, folgt die Ansicht laufend dem neuesten Inhalt. Deaktivieren, um die Ansicht ruhig zu halten und manuell zu scrollen; das Senden einer Nachricht aus der Mitte des Chats lässt die Ansicht dann ebenfalls an Ort und Stelle.',
'settings.openchamber.visual.section.messageAppearance': 'Nachrichten-Erscheinungsbild',
'settings.openchamber.visual.section.toolsAndFiles': 'Werkzeuge & Dateien',
'settings.openchamber.visual.section.composer': 'Komponist',
@@ -1780,8 +1904,6 @@ export const settingsDict = {
'settings.openchamber.visual.field.selectWeekStartAria': 'Wochenstart auswählen',
'settings.openchamber.visual.actions.reloadThemes': 'Designs neu laden',
'settings.openchamber.visual.actions.reloadingThemes': 'Designs werden neu geladen...',
'settings.openchamber.visual.field.macVibrancy': 'Fenstertransparenz',
'settings.openchamber.visual.field.macVibrancyHint': 'Verwenden Sie den nativen macOS-Blur (Vibrancy) hinter der Seitenleiste. Ausschalten für vollständig solide, undurchsichtige Oberflächen.',
'settings.openchamber.visual.field.dockBadge': 'Dock-Badge',
'settings.openchamber.visual.field.dockBadgeHint': 'Zeigt eine Anzahl an Chats mit nicht gesehenem Aktivität auf dem macOS-Dock-Icon an.',
'settings.openchamber.visual.actions.saveAndRestart': 'Speichern & Neustart',
@@ -1822,6 +1944,10 @@ export const settingsDict = {
'settings.openchamber.visual.actions.resetInputBarOffsetAria': 'Versatz der Eingabeleiste zurücksetzen',
'settings.openchamber.visual.field.terminalQuickKeysAria': 'Schnelltasten des Terminals',
'settings.openchamber.visual.field.terminalQuickKeys': 'Schnelltasten des Terminals',
'settings.openchamber.visual.field.sessionTabsGroup': 'Sitzungs-Tabs',
'settings.openchamber.visual.field.sessionTabs': 'Sitzungen als Tabs in der Kopfzeile anzeigen',
'settings.openchamber.visual.field.sessionTabsAria': 'Sitzungs-Tabs in der Kopfzeile umschalten',
'settings.openchamber.visual.field.sessionTabsInfo': 'Geöffnete Sitzungen erscheinen als Tabs in der Kopfzeile. Ausgeschaltet zeigt die Kopfzeile wieder nur den Sitzungstitel.',
'settings.openchamber.visual.field.terminalQuickKeysTooltip': 'Esc, Strg, Pfeiltasten in der Terminalansicht anzeigen',
'settings.openchamber.visual.field.fileEditorKeymap': 'Tastaturlayout für Datei-Editor',
'settings.openchamber.visual.option.fileEditorKeymap.default': 'Standard',
@@ -1854,8 +1980,6 @@ export const settingsDict = {
'settings.openchamber.visual.field.stickyUserHeader': 'Fixierter Benutzerkopf',
'settings.openchamber.visual.field.promptNavigatorEnabledAria': 'Prompt-Navigator',
'settings.openchamber.visual.field.promptNavigatorEnabled': 'Prompt-Navigator',
'settings.openchamber.visual.field.expandedEditorToolbarAria': 'Editor-Werkzeugleiste immer anzeigen',
'settings.openchamber.visual.field.expandedEditorToolbar': 'Editor-Werkzeugleiste immer anzeigen (unter den Datei-Reitern angeheftet)',
'settings.openchamber.visual.field.wideChatLayoutAria': 'Breites Chat-Layout',
'settings.openchamber.visual.field.wideChatLayout': 'Breites Chat-Layout',
'settings.openchamber.visual.field.codeBlockLineWrapAria': 'Codeblock-Zeilen umbrechen',
@@ -2069,9 +2193,6 @@ export const settingsDict = {
'settings.openchamber.desktopNetwork.field.macMenuBarDescription': 'Erfordert einen Neustart der App. Wenn deaktiviert, erstellt OpenChamber weder den Menüleisten-Eintrag noch führt es dessen Sitzungs-, Genehmigungs- und Nutzungsaktualisierungen aus.',
'settings.openchamber.desktopPassword.actions.showPassword': 'Passwort anzeigen',
'settings.openchamber.desktopPassword.actions.hidePassword': 'Passwort verbergen',
'settings.openchamber.opencodeCli.field.agentControlTool': 'Agenten-Steuerungswerkzeug',
'settings.openchamber.opencodeCli.field.agentControlToolAria': 'Das Agenten-Steuerungswerkzeug aktivieren',
'settings.openchamber.opencodeCli.field.agentControlToolInfo': 'Lässt Agenten deine Arbeit per Chat orchestrieren: Sitzungen und Arbeitsbereiche starten, Prompts an andere Agenten delegieren und geplante Aufgaben verwalten. Fügt jeder Sitzung eine kleine Werkzeugbeschreibung hinzu. Gilt nach Speichern + Neuladen.',
'settings.openchamber.defaults.walkthroughModel.title': 'Walkthrough-Modell ändern',
'settings.openchamber.defaults.walkthroughModel.description': 'Die KI-Prüfung deiner Änderungen benötigt strukturierten Output und Platz für einen ganzen Diff, den ein günstiges kleines Modell oft nicht liefern kann. Modelle, die der Katalog als nicht in der Lage zu strukturiertem Output meldet, werden in diesem Auswahlfeld ausgeblendet. Lasse es leer, dann wird das kleine Modell verwendet.',
'settings.openchamber.defaults.walkthroughModel.overrideModel': 'Walkthrough-Modell',
@@ -2097,4 +2218,5 @@ export const settingsDict = {
'settings.openchamber.visual.option.themeMode.light.description': 'Immer helles Erscheinungsbild verwenden',
'settings.openchamber.visual.option.themeMode.dark.description': 'Immer dunkles Erscheinungsbild verwenden',
'chat.message.userText.collapseAria': 'Benutzernachricht einklappen',
...thirdPartyIntegrationI18n.de,
};
+379 -41
View File
@@ -15,6 +15,7 @@ export const dict = {
'common.language.korean': 'Koreanisch',
'common.language.polish': 'Polnisch',
'common.language.japanese': 'Japanisch',
'common.language.turkish': 'Türkisch',
'common.revealPath.finder': 'Im Finder anzeigen',
'common.revealPath.fileExplorer': 'In Datei-Explorer öffnen',
'common.revealPath.fileManager': 'In Dateimanager öffnen',
@@ -76,6 +77,11 @@ export const dict = {
'mobile.instances.status.connectedDirect': 'Verbunden · Lokales Netzwerk',
'mobile.instances.status.connectedRelay': 'Verbunden · Privater Relay',
'mobile.instances.saveEdit': 'Änderungen speichern',
'mobile.connectionDebug.title': 'Verbindungsprotokoll',
'mobile.connectionDebug.copy': 'Kopieren',
'mobile.connectionDebug.copied': 'Kopiert',
'mobile.connectionDebug.close': 'Schließen',
'mobile.connectionDebug.empty': 'Noch keine Verbindungsereignisse.',
'mobile.nav.changes': 'Änderungen',
'mobile.nav.settings': 'Einstellungen',
'mobile.surface.closeAria': 'Schließen',
@@ -97,6 +103,7 @@ export const dict = {
'mobile.sessions.section.worktrees': 'Worktrees',
'mobile.sessions.section.otherProjects': 'Projekt wechseln',
'mobile.sessions.section.projects': 'Projekte',
'mobile.sessions.section.chats': 'Chats',
'mobile.sessions.empty.noProjectsTitle': 'Noch keine Projekte',
'mobile.sessions.empty.noProjectsDescription': 'Füge ein Projekt hinzu, um mit deinem Code zu chatten.',
'mobile.sessions.empty.noSessionsTitle': 'Noch keine Sitzungen',
@@ -211,8 +218,10 @@ export const dict = {
'sessions.scheduledTasks.dialog.toast.deleted': 'Geplante Aufgabe gelöscht',
'sessions.scheduledTasks.dialog.toast.deleteFailed': 'Fehler beim Löschen der Aufgabe',
'sessions.scheduledTasks.dialog.toast.started': 'Aufgabe gestartet',
'sessions.scheduledTasks.dialog.toast.startedPersistWarning': 'Aufgabe gestartet, aber der Status konnte nicht gespeichert werden. Sie wird möglicherweise weiterhin als laufend angezeigt, bis der nächste erfolgreiche Lauf abgeschlossen ist.',
'sessions.scheduledTasks.dialog.toast.runFailed': 'Fehler beim Ausführen der Aufgabe',
'sessions.scheduledTasks.dialog.confirm.deleteTask': 'Geplante Aufgabe "{taskName}" löschen?',
'sessions.scheduledTasks.dialog.confirm.deleteLoopFile': 'Loop-Aufgabe „{taskName}“ und ihre Markdown-Datei löschen?',
'sessions.scheduledTasks.dialog.schedule.daily': 'Täglich {time}',
'sessions.scheduledTasks.dialog.schedule.dailyWithTimezone': 'Täglich {time} ({timezone})',
'sessions.scheduledTasks.dialog.schedule.weekly': 'Wöchentlich {days} {time}',
@@ -248,6 +257,9 @@ export const dict = {
'sessions.scheduledTasks.dialog.taskToggle.pauseAria': '{taskName} pausieren',
'sessions.scheduledTasks.dialog.taskToggle.enabled': 'Aktiviert',
'sessions.scheduledTasks.dialog.taskToggle.paused': 'Pausiert',
'sessions.scheduledTasks.dialog.loopFile.note': 'Von Loop-Datei verwaltet {file}',
'sessions.scheduledTasks.dialog.loopFile.toggleDisabled': 'Aktiviert wird durch die Loop-Datei gesteuert; setze enabled im Markdown-Frontmatter',
'sessions.scheduledTasks.dialog.loopFile.actionsDisabled': 'Loop-Aufgaben werden in ihrer .agents/loops-Markdown-Datei konfiguriert',
'sessions.scheduledTasks.editor.title.edit': 'Geplante Aufgabe bearbeiten',
'sessions.scheduledTasks.editor.title.new': 'Neue geplante Aufgabe',
'sessions.scheduledTasks.editor.description': 'Konfigurieren Sie eine serverseitige Aufgabe, die eine neue Sitzung erstellt und eine Eingabeaufforderung sendet.',
@@ -338,7 +350,7 @@ export const dict = {
'multirun.launcher.attachments.attach': 'Anhängen',
'multirun.launcher.attachments.tooltip': 'Denselben Dateien an alle Durchläufe senden',
'multirun.launcher.models.label': 'Modelle',
'multirun.launcher.models.info': 'Wählen Sie 2-{max} Modelle. Das gleiche Modell kann mehrfach hinzugefügt werden.',
'multirun.launcher.models.info': 'Wählen Sie 2 oder mehr Modelle. Das gleiche Modell kann mehrfach hinzugefügt werden.',
'multirun.launcher.toast.fileTooLarge': 'Datei "{fileName}" ist zu groß (max. 10MB)',
'multirun.launcher.toast.attachFailed': 'Fehler beim Anhängen von "{fileName}"',
'multirun.launcher.toast.attachedSingle': '{count} Datei angehängt',
@@ -405,7 +417,14 @@ export const dict = {
'sessions.sidebar.empty.noMatches.title': 'Keine passenden Sitzungen',
'sessions.sidebar.empty.noMatches.description': 'Versuchen Sie einen anderen Titel, Branch, Ordner oder Pfad.',
'sessions.sidebar.activity.recentTitle': 'kürzlich',
'sessions.sidebar.activity.chatsTitle': 'Chats',
'sessions.sidebar.activity.chatsEmpty': 'Noch keine Chats.',
'chat.chatInput.chooseProject': 'Projekt auswählen',
'sessions.switcher.openAria': 'Sitzungswechsler öffnen',
'header.sessionTabs.stripAria': 'Offene Sitzungen',
'header.sessionTabs.tabMenuAria': 'Aktionen für den Sitzungs-Tab',
'header.sessionTabs.closeTab': 'Tab schließen',
'header.sessionTabs.closeOtherTabs': 'Andere Tabs schließen',
'sessions.switcher.empty': 'Keine kürzlichen Sitzungen',
'sessions.switcher.draftTitle': 'Neue Sitzung',
'sessions.sidebar.updateCheck.errorTitle': 'Fehler beim Prüfen auf Aktualisierungen',
@@ -473,6 +492,10 @@ export const dict = {
'sessions.sidebar.session.status.unread': 'Ungelesene Updates',
'sessions.sidebar.session.status.pinned': 'Angeheftete Sitzung',
'sessions.sidebar.session.status.permissionRequired': 'Berechtigung erforderlich',
'sessions.sidebar.session.status.questionPendingSingle': '1 ausstehende Frage',
'sessions.sidebar.session.status.questionPendingMany': '{count} ausstehende Fragen',
'sessions.sidebar.session.status.activeFor': 'Seit {duration} aktiv',
'sessions.sidebar.session.status.lastTurnDuration': 'Letzter Durchlauf dauerte {duration}',
'sessions.sidebar.session.subsessions.collapse': 'Untersitzungen einklappen',
'sessions.sidebar.session.subsessions.expand': 'Untersitzungen ausklappen',
'sessions.sidebar.dialogs.deleteSession.title': 'Sitzung löschen?',
@@ -919,6 +942,8 @@ export const dict = {
'gitView.pr.field.draft': 'Entwurf',
'gitView.pr.field.title': 'Titel',
'gitView.pr.githubNotConnected': 'GitHub ist nicht verbunden',
'gitView.pr.history.merged': 'PR #{number} wurde in {base} gemergt.',
'gitView.pr.history.closed': 'PR #{number} wurde geschlossen.',
'gitView.pr.loadingDescription': 'Beschreibung wird geladen...',
'gitView.pr.mergeMethod.merge': 'Einen Merge-Commit erstellen',
'gitView.pr.mergeMethod.rebase': 'Rebase und Merge',
@@ -1032,9 +1057,62 @@ export const dict = {
'contextPanel.mode.browser': 'Browser',
'contextPanel.browser.open': 'Browser-Panel öffnen',
'contextPanel.browser.addressAria': 'Browser-Adresse',
'contextPanel.browser.history.label': 'Zuletzt besuchte Adressen',
'contextPanel.browser.history.forget': 'Aus dem Verlauf entfernen',
'contextPanel.browser.newTab': 'Neuer Browser-Tab',
'contextPanel.browser.empty': 'Webbrowser',
'contextPanel.browser.emptyHint': 'Geben Sie oben eine Adresse ein, um mit dem Surfen im Web zu beginnen',
'contextPanel.browser.inspectUnavailable': 'Diese Seite kann nicht aus dem Browser-Panel inspectiert werden.',
'contextPanel.browser.back': 'Zurück',
'contextPanel.browser.forward': 'Vorwärts',
'contextPanel.browser.reload': 'Neu laden',
'contextPanel.browser.hardReload': 'Ohne Cache neu laden',
'contextPanel.browser.zoomIn': 'Vergrößern',
'contextPanel.browser.zoomOut': 'Verkleinern',
'contextPanel.browser.zoomReset': 'Zoom zurücksetzen',
'contextPanel.browser.clearCookies': 'Cookies löschen',
'contextPanel.browser.clearCache': 'Cache löschen',
'contextPanel.browser.clearedCookies': 'Cookies gelöscht',
'contextPanel.browser.clearedCache': 'Cache gelöscht',
'contextPanel.browser.clearFailed': 'Browserdaten konnten nicht gelöscht werden',
'contextPanel.browser.stop': 'Stoppen',
'contextPanel.browser.openExternal': 'Im Systembrowser öffnen',
'contextPanel.browser.devTools': 'DevTools öffnen',
'contextPanel.browser.deviceToolbar': 'Geräteleiste umschalten',
'contextPanel.browser.device.preset': 'Gerätevorlage',
'contextPanel.browser.device.responsive': 'Responsiv',
'contextPanel.browser.device.width': 'Viewport-Breite',
'contextPanel.browser.device.height': 'Viewport-Höhe',
'contextPanel.browser.device.rotate': 'Drehen',
'contextPanel.browser.device.schemeSystem': 'Auto',
'contextPanel.browser.device.schemeLight': 'Hell',
'contextPanel.browser.device.schemeDark': 'Dunkel',
'contextPanel.browser.device.schemeFailed': 'Das Seitenaussehen konnte nicht geändert werden',
'contextPanel.browser.frameTitle': 'Browser',
'contextPanel.browser.loadFailed': 'Diese Seite konnte nicht geladen werden',
'contextPanel.browser.waitingForServer': 'Warte auf den Dev-Server',
'contextPanel.browser.waitingForServerHint': 'Er nimmt noch keine Verbindungen an. Die Seite lädt, sobald er es tut.',
'contextPanel.browser.tunnelFailed': 'Dieser Dev-Server war nicht erreichbar',
'contextPanel.browser.tunnelFailedHint': '{url} läuft auf der Maschine, auf der OpenChamber läuft, und die Verbindung dorthin ließ sich nicht öffnen. Von deiner eigenen Maschine wird hier nichts angezeigt.',
'contextPanel.browser.loadFailedUnknown': 'Die Seite war nicht erreichbar.',
'contextPanel.browser.crashed': 'Diese Seite reagiert nicht mehr',
'contextPanel.browser.crashedHint': 'Die Seite ist mehrfach abgestürzt. Lade neu, um es erneut zu versuchen.',
'contextPanel.browser.devServers.title': 'Laufende Dev-Server',
'projectActions.toast.multipleServers': 'Mehrere Server gestartet — wähle einen im Browser-Panel',
'contextPanel.browser.devServers.justStarted': 'Gerade gestartet',
'contextPanel.browser.devServers.unavailable': 'Laufende Dev-Server konnten nicht geprüft werden.',
'contextPanel.browser.devServers.remoteOnly': 'Diese laufen auf dem Rechner, der OpenChamber hostet. Zum Öffnen wird die Desktop-App benötigt.',
'contextPanel.browser.annotate.toggle': 'Seite annotieren',
'contextPanel.browser.annotate.intro': 'Dies ist eine annotierte Auswahl aus dem integrierten Browser.',
'contextPanel.browser.annotate.attached': 'Annotation an den Chat angehängt',
'contextPanel.browser.annotate.noSession': 'Öffne eine Chat-Sitzung, bevor du eine Annotation anhängst',
'contextPanel.browser.annotate.noPage': 'Lade eine Seite, bevor du annotierst',
'contextPanel.browser.annotate.failed': 'Diese Seite konnte nicht annotiert werden',
'contextPanel.browser.annotate.tool.element': 'Element',
'contextPanel.browser.annotate.tool.region': 'Bereich',
'contextPanel.browser.annotate.tool.draw': 'Zeichnen',
'contextPanel.browser.annotate.commentPlaceholder': 'Änderung beschreiben...',
'contextPanel.browser.annotate.submit': 'Anhängen',
'contextPanel.browser.trustNotice': 'Seiten, die hier geöffnet werden, laufen mit vollständigem Zugriff auf OpenChamber — erforderlich für Inspect und Screenshots. Öffnen Sie nur Seiten, denen Sie vertrauen: Eine bösartige Seite könnte Ihre Daten lesen oder in Ihrem Namen handeln.',
'contextPanel.tab.closeTabAria': '{label}-Registerkarte schließen',
'contextPanel.actions.collapsePanel': 'Panel einklappen',
@@ -1103,6 +1181,14 @@ export const dict = {
'sidebarFilesTree.toast.writeNotSupported': 'Schreiben nicht unterstützt',
'sidebarFilesTree.toast.fileCreated': 'Datei erstellt',
'sidebarFilesTree.toast.operationFailed': 'Operation fehlgeschlagen',
'sidebarFilesTree.toast.uploaded': 'Dateien hochgeladen',
'sidebarFilesTree.toast.uploadedWithoutConflicts': 'Dateien ohne Konflikte wurden hochgeladen',
'sidebarFilesTree.toast.uploadFailed': 'Einige Dateien konnten nicht hochgeladen werden',
'sidebarFilesTree.drop.target': 'In {path} hochladen',
'sidebarFilesTree.drop.uploading': 'Dateien werden in {path} hochgeladen',
'sidebarFilesTree.dialog.uploadConflicts.title': 'Vorhandene Dateien ersetzen?',
'sidebarFilesTree.dialog.uploadConflicts.description': 'Dateien mit diesen Namen sind in {path} bereits vorhanden. Das Ersetzen kann nicht rückgängig gemacht werden.',
'sidebarFilesTree.dialog.uploadConflicts.replace': 'Ersetzen',
'sidebarFilesTree.toast.folderNameRequired': 'Ordnername ist erforderlich',
'sidebarFilesTree.toast.folderCreated': 'Ordner erstellt',
'sidebarFilesTree.toast.nameRequired': 'Name ist erforderlich',
@@ -1158,6 +1244,12 @@ export const dict = {
'filesView.editor.disableLineWrap': 'Zeilenumbruch deaktivieren',
'filesView.editor.enableLineWrap': 'Zeilenumbruch aktivieren',
'filesView.editor.findInFile': 'In Datei suchen',
'filesView.preview.find.placeholder': 'In Vorschau suchen',
'filesView.preview.find.nextAria': 'Nächster Treffer',
'filesView.preview.find.previousAria': 'Vorheriger Treffer',
'filesView.preview.find.closeAria': 'Suche schließen',
'filesView.preview.find.noMatches': 'Keine Treffer',
'filesView.preview.find.countAria': '{current} von {total}',
'filesView.editor.goToLine': 'Gehe zu Zeile',
'filesView.editor.switchToEditMode': 'Zum Bearbeitungsmodus wechseln',
'filesView.editor.switchToPreviewMode': 'Zum Vorschau-Modus wechseln',
@@ -1207,10 +1299,12 @@ export const dict = {
'contextUsage.mobile.usedTokens': 'Verwendete Tokens',
'contextUsage.mobile.contextLimit': 'Kontextlimit',
'contextUsage.mobile.outputLimit': 'Ausgabelimit',
'contextUsage.mobile.cost': 'Kosten',
'contextUsage.mobile.usage': 'Nutzung',
'contextUsage.tooltip.usedTokens': 'Verwendete Tokens: {tokens}',
'contextUsage.tooltip.contextLimit': 'Kontextlimit: {tokens}',
'contextUsage.tooltip.outputLimit': 'Ausgabelimit: {tokens}',
'contextUsage.tooltip.cost': 'Kosten: {cost}',
'contextSidebar.session.untitled': 'Unbenannte Sitzung',
'contextSidebar.empty.openSession': 'Öffnen Sie eine Sitzung, um den Kontext zu prüfen.',
'contextSidebar.section.context': 'Kontext',
@@ -1237,6 +1331,7 @@ export const dict = {
'planView.file.defaultName': 'plan',
'planView.title.default': 'Plan',
'planView.error.saveFailed': 'Speichern fehlgeschlagen',
'planView.error.loadFailed': 'Plan konnte nicht geladen werden',
'planView.error.previewUnavailable': 'Vorschau nicht verfügbar',
'planView.error.switchToEditMode': 'Wechseln Sie zum Bearbeitungsmodus, um das Problem zu beheben.',
'planView.error.writeFailed': 'Schreiben fehlgeschlagen',
@@ -1278,6 +1373,13 @@ export const dict = {
'diffView.scope.changed': 'Geändert',
'diffView.scope.staged': 'Staged',
'diffView.scope.lastTurn': 'Letzter Zug',
'diffView.scope.branch': 'Branch',
'diffView.branch.resolvingBase': 'Basis-Branch wird ermittelt...',
'diffView.branch.noBaseTitle': 'Kein Basis-Branch',
'diffView.branch.noBaseDescription': 'Git enthält keinen Eintrag, wo dieser Branch entstanden ist. Wähle einen Basis-Branch für den Vergleich.',
'diffView.branch.loadError': 'Branch-Änderungen konnten nicht geladen werden',
'diffView.branch.loadingFiles': 'Branch-Änderungen werden geladen...',
'diffView.branch.empty': 'Keine Änderungen in diesem Branch gegenüber {base}',
'diffView.scope.selectorAria': 'Änderungsmodus auswählen',
'diffView.actions.retry': 'Erneut versuchen',
'diffView.actions.renderAnyway': 'Trotzdem rendern',
@@ -1302,6 +1404,12 @@ export const dict = {
'diffView.reviewDialog.toast.noSessionDirectory': 'Sitzungsverzeichnis ist nicht verfügbar',
'diffView.reviewDialog.toast.startFailed': 'Fehler beim Starten des Überprüfungsflusses',
'chat.history.loadOlder': 'Ältere Nachrichten laden',
'chat.appLink.confirm.title': 'Diesen Link in einer anderen App öffnen?',
'chat.appLink.confirm.description': 'Dieser Chat-Link verwendet das {scheme}-Protokoll und wird in einer anderen App geöffnet.',
'chat.appLink.confirm.descriptionPlain': 'Dieser Chat-Link wird in einer anderen App geöffnet.',
'chat.appLink.confirm.cancel': 'Abbrechen',
'chat.appLink.confirm.open': 'Einmal öffnen',
'chat.appLink.confirm.trustAndOpen': 'Vertrauen und öffnen',
'chat.autoReview.title': 'Code-Überprüfungs-Schleife läuft',
'chat.autoReview.status.waitingForReviewer': 'Warte auf Überprüfer',
'chat.autoReview.status.waitingForImplementer': 'Warte auf Implementierer',
@@ -1319,11 +1427,46 @@ export const dict = {
'diffView.hunk.unsupported': 'Das Staging einzelner Stücke wird in dieser Laufzeitumgebung nicht unterstützt.',
'rightSidebar.contextNotesTodo.plan.defaultTitle': 'Plan',
'rightSidebar.contextNotesTodo.empty.selectProject': 'Wähle ein Projekt aus, um Notizen und Aufgaben hinzuzufügen.',
'rightSidebar.contextNotesTodo.notes.title': 'Schnelle Notizen - {project}',
'rightSidebar.contextNotesTodo.notes.placeholder': 'Kontext, Erinnerungen oder Links festhalten',
'rightSidebar.contextNotesTodo.todo.title': 'Aufgaben',
'rightSidebar.contextNotesTodo.todo.itemsSingle': '{count} Element',
'rightSidebar.contextNotesTodo.todo.itemsPlural': '{count} Elemente',
'rightSidebar.contextNotesTodo.notes.addAria': 'Notiz hinzufügen',
'rightSidebar.contextNotesTodo.notes.empty': 'Noch keine Notizen. Halte Kontext, Erinnerungen oder Links fest.',
'rightSidebar.contextNotesTodo.notes.actions.expand': 'Notiz aufklappen',
'rightSidebar.contextNotesTodo.notes.actions.collapse': 'Notiz zuklappen',
'rightSidebar.contextNotesTodo.notes.actions.delete': 'Notiz löschen',
'rightSidebar.contextNotesTodo.notes.actions.pin': 'An Agent-Kontext anheften',
'rightSidebar.contextNotesTodo.notes.actions.unpin': 'Vom Agent-Kontext lösen',
'rightSidebar.contextNotesTodo.notes.source.selection': 'Aus dem Chat',
'rightSidebar.contextNotesTodo.notes.source.agent': 'Vom Agenten',
'rightSidebar.contextNotesTodo.search.placeholder': 'Suchen',
'rightSidebar.contextNotesTodo.search.clear': 'Suche zurücksetzen',
'rightSidebar.contextNotesTodo.search.noResults': 'Nichts passt zu "{query}".',
'rightSidebar.contextNotesTodo.toast.deleteNoteFailed': 'Notiz konnte nicht gelöscht werden',
'rightSidebar.contextNotesTodo.toast.createNoteFailed': 'Notiz konnte nicht erstellt werden',
'rightSidebar.contextNotesTodo.tabs.notes': 'Notizen',
'rightSidebar.contextNotesTodo.tabs.todos': 'Todo',
'rightSidebar.contextNotesTodo.tabs.plans': 'Pläne',
'rightSidebar.contextNotesTodo.plans.actions.back': 'Zurück zu den Plänen',
'rightSidebar.contextNotesTodo.tabs.memory': 'Gedächtnis',
'rightSidebar.contextNotesTodo.sections.label': 'Bereiche des Projektkontexts',
'rightSidebar.contextNotesTodo.sections.resize': 'Breite der Bereichsleiste ändern',
'rightSidebar.contextNotesTodo.memory.scope.project': 'Projekt',
'rightSidebar.contextNotesTodo.memory.scope.label': 'Gedächtnisbereich',
'rightSidebar.contextNotesTodo.memory.scope.global': 'Über Sie',
'rightSidebar.contextNotesTodo.memory.type.fact': 'Fakt',
'rightSidebar.contextNotesTodo.memory.badge.new': 'neu',
'rightSidebar.contextNotesTodo.memory.flagged': 'Vom Agenten zurückgehalten — liest sich wie eine Anweisung',
'rightSidebar.contextNotesTodo.memory.badge.changed': 'geändert',
'rightSidebar.contextNotesTodo.memory.type.preference': 'Präferenz',
'rightSidebar.contextNotesTodo.memory.type.reference': 'Verweis',
'rightSidebar.contextNotesTodo.memory.actions.delete': 'Diesen Eintrag vergessen',
'rightSidebar.contextNotesTodo.memory.actions.editTitle': 'Titel des Eintrags',
'rightSidebar.contextNotesTodo.memory.actions.editBody': 'Text des Eintrags',
'rightSidebar.contextNotesTodo.memory.toast.saveFailed': 'Eintrag konnte nicht gespeichert werden',
'rightSidebar.contextNotesTodo.memory.toast.deleteFailed': 'Eintrag konnte nicht vergessen werden',
'rightSidebar.contextNotesTodo.memory.empty.nothing': 'Der Agent hat hier noch nichts gespeichert.',
'rightSidebar.contextNotesTodo.memory.empty.noMatches': 'Kein gespeicherter Eintrag passt zur Suche.',
'rightSidebar.contextNotesTodo.memory.empty.noProject': 'Öffnen Sie ein Projekt, um zu sehen, woran sich der Agent erinnert.',
'rightSidebar.contextNotesTodo.memory.empty.unavailable': 'Gespeichertes Gedächtnis konnte nicht geladen werden. Es ging nichts verloren — bitte erneut versuchen.',
'rightSidebar.contextNotesTodo.todo.clearCompleted': 'Abgeschlossene löschen',
'rightSidebar.contextNotesTodo.todo.inputPlaceholder': 'Eine Aufgabe hinzufügen',
'rightSidebar.contextNotesTodo.todo.addAria': 'Aufgabe hinzufügen',
@@ -1334,13 +1477,9 @@ export const dict = {
'rightSidebar.contextNotesTodo.todo.actions.delete': 'Lösche "{text}"',
'rightSidebar.contextNotesTodo.todo.actions.send': 'Sende "{text}"',
'rightSidebar.contextNotesTodo.todo.actions.reorder': 'Ordne "{text}" neu',
'rightSidebar.contextNotesTodo.todo.resizeAria': 'Größe der Aufgabenliste ändern',
'rightSidebar.contextNotesTodo.todo.sendMenu.currentSession': 'An aktuelle Sitzung senden',
'rightSidebar.contextNotesTodo.todo.sendMenu.newSession': 'An neue Sitzung senden',
'rightSidebar.contextNotesTodo.todo.sendMenu.newWorktreeSession': 'An neue Worktree-Sitzung senden',
'rightSidebar.contextNotesTodo.plans.title': 'Pläne',
'rightSidebar.contextNotesTodo.plans.filesSingle': '{count} Datei',
'rightSidebar.contextNotesTodo.plans.filesPlural': '{count} Dateien',
'rightSidebar.contextNotesTodo.plans.importFromFile': 'Plan aus Datei importieren',
'rightSidebar.contextNotesTodo.plans.empty': 'Noch keine gespeicherten Pläne.',
'rightSidebar.contextNotesTodo.plans.deletePlan': 'Plan löschen',
@@ -1360,13 +1499,14 @@ export const dict = {
'rightSidebar.contextNotesTodo.toast.sentToNewSession': 'Todo an neue Sitzung gesendet',
'rightSidebar.contextNotesTodo.toast.sentToNewWorktreeSession': 'Todo an neue Worktree-Sitzung gesendet',
'rightSidebar.contextNotesTodo.toast.sendTodoFailed': 'Fehler beim Senden des Todos',
'rightSidebar.contextNotesTodo.toast.updatePlanFailed': 'Plan konnte nicht aktualisiert werden',
'rightSidebar.contextNotesTodo.toast.deletePlanFailed': 'Fehler beim Löschen des Plans',
'rightSidebar.contextNotesTodo.toast.planFileEmpty': 'Plan-Datei ist leer',
'rightSidebar.contextNotesTodo.toast.importPlanFailed': 'Fehler beim Importieren des Plans',
'rightSidebar.contextNotesTodo.toast.planImported': 'Plan importiert',
'rightSidebar.contextNotesTodo.toast.readPlanFileFailed': 'Fehler beim Lesen der Plan-Datei',
'inlineComment.range.lines': 'Zeilen {start}-{end}',
'inlineComment.input.placeholder': 'Kommentar hinzufügen... (Cmd+Enter zum Speichern)',
'inlineComment.input.placeholder': 'Kommentar hinzufügen... ({shortcut} zum Speichern)',
'inlineComment.input.placeholderShort': 'Kommentar hinzufügen...',
'inlineComment.actions.cancel': 'Abbrechen',
'inlineComment.actions.save': 'Speichern',
@@ -1385,8 +1525,6 @@ export const dict = {
'header.github.accountSource.cli': 'CLI',
'header.services.openWithCurrent': 'Instanz öffnen, Nutzung und MCP (aktuell: {current})',
'header.services.open': 'Dienste öffnen, Nutzung und MCP',
'header.services.tooltip.currentInstanceWithShortcuts': 'Aktuelle Instanz: {current} ({toggle}; nächster Tab {nextTab})',
'header.services.tooltip.servicesWithShortcuts': 'Dienste ({toggle}; nächster Tab {nextTab})',
'header.services.title': 'Dienste',
'header.services.viewAria': 'Dienste anzeigen',
'header.services.closeAria': 'Dienste schließen',
@@ -1403,7 +1541,6 @@ export const dict = {
'header.services.used': 'Verwendet',
'header.services.remaining': 'Verbleibend',
'header.services.modelFamily.other': 'Andere',
'header.services.shutdownDev': 'OpenChamber stoppen',
'header.actions.openPlanAria': 'Plan öffnen',
'header.actions.toggleChangesPanel': 'Änderungspanel',
'header.actions.toggleChangesPanelAria': 'Änderungspanel umschalten',
@@ -1492,6 +1629,10 @@ export const dict = {
'directoryExplorerDialog.browse.directories': 'Verzeichnisse',
'directoryExplorerDialog.browse.loading': 'Lade Verzeichnisse...',
'directoryExplorerDialog.browse.empty': 'Keine passenden Verzeichnisse.',
'directoryExplorerDialog.browse.permissionDenied': 'OpenChamber benötigt Zugriff auf diesen Ordner.',
'directoryExplorerDialog.browse.loadFailed': 'Dieser Ordner konnte nicht geladen werden.',
'directoryExplorerDialog.browse.grantAccess': 'Zugriff gewähren',
'directoryExplorerDialog.browse.retry': 'Erneut versuchen',
'directoryExplorerDialog.browse.parentDirectory': 'Übergeordnetes Verzeichnis',
'directoryExplorerDialog.browse.addedBadge': 'Hinzugefügt',
'directoryExplorerDialog.browse.quickAdd': 'Hinzufügen',
@@ -1551,22 +1692,18 @@ export const dict = {
'helpDialog.item.focusChatInput': 'Chat-Eingabe fokussieren',
'helpDialog.item.togglePromptNavigator': 'Aufforderungs-Navigator umschalten',
'helpDialog.item.abortActiveRun': 'Aktuelle Ausführung abbrechen (Doppeltaste)',
'helpDialog.item.toggleRightSidebar': 'Rechte Seitenleiste umschalten',
'helpDialog.item.openRightSidebarGitTab': 'Git-Registerkarte der rechten Seitenleiste öffnen',
'helpDialog.item.openRightSidebarFilesTab': 'Datei-Registerkarte der rechten Seitenleiste öffnen',
'helpDialog.item.toggleTerminalDock': 'Terminal-Dock umschalten',
'helpDialog.item.toggleTerminalExpanded': 'Terminal erweitert umschalten',
'helpDialog.item.togglePlanContextPanel': 'Plan-Kontext-Panel umschalten',
'helpDialog.item.cycleTheme': 'Thema wechseln (Hell → Dunkel → System)',
'helpDialog.item.switchProject': 'Projekt wechseln',
'helpDialog.item.switchSessionTab': 'Sitzungs-Tab wechseln',
'helpDialog.item.switchContextSurface': 'Kontextpanel-Oberfläche wechseln (Zahlentaste)',
'helpDialog.item.toggleServicesMenu': 'Dienstemenü umschalten',
'helpDialog.item.cycleServicesTab': 'Dienste-Registerkarte durchgehen',
'helpDialog.item.openSettings': 'Einstellungen öffnen',
'helpDialog.keyCombiner.or': 'oder',
'helpDialog.proTips.title': 'Pro-Tipps:',
'helpDialog.proTips.commandPalette': 'Verwenden Sie die Befehlspalette ({shortcut}), um schnell auf alle Aktionen zuzugreifen',
'helpDialog.proTips.recentSessions': 'Die 5 zuletzt verwendeten Sitzungen erscheinen in der Befehlspalette',
'helpDialog.proTips.themeCycling': 'Themenwechsel merken sich Ihre Einstellung über Sitzungen hinweg',
'helpDialog.proTips.leaderSequences': 'Zweistufige Kürzel: erst die Kombination, dann die zweite Taste — Esc bricht ab',
'header.actions.rightSidebarWithShortcut': 'Rechte Seitenleiste ({shortcut})',
'header.actions.toggleRightSidebarAria': 'Rechte Seitenleiste umschalten',
'header.actions.openAppMenu': 'OpenChamber-Menü',
@@ -1650,8 +1787,6 @@ export const dict = {
'session.newWorktree.noMatchingBranches': 'Keine übereinstimmenden Branches',
'session.newWorktree.localBranches': 'Lokale Branches',
'session.newWorktree.remoteBranches': 'Remote-Branches',
'session.newWorktree.otherLocalBranches': 'Andere lokale Branches',
'session.newWorktree.otherRemoteBranches': 'Andere Remote-Branches',
'session.newWorktree.branchName': 'Branch-Name',
'session.newWorktree.branchNamePlaceholder': 'feature/mein-geil-feature',
'session.newWorktree.actions.change': 'Ändern',
@@ -1774,7 +1909,6 @@ export const dict = {
'chat.statusRow.actions.stopGeneratingAria': 'Generierung stoppen',
'chat.statusRow.tasksTitle': 'Aufgaben',
'chat.statusRow.summary.activeLeft': '{active} aktiv · {left} übrig',
'chat.statusRow.aborted': 'Abgebrochen',
'chat.revertIndicator.redo': 'Wiederholen',
'chat.revertIndicator.redoAria': 'Wiederholen — wiederhergestellte Nachrichten',
'chat.revertPopover.title': 'Zurückgesetzt',
@@ -1788,6 +1922,9 @@ export const dict = {
'chat.revert.toast.undo': 'Zurückgesetzt auf {preview}',
'chat.revert.toast.redo': 'Wiederholt',
'chat.revert.toast.restored': 'Alle Nachrichten wiederhergestellt',
'chat.toast.opencodeRestartInterrupted.title': 'Chat unterbrochen',
'chat.toast.opencodeRestartInterrupted.description': 'OpenCode wurde neu gestartet, während noch eine Antwort lief. Senden Sie eine Nachricht, um fortzufahren.',
'chat.toast.opencodeRestartInterrupted.openSession': 'Sitzung öffnen',
'chat.errorBoundary.title': 'Chat-Fehler',
'chat.errorBoundary.description': 'Die Chat-Oberfläche hat einen Fehler festgestellt. Dies könnte auf ein vorübergehendes Netzwerkproblem oder beschädigte Nachrichtendaten zurückzuführen sein.',
'chat.errorBoundary.sessionLabel': 'Sitzung',
@@ -1812,6 +1949,7 @@ export const dict = {
'chat.commandAutocomplete.command.catchUpDescription': 'Kontext wiederherstellen: Was du getan hast und wo du weitermachen sollst.',
'chat.commandAutocomplete.command.debugDescription': 'Geführte Ursachenforschung für einen Fehler, bevor eine Lösung vorgeschlagen wird.',
'chat.commandAutocomplete.command.weighDescription': 'Zwei bis drei Ansätze mit Kompromissen und einer Empfehlung bewerten, bevor du dich entscheidest.',
'chat.commandAutocomplete.command.btwDescription': 'Stelle eine Neben-Frage in einer temporären Kind-Sitzung, ohne diesen Chat zu unterbrechen.',
'chat.commandAutocomplete.command.exploreDescription': 'Vertraut machen mit diesem Codebase: Eine Übersicht über die Architektur und Hauptbestandteile.',
'chat.commandAutocomplete.badge.skill': 'Fähigkeit',
'chat.commandAutocomplete.badge.command': 'Befehl',
@@ -1832,6 +1970,18 @@ export const dict = {
'chat.container.returnToParent.titleNamed': 'Zurück zu: {title}',
'chat.container.returnToParent.title': 'Zurück zur übergeordneten Sitzung',
'chat.container.returnToParent.label': 'Übergeordnet',
'chat.btw.destroyAria': 'Diese btw-Sitzung löschen',
'chat.btw.titleFallback': 'btw-Sitzung',
'chat.btw.mainComposerPlaceholder': 'In dieser btw-Sitzung fragen…',
'chat.btw.loading': 'btw-Sitzung wird gestartet…',
'chat.btw.toast.emptyArgument': 'Gib eine Frage nach /btw ein',
'chat.btw.toast.createFailed': 'Die btw-Sitzung konnte nicht gestartet werden',
'chat.btw.toast.destroyFailed': 'Die btw-Sitzung konnte nicht gelöscht werden. Sie bleibt in der Seitenleiste.',
'chat.btw.working': 'Arbeitet…',
'chat.btw.collapseAria': 'btw-Panel einklappen',
'chat.btw.expandAria': 'btw-Panel ausklappen',
'chat.btw.promoteAria': 'Als eigene Sitzung behalten',
'chat.btw.toast.promoteFailed': 'Die btw-Sitzung konnte nicht behalten werden',
'chat.container.readOnlySubagentPromptBanner': 'Subagent-Sitzungen können nicht abgefragt werden.',
'chat.unifiedControls.title': 'Steuerung',
'chat.unifiedControls.model.title': 'Modell',
@@ -1864,12 +2014,13 @@ export const dict = {
'chat.textSelection.toast.addToNotesFailed': 'Fehler beim Hinzufügen zu Notizen',
'chat.textSelection.toast.addToNotesSuccess': 'Ausgewählter Text zu Notizen hinzugefügt',
'chat.textSelection.toast.addToNotesSummaryFailed': 'Zusammenfassung der Auswahl nicht möglich, ausgewählter Text wurde zu Notizen hinzugefügt',
'chat.textSelection.actions.addToChat': 'Zum Chat hinzufügen',
'chat.textSelection.actions.newSession': 'Neue Sitzung',
'chat.textSelection.actions.copy': 'Kopieren',
'chat.textSelection.actions.addToInput': 'Zur Eingabe hinzufügen',
'chat.textSelection.actions.comment': 'Kommentieren',
'chat.textSelection.title.commentOnSelection': 'Auswahl kommentieren',
'chat.textSelection.comment.placeholder': 'Optionalen Kommentar hinzufügen...',
'chat.textSelection.comment.attach': 'Anhängen',
'chat.textSelection.actions.addToNotes': 'Zu Notizen hinzufügen',
'chat.textSelection.title.addToCurrentChat': 'Zum aktuellen Chat hinzufügen',
'chat.textSelection.title.newSessionWithSelection': 'Neue Sitzung mit Auswahl erstellen',
'chat.textSelection.title.saveInsightToNotes': 'Ausgewählten Text zu Notizen speichern',
'chat.messageBody.actions.revertAria': 'Zu dieser Nachricht zurückkehren',
'chat.messageBody.actions.revert': 'Von hier zurückkehren',
@@ -1962,6 +2113,7 @@ export const dict = {
'chat.chatInput.toast.attachmentsTooLarge': 'Anhänge sind zu groß zum Senden. Bitte versuche, die Anzahl oder Größe der Bilder zu reduzieren.',
'chat.chatInput.toast.sendAttachmentsFailed': 'Fehler beim Senden der Anhänge. Versuche weniger Dateien oder kleinere Bilder.',
'chat.chatInput.toast.messageSendFailed': 'Nachricht konnte nicht gesendet werden. Anhänge wurden wiederhergestellt.',
'chat.chatInput.toast.noModelSelected': 'Wähle vor dem Senden einen Anbieter und ein Modell aus.',
'chat.chatInput.toast.clipboardAttachFailed': 'Fehler beim Anhängen des Bildes aus der Zwischenablage',
'chat.chatInput.toast.clipboardTextAttachFailed': 'Fehler beim Anhängen des eingefügten Texts als Datei',
'chat.chatInput.toast.largeTextPaste.title': 'Großer Text erkannt',
@@ -1976,8 +2128,6 @@ export const dict = {
'chat.chatInput.toast.togglePermissionAutoAcceptFailed': 'Fehler beim Umschalten der automatischen Zustimmung zur Berechtigung',
'chat.chatInput.reviewComments': 'Kommentare zur Überprüfung:',
'chat.chatInput.reviewCommentsRemove': 'Kommentare zur Überprüfung entfernen',
'chat.chatInput.devServerLogs': 'Entwicklungsserver-Protokolle:',
'chat.chatInput.devServerLogsRemove': 'Entwicklungsserver-Protokolle entfernen',
'chat.chatInput.previewAnnotations': 'Vorschau-Anmerkungen:',
'chat.chatInput.previewContext': 'Vorschau-Kontext:',
'chat.chatInput.previewContextRemove': 'Vorschau-Kontext entfernen',
@@ -2016,6 +2166,7 @@ export const dict = {
'chat.toolPart.showRawJson': 'Rohe JSON anzeigen',
'chat.toolPart.showFormattedJson': 'Formatierte JSON anzeigen',
'chat.toolPart.showNavigableJson': 'Navigierbare JSON anzeigen',
'chat.toolPart.openFile': 'Datei öffnen',
'chat.toolPart.openFileAtFirstChange': 'Datei bei erster Änderung öffnen',
'chat.toolPart.openFileDiff': 'Datei-Unterschied öffnen',
'chat.toolPart.copyOutput': 'Ausgabe kopieren',
@@ -2147,6 +2298,15 @@ export const dict = {
'commandPalette.item.toggleSidebar': 'Seitenleiste umschalten',
'commandPalette.item.showContextUsage': 'Kontextnutzung anzeigen',
'commandPalette.item.toggleTerminal': 'Terminal umschalten',
'commandPalette.item.cycleTheme': 'Thema wechseln',
'commandPalette.item.showOpenCodeStatus': 'OpenCode-Status anzeigen',
'commandPalette.item.toggleMemoryDebug': 'Memory-Debug-Panel umschalten',
'commandPalette.item.pinSession': 'Sitzung anheften oder lösen',
'commandPalette.item.copySessionId': 'Sitzungs-ID kopieren',
'commandPalette.item.openMultiRun': 'Multi-Run-Launcher öffnen',
'commandPalette.item.openArchive': 'Archivierte Sitzungen öffnen',
'commandPalette.item.openNotes': 'Notizbereich öffnen',
'commandPalette.item.openTodos': 'To-do-Bereich öffnen',
'commandPalette.item.openSettings': 'Einstellungen öffnen...',
'commandPalette.session.untitled': 'Unbenannte Sitzung',
'openCodeStatusDialog.title': 'OpenCode-Status',
@@ -2360,6 +2520,9 @@ export const dict = {
'sessionAuth.error.passkeySignInCanceled': 'Passkey-Anmeldung wurde abgebrochen.',
'sessionAuth.error.enterPasswordForPasskey': 'Geben Sie Ihr Passwort ein, um einen Passkey hinzuzufügen.',
'sessionAuth.locked.tunnelTitle': 'Tunnel-Zugriff erforderlich',
'sessionAuth.expired.banner': 'Deine Sitzung ist abgelaufen — melde dich an, um fortzufahren.',
'sessionAuth.expired.loginAction': 'Anmelden',
'sessionAuth.expired.sendBlocked': 'Sitzung abgelaufen — melde dich an, um Nachrichten zu senden.',
'sessionAuth.locked.unlockTitle': 'OpenChamber entsperren',
'sessionAuth.locked.tunnelDescription': 'Öffnen Sie diesen Tunnel über den Einmal-Verbindungslink aus der Desktop-Anwendung.',
'sessionAuth.locked.passwordDescription': 'Diese Sitzung ist passwortgeschützt.',
@@ -2638,6 +2801,10 @@ export const dict = {
'updateDialog.status.updating': 'Aktualisierung läuft...',
'updateDialog.error.updateFailed': 'Aktualisierung fehlgeschlagen',
'updateDialog.error.takingLonger': 'Die Aktualisierung dauert länger als erwartet. Warten Sie einen Moment und aktualisieren Sie die Seite oder führen Sie folgenden Befehl aus: openchamber update',
'updateDialog.error.signatureRejected': 'Das heruntergeladene Update wurde abgelehnt: Seine Codesignatur passt nicht zu dieser Installation. Meist bedeutet das, dass die laufende Kopie nicht aus einer offiziellen signierten Version stammt. Installieren Sie OpenChamber aus einer offiziellen Version und aktualisieren Sie erneut.',
'updateDialog.error.updaterDisabled': 'Der Updater wurde nach einer fehlgeschlagenen Installation gestoppt. Beenden Sie OpenChamber, öffnen Sie es erneut und versuchen Sie das Update noch einmal.',
'updateDialog.error.restartFailed': 'Neustart zum Installieren des Updates fehlgeschlagen.',
'updateDialog.error.restartUnavailable': 'Das Installieren des Updates erfordert die OpenChamber-Desktop-App.',
'mobileUpdate.toast.available.title': 'OpenChamber-Update verfügbar',
'mobileUpdate.toast.available.description': 'Version {version} ist für Android bereit.',
'mobileUpdate.toast.actions.download': 'Herunterladen',
@@ -2658,6 +2825,7 @@ export const dict = {
'memoryDebugPanel.title': 'Debug Panel',
'memoryDebugPanel.tabs.memory': 'Speicher',
'memoryDebugPanel.tabs.streaming': 'Streaming',
'memoryDebugPanel.tabs.requests': 'Anfragen',
'memoryDebugPanel.section.sessionsInMemory': 'Sitzungen im Speicher',
'memoryDebugPanel.section.uiStreamingMetrics': 'UI-Streaming-Metriken',
'memoryDebugPanel.section.vscodeBridgeMetrics': 'VS Code Bridge Metriken',
@@ -2695,6 +2863,16 @@ export const dict = {
'memoryDebugPanel.streaming.copy.copied': 'Streaming-Debug-JSON kopiert',
'memoryDebugPanel.streaming.copy.failed': 'Fehler beim Kopieren der JSON-Datei',
'memoryDebugPanel.streaming.copy.hint': 'Kopieren exportiert sowohl UI- als auch VS Code-Streaming-Metriken als JSON',
'memoryDebugPanel.requests.inFlight': 'Laufend',
'memoryDebugPanel.requests.peak': 'Spitze',
'memoryDebugPanel.requests.duration': 'Dauer',
'memoryDebugPanel.requests.totalRequests': 'Gesamtanfragen',
'memoryDebugPanel.requests.tracking': 'Aufzeichnung',
'memoryDebugPanel.requests.now': 'jetzt',
'memoryDebugPanel.requests.noSamples': 'Noch keine Anfragen aufgezeichnet. Lassen Sie dieses Panel geöffnet, um Fetch-Aktivität zu erfassen.',
'memoryDebugPanel.requests.chartLabel': 'Laufende Fetch-Anfragen im Zeitverlauf, Spitze {peak}',
'memoryDebugPanel.requests.windowHint': 'letzte {seconds}s',
'memoryDebugPanel.requests.percentileChartLabel': 'Perzentile des Alters laufender Anfragen (p50, p90, p99, max) im Zeitverlauf',
'memoryDebugPanel.common.idle': 'inaktiv',
'memoryDebugPanel.common.live': 'live',
'memoryDebugPanel.common.notAvailable': 'n/a',
@@ -2732,18 +2910,23 @@ export const dict = {
'common.relative.daysAgoCompact': '{count}d her',
'common.relative.weeksAgoCompact': '{count}w her',
'common.relative.yearsAgoCompact': '{count}y her',
'common.duration.secondsCompact': '{seconds}s',
'common.duration.minutesSecondsCompact': '{minutes}m {seconds}s',
'common.duration.hoursMinutesCompact': '{hours}h {minutes}m',
'contextFileOpen.failure.tooLarge': 'Datei ist zu groß zum Öffnen (>{count} Zeilen)',
'contextFileOpen.failure.missing': 'Datei nicht gefunden',
'contextFileOpen.failure.unreadable': 'Fehler beim Öffnen der Datei',
'quota.window.5h': '5-Stunden-Limit',
'quota.window.7d': '7-Tage-Limit',
'quota.window.7dSonnet': '7-Tage Sonnet-Limit',
'quota.window.7dOpus': '7-Tage Opus-Limit',
'quota.window.weekly': 'Wöchentliches Limit',
'quota.window.extraUsage': 'Zusätzliche Nutzung',
'quota.window.weekly': 'Wöchentlich',
'quota.window.daily': 'Täglich',
'quota.window.monthly': 'Monatliches Limit',
'quota.window.monthly': 'Monatlich',
'quota.window.credits': 'Credits',
'quota.window.creditsBalance': 'Kreditguthaben',
'quota.window.monthlyCredits': 'Monatliche Credits',
'quota.window.purchasedCredits': 'Gekaufte Credits',
'quota.window.freeCredits': 'Kostenlose Credits',
'quota.window.billingCycle': 'Abrechnungszyklus',
'quota.window.auto': 'Automatisch',
'quota.window.api': 'API',
@@ -2753,10 +2936,23 @@ export const dict = {
'quota.window.premium': 'Premium-Interaktionen',
'quota.window.chat': 'Chat-Anfragen',
'quota.window.completions': 'Vervollständigungen',
'quota.window.premiumInteractions': 'Premium-Interaktionen',
'quota.window.premiumInteractions': 'KI-Guthaben',
'terminalView.actions.attachSelection': 'Ausgewählte Ausgabe anhängen',
'terminalView.actions.restart': 'Terminal neu starten',
'chat.message.terminalContext': '{terminal}, Zeilen {start}-{end}',
'chat.message.context.codeComment': 'Kommentar zu {file}, Zeilen {start}-{end}',
'chat.message.context.codeCommentLine': 'Kommentar zu {file}, Zeile {line}',
'chat.message.context.chatQuote': 'Zitat aus einer früheren Nachricht',
'chat.message.context.fileQuote': 'Auswahl aus {file}',
'chat.chatInput.chatQuoteContext': 'Chat-Zitate',
'chat.chatInput.chatQuoteContextRemove': 'Chat-Zitate entfernen',
'chat.chatInput.contextPreview.selectedLabel': 'Ausgewählter Text',
'chat.chatInput.contextPreview.commentLabel': 'Nutzerkommentar',
'chat.chatInput.contextPreview.edit': 'Kommentar bearbeiten',
'chat.chatInput.contextPreview.remove': 'Entfernen',
'chat.message.context.browserAnnotation': 'Browser-Anmerkung ({page})',
'chat.message.context.prComment': 'GitHub-PR-Kommentar ({label})',
'chat.message.context.prCheck': 'Fehlgeschlagener GitHub-PR-Check ({label})',
'chat.chatInput.terminalContext': '{terminal}, Zeilen {start}-{end}',
'chat.chatInput.terminalContextRemove': 'Terminal-Kontext entfernen',
'chat.chatInput.prCommentContext': 'PR-Kommentare',
@@ -2779,6 +2975,10 @@ export const dict = {
'sessions.archivePage.allDirectories': 'Alle Verzeichnisse',
'sessions.sidebar.header.displayMode.stickyHeaders': 'Angeheftete Projektüberschriften',
'sessions.sidebar.header.grouping.label': 'Sitzungen gruppieren',
'sessions.sidebar.header.projectDisplay.label': 'Projekte anzeigen',
'sessions.sidebar.header.projectDisplay.all': 'Alle Projekte',
'sessions.sidebar.header.projectDisplay.single': 'Ein Projekt',
'sessions.sidebar.project.selectAria': 'Projekt auswählen, aktuell {project}',
'sessions.sidebar.header.grouping.byWorktree': 'Nach Worktree',
'sessions.sidebar.header.grouping.flat': 'Flache Liste',
'sessions.sidebar.project.actions.manageWorktrees': 'Worktrees verwalten',
@@ -2804,11 +3004,33 @@ export const dict = {
'sessions.sidebar.session.copyId.success': 'Sitzungs-ID kopiert',
'sessions.sidebar.session.copyId.error': 'Sitzungs-ID konnte nicht kopiert werden',
'sessions.sidebar.session.menu.moveToWorktree': 'In neuen Worktree verschieben',
'sessions.sidebar.session.menu.moveToWorktreeTargets': 'In Worktree verschieben',
'sessions.sidebar.session.menu.newWorktree': 'Neuer Worktree...',
'sessions.sidebar.session.moveToWorktree.success': 'Sitzung in einen neuen Worktree verschoben',
'sessions.sidebar.session.moveToWorktree.failed': 'Sitzung konnte nicht in einen neuen Worktree verschoben werden',
'sessions.sidebar.session.moveToWorktree.tooltip': 'Erstellt einen neuen Worktree aus dem aktuellen Branch, überträgt nicht gespeicherte Änderungen und verschiebt diese Sitzung samt Untersitzungen dorthin.',
'sessions.sidebar.session.moveToWorktree.main': 'Haupt-Worktree',
'sessions.sidebar.session.moveToWorktree.refreshing': 'Worktrees werden aktualisiert...',
'sessions.sidebar.session.moveToWorktree.loadFailed': 'Worktrees konnten nicht geladen werden',
'sessions.sidebar.session.moveToWorktree.current': 'Aktueller Worktree',
'sessions.sidebar.session.moveToWorktree.existingSuccess': 'Sitzung in Worktree verschoben',
'sessions.sidebar.session.moveToWorktree.existingFailed': 'Sitzung konnte nicht in Worktree verschoben werden',
'sessions.sidebar.session.moveToWorktree.tooltipTargets': 'Zeigt vorhandene Worktrees und die Option, für diese Sitzung einen neuen zu erstellen.',
'sessions.sidebar.session.moveToWorktree.tooltip': 'Erstellt einen neuen Worktree aus dem aktuellen Branch und verschiebt diese Sitzung samt Untersitzungen dorthin. Bei ungespeicherten Änderungen in der Quelle wählst du, ob sie mit verschoben werden.',
'sessions.sidebar.session.moveToWorktree.tooltipBusy': 'Verfügbar, wenn die Sitzung inaktiv ist. Warten Sie oder beenden Sie die aktuelle Aktivität.',
'sessions.sidebar.session.moveToWorktree.tooltipMoving': 'Diese Sitzung wird bereits in einen neuen Worktree verschoben.',
'sessions.sidebar.session.moveToWorktree.confirm.title': 'Die Quelle hat ungespeicherte Änderungen',
'sessions.sidebar.session.moveToWorktree.confirm.changedFiles': 'Geänderte Dateien in diesem Worktree: {count}.',
'sessions.sidebar.session.moveToWorktree.confirm.ownership': 'OpenCode verfolgt diese Änderungen nach Verzeichnis, nicht nach Sitzung.',
'sessions.sidebar.session.moveToWorktree.confirm.sessionOnlyHelp': 'Verschiebt diese Sitzung und ihre Untersitzungen, ohne die Quelldateien zu verändern.',
'sessions.sidebar.session.moveToWorktree.confirm.allChangesHelp': 'Überträgt die Änderungen im Sitzungsverzeichnis. Nicht committete und unversionierte Dateien verlassen die Quelle nach Erfolg.',
'sessions.sidebar.session.moveToWorktree.confirm.stagedWarning': 'Gemappte (staged) Änderungen bleiben in der Quelle und werden ans Ziel kopiert.',
'sessions.sidebar.session.moveToWorktree.confirm.baseWarning': 'Die Übertragung kann fehlschlagen, wenn das Ziel eine andere Git-Basis verwendet.',
'sessions.sidebar.session.moveToWorktree.confirm.sessionOnly': 'Nur Sitzung verschieben',
'sessions.sidebar.session.moveToWorktree.confirm.allChanges': 'Alle Quelländerungen verschieben',
'sessions.sidebar.session.moveToWorktree.confirm.cancel': 'Abbrechen',
'sessions.sidebar.session.moveToWorktree.sourceVerificationFailed': 'Die Änderungen in der Quelle konnten nicht geprüft werden. Es wurde kein Worktree und keine Sitzung geändert.',
'sessions.sidebar.session.moveToWorktree.applyChangesFailed': 'Das Ziel konnte die Änderungen der Quelle nicht übernehmen. Sitzung und Änderungen wurden nicht verschoben. Versuche es erneut und wähle Nur Sitzung verschieben.',
'sessions.sidebar.session.moveToWorktree.changesMayBeInDestination': 'Die Verbindung brach ab, bevor das Ziel den Wechsel bestätigt hat. Die Sitzung wurde möglicherweise nicht verschoben, und deine nicht committeten Änderungen liegen eventuell schon im Ziel-Worktree. Sieh dort nach, bevor du es erneut versuchst.',
'sessions.sidebar.session.export.failedLoadHistory': 'Die vollständige Sitzungshistorie konnte nicht geladen werden',
'sessions.sidebar.session.status.movingToWorktree': 'Sitzung wird in einen neuen Worktree verschoben',
'gitView.header.updateBranch': 'Branch aktualisieren',
@@ -2822,11 +3044,20 @@ export const dict = {
'gitView.pr.segment.comments': 'Kommentare',
'gitView.pr.comments.addAll': 'Alle hinzufügen',
'contextPanel.mode.pr': 'PR',
'contextRail.configure.open': 'Panels konfigurieren',
'contextRail.configure.dialogTitle': 'Leisten-Panels',
'contextRail.configure.dialogDescription': 'Wähle, welche Panels die Leiste zeigt. Ausgeblendete Panels behalten ihre Daten und bleiben über die Befehlspalette erreichbar.',
'contextRail.configure.showAll': 'Alle anzeigen',
'contextRail.configure.noneWarning': 'Alle Panels sind ausgeblendet.',
'contextRail.aria.rail': 'Kontextleiste',
'contextPanel.editorEmpty.title': 'Kein Kontext ausgewählt',
'contextPanel.editorEmpty.description': 'Wählen Sie etwas aus der Seitenleiste aus, um Kontext anzuzeigen.',
'contextRail.surface.editor.description': 'Bearbeitungskontext',
'contextRail.surface.git.description': 'Git-Kontext',
'contextRail.surface.git.changesCountAriaSingle': '{label}, {count} geänderte Datei',
'contextRail.surface.git.changesCountAriaPlural': '{label}, {count} geänderte Dateien',
'contextRail.surface.git.changesCountTooltipSingle': '{count} geänderte Datei',
'contextRail.surface.git.changesCountTooltipPlural': '{count} geänderte Dateien',
'contextRail.surface.terminal.description': 'Terminal-Kontext',
'contextRail.surface.diff.description': 'Diff-Kontext',
'contextPanel.mode.walkthrough': 'Walkthrough',
@@ -2857,17 +3088,20 @@ export const dict = {
'walkthrough.empty.title': 'Noch nichts vorhanden',
'walkthrough.empty.description': 'Wählen Sie Inhalte aus, um einen Walkthrough zu erstellen.',
'walkthrough.stale.banner': 'Der Code hat sich nach diesem Review geändert. Veraltete Schritte: {count}',
'walkthrough.stop.staleAll': 'Alle veralteten Inhalte stoppen',
'walkthrough.stop.staleAll': 'Der gesamte Code, den dieser Schritt beschrieben hat, hat sich geändert.',
'walkthrough.stop.stalePartial': 'Ein Teil des vom Schritt beschriebenen Codes hat sich geändert. Fehlende Teile: {count}',
'walkthrough.stop.staleShort': 'Veraltete stoppen',
'walkthrough.stop.staleShort': 'Veraltet',
'walkthrough.stop.noCode': 'Kein Code vorhanden',
'walkthrough.uncovered.title': 'Vom Review ausgelassene Änderungen: {count}',
'walkthrough.uncovered.description': 'Diese Bereiche wurden noch nicht in den Walkthrough aufgenommen.',
'walkthrough.toc.moreFiles': 'Weitere Dateien: {count}',
'walkthrough.toc.uncovered': 'Nicht abgedeckt: {count}',
'walkthrough.toc.resize': 'Größe ändern',
'walkthrough.importance.critical': 'Kritisch',
'walkthrough.importance.critical': 'Kernänderung',
'walkthrough.importance.criticalHint': 'Dieser Schritt trägt die eigentliche Änderung, lesen Sie ihn genau. Es ist kein in Ihrem Code gefundenes Problem.',
'walkthrough.importance.context': 'Kontext',
'walkthrough.importance.contextHint': 'Eine unterstützende Änderung, damit der Rest verständlich bleibt.',
'walkthrough.help.guide': 'So funktionieren Walkthroughs',
'walkthrough.blocked.noModel.title': 'Kein Modell ausgewählt',
'walkthrough.blocked.noModel.description': 'Wählen Sie zuerst ein Modell aus.',
'walkthrough.blocked.emptyDiff.title': 'Kein Diff vorhanden',
@@ -2882,16 +3116,18 @@ export const dict = {
'walkthrough.blocked.outputExhausted.descriptionUnknownModel': 'Das kleine Modell hat sein gesamtes Ausgabelimit fürs Nachdenken verbraucht und nichts zurückgegeben. Denkende Modelle tun das bei großen Diffs oft — ein Modell, das weniger denkt, oder ein schmalerer Review-Bereich reicht eher aus.',
'walkthrough.blocked.onlyGenerated.title': 'Nur generierter Inhalt',
'walkthrough.blocked.onlyGenerated.description': 'Es ist nur generierter Inhalt vorhanden.',
'walkthrough.blocked.serverUnsupported.title': 'Dieser Server unterstützt keine Walkthroughs',
'walkthrough.blocked.serverUnsupported.description': 'Der OpenChamber-Server, mit dem diese App verbunden ist, hat die Walkthrough-API nicht beantwortet — er ist also älter als die App. Aktualisieren Sie den Server auf 1.18 oder neuer und aktualisieren Sie dann die Ansicht.',
'walkthrough.blocked.contextTooSmall.descriptionUnknownModel': 'Das kleine Modell passt in etwa {available}K Zeichen, und dieser Diff braucht etwa {required}K. Nichts wird abgeschnitten — wähle stattdessen ein Modell mit größerem Kontext.',
'walkthrough.blocked.structuredOutput.descriptionUnknownModel': 'Das kleine Modell unterstützt die strukturierten Antworten nicht, die ein Walkthrough benötigt.',
'contextRail.surface.plan.description': 'Plankontext',
'contextRail.surface.pr.description': 'PR-Kontext',
'contextRail.surface.notes.description': 'Notizkontext',
'contextRail.surface.notes.description': 'Notizen, To-dos, Pläne und Agenten-Gedächtnis für das Projekt',
'contextRail.surface.context.description': 'Allgemeiner Kontext',
'contextRail.surface.browser.description': 'Browserkontext',
'contextRail.surface.preview.description': 'Vorschaukontext',
'contextRail.surface.chat.description': 'Chatkontext',
'contextRail.surface.notes': 'Notizen',
'contextRail.surface.notes': 'Projektwissen',
'contextRail.editorTree.toggle': 'Editorbaum umschalten',
'sidebarFilesTree.actions.collapseAllTitle': 'Alle einklappen',
'filesView.editor.cannotPreviewBinary': 'Binärdatei kann nicht in der Vorschau angezeigt werden',
@@ -2904,11 +3140,14 @@ export const dict = {
'chat.commandAutocomplete.command.scheduleTaskDescription': 'Eine geplante Aufgabe erstellen',
'chat.chatInput.toast.scheduleTaskFailed': 'Aufgabe konnte nicht geplant werden',
'chat.container.sessionLoadError.title': 'Sitzung konnte nicht geladen werden',
'chat.container.sessionLoadError.description': 'Die Sitzung konnte nicht geladen werden.',
'chat.container.sessionLoadError.description': 'Die Unterhaltung konnte nicht geladen werden — der Server ist womöglich offline oder nicht erreichbar. Nichts ist verloren; versuche es erneut, sobald er wieder da ist.',
'chat.container.sessionLoadError.authDescription': 'Deine Sitzung ist abgelaufen, daher hat der Server die Anfrage abgelehnt. Melde dich an, dann wird die Unterhaltung geladen.',
'chat.container.sessionLoadError.retry': 'Erneut versuchen',
'sessions.sidebar.group.empty.loadingSessions': 'Sitzungen werden geladen...',
'sessions.sidebar.group.empty.loadFailed': 'Sitzungen konnten nicht geladen werden',
'sessions.sidebar.group.empty.retry': 'Erneut versuchen',
'sessions.sidebar.group.empty.permissionDenied': 'Ordnerzugriff ist erforderlich.',
'sessions.sidebar.group.empty.grantAccess': 'Zugriff gewähren',
'chat.messageBody.actions.pinContext': 'Kontext anheften',
'chat.messageBody.actions.unpinContext': 'Kontext lösen',
'chat.messageBody.actions.contextPinFailed': 'Kontext konnte nicht angeheftet werden',
@@ -2919,4 +3158,103 @@ export const dict = {
'onboarding.localSetup.actions.checkAndContinue': 'Installation abgeschlossen, prüfen und fortfahren',
'onboarding.localSetup.status.autoContinue': 'Wir fahren automatisch fort, sobald die Installation erkannt wurde.',
'updateDialog.changelog.title': 'Neuigkeiten',
'chat.workStatus.ariaLabel': 'Arbeitsstatus',
'chat.workStatus.context.label': 'Kontext',
'chat.workStatus.cost.breakdown': 'Sitzung {session} · Unteragenten {subagents}',
'chat.workStatus.git.changedFileSingle': '{count} Datei geändert',
'chat.workStatus.git.changedFilePlural': '{count} Dateien geändert',
'chat.workStatus.pr.untitled': 'Pull Request ohne Titel',
'chat.workStatus.pr.draft': 'Entwurf',
'chat.workStatus.pr.checks': 'Prüfungen',
'chat.workStatus.pr.checksFailed': '{count} fehlgeschlagen',
'chat.workStatus.pr.checksPending': '{count} laufen',
'chat.workStatus.pr.checksPassed': '{count} bestanden',
'chat.workStatus.attention.merge': 'Merge läuft',
'chat.workStatus.attention.rebase': 'Rebase läuft',
'chat.workStatus.attention.cherryPick': 'Cherry-Pick läuft',
'chat.workStatus.attention.revert': 'Revert läuft',
'chat.workStatus.attention.bisect': 'Bisect läuft',
'chat.workStatus.subagent.done': 'Fertig',
'chat.workStatus.subagent.untitled': 'Subagent',
'chat.workStatus.mcp.toggle': '{name} umschalten',
'chat.workStatus.mcp.needsAuth': 'Anmelden',
'chat.workStatus.mcp.failed': 'Fehlgeschlagen',
'chat.workStatus.pinned.unavailable': 'Angeheftete Nachricht',
'chat.workStatus.section.session': 'Sitzung',
'chat.workStatus.section.project': 'Projekt',
'chat.workStatus.section.subagents': 'Subagenten',
'chat.workStatus.section.mcp': 'MCP',
'chat.workStatus.section.pinned': 'Angeheftete Nachrichten',
'chat.workStatus.section.tasks': 'Aufgaben',
'chat.workStatus.subagent.working': 'arbeitet',
'chat.workStatus.subagent.needsPermission': 'braucht Berechtigung',
'chat.workStatus.subagent.askedQuestion': 'hat gefragt',
'chat.workStatus.section.contextBreakdown': 'Kontextquellen',
'chat.workStatus.breakdown.skills': 'Skills',
'chat.workStatus.breakdown.pinnedNote': 'Notiz',
'chat.workStatus.breakdown.unpin': 'Vom Kontext lösen',
'chat.workStatus.breakdown.pinnedPlan': 'Plan',
'chat.workStatus.breakdown.memory': 'Agenten-Gedächtnis',
'chat.workStatus.breakdown.pinnedKnowledgeSingle': '{count} angeheftet',
'chat.workStatus.breakdown.pinnedKnowledgePlural': '{count} angeheftet',
'chat.workStatus.breakdown.mcp': 'MCP-Server',
'chat.workStatus.action.openChanges': 'Änderungen öffnen',
'chat.workStatus.action.openGit': 'Git-Panel öffnen',
'chat.workStatus.action.openPr': 'Pull Request öffnen',
'chat.workStatus.action.openSubagent': '{name} öffnen',
'chat.workStatus.section.usage': 'Nutzung',
'chat.workStatus.goal.open': 'Ziel verwalten',
'chat.workStatus.goal.pause': 'Pausieren',
'chat.workStatus.goal.resume': 'Fortsetzen',
'chat.workStatus.goal.updateFailed': 'Ziel konnte nicht aktualisiert werden',
'chat.workStatus.pinned.unpin': 'Nachricht lösen',
'chat.workStatus.pinned.reveal': 'Zur Nachricht',
'chat.workStatus.pinned.unpinFailed': 'Nachricht konnte nicht gelöst werden',
'chat.workStatus.action.openContext': 'Kontextpanel öffnen',
'chat.workStatus.section.linkedIssues': 'Verknüpft',
'chat.workStatus.linkedIssues.open': '#{number} auf GitHub öffnen',
'chat.workStatus.linkedIssues.unlink': 'Verknüpfung entfernen',
'chat.workStatus.linkedIssues.unlinkFailed': 'Verknüpfung konnte nicht entfernt werden',
'chat.workStatus.linkedIssues.link': 'Mit Sitzung verknüpfen',
'chat.workStatus.linkedIssues.linkFailed': 'Verknüpfen fehlgeschlagen',
'chat.workStatus.breakdown.issueCountSingle': '{count} Issue',
'chat.workStatus.breakdown.issueCountPlural': '{count} Issues',
'chat.workStatus.breakdown.prCountSingle': '{count} PR',
'chat.workStatus.breakdown.prCountPlural': '{count} PRs',
'chat.workStatus.breakdown.skillCountSingle': '{count} Skill',
'chat.workStatus.breakdown.skillCountPlural': '{count} Skills',
'chat.workStatus.breakdown.mcpCountSingle': '{count} MCP',
'chat.workStatus.breakdown.mcpCountPlural': '{count} MCP',
'chat.workStatus.sections.open': 'Abschnitte wählen',
'chat.workStatus.sections.dialogTitle': 'Panel-Abschnitte',
'chat.workStatus.sections.dialogDescription': 'Wähle, was das Arbeitsstatus-Panel zeigt. Ausgeblendete Abschnitte behalten ihre Daten und werden nur nicht angezeigt.',
'chat.workStatus.sections.allHidden': 'Keine Abschnitte ausgewählt',
'chat.workStatus.sections.showAll': 'Alle anzeigen',
'chat.workStatus.sections.noneWarning': 'Das Panel wird leer angezeigt.',
'header.workStatusPanel.toggleAria': 'Arbeitsstatus-Panel umschalten',
'header.workStatusPanel.hide': 'Arbeitsstatus ausblenden',
'header.workStatusPanel.show': 'Arbeitsstatus anzeigen',
'chat.workStatus.mcp.authorizeOpenFailed': 'Autorisierungsseite konnte nicht geöffnet werden',
'chat.workStatus.mcp.authorizeFailed': 'Autorisierung fehlgeschlagen',
'mcpDropdown.toast.authorizeOpenFailed': 'Autorisierungsseite konnte nicht geöffnet werden',
'mcpDropdown.toast.authorizeFailed': 'Autorisierung fehlgeschlagen',
'header.services.tooltip.currentInstance': 'Aktuelle Instanz: {current} ({toggle})',
'header.workStatusPanel.showOverlay': 'Arbeitsstatus über dem Chat anzeigen',
'settings.mcp.page.connection.title': 'Wie erreichbar',
'settings.mcp.page.connection.description': 'Füge den Startbefehl ein oder den Link zu einem gehosteten Server.',
'settings.mcp.page.registration.title': 'Dieser Server braucht eine eigene App',
'settings.mcp.page.registration.description': 'Er vergibt Zugangsdaten nicht automatisch. Lege in den Einstellungen des Dienstes eine App an, füge ihre Daten hier ein und melde dich an.',
'settings.mcp.page.registration.callbackLabel': 'Gib dem Dienst diese Adresse',
'settings.mcp.page.registration.clientId': 'App-ID',
'settings.mcp.page.registration.clientSecret': 'App-Secret',
'settings.mcp.page.registration.afterSaving': 'Speichern, dann auf Autorisieren drücken.',
'settings.mcp.page.toast.copiedCallbackUrl': 'Adresse kopiert',
'settings.mcp.page.toast.clipboardWriteFailed': 'Kopieren in die Zwischenablage fehlgeschlagen',
'settings.mcp.page.scope.everywhere': 'In allen Projekten verfügbar',
'settings.mcp.page.scope.thisProject': 'Nur in diesem Projekt',
'settings.mcp.page.env.description': 'Werte, die der Server braucht, etwa einen API-Schlüssel.',
'settings.mcp.page.connection.kindCommand': 'Befehl',
'settings.mcp.page.connection.kindLink': 'Link',
'settings.mcp.page.connection.hintCommand': 'Läuft auf diesem Rechner. Fügen Sie einen ganzen Befehl ein — er wird in ein Argument pro Zeile zerlegt.',
'settings.mcp.page.connection.hintLink': 'Verbindet sich mit einem fremd gehosteten Server. Fügen Sie dessen https-Adresse ein.',
};
+164 -42
View File
@@ -1,8 +1,10 @@
import { thirdPartyIntegrationI18n } from './third-party-integrations.i18n';
export const settingsDict = {
'settings.providers.page.openCodeGo.title': 'OpenCode Go usage tracking',
'settings.providers.page.openCodeGo.description': 'Connect the OpenCode Go dashboard to show rolling, weekly, and monthly quota.',
'settings.providers.page.openCodeGo.workspaceId': 'Workspace ID',
'settings.providers.page.openCodeGo.authCookie': 'Auth cookie',
'settings.providers.page.openCodeGo.apiKey': 'API key',
'settings.providers.page.openCodeGo.help': 'Copy the workspace ID from the dashboard URL and the auth cookie from your browser developer tools. OpenChamber never scans browser cookie storage.',
'settings.providers.page.openCodeGo.save': 'Save and validate',
'settings.providers.page.openCodeGo.replace': 'Replace',
@@ -40,6 +42,18 @@ export const settingsDict = {
'settings.view.badge.beta': 'beta',
'settings.view.actions.reloadOpenCode': 'Reload OpenCode',
'settings.view.actions.reloadOpenCodeTooltip': 'Restart OpenCode and reload its configuration.',
'settings.view.actions.applyAndRestartOpenCode': 'Apply & Restart',
'settings.view.actions.applyAndRestartOpenCodeTooltipSingle': 'Apply 1 pending configuration change and restart OpenCode.',
'settings.view.actions.applyAndRestartOpenCodeTooltipPlural': 'Apply {count} pending configuration changes and restart OpenCode.',
'settings.view.pendingRestart.applying': 'Restarting...',
'settings.view.pendingRestart.applied': 'OpenCode restarted with pending configuration changes.',
'settings.view.pendingRestart.applyFailed': 'Failed to apply configuration changes.',
'settings.view.pendingRestart.manualRestartRequired': 'Saved on disk. Restart your connected OpenCode server to apply the changes.',
'settings.view.pendingRestart.saved': 'Saved. Restart OpenCode to apply.',
'settings.view.pendingRestart.confirm.title': 'Apply & restart?',
'settings.view.pendingRestart.confirm.description': 'Restarting OpenCode will stop any running chats. Your saved configuration changes will take effect after the restart.',
'settings.view.pendingRestart.confirm.dontShowAgain': 'Don\'t show this again',
'settings.view.pendingRestart.confirm.cancel': 'Cancel',
'settings.view.actions.backToSettings': 'Back to Settings',
'settings.view.actions.closeSettings': 'Close settings',
'settings.view.actions.openSectionList': 'Open section list',
@@ -392,14 +406,14 @@ export const settingsDict = {
'settings.remoteInstances.page.field.modePlaceholder': 'Select mode',
'settings.remoteInstances.page.field.modeManaged': 'Start it for me',
'settings.remoteInstances.page.field.modeExternal': 'Already running',
'settings.remoteInstances.page.field.preferredRemotePort': 'Preferred remote port',
'settings.remoteInstances.page.field.preferredRemotePortHint': 'Port to use on the remote machine. Leave empty to choose one automatically.',
'settings.remoteInstances.page.field.preferredRemotePort': 'Port on the remote machine',
'settings.remoteInstances.page.field.preferredRemotePortHint': 'Port OpenChamber uses on the remote machine. Leave empty to choose one automatically.',
'settings.remoteInstances.page.field.keepServerRunning': 'Keep server running',
'settings.remoteInstances.page.field.keepServerRunningHint': 'Keep OpenChamber running on the remote machine after you disconnect.',
'settings.remoteInstances.page.field.bindHost': 'Bind host',
'settings.remoteInstances.page.field.bindHostHint': 'Where the local connection should listen. Use 127.0.0.1 or localhost unless you need LAN access.',
'settings.remoteInstances.page.field.preferredLocalPort': 'Preferred local port',
'settings.remoteInstances.page.field.preferredLocalPortHint': 'Local port to open for this connection. Leave empty to choose one automatically.',
'settings.remoteInstances.page.field.keepServerRunningHint': 'Leave the remote server running after you disconnect. When off, it is stopped on disconnect and started again the next time you connect.',
'settings.remoteInstances.page.field.bindHost': 'Reachable from',
'settings.remoteInstances.page.field.bindHostHint': 'Who can open the forwarded address on this computer. The remote machine itself stays reachable only through the SSH tunnel either way.',
'settings.remoteInstances.page.field.preferredLocalPort': 'Port on this computer',
'settings.remoteInstances.page.field.preferredLocalPortHint': 'Port opened on this computer for the tunnel. Leave empty to choose one automatically.',
'settings.remoteInstances.page.field.forwardType': 'Forward type',
'settings.remoteInstances.page.field.localHostPlaceholder': '127.0.0.1',
'settings.remoteInstances.page.field.remoteHostPlaceholder': '127.0.0.1',
@@ -419,6 +433,10 @@ export const settingsDict = {
'settings.common.actions.cancel': 'Cancel',
'settings.common.actions.create': 'Create',
'settings.common.actions.delete': 'Delete',
'settings.openchamber.appLinks.title': 'Trusted app links',
'settings.openchamber.appLinks.info': 'Links listed here open without asking again on this device. Other app links always ask before opening.',
'settings.openchamber.appLinks.empty': 'No trusted app links on this device. Choose "Trust and open" when opening a link to add it here.',
'settings.openchamber.appLinks.removeAria': 'Remove trusted {scheme} links',
'settings.common.actions.reset': 'Reset',
'settings.common.actions.rename': 'Rename',
'settings.common.actions.duplicate': 'Duplicate',
@@ -464,6 +482,9 @@ export const settingsDict = {
'settings.openchamber.about.title': 'About OpenChamber',
'settings.openchamber.about.field.version': 'Version',
'settings.openchamber.about.field.openCodeVersion': 'OpenCode version',
'settings.openchamber.about.field.instanceUrls': 'Instance URLs',
'settings.openchamber.about.field.applicationUrl': 'Application',
'settings.openchamber.about.field.tunnelUrl': 'Tunnel',
'settings.openchamber.about.state.checking': 'Checking...',
'settings.openchamber.about.state.upToDate': 'Up to date',
'settings.openchamber.about.state.unknown': 'unknown',
@@ -880,16 +901,26 @@ export const settingsDict = {
'settings.skills.catalog.page.mode.manual': 'Manual',
'settings.skills.catalog.page.mode.external': 'External',
'settings.skills.catalog.page.title': 'Skills Catalog',
'settings.skills.catalog.page.subtitle': 'Install ready-made skills from curated repositories, or add your own source.',
'settings.skills.catalog.page.section.sources': 'Sources',
'settings.skills.catalog.page.searchAllPlaceholder': 'Search skills across all sources…',
'settings.skills.catalog.page.search.clear': 'Clear search',
'settings.skills.catalog.page.source.skillsCount': '{count} skills',
'settings.skills.catalog.page.source.stars': '{count} stars',
'settings.skills.catalog.page.source.updated': 'Updated {time}',
'settings.skills.catalog.page.source.addOwnTitle': 'Add your own source',
'settings.skills.catalog.page.source.addOwnDescription': 'Any Git repository with skills',
'settings.skills.catalog.page.source.viewRepo': 'Open repository on GitHub',
'settings.skills.catalog.page.skill.viewOnGithub': 'View skill on GitHub',
'settings.skills.catalog.page.list.searchTitle': 'Search results',
'settings.skills.catalog.page.section.sourceRepository': 'Source Repository',
'settings.skills.catalog.page.field.selectSourcePlaceholder': 'Select source',
'settings.skills.catalog.page.actions.refreshTitle': 'Refresh',
'settings.skills.catalog.page.actions.removeCatalogTitle': 'Remove Catalog',
'settings.skills.catalog.page.actions.addCatalog': 'Add Catalog',
'settings.skills.catalog.page.actions.removeCatalog': 'Remove Catalog',
'settings.skills.catalog.page.actions.loadMoreSkills': 'Load More Skills',
'settings.skills.catalog.page.loading.catalog': 'Loading...',
'settings.skills.catalog.page.loading.skills': 'Loading skills...',
'settings.skills.catalog.page.loading.more': 'Loading...',
'settings.skills.catalog.page.foundCount': '{count} skill(s) found',
'settings.skills.catalog.page.error.catalogTitle': 'Catalog error',
'settings.skills.catalog.page.empty.noSkillsTitle': 'No skills found',
@@ -897,7 +928,6 @@ export const settingsDict = {
'settings.skills.catalog.page.badge.installed': 'installed ({scope})',
'settings.skills.catalog.page.badge.notInstallable': 'not installable',
'settings.skills.catalog.page.badge.unknown': 'unknown',
'settings.skills.catalog.page.byOwnerPrefix': 'by',
'settings.skills.catalog.page.removeDialog.title': 'Remove Catalog',
'settings.skills.catalog.page.removeDialog.description': 'Are you sure you want to remove this catalog?',
'settings.openchamber.passkeys.title': 'Passkeys',
@@ -960,9 +990,9 @@ export const settingsDict = {
'settings.openchamber.desktopNetwork.field.macMenuBarAria': 'Show OpenChamber in the macOS menu bar',
'settings.openchamber.desktopNetwork.field.macMenuBar': 'Show OpenChamber in the menu bar',
'settings.openchamber.desktopNetwork.field.macMenuBarDescription': 'Requires an app restart. When off, OpenChamber does not create the menu bar item or run its session, approval, and usage updates.',
'settings.openchamber.desktopNetwork.field.minimizeToTrayAria': 'Minimize and close OpenChamber to the system tray',
'settings.openchamber.desktopNetwork.field.minimizeToTray': 'Minimize and close to the system tray',
'settings.openchamber.desktopNetwork.field.minimizeToTrayDescription': 'Keeps OpenChamber running in the system tray when the main window is minimized or closed.',
'settings.openchamber.desktopNetwork.field.minimizeToTrayAria': 'Close OpenChamber to the system tray',
'settings.openchamber.desktopNetwork.field.minimizeToTray': 'Close to the system tray',
'settings.openchamber.desktopNetwork.field.minimizeToTrayDescription': 'Keeps OpenChamber running in the system tray when the main window is closed. Minimizing still leaves the window in the taskbar.',
'settings.openchamber.desktopNetwork.field.keepAwakeAria': 'Keep computer awake while OpenChamber is running',
'settings.openchamber.desktopNetwork.field.keepAwake': 'Keep computer awake while OpenChamber is running',
'settings.openchamber.desktopNetwork.field.keepAwakeDescription': 'Prevents system sleep so phones can keep reaching this app. The screen can still turn off.',
@@ -989,15 +1019,22 @@ export const settingsDict = {
'settings.openchamber.desktopNetwork.error.keepAwakeUnsupported': 'Preventing sleep is not supported on this system',
'settings.openchamber.desktopNetwork.error.keepAwakeSaveFailed': 'Failed to update keep awake setting',
'settings.openchamber.opencodeCli.title': 'OpenCode CLI',
'settings.openchamber.tools.title': 'OpenChamber Tools',
'settings.openchamber.tools.field.agentControlTool': 'Agent control tool',
'settings.openchamber.tools.field.agentControlToolAria': 'Enable the agent control tool',
'settings.openchamber.tools.field.agentControlToolInfo': 'Let agents orchestrate your work from chat: spin up sessions and worktrees, delegate prompts to other agents, and manage scheduled tasks. Adds a small tool description to each session. Applies after OpenCode restarts.',
'settings.openchamber.tools.field.agentWebTool': 'OpenChamber Web tool',
'settings.openchamber.tools.field.agentWebToolAria': 'Enable the OpenChamber Web tool',
'settings.openchamber.tools.field.agentWebToolInfo': 'Let agents look at and interact with the page in OpenChamber\'s browser panel: open a URL, read the page, click, type, scroll, and switch between mobile and desktop layouts. Adds a small tool description to each session. Applies after OpenCode restarts.',
'settings.openchamber.tools.field.agentMemoryTool': 'Agent memory tool',
'settings.openchamber.tools.field.agentMemoryToolAria': 'Agent memory tool',
'settings.openchamber.tools.field.agentMemoryToolInfo': 'Let agents keep what they learn across sessions, in two stores: what is true about you, and what is true about each project. Sessions are given the stored titles so the agent can read an entry when it is relevant. Turning this off removes the tool, the Memory tab, and the session index. Applies after OpenCode restarts.',
'settings.openchamber.opencodeCli.tooltipPrefix': 'Optional absolute path to the',
'settings.openchamber.opencodeCli.tooltipSuffix': 'binary.',
'settings.openchamber.opencodeCli.field.binaryPath': 'OpenCode Binary Path',
'settings.openchamber.opencodeCli.field.binaryPathPlaceholder': '/Users/you/.bun/bin/opencode',
'settings.openchamber.opencodeCli.field.showUpdateNotifications': 'Show OpenCode update notifications',
'settings.openchamber.opencodeCli.field.showUpdateNotificationsAria': 'Show OpenCode update notifications',
'settings.openchamber.opencodeCli.field.agentControlTool': 'Agent control tool',
'settings.openchamber.opencodeCli.field.agentControlToolAria': 'Enable the agent control tool',
'settings.openchamber.opencodeCli.field.agentControlToolInfo': 'Let agents orchestrate your work from chat: spin up sessions and worktrees, delegate prompts to other agents, and manage scheduled tasks. Adds a small tool description to each session. Applies after Save + Reload.',
'settings.openchamber.opencodeCli.actions.browseAria': 'Browse for OpenCode binary path',
'settings.openchamber.opencodeCli.actions.browse': 'Browse',
'settings.openchamber.opencodeCli.actions.saveAndReload': 'Save + Reload',
@@ -1096,7 +1133,7 @@ export const settingsDict = {
'settings.openchamber.keyboardShortcuts.overwritePrompt': 'This combo is already used by another shortcut. Overwrite and clear that other mapping?',
'settings.openchamber.keyboardShortcuts.field.pressKeys': 'Press keys...',
'settings.openchamber.keyboardShortcuts.error.captureFirst': 'Capture a shortcut first.',
'settings.openchamber.keyboardShortcuts.warning.riskyBrowserShortcut': 'This shortcut can conflict with browser defaults. It is still saved.',
'settings.openchamber.keyboardShortcuts.warning.riskyBrowserShortcut': 'This shortcut can conflict with browser defaults. You can still save it.',
'settings.openchamber.keyboardShortcuts.action.open_go_to_line.label': 'Go to line (files editor)',
'settings.openchamber.keyboardShortcuts.action.open_command_palette.label': 'Open command palette',
'settings.openchamber.keyboardShortcuts.action.focus_input.label': 'Focus input',
@@ -1105,16 +1142,20 @@ export const settingsDict = {
'settings.openchamber.keyboardShortcuts.action.toggle_terminal_expanded.label': 'Toggle terminal expanded',
'settings.openchamber.keyboardShortcuts.action.add_selection_to_chat.label': 'Add selection to chat',
'settings.openchamber.keyboardShortcuts.action.toggle_sidebar.label': 'Toggle sidebar',
'settings.openchamber.keyboardShortcuts.action.toggle_right_sidebar.label': 'Toggle context panel',
'settings.openchamber.keyboardShortcuts.action.open_right_sidebar_git.label': 'Open Git surface',
'settings.openchamber.keyboardShortcuts.action.open_right_sidebar_files.label': 'Open Files surface',
'settings.openchamber.keyboardShortcuts.action.switch_session_tab.label': 'Switch session tab',
'settings.openchamber.keyboardShortcuts.action.switch_session_tab.suffix': ' + 1…9',
'settings.openchamber.keyboardShortcuts.action.switch_context_surface.label': 'Switch context panel surface',
'settings.openchamber.keyboardShortcuts.action.switch_context_surface.suffix': ' + 1…0',
'settings.openchamber.keyboardShortcuts.action.new_chat.label': 'New session',
'settings.openchamber.keyboardShortcuts.action.switch_session_previous.label': 'Previous session',
'settings.openchamber.keyboardShortcuts.action.switch_session_next.label': 'Next session',
'settings.openchamber.keyboardShortcuts.action.rename_current_session.label': 'Rename current session',
'settings.openchamber.keyboardShortcuts.action.toggle_permission_auto_accept.label': 'Toggle permission auto-accept',
'settings.openchamber.keyboardShortcuts.action.close_session_tab.label': 'Close session tab',
'settings.openchamber.keyboardShortcuts.action.new_chat_worktree.label': 'New worktree draft',
'settings.openchamber.keyboardShortcuts.action.new_mini_chat.label': 'New Mini Chat window',
'settings.openchamber.keyboardShortcuts.action.open_help.label': 'Open keyboard shortcuts',
'settings.openchamber.keyboardShortcuts.action.toggle_context_plan.label': 'Toggle plan context panel',
'settings.openchamber.keyboardShortcuts.action.toggle_services_menu.label': 'Toggle services menu',
'settings.openchamber.keyboardShortcuts.action.cycle_services_tab.label': 'Cycle services tab',
'settings.openchamber.keyboardShortcuts.action.cycle_theme.label': 'Cycle theme',
'settings.openchamber.keyboardShortcuts.action.cycle_agent.label': 'Cycle agent',
'settings.openchamber.keyboardShortcuts.action.cycle_favorite_model_forward.label': 'Cycle favorite model forward',
@@ -1123,15 +1164,39 @@ export const settingsDict = {
'settings.openchamber.keyboardShortcuts.action.expand_input.label': 'Expand input',
'settings.openchamber.keyboardShortcuts.action.open_timeline_dialog.label': 'Open conversation timeline',
'settings.openchamber.keyboardShortcuts.action.toggle_prompt_navigator.label': 'Toggle prompt navigator',
'settings.openchamber.keyboardShortcuts.warning.contextualPrefix': 'This sequence shares a contextual prefix with {action}. That action takes priority while its context is active.',
'settings.openchamber.keyboardShortcuts.category.session': 'Session Controls',
'settings.openchamber.keyboardShortcuts.category.models': 'Models & Agents',
'settings.openchamber.keyboardShortcuts.category.panels': 'Panels & Tools',
'settings.openchamber.keyboardShortcuts.category.navigation': 'Navigation',
'settings.openchamber.keyboardShortcuts.category.application': 'Application',
'settings.openchamber.keyboardShortcuts.actions.edit': 'Edit',
'settings.openchamber.keyboardShortcuts.actions.confirm': 'Confirm',
'settings.openchamber.keyboardShortcuts.dialog.title': 'Edit {action}',
'settings.openchamber.keyboardShortcuts.dialog.instructions': 'Press up to two key combinations, with at most three keys each. After the first, wait up to 3 seconds for a second combination. Use Confirm to apply or Cancel to discard. Backspace removes the last one.',
'settings.openchamber.keyboardShortcuts.dialog.firstChord': 'First combination',
'settings.openchamber.keyboardShortcuts.dialog.secondChord': 'Second combination',
'settings.openchamber.keyboardShortcuts.dialog.recording': 'Press keys…',
'settings.openchamber.keyboardShortcuts.unassigned': 'Unassigned',
'settings.openchamber.keyboardShortcuts.error.prefixConflict': 'This conflicts with the sequence used by {action}. Choose a different combination.',
'settings.openchamber.keyboardShortcuts.error.exactConflict': 'This combination is already used by {action}.',
'settings.openchamber.keyboardShortcuts.error.internalConflict': 'This combination conflicts with a built-in shortcut, which cannot be replaced.',
'settings.openchamber.keyboardShortcuts.action.open_draft_project_picker.label': 'Open draft project picker',
'settings.openchamber.keyboardShortcuts.action.open_draft_worktree_picker.label': 'Open draft worktree picker',
'settings.openchamber.keyboardShortcuts.action.open_session_list.label': 'Open recent sessions',
'settings.openchamber.keyboardShortcuts.action.toggle_dictation.label': 'Voice input',
'settings.projects.sidebar.total': 'Total {count}',
'settings.projects.sidebar.actions.addProject': 'Add project',
'settings.projects.page.empty.noProjects': 'No projects available.',
'settings.projects.page.title.default': 'Project Settings',
'settings.projects.page.section.worktree': 'Worktree',
'settings.projects.page.field.projectName': 'Project Name',
'settings.projects.page.field.projectModel': 'Project Model',
'settings.projects.page.field.projectThinking': 'Project Thinking',
'settings.projects.page.section.chatDefaults': 'Defaults for new chats',
'settings.projects.page.section.chatDefaultsDescription': 'Used when starting a new chat in this project. Falls back to the global defaults when unset. Thinking appears only for models that offer levels.',
'settings.projects.page.field.projectNamePlaceholder': 'Project name',
'settings.projects.page.field.defaultModel': 'Default model for new chats',
'settings.projects.page.field.defaultModelDescription': 'Used when starting a new chat in this project. Falls back to global defaults when unset.',
'settings.projects.page.option.thinkingDefault': 'Model default',
'settings.projects.page.field.accentColor': 'Accent Color',
'settings.projects.page.field.projectIcon': 'Project Icon',
'settings.projects.page.field.projectIconBackgroundAria': 'Project icon background color',
@@ -1165,15 +1230,15 @@ export const settingsDict = {
'settings.usage.sidebar.field.displayModePlaceholder': 'Display mode',
'settings.usage.sidebar.field.displayModeUsage': 'Usage',
'settings.usage.sidebar.field.displayModeRemaining': 'Quota remaining',
'settings.usage.sidebar.field.showPredictions': 'Show predictions',
'settings.usage.sidebar.status.notSet': 'Not set',
'settings.usage.page.empty.selectProvider': 'Select a provider to view usage details.',
'settings.usage.page.header.providerUsage': '{provider} Usage',
'settings.usage.page.header.refreshing': 'Refreshing usage...',
'settings.usage.page.header.lastUpdated': 'Last updated: {time}',
'settings.usage.page.options.showInHeaderAria': 'Show in header menu',
'settings.usage.page.options.showInHeader': 'Show in Header Menu',
'settings.usage.page.options.showInHeaderTooltip': 'When enabled, this provider\'s usage will be visible in the quick access dropdown menu in the app header.',
'settings.usage.page.header.lastUpdatedWithPlan': 'Plan: {plan} · Last updated: {time}',
'settings.usage.page.options.showInWorkStatusAria': 'Show in work status panel',
'settings.usage.page.options.showInWorkStatus': 'Show in Work Status Panel',
'settings.usage.page.options.showInWorkStatusTooltip': 'When enabled, this provider\'s usage will be visible in the work status panel.',
'settings.usage.page.state.noData': 'No usage data available yet.',
'settings.usage.page.state.refreshFailedTitle': 'Failed to refresh usage data',
'settings.usage.page.state.providerNotConfiguredTitle': 'Provider not configured',
@@ -1200,8 +1265,8 @@ export const settingsDict = {
'settings.remoteInstances.page.section.actionsDescription': 'Connect, reconnect, view logs, or remove this connection.',
'settings.remoteInstances.page.section.remoteServer': 'OpenChamber on the remote machine',
'settings.remoteInstances.page.section.remoteServerDescription': 'Choose how OpenChamber should run after SSH connects.',
'settings.remoteInstances.page.section.mainTunnel': 'Local access',
'settings.remoteInstances.page.section.mainTunnelDescription': 'Choose the local address used to open this remote OpenChamber server.',
'settings.remoteInstances.page.section.mainTunnel': 'Access from this computer',
'settings.remoteInstances.page.section.mainTunnelDescription': 'OpenChamber runs on the remote machine. These settings only control the address on this computer that forwards to it through the SSH tunnel.',
'settings.remoteInstances.page.section.authentication': 'Authentication',
'settings.remoteInstances.page.section.authenticationDescription': 'Optional credentials for SSH and the remote OpenChamber UI.',
'settings.remoteInstances.page.section.portForwards': 'Port Forwards',
@@ -1214,8 +1279,6 @@ export const settingsDict = {
'settings.remoteInstances.page.field.installMethod': 'Install method',
'settings.remoteInstances.page.field.installMethodHint': 'How OpenChamber should be placed on the remote machine when this app starts it for you.',
'settings.remoteInstances.page.field.selectInstallMethodPlaceholder': 'Select install method',
'settings.remoteInstances.page.field.installMethodDownloadRelease': 'Download release',
'settings.remoteInstances.page.field.installMethodUploadBundle': 'Upload bundle',
'settings.remoteInstances.page.field.selectBindHostPlaceholder': 'Select bind host',
'settings.remoteInstances.page.field.sshPasswordOptional': 'SSH password (optional)',
'settings.remoteInstances.page.field.sshPasswordPlaceholder': 'Enter SSH password',
@@ -1239,7 +1302,44 @@ export const settingsDict = {
'settings.remoteInstances.page.actions.enableForwardAria': 'Enable forward',
'settings.remoteInstances.page.actions.openLocal': 'Open local',
'settings.remoteInstances.page.actions.addForward': 'Add forward',
'settings.remoteInstances.page.import.sectionTitle': 'Saved SSH hosts',
'settings.remoteInstances.page.addDialog.description': 'Pick a host from your SSH config, or type the connection yourself.',
'settings.remoteInstances.page.addDialog.sourceLabel': 'Where the connection comes from',
'settings.remoteInstances.page.addDialog.tab.saved': 'From SSH config',
'settings.remoteInstances.page.addDialog.tab.manual': 'Type it myself',
'settings.remoteInstances.page.addDialog.searchPlaceholder': 'Search hosts',
'settings.remoteInstances.page.addDialog.emptySaved': 'No hosts found in your SSH config. Type the connection yourself instead.',
'settings.remoteInstances.page.addDialog.searchEmpty': 'No host matches this search.',
'settings.remoteInstances.page.addDialog.use': 'Use',
'settings.remoteInstances.page.state.notConnected': 'Not connected',
'settings.remoteInstances.page.state.connecting': 'Connecting',
'settings.remoteInstances.page.state.ready': 'Connected',
'settings.remoteInstances.page.state.problem': 'Needs attention',
'settings.remoteInstances.page.section.advanced': 'Advanced settings',
'settings.remoteInstances.page.section.advancedHint': 'Ports, install method, passwords and extra forwards. The defaults work for most connections.',
'settings.remoteInstances.page.field.installMethodAuto': 'Automatic',
'settings.remoteInstances.page.error.hint.noRuntime': 'The remote machine has neither bun nor npm. Install one of them there, or switch this connection to "Already running".',
'settings.remoteInstances.page.error.hint.noOpencode': 'The opencode CLI is not installed on the remote machine. Install it there (see opencode.ai), then connect again.',
'settings.remoteInstances.page.error.action.setUiPassword': 'Set UI password',
'settings.remoteInstances.page.error.action.pickRandomPort': 'Use another local port',
'settings.remoteInstances.page.error.action.setRemotePort': 'Set the remote port',
'settings.remoteInstances.page.validation.externalPortRequired': 'Set a remote port first. In "Already running" mode OpenChamber needs to know which port the server listens on.',
'settings.remoteInstances.page.empty.noInstances': 'No SSH connections yet.',
'settings.remoteInstances.page.field.uiPasswordRequired': 'UI password (required)',
'settings.remoteInstances.page.field.uiPasswordMissingForLan': 'Required while the remote server is reachable on its network.',
'settings.remoteInstances.page.field.remoteLanAccess': 'Reachable on the remote network',
'settings.remoteInstances.page.field.remoteLanAccessHint': 'Also let other devices on the remote machine’s network open this OpenChamber directly, without the SSH tunnel. A UI password is required.',
'settings.remoteInstances.page.field.remoteLanAccessWarning': 'Anyone on that network can reach the remote OpenChamber. It is protected only by the UI password below.',
'settings.remoteInstances.page.validation.remoteLanNeedsPassword': 'Set a UI password first. Publishing the remote OpenChamber to its network without one would leave it open to every device there.',
'settings.remoteInstances.page.field.bindHostOption.loopback': 'Only this computer (127.0.0.1)',
'settings.remoteInstances.page.field.bindHostOption.localhost': 'Only this computer (localhost)',
'settings.remoteInstances.page.field.bindHostOption.lan': 'Any device on my network (0.0.0.0)',
'settings.remoteInstances.page.field.sshPasswordHint': 'Only needed when this host asks for a password instead of accepting an SSH key.',
'settings.remoteInstances.page.field.uiPasswordHintManaged': 'Password to protect the remote OpenChamber UI. OpenChamber sets it on the server it starts for you.',
'settings.remoteInstances.page.field.uiPasswordHintExternal': 'Password of the OpenChamber server already running on the remote machine, used to sign in to it.',
'settings.remoteInstances.page.tunnelPreview.caption': 'This connection forwards:',
'settings.remoteInstances.page.empty.noInstancesWithOneImport': 'No SSH connections yet. 1 host is available to import from your SSH config.',
'settings.remoteInstances.page.empty.noInstancesWithImports': 'No SSH connections yet. {count} hosts are available to import from your SSH config.',
'settings.remoteInstances.page.state.loadingInstances': 'Loading connections...',
'settings.remoteInstances.page.import.loading': 'Loading SSH hosts...',
'settings.remoteInstances.page.import.noneFound': 'No SSH hosts found.',
'settings.remoteInstances.page.import.noneAvailable': 'No SSH hosts available to import.',
@@ -1336,13 +1436,18 @@ export const settingsDict = {
'settings.providers.page.custom.optionLabel': 'Other / Custom',
'settings.providers.page.custom.title': 'Custom provider',
'settings.providers.page.custom.editTitle': 'Edit custom provider',
'settings.providers.page.custom.description': 'Add an OpenAI-compatible provider with a base URL, credentials, and model list. Saved to OpenCode config so it works in chat like any other provider.',
'settings.providers.page.custom.description': 'Add a provider with a base URL, credentials, model list, and supported API protocol. Saved to OpenCode config for use in chat.',
'settings.providers.page.custom.field.providerID.label': 'Provider ID',
'settings.providers.page.custom.field.providerID.placeholder': 'my-provider',
'settings.providers.page.custom.field.providerID.info': 'Lowercase letters, numbers, hyphens, and underscores. Used as the OpenCode provider id.',
'settings.providers.page.custom.field.name.label': 'Display name',
'settings.providers.page.custom.field.name.placeholder': 'My Provider',
'settings.providers.page.custom.field.name.info': 'Shown in the provider and model pickers.',
'settings.providers.page.custom.field.protocol.label': 'API protocol',
'settings.providers.page.custom.field.protocol.info': 'Choose the request format implemented by this API.',
'settings.providers.page.custom.field.protocol.openaiChat': 'OpenAI Chat Completions',
'settings.providers.page.custom.field.protocol.openaiResponses': 'OpenAI Responses',
'settings.providers.page.custom.field.protocol.anthropicMessages': 'Anthropic Messages',
'settings.providers.page.custom.field.baseURL.label': 'Base URL',
'settings.providers.page.custom.field.baseURL.placeholder': 'https://api.example.com/v1',
'settings.providers.page.custom.field.baseURL.info': 'OpenAI-compatible API base URL. Must start with http:// or https://.',
@@ -1386,6 +1491,17 @@ export const settingsDict = {
'settings.providers.page.auth.apiKeyPlaceholder': 'sk-...',
'settings.providers.page.auth.oauthMethodFallback': 'OAuth method {index}',
'settings.providers.page.auth.pasteAuthorizationCodePlaceholder': 'Paste authorization code',
'settings.providers.page.auth.oauth.starting': 'Starting authorization…',
'settings.providers.page.auth.oauth.waiting': 'Waiting for authorization…',
'settings.providers.page.auth.oauth.waitingHint': 'Finish signing in in your browser. Keep this page open — the connection completes on its own.',
'settings.providers.page.auth.oauth.codeHint': 'Copy the authorization code from your browser and paste it here.',
'settings.providers.page.auth.oauth.deviceCodeLabel': 'Device code',
'settings.providers.page.auth.oauth.linkLabel': 'Authorization link',
'settings.providers.page.auth.oauth.promptRequired': 'Fill in “{field}” to continue',
'settings.providers.page.auth.oauth.error.sessionExpired': 'The authorization request expired. Connect again to restart it.',
'settings.providers.page.auth.oauth.error.codeRequired': 'This provider needs the authorization code from your browser.',
'settings.providers.page.auth.oauth.error.declined': 'Authorization was declined or did not complete.',
'settings.providers.page.auth.oauth.error.invalidInput': 'The details you entered were rejected.',
'settings.providers.page.auth.connected': 'Connected',
'settings.providers.page.auth.incomplete': 'Credentials missing',
'settings.providers.page.auth.incompleteHint': '· Add an API key or {env:VAR} before using this provider in chat',
@@ -1416,6 +1532,9 @@ export const settingsDict = {
'settings.providers.page.actions.open': 'Open',
'settings.providers.page.actions.copy': 'Copy',
'settings.providers.page.actions.complete': 'Complete',
'settings.providers.page.actions.continue': 'Continue',
'settings.providers.page.actions.cancel': 'Cancel',
'settings.providers.page.actions.tryAgain': 'Try again',
'settings.providers.page.actions.hide': 'Hide',
'settings.providers.page.actions.reconnect': 'Reconnect',
'settings.providers.page.actions.edit': 'Edit',
@@ -1430,7 +1549,6 @@ export const settingsDict = {
'settings.providers.page.toast.apiKeySaved': 'API key saved',
'settings.providers.page.toast.oauthStartFailed': 'Failed to start OAuth flow',
'settings.providers.page.toast.oauthDetailsMissing': 'No OAuth details returned',
'settings.providers.page.toast.completeOAuthInBrowser': 'Complete the OAuth flow in your browser',
'settings.providers.page.toast.oauthCompleteFailed': 'Failed to complete OAuth flow',
'settings.providers.page.toast.oauthCompleted': 'OAuth connection completed',
'settings.providers.page.toast.oauthLinkCopied': 'OAuth link copied',
@@ -1452,6 +1570,8 @@ export const settingsDict = {
'settings.mcp.page.status.label.failed': 'Failed',
'settings.mcp.page.status.label.needsAuth': 'Needs auth',
'settings.mcp.page.status.label.needsRegistration': 'Needs registration',
'settings.mcp.page.status.label.awaitingRestart': 'Awaiting restart',
'settings.mcp.page.status.description.awaitingRestart': 'This server is saved but not applied yet. Use Apply & Restart to load it into OpenCode — connect and authorization become available after that.',
'settings.mcp.page.status.description.connected': 'Connected and ready for OpenCode to discover tools and resources.',
'settings.mcp.page.status.description.failedDefault': 'OpenCode could not reach this MCP server.',
'settings.mcp.page.status.description.needsAuth': 'This remote MCP server requires authorization before it can connect.',
@@ -1816,9 +1936,6 @@ export const settingsDict = {
'settings.voice.page.field.ttsInputModeSummarized': 'summarized',
'settings.openchamber.visual.section.colorMode': 'Color Mode',
'settings.openchamber.visual.section.colorModeAndTheme': 'Color mode & Theme',
'settings.openchamber.visual.section.mobileLayout': 'Mobile Layout',
'settings.openchamber.visual.option.mobileLayout.default': 'Old',
'settings.openchamber.visual.option.mobileLayout.new': 'New',
'settings.openchamber.visual.section.localization': 'Localization',
'settings.openchamber.visual.section.spacingAndLayout': 'Spacing & Layout',
'settings.openchamber.visual.section.densityAndType': 'Density & type',
@@ -1835,6 +1952,10 @@ export const settingsDict = {
'settings.openchamber.visual.section.showToolsOpenedByDefault': 'Show tools opened by default',
'settings.openchamber.visual.section.sessionAssistance': 'Session Assistance',
'settings.openchamber.visual.section.reasoning': 'Reasoning',
'settings.openchamber.visual.section.streaming': 'Streaming',
'settings.openchamber.visual.field.streamingAutoFollow': 'Follow new content while streaming',
'settings.openchamber.visual.field.streamingAutoFollowAria': 'Automatically follow new content while a response streams',
'settings.openchamber.visual.field.streamingAutoFollowInfo': 'While a reply streams in, the view keeps gliding to the newest content. Turn this off to keep the view still and scroll manually; sending a message while scrolled up then also leaves the view where it is.',
'settings.openchamber.visual.section.messageAppearance': 'Message Appearance',
'settings.openchamber.visual.section.toolsAndFiles': 'Tools & Files',
'settings.openchamber.visual.section.composer': 'Composer',
@@ -1856,8 +1977,6 @@ export const settingsDict = {
'settings.openchamber.visual.field.selectWeekStartAria': 'Select week start',
'settings.openchamber.visual.actions.reloadThemes': 'Reload themes',
'settings.openchamber.visual.actions.reloadingThemes': 'Reloading themes...',
'settings.openchamber.visual.field.macVibrancy': 'Window transparency',
'settings.openchamber.visual.field.macVibrancyHint': 'Use the native macOS blur (vibrancy) behind the sidebar. Turn off for fully solid, opaque surfaces.',
'settings.openchamber.visual.field.dockBadge': 'Dock badge',
'settings.openchamber.visual.field.dockBadgeHint': 'Show a count of chats with unseen activity on the macOS dock icon.',
'settings.openchamber.visual.actions.saveAndRestart': 'Save & restart',
@@ -1903,6 +2022,10 @@ export const settingsDict = {
'settings.openchamber.visual.actions.resetInputBarOffsetAria': 'Reset input bar offset',
'settings.openchamber.visual.field.terminalQuickKeysAria': 'Terminal quick keys',
'settings.openchamber.visual.field.terminalQuickKeys': 'Terminal Quick Keys',
'settings.openchamber.visual.field.sessionTabsGroup': 'Session tabs',
'settings.openchamber.visual.field.sessionTabs': 'Show sessions as tabs in the header',
'settings.openchamber.visual.field.sessionTabsAria': 'Toggle session tabs in the header',
'settings.openchamber.visual.field.sessionTabsInfo': 'Sessions you open line up as tabs in the header. Turning this off restores the plain session title.',
'settings.openchamber.visual.field.terminalQuickKeysTooltip': 'Show Esc, Ctrl, Arrows in terminal view',
'settings.openchamber.visual.field.fileEditorKeymap': 'File editor keymap',
'settings.openchamber.visual.option.fileEditorKeymap.default': 'Default',
@@ -1935,8 +2058,6 @@ export const settingsDict = {
'settings.openchamber.visual.field.stickyUserHeader': 'Sticky User Header',
'settings.openchamber.visual.field.promptNavigatorEnabledAria': 'Prompt navigator',
'settings.openchamber.visual.field.promptNavigatorEnabled': 'Prompt Navigator',
'settings.openchamber.visual.field.expandedEditorToolbarAria': 'Always show editor toolbar',
'settings.openchamber.visual.field.expandedEditorToolbar': 'Always show editor toolbar (docked under the file tabs)',
'settings.openchamber.visual.field.autoSaveEnabledAria': 'Auto-save files',
'settings.openchamber.visual.field.autoSaveEnabled': 'Auto-save files',
'settings.openchamber.visual.field.autoSaveEnabledInfo': 'Automatically save file edits after you stop typing. Disable to require manual save.',
@@ -2096,4 +2217,5 @@ export const settingsDict = {
'settings.openchamber.visual.field.followUpBehaviorDescription': 'Choose what happens when you press Enter on a follow-up message while the agent is still responding.',
'settings.openchamber.visual.option.followUpBehavior.steer.label': 'Steer',
'settings.openchamber.visual.option.followUpBehavior.queue.label': 'Queue',
...thirdPartyIntegrationI18n.en,
} as const;
+377 -39
View File
@@ -5,6 +5,19 @@ export const dict = {
'terminalView.actions.attachSelection': 'Attach selected output',
'terminalView.actions.restart': 'Restart terminal',
'chat.message.terminalContext': '{terminal}, lines {start}-{end}',
'chat.message.context.codeComment': 'Comment on {file}, lines {start}-{end}',
'chat.message.context.codeCommentLine': 'Comment on {file}, line {line}',
'chat.message.context.chatQuote': 'Quoted from an earlier message',
'chat.message.context.fileQuote': 'Selection from {file}',
'chat.chatInput.chatQuoteContext': 'Chat quotes',
'chat.chatInput.chatQuoteContextRemove': 'Remove chat quotes',
'chat.chatInput.contextPreview.selectedLabel': 'Selected text',
'chat.chatInput.contextPreview.commentLabel': 'User comment',
'chat.chatInput.contextPreview.edit': 'Edit comment',
'chat.chatInput.contextPreview.remove': 'Remove',
'chat.message.context.browserAnnotation': 'Browser annotation ({page})',
'chat.message.context.prComment': 'GitHub PR comment ({label})',
'chat.message.context.prCheck': 'Failed GitHub PR check ({label})',
'chat.chatInput.terminalContext': '{terminal}, lines {start}-{end}',
'chat.chatInput.terminalContextRemove': 'Remove terminal context',
'chat.chatInput.prCommentContext': 'PR comments',
@@ -24,6 +37,7 @@ export const dict = {
'common.language.korean': 'Korean',
'common.language.polish': 'Polish',
'common.language.japanese': 'Japanese',
'common.language.turkish': 'Turkish',
'common.revealPath.finder': 'Reveal in Finder',
'common.revealPath.fileExplorer': 'Open in File Explorer',
'common.revealPath.fileManager': 'Open in File Manager',
@@ -88,6 +102,11 @@ export const dict = {
'mobile.instances.status.connectedDirect': 'Connected · Local network',
'mobile.instances.status.connectedRelay': 'Connected · Private relay',
'mobile.instances.saveEdit': 'Save changes',
'mobile.connectionDebug.title': 'Connection log',
'mobile.connectionDebug.copy': 'Copy',
'mobile.connectionDebug.copied': 'Copied',
'mobile.connectionDebug.close': 'Close',
'mobile.connectionDebug.empty': 'No connection events yet.',
'mobile.nav.changes': 'Changes',
'mobile.nav.settings': 'Settings',
'mobile.surface.closeAria': 'Close',
@@ -111,6 +130,7 @@ export const dict = {
'mobile.sessions.section.worktrees': 'Worktrees',
'mobile.sessions.section.otherProjects': 'Switch project',
'mobile.sessions.section.projects': 'Projects',
'mobile.sessions.section.chats': 'Chats',
'mobile.sessions.empty.noProjectsTitle': 'No projects yet',
'mobile.sessions.empty.noProjectsDescription': 'Add a project to start chatting with your code.',
'mobile.sessions.empty.noSessionsTitle': 'No sessions yet',
@@ -231,8 +251,10 @@ export const dict = {
'sessions.scheduledTasks.dialog.toast.deleted': 'Scheduled task deleted',
'sessions.scheduledTasks.dialog.toast.deleteFailed': 'Failed to delete task',
'sessions.scheduledTasks.dialog.toast.started': 'Task started',
'sessions.scheduledTasks.dialog.toast.startedPersistWarning': 'Task started, but its status could not be saved. It may still show as running until the next successful run.',
'sessions.scheduledTasks.dialog.toast.runFailed': 'Failed to run task',
'sessions.scheduledTasks.dialog.confirm.deleteTask': 'Delete scheduled task "{taskName}"?',
'sessions.scheduledTasks.dialog.confirm.deleteLoopFile': 'Delete loop task "{taskName}" and its markdown file?',
'sessions.scheduledTasks.dialog.schedule.daily': 'Daily {time}',
'sessions.scheduledTasks.dialog.schedule.dailyWithTimezone': 'Daily {time} ({timezone})',
'sessions.scheduledTasks.dialog.schedule.weekly': 'Weekly {days} {time}',
@@ -268,6 +290,9 @@ export const dict = {
'sessions.scheduledTasks.dialog.taskToggle.pauseAria': 'Pause {taskName}',
'sessions.scheduledTasks.dialog.taskToggle.enabled': 'Enabled',
'sessions.scheduledTasks.dialog.taskToggle.paused': 'Paused',
'sessions.scheduledTasks.dialog.loopFile.note': 'Managed by loop file {file}',
'sessions.scheduledTasks.dialog.loopFile.toggleDisabled': 'Enabled is controlled by the loop file; set enabled in the markdown frontmatter',
'sessions.scheduledTasks.dialog.loopFile.actionsDisabled': 'Loop tasks are configured in their .agents/loops markdown file',
'sessions.scheduledTasks.editor.title.edit': 'Edit scheduled task',
'sessions.scheduledTasks.editor.title.new': 'New scheduled task',
'sessions.scheduledTasks.editor.description': 'Configure a server-side task that creates a new session and sends a prompt.',
@@ -360,7 +385,7 @@ export const dict = {
'multirun.launcher.attachments.attach': 'Attach',
'multirun.launcher.attachments.tooltip': 'Same files sent to all runs',
'multirun.launcher.models.label': 'Models',
'multirun.launcher.models.info': 'Select 2-{max} models. Same model can be added multiple times.',
'multirun.launcher.models.info': 'Select 2 or more models. Same model can be added multiple times.',
'multirun.launcher.toast.fileTooLarge': 'File "{fileName}" is too large (max 10MB)',
'multirun.launcher.toast.attachFailed': 'Failed to attach "{fileName}"',
'multirun.launcher.toast.attachedSingle': 'Attached {count} file',
@@ -427,9 +452,16 @@ export const dict = {
'sessions.sidebar.empty.noMatches.title': 'No matching sessions',
'sessions.sidebar.empty.noMatches.description': 'Try a different title, branch, folder, or path.',
'sessions.sidebar.activity.recentTitle': 'recent',
'sessions.sidebar.activity.chatsTitle': 'chats',
'sessions.sidebar.activity.chatsEmpty': 'No chats yet.',
'chat.chatInput.chooseProject': 'Choose project',
'sessions.archivePage.allDirectories': 'All directories',
'sessions.sidebar.header.displayMode.stickyHeaders': 'Sticky project headers',
'sessions.sidebar.header.grouping.label': 'Group sessions',
'sessions.sidebar.header.projectDisplay.label': 'Show projects',
'sessions.sidebar.header.projectDisplay.all': 'All projects',
'sessions.sidebar.header.projectDisplay.single': 'One project',
'sessions.sidebar.project.selectAria': 'Select project, currently {project}',
'sessions.sidebar.header.grouping.byWorktree': 'By worktree',
'sessions.sidebar.header.grouping.flat': 'Flat list',
'sessions.sidebar.project.actions.manageWorktrees': 'Manage worktrees',
@@ -451,6 +483,10 @@ export const dict = {
'sessions.archivePage.deleteSessionAria': 'Delete {title}',
'sessions.archivePage.restoreSessionAria': 'Restore {title}',
'sessions.switcher.openAria': 'Open session switcher',
'header.sessionTabs.stripAria': 'Open sessions',
'header.sessionTabs.tabMenuAria': 'Session tab actions',
'header.sessionTabs.closeTab': 'Close tab',
'header.sessionTabs.closeOtherTabs': 'Close other tabs',
'sessions.switcher.empty': 'No recent sessions',
'sessions.switcher.draftTitle': 'New session',
'sessions.sidebar.updateCheck.errorTitle': 'Failed to check for updates',
@@ -502,11 +538,33 @@ export const dict = {
'sessions.sidebar.session.menu.unshare': 'Unshare',
'sessions.sidebar.session.menu.exportMarkdown': 'Export Markdown',
'sessions.sidebar.session.menu.moveToWorktree': 'Move to new worktree',
'sessions.sidebar.session.menu.moveToWorktreeTargets': 'Move to worktree',
'sessions.sidebar.session.menu.newWorktree': 'New worktree...',
'sessions.sidebar.session.moveToWorktree.success': 'Session moved to a new worktree',
'sessions.sidebar.session.moveToWorktree.failed': 'Failed to move session to a new worktree',
'sessions.sidebar.session.moveToWorktree.tooltip': 'Creates a new worktree from the current branch, transfers uncommitted changes, and moves this session and its sub-sessions there.',
'sessions.sidebar.session.moveToWorktree.main': 'Main worktree',
'sessions.sidebar.session.moveToWorktree.refreshing': 'Refreshing worktrees...',
'sessions.sidebar.session.moveToWorktree.loadFailed': 'Worktrees could not be loaded',
'sessions.sidebar.session.moveToWorktree.current': 'Current worktree',
'sessions.sidebar.session.moveToWorktree.existingSuccess': 'Session moved to worktree',
'sessions.sidebar.session.moveToWorktree.existingFailed': 'Failed to move session to worktree',
'sessions.sidebar.session.moveToWorktree.tooltipTargets': 'Shows existing worktrees and the option to create a new one for this session.',
'sessions.sidebar.session.moveToWorktree.tooltip': 'Creates a new worktree from the current branch and moves this session and its sub-sessions there. When the source has uncommitted changes, you choose whether to move them.',
'sessions.sidebar.session.moveToWorktree.tooltipBusy': 'Available when the session is idle. Stop or wait for the current activity to finish.',
'sessions.sidebar.session.moveToWorktree.tooltipMoving': 'This session is already being moved to a new worktree.',
'sessions.sidebar.session.moveToWorktree.confirm.title': 'Source has uncommitted changes',
'sessions.sidebar.session.moveToWorktree.confirm.changedFiles': 'Changed files in this worktree: {count}.',
'sessions.sidebar.session.moveToWorktree.confirm.ownership': 'OpenCode tracks these changes by directory, not by session.',
'sessions.sidebar.session.moveToWorktree.confirm.sessionOnlyHelp': 'Move this session and its sub-sessions while leaving every source file unchanged.',
'sessions.sidebar.session.moveToWorktree.confirm.allChangesHelp': 'Transfer changes under the session directory. Unstaged and untracked files leave the source after success.',
'sessions.sidebar.session.moveToWorktree.confirm.stagedWarning': 'Staged changes remain in the source and are copied to the destination.',
'sessions.sidebar.session.moveToWorktree.confirm.baseWarning': 'The transfer can fail when the destination uses a different Git base.',
'sessions.sidebar.session.moveToWorktree.confirm.sessionOnly': 'Move session only',
'sessions.sidebar.session.moveToWorktree.confirm.allChanges': 'Move all source changes',
'sessions.sidebar.session.moveToWorktree.confirm.cancel': 'Cancel',
'sessions.sidebar.session.moveToWorktree.sourceVerificationFailed': 'Source changes could not be verified. No worktree or session was changed.',
'sessions.sidebar.session.moveToWorktree.applyChangesFailed': 'The destination could not accept the source changes. The session and source changes were not moved. Retry and choose Move session only.',
'sessions.sidebar.session.moveToWorktree.changesMayBeInDestination': 'The connection dropped before the destination confirmed the move. The session may not have moved, and your uncommitted changes may already be in the destination worktree. Check there before retrying.',
'sessions.sidebar.session.menu.runFusion': 'Run fusion',
'sessions.sidebar.session.menu.openInSidePanel': 'Open in Side Panel',
'sessions.sidebar.session.actions.openInEditor': 'Open in Editor',
@@ -530,6 +588,10 @@ export const dict = {
'sessions.sidebar.session.status.pinned': 'Pinned session',
'sessions.sidebar.session.status.movingToWorktree': 'Moving session to a new worktree',
'sessions.sidebar.session.status.permissionRequired': 'Permission required',
'sessions.sidebar.session.status.questionPendingSingle': '1 pending question',
'sessions.sidebar.session.status.questionPendingMany': '{count} pending questions',
'sessions.sidebar.session.status.activeFor': 'Active for {duration}',
'sessions.sidebar.session.status.lastTurnDuration': 'Last turn took {duration}',
'sessions.sidebar.session.subsessions.collapse': 'Collapse subsessions',
'sessions.sidebar.session.subsessions.expand': 'Expand subsessions',
'sessions.sidebar.dialogs.deleteSession.title': 'Delete session?',
@@ -983,6 +1045,8 @@ export const dict = {
'gitView.pr.field.draft': 'Draft',
'gitView.pr.field.title': 'Title',
'gitView.pr.githubNotConnected': 'GitHub is not connected',
'gitView.pr.history.merged': 'PR #{number} was merged into {base}.',
'gitView.pr.history.closed': 'PR #{number} was closed.',
'gitView.pr.loadingDescription': 'Loading description...',
'gitView.pr.mergeMethod.merge': 'Create a merge commit',
'gitView.pr.mergeMethod.rebase': 'Rebase and merge',
@@ -1099,11 +1163,20 @@ export const dict = {
'contextPanel.mode.context': 'Context',
'contextPanel.mode.preview': 'Preview',
'contextPanel.mode.browser': 'Browser',
'contextRail.configure.open': 'Configure panels',
'contextRail.configure.dialogTitle': 'Rail panels',
'contextRail.configure.dialogDescription': 'Choose which panels the rail shows. Hidden panels keep their data and stay reachable from the command palette.',
'contextRail.configure.showAll': 'Show all',
'contextRail.configure.noneWarning': 'All panels are hidden.',
'contextRail.aria.rail': 'Panel surfaces',
'contextPanel.editorEmpty.title': 'No file open',
'contextPanel.editorEmpty.description': 'Pick a file from the tree to start editing.',
'contextRail.surface.editor.description': 'Edit project files',
'contextRail.surface.git.description': 'Commits, branches, and pull requests',
'contextRail.surface.git.changesCountAriaSingle': '{label}, {count} changed file',
'contextRail.surface.git.changesCountAriaPlural': '{label}, {count} changed files',
'contextRail.surface.git.changesCountTooltipSingle': '{count} changed file',
'contextRail.surface.git.changesCountTooltipPlural': '{count} changed files',
'contextRail.surface.terminal.description': 'Built-in terminal',
'contextRail.surface.diff.description': 'Review working changes',
'contextPanel.mode.walkthrough': 'Walkthrough',
@@ -1143,8 +1216,11 @@ export const dict = {
'walkthrough.toc.moreFiles': 'More files: {count}',
'walkthrough.toc.uncovered': 'Not covered: {count}',
'walkthrough.toc.resize': 'Resize the contents column',
'walkthrough.importance.critical': 'Critical',
'walkthrough.importance.critical': 'Key change',
'walkthrough.importance.criticalHint': 'This step drives the rest of the change, so read it closely. It is not a problem found in your code.',
'walkthrough.importance.context': 'Context',
'walkthrough.importance.contextHint': 'A supporting change, included so the rest makes sense.',
'walkthrough.help.guide': 'How walkthroughs work',
'walkthrough.blocked.noModel.title': 'No small model available',
'walkthrough.blocked.noModel.description': 'Sign in to a model provider to generate a review.',
'walkthrough.blocked.emptyDiff.title': 'Nothing to review',
@@ -1159,22 +1235,77 @@ export const dict = {
'walkthrough.blocked.outputExhausted.descriptionUnknownModel': 'The small model spent its whole output allowance on reasoning and returned nothing. Reasoning models often do this on large diffs — a model that thinks less, or reviewing a narrower scope, will get through.',
'walkthrough.blocked.onlyGenerated.title': 'Only generated files changed',
'walkthrough.blocked.onlyGenerated.description': 'Every change here is a lockfile or other tool-produced output, which the review deliberately skips.',
'walkthrough.blocked.serverUnsupported.title': 'This server has no walkthrough support',
'walkthrough.blocked.serverUnsupported.description': 'The OpenChamber server this app is connected to did not answer the walkthrough API, which means it is older than the app. Update the server to 1.18 or newer, then refresh.',
'walkthrough.blocked.contextTooSmall.descriptionUnknownModel': 'The small model fits about {available}K characters and this diff needs about {required}K. Nothing gets truncated — pick a model with a larger context instead.',
'walkthrough.blocked.structuredOutput.descriptionUnknownModel': 'The small model does not support the structured responses a walkthrough needs.',
'contextRail.surface.plan.description': 'View the current plan',
'contextRail.surface.pr.description': 'Create, review, and merge the pull request for the current branch',
'contextRail.surface.notes.description': 'Notes, todos, and plans for the project',
'contextRail.surface.notes.description': 'Notes, todos, plans, and agent memory for the project',
'contextRail.surface.context.description': 'Session context and token usage',
'contextRail.surface.browser.description': 'Built-in web browser',
'contextRail.surface.preview.description': 'Dev server preview',
'contextRail.surface.chat.description': 'Session opened side by side',
'contextRail.surface.notes': 'Project notes',
'contextRail.surface.notes': 'Project knowledge',
'contextRail.editorTree.toggle': 'Toggle file tree',
'contextPanel.browser.open': 'Open browser panel',
'contextPanel.browser.addressAria': 'Browser address',
'contextPanel.browser.history.label': 'Recent addresses',
'contextPanel.browser.history.forget': 'Remove from history',
'contextPanel.browser.newTab': 'New browser tab',
'contextPanel.browser.empty': 'Web browser',
'contextPanel.browser.emptyHint': 'Enter an address above to start browsing the web',
'contextPanel.browser.inspectUnavailable': 'This page cannot be inspected from the browser panel.',
'contextPanel.browser.back': 'Back',
'contextPanel.browser.forward': 'Forward',
'contextPanel.browser.reload': 'Reload',
'contextPanel.browser.hardReload': 'Reload ignoring cache',
'contextPanel.browser.zoomIn': 'Zoom in',
'contextPanel.browser.zoomOut': 'Zoom out',
'contextPanel.browser.zoomReset': 'Reset zoom',
'contextPanel.browser.clearCookies': 'Clear cookies',
'contextPanel.browser.clearCache': 'Clear cache',
'contextPanel.browser.clearedCookies': 'Cookies cleared',
'contextPanel.browser.clearedCache': 'Cache cleared',
'contextPanel.browser.clearFailed': 'Could not clear browsing data',
'contextPanel.browser.stop': 'Stop',
'contextPanel.browser.openExternal': 'Open in system browser',
'contextPanel.browser.devTools': 'Open DevTools',
'contextPanel.browser.deviceToolbar': 'Toggle device toolbar',
'contextPanel.browser.device.preset': 'Device preset',
'contextPanel.browser.device.responsive': 'Responsive',
'contextPanel.browser.device.width': 'Viewport width',
'contextPanel.browser.device.height': 'Viewport height',
'contextPanel.browser.device.rotate': 'Rotate',
'contextPanel.browser.device.schemeSystem': 'Auto',
'contextPanel.browser.device.schemeLight': 'Light',
'contextPanel.browser.device.schemeDark': 'Dark',
'contextPanel.browser.device.schemeFailed': 'Could not change the page appearance',
'contextPanel.browser.frameTitle': 'Browser',
'contextPanel.browser.loadFailed': 'This page could not be loaded',
'contextPanel.browser.waitingForServer': 'Waiting for the dev server',
'contextPanel.browser.waitingForServerHint': 'It is not accepting connections yet. This page will load as soon as it does.',
'contextPanel.browser.tunnelFailed': 'This dev server could not be reached',
'contextPanel.browser.tunnelFailedHint': '{url} runs on the machine OpenChamber is on, and the connection to it could not be opened. Nothing from your own machine is shown here.',
'contextPanel.browser.loadFailedUnknown': 'The page could not be reached.',
'contextPanel.browser.crashed': 'This page stopped responding',
'contextPanel.browser.crashedHint': 'The page crashed repeatedly. Reload to try again.',
'contextPanel.browser.devServers.title': 'Running dev servers',
'projectActions.toast.multipleServers': 'Several servers started — pick one in the browser panel',
'contextPanel.browser.devServers.justStarted': 'Just started',
'contextPanel.browser.devServers.unavailable': 'Could not check for running dev servers.',
'contextPanel.browser.devServers.remoteOnly': 'These run on the machine hosting OpenChamber. Opening them needs the desktop app.',
'contextPanel.browser.annotate.toggle': 'Annotate page',
'contextPanel.browser.annotate.intro': 'This is an annotated selection from the in-app browser.',
'contextPanel.browser.annotate.attached': 'Annotation attached to chat',
'contextPanel.browser.annotate.noSession': 'Open a chat session before attaching an annotation',
'contextPanel.browser.annotate.noPage': 'Load a page before annotating',
'contextPanel.browser.annotate.failed': 'Could not annotate this page',
'contextPanel.browser.annotate.tool.element': 'Element',
'contextPanel.browser.annotate.tool.region': 'Region',
'contextPanel.browser.annotate.tool.draw': 'Draw',
'contextPanel.browser.annotate.commentPlaceholder': 'Describe the change...',
'contextPanel.browser.annotate.submit': 'Attach',
'contextPanel.browser.trustNotice': 'Pages opened here run with full access to OpenChamber — needed for inspect and screenshots. Only open sites you trust: a malicious page could read your data or act on your behalf.',
'contextPanel.tab.closeTabAria': 'Close {label} tab',
'contextPanel.actions.collapsePanel': 'Collapse panel',
@@ -1244,6 +1375,14 @@ export const dict = {
'sidebarFilesTree.toast.writeNotSupported': 'Write not supported',
'sidebarFilesTree.toast.fileCreated': 'File created',
'sidebarFilesTree.toast.operationFailed': 'Operation failed',
'sidebarFilesTree.toast.uploaded': 'Files uploaded',
'sidebarFilesTree.toast.uploadedWithoutConflicts': 'Files without conflicts were uploaded',
'sidebarFilesTree.toast.uploadFailed': 'Some files could not be uploaded',
'sidebarFilesTree.drop.target': 'Upload to {path}',
'sidebarFilesTree.drop.uploading': 'Uploading files to {path}',
'sidebarFilesTree.dialog.uploadConflicts.title': 'Replace existing files?',
'sidebarFilesTree.dialog.uploadConflicts.description': 'Files with these names already exist in {path}. Replacing them cannot be undone.',
'sidebarFilesTree.dialog.uploadConflicts.replace': 'Replace',
'sidebarFilesTree.toast.folderNameRequired': 'Folder name is required',
'sidebarFilesTree.toast.folderCreated': 'Folder created',
'sidebarFilesTree.toast.nameRequired': 'Name is required',
@@ -1300,6 +1439,12 @@ export const dict = {
'filesView.editor.disableLineWrap': 'Disable line wrap',
'filesView.editor.enableLineWrap': 'Enable line wrap',
'filesView.editor.findInFile': 'Find in file',
'filesView.preview.find.placeholder': 'Find in preview',
'filesView.preview.find.nextAria': 'Next match',
'filesView.preview.find.previousAria': 'Previous match',
'filesView.preview.find.closeAria': 'Close search',
'filesView.preview.find.noMatches': 'No matches',
'filesView.preview.find.countAria': '{current} of {total}',
'filesView.editor.goToLine': 'Go to line',
'filesView.editor.switchToEditMode': 'Switch to edit mode',
'filesView.editor.switchToPreviewMode': 'Switch to preview mode',
@@ -1351,10 +1496,12 @@ export const dict = {
'contextUsage.mobile.usedTokens': 'Used tokens',
'contextUsage.mobile.contextLimit': 'Context limit',
'contextUsage.mobile.outputLimit': 'Output limit',
'contextUsage.mobile.cost': 'Cost',
'contextUsage.mobile.usage': 'Usage',
'contextUsage.tooltip.usedTokens': 'Used tokens: {tokens}',
'contextUsage.tooltip.contextLimit': 'Context limit: {tokens}',
'contextUsage.tooltip.outputLimit': 'Output limit: {tokens}',
'contextUsage.tooltip.cost': 'Cost: {cost}',
'contextSidebar.session.untitled': 'Untitled Session',
'contextSidebar.empty.openSession': 'Open a session to inspect context.',
'contextSidebar.section.context': 'Context',
@@ -1381,6 +1528,7 @@ export const dict = {
'planView.file.defaultName': 'plan',
'planView.title.default': 'Plan',
'planView.error.saveFailed': 'Save failed',
'planView.error.loadFailed': 'Could not load this plan',
'planView.error.previewUnavailable': 'Preview unavailable',
'planView.error.switchToEditMode': 'Switch to edit mode to fix the issue.',
'planView.error.writeFailed': 'Write failed',
@@ -1422,6 +1570,13 @@ export const dict = {
'diffView.scope.changed': 'Changed',
'diffView.scope.staged': 'Staged',
'diffView.scope.lastTurn': 'Last turn',
'diffView.scope.branch': 'Branch',
'diffView.branch.resolvingBase': 'Detecting base branch...',
'diffView.branch.noBaseTitle': 'No base branch',
'diffView.branch.noBaseDescription': 'Git has no record of where this branch started. Choose a base branch to compare against.',
'diffView.branch.loadError': 'Failed to load branch changes',
'diffView.branch.loadingFiles': 'Loading branch changes...',
'diffView.branch.empty': 'No changes on this branch relative to {base}',
'diffView.scope.selectorAria': 'Select change mode',
'diffView.actions.retry': 'Retry',
'diffView.actions.renderAnyway': 'Render anyway',
@@ -1446,6 +1601,12 @@ export const dict = {
'diffView.reviewDialog.toast.noSessionDirectory': 'Session directory is unavailable',
'diffView.reviewDialog.toast.startFailed': 'Failed to start review flow',
'chat.history.loadOlder': 'Load older messages',
'chat.appLink.confirm.title': 'Open this link in another application?',
'chat.appLink.confirm.description': 'This chat link uses the {scheme} protocol and will open in another application.',
'chat.appLink.confirm.descriptionPlain': 'This chat link will open in another application.',
'chat.appLink.confirm.cancel': 'Cancel',
'chat.appLink.confirm.open': 'Open once',
'chat.appLink.confirm.trustAndOpen': 'Trust and open',
'chat.autoReview.title': 'Code review loop is running',
'chat.autoReview.status.waitingForReviewer': 'Waiting for reviewer',
'chat.autoReview.status.waitingForImplementer': 'Waiting for implementer',
@@ -1463,11 +1624,46 @@ export const dict = {
'diffView.hunk.unsupported': 'Staging individual hunks is not supported in this runtime.',
'rightSidebar.contextNotesTodo.plan.defaultTitle': 'Plan',
'rightSidebar.contextNotesTodo.empty.selectProject': 'Select a project to add notes and todos.',
'rightSidebar.contextNotesTodo.notes.title': 'Quick notes - {project}',
'rightSidebar.contextNotesTodo.notes.placeholder': 'Capture context, reminders, or links',
'rightSidebar.contextNotesTodo.todo.title': 'Todo',
'rightSidebar.contextNotesTodo.todo.itemsSingle': '{count} item',
'rightSidebar.contextNotesTodo.todo.itemsPlural': '{count} items',
'rightSidebar.contextNotesTodo.notes.addAria': 'Add note',
'rightSidebar.contextNotesTodo.notes.empty': 'No notes yet. Capture context, reminders, or links.',
'rightSidebar.contextNotesTodo.notes.actions.expand': 'Expand note',
'rightSidebar.contextNotesTodo.notes.actions.collapse': 'Collapse note',
'rightSidebar.contextNotesTodo.notes.actions.delete': 'Delete note',
'rightSidebar.contextNotesTodo.notes.actions.pin': 'Pin to agent context',
'rightSidebar.contextNotesTodo.notes.actions.unpin': 'Unpin from agent context',
'rightSidebar.contextNotesTodo.notes.source.selection': 'From chat',
'rightSidebar.contextNotesTodo.notes.source.agent': 'From agent',
'rightSidebar.contextNotesTodo.search.placeholder': 'Search',
'rightSidebar.contextNotesTodo.search.clear': 'Clear search',
'rightSidebar.contextNotesTodo.search.noResults': 'Nothing matches "{query}".',
'rightSidebar.contextNotesTodo.toast.deleteNoteFailed': 'Failed to delete note',
'rightSidebar.contextNotesTodo.toast.createNoteFailed': 'Failed to create note',
'rightSidebar.contextNotesTodo.tabs.notes': 'Notes',
'rightSidebar.contextNotesTodo.tabs.todos': 'Todo',
'rightSidebar.contextNotesTodo.tabs.plans': 'Plans',
'rightSidebar.contextNotesTodo.plans.actions.back': 'Back to plans',
'rightSidebar.contextNotesTodo.tabs.memory': 'Memory',
'rightSidebar.contextNotesTodo.sections.label': 'Project context sections',
'rightSidebar.contextNotesTodo.sections.resize': 'Resize sections sidebar',
'rightSidebar.contextNotesTodo.memory.scope.project': 'Project',
'rightSidebar.contextNotesTodo.memory.scope.label': 'Memory scope',
'rightSidebar.contextNotesTodo.memory.scope.global': 'About you',
'rightSidebar.contextNotesTodo.memory.type.fact': 'fact',
'rightSidebar.contextNotesTodo.memory.badge.new': 'new',
'rightSidebar.contextNotesTodo.memory.flagged': 'Withheld from the agent — reads as an instruction',
'rightSidebar.contextNotesTodo.memory.badge.changed': 'changed',
'rightSidebar.contextNotesTodo.memory.type.preference': 'preference',
'rightSidebar.contextNotesTodo.memory.type.reference': 'reference',
'rightSidebar.contextNotesTodo.memory.actions.delete': 'Forget this memory',
'rightSidebar.contextNotesTodo.memory.actions.editTitle': 'Memory title',
'rightSidebar.contextNotesTodo.memory.actions.editBody': 'Memory text',
'rightSidebar.contextNotesTodo.memory.toast.saveFailed': 'Failed to save memory',
'rightSidebar.contextNotesTodo.memory.toast.deleteFailed': 'Failed to forget memory',
'rightSidebar.contextNotesTodo.memory.empty.nothing': 'The agent has stored nothing here yet.',
'rightSidebar.contextNotesTodo.memory.empty.noMatches': 'No stored memory matches your search.',
'rightSidebar.contextNotesTodo.memory.empty.noProject': 'Open a project to see what the agent remembers about it.',
'rightSidebar.contextNotesTodo.memory.empty.unavailable': 'Stored memory could not be loaded. Nothing has been lost — try again.',
'rightSidebar.contextNotesTodo.todo.clearCompleted': 'Clear completed',
'rightSidebar.contextNotesTodo.todo.inputPlaceholder': 'Add a todo',
'rightSidebar.contextNotesTodo.todo.addAria': 'Add todo',
@@ -1478,13 +1674,9 @@ export const dict = {
'rightSidebar.contextNotesTodo.todo.actions.delete': 'Delete "{text}"',
'rightSidebar.contextNotesTodo.todo.actions.send': 'Send "{text}"',
'rightSidebar.contextNotesTodo.todo.actions.reorder': 'Reorder "{text}"',
'rightSidebar.contextNotesTodo.todo.resizeAria': 'Resize todo list',
'rightSidebar.contextNotesTodo.todo.sendMenu.currentSession': 'Send to current session',
'rightSidebar.contextNotesTodo.todo.sendMenu.newSession': 'Send to new session',
'rightSidebar.contextNotesTodo.todo.sendMenu.newWorktreeSession': 'Send to new worktree session',
'rightSidebar.contextNotesTodo.plans.title': 'Plans',
'rightSidebar.contextNotesTodo.plans.filesSingle': '{count} file',
'rightSidebar.contextNotesTodo.plans.filesPlural': '{count} files',
'rightSidebar.contextNotesTodo.plans.importFromFile': 'Import plan from file',
'rightSidebar.contextNotesTodo.plans.empty': 'No saved plans yet.',
'rightSidebar.contextNotesTodo.plans.deletePlan': 'Delete plan',
@@ -1504,13 +1696,14 @@ export const dict = {
'rightSidebar.contextNotesTodo.toast.sentToNewSession': 'Todo sent to new session',
'rightSidebar.contextNotesTodo.toast.sentToNewWorktreeSession': 'Todo sent to new worktree session',
'rightSidebar.contextNotesTodo.toast.sendTodoFailed': 'Failed to send todo',
'rightSidebar.contextNotesTodo.toast.updatePlanFailed': 'Failed to update plan',
'rightSidebar.contextNotesTodo.toast.deletePlanFailed': 'Failed to delete plan',
'rightSidebar.contextNotesTodo.toast.planFileEmpty': 'Plan file is empty',
'rightSidebar.contextNotesTodo.toast.importPlanFailed': 'Failed to import plan',
'rightSidebar.contextNotesTodo.toast.planImported': 'Plan imported',
'rightSidebar.contextNotesTodo.toast.readPlanFileFailed': 'Failed to read plan file',
'inlineComment.range.lines': 'Lines {start}-{end}',
'inlineComment.input.placeholder': 'Add a comment... (Cmd+Enter to save)',
'inlineComment.input.placeholder': 'Add a comment... ({shortcut} to save)',
'inlineComment.input.placeholderShort': 'Add a comment...',
'inlineComment.actions.cancel': 'Cancel',
'inlineComment.actions.save': 'Save',
@@ -1529,8 +1722,6 @@ export const dict = {
'header.github.accountSource.cli': 'CLI',
'header.services.openWithCurrent': 'Open instance, usage and MCP (current: {current})',
'header.services.open': 'Open services, usage and MCP',
'header.services.tooltip.currentInstanceWithShortcuts': 'Current instance: {current} ({toggle}; next tab {nextTab})',
'header.services.tooltip.servicesWithShortcuts': 'Services ({toggle}; next tab {nextTab})',
'header.services.title': 'Services',
'header.services.viewAria': 'View services',
'header.services.closeAria': 'Close services',
@@ -1547,7 +1738,6 @@ export const dict = {
'header.services.used': 'Used',
'header.services.remaining': 'Remaining',
'header.services.modelFamily.other': 'Other',
'header.services.shutdownDev': 'Stop OpenChamber',
'header.actions.openPlanAria': 'Open plan',
'header.actions.toggleChangesPanel': 'Changes panel',
'header.actions.toggleChangesPanelAria': 'Toggle changes panel',
@@ -1640,6 +1830,10 @@ export const dict = {
'directoryExplorerDialog.browse.directories': 'Directories',
'directoryExplorerDialog.browse.loading': 'Loading directories...',
'directoryExplorerDialog.browse.empty': 'No matching directories.',
'directoryExplorerDialog.browse.permissionDenied': 'OpenChamber needs access to this folder.',
'directoryExplorerDialog.browse.loadFailed': 'Could not load this folder.',
'directoryExplorerDialog.browse.grantAccess': 'Grant access',
'directoryExplorerDialog.browse.retry': 'Try again',
'directoryExplorerDialog.browse.parentDirectory': 'Parent directory',
'directoryExplorerDialog.browse.addedBadge': 'Added',
'directoryExplorerDialog.browse.quickAdd': 'Add',
@@ -1699,22 +1893,18 @@ export const dict = {
'helpDialog.item.focusChatInput': 'Focus Chat Input',
'helpDialog.item.togglePromptNavigator': 'Toggle Prompt Navigator',
'helpDialog.item.abortActiveRun': 'Abort active run (double press)',
'helpDialog.item.toggleRightSidebar': 'Toggle context panel',
'helpDialog.item.openRightSidebarGitTab': 'Open Git surface',
'helpDialog.item.openRightSidebarFilesTab': 'Open Files surface',
'helpDialog.item.toggleTerminalDock': 'Toggle Terminal Dock',
'helpDialog.item.toggleTerminalExpanded': 'Toggle Terminal Expanded',
'helpDialog.item.togglePlanContextPanel': 'Toggle Plan Context Panel',
'helpDialog.item.switchSessionTab': 'Switch Session Tab',
'helpDialog.item.switchContextSurface': 'Switch Context Panel Surface (number key)',
'helpDialog.item.cycleTheme': 'Cycle Theme (Light → Dark → System)',
'helpDialog.item.switchProject': 'Switch Project',
'helpDialog.item.toggleServicesMenu': 'Toggle Services Menu',
'helpDialog.item.cycleServicesTab': 'Cycle Services Tab',
'helpDialog.item.openSettings': 'Open Settings',
'helpDialog.keyCombiner.or': 'or',
'helpDialog.proTips.title': 'Pro Tips:',
'helpDialog.proTips.commandPalette': 'Use Command Palette ({shortcut}) to quickly access all actions',
'helpDialog.proTips.recentSessions': 'The 5 most recent sessions appear in the Command Palette',
'helpDialog.proTips.themeCycling': 'Theme cycling remembers your preference across sessions',
'helpDialog.proTips.leaderSequences': 'Two-step shortcuts: press the first combo, then the second key — Esc cancels',
'header.actions.rightSidebarWithShortcut': 'Right sidebar ({shortcut})',
'header.actions.toggleRightSidebarAria': 'Toggle right sidebar',
'header.actions.openAppMenu': 'OpenChamber menu',
@@ -1798,8 +1988,6 @@ export const dict = {
'session.newWorktree.noMatchingBranches': 'No matching branches',
'session.newWorktree.localBranches': 'Local branches',
'session.newWorktree.remoteBranches': 'Remote branches',
'session.newWorktree.otherLocalBranches': 'Other local branches',
'session.newWorktree.otherRemoteBranches': 'Other remote branches',
'session.newWorktree.branchName': 'Branch Name',
'session.newWorktree.branchNamePlaceholder': 'feature/my-awesome-feature',
'session.newWorktree.actions.change': 'Change',
@@ -1924,7 +2112,6 @@ export const dict = {
'chat.statusRow.tasksTitle': 'Tasks',
'chat.statusRow.modelStatus': '{model} is {status}',
'chat.statusRow.summary.activeLeft': '{active} active · {left} left',
'chat.statusRow.aborted': 'Aborted',
'chat.revertIndicator.redo': 'Redo',
'chat.revertIndicator.redoAria': 'Redo — restore reverted messages',
'chat.revertPopover.title': 'Reverted',
@@ -1938,6 +2125,9 @@ export const dict = {
'chat.revert.toast.undo': 'Reverted to {preview}',
'chat.revert.toast.redo': 'Redone',
'chat.revert.toast.restored': 'Restored all messages',
'chat.toast.opencodeRestartInterrupted.title': 'Chat interrupted',
'chat.toast.opencodeRestartInterrupted.description': 'OpenCode restarted while a response was still running. Send a message to continue.',
'chat.toast.opencodeRestartInterrupted.openSession': 'Open session',
'chat.errorBoundary.title': 'Chat Error',
'chat.errorBoundary.description': 'The chat interface encountered an error. This might be due to a temporary network issue or corrupted message data.',
'chat.errorBoundary.sessionLabel': 'Session',
@@ -1965,6 +2155,7 @@ export const dict = {
'chat.commandAutocomplete.command.debugDescription': 'Guided root-cause investigation for a bug before proposing a fix.',
'chat.commandAutocomplete.command.weighDescription': 'Weigh 2-3 approaches with trade-offs and a recommendation before you commit.',
'chat.commandAutocomplete.command.exploreDescription': 'Get oriented in this codebase: a high-level tour of the architecture and main parts.',
'chat.commandAutocomplete.command.btwDescription': 'Ask a side question in a temporary child session without derailing this chat.',
'chat.commandAutocomplete.badge.skill': 'skill',
'chat.commandAutocomplete.badge.command': 'command',
'chat.commandAutocomplete.badge.system': 'system',
@@ -1985,12 +2176,27 @@ export const dict = {
'chat.container.returnToParent.title': 'Return to parent session',
'chat.container.returnToParent.label': 'Parent',
'chat.container.readOnlySubagentPromptBanner': 'Subagent sessions cannot be prompted.',
'chat.btw.destroyAria': 'Destroy this btw session',
'chat.btw.titleFallback': 'btw session',
'chat.btw.mainComposerPlaceholder': 'Ask in this btw session…',
'chat.btw.loading': 'Starting btw session…',
'chat.btw.toast.emptyArgument': 'Type a question after /btw',
'chat.btw.toast.createFailed': 'Failed to start the btw session',
'chat.btw.toast.destroyFailed': 'Failed to destroy the btw session. It will remain in the sidebar.',
'chat.btw.working': 'Working…',
'chat.btw.collapseAria': 'Collapse the btw panel',
'chat.btw.expandAria': 'Expand the btw panel',
'chat.btw.promoteAria': 'Keep as a separate session',
'chat.btw.toast.promoteFailed': 'Failed to keep the btw session',
'chat.container.sessionLoadError.title': 'Session could not be loaded',
'chat.container.sessionLoadError.description': 'Check the connection and try loading this session again.',
'chat.container.sessionLoadError.description': 'The conversation could not be fetched — the server may be offline or unreachable. Nothing is lost; retry once it is back.',
'chat.container.sessionLoadError.authDescription': 'Your session expired, so the server refused the request. Log in and the conversation will load.',
'chat.container.sessionLoadError.retry': 'Try again',
'sessions.sidebar.group.empty.loadingSessions': 'Loading sessions…',
'sessions.sidebar.group.empty.loadFailed': 'Could not refresh sessions.',
'sessions.sidebar.group.empty.retry': 'Try again',
'sessions.sidebar.group.empty.permissionDenied': 'Folder access is required.',
'sessions.sidebar.group.empty.grantAccess': 'Grant access',
'chat.unifiedControls.title': 'Controls',
'chat.unifiedControls.model.title': 'Model',
'chat.unifiedControls.model.noRecent': 'No recent models',
@@ -2022,12 +2228,13 @@ export const dict = {
'chat.textSelection.toast.addToNotesFailed': 'Failed to add to notes',
'chat.textSelection.toast.addToNotesSuccess': 'Added selected text to notes',
'chat.textSelection.toast.addToNotesSummaryFailed': 'Could not summarize selection, added selected text to notes',
'chat.textSelection.actions.addToChat': 'Add to chat',
'chat.textSelection.actions.newSession': 'New session',
'chat.textSelection.actions.copy': 'Copy',
'chat.textSelection.actions.addToInput': 'Add to input',
'chat.textSelection.actions.comment': 'Comment',
'chat.textSelection.title.commentOnSelection': 'Comment on selection',
'chat.textSelection.comment.placeholder': 'Add an optional comment...',
'chat.textSelection.comment.attach': 'Attach',
'chat.textSelection.actions.addToNotes': 'Add to notes',
'chat.textSelection.title.addToCurrentChat': 'Add to current chat',
'chat.textSelection.title.newSessionWithSelection': 'Create new session with selection',
'chat.textSelection.title.saveInsightToNotes': 'Save selected text to notes',
'chat.messageBody.actions.revertAria': 'Revert to this message',
'chat.messageBody.actions.revert': 'Revert from here',
@@ -2123,6 +2330,7 @@ export const dict = {
'chat.chatInput.toast.attachmentsTooLarge': 'Attachments are too large to send. Please try reducing the number or size of images.',
'chat.chatInput.toast.sendAttachmentsFailed': 'Failed to send attachments. Try fewer files or smaller images.',
'chat.chatInput.toast.messageSendFailed': 'Message failed to send. Attachments restored.',
'chat.chatInput.toast.noModelSelected': 'Select a provider and model before sending.',
'chat.chatInput.toast.clipboardAttachFailed': 'Failed to attach image from clipboard',
'chat.chatInput.toast.clipboardTextAttachFailed': 'Failed to attach pasted text as a file',
'chat.chatInput.toast.largeTextPaste.title': 'Large text detected',
@@ -2138,8 +2346,6 @@ export const dict = {
'chat.chatInput.toast.togglePermissionAutoAcceptFailed': 'Failed to toggle permission auto-accept',
'chat.chatInput.reviewComments': 'Review comments:',
'chat.chatInput.reviewCommentsRemove': 'Remove review comments',
'chat.chatInput.devServerLogs': 'Dev Server logs:',
'chat.chatInput.devServerLogsRemove': 'Remove Dev Server logs',
'chat.chatInput.previewAnnotations': 'Preview annotations:',
'chat.chatInput.previewContext': 'Preview context:',
'chat.chatInput.previewContextRemove': 'Remove preview context',
@@ -2178,6 +2384,7 @@ export const dict = {
'chat.toolPart.showRawJson': 'Show raw JSON',
'chat.toolPart.showFormattedJson': 'Show formatted JSON',
'chat.toolPart.showNavigableJson': 'Show navigable JSON',
'chat.toolPart.openFile': 'Open file',
'chat.toolPart.openFileAtFirstChange': 'Open file at first change',
'chat.toolPart.openFileDiff': 'Open file diff',
'chat.toolPart.copyOutput': 'Copy output',
@@ -2309,6 +2516,15 @@ export const dict = {
'commandPalette.item.toggleSidebar': 'Toggle Sidebar',
'commandPalette.item.showContextUsage': 'Show Context Usage',
'commandPalette.item.toggleTerminal': 'Toggle Terminal',
'commandPalette.item.cycleTheme': 'Cycle theme',
'commandPalette.item.showOpenCodeStatus': 'Show OpenCode status',
'commandPalette.item.toggleMemoryDebug': 'Toggle memory debug panel',
'commandPalette.item.pinSession': 'Pin or unpin session',
'commandPalette.item.copySessionId': 'Copy session ID',
'commandPalette.item.openMultiRun': 'Open multi-run launcher',
'commandPalette.item.openArchive': 'Open archived sessions',
'commandPalette.item.openNotes': 'Open notes surface',
'commandPalette.item.openTodos': 'Open todos surface',
'commandPalette.item.openSettings': 'Open Settings...',
'commandPalette.session.untitled': 'Untitled Session',
'openCodeStatusDialog.title': 'OpenCode Status',
@@ -2523,6 +2739,9 @@ export const dict = {
'sessionAuth.error.passkeySignInCanceled': 'Passkey sign-in was canceled.',
'sessionAuth.error.enterPasswordForPasskey': 'Enter your password to add a passkey.',
'sessionAuth.locked.tunnelTitle': 'Tunnel access required',
'sessionAuth.expired.banner': 'Your session expired — log in to continue.',
'sessionAuth.expired.loginAction': 'Log in',
'sessionAuth.expired.sendBlocked': 'Session expired — log in to send messages.',
'sessionAuth.locked.unlockTitle': 'Unlock OpenChamber',
'sessionAuth.locked.tunnelDescription': 'Open this tunnel using the one-time connect link from the desktop app.',
'sessionAuth.locked.passwordDescription': 'This session is password-protected.',
@@ -2805,6 +3024,10 @@ export const dict = {
'updateDialog.status.updating': 'Updating...',
'updateDialog.error.updateFailed': 'Update failed',
'updateDialog.error.takingLonger': 'Update is taking longer than expected. Wait a bit and refresh, or run: openchamber update',
'updateDialog.error.signatureRejected': 'The downloaded update was rejected: its code signature does not match this installation. This usually means the running copy was not installed from an official signed release. Install OpenChamber from an official release, then update again.',
'updateDialog.error.updaterDisabled': 'The updater stopped after a failed install. Quit OpenChamber, open it again, and retry the update.',
'updateDialog.error.restartFailed': 'Could not restart to install the update.',
'updateDialog.error.restartUnavailable': 'Installing the update requires the OpenChamber desktop app.',
'mobileUpdate.toast.available.title': 'OpenChamber update available',
'mobileUpdate.toast.available.description': 'Version {version} is ready for Android.',
'mobileUpdate.toast.actions.download': 'Download',
@@ -2825,6 +3048,7 @@ export const dict = {
'memoryDebugPanel.title': 'Debug Panel',
'memoryDebugPanel.tabs.memory': 'Memory',
'memoryDebugPanel.tabs.streaming': 'Streaming',
'memoryDebugPanel.tabs.requests': 'Requests',
'memoryDebugPanel.section.sessionsInMemory': 'Sessions in Memory',
'memoryDebugPanel.section.uiStreamingMetrics': 'UI Streaming Metrics',
'memoryDebugPanel.section.vscodeBridgeMetrics': 'VS Code Bridge Metrics',
@@ -2862,6 +3086,16 @@ export const dict = {
'memoryDebugPanel.streaming.copy.copied': 'Streaming debug JSON copied',
'memoryDebugPanel.streaming.copy.failed': 'Failed to copy JSON',
'memoryDebugPanel.streaming.copy.hint': 'Copy exports both UI and VS Code streaming metrics as JSON',
'memoryDebugPanel.requests.inFlight': 'In flight',
'memoryDebugPanel.requests.peak': 'Peak',
'memoryDebugPanel.requests.duration': 'Duration',
'memoryDebugPanel.requests.totalRequests': 'Total Requests',
'memoryDebugPanel.requests.tracking': 'Tracking',
'memoryDebugPanel.requests.now': 'now',
'memoryDebugPanel.requests.noSamples': 'No requests tracked yet. Keep this panel open to record fetch activity.',
'memoryDebugPanel.requests.chartLabel': 'Fetch requests in flight over time, peak {peak}',
'memoryDebugPanel.requests.windowHint': 'last {seconds}s',
'memoryDebugPanel.requests.percentileChartLabel': 'In-flight request age percentiles (p50, p90, p99, max) over time',
'memoryDebugPanel.common.idle': 'idle',
'memoryDebugPanel.common.live': 'live',
'memoryDebugPanel.common.notAvailable': 'n/a',
@@ -2899,18 +3133,23 @@ export const dict = {
'common.relative.daysAgoCompact': '{count}d ago',
'common.relative.weeksAgoCompact': '{count}w ago',
'common.relative.yearsAgoCompact': '{count}y ago',
'common.duration.secondsCompact': '{seconds}s',
'common.duration.minutesSecondsCompact': '{minutes}m {seconds}s',
'common.duration.hoursMinutesCompact': '{hours}h {minutes}m',
'contextFileOpen.failure.tooLarge': 'File is too large to open (>{count} lines)',
'contextFileOpen.failure.missing': 'File not found',
'contextFileOpen.failure.unreadable': 'Failed to open file',
'quota.window.5h': '5-Hour',
'quota.window.7d': '7-Day Limit',
'quota.window.7dSonnet': '7-Day Sonnet Limit',
'quota.window.7dOpus': '7-Day Opus Limit',
'quota.window.weekly': 'Weekly Limit',
'quota.window.extraUsage': 'Extra Usage',
'quota.window.weekly': 'Weekly',
'quota.window.daily': 'Daily',
'quota.window.monthly': 'Monthly Limit',
'quota.window.monthly': 'Monthly',
'quota.window.credits': 'Credits',
'quota.window.creditsBalance': 'Credits Balance',
'quota.window.monthlyCredits': 'Monthly Credits',
'quota.window.purchasedCredits': 'Purchased Credits',
'quota.window.freeCredits': 'Free Credits',
'quota.window.billingCycle': 'Billing Cycle',
'quota.window.auto': 'Auto',
'quota.window.api': 'API',
@@ -2920,7 +3159,106 @@ export const dict = {
'quota.window.premium': 'Premium Interactions',
'quota.window.chat': 'Chat Requests',
'quota.window.completions': 'Completions',
'quota.window.premiumInteractions': 'Premium interactions',
'quota.window.premiumInteractions': 'AI Credits',
'chat.workStatus.ariaLabel': 'Work status',
'chat.workStatus.context.label': 'Context',
'chat.workStatus.cost.breakdown': 'Session {session} · Subagents {subagents}',
'chat.workStatus.git.changedFileSingle': '{count} file changed',
'chat.workStatus.git.changedFilePlural': '{count} files changed',
'chat.workStatus.pr.untitled': 'Untitled pull request',
'chat.workStatus.pr.draft': 'Draft',
'chat.workStatus.pr.checks': 'Checks',
'chat.workStatus.pr.checksFailed': '{count} failed',
'chat.workStatus.pr.checksPending': '{count} running',
'chat.workStatus.pr.checksPassed': '{count} passed',
'chat.workStatus.attention.merge': 'Merge in progress',
'chat.workStatus.attention.rebase': 'Rebase in progress',
'chat.workStatus.attention.cherryPick': 'Cherry-pick in progress',
'chat.workStatus.attention.revert': 'Revert in progress',
'chat.workStatus.attention.bisect': 'Bisect in progress',
'chat.workStatus.subagent.done': 'Done',
'chat.workStatus.subagent.untitled': 'Subagent',
'chat.workStatus.mcp.toggle': 'Toggle {name}',
'chat.workStatus.mcp.needsAuth': 'Sign in',
'chat.workStatus.mcp.failed': 'Failed',
'chat.workStatus.pinned.unavailable': 'Pinned message',
'chat.workStatus.section.session': 'Session',
'chat.workStatus.section.project': 'Project',
'chat.workStatus.section.subagents': 'Subagents',
'chat.workStatus.section.mcp': 'MCP',
'chat.workStatus.section.pinned': 'Pinned messages',
'chat.workStatus.section.tasks': 'Tasks',
'chat.workStatus.subagent.working': 'is working',
'chat.workStatus.subagent.needsPermission': 'needs permission',
'chat.workStatus.subagent.askedQuestion': 'asked a question',
'chat.workStatus.section.contextBreakdown': 'Context sources',
'chat.workStatus.breakdown.skills': 'Skills',
'chat.workStatus.breakdown.pinnedNote': 'note',
'chat.workStatus.breakdown.unpin': 'Unpin from context',
'chat.workStatus.breakdown.pinnedPlan': 'plan',
'chat.workStatus.breakdown.memory': 'Agent memory',
'chat.workStatus.breakdown.pinnedKnowledgeSingle': '{count} pinned',
'chat.workStatus.breakdown.pinnedKnowledgePlural': '{count} pinned',
'chat.workStatus.breakdown.mcp': 'MCP servers',
'chat.workStatus.action.openChanges': 'Open changes',
'chat.workStatus.action.openGit': 'Open Git panel',
'chat.workStatus.action.openPr': 'Open pull request',
'chat.workStatus.action.openSubagent': 'Open {name}',
'chat.workStatus.section.usage': 'Usage',
'chat.workStatus.goal.open': 'Manage goal',
'chat.workStatus.goal.pause': 'Pause',
'chat.workStatus.goal.resume': 'Resume',
'chat.workStatus.goal.updateFailed': 'Could not update the goal',
'chat.workStatus.pinned.unpin': 'Unpin message',
'chat.workStatus.pinned.reveal': 'Go to message',
'chat.workStatus.pinned.unpinFailed': 'Could not unpin the message',
'chat.workStatus.action.openContext': 'Open context panel',
'chat.workStatus.section.linkedIssues': 'Linked',
'chat.workStatus.linkedIssues.open': 'Open #{number} on GitHub',
'chat.workStatus.linkedIssues.unlink': 'Remove link',
'chat.workStatus.linkedIssues.unlinkFailed': 'Could not remove the link',
'chat.workStatus.linkedIssues.link': 'Link to session',
'chat.workStatus.linkedIssues.linkFailed': 'Could not link',
'chat.workStatus.breakdown.issueCountSingle': '{count} issue',
'chat.workStatus.breakdown.issueCountPlural': '{count} issues',
'chat.workStatus.breakdown.prCountSingle': '{count} PR',
'chat.workStatus.breakdown.prCountPlural': '{count} PRs',
'chat.workStatus.breakdown.skillCountSingle': '{count} skill',
'chat.workStatus.breakdown.skillCountPlural': '{count} skills',
'chat.workStatus.breakdown.mcpCountSingle': '{count} MCP',
'chat.workStatus.breakdown.mcpCountPlural': '{count} MCP',
'chat.workStatus.sections.open': 'Choose sections',
'chat.workStatus.sections.dialogTitle': 'Panel sections',
'chat.workStatus.sections.dialogDescription': 'Choose what the work-status panel shows. Hidden sections keep their data — they are only left out of the panel.',
'chat.workStatus.sections.allHidden': 'No sections selected',
'chat.workStatus.sections.showAll': 'Show all',
'chat.workStatus.sections.noneWarning': 'The panel will appear empty.',
'header.workStatusPanel.toggleAria': 'Toggle work-status panel',
'header.workStatusPanel.hide': 'Hide work status',
'header.workStatusPanel.show': 'Show work status',
'chat.workStatus.mcp.authorizeOpenFailed': 'Could not open the authorization page',
'chat.workStatus.mcp.authorizeFailed': 'Authorization failed',
'mcpDropdown.toast.authorizeOpenFailed': 'Could not open the authorization page',
'mcpDropdown.toast.authorizeFailed': 'Authorization failed',
'header.services.tooltip.currentInstance': 'Current instance: {current} ({toggle})',
'header.workStatusPanel.showOverlay': 'Show work status over the chat',
'settings.mcp.page.connection.title': 'How to reach it',
'settings.mcp.page.connection.description': 'Paste the command that starts it, or the link to a hosted server.',
'settings.mcp.page.registration.title': 'This server needs its own app',
'settings.mcp.page.registration.description': 'It does not hand out credentials automatically. Create an app in the service’s own settings, paste its details here, then sign in.',
'settings.mcp.page.registration.callbackLabel': 'Give the service this address',
'settings.mcp.page.registration.clientId': 'App ID',
'settings.mcp.page.registration.clientSecret': 'App secret',
'settings.mcp.page.registration.afterSaving': 'Save, then press Authorize to sign in.',
'settings.mcp.page.toast.copiedCallbackUrl': 'Address copied',
'settings.mcp.page.toast.clipboardWriteFailed': 'Could not copy to the clipboard',
'settings.mcp.page.scope.everywhere': 'Available in every project',
'settings.mcp.page.scope.thisProject': 'Only in this project',
'settings.mcp.page.env.description': 'Values the server needs, such as an API key.',
'settings.mcp.page.connection.kindCommand': 'Command',
'settings.mcp.page.connection.kindLink': 'Link',
'settings.mcp.page.connection.hintCommand': 'Runs on this machine. Paste a whole command and it is split into one argument per line.',
'settings.mcp.page.connection.hintLink': 'Connects to a server someone else hosts. Paste its https address.',
} as const;
export type I18nKey = keyof typeof dict;
+166 -43
View File
@@ -1,8 +1,10 @@
import { thirdPartyIntegrationI18n } from './third-party-integrations.i18n';
export const settingsDict = {
'settings.providers.page.openCodeGo.title': 'Seguimiento de uso de OpenCode Go',
'settings.providers.page.openCodeGo.description': 'Conecta el panel de OpenCode Go para ver las cuotas móvil, semanal y mensual.',
'settings.providers.page.openCodeGo.workspaceId': 'ID del espacio de trabajo',
'settings.providers.page.openCodeGo.authCookie': 'Cookie de autenticación',
'settings.providers.page.openCodeGo.apiKey': 'Clave API',
'settings.providers.page.openCodeGo.help': 'Copia el ID desde la URL del panel y la cookie auth desde las herramientas del navegador. OpenChamber nunca examina las cookies del navegador.',
'settings.providers.page.openCodeGo.save': 'Guardar y validar',
'settings.providers.page.openCodeGo.replace': 'Reemplazar',
@@ -40,7 +42,20 @@ export const settingsDict = {
"settings.view.badge.beta": "beta",
"settings.view.actions.reloadOpenCode": "Recargar OpenCode",
"settings.view.actions.reloadOpenCodeTooltip": "Restablecer OpenCode y recargar su configuración.",
"settings.view.actions.backToSettings": "Volver a Configuración",
"settings.view.actions.applyAndRestartOpenCode": "Aplicar y reiniciar",
"settings.view.actions.applyAndRestartOpenCodeTooltipSingle": "Aplicar 1 cambio de configuración pendiente y reiniciar OpenCode.",
"settings.view.actions.applyAndRestartOpenCodeTooltipPlural": "Aplicar {count} cambios de configuración pendientes y reiniciar OpenCode.",
"settings.view.pendingRestart.applying": "Reiniciando…",
"settings.view.pendingRestart.applied": "OpenCode se reinició con los cambios de configuración pendientes.",
"settings.view.pendingRestart.applyFailed": "No se pudieron aplicar los cambios de configuración.",
"settings.view.pendingRestart.manualRestartRequired": "Guardado en disco. Reinicia el servidor OpenCode conectado para aplicar los cambios.",
"settings.view.pendingRestart.saved": "Guardado. Reinicia OpenCode para aplicar.",
"settings.view.pendingRestart.confirm.title": "¿Aplicar y reiniciar?",
"settings.view.pendingRestart.confirm.description": "Reiniciar OpenCode detendrá cualquier chat en ejecución. Los cambios de configuración guardados se aplicarán después del reinicio.",
"settings.view.pendingRestart.confirm.dontShowAgain": "No volver a mostrar",
"settings.view.pendingRestart.confirm.cancel": "Cancelar", "settings.view.actions.backToSettings": "Volver a Configuración",
"settings.view.actions.closeSettings": "Cerrar configuración",
"settings.view.actions.openSectionList": "Abrir lista de secciones",
"settings.view.actions.closeSettingsWithShortcut": "Cerrar configuración ({shortcut}+,)",
@@ -359,14 +374,14 @@ export const settingsDict = {
"settings.remoteInstances.page.field.modePlaceholder": "Seleccionar modo",
"settings.remoteInstances.page.field.modeManaged": "Iniciarlo por mí",
"settings.remoteInstances.page.field.modeExternal": "Ya está en marcha",
"settings.remoteInstances.page.field.preferredRemotePort": "Puerto remoto preferido",
"settings.remoteInstances.page.field.preferredRemotePortHint": "Port to use on the remote machine. Leave empty to choose one automatically.",
"settings.remoteInstances.page.field.preferredRemotePort": "Puerto en la máquina remota",
"settings.remoteInstances.page.field.preferredRemotePortHint": "Puerto que OpenChamber usa en la máquina remota. Déjalo vacío para elegir uno automáticamente.",
"settings.remoteInstances.page.field.keepServerRunning": "Mantener servidor en ejecución",
"settings.remoteInstances.page.field.keepServerRunningHint": "Keep OpenChamber running on the remote machine after you disconnect.",
"settings.remoteInstances.page.field.bindHost": "Host de enlace",
"settings.remoteInstances.page.field.bindHostHint": "Where the local connection should listen. Use 127.0.0.1 or localhost unless you need LAN access.",
"settings.remoteInstances.page.field.preferredLocalPort": "Puerto local preferido",
"settings.remoteInstances.page.field.preferredLocalPortHint": "Local port to open for this connection. Leave empty to choose one automatically.",
"settings.remoteInstances.page.field.keepServerRunningHint": "Dejar el servidor remoto en marcha tras desconectar. Si está desactivado, se detiene al desconectar y se inicia de nuevo la próxima vez que conectes.",
"settings.remoteInstances.page.field.bindHost": "Quién puede acceder",
"settings.remoteInstances.page.field.bindHostHint": "Quién puede abrir la dirección reenviada en este equipo. La máquina remota sigue siendo accesible únicamente por el túnel SSH en cualquier caso.",
"settings.remoteInstances.page.field.preferredLocalPort": "Puerto en este equipo",
"settings.remoteInstances.page.field.preferredLocalPortHint": "Puerto que se abre en este equipo para el túnel. Déjalo vacío para elegir uno automáticamente.",
"settings.remoteInstances.page.field.forwardType": "Tipo de redirección",
"settings.remoteInstances.page.field.localHostPlaceholder": "127.0.0.1",
"settings.remoteInstances.page.field.remoteHostPlaceholder": "127.0.0.1",
@@ -386,6 +401,10 @@ export const settingsDict = {
"settings.common.actions.cancel": "Cancelar",
"settings.common.actions.create": "Crear",
"settings.common.actions.delete": "Eliminar",
"settings.openchamber.appLinks.title": "Enlaces de aplicaciones de confianza",
"settings.openchamber.appLinks.info": "Los enlaces de esta lista se abren sin volver a preguntar en este dispositivo. Los demás enlaces de aplicaciones siempre piden confirmación.",
"settings.openchamber.appLinks.empty": "No hay enlaces de aplicaciones de confianza en este dispositivo. Elige \"Confiar y abrir\" al abrir un enlace para añadirlo aquí.",
"settings.openchamber.appLinks.removeAria": "Quitar los enlaces {scheme} de confianza",
"settings.common.actions.reset": "Restablecer",
"settings.common.actions.rename": "Cambiar nombre",
"settings.common.actions.duplicate": "Duplicar",
@@ -431,6 +450,9 @@ export const settingsDict = {
"settings.openchamber.about.title": "Acerca de OpenChamber",
"settings.openchamber.about.field.version": "Versión",
"settings.openchamber.about.field.openCodeVersion": "Versión de OpenCode",
"settings.openchamber.about.field.instanceUrls": "URLs de la instancia",
"settings.openchamber.about.field.applicationUrl": "Aplicación",
"settings.openchamber.about.field.tunnelUrl": "Túnel",
"settings.openchamber.about.state.checking": "Comprobando...",
"settings.openchamber.about.state.upToDate": "Actualizado",
"settings.openchamber.about.state.unknown": "desconocido",
@@ -847,16 +869,26 @@ export const settingsDict = {
"settings.skills.catalog.page.mode.manual": "Manual",
"settings.skills.catalog.page.mode.external": "Externo",
"settings.skills.catalog.page.title": "Catálogo de habilidades",
'settings.skills.catalog.page.subtitle': 'Instala skills listos desde repositorios curados o añade tu propia fuente.',
'settings.skills.catalog.page.section.sources': 'Fuentes',
'settings.skills.catalog.page.searchAllPlaceholder': 'Buscar skills en todas las fuentes…',
'settings.skills.catalog.page.search.clear': 'Borrar búsqueda',
'settings.skills.catalog.page.source.skillsCount': 'Skills: {count}',
'settings.skills.catalog.page.source.stars': 'Estrellas: {count}',
'settings.skills.catalog.page.source.updated': 'Actualizado {time}',
'settings.skills.catalog.page.source.addOwnTitle': 'Añadir tu propia fuente',
'settings.skills.catalog.page.source.addOwnDescription': 'Cualquier repositorio Git con skills',
'settings.skills.catalog.page.source.viewRepo': 'Abrir repositorio en GitHub',
'settings.skills.catalog.page.skill.viewOnGithub': 'Ver skill en GitHub',
'settings.skills.catalog.page.list.searchTitle': 'Resultados de búsqueda',
"settings.skills.catalog.page.section.sourceRepository": "Repositorio de origen",
"settings.skills.catalog.page.field.selectSourcePlaceholder": "Seleccionar origen",
"settings.skills.catalog.page.actions.refreshTitle": "Actualizar",
"settings.skills.catalog.page.actions.removeCatalogTitle": "Eliminar catálogo",
"settings.skills.catalog.page.actions.addCatalog": "Añadir catálogo",
"settings.skills.catalog.page.actions.removeCatalog": "Eliminar catálogo",
"settings.skills.catalog.page.actions.loadMoreSkills": "Cargar más habilidades",
"settings.skills.catalog.page.loading.catalog": "Cargando...",
"settings.skills.catalog.page.loading.skills": "Cargando habilidades...",
"settings.skills.catalog.page.loading.more": "Cargando...",
"settings.skills.catalog.page.foundCount": "{count} habilidad(es) encontrada(s)",
"settings.skills.catalog.page.error.catalogTitle": "Error del catálogo",
"settings.skills.catalog.page.empty.noSkillsTitle": "No se encontraron habilidades",
@@ -864,7 +896,6 @@ export const settingsDict = {
"settings.skills.catalog.page.badge.installed": "instalado ({scope})",
"settings.skills.catalog.page.badge.notInstallable": "no instalable",
"settings.skills.catalog.page.badge.unknown": "desconocido",
"settings.skills.catalog.page.byOwnerPrefix": "por",
"settings.skills.catalog.page.removeDialog.title": "Eliminar catálogo",
"settings.skills.catalog.page.removeDialog.description": "¿Estás seguro de que quieres eliminar este catálogo?",
"settings.openchamber.passkeys.title": "Claves de paso",
@@ -927,9 +958,9 @@ export const settingsDict = {
"settings.openchamber.desktopNetwork.field.macMenuBarAria": "Mostrar OpenChamber en la barra de menús de macOS",
"settings.openchamber.desktopNetwork.field.macMenuBar": "Mostrar OpenChamber en la barra de menús",
"settings.openchamber.desktopNetwork.field.macMenuBarDescription": "Requiere reiniciar la aplicación. Al desactivarlo, OpenChamber no crea el elemento de la barra de menús ni ejecuta sus actualizaciones de sesiones, aprobaciones y uso.",
"settings.openchamber.desktopNetwork.field.minimizeToTrayAria": "Minimizar y cerrar OpenChamber a la bandeja del sistema",
"settings.openchamber.desktopNetwork.field.minimizeToTray": "Minimizar y cerrar a la bandeja del sistema",
"settings.openchamber.desktopNetwork.field.minimizeToTrayDescription": "Mantiene OpenChamber en ejecución en la bandeja del sistema cuando la ventana principal se minimiza o se cierra.",
"settings.openchamber.desktopNetwork.field.minimizeToTrayAria": "Cerrar OpenChamber a la bandeja del sistema",
"settings.openchamber.desktopNetwork.field.minimizeToTray": "Cerrar a la bandeja del sistema",
"settings.openchamber.desktopNetwork.field.minimizeToTrayDescription": "Mantiene OpenChamber en ejecución en la bandeja del sistema cuando se cierra la ventana principal. Al minimizar, la ventana sigue en la barra de tareas.",
"settings.openchamber.desktopNetwork.field.keepAwakeAria": "Mantener el ordenador activo mientras OpenChamber está en ejecución",
"settings.openchamber.desktopNetwork.field.keepAwake": "Mantener el ordenador activo mientras OpenChamber está en ejecución",
"settings.openchamber.desktopNetwork.field.keepAwakeDescription": "Para que los teléfonos puedan seguir abriendo esta app. La pantalla aún puede apagarse.",
@@ -956,15 +987,22 @@ export const settingsDict = {
"settings.openchamber.desktopNetwork.error.keepAwakeUnsupported": "Evitar la suspensión no es compatible con este sistema",
"settings.openchamber.desktopNetwork.error.keepAwakeSaveFailed": "No se pudo actualizar la opción de mantener activo",
"settings.openchamber.opencodeCli.title": "CLI de OpenCode",
"settings.openchamber.tools.title": "Herramientas de OpenChamber",
"settings.openchamber.tools.field.agentControlTool": "Herramienta de control para agentes",
"settings.openchamber.tools.field.agentControlToolAria": "Activar la herramienta de control para agentes",
"settings.openchamber.tools.field.agentControlToolInfo": "Permite que los agentes orquesten tu trabajo desde el chat: crear sesiones y worktrees, delegar prompts a otros agentes y gestionar tareas programadas. Añade una pequeña descripción de herramienta a cada sesión. Se aplica tras reiniciar OpenCode.",
"settings.openchamber.tools.field.agentWebTool": "Herramienta OpenChamber Web",
"settings.openchamber.tools.field.agentWebToolAria": "Activar la herramienta OpenChamber Web",
"settings.openchamber.tools.field.agentWebToolInfo": "Permite que los agentes vean la página en el panel de navegador de OpenChamber e interactúen con ella: abrir una URL, leer el contenido, hacer clic, escribir, desplazarse y alternar entre diseño móvil y de escritorio. Añade una pequeña descripción de herramienta a cada sesión. Se aplica tras reiniciar OpenCode.",
"settings.openchamber.tools.field.agentMemoryTool": "Herramienta de memoria del agente",
"settings.openchamber.tools.field.agentMemoryToolAria": "Herramienta de memoria del agente",
"settings.openchamber.tools.field.agentMemoryToolInfo": "Permite que los agentes conserven lo aprendido entre sesiones, en dos almacenes: lo que es cierto sobre ti y lo que es cierto sobre cada proyecto. Las sesiones reciben los títulos guardados para que el agente pueda leer una entrada cuando resulte relevante. Al desactivarla se retiran la herramienta, la pestaña Memoria y el índice de sesión. Se aplica tras reiniciar OpenCode.",
"settings.openchamber.opencodeCli.tooltipPrefix": "Ruta absoluta opcional al",
"settings.openchamber.opencodeCli.tooltipSuffix": "ejecutable.",
"settings.openchamber.opencodeCli.field.binaryPath": "Ruta del ejecutable de OpenCode",
"settings.openchamber.opencodeCli.field.binaryPathPlaceholder": "/Users/you/.bun/bin/opencode",
"settings.openchamber.opencodeCli.field.showUpdateNotifications": "Mostrar notificaciones de actualización de OpenCode",
"settings.openchamber.opencodeCli.field.showUpdateNotificationsAria": "Mostrar notificaciones de actualización de OpenCode",
"settings.openchamber.opencodeCli.field.agentControlTool": "Herramienta de control para agentes",
"settings.openchamber.opencodeCli.field.agentControlToolAria": "Activar la herramienta de control para agentes",
"settings.openchamber.opencodeCli.field.agentControlToolInfo": "Permite que los agentes orquesten tu trabajo desde el chat: crear sesiones y worktrees, delegar prompts a otros agentes y gestionar tareas programadas. Añade una pequeña descripción de herramienta a cada sesión. Se aplica tras Save + Reload.",
"settings.openchamber.opencodeCli.actions.browseAria": "Buscar ruta del ejecutable de OpenCode",
"settings.openchamber.opencodeCli.actions.browse": "Buscar",
"settings.openchamber.opencodeCli.actions.saveAndReload": "Guardar + Recargar",
@@ -1063,7 +1101,7 @@ export const settingsDict = {
"settings.openchamber.keyboardShortcuts.overwritePrompt": "Esta combinación ya está usada por otro atajo. ¿Sobrescribir y limpiar esa otra asignación?",
"settings.openchamber.keyboardShortcuts.field.pressKeys": "Pulsa las teclas...",
"settings.openchamber.keyboardShortcuts.error.captureFirst": "Captura un atajo primero.",
"settings.openchamber.keyboardShortcuts.warning.riskyBrowserShortcut": "Este atajo puede entrar en conflicto con los predeterminados del navegador. Todavía se guarda.",
"settings.openchamber.keyboardShortcuts.warning.riskyBrowserShortcut": "Este atajo puede entrar en conflicto con los predeterminados del navegador. Aun así, puedes guardarlo.",
"settings.openchamber.keyboardShortcuts.action.open_go_to_line.label": "Ir a línea (editor de archivos)",
"settings.openchamber.keyboardShortcuts.action.open_command_palette.label": "Abrir paleta de comandos",
"settings.openchamber.keyboardShortcuts.action.focus_input.label": "Enfocar entrada",
@@ -1072,16 +1110,20 @@ export const settingsDict = {
"settings.openchamber.keyboardShortcuts.action.toggle_terminal_expanded.label": "Expandir o contraer terminal",
"settings.openchamber.keyboardShortcuts.action.add_selection_to_chat.label": "Agregar selección al chat",
"settings.openchamber.keyboardShortcuts.action.toggle_sidebar.label": "Mostrar u ocultar barra lateral",
"settings.openchamber.keyboardShortcuts.action.toggle_right_sidebar.label": 'Alternar panel de contexto',
"settings.openchamber.keyboardShortcuts.action.open_right_sidebar_git.label": 'Abrir superficie de Git',
"settings.openchamber.keyboardShortcuts.action.open_right_sidebar_files.label": 'Abrir superficie de archivos',
"settings.openchamber.keyboardShortcuts.action.switch_session_tab.label": "Cambiar pestaña de sesión",
"settings.openchamber.keyboardShortcuts.action.switch_session_tab.suffix": " + 1…9",
"settings.openchamber.keyboardShortcuts.action.switch_context_surface.label": "Cambiar superficie del panel de contexto",
"settings.openchamber.keyboardShortcuts.action.switch_context_surface.suffix": " + 1…0",
"settings.openchamber.keyboardShortcuts.action.new_chat.label": "Nueva sesión",
"settings.openchamber.keyboardShortcuts.action.switch_session_previous.label": "Sesión anterior",
"settings.openchamber.keyboardShortcuts.action.switch_session_next.label": "Sesión siguiente",
"settings.openchamber.keyboardShortcuts.action.rename_current_session.label": "Renombrar sesión actual",
"settings.openchamber.keyboardShortcuts.action.toggle_permission_auto_accept.label": "Alternar aprobación automática",
"settings.openchamber.keyboardShortcuts.action.close_session_tab.label": "Cerrar pestaña de sesión",
"settings.openchamber.keyboardShortcuts.action.new_chat_worktree.label": "Nuevo borrador de worktree",
"settings.openchamber.keyboardShortcuts.action.new_mini_chat.label": "Nueva ventana Mini Chat",
"settings.openchamber.keyboardShortcuts.action.open_help.label": "Abrir atajos de teclado",
"settings.openchamber.keyboardShortcuts.action.toggle_context_plan.label": "Alternar panel de plan de contexto",
"settings.openchamber.keyboardShortcuts.action.toggle_services_menu.label": "Mostrar u ocultar menú de servicios",
"settings.openchamber.keyboardShortcuts.action.cycle_services_tab.label": "Cambiar pestaña de servicios",
"settings.openchamber.keyboardShortcuts.action.cycle_theme.label": "Cambiar tema",
"settings.openchamber.keyboardShortcuts.action.cycle_agent.label": "Cambiar agente",
"settings.openchamber.keyboardShortcuts.action.cycle_favorite_model_forward.label": "Siguiente modelo favorito",
@@ -1090,15 +1132,39 @@ export const settingsDict = {
"settings.openchamber.keyboardShortcuts.action.expand_input.label": "Expandir entrada",
"settings.openchamber.keyboardShortcuts.action.open_timeline_dialog.label": "Abrir línea de tiempo de conversación",
"settings.openchamber.keyboardShortcuts.action.toggle_prompt_navigator.label": "Mostrar u ocultar navegador de prompts",
"settings.openchamber.keyboardShortcuts.warning.contextualPrefix": "Esta secuencia comparte un prefijo contextual con {action}. Cuando su contexto está activo, esa acción tiene prioridad.",
"settings.openchamber.keyboardShortcuts.category.session": "Controles de sesión",
"settings.openchamber.keyboardShortcuts.category.models": "Modelos y agentes",
"settings.openchamber.keyboardShortcuts.category.panels": "Paneles y herramientas",
"settings.openchamber.keyboardShortcuts.category.navigation": "Navegación",
"settings.openchamber.keyboardShortcuts.category.application": "Aplicación",
"settings.openchamber.keyboardShortcuts.actions.edit": "Editar",
"settings.openchamber.keyboardShortcuts.actions.confirm": "Confirmar",
"settings.openchamber.keyboardShortcuts.dialog.title": "Editar {action}",
"settings.openchamber.keyboardShortcuts.dialog.instructions": "Pulse hasta dos combinaciones de teclas, con un máximo de tres teclas cada una. Tras la primera, espere hasta 3 segundos por una segunda combinación. Use Confirmar para aplicar o Cancelar para descartar. Retroceso elimina la última.",
"settings.openchamber.keyboardShortcuts.dialog.firstChord": "Primera combinación",
"settings.openchamber.keyboardShortcuts.dialog.secondChord": "Segunda combinación",
"settings.openchamber.keyboardShortcuts.dialog.recording": "Pulse las teclas…",
"settings.openchamber.keyboardShortcuts.unassigned": "Sin asignar",
"settings.openchamber.keyboardShortcuts.error.prefixConflict": "Esto entra en conflicto con la secuencia usada por {action}. Elija otra combinación.",
"settings.openchamber.keyboardShortcuts.error.exactConflict": "Esta combinación ya la usa {action}.",
"settings.openchamber.keyboardShortcuts.error.internalConflict": "Esta combinación entra en conflicto con un atajo integrado, que no se puede reemplazar.",
"settings.openchamber.keyboardShortcuts.action.open_draft_project_picker.label": "Abrir selector de proyecto de borrador",
"settings.openchamber.keyboardShortcuts.action.open_draft_worktree_picker.label": "Abrir selector de árbol de trabajo de borrador",
"settings.openchamber.keyboardShortcuts.action.open_session_list.label": "Abrir sesiones recientes",
"settings.openchamber.keyboardShortcuts.action.toggle_dictation.label": "Entrada de voz",
"settings.projects.sidebar.total": "Total {count}",
"settings.projects.sidebar.actions.addProject": "Añadir proyecto",
"settings.projects.page.empty.noProjects": "No hay proyectos disponibles.",
"settings.projects.page.title.default": "Configuración del proyecto",
"settings.projects.page.section.worktree": "Worktree",
"settings.projects.page.field.projectName": "Nombre del proyecto",
"settings.projects.page.field.projectModel": "Modelo del proyecto",
"settings.projects.page.field.projectThinking": "Razonamiento del proyecto",
"settings.projects.page.section.chatDefaults": "Valores por defecto para chats nuevos",
"settings.projects.page.section.chatDefaultsDescription": "Se usa al iniciar un chat nuevo en este proyecto. Si está vacío, se aplican los valores globales. El razonamiento solo aparece en modelos que ofrecen niveles.",
"settings.projects.page.field.projectNamePlaceholder": "Nombre del proyecto",
"settings.projects.page.field.defaultModel": "Modelo predeterminado para chats nuevos",
"settings.projects.page.field.defaultModelDescription": "Se usa al iniciar un chat nuevo en este proyecto. Si no se define, se usan los valores globales.",
"settings.projects.page.option.thinkingDefault": "El del modelo",
"settings.projects.page.field.accentColor": "Color de énfasis",
"settings.projects.page.field.projectIcon": "Icono del proyecto",
"settings.projects.page.field.projectIconBackgroundAria": "Color de fondo del icono del proyecto",
@@ -1132,15 +1198,15 @@ export const settingsDict = {
"settings.usage.sidebar.field.displayModePlaceholder": "Modo de visualización",
"settings.usage.sidebar.field.displayModeUsage": "Uso",
"settings.usage.sidebar.field.displayModeRemaining": "Cuota restante",
"settings.usage.sidebar.field.showPredictions": "Mostrar predicciones",
"settings.usage.sidebar.status.notSet": "No establecido",
"settings.usage.page.empty.selectProvider": "Selecciona un proveedor para ver detalles de uso.",
"settings.usage.page.header.providerUsage": "Uso de {provider}",
"settings.usage.page.header.refreshing": "Actualizando uso...",
"settings.usage.page.header.lastUpdated": "Última actualización: {time}",
"settings.usage.page.options.showInHeaderAria": "Mostrar en menú de encabezado",
"settings.usage.page.options.showInHeader": "Mostrar en el menú del encabezado",
"settings.usage.page.options.showInHeaderTooltip": "Cuando esté habilitado, el uso de este proveedor será visible en el menú de acceso rápido del encabezado de la aplicación.",
"settings.usage.page.header.lastUpdatedWithPlan": "Plan: {plan} · Última actualización: {time}",
"settings.usage.page.options.showInWorkStatusAria": "Mostrar en el panel de estado del trabajo",
"settings.usage.page.options.showInWorkStatus": "Mostrar en el panel de estado del trabajo",
"settings.usage.page.options.showInWorkStatusTooltip": "Cuando esté habilitado, el uso de este proveedor será visible en el panel de estado del trabajo.",
"settings.usage.page.state.noData": "No hay datos de uso disponibles aún.",
"settings.usage.page.state.refreshFailedTitle": "No se pudo actualizar los datos de uso",
"settings.usage.page.state.providerNotConfiguredTitle": "Proveedor no configurado",
@@ -1167,8 +1233,8 @@ export const settingsDict = {
"settings.remoteInstances.page.section.actionsDescription": "Conecta, reconecta, revisa registros o elimina esta conexión.",
"settings.remoteInstances.page.section.remoteServer": "OpenChamber en la máquina remota",
"settings.remoteInstances.page.section.remoteServerDescription": "Elige cómo debe ejecutarse OpenChamber después de conectar por SSH.",
"settings.remoteInstances.page.section.mainTunnel": "Acceso local",
"settings.remoteInstances.page.section.mainTunnelDescription": "Elige la dirección local que se usará para abrir este servidor remoto de OpenChamber.",
"settings.remoteInstances.page.section.mainTunnel": "Acceso desde este equipo",
"settings.remoteInstances.page.section.mainTunnelDescription": "OpenChamber se ejecuta en la máquina remota. Estos ajustes solo controlan la dirección de este equipo que lleva hasta ella por el túnel SSH.",
"settings.remoteInstances.page.section.authentication": "Autenticación",
"settings.remoteInstances.page.section.authenticationDescription": "Credenciales opcionales para SSH y la interfaz de usuario de OpenChamber remoto.",
"settings.remoteInstances.page.section.portForwards": "Redirecciones de puerto",
@@ -1181,8 +1247,6 @@ export const settingsDict = {
"settings.remoteInstances.page.field.installMethod": "Método de instalación",
"settings.remoteInstances.page.field.installMethodHint": "Cómo debe colocarse OpenChamber en la máquina remota cuando esta app lo inicia por ti.",
"settings.remoteInstances.page.field.selectInstallMethodPlaceholder": "Seleccionar método de instalación",
"settings.remoteInstances.page.field.installMethodDownloadRelease": "Descargar versión",
"settings.remoteInstances.page.field.installMethodUploadBundle": "Subir paquete",
"settings.remoteInstances.page.field.selectBindHostPlaceholder": "Seleccionar host de enlace",
"settings.remoteInstances.page.field.sshPasswordOptional": "Contraseña SSH (opcional)",
"settings.remoteInstances.page.field.sshPasswordPlaceholder": "Introducir contraseña SSH",
@@ -1206,7 +1270,44 @@ export const settingsDict = {
"settings.remoteInstances.page.actions.enableForwardAria": "Habilitar redirección",
"settings.remoteInstances.page.actions.openLocal": "Abrir local",
"settings.remoteInstances.page.actions.addForward": "Añadir redirección",
"settings.remoteInstances.page.import.sectionTitle": "Hosts SSH guardados",
"settings.remoteInstances.page.addDialog.description": "Elige un host de tu configuración SSH o escribe la conexión tú mismo.",
"settings.remoteInstances.page.addDialog.sourceLabel": "De dónde viene la conexión",
"settings.remoteInstances.page.addDialog.tab.saved": "Desde la configuración SSH",
"settings.remoteInstances.page.addDialog.tab.manual": "Escribirla yo",
"settings.remoteInstances.page.addDialog.searchPlaceholder": "Buscar hosts",
"settings.remoteInstances.page.addDialog.emptySaved": "No se encontraron hosts en tu configuración SSH. Escribe la conexión tú mismo.",
"settings.remoteInstances.page.addDialog.searchEmpty": "Ningún host coincide con esta búsqueda.",
"settings.remoteInstances.page.addDialog.use": "Usar",
"settings.remoteInstances.page.state.notConnected": "Sin conexión",
"settings.remoteInstances.page.state.connecting": "Conectando",
"settings.remoteInstances.page.state.ready": "Conectado",
"settings.remoteInstances.page.state.problem": "Requiere atención",
"settings.remoteInstances.page.section.advanced": "Ajustes avanzados",
"settings.remoteInstances.page.section.advancedHint": "Puertos, método de instalación, contraseñas y reenvíos adicionales. Los valores predeterminados sirven para casi todas las conexiones.",
"settings.remoteInstances.page.field.installMethodAuto": "Automático",
"settings.remoteInstances.page.error.hint.noRuntime": "La máquina remota no tiene ni bun ni npm. Instala uno de ellos allí o cambia esta conexión a «Ya está en ejecución».",
"settings.remoteInstances.page.error.hint.noOpencode": "La CLI de opencode no está instalada en la máquina remota. Instálala allí (consulta opencode.ai) y vuelve a conectar.",
"settings.remoteInstances.page.error.action.setUiPassword": "Definir contraseña de la interfaz",
"settings.remoteInstances.page.error.action.pickRandomPort": "Usar otro puerto local",
"settings.remoteInstances.page.error.action.setRemotePort": "Definir el puerto remoto",
"settings.remoteInstances.page.validation.externalPortRequired": "Primero indica un puerto remoto. En el modo «Ya está en ejecución», OpenChamber necesita saber en qué puerto escucha el servidor.",
"settings.remoteInstances.page.empty.noInstances": "Aún no hay conexiones SSH.",
"settings.remoteInstances.page.field.uiPasswordRequired": "Contraseña de la interfaz (obligatoria)",
"settings.remoteInstances.page.field.uiPasswordMissingForLan": "Obligatoria mientras el servidor remoto sea accesible en su red.",
"settings.remoteInstances.page.field.remoteLanAccess": "Accesible en la red remota",
"settings.remoteInstances.page.field.remoteLanAccessHint": "Permitir también que otros dispositivos de la red de la máquina remota abran este OpenChamber directamente, sin el túnel SSH. Requiere contraseña de la interfaz.",
"settings.remoteInstances.page.field.remoteLanAccessWarning": "Cualquiera en esa red puede llegar al OpenChamber remoto. Solo lo protege la contraseña de la interfaz de abajo.",
"settings.remoteInstances.page.validation.remoteLanNeedsPassword": "Define primero una contraseña de la interfaz. Sin ella, el OpenChamber remoto quedaría abierto a todos los dispositivos de esa red.",
"settings.remoteInstances.page.field.bindHostOption.loopback": "Solo este equipo (127.0.0.1)",
"settings.remoteInstances.page.field.bindHostOption.localhost": "Solo este equipo (localhost)",
"settings.remoteInstances.page.field.bindHostOption.lan": "Cualquier dispositivo de mi red (0.0.0.0)",
"settings.remoteInstances.page.field.sshPasswordHint": "Solo hace falta cuando este host pide contraseña en lugar de aceptar una clave SSH.",
"settings.remoteInstances.page.field.uiPasswordHintManaged": "Contraseña con la que se protegerá la interfaz remota de OpenChamber. OpenChamber la aplica al servidor que inicia por ti.",
"settings.remoteInstances.page.field.uiPasswordHintExternal": "Contraseña del servidor OpenChamber que ya se ejecuta en la máquina remota, usada para iniciar sesión.",
"settings.remoteInstances.page.tunnelPreview.caption": "Esta conexión reenvía:",
"settings.remoteInstances.page.empty.noInstancesWithOneImport": "Aún no hay conexiones SSH. Hay 1 host disponible para importar desde tu configuración SSH.",
"settings.remoteInstances.page.empty.noInstancesWithImports": "Aún no hay conexiones SSH. Hay {count} hosts disponibles para importar desde tu configuración SSH.",
"settings.remoteInstances.page.state.loadingInstances": "Cargando conexiones...",
"settings.remoteInstances.page.import.loading": "Cargando hosts SSH...",
"settings.remoteInstances.page.import.noneFound": "No se encontraron hosts SSH.",
"settings.remoteInstances.page.import.noneAvailable": "No hay hosts SSH disponibles para importar.",
@@ -1304,13 +1405,18 @@ export const settingsDict = {
"settings.providers.page.custom.title": "Proveedor personalizado",
"settings.providers.page.custom.editTitle": "Editar proveedor personalizado",
"settings.providers.page.custom.description": "Añade un proveedor compatible con OpenAI con URL base, credenciales y lista de modelos. Se guarda en la configuración de OpenCode para usarlo en el chat como cualquier otro proveedor.",
"settings.providers.page.custom.description": "Añade un proveedor con URL base, credenciales, lista de modelos y un protocolo de API compatible. Se guarda en la configuración de OpenCode para usarlo en el chat.",
"settings.providers.page.custom.field.providerID.label": "ID del proveedor",
"settings.providers.page.custom.field.providerID.placeholder": "mi-proveedor",
"settings.providers.page.custom.field.providerID.info": "Minúsculas, números, guiones y guiones bajos. Se usa como ID de proveedor de OpenCode.",
"settings.providers.page.custom.field.name.label": "Nombre visible",
"settings.providers.page.custom.field.name.placeholder": "Mi proveedor",
"settings.providers.page.custom.field.name.info": "Se muestra en los selectores de proveedor y modelo.",
"settings.providers.page.custom.field.protocol.label": "Protocolo de API",
"settings.providers.page.custom.field.protocol.info": "Elige el formato de solicitud que implementa esta API.",
"settings.providers.page.custom.field.protocol.openaiChat": "OpenAI Chat Completions",
"settings.providers.page.custom.field.protocol.openaiResponses": "OpenAI Responses",
"settings.providers.page.custom.field.protocol.anthropicMessages": "Anthropic Messages",
"settings.providers.page.custom.field.baseURL.label": "URL base",
"settings.providers.page.custom.field.baseURL.placeholder": "https://api.example.com/v1",
"settings.providers.page.custom.field.baseURL.info": "URL base de la API compatible con OpenAI. Debe empezar por http:// o https://.",
@@ -1359,6 +1465,17 @@ export const settingsDict = {
"settings.providers.page.auth.apiKeyPlaceholder": "sk-...",
"settings.providers.page.auth.oauthMethodFallback": "Método OAuth {index}",
"settings.providers.page.auth.pasteAuthorizationCodePlaceholder": "Pegar código de autorización",
"settings.providers.page.auth.oauth.starting": "Iniciando la autorización…",
"settings.providers.page.auth.oauth.waiting": "Esperando la autorización…",
"settings.providers.page.auth.oauth.waitingHint": "Termina de iniciar sesión en el navegador. Mantén esta página abierta: la conexión se completará sola.",
"settings.providers.page.auth.oauth.codeHint": "Copia el código de autorización del navegador y pégalo aquí.",
"settings.providers.page.auth.oauth.deviceCodeLabel": "Código del dispositivo",
"settings.providers.page.auth.oauth.linkLabel": "Enlace de autorización",
"settings.providers.page.auth.oauth.promptRequired": "Completa «{field}» para continuar",
"settings.providers.page.auth.oauth.error.sessionExpired": "La solicitud de autorización caducó. Vuelve a conectar para reiniciarla.",
"settings.providers.page.auth.oauth.error.codeRequired": "Este proveedor necesita el código de autorización de tu navegador.",
"settings.providers.page.auth.oauth.error.declined": "La autorización se rechazó o no se completó.",
"settings.providers.page.auth.oauth.error.invalidInput": "Se rechazaron los datos introducidos.",
"settings.providers.page.auth.connected": "Conectado",
"settings.providers.page.auth.incomplete": "Faltan credenciales",
"settings.providers.page.auth.incompleteHint": "· Añade una clave API o {env:VAR} antes de usar este proveedor en el chat",
@@ -1391,6 +1508,9 @@ export const settingsDict = {
"settings.providers.page.actions.open": "Abrir",
"settings.providers.page.actions.copy": "Copiar",
"settings.providers.page.actions.complete": "Completar",
"settings.providers.page.actions.continue": "Continuar",
"settings.providers.page.actions.cancel": "Cancelar",
"settings.providers.page.actions.tryAgain": "Reintentar",
"settings.providers.page.actions.hide": "Ocultar",
"settings.providers.page.actions.reconnect": "Reconectar",
"settings.providers.page.actions.edit": "Editar",
@@ -1406,7 +1526,6 @@ export const settingsDict = {
"settings.providers.page.toast.apiKeySaved": "Clave API guardada",
"settings.providers.page.toast.oauthStartFailed": "No se pudo iniciar el flujo OAuth",
"settings.providers.page.toast.oauthDetailsMissing": "No se devolvieron detalles de OAuth",
"settings.providers.page.toast.completeOAuthInBrowser": "Completa el flujo OAuth en tu navegador",
"settings.providers.page.toast.oauthCompleteFailed": "No se pudo completar el flujo OAuth",
"settings.providers.page.toast.oauthCompleted": "Conexión OAuth completada",
"settings.providers.page.toast.oauthLinkCopied": "Enlace de OAuth copiado",
@@ -1428,6 +1547,8 @@ export const settingsDict = {
"settings.mcp.page.status.label.failed": "Fallido",
"settings.mcp.page.status.label.needsAuth": "Necesita autenticación",
"settings.mcp.page.status.label.needsRegistration": "Necesita registro",
"settings.mcp.page.status.label.awaitingRestart": "Esperando reinicio",
"settings.mcp.page.status.description.awaitingRestart": "Este servidor está guardado pero aún no aplicado. Usa «Apply & Restart» para cargarlo en OpenCode; después estarán disponibles la conexión y la autorización.",
"settings.mcp.page.status.description.connected": "Conectado y listo para que OpenCode descubra herramientas y recursos.",
"settings.mcp.page.status.description.failedDefault": "OpenCode no pudo alcanzar este servidor MCP.",
"settings.mcp.page.status.description.needsAuth": "Este servidor MCP remoto requiere autorización antes de poder conectarse.",
@@ -1792,9 +1913,6 @@ export const settingsDict = {
"settings.voice.page.field.ttsInputModeSummarized": "resumido",
"settings.openchamber.visual.section.colorMode": "Modo de color",
"settings.openchamber.visual.section.colorModeAndTheme": "Modo de color y tema",
"settings.openchamber.visual.section.mobileLayout": "Diseño móvil",
"settings.openchamber.visual.option.mobileLayout.default": "Anterior",
"settings.openchamber.visual.option.mobileLayout.new": "Nuevo",
"settings.openchamber.visual.section.localization": "Localización",
"settings.openchamber.visual.section.spacingAndLayout": "Espaciado y diseño",
"settings.openchamber.visual.section.densityAndType": "Densidad y tipografía",
@@ -1811,6 +1929,10 @@ export const settingsDict = {
"settings.openchamber.visual.section.showToolsOpenedByDefault": "Mostrar herramientas abiertas por defecto",
"settings.openchamber.visual.section.sessionAssistance": "Asistencia de sesión",
"settings.openchamber.visual.section.reasoning": "Razonamiento",
"settings.openchamber.visual.section.streaming": "Streaming",
"settings.openchamber.visual.field.streamingAutoFollow": "Seguir el contenido nuevo durante el streaming",
"settings.openchamber.visual.field.streamingAutoFollowAria": "Seguir automáticamente el contenido nuevo mientras se transmite una respuesta",
"settings.openchamber.visual.field.streamingAutoFollowInfo": "Mientras llega una respuesta, la vista se desplaza hacia el contenido más reciente. Desactívalo para mantener la vista quieta y desplazarte manualmente; enviar un mensaje desde la mitad del chat tampoco moverá la vista.",
"settings.openchamber.visual.section.messageAppearance": "Apariencia de los mensajes",
"settings.openchamber.visual.section.toolsAndFiles": "Herramientas y archivos",
"settings.openchamber.visual.section.composer": "Compositor",
@@ -1831,8 +1953,6 @@ export const settingsDict = {
"settings.openchamber.visual.field.selectTimeFormatAria": "Seleccionar formato de hora",
"settings.openchamber.visual.field.selectWeekStartAria": "Seleccionar inicio de la semana",
"settings.openchamber.visual.actions.reloadThemes": "Recargar temas",
"settings.openchamber.visual.field.macVibrancy": "Transparencia de la ventana",
"settings.openchamber.visual.field.macVibrancyHint": "Usa el desenfoque nativo de macOS (vibrancy) detrás de la barra lateral. Desactívalo para superficies totalmente sólidas y opacas.",
"settings.openchamber.visual.field.dockBadge": "Insignia en el Dock",
"settings.openchamber.visual.field.dockBadgeHint": "Muestra en el icono del Dock de macOS el número de chats con actividad sin ver.",
"settings.openchamber.visual.actions.saveAndRestart": "Guardar y reiniciar",
@@ -1879,6 +1999,10 @@ export const settingsDict = {
"settings.openchamber.visual.actions.resetInputBarOffsetAria": "Restablecer desplazamiento de la barra de entrada",
"settings.openchamber.visual.field.terminalQuickKeysAria": "Teclas rápidas del terminal",
"settings.openchamber.visual.field.terminalQuickKeys": "Teclas rápidas del terminal",
"settings.openchamber.visual.field.sessionTabsGroup": "Pestañas de sesión",
"settings.openchamber.visual.field.sessionTabs": "Mostrar las sesiones como pestañas en el encabezado",
"settings.openchamber.visual.field.sessionTabsAria": "Alternar las pestañas de sesión en el encabezado",
"settings.openchamber.visual.field.sessionTabsInfo": "Las sesiones que abres se alinean como pestañas en el encabezado. Al desactivarlo, el encabezado vuelve a mostrar solo el título de la sesión.",
"settings.openchamber.visual.field.terminalQuickKeysTooltip": "Mostrar Esc, Ctrl y flechas en la vista del terminal",
"settings.openchamber.visual.field.fileEditorKeymap": "Mapa de teclas del editor de archivos",
"settings.openchamber.visual.option.fileEditorKeymap.default": "Predeterminado",
@@ -1911,8 +2035,6 @@ export const settingsDict = {
"settings.openchamber.visual.field.stickyUserHeader": "Encabezado de usuario fijo",
"settings.openchamber.visual.field.promptNavigatorEnabledAria": "Navegador de prompts",
"settings.openchamber.visual.field.promptNavigatorEnabled": "Navegador de prompts",
"settings.openchamber.visual.field.expandedEditorToolbarAria": "Mostrar siempre la barra de herramientas del editor",
"settings.openchamber.visual.field.expandedEditorToolbar": "Mostrar siempre la barra de herramientas del editor (anclada bajo las pestañas)",
"settings.openchamber.visual.field.autoSaveEnabledAria": "Guardado automático de archivos",
"settings.openchamber.visual.field.autoSaveEnabled": "Guardado automático de archivos",
"settings.openchamber.visual.field.autoSaveEnabledInfo": "Guarda automáticamente las ediciones del archivo después de dejar de escribir. Desactívalo para exigir un guardado manual.",
@@ -2105,4 +2227,5 @@ export const settingsDict = {
"settings.openchamber.visual.field.followUpBehaviorDescription": "Choose what happens when you press Enter on a follow-up message while the agent is still responding.",
"settings.openchamber.visual.option.followUpBehavior.steer.label": "Steer",
"settings.openchamber.visual.option.followUpBehavior.queue.label": "Queue",
...thirdPartyIntegrationI18n.es,
} as const;
+377 -39
View File
@@ -6,6 +6,19 @@ export const dict: Record<I18nKey, string> = {
'terminalView.actions.attachSelection': 'Adjuntar salida seleccionada',
'terminalView.actions.restart': 'Reiniciar terminal',
'chat.message.terminalContext': '{terminal}, líneas {start}-{end}',
'chat.message.context.codeComment': 'Comentario en {file}, líneas {start}-{end}',
'chat.message.context.codeCommentLine': 'Comentario en {file}, línea {line}',
'chat.message.context.chatQuote': 'Cita de un mensaje anterior',
'chat.message.context.fileQuote': 'Selección de {file}',
'chat.chatInput.chatQuoteContext': 'Citas del chat',
'chat.chatInput.chatQuoteContextRemove': 'Quitar citas del chat',
'chat.chatInput.contextPreview.selectedLabel': 'Texto seleccionado',
'chat.chatInput.contextPreview.commentLabel': 'Comentario del usuario',
'chat.chatInput.contextPreview.edit': 'Editar comentario',
'chat.chatInput.contextPreview.remove': 'Quitar',
'chat.message.context.browserAnnotation': 'Anotación del navegador ({page})',
'chat.message.context.prComment': 'Comentario de PR de GitHub ({label})',
'chat.message.context.prCheck': 'Verificación de PR de GitHub fallida ({label})',
'chat.chatInput.terminalContext': '{terminal}, líneas {start}-{end}',
'chat.chatInput.terminalContextRemove': 'Eliminar contexto del terminal',
'chat.chatInput.prCommentContext': 'Comentarios del PR',
@@ -25,6 +38,7 @@ export const dict: Record<I18nKey, string> = {
"common.language.korean": "Coreano",
"common.language.polish": "Polaco",
"common.language.japanese": "Japonés",
"common.language.turkish": "Turco",
"common.revealPath.finder": "Mostrar en Finder",
"common.revealPath.fileExplorer": "Abrir en File Explorer",
"common.revealPath.fileManager": "Abrir en gestor de archivos",
@@ -86,6 +100,11 @@ export const dict: Record<I18nKey, string> = {
"mobile.instances.label.label": "Nombre",
"mobile.instances.label.placeholder": "Nombre para mostrar (opcional)",
"mobile.instances.saveNew": "Guardar instancia",
"mobile.connectionDebug.title": "Registro de conexión",
"mobile.connectionDebug.copy": "Copiar",
"mobile.connectionDebug.copied": "Copiado",
"mobile.connectionDebug.close": "Cerrar",
"mobile.connectionDebug.empty": "Aún no hay eventos de conexión.",
"mobile.instances.status.connectedDirect": "Conectado · Red local",
"mobile.instances.status.connectedRelay": "Conectado · Relay privado",
"mobile.instances.saveEdit": "Guardar cambios",
@@ -112,6 +131,7 @@ export const dict: Record<I18nKey, string> = {
"mobile.sessions.section.worktrees": "Worktrees",
"mobile.sessions.section.otherProjects": "Cambiar de proyecto",
"mobile.sessions.section.projects": "Proyectos",
"mobile.sessions.section.chats": "Chats",
"mobile.sessions.empty.noProjectsTitle": "Sin proyectos",
"mobile.sessions.empty.noProjectsDescription": "Agrega un proyecto para empezar a chatear con tu código.",
"mobile.sessions.empty.noSessionsTitle": "Sin sesiones",
@@ -232,8 +252,10 @@ export const dict: Record<I18nKey, string> = {
"sessions.scheduledTasks.dialog.toast.deleted": "Tarea programada eliminada",
"sessions.scheduledTasks.dialog.toast.deleteFailed": "No se pudo eliminar la tarea",
"sessions.scheduledTasks.dialog.toast.started": "Tarea iniciada",
"sessions.scheduledTasks.dialog.toast.startedPersistWarning": "La tarea se inició, pero no se pudo guardar su estado. Puede seguir apareciendo como en ejecución hasta el siguiente inicio correcto.",
"sessions.scheduledTasks.dialog.toast.runFailed": "No se pudo ejecutar la tarea",
"sessions.scheduledTasks.dialog.confirm.deleteTask": "Eliminar tarea programada \"{taskName}\"?",
'sessions.scheduledTasks.dialog.confirm.deleteLoopFile': '¿Eliminar la tarea de bucle «{taskName}» y su archivo Markdown?',
"sessions.scheduledTasks.dialog.schedule.daily": "Cada día {time}",
"sessions.scheduledTasks.dialog.schedule.dailyWithTimezone": "Cada día {time} ({timezone})",
"sessions.scheduledTasks.dialog.schedule.weekly": "Cada semana {days} {time}",
@@ -269,6 +291,9 @@ export const dict: Record<I18nKey, string> = {
"sessions.scheduledTasks.dialog.taskToggle.pauseAria": "Pausar {taskName}",
"sessions.scheduledTasks.dialog.taskToggle.enabled": "Habilitado",
"sessions.scheduledTasks.dialog.taskToggle.paused": "Pausado",
'sessions.scheduledTasks.dialog.loopFile.note': 'Gestionada por el archivo de bucle {file}',
'sessions.scheduledTasks.dialog.loopFile.toggleDisabled': 'La activación la controla el archivo de bucle; establece enabled en el frontmatter de Markdown',
'sessions.scheduledTasks.dialog.loopFile.actionsDisabled': 'Las tareas de bucle se configuran en su archivo Markdown .agents/loops',
"sessions.scheduledTasks.editor.title.edit": "Editar tarea programada",
"sessions.scheduledTasks.editor.title.new": "Nueva tarea programada",
"sessions.scheduledTasks.editor.description": "Configura una tarea del lado del servidor que crea una nueva sesión y envía un prompt.",
@@ -361,7 +386,7 @@ export const dict: Record<I18nKey, string> = {
"multirun.launcher.attachments.attach": "Adjuntar",
"multirun.launcher.attachments.tooltip": "Archivos idénticos enviados a todas las ejecuciones",
"multirun.launcher.models.label": "Modelos",
"multirun.launcher.models.info": "Selecciona 2-{max} modelos. El mismo modelo puede añadirse varias veces.",
"multirun.launcher.models.info": "Selecciona 2 o más modelos. El mismo modelo puede añadirse varias veces.",
"multirun.launcher.toast.fileTooLarge": "El archivo \"{fileName}\" es demasiado grande (máximo 10MB)",
"multirun.launcher.toast.attachFailed": "No se pudo adjuntar \"{fileName}\"",
"multirun.launcher.toast.attachedSingle": "Archivo adjuntado ({count})",
@@ -428,9 +453,16 @@ export const dict: Record<I18nKey, string> = {
"sessions.sidebar.empty.noMatches.title": "No hay sesiones coincidentes",
"sessions.sidebar.empty.noMatches.description": "Inténtalo con un título, rama, carpeta o ruta diferente.",
"sessions.sidebar.activity.recentTitle": "reciente",
"sessions.sidebar.activity.chatsTitle": "chats",
"sessions.sidebar.activity.chatsEmpty": "Aún no hay chats.",
"chat.chatInput.chooseProject": "Elegir proyecto",
"sessions.archivePage.allDirectories": "Todos los directorios",
"sessions.sidebar.header.displayMode.stickyHeaders": "Encabezados de proyecto fijos",
"sessions.sidebar.header.grouping.label": "Agrupar sesiones",
"sessions.sidebar.header.projectDisplay.label": "Mostrar proyectos",
"sessions.sidebar.header.projectDisplay.all": "Todos los proyectos",
"sessions.sidebar.header.projectDisplay.single": "Un proyecto",
"sessions.sidebar.project.selectAria": "Seleccionar proyecto, actualmente {project}",
"sessions.sidebar.header.grouping.byWorktree": "Por worktree",
"sessions.sidebar.header.grouping.flat": "Lista plana",
"sessions.sidebar.project.actions.manageWorktrees": "Gestionar worktrees",
@@ -452,6 +484,10 @@ export const dict: Record<I18nKey, string> = {
"sessions.archivePage.deleteSessionAria": "Eliminar {title}",
"sessions.archivePage.restoreSessionAria": "Restaurar {title}",
"sessions.switcher.openAria": "Abrir selector de sesiones",
"header.sessionTabs.stripAria": "Sesiones abiertas",
"header.sessionTabs.tabMenuAria": "Acciones de la pestaña de sesión",
"header.sessionTabs.closeTab": "Cerrar pestaña",
"header.sessionTabs.closeOtherTabs": "Cerrar las demás pestañas",
"sessions.switcher.empty": "No hay sesiones recientes",
"sessions.switcher.draftTitle": "Nueva sesión",
"sessions.sidebar.updateCheck.errorTitle": "No se pudo comprobar actualizaciones",
@@ -503,11 +539,33 @@ export const dict: Record<I18nKey, string> = {
"sessions.sidebar.session.menu.unshare": "Dejar de compartir",
"sessions.sidebar.session.menu.exportMarkdown": "Exportar Markdown",
"sessions.sidebar.session.menu.moveToWorktree": "Mover a un worktree nuevo",
"sessions.sidebar.session.menu.moveToWorktreeTargets": "Mover a worktree",
"sessions.sidebar.session.menu.newWorktree": "Nuevo worktree...",
"sessions.sidebar.session.moveToWorktree.success": "Sesión movida a un worktree nuevo",
"sessions.sidebar.session.moveToWorktree.failed": "No se pudo mover la sesión a un worktree nuevo",
"sessions.sidebar.session.moveToWorktree.tooltip": "Crea un worktree nuevo desde la rama actual, transfiere los cambios sin confirmar y mueve allí esta sesión y sus subsesiones.",
"sessions.sidebar.session.moveToWorktree.main": "Worktree principal",
"sessions.sidebar.session.moveToWorktree.refreshing": "Actualizando worktrees...",
"sessions.sidebar.session.moveToWorktree.loadFailed": "No se pudieron cargar los worktrees",
"sessions.sidebar.session.moveToWorktree.current": "Worktree actual",
"sessions.sidebar.session.moveToWorktree.existingSuccess": "Sesión movida al worktree",
"sessions.sidebar.session.moveToWorktree.existingFailed": "No se pudo mover la sesión al worktree",
"sessions.sidebar.session.moveToWorktree.tooltipTargets": "Muestra los worktrees existentes y la opción de crear uno nuevo para esta sesión.",
"sessions.sidebar.session.moveToWorktree.tooltip": "Crea un worktree nuevo desde la rama actual y mueve allí esta sesión y sus subsesiones. Si la fuente tiene cambios sin confirmar, decides si se transfieren.",
"sessions.sidebar.session.moveToWorktree.tooltipBusy": "Disponible cuando la sesión está inactiva. Detén la actividad actual o espera a que termine.",
"sessions.sidebar.session.moveToWorktree.tooltipMoving": "Esta sesión ya se está moviendo a un worktree nuevo.",
"sessions.sidebar.session.moveToWorktree.confirm.title": "La fuente tiene cambios sin confirmar",
"sessions.sidebar.session.moveToWorktree.confirm.changedFiles": "Archivos modificados en este worktree: {count}.",
"sessions.sidebar.session.moveToWorktree.confirm.ownership": "OpenCode rastrea estos cambios por directorio, no por sesión.",
"sessions.sidebar.session.moveToWorktree.confirm.sessionOnlyHelp": "Mueve esta sesión y sus subsesiones dejando intacto cada archivo de la fuente.",
"sessions.sidebar.session.moveToWorktree.confirm.allChangesHelp": "Transfiere los cambios del directorio de la sesión. Los archivos sin confirmar y sin rastrear salen de la fuente tras el éxito.",
"sessions.sidebar.session.moveToWorktree.confirm.stagedWarning": "Los cambios en el índice permanecen en la fuente y se copian al destino.",
"sessions.sidebar.session.moveToWorktree.confirm.baseWarning": "La transferencia puede fallar si el destino usa una base de Git distinta.",
"sessions.sidebar.session.moveToWorktree.confirm.sessionOnly": "Mover solo la sesión",
"sessions.sidebar.session.moveToWorktree.confirm.allChanges": "Mover todos los cambios de la fuente",
"sessions.sidebar.session.moveToWorktree.confirm.cancel": "Cancelar",
"sessions.sidebar.session.moveToWorktree.sourceVerificationFailed": "No se pudieron verificar los cambios de la fuente. No se modificó ningún worktree ni sesión.",
"sessions.sidebar.session.moveToWorktree.applyChangesFailed": "El destino no pudo aceptar los cambios de la fuente. No se movieron la sesión ni los cambios. Reintenta y elige Mover solo la sesión.",
"sessions.sidebar.session.moveToWorktree.changesMayBeInDestination": "La conexión se cortó antes de que el destino confirmara el movimiento. Puede que la sesión no se haya movido y que tus cambios sin confirmar ya estén en el worktree de destino. Compruébalo antes de volver a intentarlo.",
"sessions.sidebar.session.menu.runFusion": "Ejecutar fusion",
"sessions.sidebar.session.menu.openInSidePanel": "Abrir en panel lateral",
"sessions.sidebar.session.actions.openInEditor": "Abrir en el editor",
@@ -531,6 +589,10 @@ export const dict: Record<I18nKey, string> = {
"sessions.sidebar.session.status.pinned": "Sesión anclada",
"sessions.sidebar.session.status.movingToWorktree": "Moviendo la sesión a un worktree nuevo",
"sessions.sidebar.session.status.permissionRequired": "Permiso requerido",
"sessions.sidebar.session.status.questionPendingSingle": "1 pregunta pendiente",
"sessions.sidebar.session.status.questionPendingMany": "{count} preguntas pendientes",
"sessions.sidebar.session.status.activeFor": "Activa desde hace {duration}",
"sessions.sidebar.session.status.lastTurnDuration": "El último turno duró {duration}",
"sessions.sidebar.session.subsessions.collapse": "Colapsar subsesiones",
"sessions.sidebar.session.subsessions.expand": "Expandir subsesiones",
"sessions.sidebar.dialogs.deleteSession.title": "¿Eliminar sesión?",
@@ -984,6 +1046,8 @@ export const dict: Record<I18nKey, string> = {
"gitView.pr.field.draft": "Borrador",
"gitView.pr.field.title": "Título",
"gitView.pr.githubNotConnected": "GitHub no está conectado",
"gitView.pr.history.merged": "La PR #{number} se fusionó en {base}.",
"gitView.pr.history.closed": "La PR #{number} se cerró.",
"gitView.pr.loadingDescription": "Cargando descripción...",
"gitView.pr.mergeMethod.merge": "Crear un merge commit",
"gitView.pr.mergeMethod.rebase": "Rebase y merge",
@@ -1100,11 +1164,20 @@ export const dict: Record<I18nKey, string> = {
"contextPanel.mode.context": "Contexto",
"contextPanel.mode.preview": "Vista previa",
"contextPanel.mode.browser": "Navegador",
"contextRail.configure.open": "Configurar paneles",
"contextRail.configure.dialogTitle": "Paneles de la barra",
"contextRail.configure.dialogDescription": "Elige qué paneles muestra la barra. Los paneles ocultos conservan sus datos y siguen accesibles desde la paleta de comandos.",
"contextRail.configure.showAll": "Mostrar todos",
"contextRail.configure.noneWarning": "Todos los paneles están ocultos.",
"contextRail.aria.rail": "Superficies del panel",
"contextPanel.editorEmpty.title": "Ningún archivo abierto",
"contextPanel.editorEmpty.description": "Elige un archivo del árbol para empezar a editar.",
"contextRail.surface.editor.description": "Editar archivos del proyecto",
"contextRail.surface.git.description": "Commits, ramas y pull requests",
"contextRail.surface.git.changesCountAriaSingle": "{label}, {count} archivo modificado",
"contextRail.surface.git.changesCountAriaPlural": "{label}, {count} archivos modificados",
"contextRail.surface.git.changesCountTooltipSingle": "{count} archivo modificado",
"contextRail.surface.git.changesCountTooltipPlural": "{count} archivos modificados",
"contextRail.surface.terminal.description": "Terminal integrada",
"contextRail.surface.diff.description": "Revisar cambios en curso",
"contextPanel.mode.walkthrough": "Recorrido",
@@ -1144,8 +1217,11 @@ export const dict: Record<I18nKey, string> = {
"walkthrough.toc.moreFiles": "Más archivos: {count}",
"walkthrough.toc.uncovered": "Sin cubrir: {count}",
"walkthrough.toc.resize": "Cambiar el ancho de la columna de contenidos",
"walkthrough.importance.critical": "Crítico",
"walkthrough.importance.critical": "Cambio clave",
"walkthrough.importance.criticalHint": "Este paso impulsa el resto del cambio, así que léelo con atención. No es un problema detectado en tu código.",
"walkthrough.importance.context": "Contexto",
"walkthrough.importance.contextHint": "Un cambio de apoyo, incluido para que el resto tenga sentido.",
"walkthrough.help.guide": "Cómo funcionan los walkthroughs",
"walkthrough.blocked.noModel.title": "No hay ningún modelo pequeño disponible",
"walkthrough.blocked.noModel.description": "Inicia sesión en un proveedor de modelos para generar una revisión.",
"walkthrough.blocked.emptyDiff.title": "Nada que revisar",
@@ -1160,22 +1236,77 @@ export const dict: Record<I18nKey, string> = {
"walkthrough.blocked.outputExhausted.descriptionUnknownModel": "El modelo pequeño gastó todo su margen de salida razonando y no devolvió nada. Los modelos de razonamiento suelen hacerlo con diffs grandes: prueba con un modelo que razone menos o revisa un ámbito más reducido.",
"walkthrough.blocked.onlyGenerated.title": "Solo cambiaron archivos generados",
"walkthrough.blocked.onlyGenerated.description": "Todos los cambios son archivos de bloqueo u otra salida generada por herramientas, que la revisión omite a propósito.",
"walkthrough.blocked.serverUnsupported.title": "Este servidor no admite walkthroughs",
"walkthrough.blocked.serverUnsupported.description": "El servidor de OpenChamber al que está conectada esta app no respondió a la API de walkthrough, así que es más antiguo que la app. Actualiza el servidor a 1.18 o posterior y vuelve a intentarlo.",
"walkthrough.blocked.contextTooSmall.descriptionUnknownModel": "El modelo pequeño admite unos {available} mil caracteres y este diff necesita unos {required} mil. No se recorta nada: elige un modelo con más contexto.",
"walkthrough.blocked.structuredOutput.descriptionUnknownModel": "El modelo pequeño no admite las respuestas estructuradas que necesita un recorrido.",
"contextRail.surface.plan.description": "Ver el plan actual",
"contextRail.surface.pr.description": "Crea, revisa y fusiona el pull request de la rama actual",
"contextRail.surface.notes.description": "Notas, tareas y planes del proyecto",
"contextRail.surface.notes.description": "Notas, tareas, planes y memoria del agente del proyecto",
"contextRail.surface.context.description": "Contexto de la sesión y uso de tokens",
"contextRail.surface.browser.description": "Navegador web integrado",
"contextRail.surface.preview.description": "Vista previa del servidor de desarrollo",
"contextRail.surface.chat.description": "Sesión abierta en paralelo",
"contextRail.surface.notes": "Notas del proyecto",
"contextRail.surface.notes": "Conocimiento del proyecto",
"contextRail.editorTree.toggle": "Alternar árbol de archivos",
"contextPanel.browser.open": "Abrir panel del navegador",
"contextPanel.browser.addressAria": "Dirección del navegador",
"contextPanel.browser.history.label": "Direcciones recientes",
"contextPanel.browser.history.forget": "Quitar del historial",
"contextPanel.browser.newTab": "Nueva pestaña del navegador",
"contextPanel.browser.empty": "Navegador web",
"contextPanel.browser.emptyHint": "Ingrese una dirección arriba para comenzar a navegar",
"contextPanel.browser.inspectUnavailable": "Esta página no se puede inspeccionar desde el panel del navegador.",
"contextPanel.browser.back": "Atrás",
"contextPanel.browser.forward": "Adelante",
"contextPanel.browser.reload": "Recargar",
"contextPanel.browser.hardReload": "Recargar ignorando la caché",
"contextPanel.browser.zoomIn": "Acercar",
"contextPanel.browser.zoomOut": "Alejar",
"contextPanel.browser.zoomReset": "Restablecer zoom",
"contextPanel.browser.clearCookies": "Borrar cookies",
"contextPanel.browser.clearCache": "Borrar caché",
"contextPanel.browser.clearedCookies": "Cookies borradas",
"contextPanel.browser.clearedCache": "Caché borrada",
"contextPanel.browser.clearFailed": "No se pudieron borrar los datos de navegación",
"contextPanel.browser.stop": "Detener",
"contextPanel.browser.openExternal": "Abrir en el navegador del sistema",
"contextPanel.browser.devTools": "Abrir DevTools",
"contextPanel.browser.deviceToolbar": "Barra de dispositivos",
"contextPanel.browser.device.preset": "Preajuste de dispositivo",
"contextPanel.browser.device.responsive": "Adaptable",
"contextPanel.browser.device.width": "Ancho del viewport",
"contextPanel.browser.device.height": "Alto del viewport",
"contextPanel.browser.device.rotate": "Rotar",
"contextPanel.browser.device.schemeSystem": "Auto",
"contextPanel.browser.device.schemeLight": "Claro",
"contextPanel.browser.device.schemeDark": "Oscuro",
"contextPanel.browser.device.schemeFailed": "No se pudo cambiar la apariencia de la página",
"contextPanel.browser.frameTitle": "Navegador",
"contextPanel.browser.loadFailed": "No se pudo cargar esta página",
"contextPanel.browser.waitingForServer": "Esperando al servidor de desarrollo",
"contextPanel.browser.waitingForServerHint": "Todavía no acepta conexiones. La página se cargará en cuanto lo haga.",
"contextPanel.browser.tunnelFailed": "No se pudo alcanzar este servidor de desarrollo",
"contextPanel.browser.tunnelFailedHint": "{url} se ejecuta en la máquina donde está OpenChamber y no se pudo abrir la conexión con ella. Aquí no se muestra nada de tu propia máquina.",
"contextPanel.browser.loadFailedUnknown": "No se pudo acceder a la página.",
"contextPanel.browser.crashed": "Esta página dejó de responder",
"contextPanel.browser.crashedHint": "La página falló varias veces seguidas. Recarga para volver a intentarlo.",
"contextPanel.browser.devServers.title": "Servidores de desarrollo activos",
"projectActions.toast.multipleServers": "Se iniciaron varios servidores: elige uno en el panel del navegador",
"contextPanel.browser.devServers.justStarted": "Recién iniciados",
"contextPanel.browser.devServers.unavailable": "No se pudieron comprobar los servidores de desarrollo activos.",
"contextPanel.browser.devServers.remoteOnly": "Se ejecutan en la máquina que aloja OpenChamber. Abrirlos requiere la aplicación de escritorio.",
"contextPanel.browser.annotate.toggle": "Anotar página",
"contextPanel.browser.annotate.intro": "Esta es una selección anotada del navegador integrado.",
"contextPanel.browser.annotate.attached": "Anotación adjuntada al chat",
"contextPanel.browser.annotate.noSession": "Abre una sesión de chat antes de adjuntar una anotación",
"contextPanel.browser.annotate.noPage": "Carga una página antes de anotar",
"contextPanel.browser.annotate.failed": "No se pudo anotar esta página",
"contextPanel.browser.annotate.tool.element": "Elemento",
"contextPanel.browser.annotate.tool.region": "Región",
"contextPanel.browser.annotate.tool.draw": "Dibujar",
"contextPanel.browser.annotate.commentPlaceholder": "Describe el cambio...",
"contextPanel.browser.annotate.submit": "Adjuntar",
"contextPanel.browser.trustNotice": "Las páginas que abras aquí se ejecutan con acceso completo a OpenChamber: necesario para la inspección y las capturas. Abre solo sitios de confianza: una página maliciosa podría leer tus datos o actuar en tu nombre.",
"contextPanel.tab.closeTabAria": "Cerrar pestaña {label}",
"contextPanel.actions.collapsePanel": "Colapsar panel",
@@ -1210,6 +1341,14 @@ export const dict: Record<I18nKey, string> = {
"sidebarFilesTree.toast.writeNotSupported": "La escritura no es compatible",
"sidebarFilesTree.toast.fileCreated": "Archivo creado",
"sidebarFilesTree.toast.operationFailed": "No se pudo completar la operación",
"sidebarFilesTree.toast.uploaded": "Archivos subidos",
"sidebarFilesTree.toast.uploadedWithoutConflicts": "Se subieron los archivos sin conflictos",
"sidebarFilesTree.toast.uploadFailed": "No se pudieron subir algunos archivos",
"sidebarFilesTree.drop.target": "Subir a {path}",
"sidebarFilesTree.drop.uploading": "Subiendo archivos a {path}",
"sidebarFilesTree.dialog.uploadConflicts.title": "¿Reemplazar los archivos existentes?",
"sidebarFilesTree.dialog.uploadConflicts.description": "Ya existen archivos con estos nombres en {path}. El reemplazo no se puede deshacer.",
"sidebarFilesTree.dialog.uploadConflicts.replace": "Reemplazar",
"sidebarFilesTree.toast.folderNameRequired": "El nombre de carpeta es obligatorio",
"sidebarFilesTree.toast.folderCreated": "Carpeta creada",
"sidebarFilesTree.toast.nameRequired": "El nombre es obligatorio",
@@ -1266,6 +1405,12 @@ export const dict: Record<I18nKey, string> = {
"filesView.editor.disableLineWrap": "Desactivar ajuste de línea",
"filesView.editor.enableLineWrap": "Activar ajuste de línea",
"filesView.editor.findInFile": "Buscar en el archivo",
"filesView.preview.find.placeholder": "Buscar en la vista previa",
"filesView.preview.find.nextAria": "Siguiente coincidencia",
"filesView.preview.find.previousAria": "Coincidencia anterior",
"filesView.preview.find.closeAria": "Cerrar búsqueda",
"filesView.preview.find.noMatches": "Sin coincidencias",
"filesView.preview.find.countAria": "{current} de {total}",
"filesView.editor.goToLine": "Ir a línea",
"filesView.editor.switchToEditMode": "Cambiar al modo de edición",
"filesView.editor.switchToPreviewMode": "Cambiar al modo de vista previa",
@@ -1317,10 +1462,12 @@ export const dict: Record<I18nKey, string> = {
"contextUsage.mobile.usedTokens": "Tokens usados",
"contextUsage.mobile.contextLimit": "Límite de contexto",
"contextUsage.mobile.outputLimit": "Límite de salida",
"contextUsage.mobile.cost": "Costo",
"contextUsage.mobile.usage": "Uso",
"contextUsage.tooltip.usedTokens": "Tokens usados: {tokens}",
"contextUsage.tooltip.contextLimit": "Límite de contexto: {tokens}",
"contextUsage.tooltip.outputLimit": "Límite de salida: {tokens}",
"contextUsage.tooltip.cost": "Costo: {cost}",
"contextSidebar.session.untitled": "Sesión sin título",
"contextSidebar.empty.openSession": "Abrir una sesión para inspeccionar el contexto.",
"contextSidebar.section.context": "Contexto",
@@ -1347,6 +1494,7 @@ export const dict: Record<I18nKey, string> = {
"planView.file.defaultName": "plan",
"planView.title.default": "Plan",
"planView.error.saveFailed": "No se pudo guardar",
"planView.error.loadFailed": "No se pudo cargar este plan",
"planView.error.previewUnavailable": "Vista previa no disponible",
"planView.error.switchToEditMode": "Cambia al modo de edición para resolver el problema.",
"planView.error.writeFailed": "No se pudo escribir",
@@ -1388,6 +1536,13 @@ export const dict: Record<I18nKey, string> = {
"diffView.scope.changed": "Cambiados",
"diffView.scope.staged": "Staged",
"diffView.scope.lastTurn": "Último turno",
"diffView.scope.branch": "Rama",
"diffView.branch.resolvingBase": "Detectando rama base...",
"diffView.branch.noBaseTitle": "Sin rama base",
"diffView.branch.noBaseDescription": "Git no tiene registro de dónde surgió esta rama. Elige una rama base para comparar.",
"diffView.branch.loadError": "No se pudieron cargar los cambios de la rama",
"diffView.branch.loadingFiles": "Cargando cambios de la rama...",
"diffView.branch.empty": "No hay cambios en esta rama respecto a {base}",
"diffView.scope.selectorAria": "Seleccionar modo de cambios",
"diffView.actions.retry": "Volver a intentar",
"diffView.actions.renderAnyway": "Renderizar de todos modos",
@@ -1424,6 +1579,12 @@ export const dict: Record<I18nKey, string> = {
'chat.dictation.retry': 'Reintentar transcripción',
'chat.dictation.discard': 'Descartar grabación',
'chat.history.loadOlder': 'Cargar mensajes anteriores',
"chat.appLink.confirm.title": "¿Abrir este enlace en otra aplicación?",
"chat.appLink.confirm.description": "Este enlace del chat usa el protocolo {scheme} y se abrirá en otra aplicación.",
"chat.appLink.confirm.descriptionPlain": "Este enlace del chat se abrirá en otra aplicación.",
"chat.appLink.confirm.cancel": "Cancelar",
"chat.appLink.confirm.open": "Abrir una vez",
"chat.appLink.confirm.trustAndOpen": "Confiar y abrir",
'chat.autoReview.title': 'El ciclo de revisión de código está en curso',
'chat.autoReview.status.waitingForReviewer': 'Esperando al revisor',
'chat.autoReview.status.waitingForImplementer': 'Esperando al implementador',
@@ -1441,11 +1602,46 @@ export const dict: Record<I18nKey, string> = {
"diffView.hunk.unsupported": "Preparar fragmentos individuales no es compatible en este entorno.",
"rightSidebar.contextNotesTodo.plan.defaultTitle": "Plan",
"rightSidebar.contextNotesTodo.empty.selectProject": "Selecciona un proyecto para añadir notas y tareas pendientes.",
"rightSidebar.contextNotesTodo.notes.title": "Notas rápidas — {project}",
"rightSidebar.contextNotesTodo.notes.placeholder": "Captura contexto, recordatorios o enlaces",
"rightSidebar.contextNotesTodo.todo.title": "Tareas pendientes",
"rightSidebar.contextNotesTodo.todo.itemsSingle": "{count} elemento",
"rightSidebar.contextNotesTodo.todo.itemsPlural": "{count} elementos",
"rightSidebar.contextNotesTodo.notes.addAria": "Añadir nota",
"rightSidebar.contextNotesTodo.notes.empty": "Aún no hay notas. Guarda contexto, recordatorios o enlaces.",
"rightSidebar.contextNotesTodo.notes.actions.expand": "Expandir nota",
"rightSidebar.contextNotesTodo.notes.actions.collapse": "Contraer nota",
"rightSidebar.contextNotesTodo.notes.actions.delete": "Eliminar nota",
"rightSidebar.contextNotesTodo.notes.actions.pin": "Fijar al contexto del agente",
"rightSidebar.contextNotesTodo.notes.actions.unpin": "Quitar del contexto del agente",
"rightSidebar.contextNotesTodo.notes.source.selection": "Del chat",
"rightSidebar.contextNotesTodo.notes.source.agent": "Del agente",
"rightSidebar.contextNotesTodo.search.placeholder": "Buscar",
"rightSidebar.contextNotesTodo.search.clear": "Borrar búsqueda",
"rightSidebar.contextNotesTodo.search.noResults": "Nada coincide con \"{query}\".",
"rightSidebar.contextNotesTodo.toast.deleteNoteFailed": "No se pudo eliminar la nota",
"rightSidebar.contextNotesTodo.toast.createNoteFailed": "No se pudo crear la nota",
"rightSidebar.contextNotesTodo.tabs.notes": "Notas",
"rightSidebar.contextNotesTodo.tabs.todos": "Tareas",
"rightSidebar.contextNotesTodo.tabs.plans": "Planes",
"rightSidebar.contextNotesTodo.plans.actions.back": "Volver a los planes",
"rightSidebar.contextNotesTodo.tabs.memory": "Memoria",
"rightSidebar.contextNotesTodo.sections.label": "Secciones del contexto del proyecto",
"rightSidebar.contextNotesTodo.sections.resize": "Redimensionar la barra de secciones",
"rightSidebar.contextNotesTodo.memory.scope.project": "Proyecto",
"rightSidebar.contextNotesTodo.memory.scope.label": "Ámbito de la memoria",
"rightSidebar.contextNotesTodo.memory.scope.global": "Sobre ti",
"rightSidebar.contextNotesTodo.memory.type.fact": "hecho",
"rightSidebar.contextNotesTodo.memory.badge.new": "nuevo",
"rightSidebar.contextNotesTodo.memory.flagged": "Retenido del agente: parece una instrucción",
"rightSidebar.contextNotesTodo.memory.badge.changed": "cambiado",
"rightSidebar.contextNotesTodo.memory.type.preference": "preferencia",
"rightSidebar.contextNotesTodo.memory.type.reference": "referencia",
"rightSidebar.contextNotesTodo.memory.actions.delete": "Olvidar esta memoria",
"rightSidebar.contextNotesTodo.memory.actions.editTitle": "Título de la memoria",
"rightSidebar.contextNotesTodo.memory.actions.editBody": "Texto de la memoria",
"rightSidebar.contextNotesTodo.memory.toast.saveFailed": "No se pudo guardar la memoria",
"rightSidebar.contextNotesTodo.memory.toast.deleteFailed": "No se pudo olvidar la memoria",
"rightSidebar.contextNotesTodo.memory.empty.nothing": "El agente aún no ha guardado nada aquí.",
"rightSidebar.contextNotesTodo.memory.empty.noMatches": "Ninguna memoria guardada coincide con tu búsqueda.",
"rightSidebar.contextNotesTodo.memory.empty.noProject": "Abre un proyecto para ver qué recuerda el agente sobre él.",
"rightSidebar.contextNotesTodo.memory.empty.unavailable": "No se pudo cargar la memoria guardada. No se ha perdido nada: inténtalo de nuevo.",
"rightSidebar.contextNotesTodo.todo.clearCompleted": "Limpiar completadas",
"rightSidebar.contextNotesTodo.todo.inputPlaceholder": "Añade una tarea pendiente",
"rightSidebar.contextNotesTodo.todo.addAria": "Añadir tarea pendiente",
@@ -1456,13 +1652,9 @@ export const dict: Record<I18nKey, string> = {
"rightSidebar.contextNotesTodo.todo.actions.delete": "Eliminar \"{text}\"",
"rightSidebar.contextNotesTodo.todo.actions.send": "Enviar \"{text}\"",
"rightSidebar.contextNotesTodo.todo.actions.reorder": "Reordenar \"{text}\"",
"rightSidebar.contextNotesTodo.todo.resizeAria": "Redimensionar lista de tareas",
"rightSidebar.contextNotesTodo.todo.sendMenu.currentSession": "Enviar a la sesión actual",
"rightSidebar.contextNotesTodo.todo.sendMenu.newSession": "Enviar a una nueva sesión",
"rightSidebar.contextNotesTodo.todo.sendMenu.newWorktreeSession": "Enviar a una nueva sesión de worktree",
"rightSidebar.contextNotesTodo.plans.title": "Planes",
"rightSidebar.contextNotesTodo.plans.filesSingle": "{count} archivo",
"rightSidebar.contextNotesTodo.plans.filesPlural": "{count} archivos",
"rightSidebar.contextNotesTodo.plans.importFromFile": "Importar plan desde archivo",
"rightSidebar.contextNotesTodo.plans.empty": "Aún no hay plans guardados.",
"rightSidebar.contextNotesTodo.plans.deletePlan": "Eliminar plan",
@@ -1482,13 +1674,14 @@ export const dict: Record<I18nKey, string> = {
"rightSidebar.contextNotesTodo.toast.sentToNewSession": "Tarea enviada a una nueva sesión",
"rightSidebar.contextNotesTodo.toast.sentToNewWorktreeSession": "Tarea enviada a una nueva sesión de worktree",
"rightSidebar.contextNotesTodo.toast.sendTodoFailed": "No se pudo enviar la tarea",
"rightSidebar.contextNotesTodo.toast.updatePlanFailed": "No se pudo actualizar el plan",
"rightSidebar.contextNotesTodo.toast.deletePlanFailed": "No se pudo eliminar el plan",
"rightSidebar.contextNotesTodo.toast.planFileEmpty": "El archivo del plan está vacío",
"rightSidebar.contextNotesTodo.toast.importPlanFailed": "No se pudo importar el plan",
"rightSidebar.contextNotesTodo.toast.planImported": "Plan importado",
"rightSidebar.contextNotesTodo.toast.readPlanFileFailed": "No se pudo leer el archivo del plan",
"inlineComment.range.lines": "Líneas {start}-{end}",
"inlineComment.input.placeholder": "Añadir un comentario... (Cmd+Enter para guardar)",
"inlineComment.input.placeholder": "Añadir un comentario... ({shortcut} para guardar)",
"inlineComment.input.placeholderShort": "Añadir un comentario...",
"inlineComment.actions.cancel": "Cancelar",
"inlineComment.actions.save": "Guardar",
@@ -1507,8 +1700,6 @@ export const dict: Record<I18nKey, string> = {
"header.github.accountSource.cli": "CLI",
"header.services.openWithCurrent": "Abrir instancia, uso y MCP (actual: {current})",
"header.services.open": "Abrir servicios, uso y MCP",
"header.services.tooltip.currentInstanceWithShortcuts": "Instancia actual: {current} ({toggle}; siguiente pestaña {nextTab})",
"header.services.tooltip.servicesWithShortcuts": "Servicios ({toggle}; siguiente pestaña {nextTab})",
"header.services.title": "Servicios",
"header.services.viewAria": "Ver servicios",
"header.services.closeAria": "Cerrar servicios",
@@ -1525,7 +1716,6 @@ export const dict: Record<I18nKey, string> = {
"header.services.used": "Usado",
"header.services.remaining": "Restante",
"header.services.modelFamily.other": "Otro",
"header.services.shutdownDev": "Detener OpenChamber",
"header.actions.openPlanAria": "Abrir plan",
"header.actions.toggleChangesPanel": "Panel de cambios",
"header.actions.toggleChangesPanelAria": "Alternar panel de cambios",
@@ -1618,6 +1808,10 @@ export const dict: Record<I18nKey, string> = {
"directoryExplorerDialog.browse.directories": "Directorios",
"directoryExplorerDialog.browse.loading": "Cargando directorios...",
"directoryExplorerDialog.browse.empty": "No hay directorios coincidentes.",
"directoryExplorerDialog.browse.permissionDenied": "OpenChamber necesita acceso a esta carpeta.",
"directoryExplorerDialog.browse.loadFailed": "No se pudo cargar esta carpeta.",
"directoryExplorerDialog.browse.grantAccess": "Permitir acceso",
"directoryExplorerDialog.browse.retry": "Reintentar",
"directoryExplorerDialog.browse.parentDirectory": "Directorio padre",
"directoryExplorerDialog.browse.addedBadge": "Añadido",
"directoryExplorerDialog.browse.quickAdd": "Añadir",
@@ -1677,22 +1871,18 @@ export const dict: Record<I18nKey, string> = {
"helpDialog.item.focusChatInput": "Enfocar entrada de chat",
"helpDialog.item.togglePromptNavigator": "Mostrar u ocultar navegador de prompts",
"helpDialog.item.abortActiveRun": "Detener ejecución activa (doble presionar)",
"helpDialog.item.toggleRightSidebar": 'Alternar panel de contexto',
"helpDialog.item.openRightSidebarGitTab": 'Abrir superficie de Git',
"helpDialog.item.openRightSidebarFilesTab": 'Abrir superficie de archivos',
"helpDialog.item.toggleTerminalDock": "Mostrar u ocultar dock de terminal",
"helpDialog.item.toggleTerminalExpanded": "Expandir o contraer terminal",
"helpDialog.item.togglePlanContextPanel": "Alternar panel de contexto del plan",
"helpDialog.item.cycleTheme": "Cambiar tema (Claro → Oscuro → Sistema)",
"helpDialog.item.switchProject": "Cambiar proyecto",
"helpDialog.item.switchSessionTab": "Cambiar pestaña de sesión",
"helpDialog.item.switchContextSurface": "Cambiar superficie del panel de contexto (tecla numérica)",
"helpDialog.item.toggleServicesMenu": "Mostrar u ocultar menú de servicios",
"helpDialog.item.cycleServicesTab": "Cambiar pestaña de servicios",
"helpDialog.item.openSettings": "Abrir configuración",
"helpDialog.keyCombiner.or": "o",
"helpDialog.proTips.title": "Consejos:",
"helpDialog.proTips.commandPalette": "Usa la paleta de comandos ({shortcut}) para acceder rápidamente a todas las acciones",
"helpDialog.proTips.recentSessions": "Las cinco sesiones más recientes aparecen en la paleta de comandos",
"helpDialog.proTips.themeCycling": "El ciclo de tema recuerda tu preferencia entre sesiones",
"helpDialog.proTips.leaderSequences": "Atajos en dos pasos: pulsa la combinación y luego la segunda tecla; Esc cancela",
"header.actions.rightSidebarWithShortcut": "Barra lateral derecha ({shortcut})",
"header.actions.toggleRightSidebarAria": "Mostrar u ocultar barra lateral derecha",
"header.actions.openAppMenu": "Menú de OpenChamber",
@@ -1776,8 +1966,6 @@ export const dict: Record<I18nKey, string> = {
"session.newWorktree.noMatchingBranches": "No hay ramas coincidentes",
"session.newWorktree.localBranches": "Ramas locales",
"session.newWorktree.remoteBranches": "Ramas remotas",
"session.newWorktree.otherLocalBranches": "Otras ramas locales",
"session.newWorktree.otherRemoteBranches": "Otras ramas remotas",
"session.newWorktree.branchName": "Nombre de la rama",
"session.newWorktree.branchNamePlaceholder": "feature/my-awesome-feature",
"session.newWorktree.actions.change": "Cambiar",
@@ -1902,7 +2090,6 @@ export const dict: Record<I18nKey, string> = {
"chat.statusRow.tasksTitle": "Tareas",
"chat.statusRow.modelStatus": "{model} · {status}",
"chat.statusRow.summary.activeLeft": "{active} activas · {left} restantes",
"chat.statusRow.aborted": "Interrumpido",
"chat.revertIndicator.redo": "Rehacer",
"chat.revertIndicator.redoAria": "Rehacer — restaurar mensajes revertidos",
"chat.revertPopover.title": "Revertidos",
@@ -1916,6 +2103,9 @@ export const dict: Record<I18nKey, string> = {
"chat.revert.toast.undo": "Revertido a {preview}",
"chat.revert.toast.redo": "Rehecho",
"chat.revert.toast.restored": "Todos los mensajes restaurados",
"chat.toast.opencodeRestartInterrupted.title": "Conversación interrumpida",
"chat.toast.opencodeRestartInterrupted.description": "OpenCode se reinició mientras aún se estaba generando una respuesta. Envía un mensaje para continuar.",
"chat.toast.opencodeRestartInterrupted.openSession": "Abrir sesión",
"chat.errorBoundary.title": "Error en la conversación",
"chat.errorBoundary.description": "La interfaz de la conversación encontró un error. Esto podría deberse a un problema de red temporal o a datos de mensaje corruptos.",
"chat.errorBoundary.sessionLabel": "Sesión",
@@ -1942,6 +2132,7 @@ export const dict: Record<I18nKey, string> = {
"chat.commandAutocomplete.command.catchUpDescription": "Recupera el contexto: qué estabas haciendo y por dónde continuar.",
"chat.commandAutocomplete.command.debugDescription": "Investigación guiada de la causa raíz de un error antes de proponer una solución.",
"chat.commandAutocomplete.command.weighDescription": "Compara 2-3 enfoques con sus ventajas y desventajas y una recomendación antes de decidir.",
'chat.commandAutocomplete.command.btwDescription': 'Haz una pregunta paralela en una sesión hija temporal sin desviar este chat.',
"chat.commandAutocomplete.command.exploreDescription": "Oriéntate en este código: un recorrido general de la arquitectura y las partes principales.",
"chat.commandAutocomplete.badge.skill": "habilidad",
"chat.commandAutocomplete.badge.command": "comando",
@@ -1962,13 +2153,28 @@ export const dict: Record<I18nKey, string> = {
"chat.container.returnToParent.titleNamed": "Volver a: {title}",
"chat.container.returnToParent.title": "Volver a la sesión principal",
"chat.container.returnToParent.label": "Principal",
'chat.btw.destroyAria': 'Destruir esta sesión btw',
'chat.btw.titleFallback': 'sesión btw',
'chat.btw.mainComposerPlaceholder': 'Pregunta en esta sesión btw…',
'chat.btw.loading': 'Iniciando sesión btw…',
'chat.btw.toast.emptyArgument': 'Escribe una pregunta después de /btw',
'chat.btw.toast.createFailed': 'No se pudo iniciar la sesión btw',
'chat.btw.toast.destroyFailed': 'No se pudo destruir la sesión btw. Permanecerá en la barra lateral.',
'chat.btw.working': 'Trabajando…',
'chat.btw.collapseAria': 'Contraer el panel btw',
'chat.btw.expandAria': 'Expandir el panel btw',
'chat.btw.promoteAria': 'Conservar como sesión aparte',
'chat.btw.toast.promoteFailed': 'No se pudo conservar la sesión btw',
"chat.container.readOnlySubagentPromptBanner": "Las sesiones de subagentes no pueden recibir prompts.",
"chat.container.sessionLoadError.title": "No se pudo cargar la sesión",
"chat.container.sessionLoadError.description": "Comprueba la conexión e intenta cargar esta sesión de nuevo.",
"chat.container.sessionLoadError.description": "No se pudo obtener la conversación: puede que el servidor esté apagado o inaccesible. No se perdió nada; reintenta cuando vuelva.",
"chat.container.sessionLoadError.authDescription": "Tu sesión expiró, por lo que el servidor rechazó la solicitud. Inicia sesión y la conversación se cargará.",
"chat.container.sessionLoadError.retry": "Reintentar",
"sessions.sidebar.group.empty.loadingSessions": "Cargando sesiones…",
"sessions.sidebar.group.empty.loadFailed": "No se pudieron actualizar las sesiones.",
"sessions.sidebar.group.empty.retry": "Reintentar",
"sessions.sidebar.group.empty.permissionDenied": "Se requiere acceso a la carpeta.",
"sessions.sidebar.group.empty.grantAccess": "Permitir acceso",
"chat.unifiedControls.title": "Controles",
"chat.unifiedControls.model.title": "Modelo",
"chat.unifiedControls.model.noRecent": "No hay modelos recientes",
@@ -2000,12 +2206,13 @@ export const dict: Record<I18nKey, string> = {
"chat.textSelection.toast.addToNotesFailed": "No se pudo añadir a las notas",
"chat.textSelection.toast.addToNotesSuccess": "Texto seleccionado añadido a notas",
"chat.textSelection.toast.addToNotesSummaryFailed": "No se pudo resumir la selección; se añadió el texto seleccionado a las notas",
"chat.textSelection.actions.addToChat": "Añadir al chat",
"chat.textSelection.actions.newSession": "Nueva sesión",
"chat.textSelection.actions.copy": "Copiar",
"chat.textSelection.actions.addToInput": "Añadir a la entrada",
"chat.textSelection.actions.comment": "Comentar",
"chat.textSelection.title.commentOnSelection": "Comentar la selección",
"chat.textSelection.comment.placeholder": "Añade un comentario opcional...",
"chat.textSelection.comment.attach": "Adjuntar",
"chat.textSelection.actions.addToNotes": "Añadir a las notas",
"chat.textSelection.title.addToCurrentChat": "Añadir al chat actual",
"chat.textSelection.title.newSessionWithSelection": "Crear nueva sesión con selección",
"chat.textSelection.title.saveInsightToNotes": "Guardar texto seleccionado en notas",
"chat.messageBody.actions.revertAria": "Volver a este mensaje",
"chat.messageBody.actions.revert": "Volver desde aquí",
@@ -2089,6 +2296,7 @@ export const dict: Record<I18nKey, string> = {
"chat.chatInput.toast.attachmentsTooLarge": "Los adjuntos son demasiado grandes para enviar. Intenta reducir la cantidad o el tamaño de las imágenes.",
"chat.chatInput.toast.sendAttachmentsFailed": "No se pudieron enviar los adjuntos. Intenta con menos archivos o imágenes más pequeñas.",
"chat.chatInput.toast.messageSendFailed": "El mensaje no se pudo enviar. Los adjuntos se restauraron.",
"chat.chatInput.toast.noModelSelected": "Selecciona un proveedor y un modelo antes de enviar.",
"chat.chatInput.toast.clipboardAttachFailed": "No se pudo adjuntar la imagen desde el portapapeles",
"chat.chatInput.toast.clipboardTextAttachFailed": "No se pudo adjuntar el texto pegado como archivo",
"chat.chatInput.toast.largeTextPaste.title": "Texto grande detectado",
@@ -2104,8 +2312,6 @@ export const dict: Record<I18nKey, string> = {
"chat.chatInput.toast.togglePermissionAutoAcceptFailed": "No se pudo cambiar la aceptación automática de permisos",
"chat.chatInput.reviewComments": "Comentarios de revisión:",
"chat.chatInput.reviewCommentsRemove": "Quitar comentarios de revisión",
"chat.chatInput.devServerLogs": "Logs del Dev Server:",
"chat.chatInput.devServerLogsRemove": "Quitar logs del Dev Server",
"chat.chatInput.previewAnnotations": "Anotaciones de vista previa:",
"chat.chatInput.previewContext": "Contexto de vista previa:",
"chat.chatInput.previewContextRemove": "Quitar contexto de vista previa",
@@ -2144,6 +2350,7 @@ export const dict: Record<I18nKey, string> = {
"chat.toolPart.showRawJson": "Mostrar JSON sin formato",
"chat.toolPart.showFormattedJson": "Mostrar JSON formateado",
"chat.toolPart.showNavigableJson": "Mostrar JSON navegable",
"chat.toolPart.openFile": "Abrir archivo",
"chat.toolPart.openFileAtFirstChange": "Abrir archivo en el primer cambio",
"chat.toolPart.openFileDiff": "Abrir diferencias del archivo",
"chat.toolPart.copyOutput": "Copiar salida",
@@ -2275,6 +2482,15 @@ export const dict: Record<I18nKey, string> = {
"commandPalette.item.toggleSidebar": "Mostrar u ocultar barra lateral",
"commandPalette.item.showContextUsage": "Mostrar uso del contexto",
"commandPalette.item.toggleTerminal": "Mostrar u ocultar terminal",
"commandPalette.item.cycleTheme": "Cambiar tema",
"commandPalette.item.showOpenCodeStatus": "Mostrar estado de OpenCode",
"commandPalette.item.toggleMemoryDebug": "Alternar panel de depuración de memoria",
"commandPalette.item.pinSession": "Anclar o desanclar sesión",
"commandPalette.item.copySessionId": "Copiar ID de sesión",
"commandPalette.item.openMultiRun": "Abrir lanzador multi-run",
"commandPalette.item.openArchive": "Abrir sesiones archivadas",
"commandPalette.item.openNotes": "Abrir panel de notas",
"commandPalette.item.openTodos": "Abrir panel de tareas",
"commandPalette.item.openSettings": "Abrir configuración...",
"commandPalette.session.untitled": "Sesión sin título",
"openCodeStatusDialog.title": "Estado de OpenCode",
@@ -2489,6 +2705,9 @@ export const dict: Record<I18nKey, string> = {
"sessionAuth.error.passkeySignInCanceled": "El inicio de sesión con clave de paso se canceló.",
"sessionAuth.error.enterPasswordForPasskey": "Introduce tu contraseña para añadir una clave de paso.",
"sessionAuth.locked.tunnelTitle": "Se requiere acceso por túnel",
"sessionAuth.expired.banner": "Tu sesión expiró: inicia sesión para continuar.",
"sessionAuth.expired.loginAction": "Iniciar sesión",
"sessionAuth.expired.sendBlocked": "Sesión expirada: inicia sesión para enviar mensajes.",
"sessionAuth.locked.unlockTitle": "Desbloquear OpenChamber",
"sessionAuth.locked.tunnelDescription": "Abre este túnel usando el enlace de conexión única desde la aplicación de escritorio.",
"sessionAuth.locked.passwordDescription": "Esta sesión está protegida con contraseña.",
@@ -2771,6 +2990,10 @@ export const dict: Record<I18nKey, string> = {
"updateDialog.status.updating": "Actualizando...",
"updateDialog.error.updateFailed": "No se pudo actualizar",
"updateDialog.error.takingLonger": "La actualización está tardando más de lo esperado. Espera un poco y refresca, o ejecuta: openchamber update",
"updateDialog.error.signatureRejected": "La actualización descargada fue rechazada: su firma de código no coincide con esta instalación. Normalmente significa que la copia en ejecución no se instaló desde una versión oficial firmada. Instala OpenChamber desde una versión oficial y vuelve a actualizar.",
"updateDialog.error.updaterDisabled": "El actualizador se detuvo tras una instalación fallida. Cierra OpenChamber, ábrelo de nuevo y reintenta la actualización.",
"updateDialog.error.restartFailed": "No se pudo reiniciar para instalar la actualización.",
"updateDialog.error.restartUnavailable": "Instalar la actualización requiere la aplicación de escritorio de OpenChamber.",
"mobileUpdate.toast.available.title": "Actualización de OpenChamber disponible",
"mobileUpdate.toast.available.description": "La versión {version} está lista para Android.",
"mobileUpdate.toast.actions.download": "Descargar",
@@ -2791,6 +3014,7 @@ export const dict: Record<I18nKey, string> = {
"memoryDebugPanel.title": "Panel de depuración",
"memoryDebugPanel.tabs.memory": "Memoria",
"memoryDebugPanel.tabs.streaming": "Transmisión",
"memoryDebugPanel.tabs.requests": "Solicitudes",
"memoryDebugPanel.section.sessionsInMemory": "Sesiones en memoria",
"memoryDebugPanel.section.uiStreamingMetrics": "Métricas de streaming de UI",
"memoryDebugPanel.section.vscodeBridgeMetrics": "Métricas del puente de VS Code",
@@ -2828,6 +3052,16 @@ export const dict: Record<I18nKey, string> = {
"memoryDebugPanel.streaming.copy.copied": "JSON de depuración en streaming copiado",
"memoryDebugPanel.streaming.copy.failed": "No se pudo copiar JSON",
"memoryDebugPanel.streaming.copy.hint": "Copia exportaciones de métricas de UI como de métricas de VS Code en formato JSON",
"memoryDebugPanel.requests.inFlight": "En curso",
"memoryDebugPanel.requests.peak": "Pico",
"memoryDebugPanel.requests.duration": "Duración",
"memoryDebugPanel.requests.totalRequests": "Solicitudes totales",
"memoryDebugPanel.requests.tracking": "Seguimiento",
"memoryDebugPanel.requests.now": "ahora",
"memoryDebugPanel.requests.noSamples": "Aún no se han registrado solicitudes. Mantén este panel abierto para registrar la actividad de fetch.",
"memoryDebugPanel.requests.chartLabel": "Solicitudes fetch en curso a lo largo del tiempo, pico {peak}",
"memoryDebugPanel.requests.windowHint": "últimos {seconds}s",
"memoryDebugPanel.requests.percentileChartLabel": "Percentiles de antigüedad de solicitudes en curso (p50, p90, p99, máx) a lo largo del tiempo",
"memoryDebugPanel.common.idle": "inactivo",
"memoryDebugPanel.common.live": "en vivo",
"memoryDebugPanel.common.notAvailable": "n/a",
@@ -2900,18 +3134,23 @@ export const dict: Record<I18nKey, string> = {
"common.relative.daysAgoCompact": "{count}d ago",
"common.relative.weeksAgoCompact": "{count}w ago",
"common.relative.yearsAgoCompact": "{count}y ago",
"common.duration.secondsCompact": "{seconds}s",
"common.duration.minutesSecondsCompact": "{minutes}m {seconds}s",
"common.duration.hoursMinutesCompact": "{hours}h {minutes}m",
"contextFileOpen.failure.tooLarge": "File is too large to open (>{count} lines)",
"contextFileOpen.failure.missing": "File not found",
"contextFileOpen.failure.unreadable": "Failed to open file",
"quota.window.5h": "5-Hour",
"quota.window.7d": "7-Day Limit",
"quota.window.7dSonnet": "7-Day Sonnet Limit",
"quota.window.7dOpus": "7-Day Opus Limit",
"quota.window.weekly": "Weekly Limit",
"quota.window.extraUsage": "Uso adicional",
"quota.window.weekly": "Semanal",
"quota.window.daily": "Daily",
"quota.window.monthly": "Monthly Limit",
"quota.window.monthly": "Mensual",
"quota.window.credits": "Credits",
"quota.window.creditsBalance": "Credits Balance",
"quota.window.monthlyCredits": "Créditos mensuales",
"quota.window.purchasedCredits": "Créditos comprados",
"quota.window.freeCredits": "Créditos gratuitos",
"quota.window.billingCycle": "Billing Cycle",
"quota.window.auto": "Auto",
"quota.window.api": "API",
@@ -2921,5 +3160,104 @@ export const dict: Record<I18nKey, string> = {
"quota.window.premium": "Premium Interactions",
"quota.window.chat": "Chat Requests",
"quota.window.completions": "Completions",
"quota.window.premiumInteractions": "Premium interactions",
"quota.window.premiumInteractions": "Créditos de IA",
'chat.workStatus.ariaLabel': 'Estado del trabajo',
'chat.workStatus.context.label': 'Contexto',
'chat.workStatus.cost.breakdown': "Sesión {session} · Subagentes {subagents}",
'chat.workStatus.git.changedFileSingle': '{count} archivo modificado',
'chat.workStatus.git.changedFilePlural': '{count} archivos modificados',
'chat.workStatus.pr.untitled': 'Pull request sin título',
'chat.workStatus.pr.draft': 'Borrador',
'chat.workStatus.pr.checks': 'Comprobaciones',
'chat.workStatus.pr.checksFailed': '{count} fallaron',
'chat.workStatus.pr.checksPending': '{count} en curso',
'chat.workStatus.pr.checksPassed': '{count} correctas',
'chat.workStatus.attention.merge': 'Fusión en curso',
'chat.workStatus.attention.rebase': 'Rebase en curso',
'chat.workStatus.attention.cherryPick': 'Cherry-pick en curso',
'chat.workStatus.attention.revert': 'Reversión en curso',
'chat.workStatus.attention.bisect': 'Bisect en curso',
'chat.workStatus.subagent.done': 'Listo',
'chat.workStatus.subagent.untitled': 'Subagente',
'chat.workStatus.mcp.toggle': 'Alternar {name}',
'chat.workStatus.mcp.needsAuth': 'Iniciar sesión',
'chat.workStatus.mcp.failed': 'Falló',
'chat.workStatus.pinned.unavailable': 'Mensaje fijado',
'chat.workStatus.section.session': 'Sesión',
'chat.workStatus.section.project': 'Proyecto',
'chat.workStatus.section.subagents': 'Subagentes',
'chat.workStatus.section.mcp': 'MCP',
'chat.workStatus.section.pinned': 'Mensajes fijados',
'chat.workStatus.section.tasks': 'Tareas',
'chat.workStatus.subagent.working': 'está trabajando',
'chat.workStatus.subagent.needsPermission': 'necesita permiso',
'chat.workStatus.subagent.askedQuestion': 'hizo una pregunta',
'chat.workStatus.section.contextBreakdown': 'Fuentes de contexto',
'chat.workStatus.breakdown.skills': 'Habilidades',
'chat.workStatus.breakdown.pinnedNote': 'nota',
'chat.workStatus.breakdown.unpin': 'Dejar de fijar al contexto',
'chat.workStatus.breakdown.pinnedPlan': 'plan',
'chat.workStatus.breakdown.memory': 'Memoria del agente',
'chat.workStatus.breakdown.pinnedKnowledgeSingle': '{count} fijado',
'chat.workStatus.breakdown.pinnedKnowledgePlural': '{count} fijados',
'chat.workStatus.breakdown.mcp': 'Servidores MCP',
'chat.workStatus.action.openChanges': 'Abrir cambios',
'chat.workStatus.action.openGit': 'Abrir panel de Git',
'chat.workStatus.action.openPr': 'Abrir pull request',
'chat.workStatus.action.openSubagent': 'Abrir {name}',
'chat.workStatus.section.usage': 'Uso',
'chat.workStatus.goal.open': 'Gestionar objetivo',
'chat.workStatus.goal.pause': 'Pausar',
'chat.workStatus.goal.resume': 'Reanudar',
'chat.workStatus.goal.updateFailed': 'No se pudo actualizar el objetivo',
'chat.workStatus.pinned.unpin': 'Dejar de fijar',
'chat.workStatus.pinned.reveal': 'Ir al mensaje',
'chat.workStatus.pinned.unpinFailed': 'No se pudo dejar de fijar el mensaje',
'chat.workStatus.action.openContext': 'Abrir panel de contexto',
'chat.workStatus.section.linkedIssues': 'Vinculados',
'chat.workStatus.linkedIssues.open': 'Abrir #{number} en GitHub',
'chat.workStatus.linkedIssues.unlink': 'Quitar vínculo',
'chat.workStatus.linkedIssues.unlinkFailed': 'No se pudo quitar el vínculo',
'chat.workStatus.linkedIssues.link': 'Vincular a la sesión',
'chat.workStatus.linkedIssues.linkFailed': 'No se pudo vincular',
'chat.workStatus.breakdown.issueCountSingle': '{count} incidencia',
'chat.workStatus.breakdown.issueCountPlural': '{count} incidencias',
'chat.workStatus.breakdown.prCountSingle': '{count} PR',
'chat.workStatus.breakdown.prCountPlural': '{count} PR',
'chat.workStatus.breakdown.skillCountSingle': '{count} habilidad',
'chat.workStatus.breakdown.skillCountPlural': '{count} habilidades',
'chat.workStatus.breakdown.mcpCountSingle': '{count} MCP',
'chat.workStatus.breakdown.mcpCountPlural': '{count} MCP',
'chat.workStatus.sections.open': 'Elegir secciones',
'chat.workStatus.sections.dialogTitle': 'Secciones del panel',
'chat.workStatus.sections.dialogDescription': 'Elige qué muestra el panel de estado. Las secciones ocultas conservan sus datos: solo no aparecen en el panel.',
'chat.workStatus.sections.allHidden': 'Ninguna sección seleccionada',
'chat.workStatus.sections.showAll': 'Mostrar todas',
'chat.workStatus.sections.noneWarning': 'El panel aparecerá vacío.',
'header.workStatusPanel.toggleAria': 'Alternar panel de estado',
'header.workStatusPanel.hide': 'Ocultar estado del trabajo',
'header.workStatusPanel.show': 'Mostrar estado del trabajo',
'chat.workStatus.mcp.authorizeOpenFailed': 'No se pudo abrir la página de autorización',
'chat.workStatus.mcp.authorizeFailed': 'Error de autorización',
'mcpDropdown.toast.authorizeOpenFailed': 'No se pudo abrir la página de autorización',
'mcpDropdown.toast.authorizeFailed': 'Error de autorización',
'header.services.tooltip.currentInstance': 'Instancia actual: {current} ({toggle})',
'header.workStatusPanel.showOverlay': 'Mostrar estado sobre el chat',
'settings.mcp.page.connection.title': 'Cómo conectarse',
'settings.mcp.page.connection.description': 'Pega el comando que lo inicia o el enlace a un servidor alojado.',
'settings.mcp.page.registration.title': 'Este servidor necesita su propia app',
'settings.mcp.page.registration.description': 'No entrega credenciales automáticamente. Crea una app en los ajustes del servicio, pega sus datos aquí e inicia sesión.',
'settings.mcp.page.registration.callbackLabel': 'Da esta dirección al servicio',
'settings.mcp.page.registration.clientId': 'ID de la app',
'settings.mcp.page.registration.clientSecret': 'Secreto de la app',
'settings.mcp.page.registration.afterSaving': 'Guarda y luego pulsa Autorizar.',
'settings.mcp.page.toast.copiedCallbackUrl': 'Dirección copiada',
'settings.mcp.page.toast.clipboardWriteFailed': 'No se pudo copiar al portapapeles',
'settings.mcp.page.scope.everywhere': 'Disponible en todos los proyectos',
'settings.mcp.page.scope.thisProject': 'Solo en este proyecto',
'settings.mcp.page.env.description': 'Valores que el servidor necesita, como una clave de API.',
'settings.mcp.page.connection.kindCommand': 'Comando',
'settings.mcp.page.connection.kindLink': 'Enlace',
'settings.mcp.page.connection.hintCommand': 'Se ejecuta en este equipo. Pega un comando completo y se dividirá en un argumento por línea.',
'settings.mcp.page.connection.hintLink': 'Se conecta a un servidor alojado por otra persona. Pega su dirección https.',
};
+166 -43
View File
@@ -1,8 +1,10 @@
import { thirdPartyIntegrationI18n } from './third-party-integrations.i18n';
export const settingsDict = {
'settings.providers.page.openCodeGo.title': 'Suivi de l’utilisation d’OpenCode Go',
'settings.providers.page.openCodeGo.description': 'Connectez le tableau de bord OpenCode Go pour afficher les quotas glissant, hebdomadaire et mensuel.',
'settings.providers.page.openCodeGo.workspaceId': 'ID de l’espace de travail',
'settings.providers.page.openCodeGo.authCookie': 'Cookie d’authentification',
'settings.providers.page.openCodeGo.apiKey': 'Clé API',
'settings.providers.page.openCodeGo.help': 'Copiez l’ID depuis l’URL du tableau de bord et le cookie auth depuis les outils du navigateur. OpenChamber n’analyse jamais les cookies du navigateur.',
'settings.providers.page.openCodeGo.save': 'Enregistrer et valider',
'settings.providers.page.openCodeGo.replace': 'Remplacer',
@@ -40,7 +42,20 @@ export const settingsDict = {
'settings.view.badge.beta': 'bêta',
'settings.view.actions.reloadOpenCode': 'Recharger OpenCode',
'settings.view.actions.reloadOpenCodeTooltip': 'Redémarrez OpenCode et rechargez sa configuration.',
'settings.view.actions.backToSettings': 'Retour aux paramètres',
'settings.view.actions.applyAndRestartOpenCode': 'Appliquer et redémarrer',
'settings.view.actions.applyAndRestartOpenCodeTooltipSingle': 'Appliquer 1 modification de configuration en attente et redémarrer OpenCode.',
'settings.view.actions.applyAndRestartOpenCodeTooltipPlural': 'Appliquer {count} modifications de configuration en attente et redémarrer OpenCode.',
'settings.view.pendingRestart.applying': 'Redémarrage…',
'settings.view.pendingRestart.applied': 'OpenCode a redémarré avec les modifications de configuration en attente.',
'settings.view.pendingRestart.applyFailed': 'Échec de l\'application des modifications de configuration.',
'settings.view.pendingRestart.manualRestartRequired': 'Enregistré sur le disque. Redémarrez le serveur OpenCode connecté pour appliquer les modifications.',
'settings.view.pendingRestart.saved': 'Enregistré. Redémarrez OpenCode pour appliquer.',
'settings.view.pendingRestart.confirm.title': 'Appliquer et redémarrer ?',
'settings.view.pendingRestart.confirm.description': 'Le redémarrage d\'OpenCode arrêtera tous les chats en cours. Vos modifications de configuration enregistrées prendront effet après le redémarrage.',
'settings.view.pendingRestart.confirm.dontShowAgain': 'Ne plus afficher',
'settings.view.pendingRestart.confirm.cancel': 'Annuler', 'settings.view.actions.backToSettings': 'Retour aux paramètres',
'settings.view.actions.closeSettings': 'Fermer les paramètres',
'settings.view.actions.openSectionList': 'Ouvrir la liste des sections',
'settings.view.actions.closeSettingsWithShortcut': 'Fermer les paramètres ({shortcut}+,)',
@@ -282,14 +297,14 @@ export const settingsDict = {
'settings.remoteInstances.page.field.modePlaceholder': 'Sélectionnez le mode',
'settings.remoteInstances.page.field.modeManaged': 'Géré (démarrage automatique)',
'settings.remoteInstances.page.field.modeExternal': 'Externe (déjà en cours d\'exécution)',
'settings.remoteInstances.page.field.preferredRemotePort': 'Port distant préféré',
'settings.remoteInstances.page.field.preferredRemotePortHint': 'Le port OpenChamber doit être utilisé sur l\'hôte distant. Laissez vide pour laisser le runtime choisir.',
'settings.remoteInstances.page.field.preferredRemotePort': 'Port sur la machine distante',
'settings.remoteInstances.page.field.preferredRemotePortHint': 'Port utilisé par OpenChamber sur la machine distante. Laissez vide pour en choisir un automatiquement.',
'settings.remoteInstances.page.field.keepServerRunning': 'Maintenir le serveur en marche',
'settings.remoteInstances.page.field.keepServerRunningHint': 'S\'il est activé, le démon OpenChamber continue de s\'exécuter à distance lorsque vous vous déconnectez.',
'settings.remoteInstances.page.field.bindHost': 'Lier l\'hôte',
'settings.remoteInstances.page.field.bindHostHint': 'Interface réseau pour l’URL locale principale. Utilisez 127.0.0.1/localhost pour un accès uniquement local.',
'settings.remoteInstances.page.field.preferredLocalPort': 'Port local préféré',
'settings.remoteInstances.page.field.preferredLocalPortHint': 'Port local préféré pour le tunnel principal OpenChamber. Laissez vide pour la sélection automatique.',
'settings.remoteInstances.page.field.keepServerRunningHint': 'Laisser le serveur distant tourner après la déconnexion. Désactivé, il est arrêté à la déconnexion puis redémarré à la connexion suivante.',
'settings.remoteInstances.page.field.bindHost': 'Accessible depuis',
'settings.remoteInstances.page.field.bindHostHint': 'Qui peut ouvrir l’adresse redirigée sur cet ordinateur. La machine distante reste de toute façon accessible uniquement par le tunnel SSH.',
'settings.remoteInstances.page.field.preferredLocalPort': 'Port sur cet ordinateur',
'settings.remoteInstances.page.field.preferredLocalPortHint': 'Port ouvert sur cet ordinateur pour le tunnel. Laissez vide pour en choisir un automatiquement.',
'settings.remoteInstances.page.field.forwardType': 'Type de transfert',
'settings.remoteInstances.page.field.localHostPlaceholder': '127.0.0.1',
'settings.remoteInstances.page.field.remoteHostPlaceholder': '127.0.0.1',
@@ -309,6 +324,10 @@ export const settingsDict = {
'settings.common.actions.cancel': 'Annuler',
'settings.common.actions.create': 'Créer',
'settings.common.actions.delete': 'Supprimer',
'settings.openchamber.appLinks.title': 'Liens d’application approuvés',
'settings.openchamber.appLinks.info': 'Les liens de cette liste s’ouvrent sans nouvelle demande sur cet appareil. Les autres liens d’application demandent toujours une confirmation.',
'settings.openchamber.appLinks.empty': 'Aucun lien d’application approuvé sur cet appareil. Choisissez « Approuver et ouvrir » lors de l’ouverture d’un lien pour l’ajouter ici.',
'settings.openchamber.appLinks.removeAria': 'Supprimer les liens {scheme} approuvés',
'settings.common.actions.reset': 'Réinitialiser',
'settings.common.actions.rename': 'Rebaptiser',
'settings.common.actions.duplicate': 'Dupliquer',
@@ -768,16 +787,26 @@ export const settingsDict = {
'settings.skills.catalog.page.mode.manual': 'Manuel',
'settings.skills.catalog.page.mode.external': 'Externe',
'settings.skills.catalog.page.title': 'Catalogue de skills',
'settings.skills.catalog.page.subtitle': "Installez des skills prêts à l'emploi depuis des dépôts curatés ou ajoutez votre propre source.",
'settings.skills.catalog.page.section.sources': 'Sources',
'settings.skills.catalog.page.searchAllPlaceholder': 'Rechercher des skills dans toutes les sources…',
'settings.skills.catalog.page.search.clear': 'Effacer la recherche',
'settings.skills.catalog.page.source.skillsCount': 'Skills : {count}',
'settings.skills.catalog.page.source.stars': 'Étoiles : {count}',
'settings.skills.catalog.page.source.updated': 'Mis à jour {time}',
'settings.skills.catalog.page.source.addOwnTitle': 'Ajouter votre propre source',
'settings.skills.catalog.page.source.addOwnDescription': "N'importe quel dépôt Git avec des skills",
'settings.skills.catalog.page.source.viewRepo': 'Ouvrir le dépôt sur GitHub',
'settings.skills.catalog.page.skill.viewOnGithub': 'Voir le skill sur GitHub',
'settings.skills.catalog.page.list.searchTitle': 'Résultats de recherche',
'settings.skills.catalog.page.section.sourceRepository': 'Dépôt source',
'settings.skills.catalog.page.field.selectSourcePlaceholder': 'Sélectionnez la source',
'settings.skills.catalog.page.actions.refreshTitle': 'Rafraîchir',
'settings.skills.catalog.page.actions.removeCatalogTitle': 'Supprimer le catalogue',
'settings.skills.catalog.page.actions.addCatalog': 'Ajouter un catalogue',
'settings.skills.catalog.page.actions.removeCatalog': 'Supprimer le catalogue',
'settings.skills.catalog.page.actions.loadMoreSkills': 'Charger plus de skills',
'settings.skills.catalog.page.loading.catalog': 'Chargement...',
'settings.skills.catalog.page.loading.skills': 'Chargement des skills...',
'settings.skills.catalog.page.loading.more': 'Chargement...',
'settings.skills.catalog.page.foundCount': '{count} skill(s) trouvé(s)',
'settings.skills.catalog.page.error.catalogTitle': 'Erreur de catalogue',
'settings.skills.catalog.page.empty.noSkillsTitle': 'Aucun skill trouvé',
@@ -785,7 +814,6 @@ export const settingsDict = {
'settings.skills.catalog.page.badge.installed': 'installé ({scope})',
'settings.skills.catalog.page.badge.notInstallable': 'non installable',
'settings.skills.catalog.page.badge.unknown': 'inconnu',
'settings.skills.catalog.page.byOwnerPrefix': 'par',
'settings.skills.catalog.page.removeDialog.title': 'Supprimer le catalogue',
'settings.skills.catalog.page.removeDialog.description': 'Êtes-vous sûr de vouloir supprimer ce catalogue ?',
'settings.openchamber.passkeys.title': 'Mots-clés',
@@ -848,9 +876,9 @@ export const settingsDict = {
'settings.openchamber.desktopNetwork.field.macMenuBarAria': 'Afficher OpenChamber dans la barre des menus macOS',
'settings.openchamber.desktopNetwork.field.macMenuBar': 'Afficher OpenChamber dans la barre des menus',
'settings.openchamber.desktopNetwork.field.macMenuBarDescription': 'Nécessite un redémarrage de l\'application. Lorsque cette option est désactivée, OpenChamber ne crée pas l\'élément de barre des menus et n\'exécute pas ses mises à jour de sessions, d\'approbations et d\'utilisation.',
'settings.openchamber.desktopNetwork.field.minimizeToTrayAria': 'Réduire et fermer OpenChamber dans la zone de notification',
'settings.openchamber.desktopNetwork.field.minimizeToTray': 'Réduire et fermer dans la zone de notification',
'settings.openchamber.desktopNetwork.field.minimizeToTrayDescription': 'Garde OpenChamber actif dans la zone de notification lorsque la fenêtre principale est réduite ou fermée.',
'settings.openchamber.desktopNetwork.field.minimizeToTrayAria': 'Fermer OpenChamber dans la zone de notification',
'settings.openchamber.desktopNetwork.field.minimizeToTray': 'Fermer dans la zone de notification',
'settings.openchamber.desktopNetwork.field.minimizeToTrayDescription': 'Garde OpenChamber actif dans la zone de notification lorsque la fenêtre principale est fermée. La réduction laisse la fenêtre dans la barre des tâches.',
'settings.openchamber.desktopNetwork.field.keepAwakeAria': 'Garder l\'ordinateur éveillé pendant qu\'OpenChamber fonctionne',
'settings.openchamber.desktopNetwork.field.keepAwake': 'Garder l\'ordinateur éveillé pendant qu\'OpenChamber fonctionne',
'settings.openchamber.desktopNetwork.field.keepAwakeDescription': 'Pour que les téléphones puissent continuer à ouvrir cette application. L\'écran peut toujours s\'éteindre.',
@@ -877,15 +905,22 @@ export const settingsDict = {
'settings.openchamber.desktopNetwork.error.keepAwakeUnsupported': 'La prévention de la veille n\'est pas prise en charge sur ce système',
'settings.openchamber.desktopNetwork.error.keepAwakeSaveFailed': 'Échec de la mise à jour du paramètre de maintien en éveil',
'settings.openchamber.opencodeCli.title': 'OpenCode CLI',
'settings.openchamber.tools.title': 'Outils OpenChamber',
'settings.openchamber.tools.field.agentControlTool': 'Outil de contrôle pour les agents',
'settings.openchamber.tools.field.agentControlToolAria': 'Activer l’outil de contrôle pour les agents',
'settings.openchamber.tools.field.agentControlToolInfo': 'Laissez les agents orchestrer votre travail depuis le chat : créer des sessions et des worktrees, déléguer des prompts à d’autres agents et gérer les tâches planifiées. Ajoute une courte description d’outil à chaque session. Appliqué après le redémarrage d’OpenCode.',
'settings.openchamber.tools.field.agentWebTool': 'Outil OpenChamber Web',
'settings.openchamber.tools.field.agentWebToolAria': 'Activer l’outil OpenChamber Web',
'settings.openchamber.tools.field.agentWebToolInfo': 'Laissez les agents consulter la page dans le panneau navigateur d’OpenChamber et interagir avec elle : ouvrir une URL, lire le contenu, cliquer, saisir du texte, faire défiler et basculer entre les mises en page mobile et bureau. Ajoute une courte description d’outil à chaque session. Appliqué après le redémarrage d’OpenCode.',
'settings.openchamber.tools.field.agentMemoryTool': 'Outil de mémoire de l’agent',
'settings.openchamber.tools.field.agentMemoryToolAria': 'Outil de mémoire de l’agent',
'settings.openchamber.tools.field.agentMemoryToolInfo': 'Permet aux agents de conserver ce qu’ils apprennent d’une session à l’autre, dans deux stockages : ce qui est vrai à votre sujet et ce qui est vrai pour chaque projet. Les sessions reçoivent les titres enregistrés afin que l’agent puisse lire une entrée pertinente. La désactivation retire l’outil, l’onglet Mémoire et l’index de session. Appliqué après le redémarrage d’OpenCode.',
'settings.openchamber.opencodeCli.tooltipPrefix': 'Chemin absolu facultatif vers le',
'settings.openchamber.opencodeCli.tooltipSuffix': 'binaire.',
'settings.openchamber.opencodeCli.field.binaryPath': 'Chemin binaire OpenCode',
'settings.openchamber.opencodeCli.field.binaryPathPlaceholder': '/Users/you/.bun/bin/opencode',
'settings.openchamber.opencodeCli.field.showUpdateNotifications': 'Afficher les notifications de mise à jour de OpenCode',
'settings.openchamber.opencodeCli.field.showUpdateNotificationsAria': 'Afficher les notifications de mise à jour de OpenCode',
'settings.openchamber.opencodeCli.field.agentControlTool': 'Outil de contrôle pour les agents',
'settings.openchamber.opencodeCli.field.agentControlToolAria': 'Activer l’outil de contrôle pour les agents',
'settings.openchamber.opencodeCli.field.agentControlToolInfo': 'Laissez les agents orchestrer votre travail depuis le chat : créer des sessions et des worktrees, déléguer des prompts à d’autres agents et gérer les tâches planifiées. Ajoute une courte description d’outil à chaque session. Appliqué après Save + Reload.',
'settings.openchamber.opencodeCli.actions.browseAria': 'Rechercher le chemin binaire OpenCode',
'settings.openchamber.opencodeCli.actions.browse': 'Parcourir',
'settings.openchamber.opencodeCli.actions.saveAndReload': 'Enregistrer + Recharger',
@@ -984,7 +1019,7 @@ export const settingsDict = {
'settings.openchamber.keyboardShortcuts.overwritePrompt': 'Ce combo est déjà utilisé par un autre raccourci. Écraser et effacer cet autre mappage ?',
'settings.openchamber.keyboardShortcuts.field.pressKeys': 'Appuyez sur les touches...',
'settings.openchamber.keyboardShortcuts.error.captureFirst': 'Capturez d\'abord un raccourci.',
'settings.openchamber.keyboardShortcuts.warning.riskyBrowserShortcut': 'Ce raccourci peut entrer en conflit avec les paramètres par défaut du navigateur. Il est toujours sauvegardé.',
'settings.openchamber.keyboardShortcuts.warning.riskyBrowserShortcut': 'Ce raccourci peut entrer en conflit avec les paramètres par défaut du navigateur. Vous pouvez tout de même l’enregistrer.',
'settings.openchamber.keyboardShortcuts.action.open_go_to_line.label': 'Aller à la ligne (éditeur de fichiers)',
'settings.openchamber.keyboardShortcuts.action.open_command_palette.label': 'Ouvrir la palette de commandes',
'settings.openchamber.keyboardShortcuts.action.focus_input.label': 'Entrée de mise au point',
@@ -993,16 +1028,20 @@ export const settingsDict = {
'settings.openchamber.keyboardShortcuts.action.toggle_terminal_expanded.label': 'Terminal à bascule étendu',
'settings.openchamber.keyboardShortcuts.action.add_selection_to_chat.label': 'Ajouter la sélection au chat',
'settings.openchamber.keyboardShortcuts.action.toggle_sidebar.label': 'Basculer la barre latérale',
'settings.openchamber.keyboardShortcuts.action.toggle_right_sidebar.label': 'Afficher/masquer le panneau de contexte',
'settings.openchamber.keyboardShortcuts.action.open_right_sidebar_git.label': 'Ouvrir la surface Git',
'settings.openchamber.keyboardShortcuts.action.open_right_sidebar_files.label': 'Ouvrir la surface Fichiers',
'settings.openchamber.keyboardShortcuts.action.switch_session_tab.label': 'Basculer l’onglet de session',
'settings.openchamber.keyboardShortcuts.action.switch_session_tab.suffix': ' + 1…9',
'settings.openchamber.keyboardShortcuts.action.switch_context_surface.label': 'Basculer la surface du panneau contextuel',
'settings.openchamber.keyboardShortcuts.action.switch_context_surface.suffix': ' + 1…0',
'settings.openchamber.keyboardShortcuts.action.new_chat.label': 'Nouvelle session',
'settings.openchamber.keyboardShortcuts.action.switch_session_previous.label': 'Session précédente',
'settings.openchamber.keyboardShortcuts.action.switch_session_next.label': 'Session suivante',
'settings.openchamber.keyboardShortcuts.action.rename_current_session.label': 'Renommer la session actuelle',
'settings.openchamber.keyboardShortcuts.action.toggle_permission_auto_accept.label': 'Basculer l’approbation automatique',
'settings.openchamber.keyboardShortcuts.action.close_session_tab.label': 'Fermer l’onglet de session',
'settings.openchamber.keyboardShortcuts.action.new_chat_worktree.label': 'Nouvelle ébauche d\'worktree',
'settings.openchamber.keyboardShortcuts.action.new_mini_chat.label': 'Nouvelle fenêtre de mini-chat',
'settings.openchamber.keyboardShortcuts.action.open_help.label': 'Ouvrir les raccourcis clavier',
'settings.openchamber.keyboardShortcuts.action.toggle_context_plan.label': 'Basculer le panneau contextuel du plan',
'settings.openchamber.keyboardShortcuts.action.toggle_services_menu.label': 'Basculer le menu des services',
'settings.openchamber.keyboardShortcuts.action.cycle_services_tab.label': 'Onglet Services vélo',
'settings.openchamber.keyboardShortcuts.action.cycle_theme.label': 'Thème du cycle',
'settings.openchamber.keyboardShortcuts.action.cycle_agent.label': 'Agent de cycle',
'settings.openchamber.keyboardShortcuts.action.cycle_favorite_model_forward.label': 'Faire avancer le modèle favori',
@@ -1011,15 +1050,39 @@ export const settingsDict = {
'settings.openchamber.keyboardShortcuts.action.expand_input.label': 'Développer l\'entrée',
'settings.openchamber.keyboardShortcuts.action.open_timeline_dialog.label': 'Chronologie de la conversation ouverte',
'settings.openchamber.keyboardShortcuts.action.toggle_prompt_navigator.label': 'Afficher ou masquer le navigateur de prompts',
'settings.openchamber.keyboardShortcuts.warning.contextualPrefix': 'Cette séquence partage un préfixe contextuel avec {action}. Lorsque son contexte est actif, cette action est prioritaire.',
'settings.openchamber.keyboardShortcuts.category.session': 'Commandes de session',
'settings.openchamber.keyboardShortcuts.category.models': 'Modèles et agents',
'settings.openchamber.keyboardShortcuts.category.panels': 'Panneaux et outils',
'settings.openchamber.keyboardShortcuts.category.navigation': 'Navigation',
'settings.openchamber.keyboardShortcuts.category.application': 'Application',
'settings.openchamber.keyboardShortcuts.actions.edit': 'Modifier',
'settings.openchamber.keyboardShortcuts.actions.confirm': 'Confirmer',
'settings.openchamber.keyboardShortcuts.dialog.title': 'Modifier {action}',
'settings.openchamber.keyboardShortcuts.dialog.instructions': 'Appuyez sur deux combinaisons de touches au maximum, avec trois touches au plus chacune. Après la première, attendez jusqu’à 3 secondes une seconde combinaison. Utilisez Confirmer pour appliquer ou Annuler pour abandonner. Retour arrière supprime la dernière.',
'settings.openchamber.keyboardShortcuts.dialog.firstChord': 'Première combinaison',
'settings.openchamber.keyboardShortcuts.dialog.secondChord': 'Deuxième combinaison',
'settings.openchamber.keyboardShortcuts.dialog.recording': 'Appuyez sur les touches…',
'settings.openchamber.keyboardShortcuts.unassigned': 'Non attribué',
'settings.openchamber.keyboardShortcuts.error.prefixConflict': 'Cela entre en conflit avec la séquence utilisée par {action}. Choisissez une autre combinaison.',
'settings.openchamber.keyboardShortcuts.error.exactConflict': 'Cette combinaison est déjà utilisée par {action}.',
'settings.openchamber.keyboardShortcuts.error.internalConflict': 'Cette combinaison entre en conflit avec un raccourci intégré qui ne peut pas être remplacé.',
'settings.openchamber.keyboardShortcuts.action.open_draft_project_picker.label': 'Ouvrir le sélecteur de projet de brouillon',
'settings.openchamber.keyboardShortcuts.action.open_draft_worktree_picker.label': 'Ouvrir le sélecteur de worktree de brouillon',
'settings.openchamber.keyboardShortcuts.action.open_session_list.label': 'Ouvrir les sessions récentes',
'settings.openchamber.keyboardShortcuts.action.toggle_dictation.label': 'Saisie vocale',
'settings.projects.sidebar.total': 'Total {count}',
'settings.projects.sidebar.actions.addProject': 'Ajouter un projet',
'settings.projects.page.empty.noProjects': 'Aucun projet disponible.',
'settings.projects.page.title.default': 'Paramètres du projet',
'settings.projects.page.section.worktree': 'Worktree',
'settings.projects.page.field.projectName': 'Nom du projet',
'settings.projects.page.field.projectModel': 'Modèle du projet',
'settings.projects.page.field.projectThinking': 'Réflexion du projet',
'settings.projects.page.section.chatDefaults': 'Valeurs par défaut des nouveaux chats',
'settings.projects.page.section.chatDefaultsDescription': 'Utilisées au démarrage d’un nouveau chat dans ce projet. À défaut, les valeurs globales s’appliquent. La réflexion n’apparaît que pour les modèles qui proposent des niveaux.',
'settings.projects.page.field.projectNamePlaceholder': 'Nom du projet',
'settings.projects.page.field.defaultModel': 'Modèle par défaut pour les nouveaux chats',
'settings.projects.page.field.defaultModelDescription': 'Utilisé lors du démarrage d\'un nouveau chat dans ce projet. Revient aux valeurs globales si non défini.',
'settings.projects.page.option.thinkingDefault': 'Celui du modèle',
'settings.projects.page.field.accentColor': 'Couleur d\'accentuation',
'settings.projects.page.field.projectIcon': 'Icône du projet',
'settings.projects.page.field.projectIconBackgroundAria': 'Couleur d’arrière-plan de l’icône du projet',
@@ -1053,15 +1116,15 @@ export const settingsDict = {
'settings.usage.sidebar.field.displayModePlaceholder': 'Mode d\'affichage',
'settings.usage.sidebar.field.displayModeUsage': 'Usage',
'settings.usage.sidebar.field.displayModeRemaining': 'Quota restant',
'settings.usage.sidebar.field.showPredictions': 'Afficher les prédictions',
'settings.usage.sidebar.status.notSet': 'Non défini',
'settings.usage.page.empty.selectProvider': 'Sélectionnez un fournisseur pour afficher les détails d\'utilisation.',
'settings.usage.page.header.providerUsage': 'Utilisation de {provider}',
'settings.usage.page.header.refreshing': 'Utilisation rafraîchissante...',
'settings.usage.page.header.lastUpdated': 'Dernière mise à jour : {time}',
'settings.usage.page.options.showInHeaderAria': 'Afficher dans le menu d\'en-tête',
'settings.usage.page.options.showInHeader': 'Afficher dans le menu d\'en-tête',
'settings.usage.page.options.showInHeaderTooltip': 'Lorsqu\'elle est activée, l\'utilisation de ce fournisseur sera visible dans le menu déroulant d\'accès rapide dans l\'en-tête de l\'application.',
'settings.usage.page.header.lastUpdatedWithPlan': 'Forfait : {plan} · Dernière mise à jour : {time}',
'settings.usage.page.options.showInWorkStatusAria': 'Afficher dans le panneau d’état du travail',
'settings.usage.page.options.showInWorkStatus': 'Afficher dans le panneau d’état du travail',
'settings.usage.page.options.showInWorkStatusTooltip': 'Lorsqu’elle est activée, l’utilisation de ce fournisseur sera visible dans le panneau d’état du travail.',
'settings.usage.page.state.noData': 'Aucune donnée d\'utilisation disponible pour l\'instant.',
'settings.usage.page.state.refreshFailedTitle': 'Échec de l\'actualisation des données d\'utilisation',
'settings.usage.page.state.providerNotConfiguredTitle': 'Fournisseur non configuré',
@@ -1088,8 +1151,8 @@ export const settingsDict = {
'settings.remoteInstances.page.section.actionsDescription': 'Connectez-vous, reconnectez-vous, inspectez les journaux ou supprimez cette instance.',
'settings.remoteInstances.page.section.remoteServer': 'Serveur distant',
'settings.remoteInstances.page.section.remoteServerDescription': 'Comment OpenChamber est géré et démarré sur l\'hôte distant.',
'settings.remoteInstances.page.section.mainTunnel': 'Tunnel principal',
'settings.remoteInstances.page.section.mainTunnelDescription': 'Point de terminaison local principal pour cette instance distante.',
'settings.remoteInstances.page.section.mainTunnel': 'Accès depuis cet ordinateur',
'settings.remoteInstances.page.section.mainTunnelDescription': 'OpenChamber tourne sur la machine distante. Ces réglages ne concernent que l’adresse, sur cet ordinateur, qui y mène via le tunnel SSH.',
'settings.remoteInstances.page.section.authentication': 'Authentification',
'settings.remoteInstances.page.section.authenticationDescription': 'Informations d\'identification facultatives pour SSH et l\'interface utilisateur distante OpenChamber.',
'settings.remoteInstances.page.section.portForwards': 'Transferts de ports',
@@ -1102,8 +1165,6 @@ export const settingsDict = {
'settings.remoteInstances.page.field.installMethod': 'Méthode d\'installation',
'settings.remoteInstances.page.field.installMethodHint': 'Comment OpenChamber est installé lors de l’exécution en mode géré.',
'settings.remoteInstances.page.field.selectInstallMethodPlaceholder': 'Sélectionnez la méthode d\'installation',
'settings.remoteInstances.page.field.installMethodDownloadRelease': 'Télécharger la version',
'settings.remoteInstances.page.field.installMethodUploadBundle': 'Télécharger le lot',
'settings.remoteInstances.page.field.selectBindHostPlaceholder': 'Sélectionnez l\'hôte de liaison',
'settings.remoteInstances.page.field.sshPasswordOptional': 'Mot de passe SSH (facultatif)',
'settings.remoteInstances.page.field.sshPasswordPlaceholder': 'Entrez le mot de passe SSH',
@@ -1127,7 +1188,44 @@ export const settingsDict = {
'settings.remoteInstances.page.actions.enableForwardAria': 'Activer le transfert',
'settings.remoteInstances.page.actions.openLocal': 'Ouvrir localement',
'settings.remoteInstances.page.actions.addForward': 'Ajouter en avant',
'settings.remoteInstances.page.import.sectionTitle': 'Importer depuis la configuration SSH',
'settings.remoteInstances.page.addDialog.description': 'Choisissez un hôte dans votre configuration SSH ou saisissez la connexion vous-même.',
'settings.remoteInstances.page.addDialog.sourceLabel': 'D\'où vient la connexion',
'settings.remoteInstances.page.addDialog.tab.saved': 'Depuis la configuration SSH',
'settings.remoteInstances.page.addDialog.tab.manual': 'Saisir moi-même',
'settings.remoteInstances.page.addDialog.searchPlaceholder': 'Rechercher des hôtes',
'settings.remoteInstances.page.addDialog.emptySaved': 'Aucun hôte trouvé dans votre configuration SSH. Saisissez plutôt la connexion vous-même.',
'settings.remoteInstances.page.addDialog.searchEmpty': 'Aucun hôte ne correspond à cette recherche.',
'settings.remoteInstances.page.addDialog.use': 'Utiliser',
'settings.remoteInstances.page.state.notConnected': 'Non connecté',
'settings.remoteInstances.page.state.connecting': 'Connexion en cours',
'settings.remoteInstances.page.state.ready': 'Connecté',
'settings.remoteInstances.page.state.problem': 'Action requise',
'settings.remoteInstances.page.section.advanced': 'Paramètres avancés',
'settings.remoteInstances.page.section.advancedHint': 'Ports, méthode d’installation, mots de passe et redirections supplémentaires. Les valeurs par défaut conviennent à la plupart des connexions.',
'settings.remoteInstances.page.field.installMethodAuto': 'Automatique',
'settings.remoteInstances.page.error.hint.noRuntime': 'La machine distante n’a ni bun ni npm. Installez-en un là-bas, ou basculez cette connexion sur « Déjà en cours d’exécution ».',
'settings.remoteInstances.page.error.hint.noOpencode': 'La CLI opencode n’est pas installée sur la machine distante. Installez-la là-bas (voir opencode.ai), puis reconnectez-vous.',
'settings.remoteInstances.page.error.action.setUiPassword': 'Définir le mot de passe de l’interface',
'settings.remoteInstances.page.error.action.pickRandomPort': 'Utiliser un autre port local',
'settings.remoteInstances.page.error.action.setRemotePort': 'Définir le port distant',
'settings.remoteInstances.page.validation.externalPortRequired': 'Indiquez d’abord un port distant. En mode « Déjà en cours d’exécution », OpenChamber doit savoir sur quel port le serveur écoute.',
'settings.remoteInstances.page.empty.noInstances': 'Aucune connexion SSH pour le moment.',
'settings.remoteInstances.page.field.uiPasswordRequired': 'Mot de passe d’interface (obligatoire)',
'settings.remoteInstances.page.field.uiPasswordMissingForLan': 'Obligatoire tant que le serveur distant est accessible sur son réseau.',
'settings.remoteInstances.page.field.remoteLanAccess': 'Accessible sur le réseau distant',
'settings.remoteInstances.page.field.remoteLanAccessHint': 'Autoriser aussi les autres appareils du réseau de la machine distante à ouvrir cet OpenChamber directement, sans le tunnel SSH. Un mot de passe d’interface est obligatoire.',
'settings.remoteInstances.page.field.remoteLanAccessWarning': 'N’importe qui sur ce réseau peut atteindre l’OpenChamber distant. Seul le mot de passe d’interface ci-dessous le protège.',
'settings.remoteInstances.page.validation.remoteLanNeedsPassword': 'Définissez d’abord un mot de passe d’interface. Sans lui, l’OpenChamber distant serait ouvert à tous les appareils de ce réseau.',
'settings.remoteInstances.page.field.bindHostOption.loopback': 'Cet ordinateur seulement (127.0.0.1)',
'settings.remoteInstances.page.field.bindHostOption.localhost': 'Cet ordinateur seulement (localhost)',
'settings.remoteInstances.page.field.bindHostOption.lan': 'Tout appareil de mon réseau (0.0.0.0)',
'settings.remoteInstances.page.field.sshPasswordHint': 'Nécessaire uniquement si cet hôte demande un mot de passe au lieu d’accepter une clé SSH.',
'settings.remoteInstances.page.field.uiPasswordHintManaged': 'Mot de passe qui protégera l’interface OpenChamber distante. OpenChamber l’applique au serveur qu’il démarre pour vous.',
'settings.remoteInstances.page.field.uiPasswordHintExternal': 'Mot de passe du serveur OpenChamber déjà en cours d’exécution sur la machine distante, utilisé pour s’y connecter.',
'settings.remoteInstances.page.tunnelPreview.caption': 'Cette connexion redirige :',
'settings.remoteInstances.page.empty.noInstancesWithOneImport': 'Aucune connexion SSH pour le moment. 1 hôte peut être importé depuis votre configuration SSH.',
'settings.remoteInstances.page.empty.noInstancesWithImports': 'Aucune connexion SSH pour le moment. {count} hôtes peuvent être importés depuis votre configuration SSH.',
'settings.remoteInstances.page.state.loadingInstances': 'Chargement des connexions...',
'settings.remoteInstances.page.import.loading': 'Chargement des hôtes SSH...',
'settings.remoteInstances.page.import.noneFound': 'Aucun hôte SSH trouvé.',
'settings.remoteInstances.page.import.noneAvailable': 'Aucun hôte SSH disponible pour l\'importation.',
@@ -1225,13 +1323,18 @@ export const settingsDict = {
'settings.providers.page.custom.title': 'Fournisseur personnalisé',
'settings.providers.page.custom.editTitle': 'Modifier le fournisseur personnalisé',
'settings.providers.page.custom.description': 'Ajoutez un fournisseur compatible OpenAI avec une URL de base, des identifiants et une liste de modèles. Enregistré dans la configuration OpenCode pour l’utiliser dans le chat comme les autres fournisseurs.',
'settings.providers.page.custom.description': 'Ajoutez un fournisseur avec une URL de base, des identifiants, une liste de modèles et un protocole API pris en charge. Enregistré dans la configuration OpenCode pour le chat.',
'settings.providers.page.custom.field.providerID.label': 'ID du fournisseur',
'settings.providers.page.custom.field.providerID.placeholder': 'mon-fournisseur',
'settings.providers.page.custom.field.providerID.info': 'Minuscules, chiffres, tirets et underscores. Utilisé comme ID de fournisseur OpenCode.',
'settings.providers.page.custom.field.name.label': 'Nom affiché',
'settings.providers.page.custom.field.name.placeholder': 'Mon fournisseur',
'settings.providers.page.custom.field.name.info': 'Affiché dans les sélecteurs de fournisseur et de modèle.',
'settings.providers.page.custom.field.protocol.label': 'Protocole API',
'settings.providers.page.custom.field.protocol.info': 'Choisissez le format de requête implémenté par cette API.',
'settings.providers.page.custom.field.protocol.openaiChat': 'OpenAI Chat Completions',
'settings.providers.page.custom.field.protocol.openaiResponses': 'OpenAI Responses',
'settings.providers.page.custom.field.protocol.anthropicMessages': 'Anthropic Messages',
'settings.providers.page.custom.field.baseURL.label': 'URL de base',
'settings.providers.page.custom.field.baseURL.placeholder': 'https://api.example.com/v1',
'settings.providers.page.custom.field.baseURL.info': 'URL de base de l’API compatible OpenAI. Doit commencer par http:// ou https://.',
@@ -1280,6 +1383,17 @@ export const settingsDict = {
'settings.providers.page.auth.apiKeyPlaceholder': 'sk-...',
'settings.providers.page.auth.oauthMethodFallback': 'Méthode OAuth {index}',
'settings.providers.page.auth.pasteAuthorizationCodePlaceholder': 'Coller le code d\'autorisation',
'settings.providers.page.auth.oauth.starting': 'Démarrage de l’autorisation…',
'settings.providers.page.auth.oauth.waiting': 'En attente de l’autorisation…',
'settings.providers.page.auth.oauth.waitingHint': 'Terminez la connexion dans votre navigateur. Laissez cette page ouverte : la connexion se finalisera d’elle-même.',
'settings.providers.page.auth.oauth.codeHint': 'Copiez le code d’autorisation depuis votre navigateur et collez-le ici.',
'settings.providers.page.auth.oauth.deviceCodeLabel': 'Code de l’appareil',
'settings.providers.page.auth.oauth.linkLabel': 'Lien d’autorisation',
'settings.providers.page.auth.oauth.promptRequired': 'Renseignez « {field} » pour continuer',
'settings.providers.page.auth.oauth.error.sessionExpired': 'La demande d’autorisation a expiré. Reconnectez-vous pour la relancer.',
'settings.providers.page.auth.oauth.error.codeRequired': 'Ce fournisseur a besoin du code d’autorisation de votre navigateur.',
'settings.providers.page.auth.oauth.error.declined': 'L’autorisation a été refusée ou n’a pas abouti.',
'settings.providers.page.auth.oauth.error.invalidInput': 'Les informations saisies ont été refusées.',
'settings.providers.page.auth.connected': 'Connecté',
'settings.providers.page.auth.incomplete': 'Identifiants manquants',
'settings.providers.page.auth.incompleteHint': '· Ajoutez une clé API ou {env:VAR} avant d’utiliser ce fournisseur dans le chat',
@@ -1312,6 +1426,9 @@ export const settingsDict = {
'settings.providers.page.actions.open': 'Ouvrir',
'settings.providers.page.actions.copy': 'Copie',
'settings.providers.page.actions.complete': 'Complet',
'settings.providers.page.actions.continue': 'Continuer',
'settings.providers.page.actions.cancel': 'Annuler',
'settings.providers.page.actions.tryAgain': 'Réessayer',
'settings.providers.page.actions.hide': 'Cacher',
'settings.providers.page.actions.reconnect': 'Reconnecter',
'settings.providers.page.actions.edit': 'Modifier',
@@ -1327,7 +1444,6 @@ export const settingsDict = {
'settings.providers.page.toast.apiKeySaved': 'Clé API enregistrée',
'settings.providers.page.toast.oauthStartFailed': 'Échec du démarrage du flux OAuth',
'settings.providers.page.toast.oauthDetailsMissing': 'Aucun détail OAuth renvoyé',
'settings.providers.page.toast.completeOAuthInBrowser': 'Complétez le flux OAuth dans votre navigateur',
'settings.providers.page.toast.oauthCompleteFailed': 'Échec de la réalisation du flux OAuth',
'settings.providers.page.toast.oauthCompleted': 'Connexion OAuth terminée',
'settings.providers.page.toast.oauthLinkCopied': 'Lien OAuth copié',
@@ -1349,6 +1465,8 @@ export const settingsDict = {
'settings.mcp.page.status.label.failed': 'Échoué',
'settings.mcp.page.status.label.needsAuth': 'Nécessite une authentification',
'settings.mcp.page.status.label.needsRegistration': 'Nécessite une inscription',
'settings.mcp.page.status.label.awaitingRestart': 'En attente de redémarrage',
'settings.mcp.page.status.description.awaitingRestart': 'Ce serveur est enregistré mais pas encore appliqué. Utilisez « Apply & Restart » pour le charger dans OpenCode — la connexion et l\'autorisation seront ensuite disponibles.',
'settings.mcp.page.status.description.connected': 'Connecté et prêt pour OpenCode pour découvrir des outils et des ressources.',
'settings.mcp.page.status.description.failedDefault': 'OpenCode n\'a pas pu atteindre ce serveur MCP.',
'settings.mcp.page.status.description.needsAuth': 'Ce serveur MCP distant nécessite une autorisation avant de pouvoir se connecter.',
@@ -1725,6 +1843,10 @@ export const settingsDict = {
'settings.openchamber.visual.section.showToolsOpenedByDefault': 'Afficher les outils ouverts par défaut',
'settings.openchamber.visual.section.sessionAssistance': 'Assistance de session',
'settings.openchamber.visual.section.reasoning': 'Raisonnement',
'settings.openchamber.visual.section.streaming': 'Streaming',
'settings.openchamber.visual.field.streamingAutoFollow': 'Suivre le nouveau contenu pendant le streaming',
'settings.openchamber.visual.field.streamingAutoFollowAria': 'Suivre automatiquement le nouveau contenu pendant la diffusion d’une réponse',
'settings.openchamber.visual.field.streamingAutoFollowInfo': 'Pendant qu’une réponse arrive, la vue glisse vers le contenu le plus récent. Désactivez pour garder la vue immobile et défiler manuellement ; envoyer un message depuis le milieu de la conversation laisse alors aussi la vue en place.',
'settings.openchamber.visual.section.messageAppearance': 'Apparence des messages',
'settings.openchamber.visual.section.toolsAndFiles': 'Outils et fichiers',
'settings.openchamber.visual.section.composer': 'Zone de saisie',
@@ -1787,6 +1909,10 @@ export const settingsDict = {
'settings.openchamber.visual.actions.resetInputBarOffsetAria': 'Réinitialiser le décalage de la barre d\'entrée',
'settings.openchamber.visual.field.terminalQuickKeysAria': 'Touches rapides du terminal',
'settings.openchamber.visual.field.terminalQuickKeys': 'Touches rapides du terminal',
'settings.openchamber.visual.field.sessionTabsGroup': 'Onglets de session',
'settings.openchamber.visual.field.sessionTabs': 'Afficher les sessions sous forme d\'onglets dans l\'en-tête',
'settings.openchamber.visual.field.sessionTabsAria': 'Basculer les onglets de session dans l\'en-tête',
'settings.openchamber.visual.field.sessionTabsInfo': 'Les sessions ouvertes s\'alignent en onglets dans l\'en-tête. Désactivé, l\'en-tête n\'affiche que le titre de la session.',
'settings.openchamber.visual.field.terminalQuickKeysTooltip': 'Afficher Esc, Ctrl, Flèches dans la vue du terminal',
'settings.openchamber.visual.field.activityDefaultModeAria': 'Mode d\'activité par défaut : {option}',
'settings.openchamber.visual.field.showExpandedBashToolsAria': 'Afficher les outils bash étendus',
@@ -1816,8 +1942,6 @@ export const settingsDict = {
'settings.openchamber.visual.field.stickyUserHeader': 'En-tête utilisateur collant',
'settings.openchamber.visual.field.promptNavigatorEnabledAria': 'Navigateur de prompts',
'settings.openchamber.visual.field.promptNavigatorEnabled': 'Navigateur de prompts',
'settings.openchamber.visual.field.expandedEditorToolbarAria': 'Toujours afficher la barre d’outils de l’éditeur',
'settings.openchamber.visual.field.expandedEditorToolbar': 'Toujours afficher la barre d’outils de l’éditeur (ancrée sous les onglets de fichiers)',
'settings.openchamber.visual.field.autoSaveEnabledAria': 'Enregistrement automatique des fichiers',
'settings.openchamber.visual.field.autoSaveEnabled': 'Enregistrement automatique des fichiers',
'settings.openchamber.visual.field.autoSaveEnabledInfo': 'Enregistre automatiquement les modifications après l’arrêt de la saisie. Désactivez pour exiger un enregistrement manuel.',
@@ -2051,16 +2175,14 @@ export const settingsDict = {
'settings.remoteInstances.relay.toast.offerFailed': 'Échec de la création du lien d’association',
'settings.remoteInstances.relay.toast.linkCopied': 'Lien d’association copié',
'settings.openchamber.about.field.openCodeVersion': 'Version d’OpenCode',
'settings.openchamber.about.field.instanceUrls': 'URLs de l’instance',
'settings.openchamber.about.field.applicationUrl': 'Application',
'settings.openchamber.about.field.tunnelUrl': 'Tunnel',
'settings.openchamber.about.state.unknown': 'inconnue',
'settings.voice.page.field.ttsInputMode': 'Mode d’entrée TTS',
'settings.voice.page.field.ttsInputModeSanitized': 'Nettoyé',
'settings.voice.page.field.ttsInputModeRaw': 'Markdown brut',
'settings.voice.page.field.ttsInputModeSummarized': 'résumé',
'settings.openchamber.visual.section.mobileLayout': 'Mise en page mobile',
'settings.openchamber.visual.option.mobileLayout.default': 'Ancienne',
'settings.openchamber.visual.option.mobileLayout.new': 'Nouvelle',
'settings.openchamber.visual.field.macVibrancy': 'Transparence de la fenêtre',
'settings.openchamber.visual.field.macVibrancyHint': 'Utiliser le flou macOS natif (vibrancy) derrière la barre latérale. Désactivez cette option pour des surfaces entièrement opaques.',
'settings.openchamber.visual.field.dockBadge': 'Badge du Dock',
'settings.openchamber.visual.field.dockBadgeHint': 'Afficher sur l’icône du Dock de macOS le nombre de discussions avec une activité non vue.',
'settings.openchamber.visual.actions.saveAndRestart': 'Enregistrer et redémarrer',
@@ -2105,4 +2227,5 @@ export const settingsDict = {
'settings.openchamber.visual.field.followUpBehaviorDescription': 'Choose what happens when you press Enter on a follow-up message while the agent is still responding.',
'settings.openchamber.visual.option.followUpBehavior.steer.label': 'Steer',
'settings.openchamber.visual.option.followUpBehavior.queue.label': 'Queue',
...thirdPartyIntegrationI18n.fr,
} as const;
+377 -41
View File
@@ -5,6 +5,19 @@ export const dict = {
'terminalView.actions.attachSelection': 'Joindre la sortie sélectionnée',
'terminalView.actions.restart': 'Redémarrer le terminal',
'chat.message.terminalContext': '{terminal}, lignes {start}-{end}',
'chat.message.context.codeComment': 'Commentaire sur {file}, lignes {start}-{end}',
'chat.message.context.codeCommentLine': 'Commentaire sur {file}, ligne {line}',
'chat.message.context.chatQuote': 'Citation d’un message précédent',
'chat.message.context.fileQuote': 'Sélection de {file}',
'chat.chatInput.chatQuoteContext': 'Citations du chat',
'chat.chatInput.chatQuoteContextRemove': 'Supprimer les citations du chat',
'chat.chatInput.contextPreview.selectedLabel': 'Texte sélectionné',
'chat.chatInput.contextPreview.commentLabel': 'Commentaire de l’utilisateur',
'chat.chatInput.contextPreview.edit': 'Modifier le commentaire',
'chat.chatInput.contextPreview.remove': 'Supprimer',
'chat.message.context.browserAnnotation': 'Annotation du navigateur ({page})',
'chat.message.context.prComment': 'Commentaire de PR GitHub ({label})',
'chat.message.context.prCheck': 'Vérification de PR GitHub échouée ({label})',
'chat.chatInput.terminalContext': '{terminal}, lignes {start}-{end}',
'chat.chatInput.terminalContextRemove': 'Supprimer le contexte du terminal',
'chat.chatInput.prCommentContext': 'Commentaires de PR',
@@ -24,6 +37,7 @@ export const dict = {
'common.language.korean': 'Coréen',
'common.language.polish': 'Polonais',
'common.language.japanese': 'Japonais',
'common.language.turkish': 'Turc',
'common.revealPath.finder': 'Révéler dans le Finder',
'common.revealPath.fileExplorer': 'Ouvrir dans l\'explorateur de fichiers',
'common.revealPath.fileManager': 'Ouvrir dans le gestionnaire de fichiers',
@@ -68,8 +82,10 @@ export const dict = {
'sessions.scheduledTasks.dialog.toast.deleted': 'Tâche planifiée supprimée',
'sessions.scheduledTasks.dialog.toast.deleteFailed': 'Échec de la suppression de la tâche',
'sessions.scheduledTasks.dialog.toast.started': 'Tâche démarrée',
'sessions.scheduledTasks.dialog.toast.startedPersistWarning': 'Tâche démarrée, mais son statut n’a pas pu être enregistré. Elle peut encore apparaître comme en cours jusqu’à la prochaine exécution réussie.',
'sessions.scheduledTasks.dialog.toast.runFailed': 'Échec de l\'exécution de la tâche',
'sessions.scheduledTasks.dialog.confirm.deleteTask': 'Supprimer la tâche planifiée « {taskName} » ?',
'sessions.scheduledTasks.dialog.confirm.deleteLoopFile': 'Supprimer la tâche en boucle « {taskName} » et son fichier Markdown ?',
'sessions.scheduledTasks.dialog.schedule.daily': 'Quotidien {time}',
'sessions.scheduledTasks.dialog.schedule.dailyWithTimezone': 'Quotidien {time} ({timezone})',
'sessions.scheduledTasks.dialog.schedule.weekly': 'Hebdomadaire {days} {time}',
@@ -105,6 +121,9 @@ export const dict = {
'sessions.scheduledTasks.dialog.taskToggle.pauseAria': 'Pause {taskName}',
'sessions.scheduledTasks.dialog.taskToggle.enabled': 'Activé',
'sessions.scheduledTasks.dialog.taskToggle.paused': 'En pause',
'sessions.scheduledTasks.dialog.loopFile.note': 'Gérée par le fichier de boucle {file}',
'sessions.scheduledTasks.dialog.loopFile.toggleDisabled': "L'activation est contrôlée par le fichier de boucle ; définissez enabled dans le frontmatter Markdown",
'sessions.scheduledTasks.dialog.loopFile.actionsDisabled': 'Les tâches de boucle sont configurées dans leur fichier Markdown .agents/loops',
'sessions.scheduledTasks.editor.title.edit': 'Modifier une tâche planifiée',
'sessions.scheduledTasks.editor.title.new': 'Nouvelle tâche planifiée',
'sessions.scheduledTasks.editor.description': 'Configurez une tâche côté serveur qui crée une nouvelle session et envoie un prompt.',
@@ -197,7 +216,7 @@ export const dict = {
'multirun.launcher.attachments.attach': 'Attacher',
'multirun.launcher.attachments.tooltip': 'Mêmes fichiers envoyés à toutes les exécutions',
'multirun.launcher.models.label': 'Modèles',
'multirun.launcher.models.info': 'Sélectionnez les modèles 2-{max}. Le même modèle peut être ajouté plusieurs fois.',
'multirun.launcher.models.info': 'Sélectionnez 2 modèles ou plus. Le même modèle peut être ajouté plusieurs fois.',
'multirun.launcher.toast.fileTooLarge': 'Le fichier "{fileName}" est trop volumineux (max 10 Mo)',
'multirun.launcher.toast.attachFailed': 'Échec de la connexion de "{fileName}"',
'multirun.launcher.toast.attachedSingle': 'Fichier {count} joint',
@@ -263,9 +282,16 @@ export const dict = {
'sessions.sidebar.empty.noMatches.title': 'Aucune session correspondante',
'sessions.sidebar.empty.noMatches.description': 'Essayez un autre titre, branche, dossier ou chemin.',
'sessions.sidebar.activity.recentTitle': 'récent',
'sessions.sidebar.activity.chatsTitle': 'discussions',
'sessions.sidebar.activity.chatsEmpty': 'Aucune discussion pour le moment.',
'chat.chatInput.chooseProject': 'Choisir un projet',
'sessions.archivePage.allDirectories': 'Tous les répertoires',
'sessions.sidebar.header.displayMode.stickyHeaders': 'Épingler les en-têtes de projet',
'sessions.sidebar.header.grouping.label': 'Regrouper les sessions',
'sessions.sidebar.header.projectDisplay.label': 'Afficher les projets',
'sessions.sidebar.header.projectDisplay.all': 'Tous les projets',
'sessions.sidebar.header.projectDisplay.single': 'Un projet',
'sessions.sidebar.project.selectAria': 'Sélectionner un projet, actuellement {project}',
'sessions.sidebar.header.grouping.byWorktree': 'Par worktree',
'sessions.sidebar.header.grouping.flat': 'Liste plate',
'sessions.sidebar.project.actions.manageWorktrees': 'Gérer les worktrees',
@@ -287,6 +313,10 @@ export const dict = {
'sessions.archivePage.deleteSessionAria': 'Supprimer {title}',
'sessions.archivePage.restoreSessionAria': 'Restaurer {title}',
'sessions.switcher.openAria': 'Sélecteur de session ouvert',
'header.sessionTabs.stripAria': 'Sessions ouvertes',
'header.sessionTabs.tabMenuAria': 'Actions de l\'onglet de session',
'header.sessionTabs.closeTab': 'Fermer l\'onglet',
'header.sessionTabs.closeOtherTabs': 'Fermer les autres onglets',
'sessions.switcher.empty': 'Aucune session récente',
'sessions.switcher.draftTitle': 'Nouvelle session',
'sessions.sidebar.updateCheck.errorTitle': 'Échec de la vérification des mises à jour',
@@ -338,11 +368,33 @@ export const dict = {
'sessions.sidebar.session.menu.unshare': 'Annuler le partage',
'sessions.sidebar.session.menu.exportMarkdown': 'Exporter le Markdown',
'sessions.sidebar.session.menu.moveToWorktree': 'Déplacer vers un nouveau worktree',
'sessions.sidebar.session.menu.moveToWorktreeTargets': 'Déplacer vers un worktree',
'sessions.sidebar.session.menu.newWorktree': 'Nouveau worktree...',
'sessions.sidebar.session.moveToWorktree.success': 'Session déplacée vers un nouveau worktree',
'sessions.sidebar.session.moveToWorktree.failed': 'Impossible de déplacer la session vers un nouveau worktree',
'sessions.sidebar.session.moveToWorktree.tooltip': 'Crée un nouveau worktree depuis la branche actuelle, transfère les modifications non validées et y déplace cette session et ses sous-sessions.',
'sessions.sidebar.session.moveToWorktree.main': 'Worktree principal',
'sessions.sidebar.session.moveToWorktree.refreshing': 'Actualisation des worktrees...',
'sessions.sidebar.session.moveToWorktree.loadFailed': 'Impossible de charger les worktrees',
'sessions.sidebar.session.moveToWorktree.current': 'Worktree actuel',
'sessions.sidebar.session.moveToWorktree.existingSuccess': 'Session déplacée vers le worktree',
'sessions.sidebar.session.moveToWorktree.existingFailed': 'Impossible de déplacer la session vers le worktree',
'sessions.sidebar.session.moveToWorktree.tooltipTargets': 'Affiche les worktrees existants et l’option d’en créer un nouveau pour cette session.',
'sessions.sidebar.session.moveToWorktree.tooltip': 'Crée un nouveau worktree depuis la branche actuelle et y déplace cette session et ses sous-sessions. Si la source contient des modifications non validées, vous choisissez de les transférer ou non.',
'sessions.sidebar.session.moveToWorktree.tooltipBusy': 'Disponible lorsque la session est inactive. Arrêtez l’activité en cours ou attendez sa fin.',
'sessions.sidebar.session.moveToWorktree.tooltipMoving': 'Cette session est déjà en cours de déplacement vers un nouveau worktree.',
'sessions.sidebar.session.moveToWorktree.confirm.title': 'La source contient des modifications non validées',
'sessions.sidebar.session.moveToWorktree.confirm.changedFiles': 'Fichiers modifiés dans ce worktree : {count}.',
'sessions.sidebar.session.moveToWorktree.confirm.ownership': 'OpenCode suit ces modifications par répertoire, pas par session.',
'sessions.sidebar.session.moveToWorktree.confirm.sessionOnlyHelp': 'Déplace cette session et ses sous-sessions en laissant chaque fichier source inchangé.',
'sessions.sidebar.session.moveToWorktree.confirm.allChangesHelp': 'Transfère les modifications du répertoire de la session. Les fichiers non indexés et non suivis quittent la source après succès.',
'sessions.sidebar.session.moveToWorktree.confirm.stagedWarning': 'Les modifications indexées restent dans la source et sont copiées vers la destination.',
'sessions.sidebar.session.moveToWorktree.confirm.baseWarning': 'Le transfert peut échouer si la destination utilise une base Git différente.',
'sessions.sidebar.session.moveToWorktree.confirm.sessionOnly': 'Déplacer la session uniquement',
'sessions.sidebar.session.moveToWorktree.confirm.allChanges': 'Déplacer toutes les modifications de la source',
'sessions.sidebar.session.moveToWorktree.confirm.cancel': 'Annuler',
'sessions.sidebar.session.moveToWorktree.sourceVerificationFailed': 'Les modifications de la source n’ont pas pu être vérifiées. Aucun worktree ni session n’a été modifié.',
'sessions.sidebar.session.moveToWorktree.applyChangesFailed': 'La destination n’a pas pu accepter les modifications de la source. La session et les modifications n’ont pas été déplacées. Réessayez et choisissez Déplacer la session uniquement.',
'sessions.sidebar.session.moveToWorktree.changesMayBeInDestination': 'La connexion a été perdue avant que la destination ne confirme le déplacement. La session n’a peut-être pas été déplacée, et vos modifications non validées se trouvent peut-être déjà dans le worktree de destination. Vérifiez-le avant de réessayer.',
'sessions.sidebar.session.menu.runFusion': 'Exécuter la fusion',
'sessions.sidebar.session.menu.openInSidePanel': 'Ouvrir dans le panneau latéral',
'sessions.sidebar.session.actions.openInEditor': 'Ouvrir dans l\'éditeur',
@@ -366,6 +418,10 @@ export const dict = {
'sessions.sidebar.session.status.pinned': 'Session épinglée',
'sessions.sidebar.session.status.movingToWorktree': 'Déplacement de la session vers un nouveau worktree',
'sessions.sidebar.session.status.permissionRequired': 'Autorisation requise',
'sessions.sidebar.session.status.questionPendingSingle': '1 question en attente',
'sessions.sidebar.session.status.questionPendingMany': '{count} questions en attente',
'sessions.sidebar.session.status.activeFor': 'Active depuis {duration}',
'sessions.sidebar.session.status.lastTurnDuration': 'Le dernier tour a duré {duration}',
'sessions.sidebar.session.subsessions.collapse': 'Réduire les sous-sessions',
'sessions.sidebar.session.subsessions.expand': 'Développer les sous-sessions',
'sessions.sidebar.dialogs.deleteSession.title': 'Supprimer la session ?',
@@ -808,6 +864,8 @@ export const dict = {
'gitView.pr.field.draft': 'Brouillon',
'gitView.pr.field.title': 'Titre',
'gitView.pr.githubNotConnected': 'GitHub n\'est pas connecté',
'gitView.pr.history.merged': 'La PR #{number} a été fusionnée dans {base}.',
'gitView.pr.history.closed': 'La PR #{number} a été fermée.',
'gitView.pr.loadingDescription': 'Chargement de la description de la PR...',
'gitView.pr.mergeMethod.merge': 'Créer un commit de fusion',
'gitView.pr.mergeMethod.rebase': 'Rebase et fusionner',
@@ -924,11 +982,20 @@ export const dict = {
'contextPanel.mode.context': 'Contexte',
'contextPanel.mode.preview': 'Aperçu',
'contextPanel.mode.browser': 'Navigateur',
'contextRail.configure.open': 'Configurer les panneaux',
'contextRail.configure.dialogTitle': 'Panneaux de la barre',
'contextRail.configure.dialogDescription': 'Choisissez les panneaux affichés par la barre. Les panneaux masqués conservent leurs données et restent accessibles via la palette de commandes.',
'contextRail.configure.showAll': 'Tout afficher',
'contextRail.configure.noneWarning': 'Tous les panneaux sont masqués.',
'contextRail.aria.rail': 'Surfaces du panneau',
'contextPanel.editorEmpty.title': 'Aucun fichier ouvert',
'contextPanel.editorEmpty.description': 'Choisissez un fichier dans l’arborescence pour commencer.',
'contextRail.surface.editor.description': 'Modifier les fichiers du projet',
'contextRail.surface.git.description': 'Commits, branches et pull requests',
'contextRail.surface.git.changesCountAriaSingle': '{label}, {count} fichier modifié',
'contextRail.surface.git.changesCountAriaPlural': '{label}, {count} fichiers modifiés',
'contextRail.surface.git.changesCountTooltipSingle': '{count} fichier modifié',
'contextRail.surface.git.changesCountTooltipPlural': '{count} fichiers modifiés',
'contextRail.surface.terminal.description': 'Terminal intégré',
'contextRail.surface.diff.description': 'Passer en revue les modifications',
'contextPanel.mode.walkthrough': 'Parcours',
@@ -968,8 +1035,11 @@ export const dict = {
'walkthrough.toc.moreFiles': 'Autres fichiers : {count}',
'walkthrough.toc.uncovered': 'Non traité : {count}',
'walkthrough.toc.resize': 'Redimensionner la colonne du sommaire',
'walkthrough.importance.critical': 'Critique',
'walkthrough.importance.critical': 'Changement clé',
'walkthrough.importance.criticalHint': "Cette étape porte l'essentiel du changement, lisez-la attentivement. Ce n'est pas un problème détecté dans votre code.",
'walkthrough.importance.context': 'Contexte',
'walkthrough.importance.contextHint': 'Un changement de soutien, présent pour que le reste ait du sens.',
'walkthrough.help.guide': 'Comment fonctionnent les walkthroughs',
'walkthrough.blocked.noModel.title': 'Aucun petit modèle disponible',
'walkthrough.blocked.noModel.description': 'Connectez-vous à un fournisseur de modèles pour générer une revue.',
'walkthrough.blocked.emptyDiff.title': 'Rien à examiner',
@@ -984,19 +1054,24 @@ export const dict = {
'walkthrough.blocked.outputExhausted.descriptionUnknownModel': 'Le petit modèle a dépensé toute sa marge de sortie en raisonnement et n’a rien renvoyé. Les modèles de raisonnement le font souvent sur de gros diffs : essayez un modèle qui réfléchit moins, ou une portée plus étroite.',
'walkthrough.blocked.onlyGenerated.title': 'Seuls des fichiers générés ont changé',
'walkthrough.blocked.onlyGenerated.description': 'Toutes les modifications concernent des fichiers de verrouillage ou d’autres sorties générées, que la revue ignore délibérément.',
'walkthrough.blocked.serverUnsupported.title': 'Ce serveur ne prend pas en charge les walkthroughs',
'walkthrough.blocked.serverUnsupported.description': "Le serveur OpenChamber auquel cette application est connectée n'a pas répondu à l'API walkthrough : il est donc plus ancien que l'application. Mettez le serveur à jour en 1.18 ou plus récent, puis actualisez.",
'walkthrough.blocked.contextTooSmall.descriptionUnknownModel': 'Le petit modèle accepte environ {available} k caractères et ce diff en demande environ {required} k. Rien n’est tronqué : choisissez un modèle au contexte plus large.',
'walkthrough.blocked.structuredOutput.descriptionUnknownModel': 'Le petit modèle ne prend pas en charge les réponses structurées nécessaires à un parcours.',
'contextRail.surface.plan.description': 'Voir le plan actuel',
'contextRail.surface.pr.description': 'Créer, relire et fusionner la pull request de la branche actuelle',
'contextRail.surface.notes.description': 'Notes, tâches et plans du projet',
'contextRail.surface.notes.description': 'Notes, tâches, plans et mémoire de l’agent pour le projet',
'contextRail.surface.context.description': 'Contexte de session et utilisation des tokens',
'contextRail.surface.browser.description': 'Navigateur web intégré',
'contextRail.surface.preview.description': 'Aperçu du serveur de développement',
'contextRail.surface.chat.description': 'Session ouverte côte à côte',
'contextRail.surface.notes': 'Notes du projet',
'contextRail.surface.notes': 'Connaissances du projet',
'contextRail.editorTree.toggle': 'Afficher/masquer l’arborescence de fichiers',
'contextPanel.browser.open': 'Ouvrir le panneau du navigateur',
'contextPanel.browser.addressAria': 'Adresse du navigateur',
'contextPanel.browser.history.label': 'Adresses récentes',
'contextPanel.browser.history.forget': 'Retirer de l’historique',
'contextPanel.browser.newTab': 'Nouvel onglet du navigateur',
'contextPanel.browser.empty': 'Navigateur Internet',
'contextPanel.browser.emptyHint': 'Entrez une adresse ci-dessus pour commencer à naviguer sur le Web',
'contextPanel.tab.closeTabAria': 'Fermer l\'onglet {label}',
@@ -1066,6 +1141,14 @@ export const dict = {
'sidebarFilesTree.toast.writeNotSupported': 'Écriture non prise en charge',
'sidebarFilesTree.toast.fileCreated': 'Fichier créé',
'sidebarFilesTree.toast.operationFailed': 'L\'opération a échoué',
'sidebarFilesTree.toast.uploaded': 'Fichiers téléversés',
'sidebarFilesTree.toast.uploadedWithoutConflicts': 'Les fichiers sans conflit ont été téléversés',
'sidebarFilesTree.toast.uploadFailed': 'Certains fichiers n’ont pas pu être téléversés',
'sidebarFilesTree.drop.target': 'Téléverser dans {path}',
'sidebarFilesTree.drop.uploading': 'Téléversement des fichiers dans {path}',
'sidebarFilesTree.dialog.uploadConflicts.title': 'Remplacer les fichiers existants ?',
'sidebarFilesTree.dialog.uploadConflicts.description': 'Des fichiers portant ces noms existent déjà dans {path}. Leur remplacement est irréversible.',
'sidebarFilesTree.dialog.uploadConflicts.replace': 'Remplacer',
'sidebarFilesTree.toast.folderNameRequired': 'Le nom du dossier est requis',
'sidebarFilesTree.toast.folderCreated': 'Dossier créé',
'sidebarFilesTree.toast.nameRequired': 'Le nom est requis',
@@ -1122,6 +1205,12 @@ export const dict = {
'filesView.editor.disableLineWrap': 'Désactiver le retour à la ligne',
'filesView.editor.enableLineWrap': 'Activer le retour à la ligne',
'filesView.editor.findInFile': 'Rechercher dans le fichier',
'filesView.preview.find.placeholder': 'Rechercher dans l\'aperçu',
'filesView.preview.find.nextAria': 'Correspondance suivante',
'filesView.preview.find.previousAria': 'Correspondance précédente',
'filesView.preview.find.closeAria': 'Fermer la recherche',
'filesView.preview.find.noMatches': 'Aucune correspondance',
'filesView.preview.find.countAria': '{current} sur {total}',
'filesView.editor.goToLine': 'Aller à la ligne',
'filesView.editor.switchToEditMode': 'Passer en mode édition',
'filesView.editor.switchToPreviewMode': 'Passer en mode aperçu',
@@ -1171,10 +1260,12 @@ export const dict = {
'contextUsage.mobile.usedTokens': 'Jetons utilisés',
'contextUsage.mobile.contextLimit': 'Limite de contexte',
'contextUsage.mobile.outputLimit': 'Limite de sortie',
'contextUsage.mobile.cost': 'Coût',
'contextUsage.mobile.usage': 'Usage',
'contextUsage.tooltip.usedTokens': 'Jetons utilisés : {tokens}',
'contextUsage.tooltip.contextLimit': 'Limite de contexte : {tokens}',
'contextUsage.tooltip.outputLimit': 'Limite de sortie : {tokens}',
'contextUsage.tooltip.cost': 'Coût : {cost}',
'contextSidebar.session.untitled': 'Session sans titre',
'contextSidebar.empty.openSession': 'Ouvrez une session pour inspecter le contexte.',
'contextSidebar.section.context': 'Contexte',
@@ -1201,6 +1292,7 @@ export const dict = {
'planView.file.defaultName': 'plan',
'planView.title.default': 'Plan',
'planView.error.saveFailed': 'Échec de l\'enregistrement',
'planView.error.loadFailed': 'Impossible de charger ce plan',
'planView.error.previewUnavailable': 'Aperçu indisponible',
'planView.error.switchToEditMode': 'Passez en mode édition pour résoudre le problème.',
'planView.error.writeFailed': 'Échec de l\'écriture',
@@ -1242,6 +1334,13 @@ export const dict = {
"diffView.scope.changed": "Modifiés",
"diffView.scope.staged": "Staged",
"diffView.scope.lastTurn": "Dernier tour",
"diffView.scope.branch": "Branche",
"diffView.branch.resolvingBase": "Détection de la branche de base...",
"diffView.branch.noBaseTitle": "Aucune branche de base",
"diffView.branch.noBaseDescription": "Git ne conserve aucune trace de la branche d’origine de cette branche. Choisissez une branche de base pour la comparaison.",
"diffView.branch.loadError": "Échec du chargement des modifications de la branche",
"diffView.branch.loadingFiles": "Chargement des modifications de la branche...",
"diffView.branch.empty": "Aucune modification sur cette branche par rapport à {base}",
"diffView.scope.selectorAria": "Sélectionner le mode de changements",
'diffView.actions.retry': 'Réessayer',
'diffView.actions.renderAnyway': 'Afficher quand même',
@@ -1266,6 +1365,12 @@ export const dict = {
'diffView.reviewDialog.toast.noSessionDirectory': 'Le dossier de session est indisponible',
'diffView.reviewDialog.toast.startFailed': 'Impossible de démarrer le flux de revue',
'chat.history.loadOlder': 'Charger les messages précédents',
'chat.appLink.confirm.title': 'Ouvrir ce lien dans une autre application ?',
'chat.appLink.confirm.description': "Ce lien de discussion utilise le protocole {scheme} et s'ouvrira dans une autre application.",
'chat.appLink.confirm.descriptionPlain': "Ce lien de discussion s'ouvrira dans une autre application.",
'chat.appLink.confirm.cancel': 'Annuler',
'chat.appLink.confirm.open': 'Ouvrir une fois',
'chat.appLink.confirm.trustAndOpen': 'Approuver et ouvrir',
'chat.autoReview.title': 'La boucle de revue de code est en cours',
'chat.autoReview.status.waitingForReviewer': 'En attente du reviewer',
'chat.autoReview.status.waitingForImplementer': 'En attente de l’implémenteur',
@@ -1283,11 +1388,46 @@ export const dict = {
'diffView.hunk.unsupported': "La préparation de sections individuelles n'est pas prise en charge dans cet environnement.",
'rightSidebar.contextNotesTodo.plan.defaultTitle': 'Plan',
'rightSidebar.contextNotesTodo.empty.selectProject': 'Sélectionnez un projet pour ajouter des notes et des tâches.',
'rightSidebar.contextNotesTodo.notes.title': 'Notes rapides - {project}',
'rightSidebar.contextNotesTodo.notes.placeholder': 'Capturez le contexte, les rappels ou les liens',
'rightSidebar.contextNotesTodo.todo.title': 'Faire',
'rightSidebar.contextNotesTodo.todo.itemsSingle': 'Article {count}',
'rightSidebar.contextNotesTodo.todo.itemsPlural': 'Articles {count}',
'rightSidebar.contextNotesTodo.notes.addAria': 'Ajouter une note',
'rightSidebar.contextNotesTodo.notes.empty': 'Aucune note pour le moment. Notez du contexte, des rappels ou des liens.',
'rightSidebar.contextNotesTodo.notes.actions.expand': 'Développer la note',
'rightSidebar.contextNotesTodo.notes.actions.collapse': 'Réduire la note',
'rightSidebar.contextNotesTodo.notes.actions.delete': 'Supprimer la note',
'rightSidebar.contextNotesTodo.notes.actions.pin': 'Épingler au contexte de l\'agent',
'rightSidebar.contextNotesTodo.notes.actions.unpin': 'Détacher du contexte de l\'agent',
'rightSidebar.contextNotesTodo.notes.source.selection': 'Depuis le chat',
'rightSidebar.contextNotesTodo.notes.source.agent': 'Depuis l\'agent',
'rightSidebar.contextNotesTodo.search.placeholder': 'Rechercher',
'rightSidebar.contextNotesTodo.search.clear': 'Effacer la recherche',
'rightSidebar.contextNotesTodo.search.noResults': 'Aucun résultat pour "{query}".',
'rightSidebar.contextNotesTodo.toast.deleteNoteFailed': 'Échec de la suppression de la note',
'rightSidebar.contextNotesTodo.toast.createNoteFailed': 'Échec de la création de la note',
'rightSidebar.contextNotesTodo.tabs.notes': 'Notes',
'rightSidebar.contextNotesTodo.tabs.todos': 'Tâches',
'rightSidebar.contextNotesTodo.tabs.plans': 'Plans',
'rightSidebar.contextNotesTodo.plans.actions.back': 'Retour aux plans',
'rightSidebar.contextNotesTodo.tabs.memory': 'Mémoire',
'rightSidebar.contextNotesTodo.sections.label': 'Sections du contexte du projet',
'rightSidebar.contextNotesTodo.sections.resize': 'Redimensionner la barre des sections',
'rightSidebar.contextNotesTodo.memory.scope.project': 'Projet',
'rightSidebar.contextNotesTodo.memory.scope.label': 'Portée de la mémoire',
'rightSidebar.contextNotesTodo.memory.scope.global': 'À votre sujet',
'rightSidebar.contextNotesTodo.memory.type.fact': 'fait',
'rightSidebar.contextNotesTodo.memory.badge.new': 'nouveau',
'rightSidebar.contextNotesTodo.memory.flagged': 'Retenu — se lit comme une instruction',
'rightSidebar.contextNotesTodo.memory.badge.changed': 'modifié',
'rightSidebar.contextNotesTodo.memory.type.preference': 'préférence',
'rightSidebar.contextNotesTodo.memory.type.reference': 'référence',
'rightSidebar.contextNotesTodo.memory.actions.delete': 'Oublier cette mémoire',
'rightSidebar.contextNotesTodo.memory.actions.editTitle': 'Titre de la mémoire',
'rightSidebar.contextNotesTodo.memory.actions.editBody': 'Texte de la mémoire',
'rightSidebar.contextNotesTodo.memory.toast.saveFailed': 'Impossible d’enregistrer la mémoire',
'rightSidebar.contextNotesTodo.memory.toast.deleteFailed': 'Impossible d’oublier la mémoire',
'rightSidebar.contextNotesTodo.memory.empty.nothing': 'L’agent n’a encore rien enregistré ici.',
'rightSidebar.contextNotesTodo.memory.empty.noMatches': 'Aucune mémoire enregistrée ne correspond à votre recherche.',
'rightSidebar.contextNotesTodo.memory.empty.noProject': 'Ouvrez un projet pour voir ce que l’agent en retient.',
'rightSidebar.contextNotesTodo.memory.empty.unavailable': 'Impossible de charger la mémoire enregistrée. Rien n’est perdu — réessayez.',
'rightSidebar.contextNotesTodo.todo.clearCompleted': 'Effacer terminé',
'rightSidebar.contextNotesTodo.todo.inputPlaceholder': 'Ajouter une tâche',
'rightSidebar.contextNotesTodo.todo.addAria': 'Ajouter une tâche',
@@ -1298,13 +1438,9 @@ export const dict = {
'rightSidebar.contextNotesTodo.todo.actions.delete': 'Supprimer "{text}"',
'rightSidebar.contextNotesTodo.todo.actions.send': 'Envoyer "{text}"',
'rightSidebar.contextNotesTodo.todo.actions.reorder': 'Récommander "{text}"',
'rightSidebar.contextNotesTodo.todo.resizeAria': 'Redimensionner la liste de tâches',
'rightSidebar.contextNotesTodo.todo.sendMenu.currentSession': 'Envoyer à la session en cours',
'rightSidebar.contextNotesTodo.todo.sendMenu.newSession': 'Envoyer à une nouvelle session',
'rightSidebar.contextNotesTodo.todo.sendMenu.newWorktreeSession': 'Envoyer à une nouvelle session Worktree',
'rightSidebar.contextNotesTodo.plans.title': 'Forfaits',
'rightSidebar.contextNotesTodo.plans.filesSingle': 'Fichier {count}',
'rightSidebar.contextNotesTodo.plans.filesPlural': 'Fichiers {count}',
'rightSidebar.contextNotesTodo.plans.importFromFile': 'Importer un plan à partir d\'un fichier',
'rightSidebar.contextNotesTodo.plans.empty': 'Aucun plan enregistré pour l\'instant.',
'rightSidebar.contextNotesTodo.plans.deletePlan': 'Supprimer le forfait',
@@ -1324,13 +1460,14 @@ export const dict = {
'rightSidebar.contextNotesTodo.toast.sentToNewSession': 'Todo envoyé à une nouvelle session',
'rightSidebar.contextNotesTodo.toast.sentToNewWorktreeSession': 'Todo envoyé à une nouvelle session Worktree',
'rightSidebar.contextNotesTodo.toast.sendTodoFailed': 'Échec de l\'envoi de la tâche',
'rightSidebar.contextNotesTodo.toast.updatePlanFailed': 'Échec de la mise à jour du plan',
'rightSidebar.contextNotesTodo.toast.deletePlanFailed': 'Échec de la suppression du plan',
'rightSidebar.contextNotesTodo.toast.planFileEmpty': 'Le fichier de plan est vide',
'rightSidebar.contextNotesTodo.toast.importPlanFailed': 'Échec de l\'importation du plan',
'rightSidebar.contextNotesTodo.toast.planImported': 'Forfait importé',
'rightSidebar.contextNotesTodo.toast.readPlanFileFailed': 'Échec de la lecture du fichier de plan',
'inlineComment.range.lines': 'Lignes {start}-{end}',
'inlineComment.input.placeholder': 'Ajouter un commentaire... (Cmd+Entrée pour enregistrer)',
'inlineComment.input.placeholder': 'Ajouter un commentaire... ({shortcut} pour enregistrer)',
'inlineComment.actions.cancel': 'Annuler',
'inlineComment.actions.save': 'Sauvegarder',
'inlineComment.actions.comment': 'Commentaire',
@@ -1348,8 +1485,6 @@ export const dict = {
'header.github.accountSource.cli': 'CLI',
'header.services.openWithCurrent': 'Instance ouverte, utilisation et MCP (actuel : {current})',
'header.services.open': 'Services ouverts, utilisation et MCP',
'header.services.tooltip.currentInstanceWithShortcuts': 'Instance actuelle : {current} ({toggle} ; onglet suivant {nextTab})',
'header.services.tooltip.servicesWithShortcuts': 'Services ({toggle} ; onglet suivant {nextTab})',
'header.services.title': 'Services',
'header.services.viewAria': 'Voir les prestations',
'header.services.closeAria': 'Fermer les prestations',
@@ -1360,7 +1495,6 @@ export const dict = {
'header.services.used': 'Utilisé',
'header.services.remaining': 'Restant',
'header.services.modelFamily.other': 'Autre',
'header.services.shutdownDev': 'Arrêter OpenChamber',
'header.actions.openPlanAria': 'Plan ouvert',
"header.actions.toggleChangesPanel": "Panneau des changements",
"header.actions.toggleChangesPanelAria": "Basculer le panneau des changements",
@@ -1453,6 +1587,10 @@ export const dict = {
'directoryExplorerDialog.browse.directories': 'Annuaires',
'directoryExplorerDialog.browse.loading': 'Chargement des répertoires...',
'directoryExplorerDialog.browse.empty': 'Aucun répertoire correspondant.',
'directoryExplorerDialog.browse.permissionDenied': 'OpenChamber doit accéder à ce dossier.',
'directoryExplorerDialog.browse.loadFailed': 'Impossible de charger ce dossier.',
'directoryExplorerDialog.browse.grantAccess': 'Autoriser l’accès',
'directoryExplorerDialog.browse.retry': 'Réessayer',
'directoryExplorerDialog.browse.parentDirectory': 'Annuaire parent',
'directoryExplorerDialog.browse.addedBadge': 'Ajouté',
'directoryExplorerDialog.browse.quickAdd': 'Ajouter',
@@ -1512,22 +1650,18 @@ export const dict = {
'helpDialog.item.focusChatInput': 'Concentration sur la saisie du chat',
'helpDialog.item.togglePromptNavigator': 'Afficher ou masquer le navigateur de prompts',
'helpDialog.item.abortActiveRun': 'Abandonner l’exécution active (double pression)',
'helpDialog.item.toggleRightSidebar': 'Afficher/masquer le panneau de contexte',
'helpDialog.item.openRightSidebarGitTab': 'Ouvrir la surface Git',
'helpDialog.item.openRightSidebarFilesTab': 'Ouvrir la surface Fichiers',
'helpDialog.item.toggleTerminalDock': 'Basculer la station d\'accueil du terminal',
'helpDialog.item.toggleTerminalExpanded': 'Terminal à bascule étendu',
'helpDialog.item.togglePlanContextPanel': 'Toggle Panneau contextuel du plan',
'helpDialog.item.cycleTheme': 'Basculer le thème (clair → sombre → système)',
'helpDialog.item.switchProject': 'Changer de projet',
'helpDialog.item.switchSessionTab': 'Basculer l’onglet de session',
'helpDialog.item.switchContextSurface': 'Basculer la surface du panneau contextuel (touche numérique)',
'helpDialog.item.toggleServicesMenu': 'Basculer le menu des services',
'helpDialog.item.cycleServicesTab': 'Onglet Services de vélo',
'helpDialog.item.openSettings': 'Ouvrir les paramètres',
'helpDialog.keyCombiner.or': 'ou',
'helpDialog.proTips.title': 'Conseils de pro :',
'helpDialog.proTips.commandPalette': 'Utilisez la palette de commandes ({shortcut}) pour accéder rapidement à toutes les actions',
'helpDialog.proTips.recentSessions': 'Les 5 sessions les plus récentes apparaissent dans la palette de commandes',
'helpDialog.proTips.themeCycling': 'Le cyclisme thématique mémorise vos préférences au fil des sessions',
'helpDialog.proTips.leaderSequences': 'Raccourcis en deux temps : appuyez sur la combinaison, puis sur la seconde touche — Échap annule',
'header.actions.rightSidebarWithShortcut': 'Barre latérale droite ({shortcut})',
'header.actions.toggleRightSidebarAria': 'Basculer la barre latérale droite',
'header.actions.openAppMenu': 'Menu de OpenChamber',
@@ -1611,8 +1745,6 @@ export const dict = {
'session.newWorktree.noMatchingBranches': 'Aucune branche correspondante',
'session.newWorktree.localBranches': 'Branches locales',
'session.newWorktree.remoteBranches': 'Branches du dépôt distant',
'session.newWorktree.otherLocalBranches': 'Autres branches locales',
'session.newWorktree.otherRemoteBranches': 'Autres branches du remote',
'session.newWorktree.branchName': 'Nom de la branche',
'session.newWorktree.branchNamePlaceholder': 'fonctionnalité/ma-fonctionnalité-géniale',
'session.newWorktree.actions.change': 'Changement',
@@ -1721,7 +1853,6 @@ export const dict = {
'chat.statusRow.tasksTitle': 'Tâches',
'chat.statusRow.modelStatus': '{model} · {status}',
'chat.statusRow.summary.activeLeft': '{active} actif · {left} gauche',
'chat.statusRow.aborted': 'Avorté',
'chat.revertIndicator.redo': 'Refaire',
'chat.revertIndicator.redoAria': 'Rétablir : restaurer les messages annulés',
'chat.revertPopover.title': 'Rétabli',
@@ -1735,6 +1866,9 @@ export const dict = {
'chat.revert.toast.undo': 'Revenu à {preview}',
'chat.revert.toast.redo': 'Refait',
'chat.revert.toast.restored': 'Restauré tous les messages',
'chat.toast.opencodeRestartInterrupted.title': 'Discussion interrompue',
'chat.toast.opencodeRestartInterrupted.description': 'OpenCode a redémarré alors qu’une réponse était encore en cours. Envoyez un message pour continuer.',
'chat.toast.opencodeRestartInterrupted.openSession': 'Ouvrir la session',
'chat.errorBoundary.title': 'Erreur de discussion',
'chat.errorBoundary.description': 'L\'interface de discussion a rencontré une erreur. Cela peut être dû à un problème de réseau temporaire ou à des données de message corrompues.',
'chat.errorBoundary.sessionLabel': 'Session',
@@ -1771,13 +1905,28 @@ export const dict = {
'chat.container.returnToParent.titleNamed': 'Retourner à : {title}',
'chat.container.returnToParent.title': 'Retour à la session parents',
'chat.container.returnToParent.label': 'Mère',
'chat.btw.destroyAria': 'Détruire cette session btw',
'chat.btw.titleFallback': 'session btw',
'chat.btw.mainComposerPlaceholder': 'Poser une question dans cette session btw…',
'chat.btw.loading': 'Démarrage de la session btw…',
'chat.btw.toast.emptyArgument': 'Saisissez une question après /btw',
'chat.btw.toast.createFailed': 'Échec du démarrage de la session btw',
'chat.btw.toast.destroyFailed': 'Échec de la suppression de la session btw. Elle restera dans la barre latérale.',
'chat.btw.working': 'En cours…',
'chat.btw.collapseAria': 'Réduire le panneau btw',
'chat.btw.expandAria': 'Développer le panneau btw',
'chat.btw.promoteAria': 'Conserver comme session à part',
'chat.btw.toast.promoteFailed': 'Échec de la conservation de la session btw',
'chat.container.readOnlySubagentPromptBanner': 'Les sessions de sous-agent ne peuvent pas être invitées.',
'chat.container.sessionLoadError.title': 'Impossible de charger la session',
'chat.container.sessionLoadError.description': 'Vérifiez la connexion et essayez de charger à nouveau cette session.',
'chat.container.sessionLoadError.description': 'Impossible de récupérer la conversation — le serveur est peut-être hors ligne ou injoignable. Rien n\'est perdu ; réessayez quand il sera de retour.',
'chat.container.sessionLoadError.authDescription': 'Votre session a expiré, le serveur a donc refusé la requête. Connectez-vous et la conversation se chargera.',
'chat.container.sessionLoadError.retry': 'Réessayer',
'sessions.sidebar.group.empty.loadingSessions': 'Chargement des sessions…',
'sessions.sidebar.group.empty.loadFailed': 'Impossible d’actualiser les sessions.',
'sessions.sidebar.group.empty.retry': 'Réessayer',
'sessions.sidebar.group.empty.permissionDenied': 'L’accès au dossier est requis.',
'sessions.sidebar.group.empty.grantAccess': 'Autoriser l’accès',
'chat.unifiedControls.title': 'Contrôles',
'chat.unifiedControls.model.title': 'Modèle',
'chat.unifiedControls.model.noRecent': 'Aucun modèle récent',
@@ -1805,12 +1954,13 @@ export const dict = {
'chat.textSelection.toast.addToNotesFailed': 'Échec de l\'ajout aux notes',
'chat.textSelection.toast.addToNotesSuccess': 'Ajout du texte sélectionné aux notes',
'chat.textSelection.toast.addToNotesSummaryFailed': 'Impossible de résumer la sélection, ajout du texte sélectionné aux notes',
'chat.textSelection.actions.addToChat': 'Ajouter au chat',
'chat.textSelection.actions.newSession': 'Nouvelle session',
'chat.textSelection.actions.copy': 'Copie',
'chat.textSelection.actions.addToInput': 'Ajouter à la saisie',
'chat.textSelection.actions.comment': 'Commenter',
'chat.textSelection.title.commentOnSelection': 'Commenter la sélection',
'chat.textSelection.comment.placeholder': 'Ajouter un commentaire facultatif...',
'chat.textSelection.comment.attach': 'Joindre',
'chat.textSelection.actions.addToNotes': 'Ajouter aux notes',
'chat.textSelection.title.addToCurrentChat': 'Ajouter au chat actuel',
'chat.textSelection.title.newSessionWithSelection': 'Créer une nouvelle session avec sélection',
'chat.textSelection.title.saveInsightToNotes': 'Enregistrer le texte sélectionné dans les notes',
'chat.messageBody.actions.revertAria': 'Revenir à ce message',
'chat.messageBody.actions.revert': 'Revenir à partir d\'ici',
@@ -1892,6 +2042,7 @@ export const dict = {
'chat.chatInput.toast.attachmentsTooLarge': 'Les pièces jointes sont trop volumineuses pour être envoyées. Veuillez essayer de réduire le nombre ou la taille des images.',
'chat.chatInput.toast.sendAttachmentsFailed': 'Échec de l\'envoi des pièces jointes. Essayez moins de fichiers ou des images plus petites.',
'chat.chatInput.toast.messageSendFailed': 'Le message n\'a pas pu être envoyé. Pièces jointes restaurées.',
'chat.chatInput.toast.noModelSelected': 'Sélectionnez un fournisseur et un modèle avant d\'envoyer.',
'chat.chatInput.toast.clipboardAttachFailed': 'Échec de la pièce jointe de l\'image du presse-papiers',
'chat.chatInput.toast.clipboardTextAttachFailed': 'Échec de la pièce jointe du texte collé comme fichier',
'chat.chatInput.toast.largeTextPaste.title': 'Texte volumineux détecté',
@@ -1906,8 +2057,6 @@ export const dict = {
'chat.chatInput.toast.openSessionFirst': 'Ouvrir d\'abord une session',
'chat.chatInput.toast.togglePermissionAutoAcceptFailed': 'Échec de l\'activation de l\'acceptation automatique des autorisations',
'chat.chatInput.reviewComments': 'Commentaires de révision :',
'chat.chatInput.devServerLogs': 'Journaux du serveur de développement :',
'chat.chatInput.devServerLogsRemove': 'Supprimer les journaux du serveur de développement',
'chat.chatInput.previewAnnotations': 'Aperçu des annotations :',
'chat.chatInput.previewContext': 'Contexte d\'aperçu :',
'chat.chatInput.previewContextRemove': 'Supprimer le contexte d\'aperçu',
@@ -2069,6 +2218,15 @@ export const dict = {
'commandPalette.item.toggleSidebar': 'Basculer la barre latérale',
'commandPalette.item.showContextUsage': 'Afficher l\'utilisation du contexte',
'commandPalette.item.toggleTerminal': 'Basculer le terminal',
'commandPalette.item.cycleTheme': 'Changer de thème',
'commandPalette.item.showOpenCodeStatus': 'Afficher le statut OpenCode',
'commandPalette.item.toggleMemoryDebug': 'Basculer le panneau de débogage mémoire',
'commandPalette.item.pinSession': 'Épingler ou désépingler la session',
'commandPalette.item.copySessionId': 'Copier l\'ID de session',
'commandPalette.item.openMultiRun': 'Ouvrir le lanceur multi-run',
'commandPalette.item.openArchive': 'Ouvrir les sessions archivées',
'commandPalette.item.openNotes': 'Ouvrir le panneau de notes',
'commandPalette.item.openTodos': 'Ouvrir le panneau de tâches',
'commandPalette.item.openSettings': 'Ouvrez les paramètres...',
'commandPalette.session.untitled': 'Session sans titre',
'openCodeStatusDialog.title': 'Statut OpenCode',
@@ -2283,6 +2441,9 @@ export const dict = {
'sessionAuth.error.passkeySignInCanceled': 'La connexion par mot de passe a été annulée.',
'sessionAuth.error.enterPasswordForPasskey': 'Entrez votre mot de passe pour ajouter un mot de passe.',
'sessionAuth.locked.tunnelTitle': 'Accès au tunnel requis',
'sessionAuth.expired.banner': 'Votre session a expiré — connectez-vous pour continuer.',
'sessionAuth.expired.loginAction': 'Se connecter',
'sessionAuth.expired.sendBlocked': 'Session expirée — connectez-vous pour envoyer des messages.',
'sessionAuth.locked.unlockTitle': 'Débloquez OpenChamber',
'sessionAuth.locked.tunnelDescription': 'Ouvrez ce tunnel à l\'aide du lien de connexion unique depuis l\'application de bureau.',
'sessionAuth.locked.passwordDescription': 'Cette session est protégée par mot de passe.',
@@ -2553,6 +2714,10 @@ export const dict = {
'updateDialog.status.updating': 'Mise à jour...',
'updateDialog.error.updateFailed': 'La mise à jour a échoué',
'updateDialog.error.takingLonger': 'La mise à jour prend plus de temps que prévu. Attendez un peu et actualisez, ou exécutez : openchamber update',
'updateDialog.error.signatureRejected': 'La mise à jour téléchargée a été rejetée : sa signature de code ne correspond pas à cette installation. Cela signifie généralement que la copie en cours n’a pas été installée depuis une version officielle signée. Installez OpenChamber depuis une version officielle, puis relancez la mise à jour.',
'updateDialog.error.updaterDisabled': 'Le programme de mise à jour s’est arrêté après une installation échouée. Quittez OpenChamber, rouvrez-le, puis réessayez la mise à jour.',
'updateDialog.error.restartFailed': 'Impossible de redémarrer pour installer la mise à jour.',
'updateDialog.error.restartUnavailable': 'L’installation de la mise à jour nécessite l’application de bureau OpenChamber.',
'mobileUpdate.toast.available.title': 'Mise à jour OpenChamber disponible',
'mobileUpdate.toast.available.description': 'La version {version} est prête pour Android.',
'mobileUpdate.toast.actions.download': 'Télécharger',
@@ -2573,6 +2738,7 @@ export const dict = {
'memoryDebugPanel.title': 'Panneau de débogage',
'memoryDebugPanel.tabs.memory': 'Mémoire',
'memoryDebugPanel.tabs.streaming': 'Streaming',
'memoryDebugPanel.tabs.requests': 'Requêtes',
'memoryDebugPanel.section.sessionsInMemory': 'Sessions en mémoire',
'memoryDebugPanel.section.uiStreamingMetrics': 'Métriques de streaming de l\'interface utilisateur',
'memoryDebugPanel.section.vscodeBridgeMetrics': 'Métriques du pont VS Code',
@@ -2610,6 +2776,16 @@ export const dict = {
'memoryDebugPanel.streaming.copy.copied': 'Débogage en streaming JSON copié',
'memoryDebugPanel.streaming.copy.failed': 'Échec de la copie de JSON',
'memoryDebugPanel.streaming.copy.hint': 'La copie exporte les métriques de streaming de l\'interface utilisateur et de VS Code en tant que JSON.',
'memoryDebugPanel.requests.inFlight': 'En cours',
'memoryDebugPanel.requests.peak': 'Pic',
'memoryDebugPanel.requests.duration': 'Durée',
'memoryDebugPanel.requests.totalRequests': 'Requêtes totales',
'memoryDebugPanel.requests.tracking': 'Suivi',
'memoryDebugPanel.requests.now': 'maintenant',
'memoryDebugPanel.requests.noSamples': 'Aucune requête enregistrée. Gardez ce panneau ouvert pour enregistrer l\'activité fetch.',
'memoryDebugPanel.requests.chartLabel': 'Requêtes fetch en cours dans le temps, pic {peak}',
'memoryDebugPanel.requests.windowHint': '{seconds}s dernières',
'memoryDebugPanel.requests.percentileChartLabel': 'Percentiles d\'âge des requêtes en cours (p50, p90, p99, max) dans le temps',
'memoryDebugPanel.common.idle': 'inactif',
'memoryDebugPanel.common.live': 'en direct',
'memoryDebugPanel.common.notAvailable': 'n / A',
@@ -2647,18 +2823,23 @@ export const dict = {
'common.relative.daysAgoCompact': '{count} j',
'common.relative.weeksAgoCompact': '{count} sem',
'common.relative.yearsAgoCompact': '{count} a',
'common.duration.secondsCompact': '{seconds}s',
'common.duration.minutesSecondsCompact': '{minutes}m {seconds}s',
'common.duration.hoursMinutesCompact': '{hours}h {minutes}m',
'contextFileOpen.failure.tooLarge': 'Le fichier est trop volumineux pour être ouvert (> {count} lignes)',
'contextFileOpen.failure.missing': 'Fichier introuvable',
'contextFileOpen.failure.unreadable': 'Impossible d’ouvrir le fichier',
'quota.window.5h': '5 heures',
'quota.window.7d': 'Limite sur 7 jours',
'quota.window.7dSonnet': 'Limite Sonnet sur 7 jours',
'quota.window.7dOpus': 'Limite Opus sur 7 jours',
'quota.window.weekly': 'Limite hebdomadaire',
'quota.window.extraUsage': 'Utilisation supplémentaire',
'quota.window.weekly': 'Hebdomadaire',
'quota.window.daily': 'Quotidien',
'quota.window.monthly': 'Limite mensuelle',
'quota.window.monthly': 'Mensuel',
'quota.window.credits': 'Crédits',
'quota.window.creditsBalance': 'Solde de crédits',
'quota.window.monthlyCredits': 'Crédits mensuels',
'quota.window.purchasedCredits': 'Crédits achetés',
'quota.window.freeCredits': 'Crédits gratuits',
'quota.window.billingCycle': 'Cycle de facturation',
'quota.window.auto': 'Auto',
'quota.window.api': 'API',
@@ -2668,7 +2849,7 @@ export const dict = {
'quota.window.premium': 'Interactions premium',
'quota.window.chat': 'Requêtes de chat',
'quota.window.completions': 'Complétions',
'quota.window.premiumInteractions': 'Interactions premium',
'quota.window.premiumInteractions': 'Crédits IA',
'layout.mainTab.diagram': 'Diagramme',
'mobile.nav.aria': 'Navigation mobile',
'mobile.connect.welcome.title': 'Se connecter à OpenChamber',
@@ -2719,6 +2900,11 @@ export const dict = {
'mobile.instances.status.connectedDirect': 'Connecté · Réseau local',
'mobile.instances.status.connectedRelay': 'Connecté · Relais privé',
'mobile.instances.saveEdit': 'Enregistrer les modifications',
'mobile.connectionDebug.title': 'Journal de connexion',
'mobile.connectionDebug.copy': 'Copier',
'mobile.connectionDebug.copied': 'Copié',
'mobile.connectionDebug.close': 'Fermer',
'mobile.connectionDebug.empty': 'Aucun événement de connexion pour le moment.',
'mobile.nav.changes': 'Modifications',
'mobile.nav.settings': 'Paramètres',
'mobile.surface.closeAria': 'Fermer',
@@ -2742,6 +2928,7 @@ export const dict = {
'mobile.sessions.section.worktrees': 'Worktrees',
'mobile.sessions.section.otherProjects': 'Changer de projet',
'mobile.sessions.section.projects': 'Projets',
'mobile.sessions.section.chats': 'Discussions',
'mobile.sessions.empty.noProjectsTitle': 'Aucun projet pour le moment',
'mobile.sessions.empty.noProjectsDescription': 'Ajoutez un projet pour commencer à discuter avec votre code.',
'mobile.sessions.empty.noSessionsTitle': 'Aucune session pour le moment',
@@ -2844,6 +3031,56 @@ export const dict = {
'worktree.bootstrap.toast.failedDescription': 'Le worktree a été créé, mais la configuration en arrière-plan ne s’est pas terminée.',
'worktree.bootstrap.toast.timeoutDescription': 'Le worktree a été créé, mais la configuration en arrière-plan a expiré.',
'contextPanel.browser.inspectUnavailable': 'Cette page ne peut pas être inspectée depuis le panneau de navigateur.',
'contextPanel.browser.back': 'Retour',
'contextPanel.browser.forward': 'Suivant',
'contextPanel.browser.reload': 'Recharger',
'contextPanel.browser.hardReload': 'Recharger en ignorant le cache',
'contextPanel.browser.zoomIn': 'Zoom avant',
'contextPanel.browser.zoomOut': 'Zoom arrière',
'contextPanel.browser.zoomReset': 'Réinitialiser le zoom',
'contextPanel.browser.clearCookies': 'Effacer les cookies',
'contextPanel.browser.clearCache': 'Vider le cache',
'contextPanel.browser.clearedCookies': 'Cookies effacés',
'contextPanel.browser.clearedCache': 'Cache vidé',
'contextPanel.browser.clearFailed': 'Impossible d’effacer les données de navigation',
'contextPanel.browser.stop': 'Arrêter',
'contextPanel.browser.openExternal': 'Ouvrir dans le navigateur système',
'contextPanel.browser.devTools': 'Ouvrir les DevTools',
'contextPanel.browser.deviceToolbar': 'Barre d’appareils',
'contextPanel.browser.device.preset': 'Préréglage d’appareil',
'contextPanel.browser.device.responsive': 'Adaptatif',
'contextPanel.browser.device.width': 'Largeur du viewport',
'contextPanel.browser.device.height': 'Hauteur du viewport',
'contextPanel.browser.device.rotate': 'Pivoter',
'contextPanel.browser.device.schemeSystem': 'Auto',
'contextPanel.browser.device.schemeLight': 'Clair',
'contextPanel.browser.device.schemeDark': 'Sombre',
'contextPanel.browser.device.schemeFailed': 'Impossible de changer l’apparence de la page',
'contextPanel.browser.frameTitle': 'Navigateur',
'contextPanel.browser.loadFailed': 'Impossible de charger cette page',
'contextPanel.browser.waitingForServer': 'En attente du serveur de développement',
'contextPanel.browser.waitingForServerHint': 'Il n’accepte pas encore de connexions. La page se chargera dès que ce sera le cas.',
'contextPanel.browser.tunnelFailed': 'Ce serveur de dev n’a pas pu être atteint',
'contextPanel.browser.tunnelFailedHint': '{url} tourne sur la machine où se trouve OpenChamber, et la connexion vers elle n’a pas pu être ouverte. Rien de votre propre machine n’est affiché ici.',
'contextPanel.browser.loadFailedUnknown': 'La page n’a pas pu être atteinte.',
'contextPanel.browser.crashed': 'Cette page ne répond plus',
'contextPanel.browser.crashedHint': 'La page a planté plusieurs fois de suite. Rechargez pour réessayer.',
'contextPanel.browser.devServers.title': 'Serveurs de développement actifs',
'projectActions.toast.multipleServers': 'Plusieurs serveurs ont démarré — choisissez-en un dans le panneau navigateur',
'contextPanel.browser.devServers.justStarted': 'Démarrés à l’instant',
'contextPanel.browser.devServers.unavailable': 'Impossible de vérifier les serveurs de développement actifs.',
'contextPanel.browser.devServers.remoteOnly': 'Ils tournent sur la machine qui héberge OpenChamber. Les ouvrir nécessite l’application de bureau.',
'contextPanel.browser.annotate.toggle': 'Annoter la page',
'contextPanel.browser.annotate.intro': 'Ceci est une sélection annotée du navigateur intégré.',
'contextPanel.browser.annotate.attached': 'Annotation jointe à la discussion',
'contextPanel.browser.annotate.noSession': 'Ouvrez une session de discussion avant de joindre une annotation',
'contextPanel.browser.annotate.noPage': 'Chargez une page avant d’annoter',
'contextPanel.browser.annotate.failed': 'Impossible d’annoter cette page',
'contextPanel.browser.annotate.tool.element': 'Élément',
'contextPanel.browser.annotate.tool.region': 'Zone',
'contextPanel.browser.annotate.tool.draw': 'Dessin',
'contextPanel.browser.annotate.commentPlaceholder': 'Décrivez le changement...',
'contextPanel.browser.annotate.submit': 'Joindre',
'contextPanel.browser.trustNotice': 'Les pages ouvertes ici s’exécutent avec un accès complet à OpenChamber — nécessaire pour l’inspection et les captures d’écran. N’ouvrez que des sites de confiance : une page malveillante pourrait lire vos données ou agir en votre nom.',
'filesView.diagram.closeDiagramView': 'Fermer la vue diagramme',
'filesView.diagram.saveDiagram': 'Enregistrer le diagramme',
@@ -2879,6 +3116,7 @@ export const dict = {
'chat.commandAutocomplete.command.catchUpDescription': 'Rétablir le contexte : ce que vous faisiez et où reprendre.',
'chat.commandAutocomplete.command.debugDescription': 'Investigation guidée de la cause racine d’un bug avant de proposer une correction.',
'chat.commandAutocomplete.command.weighDescription': 'Comparer 2 à 3 approches avec compromis et recommandation avant de vous engager.',
'chat.commandAutocomplete.command.btwDescription': 'Posez une question annexe dans une session enfant temporaire sans interrompre cette conversation.',
'chat.commandAutocomplete.command.exploreDescription': 'Vous orienter dans ce codebase : tour d’ensemble de l’architecture et des parties principales.',
'chat.questionCard.submitFailed': 'Impossible d’envoyer la réponse',
'chat.questionCard.dismissFailed': 'Impossible d’ignorer la question',
@@ -2902,6 +3140,7 @@ export const dict = {
'chat.toolPart.showRawJson': 'Afficher le JSON brut',
'chat.toolPart.showFormattedJson': 'Afficher le JSON formaté',
'chat.toolPart.showNavigableJson': 'Afficher le JSON navigable',
'chat.toolPart.openFile': 'Ouvrir le fichier',
'chat.toolPart.openFileAtFirstChange': 'Ouvrir le fichier à la première modification',
'chat.toolPart.openFileDiff': 'Ouvrir les différences du fichier',
'chat.toolPart.copyOutput': 'Copier la sortie',
@@ -2919,6 +3158,103 @@ export const dict = {
'vscodeLayout.actions.archiveAllSuccess': '{count} session(s) archivée(s)',
'vscodeLayout.actions.archiveAllError': 'Impossible d’archiver {count} session(s)',
'vscodeLayout.actions.cancel': 'Annuler',
'chat.workStatus.ariaLabel': 'État du travail',
'chat.workStatus.context.label': 'Contexte',
'chat.workStatus.cost.breakdown': 'Session {session} · Sous-agents {subagents}',
'chat.workStatus.git.changedFileSingle': '{count} fichier modifié',
'chat.workStatus.git.changedFilePlural': '{count} fichiers modifiés',
'chat.workStatus.pr.untitled': 'Pull request sans titre',
'chat.workStatus.pr.draft': 'Brouillon',
'chat.workStatus.pr.checks': 'Vérifications',
'chat.workStatus.pr.checksFailed': '{count} en échec',
'chat.workStatus.pr.checksPending': '{count} en cours',
'chat.workStatus.pr.checksPassed': '{count} réussies',
'chat.workStatus.attention.merge': 'Fusion en cours',
'chat.workStatus.attention.rebase': 'Rebase en cours',
'chat.workStatus.attention.cherryPick': 'Cherry-pick en cours',
'chat.workStatus.attention.revert': 'Revert en cours',
'chat.workStatus.attention.bisect': 'Bisect en cours',
'chat.workStatus.subagent.done': 'Terminé',
'chat.workStatus.subagent.untitled': 'Sous-agent',
'chat.workStatus.mcp.toggle': 'Basculer {name}',
'chat.workStatus.mcp.needsAuth': 'Se connecter',
'chat.workStatus.mcp.failed': 'Échec',
'chat.workStatus.pinned.unavailable': 'Message épinglé',
'chat.workStatus.section.session': 'Session',
'chat.workStatus.section.project': 'Projet',
'chat.workStatus.section.subagents': 'Sous-agents',
'chat.workStatus.section.mcp': 'MCP',
'chat.workStatus.section.pinned': 'Messages épinglés',
'chat.workStatus.section.tasks': 'Tâches',
'chat.workStatus.subagent.working': 'travaille',
'chat.workStatus.subagent.needsPermission': 'demande une autorisation',
'chat.workStatus.subagent.askedQuestion': 'a posé une question',
'chat.workStatus.section.contextBreakdown': 'Sources de contexte',
'chat.workStatus.breakdown.skills': 'Compétences',
'chat.workStatus.breakdown.pinnedNote': 'note',
'chat.workStatus.breakdown.unpin': 'Détacher du contexte',
'chat.workStatus.breakdown.pinnedPlan': 'plan',
'chat.workStatus.breakdown.memory': 'Mémoire de l’agent',
'chat.workStatus.breakdown.pinnedKnowledgeSingle': '{count} épinglé',
'chat.workStatus.breakdown.pinnedKnowledgePlural': '{count} épinglés',
'chat.workStatus.breakdown.mcp': 'Serveurs MCP',
'chat.workStatus.action.openChanges': 'Ouvrir les modifications',
'chat.workStatus.action.openGit': 'Ouvrir le panneau Git',
'chat.workStatus.action.openPr': 'Ouvrir la pull request',
'chat.workStatus.action.openSubagent': 'Ouvrir {name}',
'chat.workStatus.section.usage': 'Utilisation',
'chat.workStatus.goal.open': 'Gérer l’objectif',
'chat.workStatus.goal.pause': 'Mettre en pause',
'chat.workStatus.goal.resume': 'Reprendre',
'chat.workStatus.goal.updateFailed': 'Impossible de mettre à jour l’objectif',
'chat.workStatus.pinned.unpin': 'Détacher le message',
'chat.workStatus.pinned.reveal': 'Aller au message',
'chat.workStatus.pinned.unpinFailed': 'Impossible de détacher le message',
'chat.workStatus.action.openContext': 'Ouvrir le panneau de contexte',
'chat.workStatus.section.linkedIssues': 'Liés',
'chat.workStatus.linkedIssues.open': 'Ouvrir #{number} sur GitHub',
'chat.workStatus.linkedIssues.unlink': 'Retirer le lien',
'chat.workStatus.linkedIssues.unlinkFailed': 'Impossible de retirer le lien',
'chat.workStatus.linkedIssues.link': 'Lier à la session',
'chat.workStatus.linkedIssues.linkFailed': 'Impossible de lier',
'chat.workStatus.breakdown.issueCountSingle': '{count} ticket',
'chat.workStatus.breakdown.issueCountPlural': '{count} tickets',
'chat.workStatus.breakdown.prCountSingle': '{count} PR',
'chat.workStatus.breakdown.prCountPlural': '{count} PR',
'chat.workStatus.breakdown.skillCountSingle': '{count} compétence',
'chat.workStatus.breakdown.skillCountPlural': '{count} compétences',
'chat.workStatus.breakdown.mcpCountSingle': '{count} MCP',
'chat.workStatus.breakdown.mcpCountPlural': '{count} MCP',
'chat.workStatus.sections.open': 'Choisir les sections',
'chat.workStatus.sections.dialogTitle': 'Sections du panneau',
'chat.workStatus.sections.dialogDescription': 'Choisis ce qu\'affiche le panneau d\'état. Les sections masquées conservent leurs données, elles sont seulement absentes du panneau.',
'chat.workStatus.sections.allHidden': 'Aucune section sélectionnée',
'chat.workStatus.sections.showAll': 'Tout afficher',
'chat.workStatus.sections.noneWarning': 'Le panneau apparaîtra vide.',
'header.workStatusPanel.toggleAria': 'Basculer le panneau d\'état',
'header.workStatusPanel.hide': 'Masquer l\'état du travail',
'header.workStatusPanel.show': 'Afficher l\'état du travail',
'chat.workStatus.mcp.authorizeOpenFailed': 'Impossible d\'ouvrir la page d\'autorisation',
'chat.workStatus.mcp.authorizeFailed': 'Échec de l\'autorisation',
'mcpDropdown.toast.authorizeOpenFailed': 'Impossible d\'ouvrir la page d\'autorisation',
'mcpDropdown.toast.authorizeFailed': 'Échec de l\'autorisation',
'header.services.tooltip.currentInstance': 'Instance actuelle : {current} ({toggle})',
'header.workStatusPanel.showOverlay': 'Afficher l\'état par-dessus le chat',
'settings.mcp.page.connection.title': 'Comment le joindre',
'settings.mcp.page.connection.description': 'Colle la commande qui le démarre, ou le lien vers un serveur hébergé.',
'settings.mcp.page.registration.title': 'Ce serveur exige sa propre app',
'settings.mcp.page.registration.description': 'Il ne fournit pas d’identifiants automatiquement. Crée une app dans les réglages du service, colle ses informations ici, puis connecte-toi.',
'settings.mcp.page.registration.callbackLabel': 'Donne cette adresse au service',
'settings.mcp.page.registration.clientId': 'ID de l’app',
'settings.mcp.page.registration.clientSecret': 'Secret de l’app',
'settings.mcp.page.registration.afterSaving': 'Enregistre, puis appuie sur Autoriser.',
'settings.mcp.page.toast.copiedCallbackUrl': 'Adresse copiée',
'settings.mcp.page.toast.clipboardWriteFailed': 'Impossible de copier dans le presse-papiers',
'settings.mcp.page.scope.everywhere': 'Disponible dans tous les projets',
'settings.mcp.page.scope.thisProject': 'Seulement dans ce projet',
'settings.mcp.page.env.description': 'Valeurs dont le serveur a besoin, par exemple une clé d’API.',
'settings.mcp.page.connection.kindCommand': 'Commande',
'settings.mcp.page.connection.kindLink': 'Lien',
'settings.mcp.page.connection.hintCommand': 'S’exécute sur cette machine. Collez une commande entière : elle est découpée en un argument par ligne.',
'settings.mcp.page.connection.hintLink': 'Se connecte à un serveur hébergé par quelqu’un d’autre. Collez son adresse https.',
} as const;
export type I18nKey = keyof typeof dict;
+166 -43
View File
@@ -1,8 +1,10 @@
import { thirdPartyIntegrationI18n } from './third-party-integrations.i18n';
export const settingsDict = {
'settings.providers.page.openCodeGo.title': 'OpenCode Go 使用量追跡',
'settings.providers.page.openCodeGo.description': 'OpenCode Go ダッシュボードを接続して、ローリング、週間、月間のクォータを表示します。',
'settings.providers.page.openCodeGo.workspaceId': 'ワークスペース ID',
'settings.providers.page.openCodeGo.authCookie': '認証 Cookie',
'settings.providers.page.openCodeGo.apiKey': 'API キー',
'settings.providers.page.openCodeGo.help': 'ダッシュボード URL からワークスペース ID を、ブラウザーの開発者ツールから auth Cookie をコピーしてください。OpenChamber がブラウザーの Cookie を走査することはありません。',
'settings.providers.page.openCodeGo.save': '保存して検証',
'settings.providers.page.openCodeGo.replace': '置換',
@@ -40,7 +42,20 @@ export const settingsDict = {
'settings.view.badge.beta': 'ベータ',
'settings.view.actions.reloadOpenCode': 'OpenCode を再読み込み',
'settings.view.actions.reloadOpenCodeTooltip': 'OpenCode を再起動して設定を再読み込みします。',
'settings.view.actions.backToSettings': '設定に戻る',
'settings.view.actions.applyAndRestartOpenCode': '適用して再起動',
'settings.view.actions.applyAndRestartOpenCodeTooltipSingle': '保留中の設定変更 1 件を適用して OpenCode を再起動します。',
'settings.view.actions.applyAndRestartOpenCodeTooltipPlural': '保留中の設定変更 {count} 件を適用して OpenCode を再起動します。',
'settings.view.pendingRestart.applying': '再起動しています…',
'settings.view.pendingRestart.applied': '保留中の設定変更を適用して OpenCode を再起動しました。',
'settings.view.pendingRestart.applyFailed': '設定変更の適用に失敗しました。',
'settings.view.pendingRestart.manualRestartRequired': 'ディスクに保存しました。接続中の OpenCode サーバーを再起動して変更を適用してください。',
'settings.view.pendingRestart.saved': '保存しました。適用するには OpenCode を再起動してください。',
'settings.view.pendingRestart.confirm.title': '適用して再起動しますか?',
'settings.view.pendingRestart.confirm.description': 'OpenCode を再起動すると実行中のチャットが停止します。保存済みの設定変更は再起動後に反映されます。',
'settings.view.pendingRestart.confirm.dontShowAgain': '今後表示しない',
'settings.view.pendingRestart.confirm.cancel': 'キャンセル', 'settings.view.actions.backToSettings': '設定に戻る',
'settings.view.actions.closeSettings': '設定を閉じる',
'settings.view.actions.openSectionList': 'セクション一覧を開く',
'settings.view.actions.closeSettingsWithShortcut': '設定を閉じる ({shortcut}+,)',
@@ -392,14 +407,14 @@ export const settingsDict = {
'settings.remoteInstances.page.field.modePlaceholder': 'モードを選択',
'settings.remoteInstances.page.field.modeManaged': '自動起動',
'settings.remoteInstances.page.field.modeExternal': '既に実行中',
'settings.remoteInstances.page.field.preferredRemotePort': '優先リモートポート',
'settings.remoteInstances.page.field.preferredRemotePortHint': 'リモートマシンで使用するポート。空の場合は自動的に選択されます。',
'settings.remoteInstances.page.field.preferredRemotePort': 'リモートマシンのポート',
'settings.remoteInstances.page.field.preferredRemotePortHint': 'OpenChamber がリモートマシンで使うポート。空のままにすると自動で選ばれます。',
'settings.remoteInstances.page.field.keepServerRunning': 'サーバーを実行したままにする',
'settings.remoteInstances.page.field.keepServerRunningHint': '切断後もリモートマシンで OpenChamber を実行し続けます。',
'settings.remoteInstances.page.field.bindHost': 'バインドホスト',
'settings.remoteInstances.page.field.bindHostHint': 'ローカル接続の待受先。LAN アクセスが必要でない限り、127.0.0.1 または localhost を使用してください。',
'settings.remoteInstances.page.field.preferredLocalPort': '優先ローカルポート',
'settings.remoteInstances.page.field.preferredLocalPortHint': 'この接続に使用するローカルポート。空の場合は自動的に選択されます。',
'settings.remoteInstances.page.field.keepServerRunningHint': '切断後もリモートサーバーを動かしたままにします。オフの場合は切断時に停止し、次の接続時に再び起動します。',
'settings.remoteInstances.page.field.bindHost': 'アクセスできる範囲',
'settings.remoteInstances.page.field.bindHostHint': 'このコンピュータの転送アドレスを誰が開けるか。リモートマシン自体は、どちらの場合も SSH トンネル経由でのみ到達できます。',
'settings.remoteInstances.page.field.preferredLocalPort': 'このコンピュータのポート',
'settings.remoteInstances.page.field.preferredLocalPortHint': 'トンネル用にこのコンピュータで開くポート。空のままにすると自動で選ばれます。',
'settings.remoteInstances.page.field.forwardType': '転送タイプ',
'settings.remoteInstances.page.field.localHostPlaceholder': '127.0.0.1',
'settings.remoteInstances.page.field.remoteHostPlaceholder': '127.0.0.1',
@@ -419,6 +434,10 @@ export const settingsDict = {
'settings.common.actions.cancel': 'キャンセル',
'settings.common.actions.create': '作成',
'settings.common.actions.delete': '削除',
'settings.openchamber.appLinks.title': '信頼済みのアプリリンク',
'settings.openchamber.appLinks.info': 'ここに表示されたリンクは、このデバイスでは次回から確認せずに開きます。その他のアプリリンクは開く前に必ず確認します。',
'settings.openchamber.appLinks.empty': 'このデバイスには信頼済みのアプリリンクがありません。リンクを開く際に「信頼して開く」を選ぶとここに追加されます。',
'settings.openchamber.appLinks.removeAria': '信頼済みの {scheme} リンクを削除',
'settings.common.actions.reset': 'リセット',
'settings.common.actions.rename': '名前変更',
'settings.common.actions.duplicate': '複製',
@@ -464,6 +483,9 @@ export const settingsDict = {
'settings.openchamber.about.title': 'OpenChamber について',
'settings.openchamber.about.field.version': 'バージョン',
'settings.openchamber.about.field.openCodeVersion': 'OpenCode バージョン',
'settings.openchamber.about.field.instanceUrls': 'インスタンスのURL',
'settings.openchamber.about.field.applicationUrl': 'アプリケーション',
'settings.openchamber.about.field.tunnelUrl': 'トンネル',
'settings.openchamber.about.state.checking': '確認中...',
'settings.openchamber.about.state.upToDate': '最新です',
'settings.openchamber.about.state.unknown': '不明',
@@ -880,16 +902,26 @@ export const settingsDict = {
'settings.skills.catalog.page.mode.manual': '手動',
'settings.skills.catalog.page.mode.external': '外部',
'settings.skills.catalog.page.title': 'スキルカタログ',
'settings.skills.catalog.page.subtitle': 'キュレーションされたリポジトリからすぐ使えるスキルをインストール、または独自のソースを追加。',
'settings.skills.catalog.page.section.sources': 'ソース',
'settings.skills.catalog.page.searchAllPlaceholder': 'すべてのソースのスキルを検索…',
'settings.skills.catalog.page.search.clear': '検索をクリア',
'settings.skills.catalog.page.source.skillsCount': 'スキル数: {count}',
'settings.skills.catalog.page.source.stars': 'スター: {count}',
'settings.skills.catalog.page.source.updated': '更新: {time}',
'settings.skills.catalog.page.source.addOwnTitle': '独自のソースを追加',
'settings.skills.catalog.page.source.addOwnDescription': 'スキルを含む任意の Git リポジトリ',
'settings.skills.catalog.page.source.viewRepo': 'GitHub でリポジトリを開く',
'settings.skills.catalog.page.skill.viewOnGithub': 'GitHub でスキルを表示',
'settings.skills.catalog.page.list.searchTitle': '検索結果',
'settings.skills.catalog.page.section.sourceRepository': 'ソースリポジトリ',
'settings.skills.catalog.page.field.selectSourcePlaceholder': 'ソースを選択',
'settings.skills.catalog.page.actions.refreshTitle': '更新',
'settings.skills.catalog.page.actions.removeCatalogTitle': 'カタログを削除',
'settings.skills.catalog.page.actions.addCatalog': 'カタログを追加',
'settings.skills.catalog.page.actions.removeCatalog': 'カタログを削除',
'settings.skills.catalog.page.actions.loadMoreSkills': 'さらに Skill を読み込む',
'settings.skills.catalog.page.loading.catalog': '読み込み中...',
'settings.skills.catalog.page.loading.skills': 'Skill を読み込み中...',
'settings.skills.catalog.page.loading.more': '読み込み中...',
'settings.skills.catalog.page.foundCount': '{count} 個の Skill が見つかりました',
'settings.skills.catalog.page.error.catalogTitle': 'カタログエラー',
'settings.skills.catalog.page.empty.noSkillsTitle': 'Skill が見つかりません',
@@ -897,7 +929,6 @@ export const settingsDict = {
'settings.skills.catalog.page.badge.installed': 'インストール済み ({scope})',
'settings.skills.catalog.page.badge.notInstallable': 'インストール不可',
'settings.skills.catalog.page.badge.unknown': '不明',
'settings.skills.catalog.page.byOwnerPrefix': '提供',
'settings.skills.catalog.page.removeDialog.title': 'カタログを削除',
'settings.skills.catalog.page.removeDialog.description': 'このカタログを削除してもよろしいですか?',
'settings.openchamber.passkeys.title': 'パスキー',
@@ -960,9 +991,9 @@ export const settingsDict = {
'settings.openchamber.desktopNetwork.field.macMenuBarAria': 'macOS のメニューバーに OpenChamber を表示',
'settings.openchamber.desktopNetwork.field.macMenuBar': 'メニューバーに OpenChamber を表示',
'settings.openchamber.desktopNetwork.field.macMenuBarDescription': 'アプリの再起動が必要です。オフにすると、OpenChamber はメニューバー項目を作成せず、セッション、承認、使用量の更新も実行しません。',
'settings.openchamber.desktopNetwork.field.minimizeToTrayAria': 'OpenChamber をシステムトレイへ最小化または閉じる',
'settings.openchamber.desktopNetwork.field.minimizeToTray': 'システムトレイへ最小化または閉じる',
'settings.openchamber.desktopNetwork.field.minimizeToTrayDescription': 'メインウィンドウを最小化または閉じたときも、OpenChamber をシステムトレイで実行し続けます。',
'settings.openchamber.desktopNetwork.field.minimizeToTrayAria': 'OpenChamber をシステムトレイへ閉じる',
'settings.openchamber.desktopNetwork.field.minimizeToTray': 'システムトレイへ閉じる',
'settings.openchamber.desktopNetwork.field.minimizeToTrayDescription': 'メインウィンドウを閉じたときも、OpenChamber をシステムトレイで実行し続けます。最小化した場合はタスクバーに残ります。',
'settings.openchamber.desktopNetwork.field.keepAwakeAria': 'OpenChamber の実行中はコンピューターのスリープを防止',
'settings.openchamber.desktopNetwork.field.keepAwake': 'OpenChamber の実行中はコンピューターのスリープを防止',
'settings.openchamber.desktopNetwork.field.keepAwakeDescription': 'スマートフォンがこのアプリを開き続けられるようにします。ディスプレイはオフにできます。',
@@ -989,15 +1020,22 @@ export const settingsDict = {
'settings.openchamber.desktopNetwork.error.keepAwakeUnsupported': 'このシステムではスリープ防止はサポートされていません',
'settings.openchamber.desktopNetwork.error.keepAwakeSaveFailed': 'スリープ防止設定の更新に失敗しました',
'settings.openchamber.opencodeCli.title': 'OpenCode CLI',
'settings.openchamber.tools.title': 'OpenChamber ツール',
'settings.openchamber.tools.field.agentControlTool': 'エージェント制御ツール',
'settings.openchamber.tools.field.agentControlToolAria': 'エージェント制御ツールを有効にする',
'settings.openchamber.tools.field.agentControlToolInfo': 'エージェントがチャットから作業をオーケストレーションできるようにします。セッションや worktree の作成、他のエージェントへのプロンプト委任、スケジュールタスクの管理が可能です。各セッションに小さなツール説明が追加されます。OpenCode の再起動後に適用されます。',
'settings.openchamber.tools.field.agentWebTool': 'OpenChamber Web ツール',
'settings.openchamber.tools.field.agentWebToolAria': 'OpenChamber Web ツールを有効にする',
'settings.openchamber.tools.field.agentWebToolInfo': 'エージェントが OpenChamber のブラウザーパネルでページを確認し操作できるようにします。URL を開く、内容を読む、クリック、入力、スクロール、モバイルとデスクトップのレイアウト切り替えが可能です。各セッションに小さなツール説明が追加されます。OpenCode の再起動後に適用されます。',
'settings.openchamber.tools.field.agentMemoryTool': 'エージェントメモリツール',
'settings.openchamber.tools.field.agentMemoryToolAria': 'エージェントメモリツール',
'settings.openchamber.tools.field.agentMemoryToolInfo': 'エージェントが学んだことをセッションをまたいで保持できるようにします。保存先は 2 つで、ユーザーについての事実と、各プロジェクトについての事実です。セッションには保存済みのタイトルが渡され、関連する項目をエージェントが読み出せます。オフにするとツール、メモリタブ、セッションインデックスがすべてなくなります。OpenCode の再起動後に反映されます。',
'settings.openchamber.opencodeCli.tooltipPrefix': '以下への絶対パス(任意):',
'settings.openchamber.opencodeCli.tooltipSuffix': 'バイナリ。',
'settings.openchamber.opencodeCli.field.binaryPath': 'OpenCode バイナリパス',
'settings.openchamber.opencodeCli.field.binaryPathPlaceholder': '/Users/you/.bun/bin/opencode',
'settings.openchamber.opencodeCli.field.showUpdateNotifications': 'OpenCode のアップデート通知を表示',
'settings.openchamber.opencodeCli.field.showUpdateNotificationsAria': 'OpenCode のアップデート通知を表示',
'settings.openchamber.opencodeCli.field.agentControlTool': 'エージェント制御ツール',
'settings.openchamber.opencodeCli.field.agentControlToolAria': 'エージェント制御ツールを有効にする',
'settings.openchamber.opencodeCli.field.agentControlToolInfo': 'エージェントがチャットから作業をオーケストレーションできるようにします。セッションや worktree の作成、他のエージェントへのプロンプト委任、スケジュールタスクの管理が可能です。各セッションに小さなツール説明が追加されます。Save + Reload 後に適用されます。',
'settings.openchamber.opencodeCli.actions.browseAria': 'OpenCode バイナリパスを参照',
'settings.openchamber.opencodeCli.actions.browse': '参照',
'settings.openchamber.opencodeCli.actions.saveAndReload': '保存して再読み込み',
@@ -1096,7 +1134,7 @@ export const settingsDict = {
'settings.openchamber.keyboardShortcuts.overwritePrompt': 'このキーコンボは別のショートカットで既に使用されています。上書きしてそのマッピングをクリアしますか?',
'settings.openchamber.keyboardShortcuts.field.pressKeys': 'キーを押してください...',
'settings.openchamber.keyboardShortcuts.error.captureFirst': '最初にショートカットを設定してください。',
'settings.openchamber.keyboardShortcuts.warning.riskyBrowserShortcut': 'このショートカットはブラウザのデフォルトと競合する可能性があります。それでも保存されます。',
'settings.openchamber.keyboardShortcuts.warning.riskyBrowserShortcut': 'このショートカットはブラウザのデフォルトと競合する可能性がありますが、そのまま保存できます。',
'settings.openchamber.keyboardShortcuts.action.open_go_to_line.label': '指定行に移動(ファイルエディター)',
'settings.openchamber.keyboardShortcuts.action.open_command_palette.label': 'コマンドパレットを開く',
'settings.openchamber.keyboardShortcuts.action.focus_input.label': '入力をフォーカス',
@@ -1105,16 +1143,20 @@ export const settingsDict = {
'settings.openchamber.keyboardShortcuts.action.toggle_terminal_expanded.label': 'ターミナル拡大の切替',
'settings.openchamber.keyboardShortcuts.action.add_selection_to_chat.label': '選択範囲をチャットに追加',
'settings.openchamber.keyboardShortcuts.action.toggle_sidebar.label': 'サイドバーの切替',
'settings.openchamber.keyboardShortcuts.action.toggle_right_sidebar.label': 'コンテキストパネルの表示切替',
'settings.openchamber.keyboardShortcuts.action.open_right_sidebar_git.label': 'Git サーフェスを開く',
'settings.openchamber.keyboardShortcuts.action.open_right_sidebar_files.label': 'ファイルサーフェスを開く',
'settings.openchamber.keyboardShortcuts.action.switch_session_tab.label': 'セッションタブを切り替え',
'settings.openchamber.keyboardShortcuts.action.switch_session_tab.suffix': ' + 1…9',
'settings.openchamber.keyboardShortcuts.action.switch_context_surface.label': 'コンテキストパネルのサーフェスを切り替え',
'settings.openchamber.keyboardShortcuts.action.switch_context_surface.suffix': ' + 1…0',
'settings.openchamber.keyboardShortcuts.action.new_chat.label': '新しい Session',
'settings.openchamber.keyboardShortcuts.action.switch_session_previous.label': '前のセッション',
'settings.openchamber.keyboardShortcuts.action.switch_session_next.label': '次のセッション',
'settings.openchamber.keyboardShortcuts.action.rename_current_session.label': '現在のセッション名を変更',
'settings.openchamber.keyboardShortcuts.action.toggle_permission_auto_accept.label': '権限の自動承認を切り替え',
'settings.openchamber.keyboardShortcuts.action.close_session_tab.label': 'セッションタブを閉じる',
'settings.openchamber.keyboardShortcuts.action.new_chat_worktree.label': '新しい Worktree 下書き',
'settings.openchamber.keyboardShortcuts.action.new_mini_chat.label': '新しいミニチャットウィンドウ',
'settings.openchamber.keyboardShortcuts.action.open_help.label': 'キーボードショートカットを開く',
'settings.openchamber.keyboardShortcuts.action.toggle_context_plan.label': '計画コンテキストパネルの切替',
'settings.openchamber.keyboardShortcuts.action.toggle_services_menu.label': 'サービスメニューの切替',
'settings.openchamber.keyboardShortcuts.action.cycle_services_tab.label': 'サービスタブを順に切替',
'settings.openchamber.keyboardShortcuts.action.cycle_theme.label': 'テーマを順に切替',
'settings.openchamber.keyboardShortcuts.action.cycle_agent.label': 'Agent を順に切替',
'settings.openchamber.keyboardShortcuts.action.cycle_favorite_model_forward.label': 'お気に入りモデルを次へ',
@@ -1123,15 +1165,39 @@ export const settingsDict = {
'settings.openchamber.keyboardShortcuts.action.open_model_selector.label': 'モデルセレクターを開く',
'settings.openchamber.keyboardShortcuts.action.open_timeline_dialog.label': '会話タイムラインを開く',
'settings.openchamber.keyboardShortcuts.action.toggle_prompt_navigator.label': 'プロンプトナビゲーターの表示切替',
'settings.openchamber.keyboardShortcuts.warning.contextualPrefix': 'このシーケンスは {action} とコンテキスト依存のプレフィックスを共有しています。そのコンテキストが有効な間は、この操作が優先されます。',
'settings.openchamber.keyboardShortcuts.category.session': 'セッション操作',
'settings.openchamber.keyboardShortcuts.category.models': 'モデルとエージェント',
'settings.openchamber.keyboardShortcuts.category.panels': 'パネルとツール',
'settings.openchamber.keyboardShortcuts.category.navigation': 'ナビゲーション',
'settings.openchamber.keyboardShortcuts.category.application': 'アプリケーション',
'settings.openchamber.keyboardShortcuts.actions.edit': '編集',
'settings.openchamber.keyboardShortcuts.actions.confirm': '確認',
'settings.openchamber.keyboardShortcuts.dialog.title': '{action} を編集',
'settings.openchamber.keyboardShortcuts.dialog.instructions': 'キーの組み合わせを最大2つ入力でき、各組み合わせは最大3キーです。最初の組み合わせの後、2つ目の組み合わせを最大3秒待ちます。適用するには確認、破棄するにはキャンセルを選択してください。Backspace で最後の組み合わせを削除します。',
'settings.openchamber.keyboardShortcuts.dialog.firstChord': '最初の組み合わせ',
'settings.openchamber.keyboardShortcuts.dialog.secondChord': '2番目の組み合わせ',
'settings.openchamber.keyboardShortcuts.dialog.recording': 'キーを押してください…',
'settings.openchamber.keyboardShortcuts.unassigned': '未割り当て',
'settings.openchamber.keyboardShortcuts.error.prefixConflict': '{action} のシーケンスと競合しています。別の組み合わせを選択してください。',
'settings.openchamber.keyboardShortcuts.error.exactConflict': 'この組み合わせは {action} で使用されています。',
'settings.openchamber.keyboardShortcuts.error.internalConflict': 'この組み合わせは組み込みショートカットと競合しています。組み込みショートカットは置き換えられません。',
'settings.openchamber.keyboardShortcuts.action.open_draft_project_picker.label': '下書きプロジェクト選択を開く',
'settings.openchamber.keyboardShortcuts.action.open_draft_worktree_picker.label': '下書きワークツリー選択を開く',
'settings.openchamber.keyboardShortcuts.action.open_session_list.label': '最近のセッションを開く',
'settings.openchamber.keyboardShortcuts.action.toggle_dictation.label': '音声入力',
'settings.projects.sidebar.total': '合計 {count}',
'settings.projects.sidebar.actions.addProject': 'プロジェクトを追加',
'settings.projects.page.empty.noProjects': '利用可能なプロジェクトがありません。',
'settings.projects.page.title.default': 'プロジェクト設定',
'settings.projects.page.section.worktree': 'ワークツリー',
'settings.projects.page.field.projectName': 'プロジェクト名',
'settings.projects.page.field.projectModel': 'プロジェクトのモデル',
'settings.projects.page.field.projectThinking': 'プロジェクトの思考レベル',
'settings.projects.page.section.chatDefaults': '新規チャットの既定値',
'settings.projects.page.section.chatDefaultsDescription': 'このプロジェクトで新しいチャットを始めるときに使われます。未設定ならグローバルの既定値になります。思考レベルは、レベルを持つモデルでのみ表示されます。',
'settings.projects.page.field.projectNamePlaceholder': 'プロジェクト名',
'settings.projects.page.field.defaultModel': '新規チャットのデフォルトモデル',
'settings.projects.page.field.defaultModelDescription': 'このプロジェクトで新しいチャットを開始するときに使用されます。未設定の場合はグローバル既定値にフォールバックします。',
'settings.projects.page.option.thinkingDefault': 'モデルの既定',
'settings.projects.page.field.accentColor': 'アクセントカラー',
'settings.projects.page.field.projectIcon': 'プロジェクトアイコン',
'settings.projects.page.field.projectIconBackgroundAria': 'プロジェクトアイコンの背景色',
@@ -1165,15 +1231,15 @@ export const settingsDict = {
'settings.usage.sidebar.field.displayModePlaceholder': '表示モード',
'settings.usage.sidebar.field.displayModeUsage': '使用量',
'settings.usage.sidebar.field.displayModeRemaining': '残り割り当て',
'settings.usage.sidebar.field.showPredictions': '予測を表示',
'settings.usage.sidebar.status.notSet': '未設定',
'settings.usage.page.empty.selectProvider': '使用量の詳細を表示する Provider を選択してください。',
'settings.usage.page.header.providerUsage': '{provider} の使用量',
'settings.usage.page.header.refreshing': '使用量を更新中...',
'settings.usage.page.header.lastUpdated': '最終更新: {time}',
'settings.usage.page.options.showInHeaderAria': 'ヘッダーメニューに表示',
'settings.usage.page.options.showInHeader': 'ヘッダーメニューに表示',
'settings.usage.page.options.showInHeaderTooltip': '有効にすると、アプリヘッダーのクイックアクセスドロップダウンメニューにこの Provider の使用量が表示されます。',
'settings.usage.page.header.lastUpdatedWithPlan': 'プラン: {plan} · 最終更新: {time}',
'settings.usage.page.options.showInWorkStatusAria': '作業ステータスパネルに表示',
'settings.usage.page.options.showInWorkStatus': '作業ステータスパネルに表示',
'settings.usage.page.options.showInWorkStatusTooltip': '有効にすると、このプロバイダーの使用量が作業ステータスパネルに表示されます。',
'settings.usage.page.state.noData': 'まだ使用量データがありません。',
'settings.usage.page.state.refreshFailedTitle': '使用量データの更新に失敗しました',
'settings.usage.page.state.providerNotConfiguredTitle': 'Provider が設定されていません',
@@ -1200,8 +1266,8 @@ export const settingsDict = {
'settings.remoteInstances.page.section.actionsDescription': '接続、再接続、ログ表示、またはこの接続の削除。',
'settings.remoteInstances.page.section.remoteServer': 'リモートマシン上の OpenChamber',
'settings.remoteInstances.page.section.remoteServerDescription': 'SSH 接続後に OpenChamber をどのように実行するか選択します。',
'settings.remoteInstances.page.section.mainTunnel': 'ローカルアクセス',
'settings.remoteInstances.page.section.mainTunnelDescription': 'このリモート OpenChamber サーバーを開くために使用するローカルアドレスを選択します。',
'settings.remoteInstances.page.section.mainTunnel': 'このコンピュータからのアクセス',
'settings.remoteInstances.page.section.mainTunnelDescription': 'OpenChamber はリモートマシン上で動きます。ここで設定するのは、SSH トンネル経由でそこへつながる、このコンピュータ側のアドレスだけです。',
'settings.remoteInstances.page.section.authentication': '認証',
'settings.remoteInstances.page.section.authenticationDescription': 'SSH およびリモート OpenChamber UI のオプションの認証情報。',
'settings.remoteInstances.page.section.portForwards': 'ポート転送',
@@ -1214,8 +1280,6 @@ export const settingsDict = {
'settings.remoteInstances.page.field.installMethod': 'インストール方法',
'settings.remoteInstances.page.field.installMethodHint': 'このアプリがリモートマシンで OpenChamber を起動する際の配置方法。',
'settings.remoteInstances.page.field.selectInstallMethodPlaceholder': 'インストール方法を選択',
'settings.remoteInstances.page.field.installMethodDownloadRelease': 'リリースをダウンロード',
'settings.remoteInstances.page.field.installMethodUploadBundle': 'バンドルをアップロード',
'settings.remoteInstances.page.field.selectBindHostPlaceholder': 'バインドホストを選択',
'settings.remoteInstances.page.field.sshPasswordOptional': 'SSH パスワード(任意)',
'settings.remoteInstances.page.field.sshPasswordPlaceholder': 'SSH パスワードを入力',
@@ -1239,7 +1303,44 @@ export const settingsDict = {
'settings.remoteInstances.page.actions.enableForwardAria': '転送を有効化',
'settings.remoteInstances.page.actions.openLocal': 'ローカルを開く',
'settings.remoteInstances.page.actions.addForward': '転送を追加',
'settings.remoteInstances.page.import.sectionTitle': '保存された SSH ホスト',
'settings.remoteInstances.page.addDialog.description': 'SSH 設定からホストを選ぶか、接続を自分で入力します。',
'settings.remoteInstances.page.addDialog.sourceLabel': '接続の取得元',
'settings.remoteInstances.page.addDialog.tab.saved': 'SSH 設定から',
'settings.remoteInstances.page.addDialog.tab.manual': '自分で入力',
'settings.remoteInstances.page.addDialog.searchPlaceholder': 'ホストを検索',
'settings.remoteInstances.page.addDialog.emptySaved': 'SSH 設定にホストが見つかりません。接続を自分で入力してください。',
'settings.remoteInstances.page.addDialog.searchEmpty': '検索に一致するホストはありません。',
'settings.remoteInstances.page.addDialog.use': '使用',
'settings.remoteInstances.page.state.notConnected': '未接続',
'settings.remoteInstances.page.state.connecting': '接続中',
'settings.remoteInstances.page.state.ready': '接続済み',
'settings.remoteInstances.page.state.problem': '対応が必要',
'settings.remoteInstances.page.section.advanced': '詳細設定',
'settings.remoteInstances.page.section.advancedHint': 'ポート、インストール方法、パスワード、追加の転送。ほとんどの接続は初期値のままで動作します。',
'settings.remoteInstances.page.field.installMethodAuto': '自動',
'settings.remoteInstances.page.error.hint.noRuntime': 'リモートマシンに bun も npm もありません。どちらかをそこにインストールするか、この接続を「すでに実行中」に切り替えてください。',
'settings.remoteInstances.page.error.hint.noOpencode': 'リモートマシンに opencode CLI がインストールされていません。そこにインストールしてから(opencode.ai を参照)、もう一度接続してください。',
'settings.remoteInstances.page.error.action.setUiPassword': 'UI パスワードを設定',
'settings.remoteInstances.page.error.action.pickRandomPort': '別のローカルポートを使う',
'settings.remoteInstances.page.error.action.setRemotePort': 'リモートポートを設定',
'settings.remoteInstances.page.validation.externalPortRequired': '先にリモートポートを指定してください。「すでに実行中」モードでは、サーバーが待ち受けるポートを OpenChamber が知る必要があります。',
'settings.remoteInstances.page.empty.noInstances': 'SSH 接続はまだありません。',
'settings.remoteInstances.page.field.uiPasswordRequired': 'UI パスワード(必須)',
'settings.remoteInstances.page.field.uiPasswordMissingForLan': 'リモートサーバーがそのネットワークから到達可能な間は必須です。',
'settings.remoteInstances.page.field.remoteLanAccess': 'リモート側ネットワークから到達可能',
'settings.remoteInstances.page.field.remoteLanAccessHint': 'リモートマシンのネットワーク上の他の端末が、SSH トンネルなしでこの OpenChamber を直接開けるようにします。UI パスワードが必要です。',
'settings.remoteInstances.page.field.remoteLanAccessWarning': 'そのネットワーク上の誰もがリモートの OpenChamber に到達できます。守るのは下の UI パスワードだけです。',
'settings.remoteInstances.page.validation.remoteLanNeedsPassword': '先に UI パスワードを設定してください。設定しないと、リモートの OpenChamber はそのネットワークの全端末に開かれます。',
'settings.remoteInstances.page.field.bindHostOption.loopback': 'このコンピュータのみ (127.0.0.1)',
'settings.remoteInstances.page.field.bindHostOption.localhost': 'このコンピュータのみ (localhost)',
'settings.remoteInstances.page.field.bindHostOption.lan': 'ネットワーク上のすべての端末 (0.0.0.0)',
'settings.remoteInstances.page.field.sshPasswordHint': 'SSH 鍵ではなくパスワードを求めるホストの場合だけ必要です。',
'settings.remoteInstances.page.field.uiPasswordHintManaged': 'リモートの OpenChamber 画面を保護するパスワード。OpenChamber が起動するサーバーにこれを設定します。',
'settings.remoteInstances.page.field.uiPasswordHintExternal': 'リモートマシンですでに動いている OpenChamber サーバーにサインインするためのパスワード。',
'settings.remoteInstances.page.tunnelPreview.caption': 'この接続の転送:',
'settings.remoteInstances.page.empty.noInstancesWithOneImport': 'SSH 接続はまだありません。SSH 設定から 1 件のホストをインポートできます。',
'settings.remoteInstances.page.empty.noInstancesWithImports': 'SSH 接続はまだありません。SSH 設定から {count} 件のホストをインポートできます。',
'settings.remoteInstances.page.state.loadingInstances': '接続を読み込み中...',
'settings.remoteInstances.page.import.loading': 'SSH ホストを読み込み中...',
'settings.remoteInstances.page.import.noneFound': 'SSH ホストが見つかりません。',
'settings.remoteInstances.page.import.noneAvailable': 'インポート可能な SSH ホストがありません。',
@@ -1337,13 +1438,18 @@ export const settingsDict = {
'settings.providers.page.custom.title': 'カスタムプロバイダー',
'settings.providers.page.custom.editTitle': 'カスタムプロバイダーを編集',
'settings.providers.page.custom.description': 'ベース URL・認証情報・モデル一覧を指定して、OpenAI 互換プロバイダーを追加します。OpenCode 設定に保存され、他のプロバイダーと同様にチャットで使えます。',
'settings.providers.page.custom.description': 'ベース URL、認証情報、モデル一覧、対応 API プロトコルを指定してプロバイダーを追加します。チャットで使えるよう OpenCode 設定に保存されます。',
'settings.providers.page.custom.field.providerID.label': 'プロバイダー ID',
'settings.providers.page.custom.field.providerID.placeholder': 'my-provider',
'settings.providers.page.custom.field.providerID.info': '小文字・数字・ハイフン・アンダースコア。OpenCode のプロバイダー ID として使われます。',
'settings.providers.page.custom.field.name.label': '表示名',
'settings.providers.page.custom.field.name.placeholder': 'My Provider',
'settings.providers.page.custom.field.name.info': 'プロバイダーおよびモデル選択に表示されます。',
'settings.providers.page.custom.field.protocol.label': 'API プロトコル',
'settings.providers.page.custom.field.protocol.info': 'この API が実装しているリクエスト形式を選択します。',
'settings.providers.page.custom.field.protocol.openaiChat': 'OpenAI Chat Completions',
'settings.providers.page.custom.field.protocol.openaiResponses': 'OpenAI Responses',
'settings.providers.page.custom.field.protocol.anthropicMessages': 'Anthropic Messages',
'settings.providers.page.custom.field.baseURL.label': 'ベース URL',
'settings.providers.page.custom.field.baseURL.placeholder': 'https://api.example.com/v1',
'settings.providers.page.custom.field.baseURL.info': 'OpenAI 互換 API のベース URL。http:// または https:// で始めてください。',
@@ -1392,6 +1498,17 @@ export const settingsDict = {
'settings.providers.page.auth.apiKeyPlaceholder': 'sk-...',
'settings.providers.page.auth.oauthMethodFallback': 'OAuth 方法 {index}',
'settings.providers.page.auth.pasteAuthorizationCodePlaceholder': '認証コードを貼り付け',
'settings.providers.page.auth.oauth.starting': '認証を開始しています…',
'settings.providers.page.auth.oauth.waiting': '認証を待っています…',
'settings.providers.page.auth.oauth.waitingHint': 'ブラウザーでサインインを完了してください。このページは開いたままにしてください。接続は自動的に完了します。',
'settings.providers.page.auth.oauth.codeHint': 'ブラウザーから認証コードをコピーして、ここに貼り付けてください。',
'settings.providers.page.auth.oauth.deviceCodeLabel': 'デバイスコード',
'settings.providers.page.auth.oauth.linkLabel': '認証リンク',
'settings.providers.page.auth.oauth.promptRequired': '続行するには「{field}」を入力してください',
'settings.providers.page.auth.oauth.error.sessionExpired': '認証リクエストの有効期限が切れました。もう一度接続してやり直してください。',
'settings.providers.page.auth.oauth.error.codeRequired': 'このプロバイダーにはブラウザーの認証コードが必要です。',
'settings.providers.page.auth.oauth.error.declined': '認証が拒否されたか、完了しませんでした。',
'settings.providers.page.auth.oauth.error.invalidInput': '入力された内容は拒否されました。',
'settings.providers.page.auth.connected': '接続済み',
'settings.providers.page.auth.incomplete': '認証情報が不足しています',
'settings.providers.page.auth.incompleteHint': '· チャットでこのプロバイダーを使う前に API キーまたは {env:VAR} を追加してください',
@@ -1424,6 +1541,9 @@ export const settingsDict = {
'settings.providers.page.actions.open': '開く',
'settings.providers.page.actions.copy': 'コピー',
'settings.providers.page.actions.complete': '完了',
'settings.providers.page.actions.continue': '続行',
'settings.providers.page.actions.cancel': 'キャンセル',
'settings.providers.page.actions.tryAgain': '再試行',
'settings.providers.page.actions.hide': '非表示',
'settings.providers.page.actions.reconnect': '再接続',
'settings.providers.page.actions.edit': '編集',
@@ -1439,7 +1559,6 @@ export const settingsDict = {
'settings.providers.page.toast.apiKeySaved': 'API キーを保存しました',
'settings.providers.page.toast.oauthStartFailed': 'OAuth フローの開始に失敗しました',
'settings.providers.page.toast.oauthDetailsMissing': 'OAuth の詳細が返されませんでした',
'settings.providers.page.toast.completeOAuthInBrowser': 'ブラウザで OAuth フローを完了してください',
'settings.providers.page.toast.oauthCompleteFailed': 'OAuth フローの完了に失敗しました',
'settings.providers.page.toast.oauthCompleted': 'OAuth 接続が完了しました',
'settings.providers.page.toast.oauthLinkCopied': 'OAuth リンクをコピーしました',
@@ -1461,6 +1580,8 @@ export const settingsDict = {
'settings.mcp.page.status.label.failed': '失敗',
'settings.mcp.page.status.label.needsAuth': '認証が必要',
'settings.mcp.page.status.label.needsRegistration': '登録が必要',
'settings.mcp.page.status.label.awaitingRestart': '再起動待ち',
'settings.mcp.page.status.description.awaitingRestart': 'このサーバーは保存されていますが、まだ適用されていません。「Apply & Restart」で OpenCode に読み込むと、接続と認可が利用できるようになります。',
'settings.mcp.page.status.description.connected': '接続済み。OpenCode がツールとリソースを検出できます。',
'settings.mcp.page.status.description.failedDefault': 'OpenCode がこの MCP サーバーに到達できませんでした。',
'settings.mcp.page.status.description.needsAuth': 'このリモート MCP サーバーは接続する前に認証が必要です。',
@@ -1825,9 +1946,6 @@ export const settingsDict = {
'settings.voice.page.field.ttsInputModeSummarized': '要約',
'settings.openchamber.visual.section.colorMode': 'カラーモード',
'settings.openchamber.visual.section.colorModeAndTheme': 'カラーモードとテーマ',
'settings.openchamber.visual.section.mobileLayout': 'モバイルレイアウト',
'settings.openchamber.visual.option.mobileLayout.default': '旧',
'settings.openchamber.visual.option.mobileLayout.new': '新',
'settings.openchamber.visual.section.localization': 'ローカライゼーション',
'settings.openchamber.visual.section.spacingAndLayout': '間隔とレイアウト',
'settings.openchamber.visual.section.densityAndType': '密度と書体',
@@ -1844,6 +1962,10 @@ export const settingsDict = {
'settings.openchamber.visual.section.showToolsOpenedByDefault': 'デフォルトで開くツールを表示',
'settings.openchamber.visual.section.sessionAssistance': 'セッション支援',
'settings.openchamber.visual.section.reasoning': '推論',
'settings.openchamber.visual.section.streaming': 'ストリーミング',
'settings.openchamber.visual.field.streamingAutoFollow': '応答のストリーミング中に新しい内容を追従',
'settings.openchamber.visual.field.streamingAutoFollowAria': '応答のストリーミング中に新しい内容へ自動スクロールする',
'settings.openchamber.visual.field.streamingAutoFollowInfo': '応答の受信中、ビューは常に最新の内容へスクロールします。オフにするとビューは動かず、手動でスクロールできます。その場合、チャットの途中からメッセージを送信してもビューは移動しません。',
'settings.openchamber.visual.section.messageAppearance': 'メッセージの外観',
'settings.openchamber.visual.section.toolsAndFiles': 'ツールとファイル',
'settings.openchamber.visual.section.composer': '入力欄',
@@ -1865,8 +1987,6 @@ export const settingsDict = {
'settings.openchamber.visual.field.selectWeekStartAria': '週の開始日を選択',
'settings.openchamber.visual.actions.reloadThemes': 'テーマを再読み込み',
'settings.openchamber.visual.actions.reloadingThemes': 'テーマを再読み込み中...',
'settings.openchamber.visual.field.macVibrancy': 'ウィンドウ透過',
'settings.openchamber.visual.field.macVibrancyHint': 'サイドバーの背後に macOS ネイティブのぼかし(Vibrancy)を使用します。完全に不透明なサーフェスにする場合はオフにします。',
'settings.openchamber.visual.field.dockBadge': 'Dock バッジ',
'settings.openchamber.visual.field.dockBadgeHint': '未読のアクティビティがあるチャットの数を macOS の Dock アイコンに表示します。',
'settings.openchamber.visual.actions.saveAndRestart': '保存して再起動',
@@ -1912,6 +2032,10 @@ export const settingsDict = {
'settings.openchamber.visual.actions.resetInputBarOffsetAria': '入力バーオフセットをリセット',
'settings.openchamber.visual.field.terminalQuickKeysAria': 'ターミナルクイックキー',
'settings.openchamber.visual.field.terminalQuickKeys': 'ターミナルクイックキー',
'settings.openchamber.visual.field.sessionTabsGroup': 'セッションタブ',
'settings.openchamber.visual.field.sessionTabs': 'ヘッダーにセッションをタブとして表示',
'settings.openchamber.visual.field.sessionTabsAria': 'ヘッダーのセッションタブを切り替え',
'settings.openchamber.visual.field.sessionTabsInfo': '開いたセッションがヘッダーにタブとして並びます。オフにするとヘッダーはセッションタイトルのみ表示します。',
'settings.openchamber.visual.field.terminalQuickKeysTooltip': 'ターミナルビューに Esc、Ctrl、矢印を表示',
'settings.openchamber.visual.field.fileEditorKeymap': 'ファイルエディターキーマップ',
'settings.openchamber.visual.option.fileEditorKeymap.default': 'デフォルト',
@@ -1944,8 +2068,6 @@ export const settingsDict = {
'settings.openchamber.visual.field.stickyUserHeader': 'ユーザーヘッダー固定',
'settings.openchamber.visual.field.promptNavigatorEnabledAria': 'プロンプトナビゲーター',
'settings.openchamber.visual.field.promptNavigatorEnabled': 'プロンプトナビゲーター',
'settings.openchamber.visual.field.expandedEditorToolbarAria': 'エディターツールバーを常に表示',
'settings.openchamber.visual.field.expandedEditorToolbar': 'エディターツールバーを常に表示(ファイルタブの下にドッキング)',
'settings.openchamber.visual.field.autoSaveEnabledAria': 'ファイルの自動保存',
'settings.openchamber.visual.field.autoSaveEnabled': 'ファイルの自動保存',
'settings.openchamber.visual.field.autoSaveEnabledInfo': '入力を止めた後にファイルの編集内容を自動保存します。無効にすると手動保存が必要になります。',
@@ -2105,4 +2227,5 @@ export const settingsDict = {
'settings.openchamber.visual.field.followUpBehaviorDescription': 'エージェントが応答している間にフォローアップメッセージで Enter を押したときの動作を選択します。',
'settings.openchamber.visual.option.followUpBehavior.steer.label': 'ステア',
'settings.openchamber.visual.option.followUpBehavior.queue.label': 'キュー',
...thirdPartyIntegrationI18n.ja,
} as const;
+377 -39
View File
@@ -6,6 +6,19 @@ export const dict: Record<I18nKey, string> = {
'terminalView.actions.attachSelection': '選択した出力を添付',
'terminalView.actions.restart': 'ターミナルを再起動',
'chat.message.terminalContext': '{terminal}、{start}〜{end}行',
'chat.message.context.codeComment': '{file} の {start}〜{end} 行へのコメント',
'chat.message.context.codeCommentLine': '{file} の {line} 行へのコメント',
'chat.message.context.chatQuote': '以前のメッセージからの引用',
'chat.message.context.fileQuote': '{file} からの選択',
'chat.chatInput.chatQuoteContext': 'チャット引用',
'chat.chatInput.chatQuoteContextRemove': 'チャット引用を削除',
'chat.chatInput.contextPreview.selectedLabel': '選択したテキスト',
'chat.chatInput.contextPreview.commentLabel': 'ユーザーのコメント',
'chat.chatInput.contextPreview.edit': 'コメントを編集',
'chat.chatInput.contextPreview.remove': '削除',
'chat.message.context.browserAnnotation': 'ブラウザ注釈({page})',
'chat.message.context.prComment': 'GitHub PR コメント({label})',
'chat.message.context.prCheck': '失敗した GitHub PR チェック({label})',
'chat.chatInput.terminalContext': '{terminal}、{start}〜{end}行',
'chat.chatInput.terminalContextRemove': 'ターミナルコンテキストを削除',
'chat.chatInput.prCommentContext': 'PRコメント',
@@ -25,6 +38,7 @@ export const dict: Record<I18nKey, string> = {
'common.language.korean': '韓国語',
'common.language.polish': 'ポーランド語',
'common.language.japanese': '日本語',
'common.language.turkish': 'トルコ語',
'common.revealPath.finder': 'Finderで表示',
'common.revealPath.fileExplorer': 'エクスプローラーで開く',
'common.revealPath.fileManager': 'ファイルマネージャーで開く',
@@ -86,6 +100,11 @@ export const dict: Record<I18nKey, string> = {
'mobile.instances.status.connectedDirect': '接続中 · ローカルネットワーク',
'mobile.instances.status.connectedRelay': '接続中 · プライベートリレー',
'mobile.instances.saveEdit': '変更を保存',
'mobile.connectionDebug.title': '接続ログ',
'mobile.connectionDebug.copy': 'コピー',
'mobile.connectionDebug.copied': 'コピーしました',
'mobile.connectionDebug.close': '閉じる',
'mobile.connectionDebug.empty': '接続イベントはまだありません。',
'mobile.instances.cancelEdit': 'キャンセル',
'mobile.instances.edit': '編集',
'mobile.instances.delete': '削除',
@@ -112,6 +131,7 @@ export const dict: Record<I18nKey, string> = {
'mobile.sessions.section.worktrees': 'ワークツリー',
'mobile.sessions.section.otherProjects': 'プロジェクトを切り替え',
'mobile.sessions.section.projects': 'プロジェクト',
'mobile.sessions.section.chats': 'チャット',
'mobile.sessions.empty.noProjectsTitle': 'まだプロジェクトがありません',
'mobile.sessions.empty.noProjectsDescription': 'プロジェクトを追加してコードとチャットを始めましょう。',
'mobile.sessions.empty.noSessionsTitle': 'まだセッションがありません',
@@ -232,8 +252,10 @@ export const dict: Record<I18nKey, string> = {
'sessions.scheduledTasks.dialog.toast.deleted': 'スケジュールタスクを削除しました',
'sessions.scheduledTasks.dialog.toast.deleteFailed': 'タスクの削除に失敗しました',
'sessions.scheduledTasks.dialog.toast.started': 'タスクを開始しました',
'sessions.scheduledTasks.dialog.toast.startedPersistWarning': 'タスクは開始されましたが、状態を保存できませんでした。次回の正常実行まで「実行中」と表示される場合があります。',
'sessions.scheduledTasks.dialog.toast.runFailed': 'タスクの実行に失敗しました',
'sessions.scheduledTasks.dialog.confirm.deleteTask': 'スケジュールタスク「{taskName}」を削除しますか?',
'sessions.scheduledTasks.dialog.confirm.deleteLoopFile': 'ループタスク「{taskName}」とその Markdown ファイルを削除しますか?',
'sessions.scheduledTasks.dialog.schedule.daily': '毎日 {time}',
'sessions.scheduledTasks.dialog.schedule.dailyWithTimezone': '毎日 {time}({timezone})',
'sessions.scheduledTasks.dialog.schedule.weekly': '毎週 {days} {time}',
@@ -269,6 +291,9 @@ export const dict: Record<I18nKey, string> = {
'sessions.scheduledTasks.dialog.taskToggle.pauseAria': '{taskName}を一時停止',
'sessions.scheduledTasks.dialog.taskToggle.enabled': '有効',
'sessions.scheduledTasks.dialog.taskToggle.paused': '一時停止中',
'sessions.scheduledTasks.dialog.loopFile.note': 'ループファイル {file} によって管理',
'sessions.scheduledTasks.dialog.loopFile.toggleDisabled': '有効状態はループファイルが制御します。Markdown フロントマターで enabled を設定してください',
'sessions.scheduledTasks.dialog.loopFile.actionsDisabled': 'ループタスクは .agents/loops の Markdown ファイルで設定します',
'sessions.scheduledTasks.editor.title.edit': 'スケジュールタスクを編集',
'sessions.scheduledTasks.editor.title.new': '新しいスケジュールタスク',
'sessions.scheduledTasks.editor.description': '新しいセッションを作成しプロンプトを送信するサーバーサイドタスクを設定します。',
@@ -361,7 +386,7 @@ export const dict: Record<I18nKey, string> = {
'multirun.launcher.attachments.attach': '添付',
'multirun.launcher.attachments.tooltip': '同じファイルをすべての実行に送信',
'multirun.launcher.models.label': 'モデル',
'multirun.launcher.models.info': '2~{max}モデルを選択。同じモデルを複数回追加できます。',
'multirun.launcher.models.info': '2つ以上のモデルを選択。同じモデルを複数回追加できます。',
'multirun.launcher.toast.fileTooLarge': 'ファイル「{fileName}」が大きすぎます(最大10MB)',
'multirun.launcher.toast.attachFailed': '「{fileName}」の添付に失敗しました',
'multirun.launcher.toast.attachedSingle': '{count}ファイルを添付しました',
@@ -428,9 +453,16 @@ export const dict: Record<I18nKey, string> = {
'sessions.sidebar.empty.noMatches.title': '一致するセッションがありません',
'sessions.sidebar.empty.noMatches.description': '別のタイトル、ブランチ、フォルダ、パスをお試しください。',
'sessions.sidebar.activity.recentTitle': '最近',
'sessions.sidebar.activity.chatsTitle': 'チャット',
'sessions.sidebar.activity.chatsEmpty': 'まだチャットはありません。',
'chat.chatInput.chooseProject': 'プロジェクトを選択',
'sessions.archivePage.allDirectories': 'すべてのディレクトリ',
'sessions.sidebar.header.displayMode.stickyHeaders': 'プロジェクトヘッダーを固定',
'sessions.sidebar.header.grouping.label': 'セッションのグループ化',
'sessions.sidebar.header.projectDisplay.label': 'プロジェクト表示',
'sessions.sidebar.header.projectDisplay.all': 'すべてのプロジェクト',
'sessions.sidebar.header.projectDisplay.single': '1つのプロジェクト',
'sessions.sidebar.project.selectAria': 'プロジェクトを選択、現在は{project}',
'sessions.sidebar.header.grouping.byWorktree': 'ワークツリー別',
'sessions.sidebar.header.grouping.flat': 'フラットリスト',
'sessions.sidebar.project.actions.manageWorktrees': 'ワークツリーを管理',
@@ -452,6 +484,10 @@ export const dict: Record<I18nKey, string> = {
'sessions.archivePage.deleteSessionAria': '{title} を削除',
'sessions.archivePage.restoreSessionAria': '{title} を復元',
'sessions.switcher.openAria': 'セッションスイッチャーを開く',
'header.sessionTabs.stripAria': '開いているセッション',
'header.sessionTabs.tabMenuAria': 'セッションタブの操作',
'header.sessionTabs.closeTab': 'タブを閉じる',
'header.sessionTabs.closeOtherTabs': '他のタブを閉じる',
'sessions.switcher.empty': '最近のセッションはありません',
'sessions.switcher.draftTitle': '新しいセッション',
'sessions.sidebar.updateCheck.errorTitle': '更新の確認に失敗しました',
@@ -503,11 +539,33 @@ export const dict: Record<I18nKey, string> = {
'sessions.sidebar.session.menu.unshare': '共有解除',
'sessions.sidebar.session.menu.exportMarkdown': 'Markdownでエクスポート',
'sessions.sidebar.session.menu.moveToWorktree': '新しいworktreeへ移動',
'sessions.sidebar.session.menu.moveToWorktreeTargets': 'worktreeへ移動',
'sessions.sidebar.session.menu.newWorktree': '新しいworktree...',
'sessions.sidebar.session.moveToWorktree.success': 'セッションを新しいworktreeへ移動しました',
'sessions.sidebar.session.moveToWorktree.failed': 'セッションを新しいworktreeへ移動できませんでした',
'sessions.sidebar.session.moveToWorktree.tooltip': '現在のブランチから新しいworktreeを作成し、未コミットの変更とこのセッションおよびサブセッションを移動します。',
'sessions.sidebar.session.moveToWorktree.main': 'メインworktree',
'sessions.sidebar.session.moveToWorktree.refreshing': 'worktreeを更新しています...',
'sessions.sidebar.session.moveToWorktree.loadFailed': 'worktreeを読み込めませんでした',
'sessions.sidebar.session.moveToWorktree.current': '現在のworktree',
'sessions.sidebar.session.moveToWorktree.existingSuccess': 'セッションをworktreeへ移動しました',
'sessions.sidebar.session.moveToWorktree.existingFailed': 'セッションをworktreeへ移動できませんでした',
'sessions.sidebar.session.moveToWorktree.tooltipTargets': '既存のworktreeと、このセッション用に新しいworktreeを作成するオプションを表示します。',
'sessions.sidebar.session.moveToWorktree.tooltip': '現在のブランチから新しいworktreeを作成し、このセッションとサブセッションをそこへ移動します。ソースに未コミットの変更がある場合は、移動するかどうかを選択します。',
'sessions.sidebar.session.moveToWorktree.tooltipBusy': 'セッションがアイドル状態のときに利用できます。現在の処理を停止するか、完了するまでお待ちください。',
'sessions.sidebar.session.moveToWorktree.tooltipMoving': 'このセッションはすでに新しいworktreeへ移動中です。',
'sessions.sidebar.session.moveToWorktree.confirm.title': 'ソースに未コミットの変更があります',
'sessions.sidebar.session.moveToWorktree.confirm.changedFiles': 'このworktree内の変更されたファイル: {count}。',
'sessions.sidebar.session.moveToWorktree.confirm.ownership': 'OpenCodeはこれらの変更をセッションではなくディレクトリ単位で追跡します。',
'sessions.sidebar.session.moveToWorktree.confirm.sessionOnlyHelp': 'ソースファイルを一切変更せずに、このセッションとサブセッションを移動します。',
'sessions.sidebar.session.moveToWorktree.confirm.allChangesHelp': 'セッションディレクトリ配下の変更を転送します。ステージされていない・追跡されていないファイルは成功後にソースを離れます。',
'sessions.sidebar.session.moveToWorktree.confirm.stagedWarning': 'ステージ済みの変更はソースに残り、宛先へコピーされます。',
'sessions.sidebar.session.moveToWorktree.confirm.baseWarning': '宛先が異なるGitベースを使用している場合、転送に失敗することがあります。',
'sessions.sidebar.session.moveToWorktree.confirm.sessionOnly': 'セッションのみ移動',
'sessions.sidebar.session.moveToWorktree.confirm.allChanges': 'ソースの変更をすべて移動',
'sessions.sidebar.session.moveToWorktree.confirm.cancel': 'キャンセル',
'sessions.sidebar.session.moveToWorktree.sourceVerificationFailed': 'ソースの変更を検証できませんでした。worktreeもセッションも変更されませんでした。',
'sessions.sidebar.session.moveToWorktree.applyChangesFailed': '宛先がソースの変更を受け付けられませんでした。セッションもソースの変更も移動されていません。再試行して「セッションのみ移動」を選んでください。',
'sessions.sidebar.session.moveToWorktree.changesMayBeInDestination': '移動が宛先で確定する前に接続が切れました。セッションは移動していない可能性があり、コミットしていない変更はすでに移動先のワークツリーにあるかもしれません。再試行する前に確認してください。',
'sessions.sidebar.session.menu.runFusion': 'フュージョンを実行',
'sessions.sidebar.session.menu.openInSidePanel': 'サイドパネルで開く',
'sessions.sidebar.session.actions.openInEditor': 'エディターで開く',
@@ -531,6 +589,10 @@ export const dict: Record<I18nKey, string> = {
'sessions.sidebar.session.status.pinned': 'ピン留めされたセッション',
'sessions.sidebar.session.status.movingToWorktree': 'セッションを新しいworktreeへ移動中',
'sessions.sidebar.session.status.permissionRequired': '権限が必要です',
'sessions.sidebar.session.status.questionPendingSingle': '保留中の質問が1件あります',
'sessions.sidebar.session.status.questionPendingMany': '保留中の質問が{count}件あります',
'sessions.sidebar.session.status.activeFor': 'アクティブ時間 {duration}',
'sessions.sidebar.session.status.lastTurnDuration': '前回のターンの所要時間 {duration}',
'sessions.sidebar.session.subsessions.collapse': 'サブセッションを折りたたむ',
'sessions.sidebar.session.subsessions.expand': 'サブセッションを展開',
'sessions.sidebar.dialogs.deleteSession.title': 'セッションを削除しますか?',
@@ -980,6 +1042,8 @@ export const dict: Record<I18nKey, string> = {
'gitView.pr.field.draft': '下書き',
'gitView.pr.field.title': 'タイトル',
'gitView.pr.githubNotConnected': 'GitHubが接続されていません',
'gitView.pr.history.merged': 'PR #{number} は {base} にマージされました。',
'gitView.pr.history.closed': 'PR #{number} はクローズされました。',
'gitView.pr.loadingDescription': '説明を読み込み中...',
'gitView.pr.mergeMethod.merge': 'マージコミットを作成',
'gitView.pr.mergeMethod.rebase': 'リベースしてマージ',
@@ -1096,11 +1160,20 @@ export const dict: Record<I18nKey, string> = {
'contextPanel.mode.context': 'コンテキスト',
'contextPanel.mode.preview': 'プレビュー',
'contextPanel.mode.browser': 'ブラウザ',
'contextRail.configure.open': 'パネルを設定',
'contextRail.configure.dialogTitle': 'レールのパネル',
'contextRail.configure.dialogDescription': 'レールに表示するパネルを選択します。非表示のパネルもデータは保持され、コマンドパレットから引き続き開けます。',
'contextRail.configure.showAll': 'すべて表示',
'contextRail.configure.noneWarning': 'すべてのパネルが非表示です。',
'contextRail.aria.rail': 'パネルサーフェス',
'contextPanel.editorEmpty.title': 'ファイルが開かれていません',
'contextPanel.editorEmpty.description': 'ツリーからファイルを選んで編集を始めましょう。',
'contextRail.surface.editor.description': 'プロジェクトのファイルを編集',
'contextRail.surface.git.description': 'コミット・ブランチ・プルリクエスト',
'contextRail.surface.git.changesCountAriaSingle': '{label}、変更ファイル{count}件',
'contextRail.surface.git.changesCountAriaPlural': '{label}、変更ファイル{count}件',
'contextRail.surface.git.changesCountTooltipSingle': '変更ファイル{count}件',
'contextRail.surface.git.changesCountTooltipPlural': '変更ファイル{count}件',
'contextRail.surface.terminal.description': '内蔵ターミナル',
'contextRail.surface.diff.description': '作業中の変更をレビュー',
'contextPanel.mode.walkthrough': 'ウォークスルー',
@@ -1140,8 +1213,11 @@ export const dict: Record<I18nKey, string> = {
'walkthrough.toc.moreFiles': 'その他のファイル: {count}',
'walkthrough.toc.uncovered': '未対応: {count}',
'walkthrough.toc.resize': '目次の列幅を変更',
'walkthrough.importance.critical': '重要',
'walkthrough.importance.critical': '主要な変更',
'walkthrough.importance.criticalHint': 'このステップが変更全体を動かしているため、じっくり読んでください。コードで見つかった問題ではありません。',
'walkthrough.importance.context': '補足',
'walkthrough.importance.contextHint': '全体を理解するために添えられた補助的な変更です。',
'walkthrough.help.guide': 'ウォークスルーの仕組み',
'walkthrough.blocked.noModel.title': '利用できるスモールモデルがありません',
'walkthrough.blocked.noModel.description': 'レビューを生成するにはモデルプロバイダーにサインインしてください。',
'walkthrough.blocked.emptyDiff.title': 'レビュー対象がありません',
@@ -1156,22 +1232,77 @@ export const dict: Record<I18nKey, string> = {
'walkthrough.blocked.outputExhausted.descriptionUnknownModel': 'スモールモデルは出力枠をすべて推論に使い、回答を返しませんでした。推論モデルは大きな差分でよくこうなります。推論の少ないモデルを選ぶか、対象範囲を絞ってください。',
'walkthrough.blocked.onlyGenerated.title': '生成ファイルのみが変更されています',
'walkthrough.blocked.onlyGenerated.description': 'ここでの変更はロックファイルなどツールが生成した出力だけで、レビューは意図的にこれらを対象外にしています。',
'walkthrough.blocked.serverUnsupported.title': 'このサーバーはウォークスルーに対応していません',
'walkthrough.blocked.serverUnsupported.description': 'このアプリが接続している OpenChamber サーバーはウォークスルー API に応答しませんでした。つまりアプリより古いバージョンです。サーバーを 1.18 以降に更新してから再読み込みしてください。',
'walkthrough.blocked.contextTooSmall.descriptionUnknownModel': 'スモールモデルが扱えるのは約 {available} 千文字ですが、この差分には約 {required} 千文字が必要です。切り詰めは行いません。コンテキストの大きいモデルを選んでください。',
'walkthrough.blocked.structuredOutput.descriptionUnknownModel': 'スモールモデルはウォークスルーに必要な構造化応答をサポートしていません。',
'contextRail.surface.plan.description': '現在のプランを表示',
'contextRail.surface.pr.description': '現在のブランチのプルリクエストを作成・確認・マージ',
'contextRail.surface.notes.description': 'プロジェクトのノート・ToDo・プラン',
'contextRail.surface.notes.description': 'プロジェクトのメモ、ToDo、プラン、エージェントのメモリ',
'contextRail.surface.context.description': 'セッションのコンテキストとトークン使用量',
'contextRail.surface.browser.description': '内蔵ウェブブラウザ',
'contextRail.surface.preview.description': '開発サーバーのプレビュー',
'contextRail.surface.chat.description': '並べて開いたセッション',
'contextRail.surface.notes': 'プロジェクトノート',
'contextRail.surface.notes': 'プロジェクトナレッジ',
'contextRail.editorTree.toggle': 'ファイルツリーの表示切替',
'contextPanel.browser.open': 'ブラウザパネルを開く',
'contextPanel.browser.addressAria': 'ブラウザアドレス',
'contextPanel.browser.history.label': '最近のアドレス',
'contextPanel.browser.history.forget': '履歴から削除',
'contextPanel.browser.newTab': '新しいブラウザタブ',
'contextPanel.browser.empty': 'ウェブブラウザ',
'contextPanel.browser.emptyHint': '上のアドレスバーにURLを入力してウェブを閲覧',
'contextPanel.browser.inspectUnavailable': 'このページはブラウザパネルから検査できません。',
'contextPanel.browser.back': '戻る',
'contextPanel.browser.forward': '進む',
'contextPanel.browser.reload': '再読み込み',
'contextPanel.browser.hardReload': 'キャッシュを無視して再読み込み',
'contextPanel.browser.zoomIn': '拡大',
'contextPanel.browser.zoomOut': '縮小',
'contextPanel.browser.zoomReset': 'ズームをリセット',
'contextPanel.browser.clearCookies': 'Cookie を削除',
'contextPanel.browser.clearCache': 'キャッシュを削除',
'contextPanel.browser.clearedCookies': 'Cookie を削除しました',
'contextPanel.browser.clearedCache': 'キャッシュを削除しました',
'contextPanel.browser.clearFailed': '閲覧データを削除できませんでした',
'contextPanel.browser.stop': '停止',
'contextPanel.browser.openExternal': 'システムブラウザで開く',
'contextPanel.browser.devTools': 'DevTools を開く',
'contextPanel.browser.deviceToolbar': 'デバイスツールバー',
'contextPanel.browser.device.preset': 'デバイスプリセット',
'contextPanel.browser.device.responsive': 'レスポンシブ',
'contextPanel.browser.device.width': 'ビューポートの幅',
'contextPanel.browser.device.height': 'ビューポートの高さ',
'contextPanel.browser.device.rotate': '回転',
'contextPanel.browser.device.schemeSystem': '自動',
'contextPanel.browser.device.schemeLight': 'ライト',
'contextPanel.browser.device.schemeDark': 'ダーク',
'contextPanel.browser.device.schemeFailed': 'ページの外観を変更できませんでした',
'contextPanel.browser.frameTitle': 'ブラウザ',
'contextPanel.browser.loadFailed': 'このページを読み込めませんでした',
'contextPanel.browser.waitingForServer': '開発サーバーを待っています',
'contextPanel.browser.waitingForServerHint': 'まだ接続を受け付けていません。受け付け次第このページを読み込みます。',
'contextPanel.browser.tunnelFailed': 'この開発サーバーに接続できませんでした',
'contextPanel.browser.tunnelFailedHint': '{url} は OpenChamber が動いているマシン上にあり、そこへの接続を開けませんでした。あなたのマシンの内容はここには表示されません。',
'contextPanel.browser.loadFailedUnknown': 'ページに到達できませんでした。',
'contextPanel.browser.crashed': 'このページは応答しなくなりました',
'contextPanel.browser.crashedHint': 'ページが繰り返しクラッシュしました。再読み込みして、もう一度お試しください。',
'contextPanel.browser.devServers.title': '実行中の開発サーバー',
'projectActions.toast.multipleServers': '複数のサーバーが起動しました。ブラウザパネルで選んでください',
'contextPanel.browser.devServers.justStarted': '起動したばかり',
'contextPanel.browser.devServers.unavailable': '実行中の開発サーバーを確認できませんでした。',
'contextPanel.browser.devServers.remoteOnly': 'これらは OpenChamber を動かしているマシン上で動作しています。開くにはデスクトップアプリが必要です。',
'contextPanel.browser.annotate.toggle': 'ページに注釈を付ける',
'contextPanel.browser.annotate.intro': 'これはアプリ内ブラウザで注釈を付けた選択範囲です。',
'contextPanel.browser.annotate.attached': '注釈をチャットに添付しました',
'contextPanel.browser.annotate.noSession': '注釈を添付する前にチャットセッションを開いてください',
'contextPanel.browser.annotate.noPage': '注釈を付ける前にページを読み込んでください',
'contextPanel.browser.annotate.failed': 'このページに注釈を付けられませんでした',
'contextPanel.browser.annotate.tool.element': '要素',
'contextPanel.browser.annotate.tool.region': '範囲',
'contextPanel.browser.annotate.tool.draw': '描画',
'contextPanel.browser.annotate.commentPlaceholder': '変更内容を記述...',
'contextPanel.browser.annotate.submit': '添付',
'contextPanel.browser.trustNotice': 'ここで開かれたページはOpenChamberへの完全なアクセス権を持ちます — 検査とスクリーンショットに必要です。信頼できるサイトのみを開いてください: 悪意のあるページがデータを読み取ったりあなたの代わりに行動したりする可能性があります。',
'contextPanel.tab.closeTabAria': '{label}タブを閉じる',
'contextPanel.actions.collapsePanel': 'パネルを折りたたむ',
@@ -1240,6 +1371,14 @@ export const dict: Record<I18nKey, string> = {
'sidebarFilesTree.toast.writeNotSupported': '書き込みはサポートされていません',
'sidebarFilesTree.toast.fileCreated': 'ファイルを作成しました',
'sidebarFilesTree.toast.operationFailed': '操作に失敗しました',
'sidebarFilesTree.toast.uploaded': 'ファイルをアップロードしました',
'sidebarFilesTree.toast.uploadedWithoutConflicts': '競合のないファイルをアップロードしました',
'sidebarFilesTree.toast.uploadFailed': '一部のファイルをアップロードできませんでした',
'sidebarFilesTree.drop.target': '{path} にアップロード',
'sidebarFilesTree.drop.uploading': '{path} にファイルをアップロードしています',
'sidebarFilesTree.dialog.uploadConflicts.title': '既存のファイルを置き換えますか?',
'sidebarFilesTree.dialog.uploadConflicts.description': '同じ名前のファイルが {path} に既に存在します。置き換えは元に戻せません。',
'sidebarFilesTree.dialog.uploadConflicts.replace': '置き換える',
'sidebarFilesTree.toast.folderNameRequired': 'フォルダ名が必要です',
'sidebarFilesTree.toast.folderCreated': 'フォルダを作成しました',
'sidebarFilesTree.toast.nameRequired': '名前が必要です',
@@ -1296,6 +1435,12 @@ export const dict: Record<I18nKey, string> = {
'filesView.editor.disableLineWrap': '行の折り返しを無効にする',
'filesView.editor.enableLineWrap': '行の折り返しを有効にする',
'filesView.editor.findInFile': 'ファイル内を検索',
'filesView.preview.find.placeholder': 'プレビュー内を検索',
'filesView.preview.find.nextAria': '次の一致',
'filesView.preview.find.previousAria': '前の一致',
'filesView.preview.find.closeAria': '検索を閉じる',
'filesView.preview.find.noMatches': '一致なし',
'filesView.preview.find.countAria': '{total}件中{current}件目',
'filesView.editor.goToLine': '指定行に移動',
'filesView.editor.switchToEditMode': '編集モードに切り替え',
'filesView.editor.switchToPreviewMode': 'プレビューモードに切り替え',
@@ -1347,10 +1492,12 @@ export const dict: Record<I18nKey, string> = {
'contextUsage.mobile.usedTokens': '使用トークン',
'contextUsage.mobile.contextLimit': 'コンテキスト制限',
'contextUsage.mobile.outputLimit': '出力制限',
'contextUsage.mobile.cost': 'コスト',
'contextUsage.mobile.usage': '使用量',
'contextUsage.tooltip.usedTokens': '使用トークン: {tokens}',
'contextUsage.tooltip.contextLimit': 'コンテキスト制限: {tokens}',
'contextUsage.tooltip.outputLimit': '出力制限: {tokens}',
'contextUsage.tooltip.cost': 'コスト: {cost}',
'contextSidebar.session.untitled': '無題のセッション',
'contextSidebar.empty.openSession': 'セッションを開いてコンテキストを確認します。',
'contextSidebar.section.context': 'コンテキスト',
@@ -1377,6 +1524,7 @@ export const dict: Record<I18nKey, string> = {
'planView.file.defaultName': '計画',
'planView.title.default': '計画',
'planView.error.saveFailed': '保存に失敗しました',
'planView.error.loadFailed': 'この計画を読み込めませんでした',
'planView.error.previewUnavailable': 'プレビューは利用できません',
'planView.error.switchToEditMode': '編集モードに切り替えて問題を修正してください。',
'planView.error.writeFailed': '書き込みに失敗しました',
@@ -1418,6 +1566,13 @@ export const dict: Record<I18nKey, string> = {
'diffView.scope.changed': '変更済み',
'diffView.scope.staged': 'ステージ済み',
'diffView.scope.lastTurn': '最後のターン',
'diffView.scope.branch': 'ブランチ',
'diffView.branch.resolvingBase': 'ベースブランチを検出中...',
'diffView.branch.noBaseTitle': 'ベースブランチがありません',
'diffView.branch.noBaseDescription': 'このブランチがどこから作られたかの記録がGitにありません。比較するベースブランチを選択してください。',
'diffView.branch.loadError': 'ブランチの変更を読み込めませんでした',
'diffView.branch.loadingFiles': 'ブランチの変更を読み込み中...',
'diffView.branch.empty': 'このブランチには{base}に対する変更はありません',
'diffView.scope.selectorAria': '変更モードを選択',
'diffView.actions.retry': '再試行',
'diffView.actions.renderAnyway': 'とにかくレンダリング',
@@ -1451,6 +1606,12 @@ export const dict: Record<I18nKey, string> = {
'diffView.hunk.unavailable': 'このハンクはもう利用できません。差分を更新してからもう一度お試しください。',
'diffView.hunk.unsupported': '個別のハンクのステージングはこのランタイムではサポートされていません。',
'chat.history.loadOlder': '以前のメッセージを読み込む',
'chat.appLink.confirm.title': 'このリンクを別のアプリで開きますか?',
'chat.appLink.confirm.description': 'このチャットのリンクは {scheme} プロトコルを使用し、別のアプリで開かれます。',
'chat.appLink.confirm.descriptionPlain': 'このチャットのリンクは別のアプリで開かれます。',
'chat.appLink.confirm.cancel': 'キャンセル',
'chat.appLink.confirm.open': '一度だけ開く',
'chat.appLink.confirm.trustAndOpen': '信頼して開く',
'chat.autoReview.title': 'コードレビューループが実行中です',
'chat.autoReview.status.waitingForReviewer': 'レビュアーを待機中',
'chat.autoReview.status.waitingForImplementer': '実装者を待機中',
@@ -1459,11 +1620,46 @@ export const dict: Record<I18nKey, string> = {
'chat.autoReview.actions.stop': '停止',
'rightSidebar.contextNotesTodo.plan.defaultTitle': '計画',
'rightSidebar.contextNotesTodo.empty.selectProject': 'プロジェクトを選択してメモとTODOを追加します。',
'rightSidebar.contextNotesTodo.notes.title': 'クイックメモ - {project}',
'rightSidebar.contextNotesTodo.notes.placeholder': 'コンテキスト、リマインダー、リンクを記録',
'rightSidebar.contextNotesTodo.todo.title': 'TODO',
'rightSidebar.contextNotesTodo.todo.itemsSingle': '{count}項目',
'rightSidebar.contextNotesTodo.todo.itemsPlural': '{count}項目',
'rightSidebar.contextNotesTodo.notes.addAria': 'ノートを追加',
'rightSidebar.contextNotesTodo.notes.empty': 'ノートはまだありません。文脈やメモ、リンクを残せます。',
'rightSidebar.contextNotesTodo.notes.actions.expand': 'ノートを展開',
'rightSidebar.contextNotesTodo.notes.actions.collapse': 'ノートを折りたたむ',
'rightSidebar.contextNotesTodo.notes.actions.delete': 'ノートを削除',
'rightSidebar.contextNotesTodo.notes.actions.pin': 'エージェントのコンテキストにピン留め',
'rightSidebar.contextNotesTodo.notes.actions.unpin': 'エージェントのコンテキストからピン留めを解除',
'rightSidebar.contextNotesTodo.notes.source.selection': 'チャットから',
'rightSidebar.contextNotesTodo.notes.source.agent': 'エージェントから',
'rightSidebar.contextNotesTodo.search.placeholder': '検索',
'rightSidebar.contextNotesTodo.search.clear': '検索をクリア',
'rightSidebar.contextNotesTodo.search.noResults': '「{query}」に一致するものはありません。',
'rightSidebar.contextNotesTodo.toast.deleteNoteFailed': 'ノートを削除できませんでした',
'rightSidebar.contextNotesTodo.toast.createNoteFailed': 'ノートを作成できませんでした',
'rightSidebar.contextNotesTodo.tabs.notes': 'ノート',
'rightSidebar.contextNotesTodo.tabs.todos': 'Todo',
'rightSidebar.contextNotesTodo.tabs.plans': '計画',
'rightSidebar.contextNotesTodo.plans.actions.back': 'プラン一覧に戻る',
'rightSidebar.contextNotesTodo.tabs.memory': 'メモリ',
'rightSidebar.contextNotesTodo.sections.label': 'プロジェクトコンテキストのセクション',
'rightSidebar.contextNotesTodo.sections.resize': 'セクションサイドバーの幅を変更',
'rightSidebar.contextNotesTodo.memory.scope.project': 'プロジェクト',
'rightSidebar.contextNotesTodo.memory.scope.label': 'メモリの範囲',
'rightSidebar.contextNotesTodo.memory.scope.global': 'あなたについて',
'rightSidebar.contextNotesTodo.memory.type.fact': '事実',
'rightSidebar.contextNotesTodo.memory.badge.new': '新規',
'rightSidebar.contextNotesTodo.memory.flagged': 'エージェントには渡されません — 指示のように読めます',
'rightSidebar.contextNotesTodo.memory.badge.changed': '変更',
'rightSidebar.contextNotesTodo.memory.type.preference': '設定',
'rightSidebar.contextNotesTodo.memory.type.reference': '参照',
'rightSidebar.contextNotesTodo.memory.actions.delete': 'この項目を削除',
'rightSidebar.contextNotesTodo.memory.actions.editTitle': 'メモリのタイトル',
'rightSidebar.contextNotesTodo.memory.actions.editBody': 'メモリの本文',
'rightSidebar.contextNotesTodo.memory.toast.saveFailed': 'メモリを保存できませんでした',
'rightSidebar.contextNotesTodo.memory.toast.deleteFailed': '項目を削除できませんでした',
'rightSidebar.contextNotesTodo.memory.empty.nothing': 'エージェントはまだ何も保存していません。',
'rightSidebar.contextNotesTodo.memory.empty.noMatches': '検索条件に一致する項目はありません。',
'rightSidebar.contextNotesTodo.memory.empty.noProject': 'プロジェクトを開くと、エージェントが記憶している内容を確認できます。',
'rightSidebar.contextNotesTodo.memory.empty.unavailable': '保存された記憶を読み込めませんでした。失われてはいません。もう一度お試しください。',
'rightSidebar.contextNotesTodo.todo.clearCompleted': '完了をクリア',
'rightSidebar.contextNotesTodo.todo.inputPlaceholder': 'TODOを追加',
'rightSidebar.contextNotesTodo.todo.addAria': 'TODOを追加',
@@ -1474,13 +1670,9 @@ export const dict: Record<I18nKey, string> = {
'rightSidebar.contextNotesTodo.todo.actions.delete': '「{text}」を削除',
'rightSidebar.contextNotesTodo.todo.actions.send': '「{text}」を送信',
'rightSidebar.contextNotesTodo.todo.actions.reorder': '「{text}」を並び替え',
'rightSidebar.contextNotesTodo.todo.resizeAria': 'TODOリストのサイズを変更',
'rightSidebar.contextNotesTodo.todo.sendMenu.currentSession': '現在のセッションに送信',
'rightSidebar.contextNotesTodo.todo.sendMenu.newSession': '新しいセッションに送信',
'rightSidebar.contextNotesTodo.todo.sendMenu.newWorktreeSession': '新しいワークツリーセッションに送信',
'rightSidebar.contextNotesTodo.plans.title': '計画',
'rightSidebar.contextNotesTodo.plans.filesSingle': '{count}ファイル',
'rightSidebar.contextNotesTodo.plans.filesPlural': '{count}ファイル',
'rightSidebar.contextNotesTodo.plans.importFromFile': 'ファイルから計画をインポート',
'rightSidebar.contextNotesTodo.plans.empty': 'まだ保存された計画はありません。',
'rightSidebar.contextNotesTodo.plans.deletePlan': '計画を削除',
@@ -1500,13 +1692,14 @@ export const dict: Record<I18nKey, string> = {
'rightSidebar.contextNotesTodo.toast.sentToNewSession': 'TODOを新しいセッションに送信しました',
'rightSidebar.contextNotesTodo.toast.sentToNewWorktreeSession': 'TODOを新しいワークツリーセッションに送信しました',
'rightSidebar.contextNotesTodo.toast.sendTodoFailed': 'TODOの送信に失敗しました',
'rightSidebar.contextNotesTodo.toast.updatePlanFailed': '計画を更新できませんでした',
'rightSidebar.contextNotesTodo.toast.deletePlanFailed': '計画の削除に失敗しました',
'rightSidebar.contextNotesTodo.toast.planFileEmpty': '計画ファイルが空です',
'rightSidebar.contextNotesTodo.toast.importPlanFailed': '計画のインポートに失敗しました',
'rightSidebar.contextNotesTodo.toast.planImported': '計画をインポートしました',
'rightSidebar.contextNotesTodo.toast.readPlanFileFailed': '計画ファイルの読み込みに失敗しました',
'inlineComment.range.lines': '{start}行目~{end}行目',
'inlineComment.input.placeholder': 'コメントを追加...(Cmd+Enterで保存)',
'inlineComment.input.placeholder': 'コメントを追加...({shortcut}で保存)',
'inlineComment.input.placeholderShort': 'コメントを追加...',
'inlineComment.actions.cancel': 'キャンセル',
'inlineComment.actions.save': '保存',
@@ -1525,8 +1718,6 @@ export const dict: Record<I18nKey, string> = {
'header.github.accountSource.cli': 'CLI',
'header.services.openWithCurrent': 'インスタンス、使用量、MCPを開く(現在: {current})',
'header.services.open': 'サービス、使用量、MCPを開く',
'header.services.tooltip.currentInstanceWithShortcuts': '現在のインスタンス: {current}({toggle}、次のタブ {nextTab})',
'header.services.tooltip.servicesWithShortcuts': 'サービス({toggle}、次のタブ {nextTab})',
'header.services.title': 'サービス',
'header.services.viewAria': 'サービスを表示',
'header.services.closeAria': 'サービスを閉じる',
@@ -1543,7 +1734,6 @@ export const dict: Record<I18nKey, string> = {
'header.services.used': '使用済み',
'header.services.remaining': '残り',
'header.services.modelFamily.other': 'その他',
'header.services.shutdownDev': 'OpenChamberを停止',
'header.actions.openPlanAria': '計画を開く',
'header.actions.toggleChangesPanel': '変更パネル',
'header.actions.toggleChangesPanelAria': '変更パネルの切り替え',
@@ -1636,6 +1826,10 @@ export const dict: Record<I18nKey, string> = {
'directoryExplorerDialog.browse.directories': 'ディレクトリ',
'directoryExplorerDialog.browse.loading': 'ディレクトリを読み込み中...',
'directoryExplorerDialog.browse.empty': '一致するディレクトリがありません。',
'directoryExplorerDialog.browse.permissionDenied': 'OpenChamber がこのフォルダにアクセスする必要があります。',
'directoryExplorerDialog.browse.loadFailed': 'このフォルダを読み込めませんでした。',
'directoryExplorerDialog.browse.grantAccess': 'アクセスを許可',
'directoryExplorerDialog.browse.retry': '再試行',
'directoryExplorerDialog.browse.parentDirectory': '親ディレクトリ',
'directoryExplorerDialog.browse.addedBadge': '追加済み',
'directoryExplorerDialog.browse.quickAdd': '追加',
@@ -1695,22 +1889,18 @@ export const dict: Record<I18nKey, string> = {
'helpDialog.item.focusChatInput': 'チャット入力にフォーカス',
'helpDialog.item.togglePromptNavigator': 'プロンプトナビゲーターの表示切替',
'helpDialog.item.abortActiveRun': 'アクティブな実行を中止(ダブルプレス)',
'helpDialog.item.toggleRightSidebar': 'コンテキストパネルの表示切替',
'helpDialog.item.openRightSidebarGitTab': 'Git サーフェスを開く',
'helpDialog.item.openRightSidebarFilesTab': 'ファイルサーフェスを開く',
'helpDialog.item.toggleTerminalDock': 'ターミナルドックの切り替え',
'helpDialog.item.toggleTerminalExpanded': 'ターミナル展開の切り替え',
'helpDialog.item.togglePlanContextPanel': '計画コンテキストパネルの切り替え',
'helpDialog.item.cycleTheme': 'テーマ切り替え(ライト→ダーク→システム)',
'helpDialog.item.switchProject': 'プロジェクトを切り替え',
'helpDialog.item.switchSessionTab': 'セッションタブを切り替え',
'helpDialog.item.switchContextSurface': 'コンテキストパネルのサーフェスを切り替え(数字キー)',
'helpDialog.item.toggleServicesMenu': 'サービスの切り替え',
'helpDialog.item.cycleServicesTab': 'サービス変数の切り替え',
'helpDialog.item.openSettings': '設定を開く',
'helpDialog.keyCombiner.or': 'または',
'helpDialog.proTips.title': 'プロのヒント:',
'helpDialog.proTips.commandPalette': 'コマンドパレット({shortcut})を使うとすべての操作にすばやくアクセスできます',
'helpDialog.proTips.recentSessions': '最近の5つのセッションがコマンドパレットに表示されます',
'helpDialog.proTips.themeCycling': 'テーマの切り替えはセッション間で設定が記憶されます',
'helpDialog.proTips.leaderSequences': '2段階ショートカット:組み合わせを押してから2つ目のキーを押します(Escで取消)',
'header.actions.rightSidebarWithShortcut': '右サイドバー({shortcut})',
'header.actions.toggleRightSidebarAria': '右サイドバーの切り替え',
'header.actions.openAppMenu': 'OpenChamberメニュー',
@@ -1794,8 +1984,6 @@ export const dict: Record<I18nKey, string> = {
'session.newWorktree.noMatchingBranches': '一致するブランチがありません',
'session.newWorktree.localBranches': 'ローカルブランチ',
'session.newWorktree.remoteBranches': 'リモートブランチ',
'session.newWorktree.otherLocalBranches': 'その他のローカルブランチ',
'session.newWorktree.otherRemoteBranches': 'その他のリモートブランチ',
'session.newWorktree.branchName': 'ブランチ名',
'session.newWorktree.branchNamePlaceholder': 'feature/my-awesome-feature',
'session.newWorktree.actions.change': '変更',
@@ -1920,7 +2108,6 @@ export const dict: Record<I18nKey, string> = {
'chat.statusRow.tasksTitle': 'タスク',
'chat.statusRow.modelStatus': '{model} · {status}',
'chat.statusRow.summary.activeLeft': '{active}アクティブ · {left}残り',
'chat.statusRow.aborted': '中止されました',
'chat.revertIndicator.redo': 'やり直し',
'chat.revertIndicator.redoAria': 'やり直し — 元に戻したメッセージを復元',
'chat.revertPopover.title': '元に戻しました',
@@ -1934,6 +2121,9 @@ export const dict: Record<I18nKey, string> = {
'chat.revert.toast.undo': '{preview}に元に戻しました',
'chat.revert.toast.redo': 'やり直しました',
'chat.revert.toast.restored': 'すべてのメッセージを復元しました',
'chat.toast.opencodeRestartInterrupted.title': 'チャットが中断されました',
'chat.toast.opencodeRestartInterrupted.description': '応答の生成中に OpenCode が再起動しました。続行するにはメッセージを送信してください。',
'chat.toast.opencodeRestartInterrupted.openSession': 'セッションを開く',
'chat.errorBoundary.title': 'チャットエラー',
'chat.errorBoundary.description': 'チャットインターフェースでエラーが発生しました。一時的なネットワーク問題または破損したメッセージデータが原因の可能性があります。',
'chat.errorBoundary.sessionLabel': 'セッション',
@@ -1960,6 +2150,7 @@ export const dict: Record<I18nKey, string> = {
'chat.commandAutocomplete.command.catchUpDescription': 'コンテキストを再確立: 何をしていたか、どこから再開するか。',
'chat.commandAutocomplete.command.debugDescription': '修正を提案する前に、バグのガイド付き根本原因調査。',
'chat.commandAutocomplete.command.weighDescription': 'トレードオフと推奨事項を含む2~3のアプローチを比較検討してからコミット。',
'chat.commandAutocomplete.command.btwDescription': 'このチャットを乱さず、一時的な子セッションで脇の質問をする',
'chat.commandAutocomplete.command.exploreDescription': 'このコードベースに慣れる: アーキテクチャと主要部分の概要ツアー。',
'chat.commandAutocomplete.badge.skill': 'スキル',
'chat.commandAutocomplete.badge.command': 'コマンド',
@@ -1980,13 +2171,28 @@ export const dict: Record<I18nKey, string> = {
'chat.container.returnToParent.titleNamed': '戻る: {title}',
'chat.container.returnToParent.title': '親セッションに戻る',
'chat.container.returnToParent.label': '親',
'chat.btw.destroyAria': 'このbtwセッションを破棄',
'chat.btw.titleFallback': 'btwセッション',
'chat.btw.mainComposerPlaceholder': 'このbtwセッションで質問する…',
'chat.btw.loading': 'btwセッションを開始中…',
'chat.btw.toast.emptyArgument': '/btwの後に質問を入力してください',
'chat.btw.toast.createFailed': 'btwセッションを開始できませんでした',
'chat.btw.toast.destroyFailed': 'btwセッションを破棄できませんでした。サイドバーに残ります。',
'chat.btw.working': '処理中…',
'chat.btw.collapseAria': 'btwパネルを折りたたむ',
'chat.btw.expandAria': 'btwパネルを展開する',
'chat.btw.promoteAria': '独立したセッションとして保持',
'chat.btw.toast.promoteFailed': 'btwセッションを保持できませんでした',
'chat.container.readOnlySubagentPromptBanner': 'サブエージェントセッションはプロンプトを受け付けません。',
'chat.container.sessionLoadError.title': 'セッションを読み込めませんでした',
'chat.container.sessionLoadError.description': '接続を確認して、このセッションをもう一度読み込んでください。',
'chat.container.sessionLoadError.description': '会話を取得できませんでした。サーバーが停止中か到達できない可能性があります。データは失われていません。復旧後に再試行してください。',
'chat.container.sessionLoadError.authDescription': 'セッションの有効期限が切れたため、サーバーがリクエストを拒否しました。ログインすると会話が読み込まれます。',
'chat.container.sessionLoadError.retry': '再試行',
'sessions.sidebar.group.empty.loadingSessions': 'セッションを読み込んでいます…',
'sessions.sidebar.group.empty.loadFailed': 'セッションを更新できませんでした。',
'sessions.sidebar.group.empty.retry': '再試行',
'sessions.sidebar.group.empty.permissionDenied': 'フォルダへのアクセスが必要です。',
'sessions.sidebar.group.empty.grantAccess': 'アクセスを許可',
'chat.unifiedControls.title': 'コントロール',
'chat.unifiedControls.model.title': 'モデル',
'chat.unifiedControls.model.noRecent': '最近のモデルはありません',
@@ -2018,12 +2224,13 @@ export const dict: Record<I18nKey, string> = {
'chat.textSelection.toast.addToNotesFailed': 'メモへの追加に失敗しました',
'chat.textSelection.toast.addToNotesSuccess': '選択テキストをメモに追加しました',
'chat.textSelection.toast.addToNotesSummaryFailed': '選択範囲を要約できませんでした。選択テキストをメモに追加しました。',
'chat.textSelection.actions.addToChat': 'チャットに追加',
'chat.textSelection.actions.newSession': '新しいセッション',
'chat.textSelection.actions.copy': 'コピー',
'chat.textSelection.actions.addToInput': '入力欄に追加',
'chat.textSelection.actions.comment': 'コメント',
'chat.textSelection.title.commentOnSelection': '選択範囲にコメント',
'chat.textSelection.comment.placeholder': '任意のコメントを追加...',
'chat.textSelection.comment.attach': '添付',
'chat.textSelection.actions.addToNotes': 'メモに追加',
'chat.textSelection.title.addToCurrentChat': '現在のチャットに追加',
'chat.textSelection.title.newSessionWithSelection': '選択範囲で新しいセッションを作成',
'chat.textSelection.title.saveInsightToNotes': '選択テキストをメモに保存',
'chat.messageBody.actions.revertAria': 'このメッセージに戻す',
'chat.messageBody.actions.revert': 'ここから元に戻す',
@@ -2119,6 +2326,7 @@ export const dict: Record<I18nKey, string> = {
'chat.chatInput.toast.attachmentsTooLarge': '添付ファイルが大きすぎて送信できません。画像の数またはサイズを減らしてください。',
'chat.chatInput.toast.sendAttachmentsFailed': '添付ファイルの送信に失敗しました。ファイルを減らすかサイズを小さくしてください。',
'chat.chatInput.toast.messageSendFailed': 'メッセージの送信に失敗しました。添付ファイルは復元されました。',
'chat.chatInput.toast.noModelSelected': '送信する前にプロバイダーとモデルを選択してください。',
'chat.chatInput.toast.clipboardAttachFailed': 'クリップボードからの画像添付に失敗しました',
'chat.chatInput.toast.clipboardTextAttachFailed': '貼り付けたテキストのファイル添付に失敗しました',
'chat.chatInput.toast.largeTextPaste.title': '大きなテキストを検出',
@@ -2137,8 +2345,6 @@ export const dict: Record<I18nKey, string> = {
'chat.chatInput.toast.togglePermissionAutoAcceptFailed': '権限の自動承認の切り替えに失敗しました',
'chat.chatInput.reviewComments': 'レビューコメント:',
'chat.chatInput.reviewCommentsRemove': 'レビューコメントを削除',
'chat.chatInput.devServerLogs': '開発サーバーログ:',
'chat.chatInput.devServerLogsRemove': '開発サーバーログを削除',
'chat.chatInput.previewAnnotations': 'プレビュー注釈:',
'chat.chatInput.previewContext': 'プレビューコンテキスト:',
'chat.chatInput.previewContextRemove': 'プレビューコンテキストを削除',
@@ -2177,6 +2383,7 @@ export const dict: Record<I18nKey, string> = {
'chat.toolPart.showRawJson': '生JSONを表示',
'chat.toolPart.showFormattedJson': '整形JSONを表示',
'chat.toolPart.showNavigableJson': 'ナビゲーション可能なJSONを表示',
'chat.toolPart.openFile': 'ファイルを開く',
'chat.toolPart.openFileAtFirstChange': '最初の変更箇所でファイルを開く',
'chat.toolPart.openFileDiff': 'ファイル差分を開く',
'chat.toolPart.copyOutput': '出力をコピー',
@@ -2308,6 +2515,15 @@ export const dict: Record<I18nKey, string> = {
'commandPalette.item.toggleSidebar': 'サイドバーの切り替え',
'commandPalette.item.showContextUsage': 'コンテキスト使用量を表示',
'commandPalette.item.toggleTerminal': 'ターミナルの切り替え',
'commandPalette.item.cycleTheme': 'テーマを順に切替',
'commandPalette.item.showOpenCodeStatus': 'OpenCode のステータスを表示',
'commandPalette.item.toggleMemoryDebug': 'メモリデバッグパネルの切替',
'commandPalette.item.pinSession': 'セッションをピン留め/解除',
'commandPalette.item.copySessionId': 'セッションIDをコピー',
'commandPalette.item.openMultiRun': 'マルチラン起動画面を開く',
'commandPalette.item.openArchive': 'アーカイブ済みセッションを開く',
'commandPalette.item.openNotes': 'ノートパネルを開く',
'commandPalette.item.openTodos': 'ToDoパネルを開く',
'commandPalette.item.openSettings': '設定を開く...',
'commandPalette.session.untitled': '無題のセッション',
'openCodeStatusDialog.title': 'OpenCodeステータス',
@@ -2522,6 +2738,9 @@ export const dict: Record<I18nKey, string> = {
'sessionAuth.error.passkeySignInCanceled': 'パスキーサインインがキャンセルされました。',
'sessionAuth.error.enterPasswordForPasskey': 'パスキーを追加するためにパスワードを入力してください。',
'sessionAuth.locked.tunnelTitle': 'トンネルアクセスが必要',
'sessionAuth.expired.banner': 'セッションの有効期限が切れました。続行するにはログインしてください。',
'sessionAuth.expired.loginAction': 'ログイン',
'sessionAuth.expired.sendBlocked': 'セッションが切れています。メッセージを送るにはログインしてください。',
'sessionAuth.locked.unlockTitle': 'OpenChamberのロックを解除',
'sessionAuth.locked.tunnelDescription': 'デスクトップアプリのワンタイム接続リンクを使用してこのトンネルを開きます。',
'sessionAuth.locked.passwordDescription': 'このセッションはパスワードで保護されています。',
@@ -2801,6 +3020,10 @@ export const dict: Record<I18nKey, string> = {
'updateDialog.status.updating': '更新中...',
'updateDialog.error.updateFailed': '更新に失敗しました',
'updateDialog.error.takingLonger': '更新に予想以上に時間がかかっています。しばらく待ってから更新するか、次を実行: openchamber update',
'updateDialog.error.signatureRejected': 'ダウンロードした更新は拒否されました。コード署名がこのインストールと一致しません。通常は、実行中のコピーが公式の署名済みリリースからインストールされていないことを意味します。公式リリースから OpenChamber をインストールし直してから、もう一度更新してください。',
'updateDialog.error.updaterDisabled': 'インストールに失敗したため、アップデーターが停止しました。OpenChamber を終了して開き直し、更新をやり直してください。',
'updateDialog.error.restartFailed': '更新をインストールするための再起動に失敗しました。',
'updateDialog.error.restartUnavailable': '更新のインストールには OpenChamber デスクトップアプリが必要です。',
'mobileUpdate.toast.available.title': 'OpenChamberの更新があります',
'mobileUpdate.toast.available.description': 'バージョン{version}をAndroidで利用できます。',
'mobileUpdate.toast.actions.download': 'ダウンロード',
@@ -2821,6 +3044,7 @@ export const dict: Record<I18nKey, string> = {
'memoryDebugPanel.title': 'デバッグパネル',
'memoryDebugPanel.tabs.memory': 'メモリ',
'memoryDebugPanel.tabs.streaming': 'ストリーミング',
'memoryDebugPanel.tabs.requests': 'リクエスト',
'memoryDebugPanel.section.sessionsInMemory': 'メモリ内のセッション',
'memoryDebugPanel.section.uiStreamingMetrics': 'UIストリーミングメトリクス',
'memoryDebugPanel.section.vscodeBridgeMetrics': 'VS Codeブリッジメトリクス',
@@ -2858,6 +3082,16 @@ export const dict: Record<I18nKey, string> = {
'memoryDebugPanel.streaming.copy.copied': 'ストリーミングデバッグJSONをコピーしました',
'memoryDebugPanel.streaming.copy.failed': 'JSONのコピーに失敗しました',
'memoryDebugPanel.streaming.copy.hint': 'UIとVS Codeの両方のストリーミングメトリクスをJSONとしてエクスポートします',
'memoryDebugPanel.requests.inFlight': '実行中',
'memoryDebugPanel.requests.peak': 'ピーク',
'memoryDebugPanel.requests.duration': '期間',
'memoryDebugPanel.requests.totalRequests': '合計リクエスト',
'memoryDebugPanel.requests.tracking': 'トラッキング',
'memoryDebugPanel.requests.now': '現在',
'memoryDebugPanel.requests.noSamples': 'まだリクエストが記録されていません。fetchアクティビティを記録するには、このパネルを開いたままにしてください。',
'memoryDebugPanel.requests.chartLabel': '経時的な実行中fetchリクエスト、ピーク {peak}',
'memoryDebugPanel.requests.windowHint': '過去 {seconds}秒',
'memoryDebugPanel.requests.percentileChartLabel': '経時的な実行中リクエストの経過時間パーセンタイル(p50、p90、p99、最大)',
'memoryDebugPanel.common.idle': '待機中',
'memoryDebugPanel.common.live': 'ライブ',
'memoryDebugPanel.common.notAvailable': 'N/A',
@@ -2895,18 +3129,23 @@ export const dict: Record<I18nKey, string> = {
'common.relative.daysAgoCompact': '{count}日前',
'common.relative.weeksAgoCompact': '{count}週前',
'common.relative.yearsAgoCompact': '{count}年前',
'common.duration.secondsCompact': '{seconds}秒',
'common.duration.minutesSecondsCompact': '{minutes}分{seconds}秒',
'common.duration.hoursMinutesCompact': '{hours}時間{minutes}分',
'contextFileOpen.failure.tooLarge': 'ファイルが大きすぎて開けません(>{count}行)',
'contextFileOpen.failure.missing': 'ファイルが見つかりません',
'contextFileOpen.failure.unreadable': 'ファイルを開けませんでした',
'quota.window.5h': '5時間',
'quota.window.7d': '7日間制限',
'quota.window.7dSonnet': '7日間Sonnet制限',
'quota.window.7dOpus': '7日間Opus制限',
'quota.window.weekly': '週間制限',
'quota.window.extraUsage': '追加利用',
'quota.window.weekly': '毎週',
'quota.window.daily': '日次',
'quota.window.monthly': '月間制限',
'quota.window.monthly': '毎月',
'quota.window.credits': 'クレジット',
'quota.window.creditsBalance': 'クレジット残高',
'quota.window.monthlyCredits': '月間クレジット',
'quota.window.purchasedCredits': '購入済みクレジット',
'quota.window.freeCredits': '無料クレジット',
'quota.window.billingCycle': '請求サイクル',
'quota.window.auto': '自動',
'quota.window.api': 'API',
@@ -2919,6 +3158,105 @@ export const dict: Record<I18nKey, string> = {
'onboarding.localSetup.actions.checkAndContinue': 'インストール完了、確認して続行',
'onboarding.localSetup.status.autoContinue': '検出され次第自動的に続行します。',
'updateDialog.changelog.title': '新機能',
'quota.window.premiumInteractions': 'プレミアムインタラクション',
'quota.window.premiumInteractions': 'AIクレジット',
'chat.workStatus.ariaLabel': '作業状況',
'chat.workStatus.context.label': 'コンテキスト',
'chat.workStatus.cost.breakdown': 'セッション {session} · サブエージェント {subagents}',
'chat.workStatus.git.changedFileSingle': '{count} 件のファイルを変更',
'chat.workStatus.git.changedFilePlural': '{count} 件のファイルを変更',
'chat.workStatus.pr.untitled': 'タイトルなしのプルリクエスト',
'chat.workStatus.pr.draft': 'ドラフト',
'chat.workStatus.pr.checks': 'チェック',
'chat.workStatus.pr.checksFailed': '{count} 件失敗',
'chat.workStatus.pr.checksPending': '{count} 件実行中',
'chat.workStatus.pr.checksPassed': '{count} 件成功',
'chat.workStatus.attention.merge': 'マージ実行中',
'chat.workStatus.attention.rebase': 'リベース実行中',
'chat.workStatus.attention.cherryPick': 'チェリーピック実行中',
'chat.workStatus.attention.revert': 'リバート実行中',
'chat.workStatus.attention.bisect': '二分探索実行中',
'chat.workStatus.subagent.done': '完了',
'chat.workStatus.subagent.untitled': 'サブエージェント',
'chat.workStatus.mcp.toggle': '{name} を切り替え',
'chat.workStatus.mcp.needsAuth': 'サインイン',
'chat.workStatus.mcp.failed': '失敗',
'chat.workStatus.pinned.unavailable': 'ピン留めしたメッセージ',
'chat.workStatus.section.session': 'セッション',
'chat.workStatus.section.project': 'プロジェクト',
'chat.workStatus.section.subagents': 'サブエージェント',
'chat.workStatus.section.mcp': 'MCP',
'chat.workStatus.section.pinned': 'ピン留めしたメッセージ',
'chat.workStatus.section.tasks': 'タスク',
'chat.workStatus.subagent.working': '作業中',
'chat.workStatus.subagent.needsPermission': '許可が必要',
'chat.workStatus.subagent.askedQuestion': '質問があります',
'chat.workStatus.section.contextBreakdown': 'コンテキストソース',
'chat.workStatus.breakdown.skills': 'スキル',
'chat.workStatus.breakdown.pinnedNote': 'メモ',
'chat.workStatus.breakdown.unpin': 'コンテキストからピンを外す',
'chat.workStatus.breakdown.pinnedPlan': 'プラン',
'chat.workStatus.breakdown.memory': 'エージェントメモリ',
'chat.workStatus.breakdown.pinnedKnowledgeSingle': '{count} 件ピン留め',
'chat.workStatus.breakdown.pinnedKnowledgePlural': '{count} 件ピン留め',
'chat.workStatus.breakdown.mcp': 'MCP サーバー',
'chat.workStatus.action.openChanges': '変更を開く',
'chat.workStatus.action.openGit': 'Git パネルを開く',
'chat.workStatus.action.openPr': 'プルリクエストを開く',
'chat.workStatus.action.openSubagent': '{name} を開く',
'chat.workStatus.section.usage': '使用量',
'chat.workStatus.goal.open': '目標を管理',
'chat.workStatus.goal.pause': '一時停止',
'chat.workStatus.goal.resume': '再開',
'chat.workStatus.goal.updateFailed': '目標を更新できませんでした',
'chat.workStatus.pinned.unpin': 'ピン留めを解除',
'chat.workStatus.pinned.reveal': 'メッセージへ移動',
'chat.workStatus.pinned.unpinFailed': 'ピン留めを解除できませんでした',
'chat.workStatus.action.openContext': 'コンテキストパネルを開く',
'chat.workStatus.section.linkedIssues': 'リンク済み',
'chat.workStatus.linkedIssues.open': 'GitHub で #{number} を開く',
'chat.workStatus.linkedIssues.unlink': 'リンクを解除',
'chat.workStatus.linkedIssues.unlinkFailed': 'リンクを解除できませんでした',
'chat.workStatus.linkedIssues.link': 'セッションにリンク',
'chat.workStatus.linkedIssues.linkFailed': 'リンクできませんでした',
'chat.workStatus.breakdown.issueCountSingle': 'Issue {count} 件',
'chat.workStatus.breakdown.issueCountPlural': 'Issue {count} 件',
'chat.workStatus.breakdown.prCountSingle': 'PR {count} 件',
'chat.workStatus.breakdown.prCountPlural': 'PR {count} 件',
'chat.workStatus.breakdown.skillCountSingle': 'スキル {count} 個',
'chat.workStatus.breakdown.skillCountPlural': 'スキル {count} 個',
'chat.workStatus.breakdown.mcpCountSingle': 'MCP {count} 個',
'chat.workStatus.breakdown.mcpCountPlural': 'MCP {count} 個',
'chat.workStatus.sections.open': 'セクションを選択',
'chat.workStatus.sections.dialogTitle': 'パネルのセクション',
'chat.workStatus.sections.dialogDescription': '作業状況パネルに表示する内容を選びます。非表示のセクションもデータは保持され、表示されないだけです。',
'chat.workStatus.sections.allHidden': 'セクションが選択されていません',
'chat.workStatus.sections.showAll': 'すべて表示',
'chat.workStatus.sections.noneWarning': 'パネルが空で表示されます。',
'header.workStatusPanel.toggleAria': '作業状況パネルを切り替え',
'header.workStatusPanel.hide': '作業状況を非表示',
'header.workStatusPanel.show': '作業状況を表示',
'chat.workStatus.mcp.authorizeOpenFailed': '認証ページを開けませんでした',
'chat.workStatus.mcp.authorizeFailed': '認証に失敗しました',
'mcpDropdown.toast.authorizeOpenFailed': '認証ページを開けませんでした',
'mcpDropdown.toast.authorizeFailed': '認証に失敗しました',
'header.services.tooltip.currentInstance': '現在のインスタンス: {current}({toggle})',
'header.workStatusPanel.showOverlay': 'チャットの上に作業状況を表示',
'settings.mcp.page.connection.title': '接続方法',
'settings.mcp.page.connection.description': '起動コマンド、またはホスト型サーバーのリンクを貼り付けます。',
'settings.mcp.page.registration.title': 'このサーバーには専用アプリが必要です',
'settings.mcp.page.registration.description': '認証情報を自動発行しません。サービス側の設定でアプリを作成し、その情報をここに貼り付けてサインインしてください。',
'settings.mcp.page.registration.callbackLabel': 'この住所をサービスに登録してください',
'settings.mcp.page.registration.clientId': 'アプリ ID',
'settings.mcp.page.registration.clientSecret': 'アプリシークレット',
'settings.mcp.page.registration.afterSaving': '保存してから「認証」を押してください。',
'settings.mcp.page.toast.copiedCallbackUrl': '住所をコピーしました',
'settings.mcp.page.toast.clipboardWriteFailed': 'クリップボードにコピーできませんでした',
'settings.mcp.page.scope.everywhere': 'すべてのプロジェクトで利用可能',
'settings.mcp.page.scope.thisProject': 'このプロジェクトのみ',
'settings.mcp.page.env.description': 'API キーなど、サーバーが必要とする値。',
'settings.mcp.page.connection.kindCommand': 'コマンド',
'settings.mcp.page.connection.kindLink': 'リンク',
'settings.mcp.page.connection.hintCommand': 'このマシンで実行します。コマンド全体を貼り付けると、1 行に 1 引数へ分割されます。',
'settings.mcp.page.connection.hintLink': '他者がホストするサーバーに接続します。その https アドレスを貼り付けてください。',
};
+166 -43
View File
@@ -1,8 +1,10 @@
import { thirdPartyIntegrationI18n } from './third-party-integrations.i18n';
export const settingsDict = {
'settings.providers.page.openCodeGo.title': 'OpenCode Go 사용량 추적',
'settings.providers.page.openCodeGo.description': 'OpenCode Go 대시보드를 연결하여 롤링, 주간 및 월간 할당량을 표시합니다.',
'settings.providers.page.openCodeGo.workspaceId': '워크스페이스 ID',
'settings.providers.page.openCodeGo.authCookie': '인증 쿠키',
'settings.providers.page.openCodeGo.apiKey': 'API 키',
'settings.providers.page.openCodeGo.help': '대시보드 URL에서 워크스페이스 ID를, 브라우저 개발자 도구에서 auth 쿠키를 복사하세요. OpenChamber는 브라우저 쿠키 저장소를 검색하지 않습니다.',
'settings.providers.page.openCodeGo.save': '저장 및 검증',
'settings.providers.page.openCodeGo.replace': '교체',
@@ -40,7 +42,20 @@ export const settingsDict = {
'settings.view.badge.beta': 'beta',
'settings.view.actions.reloadOpenCode': 'OpenCode 다시 로드',
'settings.view.actions.reloadOpenCodeTooltip': 'OpenCode를 재시작하고 설정을 다시 불러옵니다.',
'settings.view.actions.backToSettings': '설정으로 돌아가기',
'settings.view.actions.applyAndRestartOpenCode': '적용하고 다시 시작',
'settings.view.actions.applyAndRestartOpenCodeTooltipSingle': '보류 중인 구성 변경 1개를 적용하고 OpenCode를 다시 시작합니다.',
'settings.view.actions.applyAndRestartOpenCodeTooltipPlural': '보류 중인 구성 변경 {count}개를 적용하고 OpenCode를 다시 시작합니다.',
'settings.view.pendingRestart.applying': '다시 시작하는 중…',
'settings.view.pendingRestart.applied': '보류 중인 구성 변경으로 OpenCode를 다시 시작했습니다.',
'settings.view.pendingRestart.applyFailed': '구성 변경을 적용하지 못했습니다.',
'settings.view.pendingRestart.manualRestartRequired': '디스크에 저장되었습니다. 연결된 OpenCode 서버를 다시 시작하여 변경 사항을 적용하세요.',
'settings.view.pendingRestart.saved': '저장되었습니다. 적용하려면 OpenCode를 다시 시작하세요.',
'settings.view.pendingRestart.confirm.title': '적용하고 다시 시작할까요?',
'settings.view.pendingRestart.confirm.description': 'OpenCode를 다시 시작하면 실행 중인 채팅이 중지됩니다. 저장된 구성 변경 사항은 다시 시작 후 적용됩니다.',
'settings.view.pendingRestart.confirm.dontShowAgain': '다시 표시하지 않음',
'settings.view.pendingRestart.confirm.cancel': '취소', 'settings.view.actions.backToSettings': '설정으로 돌아가기',
'settings.view.actions.closeSettings': '설정 닫기',
'settings.view.actions.openSectionList': '섹션 목록 열기',
'settings.view.actions.closeSettingsWithShortcut': '설정 닫기 ({shortcut}+,)',
@@ -359,14 +374,14 @@ export const settingsDict = {
'settings.remoteInstances.page.field.modePlaceholder': '모드 선택',
'settings.remoteInstances.page.field.modeManaged': '대신 시작하기',
'settings.remoteInstances.page.field.modeExternal': '이미 실행 중',
'settings.remoteInstances.page.field.preferredRemotePort': '기본 원격 포트',
'settings.remoteInstances.page.field.preferredRemotePortHint': '원격 컴퓨터에서 사용할 포트입니다. 비워 두면 자동으로 선택합니다.',
'settings.remoteInstances.page.field.preferredRemotePort': '원격 머신의 포트',
'settings.remoteInstances.page.field.preferredRemotePortHint': 'OpenChamber가 원격 머신에서 사용할 포트. 비워 두면 자동으로 선택됩니다.',
'settings.remoteInstances.page.field.keepServerRunning': '서버 유지',
'settings.remoteInstances.page.field.keepServerRunningHint': '연결을 끊은 뒤에도 원격 컴퓨터에서 OpenChamber를 계속 실행합니다.',
'settings.remoteInstances.page.field.bindHost': 'Bind host',
'settings.remoteInstances.page.field.bindHostHint': '로컬 연결이 대기할 주소입니다. LAN 접근이 필요하지 않으면 127.0.0.1 또는 localhost를 사용하세요.',
'settings.remoteInstances.page.field.preferredLocalPort': '기본 로컬 포트',
'settings.remoteInstances.page.field.preferredLocalPortHint': '이 연결에 열 로컬 포트입니다. 비워 두면 자동으로 선택합니다.',
'settings.remoteInstances.page.field.keepServerRunningHint': '연결을 끊은 뒤에도 원격 서버를 계속 실행합니다. 끄면 연결 해제 시 중지되고 다음 연결 때 다시 시작됩니다.',
'settings.remoteInstances.page.field.bindHost': '접근 가능 범위',
'settings.remoteInstances.page.field.bindHostHint': '이 컴퓨터의 전달된 주소를 누가 열 수 있는지. 원격 머신 자체는 어느 경우든 SSH 터널로만 접근할 수 있습니다.',
'settings.remoteInstances.page.field.preferredLocalPort': '이 컴퓨터의 포트',
'settings.remoteInstances.page.field.preferredLocalPortHint': '터널을 위해 이 컴퓨터에서 여는 포트. 비워 두면 자동으로 선택됩니다.',
'settings.remoteInstances.page.field.forwardType': '포워딩 유형',
'settings.remoteInstances.page.field.localHostPlaceholder': '127.0.0.1',
'settings.remoteInstances.page.field.remoteHostPlaceholder': '127.0.0.1',
@@ -386,6 +401,10 @@ export const settingsDict = {
'settings.common.actions.cancel': '취소',
'settings.common.actions.create': '생성',
'settings.common.actions.delete': '삭제',
'settings.openchamber.appLinks.title': '신뢰한 앱 링크',
'settings.openchamber.appLinks.info': '여기에 표시된 링크는 이 기기에서 다시 묻지 않고 열립니다. 그 밖의 앱 링크는 열기 전에 항상 확인합니다.',
'settings.openchamber.appLinks.empty': '이 기기에 신뢰한 앱 링크가 없습니다. 링크를 열 때 "신뢰하고 열기"를 선택하면 여기에 추가됩니다.',
'settings.openchamber.appLinks.removeAria': '신뢰된 {scheme} 링크 제거',
'settings.common.actions.reset': '초기화',
'settings.common.actions.rename': '이름 변경',
'settings.common.actions.duplicate': '복제',
@@ -431,6 +450,9 @@ export const settingsDict = {
'settings.openchamber.about.title': 'OpenChamber 정보',
'settings.openchamber.about.field.version': '버전',
'settings.openchamber.about.field.openCodeVersion': 'OpenCode 버전',
'settings.openchamber.about.field.instanceUrls': '인스턴스 URL',
'settings.openchamber.about.field.applicationUrl': '애플리케이션',
'settings.openchamber.about.field.tunnelUrl': '터널',
'settings.openchamber.about.state.checking': '확인 중...',
'settings.openchamber.about.state.upToDate': '최신 상태',
'settings.openchamber.about.state.unknown': '알 수 없음',
@@ -847,16 +869,26 @@ export const settingsDict = {
'settings.skills.catalog.page.mode.manual': '수동',
'settings.skills.catalog.page.mode.external': 'External',
'settings.skills.catalog.page.title': '스킬 카탈로그',
'settings.skills.catalog.page.subtitle': '선별된 저장소에서 바로 사용 가능한 스킬을 설치하거나 직접 소스를 추가하세요.',
'settings.skills.catalog.page.section.sources': '소스',
'settings.skills.catalog.page.searchAllPlaceholder': '모든 소스에서 스킬 검색…',
'settings.skills.catalog.page.search.clear': '검색 지우기',
'settings.skills.catalog.page.source.skillsCount': '스킬: {count}개',
'settings.skills.catalog.page.source.stars': '스타: {count}',
'settings.skills.catalog.page.source.updated': '업데이트: {time}',
'settings.skills.catalog.page.source.addOwnTitle': '직접 소스 추가',
'settings.skills.catalog.page.source.addOwnDescription': '스킬이 있는 아무 Git 저장소',
'settings.skills.catalog.page.source.viewRepo': 'GitHub에서 저장소 열기',
'settings.skills.catalog.page.skill.viewOnGithub': 'GitHub에서 스킬 보기',
'settings.skills.catalog.page.list.searchTitle': '검색 결과',
'settings.skills.catalog.page.section.sourceRepository': '카탈로그 저장소',
'settings.skills.catalog.page.field.selectSourcePlaceholder': '저장소 선택',
'settings.skills.catalog.page.actions.refreshTitle': '새로고침',
'settings.skills.catalog.page.actions.removeCatalogTitle': 'Catalog 제거',
'settings.skills.catalog.page.actions.addCatalog': 'Catalog 추가',
'settings.skills.catalog.page.actions.removeCatalog': 'Catalog 제거',
'settings.skills.catalog.page.actions.loadMoreSkills': '스킬 더 불러오기',
'settings.skills.catalog.page.loading.catalog': '로딩 중...',
'settings.skills.catalog.page.loading.skills': '스킬 불러오는 중...',
'settings.skills.catalog.page.loading.more': '로딩 중...',
'settings.skills.catalog.page.foundCount': '스킬 {count}개 발견',
'settings.skills.catalog.page.error.catalogTitle': 'Catalog 오류',
'settings.skills.catalog.page.empty.noSkillsTitle': '스킬을 찾을 수 없습니다',
@@ -864,7 +896,6 @@ export const settingsDict = {
'settings.skills.catalog.page.badge.installed': '설치됨({scope})',
'settings.skills.catalog.page.badge.notInstallable': '설치할 수 없음',
'settings.skills.catalog.page.badge.unknown': '알 수 없음',
'settings.skills.catalog.page.byOwnerPrefix': '작성자',
'settings.skills.catalog.page.removeDialog.title': 'Catalog 제거',
'settings.skills.catalog.page.removeDialog.description': '이 카탈로그를 제거하시겠습니까?',
'settings.openchamber.passkeys.title': 'Passkeys',
@@ -927,9 +958,9 @@ export const settingsDict = {
'settings.openchamber.desktopNetwork.field.macMenuBarAria': 'macOS 메뉴 막대에 OpenChamber 표시',
'settings.openchamber.desktopNetwork.field.macMenuBar': '메뉴 막대에 OpenChamber 표시',
'settings.openchamber.desktopNetwork.field.macMenuBarDescription': '앱을 다시 시작해야 합니다. 끄면 OpenChamber가 메뉴 막대 항목을 만들지 않으며 세션, 승인 및 사용량 업데이트도 실행하지 않습니다.',
'settings.openchamber.desktopNetwork.field.minimizeToTrayAria': 'OpenChamber를 시스템 트레이로 최소화하거나 닫기',
'settings.openchamber.desktopNetwork.field.minimizeToTray': '시스템 트레이로 최소화하고 닫기',
'settings.openchamber.desktopNetwork.field.minimizeToTrayDescription': '메인 창을 최소화하거나 닫아도 OpenChamber가 시스템 트레이에서 계속 실행됩니다.',
'settings.openchamber.desktopNetwork.field.minimizeToTrayAria': 'OpenChamber를 시스템 트레이로 닫기',
'settings.openchamber.desktopNetwork.field.minimizeToTray': '시스템 트레이로 닫기',
'settings.openchamber.desktopNetwork.field.minimizeToTrayDescription': '메인 창을 닫아도 OpenChamber가 시스템 트레이에서 계속 실행됩니다. 최소화하면 창은 작업 표시줄에 남습니다.',
'settings.openchamber.desktopNetwork.field.keepAwakeAria': 'OpenChamber가 실행되는 동안 컴퓨터 절전 방지',
'settings.openchamber.desktopNetwork.field.keepAwake': 'OpenChamber가 실행되는 동안 컴퓨터 절전 방지',
'settings.openchamber.desktopNetwork.field.keepAwakeDescription': '휴대폰이 이 앱을 계속 열 수 있도록 합니다. 디스플레이는 꺼질 수 있습니다.',
@@ -956,15 +987,22 @@ export const settingsDict = {
'settings.openchamber.desktopNetwork.error.keepAwakeUnsupported': '이 시스템에서는 절전 방지를 지원하지 않습니다',
'settings.openchamber.desktopNetwork.error.keepAwakeSaveFailed': '절전 방지 설정을 업데이트하지 못했습니다',
'settings.openchamber.opencodeCli.title': 'OpenCode CLI',
'settings.openchamber.tools.title': 'OpenChamber 도구',
'settings.openchamber.tools.field.agentControlTool': '에이전트 제어 도구',
'settings.openchamber.tools.field.agentControlToolAria': '에이전트 제어 도구 활성화',
'settings.openchamber.tools.field.agentControlToolInfo': '에이전트가 채팅에서 작업을 오케스트레이션할 수 있습니다. 세션과 worktree 생성, 다른 에이전트에게 프롬프트 위임, 예약 작업 관리가 가능합니다. 각 세션에 작은 도구 설명이 추가됩니다. OpenCode를 다시 시작하면 적용됩니다.',
'settings.openchamber.tools.field.agentWebTool': 'OpenChamber Web 도구',
'settings.openchamber.tools.field.agentWebToolAria': 'OpenChamber Web 도구 활성화',
'settings.openchamber.tools.field.agentWebToolInfo': '에이전트가 OpenChamber 브라우저 패널에서 페이지를 확인하고 조작할 수 있습니다. URL 열기, 내용 읽기, 클릭, 입력, 스크롤, 모바일과 데스크톱 레이아웃 전환이 가능합니다. 각 세션에 작은 도구 설명이 추가됩니다. OpenCode를 다시 시작하면 적용됩니다.',
'settings.openchamber.tools.field.agentMemoryTool': '에이전트 메모리 도구',
'settings.openchamber.tools.field.agentMemoryToolAria': '에이전트 메모리 도구',
'settings.openchamber.tools.field.agentMemoryToolInfo': '에이전트가 배운 내용을 세션 간에 유지하도록 합니다. 저장소는 두 개로, 사용자에 대한 사실과 각 프로젝트에 대한 사실입니다. 세션에는 저장된 제목이 전달되어 관련 항목을 에이전트가 읽을 수 있습니다. 끄면 도구와 메모리 탭, 세션 색인이 모두 사라집니다. OpenCode를 다시 시작한 뒤 적용됩니다.',
'settings.openchamber.opencodeCli.tooltipPrefix': '선택적 절대 경로:',
'settings.openchamber.opencodeCli.tooltipSuffix': 'binary.',
'settings.openchamber.opencodeCli.field.binaryPath': 'OpenCode binary 경로',
'settings.openchamber.opencodeCli.field.binaryPathPlaceholder': '/Users/you/.bun/bin/opencode',
'settings.openchamber.opencodeCli.field.showUpdateNotifications': 'OpenCode 업데이트 알림 표시',
'settings.openchamber.opencodeCli.field.showUpdateNotificationsAria': 'OpenCode 업데이트 알림 표시',
'settings.openchamber.opencodeCli.field.agentControlTool': '에이전트 제어 도구',
'settings.openchamber.opencodeCli.field.agentControlToolAria': '에이전트 제어 도구 활성화',
'settings.openchamber.opencodeCli.field.agentControlToolInfo': '에이전트가 채팅에서 작업을 오케스트레이션할 수 있습니다. 세션과 worktree 생성, 다른 에이전트에게 프롬프트 위임, 예약 작업 관리가 가능합니다. 각 세션에 작은 도구 설명이 추가됩니다. Save + Reload 후 적용됩니다.',
'settings.openchamber.opencodeCli.actions.browseAria': 'OpenCode binary 경로 찾아보기',
'settings.openchamber.opencodeCli.actions.browse': '찾아보기',
'settings.openchamber.opencodeCli.actions.saveAndReload': '저장 + 다시 로드',
@@ -1063,7 +1101,7 @@ export const settingsDict = {
'settings.openchamber.keyboardShortcuts.overwritePrompt': '이 조합은 이미 다른 단축키에서 사용 중입니다. 덮어쓰고 기존 매핑을 지울까요?',
'settings.openchamber.keyboardShortcuts.field.pressKeys': '키를 누르세요...',
'settings.openchamber.keyboardShortcuts.error.captureFirst': '먼저 단축키를 입력하세요.',
'settings.openchamber.keyboardShortcuts.warning.riskyBrowserShortcut': '이 단축키는 브라우저 기본값과 충돌할 수 있습니다. 그래도 저장됩니다.',
'settings.openchamber.keyboardShortcuts.warning.riskyBrowserShortcut': '이 단축키는 브라우저 기본값과 충돌할 수 있지만 그래도 저장할 수 있습니다.',
'settings.openchamber.keyboardShortcuts.action.open_go_to_line.label': '줄로 이동(파일 편집기)',
'settings.openchamber.keyboardShortcuts.action.open_command_palette.label': '명령 팔레트 열기',
'settings.openchamber.keyboardShortcuts.action.focus_input.label': '입력에 포커스',
@@ -1072,16 +1110,20 @@ export const settingsDict = {
'settings.openchamber.keyboardShortcuts.action.toggle_terminal_expanded.label': '터미널 확장 토글',
'settings.openchamber.keyboardShortcuts.action.add_selection_to_chat.label': '선택 내용을 채팅에 추가',
'settings.openchamber.keyboardShortcuts.action.toggle_sidebar.label': '사이드바 토글',
'settings.openchamber.keyboardShortcuts.action.toggle_right_sidebar.label': '컨텍스트 패널 표시 전환',
'settings.openchamber.keyboardShortcuts.action.open_right_sidebar_git.label': 'Git 서피스 열기',
'settings.openchamber.keyboardShortcuts.action.open_right_sidebar_files.label': '파일 서피스 열기',
'settings.openchamber.keyboardShortcuts.action.switch_session_tab.label': '세션 탭 전환',
'settings.openchamber.keyboardShortcuts.action.switch_session_tab.suffix': ' + 1…9',
'settings.openchamber.keyboardShortcuts.action.switch_context_surface.label': '컨텍스트 패널 서피스 전환',
'settings.openchamber.keyboardShortcuts.action.switch_context_surface.suffix': ' + 1…0',
'settings.openchamber.keyboardShortcuts.action.new_chat.label': '새 세션',
'settings.openchamber.keyboardShortcuts.action.switch_session_previous.label': '이전 세션',
'settings.openchamber.keyboardShortcuts.action.switch_session_next.label': '다음 세션',
'settings.openchamber.keyboardShortcuts.action.rename_current_session.label': '현재 세션 이름 바꾸기',
'settings.openchamber.keyboardShortcuts.action.toggle_permission_auto_accept.label': '권한 자동 승인 전환',
'settings.openchamber.keyboardShortcuts.action.close_session_tab.label': '세션 탭 닫기',
'settings.openchamber.keyboardShortcuts.action.new_chat_worktree.label': '새 worktree 초안',
'settings.openchamber.keyboardShortcuts.action.new_mini_chat.label': '새 Mini Chat 창',
'settings.openchamber.keyboardShortcuts.action.open_help.label': '키보드 단축키 열기',
'settings.openchamber.keyboardShortcuts.action.toggle_context_plan.label': '계획 컨텍스트 패널 토글',
'settings.openchamber.keyboardShortcuts.action.toggle_services_menu.label': '서비스 메뉴 토글',
'settings.openchamber.keyboardShortcuts.action.cycle_services_tab.label': '서비스 탭 순환',
'settings.openchamber.keyboardShortcuts.action.cycle_theme.label': '테마 순환',
'settings.openchamber.keyboardShortcuts.action.cycle_agent.label': '에이전트 순환',
'settings.openchamber.keyboardShortcuts.action.cycle_favorite_model_forward.label': '즐겨찾기 모델 앞으로 순환',
@@ -1090,15 +1132,39 @@ export const settingsDict = {
'settings.openchamber.keyboardShortcuts.action.expand_input.label': '입력 확장',
'settings.openchamber.keyboardShortcuts.action.open_timeline_dialog.label': '대화 타임라인 열기',
'settings.openchamber.keyboardShortcuts.action.toggle_prompt_navigator.label': '프롬프트 탐색기 표시/숨기기',
'settings.openchamber.keyboardShortcuts.warning.contextualPrefix': '이 시퀀스는 {action}과 컨텍스트 접두사를 공유합니다. 해당 컨텍스트가 활성화된 동안에는 그 동작이 우선합니다.',
'settings.openchamber.keyboardShortcuts.category.session': '세션 제어',
'settings.openchamber.keyboardShortcuts.category.models': '모델 및 에이전트',
'settings.openchamber.keyboardShortcuts.category.panels': '패널 및 도구',
'settings.openchamber.keyboardShortcuts.category.navigation': '탐색',
'settings.openchamber.keyboardShortcuts.category.application': '애플리케이션',
'settings.openchamber.keyboardShortcuts.actions.edit': '편집',
'settings.openchamber.keyboardShortcuts.actions.confirm': '확인',
'settings.openchamber.keyboardShortcuts.dialog.title': '{action} 편집',
'settings.openchamber.keyboardShortcuts.dialog.instructions': '키 조합을 최대 두 개까지 누르세요. 각 조합에는 최대 세 개의 키를 사용할 수 있습니다. 첫 번째 조합 뒤에는 두 번째 조합을 위해 최대 3초 동안 기다립니다. 적용하려면 확인을, 취소하려면 취소를 선택하세요. Backspace로 마지막 조합을 삭제합니다.',
'settings.openchamber.keyboardShortcuts.dialog.firstChord': '첫 번째 조합',
'settings.openchamber.keyboardShortcuts.dialog.secondChord': '두 번째 조합',
'settings.openchamber.keyboardShortcuts.dialog.recording': '키를 누르세요…',
'settings.openchamber.keyboardShortcuts.unassigned': '할당되지 않음',
'settings.openchamber.keyboardShortcuts.error.prefixConflict': '{action}에서 사용하는 시퀀스와 충돌합니다. 다른 조합을 선택하세요.',
'settings.openchamber.keyboardShortcuts.error.exactConflict': '이 조합은 이미 {action}에서 사용합니다.',
'settings.openchamber.keyboardShortcuts.error.internalConflict': '이 조합은 바꿀 수 없는 기본 제공 단축키와 충돌합니다.',
'settings.openchamber.keyboardShortcuts.action.open_draft_project_picker.label': '초안 프로젝트 선택기 열기',
'settings.openchamber.keyboardShortcuts.action.open_draft_worktree_picker.label': '초안 워크트리 선택기 열기',
'settings.openchamber.keyboardShortcuts.action.open_session_list.label': '최근 세션 열기',
'settings.openchamber.keyboardShortcuts.action.toggle_dictation.label': '음성 입력',
'settings.projects.sidebar.total': '총 {count}개',
'settings.projects.sidebar.actions.addProject': '프로젝트 추가',
'settings.projects.page.empty.noProjects': '사용 가능한 프로젝트가 없습니다.',
'settings.projects.page.title.default': '프로젝트 설정',
'settings.projects.page.section.worktree': 'Worktree',
'settings.projects.page.field.projectName': '프로젝트 이름',
'settings.projects.page.field.projectModel': '프로젝트 모델',
'settings.projects.page.field.projectThinking': '프로젝트 사고 수준',
'settings.projects.page.section.chatDefaults': '새 채팅 기본값',
'settings.projects.page.section.chatDefaultsDescription': '이 프로젝트에서 새 채팅을 시작할 때 사용합니다. 비워 두면 전역 기본값을 따릅니다. 사고 수준은 수준을 제공하는 모델에서만 표시됩니다.',
'settings.projects.page.field.projectNamePlaceholder': '프로젝트 이름',
'settings.projects.page.field.defaultModel': '새 채팅의 기본 모델',
'settings.projects.page.field.defaultModelDescription': '이 프로젝트에서 새 채팅을 시작할 때 사용됩니다. 설정하지 않으면 전역 기본값으로 대체됩니다.',
'settings.projects.page.option.thinkingDefault': '모델 기본값',
'settings.projects.page.field.accentColor': '강조 색상',
'settings.projects.page.field.projectIcon': '프로젝트 아이콘',
'settings.projects.page.field.projectIconBackgroundAria': '프로젝트 아이콘 배경색',
@@ -1132,15 +1198,15 @@ export const settingsDict = {
'settings.usage.sidebar.field.displayModePlaceholder': '표시 모드',
'settings.usage.sidebar.field.displayModeUsage': '사용량',
'settings.usage.sidebar.field.displayModeRemaining': '남은 할당량',
'settings.usage.sidebar.field.showPredictions': '예측 표시',
'settings.usage.sidebar.status.notSet': '설정 안 됨',
'settings.usage.page.empty.selectProvider': '사용량 세부 정보를 보려면 프로바이더를 선택하세요.',
'settings.usage.page.header.providerUsage': '{provider} 사용량',
'settings.usage.page.header.refreshing': '사용량 새로고침 중...',
'settings.usage.page.header.lastUpdated': '마지막 업데이트: {time}',
'settings.usage.page.options.showInHeaderAria': '헤더 메뉴에 표시',
'settings.usage.page.options.showInHeader': '헤더 메뉴에 표시',
'settings.usage.page.options.showInHeaderTooltip': '활성화하면 이 프로바이더의 사용량이 앱 헤더의 빠른 접근 메뉴에 표시됩니다.',
'settings.usage.page.header.lastUpdatedWithPlan': '플랜: {plan} · 마지막 업데이트: {time}',
'settings.usage.page.options.showInWorkStatusAria': '작업 상태 패널에 표시',
'settings.usage.page.options.showInWorkStatus': '작업 상태 패널에 표시',
'settings.usage.page.options.showInWorkStatusTooltip': '활성화하면 이 제공업체의 사용량이 작업 상태 패널에 표시됩니다.',
'settings.usage.page.state.noData': '아직 사용량 데이터가 없습니다.',
'settings.usage.page.state.refreshFailedTitle': '사용량 데이터를 새로고침하지 못했습니다',
'settings.usage.page.state.providerNotConfiguredTitle': '프로바이더가 설정되지 않았습니다',
@@ -1167,8 +1233,8 @@ export const settingsDict = {
'settings.remoteInstances.page.section.actionsDescription': '연결, 재연결, 로그 보기 또는 이 연결 삭제를 할 수 있습니다.',
'settings.remoteInstances.page.section.remoteServer': '원격 컴퓨터의 OpenChamber',
'settings.remoteInstances.page.section.remoteServerDescription': 'SSH 연결 후 OpenChamber를 어떻게 실행할지 선택하세요.',
'settings.remoteInstances.page.section.mainTunnel': '로컬 접근',
'settings.remoteInstances.page.section.mainTunnelDescription': '이 원격 OpenChamber 서버를 열 때 사용할 로컬 주소를 선택하세요.',
'settings.remoteInstances.page.section.mainTunnel': '이 컴퓨터에서의 접근',
'settings.remoteInstances.page.section.mainTunnelDescription': 'OpenChamber는 원격 머신에서 실행됩니다. 이 설정은 SSH 터널을 통해 그곳으로 연결되는 이 컴퓨터의 주소만 제어합니다.',
'settings.remoteInstances.page.section.authentication': '인증',
'settings.remoteInstances.page.section.authenticationDescription': 'SSH와 원격 OpenChamber UI를 위한 인증 정보입니다.',
'settings.remoteInstances.page.section.portForwards': '포트 포워딩',
@@ -1181,8 +1247,6 @@ export const settingsDict = {
'settings.remoteInstances.page.field.installMethod': '설치 방식',
'settings.remoteInstances.page.field.installMethodHint': '이 앱이 대신 시작할 때 OpenChamber를 원격 컴퓨터에 배치하는 방법입니다.',
'settings.remoteInstances.page.field.selectInstallMethodPlaceholder': '설치 방식 선택',
'settings.remoteInstances.page.field.installMethodDownloadRelease': '릴리스 다운로드',
'settings.remoteInstances.page.field.installMethodUploadBundle': '번들 업로드',
'settings.remoteInstances.page.field.selectBindHostPlaceholder': 'bind host 선택',
'settings.remoteInstances.page.field.sshPasswordOptional': 'SSH 비밀번호(선택 사항)',
'settings.remoteInstances.page.field.sshPasswordPlaceholder': 'SSH 비밀번호 입력',
@@ -1206,7 +1270,44 @@ export const settingsDict = {
'settings.remoteInstances.page.actions.enableForwardAria': '포워딩 활성화',
'settings.remoteInstances.page.actions.openLocal': '로컬 열기',
'settings.remoteInstances.page.actions.addForward': '포워딩 추가',
'settings.remoteInstances.page.import.sectionTitle': '저장된 SSH 호스트',
'settings.remoteInstances.page.addDialog.description': 'SSH 설정에서 호스트를 고르거나 연결을 직접 입력하세요.',
'settings.remoteInstances.page.addDialog.sourceLabel': '연결을 가져오는 위치',
'settings.remoteInstances.page.addDialog.tab.saved': 'SSH 설정에서',
'settings.remoteInstances.page.addDialog.tab.manual': '직접 입력',
'settings.remoteInstances.page.addDialog.searchPlaceholder': '호스트 검색',
'settings.remoteInstances.page.addDialog.emptySaved': 'SSH 설정에서 호스트를 찾지 못했습니다. 연결을 직접 입력하세요.',
'settings.remoteInstances.page.addDialog.searchEmpty': '검색과 일치하는 호스트가 없습니다.',
'settings.remoteInstances.page.addDialog.use': '사용',
'settings.remoteInstances.page.state.notConnected': '연결 안 됨',
'settings.remoteInstances.page.state.connecting': '연결 중',
'settings.remoteInstances.page.state.ready': '연결됨',
'settings.remoteInstances.page.state.problem': '조치 필요',
'settings.remoteInstances.page.section.advanced': '고급 설정',
'settings.remoteInstances.page.section.advancedHint': '포트, 설치 방법, 비밀번호, 추가 포워딩. 대부분의 연결은 기본값으로 충분합니다.',
'settings.remoteInstances.page.field.installMethodAuto': '자동',
'settings.remoteInstances.page.error.hint.noRuntime': '원격 머신에 bun도 npm도 없습니다. 그곳에 하나를 설치하거나 이 연결을 "이미 실행 중"으로 바꾸세요.',
'settings.remoteInstances.page.error.hint.noOpencode': '원격 머신에 opencode CLI가 설치되어 있지 않습니다. 그곳에 설치한 뒤(opencode.ai 참고) 다시 연결하세요.',
'settings.remoteInstances.page.error.action.setUiPassword': 'UI 비밀번호 설정',
'settings.remoteInstances.page.error.action.pickRandomPort': '다른 로컬 포트 사용',
'settings.remoteInstances.page.error.action.setRemotePort': '원격 포트 설정',
'settings.remoteInstances.page.validation.externalPortRequired': '먼저 원격 포트를 지정하세요. "이미 실행 중" 모드에서는 서버가 어떤 포트에서 대기하는지 OpenChamber가 알아야 합니다.',
'settings.remoteInstances.page.empty.noInstances': '아직 SSH 연결이 없습니다.',
'settings.remoteInstances.page.field.uiPasswordRequired': 'UI 비밀번호(필수)',
'settings.remoteInstances.page.field.uiPasswordMissingForLan': '원격 서버가 자기 네트워크에서 접근 가능한 동안에는 필수입니다.',
'settings.remoteInstances.page.field.remoteLanAccess': '원격 네트워크에서 접근 가능',
'settings.remoteInstances.page.field.remoteLanAccessHint': '원격 머신 네트워크의 다른 기기가 SSH 터널 없이 이 OpenChamber를 직접 열 수 있게 합니다. UI 비밀번호가 필요합니다.',
'settings.remoteInstances.page.field.remoteLanAccessWarning': '그 네트워크의 누구나 원격 OpenChamber에 접근할 수 있습니다. 아래 UI 비밀번호만이 이를 보호합니다.',
'settings.remoteInstances.page.validation.remoteLanNeedsPassword': '먼저 UI 비밀번호를 설정하세요. 없으면 원격 OpenChamber가 그 네트워크의 모든 기기에 열리게 됩니다.',
'settings.remoteInstances.page.field.bindHostOption.loopback': '이 컴퓨터만 (127.0.0.1)',
'settings.remoteInstances.page.field.bindHostOption.localhost': '이 컴퓨터만 (localhost)',
'settings.remoteInstances.page.field.bindHostOption.lan': '내 네트워크의 모든 기기 (0.0.0.0)',
'settings.remoteInstances.page.field.sshPasswordHint': 'SSH 키 대신 비밀번호를 요구하는 호스트에서만 필요합니다.',
'settings.remoteInstances.page.field.uiPasswordHintManaged': '원격 OpenChamber 화면을 보호할 비밀번호. OpenChamber가 대신 시작하는 서버에 이 값을 설정합니다.',
'settings.remoteInstances.page.field.uiPasswordHintExternal': '원격 머신에서 이미 실행 중인 OpenChamber 서버에 로그인할 때 쓰는 비밀번호.',
'settings.remoteInstances.page.tunnelPreview.caption': '이 연결의 전달 경로:',
'settings.remoteInstances.page.empty.noInstancesWithOneImport': '아직 SSH 연결이 없습니다. SSH 설정에서 호스트 1개를 가져올 수 있습니다.',
'settings.remoteInstances.page.empty.noInstancesWithImports': '아직 SSH 연결이 없습니다. SSH 설정에서 호스트 {count}개를 가져올 수 있습니다.',
'settings.remoteInstances.page.state.loadingInstances': '연결을 불러오는 중...',
'settings.remoteInstances.page.import.loading': 'SSH host 로딩 중...',
'settings.remoteInstances.page.import.noneFound': 'SSH host를 찾을 수 없습니다.',
'settings.remoteInstances.page.import.noneAvailable': '가져올 수 있는 SSH host가 없습니다.',
@@ -1304,13 +1405,18 @@ export const settingsDict = {
'settings.providers.page.custom.title': '사용자 정의 제공자',
'settings.providers.page.custom.editTitle': '사용자 지정 공급자 편집',
'settings.providers.page.custom.description': '기본 URL, 자격 증명, 모델 목록으로 OpenAI 호환 제공자를 추가합니다. OpenCode 설정에 저장되어 다른 제공자와 같이 채팅에서 사용할 수 있습니다.',
'settings.providers.page.custom.description': '기본 URL, 자격 증명, 모델 목록 및 지원되는 API 프로토콜로 제공자를 추가합니다. 채팅에 사용할 수 있도록 OpenCode 설정에 저장됩니다.',
'settings.providers.page.custom.field.providerID.label': '제공자 ID',
'settings.providers.page.custom.field.providerID.placeholder': 'my-provider',
'settings.providers.page.custom.field.providerID.info': '소문자, 숫자, 하이픈, 밑줄. OpenCode 제공자 ID로 사용됩니다.',
'settings.providers.page.custom.field.name.label': '표시 이름',
'settings.providers.page.custom.field.name.placeholder': '내 제공자',
'settings.providers.page.custom.field.name.info': '제공자 및 모델 선택기에 표시됩니다.',
'settings.providers.page.custom.field.protocol.label': 'API 프로토콜',
'settings.providers.page.custom.field.protocol.info': '이 API가 구현하는 요청 형식을 선택하세요.',
'settings.providers.page.custom.field.protocol.openaiChat': 'OpenAI Chat Completions',
'settings.providers.page.custom.field.protocol.openaiResponses': 'OpenAI Responses',
'settings.providers.page.custom.field.protocol.anthropicMessages': 'Anthropic Messages',
'settings.providers.page.custom.field.baseURL.label': '기본 URL',
'settings.providers.page.custom.field.baseURL.placeholder': 'https://api.example.com/v1',
'settings.providers.page.custom.field.baseURL.info': 'OpenAI 호환 API 기본 URL. http:// 또는 https://로 시작해야 합니다.',
@@ -1359,6 +1465,17 @@ export const settingsDict = {
'settings.providers.page.auth.apiKeyPlaceholder': 'sk-...',
'settings.providers.page.auth.oauthMethodFallback': 'OAuth 방식 {index}',
'settings.providers.page.auth.pasteAuthorizationCodePlaceholder': 'authorization code 붙여넣기',
'settings.providers.page.auth.oauth.starting': '인증을 시작하는 중…',
'settings.providers.page.auth.oauth.waiting': '인증을 기다리는 중…',
'settings.providers.page.auth.oauth.waitingHint': '브라우저에서 로그인을 완료하세요. 이 페이지를 열어 두면 연결이 자동으로 완료됩니다.',
'settings.providers.page.auth.oauth.codeHint': '브라우저에서 인증 코드를 복사해 여기에 붙여넣으세요.',
'settings.providers.page.auth.oauth.deviceCodeLabel': '기기 코드',
'settings.providers.page.auth.oauth.linkLabel': '인증 링크',
'settings.providers.page.auth.oauth.promptRequired': '계속하려면 “{field}”을(를) 입력하세요',
'settings.providers.page.auth.oauth.error.sessionExpired': '인증 요청이 만료되었습니다. 다시 연결해 처음부터 시작하세요.',
'settings.providers.page.auth.oauth.error.codeRequired': '이 제공자에는 브라우저의 인증 코드가 필요합니다.',
'settings.providers.page.auth.oauth.error.declined': '인증이 거부되었거나 완료되지 않았습니다.',
'settings.providers.page.auth.oauth.error.invalidInput': '입력한 정보가 거부되었습니다.',
'settings.providers.page.auth.connected': '연결됨',
'settings.providers.page.auth.incomplete': '자격 증명 없음',
'settings.providers.page.auth.incompleteHint': '· 채팅에서 이 공급자를 사용하기 전에 API 키 또는 {env:VAR}을(를) 추가하세요',
@@ -1391,6 +1508,9 @@ export const settingsDict = {
'settings.providers.page.actions.open': '열기',
'settings.providers.page.actions.copy': '복사',
'settings.providers.page.actions.complete': '완료',
'settings.providers.page.actions.continue': '계속',
'settings.providers.page.actions.cancel': '취소',
'settings.providers.page.actions.tryAgain': '다시 시도',
'settings.providers.page.actions.hide': '숨기기',
'settings.providers.page.actions.reconnect': '재연결',
'settings.providers.page.actions.edit': '편집',
@@ -1406,7 +1526,6 @@ export const settingsDict = {
'settings.providers.page.toast.apiKeySaved': 'API key가 저장되었습니다',
'settings.providers.page.toast.oauthStartFailed': 'OAuth flow를 시작하지 못했습니다',
'settings.providers.page.toast.oauthDetailsMissing': '반환된 OAuth 세부 정보가 없습니다',
'settings.providers.page.toast.completeOAuthInBrowser': '브라우저에서 OAuth flow를 완료하세요',
'settings.providers.page.toast.oauthCompleteFailed': 'OAuth flow를 완료하지 못했습니다',
'settings.providers.page.toast.oauthCompleted': 'OAuth 연결이 완료되었습니다',
'settings.providers.page.toast.oauthLinkCopied': 'OAuth 링크가 복사되었습니다',
@@ -1428,6 +1547,8 @@ export const settingsDict = {
'settings.mcp.page.status.label.failed': '실패',
'settings.mcp.page.status.label.needsAuth': '인증 필요',
'settings.mcp.page.status.label.needsRegistration': '등록 필요',
'settings.mcp.page.status.label.awaitingRestart': '재시작 대기 중',
'settings.mcp.page.status.description.awaitingRestart': '이 서버는 저장되었지만 아직 적용되지 않았습니다. Apply & Restart를 사용해 OpenCode에 불러오면 연결과 인증을 사용할 수 있습니다.',
'settings.mcp.page.status.description.connected': '연결되었습니다. OpenCode가 도구와 리소스를 찾을 준비가 됐습니다.',
'settings.mcp.page.status.description.failedDefault': 'OpenCode가 이 MCP 서버에 연결할 수 없습니다.',
'settings.mcp.page.status.description.needsAuth': '이 원격 MCP 서버는 연결 전에 권한 부여가 필요합니다.',
@@ -1792,9 +1913,6 @@ export const settingsDict = {
'settings.voice.page.field.ttsInputModeSummarized': '요약',
'settings.openchamber.visual.section.colorMode': '색상 모드',
'settings.openchamber.visual.section.colorModeAndTheme': '색상 모드 및 테마',
'settings.openchamber.visual.section.mobileLayout': '모바일 레이아웃',
'settings.openchamber.visual.option.mobileLayout.default': '이전',
'settings.openchamber.visual.option.mobileLayout.new': '새로움',
'settings.openchamber.visual.section.localization': '지역화',
'settings.openchamber.visual.section.spacingAndLayout': '간격 및 레이아웃',
'settings.openchamber.visual.section.densityAndType': '밀도 및 서체',
@@ -1811,6 +1929,10 @@ export const settingsDict = {
'settings.openchamber.visual.section.showToolsOpenedByDefault': '도구를 기본으로 펼쳐 표시',
'settings.openchamber.visual.section.sessionAssistance': '세션 지원',
'settings.openchamber.visual.section.reasoning': '추론',
'settings.openchamber.visual.section.streaming': '스트리밍',
'settings.openchamber.visual.field.streamingAutoFollow': '스트리밍 중 새 내용 따라가기',
'settings.openchamber.visual.field.streamingAutoFollowAria': '응답 스트리밍 중 새 내용으로 자동 스크롤',
'settings.openchamber.visual.field.streamingAutoFollowInfo': '응답이 스트리밍되는 동안 화면이 최신 내용으로 계속 이동합니다. 끄면 화면이 고정되어 직접 스크롤할 수 있으며, 채팅 중간에서 메시지를 보내도 화면이 이동하지 않습니다.',
'settings.openchamber.visual.section.messageAppearance': '메시지 모양',
'settings.openchamber.visual.section.toolsAndFiles': '도구 및 파일',
'settings.openchamber.visual.section.composer': '입력창',
@@ -1831,8 +1953,6 @@ export const settingsDict = {
'settings.openchamber.visual.field.selectTimeFormatAria': '시간 형식 선택',
'settings.openchamber.visual.field.selectWeekStartAria': '주 시작 요일 선택',
'settings.openchamber.visual.actions.reloadThemes': '테마 다시 로드',
'settings.openchamber.visual.field.macVibrancy': '창 투명도',
'settings.openchamber.visual.field.macVibrancyHint': '사이드바 뒤에 macOS 기본 블러(vibrancy)를 사용합니다. 완전히 불투명한 표면을 원하면 끄세요.',
'settings.openchamber.visual.field.dockBadge': 'Dock 배지',
'settings.openchamber.visual.field.dockBadgeHint': '확인하지 않은 활동이 있는 채팅 수를 macOS Dock 아이콘에 표시합니다.',
'settings.openchamber.visual.actions.saveAndRestart': '저장 후 재시작',
@@ -1879,6 +1999,10 @@ export const settingsDict = {
'settings.openchamber.visual.actions.resetInputBarOffsetAria': '입력 바 오프셋 초기화',
'settings.openchamber.visual.field.terminalQuickKeysAria': '터미널 빠른 키',
'settings.openchamber.visual.field.terminalQuickKeys': '터미널 빠른 키',
'settings.openchamber.visual.field.sessionTabsGroup': '세션 탭',
'settings.openchamber.visual.field.sessionTabs': '헤더에 세션을 탭으로 표시',
'settings.openchamber.visual.field.sessionTabsAria': '헤더 세션 탭 전환',
'settings.openchamber.visual.field.sessionTabsInfo': '연 세션이 헤더에 탭으로 나열됩니다. 끄면 헤더에 세션 제목만 표시됩니다.',
'settings.openchamber.visual.field.terminalQuickKeysTooltip': '터미널 보기에서 Esc, Ctrl, 화살표를 표시합니다',
'settings.openchamber.visual.field.fileEditorKeymap': '파일 편집기 키맵',
'settings.openchamber.visual.option.fileEditorKeymap.default': '기본값',
@@ -1911,8 +2035,6 @@ export const settingsDict = {
'settings.openchamber.visual.field.stickyUserHeader': '고정 사용자 헤더',
'settings.openchamber.visual.field.promptNavigatorEnabledAria': '프롬프트 탐색기',
'settings.openchamber.visual.field.promptNavigatorEnabled': '프롬프트 탐색기',
'settings.openchamber.visual.field.expandedEditorToolbarAria': 'Always show editor toolbar',
'settings.openchamber.visual.field.expandedEditorToolbar': 'Always show editor toolbar (docked under the file tabs)',
'settings.openchamber.visual.field.autoSaveEnabledAria': '파일 자동 저장',
'settings.openchamber.visual.field.autoSaveEnabled': '파일 자동 저장',
'settings.openchamber.visual.field.autoSaveEnabledInfo': '입력을 멈춘 후 파일 편집 내용을 자동으로 저장합니다. 끄면 수동으로 저장해야 합니다.',
@@ -2105,4 +2227,5 @@ export const settingsDict = {
'settings.openchamber.visual.field.followUpBehaviorDescription': 'Choose what happens when you press Enter on a follow-up message while the agent is still responding.',
'settings.openchamber.visual.option.followUpBehavior.steer.label': 'Steer',
'settings.openchamber.visual.option.followUpBehavior.queue.label': 'Queue',
...thirdPartyIntegrationI18n.ko,
} as const;
+377 -39
View File
@@ -6,6 +6,19 @@ export const dict: Record<I18nKey, string> = {
'terminalView.actions.attachSelection': '선택한 출력 첨부',
'terminalView.actions.restart': '터미널 다시 시작',
'chat.message.terminalContext': '{terminal}, {start}-{end}행',
'chat.message.context.codeComment': '{file} {start}-{end}행에 대한 댓글',
'chat.message.context.codeCommentLine': '{file} {line}행에 대한 댓글',
'chat.message.context.chatQuote': '이전 메시지에서 인용',
'chat.message.context.fileQuote': '{file}에서 선택한 부분',
'chat.chatInput.chatQuoteContext': '채팅 인용',
'chat.chatInput.chatQuoteContextRemove': '채팅 인용 제거',
'chat.chatInput.contextPreview.selectedLabel': '선택한 텍스트',
'chat.chatInput.contextPreview.commentLabel': '사용자 댓글',
'chat.chatInput.contextPreview.edit': '댓글 편집',
'chat.chatInput.contextPreview.remove': '제거',
'chat.message.context.browserAnnotation': '브라우저 주석 ({page})',
'chat.message.context.prComment': 'GitHub PR 댓글 ({label})',
'chat.message.context.prCheck': '실패한 GitHub PR 검사 ({label})',
'chat.chatInput.terminalContext': '{terminal}, {start}-{end}행',
'chat.chatInput.terminalContextRemove': '터미널 컨텍스트 제거',
'chat.chatInput.prCommentContext': 'PR 댓글',
@@ -25,6 +38,7 @@ export const dict: Record<I18nKey, string> = {
'common.language.korean': '한국어',
'common.language.polish': '폴란드어',
'common.language.japanese': '일본어',
'common.language.turkish': '터키어',
'common.revealPath.finder': 'Finder에서 보기',
'common.revealPath.fileExplorer': 'File Explorer에서 열기',
'common.revealPath.fileManager': '파일 관리자에서 열기',
@@ -89,6 +103,11 @@ export const dict: Record<I18nKey, string> = {
'mobile.instances.status.connectedDirect': '연결됨 · 로컬 네트워크',
'mobile.instances.status.connectedRelay': '연결됨 · 비공개 릴레이',
'mobile.instances.saveEdit': '변경 사항 저장',
'mobile.connectionDebug.title': '연결 로그',
'mobile.connectionDebug.copy': '복사',
'mobile.connectionDebug.copied': '복사됨',
'mobile.connectionDebug.close': '닫기',
'mobile.connectionDebug.empty': '아직 연결 이벤트가 없습니다.',
'mobile.nav.changes': '변경사항',
'mobile.nav.settings': '설정',
'mobile.surface.closeAria': '닫기',
@@ -112,6 +131,7 @@ export const dict: Record<I18nKey, string> = {
'mobile.sessions.section.worktrees': '워크트리',
'mobile.sessions.section.otherProjects': '프로젝트 전환',
'mobile.sessions.section.projects': '프로젝트',
'mobile.sessions.section.chats': '채팅',
'mobile.sessions.empty.noProjectsTitle': '프로젝트 없음',
'mobile.sessions.empty.noProjectsDescription': '코드와 채팅을 시작하려면 프로젝트를 추가하세요.',
'mobile.sessions.empty.noSessionsTitle': '세션 없음',
@@ -232,8 +252,10 @@ export const dict: Record<I18nKey, string> = {
'sessions.scheduledTasks.dialog.toast.deleted': '예약 작업 삭제됨',
'sessions.scheduledTasks.dialog.toast.deleteFailed': '작업 삭제 실패',
'sessions.scheduledTasks.dialog.toast.started': '작업 시작됨',
'sessions.scheduledTasks.dialog.toast.startedPersistWarning': '작업은 시작되었지만 상태를 저장하지 못했습니다. 다음 성공 실행까지 계속 실행 중으로 표시될 수 있습니다.',
'sessions.scheduledTasks.dialog.toast.runFailed': '작업 실행 실패',
'sessions.scheduledTasks.dialog.confirm.deleteTask': '예약 작업 "{taskName}" 삭제?',
'sessions.scheduledTasks.dialog.confirm.deleteLoopFile': '루프 작업 "{taskName}" 및 해당 Markdown 파일을 삭제할까요?',
'sessions.scheduledTasks.dialog.schedule.daily': '매일 {time}',
'sessions.scheduledTasks.dialog.schedule.dailyWithTimezone': '매일 {time} ({timezone})',
'sessions.scheduledTasks.dialog.schedule.weekly': '매주 {days} {time}',
@@ -269,6 +291,9 @@ export const dict: Record<I18nKey, string> = {
'sessions.scheduledTasks.dialog.taskToggle.pauseAria': '{taskName} 일시 중지',
'sessions.scheduledTasks.dialog.taskToggle.enabled': '활성화됨',
'sessions.scheduledTasks.dialog.taskToggle.paused': '일시 중지됨',
'sessions.scheduledTasks.dialog.loopFile.note': '루프 파일에서 관리됨: {file}',
'sessions.scheduledTasks.dialog.loopFile.toggleDisabled': '활성화 여부는 루프 파일이 제어합니다. Markdown frontmatter에서 enabled를 설정하세요',
'sessions.scheduledTasks.dialog.loopFile.actionsDisabled': '루프 작업은 .agents/loops Markdown 파일에서 구성합니다',
'sessions.scheduledTasks.editor.title.edit': '예약 작업 편집',
'sessions.scheduledTasks.editor.title.new': '새 예약 작업',
'sessions.scheduledTasks.editor.description': '새 세션을 만들고 프롬프트를 보내는 서버 작업을 설정합니다.',
@@ -361,7 +386,7 @@ export const dict: Record<I18nKey, string> = {
'multirun.launcher.attachments.attach': '첨부',
'multirun.launcher.attachments.tooltip': '같은 파일을 모든 실행에 보냅니다',
'multirun.launcher.models.label': '모델',
'multirun.launcher.models.info': '모델을 2~{max}개 선택하세요. 같은 모델을 여러 번 추가할 수 있습니다.',
'multirun.launcher.models.info': '모델을 2개 이상 선택하세요. 같은 모델을 여러 번 추가할 수 있습니다.',
'multirun.launcher.toast.fileTooLarge': '파일 "{fileName}"이 너무 큽니다(최대 10MB)',
'multirun.launcher.toast.attachFailed': '"{fileName}" 첨부 실패',
'multirun.launcher.toast.attachedSingle': '파일 {count}개 첨부됨',
@@ -428,9 +453,16 @@ export const dict: Record<I18nKey, string> = {
'sessions.sidebar.empty.noMatches.title': '일치하는 세션 없음',
'sessions.sidebar.empty.noMatches.description': '다른 제목, 브랜치, 폴더 또는 경로로 검색해 보세요.',
'sessions.sidebar.activity.recentTitle': '최근',
'sessions.sidebar.activity.chatsTitle': '채팅',
'sessions.sidebar.activity.chatsEmpty': '아직 채팅이 없습니다.',
'chat.chatInput.chooseProject': '프로젝트 선택',
'sessions.archivePage.allDirectories': '모든 디렉터리',
'sessions.sidebar.header.displayMode.stickyHeaders': '프로젝트 헤더 고정',
'sessions.sidebar.header.grouping.label': '세션 그룹화',
'sessions.sidebar.header.projectDisplay.label': '프로젝트 표시',
'sessions.sidebar.header.projectDisplay.all': '모든 프로젝트',
'sessions.sidebar.header.projectDisplay.single': '프로젝트 하나',
'sessions.sidebar.project.selectAria': '프로젝트 선택, 현재 {project}',
'sessions.sidebar.header.grouping.byWorktree': '워크트리별',
'sessions.sidebar.header.grouping.flat': '평면 목록',
'sessions.sidebar.project.actions.manageWorktrees': '워크트리 관리',
@@ -452,6 +484,10 @@ export const dict: Record<I18nKey, string> = {
'sessions.archivePage.deleteSessionAria': '{title} 삭제',
'sessions.archivePage.restoreSessionAria': '{title} 복원',
'sessions.switcher.openAria': '세션 전환기 열기',
'header.sessionTabs.stripAria': '열린 세션',
'header.sessionTabs.tabMenuAria': '세션 탭 작업',
'header.sessionTabs.closeTab': '탭 닫기',
'header.sessionTabs.closeOtherTabs': '다른 탭 닫기',
'sessions.switcher.empty': '최근 세션 없음',
'sessions.switcher.draftTitle': '새 세션',
'sessions.sidebar.updateCheck.errorTitle': '업데이트 확인 실패',
@@ -503,11 +539,33 @@ export const dict: Record<I18nKey, string> = {
'sessions.sidebar.session.menu.unshare': '공유 해제',
'sessions.sidebar.session.menu.exportMarkdown': 'Markdown 내보내기',
'sessions.sidebar.session.menu.moveToWorktree': '새 worktree로 이동',
'sessions.sidebar.session.menu.moveToWorktreeTargets': 'worktree로 이동',
'sessions.sidebar.session.menu.newWorktree': '새 worktree...',
'sessions.sidebar.session.moveToWorktree.success': '세션을 새 worktree로 이동했습니다',
'sessions.sidebar.session.moveToWorktree.failed': '세션을 새 worktree로 이동하지 못했습니다',
'sessions.sidebar.session.moveToWorktree.tooltip': '현재 브랜치에서 새 worktree를 만들고 커밋되지 않은 변경 사항과 이 세션 및 하위 세션을 이동합니다.',
'sessions.sidebar.session.moveToWorktree.main': '메인 worktree',
'sessions.sidebar.session.moveToWorktree.refreshing': 'worktree 새로 고침 중...',
'sessions.sidebar.session.moveToWorktree.loadFailed': 'worktree를 불러오지 못했습니다',
'sessions.sidebar.session.moveToWorktree.current': '현재 worktree',
'sessions.sidebar.session.moveToWorktree.existingSuccess': '세션을 worktree로 이동했습니다',
'sessions.sidebar.session.moveToWorktree.existingFailed': '세션을 worktree로 이동하지 못했습니다',
'sessions.sidebar.session.moveToWorktree.tooltipTargets': '기존 worktree와 이 세션용 새 worktree를 만드는 옵션을 표시합니다.',
'sessions.sidebar.session.moveToWorktree.tooltip': '현재 브랜치에서 새 worktree를 만들어 이 세션과 하위 세션을 그곳으로 이동합니다. 원본에 커밋되지 않은 변경 사항이 있으면 이동 여부를 선택합니다.',
'sessions.sidebar.session.moveToWorktree.tooltipBusy': '세션이 유휴 상태일 때 사용할 수 있습니다. 현재 작업을 중지하거나 완료될 때까지 기다리세요.',
'sessions.sidebar.session.moveToWorktree.tooltipMoving': '이 세션은 이미 새 worktree로 이동 중입니다.',
'sessions.sidebar.session.moveToWorktree.confirm.title': '원본에 커밋되지 않은 변경 사항이 있습니다',
'sessions.sidebar.session.moveToWorktree.confirm.changedFiles': '이 worktree에서 변경된 파일: {count}개.',
'sessions.sidebar.session.moveToWorktree.confirm.ownership': 'OpenCode는 이 변경 사항을 세션이 아닌 디렉터리 기준으로 추적합니다.',
'sessions.sidebar.session.moveToWorktree.confirm.sessionOnlyHelp': '원본 파일은 그대로 둔 채 이 세션과 하위 세션을 이동합니다.',
'sessions.sidebar.session.moveToWorktree.confirm.allChangesHelp': '세션 디렉터리 아래의 변경 사항을 전송합니다. 스테이지되지 않거나 추적되지 않은 파일은 성공 후 원본을 떠납니다.',
'sessions.sidebar.session.moveToWorktree.confirm.stagedWarning': '스테이지된 변경 사항은 원본에 남고 목적지로 복사됩니다.',
'sessions.sidebar.session.moveToWorktree.confirm.baseWarning': '목적지가 다른 Git 베이스를 사용하면 전송이 실패할 수 있습니다.',
'sessions.sidebar.session.moveToWorktree.confirm.sessionOnly': '세션만 이동',
'sessions.sidebar.session.moveToWorktree.confirm.allChanges': '원본 변경 사항 모두 이동',
'sessions.sidebar.session.moveToWorktree.confirm.cancel': '취소',
'sessions.sidebar.session.moveToWorktree.sourceVerificationFailed': '원본 변경 사항을 확인하지 못했습니다. worktree와 세션 모두 변경되지 않았습니다.',
'sessions.sidebar.session.moveToWorktree.applyChangesFailed': '목적지가 원본 변경 사항을 받아들이지 못했습니다. 세션과 원본 변경 사항이 이동되지 않았습니다. 다시 시도해 세션만 이동을 선택하세요.',
'sessions.sidebar.session.moveToWorktree.changesMayBeInDestination': '목적지가 이동을 확인하기 전에 연결이 끊겼습니다. 세션이 이동하지 않았을 수 있고, 커밋하지 않은 변경 사항이 이미 대상 워크트리에 있을 수 있습니다. 다시 시도하기 전에 확인하세요.',
'sessions.sidebar.session.menu.runFusion': 'fusion 실행',
'sessions.sidebar.session.menu.openInSidePanel': '사이드 패널에서 열기',
'sessions.sidebar.session.actions.openInEditor': '편집기에서 열기',
@@ -531,6 +589,10 @@ export const dict: Record<I18nKey, string> = {
'sessions.sidebar.session.status.pinned': '고정된 세션',
'sessions.sidebar.session.status.movingToWorktree': '세션을 새 worktree로 이동하는 중',
'sessions.sidebar.session.status.permissionRequired': '권한 필요',
'sessions.sidebar.session.status.questionPendingSingle': '대기 중인 질문 1개',
'sessions.sidebar.session.status.questionPendingMany': '대기 중인 질문 {count}개',
'sessions.sidebar.session.status.activeFor': '{duration} 동안 활성 상태',
'sessions.sidebar.session.status.lastTurnDuration': '마지막 턴 소요 시간 {duration}',
'sessions.sidebar.session.subsessions.collapse': '하위 세션 접기',
'sessions.sidebar.session.subsessions.expand': '하위 세션 펼치기',
'sessions.sidebar.dialogs.deleteSession.title': '세션 삭제?',
@@ -984,6 +1046,8 @@ export const dict: Record<I18nKey, string> = {
'gitView.pr.field.draft': '드래프트',
'gitView.pr.field.title': '제목',
'gitView.pr.githubNotConnected': 'GitHub에 연결되지 않음',
'gitView.pr.history.merged': 'PR #{number}이(가) {base}에 병합되었습니다.',
'gitView.pr.history.closed': 'PR #{number}이(가) 닫혔습니다.',
'gitView.pr.loadingDescription': '설명 로드 중…',
'gitView.pr.mergeMethod.merge': '병합 커밋 생성',
'gitView.pr.mergeMethod.rebase': '리베이스 후 병합',
@@ -1100,11 +1164,20 @@ export const dict: Record<I18nKey, string> = {
'contextPanel.mode.context': '컨텍스트',
'contextPanel.mode.preview': '미리보기',
'contextPanel.mode.browser': '브라우저',
'contextRail.configure.open': '패널 구성',
'contextRail.configure.dialogTitle': '레일 패널',
'contextRail.configure.dialogDescription': '레일에 표시할 패널을 선택하세요. 숨긴 패널의 데이터는 유지되며 명령 팔레트에서 계속 열 수 있습니다.',
'contextRail.configure.showAll': '모두 표시',
'contextRail.configure.noneWarning': '모든 패널이 숨겨져 있습니다.',
'contextRail.aria.rail': '패널 서피스',
'contextPanel.editorEmpty.title': '열린 파일 없음',
'contextPanel.editorEmpty.description': '트리에서 파일을 선택해 편집을 시작하세요.',
'contextRail.surface.editor.description': '프로젝트 파일 편집',
'contextRail.surface.git.description': '커밋, 브랜치, 풀 리퀘스트',
'contextRail.surface.git.changesCountAriaSingle': '{label}, 변경된 파일 {count}개',
'contextRail.surface.git.changesCountAriaPlural': '{label}, 변경된 파일 {count}개',
'contextRail.surface.git.changesCountTooltipSingle': '변경된 파일 {count}개',
'contextRail.surface.git.changesCountTooltipPlural': '변경된 파일 {count}개',
'contextRail.surface.terminal.description': '내장 터미널',
'contextRail.surface.diff.description': '작업 중인 변경 사항 검토',
'contextPanel.mode.walkthrough': '워크스루',
@@ -1144,8 +1217,11 @@ export const dict: Record<I18nKey, string> = {
'walkthrough.toc.moreFiles': '다른 파일: {count}',
'walkthrough.toc.uncovered': '미포함: {count}',
'walkthrough.toc.resize': '목차 열 너비 조절',
'walkthrough.importance.critical': '중요',
'walkthrough.importance.critical': '핵심 변경',
'walkthrough.importance.criticalHint': '이 단계가 변경 전체를 이끌고 있으니 꼼꼼히 읽어 보세요. 코드에서 발견된 문제가 아닙니다.',
'walkthrough.importance.context': '참고',
'walkthrough.importance.contextHint': '나머지를 이해하는 데 도움이 되도록 함께 실은 보조 변경입니다.',
'walkthrough.help.guide': '워크스루 작동 방식',
'walkthrough.blocked.noModel.title': '사용할 수 있는 스몰 모델이 없습니다',
'walkthrough.blocked.noModel.description': '리뷰를 생성하려면 모델 제공자에 로그인하세요.',
'walkthrough.blocked.emptyDiff.title': '리뷰할 내용이 없습니다',
@@ -1160,22 +1236,77 @@ export const dict: Record<I18nKey, string> = {
'walkthrough.blocked.outputExhausted.descriptionUnknownModel': '스몰 모델이 출력 예산을 모두 추론에 쓰고 아무것도 반환하지 않았습니다. 추론 모델은 큰 diff에서 흔히 이렇게 됩니다. 덜 추론하는 모델을 고르거나 범위를 좁혀 보세요.',
'walkthrough.blocked.onlyGenerated.title': '생성된 파일만 변경되었습니다',
'walkthrough.blocked.onlyGenerated.description': '여기의 변경은 모두 잠금 파일이거나 도구가 만든 산출물이며, 리뷰는 이런 파일을 의도적으로 건너뜁니다.',
'walkthrough.blocked.serverUnsupported.title': '이 서버는 워크스루를 지원하지 않습니다',
'walkthrough.blocked.serverUnsupported.description': '이 앱이 연결된 OpenChamber 서버가 워크스루 API에 응답하지 않았습니다. 즉 앱보다 오래된 버전입니다. 서버를 1.18 이상으로 업데이트한 뒤 새로 고치세요.',
'walkthrough.blocked.contextTooSmall.descriptionUnknownModel': '스몰 모델은 약 {available}천 자를 담을 수 있는데 이 diff에는 약 {required}천 자가 필요합니다. 잘라내지 않으니 컨텍스트가 더 큰 모델을 선택하세요.',
'walkthrough.blocked.structuredOutput.descriptionUnknownModel': '스몰 모델은 워크스루에 필요한 구조화된 응답을 지원하지 않습니다.',
'contextRail.surface.plan.description': '현재 계획 보기',
'contextRail.surface.pr.description': '현재 브랜치의 풀 리퀘스트를 생성, 검토, 병합',
'contextRail.surface.notes.description': '프로젝트의 노트, 할 일, 계획',
'contextRail.surface.notes.description': '프로젝트의 노트, 할 일, 계획, 에이전트 메모리',
'contextRail.surface.context.description': '세션 컨텍스트 및 토큰 사용량',
'contextRail.surface.browser.description': '내장 웹 브라우저',
'contextRail.surface.preview.description': '개발 서버 미리보기',
'contextRail.surface.chat.description': '나란히 연 세션',
'contextRail.surface.notes': '프로젝트 노트',
'contextRail.surface.notes': '프로젝트 지식',
'contextRail.editorTree.toggle': '파일 트리 표시 전환',
'contextPanel.browser.open': '브라우저 패널 열기',
'contextPanel.browser.addressAria': '브라우저 주소',
'contextPanel.browser.history.label': '최근 주소',
'contextPanel.browser.history.forget': '기록에서 제거',
'contextPanel.browser.newTab': '새 브라우저 탭',
'contextPanel.browser.empty': '웹 브라우저',
'contextPanel.browser.emptyHint': '위에 주소를 입력하여 탐색을 시작하세요',
'contextPanel.browser.inspectUnavailable': '브라우저 패널에서 이 페이지를 검사할 수 없습니다.',
'contextPanel.browser.back': '뒤로',
'contextPanel.browser.forward': '앞으로',
'contextPanel.browser.reload': '새로고침',
'contextPanel.browser.hardReload': '캐시를 무시하고 새로고침',
'contextPanel.browser.zoomIn': '확대',
'contextPanel.browser.zoomOut': '축소',
'contextPanel.browser.zoomReset': '확대/축소 초기화',
'contextPanel.browser.clearCookies': '쿠키 삭제',
'contextPanel.browser.clearCache': '캐시 삭제',
'contextPanel.browser.clearedCookies': '쿠키를 삭제했습니다',
'contextPanel.browser.clearedCache': '캐시를 삭제했습니다',
'contextPanel.browser.clearFailed': '브라우징 데이터를 삭제하지 못했습니다',
'contextPanel.browser.stop': '중지',
'contextPanel.browser.openExternal': '시스템 브라우저에서 열기',
'contextPanel.browser.devTools': 'DevTools 열기',
'contextPanel.browser.deviceToolbar': '디바이스 도구 모음',
'contextPanel.browser.device.preset': '디바이스 프리셋',
'contextPanel.browser.device.responsive': '반응형',
'contextPanel.browser.device.width': '뷰포트 너비',
'contextPanel.browser.device.height': '뷰포트 높이',
'contextPanel.browser.device.rotate': '회전',
'contextPanel.browser.device.schemeSystem': '자동',
'contextPanel.browser.device.schemeLight': '라이트',
'contextPanel.browser.device.schemeDark': '다크',
'contextPanel.browser.device.schemeFailed': '페이지 외관을 바꾸지 못했습니다',
'contextPanel.browser.frameTitle': '브라우저',
'contextPanel.browser.loadFailed': '이 페이지를 불러오지 못했습니다',
'contextPanel.browser.waitingForServer': '개발 서버를 기다리는 중',
'contextPanel.browser.waitingForServerHint': '아직 연결을 받지 않습니다. 준비되는 대로 이 페이지를 불러옵니다.',
'contextPanel.browser.tunnelFailed': '이 개발 서버에 연결하지 못했습니다',
'contextPanel.browser.tunnelFailedHint': '{url} 은(는) OpenChamber가 실행 중인 컴퓨터에 있으며, 그곳으로의 연결을 열지 못했습니다. 이 화면에는 사용자 컴퓨터의 내용이 표시되지 않습니다.',
'contextPanel.browser.loadFailedUnknown': '페이지에 접근할 수 없습니다.',
'contextPanel.browser.crashed': '이 페이지가 응답하지 않습니다',
'contextPanel.browser.crashedHint': '페이지가 반복해서 중단되었습니다. 다시 시도하려면 새로 고치세요.',
'contextPanel.browser.devServers.title': '실행 중인 개발 서버',
'projectActions.toast.multipleServers': '여러 서버가 시작되었습니다. 브라우저 패널에서 선택하세요',
'contextPanel.browser.devServers.justStarted': '방금 시작됨',
'contextPanel.browser.devServers.unavailable': '실행 중인 개발 서버를 확인하지 못했습니다.',
'contextPanel.browser.devServers.remoteOnly': '이 서버들은 OpenChamber가 실행 중인 컴퓨터에 있습니다. 열려면 데스크톱 앱이 필요합니다.',
'contextPanel.browser.annotate.toggle': '페이지에 주석 달기',
'contextPanel.browser.annotate.intro': '앱 내 브라우저에서 주석을 단 선택 영역입니다.',
'contextPanel.browser.annotate.attached': '주석을 채팅에 첨부했습니다',
'contextPanel.browser.annotate.noSession': '주석을 첨부하기 전에 채팅 세션을 여세요',
'contextPanel.browser.annotate.noPage': '주석을 달기 전에 페이지를 불러오세요',
'contextPanel.browser.annotate.failed': '이 페이지에 주석을 달 수 없습니다',
'contextPanel.browser.annotate.tool.element': '요소',
'contextPanel.browser.annotate.tool.region': '영역',
'contextPanel.browser.annotate.tool.draw': '그리기',
'contextPanel.browser.annotate.commentPlaceholder': '변경 사항을 설명하세요...',
'contextPanel.browser.annotate.submit': '첨부',
'contextPanel.browser.trustNotice': '여기서 여는 페이지는 OpenChamber에 대한 전체 액세스 권한으로 실행됩니다 — 검사와 스크린샷에 필요합니다. 신뢰하는 사이트만 여세요: 악성 페이지가 데이터를 읽거나 사용자를 대신해 동작할 수 있습니다.',
'contextPanel.preview.actions.reload': '미리보기 새로고침',
'contextPanel.preview.actions.openExternal': '브라우저에서 열기',
@@ -1224,7 +1355,6 @@ export const dict: Record<I18nKey, string> = {
'contextPanel.preview.console.filter.logs': '로그',
'terminalView.preview.open': '미리보기',
'terminalView.preview.openTitle': '미리보기 패널 열기',
'header.services.shutdownDev': 'OpenChamber 종료',
'chat.messageBody.actions.openPreviewAria': '미리보기 열기',
'chat.messageBody.actions.openPreview': '미리보기 열기',
'contextPanel.tab.closeTabAria': '{label} 탭 닫기',
@@ -1247,6 +1377,14 @@ export const dict: Record<I18nKey, string> = {
'sidebarFilesTree.toast.writeNotSupported': '쓰기를 지원하지 않음',
'sidebarFilesTree.toast.fileCreated': '파일 생성됨',
'sidebarFilesTree.toast.operationFailed': '작업 실패',
'sidebarFilesTree.toast.uploaded': '파일을 업로드했습니다',
'sidebarFilesTree.toast.uploadedWithoutConflicts': '충돌하지 않은 파일을 업로드했습니다',
'sidebarFilesTree.toast.uploadFailed': '일부 파일을 업로드하지 못했습니다',
'sidebarFilesTree.drop.target': '{path}에 업로드',
'sidebarFilesTree.drop.uploading': '{path}에 파일 업로드 중',
'sidebarFilesTree.dialog.uploadConflicts.title': '기존 파일을 교체할까요?',
'sidebarFilesTree.dialog.uploadConflicts.description': '같은 이름의 파일이 {path}에 이미 있습니다. 교체 작업은 취소할 수 없습니다.',
'sidebarFilesTree.dialog.uploadConflicts.replace': '교체',
'sidebarFilesTree.toast.folderNameRequired': '폴더 이름 필수',
'sidebarFilesTree.toast.folderCreated': '폴더 생성됨',
'sidebarFilesTree.toast.nameRequired': '이름 필수',
@@ -1303,6 +1441,12 @@ export const dict: Record<I18nKey, string> = {
'filesView.editor.disableLineWrap': '줄 바꿈 끄기',
'filesView.editor.enableLineWrap': '줄 바꿈 켜기',
'filesView.editor.findInFile': '파일에서 찾기',
'filesView.preview.find.placeholder': '미리보기에서 찾기',
'filesView.preview.find.nextAria': '다음 일치 항목',
'filesView.preview.find.previousAria': '이전 일치 항목',
'filesView.preview.find.closeAria': '검색 닫기',
'filesView.preview.find.noMatches': '일치 항목 없음',
'filesView.preview.find.countAria': '{total}개 중 {current}번째',
'filesView.editor.goToLine': '줄로 이동',
'filesView.editor.switchToEditMode': '편집 모드로 전환',
'filesView.editor.switchToPreviewMode': '미리보기 모드로 전환',
@@ -1354,10 +1498,12 @@ export const dict: Record<I18nKey, string> = {
'contextUsage.mobile.usedTokens': '사용한 토큰',
'contextUsage.mobile.contextLimit': '컨텍스트 한도',
'contextUsage.mobile.outputLimit': '출력 한도',
'contextUsage.mobile.cost': '비용',
'contextUsage.mobile.usage': '사용량',
'contextUsage.tooltip.usedTokens': '사용됨 토큰: {tokens}',
'contextUsage.tooltip.contextLimit': '컨텍스트 한도: {tokens}',
'contextUsage.tooltip.outputLimit': '출력 한도: {tokens}',
'contextUsage.tooltip.cost': '비용: {cost}',
'contextSidebar.session.untitled': '제목 없는 세션',
'contextSidebar.empty.openSession': '컨텍스트를 볼 세션을 여세요.',
'contextSidebar.section.context': '컨텍스트',
@@ -1384,6 +1530,7 @@ export const dict: Record<I18nKey, string> = {
'planView.file.defaultName': 'plan',
'planView.title.default': '플랜',
'planView.error.saveFailed': '저장 실패',
'planView.error.loadFailed': '이 계획을 불러오지 못했습니다',
'planView.error.previewUnavailable': '미리보기를 사용할 수 없음',
'planView.error.switchToEditMode': '문제를 수정하려면 편집 모드로 전환하세요.',
'planView.error.writeFailed': '쓰기 실패',
@@ -1425,6 +1572,13 @@ export const dict: Record<I18nKey, string> = {
"diffView.scope.changed": "Changed",
"diffView.scope.staged": "Staged",
"diffView.scope.lastTurn": "마지막 턴",
"diffView.scope.branch": "브랜치",
"diffView.branch.resolvingBase": "베이스 브랜치 감지 중...",
"diffView.branch.noBaseTitle": "베이스 브랜치 없음",
"diffView.branch.noBaseDescription": "이 브랜치가 어디서 시작되었는지 Git에 기록이 없습니다. 비교할 베이스 브랜치를 선택하세요.",
"diffView.branch.loadError": "브랜치 변경 사항을 불러오지 못했습니다",
"diffView.branch.loadingFiles": "브랜치 변경 사항 불러오는 중...",
"diffView.branch.empty": "이 브랜치에는 {base}에 대한 변경 사항이 없습니다",
"diffView.scope.selectorAria": "변경 모드 선택",
'diffView.actions.retry': '다시 시도',
'diffView.actions.renderAnyway': '그래도 렌더링',
@@ -1449,6 +1603,12 @@ export const dict: Record<I18nKey, string> = {
'diffView.reviewDialog.toast.noSessionDirectory': '세션 디렉터리를 사용할 수 없습니다',
'diffView.reviewDialog.toast.startFailed': '리뷰 흐름을 시작하지 못했습니다',
'chat.history.loadOlder': '이전 메시지 불러오기',
'chat.appLink.confirm.title': '이 링크를 다른 앱에서 열까요?',
'chat.appLink.confirm.description': '이 채팅 링크는 {scheme} 프로토콜을 사용하며 다른 앱에서 열립니다.',
'chat.appLink.confirm.descriptionPlain': '이 채팅 링크는 다른 앱에서 열립니다.',
'chat.appLink.confirm.cancel': '취소',
'chat.appLink.confirm.open': '한 번만 열기',
'chat.appLink.confirm.trustAndOpen': '신뢰하고 열기',
'chat.autoReview.title': '코드 리뷰 루프 실행 중',
'chat.autoReview.status.waitingForReviewer': '리뷰어를 기다리는 중',
'chat.autoReview.status.waitingForImplementer': '구현 에이전트를 기다리는 중',
@@ -1466,11 +1626,46 @@ export const dict: Record<I18nKey, string> = {
'diffView.hunk.unsupported': '개별 허크 스테이징은 이 환경에서 지원되지 않습니다.',
'rightSidebar.contextNotesTodo.plan.defaultTitle': '플랜',
'rightSidebar.contextNotesTodo.empty.selectProject': '메모와 Todo를 추가할 프로젝트를 선택하세요.',
'rightSidebar.contextNotesTodo.notes.title': '빠른 메모 - {project}',
'rightSidebar.contextNotesTodo.notes.placeholder': '컨텍스트, 리마인더, 링크를 기록하세요',
'rightSidebar.contextNotesTodo.todo.title': 'Todo',
'rightSidebar.contextNotesTodo.todo.itemsSingle': '{count}개 항목',
'rightSidebar.contextNotesTodo.todo.itemsPlural': '{count}개 항목',
'rightSidebar.contextNotesTodo.notes.addAria': '노트 추가',
'rightSidebar.contextNotesTodo.notes.empty': '아직 노트가 없습니다. 맥락이나 메모, 링크를 남겨 보세요.',
'rightSidebar.contextNotesTodo.notes.actions.expand': '노트 펼치기',
'rightSidebar.contextNotesTodo.notes.actions.collapse': '노트 접기',
'rightSidebar.contextNotesTodo.notes.actions.delete': '노트 삭제',
'rightSidebar.contextNotesTodo.notes.actions.pin': '에이전트 컨텍스트에 고정',
'rightSidebar.contextNotesTodo.notes.actions.unpin': '에이전트 컨텍스트에서 고정 해제',
'rightSidebar.contextNotesTodo.notes.source.selection': '채팅에서',
'rightSidebar.contextNotesTodo.notes.source.agent': '에이전트에서',
'rightSidebar.contextNotesTodo.search.placeholder': '검색',
'rightSidebar.contextNotesTodo.search.clear': '검색 지우기',
'rightSidebar.contextNotesTodo.search.noResults': '"{query}"과(와) 일치하는 항목이 없습니다.',
'rightSidebar.contextNotesTodo.toast.deleteNoteFailed': '노트를 삭제하지 못했습니다',
'rightSidebar.contextNotesTodo.toast.createNoteFailed': '노트를 만들지 못했습니다',
'rightSidebar.contextNotesTodo.tabs.notes': '노트',
'rightSidebar.contextNotesTodo.tabs.todos': '할 일',
'rightSidebar.contextNotesTodo.tabs.plans': '계획',
'rightSidebar.contextNotesTodo.plans.actions.back': '계획 목록으로',
'rightSidebar.contextNotesTodo.tabs.memory': '메모리',
'rightSidebar.contextNotesTodo.sections.label': '프로젝트 컨텍스트 섹션',
'rightSidebar.contextNotesTodo.sections.resize': '섹션 사이드바 너비 조절',
'rightSidebar.contextNotesTodo.memory.scope.project': '프로젝트',
'rightSidebar.contextNotesTodo.memory.scope.label': '메모리 범위',
'rightSidebar.contextNotesTodo.memory.scope.global': '사용자 정보',
'rightSidebar.contextNotesTodo.memory.type.fact': '사실',
'rightSidebar.contextNotesTodo.memory.badge.new': '신규',
'rightSidebar.contextNotesTodo.memory.flagged': '에이전트에 전달되지 않음 — 지시문처럼 읽힘',
'rightSidebar.contextNotesTodo.memory.badge.changed': '변경',
'rightSidebar.contextNotesTodo.memory.type.preference': '선호',
'rightSidebar.contextNotesTodo.memory.type.reference': '참조',
'rightSidebar.contextNotesTodo.memory.actions.delete': '이 항목 삭제',
'rightSidebar.contextNotesTodo.memory.actions.editTitle': '메모리 제목',
'rightSidebar.contextNotesTodo.memory.actions.editBody': '메모리 내용',
'rightSidebar.contextNotesTodo.memory.toast.saveFailed': '메모리를 저장하지 못했습니다',
'rightSidebar.contextNotesTodo.memory.toast.deleteFailed': '항목을 삭제하지 못했습니다',
'rightSidebar.contextNotesTodo.memory.empty.nothing': '에이전트가 아직 저장한 항목이 없습니다.',
'rightSidebar.contextNotesTodo.memory.empty.noMatches': '검색과 일치하는 저장 항목이 없습니다.',
'rightSidebar.contextNotesTodo.memory.empty.noProject': '프로젝트를 열면 에이전트가 기억하는 내용을 볼 수 있습니다.',
'rightSidebar.contextNotesTodo.memory.empty.unavailable': '저장된 메모리를 불러오지 못했습니다. 사라진 것은 없습니다. 다시 시도하세요.',
'rightSidebar.contextNotesTodo.todo.clearCompleted': '완료 항목 지우기',
'rightSidebar.contextNotesTodo.todo.inputPlaceholder': 'Todo 추가',
'rightSidebar.contextNotesTodo.todo.addAria': 'Todo 추가',
@@ -1481,13 +1676,9 @@ export const dict: Record<I18nKey, string> = {
'rightSidebar.contextNotesTodo.todo.actions.delete': '"{text}" 삭제',
'rightSidebar.contextNotesTodo.todo.actions.send': '보내기 "{text}"',
'rightSidebar.contextNotesTodo.todo.actions.reorder': '재정렬 "{text}"',
'rightSidebar.contextNotesTodo.todo.resizeAria': '할 일 목록 크기 조정',
'rightSidebar.contextNotesTodo.todo.sendMenu.currentSession': '현재 세션으로 보내기',
'rightSidebar.contextNotesTodo.todo.sendMenu.newSession': '새 세션으로 보내기',
'rightSidebar.contextNotesTodo.todo.sendMenu.newWorktreeSession': '새 워크트리 세션으로 보내기',
'rightSidebar.contextNotesTodo.plans.title': '플랜',
'rightSidebar.contextNotesTodo.plans.filesSingle': '{count} 파일',
'rightSidebar.contextNotesTodo.plans.filesPlural': '{count} 파일',
'rightSidebar.contextNotesTodo.plans.importFromFile': '파일에서 플랜 가져오기',
'rightSidebar.contextNotesTodo.plans.empty': '아직 저장된 플랜 없음',
'rightSidebar.contextNotesTodo.plans.deletePlan': '플랜 삭제',
@@ -1507,13 +1698,14 @@ export const dict: Record<I18nKey, string> = {
'rightSidebar.contextNotesTodo.toast.sentToNewSession': '할 일을 새 세션으로 보냈습니다',
'rightSidebar.contextNotesTodo.toast.sentToNewWorktreeSession': '할 일을 새 워크트리 세션으로 보냈습니다',
'rightSidebar.contextNotesTodo.toast.sendTodoFailed': 'Todo 전송 실패',
'rightSidebar.contextNotesTodo.toast.updatePlanFailed': '계획을 업데이트하지 못했습니다',
'rightSidebar.contextNotesTodo.toast.deletePlanFailed': '플랜 삭제 실패',
'rightSidebar.contextNotesTodo.toast.planFileEmpty': '플랜 파일이 비어 있음',
'rightSidebar.contextNotesTodo.toast.importPlanFailed': '플랜 가져오기 실패',
'rightSidebar.contextNotesTodo.toast.planImported': '플랜 가져옴',
'rightSidebar.contextNotesTodo.toast.readPlanFileFailed': '플랜 파일 읽기 실패',
'inlineComment.range.lines': '줄 {start}-{end}',
'inlineComment.input.placeholder': '댓글 추가… (Cmd+Enter로 저장)',
'inlineComment.input.placeholder': '댓글 추가… ({shortcut}로 저장)',
'inlineComment.input.placeholderShort': '댓글 추가…',
'inlineComment.actions.cancel': '취소',
'inlineComment.actions.save': '저장',
@@ -1532,8 +1724,6 @@ export const dict: Record<I18nKey, string> = {
'header.github.accountSource.cli': 'CLI',
'header.services.openWithCurrent': '인스턴스, 사용량, MCP 열기(현재: {current})',
'header.services.open': '서비스, 사용량, MCP 열기',
'header.services.tooltip.currentInstanceWithShortcuts': '현재 인스턴스: {current} ({toggle}; 다음 탭 {nextTab})',
'header.services.tooltip.servicesWithShortcuts': '서비스 ({toggle}; 다음 탭 {nextTab})',
'header.services.title': '서비스',
'header.services.viewAria': '서비스 보기',
'header.services.closeAria': '서비스 닫기',
@@ -1642,6 +1832,10 @@ export const dict: Record<I18nKey, string> = {
'directoryExplorerDialog.browse.directories': '디렉터리',
'directoryExplorerDialog.browse.loading': '디렉터리 로드 중...',
'directoryExplorerDialog.browse.empty': '일치하는 디렉터리가 없습니다.',
'directoryExplorerDialog.browse.permissionDenied': 'OpenChamber에서 이 폴더에 접근해야 합니다.',
'directoryExplorerDialog.browse.loadFailed': '이 폴더를 불러올 수 없습니다.',
'directoryExplorerDialog.browse.grantAccess': '접근 허용',
'directoryExplorerDialog.browse.retry': '다시 시도',
'directoryExplorerDialog.browse.parentDirectory': '상위 디렉터리',
'directoryExplorerDialog.browse.addedBadge': '추가됨',
'directoryExplorerDialog.browse.quickAdd': '추가',
@@ -1701,22 +1895,18 @@ export const dict: Record<I18nKey, string> = {
'helpDialog.item.focusChatInput': '채팅 입력창으로 포커스 이동',
'helpDialog.item.togglePromptNavigator': '프롬프트 탐색기 표시/숨기기',
'helpDialog.item.abortActiveRun': '활성 실행 중단(두 번 누르기)',
'helpDialog.item.toggleRightSidebar': '컨텍스트 패널 표시 전환',
'helpDialog.item.openRightSidebarGitTab': 'Git 서피스 열기',
'helpDialog.item.openRightSidebarFilesTab': '파일 서피스 열기',
'helpDialog.item.toggleTerminalDock': '터미널 독 전환',
'helpDialog.item.toggleTerminalExpanded': '터미널 펼치기/접기',
'helpDialog.item.togglePlanContextPanel': '플랜 컨텍스트 패널 전환',
'helpDialog.item.cycleTheme': '테마 순환(라이트 → 다크 → 시스템)',
'helpDialog.item.switchProject': '프로젝트 전환',
'helpDialog.item.switchSessionTab': '세션 탭 전환',
'helpDialog.item.switchContextSurface': '컨텍스트 패널 서피스 전환(숫자 키)',
'helpDialog.item.toggleServicesMenu': '서비스 메뉴 전환',
'helpDialog.item.cycleServicesTab': '서비스 탭 순환',
'helpDialog.item.openSettings': '설정 열기',
'helpDialog.keyCombiner.or': '또는',
'helpDialog.proTips.title': '팁:',
'helpDialog.proTips.commandPalette': '명령 팔레트({shortcut})로 모든 작업에 빠르게 접근하세요',
'helpDialog.proTips.recentSessions': '최근 세션 5개가 명령 팔레트에 표시됩니다',
'helpDialog.proTips.themeCycling': '테마 순환은 세션 간에도 선호 설정을 기억합니다',
'helpDialog.proTips.leaderSequences': '2단계 단축키: 조합을 누른 뒤 두 번째 키를 누르세요 (Esc로 취소)',
'header.actions.rightSidebarWithShortcut': '오른쪽 사이드바 ({shortcut})',
'header.actions.toggleRightSidebarAria': '오른쪽 사이드바 토글',
'header.actions.openAppMenu': 'OpenChamber 메뉴',
@@ -1800,8 +1990,6 @@ export const dict: Record<I18nKey, string> = {
'session.newWorktree.noMatchingBranches': '일치하는 브랜치가 없습니다',
'session.newWorktree.localBranches': '로컬 브랜치',
'session.newWorktree.remoteBranches': '리모트 브랜치',
'session.newWorktree.otherLocalBranches': '기타 로컬 브랜치',
'session.newWorktree.otherRemoteBranches': '기타 리모트 브랜치',
'session.newWorktree.branchName': '브랜치 이름',
'session.newWorktree.branchNamePlaceholder': 'feature/my-awesome-feature',
'session.newWorktree.actions.change': '변경',
@@ -1926,7 +2114,6 @@ export const dict: Record<I18nKey, string> = {
'chat.statusRow.tasksTitle': '작업',
'chat.statusRow.modelStatus': '{model} · {status}',
'chat.statusRow.summary.activeLeft': '{active}개 활성 · {left}개 남음',
'chat.statusRow.aborted': '중단됨',
'chat.revertIndicator.redo': '다시 실행',
'chat.revertIndicator.redoAria': '다시 실행 — 되돌린 메시지 복원',
'chat.revertPopover.title': '되돌림',
@@ -1940,6 +2127,9 @@ export const dict: Record<I18nKey, string> = {
'chat.revert.toast.undo': '{preview}(으)로 되돌림',
'chat.revert.toast.redo': '다시 실행',
'chat.revert.toast.restored': '모든 메시지 복원됨',
'chat.toast.opencodeRestartInterrupted.title': '채팅이 중단되었습니다',
'chat.toast.opencodeRestartInterrupted.description': '응답이 진행 중인 동안 OpenCode가 다시 시작되었습니다. 계속하려면 메시지를 보내세요.',
'chat.toast.opencodeRestartInterrupted.openSession': '세션 열기',
'chat.errorBoundary.title': '채팅 오류',
'chat.errorBoundary.description': '채팅 인터페이스에서 오류가 발생했습니다. 일시적인 네트워크 이슈 또는 손상된 메시지 데이터 때문일 수 있습니다.',
'chat.errorBoundary.sessionLabel': '세션',
@@ -1966,6 +2156,7 @@ export const dict: Record<I18nKey, string> = {
'chat.commandAutocomplete.command.catchUpDescription': '맥락을 다시 파악합니다: 무엇을 하고 있었고 어디서 이어서 할지.',
'chat.commandAutocomplete.command.debugDescription': '수정안을 제시하기 전에 버그의 근본 원인을 단계적으로 조사합니다.',
'chat.commandAutocomplete.command.weighDescription': '결정하기 전에 2~3가지 접근 방식을 장단점과 함께 비교하고 추천을 제시합니다.',
'chat.commandAutocomplete.command.btwDescription': '이 채팅을 방해하지 않고 임시 하위 세션에서 별도 질문하기',
'chat.commandAutocomplete.command.exploreDescription': '코드베이스에 대한 방향을 잡습니다: 아키텍처와 주요 부분을 한눈에 살펴봅니다.',
'chat.commandAutocomplete.badge.skill': '스킬',
'chat.commandAutocomplete.badge.command': '명령',
@@ -1986,13 +2177,28 @@ export const dict: Record<I18nKey, string> = {
'chat.container.returnToParent.titleNamed': '돌아가기: {title}',
'chat.container.returnToParent.title': '상위 세션으로 돌아가기',
'chat.container.returnToParent.label': '상위',
'chat.btw.destroyAria': '이 btw 세션 삭제',
'chat.btw.titleFallback': 'btw 세션',
'chat.btw.mainComposerPlaceholder': '이 btw 세션에서 질문하세요…',
'chat.btw.loading': 'btw 세션 시작 중…',
'chat.btw.toast.emptyArgument': '/btw 뒤에 질문을 입력하세요',
'chat.btw.toast.createFailed': 'btw 세션을 시작하지 못했습니다',
'chat.btw.toast.destroyFailed': 'btw 세션을 삭제하지 못했습니다. 사이드바에 남아 있습니다.',
'chat.btw.working': '작업 중…',
'chat.btw.collapseAria': 'btw 패널 접기',
'chat.btw.expandAria': 'btw 패널 펼치기',
'chat.btw.promoteAria': '별도 세션으로 유지',
'chat.btw.toast.promoteFailed': 'btw 세션을 유지하지 못했습니다',
'chat.container.readOnlySubagentPromptBanner': '하위 에이전트 세션에는 프롬프트를 보낼 수 없습니다.',
'chat.container.sessionLoadError.title': '세션을 불러올 수 없습니다',
'chat.container.sessionLoadError.description': '연결을 확인한 후 이 세션을 다시 불러오세요.',
'chat.container.sessionLoadError.description': '대화를 가져오지 못했습니다. 서버가 꺼져 있거나 연결할 수 없는 상태일 수 있습니다. 데이터는 사라지지 않았으니 복구되면 다시 시도하세요.',
'chat.container.sessionLoadError.authDescription': '세션이 만료되어 서버가 요청을 거부했습니다. 로그인하면 대화가 로드됩니다.',
'chat.container.sessionLoadError.retry': '다시 시도',
'sessions.sidebar.group.empty.loadingSessions': '세션을 불러오는 중…',
'sessions.sidebar.group.empty.loadFailed': '세션을 새로 고칠 수 없습니다.',
'sessions.sidebar.group.empty.retry': '다시 시도',
'sessions.sidebar.group.empty.permissionDenied': '폴더 접근이 필요합니다.',
'sessions.sidebar.group.empty.grantAccess': '접근 허용',
'chat.unifiedControls.title': '컨트롤',
'chat.unifiedControls.model.title': '모델',
'chat.unifiedControls.model.noRecent': '최근 모델 없음',
@@ -2024,12 +2230,13 @@ export const dict: Record<I18nKey, string> = {
'chat.textSelection.toast.addToNotesFailed': '메모 추가 실패',
'chat.textSelection.toast.addToNotesSuccess': '선택한 텍스트를 메모에 추가함',
'chat.textSelection.toast.addToNotesSummaryFailed': '선택 영역을 요약할 수 없어 선택한 텍스트를 메모에 추가함',
'chat.textSelection.actions.addToChat': '채팅에 추가',
'chat.textSelection.actions.newSession': '새 세션',
'chat.textSelection.actions.copy': '복사',
'chat.textSelection.actions.addToInput': '입력란에 추가',
'chat.textSelection.actions.comment': '댓글',
'chat.textSelection.title.commentOnSelection': '선택 영역에 댓글 달기',
'chat.textSelection.comment.placeholder': '선택적 댓글 추가...',
'chat.textSelection.comment.attach': '첨부',
'chat.textSelection.actions.addToNotes': '메모에 추가',
'chat.textSelection.title.addToCurrentChat': '현재 채팅에 추가',
'chat.textSelection.title.newSessionWithSelection': '선택한 내용으로 새 세션 생성',
'chat.textSelection.title.saveInsightToNotes': '선택한 텍스트를 메모에 저장',
'chat.messageBody.actions.revertAria': '이 메시지로 되돌리기',
'chat.messageBody.actions.revert': '여기부터 되돌리기',
@@ -2123,6 +2330,7 @@ export const dict: Record<I18nKey, string> = {
'chat.chatInput.toast.attachmentsTooLarge': '첨부 파일이 너무 커서 보낼 수 없습니다. 이미지 수나 크기를 줄여 보세요.',
'chat.chatInput.toast.sendAttachmentsFailed': '첨부 파일 전송 실패. 파일 수나 이미지 크기를 줄여 보세요.',
'chat.chatInput.toast.messageSendFailed': '메시지 전송에 실패했습니다. 첨부 파일을 복원했습니다.',
'chat.chatInput.toast.noModelSelected': '전송하기 전에 제공업체와 모델을 선택하세요.',
'chat.chatInput.toast.clipboardAttachFailed': '클립보드 이미지 첨부 실패',
'chat.chatInput.toast.clipboardTextAttachFailed': '붙여넣은 텍스트를 파일로 첨부하지 못했습니다',
'chat.chatInput.toast.largeTextPaste.title': '긴 텍스트 감지됨',
@@ -2138,8 +2346,6 @@ export const dict: Record<I18nKey, string> = {
'chat.chatInput.toast.togglePermissionAutoAcceptFailed': '권한 자동 승인 전환에 실패했습니다',
'chat.chatInput.reviewComments': '검토 댓글:',
'chat.chatInput.reviewCommentsRemove': '검토 댓글 제거',
'chat.chatInput.devServerLogs': 'Dev Server 로그:',
'chat.chatInput.devServerLogsRemove': 'Dev Server 로그 제거',
'chat.chatInput.previewAnnotations': '미리보기 주석:',
'chat.chatInput.previewContext': '미리보기 컨텍스트:',
'chat.chatInput.previewContextRemove': '미리보기 컨텍스트 제거',
@@ -2178,6 +2384,7 @@ export const dict: Record<I18nKey, string> = {
'chat.toolPart.showRawJson': '원시 JSON 표시',
'chat.toolPart.showFormattedJson': '형식화된 JSON 표시',
'chat.toolPart.showNavigableJson': '탐색 가능한 JSON 표시',
'chat.toolPart.openFile': '파일 열기',
'chat.toolPart.openFileAtFirstChange': '첫 번째 변경 위치에서 파일 열기',
'chat.toolPart.openFileDiff': '파일 diff 열기',
'chat.toolPart.copyOutput': '출력 복사',
@@ -2309,6 +2516,15 @@ export const dict: Record<I18nKey, string> = {
'commandPalette.item.toggleSidebar': '토글 사이드바',
'commandPalette.item.showContextUsage': '컨텍스트 사용량 표시',
'commandPalette.item.toggleTerminal': '토글 터미널',
'commandPalette.item.cycleTheme': '테마 순환',
'commandPalette.item.showOpenCodeStatus': 'OpenCode 상태 표시',
'commandPalette.item.toggleMemoryDebug': '메모리 디버그 패널 토글',
'commandPalette.item.pinSession': '세션 고정 또는 고정 해제',
'commandPalette.item.copySessionId': '세션 ID 복사',
'commandPalette.item.openMultiRun': '멀티 런 런처 열기',
'commandPalette.item.openArchive': '보관된 세션 열기',
'commandPalette.item.openNotes': '노트 패널 열기',
'commandPalette.item.openTodos': '할 일 패널 열기',
'commandPalette.item.openSettings': '설정... 열기',
'commandPalette.session.untitled': '제목 없는 세션',
'openCodeStatusDialog.title': 'OpenCode 상태',
@@ -2523,6 +2739,9 @@ export const dict: Record<I18nKey, string> = {
'sessionAuth.error.passkeySignInCanceled': '패스키 로그인이 취소되었습니다.',
'sessionAuth.error.enterPasswordForPasskey': '패스키를 추가하려면 비밀번호를 입력하세요.',
'sessionAuth.locked.tunnelTitle': '터널 접근 필요',
'sessionAuth.expired.banner': '세션이 만료되었습니다. 계속하려면 로그인하세요.',
'sessionAuth.expired.loginAction': '로그인',
'sessionAuth.expired.sendBlocked': '세션이 만료되었습니다. 메시지를 보내려면 로그인하세요.',
'sessionAuth.locked.unlockTitle': 'OpenChamber 잠금 해제',
'sessionAuth.locked.tunnelDescription': '데스크톱 앱의 일회용 연결 링크로 이 터널을 여세요.',
'sessionAuth.locked.passwordDescription': '이 세션은 비밀번호로 보호됩니다.',
@@ -2805,6 +3024,10 @@ export const dict: Record<I18nKey, string> = {
'updateDialog.status.updating': '업데이트 중…',
'updateDialog.error.updateFailed': '업데이트 실패',
'updateDialog.error.takingLonger': '업데이트가 예상보다 오래 걸립니다. 잠시 기다린 뒤 새로고침하거나 `openchamber update`를 실행하세요.',
'updateDialog.error.signatureRejected': '다운로드한 업데이트가 거부되었습니다. 코드 서명이 이 설치본과 일치하지 않습니다. 보통 실행 중인 복사본이 공식 서명 릴리스에서 설치되지 않았다는 뜻입니다. 공식 릴리스에서 OpenChamber를 설치한 뒤 다시 업데이트하세요.',
'updateDialog.error.updaterDisabled': '설치에 실패하여 업데이터가 중지되었습니다. OpenChamber를 종료했다가 다시 열고 업데이트를 재시도하세요.',
'updateDialog.error.restartFailed': '업데이트를 설치하기 위한 재시작에 실패했습니다.',
'updateDialog.error.restartUnavailable': '업데이트 설치에는 OpenChamber 데스크톱 앱이 필요합니다.',
'mobileUpdate.toast.available.title': 'OpenChamber 업데이트 사용 가능',
'mobileUpdate.toast.available.description': 'Android용 버전 {version}이 준비되었습니다.',
'mobileUpdate.toast.actions.download': '다운로드',
@@ -2825,6 +3048,7 @@ export const dict: Record<I18nKey, string> = {
'memoryDebugPanel.title': '디버그 패널',
'memoryDebugPanel.tabs.memory': '메모리',
'memoryDebugPanel.tabs.streaming': '스트리밍',
'memoryDebugPanel.tabs.requests': '요청',
'memoryDebugPanel.section.sessionsInMemory': '메모리 내 세션',
'memoryDebugPanel.section.uiStreamingMetrics': 'UI 스트리밍 지표',
'memoryDebugPanel.section.vscodeBridgeMetrics': 'VS Code 브리지 지표',
@@ -2862,6 +3086,16 @@ export const dict: Record<I18nKey, string> = {
'memoryDebugPanel.streaming.copy.copied': '스트리밍 디버그 JSON 복사 완료',
'memoryDebugPanel.streaming.copy.failed': 'JSON 복사 실패',
'memoryDebugPanel.streaming.copy.hint': 'UI와 VS Code 스트리밍 메트릭을 JSON으로 복사합니다',
'memoryDebugPanel.requests.inFlight': '진행 중',
'memoryDebugPanel.requests.peak': '최대',
'memoryDebugPanel.requests.duration': '지속 시간',
'memoryDebugPanel.requests.totalRequests': '전체 요청',
'memoryDebugPanel.requests.tracking': '추적 중',
'memoryDebugPanel.requests.now': '현재',
'memoryDebugPanel.requests.noSamples': '아직 기록된 요청이 없습니다. fetch 활동을 기록하려면 이 패널을 열어 두세요.',
'memoryDebugPanel.requests.chartLabel': '시간에 따른 진행 중인 fetch 요청, 최대 {peak}',
'memoryDebugPanel.requests.windowHint': '최근 {seconds}초',
'memoryDebugPanel.requests.percentileChartLabel': '진행 중 요청 수명 백분위수(p50, p90, p99, max)의 시간별 변화',
'memoryDebugPanel.common.idle': '유휴',
'memoryDebugPanel.common.live': '실시간',
'memoryDebugPanel.common.notAvailable': 'n/a',
@@ -2899,18 +3133,23 @@ export const dict: Record<I18nKey, string> = {
'common.relative.daysAgoCompact': '{count}d ago',
'common.relative.weeksAgoCompact': '{count}w ago',
'common.relative.yearsAgoCompact': '{count}y ago',
'common.duration.secondsCompact': '{seconds}초',
'common.duration.minutesSecondsCompact': '{minutes}분 {seconds}초',
'common.duration.hoursMinutesCompact': '{hours}시간 {minutes}분',
'contextFileOpen.failure.tooLarge': 'File is too large to open (>{count} lines)',
'contextFileOpen.failure.missing': 'File not found',
'contextFileOpen.failure.unreadable': 'Failed to open file',
'quota.window.5h': '5-Hour',
'quota.window.7d': '7-Day Limit',
'quota.window.7dSonnet': '7-Day Sonnet Limit',
'quota.window.7dOpus': '7-Day Opus Limit',
'quota.window.weekly': 'Weekly Limit',
'quota.window.extraUsage': '추가 사용량',
'quota.window.weekly': '매주',
'quota.window.daily': 'Daily',
'quota.window.monthly': 'Monthly Limit',
'quota.window.monthly': '매월',
'quota.window.credits': 'Credits',
'quota.window.creditsBalance': 'Credits Balance',
'quota.window.monthlyCredits': '월간 크레딧',
'quota.window.purchasedCredits': '구매한 크레딧',
'quota.window.freeCredits': '무료 크레딧',
'quota.window.billingCycle': 'Billing Cycle',
'quota.window.auto': 'Auto',
'quota.window.api': 'API',
@@ -2920,5 +3159,104 @@ export const dict: Record<I18nKey, string> = {
'quota.window.premium': 'Premium Interactions',
'quota.window.chat': 'Chat Requests',
'quota.window.completions': 'Completions',
'quota.window.premiumInteractions': 'Premium interactions',
'quota.window.premiumInteractions': 'AI 크레딧',
'chat.workStatus.ariaLabel': '작업 상태',
'chat.workStatus.context.label': '컨텍스트',
'chat.workStatus.cost.breakdown': '세션 {session} · 서브 에이전트 {subagents}',
'chat.workStatus.git.changedFileSingle': '파일 {count}개 변경됨',
'chat.workStatus.git.changedFilePlural': '파일 {count}개 변경됨',
'chat.workStatus.pr.untitled': '제목 없는 풀 리퀘스트',
'chat.workStatus.pr.draft': '초안',
'chat.workStatus.pr.checks': '검사',
'chat.workStatus.pr.checksFailed': '{count}개 실패',
'chat.workStatus.pr.checksPending': '{count}개 실행 중',
'chat.workStatus.pr.checksPassed': '{count}개 통과',
'chat.workStatus.attention.merge': '병합 진행 중',
'chat.workStatus.attention.rebase': '리베이스 진행 중',
'chat.workStatus.attention.cherryPick': '체리픽 진행 중',
'chat.workStatus.attention.revert': '되돌리기 진행 중',
'chat.workStatus.attention.bisect': '이분 탐색 진행 중',
'chat.workStatus.subagent.done': '완료',
'chat.workStatus.subagent.untitled': '서브에이전트',
'chat.workStatus.mcp.toggle': '{name} 전환',
'chat.workStatus.mcp.needsAuth': '로그인',
'chat.workStatus.mcp.failed': '실패',
'chat.workStatus.pinned.unavailable': '고정된 메시지',
'chat.workStatus.section.session': '세션',
'chat.workStatus.section.project': '프로젝트',
'chat.workStatus.section.subagents': '서브에이전트',
'chat.workStatus.section.mcp': 'MCP',
'chat.workStatus.section.pinned': '고정된 메시지',
'chat.workStatus.section.tasks': '작업',
'chat.workStatus.subagent.working': '작업 중',
'chat.workStatus.subagent.needsPermission': '권한 필요',
'chat.workStatus.subagent.askedQuestion': '질문함',
'chat.workStatus.section.contextBreakdown': '컨텍스트 소스',
'chat.workStatus.breakdown.skills': '스킬',
'chat.workStatus.breakdown.pinnedNote': '노트',
'chat.workStatus.breakdown.unpin': '컨텍스트에서 고정 해제',
'chat.workStatus.breakdown.pinnedPlan': '계획',
'chat.workStatus.breakdown.memory': '에이전트 메모리',
'chat.workStatus.breakdown.pinnedKnowledgeSingle': '{count}개 고정',
'chat.workStatus.breakdown.pinnedKnowledgePlural': '{count}개 고정',
'chat.workStatus.breakdown.mcp': 'MCP 서버',
'chat.workStatus.action.openChanges': '변경 사항 열기',
'chat.workStatus.action.openGit': 'Git 패널 열기',
'chat.workStatus.action.openPr': '풀 리퀘스트 열기',
'chat.workStatus.action.openSubagent': '{name} 열기',
'chat.workStatus.section.usage': '사용량',
'chat.workStatus.goal.open': '목표 관리',
'chat.workStatus.goal.pause': '일시정지',
'chat.workStatus.goal.resume': '재개',
'chat.workStatus.goal.updateFailed': '목표를 업데이트하지 못했습니다',
'chat.workStatus.pinned.unpin': '고정 해제',
'chat.workStatus.pinned.reveal': '메시지로 이동',
'chat.workStatus.pinned.unpinFailed': '고정을 해제하지 못했습니다',
'chat.workStatus.action.openContext': '컨텍스트 패널 열기',
'chat.workStatus.section.linkedIssues': '연결됨',
'chat.workStatus.linkedIssues.open': 'GitHub에서 #{number} 열기',
'chat.workStatus.linkedIssues.unlink': '연결 해제',
'chat.workStatus.linkedIssues.unlinkFailed': '연결을 해제하지 못했습니다',
'chat.workStatus.linkedIssues.link': '세션에 연결',
'chat.workStatus.linkedIssues.linkFailed': '연결하지 못했습니다',
'chat.workStatus.breakdown.issueCountSingle': '이슈 {count}개',
'chat.workStatus.breakdown.issueCountPlural': '이슈 {count}개',
'chat.workStatus.breakdown.prCountSingle': 'PR {count}개',
'chat.workStatus.breakdown.prCountPlural': 'PR {count}개',
'chat.workStatus.breakdown.skillCountSingle': '스킬 {count}개',
'chat.workStatus.breakdown.skillCountPlural': '스킬 {count}개',
'chat.workStatus.breakdown.mcpCountSingle': 'MCP {count}개',
'chat.workStatus.breakdown.mcpCountPlural': 'MCP {count}개',
'chat.workStatus.sections.open': '섹션 선택',
'chat.workStatus.sections.dialogTitle': '패널 섹션',
'chat.workStatus.sections.dialogDescription': '작업 상태 패널에 표시할 항목을 선택하세요. 숨긴 섹션도 데이터는 유지되며 패널에만 나타나지 않습니다.',
'chat.workStatus.sections.allHidden': '선택된 섹션 없음',
'chat.workStatus.sections.showAll': '모두 표시',
'chat.workStatus.sections.noneWarning': '패널이 비어 보입니다.',
'header.workStatusPanel.toggleAria': '작업 상태 패널 전환',
'header.workStatusPanel.hide': '작업 상태 숨기기',
'header.workStatusPanel.show': '작업 상태 표시',
'chat.workStatus.mcp.authorizeOpenFailed': '인증 페이지를 열지 못했습니다',
'chat.workStatus.mcp.authorizeFailed': '인증에 실패했습니다',
'mcpDropdown.toast.authorizeOpenFailed': '인증 페이지를 열지 못했습니다',
'mcpDropdown.toast.authorizeFailed': '인증에 실패했습니다',
'header.services.tooltip.currentInstance': '현재 인스턴스: {current} ({toggle})',
'header.workStatusPanel.showOverlay': '채팅 위에 작업 상태 표시',
'settings.mcp.page.connection.title': '연결 방법',
'settings.mcp.page.connection.description': '실행 명령 또는 호스팅 서버 링크를 붙여넣으세요.',
'settings.mcp.page.registration.title': '이 서버는 전용 앱이 필요합니다',
'settings.mcp.page.registration.description': '자격 증명을 자동으로 발급하지 않습니다. 서비스 설정에서 앱을 만들고 정보를 여기에 붙여넣은 뒤 로그인하세요.',
'settings.mcp.page.registration.callbackLabel': '이 주소를 서비스에 등록하세요',
'settings.mcp.page.registration.clientId': '앱 ID',
'settings.mcp.page.registration.clientSecret': '앱 시크릿',
'settings.mcp.page.registration.afterSaving': '저장한 다음 인증을 누르세요.',
'settings.mcp.page.toast.copiedCallbackUrl': '주소를 복사했습니다',
'settings.mcp.page.toast.clipboardWriteFailed': '클립보드에 복사하지 못했습니다',
'settings.mcp.page.scope.everywhere': '모든 프로젝트에서 사용',
'settings.mcp.page.scope.thisProject': '이 프로젝트에서만',
'settings.mcp.page.env.description': 'API 키처럼 서버가 필요로 하는 값.',
'settings.mcp.page.connection.kindCommand': '명령',
'settings.mcp.page.connection.kindLink': '링크',
'settings.mcp.page.connection.hintCommand': '이 컴퓨터에서 실행됩니다. 명령 전체를 붙여넣으면 한 줄에 인수 하나씩 나뉩니다.',
'settings.mcp.page.connection.hintLink': '다른 곳에서 호스팅하는 서버에 연결합니다. https 주소를 붙여넣으세요.',
};
+167 -43
View File
@@ -1,8 +1,10 @@
import { thirdPartyIntegrationI18n } from './third-party-integrations.i18n';
export const settingsDict = {
'settings.providers.page.openCodeGo.title': 'Śledzenie użycia OpenCode Go',
'settings.providers.page.openCodeGo.description': 'Połącz panel OpenCode Go, aby wyświetlać limity kroczące, tygodniowe i miesięczne.',
'settings.providers.page.openCodeGo.workspaceId': 'ID przestrzeni roboczej',
'settings.providers.page.openCodeGo.authCookie': 'Plik cookie uwierzytelniania',
'settings.providers.page.openCodeGo.apiKey': 'Klucz API',
'settings.providers.page.openCodeGo.help': 'Skopiuj ID z adresu panelu i cookie auth z narzędzi deweloperskich przeglądarki. OpenChamber nigdy nie skanuje plików cookie przeglądarki.',
'settings.providers.page.openCodeGo.save': 'Zapisz i sprawdź',
'settings.providers.page.openCodeGo.replace': 'Zastąp',
@@ -214,6 +216,10 @@ export const settingsDict = {
'settings.common.actions.copyAll': 'Kopiuj wszystko',
'settings.common.actions.create': 'Utwórz',
'settings.common.actions.delete': 'Usuń',
'settings.openchamber.appLinks.title': 'Zaufane linki aplikacji',
'settings.openchamber.appLinks.info': 'Linki z tej listy otwierają się na tym urządzeniu bez ponownego pytania. Inne linki aplikacji zawsze wymagają potwierdzenia.',
'settings.openchamber.appLinks.empty': 'Brak zaufanych linków aplikacji na tym urządzeniu. Wybierz „Zaufaj i otwórz” podczas otwierania linku, aby dodać go tutaj.',
'settings.openchamber.appLinks.removeAria': 'Usuń zaufane linki {scheme}',
'settings.common.actions.duplicate': 'Duplikuj',
'settings.common.actions.import': 'Importuj',
'settings.common.actions.rename': 'Zmień nazwę',
@@ -503,6 +509,8 @@ export const settingsDict = {
'settings.mcp.page.status.label.failed': 'Błąd',
'settings.mcp.page.status.label.needsAuth': 'Wymaga autoryzacji',
'settings.mcp.page.status.label.needsRegistration': 'Wymaga rejestracji',
'settings.mcp.page.status.label.awaitingRestart': 'Oczekuje na restart',
'settings.mcp.page.status.description.awaitingRestart': 'Ten serwer został zapisany, ale nie został jeszcze zastosowany. Użyj Apply & Restart, aby OpenCode go wczytał — potem będą dostępne połączenie i autoryzacja.',
'settings.mcp.page.status.projectScopedTo': 'Ograniczony do projektu w {directory}',
'settings.mcp.page.status.runtimeStatus': 'Status uruchomieniowy',
'settings.mcp.page.status.userScoped': 'Konfiguracja użytkownika',
@@ -722,6 +730,9 @@ export const settingsDict = {
'settings.openchamber.about.actions.updateToVersion': 'Aktualizuj do wersji {version}',
'settings.openchamber.about.field.version': 'Wersja',
'settings.openchamber.about.field.openCodeVersion': 'Wersja OpenCode',
'settings.openchamber.about.field.instanceUrls': 'Adresy URL instancji',
'settings.openchamber.about.field.applicationUrl': 'Aplikacja',
'settings.openchamber.about.field.tunnelUrl': 'Tunel',
'settings.openchamber.about.state.checking': 'Sprawdzanie...',
'settings.openchamber.about.state.upToDate': 'Aktualna wersja',
'settings.openchamber.about.state.unknown': 'nieznane',
@@ -768,9 +779,9 @@ export const settingsDict = {
'settings.openchamber.desktopNetwork.field.macMenuBarAria': 'Pokazuj OpenChamber na pasku menu macOS',
'settings.openchamber.desktopNetwork.field.macMenuBar': 'Pokazuj OpenChamber na pasku menu',
'settings.openchamber.desktopNetwork.field.macMenuBarDescription': 'Wymaga ponownego uruchomienia aplikacji. Po wyłączeniu OpenChamber nie tworzy elementu paska menu ani nie uruchamia aktualizacji sesji, zatwierdzeń i użycia.',
'settings.openchamber.desktopNetwork.field.minimizeToTrayAria': 'Minimalizuj i zamykaj OpenChamber do zasobnika systemowego',
'settings.openchamber.desktopNetwork.field.minimizeToTray': 'Minimalizuj i zamykaj do zasobnika systemowego',
'settings.openchamber.desktopNetwork.field.minimizeToTrayDescription': 'Utrzymuje OpenChamber w zasobniku systemowym, gdy główne okno jest zminimalizowane lub zamknięte.',
'settings.openchamber.desktopNetwork.field.minimizeToTrayAria': 'Zamykaj OpenChamber do zasobnika systemowego',
'settings.openchamber.desktopNetwork.field.minimizeToTray': 'Zamykaj do zasobnika systemowego',
'settings.openchamber.desktopNetwork.field.minimizeToTrayDescription': 'Utrzymuje OpenChamber w zasobniku systemowym, gdy główne okno zostanie zamknięte. Minimalizacja pozostawia okno na pasku zadań.',
'settings.openchamber.desktopNetwork.field.keepAwakeAria': 'Utrzymuj komputer aktywny, gdy OpenChamber jest uruchomiony',
'settings.openchamber.desktopNetwork.field.keepAwake': 'Utrzymuj komputer aktywny, gdy OpenChamber jest uruchomiony',
'settings.openchamber.desktopNetwork.field.keepAwakeDescription': 'Aby telefony nadal mogły otwierać tę aplikację. Ekran nadal może się wyłączyć.',
@@ -807,23 +818,27 @@ export const settingsDict = {
'settings.openchamber.keyboardShortcuts.action.cycle_favorite_model_backward.label': 'Przełącz ulubiony model wstecz',
'settings.openchamber.keyboardShortcuts.action.open_model_selector.label': 'Otwórz wybór modelu',
'settings.openchamber.keyboardShortcuts.action.cycle_favorite_model_forward.label': 'Przełącz ulubiony model w przód',
'settings.openchamber.keyboardShortcuts.action.cycle_services_tab.label': 'Przełącz zakładkę usług',
'settings.openchamber.keyboardShortcuts.action.cycle_theme.label': 'Przełącz motyw',
'settings.openchamber.keyboardShortcuts.action.cycle_agent.label': 'Przełącz agenta',
'settings.openchamber.keyboardShortcuts.action.expand_input.label': 'Rozwiń pole wprowadzania',
'settings.openchamber.keyboardShortcuts.action.toggle_prompt_navigator.label': 'Przełącz nawigator promptów',
'settings.openchamber.keyboardShortcuts.action.focus_input.label': 'Skup pole wprowadzania',
'settings.openchamber.keyboardShortcuts.action.new_chat.label': 'Nowa sesja',
'settings.openchamber.keyboardShortcuts.action.switch_session_previous.label': 'Poprzednia sesja',
'settings.openchamber.keyboardShortcuts.action.switch_session_next.label': 'Następna sesja',
'settings.openchamber.keyboardShortcuts.action.rename_current_session.label': 'Zmień nazwę bieżącej sesji',
'settings.openchamber.keyboardShortcuts.action.toggle_permission_auto_accept.label': 'Przełącz automatyczne zatwierdzanie',
'settings.openchamber.keyboardShortcuts.action.close_session_tab.label': 'Zamknij kartę sesji',
'settings.openchamber.keyboardShortcuts.action.new_chat_worktree.label': 'Nowy szkic obszaru roboczego',
'settings.openchamber.keyboardShortcuts.action.new_mini_chat.label': 'Nowe okno Mini Chat',
'settings.openchamber.keyboardShortcuts.action.open_command_palette.label': 'Otwórz paletę poleceń',
'settings.openchamber.keyboardShortcuts.action.open_go_to_line.label': 'Przejdź do linii (edytor plików)',
'settings.openchamber.keyboardShortcuts.action.open_help.label': 'Otwórz skróty klawiszowe',
'settings.openchamber.keyboardShortcuts.action.open_right_sidebar_files.label': 'Otwórz powierzchnię plików',
'settings.openchamber.keyboardShortcuts.action.open_right_sidebar_git.label': 'Otwórz powierzchnię Git',
'settings.openchamber.keyboardShortcuts.action.switch_session_tab.label': 'Przełącz kartę sesji',
'settings.openchamber.keyboardShortcuts.action.switch_session_tab.suffix': ' + 1…9',
'settings.openchamber.keyboardShortcuts.action.switch_context_surface.label': 'Przełącz powierzchnię panelu kontekstu',
'settings.openchamber.keyboardShortcuts.action.switch_context_surface.suffix': ' + 1…0',
'settings.openchamber.keyboardShortcuts.action.open_settings.label': 'Otwórz ustawienia',
'settings.openchamber.keyboardShortcuts.action.toggle_context_plan.label': 'Przełącz panel kontekstu planu',
'settings.openchamber.keyboardShortcuts.action.toggle_right_sidebar.label': 'Przełącz panel kontekstu',
'settings.openchamber.keyboardShortcuts.action.toggle_services_menu.label': 'Przełącz menu usług',
'settings.openchamber.keyboardShortcuts.action.add_selection_to_chat.label': 'Dodaj zaznaczenie do czatu',
'settings.openchamber.keyboardShortcuts.action.toggle_sidebar.label': 'Przełącz pasek boczny',
@@ -836,7 +851,29 @@ export const settingsDict = {
'settings.openchamber.keyboardShortcuts.overwritePrompt': 'Ta kombinacja jest już używana przez inny skrót. Nadpisać i wyczyścić to inne przypisanie?',
'settings.openchamber.keyboardShortcuts.title': 'Skróty klawiszowe',
'settings.openchamber.keyboardShortcuts.tooltip': 'Przechwyć nową kombinację klawiszy, zapisz ją, a przypisania zostaną natychmiast zaktualizowane.',
'settings.openchamber.keyboardShortcuts.warning.riskyBrowserShortcut': 'Ten skrót może kolidować z domyślnymi skrótami przeglądarki. Został jednak zapisany.',
'settings.openchamber.keyboardShortcuts.warning.riskyBrowserShortcut': 'Ten skrót może kolidować z domyślnymi skrótami przeglądarki. Nadal możesz go zapisać.',
'settings.openchamber.keyboardShortcuts.warning.contextualPrefix': 'Ta sekwencja współdzieli prefiks kontekstowy z działaniem {action}. Gdy jego kontekst jest aktywny, to działanie ma pierwszeństwo.',
'settings.openchamber.keyboardShortcuts.category.session': 'Sterowanie sesją',
'settings.openchamber.keyboardShortcuts.category.models': 'Modele i agenci',
'settings.openchamber.keyboardShortcuts.category.panels': 'Panele i narzędzia',
'settings.openchamber.keyboardShortcuts.category.navigation': 'Nawigacja',
'settings.openchamber.keyboardShortcuts.category.application': 'Aplikacja',
'settings.openchamber.keyboardShortcuts.actions.edit': 'Edytuj',
'settings.openchamber.keyboardShortcuts.actions.confirm': 'Potwierdź',
'settings.openchamber.keyboardShortcuts.dialog.title': 'Edytuj: {action}',
'settings.openchamber.keyboardShortcuts.dialog.instructions': 'Naciśnij maksymalnie dwie kombinacje klawiszy, po najwyżej trzy klawisze każda. Po pierwszej odczekaj do 3 sekund na drugą kombinację. Wybierz Potwierdź, aby zastosować, lub Anuluj, aby odrzucić. Backspace usuwa ostatnią.',
'settings.openchamber.keyboardShortcuts.dialog.firstChord': 'Pierwsza kombinacja',
'settings.openchamber.keyboardShortcuts.dialog.secondChord': 'Druga kombinacja',
'settings.openchamber.keyboardShortcuts.dialog.recording': 'Naciśnij klawisze…',
'settings.openchamber.keyboardShortcuts.unassigned': 'Nieprzypisany',
'settings.openchamber.keyboardShortcuts.error.prefixConflict': 'To koliduje z sekwencją używaną przez {action}. Wybierz inną kombinację.',
'settings.openchamber.keyboardShortcuts.error.exactConflict': 'Ta kombinacja jest już używana przez {action}.',
'settings.openchamber.keyboardShortcuts.error.internalConflict': 'Ta kombinacja koliduje z wbudowanym skrótem, którego nie można zastąpić.',
'settings.openchamber.keyboardShortcuts.action.open_draft_project_picker.label': 'Otwórz wybór projektu szkicu',
'settings.openchamber.keyboardShortcuts.action.open_draft_worktree_picker.label': 'Otwórz wybór worktree szkicu',
'settings.openchamber.keyboardShortcuts.action.open_session_list.label': 'Otwórz ostatnie sesje',
'settings.openchamber.keyboardShortcuts.action.open_timeline_dialog.label': 'Otwórz oś czasu rozmowy',
'settings.openchamber.keyboardShortcuts.action.toggle_dictation.label': 'Wprowadzanie głosowe',
'settings.openchamber.opencodeCli.actions.browse': 'Przeglądaj',
'settings.openchamber.opencodeCli.actions.browseAria': 'Przeglądaj ścieżkę do pliku binarnego OpenCode',
'settings.openchamber.opencodeCli.actions.restartingOpenCode': 'Restartowanie OpenCode...',
@@ -846,12 +883,19 @@ export const settingsDict = {
'settings.openchamber.opencodeCli.field.binaryPathPlaceholder': '/Users/you/.bun/bin/opencode',
'settings.openchamber.opencodeCli.field.showUpdateNotifications': 'Pokazuj powiadomienia o aktualizacjach OpenCode',
'settings.openchamber.opencodeCli.field.showUpdateNotificationsAria': 'Pokazuj powiadomienia o aktualizacjach OpenCode',
'settings.openchamber.opencodeCli.field.agentControlTool': 'Narzędzie sterowania dla agentów',
'settings.openchamber.opencodeCli.field.agentControlToolAria': 'Włącz narzędzie sterowania dla agentów',
'settings.openchamber.opencodeCli.field.agentControlToolInfo': 'Pozwól agentom orkiestrować Twoją pracę z czatu: tworzyć sesje i worktree, delegować prompty innym agentom oraz zarządzać zaplanowanymi zadaniami. Dodaje krótki opis narzędzia do każdej sesji. Zastosowane po Save + Reload.',
'settings.openchamber.opencodeCli.tipMiddle': 'zmienna środowiskowa, ale to ustawienie jest zapisywane w',
'settings.openchamber.opencodeCli.tipPrefix': 'Wskazówka: możesz również użyć',
'settings.openchamber.opencodeCli.title': 'OpenCode CLI',
'settings.openchamber.tools.title': 'Narzędzia OpenChamber',
'settings.openchamber.tools.field.agentControlTool': 'Narzędzie sterowania dla agentów',
'settings.openchamber.tools.field.agentControlToolAria': 'Włącz narzędzie sterowania dla agentów',
'settings.openchamber.tools.field.agentControlToolInfo': 'Pozwól agentom orkiestrować Twoją pracę z czatu: tworzyć sesje i worktree, delegować prompty innym agentom oraz zarządzać zaplanowanymi zadaniami. Dodaje krótki opis narzędzia do każdej sesji. Zastosowane po ponownym uruchomieniu OpenCode.',
'settings.openchamber.tools.field.agentWebTool': 'Narzędzie OpenChamber Web',
'settings.openchamber.tools.field.agentWebToolAria': 'Włącz narzędzie OpenChamber Web',
'settings.openchamber.tools.field.agentWebToolInfo': 'Pozwól agentom oglądać stronę w panelu przeglądarki OpenChamber i wchodzić z nią w interakcję: otwierać adres URL, czytać treść, klikać, pisać, przewijać i przełączać między układem mobilnym a desktopowym. Dodaje krótki opis narzędzia do każdej sesji. Zastosowane po ponownym uruchomieniu OpenCode.',
'settings.openchamber.tools.field.agentMemoryTool': 'Narzędzie pamięci agenta',
'settings.openchamber.tools.field.agentMemoryToolAria': 'Narzędzie pamięci agenta',
'settings.openchamber.tools.field.agentMemoryToolInfo': 'Pozwala agentom zachowywać to, czego się nauczyły, pomiędzy sesjami, w dwóch magazynach: co jest prawdą o Tobie i co jest prawdą o danym projekcie. Sesje otrzymują zapisane tytuły, aby agent mógł odczytać wpis, gdy jest istotny. Wyłączenie usuwa narzędzie, kartę Pamięć i indeks sesji. Działa po ponownym uruchomieniu OpenCode.',
'settings.openchamber.opencodeCli.tooltipPrefix': 'Opcjonalna ścieżka absolutna do',
'settings.openchamber.opencodeCli.tooltipSuffix': 'pliku binarnego.',
'settings.openchamber.passkeys.actions.add': 'Dodaj klucz dostępu (passkey)',
@@ -999,8 +1043,6 @@ export const settingsDict = {
'settings.openchamber.tunnel.warning.quickModeReliability': 'Aby uzyskać bardziej niezawodny długotrwały dostęp, przełącz się na tryb Managed Remote lub Managed Local.',
'settings.openchamber.tunnel.warning.replacesActiveTunnel': 'Uruchomienie tego tunelu zastępuje aktywny tunel i unieważnia istniejące linki połączenia oraz zdalne sesje.',
'settings.openchamber.visual.actions.reloadThemes': 'Przeładuj motywy',
'settings.openchamber.visual.field.macVibrancy': 'Przezroczystość okna',
'settings.openchamber.visual.field.macVibrancyHint': 'Używaj natywnego rozmycia macOS (vibrancy) za panelem bocznym. Wyłącz, aby uzyskać w pełni nieprzezroczyste powierzchnie.',
'settings.openchamber.visual.field.dockBadge': 'Plakietka w Docku',
'settings.openchamber.visual.field.dockBadgeHint': 'Pokazuj na ikonie w Docku macOS liczbę czatów z nieprzeczytaną aktywnością.',
'settings.openchamber.visual.actions.saveAndRestart': 'Zapisz i uruchom ponownie',
@@ -1100,8 +1142,6 @@ export const settingsDict = {
'settings.openchamber.visual.field.stickyUserHeaderAria': 'Przyklejony nagłówek użytkownika',
'settings.openchamber.visual.field.promptNavigatorEnabledAria': 'Nawigator promptów',
'settings.openchamber.visual.field.promptNavigatorEnabled': 'Nawigator promptów',
'settings.openchamber.visual.field.expandedEditorToolbarAria': 'Always show editor toolbar',
'settings.openchamber.visual.field.expandedEditorToolbar': 'Always show editor toolbar (docked under the file tabs)',
'settings.openchamber.visual.field.autoSaveEnabledAria': 'Autozapis plików',
'settings.openchamber.visual.field.autoSaveEnabled': 'Autozapis plików',
'settings.openchamber.visual.field.autoSaveEnabledInfo': 'Automatycznie zapisuje edycje pliku po zatrzymaniu pisania. Wyłącz, aby wymagać ręcznego zapisu.',
@@ -1113,6 +1153,10 @@ export const settingsDict = {
'settings.openchamber.visual.option.terminalShell.auto': 'Automatycznie',
'settings.openchamber.visual.field.editorFontSize': 'Rozmiar czcionki edytora',
'settings.openchamber.visual.field.terminalQuickKeys': 'Szybkie klawisze terminala',
'settings.openchamber.visual.field.sessionTabsGroup': 'Karty sesji',
'settings.openchamber.visual.field.sessionTabs': 'Pokazuj sesje jako karty w nagłówku',
'settings.openchamber.visual.field.sessionTabsAria': 'Przełącz karty sesji w nagłówku',
'settings.openchamber.visual.field.sessionTabsInfo': 'Otwierane sesje układają się jako karty w nagłówku. Po wyłączeniu nagłówek pokazuje tylko tytuł sesji.',
'settings.openchamber.visual.field.terminalQuickKeysAria': 'Szybkie klawisze terminala',
'settings.openchamber.visual.field.terminalQuickKeysTooltip': 'Pokaż Esc, Ctrl i strzałki w widoku terminala',
'settings.openchamber.visual.field.fileEditorKeymap': 'Mapa klawiszy edytora plików',
@@ -1185,9 +1229,6 @@ export const settingsDict = {
'settings.openchamber.visual.section.chatFeatures': 'Funkcje',
'settings.openchamber.visual.section.colorMode': 'Tryb kolorów',
'settings.openchamber.visual.section.colorModeAndTheme': 'Tryb kolorów i motyw',
'settings.openchamber.visual.section.mobileLayout': 'Układ mobilny',
'settings.openchamber.visual.option.mobileLayout.default': 'Poprzedni',
'settings.openchamber.visual.option.mobileLayout.new': 'Nowy',
'settings.openchamber.visual.section.diffLayout': 'Układ diffa',
'settings.openchamber.visual.section.diffLayoutAria': 'Układ diffa',
'settings.openchamber.visual.section.localization': 'Lokalizacja',
@@ -1199,6 +1240,10 @@ export const settingsDict = {
'settings.openchamber.visual.section.showToolsOpenedByDefault': 'Pokaż narzędzia domyślnie otwarte',
'settings.openchamber.visual.section.sessionAssistance': 'Wsparcie sesji',
'settings.openchamber.visual.section.reasoning': 'Rozumowanie',
'settings.openchamber.visual.section.streaming': 'Streaming',
'settings.openchamber.visual.field.streamingAutoFollow': 'Podążaj za nową treścią podczas streamingu',
'settings.openchamber.visual.field.streamingAutoFollowAria': 'Automatycznie podążaj za nową treścią podczas streamowania odpowiedzi',
'settings.openchamber.visual.field.streamingAutoFollowInfo': 'Podczas napływania odpowiedzi widok płynnie podąża za najnowszą treścią. Wyłącz, aby widok pozostał nieruchomy i przewijać ręcznie; wysłanie wiadomości ze środka czatu również nie przesunie wtedy widoku.',
'settings.openchamber.visual.section.messageAppearance': 'Wygląd wiadomości',
'settings.openchamber.visual.section.toolsAndFiles': 'Narzędzia i pliki',
'settings.openchamber.visual.section.composer': 'Pole wiadomości',
@@ -1351,9 +1396,12 @@ export const settingsDict = {
'settings.projects.page.field.projectIcon': 'Ikona projektu',
'settings.projects.page.field.projectIconBackgroundAria': 'Kolor tła ikony projektu',
'settings.projects.page.field.projectName': 'Nazwa projektu',
'settings.projects.page.field.projectModel': 'Model projektu',
'settings.projects.page.field.projectThinking': 'Poziom myślenia projektu',
'settings.projects.page.section.chatDefaults': 'Domyślne ustawienia nowych czatów',
'settings.projects.page.section.chatDefaultsDescription': 'Używane przy starcie nowego czatu w tym projekcie. Bez ustawienia obowiązują wartości globalne. Poziom myślenia pojawia się tylko przy modelach, które mają poziomy.',
'settings.projects.page.field.projectNamePlaceholder': 'Nazwa projektu',
'settings.projects.page.field.defaultModel': 'Domyślny model dla nowych czatów',
'settings.projects.page.field.defaultModelDescription': 'Używany przy rozpoczynaniu nowego czatu w tym projekcie. Gdy nie ustawiono, stosowane są globalne domyślne wartości.',
'settings.projects.page.option.thinkingDefault': 'Ustawienie modelu',
'settings.projects.page.section.worktree': 'Worktree',
'settings.projects.page.title.default': 'Project Settings',
'settings.projects.page.toast.customIconAlreadySet': 'Dla tego projektu ustawiono już własną ikonę',
@@ -1367,6 +1415,9 @@ export const settingsDict = {
'settings.projects.sidebar.actions.addProject': 'Dodaj projekt',
'settings.projects.sidebar.total': 'Suma: {count}',
'settings.providers.page.actions.complete': 'Zakończ',
'settings.providers.page.actions.continue': 'Kontynuuj',
'settings.providers.page.actions.cancel': 'Anuluj',
'settings.providers.page.actions.tryAgain': 'Spróbuj ponownie',
'settings.providers.page.actions.connect': 'Połącz',
'settings.providers.page.actions.copy': 'Kopiuj',
'settings.providers.page.actions.copyCode': 'Kopiuj kod',
@@ -1392,19 +1443,35 @@ export const settingsDict = {
'settings.providers.page.auth.loadingMethods': 'Ładowanie metod uwierzytelniania...',
'settings.providers.page.auth.oauthMethodFallback': 'Metoda OAuth {index}',
'settings.providers.page.auth.pasteAuthorizationCodePlaceholder': 'Wklej kod autoryzacyjny',
'settings.providers.page.auth.oauth.starting': 'Rozpoczynanie autoryzacji…',
'settings.providers.page.auth.oauth.waiting': 'Oczekiwanie na autoryzację…',
'settings.providers.page.auth.oauth.waitingHint': 'Dokończ logowanie w przeglądarce. Zostaw tę stronę otwartą — połączenie zakończy się samo.',
'settings.providers.page.auth.oauth.codeHint': 'Skopiuj kod autoryzacji z przeglądarki i wklej go tutaj.',
'settings.providers.page.auth.oauth.deviceCodeLabel': 'Kod urządzenia',
'settings.providers.page.auth.oauth.linkLabel': 'Link autoryzacyjny',
'settings.providers.page.auth.oauth.promptRequired': 'Wypełnij pole „{field}”, aby kontynuować',
'settings.providers.page.auth.oauth.error.sessionExpired': 'Żądanie autoryzacji wygasło. Połącz ponownie, aby zacząć od nowa.',
'settings.providers.page.auth.oauth.error.codeRequired': 'Ten dostawca wymaga kodu autoryzacji z przeglądarki.',
'settings.providers.page.auth.oauth.error.declined': 'Autoryzacja została odrzucona lub nie została ukończona.',
'settings.providers.page.auth.oauth.error.invalidInput': 'Wprowadzone dane zostały odrzucone.',
'settings.providers.page.auth.title': 'Uwierzytelnianie',
'settings.providers.page.auth.useReconnectHint': '· Użyj Połącz ponownie, aby zaktualizować dane logowania',
'settings.providers.page.custom.optionLabel': 'Inny / Niestandardowy',
'settings.providers.page.custom.title': 'Niestandardowy dostawca',
'settings.providers.page.custom.editTitle': 'Edytuj niestandardowego dostawcę',
'settings.providers.page.custom.description': 'Dodaj dostawcę zgodnego z OpenAI, podając adres bazowy, poświadczenia i listę modeli. Zapisuje się w konfiguracji OpenCode i działa w czacie jak każdy inny dostawca.',
'settings.providers.page.custom.description': 'Dodaj dostawcę z adresem bazowym, poświadczeniami, listą modeli i obsługiwanym protokołem API. Zapisuje się w konfiguracji OpenCode do użycia w czacie.',
'settings.providers.page.custom.field.providerID.label': 'ID dostawcy',
'settings.providers.page.custom.field.providerID.placeholder': 'moj-dostawca',
'settings.providers.page.custom.field.providerID.info': 'Małe litery, cyfry, myślniki i podkreślenia. Używane jako ID dostawcy OpenCode.',
'settings.providers.page.custom.field.name.label': 'Nazwa wyświetlana',
'settings.providers.page.custom.field.name.placeholder': 'Mój dostawca',
'settings.providers.page.custom.field.name.info': 'Widoczna w selektorach dostawcy i modelu.',
'settings.providers.page.custom.field.protocol.label': 'Protokół API',
'settings.providers.page.custom.field.protocol.info': 'Wybierz format żądania obsługiwany przez to API.',
'settings.providers.page.custom.field.protocol.openaiChat': 'OpenAI Chat Completions',
'settings.providers.page.custom.field.protocol.openaiResponses': 'OpenAI Responses',
'settings.providers.page.custom.field.protocol.anthropicMessages': 'Anthropic Messages',
'settings.providers.page.custom.field.baseURL.label': 'Adres bazowy',
'settings.providers.page.custom.field.baseURL.placeholder': 'https://api.example.com/v1',
'settings.providers.page.custom.field.baseURL.info': 'Bazowy URL API zgodnego z OpenAI. Musi zaczynać się od http:// lub https://.',
@@ -1481,7 +1548,6 @@ export const settingsDict = {
'settings.providers.page.toast.apiKeySaveFailed': 'Nie udało się zapisać klucza API',
'settings.providers.page.toast.apiKeySaved': 'Klucz API został zapisany',
'settings.providers.page.toast.authMethodsLoadFailed': 'Nie udało się załadować metod uwierzytelniania dostawcy',
'settings.providers.page.toast.completeOAuthInBrowser': 'Dokończ proces OAuth w przeglądarce',
'settings.providers.page.toast.deviceCodeCopied': 'Kod urządzenia został skopiowany',
'settings.providers.page.toast.deviceCodeCopyFailed': 'Nie udało się skopiować kodu urządzenia',
'settings.providers.page.toast.oauthCompleteFailed': 'Nie udało się dokończyć procesu OAuth',
@@ -1523,17 +1589,15 @@ export const settingsDict = {
'settings.remoteInstances.page.empty.noExtraForwards': 'Nie skonfigurowano dodatkowych przekierowań portów.',
'settings.remoteInstances.page.empty.selectInstance': 'Wybierz instancję, aby wyświetlić i edytować jej ustawienia.',
'settings.remoteInstances.page.field.auto': 'Auto',
'settings.remoteInstances.page.field.bindHost': 'Host powiązania',
'settings.remoteInstances.page.field.bindHostHint': 'Miejsce nasłuchiwania lokalnego połączenia. Użyj 127.0.0.1 lub localhost, chyba że potrzebujesz dostępu z sieci lokalnej.',
'settings.remoteInstances.page.field.bindHost': 'Dostępne dla',
'settings.remoteInstances.page.field.bindHostHint': 'Kto może otworzyć przekierowany adres na tym komputerze. Sama zdalna maszyna i tak pozostaje dostępna tylko przez tunel SSH.',
'settings.remoteInstances.page.field.connectionTimeoutSeconds': 'Limit czasu połączenia (sekundy)',
'settings.remoteInstances.page.field.forwardType': 'Typ przekierowania',
'settings.remoteInstances.page.field.forwardTypeHint': 'Wybierz, jaki dostęp do portów ma zapewniać to połączenie SSH.',
'settings.remoteInstances.page.field.installMethod': 'Metoda instalacji',
'settings.remoteInstances.page.field.installMethodDownloadRelease': 'Pobierz wydanie',
'settings.remoteInstances.page.field.installMethodHint': 'Jak OpenChamber ma zostać umieszczony na zdalnej maszynie, gdy aplikacja uruchamia go za Ciebie.',
'settings.remoteInstances.page.field.installMethodUploadBundle': 'Prześlij paczkę',
'settings.remoteInstances.page.field.keepServerRunning': 'Pozostaw serwer uruchomiony',
'settings.remoteInstances.page.field.keepServerRunningHint': 'Pozostaw OpenChamber uruchomiony na zdalnej maszynie po rozłączeniu.',
'settings.remoteInstances.page.field.keepServerRunningHint': 'Pozostaw zdalny serwer uruchomiony po rozłączeniu. Wyłączone: zatrzymuje się przy rozłączeniu i startuje ponownie przy kolejnym połączeniu.',
'settings.remoteInstances.page.field.localHostPlaceholder': '127.0.0.1',
'settings.remoteInstances.page.field.mode': 'Tryb',
'settings.remoteInstances.page.field.modeExternal': 'Już działa',
@@ -1542,10 +1606,10 @@ export const settingsDict = {
'settings.remoteInstances.page.field.modePlaceholder': 'Wybierz tryb',
'settings.remoteInstances.page.field.nickname': 'Pseudonim',
'settings.remoteInstances.page.field.nicknamePlaceholder': 'Laptop służbowy',
'settings.remoteInstances.page.field.preferredLocalPort': 'Preferowany port lokalny',
'settings.remoteInstances.page.field.preferredLocalPortHint': 'Lokalny port dla tego połączenia. Zostaw puste, aby wybrać automatycznie.',
'settings.remoteInstances.page.field.preferredRemotePort': 'Preferowany port zdalny',
'settings.remoteInstances.page.field.preferredRemotePortHint': 'Port używany na zdalnej maszynie. Zostaw puste, aby wybrać automatycznie.',
'settings.remoteInstances.page.field.preferredLocalPort': 'Port na tym komputerze',
'settings.remoteInstances.page.field.preferredLocalPortHint': 'Port otwierany na tym komputerze dla tunelu. Zostaw puste, aby wybrać automatycznie.',
'settings.remoteInstances.page.field.preferredRemotePort': 'Port na zdalnej maszynie',
'settings.remoteInstances.page.field.preferredRemotePortHint': 'Port, którego OpenChamber używa na zdalnej maszynie. Zostaw puste, aby wybrać automatycznie.',
'settings.remoteInstances.page.field.remoteHostPlaceholder': '127.0.0.1',
'settings.remoteInstances.page.field.selectBindHostPlaceholder': 'Wybierz host powiązania',
'settings.remoteInstances.page.field.selectInstallMethodPlaceholder': 'Wybierz metodę instalacji',
@@ -1562,11 +1626,48 @@ export const settingsDict = {
'settings.remoteInstances.page.forwardTypeDescription.dynamic': 'Otwórz lokalny proxy SOCKS przez połączenie SSH.',
'settings.remoteInstances.page.forwardTypeDescription.local': 'Otwórz lokalny port łączący się z usługą na zdalnej maszynie.',
'settings.remoteInstances.page.forwardTypeDescription.remote': 'Otwórz port na zdalnej maszynie, który połączy się z powrotem z Twoim komputerem.',
'settings.remoteInstances.page.addDialog.description': 'Wybierz host z konfiguracji SSH albo wpisz połączenie samodzielnie.',
'settings.remoteInstances.page.addDialog.sourceLabel': 'Skąd pochodzi połączenie',
'settings.remoteInstances.page.addDialog.tab.saved': 'Z konfiguracji SSH',
'settings.remoteInstances.page.addDialog.tab.manual': 'Wpiszę sam',
'settings.remoteInstances.page.addDialog.searchPlaceholder': 'Szukaj hostów',
'settings.remoteInstances.page.addDialog.emptySaved': 'Nie znaleziono hostów w konfiguracji SSH. Wpisz połączenie samodzielnie.',
'settings.remoteInstances.page.addDialog.searchEmpty': 'Żaden host nie pasuje do tego wyszukiwania.',
'settings.remoteInstances.page.addDialog.use': 'Użyj',
'settings.remoteInstances.page.state.notConnected': 'Brak połączenia',
'settings.remoteInstances.page.state.connecting': 'Łączenie',
'settings.remoteInstances.page.state.ready': 'Połączono',
'settings.remoteInstances.page.state.problem': 'Wymaga uwagi',
'settings.remoteInstances.page.section.advanced': 'Ustawienia zaawansowane',
'settings.remoteInstances.page.section.advancedHint': 'Porty, metoda instalacji, hasła i dodatkowe przekierowania. Domyślne wartości wystarczą dla większości połączeń.',
'settings.remoteInstances.page.field.installMethodAuto': 'Automatycznie',
'settings.remoteInstances.page.error.hint.noRuntime': 'Na zdalnej maszynie nie ma ani bun, ani npm. Zainstaluj tam jedno z nich albo przełącz to połączenie na „Już uruchomiony”.',
'settings.remoteInstances.page.error.hint.noOpencode': 'Na zdalnej maszynie nie ma zainstalowanego opencode CLI. Zainstaluj je tam (zobacz opencode.ai) i połącz się ponownie.',
'settings.remoteInstances.page.error.action.setUiPassword': 'Ustaw hasło interfejsu',
'settings.remoteInstances.page.error.action.pickRandomPort': 'Użyj innego portu lokalnego',
'settings.remoteInstances.page.error.action.setRemotePort': 'Ustaw port zdalny',
'settings.remoteInstances.page.validation.externalPortRequired': 'Najpierw podaj port zdalny. W trybie „Już uruchomiony” OpenChamber musi wiedzieć, na którym porcie nasłuchuje serwer.',
'settings.remoteInstances.page.empty.noInstances': 'Brak połączeń SSH.',
'settings.remoteInstances.page.field.uiPasswordRequired': 'Hasło interfejsu (wymagane)',
'settings.remoteInstances.page.field.uiPasswordMissingForLan': 'Wymagane, dopóki zdalny serwer jest dostępny w swojej sieci.',
'settings.remoteInstances.page.field.remoteLanAccess': 'Dostępne w sieci zdalnej maszyny',
'settings.remoteInstances.page.field.remoteLanAccessHint': 'Pozwól innym urządzeniom w sieci zdalnej maszyny otwierać ten OpenChamber bezpośrednio, bez tunelu SSH. Wymagane jest hasło interfejsu.',
'settings.remoteInstances.page.field.remoteLanAccessWarning': 'Każdy w tej sieci dotrze do zdalnego OpenChamber. Chroni go tylko hasło interfejsu poniżej.',
'settings.remoteInstances.page.validation.remoteLanNeedsPassword': 'Najpierw ustaw hasło interfejsu. Bez niego zdalny OpenChamber byłby otwarty dla każdego urządzenia w tej sieci.',
'settings.remoteInstances.page.field.bindHostOption.loopback': 'Tylko ten komputer (127.0.0.1)',
'settings.remoteInstances.page.field.bindHostOption.localhost': 'Tylko ten komputer (localhost)',
'settings.remoteInstances.page.field.bindHostOption.lan': 'Dowolne urządzenie w mojej sieci (0.0.0.0)',
'settings.remoteInstances.page.field.sshPasswordHint': 'Potrzebne tylko wtedy, gdy host prosi o hasło zamiast przyjąć klucz SSH.',
'settings.remoteInstances.page.field.uiPasswordHintManaged': 'Hasło chroniące zdalny interfejs OpenChamber. OpenChamber ustawia je na serwerze, który uruchamia za Ciebie.',
'settings.remoteInstances.page.field.uiPasswordHintExternal': 'Hasło serwera OpenChamber już działającego na zdalnej maszynie, używane do zalogowania się.',
'settings.remoteInstances.page.tunnelPreview.caption': 'To połączenie przekierowuje:',
'settings.remoteInstances.page.empty.noInstancesWithOneImport': 'Brak połączeń SSH. Z konfiguracji SSH można zaimportować 1 host.',
'settings.remoteInstances.page.empty.noInstancesWithImports': 'Brak połączeń SSH. Z konfiguracji SSH można zaimportować {count} hostów.',
'settings.remoteInstances.page.state.loadingInstances': 'Wczytywanie połączeń...',
'settings.remoteInstances.page.import.loading': 'Ładowanie hostów SSH...',
'settings.remoteInstances.page.import.noneAvailable': 'Brak hostów SSH dostępnych do importu.',
'settings.remoteInstances.page.import.noneFound': 'Nie znaleziono hostów SSH.',
'settings.remoteInstances.page.import.patternSuffix': '(wzorzec)',
'settings.remoteInstances.page.import.sectionTitle': 'Zapisane hosty SSH',
'settings.remoteInstances.page.logsDialog.empty': 'Brak logów SSH.',
'settings.remoteInstances.page.logsDialog.loading': 'Ładowanie logów...',
'settings.remoteInstances.page.logsDialog.selectedInstanceFallback': 'Wybrana instancja',
@@ -1594,8 +1695,8 @@ export const settingsDict = {
'settings.remoteInstances.page.section.authenticationDescription': 'Opcjonalne dane logowania dla SSH i zdalnego interfejsu OpenChamber.',
'settings.remoteInstances.page.section.instance': 'Instancja',
'settings.remoteInstances.page.section.instanceDescription': 'Wybierz polecenie SSH i nazwę wyświetlaną dla tego połączenia.',
'settings.remoteInstances.page.section.mainTunnel': 'Dostęp lokalny',
'settings.remoteInstances.page.section.mainTunnelDescription': 'Wybierz lokalny adres używany do otwierania tego zdalnego serwera OpenChamber.',
'settings.remoteInstances.page.section.mainTunnel': 'Dostęp z tego komputera',
'settings.remoteInstances.page.section.mainTunnelDescription': 'OpenChamber działa na zdalnej maszynie. Te ustawienia dotyczą wyłącznie adresu na tym komputerze, który prowadzi do niej przez tunel SSH.',
'settings.remoteInstances.page.section.portForwards': 'Przekierowania portów',
'settings.remoteInstances.page.section.portForwardsDescription': 'Opcjonalne dodatkowe porty udostępniane przez to połączenie SSH.',
'settings.remoteInstances.page.section.remoteServer': 'OpenChamber na zdalnej maszynie',
@@ -1805,21 +1906,18 @@ export const settingsDict = {
'settings.skills.catalog.installSkill.toast.installFailed': 'Nie udało się zainstalować umiejętności',
'settings.skills.catalog.installSkill.toast.installed': 'Umiejętność została zainstalowana',
'settings.skills.catalog.page.actions.addCatalog': 'Dodaj katalog',
'settings.skills.catalog.page.actions.loadMoreSkills': 'Załaduj więcej umiejętności',
'settings.skills.catalog.page.actions.refreshTitle': 'Odśwież',
'settings.skills.catalog.page.actions.removeCatalog': 'Usuń katalog',
'settings.skills.catalog.page.actions.removeCatalogTitle': 'Usuń katalog',
'settings.skills.catalog.page.badge.installed': 'zainstalowano ({scope})',
'settings.skills.catalog.page.badge.notInstallable': 'nie można zainstalować',
'settings.skills.catalog.page.badge.unknown': 'nieznane',
'settings.skills.catalog.page.byOwnerPrefix': 'autor:',
'settings.skills.catalog.page.empty.noSkillsDescription': 'Spróbuj innego wyszukiwania lub odśwież katalog',
'settings.skills.catalog.page.empty.noSkillsTitle': 'Nie znaleziono umiejętności',
'settings.skills.catalog.page.error.catalogTitle': 'Błąd katalogu',
'settings.skills.catalog.page.field.selectSourcePlaceholder': 'Wybierz źródło',
'settings.skills.catalog.page.foundCount': 'Znaleziono {count} umiejętności',
'settings.skills.catalog.page.loading.catalog': 'Ładowanie...',
'settings.skills.catalog.page.loading.more': 'Ładowanie...',
'settings.skills.catalog.page.loading.skills': 'Ładowanie umiejętności...',
'settings.skills.catalog.page.mode.external': 'Zewnętrzny',
'settings.skills.catalog.page.mode.manual': 'Ręczny',
@@ -1827,6 +1925,18 @@ export const settingsDict = {
'settings.skills.catalog.page.removeDialog.title': 'Usuń katalog',
'settings.skills.catalog.page.section.sourceRepository': 'Repozytorium źródłowe',
'settings.skills.catalog.page.title': 'Katalog umiejętności',
'settings.skills.catalog.page.subtitle': 'Instaluj gotowe umiejętności z kuratorowanych repozytoriów lub dodaj własne źródło.',
'settings.skills.catalog.page.section.sources': 'Źródła',
'settings.skills.catalog.page.searchAllPlaceholder': 'Szukaj umiejętności we wszystkich źródłach…',
'settings.skills.catalog.page.search.clear': 'Wyczyść wyszukiwanie',
'settings.skills.catalog.page.source.skillsCount': 'Umiejętności: {count}',
'settings.skills.catalog.page.source.stars': 'Gwiazdki: {count}',
'settings.skills.catalog.page.source.updated': 'Zaktualizowano {time}',
'settings.skills.catalog.page.source.addOwnTitle': 'Dodaj własne źródło',
'settings.skills.catalog.page.source.addOwnDescription': 'Dowolne repozytorium Git z umiejętnościami',
'settings.skills.catalog.page.source.viewRepo': 'Otwórz repozytorium na GitHubie',
'settings.skills.catalog.page.skill.viewOnGithub': 'Zobacz umiejętność na GitHubie',
'settings.skills.catalog.page.list.searchTitle': 'Wyniki wyszukiwania',
'settings.skills.catalog.shared.actions.install': 'Zainstaluj',
'settings.skills.catalog.shared.actions.installing': 'Instalowanie...',
'settings.skills.catalog.shared.actions.scan': 'Skanuj',
@@ -1946,11 +2056,12 @@ export const settingsDict = {
'settings.usage.pace.waitSeparator': ' · Czekaj ',
'settings.usage.page.empty.selectProvider': 'Wybierz dostawcę, aby wyświetlić szczegóły użycia.',
'settings.usage.page.header.lastUpdated': 'Ostatnio aktualizowano: {time}',
'settings.usage.page.header.lastUpdatedWithPlan': 'Plan: {plan} · Ostatnia aktualizacja: {time}',
'settings.usage.page.header.providerUsage': 'Użycie {provider}',
'settings.usage.page.header.refreshing': 'Odświeżanie użycia...',
'settings.usage.page.options.showInHeader': 'Pokaż w menu nagłówka',
'settings.usage.page.options.showInHeaderAria': 'Pokaż w menu nagłówka',
'settings.usage.page.options.showInHeaderTooltip': 'Jeśli jest włączone, ten dostawca',
'settings.usage.page.options.showInWorkStatus': 'Pokaż w panelu statusu pracy',
'settings.usage.page.options.showInWorkStatusAria': 'Pokaż w panelu statusu pracy',
'settings.usage.page.options.showInWorkStatusTooltip': 'Po włączeniu użycie tego dostawcy będzie widoczne w panelu statusu pracy.',
'settings.usage.page.section.modelQuotas': 'Limity modeli',
'settings.usage.page.section.otherModels': 'Inne modele',
'settings.usage.page.state.noData': 'Brak dostępnych danych o użyciu.',
@@ -1965,7 +2076,6 @@ export const settingsDict = {
'settings.usage.sidebar.field.display': 'Wyświetlanie',
'settings.usage.sidebar.field.displayModePlaceholder': 'Tryb wyświetlania',
'settings.usage.sidebar.field.displayModeRemaining': 'Pozostała kwota',
'settings.usage.sidebar.field.showPredictions': 'Pokaż prognozy',
'settings.usage.sidebar.field.displayModeUsage': 'Użycie',
'settings.usage.sidebar.field.intervalPlaceholder': 'Interwał',
'settings.usage.sidebar.status.notSet': 'Nie ustawiono',
@@ -1979,7 +2089,20 @@ export const settingsDict = {
'settings.view.actions.openSectionList': 'Otwórz listę sekcji',
'settings.view.actions.reloadOpenCode': 'Przeładuj OpenCode',
'settings.view.actions.reloadOpenCodeTooltip': 'Uruchom ponownie OpenCode i przeładuj jego konfigurację.',
'settings.view.actions.resizeNavigation': 'Zmień rozmiar nawigacji',
'settings.view.actions.applyAndRestartOpenCode': 'Zastosuj i uruchom ponownie',
'settings.view.actions.applyAndRestartOpenCodeTooltipSingle': 'Zastosuj 1 oczekującą zmianę konfiguracji i uruchom ponownie OpenCode.',
'settings.view.actions.applyAndRestartOpenCodeTooltipPlural': 'Zastosuj {count} oczekujących zmian konfiguracji i uruchom ponownie OpenCode.',
'settings.view.pendingRestart.applying': 'Ponowne uruchamianie…',
'settings.view.pendingRestart.applied': 'OpenCode został uruchomiony ponownie z oczekującymi zmianami konfiguracji.',
'settings.view.pendingRestart.applyFailed': 'Nie udało się zastosować zmian konfiguracji.',
'settings.view.pendingRestart.manualRestartRequired': 'Zapisano na dysku. Uruchom ponownie podłączony serwer OpenCode, aby zastosować zmiany.',
'settings.view.pendingRestart.saved': 'Zapisano. Uruchom ponownie OpenCode, aby zastosować.',
'settings.view.pendingRestart.confirm.title': 'Zastosować i uruchomić ponownie?',
'settings.view.pendingRestart.confirm.description': 'Ponowne uruchomienie OpenCode zatrzyma wszystkie aktywne czaty. Zapisane zmiany konfiguracji zaczną obowiązywać po restarcie.',
'settings.view.pendingRestart.confirm.dontShowAgain': 'Nie pokazuj ponownie',
'settings.view.pendingRestart.confirm.cancel': 'Anuluj', 'settings.view.actions.resizeNavigation': 'Zmień rozmiar nawigacji',
'settings.view.search.placeholder': 'Szukaj ustawień',
'settings.view.search.aria': 'Szukaj ustawień',
'settings.view.search.clear': 'Wyczyść wyszukiwanie ustawień',
@@ -2097,4 +2220,5 @@ export const settingsDict = {
'settings.openchamber.visual.field.followUpBehaviorDescription': 'Choose what happens when you press Enter on a follow-up message while the agent is still responding.',
'settings.openchamber.visual.option.followUpBehavior.steer.label': 'Steer',
'settings.openchamber.visual.option.followUpBehavior.queue.label': 'Queue',
...thirdPartyIntegrationI18n.pl,
};
+377 -39
View File
@@ -6,6 +6,19 @@ export const dict: Record<I18nKey, string> = {
'terminalView.actions.attachSelection': 'Dołącz zaznaczone dane wyjściowe',
'terminalView.actions.restart': 'Uruchom terminal ponownie',
'chat.message.terminalContext': '{terminal}, wiersze {start}-{end}',
'chat.message.context.codeComment': 'Komentarz do {file}, wiersze {start}-{end}',
'chat.message.context.codeCommentLine': 'Komentarz do {file}, wiersz {line}',
'chat.message.context.chatQuote': 'Cytat z wcześniejszej wiadomości',
'chat.message.context.fileQuote': 'Zaznaczenie z {file}',
'chat.chatInput.chatQuoteContext': 'Cytaty z czatu',
'chat.chatInput.chatQuoteContextRemove': 'Usuń cytaty z czatu',
'chat.chatInput.contextPreview.selectedLabel': 'Zaznaczony tekst',
'chat.chatInput.contextPreview.commentLabel': 'Komentarz użytkownika',
'chat.chatInput.contextPreview.edit': 'Edytuj komentarz',
'chat.chatInput.contextPreview.remove': 'Usuń',
'chat.message.context.browserAnnotation': 'Adnotacja przeglądarki ({page})',
'chat.message.context.prComment': 'Komentarz PR GitHub ({label})',
'chat.message.context.prCheck': 'Nieudane sprawdzenie PR GitHub ({label})',
'chat.chatInput.terminalContext': '{terminal}, wiersze {start}-{end}',
'chat.chatInput.terminalContextRemove': 'Usuń kontekst terminala',
'chat.chatInput.prCommentContext': 'Komentarze PR',
@@ -26,6 +39,7 @@ export const dict: Record<I18nKey, string> = {
'common.language.korean': 'Koreański',
'common.language.polish': 'Polski',
'common.language.japanese': 'Japoński',
'common.language.turkish': 'Turecki',
'common.revealPath.finder': 'Pokaż w Finderze',
'common.revealPath.fileExplorer': 'Otwórz w Eksploratorze plików',
'common.revealPath.fileManager': 'Otwórz w Menedżerze plików',
@@ -90,6 +104,11 @@ export const dict: Record<I18nKey, string> = {
'mobile.instances.status.connectedDirect': 'Połączono · Sieć lokalna',
'mobile.instances.status.connectedRelay': 'Połączono · Prywatny relay',
'mobile.instances.saveEdit': 'Zapisz zmiany',
'mobile.connectionDebug.title': 'Dziennik połączenia',
'mobile.connectionDebug.copy': 'Kopiuj',
'mobile.connectionDebug.copied': 'Skopiowano',
'mobile.connectionDebug.close': 'Zamknij',
'mobile.connectionDebug.empty': 'Brak zdarzeń połączenia.',
'mobile.nav.changes': 'Zmiany',
'mobile.nav.settings': 'Ustawienia',
'mobile.surface.closeAria': 'Zamknij',
@@ -113,6 +132,7 @@ export const dict: Record<I18nKey, string> = {
'mobile.sessions.section.worktrees': 'Worktrees',
'mobile.sessions.section.otherProjects': 'Zmień projekt',
'mobile.sessions.section.projects': 'Projekty',
'mobile.sessions.section.chats': 'Czaty',
'mobile.sessions.empty.noProjectsTitle': 'Brak projektów',
'mobile.sessions.empty.noProjectsDescription': 'Dodaj projekt, aby zacząć rozmawiać ze swoim kodem.',
'mobile.sessions.empty.noSessionsTitle': 'Brak sesji',
@@ -244,9 +264,16 @@ export const dict: Record<I18nKey, string> = {
'sessions.sidebar.empty.noMatches.title': 'Brak pasujących sesji',
'sessions.sidebar.empty.noMatches.description': 'Spróbuj innego tytułu, gałęzi, folderu lub ścieżki.',
'sessions.sidebar.activity.recentTitle': 'ostatnie',
'sessions.sidebar.activity.chatsTitle': 'czaty',
'sessions.sidebar.activity.chatsEmpty': 'Nie ma jeszcze czatów.',
'chat.chatInput.chooseProject': 'Wybierz projekt',
'sessions.archivePage.allDirectories': 'Wszystkie katalogi',
'sessions.sidebar.header.displayMode.stickyHeaders': 'Przyklejone nagłówki projektów',
'sessions.sidebar.header.grouping.label': 'Grupowanie sesji',
'sessions.sidebar.header.projectDisplay.label': 'Wyświetlanie projektów',
'sessions.sidebar.header.projectDisplay.all': 'Wszystkie projekty',
'sessions.sidebar.header.projectDisplay.single': 'Jeden projekt',
'sessions.sidebar.project.selectAria': 'Wybierz projekt, obecnie {project}',
'sessions.sidebar.header.grouping.byWorktree': 'Według worktree',
'sessions.sidebar.header.grouping.flat': 'Płaska lista',
'sessions.sidebar.project.actions.manageWorktrees': 'Zarządzaj worktree',
@@ -268,6 +295,10 @@ export const dict: Record<I18nKey, string> = {
'sessions.archivePage.deleteSessionAria': 'Usuń {title}',
'sessions.archivePage.restoreSessionAria': 'Przywróć {title}',
'sessions.switcher.openAria': 'Otwórz przełącznik sesji',
'header.sessionTabs.stripAria': 'Otwarte sesje',
'header.sessionTabs.tabMenuAria': 'Akcje karty sesji',
'header.sessionTabs.closeTab': 'Zamknij kartę',
'header.sessionTabs.closeOtherTabs': 'Zamknij pozostałe karty',
'sessions.switcher.empty': 'Brak ostatnich sesji',
'sessions.switcher.draftTitle': 'Nowa sesja',
'sessions.sidebar.updateCheck.errorTitle': 'Nie udało się sprawdzić aktualizacji',
@@ -301,11 +332,33 @@ export const dict: Record<I18nKey, string> = {
'sessions.sidebar.session.menu.unshare': 'Cofnij udostępnienie',
'sessions.sidebar.session.menu.exportMarkdown': 'Eksportuj Markdown',
'sessions.sidebar.session.menu.moveToWorktree': 'Przenieś do nowego worktree',
'sessions.sidebar.session.menu.moveToWorktreeTargets': 'Przenieś do worktree',
'sessions.sidebar.session.menu.newWorktree': 'Nowy worktree...',
'sessions.sidebar.session.moveToWorktree.success': 'Sesja została przeniesiona do nowego worktree',
'sessions.sidebar.session.moveToWorktree.failed': 'Nie udało się przenieść sesji do nowego worktree',
'sessions.sidebar.session.moveToWorktree.tooltip': 'Tworzy nowy worktree z bieżącej gałęzi, przenosi niezacommitowane zmiany oraz tę sesję i jej podsesje.',
'sessions.sidebar.session.moveToWorktree.main': 'Główny worktree',
'sessions.sidebar.session.moveToWorktree.refreshing': 'Odświeżanie worktree...',
'sessions.sidebar.session.moveToWorktree.loadFailed': 'Nie udało się wczytać worktree',
'sessions.sidebar.session.moveToWorktree.current': 'Bieżący worktree',
'sessions.sidebar.session.moveToWorktree.existingSuccess': 'Sesję przeniesiono do worktree',
'sessions.sidebar.session.moveToWorktree.existingFailed': 'Nie udało się przenieść sesji do worktree',
'sessions.sidebar.session.moveToWorktree.tooltipTargets': 'Pokazuje istniejące worktree i opcję utworzenia nowego dla tej sesji.',
'sessions.sidebar.session.moveToWorktree.tooltip': 'Tworzy nowy worktree z bieżącej gałęzi i przenosi tam tę sesję wraz z podsesjami. Jeśli w źródle są niezacommitowane zmiany, decydujesz, czy je przenieść.',
'sessions.sidebar.session.moveToWorktree.tooltipBusy': 'Dostępne, gdy sesja jest bezczynna. Zatrzymaj bieżącą aktywność lub poczekaj na jej zakończenie.',
'sessions.sidebar.session.moveToWorktree.tooltipMoving': 'Ta sesja jest już przenoszona do nowego worktree.',
'sessions.sidebar.session.moveToWorktree.confirm.title': 'Źródło ma niezacommitowane zmiany',
'sessions.sidebar.session.moveToWorktree.confirm.changedFiles': 'Zmienione pliki w tym worktree: {count}.',
'sessions.sidebar.session.moveToWorktree.confirm.ownership': 'OpenCode śledzi te zmiany według katalogu, a nie sesji.',
'sessions.sidebar.session.moveToWorktree.confirm.sessionOnlyHelp': 'Przenosi tę sesję i jej podsesje, pozostawiając każdy plik źródłowy bez zmian.',
'sessions.sidebar.session.moveToWorktree.confirm.allChangesHelp': 'Przenosi zmiany w katalogu sesji. Pliki niezacommitowane i nieśledzone opuszczają źródło po sukcesie.',
'sessions.sidebar.session.moveToWorktree.confirm.stagedWarning': 'Zmiany w indeksie pozostają w źródle i są kopiowane do miejsca docelowego.',
'sessions.sidebar.session.moveToWorktree.confirm.baseWarning': 'Przeniesienie może się nie udać, gdy cel używa innej bazy Git.',
'sessions.sidebar.session.moveToWorktree.confirm.sessionOnly': 'Przenieś tylko sesję',
'sessions.sidebar.session.moveToWorktree.confirm.allChanges': 'Przenieś wszystkie zmiany ze źródła',
'sessions.sidebar.session.moveToWorktree.confirm.cancel': 'Anuluj',
'sessions.sidebar.session.moveToWorktree.sourceVerificationFailed': 'Nie udało się zweryfikować zmian w źródle. Żaden worktree ani sesja nie został zmieniony.',
'sessions.sidebar.session.moveToWorktree.applyChangesFailed': 'Cel nie mógł przyjąć zmian ze źródła. Sesja i zmiany w źródle nie zostały przeniesione. Spróbuj ponownie i wybierz Przenieś tylko sesję.',
'sessions.sidebar.session.moveToWorktree.changesMayBeInDestination': 'Połączenie zostało zerwane, zanim cel potwierdził przeniesienie. Sesja mogła nie zostać przeniesiona, a niezatwierdzone zmiany mogą już być w docelowym worktree. Sprawdź go przed ponowną próbą.',
'sessions.sidebar.session.menu.runFusion': 'Uruchom fusion',
'sessions.sidebar.session.menu.openInSidePanel': 'Otwórz w panelu bocznym',
'sessions.sidebar.session.actions.openInEditor': 'Otwórz w edytorze',
@@ -359,8 +412,10 @@ export const dict: Record<I18nKey, string> = {
'sessions.scheduledTasks.dialog.toast.deleted': 'Zaplanowane zadanie usunięte',
'sessions.scheduledTasks.dialog.toast.deleteFailed': 'Nie udało się usunąć zadania',
'sessions.scheduledTasks.dialog.toast.started': 'Zadanie uruchomione',
'sessions.scheduledTasks.dialog.toast.startedPersistWarning': 'Zadanie zostało uruchomione, ale nie udało się zapisać jego stanu. Może nadal być pokazywane jako uruchomione do następnego udanego uruchomienia.',
'sessions.scheduledTasks.dialog.toast.runFailed': 'Nie udało się uruchomić zadania',
'sessions.scheduledTasks.dialog.confirm.deleteTask': 'Usunąć zaplanowane zadanie "{taskName}"?',
'sessions.scheduledTasks.dialog.confirm.deleteLoopFile': 'Usunąć zadanie pętli „{taskName}” i jego plik Markdown?',
'sessions.scheduledTasks.dialog.schedule.daily': 'Codziennie {time}',
'sessions.scheduledTasks.dialog.schedule.dailyWithTimezone': 'Codziennie {time} ({timezone})',
'sessions.scheduledTasks.dialog.schedule.weekly': 'Co tydzień {days} {time}',
@@ -396,6 +451,9 @@ export const dict: Record<I18nKey, string> = {
'sessions.scheduledTasks.dialog.taskToggle.pauseAria': 'Wstrzymaj {taskName}',
'sessions.scheduledTasks.dialog.taskToggle.enabled': 'Włączone',
'sessions.scheduledTasks.dialog.taskToggle.paused': 'Wstrzymane',
'sessions.scheduledTasks.dialog.loopFile.note': 'Zarządzane przez plik pętli {file}',
'sessions.scheduledTasks.dialog.loopFile.toggleDisabled': 'Włączenie jest kontrolowane przez plik pętli; ustaw enabled w frontmatterze Markdown',
'sessions.scheduledTasks.dialog.loopFile.actionsDisabled': 'Zadania pętli są konfigurowane w pliku Markdown .agents/loops',
'sessions.scheduledTasks.editor.title.edit': 'Edytuj zaplanowane zadanie',
'sessions.scheduledTasks.editor.title.new': 'Nowe zaplanowane zadanie',
'sessions.scheduledTasks.editor.description': 'Skonfiguruj zadanie po stronie serwera, które tworzy nową sesję i wysyła prompt.',
@@ -488,7 +546,7 @@ export const dict: Record<I18nKey, string> = {
'multirun.launcher.attachments.attach': 'Dołącz',
'multirun.launcher.attachments.tooltip': 'Te same pliki wysłane do wszystkich uruchomień',
'multirun.launcher.models.label': 'Modele',
'multirun.launcher.models.info': 'Wybierz od 2 do {max} modeli. Ten sam model może być dodany wielokrotnie.',
'multirun.launcher.models.info': 'Wybierz 2 lub więcej modeli. Ten sam model może być dodany wielokrotnie.',
'multirun.launcher.toast.fileTooLarge': 'Plik "{fileName}" jest zbyt duży (max 10MB)',
'multirun.launcher.toast.attachFailed': 'Nie udało się dołączyć "{fileName}"',
'multirun.launcher.toast.attachedSingle': 'Dołączono {count} plik',
@@ -531,6 +589,10 @@ export const dict: Record<I18nKey, string> = {
'sessions.sidebar.session.status.pinned': 'Przypięta sesja',
'sessions.sidebar.session.status.movingToWorktree': 'Przenoszenie sesji do nowego worktree',
'sessions.sidebar.session.status.permissionRequired': 'Wymagane uprawnienie',
'sessions.sidebar.session.status.questionPendingSingle': '1 oczekujące pytanie',
'sessions.sidebar.session.status.questionPendingMany': 'Liczba oczekujących pytań: {count}',
'sessions.sidebar.session.status.activeFor': 'Aktywna od {duration}',
'sessions.sidebar.session.status.lastTurnDuration': 'Ostatnia tura trwała {duration}',
'sessions.sidebar.session.subsessions.collapse': 'Zwiń pod-sesje',
'sessions.sidebar.session.subsessions.expand': 'Rozwiń pod-sesje',
'sessions.sidebar.dialogs.deleteSession.title': 'Usunąć sesję?',
@@ -738,7 +800,6 @@ export const dict: Record<I18nKey, string> = {
'chat.statusRow.tasksTitle': 'Zadania',
'chat.statusRow.modelStatus': '{model} · {status}',
'chat.statusRow.summary.activeLeft': '{active} aktywne · {left} pozostało',
'chat.statusRow.aborted': 'Przerwane',
'chat.revertIndicator.redo': 'Ponów',
'chat.revertIndicator.redoAria': 'Ponów — przywróć cofnięte wiadomości',
'chat.revertPopover.title': 'Cofnięte',
@@ -752,6 +813,9 @@ export const dict: Record<I18nKey, string> = {
'chat.revert.toast.undo': 'Cofnięte do {preview}',
'chat.revert.toast.redo': 'Ponowione',
'chat.revert.toast.restored': 'Przywrócono wszystkie wiadomości',
'chat.toast.opencodeRestartInterrupted.title': 'Czat został przerwany',
'chat.toast.opencodeRestartInterrupted.description': 'OpenCode uruchomił się ponownie podczas generowania odpowiedzi. Wyślij wiadomość, aby kontynuować.',
'chat.toast.opencodeRestartInterrupted.openSession': 'Otwórz sesję',
'chat.errorBoundary.title': 'Błąd Czatu',
'chat.errorBoundary.description': 'Interfejs czatu napotkał błąd. Może to być spowodowane tymczasowym problemem sieciowym lub uszkodzonymi danymi wiadomości.',
'chat.errorBoundary.sessionLabel': 'Sesja',
@@ -777,6 +841,7 @@ export const dict: Record<I18nKey, string> = {
'chat.commandAutocomplete.command.catchUpDescription': 'Przywróć kontekst: nad czym pracowałeś i od czego kontynuować.',
'chat.commandAutocomplete.command.debugDescription': 'Prowadzone badanie pierwotnej przyczyny błędu przed zaproponowaniem poprawki.',
'chat.commandAutocomplete.command.weighDescription': 'Rozważ 2-3 podejścia z kompromisami i rekomendacją, zanim się zdecydujesz.',
'chat.commandAutocomplete.command.btwDescription': 'Zadaj pytanie poboczne w tymczasowej sesji potomnej, nie przerywając tego czatu.',
'chat.commandAutocomplete.command.exploreDescription': 'Zorientuj się w bazie kodu: ogólny przegląd architektury i głównych części.',
'chat.commandAutocomplete.badge.skill': 'skill',
'chat.commandAutocomplete.badge.command': 'polecenie',
@@ -797,13 +862,28 @@ export const dict: Record<I18nKey, string> = {
'chat.container.returnToParent.titleNamed': 'Powrót do: {title}',
'chat.container.returnToParent.title': 'Powrót do sesji nadrzędnej',
'chat.container.returnToParent.label': 'Nadrzędna',
'chat.btw.destroyAria': 'Zniszcz tę sesję btw',
'chat.btw.titleFallback': 'sesja btw',
'chat.btw.mainComposerPlaceholder': 'Zadaj pytanie w tej sesji btw…',
'chat.btw.loading': 'Uruchamianie sesji btw…',
'chat.btw.toast.emptyArgument': 'Wpisz pytanie po /btw',
'chat.btw.toast.createFailed': 'Nie udało się uruchomić sesji btw',
'chat.btw.toast.destroyFailed': 'Nie udało się zniszczyć sesji btw. Pozostanie na pasku bocznym.',
'chat.btw.working': 'Pracuje…',
'chat.btw.collapseAria': 'Zwiń panel btw',
'chat.btw.expandAria': 'Rozwiń panel btw',
'chat.btw.promoteAria': 'Zachowaj jako osobną sesję',
'chat.btw.toast.promoteFailed': 'Nie udało się zachować sesji btw',
'chat.container.readOnlySubagentPromptBanner': 'Sesje podagentów nie mogą otrzymywać promptów.',
'chat.container.sessionLoadError.title': 'Nie udało się wczytać sesji',
'chat.container.sessionLoadError.description': 'Sprawdź połączenie i spróbuj ponownie wczytać tę sesję.',
'chat.container.sessionLoadError.description': 'Nie udało się pobrać rozmowy — serwer może być wyłączony lub nieosiągalny. Nic nie przepadło; spróbuj ponownie, gdy wróci.',
'chat.container.sessionLoadError.authDescription': 'Sesja wygasła, więc serwer odrzucił żądanie. Zaloguj się, a rozmowa się wczyta.',
'chat.container.sessionLoadError.retry': 'Spróbuj ponownie',
'sessions.sidebar.group.empty.loadingSessions': 'Wczytywanie sesji…',
'sessions.sidebar.group.empty.loadFailed': 'Nie udało się odświeżyć sesji.',
'sessions.sidebar.group.empty.retry': 'Spróbuj ponownie',
'sessions.sidebar.group.empty.permissionDenied': 'Wymagany jest dostęp do folderu.',
'sessions.sidebar.group.empty.grantAccess': 'Przyznaj dostęp',
'chat.unifiedControls.title': 'Kontrolki',
'chat.unifiedControls.model.title': 'Model',
'chat.unifiedControls.model.noRecent': 'Brak ostatnich modeli',
@@ -835,12 +915,13 @@ export const dict: Record<I18nKey, string> = {
'chat.textSelection.toast.addToNotesFailed': 'Nie udało się dodać do notatek',
'chat.textSelection.toast.addToNotesSuccess': 'Dodano zaznaczony tekst do notatek',
'chat.textSelection.toast.addToNotesSummaryFailed': 'Nie można podsumować zaznaczenia, dodano wybrany tekst do notatek',
'chat.textSelection.actions.addToChat': 'Dodaj do czatu',
'chat.textSelection.actions.newSession': 'Nowa sesja',
'chat.textSelection.actions.copy': 'Kopiuj',
'chat.textSelection.actions.addToInput': 'Dodaj do pola wpisywania',
'chat.textSelection.actions.comment': 'Skomentuj',
'chat.textSelection.title.commentOnSelection': 'Skomentuj zaznaczenie',
'chat.textSelection.comment.placeholder': 'Dodaj opcjonalny komentarz...',
'chat.textSelection.comment.attach': 'Załącz',
'chat.textSelection.actions.addToNotes': 'Dodaj do notatek',
'chat.textSelection.title.addToCurrentChat': 'Dodaj do obecnego czatu',
'chat.textSelection.title.newSessionWithSelection': 'Utwórz nową sesję z zaznaczeniem',
'chat.textSelection.title.saveInsightToNotes': 'Zapisz zaznaczony tekst do notatek',
'chat.messageBody.actions.revertAria': 'Cofnij do tej wiadomości',
'chat.messageBody.actions.revert': 'Cofnij od tego miejsca',
@@ -1171,8 +1252,6 @@ export const dict: Record<I18nKey, string> = {
'chat.chatInput.draftPicker.projectTitle': 'Projekt',
'chat.chatInput.draftPicker.searchProjects': 'Szukaj projektów...',
'chat.chatInput.draftPicker.searchBranches': 'Szukaj gałęzi...',
'chat.chatInput.devServerLogs': 'Dev Server logs:',
'chat.chatInput.devServerLogsRemove': 'Usuń logi serwera deweloperskiego',
'chat.chatInput.drop.attachFiles': 'Drop files here to attach',
'chat.chatInput.drop.insertMention': 'Drop to insert as mention',
'chat.chatInput.fileFallback': 'file',
@@ -1227,6 +1306,7 @@ export const dict: Record<I18nKey, string> = {
'chat.chatInput.toast.largeTextPaste.inline': 'Wklej w treści',
'chat.chatInput.toast.compactFailed': 'Nie udało się skompaktować sesji',
'chat.chatInput.toast.messageSendFailed': 'Nie udało się wysłać wiadomości. Załączniki zostały przywrócone.',
'chat.chatInput.toast.noModelSelected': 'Wybierz dostawcę i model przed wysłaniem.',
'chat.chatInput.toast.openSessionFirst': 'Najpierw otwórz sesję',
'chat.chatInput.toast.reviewFailed': 'Nie udało się przejrzeć zmian',
'chat.chatInput.toast.planFeatureFailed': 'Nie udało się rozpocząć planowania funkcji',
@@ -1381,6 +1461,7 @@ export const dict: Record<I18nKey, string> = {
'chat.toolPart.showRawJson': 'Pokaż surowy JSON',
'chat.toolPart.showFormattedJson': 'Pokaż sformatowany JSON',
'chat.toolPart.showNavigableJson': 'Pokaż nawigowalny JSON',
'chat.toolPart.openFile': 'Otwórz plik',
'chat.toolPart.openFileAtFirstChange': 'Otwórz plik przy pierwszej zmianie',
'chat.toolPart.openFileDiff': 'Otwórz różnice pliku',
'chat.toolPart.copyOutput': 'Kopiuj wyjście',
@@ -1399,6 +1480,15 @@ export const dict: Record<I18nKey, string> = {
'commandPalette.item.showSessionSwitcher': 'Pokaż przełącznik sesji',
'commandPalette.item.toggleSidebar': 'Przełącz panel boczny',
'commandPalette.item.toggleTerminal': 'Przełącz terminal',
'commandPalette.item.cycleTheme': 'Przełącz motyw',
'commandPalette.item.showOpenCodeStatus': 'Pokaż status OpenCode',
'commandPalette.item.toggleMemoryDebug': 'Przełącz panel debugowania pamięci',
'commandPalette.item.pinSession': 'Przypnij lub odepnij sesję',
'commandPalette.item.copySessionId': 'Kopiuj ID sesji',
'commandPalette.item.openMultiRun': 'Otwórz panel multi-run',
'commandPalette.item.openArchive': 'Otwórz zarchiwizowane sesje',
'commandPalette.item.openNotes': 'Otwórz panel notatek',
'commandPalette.item.openTodos': 'Otwórz panel zadań',
'commandPalette.session.untitled': 'Nienazwana sesja',
'commandPalette.title': 'Paleta poleceń',
'contextPanel.actions.closePanel': 'Zamknij panel',
@@ -1416,11 +1506,20 @@ export const dict: Record<I18nKey, string> = {
'contextPanel.mode.pr': 'Pull Request',
'contextPanel.mode.preview': 'Podgląd',
'contextPanel.mode.browser': 'Przeglądarka',
'contextRail.configure.open': 'Konfiguruj panele',
'contextRail.configure.dialogTitle': 'Panele paska',
'contextRail.configure.dialogDescription': 'Wybierz, które panele pokazuje pasek. Ukryte panele zachowują dane i pozostają dostępne z palety poleceń.',
'contextRail.configure.showAll': 'Pokaż wszystkie',
'contextRail.configure.noneWarning': 'Wszystkie panele są ukryte.',
'contextRail.aria.rail': 'Powierzchnie panelu',
'contextPanel.editorEmpty.title': 'Brak otwartego pliku',
'contextPanel.editorEmpty.description': 'Wybierz plik z drzewa, aby rozpocząć edycję.',
'contextRail.surface.editor.description': 'Edytuj pliki projektu',
'contextRail.surface.git.description': 'Commity, gałęzie i pull requesty',
'contextRail.surface.git.changesCountAriaSingle': '{label}, {count} zmieniony plik',
'contextRail.surface.git.changesCountAriaPlural': '{label}, {count} zmienionych plików',
'contextRail.surface.git.changesCountTooltipSingle': '{count} zmieniony plik',
'contextRail.surface.git.changesCountTooltipPlural': '{count} zmienionych plików',
'contextRail.surface.terminal.description': 'Wbudowany terminal',
'contextRail.surface.diff.description': 'Przeglądaj bieżące zmiany',
'contextPanel.mode.walkthrough': 'Przewodnik',
@@ -1460,8 +1559,11 @@ export const dict: Record<I18nKey, string> = {
'walkthrough.toc.moreFiles': 'Więcej plików: {count}',
'walkthrough.toc.uncovered': 'Nieuwzględnione: {count}',
'walkthrough.toc.resize': 'Zmień szerokość kolumny spisu treści',
'walkthrough.importance.critical': 'Krytyczne',
'walkthrough.importance.critical': 'Kluczowa zmiana',
'walkthrough.importance.criticalHint': 'Ten krok napędza resztę zmiany, więc przeczytaj go uważnie. To nie jest problem znaleziony w Twoim kodzie.',
'walkthrough.importance.context': 'Kontekst',
'walkthrough.importance.contextHint': 'Zmiana pomocnicza, dołączona po to, by reszta miała sens.',
'walkthrough.help.guide': 'Jak działają walkthroughy',
'walkthrough.blocked.noModel.title': 'Brak dostępnego małego modelu',
'walkthrough.blocked.noModel.description': 'Zaloguj się u dostawcy modeli, aby wygenerować przegląd.',
'walkthrough.blocked.emptyDiff.title': 'Nie ma czego przeglądać',
@@ -1476,22 +1578,77 @@ export const dict: Record<I18nKey, string> = {
'walkthrough.blocked.outputExhausted.descriptionUnknownModel': 'Mały model zużył cały limit wyjścia na rozumowanie i nic nie zwrócił. Modele rozumujące często tak robią przy dużych różnicach — pomoże model mniej „myślący” albo węższy zakres przeglądu.',
'walkthrough.blocked.onlyGenerated.title': 'Zmieniły się tylko pliki generowane',
'walkthrough.blocked.onlyGenerated.description': 'Wszystkie zmiany to pliki blokad lub inne wyniki pracy narzędzi, które przegląd celowo pomija.',
'walkthrough.blocked.serverUnsupported.title': 'Ten serwer nie obsługuje walkthroughów',
'walkthrough.blocked.serverUnsupported.description': 'Serwer OpenChamber, z którym połączona jest ta aplikacja, nie odpowiedział na API walkthroughu — jest więc starszy niż aplikacja. Zaktualizuj serwer do wersji 1.18 lub nowszej i odśwież.',
'walkthrough.blocked.contextTooSmall.descriptionUnknownModel': 'Mały model mieści około {available} tys. znaków, a te różnice potrzebują około {required} tys. Nic nie jest obcinane — wybierz model z większym kontekstem.',
'walkthrough.blocked.structuredOutput.descriptionUnknownModel': 'Mały model nie obsługuje ustrukturyzowanych odpowiedzi wymaganych przez przewodnik.',
'contextRail.surface.plan.description': 'Zobacz bieżący plan',
'contextRail.surface.pr.description': 'Twórz, przeglądaj i scalaj pull request bieżącej gałęzi',
'contextRail.surface.notes.description': 'Notatki, zadania i plany projektu',
'contextRail.surface.notes.description': 'Notatki, zadania, plany i pamięć agenta dla projektu',
'contextRail.surface.context.description': 'Kontekst sesji i zużycie tokenów',
'contextRail.surface.browser.description': 'Wbudowana przeglądarka',
'contextRail.surface.preview.description': 'Podgląd serwera deweloperskiego',
'contextRail.surface.chat.description': 'Sesja otwarta obok',
'contextRail.surface.notes': 'Notatki projektu',
'contextRail.surface.notes': 'Wiedza o projekcie',
'contextRail.editorTree.toggle': 'Przełącz drzewo plików',
'contextPanel.browser.open': 'Otwórz panel przeglądarki',
'contextPanel.browser.addressAria': 'Adres przeglądarki',
'contextPanel.browser.history.label': 'Ostatnie adresy',
'contextPanel.browser.history.forget': 'Usuń z historii',
'contextPanel.browser.newTab': 'Nowa karta przeglądarki',
'contextPanel.browser.empty': 'Przeglądarka internetowa',
'contextPanel.browser.emptyHint': 'Wprowadź adres powyżej, aby rozpocząć przeglądanie',
'contextPanel.browser.inspectUnavailable': 'Nie można sprawdzić tej strony z panelu przeglądarki.',
'contextPanel.browser.back': 'Wstecz',
'contextPanel.browser.forward': 'Dalej',
'contextPanel.browser.reload': 'Odśwież',
'contextPanel.browser.hardReload': 'Przeładuj z pominięciem pamięci podręcznej',
'contextPanel.browser.zoomIn': 'Powiększ',
'contextPanel.browser.zoomOut': 'Pomniejsz',
'contextPanel.browser.zoomReset': 'Zresetuj powiększenie',
'contextPanel.browser.clearCookies': 'Wyczyść pliki cookie',
'contextPanel.browser.clearCache': 'Wyczyść pamięć podręczną',
'contextPanel.browser.clearedCookies': 'Pliki cookie wyczyszczone',
'contextPanel.browser.clearedCache': 'Pamięć podręczna wyczyszczona',
'contextPanel.browser.clearFailed': 'Nie udało się wyczyścić danych przeglądania',
'contextPanel.browser.stop': 'Zatrzymaj',
'contextPanel.browser.openExternal': 'Otwórz w przeglądarce systemowej',
'contextPanel.browser.devTools': 'Otwórz DevTools',
'contextPanel.browser.deviceToolbar': 'Pasek urządzeń',
'contextPanel.browser.device.preset': 'Ustawienie urządzenia',
'contextPanel.browser.device.responsive': 'Responsywny',
'contextPanel.browser.device.width': 'Szerokość widoku',
'contextPanel.browser.device.height': 'Wysokość widoku',
'contextPanel.browser.device.rotate': 'Obróć',
'contextPanel.browser.device.schemeSystem': 'Auto',
'contextPanel.browser.device.schemeLight': 'Jasny',
'contextPanel.browser.device.schemeDark': 'Ciemny',
'contextPanel.browser.device.schemeFailed': 'Nie udało się zmienić wyglądu strony',
'contextPanel.browser.frameTitle': 'Przeglądarka',
'contextPanel.browser.loadFailed': 'Nie udało się wczytać tej strony',
'contextPanel.browser.waitingForServer': 'Czekanie na serwer deweloperski',
'contextPanel.browser.waitingForServerHint': 'Jeszcze nie przyjmuje połączeń. Strona wczyta się, gdy tylko zacznie.',
'contextPanel.browser.tunnelFailed': 'Nie udało się połączyć z tym serwerem deweloperskim',
'contextPanel.browser.tunnelFailedHint': '{url} działa na maszynie, na której jest OpenChamber, i nie udało się otworzyć do niej połączenia. Nic z twojej własnej maszyny nie jest tu pokazywane.',
'contextPanel.browser.loadFailedUnknown': 'Nie udało się połączyć ze stroną.',
'contextPanel.browser.crashed': 'Ta strona przestała odpowiadać',
'contextPanel.browser.crashedHint': 'Strona kilkakrotnie uległa awarii. Odśwież, aby spróbować ponownie.',
'contextPanel.browser.devServers.title': 'Działające serwery deweloperskie',
'projectActions.toast.multipleServers': 'Uruchomiło się kilka serwerów — wybierz jeden w panelu przeglądarki',
'contextPanel.browser.devServers.justStarted': 'Właśnie uruchomione',
'contextPanel.browser.devServers.unavailable': 'Nie udało się sprawdzić działających serwerów deweloperskich.',
'contextPanel.browser.devServers.remoteOnly': 'Działają na komputerze, na którym uruchomiony jest OpenChamber. Do ich otwarcia potrzebna jest aplikacja desktopowa.',
'contextPanel.browser.annotate.toggle': 'Dodaj adnotację do strony',
'contextPanel.browser.annotate.intro': 'To jest opatrzony adnotacją fragment z wbudowanej przeglądarki.',
'contextPanel.browser.annotate.attached': 'Adnotacja dołączona do czatu',
'contextPanel.browser.annotate.noSession': 'Otwórz sesję czatu przed dołączeniem adnotacji',
'contextPanel.browser.annotate.noPage': 'Wczytaj stronę przed dodaniem adnotacji',
'contextPanel.browser.annotate.failed': 'Nie udało się dodać adnotacji do tej strony',
'contextPanel.browser.annotate.tool.element': 'Element',
'contextPanel.browser.annotate.tool.region': 'Obszar',
'contextPanel.browser.annotate.tool.draw': 'Rysuj',
'contextPanel.browser.annotate.commentPlaceholder': 'Opisz zmianę...',
'contextPanel.browser.annotate.submit': 'Dołącz',
'contextPanel.browser.trustNotice': 'Strony otwierane tutaj działają z pełnym dostępem do OpenChamber — jest to wymagane do inspekcji i zrzutów ekranu. Otwieraj tylko zaufane witryny: złośliwa strona może odczytać Twoje dane lub działać w Twoim imieniu.',
'contextPanel.preview.actions.openExternal': 'Otwórz w przeglądarce',
'contextPanel.preview.actions.reload': 'Odśwież podgląd',
@@ -1565,11 +1722,13 @@ export const dict: Record<I18nKey, string> = {
'contextUsage.aria.label': 'Użycie kontekstu',
'contextUsage.mobile.contextLimit': 'Limit kontekstu',
'contextUsage.mobile.outputLimit': 'Limit wyjścia',
'contextUsage.mobile.cost': 'Koszt',
'contextUsage.mobile.title': 'Użycie kontekstu',
'contextUsage.mobile.usage': 'Zużycie',
'contextUsage.mobile.usedTokens': 'Zużyte tokeny',
'contextUsage.tooltip.contextLimit': 'Limit kontekstu: {tokens}',
'contextUsage.tooltip.outputLimit': 'Limit wyjścia: {tokens}',
'contextUsage.tooltip.cost': 'Koszt: {cost}',
'contextUsage.tooltip.usedTokens': 'Zużyte tokeny: {tokens}',
'desktopHostSwitcher.actions.add': 'Dodaj',
'desktopHostSwitcher.actions.addInstance': 'Dodaj instancję',
@@ -1664,6 +1823,12 @@ export const dict: Record<I18nKey, string> = {
'diffView.reviewDialog.toast.noSessionDirectory': 'Katalog sesji jest niedostępny',
'diffView.reviewDialog.toast.startFailed': 'Nie udało się uruchomić flow review',
'chat.history.loadOlder': 'Wczytaj starsze wiadomości',
'chat.appLink.confirm.title': 'Otworzyć ten link w innej aplikacji?',
'chat.appLink.confirm.description': 'Ten link z czatu używa protokołu {scheme} i zostanie otwarty w innej aplikacji.',
'chat.appLink.confirm.descriptionPlain': 'Ten link z czatu zostanie otwarty w innej aplikacji.',
'chat.appLink.confirm.cancel': 'Anuluj',
'chat.appLink.confirm.open': 'Otwórz raz',
'chat.appLink.confirm.trustAndOpen': 'Zaufaj i otwórz',
'chat.autoReview.title': 'Pętla code review trwa',
'chat.autoReview.status.waitingForReviewer': 'Oczekiwanie na reviewera',
'chat.autoReview.status.waitingForImplementer': 'Oczekiwanie na implementatora',
@@ -1710,6 +1875,13 @@ export const dict: Record<I18nKey, string> = {
"diffView.scope.changed": "Zmienione",
"diffView.scope.staged": "Staged",
"diffView.scope.lastTurn": "Ostatnia tura",
"diffView.scope.branch": "Gałąź",
"diffView.branch.resolvingBase": "Wykrywanie gałęzi bazowej...",
"diffView.branch.noBaseTitle": "Brak gałęzi bazowej",
"diffView.branch.noBaseDescription": "Git nie zapisuje, od której gałęzi ta gałąź powstała. Wybierz gałąź bazową do porównania.",
"diffView.branch.loadError": "Nie udało się wczytać zmian gałęzi",
"diffView.branch.loadingFiles": "Wczytywanie zmian gałęzi...",
"diffView.branch.empty": "Brak zmian w tej gałęzi względem {base}",
"diffView.scope.selectorAria": "Wybierz tryb zmian",
'diffView.summary.changedFilesSingle': 'Zmieniono {count} plik',
'directoryExplorerDialog.actions.addProject': 'Dodaj projekt',
@@ -1726,6 +1898,10 @@ export const dict: Record<I18nKey, string> = {
'directoryExplorerDialog.browse.quickAdd': 'Dodaj',
'directoryExplorerDialog.browse.directories': 'Katalogi',
'directoryExplorerDialog.browse.empty': 'Brak pasujących katalogów.',
'directoryExplorerDialog.browse.permissionDenied': 'OpenChamber potrzebuje dostępu do tego folderu.',
'directoryExplorerDialog.browse.loadFailed': 'Nie udało się wczytać tego folderu.',
'directoryExplorerDialog.browse.grantAccess': 'Przyznaj dostęp',
'directoryExplorerDialog.browse.retry': 'Spróbuj ponownie',
'directoryExplorerDialog.browse.loading': 'Ładowanie katalogów...',
'directoryExplorerDialog.browse.parentDirectory': 'Katalog nadrzędny',
'directoryExplorerDialog.description': 'Wybierz folder, który chcesz dodać jako projekt.',
@@ -1781,6 +1957,12 @@ export const dict: Record<I18nKey, string> = {
'filesView.editor.enableLineWrap': 'Włącz zawijanie linii',
'filesView.editor.exitFullscreen': 'Wyjdź z pełnego ekranu',
'filesView.editor.findInFile': 'Znajdź w pliku',
'filesView.preview.find.placeholder': 'Szukaj w podglądzie',
'filesView.preview.find.nextAria': 'Następne dopasowanie',
'filesView.preview.find.previousAria': 'Poprzednie dopasowanie',
'filesView.preview.find.closeAria': 'Zamknij wyszukiwanie',
'filesView.preview.find.noMatches': 'Brak dopasowań',
'filesView.preview.find.countAria': '{current} z {total}',
'filesView.editor.fullscreen': 'Pełny ekran',
'filesView.editor.goToLine': 'Przejdź do linii',
'filesView.editor.htmlPreviewTitle': 'Podgląd HTML',
@@ -2109,6 +2291,8 @@ export const dict: Record<I18nKey, string> = {
'gitView.pr.field.draft': 'Szkic',
'gitView.pr.field.title': 'Tytuł',
'gitView.pr.githubNotConnected': 'GitHub nie jest połączony',
'gitView.pr.history.merged': 'PR #{number} został scalony do {base}.',
'gitView.pr.history.closed': 'PR #{number} został zamknięty.',
'gitView.pr.loadingDescription': 'Loading description...',
'gitView.pr.mergeMethod.merge': 'Create a merge commit',
'gitView.pr.mergeMethod.rebase': 'Rebase and merge',
@@ -2306,10 +2490,7 @@ export const dict: Record<I18nKey, string> = {
'header.services.rateLimits': 'Limity użycia',
'header.services.refreshRateLimitsAria': 'Odśwież limity użycia',
'header.services.remaining': 'Pozostało',
'header.services.shutdownDev': 'Zatrzymaj OpenChamber',
'header.services.title': 'Usługi',
'header.services.tooltip.currentInstanceWithShortcuts': 'Bieżąca instancja: {current} ({toggle}; następna karta {nextTab})',
'header.services.tooltip.servicesWithShortcuts': 'Usługi ({toggle}; następna karta {nextTab})',
'header.services.used': 'Wykorzystano',
'header.services.viewAria': 'Pokaż usługi',
'header.sessions.title': 'Sesje',
@@ -2319,7 +2500,6 @@ export const dict: Record<I18nKey, string> = {
'helpDialog.item.createNewSession': 'Utwórz nową sesję',
'helpDialog.item.createNewWorktreeDraft': 'Utwórz nowy szkic drzewa pracy',
'helpDialog.item.cycleAgent': 'Przełącz agenta (w polu czatu)',
'helpDialog.item.cycleServicesTab': 'Przełącz kartę usług',
'helpDialog.item.cycleTheme': 'Przełącz motyw (Jasny → Ciemny → Systemowy)',
'helpDialog.item.cycleThinkingVariant': 'Przełącz wariant myślenia (skrót globalny)',
'helpDialog.item.focusChatInput': 'Ustaw fokus na polu czatu',
@@ -2328,13 +2508,10 @@ export const dict: Record<I18nKey, string> = {
'helpDialog.item.newWindow': 'Nowe okno (tylko desktop)',
'helpDialog.item.openCommandPalette': 'Otwórz paletę poleceń',
'helpDialog.item.openModelSelector': 'Otwórz selektor modeli',
'helpDialog.item.openRightSidebarFilesTab': 'Otwórz powierzchnię plików',
'helpDialog.item.openRightSidebarGitTab': 'Otwórz powierzchnię Git',
'helpDialog.item.openSettings': 'Otwórz ustawienia',
'helpDialog.item.showKeyboardShortcuts': 'Pokaż skróty klawiaturowe (to okno)',
'helpDialog.item.switchProject': 'Przełącz projekt',
'helpDialog.item.togglePlanContextPanel': 'Przełącz panel kontekstu planu',
'helpDialog.item.toggleRightSidebar': 'Przełącz panel kontekstu',
'helpDialog.item.switchSessionTab': 'Przełącz kartę sesji',
'helpDialog.item.switchContextSurface': 'Przełącz powierzchnię panelu kontekstu (klawisz liczbowy)',
'helpDialog.item.toggleServicesMenu': 'Przełącz menu usług',
'helpDialog.item.toggleSessionSidebar': 'Przełącz panel sesji',
'helpDialog.item.addSelectionToChat': 'Dodaj zaznaczenie do czatu',
@@ -2343,7 +2520,7 @@ export const dict: Record<I18nKey, string> = {
'helpDialog.keyCombiner.or': 'lub',
'helpDialog.proTips.commandPalette': 'Użyj Palety poleceń ({shortcut}), aby szybko uzyskać dostęp do wszystkich akcji',
'helpDialog.proTips.recentSessions': '5 ostatnich sesji pojawia się w Palecie poleceń',
'helpDialog.proTips.themeCycling': 'Przełączanie motywów zapamiętuje twoje preferencje między sesjami',
'helpDialog.proTips.leaderSequences': 'Skróty dwustopniowe: naciśnij kombinację, potem drugi klawisz — Esc anuluje',
'helpDialog.proTips.title': 'Wskazówki:',
'helpDialog.section.interface': 'Interfejs',
'helpDialog.section.navigationCommands': 'Nawigacja i polecenia',
@@ -2357,7 +2534,7 @@ export const dict: Record<I18nKey, string> = {
'inlineComment.actions.save': 'Zapisz',
'inlineComment.actions.showLess': 'Show less',
'inlineComment.actions.showMore': 'Show more',
'inlineComment.input.placeholder': 'Add a comment... (Cmd+Enter to save)',
'inlineComment.input.placeholder': 'Dodaj komentarz... ({shortcut}, aby zapisać)',
'inlineComment.input.placeholderShort': 'Dodaj komentarz...',
'inlineComment.range.lines': 'Lines {start}-{end}',
'inlineComment.toast.selectSessionToSave': 'Select a session to save comment',
@@ -2427,8 +2604,19 @@ export const dict: Record<I18nKey, string> = {
'memoryDebugPanel.streaming.copy.copied': 'Skopiowano JSON debugowania streamingu',
'memoryDebugPanel.streaming.copy.failed': 'Nie udało się skopiować JSON',
'memoryDebugPanel.streaming.copy.hint': 'Kopiowanie eksportuje metryki streamingu zarówno UI, jak i VS Code w formacie JSON',
'memoryDebugPanel.requests.inFlight': 'W trakcie',
'memoryDebugPanel.requests.peak': 'Szczyt',
'memoryDebugPanel.requests.duration': 'Czas trwania',
'memoryDebugPanel.requests.totalRequests': 'Łączne żądania',
'memoryDebugPanel.requests.tracking': 'Śledzenie',
'memoryDebugPanel.requests.now': 'teraz',
'memoryDebugPanel.requests.noSamples': 'Brak żądań. Utrzymuj ten panel otwarty, aby rejestrować aktywność fetch.',
'memoryDebugPanel.requests.chartLabel': 'Żądania fetch w trakcie w czasie, szczyt {peak}',
'memoryDebugPanel.requests.windowHint': 'ostatnie {seconds}s',
'memoryDebugPanel.requests.percentileChartLabel': 'Percentyle wieku żądań w trakcie (p50, p90, p99, max) w czasie',
'memoryDebugPanel.tabs.memory': 'Pamięć',
'memoryDebugPanel.tabs.streaming': 'Streaming',
'memoryDebugPanel.tabs.requests': 'Żądania',
'memoryDebugPanel.title': 'Panel debugowania',
'memoryDebugPanel.tooltip.logCurrentState': 'Zaloguj bieżący stan pamięci do konsoli przeglądarki',
'openChamberLogo.aria.logo': 'Logo OpenChamber',
@@ -2454,6 +2642,7 @@ export const dict: Record<I18nKey, string> = {
'planView.actions.sendToNewWorktreeSession': 'Wyślij do nowej sesji drzewa pracy',
'planView.error.previewUnavailable': 'Podgląd jest niedostępny',
'planView.error.saveFailed': 'Nie udało się zapisać',
'planView.error.loadFailed': 'Nie udało się wczytać tego planu',
'planView.error.switchToEditMode': 'Przełącz do trybu edycji, aby naprawić problem.',
'planView.error.writeFailed': 'Nie udało się zapisać',
'planView.error.writePlanFileFailed': 'Nie udało się zapisać pliku planu ({status})',
@@ -2507,15 +2696,11 @@ export const dict: Record<I18nKey, string> = {
'projectEditDialog.toast.iconUpdated': 'Zaktualizowano ikonę projektu',
'rightSidebar.contextNotesTodo.empty.selectProject': 'Wybierz projekt, aby dodać notatki i zadania.',
'rightSidebar.contextNotesTodo.notes.placeholder': 'Zapisz kontekst, przypomnienia lub linki',
'rightSidebar.contextNotesTodo.notes.title': 'Szybkie notatki — {project}',
'rightSidebar.contextNotesTodo.plan.defaultTitle': 'Plan',
'rightSidebar.contextNotesTodo.plans.deletePlan': 'Usuń plan',
'rightSidebar.contextNotesTodo.plans.deletePlanWithTitle': 'Usuń plan „{title}”',
'rightSidebar.contextNotesTodo.plans.empty': 'Brak zapisanych planów.',
'rightSidebar.contextNotesTodo.plans.filesPlural': '{count} plików',
'rightSidebar.contextNotesTodo.plans.filesSingle': '{count} plik',
'rightSidebar.contextNotesTodo.plans.importFromFile': 'Importuj plan z pliku',
'rightSidebar.contextNotesTodo.plans.title': 'Plany',
'rightSidebar.contextNotesTodo.sendDialog.actions.cancel': 'Anuluj',
'rightSidebar.contextNotesTodo.sendDialog.actions.send': 'Wyślij',
'rightSidebar.contextNotesTodo.sendDialog.actions.sending': 'Wysyłanie',
@@ -2523,6 +2708,7 @@ export const dict: Record<I18nKey, string> = {
'rightSidebar.contextNotesTodo.sendDialog.title.newWorktree': 'Wyślij do nowego drzewa pracy',
'rightSidebar.contextNotesTodo.sendDialog.variant.default': 'Domyślny',
'rightSidebar.contextNotesTodo.toast.createSessionFailed': 'Nie udało się utworzyć sesji',
'rightSidebar.contextNotesTodo.toast.updatePlanFailed': 'Nie udało się zaktualizować planu',
'rightSidebar.contextNotesTodo.toast.deletePlanFailed': 'Nie udało się usunąć planu',
'rightSidebar.contextNotesTodo.toast.importPlanFailed': 'Nie udało się zaimportować planu',
'rightSidebar.contextNotesTodo.toast.loadNotesFailed': 'Nie udało się załadować notatek projektu',
@@ -2542,17 +2728,52 @@ export const dict: Record<I18nKey, string> = {
'rightSidebar.contextNotesTodo.todo.actions.markComplete': 'Oznacz „{text}” jako ukończone',
'rightSidebar.contextNotesTodo.todo.actions.send': 'Wyślij „{text}”',
'rightSidebar.contextNotesTodo.todo.actions.reorder': 'Zmień kolejność "{text}"',
'rightSidebar.contextNotesTodo.todo.resizeAria': 'Zmień rozmiar listy zadań',
'rightSidebar.contextNotesTodo.todo.addAria': 'Dodaj zadanie',
'rightSidebar.contextNotesTodo.todo.clearCompleted': 'Wyczyść ukończone',
'rightSidebar.contextNotesTodo.todo.empty': 'Brak zadań. Dodaj krótką checklistę dla tego projektu.',
'rightSidebar.contextNotesTodo.todo.inputPlaceholder': 'Dodaj zadanie',
'rightSidebar.contextNotesTodo.todo.itemsPlural': '{count} elementów',
'rightSidebar.contextNotesTodo.todo.itemsSingle': '{count} element',
'rightSidebar.contextNotesTodo.todo.sendMenu.currentSession': 'Wyślij do bieżącej sesji',
'rightSidebar.contextNotesTodo.todo.sendMenu.newSession': 'Wyślij do nowej sesji',
'rightSidebar.contextNotesTodo.todo.sendMenu.newWorktreeSession': 'Wyślij do nowej sesji drzewa pracy',
'rightSidebar.contextNotesTodo.todo.title': 'Zadania',
'rightSidebar.contextNotesTodo.notes.addAria': 'Dodaj notatkę',
'rightSidebar.contextNotesTodo.notes.empty': 'Brak notatek. Zapisz kontekst, przypomnienia lub linki.',
'rightSidebar.contextNotesTodo.notes.actions.expand': 'Rozwiń notatkę',
'rightSidebar.contextNotesTodo.notes.actions.collapse': 'Zwiń notatkę',
'rightSidebar.contextNotesTodo.notes.actions.delete': 'Usuń notatkę',
'rightSidebar.contextNotesTodo.notes.actions.pin': 'Przypnij do kontekstu agenta',
'rightSidebar.contextNotesTodo.notes.actions.unpin': 'Odepnij od kontekstu agenta',
'rightSidebar.contextNotesTodo.notes.source.selection': 'Z czatu',
'rightSidebar.contextNotesTodo.notes.source.agent': 'Od agenta',
'rightSidebar.contextNotesTodo.search.placeholder': 'Szukaj',
'rightSidebar.contextNotesTodo.search.clear': 'Wyczyść wyszukiwanie',
'rightSidebar.contextNotesTodo.search.noResults': 'Nic nie pasuje do "{query}".',
'rightSidebar.contextNotesTodo.toast.deleteNoteFailed': 'Nie udało się usunąć notatki',
'rightSidebar.contextNotesTodo.toast.createNoteFailed': 'Nie udało się utworzyć notatki',
'rightSidebar.contextNotesTodo.tabs.notes': 'Notatki',
'rightSidebar.contextNotesTodo.tabs.todos': 'Zadania',
'rightSidebar.contextNotesTodo.tabs.plans': 'Plany',
'rightSidebar.contextNotesTodo.plans.actions.back': 'Wróć do planów',
'rightSidebar.contextNotesTodo.tabs.memory': 'Pamięć',
'rightSidebar.contextNotesTodo.sections.label': 'Sekcje kontekstu projektu',
'rightSidebar.contextNotesTodo.sections.resize': 'Zmień szerokość paska sekcji',
'rightSidebar.contextNotesTodo.memory.scope.project': 'Projekt',
'rightSidebar.contextNotesTodo.memory.scope.label': 'Zakres pamięci',
'rightSidebar.contextNotesTodo.memory.scope.global': 'O Tobie',
'rightSidebar.contextNotesTodo.memory.type.fact': 'fakt',
'rightSidebar.contextNotesTodo.memory.badge.new': 'nowe',
'rightSidebar.contextNotesTodo.memory.flagged': 'Wstrzymane — czyta się jak instrukcja',
'rightSidebar.contextNotesTodo.memory.badge.changed': 'zmienione',
'rightSidebar.contextNotesTodo.memory.type.preference': 'preferencja',
'rightSidebar.contextNotesTodo.memory.type.reference': 'odnośnik',
'rightSidebar.contextNotesTodo.memory.actions.delete': 'Zapomnij ten wpis',
'rightSidebar.contextNotesTodo.memory.actions.editTitle': 'Tytuł wpisu',
'rightSidebar.contextNotesTodo.memory.actions.editBody': 'Treść wpisu',
'rightSidebar.contextNotesTodo.memory.toast.saveFailed': 'Nie udało się zapisać wpisu',
'rightSidebar.contextNotesTodo.memory.toast.deleteFailed': 'Nie udało się zapomnieć wpisu',
'rightSidebar.contextNotesTodo.memory.empty.nothing': 'Agent nic tu jeszcze nie zapisał.',
'rightSidebar.contextNotesTodo.memory.empty.noMatches': 'Żaden zapisany wpis nie pasuje do wyszukiwania.',
'rightSidebar.contextNotesTodo.memory.empty.noProject': 'Otwórz projekt, aby zobaczyć, co agent o nim pamięta.',
'rightSidebar.contextNotesTodo.memory.empty.unavailable': 'Nie udało się wczytać zapisanej pamięci. Nic nie przepadło — spróbuj ponownie.',
'saveProjectPlanDialog.actions.cancel': 'Anuluj',
'saveProjectPlanDialog.actions.save': 'Zapisz',
'saveProjectPlanDialog.actions.saving': 'Saving...',
@@ -2647,8 +2868,6 @@ export const dict: Record<I18nKey, string> = {
'session.newWorktree.newSessionTitle': 'Nowa sesja',
'session.newWorktree.noBranchesFound': 'Nie znaleziono gałęzi',
'session.newWorktree.noMatchingBranches': 'Brak pasujących gałęzi',
'session.newWorktree.otherLocalBranches': 'Pozostałe lokalne gałęzie',
'session.newWorktree.otherRemoteBranches': 'Pozostałe zdalne gałęzie',
'session.newWorktree.prNumber': 'PR #{number}',
'session.newWorktree.remoteBranches': 'Zdalne gałęzie',
'session.newWorktree.resetToMatchBranchName': 'Zresetuj do nazwy zgodnej z gałęzią',
@@ -2689,6 +2908,9 @@ export const dict: Record<I18nKey, string> = {
'sessionAuth.locked.passwordDescription': 'Ta sesja jest chroniona hasłem.',
'sessionAuth.locked.tunnelDescription': 'Otwórz ten tunel za pomocą jednorazowego linku połączenia z aplikacji desktopowej.',
'sessionAuth.locked.tunnelTitle': 'Wymagany dostęp przez tunel',
'sessionAuth.expired.banner': 'Sesja wygasła — zaloguj się, aby kontynuować.',
'sessionAuth.expired.loginAction': 'Zaloguj się',
'sessionAuth.expired.sendBlocked': 'Sesja wygasła — zaloguj się, aby wysyłać wiadomości.',
'sessionAuth.locked.unlockTitle': 'Odblokuj OpenChamber',
'sessionAuth.password.placeholder': 'Wpisz hasło',
'sessionAuth.toast.passkeyAdded': 'Dodano klucz dostępu',
@@ -2735,6 +2957,14 @@ export const dict: Record<I18nKey, string> = {
'sidebarFilesTree.toast.folderNameRequired': 'Nazwa folderu jest wymagana',
'sidebarFilesTree.toast.nameRequired': 'Nazwa jest wymagana',
'sidebarFilesTree.toast.operationFailed': 'Operacja nie powiodła się',
'sidebarFilesTree.toast.uploaded': 'Pliki przesłano',
'sidebarFilesTree.toast.uploadedWithoutConflicts': 'Przesłano pliki bez konfliktów',
'sidebarFilesTree.toast.uploadFailed': 'Nie udało się przesłać niektórych plików',
'sidebarFilesTree.drop.target': 'Prześlij do {path}',
'sidebarFilesTree.drop.uploading': 'Przesyłanie plików do {path}',
'sidebarFilesTree.dialog.uploadConflicts.title': 'Zastąpić istniejące pliki?',
'sidebarFilesTree.dialog.uploadConflicts.description': 'Pliki o tych nazwach już istnieją w {path}. Zastąpienia nie można cofnąć.',
'sidebarFilesTree.dialog.uploadConflicts.replace': 'Zastąp',
'sidebarFilesTree.toast.pathCopied': 'Ścieżka skopiowana',
'sidebarFilesTree.toast.renameNotSupported': 'Zmiana nazwy nie jest obsługiwana',
'sidebarFilesTree.toast.renamedSuccessfully': 'Zmieniono nazwę pomyślnie',
@@ -2780,6 +3010,10 @@ export const dict: Record<I18nKey, string> = {
'updateDialog.actions.restartToUpdate': 'Uruchom ponownie, aby zaktualizować',
'updateDialog.actions.updateNow': 'Aktualizuj teraz',
'updateDialog.error.takingLonger': 'Aktualizacja trwa dłużej niż oczekiwano. Poczekaj chwilę i odśwież albo uruchom: openchamber update',
'updateDialog.error.signatureRejected': 'Pobrana aktualizacja została odrzucona: jej podpis kodu nie pasuje do tej instalacji. Zwykle oznacza to, że uruchomiona kopia nie pochodzi z oficjalnego podpisanego wydania. Zainstaluj OpenChamber z oficjalnego wydania i zaktualizuj ponownie.',
'updateDialog.error.updaterDisabled': 'Aktualizator zatrzymał się po nieudanej instalacji. Zamknij OpenChamber, otwórz go ponownie i spróbuj zaktualizować jeszcze raz.',
'updateDialog.error.restartFailed': 'Nie udało się uruchomić ponownie, aby zainstalować aktualizację.',
'updateDialog.error.restartUnavailable': 'Instalacja aktualizacji wymaga aplikacji desktopowej OpenChamber.',
'updateDialog.error.updateFailed': 'Aktualizacja nie powiodła się',
'mobileUpdate.toast.available.title': 'Dostępna aktualizacja OpenChamber',
'mobileUpdate.toast.available.description': 'Wersja {version} jest gotowa dla Androida.',
@@ -2916,18 +3150,23 @@ export const dict: Record<I18nKey, string> = {
'common.relative.daysAgoCompact': '{count}d ago',
'common.relative.weeksAgoCompact': '{count}w ago',
'common.relative.yearsAgoCompact': '{count}y ago',
'common.duration.secondsCompact': '{seconds}s',
'common.duration.minutesSecondsCompact': '{minutes}m {seconds}s',
'common.duration.hoursMinutesCompact': '{hours}h {minutes}m',
'contextFileOpen.failure.tooLarge': 'File is too large to open (>{count} lines)',
'contextFileOpen.failure.missing': 'File not found',
'contextFileOpen.failure.unreadable': 'Failed to open file',
'quota.window.5h': '5-Hour',
'quota.window.7d': '7-Day Limit',
'quota.window.7dSonnet': '7-Day Sonnet Limit',
'quota.window.7dOpus': '7-Day Opus Limit',
'quota.window.weekly': 'Weekly Limit',
'quota.window.extraUsage': 'Dodatkowe zużycie',
'quota.window.weekly': 'Tygodniowo',
'quota.window.daily': 'Daily',
'quota.window.monthly': 'Monthly Limit',
'quota.window.monthly': 'Miesięcznie',
'quota.window.credits': 'Credits',
'quota.window.creditsBalance': 'Credits Balance',
'quota.window.monthlyCredits': 'Kredyty miesięczne',
'quota.window.purchasedCredits': 'Kupione kredyty',
'quota.window.freeCredits': 'Darmowe kredyty',
'quota.window.billingCycle': 'Billing Cycle',
'quota.window.auto': 'Auto',
'quota.window.api': 'API',
@@ -2937,5 +3176,104 @@ export const dict: Record<I18nKey, string> = {
'quota.window.premium': 'Premium Interactions',
'quota.window.chat': 'Chat Requests',
'quota.window.completions': 'Completions',
'quota.window.premiumInteractions': 'Premium interactions',
'quota.window.premiumInteractions': 'Kredyty AI',
'chat.workStatus.ariaLabel': 'Stan pracy',
'chat.workStatus.context.label': 'Kontekst',
'chat.workStatus.cost.breakdown': 'Sesja {session} · Podagenci {subagents}',
'chat.workStatus.git.changedFileSingle': 'Zmieniono {count} plik',
'chat.workStatus.git.changedFilePlural': 'Zmieniono {count} plików',
'chat.workStatus.pr.untitled': 'Pull request bez tytułu',
'chat.workStatus.pr.draft': 'Szkic',
'chat.workStatus.pr.checks': 'Sprawdzenia',
'chat.workStatus.pr.checksFailed': '{count} nieudanych',
'chat.workStatus.pr.checksPending': '{count} w toku',
'chat.workStatus.pr.checksPassed': '{count} zaliczonych',
'chat.workStatus.attention.merge': 'Trwa scalanie',
'chat.workStatus.attention.rebase': 'Trwa rebase',
'chat.workStatus.attention.cherryPick': 'Trwa cherry-pick',
'chat.workStatus.attention.revert': 'Trwa cofanie',
'chat.workStatus.attention.bisect': 'Trwa bisect',
'chat.workStatus.subagent.done': 'Gotowe',
'chat.workStatus.subagent.untitled': 'Subagent',
'chat.workStatus.mcp.toggle': 'Przełącz {name}',
'chat.workStatus.mcp.needsAuth': 'Zaloguj się',
'chat.workStatus.mcp.failed': 'Niepowodzenie',
'chat.workStatus.pinned.unavailable': 'Przypięta wiadomość',
'chat.workStatus.section.session': 'Sesja',
'chat.workStatus.section.project': 'Projekt',
'chat.workStatus.section.subagents': 'Subagenci',
'chat.workStatus.section.mcp': 'MCP',
'chat.workStatus.section.pinned': 'Przypięte wiadomości',
'chat.workStatus.section.tasks': 'Zadania',
'chat.workStatus.subagent.working': 'pracuje',
'chat.workStatus.subagent.needsPermission': 'potrzebuje uprawnienia',
'chat.workStatus.subagent.askedQuestion': 'zadał pytanie',
'chat.workStatus.section.contextBreakdown': 'Źródła kontekstu',
'chat.workStatus.breakdown.skills': 'Umiejętności',
'chat.workStatus.breakdown.pinnedNote': 'notatka',
'chat.workStatus.breakdown.unpin': 'Odepnij od kontekstu',
'chat.workStatus.breakdown.pinnedPlan': 'plan',
'chat.workStatus.breakdown.memory': 'Pamięć agenta',
'chat.workStatus.breakdown.pinnedKnowledgeSingle': '{count} przypięte',
'chat.workStatus.breakdown.pinnedKnowledgePlural': '{count} przypiętych',
'chat.workStatus.breakdown.mcp': 'Serwery MCP',
'chat.workStatus.action.openChanges': 'Otwórz zmiany',
'chat.workStatus.action.openGit': 'Otwórz panel Git',
'chat.workStatus.action.openPr': 'Otwórz pull request',
'chat.workStatus.action.openSubagent': 'Otwórz {name}',
'chat.workStatus.section.usage': 'Zużycie',
'chat.workStatus.goal.open': 'Zarządzaj celem',
'chat.workStatus.goal.pause': 'Wstrzymaj',
'chat.workStatus.goal.resume': 'Wznów',
'chat.workStatus.goal.updateFailed': 'Nie udało się zaktualizować celu',
'chat.workStatus.pinned.unpin': 'Odepnij wiadomość',
'chat.workStatus.pinned.reveal': 'Przejdź do wiadomości',
'chat.workStatus.pinned.unpinFailed': 'Nie udało się odpiąć wiadomości',
'chat.workStatus.action.openContext': 'Otwórz panel kontekstu',
'chat.workStatus.section.linkedIssues': 'Powiązane',
'chat.workStatus.linkedIssues.open': 'Otwórz #{number} w GitHub',
'chat.workStatus.linkedIssues.unlink': 'Usuń powiązanie',
'chat.workStatus.linkedIssues.unlinkFailed': 'Nie udało się usunąć powiązania',
'chat.workStatus.linkedIssues.link': 'Powiąż z sesją',
'chat.workStatus.linkedIssues.linkFailed': 'Nie udało się powiązać',
'chat.workStatus.breakdown.issueCountSingle': '{count} zgłoszenie',
'chat.workStatus.breakdown.issueCountPlural': '{count} zgłoszeń',
'chat.workStatus.breakdown.prCountSingle': '{count} PR',
'chat.workStatus.breakdown.prCountPlural': '{count} PR-ów',
'chat.workStatus.breakdown.skillCountSingle': '{count} umiejętność',
'chat.workStatus.breakdown.skillCountPlural': '{count} umiejętności',
'chat.workStatus.breakdown.mcpCountSingle': '{count} MCP',
'chat.workStatus.breakdown.mcpCountPlural': '{count} MCP',
'chat.workStatus.sections.open': 'Wybierz sekcje',
'chat.workStatus.sections.dialogTitle': 'Sekcje panelu',
'chat.workStatus.sections.dialogDescription': 'Wybierz, co pokazuje panel stanu pracy. Ukryte sekcje zachowują swoje dane — po prostu nie są wyświetlane.',
'chat.workStatus.sections.allHidden': 'Nie wybrano żadnych sekcji',
'chat.workStatus.sections.showAll': 'Pokaż wszystkie',
'chat.workStatus.sections.noneWarning': 'Panel będzie wyświetlany jako pusty.',
'header.workStatusPanel.toggleAria': 'Przełącz panel stanu pracy',
'header.workStatusPanel.hide': 'Ukryj stan pracy',
'header.workStatusPanel.show': 'Pokaż stan pracy',
'chat.workStatus.mcp.authorizeOpenFailed': 'Nie udało się otworzyć strony autoryzacji',
'chat.workStatus.mcp.authorizeFailed': 'Autoryzacja nie powiodła się',
'mcpDropdown.toast.authorizeOpenFailed': 'Nie udało się otworzyć strony autoryzacji',
'mcpDropdown.toast.authorizeFailed': 'Autoryzacja nie powiodła się',
'header.services.tooltip.currentInstance': 'Bieżąca instancja: {current} ({toggle})',
'header.workStatusPanel.showOverlay': 'Pokaż stan pracy nad czatem',
'settings.mcp.page.connection.title': 'Jak się połączyć',
'settings.mcp.page.connection.description': 'Wklej polecenie uruchamiające lub link do serwera hostowanego.',
'settings.mcp.page.registration.title': 'Ten serwer wymaga własnej aplikacji',
'settings.mcp.page.registration.description': 'Nie wydaje danych logowania automatycznie. Utwórz aplikację w ustawieniach usługi, wklej jej dane tutaj i zaloguj się.',
'settings.mcp.page.registration.callbackLabel': 'Podaj usłudze ten adres',
'settings.mcp.page.registration.clientId': 'ID aplikacji',
'settings.mcp.page.registration.clientSecret': 'Sekret aplikacji',
'settings.mcp.page.registration.afterSaving': 'Zapisz, a potem naciśnij Autoryzuj.',
'settings.mcp.page.toast.copiedCallbackUrl': 'Skopiowano adres',
'settings.mcp.page.toast.clipboardWriteFailed': 'Nie udało się skopiować do schowka',
'settings.mcp.page.scope.everywhere': 'Dostępny we wszystkich projektach',
'settings.mcp.page.scope.thisProject': 'Tylko w tym projekcie',
'settings.mcp.page.env.description': 'Wartości potrzebne serwerowi, np. klucz API.',
'settings.mcp.page.connection.kindCommand': 'Polecenie',
'settings.mcp.page.connection.kindLink': 'Link',
'settings.mcp.page.connection.hintCommand': 'Działa na tym komputerze. Wklej całe polecenie — zostanie podzielone na jeden argument w wierszu.',
'settings.mcp.page.connection.hintLink': 'Łączy się z serwerem hostowanym przez kogoś innego. Wklej jego adres https.',
} as const;
@@ -1,8 +1,10 @@
import { thirdPartyIntegrationI18n } from './third-party-integrations.i18n';
export const settingsDict = {
'settings.providers.page.openCodeGo.title': 'Monitoramento de uso do OpenCode Go',
'settings.providers.page.openCodeGo.description': 'Conecte o painel do OpenCode Go para exibir as cotas móvel, semanal e mensal.',
'settings.providers.page.openCodeGo.workspaceId': 'ID do workspace',
'settings.providers.page.openCodeGo.authCookie': 'Cookie de autenticação',
'settings.providers.page.openCodeGo.apiKey': 'Chave de API',
'settings.providers.page.openCodeGo.help': 'Copie o ID da URL do painel e o cookie auth das ferramentas do navegador. O OpenChamber nunca examina os cookies do navegador.',
'settings.providers.page.openCodeGo.save': 'Salvar e validar',
'settings.providers.page.openCodeGo.replace': 'Substituir',
@@ -40,7 +42,20 @@ export const settingsDict = {
"settings.view.badge.beta": "beta",
"settings.view.actions.reloadOpenCode": "Recarregar OpenCode",
"settings.view.actions.reloadOpenCodeTooltip": "Reiniciar OpenCode e recarregar suas configurações.",
"settings.view.actions.backToSettings": "Voltar às configurações",
"settings.view.actions.applyAndRestartOpenCode": "Aplicar e reiniciar",
"settings.view.actions.applyAndRestartOpenCodeTooltipSingle": "Aplicar 1 alteração de configuração pendente e reiniciar o OpenCode.",
"settings.view.actions.applyAndRestartOpenCodeTooltipPlural": "Aplicar {count} alterações de configuração pendentes e reiniciar o OpenCode.",
"settings.view.pendingRestart.applying": "Reiniciando…",
"settings.view.pendingRestart.applied": "OpenCode reiniciado com as alterações de configuração pendentes.",
"settings.view.pendingRestart.applyFailed": "Falha ao aplicar as alterações de configuração.",
"settings.view.pendingRestart.manualRestartRequired": "Salvo no disco. Reinicie o servidor OpenCode conectado para aplicar as alterações.",
"settings.view.pendingRestart.saved": "Salvo. Reinicie o OpenCode para aplicar.",
"settings.view.pendingRestart.confirm.title": "Aplicar e reiniciar?",
"settings.view.pendingRestart.confirm.description": "Reiniciar o OpenCode interromperá quaisquer chats em execução. As alterações de configuração salvas entrarão em vigor após a reinicialização.",
"settings.view.pendingRestart.confirm.dontShowAgain": "Não mostrar novamente",
"settings.view.pendingRestart.confirm.cancel": "Cancelar", "settings.view.actions.backToSettings": "Voltar às configurações",
"settings.view.actions.closeSettings": "Fechar configurações",
"settings.view.actions.openSectionList": "Abrir lista de seções",
"settings.view.actions.closeSettingsWithShortcut": "Fechar configurações ({shortcut}+,)",
@@ -359,14 +374,14 @@ export const settingsDict = {
"settings.remoteInstances.page.field.modePlaceholder": "Selecionar modo",
"settings.remoteInstances.page.field.modeManaged": "Iniciar para mim",
"settings.remoteInstances.page.field.modeExternal": "Já está em execução",
"settings.remoteInstances.page.field.preferredRemotePort": "Porta remoto preferido",
"settings.remoteInstances.page.field.preferredRemotePortHint": "Port to use on the remote machine. Leave empty to choose one automatically.",
"settings.remoteInstances.page.field.preferredRemotePort": "Porta na máquina remota",
"settings.remoteInstances.page.field.preferredRemotePortHint": "Porta que o OpenChamber usa na máquina remota. Deixe vazio para escolher automaticamente.",
"settings.remoteInstances.page.field.keepServerRunning": "Manter servidor em execução",
"settings.remoteInstances.page.field.keepServerRunningHint": "Keep OpenChamber running on the remote machine after you disconnect.",
"settings.remoteInstances.page.field.bindHost": "Host de link",
"settings.remoteInstances.page.field.bindHostHint": "Where the local connection should listen. Use 127.0.0.1 or localhost unless you need LAN access.",
"settings.remoteInstances.page.field.preferredLocalPort": "Porta local preferido",
"settings.remoteInstances.page.field.preferredLocalPortHint": "Local port to open for this connection. Leave empty to choose one automatically.",
"settings.remoteInstances.page.field.keepServerRunningHint": "Manter o servidor remoto rodando depois de desconectar. Desligado, ele para ao desconectar e sobe de novo na próxima conexão.",
"settings.remoteInstances.page.field.bindHost": "Quem pode acessar",
"settings.remoteInstances.page.field.bindHostHint": "Quem pode abrir o endereço encaminhado neste computador. A máquina remota continua acessível somente pelo túnel SSH nos dois casos.",
"settings.remoteInstances.page.field.preferredLocalPort": "Porta neste computador",
"settings.remoteInstances.page.field.preferredLocalPortHint": "Porta aberta neste computador para o túnel. Deixe vazio para escolher automaticamente.",
"settings.remoteInstances.page.field.forwardType": "Tipo de encaminhamento",
"settings.remoteInstances.page.field.localHostPlaceholder": "127.0.0.1",
"settings.remoteInstances.page.field.remoteHostPlaceholder": "127.0.0.1",
@@ -386,6 +401,10 @@ export const settingsDict = {
"settings.common.actions.cancel": "Cancelar",
"settings.common.actions.create": "Criar",
"settings.common.actions.delete": "Excluir",
"settings.openchamber.appLinks.title": "Links de aplicativos confiáveis",
"settings.openchamber.appLinks.info": "Os links desta lista abrem sem perguntar novamente neste dispositivo. Outros links de aplicativos sempre pedem confirmação antes de abrir.",
"settings.openchamber.appLinks.empty": "Não há links de aplicativos confiáveis neste dispositivo. Escolha \"Confiar e abrir\" ao abrir um link para adicioná-lo aqui.",
"settings.openchamber.appLinks.removeAria": "Remover links {scheme} confiáveis",
"settings.common.actions.reset": "Reiniciar",
"settings.common.actions.rename": "Renomear",
"settings.common.actions.duplicate": "Duplicar",
@@ -431,6 +450,9 @@ export const settingsDict = {
"settings.openchamber.about.title": "Sobre o OpenChamber",
"settings.openchamber.about.field.version": "Versão",
"settings.openchamber.about.field.openCodeVersion": "Versão do OpenCode",
"settings.openchamber.about.field.instanceUrls": "URLs da instância",
"settings.openchamber.about.field.applicationUrl": "Aplicativo",
"settings.openchamber.about.field.tunnelUrl": "Túnel",
"settings.openchamber.about.state.checking": "Verificando...",
"settings.openchamber.about.state.upToDate": "Atualizado",
"settings.openchamber.about.state.unknown": "desconhecido",
@@ -847,16 +869,26 @@ export const settingsDict = {
"settings.skills.catalog.page.mode.manual": "Manual",
"settings.skills.catalog.page.mode.external": "Externo",
"settings.skills.catalog.page.title": "Catálogo de habilidades",
'settings.skills.catalog.page.subtitle': 'Instale skills prontas de repositórios curados ou adicione sua própria fonte.',
'settings.skills.catalog.page.section.sources': 'Fontes',
'settings.skills.catalog.page.searchAllPlaceholder': 'Pesquisar skills em todas as fontes…',
'settings.skills.catalog.page.search.clear': 'Limpar pesquisa',
'settings.skills.catalog.page.source.skillsCount': 'Skills: {count}',
'settings.skills.catalog.page.source.stars': 'Estrelas: {count}',
'settings.skills.catalog.page.source.updated': 'Atualizado {time}',
'settings.skills.catalog.page.source.addOwnTitle': 'Adicionar sua própria fonte',
'settings.skills.catalog.page.source.addOwnDescription': 'Qualquer repositório Git com skills',
'settings.skills.catalog.page.source.viewRepo': 'Abrir repositório no GitHub',
'settings.skills.catalog.page.skill.viewOnGithub': 'Ver skill no GitHub',
'settings.skills.catalog.page.list.searchTitle': 'Resultados da pesquisa',
"settings.skills.catalog.page.section.sourceRepository": "Repositório de origem",
"settings.skills.catalog.page.field.selectSourcePlaceholder": "Selecionar origem",
"settings.skills.catalog.page.actions.refreshTitle": "Atualizar",
"settings.skills.catalog.page.actions.removeCatalogTitle": "Excluir catálogo",
"settings.skills.catalog.page.actions.addCatalog": "Adicionar catálogo",
"settings.skills.catalog.page.actions.removeCatalog": "Excluir catálogo",
"settings.skills.catalog.page.actions.loadMoreSkills": "Carregar mais habilidades",
"settings.skills.catalog.page.loading.catalog": "Carregando...",
"settings.skills.catalog.page.loading.skills": "Carregando habilidades...",
"settings.skills.catalog.page.loading.more": "Carregando...",
"settings.skills.catalog.page.foundCount": "{count} habilidade(es) encontrada(s)",
"settings.skills.catalog.page.error.catalogTitle": "Erro do catálogo",
"settings.skills.catalog.page.empty.noSkillsTitle": "Nenhuma habilidade encontrada",
@@ -864,7 +896,6 @@ export const settingsDict = {
"settings.skills.catalog.page.badge.installed": "instalado ({scope})",
"settings.skills.catalog.page.badge.notInstallable": "não instalável",
"settings.skills.catalog.page.badge.unknown": "desconhecido",
"settings.skills.catalog.page.byOwnerPrefix": "por",
"settings.skills.catalog.page.removeDialog.title": "Excluir catálogo",
"settings.skills.catalog.page.removeDialog.description": "Tem certeza de que deseja excluir este catálogo?",
"settings.openchamber.passkeys.title": "Chaves de acesso",
@@ -927,9 +958,9 @@ export const settingsDict = {
"settings.openchamber.desktopNetwork.field.macMenuBarAria": "Mostrar o OpenChamber na barra de menus do macOS",
"settings.openchamber.desktopNetwork.field.macMenuBar": "Mostrar o OpenChamber na barra de menus",
"settings.openchamber.desktopNetwork.field.macMenuBarDescription": "Exige reiniciar o aplicativo. Quando desativado, o OpenChamber não cria o item da barra de menus nem executa as atualizações de sessões, aprovações e uso.",
"settings.openchamber.desktopNetwork.field.minimizeToTrayAria": "Minimizar e fechar o OpenChamber na bandeja do sistema",
"settings.openchamber.desktopNetwork.field.minimizeToTray": "Minimizar e fechar na bandeja do sistema",
"settings.openchamber.desktopNetwork.field.minimizeToTrayDescription": "Mantém o OpenChamber em execução na bandeja do sistema quando a janela principal é minimizada ou fechada.",
"settings.openchamber.desktopNetwork.field.minimizeToTrayAria": "Fechar o OpenChamber na bandeja do sistema",
"settings.openchamber.desktopNetwork.field.minimizeToTray": "Fechar na bandeja do sistema",
"settings.openchamber.desktopNetwork.field.minimizeToTrayDescription": "Mantém o OpenChamber em execução na bandeja do sistema quando a janela principal é fechada. Ao minimizar, a janela permanece na barra de tarefas.",
"settings.openchamber.desktopNetwork.field.keepAwakeAria": "Manter o computador ativo enquanto o OpenChamber estiver em execução",
"settings.openchamber.desktopNetwork.field.keepAwake": "Manter o computador ativo enquanto o OpenChamber estiver em execução",
"settings.openchamber.desktopNetwork.field.keepAwakeDescription": "Para que telefones continuem abrindo este app. A tela ainda pode desligar.",
@@ -956,15 +987,22 @@ export const settingsDict = {
"settings.openchamber.desktopNetwork.error.keepAwakeUnsupported": "Impedir suspensão não é compatível com este sistema",
"settings.openchamber.desktopNetwork.error.keepAwakeSaveFailed": "Não foi possível atualizar a opção de manter ativo",
"settings.openchamber.opencodeCli.title": "CLI do OpenCode",
"settings.openchamber.tools.title": "Ferramentas do OpenChamber",
"settings.openchamber.tools.field.agentControlTool": "Ferramenta de controle para agentes",
"settings.openchamber.tools.field.agentControlToolAria": "Ativar a ferramenta de controle para agentes",
"settings.openchamber.tools.field.agentControlToolInfo": "Permita que agentes orquestrem seu trabalho pelo chat: criar sessões e worktrees, delegar prompts a outros agentes e gerenciar tarefas agendadas. Adiciona uma pequena descrição de ferramenta a cada sessão. Aplicado após reiniciar o OpenCode.",
"settings.openchamber.tools.field.agentWebTool": "Ferramenta OpenChamber Web",
"settings.openchamber.tools.field.agentWebToolAria": "Ativar a ferramenta OpenChamber Web",
"settings.openchamber.tools.field.agentWebToolInfo": "Permita que agentes vejam a página no painel de navegador do OpenChamber e interajam com ela: abrir uma URL, ler o conteúdo, clicar, digitar, rolar e alternar entre layout móvel e desktop. Adiciona uma pequena descrição de ferramenta a cada sessão. Aplicado após reiniciar o OpenCode.",
"settings.openchamber.tools.field.agentMemoryTool": "Ferramenta de memória do agente",
"settings.openchamber.tools.field.agentMemoryToolAria": "Ferramenta de memória do agente",
"settings.openchamber.tools.field.agentMemoryToolInfo": "Permite que os agentes guardem o que aprendem entre sessões, em dois armazenamentos: o que é verdade sobre você e o que é verdade sobre cada projeto. As sessões recebem os títulos armazenados para que o agente possa ler uma entrada quando for relevante. Desativar remove a ferramenta, a aba Memória e o índice da sessão. Vale após reiniciar o OpenCode.",
"settings.openchamber.opencodeCli.tooltipPrefix": "Caminho absoluto opcional para o",
"settings.openchamber.opencodeCli.tooltipSuffix": "executável.",
"settings.openchamber.opencodeCli.field.binaryPath": "Caminho do executável do OpenCode",
"settings.openchamber.opencodeCli.field.binaryPathPlaceholder": "/Users/you/.bun/bin/opencode",
"settings.openchamber.opencodeCli.field.showUpdateNotifications": "Mostrar notificações de atualização do OpenCode",
"settings.openchamber.opencodeCli.field.showUpdateNotificationsAria": "Mostrar notificações de atualização do OpenCode",
"settings.openchamber.opencodeCli.field.agentControlTool": "Ferramenta de controle para agentes",
"settings.openchamber.opencodeCli.field.agentControlToolAria": "Ativar a ferramenta de controle para agentes",
"settings.openchamber.opencodeCli.field.agentControlToolInfo": "Permita que agentes orquestrem seu trabalho pelo chat: criar sessões e worktrees, delegar prompts a outros agentes e gerenciar tarefas agendadas. Adiciona uma pequena descrição de ferramenta a cada sessão. Aplicado após Save + Reload.",
"settings.openchamber.opencodeCli.actions.browseAria": "Buscar caminho do executável do OpenCode",
"settings.openchamber.opencodeCli.actions.browse": "Buscar",
"settings.openchamber.opencodeCli.actions.saveAndReload": "Salvar + Recarregar",
@@ -1063,7 +1101,7 @@ export const settingsDict = {
"settings.openchamber.keyboardShortcuts.overwritePrompt": "Esta combinação já está sendo usada por outro atalho. Sobrescrever e limpar essa outra atribuição?",
"settings.openchamber.keyboardShortcuts.field.pressKeys": "Pressione as teclas...",
"settings.openchamber.keyboardShortcuts.error.captureFirst": "Captura um atalho primeiro.",
"settings.openchamber.keyboardShortcuts.warning.riskyBrowserShortcut": "Este atalho pode entrar em conflito com os padrões do navegador. Ainda assim, ele será salvo.",
"settings.openchamber.keyboardShortcuts.warning.riskyBrowserShortcut": "Este atalho pode entrar em conflito com os padrões do navegador. Ainda assim, você pode salvá-lo.",
"settings.openchamber.keyboardShortcuts.action.open_go_to_line.label": "Ir para linha (editor de arquivos)",
"settings.openchamber.keyboardShortcuts.action.open_command_palette.label": "Abrir paleta de comandos",
"settings.openchamber.keyboardShortcuts.action.focus_input.label": "Focar entrada",
@@ -1072,16 +1110,20 @@ export const settingsDict = {
"settings.openchamber.keyboardShortcuts.action.toggle_terminal_expanded.label": "Expandir ou recolher terminal",
"settings.openchamber.keyboardShortcuts.action.add_selection_to_chat.label": "Adicionar seleção ao chat",
"settings.openchamber.keyboardShortcuts.action.toggle_sidebar.label": "Mostrar ou ocultar barra lateral",
"settings.openchamber.keyboardShortcuts.action.toggle_right_sidebar.label": 'Alternar painel de contexto',
"settings.openchamber.keyboardShortcuts.action.open_right_sidebar_git.label": 'Abrir superfície do Git',
"settings.openchamber.keyboardShortcuts.action.open_right_sidebar_files.label": 'Abrir superfície de arquivos',
"settings.openchamber.keyboardShortcuts.action.switch_session_tab.label": "Alternar aba de sessão",
"settings.openchamber.keyboardShortcuts.action.switch_session_tab.suffix": " + 1…9",
"settings.openchamber.keyboardShortcuts.action.switch_context_surface.label": "Alternar superfície do painel de contexto",
"settings.openchamber.keyboardShortcuts.action.switch_context_surface.suffix": " + 1…0",
"settings.openchamber.keyboardShortcuts.action.new_chat.label": "Nova sessão",
"settings.openchamber.keyboardShortcuts.action.switch_session_previous.label": "Sessão anterior",
"settings.openchamber.keyboardShortcuts.action.switch_session_next.label": "Próxima sessão",
"settings.openchamber.keyboardShortcuts.action.rename_current_session.label": "Renomear sessão atual",
"settings.openchamber.keyboardShortcuts.action.toggle_permission_auto_accept.label": "Alternar aprovação automática",
"settings.openchamber.keyboardShortcuts.action.close_session_tab.label": "Fechar aba da sessão",
"settings.openchamber.keyboardShortcuts.action.new_chat_worktree.label": "Novo rascunho de worktree",
"settings.openchamber.keyboardShortcuts.action.new_mini_chat.label": "Nova janela Mini Chat",
"settings.openchamber.keyboardShortcuts.action.open_help.label": "Abrir atalhos de teclado",
"settings.openchamber.keyboardShortcuts.action.toggle_context_plan.label": "Alternar painel de plano de contexto",
"settings.openchamber.keyboardShortcuts.action.toggle_services_menu.label": "Mostrar ou ocultar menu de serviços",
"settings.openchamber.keyboardShortcuts.action.cycle_services_tab.label": "Alternar aba de serviços",
"settings.openchamber.keyboardShortcuts.action.cycle_theme.label": "Alternar tema",
"settings.openchamber.keyboardShortcuts.action.cycle_agent.label": "Alternar agente",
"settings.openchamber.keyboardShortcuts.action.cycle_favorite_model_forward.label": "Próximo modelo favorito",
@@ -1090,15 +1132,39 @@ export const settingsDict = {
"settings.openchamber.keyboardShortcuts.action.expand_input.label": "Expandir entrada",
"settings.openchamber.keyboardShortcuts.action.open_timeline_dialog.label": "Abrir linha do tempo da conversa",
"settings.openchamber.keyboardShortcuts.action.toggle_prompt_navigator.label": "Mostrar ou ocultar navegador de prompts",
"settings.openchamber.keyboardShortcuts.warning.contextualPrefix": "Esta sequência compartilha um prefixo contextual com {action}. Quando esse contexto está ativo, essa ação tem prioridade.",
"settings.openchamber.keyboardShortcuts.category.session": "Controles de sessão",
"settings.openchamber.keyboardShortcuts.category.models": "Modelos e agentes",
"settings.openchamber.keyboardShortcuts.category.panels": "Painéis e ferramentas",
"settings.openchamber.keyboardShortcuts.category.navigation": "Navegação",
"settings.openchamber.keyboardShortcuts.category.application": "Aplicação",
"settings.openchamber.keyboardShortcuts.actions.edit": "Editar",
"settings.openchamber.keyboardShortcuts.actions.confirm": "Confirmar",
"settings.openchamber.keyboardShortcuts.dialog.title": "Editar {action}",
"settings.openchamber.keyboardShortcuts.dialog.instructions": "Pressione até duas combinações de teclas, com no máximo três teclas em cada uma. Após a primeira, aguarde até 3 segundos por uma segunda combinação. Use Confirmar para aplicar ou Cancelar para descartar. Backspace remove a última.",
"settings.openchamber.keyboardShortcuts.dialog.firstChord": "Primeira combinação",
"settings.openchamber.keyboardShortcuts.dialog.secondChord": "Segunda combinação",
"settings.openchamber.keyboardShortcuts.dialog.recording": "Pressione as teclas…",
"settings.openchamber.keyboardShortcuts.unassigned": "Não atribuído",
"settings.openchamber.keyboardShortcuts.error.prefixConflict": "Isto entra em conflito com a sequência usada por {action}. Escolha outra combinação.",
"settings.openchamber.keyboardShortcuts.error.exactConflict": "Esta combinação já é usada por {action}.",
"settings.openchamber.keyboardShortcuts.error.internalConflict": "Esta combinação entra em conflito com um atalho integrado, que não pode ser substituído.",
"settings.openchamber.keyboardShortcuts.action.open_draft_project_picker.label": "Abrir seletor de projeto do rascunho",
"settings.openchamber.keyboardShortcuts.action.open_draft_worktree_picker.label": "Abrir seletor de worktree do rascunho",
"settings.openchamber.keyboardShortcuts.action.open_session_list.label": "Abrir sessões recentes",
"settings.openchamber.keyboardShortcuts.action.toggle_dictation.label": "Entrada por voz",
"settings.projects.sidebar.total": "Total {count}",
"settings.projects.sidebar.actions.addProject": "Adicionar projeto",
"settings.projects.page.empty.noProjects": "Não há projetos disponíveis.",
"settings.projects.page.title.default": "Configurações do projeto",
"settings.projects.page.section.worktree": "Worktree",
"settings.projects.page.field.projectName": "Nome do projeto",
"settings.projects.page.field.projectModel": "Modelo do projeto",
"settings.projects.page.field.projectThinking": "Raciocínio do projeto",
"settings.projects.page.section.chatDefaults": "Padrões para novos chats",
"settings.projects.page.section.chatDefaultsDescription": "Usados ao iniciar um novo chat neste projeto. Sem definição, valem os padrões globais. O raciocínio só aparece em modelos que oferecem níveis.",
"settings.projects.page.field.projectNamePlaceholder": "Nome do projeto",
"settings.projects.page.field.defaultModel": "Modelo padrão para novos chats",
"settings.projects.page.field.defaultModelDescription": "Usado ao iniciar um novo chat neste projeto. Se não definido, usa os padrões globais.",
"settings.projects.page.option.thinkingDefault": "Padrão do modelo",
"settings.projects.page.field.accentColor": "Cor de destaque",
"settings.projects.page.field.projectIcon": "Ícone do projeto",
"settings.projects.page.field.projectIconBackgroundAria": "Cor de fundo do ícone do projeto",
@@ -1132,15 +1198,15 @@ export const settingsDict = {
"settings.usage.sidebar.field.displayModePlaceholder": "Modo de visualização",
"settings.usage.sidebar.field.displayModeUsage": "Uso",
"settings.usage.sidebar.field.displayModeRemaining": "Cota restante",
"settings.usage.sidebar.field.showPredictions": "Mostrar previsões",
"settings.usage.sidebar.status.notSet": "Não definido",
"settings.usage.page.empty.selectProvider": "Selecione um provedor para ver detalhes de uso.",
"settings.usage.page.header.providerUsage": "Uso de {provider}",
"settings.usage.page.header.refreshing": "Atualizando uso...",
"settings.usage.page.header.lastUpdated": "Última atualização: {time}",
"settings.usage.page.options.showInHeaderAria": "Mostrar em menu de cabeçalho",
"settings.usage.page.options.showInHeader": "Mostrar no menu do cabeçalho",
"settings.usage.page.options.showInHeaderTooltip": "Quando habilitado, o uso deste provedor ficará visível no menu de acesso rápido do cabeçalho do aplicativo.",
"settings.usage.page.header.lastUpdatedWithPlan": "Plano: {plan} · Última atualização: {time}",
"settings.usage.page.options.showInWorkStatusAria": "Mostrar no painel de status do trabalho",
"settings.usage.page.options.showInWorkStatus": "Mostrar no painel de status do trabalho",
"settings.usage.page.options.showInWorkStatusTooltip": "Quando habilitado, o uso deste provedor ficará visível no painel de status do trabalho.",
"settings.usage.page.state.noData": "Não há dados de uso disponíveis ainda.",
"settings.usage.page.state.refreshFailedTitle": "Não foi possível atualizar os dados de uso",
"settings.usage.page.state.providerNotConfiguredTitle": "Provedor não configurado",
@@ -1167,8 +1233,8 @@ export const settingsDict = {
"settings.remoteInstances.page.section.actionsDescription": "Conecte, reconecte, veja logs ou remova esta conexão.",
"settings.remoteInstances.page.section.remoteServer": "OpenChamber na máquina remota",
"settings.remoteInstances.page.section.remoteServerDescription": "Escolha como o OpenChamber deve rodar depois que o SSH conectar.",
"settings.remoteInstances.page.section.mainTunnel": "Acesso local",
"settings.remoteInstances.page.section.mainTunnelDescription": "Escolha o endereço local usado para abrir este servidor OpenChamber remoto.",
"settings.remoteInstances.page.section.mainTunnel": "Acesso a partir deste computador",
"settings.remoteInstances.page.section.mainTunnelDescription": "O OpenChamber roda na máquina remota. Estas opções controlam apenas o endereço neste computador que leva até ela pelo túnel SSH.",
"settings.remoteInstances.page.section.authentication": "Autenticação",
"settings.remoteInstances.page.section.authenticationDescription": "Credenciais opcionais para SSH e para a interface de usuário do OpenChamber remoto.",
"settings.remoteInstances.page.section.portForwards": "Redeirecciones de porta",
@@ -1181,8 +1247,6 @@ export const settingsDict = {
"settings.remoteInstances.page.field.installMethod": "Método de instalação",
"settings.remoteInstances.page.field.installMethodHint": "Como o OpenChamber deve ser colocado na máquina remota quando este app o inicia para você.",
"settings.remoteInstances.page.field.selectInstallMethodPlaceholder": "Selecionar método de instalação",
"settings.remoteInstances.page.field.installMethodDownloadRelease": "Baixar versão",
"settings.remoteInstances.page.field.installMethodUploadBundle": "Enviar paquete",
"settings.remoteInstances.page.field.selectBindHostPlaceholder": "Selecionar host de link",
"settings.remoteInstances.page.field.sshPasswordOptional": "Senha SSH (opcional)",
"settings.remoteInstances.page.field.sshPasswordPlaceholder": "Introducir senha SSH",
@@ -1206,7 +1270,44 @@ export const settingsDict = {
"settings.remoteInstances.page.actions.enableForwardAria": "Ativar redeirección",
"settings.remoteInstances.page.actions.openLocal": "Abrir local",
"settings.remoteInstances.page.actions.addForward": "Adicionar redeirección",
"settings.remoteInstances.page.import.sectionTitle": "Hosts SSH salvos",
"settings.remoteInstances.page.addDialog.description": "Escolha um host da sua configuração SSH ou digite a conexão você mesmo.",
"settings.remoteInstances.page.addDialog.sourceLabel": "De onde vem a conexão",
"settings.remoteInstances.page.addDialog.tab.saved": "Da configuração SSH",
"settings.remoteInstances.page.addDialog.tab.manual": "Digitar eu mesmo",
"settings.remoteInstances.page.addDialog.searchPlaceholder": "Buscar hosts",
"settings.remoteInstances.page.addDialog.emptySaved": "Nenhum host encontrado na sua configuração SSH. Digite a conexão você mesmo.",
"settings.remoteInstances.page.addDialog.searchEmpty": "Nenhum host corresponde a esta busca.",
"settings.remoteInstances.page.addDialog.use": "Usar",
"settings.remoteInstances.page.state.notConnected": "Sem conexão",
"settings.remoteInstances.page.state.connecting": "Conectando",
"settings.remoteInstances.page.state.ready": "Conectado",
"settings.remoteInstances.page.state.problem": "Precisa de atenção",
"settings.remoteInstances.page.section.advanced": "Configurações avançadas",
"settings.remoteInstances.page.section.advancedHint": "Portas, método de instalação, senhas e encaminhamentos extras. Os padrões servem para quase todas as conexões.",
"settings.remoteInstances.page.field.installMethodAuto": "Automático",
"settings.remoteInstances.page.error.hint.noRuntime": "A máquina remota não tem bun nem npm. Instale um deles lá ou mude esta conexão para “Já em execução”.",
"settings.remoteInstances.page.error.hint.noOpencode": "A CLI do opencode não está instalada na máquina remota. Instale-a lá (veja opencode.ai) e conecte novamente.",
"settings.remoteInstances.page.error.action.setUiPassword": "Definir senha da interface",
"settings.remoteInstances.page.error.action.pickRandomPort": "Usar outra porta local",
"settings.remoteInstances.page.error.action.setRemotePort": "Definir a porta remota",
"settings.remoteInstances.page.validation.externalPortRequired": "Defina primeiro uma porta remota. No modo “Já em execução”, o OpenChamber precisa saber em qual porta o servidor escuta.",
"settings.remoteInstances.page.empty.noInstances": "Ainda não há conexões SSH.",
"settings.remoteInstances.page.field.uiPasswordRequired": "Senha da interface (obrigatória)",
"settings.remoteInstances.page.field.uiPasswordMissingForLan": "Obrigatória enquanto o servidor remoto estiver acessível na rede dele.",
"settings.remoteInstances.page.field.remoteLanAccess": "Acessível na rede remota",
"settings.remoteInstances.page.field.remoteLanAccessHint": "Permitir que outros dispositivos da rede da máquina remota abram este OpenChamber diretamente, sem o túnel SSH. É obrigatória uma senha da interface.",
"settings.remoteInstances.page.field.remoteLanAccessWarning": "Qualquer pessoa nessa rede alcança o OpenChamber remoto. Só a senha da interface abaixo o protege.",
"settings.remoteInstances.page.validation.remoteLanNeedsPassword": "Defina primeiro uma senha da interface. Sem ela, o OpenChamber remoto ficaria aberto a todos os dispositivos daquela rede.",
"settings.remoteInstances.page.field.bindHostOption.loopback": "Somente este computador (127.0.0.1)",
"settings.remoteInstances.page.field.bindHostOption.localhost": "Somente este computador (localhost)",
"settings.remoteInstances.page.field.bindHostOption.lan": "Qualquer dispositivo da minha rede (0.0.0.0)",
"settings.remoteInstances.page.field.sshPasswordHint": "Só é necessária quando este host pede senha em vez de aceitar uma chave SSH.",
"settings.remoteInstances.page.field.uiPasswordHintManaged": "Senha que protegerá a interface remota do OpenChamber. O OpenChamber a define no servidor que inicia para você.",
"settings.remoteInstances.page.field.uiPasswordHintExternal": "Senha do servidor OpenChamber que já está em execução na máquina remota, usada para entrar nele.",
"settings.remoteInstances.page.tunnelPreview.caption": "Esta conexão encaminha:",
"settings.remoteInstances.page.empty.noInstancesWithOneImport": "Ainda não há conexões SSH. Há 1 host disponível para importar da sua configuração SSH.",
"settings.remoteInstances.page.empty.noInstancesWithImports": "Ainda não há conexões SSH. Há {count} hosts disponíveis para importar da sua configuração SSH.",
"settings.remoteInstances.page.state.loadingInstances": "Carregando conexões...",
"settings.remoteInstances.page.import.loading": "Carregando hosts SSH...",
"settings.remoteInstances.page.import.noneFound": "Nenhum host SSH encontrado.",
"settings.remoteInstances.page.import.noneAvailable": "Não há hosts SSH disponíveis para importar.",
@@ -1304,13 +1405,18 @@ export const settingsDict = {
"settings.providers.page.custom.title": "Provedor personalizado",
"settings.providers.page.custom.editTitle": "Editar provedor personalizado",
"settings.providers.page.custom.description": "Adicione um provedor compatível com OpenAI com URL base, credenciais e lista de modelos. Salvo na configuração do OpenCode para uso no chat como qualquer outro provedor.",
"settings.providers.page.custom.description": "Adicione um provedor com URL base, credenciais, lista de modelos e protocolo de API compatível. Ele é salvo na configuração do OpenCode para uso no chat.",
"settings.providers.page.custom.field.providerID.label": "ID do provedor",
"settings.providers.page.custom.field.providerID.placeholder": "meu-provedor",
"settings.providers.page.custom.field.providerID.info": "Letras minúsculas, números, hífens e sublinhados. Usado como ID de provedor do OpenCode.",
"settings.providers.page.custom.field.name.label": "Nome de exibição",
"settings.providers.page.custom.field.name.placeholder": "Meu provedor",
"settings.providers.page.custom.field.name.info": "Mostrado nos seletores de provedor e modelo.",
"settings.providers.page.custom.field.protocol.label": "Protocolo de API",
"settings.providers.page.custom.field.protocol.info": "Escolha o formato de solicitação implementado por esta API.",
"settings.providers.page.custom.field.protocol.openaiChat": "OpenAI Chat Completions",
"settings.providers.page.custom.field.protocol.openaiResponses": "OpenAI Responses",
"settings.providers.page.custom.field.protocol.anthropicMessages": "Anthropic Messages",
"settings.providers.page.custom.field.baseURL.label": "URL base",
"settings.providers.page.custom.field.baseURL.placeholder": "https://api.example.com/v1",
"settings.providers.page.custom.field.baseURL.info": "URL base da API compatível com OpenAI. Deve começar com http:// ou https://.",
@@ -1359,6 +1465,17 @@ export const settingsDict = {
"settings.providers.page.auth.apiKeyPlaceholder": "sk-...",
"settings.providers.page.auth.oauthMethodFallback": "Método OAuth {index}",
"settings.providers.page.auth.pasteAuthorizationCodePlaceholder": "Colar código de autorização",
"settings.providers.page.auth.oauth.starting": "Iniciando a autorização…",
"settings.providers.page.auth.oauth.waiting": "Aguardando a autorização…",
"settings.providers.page.auth.oauth.waitingHint": "Conclua o login no navegador. Mantenha esta página aberta — a conexão será concluída sozinha.",
"settings.providers.page.auth.oauth.codeHint": "Copie o código de autorização do navegador e cole aqui.",
"settings.providers.page.auth.oauth.deviceCodeLabel": "Código do dispositivo",
"settings.providers.page.auth.oauth.linkLabel": "Link de autorização",
"settings.providers.page.auth.oauth.promptRequired": "Preencha “{field}” para continuar",
"settings.providers.page.auth.oauth.error.sessionExpired": "A solicitação de autorização expirou. Conecte novamente para reiniciá-la.",
"settings.providers.page.auth.oauth.error.codeRequired": "Este provedor precisa do código de autorização do seu navegador.",
"settings.providers.page.auth.oauth.error.declined": "A autorização foi recusada ou não foi concluída.",
"settings.providers.page.auth.oauth.error.invalidInput": "Os dados informados foram recusados.",
"settings.providers.page.auth.connected": "Conectado",
"settings.providers.page.auth.incomplete": "Credenciais ausentes",
"settings.providers.page.auth.incompleteHint": "· Adicione uma chave de API ou {env:VAR} antes de usar este provedor no chat",
@@ -1391,6 +1508,9 @@ export const settingsDict = {
"settings.providers.page.actions.open": "Abrir",
"settings.providers.page.actions.copy": "Copiar",
"settings.providers.page.actions.complete": "Completar",
"settings.providers.page.actions.continue": "Continuar",
"settings.providers.page.actions.cancel": "Cancelar",
"settings.providers.page.actions.tryAgain": "Tentar novamente",
"settings.providers.page.actions.hide": "Ocultar",
"settings.providers.page.actions.reconnect": "Reconectar",
"settings.providers.page.actions.edit": "Editar",
@@ -1406,7 +1526,6 @@ export const settingsDict = {
"settings.providers.page.toast.apiKeySaved": "Chave API salva",
"settings.providers.page.toast.oauthStartFailed": "Não foi possível iniciar o fluxo OAuth",
"settings.providers.page.toast.oauthDetailsMissing": "Não se devolvieron detalhes de OAuth",
"settings.providers.page.toast.completeOAuthInBrowser": "Complete o fluxo OAuth no navegador",
"settings.providers.page.toast.oauthCompleteFailed": "Não foi possível concluir o fluxo OAuth",
"settings.providers.page.toast.oauthCompleted": "Conexão OAuth concluída",
"settings.providers.page.toast.oauthLinkCopied": "Link de OAuth copiado",
@@ -1428,6 +1547,8 @@ export const settingsDict = {
"settings.mcp.page.status.label.failed": "Falhou",
"settings.mcp.page.status.label.needsAuth": "Precisa de autenticação",
"settings.mcp.page.status.label.needsRegistration": "Precisa de registro",
"settings.mcp.page.status.label.awaitingRestart": "Aguardando reinício",
"settings.mcp.page.status.description.awaitingRestart": "Este servidor foi salvo, mas ainda não aplicado. Use Apply & Restart para carregá-lo no OpenCode — depois disso, conexão e autorização ficam disponíveis.",
"settings.mcp.page.status.description.connected": "Conectado e pronto para que OpenCode descubra ferramentas e recursos.",
"settings.mcp.page.status.description.failedDefault": "OpenCode não conseguiu acessar este servidor MCP.",
"settings.mcp.page.status.description.needsAuth": "Este servidor MCP remoto exige autorização antes de poder se conectar.",
@@ -1792,9 +1913,6 @@ export const settingsDict = {
"settings.voice.page.field.ttsInputModeSummarized": "resumido",
"settings.openchamber.visual.section.colorMode": "Modo de cor",
"settings.openchamber.visual.section.colorModeAndTheme": "Modo de cor e tema",
"settings.openchamber.visual.section.mobileLayout": "Layout móvel",
"settings.openchamber.visual.option.mobileLayout.default": "Anterior",
"settings.openchamber.visual.option.mobileLayout.new": "Novo",
"settings.openchamber.visual.section.localization": "Localização",
"settings.openchamber.visual.section.spacingAndLayout": "Espaçamento e layout",
"settings.openchamber.visual.section.densityAndType": "Densidade e tipografia",
@@ -1811,6 +1929,10 @@ export const settingsDict = {
"settings.openchamber.visual.section.showToolsOpenedByDefault": "Mostrar ferramentas abertas por padrão",
"settings.openchamber.visual.section.sessionAssistance": "Assistência da sessão",
"settings.openchamber.visual.section.reasoning": "Raciocínio",
"settings.openchamber.visual.section.streaming": "Streaming",
"settings.openchamber.visual.field.streamingAutoFollow": "Seguir o novo conteúdo durante o streaming",
"settings.openchamber.visual.field.streamingAutoFollowAria": "Seguir automaticamente o novo conteúdo enquanto uma resposta é transmitida",
"settings.openchamber.visual.field.streamingAutoFollowInfo": "Enquanto uma resposta chega, a visualização acompanha o conteúdo mais recente. Desative para manter a visualização parada e rolar manualmente; enviar uma mensagem do meio da conversa também deixará a visualização onde está.",
"settings.openchamber.visual.section.messageAppearance": "Aparência das mensagens",
"settings.openchamber.visual.section.toolsAndFiles": "Ferramentas e arquivos",
"settings.openchamber.visual.section.composer": "Campo de mensagem",
@@ -1831,8 +1953,6 @@ export const settingsDict = {
"settings.openchamber.visual.field.selectTimeFormatAria": "Selecionar formato de hora",
"settings.openchamber.visual.field.selectWeekStartAria": "Selecionar início da semana",
"settings.openchamber.visual.actions.reloadThemes": "Recarregar temas",
"settings.openchamber.visual.field.macVibrancy": "Transparência da janela",
"settings.openchamber.visual.field.macVibrancyHint": "Usa o desfoque nativo do macOS (vibrancy) atrás da barra lateral. Desative para superfícies totalmente sólidas e opacas.",
"settings.openchamber.visual.field.dockBadge": "Selo no Dock",
"settings.openchamber.visual.field.dockBadgeHint": "Mostra no ícone do Dock do macOS o número de conversas com atividade não vista.",
"settings.openchamber.visual.actions.saveAndRestart": "Salvar e reiniciar",
@@ -1879,6 +1999,10 @@ export const settingsDict = {
"settings.openchamber.visual.actions.resetInputBarOffsetAria": "Redefinir deslocamento da barra de entrada",
"settings.openchamber.visual.field.terminalQuickKeysAria": "Teclas rápidas do terminal",
"settings.openchamber.visual.field.terminalQuickKeys": "Teclas rápidas do terminal",
"settings.openchamber.visual.field.sessionTabsGroup": "Abas de sessão",
"settings.openchamber.visual.field.sessionTabs": "Mostrar sessões como abas no cabeçalho",
"settings.openchamber.visual.field.sessionTabsAria": "Alternar abas de sessão no cabeçalho",
"settings.openchamber.visual.field.sessionTabsInfo": "As sessões abertas se alinham como abas no cabeçalho. Desativado, o cabeçalho volta a mostrar apenas o título da sessão.",
"settings.openchamber.visual.field.terminalQuickKeysTooltip": "Mostrar Esc, Ctrl e flechas na vista do terminal",
"settings.openchamber.visual.field.fileEditorKeymap": "Mapa de teclas do editor de arquivos",
"settings.openchamber.visual.option.fileEditorKeymap.default": "Padrão",
@@ -1911,8 +2035,6 @@ export const settingsDict = {
"settings.openchamber.visual.field.stickyUserHeader": "Cabeçalho do usuário fixo",
"settings.openchamber.visual.field.promptNavigatorEnabledAria": "Navegador de prompts",
"settings.openchamber.visual.field.promptNavigatorEnabled": "Navegador de prompts",
"settings.openchamber.visual.field.expandedEditorToolbarAria": "Mostrar sempre a barra de ferramentas do editor",
"settings.openchamber.visual.field.expandedEditorToolbar": "Mostrar sempre a barra de ferramentas do editor (ancorada sob as abas)",
"settings.openchamber.visual.field.autoSaveEnabledAria": "Salvamento automático de arquivos",
"settings.openchamber.visual.field.autoSaveEnabled": "Salvamento automático de arquivos",
"settings.openchamber.visual.field.autoSaveEnabledInfo": "Salva automaticamente as edições do arquivo depois que você parar de digitar. Desative para exigir salvamento manual.",
@@ -2105,4 +2227,5 @@ export const settingsDict = {
"settings.openchamber.visual.field.followUpBehaviorDescription": "Choose what happens when you press Enter on a follow-up message while the agent is still responding.",
"settings.openchamber.visual.option.followUpBehavior.steer.label": "Steer",
"settings.openchamber.visual.option.followUpBehavior.queue.label": "Queue",
...thirdPartyIntegrationI18n['pt-BR'],
} as const;
+377 -39
View File
@@ -6,6 +6,19 @@ export const dict: Record<I18nKey, string> = {
'terminalView.actions.attachSelection': 'Anexar saída selecionada',
'terminalView.actions.restart': 'Reiniciar terminal',
'chat.message.terminalContext': '{terminal}, linhas {start}-{end}',
'chat.message.context.codeComment': 'Comentário em {file}, linhas {start}-{end}',
'chat.message.context.codeCommentLine': 'Comentário em {file}, linha {line}',
'chat.message.context.chatQuote': 'Citação de uma mensagem anterior',
'chat.message.context.fileQuote': 'Seleção de {file}',
'chat.chatInput.chatQuoteContext': 'Citações do chat',
'chat.chatInput.chatQuoteContextRemove': 'Remover citações do chat',
'chat.chatInput.contextPreview.selectedLabel': 'Texto selecionado',
'chat.chatInput.contextPreview.commentLabel': 'Comentário do usuário',
'chat.chatInput.contextPreview.edit': 'Editar comentário',
'chat.chatInput.contextPreview.remove': 'Remover',
'chat.message.context.browserAnnotation': 'Anotação do navegador ({page})',
'chat.message.context.prComment': 'Comentário de PR do GitHub ({label})',
'chat.message.context.prCheck': 'Verificação de PR do GitHub com falha ({label})',
'chat.chatInput.terminalContext': '{terminal}, linhas {start}-{end}',
'chat.chatInput.terminalContextRemove': 'Remover contexto do terminal',
'chat.chatInput.prCommentContext': 'Comentários do PR',
@@ -25,6 +38,7 @@ export const dict: Record<I18nKey, string> = {
"common.language.korean": "Coreano",
"common.language.polish": "Polonês",
"common.language.japanese": "Japonês",
"common.language.turkish": "Turco",
"common.revealPath.finder": "Mostrar no Finder",
"common.revealPath.fileExplorer": "Abrir no File Explorer",
"common.revealPath.fileManager": "Abrir no gerenciador de arquivos",
@@ -86,6 +100,11 @@ export const dict: Record<I18nKey, string> = {
"mobile.instances.label.label": "Nome",
"mobile.instances.label.placeholder": "Nome de exibição opcional",
"mobile.instances.saveNew": "Salvar instância",
"mobile.connectionDebug.title": "Registro de conexão",
"mobile.connectionDebug.copy": "Copiar",
"mobile.connectionDebug.copied": "Copiado",
"mobile.connectionDebug.close": "Fechar",
"mobile.connectionDebug.empty": "Ainda não há eventos de conexão.",
"mobile.instances.status.connectedDirect": "Conectado · Rede local",
"mobile.instances.status.connectedRelay": "Conectado · Relay privado",
"mobile.instances.saveEdit": "Salvar alterações",
@@ -112,6 +131,7 @@ export const dict: Record<I18nKey, string> = {
"mobile.sessions.section.worktrees": "Worktrees",
"mobile.sessions.section.otherProjects": "Trocar de projeto",
"mobile.sessions.section.projects": "Projetos",
"mobile.sessions.section.chats": "Conversas",
"mobile.sessions.empty.noProjectsTitle": "Sem projetos",
"mobile.sessions.empty.noProjectsDescription": "Adicione um projeto para começar a conversar com seu código.",
"mobile.sessions.empty.noSessionsTitle": "Sem sessões",
@@ -232,8 +252,10 @@ export const dict: Record<I18nKey, string> = {
"sessions.scheduledTasks.dialog.toast.deleted": "Tarefa agendada excluída",
"sessions.scheduledTasks.dialog.toast.deleteFailed": "Não foi possível excluir a tarefa",
"sessions.scheduledTasks.dialog.toast.started": "Tarefa iniciada",
"sessions.scheduledTasks.dialog.toast.startedPersistWarning": "A tarefa foi iniciada, mas o status não pôde ser salvo. Ela pode continuar aparecendo como em execução até a próxima execução bem-sucedida.",
"sessions.scheduledTasks.dialog.toast.runFailed": "Não foi possível executar a tarefa",
"sessions.scheduledTasks.dialog.confirm.deleteTask": "Excluir tarefa agendada \"{taskName}\"?",
'sessions.scheduledTasks.dialog.confirm.deleteLoopFile': 'Excluir a tarefa de loop “{taskName}” e seu arquivo Markdown?',
"sessions.scheduledTasks.dialog.schedule.daily": "Todos os dias {time}",
"sessions.scheduledTasks.dialog.schedule.dailyWithTimezone": "Todos os dias {time} ({timezone})",
"sessions.scheduledTasks.dialog.schedule.weekly": "Toda semana {days} {time}",
@@ -269,6 +291,9 @@ export const dict: Record<I18nKey, string> = {
"sessions.scheduledTasks.dialog.taskToggle.pauseAria": "Pausar {taskName}",
"sessions.scheduledTasks.dialog.taskToggle.enabled": "Ativado",
"sessions.scheduledTasks.dialog.taskToggle.paused": "Pausado",
'sessions.scheduledTasks.dialog.loopFile.note': 'Gerenciada pelo arquivo de loop {file}',
'sessions.scheduledTasks.dialog.loopFile.toggleDisabled': 'A ativação é controlada pelo arquivo de loop; defina enabled no frontmatter Markdown',
'sessions.scheduledTasks.dialog.loopFile.actionsDisabled': 'Tarefas de loop são configuradas no arquivo Markdown .agents/loops',
"sessions.scheduledTasks.editor.title.edit": "Editar tarefa agendada",
"sessions.scheduledTasks.editor.title.new": "Nova tarefa agendada",
"sessions.scheduledTasks.editor.description": "Configure uma tarefa do lado do servidor que cria uma nova sessão e envia um prompt.",
@@ -361,7 +386,7 @@ export const dict: Record<I18nKey, string> = {
"multirun.launcher.attachments.attach": "Anexar",
"multirun.launcher.attachments.tooltip": "Arquivos idênticos enviados a todas as execuções",
"multirun.launcher.models.label": "Modelos",
"multirun.launcher.models.info": "Selecione 2-{max} modelos. O mesmo modelo pode ser adicionado várias vezes.",
"multirun.launcher.models.info": "Selecione 2 ou mais modelos. O mesmo modelo pode ser adicionado várias vezes.",
"multirun.launcher.toast.fileTooLarge": "O arquivo \"{fileName}\" é grande demais (máximo 10MB)",
"multirun.launcher.toast.attachFailed": "Não foi possível anexar \"{fileName}\"",
"multirun.launcher.toast.attachedSingle": "Arquivo anexado ({count})",
@@ -428,9 +453,16 @@ export const dict: Record<I18nKey, string> = {
"sessions.sidebar.empty.noMatches.title": "Não há sessões coincidentes",
"sessions.sidebar.empty.noMatches.description": "Tente com outro título, branch, pasta ou caminho.",
"sessions.sidebar.activity.recentTitle": "recente",
"sessions.sidebar.activity.chatsTitle": "conversas",
"sessions.sidebar.activity.chatsEmpty": "Ainda não há conversas.",
"chat.chatInput.chooseProject": "Escolher projeto",
"sessions.archivePage.allDirectories": "Todos os diretórios",
"sessions.sidebar.header.displayMode.stickyHeaders": "Cabeçalhos de projeto fixos",
"sessions.sidebar.header.grouping.label": "Agrupar sessões",
"sessions.sidebar.header.projectDisplay.label": "Exibir projetos",
"sessions.sidebar.header.projectDisplay.all": "Todos os projetos",
"sessions.sidebar.header.projectDisplay.single": "Um projeto",
"sessions.sidebar.project.selectAria": "Selecionar projeto, atualmente {project}",
"sessions.sidebar.header.grouping.byWorktree": "Por worktree",
"sessions.sidebar.header.grouping.flat": "Lista plana",
"sessions.sidebar.project.actions.manageWorktrees": "Gerenciar worktrees",
@@ -452,6 +484,10 @@ export const dict: Record<I18nKey, string> = {
"sessions.archivePage.deleteSessionAria": "Excluir {title}",
"sessions.archivePage.restoreSessionAria": "Restaurar {title}",
"sessions.switcher.openAria": "Abrir seletor de sessões",
"header.sessionTabs.stripAria": "Sessões abertas",
"header.sessionTabs.tabMenuAria": "Ações da aba de sessão",
"header.sessionTabs.closeTab": "Fechar aba",
"header.sessionTabs.closeOtherTabs": "Fechar outras abas",
"sessions.switcher.empty": "Nenhuma sessão recente",
"sessions.switcher.draftTitle": "Nova sessão",
"sessions.sidebar.updateCheck.errorTitle": "Não foi possível verificar atualizações",
@@ -503,11 +539,33 @@ export const dict: Record<I18nKey, string> = {
"sessions.sidebar.session.menu.unshare": "Parar de compartilhar",
"sessions.sidebar.session.menu.exportMarkdown": "Exportar Markdown",
"sessions.sidebar.session.menu.moveToWorktree": "Mover para um novo worktree",
"sessions.sidebar.session.menu.moveToWorktreeTargets": "Mover para worktree",
"sessions.sidebar.session.menu.newWorktree": "Novo worktree...",
"sessions.sidebar.session.moveToWorktree.success": "Sessão movida para um novo worktree",
"sessions.sidebar.session.moveToWorktree.failed": "Não foi possível mover a sessão para um novo worktree",
"sessions.sidebar.session.moveToWorktree.tooltip": "Cria um novo worktree a partir da branch atual, transfere alterações não commitadas e move esta sessão e suas subsessões para lá.",
"sessions.sidebar.session.moveToWorktree.main": "Worktree principal",
"sessions.sidebar.session.moveToWorktree.refreshing": "Atualizando worktrees...",
"sessions.sidebar.session.moveToWorktree.loadFailed": "Não foi possível carregar os worktrees",
"sessions.sidebar.session.moveToWorktree.current": "Worktree atual",
"sessions.sidebar.session.moveToWorktree.existingSuccess": "Sessão movida para o worktree",
"sessions.sidebar.session.moveToWorktree.existingFailed": "Não foi possível mover a sessão para o worktree",
"sessions.sidebar.session.moveToWorktree.tooltipTargets": "Mostra os worktrees existentes e a opção de criar um novo para esta sessão.",
"sessions.sidebar.session.moveToWorktree.tooltip": "Cria um novo worktree a partir da branch atual e move esta sessão e suas subsessões para lá. Quando a fonte tem alterações não commitadas, você escolhe se as transfere.",
"sessions.sidebar.session.moveToWorktree.tooltipBusy": "Disponível quando a sessão está ociosa. Interrompa a atividade atual ou aguarde sua conclusão.",
"sessions.sidebar.session.moveToWorktree.tooltipMoving": "Esta sessão já está sendo movida para um novo worktree.",
"sessions.sidebar.session.moveToWorktree.confirm.title": "A fonte tem alterações não commitadas",
"sessions.sidebar.session.moveToWorktree.confirm.changedFiles": "Arquivos alterados neste worktree: {count}.",
"sessions.sidebar.session.moveToWorktree.confirm.ownership": "O OpenCode rastreia essas alterações por diretório, não por sessão.",
"sessions.sidebar.session.moveToWorktree.confirm.sessionOnlyHelp": "Move esta sessão e suas subsessões deixando todos os arquivos da fonte inalterados.",
"sessions.sidebar.session.moveToWorktree.confirm.allChangesHelp": "Transfere as alterações no diretório da sessão. Arquivos não adicionados ao stage e não rastreados saem da fonte após o sucesso.",
"sessions.sidebar.session.moveToWorktree.confirm.stagedWarning": "Alterações já no stage permanecem na fonte e são copiadas para o destino.",
"sessions.sidebar.session.moveToWorktree.confirm.baseWarning": "A transferência pode falhar quando o destino usa uma base do Git diferente.",
"sessions.sidebar.session.moveToWorktree.confirm.sessionOnly": "Mover apenas a sessão",
"sessions.sidebar.session.moveToWorktree.confirm.allChanges": "Mover todas as alterações da fonte",
"sessions.sidebar.session.moveToWorktree.confirm.cancel": "Cancelar",
"sessions.sidebar.session.moveToWorktree.sourceVerificationFailed": "As alterações da fonte não puderam ser verificadas. Nenhum worktree ou sessão foi alterado.",
"sessions.sidebar.session.moveToWorktree.applyChangesFailed": "O destino não pôde aceitar as alterações da fonte. A sessão e as alterações da fonte não foram movidas. Tente novamente e escolha Mover apenas a sessão.",
"sessions.sidebar.session.moveToWorktree.changesMayBeInDestination": "A conexão caiu antes de o destino confirmar a movimentação. A sessão pode não ter sido movida, e suas alterações não commitadas podem já estar no worktree de destino. Confira lá antes de tentar de novo.",
"sessions.sidebar.session.menu.runFusion": "Executar fusion",
"sessions.sidebar.session.menu.openInSidePanel": "Abrir no painel lateral",
"sessions.sidebar.session.actions.openInEditor": "Abrir no editor",
@@ -531,6 +589,10 @@ export const dict: Record<I18nKey, string> = {
"sessions.sidebar.session.status.pinned": "Sessão fixada",
"sessions.sidebar.session.status.movingToWorktree": "Movendo a sessão para um novo worktree",
"sessions.sidebar.session.status.permissionRequired": "Permissão obrigatória",
"sessions.sidebar.session.status.questionPendingSingle": "1 pergunta pendente",
"sessions.sidebar.session.status.questionPendingMany": "{count} perguntas pendentes",
"sessions.sidebar.session.status.activeFor": "Ativa há {duration}",
"sessions.sidebar.session.status.lastTurnDuration": "O último turno levou {duration}",
"sessions.sidebar.session.subsessions.collapse": "Recolher subsessões",
"sessions.sidebar.session.subsessions.expand": "Expandir subsessões",
"sessions.sidebar.dialogs.deleteSession.title": "Excluir sessão?",
@@ -984,6 +1046,8 @@ export const dict: Record<I18nKey, string> = {
"gitView.pr.field.draft": "Borrador",
"gitView.pr.field.title": "Título",
"gitView.pr.githubNotConnected": "GitHub não está conectado",
"gitView.pr.history.merged": "A PR #{number} foi mesclada em {base}.",
"gitView.pr.history.closed": "A PR #{number} foi fechada.",
"gitView.pr.loadingDescription": "Carregando descrição...",
"gitView.pr.mergeMethod.merge": "Criar um merge commit",
"gitView.pr.mergeMethod.rebase": "Rebase e merge",
@@ -1100,11 +1164,20 @@ export const dict: Record<I18nKey, string> = {
"contextPanel.mode.context": "Contexto",
"contextPanel.mode.preview": "Prévia",
"contextPanel.mode.browser": "Navegador",
"contextRail.configure.open": "Configurar painéis",
"contextRail.configure.dialogTitle": "Painéis da barra",
"contextRail.configure.dialogDescription": "Escolha quais painéis a barra mostra. Painéis ocultos mantêm seus dados e continuam acessíveis pela paleta de comandos.",
"contextRail.configure.showAll": "Mostrar todos",
"contextRail.configure.noneWarning": "Todos os painéis estão ocultos.",
"contextRail.aria.rail": "Superfícies do painel",
"contextPanel.editorEmpty.title": "Nenhum arquivo aberto",
"contextPanel.editorEmpty.description": "Escolha um arquivo na árvore para começar a editar.",
"contextRail.surface.editor.description": "Editar arquivos do projeto",
"contextRail.surface.git.description": "Commits, branches e pull requests",
"contextRail.surface.git.changesCountAriaSingle": "{label}, {count} arquivo modificado",
"contextRail.surface.git.changesCountAriaPlural": "{label}, {count} arquivos modificados",
"contextRail.surface.git.changesCountTooltipSingle": "{count} arquivo modificado",
"contextRail.surface.git.changesCountTooltipPlural": "{count} arquivos modificados",
"contextRail.surface.terminal.description": "Terminal integrado",
"contextRail.surface.diff.description": "Revisar alterações em andamento",
"contextPanel.mode.walkthrough": "Percurso",
@@ -1144,8 +1217,11 @@ export const dict: Record<I18nKey, string> = {
"walkthrough.toc.moreFiles": "Mais arquivos: {count}",
"walkthrough.toc.uncovered": "Sem cobertura: {count}",
"walkthrough.toc.resize": "Redimensionar a coluna de conteúdo",
"walkthrough.importance.critical": "Crítico",
"walkthrough.importance.critical": "Mudança principal",
"walkthrough.importance.criticalHint": "Este passo conduz o restante da mudança, então leia com atenção. Não é um problema encontrado no seu código.",
"walkthrough.importance.context": "Contexto",
"walkthrough.importance.contextHint": "Uma mudança de apoio, incluída para que o restante faça sentido.",
"walkthrough.help.guide": "Como funcionam os walkthroughs",
"walkthrough.blocked.noModel.title": "Nenhum modelo pequeno disponível",
"walkthrough.blocked.noModel.description": "Entre em um provedor de modelos para gerar uma revisão.",
"walkthrough.blocked.emptyDiff.title": "Nada para revisar",
@@ -1160,22 +1236,77 @@ export const dict: Record<I18nKey, string> = {
"walkthrough.blocked.outputExhausted.descriptionUnknownModel": "O modelo pequeno gastou toda a margem de saída raciocinando e não devolveu nada. Modelos de raciocínio costumam fazer isso em diffs grandes — escolha um modelo que raciocine menos ou revise um escopo menor.",
"walkthrough.blocked.onlyGenerated.title": "Só mudaram arquivos gerados",
"walkthrough.blocked.onlyGenerated.description": "Todas as mudanças são arquivos de lock ou outra saída gerada por ferramentas, que a revisão ignora de propósito.",
"walkthrough.blocked.serverUnsupported.title": "Este servidor não oferece walkthroughs",
"walkthrough.blocked.serverUnsupported.description": "O servidor OpenChamber ao qual este app está conectado não respondeu à API de walkthrough, ou seja, é mais antigo que o app. Atualize o servidor para 1.18 ou mais recente e atualize a visualização.",
"walkthrough.blocked.contextTooSmall.descriptionUnknownModel": "O modelo pequeno comporta cerca de {available} mil caracteres e este diff precisa de cerca de {required} mil. Nada é cortado — escolha um modelo com contexto maior.",
"walkthrough.blocked.structuredOutput.descriptionUnknownModel": "O modelo pequeno não suporta as respostas estruturadas que um percurso exige.",
"contextRail.surface.plan.description": "Ver o plano atual",
"contextRail.surface.pr.description": "Crie, revise e faça merge do pull request do branch atual",
"contextRail.surface.notes.description": "Notas, tarefas e planos do projeto",
"contextRail.surface.notes.description": "Notas, tarefas, planos e memória do agente do projeto",
"contextRail.surface.context.description": "Contexto da sessão e uso de tokens",
"contextRail.surface.browser.description": "Navegador web integrado",
"contextRail.surface.preview.description": "Pré-visualização do servidor de desenvolvimento",
"contextRail.surface.chat.description": "Sessão aberta lado a lado",
"contextRail.surface.notes": "Notas do projeto",
"contextRail.surface.notes": "Conhecimento do projeto",
"contextRail.editorTree.toggle": "Alternar árvore de arquivos",
"contextPanel.browser.open": "Abrir painel do navegador",
"contextPanel.browser.addressAria": "Endereço do navegador",
"contextPanel.browser.history.label": "Endereços recentes",
"contextPanel.browser.history.forget": "Remover do histórico",
"contextPanel.browser.newTab": "Nova aba do navegador",
"contextPanel.browser.empty": "Navegador web",
"contextPanel.browser.emptyHint": "Digite um endereço acima para começar a navegar",
"contextPanel.browser.inspectUnavailable": "Esta página não pode ser inspecionada pelo painel do navegador.",
"contextPanel.browser.back": "Voltar",
"contextPanel.browser.forward": "Avançar",
"contextPanel.browser.reload": "Recarregar",
"contextPanel.browser.hardReload": "Recarregar ignorando o cache",
"contextPanel.browser.zoomIn": "Ampliar",
"contextPanel.browser.zoomOut": "Reduzir",
"contextPanel.browser.zoomReset": "Redefinir zoom",
"contextPanel.browser.clearCookies": "Limpar cookies",
"contextPanel.browser.clearCache": "Limpar cache",
"contextPanel.browser.clearedCookies": "Cookies limpos",
"contextPanel.browser.clearedCache": "Cache limpo",
"contextPanel.browser.clearFailed": "Não foi possível limpar os dados de navegação",
"contextPanel.browser.stop": "Parar",
"contextPanel.browser.openExternal": "Abrir no navegador do sistema",
"contextPanel.browser.devTools": "Abrir DevTools",
"contextPanel.browser.deviceToolbar": "Barra de dispositivos",
"contextPanel.browser.device.preset": "Predefinição de dispositivo",
"contextPanel.browser.device.responsive": "Responsivo",
"contextPanel.browser.device.width": "Largura da viewport",
"contextPanel.browser.device.height": "Altura da viewport",
"contextPanel.browser.device.rotate": "Girar",
"contextPanel.browser.device.schemeSystem": "Auto",
"contextPanel.browser.device.schemeLight": "Claro",
"contextPanel.browser.device.schemeDark": "Escuro",
"contextPanel.browser.device.schemeFailed": "Não foi possível mudar a aparência da página",
"contextPanel.browser.frameTitle": "Navegador",
"contextPanel.browser.loadFailed": "Não foi possível carregar esta página",
"contextPanel.browser.waitingForServer": "Aguardando o servidor de desenvolvimento",
"contextPanel.browser.waitingForServerHint": "Ele ainda não aceita conexões. A página carregará assim que aceitar.",
"contextPanel.browser.tunnelFailed": "Não foi possível alcançar este servidor de desenvolvimento",
"contextPanel.browser.tunnelFailedHint": "{url} roda na máquina onde o OpenChamber está e não foi possível abrir a conexão com ela. Nada da sua própria máquina é mostrado aqui.",
"contextPanel.browser.loadFailedUnknown": "Não foi possível acessar a página.",
"contextPanel.browser.crashed": "Esta página parou de responder",
"contextPanel.browser.crashedHint": "A página falhou várias vezes seguidas. Recarregue para tentar de novo.",
"contextPanel.browser.devServers.title": "Servidores de desenvolvimento em execução",
"projectActions.toast.multipleServers": "Vários servidores iniciaram — escolha um no painel do navegador",
"contextPanel.browser.devServers.justStarted": "Recém-iniciados",
"contextPanel.browser.devServers.unavailable": "Não foi possível verificar os servidores de desenvolvimento em execução.",
"contextPanel.browser.devServers.remoteOnly": "Eles rodam na máquina que hospeda o OpenChamber. Abri-los exige o aplicativo desktop.",
"contextPanel.browser.annotate.toggle": "Anotar página",
"contextPanel.browser.annotate.intro": "Esta é uma seleção anotada do navegador integrado.",
"contextPanel.browser.annotate.attached": "Anotação anexada ao chat",
"contextPanel.browser.annotate.noSession": "Abra uma sessão de chat antes de anexar uma anotação",
"contextPanel.browser.annotate.noPage": "Carregue uma página antes de anotar",
"contextPanel.browser.annotate.failed": "Não foi possível anotar esta página",
"contextPanel.browser.annotate.tool.element": "Elemento",
"contextPanel.browser.annotate.tool.region": "Região",
"contextPanel.browser.annotate.tool.draw": "Desenhar",
"contextPanel.browser.annotate.commentPlaceholder": "Descreva a mudança...",
"contextPanel.browser.annotate.submit": "Anexar",
"contextPanel.browser.trustNotice": "As páginas abertas aqui são executadas com acesso total ao OpenChamber — necessário para inspeção e capturas de tela. Abra apenas sites confiáveis: uma página maliciosa pode ler seus dados ou agir em seu nome.",
"contextPanel.tab.closeTabAria": "Fechar aba {label}",
"contextPanel.actions.collapsePanel": "Recolher painel",
@@ -1210,6 +1341,14 @@ export const dict: Record<I18nKey, string> = {
"sidebarFilesTree.toast.writeNotSupported": "A escrita não é compatível",
"sidebarFilesTree.toast.fileCreated": "Arquivo criado",
"sidebarFilesTree.toast.operationFailed": "Não foi possível completar a operación",
"sidebarFilesTree.toast.uploaded": "Arquivos enviados",
"sidebarFilesTree.toast.uploadedWithoutConflicts": "Os arquivos sem conflitos foram enviados",
"sidebarFilesTree.toast.uploadFailed": "Não foi possível enviar alguns arquivos",
"sidebarFilesTree.drop.target": "Enviar para {path}",
"sidebarFilesTree.drop.uploading": "Enviando arquivos para {path}",
"sidebarFilesTree.dialog.uploadConflicts.title": "Substituir arquivos existentes?",
"sidebarFilesTree.dialog.uploadConflicts.description": "Já existem arquivos com esses nomes em {path}. A substituição não pode ser desfeita.",
"sidebarFilesTree.dialog.uploadConflicts.replace": "Substituir",
"sidebarFilesTree.toast.folderNameRequired": "O nome de pasta é obrigatório",
"sidebarFilesTree.toast.folderCreated": "Pasta criada",
"sidebarFilesTree.toast.nameRequired": "O nome é obrigatório",
@@ -1266,6 +1405,12 @@ export const dict: Record<I18nKey, string> = {
"filesView.editor.disableLineWrap": "Desativar ajuste de linha",
"filesView.editor.enableLineWrap": "Ativar ajuste de linha",
"filesView.editor.findInFile": "Buscar no arquivo",
"filesView.preview.find.placeholder": "Buscar na pré-visualização",
"filesView.preview.find.nextAria": "Próxima correspondência",
"filesView.preview.find.previousAria": "Correspondência anterior",
"filesView.preview.find.closeAria": "Fechar busca",
"filesView.preview.find.noMatches": "Sem correspondências",
"filesView.preview.find.countAria": "{current} de {total}",
"filesView.editor.goToLine": "Ir para linha",
"filesView.editor.switchToEditMode": "Alternar para o modo de edição",
"filesView.editor.switchToPreviewMode": "Alternar para o modo de visualização",
@@ -1317,10 +1462,12 @@ export const dict: Record<I18nKey, string> = {
"contextUsage.mobile.usedTokens": "Tokens usados",
"contextUsage.mobile.contextLimit": "Limite de contexto",
"contextUsage.mobile.outputLimit": "Limite de saída",
"contextUsage.mobile.cost": "Custo",
"contextUsage.mobile.usage": "Uso",
"contextUsage.tooltip.usedTokens": "Tokens usados: {tokens}",
"contextUsage.tooltip.contextLimit": "Limite de contexto: {tokens}",
"contextUsage.tooltip.outputLimit": "Limite de saída: {tokens}",
"contextUsage.tooltip.cost": "Custo: {cost}",
"contextSidebar.session.untitled": "Sessão sem título",
"contextSidebar.empty.openSession": "Abrir uma sessão para inspecionar o contexto.",
"contextSidebar.section.context": "Contexto",
@@ -1347,6 +1494,7 @@ export const dict: Record<I18nKey, string> = {
"planView.file.defaultName": "plano",
"planView.title.default": "Plano",
"planView.error.saveFailed": "Não foi possível salvar",
"planView.error.loadFailed": "Não foi possível carregar este plano",
"planView.error.previewUnavailable": "Pré-visualização indisponível",
"planView.error.switchToEditMode": "Alterne para o modo de edição para resolver o problema.",
"planView.error.writeFailed": "Não foi possível gravar",
@@ -1388,6 +1536,13 @@ export const dict: Record<I18nKey, string> = {
"diffView.scope.changed": "Alteradas",
"diffView.scope.staged": "Staged",
"diffView.scope.lastTurn": "Último turno",
"diffView.scope.branch": "Branch",
"diffView.branch.resolvingBase": "Detectando branch base...",
"diffView.branch.noBaseTitle": "Sem branch base",
"diffView.branch.noBaseDescription": "O Git não tem registro de onde este branch começou. Escolha um branch base para comparar.",
"diffView.branch.loadError": "Falha ao carregar as alterações do branch",
"diffView.branch.loadingFiles": "Carregando alterações do branch...",
"diffView.branch.empty": "Nenhuma alteração neste branch em relação a {base}",
"diffView.scope.selectorAria": "Selecionar modo de alterações",
"diffView.actions.retry": "Tentar novamente",
"diffView.actions.renderAnyway": "Renderizar mesmo assim",
@@ -1424,6 +1579,12 @@ export const dict: Record<I18nKey, string> = {
'chat.dictation.retry': 'Tentar transcrever novamente',
'chat.dictation.discard': 'Descartar gravação',
'chat.history.loadOlder': 'Carregar mensagens anteriores',
"chat.appLink.confirm.title": "Abrir este link em outro aplicativo?",
"chat.appLink.confirm.description": "Este link do chat usa o protocolo {scheme} e será aberto em outro aplicativo.",
"chat.appLink.confirm.descriptionPlain": "Este link do chat será aberto em outro aplicativo.",
"chat.appLink.confirm.cancel": "Cancelar",
"chat.appLink.confirm.open": "Abrir uma vez",
"chat.appLink.confirm.trustAndOpen": "Confiar e abrir",
'chat.autoReview.title': 'O ciclo de revisão de código está em andamento',
'chat.autoReview.status.waitingForReviewer': 'Aguardando o revisor',
'chat.autoReview.status.waitingForImplementer': 'Aguardando o implementador',
@@ -1441,11 +1602,46 @@ export const dict: Record<I18nKey, string> = {
"diffView.hunk.unsupported": "A preparação de trechos individuais não é suportada neste ambiente.",
"rightSidebar.contextNotesTodo.plan.defaultTitle": "Plano",
"rightSidebar.contextNotesTodo.empty.selectProject": "Selecione um projeto para adicionar notas e tarefas pendentes.",
"rightSidebar.contextNotesTodo.notes.title": "Notas rápidas — {project}",
"rightSidebar.contextNotesTodo.notes.placeholder": "Capture contexto, lembretes ou links",
"rightSidebar.contextNotesTodo.todo.title": "Tarefas pendentes",
"rightSidebar.contextNotesTodo.todo.itemsSingle": "{count} elemento",
"rightSidebar.contextNotesTodo.todo.itemsPlural": "{count} elementos",
"rightSidebar.contextNotesTodo.notes.addAria": "Adicionar nota",
"rightSidebar.contextNotesTodo.notes.empty": "Ainda não há notas. Registre contexto, lembretes ou links.",
"rightSidebar.contextNotesTodo.notes.actions.expand": "Expandir nota",
"rightSidebar.contextNotesTodo.notes.actions.collapse": "Recolher nota",
"rightSidebar.contextNotesTodo.notes.actions.delete": "Excluir nota",
"rightSidebar.contextNotesTodo.notes.actions.pin": "Fixar no contexto do agente",
"rightSidebar.contextNotesTodo.notes.actions.unpin": "Desafixar do contexto do agente",
"rightSidebar.contextNotesTodo.notes.source.selection": "Do chat",
"rightSidebar.contextNotesTodo.notes.source.agent": "Do agente",
"rightSidebar.contextNotesTodo.search.placeholder": "Buscar",
"rightSidebar.contextNotesTodo.search.clear": "Limpar busca",
"rightSidebar.contextNotesTodo.search.noResults": "Nada corresponde a \"{query}\".",
"rightSidebar.contextNotesTodo.toast.deleteNoteFailed": "Falha ao excluir a nota",
"rightSidebar.contextNotesTodo.toast.createNoteFailed": "Falha ao criar a nota",
"rightSidebar.contextNotesTodo.tabs.notes": "Notas",
"rightSidebar.contextNotesTodo.tabs.todos": "Tarefas",
"rightSidebar.contextNotesTodo.tabs.plans": "Planos",
"rightSidebar.contextNotesTodo.plans.actions.back": "Voltar aos planos",
"rightSidebar.contextNotesTodo.tabs.memory": "Memória",
"rightSidebar.contextNotesTodo.sections.label": "Seções do contexto do projeto",
"rightSidebar.contextNotesTodo.sections.resize": "Redimensionar a barra de seções",
"rightSidebar.contextNotesTodo.memory.scope.project": "Projeto",
"rightSidebar.contextNotesTodo.memory.scope.label": "Escopo da memória",
"rightSidebar.contextNotesTodo.memory.scope.global": "Sobre você",
"rightSidebar.contextNotesTodo.memory.type.fact": "fato",
"rightSidebar.contextNotesTodo.memory.badge.new": "novo",
"rightSidebar.contextNotesTodo.memory.flagged": "Retido do agente — parece uma instrução",
"rightSidebar.contextNotesTodo.memory.badge.changed": "alterado",
"rightSidebar.contextNotesTodo.memory.type.preference": "preferência",
"rightSidebar.contextNotesTodo.memory.type.reference": "referência",
"rightSidebar.contextNotesTodo.memory.actions.delete": "Esquecer esta memória",
"rightSidebar.contextNotesTodo.memory.actions.editTitle": "Título da memória",
"rightSidebar.contextNotesTodo.memory.actions.editBody": "Texto da memória",
"rightSidebar.contextNotesTodo.memory.toast.saveFailed": "Não foi possível salvar a memória",
"rightSidebar.contextNotesTodo.memory.toast.deleteFailed": "Não foi possível esquecer a memória",
"rightSidebar.contextNotesTodo.memory.empty.nothing": "O agente ainda não guardou nada aqui.",
"rightSidebar.contextNotesTodo.memory.empty.noMatches": "Nenhuma memória guardada corresponde à sua busca.",
"rightSidebar.contextNotesTodo.memory.empty.noProject": "Abra um projeto para ver o que o agente lembra sobre ele.",
"rightSidebar.contextNotesTodo.memory.empty.unavailable": "Não foi possível carregar a memória guardada. Nada foi perdido — tente novamente.",
"rightSidebar.contextNotesTodo.todo.clearCompleted": "Limpar completadas",
"rightSidebar.contextNotesTodo.todo.inputPlaceholder": "Adicione uma tarefa pendente",
"rightSidebar.contextNotesTodo.todo.addAria": "Adicionar tarefa pendente",
@@ -1456,13 +1652,9 @@ export const dict: Record<I18nKey, string> = {
"rightSidebar.contextNotesTodo.todo.actions.delete": "Excluir \"{text}\"",
"rightSidebar.contextNotesTodo.todo.actions.send": "Enviar \"{text}\"",
"rightSidebar.contextNotesTodo.todo.actions.reorder": "Reordenar \"{text}\"",
"rightSidebar.contextNotesTodo.todo.resizeAria": "Redimensionar lista de tarefas",
"rightSidebar.contextNotesTodo.todo.sendMenu.currentSession": "Enviar à sessão atual",
"rightSidebar.contextNotesTodo.todo.sendMenu.newSession": "Enviar a uma nova sessão",
"rightSidebar.contextNotesTodo.todo.sendMenu.newWorktreeSession": "Enviar a uma nova sessão de worktree",
"rightSidebar.contextNotesTodo.plans.title": "Planos",
"rightSidebar.contextNotesTodo.plans.filesSingle": "{count} arquivo",
"rightSidebar.contextNotesTodo.plans.filesPlural": "{count} arquivos",
"rightSidebar.contextNotesTodo.plans.importFromFile": "Importar plano de arquivo",
"rightSidebar.contextNotesTodo.plans.empty": "Ainda não há planos salvos.",
"rightSidebar.contextNotesTodo.plans.deletePlan": "Excluir plano",
@@ -1482,13 +1674,14 @@ export const dict: Record<I18nKey, string> = {
"rightSidebar.contextNotesTodo.toast.sentToNewSession": "Tarefa enviada para uma nova sessão",
"rightSidebar.contextNotesTodo.toast.sentToNewWorktreeSession": "Tarefa enviada para uma nova sessão de worktree",
"rightSidebar.contextNotesTodo.toast.sendTodoFailed": "Não foi possível enviar a tarefa",
"rightSidebar.contextNotesTodo.toast.updatePlanFailed": "Falha ao atualizar o plano",
"rightSidebar.contextNotesTodo.toast.deletePlanFailed": "Não foi possível excluir o plano",
"rightSidebar.contextNotesTodo.toast.planFileEmpty": "O arquivo do plano está vazio",
"rightSidebar.contextNotesTodo.toast.importPlanFailed": "Não foi possível importar o plano",
"rightSidebar.contextNotesTodo.toast.planImported": "Plano importado",
"rightSidebar.contextNotesTodo.toast.readPlanFileFailed": "Não foi possível ler o arquivo do plano",
"inlineComment.range.lines": "Linhas {start}-{end}",
"inlineComment.input.placeholder": "Adicionar um comentário... (Cmd+Enter para salvar)",
"inlineComment.input.placeholder": "Adicionar um comentário... ({shortcut} para salvar)",
"inlineComment.input.placeholderShort": "Adicionar um comentário...",
"inlineComment.actions.cancel": "Cancelar",
"inlineComment.actions.save": "Salvar",
@@ -1507,8 +1700,6 @@ export const dict: Record<I18nKey, string> = {
"header.github.accountSource.cli": "CLI",
"header.services.openWithCurrent": "Abrir instância, uso e MCP (atual: {current})",
"header.services.open": "Abrir serviços, uso e MCP",
"header.services.tooltip.currentInstanceWithShortcuts": "Instância atual: {current} ({toggle}; próxima aba {nextTab})",
"header.services.tooltip.servicesWithShortcuts": "Serviços ({toggle}; próxima aba {nextTab})",
"header.services.title": "Serviços",
"header.services.viewAria": "Ver serviços",
"header.services.closeAria": "Fechar serviços",
@@ -1525,7 +1716,6 @@ export const dict: Record<I18nKey, string> = {
"header.services.used": "Usado",
"header.services.remaining": "Restante",
"header.services.modelFamily.other": "Outro",
"header.services.shutdownDev": "Parar OpenChamber",
"header.actions.openPlanAria": "Abrir plano",
"header.actions.toggleChangesPanel": "Painel de alterações",
"header.actions.toggleChangesPanelAria": "Alternar painel de alterações",
@@ -1618,6 +1808,10 @@ export const dict: Record<I18nKey, string> = {
"directoryExplorerDialog.browse.directories": "Diretórios",
"directoryExplorerDialog.browse.loading": "Carregando diretórios...",
"directoryExplorerDialog.browse.empty": "Nenhum diretório correspondente.",
"directoryExplorerDialog.browse.permissionDenied": "OpenChamber precisa acessar esta pasta.",
"directoryExplorerDialog.browse.loadFailed": "Não foi possível carregar esta pasta.",
"directoryExplorerDialog.browse.grantAccess": "Conceder acesso",
"directoryExplorerDialog.browse.retry": "Tentar novamente",
"directoryExplorerDialog.browse.parentDirectory": "Diretório pai",
"directoryExplorerDialog.browse.addedBadge": "Adicionado",
"directoryExplorerDialog.browse.quickAdd": "Adicionar",
@@ -1677,22 +1871,18 @@ export const dict: Record<I18nKey, string> = {
"helpDialog.item.focusChatInput": "Focar entrada do chat",
"helpDialog.item.togglePromptNavigator": "Mostrar ou ocultar navegador de prompts",
"helpDialog.item.abortActiveRun": "Interromper execução ativa (duplo clique)",
"helpDialog.item.toggleRightSidebar": 'Alternar painel de contexto',
"helpDialog.item.openRightSidebarGitTab": 'Abrir superfície do Git',
"helpDialog.item.openRightSidebarFilesTab": 'Abrir superfície de arquivos',
"helpDialog.item.toggleTerminalDock": "Mostrar ou ocultar dock de terminal",
"helpDialog.item.toggleTerminalExpanded": "Expandir ou recolher o terminal",
"helpDialog.item.togglePlanContextPanel": "Alternar painel de contexto do plano",
"helpDialog.item.cycleTheme": "Alternar tema (Claro → Escuro → Sistema)",
"helpDialog.item.switchProject": "Alternar projeto",
"helpDialog.item.switchSessionTab": "Alternar aba de sessão",
"helpDialog.item.switchContextSurface": "Alternar superfície do painel de contexto (tecla numérica)",
"helpDialog.item.toggleServicesMenu": "Mostrar ou ocultar menu de serviços",
"helpDialog.item.cycleServicesTab": "Alternar aba de serviços",
"helpDialog.item.openSettings": "Abrir configurações",
"helpDialog.keyCombiner.or": "ou",
"helpDialog.proTips.title": "Dicas:",
"helpDialog.proTips.commandPalette": "Use a paleta de comandos ({shortcut}) para acessar rapidamente todas as ações",
"helpDialog.proTips.recentSessions": "As cinco sessões mais recentes aparecem na paleta de comandos",
"helpDialog.proTips.themeCycling": "A alternância de tema lembra sua preferência entre sessões",
"helpDialog.proTips.leaderSequences": "Atalhos em duas etapas: pressione a combinação e depois a segunda tecla — Esc cancela",
"header.actions.rightSidebarWithShortcut": "Barra lateral direita ({shortcut})",
"header.actions.toggleRightSidebarAria": "Mostrar ou ocultar barra lateral direita",
"header.actions.openAppMenu": "Menu do OpenChamber",
@@ -1776,8 +1966,6 @@ export const dict: Record<I18nKey, string> = {
"session.newWorktree.noMatchingBranches": "Não há branches coincidentes",
"session.newWorktree.localBranches": "Branches locais",
"session.newWorktree.remoteBranches": "Branches remotas",
"session.newWorktree.otherLocalBranches": "Outras branches locais",
"session.newWorktree.otherRemoteBranches": "Outras branches remotas",
"session.newWorktree.branchName": "Nome da branch",
"session.newWorktree.branchNamePlaceholder": "feature/my-awesome-feature",
"session.newWorktree.actions.change": "Alterar",
@@ -1902,7 +2090,6 @@ export const dict: Record<I18nKey, string> = {
"chat.statusRow.tasksTitle": "Tarefas",
"chat.statusRow.modelStatus": "{model} · {status}",
"chat.statusRow.summary.activeLeft": "{active} ativas · {left} restantes",
"chat.statusRow.aborted": "Interrompido",
"chat.revertIndicator.redo": "Refazer",
"chat.revertIndicator.redoAria": "Refazer — restaurar mensagens revertidas",
"chat.revertPopover.title": "Revertidas",
@@ -1916,6 +2103,9 @@ export const dict: Record<I18nKey, string> = {
"chat.revert.toast.undo": "Revertido para {preview}",
"chat.revert.toast.redo": "Refeito",
"chat.revert.toast.restored": "Todas as mensagens restauradas",
"chat.toast.opencodeRestartInterrupted.title": "Conversa interrompida",
"chat.toast.opencodeRestartInterrupted.description": "O OpenCode foi reiniciado enquanto uma resposta ainda estava em andamento. Envie uma mensagem para continuar.",
"chat.toast.opencodeRestartInterrupted.openSession": "Abrir sessão",
"chat.errorBoundary.title": "Erro na conversa",
"chat.errorBoundary.description": "A interface da conversa encontrou um erro. Isso pode ter sido causado por um problema temporário de rede ou por dados de mensagem corrompidos.",
"chat.errorBoundary.sessionLabel": "Sessão",
@@ -1942,6 +2132,7 @@ export const dict: Record<I18nKey, string> = {
"chat.commandAutocomplete.command.catchUpDescription": "Retome o contexto: o que você estava fazendo e por onde continuar.",
"chat.commandAutocomplete.command.debugDescription": "Investigação guiada da causa raiz de um bug antes de propor uma correção.",
"chat.commandAutocomplete.command.weighDescription": "Compare 2-3 abordagens com seus prós e contras e uma recomendação antes de decidir.",
'chat.commandAutocomplete.command.btwDescription': 'Faça uma pergunta paralela em uma sessão filha temporária sem desviar este chat.',
"chat.commandAutocomplete.command.exploreDescription": "Oriente-se neste código: um tour geral pela arquitetura e pelas partes principais.",
"chat.commandAutocomplete.badge.skill": "habilidade",
"chat.commandAutocomplete.badge.command": "comando",
@@ -1962,13 +2153,28 @@ export const dict: Record<I18nKey, string> = {
"chat.container.returnToParent.titleNamed": "Voltar para: {title}",
"chat.container.returnToParent.title": "Voltar para a sessão principal",
"chat.container.returnToParent.label": "Principal",
'chat.btw.destroyAria': 'Destruir esta sessão btw',
'chat.btw.titleFallback': 'sessão btw',
'chat.btw.mainComposerPlaceholder': 'Pergunte nesta sessão btw…',
'chat.btw.loading': 'Iniciando sessão btw…',
'chat.btw.toast.emptyArgument': 'Digite uma pergunta depois de /btw',
'chat.btw.toast.createFailed': 'Falha ao iniciar a sessão btw',
'chat.btw.toast.destroyFailed': 'Falha ao destruir a sessão btw. Ela permanecerá na barra lateral.',
'chat.btw.working': 'Trabalhando…',
'chat.btw.collapseAria': 'Recolher o painel btw',
'chat.btw.expandAria': 'Expandir o painel btw',
'chat.btw.promoteAria': 'Manter como sessão separada',
'chat.btw.toast.promoteFailed': 'Falha ao manter a sessão btw',
"chat.container.readOnlySubagentPromptBanner": "Sessões de subagente não podem receber prompts.",
"chat.container.sessionLoadError.title": "Não foi possível carregar a sessão",
"chat.container.sessionLoadError.description": "Verifique a conexão e tente carregar esta sessão novamente.",
"chat.container.sessionLoadError.description": "Não foi possível buscar a conversa — o servidor pode estar desligado ou inacessível. Nada foi perdido; tente novamente quando ele voltar.",
"chat.container.sessionLoadError.authDescription": "Sua sessão expirou, então o servidor recusou a solicitação. Entre e a conversa será carregada.",
"chat.container.sessionLoadError.retry": "Tentar novamente",
"sessions.sidebar.group.empty.loadingSessions": "Carregando sessões…",
"sessions.sidebar.group.empty.loadFailed": "Não foi possível atualizar as sessões.",
"sessions.sidebar.group.empty.retry": "Tentar novamente",
"sessions.sidebar.group.empty.permissionDenied": "É necessário acesso à pasta.",
"sessions.sidebar.group.empty.grantAccess": "Conceder acesso",
"chat.unifiedControls.title": "Controles",
"chat.unifiedControls.model.title": "Modelo",
"chat.unifiedControls.model.noRecent": "Não há modelos recentes",
@@ -2000,12 +2206,13 @@ export const dict: Record<I18nKey, string> = {
"chat.textSelection.toast.addToNotesFailed": "Não foi possível adicionar às notas",
"chat.textSelection.toast.addToNotesSuccess": "Texto selecionado adicionado às notas",
"chat.textSelection.toast.addToNotesSummaryFailed": "Não foi possível resumir a seleção; o texto selecionado foi adicionado às notas",
"chat.textSelection.actions.addToChat": "Adicionar ao chat",
"chat.textSelection.actions.newSession": "Nova sessão",
"chat.textSelection.actions.copy": "Copiar",
"chat.textSelection.actions.addToInput": "Adicionar à entrada",
"chat.textSelection.actions.comment": "Comentar",
"chat.textSelection.title.commentOnSelection": "Comentar a seleção",
"chat.textSelection.comment.placeholder": "Adicione um comentário opcional...",
"chat.textSelection.comment.attach": "Anexar",
"chat.textSelection.actions.addToNotes": "Adicionar às notas",
"chat.textSelection.title.addToCurrentChat": "Adicionar ao chat atual",
"chat.textSelection.title.newSessionWithSelection": "Criar nova sessão com seleção",
"chat.textSelection.title.saveInsightToNotes": "Salvar texto selecionado em notas",
"chat.messageBody.actions.revertAria": "Voltar para esta mensagem",
"chat.messageBody.actions.revert": "Voltar daqui",
@@ -2089,6 +2296,7 @@ export const dict: Record<I18nKey, string> = {
"chat.chatInput.toast.attachmentsTooLarge": "Os anexos são grandes demais para enviar. Tente reduzir a quantidade ou o tamanho das imagens.",
"chat.chatInput.toast.sendAttachmentsFailed": "Não foi possível enviar os anexos. Tente com menos arquivos ou imagens menores.",
"chat.chatInput.toast.messageSendFailed": "A mensagem não pôde ser enviada. Os anexos foram restaurados.",
"chat.chatInput.toast.noModelSelected": "Selecione um provedor e um modelo antes de enviar.",
"chat.chatInput.toast.clipboardAttachFailed": "Não foi possível anexar a imagem da área de transferência",
"chat.chatInput.toast.clipboardTextAttachFailed": "Não foi possível anexar o texto colado como arquivo",
"chat.chatInput.toast.largeTextPaste.title": "Texto grande detectado",
@@ -2104,8 +2312,6 @@ export const dict: Record<I18nKey, string> = {
"chat.chatInput.toast.togglePermissionAutoAcceptFailed": "Não foi possível alterar a aceitação automática de permissões",
"chat.chatInput.reviewComments": "Comentários de revisão:",
"chat.chatInput.reviewCommentsRemove": "Remover comentários de revisão",
"chat.chatInput.devServerLogs": "Logs do Dev Server:",
"chat.chatInput.devServerLogsRemove": "Remover logs do Dev Server",
"chat.chatInput.previewAnnotations": "Anotações da visualização:",
"chat.chatInput.previewContext": "Contexto da visualização:",
"chat.chatInput.previewContextRemove": "Remover contexto da visualização",
@@ -2144,6 +2350,7 @@ export const dict: Record<I18nKey, string> = {
"chat.toolPart.showRawJson": "Mostrar JSON bruto",
"chat.toolPart.showFormattedJson": "Mostrar JSON formatado",
"chat.toolPart.showNavigableJson": "Mostrar JSON navegável",
"chat.toolPart.openFile": "Abrir arquivo",
"chat.toolPart.openFileAtFirstChange": "Abrir arquivo na primeira alteração",
"chat.toolPart.openFileDiff": "Abrir diferenças do arquivo",
"chat.toolPart.copyOutput": "Copiar saída",
@@ -2275,6 +2482,15 @@ export const dict: Record<I18nKey, string> = {
"commandPalette.item.toggleSidebar": "Mostrar ou ocultar barra lateral",
"commandPalette.item.showContextUsage": "Mostrar uso do contexto",
"commandPalette.item.toggleTerminal": "Mostrar ou ocultar terminal",
"commandPalette.item.cycleTheme": "Alternar tema",
"commandPalette.item.showOpenCodeStatus": "Mostrar status do OpenCode",
"commandPalette.item.toggleMemoryDebug": "Alternar painel de depuração de memória",
"commandPalette.item.pinSession": "Fixar ou desafixar sessão",
"commandPalette.item.copySessionId": "Copiar ID da sessão",
"commandPalette.item.openMultiRun": "Abrir lançador multi-run",
"commandPalette.item.openArchive": "Abrir sessões arquivadas",
"commandPalette.item.openNotes": "Abrir painel de notas",
"commandPalette.item.openTodos": "Abrir painel de tarefas",
"commandPalette.item.openSettings": "Abrir configurações...",
"commandPalette.session.untitled": "Sessão sem título",
"openCodeStatusDialog.title": "Status do OpenCode",
@@ -2489,6 +2705,9 @@ export const dict: Record<I18nKey, string> = {
"sessionAuth.error.passkeySignInCanceled": "O início de sessão com chave de acesso foi cancelado.",
"sessionAuth.error.enterPasswordForPasskey": "Digite sua senha para adicionar uma chave de acesso.",
"sessionAuth.locked.tunnelTitle": "É necessário acesso por túnel",
"sessionAuth.expired.banner": "Sua sessão expirou — entre para continuar.",
"sessionAuth.expired.loginAction": "Entrar",
"sessionAuth.expired.sendBlocked": "Sessão expirada — entre para enviar mensagens.",
"sessionAuth.locked.unlockTitle": "Desbloquear OpenChamber",
"sessionAuth.locked.tunnelDescription": "Abra este túnel usando o link de conexão única do aplicativo desktop.",
"sessionAuth.locked.passwordDescription": "Esta sessão está protegida com senha.",
@@ -2771,6 +2990,10 @@ export const dict: Record<I18nKey, string> = {
"updateDialog.status.updating": "Atualizando...",
"updateDialog.error.updateFailed": "Não foi possível atualizar",
"updateDialog.error.takingLonger": "A atualização está demorando mais do que o esperado. Aguarde um pouco e atualize, ou execute: openchamber update",
"updateDialog.error.signatureRejected": "A atualização baixada foi rejeitada: a assinatura de código não corresponde a esta instalação. Isso costuma significar que a cópia em execução não foi instalada a partir de uma versão oficial assinada. Instale o OpenChamber a partir de uma versão oficial e atualize novamente.",
"updateDialog.error.updaterDisabled": "O atualizador parou após uma instalação com falha. Feche o OpenChamber, abra-o de novo e tente atualizar outra vez.",
"updateDialog.error.restartFailed": "Não foi possível reiniciar para instalar a atualização.",
"updateDialog.error.restartUnavailable": "Instalar a atualização exige o aplicativo de desktop do OpenChamber.",
"mobileUpdate.toast.available.title": "Atualização do OpenChamber disponível",
"mobileUpdate.toast.available.description": "A versão {version} está pronta para Android.",
"mobileUpdate.toast.actions.download": "Baixar",
@@ -2791,6 +3014,7 @@ export const dict: Record<I18nKey, string> = {
"memoryDebugPanel.title": "Painel de depuração",
"memoryDebugPanel.tabs.memory": "Memória",
"memoryDebugPanel.tabs.streaming": "Transmissão",
"memoryDebugPanel.tabs.requests": "Solicitações",
"memoryDebugPanel.section.sessionsInMemory": "Sessões em memória",
"memoryDebugPanel.section.uiStreamingMetrics": "Métricas de streaming de UI",
"memoryDebugPanel.section.vscodeBridgeMetrics": "Métricas da ponte do VS Code",
@@ -2828,6 +3052,16 @@ export const dict: Record<I18nKey, string> = {
"memoryDebugPanel.streaming.copy.copied": "JSON de depuração em streaming copiado",
"memoryDebugPanel.streaming.copy.failed": "Não foi possível copiar JSON",
"memoryDebugPanel.streaming.copy.hint": "Copia exportações de métricas da UI e do VS Code em formato JSON",
"memoryDebugPanel.requests.inFlight": "Em curso",
"memoryDebugPanel.requests.peak": "Pico",
"memoryDebugPanel.requests.duration": "Duração",
"memoryDebugPanel.requests.totalRequests": "Solicitações totais",
"memoryDebugPanel.requests.tracking": "Rastreamento",
"memoryDebugPanel.requests.now": "agora",
"memoryDebugPanel.requests.noSamples": "Nenhuma solicitação registrada. Mantenha este painel aberto para registrar a atividade de fetch.",
"memoryDebugPanel.requests.chartLabel": "Solicitações fetch em curso ao longo do tempo, pico {peak}",
"memoryDebugPanel.requests.windowHint": "últimos {seconds}s",
"memoryDebugPanel.requests.percentileChartLabel": "Percentis de idade das solicitações em curso (p50, p90, p99, máx) ao longo do tempo",
"memoryDebugPanel.common.idle": "inativo",
"memoryDebugPanel.common.live": "ao vivo",
"memoryDebugPanel.common.notAvailable": "n/a",
@@ -2900,18 +3134,23 @@ export const dict: Record<I18nKey, string> = {
"common.relative.daysAgoCompact": "{count}d ago",
"common.relative.weeksAgoCompact": "{count}w ago",
"common.relative.yearsAgoCompact": "{count}y ago",
"common.duration.secondsCompact": "{seconds}s",
"common.duration.minutesSecondsCompact": "{minutes}m {seconds}s",
"common.duration.hoursMinutesCompact": "{hours}h {minutes}m",
"contextFileOpen.failure.tooLarge": "File is too large to open (>{count} lines)",
"contextFileOpen.failure.missing": "File not found",
"contextFileOpen.failure.unreadable": "Failed to open file",
"quota.window.5h": "5-Hour",
"quota.window.7d": "7-Day Limit",
"quota.window.7dSonnet": "7-Day Sonnet Limit",
"quota.window.7dOpus": "7-Day Opus Limit",
"quota.window.weekly": "Weekly Limit",
"quota.window.extraUsage": "Uso adicional",
"quota.window.weekly": "Semanal",
"quota.window.daily": "Daily",
"quota.window.monthly": "Monthly Limit",
"quota.window.monthly": "Mensal",
"quota.window.credits": "Credits",
"quota.window.creditsBalance": "Credits Balance",
"quota.window.monthlyCredits": "Créditos mensais",
"quota.window.purchasedCredits": "Créditos comprados",
"quota.window.freeCredits": "Créditos gratuitos",
"quota.window.billingCycle": "Billing Cycle",
"quota.window.auto": "Auto",
"quota.window.api": "API",
@@ -2921,5 +3160,104 @@ export const dict: Record<I18nKey, string> = {
"quota.window.premium": "Premium Interactions",
"quota.window.chat": "Chat Requests",
"quota.window.completions": "Completions",
"quota.window.premiumInteractions": "Premium interactions",
"quota.window.premiumInteractions": "Créditos de IA",
'chat.workStatus.ariaLabel': 'Status do trabalho',
'chat.workStatus.context.label': 'Contexto',
'chat.workStatus.cost.breakdown': "Sessão {session} · Subagentes {subagents}",
'chat.workStatus.git.changedFileSingle': '{count} arquivo alterado',
'chat.workStatus.git.changedFilePlural': '{count} arquivos alterados',
'chat.workStatus.pr.untitled': 'Pull request sem título',
'chat.workStatus.pr.draft': 'Rascunho',
'chat.workStatus.pr.checks': 'Verificações',
'chat.workStatus.pr.checksFailed': '{count} falharam',
'chat.workStatus.pr.checksPending': '{count} em execução',
'chat.workStatus.pr.checksPassed': '{count} aprovadas',
'chat.workStatus.attention.merge': 'Merge em andamento',
'chat.workStatus.attention.rebase': 'Rebase em andamento',
'chat.workStatus.attention.cherryPick': 'Cherry-pick em andamento',
'chat.workStatus.attention.revert': 'Revert em andamento',
'chat.workStatus.attention.bisect': 'Bisect em andamento',
'chat.workStatus.subagent.done': 'Concluído',
'chat.workStatus.subagent.untitled': 'Subagente',
'chat.workStatus.mcp.toggle': 'Alternar {name}',
'chat.workStatus.mcp.needsAuth': 'Entrar',
'chat.workStatus.mcp.failed': 'Falhou',
'chat.workStatus.pinned.unavailable': 'Mensagem fixada',
'chat.workStatus.section.session': 'Sessão',
'chat.workStatus.section.project': 'Projeto',
'chat.workStatus.section.subagents': 'Subagentes',
'chat.workStatus.section.mcp': 'MCP',
'chat.workStatus.section.pinned': 'Mensagens fixadas',
'chat.workStatus.section.tasks': 'Tarefas',
'chat.workStatus.subagent.working': 'está trabalhando',
'chat.workStatus.subagent.needsPermission': 'precisa de permissão',
'chat.workStatus.subagent.askedQuestion': 'fez uma pergunta',
'chat.workStatus.section.contextBreakdown': 'Fontes de contexto',
'chat.workStatus.breakdown.skills': 'Habilidades',
'chat.workStatus.breakdown.pinnedNote': 'nota',
'chat.workStatus.breakdown.unpin': 'Desafixar do contexto',
'chat.workStatus.breakdown.pinnedPlan': 'plano',
'chat.workStatus.breakdown.memory': 'Memória do agente',
'chat.workStatus.breakdown.pinnedKnowledgeSingle': '{count} fixado',
'chat.workStatus.breakdown.pinnedKnowledgePlural': '{count} fixados',
'chat.workStatus.breakdown.mcp': 'Servidores MCP',
'chat.workStatus.action.openChanges': 'Abrir alterações',
'chat.workStatus.action.openGit': 'Abrir painel do Git',
'chat.workStatus.action.openPr': 'Abrir pull request',
'chat.workStatus.action.openSubagent': 'Abrir {name}',
'chat.workStatus.section.usage': 'Uso',
'chat.workStatus.goal.open': 'Gerenciar objetivo',
'chat.workStatus.goal.pause': 'Pausar',
'chat.workStatus.goal.resume': 'Retomar',
'chat.workStatus.goal.updateFailed': 'Não foi possível atualizar o objetivo',
'chat.workStatus.pinned.unpin': 'Desafixar mensagem',
'chat.workStatus.pinned.reveal': 'Ir para a mensagem',
'chat.workStatus.pinned.unpinFailed': 'Não foi possível desafixar a mensagem',
'chat.workStatus.action.openContext': 'Abrir painel de contexto',
'chat.workStatus.section.linkedIssues': 'Vinculados',
'chat.workStatus.linkedIssues.open': 'Abrir #{number} no GitHub',
'chat.workStatus.linkedIssues.unlink': 'Remover vínculo',
'chat.workStatus.linkedIssues.unlinkFailed': 'Não foi possível remover o vínculo',
'chat.workStatus.linkedIssues.link': 'Vincular à sessão',
'chat.workStatus.linkedIssues.linkFailed': 'Não foi possível vincular',
'chat.workStatus.breakdown.issueCountSingle': '{count} issue',
'chat.workStatus.breakdown.issueCountPlural': '{count} issues',
'chat.workStatus.breakdown.prCountSingle': '{count} PR',
'chat.workStatus.breakdown.prCountPlural': '{count} PRs',
'chat.workStatus.breakdown.skillCountSingle': '{count} habilidade',
'chat.workStatus.breakdown.skillCountPlural': '{count} habilidades',
'chat.workStatus.breakdown.mcpCountSingle': '{count} MCP',
'chat.workStatus.breakdown.mcpCountPlural': '{count} MCP',
'chat.workStatus.sections.open': 'Escolher seções',
'chat.workStatus.sections.dialogTitle': 'Seções do painel',
'chat.workStatus.sections.dialogDescription': 'Escolha o que o painel de status mostra. Seções ocultas mantêm seus dados — apenas não aparecem no painel.',
'chat.workStatus.sections.allHidden': 'Nenhuma seção selecionada',
'chat.workStatus.sections.showAll': 'Mostrar todas',
'chat.workStatus.sections.noneWarning': 'O painel aparecerá vazio.',
'header.workStatusPanel.toggleAria': 'Alternar painel de status',
'header.workStatusPanel.hide': 'Ocultar status do trabalho',
'header.workStatusPanel.show': 'Mostrar status do trabalho',
'chat.workStatus.mcp.authorizeOpenFailed': 'Não foi possível abrir a página de autorização',
'chat.workStatus.mcp.authorizeFailed': 'Falha na autorização',
'mcpDropdown.toast.authorizeOpenFailed': 'Não foi possível abrir a página de autorização',
'mcpDropdown.toast.authorizeFailed': 'Falha na autorização',
'header.services.tooltip.currentInstance': 'Instância atual: {current} ({toggle})',
'header.workStatusPanel.showOverlay': 'Mostrar status sobre o chat',
'settings.mcp.page.connection.title': 'Como acessar',
'settings.mcp.page.connection.description': 'Cole o comando que o inicia ou o link de um servidor hospedado.',
'settings.mcp.page.registration.title': 'Este servidor precisa do próprio app',
'settings.mcp.page.registration.description': 'Ele não fornece credenciais automaticamente. Crie um app nas configurações do serviço, cole os dados aqui e faça login.',
'settings.mcp.page.registration.callbackLabel': 'Informe este endereço ao serviço',
'settings.mcp.page.registration.clientId': 'ID do app',
'settings.mcp.page.registration.clientSecret': 'Segredo do app',
'settings.mcp.page.registration.afterSaving': 'Salve e depois pressione Autorizar.',
'settings.mcp.page.toast.copiedCallbackUrl': 'Endereço copiado',
'settings.mcp.page.toast.clipboardWriteFailed': 'Não foi possível copiar para a área de transferência',
'settings.mcp.page.scope.everywhere': 'Disponível em todos os projetos',
'settings.mcp.page.scope.thisProject': 'Somente neste projeto',
'settings.mcp.page.env.description': 'Valores que o servidor precisa, como uma chave de API.',
'settings.mcp.page.connection.kindCommand': 'Comando',
'settings.mcp.page.connection.kindLink': 'Link',
'settings.mcp.page.connection.hintCommand': 'Executa nesta máquina. Cole um comando inteiro e ele será dividido em um argumento por linha.',
'settings.mcp.page.connection.hintLink': 'Conecta a um servidor hospedado por outra pessoa. Cole o endereço https dele.',
};
@@ -0,0 +1,28 @@
import { describe, expect, test } from 'bun:test';
import { thirdPartyIntegrationI18n } from './third-party-integrations.i18n';
const locales = ['en', 'de', 'fr', 'es', 'ja', 'pt-BR', 'uk', 'ko', 'pl', 'zh-CN', 'zh-TW', 'tr'] as const;
const requiredKeys = [
'settings.page.integrations.title',
'settings.page.integrations.description',
'settings.integrations.experimentalWarning',
'settings.integrations.thirdParty.title',
'settings.integrations.thirdParty.actions.install',
'settings.integrations.thirdParty.actions.update',
'settings.integrations.thirdParty.actions.setup',
'settings.integrations.thirdParty.actions.remove',
'settings.integrations.thirdParty.status.notInstalled',
'settings.integrations.thirdParty.opencodeClaude.description',
'settings.integrations.thirdParty.opencodeCursorOauth.description',
] as const;
describe('third-party integration translations', () => {
test('provides every required key in every supported locale', () => {
for (const locale of locales) {
for (const key of requiredKeys) {
expect(thirdPartyIntegrationI18n[locale][key]).toBeTruthy();
}
}
});
});
@@ -0,0 +1,423 @@
/** Third-party integration settings strings — merged into each locale's settings dictionary. */
export const thirdPartyIntegrationI18n = {
en: {
'settings.page.integrations.title': 'Integrations',
'settings.page.integrations.description': 'Add third-party subscriptions to use as OpenChamber providers.',
'settings.integrations.experimentalWarning': 'Experimental feature. We aim to respect provider policies, but account restrictions and suspensions remain each provider\'s decision. Use integrations at your own risk.',
'settings.integrations.thirdParty.title': 'Third-party integrations',
'settings.integrations.thirdParty.info': 'Install a provider plugin, then set up your subscription so OpenChamber can use it.',
'settings.integrations.thirdParty.actions.install': 'Install',
'settings.integrations.thirdParty.actions.update': 'Update',
'settings.integrations.thirdParty.actions.setup': 'Set up',
'settings.integrations.thirdParty.actions.remove': 'Remove',
'settings.integrations.thirdParty.actions.docs': 'Docs',
'settings.integrations.thirdParty.actions.managePlugins': 'Manage plugins',
'settings.integrations.thirdParty.status.notInstalled': 'Not installed',
'settings.integrations.thirdParty.status.installed': 'Installed',
'settings.integrations.thirdParty.status.installedVersion': 'Installed {version}',
'settings.integrations.thirdParty.status.updateAvailable': 'Update available: {version}',
'settings.integrations.thirdParty.status.unpinned': 'Following the latest release',
'settings.integrations.thirdParty.status.projectInstalled': 'Also configured for this project',
'settings.integrations.thirdParty.status.ambiguous': 'Multiple user-wide plugin entries need manual management',
'settings.integrations.thirdParty.status.restartRequired': 'Restart OpenCode before setting up this provider.',
'settings.integrations.thirdParty.status.registryUnavailable': 'Could not check npm right now.',
'settings.integrations.thirdParty.status.providerUnavailable': 'The provider is not available yet. Restart OpenCode and try again.',
'settings.integrations.thirdParty.dialog.remove.title': 'Remove integration',
'settings.integrations.thirdParty.dialog.remove.description': 'Remove {name} from your user-wide OpenCode configuration? The provider will no longer load after OpenCode refreshes.',
'settings.integrations.thirdParty.toast.installed': '{name} installed',
'settings.integrations.thirdParty.toast.updated': '{name} updated',
'settings.integrations.thirdParty.toast.removed': '{name} removed',
'settings.integrations.thirdParty.toast.actionFailed': 'Could not update the integration',
'settings.integrations.thirdParty.toast.providerUnavailable': 'The provider could not be opened yet',
'settings.integrations.thirdParty.toast.restartRequired': 'Restart OpenCode for changes to take effect',
'settings.integrations.thirdParty.opencodeClaude.name': 'Claude Code',
'settings.integrations.thirdParty.opencodeClaude.description': 'Use your Claude Pro/Max plan — no API keys, no Claude apps.',
'settings.integrations.thirdParty.opencodeCursorOauth.name': 'Cursor',
'settings.integrations.thirdParty.opencodeCursorOauth.description': 'Cursor’s generous in-house model limits, now in OpenChamber.',
},
de: {
'settings.page.integrations.title': 'Integrationen',
'settings.page.integrations.description': 'Füge Drittanbieter-Abonnements hinzu, um sie als OpenChamber-Provider zu nutzen.',
'settings.integrations.experimentalWarning': 'Experimentelle Funktion. Wir bemühen uns, die Richtlinien der Anbieter zu respektieren, aber Kontobeschränkungen und Sperrungen liegen bei jedem Anbieter. Nutze Integrationen auf eigenes Risiko.',
'settings.integrations.thirdParty.title': 'Drittanbieter-Integrationen',
'settings.integrations.thirdParty.info': 'Installiere ein Provider-Plugin und richte dein Abonnement ein, damit OpenChamber es nutzen kann.',
'settings.integrations.thirdParty.actions.install': 'Installieren',
'settings.integrations.thirdParty.actions.update': 'Aktualisieren',
'settings.integrations.thirdParty.actions.setup': 'Einrichten',
'settings.integrations.thirdParty.actions.remove': 'Entfernen',
'settings.integrations.thirdParty.actions.docs': 'Dokumentation',
'settings.integrations.thirdParty.actions.managePlugins': 'Plugins verwalten',
'settings.integrations.thirdParty.status.notInstalled': 'Nicht installiert',
'settings.integrations.thirdParty.status.installed': 'Installiert',
'settings.integrations.thirdParty.status.installedVersion': '{version} installiert',
'settings.integrations.thirdParty.status.updateAvailable': 'Aktualisierung verfügbar: {version}',
'settings.integrations.thirdParty.status.unpinned': 'Folgt der neuesten Version',
'settings.integrations.thirdParty.status.projectInstalled': 'Auch für dieses Projekt konfiguriert',
'settings.integrations.thirdParty.status.ambiguous': 'Mehrere benutzerweite Plugin-Einträge müssen manuell verwaltet werden',
'settings.integrations.thirdParty.status.restartRequired': 'Starte OpenCode neu, bevor du diesen Provider einrichtest.',
'settings.integrations.thirdParty.status.registryUnavailable': 'npm konnte gerade nicht geprüft werden.',
'settings.integrations.thirdParty.status.providerUnavailable': 'Der Provider ist noch nicht verfügbar. Starte OpenCode neu und versuche es erneut.',
'settings.integrations.thirdParty.dialog.remove.title': 'Integration entfernen',
'settings.integrations.thirdParty.dialog.remove.description': '{name} aus deiner benutzerweiten OpenCode-Konfiguration entfernen? Der Provider wird nach der Aktualisierung von OpenCode nicht mehr geladen.',
'settings.integrations.thirdParty.toast.installed': '{name} installiert',
'settings.integrations.thirdParty.toast.updated': '{name} aktualisiert',
'settings.integrations.thirdParty.toast.removed': '{name} entfernt',
'settings.integrations.thirdParty.toast.actionFailed': 'Die Integration konnte nicht aktualisiert werden',
'settings.integrations.thirdParty.toast.providerUnavailable': 'Der Provider konnte noch nicht geöffnet werden',
'settings.integrations.thirdParty.toast.restartRequired': 'Starte OpenCode neu, damit die Änderungen wirksam werden',
'settings.integrations.thirdParty.opencodeClaude.name': 'Claude Code',
'settings.integrations.thirdParty.opencodeClaude.description': 'Nutze deinen Claude-Pro/Max-Plan — ohne API-Keys, ohne Claude-Apps.',
'settings.integrations.thirdParty.opencodeCursorOauth.name': 'Cursor',
'settings.integrations.thirdParty.opencodeCursorOauth.description': 'Die großzügigen Limits der Cursor-eigenen Modelle jetzt in OpenChamber.',
},
fr: {
'settings.page.integrations.title': 'Intégrations',
'settings.page.integrations.description': 'Ajoutez des abonnements tiers à utiliser comme fournisseurs OpenChamber.',
'settings.integrations.experimentalWarning': 'Fonctionnalité expérimentale. Nous cherchons à respecter les règles des fournisseurs, mais les restrictions et suspensions de compte relèvent de leur décision. Utilisez les intégrations à vos risques.',
'settings.integrations.thirdParty.title': 'Intégrations tierces',
'settings.integrations.thirdParty.info': 'Installez un plugin de fournisseur, puis configurez votre abonnement pour qu’OpenChamber puisse l’utiliser.',
'settings.integrations.thirdParty.actions.install': 'Installer',
'settings.integrations.thirdParty.actions.update': 'Mettre à jour',
'settings.integrations.thirdParty.actions.setup': 'Configurer',
'settings.integrations.thirdParty.actions.remove': 'Supprimer',
'settings.integrations.thirdParty.actions.docs': 'Documentation',
'settings.integrations.thirdParty.actions.managePlugins': 'Gérer les plugins',
'settings.integrations.thirdParty.status.notInstalled': 'Non installé',
'settings.integrations.thirdParty.status.installed': 'Installé',
'settings.integrations.thirdParty.status.installedVersion': '{version} installé',
'settings.integrations.thirdParty.status.updateAvailable': 'Mise à jour disponible : {version}',
'settings.integrations.thirdParty.status.unpinned': 'Suit la dernière version',
'settings.integrations.thirdParty.status.projectInstalled': 'Également configuré pour ce projet',
'settings.integrations.thirdParty.status.ambiguous': 'Plusieurs entrées de plugin globales doivent être gérées manuellement',
'settings.integrations.thirdParty.status.restartRequired': 'Redémarrez OpenCode avant de configurer ce fournisseur.',
'settings.integrations.thirdParty.status.registryUnavailable': 'Impossible de vérifier npm pour le moment.',
'settings.integrations.thirdParty.status.providerUnavailable': 'Le fournisseur n’est pas encore disponible. Redémarrez OpenCode et réessayez.',
'settings.integrations.thirdParty.dialog.remove.title': 'Supprimer l’intégration',
'settings.integrations.thirdParty.dialog.remove.description': 'Supprimer {name} de votre configuration OpenCode globale ? Le fournisseur ne sera plus chargé après l’actualisation d’OpenCode.',
'settings.integrations.thirdParty.toast.installed': '{name} installé',
'settings.integrations.thirdParty.toast.updated': '{name} mis à jour',
'settings.integrations.thirdParty.toast.removed': '{name} supprimé',
'settings.integrations.thirdParty.toast.actionFailed': 'Impossible de mettre à jour l’intégration',
'settings.integrations.thirdParty.toast.providerUnavailable': 'Le fournisseur n’a pas encore pu être ouvert',
'settings.integrations.thirdParty.toast.restartRequired': 'Redémarrez OpenCode pour que les modifications prennent effet',
'settings.integrations.thirdParty.opencodeClaude.name': 'Claude Code',
'settings.integrations.thirdParty.opencodeClaude.description': 'Utilisez votre forfait Claude Pro/Max — sans clés API, sans apps Claude.',
'settings.integrations.thirdParty.opencodeCursorOauth.name': 'Cursor',
'settings.integrations.thirdParty.opencodeCursorOauth.description': 'Les généreuses limites des modèles internes Cursor, désormais dans OpenChamber.',
},
es: {
'settings.page.integrations.title': 'Integraciones',
'settings.page.integrations.description': 'Añade suscripciones de terceros para usarlas como proveedores de OpenChamber.',
'settings.integrations.experimentalWarning': 'Función experimental. Buscamos respetar las políticas de los proveedores, pero las restricciones y suspensiones de cuentas son decisión de cada proveedor. Usa las integraciones bajo tu propia responsabilidad.',
'settings.integrations.thirdParty.title': 'Integraciones de terceros',
'settings.integrations.thirdParty.info': 'Instala un plugin de proveedor y configura tu suscripción para que OpenChamber pueda usarla.',
'settings.integrations.thirdParty.actions.install': 'Instalar',
'settings.integrations.thirdParty.actions.update': 'Actualizar',
'settings.integrations.thirdParty.actions.setup': 'Configurar',
'settings.integrations.thirdParty.actions.remove': 'Quitar',
'settings.integrations.thirdParty.actions.docs': 'Documentación',
'settings.integrations.thirdParty.actions.managePlugins': 'Administrar plugins',
'settings.integrations.thirdParty.status.notInstalled': 'No instalado',
'settings.integrations.thirdParty.status.installed': 'Instalado',
'settings.integrations.thirdParty.status.installedVersion': '{version} instalado',
'settings.integrations.thirdParty.status.updateAvailable': 'Actualización disponible: {version}',
'settings.integrations.thirdParty.status.unpinned': 'Sigue la versión más reciente',
'settings.integrations.thirdParty.status.projectInstalled': 'También configurado para este proyecto',
'settings.integrations.thirdParty.status.ambiguous': 'Hay varias entradas de plugin globales que requieren gestión manual',
'settings.integrations.thirdParty.status.restartRequired': 'Reinicia OpenCode antes de configurar este proveedor.',
'settings.integrations.thirdParty.status.registryUnavailable': 'No se pudo comprobar npm ahora mismo.',
'settings.integrations.thirdParty.status.providerUnavailable': 'El proveedor todavía no está disponible. Reinicia OpenCode e inténtalo de nuevo.',
'settings.integrations.thirdParty.dialog.remove.title': 'Quitar integración',
'settings.integrations.thirdParty.dialog.remove.description': '¿Quitar {name} de tu configuración global de OpenCode? El proveedor dejará de cargarse después de actualizar OpenCode.',
'settings.integrations.thirdParty.toast.installed': '{name} instalado',
'settings.integrations.thirdParty.toast.updated': '{name} actualizado',
'settings.integrations.thirdParty.toast.removed': '{name} eliminado',
'settings.integrations.thirdParty.toast.actionFailed': 'No se pudo actualizar la integración',
'settings.integrations.thirdParty.toast.providerUnavailable': 'Todavía no se pudo abrir el proveedor',
'settings.integrations.thirdParty.toast.restartRequired': 'Reinicia OpenCode para que los cambios surtan efecto',
'settings.integrations.thirdParty.opencodeClaude.name': 'Claude Code',
'settings.integrations.thirdParty.opencodeClaude.description': 'Usa tu plan Claude Pro/Max: sin claves API ni apps de Claude.',
'settings.integrations.thirdParty.opencodeCursorOauth.name': 'Cursor',
'settings.integrations.thirdParty.opencodeCursorOauth.description': 'Los generosos límites de los modelos internos de Cursor, ahora en OpenChamber.',
},
ja: {
'settings.page.integrations.title': '連携',
'settings.page.integrations.description': 'サードパーティのサブスクリプションを追加して、OpenChamber のプロバイダーとして使います。',
'settings.integrations.experimentalWarning': '実験的な機能です。プロバイダーの方針を尊重するよう努めていますが、アカウントの制限や停止は各プロバイダーの判断に委ねられます。自己責任で連携を使用してください。',
'settings.integrations.thirdParty.title': 'サードパーティー連携',
'settings.integrations.thirdParty.info': 'プロバイダープラグインをインストールし、サブスクリプションを設定して OpenChamber で使えるようにします。',
'settings.integrations.thirdParty.actions.install': 'インストール',
'settings.integrations.thirdParty.actions.update': '更新',
'settings.integrations.thirdParty.actions.setup': '設定',
'settings.integrations.thirdParty.actions.remove': '削除',
'settings.integrations.thirdParty.actions.docs': 'ドキュメント',
'settings.integrations.thirdParty.actions.managePlugins': 'プラグインを管理',
'settings.integrations.thirdParty.status.notInstalled': '未インストール',
'settings.integrations.thirdParty.status.installed': 'インストール済み',
'settings.integrations.thirdParty.status.installedVersion': '{version} をインストール済み',
'settings.integrations.thirdParty.status.updateAvailable': '更新があります: {version}',
'settings.integrations.thirdParty.status.unpinned': '最新リリースを追跡中',
'settings.integrations.thirdParty.status.projectInstalled': 'このプロジェクトにも設定済み',
'settings.integrations.thirdParty.status.ambiguous': '複数のユーザー全体プラグインエントリーは手動で管理する必要があります',
'settings.integrations.thirdParty.status.restartRequired': 'このプロバイダーを設定する前に OpenCode を再起動してください。',
'settings.integrations.thirdParty.status.registryUnavailable': '現在 npm を確認できません。',
'settings.integrations.thirdParty.status.providerUnavailable': 'プロバイダーはまだ利用できません。OpenCode を再起動して再試行してください。',
'settings.integrations.thirdParty.dialog.remove.title': '連携を削除',
'settings.integrations.thirdParty.dialog.remove.description': '{name} をユーザー全体の OpenCode 設定から削除しますか?OpenCode の更新後、このプロバイダーは読み込まれなくなります。',
'settings.integrations.thirdParty.toast.installed': '{name} をインストールしました',
'settings.integrations.thirdParty.toast.updated': '{name} を更新しました',
'settings.integrations.thirdParty.toast.removed': '{name} を削除しました',
'settings.integrations.thirdParty.toast.actionFailed': '連携を更新できませんでした',
'settings.integrations.thirdParty.toast.providerUnavailable': 'プロバイダーをまだ開けませんでした',
'settings.integrations.thirdParty.toast.restartRequired': '変更を反映するには OpenCode を再起動してください',
'settings.integrations.thirdParty.opencodeClaude.name': 'Claude Code',
'settings.integrations.thirdParty.opencodeClaude.description': 'Claude Pro/Max プランを利用 — API キーも Claude アプリも不要。',
'settings.integrations.thirdParty.opencodeCursorOauth.name': 'Cursor',
'settings.integrations.thirdParty.opencodeCursorOauth.description': 'Cursor 内蔵モデルの余裕ある制限が、OpenChamber で使えます。',
},
ko: {
'settings.page.integrations.title': '통합',
'settings.page.integrations.description': '타사 구독을 추가해 OpenChamber 프로바이더로 사용하세요.',
'settings.integrations.experimentalWarning': '실험 단계 기능입니다. 프로바이더 정책을 존중하려 노력하지만, 계정 제한과 정지는 각 프로바이더의 결정입니다. 본인의 책임 아래 통합 기능을 사용하세요.',
'settings.integrations.thirdParty.title': '서드파티 통합',
'settings.integrations.thirdParty.info': '프로바이더 플러그인을 설치한 뒤 구독을 설정하면 OpenChamber에서 사용할 수 있습니다.',
'settings.integrations.thirdParty.actions.install': '설치',
'settings.integrations.thirdParty.actions.update': '업데이트',
'settings.integrations.thirdParty.actions.setup': '설정',
'settings.integrations.thirdParty.actions.remove': '제거',
'settings.integrations.thirdParty.actions.docs': '문서',
'settings.integrations.thirdParty.actions.managePlugins': '플러그인 관리',
'settings.integrations.thirdParty.status.notInstalled': '설치되지 않음',
'settings.integrations.thirdParty.status.installed': '설치됨',
'settings.integrations.thirdParty.status.installedVersion': '{version} 설치됨',
'settings.integrations.thirdParty.status.updateAvailable': '업데이트 가능: {version}',
'settings.integrations.thirdParty.status.unpinned': '최신 릴리스 추적 중',
'settings.integrations.thirdParty.status.projectInstalled': '이 프로젝트에도 구성됨',
'settings.integrations.thirdParty.status.ambiguous': '여러 사용자 전체 플러그인 항목은 수동으로 관리해야 합니다',
'settings.integrations.thirdParty.status.restartRequired': '이 프로바이더를 설정하기 전에 OpenCode를 다시 시작하세요.',
'settings.integrations.thirdParty.status.registryUnavailable': '지금은 npm을 확인할 수 없습니다.',
'settings.integrations.thirdParty.status.providerUnavailable': '프로바이더를 아직 사용할 수 없습니다. OpenCode를 다시 시작한 후 재시도하세요.',
'settings.integrations.thirdParty.dialog.remove.title': '통합 제거',
'settings.integrations.thirdParty.dialog.remove.description': '사용자 전체 OpenCode 구성에서 {name}을(를) 제거할까요? OpenCode가 새로 고쳐진 후 프로바이더가 더 이상 로드되지 않습니다.',
'settings.integrations.thirdParty.toast.installed': '{name} 설치됨',
'settings.integrations.thirdParty.toast.updated': '{name} 업데이트됨',
'settings.integrations.thirdParty.toast.removed': '{name} 제거됨',
'settings.integrations.thirdParty.toast.actionFailed': '통합을 업데이트하지 못했습니다',
'settings.integrations.thirdParty.toast.providerUnavailable': '프로바이더를 아직 열 수 없습니다',
'settings.integrations.thirdParty.toast.restartRequired': '변경 사항을 적용하려면 OpenCode를 다시 시작하세요',
'settings.integrations.thirdParty.opencodeClaude.name': 'Claude Code',
'settings.integrations.thirdParty.opencodeClaude.description': 'Claude Pro/Max 요금제를 사용하세요. API 키와 Claude 앱은 필요 없습니다.',
'settings.integrations.thirdParty.opencodeCursorOauth.name': 'Cursor',
'settings.integrations.thirdParty.opencodeCursorOauth.description': 'Cursor 자체 모델의 넉넉한 한도를 이제 OpenChamber에서.',
},
pl: {
'settings.page.integrations.title': 'Integracje',
'settings.page.integrations.description': 'Dodaj subskrypcje zewnętrzne, aby używać ich jako dostawców OpenChamber.',
'settings.integrations.experimentalWarning': 'Funkcja eksperymentalna. Staramy się przestrzegać zasad dostawców, ale ograniczenia i zawieszenia kont pozostają decyzją każdego dostawcy. Używaj integracji na własne ryzyko.',
'settings.integrations.thirdParty.title': 'Integracje zewnętrzne',
'settings.integrations.thirdParty.info': 'Zainstaluj wtyczkę dostawcy, a następnie skonfiguruj subskrypcję, aby OpenChamber mógł z niej korzystać.',
'settings.integrations.thirdParty.actions.install': 'Zainstaluj',
'settings.integrations.thirdParty.actions.update': 'Aktualizuj',
'settings.integrations.thirdParty.actions.setup': 'Skonfiguruj',
'settings.integrations.thirdParty.actions.remove': 'Usuń',
'settings.integrations.thirdParty.actions.docs': 'Dokumentacja',
'settings.integrations.thirdParty.actions.managePlugins': 'Zarządzaj wtyczkami',
'settings.integrations.thirdParty.status.notInstalled': 'Nie zainstalowano',
'settings.integrations.thirdParty.status.installed': 'Zainstalowano',
'settings.integrations.thirdParty.status.installedVersion': 'Zainstalowano {version}',
'settings.integrations.thirdParty.status.updateAvailable': 'Dostępna aktualizacja: {version}',
'settings.integrations.thirdParty.status.unpinned': 'Śledzi najnowsze wydanie',
'settings.integrations.thirdParty.status.projectInstalled': 'Skonfigurowano także dla tego projektu',
'settings.integrations.thirdParty.status.ambiguous': 'Wiele globalnych wpisów wtyczki wymaga ręcznego zarządzania',
'settings.integrations.thirdParty.status.restartRequired': 'Uruchom ponownie OpenCode przed konfiguracją tego dostawcy.',
'settings.integrations.thirdParty.status.registryUnavailable': 'Nie można teraz sprawdzić npm.',
'settings.integrations.thirdParty.status.providerUnavailable': 'Dostawca nie jest jeszcze dostępny. Uruchom ponownie OpenCode i spróbuj ponownie.',
'settings.integrations.thirdParty.dialog.remove.title': 'Usuń integrację',
'settings.integrations.thirdParty.dialog.remove.description': 'Usunąć {name} z globalnej konfiguracji OpenCode? Dostawca przestanie być ładowany po odświeżeniu OpenCode.',
'settings.integrations.thirdParty.toast.installed': 'Zainstalowano {name}',
'settings.integrations.thirdParty.toast.updated': 'Zaktualizowano {name}',
'settings.integrations.thirdParty.toast.removed': 'Usunięto {name}',
'settings.integrations.thirdParty.toast.actionFailed': 'Nie udało się zaktualizować integracji',
'settings.integrations.thirdParty.toast.providerUnavailable': 'Nie można jeszcze otworzyć dostawcy',
'settings.integrations.thirdParty.toast.restartRequired': 'Uruchom ponownie OpenCode, aby zastosować zmiany',
'settings.integrations.thirdParty.opencodeClaude.name': 'Claude Code',
'settings.integrations.thirdParty.opencodeClaude.description': 'Korzystaj z planu Claude Pro/Max — bez kluczy API i aplikacji Claude.',
'settings.integrations.thirdParty.opencodeCursorOauth.name': 'Cursor',
'settings.integrations.thirdParty.opencodeCursorOauth.description': 'Hojne limity wewnętrznych modeli Cursor teraz w OpenChamber.',
},
'pt-BR': {
'settings.page.integrations.title': 'Integrações',
'settings.page.integrations.description': 'Adicione assinaturas de terceiros para usar como provedores do OpenChamber.',
'settings.integrations.experimentalWarning': 'Recurso experimental. Buscamos respeitar as políticas dos provedores, mas restrições e suspensões de conta continuam sendo decisão de cada provedor. Use as integrações por sua conta e risco.',
'settings.integrations.thirdParty.title': 'Integrações de terceiros',
'settings.integrations.thirdParty.info': 'Instale um plugin de provedor e configure sua assinatura para o OpenChamber poder usá-la.',
'settings.integrations.thirdParty.actions.install': 'Instalar',
'settings.integrations.thirdParty.actions.update': 'Atualizar',
'settings.integrations.thirdParty.actions.setup': 'Configurar',
'settings.integrations.thirdParty.actions.remove': 'Remover',
'settings.integrations.thirdParty.actions.docs': 'Documentação',
'settings.integrations.thirdParty.actions.managePlugins': 'Gerenciar plugins',
'settings.integrations.thirdParty.status.notInstalled': 'Não instalado',
'settings.integrations.thirdParty.status.installed': 'Instalado',
'settings.integrations.thirdParty.status.installedVersion': '{version} instalado',
'settings.integrations.thirdParty.status.updateAvailable': 'Atualização disponível: {version}',
'settings.integrations.thirdParty.status.unpinned': 'Acompanha a versão mais recente',
'settings.integrations.thirdParty.status.projectInstalled': 'Também configurado para este projeto',
'settings.integrations.thirdParty.status.ambiguous': 'Várias entradas de plugin globais precisam de gerenciamento manual',
'settings.integrations.thirdParty.status.restartRequired': 'Reinicie o OpenCode antes de configurar este provedor.',
'settings.integrations.thirdParty.status.registryUnavailable': 'Não foi possível verificar o npm agora.',
'settings.integrations.thirdParty.status.providerUnavailable': 'O provedor ainda não está disponível. Reinicie o OpenCode e tente novamente.',
'settings.integrations.thirdParty.dialog.remove.title': 'Remover integração',
'settings.integrations.thirdParty.dialog.remove.description': 'Remover {name} da sua configuração global do OpenCode? O provedor deixará de ser carregado após a atualização do OpenCode.',
'settings.integrations.thirdParty.toast.installed': '{name} instalado',
'settings.integrations.thirdParty.toast.updated': '{name} atualizado',
'settings.integrations.thirdParty.toast.removed': '{name} removido',
'settings.integrations.thirdParty.toast.actionFailed': 'Não foi possível atualizar a integração',
'settings.integrations.thirdParty.toast.providerUnavailable': 'Ainda não foi possível abrir o provedor',
'settings.integrations.thirdParty.toast.restartRequired': 'Reinicie o OpenCode para que as alterações entrem em vigor',
'settings.integrations.thirdParty.opencodeClaude.name': 'Claude Code',
'settings.integrations.thirdParty.opencodeClaude.description': 'Use seu plano Claude Pro/Max — sem chaves de API nem apps da Claude.',
'settings.integrations.thirdParty.opencodeCursorOauth.name': 'Cursor',
'settings.integrations.thirdParty.opencodeCursorOauth.description': 'Os limites generosos dos modelos internos do Cursor, agora no OpenChamber.',
},
uk: {
'settings.page.integrations.title': 'Інтеграції',
'settings.page.integrations.description': 'Додайте сторонні підписки, щоб використовувати їх як провайдери OpenChamber.',
'settings.integrations.experimentalWarning': 'Експериментальна функція. Ми прагнемо дотримуватися політик провайдерів, але обмеження та блокування облікових записів залишаються рішенням кожного провайдера. Використовуйте інтеграції на власний ризик.',
'settings.integrations.thirdParty.title': 'Сторонні інтеграції',
'settings.integrations.thirdParty.info': 'Установіть плагін провайдера, а потім налаштуйте підписку, щоб OpenChamber міг її використовувати.',
'settings.integrations.thirdParty.actions.install': 'Встановити',
'settings.integrations.thirdParty.actions.update': 'Оновити',
'settings.integrations.thirdParty.actions.setup': 'Налаштувати',
'settings.integrations.thirdParty.actions.remove': 'Видалити',
'settings.integrations.thirdParty.actions.docs': 'Документація',
'settings.integrations.thirdParty.actions.managePlugins': 'Керувати плагінами',
'settings.integrations.thirdParty.status.notInstalled': 'Не встановлено',
'settings.integrations.thirdParty.status.installed': 'Встановлено',
'settings.integrations.thirdParty.status.installedVersion': 'Встановлено {version}',
'settings.integrations.thirdParty.status.updateAvailable': 'Доступне оновлення: {version}',
'settings.integrations.thirdParty.status.unpinned': 'Відстежує найновіший випуск',
'settings.integrations.thirdParty.status.projectInstalled': 'Також налаштовано для цього проєкту',
'settings.integrations.thirdParty.status.ambiguous': 'Кілька глобальних записів плагіна потребують ручного керування',
'settings.integrations.thirdParty.status.restartRequired': 'Перезапустіть OpenCode перед налаштуванням цього провайдера.',
'settings.integrations.thirdParty.status.registryUnavailable': 'Зараз не вдалося перевірити npm.',
'settings.integrations.thirdParty.status.providerUnavailable': 'Провайдер ще недоступний. Перезапустіть OpenCode й спробуйте знову.',
'settings.integrations.thirdParty.dialog.remove.title': 'Видалити інтеграцію',
'settings.integrations.thirdParty.dialog.remove.description': 'Видалити {name} з вашої глобальної конфігурації OpenCode? Після оновлення OpenCode провайдер більше не завантажуватиметься.',
'settings.integrations.thirdParty.toast.installed': '{name} встановлено',
'settings.integrations.thirdParty.toast.updated': '{name} оновлено',
'settings.integrations.thirdParty.toast.removed': '{name} видалено',
'settings.integrations.thirdParty.toast.actionFailed': 'Не вдалося оновити інтеграцію',
'settings.integrations.thirdParty.toast.providerUnavailable': 'Провайдера ще не вдалося відкрити',
'settings.integrations.thirdParty.toast.restartRequired': 'Перезапустіть OpenCode, щоб застосувати зміни',
'settings.integrations.thirdParty.opencodeClaude.name': 'Claude Code',
'settings.integrations.thirdParty.opencodeClaude.description': 'Claude Pro/Max за підпискою — без API-ключів і без додатків Claude.',
'settings.integrations.thirdParty.opencodeCursorOauth.name': 'Cursor',
'settings.integrations.thirdParty.opencodeCursorOauth.description': 'Щедрі ліміти внутрішніх моделей Cursor — тепер в OpenChamber.',
},
'zh-CN': {
'settings.page.integrations.title': '集成',
'settings.page.integrations.description': '添加第三方订阅,将其用作 OpenChamber 提供商。',
'settings.integrations.experimentalWarning': '实验性功能。我们力求遵守提供商的政策,但帐户限制和暂停仍由各提供商决定。请自行承担使用集成的风险。',
'settings.integrations.thirdParty.title': '第三方集成',
'settings.integrations.thirdParty.info': '安装提供商插件并设置订阅,以便 OpenChamber 可以使用它。',
'settings.integrations.thirdParty.actions.install': '安装',
'settings.integrations.thirdParty.actions.update': '更新',
'settings.integrations.thirdParty.actions.setup': '设置',
'settings.integrations.thirdParty.actions.remove': '移除',
'settings.integrations.thirdParty.actions.docs': '文档',
'settings.integrations.thirdParty.actions.managePlugins': '管理插件',
'settings.integrations.thirdParty.status.notInstalled': '未安装',
'settings.integrations.thirdParty.status.installed': '已安装',
'settings.integrations.thirdParty.status.installedVersion': '已安装 {version}',
'settings.integrations.thirdParty.status.updateAvailable': '有可用更新:{version}',
'settings.integrations.thirdParty.status.unpinned': '跟踪最新版本',
'settings.integrations.thirdParty.status.projectInstalled': '也已为此项目配置',
'settings.integrations.thirdParty.status.ambiguous': '多个用户级插件条目需要手动管理',
'settings.integrations.thirdParty.status.restartRequired': '请先重启 OpenCode,再设置此提供商。',
'settings.integrations.thirdParty.status.registryUnavailable': '当前无法检查 npm。',
'settings.integrations.thirdParty.status.providerUnavailable': '该提供商尚不可用。请重启 OpenCode 后重试。',
'settings.integrations.thirdParty.dialog.remove.title': '移除集成',
'settings.integrations.thirdParty.dialog.remove.description': '要从用户级 OpenCode 配置中移除 {name} 吗?OpenCode 刷新后将不再加载该提供商。',
'settings.integrations.thirdParty.toast.installed': '已安装 {name}',
'settings.integrations.thirdParty.toast.updated': '已更新 {name}',
'settings.integrations.thirdParty.toast.removed': '已移除 {name}',
'settings.integrations.thirdParty.toast.actionFailed': '无法更新集成',
'settings.integrations.thirdParty.toast.providerUnavailable': '暂时无法打开该提供商',
'settings.integrations.thirdParty.toast.restartRequired': '请重启 OpenCode 以使更改生效',
'settings.integrations.thirdParty.opencodeClaude.name': 'Claude Code',
'settings.integrations.thirdParty.opencodeClaude.description': '使用 Claude Pro/Max 套餐——无需 API 密钥,也无需 Claude 应用。',
'settings.integrations.thirdParty.opencodeCursorOauth.name': 'Cursor',
'settings.integrations.thirdParty.opencodeCursorOauth.description': 'Cursor 内部模型的充足额度,现已可用于 OpenChamber。',
},
'zh-TW': {
'settings.page.integrations.title': '整合',
'settings.page.integrations.description': '新增第三方訂閱,將其用作 OpenChamber 供應商。',
'settings.integrations.experimentalWarning': '實驗性功能。我們致力遵守供應商的政策,但帳戶限制和停用仍由各供應商決定。請自行承擔使用整合的風險。',
'settings.integrations.thirdParty.title': '第三方整合',
'settings.integrations.thirdParty.info': '安裝供應商外掛並設定訂閱,以便 OpenChamber 可以使用它。',
'settings.integrations.thirdParty.actions.install': '安裝',
'settings.integrations.thirdParty.actions.update': '更新',
'settings.integrations.thirdParty.actions.setup': '設定',
'settings.integrations.thirdParty.actions.remove': '移除',
'settings.integrations.thirdParty.actions.docs': '文件',
'settings.integrations.thirdParty.actions.managePlugins': '管理外掛',
'settings.integrations.thirdParty.status.notInstalled': '未安裝',
'settings.integrations.thirdParty.status.installed': '已安裝',
'settings.integrations.thirdParty.status.installedVersion': '已安裝 {version}',
'settings.integrations.thirdParty.status.updateAvailable': '有可用更新:{version}',
'settings.integrations.thirdParty.status.unpinned': '追蹤最新版本',
'settings.integrations.thirdParty.status.projectInstalled': '也已為此專案設定',
'settings.integrations.thirdParty.status.ambiguous': '多個使用者層級外掛項目需要手動管理',
'settings.integrations.thirdParty.status.restartRequired': '請先重新啟動 OpenCode,再設定此供應商。',
'settings.integrations.thirdParty.status.registryUnavailable': '目前無法檢查 npm。',
'settings.integrations.thirdParty.status.providerUnavailable': '供應商尚不可用。請重新啟動 OpenCode 後再試一次。',
'settings.integrations.thirdParty.dialog.remove.title': '移除整合',
'settings.integrations.thirdParty.dialog.remove.description': '要從使用者層級 OpenCode 設定中移除 {name} 嗎?OpenCode 重新整理後將不再載入此供應商。',
'settings.integrations.thirdParty.toast.installed': '已安裝 {name}',
'settings.integrations.thirdParty.toast.updated': '已更新 {name}',
'settings.integrations.thirdParty.toast.removed': '已移除 {name}',
'settings.integrations.thirdParty.toast.actionFailed': '無法更新整合',
'settings.integrations.thirdParty.toast.providerUnavailable': '暫時無法開啟供應商',
'settings.integrations.thirdParty.toast.restartRequired': '請重新啟動 OpenCode 以使變更生效',
'settings.integrations.thirdParty.opencodeClaude.name': 'Claude Code',
'settings.integrations.thirdParty.opencodeClaude.description': '使用 Claude Pro/Max 方案——無需 API 金鑰,也無需 Claude 應用程式。',
'settings.integrations.thirdParty.opencodeCursorOauth.name': 'Cursor',
'settings.integrations.thirdParty.opencodeCursorOauth.description': 'Cursor 內部模型的充足額度,現已可用於 OpenChamber。',
},
tr: {
'settings.integrations.experimentalWarning': 'Deneysel özellik. Provider politikalarına saygı göstermeye çalışıyoruz, ancak hesap kısıtlamaları ve askıya almalar her provider\'ın kararıdır. Entegrasyonları kendi riskinize kullanın.',
'settings.page.integrations.title': 'Entegrasyonlar',
'settings.page.integrations.description': 'OpenChamber provider olarak kullanmak için üçüncü taraf abonelikler ekleyin.',
'settings.integrations.thirdParty.title': 'Üçüncü taraf entegrasyonlar',
'settings.integrations.thirdParty.info': 'Bir provider eklentisi kurun, ardından aboneliğinizi ayarlayın ki OpenChamber onu kullanabilsin.',
'settings.integrations.thirdParty.actions.install': 'Kur',
'settings.integrations.thirdParty.actions.update': 'Güncelle',
'settings.integrations.thirdParty.actions.setup': 'Ayarla',
'settings.integrations.thirdParty.actions.remove': 'Kaldır',
'settings.integrations.thirdParty.actions.docs': 'Dokümanlar',
'settings.integrations.thirdParty.actions.managePlugins': 'Eklentileri yönet',
'settings.integrations.thirdParty.status.notInstalled': 'Kurulu değil',
'settings.integrations.thirdParty.status.installed': 'Kurulu',
'settings.integrations.thirdParty.status.installedVersion': 'Kurulu: {version}',
'settings.integrations.thirdParty.status.updateAvailable': 'Güncelleme var: {version}',
'settings.integrations.thirdParty.status.unpinned': 'En son release takip ediliyor',
'settings.integrations.thirdParty.status.projectInstalled': 'Ayrıca bu proje için yapılandırıldı',
'settings.integrations.thirdParty.status.ambiguous': 'Birden çok kullanıcı genelinde eklenti girdisi elle yönetilmeli',
'settings.integrations.thirdParty.status.restartRequired': 'Bu provider\'ı ayarlamadan önce OpenCode\'u yeniden başlatın.',
'settings.integrations.thirdParty.status.registryUnavailable': 'npm şu anda denetlenemedi.',
'settings.integrations.thirdParty.status.providerUnavailable': 'Provider henüz kullanılabilir değil. OpenCode\'u yeniden başlatıp tekrar deneyin.',
'settings.integrations.thirdParty.dialog.remove.title': 'Entegrasyonu kaldır',
'settings.integrations.thirdParty.dialog.remove.description': '{name}, kullanıcı genelindeki OpenCode yapılandırmanızdan kaldırılsın mı? OpenCode yenilendikten sonra provider artık yüklenmeyecek.',
'settings.integrations.thirdParty.toast.installed': '{name} kuruldu',
'settings.integrations.thirdParty.toast.updated': '{name} güncellendi',
'settings.integrations.thirdParty.toast.removed': '{name} kaldırıldı',
'settings.integrations.thirdParty.toast.actionFailed': 'Entegrasyon güncellenemedi',
'settings.integrations.thirdParty.toast.providerUnavailable': 'Provider henüz açılamadı',
'settings.integrations.thirdParty.toast.restartRequired': 'Değişikliklerin geçerli olması için OpenCode\'u yeniden başlatın',
'settings.integrations.thirdParty.opencodeClaude.name': 'Claude Code',
'settings.integrations.thirdParty.opencodeClaude.description': 'Claude Pro/Max planınızı kullanın — API anahtarı gerekmez, Claude uygulamaları gerekmez.',
'settings.integrations.thirdParty.opencodeCursorOauth.name': 'Cursor',
'settings.integrations.thirdParty.opencodeCursorOauth.description': 'Cursor\'ın cömert kendi model limitleri artık OpenChamber\'da.',
},
} as const;
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+169 -46
View File
@@ -1,8 +1,10 @@
import { thirdPartyIntegrationI18n } from './third-party-integrations.i18n';
export const settingsDict = {
'settings.providers.page.openCodeGo.title': 'Відстеження використання OpenCode Go',
'settings.providers.page.openCodeGo.description': 'Підключіть панель OpenCode Go, щоб бачити ковзну, тижневу та місячну квоту.',
'settings.providers.page.openCodeGo.workspaceId': 'ID робочого простору',
'settings.providers.page.openCodeGo.authCookie': 'Cookie авторизації',
'settings.providers.page.openCodeGo.apiKey': 'Ключ API',
'settings.providers.page.openCodeGo.help': 'Скопіюйте ID робочого простору з URL панелі, а cookie auth з інструментів розробника браузера. OpenChamber ніколи не сканує сховище cookie браузера.',
'settings.providers.page.openCodeGo.save': 'Зберегти й перевірити',
'settings.providers.page.openCodeGo.replace': 'Замінити',
@@ -40,7 +42,20 @@ export const settingsDict = {
"settings.view.badge.beta": "бета-версія",
"settings.view.actions.reloadOpenCode": "Перезавантажити OpenCode",
"settings.view.actions.reloadOpenCodeTooltip": "Перезапустити OpenCode і перезавантажити його конфігурацію.",
"settings.view.actions.backToSettings": "Назад до налаштувань",
"settings.view.actions.applyAndRestartOpenCode": "Застосувати та перезапустити",
"settings.view.actions.applyAndRestartOpenCodeTooltipSingle": "Застосувати 1 очікувану зміну конфігурації та перезапустити OpenCode.",
"settings.view.actions.applyAndRestartOpenCodeTooltipPlural": "Застосувати {count} очікуваних змін конфігурації та перезапустити OpenCode.",
"settings.view.pendingRestart.applying": "Перезапуск…",
"settings.view.pendingRestart.applied": "OpenCode перезапущено з очікуваними змінами конфігурації.",
"settings.view.pendingRestart.applyFailed": "Не вдалося застосувати зміни конфігурації.",
"settings.view.pendingRestart.manualRestartRequired": "Збережено на диску. Перезапустіть підключений сервер OpenCode, щоб застосувати зміни.",
"settings.view.pendingRestart.saved": "Збережено. Перезапустіть OpenCode, щоб застосувати.",
"settings.view.pendingRestart.confirm.title": "Застосувати та перезапустити?",
"settings.view.pendingRestart.confirm.description": "Перезапуск OpenCode зупинить усі активні чати. Збережені зміни конфігурації набудуть чинності після перезапуску.",
"settings.view.pendingRestart.confirm.dontShowAgain": "Більше не показувати",
"settings.view.pendingRestart.confirm.cancel": "Скасувати", "settings.view.actions.backToSettings": "Назад до налаштувань",
"settings.view.actions.closeSettings": "Закрити налаштування",
"settings.view.actions.openSectionList": "Відкрити список розділів",
"settings.view.actions.closeSettingsWithShortcut": "Закрити налаштування ({shortcut}+,)",
@@ -191,9 +206,9 @@ export const settingsDict = {
"settings.openchamber.tunnel.toast.addManagedRemoteTokenBeforeStarting": "Перед початком додайте токен керованого віддаленого тунелю",
"settings.openchamber.tunnel.toast.startFailed": "Не вдалося запустити тунель",
"settings.openchamber.tunnel.toast.startedButNoPublicUrl": "Тунель запущено, але публічний URL не повернувся",
"settings.openchamber.tunnel.toast.replacedTunnelSingleSingle": "Попередній тунель замінено: відкликано 1 посилання, анульовано 1 сесія.",
"settings.openchamber.tunnel.toast.replacedTunnelSingleSingle": "Попередній тунель замінено: відкликано 1 посилання, анульовано 1 сесію.",
"settings.openchamber.tunnel.toast.replacedTunnelSingleManySessions": "Попередній тунель замінено: відкликано 1 посилання, анульовано сесій: {invalidatedSessionCount}.",
"settings.openchamber.tunnel.toast.replacedTunnelManyLinksSingleSession": "Попередній тунель замінено: відкликано посилань: {revokedBootstrapCount}, анульовано 1 сесія.",
"settings.openchamber.tunnel.toast.replacedTunnelManyLinksSingleSession": "Попередній тунель замінено: відкликано посилань: {revokedBootstrapCount}, анульовано 1 сесію.",
"settings.openchamber.tunnel.toast.replacedTunnelManyMany": "Попередній тунель замінено: відкликано посилань: {revokedBootstrapCount}, анульовано сесій: {invalidatedSessionCount}.",
"settings.openchamber.tunnel.toast.linkReady": "Тунель готовий",
"settings.openchamber.tunnel.toast.stopped": "Тунель зупинено",
@@ -359,14 +374,14 @@ export const settingsDict = {
"settings.remoteInstances.page.field.modePlaceholder": "Виберіть режим",
"settings.remoteInstances.page.field.modeManaged": "Запустити для мене",
"settings.remoteInstances.page.field.modeExternal": "Уже запущено",
"settings.remoteInstances.page.field.preferredRemotePort": "Бажаний віддалений порт",
"settings.remoteInstances.page.field.preferredRemotePortHint": "Порт на віддаленій машині. Залиште порожнім, щоб вибрати автоматично.",
"settings.remoteInstances.page.field.preferredRemotePort": "Порт на віддаленій машині",
"settings.remoteInstances.page.field.preferredRemotePortHint": "Порт, який OpenChamber займе на віддаленій машині. Лишіть порожнім, щоб вибрався автоматично.",
"settings.remoteInstances.page.field.keepServerRunning": "Залишати сервер запущеним",
"settings.remoteInstances.page.field.keepServerRunningHint": "Залишати OpenChamber запущеним на віддаленій машині після відключення.",
"settings.remoteInstances.page.field.bindHost": "Прив’язати хост",
"settings.remoteInstances.page.field.bindHostHint": "Де має слухати локальне підключення. Використовуйте 127.0.0.1 або localhost, якщо вам не потрібен доступ з локальної мережі.",
"settings.remoteInstances.page.field.preferredLocalPort": "Бажаний локальний порт",
"settings.remoteInstances.page.field.preferredLocalPortHint": "Локальний порт для цього підключення. Залиште порожнім, щоб вибрати автоматично.",
"settings.remoteInstances.page.field.keepServerRunningHint": "Лишати віддалений сервер запущеним після відключення. Якщо вимкнено, він зупиняється при відключенні і запускається знову при наступному підключенні.",
"settings.remoteInstances.page.field.bindHost": "Хто має доступ",
"settings.remoteInstances.page.field.bindHostHint": "Хто може відкрити прокинуту адресу на цьому комп’ютері. Сама віддалена машина в будь-якому разі лишається доступною тільки через SSH-тунель.",
"settings.remoteInstances.page.field.preferredLocalPort": "Порт на цьому комп’ютері",
"settings.remoteInstances.page.field.preferredLocalPortHint": "Порт, який відкриється на цьому комп’ютері для тунелю. Лишіть порожнім, щоб вибрався автоматично.",
"settings.remoteInstances.page.field.forwardType": "Тип переадресації",
"settings.remoteInstances.page.field.localHostPlaceholder": "127.0.0.1",
"settings.remoteInstances.page.field.remoteHostPlaceholder": "127.0.0.1",
@@ -386,6 +401,10 @@ export const settingsDict = {
"settings.common.actions.cancel": "Скасувати",
"settings.common.actions.create": "Створити",
"settings.common.actions.delete": "Видалити",
"settings.openchamber.appLinks.title": "Довірені посилання програм",
"settings.openchamber.appLinks.info": "Посилання в цьому списку відкриваються без повторного запиту на цьому пристрої. Для інших посилань програм ми завжди просимо підтвердження.",
"settings.openchamber.appLinks.empty": "На цьому пристрої ще немає довірених посилань програм. Виберіть «Довірити і відкрити» під час відкриття посилання, щоб додати його сюди.",
"settings.openchamber.appLinks.removeAria": "Видалити довірені посилання {scheme}",
"settings.common.actions.reset": "Скинути",
"settings.common.actions.rename": "Перейменувати",
"settings.common.actions.duplicate": "Дублювати",
@@ -431,6 +450,9 @@ export const settingsDict = {
"settings.openchamber.about.title": "Про OpenChamber",
"settings.openchamber.about.field.version": "Версія",
"settings.openchamber.about.field.openCodeVersion": "Версія OpenCode",
"settings.openchamber.about.field.instanceUrls": "URL-адреси екземпляра",
"settings.openchamber.about.field.applicationUrl": "Застосунок",
"settings.openchamber.about.field.tunnelUrl": "Тунель",
"settings.openchamber.about.state.checking": "Перевірка...",
"settings.openchamber.about.state.upToDate": "В актуальному стані",
"settings.openchamber.about.state.unknown": "невідомо",
@@ -847,16 +869,26 @@ export const settingsDict = {
"settings.skills.catalog.page.mode.manual": "Вручну",
"settings.skills.catalog.page.mode.external": "зовнішній",
"settings.skills.catalog.page.title": "Каталог навичок",
'settings.skills.catalog.page.subtitle': 'Встановлюйте готові скіли з курованих репозиторіїв або додайте власне джерело.',
'settings.skills.catalog.page.section.sources': 'Джерела',
'settings.skills.catalog.page.searchAllPlaceholder': 'Пошук скілів у всіх джерелах…',
'settings.skills.catalog.page.search.clear': 'Очистити пошук',
'settings.skills.catalog.page.source.skillsCount': 'Скілів: {count}',
'settings.skills.catalog.page.source.stars': 'Зірок: {count}',
'settings.skills.catalog.page.source.updated': 'Оновлено {time}',
'settings.skills.catalog.page.source.addOwnTitle': 'Додати власне джерело',
'settings.skills.catalog.page.source.addOwnDescription': 'Будь-який git-репозиторій зі скілами',
'settings.skills.catalog.page.source.viewRepo': 'Відкрити репозиторій на GitHub',
'settings.skills.catalog.page.skill.viewOnGithub': 'Переглянути скіл на GitHub',
'settings.skills.catalog.page.list.searchTitle': 'Результати пошуку',
"settings.skills.catalog.page.section.sourceRepository": "Репозиторій вихідного коду",
"settings.skills.catalog.page.field.selectSourcePlaceholder": "Виберіть джерело",
"settings.skills.catalog.page.actions.refreshTitle": "Оновити",
"settings.skills.catalog.page.actions.removeCatalogTitle": "Видалити каталог",
"settings.skills.catalog.page.actions.addCatalog": "Додати каталог",
"settings.skills.catalog.page.actions.removeCatalog": "Видалити каталог",
"settings.skills.catalog.page.actions.loadMoreSkills": "Завантажити додаткові навички",
"settings.skills.catalog.page.loading.catalog": "Завантаження...",
"settings.skills.catalog.page.loading.skills": "Завантаження навичок...",
"settings.skills.catalog.page.loading.more": "Завантаження...",
"settings.skills.catalog.page.foundCount": "Знайдено навички {count}",
"settings.skills.catalog.page.error.catalogTitle": "Помилка каталогу",
"settings.skills.catalog.page.empty.noSkillsTitle": "Навички не знайдено",
@@ -864,7 +896,6 @@ export const settingsDict = {
"settings.skills.catalog.page.badge.installed": "встановлено ({scope})",
"settings.skills.catalog.page.badge.notInstallable": "не встановлюється",
"settings.skills.catalog.page.badge.unknown": "невідомий",
"settings.skills.catalog.page.byOwnerPrefix": "за",
"settings.skills.catalog.page.removeDialog.title": "Видалити каталог",
"settings.skills.catalog.page.removeDialog.description": "Ви впевнені, що хочете видалити цей каталог?",
"settings.openchamber.passkeys.title": "Ключі доступу",
@@ -927,9 +958,9 @@ export const settingsDict = {
"settings.openchamber.desktopNetwork.field.macMenuBarAria": "Показувати OpenChamber у смузі меню macOS",
"settings.openchamber.desktopNetwork.field.macMenuBar": "Показувати OpenChamber у смузі меню",
"settings.openchamber.desktopNetwork.field.macMenuBarDescription": "Потребує перезапуску застосунку. Якщо вимкнено, OpenChamber не створює елемент смуги меню та не запускає пов’язані оновлення сесій, запитів на підтвердження й використання.",
"settings.openchamber.desktopNetwork.field.minimizeToTrayAria": "Згортати й закривати OpenChamber у системний трей",
"settings.openchamber.desktopNetwork.field.minimizeToTray": "Згортати й закривати в системний трей",
"settings.openchamber.desktopNetwork.field.minimizeToTrayDescription": "Залишає OpenChamber запущеним у системному треї, коли головне вікно згорнуто або закрито.",
"settings.openchamber.desktopNetwork.field.minimizeToTrayAria": "Закривати OpenChamber у системний трей",
"settings.openchamber.desktopNetwork.field.minimizeToTray": "Закривати в системний трей",
"settings.openchamber.desktopNetwork.field.minimizeToTrayDescription": "Залишає OpenChamber запущеним у системному треї, коли головне вікно закрито. Під час згортання вікно залишається на панелі завдань.",
"settings.openchamber.desktopNetwork.field.keepAwakeAria": "Не давати комп’ютеру засинати, поки OpenChamber запущено",
"settings.openchamber.desktopNetwork.field.keepAwake": "Не давати комп’ютеру засинати, поки OpenChamber запущено",
"settings.openchamber.desktopNetwork.field.keepAwakeDescription": "Щоб телефон і далі міг відкривати застосунок. Екран усе одно може вимикатися.",
@@ -956,15 +987,22 @@ export const settingsDict = {
"settings.openchamber.desktopNetwork.error.keepAwakeUnsupported": "Запобігання сну не підтримується на цій системі",
"settings.openchamber.desktopNetwork.error.keepAwakeSaveFailed": "Не вдалося оновити налаштування утримання комп’ютера активним",
"settings.openchamber.opencodeCli.title": "OpenCode CLI",
"settings.openchamber.tools.title": "Інструменти OpenChamber",
"settings.openchamber.tools.field.agentControlTool": "Інструмент керування для агентів",
"settings.openchamber.tools.field.agentControlToolAria": "Увімкнути інструмент керування для агентів",
"settings.openchamber.tools.field.agentControlToolInfo": "Дозвольте агентам оркеструвати вашу роботу з чату: створювати сесії та worktree, делегувати запити іншим агентам і керувати запланованими задачами. Додає невеликий опис інструмента до кожної сесії. Застосовується після перезапуску OpenCode.",
"settings.openchamber.tools.field.agentWebTool": "Інструмент OpenChamber Web",
"settings.openchamber.tools.field.agentWebToolAria": "Увімкнути інструмент OpenChamber Web",
"settings.openchamber.tools.field.agentWebToolInfo": "Дозвольте агентам переглядати сторінку в панелі браузера OpenChamber і взаємодіяти з нею: відкривати URL, читати вміст, клікати, вводити текст, гортати та перемикатися між мобільним і десктопним виглядом. Додає невеликий опис інструмента до кожної сесії. Застосовується після перезапуску OpenCode.",
"settings.openchamber.tools.field.agentMemoryTool": "Інструмент памʼяті агента",
"settings.openchamber.tools.field.agentMemoryToolAria": "Інструмент памʼяті агента",
"settings.openchamber.tools.field.agentMemoryToolInfo": "Дозволяє агентам зберігати вивчене між сесіями у двох сховищах: що правдиве про вас і що правдиве про кожен проєкт. Сесії отримують перелік заголовків, щоб агент міг прочитати потрібний запис. Вимкнення прибирає інструмент, вкладку «Памʼять» і індекс у сесії. Діє після перезапуску OpenCode.",
"settings.openchamber.opencodeCli.tooltipPrefix": "Додатковий абсолютний шлях до",
"settings.openchamber.opencodeCli.tooltipSuffix": "бінарного файлу.",
"settings.openchamber.opencodeCli.field.binaryPath": "Шлях до бінарного файлу OpenCode",
"settings.openchamber.opencodeCli.field.binaryPathPlaceholder": "/Users/you/.bun/bin/opencode",
"settings.openchamber.opencodeCli.field.showUpdateNotifications": "Показувати сповіщення про оновлення OpenCode",
"settings.openchamber.opencodeCli.field.showUpdateNotificationsAria": "Показувати сповіщення про оновлення OpenCode",
"settings.openchamber.opencodeCli.field.agentControlTool": "Інструмент керування для агентів",
"settings.openchamber.opencodeCli.field.agentControlToolAria": "Увімкнути інструмент керування для агентів",
"settings.openchamber.opencodeCli.field.agentControlToolInfo": "Дозвольте агентам оркеструвати вашу роботу з чату: створювати сесії та worktree, делегувати запити іншим агентам і керувати запланованими задачами. Додає невеликий опис інструмента до кожної сесії. Застосовується після Save + Reload.",
"settings.openchamber.opencodeCli.actions.browseAria": "Вибрати шлях до виконуваного файла OpenCode",
"settings.openchamber.opencodeCli.actions.browse": "Огляд",
"settings.openchamber.opencodeCli.actions.saveAndReload": "Зберегти й перезавантажити",
@@ -1063,7 +1101,7 @@ export const settingsDict = {
"settings.openchamber.keyboardShortcuts.overwritePrompt": "Ця комбінація вже використовується іншою комбінацією клавіш. Перезаписати та очистити інше зіставлення?",
"settings.openchamber.keyboardShortcuts.field.pressKeys": "Натисніть клавіші...",
"settings.openchamber.keyboardShortcuts.error.captureFirst": "Спочатку запишіть комбінацію клавіш.",
"settings.openchamber.keyboardShortcuts.warning.riskyBrowserShortcut": "Ця комбінація клавіш може конфліктувати зі стандартними скороченнями браузера. Її все одно збережено.",
"settings.openchamber.keyboardShortcuts.warning.riskyBrowserShortcut": "Ця комбінація клавіш може конфліктувати зі стандартними скороченнями браузера. Ви все одно можете її зберегти.",
"settings.openchamber.keyboardShortcuts.action.open_go_to_line.label": "Перейти до рядка (редактор файлів)",
"settings.openchamber.keyboardShortcuts.action.open_command_palette.label": "Відкрити палітру команд",
"settings.openchamber.keyboardShortcuts.action.focus_input.label": "Фокус на полі вводу",
@@ -1072,16 +1110,20 @@ export const settingsDict = {
"settings.openchamber.keyboardShortcuts.action.toggle_terminal_expanded.label": "Розгорнути або згорнути термінал",
"settings.openchamber.keyboardShortcuts.action.add_selection_to_chat.label": "Додати виділення в чат",
"settings.openchamber.keyboardShortcuts.action.toggle_sidebar.label": "Перемкнути бічну панель",
"settings.openchamber.keyboardShortcuts.action.toggle_right_sidebar.label": 'Перемкнути контекстну панель',
"settings.openchamber.keyboardShortcuts.action.open_right_sidebar_git.label": 'Відкрити поверхню Git',
"settings.openchamber.keyboardShortcuts.action.open_right_sidebar_files.label": 'Відкрити поверхню файлів',
"settings.openchamber.keyboardShortcuts.action.switch_session_tab.label": "Перемкнути вкладку сесії",
"settings.openchamber.keyboardShortcuts.action.switch_session_tab.suffix": " + 1…9",
"settings.openchamber.keyboardShortcuts.action.switch_context_surface.label": "Перемкнути поверхню панелі контексту",
"settings.openchamber.keyboardShortcuts.action.switch_context_surface.suffix": " + 1…0",
"settings.openchamber.keyboardShortcuts.action.new_chat.label": "Нова сесія",
"settings.openchamber.keyboardShortcuts.action.switch_session_previous.label": "Попередня сесія",
"settings.openchamber.keyboardShortcuts.action.switch_session_next.label": "Наступна сесія",
"settings.openchamber.keyboardShortcuts.action.rename_current_session.label": "Перейменувати поточну сесію",
"settings.openchamber.keyboardShortcuts.action.toggle_permission_auto_accept.label": "Перемкнути авто-дозволи",
"settings.openchamber.keyboardShortcuts.action.close_session_tab.label": "Закрити вкладку сесії",
"settings.openchamber.keyboardShortcuts.action.new_chat_worktree.label": "Нова чернетка worktree",
"settings.openchamber.keyboardShortcuts.action.new_mini_chat.label": "Нове вікно Mini Chat",
"settings.openchamber.keyboardShortcuts.action.open_help.label": "Відкрити комбінації клавіш",
"settings.openchamber.keyboardShortcuts.action.toggle_context_plan.label": "Перемкнути контекстну панель плану",
"settings.openchamber.keyboardShortcuts.action.toggle_services_menu.label": "Перемкнути меню сервісів",
"settings.openchamber.keyboardShortcuts.action.cycle_services_tab.label": "Перемкнути вкладку сервісів",
"settings.openchamber.keyboardShortcuts.action.cycle_theme.label": "Перемкнути тему",
"settings.openchamber.keyboardShortcuts.action.cycle_agent.label": "Перемкнути агента",
"settings.openchamber.keyboardShortcuts.action.cycle_favorite_model_forward.label": "Перемкнути улюблену модель вперед",
@@ -1090,15 +1132,39 @@ export const settingsDict = {
"settings.openchamber.keyboardShortcuts.action.expand_input.label": "Розгорнути введення",
"settings.openchamber.keyboardShortcuts.action.open_timeline_dialog.label": "Відкрити хронологію розмови",
"settings.openchamber.keyboardShortcuts.action.toggle_prompt_navigator.label": "Показати або приховати навігатор промптів",
"settings.openchamber.keyboardShortcuts.warning.contextualPrefix": "Ця послідовність має спільний контекстний префікс із дією {action}. Коли її контекст активний, ця дія має пріоритет.",
"settings.openchamber.keyboardShortcuts.category.session": "Керування сесією",
"settings.openchamber.keyboardShortcuts.category.models": "Моделі й агенти",
"settings.openchamber.keyboardShortcuts.category.panels": "Панелі та інструменти",
"settings.openchamber.keyboardShortcuts.category.navigation": "Навігація",
"settings.openchamber.keyboardShortcuts.category.application": "Застосунок",
"settings.openchamber.keyboardShortcuts.actions.edit": "Редагувати",
"settings.openchamber.keyboardShortcuts.actions.confirm": "Підтвердити",
"settings.openchamber.keyboardShortcuts.dialog.title": "Редагувати {action}",
"settings.openchamber.keyboardShortcuts.dialog.instructions": "Натисніть до двох комбінацій клавіш, не більше трьох клавіш у кожній. Після першої зачекайте до 3 секунд на другу комбінацію. Виберіть Підтвердити, щоб застосувати, або Скасувати, щоб відхилити. Backspace видаляє останню.",
"settings.openchamber.keyboardShortcuts.dialog.firstChord": "Перша комбінація",
"settings.openchamber.keyboardShortcuts.dialog.secondChord": "Друга комбінація",
"settings.openchamber.keyboardShortcuts.dialog.recording": "Натисніть клавіші…",
"settings.openchamber.keyboardShortcuts.unassigned": "Не призначено",
"settings.openchamber.keyboardShortcuts.error.prefixConflict": "Це конфліктує з послідовністю, яку використовує {action}. Виберіть іншу комбінацію.",
"settings.openchamber.keyboardShortcuts.error.exactConflict": "Цю комбінацію вже використовує {action}.",
"settings.openchamber.keyboardShortcuts.error.internalConflict": "Ця комбінація конфліктує з вбудованим скороченням, яке не можна замінити.",
"settings.openchamber.keyboardShortcuts.action.open_draft_project_picker.label": "Відкрити вибір проєкту чернетки",
"settings.openchamber.keyboardShortcuts.action.open_draft_worktree_picker.label": "Відкрити вибір worktree чернетки",
"settings.openchamber.keyboardShortcuts.action.open_session_list.label": "Відкрити останні сесії",
"settings.openchamber.keyboardShortcuts.action.toggle_dictation.label": "Голосове введення",
"settings.projects.sidebar.total": "Усього {count}",
"settings.projects.sidebar.actions.addProject": "Додати проєкт",
"settings.projects.page.empty.noProjects": "Немає доступних проєктів.",
"settings.projects.page.title.default": "Параметри проєкту",
"settings.projects.page.section.worktree": "Worktree",
"settings.projects.page.field.projectName": "Назва проєкту",
"settings.projects.page.field.projectModel": "Модель проєкту",
"settings.projects.page.field.projectThinking": "Міркування проєкту",
"settings.projects.page.section.chatDefaults": "Значення за замовчуванням для нових чатів",
"settings.projects.page.section.chatDefaultsDescription": "Використовується при старті нового чату в цьому проєкті. Якщо не задано, береться глобальне значення. Міркування показується лише для моделей, які мають рівні.",
"settings.projects.page.field.projectNamePlaceholder": "Назва проєкту",
"settings.projects.page.field.defaultModel": "Модель за замовчуванням для нових чатів",
"settings.projects.page.field.defaultModelDescription": "Використовується під час початку нового чату в цьому проєкті. Якщо не задано, застосовуються глобальні значення.",
"settings.projects.page.option.thinkingDefault": "Як у моделі",
"settings.projects.page.field.accentColor": "Колір акценту",
"settings.projects.page.field.projectIcon": "Значок проєкту",
"settings.projects.page.field.projectIconBackgroundAria": "Колір тла значка проєкту",
@@ -1132,15 +1198,15 @@ export const settingsDict = {
"settings.usage.sidebar.field.displayModePlaceholder": "Режим відображення",
"settings.usage.sidebar.field.displayModeUsage": "Використання",
"settings.usage.sidebar.field.displayModeRemaining": "Залишок квоти",
"settings.usage.sidebar.field.showPredictions": "Показувати прогнози",
"settings.usage.sidebar.status.notSet": "Не встановлено",
"settings.usage.page.empty.selectProvider": "Виберіть провайдера, щоб переглянути деталі використання.",
"settings.usage.page.header.providerUsage": "Використання {provider}",
"settings.usage.page.header.refreshing": "Оновлення використання...",
"settings.usage.page.header.lastUpdated": "Останнє оновлення: {time}",
"settings.usage.page.options.showInHeaderAria": "Показати в меню заголовка",
"settings.usage.page.options.showInHeader": "Показати в меню заголовка",
"settings.usage.page.options.showInHeaderTooltip": "Якщо ввімкнути, використання цього провайдера буде видно в спадному меню швидкого доступу в заголовку програми.",
"settings.usage.page.header.lastUpdatedWithPlan": "План: {plan} · Останнє оновлення: {time}",
"settings.usage.page.options.showInWorkStatusAria": "Показувати в панелі статусу роботи",
"settings.usage.page.options.showInWorkStatus": "Показувати в панелі статусу роботи",
"settings.usage.page.options.showInWorkStatusTooltip": "Якщо ввімкнути, використання цього провайдера буде видно в панелі статусу роботи.",
"settings.usage.page.state.noData": "Даних про використання ще немає.",
"settings.usage.page.state.refreshFailedTitle": "Не вдалося оновити дані про використання",
"settings.usage.page.state.providerNotConfiguredTitle": "Провайдер не налаштований",
@@ -1167,8 +1233,8 @@ export const settingsDict = {
"settings.remoteInstances.page.section.actionsDescription": "Підключіться, перепідключіться, перегляньте журнали або видаліть це підключення.",
"settings.remoteInstances.page.section.remoteServer": "OpenChamber на віддаленій машині",
"settings.remoteInstances.page.section.remoteServerDescription": "Виберіть, як OpenChamber має працювати після SSH-підключення.",
"settings.remoteInstances.page.section.mainTunnel": "Локальний доступ",
"settings.remoteInstances.page.section.mainTunnelDescription": "Виберіть локальну адресу, через яку відкриватиметься цей віддалений сервер OpenChamber.",
"settings.remoteInstances.page.section.mainTunnel": "Доступ із цього комп’ютера",
"settings.remoteInstances.page.section.mainTunnelDescription": "OpenChamber працює на віддаленій машині. Ці налаштування керують лише адресою на цьому комп’ютері, яка веде до неї через SSH-тунель.",
"settings.remoteInstances.page.section.authentication": "Аутентифікація",
"settings.remoteInstances.page.section.authenticationDescription": "Додаткові облікові дані для SSH та віддаленого інтерфейсу користувача OpenChamber.",
"settings.remoteInstances.page.section.portForwards": "Перенаправлення портів",
@@ -1181,8 +1247,6 @@ export const settingsDict = {
"settings.remoteInstances.page.field.installMethod": "Спосіб встановлення",
"settings.remoteInstances.page.field.installMethodHint": "Як розмістити OpenChamber на віддаленій машині, коли цей застосунок запускає його для вас.",
"settings.remoteInstances.page.field.selectInstallMethodPlaceholder": "Вибрати метод встановлення",
"settings.remoteInstances.page.field.installMethodDownloadRelease": "Завантажити випуск",
"settings.remoteInstances.page.field.installMethodUploadBundle": "Завантажити пакет",
"settings.remoteInstances.page.field.selectBindHostPlaceholder": "Вибрати bind host",
"settings.remoteInstances.page.field.sshPasswordOptional": "Пароль SSH (необов'язково)",
"settings.remoteInstances.page.field.sshPasswordPlaceholder": "Введіть пароль SSH",
@@ -1206,7 +1270,44 @@ export const settingsDict = {
"settings.remoteInstances.page.actions.enableForwardAria": "Увімкнути пересилання",
"settings.remoteInstances.page.actions.openLocal": "Відкрити локально",
"settings.remoteInstances.page.actions.addForward": "Додати переадресацію",
"settings.remoteInstances.page.import.sectionTitle": "Збережені SSH-хости",
"settings.remoteInstances.page.addDialog.description": "Виберіть хост зі свого SSH-конфігу або впишіть підключення вручну.",
"settings.remoteInstances.page.addDialog.sourceLabel": "Звідки береться підключення",
"settings.remoteInstances.page.addDialog.tab.saved": "З SSH-конфігу",
"settings.remoteInstances.page.addDialog.tab.manual": "Ввести вручну",
"settings.remoteInstances.page.addDialog.searchPlaceholder": "Пошук хостів",
"settings.remoteInstances.page.addDialog.emptySaved": "У вашому SSH-конфізі немає хостів. Впишіть підключення вручну.",
"settings.remoteInstances.page.addDialog.searchEmpty": "Жоден хост не збігається з пошуком.",
"settings.remoteInstances.page.addDialog.use": "Обрати",
"settings.remoteInstances.page.state.notConnected": "Не підключено",
"settings.remoteInstances.page.state.connecting": "Підключення",
"settings.remoteInstances.page.state.ready": "Підключено",
"settings.remoteInstances.page.state.problem": "Потрібна дія",
"settings.remoteInstances.page.section.advanced": "Додаткові налаштування",
"settings.remoteInstances.page.section.advancedHint": "Порти, спосіб встановлення, паролі та додаткові прокидання. Для більшості підключень достатньо значень за замовчуванням.",
"settings.remoteInstances.page.field.installMethodAuto": "Автоматично",
"settings.remoteInstances.page.error.hint.noRuntime": "На віддаленій машині немає ні bun, ні npm. Встановіть щось із них там або переведіть це підключення в режим «Вже запущено».",
"settings.remoteInstances.page.error.hint.noOpencode": "На віддаленій машині не встановлено opencode CLI. Встановіть його там (див. opencode.ai) і підключіться знову.",
"settings.remoteInstances.page.error.action.setUiPassword": "Задати пароль UI",
"settings.remoteInstances.page.error.action.pickRandomPort": "Взяти інший локальний порт",
"settings.remoteInstances.page.error.action.setRemotePort": "Задати віддалений порт",
"settings.remoteInstances.page.validation.externalPortRequired": "Спершу вкажіть віддалений порт. У режимі «Вже запущено» OpenChamber має знати, на якому порту слухає сервер.",
"settings.remoteInstances.page.empty.noInstances": "SSH-підключень ще немає.",
"settings.remoteInstances.page.field.uiPasswordRequired": "Пароль UI (обов’язковий)",
"settings.remoteInstances.page.field.uiPasswordMissingForLan": "Обов’язковий, поки віддалений сервер доступний у своїй мережі.",
"settings.remoteInstances.page.field.remoteLanAccess": "Доступ у мережі віддаленої машини",
"settings.remoteInstances.page.field.remoteLanAccessHint": "Дозволити іншим пристроям у мережі віддаленої машини відкривати цей OpenChamber напряму, без SSH-тунелю. Потрібен пароль UI.",
"settings.remoteInstances.page.field.remoteLanAccessWarning": "Будь-хто в тій мережі зможе дістатись віддаленого OpenChamber. Його захищає лише пароль UI нижче.",
"settings.remoteInstances.page.validation.remoteLanNeedsPassword": "Спершу задайте пароль UI. Без нього віддалений OpenChamber буде відкритий для всіх пристроїв у тій мережі.",
"settings.remoteInstances.page.field.bindHostOption.loopback": "Лише цей комп’ютер (127.0.0.1)",
"settings.remoteInstances.page.field.bindHostOption.localhost": "Лише цей комп’ютер (localhost)",
"settings.remoteInstances.page.field.bindHostOption.lan": "Будь-який пристрій у моїй мережі (0.0.0.0)",
"settings.remoteInstances.page.field.sshPasswordHint": "Потрібен лише тоді, коли цей хост питає пароль замість того, щоб приймати SSH-ключ.",
"settings.remoteInstances.page.field.uiPasswordHintManaged": "Пароль, яким буде захищено віддалений інтерфейс OpenChamber. OpenChamber задасть його серверу, який запускає для вас.",
"settings.remoteInstances.page.field.uiPasswordHintExternal": "Пароль сервера OpenChamber, який уже працює на віддаленій машині, для входу в нього.",
"settings.remoteInstances.page.tunnelPreview.caption": "Це підключення прокидає:",
"settings.remoteInstances.page.empty.noInstancesWithOneImport": "SSH-підключень ще немає. З вашого SSH-конфігу можна імпортувати 1 хост.",
"settings.remoteInstances.page.empty.noInstancesWithImports": "SSH-підключень ще немає. З вашого SSH-конфігу можна імпортувати {count} хостів.",
"settings.remoteInstances.page.state.loadingInstances": "Завантаження підключень...",
"settings.remoteInstances.page.import.loading": "Завантаження хостів SSH...",
"settings.remoteInstances.page.import.noneFound": "Не знайдено хостів SSH.",
"settings.remoteInstances.page.import.noneAvailable": "Немає доступних для імпорту хостів SSH.",
@@ -1304,13 +1405,18 @@ export const settingsDict = {
"settings.providers.page.custom.title": "Власний провайдер",
"settings.providers.page.custom.editTitle": "Редагувати власного провайдера",
"settings.providers.page.custom.description": "Додайте OpenAI-сумісного провайдера з базовою URL-адресою, обліковими даними та списком моделей. Зберігається в конфігурації OpenCode й працює в чаті як будь-який інший провайдер.",
"settings.providers.page.custom.description": "Додайте провайдера з базовою URL-адресою, обліковими даними, списком моделей і підтримуваним протоколом API. Зберігається в конфігурації OpenCode для використання в чаті.",
"settings.providers.page.custom.field.providerID.label": "ID провайдера",
"settings.providers.page.custom.field.providerID.placeholder": "mij-provider",
"settings.providers.page.custom.field.providerID.info": "Малі літери, цифри, дефіси та підкреслення. Використовується як ID провайдера OpenCode.",
"settings.providers.page.custom.field.name.label": "Відображувана назва",
"settings.providers.page.custom.field.name.placeholder": "Мій провайдер",
"settings.providers.page.custom.field.name.info": "Показується у виборі провайдера та моделі.",
"settings.providers.page.custom.field.protocol.label": "Протокол API",
"settings.providers.page.custom.field.protocol.info": "Виберіть формат запиту, який реалізує цей API.",
"settings.providers.page.custom.field.protocol.openaiChat": "OpenAI Chat Completions",
"settings.providers.page.custom.field.protocol.openaiResponses": "OpenAI Responses",
"settings.providers.page.custom.field.protocol.anthropicMessages": "Anthropic Messages",
"settings.providers.page.custom.field.baseURL.label": "Базова URL-адреса",
"settings.providers.page.custom.field.baseURL.placeholder": "https://api.example.com/v1",
"settings.providers.page.custom.field.baseURL.info": "Базова URL-адреса OpenAI-сумісного API. Має починатися з http:// або https://.",
@@ -1359,6 +1465,17 @@ export const settingsDict = {
"settings.providers.page.auth.apiKeyPlaceholder": "sk-...",
"settings.providers.page.auth.oauthMethodFallback": "OAuth метод {index}",
"settings.providers.page.auth.pasteAuthorizationCodePlaceholder": "Вставити код авторизації",
"settings.providers.page.auth.oauth.starting": "Запускаємо авторизацію…",
"settings.providers.page.auth.oauth.waiting": "Очікуємо на авторизацію…",
"settings.providers.page.auth.oauth.waitingHint": "Завершіть вхід у браузері. Не закривайте цю сторінку — підключення завершиться саме.",
"settings.providers.page.auth.oauth.codeHint": "Скопіюйте код авторизації з браузера і вставте його сюди.",
"settings.providers.page.auth.oauth.deviceCodeLabel": "Код пристрою",
"settings.providers.page.auth.oauth.linkLabel": "Посилання для авторизації",
"settings.providers.page.auth.oauth.promptRequired": "Заповніть «{field}», щоб продовжити",
"settings.providers.page.auth.oauth.error.sessionExpired": "Термін дії запиту на авторизацію минув. Підключіться ще раз, щоб почати заново.",
"settings.providers.page.auth.oauth.error.codeRequired": "Цьому провайдеру потрібен код авторизації з браузера.",
"settings.providers.page.auth.oauth.error.declined": "Авторизацію відхилено або не завершено.",
"settings.providers.page.auth.oauth.error.invalidInput": "Введені дані відхилено.",
"settings.providers.page.auth.connected": "Підключено",
"settings.providers.page.auth.incomplete": "Облікові дані відсутні",
"settings.providers.page.auth.incompleteHint": "· Додайте API-ключ або {env:VAR} перед використанням цього провайдера в чаті",
@@ -1391,6 +1508,9 @@ export const settingsDict = {
"settings.providers.page.actions.open": "Відкрити",
"settings.providers.page.actions.copy": "Копіювати",
"settings.providers.page.actions.complete": "Завершити",
"settings.providers.page.actions.continue": "Продовжити",
"settings.providers.page.actions.cancel": "Скасувати",
"settings.providers.page.actions.tryAgain": "Повторити спробу",
"settings.providers.page.actions.hide": "Сховати",
"settings.providers.page.actions.reconnect": "Перепідключити",
"settings.providers.page.actions.edit": "Редагувати",
@@ -1406,7 +1526,6 @@ export const settingsDict = {
"settings.providers.page.toast.apiKeySaved": "Ключ API збережено",
"settings.providers.page.toast.oauthStartFailed": "Не вдалося запустити потік OAuth",
"settings.providers.page.toast.oauthDetailsMissing": "Деталі OAuth не повернуто",
"settings.providers.page.toast.completeOAuthInBrowser": "Завершіть процес OAuth у вашому браузері",
"settings.providers.page.toast.oauthCompleteFailed": "Не вдалося завершити потік OAuth",
"settings.providers.page.toast.oauthCompleted": "Підключення OAuth завершено",
"settings.providers.page.toast.oauthLinkCopied": "Посилання OAuth скопійовано",
@@ -1428,6 +1547,8 @@ export const settingsDict = {
"settings.mcp.page.status.label.failed": "Не вдалося",
"settings.mcp.page.status.label.needsAuth": "Потрібна авторизація",
"settings.mcp.page.status.label.needsRegistration": "Потрібна реєстрація",
"settings.mcp.page.status.label.awaitingRestart": "Очікує перезапуску",
"settings.mcp.page.status.description.awaitingRestart": "Сервер збережено, але ще не застосовано. Натисніть Apply & Restart, щоб OpenCode його завантажив — після цього стануть доступні підключення та авторизація.",
"settings.mcp.page.status.description.connected": "Підключено, OpenCode може відкривати інструменти й ресурси.",
"settings.mcp.page.status.description.failedDefault": "OpenCode не вдалося отримати доступ до цього сервера MCP.",
"settings.mcp.page.status.description.needsAuth": "Цей віддалений сервер MCP потребує авторизації, перш ніж він зможе підключитися.",
@@ -1792,9 +1913,6 @@ export const settingsDict = {
"settings.voice.page.field.ttsInputModeSummarized": "скорочений",
"settings.openchamber.visual.section.colorMode": "Режим теми",
"settings.openchamber.visual.section.colorModeAndTheme": "Режим кольору та тема",
"settings.openchamber.visual.section.mobileLayout": "Мобільний макет",
"settings.openchamber.visual.option.mobileLayout.default": "Попередній",
"settings.openchamber.visual.option.mobileLayout.new": "Новий",
"settings.openchamber.visual.section.localization": "Локалізація",
"settings.openchamber.visual.section.spacingAndLayout": "Відступи й компонування",
"settings.openchamber.visual.section.densityAndType": "Щільність і шрифти",
@@ -1811,6 +1929,10 @@ export const settingsDict = {
"settings.openchamber.visual.section.showToolsOpenedByDefault": "Показувати інструменти відкритими за замовчуванням",
"settings.openchamber.visual.section.sessionAssistance": "Допомога із сесією",
"settings.openchamber.visual.section.reasoning": "Міркування",
"settings.openchamber.visual.section.streaming": "Стримінг",
"settings.openchamber.visual.field.streamingAutoFollow": "Слідкувати за новим вмістом під час стримінгу",
"settings.openchamber.visual.field.streamingAutoFollowAria": "Автоматично слідкувати за новим вмістом під час стримінгу відповіді",
"settings.openchamber.visual.field.streamingAutoFollowInfo": "Поки відповідь надходить, вигляд плавно рухається до найновішого вмісту. Вимкніть, щоб вигляд залишався нерухомим і гортати вручну; тоді й надсилання повідомлення з середини чату не зсуватиме вигляд.",
"settings.openchamber.visual.section.messageAppearance": "Вигляд повідомлень",
"settings.openchamber.visual.section.toolsAndFiles": "Інструменти та файли",
"settings.openchamber.visual.section.composer": "Поле вводу",
@@ -1831,8 +1953,6 @@ export const settingsDict = {
"settings.openchamber.visual.field.selectTimeFormatAria": "Вибрати формат часу",
"settings.openchamber.visual.field.selectWeekStartAria": "Вибрати початок тижня",
"settings.openchamber.visual.actions.reloadThemes": "Перезавантажити теми",
"settings.openchamber.visual.field.macVibrancy": "Прозорість вікна",
"settings.openchamber.visual.field.macVibrancyHint": "Використовувати нативне розмиття macOS (vibrancy) під сайдбаром. Вимкніть для повністю непрозорих поверхонь.",
"settings.openchamber.visual.field.dockBadge": "Лічильник у доку",
"settings.openchamber.visual.field.dockBadgeHint": "Показувати на іконці в доку кількість чатів із непрочитаною активністю.",
"settings.openchamber.visual.actions.saveAndRestart": "Зберегти та перезапустити",
@@ -1879,6 +1999,10 @@ export const settingsDict = {
"settings.openchamber.visual.actions.resetInputBarOffsetAria": "Скинути зміщення панелі вводу",
"settings.openchamber.visual.field.terminalQuickKeysAria": "Швидкі клавіші терміналу",
"settings.openchamber.visual.field.terminalQuickKeys": "Швидкі клавіші терміналу",
"settings.openchamber.visual.field.sessionTabsGroup": "Вкладки сесій",
"settings.openchamber.visual.field.sessionTabs": "Показувати сесії як вкладки в хедері",
"settings.openchamber.visual.field.sessionTabsAria": "Перемкнути вкладки сесій у хедері",
"settings.openchamber.visual.field.sessionTabsInfo": "Відкриті сесії шикуються вкладками в хедері. Якщо вимкнено, хедер знову показує лише назву сесії.",
"settings.openchamber.visual.field.terminalQuickKeysTooltip": "Показати Esc, Ctrl, стрілки в поданні терміналу",
"settings.openchamber.visual.field.fileEditorKeymap": "Розкладка клавіш редактора файлів",
"settings.openchamber.visual.option.fileEditorKeymap.default": "Типова",
@@ -1911,8 +2035,6 @@ export const settingsDict = {
"settings.openchamber.visual.field.stickyUserHeader": "Закріплений заголовок користувача",
"settings.openchamber.visual.field.promptNavigatorEnabledAria": "Навігатор промптів",
"settings.openchamber.visual.field.promptNavigatorEnabled": "Навігатор промптів",
"settings.openchamber.visual.field.expandedEditorToolbarAria": "Завжди показувати панель інструментів редактора",
"settings.openchamber.visual.field.expandedEditorToolbar": "Завжди показувати панель інструментів редактора (закріплена під вкладками)",
"settings.openchamber.visual.field.autoSaveEnabledAria": "Автозбереження файлів",
"settings.openchamber.visual.field.autoSaveEnabled": "Автозбереження файлів",
"settings.openchamber.visual.field.autoSaveEnabledInfo": "Автоматично зберігати зміни у файлі після того, як ви припините друкувати. Вимкніть, щоб зберігати лише вручну.",
@@ -2030,7 +2152,7 @@ export const settingsDict = {
"settings.magicPrompts.page.group.planImprove.title": "Поліпшити план",
"settings.magicPrompts.page.group.planImprove.description": "Прихований промпт, який використовується під час надсилання збереженого плану в потік покращення.",
"settings.magicPrompts.page.group.planTodo.title": "Планування Todo",
"settings.magicPrompts.page.group.planTodo.description": "Прихований промпт, який використовується під час надсилання завдання до нового сесії планування.",
"settings.magicPrompts.page.group.planTodo.description": "Прихований промпт, який використовується під час надсилання завдання до нової сесії планування.",
"settings.magicPrompts.page.group.planImplement.title": "Реалізувати план",
"settings.magicPrompts.page.group.planImplement.description": "Прихований промпт, який використовується під час надсилання збереженого плану в потік реалізації.",
"settings.magicPrompts.page.group.sessionSummary.title": "Підсумок сесії",
@@ -2105,4 +2227,5 @@ export const settingsDict = {
"settings.openchamber.visual.field.followUpBehaviorDescription": "Choose what happens when you press Enter on a follow-up message while the agent is still responding.",
"settings.openchamber.visual.option.followUpBehavior.steer.label": "Steer",
"settings.openchamber.visual.option.followUpBehavior.queue.label": "Queue",
...thirdPartyIntegrationI18n.uk,
} as const;
+386 -48
View File
@@ -6,6 +6,19 @@ export const dict: Record<I18nKey, string> = {
'terminalView.actions.attachSelection': 'Прикріпити вибраний вивід',
'terminalView.actions.restart': 'Перезапустити термінал',
'chat.message.terminalContext': '{terminal}, рядки {start}-{end}',
'chat.message.context.codeComment': 'Коментар до {file}, рядки {start}-{end}',
'chat.message.context.codeCommentLine': 'Коментар до {file}, рядок {line}',
'chat.message.context.chatQuote': 'Цитата з попереднього повідомлення',
'chat.message.context.fileQuote': 'Виділене з {file}',
'chat.chatInput.chatQuoteContext': 'Цитати з чату',
'chat.chatInput.chatQuoteContextRemove': 'Прибрати цитати з чату',
'chat.chatInput.contextPreview.selectedLabel': 'Виділений текст',
'chat.chatInput.contextPreview.commentLabel': 'Коментар користувача',
'chat.chatInput.contextPreview.edit': 'Редагувати коментар',
'chat.chatInput.contextPreview.remove': 'Прибрати',
'chat.message.context.browserAnnotation': 'Анотація браузера ({page})',
'chat.message.context.prComment': 'Коментар PR GitHub ({label})',
'chat.message.context.prCheck': 'Невдала перевірка PR GitHub ({label})',
'chat.chatInput.terminalContext': '{terminal}, рядки {start}-{end}',
'chat.chatInput.terminalContextRemove': 'Видалити контекст термінала',
'chat.chatInput.prCommentContext': 'Коментарі PR',
@@ -25,6 +38,7 @@ export const dict: Record<I18nKey, string> = {
"common.language.korean": "Корейська",
"common.language.polish": "Польська",
"common.language.japanese": "Японська",
"common.language.turkish": "Турецька",
"common.revealPath.finder": "Показати у Finder",
"common.revealPath.fileExplorer": "Відкрити у File Explorer",
"common.revealPath.fileManager": "Відкрити у файловому менеджері",
@@ -86,6 +100,11 @@ export const dict: Record<I18nKey, string> = {
"mobile.instances.label.label": "Назва",
"mobile.instances.label.placeholder": "Необовʼязкова назва",
"mobile.instances.saveNew": "Зберегти інстанс",
"mobile.connectionDebug.title": "Журнал з'єднання",
"mobile.connectionDebug.copy": "Копіювати",
"mobile.connectionDebug.copied": "Скопійовано",
"mobile.connectionDebug.close": "Закрити",
"mobile.connectionDebug.empty": "Поки немає подій з'єднання.",
"mobile.instances.status.connectedDirect": "Підключено · Локальна мережа",
"mobile.instances.status.connectedRelay": "Підключено · Приватний relay",
"mobile.instances.saveEdit": "Зберегти зміни",
@@ -112,6 +131,7 @@ export const dict: Record<I18nKey, string> = {
"mobile.sessions.section.worktrees": "Worktrees",
"mobile.sessions.section.otherProjects": "Інші проєкти",
"mobile.sessions.section.projects": "Проєкти",
"mobile.sessions.section.chats": "Чати",
"mobile.sessions.empty.noProjectsTitle": "Ще немає проєктів",
"mobile.sessions.empty.noProjectsDescription": "Додай проєкт, щоб почати спілкування з кодом.",
"mobile.sessions.empty.noSessionsTitle": "Ще немає сесій",
@@ -232,8 +252,10 @@ export const dict: Record<I18nKey, string> = {
"sessions.scheduledTasks.dialog.toast.deleted": "Заплановане завдання видалено",
"sessions.scheduledTasks.dialog.toast.deleteFailed": "Не вдалося видалити завдання",
"sessions.scheduledTasks.dialog.toast.started": "Завдання розпочато",
"sessions.scheduledTasks.dialog.toast.startedPersistWarning": "Завдання запущено, але його стан не вдалося зберегти. Воно може й надалі відображатися як виконуване до наступного успішного запуску.",
"sessions.scheduledTasks.dialog.toast.runFailed": "Не вдалося виконати завдання",
"sessions.scheduledTasks.dialog.confirm.deleteTask": "Видалити заплановане завдання \"{taskName}\"?",
'sessions.scheduledTasks.dialog.confirm.deleteLoopFile': 'Видалити циклічне завдання «{taskName}» і його Markdown-файл?',
"sessions.scheduledTasks.dialog.schedule.daily": "Щодня {time}",
"sessions.scheduledTasks.dialog.schedule.dailyWithTimezone": "Щодня {time} ({timezone})",
"sessions.scheduledTasks.dialog.schedule.weekly": "Щотижня {days} {time}",
@@ -269,6 +291,9 @@ export const dict: Record<I18nKey, string> = {
"sessions.scheduledTasks.dialog.taskToggle.pauseAria": "Призупинити {taskName}",
"sessions.scheduledTasks.dialog.taskToggle.enabled": "Увімкнено",
"sessions.scheduledTasks.dialog.taskToggle.paused": "Призупинено",
'sessions.scheduledTasks.dialog.loopFile.note': 'Керується файлом циклу {file}',
'sessions.scheduledTasks.dialog.loopFile.toggleDisabled': 'Активність контролюється файлом циклу; встановіть enabled у frontmatter Markdown',
'sessions.scheduledTasks.dialog.loopFile.actionsDisabled': 'Завдання циклів налаштовуються у файлі Markdown .agents/loops',
"sessions.scheduledTasks.editor.title.edit": "Редагувати заплановане завдання",
"sessions.scheduledTasks.editor.title.new": "Нове заплановане завдання",
"sessions.scheduledTasks.editor.description": "Налаштувати завдання на стороні сервера, яке створює нову сесію і надсилає запит.",
@@ -361,7 +386,7 @@ export const dict: Record<I18nKey, string> = {
"multirun.launcher.attachments.attach": "Прикріпити",
"multirun.launcher.attachments.tooltip": "Ті самі файли буде надіслано в усі запуски",
"multirun.launcher.models.label": "Моделі",
"multirun.launcher.models.info": "Вибрати моделі 2-{max}. Ту саму модель можна додавати кілька разів.",
"multirun.launcher.models.info": "Вибрати 2 або більше моделей. Ту саму модель можна додавати кілька разів.",
"multirun.launcher.toast.fileTooLarge": "Файл \"{fileName}\" завеликий (макс. 10 МБ)",
"multirun.launcher.toast.attachFailed": "Не вдалося вкласти \"{fileName}\"",
"multirun.launcher.toast.attachedSingle": "Прикріплено файл: {count}",
@@ -428,9 +453,16 @@ export const dict: Record<I18nKey, string> = {
"sessions.sidebar.empty.noMatches.title": "Немає відповідних сесій",
"sessions.sidebar.empty.noMatches.description": "Спробуйте інший заголовок, гілку, папку або шлях.",
"sessions.sidebar.activity.recentTitle": "Останні",
"sessions.sidebar.activity.chatsTitle": "Чати",
"sessions.sidebar.activity.chatsEmpty": "Чатів ще немає.",
"chat.chatInput.chooseProject": "Вибрати проєкт",
"sessions.archivePage.allDirectories": "Всі директорії",
"sessions.sidebar.header.displayMode.stickyHeaders": "Липкі заголовки проектів",
"sessions.sidebar.header.grouping.label": "Групування сесій",
"sessions.sidebar.header.projectDisplay.label": "Показувати проєкти",
"sessions.sidebar.header.projectDisplay.all": "Усі проєкти",
"sessions.sidebar.header.projectDisplay.single": "Один проєкт",
"sessions.sidebar.project.selectAria": "Вибрати проєкт, зараз {project}",
"sessions.sidebar.header.grouping.byWorktree": "За worktree",
"sessions.sidebar.header.grouping.flat": "Плаский список",
"sessions.sidebar.project.actions.manageWorktrees": "Керувати worktree",
@@ -452,6 +484,10 @@ export const dict: Record<I18nKey, string> = {
"sessions.archivePage.deleteSessionAria": "Видалити {title}",
"sessions.archivePage.restoreSessionAria": "Відновити {title}",
"sessions.switcher.openAria": "Відкрити перемикач сесій",
"header.sessionTabs.stripAria": "Відкриті сесії",
"header.sessionTabs.tabMenuAria": "Дії вкладки сесії",
"header.sessionTabs.closeTab": "Закрити вкладку",
"header.sessionTabs.closeOtherTabs": "Закрити інші вкладки",
"sessions.switcher.empty": "Немає недавніх сесій",
"sessions.switcher.draftTitle": "Нова сесія",
"sessions.sidebar.updateCheck.errorTitle": "Не вдалося перейти на наявність оновлень",
@@ -470,12 +506,12 @@ export const dict: Record<I18nKey, string> = {
"sessions.sidebar.bulkActions.failedDeletePlural": "Не вдалося видалити сесії {count}",
"sessions.sidebar.bulkActions.archivedSingle": "Заархівовано сесію: {count}",
"sessions.sidebar.bulkActions.archivedPlural": "Заархівовано сесій: {count}",
"sessions.sidebar.bulkActions.failedArchiveSingle": "Не вдалося архівувати сесія {count}",
"sessions.sidebar.bulkActions.failedArchiveSingle": "Не вдалося архівувати сесію {count}",
"sessions.sidebar.bulkActions.failedArchivePlural": "Не вдалося архівувати сесії {count}",
"sessions.sidebar.bulkActions.restore": "Відновити",
"sessions.sidebar.bulkActions.restoredSingle": "Відновлено сесію: {count}",
"sessions.sidebar.bulkActions.restoredPlural": "Відновлено сесій: {count}",
"sessions.sidebar.bulkActions.failedRestoreSingle": "Не вдалося відновити сесія {count}",
"sessions.sidebar.bulkActions.failedRestoreSingle": "Не вдалося відновити сесію {count}",
"sessions.sidebar.bulkActions.failedRestorePlural": "Не вдалося відновити сесії {count}",
"sessions.sidebar.folders.none": "Папок ще немає",
"sessions.sidebar.folders.newFolderEllipsis": "Нова папка...",
@@ -503,11 +539,33 @@ export const dict: Record<I18nKey, string> = {
"sessions.sidebar.session.menu.unshare": "Скасувати спільний доступ",
"sessions.sidebar.session.menu.exportMarkdown": "Експорт Markdown",
"sessions.sidebar.session.menu.moveToWorktree": "Перенести в новий worktree",
"sessions.sidebar.session.menu.moveToWorktreeTargets": "Перенести в worktree",
"sessions.sidebar.session.menu.newWorktree": "Новий worktree...",
"sessions.sidebar.session.moveToWorktree.success": "Сесію перенесено в новий worktree",
"sessions.sidebar.session.moveToWorktree.failed": "Не вдалося перенести сесію в новий worktree",
"sessions.sidebar.session.moveToWorktree.tooltip": "Створює новий worktree з поточної гілки, переносить незакомічені зміни та переміщує туди цю сесію і її підсесії.",
"sessions.sidebar.session.moveToWorktree.main": "Основний worktree",
"sessions.sidebar.session.moveToWorktree.refreshing": "Оновлення worktree...",
"sessions.sidebar.session.moveToWorktree.loadFailed": "Не вдалося завантажити worktree",
"sessions.sidebar.session.moveToWorktree.current": "Поточний worktree",
"sessions.sidebar.session.moveToWorktree.existingSuccess": "Сесію перенесено в worktree",
"sessions.sidebar.session.moveToWorktree.existingFailed": "Не вдалося перенести сесію в worktree",
"sessions.sidebar.session.moveToWorktree.tooltipTargets": "Показує наявні worktree і можливість створити новий для цієї сесії.",
"sessions.sidebar.session.moveToWorktree.tooltip": "Створює новий worktree з поточної гілки та переміщує туди цю сесію і її підсесії. Якщо у джерелі є незакомічені зміни, ви обираєте, переносити їх чи ні.",
"sessions.sidebar.session.moveToWorktree.tooltipBusy": "Доступно, коли сесія неактивна. Зупиніть поточну активність або дочекайтеся її завершення.",
"sessions.sidebar.session.moveToWorktree.tooltipMoving": "Ця сесія вже переноситься в новий worktree.",
"sessions.sidebar.session.moveToWorktree.confirm.title": "У джерелі є незакомічені зміни",
"sessions.sidebar.session.moveToWorktree.confirm.changedFiles": "Змінені файли у цьому worktree: {count}.",
"sessions.sidebar.session.moveToWorktree.confirm.ownership": "OpenCode відстежує ці зміни за каталогом, а не за сесією.",
"sessions.sidebar.session.moveToWorktree.confirm.sessionOnlyHelp": "Переносить цю сесію та її підсесії, не змінюючи жодного файла джерела.",
"sessions.sidebar.session.moveToWorktree.confirm.allChangesHelp": "Переносить зміни з каталогу сесії. Незакомічені та невідстежувані файли залишають джерело після успіху.",
"sessions.sidebar.session.moveToWorktree.confirm.stagedWarning": "Закомічені в індекс зміни залишаються в джерелі та копіюються до призначення.",
"sessions.sidebar.session.moveToWorktree.confirm.baseWarning": "Перенесення може не вдатися, якщо призначення використовує іншу базу Git.",
"sessions.sidebar.session.moveToWorktree.confirm.sessionOnly": "Перенести лише сесію",
"sessions.sidebar.session.moveToWorktree.confirm.allChanges": "Перенести всі зміни з джерела",
"sessions.sidebar.session.moveToWorktree.confirm.cancel": "Скасувати",
"sessions.sidebar.session.moveToWorktree.sourceVerificationFailed": "Не вдалося перевірити зміни в джерелі. Жоден worktree чи сесію не змінено.",
"sessions.sidebar.session.moveToWorktree.applyChangesFailed": "Призначення не змогло прийняти зміни з джерела. Сесію та зміни в джерелі не перенесено. Спробуйте знову й оберіть Перенести лише сесію.",
"sessions.sidebar.session.moveToWorktree.changesMayBeInDestination": "З’єднання обірвалося, перш ніж призначення підтвердило перенесення. Сесія могла не переїхати, а незакомічені зміни можуть уже бути в цільовому worktree. Перевірте його, перш ніж повторювати.",
"sessions.sidebar.session.menu.runFusion": "Запустити fusion",
"sessions.sidebar.session.menu.openInSidePanel": "Відкрити на бічній панелі",
"sessions.sidebar.session.actions.openInEditor": "Відкрити в редакторі",
@@ -526,15 +584,19 @@ export const dict: Record<I18nKey, string> = {
"sessions.sidebar.session.export.dialog.descriptionMany": "Ця сесія має {count} завдань під-агентів. Додати їх до експорту?",
"sessions.sidebar.session.export.dialog.includeSubtasks": "Додати завдання під-агентів",
"sessions.sidebar.session.export.dialog.confirm": "Експортувати",
"sessions.sidebar.session.status.active": "Сесія активний",
"sessions.sidebar.session.status.active": "Сесія активна",
"sessions.sidebar.session.status.unread": "Непрочитані оновлення",
"sessions.sidebar.session.status.pinned": "Закріплений сесія",
"sessions.sidebar.session.status.pinned": "Закріплена сесія",
"sessions.sidebar.session.status.movingToWorktree": "Перенесення сесії в новий worktree",
"sessions.sidebar.session.status.permissionRequired": "Потрібен дозвіл",
"sessions.sidebar.session.status.questionPendingSingle": "1 запитання очікує відповіді",
"sessions.sidebar.session.status.questionPendingMany": "Кількість запитань, що очікують відповіді: {count}",
"sessions.sidebar.session.status.activeFor": "Активна вже {duration}",
"sessions.sidebar.session.status.lastTurnDuration": "Останній хід тривав {duration}",
"sessions.sidebar.session.subsessions.collapse": "Згорнути підсесії",
"sessions.sidebar.session.subsessions.expand": "Розгорнути підсесії",
"sessions.sidebar.dialogs.deleteSession.title": "Видалити сесія?",
"sessions.sidebar.dialogs.archiveSession.title": "Архівувати сесія?",
"sessions.sidebar.dialogs.deleteSession.title": "Видалити сесію?",
"sessions.sidebar.dialogs.archiveSession.title": "Архівувати сесію?",
"sessions.sidebar.dialogs.deleteSession.withOneSubtask": "\"{sessionTitle}\" і його підзавдання {count} буде остаточно видалено.",
"sessions.sidebar.dialogs.deleteSession.withManySubtasks": "\"{sessionTitle}\" і його підзавдання {count} буде остаточно видалено.",
"sessions.sidebar.dialogs.archiveSession.withOneSubtask": "\"{sessionTitle}\" і його підзавдання {count} буде заархівовано.",
@@ -543,7 +605,7 @@ export const dict: Record<I18nKey, string> = {
"sessions.sidebar.dialogs.archiveSession.single": "\"{sessionTitle}\" буде заархівовано.",
"sessions.sidebar.dialogs.neverAsk": "Більше не питати",
"sessions.sidebar.dialogs.cancel": "Скасувати",
"sessions.sidebar.dialogs.deleteSession.titleAction": "Видалити сесія",
"sessions.sidebar.dialogs.deleteSession.titleAction": "Видалити сесію",
"sessions.sidebar.dialogs.deleteSessions.titleAction": "Видалити сесії",
"sessions.sidebar.dialogs.deleteSessions.title": "Видалити сесії?",
"sessions.sidebar.dialogs.archiveSessions.title": "Архівувати сесії?",
@@ -623,7 +685,7 @@ export const dict: Record<I18nKey, string> = {
"sessions.sidebar.folderItem.deleteFolderAria": "Видалити папку {folderName}",
"sessions.sidebar.folderItem.emptyFolder": "Порожня папка",
"sessions.sidebar.sessionDialogs.ok": "OK",
"sessions.sidebar.sessionDialogs.linkedSessionSingle": "Пов’язаний сесія",
"sessions.sidebar.sessionDialogs.linkedSessionSingle": "Пов’язана сесія",
"sessions.sidebar.sessionDialogs.linkedSessionPlural": "Пов’язані сесії",
"sessions.sidebar.sessionDialogs.delete.note": "Каталоги worktree залишаються недоторканими. Підсесії, пов’язані з вибраними сесіями, також буде видалено.",
"sessions.sidebar.sessionDialogs.directory.errorSelectTitle": "Не вдалося вибрати каталог",
@@ -984,6 +1046,8 @@ export const dict: Record<I18nKey, string> = {
"gitView.pr.field.draft": "Чернетка",
"gitView.pr.field.title": "Назва",
"gitView.pr.githubNotConnected": "GitHub не підключено",
"gitView.pr.history.merged": "PR #{number} злито в {base}.",
"gitView.pr.history.closed": "PR #{number} закрито.",
"gitView.pr.loadingDescription": "Завантаження опису...",
"gitView.pr.mergeMethod.merge": "Створити коміт злиття",
"gitView.pr.mergeMethod.rebase": "Перебазувати та злити",
@@ -1100,11 +1164,20 @@ export const dict: Record<I18nKey, string> = {
"contextPanel.mode.context": "Контекст",
"contextPanel.mode.preview": "Перегляд",
"contextPanel.mode.browser": "Браузер",
"contextRail.configure.open": "Налаштувати панелі",
"contextRail.configure.dialogTitle": "Панелі рейки",
"contextRail.configure.dialogDescription": "Обери, які панелі показує рейка. Приховані панелі зберігають дані й доступні з палітри команд.",
"contextRail.configure.showAll": "Показати всі",
"contextRail.configure.noneWarning": "Усі панелі приховано.",
"contextRail.aria.rail": "Поверхні панелі",
"contextPanel.editorEmpty.title": "Файл не відкрито",
"contextPanel.editorEmpty.description": "Виберіть файл у дереві, щоб почати редагування.",
"contextRail.surface.editor.description": "Редагування файлів проєкту",
"contextRail.surface.git.description": "Коміти, гілки та pull request-и",
"contextRail.surface.git.changesCountAriaSingle": "{label}, {count} змінений файл",
"contextRail.surface.git.changesCountAriaPlural": "{label}, {count} змінених файлів",
"contextRail.surface.git.changesCountTooltipSingle": "{count} змінений файл",
"contextRail.surface.git.changesCountTooltipPlural": "{count} змінених файлів",
"contextRail.surface.terminal.description": "Вбудований термінал",
"contextRail.surface.diff.description": "Перегляд поточних змін",
"contextPanel.mode.walkthrough": "Розбір",
@@ -1144,8 +1217,11 @@ export const dict: Record<I18nKey, string> = {
"walkthrough.toc.moreFiles": "Ще файлів: {count}",
"walkthrough.toc.uncovered": "Не описано: {count}",
"walkthrough.toc.resize": "Змінити ширину колонки змісту",
"walkthrough.importance.critical": "Критично",
"walkthrough.importance.critical": "Ключова зміна",
"walkthrough.importance.criticalHint": "Цей крок веде за собою решту зміни, тож прочитайте його уважно. Це не знайдена у вашому коді проблема.",
"walkthrough.importance.context": "Контекст",
"walkthrough.importance.contextHint": "Допоміжна зміна, додана, щоб решта мала сенс.",
"walkthrough.help.guide": "Як працюють walkthrough",
"walkthrough.blocked.noModel.title": "Немає доступної small model",
"walkthrough.blocked.noModel.description": "Увійдіть до провайдера моделей, щоб створити розбір.",
"walkthrough.blocked.emptyDiff.title": "Немає що оглядати",
@@ -1160,22 +1236,77 @@ export const dict: Record<I18nKey, string> = {
"walkthrough.blocked.outputExhausted.descriptionUnknownModel": "Small model витратила весь бюджет виводу на роздуми й нічого не повернула. Reasoning-моделі часто так поводяться на великих diff — допоможе модель, яка менше «думає», або вужча область огляду.",
"walkthrough.blocked.onlyGenerated.title": "Змінились лише згенеровані файли",
"walkthrough.blocked.onlyGenerated.description": "Усі зміни тут — це lock-файли чи інший результат роботи інструментів, які розбір свідомо пропускає.",
"walkthrough.blocked.serverUnsupported.title": "Цей сервер не підтримує walkthrough",
"walkthrough.blocked.serverUnsupported.description": "Сервер OpenChamber, до якого підключено застосунок, не відповів на walkthrough API — отже, він старіший за застосунок. Оновіть сервер до 1.18 або новішої версії та оновіть панель.",
"walkthrough.blocked.contextTooSmall.descriptionUnknownModel": "Small model вміщає близько {available} тис. символів, а цьому diff потрібно близько {required} тис. Нічого не обрізається — оберіть модель із більшим контекстом.",
"walkthrough.blocked.structuredOutput.descriptionUnknownModel": "Small model не підтримує структуровані відповіді, потрібні для розбору.",
"contextRail.surface.plan.description": "Перегляд поточного плану",
"contextRail.surface.pr.description": "Створюйте, переглядайте та зливайте pull request поточної гілки",
"contextRail.surface.notes.description": "Нотатки, задачі та плани проєкту",
"contextRail.surface.notes.description": "Нотатки, завдання, плани та памʼять агента для проєкту",
"contextRail.surface.context.description": "Контекст сесії та використання токенів",
"contextRail.surface.browser.description": "Вбудований браузер",
"contextRail.surface.preview.description": "Перегляд дев-сервера",
"contextRail.surface.chat.description": "Сесія, відкрита поруч",
"contextRail.surface.notes": "Нотатки проєкту",
"contextRail.surface.notes": "Знання проєкту",
"contextRail.editorTree.toggle": "Перемкнути дерево файлів",
"contextPanel.browser.open": "Відкрити панель браузера",
"contextPanel.browser.addressAria": "Адреса браузера",
"contextPanel.browser.history.label": "Нещодавні адреси",
"contextPanel.browser.history.forget": "Прибрати з історії",
"contextPanel.browser.newTab": "Нова вкладка браузера",
"contextPanel.browser.empty": "Веб-браузер",
"contextPanel.browser.emptyHint": "Введіть адресу вище, щоб почати перегляд",
"contextPanel.browser.inspectUnavailable": "Цю сторінку неможливо інспектувати з панелі браузера.",
"contextPanel.browser.back": "Назад",
"contextPanel.browser.forward": "Вперед",
"contextPanel.browser.reload": "Перезавантажити",
"contextPanel.browser.hardReload": "Перезавантажити без кешу",
"contextPanel.browser.zoomIn": "Збільшити",
"contextPanel.browser.zoomOut": "Зменшити",
"contextPanel.browser.zoomReset": "Скинути масштаб",
"contextPanel.browser.clearCookies": "Очистити cookies",
"contextPanel.browser.clearCache": "Очистити кеш",
"contextPanel.browser.clearedCookies": "Cookies очищено",
"contextPanel.browser.clearedCache": "Кеш очищено",
"contextPanel.browser.clearFailed": "Не вдалося очистити дані браузера",
"contextPanel.browser.stop": "Зупинити",
"contextPanel.browser.openExternal": "Відкрити в системному браузері",
"contextPanel.browser.devTools": "Відкрити DevTools",
"contextPanel.browser.deviceToolbar": "Панель пристроїв",
"contextPanel.browser.device.preset": "Пресет пристрою",
"contextPanel.browser.device.responsive": "Адаптивно",
"contextPanel.browser.device.width": "Ширина вьюпорта",
"contextPanel.browser.device.height": "Висота вьюпорта",
"contextPanel.browser.device.rotate": "Повернути",
"contextPanel.browser.device.schemeSystem": "Авто",
"contextPanel.browser.device.schemeLight": "Світла",
"contextPanel.browser.device.schemeDark": "Темна",
"contextPanel.browser.device.schemeFailed": "Не вдалося змінити оформлення сторінки",
"contextPanel.browser.frameTitle": "Браузер",
"contextPanel.browser.loadFailed": "Не вдалося завантажити цю сторінку",
"contextPanel.browser.waitingForServer": "Очікування dev-сервера",
"contextPanel.browser.waitingForServerHint": "Він ще не приймає зʼєднання. Сторінка завантажиться, щойно почне.",
"contextPanel.browser.tunnelFailed": "Не вдалося дістатися цього dev-сервера",
"contextPanel.browser.tunnelFailedHint": "{url} працює на машині, де запущено OpenChamber, і зʼєднання з ним відкрити не вдалося. Нічого зі своєї машини тут не показано.",
"contextPanel.browser.loadFailedUnknown": "Не вдалося звернутися до сторінки.",
"contextPanel.browser.crashed": "Ця сторінка перестала відповідати",
"contextPanel.browser.crashedHint": "Сторінка аварійно завершувалась кілька разів поспіль. Перезавантажте, щоб спробувати ще раз.",
"contextPanel.browser.devServers.title": "Запущені dev-сервери",
"projectActions.toast.multipleServers": "Запустилося кілька серверів — оберіть у панелі браузера",
"contextPanel.browser.devServers.justStarted": "Щойно запущені",
"contextPanel.browser.devServers.unavailable": "Не вдалося перевірити запущені dev-сервери.",
"contextPanel.browser.devServers.remoteOnly": "Вони працюють на машині, де запущено OpenChamber. Щоб їх відкрити, потрібен десктопний застосунок.",
"contextPanel.browser.annotate.toggle": "Анотувати сторінку",
"contextPanel.browser.annotate.intro": "Це анотований фрагмент із вбудованого браузера.",
"contextPanel.browser.annotate.attached": "Анотацію додано до чату",
"contextPanel.browser.annotate.noSession": "Відкрийте сесію чату, перш ніж додавати анотацію",
"contextPanel.browser.annotate.noPage": "Завантажте сторінку, перш ніж анотувати",
"contextPanel.browser.annotate.failed": "Не вдалося анотувати цю сторінку",
"contextPanel.browser.annotate.tool.element": "Елемент",
"contextPanel.browser.annotate.tool.region": "Область",
"contextPanel.browser.annotate.tool.draw": "Малювання",
"contextPanel.browser.annotate.commentPlaceholder": "Опишіть зміну...",
"contextPanel.browser.annotate.submit": "Додати",
"contextPanel.browser.trustNotice": "Сторінки, відкриті тут, працюють із повним доступом до OpenChamber — це потрібно для inspect і скріншотів. Відкривайте лише сайти, яким довіряєте: шкідлива сторінка може прочитати ваші дані чи діяти від вашого імені.",
"contextPanel.tab.closeTabAria": "Закрити вкладку {label}",
"contextPanel.actions.collapsePanel": "Згорнути панель",
@@ -1210,6 +1341,14 @@ export const dict: Record<I18nKey, string> = {
"sidebarFilesTree.toast.writeNotSupported": "Запис не підтримується",
"sidebarFilesTree.toast.fileCreated": "Файл створено",
"sidebarFilesTree.toast.operationFailed": "Операція не вдалася",
"sidebarFilesTree.toast.uploaded": "Файли завантажено",
"sidebarFilesTree.toast.uploadedWithoutConflicts": "Файли без конфліктів завантажено",
"sidebarFilesTree.toast.uploadFailed": "Деякі файли не вдалося завантажити",
"sidebarFilesTree.drop.target": "Завантажити в {path}",
"sidebarFilesTree.drop.uploading": "Завантаження файлів у {path}",
"sidebarFilesTree.dialog.uploadConflicts.title": "Замінити наявні файли?",
"sidebarFilesTree.dialog.uploadConflicts.description": "Файли з такими назвами вже існують у {path}. Заміну неможливо скасувати.",
"sidebarFilesTree.dialog.uploadConflicts.replace": "Замінити",
"sidebarFilesTree.toast.folderNameRequired": "Потрібно вказати назву папки",
"sidebarFilesTree.toast.folderCreated": "Папку створено",
"sidebarFilesTree.toast.nameRequired": "Потрібно вказати назву",
@@ -1266,6 +1405,12 @@ export const dict: Record<I18nKey, string> = {
"filesView.editor.disableLineWrap": "Вимкнути перенос рядків",
"filesView.editor.enableLineWrap": "Увімкнути перенос рядків",
"filesView.editor.findInFile": "Знайти у файлі",
"filesView.preview.find.placeholder": "Пошук у попередньому перегляді",
"filesView.preview.find.nextAria": "Наступний збіг",
"filesView.preview.find.previousAria": "Попередній збіг",
"filesView.preview.find.closeAria": "Закрити пошук",
"filesView.preview.find.noMatches": "Збігів немає",
"filesView.preview.find.countAria": "{current} із {total}",
"filesView.editor.goToLine": "Перейти до рядка",
"filesView.editor.switchToEditMode": "Перемкнутися в режим редагування",
"filesView.editor.switchToPreviewMode": "Перемкнутися в режим попереднього перегляду",
@@ -1317,10 +1462,12 @@ export const dict: Record<I18nKey, string> = {
"contextUsage.mobile.usedTokens": "Використані токени",
"contextUsage.mobile.contextLimit": "Обмеження контексту",
"contextUsage.mobile.outputLimit": "Ліміт виводу",
"contextUsage.mobile.cost": "Вартість",
"contextUsage.mobile.usage": "Використання",
"contextUsage.tooltip.usedTokens": "Використані токени: {tokens}",
"contextUsage.tooltip.contextLimit": "Обмеження контексту: {tokens}",
"contextUsage.tooltip.outputLimit": "Ліміт виводу: {tokens}",
"contextUsage.tooltip.cost": "Вартість: {cost}",
"contextSidebar.session.untitled": "Сесія без назви",
"contextSidebar.empty.openSession": "Відкрийте сесію, щоб перевірити контекст.",
"contextSidebar.section.context": "Контекст",
@@ -1347,6 +1494,7 @@ export const dict: Record<I18nKey, string> = {
"planView.file.defaultName": "план",
"planView.title.default": "План",
"planView.error.saveFailed": "Не вдалося зберегти",
"planView.error.loadFailed": "Не вдалося завантажити цей план",
"planView.error.previewUnavailable": "Попередній перегляд недоступний",
"planView.error.switchToEditMode": "Перейдіть у режим редагування, щоб усунути проблему.",
"planView.error.writeFailed": "Помилка запису",
@@ -1388,6 +1536,13 @@ export const dict: Record<I18nKey, string> = {
"diffView.scope.changed": "Змінені",
"diffView.scope.staged": "Індексовані",
"diffView.scope.lastTurn": "Останній хід",
"diffView.scope.branch": "Гілка",
"diffView.branch.resolvingBase": "Визначаємо базову гілку...",
"diffView.branch.noBaseTitle": "Немає базової гілки",
"diffView.branch.noBaseDescription": "Git не зберігає, від якої гілки почалася ця гілка. Виберіть базову гілку для порівняння.",
"diffView.branch.loadError": "Не вдалося завантажити зміни гілки",
"diffView.branch.loadingFiles": "Завантаження змін гілки...",
"diffView.branch.empty": "Немає змін у цій гілці відносно {base}",
"diffView.scope.selectorAria": "Вибрати режим змін",
"diffView.actions.retry": "Повторити спробу",
"diffView.actions.renderAnyway": "Все одно відрендерити",
@@ -1424,6 +1579,12 @@ export const dict: Record<I18nKey, string> = {
'chat.dictation.retry': 'Повторити розшифровку',
'chat.dictation.discard': 'Відхилити запис',
'chat.history.loadOlder': 'Завантажити ще',
"chat.appLink.confirm.title": "Відкрити це посилання в іншій програмі?",
"chat.appLink.confirm.description": "Це посилання з чату використовує протокол {scheme} і буде відкрито в іншій програмі.",
"chat.appLink.confirm.descriptionPlain": "Це посилання з чату буде відкрито в іншій програмі.",
"chat.appLink.confirm.cancel": "Скасувати",
"chat.appLink.confirm.open": "Відкрити один раз",
"chat.appLink.confirm.trustAndOpen": "Довірити і відкрити",
'chat.autoReview.title': 'Цикл код-ревʼю триває',
'chat.autoReview.status.waitingForReviewer': 'Очікуємо ревʼювера',
'chat.autoReview.status.waitingForImplementer': 'Очікуємо імплементатора',
@@ -1441,11 +1602,46 @@ export const dict: Record<I18nKey, string> = {
"diffView.hunk.unsupported": "Додавання окремих шматків до індексу не підтримується в цьому середовищі.",
"rightSidebar.contextNotesTodo.plan.defaultTitle": "План",
"rightSidebar.contextNotesTodo.empty.selectProject": "Виберіть проєкт, щоб додати нотатки та завдання.",
"rightSidebar.contextNotesTodo.notes.title": "Швидкі нотатки - {project}",
"rightSidebar.contextNotesTodo.notes.placeholder": "Зберігайте контекст, нагадування або посилання",
"rightSidebar.contextNotesTodo.todo.title": "Todo",
"rightSidebar.contextNotesTodo.todo.itemsSingle": "{count} пункт",
"rightSidebar.contextNotesTodo.todo.itemsPlural": "пунктів: {count}",
"rightSidebar.contextNotesTodo.notes.addAria": "Додати нотатку",
"rightSidebar.contextNotesTodo.notes.empty": "Нотаток ще немає. Занотуйте контекст, нагадування або посилання.",
"rightSidebar.contextNotesTodo.notes.actions.expand": "Розгорнути нотатку",
"rightSidebar.contextNotesTodo.notes.actions.collapse": "Згорнути нотатку",
"rightSidebar.contextNotesTodo.notes.actions.delete": "Видалити нотатку",
"rightSidebar.contextNotesTodo.notes.actions.pin": "Закріпити в контексті агента",
"rightSidebar.contextNotesTodo.notes.actions.unpin": "Відкріпити з контексту агента",
"rightSidebar.contextNotesTodo.notes.source.selection": "З чату",
"rightSidebar.contextNotesTodo.notes.source.agent": "Від агента",
"rightSidebar.contextNotesTodo.search.placeholder": "Пошук",
"rightSidebar.contextNotesTodo.search.clear": "Очистити пошук",
"rightSidebar.contextNotesTodo.search.noResults": "Нічого не знайдено за запитом «{query}».",
"rightSidebar.contextNotesTodo.toast.deleteNoteFailed": "Не вдалося видалити нотатку",
"rightSidebar.contextNotesTodo.toast.createNoteFailed": "Не вдалося створити нотатку",
"rightSidebar.contextNotesTodo.tabs.notes": "Нотатки",
"rightSidebar.contextNotesTodo.tabs.todos": "Todo",
"rightSidebar.contextNotesTodo.tabs.plans": "Плани",
"rightSidebar.contextNotesTodo.plans.actions.back": "Назад до планів",
"rightSidebar.contextNotesTodo.tabs.memory": "Памʼять",
"rightSidebar.contextNotesTodo.sections.label": "Розділи контексту проєкту",
"rightSidebar.contextNotesTodo.sections.resize": "Змінити ширину бічної панелі розділів",
"rightSidebar.contextNotesTodo.memory.scope.project": "Проєкт",
"rightSidebar.contextNotesTodo.memory.scope.label": "Область памʼяті",
"rightSidebar.contextNotesTodo.memory.scope.global": "Про вас",
"rightSidebar.contextNotesTodo.memory.type.fact": "факт",
"rightSidebar.contextNotesTodo.memory.badge.new": "нове",
"rightSidebar.contextNotesTodo.memory.flagged": "Не надсилається агенту — виглядає як інструкція",
"rightSidebar.contextNotesTodo.memory.badge.changed": "змінено",
"rightSidebar.contextNotesTodo.memory.type.preference": "вподобання",
"rightSidebar.contextNotesTodo.memory.type.reference": "посилання",
"rightSidebar.contextNotesTodo.memory.actions.delete": "Забути цей запис",
"rightSidebar.contextNotesTodo.memory.actions.editTitle": "Заголовок запису",
"rightSidebar.contextNotesTodo.memory.actions.editBody": "Текст запису",
"rightSidebar.contextNotesTodo.memory.toast.saveFailed": "Не вдалося зберегти запис",
"rightSidebar.contextNotesTodo.memory.toast.deleteFailed": "Не вдалося забути запис",
"rightSidebar.contextNotesTodo.memory.empty.nothing": "Агент ще нічого сюди не записав.",
"rightSidebar.contextNotesTodo.memory.empty.noMatches": "Жоден збережений запис не відповідає пошуку.",
"rightSidebar.contextNotesTodo.memory.empty.noProject": "Відкрийте проєкт, щоб побачити, що агент про нього памʼятає.",
"rightSidebar.contextNotesTodo.memory.empty.unavailable": "Не вдалося завантажити памʼять. Нічого не втрачено — спробуйте ще раз.",
"rightSidebar.contextNotesTodo.todo.clearCompleted": "Очистити завершені",
"rightSidebar.contextNotesTodo.todo.inputPlaceholder": "Додати завдання",
"rightSidebar.contextNotesTodo.todo.addAria": "Додати завдання",
@@ -1456,13 +1652,9 @@ export const dict: Record<I18nKey, string> = {
"rightSidebar.contextNotesTodo.todo.actions.delete": "Видалити \"{text}\"",
"rightSidebar.contextNotesTodo.todo.actions.send": "Надіслати \"{text}\"",
"rightSidebar.contextNotesTodo.todo.actions.reorder": "Змінити порядок \"{text}\"",
"rightSidebar.contextNotesTodo.todo.resizeAria": "Змінити розмір списку завдань",
"rightSidebar.contextNotesTodo.todo.sendMenu.currentSession": "Надіслати до поточної сесії",
"rightSidebar.contextNotesTodo.todo.sendMenu.newSession": "Надіслати до нової сесії",
"rightSidebar.contextNotesTodo.todo.sendMenu.newWorktreeSession": "Надіслати до нової сесії в worktree",
"rightSidebar.contextNotesTodo.plans.title": "Плани",
"rightSidebar.contextNotesTodo.plans.filesSingle": "Файл: {count}",
"rightSidebar.contextNotesTodo.plans.filesPlural": "Файлів: {count}",
"rightSidebar.contextNotesTodo.plans.importFromFile": "Імпортувати план із файлу",
"rightSidebar.contextNotesTodo.plans.empty": "Ще немає збережених планів.",
"rightSidebar.contextNotesTodo.plans.deletePlan": "Видалити план",
@@ -1482,13 +1674,14 @@ export const dict: Record<I18nKey, string> = {
"rightSidebar.contextNotesTodo.toast.sentToNewSession": "Завдання надіслано до нової сесії",
"rightSidebar.contextNotesTodo.toast.sentToNewWorktreeSession": "Завдання надіслано до нової сесії в worktree",
"rightSidebar.contextNotesTodo.toast.sendTodoFailed": "Не вдалося надіслати завдання",
"rightSidebar.contextNotesTodo.toast.updatePlanFailed": "Не вдалося оновити план",
"rightSidebar.contextNotesTodo.toast.deletePlanFailed": "Не вдалося видалити план",
"rightSidebar.contextNotesTodo.toast.planFileEmpty": "Файл плану порожній",
"rightSidebar.contextNotesTodo.toast.importPlanFailed": "Не вдалося імпортувати план",
"rightSidebar.contextNotesTodo.toast.planImported": "План імпортовано",
"rightSidebar.contextNotesTodo.toast.readPlanFileFailed": "Не вдалося прочитати файл плану",
"inlineComment.range.lines": "Рядки {start}-{end}",
"inlineComment.input.placeholder": "Додайте коментар... (Cmd+Enter, щоб зберегти)",
"inlineComment.input.placeholder": "Додайте коментар... ({shortcut}, щоб зберегти)",
"inlineComment.input.placeholderShort": "Додайте коментар...",
"inlineComment.actions.cancel": "Скасувати",
"inlineComment.actions.save": "Зберегти",
@@ -1507,8 +1700,6 @@ export const dict: Record<I18nKey, string> = {
"header.github.accountSource.cli": "CLI",
"header.services.openWithCurrent": "Відкрити інстанс, використання та MCP (поточний: {current})",
"header.services.open": "Відкрити сервіси, використання та MCP",
"header.services.tooltip.currentInstanceWithShortcuts": "Поточний інстанс: {current} ({toggle}; наступна вкладка {nextTab})",
"header.services.tooltip.servicesWithShortcuts": "Сервіси ({toggle}; наступна вкладка {nextTab})",
"header.services.title": "Сервіси",
"header.services.viewAria": "Переглянути сервіси",
"header.services.closeAria": "Закрити сервіси",
@@ -1524,7 +1715,6 @@ export const dict: Record<I18nKey, string> = {
"header.services.remoteUpdate.actions.open": "Оновити",
"header.services.used": "Використано",
"header.services.remaining": "Залишилося",
"header.services.shutdownDev": "Зупинити OpenChamber",
"header.services.modelFamily.other": "інше",
"header.actions.openPlanAria": "Відкрити план",
"header.actions.toggleChangesPanel": "Панель змін",
@@ -1618,6 +1808,10 @@ export const dict: Record<I18nKey, string> = {
"directoryExplorerDialog.browse.directories": "Каталоги",
"directoryExplorerDialog.browse.loading": "Завантаження каталогів...",
"directoryExplorerDialog.browse.empty": "Немає відповідних каталогів.",
"directoryExplorerDialog.browse.permissionDenied": "OpenChamber потрібен доступ до цієї папки.",
"directoryExplorerDialog.browse.loadFailed": "Не вдалося завантажити цю папку.",
"directoryExplorerDialog.browse.grantAccess": "Надати доступ",
"directoryExplorerDialog.browse.retry": "Спробувати знову",
"directoryExplorerDialog.browse.parentDirectory": "Батьківський каталог",
"directoryExplorerDialog.browse.addedBadge": "Додано",
"directoryExplorerDialog.browse.quickAdd": "Додати",
@@ -1677,22 +1871,18 @@ export const dict: Record<I18nKey, string> = {
"helpDialog.item.focusChatInput": "Фокус на полі вводу чату",
"helpDialog.item.togglePromptNavigator": "Показати або приховати навігатор промптів",
"helpDialog.item.abortActiveRun": "Перервати активний запуск (подвійне натискання)",
"helpDialog.item.toggleRightSidebar": 'Перемкнути контекстну панель',
"helpDialog.item.openRightSidebarGitTab": 'Відкрити поверхню Git',
"helpDialog.item.openRightSidebarFilesTab": 'Відкрити поверхню файлів',
"helpDialog.item.toggleTerminalDock": "Перемкнути панель терміналу",
"helpDialog.item.toggleTerminalExpanded": "Розгорнути або згорнути термінал",
"helpDialog.item.togglePlanContextPanel": "Перемкнути панель контексту плану",
"helpDialog.item.cycleTheme": "Перемкнути тему (Світла → Темна → Системна)",
"helpDialog.item.switchProject": "Перемкнути проєкт",
"helpDialog.item.switchSessionTab": "Перемкнути вкладку сесії",
"helpDialog.item.switchContextSurface": "Перемкнути поверхню панелі контексту (цифрова клавіша)",
"helpDialog.item.toggleServicesMenu": "Перемкнути меню сервісів",
"helpDialog.item.cycleServicesTab": "Перемкнути вкладку сервісів",
"helpDialog.item.openSettings": "Відкрити налаштування",
"helpDialog.keyCombiner.or": "або",
"helpDialog.proTips.title": "Поради:",
"helpDialog.proTips.commandPalette": "Використовуйте палітру команд ({shortcut}), щоб швидко перейти до будь-якої дії",
"helpDialog.proTips.recentSessions": "5 останніх сесій відображаються на панелі команд",
"helpDialog.proTips.themeCycling": "Перемикання теми запам’ятовує ваші переваги протягом сесій",
"helpDialog.proTips.leaderSequences": "Двокрокові шорткати: натисни комбінацію, потім другу клавішу — Esc скасовує",
"header.actions.rightSidebarWithShortcut": "Права бічна панель ({shortcut})",
"header.actions.toggleRightSidebarAria": "Перемкнути праву бічну панель",
"header.actions.openAppMenu": "Меню OpenChamber",
@@ -1776,8 +1966,6 @@ export const dict: Record<I18nKey, string> = {
"session.newWorktree.noMatchingBranches": "Немає відповідних гілок",
"session.newWorktree.localBranches": "Локальні гілки",
"session.newWorktree.remoteBranches": "Віддалені гілки",
"session.newWorktree.otherLocalBranches": "Інші локальні гілки",
"session.newWorktree.otherRemoteBranches": "Інші віддалені гілки",
"session.newWorktree.branchName": "Назва гілки",
"session.newWorktree.branchNamePlaceholder": "feature/my-awesome-feature",
"session.newWorktree.actions.change": "Змінити",
@@ -1902,7 +2090,6 @@ export const dict: Record<I18nKey, string> = {
"chat.statusRow.tasksTitle": "завдання",
"chat.statusRow.modelStatus": "{model} · {status}",
"chat.statusRow.summary.activeLeft": "Активних: {active} · залишилось: {left}",
"chat.statusRow.aborted": "Перервано",
"chat.revertIndicator.redo": "Повторити",
"chat.revertIndicator.redoAria": "Повторити — відновити відкочені повідомлення",
"chat.revertPopover.title": "Відкочено",
@@ -1916,6 +2103,9 @@ export const dict: Record<I18nKey, string> = {
"chat.revert.toast.undo": "Відкочено до {preview}",
"chat.revert.toast.redo": "Повторено",
"chat.revert.toast.restored": "Всі повідомлення відновлено",
"chat.toast.opencodeRestartInterrupted.title": "Чат перервано",
"chat.toast.opencodeRestartInterrupted.description": "OpenCode перезапустився, поки відповідь ще формувалася. Надішліть повідомлення, щоб продовжити.",
"chat.toast.opencodeRestartInterrupted.openSession": "Відкрити сесію",
"chat.errorBoundary.title": "Помилка чату",
"chat.errorBoundary.description": "В інтерфейсі чату сталася помилка. Причиною може бути тимчасова проблема з мережею або пошкоджені дані повідомлення.",
"chat.errorBoundary.sessionLabel": "Сесія",
@@ -1942,6 +2132,7 @@ export const dict: Record<I18nKey, string> = {
"chat.commandAutocomplete.command.catchUpDescription": "Повернутись у контекст: над чим працювали і звідки продовжити.",
"chat.commandAutocomplete.command.debugDescription": "Кероване дослідження першопричини бага перед тим, як пропонувати фікс.",
"chat.commandAutocomplete.command.weighDescription": "Зважити 2-3 підходи з trade-offs і рекомендацією перш ніж братися до роботи.",
'chat.commandAutocomplete.command.btwDescription': 'Поставте побічне питання в тимчасовій дочірній сесії, не відволікаючи цей чат.',
"chat.commandAutocomplete.command.exploreDescription": "Зорієнтуватись у кодовій базі: високорівневий тур архітектурою й основними частинами.",
"chat.commandAutocomplete.badge.skill": "навичка",
"chat.commandAutocomplete.badge.command": "команда",
@@ -1962,13 +2153,28 @@ export const dict: Record<I18nKey, string> = {
"chat.container.returnToParent.titleNamed": "Повернутися до: {title}",
"chat.container.returnToParent.title": "Повернутися до батьківської сесії",
"chat.container.returnToParent.label": "Батьківська",
'chat.btw.destroyAria': 'Знищити цю сесію btw',
'chat.btw.titleFallback': 'сесія btw',
'chat.btw.mainComposerPlaceholder': 'Поставте питання в цій сесії btw…',
'chat.btw.loading': 'Запуск сесії btw…',
'chat.btw.toast.emptyArgument': 'Введіть питання після /btw',
'chat.btw.toast.createFailed': 'Не вдалося запустити сесію btw',
'chat.btw.toast.destroyFailed': 'Не вдалося знищити сесію btw. Вона залишиться в бічній панелі.',
'chat.btw.working': 'Працює…',
'chat.btw.collapseAria': 'Згорнути панель btw',
'chat.btw.expandAria': 'Розгорнути панель btw',
'chat.btw.promoteAria': 'Залишити як окрему сесію',
'chat.btw.toast.promoteFailed': 'Не вдалося залишити сесію btw',
"chat.container.readOnlySubagentPromptBanner": "Сесії субагентів не можна запитувати.",
"chat.container.sessionLoadError.title": "Не вдалося завантажити сесію",
"chat.container.sessionLoadError.description": "Перевірте з’єднання та спробуйте завантажити цю сесію ще раз.",
"chat.container.sessionLoadError.description": "Не вдалося отримати розмову — сервер може бути вимкнений або недосяжний. Нічого не втрачено; спробуй знову, коли він повернеться.",
"chat.container.sessionLoadError.authDescription": "Сесія завершилась, тож сервер відхилив запит. Увійди — і розмова завантажиться.",
"chat.container.sessionLoadError.retry": "Спробувати знову",
"sessions.sidebar.group.empty.loadingSessions": "Завантаження сесій…",
"sessions.sidebar.group.empty.loadFailed": "Не вдалося оновити сесії.",
"sessions.sidebar.group.empty.retry": "Спробувати знову",
"sessions.sidebar.group.empty.permissionDenied": "Потрібен доступ до папки.",
"sessions.sidebar.group.empty.grantAccess": "Надати доступ",
"chat.unifiedControls.title": "Елементи керування",
"chat.unifiedControls.model.title": "Модель",
"chat.unifiedControls.model.noRecent": "Немає останніх моделей",
@@ -2000,12 +2206,13 @@ export const dict: Record<I18nKey, string> = {
"chat.textSelection.toast.addToNotesFailed": "Не вдалося додати до нотаток",
"chat.textSelection.toast.addToNotesSuccess": "Вибраний текст додано до нотаток",
"chat.textSelection.toast.addToNotesSummaryFailed": "Не вдалося підсумувати виділення, виділений текст додано до нотаток",
"chat.textSelection.actions.addToChat": "Додати в чат",
"chat.textSelection.actions.newSession": "Нова сесія",
"chat.textSelection.actions.copy": "Копіювати",
"chat.textSelection.actions.addToInput": "Додати в поле вводу",
"chat.textSelection.actions.comment": "Коментувати",
"chat.textSelection.title.commentOnSelection": "Коментувати виділене",
"chat.textSelection.comment.placeholder": "Додайте коментар за бажанням...",
"chat.textSelection.comment.attach": "Прикріпити",
"chat.textSelection.actions.addToNotes": "Додати до нотаток",
"chat.textSelection.title.addToCurrentChat": "Додати до поточного чату",
"chat.textSelection.title.newSessionWithSelection": "Створити нову сесію із виділенням",
"chat.textSelection.title.saveInsightToNotes": "Зберегти вибраний текст у нотатках",
"chat.messageBody.actions.revertAria": "Повернутися до цього повідомлення",
"chat.messageBody.actions.revert": "Повернутися звідси",
@@ -2089,6 +2296,7 @@ export const dict: Record<I18nKey, string> = {
"chat.chatInput.toast.attachmentsTooLarge": "Вкладені файли завеликі для надсилання. Спробуйте зменшити кількість або розмір зображень.",
"chat.chatInput.toast.sendAttachmentsFailed": "Не вдалося надіслати вкладення. Спробуйте зменшити кількість файлів або зображень.",
"chat.chatInput.toast.messageSendFailed": "Не вдалося надіслати повідомлення. Вкладення відновлено.",
"chat.chatInput.toast.noModelSelected": "Виберіть постачальника та модель перед надсиланням.",
"chat.chatInput.toast.clipboardAttachFailed": "Не вдалося вкласти зображення з буфера обміну",
"chat.chatInput.toast.clipboardTextAttachFailed": "Не вдалося долучити вставлений текст як файл",
"chat.chatInput.toast.largeTextPaste.title": "Виявлено великий текст",
@@ -2104,8 +2312,6 @@ export const dict: Record<I18nKey, string> = {
"chat.chatInput.toast.togglePermissionAutoAcceptFailed": "Не вдалося ввімкнути автоматичне прийняття дозволів",
"chat.chatInput.reviewComments": "Коментарі рев’ю:",
"chat.chatInput.reviewCommentsRemove": "Прибрати коментарі рев’ю",
"chat.chatInput.devServerLogs": "Логи Dev Server:",
"chat.chatInput.devServerLogsRemove": "Прибрати логи Dev Server",
"chat.chatInput.previewAnnotations": "Анотації перегляду:",
"chat.chatInput.previewContext": "Контекст перегляду:",
"chat.chatInput.previewContextRemove": "Прибрати контекст перегляду",
@@ -2144,6 +2350,7 @@ export const dict: Record<I18nKey, string> = {
"chat.toolPart.showRawJson": "Показати сирий JSON",
"chat.toolPart.showFormattedJson": "Показати форматований JSON",
"chat.toolPart.showNavigableJson": "Показати навігаційний JSON",
"chat.toolPart.openFile": "Відкрити файл",
"chat.toolPart.openFileAtFirstChange": "Відкрити файл на першій зміні",
"chat.toolPart.openFileDiff": "Відкрити diff файлу",
"chat.toolPart.copyOutput": "Скопіювати вивід",
@@ -2256,7 +2463,7 @@ export const dict: Record<I18nKey, string> = {
"chat.messageBody.subtask.title": "Делеговане завдання",
"chat.messageBody.subtask.hidePrompt": "Приховати промпт",
"chat.messageBody.subtask.showPrompt": "Показати промпт",
"chat.messageBody.subtask.openSession": "Відкрити сесія підзавдання",
"chat.messageBody.subtask.openSession": "Відкрити сесію підзавдання",
"chat.messageBody.shellCommand.title": "Команда оболонки",
"chat.messageBody.shellCommand.hideOutput": "Приховати вивід",
"chat.messageBody.shellCommand.showOutput": "Показати результат",
@@ -2275,6 +2482,15 @@ export const dict: Record<I18nKey, string> = {
"commandPalette.item.toggleSidebar": "Перемкнути бічну панель",
"commandPalette.item.showContextUsage": "Показати використання контексту",
"commandPalette.item.toggleTerminal": "Перемкнути термінал",
"commandPalette.item.cycleTheme": "Перемкнути тему",
"commandPalette.item.showOpenCodeStatus": "Показати статус OpenCode",
"commandPalette.item.toggleMemoryDebug": "Показати/сховати панель memory debug",
"commandPalette.item.pinSession": "Прикріпити або відкріпити сесію",
"commandPalette.item.copySessionId": "Скопіювати ID сесії",
"commandPalette.item.openMultiRun": "Відкрити лаунчер multi-run",
"commandPalette.item.openArchive": "Відкрити архівовані сесії",
"commandPalette.item.openNotes": "Відкрити панель нотаток",
"commandPalette.item.openTodos": "Відкрити панель завдань",
"commandPalette.item.openSettings": "Відкрити налаштування...",
"commandPalette.session.untitled": "Сесія без назви",
"openCodeStatusDialog.title": "Статус OpenCode",
@@ -2489,6 +2705,9 @@ export const dict: Record<I18nKey, string> = {
"sessionAuth.error.passkeySignInCanceled": "Вхід за ключем доступу скасовано.",
"sessionAuth.error.enterPasswordForPasskey": "Введіть пароль, щоб додати ключ доступу.",
"sessionAuth.locked.tunnelTitle": "Потрібен доступ до тунелю",
"sessionAuth.expired.banner": "Сесія завершилась — увійди, щоб продовжити.",
"sessionAuth.expired.loginAction": "Увійти",
"sessionAuth.expired.sendBlocked": "Сесія завершилась — увійди, щоб надсилати повідомлення.",
"sessionAuth.locked.unlockTitle": "Розблокувати OpenChamber",
"sessionAuth.locked.tunnelDescription": "Відкрийте цей тунель за допомогою одноразового посилання для з’єднання з настільної програми.",
"sessionAuth.locked.passwordDescription": "Ця сесія захищена паролем.",
@@ -2771,6 +2990,10 @@ export const dict: Record<I18nKey, string> = {
"updateDialog.status.updating": "Оновлення...",
"updateDialog.error.updateFailed": "Помилка оновлення",
"updateDialog.error.takingLonger": "Оновлення триває довше, ніж очікувалося. Зачекайте трохи та оновіть або запустіть: openchamber update",
"updateDialog.error.signatureRejected": "Завантажене оновлення відхилено: його підпис коду не збігається з цією інсталяцією. Зазвичай це означає, що запущену копію встановлено не з офіційного підписаного релізу. Встановіть OpenChamber з офіційного релізу й оновіться ще раз.",
"updateDialog.error.updaterDisabled": "Оновлювач зупинився після невдалого встановлення. Закрийте OpenChamber, відкрийте його знову й повторіть оновлення.",
"updateDialog.error.restartFailed": "Не вдалося перезапустити, щоб встановити оновлення.",
"updateDialog.error.restartUnavailable": "Щоб встановити оновлення, потрібен застосунок OpenChamber для комп’ютера.",
"mobileUpdate.toast.available.title": "Доступне оновлення OpenChamber",
"mobileUpdate.toast.available.description": "Версія {version} готова для Android.",
"mobileUpdate.toast.actions.download": "Завантажити",
@@ -2791,6 +3014,7 @@ export const dict: Record<I18nKey, string> = {
"memoryDebugPanel.title": "Панель налагодження",
"memoryDebugPanel.tabs.memory": "Пам'ять",
"memoryDebugPanel.tabs.streaming": "Потокове передавання",
"memoryDebugPanel.tabs.requests": "Запити",
"memoryDebugPanel.section.sessionsInMemory": "Сесії в пам'яті",
"memoryDebugPanel.section.uiStreamingMetrics": "Потокові показники інтерфейсу користувача",
"memoryDebugPanel.section.vscodeBridgeMetrics": "Метрики мосту VS Code",
@@ -2828,6 +3052,16 @@ export const dict: Record<I18nKey, string> = {
"memoryDebugPanel.streaming.copy.copied": "Потокове налагодження JSON скопійовано",
"memoryDebugPanel.streaming.copy.failed": "Не вдалося скопіювати JSON",
"memoryDebugPanel.streaming.copy.hint": "Копіювання експортує метрики потокового інтерфейсу користувача та VS Code як JSON",
"memoryDebugPanel.requests.inFlight": "Виконуються",
"memoryDebugPanel.requests.peak": "Пік",
"memoryDebugPanel.requests.duration": "Тривалість",
"memoryDebugPanel.requests.totalRequests": "Усього запитів",
"memoryDebugPanel.requests.tracking": "Відстеження",
"memoryDebugPanel.requests.now": "зараз",
"memoryDebugPanel.requests.noSamples": "Запитів ще немає. Тримайте цю панель відкритою, щоб фіксувати активність fetch.",
"memoryDebugPanel.requests.chartLabel": "Запити fetch у виконанні з часом, пік {peak}",
"memoryDebugPanel.requests.windowHint": "останні {seconds} с",
"memoryDebugPanel.requests.percentileChartLabel": "Перцентилі віку запитів у виконанні (p50, p90, p99, max) з часом",
"memoryDebugPanel.common.idle": "очікування",
"memoryDebugPanel.common.live": "live",
"memoryDebugPanel.common.notAvailable": "n/a",
@@ -2900,18 +3134,23 @@ export const dict: Record<I18nKey, string> = {
"common.relative.daysAgoCompact": "{count}d ago",
"common.relative.weeksAgoCompact": "{count}w ago",
"common.relative.yearsAgoCompact": "{count}y ago",
"common.duration.secondsCompact": "{seconds}с",
"common.duration.minutesSecondsCompact": "{minutes}хв {seconds}с",
"common.duration.hoursMinutesCompact": "{hours}год {minutes}хв",
"contextFileOpen.failure.tooLarge": "File is too large to open (>{count} lines)",
"contextFileOpen.failure.missing": "File not found",
"contextFileOpen.failure.unreadable": "Failed to open file",
"quota.window.5h": "5-Hour",
"quota.window.7d": "7-Day Limit",
"quota.window.7dSonnet": "7-Day Sonnet Limit",
"quota.window.7dOpus": "7-Day Opus Limit",
"quota.window.weekly": "Weekly Limit",
"quota.window.extraUsage": "Додаткове використання",
"quota.window.weekly": "Щотижня",
"quota.window.daily": "Daily",
"quota.window.monthly": "Monthly Limit",
"quota.window.monthly": "Щомісяця",
"quota.window.credits": "Credits",
"quota.window.creditsBalance": "Credits Balance",
"quota.window.monthlyCredits": "Місячні кредити",
"quota.window.purchasedCredits": "Придбані кредити",
"quota.window.freeCredits": "Безкоштовні кредити",
"quota.window.billingCycle": "Billing Cycle",
"quota.window.auto": "Auto",
"quota.window.api": "API",
@@ -2921,5 +3160,104 @@ export const dict: Record<I18nKey, string> = {
"quota.window.premium": "Premium Interactions",
"quota.window.chat": "Chat Requests",
"quota.window.completions": "Completions",
"quota.window.premiumInteractions": "Premium interactions",
"quota.window.premiumInteractions": "Кредити ШІ",
'chat.workStatus.ariaLabel': 'Стан роботи',
'chat.workStatus.context.label': 'Контекст',
'chat.workStatus.cost.breakdown': "Сеанс {session} · Субагенти {subagents}",
'chat.workStatus.git.changedFileSingle': 'Змінено {count} файл',
'chat.workStatus.git.changedFilePlural': 'Змінено {count} файлів',
'chat.workStatus.pr.untitled': 'Pull request без назви',
'chat.workStatus.pr.draft': 'Чернетка',
'chat.workStatus.pr.checks': 'Перевірки',
'chat.workStatus.pr.checksFailed': '{count} впало',
'chat.workStatus.pr.checksPending': '{count} виконується',
'chat.workStatus.pr.checksPassed': '{count} пройшло',
'chat.workStatus.attention.merge': 'Триває злиття',
'chat.workStatus.attention.rebase': 'Триває rebase',
'chat.workStatus.attention.cherryPick': 'Триває cherry-pick',
'chat.workStatus.attention.revert': 'Триває відкат',
'chat.workStatus.attention.bisect': 'Триває bisect',
'chat.workStatus.subagent.done': 'Готово',
'chat.workStatus.subagent.untitled': 'Сабагент',
'chat.workStatus.mcp.toggle': 'Перемкнути {name}',
'chat.workStatus.mcp.needsAuth': 'Увійти',
'chat.workStatus.mcp.failed': 'Помилка',
'chat.workStatus.pinned.unavailable': 'Запінене повідомлення',
'chat.workStatus.section.session': 'Сесія',
'chat.workStatus.section.project': 'Проєкт',
'chat.workStatus.section.subagents': 'Сабагенти',
'chat.workStatus.section.mcp': 'MCP',
'chat.workStatus.section.pinned': 'Запінені повідомлення',
'chat.workStatus.section.tasks': 'Задачі',
'chat.workStatus.subagent.working': 'працює',
'chat.workStatus.subagent.needsPermission': 'потребує дозволу',
'chat.workStatus.subagent.askedQuestion': 'поставив питання',
'chat.workStatus.section.contextBreakdown': 'Джерела контексту',
'chat.workStatus.breakdown.skills': 'Скіли',
'chat.workStatus.breakdown.pinnedNote': 'нотатка',
'chat.workStatus.breakdown.unpin': 'Відкріпити від контексту',
'chat.workStatus.breakdown.pinnedPlan': 'план',
'chat.workStatus.breakdown.memory': 'Памʼять агента',
'chat.workStatus.breakdown.pinnedKnowledgeSingle': '{count} закріплено',
'chat.workStatus.breakdown.pinnedKnowledgePlural': '{count} закріплено',
'chat.workStatus.breakdown.mcp': 'Сервери MCP',
'chat.workStatus.action.openChanges': 'Відкрити зміни',
'chat.workStatus.action.openGit': 'Відкрити панель Git',
'chat.workStatus.action.openPr': 'Відкрити pull request',
'chat.workStatus.action.openSubagent': 'Відкрити {name}',
'chat.workStatus.section.usage': 'Використання',
'chat.workStatus.goal.open': 'Керувати ціллю',
'chat.workStatus.goal.pause': 'Пауза',
'chat.workStatus.goal.resume': 'Відновити',
'chat.workStatus.goal.updateFailed': 'Не вдалося оновити ціль',
'chat.workStatus.pinned.unpin': 'Відпінити повідомлення',
'chat.workStatus.pinned.reveal': 'Перейти до повідомлення',
'chat.workStatus.pinned.unpinFailed': 'Не вдалося відпінити повідомлення',
'chat.workStatus.action.openContext': 'Відкрити панель контексту',
'chat.workStatus.section.linkedIssues': 'Прилінковане',
'chat.workStatus.linkedIssues.open': 'Відкрити #{number} на GitHub',
'chat.workStatus.linkedIssues.unlink': 'Прибрати лінк',
'chat.workStatus.linkedIssues.unlinkFailed': 'Не вдалося прибрати лінк',
'chat.workStatus.linkedIssues.link': 'Прилінкувати до сесії',
'chat.workStatus.linkedIssues.linkFailed': 'Не вдалося прилінкувати',
'chat.workStatus.breakdown.issueCountSingle': '{count} issue',
'chat.workStatus.breakdown.issueCountPlural': '{count} issues',
'chat.workStatus.breakdown.prCountSingle': '{count} PR',
'chat.workStatus.breakdown.prCountPlural': '{count} PR',
'chat.workStatus.breakdown.skillCountSingle': '{count} скіл',
'chat.workStatus.breakdown.skillCountPlural': '{count} скілів',
'chat.workStatus.breakdown.mcpCountSingle': '{count} MCP',
'chat.workStatus.breakdown.mcpCountPlural': '{count} MCP',
'chat.workStatus.sections.open': 'Обрати секції',
'chat.workStatus.sections.dialogTitle': 'Секції панелі',
'chat.workStatus.sections.dialogDescription': 'Обери, що показує панель стану роботи. Приховані секції зберігають свої дані — вони просто не відображаються.',
'chat.workStatus.sections.allHidden': 'Жодної секції не вибрано',
'chat.workStatus.sections.showAll': 'Показати всі',
'chat.workStatus.sections.noneWarning': 'Панель відображатиметься порожньою.',
'header.workStatusPanel.toggleAria': 'Перемкнути панель стану роботи',
'header.workStatusPanel.hide': 'Сховати стан роботи',
'header.workStatusPanel.show': 'Показати стан роботи',
'chat.workStatus.mcp.authorizeOpenFailed': 'Не вдалося відкрити сторінку авторизації',
'chat.workStatus.mcp.authorizeFailed': 'Авторизація не вдалася',
'mcpDropdown.toast.authorizeOpenFailed': 'Не вдалося відкрити сторінку авторизації',
'mcpDropdown.toast.authorizeFailed': 'Авторизація не вдалася',
'header.services.tooltip.currentInstance': 'Поточний інстанс: {current} ({toggle})',
'header.workStatusPanel.showOverlay': 'Показати стан роботи поверх чату',
'settings.mcp.page.connection.title': 'Як під’єднатись',
'settings.mcp.page.connection.description': 'Встав команду, яка його запускає, або посилання на готовий сервер.',
'settings.mcp.page.registration.title': 'Цьому серверу потрібен власний застосунок',
'settings.mcp.page.registration.description': 'Він не видає доступи автоматично. Створи застосунок у налаштуваннях самого сервісу, встав сюди його дані й увійди.',
'settings.mcp.page.registration.callbackLabel': 'Впиши цю адресу в сервісі',
'settings.mcp.page.registration.clientId': 'ID застосунку',
'settings.mcp.page.registration.clientSecret': 'Секрет застосунку',
'settings.mcp.page.registration.afterSaving': 'Збережи, потім натисни «Авторизувати».',
'settings.mcp.page.toast.copiedCallbackUrl': 'Адресу скопійовано',
'settings.mcp.page.toast.clipboardWriteFailed': 'Не вдалося скопіювати в буфер обміну',
'settings.mcp.page.scope.everywhere': 'Доступний у всіх проєктах',
'settings.mcp.page.scope.thisProject': 'Тільки в цьому проєкті',
'settings.mcp.page.env.description': 'Значення, потрібні серверу — наприклад, ключ API.',
'settings.mcp.page.connection.kindCommand': 'Команда',
'settings.mcp.page.connection.kindLink': 'Посилання',
'settings.mcp.page.connection.hintCommand': 'Запускається на цьому комп’ютері. Вставте цілу команду — вона розділиться на один аргумент у рядку.',
'settings.mcp.page.connection.hintLink': 'Під’єднується до сервера, який хостить хтось інший. Вставте його https-адресу.',
};
@@ -1,8 +1,10 @@
import { thirdPartyIntegrationI18n } from './third-party-integrations.i18n';
export const settingsDict = {
'settings.providers.page.openCodeGo.title': 'OpenCode Go 用量跟踪',
'settings.providers.page.openCodeGo.description': '连接 OpenCode Go 控制面板以显示滚动、每周和每月配额。',
'settings.providers.page.openCodeGo.workspaceId': '工作区 ID',
'settings.providers.page.openCodeGo.authCookie': '身份验证 Cookie',
'settings.providers.page.openCodeGo.apiKey': 'API 密钥',
'settings.providers.page.openCodeGo.help': '从控制面板网址复制工作区 ID,并从浏览器开发者工具复制 auth Cookie。OpenChamber 绝不会扫描浏览器 Cookie 存储。',
'settings.providers.page.openCodeGo.save': '保存并验证',
'settings.providers.page.openCodeGo.replace': '替换',
@@ -40,7 +42,20 @@ export const settingsDict = {
'settings.view.badge.beta': '测试版',
'settings.view.actions.reloadOpenCode': '重新加载 OpenCode',
'settings.view.actions.reloadOpenCodeTooltip': '重启 OpenCode 并重新加载其配置。',
'settings.view.actions.backToSettings': '返回设置',
'settings.view.actions.applyAndRestartOpenCode': '应用并重启',
'settings.view.actions.applyAndRestartOpenCodeTooltipSingle': '应用 1 项待处理的配置更改并重启 OpenCode。',
'settings.view.actions.applyAndRestartOpenCodeTooltipPlural': '应用 {count} 项待处理的配置更改并重启 OpenCode。',
'settings.view.pendingRestart.applying': '正在重启…',
'settings.view.pendingRestart.applied': '已使用待处理的配置更改重启 OpenCode。',
'settings.view.pendingRestart.applyFailed': '应用配置更改失败。',
'settings.view.pendingRestart.manualRestartRequired': '已保存到磁盘。请重启已连接的 OpenCode 服务器以应用更改。',
'settings.view.pendingRestart.saved': '已保存。请重启 OpenCode 以应用。',
'settings.view.pendingRestart.confirm.title': '应用并重启?',
'settings.view.pendingRestart.confirm.description': '重启 OpenCode 将停止所有正在运行的聊天。已保存的配置更改将在重启后生效。',
'settings.view.pendingRestart.confirm.dontShowAgain': '不再显示',
'settings.view.pendingRestart.confirm.cancel': '取消', 'settings.view.actions.backToSettings': '返回设置',
'settings.view.actions.closeSettings': '关闭设置',
'settings.view.actions.openSectionList': '打开分组列表',
'settings.view.actions.closeSettingsWithShortcut': '关闭设置({shortcut}+,)',
@@ -359,14 +374,14 @@ export const settingsDict = {
'settings.remoteInstances.page.field.modePlaceholder': '选择模式',
'settings.remoteInstances.page.field.modeManaged': '帮我启动',
'settings.remoteInstances.page.field.modeExternal': '已在运行',
'settings.remoteInstances.page.field.preferredRemotePort': '首选远程端口',
'settings.remoteInstances.page.field.preferredRemotePortHint': '远程机器上使用的端口。留空则自动选择。',
'settings.remoteInstances.page.field.preferredRemotePort': '远程机器上的端口',
'settings.remoteInstances.page.field.preferredRemotePortHint': 'OpenChamber 在远程机器上使用的端口。留空则自动选择。',
'settings.remoteInstances.page.field.keepServerRunning': '保持服务运行',
'settings.remoteInstances.page.field.keepServerRunningHint': '断开连接后仍让 OpenChamber 在远程机器上运行。',
'settings.remoteInstances.page.field.bindHost': '绑定主机',
'settings.remoteInstances.page.field.bindHostHint': '本地连接监听的地址。除非需要局域网访问,否则请使用 127.0.0.1 或 localhost。',
'settings.remoteInstances.page.field.preferredLocalPort': '首选本地端口',
'settings.remoteInstances.page.field.preferredLocalPortHint': '为此连接打开的本地端口。留空则自动选择。',
'settings.remoteInstances.page.field.keepServerRunningHint': '断开后让远程服务器继续运行。关闭时会在断开时停止,并在下次连接时重新启动。',
'settings.remoteInstances.page.field.bindHost': '谁可以访问',
'settings.remoteInstances.page.field.bindHostHint': '谁可以打开这台电脑上的转发地址。无论哪种选择,远程机器本身都只能通过 SSH 隧道访问。',
'settings.remoteInstances.page.field.preferredLocalPort': '这台电脑上的端口',
'settings.remoteInstances.page.field.preferredLocalPortHint': '为隧道在这台电脑上打开的端口。留空则自动选择。',
'settings.remoteInstances.page.field.forwardType': '转发类型',
'settings.remoteInstances.page.field.localHostPlaceholder': '127.0.0.1',
'settings.remoteInstances.page.field.remoteHostPlaceholder': '127.0.0.1',
@@ -386,6 +401,10 @@ export const settingsDict = {
'settings.common.actions.cancel': '取消',
'settings.common.actions.create': '创建',
'settings.common.actions.delete': '删除',
'settings.openchamber.appLinks.title': '受信任的应用链接',
'settings.openchamber.appLinks.info': '此列表中的链接在本设备上打开时不再询问。其他应用链接在打开前始终需要确认。',
'settings.openchamber.appLinks.empty': '本设备上暂无受信任的应用链接。打开链接时选择“信任并打开”即可添加到这里。',
'settings.openchamber.appLinks.removeAria': '移除受信任的 {scheme} 链接',
'settings.common.actions.reset': '重置',
'settings.common.actions.rename': '重命名',
'settings.common.actions.duplicate': '复制',
@@ -431,6 +450,9 @@ export const settingsDict = {
'settings.openchamber.about.title': '关于 OpenChamber',
'settings.openchamber.about.field.version': '版本',
'settings.openchamber.about.field.openCodeVersion': 'OpenCode 版本',
'settings.openchamber.about.field.instanceUrls': '实例 URL',
'settings.openchamber.about.field.applicationUrl': '应用',
'settings.openchamber.about.field.tunnelUrl': '隧道',
'settings.openchamber.about.state.checking': '检查中...',
'settings.openchamber.about.state.upToDate': '已是最新',
'settings.openchamber.about.state.unknown': '未知',
@@ -847,16 +869,26 @@ export const settingsDict = {
'settings.skills.catalog.page.mode.manual': '手动',
'settings.skills.catalog.page.mode.external': '外部',
'settings.skills.catalog.page.title': '技能目录',
'settings.skills.catalog.page.subtitle': '从精选仓库安装现成技能,或添加你自己的来源。',
'settings.skills.catalog.page.section.sources': '来源',
'settings.skills.catalog.page.searchAllPlaceholder': '在所有来源中搜索技能…',
'settings.skills.catalog.page.search.clear': '清除搜索',
'settings.skills.catalog.page.source.skillsCount': '技能数:{count}',
'settings.skills.catalog.page.source.stars': '星标:{count}',
'settings.skills.catalog.page.source.updated': '更新于 {time}',
'settings.skills.catalog.page.source.addOwnTitle': '添加自己的来源',
'settings.skills.catalog.page.source.addOwnDescription': '任何包含技能的 Git 仓库',
'settings.skills.catalog.page.source.viewRepo': '在 GitHub 上打开仓库',
'settings.skills.catalog.page.skill.viewOnGithub': '在 GitHub 上查看技能',
'settings.skills.catalog.page.list.searchTitle': '搜索结果',
'settings.skills.catalog.page.section.sourceRepository': '来源仓库',
'settings.skills.catalog.page.field.selectSourcePlaceholder': '选择来源',
'settings.skills.catalog.page.actions.refreshTitle': '刷新',
'settings.skills.catalog.page.actions.removeCatalogTitle': '移除目录',
'settings.skills.catalog.page.actions.addCatalog': '添加目录',
'settings.skills.catalog.page.actions.removeCatalog': '移除目录',
'settings.skills.catalog.page.actions.loadMoreSkills': '加载更多技能',
'settings.skills.catalog.page.loading.catalog': '加载中...',
'settings.skills.catalog.page.loading.skills': '正在加载技能...',
'settings.skills.catalog.page.loading.more': '加载中...',
'settings.skills.catalog.page.foundCount': '找到 {count} 个技能',
'settings.skills.catalog.page.error.catalogTitle': '目录错误',
'settings.skills.catalog.page.empty.noSkillsTitle': '未找到技能',
@@ -864,7 +896,6 @@ export const settingsDict = {
'settings.skills.catalog.page.badge.installed': '已安装({scope})',
'settings.skills.catalog.page.badge.notInstallable': '不可安装',
'settings.skills.catalog.page.badge.unknown': '未知',
'settings.skills.catalog.page.byOwnerPrefix': '作者',
'settings.skills.catalog.page.removeDialog.title': '移除目录',
'settings.skills.catalog.page.removeDialog.description': '确定要移除此目录吗?',
'settings.openchamber.passkeys.title': 'Passkeys',
@@ -927,9 +958,9 @@ export const settingsDict = {
'settings.openchamber.desktopNetwork.field.macMenuBarAria': '在 macOS 菜单栏中显示 OpenChamber',
'settings.openchamber.desktopNetwork.field.macMenuBar': '在菜单栏中显示 OpenChamber',
'settings.openchamber.desktopNetwork.field.macMenuBarDescription': '需要重启应用。关闭后,OpenChamber 不会创建菜单栏项目,也不会运行相关的会话、审批和用量更新。',
'settings.openchamber.desktopNetwork.field.minimizeToTrayAria': '将 OpenChamber 最小化和关闭到系统托盘',
'settings.openchamber.desktopNetwork.field.minimizeToTray': '最小化和关闭到系统托盘',
'settings.openchamber.desktopNetwork.field.minimizeToTrayDescription': '主窗口最小化或关闭时,让 OpenChamber 继续在系统托盘中运行。',
'settings.openchamber.desktopNetwork.field.minimizeToTrayAria': '将 OpenChamber 关闭到系统托盘',
'settings.openchamber.desktopNetwork.field.minimizeToTray': '关闭到系统托盘',
'settings.openchamber.desktopNetwork.field.minimizeToTrayDescription': '关闭主窗口时,让 OpenChamber 继续在系统托盘中运行;最小化仍会将窗口保留在任务栏。',
'settings.openchamber.desktopNetwork.field.keepAwakeAria': 'OpenChamber 运行时保持电脑唤醒',
'settings.openchamber.desktopNetwork.field.keepAwake': 'OpenChamber 运行时保持电脑唤醒',
'settings.openchamber.desktopNetwork.field.keepAwakeDescription': '让手机可以继续打开此应用。屏幕仍可关闭。',
@@ -956,15 +987,22 @@ export const settingsDict = {
'settings.openchamber.desktopNetwork.error.keepAwakeUnsupported': '此系统不支持防止睡眠',
'settings.openchamber.desktopNetwork.error.keepAwakeSaveFailed': '更新保持唤醒设置失败',
'settings.openchamber.opencodeCli.title': 'OpenCode CLI',
'settings.openchamber.tools.title': 'OpenChamber 工具',
'settings.openchamber.tools.field.agentControlTool': '智能体控制工具',
'settings.openchamber.tools.field.agentControlToolAria': '启用智能体控制工具',
'settings.openchamber.tools.field.agentControlToolInfo': '让智能体在聊天中编排你的工作:创建会话和 worktree、将提示委派给其他智能体、管理计划任务。会为每个会话添加少量工具说明。在 OpenCode 重启后生效。',
'settings.openchamber.tools.field.agentWebTool': 'OpenChamber Web 工具',
'settings.openchamber.tools.field.agentWebToolAria': '启用 OpenChamber Web 工具',
'settings.openchamber.tools.field.agentWebToolInfo': '让智能体在 OpenChamber 浏览器面板中查看并操作页面:打开网址、读取内容、点击、输入、滚动,以及在移动端与桌面端布局之间切换。会为每个会话添加少量工具说明。在 OpenCode 重启后生效。',
'settings.openchamber.tools.field.agentMemoryTool': '智能体记忆工具',
'settings.openchamber.tools.field.agentMemoryToolAria': '智能体记忆工具',
'settings.openchamber.tools.field.agentMemoryToolInfo': '让智能体把学到的内容跨会话保留下来,分为两个存储:关于你的事实,以及关于每个项目的事实。会话会收到已存条目的标题,智能体可在相关时读取具体内容。关闭后将同时移除该工具、记忆标签页和会话索引。重启 OpenCode 后生效。',
'settings.openchamber.opencodeCli.tooltipPrefix': '可选的',
'settings.openchamber.opencodeCli.tooltipSuffix': '二进制绝对路径。',
'settings.openchamber.opencodeCli.field.binaryPath': 'OpenCode 可执行文件路径',
'settings.openchamber.opencodeCli.field.binaryPathPlaceholder': '/Users/you/.bun/bin/opencode',
'settings.openchamber.opencodeCli.field.showUpdateNotifications': '显示 OpenCode 更新通知',
'settings.openchamber.opencodeCli.field.showUpdateNotificationsAria': '显示 OpenCode 更新通知',
'settings.openchamber.opencodeCli.field.agentControlTool': '智能体控制工具',
'settings.openchamber.opencodeCli.field.agentControlToolAria': '启用智能体控制工具',
'settings.openchamber.opencodeCli.field.agentControlToolInfo': '让智能体在聊天中编排你的工作:创建会话和 worktree、将提示委派给其他智能体、管理计划任务。会为每个会话添加少量工具说明。在 Save + Reload 后生效。',
'settings.openchamber.opencodeCli.actions.browseAria': '浏览 OpenCode 可执行文件路径',
'settings.openchamber.opencodeCli.actions.browse': '浏览',
'settings.openchamber.opencodeCli.actions.saveAndReload': '保存并重载',
@@ -1063,7 +1101,7 @@ export const settingsDict = {
'settings.openchamber.keyboardShortcuts.overwritePrompt': '该组合已被其他快捷键使用。是否覆盖并清除原映射?',
'settings.openchamber.keyboardShortcuts.field.pressKeys': '按下按键...',
'settings.openchamber.keyboardShortcuts.error.captureFirst': '请先录入一个快捷键。',
'settings.openchamber.keyboardShortcuts.warning.riskyBrowserShortcut': '该快捷键可能与浏览器默认快捷键冲突,但仍已保存。',
'settings.openchamber.keyboardShortcuts.warning.riskyBrowserShortcut': '该快捷键可能与浏览器默认快捷键冲突,但仍可保存。',
'settings.openchamber.keyboardShortcuts.action.open_go_to_line.label': '跳转到行(文件编辑器)',
'settings.openchamber.keyboardShortcuts.action.open_command_palette.label': '打开命令面板',
'settings.openchamber.keyboardShortcuts.action.focus_input.label': '聚焦输入框',
@@ -1072,16 +1110,20 @@ export const settingsDict = {
'settings.openchamber.keyboardShortcuts.action.toggle_terminal_expanded.label': '切换终端展开',
'settings.openchamber.keyboardShortcuts.action.add_selection_to_chat.label': '将选中内容添加到聊天',
'settings.openchamber.keyboardShortcuts.action.toggle_sidebar.label': '切换侧边栏',
'settings.openchamber.keyboardShortcuts.action.toggle_right_sidebar.label': '切换上下文面板',
'settings.openchamber.keyboardShortcuts.action.open_right_sidebar_git.label': '打开 Git 界面',
'settings.openchamber.keyboardShortcuts.action.open_right_sidebar_files.label': '打开文件界面',
'settings.openchamber.keyboardShortcuts.action.switch_session_tab.label': '切换会话标签页',
'settings.openchamber.keyboardShortcuts.action.switch_session_tab.suffix': ' + 1…9',
'settings.openchamber.keyboardShortcuts.action.switch_context_surface.label': '切换上下文面板界面',
'settings.openchamber.keyboardShortcuts.action.switch_context_surface.suffix': ' + 1…0',
'settings.openchamber.keyboardShortcuts.action.new_chat.label': '新建会话',
'settings.openchamber.keyboardShortcuts.action.switch_session_previous.label': '上一个会话',
'settings.openchamber.keyboardShortcuts.action.switch_session_next.label': '下一个会话',
'settings.openchamber.keyboardShortcuts.action.rename_current_session.label': '重命名当前会话',
'settings.openchamber.keyboardShortcuts.action.toggle_permission_auto_accept.label': '切换权限自动批准',
'settings.openchamber.keyboardShortcuts.action.close_session_tab.label': '关闭会话标签页',
'settings.openchamber.keyboardShortcuts.action.new_chat_worktree.label': '新建工作树草稿',
'settings.openchamber.keyboardShortcuts.action.new_mini_chat.label': '新建 Mini Chat 窗口',
'settings.openchamber.keyboardShortcuts.action.open_help.label': '打开键盘快捷键',
'settings.openchamber.keyboardShortcuts.action.toggle_context_plan.label': '切换上下文面板中的计划',
'settings.openchamber.keyboardShortcuts.action.toggle_services_menu.label': '切换服务菜单',
'settings.openchamber.keyboardShortcuts.action.cycle_services_tab.label': '轮换服务菜单标签',
'settings.openchamber.keyboardShortcuts.action.cycle_theme.label': '轮换主题',
'settings.openchamber.keyboardShortcuts.action.cycle_agent.label': '轮换智能体',
'settings.openchamber.keyboardShortcuts.action.cycle_favorite_model_forward.label': '向前轮换收藏模型',
@@ -1090,15 +1132,39 @@ export const settingsDict = {
'settings.openchamber.keyboardShortcuts.action.expand_input.label': '展开输入框',
'settings.openchamber.keyboardShortcuts.action.open_timeline_dialog.label': '打开对话时间线',
'settings.openchamber.keyboardShortcuts.action.toggle_prompt_navigator.label': '显示或隐藏提示词导航',
'settings.openchamber.keyboardShortcuts.warning.contextualPrefix': '此序列与“{action}”共享上下文前缀。对应上下文生效时,该操作会优先执行。',
'settings.openchamber.keyboardShortcuts.category.session': '会话控制',
'settings.openchamber.keyboardShortcuts.category.models': '模型和智能体',
'settings.openchamber.keyboardShortcuts.category.panels': '面板和工具',
'settings.openchamber.keyboardShortcuts.category.navigation': '导航',
'settings.openchamber.keyboardShortcuts.category.application': '应用程序',
'settings.openchamber.keyboardShortcuts.actions.edit': '编辑',
'settings.openchamber.keyboardShortcuts.actions.confirm': '确认',
'settings.openchamber.keyboardShortcuts.dialog.title': '编辑{action}',
'settings.openchamber.keyboardShortcuts.dialog.instructions': '最多输入两个按键组合,每个组合最多同时按下三个按键。输入第一个组合后,最多等待 3 秒以输入第二个组合。点击确认应用,或点击取消放弃;按 Backspace 删除最后一个组合。',
'settings.openchamber.keyboardShortcuts.dialog.firstChord': '第一个组合',
'settings.openchamber.keyboardShortcuts.dialog.secondChord': '第二个组合',
'settings.openchamber.keyboardShortcuts.dialog.recording': '按下按键…',
'settings.openchamber.keyboardShortcuts.unassigned': '未分配',
'settings.openchamber.keyboardShortcuts.error.prefixConflict': '这与 {action} 使用的序列冲突。请选择其他组合。',
'settings.openchamber.keyboardShortcuts.error.exactConflict': '此组合已被 {action} 使用。',
'settings.openchamber.keyboardShortcuts.error.internalConflict': '此组合与内置快捷键冲突,内置快捷键不能被替换。',
'settings.openchamber.keyboardShortcuts.action.open_draft_project_picker.label': '打开草稿项目选择器',
'settings.openchamber.keyboardShortcuts.action.open_draft_worktree_picker.label': '打开草稿工作树选择器',
'settings.openchamber.keyboardShortcuts.action.open_session_list.label': '打开最近会话',
'settings.openchamber.keyboardShortcuts.action.toggle_dictation.label': '语音输入',
'settings.projects.sidebar.total': '总计 {count}',
'settings.projects.sidebar.actions.addProject': '添加项目',
'settings.projects.page.empty.noProjects': '暂无项目。',
'settings.projects.page.title.default': '项目设置',
'settings.projects.page.section.worktree': '工作树',
'settings.projects.page.field.projectName': '项目名称',
'settings.projects.page.field.projectModel': '项目模型',
'settings.projects.page.field.projectThinking': '项目思考级别',
'settings.projects.page.section.chatDefaults': '新聊天的默认设置',
'settings.projects.page.section.chatDefaultsDescription': '在此项目中开始新聊天时使用。未设置时使用全局默认值。思考级别仅在提供级别的模型上显示。',
'settings.projects.page.field.projectNamePlaceholder': '项目名称',
'settings.projects.page.field.defaultModel': '新聊天的默认模型',
'settings.projects.page.field.defaultModelDescription': '在此项目中开始新聊天时使用。未设置时回退到全局默认值。',
'settings.projects.page.option.thinkingDefault': '模型默认',
'settings.projects.page.field.accentColor': '强调色',
'settings.projects.page.field.projectIcon': '项目图标',
'settings.projects.page.field.projectIconBackgroundAria': '项目图标背景颜色',
@@ -1132,15 +1198,15 @@ export const settingsDict = {
'settings.usage.sidebar.field.displayModePlaceholder': '显示模式',
'settings.usage.sidebar.field.displayModeUsage': '用量',
'settings.usage.sidebar.field.displayModeRemaining': '剩余配额',
'settings.usage.sidebar.field.showPredictions': '显示预测',
'settings.usage.sidebar.status.notSet': '未设置',
'settings.usage.page.empty.selectProvider': '选择一个提供商以查看用量详情。',
'settings.usage.page.header.providerUsage': '{provider} 用量',
'settings.usage.page.header.refreshing': '正在刷新用量...',
'settings.usage.page.header.lastUpdated': '最后更新:{time}',
'settings.usage.page.options.showInHeaderAria': '在页眉菜单显示',
'settings.usage.page.options.showInHeader': '在页眉菜单显示',
'settings.usage.page.options.showInHeaderTooltip': '启用后,该提供商的用量会显示在应用页眉的快速访问下拉菜单中。',
'settings.usage.page.header.lastUpdatedWithPlan': '套餐:{plan} · 最后更新:{time}',
'settings.usage.page.options.showInWorkStatusAria': '在工作状态面板中显示',
'settings.usage.page.options.showInWorkStatus': '在工作状态面板中显示',
'settings.usage.page.options.showInWorkStatusTooltip': '启用后,该提供商的用量会显示在工作状态面板中。',
'settings.usage.page.state.noData': '暂无用量数据。',
'settings.usage.page.state.refreshFailedTitle': '刷新用量数据失败',
'settings.usage.page.state.providerNotConfiguredTitle': '提供商未配置',
@@ -1167,8 +1233,8 @@ export const settingsDict = {
'settings.remoteInstances.page.section.actionsDescription': '连接、重新连接、查看日志或移除此连接。',
'settings.remoteInstances.page.section.remoteServer': '远程机器上的 OpenChamber',
'settings.remoteInstances.page.section.remoteServerDescription': '选择 SSH 连接后 OpenChamber 的运行方式。',
'settings.remoteInstances.page.section.mainTunnel': '本地访问',
'settings.remoteInstances.page.section.mainTunnelDescription': '选择用于打开此远程 OpenChamber 服务器的本地地址。',
'settings.remoteInstances.page.section.mainTunnel': '从这台电脑访问',
'settings.remoteInstances.page.section.mainTunnelDescription': 'OpenChamber 运行在远程机器上。这里的设置只决定这台电脑上通过 SSH 隧道通向它的地址。',
'settings.remoteInstances.page.section.authentication': '认证',
'settings.remoteInstances.page.section.authenticationDescription': 'SSH 和远程 OpenChamber UI 的可选凭据。',
'settings.remoteInstances.page.section.portForwards': '端口转发',
@@ -1181,8 +1247,6 @@ export const settingsDict = {
'settings.remoteInstances.page.field.installMethod': '安装方式',
'settings.remoteInstances.page.field.installMethodHint': '当此应用为你启动 OpenChamber 时,如何将它放到远程机器上。',
'settings.remoteInstances.page.field.selectInstallMethodPlaceholder': '选择安装方式',
'settings.remoteInstances.page.field.installMethodDownloadRelease': '下载发布版本',
'settings.remoteInstances.page.field.installMethodUploadBundle': '上传安装包',
'settings.remoteInstances.page.field.selectBindHostPlaceholder': '选择绑定主机',
'settings.remoteInstances.page.field.sshPasswordOptional': 'SSH 密码(可选)',
'settings.remoteInstances.page.field.sshPasswordPlaceholder': '输入 SSH 密码',
@@ -1206,7 +1270,44 @@ export const settingsDict = {
'settings.remoteInstances.page.actions.enableForwardAria': '启用转发',
'settings.remoteInstances.page.actions.openLocal': '打开本地',
'settings.remoteInstances.page.actions.addForward': '添加转发',
'settings.remoteInstances.page.import.sectionTitle': '已保存的 SSH 主机',
'settings.remoteInstances.page.addDialog.description': '从 SSH 配置中选择一台主机,或者自己输入连接。',
'settings.remoteInstances.page.addDialog.sourceLabel': '连接的来源',
'settings.remoteInstances.page.addDialog.tab.saved': '来自 SSH 配置',
'settings.remoteInstances.page.addDialog.tab.manual': '自己输入',
'settings.remoteInstances.page.addDialog.searchPlaceholder': '搜索主机',
'settings.remoteInstances.page.addDialog.emptySaved': '在你的 SSH 配置中没有找到主机。请自己输入连接。',
'settings.remoteInstances.page.addDialog.searchEmpty': '没有主机匹配此搜索。',
'settings.remoteInstances.page.addDialog.use': '使用',
'settings.remoteInstances.page.state.notConnected': '未连接',
'settings.remoteInstances.page.state.connecting': '连接中',
'settings.remoteInstances.page.state.ready': '已连接',
'settings.remoteInstances.page.state.problem': '需要处理',
'settings.remoteInstances.page.section.advanced': '高级设置',
'settings.remoteInstances.page.section.advancedHint': '端口、安装方式、密码和额外转发。大多数连接使用默认值即可。',
'settings.remoteInstances.page.field.installMethodAuto': '自动',
'settings.remoteInstances.page.error.hint.noRuntime': '远程机器上既没有 bun 也没有 npm。请在那里安装其中之一,或把此连接切换为“已在运行”。',
'settings.remoteInstances.page.error.hint.noOpencode': '远程机器上没有安装 opencode CLI。请先在那里安装(见 opencode.ai),然后重新连接。',
'settings.remoteInstances.page.error.action.setUiPassword': '设置界面密码',
'settings.remoteInstances.page.error.action.pickRandomPort': '使用另一个本地端口',
'settings.remoteInstances.page.error.action.setRemotePort': '设置远程端口',
'settings.remoteInstances.page.validation.externalPortRequired': '请先指定远程端口。在“已在运行”模式下,OpenChamber 需要知道服务器监听哪个端口。',
'settings.remoteInstances.page.empty.noInstances': '还没有 SSH 连接。',
'settings.remoteInstances.page.field.uiPasswordRequired': '界面密码(必填)',
'settings.remoteInstances.page.field.uiPasswordMissingForLan': '只要远程服务器可在其网络中访问,就必须填写。',
'settings.remoteInstances.page.field.remoteLanAccess': '可在远程网络中访问',
'settings.remoteInstances.page.field.remoteLanAccessHint': '也允许远程机器所在网络中的其他设备不经 SSH 隧道直接打开这个 OpenChamber。必须设置界面密码。',
'settings.remoteInstances.page.field.remoteLanAccessWarning': '该网络中的任何人都能访问远程 OpenChamber,保护它的只有下面的界面密码。',
'settings.remoteInstances.page.validation.remoteLanNeedsPassword': '请先设置界面密码。没有密码时,远程 OpenChamber 会对该网络中的所有设备开放。',
'settings.remoteInstances.page.field.bindHostOption.loopback': '仅这台电脑 (127.0.0.1)',
'settings.remoteInstances.page.field.bindHostOption.localhost': '仅这台电脑 (localhost)',
'settings.remoteInstances.page.field.bindHostOption.lan': '我网络中的任意设备 (0.0.0.0)',
'settings.remoteInstances.page.field.sshPasswordHint': '只有当该主机要求密码而不是接受 SSH 密钥时才需要。',
'settings.remoteInstances.page.field.uiPasswordHintManaged': '用于保护远程 OpenChamber 界面的密码。OpenChamber 会把它设置到为你启动的服务器上。',
'settings.remoteInstances.page.field.uiPasswordHintExternal': '远程机器上已在运行的 OpenChamber 服务器的密码,用于登录。',
'settings.remoteInstances.page.tunnelPreview.caption': '此连接的转发:',
'settings.remoteInstances.page.empty.noInstancesWithOneImport': '还没有 SSH 连接。可从你的 SSH 配置导入 1 台主机。',
'settings.remoteInstances.page.empty.noInstancesWithImports': '还没有 SSH 连接。可从你的 SSH 配置导入 {count} 台主机。',
'settings.remoteInstances.page.state.loadingInstances': '正在加载连接...',
'settings.remoteInstances.page.import.loading': '正在加载 SSH 主机...',
'settings.remoteInstances.page.import.noneFound': '未找到 SSH 主机。',
'settings.remoteInstances.page.import.noneAvailable': '没有可导入的 SSH 主机。',
@@ -1304,13 +1405,18 @@ export const settingsDict = {
'settings.providers.page.custom.title': '自定义提供商',
'settings.providers.page.custom.editTitle': '编辑自定义提供商',
'settings.providers.page.custom.description': '通过指定基础 URL、凭据和模型列表,添加兼容 OpenAI 的提供商。会写入 OpenCode 配置,可像其他提供商一样在聊天中使用。',
'settings.providers.page.custom.description': '通过指定基础 URL、凭据、模型列表和支持的 API 协议添加提供商。会写入 OpenCode 配置以供聊天使用。',
'settings.providers.page.custom.field.providerID.label': '提供商 ID',
'settings.providers.page.custom.field.providerID.placeholder': 'my-provider',
'settings.providers.page.custom.field.providerID.info': '小写字母、数字、连字符和下划线。用作 OpenCode 提供商 ID。',
'settings.providers.page.custom.field.name.label': '显示名称',
'settings.providers.page.custom.field.name.placeholder': '我的提供商',
'settings.providers.page.custom.field.name.info': '显示在提供商和模型选择器中。',
'settings.providers.page.custom.field.protocol.label': 'API 协议',
'settings.providers.page.custom.field.protocol.info': '选择此 API 实现的请求格式。',
'settings.providers.page.custom.field.protocol.openaiChat': 'OpenAI Chat Completions',
'settings.providers.page.custom.field.protocol.openaiResponses': 'OpenAI Responses',
'settings.providers.page.custom.field.protocol.anthropicMessages': 'Anthropic Messages',
'settings.providers.page.custom.field.baseURL.label': '基础 URL',
'settings.providers.page.custom.field.baseURL.placeholder': 'https://api.example.com/v1',
'settings.providers.page.custom.field.baseURL.info': '兼容 OpenAI 的 API 基础 URL。必须以 http:// 或 https:// 开头。',
@@ -1359,6 +1465,17 @@ export const settingsDict = {
'settings.providers.page.auth.apiKeyPlaceholder': 'sk-...',
'settings.providers.page.auth.oauthMethodFallback': 'OAuth 方式 {index}',
'settings.providers.page.auth.pasteAuthorizationCodePlaceholder': '粘贴授权码',
'settings.providers.page.auth.oauth.starting': '正在启动授权…',
'settings.providers.page.auth.oauth.waiting': '正在等待授权…',
'settings.providers.page.auth.oauth.waitingHint': '请在浏览器中完成登录。保持此页面打开,连接会自动完成。',
'settings.providers.page.auth.oauth.codeHint': '从浏览器复制授权码并粘贴到此处。',
'settings.providers.page.auth.oauth.deviceCodeLabel': '设备码',
'settings.providers.page.auth.oauth.linkLabel': '授权链接',
'settings.providers.page.auth.oauth.promptRequired': '请填写“{field}”后继续',
'settings.providers.page.auth.oauth.error.sessionExpired': '授权请求已过期。请重新连接以重新开始。',
'settings.providers.page.auth.oauth.error.codeRequired': '此提供方需要浏览器中的授权码。',
'settings.providers.page.auth.oauth.error.declined': '授权被拒绝或未完成。',
'settings.providers.page.auth.oauth.error.invalidInput': '输入的信息被拒绝。',
'settings.providers.page.auth.connected': '已连接',
'settings.providers.page.auth.incomplete': '缺少凭据',
'settings.providers.page.auth.incompleteHint': '· 在聊天中使用此提供商之前,请添加 API 密钥或 {env:VAR}',
@@ -1391,6 +1508,9 @@ export const settingsDict = {
'settings.providers.page.actions.open': '打开',
'settings.providers.page.actions.copy': '复制',
'settings.providers.page.actions.complete': '完成',
'settings.providers.page.actions.continue': '继续',
'settings.providers.page.actions.cancel': '取消',
'settings.providers.page.actions.tryAgain': '重试',
'settings.providers.page.actions.hide': '隐藏',
'settings.providers.page.actions.reconnect': '重新连接',
'settings.providers.page.actions.edit': '编辑',
@@ -1406,7 +1526,6 @@ export const settingsDict = {
'settings.providers.page.toast.apiKeySaved': 'API Key 已保存',
'settings.providers.page.toast.oauthStartFailed': '启动 OAuth 流程失败',
'settings.providers.page.toast.oauthDetailsMissing': '未返回 OAuth 详情',
'settings.providers.page.toast.completeOAuthInBrowser': '请在浏览器中完成 OAuth 流程',
'settings.providers.page.toast.oauthCompleteFailed': '完成 OAuth 流程失败',
'settings.providers.page.toast.oauthCompleted': 'OAuth 连接已完成',
'settings.providers.page.toast.oauthLinkCopied': 'OAuth 链接已复制',
@@ -1428,6 +1547,8 @@ export const settingsDict = {
'settings.mcp.page.status.label.failed': '失败',
'settings.mcp.page.status.label.needsAuth': '需要授权',
'settings.mcp.page.status.label.needsRegistration': '需要注册',
'settings.mcp.page.status.label.awaitingRestart': '等待重启',
'settings.mcp.page.status.description.awaitingRestart': '该服务器已保存但尚未生效。使用 Apply & Restart 让 OpenCode 加载它——之后即可进行连接和授权。',
'settings.mcp.page.status.description.connected': '已连接,OpenCode 可发现工具和资源。',
'settings.mcp.page.status.description.failedDefault': 'OpenCode 无法连接到此 MCP 服务器。',
'settings.mcp.page.status.description.needsAuth': '此远程 MCP 服务器在连接前需要授权。',
@@ -1792,9 +1913,6 @@ export const settingsDict = {
'settings.voice.page.field.ttsInputModeSummarized': '摘要',
'settings.openchamber.visual.section.colorMode': '颜色模式',
'settings.openchamber.visual.section.colorModeAndTheme': '颜色模式与主题',
'settings.openchamber.visual.section.mobileLayout': '移动端布局',
'settings.openchamber.visual.option.mobileLayout.default': '旧版',
'settings.openchamber.visual.option.mobileLayout.new': '新版',
'settings.openchamber.visual.section.localization': '本地化',
'settings.openchamber.visual.section.spacingAndLayout': '间距与布局',
'settings.openchamber.visual.section.densityAndType': '密度与字体',
@@ -1811,6 +1929,10 @@ export const settingsDict = {
'settings.openchamber.visual.section.showToolsOpenedByDefault': '默认展开以下工具',
'settings.openchamber.visual.section.sessionAssistance': '会话辅助',
'settings.openchamber.visual.section.reasoning': '推理',
'settings.openchamber.visual.section.streaming': '流式输出',
'settings.openchamber.visual.field.streamingAutoFollow': '流式输出时跟随新内容',
'settings.openchamber.visual.field.streamingAutoFollowAria': '在回复流式输出时自动跟随新内容',
'settings.openchamber.visual.field.streamingAutoFollowInfo': '回复流式输出时,视图会持续滚动到最新内容。关闭后视图保持不动,可手动滚动;此时从聊天中间发送消息也不会移动视图。',
'settings.openchamber.visual.section.messageAppearance': '消息外观',
'settings.openchamber.visual.section.toolsAndFiles': '工具和文件',
'settings.openchamber.visual.section.composer': '输入框',
@@ -1831,8 +1953,6 @@ export const settingsDict = {
'settings.openchamber.visual.field.selectTimeFormatAria': '选择时间格式',
'settings.openchamber.visual.field.selectWeekStartAria': '选择一周起始日',
'settings.openchamber.visual.actions.reloadThemes': '重新加载主题',
'settings.openchamber.visual.field.macVibrancy': '窗口透明度',
'settings.openchamber.visual.field.macVibrancyHint': '在侧边栏后使用 macOS 原生模糊(vibrancy)。关闭以获得完全不透明的界面。',
'settings.openchamber.visual.field.dockBadge': 'Dock 角标',
'settings.openchamber.visual.field.dockBadgeHint': '在 macOS Dock 图标上显示有未读动态的会话数量。',
'settings.openchamber.visual.actions.saveAndRestart': '保存并重启',
@@ -1879,6 +1999,10 @@ export const settingsDict = {
'settings.openchamber.visual.actions.resetInputBarOffsetAria': '重置输入栏偏移',
'settings.openchamber.visual.field.terminalQuickKeysAria': '终端快捷键',
'settings.openchamber.visual.field.terminalQuickKeys': '终端快捷键',
'settings.openchamber.visual.field.sessionTabsGroup': '会话标签页',
'settings.openchamber.visual.field.sessionTabs': '在页眉中以标签页显示会话',
'settings.openchamber.visual.field.sessionTabsAria': '切换页眉会话标签页',
'settings.openchamber.visual.field.sessionTabsInfo': '打开的会话会以标签页形式排列在页眉中。关闭后页眉仅显示会话标题。',
'settings.openchamber.visual.field.terminalQuickKeysTooltip': '在终端视图显示 Esc、Ctrl、方向键',
'settings.openchamber.visual.field.fileEditorKeymap': '文件编辑器键位映射',
'settings.openchamber.visual.option.fileEditorKeymap.default': '默认',
@@ -1911,8 +2035,6 @@ export const settingsDict = {
'settings.openchamber.visual.field.stickyUserHeader': '固定用户消息头',
'settings.openchamber.visual.field.promptNavigatorEnabledAria': '提示词导航',
'settings.openchamber.visual.field.promptNavigatorEnabled': '提示词导航',
'settings.openchamber.visual.field.expandedEditorToolbarAria': 'Always show editor toolbar',
'settings.openchamber.visual.field.expandedEditorToolbar': 'Always show editor toolbar (docked under the file tabs)',
'settings.openchamber.visual.field.autoSaveEnabledAria': '自动保存文件',
'settings.openchamber.visual.field.autoSaveEnabled': '自动保存文件',
'settings.openchamber.visual.field.autoSaveEnabledInfo': '停止输入后自动保存文件编辑内容。关闭后需手动保存。',
@@ -2105,4 +2227,5 @@ export const settingsDict = {
'settings.openchamber.visual.field.followUpBehaviorDescription': 'Choose what happens when you press Enter on a follow-up message while the agent is still responding.',
'settings.openchamber.visual.option.followUpBehavior.steer.label': 'Steer',
'settings.openchamber.visual.option.followUpBehavior.queue.label': 'Queue',
...thirdPartyIntegrationI18n['zh-CN'],
} as const;
+377 -39
View File
@@ -6,6 +6,19 @@ export const dict: Record<I18nKey, string> = {
'terminalView.actions.attachSelection': '附加所选输出',
'terminalView.actions.restart': '重启终端',
'chat.message.terminalContext': '{terminal},第 {start}-{end} 行',
'chat.message.context.codeComment': '对 {file} 第 {start}-{end} 行的评论',
'chat.message.context.codeCommentLine': '对 {file} 第 {line} 行的评论',
'chat.message.context.chatQuote': '引用自先前的消息',
'chat.message.context.fileQuote': '来自 {file} 的选择',
'chat.chatInput.chatQuoteContext': '聊天引用',
'chat.chatInput.chatQuoteContextRemove': '移除聊天引用',
'chat.chatInput.contextPreview.selectedLabel': '所选文本',
'chat.chatInput.contextPreview.commentLabel': '用户评论',
'chat.chatInput.contextPreview.edit': '编辑评论',
'chat.chatInput.contextPreview.remove': '移除',
'chat.message.context.browserAnnotation': '浏览器标注({page})',
'chat.message.context.prComment': 'GitHub PR 评论({label})',
'chat.message.context.prCheck': '失败的 GitHub PR 检查({label})',
'chat.chatInput.terminalContext': '{terminal},第 {start}-{end} 行',
'chat.chatInput.terminalContextRemove': '移除终端上下文',
'chat.chatInput.prCommentContext': 'PR 评论',
@@ -25,6 +38,7 @@ export const dict: Record<I18nKey, string> = {
'common.language.korean': '韩语',
'common.language.polish': '波兰语',
'common.language.japanese': '日语',
'common.language.turkish': '土耳其语',
'common.revealPath.finder': '在 Finder 中显示',
'common.revealPath.fileExplorer': '在文件资源管理器中打开',
'common.revealPath.fileManager': '在文件管理器中打开',
@@ -89,6 +103,11 @@ export const dict: Record<I18nKey, string> = {
'mobile.instances.status.connectedDirect': '已连接 · 局域网',
'mobile.instances.status.connectedRelay': '已连接 · 私有中继',
'mobile.instances.saveEdit': '保存更改',
'mobile.connectionDebug.title': '连接日志',
'mobile.connectionDebug.copy': '复制',
'mobile.connectionDebug.copied': '已复制',
'mobile.connectionDebug.close': '关闭',
'mobile.connectionDebug.empty': '暂无连接事件。',
'mobile.nav.changes': '更改',
'mobile.nav.settings': '设置',
'mobile.surface.closeAria': '关闭',
@@ -112,6 +131,7 @@ export const dict: Record<I18nKey, string> = {
'mobile.sessions.section.worktrees': '工作树',
'mobile.sessions.section.otherProjects': '切换项目',
'mobile.sessions.section.projects': '项目',
'mobile.sessions.section.chats': '聊天',
'mobile.sessions.empty.noProjectsTitle': '暂无项目',
'mobile.sessions.empty.noProjectsDescription': '添加项目以开始与代码对话。',
'mobile.sessions.empty.noSessionsTitle': '暂无会话',
@@ -232,8 +252,10 @@ export const dict: Record<I18nKey, string> = {
'sessions.scheduledTasks.dialog.toast.deleted': '计划任务已删除',
'sessions.scheduledTasks.dialog.toast.deleteFailed': '删除任务失败',
'sessions.scheduledTasks.dialog.toast.started': '任务已启动',
'sessions.scheduledTasks.dialog.toast.startedPersistWarning': '任务已启动,但未能保存其状态。在下一次成功运行之前,它可能仍显示为正在运行。',
'sessions.scheduledTasks.dialog.toast.runFailed': '运行任务失败',
'sessions.scheduledTasks.dialog.confirm.deleteTask': '删除计划任务“{taskName}”?',
'sessions.scheduledTasks.dialog.confirm.deleteLoopFile': '删除循环任务“{taskName}”及其 Markdown 文件?',
'sessions.scheduledTasks.dialog.schedule.daily': '每天 {time}',
'sessions.scheduledTasks.dialog.schedule.dailyWithTimezone': '每天 {time}({timezone})',
'sessions.scheduledTasks.dialog.schedule.weekly': '每周 {days} {time}',
@@ -269,6 +291,9 @@ export const dict: Record<I18nKey, string> = {
'sessions.scheduledTasks.dialog.taskToggle.pauseAria': '暂停 {taskName}',
'sessions.scheduledTasks.dialog.taskToggle.enabled': '已启用',
'sessions.scheduledTasks.dialog.taskToggle.paused': '已暂停',
'sessions.scheduledTasks.dialog.loopFile.note': '由循环文件 {file} 管理',
'sessions.scheduledTasks.dialog.loopFile.toggleDisabled': '启用状态由循环文件控制;请在 Markdown frontmatter 中设置 enabled',
'sessions.scheduledTasks.dialog.loopFile.actionsDisabled': '循环任务在其 .agents/loops Markdown 文件中配置',
'sessions.scheduledTasks.editor.title.edit': '编辑计划任务',
'sessions.scheduledTasks.editor.title.new': '新建计划任务',
'sessions.scheduledTasks.editor.description': '配置一个服务端任务,用于创建新会话并发送提示词。',
@@ -361,7 +386,7 @@ export const dict: Record<I18nKey, string> = {
'multirun.launcher.attachments.attach': '附加',
'multirun.launcher.attachments.tooltip': '相同文件会发送到所有运行',
'multirun.launcher.models.label': '模型',
'multirun.launcher.models.info': '选择 2-{max} 个模型。同一模型可重复添加。',
'multirun.launcher.models.info': '选择 2 个或更多模型。同一模型可重复添加。',
'multirun.launcher.toast.fileTooLarge': '文件“{fileName}”过大(最大 10MB)',
'multirun.launcher.toast.attachFailed': '附加“{fileName}”失败',
'multirun.launcher.toast.attachedSingle': '已附加 {count} 个文件',
@@ -428,9 +453,16 @@ export const dict: Record<I18nKey, string> = {
'sessions.sidebar.empty.noMatches.title': '没有匹配的会话',
'sessions.sidebar.empty.noMatches.description': '请尝试其他标题、分支、文件夹或路径。',
'sessions.sidebar.activity.recentTitle': '最近',
'sessions.sidebar.activity.chatsTitle': '聊天',
'sessions.sidebar.activity.chatsEmpty': '暂无聊天。',
'chat.chatInput.chooseProject': '选择项目',
'sessions.archivePage.allDirectories': '所有目录',
'sessions.sidebar.header.displayMode.stickyHeaders': '固定项目标题',
'sessions.sidebar.header.grouping.label': '会话分组',
'sessions.sidebar.header.projectDisplay.label': '显示项目',
'sessions.sidebar.header.projectDisplay.all': '所有项目',
'sessions.sidebar.header.projectDisplay.single': '单个项目',
'sessions.sidebar.project.selectAria': '选择项目,当前为 {project}',
'sessions.sidebar.header.grouping.byWorktree': '按工作树',
'sessions.sidebar.header.grouping.flat': '平铺列表',
'sessions.sidebar.project.actions.manageWorktrees': '管理工作树',
@@ -452,6 +484,10 @@ export const dict: Record<I18nKey, string> = {
'sessions.archivePage.deleteSessionAria': '删除 {title}',
'sessions.archivePage.restoreSessionAria': '还原 {title}',
'sessions.switcher.openAria': '打开会话切换器',
'header.sessionTabs.stripAria': '打开的会话',
'header.sessionTabs.tabMenuAria': '会话标签页操作',
'header.sessionTabs.closeTab': '关闭标签页',
'header.sessionTabs.closeOtherTabs': '关闭其他标签页',
'sessions.switcher.empty': '没有最近会话',
'sessions.switcher.draftTitle': '新会话',
'sessions.sidebar.updateCheck.errorTitle': '检查更新失败',
@@ -503,11 +539,33 @@ export const dict: Record<I18nKey, string> = {
'sessions.sidebar.session.menu.unshare': '取消分享',
'sessions.sidebar.session.menu.exportMarkdown': '导出 Markdown',
'sessions.sidebar.session.menu.moveToWorktree': '移至新工作树',
'sessions.sidebar.session.menu.moveToWorktreeTargets': '移至工作树',
'sessions.sidebar.session.menu.newWorktree': '新建工作树...',
'sessions.sidebar.session.moveToWorktree.success': '会话已移至新工作树',
'sessions.sidebar.session.moveToWorktree.failed': '无法将会话移至新工作树',
'sessions.sidebar.session.moveToWorktree.tooltip': '从当前分支创建新工作树,转移未提交的更改,并将此会话及其子会话移至其中。',
'sessions.sidebar.session.moveToWorktree.main': '主工作树',
'sessions.sidebar.session.moveToWorktree.refreshing': '正在刷新工作树...',
'sessions.sidebar.session.moveToWorktree.loadFailed': '无法加载工作树',
'sessions.sidebar.session.moveToWorktree.current': '当前工作树',
'sessions.sidebar.session.moveToWorktree.existingSuccess': '会话已移至工作树',
'sessions.sidebar.session.moveToWorktree.existingFailed': '无法将会话移至工作树',
'sessions.sidebar.session.moveToWorktree.tooltipTargets': '显示现有工作树,以及为此会话创建新工作树的选项。',
'sessions.sidebar.session.moveToWorktree.tooltip': '从当前分支创建新工作树,并将此会话及其子会话移至其中。当源有未提交的更改时,由你选择是否一并转移。',
'sessions.sidebar.session.moveToWorktree.tooltipBusy': '仅在会话空闲时可用。请停止当前活动或等待其完成。',
'sessions.sidebar.session.moveToWorktree.tooltipMoving': '此会话已在移至新工作树。',
'sessions.sidebar.session.moveToWorktree.confirm.title': '源有未提交的更改',
'sessions.sidebar.session.moveToWorktree.confirm.changedFiles': '此工作树中已更改的文件:{count}。',
'sessions.sidebar.session.moveToWorktree.confirm.ownership': 'OpenCode 按目录而非会话跟踪这些更改。',
'sessions.sidebar.session.moveToWorktree.confirm.sessionOnlyHelp': '移动此会话及其子会话,同时保持每个源文件不变。',
'sessions.sidebar.session.moveToWorktree.confirm.allChangesHelp': '转移会话目录下的更改。未暂存和未跟踪的文件在成功后离开源。',
'sessions.sidebar.session.moveToWorktree.confirm.stagedWarning': '已暂存的更改保留在源中,并复制到目的地。',
'sessions.sidebar.session.moveToWorktree.confirm.baseWarning': '当目的地使用不同的 Git 基准时,转移可能失败。',
'sessions.sidebar.session.moveToWorktree.confirm.sessionOnly': '仅移动会话',
'sessions.sidebar.session.moveToWorktree.confirm.allChanges': '移动全部源更改',
'sessions.sidebar.session.moveToWorktree.confirm.cancel': '取消',
'sessions.sidebar.session.moveToWorktree.sourceVerificationFailed': '无法验证源的更改。未更改任何工作树或会话。',
'sessions.sidebar.session.moveToWorktree.applyChangesFailed': '目的地无法接受源的更改。会话和源更改均未移动。请重试并选择“仅移动会话”。',
'sessions.sidebar.session.moveToWorktree.changesMayBeInDestination': '在目的地确认移动之前连接中断。会话可能没有移动,未提交的更改可能已经在目标工作树中。重试前请先检查。',
'sessions.sidebar.session.menu.runFusion': '运行融合',
'sessions.sidebar.session.menu.openInSidePanel': '在侧边面板中打开',
'sessions.sidebar.session.actions.openInEditor': '在编辑器中打开',
@@ -531,6 +589,10 @@ export const dict: Record<I18nKey, string> = {
'sessions.sidebar.session.status.pinned': '已置顶会话',
'sessions.sidebar.session.status.movingToWorktree': '正在将会话移至新工作树',
'sessions.sidebar.session.status.permissionRequired': '需要权限',
'sessions.sidebar.session.status.questionPendingSingle': '1 个待回答问题',
'sessions.sidebar.session.status.questionPendingMany': '{count} 个待回答问题',
'sessions.sidebar.session.status.activeFor': '已活动 {duration}',
'sessions.sidebar.session.status.lastTurnDuration': '上一轮耗时 {duration}',
'sessions.sidebar.session.subsessions.collapse': '折叠子会话',
'sessions.sidebar.session.subsessions.expand': '展开子会话',
'sessions.sidebar.dialogs.deleteSession.title': '删除会话?',
@@ -984,6 +1046,8 @@ export const dict: Record<I18nKey, string> = {
'gitView.pr.field.draft': '草稿',
'gitView.pr.field.title': '标题',
'gitView.pr.githubNotConnected': 'GitHub 未连接',
'gitView.pr.history.merged': 'PR #{number} 已合并到 {base}。',
'gitView.pr.history.closed': 'PR #{number} 已关闭。',
'gitView.pr.loadingDescription': '正在加载描述...',
'gitView.pr.mergeMethod.merge': '创建合并提交',
'gitView.pr.mergeMethod.rebase': '变基并合并',
@@ -1100,11 +1164,20 @@ export const dict: Record<I18nKey, string> = {
'contextPanel.mode.context': '上下文',
'contextPanel.mode.preview': '预览',
'contextPanel.mode.browser': '浏览器',
'contextRail.configure.open': '配置面板',
'contextRail.configure.dialogTitle': '侧栏面板',
'contextRail.configure.dialogDescription': '选择侧栏显示哪些面板。隐藏的面板会保留数据,仍可通过命令面板打开。',
'contextRail.configure.showAll': '全部显示',
'contextRail.configure.noneWarning': '所有面板均已隐藏。',
'contextRail.aria.rail': '面板界面',
'contextPanel.editorEmpty.title': '未打开文件',
'contextPanel.editorEmpty.description': '从文件树中选择一个文件开始编辑。',
'contextRail.surface.editor.description': '编辑项目文件',
'contextRail.surface.git.description': '提交、分支和拉取请求',
'contextRail.surface.git.changesCountAriaSingle': '{label},{count} 个更改的文件',
'contextRail.surface.git.changesCountAriaPlural': '{label},{count} 个更改的文件',
'contextRail.surface.git.changesCountTooltipSingle': '{count} 个更改的文件',
'contextRail.surface.git.changesCountTooltipPlural': '{count} 个更改的文件',
'contextRail.surface.terminal.description': '内置终端',
'contextRail.surface.diff.description': '查看工作区更改',
'contextPanel.mode.walkthrough': '导读',
@@ -1144,8 +1217,11 @@ export const dict: Record<I18nKey, string> = {
'walkthrough.toc.moreFiles': '其他文件:{count}',
'walkthrough.toc.uncovered': '未涵盖:{count}',
'walkthrough.toc.resize': '调整目录栏宽度',
'walkthrough.importance.critical': '关键',
'walkthrough.importance.critical': '关键改动',
'walkthrough.importance.criticalHint': '这一步带动了其余改动,值得仔细阅读。它不是在你的代码中发现的问题。',
'walkthrough.importance.context': '背景',
'walkthrough.importance.contextHint': '辅助性的改动,列在这里是为了让其余部分说得通。',
'walkthrough.help.guide': 'Walkthrough 的工作方式',
'walkthrough.blocked.noModel.title': '没有可用的小模型',
'walkthrough.blocked.noModel.description': '请登录模型提供方后再生成评审。',
'walkthrough.blocked.emptyDiff.title': '没有可评审的内容',
@@ -1160,22 +1236,77 @@ export const dict: Record<I18nKey, string> = {
'walkthrough.blocked.outputExhausted.descriptionUnknownModel': '小模型把全部输出额度用在了推理上,没有返回结果。推理模型在大差异上经常如此——可以换一个少推理的模型,或缩小评审范围。',
'walkthrough.blocked.onlyGenerated.title': '只有生成文件发生了改动',
'walkthrough.blocked.onlyGenerated.description': '这里的改动全部是锁文件或其他工具生成的产物,评审会有意跳过它们。',
'walkthrough.blocked.serverUnsupported.title': '该服务器不支持 walkthrough',
'walkthrough.blocked.serverUnsupported.description': '此应用连接的 OpenChamber 服务器没有响应 walkthrough API,说明它比应用更旧。请将服务器升级到 1.18 或更高版本后刷新。',
'walkthrough.blocked.contextTooSmall.descriptionUnknownModel': '小模型大约可容纳 {available} 千字符,而这份差异约需 {required} 千字符。我们不会截断内容,请改选上下文更大的模型。',
'walkthrough.blocked.structuredOutput.descriptionUnknownModel': '小模型不支持导读所需的结构化响应。',
'contextRail.surface.plan.description': '查看当前计划',
'contextRail.surface.pr.description': '创建、审查并合并当前分支的拉取请求',
'contextRail.surface.notes.description': '项目的笔记、待办和计划',
'contextRail.surface.notes.description': '项目的笔记、待办、计划和智能体记忆',
'contextRail.surface.context.description': '会话上下文与令牌用量',
'contextRail.surface.browser.description': '内置网页浏览器',
'contextRail.surface.preview.description': '开发服务器预览',
'contextRail.surface.chat.description': '并排打开的会话',
'contextRail.surface.notes': '项目笔记',
'contextRail.surface.notes': '项目知识',
'contextRail.editorTree.toggle': '切换文件树',
'contextPanel.browser.open': '打开浏览器面板',
'contextPanel.browser.addressAria': '浏览器地址',
'contextPanel.browser.history.label': '最近访问的地址',
'contextPanel.browser.history.forget': '从历史记录中移除',
'contextPanel.browser.newTab': '新建浏览器标签页',
'contextPanel.browser.empty': '网页浏览器',
'contextPanel.browser.emptyHint': '在上方输入网址开始浏览',
'contextPanel.browser.inspectUnavailable': '无法从浏览器面板检查此页面。',
'contextPanel.browser.back': '后退',
'contextPanel.browser.forward': '前进',
'contextPanel.browser.reload': '重新加载',
'contextPanel.browser.hardReload': '忽略缓存重新加载',
'contextPanel.browser.zoomIn': '放大',
'contextPanel.browser.zoomOut': '缩小',
'contextPanel.browser.zoomReset': '重置缩放',
'contextPanel.browser.clearCookies': '清除 Cookie',
'contextPanel.browser.clearCache': '清除缓存',
'contextPanel.browser.clearedCookies': '已清除 Cookie',
'contextPanel.browser.clearedCache': '已清除缓存',
'contextPanel.browser.clearFailed': '无法清除浏览数据',
'contextPanel.browser.stop': '停止',
'contextPanel.browser.openExternal': '在系统浏览器中打开',
'contextPanel.browser.devTools': '打开开发者工具',
'contextPanel.browser.deviceToolbar': '设备工具栏',
'contextPanel.browser.device.preset': '设备预设',
'contextPanel.browser.device.responsive': '自适应',
'contextPanel.browser.device.width': '视口宽度',
'contextPanel.browser.device.height': '视口高度',
'contextPanel.browser.device.rotate': '旋转',
'contextPanel.browser.device.schemeSystem': '自动',
'contextPanel.browser.device.schemeLight': '浅色',
'contextPanel.browser.device.schemeDark': '深色',
'contextPanel.browser.device.schemeFailed': '无法更改页面外观',
'contextPanel.browser.frameTitle': '浏览器',
'contextPanel.browser.loadFailed': '无法加载此页面',
'contextPanel.browser.waitingForServer': '正在等待开发服务器',
'contextPanel.browser.waitingForServerHint': '它还没有开始接受连接。一旦可用,本页就会加载。',
'contextPanel.browser.tunnelFailed': '无法连接到这个开发服务器',
'contextPanel.browser.tunnelFailedHint': '{url} 运行在 OpenChamber 所在的机器上,无法与其建立连接。这里不会显示你本机上的任何内容。',
'contextPanel.browser.loadFailedUnknown': '无法访问该页面。',
'contextPanel.browser.crashed': '此页面已停止响应',
'contextPanel.browser.crashedHint': '页面反复崩溃。请重新加载后再试。',
'contextPanel.browser.devServers.title': '正在运行的开发服务器',
'projectActions.toast.multipleServers': '启动了多个服务器 — 请在浏览器面板中选择',
'contextPanel.browser.devServers.justStarted': '刚刚启动',
'contextPanel.browser.devServers.unavailable': '无法检查正在运行的开发服务器。',
'contextPanel.browser.devServers.remoteOnly': '它们运行在托管 OpenChamber 的那台机器上。要打开它们需要桌面应用。',
'contextPanel.browser.annotate.toggle': '标注页面',
'contextPanel.browser.annotate.intro': '这是来自应用内浏览器的标注选区。',
'contextPanel.browser.annotate.attached': '标注已附加到聊天',
'contextPanel.browser.annotate.noSession': '附加标注前请先打开聊天会话',
'contextPanel.browser.annotate.noPage': '标注前请先加载页面',
'contextPanel.browser.annotate.failed': '无法标注此页面',
'contextPanel.browser.annotate.tool.element': '元素',
'contextPanel.browser.annotate.tool.region': '区域',
'contextPanel.browser.annotate.tool.draw': '绘制',
'contextPanel.browser.annotate.commentPlaceholder': '描述所需更改...',
'contextPanel.browser.annotate.submit': '附加',
'contextPanel.browser.trustNotice': '在此打开的页面以对 OpenChamber 的完全访问权限运行 — 检查和截图需要此权限。仅打开你信任的站点:恶意页面可能读取你的数据或以你的身份执行操作。',
'contextPanel.tab.closeTabAria': '关闭 {label} 标签',
'contextPanel.actions.collapsePanel': '折叠面板',
@@ -1210,6 +1341,14 @@ export const dict: Record<I18nKey, string> = {
'sidebarFilesTree.toast.writeNotSupported': '不支持写入',
'sidebarFilesTree.toast.fileCreated': '文件已创建',
'sidebarFilesTree.toast.operationFailed': '操作失败',
'sidebarFilesTree.toast.uploaded': '文件已上传',
'sidebarFilesTree.toast.uploadedWithoutConflicts': '无冲突的文件已上传',
'sidebarFilesTree.toast.uploadFailed': '部分文件无法上传',
'sidebarFilesTree.drop.target': '上传到 {path}',
'sidebarFilesTree.drop.uploading': '正在将文件上传到 {path}',
'sidebarFilesTree.dialog.uploadConflicts.title': '替换现有文件?',
'sidebarFilesTree.dialog.uploadConflicts.description': '{path} 中已存在同名文件。替换后无法撤销。',
'sidebarFilesTree.dialog.uploadConflicts.replace': '替换',
'sidebarFilesTree.toast.folderNameRequired': '文件夹名不能为空',
'sidebarFilesTree.toast.folderCreated': '文件夹已创建',
'sidebarFilesTree.toast.nameRequired': '名称不能为空',
@@ -1266,6 +1405,12 @@ export const dict: Record<I18nKey, string> = {
'filesView.editor.disableLineWrap': '关闭自动换行',
'filesView.editor.enableLineWrap': '开启自动换行',
'filesView.editor.findInFile': '文件内查找',
'filesView.preview.find.placeholder': '在预览中查找',
'filesView.preview.find.nextAria': '下一个匹配',
'filesView.preview.find.previousAria': '上一个匹配',
'filesView.preview.find.closeAria': '关闭搜索',
'filesView.preview.find.noMatches': '无匹配项',
'filesView.preview.find.countAria': '第 {current} 个,共 {total} 个',
'filesView.editor.goToLine': '跳转到行',
'filesView.editor.switchToEditMode': '切换到编辑模式',
'filesView.editor.switchToPreviewMode': '切换到预览模式',
@@ -1317,10 +1462,12 @@ export const dict: Record<I18nKey, string> = {
'contextUsage.mobile.usedTokens': '已用 Token',
'contextUsage.mobile.contextLimit': '上下文上限',
'contextUsage.mobile.outputLimit': '输出上限',
'contextUsage.mobile.cost': '成本',
'contextUsage.mobile.usage': '使用率',
'contextUsage.tooltip.usedTokens': '已用 Token:{tokens}',
'contextUsage.tooltip.contextLimit': '上下文上限:{tokens}',
'contextUsage.tooltip.outputLimit': '输出上限:{tokens}',
'contextUsage.tooltip.cost': '成本:{cost}',
'contextSidebar.session.untitled': '未命名会话',
'contextSidebar.empty.openSession': '请先打开会话以查看上下文。',
'contextSidebar.section.context': '上下文',
@@ -1347,6 +1494,7 @@ export const dict: Record<I18nKey, string> = {
'planView.file.defaultName': 'plan',
'planView.title.default': '计划',
'planView.error.saveFailed': '保存失败',
'planView.error.loadFailed': '无法加载此计划',
'planView.error.previewUnavailable': '预览不可用',
'planView.error.switchToEditMode': '请切换到编辑模式修复问题。',
'planView.error.writeFailed': '写入失败',
@@ -1388,6 +1536,13 @@ export const dict: Record<I18nKey, string> = {
"diffView.scope.changed": "已更改",
"diffView.scope.staged": "已暂存",
"diffView.scope.lastTurn": "上一轮",
"diffView.scope.branch": "分支",
"diffView.branch.resolvingBase": "正在检测基础分支...",
"diffView.branch.noBaseTitle": "没有基础分支",
"diffView.branch.noBaseDescription": "Git 中没有记录此分支的起点。请选择一个基础分支进行比较。",
"diffView.branch.loadError": "加载分支更改失败",
"diffView.branch.loadingFiles": "正在加载分支更改...",
"diffView.branch.empty": "此分支相对于 {base} 没有更改",
"diffView.scope.selectorAria": "选择更改模式",
'diffView.actions.retry': '重试',
'diffView.actions.renderAnyway': '仍然渲染',
@@ -1412,6 +1567,12 @@ export const dict: Record<I18nKey, string> = {
'diffView.reviewDialog.toast.noSessionDirectory': 'Session directory is unavailable',
'diffView.reviewDialog.toast.startFailed': 'Failed to start review flow',
'chat.history.loadOlder': '加载更早的消息',
'chat.appLink.confirm.title': '要在其他应用中打开此链接吗?',
'chat.appLink.confirm.description': '此聊天链接使用 {scheme} 协议,将在其他应用中打开。',
'chat.appLink.confirm.descriptionPlain': '此聊天链接将在其他应用中打开。',
'chat.appLink.confirm.cancel': '取消',
'chat.appLink.confirm.open': '打开一次',
'chat.appLink.confirm.trustAndOpen': '信任并打开',
'chat.autoReview.title': '代码审查循环正在运行',
'chat.autoReview.status.waitingForReviewer': '等待审查者',
'chat.autoReview.status.waitingForImplementer': '等待实现者',
@@ -1429,11 +1590,46 @@ export const dict: Record<I18nKey, string> = {
'diffView.hunk.unsupported': '此运行环境不支持暂存单个代码块。',
'rightSidebar.contextNotesTodo.plan.defaultTitle': '计划',
'rightSidebar.contextNotesTodo.empty.selectProject': '请选择一个项目以添加笔记和待办事项。',
'rightSidebar.contextNotesTodo.notes.title': '快速笔记 - {project}',
'rightSidebar.contextNotesTodo.notes.placeholder': '记录上下文、提醒或链接',
'rightSidebar.contextNotesTodo.todo.title': '待办',
'rightSidebar.contextNotesTodo.todo.itemsSingle': '{count} 项',
'rightSidebar.contextNotesTodo.todo.itemsPlural': '{count} 项',
'rightSidebar.contextNotesTodo.notes.addAria': '添加笔记',
'rightSidebar.contextNotesTodo.notes.empty': '还没有笔记。可以记录上下文、提醒或链接。',
'rightSidebar.contextNotesTodo.notes.actions.expand': '展开笔记',
'rightSidebar.contextNotesTodo.notes.actions.collapse': '折叠笔记',
'rightSidebar.contextNotesTodo.notes.actions.delete': '删除笔记',
'rightSidebar.contextNotesTodo.notes.actions.pin': '固定到智能体上下文',
'rightSidebar.contextNotesTodo.notes.actions.unpin': '从智能体上下文取消固定',
'rightSidebar.contextNotesTodo.notes.source.selection': '来自对话',
'rightSidebar.contextNotesTodo.notes.source.agent': '来自智能体',
'rightSidebar.contextNotesTodo.search.placeholder': '搜索',
'rightSidebar.contextNotesTodo.search.clear': '清除搜索',
'rightSidebar.contextNotesTodo.search.noResults': '没有匹配 "{query}" 的内容。',
'rightSidebar.contextNotesTodo.toast.deleteNoteFailed': '删除笔记失败',
'rightSidebar.contextNotesTodo.toast.createNoteFailed': '创建笔记失败',
'rightSidebar.contextNotesTodo.tabs.notes': '笔记',
'rightSidebar.contextNotesTodo.tabs.todos': '待办',
'rightSidebar.contextNotesTodo.tabs.plans': '计划',
'rightSidebar.contextNotesTodo.plans.actions.back': '返回计划列表',
'rightSidebar.contextNotesTodo.tabs.memory': '记忆',
'rightSidebar.contextNotesTodo.sections.label': '项目上下文分区',
'rightSidebar.contextNotesTodo.sections.resize': '调整分区侧栏宽度',
'rightSidebar.contextNotesTodo.memory.scope.project': '项目',
'rightSidebar.contextNotesTodo.memory.scope.label': '记忆范围',
'rightSidebar.contextNotesTodo.memory.scope.global': '关于你',
'rightSidebar.contextNotesTodo.memory.type.fact': '事实',
'rightSidebar.contextNotesTodo.memory.badge.new': '新增',
'rightSidebar.contextNotesTodo.memory.flagged': '不会发送给智能体 — 读起来像指令',
'rightSidebar.contextNotesTodo.memory.badge.changed': '已更改',
'rightSidebar.contextNotesTodo.memory.type.preference': '偏好',
'rightSidebar.contextNotesTodo.memory.type.reference': '参考',
'rightSidebar.contextNotesTodo.memory.actions.delete': '删除这条记忆',
'rightSidebar.contextNotesTodo.memory.actions.editTitle': '记忆标题',
'rightSidebar.contextNotesTodo.memory.actions.editBody': '记忆内容',
'rightSidebar.contextNotesTodo.memory.toast.saveFailed': '保存记忆失败',
'rightSidebar.contextNotesTodo.memory.toast.deleteFailed': '删除记忆失败',
'rightSidebar.contextNotesTodo.memory.empty.nothing': '智能体还没有在这里存过内容。',
'rightSidebar.contextNotesTodo.memory.empty.noMatches': '没有匹配搜索的已存记忆。',
'rightSidebar.contextNotesTodo.memory.empty.noProject': '打开一个项目,查看智能体记住了什么。',
'rightSidebar.contextNotesTodo.memory.empty.unavailable': '无法加载已存记忆。内容并未丢失,请重试。',
'rightSidebar.contextNotesTodo.todo.clearCompleted': '清除已完成',
'rightSidebar.contextNotesTodo.todo.inputPlaceholder': '添加待办',
'rightSidebar.contextNotesTodo.todo.addAria': '添加待办',
@@ -1444,13 +1640,9 @@ export const dict: Record<I18nKey, string> = {
'rightSidebar.contextNotesTodo.todo.actions.delete': '删除“{text}”',
'rightSidebar.contextNotesTodo.todo.actions.send': '发送“{text}”',
'rightSidebar.contextNotesTodo.todo.actions.reorder': '重新排序"{text}"',
'rightSidebar.contextNotesTodo.todo.resizeAria': '调整待办列表大小',
'rightSidebar.contextNotesTodo.todo.sendMenu.currentSession': '发送到当前会话',
'rightSidebar.contextNotesTodo.todo.sendMenu.newSession': '发送到新会话',
'rightSidebar.contextNotesTodo.todo.sendMenu.newWorktreeSession': '发送到新工作树会话',
'rightSidebar.contextNotesTodo.plans.title': '计划',
'rightSidebar.contextNotesTodo.plans.filesSingle': '{count} 个文件',
'rightSidebar.contextNotesTodo.plans.filesPlural': '{count} 个文件',
'rightSidebar.contextNotesTodo.plans.importFromFile': '从文件导入计划',
'rightSidebar.contextNotesTodo.plans.empty': '还没有已保存的计划。',
'rightSidebar.contextNotesTodo.plans.deletePlan': '删除计划',
@@ -1470,13 +1662,14 @@ export const dict: Record<I18nKey, string> = {
'rightSidebar.contextNotesTodo.toast.sentToNewSession': '待办已发送到新会话',
'rightSidebar.contextNotesTodo.toast.sentToNewWorktreeSession': '待办已发送到新的工作树会话',
'rightSidebar.contextNotesTodo.toast.sendTodoFailed': '发送待办失败',
'rightSidebar.contextNotesTodo.toast.updatePlanFailed': '更新计划失败',
'rightSidebar.contextNotesTodo.toast.deletePlanFailed': '删除计划失败',
'rightSidebar.contextNotesTodo.toast.planFileEmpty': '计划文件为空',
'rightSidebar.contextNotesTodo.toast.importPlanFailed': '导入计划失败',
'rightSidebar.contextNotesTodo.toast.planImported': '计划已导入',
'rightSidebar.contextNotesTodo.toast.readPlanFileFailed': '读取计划文件失败',
'inlineComment.range.lines': '行 {start}-{end}',
'inlineComment.input.placeholder': '添加评论...(Cmd+Enter 保存)',
'inlineComment.input.placeholder': '添加评论...({shortcut} 保存)',
'inlineComment.input.placeholderShort': '添加评论…',
'inlineComment.actions.cancel': '取消',
'inlineComment.actions.save': '保存',
@@ -1495,8 +1688,6 @@ export const dict: Record<I18nKey, string> = {
'header.github.accountSource.cli': 'CLI',
'header.services.openWithCurrent': '打开实例、用量和 MCP(当前:{current})',
'header.services.open': '打开服务、用量和 MCP',
'header.services.tooltip.currentInstanceWithShortcuts': '当前实例:{current}({toggle};下一标签 {nextTab})',
'header.services.tooltip.servicesWithShortcuts': '服务({toggle};下一标签 {nextTab})',
'header.services.title': '服务',
'header.services.viewAria': '查看服务',
'header.services.closeAria': '关闭服务',
@@ -1512,7 +1703,6 @@ export const dict: Record<I18nKey, string> = {
'header.services.remoteUpdate.actions.open': '更新',
'header.services.used': '已用',
'header.services.remaining': '剩余',
'header.services.shutdownDev': '停止 OpenChamber',
'header.services.modelFamily.other': '其他',
'header.actions.openPlanAria': '打开计划',
"header.actions.toggleChangesPanel": "更改面板",
@@ -1606,6 +1796,10 @@ export const dict: Record<I18nKey, string> = {
'directoryExplorerDialog.browse.directories': '目录',
'directoryExplorerDialog.browse.loading': '正在加载目录...',
'directoryExplorerDialog.browse.empty': '没有匹配的目录。',
'directoryExplorerDialog.browse.permissionDenied': 'OpenChamber 需要访问此文件夹。',
'directoryExplorerDialog.browse.loadFailed': '无法加载此文件夹。',
'directoryExplorerDialog.browse.grantAccess': '授予访问权限',
'directoryExplorerDialog.browse.retry': '重试',
'directoryExplorerDialog.browse.parentDirectory': '上级目录',
'directoryExplorerDialog.browse.addedBadge': '已添加',
'directoryExplorerDialog.browse.quickAdd': '添加',
@@ -1665,22 +1859,18 @@ export const dict: Record<I18nKey, string> = {
'helpDialog.item.focusChatInput': '聚焦聊天输入框',
'helpDialog.item.togglePromptNavigator': '显示或隐藏提示词导航',
'helpDialog.item.abortActiveRun': '中止当前运行(双击)',
'helpDialog.item.toggleRightSidebar': '切换上下文面板',
'helpDialog.item.openRightSidebarGitTab': '打开 Git 界面',
'helpDialog.item.openRightSidebarFilesTab': '打开文件界面',
'helpDialog.item.toggleTerminalDock': '切换终端停靠栏',
'helpDialog.item.toggleTerminalExpanded': '切换终端展开状态',
'helpDialog.item.togglePlanContextPanel': '切换计划上下文面板',
'helpDialog.item.cycleTheme': '循环切换主题(浅色 → 深色 → 跟随系统)',
'helpDialog.item.switchProject': '切换项目',
'helpDialog.item.switchSessionTab': '切换会话标签页',
'helpDialog.item.switchContextSurface': '切换上下文面板界面(数字键)',
'helpDialog.item.toggleServicesMenu': '切换服务菜单',
'helpDialog.item.cycleServicesTab': '循环服务标签',
'helpDialog.item.openSettings': '打开设置',
'helpDialog.keyCombiner.or': '或',
'helpDialog.proTips.title': '使用提示:',
'helpDialog.proTips.commandPalette': '使用命令面板({shortcut})可快速访问所有操作',
'helpDialog.proTips.recentSessions': '最近 5 个会话会显示在命令面板中',
'helpDialog.proTips.themeCycling': '主题循环会记住你在各会话中的偏好',
'helpDialog.proTips.leaderSequences': '两段式快捷键:先按组合键,再按第二个键(Esc 取消)',
'header.actions.rightSidebarWithShortcut': '右侧边栏({shortcut})',
'header.actions.toggleRightSidebarAria': '切换右侧边栏',
'header.actions.openAppMenu': 'OpenChamber 菜单',
@@ -1764,8 +1954,6 @@ export const dict: Record<I18nKey, string> = {
'session.newWorktree.noMatchingBranches': '没有匹配分支',
'session.newWorktree.localBranches': '本地分支',
'session.newWorktree.remoteBranches': '远程分支',
'session.newWorktree.otherLocalBranches': '其他本地分支',
'session.newWorktree.otherRemoteBranches': '其他远程分支',
'session.newWorktree.branchName': '分支名',
'session.newWorktree.branchNamePlaceholder': 'feature/my-awesome-feature',
'session.newWorktree.actions.change': '更改',
@@ -1890,7 +2078,6 @@ export const dict: Record<I18nKey, string> = {
'chat.statusRow.tasksTitle': '任务',
'chat.statusRow.modelStatus': '{model} · {status}',
'chat.statusRow.summary.activeLeft': '{active} 个活跃 · 剩余 {left} 个',
'chat.statusRow.aborted': '已中止',
'chat.revertIndicator.redo': '重做',
'chat.revertIndicator.redoAria': '重做 — 恢复已撤回的消息',
'chat.revertPopover.title': '已撤回',
@@ -1904,6 +2091,9 @@ export const dict: Record<I18nKey, string> = {
'chat.revert.toast.undo': '已撤回至 {preview}',
'chat.revert.toast.redo': '已重做',
'chat.revert.toast.restored': '已恢复全部消息',
'chat.toast.opencodeRestartInterrupted.title': '聊天已中断',
'chat.toast.opencodeRestartInterrupted.description': 'OpenCode 在回复仍在生成时重启了。发送一条消息以继续。',
'chat.toast.opencodeRestartInterrupted.openSession': '打开会话',
'chat.errorBoundary.title': '聊天错误',
'chat.errorBoundary.description': '聊天界面发生错误,可能是临时网络问题或消息数据损坏导致。',
'chat.errorBoundary.sessionLabel': '会话',
@@ -1930,6 +2120,7 @@ export const dict: Record<I18nKey, string> = {
'chat.commandAutocomplete.command.catchUpDescription': '重新进入上下文:你之前在做什么、从哪里继续。',
'chat.commandAutocomplete.command.debugDescription': '在提出修复方案前,引导式地排查 bug 的根本原因。',
'chat.commandAutocomplete.command.weighDescription': '在动手前,权衡 2-3 种方案的利弊并给出推荐。',
'chat.commandAutocomplete.command.btwDescription': '在临时子会话中提问,不打断当前对话',
'chat.commandAutocomplete.command.exploreDescription': '快速熟悉这个代码库:对架构和主要部分的概览。',
'chat.commandAutocomplete.badge.skill': '技能',
'chat.commandAutocomplete.badge.command': '命令',
@@ -1950,13 +2141,28 @@ export const dict: Record<I18nKey, string> = {
'chat.container.returnToParent.titleNamed': '返回到:{title}',
'chat.container.returnToParent.title': '返回父会话',
'chat.container.returnToParent.label': '父级',
'chat.btw.destroyAria': '销毁此 btw 会话',
'chat.btw.titleFallback': 'btw 会话',
'chat.btw.mainComposerPlaceholder': '在此 btw 会话中提问…',
'chat.btw.loading': '正在启动 btw 会话…',
'chat.btw.toast.emptyArgument': '在 /btw 后输入问题',
'chat.btw.toast.createFailed': '启动 btw 会话失败',
'chat.btw.toast.destroyFailed': '销毁 btw 会话失败。它将保留在侧边栏中。',
'chat.btw.working': '处理中…',
'chat.btw.collapseAria': '收起 btw 面板',
'chat.btw.expandAria': '展开 btw 面板',
'chat.btw.promoteAria': '保留为独立会话',
'chat.btw.toast.promoteFailed': '保留 btw 会话失败',
'chat.container.readOnlySubagentPromptBanner': '无法向子智能体会话发送提示。',
'chat.container.sessionLoadError.title': '无法加载会话',
'chat.container.sessionLoadError.description': '请检查连接,然后重新加载此会话。',
'chat.container.sessionLoadError.description': '无法获取对话——服务器可能已关闭或无法访问。内容没有丢失;等它恢复后重试即可。',
'chat.container.sessionLoadError.authDescription': '会话已过期,服务器拒绝了请求。登录后对话即会加载。',
'chat.container.sessionLoadError.retry': '重试',
'sessions.sidebar.group.empty.loadingSessions': '正在加载会话…',
'sessions.sidebar.group.empty.loadFailed': '无法刷新会话。',
'sessions.sidebar.group.empty.retry': '重试',
'sessions.sidebar.group.empty.permissionDenied': '需要文件夹访问权限。',
'sessions.sidebar.group.empty.grantAccess': '授予访问权限',
'chat.unifiedControls.title': '控制',
'chat.unifiedControls.model.title': '模型',
'chat.unifiedControls.model.noRecent': '没有最近使用的模型',
@@ -1988,12 +2194,13 @@ export const dict: Record<I18nKey, string> = {
'chat.textSelection.toast.addToNotesFailed': '添加到笔记失败',
'chat.textSelection.toast.addToNotesSuccess': '已将选中文本添加到笔记',
'chat.textSelection.toast.addToNotesSummaryFailed': '无法总结所选内容,已将所选文本添加到笔记',
'chat.textSelection.actions.addToChat': '添加到聊天',
'chat.textSelection.actions.newSession': '新建会话',
'chat.textSelection.actions.copy': '复制',
'chat.textSelection.actions.addToInput': '添加到输入框',
'chat.textSelection.actions.comment': '评论',
'chat.textSelection.title.commentOnSelection': '评论所选内容',
'chat.textSelection.comment.placeholder': '添加可选评论...',
'chat.textSelection.comment.attach': '附加',
'chat.textSelection.actions.addToNotes': '添加到笔记',
'chat.textSelection.title.addToCurrentChat': '添加到当前聊天',
'chat.textSelection.title.newSessionWithSelection': '使用选中内容创建新会话',
'chat.textSelection.title.saveInsightToNotes': '将选中文本保存到笔记',
'chat.messageBody.actions.revertAria': '回退到这条消息',
'chat.messageBody.actions.revert': '从此处回退',
@@ -2089,6 +2296,7 @@ export const dict: Record<I18nKey, string> = {
'chat.chatInput.toast.attachmentsTooLarge': '附件过大,无法发送。请减少图片数量或大小。',
'chat.chatInput.toast.sendAttachmentsFailed': '发送附件失败。请尝试更少文件或更小图片。',
'chat.chatInput.toast.messageSendFailed': '消息发送失败,附件已恢复。',
'chat.chatInput.toast.noModelSelected': '发送前请先选择提供商和模型。',
'chat.chatInput.toast.clipboardAttachFailed': '从剪贴板附加图片失败',
'chat.chatInput.toast.clipboardTextAttachFailed': '无法将粘贴的文本附加为文件',
'chat.chatInput.toast.largeTextPaste.title': '检测到大段文本',
@@ -2104,8 +2312,6 @@ export const dict: Record<I18nKey, string> = {
'chat.chatInput.toast.togglePermissionAutoAcceptFailed': '切换权限自动接受失败',
'chat.chatInput.reviewComments': '审查评论:',
'chat.chatInput.reviewCommentsRemove': '移除审查评论',
'chat.chatInput.devServerLogs': 'Dev Server 日志:',
'chat.chatInput.devServerLogsRemove': '移除 Dev Server 日志',
'chat.chatInput.previewAnnotations': '预览注释:',
'chat.chatInput.previewContext': '预览上下文:',
'chat.chatInput.previewContextRemove': '移除预览上下文',
@@ -2144,6 +2350,7 @@ export const dict: Record<I18nKey, string> = {
'chat.toolPart.showRawJson': '显示原始 JSON',
'chat.toolPart.showFormattedJson': '显示格式化 JSON',
'chat.toolPart.showNavigableJson': '显示可导航 JSON',
'chat.toolPart.openFile': '打开文件',
'chat.toolPart.openFileAtFirstChange': '在首次更改处打开文件',
'chat.toolPart.openFileDiff': '打开文件差异',
'chat.toolPart.copyOutput': '复制输出',
@@ -2275,6 +2482,15 @@ export const dict: Record<I18nKey, string> = {
'commandPalette.item.toggleSidebar': '切换侧边栏',
'commandPalette.item.showContextUsage': '显示上下文用量',
'commandPalette.item.toggleTerminal': '切换终端',
'commandPalette.item.cycleTheme': '轮换主题',
'commandPalette.item.showOpenCodeStatus': '显示 OpenCode 状态',
'commandPalette.item.toggleMemoryDebug': '切换内存调试面板',
'commandPalette.item.pinSession': '固定或取消固定会话',
'commandPalette.item.copySessionId': '复制会话 ID',
'commandPalette.item.openMultiRun': '打开多任务启动器',
'commandPalette.item.openArchive': '打开已归档会话',
'commandPalette.item.openNotes': '打开笔记面板',
'commandPalette.item.openTodos': '打开待办面板',
'commandPalette.item.openSettings': '打开设置...',
'commandPalette.session.untitled': '未命名会话',
'openCodeStatusDialog.title': 'OpenCode 状态',
@@ -2489,6 +2705,9 @@ export const dict: Record<I18nKey, string> = {
'sessionAuth.error.passkeySignInCanceled': 'Passkey 登录已取消。',
'sessionAuth.error.enterPasswordForPasskey': '请输入密码以添加 passkey。',
'sessionAuth.locked.tunnelTitle': '需要隧道访问',
'sessionAuth.expired.banner': '会话已过期——请登录以继续。',
'sessionAuth.expired.loginAction': '登录',
'sessionAuth.expired.sendBlocked': '会话已过期——请登录后再发送消息。',
'sessionAuth.locked.unlockTitle': '解锁 OpenChamber',
'sessionAuth.locked.tunnelDescription': '请使用桌面应用提供的一次性连接链接打开该隧道。',
'sessionAuth.locked.passwordDescription': '此会话受密码保护。',
@@ -2771,6 +2990,10 @@ export const dict: Record<I18nKey, string> = {
'updateDialog.status.updating': '更新中...',
'updateDialog.error.updateFailed': '更新失败',
'updateDialog.error.takingLonger': '更新耗时超出预期。请稍等后刷新,或运行:openchamber update',
'updateDialog.error.signatureRejected': '下载的更新被拒绝:其代码签名与当前安装不匹配。这通常说明正在运行的副本不是从官方签名版本安装的。请从官方版本安装 OpenChamber,然后再次更新。',
'updateDialog.error.updaterDisabled': '一次安装失败后,更新程序已停止。请退出 OpenChamber,重新打开后再试一次更新。',
'updateDialog.error.restartFailed': '无法重启以安装更新。',
'updateDialog.error.restartUnavailable': '安装更新需要 OpenChamber 桌面应用。',
'mobileUpdate.toast.available.title': 'OpenChamber 更新可用',
'mobileUpdate.toast.available.description': '版本 {version} 已可用于 Android。',
'mobileUpdate.toast.actions.download': '下载',
@@ -2791,6 +3014,7 @@ export const dict: Record<I18nKey, string> = {
'memoryDebugPanel.title': '调试面板',
'memoryDebugPanel.tabs.memory': '内存',
'memoryDebugPanel.tabs.streaming': '流式',
'memoryDebugPanel.tabs.requests': '请求',
'memoryDebugPanel.section.sessionsInMemory': '内存中的会话',
'memoryDebugPanel.section.uiStreamingMetrics': 'UI 流式指标',
'memoryDebugPanel.section.vscodeBridgeMetrics': 'VS Code 桥接指标',
@@ -2828,6 +3052,16 @@ export const dict: Record<I18nKey, string> = {
'memoryDebugPanel.streaming.copy.copied': '流式调试 JSON 已复制',
'memoryDebugPanel.streaming.copy.failed': '复制 JSON 失败',
'memoryDebugPanel.streaming.copy.hint': '复制会导出 UI 与 VS Code 的流式指标 JSON',
'memoryDebugPanel.requests.inFlight': '进行中',
'memoryDebugPanel.requests.peak': '峰值',
'memoryDebugPanel.requests.duration': '时长',
'memoryDebugPanel.requests.totalRequests': '请求总数',
'memoryDebugPanel.requests.tracking': '跟踪',
'memoryDebugPanel.requests.now': '当前',
'memoryDebugPanel.requests.noSamples': '尚未记录请求。保持此面板打开以记录 fetch 活动。',
'memoryDebugPanel.requests.chartLabel': '随时间变化的进行中 fetch 请求,峰值 {peak}',
'memoryDebugPanel.requests.windowHint': '最近 {seconds}秒',
'memoryDebugPanel.requests.percentileChartLabel': '进行中请求年龄百分位(p50、p90、p99、最大值)随时间的变化',
'memoryDebugPanel.common.idle': '空闲',
'memoryDebugPanel.common.live': '实时',
'memoryDebugPanel.common.notAvailable': '无',
@@ -2900,18 +3134,23 @@ export const dict: Record<I18nKey, string> = {
'common.relative.daysAgoCompact': '{count}d ago',
'common.relative.weeksAgoCompact': '{count}w ago',
'common.relative.yearsAgoCompact': '{count}y ago',
'common.duration.secondsCompact': '{seconds}秒',
'common.duration.minutesSecondsCompact': '{minutes}分{seconds}秒',
'common.duration.hoursMinutesCompact': '{hours}小时{minutes}分',
'contextFileOpen.failure.tooLarge': 'File is too large to open (>{count} lines)',
'contextFileOpen.failure.missing': 'File not found',
'contextFileOpen.failure.unreadable': 'Failed to open file',
'quota.window.5h': '5-Hour',
'quota.window.7d': '7-Day Limit',
'quota.window.7dSonnet': '7-Day Sonnet Limit',
'quota.window.7dOpus': '7-Day Opus Limit',
'quota.window.weekly': 'Weekly Limit',
'quota.window.extraUsage': '额外用量',
'quota.window.weekly': '每周',
'quota.window.daily': 'Daily',
'quota.window.monthly': 'Monthly Limit',
'quota.window.monthly': '每月',
'quota.window.credits': 'Credits',
'quota.window.creditsBalance': 'Credits Balance',
'quota.window.monthlyCredits': '每月积分',
'quota.window.purchasedCredits': '已购买积分',
'quota.window.freeCredits': '免费积分',
'quota.window.billingCycle': 'Billing Cycle',
'quota.window.auto': 'Auto',
'quota.window.api': 'API',
@@ -2921,5 +3160,104 @@ export const dict: Record<I18nKey, string> = {
'quota.window.premium': 'Premium Interactions',
'quota.window.chat': 'Chat Requests',
'quota.window.completions': 'Completions',
'quota.window.premiumInteractions': 'Premium interactions',
'quota.window.premiumInteractions': 'AI 点数',
'chat.workStatus.ariaLabel': '工作状态',
'chat.workStatus.context.label': '上下文',
'chat.workStatus.cost.breakdown': '会话 {session} · 子智能体 {subagents}',
'chat.workStatus.git.changedFileSingle': '已更改 {count} 个文件',
'chat.workStatus.git.changedFilePlural': '已更改 {count} 个文件',
'chat.workStatus.pr.untitled': '未命名的拉取请求',
'chat.workStatus.pr.draft': '草稿',
'chat.workStatus.pr.checks': '检查',
'chat.workStatus.pr.checksFailed': '{count} 项失败',
'chat.workStatus.pr.checksPending': '{count} 项进行中',
'chat.workStatus.pr.checksPassed': '{count} 项通过',
'chat.workStatus.attention.merge': '正在合并',
'chat.workStatus.attention.rebase': '正在变基',
'chat.workStatus.attention.cherryPick': '正在拣选提交',
'chat.workStatus.attention.revert': '正在还原',
'chat.workStatus.attention.bisect': '正在二分查找',
'chat.workStatus.subagent.done': '已完成',
'chat.workStatus.subagent.untitled': '子代理',
'chat.workStatus.mcp.toggle': '切换 {name}',
'chat.workStatus.mcp.needsAuth': '登录',
'chat.workStatus.mcp.failed': '失败',
'chat.workStatus.pinned.unavailable': '已固定的消息',
'chat.workStatus.section.session': '会话',
'chat.workStatus.section.project': '项目',
'chat.workStatus.section.subagents': '子代理',
'chat.workStatus.section.mcp': 'MCP',
'chat.workStatus.section.pinned': '已固定的消息',
'chat.workStatus.section.tasks': '任务',
'chat.workStatus.subagent.working': '正在工作',
'chat.workStatus.subagent.needsPermission': '需要授权',
'chat.workStatus.subagent.askedQuestion': '提出了问题',
'chat.workStatus.section.contextBreakdown': '上下文来源',
'chat.workStatus.breakdown.skills': '技能',
'chat.workStatus.breakdown.pinnedNote': '笔记',
'chat.workStatus.breakdown.unpin': '从上下文取消固定',
'chat.workStatus.breakdown.pinnedPlan': '计划',
'chat.workStatus.breakdown.memory': '智能体记忆',
'chat.workStatus.breakdown.pinnedKnowledgeSingle': '已固定 {count}',
'chat.workStatus.breakdown.pinnedKnowledgePlural': '已固定 {count}',
'chat.workStatus.breakdown.mcp': 'MCP 服务器',
'chat.workStatus.action.openChanges': '打开更改',
'chat.workStatus.action.openGit': '打开 Git 面板',
'chat.workStatus.action.openPr': '打开拉取请求',
'chat.workStatus.action.openSubagent': '打开 {name}',
'chat.workStatus.section.usage': '用量',
'chat.workStatus.goal.open': '管理目标',
'chat.workStatus.goal.pause': '暂停',
'chat.workStatus.goal.resume': '继续',
'chat.workStatus.goal.updateFailed': '无法更新目标',
'chat.workStatus.pinned.unpin': '取消固定消息',
'chat.workStatus.pinned.reveal': '跳转到消息',
'chat.workStatus.pinned.unpinFailed': '无法取消固定消息',
'chat.workStatus.action.openContext': '打开上下文面板',
'chat.workStatus.section.linkedIssues': '已关联',
'chat.workStatus.linkedIssues.open': '在 GitHub 上打开 #{number}',
'chat.workStatus.linkedIssues.unlink': '移除关联',
'chat.workStatus.linkedIssues.unlinkFailed': '无法移除关联',
'chat.workStatus.linkedIssues.link': '关联到会话',
'chat.workStatus.linkedIssues.linkFailed': '无法关联',
'chat.workStatus.breakdown.issueCountSingle': '{count} 个 issue',
'chat.workStatus.breakdown.issueCountPlural': '{count} 个 issue',
'chat.workStatus.breakdown.prCountSingle': '{count} 个 PR',
'chat.workStatus.breakdown.prCountPlural': '{count} 个 PR',
'chat.workStatus.breakdown.skillCountSingle': '{count} 个技能',
'chat.workStatus.breakdown.skillCountPlural': '{count} 个技能',
'chat.workStatus.breakdown.mcpCountSingle': '{count} 个 MCP',
'chat.workStatus.breakdown.mcpCountPlural': '{count} 个 MCP',
'chat.workStatus.sections.open': '选择板块',
'chat.workStatus.sections.dialogTitle': '面板板块',
'chat.workStatus.sections.dialogDescription': '选择工作状态面板显示的内容。隐藏的板块仍保留数据,只是不再显示。',
'chat.workStatus.sections.allHidden': '未选择任何部分',
'chat.workStatus.sections.showAll': '全部显示',
'chat.workStatus.sections.noneWarning': '面板将显示为空。',
'header.workStatusPanel.toggleAria': '切换工作状态面板',
'header.workStatusPanel.hide': '隐藏工作状态',
'header.workStatusPanel.show': '显示工作状态',
'chat.workStatus.mcp.authorizeOpenFailed': '无法打开授权页面',
'chat.workStatus.mcp.authorizeFailed': '授权失败',
'mcpDropdown.toast.authorizeOpenFailed': '无法打开授权页面',
'mcpDropdown.toast.authorizeFailed': '授权失败',
'header.services.tooltip.currentInstance': '当前实例:{current}({toggle})',
'header.workStatusPanel.showOverlay': '在聊天上方显示工作状态',
'settings.mcp.page.connection.title': '如何连接',
'settings.mcp.page.connection.description': '粘贴启动命令,或托管服务器的链接。',
'settings.mcp.page.registration.title': '此服务器需要独立应用',
'settings.mcp.page.registration.description': '它不会自动下发凭据。请在该服务的设置中创建应用,把信息粘贴到这里,然后登录。',
'settings.mcp.page.registration.callbackLabel': '把这个地址填入该服务',
'settings.mcp.page.registration.clientId': '应用 ID',
'settings.mcp.page.registration.clientSecret': '应用密钥',
'settings.mcp.page.registration.afterSaving': '保存后点击“授权”。',
'settings.mcp.page.toast.copiedCallbackUrl': '已复制地址',
'settings.mcp.page.toast.clipboardWriteFailed': '无法复制到剪贴板',
'settings.mcp.page.scope.everywhere': '在所有项目中可用',
'settings.mcp.page.scope.thisProject': '仅在此项目中',
'settings.mcp.page.env.description': '服务器需要的值,例如 API 密钥。',
'settings.mcp.page.connection.kindCommand': '命令',
'settings.mcp.page.connection.kindLink': '链接',
'settings.mcp.page.connection.hintCommand': '在本机运行。粘贴完整命令后会按每行一个参数拆分。',
'settings.mcp.page.connection.hintLink': '连接到他人托管的服务器。粘贴其 https 地址。',
};
@@ -1,8 +1,10 @@
export const settingsDict = {
import { thirdPartyIntegrationI18n } from './third-party-integrations.i18n';
export const settingsDict = {
'settings.providers.page.openCodeGo.title': 'OpenCode Go 用量追蹤',
'settings.providers.page.openCodeGo.description': '連接 OpenCode Go 控制面板以顯示滾動、每週和每月配額。',
'settings.providers.page.openCodeGo.workspaceId': '工作區 ID',
'settings.providers.page.openCodeGo.authCookie': '驗證 Cookie',
'settings.providers.page.openCodeGo.apiKey': 'API 金鑰',
'settings.providers.page.openCodeGo.help': '從控制面板網址複製工作區 ID,並從瀏覽器開發者工具複製 auth Cookie。OpenChamber 絕不會掃描瀏覽器 Cookie 儲存空間。',
'settings.providers.page.openCodeGo.save': '儲存並驗證',
'settings.providers.page.openCodeGo.replace': '取代',
@@ -38,7 +40,20 @@
'settings.view.badge.beta': 'beta',
'settings.view.actions.reloadOpenCode': '重新載入 OpenCode',
'settings.view.actions.reloadOpenCodeTooltip': '重新啟動 OpenCode 並重新載入其設定。',
'settings.view.actions.backToSettings': '返回設定頁',
'settings.view.actions.applyAndRestartOpenCode': '套用並重新啟動',
'settings.view.actions.applyAndRestartOpenCodeTooltipSingle': '套用 1 項待處理的設定變更並重新啟動 OpenCode。',
'settings.view.actions.applyAndRestartOpenCodeTooltipPlural': '套用 {count} 項待處理的設定變更並重新啟動 OpenCode。',
'settings.view.pendingRestart.applying': '正在重新啟動…',
'settings.view.pendingRestart.applied': '已使用待處理的設定變更重新啟動 OpenCode。',
'settings.view.pendingRestart.applyFailed': '套用設定變更失敗。',
'settings.view.pendingRestart.manualRestartRequired': '已儲存到磁碟。請重新啟動已連線的 OpenCode 伺服器以套用變更。',
'settings.view.pendingRestart.saved': '已儲存。請重新啟動 OpenCode 以套用。',
'settings.view.pendingRestart.confirm.title': '套用並重新啟動?',
'settings.view.pendingRestart.confirm.description': '重新啟動 OpenCode 將停止任何執行中的聊天。已儲存的設定變更將在重新啟動後生效。',
'settings.view.pendingRestart.confirm.dontShowAgain': '不要再顯示',
'settings.view.pendingRestart.confirm.cancel': '取消', 'settings.view.actions.backToSettings': '返回設定頁',
'settings.view.actions.closeSettings': '關閉設定',
'settings.view.actions.openSectionList': '開啟群組清單',
'settings.view.actions.closeSettingsWithShortcut': '關閉設定({shortcut}+,)',
@@ -356,14 +371,14 @@
'settings.remoteInstances.page.field.modePlaceholder': '選擇模式',
'settings.remoteInstances.page.field.modeManaged': 'Managed(自動啟動)',
'settings.remoteInstances.page.field.modeExternal': 'External(已在執行)',
'settings.remoteInstances.page.field.preferredRemotePort': '偏好遠端連接埠',
'settings.remoteInstances.page.field.preferredRemotePortHint': 'OpenChamber 在遠端主機使用的連接埠。留空則由執行時自動選擇。',
'settings.remoteInstances.page.field.preferredRemotePort': '遠端機器上的連接埠',
'settings.remoteInstances.page.field.preferredRemotePortHint': 'OpenChamber 在遠端機器上使用的連接埠。留空則自動選擇。',
'settings.remoteInstances.page.field.keepServerRunning': '保持服務執行',
'settings.remoteInstances.page.field.keepServerRunningHint': '啟用後,中斷連線時會保留遠端 OpenChamber 背景程式。',
'settings.remoteInstances.page.field.bindHost': '綁定主機',
'settings.remoteInstances.page.field.bindHostHint': '主本機存取位址使用的網路介面。使用 127.0.0.1/localhost 可僅限本機存取。',
'settings.remoteInstances.page.field.preferredLocalPort': '偏好本機連接埠',
'settings.remoteInstances.page.field.preferredLocalPortHint': '主 OpenChamber tunnel 的偏好本機連接埠。留空自動選擇。',
'settings.remoteInstances.page.field.keepServerRunningHint': '中斷後讓遠端伺服器繼續執行。關閉時會在中斷時停止,並在下次連線時重新啟動。',
'settings.remoteInstances.page.field.bindHost': '誰可以存取',
'settings.remoteInstances.page.field.bindHostHint': '誰可以開啟這台電腦上的轉發位址。無論哪種選擇,遠端機器本身都只能透過 SSH 隧道存取。',
'settings.remoteInstances.page.field.preferredLocalPort': '這台電腦上的連接埠',
'settings.remoteInstances.page.field.preferredLocalPortHint': '為隧道在這台電腦上開啟的連接埠。留空則自動選擇。',
'settings.remoteInstances.page.field.forwardType': '轉送類型',
'settings.remoteInstances.page.field.localHostPlaceholder': '127.0.0.1',
'settings.remoteInstances.page.field.remoteHostPlaceholder': '127.0.0.1',
@@ -383,6 +398,10 @@
'settings.common.actions.cancel': '取消',
'settings.common.actions.create': '建立',
'settings.common.actions.delete': '刪除',
'settings.openchamber.appLinks.title': '受信任的應用程式連結',
'settings.openchamber.appLinks.info': '此清單中的連結在這台裝置上開啟時不再詢問。其他應用程式連結在開啟前一律需要確認。',
'settings.openchamber.appLinks.empty': '這台裝置上目前沒有受信任的應用程式連結。開啟連結時選擇「信任並開啟」即可加入這裡。',
'settings.openchamber.appLinks.removeAria': '移除受信任的 {scheme} 連結',
'settings.common.actions.reset': '重設',
'settings.common.actions.rename': '重新命名',
'settings.common.actions.duplicate': '複製',
@@ -428,6 +447,9 @@
'settings.openchamber.about.title': '關於 OpenChamber',
'settings.openchamber.about.field.version': '版本',
'settings.openchamber.about.field.openCodeVersion': 'OpenCode 版本',
'settings.openchamber.about.field.instanceUrls': '執行個體 URL',
'settings.openchamber.about.field.applicationUrl': '應用程式',
'settings.openchamber.about.field.tunnelUrl': '隧道',
'settings.openchamber.about.state.checking': '檢查中...',
'settings.openchamber.about.state.upToDate': '已是最新',
'settings.openchamber.about.state.unknown': '未知',
@@ -844,16 +866,26 @@
'settings.skills.catalog.page.mode.manual': '手動',
'settings.skills.catalog.page.mode.external': '外部',
'settings.skills.catalog.page.title': 'Skills 目錄',
'settings.skills.catalog.page.subtitle': '從精選儲存庫安裝現成技能,或新增你自己的來源。',
'settings.skills.catalog.page.section.sources': '來源',
'settings.skills.catalog.page.searchAllPlaceholder': '在所有來源中搜尋技能…',
'settings.skills.catalog.page.search.clear': '清除搜尋',
'settings.skills.catalog.page.source.skillsCount': '技能數:{count}',
'settings.skills.catalog.page.source.stars': '星標:{count}',
'settings.skills.catalog.page.source.updated': '更新於 {time}',
'settings.skills.catalog.page.source.addOwnTitle': '新增自己的來源',
'settings.skills.catalog.page.source.addOwnDescription': '任何包含技能的 Git 儲存庫',
'settings.skills.catalog.page.source.viewRepo': '在 GitHub 上開啟儲存庫',
'settings.skills.catalog.page.skill.viewOnGithub': '在 GitHub 上檢視技能',
'settings.skills.catalog.page.list.searchTitle': '搜尋結果',
'settings.skills.catalog.page.section.sourceRepository': '來源儲存庫',
'settings.skills.catalog.page.field.selectSourcePlaceholder': '選擇來源',
'settings.skills.catalog.page.actions.refreshTitle': '重新整理',
'settings.skills.catalog.page.actions.removeCatalogTitle': '移除目錄',
'settings.skills.catalog.page.actions.addCatalog': '新增目錄',
'settings.skills.catalog.page.actions.removeCatalog': '移除目錄',
'settings.skills.catalog.page.actions.loadMoreSkills': '載入更多 Skills',
'settings.skills.catalog.page.loading.catalog': '載入中...',
'settings.skills.catalog.page.loading.skills': '正在載入 skills...',
'settings.skills.catalog.page.loading.more': '載入中...',
'settings.skills.catalog.page.foundCount': '找到 {count} 個 skill(s)',
'settings.skills.catalog.page.error.catalogTitle': '目錄錯誤',
'settings.skills.catalog.page.empty.noSkillsTitle': '找不到 skills',
@@ -861,7 +893,6 @@
'settings.skills.catalog.page.badge.installed': '已安裝({scope})',
'settings.skills.catalog.page.badge.notInstallable': '不可安裝',
'settings.skills.catalog.page.badge.unknown': '未知',
'settings.skills.catalog.page.byOwnerPrefix': '作者',
'settings.skills.catalog.page.removeDialog.title': '移除目錄',
'settings.skills.catalog.page.removeDialog.description': '確定要移除此目錄嗎?',
'settings.openchamber.passkeys.title': 'Passkeys',
@@ -930,15 +961,22 @@
'settings.openchamber.desktopNetwork.error.saveFailed': '儲存桌面設定失敗',
'settings.openchamber.desktopNetwork.error.savedRestartFailed': '已儲存,但重新啟動應用程式失敗',
'settings.openchamber.opencodeCli.title': 'OpenCode CLI',
'settings.openchamber.tools.title': 'OpenChamber 工具',
'settings.openchamber.tools.field.agentControlTool': '智慧代理控制工具',
'settings.openchamber.tools.field.agentControlToolAria': '啟用智慧代理控制工具',
'settings.openchamber.tools.field.agentControlToolInfo': '讓代理從聊天中協調你的工作:建立工作階段與 worktree、將提示委派給其他代理、管理排程任務。會為每個工作階段加入少量工具說明。在 OpenCode 重新啟動後生效。',
'settings.openchamber.tools.field.agentWebTool': 'OpenChamber Web 工具',
'settings.openchamber.tools.field.agentWebToolAria': '啟用 OpenChamber Web 工具',
'settings.openchamber.tools.field.agentWebToolInfo': '讓代理在 OpenChamber 瀏覽器面板中檢視並操作頁面:開啟網址、讀取內容、點擊、輸入、捲動,以及在行動版與桌面版版面之間切換。會為每個工作階段加入少量工具說明。在 OpenCode 重新啟動後生效。',
'settings.openchamber.tools.field.agentMemoryTool': '智慧代理記憶工具',
'settings.openchamber.tools.field.agentMemoryToolAria': '智慧代理記憶工具',
'settings.openchamber.tools.field.agentMemoryToolInfo': '讓代理把學到的內容跨工作階段保留下來,分為兩個儲存區:關於你的事實,以及關於每個專案的事實。工作階段會收到已儲存項目的標題,代理可在相關時讀取內容。關閉後會一併移除該工具、記憶分頁與工作階段索引。重新啟動 OpenCode 後生效。',
'settings.openchamber.opencodeCli.tooltipPrefix': '可選的',
'settings.openchamber.opencodeCli.tooltipSuffix': '二進位檔絕對路徑。',
'settings.openchamber.opencodeCli.field.binaryPath': 'OpenCode 可執行檔路徑',
'settings.openchamber.opencodeCli.field.binaryPathPlaceholder': '/Users/you/.bun/bin/opencode',
'settings.openchamber.opencodeCli.field.showUpdateNotifications': '顯示 OpenCode 更新通知',
'settings.openchamber.opencodeCli.field.showUpdateNotificationsAria': '顯示 OpenCode 更新通知',
'settings.openchamber.opencodeCli.field.agentControlTool': '智慧代理控制工具',
'settings.openchamber.opencodeCli.field.agentControlToolAria': '啟用智慧代理控制工具',
'settings.openchamber.opencodeCli.field.agentControlToolInfo': '讓代理從聊天中協調你的工作:建立工作階段與 worktree、將提示委派給其他代理、管理排程任務。會為每個工作階段加入少量工具說明。在 Save + Reload 後生效。',
'settings.openchamber.opencodeCli.actions.browseAria': '瀏覽 OpenCode 可執行檔路徑',
'settings.openchamber.opencodeCli.actions.browse': '瀏覽',
'settings.openchamber.opencodeCli.actions.saveAndReload': '儲存並重新載入',
@@ -970,7 +1008,7 @@
'settings.openchamber.keyboardShortcuts.overwritePrompt': '該組合已被其他快速鍵使用。是否覆寫並清除原對應?',
'settings.openchamber.keyboardShortcuts.field.pressKeys': '按下按鍵...',
'settings.openchamber.keyboardShortcuts.error.captureFirst': '請先錄入一個快速鍵。',
'settings.openchamber.keyboardShortcuts.warning.riskyBrowserShortcut': '該快速鍵可能與瀏覽器預設快速鍵衝突,但仍已儲存。',
'settings.openchamber.keyboardShortcuts.warning.riskyBrowserShortcut': '該快速鍵可能與瀏覽器預設快速鍵衝突,但仍可儲存。',
'settings.openchamber.keyboardShortcuts.action.open_go_to_line.label': '跳轉到行(檔案編輯器)',
'settings.openchamber.keyboardShortcuts.action.open_command_palette.label': '開啟命令面板',
'settings.openchamber.keyboardShortcuts.action.focus_input.label': '聚焦輸入方塊',
@@ -979,16 +1017,20 @@
'settings.openchamber.keyboardShortcuts.action.toggle_terminal_expanded.label': '切換終端機展開',
'settings.openchamber.keyboardShortcuts.action.add_selection_to_chat.label': '將選取內容加入聊天',
'settings.openchamber.keyboardShortcuts.action.toggle_sidebar.label': '切換側邊欄',
'settings.openchamber.keyboardShortcuts.action.toggle_right_sidebar.label': '切換上下文面板',
'settings.openchamber.keyboardShortcuts.action.open_right_sidebar_git.label': '開啟 Git 介面',
'settings.openchamber.keyboardShortcuts.action.open_right_sidebar_files.label': '開啟檔案介面',
'settings.openchamber.keyboardShortcuts.action.switch_session_tab.label': '切換工作階段分頁',
'settings.openchamber.keyboardShortcuts.action.switch_session_tab.suffix': ' + 1…9',
'settings.openchamber.keyboardShortcuts.action.switch_context_surface.label': '切換上下文面板介面',
'settings.openchamber.keyboardShortcuts.action.switch_context_surface.suffix': ' + 1…0',
'settings.openchamber.keyboardShortcuts.action.new_chat.label': '新建工作階段',
'settings.openchamber.keyboardShortcuts.action.switch_session_previous.label': '上一個工作階段',
'settings.openchamber.keyboardShortcuts.action.switch_session_next.label': '下一個工作階段',
'settings.openchamber.keyboardShortcuts.action.rename_current_session.label': '重新命名目前的工作階段',
'settings.openchamber.keyboardShortcuts.action.toggle_permission_auto_accept.label': '切換權限自動核准',
'settings.openchamber.keyboardShortcuts.action.close_session_tab.label': '關閉工作階段分頁',
'settings.openchamber.keyboardShortcuts.action.new_chat_worktree.label': '新增 worktree 草稿',
'settings.openchamber.keyboardShortcuts.action.new_mini_chat.label': '新建 Mini Chat 視窗',
'settings.openchamber.keyboardShortcuts.action.open_help.label': '開啟鍵盤快速鍵',
'settings.openchamber.keyboardShortcuts.action.toggle_context_plan.label': '切換上下文面板中的計畫',
'settings.openchamber.keyboardShortcuts.action.toggle_services_menu.label': '切換服務選單',
'settings.openchamber.keyboardShortcuts.action.cycle_services_tab.label': '輪換服務選單分頁',
'settings.openchamber.keyboardShortcuts.action.cycle_theme.label': '輪換主題',
'settings.openchamber.keyboardShortcuts.action.cycle_agent.label': '輪換 agent',
'settings.openchamber.keyboardShortcuts.action.cycle_favorite_model_forward.label': '向前輪換收藏模型',
@@ -997,15 +1039,39 @@
'settings.openchamber.keyboardShortcuts.action.expand_input.label': '展開輸入方塊',
'settings.openchamber.keyboardShortcuts.action.open_timeline_dialog.label': '開啟對話時間軸',
'settings.openchamber.keyboardShortcuts.action.toggle_prompt_navigator.label': '顯示或隱藏提示詞導覽',
'settings.openchamber.keyboardShortcuts.warning.contextualPrefix': '此序列與「{action}」共用情境前綴。對應情境生效時,該操作會優先執行。',
'settings.openchamber.keyboardShortcuts.category.session': '工作階段控制',
'settings.openchamber.keyboardShortcuts.category.models': '模型與代理',
'settings.openchamber.keyboardShortcuts.category.panels': '面板與工具',
'settings.openchamber.keyboardShortcuts.category.navigation': '導覽',
'settings.openchamber.keyboardShortcuts.category.application': '應用程式',
'settings.openchamber.keyboardShortcuts.actions.edit': '編輯',
'settings.openchamber.keyboardShortcuts.actions.confirm': '確認',
'settings.openchamber.keyboardShortcuts.dialog.title': '編輯 {action}',
'settings.openchamber.keyboardShortcuts.dialog.instructions': '最多輸入兩個按鍵組合,每個組合最多同時按下三個按鍵。輸入第一個組合後,最多等待 3 秒以輸入第二個組合。點擊確認套用,或點擊取消放棄;按 Backspace 刪除最後一個組合。',
'settings.openchamber.keyboardShortcuts.dialog.firstChord': '第一個組合',
'settings.openchamber.keyboardShortcuts.dialog.secondChord': '第二個組合',
'settings.openchamber.keyboardShortcuts.dialog.recording': '按下按鍵…',
'settings.openchamber.keyboardShortcuts.unassigned': '未指派',
'settings.openchamber.keyboardShortcuts.error.prefixConflict': '這與 {action} 使用的序列衝突。請選擇其他組合。',
'settings.openchamber.keyboardShortcuts.error.exactConflict': '此組合已由 {action} 使用。',
'settings.openchamber.keyboardShortcuts.error.internalConflict': '此組合與內建快捷鍵衝突,內建快捷鍵不能被取代。',
'settings.openchamber.keyboardShortcuts.action.open_draft_project_picker.label': '開啟草稿專案選擇器',
'settings.openchamber.keyboardShortcuts.action.open_draft_worktree_picker.label': '開啟草稿 worktree 選擇器',
'settings.openchamber.keyboardShortcuts.action.open_session_list.label': '開啟最近工作階段',
'settings.openchamber.keyboardShortcuts.action.toggle_dictation.label': '語音輸入',
'settings.projects.sidebar.total': '總計 {count}',
'settings.projects.sidebar.actions.addProject': '新增專案',
'settings.projects.page.empty.noProjects': '暫無專案。',
'settings.projects.page.title.default': '專案設定',
'settings.projects.page.section.worktree': 'Worktree',
'settings.projects.page.field.projectName': '專案名稱',
'settings.projects.page.field.projectModel': '專案模型',
'settings.projects.page.field.projectThinking': '專案思考層級',
'settings.projects.page.section.chatDefaults': '新聊天的預設設定',
'settings.projects.page.section.chatDefaultsDescription': '在此專案中開始新聊天時使用。未設定時使用全域預設值。思考層級僅在提供層級的模型上顯示。',
'settings.projects.page.field.projectNamePlaceholder': '專案名稱',
'settings.projects.page.field.defaultModel': '新聊天的預設模型',
'settings.projects.page.field.defaultModelDescription': '在此專案中開始新聊天時使用。若未設定,則回退至全域預設值。',
'settings.projects.page.option.thinkingDefault': '模型預設',
'settings.projects.page.field.accentColor': '強調色',
'settings.projects.page.field.projectIcon': '專案圖示',
'settings.projects.page.field.projectIconBackgroundAria': '專案圖示背景顏色',
@@ -1044,9 +1110,10 @@
'settings.usage.page.header.providerUsage': '{provider} 用量',
'settings.usage.page.header.refreshing': '正在重新整理用量...',
'settings.usage.page.header.lastUpdated': '最後更新:{time}',
'settings.usage.page.options.showInHeaderAria': '在頁首選單顯示',
'settings.usage.page.options.showInHeader': '在頁首選單顯示',
'settings.usage.page.options.showInHeaderTooltip': '啟用後,該供應商的用量會顯示在應用程式頁首的快速存取下拉選單中。',
'settings.usage.page.header.lastUpdatedWithPlan': '方案:{plan} · 最後更新:{time}',
'settings.usage.page.options.showInWorkStatusAria': '在工作狀態面板中顯示',
'settings.usage.page.options.showInWorkStatus': '在工作狀態面板中顯示',
'settings.usage.page.options.showInWorkStatusTooltip': '啟用後,該供應商的用量會顯示在工作狀態面板中。',
'settings.usage.page.state.noData': '暫無用量資料。',
'settings.usage.page.state.refreshFailedTitle': '重新整理用量資料失敗',
'settings.usage.page.state.providerNotConfiguredTitle': '供應商未設定',
@@ -1073,8 +1140,8 @@
'settings.remoteInstances.page.section.actionsDescription': '連線、重新連線、查看紀錄或移除此執行個體。',
'settings.remoteInstances.page.section.remoteServer': '遠端服務',
'settings.remoteInstances.page.section.remoteServerDescription': 'OpenChamber 在遠端主機上的管理與啟動方式。',
'settings.remoteInstances.page.section.mainTunnel': '主 tunnel',
'settings.remoteInstances.page.section.mainTunnelDescription': '該遠端執行個體的主本機存取端點。',
'settings.remoteInstances.page.section.mainTunnel': '從這台電腦存取',
'settings.remoteInstances.page.section.mainTunnelDescription': 'OpenChamber 執行在遠端機器上。這裡的設定只決定這台電腦上通往它的 SSH 隧道位址。',
'settings.remoteInstances.page.section.authentication': '驗證',
'settings.remoteInstances.page.section.authenticationDescription': 'SSH 和遠端 OpenChamber UI 的可選憑證。',
'settings.remoteInstances.page.section.portForwards': '連接埠轉送',
@@ -1087,8 +1154,6 @@
'settings.remoteInstances.page.field.installMethod': '安裝方式',
'settings.remoteInstances.page.field.installMethodHint': '在 managed 模式下 OpenChamber 的安裝方式。',
'settings.remoteInstances.page.field.selectInstallMethodPlaceholder': '選擇安裝方式',
'settings.remoteInstances.page.field.installMethodDownloadRelease': '下載發行版本',
'settings.remoteInstances.page.field.installMethodUploadBundle': '上傳安裝套件',
'settings.remoteInstances.page.field.selectBindHostPlaceholder': '選擇綁定主機',
'settings.remoteInstances.page.field.sshPasswordOptional': 'SSH 密碼(可選)',
'settings.remoteInstances.page.field.sshPasswordPlaceholder': '輸入 SSH 密碼',
@@ -1112,7 +1177,44 @@
'settings.remoteInstances.page.actions.enableForwardAria': '啟用轉送',
'settings.remoteInstances.page.actions.openLocal': '開啟本機',
'settings.remoteInstances.page.actions.addForward': '新增轉送',
'settings.remoteInstances.page.import.sectionTitle': '從 SSH 設定匯入',
'settings.remoteInstances.page.addDialog.description': '從 SSH 設定中選一台主機,或自己輸入連線。',
'settings.remoteInstances.page.addDialog.sourceLabel': '連線的來源',
'settings.remoteInstances.page.addDialog.tab.saved': '來自 SSH 設定',
'settings.remoteInstances.page.addDialog.tab.manual': '自己輸入',
'settings.remoteInstances.page.addDialog.searchPlaceholder': '搜尋主機',
'settings.remoteInstances.page.addDialog.emptySaved': '在你的 SSH 設定中找不到主機。請自己輸入連線。',
'settings.remoteInstances.page.addDialog.searchEmpty': '沒有主機符合此搜尋。',
'settings.remoteInstances.page.addDialog.use': '使用',
'settings.remoteInstances.page.state.notConnected': '未連線',
'settings.remoteInstances.page.state.connecting': '連線中',
'settings.remoteInstances.page.state.ready': '已連線',
'settings.remoteInstances.page.state.problem': '需要處理',
'settings.remoteInstances.page.section.advanced': '進階設定',
'settings.remoteInstances.page.section.advancedHint': '連接埠、安裝方式、密碼與額外轉發。大多數連線使用預設值即可。',
'settings.remoteInstances.page.field.installMethodAuto': '自動',
'settings.remoteInstances.page.error.hint.noRuntime': '遠端機器上既沒有 bun 也沒有 npm。請在那裡安裝其中之一,或把此連線切換為「已在執行」。',
'settings.remoteInstances.page.error.hint.noOpencode': '遠端機器上沒有安裝 opencode CLI。請先在那裡安裝(見 opencode.ai),然後重新連線。',
'settings.remoteInstances.page.error.action.setUiPassword': '設定介面密碼',
'settings.remoteInstances.page.error.action.pickRandomPort': '使用其他本機連接埠',
'settings.remoteInstances.page.error.action.setRemotePort': '設定遠端連接埠',
'settings.remoteInstances.page.validation.externalPortRequired': '請先指定遠端連接埠。在「已在執行」模式下,OpenChamber 需要知道伺服器監聽哪個連接埠。',
'settings.remoteInstances.page.empty.noInstances': '還沒有 SSH 連線。',
'settings.remoteInstances.page.field.uiPasswordRequired': '介面密碼(必填)',
'settings.remoteInstances.page.field.uiPasswordMissingForLan': '只要遠端伺服器可在其網路中存取,就必須填寫。',
'settings.remoteInstances.page.field.remoteLanAccess': '可在遠端網路中存取',
'settings.remoteInstances.page.field.remoteLanAccessHint': '也允許遠端機器所在網路中的其他裝置不經 SSH 隧道直接開啟這個 OpenChamber。必須設定介面密碼。',
'settings.remoteInstances.page.field.remoteLanAccessWarning': '該網路中的任何人都能存取遠端 OpenChamber,保護它的只有下面的介面密碼。',
'settings.remoteInstances.page.validation.remoteLanNeedsPassword': '請先設定介面密碼。沒有密碼時,遠端 OpenChamber 會對該網路中的所有裝置開放。',
'settings.remoteInstances.page.field.bindHostOption.loopback': '僅這台電腦 (127.0.0.1)',
'settings.remoteInstances.page.field.bindHostOption.localhost': '僅這台電腦 (localhost)',
'settings.remoteInstances.page.field.bindHostOption.lan': '我網路中的任何裝置 (0.0.0.0)',
'settings.remoteInstances.page.field.sshPasswordHint': '只有當該主機要求密碼而非接受 SSH 金鑰時才需要。',
'settings.remoteInstances.page.field.uiPasswordHintManaged': '用來保護遠端 OpenChamber 介面的密碼。OpenChamber 會把它設定到為你啟動的伺服器上。',
'settings.remoteInstances.page.field.uiPasswordHintExternal': '遠端機器上已在執行的 OpenChamber 伺服器的密碼,用於登入。',
'settings.remoteInstances.page.tunnelPreview.caption': '此連線的轉發:',
'settings.remoteInstances.page.empty.noInstancesWithOneImport': '還沒有 SSH 連線。可從你的 SSH 設定匯入 1 台主機。',
'settings.remoteInstances.page.empty.noInstancesWithImports': '還沒有 SSH 連線。可從你的 SSH 設定匯入 {count} 台主機。',
'settings.remoteInstances.page.state.loadingInstances': '正在載入連線...',
'settings.remoteInstances.page.import.loading': '正在載入 SSH 主機...',
'settings.remoteInstances.page.import.noneFound': '找不到 SSH 主機。',
'settings.remoteInstances.page.import.noneAvailable': '沒有可匯入的 SSH 主機。',
@@ -1210,13 +1312,18 @@
'settings.providers.page.custom.title': '自訂供應商',
'settings.providers.page.custom.editTitle': '編輯自訂提供者',
'settings.providers.page.custom.description': '透過指定基礎 URL、憑證與模型清單,新增相容 OpenAI 的供應商。會寫入 OpenCode 設定,可像其他供應商一樣在聊天中使用。',
'settings.providers.page.custom.description': '透過指定基礎 URL、憑證、模型清單與支援的 API 通訊協定新增供應商。會寫入 OpenCode 設定以供聊天使用。',
'settings.providers.page.custom.field.providerID.label': '供應商 ID',
'settings.providers.page.custom.field.providerID.placeholder': 'my-provider',
'settings.providers.page.custom.field.providerID.info': '小寫字母、數字、連字號與底線。用作 OpenCode 供應商 ID。',
'settings.providers.page.custom.field.name.label': '顯示名稱',
'settings.providers.page.custom.field.name.placeholder': '我的供應商',
'settings.providers.page.custom.field.name.info': '顯示於供應商與模型選擇器。',
'settings.providers.page.custom.field.protocol.label': 'API 通訊協定',
'settings.providers.page.custom.field.protocol.info': '選擇此 API 實作的請求格式。',
'settings.providers.page.custom.field.protocol.openaiChat': 'OpenAI Chat Completions',
'settings.providers.page.custom.field.protocol.openaiResponses': 'OpenAI Responses',
'settings.providers.page.custom.field.protocol.anthropicMessages': 'Anthropic Messages',
'settings.providers.page.custom.field.baseURL.label': '基礎 URL',
'settings.providers.page.custom.field.baseURL.placeholder': 'https://api.example.com/v1',
'settings.providers.page.custom.field.baseURL.info': '相容 OpenAI 的 API 基礎 URL。必須以 http:// 或 https:// 開頭。',
@@ -1265,6 +1372,17 @@
'settings.providers.page.auth.apiKeyPlaceholder': 'sk-...',
'settings.providers.page.auth.oauthMethodFallback': 'OAuth 方式 {index}',
'settings.providers.page.auth.pasteAuthorizationCodePlaceholder': '貼上授權碼',
'settings.providers.page.auth.oauth.starting': '正在啟動授權…',
'settings.providers.page.auth.oauth.waiting': '正在等待授權…',
'settings.providers.page.auth.oauth.waitingHint': '請在瀏覽器中完成登入。保持此頁面開啟,連線會自動完成。',
'settings.providers.page.auth.oauth.codeHint': '從瀏覽器複製授權碼並貼上到這裡。',
'settings.providers.page.auth.oauth.deviceCodeLabel': '裝置碼',
'settings.providers.page.auth.oauth.linkLabel': '授權連結',
'settings.providers.page.auth.oauth.promptRequired': '請填寫「{field}」後繼續',
'settings.providers.page.auth.oauth.error.sessionExpired': '授權請求已過期。請重新連線以重新開始。',
'settings.providers.page.auth.oauth.error.codeRequired': '此提供者需要瀏覽器中的授權碼。',
'settings.providers.page.auth.oauth.error.declined': '授權遭拒或未完成。',
'settings.providers.page.auth.oauth.error.invalidInput': '輸入的資訊遭拒。',
'settings.providers.page.auth.connected': '已連線',
'settings.providers.page.auth.incomplete': '缺少憑證',
'settings.providers.page.auth.incompleteHint': '· 在聊天中使用此提供者之前,請新增 API 金鑰或 {env:VAR}',
@@ -1297,6 +1415,9 @@
'settings.providers.page.actions.open': '開啟',
'settings.providers.page.actions.copy': '複製',
'settings.providers.page.actions.complete': '完成',
'settings.providers.page.actions.continue': '繼續',
'settings.providers.page.actions.cancel': '取消',
'settings.providers.page.actions.tryAgain': '重試',
'settings.providers.page.actions.hide': '隱藏',
'settings.providers.page.actions.reconnect': '重新連線',
'settings.providers.page.actions.edit': '編輯',
@@ -1312,7 +1433,6 @@
'settings.providers.page.toast.apiKeySaved': 'API Key 已儲存',
'settings.providers.page.toast.oauthStartFailed': '啟動 OAuth 流程失敗',
'settings.providers.page.toast.oauthDetailsMissing': '未回傳 OAuth 詳情',
'settings.providers.page.toast.completeOAuthInBrowser': '請在瀏覽器中完成 OAuth 流程',
'settings.providers.page.toast.oauthCompleteFailed': '完成 OAuth 流程失敗',
'settings.providers.page.toast.oauthCompleted': 'OAuth 連線已完成',
'settings.providers.page.toast.oauthLinkCopied': 'OAuth 連結已複製',
@@ -1334,6 +1454,8 @@
'settings.mcp.page.status.label.failed': '失敗',
'settings.mcp.page.status.label.needsAuth': '需要授權',
'settings.mcp.page.status.label.needsRegistration': '需要註冊',
'settings.mcp.page.status.label.awaitingRestart': '等待重新啟動',
'settings.mcp.page.status.description.awaitingRestart': '該伺服器已儲存但尚未生效。使用 Apply & Restart 讓 OpenCode 載入它——之後即可進行連線與授權。',
'settings.mcp.page.status.description.connected': '已連線,OpenCode 可發現工具和資源。',
'settings.mcp.page.status.description.failedDefault': 'OpenCode 無法連線到此 MCP 伺服器。',
'settings.mcp.page.status.description.needsAuth': '此遠端 MCP 伺服器在連線前需要授權。',
@@ -1702,7 +1824,6 @@
'settings.openchamber.visual.section.spacingAndLayout': '間距與佈局',
'settings.openchamber.visual.section.densityAndType': '密度與字型',
'settings.openchamber.visual.section.appInstall': '應用程式安裝',
'settings.openchamber.visual.section.mobileLayout': '行動版版面',
'settings.openchamber.visual.section.navigation': '導覽',
'settings.openchamber.visual.section.chatRenderMode': '聊天渲染模式',
'settings.openchamber.visual.section.chatRenderModeAria': '聊天渲染模式',
@@ -1715,6 +1836,10 @@
'settings.openchamber.visual.section.showToolsOpenedByDefault': '預設展開以下工具',
'settings.openchamber.visual.section.sessionAssistance': '工作階段輔助',
'settings.openchamber.visual.section.reasoning': '推理',
'settings.openchamber.visual.section.streaming': '串流',
'settings.openchamber.visual.field.streamingAutoFollow': '串流時跟隨新內容',
'settings.openchamber.visual.field.streamingAutoFollowAria': '回覆串流時自動跟隨新內容',
'settings.openchamber.visual.field.streamingAutoFollowInfo': '回覆串流時,畫面會持續捲動到最新內容。關閉後畫面保持不動,可手動捲動;此時從聊天中間傳送訊息也不會移動畫面。',
'settings.openchamber.visual.section.messageAppearance': '訊息外觀',
'settings.openchamber.visual.section.toolsAndFiles': '工具與檔案',
'settings.openchamber.visual.section.composer': '輸入框',
@@ -1735,8 +1860,6 @@
'settings.openchamber.visual.field.selectTimeFormatAria': '選擇時間格式',
'settings.openchamber.visual.field.selectWeekStartAria': '選擇一週起始日',
'settings.openchamber.visual.actions.reloadThemes': '重新載入主題',
'settings.openchamber.visual.field.macVibrancy': '視窗透明度',
'settings.openchamber.visual.field.macVibrancyHint': '在側邊欄後使用 macOS 原生模糊(vibrancy)。關閉以獲得完全不透明的介面。',
'settings.openchamber.visual.field.dockBadge': 'Dock 標記',
'settings.openchamber.visual.field.dockBadgeHint': '在 macOS Dock 圖示上顯示有未讀動態的對話數量。',
'settings.openchamber.visual.actions.saveAndRestart': '儲存並重新啟動',
@@ -1758,8 +1881,6 @@
'settings.openchamber.visual.field.mobileKeyboardModeAria': '行動裝置鍵盤行為',
'settings.openchamber.visual.field.selectMobileKeyboardModePlaceholder': '選擇鍵盤行為',
'settings.openchamber.visual.actions.resetMobileKeyboardModeAria': '重設行動裝置鍵盤行為',
'settings.openchamber.visual.option.mobileLayout.default': '舊版',
'settings.openchamber.visual.option.mobileLayout.new': '新版',
'settings.openchamber.visual.field.interfaceFontSize': '介面字體大小',
'settings.openchamber.visual.field.interfaceFont': '介面字體',
'settings.openchamber.visual.field.selectInterfaceFontAria': '選擇介面字體',
@@ -1785,6 +1906,10 @@
'settings.openchamber.visual.actions.resetInputBarOffsetAria': '重設輸入列偏移',
'settings.openchamber.visual.field.terminalQuickKeysAria': '終端機快速鍵',
'settings.openchamber.visual.field.terminalQuickKeys': '終端機快速鍵',
'settings.openchamber.visual.field.sessionTabsGroup': '會話分頁',
'settings.openchamber.visual.field.sessionTabs': '在頁首以分頁顯示會話',
'settings.openchamber.visual.field.sessionTabsAria': '切換頁首會話分頁',
'settings.openchamber.visual.field.sessionTabsInfo': '開啟的會話會以分頁排列在頁首。關閉後頁首僅顯示會話標題。',
'settings.openchamber.visual.field.terminalQuickKeysTooltip': '在終端機檢視顯示 Esc、Ctrl、方向鍵',
'settings.openchamber.visual.field.fileEditorKeymap': '檔案編輯器鍵位映射',
'settings.openchamber.visual.option.fileEditorKeymap.default': '預設',
@@ -1817,8 +1942,6 @@
'settings.openchamber.visual.field.stickyUserHeader': '固定使用者訊息標頭',
'settings.openchamber.visual.field.promptNavigatorEnabledAria': '提示詞導覽',
'settings.openchamber.visual.field.promptNavigatorEnabled': '提示詞導覽',
'settings.openchamber.visual.field.expandedEditorToolbarAria': 'Always show editor toolbar',
'settings.openchamber.visual.field.expandedEditorToolbar': 'Always show editor toolbar (docked under the file tabs)',
'settings.openchamber.visual.field.autoSaveEnabledAria': '自動儲存檔案',
'settings.openchamber.visual.field.autoSaveEnabled': '自動儲存檔案',
'settings.openchamber.visual.field.autoSaveEnabledInfo': '停止輸入後自動儲存檔案編輯內容。關閉後需手動儲存。',
@@ -2017,9 +2140,9 @@
'settings.openchamber.desktopNetwork.field.macMenuBarAria': '在 macOS 選單列中顯示 OpenChamber',
'settings.openchamber.desktopNetwork.field.macMenuBar': '在選單列中顯示 OpenChamber',
'settings.openchamber.desktopNetwork.field.macMenuBarDescription': '需要重新啟動應用程式。關閉後,OpenChamber 不會建立選單列項目,也不會執行相關的工作階段、核准與用量更新。',
'settings.openchamber.desktopNetwork.field.minimizeToTrayAria': '將 OpenChamber 最小化和關閉到系統匣',
'settings.openchamber.desktopNetwork.field.minimizeToTray': '最小化和關閉到系統匣',
'settings.openchamber.desktopNetwork.field.minimizeToTrayDescription': '主視窗最小化或關閉時,讓 OpenChamber 繼續在系統匣中執行。',
'settings.openchamber.desktopNetwork.field.minimizeToTrayAria': '將 OpenChamber 關閉到系統匣',
'settings.openchamber.desktopNetwork.field.minimizeToTray': '關閉到系統匣',
'settings.openchamber.desktopNetwork.field.minimizeToTrayDescription': '關閉主視窗時,讓 OpenChamber 繼續在系統匣中執行;最小化仍會將視窗保留在工作列。',
'settings.openchamber.desktopNetwork.field.keepAwakeAria': 'OpenChamber 執行時保持電腦喚醒',
'settings.openchamber.desktopNetwork.field.keepAwake': 'OpenChamber 執行時保持電腦喚醒',
'settings.openchamber.desktopNetwork.field.keepAwakeDescription': '讓手機可以持續開啟此應用程式。螢幕仍可關閉。',
@@ -2096,7 +2219,6 @@
'settings.plugins.toast.updatedToLatest': '外掛已更新到 {version}',
'settings.plugins.validation.fileName': '檔案名稱必須為小寫,並以 .js / .ts / .mjs / .cjs 結尾',
'settings.plugins.validation.specRequired': '請輸入套件或路徑',
'settings.usage.sidebar.field.showPredictions': '顯示預測',
'settings.view.home.cards.plugins.description': '管理 opencode 外掛',
'settings.view.home.cards.plugins.title': '外掛',
'settings.openchamber.visual.section.followUpBehavior': 'Follow-up behavior',
@@ -2105,4 +2227,5 @@
'settings.openchamber.visual.field.followUpBehaviorDescription': 'Choose what happens when you press Enter on a follow-up message while the agent is still responding.',
'settings.openchamber.visual.option.followUpBehavior.steer.label': 'Steer',
'settings.openchamber.visual.option.followUpBehavior.queue.label': 'Queue',
...thirdPartyIntegrationI18n['zh-TW'],
} as const;
+377 -39
View File
@@ -6,6 +6,19 @@ export const dict: Record<I18nKey, string> = {
'terminalView.actions.attachSelection': '附加所選輸出',
'terminalView.actions.restart': '重新啟動終端',
'chat.message.terminalContext': '{terminal},第 {start}-{end} 行',
'chat.message.context.codeComment': '對 {file} 第 {start}-{end} 行的評論',
'chat.message.context.codeCommentLine': '對 {file} 第 {line} 行的評論',
'chat.message.context.chatQuote': '引用自先前的訊息',
'chat.message.context.fileQuote': '來自 {file} 的選取內容',
'chat.chatInput.chatQuoteContext': '聊天引用',
'chat.chatInput.chatQuoteContextRemove': '移除聊天引用',
'chat.chatInput.contextPreview.selectedLabel': '所選文字',
'chat.chatInput.contextPreview.commentLabel': '使用者留言',
'chat.chatInput.contextPreview.edit': '編輯留言',
'chat.chatInput.contextPreview.remove': '移除',
'chat.message.context.browserAnnotation': '瀏覽器標註({page})',
'chat.message.context.prComment': 'GitHub PR 留言({label})',
'chat.message.context.prCheck': '失敗的 GitHub PR 檢查({label})',
'chat.chatInput.terminalContext': '{terminal},第 {start}-{end} 行',
'chat.chatInput.terminalContextRemove': '移除終端上下文',
'chat.chatInput.prCommentContext': 'PR 留言',
@@ -25,6 +38,7 @@ export const dict: Record<I18nKey, string> = {
'common.language.korean': '韓語',
'common.language.polish': '波蘭語',
'common.language.japanese': '日語',
'common.language.turkish': '土耳其語',
'common.revealPath.finder': '在 Finder 中顯示',
'common.revealPath.fileExplorer': '在檔案總管中開啟',
'common.revealPath.fileManager': '在檔案管理員中開啟',
@@ -89,6 +103,11 @@ export const dict: Record<I18nKey, string> = {
'mobile.instances.status.connectedDirect': '已連線 · 區域網路',
'mobile.instances.status.connectedRelay': '已連線 · 私人中繼',
'mobile.instances.saveEdit': '儲存變更',
'mobile.connectionDebug.title': '連線日誌',
'mobile.connectionDebug.copy': '複製',
'mobile.connectionDebug.copied': '已複製',
'mobile.connectionDebug.close': '關閉',
'mobile.connectionDebug.empty': '尚無連線事件。',
'mobile.nav.changes': '變更',
'mobile.nav.settings': '設定',
'mobile.surface.closeAria': '關閉',
@@ -112,6 +131,7 @@ export const dict: Record<I18nKey, string> = {
'mobile.sessions.section.worktrees': '工作樹',
'mobile.sessions.section.otherProjects': '切換專案',
'mobile.sessions.section.projects': '專案',
'mobile.sessions.section.chats': '聊天',
'mobile.sessions.empty.noProjectsTitle': '尚無專案',
'mobile.sessions.empty.noProjectsDescription': '新增專案即可開始與程式碼聊天。',
'mobile.sessions.empty.noSessionsTitle': '尚無會話',
@@ -245,8 +265,10 @@ export const dict: Record<I18nKey, string> = {
'sessions.scheduledTasks.dialog.toast.deleted': '排程任務已刪除',
'sessions.scheduledTasks.dialog.toast.deleteFailed': '刪除任務失敗',
'sessions.scheduledTasks.dialog.toast.started': '任務已啟動',
'sessions.scheduledTasks.dialog.toast.startedPersistWarning': '任務已啟動,但無法儲存其狀態。在下一次成功執行之前,它可能仍顯示為執行中。',
'sessions.scheduledTasks.dialog.toast.runFailed': '執行任務失敗',
'sessions.scheduledTasks.dialog.confirm.deleteTask': '刪除排程任務「{taskName}」?',
'sessions.scheduledTasks.dialog.confirm.deleteLoopFile': '刪除迴圈任務「{taskName}」及其 Markdown 檔案?',
'sessions.scheduledTasks.dialog.schedule.daily': '每天 {time}',
'sessions.scheduledTasks.dialog.schedule.dailyWithTimezone': '每天 {time}({timezone})',
'sessions.scheduledTasks.dialog.schedule.weekly': '每週 {days} {time}',
@@ -282,6 +304,9 @@ export const dict: Record<I18nKey, string> = {
'sessions.scheduledTasks.dialog.taskToggle.pauseAria': '暫停 {taskName}',
'sessions.scheduledTasks.dialog.taskToggle.enabled': '已啟用',
'sessions.scheduledTasks.dialog.taskToggle.paused': '已暫停',
'sessions.scheduledTasks.dialog.loopFile.note': '由迴圈檔案 {file} 管理',
'sessions.scheduledTasks.dialog.loopFile.toggleDisabled': '啟用狀態由迴圈檔案控制;請在 Markdown frontmatter 中設定 enabled',
'sessions.scheduledTasks.dialog.loopFile.actionsDisabled': '迴圈任務在其 .agents/loops Markdown 檔案中設定',
'sessions.scheduledTasks.editor.title.edit': '編輯排程任務',
'sessions.scheduledTasks.editor.title.new': '新增排程任務',
'sessions.scheduledTasks.editor.description': '設定一個伺服器端任務,用於建立新會話並傳送提示詞。',
@@ -374,7 +399,7 @@ export const dict: Record<I18nKey, string> = {
'multirun.launcher.attachments.attach': '附加',
'multirun.launcher.attachments.tooltip': '相同檔案會傳送到所有執行',
'multirun.launcher.models.label': '模型',
'multirun.launcher.models.info': '選擇 2-{max} 個模型。同一模型可重複加入。',
'multirun.launcher.models.info': '選擇 2 個或更多模型。同一模型可重複加入。',
'multirun.launcher.toast.fileTooLarge': '檔案「{fileName}」過大(最大 10MB)',
'multirun.launcher.toast.attachFailed': '附加「{fileName}」失敗',
'multirun.launcher.toast.attachedSingle': '已附加 {count} 個檔案',
@@ -441,9 +466,16 @@ export const dict: Record<I18nKey, string> = {
'sessions.sidebar.empty.noMatches.title': '沒有符合的會話',
'sessions.sidebar.empty.noMatches.description': '請嘗試其他標題、分支、資料夾或路徑。',
'sessions.sidebar.activity.recentTitle': '最近',
'sessions.sidebar.activity.chatsTitle': '聊天',
'sessions.sidebar.activity.chatsEmpty': '尚無聊天。',
'chat.chatInput.chooseProject': '選擇專案',
'sessions.archivePage.allDirectories': '所有目錄',
'sessions.sidebar.header.displayMode.stickyHeaders': '固定專案標題',
'sessions.sidebar.header.grouping.label': '工作階段分組',
'sessions.sidebar.header.projectDisplay.label': '顯示專案',
'sessions.sidebar.header.projectDisplay.all': '所有專案',
'sessions.sidebar.header.projectDisplay.single': '單一專案',
'sessions.sidebar.project.selectAria': '選擇專案,目前為 {project}',
'sessions.sidebar.header.grouping.byWorktree': '依工作樹',
'sessions.sidebar.header.grouping.flat': '平面清單',
'sessions.sidebar.project.actions.manageWorktrees': '管理工作樹',
@@ -465,6 +497,10 @@ export const dict: Record<I18nKey, string> = {
'sessions.archivePage.deleteSessionAria': '刪除 {title}',
'sessions.archivePage.restoreSessionAria': '還原 {title}',
'sessions.switcher.openAria': '開啟會話切換器',
'header.sessionTabs.stripAria': '開啟的會話',
'header.sessionTabs.tabMenuAria': '工作階段分頁動作',
'header.sessionTabs.closeTab': '關閉分頁',
'header.sessionTabs.closeOtherTabs': '關閉其他分頁',
'sessions.switcher.empty': '沒有最近會話',
'sessions.switcher.draftTitle': '新會話',
'sessions.sidebar.updateCheck.errorTitle': '檢查更新失敗',
@@ -516,11 +552,33 @@ export const dict: Record<I18nKey, string> = {
'sessions.sidebar.session.menu.unshare': '取消分享',
'sessions.sidebar.session.menu.exportMarkdown': '匯出 Markdown',
'sessions.sidebar.session.menu.moveToWorktree': '移至新工作樹',
'sessions.sidebar.session.menu.moveToWorktreeTargets': '移至工作樹',
'sessions.sidebar.session.menu.newWorktree': '新增工作樹...',
'sessions.sidebar.session.moveToWorktree.success': '工作階段已移至新工作樹',
'sessions.sidebar.session.moveToWorktree.failed': '無法將工作階段移至新工作樹',
'sessions.sidebar.session.moveToWorktree.tooltip': '從目前分支建立新工作樹,轉移未提交的變更,並將此工作階段及其子工作階段移至其中。',
'sessions.sidebar.session.moveToWorktree.main': '主要工作樹',
'sessions.sidebar.session.moveToWorktree.refreshing': '正在重新整理工作樹...',
'sessions.sidebar.session.moveToWorktree.loadFailed': '無法載入工作樹',
'sessions.sidebar.session.moveToWorktree.current': '目前的工作樹',
'sessions.sidebar.session.moveToWorktree.existingSuccess': '工作階段已移至工作樹',
'sessions.sidebar.session.moveToWorktree.existingFailed': '無法將工作階段移至工作樹',
'sessions.sidebar.session.moveToWorktree.tooltipTargets': '顯示現有工作樹,以及為此工作階段建立新工作樹的選項。',
'sessions.sidebar.session.moveToWorktree.tooltip': '從目前分支建立新工作樹,並將此工作階段及其子工作階段移至其中。當來源有未提交的變更時,由你選擇是否一併轉移。',
'sessions.sidebar.session.moveToWorktree.tooltipBusy': '僅在工作階段閒置時可用。請停止目前活動或等待其完成。',
'sessions.sidebar.session.moveToWorktree.tooltipMoving': '此工作階段已在移至新工作樹。',
'sessions.sidebar.session.moveToWorktree.confirm.title': '來源有未提交的變更',
'sessions.sidebar.session.moveToWorktree.confirm.changedFiles': '此工作樹中已變更的檔案:{count}。',
'sessions.sidebar.session.moveToWorktree.confirm.ownership': 'OpenCode 依目錄而非工作階段追蹤這些變更。',
'sessions.sidebar.session.moveToWorktree.confirm.sessionOnlyHelp': '移動此工作階段及其子工作階段,同時保持每個來源檔案不變。',
'sessions.sidebar.session.moveToWorktree.confirm.allChangesHelp': '轉移工作階段目錄下的變更。未暫存與未追蹤的檔案在成功後離開來源。',
'sessions.sidebar.session.moveToWorktree.confirm.stagedWarning': '已暫存的變更保留在來源中,並複製到目的地。',
'sessions.sidebar.session.moveToWorktree.confirm.baseWarning': '當目的地使用不同的 Git 基礎時,轉移可能失敗。',
'sessions.sidebar.session.moveToWorktree.confirm.sessionOnly': '僅移動工作階段',
'sessions.sidebar.session.moveToWorktree.confirm.allChanges': '移動全部來源變更',
'sessions.sidebar.session.moveToWorktree.confirm.cancel': '取消',
'sessions.sidebar.session.moveToWorktree.sourceVerificationFailed': '無法驗證來源的變更。未變更任何工作樹或工作階段。',
'sessions.sidebar.session.moveToWorktree.applyChangesFailed': '目的地無法接受來源的變更。工作階段與來源變更均未移動。請重試並選擇「僅移動工作階段」。',
'sessions.sidebar.session.moveToWorktree.changesMayBeInDestination': '在目的地確認移動之前連線中斷。工作階段可能沒有移動,未提交的變更可能已經在目標工作樹中。重試前請先檢查。',
'sessions.sidebar.session.menu.runFusion': '執行 fusion',
'sessions.sidebar.session.menu.openInSidePanel': '在側邊面板中開啟',
'sessions.sidebar.session.actions.openInEditor': '在編輯器中開啟',
@@ -544,6 +602,10 @@ export const dict: Record<I18nKey, string> = {
'sessions.sidebar.session.status.pinned': '已釘選會話',
'sessions.sidebar.session.status.movingToWorktree': '正在將會話移至新工作樹',
'sessions.sidebar.session.status.permissionRequired': '需要權限',
'sessions.sidebar.session.status.questionPendingSingle': '1 個待回答問題',
'sessions.sidebar.session.status.questionPendingMany': '{count} 個待回答問題',
'sessions.sidebar.session.status.activeFor': '已活動 {duration}',
'sessions.sidebar.session.status.lastTurnDuration': '上一輪耗時 {duration}',
'sessions.sidebar.session.subsessions.collapse': '摺疊子會話',
'sessions.sidebar.session.subsessions.expand': '展開子會話',
'sessions.sidebar.dialogs.deleteSession.title': '刪除會話?',
@@ -996,6 +1058,8 @@ export const dict: Record<I18nKey, string> = {
'gitView.pr.field.draft': '草稿',
'gitView.pr.field.title': '標題',
'gitView.pr.githubNotConnected': 'GitHub 未連線',
'gitView.pr.history.merged': 'PR #{number} 已合併到 {base}。',
'gitView.pr.history.closed': 'PR #{number} 已關閉。',
'gitView.pr.loadingDescription': '正在載入描述...',
'gitView.pr.mergeMethod.merge': '建立合併提交',
'gitView.pr.mergeMethod.rebase': 'Rebase 並合併',
@@ -1112,11 +1176,20 @@ export const dict: Record<I18nKey, string> = {
'contextPanel.mode.context': '上下文',
'contextPanel.mode.preview': '預覽',
'contextPanel.mode.browser': '瀏覽器',
'contextRail.configure.open': '設定面板',
'contextRail.configure.dialogTitle': '側欄面板',
'contextRail.configure.dialogDescription': '選擇側欄顯示哪些面板。隱藏的面板會保留資料,仍可透過命令面板開啟。',
'contextRail.configure.showAll': '全部顯示',
'contextRail.configure.noneWarning': '所有面板皆已隱藏。',
'contextRail.aria.rail': '面板介面',
'contextPanel.editorEmpty.title': '未開啟檔案',
'contextPanel.editorEmpty.description': '從檔案樹選擇檔案開始編輯。',
'contextRail.surface.editor.description': '編輯專案檔案',
'contextRail.surface.git.description': '提交、分支與拉取請求',
'contextRail.surface.git.changesCountAriaSingle': '{label},{count} 個變更的檔案',
'contextRail.surface.git.changesCountAriaPlural': '{label},{count} 個變更的檔案',
'contextRail.surface.git.changesCountTooltipSingle': '{count} 個變更的檔案',
'contextRail.surface.git.changesCountTooltipPlural': '{count} 個變更的檔案',
'contextRail.surface.terminal.description': '內建終端機',
'contextRail.surface.diff.description': '檢視工作區變更',
'contextPanel.mode.walkthrough': '導讀',
@@ -1156,8 +1229,11 @@ export const dict: Record<I18nKey, string> = {
'walkthrough.toc.moreFiles': '其他檔案:{count}',
'walkthrough.toc.uncovered': '未涵蓋:{count}',
'walkthrough.toc.resize': '調整目錄欄寬度',
'walkthrough.importance.critical': '關鍵',
'walkthrough.importance.critical': '關鍵變更',
'walkthrough.importance.criticalHint': '這一步帶動了其餘變更,值得仔細閱讀。它不是在你的程式碼中發現的問題。',
'walkthrough.importance.context': '背景',
'walkthrough.importance.contextHint': '輔助性的變更,列在這裡是為了讓其餘部分說得通。',
'walkthrough.help.guide': 'Walkthrough 的運作方式',
'walkthrough.blocked.noModel.title': '沒有可用的小模型',
'walkthrough.blocked.noModel.description': '請先登入模型供應商再產生審閱。',
'walkthrough.blocked.emptyDiff.title': '沒有可審閱的內容',
@@ -1172,22 +1248,77 @@ export const dict: Record<I18nKey, string> = {
'walkthrough.blocked.outputExhausted.descriptionUnknownModel': '小模型把全部輸出額度用在推理上,沒有回傳結果。推理模型在大型差異上經常如此——可以改用較少推理的模型,或縮小審閱範圍。',
'walkthrough.blocked.onlyGenerated.title': '只有產生的檔案有變動',
'walkthrough.blocked.onlyGenerated.description': '這裡的變更全部是鎖定檔或其他工具產生的輸出,審閱會刻意略過它們。',
'walkthrough.blocked.serverUnsupported.title': '該伺服器不支援 walkthrough',
'walkthrough.blocked.serverUnsupported.description': '此應用程式連線的 OpenChamber 伺服器沒有回應 walkthrough API,代表它比應用程式更舊。請將伺服器升級到 1.18 或更新版本後重新整理。',
'walkthrough.blocked.contextTooSmall.descriptionUnknownModel': '小模型大約可容納 {available} 千字元,而這份差異約需 {required} 千字元。我們不會截斷內容,請改選上下文更大的模型。',
'walkthrough.blocked.structuredOutput.descriptionUnknownModel': '小模型不支援導讀所需的結構化回應。',
'contextRail.surface.plan.description': '檢視目前計畫',
'contextRail.surface.pr.description': '建立、審查並合併目前分支的提取請求',
'contextRail.surface.notes.description': '專案的筆記、待辦與計畫',
'contextRail.surface.notes.description': '專案的筆記、待辦、計畫與代理記憶',
'contextRail.surface.context.description': '工作階段情境與權杖用量',
'contextRail.surface.browser.description': '內建網頁瀏覽器',
'contextRail.surface.preview.description': '開發伺服器預覽',
'contextRail.surface.chat.description': '並排開啟的工作階段',
'contextRail.surface.notes': '專案筆記',
'contextRail.surface.notes': '專案知識',
'contextRail.editorTree.toggle': '切換檔案樹',
'contextPanel.browser.open': '開啟瀏覽器面板',
'contextPanel.browser.addressAria': '瀏覽器網址',
'contextPanel.browser.history.label': '最近造訪的網址',
'contextPanel.browser.history.forget': '從歷史紀錄中移除',
'contextPanel.browser.newTab': '新增瀏覽器分頁',
'contextPanel.browser.empty': '網頁瀏覽器',
'contextPanel.browser.emptyHint': '在上方輸入網址開始瀏覽',
'contextPanel.browser.inspectUnavailable': '無法從瀏覽器面板檢查此頁面。',
'contextPanel.browser.back': '上一頁',
'contextPanel.browser.forward': '下一頁',
'contextPanel.browser.reload': '重新載入',
'contextPanel.browser.hardReload': '忽略快取重新載入',
'contextPanel.browser.zoomIn': '放大',
'contextPanel.browser.zoomOut': '縮小',
'contextPanel.browser.zoomReset': '重設縮放',
'contextPanel.browser.clearCookies': '清除 Cookie',
'contextPanel.browser.clearCache': '清除快取',
'contextPanel.browser.clearedCookies': '已清除 Cookie',
'contextPanel.browser.clearedCache': '已清除快取',
'contextPanel.browser.clearFailed': '無法清除瀏覽資料',
'contextPanel.browser.stop': '停止',
'contextPanel.browser.openExternal': '在系統瀏覽器中開啟',
'contextPanel.browser.devTools': '開啟開發者工具',
'contextPanel.browser.deviceToolbar': '裝置工具列',
'contextPanel.browser.device.preset': '裝置預設',
'contextPanel.browser.device.responsive': '自適應',
'contextPanel.browser.device.width': '視口寬度',
'contextPanel.browser.device.height': '視口高度',
'contextPanel.browser.device.rotate': '旋轉',
'contextPanel.browser.device.schemeSystem': '自動',
'contextPanel.browser.device.schemeLight': '淺色',
'contextPanel.browser.device.schemeDark': '深色',
'contextPanel.browser.device.schemeFailed': '無法變更頁面外觀',
'contextPanel.browser.frameTitle': '瀏覽器',
'contextPanel.browser.loadFailed': '無法載入此頁面',
'contextPanel.browser.waitingForServer': '正在等待開發伺服器',
'contextPanel.browser.waitingForServerHint': '它尚未開始接受連線。一旦可用,本頁就會載入。',
'contextPanel.browser.tunnelFailed': '無法連線到這個開發伺服器',
'contextPanel.browser.tunnelFailedHint': '{url} 執行在 OpenChamber 所在的機器上,無法與其建立連線。這裡不會顯示你本機上的任何內容。',
'contextPanel.browser.loadFailedUnknown': '無法連線到該頁面。',
'contextPanel.browser.crashed': '此頁面已停止回應',
'contextPanel.browser.crashedHint': '頁面反覆當機。請重新載入後再試。',
'contextPanel.browser.devServers.title': '執行中的開發伺服器',
'projectActions.toast.multipleServers': '啟動了多個伺服器 — 請在瀏覽器面板中選擇',
'contextPanel.browser.devServers.justStarted': '剛剛啟動',
'contextPanel.browser.devServers.unavailable': '無法檢查執行中的開發伺服器。',
'contextPanel.browser.devServers.remoteOnly': '它們執行在託管 OpenChamber 的那台機器上。要開啟它們需要桌面應用程式。',
'contextPanel.browser.annotate.toggle': '標註頁面',
'contextPanel.browser.annotate.intro': '這是來自應用程式內建瀏覽器的標註選取範圍。',
'contextPanel.browser.annotate.attached': '標註已附加至聊天',
'contextPanel.browser.annotate.noSession': '附加標註前請先開啟聊天工作階段',
'contextPanel.browser.annotate.noPage': '標註前請先載入頁面',
'contextPanel.browser.annotate.failed': '無法標註此頁面',
'contextPanel.browser.annotate.tool.element': '元素',
'contextPanel.browser.annotate.tool.region': '區域',
'contextPanel.browser.annotate.tool.draw': '繪製',
'contextPanel.browser.annotate.commentPlaceholder': '描述所需變更...',
'contextPanel.browser.annotate.submit': '附加',
'contextPanel.browser.trustNotice': '在此開啟的頁面以對 OpenChamber 的完整存取權限執行 — 檢查與截圖需要此權限。僅開啟你信任的網站:惡意頁面可能讀取你的資料或以你的身分執行操作。',
'contextPanel.tab.closeTabAria': '關閉 {label} 分頁',
'contextPanel.actions.collapsePanel': '摺疊面板',
@@ -1222,6 +1353,14 @@ export const dict: Record<I18nKey, string> = {
'sidebarFilesTree.toast.writeNotSupported': '不支援寫入',
'sidebarFilesTree.toast.fileCreated': '檔案已建立',
'sidebarFilesTree.toast.operationFailed': '操作失敗',
'sidebarFilesTree.toast.uploaded': '檔案已上傳',
'sidebarFilesTree.toast.uploadedWithoutConflicts': '無衝突的檔案已上傳',
'sidebarFilesTree.toast.uploadFailed': '部分檔案無法上傳',
'sidebarFilesTree.drop.target': '上傳至 {path}',
'sidebarFilesTree.drop.uploading': '正在將檔案上傳至 {path}',
'sidebarFilesTree.dialog.uploadConflicts.title': '取代現有檔案?',
'sidebarFilesTree.dialog.uploadConflicts.description': '{path} 中已有同名檔案。取代後無法復原。',
'sidebarFilesTree.dialog.uploadConflicts.replace': '取代',
'sidebarFilesTree.toast.folderNameRequired': '資料夾名稱不能為空',
'sidebarFilesTree.toast.folderCreated': '資料夾已建立',
'sidebarFilesTree.toast.nameRequired': '名稱不能為空',
@@ -1277,6 +1416,12 @@ export const dict: Record<I18nKey, string> = {
'filesView.editor.disableLineWrap': '關閉自動換行',
'filesView.editor.enableLineWrap': '開啟自動換行',
'filesView.editor.findInFile': '檔案內尋找',
'filesView.preview.find.placeholder': '在預覽中尋找',
'filesView.preview.find.nextAria': '下一個相符項目',
'filesView.preview.find.previousAria': '上一個相符項目',
'filesView.preview.find.closeAria': '關閉搜尋',
'filesView.preview.find.noMatches': '無相符項目',
'filesView.preview.find.countAria': '第 {current} 個,共 {total} 個',
'filesView.editor.goToLine': '跳轉到行',
'filesView.editor.switchToEditMode': '切換到編輯模式',
'filesView.editor.switchToPreviewMode': '切換到預覽模式',
@@ -1327,10 +1472,12 @@ export const dict: Record<I18nKey, string> = {
'contextUsage.mobile.usedTokens': '已用 Token',
'contextUsage.mobile.contextLimit': '上下文上限',
'contextUsage.mobile.outputLimit': '輸出上限',
'contextUsage.mobile.cost': '成本',
'contextUsage.mobile.usage': '使用率',
'contextUsage.tooltip.usedTokens': '已用 Token:{tokens}',
'contextUsage.tooltip.contextLimit': '上下文上限:{tokens}',
'contextUsage.tooltip.outputLimit': '輸出上限:{tokens}',
'contextUsage.tooltip.cost': '成本:{cost}',
'contextSidebar.session.untitled': '未命名會話',
'contextSidebar.empty.openSession': '請先開啟會話以查看上下文。',
'contextSidebar.section.context': '上下文',
@@ -1357,6 +1504,7 @@ export const dict: Record<I18nKey, string> = {
'planView.file.defaultName': 'plan',
'planView.title.default': '計畫',
'planView.error.saveFailed': '儲存失敗',
'planView.error.loadFailed': '無法載入此計畫',
'planView.error.previewUnavailable': '預覽無法使用',
'planView.error.switchToEditMode': '請切換到編輯模式修復問題。',
'planView.error.writeFailed': '寫入失敗',
@@ -1398,6 +1546,13 @@ export const dict: Record<I18nKey, string> = {
"diffView.scope.changed": "已變更",
"diffView.scope.staged": "已暫存",
"diffView.scope.lastTurn": "上一輪",
"diffView.scope.branch": "分支",
"diffView.branch.resolvingBase": "正在偵測基礎分支...",
"diffView.branch.noBaseTitle": "沒有基礎分支",
"diffView.branch.noBaseDescription": "Git 中沒有記錄此分支的起點。請選擇基礎分支進行比較。",
"diffView.branch.loadError": "載入分支變更失敗",
"diffView.branch.loadingFiles": "正在載入分支變更...",
"diffView.branch.empty": "此分支相對於 {base} 沒有變更",
"diffView.scope.selectorAria": "選擇變更模式",
'diffView.actions.retry': '重試',
'diffView.actions.renderAnyway': '仍然渲染',
@@ -1422,6 +1577,12 @@ export const dict: Record<I18nKey, string> = {
'diffView.reviewDialog.toast.noSessionDirectory': 'Session directory is unavailable',
'diffView.reviewDialog.toast.startFailed': 'Failed to start review flow',
'chat.history.loadOlder': '載入更早的訊息',
'chat.appLink.confirm.title': '要在其他應用程式中開啟此連結嗎?',
'chat.appLink.confirm.description': '此聊天連結使用 {scheme} 通訊協定,將在其他應用程式中開啟。',
'chat.appLink.confirm.descriptionPlain': '此聊天連結將在其他應用程式中開啟。',
'chat.appLink.confirm.cancel': '取消',
'chat.appLink.confirm.open': '開啟一次',
'chat.appLink.confirm.trustAndOpen': '信任並開啟',
'chat.autoReview.title': '程式碼審查循環執行中',
'chat.autoReview.status.waitingForReviewer': '等待審查者',
'chat.autoReview.status.waitingForImplementer': '等待實作者',
@@ -1439,11 +1600,46 @@ export const dict: Record<I18nKey, string> = {
'diffView.hunk.unsupported': '此執行環境不支援暫存個別程式碼區塊。',
'rightSidebar.contextNotesTodo.plan.defaultTitle': '計畫',
'rightSidebar.contextNotesTodo.empty.selectProject': '請選擇一個專案以新增筆記和待辦事項。',
'rightSidebar.contextNotesTodo.notes.title': '快速筆記 - {project}',
'rightSidebar.contextNotesTodo.notes.placeholder': '記錄上下文、提醒或連結',
'rightSidebar.contextNotesTodo.todo.title': '待辦',
'rightSidebar.contextNotesTodo.todo.itemsSingle': '{count} 項',
'rightSidebar.contextNotesTodo.todo.itemsPlural': '{count} 項',
'rightSidebar.contextNotesTodo.notes.addAria': '新增筆記',
'rightSidebar.contextNotesTodo.notes.empty': '尚無筆記。可以記錄脈絡、提醒或連結。',
'rightSidebar.contextNotesTodo.notes.actions.expand': '展開筆記',
'rightSidebar.contextNotesTodo.notes.actions.collapse': '收合筆記',
'rightSidebar.contextNotesTodo.notes.actions.delete': '刪除筆記',
'rightSidebar.contextNotesTodo.notes.actions.pin': '釘選到代理上下文',
'rightSidebar.contextNotesTodo.notes.actions.unpin': '從代理上下文取消釘選',
'rightSidebar.contextNotesTodo.notes.source.selection': '來自對話',
'rightSidebar.contextNotesTodo.notes.source.agent': '來自代理',
'rightSidebar.contextNotesTodo.search.placeholder': '搜尋',
'rightSidebar.contextNotesTodo.search.clear': '清除搜尋',
'rightSidebar.contextNotesTodo.search.noResults': '沒有符合「{query}」的內容。',
'rightSidebar.contextNotesTodo.toast.deleteNoteFailed': '刪除筆記失敗',
'rightSidebar.contextNotesTodo.toast.createNoteFailed': '建立筆記失敗',
'rightSidebar.contextNotesTodo.tabs.notes': '筆記',
'rightSidebar.contextNotesTodo.tabs.todos': '待辦',
'rightSidebar.contextNotesTodo.tabs.plans': '計畫',
'rightSidebar.contextNotesTodo.plans.actions.back': '返回計畫列表',
'rightSidebar.contextNotesTodo.tabs.memory': '記憶',
'rightSidebar.contextNotesTodo.sections.label': '專案脈絡分區',
'rightSidebar.contextNotesTodo.sections.resize': '調整分區側欄寬度',
'rightSidebar.contextNotesTodo.memory.scope.project': '專案',
'rightSidebar.contextNotesTodo.memory.scope.label': '記憶範圍',
'rightSidebar.contextNotesTodo.memory.scope.global': '關於你',
'rightSidebar.contextNotesTodo.memory.type.fact': '事實',
'rightSidebar.contextNotesTodo.memory.badge.new': '新增',
'rightSidebar.contextNotesTodo.memory.flagged': '不會傳給代理 — 讀起來像指令',
'rightSidebar.contextNotesTodo.memory.badge.changed': '已變更',
'rightSidebar.contextNotesTodo.memory.type.preference': '偏好',
'rightSidebar.contextNotesTodo.memory.type.reference': '參考',
'rightSidebar.contextNotesTodo.memory.actions.delete': '刪除這則記憶',
'rightSidebar.contextNotesTodo.memory.actions.editTitle': '記憶標題',
'rightSidebar.contextNotesTodo.memory.actions.editBody': '記憶內容',
'rightSidebar.contextNotesTodo.memory.toast.saveFailed': '儲存記憶失敗',
'rightSidebar.contextNotesTodo.memory.toast.deleteFailed': '刪除記憶失敗',
'rightSidebar.contextNotesTodo.memory.empty.nothing': '代理還沒有在這裡儲存內容。',
'rightSidebar.contextNotesTodo.memory.empty.noMatches': '沒有符合搜尋的已儲存記憶。',
'rightSidebar.contextNotesTodo.memory.empty.noProject': '開啟專案即可查看代理記住了什麼。',
'rightSidebar.contextNotesTodo.memory.empty.unavailable': '無法載入已儲存的記憶。內容並未遺失,請再試一次。',
'rightSidebar.contextNotesTodo.todo.clearCompleted': '清除已完成',
'rightSidebar.contextNotesTodo.todo.inputPlaceholder': '新增待辦',
'rightSidebar.contextNotesTodo.todo.addAria': '新增待辦',
@@ -1454,13 +1650,9 @@ export const dict: Record<I18nKey, string> = {
'rightSidebar.contextNotesTodo.todo.actions.delete': '刪除「{text}」',
'rightSidebar.contextNotesTodo.todo.actions.send': '傳送「{text}」',
'rightSidebar.contextNotesTodo.todo.actions.reorder': '重新排序「{text}」',
'rightSidebar.contextNotesTodo.todo.resizeAria': '調整待辦清單大小',
'rightSidebar.contextNotesTodo.todo.sendMenu.currentSession': '傳送到目前會話',
'rightSidebar.contextNotesTodo.todo.sendMenu.newSession': '傳送到新會話',
'rightSidebar.contextNotesTodo.todo.sendMenu.newWorktreeSession': '傳送到新 worktree 會話',
'rightSidebar.contextNotesTodo.plans.title': '計畫',
'rightSidebar.contextNotesTodo.plans.filesSingle': '{count} 個檔案',
'rightSidebar.contextNotesTodo.plans.filesPlural': '{count} 個檔案',
'rightSidebar.contextNotesTodo.plans.importFromFile': '從檔案匯入計畫',
'rightSidebar.contextNotesTodo.plans.empty': '還沒有已儲存的計畫。',
'rightSidebar.contextNotesTodo.plans.deletePlan': '刪除計畫',
@@ -1480,13 +1672,14 @@ export const dict: Record<I18nKey, string> = {
'rightSidebar.contextNotesTodo.toast.sentToNewSession': '待辦已傳送到新會話',
'rightSidebar.contextNotesTodo.toast.sentToNewWorktreeSession': '待辦已傳送到新的 worktree 會話',
'rightSidebar.contextNotesTodo.toast.sendTodoFailed': '傳送待辦失敗',
'rightSidebar.contextNotesTodo.toast.updatePlanFailed': '更新計畫失敗',
'rightSidebar.contextNotesTodo.toast.deletePlanFailed': '刪除計畫失敗',
'rightSidebar.contextNotesTodo.toast.planFileEmpty': '計畫檔案為空',
'rightSidebar.contextNotesTodo.toast.importPlanFailed': '匯入計畫失敗',
'rightSidebar.contextNotesTodo.toast.planImported': '計畫已匯入',
'rightSidebar.contextNotesTodo.toast.readPlanFileFailed': '讀取計畫檔案失敗',
'inlineComment.range.lines': '行 {start}-{end}',
'inlineComment.input.placeholder': '新增留言...(Cmd+Enter 儲存)',
'inlineComment.input.placeholder': '新增留言...({shortcut} 儲存)',
'inlineComment.input.placeholderShort': '新增留言…',
'inlineComment.actions.cancel': '取消',
'inlineComment.actions.save': '儲存',
@@ -1505,8 +1698,6 @@ export const dict: Record<I18nKey, string> = {
'header.github.accountSource.cli': 'CLI',
'header.services.openWithCurrent': '開啟實例、用量和 MCP(目前:{current})',
'header.services.open': '開啟服務、用量和 MCP',
'header.services.tooltip.currentInstanceWithShortcuts': '目前實例:{current}({toggle};下一分頁 {nextTab})',
'header.services.tooltip.servicesWithShortcuts': '服務({toggle};下一分頁 {nextTab})',
'header.services.title': '服務',
'header.services.viewAria': '查看服務',
'header.services.closeAria': '關閉服務',
@@ -1516,7 +1707,6 @@ export const dict: Record<I18nKey, string> = {
'header.services.noRateLimitsReported': '未報告速率限制。',
'header.services.used': '已用',
'header.services.remaining': '剩餘',
'header.services.shutdownDev': '停止 OpenChamber',
'header.services.modelFamily.other': '其他',
'header.actions.openPlanAria': '開啟計畫',
"header.actions.toggleChangesPanel": "變更面板",
@@ -1610,6 +1800,10 @@ export const dict: Record<I18nKey, string> = {
'directoryExplorerDialog.browse.directories': '目錄',
'directoryExplorerDialog.browse.loading': '正在載入目錄...',
'directoryExplorerDialog.browse.empty': '沒有符合的目錄。',
'directoryExplorerDialog.browse.permissionDenied': 'OpenChamber 需要存取此資料夾。',
'directoryExplorerDialog.browse.loadFailed': '無法載入此資料夾。',
'directoryExplorerDialog.browse.grantAccess': '授予存取權限',
'directoryExplorerDialog.browse.retry': '再試一次',
'directoryExplorerDialog.browse.parentDirectory': '上層目錄',
'directoryExplorerDialog.browse.addedBadge': '已新增',
'directoryExplorerDialog.browse.quickAdd': '添加',
@@ -1669,22 +1863,18 @@ export const dict: Record<I18nKey, string> = {
'helpDialog.item.focusChatInput': '聚焦聊天輸入框',
'helpDialog.item.togglePromptNavigator': '顯示或隱藏提示詞導覽',
'helpDialog.item.abortActiveRun': '中止目前執行(連按兩下)',
'helpDialog.item.toggleRightSidebar': '切換上下文面板',
'helpDialog.item.openRightSidebarGitTab': '開啟 Git 介面',
'helpDialog.item.openRightSidebarFilesTab': '開啟檔案介面',
'helpDialog.item.toggleTerminalDock': '切換終端機停靠欄',
'helpDialog.item.toggleTerminalExpanded': '切換終端機展開狀態',
'helpDialog.item.togglePlanContextPanel': '切換計畫上下文面板',
'helpDialog.item.cycleTheme': '循環切換主題(淺色 → 深色 → 跟隨系統)',
'helpDialog.item.switchProject': '切換專案',
'helpDialog.item.switchSessionTab': '切換工作階段分頁',
'helpDialog.item.switchContextSurface': '切換上下文面板介面(數字鍵)',
'helpDialog.item.toggleServicesMenu': '切換服務選單',
'helpDialog.item.cycleServicesTab': '循環服務標籤',
'helpDialog.item.openSettings': '開啟設定',
'helpDialog.keyCombiner.or': '或',
'helpDialog.proTips.title': '使用提示:',
'helpDialog.proTips.commandPalette': '使用命令面板({shortcut})可快速存取所有操作',
'helpDialog.proTips.recentSessions': '最近 5 個會话會顯示在命令面板中',
'helpDialog.proTips.themeCycling': '主題循環會記住你在各會話中的偏好',
'helpDialog.proTips.leaderSequences': '兩段式快捷鍵:先按組合鍵,再按第二個鍵(Esc 取消)',
'header.actions.rightSidebarWithShortcut': '右側邊欄({shortcut})',
'header.actions.toggleRightSidebarAria': '切換右側邊欄',
'header.actions.openAppMenu': 'OpenChamber 選單',
@@ -1768,8 +1958,6 @@ export const dict: Record<I18nKey, string> = {
'session.newWorktree.noMatchingBranches': '沒有符合分支',
'session.newWorktree.localBranches': '本地分支',
'session.newWorktree.remoteBranches': '遠端分支',
'session.newWorktree.otherLocalBranches': '其他本地分支',
'session.newWorktree.otherRemoteBranches': '其他遠端分支',
'session.newWorktree.branchName': '分支名稱',
'session.newWorktree.branchNamePlaceholder': 'feature/my-awesome-feature',
'session.newWorktree.actions.change': '變更',
@@ -1894,7 +2082,6 @@ export const dict: Record<I18nKey, string> = {
'chat.statusRow.tasksTitle': '任務',
'chat.statusRow.modelStatus': '{model} · {status}',
'chat.statusRow.summary.activeLeft': '{active} 個活躍 · 剩餘 {left} 個',
'chat.statusRow.aborted': '已中止',
'chat.revertIndicator.redo': '重做',
'chat.revertIndicator.redoAria': '重做 — 恢復已收回的訊息',
'chat.revertPopover.title': '已收回',
@@ -1908,6 +2095,9 @@ export const dict: Record<I18nKey, string> = {
'chat.revert.toast.undo': '已收回至 {preview}',
'chat.revert.toast.redo': '已重做',
'chat.revert.toast.restored': '已恢復全部訊息',
'chat.toast.opencodeRestartInterrupted.title': '聊天已中斷',
'chat.toast.opencodeRestartInterrupted.description': 'OpenCode 在回覆仍在產生時重新啟動。傳送訊息以繼續。',
'chat.toast.opencodeRestartInterrupted.openSession': '開啟會話',
'chat.errorBoundary.title': '聊天錯誤',
'chat.errorBoundary.description': '聊天介面發生錯誤,可能是暫時網路問題或訊息資料損毀導致。',
'chat.errorBoundary.sessionLabel': '會話',
@@ -1934,6 +2124,7 @@ export const dict: Record<I18nKey, string> = {
'chat.commandAutocomplete.command.catchUpDescription': '重新進入上下文:你之前在做什麼、從哪裡繼續。',
'chat.commandAutocomplete.command.debugDescription': '在提出修復方案前,引導式地排查 bug 的根本原因。',
'chat.commandAutocomplete.command.weighDescription': '在動手前,權衡 2-3 種方案的利弊並給出推薦。',
'chat.commandAutocomplete.command.btwDescription': '在臨時子工作階段中提問,不打斷目前對話',
'chat.commandAutocomplete.command.exploreDescription': '快速熟悉這個程式碼庫:對架構和主要部分的概覽。',
'chat.commandAutocomplete.badge.skill': 'Skills',
'chat.commandAutocomplete.badge.command': '命令',
@@ -1954,13 +2145,28 @@ export const dict: Record<I18nKey, string> = {
'chat.container.returnToParent.titleNamed': '返回到:{title}',
'chat.container.returnToParent.title': '返回父會話',
'chat.container.returnToParent.label': '父級',
'chat.btw.destroyAria': '銷毀此 btw 工作階段',
'chat.btw.titleFallback': 'btw 工作階段',
'chat.btw.mainComposerPlaceholder': '在此 btw 工作階段中提問…',
'chat.btw.loading': '正在啟動 btw 工作階段…',
'chat.btw.toast.emptyArgument': '在 /btw 後輸入問題',
'chat.btw.toast.createFailed': '啟動 btw 工作階段失敗',
'chat.btw.toast.destroyFailed': '銷毀 btw 工作階段失敗。它將保留在側邊欄中。',
'chat.btw.working': '處理中…',
'chat.btw.collapseAria': '收合 btw 面板',
'chat.btw.expandAria': '展開 btw 面板',
'chat.btw.promoteAria': '保留為獨立工作階段',
'chat.btw.toast.promoteFailed': '保留 btw 工作階段失敗',
'chat.container.readOnlySubagentPromptBanner': '無法向子 Agent 會話傳送提示。',
'chat.container.sessionLoadError.title': '無法載入工作階段',
'chat.container.sessionLoadError.description': '請檢查連線,然後重新載入此工作階段。',
'chat.container.sessionLoadError.description': '無法取得對話——伺服器可能已關閉或無法連線。內容沒有遺失;待其恢復後再試即可。',
'chat.container.sessionLoadError.authDescription': '工作階段已過期,伺服器拒絕了請求。登入後對話即會載入。',
'chat.container.sessionLoadError.retry': '再試一次',
'sessions.sidebar.group.empty.loadingSessions': '正在載入工作階段…',
'sessions.sidebar.group.empty.loadFailed': '無法重新整理工作階段。',
'sessions.sidebar.group.empty.retry': '再試一次',
'sessions.sidebar.group.empty.permissionDenied': '需要資料夾存取權限。',
'sessions.sidebar.group.empty.grantAccess': '授予存取權限',
'chat.unifiedControls.title': '控制',
'chat.unifiedControls.model.title': '模型',
'chat.unifiedControls.model.noRecent': '沒有最近使用的模型',
@@ -1992,12 +2198,13 @@ export const dict: Record<I18nKey, string> = {
'chat.textSelection.toast.addToNotesFailed': '加入筆記失敗',
'chat.textSelection.toast.addToNotesSuccess': '已將選取文字加入筆記',
'chat.textSelection.toast.addToNotesSummaryFailed': '無法總結所選內容,已將所選文字加入筆記',
'chat.textSelection.actions.addToChat': '加入聊天',
'chat.textSelection.actions.newSession': '新增會話',
'chat.textSelection.actions.copy': '複製',
'chat.textSelection.actions.addToInput': '加入輸入框',
'chat.textSelection.actions.comment': '留言',
'chat.textSelection.title.commentOnSelection': '對所選內容留言',
'chat.textSelection.comment.placeholder': '新增選填留言...',
'chat.textSelection.comment.attach': '附加',
'chat.textSelection.actions.addToNotes': '加入筆記',
'chat.textSelection.title.addToCurrentChat': '加入目前聊天',
'chat.textSelection.title.newSessionWithSelection': '使用選取內容建立新會話',
'chat.textSelection.title.saveInsightToNotes': '將選取文字儲存到筆記',
'chat.messageBody.actions.revertAria': '收回到這條訊息',
'chat.messageBody.actions.revert': '從此處收回',
@@ -2093,6 +2300,7 @@ export const dict: Record<I18nKey, string> = {
'chat.chatInput.toast.attachmentsTooLarge': '附件過大,無法傳送。請減少圖片數量或大小。',
'chat.chatInput.toast.sendAttachmentsFailed': '傳送附件失敗。請嘗試更少檔案或更小圖片。',
'chat.chatInput.toast.messageSendFailed': '訊息傳送失敗,附件已恢復。',
'chat.chatInput.toast.noModelSelected': '傳送前請先選擇提供者與模型。',
'chat.chatInput.toast.clipboardAttachFailed': '從剪貼簿附加圖片失敗',
'chat.chatInput.toast.clipboardTextAttachFailed': '無法將貼上的文字附加為檔案',
'chat.chatInput.toast.largeTextPaste.title': '偵測到大段文字',
@@ -2108,8 +2316,6 @@ export const dict: Record<I18nKey, string> = {
'chat.chatInput.toast.togglePermissionAutoAcceptFailed': '切換權限自動接受失敗',
'chat.chatInput.reviewComments': '審查留言:',
'chat.chatInput.reviewCommentsRemove': '移除審查留言',
'chat.chatInput.devServerLogs': 'Dev Server 日誌:',
'chat.chatInput.devServerLogsRemove': '移除 Dev Server 日誌',
'chat.chatInput.previewAnnotations': '預覽註釋:',
'chat.chatInput.previewContext': '預覽上下文:',
'chat.chatInput.previewContextRemove': '移除預覽上下文',
@@ -2148,6 +2354,7 @@ export const dict: Record<I18nKey, string> = {
'chat.toolPart.showRawJson': '顯示原始 JSON',
'chat.toolPart.showFormattedJson': '顯示格式化 JSON',
'chat.toolPart.showNavigableJson': '顯示可導覽 JSON',
'chat.toolPart.openFile': '開啟檔案',
'chat.toolPart.openFileAtFirstChange': '在首次變更處開啟檔案',
'chat.toolPart.openFileDiff': '開啟檔案差異',
'chat.toolPart.copyOutput': '複製輸出',
@@ -2279,6 +2486,15 @@ export const dict: Record<I18nKey, string> = {
'commandPalette.item.toggleSidebar': '切換側邊欄',
'commandPalette.item.showContextUsage': '顯示上下文用量',
'commandPalette.item.toggleTerminal': '切換終端機',
'commandPalette.item.cycleTheme': '輪換主題',
'commandPalette.item.showOpenCodeStatus': '顯示 OpenCode 狀態',
'commandPalette.item.toggleMemoryDebug': '切換記憶體偵錯面板',
'commandPalette.item.pinSession': '釘選或取消釘選會話',
'commandPalette.item.copySessionId': '複製會話 ID',
'commandPalette.item.openMultiRun': '開啟多任務啟動器',
'commandPalette.item.openArchive': '開啟已封存會話',
'commandPalette.item.openNotes': '開啟筆記面板',
'commandPalette.item.openTodos': '開啟待辦面板',
'commandPalette.item.openSettings': '開啟設定...',
'commandPalette.session.untitled': '未命名會話',
'openCodeStatusDialog.title': 'OpenCode 狀態',
@@ -2493,6 +2709,9 @@ export const dict: Record<I18nKey, string> = {
'sessionAuth.error.passkeySignInCanceled': 'Passkey 登入已取消。',
'sessionAuth.error.enterPasswordForPasskey': '請輸入密碼以新增 passkey。',
'sessionAuth.locked.tunnelTitle': '需要 Tunnel 存取',
'sessionAuth.expired.banner': '工作階段已過期——請登入以繼續。',
'sessionAuth.expired.loginAction': '登入',
'sessionAuth.expired.sendBlocked': '工作階段已過期——請登入後再傳送訊息。',
'sessionAuth.locked.unlockTitle': '解鎖 OpenChamber',
'sessionAuth.locked.tunnelDescription': '請使用桌面應用程式提供的一次性連結開啟該 Tunnel。',
'sessionAuth.locked.passwordDescription': '此會話受密碼保護。',
@@ -2768,6 +2987,10 @@ export const dict: Record<I18nKey, string> = {
'updateDialog.status.updating': '更新中...',
'updateDialog.error.updateFailed': '更新失敗',
'updateDialog.error.takingLonger': '更新耗時超出預期。請稍等後重新整理,或執行:openchamber update',
'updateDialog.error.signatureRejected': '下載的更新遭到拒絕:其程式碼簽章與目前的安裝不符。這通常表示執行中的副本不是從官方簽章版本安裝的。請從官方版本安裝 OpenChamber,再重新更新。',
'updateDialog.error.updaterDisabled': '一次安裝失敗後,更新程式已停止。請結束 OpenChamber,重新開啟後再試一次更新。',
'updateDialog.error.restartFailed': '無法重新啟動以安裝更新。',
'updateDialog.error.restartUnavailable': '安裝更新需要 OpenChamber 桌面應用程式。',
'mobileUpdate.toast.available.title': 'OpenChamber 更新可用',
'mobileUpdate.toast.available.description': '版本 {version} 已可用於 Android。',
'mobileUpdate.toast.actions.download': '下載',
@@ -2788,6 +3011,7 @@ export const dict: Record<I18nKey, string> = {
'memoryDebugPanel.title': '偵錯面板',
'memoryDebugPanel.tabs.memory': '記憶體',
'memoryDebugPanel.tabs.streaming': '串流',
'memoryDebugPanel.tabs.requests': '請求',
'memoryDebugPanel.section.sessionsInMemory': '記憶體中的會話',
'memoryDebugPanel.section.uiStreamingMetrics': 'UI 串流指標',
'memoryDebugPanel.section.vscodeBridgeMetrics': 'VS Code 橋接指標',
@@ -2825,6 +3049,16 @@ export const dict: Record<I18nKey, string> = {
'memoryDebugPanel.streaming.copy.copied': '串流偵錯 JSON 已複製',
'memoryDebugPanel.streaming.copy.failed': '複製 JSON 失敗',
'memoryDebugPanel.streaming.copy.hint': '複製會匯出 UI 與 VS Code 的串流指標 JSON',
'memoryDebugPanel.requests.inFlight': '進行中',
'memoryDebugPanel.requests.peak': '峰值',
'memoryDebugPanel.requests.duration': '時長',
'memoryDebugPanel.requests.totalRequests': '請求總數',
'memoryDebugPanel.requests.tracking': '追蹤',
'memoryDebugPanel.requests.now': '目前',
'memoryDebugPanel.requests.noSamples': '尚未記錄請求。保持此面板開啟以記錄 fetch 活動。',
'memoryDebugPanel.requests.chartLabel': '隨時間變化的進行中 fetch 請求,峰值 {peak}',
'memoryDebugPanel.requests.windowHint': '最近 {seconds}秒',
'memoryDebugPanel.requests.percentileChartLabel': '進行中請求年齡百分位(p50、p90、p99、最大值)隨時間的變化',
'memoryDebugPanel.common.idle': '閒置',
'memoryDebugPanel.common.live': '即時',
'memoryDebugPanel.common.notAvailable': '無',
@@ -2899,18 +3133,23 @@ export const dict: Record<I18nKey, string> = {
'common.relative.daysAgoCompact': '{count}d ago',
'common.relative.weeksAgoCompact': '{count}w ago',
'common.relative.yearsAgoCompact': '{count}y ago',
'common.duration.secondsCompact': '{seconds}秒',
'common.duration.minutesSecondsCompact': '{minutes}分{seconds}秒',
'common.duration.hoursMinutesCompact': '{hours}小時{minutes}分',
'contextFileOpen.failure.tooLarge': 'File is too large to open (>{count} lines)',
'contextFileOpen.failure.missing': 'File not found',
'contextFileOpen.failure.unreadable': 'Failed to open file',
'quota.window.5h': '5-Hour',
'quota.window.7d': '7-Day Limit',
'quota.window.7dSonnet': '7-Day Sonnet Limit',
'quota.window.7dOpus': '7-Day Opus Limit',
'quota.window.weekly': 'Weekly Limit',
'quota.window.extraUsage': '額外用量',
'quota.window.weekly': '每週',
'quota.window.daily': 'Daily',
'quota.window.monthly': 'Monthly Limit',
'quota.window.monthly': '每月',
'quota.window.credits': 'Credits',
'quota.window.creditsBalance': 'Credits Balance',
'quota.window.monthlyCredits': '每月點數',
'quota.window.purchasedCredits': '已購買點數',
'quota.window.freeCredits': '免費點數',
'quota.window.billingCycle': 'Billing Cycle',
'quota.window.auto': 'Auto',
'quota.window.api': 'API',
@@ -2920,5 +3159,104 @@ export const dict: Record<I18nKey, string> = {
'quota.window.premium': 'Premium Interactions',
'quota.window.chat': 'Chat Requests',
'quota.window.completions': 'Completions',
'quota.window.premiumInteractions': 'Premium interactions',
'quota.window.premiumInteractions': 'AI 點數',
'chat.workStatus.ariaLabel': '工作狀態',
'chat.workStatus.context.label': '上下文',
'chat.workStatus.cost.breakdown': '工作階段 {session} · 子 Agent {subagents}',
'chat.workStatus.git.changedFileSingle': '已變更 {count} 個檔案',
'chat.workStatus.git.changedFilePlural': '已變更 {count} 個檔案',
'chat.workStatus.pr.untitled': '未命名的提取請求',
'chat.workStatus.pr.draft': '草稿',
'chat.workStatus.pr.checks': '檢查',
'chat.workStatus.pr.checksFailed': '{count} 項失敗',
'chat.workStatus.pr.checksPending': '{count} 項進行中',
'chat.workStatus.pr.checksPassed': '{count} 項通過',
'chat.workStatus.attention.merge': '正在合併',
'chat.workStatus.attention.rebase': '正在變基',
'chat.workStatus.attention.cherryPick': '正在揀選提交',
'chat.workStatus.attention.revert': '正在還原',
'chat.workStatus.attention.bisect': '正在二分搜尋',
'chat.workStatus.subagent.done': '已完成',
'chat.workStatus.subagent.untitled': '子代理',
'chat.workStatus.mcp.toggle': '切換 {name}',
'chat.workStatus.mcp.needsAuth': '登入',
'chat.workStatus.mcp.failed': '失敗',
'chat.workStatus.pinned.unavailable': '已釘選的訊息',
'chat.workStatus.section.session': '工作階段',
'chat.workStatus.section.project': '專案',
'chat.workStatus.section.subagents': '子代理',
'chat.workStatus.section.mcp': 'MCP',
'chat.workStatus.section.pinned': '已釘選的訊息',
'chat.workStatus.section.tasks': '工作',
'chat.workStatus.subagent.working': '正在工作',
'chat.workStatus.subagent.needsPermission': '需要授權',
'chat.workStatus.subagent.askedQuestion': '提出了問題',
'chat.workStatus.section.contextBreakdown': '上下文來源',
'chat.workStatus.breakdown.skills': '技能',
'chat.workStatus.breakdown.pinnedNote': '筆記',
'chat.workStatus.breakdown.unpin': '從脈絡取消釘選',
'chat.workStatus.breakdown.pinnedPlan': '計畫',
'chat.workStatus.breakdown.memory': '代理記憶',
'chat.workStatus.breakdown.pinnedKnowledgeSingle': '已釘選 {count}',
'chat.workStatus.breakdown.pinnedKnowledgePlural': '已釘選 {count}',
'chat.workStatus.breakdown.mcp': 'MCP 伺服器',
'chat.workStatus.action.openChanges': '開啟變更',
'chat.workStatus.action.openGit': '開啟 Git 面板',
'chat.workStatus.action.openPr': '開啟提取請求',
'chat.workStatus.action.openSubagent': '開啟 {name}',
'chat.workStatus.section.usage': '用量',
'chat.workStatus.goal.open': '管理目標',
'chat.workStatus.goal.pause': '暫停',
'chat.workStatus.goal.resume': '繼續',
'chat.workStatus.goal.updateFailed': '無法更新目標',
'chat.workStatus.pinned.unpin': '取消釘選訊息',
'chat.workStatus.pinned.reveal': '跳至訊息',
'chat.workStatus.pinned.unpinFailed': '無法取消釘選訊息',
'chat.workStatus.action.openContext': '開啟上下文面板',
'chat.workStatus.section.linkedIssues': '已關聯',
'chat.workStatus.linkedIssues.open': '在 GitHub 上開啟 #{number}',
'chat.workStatus.linkedIssues.unlink': '移除關聯',
'chat.workStatus.linkedIssues.unlinkFailed': '無法移除關聯',
'chat.workStatus.linkedIssues.link': '關聯到工作階段',
'chat.workStatus.linkedIssues.linkFailed': '無法關聯',
'chat.workStatus.breakdown.issueCountSingle': '{count} 個 issue',
'chat.workStatus.breakdown.issueCountPlural': '{count} 個 issue',
'chat.workStatus.breakdown.prCountSingle': '{count} 個 PR',
'chat.workStatus.breakdown.prCountPlural': '{count} 個 PR',
'chat.workStatus.breakdown.skillCountSingle': '{count} 個技能',
'chat.workStatus.breakdown.skillCountPlural': '{count} 個技能',
'chat.workStatus.breakdown.mcpCountSingle': '{count} 個 MCP',
'chat.workStatus.breakdown.mcpCountPlural': '{count} 個 MCP',
'chat.workStatus.sections.open': '選擇區塊',
'chat.workStatus.sections.dialogTitle': '面板區塊',
'chat.workStatus.sections.dialogDescription': '選擇工作狀態面板顯示的內容。隱藏的區塊仍保留資料,只是不再顯示。',
'chat.workStatus.sections.allHidden': '未選擇任何部分',
'chat.workStatus.sections.showAll': '全部顯示',
'chat.workStatus.sections.noneWarning': '面板將顯示為空。',
'header.workStatusPanel.toggleAria': '切換工作狀態面板',
'header.workStatusPanel.hide': '隱藏工作狀態',
'header.workStatusPanel.show': '顯示工作狀態',
'chat.workStatus.mcp.authorizeOpenFailed': '無法開啟授權頁面',
'chat.workStatus.mcp.authorizeFailed': '授權失敗',
'mcpDropdown.toast.authorizeOpenFailed': '無法開啟授權頁面',
'mcpDropdown.toast.authorizeFailed': '授權失敗',
'header.services.tooltip.currentInstance': '目前執行個體:{current}({toggle})',
'header.workStatusPanel.showOverlay': '在聊天上方顯示工作狀態',
'settings.mcp.page.connection.title': '如何連線',
'settings.mcp.page.connection.description': '貼上啟動指令,或代管伺服器的連結。',
'settings.mcp.page.registration.title': '此伺服器需要獨立應用程式',
'settings.mcp.page.registration.description': '它不會自動發放憑證。請在該服務的設定中建立應用程式,將資訊貼到這裡,然後登入。',
'settings.mcp.page.registration.callbackLabel': '把這個位址填入該服務',
'settings.mcp.page.registration.clientId': '應用程式 ID',
'settings.mcp.page.registration.clientSecret': '應用程式密鑰',
'settings.mcp.page.registration.afterSaving': '儲存後點擊「授權」。',
'settings.mcp.page.toast.copiedCallbackUrl': '已複製位址',
'settings.mcp.page.toast.clipboardWriteFailed': '無法複製到剪貼簿',
'settings.mcp.page.scope.everywhere': '在所有專案中可用',
'settings.mcp.page.scope.thisProject': '僅在此專案中',
'settings.mcp.page.env.description': '伺服器需要的值,例如 API 金鑰。',
'settings.mcp.page.connection.kindCommand': '指令',
'settings.mcp.page.connection.kindLink': '連結',
'settings.mcp.page.connection.hintCommand': '在本機執行。貼上完整指令後會依每行一個參數拆分。',
'settings.mcp.page.connection.hintLink': '連線到他人代管的伺服器。貼上其 https 位址。',
};
+7 -3
View File
@@ -1,10 +1,10 @@
export type Locale = 'en' | 'de' | 'fr' | 'zh-CN' | 'zh-TW' | 'uk' | 'es' | 'pt-BR' | 'ko' | 'pl' | 'ja';
export type Locale = 'en' | 'de' | 'fr' | 'zh-CN' | 'zh-TW' | 'uk' | 'es' | 'pt-BR' | 'ko' | 'pl' | 'ja' | 'tr';
export const LOCALES = ['en', 'de', 'fr', 'zh-CN', 'zh-TW', 'uk', 'es', 'pt-BR', 'ko', 'pl', 'ja'] as const satisfies readonly Locale[];
export const LOCALES = ['en', 'de', 'fr', 'zh-CN', 'zh-TW', 'uk', 'es', 'pt-BR', 'ko', 'pl', 'ja', 'tr'] as const satisfies readonly Locale[];
export const DEFAULT_LOCALE: Locale = 'en';
export const LOCALE_LABEL_KEYS: Record<Locale, 'common.language.english' | 'common.language.french' | 'common.language.simplifiedChinese' | 'common.language.traditionalChinese' | 'common.language.ukrainian' | 'common.language.spanish' | 'common.language.brazilianPortuguese' | 'common.language.korean' | 'common.language.polish' | 'common.language.german' | 'common.language.japanese'> = {
export const LOCALE_LABEL_KEYS: Record<Locale, 'common.language.english' | 'common.language.french' | 'common.language.simplifiedChinese' | 'common.language.traditionalChinese' | 'common.language.ukrainian' | 'common.language.spanish' | 'common.language.brazilianPortuguese' | 'common.language.korean' | 'common.language.polish' | 'common.language.german' | 'common.language.japanese' | 'common.language.turkish'> = {
en: 'common.language.english',
fr: 'common.language.french',
'zh-CN': 'common.language.simplifiedChinese',
@@ -16,6 +16,7 @@ export const LOCALE_LABEL_KEYS: Record<Locale, 'common.language.english' | 'comm
pl: 'common.language.polish',
de: 'common.language.german',
ja: 'common.language.japanese',
tr: 'common.language.turkish',
};
export const LOCALE_STORAGE_KEY = 'openchamber.i18n.v1';
@@ -66,6 +67,9 @@ export function normalizeLocale(value: string | undefined | null): Locale {
if (normalized === 'pl' || normalized.startsWith('pl-')) {
return 'pl';
}
if (normalized === 'tr' || normalized.startsWith('tr-')) {
return 'tr';
}
return DEFAULT_LOCALE;
}
+3 -1
View File
@@ -46,7 +46,9 @@ async function loadDictionary(locale: Locale): Promise<I18nDictionary> {
? await import('./messages/de') as { dict: I18nDictionary }
: locale === 'ja'
? await import('./messages/ja') as { dict: I18nDictionary }
: { dict: enDict };
: locale === 'tr'
? await import('./messages/tr') as { dict: I18nDictionary }
: { dict: enDict };
dictionaries.set(locale, mod.dict);
return mod.dict;
}