mirror of
https://github.com/stablyai/orca.git
synced 2026-10-31 00:57:45 +00:00
fix(i18n): localize sidebar, status bar, tab bar and workspace cleanup copy (#35443)
* fix(i18n): localize sidebar, status bar, tab bar and workspace cleanup copy Replace fragment-concatenated sentences, separate singular/plural keys and raw English in the S2 renderer areas (sidebar, status-bar, tab-bar, tab-group, workspace-cleanup, new-workspace, activity, dashboard, terminal-pane, cmd-j) with whole-sentence keys and CLDR plural families, and add translations for all built-in locales. Refs #32207 * fix(i18n): subscribe DashboardAgentRow to UI language changes * test: keep real i18n exports in SmartWorkspaceNameField mocks for Trans rows --------- Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
This commit is contained in:
@@ -515,9 +515,6 @@
|
||||
"auto.components.activity.ActivityPrototypePage.b29191b3e0": {
|
||||
"ko": "워크트리"
|
||||
},
|
||||
"auto.components.activity.ActivityTitlebarControls.f915168c8e": {
|
||||
"ko": "읽지 않음"
|
||||
},
|
||||
"auto.components.agent.AgentCombobox.48c6a5a9b4": {
|
||||
"ko": "agents 검색..."
|
||||
},
|
||||
@@ -3479,9 +3476,6 @@
|
||||
"auto.components.sidebar.AddRepoSteps.cloneParentFolder": {
|
||||
"ko": "상위 폴더"
|
||||
},
|
||||
"auto.components.sidebar.DeleteWorktreeWarningPanels.c4f96a6e18": {
|
||||
"ko": "메인 워크트리"
|
||||
},
|
||||
"auto.components.sidebar.HostRemoveDialog.1a2b3c4d5e": {
|
||||
"ko": "{{value0}} 제거됨"
|
||||
},
|
||||
@@ -3503,12 +3497,6 @@
|
||||
"auto.components.sidebar.HostRemoveDialog.8b9c0d1e2f": {
|
||||
"ko": "호스트 제거"
|
||||
},
|
||||
"auto.components.sidebar.HostRemoveDialog.manyWorkspaces": {
|
||||
"ko": "워크스페이스 {{count}}개"
|
||||
},
|
||||
"auto.components.sidebar.HostRemoveDialog.oneWorkspace": {
|
||||
"ko": "워크스페이스 1개"
|
||||
},
|
||||
"auto.components.sidebar.HostRemoveDialog.workspacesFailed": {
|
||||
"ko": "이 호스트에서 워크스페이스 {{count}}개를 제거할 수 없었습니다. 재시도할 수 있도록 호스트가 유지되었습니다."
|
||||
},
|
||||
@@ -3593,9 +3581,6 @@
|
||||
"auto.components.sidebar.ScrollToCurrentWorkspaceToolbarButton.23989bb663": {
|
||||
"ko": "활성 워크스페이스로 이동"
|
||||
},
|
||||
"auto.components.sidebar.SetupScriptPromptCardViews.bb879db364": {
|
||||
"ko": "이 repo는 공유를 무시합니다"
|
||||
},
|
||||
"auto.components.sidebar.SidebarFeedbackDialog.3460258a54": {
|
||||
"ko": "X에서 팔로우"
|
||||
},
|
||||
@@ -3923,12 +3908,6 @@
|
||||
"auto.components.status.bar.StatusBar.25d8bbde69": {
|
||||
"ko": "재설정 사용 중…"
|
||||
},
|
||||
"auto.components.status.bar.StatusBar.5e5f9f5160": {
|
||||
"ko": "rate-limit 재설정 1회 사용 가능"
|
||||
},
|
||||
"auto.components.status.bar.StatusBar.5ecae9197c": {
|
||||
"ko": "rate-limit 재설정 {{value0}}회 사용 가능"
|
||||
},
|
||||
"auto.components.status.bar.StatusBar.6d1042aa6f": {
|
||||
"ko": "활성 계정의 Codex rate-limit 재설정 크레딧 1회를 사용해 재설정 가능한 사용량 창을 즉시 초기화합니다."
|
||||
},
|
||||
@@ -3962,12 +3941,6 @@
|
||||
"auto.components.status.bar.WorkspaceSpaceManagerPanel.39801484e0": {
|
||||
"ko": "실패"
|
||||
},
|
||||
"auto.components.status.bar.WorkspaceSpaceManagerPanel.63efebe0e6": {
|
||||
"ko": "{{value0}} {{value1}}이(가) Space에서 제거되었습니다."
|
||||
},
|
||||
"auto.components.status.bar.WorkspaceSpaceManagerPanel.65402b7192": {
|
||||
"ko": "선택됨"
|
||||
},
|
||||
"auto.components.status.bar.WorkspaceSpaceManagerPanel.81f14d9924": {
|
||||
"ko": "리포지토리"
|
||||
},
|
||||
@@ -3986,12 +3959,6 @@
|
||||
"auto.components.status.bar.tooltip.1292d4f2ee": {
|
||||
"ko": "사용할 수 없음"
|
||||
},
|
||||
"auto.components.status.bar.tooltip.45198c7d95": {
|
||||
"ko": "rate-limit 재설정 1회 사용 가능"
|
||||
},
|
||||
"auto.components.status.bar.tooltip.bce421cba3": {
|
||||
"ko": "rate-limit 재설정 {{value0}}회 사용 가능"
|
||||
},
|
||||
"auto.components.tab.bar.BrowserTab.911542656f": {
|
||||
"ko": "탭 고정"
|
||||
},
|
||||
@@ -5750,30 +5717,6 @@
|
||||
"auto.components.TaskPage.memberCountPlural": {
|
||||
"ko": "멤버 {{count}}명"
|
||||
},
|
||||
"auto.components.terminal.pane.terminal.drop.handler.skippedSymlinkSingular": {
|
||||
"ko": "심볼릭 링크 {{count}}개를 건너뛰었습니다."
|
||||
},
|
||||
"auto.components.terminal.pane.terminal.drop.handler.skippedSymlinkPlural": {
|
||||
"ko": "심볼릭 링크 {{count}}개를 건너뛰었습니다."
|
||||
},
|
||||
"auto.components.terminal.pane.terminal.drop.handler.uploadingFileSingular": {
|
||||
"ko": "파일 {{count}}개를 런타임에 업로드하는 중…"
|
||||
},
|
||||
"auto.components.terminal.pane.terminal.drop.handler.uploadingFilePlural": {
|
||||
"ko": "파일 {{count}}개를 런타임에 업로드하는 중…"
|
||||
},
|
||||
"auto.components.sidebar.WorktreeList.groupProjectsRemainedSingular": {
|
||||
"ko": "그룹을 삭제했지만, 포함된 프로젝트 {{count}}개 중 {{remaining}}개가 남아 있습니다."
|
||||
},
|
||||
"auto.components.sidebar.WorktreeList.groupProjectsRemainedPlural": {
|
||||
"ko": "그룹을 삭제했지만, 포함된 프로젝트 {{count}}개 중 {{remaining}}개가 남아 있습니다."
|
||||
},
|
||||
"auto.components.sidebar.AddRemoteHostDialog.sshImportSyncedSingular": {
|
||||
"ko": "호스트 {{count}}개를 Orca에 추가했습니다."
|
||||
},
|
||||
"auto.components.sidebar.AddRemoteHostDialog.sshImportSyncedPlural": {
|
||||
"ko": "호스트 {{count}}개를 Orca에 추가했습니다."
|
||||
},
|
||||
"auto.components.onboarding.IntegrationsStep.linearWorkspacesLinkedSingular": {
|
||||
"ko": "워크스페이스 {{count}}개가 연결되었습니다. 언제든지 다른 워크스페이스를 추가하거나 접근 권한이 제한된 API 키를 교체할 수 있습니다."
|
||||
},
|
||||
|
||||
@@ -45,8 +45,17 @@ export function ActivityTitlebarControls(): React.JSX.Element {
|
||||
{translate('auto.components.activity.ActivityTitlebarControls.d6a8de3934', 'agents')}
|
||||
</span>
|
||||
<Badge variant="secondary" className="h-5 px-1.5 text-[11px] font-normal">
|
||||
{unreadCount}{' '}
|
||||
{translate('auto.components.activity.ActivityTitlebarControls.f915168c8e', 'unread')}
|
||||
{unreadCount === 1
|
||||
? translate(
|
||||
'auto.components.activity.ActivityTitlebarControls.unreadCount_one',
|
||||
'{{count}} unread',
|
||||
{ count: unreadCount }
|
||||
)
|
||||
: translate(
|
||||
'auto.components.activity.ActivityTitlebarControls.unreadCount_other',
|
||||
'{{count}} unread',
|
||||
{ count: unreadCount }
|
||||
)}
|
||||
</Badge>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -167,9 +167,13 @@ export function clearCompletedActivity(threads: readonly AgentPaneThread[]): boo
|
||||
fallbackTimer = setTimeout(dropRetainedFromDiskCache, CLEAR_COMPLETED_EVICTION_FALLBACK_MS)
|
||||
toast(
|
||||
plan.clearedThreadCount === 1
|
||||
? translate('auto.components.activity.clearCompleted.clearedOne', 'Cleared 1 completed agent')
|
||||
? translate(
|
||||
'auto.components.activity.clearCompleted.cleared_one',
|
||||
'Cleared {{count}} completed agent',
|
||||
{ count: plan.clearedThreadCount }
|
||||
)
|
||||
: translate(
|
||||
'auto.components.activity.clearCompleted.clearedMany',
|
||||
'auto.components.activity.clearCompleted.cleared_other',
|
||||
'Cleared {{count}} completed agents',
|
||||
{ count: plan.clearedThreadCount }
|
||||
),
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import type { AppState } from '@/store/types'
|
||||
import { translate } from '@/i18n/i18n'
|
||||
import { findWorktreeById } from '@/store/slices/worktree-helpers'
|
||||
import type { Worktree } from '../../../../shared/worktree/types'
|
||||
import type { SshConnectionStatus } from '../../../../shared/ssh-types'
|
||||
@@ -209,18 +210,44 @@ export function getUnavailableQuickActionMessage(
|
||||
actionTitle: string,
|
||||
reason: CmdJUnavailableReason
|
||||
): string {
|
||||
// Quote the localized title instead of lowercasing it into the sentence.
|
||||
const options = { action: actionTitle }
|
||||
switch (reason) {
|
||||
case 'loading':
|
||||
return `Can't ${actionTitle.toLowerCase()} — workspace is still loading.`
|
||||
return translate(
|
||||
'auto.components.cmdJ.quickActionUnavailable.workspaceLoading',
|
||||
'Can’t run “{{action}}” — workspace is still loading.',
|
||||
options
|
||||
)
|
||||
case 'no-active-workspace':
|
||||
return `Can't ${actionTitle.toLowerCase()} — no workspace is active.`
|
||||
return translate(
|
||||
'auto.components.cmdJ.quickActionUnavailable.noActiveWorkspace',
|
||||
'Can’t run “{{action}}” — no workspace is active.',
|
||||
options
|
||||
)
|
||||
case 'ssh-disconnected':
|
||||
return `Can't ${actionTitle.toLowerCase()} — workspace is disconnected.`
|
||||
return translate(
|
||||
'auto.components.cmdJ.quickActionUnavailable.workspaceDisconnected',
|
||||
'Can’t run “{{action}}” — workspace is disconnected.',
|
||||
options
|
||||
)
|
||||
case 'no-active-group':
|
||||
return `Can't ${actionTitle.toLowerCase()} — no tab group is available.`
|
||||
return translate(
|
||||
'auto.components.cmdJ.quickActionUnavailable.noTabGroup',
|
||||
'Can’t run “{{action}}” — no tab group is available.',
|
||||
options
|
||||
)
|
||||
case 'no-active-chat':
|
||||
return `Can't ${actionTitle.toLowerCase()} — no movable chat is active.`
|
||||
return translate(
|
||||
'auto.components.cmdJ.quickActionUnavailable.noMovableChat',
|
||||
'Can’t run “{{action}}” — no movable chat is active.',
|
||||
options
|
||||
)
|
||||
case 'client-action-unsupported':
|
||||
return `Can't ${actionTitle.toLowerCase()} — this client and runtime do not support it.`
|
||||
return translate(
|
||||
'auto.components.cmdJ.quickActionUnavailable.clientUnsupported',
|
||||
'Can’t run “{{action}}” — this client and runtime do not support it.',
|
||||
options
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -64,15 +64,31 @@ export function DashboardAgentChildDisclosure({
|
||||
onKeyDown={stopKeyDown}
|
||||
data-agent-child-disclosure-button=""
|
||||
className="col-start-1 row-start-1 -mr-1.5"
|
||||
aria-label={translate(
|
||||
'auto.components.dashboard.DashboardAgentChildDisclosure.1b57ce9fa4',
|
||||
'{{value0}} {{value1}} child {{value2}}',
|
||||
{
|
||||
value0: childAgentsExpanded ? 'Hide' : 'Show',
|
||||
value1: childAgentCount,
|
||||
value2: childAgentCount === 1 ? 'agent' : 'agents'
|
||||
}
|
||||
)}
|
||||
aria-label={
|
||||
childAgentsExpanded
|
||||
? childAgentCount === 1
|
||||
? translate(
|
||||
'auto.components.dashboard.DashboardAgentChildDisclosure.hideChildAgents_one',
|
||||
'Hide {{count}} child agent',
|
||||
{ count: childAgentCount }
|
||||
)
|
||||
: translate(
|
||||
'auto.components.dashboard.DashboardAgentChildDisclosure.hideChildAgents_other',
|
||||
'Hide {{count}} child agents',
|
||||
{ count: childAgentCount }
|
||||
)
|
||||
: childAgentCount === 1
|
||||
? translate(
|
||||
'auto.components.dashboard.DashboardAgentChildDisclosure.showChildAgents_one',
|
||||
'Show {{count}} child agent',
|
||||
{ count: childAgentCount }
|
||||
)
|
||||
: translate(
|
||||
'auto.components.dashboard.DashboardAgentChildDisclosure.showChildAgents_other',
|
||||
'Show {{count}} child agents',
|
||||
{ count: childAgentCount }
|
||||
)
|
||||
}
|
||||
aria-expanded={childAgentsExpanded}
|
||||
>
|
||||
<ChevronDown
|
||||
|
||||
@@ -33,13 +33,17 @@ import {
|
||||
agentChildRowMessageLine,
|
||||
agentChildRowNoUpdateLabel
|
||||
} from '@/components/agent-child-row-text'
|
||||
import { translate } from '@/i18n/i18n'
|
||||
import { useUiLanguageRevision } from '@/i18n/use-ui-language-revision'
|
||||
|
||||
function formatTimeAgo(ts: number, now: number): string {
|
||||
const delta = now - ts
|
||||
if (delta < 60_000) {
|
||||
return 'just now'
|
||||
return translate('auto.components.dashboard.DashboardAgentRow.justNow', 'just now')
|
||||
}
|
||||
return `${formatCompactDuration(delta)} ago`
|
||||
return translate('auto.components.dashboard.DashboardAgentRow.timeAgo', '{{duration}} ago', {
|
||||
duration: formatCompactDuration(delta)
|
||||
})
|
||||
}
|
||||
|
||||
// A child row's silence is the model's, on the clock its compact row and the strip read.
|
||||
@@ -107,6 +111,7 @@ const DashboardAgentRow = React.memo(function DashboardAgentRow({
|
||||
sendTargetDisabledReason,
|
||||
onSendTargetClick
|
||||
}: Props) {
|
||||
useUiLanguageRevision()
|
||||
const view = useClaudeAgentRowView(agent)
|
||||
const highlighted = view ? view.current && view.focused : isFocusedPane
|
||||
const hasChildDisclosure =
|
||||
@@ -179,9 +184,23 @@ const DashboardAgentRow = React.memo(function DashboardAgentRow({
|
||||
const participatesInLineage = isLineageChild || lineageChildCount > 0
|
||||
const identityTitle =
|
||||
lineageChildCount > 0
|
||||
? `${formatAgentTypeLabel(agent.agentType)} - dispatched ${lineageChildCount} ${
|
||||
lineageChildCount === 1 ? 'agent' : 'agents'
|
||||
}`
|
||||
? lineageChildCount === 1
|
||||
? translate(
|
||||
'auto.components.dashboard.DashboardAgentRow.dispatchedAgents_one',
|
||||
'{{agentType}} - dispatched {{count}} agent',
|
||||
{
|
||||
agentType: formatAgentTypeLabel(agent.agentType),
|
||||
count: lineageChildCount
|
||||
}
|
||||
)
|
||||
: translate(
|
||||
'auto.components.dashboard.DashboardAgentRow.dispatchedAgents_other',
|
||||
'{{agentType}} - dispatched {{count}} agents',
|
||||
{
|
||||
agentType: formatAgentTypeLabel(agent.agentType),
|
||||
count: lineageChildCount
|
||||
}
|
||||
)
|
||||
: [formatAgentTypeLabel(agent.agentType), model].filter(Boolean).join(' · ')
|
||||
// Surface failed main-agent outcomes even while subagents continue running.
|
||||
const dotState: AgentDotState = dotStateOverride ?? agentRowDisplayDotState(agent)
|
||||
@@ -198,10 +217,18 @@ const DashboardAgentRow = React.memo(function DashboardAgentRow({
|
||||
const relativeTimestamp = noUpdateLabel ?? doneTimeAgo ?? startedTimeAgo
|
||||
const tsParts: string[] = noUpdateLabel ? [noUpdateLabel] : []
|
||||
if (startedTimeAgo !== null) {
|
||||
tsParts.push(`started ${startedTimeAgo}`)
|
||||
tsParts.push(
|
||||
translate('auto.components.dashboard.DashboardAgentRow.startedAgo', 'started {{time}}', {
|
||||
time: startedTimeAgo
|
||||
})
|
||||
)
|
||||
}
|
||||
if (doneTimeAgo !== null) {
|
||||
tsParts.push(`done ${doneTimeAgo}`)
|
||||
tsParts.push(
|
||||
translate('auto.components.dashboard.DashboardAgentRow.doneAgo', 'done {{time}}', {
|
||||
time: doneTimeAgo
|
||||
})
|
||||
)
|
||||
}
|
||||
|
||||
const titleParts = sendTargetDisabledReason ? [sendTargetDisabledReason, ...tsParts] : tsParts
|
||||
|
||||
@@ -183,8 +183,11 @@ export function NewWorkspaceComposerProjectSection({
|
||||
>
|
||||
<div className="min-w-0">
|
||||
<div className="truncate text-xs font-medium text-foreground">
|
||||
{translate('auto.components.NewWorkspaceComposerCard.b5a0796911', 'Connect')}{' '}
|
||||
{selectedProjectName}
|
||||
{translate(
|
||||
'auto.components.NewWorkspaceComposerCard.connectProject',
|
||||
'Connect {{name}}',
|
||||
{ name: selectedProjectName }
|
||||
)}
|
||||
</div>
|
||||
<div className="mt-0.5 text-[11px] text-muted-foreground">{sshStatusLabel}</div>
|
||||
</div>
|
||||
|
||||
+6
-2
@@ -5,6 +5,8 @@ import { createRoot, type Root } from 'react-dom/client'
|
||||
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
|
||||
import { useAppStore } from '@/store'
|
||||
import SmartWorkspaceNameField from './SmartWorkspaceNameField'
|
||||
import type * as ReactI18nextModule from 'react-i18next'
|
||||
import type * as I18nModule from '@/i18n/i18n'
|
||||
|
||||
vi.mock('@/store', () => {
|
||||
const state = {
|
||||
@@ -36,11 +38,13 @@ vi.mock('@/lib/local-preflight-context', () => ({
|
||||
localPreflightContextKey: () => 'test-preflight-context'
|
||||
}))
|
||||
|
||||
vi.mock('react-i18next', () => ({
|
||||
vi.mock('react-i18next', async (importOriginal) => ({
|
||||
...(await importOriginal<typeof ReactI18nextModule>()),
|
||||
useTranslation: () => ({ t: (key: string, fallback?: string) => fallback ?? key })
|
||||
}))
|
||||
|
||||
vi.mock('@/i18n/i18n', () => ({
|
||||
vi.mock('@/i18n/i18n', async (importOriginal) => ({
|
||||
...(await importOriginal<typeof I18nModule>()),
|
||||
translate: (_key: string, fallback: string) => fallback
|
||||
}))
|
||||
|
||||
|
||||
+6
-2
@@ -6,6 +6,8 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
|
||||
import type { JiraIssue } from '../../../../shared/jira/jira-types'
|
||||
import SmartWorkspaceNameField from './SmartWorkspaceNameField'
|
||||
import type { SmartWorkspaceNameSelection } from './smart-workspace-name-field-model'
|
||||
import type * as ReactI18nextModule from 'react-i18next'
|
||||
import type * as I18nModule from '@/i18n/i18n'
|
||||
|
||||
const jiraMock = vi.hoisted(() => ({
|
||||
retry: vi.fn(),
|
||||
@@ -90,11 +92,13 @@ vi.mock('@/lib/local-preflight-context', () => ({
|
||||
localPreflightContextKey: () => 'test-preflight-context'
|
||||
}))
|
||||
|
||||
vi.mock('react-i18next', () => ({
|
||||
vi.mock('react-i18next', async (importOriginal) => ({
|
||||
...(await importOriginal<typeof ReactI18nextModule>()),
|
||||
useTranslation: () => ({ t: (key: string, fallback?: string) => fallback ?? key })
|
||||
}))
|
||||
|
||||
vi.mock('@/i18n/i18n', () => ({
|
||||
vi.mock('@/i18n/i18n', async (importOriginal) => ({
|
||||
...(await importOriginal<typeof I18nModule>()),
|
||||
translate: (_key: string, fallback: string) => fallback
|
||||
}))
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import type { NewWorkspaceProjectOption } from '@/lib/new-workspace-project-options'
|
||||
import { isNewWorkspaceProjectOptionQueryTooLarge } from '@/lib/new-workspace-project-options'
|
||||
import { translate } from '@/i18n/i18n'
|
||||
|
||||
export type ScoredProjectOption = {
|
||||
option: NewWorkspaceProjectOption
|
||||
@@ -105,15 +106,22 @@ export function sectionProjectOptions(
|
||||
recentSet.has(id) ? matches.filter((m) => m.option.id === id) : []
|
||||
)
|
||||
const sections: ProjectOptionSection[] = [
|
||||
{ key: 'recent', heading: 'Recent', items: recent },
|
||||
{
|
||||
key: 'recent',
|
||||
heading: translate('auto.components.new.workspace.projectCombobox.recentHeading', 'Recent'),
|
||||
items: recent
|
||||
},
|
||||
{
|
||||
key: 'projects',
|
||||
heading: 'Projects',
|
||||
heading: translate(
|
||||
'auto.components.new.workspace.projectCombobox.projectsHeading',
|
||||
'Projects'
|
||||
),
|
||||
items: matches.filter((m) => m.option.kind === 'project' && !recentSet.has(m.option.id))
|
||||
},
|
||||
{
|
||||
key: 'folders',
|
||||
heading: 'Folders',
|
||||
heading: translate('auto.components.new.workspace.projectCombobox.foldersHeading', 'Folders'),
|
||||
// Exclude recent rows from folders too; duplicate options would desynchronize arming/rendering.
|
||||
items: matches.filter((m) => m.option.kind === 'project-group' && !recentSet.has(m.option.id))
|
||||
}
|
||||
|
||||
@@ -18,7 +18,7 @@ export function renderSmartWorkspaceCrossRepoDialog(
|
||||
crossRepoPrompt,
|
||||
dismissCrossRepoPrompt,
|
||||
crossRepoSwitchTitle,
|
||||
crossRepoSwitchDescriptionSuffix,
|
||||
formatCrossRepoSwitchDescription,
|
||||
selectedRepo,
|
||||
crossRepoSwitchFallbackLabel,
|
||||
handleUseCurrentRepo,
|
||||
@@ -36,12 +36,9 @@ export function renderSmartWorkspaceCrossRepoDialog(
|
||||
<DialogHeader className="min-w-0">
|
||||
<DialogTitle>{crossRepoSwitchTitle}</DialogTitle>
|
||||
<DialogDescription className="break-words">
|
||||
{translate(
|
||||
'auto.components.new.workspace.SmartWorkspaceNameField.ad188067ae',
|
||||
'The GitHub URL points to'
|
||||
)}{' '}
|
||||
{crossRepoPrompt?.link.slug.owner}/{crossRepoPrompt?.link.slug.repo}
|
||||
{crossRepoSwitchDescriptionSuffix}
|
||||
{formatCrossRepoSwitchDescription(
|
||||
`${crossRepoPrompt?.link.slug.owner ?? ''}/${crossRepoPrompt?.link.slug.repo ?? ''}`
|
||||
)}
|
||||
</DialogDescription>
|
||||
</DialogHeader>
|
||||
<DialogFooter className="min-w-0 sm:flex-wrap">
|
||||
@@ -58,10 +55,10 @@ export function renderSmartWorkspaceCrossRepoDialog(
|
||||
>
|
||||
<span className="min-w-0 truncate">
|
||||
{translate(
|
||||
'auto.components.new.workspace.SmartWorkspaceNameField.eadf877af5',
|
||||
'Keep'
|
||||
)}{' '}
|
||||
{selectedRepo?.displayName ?? crossRepoSwitchFallbackLabel}
|
||||
'auto.components.new.workspace.SmartWorkspaceNameField.keepRepo',
|
||||
'Keep {{name}}',
|
||||
{ name: selectedRepo?.displayName ?? crossRepoSwitchFallbackLabel }
|
||||
)}
|
||||
</span>
|
||||
</Button>
|
||||
{crossRepoPrompt?.matchingRepo ? (
|
||||
@@ -71,10 +68,10 @@ export function renderSmartWorkspaceCrossRepoDialog(
|
||||
>
|
||||
<span className="min-w-0 truncate">
|
||||
{translate(
|
||||
'auto.components.new.workspace.SmartWorkspaceNameField.a76fcb4fa0',
|
||||
'Switch to'
|
||||
)}{' '}
|
||||
{crossRepoPrompt.matchingRepo.displayName}
|
||||
'auto.components.new.workspace.SmartWorkspaceNameField.switchToRepo',
|
||||
'Switch to {{name}}',
|
||||
{ name: crossRepoPrompt.matchingRepo.displayName }
|
||||
)}
|
||||
</span>
|
||||
</Button>
|
||||
) : allowCrossRepoProjectAdd ? (
|
||||
|
||||
@@ -57,15 +57,18 @@ export function getSmartWorkspaceNameFieldCopy({
|
||||
'auto.components.new.workspace.SmartWorkspaceNameField.4bd98f1091',
|
||||
'Switch project?'
|
||||
)
|
||||
const crossRepoSwitchDescriptionSuffix = crossRepoSwitchIsTaskSource
|
||||
? translate(
|
||||
'auto.components.new.workspace.SmartWorkspaceNameField.differentTaskSource',
|
||||
', which is different from the selected task source.'
|
||||
)
|
||||
: translate(
|
||||
'auto.components.new.workspace.SmartWorkspaceNameField.9ef1a7c4b0',
|
||||
', which is different from the selected project.'
|
||||
)
|
||||
const formatCrossRepoSwitchDescription = (repoSlug: string): string =>
|
||||
crossRepoSwitchIsTaskSource
|
||||
? translate(
|
||||
'auto.components.new.workspace.SmartWorkspaceNameField.crossRepoDifferentTaskSource',
|
||||
'The GitHub URL points to {{repo}}, which is different from the selected task source.',
|
||||
{ repo: repoSlug }
|
||||
)
|
||||
: translate(
|
||||
'auto.components.new.workspace.SmartWorkspaceNameField.crossRepoDifferentProject',
|
||||
'The GitHub URL points to {{repo}}, which is different from the selected project.',
|
||||
{ repo: repoSlug }
|
||||
)
|
||||
const crossRepoSwitchFallbackLabel = crossRepoSwitchIsTaskSource
|
||||
? translate(
|
||||
'auto.components.new.workspace.SmartWorkspaceNameField.currentTaskSource',
|
||||
@@ -112,7 +115,7 @@ export function getSmartWorkspaceNameFieldCopy({
|
||||
|
||||
return {
|
||||
crossRepoSwitchTitle,
|
||||
crossRepoSwitchDescriptionSuffix,
|
||||
formatCrossRepoSwitchDescription,
|
||||
crossRepoSwitchFallbackLabel,
|
||||
placeholder
|
||||
}
|
||||
|
||||
@@ -10,7 +10,8 @@ import {
|
||||
import { LinearIcon } from '@/components/icons/LinearIcon'
|
||||
import { JiraIcon } from '@/components/icons/JiraIcon'
|
||||
import { cn } from '@/lib/utils'
|
||||
import { translate } from '@/i18n/i18n'
|
||||
import { Trans } from 'react-i18next'
|
||||
import { i18n, translate } from '@/i18n/i18n'
|
||||
import type { JiraSite } from '../../../../shared/jira/jira-types'
|
||||
import type { RowEntry, SmartWorkspaceNameSelection } from './smart-workspace-name-field-model'
|
||||
|
||||
@@ -92,27 +93,32 @@ export function RowLabel({
|
||||
if (row.kind === 'use-name') {
|
||||
return (
|
||||
<span className="min-w-0 truncate">
|
||||
{translate('auto.components.new.workspace.SmartWorkspaceNameField.b1a7d679ba', 'Use')}{' '}
|
||||
<span className="font-medium text-foreground">
|
||||
{translate('auto.components.new.workspace.SmartWorkspaceNameField.34ca97bce3', '"')}
|
||||
{row.name}
|
||||
{translate('auto.components.new.workspace.SmartWorkspaceNameField.766083a596', '"')}
|
||||
</span>{' '}
|
||||
{translate(
|
||||
'auto.components.new.workspace.SmartWorkspaceNameField.a44229ce4d',
|
||||
'as workspace name'
|
||||
)}
|
||||
<Trans
|
||||
i18n={i18n}
|
||||
defaults={translate(
|
||||
'auto.components.new.workspace.SmartWorkspaceNameField.useAsWorkspaceName',
|
||||
'Use <name>"{{name}}"</name> as workspace name'
|
||||
)}
|
||||
values={{ name: row.name }}
|
||||
components={{ name: <span className="font-medium text-foreground" /> }}
|
||||
/>
|
||||
</span>
|
||||
)
|
||||
}
|
||||
if (row.kind === 'create-branch') {
|
||||
return (
|
||||
<span className="min-w-0 truncate">
|
||||
{translate(
|
||||
'auto.components.new.workspace.SmartWorkspaceNameField.2a0d535f69',
|
||||
'Create new branch'
|
||||
)}{' '}
|
||||
<span className="font-mono text-[11px] font-medium text-foreground">{row.name}</span>
|
||||
<Trans
|
||||
i18n={i18n}
|
||||
defaults={translate(
|
||||
'auto.components.new.workspace.SmartWorkspaceNameField.createNewBranchNamed',
|
||||
'Create new branch <name>{{name}}</name>'
|
||||
)}
|
||||
values={{ name: row.name }}
|
||||
components={{
|
||||
name: <span className="font-mono text-[11px] font-medium text-foreground" />
|
||||
}}
|
||||
/>
|
||||
</span>
|
||||
)
|
||||
}
|
||||
|
||||
@@ -60,22 +60,18 @@ export function AddRepoNestedImportStep({
|
||||
setPendingImportMode('folder')
|
||||
onOpenAsFolder()
|
||||
}
|
||||
const repoCountLabel =
|
||||
const foundSentence =
|
||||
scan.repos.length === 1
|
||||
? translate('auto.components.sidebar.AddRepoNestedImportStep.8401a7a0d0', '1 repository')
|
||||
? translate(
|
||||
'auto.components.sidebar.AddRepoNestedImportStep.foundRepositories_one',
|
||||
'Found {{count}} repository in {{path}}.',
|
||||
{ count: scan.repos.length, path: scan.selectedPath }
|
||||
)
|
||||
: translate(
|
||||
'auto.components.sidebar.AddRepoNestedImportStep.d4f1df62ef',
|
||||
'{{value0}} repositories',
|
||||
{ value0: scan.repos.length }
|
||||
'auto.components.sidebar.AddRepoNestedImportStep.foundRepositories_other',
|
||||
'Found {{count}} repositories in {{path}}.',
|
||||
{ count: scan.repos.length, path: scan.selectedPath }
|
||||
)
|
||||
const foundSentence = translate(
|
||||
'auto.components.sidebar.AddRepoNestedImportStep.b4263a2ac4',
|
||||
'Found {{value0}} in {{value1}}.',
|
||||
{
|
||||
value0: repoCountLabel,
|
||||
value1: scan.selectedPath
|
||||
}
|
||||
)
|
||||
|
||||
return (
|
||||
<>
|
||||
|
||||
@@ -8,7 +8,8 @@ import {
|
||||
DialogTitle
|
||||
} from '@/components/ui/dialog'
|
||||
import { Button } from '@/components/ui/button'
|
||||
import { translate } from '@/i18n/i18n'
|
||||
import { Trans } from 'react-i18next'
|
||||
import { i18n, translate } from '@/i18n/i18n'
|
||||
|
||||
type AutoRenameFailedDialogProps = {
|
||||
open: boolean
|
||||
@@ -36,17 +37,15 @@ export function AutoRenameFailedDialog({
|
||||
'Branch auto-name failed'
|
||||
)}
|
||||
description={
|
||||
<>
|
||||
{translate(
|
||||
'auto.components.sidebar.AutoRenameFailedDialog.ff62a18580',
|
||||
"Orca couldn't generate a branch name for"
|
||||
)}{' '}
|
||||
<span className="font-medium text-foreground">{worktreeName}</span>{' '}
|
||||
{translate(
|
||||
'auto.components.sidebar.AutoRenameFailedDialog.3afcad0497',
|
||||
'from the first agent message.'
|
||||
<Trans
|
||||
i18n={i18n}
|
||||
defaults={translate(
|
||||
'auto.components.sidebar.AutoRenameFailedDialog.couldNotGenerateBranchName',
|
||||
"Orca couldn't generate a branch name for <name>{{name}}</name> from the first agent message."
|
||||
)}
|
||||
</>
|
||||
values={{ name: worktreeName }}
|
||||
components={{ name: <span className="font-medium text-foreground" /> }}
|
||||
/>
|
||||
}
|
||||
readFullOutput={readFullOutput}
|
||||
/>
|
||||
|
||||
@@ -62,7 +62,12 @@ export function DeleteNestedWorktreesDialog({
|
||||
try {
|
||||
const preview = window.api.worktrees.previewNestedRemoval
|
||||
if (!preview) {
|
||||
throw new Error('This host does not support nested worktree deletion.')
|
||||
throw new Error(
|
||||
translate(
|
||||
'auto.components.sidebar.DeleteNestedWorktreesDialog.unsupportedHost',
|
||||
'This host does not support nested worktree deletion.'
|
||||
)
|
||||
)
|
||||
}
|
||||
const result = await preview({
|
||||
worktreeId: target.id,
|
||||
|
||||
@@ -157,11 +157,17 @@ export function DeleteWorktreeDirtyChangeHint({
|
||||
</div>
|
||||
{preview.remainingPathCount > 0 ? (
|
||||
<p className="mt-1 text-muted-foreground">
|
||||
{translate(
|
||||
'auto.components.sidebar.DeleteWorktreeDirtyChangeHint.moreLoadedPaths',
|
||||
'and {{value0}} more loaded paths',
|
||||
{ value0: preview.remainingPathCount }
|
||||
)}
|
||||
{preview.remainingPathCount === 1
|
||||
? translate(
|
||||
'auto.components.sidebar.DeleteWorktreeDirtyChangeHint.moreLoadedPaths_one',
|
||||
'and {{count}} more loaded path',
|
||||
{ count: preview.remainingPathCount }
|
||||
)
|
||||
: translate(
|
||||
'auto.components.sidebar.DeleteWorktreeDirtyChangeHint.moreLoadedPaths_other',
|
||||
'and {{count}} more loaded paths',
|
||||
{ count: preview.remainingPathCount }
|
||||
)}
|
||||
</p>
|
||||
) : null}
|
||||
</div>
|
||||
|
||||
@@ -72,13 +72,14 @@ export function DeleteWorktreeLineageNotice({
|
||||
<div className="mt-1 text-muted-foreground">
|
||||
{childWorkspaceCount === 1
|
||||
? translate(
|
||||
'auto.components.sidebar.DeleteWorktreeLineageNotice.66798cc6a2',
|
||||
'Deleting this workspace also deletes 1 child workspace.'
|
||||
'auto.components.sidebar.DeleteWorktreeLineageNotice.alsoDeletesChildren_one',
|
||||
'Deleting this workspace also deletes {{count}} child workspace.',
|
||||
{ count: childWorkspaceCount }
|
||||
)
|
||||
: translate(
|
||||
'auto.components.sidebar.DeleteWorktreeLineageNotice.29b98bf9cd',
|
||||
'Deleting this workspace also deletes {{value0}} child workspaces.',
|
||||
{ value0: childWorkspaceCount }
|
||||
'auto.components.sidebar.DeleteWorktreeLineageNotice.alsoDeletesChildren_other',
|
||||
'Deleting this workspace also deletes {{count}} child workspaces.',
|
||||
{ count: childWorkspaceCount }
|
||||
)}
|
||||
{foreignProjects.length > 0 ? ` (${foreignProjects.join(', ')})` : null}
|
||||
</div>
|
||||
@@ -108,11 +109,17 @@ export function DeleteWorktreeLineageNotice({
|
||||
))}
|
||||
{descendants.length > 4 ? (
|
||||
<div className="text-muted-foreground">
|
||||
+{descendants.length - 4}{' '}
|
||||
{translate(
|
||||
'auto.components.sidebar.DeleteWorktreeLineageNotice.ad407c2d55',
|
||||
'more'
|
||||
)}
|
||||
{descendants.length - 4 === 1
|
||||
? translate(
|
||||
'auto.components.sidebar.DeleteWorktreeLineageNotice.moreChildren_one',
|
||||
'+{{count}} more',
|
||||
{ count: descendants.length - 4 }
|
||||
)
|
||||
: translate(
|
||||
'auto.components.sidebar.DeleteWorktreeLineageNotice.moreChildren_other',
|
||||
'+{{count}} more',
|
||||
{ count: descendants.length - 4 }
|
||||
)}
|
||||
</div>
|
||||
) : null}
|
||||
</div>
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import type { JSX } from 'react'
|
||||
import { AlertTriangle } from 'lucide-react'
|
||||
import { translate } from '@/i18n/i18n'
|
||||
import { Trans } from 'react-i18next'
|
||||
import { i18n, translate } from '@/i18n/i18n'
|
||||
|
||||
export function DeleteWorktreeWarningPanels({
|
||||
isMainWorktree,
|
||||
@@ -18,20 +19,14 @@ export function DeleteWorktreeWarningPanels({
|
||||
<div className="flex items-start gap-2">
|
||||
<AlertTriangle className="mt-0.5 size-3.5 shrink-0" />
|
||||
<div className="min-w-0 flex-1">
|
||||
{translate(
|
||||
'auto.components.sidebar.DeleteWorktreeWarningPanels.e3be9eba15',
|
||||
'This is the'
|
||||
)}{' '}
|
||||
<span className="font-semibold text-foreground">
|
||||
{translate(
|
||||
'auto.components.sidebar.DeleteWorktreeWarningPanels.c4f96a6e18',
|
||||
'main worktree'
|
||||
<Trans
|
||||
i18n={i18n}
|
||||
defaults={translate(
|
||||
'auto.components.sidebar.DeleteWorktreeWarningPanels.mainWorktreeNotice',
|
||||
'This is the <strong>main worktree</strong> (the original clone directory).'
|
||||
)}
|
||||
</span>{' '}
|
||||
{translate(
|
||||
'auto.components.sidebar.DeleteWorktreeWarningPanels.026738155a',
|
||||
'(the original clone directory).'
|
||||
)}
|
||||
components={{ strong: <span className="font-semibold text-foreground" /> }}
|
||||
/>
|
||||
{mainWorktreeBlocker ? <> {mainWorktreeBlocker}</> : null}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -84,11 +84,19 @@ export default function HiddenWorktreeRecoveryList({
|
||||
'auto.components.sidebar.WorktreeVisibilityDialog.search',
|
||||
'Search hidden worktrees'
|
||||
)}
|
||||
placeholder={translate(
|
||||
'auto.components.sidebar.WorktreeVisibilityDialog.searchPlaceholder',
|
||||
'Search {{value0}} worktrees…',
|
||||
{ value0: hidden.length }
|
||||
)}
|
||||
placeholder={
|
||||
hidden.length === 1
|
||||
? translate(
|
||||
'auto.components.sidebar.WorktreeVisibilityDialog.searchHiddenPlaceholder_one',
|
||||
'Search {{count}} worktree…',
|
||||
{ count: hidden.length }
|
||||
)
|
||||
: translate(
|
||||
'auto.components.sidebar.WorktreeVisibilityDialog.searchHiddenPlaceholder_other',
|
||||
'Search {{count}} worktrees…',
|
||||
{ count: hidden.length }
|
||||
)
|
||||
}
|
||||
onChange={(event) => setQuery(event.target.value)}
|
||||
/>
|
||||
</div>
|
||||
|
||||
@@ -164,17 +164,6 @@ export function HostRemoveDialog({
|
||||
}
|
||||
}
|
||||
|
||||
const workspaceCountLabel =
|
||||
workspaceCount === 1
|
||||
? translate('auto.components.sidebar.HostRemoveDialog.oneWorkspace', '1 workspace')
|
||||
: translate(
|
||||
'auto.components.sidebar.HostRemoveDialog.manyWorkspaces',
|
||||
'{{count}} workspaces',
|
||||
{
|
||||
count: workspaceCount
|
||||
}
|
||||
)
|
||||
|
||||
const description =
|
||||
target.kind === 'wsl'
|
||||
? translate(
|
||||
@@ -188,21 +177,34 @@ export function HostRemoveDialog({
|
||||
'This opens the Orca servers settings where you can remove this server.'
|
||||
)
|
||||
: hasWorkspaces
|
||||
? translate(
|
||||
'auto.components.sidebar.HostRemoveDialog.hostHasWorkspacesDefault',
|
||||
'Removes {{value0}} and its credentials from this computer. Its {{value1}} stay in Orca — remote files are not touched.',
|
||||
{ value0: label, value1: workspaceCountLabel }
|
||||
)
|
||||
? workspaceCount === 1
|
||||
? translate(
|
||||
'auto.components.sidebar.HostRemoveDialog.hostKeepsWorkspaces_one',
|
||||
'Removes {{host}} and its credentials from this computer. Its {{count}} workspace stays in Orca — remote files are not touched.',
|
||||
{ host: label, count: workspaceCount }
|
||||
)
|
||||
: translate(
|
||||
'auto.components.sidebar.HostRemoveDialog.hostKeepsWorkspaces_other',
|
||||
'Removes {{host}} and its credentials from this computer. Its {{count}} workspaces stay in Orca — remote files are not touched.',
|
||||
{ host: label, count: workspaceCount }
|
||||
)
|
||||
: translate(
|
||||
'auto.components.sidebar.HostRemoveDialog.5e6f7a8b9c',
|
||||
'This removes the saved SSH host and its credentials from this computer. Remote files are not deleted.'
|
||||
)
|
||||
|
||||
const deleteOptionLabel = translate(
|
||||
'auto.components.sidebar.HostRemoveDialog.alsoForgetLocal',
|
||||
'Also remove these {{value0}} from Orca',
|
||||
{ value0: workspaceCountLabel }
|
||||
)
|
||||
const deleteOptionLabel =
|
||||
workspaceCount === 1
|
||||
? translate(
|
||||
'auto.components.sidebar.HostRemoveDialog.alsoRemoveWorkspaces_one',
|
||||
'Also remove this workspace from Orca',
|
||||
{ count: workspaceCount }
|
||||
)
|
||||
: translate(
|
||||
'auto.components.sidebar.HostRemoveDialog.alsoRemoveWorkspaces_other',
|
||||
'Also remove these {{count}} workspaces from Orca',
|
||||
{ count: workspaceCount }
|
||||
)
|
||||
|
||||
return (
|
||||
<Dialog open={open} onOpenChange={onOpenChange}>
|
||||
|
||||
@@ -312,11 +312,17 @@ export default function ImportedWorktreesVisibilityLine({
|
||||
))}
|
||||
{remainingGroupCount > 0 ? (
|
||||
<div className="py-1 pl-7 pr-2 text-[11px] leading-4 text-muted-foreground">
|
||||
+ {remainingGroupCount}{' '}
|
||||
{translate(
|
||||
'auto.components.sidebar.ImportedWorktreesVisibilityLine.b2bc47c080',
|
||||
'more locations'
|
||||
)}
|
||||
{remainingGroupCount === 1
|
||||
? translate(
|
||||
'auto.components.sidebar.ImportedWorktreesVisibilityLine.moreLocations_one',
|
||||
'+ {{count}} more location',
|
||||
{ count: remainingGroupCount }
|
||||
)
|
||||
: translate(
|
||||
'auto.components.sidebar.ImportedWorktreesVisibilityLine.moreLocations_other',
|
||||
'+ {{count}} more locations',
|
||||
{ count: remainingGroupCount }
|
||||
)}
|
||||
</div>
|
||||
) : null}
|
||||
<div className="grid gap-1 px-1.5 pb-1 pt-1">
|
||||
|
||||
@@ -98,11 +98,17 @@ export function LocalGitToolchainScanBanner(): React.JSX.Element | null {
|
||||
'Worktree scan paused for {{value0}}',
|
||||
{ value0: block.repos[0].displayName }
|
||||
)
|
||||
: translate(
|
||||
'auto.components.sidebar.LocalGitToolchainScanBanner.affectedMany',
|
||||
'Worktree scan paused for {{value0}} projects',
|
||||
{ value0: block.repos.length }
|
||||
)
|
||||
: block.repos.length === 1
|
||||
? translate(
|
||||
'auto.components.sidebar.LocalGitToolchainScanBanner.affectedProjects_one',
|
||||
'Worktree scan paused for {{count}} project',
|
||||
{ count: block.repos.length }
|
||||
)
|
||||
: translate(
|
||||
'auto.components.sidebar.LocalGitToolchainScanBanner.affectedProjects_other',
|
||||
'Worktree scan paused for {{count}} projects',
|
||||
{ count: block.repos.length }
|
||||
)
|
||||
|
||||
return (
|
||||
<section
|
||||
|
||||
@@ -50,25 +50,28 @@ export default function NewExternalWorktreesInboxLine({
|
||||
{ value0: repoScopeLabel }
|
||||
)
|
||||
const isSingular = inboxCount === 1
|
||||
// The count renders in its own badge; `count` still selects the noun's plural form.
|
||||
const countLabel = isSingular
|
||||
? translate(
|
||||
'auto.components.sidebar.NewExternalWorktreesInboxLine.2a6f31d8c7',
|
||||
'hidden worktree'
|
||||
'auto.components.sidebar.NewExternalWorktreesInboxLine.hiddenWorktreesNoun_one',
|
||||
'hidden worktree',
|
||||
{ count: inboxCount }
|
||||
)
|
||||
: translate(
|
||||
'auto.components.sidebar.NewExternalWorktreesInboxLine.5b90e4a2f6',
|
||||
'hidden worktrees'
|
||||
'auto.components.sidebar.NewExternalWorktreesInboxLine.hiddenWorktreesNoun_other',
|
||||
'hidden worktrees',
|
||||
{ count: inboxCount }
|
||||
)
|
||||
const reviewAriaLabel = isSingular
|
||||
? translate(
|
||||
'auto.components.sidebar.NewExternalWorktreesInboxLine.7f18c5b0d3',
|
||||
'Review {{value0}} hidden worktree in {{value1}}',
|
||||
{ value0: inboxCount, value1: repoScopeLabel }
|
||||
'auto.components.sidebar.NewExternalWorktreesInboxLine.reviewHiddenWorktrees_one',
|
||||
'Review {{count}} hidden worktree in {{scope}}',
|
||||
{ count: inboxCount, scope: repoScopeLabel }
|
||||
)
|
||||
: translate(
|
||||
'auto.components.sidebar.NewExternalWorktreesInboxLine.4e2b7a9c05',
|
||||
'Review {{value0}} hidden worktrees in {{value1}}',
|
||||
{ value0: inboxCount, value1: repoScopeLabel }
|
||||
'auto.components.sidebar.NewExternalWorktreesInboxLine.reviewHiddenWorktrees_other',
|
||||
'Review {{count}} hidden worktrees in {{scope}}',
|
||||
{ count: inboxCount, scope: repoScopeLabel }
|
||||
)
|
||||
|
||||
if (inboxCount === 0) {
|
||||
|
||||
@@ -10,7 +10,8 @@ import {
|
||||
import { Button } from '@/components/ui/button'
|
||||
import { Checkbox } from '@/components/ui/checkbox'
|
||||
import { Label } from '@/components/ui/label'
|
||||
import { translate } from '@/i18n/i18n'
|
||||
import { Trans } from 'react-i18next'
|
||||
import { i18n, translate } from '@/i18n/i18n'
|
||||
import type { WorktreePurgeTarget } from '@/store/slices/worktree-helpers'
|
||||
import { RemovalUnsavedFilesNotice } from './RemovalUnsavedFilesNotice'
|
||||
|
||||
@@ -48,13 +49,14 @@ export function ProjectGroupDeleteDialog({
|
||||
const removeContainedProjectCopy =
|
||||
projectCount === 1
|
||||
? translate(
|
||||
'auto.components.sidebar.ProjectGroupDeleteDialog.removeContainedProjectSingular',
|
||||
'Remove 1 contained project'
|
||||
'auto.components.sidebar.ProjectGroupDeleteDialog.removeContainedProjects_one',
|
||||
'Remove {{count}} contained project',
|
||||
{ count: projectCount }
|
||||
)
|
||||
: translate(
|
||||
'auto.components.sidebar.ProjectGroupDeleteDialog.removeContainedProjectPlural',
|
||||
'Remove {{value0}} contained projects',
|
||||
{ value0: projectCount }
|
||||
'auto.components.sidebar.ProjectGroupDeleteDialog.removeContainedProjects_other',
|
||||
'Remove {{count}} contained projects',
|
||||
{ count: projectCount }
|
||||
)
|
||||
|
||||
const handleDialogContentRef = useCallback((node: HTMLDivElement | null): void => {
|
||||
@@ -120,8 +122,15 @@ export function ProjectGroupDeleteDialog({
|
||||
)}
|
||||
</DialogTitle>
|
||||
<DialogDescription className="text-xs">
|
||||
{translate('auto.components.sidebar.ProjectGroupDeleteDialog.69f5cb97d0', 'Delete')}{' '}
|
||||
<span className="break-all font-medium text-foreground">{groupName}</span>.
|
||||
<Trans
|
||||
i18n={i18n}
|
||||
defaults={translate(
|
||||
'auto.components.sidebar.ProjectGroupDeleteDialog.deleteGroupDescription',
|
||||
'Delete <name>{{name}}</name>.'
|
||||
)}
|
||||
values={{ name: groupName }}
|
||||
components={{ name: <span className="break-all font-medium text-foreground" /> }}
|
||||
/>
|
||||
</DialogDescription>
|
||||
</DialogHeader>
|
||||
{projectCount > 0 && (
|
||||
@@ -148,11 +157,17 @@ export function ProjectGroupDeleteDialog({
|
||||
))}
|
||||
{projectNames.length > 4 ? (
|
||||
<li className="text-muted-foreground">
|
||||
+{projectNames.length - 4}{' '}
|
||||
{translate(
|
||||
'auto.components.sidebar.ProjectGroupDeleteDialog.ad407c2d55',
|
||||
'more'
|
||||
)}
|
||||
{projectNames.length - 4 === 1
|
||||
? translate(
|
||||
'auto.components.sidebar.ProjectGroupDeleteDialog.moreProjects_one',
|
||||
'+{{count}} more',
|
||||
{ count: projectNames.length - 4 }
|
||||
)
|
||||
: translate(
|
||||
'auto.components.sidebar.ProjectGroupDeleteDialog.moreProjects_other',
|
||||
'+{{count}} more',
|
||||
{ count: projectNames.length - 4 }
|
||||
)}
|
||||
</li>
|
||||
) : null}
|
||||
</ul>
|
||||
|
||||
@@ -3,7 +3,8 @@ import { Check, Download, LoaderCircle, PackageCheck, RefreshCw, Settings, X } f
|
||||
import { Button } from '@/components/ui/button'
|
||||
import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip'
|
||||
import { cn } from '@/lib/utils'
|
||||
import { translate } from '@/i18n/i18n'
|
||||
import { Trans } from 'react-i18next'
|
||||
import { i18n, translate } from '@/i18n/i18n'
|
||||
import { getDetectedSetupScriptTextareaRows } from '@/lib/script-textarea-rows'
|
||||
|
||||
type DismissButtonProps = {
|
||||
@@ -68,11 +69,15 @@ export function DetectedSetupPreview({
|
||||
/>
|
||||
{provenance ? (
|
||||
<p className="mt-1.5 text-[11px] text-muted-foreground">
|
||||
{translate(
|
||||
'auto.components.sidebar.SetupScriptPromptCardViews.d02e6a42b1',
|
||||
'Detected from'
|
||||
)}{' '}
|
||||
<code className="rounded bg-muted px-1 py-0.5">{provenance}</code>
|
||||
<Trans
|
||||
i18n={i18n}
|
||||
defaults={translate(
|
||||
'auto.components.sidebar.SetupScriptPromptCardViews.detectedFromSource',
|
||||
'Detected from <source>{{source}}</source>'
|
||||
)}
|
||||
values={{ source: provenance }}
|
||||
components={{ source: <code className="rounded bg-muted px-1 py-0.5" /> }}
|
||||
/>
|
||||
</p>
|
||||
) : null}
|
||||
</div>
|
||||
@@ -153,19 +158,14 @@ export function SetupScriptPromptBody({
|
||||
}
|
||||
if (sharedSetupIgnored) {
|
||||
return (
|
||||
<>
|
||||
{translate(
|
||||
'auto.components.sidebar.SetupScriptPromptCardViews.bb879db364',
|
||||
'This repo ignores shared'
|
||||
)}{' '}
|
||||
<code>
|
||||
{translate('auto.components.sidebar.SetupScriptPromptCardViews.8f6be51aa1', 'orca.yaml')}
|
||||
</code>{' '}
|
||||
{translate(
|
||||
'auto.components.sidebar.SetupScriptPromptCardViews.660cdc17f8',
|
||||
'setup scripts. Add a local command, or change the source in Settings.'
|
||||
<Trans
|
||||
i18n={i18n}
|
||||
defaults={translate(
|
||||
'auto.components.sidebar.SetupScriptPromptCardViews.ignoresSharedSetup',
|
||||
'This repo ignores shared <yaml>orca.yaml</yaml> setup scripts. Add a local command, or change the source in Settings.'
|
||||
)}
|
||||
</>
|
||||
components={{ yaml: <code /> }}
|
||||
/>
|
||||
)
|
||||
}
|
||||
if (isPackageManagerSuggestion) {
|
||||
@@ -180,17 +180,15 @@ export function SetupScriptPromptBody({
|
||||
}
|
||||
if (candidateSource) {
|
||||
return (
|
||||
<>
|
||||
{translate(
|
||||
'auto.components.sidebar.SetupScriptPromptCardViews.b56d1322f7',
|
||||
'Found a setup command in'
|
||||
)}{' '}
|
||||
<span className="break-words">{candidateSource}</span>
|
||||
{translate(
|
||||
'auto.components.sidebar.SetupScriptPromptCardViews.8349e3fa4c',
|
||||
'. Save it to run for new worktrees.'
|
||||
<Trans
|
||||
i18n={i18n}
|
||||
defaults={translate(
|
||||
'auto.components.sidebar.SetupScriptPromptCardViews.foundSetupCommandIn',
|
||||
'Found a setup command in <source>{{source}}</source>. Save it to run for new worktrees.'
|
||||
)}
|
||||
</>
|
||||
values={{ source: candidateSource }}
|
||||
components={{ source: <span className="break-words" /> }}
|
||||
/>
|
||||
)
|
||||
}
|
||||
return (
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import React from 'react'
|
||||
import { toast } from 'sonner'
|
||||
import { translate } from '@/i18n/i18n'
|
||||
import { Trans } from 'react-i18next'
|
||||
import { i18n, translate } from '@/i18n/i18n'
|
||||
|
||||
type SavedInProjectSettingsToastProps = {
|
||||
onOpenSettings: () => void
|
||||
@@ -11,17 +12,22 @@ function SavedInProjectSettingsToast({
|
||||
}: SavedInProjectSettingsToastProps): React.JSX.Element {
|
||||
return (
|
||||
<span>
|
||||
{translate('auto.components.sidebar.SetupScriptPromptCard.a5bb8c5135', 'Saved in this')}{' '}
|
||||
<button
|
||||
type="button"
|
||||
className="rounded-sm font-medium underline underline-offset-2 hover:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring"
|
||||
onClick={onOpenSettings}
|
||||
>
|
||||
{translate(
|
||||
'auto.components.sidebar.SetupScriptPromptCard.d9f2db2738',
|
||||
"project's settings"
|
||||
<Trans
|
||||
i18n={i18n}
|
||||
defaults={translate(
|
||||
'auto.components.sidebar.SetupScriptPromptCard.savedInProjectSettings',
|
||||
"Saved in this <settings>project's settings</settings>"
|
||||
)}
|
||||
</button>
|
||||
components={{
|
||||
settings: (
|
||||
<button
|
||||
type="button"
|
||||
className="rounded-sm font-medium underline underline-offset-2 hover:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring"
|
||||
onClick={onOpenSettings}
|
||||
/>
|
||||
)
|
||||
}}
|
||||
/>
|
||||
</span>
|
||||
)
|
||||
}
|
||||
|
||||
@@ -65,11 +65,17 @@ export default function WorkspaceKanbanDrawerHeader({
|
||||
</span>
|
||||
{selectedCount > 1 ? (
|
||||
<span className="rounded-full bg-worktree-sidebar-accent px-2 py-0.5 text-[10px] font-medium text-muted-foreground">
|
||||
{selectedCount}{' '}
|
||||
{translate(
|
||||
'auto.components.sidebar.WorkspaceKanbanDrawerHeader.81870af08f',
|
||||
'selected'
|
||||
)}
|
||||
{selectedCount === 1
|
||||
? translate(
|
||||
'auto.components.sidebar.WorkspaceKanbanDrawerHeader.selectedCount_one',
|
||||
'{{count}} selected',
|
||||
{ count: selectedCount }
|
||||
)
|
||||
: translate(
|
||||
'auto.components.sidebar.WorkspaceKanbanDrawerHeader.selectedCount_other',
|
||||
'{{count}} selected',
|
||||
{ count: selectedCount }
|
||||
)}
|
||||
</span>
|
||||
) : null}
|
||||
</SheetTitle>
|
||||
|
||||
@@ -39,11 +39,17 @@ function formatAnnouncement(matchCount: number, totalCount: number): string {
|
||||
'auto.components.sidebar.WorkspaceKanbanSearchField.bdb753c78d',
|
||||
'No workspaces match'
|
||||
)
|
||||
: translate(
|
||||
'auto.components.sidebar.WorkspaceKanbanSearchField.4d96c209d6',
|
||||
'{{value0}} of {{value1}} workspaces match',
|
||||
{ value0: matchCount, value1: totalCount }
|
||||
)
|
||||
: totalCount === 1
|
||||
? translate(
|
||||
'auto.components.sidebar.WorkspaceKanbanSearchField.workspacesMatch_one',
|
||||
'{{matchCount}} of {{count}} workspace matches',
|
||||
{ matchCount, count: totalCount }
|
||||
)
|
||||
: translate(
|
||||
'auto.components.sidebar.WorkspaceKanbanSearchField.workspacesMatch_other',
|
||||
'{{matchCount}} of {{count}} workspaces match',
|
||||
{ matchCount, count: totalCount }
|
||||
)
|
||||
}
|
||||
|
||||
export default function WorkspaceKanbanSearchField({
|
||||
|
||||
@@ -2,6 +2,7 @@ import React from 'react'
|
||||
import type { GitConflictOperation } from '../../../../shared/git-status-types'
|
||||
import type { CheckStatus } from '../../../../shared/github/pull-request-types'
|
||||
import type { TerminalTab } from '../../../../shared/terminal-tab-types'
|
||||
import { translate } from '@/i18n/i18n'
|
||||
|
||||
export function branchDisplayName(branch: string): string {
|
||||
return branch.replace(/^refs\/heads\//, '')
|
||||
@@ -10,20 +11,30 @@ export function branchDisplayName(branch: string): string {
|
||||
export function checksLabel(status: CheckStatus): string {
|
||||
switch (status) {
|
||||
case 'success':
|
||||
return 'Passing'
|
||||
return translate('auto.components.sidebar.WorktreeCardHelpers.checksPassing', 'Passing')
|
||||
case 'failure':
|
||||
return 'Failing'
|
||||
return translate('auto.components.sidebar.WorktreeCardHelpers.checksFailing', 'Failing')
|
||||
case 'pending':
|
||||
return 'Pending'
|
||||
return translate('auto.components.sidebar.WorktreeCardHelpers.checksPending', 'Pending')
|
||||
case 'neutral':
|
||||
return ''
|
||||
}
|
||||
}
|
||||
|
||||
export const CONFLICT_OPERATION_LABELS: Record<Exclude<GitConflictOperation, 'unknown'>, string> = {
|
||||
merge: 'Merging',
|
||||
rebase: 'Rebasing',
|
||||
'cherry-pick': 'Cherry-picking'
|
||||
export function conflictOperationLabel(operation: GitConflictOperation): string {
|
||||
switch (operation) {
|
||||
case 'merge':
|
||||
return translate('auto.components.sidebar.WorktreeCardHelpers.conflictMerging', 'Merging')
|
||||
case 'rebase':
|
||||
return translate('auto.components.sidebar.WorktreeCardHelpers.conflictRebasing', 'Rebasing')
|
||||
case 'cherry-pick':
|
||||
return translate(
|
||||
'auto.components.sidebar.WorktreeCardHelpers.conflictCherryPicking',
|
||||
'Cherry-picking'
|
||||
)
|
||||
case 'unknown':
|
||||
return ''
|
||||
}
|
||||
}
|
||||
|
||||
export const EMPTY_TABS: TerminalTab[] = []
|
||||
|
||||
@@ -99,9 +99,19 @@ export const WorktreeCardMetaBadges = React.forwardRef<
|
||||
!jiraIssue &&
|
||||
!review ? (
|
||||
<MetaIconBadge
|
||||
label={translate('workspace.links.show', 'Show {{count}} linked reviews and tasks', {
|
||||
count: linkedItemCount
|
||||
})}
|
||||
label={
|
||||
linkedItemCount === 1
|
||||
? translate(
|
||||
'workspace.links.showLinked_one',
|
||||
'Show {{count}} linked review or task',
|
||||
{ count: linkedItemCount }
|
||||
)
|
||||
: translate(
|
||||
'workspace.links.showLinked_other',
|
||||
'Show {{count}} linked reviews and tasks',
|
||||
{ count: linkedItemCount }
|
||||
)
|
||||
}
|
||||
>
|
||||
<Link2 />
|
||||
</MetaIconBadge>
|
||||
|
||||
@@ -163,7 +163,13 @@ export function ReviewChecksBadge({
|
||||
return null
|
||||
}
|
||||
|
||||
const label = `Checks: ${checksLabel(status)}`
|
||||
const label = translate(
|
||||
'auto.components.sidebar.WorktreeCardMetadataStatusBadges.checksStatus',
|
||||
'Checks: {{status}}',
|
||||
{
|
||||
status: checksLabel(status)
|
||||
}
|
||||
)
|
||||
|
||||
if (status === 'success') {
|
||||
return (
|
||||
@@ -237,7 +243,13 @@ export function ReviewChecksIndicator({
|
||||
if (!status || status === 'neutral') {
|
||||
return null
|
||||
}
|
||||
const label = `Checks: ${checksLabel(status)}`
|
||||
const label = translate(
|
||||
'auto.components.sidebar.WorktreeCardMetadataStatusBadges.checksStatus',
|
||||
'Checks: {{status}}',
|
||||
{
|
||||
status: checksLabel(status)
|
||||
}
|
||||
)
|
||||
const Icon = status === 'success' ? CircleCheck : status === 'failure' ? CircleX : Clock
|
||||
return (
|
||||
<Tooltip>
|
||||
|
||||
@@ -39,11 +39,19 @@ export function WorktreeCardPortsTrigger({
|
||||
<button
|
||||
type="button"
|
||||
className="inline-flex size-3.5 shrink-0 items-center justify-center rounded text-muted-foreground/70 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-worktree-sidebar-ring"
|
||||
aria-label={translate(
|
||||
'auto.components.sidebar.WorktreeCardPorts.fed49903c9',
|
||||
'{{value0}} live {{value1}}',
|
||||
{ value0: ports.length, value1: ports.length === 1 ? 'port' : 'ports' }
|
||||
)}
|
||||
aria-label={
|
||||
ports.length === 1
|
||||
? translate(
|
||||
'auto.components.sidebar.WorktreeCardPorts.livePorts_one',
|
||||
'{{count}} live port',
|
||||
{ count: ports.length }
|
||||
)
|
||||
: translate(
|
||||
'auto.components.sidebar.WorktreeCardPorts.livePorts_other',
|
||||
'{{count}} live ports',
|
||||
{ count: ports.length }
|
||||
)
|
||||
}
|
||||
onClick={(event) => {
|
||||
event.stopPropagation()
|
||||
recordFeatureInteraction('ports')
|
||||
|
||||
@@ -16,8 +16,16 @@ export function WorktreeContextMenuOverlays({ model }: { model: WorktreeContextM
|
||||
'auto.components.sidebar.WorktreeContextMenu.c39c37676a',
|
||||
'Create a group and move this project into it.'
|
||||
)}
|
||||
initialName={model.repo ? `${model.repo.displayName} group` : ''}
|
||||
confirmLabel="Create"
|
||||
initialName={
|
||||
model.repo
|
||||
? translate(
|
||||
'auto.components.sidebar.ProjectGroupNameDialog.defaultGroupName',
|
||||
'{{name}} group',
|
||||
{ name: model.repo.displayName }
|
||||
)
|
||||
: ''
|
||||
}
|
||||
confirmLabel={translate('auto.components.sidebar.ProjectGroupNameDialog.create', 'Create')}
|
||||
onOpenChange={model.handleCreateGroupDialogOpenChange}
|
||||
onSubmit={model.handleSubmitNewProjectGroup}
|
||||
/>
|
||||
|
||||
@@ -116,7 +116,13 @@ export function WorktreeLinkedItemsField({
|
||||
<div className="flex items-center justify-between gap-2">
|
||||
<Label>{translate('workspace.links.title', 'Linked work')}</Label>
|
||||
<span className="text-xs text-muted-foreground">
|
||||
{translate('workspace.links.count', '{{count}} linked', { count: items.length })}
|
||||
{items.length === 1
|
||||
? translate('workspace.links.linkedCount_one', '{{count}} linked', {
|
||||
count: items.length
|
||||
})
|
||||
: translate('workspace.links.linkedCount_other', '{{count}} linked', {
|
||||
count: items.length
|
||||
})}
|
||||
</span>
|
||||
</div>
|
||||
<WorkspaceAttachmentComposer
|
||||
|
||||
@@ -30,7 +30,8 @@ import {
|
||||
PICKER_LIST_MAX_HEIGHT,
|
||||
PICKER_VIEWPORT_PADDING
|
||||
} from './worktree-parent-picker-placement'
|
||||
import { translate } from '@/i18n/i18n'
|
||||
import { Trans } from 'react-i18next'
|
||||
import { i18n, translate } from '@/i18n/i18n'
|
||||
|
||||
type WorktreeParentPickerPopoverProps = {
|
||||
open: boolean
|
||||
@@ -325,13 +326,17 @@ export function WorktreeParentPickerPopover({
|
||||
}}
|
||||
>
|
||||
<div className="flex min-w-0 shrink-0 items-center gap-1.5 border-b border-border bg-muted/30 px-3 py-2 text-[11px] leading-none text-muted-foreground">
|
||||
<span className="shrink-0">
|
||||
{translate(
|
||||
'auto.components.sidebar.WorktreeParentPickerPopover.setParentFor',
|
||||
'Set parent for'
|
||||
)}
|
||||
<span className="min-w-0 truncate">
|
||||
<Trans
|
||||
i18n={i18n}
|
||||
defaults={translate(
|
||||
'auto.components.sidebar.WorktreeParentPickerPopover.setParentForName',
|
||||
'Set parent for <name>{{name}}</name>'
|
||||
)}
|
||||
values={{ name: child.displayName }}
|
||||
components={{ name: <span className="font-medium text-foreground" /> }}
|
||||
/>
|
||||
</span>
|
||||
<span className="truncate font-medium text-foreground">{child.displayName}</span>
|
||||
</div>
|
||||
<Command shouldFilter={false} className="min-h-0">
|
||||
<CommandInput
|
||||
|
||||
@@ -184,15 +184,15 @@ export async function addAllSshConfigHostsToOrca({
|
||||
return { kind: 'already-synced' }
|
||||
}
|
||||
toast.success(
|
||||
result.targets.length > 1
|
||||
result.targets.length === 1
|
||||
? translate(
|
||||
'auto.components.sidebar.AddRemoteHostDialog.sshImportSyncedPlural',
|
||||
'Added {{count}} hosts to Orca.',
|
||||
'auto.components.sidebar.AddRemoteHostDialog.sshImportSynced_one',
|
||||
'Added {{count}} host to Orca.',
|
||||
{ count: result.targets.length }
|
||||
)
|
||||
: translate(
|
||||
'auto.components.sidebar.AddRemoteHostDialog.sshImportSyncedSingular',
|
||||
'Added {{count}} host to Orca.',
|
||||
'auto.components.sidebar.AddRemoteHostDialog.sshImportSynced_other',
|
||||
'Added {{count}} hosts to Orca.',
|
||||
{ count: result.targets.length }
|
||||
)
|
||||
)
|
||||
@@ -218,7 +218,12 @@ export async function loadSshConfigHostsForPicker(
|
||||
const listed: unknown = await ssh.listConfigHosts(args)
|
||||
const result = normalizeSshConfigHostListResult(listed)
|
||||
if (!result) {
|
||||
throw new Error('Invalid SSH config host response')
|
||||
throw new Error(
|
||||
translate(
|
||||
'auto.components.sidebar.AddRemoteHostDialog.sshConfigPickerInvalidResponse',
|
||||
'Invalid SSH config host response'
|
||||
)
|
||||
)
|
||||
}
|
||||
return { ok: true, result }
|
||||
} catch (error) {
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import { isFolderRepo } from '../../../../shared/repo-kind'
|
||||
import { translate } from '@/i18n/i18n'
|
||||
import type { Repo } from '../../../../shared/repo-types'
|
||||
import type { Worktree } from '../../../../shared/worktree/types'
|
||||
|
||||
@@ -59,8 +60,14 @@ export function getDeleteWorktreeDialogCopy(args: {
|
||||
? 'from Orca. The project folder on disk will not be deleted.'
|
||||
: 'from git and delete its workspace folder.',
|
||||
mainWorktreeBlocker: args.isFolderWorkspaceDelete
|
||||
? 'Remove the folder project instead of deleting this workspace.'
|
||||
: 'Git does not allow removing the main worktree.'
|
||||
? translate(
|
||||
'auto.components.sidebar.DeleteWorktreeDialog.removeFolderProjectInstead',
|
||||
'Remove the folder project instead of deleting this workspace.'
|
||||
)
|
||||
: translate(
|
||||
'auto.components.sidebar.DeleteWorktreeDialog.gitBlocksMainWorktree',
|
||||
'Git does not allow removing the main worktree.'
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -36,6 +36,7 @@ export {
|
||||
getFolderWorkspaceAgentLaunchFact,
|
||||
resolveFolderWorkspaceLaunchDraft
|
||||
} from './folder-workspace-agent-startup'
|
||||
import { translate } from '@/i18n/i18n'
|
||||
|
||||
type FolderWorkspaceCreateInput = {
|
||||
projectGroupId: string
|
||||
@@ -96,7 +97,13 @@ export async function submitFolderWorkspaceCreate({
|
||||
const workspaceName =
|
||||
nameIsAutoManaged && linkedName
|
||||
? linkedName
|
||||
: name.trim() || linkedName || `${projectGroup.name} workspace`
|
||||
: name.trim() ||
|
||||
linkedName ||
|
||||
translate(
|
||||
'auto.components.sidebar.folderWorkspaceComposer.defaultWorkspaceName',
|
||||
'{{name}} workspace',
|
||||
{ name: projectGroup.name }
|
||||
)
|
||||
const launchHost = getFolderWorkspaceAgentLaunchFact(useAppStore.getState(), projectGroup)
|
||||
if (quickAgent && launchHost.kind === 'withheld') {
|
||||
throw new Error(launchHost.reason)
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import { toast } from 'sonner'
|
||||
import { Trans } from 'react-i18next'
|
||||
import type { AppState } from '@/store/types'
|
||||
import type { LocalBaseRefUpdateSuggestion } from '../../../../shared/worktree/base-ref-drift-types'
|
||||
import { Button } from '../ui/button'
|
||||
@@ -6,7 +7,7 @@ import {
|
||||
KEEP_LOCAL_MAIN_UP_TO_DATE_SECTION_ID,
|
||||
getKeepLocalMainUpToDateTitle
|
||||
} from '../settings/keep-local-main-up-to-date-setting'
|
||||
import { translate } from '@/i18n/i18n'
|
||||
import { i18n, translate } from '@/i18n/i18n'
|
||||
|
||||
type SuggestionToastDeps = {
|
||||
updateSettings: AppState['updateSettings']
|
||||
@@ -30,10 +31,6 @@ function SuggestionToastBody({
|
||||
deps: SuggestionToastDeps
|
||||
}): React.JSX.Element {
|
||||
const { updateSettings, getSettings, openSettingsPage, openSettingsTarget } = deps
|
||||
const commitNoun =
|
||||
suggestion.behind === 1
|
||||
? translate('auto.components.sidebar.local.base.ref.suggestion.toast.commit', 'commit')
|
||||
: translate('auto.components.sidebar.local.base.ref.suggestion.toast.commits', 'commits')
|
||||
const keepLocalMainUpToDateTitle = getKeepLocalMainUpToDateTitle()
|
||||
|
||||
const turnOn = (): void => {
|
||||
@@ -84,26 +81,35 @@ function SuggestionToastBody({
|
||||
return (
|
||||
<div className="flex w-full flex-col gap-3">
|
||||
<p className="text-sm leading-5 text-popover-foreground/80">
|
||||
{translate(
|
||||
'auto.components.sidebar.local.base.ref.suggestion.toast.f15fd80989',
|
||||
'Your new worktree is current, but local {{value0}} is {{value1}} {{value2}} behind, so AI diffs may compare to stale history. Let Orca keep it up to date automatically. Change this anytime in',
|
||||
{
|
||||
value0: suggestion.localBranch,
|
||||
value1: suggestion.behind,
|
||||
value2: commitNoun
|
||||
<Trans
|
||||
i18n={i18n}
|
||||
defaults={
|
||||
suggestion.behind === 1
|
||||
? translate(
|
||||
'auto.components.sidebar.local.base.ref.suggestion.toast.staleLocalBranch_one',
|
||||
'Your new worktree is current, but local {{branch}} is {{count}} commit behind, so AI diffs may compare to stale history. Let Orca keep it up to date automatically. Change this anytime in <settings>Settings › {{setting}}</settings>',
|
||||
{ count: suggestion.behind }
|
||||
)
|
||||
: translate(
|
||||
'auto.components.sidebar.local.base.ref.suggestion.toast.staleLocalBranch_other',
|
||||
'Your new worktree is current, but local {{branch}} is {{count}} commits behind, so AI diffs may compare to stale history. Let Orca keep it up to date automatically. Change this anytime in <settings>Settings › {{setting}}</settings>',
|
||||
{ count: suggestion.behind }
|
||||
)
|
||||
}
|
||||
)}{' '}
|
||||
<button
|
||||
type="button"
|
||||
onClick={openSetting}
|
||||
className="cursor-pointer font-medium text-popover-foreground underline underline-offset-2 hover:text-primary"
|
||||
>
|
||||
{translate(
|
||||
'auto.components.sidebar.local.base.ref.suggestion.toast.3d260e1a5d',
|
||||
'Settings › {{value0}}',
|
||||
{ value0: keepLocalMainUpToDateTitle }
|
||||
)}
|
||||
</button>
|
||||
values={{
|
||||
branch: suggestion.localBranch,
|
||||
setting: keepLocalMainUpToDateTitle
|
||||
}}
|
||||
components={{
|
||||
settings: (
|
||||
<button
|
||||
type="button"
|
||||
onClick={openSetting}
|
||||
className="cursor-pointer font-medium text-popover-foreground underline underline-offset-2 hover:text-primary"
|
||||
/>
|
||||
)
|
||||
}}
|
||||
/>
|
||||
</p>
|
||||
<div className="flex justify-end">
|
||||
{/* Sonner’s close button already persists decline; no additional dismiss action is needed. */}
|
||||
|
||||
@@ -164,7 +164,10 @@ export function parsePathInput(
|
||||
driveRoot,
|
||||
committedSegments: [],
|
||||
trailingFilter: '',
|
||||
invalid: 'Invalid path: repeated separators'
|
||||
invalid: translate(
|
||||
'auto.components.sidebar.RemoteFileBrowser.invalidPathRepeatedSeparators',
|
||||
'Invalid path: repeated separators'
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -177,7 +180,10 @@ export function parsePathInput(
|
||||
driveRoot,
|
||||
committedSegments: [],
|
||||
trailingFilter: '',
|
||||
invalid: 'Invalid path: control characters are not allowed'
|
||||
invalid: translate(
|
||||
'auto.components.sidebar.RemoteFileBrowser.invalidPathControlCharacters',
|
||||
'Invalid path: control characters are not allowed'
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -7,6 +7,7 @@ import {
|
||||
selectAllKnownWorkspaceStatuses
|
||||
} from '@/store/host-workspace-status-columns'
|
||||
import type { WorkspaceStatusDefinition, Worktree } from '../../../../shared/worktree/types'
|
||||
import { translate } from '@/i18n/i18n'
|
||||
|
||||
type WorkspaceStatuses = ReturnType<typeof useAppStore.getState>['workspaceStatuses']
|
||||
|
||||
@@ -74,12 +75,18 @@ export function useWorkspaceKanbanStatusActions(args: {
|
||||
[args]
|
||||
)
|
||||
const handleAddStatus = useCallback(() => {
|
||||
const label = `Status ${args.workspaceStatuses.length + 1}`
|
||||
const number = args.workspaceStatuses.length + 1
|
||||
// Ids stay ASCII slugs; only the visible default label follows the UI language.
|
||||
const idSeed = `Status ${number}`
|
||||
args.setWorkspaceStatuses([
|
||||
...args.workspaceStatuses,
|
||||
{
|
||||
id: makeWorkspaceStatusId(label, selectAllKnownWorkspaceStatuses(useAppStore.getState())),
|
||||
label
|
||||
id: makeWorkspaceStatusId(idSeed, selectAllKnownWorkspaceStatuses(useAppStore.getState())),
|
||||
label: translate(
|
||||
'auto.components.sidebar.workspaceKanbanStatus.defaultLabel',
|
||||
'Status {{number}}',
|
||||
{ number }
|
||||
)
|
||||
}
|
||||
])
|
||||
recordInteraction()
|
||||
|
||||
@@ -81,31 +81,34 @@ export function useWorktreeCardWorkspaceActions({
|
||||
lineageChildCount === 1
|
||||
? lineageCollapsed
|
||||
? translate(
|
||||
'auto.components.sidebar.WorktreeList.20bebf9c7f',
|
||||
'Show {{value0}} child workspace',
|
||||
{ value0: lineageChildCount }
|
||||
'auto.components.sidebar.WorktreeList.showChildWorkspaces_one',
|
||||
'Show {{count}} child workspace',
|
||||
{ count: lineageChildCount }
|
||||
)
|
||||
: translate(
|
||||
'auto.components.sidebar.WorktreeList.e97297cb75',
|
||||
'Hide {{value0}} child workspace',
|
||||
{ value0: lineageChildCount }
|
||||
'auto.components.sidebar.WorktreeList.hideChildWorkspaces_one',
|
||||
'Hide {{count}} child workspace',
|
||||
{ count: lineageChildCount }
|
||||
)
|
||||
: lineageCollapsed
|
||||
? translate(
|
||||
'auto.components.sidebar.WorktreeList.c1f4a31623',
|
||||
'Show {{value0}} child workspaces',
|
||||
{ value0: lineageChildCount }
|
||||
'auto.components.sidebar.WorktreeList.showChildWorkspaces_other',
|
||||
'Show {{count}} child workspaces',
|
||||
{ count: lineageChildCount }
|
||||
)
|
||||
: translate(
|
||||
'auto.components.sidebar.WorktreeList.0cd15956d4',
|
||||
'Hide {{value0}} child workspaces',
|
||||
{ value0: lineageChildCount }
|
||||
'auto.components.sidebar.WorktreeList.hideChildWorkspaces_other',
|
||||
'Hide {{count}} child workspaces',
|
||||
{ count: lineageChildCount }
|
||||
)
|
||||
const childWorkspaceShortLabel = `${lineageChildCount} ${
|
||||
const childWorkspaceShortLabel =
|
||||
lineageChildCount === 1
|
||||
? translate('auto.components.sidebar.WorktreeList.0c6ee14f23', 'child')
|
||||
: translate('auto.components.sidebar.WorktreeList.045a8aed48', 'children')
|
||||
}`
|
||||
? translate('auto.components.sidebar.WorktreeList.childCount_one', '{{count}} child', {
|
||||
count: lineageChildCount
|
||||
})
|
||||
: translate('auto.components.sidebar.WorktreeList.childCount_other', '{{count}} children', {
|
||||
count: lineageChildCount
|
||||
})
|
||||
const showLineageChildChip = lineageChildCount > 0 && onLineageToggle !== undefined
|
||||
|
||||
const handleDragStart = useCallback(
|
||||
|
||||
@@ -6,7 +6,7 @@ import { RepoBadgeMark } from '@/components/repo/RepoBadgeLabel'
|
||||
import { Badge } from '@/components/ui/badge'
|
||||
import CacheTimer from './CacheTimer'
|
||||
import { WorktreeHostContextBadge } from './WorktreeHostContextBadge'
|
||||
import { CONFLICT_OPERATION_LABELS } from './WorktreeCardHelpers'
|
||||
import { conflictOperationLabel } from './WorktreeCardHelpers'
|
||||
import { TruncatedSidebarLabel } from './truncated-sidebar-label'
|
||||
import { getDirectoryName } from './worktree-card-model'
|
||||
import type { WorktreeCardPresentation } from './worktree-card-presentation'
|
||||
@@ -94,7 +94,7 @@ export function WorktreeCardMetaRow({
|
||||
className="h-[16px] px-1.5 text-[10px] font-medium rounded shrink-0 gap-1 text-amber-600 border-amber-500/30 bg-amber-500/5 dark:text-amber-400 dark:border-amber-400/30 dark:bg-amber-400/5 leading-none"
|
||||
>
|
||||
<GitMerge className="size-2.5" />
|
||||
{CONFLICT_OPERATION_LABELS[conflictOperation]}
|
||||
{conflictOperationLabel(conflictOperation)}
|
||||
</Badge>
|
||||
)}
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ import type React from 'react'
|
||||
import type { Repo } from '../../../../shared/repo-types'
|
||||
import type { WorkspaceStatus, Worktree } from '../../../../shared/worktree/types'
|
||||
import type { WorktreeCardPrDisplay } from './worktree-card-pr-display'
|
||||
import { translate } from '@/i18n/i18n'
|
||||
|
||||
export type WorktreeRenameRequest = {
|
||||
worktreeId: string
|
||||
@@ -106,7 +107,25 @@ export function shouldBeginWorktreeRename(
|
||||
|
||||
export function formatSparseDirectoryPreview(directories: string[]): string {
|
||||
const preview = directories.slice(0, 4).join(', ')
|
||||
return directories.length <= 4 ? preview : `${preview}, +${directories.length - 4} more`
|
||||
return directories.length <= 4
|
||||
? preview
|
||||
: directories.length - 4 === 1
|
||||
? translate(
|
||||
'auto.components.sidebar.worktreeCardModel.sparsePreviewMore_one',
|
||||
'{{preview}}, +{{count}} more',
|
||||
{
|
||||
preview,
|
||||
count: directories.length - 4
|
||||
}
|
||||
)
|
||||
: translate(
|
||||
'auto.components.sidebar.worktreeCardModel.sparsePreviewMore_other',
|
||||
'{{preview}}, +{{count}} more',
|
||||
{
|
||||
preview,
|
||||
count: directories.length - 4
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
export function isWebClient(): boolean {
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import type { HostedReviewInfo } from '../../../../shared/hosted-review'
|
||||
import { translate } from '@/i18n/i18n'
|
||||
import type { PRInfo } from '../../../../shared/github/pull-request-types'
|
||||
import type { Worktree } from '../../../../shared/worktree/types'
|
||||
import { isGitHubPRSuppressed } from '../../../../shared/worktree/github-pr-suppression'
|
||||
@@ -69,12 +70,24 @@ function makeLinkedReviewFallback(
|
||||
number: number,
|
||||
review: HostedReviewInfo | null | undefined
|
||||
): WorktreeCardPrDisplay {
|
||||
const label = provider === 'gitlab' ? 'MR' : 'PR'
|
||||
const isMergeRequest = provider === 'gitlab'
|
||||
const unavailable = isMergeRequest
|
||||
? translate(
|
||||
'auto.components.sidebar.worktreeCardPrDisplay.mrDetailsUnavailable',
|
||||
'MR details unavailable'
|
||||
)
|
||||
: translate(
|
||||
'auto.components.sidebar.worktreeCardPrDisplay.prDetailsUnavailable',
|
||||
'PR details unavailable'
|
||||
)
|
||||
const loading = isMergeRequest
|
||||
? translate('auto.components.sidebar.worktreeCardPrDisplay.loadingMr', 'Loading MR...')
|
||||
: translate('auto.components.sidebar.worktreeCardPrDisplay.loadingPr', 'Loading PR...')
|
||||
return {
|
||||
provider,
|
||||
number,
|
||||
// Persisted review links must remain visible while provider details warm up.
|
||||
title: review === null ? `${label} details unavailable` : `Loading ${label}...`
|
||||
title: review === null ? unavailable : loading
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -2,17 +2,25 @@ import React from 'react'
|
||||
import { AlertTriangle, ChevronDown, Loader2, Server, ServerOff } from 'lucide-react'
|
||||
import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip'
|
||||
import { cn } from '@/lib/utils'
|
||||
import { translate } from '@/i18n/i18n'
|
||||
import type { HostHeaderRow } from '../../../../../../shared/sidebar-list/host-section-rows'
|
||||
import { HostSectionHeaderMenu } from '../../HostSectionHeaderMenu'
|
||||
import { stopRepoHeaderMenuEvent } from './header-event-guards'
|
||||
import { getHostHeaderDetail } from './host-header-detail'
|
||||
|
||||
function formatSectionActivityLabel(count: number, label: string): string {
|
||||
return `${count} ${label}${count === 1 ? '' : 's'}`
|
||||
}
|
||||
|
||||
function SectionMetricsBadge({ count }: { count: number }): React.JSX.Element {
|
||||
const totalLabel = formatSectionActivityLabel(count, 'workspace')
|
||||
const totalLabel =
|
||||
count === 1
|
||||
? translate(
|
||||
'auto.components.sidebar.HostSectionHeader.workspaceCount_one',
|
||||
'{{count}} workspace',
|
||||
{ count }
|
||||
)
|
||||
: translate(
|
||||
'auto.components.sidebar.HostSectionHeader.workspaceCount_other',
|
||||
'{{count}} workspaces',
|
||||
{ count }
|
||||
)
|
||||
|
||||
return (
|
||||
<span
|
||||
|
||||
@@ -53,10 +53,18 @@ export function SidebarWorktreeListDialogs({
|
||||
nameDialog?.type === 'rename'
|
||||
? nameDialog.currentName
|
||||
: nameDialog
|
||||
? `${nameDialog.repo.displayName} group`
|
||||
? translate(
|
||||
'auto.components.sidebar.ProjectGroupNameDialog.defaultGroupName',
|
||||
'{{name}} group',
|
||||
{ name: nameDialog.repo.displayName }
|
||||
)
|
||||
: ''
|
||||
}
|
||||
confirmLabel={nameDialog?.type === 'rename' ? 'Rename' : 'Create'}
|
||||
confirmLabel={
|
||||
nameDialog?.type === 'rename'
|
||||
? translate('auto.components.sidebar.ProjectGroupNameDialog.rename', 'Rename')
|
||||
: translate('auto.components.sidebar.ProjectGroupNameDialog.create', 'Create')
|
||||
}
|
||||
onOpenChange={(open) => {
|
||||
if (!open) {
|
||||
setNameDialog(null)
|
||||
|
||||
@@ -19,7 +19,12 @@ import {
|
||||
export type ProjectGroupNameDialogState =
|
||||
| { type: 'create-from-repo'; repo: Repo }
|
||||
// hostId is the group row's owner host, so the mutation is not routed to whichever host has focus.
|
||||
| { type: 'rename'; groupId: string; currentName: string; hostId?: ExecutionHostId }
|
||||
| {
|
||||
type: 'rename'
|
||||
groupId: string
|
||||
currentName: string
|
||||
hostId?: ExecutionHostId
|
||||
}
|
||||
|
||||
export type ProjectGroupDeleteDialogState = {
|
||||
groupId: string
|
||||
@@ -59,12 +64,12 @@ function reportProjectGroupDeleteFailures(result: {
|
||||
description:
|
||||
requestedCount === 1
|
||||
? translate(
|
||||
'auto.components.sidebar.WorktreeList.groupProjectsRemainedSingular',
|
||||
'auto.components.sidebar.WorktreeList.groupProjectsRemained_one',
|
||||
'{{remaining}} of {{count}} contained project remained after deleting the group.',
|
||||
{ remaining: result.failedProjectRemovals.length, count: requestedCount }
|
||||
)
|
||||
: translate(
|
||||
'auto.components.sidebar.WorktreeList.groupProjectsRemainedPlural',
|
||||
'auto.components.sidebar.WorktreeList.groupProjectsRemained_other',
|
||||
'{{remaining}} of {{count}} contained projects remained after deleting the group.',
|
||||
{ remaining: result.failedProjectRemovals.length, count: requestedCount }
|
||||
)
|
||||
|
||||
@@ -28,6 +28,7 @@ import {
|
||||
resolveTitleDerivedPaneAgent,
|
||||
type TitleDerivedPaneForeground
|
||||
} from './title-derived-pane-agent-identity'
|
||||
import { translate } from '@/i18n/i18n'
|
||||
|
||||
/** Title snapshots use one restart-stable authority; revisions are comparable only within it, never across authorities. */
|
||||
export const TITLE_DERIVED_AGENT_ROW_AUTHORITY_ID = 'renderer-title-projection'
|
||||
@@ -181,7 +182,11 @@ function buildTitleDerivedAgentRow(args: {
|
||||
const rowLabel = agentType === titleAgentType && label ? label : formatAgentTypeLabel(agentType)
|
||||
const rowState = titleStatusToRowState(status)
|
||||
const secondary =
|
||||
status === 'permission' ? 'Needs input' : status === 'working' ? 'Running' : 'Idle'
|
||||
status === 'permission'
|
||||
? translate('auto.components.sidebar.titleDerivedAgentRows.needsInput', 'Needs input')
|
||||
: status === 'working'
|
||||
? translate('auto.components.sidebar.titleDerivedAgentRows.running', 'Running')
|
||||
: translate('auto.components.sidebar.titleDerivedAgentRows.idle', 'Idle')
|
||||
const entryState: AgentStatusState = rowState === 'waiting' ? 'waiting' : 'working'
|
||||
const entry: AgentStatusEntry = {
|
||||
paneKey,
|
||||
|
||||
@@ -10,7 +10,12 @@ import { workspaceOwnerHostId } from '@/lib/workspace-row-owner-host'
|
||||
async function removeWslHostImpl(environmentId: string): Promise<void> {
|
||||
const api = window.api.runtimeEnvironments?.wslHosts
|
||||
if (!api) {
|
||||
throw new Error('WSL hosts are not available on this computer.')
|
||||
throw new Error(
|
||||
translate(
|
||||
'auto.components.sidebar.wslHostRemoval.unavailable',
|
||||
'WSL hosts are not available on this computer.'
|
||||
)
|
||||
)
|
||||
}
|
||||
const serverStop = await api.remove({ environmentId })
|
||||
const state = useAppStore.getState()
|
||||
|
||||
@@ -145,13 +145,14 @@ export function CodexSwitcherMenu({
|
||||
<div>
|
||||
{resetCreditCount === 1
|
||||
? translate(
|
||||
'auto.components.status.bar.StatusBar.5e5f9f5160',
|
||||
'1 rate-limit reset available'
|
||||
'auto.components.status.bar.StatusBar.rateLimitResetsAvailable_one',
|
||||
'{{count}} rate-limit reset available',
|
||||
{ count: resetCreditCount }
|
||||
)
|
||||
: translate(
|
||||
'auto.components.status.bar.StatusBar.5ecae9197c',
|
||||
'{{value0}} rate-limit resets available',
|
||||
{ value0: resetCreditCount }
|
||||
'auto.components.status.bar.StatusBar.rateLimitResetsAvailable_other',
|
||||
'{{count}} rate-limit resets available',
|
||||
{ count: resetCreditCount }
|
||||
)}
|
||||
</div>
|
||||
{resetCreditExpiry ? (
|
||||
|
||||
@@ -81,24 +81,26 @@ function failedText(count: number): SegmentText {
|
||||
label:
|
||||
count === 1
|
||||
? translate(
|
||||
'auto.components.status.bar.NativeChatResumeStatusSegment.failedLabelOne',
|
||||
'1 chat failed to resume'
|
||||
'auto.components.status.bar.NativeChatResumeStatusSegment.chatsFailedLabel_one',
|
||||
'{{count}} chat failed to resume',
|
||||
{ count }
|
||||
)
|
||||
: translate(
|
||||
'auto.components.status.bar.NativeChatResumeStatusSegment.failedLabel',
|
||||
'{{value0}} chats failed to resume',
|
||||
{ value0: count }
|
||||
'auto.components.status.bar.NativeChatResumeStatusSegment.chatsFailedLabel_other',
|
||||
'{{count}} chats failed to resume',
|
||||
{ count }
|
||||
),
|
||||
ariaLabel:
|
||||
count === 1
|
||||
? translate(
|
||||
'auto.components.status.bar.NativeChatResumeStatusSegment.failedAriaOne',
|
||||
'1 chat failed to resume. Click for details.'
|
||||
'auto.components.status.bar.NativeChatResumeStatusSegment.chatsFailedAria_one',
|
||||
'{{count}} chat failed to resume. Click for details.',
|
||||
{ count }
|
||||
)
|
||||
: translate(
|
||||
'auto.components.status.bar.NativeChatResumeStatusSegment.failedAria',
|
||||
'{{value0}} chats failed to resume. Click for details.',
|
||||
{ value0: count }
|
||||
'auto.components.status.bar.NativeChatResumeStatusSegment.chatsFailedAria_other',
|
||||
'{{count}} chats failed to resume. Click for details.',
|
||||
{ count }
|
||||
),
|
||||
tooltip: translate(
|
||||
'auto.components.status.bar.NativeChatResumeStatusSegment.failedTooltip',
|
||||
@@ -112,24 +114,26 @@ function resumedText(count: number): SegmentText {
|
||||
label:
|
||||
count === 1
|
||||
? translate(
|
||||
'auto.components.status.bar.NativeChatResumeStatusSegment.resumedLabelOne',
|
||||
'1 chat resumed'
|
||||
'auto.components.status.bar.NativeChatResumeStatusSegment.resumedLabelCount_one',
|
||||
'{{count}} chat resumed',
|
||||
{ count }
|
||||
)
|
||||
: translate(
|
||||
'auto.components.status.bar.NativeChatResumeStatusSegment.resumedLabel',
|
||||
'{{value0}} chats resumed',
|
||||
{ value0: count }
|
||||
'auto.components.status.bar.NativeChatResumeStatusSegment.resumedLabelCount_other',
|
||||
'{{count}} chats resumed',
|
||||
{ count }
|
||||
),
|
||||
ariaLabel:
|
||||
count === 1
|
||||
? translate(
|
||||
'auto.components.status.bar.NativeChatResumeStatusSegment.resumedAriaOne',
|
||||
'1 chat resumed. Click to see it.'
|
||||
'auto.components.status.bar.NativeChatResumeStatusSegment.resumedAriaCount_one',
|
||||
'{{count}} chat resumed. Click to see it.',
|
||||
{ count }
|
||||
)
|
||||
: translate(
|
||||
'auto.components.status.bar.NativeChatResumeStatusSegment.resumedAria',
|
||||
'{{value0}} chats resumed. Click to see them.',
|
||||
{ value0: count }
|
||||
'auto.components.status.bar.NativeChatResumeStatusSegment.resumedAriaCount_other',
|
||||
'{{count}} chats resumed. Click to see them.',
|
||||
{ count }
|
||||
),
|
||||
tooltip: translate(
|
||||
'auto.components.status.bar.NativeChatResumeStatusSegment.resumedTooltip',
|
||||
@@ -143,24 +147,26 @@ function checkText(count: number): SegmentText {
|
||||
label:
|
||||
count === 1
|
||||
? translate(
|
||||
'auto.components.status.bar.NativeChatResumeStatusSegment.checkLabelOne',
|
||||
'1 chat to check'
|
||||
'auto.components.status.bar.NativeChatResumeStatusSegment.checkLabelCount_one',
|
||||
'{{count}} chat to check',
|
||||
{ count }
|
||||
)
|
||||
: translate(
|
||||
'auto.components.status.bar.NativeChatResumeStatusSegment.checkLabel',
|
||||
'{{value0}} chats to check',
|
||||
{ value0: count }
|
||||
'auto.components.status.bar.NativeChatResumeStatusSegment.checkLabelCount_other',
|
||||
'{{count}} chats to check',
|
||||
{ count }
|
||||
),
|
||||
ariaLabel:
|
||||
count === 1
|
||||
? translate(
|
||||
'auto.components.status.bar.NativeChatResumeStatusSegment.checkAriaOne',
|
||||
'1 chat to check after resuming. Click for details.'
|
||||
'auto.components.status.bar.NativeChatResumeStatusSegment.checkAriaCount_one',
|
||||
'{{count}} chat to check after resuming. Click for details.',
|
||||
{ count }
|
||||
)
|
||||
: translate(
|
||||
'auto.components.status.bar.NativeChatResumeStatusSegment.checkAria',
|
||||
'{{value0}} chats to check after resuming. Click for details.',
|
||||
{ value0: count }
|
||||
'auto.components.status.bar.NativeChatResumeStatusSegment.checkAriaCount_other',
|
||||
'{{count}} chats to check after resuming. Click for details.',
|
||||
{ count }
|
||||
),
|
||||
tooltip: translate(
|
||||
'auto.components.status.bar.NativeChatResumeStatusSegment.checkTooltip',
|
||||
@@ -253,25 +259,27 @@ function NativeChatRuntimeResumeStatusSegment({
|
||||
label={
|
||||
pending === 1
|
||||
? translate(
|
||||
'auto.components.status.bar.NativeChatResumeStatusSegment.labelOne',
|
||||
'1 chat to resume'
|
||||
'auto.components.status.bar.NativeChatResumeStatusSegment.labelCount_one',
|
||||
'{{count}} chat to resume',
|
||||
{ count: pending }
|
||||
)
|
||||
: translate(
|
||||
'auto.components.status.bar.NativeChatResumeStatusSegment.label',
|
||||
'{{value0}} chats to resume',
|
||||
{ value0: pending }
|
||||
'auto.components.status.bar.NativeChatResumeStatusSegment.labelCount_other',
|
||||
'{{count}} chats to resume',
|
||||
{ count: pending }
|
||||
)
|
||||
}
|
||||
ariaLabel={
|
||||
pending === 1
|
||||
? translate(
|
||||
'auto.components.status.bar.NativeChatResumeStatusSegment.ariaLabelOne',
|
||||
'1 chat available to resume'
|
||||
'auto.components.status.bar.NativeChatResumeStatusSegment.ariaLabelCount_one',
|
||||
'{{count}} chat available to resume',
|
||||
{ count: pending }
|
||||
)
|
||||
: translate(
|
||||
'auto.components.status.bar.NativeChatResumeStatusSegment.ariaLabel',
|
||||
'{{value0}} chats available to resume',
|
||||
{ value0: pending }
|
||||
'auto.components.status.bar.NativeChatResumeStatusSegment.ariaLabelCount_other',
|
||||
'{{count}} chats available to resume',
|
||||
{ count: pending }
|
||||
)
|
||||
}
|
||||
tooltip={translate(
|
||||
|
||||
@@ -98,11 +98,19 @@ export function PortsStatusSegment({ iconOnly }: PortsStatusSegmentProps): React
|
||||
type="button"
|
||||
{...STATUS_BAR_CONTEXT_MENU_EXEMPT_PROPS}
|
||||
className="inline-flex cursor-pointer items-center gap-1.5 rounded px-1 py-0.5 hover:bg-accent/70"
|
||||
aria-label={translate(
|
||||
'auto.components.status.bar.PortsStatusSegment.b8bc3e420a',
|
||||
'Ports, {{value0}} workspace {{value1}}',
|
||||
{ value0: workspacePortCount, value1: workspacePortCount === 1 ? 'port' : 'ports' }
|
||||
)}
|
||||
aria-label={
|
||||
workspacePortCount === 1
|
||||
? translate(
|
||||
'auto.components.status.bar.PortsStatusSegment.portsAria_one',
|
||||
'Ports, {{count}} workspace port',
|
||||
{ count: workspacePortCount }
|
||||
)
|
||||
: translate(
|
||||
'auto.components.status.bar.PortsStatusSegment.portsAria_other',
|
||||
'Ports, {{count}} workspace ports',
|
||||
{ count: workspacePortCount }
|
||||
)
|
||||
}
|
||||
>
|
||||
{refreshing ? (
|
||||
<LoaderCircle className="size-3 animate-spin text-muted-foreground" />
|
||||
@@ -123,25 +131,35 @@ export function PortsStatusSegment({ iconOnly }: PortsStatusSegmentProps): React
|
||||
</PopoverTrigger>
|
||||
</TooltipTrigger>
|
||||
<TooltipContent side="top" sideOffset={6}>
|
||||
{translate(
|
||||
'auto.components.status.bar.PortsStatusSegment.ca41be2802',
|
||||
'Ports — {{value0}} workspace {{value1}}{{value2}}',
|
||||
{
|
||||
value0: workspacePortCount,
|
||||
value1:
|
||||
workspacePortCount === 1
|
||||
? translate('auto.components.status.bar.PortsStatusSegment.45834a9ace', 'port')
|
||||
: translate('auto.components.status.bar.PortsStatusSegment.8caaa86e9a', 'ports'),
|
||||
value2:
|
||||
externalPorts.length > 0
|
||||
? translate(
|
||||
'auto.components.status.bar.PortsStatusSegment.a8e4bdb412',
|
||||
' · {{value0}} external',
|
||||
{ value0: externalPorts.length }
|
||||
)
|
||||
: ''
|
||||
}
|
||||
)}
|
||||
{externalPorts.length > 0
|
||||
? workspacePortCount === 1
|
||||
? translate(
|
||||
'auto.components.status.bar.PortsStatusSegment.portsTooltipWithExternal_one',
|
||||
'Ports — {{count}} workspace port · {{externalCount}} external',
|
||||
{
|
||||
count: workspacePortCount,
|
||||
externalCount: externalPorts.length
|
||||
}
|
||||
)
|
||||
: translate(
|
||||
'auto.components.status.bar.PortsStatusSegment.portsTooltipWithExternal_other',
|
||||
'Ports — {{count}} workspace ports · {{externalCount}} external',
|
||||
{
|
||||
count: workspacePortCount,
|
||||
externalCount: externalPorts.length
|
||||
}
|
||||
)
|
||||
: workspacePortCount === 1
|
||||
? translate(
|
||||
'auto.components.status.bar.PortsStatusSegment.portsTooltip_one',
|
||||
'Ports — {{count}} workspace port',
|
||||
{ count: workspacePortCount }
|
||||
)
|
||||
: translate(
|
||||
'auto.components.status.bar.PortsStatusSegment.portsTooltip_other',
|
||||
'Ports — {{count}} workspace ports',
|
||||
{ count: workspacePortCount }
|
||||
)}
|
||||
</TooltipContent>
|
||||
</Tooltip>
|
||||
|
||||
|
||||
@@ -44,13 +44,14 @@ export function RemoteServerUpdateStatusSegment({
|
||||
label:
|
||||
failed === 1
|
||||
? translate(
|
||||
'auto.components.status.bar.RemoteServerUpdateStatusSegment.failedOne',
|
||||
'1 server update failed'
|
||||
'auto.components.status.bar.RemoteServerUpdateStatusSegment.failedCount_one',
|
||||
'{{count}} server update failed',
|
||||
{ count: failed }
|
||||
)
|
||||
: translate(
|
||||
'auto.components.status.bar.RemoteServerUpdateStatusSegment.failed',
|
||||
'{{value0}} server updates failed',
|
||||
{ value0: failed }
|
||||
'auto.components.status.bar.RemoteServerUpdateStatusSegment.failedCount_other',
|
||||
'{{count}} server updates failed',
|
||||
{ count: failed }
|
||||
),
|
||||
tooltip: translate(
|
||||
'auto.components.status.bar.RemoteServerUpdateStatusSegment.failedTooltip',
|
||||
@@ -62,13 +63,14 @@ export function RemoteServerUpdateStatusSegment({
|
||||
label:
|
||||
updated === 1
|
||||
? translate(
|
||||
'auto.components.status.bar.RemoteServerUpdateStatusSegment.updatedOne',
|
||||
'1 server updated'
|
||||
'auto.components.status.bar.RemoteServerUpdateStatusSegment.updatedCount_one',
|
||||
'{{count}} server updated',
|
||||
{ count: updated }
|
||||
)
|
||||
: translate(
|
||||
'auto.components.status.bar.RemoteServerUpdateStatusSegment.updated',
|
||||
'{{value0}} servers updated',
|
||||
{ value0: updated }
|
||||
'auto.components.status.bar.RemoteServerUpdateStatusSegment.updatedCount_other',
|
||||
'{{count}} servers updated',
|
||||
{ count: updated }
|
||||
),
|
||||
tooltip: translate(
|
||||
'auto.components.status.bar.RemoteServerUpdateStatusSegment.updatedTooltip',
|
||||
|
||||
@@ -32,11 +32,17 @@ export function SkillUpdateStatusSegment({
|
||||
'Updating {{value0}}…',
|
||||
{ value0: run.names[0] }
|
||||
)
|
||||
: translate(
|
||||
'auto.components.status.bar.SkillUpdateStatusSegment.runningMany',
|
||||
'Updating {{value0}} skills…',
|
||||
{ value0: run.names.length }
|
||||
),
|
||||
: run.names.length === 1
|
||||
? translate(
|
||||
'auto.components.status.bar.SkillUpdateStatusSegment.runningSkills_one',
|
||||
'Updating {{count}} skill…',
|
||||
{ count: run.names.length }
|
||||
)
|
||||
: translate(
|
||||
'auto.components.status.bar.SkillUpdateStatusSegment.runningSkills_other',
|
||||
'Updating {{count}} skills…',
|
||||
{ count: run.names.length }
|
||||
),
|
||||
ariaLabel: translate(
|
||||
'auto.components.status.bar.SkillUpdateStatusSegment.runningAria',
|
||||
'Skills updating. Click to open details.'
|
||||
|
||||
@@ -32,13 +32,14 @@ export function CodexRestartStatusPrompt(): React.JSX.Element | null {
|
||||
{/* Why: notices are per-PTY-session but restart is per-pane; show both counts so split panes don't look wrong. */}
|
||||
{staleCodexStatus.staleSessionCount === 1
|
||||
? translate(
|
||||
'auto.components.status.bar.StatusBar.605901a495',
|
||||
'1 Codex session is still on the old account'
|
||||
'auto.components.status.bar.StatusBar.staleCodexSessions_one',
|
||||
'{{count}} Codex session is still on the old account.',
|
||||
{ count: staleCodexStatus.staleSessionCount }
|
||||
)
|
||||
: translate(
|
||||
'auto.components.status.bar.StatusBar.1446d0d8a0',
|
||||
'{{value0}} Codex sessions are still on the old account.',
|
||||
{ value0: staleCodexStatus.staleSessionCount }
|
||||
'auto.components.status.bar.StatusBar.staleCodexSessions_other',
|
||||
'{{count}} Codex sessions are still on the old account.',
|
||||
{ count: staleCodexStatus.staleSessionCount }
|
||||
)}
|
||||
{staleCodexStatus.staleWorktreeCount > 1 ? (
|
||||
<span className="mt-0.5 block">
|
||||
|
||||
@@ -6,6 +6,7 @@ import { Button } from '../ui/button'
|
||||
import {
|
||||
formatBytes,
|
||||
getWorkspaceSpaceProgressLabel,
|
||||
getWorkspaceSpaceScanningFallbackLabel,
|
||||
getWorkspaceSpaceScanTimeLabel
|
||||
} from './workspace-space-format'
|
||||
import { translate } from '@/i18n/i18n'
|
||||
@@ -59,7 +60,9 @@ export function WorkspaceSpaceCompactPanel({
|
||||
? translate(
|
||||
'auto.components.status.bar.WorkspaceSpaceCompactPanel.3d8d47ce77',
|
||||
'{{value0}} · last result kept',
|
||||
{ value0: progressLabel ?? 'Scanning workspace sizes' }
|
||||
{
|
||||
value0: progressLabel ?? getWorkspaceSpaceScanningFallbackLabel()
|
||||
}
|
||||
)
|
||||
: analysis.unavailableWorktreeCount > 0
|
||||
? translate(
|
||||
@@ -70,14 +73,23 @@ export function WorkspaceSpaceCompactPanel({
|
||||
value1: analysis.unavailableWorktreeCount
|
||||
}
|
||||
)
|
||||
: translate(
|
||||
'workspaceSpace.compact.linkedAndScanned',
|
||||
'{{value0}} in linked worktrees · {{value1}} workspaces',
|
||||
{
|
||||
value0: formatBytes(analysis.reclaimableBytes),
|
||||
value1: analysis.scannedWorktreeCount
|
||||
}
|
||||
)
|
||||
: analysis.scannedWorktreeCount === 1
|
||||
? translate(
|
||||
'workspaceSpace.compact.linkedAndScannedCount_one',
|
||||
'{{size}} in linked worktrees · {{count}} workspace',
|
||||
{
|
||||
size: formatBytes(analysis.reclaimableBytes),
|
||||
count: analysis.scannedWorktreeCount
|
||||
}
|
||||
)
|
||||
: translate(
|
||||
'workspaceSpace.compact.linkedAndScannedCount_other',
|
||||
'{{size}} in linked worktrees · {{count}} workspaces',
|
||||
{
|
||||
size: formatBytes(analysis.reclaimableBytes),
|
||||
count: analysis.scannedWorktreeCount
|
||||
}
|
||||
)
|
||||
: isScanning
|
||||
? (progressLabel ??
|
||||
translate(
|
||||
|
||||
@@ -20,9 +20,15 @@ import {
|
||||
resolveDaemonSessionLabel,
|
||||
resolveSnapshotSessionLabel
|
||||
} from './resource-session-labels'
|
||||
import { translate } from '@/i18n/i18n'
|
||||
|
||||
export const UNATTRIBUTED_REPO_ID = '__unattributed__'
|
||||
export const UNATTRIBUTED_REPO_NAME = 'Unattributed'
|
||||
function getUnattributedRepoName(): string {
|
||||
return translate(
|
||||
'auto.components.status.bar.mergeSnapshotAndSessions.unattributed',
|
||||
'Unattributed'
|
||||
)
|
||||
}
|
||||
|
||||
export function mergeSnapshotAndSessions(
|
||||
snapshot: MemorySnapshot | null,
|
||||
@@ -176,7 +182,7 @@ export function mergeSnapshotAndSessions(
|
||||
? UNATTRIBUTED_REPO_ID
|
||||
: (worktree?.repoId ?? getRepoIdFromWorktreeId(finalWorktreeId))
|
||||
const finalRepoName = isUnattributed
|
||||
? UNATTRIBUTED_REPO_NAME
|
||||
? getUnattributedRepoName()
|
||||
: ctx.repoDisplayNameById.get(finalRepoId) || finalRepoId
|
||||
const finalWorktreeName = isUnattributed
|
||||
? session.title || session.id.slice(0, 12)
|
||||
|
||||
@@ -86,7 +86,14 @@ export function PortRow({
|
||||
const runtimeTarget = useWorktreeRuntimeTarget(
|
||||
port.kind === 'workspace' ? port.owner.worktreeId : activeWorktreeId
|
||||
)
|
||||
const processLabel = port.processName ?? (port.pid ? `PID ${port.pid}` : 'Unknown process')
|
||||
const processLabel =
|
||||
port.processName ??
|
||||
(port.pid
|
||||
? `PID ${port.pid}`
|
||||
: translate(
|
||||
'auto.components.status.bar.ports.status.popover.rows.unknownProcess',
|
||||
'Unknown process'
|
||||
))
|
||||
const canStop = canStopWorkspacePort(port)
|
||||
const openBrowserLabel = translate(
|
||||
'auto.components.status.bar.ports.status.popover.rows.085f4f0334',
|
||||
|
||||
@@ -11,8 +11,11 @@ export type ResourceMemoryMetricCopy = {
|
||||
export function getResourceMemoryMetricCopy(metric: ProcessMemoryMetric): ResourceMemoryMetricCopy {
|
||||
if (metric === 'footprint') {
|
||||
return {
|
||||
columnLabel: 'Mem',
|
||||
summaryLabel: 'Σ Memory',
|
||||
columnLabel: translate('auto.components.status.bar.resource.memory.metric.memColumn', 'Mem'),
|
||||
summaryLabel: translate(
|
||||
'auto.components.status.bar.resource.memory.metric.memorySummary',
|
||||
'Σ Memory'
|
||||
),
|
||||
description: translate(
|
||||
'auto.components.status.bar.resource.memory.metric.footprintDescription',
|
||||
'Summed memory footprint, the same figure Activity Monitor shows: memory each process owns, including graphics memory. Pages shared between processes are not counted twice.'
|
||||
@@ -42,7 +45,10 @@ export function getResourceMemoryMetricCopy(metric: ProcessMemoryMetric): Resour
|
||||
/** No column of its own yet, so no `columnLabel`: the commit figure is a summary + tooltip. */
|
||||
export function getResourceCommitMetricCopy(): Omit<ResourceMemoryMetricCopy, 'columnLabel'> {
|
||||
return {
|
||||
summaryLabel: 'Σ Private',
|
||||
summaryLabel: translate(
|
||||
'auto.components.status.bar.resource.memory.metric.privateSummary',
|
||||
'Σ Private'
|
||||
),
|
||||
description: translate(
|
||||
'auto.components.status.bar.resource.memory.metric.privateBytesDescription',
|
||||
'Summed private bytes: memory these processes have committed, counted whether it is resident or paged out. This is what the host charges against its commit limit, so it keeps rising while the working set above shrinks under paging.'
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import type { SessionMemory } from '../../../../shared/process-stats-types'
|
||||
import { parsePaneKey as parseStablePaneKey } from '../../../../shared/stable-pane-id'
|
||||
import { getWorktreePathBasenameFromId } from '../../../../shared/worktree/id'
|
||||
import { translate } from '@/i18n/i18n'
|
||||
import type { DaemonSession, MergeContext } from './resource-usage-merge-types'
|
||||
import type { ResourceSessionBindingIndex } from './resource-session-bindings'
|
||||
|
||||
@@ -40,14 +41,33 @@ export function resolveSnapshotSessionLabel(
|
||||
if (custom) {
|
||||
return custom
|
||||
}
|
||||
return tab.defaultTitle?.trim() || tab.title?.trim() || `Terminal ${tabIndex + 1}`
|
||||
return (
|
||||
tab.defaultTitle?.trim() ||
|
||||
tab.title?.trim() ||
|
||||
translate(
|
||||
'auto.components.status.bar.resourceSessionLabels.terminalNumber',
|
||||
'Terminal {{number}}',
|
||||
{ number: tabIndex + 1 }
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
if (session.pid > 0) {
|
||||
return `pid ${session.pid}`
|
||||
return translate('auto.components.status.bar.resourceSessionLabels.pid', 'pid {{pid}}', {
|
||||
pid: session.pid
|
||||
})
|
||||
}
|
||||
const fallback = session.sessionId?.slice(0, 8)
|
||||
return fallback ? `session ${fallback}` : '(unknown session)'
|
||||
return fallback
|
||||
? translate(
|
||||
'auto.components.status.bar.resourceSessionLabels.sessionPrefix',
|
||||
'session {{id}}',
|
||||
{ id: fallback }
|
||||
)
|
||||
: translate(
|
||||
'auto.components.status.bar.resourceSessionLabels.unknownSession',
|
||||
'(unknown session)'
|
||||
)
|
||||
}
|
||||
|
||||
export function resolveDaemonSessionLabel(
|
||||
@@ -86,5 +106,5 @@ export function resolveDaemonSessionLabel(
|
||||
if (session.title) {
|
||||
return session.title
|
||||
}
|
||||
return 'unknown'
|
||||
return translate('auto.components.status.bar.resourceSessionLabels.unknown', 'unknown')
|
||||
}
|
||||
|
||||
@@ -202,14 +202,14 @@ export function renderResourceUsagePopoverFooter({
|
||||
>
|
||||
{orphanCount === 1
|
||||
? translate(
|
||||
'auto.components.status.bar.ResourceUsageStatusSegment.c7e3b1a0d9f2',
|
||||
'End {{value0}} orphan terminal',
|
||||
{ value0: orphanCount }
|
||||
'auto.components.status.bar.ResourceUsageStatusSegment.endOrphanTerminals_one',
|
||||
'End {{count}} orphan terminal',
|
||||
{ count: orphanCount }
|
||||
)
|
||||
: translate(
|
||||
'auto.components.status.bar.ResourceUsageStatusSegment.d8f4c2b1e0a3',
|
||||
'End {{value0}} orphan terminals',
|
||||
{ value0: orphanCount }
|
||||
'auto.components.status.bar.ResourceUsageStatusSegment.endOrphanTerminals_other',
|
||||
'End {{count}} orphan terminals',
|
||||
{ count: orphanCount }
|
||||
)}
|
||||
</button>
|
||||
) : null}
|
||||
|
||||
@@ -205,14 +205,14 @@ export function renderResourceUsageSummary({
|
||||
<span className="shrink-0 text-yellow-500" aria-live="polite">
|
||||
{orphanCount === 1
|
||||
? translate(
|
||||
'auto.components.status.bar.ResourceUsageStatusSegment.30ff2c3c31',
|
||||
'{{value0}} orphan',
|
||||
{ value0: orphanCount }
|
||||
'auto.components.status.bar.ResourceUsageStatusSegment.orphanCount_one',
|
||||
'{{count}} orphan',
|
||||
{ count: orphanCount }
|
||||
)
|
||||
: translate(
|
||||
'auto.components.status.bar.ResourceUsageStatusSegment.b8f4a2c1d0e3',
|
||||
'{{value0}} orphans',
|
||||
{ value0: orphanCount }
|
||||
'auto.components.status.bar.ResourceUsageStatusSegment.orphanCount_other',
|
||||
'{{count}} orphans',
|
||||
{ count: orphanCount }
|
||||
)}
|
||||
</span>
|
||||
)}
|
||||
|
||||
@@ -2,6 +2,8 @@ import type { GlobalSettings } from '../../../../shared/global-settings-types'
|
||||
import type { RateLimitRuntimeTarget } from '../../../../shared/rate-limit-types'
|
||||
import { resolveLocalAccountRuntimeTarget } from '../../../../shared/local-account-runtime'
|
||||
import { getRendererAppPlatform } from '../../lib/renderer-app-platform'
|
||||
import { translate } from '@/i18n/i18n'
|
||||
import { getHostRuntimeLabel } from '../settings/accounts-pane-runtime'
|
||||
|
||||
export type CodexStatusRuntimeTarget = {
|
||||
runtime: 'host' | 'wsl'
|
||||
@@ -47,10 +49,6 @@ export type StatusSwitchGroupOptions = {
|
||||
hostLabel?: string
|
||||
}
|
||||
|
||||
function getHostRuntimeLabel(): string {
|
||||
return navigator.userAgent.includes('Windows') ? 'Windows' : 'This device'
|
||||
}
|
||||
|
||||
export function getCodexStatusWslKey(wslDistro: string | null | undefined): string {
|
||||
const trimmed = wslDistro?.trim()
|
||||
return trimmed ? trimmed : '__default__'
|
||||
@@ -63,7 +61,9 @@ export function getCodexStatusRuntimeLabel(
|
||||
if (target.runtime === 'host') {
|
||||
return hostLabel
|
||||
}
|
||||
return target.wslDistro ? `WSL ${target.wslDistro}` : 'WSL default'
|
||||
return target.wslDistro
|
||||
? `WSL ${target.wslDistro}`
|
||||
: translate('auto.components.status.bar.runtimeTargets.wslDefault', 'WSL default')
|
||||
}
|
||||
|
||||
export function getCodexStatusRuntimeKey(target: CodexStatusRuntimeTarget): string {
|
||||
|
||||
@@ -38,14 +38,16 @@ export {
|
||||
export function formatTimeAgo(ts: number): string {
|
||||
const diff = Date.now() - ts
|
||||
if (diff < 60_000) {
|
||||
return 'just now'
|
||||
return translate('auto.components.status.bar.tooltip.justNow', 'just now')
|
||||
}
|
||||
const mins = Math.floor(diff / 60_000)
|
||||
if (mins < 60) {
|
||||
return `${mins}m ago`
|
||||
return translate('auto.components.status.bar.tooltip.minutesAgo', '{{minutes}}m ago', {
|
||||
minutes: mins
|
||||
})
|
||||
}
|
||||
const hours = Math.floor(mins / 60)
|
||||
return `${hours}h ago`
|
||||
return translate('auto.components.status.bar.tooltip.hoursAgo', '{{hours}}h ago', { hours })
|
||||
}
|
||||
|
||||
// Preserve tooltip imports while sharing countdown formatting with mobile.
|
||||
@@ -299,7 +301,11 @@ export function ProviderPanel({
|
||||
)
|
||||
}
|
||||
|
||||
const updatedAgo = p.updatedAt ? `Updated ${formatTimeAgo(p.updatedAt)}` : 'Not yet updated'
|
||||
const updatedAgo = p.updatedAt
|
||||
? translate('auto.components.status.bar.tooltip.updatedAgo', 'Updated {{time}}', {
|
||||
time: formatTimeAgo(p.updatedAt)
|
||||
})
|
||||
: translate('auto.components.status.bar.tooltip.notYetUpdated', 'Not yet updated')
|
||||
const resetCreditCount =
|
||||
showResetCredits && p.provider === 'codex'
|
||||
? (p.rateLimitResetCredits?.availableCount ?? null)
|
||||
@@ -321,13 +327,14 @@ export function ProviderPanel({
|
||||
<div className={mutedClass}>
|
||||
{resetCreditCount === 1
|
||||
? translate(
|
||||
'auto.components.status.bar.tooltip.45198c7d95',
|
||||
'1 rate-limit reset available'
|
||||
'auto.components.status.bar.tooltip.rateLimitResetsAvailable_one',
|
||||
'{{count}} rate-limit reset available',
|
||||
{ count: resetCreditCount }
|
||||
)
|
||||
: translate(
|
||||
'auto.components.status.bar.tooltip.bce421cba3',
|
||||
'{{value0}} rate-limit resets available',
|
||||
{ value0: resetCreditCount }
|
||||
'auto.components.status.bar.tooltip.rateLimitResetsAvailable_other',
|
||||
'{{count}} rate-limit resets available',
|
||||
{ count: resetCreditCount }
|
||||
)}
|
||||
</div>
|
||||
) : null}
|
||||
|
||||
@@ -16,6 +16,7 @@ import { CLOSE_ALL_CONTEXT_MENUS_EVENT } from '@/lib/close-all-context-menus'
|
||||
import { useStatusBarDensity } from './status-bar-density'
|
||||
import { getUsageOwnerHostScope, useOwnerUsageRateLimits } from './use-owner-usage-rate-limits'
|
||||
import { isOwnerNotSetUpPlaceholder } from './owner-usage-rate-limits'
|
||||
import { translate } from '@/i18n/i18n'
|
||||
|
||||
export function useStatusBarController(floatingTerminalOpen: boolean) {
|
||||
const floatingTerminalShortcut = useShortcutLabel('floatingTerminal.toggle')
|
||||
@@ -204,8 +205,11 @@ export function useStatusBarController(floatingTerminalOpen: boolean) {
|
||||
zcode?.status === 'fetching'
|
||||
|
||||
const floatingTerminalActionLabel = floatingTerminalOpen
|
||||
? 'Minimize Floating Workspace'
|
||||
: 'Show Floating Workspace'
|
||||
? translate(
|
||||
'auto.components.status.bar.floatingWorkspace.minimize',
|
||||
'Minimize Floating Workspace'
|
||||
)
|
||||
: translate('auto.components.status.bar.floatingWorkspace.show', 'Show Floating Workspace')
|
||||
const showFloatingWorkspaceAttentionDot = !floatingTerminalOpen && hasFloatingUnread
|
||||
|
||||
// Respect per-item visibility in the roster so its trigger cannot bypass hidden status items.
|
||||
|
||||
@@ -6,6 +6,7 @@ import { useAppStore } from '../../store'
|
||||
import { findRepoForHost } from '../../store/slices/repo-host-identity'
|
||||
import { getRuntimeGitStatus } from '@/runtime/runtime-git-status-client'
|
||||
import type { useWorkspaceSpaceManagerBindings } from './use-workspace-space-manager-bindings'
|
||||
import { translate } from '@/i18n/i18n'
|
||||
|
||||
type WorkspaceSpaceManagerBindings = ReturnType<typeof useWorkspaceSpaceManagerBindings>
|
||||
|
||||
@@ -62,7 +63,14 @@ export function useWorkspaceSpaceGitRefreshAction(bindings: WorkspaceSpaceManage
|
||||
},
|
||||
{ includeLineStats: false, admissionTier: 'background' }
|
||||
)
|
||||
: Promise.reject(new Error('Workspace owner is no longer available'))
|
||||
: Promise.reject(
|
||||
new Error(
|
||||
translate(
|
||||
'auto.components.status.bar.workspaceSpaceGitRefresh.ownerUnavailable',
|
||||
'Workspace owner is no longer available'
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
.then((status) => {
|
||||
if (gitStatusScanGenerationRef.current !== scanGeneration) {
|
||||
|
||||
@@ -140,14 +140,18 @@ export function useWorkspaceSpaceManagerPanel() {
|
||||
'Workspaces deleted'
|
||||
),
|
||||
{
|
||||
description: translate(
|
||||
'auto.components.status.bar.WorkspaceSpaceManagerPanel.63efebe0e6',
|
||||
'{{value0}} {{value1}} removed from Space.',
|
||||
{
|
||||
value0: deletedTargets.length,
|
||||
value1: deletedTargets.length === 1 ? 'workspace' : 'workspaces'
|
||||
}
|
||||
)
|
||||
description:
|
||||
deletedTargets.length === 1
|
||||
? translate(
|
||||
'auto.components.status.bar.WorkspaceSpaceManagerPanel.removedFromSpace_one',
|
||||
'{{count}} workspace removed from Space.',
|
||||
{ count: deletedTargets.length }
|
||||
)
|
||||
: translate(
|
||||
'auto.components.status.bar.WorkspaceSpaceManagerPanel.removedFromSpace_other',
|
||||
'{{count}} workspaces removed from Space.',
|
||||
{ count: deletedTargets.length }
|
||||
)
|
||||
}
|
||||
)
|
||||
},
|
||||
|
||||
@@ -95,11 +95,23 @@ export function WorkspaceSpaceBreakdownList({
|
||||
{formatBytes(worktree.sizeBytes)}
|
||||
</div>
|
||||
<div className="text-[11px] text-muted-foreground">
|
||||
{formatCompactCount(topLevelItemCount)}{' '}
|
||||
{translate(
|
||||
'auto.components.status.bar.WorkspaceSpaceManagerPanel.b25c2c1086',
|
||||
'top-level items'
|
||||
)}
|
||||
{topLevelItemCount === 1
|
||||
? translate(
|
||||
'auto.components.status.bar.WorkspaceSpaceManagerPanel.topLevelItems_one',
|
||||
'{{formattedCount}} top-level item',
|
||||
{
|
||||
count: topLevelItemCount,
|
||||
formattedCount: formatCompactCount(topLevelItemCount)
|
||||
}
|
||||
)
|
||||
: translate(
|
||||
'auto.components.status.bar.WorkspaceSpaceManagerPanel.topLevelItems_other',
|
||||
'{{formattedCount}} top-level items',
|
||||
{
|
||||
count: topLevelItemCount,
|
||||
formattedCount: formatCompactCount(topLevelItemCount)
|
||||
}
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -17,6 +17,7 @@ import { countWorkspaceSpaceActiveAgents } from './workspace-space-presentation'
|
||||
import { getWorkspaceSpaceWorktreeIdentity } from './workspace-space-delete-selection'
|
||||
import { getWorkspaceSpaceBranchLabel } from './workspace-space-format'
|
||||
import { formatHostedReviewLabel } from './hosted-review-label'
|
||||
import { translate } from '@/i18n/i18n'
|
||||
|
||||
export type WorkspaceDecisionDetails = {
|
||||
isActive: boolean
|
||||
@@ -75,10 +76,6 @@ export type WorkspaceDecisionInputs = {
|
||||
now: number
|
||||
}
|
||||
|
||||
export function pluralize(count: number, singular: string, plural = `${singular}s`): string {
|
||||
return `${count} ${count === 1 ? singular : plural}`
|
||||
}
|
||||
|
||||
function countLiveTerminals(
|
||||
tabs: readonly TerminalTab[],
|
||||
ptyIdsByTabId: Record<string, string[]>
|
||||
@@ -93,16 +90,28 @@ function getBranchStatus(
|
||||
return null
|
||||
}
|
||||
if (status.ahead === 0 && status.behind === 0) {
|
||||
return 'Synced with upstream'
|
||||
return translate(
|
||||
'auto.components.status.bar.workspaceSpaceDecision.syncedWithUpstream',
|
||||
'Synced with upstream'
|
||||
)
|
||||
}
|
||||
const parts: string[] = []
|
||||
if (status.ahead > 0) {
|
||||
parts.push(`${status.ahead} ahead`)
|
||||
if (status.ahead > 0 && status.behind > 0) {
|
||||
return translate(
|
||||
'auto.components.status.bar.workspaceSpaceDecision.aheadAndBehind',
|
||||
'{{ahead}} ahead, {{behind}} behind',
|
||||
{
|
||||
ahead: status.ahead,
|
||||
behind: status.behind
|
||||
}
|
||||
)
|
||||
}
|
||||
if (status.behind > 0) {
|
||||
parts.push(`${status.behind} behind`)
|
||||
}
|
||||
return parts.join(', ')
|
||||
return status.ahead > 0
|
||||
? translate('auto.components.status.bar.workspaceSpaceDecision.ahead', '{{ahead}} ahead', {
|
||||
ahead: status.ahead
|
||||
})
|
||||
: translate('auto.components.status.bar.workspaceSpaceDecision.behind', '{{behind}} behind', {
|
||||
behind: status.behind
|
||||
})
|
||||
}
|
||||
|
||||
export function getWorkspaceDecisionDetails(
|
||||
|
||||
@@ -11,15 +11,18 @@ import type { WorkspaceSpaceWorktree } from '../../../../shared/workspace-space-
|
||||
import { cn } from '@/lib/utils'
|
||||
import { Button } from '../ui/button'
|
||||
import { HoverCardContent } from '../ui/hover-card'
|
||||
import {
|
||||
formatBytes,
|
||||
getWorkspaceSpaceBranchLabel,
|
||||
getWorkspaceSpaceStatusLabel
|
||||
} from './workspace-space-format'
|
||||
import { formatBytes, getWorkspaceSpaceBranchLabel } from './workspace-space-format'
|
||||
import { translate } from '@/i18n/i18n'
|
||||
import { pluralize, type WorkspaceDecisionDetails } from './workspace-space-decision-details'
|
||||
import type { WorkspaceDecisionDetails } from './workspace-space-decision-details'
|
||||
import type { WorkspaceGitRefreshState } from './workspace-space-manager-state-types'
|
||||
import { WorkspaceSpaceStatusBadge } from './workspace-space-status-badge'
|
||||
import {
|
||||
getAgentDecisionLabel,
|
||||
getDeleteDecisionLabel,
|
||||
getEditorDecisionLabel,
|
||||
getGitDecisionLabel,
|
||||
getTerminalDecisionLabel
|
||||
} from './workspace-space-decision-labels'
|
||||
|
||||
function DecisionLine({
|
||||
icon,
|
||||
@@ -54,77 +57,6 @@ function DecisionLine({
|
||||
)
|
||||
}
|
||||
|
||||
function getAgentDecisionLabel(details: WorkspaceDecisionDetails): string {
|
||||
if (details.activeAgentCount > 0 && details.completedAgentCount > 0) {
|
||||
return `${pluralize(details.activeAgentCount, 'active agent')}, ${pluralize(
|
||||
details.completedAgentCount,
|
||||
'completed agent'
|
||||
)}`
|
||||
}
|
||||
if (details.activeAgentCount > 0) {
|
||||
return pluralize(details.activeAgentCount, 'active agent')
|
||||
}
|
||||
if (details.completedAgentCount > 0) {
|
||||
return `${pluralize(details.completedAgentCount, 'completed agent')} retained`
|
||||
}
|
||||
return 'No tracked agents running'
|
||||
}
|
||||
|
||||
function getTerminalDecisionLabel(details: WorkspaceDecisionDetails): string {
|
||||
if (details.terminalTabCount === 0) {
|
||||
return 'No terminal tabs'
|
||||
}
|
||||
return `${details.liveTerminalCount} live of ${pluralize(details.terminalTabCount, 'terminal tab')}`
|
||||
}
|
||||
|
||||
function getGitDecisionLabel(
|
||||
details: WorkspaceDecisionDetails,
|
||||
gitRefreshState?: WorkspaceGitRefreshState
|
||||
): string {
|
||||
if (details.changedFileCount === null) {
|
||||
if (gitRefreshState?.error) {
|
||||
return `Git status unavailable: ${gitRefreshState.error}`
|
||||
}
|
||||
return 'Git status has not loaded yet'
|
||||
}
|
||||
if (details.changedFileCount === 0) {
|
||||
return 'No uncommitted files'
|
||||
}
|
||||
return pluralize(details.changedFileCount, 'changed file')
|
||||
}
|
||||
|
||||
function getEditorDecisionLabel(details: WorkspaceDecisionDetails): string {
|
||||
if (details.openEditorFileCount === 0) {
|
||||
return 'No editor files open'
|
||||
}
|
||||
if (details.dirtyEditorBufferCount === 0) {
|
||||
return `${pluralize(details.openEditorFileCount, 'editor file')} open`
|
||||
}
|
||||
return `${pluralize(details.dirtyEditorBufferCount, 'dirty editor buffer')} of ${pluralize(
|
||||
details.openEditorFileCount,
|
||||
'open file'
|
||||
)}`
|
||||
}
|
||||
|
||||
function getDeleteDecisionLabel(
|
||||
worktree: WorkspaceSpaceWorktree,
|
||||
details: WorkspaceDecisionDetails
|
||||
): string {
|
||||
if (details.isActive) {
|
||||
return 'This is the active workspace'
|
||||
}
|
||||
if (worktree.status !== 'ok') {
|
||||
return worktree.error ?? getWorkspaceSpaceStatusLabel(worktree.status)
|
||||
}
|
||||
if (worktree.isMainWorktree) {
|
||||
return 'Main worktree is protected'
|
||||
}
|
||||
if (!worktree.canDelete) {
|
||||
return 'Workspace is protected'
|
||||
}
|
||||
return 'Can be deleted after review'
|
||||
}
|
||||
|
||||
export function WorkspaceDecisionHoverCard({
|
||||
worktree,
|
||||
details,
|
||||
@@ -138,7 +70,8 @@ export function WorkspaceDecisionHoverCard({
|
||||
}): React.JSX.Element {
|
||||
const deleteDecision = getDeleteDecisionLabel(worktree, details)
|
||||
const issueLabel =
|
||||
[details.issueLabel, details.linearIssueLabel].filter(Boolean).join(' · ') || 'No linked issue'
|
||||
[details.issueLabel, details.linearIssueLabel].filter(Boolean).join(' · ') ||
|
||||
translate('auto.components.status.bar.workspaceSpaceDecision.noLinkedIssue', 'No linked issue')
|
||||
return (
|
||||
<HoverCardContent
|
||||
align="end"
|
||||
@@ -219,7 +152,13 @@ export function WorkspaceDecisionHoverCard({
|
||||
'auto.components.status.bar.WorkspaceSpaceManagerPanel.fb2069acb7',
|
||||
'Review'
|
||||
)}
|
||||
value={details.reviewLabel ?? 'No linked PR'}
|
||||
value={
|
||||
details.reviewLabel ??
|
||||
translate(
|
||||
'auto.components.status.bar.workspaceSpaceDecision.noLinkedReview',
|
||||
'No linked PR'
|
||||
)
|
||||
}
|
||||
/>
|
||||
<DecisionLine
|
||||
icon={<ExternalLink />}
|
||||
@@ -234,11 +173,17 @@ export function WorkspaceDecisionHoverCard({
|
||||
<div className="flex items-center justify-between gap-3 border-t border-border/60 px-4 py-3">
|
||||
<div className="min-w-0 truncate font-mono text-[11px] text-muted-foreground">
|
||||
{details.browserTabCount > 0
|
||||
? translate(
|
||||
'auto.components.status.bar.WorkspaceSpaceManagerPanel.131662ac65',
|
||||
'{{value0}} open',
|
||||
{ value0: pluralize(details.browserTabCount, 'browser tab') }
|
||||
)
|
||||
? details.browserTabCount === 1
|
||||
? translate(
|
||||
'auto.components.status.bar.workspaceSpaceDecision.browserTabsOpen_one',
|
||||
'{{count}} browser tab open',
|
||||
{ count: details.browserTabCount }
|
||||
)
|
||||
: translate(
|
||||
'auto.components.status.bar.workspaceSpaceDecision.browserTabsOpen_other',
|
||||
'{{count}} browser tabs open',
|
||||
{ count: details.browserTabCount }
|
||||
)
|
||||
: worktree.path}
|
||||
</div>
|
||||
<Button
|
||||
|
||||
@@ -0,0 +1,215 @@
|
||||
import type { WorkspaceSpaceWorktree } from '../../../../shared/workspace-space-types'
|
||||
import { translate } from '@/i18n/i18n'
|
||||
import { getWorkspaceSpaceStatusLabel } from './workspace-space-format'
|
||||
import type { WorkspaceDecisionDetails } from './workspace-space-decision-details'
|
||||
import type { WorkspaceGitRefreshState } from './workspace-space-manager-state-types'
|
||||
|
||||
function formatActiveAgents(count: number): string {
|
||||
return count === 1
|
||||
? translate(
|
||||
'auto.components.status.bar.workspaceSpaceDecision.activeAgents_one',
|
||||
'{{count}} active agent',
|
||||
{ count: count }
|
||||
)
|
||||
: translate(
|
||||
'auto.components.status.bar.workspaceSpaceDecision.activeAgents_other',
|
||||
'{{count}} active agents',
|
||||
{ count: count }
|
||||
)
|
||||
}
|
||||
|
||||
function formatCompletedAgents(count: number): string {
|
||||
return count === 1
|
||||
? translate(
|
||||
'auto.components.status.bar.workspaceSpaceDecision.completedAgents_one',
|
||||
'{{count}} completed agent',
|
||||
{ count: count }
|
||||
)
|
||||
: translate(
|
||||
'auto.components.status.bar.workspaceSpaceDecision.completedAgents_other',
|
||||
'{{count}} completed agents',
|
||||
{ count: count }
|
||||
)
|
||||
}
|
||||
|
||||
export function getAgentDecisionLabel(details: WorkspaceDecisionDetails): string {
|
||||
const { activeAgentCount, completedAgentCount } = details
|
||||
if (activeAgentCount > 0 && completedAgentCount > 0) {
|
||||
return translate(
|
||||
'auto.components.status.bar.workspaceSpaceDecision.activeAndCompletedAgents',
|
||||
'{{active}}, {{completed}}',
|
||||
{
|
||||
active: formatActiveAgents(activeAgentCount),
|
||||
completed: formatCompletedAgents(completedAgentCount)
|
||||
}
|
||||
)
|
||||
}
|
||||
if (activeAgentCount > 0) {
|
||||
return formatActiveAgents(activeAgentCount)
|
||||
}
|
||||
if (completedAgentCount > 0) {
|
||||
return completedAgentCount === 1
|
||||
? translate(
|
||||
'auto.components.status.bar.workspaceSpaceDecision.completedAgentsRetained_one',
|
||||
'{{count}} completed agent retained',
|
||||
{ count: completedAgentCount }
|
||||
)
|
||||
: translate(
|
||||
'auto.components.status.bar.workspaceSpaceDecision.completedAgentsRetained_other',
|
||||
'{{count}} completed agents retained',
|
||||
{ count: completedAgentCount }
|
||||
)
|
||||
}
|
||||
return translate(
|
||||
'auto.components.status.bar.workspaceSpaceDecision.noTrackedAgents',
|
||||
'No tracked agents running'
|
||||
)
|
||||
}
|
||||
|
||||
export function getTerminalDecisionLabel(details: WorkspaceDecisionDetails): string {
|
||||
const { terminalTabCount, liveTerminalCount } = details
|
||||
if (terminalTabCount === 0) {
|
||||
return translate(
|
||||
'auto.components.status.bar.workspaceSpaceDecision.noTerminalTabs',
|
||||
'No terminal tabs'
|
||||
)
|
||||
}
|
||||
return terminalTabCount === 1
|
||||
? translate(
|
||||
'auto.components.status.bar.workspaceSpaceDecision.liveTerminalTabs_one',
|
||||
'{{live}} live of {{count}} terminal tab',
|
||||
{
|
||||
live: liveTerminalCount,
|
||||
count: terminalTabCount
|
||||
}
|
||||
)
|
||||
: translate(
|
||||
'auto.components.status.bar.workspaceSpaceDecision.liveTerminalTabs_other',
|
||||
'{{live}} live of {{count}} terminal tabs',
|
||||
{
|
||||
live: liveTerminalCount,
|
||||
count: terminalTabCount
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
export function getGitDecisionLabel(
|
||||
details: WorkspaceDecisionDetails,
|
||||
gitRefreshState?: WorkspaceGitRefreshState
|
||||
): string {
|
||||
const { changedFileCount } = details
|
||||
if (changedFileCount === null) {
|
||||
if (gitRefreshState?.error) {
|
||||
return translate(
|
||||
'auto.components.status.bar.workspaceSpaceDecision.gitStatusUnavailable',
|
||||
'Git status unavailable: {{error}}',
|
||||
{ error: gitRefreshState.error }
|
||||
)
|
||||
}
|
||||
return translate(
|
||||
'auto.components.status.bar.workspaceSpaceDecision.gitStatusNotLoaded',
|
||||
'Git status has not loaded yet'
|
||||
)
|
||||
}
|
||||
if (changedFileCount === 0) {
|
||||
return translate(
|
||||
'auto.components.status.bar.workspaceSpaceDecision.noUncommittedFiles',
|
||||
'No uncommitted files'
|
||||
)
|
||||
}
|
||||
return changedFileCount === 1
|
||||
? translate(
|
||||
'auto.components.status.bar.workspaceSpaceDecision.changedFiles_one',
|
||||
'{{count}} changed file',
|
||||
{ count: changedFileCount }
|
||||
)
|
||||
: translate(
|
||||
'auto.components.status.bar.workspaceSpaceDecision.changedFiles_other',
|
||||
'{{count}} changed files',
|
||||
{ count: changedFileCount }
|
||||
)
|
||||
}
|
||||
|
||||
export function getEditorDecisionLabel(details: WorkspaceDecisionDetails): string {
|
||||
const { openEditorFileCount, dirtyEditorBufferCount } = details
|
||||
if (openEditorFileCount === 0) {
|
||||
return translate(
|
||||
'auto.components.status.bar.workspaceSpaceDecision.noEditorFiles',
|
||||
'No editor files open'
|
||||
)
|
||||
}
|
||||
if (dirtyEditorBufferCount === 0) {
|
||||
return openEditorFileCount === 1
|
||||
? translate(
|
||||
'auto.components.status.bar.workspaceSpaceDecision.editorFilesOpen_one',
|
||||
'{{count}} editor file open',
|
||||
{ count: openEditorFileCount }
|
||||
)
|
||||
: translate(
|
||||
'auto.components.status.bar.workspaceSpaceDecision.editorFilesOpen_other',
|
||||
'{{count}} editor files open',
|
||||
{ count: openEditorFileCount }
|
||||
)
|
||||
}
|
||||
return translate(
|
||||
'auto.components.status.bar.workspaceSpaceDecision.dirtyOfOpen',
|
||||
'{{dirty}} of {{open}}',
|
||||
{
|
||||
dirty:
|
||||
dirtyEditorBufferCount === 1
|
||||
? translate(
|
||||
'auto.components.status.bar.workspaceSpaceDecision.dirtyEditorBuffers_one',
|
||||
'{{count}} dirty editor buffer',
|
||||
{ count: dirtyEditorBufferCount }
|
||||
)
|
||||
: translate(
|
||||
'auto.components.status.bar.workspaceSpaceDecision.dirtyEditorBuffers_other',
|
||||
'{{count}} dirty editor buffers',
|
||||
{ count: dirtyEditorBufferCount }
|
||||
),
|
||||
open:
|
||||
openEditorFileCount === 1
|
||||
? translate(
|
||||
'auto.components.status.bar.workspaceSpaceDecision.openFiles_one',
|
||||
'{{count}} open file',
|
||||
{ count: openEditorFileCount }
|
||||
)
|
||||
: translate(
|
||||
'auto.components.status.bar.workspaceSpaceDecision.openFiles_other',
|
||||
'{{count}} open files',
|
||||
{ count: openEditorFileCount }
|
||||
)
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
export function getDeleteDecisionLabel(
|
||||
worktree: WorkspaceSpaceWorktree,
|
||||
details: WorkspaceDecisionDetails
|
||||
): string {
|
||||
if (details.isActive) {
|
||||
return translate(
|
||||
'auto.components.status.bar.workspaceSpaceDecision.activeWorkspace',
|
||||
'This is the active workspace'
|
||||
)
|
||||
}
|
||||
if (worktree.status !== 'ok') {
|
||||
return worktree.error ?? getWorkspaceSpaceStatusLabel(worktree.status)
|
||||
}
|
||||
if (worktree.isMainWorktree) {
|
||||
return translate(
|
||||
'auto.components.status.bar.workspaceSpaceDecision.mainWorktreeProtected',
|
||||
'Main worktree is protected'
|
||||
)
|
||||
}
|
||||
if (!worktree.canDelete) {
|
||||
return translate(
|
||||
'auto.components.status.bar.workspaceSpaceDecision.workspaceProtected',
|
||||
'Workspace is protected'
|
||||
)
|
||||
}
|
||||
return translate(
|
||||
'auto.components.status.bar.workspaceSpaceDecision.canDeleteAfterReview',
|
||||
'Can be deleted after review'
|
||||
)
|
||||
}
|
||||
@@ -4,6 +4,7 @@ import type {
|
||||
WorkspaceSpaceWorktree
|
||||
} from '../../../../shared/workspace-space-types'
|
||||
import { formatUiRelativeTime } from '@/i18n/relative-time-format'
|
||||
import { translate } from '@/i18n/i18n'
|
||||
|
||||
export { formatBytes } from '../../../../shared/format-bytes'
|
||||
|
||||
@@ -40,36 +41,85 @@ export function getWorkspaceSpaceProgressLabel(
|
||||
return null
|
||||
}
|
||||
if (progress.state === 'cancelling') {
|
||||
return 'Cancelling scan'
|
||||
return translate(
|
||||
'auto.components.status.bar.workspaceSpaceFormat.cancellingScan',
|
||||
'Cancelling scan'
|
||||
)
|
||||
}
|
||||
|
||||
const current =
|
||||
progress.currentWorktreeDisplayName ?? progress.currentRepoDisplayName ?? 'workspaces'
|
||||
progress.currentWorktreeDisplayName ??
|
||||
progress.currentRepoDisplayName ??
|
||||
translate('auto.components.status.bar.workspaceSpaceFormat.currentWorkspaces', 'workspaces')
|
||||
if (progress.totalWorktreeCount > 0) {
|
||||
return `Scanning ${progress.scannedWorktreeCount} of ${progress.totalWorktreeCount} · ${current}`
|
||||
return translate(
|
||||
'auto.components.status.bar.workspaceSpaceFormat.scanningWorkspaces',
|
||||
'Scanning {{scanned}} of {{total}} · {{current}}',
|
||||
{
|
||||
scanned: progress.scannedWorktreeCount,
|
||||
total: progress.totalWorktreeCount,
|
||||
current
|
||||
}
|
||||
)
|
||||
}
|
||||
if (progress.totalRepoCount > 0) {
|
||||
return `Scanning ${progress.scannedRepoCount} of ${progress.totalRepoCount} repos · ${current}`
|
||||
return progress.totalRepoCount === 1
|
||||
? translate(
|
||||
'auto.components.status.bar.workspaceSpaceFormat.scanningRepos_one',
|
||||
'Scanning {{scanned}} of {{count}} repo · {{current}}',
|
||||
{
|
||||
scanned: progress.scannedRepoCount,
|
||||
count: progress.totalRepoCount,
|
||||
current
|
||||
}
|
||||
)
|
||||
: translate(
|
||||
'auto.components.status.bar.workspaceSpaceFormat.scanningRepos_other',
|
||||
'Scanning {{scanned}} of {{count}} repos · {{current}}',
|
||||
{
|
||||
scanned: progress.scannedRepoCount,
|
||||
count: progress.totalRepoCount,
|
||||
current
|
||||
}
|
||||
)
|
||||
}
|
||||
return 'Scanning workspace sizes'
|
||||
return getWorkspaceSpaceScanningFallbackLabel()
|
||||
}
|
||||
|
||||
export function getWorkspaceSpaceScanningFallbackLabel(): string {
|
||||
return translate(
|
||||
'auto.components.status.bar.workspaceSpaceFormat.scanningSizes',
|
||||
'Scanning workspace sizes'
|
||||
)
|
||||
}
|
||||
|
||||
export function getWorkspaceSpaceStatusLabel(status: WorkspaceSpaceScanStatus): string {
|
||||
switch (status) {
|
||||
case 'ok':
|
||||
return 'Scanned'
|
||||
return translate('auto.components.status.bar.workspaceSpaceFormat.status.scanned', 'Scanned')
|
||||
case 'missing':
|
||||
return 'Missing'
|
||||
return translate('auto.components.status.bar.workspaceSpaceFormat.status.missing', 'Missing')
|
||||
case 'permission-denied':
|
||||
return 'No access'
|
||||
return translate(
|
||||
'auto.components.status.bar.workspaceSpaceFormat.status.noAccess',
|
||||
'No access'
|
||||
)
|
||||
case 'unavailable':
|
||||
return 'Unavailable'
|
||||
return translate(
|
||||
'auto.components.status.bar.workspaceSpaceFormat.status.unavailable',
|
||||
'Unavailable'
|
||||
)
|
||||
case 'error':
|
||||
return 'Failed'
|
||||
return translate('auto.components.status.bar.workspaceSpaceFormat.status.failed', 'Failed')
|
||||
}
|
||||
}
|
||||
|
||||
export function getWorkspaceSpaceBranchLabel(worktree: WorkspaceSpaceWorktree): string {
|
||||
const branch = worktree.branch.replace(/^refs\/heads\//, '').trim()
|
||||
return branch || (worktree.isMainWorktree ? 'main worktree' : 'detached')
|
||||
return (
|
||||
branch ||
|
||||
(worktree.isMainWorktree
|
||||
? translate('auto.components.status.bar.workspaceSpaceFormat.mainWorktree', 'main worktree')
|
||||
: translate('auto.components.status.bar.workspaceSpaceFormat.detached', 'detached'))
|
||||
)
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { AlertTriangle, HardDrive, Loader2, RefreshCw, X } from 'lucide-react'
|
||||
import { Button } from '../ui/button'
|
||||
import { Popover, PopoverContent, PopoverTrigger } from '../ui/popover'
|
||||
import { formatBytes } from './workspace-space-format'
|
||||
import { formatBytes, getWorkspaceSpaceScanningFallbackLabel } from './workspace-space-format'
|
||||
import { translate } from '@/i18n/i18n'
|
||||
import { Metric, UpdatedMetric } from './workspace-space-metrics'
|
||||
import { WorkspaceSpaceTreemap } from './workspace-space-treemap'
|
||||
@@ -133,12 +133,16 @@ export function WorkspaceSpaceManagerOverview({
|
||||
? translate(
|
||||
'auto.components.status.bar.WorkspaceSpaceManagerPanel.34174bd83d',
|
||||
'{{value0}}. You can leave this page; the last result stays visible.',
|
||||
{ value0: progressLabel ?? 'Scanning workspace sizes' }
|
||||
{
|
||||
value0: progressLabel ?? getWorkspaceSpaceScanningFallbackLabel()
|
||||
}
|
||||
)
|
||||
: translate(
|
||||
'auto.components.status.bar.WorkspaceSpaceManagerPanel.265d956765',
|
||||
'{{value0}}. You can leave this page.',
|
||||
{ value0: progressLabel ?? 'Scanning workspace sizes' }
|
||||
{
|
||||
value0: progressLabel ?? getWorkspaceSpaceScanningFallbackLabel()
|
||||
}
|
||||
)}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
@@ -36,18 +36,26 @@ export function WorkspaceSpaceManagerToolbar({
|
||||
<div className="flex items-center justify-between gap-2 rounded-md border border-border/70 bg-background/95 px-2 py-1 shadow-xs">
|
||||
<div className="min-w-0 text-xs text-muted-foreground">
|
||||
<span className="font-medium text-foreground">
|
||||
{selectedDeletableIds.length}{' '}
|
||||
{translate(
|
||||
'auto.components.status.bar.WorkspaceSpaceManagerPanel.65402b7192',
|
||||
'selected'
|
||||
)}
|
||||
{selectedDeletableIds.length === 1
|
||||
? translate(
|
||||
'auto.components.status.bar.WorkspaceSpaceManagerPanel.selectedCount_one',
|
||||
'{{count}} selected',
|
||||
{ count: selectedDeletableIds.length }
|
||||
)
|
||||
: translate(
|
||||
'auto.components.status.bar.WorkspaceSpaceManagerPanel.selectedCount_other',
|
||||
'{{count}} selected',
|
||||
{ count: selectedDeletableIds.length }
|
||||
)}
|
||||
</span>
|
||||
<span className="mx-1.5">·</span>
|
||||
<span>
|
||||
{formatBytes(selectedReclaimableBytes)}{' '}
|
||||
{translate(
|
||||
'auto.components.status.bar.WorkspaceSpaceManagerPanel.0cb1501ccf',
|
||||
'reclaimable'
|
||||
'auto.components.status.bar.WorkspaceSpaceManagerPanel.reclaimableSize',
|
||||
'{{size}} reclaimable',
|
||||
{
|
||||
size: formatBytes(selectedReclaimableBytes)
|
||||
}
|
||||
)}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
@@ -75,7 +75,10 @@ export function UpdatedMetric({
|
||||
value={
|
||||
scannedAt === null
|
||||
? isScanning
|
||||
? 'Scanning'
|
||||
? translate(
|
||||
'auto.components.status.bar.WorkspaceSpaceManagerPanel.scanning',
|
||||
'Scanning'
|
||||
)
|
||||
: '—'
|
||||
: getWorkspaceSpaceScanTimeLabel(scannedAt, now)
|
||||
}
|
||||
|
||||
@@ -39,7 +39,7 @@ import { useAppStore } from '@/store'
|
||||
|
||||
export function formatBrowserTabUrlLabel(url: string): string {
|
||||
if (url === ORCA_BROWSER_BLANK_URL || url === 'about:blank') {
|
||||
return 'New Tab'
|
||||
return translate('auto.components.browser.pane.BrowserPane.366bf5d62c', 'New Tab')
|
||||
}
|
||||
try {
|
||||
const parsed = new URL(url)
|
||||
|
||||
@@ -27,6 +27,7 @@ import {
|
||||
resolveNativeChatCliForkIdentity,
|
||||
type NativeChatCliForkIdentity
|
||||
} from './tab-session-history-switch'
|
||||
import { translate } from '@/i18n/i18n'
|
||||
|
||||
const pending = new Map<string, AbortController>()
|
||||
const listeners = new Set<() => void>()
|
||||
@@ -129,7 +130,12 @@ export async function runNativeChatCliFork(args: {
|
||||
? buildAiVaultCopiedSessionStartupForWorktree(startupArgs, prepared.sourceAgent ?? args.agent)
|
||||
: buildAiVaultForkStartupForWorktree(startupArgs)
|
||||
if (!startup) {
|
||||
throw new Error('This session cannot be opened in the CLI.')
|
||||
throw new Error(
|
||||
translate(
|
||||
'auto.components.tab.bar.nativeChatCliFork.cannotOpenInCli',
|
||||
'This session cannot be opened in the CLI.'
|
||||
)
|
||||
)
|
||||
}
|
||||
// The destination takes over synchronously; closing the source afterward must not cancel it.
|
||||
if (!isCurrent()) {
|
||||
|
||||
@@ -1,4 +1,8 @@
|
||||
import { detectLanguage } from '@/lib/language-detect'
|
||||
import {
|
||||
getTabEntryCannotOpenDirectoryMessage,
|
||||
getTabEntryFileNotFoundMessage
|
||||
} from './tab-create-entry-copy'
|
||||
import { toWorktreeRelativePath } from '../../../../shared/terminal-links'
|
||||
import type { RuntimeFileOperationArgs } from '@/runtime/runtime-file-client-types'
|
||||
import type { OpenFile } from '@/store/slices/editor'
|
||||
@@ -32,10 +36,10 @@ export async function openAbsoluteTabEntryFile(args: {
|
||||
try {
|
||||
stat = await args.operations.statUserOpenedPath(args.context, filePath)
|
||||
} catch {
|
||||
throw new Error(`File not found: ${filePath}`)
|
||||
throw new Error(getTabEntryFileNotFoundMessage(filePath))
|
||||
}
|
||||
if (stat.isDirectory) {
|
||||
throw new Error(`Cannot open a directory: ${filePath}`)
|
||||
throw new Error(getTabEntryCannotOpenDirectoryMessage(filePath))
|
||||
}
|
||||
args.operations.assertAbsolutePathAllowed()
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { describe, expect, it, vi } from 'vitest'
|
||||
import {
|
||||
openTabEntryWithOperations,
|
||||
TAB_ENTRY_ABSOLUTE_PATH_REMOTE_BLOCKED_MESSAGE,
|
||||
getTabEntryAbsolutePathRemoteBlockedMessage,
|
||||
type TabEntryOperations
|
||||
} from './tab-create-entry-action'
|
||||
|
||||
@@ -348,7 +348,7 @@ describe('openTabEntryWithOperations', () => {
|
||||
query: '/tmp/notes.md',
|
||||
operations
|
||||
})
|
||||
).rejects.toThrow(TAB_ENTRY_ABSOLUTE_PATH_REMOTE_BLOCKED_MESSAGE)
|
||||
).rejects.toThrow(getTabEntryAbsolutePathRemoteBlockedMessage())
|
||||
|
||||
expect(operations.statUserOpenedPath).not.toHaveBeenCalled()
|
||||
expect(operations.createRuntimePath).not.toHaveBeenCalled()
|
||||
@@ -398,7 +398,7 @@ describe('openTabEntryWithOperations', () => {
|
||||
statUserOpenedPath: vi.fn(() => statResult),
|
||||
assertAbsolutePathAllowed: vi.fn(() => {
|
||||
if (!allowed) {
|
||||
throw new Error(TAB_ENTRY_ABSOLUTE_PATH_REMOTE_BLOCKED_MESSAGE)
|
||||
throw new Error(getTabEntryAbsolutePathRemoteBlockedMessage())
|
||||
}
|
||||
})
|
||||
})
|
||||
@@ -410,9 +410,7 @@ describe('openTabEntryWithOperations', () => {
|
||||
operations
|
||||
})
|
||||
await vi.waitFor(() => expect(operations.statUserOpenedPath).toHaveBeenCalledTimes(1))
|
||||
const rejection = expect(opening).rejects.toThrow(
|
||||
TAB_ENTRY_ABSOLUTE_PATH_REMOTE_BLOCKED_MESSAGE
|
||||
)
|
||||
const rejection = expect(opening).rejects.toThrow(getTabEntryAbsolutePathRemoteBlockedMessage())
|
||||
allowed = false
|
||||
releaseStat?.()
|
||||
await rejection
|
||||
|
||||
@@ -15,11 +15,17 @@ import type { RuntimeFileListState } from '../quick-open-file-list'
|
||||
import { openWorkspaceBrowserTab } from '@/lib/workspace-browser-tab-open'
|
||||
import {
|
||||
classifyTabEntryQuery,
|
||||
TAB_ENTRY_ABSOLUTE_PATH_REMOTE_BLOCKED_MESSAGE,
|
||||
getTabEntryAbsolutePathRemoteBlockedMessage,
|
||||
type TabEntryActionClassification,
|
||||
type TabEntryOptionsContext
|
||||
} from './tab-create-entry-classifier'
|
||||
import { openAbsoluteTabEntryFile } from './tab-create-entry-absolute-file'
|
||||
import {
|
||||
getTabEntryCannotOpenDirectoryMessage,
|
||||
getTabEntryFileNoLongerExistsMessage,
|
||||
getTabEntryNoActiveWorktreeMessage,
|
||||
getTabEntryParentNotDirectoryMessage
|
||||
} from './tab-create-entry-copy'
|
||||
import { getNetworkTabRequest, isNetworkTabEntry } from './tab-create-entry-browser-request'
|
||||
import {
|
||||
getTabEntryAllowAbsolutePaths,
|
||||
@@ -30,7 +36,7 @@ export {
|
||||
classifyTabEntryQuery,
|
||||
getTabEntryOptions,
|
||||
isTabEntryAbsolutePathLike,
|
||||
TAB_ENTRY_ABSOLUTE_PATH_REMOTE_BLOCKED_MESSAGE,
|
||||
getTabEntryAbsolutePathRemoteBlockedMessage,
|
||||
validateNewTabEntryAbsolutePath,
|
||||
validateNewTabEntryRelativePath,
|
||||
type TabEntryActionClassification,
|
||||
@@ -114,7 +120,7 @@ async function createParentDirectoriesForNewFile(args: {
|
||||
}
|
||||
const stat = await args.operations.statRuntimePath(args.context, currentPath)
|
||||
if (!stat.isDirectory) {
|
||||
throw new Error(`Cannot create file because ${currentPath} is not a directory.`)
|
||||
throw new Error(getTabEntryParentNotDirectoryMessage(currentPath))
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -134,11 +140,11 @@ async function openExistingFile(args: {
|
||||
try {
|
||||
stat = await args.operations.statRuntimePath(args.context, filePath)
|
||||
} catch {
|
||||
throw new Error(`File no longer exists: ${args.relativePath}`)
|
||||
throw new Error(getTabEntryFileNoLongerExistsMessage(args.relativePath))
|
||||
}
|
||||
args.assertCurrent()
|
||||
if (stat.isDirectory) {
|
||||
throw new Error(`Cannot open a directory: ${args.relativePath}`)
|
||||
throw new Error(getTabEntryCannotOpenDirectoryMessage(args.relativePath))
|
||||
}
|
||||
args.operations.openFile(
|
||||
{
|
||||
@@ -192,7 +198,7 @@ export async function openTabEntryWithOperations({
|
||||
|
||||
if (classification.kind === 'absolute-file') {
|
||||
if (!allowAbsolutePaths) {
|
||||
throw new Error(TAB_ENTRY_ABSOLUTE_PATH_REMOTE_BLOCKED_MESSAGE)
|
||||
throw new Error(getTabEntryAbsolutePathRemoteBlockedMessage())
|
||||
}
|
||||
await openAbsoluteTabEntryFile({
|
||||
context: runtimeContext,
|
||||
@@ -257,7 +263,7 @@ export async function openTabBarEntry(args: TabCreateEntryArgs): Promise<void> {
|
||||
getFileContext: () => {
|
||||
const worktree = state.getKnownWorktreeById(args.worktreeId)
|
||||
if (!worktree) {
|
||||
throw new Error('No active worktree.')
|
||||
throw new Error(getTabEntryNoActiveWorktreeMessage())
|
||||
}
|
||||
const provenance = captureEditorFileOperationProvenance(
|
||||
state,
|
||||
@@ -287,7 +293,7 @@ export async function openTabBarEntry(args: TabCreateEntryArgs): Promise<void> {
|
||||
statUserOpenedPath,
|
||||
assertAbsolutePathAllowed: () => {
|
||||
if (!getTabEntryAllowAbsolutePaths(useAppStore.getState(), args.worktreeId)) {
|
||||
throw new Error(TAB_ENTRY_ABSOLUTE_PATH_REMOTE_BLOCKED_MESSAGE)
|
||||
throw new Error(getTabEntryAbsolutePathRemoteBlockedMessage())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@ import { QUICK_OPEN_QUERY_MAX_BYTES } from '../quick-open-search'
|
||||
import {
|
||||
classifyTabEntryQuery,
|
||||
getTabEntryOptions,
|
||||
TAB_ENTRY_ABSOLUTE_PATH_REMOTE_BLOCKED_MESSAGE,
|
||||
getTabEntryAbsolutePathRemoteBlockedMessage,
|
||||
validateNewTabEntryAbsolutePath,
|
||||
validateNewTabEntryRelativePath
|
||||
} from './tab-create-entry-classifier'
|
||||
@@ -564,7 +564,7 @@ describe('tab create entry classification', () => {
|
||||
]) {
|
||||
expect(classifyTabEntryQuery(query, readyFiles([]))).toMatchObject({
|
||||
kind: 'blocked',
|
||||
message: TAB_ENTRY_ABSOLUTE_PATH_REMOTE_BLOCKED_MESSAGE
|
||||
message: getTabEntryAbsolutePathRemoteBlockedMessage()
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
@@ -30,8 +30,12 @@ export type TabEntryOptionsContext = {
|
||||
searchEngine?: SearchEngine
|
||||
}
|
||||
|
||||
export const TAB_ENTRY_ABSOLUTE_PATH_REMOTE_BLOCKED_MESSAGE =
|
||||
'Absolute paths require a local workspace.'
|
||||
export function getTabEntryAbsolutePathRemoteBlockedMessage(): string {
|
||||
return translate(
|
||||
'auto.components.tab.bar.tab.create.entry.classifier.absolutePathRemoteBlocked',
|
||||
'Absolute paths require a local workspace.'
|
||||
)
|
||||
}
|
||||
|
||||
export type TabEntryClassification =
|
||||
| { kind: 'empty'; message: string }
|
||||
@@ -171,15 +175,7 @@ export function getTabEntryOptions(
|
||||
|
||||
if (isTabEntryAbsolutePathLike(trimmed)) {
|
||||
if (!context.allowAbsolutePaths) {
|
||||
return [
|
||||
blockedOption(
|
||||
'absolute-path-blocked',
|
||||
translate(
|
||||
'auto.components.tab.bar.tab.create.entry.classifier.absolutePathRemoteBlocked',
|
||||
'Absolute paths require a local workspace.'
|
||||
)
|
||||
)
|
||||
]
|
||||
return [blockedOption('absolute-path-blocked', getTabEntryAbsolutePathRemoteBlockedMessage())]
|
||||
}
|
||||
try {
|
||||
const filePath = validateNewTabEntryAbsolutePath(trimmed, context.localPlatform)
|
||||
|
||||
@@ -10,3 +10,39 @@ export function getTabEntryOmniboxPlaceholder(): string {
|
||||
export function getTabEntryChooseActionMessage(): string {
|
||||
return translate('auto.components.tab.bar.TabBarCreateEntry.chooseAction', 'Choose an action.')
|
||||
}
|
||||
|
||||
export function getTabEntryFileNotFoundMessage(path: string): string {
|
||||
return translate(
|
||||
'auto.components.tab.bar.tabCreateEntry.fileNotFound',
|
||||
'File not found: {{path}}',
|
||||
{ path }
|
||||
)
|
||||
}
|
||||
|
||||
export function getTabEntryFileNoLongerExistsMessage(path: string): string {
|
||||
return translate(
|
||||
'auto.components.tab.bar.tabCreateEntry.fileNoLongerExists',
|
||||
'File no longer exists: {{path}}',
|
||||
{ path }
|
||||
)
|
||||
}
|
||||
|
||||
export function getTabEntryCannotOpenDirectoryMessage(path: string): string {
|
||||
return translate(
|
||||
'auto.components.tab.bar.tabCreateEntry.cannotOpenDirectory',
|
||||
'Cannot open a directory: {{path}}',
|
||||
{ path }
|
||||
)
|
||||
}
|
||||
|
||||
export function getTabEntryParentNotDirectoryMessage(path: string): string {
|
||||
return translate(
|
||||
'auto.components.tab.bar.tabCreateEntry.parentNotDirectory',
|
||||
'Cannot create file because {{path}} is not a directory.',
|
||||
{ path }
|
||||
)
|
||||
}
|
||||
|
||||
export function getTabEntryNoActiveWorktreeMessage(): string {
|
||||
return translate('auto.components.tab.bar.tabCreateEntry.noActiveWorktree', 'No active worktree.')
|
||||
}
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import { translate } from '@/i18n/i18n'
|
||||
import { normalizeAbsolutePath } from '../../../../shared/terminal-path-normalization'
|
||||
import { isAbsolutePathLike } from '../editor/editor-panel-file-mode'
|
||||
|
||||
@@ -9,7 +10,12 @@ export function isTabEntryAbsolutePathLike(query: string): boolean {
|
||||
|
||||
function assertTabEntryPathHasNoControlCharacters(trimmed: string): void {
|
||||
if (Array.from(trimmed).some((char) => char.charCodeAt(0) < 32 || char.charCodeAt(0) === 127)) {
|
||||
throw new Error('File paths cannot contain control characters.')
|
||||
throw new Error(
|
||||
translate(
|
||||
'auto.components.tab.bar.tabCreateEntryPath.filePathsCannotContainControlCharacters',
|
||||
'File paths cannot contain control characters.'
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,21 +25,46 @@ export function validateNewTabEntryAbsolutePath(
|
||||
): string {
|
||||
const trimmed = query.trim()
|
||||
if (!trimmed) {
|
||||
throw new Error('Enter a URL or file path.')
|
||||
throw new Error(
|
||||
translate(
|
||||
'auto.components.tab.bar.tabCreateEntryPath.enterAUrlOrFilePath',
|
||||
'Enter a URL or file path.'
|
||||
)
|
||||
)
|
||||
}
|
||||
assertTabEntryPathHasNoControlCharacters(trimmed)
|
||||
if (trimmed === '~' || trimmed.startsWith('~/') || trimmed.startsWith('~\\')) {
|
||||
throw new Error('Home-relative paths are not supported here.')
|
||||
throw new Error(
|
||||
translate(
|
||||
'auto.components.tab.bar.tabCreateEntryPath.homeRelativePathsAreNotSupported',
|
||||
'Home-relative paths are not supported here.'
|
||||
)
|
||||
)
|
||||
}
|
||||
if (/[\\/]$/.test(trimmed)) {
|
||||
throw new Error('Enter a file path, not a directory path.')
|
||||
throw new Error(
|
||||
translate(
|
||||
'auto.components.tab.bar.tabCreateEntryPath.enterAFilePathNotA',
|
||||
'Enter a file path, not a directory path.'
|
||||
)
|
||||
)
|
||||
}
|
||||
if (!isAbsolutePathLike(trimmed)) {
|
||||
throw new Error('Enter an absolute file path.')
|
||||
throw new Error(
|
||||
translate(
|
||||
'auto.components.tab.bar.tabCreateEntryPath.enterAnAbsoluteFilePath',
|
||||
'Enter an absolute file path.'
|
||||
)
|
||||
)
|
||||
}
|
||||
const normalized = normalizeAbsolutePath(trimmed)
|
||||
if (!normalized) {
|
||||
throw new Error('Enter an absolute file path.')
|
||||
throw new Error(
|
||||
translate(
|
||||
'auto.components.tab.bar.tabCreateEntryPath.enterAnAbsoluteFilePath',
|
||||
'Enter an absolute file path.'
|
||||
)
|
||||
)
|
||||
}
|
||||
const rootMatchesLocalPlatform =
|
||||
localPlatform === undefined ||
|
||||
@@ -41,7 +72,12 @@ export function validateNewTabEntryAbsolutePath(
|
||||
(localPlatform === 'windows' &&
|
||||
(normalized.rootKind === 'windows' || normalized.rootKind === 'unc'))
|
||||
if (!rootMatchesLocalPlatform) {
|
||||
throw new Error('Enter an absolute path for this computer.')
|
||||
throw new Error(
|
||||
translate(
|
||||
'auto.components.tab.bar.tabCreateEntryPath.enterAnAbsolutePathForThis',
|
||||
'Enter an absolute path for this computer.'
|
||||
)
|
||||
)
|
||||
}
|
||||
return normalized.normalized
|
||||
}
|
||||
@@ -50,35 +86,80 @@ export function validateNewTabEntryRelativePath(query: string): string {
|
||||
// Keep new-file paths workspace-relative; absolute/home/traversal/UNC syntax follows separate routes.
|
||||
const trimmed = query.trim()
|
||||
if (!trimmed) {
|
||||
throw new Error('Enter a URL or file path.')
|
||||
throw new Error(
|
||||
translate(
|
||||
'auto.components.tab.bar.tabCreateEntryPath.enterAUrlOrFilePath',
|
||||
'Enter a URL or file path.'
|
||||
)
|
||||
)
|
||||
}
|
||||
assertTabEntryPathHasNoControlCharacters(trimmed)
|
||||
if (trimmed.startsWith('/')) {
|
||||
throw new Error('Enter a relative file path.')
|
||||
throw new Error(
|
||||
translate(
|
||||
'auto.components.tab.bar.tabCreateEntryPath.enterARelativeFilePath',
|
||||
'Enter a relative file path.'
|
||||
)
|
||||
)
|
||||
}
|
||||
if (/^[A-Za-z]:/.test(trimmed)) {
|
||||
throw new Error('Windows drive paths are not supported here.')
|
||||
throw new Error(
|
||||
translate(
|
||||
'auto.components.tab.bar.tabCreateEntryPath.windowsDrivePathsAreNotSupported',
|
||||
'Windows drive paths are not supported here.'
|
||||
)
|
||||
)
|
||||
}
|
||||
if (/^[\\/]{2}/.test(trimmed)) {
|
||||
throw new Error('UNC paths are not supported here.')
|
||||
throw new Error(
|
||||
translate(
|
||||
'auto.components.tab.bar.tabCreateEntryPath.uncPathsAreNotSupportedHere',
|
||||
'UNC paths are not supported here.'
|
||||
)
|
||||
)
|
||||
}
|
||||
if (trimmed === '~' || trimmed.startsWith('~/') || trimmed.startsWith('~\\')) {
|
||||
throw new Error('Home-relative paths are not supported here.')
|
||||
throw new Error(
|
||||
translate(
|
||||
'auto.components.tab.bar.tabCreateEntryPath.homeRelativePathsAreNotSupported',
|
||||
'Home-relative paths are not supported here.'
|
||||
)
|
||||
)
|
||||
}
|
||||
if (/[\\/]$/.test(trimmed)) {
|
||||
throw new Error('Enter a file path, not a directory path.')
|
||||
throw new Error(
|
||||
translate(
|
||||
'auto.components.tab.bar.tabCreateEntryPath.enterAFilePathNotA',
|
||||
'Enter a file path, not a directory path.'
|
||||
)
|
||||
)
|
||||
}
|
||||
if (trimmed.split(/[\\/]/).some((segment) => segment.length === 0)) {
|
||||
throw new Error('File paths cannot contain empty segments.')
|
||||
throw new Error(
|
||||
translate(
|
||||
'auto.components.tab.bar.tabCreateEntryPath.filePathsCannotContainEmptySegments',
|
||||
'File paths cannot contain empty segments.'
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
const normalized = trimmed.replace(/\\/g, '/')
|
||||
const segments = normalized.split('/')
|
||||
if (segments.some((segment) => segment === '.' || segment === '..')) {
|
||||
throw new Error('File paths cannot contain . or .. segments.')
|
||||
throw new Error(
|
||||
translate(
|
||||
'auto.components.tab.bar.tabCreateEntryPath.filePathsCannotContainDotSegments',
|
||||
'File paths cannot contain . or .. segments.'
|
||||
)
|
||||
)
|
||||
}
|
||||
if (segments.some((segment) => segment === '~')) {
|
||||
throw new Error('File paths cannot contain ~ segments.')
|
||||
throw new Error(
|
||||
translate(
|
||||
'auto.components.tab.bar.tabCreateEntryPath.filePathsCannotContainTildeSegments',
|
||||
'File paths cannot contain ~ segments.'
|
||||
)
|
||||
)
|
||||
}
|
||||
return normalized
|
||||
}
|
||||
|
||||
@@ -253,8 +253,14 @@ export default function AiVaultSessionDropLayer({
|
||||
// Refuse old payloads that cannot repin the startup command; silently using another account’s home is unsafe.
|
||||
throw new Error(
|
||||
result.substituteCodexHome
|
||||
? 'This session was dragged from an older Orca window, so Orca cannot retarget it to the selected Codex account. Resume it from the Session History panel instead.'
|
||||
: 'Orca could not prepare this legacy Codex session. Retry resume.'
|
||||
? translate(
|
||||
'auto.components.tab.group.AiVaultSessionDropLayer.legacyDragCannotRetarget',
|
||||
'This session was dragged from an older Orca window, so Orca cannot retarget it to the selected Codex account. Resume it from the Session History panel instead.'
|
||||
)
|
||||
: translate(
|
||||
'auto.components.tab.group.AiVaultSessionDropLayer.legacyDragPrepareFailed',
|
||||
'Orca could not prepare this legacy Codex session. Retry resume.'
|
||||
)
|
||||
)
|
||||
}
|
||||
const providerSession = getAiVaultAgentProviderSession({
|
||||
|
||||
@@ -13,6 +13,7 @@ import { runtimeEnvironmentIdOrLocalUnlessTwin } from '@/lib/worktree-runtime-ow
|
||||
import { browserWorkspaceHasRemoteOwner } from '@/runtime/remote-browser-tab-ownership'
|
||||
import { getClientCreationActionPolicy } from '@/lib/client-creation-action-policy'
|
||||
import type { TabGroupWorktreeSnapshot } from './useTabGroupItemProjections'
|
||||
import { translate } from '@/i18n/i18n'
|
||||
|
||||
export function useTabGroupCreationCommands({
|
||||
groupId,
|
||||
@@ -90,7 +91,12 @@ export function useTabGroupCreationCommands({
|
||||
if (created) {
|
||||
return
|
||||
}
|
||||
throw new Error('The paired runtime could not duplicate the managed browser tab.')
|
||||
throw new Error(
|
||||
translate(
|
||||
'auto.components.tab.group.useTabGroupCreationCommands.duplicateBrowserTabFailed',
|
||||
'The paired runtime could not duplicate the managed browser tab.'
|
||||
)
|
||||
)
|
||||
}
|
||||
// Why no targetGroupId: a source-following duplicate joins the source's live group.
|
||||
createBrowserTab(worktreeId, source.url, {
|
||||
|
||||
@@ -33,9 +33,11 @@ describe('reportTerminalDropUploadSkipsAndFailures', () => {
|
||||
const mixedSkipKey = mocks.translate.mock.calls[0]?.[0]
|
||||
|
||||
expect(symlinkOnlyKey).toBe(
|
||||
'auto.components.terminal.pane.terminal.drop.handler.skippedSymlinkSingular'
|
||||
'auto.components.terminal.pane.terminal.drop.handler.skippedSymlinks_one'
|
||||
)
|
||||
expect(mixedSkipKey).toBe(
|
||||
'auto.components.terminal.pane.terminal.drop.handler.skippedItems_other'
|
||||
)
|
||||
expect(mixedSkipKey).toBe('auto.components.terminal.pane.terminal.drop.handler.b4cf68e889')
|
||||
expect(symlinkOnlyKey).not.toBe(mixedSkipKey)
|
||||
expect(toast.message).toHaveBeenCalledTimes(2)
|
||||
})
|
||||
@@ -44,9 +46,9 @@ describe('reportTerminalDropUploadSkipsAndFailures', () => {
|
||||
reportTerminalDropUploadSkipsAndFailures([], [{ reason: '/secret/project/file.txt' }])
|
||||
|
||||
expect(mocks.translate).toHaveBeenCalledWith(
|
||||
'auto.components.terminal.pane.terminal.drop.handler.1e072f611e',
|
||||
'Failed to upload {{value0}} {{value1}}.',
|
||||
{ value0: 1, value1: 'file' }
|
||||
'auto.components.terminal.pane.terminal.drop.handler.failedUploads_one',
|
||||
'Failed to upload {{count}} file.',
|
||||
{ count: 1 }
|
||||
)
|
||||
expect(toast.error).toHaveBeenCalledWith(
|
||||
expect.not.stringContaining('/secret/project/file.txt'),
|
||||
@@ -61,7 +63,7 @@ describe('reportTerminalDropUploadSkipsAndFailures', () => {
|
||||
)
|
||||
|
||||
expect(toast.message).toHaveBeenCalledWith(
|
||||
'auto.components.terminal.pane.terminal.drop.handler.b4cf68e889:Skipped {{value0}} {{value1}}.',
|
||||
'auto.components.terminal.pane.terminal.drop.handler.skippedItems_other:Skipped {{count}} items.',
|
||||
{ description: 'auto.lib.dropSkipReason.permissionDenied:Permission denied.' }
|
||||
)
|
||||
})
|
||||
@@ -82,9 +84,9 @@ describe('reportTerminalDropUploadSkipsAndFailures', () => {
|
||||
reportTerminalDropUploadSkipsAndFailures([], [{ reason: 'a' }, { reason: 'b' }])
|
||||
|
||||
expect(mocks.translate).toHaveBeenCalledWith(
|
||||
'auto.components.terminal.pane.terminal.drop.handler.1e072f611e',
|
||||
'Failed to upload {{value0}} {{value1}}.',
|
||||
{ value0: 2, value1: 'files' }
|
||||
'auto.components.terminal.pane.terminal.drop.handler.failedUploads_other',
|
||||
'Failed to upload {{count}} files.',
|
||||
{ count: 2 }
|
||||
)
|
||||
})
|
||||
|
||||
|
||||
@@ -12,38 +12,48 @@ export function reportTerminalDropUploadSkipsAndFailures(
|
||||
if (skipped.length > 0) {
|
||||
// Why: symlink rejection is policy, not an error; mixed reasons stay generic.
|
||||
const allSymlinks = skipped.every((item) => item.reason === 'symlink')
|
||||
const noun = skipped.length === 1 ? 'item' : 'items'
|
||||
toast.message(
|
||||
allSymlinks
|
||||
? skipped.length === 1
|
||||
? translate(
|
||||
'auto.components.terminal.pane.terminal.drop.handler.skippedSymlinkSingular',
|
||||
'auto.components.terminal.pane.terminal.drop.handler.skippedSymlinks_one',
|
||||
'Skipped {{count}} symlink.',
|
||||
{ count: skipped.length }
|
||||
)
|
||||
: translate(
|
||||
'auto.components.terminal.pane.terminal.drop.handler.skippedSymlinkPlural',
|
||||
'auto.components.terminal.pane.terminal.drop.handler.skippedSymlinks_other',
|
||||
'Skipped {{count}} symlinks.',
|
||||
{ count: skipped.length }
|
||||
)
|
||||
: translate(
|
||||
'auto.components.terminal.pane.terminal.drop.handler.b4cf68e889',
|
||||
'Skipped {{value0}} {{value1}}.',
|
||||
{ value0: skipped.length, value1: noun }
|
||||
),
|
||||
: skipped.length === 1
|
||||
? translate(
|
||||
'auto.components.terminal.pane.terminal.drop.handler.skippedItems_one',
|
||||
'Skipped {{count}} item.',
|
||||
{ count: skipped.length }
|
||||
)
|
||||
: translate(
|
||||
'auto.components.terminal.pane.terminal.drop.handler.skippedItems_other',
|
||||
'Skipped {{count}} items.',
|
||||
{ count: skipped.length }
|
||||
),
|
||||
{
|
||||
description: allSymlinks ? undefined : describeSharedDropSkipReason(skipped)
|
||||
}
|
||||
)
|
||||
}
|
||||
if (failed.length > 0) {
|
||||
const noun = failed.length === 1 ? 'file' : 'files'
|
||||
toast.error(
|
||||
translate(
|
||||
'auto.components.terminal.pane.terminal.drop.handler.1e072f611e',
|
||||
'Failed to upload {{value0}} {{value1}}.',
|
||||
{ value0: failed.length, value1: noun }
|
||||
),
|
||||
failed.length === 1
|
||||
? translate(
|
||||
'auto.components.terminal.pane.terminal.drop.handler.failedUploads_one',
|
||||
'Failed to upload {{count}} file.',
|
||||
{ count: failed.length }
|
||||
)
|
||||
: translate(
|
||||
'auto.components.terminal.pane.terminal.drop.handler.failedUploads_other',
|
||||
'Failed to upload {{count}} files.',
|
||||
{ count: failed.length }
|
||||
),
|
||||
{ description: describeSharedDropFailureReason(failed) }
|
||||
)
|
||||
}
|
||||
|
||||
@@ -130,12 +130,12 @@ async function uploadRuntimeDropPaths(
|
||||
const pending = toast.loading(
|
||||
args.dataPaths.length === 1
|
||||
? translate(
|
||||
'auto.components.terminal.pane.terminal.drop.handler.uploadingFileSingular',
|
||||
'auto.components.terminal.pane.terminal.drop.handler.uploadingFiles_one',
|
||||
'Uploading {{count}} file to runtime…',
|
||||
{ count: args.dataPaths.length }
|
||||
)
|
||||
: translate(
|
||||
'auto.components.terminal.pane.terminal.drop.handler.uploadingFilePlural',
|
||||
'auto.components.terminal.pane.terminal.drop.handler.uploadingFiles_other',
|
||||
'Uploading {{count}} files to runtime…',
|
||||
{ count: args.dataPaths.length }
|
||||
)
|
||||
@@ -174,7 +174,10 @@ async function uploadRuntimeDropPaths(
|
||||
}
|
||||
|
||||
async function pasteLocalDropPaths(
|
||||
args: NativeDropFlowArgs & { localWslDrop: boolean; targetShell: 'posix' | 'windows' }
|
||||
args: NativeDropFlowArgs & {
|
||||
localWslDrop: boolean
|
||||
targetShell: 'posix' | 'windows'
|
||||
}
|
||||
): Promise<void> {
|
||||
// Local WSL shells need distro-aware POSIX paths despite their Windows host.
|
||||
if (isWslUncPath(args.worktreePath)) {
|
||||
@@ -200,17 +203,20 @@ async function pasteLocalDropPaths(
|
||||
}
|
||||
|
||||
async function uploadRemoteDropPaths(
|
||||
args: NativeDropFlowArgs & { connectionId: string; targetShell: 'posix' | 'windows' }
|
||||
args: NativeDropFlowArgs & {
|
||||
connectionId: string
|
||||
targetShell: 'posix' | 'windows'
|
||||
}
|
||||
): Promise<void> {
|
||||
const pending = toast.loading(
|
||||
args.dataPaths.length === 1
|
||||
? translate(
|
||||
'auto.components.terminal.pane.terminal.drop.handler.uploadingFileToRemoteSingular',
|
||||
'auto.components.terminal.pane.terminal.drop.handler.uploadingFilesToRemote_one',
|
||||
'Uploading {{count}} file to remote…',
|
||||
{ count: args.dataPaths.length }
|
||||
)
|
||||
: translate(
|
||||
'auto.components.terminal.pane.terminal.drop.handler.uploadingFileToRemotePlural',
|
||||
'auto.components.terminal.pane.terminal.drop.handler.uploadingFilesToRemote_other',
|
||||
'Uploading {{count}} files to remote…',
|
||||
{ count: args.dataPaths.length }
|
||||
)
|
||||
@@ -234,7 +240,10 @@ async function uploadRemoteDropPaths(
|
||||
}
|
||||
|
||||
async function pasteResolvedDropPaths(
|
||||
args: NativeDropFlowArgs & { paths: string[]; targetShell: 'posix' | 'windows' }
|
||||
args: NativeDropFlowArgs & {
|
||||
paths: string[]
|
||||
targetShell: 'posix' | 'windows'
|
||||
}
|
||||
): Promise<void> {
|
||||
args.assertCurrent?.()
|
||||
// Upload/resolution can outlive the pane; recheck before writing to its PTY.
|
||||
|
||||
@@ -145,12 +145,12 @@ export function WorkspaceCleanupConfirmRemove({
|
||||
<div className="text-xs text-destructive">
|
||||
{riskCount === 1
|
||||
? translate(
|
||||
'components.workspace.cleanup.browse.forceDeleteProjectionOne',
|
||||
'components.workspace.cleanup.browse.forceDeleteRisk_one',
|
||||
'{{count}} workspace currently shows risk and may need a force delete',
|
||||
{ count: riskCount }
|
||||
)
|
||||
: translate(
|
||||
'components.workspace.cleanup.browse.forceDeleteProjectionMany',
|
||||
'components.workspace.cleanup.browse.forceDeleteRisk_other',
|
||||
'{{count}} workspaces currently show risk and may need a force delete',
|
||||
{ count: riskCount }
|
||||
)}
|
||||
|
||||
@@ -32,17 +32,29 @@ export function formatWorkspaceCleanupScanNotice(
|
||||
.map((error) => formatScanErrorRepoName(error, repoNameById))
|
||||
.join(', ')
|
||||
const moreCount = visibleErrors.length - 3
|
||||
const suffix =
|
||||
moreCount > 0
|
||||
? translate('components.workspace.cleanup.scan.moreErrors', ', +{{value0}} more', {
|
||||
value0: moreCount
|
||||
})
|
||||
: ''
|
||||
return translate(
|
||||
'components.workspace.cleanup.scan.multipleErrors',
|
||||
'Could not check {{value0}} repositories ({{value1}}{{value2}}). Some workspaces may be missing. Refresh to try again.',
|
||||
{ value0: visibleErrors.length, value1: repoNames, value2: suffix }
|
||||
)
|
||||
return moreCount > 0
|
||||
? visibleErrors.length === 1
|
||||
? translate(
|
||||
'components.workspace.cleanup.scan.multipleErrorsWithMore_one',
|
||||
'Could not check {{count}} repository ({{names}}, +{{moreCount}} more). Some workspaces may be missing. Refresh to try again.',
|
||||
{ count: visibleErrors.length, names: repoNames, moreCount }
|
||||
)
|
||||
: translate(
|
||||
'components.workspace.cleanup.scan.multipleErrorsWithMore_other',
|
||||
'Could not check {{count}} repositories ({{names}}, +{{moreCount}} more). Some workspaces may be missing. Refresh to try again.',
|
||||
{ count: visibleErrors.length, names: repoNames, moreCount }
|
||||
)
|
||||
: visibleErrors.length === 1
|
||||
? translate(
|
||||
'components.workspace.cleanup.scan.multipleErrorsCount_one',
|
||||
'Could not check {{count}} repository ({{names}}). Some workspaces may be missing. Refresh to try again.',
|
||||
{ count: visibleErrors.length, names: repoNames }
|
||||
)
|
||||
: translate(
|
||||
'components.workspace.cleanup.scan.multipleErrorsCount_other',
|
||||
'Could not check {{count}} repositories ({{names}}). Some workspaces may be missing. Refresh to try again.',
|
||||
{ count: visibleErrors.length, names: repoNames }
|
||||
)
|
||||
}
|
||||
|
||||
export function formatWorkspaceCleanupReadyToast(workspaceCount: number): string {
|
||||
@@ -50,11 +62,17 @@ export function formatWorkspaceCleanupReadyToast(workspaceCount: number): string
|
||||
return translate('components.workspace.cleanup.scan.noWorkspaces', 'No workspaces found.')
|
||||
}
|
||||
if (workspaceCount === 1) {
|
||||
return translate('components.workspace.cleanup.scan.readyOne', '1 workspace found.')
|
||||
return translate(
|
||||
'components.workspace.cleanup.scan.readyCount_one',
|
||||
'{{count}} workspace found.',
|
||||
{ count: workspaceCount }
|
||||
)
|
||||
}
|
||||
return translate('components.workspace.cleanup.scan.readyMany', '{{value0}} workspaces found.', {
|
||||
value0: workspaceCount
|
||||
})
|
||||
return translate(
|
||||
'components.workspace.cleanup.scan.readyCount_other',
|
||||
'{{count}} workspaces found.',
|
||||
{ count: workspaceCount }
|
||||
)
|
||||
}
|
||||
|
||||
function formatScanErrorRepoName(
|
||||
|
||||
+12
-10
@@ -3,26 +3,28 @@ import { translate } from '@/i18n/i18n'
|
||||
export function formatVanishedSelectionNotice(count: number): string {
|
||||
return count === 1
|
||||
? translate(
|
||||
'components.workspace.cleanup.browse.selectionVanishedOne',
|
||||
'1 selected workspace no longer exists.'
|
||||
'components.workspace.cleanup.browse.selectionVanishedCount_one',
|
||||
'{{count}} selected workspace no longer exists.',
|
||||
{ count }
|
||||
)
|
||||
: translate(
|
||||
'components.workspace.cleanup.browse.selectionVanished',
|
||||
'{{value0}} selected workspaces no longer exist.',
|
||||
{ value0: count }
|
||||
'components.workspace.cleanup.browse.selectionVanishedCount_other',
|
||||
'{{count}} selected workspaces no longer exist.',
|
||||
{ count }
|
||||
)
|
||||
}
|
||||
|
||||
export function formatWithheldSelectionNotice(count: number): string {
|
||||
return count === 1
|
||||
? translate(
|
||||
'components.workspace.cleanup.browse.selectionWithheldOne',
|
||||
'1 selected workspace is hidden by the current filters and was deselected.'
|
||||
'components.workspace.cleanup.browse.selectionWithheldCount_one',
|
||||
'{{count}} selected workspace is hidden by the current filters and was deselected.',
|
||||
{ count }
|
||||
)
|
||||
: translate(
|
||||
'components.workspace.cleanup.browse.selectionWithheld',
|
||||
'{{value0}} selected workspaces are hidden by the current filters and were deselected.',
|
||||
{ value0: count }
|
||||
'components.workspace.cleanup.browse.selectionWithheldCount_other',
|
||||
'{{count}} selected workspaces are hidden by the current filters and were deselected.',
|
||||
{ count }
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -34,13 +34,14 @@ export function WorkspaceCleanupSortHeader({
|
||||
const selectAllLabel =
|
||||
selectableCount === 1
|
||||
? translate(
|
||||
'components.workspace.cleanup.browse.selectAllCountOne',
|
||||
'Select 1 safety-checked workspace'
|
||||
'components.workspace.cleanup.browse.selectAllSafetyChecked_one',
|
||||
'Select {{count}} safety-checked workspace',
|
||||
{ count: selectableCount }
|
||||
)
|
||||
: translate(
|
||||
'components.workspace.cleanup.browse.selectAllCount',
|
||||
'Select all {{value0}} safety-checked workspaces',
|
||||
{ value0: selectableCount }
|
||||
'components.workspace.cleanup.browse.selectAllSafetyChecked_other',
|
||||
'Select all {{count}} safety-checked workspaces',
|
||||
{ count: selectableCount }
|
||||
)
|
||||
return (
|
||||
<div className="flex items-center gap-1 border-b border-border bg-muted/25 px-3 py-1.5">
|
||||
|
||||
+247
-7
@@ -56,6 +56,10 @@
|
||||
"resumingCount_one": "Resuming {{count}} chat",
|
||||
"resumingCount_other": "Resuming {{count}} chats"
|
||||
},
|
||||
"PullRequestPage": {
|
||||
"filesViewed_one": "{{viewed}} / {{count}} file viewed",
|
||||
"filesViewed_other": "{{viewed}} / {{count}} files viewed"
|
||||
},
|
||||
"QuickOpen": {
|
||||
"filesFound_one": "{{count}} file found",
|
||||
"filesFound_other": "{{count}} files found"
|
||||
@@ -78,10 +82,6 @@
|
||||
"resultsFound_one": "{{count}} result found.",
|
||||
"resultsFound_other": "{{count}} results found."
|
||||
},
|
||||
"PullRequestPage": {
|
||||
"filesViewed_one": "{{viewed}} / {{count}} file viewed",
|
||||
"filesViewed_other": "{{viewed}} / {{count}} files viewed"
|
||||
},
|
||||
"activity": {
|
||||
"ActivityThreadContextMenu": {
|
||||
"clearMany_one": "Clear {{count}} Agent from List",
|
||||
@@ -90,6 +90,14 @@
|
||||
"markManyRead_other": "Mark {{count}} Agents Read",
|
||||
"markManyUnread_one": "Mark {{count}} Agent Unread",
|
||||
"markManyUnread_other": "Mark {{count}} Agents Unread"
|
||||
},
|
||||
"ActivityTitlebarControls": {
|
||||
"unreadCount_one": "{{count}} unread",
|
||||
"unreadCount_other": "{{count}} unread"
|
||||
},
|
||||
"clearCompleted": {
|
||||
"cleared_one": "Cleared {{count}} completed agent",
|
||||
"cleared_other": "Cleared {{count}} completed agents"
|
||||
}
|
||||
},
|
||||
"automations": {
|
||||
@@ -149,6 +157,18 @@
|
||||
"errorUnavailable": "Screenshot markup is not available on this page."
|
||||
}
|
||||
},
|
||||
"dashboard": {
|
||||
"DashboardAgentChildDisclosure": {
|
||||
"hideChildAgents_one": "Hide {{count}} child agent",
|
||||
"hideChildAgents_other": "Hide {{count}} child agents",
|
||||
"showChildAgents_one": "Show {{count}} child agent",
|
||||
"showChildAgents_other": "Show {{count}} child agents"
|
||||
},
|
||||
"DashboardAgentRow": {
|
||||
"dispatchedAgents_one": "{{agentType}} - dispatched {{count}} agent",
|
||||
"dispatchedAgents_other": "{{agentType}} - dispatched {{count}} agents"
|
||||
}
|
||||
},
|
||||
"editor": {
|
||||
"CombinedDiffViewer": {
|
||||
"skippedConflictsExcluded_one": "{{count}} unresolved conflict was excluded from this diff view.",
|
||||
@@ -670,9 +690,35 @@
|
||||
}
|
||||
},
|
||||
"sidebar": {
|
||||
"AddRemoteHostDialog": {
|
||||
"sshImportSynced_one": "Added {{count}} host to Orca.",
|
||||
"sshImportSynced_other": "Added {{count}} hosts to Orca."
|
||||
},
|
||||
"AddRepoNestedImportStep": {
|
||||
"foundRepositories_one": "Found {{count}} repository in {{path}}.",
|
||||
"foundRepositories_other": "Found {{count}} repositories in {{path}}."
|
||||
},
|
||||
"DeleteWorktreeDirtyChangeHint": {
|
||||
"changeCount_one": "{{count}} uncommitted or untracked change",
|
||||
"changeCount_other": "{{count}} uncommitted or untracked changes"
|
||||
"changeCount_other": "{{count}} uncommitted or untracked changes",
|
||||
"moreLoadedPaths_one": "and {{count}} more loaded path",
|
||||
"moreLoadedPaths_other": "and {{count}} more loaded paths"
|
||||
},
|
||||
"DeleteWorktreeLineageNotice": {
|
||||
"alsoDeletesChildren_one": "Deleting this workspace also deletes {{count}} child workspace.",
|
||||
"alsoDeletesChildren_other": "Deleting this workspace also deletes {{count}} child workspaces.",
|
||||
"moreChildren_one": "+{{count}} more",
|
||||
"moreChildren_other": "+{{count}} more"
|
||||
},
|
||||
"HostRemoveDialog": {
|
||||
"alsoRemoveWorkspaces_one": "Also remove this workspace from Orca",
|
||||
"alsoRemoveWorkspaces_other": "Also remove these {{count}} workspaces from Orca",
|
||||
"hostKeepsWorkspaces_one": "Removes {{host}} and its credentials from this computer. Its {{count}} workspace stays in Orca — remote files are not touched.",
|
||||
"hostKeepsWorkspaces_other": "Removes {{host}} and its credentials from this computer. Its {{count}} workspaces stay in Orca — remote files are not touched."
|
||||
},
|
||||
"HostSectionHeader": {
|
||||
"workspaceCount_one": "{{count}} workspace",
|
||||
"workspaceCount_other": "{{count}} workspaces"
|
||||
},
|
||||
"ImportedWorktreesVisibilityLine": {
|
||||
"hidingInRepo_one": "Hiding {{count}} discovered worktree in {{repo}}",
|
||||
@@ -680,16 +726,72 @@
|
||||
"hiding_one": "Hiding {{count}} discovered worktree",
|
||||
"hiding_other": "Hiding {{count}} discovered worktrees",
|
||||
"keepHiddenAriaLabel_one": "Keep {{count}} discovered worktree hidden for {{repo}}; recover from the project menu",
|
||||
"keepHiddenAriaLabel_other": "Keep {{count}} discovered worktrees hidden for {{repo}}; recover from the project menu"
|
||||
"keepHiddenAriaLabel_other": "Keep {{count}} discovered worktrees hidden for {{repo}}; recover from the project menu",
|
||||
"moreLocations_one": "+ {{count}} more location",
|
||||
"moreLocations_other": "+ {{count}} more locations"
|
||||
},
|
||||
"LocalGitToolchainScanBanner": {
|
||||
"affectedProjects_one": "Worktree scan paused for {{count}} project",
|
||||
"affectedProjects_other": "Worktree scan paused for {{count}} projects"
|
||||
},
|
||||
"NewExternalWorktreesInboxLine": {
|
||||
"hiddenWorktreesNoun_one": "hidden worktree",
|
||||
"hiddenWorktreesNoun_other": "hidden worktrees",
|
||||
"reviewHiddenWorktrees_one": "Review {{count}} hidden worktree in {{scope}}",
|
||||
"reviewHiddenWorktrees_other": "Review {{count}} hidden worktrees in {{scope}}"
|
||||
},
|
||||
"PreservedBranchBatchReviewDialog": {
|
||||
"a0f9863597_one": "Force Delete {{count}} Branch",
|
||||
"a0f9863597_other": "Force Delete {{count}} Branches"
|
||||
},
|
||||
"ProjectGroupDeleteDialog": {
|
||||
"moreProjects_one": "+{{count}} more",
|
||||
"moreProjects_other": "+{{count}} more",
|
||||
"removeContainedProjects_one": "Remove {{count}} contained project",
|
||||
"removeContainedProjects_other": "Remove {{count}} contained projects"
|
||||
},
|
||||
"SetupScriptPromptCard": {
|
||||
"savedWithSkippedFields_one": "{{count}} unsupported field skipped. Saved the setup command.",
|
||||
"savedWithSkippedFields_other": "{{count}} unsupported fields skipped. Saved the setup command."
|
||||
},
|
||||
"WorkspaceKanbanDrawerHeader": {
|
||||
"selectedCount_one": "{{count}} selected",
|
||||
"selectedCount_other": "{{count}} selected"
|
||||
},
|
||||
"WorkspaceKanbanSearchField": {
|
||||
"workspacesMatch_one": "{{matchCount}} of {{count}} workspace matches",
|
||||
"workspacesMatch_other": "{{matchCount}} of {{count}} workspaces match"
|
||||
},
|
||||
"WorktreeCardPorts": {
|
||||
"livePorts_one": "{{count}} live port",
|
||||
"livePorts_other": "{{count}} live ports"
|
||||
},
|
||||
"WorktreeList": {
|
||||
"childCount_one": "{{count}} child",
|
||||
"childCount_other": "{{count}} children",
|
||||
"groupProjectsRemained_one": "{{remaining}} of {{count}} contained project remained after deleting the group.",
|
||||
"groupProjectsRemained_other": "{{remaining}} of {{count}} contained projects remained after deleting the group.",
|
||||
"hideChildWorkspaces_one": "Hide {{count}} child workspace",
|
||||
"hideChildWorkspaces_other": "Hide {{count}} child workspaces",
|
||||
"showChildWorkspaces_one": "Show {{count}} child workspace",
|
||||
"showChildWorkspaces_other": "Show {{count}} child workspaces"
|
||||
},
|
||||
"WorktreeVisibilityDialog": {
|
||||
"searchHiddenPlaceholder_one": "Search {{count}} worktree…",
|
||||
"searchHiddenPlaceholder_other": "Search {{count}} worktrees…"
|
||||
},
|
||||
"local": {
|
||||
"base": {
|
||||
"ref": {
|
||||
"suggestion": {
|
||||
"toast": {
|
||||
"staleLocalBranch_one": "Your new worktree is current, but local {{branch}} is {{count}} commit behind, so AI diffs may compare to stale history. Let Orca keep it up to date automatically. Change this anytime in <settings>Settings › {{setting}}</settings>",
|
||||
"staleLocalBranch_other": "Your new worktree is current, but local {{branch}} is {{count}} commits behind, so AI diffs may compare to stale history. Let Orca keep it up to date automatically. Change this anytime in <settings>Settings › {{setting}}</settings>"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"preserved": {
|
||||
"branch": {
|
||||
"batch": {
|
||||
@@ -716,6 +818,10 @@
|
||||
"deleteCount_other": "Delete {{count}} Workspaces",
|
||||
"sleepCount_one": "Sleep {{count}} Workspace",
|
||||
"sleepCount_other": "Sleep {{count}} Workspaces"
|
||||
},
|
||||
"worktreeCardModel": {
|
||||
"sparsePreviewMore_one": "{{preview}}, +{{count}} more",
|
||||
"sparsePreviewMore_other": "{{preview}}, +{{count}} more"
|
||||
}
|
||||
},
|
||||
"skills": {
|
||||
@@ -726,6 +832,48 @@
|
||||
},
|
||||
"status": {
|
||||
"bar": {
|
||||
"NativeChatResumeStatusSegment": {
|
||||
"ariaLabelCount_one": "{{count}} chat available to resume",
|
||||
"ariaLabelCount_other": "{{count}} chats available to resume",
|
||||
"chatsFailedAria_one": "{{count}} chat failed to resume. Click for details.",
|
||||
"chatsFailedAria_other": "{{count}} chats failed to resume. Click for details.",
|
||||
"chatsFailedLabel_one": "{{count}} chat failed to resume",
|
||||
"chatsFailedLabel_other": "{{count}} chats failed to resume",
|
||||
"checkAriaCount_one": "{{count}} chat to check after resuming. Click for details.",
|
||||
"checkAriaCount_other": "{{count}} chats to check after resuming. Click for details.",
|
||||
"checkLabelCount_one": "{{count}} chat to check",
|
||||
"checkLabelCount_other": "{{count}} chats to check",
|
||||
"labelCount_one": "{{count}} chat to resume",
|
||||
"labelCount_other": "{{count}} chats to resume",
|
||||
"resumedAriaCount_one": "{{count}} chat resumed. Click to see it.",
|
||||
"resumedAriaCount_other": "{{count}} chats resumed. Click to see them.",
|
||||
"resumedLabelCount_one": "{{count}} chat resumed",
|
||||
"resumedLabelCount_other": "{{count}} chats resumed"
|
||||
},
|
||||
"PortsStatusSegment": {
|
||||
"portsAria_one": "Ports, {{count}} workspace port",
|
||||
"portsAria_other": "Ports, {{count}} workspace ports",
|
||||
"portsTooltipWithExternal_one": "Ports — {{count}} workspace port · {{externalCount}} external",
|
||||
"portsTooltipWithExternal_other": "Ports — {{count}} workspace ports · {{externalCount}} external",
|
||||
"portsTooltip_one": "Ports — {{count}} workspace port",
|
||||
"portsTooltip_other": "Ports — {{count}} workspace ports"
|
||||
},
|
||||
"RemoteServerUpdateStatusSegment": {
|
||||
"failedCount_one": "{{count}} server update failed",
|
||||
"failedCount_other": "{{count}} server updates failed",
|
||||
"updatedCount_one": "{{count}} server updated",
|
||||
"updatedCount_other": "{{count}} servers updated"
|
||||
},
|
||||
"ResourceUsageStatusSegment": {
|
||||
"endOrphanTerminals_one": "End {{count}} orphan terminal",
|
||||
"endOrphanTerminals_other": "End {{count}} orphan terminals",
|
||||
"orphanCount_one": "{{count}} orphan",
|
||||
"orphanCount_other": "{{count}} orphans"
|
||||
},
|
||||
"SkillUpdateStatusSegment": {
|
||||
"runningSkills_one": "Updating {{count}} skill…",
|
||||
"runningSkills_other": "Updating {{count}} skills…"
|
||||
},
|
||||
"SshStatusSegment": {
|
||||
"connectedHostCount_one": "{{count}} host",
|
||||
"connectedHostCount_other": "{{count}} hosts",
|
||||
@@ -734,6 +882,20 @@
|
||||
"moreSshHosts_one": "Find {{count}} more SSH host…",
|
||||
"moreSshHosts_other": "Find among {{count}} more SSH hosts…"
|
||||
},
|
||||
"StatusBar": {
|
||||
"rateLimitResetsAvailable_one": "{{count}} rate-limit reset available",
|
||||
"rateLimitResetsAvailable_other": "{{count}} rate-limit resets available",
|
||||
"staleCodexSessions_one": "{{count}} Codex session is still on the old account.",
|
||||
"staleCodexSessions_other": "{{count}} Codex sessions are still on the old account."
|
||||
},
|
||||
"WorkspaceSpaceManagerPanel": {
|
||||
"removedFromSpace_one": "{{count}} workspace removed from Space.",
|
||||
"removedFromSpace_other": "{{count}} workspaces removed from Space.",
|
||||
"selectedCount_one": "{{count}} selected",
|
||||
"selectedCount_other": "{{count}} selected",
|
||||
"topLevelItems_one": "{{formattedCount}} top-level item",
|
||||
"topLevelItems_other": "{{formattedCount}} top-level items"
|
||||
},
|
||||
"resource": {
|
||||
"manager": {
|
||||
"terminal": {
|
||||
@@ -743,6 +905,34 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"tooltip": {
|
||||
"rateLimitResetsAvailable_one": "{{count}} rate-limit reset available",
|
||||
"rateLimitResetsAvailable_other": "{{count}} rate-limit resets available"
|
||||
},
|
||||
"workspaceSpaceDecision": {
|
||||
"activeAgents_one": "{{count}} active agent",
|
||||
"activeAgents_other": "{{count}} active agents",
|
||||
"browserTabsOpen_one": "{{count}} browser tab open",
|
||||
"browserTabsOpen_other": "{{count}} browser tabs open",
|
||||
"changedFiles_one": "{{count}} changed file",
|
||||
"changedFiles_other": "{{count}} changed files",
|
||||
"completedAgentsRetained_one": "{{count}} completed agent retained",
|
||||
"completedAgentsRetained_other": "{{count}} completed agents retained",
|
||||
"completedAgents_one": "{{count}} completed agent",
|
||||
"completedAgents_other": "{{count}} completed agents",
|
||||
"dirtyEditorBuffers_one": "{{count}} dirty editor buffer",
|
||||
"dirtyEditorBuffers_other": "{{count}} dirty editor buffers",
|
||||
"editorFilesOpen_one": "{{count}} editor file open",
|
||||
"editorFilesOpen_other": "{{count}} editor files open",
|
||||
"liveTerminalTabs_one": "{{live}} live of {{count}} terminal tab",
|
||||
"liveTerminalTabs_other": "{{live}} live of {{count}} terminal tabs",
|
||||
"openFiles_one": "{{count}} open file",
|
||||
"openFiles_other": "{{count}} open files"
|
||||
},
|
||||
"workspaceSpaceFormat": {
|
||||
"scanningRepos_one": "Scanning {{scanned}} of {{count}} repo · {{current}}",
|
||||
"scanningRepos_other": "Scanning {{scanned}} of {{count}} repos · {{current}}"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -772,6 +962,22 @@
|
||||
"hostTerminalCap": "The host is already running as many terminals as Orca allows. Close a terminal you no longer need, then try again.",
|
||||
"ptyAllocationLimit": "Your system cannot allocate any more pty devices. Close some terminals you are not using, in Orca or another program, then try again.",
|
||||
"terminalProcessLimit": "Your system cannot start another terminal process. Close unused terminals or quit unused processes, then try again."
|
||||
},
|
||||
"terminal": {
|
||||
"drop": {
|
||||
"handler": {
|
||||
"failedUploads_one": "Failed to upload {{count}} file.",
|
||||
"failedUploads_other": "Failed to upload {{count}} files.",
|
||||
"skippedItems_one": "Skipped {{count}} item.",
|
||||
"skippedItems_other": "Skipped {{count}} items.",
|
||||
"skippedSymlinks_one": "Skipped {{count}} symlink.",
|
||||
"skippedSymlinks_other": "Skipped {{count}} symlinks.",
|
||||
"uploadingFilesToRemote_one": "Uploading {{count}} file to remote…",
|
||||
"uploadingFilesToRemote_other": "Uploading {{count}} files to remote…",
|
||||
"uploadingFiles_one": "Uploading {{count}} file to runtime…",
|
||||
"uploadingFiles_other": "Uploading {{count}} files to runtime…"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -934,6 +1140,7 @@
|
||||
"chooseClaudeAccountThenSend": "Choose or add one in Claude Accounts settings, then send your message again.",
|
||||
"claudeAccountFolderMissing": "The selected Claude account's folder is missing. Sign in to it again or choose another account.",
|
||||
"claudeAccountSetupFailed": "The selected Claude account could not be set up. Try again or choose another account.",
|
||||
"claudeEffortInvalid": "Claude effort is invalid; choose low, medium, high, xhigh, or max and send again.",
|
||||
"claudeManagedNotSignedIn": "This Claude account isn't signed in. Sign in again in Claude Accounts settings.",
|
||||
"claudeSystemNotSignedIn": "Claude isn't signed in. Run `{{loginCommand}}`, or choose an account in Claude Accounts settings.",
|
||||
"cliMissing": "{{agent}} wasn't found on the computer running this chat. Install it, or check its Command in Settings → Agents.",
|
||||
@@ -976,7 +1183,6 @@
|
||||
"providerExitedRejection": "{{agent}} stopped before this message was sent.",
|
||||
"providerExitedRow": "{{agent}} stopped while this response was in progress. You can continue in this conversation.",
|
||||
"providerRateLimited": "{{agent}} is rate-limited and retrying.",
|
||||
"claudeEffortInvalid": "Claude effort is invalid; choose low, medium, high, xhigh, or max and send again.",
|
||||
"providerRejected": "{{agent}} didn't accept this message.",
|
||||
"providerRejectedQuoted": "{{agent}} didn't accept this message: {{detail}}.",
|
||||
"providerRetryLastError": "Last error: {{detail}}.",
|
||||
@@ -1210,6 +1416,26 @@
|
||||
}
|
||||
},
|
||||
"workspace": {
|
||||
"cleanup": {
|
||||
"browse": {
|
||||
"forceDeleteRisk_one": "{{count}} workspace currently shows risk and may need a force delete",
|
||||
"forceDeleteRisk_other": "{{count}} workspaces currently show risk and may need a force delete",
|
||||
"selectAllSafetyChecked_one": "Select {{count}} safety-checked workspace",
|
||||
"selectAllSafetyChecked_other": "Select all {{count}} safety-checked workspaces",
|
||||
"selectionVanishedCount_one": "{{count}} selected workspace no longer exists.",
|
||||
"selectionVanishedCount_other": "{{count}} selected workspaces no longer exist.",
|
||||
"selectionWithheldCount_one": "{{count}} selected workspace is hidden by the current filters and was deselected.",
|
||||
"selectionWithheldCount_other": "{{count}} selected workspaces are hidden by the current filters and were deselected."
|
||||
},
|
||||
"scan": {
|
||||
"multipleErrorsCount_one": "Could not check {{count}} repository ({{names}}). Some workspaces may be missing. Refresh to try again.",
|
||||
"multipleErrorsCount_other": "Could not check {{count}} repositories ({{names}}). Some workspaces may be missing. Refresh to try again.",
|
||||
"multipleErrorsWithMore_one": "Could not check {{count}} repository ({{names}}, +{{moreCount}} more). Some workspaces may be missing. Refresh to try again.",
|
||||
"multipleErrorsWithMore_other": "Could not check {{count}} repositories ({{names}}, +{{moreCount}} more). Some workspaces may be missing. Refresh to try again.",
|
||||
"readyCount_one": "{{count}} workspace found.",
|
||||
"readyCount_other": "{{count}} workspaces found."
|
||||
}
|
||||
},
|
||||
"delete": {
|
||||
"unsavedEdits": {
|
||||
"blocked_one": "Save or close {{count}} unsaved file in {{name}} first",
|
||||
@@ -1343,8 +1569,22 @@
|
||||
"count_other": "{{count}} running terminals"
|
||||
}
|
||||
},
|
||||
"workspace": {
|
||||
"links": {
|
||||
"linkedCount_one": "{{count}} linked",
|
||||
"linkedCount_other": "{{count}} linked",
|
||||
"showLinked_one": "Show {{count}} linked review or task",
|
||||
"showLinked_other": "Show {{count}} linked reviews and tasks"
|
||||
}
|
||||
},
|
||||
"workspaceOptions": {
|
||||
"activeFilterCount_one": "{{count}} filter",
|
||||
"activeFilterCount_other": "{{count}} filters"
|
||||
},
|
||||
"workspaceSpace": {
|
||||
"compact": {
|
||||
"linkedAndScannedCount_one": "{{size}} in linked worktrees · {{count}} workspace",
|
||||
"linkedAndScannedCount_other": "{{size}} in linked worktrees · {{count}} workspaces"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2215,7 +2215,6 @@
|
||||
"ba64270bdb": "Agenten konfigurieren",
|
||||
"ab63f25397": "Agenten-Einstellungen öffnen",
|
||||
"0c5d6a479c": "[Optional]",
|
||||
"b5a0796911": "Verbinden",
|
||||
"dccd26d4e4": "Projekt auswählen",
|
||||
"d6b0a96f32": "Projekt hinzufügen",
|
||||
"969a8bff66": "Projekt",
|
||||
@@ -2276,7 +2275,8 @@
|
||||
"runSetupNow": "Einrichtung jetzt ausführen",
|
||||
"runCommandsNow": "Befehle jetzt ausführen",
|
||||
"skipForNow": "Vorerst überspringen",
|
||||
"skipCommands": "Befehle überspringen"
|
||||
"skipCommands": "Befehle überspringen",
|
||||
"connectProject": "{{name}} verbinden"
|
||||
},
|
||||
"NewWorkspaceComposerModal": {
|
||||
"createWorktree": "Worktree erstellen",
|
||||
@@ -3772,21 +3772,23 @@
|
||||
},
|
||||
"drop": {
|
||||
"handler": {
|
||||
"1e072f611e": "Hochladen von {{value0}} {{value1}} fehlgeschlagen.",
|
||||
"0c77693641": "Worktree noch nicht bereit — in Kürze erneut versuchen.",
|
||||
"ce8248b835": "Worktree-Pfad nicht verfügbar.",
|
||||
"internalTooManyPaths": "Die abgelegten Daten enthalten zu viele Pfade, um sie sicher in das Terminal einzufügen.",
|
||||
"internalPathsTooLarge": "Die Liste der abgelegten Pfade ist zu groß, um sie sicher in das Terminal einzufügen.",
|
||||
"internalHostMismatch": "Dateien vom selben Host wie dieses Terminal ablegen.",
|
||||
"b4cf68e889": "{{value0}} {{value1}} übersprungen.",
|
||||
"writeTimeout": "Ablegen der Datei abgebrochen: Das Terminal hat den Pfad nicht vor Ablauf des Sicherheitszeitlimits angenommen.",
|
||||
"writeRejected": "Ablegen der Datei abgebrochen: Das Terminal konnte den Pfad nicht annehmen.",
|
||||
"skippedSymlinkSingular": "Es wurde {{count}} symbolischer Link übersprungen.",
|
||||
"skippedSymlinkPlural": "Es wurden {{count}} symbolische Links übersprungen.",
|
||||
"uploadingFileSingular": "{{count}} Datei wird in die Laufzeitumgebung hochgeladen…",
|
||||
"uploadingFilePlural": "{{count}} Dateien werden in die Laufzeitumgebung hochgeladen…",
|
||||
"uploadingFileToRemoteSingular": "{{count}} Datei wird auf den Remote-Host hochgeladen…",
|
||||
"uploadingFileToRemotePlural": "{{count}} Dateien werden auf den Remote-Host hochgeladen…"
|
||||
"skippedSymlinks_one": "{{count}} symbolischer Link übersprungen.",
|
||||
"skippedSymlinks_other": "{{count}} symbolische Links übersprungen.",
|
||||
"skippedItems_one": "{{count}} Element übersprungen.",
|
||||
"skippedItems_other": "{{count}} Elemente übersprungen.",
|
||||
"failedUploads_one": "{{count}} Datei konnte nicht hochgeladen werden.",
|
||||
"failedUploads_other": "{{count}} Dateien konnten nicht hochgeladen werden.",
|
||||
"uploadingFiles_one": "{{count}} Datei wird in die Laufzeitumgebung hochgeladen…",
|
||||
"uploadingFiles_other": "{{count}} Dateien werden in die Laufzeitumgebung hochgeladen…",
|
||||
"uploadingFilesToRemote_one": "{{count}} Datei wird auf den Remote-Host hochgeladen…",
|
||||
"uploadingFilesToRemote_other": "{{count}} Dateien werden auf den Remote-Host hochgeladen…"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -3904,10 +3906,15 @@
|
||||
"sessionQueued": "Sitzung eingereiht",
|
||||
"openSupportedWorkspace": "Vor dem Fortsetzen einer Sitzung einen Arbeitsbereich öffnen.",
|
||||
"sessionHostMismatchUnsupported": "Diese Sitzung gehört zu einem anderen Host. Auf einem Arbeitsbereich desselben Hosts ablegen.",
|
||||
"oldPayload": "Diese Sitzung wurde aus einem älteren Orca-Fenster gezogen. Stattdessen über den Sitzungsverlauf fortsetzen."
|
||||
"oldPayload": "Diese Sitzung wurde aus einem älteren Orca-Fenster gezogen. Stattdessen über den Sitzungsverlauf fortsetzen.",
|
||||
"legacyDragCannotRetarget": "Diese Sitzung wurde aus einem älteren Orca-Fenster gezogen. Orca kann sie daher nicht dem ausgewählten Codex-Konto zuordnen. Die Sitzung stattdessen über den Sitzungsverlauf fortsetzen.",
|
||||
"legacyDragPrepareFailed": "Orca konnte diese ältere Codex-Sitzung nicht vorbereiten. Das Fortsetzen erneut versuchen."
|
||||
},
|
||||
"TabGroupDropOverlay": {
|
||||
"paneColumnLabel": "Neuer Teilbereich"
|
||||
},
|
||||
"useTabGroupCreationCommands": {
|
||||
"duplicateBrowserTabFailed": "Die gekoppelte Laufzeitumgebung konnte den verwalteten Browser-Tab nicht duplizieren."
|
||||
}
|
||||
},
|
||||
"bar": {
|
||||
@@ -4102,6 +4109,30 @@
|
||||
"TabBarQuickCommandHostLoadStatus": {
|
||||
"82e294f3ca": "Host nicht verfügbar",
|
||||
"7c129b08ff": "Host wird geladen…"
|
||||
},
|
||||
"nativeChatCliFork": {
|
||||
"cannotOpenInCli": "Diese Sitzung kann nicht in der CLI geöffnet werden."
|
||||
},
|
||||
"tabCreateEntry": {
|
||||
"fileNotFound": "Datei nicht gefunden: {{path}}",
|
||||
"cannotOpenDirectory": "Verzeichnis kann nicht geöffnet werden: {{path}}",
|
||||
"parentNotDirectory": "Die Datei kann nicht erstellt werden, da {{path}} kein Verzeichnis ist.",
|
||||
"fileNoLongerExists": "Datei existiert nicht mehr: {{path}}",
|
||||
"noActiveWorktree": "Kein aktiver Worktree."
|
||||
},
|
||||
"tabCreateEntryPath": {
|
||||
"filePathsCannotContainControlCharacters": "Dateipfade dürfen keine Steuerzeichen enthalten.",
|
||||
"enterAUrlOrFilePath": "Eine URL oder einen Dateipfad eingeben.",
|
||||
"homeRelativePathsAreNotSupported": "Pfade relativ zum Benutzerverzeichnis werden hier nicht unterstützt.",
|
||||
"enterAFilePathNotA": "Einen Dateipfad eingeben, keinen Verzeichnispfad.",
|
||||
"enterAnAbsoluteFilePath": "Einen absoluten Dateipfad eingeben.",
|
||||
"enterAnAbsolutePathForThis": "Einen absoluten Pfad für diesen Computer eingeben.",
|
||||
"enterARelativeFilePath": "Einen relativen Dateipfad eingeben.",
|
||||
"windowsDrivePathsAreNotSupported": "Windows-Laufwerkspfade werden hier nicht unterstützt.",
|
||||
"uncPathsAreNotSupportedHere": "UNC-Pfade werden hier nicht unterstützt.",
|
||||
"filePathsCannotContainEmptySegments": "Dateipfade dürfen keine leeren Segmente enthalten.",
|
||||
"filePathsCannotContainDotSegments": "Dateipfade dürfen keine Segmente . oder .. enthalten.",
|
||||
"filePathsCannotContainTildeSegments": "Dateipfade dürfen keine Segmente ~ enthalten."
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -4129,15 +4160,16 @@
|
||||
"4ebf90c12e": "Keine externen Ports erkannt",
|
||||
"7dac3ecc9d": "Externe Ports",
|
||||
"95495019ed": "Port-Scan auf {{value0}} nicht verfügbar: {{value1}}",
|
||||
"a8e4bdb412": " · {{value0}} extern",
|
||||
"c22ea609fd": "Ports",
|
||||
"ca41be2802": "Ports — {{value0}} {{value1}} im Arbeitsbereich{{value2}}",
|
||||
"b8bc3e420a": "Ports, {{value0}} {{value1}} im Arbeitsbereich",
|
||||
"3a87d54dfb": "Keine Ports im Arbeitsbereich erkannt",
|
||||
"c174bbbfed": "Ports im Arbeitsbereich werden gesucht…",
|
||||
"8caaa86e9a": "Ports",
|
||||
"45834a9ace": "Port",
|
||||
"2b84c4d11f": "{{value0}} im Arbeitsbereich · {{value1}} extern"
|
||||
"2b84c4d11f": "{{value0}} im Arbeitsbereich · {{value1}} extern",
|
||||
"portsAria_one": "Ports, {{count}} Port im Arbeitsbereich",
|
||||
"portsAria_other": "Ports, {{count}} Ports im Arbeitsbereich",
|
||||
"portsTooltipWithExternal_one": "Ports — {{count}} Port im Arbeitsbereich · {{externalCount}} extern",
|
||||
"portsTooltipWithExternal_other": "Ports — {{count}} Ports im Arbeitsbereich · {{externalCount}} extern",
|
||||
"portsTooltip_one": "Ports — {{count}} Port im Arbeitsbereich",
|
||||
"portsTooltip_other": "Ports — {{count}} Ports im Arbeitsbereich"
|
||||
},
|
||||
"ResourceUsageStatusSegment": {
|
||||
"946d9f94d0": "Abbrechen",
|
||||
@@ -4146,7 +4178,6 @@
|
||||
"27a74f91f0": "Derzeit ist nichts aktiv",
|
||||
"298f4be7f2": "CPU",
|
||||
"2aa2de6cb9": "Name",
|
||||
"30ff2c3c31": "{{value0}} verwaistes Terminal",
|
||||
"1fedf94eae": "Gesamte CPU-Auslastung. Werte über 100% bedeuten, dass mehrere Kerne gleichzeitig arbeiten.",
|
||||
"e7cf14ec78": "Terminal-Sitzungen sind nicht verfügbar. Die Liste ist möglicherweise veraltet.",
|
||||
"93b0de3c21": "Neu starten",
|
||||
@@ -4176,10 +4207,11 @@
|
||||
"d406915b78": "Renderer",
|
||||
"81cd37af99": "Hauptprozess",
|
||||
"fa6d36758d": "Sitzung {{value0}} zwangsweise beenden",
|
||||
"b8f4a2c1d0e3": "{{value0}} verwaiste Terminals",
|
||||
"c7e3b1a0d9f2": "{{value0}} verwaistes Terminal beenden",
|
||||
"d8f4c2b1e0a3": "{{value0}} verwaiste Terminals beenden",
|
||||
"e9a5d3c2b1f0": "{{value0}} zwangsweise beenden?"
|
||||
"e9a5d3c2b1f0": "{{value0}} zwangsweise beenden?",
|
||||
"endOrphanTerminals_one": "{{count}} verwaistes Terminal beenden",
|
||||
"endOrphanTerminals_other": "{{count}} verwaiste Terminals beenden",
|
||||
"orphanCount_one": "{{count}} verwaistes Terminal",
|
||||
"orphanCount_other": "{{count}} verwaiste Terminals"
|
||||
},
|
||||
"SshStatusSegment": {
|
||||
"3ad70e0365": "Remote-Hosts verwalten…",
|
||||
@@ -4239,10 +4271,6 @@
|
||||
"3325d996cb": "Ratenlimits aktualisieren",
|
||||
"cd9d7b40ff": "{{value0}} Sitzungen neu starten",
|
||||
"6cd6650b4c": "Sitzung neu starten",
|
||||
"1446d0d8a0": "{{value0}} Codex-Sitzungen verwenden noch das alte Konto.",
|
||||
"605901a495": "1 Codex-Sitzung verwendet noch das alte Konto",
|
||||
"5e5f9f5160": "1 Ratenlimit-Zurücksetzung verfügbar",
|
||||
"5ecae9197c": "{{value0}} Ratenlimit-Zurücksetzungen verfügbar",
|
||||
"25d8bbde69": "Zurücksetzung wird verwendet…",
|
||||
"e159fc1fd7": "Jetzt zurücksetzen",
|
||||
"972a1ff497": "Codex-Limits zurücksetzen?",
|
||||
@@ -4259,7 +4287,11 @@
|
||||
"codexSignInError": "Anmeldung bei Codex fehlgeschlagen. Bitte erneut versuchen.",
|
||||
"cursorUsageMenu": "Cursor-Nutzung",
|
||||
"hiddenUsageProviders": "Außerdem: {{value0}}",
|
||||
"zcodeUsageMenu": "ZCode-Nutzung"
|
||||
"zcodeUsageMenu": "ZCode-Nutzung",
|
||||
"rateLimitResetsAvailable_one": "{{count}} Ratenlimit-Zurücksetzung verfügbar",
|
||||
"rateLimitResetsAvailable_other": "{{count}} Ratenlimit-Zurücksetzungen verfügbar",
|
||||
"staleCodexSessions_one": "{{count}} Codex-Sitzung verwendet noch das alte Konto.",
|
||||
"staleCodexSessions_other": "{{count}} Codex-Sitzungen verwenden noch das alte Konto."
|
||||
},
|
||||
"StatusBarUsageEmptyCta": {
|
||||
"828c764a79": "Konto verbinden",
|
||||
@@ -4276,13 +4308,14 @@
|
||||
"SkillUpdateStatusSegment": {
|
||||
"runningLabel": "Skills werden aktualisiert",
|
||||
"runningOne": "{{value0}} wird aktualisiert…",
|
||||
"runningMany": "{{value0}} Skills werden aktualisiert…",
|
||||
"runningAria": "Skills werden aktualisiert. Zum Öffnen der Details klicken.",
|
||||
"successLabel": "Skills aktualisiert",
|
||||
"successAria": "Skills wurden aktualisiert. Zum Öffnen der Details klicken.",
|
||||
"attentionAria": "Einige Skill-Updates wurden übersprungen. Zum Öffnen der Details klicken.",
|
||||
"attentionLabel": "Skills erfordern Aufmerksamkeit",
|
||||
"attentionTooltip": "Einige Skill-Updates wurden übersprungen — für Details klicken"
|
||||
"attentionTooltip": "Einige Skill-Updates wurden übersprungen — für Details klicken",
|
||||
"runningSkills_one": "{{count}} Skill wird aktualisiert…",
|
||||
"runningSkills_other": "{{count}} Skills werden aktualisiert…"
|
||||
},
|
||||
"UpdateStatusSegment": {
|
||||
"5cd13105a3": "Update fehlgeschlagen. Zum Ausklappen klicken.",
|
||||
@@ -4324,11 +4357,8 @@
|
||||
"6f8f6a6b04": "Arbeitsbereiche filtern",
|
||||
"5caccea440": "Ausgewählte löschen",
|
||||
"e4a12c455b": "Leeren",
|
||||
"0cb1501ccf": "freigebbar",
|
||||
"65402b7192": "ausgewählt",
|
||||
"43171f3e60": "Arbeitsbereiche",
|
||||
"09960d86bd": "Gescannt",
|
||||
"63efebe0e6": "{{value0}} {{value1}} aus „Speicherplatz“ entfernt.",
|
||||
"eee5240810": "Arbeitsbereiche gelöscht",
|
||||
"9afc97f9a3": "Arbeitsbereich gelöscht",
|
||||
"792a214457": "Arbeitsbereich löschen",
|
||||
@@ -4336,7 +4366,6 @@
|
||||
"9155381019": "Partiell",
|
||||
"f39d291997": "Auswählen",
|
||||
"16988df079": "Keine Dateien gefunden.",
|
||||
"b25c2c1086": "Einträge auf oberster Ebene",
|
||||
"d3f9c69ddc": "Zoomen",
|
||||
"ef890d31b9": "Alle",
|
||||
"c28643d3da": "Zum Arbeitsbereich wechseln",
|
||||
@@ -4375,8 +4404,15 @@
|
||||
"c5135e7e4a": "Die Größen der Arbeitsbereiche werden ermittelt. Diese Seite kann verlassen werden.",
|
||||
"0990a63160": "Noch keine Größen von Arbeitsbereichen ermittelt.",
|
||||
"977bdf9a36": "Keine Einträge auf oberster Ebene vorhanden.",
|
||||
"131662ac65": "{{value0}} geöffnet",
|
||||
"0d1c78d749": "{{value0}} auswählen"
|
||||
"0d1c78d749": "{{value0}} auswählen",
|
||||
"removedFromSpace_one": "{{count}} Arbeitsbereich aus „Speicherplatz“ entfernt.",
|
||||
"removedFromSpace_other": "{{count}} Arbeitsbereiche aus „Speicherplatz“ entfernt.",
|
||||
"topLevelItems_one": "{{formattedCount}} Eintrag auf oberster Ebene",
|
||||
"topLevelItems_other": "{{formattedCount}} Einträge auf oberster Ebene",
|
||||
"selectedCount_one": "{{count}} ausgewählt",
|
||||
"selectedCount_other": "{{count}} ausgewählt",
|
||||
"reclaimableSize": "{{size}} freigebbar",
|
||||
"scanning": "Scan läuft"
|
||||
},
|
||||
"ports": {
|
||||
"status": {
|
||||
@@ -4390,7 +4426,8 @@
|
||||
"e4a709548c": "Ports konnten nicht aktualisiert werden",
|
||||
"acdb6df590": "Prozess auf {{value0}} beendet",
|
||||
"480d8f2347": "{{value0}} kopiert",
|
||||
"b854ec9ff5": "Browser konnte nicht geöffnet werden"
|
||||
"b854ec9ff5": "Browser konnte nicht geöffnet werden",
|
||||
"unknownProcess": "Unbekannter Prozess"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4419,8 +4456,6 @@
|
||||
"7ad719c4bf": "Begrenzt",
|
||||
"e740f92596": "Aktualisierung fehlgeschlagen",
|
||||
"8418ec448d": "Die Nutzung von {{value0}} konnte nicht aktualisiert werden. Agentensitzungen sind möglicherweise weiterhin angemeldet.",
|
||||
"45198c7d95": "1 Ratenlimit-Zurücksetzung verfügbar",
|
||||
"bce421cba3": "{{value0}} Ratenlimit-Zurücksetzungen verfügbar",
|
||||
"7ec6e030a0": "Nächste läuft jetzt ab",
|
||||
"d1e442a9e5": "Läuft jetzt ab",
|
||||
"6cf9eaed10": "Nächste läuft in {{value0}} ab",
|
||||
@@ -4469,7 +4504,14 @@
|
||||
"label": "Wird aktualisiert, wenn Claude läuft",
|
||||
"message": "Die Claude-Nutzung wird beim nächsten Start von Claude aktualisiert."
|
||||
}
|
||||
}
|
||||
},
|
||||
"justNow": "gerade eben",
|
||||
"minutesAgo": "vor {{minutes}} Min.",
|
||||
"hoursAgo": "vor {{hours}} Std.",
|
||||
"updatedAgo": "Aktualisiert {{time}}",
|
||||
"notYetUpdated": "Noch nicht aktualisiert",
|
||||
"rateLimitResetsAvailable_one": "{{count}} Ratenlimit-Zurücksetzung verfügbar",
|
||||
"rateLimitResetsAvailable_other": "{{count}} Ratenlimit-Zurücksetzungen verfügbar"
|
||||
},
|
||||
"SshTargetStatusRow": {
|
||||
"sshHost": "SSH-Host"
|
||||
@@ -4504,12 +4546,12 @@
|
||||
"RemoteServerUpdateStatusSegment": {
|
||||
"updating": "{{value0}}/{{value1}} werden aktualisiert",
|
||||
"updatingTooltip": "Updates für entfernte Orca-Server werden ausgeführt",
|
||||
"failed": "{{value0}} Server-Updates fehlgeschlagen",
|
||||
"failedTooltip": "Updates für entfernte Orca-Server öffnen, um sie zu prüfen und erneut zu versuchen",
|
||||
"updated": "{{value0}} Server aktualisiert",
|
||||
"updatedTooltip": "Updates für entfernte Orca-Server abgeschlossen",
|
||||
"failedOne": "1 Server-Update fehlgeschlagen",
|
||||
"updatedOne": "1 Server aktualisiert"
|
||||
"failedCount_one": "{{count}} Serveraktualisierung fehlgeschlagen",
|
||||
"failedCount_other": "{{count}} Serveraktualisierungen fehlgeschlagen",
|
||||
"updatedCount_one": "{{count}} Server aktualisiert",
|
||||
"updatedCount_other": "{{count}} Server aktualisiert"
|
||||
},
|
||||
"resource": {
|
||||
"memory": {
|
||||
@@ -4517,7 +4559,10 @@
|
||||
"workingSetDescription": "Summe des Arbeitssatzes (WS): Speicherseiten, die sich derzeit im RAM befinden. Gemeinsam genutzte Seiten können in mehreren Prozessen erscheinen. Speicher, den Windows ausgelagert hat, wird hier nicht mitgezählt.",
|
||||
"privateBytesDescription": "Summe der privaten Bytes: von diesen Prozessen zugesicherter Speicher, unabhängig davon, ob er sich im RAM befindet oder ausgelagert ist. Der Host rechnet diesen Wert auf sein Zusicherungslimit an. Daher steigt er weiter, während der obige Arbeitssatz durch Auslagerung schrumpft.",
|
||||
"footprintDescription": "Summe des Speicherbedarfs, derselbe Wert wie in Activity Monitor: Speicher, der den einzelnen Prozessen gehört, einschließlich Grafikspeicher. Gemeinsam genutzte Speicherseiten werden nicht doppelt gezählt.",
|
||||
"rssDescription": "Summe des residenten Speichers (RSS). Gemeinsam genutzte oder mehrfach eingeblendete Speicherseiten können in mehreren Prozessen erscheinen."
|
||||
"rssDescription": "Summe des residenten Speichers (RSS). Gemeinsam genutzte oder mehrfach eingeblendete Speicherseiten können in mehreren Prozessen erscheinen.",
|
||||
"memColumn": "Speicher",
|
||||
"memorySummary": "Σ Arbeitsspeicher",
|
||||
"privateSummary": "Σ Privat"
|
||||
}
|
||||
},
|
||||
"manager": {
|
||||
@@ -4566,29 +4611,29 @@
|
||||
"repair": "Erneut koppeln…"
|
||||
},
|
||||
"NativeChatResumeStatusSegment": {
|
||||
"labelOne": "1 Chat zum Fortsetzen",
|
||||
"label": "{{value0}} Chats zum Fortsetzen",
|
||||
"ariaLabelOne": "1 Chat zum Fortsetzen verfügbar",
|
||||
"ariaLabel": "{{value0}} Chats zum Fortsetzen verfügbar",
|
||||
"tooltip": "Unterbrochene Chats öffnen, die fortgesetzt werden können",
|
||||
"failedLabelOne": "1 Chat konnte nicht fortgesetzt werden",
|
||||
"failedLabel": "{{value0}} Chats konnten nicht fortgesetzt werden",
|
||||
"failedAriaOne": "1 Chat konnte nicht fortgesetzt werden. Für Details klicken.",
|
||||
"failedAria": "{{value0}} Chats konnten nicht fortgesetzt werden. Für Details klicken.",
|
||||
"failedTooltip": "Chats, die Orca nach dem Neustart nicht fortsetzen konnte. Für Details klicken.",
|
||||
"checkLabelOne": "1 Chat zu prüfen",
|
||||
"checkLabel": "{{value0}} Chats zu prüfen",
|
||||
"checkAriaOne": "1 Chat nach dem Fortsetzen zu prüfen. Für Details klicken.",
|
||||
"checkAria": "{{value0}} Chats nach dem Fortsetzen zu prüfen. Für Details klicken.",
|
||||
"checkTooltip": "Chats, die Orca nach dem Neustart nicht fortsetzen konnte oder deren Fortsetzung nicht bestätigt werden konnte. Für Details klicken.",
|
||||
"resumingTooltip": "Unterbrochene Chats werden wiederhergestellt und zum Fortfahren aufgefordert…",
|
||||
"resumingProgressLabel": "Chats werden fortgesetzt: {{value0}}/{{value1}}",
|
||||
"resumingProgressAria": "Chats werden fortgesetzt, {{value0}} von {{value1}} abgeschlossen. Zum Öffnen der Details klicken.",
|
||||
"resumedLabelOne": "1 Chat fortgesetzt",
|
||||
"resumedLabel": "{{value0}} Chats fortgesetzt",
|
||||
"resumedAriaOne": "1 Chat fortgesetzt. Zum Anzeigen klicken.",
|
||||
"resumedAria": "{{value0}} Chats fortgesetzt. Zum Anzeigen klicken.",
|
||||
"resumedTooltip": "Chats, die Orca nach dem Neustart fortgesetzt hat. Zum Anzeigen klicken."
|
||||
"resumedTooltip": "Chats, die Orca nach dem Neustart fortgesetzt hat. Zum Anzeigen klicken.",
|
||||
"chatsFailedLabel_one": "{{count}} Chat konnte nicht fortgesetzt werden",
|
||||
"chatsFailedLabel_other": "{{count}} Chats konnten nicht fortgesetzt werden",
|
||||
"chatsFailedAria_one": "{{count}} Chat konnte nicht fortgesetzt werden. Für Details klicken.",
|
||||
"chatsFailedAria_other": "{{count}} Chats konnten nicht fortgesetzt werden. Für Details klicken.",
|
||||
"resumedLabelCount_one": "{{count}} Chat fortgesetzt",
|
||||
"resumedLabelCount_other": "{{count}} Chats fortgesetzt",
|
||||
"resumedAriaCount_one": "{{count}} Chat fortgesetzt. Zum Anzeigen klicken.",
|
||||
"resumedAriaCount_other": "{{count}} Chats fortgesetzt. Zum Anzeigen klicken.",
|
||||
"checkLabelCount_one": "{{count}} Chat zu prüfen",
|
||||
"checkLabelCount_other": "{{count}} Chats zu prüfen",
|
||||
"checkAriaCount_one": "{{count}} Chat nach dem Fortsetzen zu prüfen. Für Details klicken.",
|
||||
"checkAriaCount_other": "{{count}} Chats nach dem Fortsetzen zu prüfen. Für Details klicken.",
|
||||
"labelCount_one": "{{count}} Chat zum Fortsetzen",
|
||||
"labelCount_other": "{{count}} Chats zum Fortsetzen",
|
||||
"ariaLabelCount_one": "{{count}} Chat kann fortgesetzt werden",
|
||||
"ariaLabelCount_other": "{{count}} Chats können fortgesetzt werden"
|
||||
},
|
||||
"StatusBarUsageChangeNotices": {
|
||||
"compactTitle": "Nutzungsanzeige ist jetzt kompakt",
|
||||
@@ -4597,6 +4642,81 @@
|
||||
"usageUnitLabel": {
|
||||
"used": "Verbraucht",
|
||||
"remaining": "Verbleibend"
|
||||
},
|
||||
"mergeSnapshotAndSessions": {
|
||||
"unattributed": "Nicht zugeordnet"
|
||||
},
|
||||
"resourceSessionLabels": {
|
||||
"terminalNumber": "Terminal {{number}}",
|
||||
"pid": "PID {{pid}}",
|
||||
"sessionPrefix": "Sitzung {{id}}",
|
||||
"unknownSession": "(unbekannte Sitzung)",
|
||||
"unknown": "unbekannt"
|
||||
},
|
||||
"runtimeTargets": {
|
||||
"wslDefault": "WSL-Standard"
|
||||
},
|
||||
"floatingWorkspace": {
|
||||
"minimize": "Schwebenden Arbeitsbereich minimieren",
|
||||
"show": "Schwebenden Arbeitsbereich anzeigen"
|
||||
},
|
||||
"workspaceSpaceGitRefresh": {
|
||||
"ownerUnavailable": "Der Besitzer des Arbeitsbereichs ist nicht mehr verfügbar"
|
||||
},
|
||||
"workspaceSpaceDecision": {
|
||||
"syncedWithUpstream": "Mit Upstream synchronisiert",
|
||||
"aheadAndBehind": "{{ahead}} voraus, {{behind}} zurück",
|
||||
"ahead": "{{ahead}} voraus",
|
||||
"behind": "{{behind}} zurück",
|
||||
"activeAgents_one": "{{count}} aktiver Agent",
|
||||
"activeAgents_other": "{{count}} aktive Agenten",
|
||||
"completedAgents_one": "{{count}} abgeschlossener Agent",
|
||||
"completedAgents_other": "{{count}} abgeschlossene Agenten",
|
||||
"activeAndCompletedAgents": "{{active}}, {{completed}}",
|
||||
"completedAgentsRetained_one": "{{count}} abgeschlossener Agent beibehalten",
|
||||
"completedAgentsRetained_other": "{{count}} abgeschlossene Agenten beibehalten",
|
||||
"noTrackedAgents": "Keine erfassten Agenten aktiv",
|
||||
"noTerminalTabs": "Keine Terminal-Tabs",
|
||||
"liveTerminalTabs_one": "{{live}} aktiv von {{count}} Terminal-Tab",
|
||||
"liveTerminalTabs_other": "{{live}} aktiv von {{count}} Terminal-Tabs",
|
||||
"gitStatusUnavailable": "Git-Status nicht verfügbar: {{error}}",
|
||||
"gitStatusNotLoaded": "Git-Status noch nicht geladen",
|
||||
"noUncommittedFiles": "Keine Dateien mit nicht committeten Änderungen",
|
||||
"changedFiles_one": "{{count}} geänderte Datei",
|
||||
"changedFiles_other": "{{count}} geänderte Dateien",
|
||||
"noEditorFiles": "Keine Dateien im Editor geöffnet",
|
||||
"editorFilesOpen_one": "{{count}} Datei im Editor geöffnet",
|
||||
"editorFilesOpen_other": "{{count}} Dateien im Editor geöffnet",
|
||||
"dirtyOfOpen": "{{dirty}} von {{open}}",
|
||||
"dirtyEditorBuffers_one": "{{count}} ungespeicherter Editor-Puffer",
|
||||
"dirtyEditorBuffers_other": "{{count}} ungespeicherte Editor-Puffer",
|
||||
"openFiles_one": "{{count}} geöffnete Datei",
|
||||
"openFiles_other": "{{count}} geöffnete Dateien",
|
||||
"activeWorkspace": "Dies ist der aktive Arbeitsbereich",
|
||||
"mainWorktreeProtected": "Der Haupt-Worktree ist geschützt",
|
||||
"workspaceProtected": "Der Arbeitsbereich ist geschützt",
|
||||
"canDeleteAfterReview": "Kann nach Prüfung gelöscht werden",
|
||||
"noLinkedIssue": "Kein verknüpftes Issue",
|
||||
"noLinkedReview": "Kein verknüpfter PR",
|
||||
"browserTabsOpen_one": "{{count}} Browser-Tab geöffnet",
|
||||
"browserTabsOpen_other": "{{count}} Browser-Tabs geöffnet"
|
||||
},
|
||||
"workspaceSpaceFormat": {
|
||||
"cancellingScan": "Scan wird abgebrochen",
|
||||
"currentWorkspaces": "Arbeitsbereiche",
|
||||
"scanningWorkspaces": "{{scanned}} von {{total}} werden gescannt · {{current}}",
|
||||
"scanningRepos_one": "{{scanned}} von {{count}} Repo wird gescannt · {{current}}",
|
||||
"scanningRepos_other": "{{scanned}} von {{count}} Repos werden gescannt · {{current}}",
|
||||
"scanningSizes": "Größen der Arbeitsbereiche werden ermittelt",
|
||||
"status": {
|
||||
"scanned": "Gescannt",
|
||||
"missing": "Fehlt",
|
||||
"noAccess": "Kein Zugriff",
|
||||
"unavailable": "Nicht verfügbar",
|
||||
"failed": "Fehlgeschlagen"
|
||||
},
|
||||
"mainWorktree": "Haupt-Worktree",
|
||||
"detached": "losgelöst"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -5372,12 +5492,10 @@
|
||||
"670864ab52": "Lokaler Branch {{value0}} wird aktuell gehalten",
|
||||
"84c62e4d7f": "{{value0}} konnte nicht aktiviert werden",
|
||||
"442552c656": "Einstellungen öffnen und erneut versuchen.",
|
||||
"f15fd80989": "Der neue Worktree ist aktuell, aber der lokale Branch {{value0}} liegt um {{value1}} {{value2}} zurück, sodass KI-Diffs möglicherweise einen veralteten Verlauf zum Vergleich verwenden. Orca kann ihn automatisch aktuell halten. Jederzeit änderbar in",
|
||||
"3d260e1a5d": "Einstellungen › {{value0}}",
|
||||
"34a03a6565": "{{value0}} aktuell halten",
|
||||
"4a18052018": "Lokaler Branch {{value0}} liegt hinter {{value1}}",
|
||||
"commit": "Commit",
|
||||
"commits": "Commits"
|
||||
"staleLocalBranch_one": "Der neue Worktree ist aktuell, aber der lokale Branch {{branch}} liegt {{count}} Commit zurück. KI-Diffs vergleichen daher möglicherweise mit einem veralteten Verlauf. Orca kann ihn automatisch aktuell halten. Dies lässt sich jederzeit unter <settings>Einstellungen › {{setting}}</settings> ändern",
|
||||
"staleLocalBranch_other": "Der neue Worktree ist aktuell, aber der lokale Branch {{branch}} liegt {{count}} Commits zurück. KI-Diffs vergleichen daher möglicherweise mit einem veralteten Verlauf. Orca kann ihn automatisch aktuell halten. Dies lässt sich jederzeit unter <settings>Einstellungen › {{setting}}</settings> ändern"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -5431,12 +5549,11 @@
|
||||
"39d51212cc": "Gruppenname",
|
||||
"aa0247680d": "Nein, separat importieren",
|
||||
"a0bc4d1f8e": "Ja, als Gruppe importieren",
|
||||
"8401a7a0d0": "1 Repository",
|
||||
"d4f1df62ef": "{{value0}} Repositorys",
|
||||
"b4263a2ac4": "{{value0}} in {{value1}} gefunden.",
|
||||
"24eda6c8b2": "Suche läuft… {{value0}}",
|
||||
"6149d5203f": "Keine Repositorys ausgewählt. Stattdessen den übergeordneten Ordner öffnen, um Editor, Terminal und Suche ohne Git-Funktionen zu verwenden.",
|
||||
"e52454b7f6": "Als Ordner öffnen"
|
||||
"e52454b7f6": "Als Ordner öffnen",
|
||||
"foundRepositories_one": "{{count}} Repository in {{path}} gefunden.",
|
||||
"foundRepositories_other": "{{count}} Repositorys in {{path}} gefunden."
|
||||
},
|
||||
"AddRepoRemoteStep": {
|
||||
"6680289908": "/home/user/project",
|
||||
@@ -5505,9 +5622,8 @@
|
||||
"eab8b45238": "Fehler kopieren",
|
||||
"a23b22d16f": "Kopiert",
|
||||
"74fc00776f": "Fehlerdetails",
|
||||
"3afcad0497": "anhand der ersten Agentennachricht.",
|
||||
"ff62a18580": "Orca konnte keinen Branch-Namen generieren für",
|
||||
"ca3b225195": "Automatische Branch-Benennung fehlgeschlagen"
|
||||
"ca3b225195": "Automatische Branch-Benennung fehlgeschlagen",
|
||||
"couldNotGenerateBranchName": "Orca konnte aus der ersten Agentennachricht keinen Branch-Namen für <name>{{name}}</name> erzeugen."
|
||||
},
|
||||
"CreateProjectLocationField": {
|
||||
"95548e33bf": "Übergeordneten Ordner auswählen…",
|
||||
@@ -5527,37 +5643,38 @@
|
||||
"2b56b35f53": "Dies lässt sich in den Einstellungen ändern.",
|
||||
"dd3a45bbbd": "Diese Bestätigung wird beim nächsten Mal übersprungen.",
|
||||
"fc23c4cbdf": "Arbeitsbereich löschen",
|
||||
"86f0ae1257": "Arbeitsbereiche löschen"
|
||||
"86f0ae1257": "Arbeitsbereiche löschen",
|
||||
"removeFolderProjectInstead": "Das Ordnerprojekt entfernen, statt diesen Arbeitsbereich zu löschen.",
|
||||
"gitBlocksMainWorktree": "Git erlaubt das Entfernen des Haupt-Worktrees nicht."
|
||||
},
|
||||
"DeleteWorktreeDirtyChangeHint": {
|
||||
"showLoadedPaths": "Geladene Pfade anzeigen",
|
||||
"loadedPathsNotice": "Geladene Pfade sind möglicherweise unvollständig oder veraltet.",
|
||||
"loadedChangedPaths": "Geladene geänderte Pfade",
|
||||
"unresolvedConflict": "Ungelöster Konflikt",
|
||||
"moreLoadedPaths": "und {{value0}} weitere geladene Pfade",
|
||||
"changeCount_one": "{{count}} nicht committete oder nicht verfolgte Änderung",
|
||||
"changeCount_other": "{{count}} nicht committete oder nicht verfolgte Änderungen",
|
||||
"changes": "Nicht committete oder nicht verfolgte Änderungen"
|
||||
"changes": "Nicht committete oder nicht verfolgte Änderungen",
|
||||
"moreLoadedPaths_one": "und {{count}} weiterer geladener Pfad",
|
||||
"moreLoadedPaths_other": "und {{count}} weitere geladene Pfade"
|
||||
},
|
||||
"DeleteWorktreeLineageNotice": {
|
||||
"ad407c2d55": "weitere",
|
||||
"a940f3c96e": "Untergeordnete Arbeitsbereiche werden gelöscht",
|
||||
"29b98bf9cd": "Beim Löschen dieses Arbeitsbereichs werden auch {{value0}} untergeordnete Arbeitsbereiche gelöscht.",
|
||||
"66798cc6a2": "Beim Löschen dieses Arbeitsbereichs wird auch 1 untergeordneter Arbeitsbereich gelöscht."
|
||||
"alsoDeletesChildren_one": "Beim Löschen dieses Arbeitsbereichs wird auch {{count}} untergeordneter Arbeitsbereich gelöscht.",
|
||||
"alsoDeletesChildren_other": "Beim Löschen dieses Arbeitsbereichs werden auch {{count}} untergeordnete Arbeitsbereiche gelöscht.",
|
||||
"moreChildren_one": "+{{count}} weiterer",
|
||||
"moreChildren_other": "+{{count}} weitere"
|
||||
},
|
||||
"DeleteWorktreeSkipConfirmOption": {
|
||||
"29aefb7e52": "Nicht erneut fragen"
|
||||
},
|
||||
"DeleteWorktreeWarningPanels": {
|
||||
"026738155a": "(das ursprüngliche Klonverzeichnis).",
|
||||
"c4f96a6e18": "Haupt-Worktree",
|
||||
"e3be9eba15": "Dies ist der"
|
||||
"mainWorktreeNotice": "Dies ist der <strong>Haupt-Worktree</strong> (das ursprüngliche Klonverzeichnis)."
|
||||
},
|
||||
"ImportedWorktreesVisibilityLine": {
|
||||
"b7a87dc32f": "In Worktree-Liste anzeigen",
|
||||
"ad99f4eea9": "Ausgeblendet lassen",
|
||||
"9f4f14e821": "Dies lässt sich später im Projektmenü ändern.",
|
||||
"b2bc47c080": "weitere Speicherorte",
|
||||
"b47ba1a9d2": "Vorschau für {{value0}}",
|
||||
"2251d41ebb": "Ausgeblendete Worktree-Gruppen",
|
||||
"5a9688802a": "{{value0}} weitere anzeigen",
|
||||
@@ -5571,7 +5688,9 @@
|
||||
"keepHiddenAriaLabel_one": "{{count}} entdeckten Worktree für {{repo}} ausgeblendet lassen; über das Projektmenü wieder einblenden",
|
||||
"keepHiddenAriaLabel_other": "{{count}} entdeckte Worktrees für {{repo}} ausgeblendet lassen; über das Projektmenü wieder einblenden",
|
||||
"keepHiddenTooltip": "Ausgeblendet lassen - über das Projektmenü wieder einblenden",
|
||||
"repoOnHost": "{{repo}} auf {{host}}"
|
||||
"repoOnHost": "{{repo}} auf {{host}}",
|
||||
"moreLocations_one": "+ {{count}} weiterer Speicherort",
|
||||
"moreLocations_other": "+ {{count}} weitere Speicherorte"
|
||||
},
|
||||
"NonGitFolderDialog": {
|
||||
"e52454b7f6": "Als Ordner öffnen",
|
||||
@@ -5605,20 +5724,24 @@
|
||||
},
|
||||
"ProjectGroupDeleteDialog": {
|
||||
"ca65b78f78": "Abbrechen",
|
||||
"69f5cb97d0": "Löschen",
|
||||
"591f330288": "Projektgruppe löschen",
|
||||
"2c14ce677a": "Wird gelöscht…",
|
||||
"0e0e6764af": "Enthaltene Projekte",
|
||||
"ad407c2d55": "weitere",
|
||||
"removeContainedProjectSingular": "1 enthaltenes Projekt entfernen",
|
||||
"removeContainedProjectPlural": "{{value0}} enthaltene Projekte entfernen",
|
||||
"55f75628c0": "Projektordner auf dem Datenträger werden nicht gelöscht.",
|
||||
"fec7e9c8ae": "Gruppe löschen"
|
||||
"fec7e9c8ae": "Gruppe löschen",
|
||||
"removeContainedProjects_one": "{{count}} enthaltenes Projekt entfernen",
|
||||
"removeContainedProjects_other": "{{count}} enthaltene Projekte entfernen",
|
||||
"deleteGroupDescription": "<name>{{name}}</name> löschen.",
|
||||
"moreProjects_one": "+{{count}} weiteres",
|
||||
"moreProjects_other": "+{{count}} weitere"
|
||||
},
|
||||
"ProjectGroupNameDialog": {
|
||||
"d99a034073": "Abbrechen",
|
||||
"83dfbc5313": "Gruppenname",
|
||||
"4a64e78822": "Wird gespeichert…"
|
||||
"4a64e78822": "Wird gespeichert…",
|
||||
"defaultGroupName": "Gruppe {{name}}",
|
||||
"create": "Erstellen",
|
||||
"rename": "Umbenennen"
|
||||
},
|
||||
"RemoteFileBrowser": {
|
||||
"2300612806": "Zum Filtern tippen oder einen Pfad eingeben…",
|
||||
@@ -5630,7 +5753,9 @@
|
||||
"largeInputNoMatches": "Keine Treffer für diese lange Eingabe",
|
||||
"entriesLabel": "Ordnereinträge",
|
||||
"inputLabel": "Filter oder Pfad",
|
||||
"fileHint": "Dateien können nicht als Projekt geöffnet werden"
|
||||
"fileHint": "Dateien können nicht als Projekt geöffnet werden",
|
||||
"invalidPathRepeatedSeparators": "Ungültiger Pfad: wiederholte Trennzeichen",
|
||||
"invalidPathControlCharacters": "Ungültiger Pfad: Steuerzeichen sind nicht erlaubt"
|
||||
},
|
||||
"SleepTwinWorkspaceDialog": {
|
||||
"title": "Arbeitsbereich in Ruhezustand versetzen",
|
||||
@@ -5660,11 +5785,10 @@
|
||||
"70715947fb": "Setup-Skript darf nicht leer sein",
|
||||
"888b83bf78": "Setup-Skript konnte nicht gespeichert werden",
|
||||
"a49196d538": "Wird ausgeführt, wenn Orca einen neuen Worktree erstellt.",
|
||||
"d9f2db2738": "Einstellungen dieses Projekts",
|
||||
"a5bb8c5135": "Gespeichert in den",
|
||||
"savedSetupCommand": "Setup-Befehl gespeichert.",
|
||||
"savedWithSkippedFields_one": "{{count}} nicht unterstütztes Feld übersprungen. Setup-Befehl gespeichert.",
|
||||
"savedWithSkippedFields_other": "{{count}} nicht unterstützte Felder übersprungen. Setup-Befehl gespeichert."
|
||||
"savedWithSkippedFields_other": "{{count}} nicht unterstützte Felder übersprungen. Setup-Befehl gespeichert.",
|
||||
"savedInProjectSettings": "In den <settings>Einstellungen dieses Projekts</settings> gespeichert"
|
||||
},
|
||||
"SetupScriptPromptCardViews": {
|
||||
"96a7f4198c": "Lokales Setup speichern",
|
||||
@@ -5672,20 +5796,17 @@
|
||||
"31b8b01a45": "Einstellungen",
|
||||
"4a98f907ae": "Erneut versuchen",
|
||||
"0a98169776": "Einen Setup-Befehl hinzufügen, der ausgeführt wird, wenn Orca neue Worktrees erstellt.",
|
||||
"8349e3fa4c": ". Speichern, um ihn für neue Worktrees auszuführen.",
|
||||
"b56d1322f7": "Setup-Befehl gefunden in",
|
||||
"aef6c0a213": "Den erkannten Befehl speichern, damit er bei jeder Worktree-Erstellung durch Orca ausgeführt wird.",
|
||||
"660cdc17f8": "für die Einrichtung. Einen lokalen Befehl hinzufügen oder die Quelle in den Einstellungen ändern.",
|
||||
"8f6be51aa1": "orca.yaml",
|
||||
"bb879db364": "Dieses Repo ignoriert geteilte Setup-Skripte aus",
|
||||
"0155fb9ed3": "Das Setup-Skript dieses Repos konnte gerade nicht überprüft werden.",
|
||||
"eefa756190": "Manuell konfigurieren",
|
||||
"ca4efcbc25": "Speichern",
|
||||
"d02e6a42b1": "Erkannt in",
|
||||
"fdbc6cb064": "Erkanntes Setup-Skript",
|
||||
"7275f674cc": "Erkanntes Setup",
|
||||
"822ff300ad": "Ausblenden",
|
||||
"5bfd5c8779": "Setup-Skripte ausblenden"
|
||||
"5bfd5c8779": "Setup-Skripte ausblenden",
|
||||
"detectedFromSource": "In <source>{{source}}</source> erkannt",
|
||||
"ignoresSharedSetup": "Dieses Repo ignoriert gemeinsame Einrichtungsskripte aus <yaml>orca.yaml</yaml>. Einen lokalen Befehl hinzufügen oder die Quelle in den Einstellungen ändern.",
|
||||
"foundSetupCommandIn": "Ein Einrichtungsbefehl wurde in <source>{{source}}</source> gefunden. Speichern, um ihn für neue Worktrees auszuführen."
|
||||
},
|
||||
"SidebarFeedbackDialog": {
|
||||
"8bf619e4cf": "Abbrechen",
|
||||
@@ -5868,8 +5989,9 @@
|
||||
"WorkspaceKanbanDrawerHeader": {
|
||||
"f369f5c5a3": "Schließen",
|
||||
"e1a34450fc": "Arbeitsbereiche nach Status organisieren und Arbeitsbereichskarten öffnen.",
|
||||
"81870af08f": "ausgewählt",
|
||||
"c6a77ab0f4": "Arbeitsbereichsübersicht"
|
||||
"c6a77ab0f4": "Arbeitsbereichsübersicht",
|
||||
"selectedCount_one": "{{count}} ausgewählt",
|
||||
"selectedCount_other": "{{count}} ausgewählt"
|
||||
},
|
||||
"WorkspaceKanbanPinDropTarget": {
|
||||
"c30151c5ee": "Zum Anheften hier ablegen, ohne den Status zu ändern.",
|
||||
@@ -5970,7 +6092,8 @@
|
||||
"2931b42b09": "Status: Entwurf {{value0}}",
|
||||
"e888362def": "Status: Geschlossen",
|
||||
"f394b3e86e": "Status: Gemergt",
|
||||
"af2b07bda5": "Status: {{value0}}"
|
||||
"af2b07bda5": "Status: {{value0}}",
|
||||
"checksStatus": "Checks: {{status}}"
|
||||
},
|
||||
"WorktreeCardPorts": {
|
||||
"3240f320d7": "Aktive Ports",
|
||||
@@ -5981,8 +6104,9 @@
|
||||
"5d1a5d51bb": "Prozess auf {{value0}} beendet",
|
||||
"c89f290e25": "{{value0}} kopiert",
|
||||
"d1113f4660": "Browser konnte nicht geöffnet werden",
|
||||
"fed49903c9": "{{value0}} {{value1}} aktiv",
|
||||
"unknownProcess": "Unbekannter Prozess"
|
||||
"unknownProcess": "Unbekannter Prozess",
|
||||
"livePorts_one": "{{count}} aktiver Port",
|
||||
"livePorts_other": "{{count}} aktive Ports"
|
||||
},
|
||||
"WorktreeContextMenu": {
|
||||
"c39c37676a": "Eine Gruppe erstellen und dieses Projekt dorthin verschieben.",
|
||||
@@ -6027,7 +6151,6 @@
|
||||
"f9dc6cc5d3": "Projektgruppe umbenennen",
|
||||
"370c6a55dd": "Filter zurücksetzen",
|
||||
"b7acbf038b": "Keine Arbeitsbereiche gefunden",
|
||||
"0c6ee14f23": "Untergeordnet",
|
||||
"c83968f87f": "Projekt entfernen",
|
||||
"64e55f7f01": "Aus Gruppe entfernen",
|
||||
"4a08fb55f2": "In Gruppe verschieben",
|
||||
@@ -6040,12 +6163,7 @@
|
||||
"4d7b73658c": "Gruppe umbenennen",
|
||||
"79465e9034": "Gruppenaktionen für {{value0}}",
|
||||
"bfbedc547b": "Worktrees",
|
||||
"045a8aed48": "Untergeordnete",
|
||||
"bb85cd86ba": "Arbeitsbereich für {{value0}} erstellen",
|
||||
"20bebf9c7f": "{{value0}} untergeordneten Arbeitsbereich anzeigen",
|
||||
"c1f4a31623": "{{value0}} untergeordnete Arbeitsbereiche anzeigen",
|
||||
"e97297cb75": "{{value0}} untergeordneten Arbeitsbereich ausblenden",
|
||||
"0cd15956d4": "{{value0}} untergeordnete Arbeitsbereiche ausblenden",
|
||||
"bd37a57ac8": "Arbeitsbereich für {{value0}} erstellen",
|
||||
"b667b59632": "Einige Projekte konnten nicht aus Orca entfernt werden",
|
||||
"groupDeleteFailed": "Gruppe konnte nicht gelöscht werden",
|
||||
@@ -6056,8 +6174,14 @@
|
||||
"sidebarRowMissing": "Ziel existiert nicht mehr",
|
||||
"failedUnnestWorkspace": "Unterordnung des Arbeitsbereichs konnte nicht aufgehoben werden",
|
||||
"hostRepairRequired": "Erneute Kopplung erforderlich",
|
||||
"groupProjectsRemainedSingular": "{{remaining}} von {{count}} enthaltenem Projekt blieb nach dem Löschen der Gruppe erhalten.",
|
||||
"groupProjectsRemainedPlural": "Verbleibende Projekte nach dem Löschen der Gruppe: {{remaining}} von {{count}}."
|
||||
"showChildWorkspaces_one": "{{count}} untergeordneten Arbeitsbereich anzeigen",
|
||||
"hideChildWorkspaces_one": "{{count}} untergeordneten Arbeitsbereich ausblenden",
|
||||
"showChildWorkspaces_other": "{{count}} untergeordnete Arbeitsbereiche anzeigen",
|
||||
"hideChildWorkspaces_other": "{{count}} untergeordnete Arbeitsbereiche ausblenden",
|
||||
"childCount_one": "{{count}} untergeordneter Arbeitsbereich",
|
||||
"childCount_other": "{{count}} untergeordnete Arbeitsbereiche",
|
||||
"groupProjectsRemained_one": "Verbleibende Projekte aus der gelöschten Gruppe: {{remaining}} von {{count}}.",
|
||||
"groupProjectsRemained_other": "Verbleibende Projekte aus der gelöschten Gruppe: {{remaining}} von {{count}}."
|
||||
},
|
||||
"WorktreeMetaDialog": {
|
||||
"3db0a2a593": "Abbrechen",
|
||||
@@ -6121,7 +6245,6 @@
|
||||
"d40d436fc2": "Sichtbarkeit der Worktrees konnte nicht aktualisiert werden. Erneut versuchen.",
|
||||
"unsupportedHost": "Dieser Host unterstützt keine quellenspezifische Worktree-Sichtbarkeit. Orca auf dem Host aktualisieren, um diese Einstellung zu ändern.",
|
||||
"search": "Ausgeblendete Worktrees suchen",
|
||||
"searchPlaceholder": "{{value0}} Worktrees durchsuchen…",
|
||||
"noMatches": "Keine passenden Worktrees",
|
||||
"allShown": "Alle gefundenen Worktrees werden angezeigt",
|
||||
"noneFound": "Keine außerhalb von Orca erstellten Worktrees gefunden",
|
||||
@@ -6129,7 +6252,9 @@
|
||||
"disableSource": "Eine Quelle deaktivieren, um ihre Worktrees einzeln zu verwalten.",
|
||||
"appearWhenDetected": "Neue Worktrees erscheinen hier, sobald Orca sie erkennt.",
|
||||
"openGlobalSettings": "In globalen Einstellungen verwalten",
|
||||
"globalSettingsSources": "Für diese Quellen gibt es eine globale Einstellung, die hier überschrieben werden kann:"
|
||||
"globalSettingsSources": "Für diese Quellen gibt es eine globale Einstellung, die hier überschrieben werden kann:",
|
||||
"searchHiddenPlaceholder_one": "{{count}} Worktree durchsuchen…",
|
||||
"searchHiddenPlaceholder_other": "{{count}} Worktrees durchsuchen…"
|
||||
},
|
||||
"add": {
|
||||
"repo": {
|
||||
@@ -6336,13 +6461,13 @@
|
||||
"7a8b9c0d1e": "Einstellungen öffnen",
|
||||
"8b9c0d1e2f": "Host entfernen",
|
||||
"workspacesFailed": "Anzahl der Arbeitsbereiche dieses Hosts, die nicht entfernt werden konnten: {{count}}. Der Host wurde für einen erneuten Versuch beibehalten.",
|
||||
"oneWorkspace": "1 Arbeitsbereich",
|
||||
"manyWorkspaces": "{{count}} Arbeitsbereiche",
|
||||
"hostHasWorkspacesDefault": "Entfernt {{value0}} und die zugehörigen Zugangsdaten von diesem Computer. Orca behält {{value1}} bei — entfernte Dateien bleiben unberührt.",
|
||||
"alsoForgetLocal": "Auch {{value0}} aus Orca entfernen",
|
||||
"advanced": "Erweitert",
|
||||
"alsoForgetLocalHint": "Entfernt sie nur aus Orca. Entfernte Dateien, Worktrees und Branches bleiben unberührt.",
|
||||
"wslHostEndsTerminalsUnlessShared": "Entfernt {{value0}} aus Orca. Sofern kein anderes auf diesem Computer geöffnetes Orca es verwendet, werden außerdem die offenen Terminals beendet und der Orca-Server in dieser Distribution gestoppt. Dateien in der Distribution bleiben unverändert."
|
||||
"wslHostEndsTerminalsUnlessShared": "Entfernt {{value0}} aus Orca. Sofern kein anderes auf diesem Computer geöffnetes Orca es verwendet, werden außerdem die offenen Terminals beendet und der Orca-Server in dieser Distribution gestoppt. Dateien in der Distribution bleiben unverändert.",
|
||||
"hostKeepsWorkspaces_one": "Entfernt {{host}} und dessen Zugangsdaten von diesem Computer. Der zugehörige {{count}} Arbeitsbereich bleibt in Orca — entfernte Dateien bleiben unberührt.",
|
||||
"hostKeepsWorkspaces_other": "Entfernt {{host}} und dessen Zugangsdaten von diesem Computer. Die zugehörigen {{count}} Arbeitsbereiche bleiben in Orca — entfernte Dateien bleiben unberührt.",
|
||||
"alsoRemoveWorkspaces_one": "Diesen Arbeitsbereich auch aus Orca entfernen",
|
||||
"alsoRemoveWorkspaces_other": "Diese {{count}} Arbeitsbereiche auch aus Orca entfernen"
|
||||
},
|
||||
"HostRenameDialog": {
|
||||
"1a2b3c4d5e": "Host umbenennen",
|
||||
@@ -6415,7 +6540,7 @@
|
||||
"current": "Aktuell",
|
||||
"searchPlaceholder": "Worktrees suchen…",
|
||||
"empty": "Keine passenden auswählbaren Worktrees.",
|
||||
"setParentFor": "Übergeordneten Worktree festlegen für"
|
||||
"setParentForName": "Übergeordneten Arbeitsbereich für <name>{{name}}</name> festlegen"
|
||||
},
|
||||
"WorktreeCardStatusSlot": {
|
||||
"branchIdentity": "Branch",
|
||||
@@ -6425,12 +6550,12 @@
|
||||
},
|
||||
"NewExternalWorktreesInboxLine": {
|
||||
"9f2d4c8b17": "Externe Worktrees für {{value0}} dauerhaft ausblenden",
|
||||
"2a6f31d8c7": "Ausgeblendeter Worktree",
|
||||
"5b90e4a2f6": "Ausgeblendete Worktrees",
|
||||
"7f18c5b0d3": "{{value0}} ausgeblendeten Worktree in {{value1}} prüfen",
|
||||
"4e2b7a9c05": "{{value0}} ausgeblendete Worktrees in {{value1}} prüfen",
|
||||
"c3e8a1f4b2": "Nicht mehr anzeigen",
|
||||
"6c07f3a91e": "{{value0}} auf {{value1}}"
|
||||
"6c07f3a91e": "{{value0}} auf {{value1}}",
|
||||
"hiddenWorktreesNoun_one": "ausgeblendeter Worktree",
|
||||
"hiddenWorktreesNoun_other": "ausgeblendete Worktrees",
|
||||
"reviewHiddenWorktrees_one": "{{count}} ausgeblendeten Worktree in {{scope}} prüfen",
|
||||
"reviewHiddenWorktrees_other": "{{count}} ausgeblendete Worktrees in {{scope}} prüfen"
|
||||
},
|
||||
"NoticeHostGlyph": {
|
||||
"hostDisconnected": "Verbindung zu {{hostName}} getrennt",
|
||||
@@ -6521,8 +6646,9 @@
|
||||
"sshConfigPickerRetry": "Erneut versuchen",
|
||||
"sshConfigPickerResolving": "Wird gelesen…",
|
||||
"pairingHelpShareComputer": "Auf dem anderen Computer unter Einstellungen → Entfernte Orca-Server → Diesen Computer freigeben erstellen.",
|
||||
"sshImportSyncedPlural": "{{count}} Hosts zu Orca hinzugefügt.",
|
||||
"sshImportSyncedSingular": "{{count}} Host zu Orca hinzugefügt."
|
||||
"sshImportSynced_one": "{{count}} Host zu Orca hinzugefügt.",
|
||||
"sshImportSynced_other": "{{count}} Hosts zu Orca hinzugefügt.",
|
||||
"sshConfigPickerInvalidResponse": "Ungültige Host-Antwort aus der SSH-Konfiguration"
|
||||
},
|
||||
"ForgetSshWorkspaceDialog": {
|
||||
"ghostBody": "{{host}} ist kein gespeicherter SSH-Host mehr. Daher ist dieser Arbeitsbereich nicht mehr mit einem aktiven Host verbunden. Er kann nur aus Orca entfernt werden — Dateien und Branches auf dem Remote-Host bleiben unverändert.",
|
||||
@@ -6545,11 +6671,12 @@
|
||||
},
|
||||
"WorkspaceKanbanSearchField": {
|
||||
"bdb753c78d": "Keine passenden Arbeitsbereiche",
|
||||
"4d96c209d6": "{{value0}} von {{value1}} Arbeitsbereichen entsprechen der Suche",
|
||||
"c0cd6bdf6c": "Arbeitsbereiche durchsuchen",
|
||||
"3b7ea51793": "Suche leeren",
|
||||
"7f1c2e94a5": "Suchtext ist zu lang — das Board ist ungefiltert",
|
||||
"9a4d0f6b21": "Zu lang"
|
||||
"9a4d0f6b21": "Zu lang",
|
||||
"workspacesMatch_one": "Passende Arbeitsbereiche: {{matchCount}} von {{count}}",
|
||||
"workspacesMatch_other": "Passende Arbeitsbereiche: {{matchCount}} von {{count}}"
|
||||
},
|
||||
"WorktreeCardSshHostControl": {
|
||||
"connectFailed": "SSH-Verbindung fehlgeschlagen",
|
||||
@@ -6647,11 +6774,12 @@
|
||||
"developerToolsTitle": "Apples Befehlszeilenwerkzeuge installieren",
|
||||
"developerToolsBody": "Git benötigt die Apple-Entwicklerwerkzeuge. Diesen Befehl im Terminal ausführen und dann zu Orca zurückwechseln. Orca prüft automatisch erneut.",
|
||||
"affectedOne": "Worktree-Suche für {{value0}} pausiert",
|
||||
"affectedMany": "Worktree-Suche für {{value0}} Projekte pausiert",
|
||||
"copyCommand": "Befehl kopieren",
|
||||
"copied": "Befehl kopiert",
|
||||
"retry": "Jetzt erneut versuchen",
|
||||
"restored": "Git funktioniert wieder. Worktrees aktualisiert."
|
||||
"restored": "Git funktioniert wieder. Worktrees aktualisiert.",
|
||||
"affectedProjects_one": "Worktree-Scan für {{count}} Projekt pausiert",
|
||||
"affectedProjects_other": "Worktree-Scan für {{count}} Projekte pausiert"
|
||||
},
|
||||
"manualSortSwitch": {
|
||||
"title": "Sortierung auf „Manuell“ geändert",
|
||||
@@ -6696,7 +6824,8 @@
|
||||
"wslHostRemoval": {
|
||||
"keptForOthers": "Aus diesem Orca entfernt. Der Host läuft für {{value0}} weiter.",
|
||||
"partial": "Der Host wurde entfernt, aber in der Distribution läuft noch etwas: {{value0}}",
|
||||
"pending": "Orca hat den Host noch nicht entfernt: {{value0}} Zum Wiederholen erneut entfernen oder zum Beibehalten verbinden."
|
||||
"pending": "Orca hat den Host noch nicht entfernt: {{value0}} Zum Wiederholen erneut entfernen oder zum Beibehalten verbinden.",
|
||||
"unavailable": "WSL-Hosts sind auf diesem Computer nicht verfügbar."
|
||||
},
|
||||
"addRepoWslHostFolderPicker": {
|
||||
"otherDistro": "Dieser Ordner befindet sich in {{value0}}, nicht in {{value1}}.",
|
||||
@@ -6737,6 +6866,42 @@
|
||||
"openingProject": "Projekt wird geöffnet…",
|
||||
"openingFolder": "Ordner wird geöffnet…",
|
||||
"chooseFolder": "Ordner auswählen…"
|
||||
},
|
||||
"DeleteNestedWorktreesDialog": {
|
||||
"unsupportedHost": "Dieser Host unterstützt das Löschen verschachtelter Worktrees nicht."
|
||||
},
|
||||
"WorktreeCardHelpers": {
|
||||
"checksPassing": "Erfolgreich",
|
||||
"checksFailing": "Fehlgeschlagen",
|
||||
"checksPending": "Ausstehend",
|
||||
"conflictMerging": "Merge läuft",
|
||||
"conflictRebasing": "Rebase läuft",
|
||||
"conflictCherryPicking": "Cherry-Pick läuft"
|
||||
},
|
||||
"folderWorkspaceComposer": {
|
||||
"defaultWorkspaceName": "Arbeitsbereich {{name}}"
|
||||
},
|
||||
"workspaceKanbanStatus": {
|
||||
"defaultLabel": "Status {{number}}"
|
||||
},
|
||||
"worktreeCardModel": {
|
||||
"sparsePreviewMore_one": "{{preview}}, +{{count}} mehr",
|
||||
"sparsePreviewMore_other": "{{preview}}, +{{count}} mehr"
|
||||
},
|
||||
"worktreeCardPrDisplay": {
|
||||
"mrDetailsUnavailable": "MR-Details nicht verfügbar",
|
||||
"prDetailsUnavailable": "PR-Details nicht verfügbar",
|
||||
"loadingMr": "MR wird geladen…",
|
||||
"loadingPr": "PR wird geladen…"
|
||||
},
|
||||
"HostSectionHeader": {
|
||||
"workspaceCount_one": "{{count}} Arbeitsbereich",
|
||||
"workspaceCount_other": "{{count}} Arbeitsbereiche"
|
||||
},
|
||||
"titleDerivedAgentRows": {
|
||||
"needsInput": "Eingabe erforderlich",
|
||||
"running": "Läuft",
|
||||
"idle": "Inaktiv"
|
||||
}
|
||||
},
|
||||
"shared": {
|
||||
@@ -14324,17 +14489,8 @@
|
||||
"saveLocation": "Speicherort festlegen"
|
||||
},
|
||||
"SmartWorkspaceNameField": {
|
||||
"2a0d535f69": "Neuen Branch erstellen",
|
||||
"a44229ce4d": "für den Arbeitsbereich verwenden",
|
||||
"766083a596": "“",
|
||||
"34ca97bce3": "„",
|
||||
"b1a7d679ba": "Verwenden",
|
||||
"e57c53727c": "Projekt hinzufügen…",
|
||||
"a76fcb4fa0": "Wechseln zu",
|
||||
"eadf877af5": "Beibehalten",
|
||||
"6859e2896c": "Abbrechen",
|
||||
"9ef1a7c4b0": ", das vom ausgewählten Projekt abweicht.",
|
||||
"ad188067ae": "Die GitHub-URL verweist auf",
|
||||
"4bd98f1091": "Projekt wechseln?",
|
||||
"0c9e668e3a": "Leeren",
|
||||
"7199ff19c7": "Ausgewählte Quelle zurücksetzen",
|
||||
@@ -14353,7 +14509,6 @@
|
||||
"fda67f0b61": "aktuelles Projekt",
|
||||
"3e8bb1176a": "Zum Suchen von Issues Linear in den Einstellungen verbinden.",
|
||||
"switchTaskSourceTitle": "Aufgabenquelle wechseln?",
|
||||
"differentTaskSource": ", die von der ausgewählten Aufgabenquelle abweicht.",
|
||||
"currentTaskSource": "aktuelle Aufgabenquelle",
|
||||
"placeholderNameOrLinearUrl": "Namen, Linear-URL oder Jira-URL eingeben",
|
||||
"placeholderWorkspaceName": "Namen für den Arbeitsbereich eingeben",
|
||||
@@ -14382,7 +14537,13 @@
|
||||
"emoji": "Emoji",
|
||||
"loadingLinearIssue": "Linear-Issue wird geladen…",
|
||||
"linearLoginUnreadableTitle": "Linear erneut verbinden",
|
||||
"linearLoginUnreadableBody": "Die gespeicherten Linear-Anmeldedaten konnten nicht gelesen werden. Linear in den Einstellungen erneut verbinden."
|
||||
"linearLoginUnreadableBody": "Die gespeicherten Linear-Anmeldedaten konnten nicht gelesen werden. Linear in den Einstellungen erneut verbinden.",
|
||||
"keepRepo": "{{name}} beibehalten",
|
||||
"switchToRepo": "Zu {{name}} wechseln",
|
||||
"crossRepoDifferentTaskSource": "Die GitHub-URL verweist auf {{repo}} und damit auf eine andere als die ausgewählte Aufgabenquelle.",
|
||||
"crossRepoDifferentProject": "Die GitHub-URL verweist auf {{repo}} und damit auf ein anderes als das ausgewählte Projekt.",
|
||||
"useAsWorkspaceName": "<name>„{{name}}“</name> als Namen für den Arbeitsbereich verwenden",
|
||||
"createNewBranchNamed": "Neuen Branch <name>{{name}}</name> erstellen"
|
||||
},
|
||||
"ProjectCombobox": {
|
||||
"empty": "Keine Projekte entsprechen der Suche.",
|
||||
@@ -14396,6 +14557,11 @@
|
||||
"listLabel": "Ausführungsziele",
|
||||
"label": "Ausführen auf",
|
||||
"browse": "Ausführungsziele durchsuchen"
|
||||
},
|
||||
"projectCombobox": {
|
||||
"recentHeading": "Zuletzt verwendet",
|
||||
"projectsHeading": "Projekte",
|
||||
"foldersHeading": "Ordner"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -15995,7 +16161,10 @@
|
||||
},
|
||||
"dashboard": {
|
||||
"DashboardAgentChildDisclosure": {
|
||||
"1b57ce9fa4": "{{value0}}: {{value1}} {{value2}} (untergeordnet)"
|
||||
"hideChildAgents_one": "{{count}} untergeordneten Agenten ausblenden",
|
||||
"hideChildAgents_other": "{{count}} untergeordnete Agenten ausblenden",
|
||||
"showChildAgents_one": "{{count}} untergeordneten Agenten anzeigen",
|
||||
"showChildAgents_other": "{{count}} untergeordnete Agenten anzeigen"
|
||||
},
|
||||
"DashboardAgentRow": {
|
||||
"912e136cd9": "Senden",
|
||||
@@ -16003,7 +16172,13 @@
|
||||
"a41fb5376e": "Details einklappen",
|
||||
"5ae84475cc": "Ausblenden",
|
||||
"b06e13fcf7": "Agenten ausblenden",
|
||||
"0272969e28": "An diesen Agenten senden"
|
||||
"0272969e28": "An diesen Agenten senden",
|
||||
"justNow": "gerade eben",
|
||||
"timeAgo": "vor {{duration}}",
|
||||
"dispatchedAgents_one": "{{agentType}} - {{count}} Agenten beauftragt",
|
||||
"dispatchedAgents_other": "{{agentType}} - {{count}} Agenten beauftragt",
|
||||
"startedAgo": "gestartet {{time}}",
|
||||
"doneAgo": "abgeschlossen {{time}}"
|
||||
},
|
||||
"DashboardAgentRowMessage": {
|
||||
"0a01046763": "unterbrochen",
|
||||
@@ -17119,18 +17294,19 @@
|
||||
"activityOptionsActive": "Aktivitätsoptionen ({{value0}})"
|
||||
},
|
||||
"clearCompleted": {
|
||||
"clearedOne": "1 abgeschlossenen Agenten entfernt",
|
||||
"clearedMany": "{{count}} abgeschlossene Agenten entfernt",
|
||||
"undo": "Rückgängig machen"
|
||||
"undo": "Rückgängig machen",
|
||||
"cleared_one": "{{count}} abgeschlossenen Agenten entfernt",
|
||||
"cleared_other": "{{count}} abgeschlossene Agenten entfernt"
|
||||
},
|
||||
"standaloneWorktree": {
|
||||
"floatingTerminal": "Schwebendes Terminal",
|
||||
"standaloneTerminal": "Eigenständiges Terminal"
|
||||
},
|
||||
"ActivityTitlebarControls": {
|
||||
"f915168c8e": "ungelesen",
|
||||
"d6a8de3934": "Agenten",
|
||||
"dc708f3eff": "Agenten schließen"
|
||||
"dc708f3eff": "Agenten schließen",
|
||||
"unreadCount_one": "{{count}} ungelesen",
|
||||
"unreadCount_other": "{{count}} ungelesen"
|
||||
},
|
||||
"ActivityScopeFilterControls": {
|
||||
"resetScope": "Alle Hosts und Projekte anzeigen",
|
||||
@@ -17925,6 +18101,16 @@
|
||||
"unreachable": "Jira konnte nicht erreicht werden. Verbindung prüfen und erneut versuchen.",
|
||||
"loadFailed": "Jira-Issues konnten nicht geladen werden. In Kürze erneut versuchen.",
|
||||
"errorWithCode": "Fehler {{code}}: {{summary}}"
|
||||
},
|
||||
"cmdJ": {
|
||||
"quickActionUnavailable": {
|
||||
"workspaceLoading": "„{{action}}“ kann nicht ausgeführt werden — der Arbeitsbereich wird noch geladen.",
|
||||
"noActiveWorkspace": "„{{action}}“ kann nicht ausgeführt werden — kein Arbeitsbereich ist aktiv.",
|
||||
"workspaceDisconnected": "„{{action}}“ kann nicht ausgeführt werden — der Arbeitsbereich ist nicht verbunden.",
|
||||
"noTabGroup": "„{{action}}“ kann nicht ausgeführt werden — keine Tab-Gruppe verfügbar.",
|
||||
"noMovableChat": "„{{action}}“ kann nicht ausgeführt werden — kein verschiebbarer Chat ist aktiv.",
|
||||
"clientUnsupported": "„{{action}}“ kann nicht ausgeführt werden — dieser Client und diese Laufzeitumgebung unterstützen die Aktion nicht."
|
||||
}
|
||||
}
|
||||
},
|
||||
"i18n": {
|
||||
@@ -19137,8 +19323,6 @@
|
||||
"none": "Nicht vorhanden"
|
||||
},
|
||||
"idleSignalField": "Inaktivitätssignal",
|
||||
"selectionVanishedOne": "1 ausgewählter Arbeitsbereich existiert nicht mehr.",
|
||||
"selectionVanished": "{{value0}} ausgewählte Arbeitsbereiche existieren nicht mehr.",
|
||||
"updatedAgo": "{{value0}} aktualisiert",
|
||||
"refreshing": "Wird aktualisiert…",
|
||||
"refreshingProgress": "{{value0}}/{{value1}} werden aktualisiert",
|
||||
@@ -19153,12 +19337,6 @@
|
||||
"gitStatusCheckFailed": "Prüfung des Git-Status fehlgeschlagen",
|
||||
"gitStatusUnverified": "Git-Status konnte nicht verifiziert werden",
|
||||
"deleteAnyway": "Trotzdem löschen",
|
||||
"forceDeleteProjectionOne": "{{count}} Arbeitsbereich weist derzeit Risiken auf und muss möglicherweise zwangsweise gelöscht werden",
|
||||
"forceDeleteProjectionMany": "{{count}} Arbeitsbereiche weisen derzeit Risiken auf und müssen möglicherweise zwangsweise gelöscht werden",
|
||||
"selectionWithheldOne": "1 ausgewählter Arbeitsbereich wird durch die aktuellen Filter ausgeblendet und wurde abgewählt.",
|
||||
"selectionWithheld": "{{value0}} ausgewählte Arbeitsbereiche werden durch die aktuellen Filter ausgeblendet und wurden abgewählt.",
|
||||
"selectAllCountOne": "1 auf Sicherheit geprüften Arbeitsbereich auswählen",
|
||||
"selectAllCount": "Alle {{value0}} auf Sicherheit geprüften Arbeitsbereiche auswählen",
|
||||
"appliedFilters": "Angewendete Filter",
|
||||
"removeFilter": "Filter {{value0}} entfernen",
|
||||
"chip": {
|
||||
@@ -19202,18 +19380,28 @@
|
||||
"locked": "Gesperrt",
|
||||
"retainedAgents": "Abgeschlossene Agenten"
|
||||
}
|
||||
}
|
||||
},
|
||||
"forceDeleteRisk_one": "{{count}} Arbeitsbereich weist derzeit Risiken auf und muss möglicherweise zwangsweise gelöscht werden",
|
||||
"forceDeleteRisk_other": "{{count}} Arbeitsbereiche weisen derzeit Risiken auf und müssen möglicherweise zwangsweise gelöscht werden",
|
||||
"selectionVanishedCount_one": "{{count}} ausgewählter Arbeitsbereich existiert nicht mehr.",
|
||||
"selectionVanishedCount_other": "{{count}} ausgewählte Arbeitsbereiche existieren nicht mehr.",
|
||||
"selectionWithheldCount_one": "{{count}} ausgewählter Arbeitsbereich wird durch die aktuellen Filter ausgeblendet und wurde abgewählt.",
|
||||
"selectionWithheldCount_other": "{{count}} ausgewählte Arbeitsbereiche werden durch die aktuellen Filter ausgeblendet und wurden abgewählt.",
|
||||
"selectAllSafetyChecked_one": "{{count}} sicherheitsgeprüften Arbeitsbereich auswählen",
|
||||
"selectAllSafetyChecked_other": "Alle {{count}} sicherheitsgeprüften Arbeitsbereiche auswählen"
|
||||
},
|
||||
"scan": {
|
||||
"progress": "Arbeitsbereiche werden geprüft ({{value0}}/{{value1}})",
|
||||
"singleError": "{{value0}} konnte nicht geprüft werden: {{value1}}. Einige Arbeitsbereiche fehlen möglicherweise. Zum erneuten Versuchen aktualisieren.",
|
||||
"moreErrors": ", +{{value0}} weitere",
|
||||
"multipleErrors": "{{value0}} Repositorys konnten nicht geprüft werden ({{value1}}{{value2}}). Einige Arbeitsbereiche fehlen möglicherweise. Zum erneuten Versuchen aktualisieren.",
|
||||
"noWorkspaces": "Keine Arbeitsbereiche gefunden.",
|
||||
"fallbackRepository": "ein Repository",
|
||||
"gitListFailed": "Git konnte die Worktrees nicht auflisten",
|
||||
"readyOne": "1 Arbeitsbereich gefunden.",
|
||||
"readyMany": "{{value0}} Arbeitsbereiche gefunden."
|
||||
"multipleErrorsWithMore_one": "{{count}} Repository konnte nicht geprüft werden ({{names}}, +{{moreCount}} weitere). Einige Arbeitsbereiche fehlen möglicherweise. Zum erneuten Versuchen aktualisieren.",
|
||||
"multipleErrorsWithMore_other": "{{count}} Repositorys konnten nicht geprüft werden ({{names}}, +{{moreCount}} weitere). Einige Arbeitsbereiche fehlen möglicherweise. Zum erneuten Versuchen aktualisieren.",
|
||||
"multipleErrorsCount_one": "{{count}} Repository konnte nicht geprüft werden ({{names}}). Einige Arbeitsbereiche fehlen möglicherweise. Zum erneuten Versuchen aktualisieren.",
|
||||
"multipleErrorsCount_other": "{{count}} Repositorys konnten nicht geprüft werden ({{names}}). Einige Arbeitsbereiche fehlen möglicherweise. Zum erneuten Versuchen aktualisieren.",
|
||||
"readyCount_one": "{{count}} Arbeitsbereich gefunden.",
|
||||
"readyCount_other": "{{count}} Arbeitsbereiche gefunden."
|
||||
},
|
||||
"relativeTime": {
|
||||
"never": "Nie",
|
||||
@@ -20340,7 +20528,6 @@
|
||||
"repositoryLoading": "Die Repository-Identität wird noch geladen. Erneut versuchen, sobald sie verfügbar ist.",
|
||||
"duplicate": "Dieser Link ist bereits verknüpft.",
|
||||
"title": "Verknüpfte Vorgänge",
|
||||
"count": "{{count}} verknüpft",
|
||||
"empty": "Alle Reviews und Aufgaben für diesen Arbeitsbereich bündeln.",
|
||||
"reviews": "Reviews",
|
||||
"tasks": "Issues und Aufgaben",
|
||||
@@ -20348,7 +20535,6 @@
|
||||
"open": "Link öffnen",
|
||||
"unlinkItem": "Verknüpfung mit {{label}} aufheben",
|
||||
"unlink": "Verknüpfung mit Arbeitsbereich aufheben",
|
||||
"show": "{{count}} verknüpfte Reviews und Aufgaben anzeigen",
|
||||
"details": "Arbeitsbereichsdetails",
|
||||
"description": "Reviews und Aufgaben verknüpfen und Notizen für diesen Arbeitsbereich festhalten.",
|
||||
"commentHelp": "Markdown wird unterstützt. Enter oder {{shortcut}} zum Speichern · Shift+Enter für eine neue Zeile.",
|
||||
@@ -20401,7 +20587,11 @@
|
||||
"checksPassing": "Erfolgreich",
|
||||
"checksUnknown": "Unbekannt",
|
||||
"checksNeutral": "Neutral",
|
||||
"allReviewChecks": "Reviews: {{count}} · Checks: {{status}}"
|
||||
"allReviewChecks": "Reviews: {{count}} · Checks: {{status}}",
|
||||
"showLinked_one": "{{count}} verknüpftes Review oder verknüpfte Aufgabe anzeigen",
|
||||
"showLinked_other": "{{count}} verknüpfte Reviews und Aufgaben anzeigen",
|
||||
"linkedCount_one": "{{count}} verknüpft",
|
||||
"linkedCount_other": "{{count}} verknüpft"
|
||||
},
|
||||
"attachments": {
|
||||
"updateRuntime": "Die entfernte Laufzeitumgebung aktualisieren, um Verknüpfungen des Arbeitsbereichs zu ändern",
|
||||
@@ -20583,8 +20773,9 @@
|
||||
},
|
||||
"compact": {
|
||||
"linkedAndUnavailable": "{{value0}} in verknüpften Worktrees · {{value1}} nicht verfügbar",
|
||||
"linkedAndScanned": "{{value0}} in verknüpften Worktrees · {{value1}} Arbeitsbereiche",
|
||||
"linked": "Verknüpft"
|
||||
"linked": "Verknüpft",
|
||||
"linkedAndScannedCount_one": "{{size}} in verknüpften Worktrees · {{count}} Arbeitsbereich",
|
||||
"linkedAndScannedCount_other": "{{size}} in verknüpften Worktrees · {{count}} Arbeitsbereiche"
|
||||
},
|
||||
"savedScan": {
|
||||
"folderDetailsUnavailable": "Für frühere Scans sind keine Ordnerdetails gespeichert. Aktualisieren, um diesen Arbeitsbereich zu untersuchen."
|
||||
|
||||
@@ -2230,7 +2230,6 @@
|
||||
"ba64270bdb": "Configure agents",
|
||||
"ab63f25397": "Open agent settings",
|
||||
"0c5d6a479c": "[Optional]",
|
||||
"b5a0796911": "Connect",
|
||||
"dccd26d4e4": "Choose project",
|
||||
"d6b0a96f32": "Add project",
|
||||
"969a8bff66": "Project",
|
||||
@@ -2291,7 +2290,8 @@
|
||||
"runSetupNow": "Run setup now",
|
||||
"runCommandsNow": "Run commands now",
|
||||
"skipForNow": "Skip for now",
|
||||
"skipCommands": "Skip commands"
|
||||
"skipCommands": "Skip commands",
|
||||
"connectProject": "Connect {{name}}"
|
||||
},
|
||||
"NewWorkspaceComposerModal": {
|
||||
"createWorktree": "Create worktree",
|
||||
@@ -3787,21 +3787,23 @@
|
||||
},
|
||||
"drop": {
|
||||
"handler": {
|
||||
"1e072f611e": "Failed to upload {{value0}} {{value1}}.",
|
||||
"0c77693641": "Worktree not ready — try again in a moment.",
|
||||
"ce8248b835": "Worktree path not available.",
|
||||
"internalTooManyPaths": "Drop contains too many paths for a safe terminal paste.",
|
||||
"internalPathsTooLarge": "Drop path list is too large for a safe terminal paste.",
|
||||
"internalHostMismatch": "Drop files from the same host as this terminal.",
|
||||
"b4cf68e889": "Skipped {{value0}} {{value1}}.",
|
||||
"writeTimeout": "File drop cancelled: terminal did not accept the path before the safety timeout.",
|
||||
"writeRejected": "File drop cancelled: terminal could not accept the path.",
|
||||
"skippedSymlinkSingular": "Skipped {{count}} symlink.",
|
||||
"skippedSymlinkPlural": "Skipped {{count}} symlinks.",
|
||||
"uploadingFileSingular": "Uploading {{count}} file to runtime…",
|
||||
"uploadingFilePlural": "Uploading {{count}} files to runtime…",
|
||||
"uploadingFileToRemoteSingular": "Uploading {{count}} file to remote…",
|
||||
"uploadingFileToRemotePlural": "Uploading {{count}} files to remote…"
|
||||
"skippedSymlinks_one": "Skipped {{count}} symlink.",
|
||||
"skippedSymlinks_other": "Skipped {{count}} symlinks.",
|
||||
"skippedItems_one": "Skipped {{count}} item.",
|
||||
"skippedItems_other": "Skipped {{count}} items.",
|
||||
"failedUploads_one": "Failed to upload {{count}} file.",
|
||||
"failedUploads_other": "Failed to upload {{count}} files.",
|
||||
"uploadingFiles_one": "Uploading {{count}} file to runtime…",
|
||||
"uploadingFiles_other": "Uploading {{count}} files to runtime…",
|
||||
"uploadingFilesToRemote_one": "Uploading {{count}} file to remote…",
|
||||
"uploadingFilesToRemote_other": "Uploading {{count}} files to remote…"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -3919,10 +3921,15 @@
|
||||
"sessionQueued": "Session queued",
|
||||
"openSupportedWorkspace": "Open a workspace before resuming a session.",
|
||||
"sessionHostMismatchUnsupported": "This session belongs to a different host. Drop it onto a workspace on the same host.",
|
||||
"oldPayload": "This session was dragged from an older Orca window. Resume it from Session History instead."
|
||||
"oldPayload": "This session was dragged from an older Orca window. Resume it from Session History instead.",
|
||||
"legacyDragCannotRetarget": "This session was dragged from an older Orca window, so Orca cannot retarget it to the selected Codex account. Resume it from the Session History panel instead.",
|
||||
"legacyDragPrepareFailed": "Orca could not prepare this legacy Codex session. Retry resume."
|
||||
},
|
||||
"TabGroupDropOverlay": {
|
||||
"paneColumnLabel": "New split"
|
||||
},
|
||||
"useTabGroupCreationCommands": {
|
||||
"duplicateBrowserTabFailed": "The paired runtime could not duplicate the managed browser tab."
|
||||
}
|
||||
},
|
||||
"bar": {
|
||||
@@ -4117,6 +4124,30 @@
|
||||
"TabBarQuickCommandHostLoadStatus": {
|
||||
"82e294f3ca": "Host unavailable",
|
||||
"7c129b08ff": "Loading host…"
|
||||
},
|
||||
"nativeChatCliFork": {
|
||||
"cannotOpenInCli": "This session cannot be opened in the CLI."
|
||||
},
|
||||
"tabCreateEntry": {
|
||||
"fileNotFound": "File not found: {{path}}",
|
||||
"cannotOpenDirectory": "Cannot open a directory: {{path}}",
|
||||
"parentNotDirectory": "Cannot create file because {{path}} is not a directory.",
|
||||
"fileNoLongerExists": "File no longer exists: {{path}}",
|
||||
"noActiveWorktree": "No active worktree."
|
||||
},
|
||||
"tabCreateEntryPath": {
|
||||
"filePathsCannotContainControlCharacters": "File paths cannot contain control characters.",
|
||||
"enterAUrlOrFilePath": "Enter a URL or file path.",
|
||||
"homeRelativePathsAreNotSupported": "Home-relative paths are not supported here.",
|
||||
"enterAFilePathNotA": "Enter a file path, not a directory path.",
|
||||
"enterAnAbsoluteFilePath": "Enter an absolute file path.",
|
||||
"enterAnAbsolutePathForThis": "Enter an absolute path for this computer.",
|
||||
"enterARelativeFilePath": "Enter a relative file path.",
|
||||
"windowsDrivePathsAreNotSupported": "Windows drive paths are not supported here.",
|
||||
"uncPathsAreNotSupportedHere": "UNC paths are not supported here.",
|
||||
"filePathsCannotContainEmptySegments": "File paths cannot contain empty segments.",
|
||||
"filePathsCannotContainDotSegments": "File paths cannot contain . or .. segments.",
|
||||
"filePathsCannotContainTildeSegments": "File paths cannot contain ~ segments."
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -4144,15 +4175,16 @@
|
||||
"4ebf90c12e": "No external ports detected",
|
||||
"7dac3ecc9d": "External Ports",
|
||||
"95495019ed": "Port scan unavailable on {{value0}}: {{value1}}",
|
||||
"a8e4bdb412": " · {{value0}} external",
|
||||
"c22ea609fd": "Ports",
|
||||
"ca41be2802": "Ports — {{value0}} workspace {{value1}}{{value2}}",
|
||||
"b8bc3e420a": "Ports, {{value0}} workspace {{value1}}",
|
||||
"3a87d54dfb": "No workspace ports detected",
|
||||
"c174bbbfed": "Scanning for workspace ports...",
|
||||
"8caaa86e9a": "ports",
|
||||
"45834a9ace": "port",
|
||||
"2b84c4d11f": "{{value0}} workspace · {{value1}} external"
|
||||
"2b84c4d11f": "{{value0}} workspace · {{value1}} external",
|
||||
"portsAria_one": "Ports, {{count}} workspace port",
|
||||
"portsAria_other": "Ports, {{count}} workspace ports",
|
||||
"portsTooltipWithExternal_one": "Ports — {{count}} workspace port · {{externalCount}} external",
|
||||
"portsTooltipWithExternal_other": "Ports — {{count}} workspace ports · {{externalCount}} external",
|
||||
"portsTooltip_one": "Ports — {{count}} workspace port",
|
||||
"portsTooltip_other": "Ports — {{count}} workspace ports"
|
||||
},
|
||||
"ResourceUsageStatusSegment": {
|
||||
"946d9f94d0": "Cancel",
|
||||
@@ -4161,7 +4193,6 @@
|
||||
"27a74f91f0": "Nothing running right now",
|
||||
"298f4be7f2": "CPU",
|
||||
"2aa2de6cb9": "Name",
|
||||
"30ff2c3c31": "{{value0}} orphan",
|
||||
"1fedf94eae": "Combined CPU load. Values above 100% mean more than one core is working at once.",
|
||||
"e7cf14ec78": "Terminal sessions unavailable. The list may be stale.",
|
||||
"93b0de3c21": "Restart",
|
||||
@@ -4191,10 +4222,11 @@
|
||||
"d406915b78": "Renderer",
|
||||
"81cd37af99": "Main",
|
||||
"fa6d36758d": "Kill session {{value0}}",
|
||||
"b8f4a2c1d0e3": "{{value0}} orphans",
|
||||
"c7e3b1a0d9f2": "End {{value0}} orphan terminal",
|
||||
"d8f4c2b1e0a3": "End {{value0}} orphan terminals",
|
||||
"e9a5d3c2b1f0": "Kill {{value0}}?"
|
||||
"e9a5d3c2b1f0": "Kill {{value0}}?",
|
||||
"endOrphanTerminals_one": "End {{count}} orphan terminal",
|
||||
"endOrphanTerminals_other": "End {{count}} orphan terminals",
|
||||
"orphanCount_one": "{{count}} orphan",
|
||||
"orphanCount_other": "{{count}} orphans"
|
||||
},
|
||||
"SshStatusSegment": {
|
||||
"3ad70e0365": "Manage Remote Hosts…",
|
||||
@@ -4254,10 +4286,6 @@
|
||||
"3325d996cb": "Refresh rate limits",
|
||||
"cd9d7b40ff": "Restart {{value0}} Sessions",
|
||||
"6cd6650b4c": "Restart Session",
|
||||
"1446d0d8a0": "{{value0}} Codex sessions are still on the old account.",
|
||||
"605901a495": "1 Codex session is still on the old account",
|
||||
"5e5f9f5160": "1 rate-limit reset available",
|
||||
"5ecae9197c": "{{value0}} rate-limit resets available",
|
||||
"25d8bbde69": "Using reset…",
|
||||
"e159fc1fd7": "Reset now",
|
||||
"972a1ff497": "Reset Codex limits?",
|
||||
@@ -4276,7 +4304,11 @@
|
||||
"codexSignInError": "Codex sign-in failed. Please try again.",
|
||||
"cursorUsageMenu": "Cursor Usage",
|
||||
"hiddenUsageProviders": "Also: {{value0}}",
|
||||
"zcodeUsageMenu": "ZCode Usage"
|
||||
"zcodeUsageMenu": "ZCode Usage",
|
||||
"rateLimitResetsAvailable_one": "{{count}} rate-limit reset available",
|
||||
"rateLimitResetsAvailable_other": "{{count}} rate-limit resets available",
|
||||
"staleCodexSessions_one": "{{count}} Codex session is still on the old account.",
|
||||
"staleCodexSessions_other": "{{count}} Codex sessions are still on the old account."
|
||||
},
|
||||
"StatusBarUsageEmptyCta": {
|
||||
"828c764a79": "Connect an account",
|
||||
@@ -4293,13 +4325,14 @@
|
||||
"SkillUpdateStatusSegment": {
|
||||
"runningLabel": "Updating skills",
|
||||
"runningOne": "Updating {{value0}}…",
|
||||
"runningMany": "Updating {{value0}} skills…",
|
||||
"runningAria": "Skills updating. Click to open details.",
|
||||
"successLabel": "Skills updated",
|
||||
"successAria": "Skills updated. Click to open details.",
|
||||
"attentionAria": "Some skill updates were skipped. Click to open details.",
|
||||
"attentionLabel": "Skills need attention",
|
||||
"attentionTooltip": "Some skill updates were skipped — click to see details"
|
||||
"attentionTooltip": "Some skill updates were skipped — click to see details",
|
||||
"runningSkills_one": "Updating {{count}} skill…",
|
||||
"runningSkills_other": "Updating {{count}} skills…"
|
||||
},
|
||||
"UpdateStatusSegment": {
|
||||
"5cd13105a3": "Update failed. Click to expand.",
|
||||
@@ -4341,11 +4374,8 @@
|
||||
"6f8f6a6b04": "Filter workspaces",
|
||||
"5caccea440": "Delete selected",
|
||||
"e4a12c455b": "Clear",
|
||||
"0cb1501ccf": "reclaimable",
|
||||
"65402b7192": "selected",
|
||||
"43171f3e60": "Workspaces",
|
||||
"09960d86bd": "Scanned",
|
||||
"63efebe0e6": "{{value0}} {{value1}} removed from Space.",
|
||||
"eee5240810": "Workspaces deleted",
|
||||
"9afc97f9a3": "Workspace deleted",
|
||||
"792a214457": "Delete workspace",
|
||||
@@ -4353,7 +4383,6 @@
|
||||
"9155381019": "Sparse",
|
||||
"f39d291997": "Select",
|
||||
"16988df079": "No files found.",
|
||||
"b25c2c1086": "top-level items",
|
||||
"d3f9c69ddc": "Zoom",
|
||||
"ef890d31b9": "All",
|
||||
"c28643d3da": "Go to workspace",
|
||||
@@ -4392,8 +4421,15 @@
|
||||
"c5135e7e4a": "Scanning workspace sizes. You can leave this page.",
|
||||
"0990a63160": "No scanned workspace sizes yet.",
|
||||
"977bdf9a36": "No top-level items to show.",
|
||||
"131662ac65": "{{value0}} open",
|
||||
"0d1c78d749": "Select {{value0}}"
|
||||
"0d1c78d749": "Select {{value0}}",
|
||||
"removedFromSpace_one": "{{count}} workspace removed from Space.",
|
||||
"removedFromSpace_other": "{{count}} workspaces removed from Space.",
|
||||
"topLevelItems_one": "{{formattedCount}} top-level item",
|
||||
"topLevelItems_other": "{{formattedCount}} top-level items",
|
||||
"selectedCount_one": "{{count}} selected",
|
||||
"selectedCount_other": "{{count}} selected",
|
||||
"reclaimableSize": "{{size}} reclaimable",
|
||||
"scanning": "Scanning"
|
||||
},
|
||||
"ports": {
|
||||
"status": {
|
||||
@@ -4407,7 +4443,8 @@
|
||||
"e4a709548c": "Failed to refresh ports",
|
||||
"acdb6df590": "Stopped process on {{value0}}",
|
||||
"480d8f2347": "Copied {{value0}}",
|
||||
"b854ec9ff5": "Failed to open browser"
|
||||
"b854ec9ff5": "Failed to open browser",
|
||||
"unknownProcess": "Unknown process"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4437,8 +4474,6 @@
|
||||
"7ad719c4bf": "Limited",
|
||||
"e740f92596": "Refresh failed",
|
||||
"8418ec448d": "{{value0}} usage could not be refreshed. Agent sessions may still be signed in.",
|
||||
"45198c7d95": "1 rate-limit reset available",
|
||||
"bce421cba3": "{{value0}} rate-limit resets available",
|
||||
"7ec6e030a0": "Next expires now",
|
||||
"d1e442a9e5": "Expires now",
|
||||
"6cf9eaed10": "Next expires in {{value0}}",
|
||||
@@ -4495,7 +4530,14 @@
|
||||
"label": "Updates when Claude runs",
|
||||
"message": "Claude usage updates the next time Claude runs."
|
||||
}
|
||||
}
|
||||
},
|
||||
"justNow": "just now",
|
||||
"minutesAgo": "{{minutes}}m ago",
|
||||
"hoursAgo": "{{hours}}h ago",
|
||||
"updatedAgo": "Updated {{time}}",
|
||||
"notYetUpdated": "Not yet updated",
|
||||
"rateLimitResetsAvailable_one": "{{count}} rate-limit reset available",
|
||||
"rateLimitResetsAvailable_other": "{{count}} rate-limit resets available"
|
||||
},
|
||||
"SshTargetStatusRow": {
|
||||
"sshHost": "SSH Host"
|
||||
@@ -4530,12 +4572,12 @@
|
||||
"RemoteServerUpdateStatusSegment": {
|
||||
"updating": "Updating {{value0}}/{{value1}}",
|
||||
"updatingTooltip": "Remote Orca Server updates are in progress",
|
||||
"failed": "{{value0}} server updates failed",
|
||||
"failedTooltip": "Open Remote Orca Server updates to review and retry",
|
||||
"updated": "{{value0}} servers updated",
|
||||
"updatedTooltip": "Remote Orca Server updates completed",
|
||||
"failedOne": "1 server update failed",
|
||||
"updatedOne": "1 server updated"
|
||||
"failedCount_one": "{{count}} server update failed",
|
||||
"failedCount_other": "{{count}} server updates failed",
|
||||
"updatedCount_one": "{{count}} server updated",
|
||||
"updatedCount_other": "{{count}} servers updated"
|
||||
},
|
||||
"resource": {
|
||||
"memory": {
|
||||
@@ -4543,7 +4585,10 @@
|
||||
"workingSetDescription": "Summed working set (WS): pages resident in RAM right now. Shared pages can appear in more than one process, and memory Windows has paged out is not counted here.",
|
||||
"privateBytesDescription": "Summed private bytes: memory these processes have committed, counted whether it is resident or paged out. This is what the host charges against its commit limit, so it keeps rising while the working set above shrinks under paging.",
|
||||
"footprintDescription": "Summed memory footprint, the same figure Activity Monitor shows: memory each process owns, including graphics memory. Pages shared between processes are not counted twice.",
|
||||
"rssDescription": "Summed resident set size (RSS). Shared or aliased pages can appear in more than one process."
|
||||
"rssDescription": "Summed resident set size (RSS). Shared or aliased pages can appear in more than one process.",
|
||||
"memColumn": "Mem",
|
||||
"memorySummary": "Σ Memory",
|
||||
"privateSummary": "Σ Private"
|
||||
}
|
||||
},
|
||||
"manager": {
|
||||
@@ -4592,29 +4637,29 @@
|
||||
"repair": "Re-pair…"
|
||||
},
|
||||
"NativeChatResumeStatusSegment": {
|
||||
"labelOne": "1 chat to resume",
|
||||
"label": "{{value0}} chats to resume",
|
||||
"ariaLabelOne": "1 chat available to resume",
|
||||
"ariaLabel": "{{value0}} chats available to resume",
|
||||
"tooltip": "Open interrupted chats available to resume",
|
||||
"failedLabelOne": "1 chat failed to resume",
|
||||
"failedLabel": "{{value0}} chats failed to resume",
|
||||
"failedAriaOne": "1 chat failed to resume. Click for details.",
|
||||
"failedAria": "{{value0}} chats failed to resume. Click for details.",
|
||||
"failedTooltip": "Chats Orca could not resume after the restart. Click for details.",
|
||||
"checkLabelOne": "1 chat to check",
|
||||
"checkLabel": "{{value0}} chats to check",
|
||||
"checkAriaOne": "1 chat to check after resuming. Click for details.",
|
||||
"checkAria": "{{value0}} chats to check after resuming. Click for details.",
|
||||
"checkTooltip": "Chats Orca couldn’t resume, or couldn’t confirm it resumed, after the restart. Click for details.",
|
||||
"resumingTooltip": "Restoring interrupted chats and asking them to carry on…",
|
||||
"resumingProgressLabel": "Resuming chats {{value0}}/{{value1}}",
|
||||
"resumingProgressAria": "Resuming chats, {{value0}} of {{value1}} done. Click to open details.",
|
||||
"resumedLabelOne": "1 chat resumed",
|
||||
"resumedLabel": "{{value0}} chats resumed",
|
||||
"resumedAriaOne": "1 chat resumed. Click to see it.",
|
||||
"resumedAria": "{{value0}} chats resumed. Click to see them.",
|
||||
"resumedTooltip": "Chats Orca resumed after the restart. Click to see them."
|
||||
"resumedTooltip": "Chats Orca resumed after the restart. Click to see them.",
|
||||
"chatsFailedLabel_one": "{{count}} chat failed to resume",
|
||||
"chatsFailedLabel_other": "{{count}} chats failed to resume",
|
||||
"chatsFailedAria_one": "{{count}} chat failed to resume. Click for details.",
|
||||
"chatsFailedAria_other": "{{count}} chats failed to resume. Click for details.",
|
||||
"resumedLabelCount_one": "{{count}} chat resumed",
|
||||
"resumedLabelCount_other": "{{count}} chats resumed",
|
||||
"resumedAriaCount_one": "{{count}} chat resumed. Click to see it.",
|
||||
"resumedAriaCount_other": "{{count}} chats resumed. Click to see them.",
|
||||
"checkLabelCount_one": "{{count}} chat to check",
|
||||
"checkLabelCount_other": "{{count}} chats to check",
|
||||
"checkAriaCount_one": "{{count}} chat to check after resuming. Click for details.",
|
||||
"checkAriaCount_other": "{{count}} chats to check after resuming. Click for details.",
|
||||
"labelCount_one": "{{count}} chat to resume",
|
||||
"labelCount_other": "{{count}} chats to resume",
|
||||
"ariaLabelCount_one": "{{count}} chat available to resume",
|
||||
"ariaLabelCount_other": "{{count}} chats available to resume"
|
||||
},
|
||||
"StatusBarUsageChangeNotices": {
|
||||
"compactTitle": "Usage display is now compact",
|
||||
@@ -4623,6 +4668,81 @@
|
||||
"usageUnitLabel": {
|
||||
"used": "Used",
|
||||
"remaining": "Remaining"
|
||||
},
|
||||
"mergeSnapshotAndSessions": {
|
||||
"unattributed": "Unattributed"
|
||||
},
|
||||
"resourceSessionLabels": {
|
||||
"terminalNumber": "Terminal {{number}}",
|
||||
"pid": "pid {{pid}}",
|
||||
"sessionPrefix": "session {{id}}",
|
||||
"unknownSession": "(unknown session)",
|
||||
"unknown": "unknown"
|
||||
},
|
||||
"runtimeTargets": {
|
||||
"wslDefault": "WSL default"
|
||||
},
|
||||
"floatingWorkspace": {
|
||||
"minimize": "Minimize Floating Workspace",
|
||||
"show": "Show Floating Workspace"
|
||||
},
|
||||
"workspaceSpaceGitRefresh": {
|
||||
"ownerUnavailable": "Workspace owner is no longer available"
|
||||
},
|
||||
"workspaceSpaceDecision": {
|
||||
"syncedWithUpstream": "Synced with upstream",
|
||||
"aheadAndBehind": "{{ahead}} ahead, {{behind}} behind",
|
||||
"ahead": "{{ahead}} ahead",
|
||||
"behind": "{{behind}} behind",
|
||||
"activeAgents_one": "{{count}} active agent",
|
||||
"activeAgents_other": "{{count}} active agents",
|
||||
"completedAgents_one": "{{count}} completed agent",
|
||||
"completedAgents_other": "{{count}} completed agents",
|
||||
"activeAndCompletedAgents": "{{active}}, {{completed}}",
|
||||
"completedAgentsRetained_one": "{{count}} completed agent retained",
|
||||
"completedAgentsRetained_other": "{{count}} completed agents retained",
|
||||
"noTrackedAgents": "No tracked agents running",
|
||||
"noTerminalTabs": "No terminal tabs",
|
||||
"liveTerminalTabs_one": "{{live}} live of {{count}} terminal tab",
|
||||
"liveTerminalTabs_other": "{{live}} live of {{count}} terminal tabs",
|
||||
"gitStatusUnavailable": "Git status unavailable: {{error}}",
|
||||
"gitStatusNotLoaded": "Git status has not loaded yet",
|
||||
"noUncommittedFiles": "No uncommitted files",
|
||||
"changedFiles_one": "{{count}} changed file",
|
||||
"changedFiles_other": "{{count}} changed files",
|
||||
"noEditorFiles": "No editor files open",
|
||||
"editorFilesOpen_one": "{{count}} editor file open",
|
||||
"editorFilesOpen_other": "{{count}} editor files open",
|
||||
"dirtyOfOpen": "{{dirty}} of {{open}}",
|
||||
"dirtyEditorBuffers_one": "{{count}} dirty editor buffer",
|
||||
"dirtyEditorBuffers_other": "{{count}} dirty editor buffers",
|
||||
"openFiles_one": "{{count}} open file",
|
||||
"openFiles_other": "{{count}} open files",
|
||||
"activeWorkspace": "This is the active workspace",
|
||||
"mainWorktreeProtected": "Main worktree is protected",
|
||||
"workspaceProtected": "Workspace is protected",
|
||||
"canDeleteAfterReview": "Can be deleted after review",
|
||||
"noLinkedIssue": "No linked issue",
|
||||
"noLinkedReview": "No linked PR",
|
||||
"browserTabsOpen_one": "{{count}} browser tab open",
|
||||
"browserTabsOpen_other": "{{count}} browser tabs open"
|
||||
},
|
||||
"workspaceSpaceFormat": {
|
||||
"cancellingScan": "Cancelling scan",
|
||||
"currentWorkspaces": "workspaces",
|
||||
"scanningWorkspaces": "Scanning {{scanned}} of {{total}} · {{current}}",
|
||||
"scanningRepos_one": "Scanning {{scanned}} of {{count}} repo · {{current}}",
|
||||
"scanningRepos_other": "Scanning {{scanned}} of {{count}} repos · {{current}}",
|
||||
"scanningSizes": "Scanning workspace sizes",
|
||||
"status": {
|
||||
"scanned": "Scanned",
|
||||
"missing": "Missing",
|
||||
"noAccess": "No access",
|
||||
"unavailable": "Unavailable",
|
||||
"failed": "Failed"
|
||||
},
|
||||
"mainWorktree": "main worktree",
|
||||
"detached": "detached"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -5400,12 +5520,10 @@
|
||||
"670864ab52": "Keeping local {{value0}} up to date",
|
||||
"84c62e4d7f": "Could not turn on {{value0}}",
|
||||
"442552c656": "Open Settings and try again.",
|
||||
"f15fd80989": "Your new worktree is current, but local {{value0}} is {{value1}} {{value2}} behind, so AI diffs may compare to stale history. Let Orca keep it up to date automatically. Change this anytime in",
|
||||
"3d260e1a5d": "Settings › {{value0}}",
|
||||
"34a03a6565": "Keep {{value0}} up to date",
|
||||
"4a18052018": "Local {{value0}} is behind {{value1}}",
|
||||
"commit": "commit",
|
||||
"commits": "commits"
|
||||
"staleLocalBranch_one": "Your new worktree is current, but local {{branch}} is {{count}} commit behind, so AI diffs may compare to stale history. Let Orca keep it up to date automatically. Change this anytime in <settings>Settings › {{setting}}</settings>",
|
||||
"staleLocalBranch_other": "Your new worktree is current, but local {{branch}} is {{count}} commits behind, so AI diffs may compare to stale history. Let Orca keep it up to date automatically. Change this anytime in <settings>Settings › {{setting}}</settings>"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -5459,12 +5577,11 @@
|
||||
"39d51212cc": "Group name",
|
||||
"aa0247680d": "No, import separately",
|
||||
"a0bc4d1f8e": "Yes, import as group",
|
||||
"8401a7a0d0": "1 repository",
|
||||
"d4f1df62ef": "{{value0}} repositories",
|
||||
"b4263a2ac4": "Found {{value0}} in {{value1}}.",
|
||||
"24eda6c8b2": "Scanning... {{value0}}",
|
||||
"6149d5203f": "No repositories are selected. Open the parent folder instead to use editor, terminal, and search without Git features.",
|
||||
"e52454b7f6": "Open as Folder"
|
||||
"e52454b7f6": "Open as Folder",
|
||||
"foundRepositories_one": "Found {{count}} repository in {{path}}.",
|
||||
"foundRepositories_other": "Found {{count}} repositories in {{path}}."
|
||||
},
|
||||
"AddRepoRemoteStep": {
|
||||
"6680289908": "/home/user/project",
|
||||
@@ -5533,9 +5650,8 @@
|
||||
"eab8b45238": "Copy error",
|
||||
"a23b22d16f": "Copied",
|
||||
"74fc00776f": "Error details",
|
||||
"3afcad0497": "from the first agent message.",
|
||||
"ff62a18580": "Orca couldn't generate a branch name for",
|
||||
"ca3b225195": "Branch auto-name failed"
|
||||
"ca3b225195": "Branch auto-name failed",
|
||||
"couldNotGenerateBranchName": "Orca couldn't generate a branch name for <name>{{name}}</name> from the first agent message."
|
||||
},
|
||||
"CreateProjectLocationField": {
|
||||
"95548e33bf": "Choose parent folder...",
|
||||
@@ -5555,37 +5671,38 @@
|
||||
"2b56b35f53": "You can change this in Settings.",
|
||||
"dd3a45bbbd": "We'll skip this confirmation next time.",
|
||||
"fc23c4cbdf": "Delete Workspace",
|
||||
"86f0ae1257": "Delete Workspaces"
|
||||
"86f0ae1257": "Delete Workspaces",
|
||||
"removeFolderProjectInstead": "Remove the folder project instead of deleting this workspace.",
|
||||
"gitBlocksMainWorktree": "Git does not allow removing the main worktree."
|
||||
},
|
||||
"DeleteWorktreeDirtyChangeHint": {
|
||||
"showLoadedPaths": "Show loaded paths",
|
||||
"loadedPathsNotice": "Loaded paths may be incomplete or out of date.",
|
||||
"loadedChangedPaths": "Loaded changed paths",
|
||||
"unresolvedConflict": "Unresolved conflict",
|
||||
"moreLoadedPaths": "and {{value0}} more loaded paths",
|
||||
"changeCount_one": "{{count}} uncommitted or untracked change",
|
||||
"changeCount_other": "{{count}} uncommitted or untracked changes",
|
||||
"changes": "Uncommitted or untracked changes"
|
||||
"changes": "Uncommitted or untracked changes",
|
||||
"moreLoadedPaths_one": "and {{count}} more loaded path",
|
||||
"moreLoadedPaths_other": "and {{count}} more loaded paths"
|
||||
},
|
||||
"DeleteWorktreeLineageNotice": {
|
||||
"ad407c2d55": "more",
|
||||
"a940f3c96e": "Child workspaces will be deleted",
|
||||
"29b98bf9cd": "Deleting this workspace also deletes {{value0}} child workspaces.",
|
||||
"66798cc6a2": "Deleting this workspace also deletes 1 child workspace."
|
||||
"alsoDeletesChildren_one": "Deleting this workspace also deletes {{count}} child workspace.",
|
||||
"alsoDeletesChildren_other": "Deleting this workspace also deletes {{count}} child workspaces.",
|
||||
"moreChildren_one": "+{{count}} more",
|
||||
"moreChildren_other": "+{{count}} more"
|
||||
},
|
||||
"DeleteWorktreeSkipConfirmOption": {
|
||||
"29aefb7e52": "Don't ask again"
|
||||
},
|
||||
"DeleteWorktreeWarningPanels": {
|
||||
"026738155a": "(the original clone directory).",
|
||||
"c4f96a6e18": "main worktree",
|
||||
"e3be9eba15": "This is the"
|
||||
"mainWorktreeNotice": "This is the <strong>main worktree</strong> (the original clone directory)."
|
||||
},
|
||||
"ImportedWorktreesVisibilityLine": {
|
||||
"b7a87dc32f": "Show in worktree list",
|
||||
"ad99f4eea9": "Keep hidden",
|
||||
"9f4f14e821": "Change this later from the project menu.",
|
||||
"b2bc47c080": "more locations",
|
||||
"b47ba1a9d2": "{{value0}} preview",
|
||||
"2251d41ebb": "Hidden worktree groups",
|
||||
"5a9688802a": "Show {{value0}} more",
|
||||
@@ -5599,7 +5716,9 @@
|
||||
"keepHiddenAriaLabel_one": "Keep {{count}} discovered worktree hidden for {{repo}}; recover from the project menu",
|
||||
"keepHiddenAriaLabel_other": "Keep {{count}} discovered worktrees hidden for {{repo}}; recover from the project menu",
|
||||
"keepHiddenTooltip": "Keep hidden - recover from the project menu",
|
||||
"repoOnHost": "{{repo}} on {{host}}"
|
||||
"repoOnHost": "{{repo}} on {{host}}",
|
||||
"moreLocations_one": "+ {{count}} more location",
|
||||
"moreLocations_other": "+ {{count}} more locations"
|
||||
},
|
||||
"NonGitFolderDialog": {
|
||||
"e52454b7f6": "Open as Folder",
|
||||
@@ -5633,20 +5752,24 @@
|
||||
},
|
||||
"ProjectGroupDeleteDialog": {
|
||||
"ca65b78f78": "Cancel",
|
||||
"69f5cb97d0": "Delete",
|
||||
"591f330288": "Delete Project Group",
|
||||
"2c14ce677a": "Deleting...",
|
||||
"0e0e6764af": "Contained projects",
|
||||
"ad407c2d55": "more",
|
||||
"removeContainedProjectSingular": "Remove 1 contained project",
|
||||
"removeContainedProjectPlural": "Remove {{value0}} contained projects",
|
||||
"55f75628c0": "Project folders on disk are not deleted.",
|
||||
"fec7e9c8ae": "Delete Group"
|
||||
"fec7e9c8ae": "Delete Group",
|
||||
"removeContainedProjects_one": "Remove {{count}} contained project",
|
||||
"removeContainedProjects_other": "Remove {{count}} contained projects",
|
||||
"deleteGroupDescription": "Delete <name>{{name}}</name>.",
|
||||
"moreProjects_one": "+{{count}} more",
|
||||
"moreProjects_other": "+{{count}} more"
|
||||
},
|
||||
"ProjectGroupNameDialog": {
|
||||
"d99a034073": "Cancel",
|
||||
"83dfbc5313": "Group Name",
|
||||
"4a64e78822": "Saving..."
|
||||
"4a64e78822": "Saving...",
|
||||
"defaultGroupName": "{{name}} group",
|
||||
"create": "Create",
|
||||
"rename": "Rename"
|
||||
},
|
||||
"RemoteFileBrowser": {
|
||||
"2300612806": "Type to filter or enter a path…",
|
||||
@@ -5658,7 +5781,9 @@
|
||||
"largeInputNoMatches": "No matches for this long input",
|
||||
"entriesLabel": "Folder entries",
|
||||
"inputLabel": "Filter or path",
|
||||
"fileHint": "Files can't be opened as a project"
|
||||
"fileHint": "Files can't be opened as a project",
|
||||
"invalidPathRepeatedSeparators": "Invalid path: repeated separators",
|
||||
"invalidPathControlCharacters": "Invalid path: control characters are not allowed"
|
||||
},
|
||||
"SleepTwinWorkspaceDialog": {
|
||||
"title": "Sleep Workspace",
|
||||
@@ -5688,11 +5813,10 @@
|
||||
"70715947fb": "Setup script cannot be empty",
|
||||
"888b83bf78": "Failed to save setup script",
|
||||
"a49196d538": "Runs when Orca creates a new worktree.",
|
||||
"d9f2db2738": "project's settings",
|
||||
"a5bb8c5135": "Saved in this",
|
||||
"savedSetupCommand": "Saved the setup command.",
|
||||
"savedWithSkippedFields_one": "{{count}} unsupported field skipped. Saved the setup command.",
|
||||
"savedWithSkippedFields_other": "{{count}} unsupported fields skipped. Saved the setup command."
|
||||
"savedWithSkippedFields_other": "{{count}} unsupported fields skipped. Saved the setup command.",
|
||||
"savedInProjectSettings": "Saved in this <settings>project's settings</settings>"
|
||||
},
|
||||
"SetupScriptPromptCardViews": {
|
||||
"96a7f4198c": "Save local setup",
|
||||
@@ -5700,20 +5824,17 @@
|
||||
"31b8b01a45": "Settings",
|
||||
"4a98f907ae": "Retry",
|
||||
"0a98169776": "Add a setup command to run when Orca creates new worktrees.",
|
||||
"8349e3fa4c": ". Save it to run for new worktrees.",
|
||||
"b56d1322f7": "Found a setup command in",
|
||||
"aef6c0a213": "Save the detected command to run it whenever Orca creates a worktree.",
|
||||
"660cdc17f8": "setup scripts. Add a local command, or change the source in Settings.",
|
||||
"8f6be51aa1": "orca.yaml",
|
||||
"bb879db364": "This repo ignores shared",
|
||||
"0155fb9ed3": "Couldn't verify this repo's setup script right now.",
|
||||
"eefa756190": "Configure manually",
|
||||
"ca4efcbc25": "Save",
|
||||
"d02e6a42b1": "Detected from",
|
||||
"fdbc6cb064": "Detected setup script",
|
||||
"7275f674cc": "Detected setup",
|
||||
"822ff300ad": "Dismiss",
|
||||
"5bfd5c8779": "Dismiss setup scripts"
|
||||
"5bfd5c8779": "Dismiss setup scripts",
|
||||
"detectedFromSource": "Detected from <source>{{source}}</source>",
|
||||
"ignoresSharedSetup": "This repo ignores shared <yaml>orca.yaml</yaml> setup scripts. Add a local command, or change the source in Settings.",
|
||||
"foundSetupCommandIn": "Found a setup command in <source>{{source}}</source>. Save it to run for new worktrees."
|
||||
},
|
||||
"SidebarFeedbackDialog": {
|
||||
"8bf619e4cf": "Cancel",
|
||||
@@ -5895,8 +6016,9 @@
|
||||
"WorkspaceKanbanDrawerHeader": {
|
||||
"f369f5c5a3": "Close",
|
||||
"e1a34450fc": "Organize workspaces by status and open workspace cards.",
|
||||
"81870af08f": "selected",
|
||||
"c6a77ab0f4": "Workspace board"
|
||||
"c6a77ab0f4": "Workspace board",
|
||||
"selectedCount_one": "{{count}} selected",
|
||||
"selectedCount_other": "{{count}} selected"
|
||||
},
|
||||
"WorkspaceKanbanPinDropTarget": {
|
||||
"c30151c5ee": "Drop here to pin without changing status.",
|
||||
@@ -5997,7 +6119,8 @@
|
||||
"2931b42b09": "State: Draft {{value0}}",
|
||||
"e888362def": "State: Closed",
|
||||
"f394b3e86e": "State: Merged",
|
||||
"af2b07bda5": "State: {{value0}}"
|
||||
"af2b07bda5": "State: {{value0}}",
|
||||
"checksStatus": "Checks: {{status}}"
|
||||
},
|
||||
"WorktreeCardPorts": {
|
||||
"3240f320d7": "Live Ports",
|
||||
@@ -6008,8 +6131,9 @@
|
||||
"5d1a5d51bb": "Stopped process on {{value0}}",
|
||||
"c89f290e25": "Copied {{value0}}",
|
||||
"d1113f4660": "Failed to open browser",
|
||||
"fed49903c9": "{{value0}} live {{value1}}",
|
||||
"unknownProcess": "Unknown process"
|
||||
"unknownProcess": "Unknown process",
|
||||
"livePorts_one": "{{count}} live port",
|
||||
"livePorts_other": "{{count}} live ports"
|
||||
},
|
||||
"WorktreeContextMenu": {
|
||||
"c39c37676a": "Create a group and move this project into it.",
|
||||
@@ -6054,7 +6178,6 @@
|
||||
"f9dc6cc5d3": "Rename Project Group",
|
||||
"370c6a55dd": "Clear Filters",
|
||||
"b7acbf038b": "No workspaces found",
|
||||
"0c6ee14f23": "child",
|
||||
"c83968f87f": "Remove Project",
|
||||
"64e55f7f01": "Remove from group",
|
||||
"4a08fb55f2": "Move to group",
|
||||
@@ -6067,12 +6190,7 @@
|
||||
"4d7b73658c": "Rename group",
|
||||
"79465e9034": "Group actions for {{value0}}",
|
||||
"bfbedc547b": "Worktrees",
|
||||
"045a8aed48": "children",
|
||||
"bb85cd86ba": "Create workspace for {{value0}}",
|
||||
"20bebf9c7f": "Show {{value0}} child workspace",
|
||||
"c1f4a31623": "Show {{value0}} child workspaces",
|
||||
"e97297cb75": "Hide {{value0}} child workspace",
|
||||
"0cd15956d4": "Hide {{value0}} child workspaces",
|
||||
"bd37a57ac8": "Create workspace for {{value0}}",
|
||||
"b667b59632": "Some projects could not be removed from Orca",
|
||||
"groupDeleteFailed": "Failed to delete group",
|
||||
@@ -6083,8 +6201,14 @@
|
||||
"sidebarRowMissing": "Target no longer exists",
|
||||
"failedUnnestWorkspace": "Failed to unnest workspace",
|
||||
"hostRepairRequired": "Re-pair required",
|
||||
"groupProjectsRemainedSingular": "{{remaining}} of {{count}} contained project remained after deleting the group.",
|
||||
"groupProjectsRemainedPlural": "{{remaining}} of {{count}} contained projects remained after deleting the group."
|
||||
"showChildWorkspaces_one": "Show {{count}} child workspace",
|
||||
"hideChildWorkspaces_one": "Hide {{count}} child workspace",
|
||||
"showChildWorkspaces_other": "Show {{count}} child workspaces",
|
||||
"hideChildWorkspaces_other": "Hide {{count}} child workspaces",
|
||||
"childCount_one": "{{count}} child",
|
||||
"childCount_other": "{{count}} children",
|
||||
"groupProjectsRemained_one": "{{remaining}} of {{count}} contained project remained after deleting the group.",
|
||||
"groupProjectsRemained_other": "{{remaining}} of {{count}} contained projects remained after deleting the group."
|
||||
},
|
||||
"WorktreeMetaDialog": {
|
||||
"3db0a2a593": "Cancel",
|
||||
@@ -6148,7 +6272,6 @@
|
||||
"d40d436fc2": "Could not update worktree visibility. Try again.",
|
||||
"unsupportedHost": "This host doesn't support source-specific worktree visibility. Update Orca on the host to change this setting.",
|
||||
"search": "Search hidden worktrees",
|
||||
"searchPlaceholder": "Search {{value0}} worktrees…",
|
||||
"noMatches": "No matching worktrees",
|
||||
"allShown": "All discovered worktrees are shown",
|
||||
"noneFound": "No non-Orca worktrees found",
|
||||
@@ -6156,7 +6279,9 @@
|
||||
"disableSource": "Disable a source to manage its worktrees individually.",
|
||||
"appearWhenDetected": "New worktrees will appear here when Orca detects them.",
|
||||
"openGlobalSettings": "Manage in Global Settings",
|
||||
"globalSettingsSources": "These sources have a global setting you can override here:"
|
||||
"globalSettingsSources": "These sources have a global setting you can override here:",
|
||||
"searchHiddenPlaceholder_one": "Search {{count}} worktree…",
|
||||
"searchHiddenPlaceholder_other": "Search {{count}} worktrees…"
|
||||
},
|
||||
"add": {
|
||||
"repo": {
|
||||
@@ -6363,13 +6488,13 @@
|
||||
"7a8b9c0d1e": "Open settings",
|
||||
"8b9c0d1e2f": "Remove host",
|
||||
"workspacesFailed": "Could not remove {{count}} of this host’s workspaces. The host was kept so you can retry.",
|
||||
"oneWorkspace": "1 workspace",
|
||||
"manyWorkspaces": "{{count}} workspaces",
|
||||
"hostHasWorkspacesDefault": "Removes {{value0}} and its credentials from this computer. Its {{value1}} stay in Orca — remote files are not touched.",
|
||||
"alsoForgetLocal": "Also remove these {{value0}} from Orca",
|
||||
"advanced": "Advanced",
|
||||
"alsoForgetLocalHint": "Clears them from Orca only. Remote files, worktrees, and branches are left untouched.",
|
||||
"wslHostEndsTerminalsUnlessShared": "Removes {{value0}} from Orca. Unless another Orca that’s open on this computer is using it, this also ends its open terminals and stops Orca’s server in that distro. Files in the distro are untouched."
|
||||
"wslHostEndsTerminalsUnlessShared": "Removes {{value0}} from Orca. Unless another Orca that’s open on this computer is using it, this also ends its open terminals and stops Orca’s server in that distro. Files in the distro are untouched.",
|
||||
"hostKeepsWorkspaces_one": "Removes {{host}} and its credentials from this computer. Its {{count}} workspace stays in Orca — remote files are not touched.",
|
||||
"hostKeepsWorkspaces_other": "Removes {{host}} and its credentials from this computer. Its {{count}} workspaces stay in Orca — remote files are not touched.",
|
||||
"alsoRemoveWorkspaces_one": "Also remove this workspace from Orca",
|
||||
"alsoRemoveWorkspaces_other": "Also remove these {{count}} workspaces from Orca"
|
||||
},
|
||||
"HostRenameDialog": {
|
||||
"1a2b3c4d5e": "Rename host",
|
||||
@@ -6442,7 +6567,7 @@
|
||||
"current": "Current",
|
||||
"searchPlaceholder": "Search worktrees...",
|
||||
"empty": "No matching eligible worktrees.",
|
||||
"setParentFor": "Set parent for"
|
||||
"setParentForName": "Set parent for <name>{{name}}</name>"
|
||||
},
|
||||
"WorktreeCardStatusSlot": {
|
||||
"branchIdentity": "Branch",
|
||||
@@ -6452,12 +6577,12 @@
|
||||
},
|
||||
"NewExternalWorktreesInboxLine": {
|
||||
"9f2d4c8b17": "Hide external worktrees permanently for {{value0}}",
|
||||
"2a6f31d8c7": "hidden worktree",
|
||||
"5b90e4a2f6": "hidden worktrees",
|
||||
"7f18c5b0d3": "Review {{value0}} hidden worktree in {{value1}}",
|
||||
"4e2b7a9c05": "Review {{value0}} hidden worktrees in {{value1}}",
|
||||
"c3e8a1f4b2": "Don't show again",
|
||||
"6c07f3a91e": "{{value0}} on {{value1}}"
|
||||
"6c07f3a91e": "{{value0}} on {{value1}}",
|
||||
"hiddenWorktreesNoun_one": "hidden worktree",
|
||||
"hiddenWorktreesNoun_other": "hidden worktrees",
|
||||
"reviewHiddenWorktrees_one": "Review {{count}} hidden worktree in {{scope}}",
|
||||
"reviewHiddenWorktrees_other": "Review {{count}} hidden worktrees in {{scope}}"
|
||||
},
|
||||
"NoticeHostGlyph": {
|
||||
"hostDisconnected": "{{hostName}} disconnected",
|
||||
@@ -6548,8 +6673,9 @@
|
||||
"sshConfigPickerRetry": "Try again",
|
||||
"sshConfigPickerResolving": "Reading…",
|
||||
"pairingHelpShareComputer": "Create this under Settings → Remote Orca Servers → Share this computer on the other computer.",
|
||||
"sshImportSyncedPlural": "Added {{count}} hosts to Orca.",
|
||||
"sshImportSyncedSingular": "Added {{count}} host to Orca."
|
||||
"sshImportSynced_one": "Added {{count}} host to Orca.",
|
||||
"sshImportSynced_other": "Added {{count}} hosts to Orca.",
|
||||
"sshConfigPickerInvalidResponse": "Invalid SSH config host response"
|
||||
},
|
||||
"ForgetSshWorkspaceDialog": {
|
||||
"ghostBody": "{{host}} is no longer a saved SSH host, so this workspace is no longer connected to a live host. It can only be removed from Orca — files and branches on the remote are left untouched.",
|
||||
@@ -6574,11 +6700,12 @@
|
||||
},
|
||||
"WorkspaceKanbanSearchField": {
|
||||
"bdb753c78d": "No workspaces match",
|
||||
"4d96c209d6": "{{value0}} of {{value1}} workspaces match",
|
||||
"c0cd6bdf6c": "Search workspaces",
|
||||
"3b7ea51793": "Clear search",
|
||||
"7f1c2e94a5": "Search text is too long — the board is unfiltered",
|
||||
"9a4d0f6b21": "Too long"
|
||||
"9a4d0f6b21": "Too long",
|
||||
"workspacesMatch_one": "{{matchCount}} of {{count}} workspace matches",
|
||||
"workspacesMatch_other": "{{matchCount}} of {{count}} workspaces match"
|
||||
},
|
||||
"WorktreeCardSshHostControl": {
|
||||
"connectFailed": "SSH connection failed",
|
||||
@@ -6676,11 +6803,12 @@
|
||||
"developerToolsTitle": "Install Apple's command line tools",
|
||||
"developerToolsBody": "Git needs Apple's developer tools. Run this in Terminal, then switch back to Orca. It will check again automatically.",
|
||||
"affectedOne": "Worktree scan paused for {{value0}}",
|
||||
"affectedMany": "Worktree scan paused for {{value0}} projects",
|
||||
"copyCommand": "Copy command",
|
||||
"copied": "Command copied",
|
||||
"retry": "Retry now",
|
||||
"restored": "Git is working again. Worktrees refreshed."
|
||||
"restored": "Git is working again. Worktrees refreshed.",
|
||||
"affectedProjects_one": "Worktree scan paused for {{count}} project",
|
||||
"affectedProjects_other": "Worktree scan paused for {{count}} projects"
|
||||
},
|
||||
"manualSortSwitch": {
|
||||
"title": "Sort changed to Manual",
|
||||
@@ -6728,7 +6856,8 @@
|
||||
"wslHostRemoval": {
|
||||
"keptForOthers": "Removed from this Orca. The host keeps running for {{value0}}.",
|
||||
"partial": "The host was removed, but something in the distro is still running: {{value0}}",
|
||||
"pending": "Orca didn’t remove the host yet: {{value0}} Remove it again to retry, or connect it to keep it."
|
||||
"pending": "Orca didn’t remove the host yet: {{value0}} Remove it again to retry, or connect it to keep it.",
|
||||
"unavailable": "WSL hosts are not available on this computer."
|
||||
},
|
||||
"addRepoWslHostFolderPicker": {
|
||||
"otherDistro": "That folder is in {{value0}}, not {{value1}}.",
|
||||
@@ -6769,6 +6898,42 @@
|
||||
"openingProject": "Opening project...",
|
||||
"openingFolder": "Opening folder...",
|
||||
"chooseFolder": "Choose a folder..."
|
||||
},
|
||||
"DeleteNestedWorktreesDialog": {
|
||||
"unsupportedHost": "This host does not support nested worktree deletion."
|
||||
},
|
||||
"WorktreeCardHelpers": {
|
||||
"checksPassing": "Passing",
|
||||
"checksFailing": "Failing",
|
||||
"checksPending": "Pending",
|
||||
"conflictMerging": "Merging",
|
||||
"conflictRebasing": "Rebasing",
|
||||
"conflictCherryPicking": "Cherry-picking"
|
||||
},
|
||||
"folderWorkspaceComposer": {
|
||||
"defaultWorkspaceName": "{{name}} workspace"
|
||||
},
|
||||
"workspaceKanbanStatus": {
|
||||
"defaultLabel": "Status {{number}}"
|
||||
},
|
||||
"worktreeCardModel": {
|
||||
"sparsePreviewMore_one": "{{preview}}, +{{count}} more",
|
||||
"sparsePreviewMore_other": "{{preview}}, +{{count}} more"
|
||||
},
|
||||
"worktreeCardPrDisplay": {
|
||||
"mrDetailsUnavailable": "MR details unavailable",
|
||||
"prDetailsUnavailable": "PR details unavailable",
|
||||
"loadingMr": "Loading MR...",
|
||||
"loadingPr": "Loading PR..."
|
||||
},
|
||||
"HostSectionHeader": {
|
||||
"workspaceCount_one": "{{count}} workspace",
|
||||
"workspaceCount_other": "{{count}} workspaces"
|
||||
},
|
||||
"titleDerivedAgentRows": {
|
||||
"needsInput": "Needs input",
|
||||
"running": "Running",
|
||||
"idle": "Idle"
|
||||
}
|
||||
},
|
||||
"shared": {
|
||||
@@ -14360,17 +14525,8 @@
|
||||
"saveLocation": "Set location"
|
||||
},
|
||||
"SmartWorkspaceNameField": {
|
||||
"2a0d535f69": "Create new branch",
|
||||
"a44229ce4d": "as workspace name",
|
||||
"766083a596": "\"",
|
||||
"34ca97bce3": "\"",
|
||||
"b1a7d679ba": "Use",
|
||||
"e57c53727c": "Add project...",
|
||||
"a76fcb4fa0": "Switch to",
|
||||
"eadf877af5": "Keep",
|
||||
"6859e2896c": "Cancel",
|
||||
"9ef1a7c4b0": ", which is different from the selected project.",
|
||||
"ad188067ae": "The GitHub URL points to",
|
||||
"4bd98f1091": "Switch project?",
|
||||
"0c9e668e3a": "Clear",
|
||||
"7199ff19c7": "Clear selected source",
|
||||
@@ -14389,7 +14545,6 @@
|
||||
"fda67f0b61": "current project",
|
||||
"3e8bb1176a": "Connect Linear in Settings to search issues.",
|
||||
"switchTaskSourceTitle": "Switch task source?",
|
||||
"differentTaskSource": ", which is different from the selected task source.",
|
||||
"currentTaskSource": "current task source",
|
||||
"placeholderNameOrLinearUrl": "Type a name, Linear URL, or Jira URL",
|
||||
"placeholderWorkspaceName": "Type a workspace name",
|
||||
@@ -14418,7 +14573,13 @@
|
||||
"emoji": "Emoji",
|
||||
"loadingLinearIssue": "Loading Linear issue…",
|
||||
"linearLoginUnreadableTitle": "Reconnect Linear",
|
||||
"linearLoginUnreadableBody": "Unable to read saved Linear login. Reconnect it in Settings."
|
||||
"linearLoginUnreadableBody": "Unable to read saved Linear login. Reconnect it in Settings.",
|
||||
"keepRepo": "Keep {{name}}",
|
||||
"switchToRepo": "Switch to {{name}}",
|
||||
"crossRepoDifferentTaskSource": "The GitHub URL points to {{repo}}, which is different from the selected task source.",
|
||||
"crossRepoDifferentProject": "The GitHub URL points to {{repo}}, which is different from the selected project.",
|
||||
"useAsWorkspaceName": "Use <name>\"{{name}}\"</name> as workspace name",
|
||||
"createNewBranchNamed": "Create new branch <name>{{name}}</name>"
|
||||
},
|
||||
"ProjectCombobox": {
|
||||
"empty": "No projects match your search.",
|
||||
@@ -14432,6 +14593,11 @@
|
||||
"listLabel": "Run targets",
|
||||
"label": "Run on",
|
||||
"browse": "Browse run targets"
|
||||
},
|
||||
"projectCombobox": {
|
||||
"recentHeading": "Recent",
|
||||
"projectsHeading": "Projects",
|
||||
"foldersHeading": "Folders"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -16031,7 +16197,10 @@
|
||||
},
|
||||
"dashboard": {
|
||||
"DashboardAgentChildDisclosure": {
|
||||
"1b57ce9fa4": "{{value0}} {{value1}} child {{value2}}"
|
||||
"hideChildAgents_one": "Hide {{count}} child agent",
|
||||
"hideChildAgents_other": "Hide {{count}} child agents",
|
||||
"showChildAgents_one": "Show {{count}} child agent",
|
||||
"showChildAgents_other": "Show {{count}} child agents"
|
||||
},
|
||||
"DashboardAgentRow": {
|
||||
"912e136cd9": "Send",
|
||||
@@ -16039,7 +16208,13 @@
|
||||
"a41fb5376e": "Collapse details",
|
||||
"5ae84475cc": "Dismiss",
|
||||
"b06e13fcf7": "Dismiss agent",
|
||||
"0272969e28": "Send to this agent"
|
||||
"0272969e28": "Send to this agent",
|
||||
"justNow": "just now",
|
||||
"timeAgo": "{{duration}} ago",
|
||||
"dispatchedAgents_one": "{{agentType}} - dispatched {{count}} agent",
|
||||
"dispatchedAgents_other": "{{agentType}} - dispatched {{count}} agents",
|
||||
"startedAgo": "started {{time}}",
|
||||
"doneAgo": "done {{time}}"
|
||||
},
|
||||
"DashboardAgentRowMessage": {
|
||||
"0a01046763": "interrupted",
|
||||
@@ -17155,18 +17330,19 @@
|
||||
"activityOptionsActive": "Activity options ({{value0}})"
|
||||
},
|
||||
"clearCompleted": {
|
||||
"clearedOne": "Cleared 1 completed agent",
|
||||
"clearedMany": "Cleared {{count}} completed agents",
|
||||
"undo": "Undo"
|
||||
"undo": "Undo",
|
||||
"cleared_one": "Cleared {{count}} completed agent",
|
||||
"cleared_other": "Cleared {{count}} completed agents"
|
||||
},
|
||||
"standaloneWorktree": {
|
||||
"floatingTerminal": "Floating terminal",
|
||||
"standaloneTerminal": "Standalone terminal"
|
||||
},
|
||||
"ActivityTitlebarControls": {
|
||||
"f915168c8e": "unread",
|
||||
"d6a8de3934": "agents",
|
||||
"dc708f3eff": "Close agents"
|
||||
"dc708f3eff": "Close agents",
|
||||
"unreadCount_one": "{{count}} unread",
|
||||
"unreadCount_other": "{{count}} unread"
|
||||
},
|
||||
"ActivityScopeFilterControls": {
|
||||
"resetScope": "Show all hosts and projects",
|
||||
@@ -17961,6 +18137,16 @@
|
||||
"unreachable": "Couldn't reach Jira. Check your connection and try again.",
|
||||
"loadFailed": "Couldn't load Jira issues. Try again in a moment.",
|
||||
"errorWithCode": "Error {{code}}: {{summary}}"
|
||||
},
|
||||
"cmdJ": {
|
||||
"quickActionUnavailable": {
|
||||
"workspaceLoading": "Can’t run “{{action}}” — workspace is still loading.",
|
||||
"noActiveWorkspace": "Can’t run “{{action}}” — no workspace is active.",
|
||||
"workspaceDisconnected": "Can’t run “{{action}}” — workspace is disconnected.",
|
||||
"noTabGroup": "Can’t run “{{action}}” — no tab group is available.",
|
||||
"noMovableChat": "Can’t run “{{action}}” — no movable chat is active.",
|
||||
"clientUnsupported": "Can’t run “{{action}}” — this client and runtime do not support it."
|
||||
}
|
||||
}
|
||||
},
|
||||
"i18n": {
|
||||
@@ -19175,8 +19361,6 @@
|
||||
"none": "Has none"
|
||||
},
|
||||
"idleSignalField": "Idle signal",
|
||||
"selectionVanishedOne": "1 selected workspace no longer exists.",
|
||||
"selectionVanished": "{{value0}} selected workspaces no longer exist.",
|
||||
"updatedAgo": "Updated {{value0}}",
|
||||
"refreshing": "Refreshing…",
|
||||
"refreshingProgress": "Refreshing {{value0}}/{{value1}}",
|
||||
@@ -19191,12 +19375,6 @@
|
||||
"gitStatusCheckFailed": "Git status check failed",
|
||||
"gitStatusUnverified": "Git status could not be verified",
|
||||
"deleteAnyway": "Delete anyway",
|
||||
"forceDeleteProjectionOne": "{{count}} workspace currently shows risk and may need a force delete",
|
||||
"forceDeleteProjectionMany": "{{count}} workspaces currently show risk and may need a force delete",
|
||||
"selectionWithheldOne": "1 selected workspace is hidden by the current filters and was deselected.",
|
||||
"selectionWithheld": "{{value0}} selected workspaces are hidden by the current filters and were deselected.",
|
||||
"selectAllCountOne": "Select 1 safety-checked workspace",
|
||||
"selectAllCount": "Select all {{value0}} safety-checked workspaces",
|
||||
"appliedFilters": "Applied filters",
|
||||
"removeFilter": "Remove filter {{value0}}",
|
||||
"chip": {
|
||||
@@ -19240,18 +19418,28 @@
|
||||
"locked": "Locked",
|
||||
"retainedAgents": "Finished agents"
|
||||
}
|
||||
}
|
||||
},
|
||||
"forceDeleteRisk_one": "{{count}} workspace currently shows risk and may need a force delete",
|
||||
"forceDeleteRisk_other": "{{count}} workspaces currently show risk and may need a force delete",
|
||||
"selectionVanishedCount_one": "{{count}} selected workspace no longer exists.",
|
||||
"selectionVanishedCount_other": "{{count}} selected workspaces no longer exist.",
|
||||
"selectionWithheldCount_one": "{{count}} selected workspace is hidden by the current filters and was deselected.",
|
||||
"selectionWithheldCount_other": "{{count}} selected workspaces are hidden by the current filters and were deselected.",
|
||||
"selectAllSafetyChecked_one": "Select {{count}} safety-checked workspace",
|
||||
"selectAllSafetyChecked_other": "Select all {{count}} safety-checked workspaces"
|
||||
},
|
||||
"scan": {
|
||||
"progress": "Scanning workspaces ({{value0}}/{{value1}})",
|
||||
"singleError": "Could not check {{value0}}: {{value1}}. Some workspaces may be missing. Refresh to try again.",
|
||||
"moreErrors": ", +{{value0}} more",
|
||||
"multipleErrors": "Could not check {{value0}} repositories ({{value1}}{{value2}}). Some workspaces may be missing. Refresh to try again.",
|
||||
"noWorkspaces": "No workspaces found.",
|
||||
"fallbackRepository": "a repository",
|
||||
"gitListFailed": "Git could not list worktrees",
|
||||
"readyOne": "1 workspace found.",
|
||||
"readyMany": "{{value0}} workspaces found."
|
||||
"multipleErrorsWithMore_one": "Could not check {{count}} repository ({{names}}, +{{moreCount}} more). Some workspaces may be missing. Refresh to try again.",
|
||||
"multipleErrorsWithMore_other": "Could not check {{count}} repositories ({{names}}, +{{moreCount}} more). Some workspaces may be missing. Refresh to try again.",
|
||||
"multipleErrorsCount_one": "Could not check {{count}} repository ({{names}}). Some workspaces may be missing. Refresh to try again.",
|
||||
"multipleErrorsCount_other": "Could not check {{count}} repositories ({{names}}). Some workspaces may be missing. Refresh to try again.",
|
||||
"readyCount_one": "{{count}} workspace found.",
|
||||
"readyCount_other": "{{count}} workspaces found."
|
||||
},
|
||||
"relativeTime": {
|
||||
"never": "Never",
|
||||
@@ -20376,7 +20564,6 @@
|
||||
"repositoryLoading": "Repository identity is still loading. Try again once it is available.",
|
||||
"duplicate": "This link is already attached.",
|
||||
"title": "Linked work",
|
||||
"count": "{{count}} linked",
|
||||
"empty": "Keep every review and task for this workspace together.",
|
||||
"reviews": "Reviews",
|
||||
"tasks": "Issues & tasks",
|
||||
@@ -20384,7 +20571,6 @@
|
||||
"open": "Open link",
|
||||
"unlinkItem": "Unlink {{label}}",
|
||||
"unlink": "Unlink from workspace",
|
||||
"show": "Show {{count}} linked reviews and tasks",
|
||||
"details": "Workspace details",
|
||||
"description": "Attach reviews and tasks, and keep notes for this workspace.",
|
||||
"commentHelp": "Markdown supported. Enter or {{shortcut}} to save · Shift+Enter for a new line.",
|
||||
@@ -20437,7 +20623,11 @@
|
||||
"checksPassing": "Passing",
|
||||
"checksUnknown": "Unknown",
|
||||
"checksNeutral": "Neutral",
|
||||
"allReviewChecks": "Reviews: {{count}} · Checks: {{status}}"
|
||||
"allReviewChecks": "Reviews: {{count}} · Checks: {{status}}",
|
||||
"showLinked_one": "Show {{count}} linked review or task",
|
||||
"showLinked_other": "Show {{count}} linked reviews and tasks",
|
||||
"linkedCount_one": "{{count}} linked",
|
||||
"linkedCount_other": "{{count}} linked"
|
||||
},
|
||||
"attachments": {
|
||||
"updateRuntime": "Update the remote runtime to change workspace links",
|
||||
@@ -20619,8 +20809,9 @@
|
||||
},
|
||||
"compact": {
|
||||
"linkedAndUnavailable": "{{value0}} in linked worktrees · {{value1}} unavailable",
|
||||
"linkedAndScanned": "{{value0}} in linked worktrees · {{value1}} workspaces",
|
||||
"linked": "Linked"
|
||||
"linked": "Linked",
|
||||
"linkedAndScannedCount_one": "{{size}} in linked worktrees · {{count}} workspace",
|
||||
"linkedAndScannedCount_other": "{{size}} in linked worktrees · {{count}} workspaces"
|
||||
},
|
||||
"savedScan": {
|
||||
"folderDetailsUnavailable": "Folder details are not saved with past scans. Refresh to inspect this workspace."
|
||||
|
||||
@@ -1926,7 +1926,6 @@
|
||||
"ba64270bdb": "Configurar agentes",
|
||||
"ab63f25397": "Abrir configuración del agente",
|
||||
"0c5d6a479c": "[Opcional]",
|
||||
"b5a0796911": "Conectar",
|
||||
"dccd26d4e4": "Elige proyecto",
|
||||
"d6b0a96f32": "Agregar proyecto",
|
||||
"969a8bff66": "Proyecto",
|
||||
@@ -1990,7 +1989,8 @@
|
||||
"runSetupNow": "Ejecutar configuración ahora",
|
||||
"runCommandsNow": "Ejecutar comandos ahora",
|
||||
"skipForNow": "Omitir por ahora",
|
||||
"skipCommands": "Omitir comandos"
|
||||
"skipCommands": "Omitir comandos",
|
||||
"connectProject": "Conectar {{name}}"
|
||||
},
|
||||
"NewWorkspaceComposerModal": {
|
||||
"createWorktree": "Crear worktree",
|
||||
@@ -3410,21 +3410,23 @@
|
||||
},
|
||||
"drop": {
|
||||
"handler": {
|
||||
"1e072f611e": "No se pudo subir {{value0}} {{value1}}.",
|
||||
"0c77693641": "El worktree no está listo; inténtalo de nuevo en un momento.",
|
||||
"ce8248b835": "Ruta del worktree no disponible.",
|
||||
"internalTooManyPaths": "El drop contiene demasiadas rutas para pegarlas de forma segura en el terminal.",
|
||||
"internalPathsTooLarge": "La lista de rutas del drop es demasiado grande para pegarla de forma segura en el terminal.",
|
||||
"internalHostMismatch": "Arrastra archivos del mismo host que este terminal.",
|
||||
"b4cf68e889": "Se omitió {{value0}} {{value1}}.",
|
||||
"writeTimeout": "Se canceló el drop de archivos: el terminal no aceptó la ruta antes del tiempo límite de seguridad.",
|
||||
"writeRejected": "Se canceló el drop de archivos: el terminal no pudo aceptar la ruta.",
|
||||
"skippedSymlinkSingular": "Se omitió {{count}} symlink.",
|
||||
"skippedSymlinkPlural": "Se omitieron {{count}} symlinks.",
|
||||
"uploadingFileSingular": "Subiendo {{count}} archivo al host…",
|
||||
"uploadingFilePlural": "Subiendo {{count}} archivos al host…",
|
||||
"uploadingFileToRemoteSingular": "Subiendo {{count}} archivo al host remoto…",
|
||||
"uploadingFileToRemotePlural": "Subiendo {{count}} archivos al host remoto…"
|
||||
"skippedSymlinks_one": "Se omitió {{count}} enlace simbólico.",
|
||||
"skippedSymlinks_other": "Se omitieron {{count}} enlaces simbólicos.",
|
||||
"skippedItems_one": "Se omitió {{count}} elemento.",
|
||||
"skippedItems_other": "Se omitieron {{count}} elementos.",
|
||||
"failedUploads_one": "No se pudo subir {{count}} archivo.",
|
||||
"failedUploads_other": "No se pudieron subir {{count}} archivos.",
|
||||
"uploadingFiles_one": "Subiendo {{count}} archivo al entorno de ejecución…",
|
||||
"uploadingFiles_other": "Subiendo {{count}} archivos al entorno de ejecución…",
|
||||
"uploadingFilesToRemote_one": "Subiendo {{count}} archivo al host remoto…",
|
||||
"uploadingFilesToRemote_other": "Subiendo {{count}} archivos al host remoto…"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -3563,10 +3565,15 @@
|
||||
"sessionQueued": "Sesión en cola",
|
||||
"openSupportedWorkspace": "Abre un espacio de trabajo antes de reanudar una sesión.",
|
||||
"sessionHostMismatchUnsupported": "Esta sesión pertenece a un host diferente. Suéltala en un espacio de trabajo del mismo host.",
|
||||
"oldPayload": "Esta sesión se arrastró desde una ventana de Orca más antigua. Reanúdala desde el historial de sesiones."
|
||||
"oldPayload": "Esta sesión se arrastró desde una ventana de Orca más antigua. Reanúdala desde el historial de sesiones.",
|
||||
"legacyDragCannotRetarget": "Esta sesión se arrastró desde una ventana de una versión anterior de Orca, por lo que Orca no puede reasignarla a la cuenta de Codex seleccionada. Reanúdala desde el panel Historial de sesiones.",
|
||||
"legacyDragPrepareFailed": "Orca no pudo preparar esta sesión antigua de Codex. Vuelve a intentar reanudarla."
|
||||
},
|
||||
"TabGroupDropOverlay": {
|
||||
"paneColumnLabel": "Nueva división"
|
||||
},
|
||||
"useTabGroupCreationCommands": {
|
||||
"duplicateBrowserTabFailed": "El entorno de ejecución vinculado no pudo duplicar la pestaña del navegador administrado."
|
||||
}
|
||||
},
|
||||
"bar": {
|
||||
@@ -3761,6 +3768,30 @@
|
||||
"TabBarQuickCommandHostLoadStatus": {
|
||||
"82e294f3ca": "Anfitrión no disponible",
|
||||
"7c129b08ff": "Cargando host…"
|
||||
},
|
||||
"nativeChatCliFork": {
|
||||
"cannotOpenInCli": "Esta sesión no se puede abrir en la CLI."
|
||||
},
|
||||
"tabCreateEntry": {
|
||||
"fileNotFound": "Archivo no encontrado: {{path}}",
|
||||
"cannotOpenDirectory": "No se puede abrir un directorio: {{path}}",
|
||||
"parentNotDirectory": "No se puede crear el archivo porque {{path}} no es un directorio.",
|
||||
"fileNoLongerExists": "El archivo ya no existe: {{path}}",
|
||||
"noActiveWorktree": "No hay ningún worktree activo."
|
||||
},
|
||||
"tabCreateEntryPath": {
|
||||
"filePathsCannotContainControlCharacters": "Las rutas de archivo no pueden contener caracteres de control.",
|
||||
"enterAUrlOrFilePath": "Introduce una URL o una ruta de archivo.",
|
||||
"homeRelativePathsAreNotSupported": "Aquí no se admiten rutas relativas al directorio personal.",
|
||||
"enterAFilePathNotA": "Introduce una ruta de archivo, no una ruta de directorio.",
|
||||
"enterAnAbsoluteFilePath": "Introduce una ruta de archivo absoluta.",
|
||||
"enterAnAbsolutePathForThis": "Introduce una ruta absoluta de este equipo.",
|
||||
"enterARelativeFilePath": "Introduce una ruta de archivo relativa.",
|
||||
"windowsDrivePathsAreNotSupported": "Aquí no se admiten rutas de unidades de Windows.",
|
||||
"uncPathsAreNotSupportedHere": "Aquí no se admiten rutas UNC.",
|
||||
"filePathsCannotContainEmptySegments": "Las rutas de archivo no pueden contener segmentos vacíos.",
|
||||
"filePathsCannotContainDotSegments": "Las rutas de archivo no pueden contener segmentos . ni ..",
|
||||
"filePathsCannotContainTildeSegments": "Las rutas de archivo no pueden contener segmentos ~."
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -3788,15 +3819,16 @@
|
||||
"4ebf90c12e": "No se detectaron puertos externos",
|
||||
"7dac3ecc9d": "Puertos externos",
|
||||
"95495019ed": "Escaneo de puertos no disponible en {{value0}}: {{value1}}",
|
||||
"a8e4bdb412": "· {{value0}} externo",
|
||||
"c22ea609fd": "Puertos",
|
||||
"ca41be2802": "Puertos: {{value0}} espacio de trabajo {{value1}}{{value2}}",
|
||||
"b8bc3e420a": "Puertos, {{value0}} espacio de trabajo {{value1}}",
|
||||
"3a87d54dfb": "No se detectaron puertos del espacio de trabajo",
|
||||
"c174bbbfed": "Buscando puertos del espacio de trabajo...",
|
||||
"8caaa86e9a": "puertos",
|
||||
"45834a9ace": "puerto",
|
||||
"2b84c4d11f": "{{value0}} espacio de trabajo · {{value1}} externo"
|
||||
"2b84c4d11f": "{{value0}} espacio de trabajo · {{value1}} externo",
|
||||
"portsAria_one": "Puertos, {{count}} puerto del espacio de trabajo",
|
||||
"portsAria_other": "Puertos, {{count}} puertos del espacio de trabajo",
|
||||
"portsTooltipWithExternal_one": "Puertos — {{count}} puerto del espacio de trabajo · externos: {{externalCount}}",
|
||||
"portsTooltipWithExternal_other": "Puertos — {{count}} puertos del espacio de trabajo · externos: {{externalCount}}",
|
||||
"portsTooltip_one": "Puertos — {{count}} puerto del espacio de trabajo",
|
||||
"portsTooltip_other": "Puertos — {{count}} puertos del espacio de trabajo"
|
||||
},
|
||||
"ResourceUsageStatusSegment": {
|
||||
"946d9f94d0": "Cancelar",
|
||||
@@ -3805,7 +3837,6 @@
|
||||
"27a74f91f0": "No hay nada ejecutándose ahora mismo",
|
||||
"298f4be7f2": "CPU",
|
||||
"2aa2de6cb9": "Nombre",
|
||||
"30ff2c3c31": "{{value0}} huérfano",
|
||||
"1fedf94eae": "Carga de CPU combinada. Los valores superiores al 100% significan que más de un núcleo está trabajando a la vez.",
|
||||
"e7cf14ec78": "Sesiones de terminal no disponibles. La lista puede estar obsoleta.",
|
||||
"93b0de3c21": "Reiniciar",
|
||||
@@ -3833,12 +3864,13 @@
|
||||
"d406915b78": "Renderer",
|
||||
"81cd37af99": "Principal",
|
||||
"fa6d36758d": "Terminar sesión {{value0}}",
|
||||
"b8f4a2c1d0e3": "{{value0}} huérfanos",
|
||||
"c7e3b1a0d9f2": "Terminar {{value0}} terminal huérfano",
|
||||
"d8f4c2b1e0a3": "Terminar {{value0}} terminales huérfanos",
|
||||
"e9a5d3c2b1f0": "¿Terminar {{value0}}?",
|
||||
"8a0472ab54": "No se pudo contactar con {{value0}}; se desconocen sus recursos.",
|
||||
"1ea066b73f": "Actualiza {{value0}} para ver sus recursos."
|
||||
"1ea066b73f": "Actualiza {{value0}} para ver sus recursos.",
|
||||
"endOrphanTerminals_one": "Terminar {{count}} terminal huérfano",
|
||||
"endOrphanTerminals_other": "Terminar {{count}} terminales huérfanos",
|
||||
"orphanCount_one": "{{count}} huérfano",
|
||||
"orphanCount_other": "{{count}} huérfanos"
|
||||
},
|
||||
"SshStatusSegment": {
|
||||
"3ad70e0365": "Administrar hosts remotos…",
|
||||
@@ -3906,10 +3938,6 @@
|
||||
"3325d996cb": "Actualizar rate limits",
|
||||
"cd9d7b40ff": "Reiniciar {{value0}} sesiones",
|
||||
"6cd6650b4c": "Reiniciar sesión",
|
||||
"1446d0d8a0": "{{value0}} sesiones de Codex siguen en la cuenta anterior.",
|
||||
"605901a495": "1 sesión de Codex sigue en la cuenta anterior",
|
||||
"5e5f9f5160": "1 reset de rate limit disponible",
|
||||
"5ecae9197c": "{{value0}} resets de rate limit disponibles",
|
||||
"25d8bbde69": "Aplicando reset…",
|
||||
"e159fc1fd7": "Reiniciar ahora",
|
||||
"972a1ff497": "¿Restablecer límites de Codex?",
|
||||
@@ -3926,7 +3954,11 @@
|
||||
"codexSignInError": "No se pudo iniciar sesión en Codex. Inténtalo de nuevo.",
|
||||
"cursorUsageMenu": "Uso de Cursor",
|
||||
"hiddenUsageProviders": "También: {{value0}}",
|
||||
"zcodeUsageMenu": "Uso del código Z"
|
||||
"zcodeUsageMenu": "Uso del código Z",
|
||||
"rateLimitResetsAvailable_one": "{{count}} reinicio de rate limit disponible",
|
||||
"rateLimitResetsAvailable_other": "{{count}} reinicios de rate limit disponibles",
|
||||
"staleCodexSessions_one": "{{count}} sesión de Codex sigue en la cuenta anterior.",
|
||||
"staleCodexSessions_other": "{{count}} sesiones de Codex siguen en la cuenta anterior."
|
||||
},
|
||||
"StatusBarUsageEmptyCta": {
|
||||
"828c764a79": "Conectar una cuenta",
|
||||
@@ -3980,11 +4012,8 @@
|
||||
"6f8f6a6b04": "Filtrar espacios de trabajo",
|
||||
"5caccea440": "Eliminar seleccionados",
|
||||
"e4a12c455b": "Limpiar",
|
||||
"0cb1501ccf": "recuperable",
|
||||
"65402b7192": "seleccionado",
|
||||
"43171f3e60": "Espacios de trabajo",
|
||||
"09960d86bd": "escaneado",
|
||||
"63efebe0e6": "{{value0}} {{value1}} eliminado de Space.",
|
||||
"eee5240810": "Espacios de trabajo eliminados",
|
||||
"9afc97f9a3": "Espacio de trabajo eliminado",
|
||||
"792a214457": "Eliminar espacio de trabajo",
|
||||
@@ -3992,7 +4021,6 @@
|
||||
"9155381019": "Sparse",
|
||||
"f39d291997": "Seleccionar",
|
||||
"16988df079": "No se encontraron archivos.",
|
||||
"b25c2c1086": "elementos de nivel superior",
|
||||
"d3f9c69ddc": "Zoom",
|
||||
"ef890d31b9": "Todo",
|
||||
"c28643d3da": "Ir al espacio de trabajo",
|
||||
@@ -4031,8 +4059,15 @@
|
||||
"c5135e7e4a": "Escaneando tamaños de espacios de trabajo. Puedes salir de esta página.",
|
||||
"0990a63160": "Aún no hay tamaños de espacio de trabajo escaneados.",
|
||||
"977bdf9a36": "No hay elementos de nivel superior para mostrar.",
|
||||
"131662ac65": "{{value0}} abierto",
|
||||
"0d1c78d749": "Seleccione {{value0}}"
|
||||
"0d1c78d749": "Seleccione {{value0}}",
|
||||
"removedFromSpace_one": "Se quitó {{count}} espacio de trabajo de Espacio.",
|
||||
"removedFromSpace_other": "Se quitaron {{count}} espacios de trabajo de Espacio.",
|
||||
"topLevelItems_one": "{{formattedCount}} elemento de nivel superior",
|
||||
"topLevelItems_other": "{{formattedCount}} elementos de nivel superior",
|
||||
"selectedCount_one": "{{count}} seleccionado",
|
||||
"selectedCount_other": "{{count}} seleccionados",
|
||||
"reclaimableSize": "{{size}} recuperables",
|
||||
"scanning": "Escaneando"
|
||||
},
|
||||
"ports": {
|
||||
"status": {
|
||||
@@ -4046,7 +4081,8 @@
|
||||
"e4a709548c": "No se pudieron actualizar los puertos",
|
||||
"acdb6df590": "Proceso detenido en {{value0}}",
|
||||
"480d8f2347": "Copiado {{value0}}",
|
||||
"b854ec9ff5": "No se pudo abrir el navegador"
|
||||
"b854ec9ff5": "No se pudo abrir el navegador",
|
||||
"unknownProcess": "Proceso desconocido"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4063,8 +4099,6 @@
|
||||
"7ad719c4bf": "Limitado",
|
||||
"e740f92596": "Error al actualizar",
|
||||
"8418ec448d": "No se pudo actualizar el uso de {{value0}}. Es posible que las sesiones de agentes sigan iniciadas.",
|
||||
"45198c7d95": "1 reset de rate limit disponible",
|
||||
"bce421cba3": "{{value0}} resets de rate limit disponibles",
|
||||
"7ec6e030a0": "El siguiente vence ahora",
|
||||
"d1e442a9e5": "Vence ahora",
|
||||
"6cf9eaed10": "El siguiente vence en {{value0}}",
|
||||
@@ -4116,7 +4150,14 @@
|
||||
"claudeNoUsageFromHost": "Sin uso desde {{server}}",
|
||||
"claudeUnknownOnHost": "El uso de Claude no está disponible desde {{server}}. Puede que no haya una sesión iniciada allí o que use facturación por clave de API.",
|
||||
"remoteOwnerUnreachable": "Uso no disponible: no se puede acceder a {{server}}",
|
||||
"remoteOwnerNoUsage": "Uso no disponible: {{server}} no informa el uso. Actualice Orca en ese host."
|
||||
"remoteOwnerNoUsage": "Uso no disponible: {{server}} no informa el uso. Actualice Orca en ese host.",
|
||||
"justNow": "ahora mismo",
|
||||
"minutesAgo": "hace {{minutes}} min",
|
||||
"hoursAgo": "hace {{hours}} h",
|
||||
"updatedAgo": "Actualizado {{time}}",
|
||||
"notYetUpdated": "Aún no se ha actualizado",
|
||||
"rateLimitResetsAvailable_one": "{{count}} reinicio de rate limit disponible",
|
||||
"rateLimitResetsAvailable_other": "{{count}} reinicios de rate limit disponibles"
|
||||
},
|
||||
"SshTargetStatusRow": {
|
||||
"sshHost": "Host SSH"
|
||||
@@ -4159,12 +4200,12 @@
|
||||
"RemoteServerUpdateStatusSegment": {
|
||||
"updating": "Updating {{value0}}/{{value1}}",
|
||||
"updatingTooltip": "Las actualizaciones remotas del servidor Orca están en curso",
|
||||
"failed": "Fallaron {{value0}} actualizaciones de servidores",
|
||||
"failedTooltip": "Abra las actualizaciones del servidor remoto Orca para revisarlas y volver a intentarlas",
|
||||
"updated": "{{value0}} servers updated",
|
||||
"updatedTooltip": "Actualizaciones remotas del servidor Orca completadas",
|
||||
"failedOne": "1 actualización del servidor falló",
|
||||
"updatedOne": "1 server updated"
|
||||
"failedCount_one": "Falló {{count}} actualización de servidor",
|
||||
"failedCount_other": "Fallaron {{count}} actualizaciones de servidores",
|
||||
"updatedCount_one": "{{count}} servidor actualizado",
|
||||
"updatedCount_other": "{{count}} servidores actualizados"
|
||||
},
|
||||
"resource": {
|
||||
"memory": {
|
||||
@@ -4172,7 +4213,10 @@
|
||||
"workingSetDescription": "Suma del conjunto de trabajo (WS): las páginas residentes en RAM en este momento. Las páginas compartidas pueden aparecer en más de un proceso, y la memoria que Windows ha paginado a disco no se cuenta aquí.",
|
||||
"privateBytesDescription": "Suma de bytes privados: la memoria que estos procesos han confirmado, contada tanto si está residente como si está paginada a disco. Es lo que el host imputa a su límite de confirmación, así que sigue subiendo mientras el conjunto de trabajo de arriba se reduce por la paginación.",
|
||||
"footprintDescription": "Suma de la huella de memoria, la misma cifra que muestra el Monitor de Actividad: la memoria propia de cada proceso, incluida la memoria gráfica. Las páginas compartidas entre procesos no se cuentan dos veces.",
|
||||
"rssDescription": "Suma del tamaño del conjunto residente (RSS). Las páginas compartidas o con alias pueden aparecer en más de un proceso."
|
||||
"rssDescription": "Suma del tamaño del conjunto residente (RSS). Las páginas compartidas o con alias pueden aparecer en más de un proceso.",
|
||||
"memColumn": "Mem.",
|
||||
"memorySummary": "Σ Memoria",
|
||||
"privateSummary": "Σ Privada"
|
||||
}
|
||||
},
|
||||
"manager": {
|
||||
@@ -4194,38 +4238,39 @@
|
||||
"SkillUpdateStatusSegment": {
|
||||
"runningLabel": "Updating skills",
|
||||
"runningOne": "Updating {{value0}}…",
|
||||
"runningMany": "Updating {{value0}} skills…",
|
||||
"runningAria": "Actualizando habilidades. Haz clic para ver los detalles.",
|
||||
"successLabel": "Skills updated",
|
||||
"successAria": "Habilidades actualizadas. Haz clic para ver los detalles.",
|
||||
"attentionAria": "Se omitieron algunas actualizaciones de skills. Haz clic para abrir los detalles.",
|
||||
"attentionLabel": "Skills requieren atención",
|
||||
"attentionTooltip": "Se omitieron algunas actualizaciones de skills — haz clic para ver los detalles"
|
||||
"attentionTooltip": "Se omitieron algunas actualizaciones de skills — haz clic para ver los detalles",
|
||||
"runningSkills_one": "Actualizando {{count}} skill…",
|
||||
"runningSkills_other": "Actualizando {{count}} skills…"
|
||||
},
|
||||
"NativeChatResumeStatusSegment": {
|
||||
"failedLabelOne": "1 chat no pudo reanudarse",
|
||||
"failedLabel": "{{value0}} chats no pudieron reanudarse",
|
||||
"failedAriaOne": "1 chat no pudo reanudarse. Haz clic para ver los detalles.",
|
||||
"failedAria": "{{value0}} chats no pudieron reanudarse. Haz clic para ver los detalles.",
|
||||
"failedTooltip": "Chats que Orca no pudo reanudar tras el reinicio. Haz clic para ver los detalles.",
|
||||
"checkLabelOne": "1 chat por revisar",
|
||||
"checkLabel": "{{value0}} chats por revisar",
|
||||
"checkAriaOne": "1 chat por revisar tras la reanudación. Haz clic para ver los detalles.",
|
||||
"checkAria": "{{value0}} chats por revisar tras la reanudación. Haz clic para ver los detalles.",
|
||||
"checkTooltip": "Chats que Orca no pudo reanudar, o no pudo confirmar que reanudó, tras el reinicio. Haz clic para ver los detalles.",
|
||||
"resumingTooltip": "Restaurando los chats interrumpidos y pidiéndoles que continúen…",
|
||||
"labelOne": "1 chat para reanudar",
|
||||
"label": "{{value0}} chats para reanudar",
|
||||
"ariaLabelOne": "1 chat disponible para reanudar",
|
||||
"ariaLabel": "{{value0}} chats disponibles para reanudar",
|
||||
"tooltip": "Abrir chats interrumpidos disponibles para reanudar",
|
||||
"resumingProgressLabel": "Reanudando chats {{value0}}/{{value1}}",
|
||||
"resumingProgressAria": "Reanudando chats, {{value0}} de {{value1}} listos. Haz clic para ver los detalles.",
|
||||
"resumedLabelOne": "1 chat reanudado",
|
||||
"resumedLabel": "{{value0}} chats reanudados",
|
||||
"resumedAriaOne": "1 chat reanudado. Haz clic para verlo.",
|
||||
"resumedAria": "{{value0}} chats reanudados. Haz clic para verlos.",
|
||||
"resumedTooltip": "Chats que Orca reanudó tras el reinicio. Haz clic para verlos."
|
||||
"resumedTooltip": "Chats que Orca reanudó tras el reinicio. Haz clic para verlos.",
|
||||
"chatsFailedLabel_one": "No se pudo reanudar {{count}} chat",
|
||||
"chatsFailedLabel_other": "No se pudieron reanudar {{count}} chats",
|
||||
"chatsFailedAria_one": "No se pudo reanudar {{count}} chat. Haz clic para ver los detalles.",
|
||||
"chatsFailedAria_other": "No se pudieron reanudar {{count}} chats. Haz clic para ver los detalles.",
|
||||
"resumedLabelCount_one": "{{count}} chat reanudado",
|
||||
"resumedLabelCount_other": "{{count}} chats reanudados",
|
||||
"resumedAriaCount_one": "{{count}} chat reanudado. Haz clic para verlo.",
|
||||
"resumedAriaCount_other": "{{count}} chats reanudados. Haz clic para verlos.",
|
||||
"checkLabelCount_one": "{{count}} chat por revisar",
|
||||
"checkLabelCount_other": "{{count}} chats por revisar",
|
||||
"checkAriaCount_one": "{{count}} chat por revisar tras reanudarlo. Haz clic para ver los detalles.",
|
||||
"checkAriaCount_other": "{{count}} chats por revisar tras reanudarlos. Haz clic para ver los detalles.",
|
||||
"labelCount_one": "{{count}} chat por reanudar",
|
||||
"labelCount_other": "{{count}} chats por reanudar",
|
||||
"ariaLabelCount_one": "{{count}} chat disponible para reanudar",
|
||||
"ariaLabelCount_other": "{{count}} chats disponibles para reanudar"
|
||||
},
|
||||
"RuntimeHostStatusRow": {
|
||||
"previous_connection_closed": "La conexión anterior cerrada.",
|
||||
@@ -4256,6 +4301,81 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"mergeSnapshotAndSessions": {
|
||||
"unattributed": "Sin asignar"
|
||||
},
|
||||
"resourceSessionLabels": {
|
||||
"terminalNumber": "Terminal {{number}}",
|
||||
"pid": "PID {{pid}}",
|
||||
"sessionPrefix": "sesión {{id}}",
|
||||
"unknownSession": "(sesión desconocida)",
|
||||
"unknown": "desconocido"
|
||||
},
|
||||
"runtimeTargets": {
|
||||
"wslDefault": "WSL predeterminado"
|
||||
},
|
||||
"floatingWorkspace": {
|
||||
"minimize": "Minimizar espacio de trabajo flotante",
|
||||
"show": "Mostrar espacio de trabajo flotante"
|
||||
},
|
||||
"workspaceSpaceGitRefresh": {
|
||||
"ownerUnavailable": "El propietario del espacio de trabajo ya no está disponible"
|
||||
},
|
||||
"workspaceSpaceDecision": {
|
||||
"syncedWithUpstream": "Sincronizado con upstream",
|
||||
"aheadAndBehind": "{{ahead}} por delante, {{behind}} por detrás",
|
||||
"ahead": "{{ahead}} por delante",
|
||||
"behind": "{{behind}} por detrás",
|
||||
"activeAgents_one": "{{count}} agente activo",
|
||||
"activeAgents_other": "{{count}} agentes activos",
|
||||
"completedAgents_one": "{{count}} agente completado",
|
||||
"completedAgents_other": "{{count}} agentes completados",
|
||||
"activeAndCompletedAgents": "{{active}}, {{completed}}",
|
||||
"completedAgentsRetained_one": "{{count}} agente completado conservado",
|
||||
"completedAgentsRetained_other": "{{count}} agentes completados conservados",
|
||||
"noTrackedAgents": "No hay agentes registrados en ejecución",
|
||||
"noTerminalTabs": "No hay pestañas de terminal",
|
||||
"liveTerminalTabs_one": "{{live}} en ejecución de {{count}} pestaña de terminal",
|
||||
"liveTerminalTabs_other": "{{live}} en ejecución de {{count}} pestañas de terminal",
|
||||
"gitStatusUnavailable": "Estado de Git no disponible: {{error}}",
|
||||
"gitStatusNotLoaded": "El estado de Git aún no se ha cargado",
|
||||
"noUncommittedFiles": "No hay archivos con cambios sin commit",
|
||||
"changedFiles_one": "{{count}} archivo modificado",
|
||||
"changedFiles_other": "{{count}} archivos modificados",
|
||||
"noEditorFiles": "No hay archivos abiertos en el editor",
|
||||
"editorFilesOpen_one": "{{count}} archivo abierto en el editor",
|
||||
"editorFilesOpen_other": "{{count}} archivos abiertos en el editor",
|
||||
"dirtyOfOpen": "{{dirty}} de {{open}}",
|
||||
"dirtyEditorBuffers_one": "{{count}} búfer del editor sin guardar",
|
||||
"dirtyEditorBuffers_other": "{{count}} búferes del editor sin guardar",
|
||||
"openFiles_one": "{{count}} archivo abierto",
|
||||
"openFiles_other": "{{count}} archivos abiertos",
|
||||
"activeWorkspace": "Este es el espacio de trabajo activo",
|
||||
"mainWorktreeProtected": "El worktree principal está protegido",
|
||||
"workspaceProtected": "El espacio de trabajo está protegido",
|
||||
"canDeleteAfterReview": "Se puede eliminar tras revisarlo",
|
||||
"noLinkedIssue": "No hay ninguna incidencia vinculada",
|
||||
"noLinkedReview": "No hay ningún PR vinculado",
|
||||
"browserTabsOpen_one": "{{count}} pestaña del navegador abierta",
|
||||
"browserTabsOpen_other": "{{count}} pestañas del navegador abiertas"
|
||||
},
|
||||
"workspaceSpaceFormat": {
|
||||
"cancellingScan": "Cancelando escaneo",
|
||||
"currentWorkspaces": "espacios de trabajo",
|
||||
"scanningWorkspaces": "Escaneando {{scanned}} de {{total}} · {{current}}",
|
||||
"scanningRepos_one": "Escaneando {{scanned}} de {{count}} repositorio · {{current}}",
|
||||
"scanningRepos_other": "Escaneando {{scanned}} de {{count}} repositorios · {{current}}",
|
||||
"scanningSizes": "Escaneando tamaños de los espacios de trabajo",
|
||||
"status": {
|
||||
"scanned": "Escaneado",
|
||||
"missing": "No encontrado",
|
||||
"noAccess": "Sin acceso",
|
||||
"unavailable": "No disponible",
|
||||
"failed": "Falló"
|
||||
},
|
||||
"mainWorktree": "worktree principal",
|
||||
"detached": "desacoplado"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -5033,12 +5153,10 @@
|
||||
"670864ab52": "Manteniendo {{value0}} local actualizado",
|
||||
"84c62e4d7f": "No se pudo activar {{value0}}",
|
||||
"442552c656": "Abre Ajustes e inténtalo de nuevo.",
|
||||
"f15fd80989": "Tu nuevo worktree está actualizado, pero {{value0}} local está {{value1}} {{value2}} atrás, así que los diffs de IA pueden compararse con historial obsoleto. Deja que Orca lo mantenga actualizado automáticamente. Puedes cambiar esto en cualquier momento en",
|
||||
"3d260e1a5d": "Ajustes › {{value0}}",
|
||||
"34a03a6565": "Mantener {{value0}} actualizado",
|
||||
"4a18052018": "{{value0}} local está detrás de {{value1}}",
|
||||
"commit": "commit",
|
||||
"commits": "commits"
|
||||
"staleLocalBranch_one": "Tu nuevo worktree está actualizado, pero la rama local {{branch}} está {{count}} commit por detrás, por lo que las diferencias generadas por IA pueden compararse con un historial desactualizado. Deja que Orca la mantenga actualizada automáticamente. Puedes cambiarlo cuando quieras en <settings>Ajustes › {{setting}}</settings>",
|
||||
"staleLocalBranch_other": "Tu nuevo worktree está actualizado, pero la rama local {{branch}} está {{count}} commits por detrás, por lo que las diferencias generadas por IA pueden compararse con un historial desactualizado. Deja que Orca la mantenga actualizada automáticamente. Puedes cambiarlo cuando quieras en <settings>Ajustes › {{setting}}</settings>"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -5077,12 +5195,11 @@
|
||||
"39d51212cc": "Nombre del grupo",
|
||||
"aa0247680d": "No, importar por separado",
|
||||
"a0bc4d1f8e": "Sí, importar como grupo",
|
||||
"8401a7a0d0": "1 repositorio",
|
||||
"d4f1df62ef": "{{value0}} repositorios",
|
||||
"b4263a2ac4": "Se encontró {{value0}} en {{value1}}.",
|
||||
"24eda6c8b2": "Escaneando... {{value0}}",
|
||||
"6149d5203f": "No hay repositorios seleccionados. Abre la carpeta principal para usar el editor, la terminal y la búsqueda sin funciones de Git.",
|
||||
"e52454b7f6": "Abrir como carpeta"
|
||||
"e52454b7f6": "Abrir como carpeta",
|
||||
"foundRepositories_one": "Se encontró {{count}} repositorio en {{path}}.",
|
||||
"foundRepositories_other": "Se encontraron {{count}} repositorios en {{path}}."
|
||||
},
|
||||
"AddRepoRemoteStep": {
|
||||
"6680289908": "/inicio/usuario/proyecto",
|
||||
@@ -5151,9 +5268,8 @@
|
||||
"eab8b45238": "Error al copiar",
|
||||
"a23b22d16f": "Copiado",
|
||||
"74fc00776f": "Detalles del error",
|
||||
"3afcad0497": "desde el primer mensaje del agente.",
|
||||
"ff62a18580": "Orca no pudo generar un nombre de rama para",
|
||||
"ca3b225195": "Error en el nombre automático de rama"
|
||||
"ca3b225195": "Error en el nombre automático de rama",
|
||||
"couldNotGenerateBranchName": "Orca no pudo generar un nombre de rama para <name>{{name}}</name> a partir del primer mensaje del agente."
|
||||
},
|
||||
"CreateProjectLocationField": {
|
||||
"95548e33bf": "Elige carpeta padre...",
|
||||
@@ -5173,37 +5289,38 @@
|
||||
"2b56b35f53": "Puedes cambiar esto en Ajustes.",
|
||||
"dd3a45bbbd": "Omitiremos esta confirmación la próxima vez.",
|
||||
"fc23c4cbdf": "Eliminar espacio de trabajo",
|
||||
"86f0ae1257": "Eliminar espacios de trabajo"
|
||||
"86f0ae1257": "Eliminar espacios de trabajo",
|
||||
"removeFolderProjectInstead": "Quita el proyecto de carpeta en lugar de eliminar este espacio de trabajo.",
|
||||
"gitBlocksMainWorktree": "Git no permite quitar el worktree principal."
|
||||
},
|
||||
"DeleteWorktreeDirtyChangeHint": {
|
||||
"showLoadedPaths": "Mostrar rutas cargadas",
|
||||
"loadedPathsNotice": "Las rutas cargadas pueden estar incompletas o desactualizadas.",
|
||||
"loadedChangedPaths": "Rutas modificadas cargadas",
|
||||
"unresolvedConflict": "Conflicto sin resolver",
|
||||
"moreLoadedPaths": "y {{value0}} rutas cargadas más",
|
||||
"changeCount_one": "{{count}} cambio sin confirmar o sin seguimiento",
|
||||
"changeCount_other": "{{count}} cambios sin confirmar o sin seguimiento",
|
||||
"changes": "Cambios sin confirmar o sin seguimiento"
|
||||
"changes": "Cambios sin confirmar o sin seguimiento",
|
||||
"moreLoadedPaths_one": "y {{count}} ruta cargada más",
|
||||
"moreLoadedPaths_other": "y {{count}} rutas cargadas más"
|
||||
},
|
||||
"DeleteWorktreeLineageNotice": {
|
||||
"ad407c2d55": "más",
|
||||
"a940f3c96e": "Se eliminarán los espacios de trabajo secundarios",
|
||||
"29b98bf9cd": "Al eliminar este espacio de trabajo, también se eliminan {{value0}} espacios de trabajo secundarios.",
|
||||
"66798cc6a2": "Al eliminar este espacio de trabajo, también se elimina 1 espacio de trabajo secundario."
|
||||
"alsoDeletesChildren_one": "Al eliminar este espacio de trabajo también se elimina {{count}} espacio de trabajo secundario.",
|
||||
"alsoDeletesChildren_other": "Al eliminar este espacio de trabajo también se eliminan {{count}} espacios de trabajo secundarios.",
|
||||
"moreChildren_one": "+{{count}} más",
|
||||
"moreChildren_other": "+{{count}} más"
|
||||
},
|
||||
"DeleteWorktreeSkipConfirmOption": {
|
||||
"29aefb7e52": "No volver a preguntar"
|
||||
},
|
||||
"DeleteWorktreeWarningPanels": {
|
||||
"026738155a": "(el directorio de clonación original).",
|
||||
"c4f96a6e18": "worktree principal",
|
||||
"e3be9eba15": "Este es el"
|
||||
"mainWorktreeNotice": "Este es el <strong>worktree principal</strong> (el directorio de clonación original)."
|
||||
},
|
||||
"ImportedWorktreesVisibilityLine": {
|
||||
"b7a87dc32f": "Mostrar en la lista de worktrees",
|
||||
"ad99f4eea9": "Mantener oculto",
|
||||
"9f4f14e821": "Cambia esto más tarde desde el menú del proyecto.",
|
||||
"b2bc47c080": "más ubicaciones",
|
||||
"b47ba1a9d2": "Vista previa de {{value0}}",
|
||||
"2251d41ebb": "Grupos de worktrees ocultos",
|
||||
"5a9688802a": "Mostrar {{value0}} más",
|
||||
@@ -5217,7 +5334,9 @@
|
||||
"keepHiddenAriaLabel_one": "Mantener oculto {{count}} worktree detectado de {{repo}}; recupéralo desde el menú del proyecto",
|
||||
"keepHiddenAriaLabel_other": "Mantener ocultos {{count}} worktrees detectados de {{repo}}; recupéralos desde el menú del proyecto",
|
||||
"keepHiddenTooltip": "Mantener oculto: recupéralo desde el menú del proyecto",
|
||||
"repoOnHost": "{{repo}} en {{host}}"
|
||||
"repoOnHost": "{{repo}} en {{host}}",
|
||||
"moreLocations_one": "+ {{count}} ubicación más",
|
||||
"moreLocations_other": "+ {{count}} ubicaciones más"
|
||||
},
|
||||
"NonGitFolderDialog": {
|
||||
"e52454b7f6": "Abrir como carpeta",
|
||||
@@ -5251,20 +5370,24 @@
|
||||
},
|
||||
"ProjectGroupDeleteDialog": {
|
||||
"ca65b78f78": "Cancelar",
|
||||
"69f5cb97d0": "Eliminar",
|
||||
"591f330288": "Eliminar grupo de proyectos",
|
||||
"2c14ce677a": "Eliminando...",
|
||||
"0e0e6764af": "Proyectos contenidos",
|
||||
"ad407c2d55": "más",
|
||||
"removeContainedProjectSingular": "Quitar 1 proyecto contenido",
|
||||
"removeContainedProjectPlural": "Quitar {{value0}} proyectos contenidos",
|
||||
"55f75628c0": "Las carpetas de los proyectos en el disco no se eliminan.",
|
||||
"fec7e9c8ae": "Eliminar grupo"
|
||||
"fec7e9c8ae": "Eliminar grupo",
|
||||
"removeContainedProjects_one": "Quitar {{count}} proyecto del grupo",
|
||||
"removeContainedProjects_other": "Quitar {{count}} proyectos del grupo",
|
||||
"deleteGroupDescription": "Eliminar <name>{{name}}</name>.",
|
||||
"moreProjects_one": "+{{count}} más",
|
||||
"moreProjects_other": "+{{count}} más"
|
||||
},
|
||||
"ProjectGroupNameDialog": {
|
||||
"d99a034073": "Cancelar",
|
||||
"83dfbc5313": "Nombre del grupo",
|
||||
"4a64e78822": "Guardando..."
|
||||
"4a64e78822": "Guardando...",
|
||||
"defaultGroupName": "Grupo {{name}}",
|
||||
"create": "Crear",
|
||||
"rename": "Renombrar"
|
||||
},
|
||||
"RemoteFileBrowser": {
|
||||
"2300612806": "Escribe para filtrar o introducir una ruta...",
|
||||
@@ -5276,7 +5399,9 @@
|
||||
"largeInputNoMatches": "No hay coincidencias para esta entrada larga",
|
||||
"entriesLabel": "Entradas de la carpeta",
|
||||
"inputLabel": "Filtro o ruta",
|
||||
"fileHint": "Los archivos no se pueden abrir como proyecto"
|
||||
"fileHint": "Los archivos no se pueden abrir como proyecto",
|
||||
"invalidPathRepeatedSeparators": "Ruta no válida: separadores repetidos",
|
||||
"invalidPathControlCharacters": "Ruta no válida: no se permiten caracteres de control"
|
||||
},
|
||||
"SleepTwinWorkspaceDialog": {
|
||||
"title": "Sleep Workspace",
|
||||
@@ -5306,11 +5431,10 @@
|
||||
"70715947fb": "El script de configuración no puede estar vacío",
|
||||
"888b83bf78": "No se pudo guardar el script de configuración",
|
||||
"a49196d538": "Se ejecuta cuando Orca crea un nuevo worktree.",
|
||||
"d9f2db2738": "ajustes del proyecto",
|
||||
"a5bb8c5135": "Guardado en este",
|
||||
"savedSetupCommand": "Se guardó el comando de configuración.",
|
||||
"savedWithSkippedFields_one": "Se omitió {{count}} campo no compatible. Se guardó el comando de configuración.",
|
||||
"savedWithSkippedFields_other": "Se omitieron {{count}} campos no compatibles. Se guardó el comando de configuración."
|
||||
"savedWithSkippedFields_other": "Se omitieron {{count}} campos no compatibles. Se guardó el comando de configuración.",
|
||||
"savedInProjectSettings": "Guardado en los <settings>ajustes de este proyecto</settings>"
|
||||
},
|
||||
"SetupScriptPromptCardViews": {
|
||||
"96a7f4198c": "Guardar configuración local",
|
||||
@@ -5318,20 +5442,17 @@
|
||||
"31b8b01a45": "Ajustes",
|
||||
"4a98f907ae": "Reintentar",
|
||||
"0a98169776": "Agrega un comando de setup para ejecutar cuando Orca cree nuevos worktrees.",
|
||||
"8349e3fa4c": ". Guárdalo para ejecutarlo en nuevos worktrees.",
|
||||
"b56d1322f7": "Se encontró un comando de setup en",
|
||||
"aef6c0a213": "Guarda el comando detectado para ejecutarlo cada vez que Orca cree un worktree.",
|
||||
"660cdc17f8": "scripts de setup. Agrega un comando local o cambia la fuente en Ajustes.",
|
||||
"8f6be51aa1": "orca.yaml",
|
||||
"bb879db364": "Este repositorio ignora lo compartido",
|
||||
"0155fb9ed3": "No se pudo verificar el script de configuración de este repositorio en este momento.",
|
||||
"eefa756190": "Configurar manualmente",
|
||||
"ca4efcbc25": "Guardar",
|
||||
"d02e6a42b1": "Detectado desde",
|
||||
"fdbc6cb064": "Script de setup detectado",
|
||||
"7275f674cc": "Setup detectado",
|
||||
"822ff300ad": "Descartar",
|
||||
"5bfd5c8779": "Descartar scripts de configuración"
|
||||
"5bfd5c8779": "Descartar scripts de configuración",
|
||||
"detectedFromSource": "Detectado en <source>{{source}}</source>",
|
||||
"ignoresSharedSetup": "Este repositorio ignora los scripts de configuración compartidos de <yaml>orca.yaml</yaml>. Añade un comando local o cambia la fuente en Ajustes.",
|
||||
"foundSetupCommandIn": "Se encontró un comando de configuración en <source>{{source}}</source>. Guárdalo para ejecutarlo en los nuevos worktrees."
|
||||
},
|
||||
"SidebarFeedbackDialog": {
|
||||
"8bf619e4cf": "Cancelar",
|
||||
@@ -5508,8 +5629,9 @@
|
||||
"WorkspaceKanbanDrawerHeader": {
|
||||
"f369f5c5a3": "Cerrar",
|
||||
"e1a34450fc": "Organiza espacios de trabajo por estado y abre tarjetas de espacios de trabajo.",
|
||||
"81870af08f": "seleccionado",
|
||||
"c6a77ab0f4": "Tablero de espacios de trabajo"
|
||||
"c6a77ab0f4": "Tablero de espacios de trabajo",
|
||||
"selectedCount_one": "{{count}} seleccionado",
|
||||
"selectedCount_other": "{{count}} seleccionados"
|
||||
},
|
||||
"WorkspaceKanbanPinDropTarget": {
|
||||
"c30151c5ee": "Suelta aquí para fijar sin cambiar el estado.",
|
||||
@@ -5610,7 +5732,8 @@
|
||||
"2931b42b09": "Estado: Borrador {{value0}}",
|
||||
"e888362def": "Estado: Cerrado",
|
||||
"f394b3e86e": "Estado: merged",
|
||||
"af2b07bda5": "Estado: {{value0}}"
|
||||
"af2b07bda5": "Estado: {{value0}}",
|
||||
"checksStatus": "Comprobaciones: {{status}}"
|
||||
},
|
||||
"WorktreeCardPorts": {
|
||||
"3240f320d7": "Puertos en vivo",
|
||||
@@ -5621,8 +5744,9 @@
|
||||
"5d1a5d51bb": "Proceso detenido en {{value0}}",
|
||||
"c89f290e25": "Copiado {{value0}}",
|
||||
"d1113f4660": "No se pudo abrir el navegador",
|
||||
"fed49903c9": "{{value0}} en vivo {{value1}}",
|
||||
"unknownProcess": "Proceso desconocido"
|
||||
"unknownProcess": "Proceso desconocido",
|
||||
"livePorts_one": "{{count}} puerto activo",
|
||||
"livePorts_other": "{{count}} puertos activos"
|
||||
},
|
||||
"WorktreeContextMenu": {
|
||||
"c39c37676a": "Crea un grupo y mueve este proyecto a él.",
|
||||
@@ -5664,7 +5788,6 @@
|
||||
"f9dc6cc5d3": "Cambiar nombre del grupo de proyectos",
|
||||
"370c6a55dd": "Limpiar filtros",
|
||||
"b7acbf038b": "No se encontraron espacios de trabajo",
|
||||
"0c6ee14f23": "hijo",
|
||||
"c83968f87f": "Eliminar proyecto",
|
||||
"64e55f7f01": "Quitar del grupo",
|
||||
"4a08fb55f2": "Mover al grupo",
|
||||
@@ -5677,12 +5800,7 @@
|
||||
"4d7b73658c": "Cambiar nombre de grupo",
|
||||
"79465e9034": "Acciones del grupo para {{value0}}",
|
||||
"bfbedc547b": "Worktrees",
|
||||
"045a8aed48": "hijos",
|
||||
"bb85cd86ba": "Crear espacio de trabajo para {{value0}}",
|
||||
"20bebf9c7f": "Mostrar {{value0}} espacio de trabajo secundario",
|
||||
"c1f4a31623": "Mostrar {{value0}} espacios de trabajo secundarios",
|
||||
"e97297cb75": "Ocultar {{value0}} espacio de trabajo secundario",
|
||||
"0cd15956d4": "Ocultar {{value0}} espacios de trabajo secundarios",
|
||||
"bd37a57ac8": "Crear espacio de trabajo para {{value0}}",
|
||||
"b667b59632": "Algunos proyectos no se pudieron eliminar de Orca",
|
||||
"groupDeleteFailed": "No se pudo eliminar el grupo",
|
||||
@@ -5696,8 +5814,14 @@
|
||||
"groupRenameFailed": "No se pudo cambiar el nombre del grupo",
|
||||
"groupRenameFailedDesc": "Orca no pudo confirmar el nuevo nombre con el anfitrión del grupo. Vuelva a verificar el grupo después de volver a conectarse.",
|
||||
"hostRepairRequired": "Re-pair required",
|
||||
"groupProjectsRemainedSingular": "{{remaining}} de {{count}} proyecto contenido permaneció tras eliminar el grupo.",
|
||||
"groupProjectsRemainedPlural": "Proyectos contenidos que permanecieron tras eliminar el grupo: {{remaining}} de {{count}}."
|
||||
"showChildWorkspaces_one": "Mostrar {{count}} espacio de trabajo secundario",
|
||||
"hideChildWorkspaces_one": "Ocultar {{count}} espacio de trabajo secundario",
|
||||
"showChildWorkspaces_other": "Mostrar {{count}} espacios de trabajo secundarios",
|
||||
"hideChildWorkspaces_other": "Ocultar {{count}} espacios de trabajo secundarios",
|
||||
"childCount_one": "{{count}} secundario",
|
||||
"childCount_other": "{{count}} secundarios",
|
||||
"groupProjectsRemained_one": "Proyectos del grupo que quedan tras eliminarlo: {{remaining}} de {{count}}.",
|
||||
"groupProjectsRemained_other": "Proyectos del grupo que quedan tras eliminarlo: {{remaining}} de {{count}}."
|
||||
},
|
||||
"WorktreeMetaDialog": {
|
||||
"3db0a2a593": "Cancelar",
|
||||
@@ -5761,7 +5885,6 @@
|
||||
"d40d436fc2": "No se pudo actualizar la visibilidad de los worktrees. Inténtalo de nuevo.",
|
||||
"unsupportedHost": "Este host no admite la visibilidad de worktrees específica de cada fuente. Actualiza Orca en el host para cambiar esta opción.",
|
||||
"search": "Buscar worktrees ocultos",
|
||||
"searchPlaceholder": "Buscar en {{value0}} worktrees…",
|
||||
"noMatches": "No hay worktrees coincidentes",
|
||||
"allShown": "Todos los worktrees detectados se muestran",
|
||||
"noneFound": "No se encontraron worktrees ajenos a Orca",
|
||||
@@ -5769,7 +5892,9 @@
|
||||
"disableSource": "Desactiva una fuente para gestionar sus worktrees individualmente.",
|
||||
"appearWhenDetected": "Los worktrees nuevos aparecerán aquí cuando Orca los detecte.",
|
||||
"openGlobalSettings": "Gestionar en Ajustes globales",
|
||||
"globalSettingsSources": "Estas fuentes tienen una configuración global que puedes anular aquí:"
|
||||
"globalSettingsSources": "Estas fuentes tienen una configuración global que puedes anular aquí:",
|
||||
"searchHiddenPlaceholder_one": "Buscar en {{count}} worktree…",
|
||||
"searchHiddenPlaceholder_other": "Buscar en {{count}} worktrees…"
|
||||
},
|
||||
"WorktreeVisibilitySourceList": {
|
||||
"claude": "Claude Code",
|
||||
@@ -6039,13 +6164,13 @@
|
||||
"7a8b9c0d1e": "Abrir ajustes",
|
||||
"8b9c0d1e2f": "Quitar host",
|
||||
"workspacesFailed": "No se pudieron eliminar {{count}} espacios de trabajo de este anfitrión. El anfitrión se conservó para que pueda reintentar.",
|
||||
"oneWorkspace": "1 espacio de trabajo",
|
||||
"manyWorkspaces": "{{count}} espacios de trabajo",
|
||||
"hostHasWorkspacesDefault": "Elimina {{value0}} y sus credenciales de esta computadora. Sus {{value1}} permanecen en Orca — los archivos remotos no se tocan.",
|
||||
"alsoForgetLocal": "También eliminar estos {{value0}} de Orca",
|
||||
"advanced": "Avanzado",
|
||||
"alsoForgetLocalHint": "Solo limpia de Orca. Los archivos, espacios de trabajo y ramas remotas permanecen intactos.",
|
||||
"wslHostEndsTerminalsUnlessShared": "Quita {{value0}} de Orca. Salvo que otro Orca abierto en este equipo lo esté usando, también cierra sus terminales abiertas y detiene el servidor de Orca en esa distro. Los archivos de la distro no se tocan."
|
||||
"wslHostEndsTerminalsUnlessShared": "Quita {{value0}} de Orca. Salvo que otro Orca abierto en este equipo lo esté usando, también cierra sus terminales abiertas y detiene el servidor de Orca en esa distro. Los archivos de la distro no se tocan.",
|
||||
"hostKeepsWorkspaces_one": "Quita {{host}} y sus credenciales de este equipo. Su {{count}} espacio de trabajo permanece en Orca — los archivos remotos no se modifican.",
|
||||
"hostKeepsWorkspaces_other": "Quita {{host}} y sus credenciales de este equipo. Sus {{count}} espacios de trabajo permanecen en Orca — los archivos remotos no se modifican.",
|
||||
"alsoRemoveWorkspaces_one": "Quitar también este espacio de trabajo de Orca",
|
||||
"alsoRemoveWorkspaces_other": "Quitar también estos {{count}} espacios de trabajo de Orca"
|
||||
},
|
||||
"HostRenameDialog": {
|
||||
"1a2b3c4d5e": "Renombrar host",
|
||||
@@ -6089,7 +6214,7 @@
|
||||
"current": "Actual",
|
||||
"searchPlaceholder": "Buscar worktrees...",
|
||||
"empty": "No hay worktrees elegibles que coincidan.",
|
||||
"setParentFor": "Establecer padre para"
|
||||
"setParentForName": "Establecer el espacio de trabajo superior de <name>{{name}}</name>"
|
||||
},
|
||||
"WorktreeCardStatusSlot": {
|
||||
"branchIdentity": "Rama",
|
||||
@@ -6100,11 +6225,11 @@
|
||||
"NewExternalWorktreesInboxLine": {
|
||||
"9f2d4c8b17": "Ocultar worktrees externos permanentemente para {{value0}}",
|
||||
"c3e8a1f4b2": "No volver a mostrar",
|
||||
"2a6f31d8c7": "árbol de trabajo oculto",
|
||||
"5b90e4a2f6": "árboles de trabajo ocultos",
|
||||
"7f18c5b0d3": "Revisar el árbol de trabajo oculto {{value0}} en {{value1}}",
|
||||
"4e2b7a9c05": "Revisar {{value0}} árboles de trabajo ocultos en {{value1}}",
|
||||
"6c07f3a91e": "{{value0}} en {{value1}}"
|
||||
"6c07f3a91e": "{{value0}} en {{value1}}",
|
||||
"hiddenWorktreesNoun_one": "worktree oculto",
|
||||
"hiddenWorktreesNoun_other": "worktrees ocultos",
|
||||
"reviewHiddenWorktrees_one": "Revisar {{count}} worktree oculto en {{scope}}",
|
||||
"reviewHiddenWorktrees_other": "Revisar {{count}} worktrees ocultos en {{scope}}"
|
||||
},
|
||||
"NoticeHostGlyph": {
|
||||
"hostDisconnected": "{{hostName}} está desconectado",
|
||||
@@ -6195,8 +6320,9 @@
|
||||
"sshConfigPickerRetry": "Probar de nuevo",
|
||||
"sshConfigPickerResolving": "Lectura…",
|
||||
"pairingHelpShareComputer": "Créalo en Ajustes → Servidores remotos de Orca → Compartir este equipo en el otro equipo.",
|
||||
"sshImportSyncedPlural": "Se agregaron {{count}} hosts a Orca.",
|
||||
"sshImportSyncedSingular": "Se agregó {{count}} host a Orca."
|
||||
"sshImportSynced_one": "Se añadió {{count}} host a Orca.",
|
||||
"sshImportSynced_other": "Se añadieron {{count}} hosts a Orca.",
|
||||
"sshConfigPickerInvalidResponse": "Respuesta de host no válida de la configuración SSH"
|
||||
},
|
||||
"ForgetSshWorkspaceDialog": {
|
||||
"ghostBody": "{{host}} ya no es un host SSH guardado, por lo que este espacio de trabajo ya no está conectado a un host activo. Solo se puede eliminar de Orca — los archivos y ramas en el remoto permanecen intactos.",
|
||||
@@ -6219,11 +6345,12 @@
|
||||
},
|
||||
"WorkspaceKanbanSearchField": {
|
||||
"bdb753c78d": "Ningún espacio de trabajo coincide",
|
||||
"4d96c209d6": "{{value0}} de {{value1}} espacios de trabajo coinciden",
|
||||
"c0cd6bdf6c": "Buscar espacios de trabajo",
|
||||
"3b7ea51793": "Borrar búsqueda",
|
||||
"7f1c2e94a5": "El texto de búsqueda es demasiado largo: el tablero no está filtrado",
|
||||
"9a4d0f6b21": "Demasiado largo"
|
||||
"9a4d0f6b21": "Demasiado largo",
|
||||
"workspacesMatch_one": "Espacios de trabajo que coinciden: {{matchCount}} de {{count}}",
|
||||
"workspacesMatch_other": "Espacios de trabajo que coinciden: {{matchCount}} de {{count}}"
|
||||
},
|
||||
"LocalGitToolchainScanBanner": {
|
||||
"xcodeLicenseTitle": "Acepta la licencia de Xcode para usar Git",
|
||||
@@ -6231,11 +6358,12 @@
|
||||
"developerToolsTitle": "Instala las herramientas de línea de comandos de Apple",
|
||||
"developerToolsBody": "Git necesita las herramientas de desarrollo de Apple. Ejecuta esto en la terminal y vuelve a Orca. Lo comprobará de nuevo automáticamente.",
|
||||
"affectedOne": "Escaneo de worktrees en pausa para {{value0}}",
|
||||
"affectedMany": "Escaneo de worktrees en pausa para {{value0}} proyectos",
|
||||
"copyCommand": "Copiar comando",
|
||||
"copied": "Comando copiado",
|
||||
"retry": "Reintentar ahora",
|
||||
"restored": "Git funciona de nuevo. Worktrees actualizados."
|
||||
"restored": "Git funciona de nuevo. Worktrees actualizados.",
|
||||
"affectedProjects_one": "Escaneo de worktrees pausado para {{count}} proyecto",
|
||||
"affectedProjects_other": "Escaneo de worktrees pausado para {{count}} proyectos"
|
||||
},
|
||||
"WorktreeCardSshHostControl": {
|
||||
"connectFailed": "La conexión SSH falló",
|
||||
@@ -6344,7 +6472,8 @@
|
||||
"wslHostRemoval": {
|
||||
"keptForOthers": "Se quitó de este Orca. El host sigue en marcha para {{value0}}.",
|
||||
"partial": "Se quitó el host, pero algo en la distro sigue en ejecución: {{value0}}",
|
||||
"pending": "Orca aún no eliminó el host: {{value0}} Vuelve a eliminarlo para reintentarlo o conéctalo para conservarlo."
|
||||
"pending": "Orca aún no eliminó el host: {{value0}} Vuelve a eliminarlo para reintentarlo o conéctalo para conservarlo.",
|
||||
"unavailable": "Los hosts WSL no están disponibles en este equipo."
|
||||
},
|
||||
"addRepoWslHostFolderPicker": {
|
||||
"otherDistro": "Esa carpeta está en {{value0}}, no en {{value1}}.",
|
||||
@@ -6399,6 +6528,42 @@
|
||||
"openingProject": "Abriendo proyecto...",
|
||||
"openingFolder": "Abriendo carpeta...",
|
||||
"chooseFolder": "Elige una carpeta..."
|
||||
},
|
||||
"DeleteNestedWorktreesDialog": {
|
||||
"unsupportedHost": "Este host no admite la eliminación de worktrees anidados."
|
||||
},
|
||||
"WorktreeCardHelpers": {
|
||||
"checksPassing": "Correctas",
|
||||
"checksFailing": "Con errores",
|
||||
"checksPending": "Pendientes",
|
||||
"conflictMerging": "Fusionando",
|
||||
"conflictRebasing": "Aplicando rebase",
|
||||
"conflictCherryPicking": "Aplicando cherry-pick"
|
||||
},
|
||||
"folderWorkspaceComposer": {
|
||||
"defaultWorkspaceName": "Espacio de trabajo {{name}}"
|
||||
},
|
||||
"workspaceKanbanStatus": {
|
||||
"defaultLabel": "Estado {{number}}"
|
||||
},
|
||||
"worktreeCardModel": {
|
||||
"sparsePreviewMore_one": "{{preview}}, +{{count}} más",
|
||||
"sparsePreviewMore_other": "{{preview}}, +{{count}} más"
|
||||
},
|
||||
"worktreeCardPrDisplay": {
|
||||
"mrDetailsUnavailable": "Detalles del MR no disponibles",
|
||||
"prDetailsUnavailable": "Detalles del PR no disponibles",
|
||||
"loadingMr": "Cargando MR…",
|
||||
"loadingPr": "Cargando PR…"
|
||||
},
|
||||
"HostSectionHeader": {
|
||||
"workspaceCount_one": "{{count}} espacio de trabajo",
|
||||
"workspaceCount_other": "{{count}} espacios de trabajo"
|
||||
},
|
||||
"titleDerivedAgentRows": {
|
||||
"needsInput": "Requiere intervención",
|
||||
"running": "En ejecución",
|
||||
"idle": "Inactivo"
|
||||
}
|
||||
},
|
||||
"shared": {
|
||||
@@ -13982,17 +14147,8 @@
|
||||
"new": {
|
||||
"workspace": {
|
||||
"SmartWorkspaceNameField": {
|
||||
"2a0d535f69": "Crear nueva rama",
|
||||
"a44229ce4d": "como nombre del espacio de trabajo",
|
||||
"766083a596": "\"",
|
||||
"34ca97bce3": "\"",
|
||||
"b1a7d679ba": "Usar",
|
||||
"e57c53727c": "Añadir proyecto...",
|
||||
"a76fcb4fa0": "Cambiar a",
|
||||
"eadf877af5": "Mantener",
|
||||
"6859e2896c": "Cancelar",
|
||||
"9ef1a7c4b0": ", que es diferente del proyecto seleccionado.",
|
||||
"ad188067ae": "La URL de GitHub apunta a",
|
||||
"4bd98f1091": "¿Cambiar de proyecto?",
|
||||
"0c9e668e3a": "Borrar",
|
||||
"7199ff19c7": "Borrar fuente seleccionada",
|
||||
@@ -14011,7 +14167,6 @@
|
||||
"fda67f0b61": "proyecto actual",
|
||||
"3e8bb1176a": "Conecta Linear en Configuración para buscar issues.",
|
||||
"switchTaskSourceTitle": "¿Cambiar el origen de tareas?",
|
||||
"differentTaskSource": ", que es diferente del origen de tareas seleccionado.",
|
||||
"currentTaskSource": "origen de tareas actual",
|
||||
"placeholderNameOrLinearUrl": "Escribe un nombre o una URL de Linear o Jira",
|
||||
"placeholderWorkspaceName": "Escribe un nombre de espacio de trabajo",
|
||||
@@ -14040,7 +14195,13 @@
|
||||
"emoji": "Emoji",
|
||||
"loadingLinearIssue": "Cargando problema Linear...",
|
||||
"linearLoginUnreadableTitle": "Vuelve a conectar Linear",
|
||||
"linearLoginUnreadableBody": "No se puede leer el inicio de sesión guardado de Linear. Vuelve a conectarlo en Configuración."
|
||||
"linearLoginUnreadableBody": "No se puede leer el inicio de sesión guardado de Linear. Vuelve a conectarlo en Configuración.",
|
||||
"keepRepo": "Mantener {{name}}",
|
||||
"switchToRepo": "Cambiar a {{name}}",
|
||||
"crossRepoDifferentTaskSource": "La URL de GitHub apunta a {{repo}}, que es diferente de la fuente de tareas seleccionada.",
|
||||
"crossRepoDifferentProject": "La URL de GitHub apunta a {{repo}}, que es diferente del proyecto seleccionado.",
|
||||
"useAsWorkspaceName": "Usar <name>«{{name}}»</name> como nombre del espacio de trabajo",
|
||||
"createNewBranchNamed": "Crear una nueva rama <name>{{name}}</name>"
|
||||
},
|
||||
"ProjectCombobox": {
|
||||
"empty": "Ningún proyecto coincide con tu búsqueda.",
|
||||
@@ -14063,6 +14224,11 @@
|
||||
"cloneFromUrl": "Clonar desde URL",
|
||||
"cloneFromUrlHelp": "Clona este repositorio en {{host}}.",
|
||||
"saveLocation": "Establecer ubicación"
|
||||
},
|
||||
"projectCombobox": {
|
||||
"recentHeading": "Recientes",
|
||||
"projectsHeading": "Proyectos",
|
||||
"foldersHeading": "Carpetas"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -15662,7 +15828,10 @@
|
||||
},
|
||||
"dashboard": {
|
||||
"DashboardAgentChildDisclosure": {
|
||||
"1b57ce9fa4": "{{value0}} {{value1}} niño {{value2}}"
|
||||
"hideChildAgents_one": "Ocultar {{count}} agente secundario",
|
||||
"hideChildAgents_other": "Ocultar {{count}} agentes secundarios",
|
||||
"showChildAgents_one": "Mostrar {{count}} agente secundario",
|
||||
"showChildAgents_other": "Mostrar {{count}} agentes secundarios"
|
||||
},
|
||||
"DashboardAgentRow": {
|
||||
"912e136cd9": "Enviar",
|
||||
@@ -15670,7 +15839,13 @@
|
||||
"a41fb5376e": "Contraer detalles",
|
||||
"5ae84475cc": "Despedir",
|
||||
"b06e13fcf7": "Despedir agente",
|
||||
"0272969e28": "Enviar a este agente"
|
||||
"0272969e28": "Enviar a este agente",
|
||||
"justNow": "ahora mismo",
|
||||
"timeAgo": "hace {{duration}}",
|
||||
"dispatchedAgents_one": "{{agentType}} - {{count}} agente enviado",
|
||||
"dispatchedAgents_other": "{{agentType}} - {{count}} agentes enviados",
|
||||
"startedAgo": "iniciado {{time}}",
|
||||
"doneAgo": "completado {{time}}"
|
||||
},
|
||||
"DashboardAgentRowMessage": {
|
||||
"0a01046763": "interrumpido",
|
||||
@@ -16796,9 +16971,10 @@
|
||||
"clearNotification": "Borrar notificación"
|
||||
},
|
||||
"ActivityTitlebarControls": {
|
||||
"f915168c8e": "no leído",
|
||||
"d6a8de3934": "agentes",
|
||||
"dc708f3eff": "Agents cercanos"
|
||||
"dc708f3eff": "Agents cercanos",
|
||||
"unreadCount_one": "{{count}} sin leer",
|
||||
"unreadCount_other": "{{count}} sin leer"
|
||||
},
|
||||
"ActivityThreadHoverCard": {
|
||||
"workspace": "Espacio de trabajo",
|
||||
@@ -16808,9 +16984,9 @@
|
||||
"jumpToWorkspace": "Ir al espacio de trabajo"
|
||||
},
|
||||
"clearCompleted": {
|
||||
"clearedOne": "Se borró 1 agente completado",
|
||||
"clearedMany": "Se borraron {{count}} agentes completados",
|
||||
"undo": "Deshacer"
|
||||
"undo": "Deshacer",
|
||||
"cleared_one": "Se quitó {{count}} agente completado de la lista",
|
||||
"cleared_other": "Se quitaron {{count}} agentes completados de la lista"
|
||||
},
|
||||
"standaloneWorktree": {
|
||||
"floatingTerminal": "Terminal flotante",
|
||||
@@ -17633,6 +17809,16 @@
|
||||
"unreachable": "No se pudo contactar con Jira. Comprueba tu conexión y vuelve a intentarlo.",
|
||||
"loadFailed": "No se pudieron cargar las incidencias de Jira. Vuelve a intentarlo en un momento.",
|
||||
"errorWithCode": "Error {{code}}: {{summary}}"
|
||||
},
|
||||
"cmdJ": {
|
||||
"quickActionUnavailable": {
|
||||
"workspaceLoading": "No se puede ejecutar «{{action}}» — el espacio de trabajo aún se está cargando.",
|
||||
"noActiveWorkspace": "No se puede ejecutar «{{action}}» — no hay ningún espacio de trabajo activo.",
|
||||
"workspaceDisconnected": "No se puede ejecutar «{{action}}» — el espacio de trabajo está desconectado.",
|
||||
"noTabGroup": "No se puede ejecutar «{{action}}» — no hay ningún grupo de pestañas disponible.",
|
||||
"noMovableChat": "No se puede ejecutar «{{action}}» — no hay ningún chat activo que se pueda mover.",
|
||||
"clientUnsupported": "No se puede ejecutar «{{action}}» — este cliente y este entorno de ejecución no lo admiten."
|
||||
}
|
||||
}
|
||||
},
|
||||
"i18n": {
|
||||
@@ -18838,8 +19024,6 @@
|
||||
"exclude": "Excluir"
|
||||
},
|
||||
"idleSignalField": "Señal de inactividad",
|
||||
"selectionVanishedOne": "1 espacio de trabajo seleccionado ya no existe.",
|
||||
"selectionVanished": "{{value0}} espacios de trabajo seleccionados ya no existen.",
|
||||
"updatedAgo": "Actualizado {{value0}}",
|
||||
"refreshing": "Actualizando…",
|
||||
"refreshingProgress": "Actualizando {{value0}}/{{value1}}",
|
||||
@@ -18853,25 +19037,29 @@
|
||||
"gitStatusCheckFailed": "Falló la comprobación del estado de Git",
|
||||
"gitStatusUnverified": "No se pudo verificar el estado de Git",
|
||||
"deleteAnyway": "Eliminar de todos modos",
|
||||
"forceDeleteProjectionOne": "{{count}} espacio de trabajo muestra riesgo actualmente y puede necesitar una eliminación forzada",
|
||||
"forceDeleteProjectionMany": "{{count}} espacios de trabajo muestran riesgo actualmente y pueden necesitar una eliminación forzada",
|
||||
"selectionWithheldOne": "1 espacio de trabajo seleccionado está oculto por los filtros actuales y se ha deseleccionado.",
|
||||
"selectionWithheld": "{{value0}} espacios de trabajo seleccionados están ocultos por los filtros actuales y se han deseleccionado.",
|
||||
"selectAllCountOne": "Seleccionar 1 espacio de trabajo con comprobación de seguridad",
|
||||
"selectAllCount": "Seleccionar los {{value0}} espacios de trabajo con comprobación de seguridad",
|
||||
"appliedFilters": "Filtros aplicados",
|
||||
"removeFilter": "Quitar filtro {{value0}}"
|
||||
"removeFilter": "Quitar filtro {{value0}}",
|
||||
"forceDeleteRisk_one": "{{count}} espacio de trabajo presenta riesgos actualmente y puede requerir una eliminación forzada",
|
||||
"forceDeleteRisk_other": "{{count}} espacios de trabajo presentan riesgos actualmente y pueden requerir una eliminación forzada",
|
||||
"selectionVanishedCount_one": "{{count}} espacio de trabajo seleccionado ya no existe.",
|
||||
"selectionVanishedCount_other": "{{count}} espacios de trabajo seleccionados ya no existen.",
|
||||
"selectionWithheldCount_one": "{{count}} espacio de trabajo seleccionado está oculto por los filtros actuales y se ha deseleccionado.",
|
||||
"selectionWithheldCount_other": "{{count}} espacios de trabajo seleccionados están ocultos por los filtros actuales y se han deseleccionado.",
|
||||
"selectAllSafetyChecked_one": "Seleccionar {{count}} espacio de trabajo con seguridad comprobada",
|
||||
"selectAllSafetyChecked_other": "Seleccionar todos los {{count}} espacios de trabajo con seguridad comprobada"
|
||||
},
|
||||
"scan": {
|
||||
"noWorkspaces": "No se encontraron espacios de trabajo.",
|
||||
"progress": "Escaneando espacios de trabajo ({{value0}}/{{value1}})",
|
||||
"singleError": "No se pudo comprobar {{value0}}: {{value1}}. Puede que falten espacios de trabajo. Actualiza para reintentar.",
|
||||
"moreErrors": ", +{{value0}} más",
|
||||
"multipleErrors": "No se pudieron comprobar {{value0}} repositorios ({{value1}}{{value2}}). Puede que falten espacios de trabajo. Actualiza para reintentar.",
|
||||
"fallbackRepository": "un repositorio",
|
||||
"gitListFailed": "Git no pudo listar los árboles de trabajo",
|
||||
"readyOne": "1 espacio de trabajo encontrado.",
|
||||
"readyMany": "{{value0}} espacios de trabajo encontrados."
|
||||
"multipleErrorsWithMore_one": "No se pudo comprobar {{count}} repositorio ({{names}}, +{{moreCount}} más). Puede que falten algunos espacios de trabajo. Actualiza para volver a intentarlo.",
|
||||
"multipleErrorsWithMore_other": "No se pudieron comprobar {{count}} repositorios ({{names}}, +{{moreCount}} más). Puede que falten algunos espacios de trabajo. Actualiza para volver a intentarlo.",
|
||||
"multipleErrorsCount_one": "No se pudo comprobar {{count}} repositorio ({{names}}). Puede que falten algunos espacios de trabajo. Actualiza para volver a intentarlo.",
|
||||
"multipleErrorsCount_other": "No se pudieron comprobar {{count}} repositorios ({{names}}). Puede que falten algunos espacios de trabajo. Actualiza para volver a intentarlo.",
|
||||
"readyCount_one": "Se encontró {{count}} espacio de trabajo.",
|
||||
"readyCount_other": "Se encontraron {{count}} espacios de trabajo."
|
||||
},
|
||||
"host": {
|
||||
"candidateName": "{{value0}} en {{value1}}",
|
||||
@@ -20376,7 +20564,6 @@
|
||||
"repositoryLoading": "La identidad del repositorio aún se está cargando. Vuelve a intentarlo cuando esté disponible.",
|
||||
"duplicate": "Este enlace ya está adjunto.",
|
||||
"title": "Trabajo vinculado",
|
||||
"count": "{{count}} vinculados",
|
||||
"empty": "Mantén juntas todas las revisiones y tareas de este espacio de trabajo.",
|
||||
"reviews": "Revisiones",
|
||||
"tasks": "Issues y tareas",
|
||||
@@ -20384,7 +20571,6 @@
|
||||
"open": "Abrir enlace",
|
||||
"unlinkItem": "Desvincular {{label}}",
|
||||
"unlink": "Desvincular del espacio de trabajo",
|
||||
"show": "Mostrar {{count}} revisiones y tareas vinculadas",
|
||||
"details": "Detalles del espacio de trabajo",
|
||||
"description": "Adjunta revisiones y tareas, y guarda notas para este espacio de trabajo.",
|
||||
"commentHelp": "Se admite Markdown. Pulsa Enter o {{shortcut}} para guardar · Shift+Enter para una nueva línea.",
|
||||
@@ -20437,7 +20623,11 @@
|
||||
"checksPassing": "Correcto",
|
||||
"checksUnknown": "Desconocido",
|
||||
"checksNeutral": "Neutral",
|
||||
"allReviewChecks": "Revisiones: {{count}} · Checks: {{status}}"
|
||||
"allReviewChecks": "Revisiones: {{count}} · Checks: {{status}}",
|
||||
"showLinked_one": "Mostrar {{count}} revisión o tarea vinculada",
|
||||
"showLinked_other": "Mostrar {{count}} revisiones y tareas vinculadas",
|
||||
"linkedCount_one": "{{count}} vinculado",
|
||||
"linkedCount_other": "{{count}} vinculados"
|
||||
},
|
||||
"attachments": {
|
||||
"updateRuntime": "Actualiza el tiempo de ejecución remoto para cambiar los enlaces del espacio de trabajo",
|
||||
@@ -20638,7 +20828,8 @@
|
||||
"compact": {
|
||||
"linked": "Vinculado",
|
||||
"linkedAndUnavailable": "{{value0}} en árboles de trabajo vinculados · {{value1}} no disponible",
|
||||
"linkedAndScanned": "{{value0}} en árboles de trabajo vinculados · {{value1}} espacios de trabajo"
|
||||
"linkedAndScannedCount_one": "{{size}} en worktrees vinculados · {{count}} espacio de trabajo",
|
||||
"linkedAndScannedCount_other": "{{size}} en worktrees vinculados · {{count}} espacios de trabajo"
|
||||
},
|
||||
"changes": {
|
||||
"empty": "No hay archivos coincidentes.",
|
||||
|
||||
@@ -2115,7 +2115,6 @@
|
||||
"ba64270bdb": "Configurer les agents",
|
||||
"ab63f25397": "Ouvrir les paramètres des agents",
|
||||
"0c5d6a479c": "[Optionnel]",
|
||||
"b5a0796911": "Se connecter",
|
||||
"dccd26d4e4": "Choisir le projet",
|
||||
"d6b0a96f32": "Ajouter un projet",
|
||||
"969a8bff66": "Projet",
|
||||
@@ -2176,7 +2175,8 @@
|
||||
"runSetupNow": "Exécuter le setup maintenant",
|
||||
"runCommandsNow": "Exécuter les commandes maintenant",
|
||||
"skipForNow": "Ignorer pour le moment",
|
||||
"skipCommands": "Ignorer les commandes"
|
||||
"skipCommands": "Ignorer les commandes",
|
||||
"connectProject": "Connecter {{name}}"
|
||||
},
|
||||
"NewWorkspaceComposerModal": {
|
||||
"createWorktree": "Créer un worktree",
|
||||
@@ -3617,21 +3617,23 @@
|
||||
},
|
||||
"drop": {
|
||||
"handler": {
|
||||
"1e072f611e": "Échec de l'envoi de {{value0}} {{value1}}.",
|
||||
"0c77693641": "Worktree pas encore prêt — réessayez dans un instant.",
|
||||
"ce8248b835": "Chemin du worktree indisponible.",
|
||||
"internalTooManyPaths": "Le contenu déposé contient trop de chemins pour un collage sûr dans le terminal.",
|
||||
"internalPathsTooLarge": "La liste de chemins déposée est trop volumineuse pour un collage sûr dans le terminal.",
|
||||
"internalHostMismatch": "Déposez des fichiers provenant du même hôte que ce terminal.",
|
||||
"b4cf68e889": "Ignoré : {{value0}} {{value1}}.",
|
||||
"writeTimeout": "Glisser-déposer de fichiers annulé : le terminal n'a pas accepté le chemin avant le délai de sécurité.",
|
||||
"writeRejected": "Glisser-déposer de fichiers annulé : le terminal n'a pas pu accepter le chemin.",
|
||||
"skippedSymlinkSingular": "Ignoré : {{count}} symlink.",
|
||||
"skippedSymlinkPlural": "Ignorés : {{count}} symlinks.",
|
||||
"uploadingFileSingular": "Envoi de {{count}} fichier vers le runtime…",
|
||||
"uploadingFilePlural": "Envoi de {{count}} fichiers vers le runtime…",
|
||||
"uploadingFileToRemoteSingular": "Envoi de {{count}} fichier vers l’hôte distant…",
|
||||
"uploadingFileToRemotePlural": "Envoi de {{count}} fichiers vers l’hôte distant…"
|
||||
"skippedSymlinks_one": "{{count}} lien symbolique ignoré.",
|
||||
"skippedSymlinks_other": "{{count}} liens symboliques ignorés.",
|
||||
"skippedItems_one": "{{count}} élément ignoré.",
|
||||
"skippedItems_other": "{{count}} éléments ignorés.",
|
||||
"failedUploads_one": "Impossible de transférer {{count}} fichier.",
|
||||
"failedUploads_other": "Impossible de transférer {{count}} fichiers.",
|
||||
"uploadingFiles_one": "Transfert de {{count}} fichier vers l’environnement d’exécution…",
|
||||
"uploadingFiles_other": "Transfert de {{count}} fichiers vers l’environnement d’exécution…",
|
||||
"uploadingFilesToRemote_one": "Transfert de {{count}} fichier vers l’hôte distant…",
|
||||
"uploadingFilesToRemote_other": "Transfert de {{count}} fichiers vers l’hôte distant…"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -3749,10 +3751,15 @@
|
||||
"sessionQueued": "Session en attente",
|
||||
"openSupportedWorkspace": "Ouvrez un espace de travail avant de reprendre une session.",
|
||||
"sessionHostMismatchUnsupported": "Cette session appartient à un autre hôte. Déposez-la sur un espace de travail du même hôte.",
|
||||
"oldPayload": "Cette session a été glissée depuis une fenêtre Orca plus ancienne. Reprenez-la plutôt depuis l'historique des sessions."
|
||||
"oldPayload": "Cette session a été glissée depuis une fenêtre Orca plus ancienne. Reprenez-la plutôt depuis l'historique des sessions.",
|
||||
"legacyDragCannotRetarget": "Cette session a été glissée depuis une fenêtre d’une ancienne version d’Orca. Orca ne peut donc pas la réaffecter au compte Codex sélectionné. Reprenez-la depuis le panneau Historique des sessions.",
|
||||
"legacyDragPrepareFailed": "Orca n’a pas pu préparer cette ancienne session Codex. Réessayez de la reprendre."
|
||||
},
|
||||
"TabGroupDropOverlay": {
|
||||
"paneColumnLabel": "Nouvelle scission"
|
||||
},
|
||||
"useTabGroupCreationCommands": {
|
||||
"duplicateBrowserTabFailed": "L’environnement d’exécution associé n’a pas pu dupliquer l’onglet du navigateur géré."
|
||||
}
|
||||
},
|
||||
"bar": {
|
||||
@@ -3947,6 +3954,30 @@
|
||||
"TabBarQuickCommandHostLoadStatus": {
|
||||
"82e294f3ca": "Hôte indisponible",
|
||||
"7c129b08ff": "Chargement de l'hôte…"
|
||||
},
|
||||
"nativeChatCliFork": {
|
||||
"cannotOpenInCli": "Cette session ne peut pas être ouverte dans la CLI."
|
||||
},
|
||||
"tabCreateEntry": {
|
||||
"fileNotFound": "Fichier introuvable : {{path}}",
|
||||
"cannotOpenDirectory": "Impossible d’ouvrir un répertoire : {{path}}",
|
||||
"parentNotDirectory": "Impossible de créer le fichier, car {{path}} n’est pas un répertoire.",
|
||||
"fileNoLongerExists": "Le fichier n’existe plus : {{path}}",
|
||||
"noActiveWorktree": "Aucun worktree actif."
|
||||
},
|
||||
"tabCreateEntryPath": {
|
||||
"filePathsCannotContainControlCharacters": "Les chemins de fichiers ne peuvent pas contenir de caractères de contrôle.",
|
||||
"enterAUrlOrFilePath": "Saisissez une URL ou un chemin de fichier.",
|
||||
"homeRelativePathsAreNotSupported": "Les chemins relatifs au répertoire personnel ne sont pas pris en charge ici.",
|
||||
"enterAFilePathNotA": "Saisissez un chemin de fichier, pas un chemin de répertoire.",
|
||||
"enterAnAbsoluteFilePath": "Saisissez un chemin de fichier absolu.",
|
||||
"enterAnAbsolutePathForThis": "Saisissez un chemin absolu pour cet ordinateur.",
|
||||
"enterARelativeFilePath": "Saisissez un chemin de fichier relatif.",
|
||||
"windowsDrivePathsAreNotSupported": "Les chemins de lecteurs Windows ne sont pas pris en charge ici.",
|
||||
"uncPathsAreNotSupportedHere": "Les chemins UNC ne sont pas pris en charge ici.",
|
||||
"filePathsCannotContainEmptySegments": "Les chemins de fichiers ne peuvent pas contenir de segments vides.",
|
||||
"filePathsCannotContainDotSegments": "Les chemins de fichiers ne peuvent pas contenir de segments . ou ..",
|
||||
"filePathsCannotContainTildeSegments": "Les chemins de fichiers ne peuvent pas contenir de segments ~."
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -3974,15 +4005,16 @@
|
||||
"4ebf90c12e": "Aucun port externe détecté",
|
||||
"7dac3ecc9d": "Ports externes",
|
||||
"95495019ed": "Scan des ports indisponible sur {{value0}} : {{value1}}",
|
||||
"a8e4bdb412": " · {{value0}} externe(s)",
|
||||
"c22ea609fd": "Ports",
|
||||
"ca41be2802": "Ports — espace de travail {{value0}} {{value1}}{{value2}}",
|
||||
"b8bc3e420a": "Ports, espace de travail {{value0}} {{value1}}",
|
||||
"3a87d54dfb": "Aucun port d'espace de travail détecté",
|
||||
"c174bbbfed": "Recherche des ports d'espace de travail...",
|
||||
"8caaa86e9a": "ports",
|
||||
"45834a9ace": "port",
|
||||
"2b84c4d11f": "{{value0}} espace de travail · {{value1}} externes"
|
||||
"2b84c4d11f": "{{value0}} espace de travail · {{value1}} externes",
|
||||
"portsAria_one": "Ports, {{count}} port de l’espace de travail",
|
||||
"portsAria_other": "Ports, {{count}} ports de l’espace de travail",
|
||||
"portsTooltipWithExternal_one": "Ports — {{count}} port de l’espace de travail · externes : {{externalCount}}",
|
||||
"portsTooltipWithExternal_other": "Ports — {{count}} ports de l’espace de travail · externes : {{externalCount}}",
|
||||
"portsTooltip_one": "Ports — {{count}} port de l’espace de travail",
|
||||
"portsTooltip_other": "Ports — {{count}} ports de l’espace de travail"
|
||||
},
|
||||
"ResourceUsageStatusSegment": {
|
||||
"946d9f94d0": "Annuler",
|
||||
@@ -3991,7 +4023,6 @@
|
||||
"27a74f91f0": "Rien en cours d'exécution pour le moment",
|
||||
"298f4be7f2": "CPU",
|
||||
"2aa2de6cb9": "Nom",
|
||||
"30ff2c3c31": "{{value0}} orphelin",
|
||||
"1fedf94eae": "Charge CPU cumulée. Une valeur supérieure à 100 % signifie que plusieurs cœurs travaillent simultanément.",
|
||||
"e7cf14ec78": "Sessions de terminal indisponibles. La liste est peut-être obsolète.",
|
||||
"93b0de3c21": "Redémarrer",
|
||||
@@ -4019,12 +4050,13 @@
|
||||
"d406915b78": "Renderer",
|
||||
"81cd37af99": "Main",
|
||||
"fa6d36758d": "Tuer la session {{value0}}",
|
||||
"b8f4a2c1d0e3": "{{value0}} orphelins",
|
||||
"c7e3b1a0d9f2": "Tuer {{value0}} terminal orphelin",
|
||||
"d8f4c2b1e0a3": "Tuer {{value0}} terminaux orphelins",
|
||||
"e9a5d3c2b1f0": "Tuer {{value0}} ?",
|
||||
"8a0472ab54": "Impossible de joindre {{value0}} ; ses ressources sont inconnues.",
|
||||
"1ea066b73f": "Mettez à jour {{value0}} pour voir ses ressources."
|
||||
"1ea066b73f": "Mettez à jour {{value0}} pour voir ses ressources.",
|
||||
"endOrphanTerminals_one": "Terminer {{count}} terminal orphelin",
|
||||
"endOrphanTerminals_other": "Terminer {{count}} terminaux orphelins",
|
||||
"orphanCount_one": "{{count}} orphelin",
|
||||
"orphanCount_other": "{{count}} orphelins"
|
||||
},
|
||||
"SshStatusSegment": {
|
||||
"3ad70e0365": "Gérer les hôtes distants…",
|
||||
@@ -4084,10 +4116,6 @@
|
||||
"3325d996cb": "Actualiser les limites de débit",
|
||||
"cd9d7b40ff": "Redémarrer {{value0}} sessions",
|
||||
"6cd6650b4c": "Redémarrer la session",
|
||||
"1446d0d8a0": "{{value0}} sessions Codex sont toujours sur l'ancien compte.",
|
||||
"605901a495": "1 session Codex est encore sur l'ancien compte",
|
||||
"5e5f9f5160": "1 réinitialisation de limite de débit disponible",
|
||||
"5ecae9197c": "{{value0}} réinitialisations de limite de débit disponibles",
|
||||
"25d8bbde69": "Utilisation de la réinitialisation…",
|
||||
"e159fc1fd7": "Réinitialiser maintenant",
|
||||
"972a1ff497": "Réinitialiser les limites Codex ?",
|
||||
@@ -4104,7 +4132,11 @@
|
||||
"codexSignInError": "Échec de la connexion à Codex. Veuillez réessayer.",
|
||||
"cursorUsageMenu": "Utilisation Cursor",
|
||||
"hiddenUsageProviders": "Aussi : {{value0}}",
|
||||
"zcodeUsageMenu": "Utilisation du code Z"
|
||||
"zcodeUsageMenu": "Utilisation du code Z",
|
||||
"rateLimitResetsAvailable_one": "{{count}} réinitialisation de limite de débit disponible",
|
||||
"rateLimitResetsAvailable_other": "{{count}} réinitialisations de limite de débit disponibles",
|
||||
"staleCodexSessions_one": "{{count}} session Codex utilise encore l’ancien compte.",
|
||||
"staleCodexSessions_other": "{{count}} sessions Codex utilisent encore l’ancien compte."
|
||||
},
|
||||
"StatusBarUsageEmptyCta": {
|
||||
"828c764a79": "Connecter un compte",
|
||||
@@ -4121,13 +4153,14 @@
|
||||
"SkillUpdateStatusSegment": {
|
||||
"runningLabel": "Mise à jour des skills",
|
||||
"runningOne": "Mise à jour de {{value0}}…",
|
||||
"runningMany": "Mise à jour des skills de {{value0}}…",
|
||||
"runningAria": "Mise à jour des skills en cours. Cliquez pour ouvrir les détails.",
|
||||
"successLabel": "Skills mis à jour",
|
||||
"successAria": "Skills mis à jour. Cliquez pour ouvrir les détails.",
|
||||
"attentionAria": "Certaines mises à jour de skills ont été ignorées. Cliquez pour ouvrir les détails.",
|
||||
"attentionLabel": "Skills à vérifier",
|
||||
"attentionTooltip": "Certaines mises à jour de skills ont été ignorées — cliquez pour voir les détails"
|
||||
"attentionTooltip": "Certaines mises à jour de skills ont été ignorées — cliquez pour voir les détails",
|
||||
"runningSkills_one": "Mise à jour de {{count}} skill…",
|
||||
"runningSkills_other": "Mise à jour de {{count}} skills…"
|
||||
},
|
||||
"UpdateStatusSegment": {
|
||||
"5cd13105a3": "Échec de la mise à jour. Cliquez pour déplier.",
|
||||
@@ -4169,11 +4202,8 @@
|
||||
"6f8f6a6b04": "Filtrer les espaces de travail",
|
||||
"5caccea440": "Supprimer la sélection",
|
||||
"e4a12c455b": "Effacer",
|
||||
"0cb1501ccf": "récupérable",
|
||||
"65402b7192": "sélectionnés",
|
||||
"43171f3e60": "Espaces de travail",
|
||||
"09960d86bd": "Analysé",
|
||||
"63efebe0e6": "{{value0}} {{value1}} supprimés de Space.",
|
||||
"eee5240810": "Espaces de travail supprimés",
|
||||
"9afc97f9a3": "Espace de travail supprimé",
|
||||
"792a214457": "Supprimer l'espace de travail",
|
||||
@@ -4181,7 +4211,6 @@
|
||||
"9155381019": "Sparse",
|
||||
"f39d291997": "Sélectionner",
|
||||
"16988df079": "Aucun fichier trouvé.",
|
||||
"b25c2c1086": "éléments de premier niveau",
|
||||
"d3f9c69ddc": "Zoom",
|
||||
"ef890d31b9": "Tous",
|
||||
"c28643d3da": "Aller à l'espace de travail",
|
||||
@@ -4220,8 +4249,15 @@
|
||||
"c5135e7e4a": "Analyse de la taille des espaces de travail. Vous pouvez quitter cette page.",
|
||||
"0990a63160": "Aucune taille d'espace de travail analysée pour le moment.",
|
||||
"977bdf9a36": "Aucun élément de premier niveau à afficher.",
|
||||
"131662ac65": "{{value0}} ouvert(s)",
|
||||
"0d1c78d749": "Sélectionner {{value0}}"
|
||||
"0d1c78d749": "Sélectionner {{value0}}",
|
||||
"removedFromSpace_one": "{{count}} espace de travail retiré d’Espace.",
|
||||
"removedFromSpace_other": "{{count}} espaces de travail retirés d’Espace.",
|
||||
"topLevelItems_one": "{{formattedCount}} élément de premier niveau",
|
||||
"topLevelItems_other": "{{formattedCount}} éléments de premier niveau",
|
||||
"selectedCount_one": "{{count}} sélectionné",
|
||||
"selectedCount_other": "{{count}} sélectionnés",
|
||||
"reclaimableSize": "{{size}} récupérables",
|
||||
"scanning": "Analyse en cours"
|
||||
},
|
||||
"ports": {
|
||||
"status": {
|
||||
@@ -4235,7 +4271,8 @@
|
||||
"e4a709548c": "Échec de l'actualisation des ports",
|
||||
"acdb6df590": "Processus arrêté sur {{value0}}",
|
||||
"480d8f2347": "{{value0}} copié",
|
||||
"b854ec9ff5": "Échec de l'ouverture du navigateur"
|
||||
"b854ec9ff5": "Échec de l'ouverture du navigateur",
|
||||
"unknownProcess": "Processus inconnu"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4252,8 +4289,6 @@
|
||||
"7ad719c4bf": "Limité",
|
||||
"e740f92596": "Échec de l'actualisation",
|
||||
"8418ec448d": "L'utilisation de {{value0}} n'a pas pu être actualisée. Des sessions d'agent sont peut-être encore connectées.",
|
||||
"45198c7d95": "1 réinitialisation de limite de débit disponible",
|
||||
"bce421cba3": "{{value0}} réinitialisations de limite de débit disponibles",
|
||||
"7ec6e030a0": "La prochaine expire maintenant",
|
||||
"d1e442a9e5": "Expire maintenant",
|
||||
"6cf9eaed10": "La prochaine expire dans {{value0}}",
|
||||
@@ -4305,7 +4340,14 @@
|
||||
"claudeNoUsageFromHost": "Aucun usage depuis {{server}}",
|
||||
"claudeUnknownOnHost": "L’usage de Claude n’est pas disponible depuis {{server}}. Il n’y est peut-être pas connecté, ou il utilise peut-être la facturation par clé API.",
|
||||
"remoteOwnerUnreachable": "Utilisation indisponible – impossible d'atteindre {{server}}",
|
||||
"remoteOwnerNoUsage": "Utilisation indisponible : {{server}} ne signale pas l'utilisation. Mettez à jour Orca sur cet hôte."
|
||||
"remoteOwnerNoUsage": "Utilisation indisponible : {{server}} ne signale pas l'utilisation. Mettez à jour Orca sur cet hôte.",
|
||||
"justNow": "à l’instant",
|
||||
"minutesAgo": "il y a {{minutes}} min",
|
||||
"hoursAgo": "il y a {{hours}} h",
|
||||
"updatedAgo": "Mis à jour {{time}}",
|
||||
"notYetUpdated": "Pas encore mis à jour",
|
||||
"rateLimitResetsAvailable_one": "{{count}} réinitialisation de limite de débit disponible",
|
||||
"rateLimitResetsAvailable_other": "{{count}} réinitialisations de limite de débit disponibles"
|
||||
},
|
||||
"SshTargetStatusRow": {
|
||||
"sshHost": "Hôte SSH"
|
||||
@@ -4348,12 +4390,12 @@
|
||||
"RemoteServerUpdateStatusSegment": {
|
||||
"updating": "Mise à jour de {{value0}}/{{value1}}",
|
||||
"updatingTooltip": "Des mises à jour de serveurs Orca distants sont en cours",
|
||||
"failed": "Échec de la mise à jour de {{value0}} serveurs",
|
||||
"failedTooltip": "Ouvrez les mises à jour des serveurs Orca distants pour vérifier et relancer",
|
||||
"updated": "{{value0}} serveurs mis à jour",
|
||||
"updatedTooltip": "Mises à jour des serveurs Orca distants terminées",
|
||||
"failedOne": "Échec de la mise à jour d'un serveur",
|
||||
"updatedOne": "1 serveur mis à jour"
|
||||
"failedCount_one": "{{count}} mise à jour de serveur a échoué",
|
||||
"failedCount_other": "{{count}} mises à jour de serveurs ont échoué",
|
||||
"updatedCount_one": "{{count}} serveur mis à jour",
|
||||
"updatedCount_other": "{{count}} serveurs mis à jour"
|
||||
},
|
||||
"resource": {
|
||||
"memory": {
|
||||
@@ -4361,7 +4403,10 @@
|
||||
"workingSetDescription": "Somme des working sets (WS). Les pages partagées peuvent apparaître dans plusieurs processus.",
|
||||
"footprintDescription": "Somme des empreintes mémoire, la valeur affichée par le Moniteur d’activité : la mémoire propre à chaque processus, mémoire graphique comprise. Les pages partagées entre processus ne sont pas comptées deux fois.",
|
||||
"rssDescription": "Somme des tailles résidentes (RSS). Les pages partagées ou aliasées peuvent apparaître dans plusieurs processus.",
|
||||
"privateBytesDescription": "Octets privés additionnés : mémoire engagée par ces processus, comptée si elle est résidente ou paginée. C'est ce que l'hôte facture par rapport à sa limite de validation, de sorte qu'elle continue d'augmenter tandis que l'ensemble de travail ci-dessus diminue sous la pagination."
|
||||
"privateBytesDescription": "Octets privés additionnés : mémoire engagée par ces processus, comptée si elle est résidente ou paginée. C'est ce que l'hôte facture par rapport à sa limite de validation, de sorte qu'elle continue d'augmenter tandis que l'ensemble de travail ci-dessus diminue sous la pagination.",
|
||||
"memColumn": "Mém.",
|
||||
"memorySummary": "Σ Mémoire",
|
||||
"privateSummary": "Σ Privée"
|
||||
}
|
||||
},
|
||||
"manager": {
|
||||
@@ -4410,29 +4455,29 @@
|
||||
"repair": "Re-pair…"
|
||||
},
|
||||
"NativeChatResumeStatusSegment": {
|
||||
"labelOne": "1 chat à reprendre",
|
||||
"label": "Reprise des discussions {{value0}}",
|
||||
"ariaLabelOne": "1 chat disponible pour reprendre",
|
||||
"ariaLabel": "Les discussions {{value0}} sont disponibles pour reprendre",
|
||||
"tooltip": "Ouvrir les discussions interrompues disponibles pour reprendre",
|
||||
"failedLabelOne": "1 chat n'a pas pu reprendre",
|
||||
"failedLabel": "{{value0}} chats n'ont pas pu reprendre",
|
||||
"failedAriaOne": "1 chat n'a pas pu reprendre. Cliquez pour plus de détails.",
|
||||
"failedAria": "{{value0}} chats n'ont pas pu reprendre. Cliquez pour plus de détails.",
|
||||
"failedTooltip": "Chats qu'Orca n'a pas pu reprendre après le redémarrage. Cliquez pour plus de détails.",
|
||||
"checkLabelOne": "1 chat à vérifier",
|
||||
"checkLabel": "{{value0}} chats à vérifier",
|
||||
"checkAriaOne": "1 chat à vérifier après la reprise. Cliquez pour plus de détails.",
|
||||
"checkAria": "{{value0}} chats à vérifier après la reprise. Cliquez pour plus de détails.",
|
||||
"checkTooltip": "Chats qu'Orca n'a pas pu reprendre, ou dont il n'a pas pu confirmer la reprise, après le redémarrage. Cliquez pour plus de détails.",
|
||||
"resumingTooltip": "Restauration des conversations interrompues et demande de poursuite…",
|
||||
"resumingProgressLabel": "Reprise des discussions {{value0}}/{{value1}}",
|
||||
"resumingProgressAria": "Reprise des discussions, {{value0}} sur {{value1}} terminées. Cliquez pour voir les détails.",
|
||||
"resumedLabelOne": "1 discussion reprise",
|
||||
"resumedLabel": "{{value0}} discussions reprises",
|
||||
"resumedAriaOne": "1 discussion reprise. Cliquez pour la voir.",
|
||||
"resumedAria": "{{value0}} discussions reprises. Cliquez pour les voir.",
|
||||
"resumedTooltip": "Discussions reprises par Orca après le redémarrage. Cliquez pour les voir."
|
||||
"resumedTooltip": "Discussions reprises par Orca après le redémarrage. Cliquez pour les voir.",
|
||||
"chatsFailedLabel_one": "Impossible de reprendre {{count}} chat",
|
||||
"chatsFailedLabel_other": "Impossible de reprendre {{count}} chats",
|
||||
"chatsFailedAria_one": "Impossible de reprendre {{count}} chat. Cliquez pour voir les détails.",
|
||||
"chatsFailedAria_other": "Impossible de reprendre {{count}} chats. Cliquez pour voir les détails.",
|
||||
"resumedLabelCount_one": "{{count}} chat repris",
|
||||
"resumedLabelCount_other": "{{count}} chats repris",
|
||||
"resumedAriaCount_one": "{{count}} chat repris. Cliquez pour l’afficher.",
|
||||
"resumedAriaCount_other": "{{count}} chats repris. Cliquez pour les afficher.",
|
||||
"checkLabelCount_one": "{{count}} chat à vérifier",
|
||||
"checkLabelCount_other": "{{count}} chats à vérifier",
|
||||
"checkAriaCount_one": "{{count}} chat à vérifier après sa reprise. Cliquez pour voir les détails.",
|
||||
"checkAriaCount_other": "{{count}} chats à vérifier après leur reprise. Cliquez pour voir les détails.",
|
||||
"labelCount_one": "{{count}} chat à reprendre",
|
||||
"labelCount_other": "{{count}} chats à reprendre",
|
||||
"ariaLabelCount_one": "{{count}} chat peut être repris",
|
||||
"ariaLabelCount_other": "{{count}} chats peuvent être repris"
|
||||
},
|
||||
"provider": {
|
||||
"extra": {
|
||||
@@ -4442,6 +4487,81 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"mergeSnapshotAndSessions": {
|
||||
"unattributed": "Non attribué"
|
||||
},
|
||||
"resourceSessionLabels": {
|
||||
"terminalNumber": "Terminal {{number}}",
|
||||
"pid": "PID {{pid}}",
|
||||
"sessionPrefix": "session {{id}}",
|
||||
"unknownSession": "(session inconnue)",
|
||||
"unknown": "inconnu"
|
||||
},
|
||||
"runtimeTargets": {
|
||||
"wslDefault": "WSL par défaut"
|
||||
},
|
||||
"floatingWorkspace": {
|
||||
"minimize": "Réduire l’espace de travail flottant",
|
||||
"show": "Afficher l’espace de travail flottant"
|
||||
},
|
||||
"workspaceSpaceGitRefresh": {
|
||||
"ownerUnavailable": "Le propriétaire de l’espace de travail n’est plus disponible"
|
||||
},
|
||||
"workspaceSpaceDecision": {
|
||||
"syncedWithUpstream": "Synchronisé avec l’amont",
|
||||
"aheadAndBehind": "{{ahead}} d’avance, {{behind}} de retard",
|
||||
"ahead": "{{ahead}} d’avance",
|
||||
"behind": "{{behind}} de retard",
|
||||
"activeAgents_one": "{{count}} agent actif",
|
||||
"activeAgents_other": "{{count}} agents actifs",
|
||||
"completedAgents_one": "{{count}} agent terminé",
|
||||
"completedAgents_other": "{{count}} agents terminés",
|
||||
"activeAndCompletedAgents": "{{active}}, {{completed}}",
|
||||
"completedAgentsRetained_one": "{{count}} agent terminé conservé",
|
||||
"completedAgentsRetained_other": "{{count}} agents terminés conservés",
|
||||
"noTrackedAgents": "Aucun agent suivi en cours d’exécution",
|
||||
"noTerminalTabs": "Aucun onglet de terminal",
|
||||
"liveTerminalTabs_one": "{{live}} en cours d’exécution sur {{count}} onglet de terminal",
|
||||
"liveTerminalTabs_other": "{{live}} en cours d’exécution sur {{count}} onglets de terminal",
|
||||
"gitStatusUnavailable": "État Git indisponible : {{error}}",
|
||||
"gitStatusNotLoaded": "L’état Git n’est pas encore chargé",
|
||||
"noUncommittedFiles": "Aucun fichier avec des modifications non committées",
|
||||
"changedFiles_one": "{{count}} fichier modifié",
|
||||
"changedFiles_other": "{{count}} fichiers modifiés",
|
||||
"noEditorFiles": "Aucun fichier ouvert dans l’éditeur",
|
||||
"editorFilesOpen_one": "{{count}} fichier ouvert dans l’éditeur",
|
||||
"editorFilesOpen_other": "{{count}} fichiers ouverts dans l’éditeur",
|
||||
"dirtyOfOpen": "{{dirty}} sur {{open}}",
|
||||
"dirtyEditorBuffers_one": "{{count}} tampon d’éditeur non enregistré",
|
||||
"dirtyEditorBuffers_other": "{{count}} tampons d’éditeur non enregistrés",
|
||||
"openFiles_one": "{{count}} fichier ouvert",
|
||||
"openFiles_other": "{{count}} fichiers ouverts",
|
||||
"activeWorkspace": "C’est l’espace de travail actif",
|
||||
"mainWorktreeProtected": "Le worktree principal est protégé",
|
||||
"workspaceProtected": "L’espace de travail est protégé",
|
||||
"canDeleteAfterReview": "Peut être supprimé après vérification",
|
||||
"noLinkedIssue": "Aucun ticket lié",
|
||||
"noLinkedReview": "Aucune PR liée",
|
||||
"browserTabsOpen_one": "{{count}} onglet de navigateur ouvert",
|
||||
"browserTabsOpen_other": "{{count}} onglets de navigateur ouverts"
|
||||
},
|
||||
"workspaceSpaceFormat": {
|
||||
"cancellingScan": "Annulation de l’analyse",
|
||||
"currentWorkspaces": "espaces de travail",
|
||||
"scanningWorkspaces": "Analyse de {{scanned}} sur {{total}} · {{current}}",
|
||||
"scanningRepos_one": "Analyse de {{scanned}} sur {{count}} dépôt · {{current}}",
|
||||
"scanningRepos_other": "Analyse de {{scanned}} sur {{count}} dépôts · {{current}}",
|
||||
"scanningSizes": "Analyse des tailles des espaces de travail",
|
||||
"status": {
|
||||
"scanned": "Analysé",
|
||||
"missing": "Manquant",
|
||||
"noAccess": "Aucun accès",
|
||||
"unavailable": "Indisponible",
|
||||
"failed": "Échec"
|
||||
},
|
||||
"mainWorktree": "worktree principal",
|
||||
"detached": "détaché"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -5219,12 +5339,10 @@
|
||||
"670864ab52": "Mise à jour du {{value0}} local en cours",
|
||||
"84c62e4d7f": "Impossible d'activer {{value0}}",
|
||||
"442552c656": "Ouvrez les paramètres et réessayez.",
|
||||
"f15fd80989": "Votre nouveau worktree est à jour, mais le {{value0}} local est en retard de {{value1}} {{value2}}, les diffs IA peuvent donc se comparer à un historique obsolète. Laissez Orca le maintenir à jour automatiquement. Modifiable à tout moment dans",
|
||||
"3d260e1a5d": "Paramètres › {{value0}}",
|
||||
"34a03a6565": "Garder {{value0}} à jour",
|
||||
"4a18052018": "Le {{value0}} local est en retard sur {{value1}}",
|
||||
"commit": "commit",
|
||||
"commits": "commits"
|
||||
"staleLocalBranch_one": "Votre nouveau worktree est à jour, mais la branche locale {{branch}} a {{count}} commit de retard. Les diffs de l’IA peuvent donc utiliser un historique obsolète. Laissez Orca la maintenir à jour automatiquement. Vous pouvez modifier ce réglage à tout moment dans <settings>Paramètres › {{setting}}</settings>",
|
||||
"staleLocalBranch_other": "Votre nouveau worktree est à jour, mais la branche locale {{branch}} a {{count}} commits de retard. Les diffs de l’IA peuvent donc utiliser un historique obsolète. Laissez Orca la maintenir à jour automatiquement. Vous pouvez modifier ce réglage à tout moment dans <settings>Paramètres › {{setting}}</settings>"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -5278,12 +5396,11 @@
|
||||
"39d51212cc": "Nom du groupe",
|
||||
"aa0247680d": "Non, importer séparément",
|
||||
"a0bc4d1f8e": "Oui, importer comme groupe",
|
||||
"8401a7a0d0": "1 dépôt",
|
||||
"d4f1df62ef": "{{value0}} dépôts",
|
||||
"b4263a2ac4": "{{value0}} trouvé(s) dans {{value1}}.",
|
||||
"24eda6c8b2": "Analyse... {{value0}}",
|
||||
"6149d5203f": "Aucun dépôt sélectionné. Ouvrez plutôt le dossier parent pour utiliser l'éditeur, le terminal et la recherche sans les fonctionnalités Git.",
|
||||
"e52454b7f6": "Ouvrir comme dossier"
|
||||
"e52454b7f6": "Ouvrir comme dossier",
|
||||
"foundRepositories_one": "{{count}} dépôt trouvé dans {{path}}.",
|
||||
"foundRepositories_other": "{{count}} dépôts trouvés dans {{path}}."
|
||||
},
|
||||
"AddRepoRemoteStep": {
|
||||
"6680289908": "/home/user/project",
|
||||
@@ -5352,9 +5469,8 @@
|
||||
"eab8b45238": "Copier l'erreur",
|
||||
"a23b22d16f": "Copied",
|
||||
"74fc00776f": "Détails de l'erreur",
|
||||
"3afcad0497": "à partir du premier message de l'agent.",
|
||||
"ff62a18580": "Orca n'a pas pu générer un nom de branche pour",
|
||||
"ca3b225195": "Échec du nommage automatique de la branche"
|
||||
"ca3b225195": "Échec du nommage automatique de la branche",
|
||||
"couldNotGenerateBranchName": "Orca n’a pas pu générer de nom de branche pour <name>{{name}}</name> à partir du premier message de l’agent."
|
||||
},
|
||||
"CreateProjectLocationField": {
|
||||
"95548e33bf": "Choisir un dossier parent...",
|
||||
@@ -5374,37 +5490,38 @@
|
||||
"2b56b35f53": "Vous pouvez changer cela dans les paramètres.",
|
||||
"dd3a45bbbd": "Cette confirmation sera ignorée la prochaine fois.",
|
||||
"fc23c4cbdf": "Supprimer l'espace de travail",
|
||||
"86f0ae1257": "Supprimer les espaces de travail"
|
||||
"86f0ae1257": "Supprimer les espaces de travail",
|
||||
"removeFolderProjectInstead": "Retirez le projet de dossier au lieu de supprimer cet espace de travail.",
|
||||
"gitBlocksMainWorktree": "Git ne permet pas de retirer le worktree principal."
|
||||
},
|
||||
"DeleteWorktreeDirtyChangeHint": {
|
||||
"showLoadedPaths": "Afficher les chemins chargés",
|
||||
"loadedPathsNotice": "Les chemins chargés peuvent être incomplets ou obsolètes.",
|
||||
"loadedChangedPaths": "Chemins modifiés chargés",
|
||||
"unresolvedConflict": "Conflit non résolu",
|
||||
"moreLoadedPaths": "et {{value0}} autres chemins chargés",
|
||||
"changeCount_one": "{{count}} modification non commitée ou non suivie",
|
||||
"changeCount_other": "{{count}} modifications non commitées ou non suivies",
|
||||
"changes": "Modifications non commitées ou non suivies"
|
||||
"changes": "Modifications non commitées ou non suivies",
|
||||
"moreLoadedPaths_one": "et {{count}} autre chemin chargé",
|
||||
"moreLoadedPaths_other": "et {{count}} autres chemins chargés"
|
||||
},
|
||||
"DeleteWorktreeLineageNotice": {
|
||||
"ad407c2d55": "de plus",
|
||||
"a940f3c96e": "Les espaces de travail enfants seront supprimés",
|
||||
"29b98bf9cd": "La suppression de cet espace de travail supprime aussi {{value0}} espaces de travail enfants.",
|
||||
"66798cc6a2": "La suppression de cet espace de travail supprime aussi 1 espace de travail enfant."
|
||||
"alsoDeletesChildren_one": "Supprimer cet espace de travail supprime également {{count}} espace de travail enfant.",
|
||||
"alsoDeletesChildren_other": "Supprimer cet espace de travail supprime également {{count}} espaces de travail enfants.",
|
||||
"moreChildren_one": "+{{count}} de plus",
|
||||
"moreChildren_other": "+{{count}} de plus"
|
||||
},
|
||||
"DeleteWorktreeSkipConfirmOption": {
|
||||
"29aefb7e52": "Ne plus demander"
|
||||
},
|
||||
"DeleteWorktreeWarningPanels": {
|
||||
"026738155a": "(le répertoire de clone d'origine).",
|
||||
"c4f96a6e18": "worktree principal",
|
||||
"e3be9eba15": "Ceci est le"
|
||||
"mainWorktreeNotice": "Il s’agit du <strong>worktree principal</strong> (le répertoire du clone d’origine)."
|
||||
},
|
||||
"ImportedWorktreesVisibilityLine": {
|
||||
"b7a87dc32f": "Afficher dans la liste des worktrees",
|
||||
"ad99f4eea9": "Garder masqué",
|
||||
"9f4f14e821": "Modifiable plus tard depuis le menu du projet.",
|
||||
"b2bc47c080": "autres emplacements",
|
||||
"b47ba1a9d2": "Aperçu de {{value0}}",
|
||||
"2251d41ebb": "Groupes de worktrees masqués",
|
||||
"5a9688802a": "Afficher {{value0}} de plus",
|
||||
@@ -5418,7 +5535,9 @@
|
||||
"keepHiddenAriaLabel_one": "Garder {{count}} worktree détecté masqué pour {{repo}} ; récupérez-le depuis le menu du projet",
|
||||
"keepHiddenAriaLabel_other": "Garder {{count}} worktrees détectés masqués pour {{repo}} ; récupérez-les depuis le menu du projet",
|
||||
"keepHiddenTooltip": "Garder masqué - récupérable depuis le menu du projet",
|
||||
"repoOnHost": "{{repo}} sur {{host}}"
|
||||
"repoOnHost": "{{repo}} sur {{host}}",
|
||||
"moreLocations_one": "+ {{count}} autre emplacement",
|
||||
"moreLocations_other": "+ {{count}} autres emplacements"
|
||||
},
|
||||
"NonGitFolderDialog": {
|
||||
"e52454b7f6": "Ouvrir comme dossier",
|
||||
@@ -5452,20 +5571,24 @@
|
||||
},
|
||||
"ProjectGroupDeleteDialog": {
|
||||
"ca65b78f78": "Annuler",
|
||||
"69f5cb97d0": "Supprimer",
|
||||
"591f330288": "Supprimer le groupe de projets",
|
||||
"2c14ce677a": "Suppression...",
|
||||
"0e0e6764af": "Projets contenus",
|
||||
"ad407c2d55": "de plus",
|
||||
"removeContainedProjectSingular": "Retirer 1 projet contenu",
|
||||
"removeContainedProjectPlural": "Retirer {{value0}} projets contenus",
|
||||
"55f75628c0": "Les dossiers de projets sur le disque ne sont pas supprimés.",
|
||||
"fec7e9c8ae": "Supprimer le groupe"
|
||||
"fec7e9c8ae": "Supprimer le groupe",
|
||||
"removeContainedProjects_one": "Retirer {{count}} projet du groupe",
|
||||
"removeContainedProjects_other": "Retirer {{count}} projets du groupe",
|
||||
"deleteGroupDescription": "Supprimer <name>{{name}}</name>.",
|
||||
"moreProjects_one": "+{{count}} de plus",
|
||||
"moreProjects_other": "+{{count}} de plus"
|
||||
},
|
||||
"ProjectGroupNameDialog": {
|
||||
"d99a034073": "Annuler",
|
||||
"83dfbc5313": "Nom du groupe",
|
||||
"4a64e78822": "Enregistrement..."
|
||||
"4a64e78822": "Enregistrement...",
|
||||
"defaultGroupName": "Groupe {{name}}",
|
||||
"create": "Créer",
|
||||
"rename": "Renommer"
|
||||
},
|
||||
"RemoteFileBrowser": {
|
||||
"2300612806": "Tapez pour filtrer ou saisissez un chemin…",
|
||||
@@ -5477,7 +5600,9 @@
|
||||
"largeInputNoMatches": "Aucun résultat pour cette saisie longue",
|
||||
"entriesLabel": "Éléments du dossier",
|
||||
"inputLabel": "Filtre ou chemin",
|
||||
"fileHint": "Les fichiers ne peuvent pas être ouverts comme projet"
|
||||
"fileHint": "Les fichiers ne peuvent pas être ouverts comme projet",
|
||||
"invalidPathRepeatedSeparators": "Chemin invalide : séparateurs répétés",
|
||||
"invalidPathControlCharacters": "Chemin invalide : les caractères de contrôle ne sont pas autorisés"
|
||||
},
|
||||
"SleepTwinWorkspaceDialog": {
|
||||
"title": "Sleep Workspace",
|
||||
@@ -5507,11 +5632,10 @@
|
||||
"70715947fb": "Le script de setup ne peut pas être vide",
|
||||
"888b83bf78": "Échec de l'enregistrement du script de setup",
|
||||
"a49196d538": "S'exécute quand Orca crée un nouveau worktree.",
|
||||
"d9f2db2738": "paramètres du projet",
|
||||
"a5bb8c5135": "Enregistré dans les",
|
||||
"savedSetupCommand": "Commande de setup enregistrée.",
|
||||
"savedWithSkippedFields_one": "{{count}} champ non pris en charge ignoré. Commande de setup enregistrée.",
|
||||
"savedWithSkippedFields_other": "{{count}} champs non pris en charge ignorés. Commande de setup enregistrée."
|
||||
"savedWithSkippedFields_other": "{{count}} champs non pris en charge ignorés. Commande de setup enregistrée.",
|
||||
"savedInProjectSettings": "Enregistré dans les <settings>paramètres de ce projet</settings>"
|
||||
},
|
||||
"SetupScriptPromptCardViews": {
|
||||
"96a7f4198c": "Enregistrer le setup local",
|
||||
@@ -5519,20 +5643,17 @@
|
||||
"31b8b01a45": "Paramètres",
|
||||
"4a98f907ae": "Réessayer",
|
||||
"0a98169776": "Ajoutez une commande de setup à exécuter quand Orca crée de nouveaux worktrees.",
|
||||
"8349e3fa4c": ". Enregistrez-la pour l'exécuter sur les nouveaux worktrees.",
|
||||
"b56d1322f7": "Une commande de setup a été trouvée dans",
|
||||
"aef6c0a213": "Enregistrez la commande détectée pour l'exécuter chaque fois qu'Orca crée un worktree.",
|
||||
"660cdc17f8": "scripts de setup partagés. Ajoutez une commande locale, ou changez la source dans les paramètres.",
|
||||
"8f6be51aa1": "orca.yaml",
|
||||
"bb879db364": "Ce dépôt ignore les",
|
||||
"0155fb9ed3": "Impossible de vérifier le script de setup de ce dépôt pour le moment.",
|
||||
"eefa756190": "Configurer manuellement",
|
||||
"ca4efcbc25": "Enregistrer",
|
||||
"d02e6a42b1": "Détecté depuis",
|
||||
"fdbc6cb064": "Script de setup détecté",
|
||||
"7275f674cc": "Setup détecté",
|
||||
"822ff300ad": "Ignorer",
|
||||
"5bfd5c8779": "Ignorer les scripts de setup"
|
||||
"5bfd5c8779": "Ignorer les scripts de setup",
|
||||
"detectedFromSource": "Détecté dans <source>{{source}}</source>",
|
||||
"ignoresSharedSetup": "Ce dépôt ignore les scripts de setup partagés de <yaml>orca.yaml</yaml>. Ajoutez une commande locale ou changez la source dans les paramètres.",
|
||||
"foundSetupCommandIn": "Une commande de setup a été trouvée dans <source>{{source}}</source>. Enregistrez-la pour l’exécuter pour les nouveaux worktrees."
|
||||
},
|
||||
"SidebarFeedbackDialog": {
|
||||
"8bf619e4cf": "Annuler",
|
||||
@@ -5715,8 +5836,9 @@
|
||||
"WorkspaceKanbanDrawerHeader": {
|
||||
"f369f5c5a3": "Fermer",
|
||||
"e1a34450fc": "Organisez les espaces de travail par statut et ouvrez les cartes d'espace de travail.",
|
||||
"81870af08f": "sélectionnés",
|
||||
"c6a77ab0f4": "Tableau des espaces de travail"
|
||||
"c6a77ab0f4": "Tableau des espaces de travail",
|
||||
"selectedCount_one": "{{count}} sélectionné",
|
||||
"selectedCount_other": "{{count}} sélectionnés"
|
||||
},
|
||||
"WorkspaceKanbanPinDropTarget": {
|
||||
"c30151c5ee": "Déposez ici pour épingler sans changer de statut.",
|
||||
@@ -5817,7 +5939,8 @@
|
||||
"2931b42b09": "État : brouillon {{value0}}",
|
||||
"e888362def": "État : fermé",
|
||||
"f394b3e86e": "État : fusionné",
|
||||
"af2b07bda5": "État : {{value0}}"
|
||||
"af2b07bda5": "État : {{value0}}",
|
||||
"checksStatus": "Vérifications : {{status}}"
|
||||
},
|
||||
"WorktreeCardPorts": {
|
||||
"3240f320d7": "Ports actifs",
|
||||
@@ -5828,8 +5951,9 @@
|
||||
"5d1a5d51bb": "Processus arrêté sur {{value0}}",
|
||||
"c89f290e25": "{{value0}} copié",
|
||||
"d1113f4660": "Échec de l'ouverture du navigateur",
|
||||
"fed49903c9": "{{value0}} {{value1}} actif(s)",
|
||||
"unknownProcess": "Processus inconnu"
|
||||
"unknownProcess": "Processus inconnu",
|
||||
"livePorts_one": "{{count}} port actif",
|
||||
"livePorts_other": "{{count}} ports actifs"
|
||||
},
|
||||
"WorktreeContextMenu": {
|
||||
"c39c37676a": "Créez un groupe et déplacez-y ce projet.",
|
||||
@@ -5874,7 +5998,6 @@
|
||||
"f9dc6cc5d3": "Renommer le groupe de projets",
|
||||
"370c6a55dd": "Réinitialiser les filtres",
|
||||
"b7acbf038b": "Aucun espace de travail trouvé",
|
||||
"0c6ee14f23": "enfant",
|
||||
"c83968f87f": "Retirer le projet",
|
||||
"64e55f7f01": "Retirer du groupe",
|
||||
"4a08fb55f2": "Déplacer vers un groupe",
|
||||
@@ -5887,12 +6010,7 @@
|
||||
"4d7b73658c": "Renommer le groupe",
|
||||
"79465e9034": "Actions du groupe pour {{value0}}",
|
||||
"bfbedc547b": "Worktrees",
|
||||
"045a8aed48": "enfants",
|
||||
"bb85cd86ba": "Créer un espace de travail pour {{value0}}",
|
||||
"20bebf9c7f": "Afficher {{value0}} espace de travail enfant",
|
||||
"c1f4a31623": "Afficher {{value0}} espaces de travail enfants",
|
||||
"e97297cb75": "Masquer {{value0}} espace de travail enfant",
|
||||
"0cd15956d4": "Masquer {{value0}} espaces de travail enfants",
|
||||
"bd37a57ac8": "Créer un espace de travail pour {{value0}}",
|
||||
"b667b59632": "Certains projets n'ont pas pu être retirés d'Orca",
|
||||
"groupDeleteFailed": "Échec de la suppression du groupe",
|
||||
@@ -5903,8 +6021,14 @@
|
||||
"sidebarRowMissing": "La cible n'existe plus",
|
||||
"failedUnnestWorkspace": "Échec de la désimbrication de l'espace de travail",
|
||||
"hostRepairRequired": "Re-pair required",
|
||||
"groupProjectsRemainedSingular": "{{remaining}} projet sur {{count}} est resté après la suppression du groupe.",
|
||||
"groupProjectsRemainedPlural": "Projets restés après la suppression du groupe : {{remaining}} sur {{count}}."
|
||||
"showChildWorkspaces_one": "Afficher {{count}} espace de travail enfant",
|
||||
"hideChildWorkspaces_one": "Masquer {{count}} espace de travail enfant",
|
||||
"showChildWorkspaces_other": "Afficher {{count}} espaces de travail enfants",
|
||||
"hideChildWorkspaces_other": "Masquer {{count}} espaces de travail enfants",
|
||||
"childCount_one": "{{count}} enfant",
|
||||
"childCount_other": "{{count}} enfants",
|
||||
"groupProjectsRemained_one": "Projets conservés après suppression du groupe : {{remaining}} sur {{count}}.",
|
||||
"groupProjectsRemained_other": "Projets conservés après suppression du groupe : {{remaining}} sur {{count}}."
|
||||
},
|
||||
"WorktreeMetaDialog": {
|
||||
"3db0a2a593": "Annuler",
|
||||
@@ -5968,7 +6092,6 @@
|
||||
"d40d436fc2": "Impossible de mettre à jour la visibilité du worktree. Réessayez.",
|
||||
"unsupportedHost": "Cet hôte ne prend pas en charge la visibilité des worktrees par source. Mettez à jour Orca sur l'hôte pour modifier ce paramètre.",
|
||||
"search": "Rechercher des worktrees masqués",
|
||||
"searchPlaceholder": "Rechercher parmi {{value0}} worktrees…",
|
||||
"noMatches": "Aucun worktree correspondant",
|
||||
"allShown": "Tous les worktrees détectés sont affichés",
|
||||
"noneFound": "Aucun worktree non Orca trouvé",
|
||||
@@ -5976,7 +6099,9 @@
|
||||
"disableSource": "Désactivez une source pour gérer ses worktrees individuellement.",
|
||||
"appearWhenDetected": "Les nouveaux worktrees apparaîtront ici quand Orca les détectera.",
|
||||
"openGlobalSettings": "Gérer dans les paramètres globaux",
|
||||
"globalSettingsSources": "Ces sources ont un paramètre global que vous pouvez remplacer ici :"
|
||||
"globalSettingsSources": "Ces sources ont un paramètre global que vous pouvez remplacer ici :",
|
||||
"searchHiddenPlaceholder_one": "Rechercher parmi {{count}} worktree…",
|
||||
"searchHiddenPlaceholder_other": "Rechercher parmi {{count}} worktrees…"
|
||||
},
|
||||
"add": {
|
||||
"repo": {
|
||||
@@ -6170,13 +6295,13 @@
|
||||
"7a8b9c0d1e": "Ouvrir les paramètres",
|
||||
"8b9c0d1e2f": "Retirer l'hôte",
|
||||
"workspacesFailed": "Impossible de retirer {{count}} espaces de travail de cet hôte. L'hôte a été conservé pour vous permettre de réessayer.",
|
||||
"oneWorkspace": "1 espace de travail",
|
||||
"manyWorkspaces": "{{count}} espaces de travail",
|
||||
"hostHasWorkspacesDefault": "Retire {{value0}} et ses identifiants de cet ordinateur. Ses {{value1}} restent dans Orca — les fichiers distants ne sont pas touchés.",
|
||||
"alsoForgetLocal": "Retirer aussi ces {{value0}} d'Orca",
|
||||
"advanced": "Avancé",
|
||||
"alsoForgetLocalHint": "Les retire uniquement d'Orca. Les fichiers, worktrees et branches distants restent intacts.",
|
||||
"wslHostEndsTerminalsUnlessShared": "Retire {{value0}} d'Orca. Sauf si un autre Orca ouvert sur cet ordinateur l'utilise, cela ferme aussi ses terminaux ouverts et arrête le serveur d'Orca dans cette distro. Les fichiers de la distro restent intacts."
|
||||
"wslHostEndsTerminalsUnlessShared": "Retire {{value0}} d'Orca. Sauf si un autre Orca ouvert sur cet ordinateur l'utilise, cela ferme aussi ses terminaux ouverts et arrête le serveur d'Orca dans cette distro. Les fichiers de la distro restent intacts.",
|
||||
"hostKeepsWorkspaces_one": "Retire {{host}} et ses identifiants de cet ordinateur. Son {{count}} espace de travail reste dans Orca — les fichiers distants ne sont pas modifiés.",
|
||||
"hostKeepsWorkspaces_other": "Retire {{host}} et ses identifiants de cet ordinateur. Ses {{count}} espaces de travail restent dans Orca — les fichiers distants ne sont pas modifiés.",
|
||||
"alsoRemoveWorkspaces_one": "Retirer aussi cet espace de travail d’Orca",
|
||||
"alsoRemoveWorkspaces_other": "Retirer aussi ces {{count}} espaces de travail d’Orca"
|
||||
},
|
||||
"HostRenameDialog": {
|
||||
"1a2b3c4d5e": "Renommer l'hôte",
|
||||
@@ -6249,7 +6374,7 @@
|
||||
"current": "Actuel",
|
||||
"searchPlaceholder": "Rechercher des worktrees...",
|
||||
"empty": "Aucun worktree éligible correspondant.",
|
||||
"setParentFor": "Définir le parent pour"
|
||||
"setParentForName": "Définir le parent de <name>{{name}}</name>"
|
||||
},
|
||||
"WorktreeCardStatusSlot": {
|
||||
"branchIdentity": "Branche",
|
||||
@@ -6259,12 +6384,12 @@
|
||||
},
|
||||
"NewExternalWorktreesInboxLine": {
|
||||
"9f2d4c8b17": "Masquer définitivement les worktrees externes pour {{value0}}",
|
||||
"2a6f31d8c7": "worktree masqué",
|
||||
"5b90e4a2f6": "worktrees masqués",
|
||||
"7f18c5b0d3": "Examiner {{value0}} worktree masqué dans {{value1}}",
|
||||
"4e2b7a9c05": "Examiner {{value0}} worktrees masqués dans {{value1}}",
|
||||
"c3e8a1f4b2": "Ne plus afficher",
|
||||
"6c07f3a91e": "{{value0}} sur {{value1}}"
|
||||
"6c07f3a91e": "{{value0}} sur {{value1}}",
|
||||
"hiddenWorktreesNoun_one": "worktree masqué",
|
||||
"hiddenWorktreesNoun_other": "worktrees masqués",
|
||||
"reviewHiddenWorktrees_one": "Examiner {{count}} worktree masqué dans {{scope}}",
|
||||
"reviewHiddenWorktrees_other": "Examiner {{count}} worktrees masqués dans {{scope}}"
|
||||
},
|
||||
"NoticeHostGlyph": {
|
||||
"hostDisconnected": "{{hostName}} déconnecté",
|
||||
@@ -6355,8 +6480,9 @@
|
||||
"sshConfigPickerRetry": "Réessayer",
|
||||
"sshConfigPickerResolving": "Lecture…",
|
||||
"pairingHelpShareComputer": "Créez-le dans Réglages → Serveurs Orca distants → Partager cet ordinateur sur l’autre ordinateur.",
|
||||
"sshImportSyncedPlural": "Ajout de {{count}} hôtes à Orca.",
|
||||
"sshImportSyncedSingular": "Ajout de {{count}} hôte à Orca."
|
||||
"sshImportSynced_one": "{{count}} hôte ajouté à Orca.",
|
||||
"sshImportSynced_other": "{{count}} hôtes ajoutés à Orca.",
|
||||
"sshConfigPickerInvalidResponse": "Réponse d’hôte de configuration SSH invalide"
|
||||
},
|
||||
"ForgetSshWorkspaceDialog": {
|
||||
"ghostBody": "{{host}} n'est plus un hôte SSH enregistré ; cet espace de travail n'est donc plus connecté à un hôte actif. Il ne peut être que retiré d'Orca — les fichiers et branches distants restent intacts.",
|
||||
@@ -6379,11 +6505,12 @@
|
||||
},
|
||||
"WorkspaceKanbanSearchField": {
|
||||
"bdb753c78d": "Aucun espace de travail correspondant",
|
||||
"4d96c209d6": "{{value0}} espaces de travail sur {{value1}} correspondent",
|
||||
"c0cd6bdf6c": "Rechercher des espaces de travail",
|
||||
"3b7ea51793": "Effacer la recherche",
|
||||
"7f1c2e94a5": "Texte de recherche trop long — le tableau n'est pas filtré",
|
||||
"9a4d0f6b21": "Trop long"
|
||||
"9a4d0f6b21": "Trop long",
|
||||
"workspacesMatch_one": "Espaces de travail correspondants : {{matchCount}} sur {{count}}",
|
||||
"workspacesMatch_other": "Espaces de travail correspondants : {{matchCount}} sur {{count}}"
|
||||
},
|
||||
"WorktreeCardSshHostControl": {
|
||||
"connectFailed": "Échec de la connexion SSH",
|
||||
@@ -6481,11 +6608,12 @@
|
||||
"developerToolsTitle": "Installez les outils en ligne de commande d'Apple",
|
||||
"developerToolsBody": "Git a besoin des outils de développement d'Apple. Exécutez ceci dans le terminal, puis revenez à Orca. Il vérifiera à nouveau automatiquement.",
|
||||
"affectedOne": "Analyse des worktrees en pause pour {{value0}}",
|
||||
"affectedMany": "Analyse des worktrees en pause pour {{value0}} projets",
|
||||
"copyCommand": "Copier la commande",
|
||||
"copied": "Commande copiée",
|
||||
"retry": "Réessayer maintenant",
|
||||
"restored": "Git fonctionne à nouveau. Worktrees actualisés."
|
||||
"restored": "Git fonctionne à nouveau. Worktrees actualisés.",
|
||||
"affectedProjects_one": "Analyse des worktrees en pause pour {{count}} projet",
|
||||
"affectedProjects_other": "Analyse des worktrees en pause pour {{count}} projets"
|
||||
},
|
||||
"manualSortSwitch": {
|
||||
"title": "Tri modifié en Manuel",
|
||||
@@ -6530,7 +6658,8 @@
|
||||
"wslHostRemoval": {
|
||||
"keptForOthers": "Retiré de cet Orca. L'hôte reste actif pour {{value0}}.",
|
||||
"partial": "L'hôte a été retiré, mais quelque chose dans la distro est encore en cours d'exécution : {{value0}}",
|
||||
"pending": "Orca n'a pas encore supprimé l'hôte : {{value0}} Supprimez-le à nouveau pour réessayer, ou connectez-le pour le conserver."
|
||||
"pending": "Orca n'a pas encore supprimé l'hôte : {{value0}} Supprimez-le à nouveau pour réessayer, ou connectez-le pour le conserver.",
|
||||
"unavailable": "Les hôtes WSL ne sont pas disponibles sur cet ordinateur."
|
||||
},
|
||||
"addRepoWslHostFolderPicker": {
|
||||
"otherDistro": "Ce dossier se trouve dans {{value0}}, pas dans {{value1}}.",
|
||||
@@ -6585,6 +6714,42 @@
|
||||
"openingProject": "Ouverture du projet...",
|
||||
"openingFolder": "Ouverture du dossier...",
|
||||
"chooseFolder": "Choisissez un dossier..."
|
||||
},
|
||||
"DeleteNestedWorktreesDialog": {
|
||||
"unsupportedHost": "Cet hôte ne prend pas en charge la suppression de worktrees imbriqués."
|
||||
},
|
||||
"WorktreeCardHelpers": {
|
||||
"checksPassing": "Réussies",
|
||||
"checksFailing": "En échec",
|
||||
"checksPending": "En attente",
|
||||
"conflictMerging": "Merge en cours",
|
||||
"conflictRebasing": "Rebase en cours",
|
||||
"conflictCherryPicking": "Cherry-pick en cours"
|
||||
},
|
||||
"folderWorkspaceComposer": {
|
||||
"defaultWorkspaceName": "Espace de travail {{name}}"
|
||||
},
|
||||
"workspaceKanbanStatus": {
|
||||
"defaultLabel": "Statut {{number}}"
|
||||
},
|
||||
"worktreeCardModel": {
|
||||
"sparsePreviewMore_one": "{{preview}}, +{{count}} de plus",
|
||||
"sparsePreviewMore_other": "{{preview}}, +{{count}} de plus"
|
||||
},
|
||||
"worktreeCardPrDisplay": {
|
||||
"mrDetailsUnavailable": "Détails de la MR indisponibles",
|
||||
"prDetailsUnavailable": "Détails de la PR indisponibles",
|
||||
"loadingMr": "Chargement de la MR…",
|
||||
"loadingPr": "Chargement de la PR…"
|
||||
},
|
||||
"HostSectionHeader": {
|
||||
"workspaceCount_one": "{{count}} espace de travail",
|
||||
"workspaceCount_other": "{{count}} espaces de travail"
|
||||
},
|
||||
"titleDerivedAgentRows": {
|
||||
"needsInput": "Intervention requise",
|
||||
"running": "En cours",
|
||||
"idle": "Inactif"
|
||||
}
|
||||
},
|
||||
"shared": {
|
||||
@@ -14177,17 +14342,8 @@
|
||||
"saveLocation": "Définir l'emplacement"
|
||||
},
|
||||
"SmartWorkspaceNameField": {
|
||||
"2a0d535f69": "Créer une nouvelle branche",
|
||||
"a44229ce4d": "comme nom d'espace de travail",
|
||||
"766083a596": "\"",
|
||||
"34ca97bce3": "\"",
|
||||
"b1a7d679ba": "Utiliser",
|
||||
"e57c53727c": "Ajouter un projet...",
|
||||
"a76fcb4fa0": "Basculer vers",
|
||||
"eadf877af5": "Conserver",
|
||||
"6859e2896c": "Annuler",
|
||||
"9ef1a7c4b0": ", qui est différent du projet sélectionné.",
|
||||
"ad188067ae": "L'URL GitHub pointe vers",
|
||||
"4bd98f1091": "Changer de projet ?",
|
||||
"0c9e668e3a": "Effacer",
|
||||
"7199ff19c7": "Effacer la source sélectionnée",
|
||||
@@ -14206,7 +14362,6 @@
|
||||
"fda67f0b61": "projet actuel",
|
||||
"3e8bb1176a": "Connectez Linear dans les réglages pour rechercher des issues.",
|
||||
"switchTaskSourceTitle": "Changer de source de tâches ?",
|
||||
"differentTaskSource": ", qui est différent de la source de tâches sélectionnée.",
|
||||
"currentTaskSource": "source de tâches actuelle",
|
||||
"placeholderNameOrLinearUrl": "Saisissez un nom, une URL Linear ou une URL Jira",
|
||||
"placeholderWorkspaceName": "Saisissez un nom d'espace de travail",
|
||||
@@ -14235,7 +14390,13 @@
|
||||
"emoji": "Émoji",
|
||||
"loadingLinearIssue": "Chargement de l'issue Linear…",
|
||||
"linearLoginUnreadableTitle": "Reconnectez Linear",
|
||||
"linearLoginUnreadableBody": "Impossible de lire la connexion Linear enregistrée. Reconnectez-la dans les réglages."
|
||||
"linearLoginUnreadableBody": "Impossible de lire la connexion Linear enregistrée. Reconnectez-la dans les réglages.",
|
||||
"keepRepo": "Conserver {{name}}",
|
||||
"switchToRepo": "Passer à {{name}}",
|
||||
"crossRepoDifferentTaskSource": "L’URL GitHub pointe vers {{repo}}, qui diffère de la source de tâches sélectionnée.",
|
||||
"crossRepoDifferentProject": "L’URL GitHub pointe vers {{repo}}, qui diffère du projet sélectionné.",
|
||||
"useAsWorkspaceName": "Utiliser <name>« {{name}} »</name> comme nom d’espace de travail",
|
||||
"createNewBranchNamed": "Créer une nouvelle branche <name>{{name}}</name>"
|
||||
},
|
||||
"ProjectCombobox": {
|
||||
"empty": "Aucun projet ne correspond à votre recherche.",
|
||||
@@ -14249,6 +14410,11 @@
|
||||
"listLabel": "Cibles d'exécution",
|
||||
"label": "Exécuter sur",
|
||||
"browse": "Parcourir les cibles d'exécution"
|
||||
},
|
||||
"projectCombobox": {
|
||||
"recentHeading": "Récents",
|
||||
"projectsHeading": "Projets",
|
||||
"foldersHeading": "Dossiers"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -15848,7 +16014,10 @@
|
||||
},
|
||||
"dashboard": {
|
||||
"DashboardAgentChildDisclosure": {
|
||||
"1b57ce9fa4": "{{value0}} {{value1}} enfant {{value2}}"
|
||||
"hideChildAgents_one": "Masquer {{count}} agent enfant",
|
||||
"hideChildAgents_other": "Masquer {{count}} agents enfants",
|
||||
"showChildAgents_one": "Afficher {{count}} agent enfant",
|
||||
"showChildAgents_other": "Afficher {{count}} agents enfants"
|
||||
},
|
||||
"DashboardAgentRow": {
|
||||
"912e136cd9": "Envoyer",
|
||||
@@ -15856,7 +16025,13 @@
|
||||
"a41fb5376e": "Réduire les détails",
|
||||
"5ae84475cc": "Ignorer",
|
||||
"b06e13fcf7": "Rejeter l'agent",
|
||||
"0272969e28": "Envoyer à cet agent"
|
||||
"0272969e28": "Envoyer à cet agent",
|
||||
"justNow": "à l’instant",
|
||||
"timeAgo": "il y a {{duration}}",
|
||||
"dispatchedAgents_one": "{{agentType}} - {{count}} agent envoyé",
|
||||
"dispatchedAgents_other": "{{agentType}} - {{count}} agents envoyés",
|
||||
"startedAgo": "démarré {{time}}",
|
||||
"doneAgo": "terminé {{time}}"
|
||||
},
|
||||
"DashboardAgentRowMessage": {
|
||||
"0a01046763": "interrompu",
|
||||
@@ -16982,14 +17157,15 @@
|
||||
"clearNotification": "Effacer la notification"
|
||||
},
|
||||
"ActivityTitlebarControls": {
|
||||
"f915168c8e": "non lu",
|
||||
"d6a8de3934": "agents",
|
||||
"dc708f3eff": "Fermer les agents"
|
||||
"dc708f3eff": "Fermer les agents",
|
||||
"unreadCount_one": "{{count}} non lu",
|
||||
"unreadCount_other": "{{count}} non lus"
|
||||
},
|
||||
"clearCompleted": {
|
||||
"clearedOne": "Effacé 1 agent terminé",
|
||||
"clearedMany": "Agents terminés {{count}} autorisés",
|
||||
"undo": "Défaire"
|
||||
"undo": "Défaire",
|
||||
"cleared_one": "{{count}} agent terminé retiré de la liste",
|
||||
"cleared_other": "{{count}} agents terminés retirés de la liste"
|
||||
},
|
||||
"standaloneWorktree": {
|
||||
"floatingTerminal": "Terminal flottant",
|
||||
@@ -17815,6 +17991,16 @@
|
||||
"unreachable": "Impossible de joindre Jira. Vérifiez votre connexion et réessayez.",
|
||||
"loadFailed": "Impossible de charger les issues Jira. Réessayez dans un instant.",
|
||||
"errorWithCode": "Erreur {{code}} : {{summary}}"
|
||||
},
|
||||
"cmdJ": {
|
||||
"quickActionUnavailable": {
|
||||
"workspaceLoading": "Impossible d’exécuter « {{action}} » — l’espace de travail est encore en cours de chargement.",
|
||||
"noActiveWorkspace": "Impossible d’exécuter « {{action}} » — aucun espace de travail n’est actif.",
|
||||
"workspaceDisconnected": "Impossible d’exécuter « {{action}} » — l’espace de travail est déconnecté.",
|
||||
"noTabGroup": "Impossible d’exécuter « {{action}} » — aucun groupe d’onglets n’est disponible.",
|
||||
"noMovableChat": "Impossible d’exécuter « {{action}} » — aucun chat déplaçable n’est actif.",
|
||||
"clientUnsupported": "Impossible d’exécuter « {{action}} » — ce client et cet environnement d’exécution ne le prennent pas en charge."
|
||||
}
|
||||
}
|
||||
},
|
||||
"i18n": {
|
||||
@@ -18977,8 +19163,6 @@
|
||||
"none": "Aucun"
|
||||
},
|
||||
"idleSignalField": "Signal d'inactivité",
|
||||
"selectionVanishedOne": "1 espace de travail sélectionné n'existe plus.",
|
||||
"selectionVanished": "{{value0}} espaces de travail sélectionnés n'existent plus.",
|
||||
"updatedAgo": "{{value0}} mis à jour",
|
||||
"refreshing": "Actualisation…",
|
||||
"refreshingProgress": "Actualisation {{value0}}/{{value1}}",
|
||||
@@ -18993,12 +19177,6 @@
|
||||
"gitStatusCheckFailed": "Échec de la vérification de l'état git",
|
||||
"gitStatusUnverified": "L'état git n'a pas pu être vérifié",
|
||||
"deleteAnyway": "Supprimer quand même",
|
||||
"forceDeleteProjectionOne": "{{count}} espace de travail présente actuellement un risque et peut nécessiter une suppression forcée",
|
||||
"forceDeleteProjectionMany": "{{count}} espaces de travail présentent actuellement un risque et peuvent nécessiter une suppression forcée",
|
||||
"selectionWithheldOne": "1 espace de travail sélectionné est masqué par les filtres actuels et a été désélectionné.",
|
||||
"selectionWithheld": "{{value0}} espaces de travail sélectionnés sont masqués par les filtres actuels et ont été désélectionnés.",
|
||||
"selectAllCountOne": "Sélectionner 1 espace de travail vérifié côté sécurité",
|
||||
"selectAllCount": "Sélectionner les {{value0}} espaces de travail vérifiés côté sécurité",
|
||||
"appliedFilters": "Filtres appliqués",
|
||||
"removeFilter": "Supprimer le filtre {{value0}}",
|
||||
"chip": {
|
||||
@@ -19042,18 +19220,28 @@
|
||||
"locked": "Verrouillé",
|
||||
"retainedAgents": "Agents terminés"
|
||||
}
|
||||
}
|
||||
},
|
||||
"forceDeleteRisk_one": "{{count}} espace de travail présente actuellement un risque et peut nécessiter une suppression forcée",
|
||||
"forceDeleteRisk_other": "{{count}} espaces de travail présentent actuellement un risque et peuvent nécessiter une suppression forcée",
|
||||
"selectionVanishedCount_one": "{{count}} espace de travail sélectionné n’existe plus.",
|
||||
"selectionVanishedCount_other": "{{count}} espaces de travail sélectionnés n’existent plus.",
|
||||
"selectionWithheldCount_one": "{{count}} espace de travail sélectionné est masqué par les filtres actuels et a été désélectionné.",
|
||||
"selectionWithheldCount_other": "{{count}} espaces de travail sélectionnés sont masqués par les filtres actuels et ont été désélectionnés.",
|
||||
"selectAllSafetyChecked_one": "Sélectionner {{count}} espace de travail dont la sécurité a été vérifiée",
|
||||
"selectAllSafetyChecked_other": "Sélectionner tous les {{count}} espaces de travail dont la sécurité a été vérifiée"
|
||||
},
|
||||
"scan": {
|
||||
"progress": "Analyse des espaces de travail ({{value0}}/{{value1}})",
|
||||
"singleError": "Impossible de vérifier {{value0}} : {{value1}}. Certains espaces de travail peuvent manquer. Actualisez pour réessayer.",
|
||||
"moreErrors": ", +{{value0}} autres",
|
||||
"multipleErrors": "Impossible de vérifier les dépôts {{value0}} ({{value1}}{{value2}}). Certains espaces de travail peuvent manquer. Actualisez pour réessayer.",
|
||||
"noWorkspaces": "Aucun espace de travail trouvé.",
|
||||
"fallbackRepository": "un dépôt",
|
||||
"gitListFailed": "Git n'a pas pu lister les worktrees",
|
||||
"readyOne": "1 espace de travail trouvé.",
|
||||
"readyMany": "{{value0}} espaces de travail trouvés."
|
||||
"multipleErrorsWithMore_one": "Impossible de vérifier {{count}} dépôt ({{names}}, +{{moreCount}} de plus). Certains espaces de travail peuvent manquer. Actualisez pour réessayer.",
|
||||
"multipleErrorsWithMore_other": "Impossible de vérifier {{count}} dépôts ({{names}}, +{{moreCount}} de plus). Certains espaces de travail peuvent manquer. Actualisez pour réessayer.",
|
||||
"multipleErrorsCount_one": "Impossible de vérifier {{count}} dépôt ({{names}}). Certains espaces de travail peuvent manquer. Actualisez pour réessayer.",
|
||||
"multipleErrorsCount_other": "Impossible de vérifier {{count}} dépôts ({{names}}). Certains espaces de travail peuvent manquer. Actualisez pour réessayer.",
|
||||
"readyCount_one": "{{count}} espace de travail trouvé.",
|
||||
"readyCount_other": "{{count}} espaces de travail trouvés."
|
||||
},
|
||||
"relativeTime": {
|
||||
"never": "Jamais",
|
||||
@@ -20376,7 +20564,6 @@
|
||||
"repositoryLoading": "L'identité du dépôt est encore en cours de chargement. Réessayez dès qu'elle est disponible.",
|
||||
"duplicate": "Ce lien est déjà joint.",
|
||||
"title": "Travail lié",
|
||||
"count": "{{count}} liés",
|
||||
"empty": "Regroupez toutes les revues et tâches de cet espace de travail.",
|
||||
"reviews": "Revues",
|
||||
"tasks": "Issues et tâches",
|
||||
@@ -20384,7 +20571,6 @@
|
||||
"open": "Ouvrir le lien",
|
||||
"unlinkItem": "Dissocier {{label}}",
|
||||
"unlink": "Dissocier de l'espace de travail",
|
||||
"show": "Afficher {{count}} revues et tâches liées",
|
||||
"details": "Détails de l'espace de travail",
|
||||
"description": "Joignez des revues et des tâches, et conservez des notes pour cet espace de travail.",
|
||||
"commentHelp": "Markdown pris en charge. Entrée ou {{shortcut}} pour enregistrer · Maj+Entrée pour un retour à la ligne.",
|
||||
@@ -20437,7 +20623,11 @@
|
||||
"checksPassing": "Réussi",
|
||||
"checksUnknown": "Inconnu",
|
||||
"checksNeutral": "Neutre",
|
||||
"allReviewChecks": "Revues : {{count}} · Vérifications : {{status}}"
|
||||
"allReviewChecks": "Revues : {{count}} · Vérifications : {{status}}",
|
||||
"showLinked_one": "Afficher {{count}} revue ou tâche liée",
|
||||
"showLinked_other": "Afficher {{count}} revues et tâches liées",
|
||||
"linkedCount_one": "{{count}} lié",
|
||||
"linkedCount_other": "{{count}} liés"
|
||||
},
|
||||
"attachments": {
|
||||
"updateRuntime": "Mettez à jour le runtime distant pour modifier les liens de l'espace de travail",
|
||||
@@ -20637,8 +20827,9 @@
|
||||
},
|
||||
"compact": {
|
||||
"linked": "Lié",
|
||||
"linkedAndScanned": "{{value0}} dans les arbres de travail liés · {{value1}} espaces de travail",
|
||||
"linkedAndUnavailable": "{{value0}} dans les arbres de travail liés · {{value1}} indisponible"
|
||||
"linkedAndUnavailable": "{{value0}} dans les arbres de travail liés · {{value1}} indisponible",
|
||||
"linkedAndScannedCount_one": "{{size}} dans les worktrees liés · {{count}} espace de travail",
|
||||
"linkedAndScannedCount_other": "{{size}} dans les worktrees liés · {{count}} espaces de travail"
|
||||
},
|
||||
"changes": {
|
||||
"empty": "Aucun fichier correspondant.",
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user