fix(i18n): translate Settings help as whole sentences instead of fragments (#28185)

* fix(i18n): correct Korean Settings translations

Consolidates the Korean Settings corrections from the community audit
(#27820) into one change. 514 catalog values are corrected: reversed
meanings (session search privacy notice), literal machine glosses
(Custom as 관습, gutter as 배수구, Open as 열려 있는), the terminal
caret named after the Cursor app, and Latin terminal/agent/repo left
inside Korean prose. Every value is pinned in the ko key overrides so a
catalog repair cannot revert it.

Co-authored-by: YEONGUK LEE <contact@abruption.dev>

* fix(i18n): keep the contributor's wording where it was already correct

Co-authored-by: YEONGUK LEE <contact@abruption.dev>

* fix(i18n): translate dictation shortcut help as complete sentences

* fix(i18n): retain existing dictation copy in other locales

* fix(i18n): translate complete settings count sentences

* fix(i18n): translate Git settings as complete rich sentences

* fix(i18n): clarify fast-forward protection in Korean Git help

* fix(i18n): translate repository hook guidance as complete sentences

* fix(i18n): delete settings fragment keys replaced by full sentences

The four settings sentence rewrites left their old fragment keys in every
catalog, kept alive only by tests asserting the new es/fr/ja/zh sentences
equal the old fragments concatenated. Drop those tests and the 32
now-unreferenced keys from all catalogs and the Korean overrides.

Co-authored-by: YEONGUK LEE <contact@abruption.dev>

* fix(i18n): align Korean dictation, Git, and setup-wait help with the English

Name the dictation modes with the same 토글/길게 누르기 labels as the mode
buttons, drop the Git fast-forward clauses the English does not contain,
and replace the leftover Latin "agent" in the setup-wait option.

Co-authored-by: YEONGUK LEE <contact@abruption.dev>

* fix(i18n): translate the new settings sentences faithfully in es, fr, ja, and zh

The sentence rewrites were assembled from the old machine-translated
fragments, carrying over English plural "s" suffixes (ja/zh), broken
agreement and an inverted meaning (fr), ungrammatical clauses (es),
word-salad word order (ja/zh), and missing spaces before "when one exists".
Retranslate each from the English. Also name zh's Hold dictation mode 按住
instead of 抓住 ("grab") so the button matches its description.

Co-authored-by: YEONGUK LEE <contact@abruption.dev>

---------

Co-authored-by: YEONGUK LEE <contact@abruption.dev>
This commit is contained in:
Jinwoo Hong
2026-10-13 02:37:08 -04:00
committed by GitHub
co-authored by YEONGUK LEE
parent 1e48f446fb
commit d26b3b83a7
23 changed files with 678 additions and 415 deletions
+42 -42
View File
@@ -2141,18 +2141,6 @@
"auto.components.settings.AppearancePane.fd89b5487c": {
"ko": "라이트"
},
"auto.components.settings.AutoRenameBranchFromWorkSetting.2ee2779c05": {
"ko": "{firstPrompt}"
},
"auto.components.settings.AutoRenameBranchFromWorkSetting.69bf4830c2": {
"ko": "Orca의 항목을 포함하도록"
},
"auto.components.settings.AutoRenameBranchFromWorkSetting.800edb1e54": {
"ko": "fix-login-flow"
},
"auto.components.settings.AutoRenameBranchFromWorkSetting.a4fa380b67": {
"ko": "{assistantMessage}"
},
"auto.components.settings.AutoRenameBranchFromWorkSetting.d9b65054ef": {
"ko": ") 작업을 요약하는 짧은 이름으로 변경됩니다. Orca가 직접 이름 붙인 브랜치만 이름을 바꾸며, 푸시된 후에는 이름을 바꾸지 않습니다."
},
@@ -2291,21 +2279,9 @@
"auto.components.settings.GitPane.2351aa5a31": {
"ko": "Git 사용자 이름"
},
"auto.components.settings.GitPane.36e3de3619": {
"ko": "오래된 기록과 비교하지 않도록 합니다. Orca는 해당 브랜치에 commits 되지 않은 변경 사항이나 로컬 전용 commits이 있으면 업데이트를 건너뜁니다."
},
"auto.components.settings.GitPane.976afc6b3e": {
"ko": "워크스페이스를 만들면 Orca가 원격 기준 브랜치를 새로고침하고, 일치하는 로컬 브랜치를 안전하게 fast-forward합니다. 예:"
},
"auto.components.settings.GitPane.b9c011fbc2": {
"ko": "속도 제한"
},
"auto.components.settings.GitPane.d072a12995": {
"ko": "git diff main...HEAD"
},
"auto.components.settings.GitPane.db3a127eb1": {
"ko": "이렇게 하면 다음과 같은 명령이 유지됩니다"
},
"auto.components.settings.GitPane.f35007e6e8": {
"ko": "git-username"
},
@@ -2870,21 +2846,9 @@
"auto.components.settings.VoicePane.174da92062": {
"ko": "길게 누르기"
},
"auto.components.settings.VoicePane.295d84b849": {
"ko": "한 번 누르면 시작, 다시 누르면 중지. 길게 누르기: 누르고 있는 동안 받아쓰기"
},
"auto.components.settings.VoicePane.366e1b4f36": {
"ko": "포커스된 창에 텍스트를 받아쓰기합니다."
},
"auto.components.settings.VoicePane.4465596675": {
"ko": "누르기"
},
"auto.components.settings.VoicePane.61a16c8141": {
"ko": "추출 중..."
},
"auto.components.settings.VoicePane.7cf715f891": {
"ko": "누르고 있는 동안"
},
"auto.components.settings.VoicePane.901985625d": {
"ko": "토글"
},
@@ -3731,9 +3695,6 @@
"auto.components.settings.task.tracker.integration.cards.8c20e76308": {
"ko": "연결된 각 Jira 사이트에는 활성 런타임이 저장한 토큰이 하나씩 있습니다."
},
"auto.components.settings.task.tracker.integration.cards.9fa04a032e": {
"ko": "{{value0}}개 사이트{{value1}} 연결됨"
},
"auto.components.settings.task.tracker.integration.cards.a1093a06c7": {
"ko": "설정 작업을 표시하기 전에 Jira 액세스를 확인하는 중입니다."
},
@@ -3752,9 +3713,6 @@
"auto.components.settings.task.tracker.integration.cards.dd3529015d": {
"ko": "{{value0}} 연결 해제"
},
"auto.components.settings.task.tracker.integration.cards.e1f5e6424c": {
"ko": "{{value0}}개 워크스페이스{{value1}} 연결됨"
},
"auto.components.settings.task.tracker.integration.cards.e2ff968276": {
"ko": "Jira 연결"
},
@@ -6526,5 +6484,47 @@
},
"auto.components.settings.SshPassphraseDialog.c3ce71aad6": {
"ko": "암호 문구를 입력하세요"
},
"auto.components.settings.AutoRenameBranchFromWorkSetting.commandTemplateDescription": {
"ko": "<basePrompt>{basePrompt}</basePrompt> 변수를 사용하면 Orca의 <promptLink>내장 브랜치 이름 프롬프트</promptLink>를 포함할 수 있습니다. <firstPrompt>{firstPrompt}</firstPrompt>와 <assistantMessage>{assistantMessage}</assistantMessage> 변수도 참조할 수 있습니다. Orca는 <example>fix-login-flow</example> 같은 마지막 세그먼트만 생성하며, 브랜치 접두사 설정은 계속 적용됩니다."
},
"auto.components.settings.GitPane.refreshLocalBaseDescription": {
"ko": "워크스페이스를 만들면 Orca가 원격 기준 브랜치를 새로고침하고 <mainBranch>main</mainBranch>이나 <masterBranch>master</masterBranch> 같은 해당 로컬 브랜치를 안전하게 앞으로 이동(fast-forward)합니다. 그러면 <diffCommand>git diff main...HEAD</diffCommand> 같은 명령이 오래된 이력과 비교하지 않습니다. 해당 브랜치에 커밋되지 않은 변경 사항이나 로컬에만 있는 커밋이 있으면 Orca는 업데이트를 건너뜁니다."
},
"auto.components.settings.RepositoryHooksSection.issueCommandDescription": {
"ko": "필요하면 기본 명령을 재정의할 수 있습니다. 연결된 이슈 또는 PR의 URL에는 <artifactUrl>{{artifact_url}}</artifactUrl> 변수를 사용하세요."
},
"auto.components.settings.RepositoryHooksSection.issueCommandSharedDefault": {
"ko": "비워 두면 <yaml>orca.yaml</yaml>에 지정된 저장소 기본값을 사용합니다."
},
"auto.components.settings.RepositoryHooksSection.issueCommandOptionalDefault": {
"ko": "비워 두면 <yaml>orca.yaml</yaml>에 지정된 저장소 기본값이 있는 경우 사용합니다."
},
"auto.components.settings.RepositoryHooksSection.commandSourceDescription": {
"ko": "<yaml>orca.yaml</yaml>의 명령과 로컬 명령이 모두 있으면 실행할 명령을 선택하세요."
},
"auto.components.settings.SshPane.syncedServerSingular": {
"ko": "서버 {{count}}개를 동기화했습니다."
},
"auto.components.settings.SshPane.syncedServerPlural": {
"ko": "서버 {{count}}개를 동기화했습니다."
},
"auto.components.settings.VoicePane.dictationShortcutDescription": {
"ko": "{{shortcut}} 단축키를 눌러 포커스된 패널에 텍스트를 받아쓰세요."
},
"auto.components.settings.VoicePane.dictationModesDescription": {
"ko": "토글: {{shortcut}} 단축키를 한 번 누르면 받아쓰기를 시작하고, 다시 누르면 중지합니다. 길게 누르기: {{shortcut}} 단축키를 누르고 있는 동안 받아쓰기합니다."
},
"auto.components.settings.task.tracker.integration.cards.connectedSiteSingular": {
"ko": "사이트 {{count}}개 연결됨"
},
"auto.components.settings.task.tracker.integration.cards.connectedSitePlural": {
"ko": "사이트 {{count}}개 연결됨"
},
"auto.components.settings.task.tracker.integration.cards.connectedWorkspaceSingular": {
"ko": "워크스페이스 {{count}}개 연결됨"
},
"auto.components.settings.task.tracker.integration.cards.connectedWorkspacePlural": {
"ko": "워크스페이스 {{count}}개 연결됨"
}
}
@@ -22,7 +22,8 @@ import { Switch } from '../ui/switch'
import { getAutoRenameBranchAdvancedSearchEntries } from './auto-rename-branch-search'
import { SearchableSetting } from './SearchableSetting'
import { matchesSettingsSearch, normalizeSettingsSearchQuery } from './settings-search'
import { translate } from '@/i18n/i18n'
import { Trans } from 'react-i18next'
import { i18n, translate } from '@/i18n/i18n'
type AutoRenameBranchFromWorkSettingProps = {
settings: GlobalSettings
@@ -215,78 +216,20 @@ export function AutoRenameBranchFromWorkSetting({
)}
</Label>
<p className="text-xs text-muted-foreground">
{translate(
'auto.components.settings.AutoRenameBranchFromWorkSetting.9241b59bf5',
'Use'
)}{' '}
<code className="font-mono">
{translate(
'auto.components.settings.AutoRenameBranchFromWorkSetting.c71770c455',
'{basePrompt}'
<Trans
i18n={i18n}
defaults={translate(
'auto.components.settings.AutoRenameBranchFromWorkSetting.commandTemplateDescription',
"Use <basePrompt>{basePrompt}</basePrompt> to include Orca's <promptLink>built-in branch-name prompt</promptLink>. You can also reference <firstPrompt>{firstPrompt}</firstPrompt> and <assistantMessage>{assistantMessage}</assistantMessage>. Orca generates only the final segment, like <example>fix-login-flow</example>; your branch prefix setting still applies."
)}
</code>{' '}
{translate(
'auto.components.settings.AutoRenameBranchFromWorkSetting.69bf4830c2',
"to include Orca's"
)}{' '}
<Popover>
<PopoverTrigger asChild>
<button
type="button"
className="inline rounded-sm font-medium text-foreground underline decoration-border underline-offset-2 hover:decoration-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring"
>
{translate(
'auto.components.settings.AutoRenameBranchFromWorkSetting.9c9b54e4ea',
'built-in branch-name prompt'
)}
</button>
</PopoverTrigger>
<PopoverContent
align="start"
side="bottom"
className="w-[520px] max-w-[calc(100vw-2rem)] p-3"
>
<div>
<pre className="scrollbar-sleek max-h-72 overflow-auto whitespace-pre-wrap rounded-md border border-border bg-background px-3 py-2 font-mono text-[11px] leading-relaxed text-muted-foreground">
{BUILT_IN_BRANCH_NAME_PROMPT}
</pre>
</div>
</PopoverContent>
</Popover>
{translate(
'auto.components.settings.AutoRenameBranchFromWorkSetting.56580dcf60',
'. You can also reference'
)}{' '}
<code className="font-mono">
{translate(
'auto.components.settings.AutoRenameBranchFromWorkSetting.2ee2779c05',
'{firstPrompt}'
)}
</code>{' '}
{translate(
'auto.components.settings.AutoRenameBranchFromWorkSetting.570817d126',
'and'
)}{' '}
<code className="font-mono">
{translate(
'auto.components.settings.AutoRenameBranchFromWorkSetting.a4fa380b67',
'{assistantMessage}'
)}
</code>
{translate(
'auto.components.settings.AutoRenameBranchFromWorkSetting.5d569f5199',
'. Orca generates only the final segment, like'
)}{' '}
<code className="font-mono">
{translate(
'auto.components.settings.AutoRenameBranchFromWorkSetting.800edb1e54',
'fix-login-flow'
)}
</code>
{translate(
'auto.components.settings.AutoRenameBranchFromWorkSetting.f19a56498d',
'; your branch prefix setting still applies.'
)}
components={{
basePrompt: <code className="font-mono" />,
promptLink: <BuiltInBranchNamePromptLink />,
firstPrompt: <code className="font-mono" />,
assistantMessage: <code className="font-mono" />,
example: <code className="font-mono" />
}}
/>
</p>
</div>
<textarea
@@ -363,3 +306,33 @@ export function AutoRenameBranchFromWorkSetting({
</SearchableSetting>
)
}
function BuiltInBranchNamePromptLink({
children
}: {
children?: React.ReactNode
}): React.JSX.Element {
return (
<Popover>
<PopoverTrigger asChild>
<button
type="button"
className="inline rounded-sm font-medium text-foreground underline decoration-border underline-offset-2 hover:decoration-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring"
>
{children}
</button>
</PopoverTrigger>
<PopoverContent
align="start"
side="bottom"
className="w-[520px] max-w-[calc(100vw-2rem)] p-3"
>
<div>
<pre className="scrollbar-sleek max-h-72 overflow-auto whitespace-pre-wrap rounded-md border border-border bg-background px-3 py-2 font-mono text-[11px] leading-relaxed text-muted-foreground">
{BUILT_IN_BRANCH_NAME_PROMPT}
</pre>
</div>
</PopoverContent>
</Popover>
)
}
@@ -21,7 +21,8 @@ import {
KEEP_LOCAL_MAIN_UP_TO_DATE_SECTION_ID,
getKeepLocalMainUpToDateTitle
} from './keep-local-main-up-to-date-setting'
import { translate } from '@/i18n/i18n'
import { Trans } from 'react-i18next'
import { i18n, translate } from '@/i18n/i18n'
import { SettingsRow, SettingsSegmentedControl } from './SettingsFormControls'
export { getGitPaneSearchEntries }
@@ -257,24 +258,18 @@ export function GitPane({
<div className="space-y-0.5">
<Label>{keepLocalMainUpToDateTitle}</Label>
<p className="text-xs text-muted-foreground">
{translate(
'auto.components.settings.GitPane.976afc6b3e',
'When you create a workspace, Orca refreshes the remote base and safely fast-forwards your matching local branch, such as'
)}{' '}
<code>{translate('auto.components.settings.GitPane.ffba483bae', 'main')}</code>{' '}
{translate('auto.components.settings.GitPane.5bf885be48', 'or')}{' '}
<code>{translate('auto.components.settings.GitPane.3ae3de8898', 'master')}</code>
{translate(
'auto.components.settings.GitPane.db3a127eb1',
'. This keeps commands like'
)}{' '}
<code>
{translate('auto.components.settings.GitPane.d072a12995', 'git diff main...HEAD')}
</code>{' '}
{translate(
'auto.components.settings.GitPane.36e3de3619',
'from comparing against stale history. Orca skips the update if that branch has uncommitted changes or local-only commits.'
)}
<Trans
i18n={i18n}
defaults={translate(
'auto.components.settings.GitPane.refreshLocalBaseDescription',
'When you create a workspace, Orca refreshes the remote base and safely fast-forwards your matching local branch, such as <mainBranch>main</mainBranch> or <masterBranch>master</masterBranch>. This keeps commands like <diffCommand>git diff main...HEAD</diffCommand> from comparing against stale history. Orca skips the update if that branch has uncommitted changes or local-only commits.'
)}
components={{
mainBranch: <code />,
masterBranch: <code />,
diffCommand: <code />
}}
/>
</p>
</div>
<Switch
@@ -5,7 +5,8 @@ import type {
SetupAgentStartupPolicy,
SetupRunPolicy
} from '../../../../shared/orca-yaml-hook-types'
import { translate } from '@/i18n/i18n'
import { Trans } from 'react-i18next'
import { i18n, translate } from '@/i18n/i18n'
import { matchesSettingsSearch } from './settings-search'
import { SettingsSwitch } from './SettingsFormControls'
import { RepositoryHooksYamlStatus } from './RepositoryHooksYamlStatus'
@@ -262,17 +263,14 @@ export function RepositoryHookCommandSourceSetting({
)}
</p>
<p className="text-[11px] text-muted-foreground">
{translate('auto.components.settings.RepositoryHooksSection.ac9038d2cc', 'When both')}{' '}
<code className="rounded bg-muted px-1 py-0.5">
{translate(
'auto.components.settings.RepositoryHooksSection.39da2ae12f',
'orca.yaml'
<Trans
i18n={i18n}
defaults={translate(
'auto.components.settings.RepositoryHooksSection.commandSourceDescription',
'When both <yaml>orca.yaml</yaml> and local commands exist, choose which run.'
)}
</code>{' '}
{translate(
'auto.components.settings.RepositoryHooksSection.3397879bee',
'and local commands exist, choose which run.'
)}
components={{ yaml: <code className="rounded bg-muted px-1 py-0.5" /> }}
/>
</p>
</div>
<div className="grid gap-2 md:grid-cols-3">
@@ -1,4 +1,5 @@
import { translate } from '@/i18n/i18n'
import { Trans } from 'react-i18next'
import { i18n, translate } from '@/i18n/i18n'
const ARTIFACT_URL_TEMPLATE_TOKEN = '{{artifact_url}}'
@@ -25,21 +26,16 @@ export function RepositoryIssueCommandSetting({
)}
</h5>
<p className="text-xs text-muted-foreground">
{translate(
'auto.components.settings.RepositoryHooksSection.b997331366',
'Optional override. Use'
)}{' '}
<code className="rounded bg-muted px-1 py-0.5">
{translate(
'auto.components.settings.RepositoryHooksSection.c85c2c88a2',
'{{artifact_url}}',
<Trans
i18n={i18n}
defaults={translate(
'auto.components.settings.RepositoryHooksSection.issueCommandDescription',
'Optional override. Use <artifactUrl>{{artifact_url}}</artifactUrl> for the linked issue or PR URL.',
{ artifact_url: ARTIFACT_URL_TEMPLATE_TOKEN }
)}
</code>{' '}
{translate(
'auto.components.settings.RepositoryHooksSection.70ad20f883',
'for the linked issue or PR URL.'
)}
values={{ artifact_url: ARTIFACT_URL_TEMPLATE_TOKEN }}
components={{ artifactUrl: <code className="rounded bg-muted px-1 py-0.5" /> }}
/>
</p>
</div>
<textarea
@@ -60,19 +56,21 @@ export function RepositoryIssueCommandSetting({
className="w-full min-w-0 resize-y rounded-md border border-input bg-muted/20 px-3 py-2 font-mono text-xs shadow-xs transition-[color,box-shadow] outline-none placeholder:italic placeholder:text-muted-foreground/60 focus-visible:border-ring focus-visible:bg-background focus-visible:ring-[3px] focus-visible:ring-ring/40"
/>
<p className="text-[11px] text-muted-foreground">
{translate(
'auto.components.settings.RepositoryHooksSection.52aef29e69',
'Leave blank to use the repo default from'
)}{' '}
<code className="rounded bg-muted px-1 py-0.5">
{translate('auto.components.settings.RepositoryHooksSection.39da2ae12f', 'orca.yaml')}
</code>
{hasSharedIssueCommand
? '.'
: translate(
'auto.components.settings.RepositoryHooksSection.9b12f15b1e',
'when one exists.'
)}
<Trans
i18n={i18n}
defaults={
hasSharedIssueCommand
? translate(
'auto.components.settings.RepositoryHooksSection.issueCommandSharedDefault',
'Leave blank to use the repo default from <yaml>orca.yaml</yaml>.'
)
: translate(
'auto.components.settings.RepositoryHooksSection.issueCommandOptionalDefault',
'Leave blank to use the repo default from <yaml>orca.yaml</yaml> when one exists.'
)
}
components={{ yaml: <code className="rounded bg-muted px-1 py-0.5" /> }}
/>
</p>
{issueCommandSaveError ? (
<p className="text-xs text-destructive">{issueCommandSaveError}</p>
@@ -0,0 +1,117 @@
// @vitest-environment happy-dom
import { act, type ReactNode } from 'react'
import { createRoot } from 'react-dom/client'
import { afterEach, describe, expect, it, vi } from 'vitest'
import type { SshTarget } from '../../../../shared/ssh-types'
import { setRendererUiLanguage } from '@/i18n/i18n'
import { SshPane } from './SshPane'
const mocks = vi.hoisted(() => ({
success: vi.fn(),
toast: vi.fn(),
recordReadoptions: vi.fn(),
recordInteraction: vi.fn()
}))
vi.mock('sonner', () => ({
toast: Object.assign(mocks.toast, { success: mocks.success, error: vi.fn() })
}))
vi.mock('@/store', () => {
const state = {
sshConnectionStates: new Map(),
recordFeatureInteraction: mocks.recordInteraction,
setSshTargetsMetadata: vi.fn(),
clearRemovedSshTargetState: vi.fn(),
recordSshRepoReadoptions: mocks.recordReadoptions
}
return {
useAppStore: Object.assign((select: (value: typeof state) => unknown) => select(state), {
getState: () => state
})
}
})
vi.mock('@/ssh/ssh-old-relay-terminals-action', () => ({
useSshConnectFailureToast: () => vi.fn()
}))
vi.mock('./SshTargetForm', () => ({ SshTargetForm: () => null, EMPTY_FORM: {} }))
vi.mock('./SshTargetDestructiveActions', () => ({
SshTargetDestructiveActions: ({
children
}: {
children: (actions: { busyActionForTarget: () => null; requestRemove: () => void }) => ReactNode
}) => children({ busyActionForTarget: () => null, requestRemove: () => {} })
}))
vi.mock('./SshTargetsEmptyState', () => ({ SshTargetsEmptyState: () => null }))
let root: ReturnType<typeof createRoot> | null = null
let container: HTMLDivElement | null = null
afterEach(async () => {
await act(async () => {
root?.unmount()
})
container?.remove()
container = null
root = null
Reflect.deleteProperty(window, 'api')
vi.clearAllMocks()
await setRendererUiLanguage('en')
})
describe('SSH import count notices', () => {
it.each(['en', 'ko'] as const)(
'uses complete %s sentences and preserves the no-change branch',
async (language) => {
await setRendererUiLanguage(language)
const importConfig = vi.fn(
async (): Promise<{ targets: SshTarget[]; repoReadoptions: never[] }> => ({
targets: [],
repoReadoptions: []
})
)
Object.defineProperty(window, 'api', {
configurable: true,
value: { ssh: { importConfig, listTargets: async () => [] } }
})
container = document.createElement('div')
document.body.appendChild(container)
root = createRoot(container)
await act(async () => {
root?.render(<SshPane />)
})
expect(importConfig).toHaveBeenCalledTimes(1)
expect(mocks.success).not.toHaveBeenCalled()
const button = Array.from(container.querySelectorAll('button')).find((entry) =>
entry.textContent?.includes(language === 'ko' ? '가져오기' : 'Import')
)
expect(button).toBeTruthy()
for (const count of [0, 1, 2]) {
importConfig.mockResolvedValueOnce({
targets: Array.from({ length: count }, (_, index) => ({
id: `fixture-${index}`,
label: 'Fixture',
host: 'fixture.example.test',
port: 22,
username: 'fixture'
})),
repoReadoptions: []
})
await act(async () => {
button?.dispatchEvent(new MouseEvent('click', { bubbles: true }))
})
if (count === 0) {
expect(mocks.toast).toHaveBeenLastCalledWith('~/.ssh/config already in sync')
expect(mocks.success).not.toHaveBeenCalled()
} else {
expect(mocks.success).toHaveBeenLastCalledWith(
language === 'ko'
? `서버 ${count}개를 동기화했습니다.`
: `Synced ${count} server${count === 1 ? '' : 's'}`
)
}
}
expect(importConfig).toHaveBeenCalledTimes(4)
expect(mocks.recordInteraction).toHaveBeenCalledTimes(3)
}
)
})
@@ -269,9 +269,11 @@ export function SshPane({ addTargetIntentSignal }: SshPaneProps): React.JSX.Elem
} else {
toast.success(
translate(
'auto.components.settings.SshPane.f8050f6307',
'Synced {{value0}} server{{value1}}',
{ value0: result.targets.length, value1: result.targets.length > 1 ? 's' : '' }
result.targets.length === 1
? 'auto.components.settings.SshPane.syncedServerSingular'
: 'auto.components.settings.SshPane.syncedServerPlural',
result.targets.length === 1 ? 'Synced {{count}} server' : 'Synced {{count}} servers',
{ count: result.targets.length }
)
)
}
@@ -0,0 +1,56 @@
// @vitest-environment happy-dom
import { act } from 'react'
import { createRoot } from 'react-dom/client'
import { afterEach, describe, expect, it, vi } from 'vitest'
import { getDefaultVoiceSettings } from '../../../../shared/constants'
import { i18n } from '@/i18n/i18n'
import { VoiceDictationSettingsSection } from './VoiceDictationSettingsSection'
const { shortcutLabel } = vi.hoisted(() => ({ shortcutLabel: vi.fn() }))
vi.mock('@/hooks/useShortcutLabel', () => ({ useShortcutLabel: shortcutLabel }))
vi.mock('./VoiceMicrophoneSetting', () => ({ VoiceMicrophoneSetting: () => null }))
afterEach(async () => {
await i18n.changeLanguage('en')
})
describe('dictation shortcut explanations', () => {
it.each([
['en', '⌘E'],
['en', 'Ctrl+E'],
['ko', '⌘E'],
['ko', 'Ctrl+E']
])('renders complete %s sentences with the platform shortcut %s', async (language, shortcut) => {
await i18n.changeLanguage(language)
shortcutLabel.mockReturnValue(shortcut)
const container = document.createElement('div')
const root = createRoot(container)
await act(async () => {
root.render(
<VoiceDictationSettingsSection
voiceSettings={getDefaultVoiceSettings()}
permissionPending={false}
onToggleVoiceDictation={vi.fn()}
onUpdateVoiceSettings={vi.fn()}
/>
)
})
try {
const descriptions = Array.from(container.querySelectorAll('p'), (p) => p.textContent)
if (language === 'ko') {
expect(descriptions).toEqual([
`${shortcut} 단축키를 눌러 포커스된 패널에 텍스트를 받아쓰세요.`,
`토글: ${shortcut} 단축키를 한 번 누르면 받아쓰기를 시작하고, 다시 누르면 중지합니다. 길게 누르기: ${shortcut} 단축키를 누르고 있는 동안 받아쓰기합니다.`
])
} else {
expect(descriptions).toEqual([
`Press ${shortcut} to dictate text into any focused pane.`,
`Toggle: press ${shortcut} once to start, again to stop. Hold: dictate while ${shortcut} is held.`
])
}
} finally {
await act(async () => root.unmount())
}
})
})
@@ -29,10 +29,10 @@ export function VoiceDictationSettingsSection({
{translate('auto.components.settings.VoicePane.0121960365', 'Enable Voice Dictation')}
</Label>
<p className="text-xs text-muted-foreground">
{translate('auto.components.settings.VoicePane.4465596675', 'Press')} {shortcutLabel}{' '}
{translate(
'auto.components.settings.VoicePane.366e1b4f36',
'to dictate text into any focused pane.'
'auto.components.settings.VoicePane.dictationShortcutDescription',
'Press {{shortcut}} to dictate text into any focused pane.',
{ shortcut: shortcutLabel }
)}
</p>
</div>
@@ -57,13 +57,11 @@ export function VoiceDictationSettingsSection({
{translate('auto.components.settings.VoicePane.ba4a900d1d', 'Dictation Mode')}
</Label>
<p className="text-xs text-muted-foreground">
{translate('auto.components.settings.VoicePane.ff9a680010', 'Toggle: press')}{' '}
{shortcutLabel}{' '}
{translate(
'auto.components.settings.VoicePane.295d84b849',
'once to start, again to stop. Hold: dictate while'
)}{' '}
{shortcutLabel} {translate('auto.components.settings.VoicePane.7cf715f891', 'is held.')}
'auto.components.settings.VoicePane.dictationModesDescription',
'Toggle: press {{shortcut}} once to start, again to stop. Hold: dictate while {{shortcut}} is held.',
{ shortcut: shortcutLabel }
)}
</p>
</div>
<div className="flex shrink-0 items-center rounded-md border border-border/60 bg-background/50 p-0.5">
@@ -0,0 +1,75 @@
// @vitest-environment happy-dom
import { cleanup, fireEvent, render, screen, waitFor } from '@testing-library/react'
import { afterEach, describe, expect, it } from 'vitest'
import { getDefaultSettings } from '../../../../shared/constants'
import { setRendererUiLanguage } from '@/i18n/i18n'
import { TooltipProvider } from '../ui/tooltip'
import { GitPane } from './GitPane'
import { AutoRenameBranchFromWorkSetting } from './AutoRenameBranchFromWorkSetting'
const settings = getDefaultSettings('/translation-audit')
afterEach(async () => {
cleanup()
await setRendererUiLanguage('en')
})
describe('Git settings complete translation templates', () => {
it.each(['en', 'ko'] as const)(
'keeps code tokens and the prompt popover in %s',
async (language) => {
await setRendererUiLanguage(language)
const git = render(
<TooltipProvider>
<GitPane
settings={settings}
updateSettings={() => {}}
writeSourceControlAiSettings={async () => {}}
displayedGitUsername="audit"
/>
</TooltipProvider>
)
const paragraph = Array.from(git.container.querySelectorAll('p')).find((p) =>
p.textContent?.includes('git diff main...HEAD')
)
expect(
Array.from(paragraph?.querySelectorAll('code') ?? []).map((code) => code.textContent)
).toEqual(['main', 'master', 'git diff main...HEAD'])
expect(paragraph?.textContent).not.toContain('<mainBranch>')
if (language === 'ko') {
expect(paragraph?.textContent).toContain(
'커밋되지 않은 변경 사항이나 로컬에만 있는 커밋이 있으면 Orca는 업데이트를 건너뜁니다.'
)
}
cleanup()
const prompt = render(
<AutoRenameBranchFromWorkSetting
settings={settings}
updateSettings={() => {}}
writeSourceControlAiSettings={async () => {}}
/>
)
fireEvent.click(screen.getByRole('button', { name: language === 'ko' ? '고급' : 'Advanced' }))
expect(
Array.from(prompt.container.querySelectorAll('p code')).map((code) => code.textContent)
).toEqual([
'Nautilus',
'{basePrompt}',
'{firstPrompt}',
'{assistantMessage}',
'fix-login-flow'
])
fireEvent.click(
screen.getByRole('button', {
name: language === 'ko' ? '내장 브랜치 이름 프롬프트' : 'built-in branch-name prompt'
})
)
await waitFor(() =>
expect(document.querySelector('[data-slot="popover-content"] pre')?.textContent).toContain(
'first agent prompt'
)
)
}
)
})
@@ -3,6 +3,7 @@
import { act } from 'react'
import { createRoot, type Root } from 'react-dom/client'
import { afterEach, describe, expect, it, vi } from 'vitest'
import { setRendererUiLanguage } from '@/i18n/i18n'
import { getProviderRuntimeContextKey } from '@/lib/provider-runtime-context'
import { JiraIntegrationCard } from './jira-integration-card'
@@ -92,8 +93,45 @@ describe('JiraIntegrationCard account scope', () => {
container?.remove()
container = null
mocks.store.current = null
await setRendererUiLanguage('en')
})
it.each(['en', 'ko'] as const)(
'renders complete %s connection counts without an English suffix',
async (language) => {
await setRendererUiLanguage(language)
for (const count of [0, 1, 2]) {
const state = installStore({ activeRuntimeEnvironmentId: null })
state.jiraStatus.sites = Array.from({ length: count }, (_, index) => ({
id: `site-${index}`,
displayName: 'Fixture Jira',
siteUrl: 'https://fixture.example.test'
}))
state.jiraStatus.connected = count > 0
const rendered = await renderCard()
const description =
rendered.querySelector('[data-settings-section="integrations-jira"]')?.textContent ?? ''
const expected =
language === 'ko'
? `사이트 ${count}개 연결됨`
: `${count} site${count === 1 ? '' : 's'} connected`
if (count === 0) {
expect(description).not.toContain(expected)
expect(description).not.toContain('0 site')
} else {
expect(description).toContain(expected)
}
expect(description).not.toMatch(/개(?: 사이트| 워크스페이스)?s/)
await act(async () => {
root?.unmount()
})
root = null
container?.remove()
container = null
}
}
)
it('shows remote-server account ownership and opens Hosts settings', async () => {
const state = installStore({ activeRuntimeEnvironmentId: 'runtime-1' })
@@ -84,9 +84,11 @@ export function JiraIntegrationCard(): React.JSX.Element {
description={
connected
? translate(
'auto.components.settings.task.tracker.integration.cards.9fa04a032e',
'{{value0}} site{{value1}} connected',
{ value0: siteCount, value1: siteCount === 1 ? '' : 's' }
siteCount === 1
? 'auto.components.settings.task.tracker.integration.cards.connectedSiteSingular'
: 'auto.components.settings.task.tracker.integration.cards.connectedSitePlural',
siteCount === 1 ? '{{count}} site connected' : '{{count}} sites connected',
{ count: siteCount }
)
: checking
? translate(
@@ -0,0 +1,70 @@
// @vitest-environment happy-dom
import { cleanup, render } from '@testing-library/react'
import { afterEach, describe, expect, it } from 'vitest'
import { setRendererUiLanguage } from '@/i18n/i18n'
import { RepositoryIssueCommandSetting } from './RepositoryIssueCommandSetting'
import { RepositoryHookCommandSourceSetting } from './RepositoryHookPolicySettings'
function renderSettings(hasSharedIssueCommand: boolean): ReturnType<typeof render> {
return render(
<>
<RepositoryIssueCommandSetting
issueCommandDraft=""
setIssueCommandDraft={() => {}}
hasSharedIssueCommand={hasSharedIssueCommand}
issueCommandSaveError={null}
commitIssueCommand={async () => {}}
/>
<RepositoryHookCommandSourceSetting
searchQuery=""
selectedPolicy="shared-only"
yamlState="missing"
yamlHooks={null}
copiedTemplate={false}
isAdvancedOpen
onSelectPolicy={() => {}}
onCopyTemplate={() => {}}
onAdvancedOpenChange={() => {}}
/>
</>
)
}
afterEach(async () => {
cleanup()
await setRendererUiLanguage('en')
})
describe('Repository settings complete translation templates', () => {
for (const language of ['en', 'ko'] as const) {
it.each([false, true])(
`preserves tokens and conditional defaults in ${language} (shared=%s)`,
async (shared) => {
await setRendererUiLanguage(language)
const view = renderSettings(shared)
const paragraphs = Array.from(view.container.querySelectorAll('p'))
const issue = paragraphs.find(
(p) => p.querySelector('code')?.textContent === '{{artifact_url}}'
)
expect(issue?.textContent).toContain('{{artifact_url}}')
expect(issue?.textContent).not.toContain('<artifactUrl>')
const defaultHelp = paragraphs.find(
(p) => p.querySelector('code')?.textContent === 'orca.yaml'
)
if (language === 'ko') {
expect(issue?.textContent).toContain('변수를 사용하세요.')
expect(defaultHelp?.textContent?.includes('있는 경우')).toBe(!shared)
} else {
expect(defaultHelp?.textContent?.includes('when one exists')).toBe(!shared)
}
const sourceHelp = paragraphs.find((p) =>
p.textContent?.includes(
language === 'ko' ? '로컬 명령이 모두' : 'and local commands exist'
)
)
expect(sourceHelp?.querySelector('code')?.textContent).toBe('orca.yaml')
}
)
}
})
@@ -4,6 +4,7 @@ import { act } from 'react'
import { createRoot, type Root } from 'react-dom/client'
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
import { getExecutionHostLabel } from '../../../../shared/execution-host'
import { setRendererUiLanguage } from '@/i18n/i18n'
import { getProviderRuntimeContextKey } from '@/lib/provider-runtime-context'
import { TooltipProvider } from '../ui/tooltip'
import { LinearIntegrationCard } from './task-tracker-integration-cards'
@@ -118,9 +119,40 @@ describe('LinearIntegrationCard account scope', () => {
container?.remove()
container = null
mocks.store.current = null
await setRendererUiLanguage('en')
Reflect.deleteProperty(window, 'api')
})
it.each(['en', 'ko'] as const)(
'renders complete %s connection counts without an English suffix',
async (language) => {
await setRendererUiLanguage(language)
for (const count of [0, 1, 2]) {
const state = installStore(true)
state.linearStatus.workspaces = Array.from({ length: count }, (_, index) => ({
id: `workspace-${index}`,
organizationName: 'Fixture',
displayName: 'Fixture workspace'
}))
const rendered = await renderCard()
const description =
rendered.querySelector('[data-settings-section="integrations-linear"]')?.textContent ?? ''
const expected =
language === 'ko'
? `워크스페이스 ${count}개 연결됨`
: `${count} workspace${count === 1 ? '' : 's'} connected`
expect(description).toContain(expected)
expect(description).not.toMatch(/개(?: 사이트| 워크스페이스)?s/)
await act(async () => {
root?.unmount()
})
root = null
container?.remove()
container = null
}
}
)
it('shows local-client account ownership when Linear is disconnected', async () => {
const state = installStore(false)
@@ -76,9 +76,13 @@ export function LinearIntegrationCard(): React.JSX.Element {
description={
connected
? translate(
'auto.components.settings.task.tracker.integration.cards.e1f5e6424c',
'{{value0}} workspace{{value1}} connected',
{ value0: workspaces.length, value1: workspaces.length === 1 ? '' : 's' }
workspaces.length === 1
? 'auto.components.settings.task.tracker.integration.cards.connectedWorkspaceSingular'
: 'auto.components.settings.task.tracker.integration.cards.connectedWorkspacePlural',
workspaces.length === 1
? '{{count}} workspace connected'
: '{{count}} workspaces connected',
{ count: workspaces.length }
)
: checking
? translate(
+15 -1
View File
@@ -1525,7 +1525,9 @@
},
"SshPane": {
"94c5284560": "Targets",
"a7d28dff81": "Add a remote host to connect to it in Orca."
"a7d28dff81": "Add a remote host to connect to it in Orca.",
"syncedServerPlural": "Synced {{count}} servers",
"syncedServerSingular": "Synced {{count}} server"
},
"SshTargetCard": {
"47e94bd6ba": "connected",
@@ -1822,6 +1824,18 @@
"olderTerminals_one": "{{count}} terminal started by an older version of Orca is still running on this host, and it doesn’t stop on its own. Close it in that version of Orca or end it on the host, then reconnect.",
"olderTerminals_other": "{{count}} terminals started by an older version of Orca are still running on this host, and they don’t stop on their own. Close them in that version of Orca or end them on the host, then reconnect."
},
"task": {
"tracker": {
"integration": {
"cards": {
"connectedSitePlural": "{{count}} sites connected",
"connectedSiteSingular": "{{count}} site connected",
"connectedWorkspacePlural": "{{count}} workspaces connected",
"connectedWorkspaceSingular": "{{count}} workspace connected"
}
}
}
},
"terminal": {
"windows": {
"search": {
+19 -37
View File
@@ -7097,14 +7097,6 @@
"1626524572": "Nautilus",
"0de9fda203": "Discard",
"c71770c455": "{basePrompt}",
"f19a56498d": "; your branch prefix setting still applies.",
"800edb1e54": "fix-login-flow",
"5d569f5199": ". Orca generates only the final segment, like",
"570817d126": "and",
"56580dcf60": ". You can also reference",
"9c9b54e4ea": "built-in branch-name prompt",
"69bf4830c2": "to include Orca's",
"9241b59bf5": "Use",
"a869d0edd8": "Branch name command template",
"e784ea62dc": "Advanced",
"d9b65054ef": ") to a short name summarizing the task. Only branches Orca named itself are renamed, and never after they have been pushed.",
@@ -7115,8 +7107,7 @@
"cfd82406dd": "Saving...",
"40e7be7850": "Saved",
"7c7e34a66d": "Unsaved changes",
"a4fa380b67": "{assistantMessage}",
"2ee2779c05": "{firstPrompt}"
"commandTemplateDescription": "Use <basePrompt>{basePrompt}</basePrompt> to include Orca's <promptLink>built-in branch-name prompt</promptLink>. You can also reference <firstPrompt>{firstPrompt}</firstPrompt> and <assistantMessage>{assistantMessage}</assistantMessage>. Orca generates only the final segment, like <example>fix-login-flow</example>; your branch prefix setting still applies."
},
"AutoRenameBranchPromptEditor": {
"63121132c0": "Discard",
@@ -7708,13 +7699,6 @@
"aa204f185f": "Current GitHub CLI REST, Search, and GraphQL rate limits.",
"612a440e57": "GitHub API Budget",
"2cde9044a8": "graphql",
"36e3de3619": "from comparing against stale history. Orca skips the update if that branch has uncommitted changes or local-only commits.",
"d072a12995": "git diff main...HEAD",
"db3a127eb1": ". This keeps commands like",
"3ae3de8898": "master",
"5bf885be48": "or",
"ffba483bae": "main",
"976afc6b3e": "When you create a workspace, Orca refreshes the remote base and safely fast-forwards your matching local branch, such as",
"1ec5c91e1d": "Choose whether branch names use your Git username, a custom prefix, or no prefix.",
"330f584b50": "Branch Prefix",
"1ffaadf0a0": "Prefix added to branch names when creating worktrees.",
@@ -7735,7 +7719,8 @@
"compareAgainstUpstreamTitle": "Default Compare Base",
"compareAgainstUpstreamDescription": "Choose which base Source Control uses by default for committed-change comparisons. Branch upstream follows the current branch automatically and falls back to the repository default branch when no upstream exists. You can still change the compare base per worktree from that worktree's Git panel. Pull Request and rebase targets don't change.",
"compareBaseRepositoryDefault": "Repository default",
"compareBaseBranchUpstream": "Branch upstream"
"compareBaseBranchUpstream": "Branch upstream",
"refreshLocalBaseDescription": "When you create a workspace, Orca refreshes the remote base and safely fast-forwards your matching local branch, such as <mainBranch>main</mainBranch> or <masterBranch>master</masterBranch>. This keeps commands like <diffCommand>git diff main...HEAD</diffCommand> from comparing against stale history. Orca skips the update if that branch has uncommitted changes or local-only commits."
},
"HiddenExperimentalGroup": {
"7c4e18d2f6": "Arms the bold-glitch capture gestures on this machine: {{samplingShortcut}} starts a sampling burst; {{captureShortcut}} captures pane evidence to disk.",
@@ -8173,18 +8158,13 @@
},
"RepositoryHooksSection": {
"af49e2a19e": "The file is present, but Orca could not find valid `scripts` or `issueCommand` definitions.",
"3397879bee": "and local commands exist, choose which run.",
"39da2ae12f": "orca.yaml",
"ac9038d2cc": "When both",
"32fec28f5b": "Command Source",
"bbbd6e0bc4": "Command source & orca.yaml",
"c9bc1bfd8f": "Advanced",
"610d90fdbd": "Command source and orca.yaml details.",
"52aef29e69": "Leave blank to use the repo default from",
"4084720f47": "Complete {{artifact_url}}",
"13394103bd": "Custom GitHub Issue Command",
"70ad20f883": "for the linked issue or PR URL.",
"b997331366": "Optional override. Use",
"2cc27dc12b": "Optional per-user override for the linked-issue command.",
"b91a0f297d": "Local and shared scripts that run before a worktree is archived.",
"9a100323ff": "Archive Script",
@@ -8243,8 +8223,6 @@
"e03d9a8f38": "Ask every time",
"8dbe6bedf5": "invalid",
"0e0dd5b9a5": "loaded",
"9b12f15b1e": "when one exists.",
"c85c2c88a2": "{{artifact_url}}",
"fac13f8c1e": "authoritative",
"0518758f38": "both",
"d2b3016c20": "shared",
@@ -8257,7 +8235,11 @@
"81057d5f71": "Saving...",
"da37d6f10e": "Copy",
"3149964b66": "Copied",
"waitForSetupBeforeAgent": "Wait for setup to complete before starting agent"
"waitForSetupBeforeAgent": "Wait for setup to complete before starting agent",
"issueCommandDescription": "Optional override. Use <artifactUrl>{{artifact_url}}</artifactUrl> for the linked issue or PR URL.",
"issueCommandSharedDefault": "Leave blank to use the repo default from <yaml>orca.yaml</yaml>.",
"issueCommandOptionalDefault": "Leave blank to use the repo default from <yaml>orca.yaml</yaml> when one exists.",
"commandSourceDescription": "When both <yaml>orca.yaml</yaml> and local commands exist, choose which run."
},
"RepositoryIconPicker": {
"2b7d27b93c": "Use {{value0}} repo color",
@@ -8787,7 +8769,6 @@
"a7d28dff81": "Add a remote host to connect to it in Orca.",
"94c5284560": "Targets",
"f495689b82": "Import failed",
"f8050f6307": "Synced {{value0}} server{{value1}}",
"68c13b4589": "Test failed",
"81d08bcddf": "Connection successful",
"a43de1d3ee": "Disconnect failed",
@@ -8800,7 +8781,9 @@
"4db9afce1c": "Port must be between 1 and 65535",
"0e5aa04161": "Host or SSH config alias is required",
"f1fc50dad2": "Failed to load SSH targets",
"0cda732f43": "Connection test failed"
"0cda732f43": "Connection test failed",
"syncedServerSingular": "Synced {{count}} server",
"syncedServerPlural": "Synced {{count}} servers"
},
"SshPassphraseDialog": {
"d5a234456f": "Cancel",
@@ -9196,13 +9179,8 @@
"1ba81c0ff0": "recommended",
"cfde55c7b0": "Failed to download model.",
"43fd4f454b": "Speech Model",
"7cf715f891": "is held.",
"295d84b849": "once to start, again to stop. Hold: dictate while",
"ff9a680010": "Toggle: press",
"ba4a900d1d": "Dictation Mode",
"0121960365": "Enable Voice Dictation",
"366e1b4f36": "to dictate text into any focused pane.",
"4465596675": "Press",
"62d2a84d31": "Failed to clear OpenAI API key",
"37aba8bb63": "OpenAI API key cleared",
"8572bbb537": "Failed to save OpenAI API key",
@@ -9221,7 +9199,9 @@
"f9a9cf6928": "Microphone permission is required before enabling voice dictation.",
"1eac933202": "Opened macOS Privacy & Security. Enable dictation again after granting access.",
"cd9fe37556": "Microphone permission granted",
"openAiKeyName": "Your OpenAI transcription key"
"openAiKeyName": "Your OpenAI transcription key",
"dictationShortcutDescription": "Press {{shortcut}} to dictate text into any focused pane.",
"dictationModesDescription": "Toggle: press {{shortcut}} once to start, again to stop. Hold: dictate while {{shortcut}} is held."
},
"WorktreeSymlinksSection": {
"1c1e35b219": "Remove {{value0}}",
@@ -11237,21 +11217,23 @@
"60996beda6": "Add Jira site",
"7ca5ffffdb": "Browse, create, and start work from Jira Cloud issues.",
"a1093a06c7": "Checking Jira access before showing setup actions.",
"9fa04a032e": "{{value0}} site{{value1}} connected",
"cef18762a2": "Add access with a Personal API key from your Linear settings. Full-access keys can see every team the key owner can reach.",
"6224fe9d34": "Each connected Linear workspace has one key stored by the active runtime. Full-access keys can cover all teams the key owner can access; restricted keys can be replaced any time.",
"1a12e33fe5": "Add Linear access",
"622c224082": "Add workspace access",
"eae4a9f16b": "Add Linear access to browse and link issues.",
"fe9231215b": "Checking Linear access before showing setup actions.",
"e1f5e6424c": "{{value0}} workspace{{value1}} connected",
"disconnect_all": "Disconnect",
"account_scope_prefix": "Account scope",
"2d60ec7921": "Connect a Jira Cloud site with an API token, or a self-hosted Jira with a personal access token or username and password. Credentials are sent to the selected remote runtime and stored there with runtime-supported encryption.",
"977e360b71": "Connect a Jira Cloud site with an API token, or a self-hosted Jira with a personal access token or username and password. Credentials are stored locally and encrypted when local runtime storage supports it.",
"statusConnected": "Connected",
"statusNotConnected": "Not connected",
"linearTokenName": "Your Linear API token"
"linearTokenName": "Your Linear API token",
"connectedSiteSingular": "{{count}} site connected",
"connectedSitePlural": "{{count}} sites connected",
"connectedWorkspaceSingular": "{{count}} workspace connected",
"connectedWorkspacePlural": "{{count}} workspaces connected"
}
}
}
+19 -37
View File
@@ -6830,14 +6830,6 @@
"1626524572": "Nautilus",
"0de9fda203": "Descartar",
"c71770c455": "{basePrompt}",
"f19a56498d": "; se seguirá aplicando tu prefijo de rama.",
"800edb1e54": "fix-login-flow",
"5d569f5199": ". Orca genera solo el segmento final, como",
"570817d126": "y",
"56580dcf60": ". También puedes referenciar",
"9c9b54e4ea": "prompt integrado para nombres de rama",
"69bf4830c2": "para incluir el",
"9241b59bf5": "Usa",
"a869d0edd8": "Plantilla de comando para nombre de rama",
"e784ea62dc": "Avanzado",
"d9b65054ef": ") a un nombre corto que resuma la tarea. Solo se renombran las ramas que Orca nombró por sí misma, y nunca después de que se hayan pusheado.",
@@ -6848,8 +6840,7 @@
"cfd82406dd": "Guardando...",
"40e7be7850": "Guardado",
"7c7e34a66d": "Cambios sin guardar",
"a4fa380b67": "{assistantMessage}",
"2ee2779c05": "{firstPrompt}"
"commandTemplateDescription": "Usa <basePrompt>{basePrompt}</basePrompt> para incluir el <promptLink>prompt integrado de Orca para nombres de rama</promptLink>. También puedes referenciar <firstPrompt>{firstPrompt}</firstPrompt> y <assistantMessage>{assistantMessage}</assistantMessage>. Orca genera solo el segmento final, como <example>fix-login-flow</example>; se seguirá aplicando tu prefijo de rama."
},
"AutoRenameBranchPromptEditor": {
"63121132c0": "Descartar",
@@ -7399,13 +7390,6 @@
"aa204f185f": "Límites de velocidad actuales de GitHub CLI REST, Search y GraphQL.",
"612a440e57": "Presupuesto de la API de GitHub",
"2cde9044a8": "graphql",
"36e3de3619": "comparen con historial obsoleto. Orca omite la actualización si esa rama tiene cambios sin commit o commits solo locales.",
"d072a12995": "git diff main...HEAD",
"db3a127eb1": ". Esto mantiene comandos como",
"3ae3de8898": "master",
"5bf885be48": "o",
"ffba483bae": "main",
"976afc6b3e": "Cuando creas un espacio de trabajo, Orca actualiza la base remota y adelanta de forma segura tu rama local correspondiente, como",
"1ec5c91e1d": "Elige si los nombres de rama usan tu usuario de Git, un prefijo personalizado o ningún prefijo.",
"330f584b50": "Prefijo de rama",
"1ffaadf0a0": "Prefijo que se añade a los nombres de rama al crear worktrees.",
@@ -7426,7 +7410,8 @@
"compareAgainstUpstreamTitle": "Base de comparación predeterminada",
"compareAgainstUpstreamDescription": "Elige qué base usa Control de código fuente de forma predeterminada para las comparaciones de cambios confirmados. El upstream de la rama sigue automáticamente la rama actual y recurre a la rama predeterminada del repositorio cuando no hay upstream. Aun así, puedes cambiar la base de comparación por worktree desde el panel Git de ese worktree. Los objetivos de Pull Request y rebase no cambian.",
"compareBaseRepositoryDefault": "Predeterminada del repositorio",
"compareBaseBranchUpstream": "Upstream de la rama"
"compareBaseBranchUpstream": "Upstream de la rama",
"refreshLocalBaseDescription": "Cuando creas un espacio de trabajo, Orca actualiza la base remota y adelanta de forma segura tu rama local correspondiente, como <mainBranch>main</mainBranch> o <masterBranch>master</masterBranch>. Esto evita que comandos como <diffCommand>git diff main...HEAD</diffCommand> comparen con un historial obsoleto. Orca omite la actualización si esa rama tiene cambios sin commit o commits solo locales."
},
"HiddenExperimentalGroup": {
"7c4e18d2f6": "Activa los gestos de captura del fallo de negrita en esta máquina: {{samplingShortcut}} inicia una ráfaga de muestreo; {{captureShortcut}} captura evidencia del panel en disco.",
@@ -7858,18 +7843,13 @@
},
"RepositoryHooksSection": {
"af49e2a19e": "El archivo está presente, pero Orca no pudo encontrar definiciones válidas de `scripts` o `issueCommand`.",
"3397879bee": "y hay comandos locales, elige cuáles se ejecutan.",
"39da2ae12f": "orca.yaml",
"ac9038d2cc": "Cuando ambos",
"32fec28f5b": "Origen de comandos",
"bbbd6e0bc4": "Origen de comandos y orca.yaml",
"c9bc1bfd8f": "Avanzado",
"610d90fdbd": "Origen de comandos y detalles de orca.yaml.",
"52aef29e69": "Déjalo en blanco para usar el valor predeterminado del repositorio desde",
"4084720f47": "Completar {{artifact_url}}",
"13394103bd": "Comando personalizado de Issue de GitHub",
"70ad20f883": "para la URL del Issue o PR vinculado.",
"b997331366": "Anulación opcional. Usa",
"2cc27dc12b": "Anulación opcional por usuario para el comando de Issue vinculado.",
"b91a0f297d": "Scripts locales y compartidos que se ejecutan antes de archivar un worktree.",
"9a100323ff": "Script de archivado",
@@ -7928,8 +7908,6 @@
"e03d9a8f38": "Preguntar cada vez",
"8dbe6bedf5": "inválido",
"0e0dd5b9a5": "cargado",
"9b12f15b1e": "cuando uno existe.",
"c85c2c88a2": "{{artifact_url}}",
"fac13f8c1e": "autoritativo",
"0518758f38": "ambos",
"d2b3016c20": "compartido",
@@ -7942,7 +7920,11 @@
"81057d5f71": "Guardando...",
"da37d6f10e": "Copiar",
"3149964b66": "Copiado",
"waitForSetupBeforeAgent": "Espera a que se complete la configuración antes de iniciar el agente"
"waitForSetupBeforeAgent": "Espera a que se complete la configuración antes de iniciar el agente",
"issueCommandDescription": "Anulación opcional. Usa <artifactUrl>{{artifact_url}}</artifactUrl> para la URL del Issue o PR vinculado.",
"issueCommandSharedDefault": "Déjalo en blanco para usar el valor predeterminado del repositorio desde <yaml>orca.yaml</yaml>.",
"issueCommandOptionalDefault": "Déjalo en blanco para usar el valor predeterminado del repositorio desde <yaml>orca.yaml</yaml>, si existe.",
"commandSourceDescription": "Cuando existen tanto <yaml>orca.yaml</yaml> como comandos locales, elige cuáles se ejecutan."
},
"RepositoryIconPicker": {
"2b7d27b93c": "Usar {{value0}} como color del repositorio",
@@ -8472,7 +8454,6 @@
"a7d28dff81": "Agrega un host remoto para conectarte a él en Orca.",
"94c5284560": "Destinos",
"f495689b82": "Error al importar",
"f8050f6307": "Sincronización completada: {{value0}} host{{value1}}",
"68c13b4589": "Prueba fallida",
"81d08bcddf": "Conexión exitosa",
"a43de1d3ee": "Error al desconectar",
@@ -8485,7 +8466,9 @@
"4db9afce1c": "El puerto debe estar entre 1 y 65535",
"0e5aa04161": "Se requiere un host o alias de configuración SSH",
"f1fc50dad2": "No se pudieron cargar destinos SSH",
"0cda732f43": "La prueba de conexión falló"
"0cda732f43": "La prueba de conexión falló",
"syncedServerSingular": "Sincronización completada: {{count}} host",
"syncedServerPlural": "Sincronización completada: {{count}} hosts"
},
"SshPassphraseDialog": {
"d5a234456f": "Cancelar",
@@ -8874,13 +8857,8 @@
"1ba81c0ff0": "recomendado",
"cfde55c7b0": "No se pudo descargar el modelo.",
"43fd4f454b": "Modelo de voz",
"7cf715f891": "se mantiene presionado.",
"295d84b849": "una vez para empezar y otra para parar. Mantener: dicta mientras",
"ff9a680010": "Alternar: pulsa",
"ba4a900d1d": "Modo de dictado",
"0121960365": "Habilitar dictado de voz",
"366e1b4f36": "para dictar texto en cualquier panel con foco.",
"4465596675": "Pulsa",
"62d2a84d31": "No se pudo borrar la clave API de OpenAI",
"37aba8bb63": "Clave API de OpenAI borrada",
"8572bbb537": "No se pudo guardar la clave API de OpenAI",
@@ -8900,7 +8878,9 @@
"1eac933202": "Se abrió Privacidad y seguridad de macOS. Vuelve a habilitar el dictado después de otorgar acceso.",
"cd9fe37556": "Permiso de micrófono concedido",
"6fa734ed95": "Eliminar {{value0}}",
"openAiKeyName": "Su clave de transcripción OpenAI"
"openAiKeyName": "Su clave de transcripción OpenAI",
"dictationShortcutDescription": "Pulsa {{shortcut}} para dictar texto en cualquier panel con foco.",
"dictationModesDescription": "Alternar: pulsa {{shortcut}} una vez para empezar y otra para parar. Mantener: dicta mientras {{shortcut}} se mantiene presionado."
},
"WorktreeSymlinksSection": {
"1c1e35b219": "Quitar {{value0}}",
@@ -10971,21 +10951,23 @@
"60996beda6": "Agregar sitio de Jira",
"7ca5ffffdb": "Explora, crea y empieza a trabajar desde issues de Jira Cloud.",
"a1093a06c7": "Comprobando el acceso a Jira antes de mostrar las acciones de configuración.",
"9fa04a032e": "Conexión completada para {{value0}} sitio{{value1}}",
"cef18762a2": "Agrega acceso con una clave API personal desde tus ajustes de Linear. Las claves de acceso completo pueden ver todos los equipos a los que puede acceder el propietario de la clave.",
"6224fe9d34": "Cada workspace de Linear conectado tiene una clave almacenada por el runtime activo. Las claves de acceso completo pueden cubrir todos los equipos a los que puede acceder el propietario de la clave; las claves restringidas se pueden reemplazar en cualquier momento.",
"1a12e33fe5": "Agregar acceso a Linear",
"622c224082": "Agregar acceso a workspace",
"eae4a9f16b": "Agrega acceso a Linear para explorar y vincular issues.",
"fe9231215b": "Comprobando el acceso a Linear antes de mostrar las acciones de configuración.",
"e1f5e6424c": "Conexión completada para {{value0}} workspace{{value1}}",
"disconnect_all": "Desconectar todo",
"account_scope_prefix": "Alcance de la cuenta",
"2d60ec7921": "Connect a Jira Cloud site with an API token, or a self-hosted Jira with a personal access token or username and password. Credentials are sent to the selected remote runtime and stored there with runtime-supported encryption.",
"977e360b71": "Connect a Jira Cloud site with an API token, or a self-hosted Jira with a personal access token or username and password. Credentials are stored locally and encrypted when local runtime storage supports it.",
"statusConnected": "Conectado",
"statusNotConnected": "No conectado",
"linearTokenName": "Su token de API Linear"
"linearTokenName": "Su token de API Linear",
"connectedSiteSingular": "{{count}} sitio conectado",
"connectedSitePlural": "{{count}} sitios conectados",
"connectedWorkspaceSingular": "{{count}} espacio de trabajo conectado",
"connectedWorkspacePlural": "{{count}} espacios de trabajo conectados"
}
}
}
+19 -37
View File
@@ -6936,14 +6936,6 @@
"1626524572": "Nautilus",
"0de9fda203": "Abandonner",
"c71770c455": "{basePrompt}",
"f19a56498d": "; votre paramètre de préfixe de branche s'applique toujours.",
"800edb1e54": "fix-login-flow",
"5d569f5199": ". Orca ne génère que le dernier segment, comme",
"570817d126": "et",
"56580dcf60": ". Vous pouvez aussi référencer",
"9c9b54e4ea": "l'invite intégrée de nom de branche d'Orca",
"69bf4830c2": "pour inclure",
"9241b59bf5": "Utiliser",
"a869d0edd8": "Modèle de commande de nom de branche",
"e784ea62dc": "Avancé",
"d9b65054ef": ") en un nom court résumant la tâche. Seules les branches qu'Orca a lui-même nommées sont renommées, et jamais après avoir été poussées.",
@@ -6954,8 +6946,7 @@
"cfd82406dd": "Enregistrement...",
"40e7be7850": "Enregistré",
"7c7e34a66d": "Modifications non enregistrées",
"a4fa380b67": "{assistantMessage}",
"2ee2779c05": "{firstPrompt}"
"commandTemplateDescription": "Utilisez <basePrompt>{basePrompt}</basePrompt> pour inclure <promptLink>l'invite intégrée de nom de branche d'Orca</promptLink>. Vous pouvez aussi référencer <firstPrompt>{firstPrompt}</firstPrompt> et <assistantMessage>{assistantMessage}</assistantMessage>. Orca ne génère que le dernier segment, comme <example>fix-login-flow</example> ; votre paramètre de préfixe de branche s'applique toujours."
},
"AutoRenameBranchPromptEditor": {
"63121132c0": "Abandonner",
@@ -7542,13 +7533,6 @@
"aa204f185f": "Limites de débit REST, Search et GraphQL actuelles de la CLI GitHub.",
"612a440e57": "Quota d'API GitHub",
"2cde9044a8": "graphql",
"36e3de3619": "de comparer avec un historique périmé. Orca ignore la mise à jour si cette branche contient des modifications non commitées ou des commits uniquement locaux.",
"d072a12995": "git diff main...HEAD",
"db3a127eb1": ". Cela permet de garder des commandes comme",
"3ae3de8898": "master",
"5bf885be48": "ou",
"ffba483bae": "main",
"976afc6b3e": "Quand vous créez un espace de travail, Orca actualise la base distante et fait avancer en toute sécurité votre branche locale correspondante (fast-forward), telle que",
"1ec5c91e1d": "Choisissez si les noms de branches utilisent votre nom d'utilisateur Git, un préfixe personnalisé ou aucun préfixe.",
"330f584b50": "Préfixe de branche",
"1ffaadf0a0": "Préfixe ajouté aux noms de branches à la création des worktrees.",
@@ -7569,7 +7553,8 @@
"compareAgainstUpstreamTitle": "Base de comparaison par défaut",
"compareAgainstUpstreamDescription": "Choisissez la base que le contrôle de code source utilise par défaut pour comparer les changements commités. L'amont de la branche suit automatiquement la branche courante et revient à la branche par défaut du dépôt en l'absence d'amont. Vous pouvez toujours changer la base de comparaison d'un worktree depuis son panneau Git. Les cibles de pull request et de rebase ne changent pas.",
"compareBaseRepositoryDefault": "Valeur par défaut du dépôt",
"compareBaseBranchUpstream": "Amont de la branche"
"compareBaseBranchUpstream": "Amont de la branche",
"refreshLocalBaseDescription": "Quand vous créez un espace de travail, Orca actualise la base distante et fait avancer en toute sécurité votre branche locale correspondante (fast-forward), telle que <mainBranch>main</mainBranch> ou <masterBranch>master</masterBranch>. Cela évite que des commandes comme <diffCommand>git diff main...HEAD</diffCommand> comparent avec un historique périmé. Orca ignore la mise à jour si cette branche contient des modifications non commitées ou des commits uniquement locaux."
},
"InputPane": {
"db15068196": "Activé par défaut sur Linux et macOS. Linux utilise le presse-papiers de sélection du système ; les autres plateformes utilisent un tampon privé.",
@@ -8002,18 +7987,13 @@
},
"RepositoryHooksSection": {
"af49e2a19e": "Le fichier est présent, mais Orca n'a pas trouvé de définitions valides de `scripts` ou d'`issueCommand`.",
"3397879bee": "et des commandes locales existent, choisissez celles qui s'exécutent.",
"39da2ae12f": "orca.yaml",
"ac9038d2cc": "Lorsque les deux",
"32fec28f5b": "Source des commandes",
"bbbd6e0bc4": "Source des commandes et orca.yaml",
"c9bc1bfd8f": "Avancé",
"610d90fdbd": "Détails sur la source des commandes et orca.yaml.",
"52aef29e69": "Laissez vide pour utiliser la valeur par défaut du dépôt définie dans",
"4084720f47": "Terminer {{artifact_url}}",
"13394103bd": "Commande d'issue GitHub personnalisée",
"70ad20f883": "pour l'URL de l'issue ou de la pull request liée.",
"b997331366": "Remplacement facultatif. Utilisez",
"2cc27dc12b": "Remplacement facultatif par utilisateur pour la commande d'issue liée.",
"b91a0f297d": "Scripts locaux et partagés exécutés avant l'archivage d'un worktree.",
"9a100323ff": "Script d'archivage",
@@ -8072,8 +8052,6 @@
"e03d9a8f38": "Demander à chaque fois",
"8dbe6bedf5": "invalide",
"0e0dd5b9a5": "chargé",
"9b12f15b1e": "lorsqu'il en existe un.",
"c85c2c88a2": "{{artifact_url}}",
"fac13f8c1e": "faisant foi",
"0518758f38": "les deux",
"d2b3016c20": "partagé",
@@ -8086,7 +8064,11 @@
"81057d5f71": "Enregistrement...",
"da37d6f10e": "Copier",
"3149964b66": "Copied",
"waitForSetupBeforeAgent": "Attendre la fin du setup avant de démarrer l'agent"
"waitForSetupBeforeAgent": "Attendre la fin du setup avant de démarrer l'agent",
"issueCommandDescription": "Remplacement facultatif. Utilisez <artifactUrl>{{artifact_url}}</artifactUrl> pour l'URL de l'issue ou de la pull request liée.",
"issueCommandSharedDefault": "Laissez vide pour utiliser la valeur par défaut du dépôt définie dans <yaml>orca.yaml</yaml>.",
"issueCommandOptionalDefault": "Laissez vide pour utiliser la valeur par défaut du dépôt définie dans <yaml>orca.yaml</yaml>, s'il en existe une.",
"commandSourceDescription": "Lorsque <yaml>orca.yaml</yaml> et des commandes locales existent tous les deux, choisissez celles qui s'exécutent."
},
"RepositoryIconPicker": {
"2b7d27b93c": "Utiliser la couleur de dépôt {{value0}}",
@@ -8616,7 +8598,6 @@
"a7d28dff81": "Ajoutez un hôte distant pour vous y connecter depuis Orca.",
"94c5284560": "Cibles",
"f495689b82": "Échec de l'importation",
"f8050f6307": "Synchronisation terminée : {{value0}} serveur{{value1}}",
"68c13b4589": "Échec du test",
"81d08bcddf": "Connexion réussie",
"a43de1d3ee": "Échec de la déconnexion",
@@ -8629,7 +8610,9 @@
"4db9afce1c": "Le port doit être compris entre 1 et 65535",
"0e5aa04161": "Un hôte ou un alias de config SSH est requis",
"f1fc50dad2": "Échec du chargement des cibles SSH",
"0cda732f43": "Échec du test de connexion"
"0cda732f43": "Échec du test de connexion",
"syncedServerSingular": "Synchronisation terminée : {{count}} serveur",
"syncedServerPlural": "Synchronisation terminée : {{count}} serveurs"
},
"SshPassphraseDialog": {
"d5a234456f": "Annuler",
@@ -9023,13 +9006,8 @@
"1ba81c0ff0": "recommandé",
"cfde55c7b0": "Échec du téléchargement du modèle.",
"43fd4f454b": "Modèle vocal",
"7cf715f891": "est maintenu.",
"295d84b849": "une fois pour démarrer, à nouveau pour arrêter. Maintien : dictez tant que",
"ff9a680010": "Bascule : appuyez",
"ba4a900d1d": "Mode de dictée",
"0121960365": "Activer la dictée vocale",
"366e1b4f36": "pour dicter du texte dans n'importe quel volet actif.",
"4465596675": "Appuyez",
"62d2a84d31": "Échec de l'effacement de la clé API OpenAI",
"37aba8bb63": "Clé API OpenAI effacée",
"8572bbb537": "Échec de l'enregistrement de la clé API OpenAI",
@@ -9048,7 +9026,9 @@
"f9a9cf6928": "L'autorisation d'accès au micro est requise avant d'activer la dictée vocale.",
"1eac933202": "Panneau Confidentialité et sécurité de macOS ouvert. Réactivez la dictée après avoir accordé l'accès.",
"cd9fe37556": "Autorisation d'accès au micro accordée",
"openAiKeyName": "Votre clé de transcription OpenAI"
"openAiKeyName": "Votre clé de transcription OpenAI",
"dictationShortcutDescription": "Appuyez sur {{shortcut}} pour dicter du texte dans n'importe quel volet actif.",
"dictationModesDescription": "Bascule : appuyez une fois sur {{shortcut}} pour démarrer, puis à nouveau pour arrêter. Maintien : dictez tant que {{shortcut}} est maintenu."
},
"WorktreeSymlinksSection": {
"1c1e35b219": "Supprimer {{value0}}",
@@ -11063,21 +11043,23 @@
"60996beda6": "Ajouter un site Jira",
"7ca5ffffdb": "Parcourez, créez et démarrez du travail depuis les tickets Jira Cloud.",
"a1093a06c7": "Vérification de l'accès Jira avant d'afficher les actions de configuration.",
"9fa04a032e": "{{value0}} site{{value1}} connecté",
"cef18762a2": "Ajoutez l'accès avec une clé d'API personnelle depuis vos paramètres Linear. Les clés à accès complet peuvent voir toutes les équipes accessibles au propriétaire de la clé.",
"6224fe9d34": "Chaque espace de travail Linear connecté possède une clé stockée par le runtime actif. Les clés à accès complet peuvent couvrir toutes les équipes auxquelles le propriétaire de la clé a accès ; les clés restreintes peuvent être remplacées à tout moment.",
"1a12e33fe5": "Ajouter l'accès Linear",
"622c224082": "Ajouter un accès à l'espace de travail",
"eae4a9f16b": "Ajoutez un accès Linear pour parcourir et lier des issues.",
"fe9231215b": "Vérification de l'accès Linear avant d'afficher les actions de configuration.",
"e1f5e6424c": "Connecté{{value1}} : {{value0}} espace de travail",
"disconnect_all": "Déconnecter",
"account_scope_prefix": "Portée des comptes",
"2d60ec7921": "Connectez un site Jira Cloud avec un jeton d'API, ou un Jira auto-hébergé avec un jeton d'accès personnel ou un nom d'utilisateur et mot de passe. Les identifiants sont envoyés au runtime distant sélectionné et y sont stockés avec le chiffrement pris en charge par le runtime.",
"977e360b71": "Connectez un site Jira Cloud avec un jeton d'API, ou un Jira auto-hébergé avec un jeton d'accès personnel ou un nom d'utilisateur et mot de passe. Les identifiants sont stockés localement et chiffrés lorsque le stockage du runtime local le prend en charge.",
"statusConnected": "Connecté",
"statusNotConnected": "Non connecté",
"linearTokenName": "Votre jeton API linéaire"
"linearTokenName": "Votre jeton API linéaire",
"connectedSiteSingular": "{{count}} site connecté",
"connectedSitePlural": "{{count}} sites connectés",
"connectedWorkspaceSingular": "{{count}} espace de travail connecté",
"connectedWorkspacePlural": "{{count}} espaces de travail connectés"
}
}
}
+19 -37
View File
@@ -6815,14 +6815,6 @@
"1626524572": "Nautilus",
"0de9fda203": "破棄",
"c71770c455": "{basePrompt}",
"f19a56498d": ";ブランチプレフィックス設定は引き続き適用されます。",
"800edb1e54": "fix-login-flow",
"5d569f5199": "。 Orca は次のような最後のセグメントのみを生成します。",
"570817d126": "と",
"56580dcf60": "。参考にすることもできます",
"9c9b54e4ea": "組み込みのブランチ名プロンプト",
"69bf4830c2": "Orca も含めて",
"9241b59bf5": "使用",
"a869d0edd8": "ブランチ名コマンドテンプレート",
"e784ea62dc": "詳細設定",
"d9b65054ef": ") をタスクを要約した短い名前にします。 Orca 自身が名前を付けたブランチのみが名前変更され、プッシュされた後は名前が変更されません。",
@@ -6833,8 +6825,7 @@
"cfd82406dd": "保存中…",
"40e7be7850": "保存済み",
"7c7e34a66d": "未保存の変更",
"a4fa380b67": "{assistantMessage}",
"2ee2779c05": "{firstPrompt}"
"commandTemplateDescription": "<basePrompt>{basePrompt}</basePrompt> を使うと、Orca の<promptLink>組み込みのブランチ名プロンプト</promptLink>を含めることができます。<firstPrompt>{firstPrompt}</firstPrompt> と <assistantMessage>{assistantMessage}</assistantMessage> も参照できます。Orca が生成するのは <example>fix-login-flow</example> のような最後のセグメントだけで、ブランチプレフィックス設定は引き続き適用されます。"
},
"AutoRenameBranchPromptEditor": {
"63121132c0": "破棄",
@@ -7421,13 +7412,6 @@
"aa204f185f": "現在の GitHub CLI REST、Search、および GraphQL のレート制限。",
"612a440e57": "GitHub API の予算",
"2cde9044a8": "graphql",
"36e3de3619": "などのコマンドが古い履歴と比較されるのを防ぎます。対象のブランチにコミットしていない変更やローカルのみのコミットがある場合、Orca は更新をスキップします。",
"d072a12995": "git diff main...HEAD",
"db3a127eb1": "。これにより、",
"3ae3de8898": "master",
"5bf885be48": "または",
"ffba483bae": "main",
"976afc6b3e": "ワークスペースを作成すると、Orca はリモートベースを更新し、一致するローカルブランチを安全に fast-forward します。対象は",
"1ec5c91e1d": "ブランチ名に Git ユーザー名を使用するか、カスタムプレフィックスを使用するか、プレフィックスを使用しないかを選択します。",
"330f584b50": "ブランチプレフィックス",
"1ffaadf0a0": "ワークツリーの作成時にブランチ名に追加されるプレフィックス。",
@@ -7448,7 +7432,8 @@
"compareAgainstUpstreamTitle": "既定の比較ベース",
"compareAgainstUpstreamDescription": "ソース管理がコミット済み変更の比較に既定で使うベースを選択します。ブランチの upstream は現在のブランチに自動的に追従し、upstream がない場合はリポジトリの既定ブランチにフォールバックします。比較ベースは各ワークツリーの Git パネルからワークツリーごとに変更できます。Pull Request やリベースの対象は変更されません。",
"compareBaseRepositoryDefault": "リポジトリ既定",
"compareBaseBranchUpstream": "ブランチの upstream"
"compareBaseBranchUpstream": "ブランチの upstream",
"refreshLocalBaseDescription": "ワークスペースを作成すると、Orca はリモートのベースを更新し、<mainBranch>main</mainBranch> や <masterBranch>master</masterBranch> など、対応するローカルブランチを安全に fast-forward します。これにより、<diffCommand>git diff main...HEAD</diffCommand> などのコマンドが古い履歴と比較されるのを防ぎます。対象のブランチにコミットしていない変更やローカルのみのコミットがある場合、Orca は更新をスキップします。"
},
"HiddenExperimentalGroup": {
"7c4e18d2f6": "このマシンで太字グリッチのキャプチャジェスチャーを有効にします。{{samplingShortcut}} でサンプリングバーストを開始し、{{captureShortcut}} でペインの証拠をディスクに保存します。",
@@ -7880,18 +7865,13 @@
},
"RepositoryHooksSection": {
"af49e2a19e": "ファイルは存在しますが、Orca は有効な `scripts` または `issueCommand` 定義を見つけることができませんでした。",
"3397879bee": "ローカルコマンドが存在する場合は、どのコマンドを実行するかを選択します。",
"39da2ae12f": "orca.yaml",
"ac9038d2cc": "両方のとき",
"32fec28f5b": "コマンドソース",
"bbbd6e0bc4": "コマンドソースとorca.yaml",
"c9bc1bfd8f": "詳細設定",
"610d90fdbd": "コマンドソースと orca.yaml の詳細。",
"52aef29e69": "リポジトリのデフォルトを使用するには空白のままにします",
"4084720f47": "{{artifact_url}} を完了",
"13394103bd": "カスタム GitHub Issue コマンド",
"70ad20f883": "リンクされた号または PR URL をご覧ください。",
"b997331366": "オプションの上書き。使用",
"2cc27dc12b": "リンクされた Issue コマンドのユーザーごとのオプションのオーバーライド。",
"b91a0f297d": "ワークツリーがアーカイブされる前に実行されるローカルおよび共有スクリプト。",
"9a100323ff": "アーカイブスクリプト",
@@ -7950,8 +7930,6 @@
"e03d9a8f38": "毎回尋ねる",
"8dbe6bedf5": "無効",
"0e0dd5b9a5": "ロード済み",
"9b12f15b1e": "存在するとき。",
"c85c2c88a2": "{{artifact_url}}",
"fac13f8c1e": "権威ある",
"0518758f38": "両方",
"d2b3016c20": "共有",
@@ -7964,7 +7942,11 @@
"81057d5f71": "保存中…",
"da37d6f10e": "コピー",
"3149964b66": "コピーしました",
"waitForSetupBeforeAgent": "セットアップが完了するまで待ってから Agent を開始してください"
"waitForSetupBeforeAgent": "セットアップが完了するまで待ってから Agent を開始してください",
"issueCommandDescription": "任意の上書きです。リンクされた Issue または PR の URL には <artifactUrl>{{artifact_url}}</artifactUrl> を使用します。",
"issueCommandSharedDefault": "空欄のままにすると、<yaml>orca.yaml</yaml> のリポジトリのデフォルトを使用します。",
"issueCommandOptionalDefault": "空欄のままにすると、<yaml>orca.yaml</yaml> にリポジトリのデフォルトがあればそれを使用します。",
"commandSourceDescription": "<yaml>orca.yaml</yaml> とローカルの両方にコマンドがある場合は、どちらを実行するかを選択します。"
},
"RepositoryIconPicker": {
"2b7d27b93c": "{{value0}} リポジトリカラーを使用する",
@@ -8494,7 +8476,6 @@
"a7d28dff81": "Orca で接続するリモートホストを追加します。",
"94c5284560": "ターゲット",
"f495689b82": "インポートに失敗しました",
"f8050f6307": "{{value0}} サーバー{{value1}} を同期しました",
"68c13b4589": "テストが失敗しました",
"81d08bcddf": "接続成功",
"a43de1d3ee": "切断に失敗しました",
@@ -8507,7 +8488,9 @@
"4db9afce1c": "ポートは 1 ~ 65535 でなければなりません",
"0e5aa04161": "ホストまたは SSH 構成エイリアスが必要です",
"f1fc50dad2": "SSH ターゲットのロードに失敗しました",
"0cda732f43": "接続テストに失敗しました"
"0cda732f43": "接続テストに失敗しました",
"syncedServerSingular": "{{count}} 台のサーバーを同期しました",
"syncedServerPlural": "{{count}} 台のサーバーを同期しました"
},
"SshPassphraseDialog": {
"d5a234456f": "キャンセル",
@@ -8896,13 +8879,8 @@
"1ba81c0ff0": "推奨",
"cfde55c7b0": "モデルのダウンロードに失敗しました。",
"43fd4f454b": "音声モデル",
"7cf715f891": "が開催されます。",
"295d84b849": "一度開始し、もう一度停止します。ホールド: 言いながら言い続ける",
"ff9a680010": "トグル: 押す",
"ba4a900d1d": "ディクテーションモード",
"0121960365": "音声ディクテーションを有効にする",
"366e1b4f36": "フォーカスされたペインにテキストを書き込むことができます。",
"4465596675": "プレス",
"62d2a84d31": "OpenAI APIキーのクリアに失敗しました",
"37aba8bb63": "OpenAI APIキーがクリアされました",
"8572bbb537": "OpenAI APIキーの保存に失敗しました",
@@ -8922,7 +8900,9 @@
"1eac933202": "macOS のプライバシーとセキュリティを開きました。アクセスを許可した後、ディクテーションを再度有効にします。",
"cd9fe37556": "マイクの許可が与えられました",
"6fa734ed95": "{{value0}} を削除",
"openAiKeyName": "OpenAI 転写キー"
"openAiKeyName": "OpenAI 転写キー",
"dictationShortcutDescription": "{{shortcut}} を押すと、フォーカスされているペインにテキストを音声入力できます。",
"dictationModesDescription": "トグル: {{shortcut}} を1回押すと開始し、もう一度押すと停止します。ホールド: {{shortcut}} を押している間、音声入力します。"
},
"WorktreeSymlinksSection": {
"1c1e35b219": "{{value0}} を削除",
@@ -10971,21 +10951,23 @@
"60996beda6": "Jira サイトを追加",
"7ca5ffffdb": "Jira Cloud の Issue を閲覧・作成し、そこから作業を開始します。",
"a1093a06c7": "セットアップ操作を表示する前に、Jira へのアクセスを確認しています。",
"9fa04a032e": "{{value0}} サイト{{value1}} が接続されました",
"cef18762a2": "Linear の設定で発行した個人用 API キーでアクセスを追加します。フルアクセスキーでは、キーの所有者が参照できるすべてのチームが見えます。",
"6224fe9d34": "接続された各 Linear ワークスペースには、アクティブなランタイムが保存したキーが 1 つあります。フルアクセスキーはキー所有者がアクセスできるすべてのチームを対象にできます。制限付きキーはいつでも置き換えられます。",
"1a12e33fe5": "Linear アクセスを追加",
"622c224082": "ワークスペースへのアクセスを追加",
"eae4a9f16b": "Linear アクセスを追加して、Issue を閲覧およびリンクします。",
"fe9231215b": "セットアップ操作を表示する前に Linear アクセスを確認中。",
"e1f5e6424c": "{{value0}} ワークスペース{{value1}} が接続されました",
"disconnect_all": "切断",
"account_scope_prefix": "アカウントスコープ",
"2d60ec7921": "APIトークンを使用して Jira Cloudサイトに接続するか、パーソナルアクセストークンまたはユーザー名とパスワードを使用してセルフホスト Jira に接続します。認証情報は選択されたリモートランタイムに送信され、ランタイムがサポートする暗号化で保存されます。",
"977e360b71": "APIトークンを使用して Jira Cloudサイトに接続するか、パーソナルアクセストークンまたはユーザー名とパスワードを使用してセルフホスト Jira に接続します。認証情報はローカルに保存され、ローカルランタイムストレージがサポートする場合は暗号化されます。",
"statusConnected": "接続済み",
"statusNotConnected": "接続されていません",
"linearTokenName": "リニア API トークン"
"linearTokenName": "リニア API トークン",
"connectedSiteSingular": "{{count}} 件のサイトに接続済み",
"connectedSitePlural": "{{count}} 件のサイトに接続済み",
"connectedWorkspaceSingular": "{{count}} 件のワークスペースに接続済み",
"connectedWorkspacePlural": "{{count}} 件のワークスペースに接続済み"
}
}
}
+19 -37
View File
@@ -6819,14 +6819,6 @@
"1626524572": "Nautilus",
"0de9fda203": "버리기",
"c71770c455": "{basePrompt}",
"f19a56498d": "; 브랜치 접두사 설정이 계속 적용됩니다.",
"800edb1e54": "fix-login-flow",
"5d569f5199": ". Orca는 다음과 같은 마지막 세그먼트만 생성합니다.",
"570817d126": "그리고",
"56580dcf60": ". 참고하실 수도 있습니다",
"9c9b54e4ea": "내장된 브랜치 이름 프롬프트",
"69bf4830c2": "Orca의 항목을 포함하도록",
"9241b59bf5": "사용",
"a869d0edd8": "브랜치 이름 명령 템플릿",
"e784ea62dc": "고급",
"d9b65054ef": ") 작업을 요약하는 짧은 이름으로 변경됩니다. Orca가 직접 이름 붙인 브랜치만 이름을 바꾸며, 푸시된 후에는 이름을 바꾸지 않습니다.",
@@ -6837,8 +6829,7 @@
"cfd82406dd": "저장 중...",
"40e7be7850": "저장됨",
"7c7e34a66d": "저장되지 않은 변경사항",
"a4fa380b67": "{assistantMessage}",
"2ee2779c05": "{firstPrompt}"
"commandTemplateDescription": "<basePrompt>{basePrompt}</basePrompt> 변수를 사용하면 Orca의 <promptLink>내장 브랜치 이름 프롬프트</promptLink>를 포함할 수 있습니다. <firstPrompt>{firstPrompt}</firstPrompt>와 <assistantMessage>{assistantMessage}</assistantMessage> 변수도 참조할 수 있습니다. Orca는 <example>fix-login-flow</example> 같은 마지막 세그먼트만 생성하며, 브랜치 접두사 설정은 계속 적용됩니다."
},
"AutoRenameBranchPromptEditor": {
"63121132c0": "버리기",
@@ -7391,13 +7382,6 @@
"aa204f185f": "현재 GitHub CLI REST, 검색 및 GraphQL 속도 제한.",
"612a440e57": "GitHub API 예산",
"2cde9044a8": "graphql",
"36e3de3619": "오래된 기록과 비교하지 않도록 합니다. Orca는 해당 브랜치에 commits 되지 않은 변경 사항이나 로컬 전용 commits이 있으면 업데이트를 건너뜁니다.",
"d072a12995": "git diff main...HEAD",
"db3a127eb1": "이렇게 하면 다음과 같은 명령이 유지됩니다",
"3ae3de8898": "master",
"5bf885be48": "또는",
"ffba483bae": "main",
"976afc6b3e": "워크스페이스를 만들면 Orca가 원격 기준 브랜치를 새로고침하고, 일치하는 로컬 브랜치를 안전하게 fast-forward합니다. 예:",
"1ec5c91e1d": "브랜치 이름에 Git 사용자 이름, 사용자 지정 접두사 또는 접두사 없음을 사용할지 선택합니다.",
"330f584b50": "브랜치 접두사",
"1ffaadf0a0": "작업 트리를 생성할 때 브랜치 이름에 접두사가 추가됩니다.",
@@ -7418,7 +7402,8 @@
"compareAgainstUpstreamTitle": "기본 비교 기준",
"compareAgainstUpstreamDescription": "소스 제어가 커밋된 변경 사항 비교에 기본으로 사용할 기준을 선택합니다. 브랜치 업스트림은 현재 브랜치를 자동으로 따라가며, 업스트림이 없으면 저장소 기본 브랜치로 돌아갑니다. 비교 기준은 해당 worktree의 Git 패널에서 worktree별로 변경할 수 있습니다. Pull Request 및 리베이스 대상은 변경되지 않습니다.",
"compareBaseRepositoryDefault": "저장소 기본값",
"compareBaseBranchUpstream": "브랜치 업스트림"
"compareBaseBranchUpstream": "브랜치 업스트림",
"refreshLocalBaseDescription": "워크스페이스를 만들면 Orca가 원격 기준 브랜치를 새로고침하고 <mainBranch>main</mainBranch>이나 <masterBranch>master</masterBranch> 같은 해당 로컬 브랜치를 안전하게 앞으로 이동(fast-forward)합니다. 그러면 <diffCommand>git diff main...HEAD</diffCommand> 같은 명령이 오래된 이력과 비교하지 않습니다. 해당 브랜치에 커밋되지 않은 변경 사항이나 로컬에만 있는 커밋이 있으면 Orca는 업데이트를 건너뜁니다."
},
"HiddenExperimentalGroup": {
"7c4e18d2f6": "이 컴퓨터에서 굵게 표시 결함 캡처 제스처를 활성화합니다. {{samplingShortcut}}하면 샘플링 버스트가 시작되고, {{captureShortcut}}하면 창 증거를 디스크에 캡처합니다.",
@@ -7850,18 +7835,13 @@
},
"RepositoryHooksSection": {
"af49e2a19e": "파일이 있지만 Orca가 유효한 `scripts` 또는 `issueCommand` 정의를 찾을 수 없습니다.",
"3397879bee": "로컬 명령이 존재하는 경우 실행할 명령을 선택하십시오.",
"39da2ae12f": "orca.yaml",
"ac9038d2cc": "둘 다일 때",
"32fec28f5b": "명령 소스",
"bbbd6e0bc4": "명령 소스 및 orca.yaml",
"c9bc1bfd8f": "고급",
"610d90fdbd": "명령 소스 및 orca.yaml 세부정보",
"52aef29e69": "repo 기본값을 사용하려면 비워 두세요.",
"4084720f47": "{{artifact_url}} 완료",
"13394103bd": "사용자 지정 GitHub 이슈 명령",
"70ad20f883": "링크된 이슈 또는 PR URL에 대한 정보입니다.",
"b997331366": "선택적 재정의. 사용",
"2cc27dc12b": "연결된 이슈 명령에 대한 선택적 사용자별 재정의입니다.",
"b91a0f297d": "작업 트리가 보관되기 전에 실행되는 로컬 및 공유 스크립트입니다.",
"9a100323ff": "아카이브 스크립트",
@@ -7920,8 +7900,6 @@
"e03d9a8f38": "매번 묻기",
"8dbe6bedf5": "유효하지 않음",
"0e0dd5b9a5": "로드됨",
"9b12f15b1e": "하나가 존재할 때.",
"c85c2c88a2": "{{artifact_url}}",
"fac13f8c1e": "기준",
"0518758f38": "둘 다",
"d2b3016c20": "공유됨",
@@ -7934,7 +7912,11 @@
"81057d5f71": "저장 중...",
"da37d6f10e": "복사",
"3149964b66": "복사됨",
"waitForSetupBeforeAgent": "에이전트를 시작하기 전에 설정이 완료될 때까지 기다리기"
"waitForSetupBeforeAgent": "에이전트를 시작하기 전에 설정이 완료될 때까지 기다리기",
"issueCommandDescription": "필요하면 기본 명령을 재정의할 수 있습니다. 연결된 이슈 또는 PR의 URL에는 <artifactUrl>{{artifact_url}}</artifactUrl> 변수를 사용하세요.",
"issueCommandSharedDefault": "비워 두면 <yaml>orca.yaml</yaml>에 지정된 저장소 기본값을 사용합니다.",
"issueCommandOptionalDefault": "비워 두면 <yaml>orca.yaml</yaml>에 지정된 저장소 기본값이 있는 경우 사용합니다.",
"commandSourceDescription": "<yaml>orca.yaml</yaml>의 명령과 로컬 명령이 모두 있으면 실행할 명령을 선택하세요."
},
"RepositoryIconPicker": {
"2b7d27b93c": "{{value0}} repo 색상 사용",
@@ -8464,7 +8446,6 @@
"a7d28dff81": "Orca에서 연결할 원격 호스트를 추가합니다.",
"94c5284560": "대상",
"f495689b82": "가져오기 실패",
"f8050f6307": "동기화된 {{value0}} 서버{{value1}}",
"68c13b4589": "테스트 실패",
"81d08bcddf": "연결 성공",
"a43de1d3ee": "연결 해제 실패",
@@ -8477,7 +8458,9 @@
"4db9afce1c": "포트는 1에서 65535 사이여야 합니다.",
"0e5aa04161": "호스트 또는 SSH 구성 별칭이 필요합니다.",
"f1fc50dad2": "SSH 대상을 로드하지 못했습니다.",
"0cda732f43": "연결 테스트 실패"
"0cda732f43": "연결 테스트 실패",
"syncedServerSingular": "서버 {{count}}개를 동기화했습니다.",
"syncedServerPlural": "서버 {{count}}개를 동기화했습니다."
},
"SshPassphraseDialog": {
"d5a234456f": "취소",
@@ -8868,13 +8851,8 @@
"1ba81c0ff0": "추천",
"cfde55c7b0": "모델을 다운로드하지 못했습니다.",
"43fd4f454b": "음성 모델",
"7cf715f891": "누르고 있는 동안",
"295d84b849": "한 번 누르면 시작, 다시 누르면 중지. 길게 누르기: 누르고 있는 동안 받아쓰기",
"ff9a680010": "토글: 누르기",
"ba4a900d1d": "받아쓰기 모드",
"0121960365": "음성 받아쓰기 활성화",
"366e1b4f36": "포커스된 창에 텍스트를 받아쓰기합니다.",
"4465596675": "누르기",
"62d2a84d31": "OpenAI API 키를 지우지 못했습니다.",
"37aba8bb63": "OpenAI API 키가 삭제되었습니다.",
"8572bbb537": "OpenAI API 키를 저장하지 못했습니다.",
@@ -8894,7 +8872,9 @@
"1eac933202": "macOS 개인 정보 보호 및 보안을 열었습니다. 액세스 권한을 부여한 후 받아쓰기를 다시 활성화하세요.",
"cd9fe37556": "마이크 권한이 부여되었습니다.",
"6fa734ed95": "{{value0}} 삭제",
"openAiKeyName": "OpenAI 트랜스크립션 키"
"openAiKeyName": "OpenAI 트랜스크립션 키",
"dictationShortcutDescription": "{{shortcut}} 단축키를 눌러 포커스된 패널에 텍스트를 받아쓰세요.",
"dictationModesDescription": "토글: {{shortcut}} 단축키를 한 번 누르면 받아쓰기를 시작하고, 다시 누르면 중지합니다. 길게 누르기: {{shortcut}} 단축키를 누르고 있는 동안 받아쓰기합니다."
},
"WorktreeSymlinksSection": {
"1c1e35b219": "{{value0}} 제거",
@@ -10980,21 +10960,23 @@
"60996beda6": "Jira 사이트 추가",
"7ca5ffffdb": "Jira Cloud 이슈를 탐색하고 생성하며, 이슈에서 작업을 시작합니다.",
"a1093a06c7": "설정 작업을 표시하기 전에 Jira 액세스를 확인하는 중입니다.",
"9fa04a032e": "{{value0}}개 사이트{{value1}} 연결됨",
"cef18762a2": "Linear 설정의 개인 API 키로 액세스를 추가합니다. 전체 액세스 키는 키 소유자가 접근할 수 있는 모든 팀을 볼 수 있습니다.",
"6224fe9d34": "연결된 각 Linear 워크스페이스에는 활성 런타임에 저장되는 키가 하나씩 있습니다. 전체 액세스 키는 키 소유자가 접근할 수 있는 모든 팀에 적용될 수 있으며, 제한된 키는 언제든 교체할 수 있습니다.",
"1a12e33fe5": "Linear 액세스 추가",
"622c224082": "워크스페이스 액세스 추가",
"eae4a9f16b": "이슈를 탐색하고 연결하려면 Linear 액세스를 추가하세요.",
"fe9231215b": "설정 작업을 표시하기 전에 Linear 액세스를 확인하는 중입니다.",
"e1f5e6424c": "{{value0}}개 워크스페이스{{value1}} 연결됨",
"disconnect_all": "연결 해제",
"account_scope_prefix": "계정 범위",
"2d60ec7921": "API 토큰으로 Jira Cloud 사이트를 연결하거나, 개인 액세스 토큰 또는 사용자 이름과 비밀번호로 자체 호스팅 Jira를 연결하세요. 자격 증명은 선택한 원격 런타임으로 전송되어 런타임이 지원하는 암호화로 저장됩니다.",
"977e360b71": "API 토큰으로 Jira Cloud 사이트를 연결하거나, 개인 액세스 토큰 또는 사용자 이름과 비밀번호로 자체 호스팅 Jira를 연결하세요. 자격 증명은 로컬에 저장되며 로컬 런타임 저장소가 지원하는 경우 암호화됩니다.",
"statusConnected": "연결됨",
"statusNotConnected": "연결되지 않음",
"linearTokenName": "Linear API 토큰"
"linearTokenName": "Linear API 토큰",
"connectedSiteSingular": "사이트 {{count}}개 연결됨",
"connectedSitePlural": "사이트 {{count}}개 연결됨",
"connectedWorkspaceSingular": "워크스페이스 {{count}}개 연결됨",
"connectedWorkspacePlural": "워크스페이스 {{count}}개 연결됨"
}
}
}
+20 -38
View File
@@ -6815,14 +6815,6 @@
"1626524572": "Nautilus",
"0de9fda203": "放弃",
"c71770c455": "{basePrompt}",
"f19a56498d": ";您的分支前缀设置仍然适用。",
"800edb1e54": "fix-login-flow",
"5d569f5199": "。 Orca 仅生成最后一段,例如",
"570817d126": "和",
"56580dcf60": "。您还可以参考",
"9c9b54e4ea": "内置分支名称提示",
"69bf4830c2": "包括 Orca 的",
"9241b59bf5": "使用",
"a869d0edd8": "分支名称提示词模板",
"e784ea62dc": "高级",
"d9b65054ef": ")到总结任务的简短名称。只有 Orca 命名的分支才会被重命名,并且在推送后不会被重命名。",
@@ -6833,8 +6825,7 @@
"cfd82406dd": "保存中...",
"40e7be7850": "已保存",
"7c7e34a66d": "未保存的更改",
"a4fa380b67": "{assistantMessage}",
"2ee2779c05": "{firstPrompt}"
"commandTemplateDescription": "使用 <basePrompt>{basePrompt}</basePrompt> 可包含 Orca 的<promptLink>内置分支名称提示</promptLink>。您还可以引用 <firstPrompt>{firstPrompt}</firstPrompt> 和 <assistantMessage>{assistantMessage}</assistantMessage>。Orca 只生成最后一段,例如 <example>fix-login-flow</example>;您的分支前缀设置仍然适用。"
},
"AutoRenameBranchPromptEditor": {
"63121132c0": "放弃",
@@ -7384,13 +7375,6 @@
"aa204f185f": "当前 GitHub CLI REST、搜索和 GraphQL 速率限制。",
"612a440e57": "GitHub API 预算",
"2cde9044a8": "graphql",
"36e3de3619": "避免与过时的历史记录进行比较。如果该分支有未提交的更改或仅在本地的提交,Orca 会跳过更新。",
"d072a12995": "git diff main...HEAD",
"db3a127eb1": "。这使得命令像",
"3ae3de8898": "master",
"5bf885be48": "或者",
"ffba483bae": "main",
"976afc6b3e": "当您创建工作区时,Orca 会刷新远程库并安全地快进您匹配的本地分支,例如",
"1ec5c91e1d": "选择分支名称是使用您的 Git 用户名、自定义前缀还是不使用前缀。",
"330f584b50": "分支前缀",
"1ffaadf0a0": "创建工作树时添加到分支名称的前缀。",
@@ -7411,7 +7395,8 @@
"compareAgainstUpstreamTitle": "默认对比基准",
"compareAgainstUpstreamDescription": "选择源代码管理在比较已提交变更时默认使用的基准。分支上游会自动跟随当前分支;如果没有上游,则回退到仓库默认分支。你仍然可以在对应 worktree 的 Git 面板中按 worktree 更改对比基准。Pull Request 和变基目标不会改变。",
"compareBaseRepositoryDefault": "仓库默认",
"compareBaseBranchUpstream": "分支上游"
"compareBaseBranchUpstream": "分支上游",
"refreshLocalBaseDescription": "创建工作区时,Orca 会刷新远程基准分支,并安全地快进对应的本地分支,例如 <mainBranch>main</mainBranch> 或 <masterBranch>master</masterBranch>。这样可以避免 <diffCommand>git diff main...HEAD</diffCommand> 等命令与过时的历史记录进行比较。如果该分支有未提交的更改或仅在本地的提交,Orca 会跳过更新。"
},
"HiddenExperimentalGroup": {
"7c4e18d2f6": "在本机启用粗体故障捕获手势:{{samplingShortcut}} 开始采样突发;{{captureShortcut}} 将窗格证据捕获到磁盘。",
@@ -7843,18 +7828,13 @@
},
"RepositoryHooksSection": {
"af49e2a19e": "该文件存在,但 Orca 找不到有效的“scripts”或“issueCommand”定义。",
"3397879bee": "并且本地命令存在,选择哪个运行。",
"39da2ae12f": "orca.yaml",
"ac9038d2cc": "当两者",
"32fec28f5b": "命令源",
"bbbd6e0bc4": "命令源 & orca.yaml",
"c9bc1bfd8f": "高级",
"610d90fdbd": "命令源和 orca.yaml 详细信息。",
"52aef29e69": "留空以使用仓库默认值",
"4084720f47": "完成 {{artifact_url}}",
"13394103bd": "自定义 GitHub 议题命令",
"70ad20f883": "对于链接的议题或 PR URL。",
"b997331366": "可选覆盖。使用",
"2cc27dc12b": "关联议题命令的可选每用户覆盖。",
"b91a0f297d": "在归档工作树之前运行的本地和共享脚本。",
"9a100323ff": "存档脚本",
@@ -7913,8 +7893,6 @@
"e03d9a8f38": "每次都问",
"8dbe6bedf5": "无效的",
"0e0dd5b9a5": "已加载",
"9b12f15b1e": "当一个存在时。",
"c85c2c88a2": "{{artifact_url}}",
"fac13f8c1e": "权威性",
"0518758f38": "两个都",
"d2b3016c20": "共享",
@@ -7927,7 +7905,11 @@
"81057d5f71": "保存中...",
"da37d6f10e": "复制",
"3149964b66": "已复制",
"waitForSetupBeforeAgent": "等待设置完成后再启动智能体"
"waitForSetupBeforeAgent": "等待设置完成后再启动智能体",
"issueCommandDescription": "可选覆盖。使用 <artifactUrl>{{artifact_url}}</artifactUrl> 表示关联议题或 PR 的 URL。",
"issueCommandSharedDefault": "留空则使用 <yaml>orca.yaml</yaml> 中的仓库默认值。",
"issueCommandOptionalDefault": "留空则使用 <yaml>orca.yaml</yaml> 中的仓库默认值(如果有)。",
"commandSourceDescription": "当 <yaml>orca.yaml</yaml> 和本地命令同时存在时,选择要运行哪些命令。"
},
"RepositoryIconPicker": {
"2b7d27b93c": "使用 {{value0}} 仓库颜色",
@@ -8457,7 +8439,6 @@
"a7d28dff81": "添加远程主机以在 Orca 中连接到它。",
"94c5284560": "目标",
"f495689b82": "导入失败",
"f8050f6307": "已同步 {{value0}} 服务器{{value1}}",
"68c13b4589": "测试失败",
"81d08bcddf": "连接成功",
"a43de1d3ee": "断开连接失败",
@@ -8470,7 +8451,9 @@
"4db9afce1c": "端口必须介于 1 和 65535 之间",
"0e5aa04161": "需要主机或 SSH 配置别名",
"f1fc50dad2": "无法加载 SSH 目标",
"0cda732f43": "连接测试失败"
"0cda732f43": "连接测试失败",
"syncedServerSingular": "已同步 {{count}} 台服务器",
"syncedServerPlural": "已同步 {{count}} 台服务器"
},
"SshPassphraseDialog": {
"d5a234456f": "取消",
@@ -8859,13 +8842,8 @@
"1ba81c0ff0": "受到推崇的",
"cfde55c7b0": "下载模型失败。",
"43fd4f454b": "语音模型",
"7cf715f891": "举行。",
"295d84b849": "一次开始,再次停止。按住:指示同时",
"ff9a680010": "切换:按下",
"ba4a900d1d": "听写模式",
"0121960365": "启用语音听写",
"366e1b4f36": "将文本听写到任何焦点窗格中。",
"4465596675": "按",
"62d2a84d31": "无法清除 OpenAI API 密钥",
"37aba8bb63": "OpenAI API 密钥已清除",
"8572bbb537": "无法保存 OpenAI API 密钥",
@@ -8877,7 +8855,7 @@
"d504ab05f0": "流媒体",
"fbe5990716": "选择型号",
"e24f7d43d2": "选择语音模型,本地模型离线运行;云模型需要 API 密钥。",
"174da92062": "抓住",
"174da92062": "按住",
"118b3c2dee": "切换",
"901985625d": "切换",
"ad5d036ecc": "无法请求麦克风权限。未启用语音听写。",
@@ -8885,7 +8863,9 @@
"1eac933202": "打开 macOS 隐私和安全。授予访问权限后再次启用听写。",
"cd9fe37556": "已授予麦克风权限",
"6fa734ed95": "删除 {{value0}}",
"openAiKeyName": "您的 OpenAI 转录密钥"
"openAiKeyName": "您的 OpenAI 转录密钥",
"dictationShortcutDescription": "按 {{shortcut}} 可将文本听写到当前聚焦的任意窗格中。",
"dictationModesDescription": "切换:按一次 {{shortcut}} 开始,再按一次停止。按住:按住 {{shortcut}} 期间进行听写。"
},
"WorktreeSymlinksSection": {
"1c1e35b219": "删除 {{value0}}",
@@ -10971,21 +10951,23 @@
"60996beda6": "添加 Jira 站点",
"7ca5ffffdb": "从 Jira Cloud 议题浏览、创建并开始工作。",
"a1093a06c7": "在显示设置操作前正在检查 Jira 访问权限。",
"9fa04a032e": "{{value0}} 个站点{{value1}} 已连接",
"cef18762a2": "用 Linear 设置里的个人 API 密钥添加访问权限。完全访问密钥可看到密钥所有者能访问的所有团队。",
"6224fe9d34": "每个已连接的 Linear 工作区都有一个由活动运行时存储的密钥。全权限密钥可覆盖密钥所有者可访问的所有团队;受限密钥可随时更换。",
"1a12e33fe5": "添加 Linear 访问",
"622c224082": "添加工作区访问权限",
"eae4a9f16b": "添加 Linear 访问以浏览和链接议题。",
"fe9231215b": "在显示设置操作前正在检查 Linear 访问权限。",
"e1f5e6424c": "{{value0}} 个工作区{{value1}} 已连接",
"disconnect_all": "断开连接",
"account_scope_prefix": "账户范围",
"2d60ec7921": "使用 API token 连接 Jira Cloud 站点,或使用个人访问令牌或用户名和密码连接自托管 Jira。凭据会发送到所选远程运行时并以运行时支持的加密方式存储。",
"977e360b71": "使用 API token 连接 Jira Cloud 站点,或使用个人访问令牌或用户名和密码连接自托管 Jira。凭据存储在本地,本地运行时存储支持时会进行加密。",
"statusConnected": "已连接",
"statusNotConnected": "未连接",
"linearTokenName": "您的 Linear API 令牌"
"linearTokenName": "您的 Linear API 令牌",
"connectedSiteSingular": "已连接 {{count}} 个站点",
"connectedSitePlural": "已连接 {{count}} 个站点",
"connectedWorkspaceSingular": "已连接 {{count}} 个工作区",
"connectedWorkspacePlural": "已连接 {{count}} 个工作区"
}
}
}
@@ -28,7 +28,6 @@ const repairedEntries = [
['zh', 'auto.components.github.IssueSourceSelector.643d7e9496'],
['zh', 'auto.components.sparse.SparseCheckoutPresetSelect.ddbcaef7be'],
['zh', 'auto.components.sidebar.AddRepoCreateStep.0ae45b8238'],
['zh', 'auto.components.settings.AutoRenameBranchFromWorkSetting.800edb1e54'],
['zh', 'auto.components.settings.AutoRenameBranchPromptEditor.ebb942a2ec'],
['zh', 'auto.components.settings.BaseRefPicker.915ad97875'],
['zh', 'auto.components.settings.IntegrationsPane.e74de656ce'],
@@ -63,7 +62,7 @@ function readValue(catalog: Record<string, unknown>, key: string): unknown {
describe('technical literal catalog repairs (#13121)', () => {
it('keeps every repaired value identical to English', () => {
expect(repairedEntries).toHaveLength(42)
expect(repairedEntries).toHaveLength(41)
for (const [locale, key] of repairedEntries) {
expect(readValue(catalogs[locale], key), `${locale}:${key}`).toBe(readValue(en, key))