Add Simplified Chinese, Korean, and Japanese UI localization (#5046)
This commit is contained in:
parent
7d666fafab
commit
d09a7fa28b
|
|
@ -105,3 +105,8 @@ playwright-report/
|
|||
# Agent hook runtime endpoints (machine-local secrets)
|
||||
/agent-hooks/
|
||||
validation-screenshots/
|
||||
|
||||
# Localization bootstrap cache (regenerated by bootstrap:*-catalog)
|
||||
src/renderer/src/i18n/locales/.zh-catalog-cache.json
|
||||
src/renderer/src/i18n/locales/.ko-catalog-cache.json
|
||||
src/renderer/src/i18n/locales/.ja-catalog-cache.json
|
||||
|
|
|
|||
|
|
@ -0,0 +1,196 @@
|
|||
import fs from 'node:fs/promises'
|
||||
import path from 'node:path'
|
||||
import process from 'node:process'
|
||||
import { pathToFileURL } from 'node:url'
|
||||
|
||||
import {
|
||||
collectStringLeaves,
|
||||
repairCatalog,
|
||||
repairTranslatedValue,
|
||||
setLeaf,
|
||||
shouldPreserveEnglishValue
|
||||
} from './locale-translation-policy.mjs'
|
||||
|
||||
const PLACEHOLDER_RE = /\{\{[^}]+\}\}/g
|
||||
const LOCALES_DIR = path.join('src', 'renderer', 'src', 'i18n', 'locales')
|
||||
|
||||
const LOCALE_CONFIG = {
|
||||
zh: {
|
||||
targetLanguage: 'zh-CN',
|
||||
displayName: 'Simplified Chinese',
|
||||
cacheFile: '.zh-catalog-cache.json'
|
||||
},
|
||||
ko: {
|
||||
targetLanguage: 'ko',
|
||||
displayName: 'Korean',
|
||||
cacheFile: '.ko-catalog-cache.json'
|
||||
},
|
||||
ja: {
|
||||
targetLanguage: 'ja',
|
||||
displayName: 'Japanese',
|
||||
cacheFile: '.ja-catalog-cache.json'
|
||||
}
|
||||
}
|
||||
|
||||
function protectPlaceholders(text) {
|
||||
const tokens = []
|
||||
const protectedText = text.replace(PLACEHOLDER_RE, (match) => {
|
||||
const token = `__PH${tokens.length}__`
|
||||
tokens.push(match)
|
||||
return token
|
||||
})
|
||||
return { protectedText, tokens }
|
||||
}
|
||||
|
||||
function restorePlaceholders(text, tokens) {
|
||||
let result = text
|
||||
for (let index = 0; index < tokens.length; index += 1) {
|
||||
const patterns = [`__PH${index}__`, `__ PH ${index} __`, `__PH ${index}__`, `__ PH${index}__`]
|
||||
for (const pattern of patterns) {
|
||||
result = result.replaceAll(pattern, tokens[index])
|
||||
}
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
function shouldSkipTranslation(text) {
|
||||
return shouldPreserveEnglishValue(text)
|
||||
}
|
||||
|
||||
async function translateText(text, targetLanguage) {
|
||||
const url = new URL('https://translate.googleapis.com/translate_a/single')
|
||||
url.searchParams.set('client', 'gtx')
|
||||
url.searchParams.set('sl', 'en')
|
||||
url.searchParams.set('tl', targetLanguage)
|
||||
url.searchParams.set('dt', 't')
|
||||
url.searchParams.set('q', text)
|
||||
|
||||
let lastError
|
||||
for (let attempt = 0; attempt < 5; attempt += 1) {
|
||||
try {
|
||||
const response = await fetch(url)
|
||||
if (!response.ok) {
|
||||
throw new Error(`Translation request failed with status ${response.status}`)
|
||||
}
|
||||
const payload = await response.json()
|
||||
return payload[0].map((part) => part[0]).join('')
|
||||
} catch (error) {
|
||||
lastError = error
|
||||
await new Promise((resolve) => setTimeout(resolve, 500 * (attempt + 1)))
|
||||
}
|
||||
}
|
||||
throw lastError
|
||||
}
|
||||
|
||||
async function mapWithConcurrency(items, concurrency, mapper) {
|
||||
const results = Array.from({ length: items.length })
|
||||
let nextIndex = 0
|
||||
|
||||
async function worker() {
|
||||
while (nextIndex < items.length) {
|
||||
const currentIndex = nextIndex
|
||||
nextIndex += 1
|
||||
results[currentIndex] = await mapper(items[currentIndex], currentIndex)
|
||||
}
|
||||
}
|
||||
|
||||
await Promise.all(Array.from({ length: Math.min(concurrency, items.length) }, () => worker()))
|
||||
return results
|
||||
}
|
||||
|
||||
async function loadCache(cachePath) {
|
||||
try {
|
||||
const raw = JSON.parse(await fs.readFile(cachePath, 'utf8'))
|
||||
return new Map(Object.entries(raw))
|
||||
} catch {
|
||||
return new Map()
|
||||
}
|
||||
}
|
||||
|
||||
async function saveCache(cachePath, cache) {
|
||||
const raw = Object.fromEntries(cache.entries())
|
||||
await fs.writeFile(cachePath, `${JSON.stringify(raw, null, 2)}\n`, 'utf8')
|
||||
}
|
||||
|
||||
function parseLocaleArg(argv) {
|
||||
const localeFlagIndex = argv.indexOf('--locale')
|
||||
if (localeFlagIndex !== -1 && argv[localeFlagIndex + 1]) {
|
||||
return argv[localeFlagIndex + 1]
|
||||
}
|
||||
return argv[2]
|
||||
}
|
||||
|
||||
export async function main(root = process.cwd(), locale = parseLocaleArg(process.argv)) {
|
||||
const config = LOCALE_CONFIG[locale]
|
||||
if (!config) {
|
||||
console.error(
|
||||
`Unsupported locale "${locale}". Supported: ${Object.keys(LOCALE_CONFIG).join(', ')}`
|
||||
)
|
||||
return 1
|
||||
}
|
||||
|
||||
const enPath = path.join(root, LOCALES_DIR, 'en.json')
|
||||
const localePath = path.join(root, LOCALES_DIR, `${locale}.json`)
|
||||
const cachePath = path.join(root, LOCALES_DIR, config.cacheFile)
|
||||
const enCatalog = JSON.parse(await fs.readFile(enPath, 'utf8'))
|
||||
const localeCatalog = structuredClone(enCatalog)
|
||||
const leaves = collectStringLeaves(enCatalog)
|
||||
const uniqueValues = [...new Set(leaves.map((leaf) => leaf.value))]
|
||||
const cache = await loadCache(cachePath)
|
||||
const toTranslate = uniqueValues.filter(
|
||||
(value) => !shouldSkipTranslation(value) && !cache.has(value)
|
||||
)
|
||||
|
||||
console.log(
|
||||
`Translating ${toTranslate.length} unique strings to ${config.displayName} (${cache.size} cached)...`
|
||||
)
|
||||
|
||||
let completed = 0
|
||||
await mapWithConcurrency(toTranslate, 2, async (value) => {
|
||||
completed += 1
|
||||
if (completed % 25 === 0) {
|
||||
console.log(` ${completed}/${toTranslate.length}`)
|
||||
await saveCache(cachePath, cache)
|
||||
}
|
||||
const { protectedText, tokens } = protectPlaceholders(value)
|
||||
const translated = await translateText(protectedText, config.targetLanguage)
|
||||
const restored = restorePlaceholders(translated, tokens)
|
||||
cache.set(
|
||||
value,
|
||||
repairTranslatedValue({ key: '', enValue: value, localeValue: restored, locale })
|
||||
)
|
||||
await new Promise((resolve) => setTimeout(resolve, 200))
|
||||
})
|
||||
|
||||
for (const value of uniqueValues) {
|
||||
if (shouldSkipTranslation(value) && !cache.has(value)) {
|
||||
cache.set(value, value)
|
||||
}
|
||||
}
|
||||
|
||||
await saveCache(cachePath, cache)
|
||||
|
||||
for (const leaf of leaves) {
|
||||
const cached = cache.get(leaf.value) ?? leaf.value
|
||||
setLeaf(
|
||||
localeCatalog,
|
||||
leaf.key,
|
||||
repairTranslatedValue({
|
||||
key: leaf.key,
|
||||
enValue: leaf.value,
|
||||
localeValue: cached,
|
||||
locale
|
||||
})
|
||||
)
|
||||
}
|
||||
|
||||
repairCatalog(enCatalog, localeCatalog, locale)
|
||||
|
||||
await fs.writeFile(localePath, `${JSON.stringify(localeCatalog, null, 2)}\n`, 'utf8')
|
||||
console.log(`Wrote ${localePath}`)
|
||||
return 0
|
||||
}
|
||||
|
||||
if (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href) {
|
||||
process.exit(await main())
|
||||
}
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
import process from 'node:process'
|
||||
import { pathToFileURL } from 'node:url'
|
||||
|
||||
import { main as bootstrapLocaleCatalog } from './bootstrap-locale-catalog.mjs'
|
||||
|
||||
export async function main(root = process.cwd()) {
|
||||
return bootstrapLocaleCatalog(root, 'zh')
|
||||
}
|
||||
|
||||
if (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href) {
|
||||
process.exit(await main())
|
||||
}
|
||||
|
|
@ -0,0 +1,58 @@
|
|||
import fs from 'node:fs/promises'
|
||||
import path from 'node:path'
|
||||
|
||||
const SETTINGS_DIR = path.join('src', 'renderer', 'src', 'components', 'settings')
|
||||
const IMPORT_LINE = "import { translateSearchKeyword } from './settings-search-keywords'"
|
||||
|
||||
function transformKeywordsBlock(block) {
|
||||
return block.replace(
|
||||
/(?<!\.\.\.)translate\((['"`])([^'"`]+)\1,\s*(['"`])([^'"`]*)\3\)/g,
|
||||
'...translateSearchKeyword($1$2$1, $3$4$3)'
|
||||
)
|
||||
}
|
||||
|
||||
function transformFile(content) {
|
||||
if (!content.includes('keywords:') || content.includes('translateSearchKeyword')) {
|
||||
return content
|
||||
}
|
||||
|
||||
let next = content.replace(/keywords:\s*\[([\s\S]*?)\]/g, (match, body) => {
|
||||
const transformedBody = transformKeywordsBlock(body)
|
||||
return transformedBody === body ? match : `keywords: [${transformedBody}]`
|
||||
})
|
||||
|
||||
if (next === content) {
|
||||
return content
|
||||
}
|
||||
|
||||
if (!next.includes(IMPORT_LINE)) {
|
||||
const i18nImport = "import { translate } from '@/i18n/i18n'"
|
||||
next = next.includes(i18nImport)
|
||||
? next.replace(i18nImport, `${i18nImport}\n${IMPORT_LINE}`)
|
||||
: `${IMPORT_LINE}\n${next}`
|
||||
}
|
||||
|
||||
return next
|
||||
}
|
||||
|
||||
async function main() {
|
||||
const entries = await fs.readdir(SETTINGS_DIR)
|
||||
const files = entries
|
||||
.filter((name) => name.endsWith('-search.ts'))
|
||||
.map((name) => path.join(SETTINGS_DIR, name))
|
||||
|
||||
let changed = 0
|
||||
for (const filePath of files) {
|
||||
const original = await fs.readFile(filePath, 'utf8')
|
||||
const updated = transformFile(original)
|
||||
if (updated !== original) {
|
||||
await fs.writeFile(filePath, updated, 'utf8')
|
||||
changed += 1
|
||||
console.log(`Updated ${filePath}`)
|
||||
}
|
||||
}
|
||||
|
||||
console.log(`Codemod complete (${changed} files).`)
|
||||
}
|
||||
|
||||
await main()
|
||||
|
|
@ -0,0 +1,242 @@
|
|||
// Japanese phrase fixes from high-visibility UI audit rounds 1–4.
|
||||
// Why: keep locale-phrase-fixes.mjs under max-lines while preserving repair coverage.
|
||||
export const JA_PHRASE_FIXES = [
|
||||
{ pattern: /解雇/g, replacement: '閉じる', whenEnIncludes: 'Dismiss' },
|
||||
{ pattern: /却下/g, replacement: '閉じる', whenEnIncludes: 'Dismiss' },
|
||||
{ pattern: /代理人/g, replacement: 'エージェント', whenEnIncludes: 'agent' },
|
||||
{ pattern: /支店/g, replacement: 'ブランチ', whenEnIncludes: 'ranch' },
|
||||
{ pattern: /港(?!口)/g, replacement: 'ポート', whenEnIncludes: 'ort' },
|
||||
{ pattern: /会議/g, replacement: 'セッション', whenEnIncludes: 'session' },
|
||||
{ pattern: /広報/g, replacement: 'PR', whenEnIncludes: 'PR' },
|
||||
{ pattern: /端末/g, replacement: 'ターミナル', whenEnIncludes: 'erminal' },
|
||||
{ pattern: /シャチ:\/\//g, replacement: 'orca://', whenEnIncludes: 'orca://' },
|
||||
{ pattern: /線形/g, replacement: 'Linear', whenEnIncludes: 'Linear' },
|
||||
{ pattern: /不和/g, replacement: 'Discord', whenEnIncludes: 'Discord' },
|
||||
{ pattern: /爽やか/g, replacement: '更新中', whenEnIncludes: 'Refreshing' },
|
||||
{ pattern: /殺害/g, replacement: '終了中', whenEnIncludes: 'Killing' },
|
||||
{ pattern: /殺す/g, replacement: '強制終了', whenEnIncludes: 'Kill' },
|
||||
{ pattern: /皆殺し/g, replacement: 'すべて終了', whenEnIncludes: 'kill all' },
|
||||
{ pattern: /崩壊させる/g, replacement: '折りたたむ', whenEnIncludes: 'Collapse Orca' },
|
||||
{ pattern: /崩壊/g, replacement: '折りたたむ', whenEnIncludes: 'Collapse' },
|
||||
{ pattern: /一般的な/g, replacement: '一般', whenEnIncludes: 'General' },
|
||||
{ pattern: /高度な/g, replacement: '詳細設定', whenEnIncludes: 'Advanced' },
|
||||
{ pattern: /実験的(?!機能)/g, replacement: '実験的機能', whenEnIncludes: 'Experimental' },
|
||||
{
|
||||
pattern: /コンピュータの使用/g,
|
||||
replacement: 'コンピュータ操作',
|
||||
whenEnIncludes: 'Computer Use'
|
||||
},
|
||||
{ pattern: /検索設定/g, replacement: '設定を検索', whenEnIncludes: 'Search settings' },
|
||||
{ pattern: /検索スキル/g, replacement: 'スキルを検索', whenEnIncludes: 'Search skills' },
|
||||
{ pattern: /検索ブロック/g, replacement: 'ブロックを検索', whenEnIncludes: 'Search blocks' },
|
||||
{ pattern: /暗い/g, replacement: 'ダーク', whenEnIncludes: 'Dark' },
|
||||
{ pattern: /もう一度やり直してください/g, replacement: '再試行', whenEnIncludes: 'Try Again' },
|
||||
{
|
||||
pattern: /今すぐ再起動してください/g,
|
||||
replacement: '今すぐ再起動',
|
||||
whenEnIncludes: 'Restart now'
|
||||
},
|
||||
{ pattern: /待っている/g, replacement: '待機中', whenEnIncludes: 'Waiting' },
|
||||
{
|
||||
pattern: /眠っているのを隠す/g,
|
||||
replacement: 'スリープ中を非表示',
|
||||
whenEnIncludes: 'Hide sleeping'
|
||||
},
|
||||
{ pattern: /インタフェース/g, replacement: 'インターフェース', whenEnIncludes: 'Interface' },
|
||||
{ pattern: /統合/g, replacement: '連携', whenEnIncludes: 'Integration' },
|
||||
{
|
||||
pattern: /統合しました/g,
|
||||
replacement: 'マージしました',
|
||||
whenEnIncludes: 'Merged MR'
|
||||
},
|
||||
{
|
||||
pattern: /統合されています/g,
|
||||
replacement: 'マージされています',
|
||||
whenEnIncludes: 'already merged'
|
||||
},
|
||||
{ pattern: /再起動します/g, replacement: '再起動', whenEnIncludes: 'Restart Orca' },
|
||||
{ pattern: /オウムガイ/g, replacement: 'Nautilus', whenEnIncludes: 'Nautilus' },
|
||||
{
|
||||
pattern: /Kim サブスクリプション/g,
|
||||
replacement: 'Kimi サブスクリプション',
|
||||
whenEnIncludes: 'Kimi subscription'
|
||||
},
|
||||
{ pattern: /空き状況/g, replacement: '利用可否', whenEnIncludes: 'availability' },
|
||||
{ pattern: /指示/g, replacement: 'コマンド', whenEnIncludes: 'Command' },
|
||||
{ pattern: /弦/g, replacement: '文字列', whenEnIncludes: 'string' },
|
||||
{ pattern: /新しい/g, replacement: '新規', whenEnIncludes: 'New' },
|
||||
{
|
||||
pattern: /Open Linearタスク/g,
|
||||
replacement: 'Linear タスクを開く',
|
||||
whenEnIncludes: 'Open Linear tasks'
|
||||
},
|
||||
{ pattern: /小切手/g, replacement: 'チェック', whenEnIncludes: 'checks' },
|
||||
{ pattern: /査読者/g, replacement: 'レビュアー', whenEnIncludes: 'reviewer' },
|
||||
{ pattern: /レビュー担当者/g, replacement: 'レビュアー', whenEnIncludes: 'reviewer' },
|
||||
{ pattern: /電話機/g, replacement: 'スマートフォン', whenEnIncludes: 'phone' },
|
||||
{
|
||||
pattern: /壊れたチェック/g,
|
||||
replacement: '失敗したチェック',
|
||||
whenEnIncludes: 'broken check'
|
||||
},
|
||||
{
|
||||
pattern: /コンピューターの使用/g,
|
||||
replacement: 'コンピュータ操作',
|
||||
whenEnIncludes: 'Computer Use'
|
||||
},
|
||||
{
|
||||
pattern: /コンピューター使用/g,
|
||||
replacement: 'コンピュータ操作',
|
||||
whenEnIncludes: 'Computer Use'
|
||||
},
|
||||
{ pattern: /携帯電話/g, replacement: 'スマートフォン', whenEnIncludes: 'phone' },
|
||||
{
|
||||
pattern: /実験的機能な/g,
|
||||
replacement: '実験的機能',
|
||||
whenEnIncludes: 'experimental'
|
||||
},
|
||||
{ pattern: /ジラ/g, replacement: 'Jira', whenEnIncludes: 'Jira' },
|
||||
{ pattern: /ジラ/g, replacement: 'Jira', whenEnIncludes: 'jira' },
|
||||
{ pattern: /Linear問題/g, replacement: 'Linear イシュー', whenEnIncludes: 'Linear issue' },
|
||||
{ pattern: /Linearの問題/g, replacement: 'Linear イシュー', whenEnIncludes: 'Linear issue' },
|
||||
{ pattern: /Jira の問題/g, replacement: 'Jira イシュー', whenEnIncludes: 'Jira issue' },
|
||||
{
|
||||
pattern: /一般的なアクション/g,
|
||||
replacement: 'よく使うアクション',
|
||||
whenEnIncludes: 'common actions'
|
||||
},
|
||||
{ pattern: /Jira 課題/g, replacement: 'Jira イシュー', whenEnIncludes: 'issue' },
|
||||
{ pattern: /GitHub の課題/g, replacement: 'GitHub イシュー', whenEnIncludes: 'issue' },
|
||||
{ pattern: /サブ課題/g, replacement: 'サブイシュー', whenEnIncludes: 'sub-issue' },
|
||||
{ pattern: /課題タイプ/g, replacement: 'イシュータイプ', whenEnIncludes: 'issue' },
|
||||
{ pattern: /課題セット/g, replacement: 'イシューセット', whenEnIncludes: 'issue' },
|
||||
{ pattern: /課題から/g, replacement: 'イシューから', whenEnIncludes: 'issue' },
|
||||
{ pattern: /課題に/g, replacement: 'イシューに', whenEnIncludes: 'issue' },
|
||||
{ pattern: /課題を/g, replacement: 'イシューを', whenEnIncludes: 'issue' },
|
||||
{ pattern: /課題の/g, replacement: 'イシューの', whenEnIncludes: 'issue' },
|
||||
{ pattern: /GitHub の問題/g, replacement: 'GitHub イシュー', whenEnIncludes: 'issue' },
|
||||
{ pattern: /GitLab の問題/g, replacement: 'GitLab イシュー', whenEnIncludes: 'issue' },
|
||||
{
|
||||
pattern: /問題ワークスペース/g,
|
||||
replacement: 'イシューワークスペース',
|
||||
whenEnIncludes: 'issue'
|
||||
},
|
||||
{ pattern: /問題元/g, replacement: 'イシューソース', whenEnIncludes: 'issue' },
|
||||
{ pattern: /問題識別子/g, replacement: 'イシュー識別子', whenEnIncludes: 'issue' },
|
||||
{ pattern: /問題タイプ/g, replacement: 'イシュータイプ', whenEnIncludes: 'issue' },
|
||||
{ pattern: /問題の種類/g, replacement: 'イシューの種類', whenEnIncludes: 'issue' },
|
||||
{ pattern: /問題の説明/g, replacement: 'イシューの説明', whenEnIncludes: 'issue' },
|
||||
{ pattern: /問題の URL/g, replacement: 'イシューの URL', whenEnIncludes: 'issue' },
|
||||
{ pattern: /問題番号/g, replacement: 'イシュー番号', whenEnIncludes: 'issue' },
|
||||
{ pattern: /問題ソース/g, replacement: 'イシューソース', whenEnIncludes: 'issue' },
|
||||
{ pattern: /問題自動化/g, replacement: 'イシュー自動化', whenEnIncludes: 'issue' },
|
||||
{ pattern: /問題コマンド/g, replacement: 'イシューコマンド', whenEnIncludes: 'issue' },
|
||||
{ pattern: /サブ問題/g, replacement: 'サブイシュー', whenEnIncludes: 'sub-issue' },
|
||||
{ pattern: /新規問題/g, replacement: '新規イシュー', whenEnIncludes: 'issue' },
|
||||
{ pattern: /GH問題/g, replacement: 'GH イシュー', whenEnIncludes: 'issue' },
|
||||
{ pattern: /問題 #/g, replacement: 'イシュー #', whenEnIncludes: 'issue' },
|
||||
{ pattern: /問題を表示/g, replacement: 'イシューを表示', whenEnIncludes: 'view issues' },
|
||||
{ pattern: /問題を検索/g, replacement: 'イシューを検索', whenEnIncludes: 'issue' },
|
||||
{ pattern: /問題を編集/g, replacement: 'イシューを編集', whenEnIncludes: 'issue' },
|
||||
{ pattern: /問題を提出/g, replacement: 'イシューを登録', whenEnIncludes: 'file an issue' },
|
||||
{ pattern: /問題の作成/g, replacement: 'イシューの作成', whenEnIncludes: 'issue' },
|
||||
{ pattern: /問題を更新/g, replacement: 'イシューを更新', whenEnIncludes: 'issue' },
|
||||
{ pattern: /問題を読み込/g, replacement: 'イシューを読み込', whenEnIncludes: 'issue' },
|
||||
{ pattern: /問題を作成/g, replacement: 'イシューを作成', whenEnIncludes: 'issue' },
|
||||
{ pattern: /問題を開く/g, replacement: 'イシューを開く', whenEnIncludes: 'issue' },
|
||||
{ pattern: /問題に関連/g, replacement: 'イシューに関連', whenEnIncludes: 'issue' },
|
||||
{ pattern: /問題には/g, replacement: 'イシューには', whenEnIncludes: 'issue' },
|
||||
{
|
||||
pattern: /問題を表示しています/g,
|
||||
replacement: 'イシューを表示しています',
|
||||
whenEnIncludes: 'issue'
|
||||
},
|
||||
{
|
||||
pattern: /選択した問題を/g,
|
||||
replacement: '選択したイシューを',
|
||||
whenEnIncludes: 'selected issue'
|
||||
},
|
||||
{
|
||||
pattern: /プロジェクトの問題/g,
|
||||
replacement: 'プロジェクトのイシュー',
|
||||
whenEnIncludes: 'project issues'
|
||||
},
|
||||
{
|
||||
pattern: /フェッチされた問題/g,
|
||||
replacement: '取得済みイシュー',
|
||||
whenEnIncludes: 'fetched issues'
|
||||
},
|
||||
{
|
||||
pattern: /割り当てられた問題/g,
|
||||
replacement: '割り当てられたイシュー',
|
||||
whenEnIncludes: 'assigned issues'
|
||||
},
|
||||
{ pattern: /一致する問題/g, replacement: '一致するイシュー', whenEnIncludes: 'issues match' },
|
||||
{
|
||||
pattern: /範囲が限定された問題/g,
|
||||
replacement: 'スコープされたイシュー',
|
||||
whenEnIncludes: 'scoped issues'
|
||||
},
|
||||
{ pattern: /GitHubの問題/g, replacement: 'GitHub イシュー', whenEnIncludes: 'GitHub issues' },
|
||||
{ pattern: /ドラフト_問題/g, replacement: 'DRAFT_ISSUE', whenEnIncludes: 'DRAFT_ISSUE' },
|
||||
{ pattern: /、問題、/g, replacement: '、イシュー、', whenEnIncludes: 'issues' },
|
||||
{ pattern: /PR、問題/g, replacement: 'PR、イシュー', whenEnIncludes: 'issues' },
|
||||
{ pattern: /GitHub 発行/g, replacement: 'GitHub イシュー', whenEnIncludes: 'issue' },
|
||||
{ pattern: /github発行/g, replacement: 'github イシュー', whenEnIncludes: 'issue' },
|
||||
{ pattern: /発行コマンド/g, replacement: 'イシューコマンド', whenEnIncludes: 'issue' },
|
||||
{ pattern: /発行自動化/g, replacement: 'イシュー自動化', whenEnIncludes: 'issue' },
|
||||
{ pattern: /サブ発行/g, replacement: 'サブイシュー', whenEnIncludes: 'sub-issue' },
|
||||
{ pattern: /発行元/g, replacement: 'イシューソース', whenEnIncludes: 'Issue source' },
|
||||
{ pattern: /、発行、/g, replacement: '、イシュー、', whenEnIncludes: 'issues' },
|
||||
{ pattern: /プルリクエスト/g, replacement: 'PR', whenEnIncludes: 'pull request' },
|
||||
{ pattern: /プル リクエスト/g, replacement: 'PR', whenEnIncludes: 'pull request' },
|
||||
{ pattern: /プルリクエスト/g, replacement: 'PR', whenEnIncludes: 'PR' },
|
||||
{ pattern: /プル リクエスト/g, replacement: 'PR', whenEnIncludes: 'PR' },
|
||||
{ pattern: /電話プレビュー/g, replacement: 'スマートフォンプレビュー', whenEnIncludes: 'phone' },
|
||||
{ pattern: /電話モード/g, replacement: 'スマートフォンモード', whenEnIncludes: 'phone' },
|
||||
{ pattern: /電話サイズ/g, replacement: 'スマートフォンサイズ', whenEnIncludes: 'phone' },
|
||||
{
|
||||
pattern: /コンピュータと電話/g,
|
||||
replacement: 'コンピューターとスマートフォン',
|
||||
whenEnIncludes: 'phone'
|
||||
},
|
||||
{ pattern: /前の問題/g, replacement: 'フロントマター', whenEnIncludes: 'Front Matter' },
|
||||
{ pattern: /ブランチの発行/g, replacement: 'ブランチを公開', whenEnIncludes: 'Publish Branch' },
|
||||
{ pattern: /ボタン/g, replacement: 'ボタン', whenEnIncludes: 'button' },
|
||||
{
|
||||
pattern: /レビューが要求されました/g,
|
||||
replacement: 'レビュー依頼済み',
|
||||
whenEnIncludes: 'Review requested'
|
||||
},
|
||||
// Round 5: inline/launch/action homographs, MR phrases, concise UI prompts.
|
||||
{ pattern: /列をなして/g, replacement: 'インライン', whenEnIncludes: 'Inline' },
|
||||
{ pattern: /列をなして/g, replacement: 'インライン', whenEnIncludes: 'inline' },
|
||||
{ pattern: /打ち上げ/g, replacement: '起動', whenEnIncludes: 'Launch' },
|
||||
{ pattern: /打ち上げ/g, replacement: '起動', whenEnIncludes: 'launch' },
|
||||
{ pattern: /遊ぶ/g, replacement: 'Play', whenEnIncludes: 'Play' },
|
||||
{ pattern: /指揮者/g, replacement: 'Conductor', whenEnIncludes: 'Conductor' },
|
||||
{ pattern: /マージリクエスト/g, replacement: 'MR', whenEnIncludes: 'merge request' },
|
||||
{ pattern: /マージ リクエスト/g, replacement: 'MR', whenEnIncludes: 'merge request' },
|
||||
{ pattern: /レビュー者/g, replacement: 'レビュアー', whenEnIncludes: 'Reviewed by' },
|
||||
{ pattern: /肩書き/g, replacement: 'タイトル', whenEnIncludes: 'title is required' },
|
||||
{ pattern: /見直しが必要/g, replacement: 'レビュー待ち', whenEnIncludes: 'Needs review' },
|
||||
{
|
||||
pattern: /実用的な問題/g,
|
||||
replacement: '対応が必要なイシュー',
|
||||
whenEnIncludes: 'actionable issues'
|
||||
},
|
||||
{ pattern: /アクションレシピ/g, replacement: '操作レシピ', whenEnIncludes: 'Action recipes' },
|
||||
{ pattern: /クイックアクション/g, replacement: 'クイック操作', whenEnIncludes: 'Quick Actions' },
|
||||
{ pattern: /さらなるアクション/g, replacement: 'その他の操作', whenEnIncludes: 'More actions' },
|
||||
{
|
||||
pattern: /その他の PR アクション/g,
|
||||
replacement: 'その他の PR 操作',
|
||||
whenEnIncludes: 'More PR actions'
|
||||
},
|
||||
{ pattern: /アクション/g, replacement: '操作', whenEnIncludes: 'action' },
|
||||
{ pattern: /を選択してください/g, replacement: 'を選択', whenEnIncludes: 'Select' },
|
||||
{ pattern: /を選択してください/g, replacement: 'を選択', whenEnIncludes: 'Choose' },
|
||||
{ pattern: /入力してください/g, replacement: '入力', whenEnIncludes: 'Enter' },
|
||||
{ pattern: /追加してください/g, replacement: '追加', whenEnIncludes: 'Add' },
|
||||
{ pattern: /試してください/g, replacement: '試す', whenEnIncludes: 'Try' }
|
||||
]
|
||||
|
|
@ -0,0 +1,155 @@
|
|||
// Japanese value overrides from high-visibility UI audit rounds 1–4.
|
||||
// Why: keep locale-value-overrides.mjs under max-lines while preserving exact-match repairs.
|
||||
export const JA_VALUE_OVERRIDES = {
|
||||
'Retry loading presets': 'プリセットの読み込みを再試行',
|
||||
'Retry Download': 'ダウンロードを再試行',
|
||||
'Enter a reviewer': 'レビュアーを入力',
|
||||
'Choose folder': 'フォルダーを選択',
|
||||
'Choose pet': 'ペットを選択',
|
||||
'Choose a sound': 'サウンドを選択',
|
||||
'Pick your default agent': 'デフォルトのエージェントを選択',
|
||||
'Complete {{artifact_url}}': '{{artifact_url}} を完了',
|
||||
'Control terminals and agents from your phone.':
|
||||
'スマートフォンからターミナルとエージェントを操作',
|
||||
'Add reviewer': 'レビュアーを追加',
|
||||
Reviewer: 'レビュアー',
|
||||
Reviewers: 'レビュアー',
|
||||
'Fix broken checks': '失敗したチェックを修正',
|
||||
'No broken checks to fix.': '修正が必要な失敗したチェックはありません',
|
||||
'Started an AI agent for the broken checks.':
|
||||
'失敗したチェックに対して AI エージェントを開始しました。',
|
||||
'Failed to start an AI agent for the broken checks: {{value0}}':
|
||||
'失敗したチェックのため AI エージェントを開始できませんでした: {{value0}}',
|
||||
'Checks unavailable': 'チェックは利用できません',
|
||||
'Checks pending': '保留中のチェック',
|
||||
checks: 'チェック',
|
||||
'Add Project': 'プロジェクトを追加',
|
||||
'Add label': 'ラベルを追加',
|
||||
'Select Team': 'チームを選択',
|
||||
'Choose project': 'プロジェクトを選択',
|
||||
'Add number': '番号を追加',
|
||||
'Add text': 'テキストを追加',
|
||||
MR: 'MR',
|
||||
mr: 'MR',
|
||||
Gitea: 'Gitea',
|
||||
gitea: 'Gitea',
|
||||
glab: 'glab',
|
||||
'GitHub Integration': 'GitHub 連携',
|
||||
'GitLab Integration': 'GitLab 連携',
|
||||
'Bitbucket Integration': 'Bitbucket 連携',
|
||||
'Azure DevOps Integration': 'Azure DevOps 連携',
|
||||
'Gitea Integration': 'Gitea 連携',
|
||||
'Jira Integration': 'Jira 連携',
|
||||
'Linear Integration': 'Linear 連携',
|
||||
'Hide Jira': 'Jira を非表示',
|
||||
'Linear issue': 'Linear イシュー',
|
||||
'Linear issues': 'Linear イシュー',
|
||||
'New Linear issue': '新規 Linear イシュー',
|
||||
'Jira issue': 'Jira イシュー',
|
||||
'Jira issues': 'Jira イシュー',
|
||||
'New Jira issue': '新規 Jira イシュー',
|
||||
'No Linear issues found': 'Linear イシューが見つかりません',
|
||||
'Unable to load Linear issues': 'Linear イシューを読み込めません',
|
||||
'No Jira issues found': 'Jira イシューが見つかりません',
|
||||
issue: 'イシュー',
|
||||
issues: 'イシュー',
|
||||
Issues: 'イシュー',
|
||||
'Common emulator commands': 'よく使うエミュレータコマンド',
|
||||
'Pull request': 'PR',
|
||||
'pull request': 'PR',
|
||||
'Pull request merged': 'PR がマージされました',
|
||||
'Pull request reopened': 'PR が再オープンされました',
|
||||
'Pull request closed': 'PR がクローズされました',
|
||||
'Preview and edit the selected GitHub issue or pull request.':
|
||||
'選択した GitHub イシューまたは PR をプレビュー・編集します。',
|
||||
'view issues': 'イシューを表示',
|
||||
'Review requested': 'レビュー依頼済み',
|
||||
'Request reviewer {{value0}}': 'レビュアーをリクエスト {{value0}}',
|
||||
'Unrequest reviewer {{value0}}': 'レビュアーのリクエストを取り消す {{value0}}',
|
||||
'Phone preview': 'スマートフォンプレビュー',
|
||||
'Switch to phone mode': 'スマートフォンモードに切り替え',
|
||||
phone: 'スマートフォン',
|
||||
'Front Matter': 'フロントマター',
|
||||
'Publish Branch': 'ブランチを公開',
|
||||
'Issue source': 'イシューソース',
|
||||
'Sub-issue data is unavailable for your token.':
|
||||
'トークンではサブイシューデータを利用できません。',
|
||||
'Start workspace from issue': 'イシューからワークスペースを開始',
|
||||
'Install the GitHub CLI to enable pull requests, issues, and checks.':
|
||||
'GitHub CLI をインストールして PR、イシュー、チェックを有効にします。',
|
||||
'Search GitHub issues...': 'GitHub イシューを検索...',
|
||||
'file an issue': 'イシューを登録',
|
||||
sending: '送信中',
|
||||
'Pull requests, issues, and checks via the': 'PR、イシュー、チェックは',
|
||||
'Pull requests, issues, and check status.': 'PR、イシュー、チェックの状態。',
|
||||
'Pull requests and build statuses': 'PR とビルドステータス',
|
||||
'Pull requests and commit statuses for detected repositories':
|
||||
'検出されたリポジトリの PR とコミットステータス',
|
||||
'Keep at phone size (default)': 'スマートフォンサイズを維持(デフォルト)',
|
||||
// Round 5: inline/launch/action homographs, MR/review status chips, concise prompts.
|
||||
Inline: 'インライン',
|
||||
inline: 'インライン',
|
||||
Launch: '起動',
|
||||
'Launch:': '起動:',
|
||||
'Launch plan': '起動プラン',
|
||||
'Launch agent': 'エージェントを起動',
|
||||
'Launch {{value0}} in a new terminal': '新規ターミナルで {{value0}} を起動',
|
||||
Play: 'Play',
|
||||
Action: '操作',
|
||||
Actions: '操作',
|
||||
action: '操作',
|
||||
'More actions': 'その他の操作',
|
||||
'Quick Actions': 'クイック操作',
|
||||
'Actions & Settings': '操作と設定',
|
||||
'More PR actions': 'その他の PR 操作',
|
||||
'More PR workspace actions': 'PR ワークスペースのその他の操作',
|
||||
'More issue workspace actions': 'イシューワークスペースのその他の操作',
|
||||
'More {{value0}} actions': 'その他の {{value0}} 操作',
|
||||
'More Explorer Actions': 'エクスプローラーのその他の操作',
|
||||
'More comment actions': 'その他のコメント操作',
|
||||
'More note actions': 'その他のメモ操作',
|
||||
'More commit and remote actions': 'コミットおよびリモート操作',
|
||||
'More {{value0}} and remote actions': 'その他の {{value0}} とリモート操作',
|
||||
'Pane Actions': 'ペインの操作',
|
||||
'Project actions': 'プロジェクトの操作',
|
||||
'Project actions for {{value0}}': '{{value0}} のプロジェクト操作',
|
||||
'Group actions for {{value0}}': '{{value0}} のグループ操作',
|
||||
'Action recipes': '操作レシピ',
|
||||
'merge request': 'MR',
|
||||
MergeRequest: 'MR',
|
||||
'Reviewed by': 'レビュアー',
|
||||
'MR title is required.': 'MR タイトルは必須です。',
|
||||
'Conductor Progress': 'Conductor 進捗',
|
||||
'Conductor Review': 'Conductor レビュー',
|
||||
'Conductor Done': 'Conductor 完了',
|
||||
Blocked: 'ブロック中',
|
||||
'Needs review': 'レビュー待ち',
|
||||
'font features': 'フォント特性',
|
||||
'Merge requests, issues, todos, and pipelines via the': 'MR、イシュー、ToDo、パイプラインは',
|
||||
'Install the GitLab CLI to enable merge requests, issues, and pipelines.':
|
||||
'GitLab CLI をインストールして MR、イシュー、パイプラインを有効にします。',
|
||||
'This merge request is still a draft': 'この MR はまだ下書きです',
|
||||
'This merge request is closed': 'この MR はクローズされています',
|
||||
'This merge request is already merged': 'この MR はすでにマージされています',
|
||||
'Add a project first': 'まずプロジェクトを追加',
|
||||
'Pick a base branch below': '以下のベースブランチを選択',
|
||||
'Choose floating workspace directory': 'フローティング ワークスペース ディレクトリを選択',
|
||||
'Enter passphrase': 'パスフレーズを入力',
|
||||
'Enter password': 'パスワードを入力',
|
||||
'Enter the passphrase for': 'のパスフレーズを入力',
|
||||
'Enter the password for': 'のパスワードを入力',
|
||||
'Choose a view': 'ビューを選択',
|
||||
'Select one project to open in GitHub': 'GitHub で開くプロジェクトを 1 つ選択',
|
||||
'Select one GitHub project to open in GitHub': 'GitHub で開く GitHub プロジェクトを 1 つ選択',
|
||||
'Select one Linear team to open in Linear': 'Linear で開く Linear チームを 1 つ選択',
|
||||
'Select a workspace to view checks': 'チェックを表示するワークスペースを選択',
|
||||
'Select a workspace to browse files': 'ファイルを参照するワークスペースを選択',
|
||||
'Select a workspace to search': '検索するワークスペースを選択',
|
||||
'Select a workspace to view changes': '変更を表示するワークスペースを選択',
|
||||
'Choose agent to fix commit failure': 'コミット失敗を修正するエージェントを選択',
|
||||
'Choose an agent for this commit failure': 'このコミット失敗に対するエージェントを選択',
|
||||
'Enter a commit message to commit': 'コミットメッセージを入力してコミット',
|
||||
'Choose parent folder...': '親フォルダーを選択...',
|
||||
'Check for stuck work, stale generated files, failing validation, and anything that needs human attention. Report only actionable issues.':
|
||||
'スタックした作業、古い生成ファイル、検証の失敗、および人間の対応が必要なものがないか確認してください。対応が必要なイシューのみを報告してください。'
|
||||
}
|
||||
|
|
@ -0,0 +1,594 @@
|
|||
import { KO_KEY_OVERRIDES } from './locale-ko-key-overrides.mjs'
|
||||
|
||||
// Key-specific overrides from high-visibility UI audit (P0/P1/P2).
|
||||
// Why: some fixes depend on full key context, not English value alone.
|
||||
export const LOCALE_KEY_OVERRIDES = {
|
||||
'menu.reportCrash': { ko: '크래시 신고...', zh: '报告崩溃...', ja: 'クラッシュを報告...' },
|
||||
'menu.showMobileButton': {
|
||||
ko: 'Orca 모바일 버튼 표시',
|
||||
zh: '显示 Orca Mobile 按钮',
|
||||
ja: 'Orca モバイル ボタンを表示'
|
||||
},
|
||||
'menu.toggleLeftSidebar': {
|
||||
ko: '왼쪽 사이드바 표시/숨기기',
|
||||
zh: '显示/隐藏左侧边栏',
|
||||
ja: '左サイドバーの表示/非表示'
|
||||
},
|
||||
'menu.toggleRightSidebar': {
|
||||
ko: '오른쪽 사이드바 표시/숨기기',
|
||||
zh: '显示/隐藏右侧边栏',
|
||||
ja: '右サイドバーの表示/非表示'
|
||||
},
|
||||
'menu.openWorktreePalette': {
|
||||
ko: '워크트리 팔레트 열기',
|
||||
zh: '打开工作树面板',
|
||||
ja: 'ワークツリーパレットを開く'
|
||||
},
|
||||
'menu.exploreOrca': { ko: 'Orca 둘러보기', zh: '探索 Orca', ja: 'Orca を探索' },
|
||||
'worktreeJumpPalette.matchLabel.issue': { ko: '이슈', zh: '议题', ja: 'イシュー' },
|
||||
'worktreeJumpPalette.matchLabel.comment': { ko: '댓글', zh: '评论', ja: 'コメント' },
|
||||
'auto.hooks.useSettingsNavigationMetadata.13241992bd': {
|
||||
ko: '일반',
|
||||
zh: '通用',
|
||||
ja: '一般'
|
||||
},
|
||||
'auto.hooks.useSettingsNavigationMetadata.93d88d20bf': {
|
||||
ko: '외관',
|
||||
zh: '外观',
|
||||
ja: '外観'
|
||||
},
|
||||
'auto.hooks.useSettingsNavigationMetadata.1cd25673df': {
|
||||
ko: '모바일',
|
||||
zh: '移动端',
|
||||
ja: 'モバイル'
|
||||
},
|
||||
'auto.hooks.useSettingsNavigationMetadata.6a50cdcd7c': {
|
||||
ko: '음성',
|
||||
zh: '语音',
|
||||
ja: '音声'
|
||||
},
|
||||
'auto.hooks.useSettingsNavigationMetadata.580a04cd81': {
|
||||
ko: '고급',
|
||||
zh: '高级',
|
||||
ja: '詳細設定'
|
||||
},
|
||||
'auto.hooks.useSettingsNavigationMetadata.225071c560': {
|
||||
ko: '실험적',
|
||||
zh: '实验性',
|
||||
ja: '実験的機能'
|
||||
},
|
||||
'auto.hooks.useSettingsNavigationMetadata.b35e92364b': {
|
||||
ko: '컴퓨터 사용',
|
||||
zh: '计算机控制',
|
||||
ja: 'コンピュータ操作'
|
||||
},
|
||||
'auto.hooks.useSettingsNavigationMetadata.94295ebfb3': {
|
||||
ko: '단축키',
|
||||
zh: '快捷键',
|
||||
ja: 'ショートカット'
|
||||
},
|
||||
'auto.hooks.useSettingsNavigationMetadata.ded9e9032f': {
|
||||
ko: '온보딩 체크리스트',
|
||||
zh: '入门清单',
|
||||
ja: 'オンボーディングチェックリスト'
|
||||
},
|
||||
'auto.hooks.useSettingsNavigationMetadata.3618579df6': {
|
||||
ko: '개인정보 및 텔레메트리',
|
||||
zh: '隐私与遥测',
|
||||
ja: 'プライバシーとテレメトリ'
|
||||
},
|
||||
'auto.hooks.useSettingsNavigationMetadata.65b19f5bde': {
|
||||
ko: '플로팅 워크스페이스',
|
||||
zh: '浮动工作区',
|
||||
ja: 'フローティングワークスペース'
|
||||
},
|
||||
'auto.hooks.useSettingsNavigationMetadata.2b043783ef': {
|
||||
ko: '연동',
|
||||
zh: '集成',
|
||||
ja: '連携'
|
||||
},
|
||||
'auto.components.settings.Settings.9abb9be3bc': {
|
||||
ko: '설정 시작',
|
||||
zh: '初始设置',
|
||||
ja: 'セットアップ'
|
||||
},
|
||||
'auto.components.settings.SettingsSidebar.dbceaa8840': {
|
||||
ko: '설정 검색',
|
||||
zh: '搜索设置',
|
||||
ja: '設定を検索'
|
||||
},
|
||||
'auto.components.settings.SettingsSidebar.60f8a673a7': {
|
||||
ko: '앱으로 돌아가기',
|
||||
zh: '返回应用',
|
||||
ja: 'アプリに戻る'
|
||||
},
|
||||
'auto.components.settings.SettingsSidebar.82db1b7de4': {
|
||||
ko: '온보딩 체크리스트, {{value0}}/{{value1}} 완료. 설정 가이드 보기.',
|
||||
zh: '入门清单,已完成 {{value0}}/{{value1}}。显示设置指南。',
|
||||
ja: 'オンボーディングチェックリスト、{{value0}}/{{value1}} 完了。セットアップガイドを表示。'
|
||||
},
|
||||
'auto.components.settings.ShortcutFilterRail.02dc7d4251': {
|
||||
ko: '바로가기 검색',
|
||||
zh: '搜索快捷键',
|
||||
ja: 'ショートカットを検索'
|
||||
},
|
||||
'auto.components.settings.ShortcutBindingRow.6a7848fdac': {
|
||||
ko: '단축키 입력 대기 중',
|
||||
zh: '正在录制快捷键',
|
||||
ja: 'ショートカットを記録中'
|
||||
},
|
||||
'auto.components.FirstLaunchBanner.fc5cc29955': {
|
||||
ko: '거부',
|
||||
zh: '退出',
|
||||
ja: 'オプトアウト'
|
||||
},
|
||||
'auto.components.FirstLaunchBanner.94cc673726': {
|
||||
ko: '확인',
|
||||
zh: '知道了',
|
||||
ja: '了解'
|
||||
},
|
||||
'auto.components.GitHubItemDialog.55962099bc': {
|
||||
ko: '이 이슈를 열었습니다',
|
||||
zh: '创建了此议题',
|
||||
ja: 'このイシューを作成しました'
|
||||
},
|
||||
'auto.components.GitHubItemDialog.726db41722': {
|
||||
ko: '워크스페이스 열기',
|
||||
zh: '打开工作区',
|
||||
ja: 'ワークスペースを開く'
|
||||
},
|
||||
'auto.components.GitHubItemDialog.a459866967': {
|
||||
ko: 'PR에 연결된 워크스페이스 재개',
|
||||
zh: '恢复关联 PR 的工作区',
|
||||
ja: 'PR に紐づくワークスペースを再開'
|
||||
},
|
||||
'auto.components.PullRequestItemDialog.67d881244c': {
|
||||
ko: 'PR에 연결된 워크스페이스 재개',
|
||||
zh: '恢复关联 PR 的工作区',
|
||||
ja: 'PR に紐づくワークスペースを再開'
|
||||
},
|
||||
'auto.components.GitHubItemDialog.ab050dffec': {
|
||||
ko: '닫힘',
|
||||
zh: '已关闭',
|
||||
ja: 'クローズ'
|
||||
},
|
||||
'auto.components.GitHubItemDialog.dc1ca081a8': {
|
||||
ko: '진행 중',
|
||||
zh: '进行中',
|
||||
ja: 'オープン'
|
||||
},
|
||||
'auto.components.tab.bar.TabBarCreateEntry.b27864279e': {
|
||||
ko: '에이전트 실행',
|
||||
zh: '启动代理',
|
||||
ja: 'エージェントを起動'
|
||||
},
|
||||
'auto.components.sidebar.SidebarNav.c39ab10000': {
|
||||
ko: 'Linear 작업 열기',
|
||||
zh: '打开 Linear 任务',
|
||||
ja: 'Linear タスクを開く'
|
||||
},
|
||||
'auto.components.sidebar.SidebarNav.c86d83b5c3': {
|
||||
ko: '새로 만들기',
|
||||
zh: '新建',
|
||||
ja: '新規'
|
||||
},
|
||||
'auto.components.sidebar.SidebarSettingsHelpMenu.eb9884e55b': {
|
||||
ko: 'Discord',
|
||||
zh: 'Discord',
|
||||
ja: 'Discord'
|
||||
},
|
||||
'auto.components.sidebar.SidebarSettingsHelpMenu.ad3d3ed7f1': {
|
||||
ko: 'Orca 재시작',
|
||||
zh: '重启 Orca',
|
||||
ja: 'Orca を再起動'
|
||||
},
|
||||
'auto.components.sidebar.workspace.status.5f9ca31a84': {
|
||||
ko: '대기 중',
|
||||
zh: '等待中',
|
||||
ja: '待機中'
|
||||
},
|
||||
'auto.components.sidebar.SidebarWorkspaceFilterSection.ed1611b65b': {
|
||||
ko: '슬립 중인 항목 숨기기',
|
||||
zh: '隐藏休眠项',
|
||||
ja: 'スリープ中を非表示'
|
||||
},
|
||||
'auto.components.status.bar.ResourceUsageStatusSegment.4bb076fa89': {
|
||||
ko: '강제 종료',
|
||||
zh: '强制结束',
|
||||
ja: '強制終了'
|
||||
},
|
||||
'auto.components.status.bar.ResourceUsageStatusSegment.41ae4fa725': {
|
||||
ko: '종료 중…',
|
||||
zh: '正在结束…',
|
||||
ja: '終了中…'
|
||||
},
|
||||
'auto.components.status.bar.ResourceUsageStatusSegment.53dd5560ae': {
|
||||
ko: 'Orca 접기',
|
||||
zh: '折叠 Orca',
|
||||
ja: 'Orca を折りたたむ'
|
||||
},
|
||||
'auto.components.settings.ManageSessionsSection.a06ababda0': {
|
||||
ko: '모두 강제 종료',
|
||||
zh: '全部强制结束',
|
||||
ja: 'すべて強制終了'
|
||||
},
|
||||
'auto.components.settings.ManageSessionKillDialog.d3dba51b15': {
|
||||
ko: '종료 중…',
|
||||
zh: '正在结束…',
|
||||
ja: '終了中…'
|
||||
},
|
||||
'auto.components.settings.terminal.search.920573d65b': {
|
||||
ko: '모두 종료',
|
||||
zh: '全部结束',
|
||||
ja: 'すべて終了'
|
||||
},
|
||||
'auto.components.settings.AgentsPane.2e45ca29b6': {
|
||||
ko: '명령',
|
||||
zh: '命令',
|
||||
ja: 'コマンド'
|
||||
},
|
||||
'auto.components.settings.AgentsPane.1c9a9679ec': {
|
||||
ko: '{{value0}} 사용 가능 여부',
|
||||
zh: '{{value0}} 可用性',
|
||||
ja: '{{value0}} の利用可否'
|
||||
},
|
||||
'auto.components.settings.AgentsPane.ed3e110e61': {
|
||||
ko: '감지됨',
|
||||
zh: '已检测',
|
||||
ja: '検出済み'
|
||||
},
|
||||
'auto.components.settings.AgentsPane.e8da2af684': {
|
||||
ko: '설치 가능',
|
||||
zh: '可安装',
|
||||
ja: 'インストール可能'
|
||||
},
|
||||
'auto.components.settings.AppearancePane.7d26ccabe8': {
|
||||
ko: '다크',
|
||||
zh: '深色',
|
||||
ja: 'ダーク'
|
||||
},
|
||||
'auto.components.settings.BrowserUsePane.de9b2f32f3': {
|
||||
ko: '활성화',
|
||||
zh: '启用',
|
||||
ja: '有効化'
|
||||
},
|
||||
'auto.components.settings.GeneralSupportSection.73b327e793': {
|
||||
ko: '다시 시도',
|
||||
zh: '重试',
|
||||
ja: '再試行'
|
||||
},
|
||||
'auto.components.settings.PrivacyDiagnosticBundleControls.2801d4ce22': {
|
||||
ko: '티켓 복사',
|
||||
zh: '复制工单',
|
||||
ja: 'チケットをコピー'
|
||||
},
|
||||
'auto.components.settings.ComputerUsePane.4b65070096': {
|
||||
ko: 'darwin',
|
||||
zh: 'darwin',
|
||||
ja: 'darwin'
|
||||
},
|
||||
'auto.components.settings.ComputerUsePane.bf51e4a542': {
|
||||
ko: 'USB 장치',
|
||||
zh: 'USB 设备',
|
||||
ja: 'USB デバイス'
|
||||
},
|
||||
'auto.components.settings.OrchestrationSkillAgentCoverage.ffe13e36fb': {
|
||||
ko: '누락',
|
||||
zh: '缺失',
|
||||
ja: '不足'
|
||||
},
|
||||
'auto.components.settings.GitPane.eec3995dc6': {
|
||||
ko: 'Git AI Author',
|
||||
zh: 'Git AI Author',
|
||||
ja: 'Git AI Author'
|
||||
},
|
||||
'auto.components.settings.AutoRenameBranchFromWorkSetting.1626524572': {
|
||||
ko: 'Nautilus',
|
||||
zh: 'Nautilus',
|
||||
ja: 'Nautilus'
|
||||
},
|
||||
'auto.components.settings.Settings.8bd117d669': {
|
||||
ko: '인터페이스',
|
||||
zh: '界面',
|
||||
ja: 'インターフェース'
|
||||
},
|
||||
'auto.components.settings.SettingsThemePicker.9119fb2268': {
|
||||
ko: '현재',
|
||||
zh: '当前',
|
||||
ja: '現在'
|
||||
},
|
||||
'auto.components.settings.SettingsThemePicker.4e11f87ca6': {
|
||||
ko: '표시 중',
|
||||
zh: '显示中',
|
||||
ja: '表示中'
|
||||
},
|
||||
'auto.components.skills.SkillsPage.a68dee6a32': {
|
||||
ko: '스킬 검색',
|
||||
zh: '搜索技能',
|
||||
ja: 'スキルを検索'
|
||||
},
|
||||
'auto.components.editor.RichMarkdownSlashMenu.550189b06c': {
|
||||
ko: '블록 검색',
|
||||
zh: '搜索块',
|
||||
ja: 'ブロックを検索'
|
||||
},
|
||||
'auto.components.TaskPage.eec0c5c079': {
|
||||
ko: 'Linear 이슈 검색...',
|
||||
zh: '搜索 Linear 议题...',
|
||||
ja: 'Linear イシューを検索...'
|
||||
},
|
||||
'auto.web.WebConnect.e3bcd082ac': {
|
||||
ko: 'Orca에 연결',
|
||||
zh: '连接到 Orca',
|
||||
ja: 'Orca に接続'
|
||||
},
|
||||
'auto.App.caea5b51b9': {
|
||||
ko: '지금 재시작',
|
||||
zh: '立即重启',
|
||||
ja: '今すぐ再起動'
|
||||
},
|
||||
'auto.App.9f0152563e': { ko: '모바일', zh: '移动端', ja: 'モバイル' },
|
||||
'auto.App.ca6c6eece7': { ko: '스킬', zh: '技能', ja: 'スキル' },
|
||||
'auto.App.62ca9895a7': { ko: '스페이스', zh: '空间', ja: 'スペース' },
|
||||
'settings.appearance.statusBar.kimiToggleDescription': {
|
||||
ko: '활성 워크스페이스의 Kimi 구독 사용량을 표시합니다.',
|
||||
zh: 'Kimi 订阅',
|
||||
ja: 'Kimi サブスクリプション'
|
||||
},
|
||||
'auto.components.mobile.MobileHero.cd4e5e816f': {
|
||||
ko: '주머니 속의 워크스페이스.',
|
||||
zh: '您的工作区就在您的口袋里。',
|
||||
ja: 'ワークスペースをポケットに。'
|
||||
},
|
||||
'auto.components.GitHubItemDialog.dbe5e2448e': {
|
||||
ko: 'PR이 병합되었습니다',
|
||||
zh: '拉取请求已合并',
|
||||
ja: 'PR がマージされました'
|
||||
},
|
||||
'auto.components.PullRequestPage.c57873d721': {
|
||||
ko: 'PR이 병합되었습니다',
|
||||
zh: '拉取请求已合并',
|
||||
ja: 'PR がマージされました'
|
||||
},
|
||||
'auto.components.TaskPage.a161925adc': {
|
||||
ko: 'PR이 병합되었습니다',
|
||||
zh: '拉取请求已合并',
|
||||
ja: 'PR がマージされました'
|
||||
},
|
||||
'auto.components.JiraIssueWorkspace.857bd2f88f': {
|
||||
ko: '선택한 이슈를 미리보기하고, 편집하고, 작업을 시작하세요.',
|
||||
zh: '预览、编辑并从选定的议题开始工作。',
|
||||
ja: '選択したイシューをプレビュー・編集し、そこから作業を開始します。'
|
||||
},
|
||||
'auto.components.LinearIssueWorkspace.ad5dec37b7': {
|
||||
ko: '선택한 이슈를 미리보기하고, 편집하고, 작업을 시작하세요.',
|
||||
zh: '预览、编辑并从选定的议题开始工作。',
|
||||
ja: '選択したイシューをプレビュー・編集し、そこから作業を開始します。'
|
||||
},
|
||||
'auto.components.TaskPage.67662ade50': {
|
||||
ko: '프로젝트 이슈',
|
||||
zh: '项目议题',
|
||||
ja: 'プロジェクトのイシュー'
|
||||
},
|
||||
'auto.components.TaskPage.618107fab3': {
|
||||
ko: '선택한 팀과 일치하는 가져온 이슈가 없습니다',
|
||||
zh: '没有获取到与所选团队匹配的议题',
|
||||
ja: '選択したチームと一致する取得済みイシューはありません'
|
||||
},
|
||||
'auto.components.TaskPage.1e1b2ad8f2': {
|
||||
ko: '이 이슈를 등록하기 전에 프로젝트 워크스페이스에서 팀을 선택하세요.',
|
||||
zh: '在提交此议题之前,请从项目工作区选择一个团队。',
|
||||
ja: 'このイシューを登録する前に、プロジェクトワークスペースからチームを選択してください。'
|
||||
},
|
||||
'auto.components.TaskPage.d079be2dc8': {
|
||||
ko: '할당된 이슈가 없습니다. 검색해 보세요.',
|
||||
zh: '没有分配的议题。请尝试搜索。',
|
||||
ja: '割り当てられたイシューはありません。検索してみてください。'
|
||||
},
|
||||
'auto.components.TaskPage.94d900518d': {
|
||||
ko: '선택한 프리셋과 일치하는 이슈가 없습니다.',
|
||||
zh: '没有与所选预设匹配的议题。',
|
||||
ja: '選択したプリセットに一致するイシューはありません。'
|
||||
},
|
||||
'auto.components.github.project.ProjectCell.ffeff79861': {
|
||||
ko: 'PULL_REQUEST',
|
||||
zh: 'PULL_REQUEST',
|
||||
ja: 'PULL_REQUEST'
|
||||
},
|
||||
'auto.components.github.project.ProjectRow.c3b81ddea2': {
|
||||
ko: 'DRAFT_ISSUE',
|
||||
zh: 'DRAFT_ISSUE',
|
||||
ja: 'DRAFT_ISSUE'
|
||||
},
|
||||
'auto.components.linear.project.view.surfaces.3ad562bdf4': {
|
||||
ko: '범위가 지정된 이슈',
|
||||
zh: '范围议题',
|
||||
ja: 'スコープされたイシュー'
|
||||
},
|
||||
'auto.components.linear.project.view.surfaces.7616c986c6': {
|
||||
ko: '{{value0}} 이슈 열기',
|
||||
zh: '打开 {{value0}} 议题',
|
||||
ja: '{{value0}} イシューを開く'
|
||||
},
|
||||
'auto.components.sidebar.SidebarFeedbackDialog.d245c4ef6c': {
|
||||
ko: 'GitHub 이슈',
|
||||
zh: 'GitHub 议题',
|
||||
ja: 'GitHub イシュー'
|
||||
},
|
||||
'auto.components.settings.CommitMessageAiPane.4f722a5f53': {
|
||||
ko: '사용자 지정 명령을 선택하는 커밋 메시지, PR 및 브랜치 이름 레시피에서 사용됩니다. 사용',
|
||||
zh: '由选择自定义命令的提交消息、拉取请求和分支名称配方使用。使用',
|
||||
ja: 'カスタムコマンドを選択するコミットメッセージ、PR、ブランチ名のレシピで使用されます。使用'
|
||||
},
|
||||
'auto.components.settings.AgentsPane.9bccf48906': {
|
||||
ko: '에이전트 위치',
|
||||
zh: '代理位置',
|
||||
ja: 'エージェントの場所'
|
||||
},
|
||||
'auto.components.skills.SkillsPage.38e0951c3a': {
|
||||
ko: '에이전트 스킬',
|
||||
zh: '代理技能',
|
||||
ja: 'エージェントのスキル'
|
||||
},
|
||||
'auto.components.sidebar.SidebarNav.e518f544b1': {
|
||||
ko: '감지된 에이전트 없음',
|
||||
zh: '未检测到代理',
|
||||
ja: 'エージェントが検出されません'
|
||||
},
|
||||
'auto.components.onboarding.OnboardingFlow.04ae28d8ca': {
|
||||
ko: '몇 시간 내내 보고 싶은 테마를 선택하세요.',
|
||||
zh: '选择你想盯着看几个小时的主题。',
|
||||
ja: '何時間も眺めていたくなるテーマを選んでください。'
|
||||
},
|
||||
'auto.components.GitLabItemDialog.e089f62594': {
|
||||
ko: 'MR !{{value0}}을(를) 병합했습니다.',
|
||||
zh: '合并 MR !{{value0}}',
|
||||
ja: 'MR をマージしました !{{value0}}'
|
||||
},
|
||||
'auto.components.right.sidebar.source.control.primary.action.3d5dccef0b': {
|
||||
ko: '커밋할 것이 없습니다. PR은 이미 병합되었습니다.',
|
||||
zh: '没有可提交的内容。PR 已合并。',
|
||||
ja: 'コミットするものはありません。PR はすでにマージされています。'
|
||||
},
|
||||
'auto.components.settings.integrations.search.16a486a49d': {
|
||||
ko: 'Linear에 연결해 이슈를 탐색하고 연결합니다.',
|
||||
zh: '连接 Linear 以浏览和链接议题。',
|
||||
ja: 'Linear に接続してイシューを参照し、リンクします。'
|
||||
},
|
||||
'menu.showTitlebarAppName': {
|
||||
ko: '제목 표시줄 앱 이름 표시',
|
||||
zh: '显示标题栏应用名称',
|
||||
ja: 'タイトルバーのアプリ名を表示'
|
||||
},
|
||||
'auto.App.e81217c1b7': {
|
||||
ko: '앱 이름 숨기기',
|
||||
zh: '隐藏应用名称',
|
||||
ja: 'アプリ名を非表示'
|
||||
},
|
||||
'auto.components.settings.ExperimentalPane.0277901cf7': {
|
||||
ko: '완료된 에이전트, 차단 질문, 읽지 않은 상태 및 작업 트리 생성 이벤트에 대한 스레드 작업 트리 피드가 있는 에이전트 항목을 왼쪽 사이드바에 추가합니다. 실험적 — 이벤트 모델과 UI가 변경될 수 있습니다.',
|
||||
zh: '将代理条目添加到左侧边栏,其中包含已完成代理、阻塞待办、未读状态和工作树创建事件的线程工作树提要。实验性——事件模型和 UI 可能会改变。',
|
||||
ja: '完了したエージェント、ブロック中の質問、未読状態、ワークツリー作成イベントのスレッドワークツリーフィード付きエージェント項目を左サイドバーに追加します。実験的 — イベントモデルと UI は変更される場合があります。'
|
||||
},
|
||||
'auto.lib.fix.checks.agent.launch.9f00d7df0c': {
|
||||
ko: '검사 프롬프트가 비어 있습니다. 소스 제어 AI 설정을 업데이트하세요.',
|
||||
zh: '检查提示为空。请更新源代码管理 AI 设置。',
|
||||
ja: 'チェック プロンプトが空です。ソース管理 AI 設定を更新してください。'
|
||||
},
|
||||
'auto.components.TaskPage.d0e3c8f933': {
|
||||
ko: '일치하는 GitHub 작업이 없습니다',
|
||||
zh: '没有匹配的 GitHub 工作项',
|
||||
ja: '一致する GitHub 作業がありません'
|
||||
},
|
||||
'auto.components.TaskPage.2af3ab5c58': {
|
||||
ko: 'Linear에서 열 팀을 하나 선택하세요',
|
||||
zh: '选择一个团队在 Linear 中打开',
|
||||
ja: 'Linear で開くチームを 1 つ選択'
|
||||
},
|
||||
'auto.components.TaskPage.8964184a8b': {
|
||||
ko: 'Linear 새로고침',
|
||||
zh: '刷新 Linear',
|
||||
ja: 'Linear を更新'
|
||||
},
|
||||
'auto.components.TaskPage.6775c05483': {
|
||||
ko: 'Linear 상태를 업데이트할 수 없습니다',
|
||||
zh: '无法更新 Linear 状态',
|
||||
ja: 'Linear の状態を更新できません'
|
||||
},
|
||||
'auto.components.TaskPage.25ff84769a': {
|
||||
ko: '이 Linear 컨텍스트와 일치하는 이슈가 없습니다.',
|
||||
zh: '没有议题与此 Linear 上下文匹配。',
|
||||
ja: 'この Linear コンテキストに一致するイシューはありません。'
|
||||
},
|
||||
'auto.components.settings.IntegrationsPane.33ae9730a8': {
|
||||
ko: 'Linear 액세스를 추가해 이슈를 탐색하고 연결합니다.',
|
||||
zh: '添加 Linear 访问以浏览和链接议题。',
|
||||
ja: 'Linear アクセスを追加してイシューを参照し、リンクします。'
|
||||
},
|
||||
'auto.components.GitHubItemDialog.3ab6ac0fc8': {
|
||||
ko: '선택한 GitHub 이슈 또는 PR을 미리보기하고 편집합니다.',
|
||||
zh: '预览并编辑选定的 GitHub 议题或拉取请求。',
|
||||
ja: '選択した GitHub イシューまたは PR をプレビュー・編集します。'
|
||||
},
|
||||
'auto.components.GitHubItemDialog.8c45901789': {
|
||||
ko: '리뷰어 요청 {{value0}}',
|
||||
zh: '请求评审人 {{value0}}',
|
||||
ja: 'レビュアーをリクエスト {{value0}}'
|
||||
},
|
||||
'auto.components.GitHubItemDialog.fedc09eeb9': {
|
||||
ko: '리뷰 요청 취소 {{value0}}',
|
||||
zh: '取消请求评审人 {{value0}}',
|
||||
ja: 'レビュアーのリクエストを取り消す {{value0}}'
|
||||
},
|
||||
'auto.components.TaskPage.be8cf68d9f': {
|
||||
ko: '이슈 보기',
|
||||
zh: '查看议题',
|
||||
ja: 'イシューを表示'
|
||||
},
|
||||
'auto.components.mobile.MobilePage.e17393c6a3': {
|
||||
ko: '전화 미리보기',
|
||||
zh: '手机预览',
|
||||
ja: 'スマートフォンプレビュー'
|
||||
},
|
||||
'auto.components.editor.EditorContent.e4b074749d': {
|
||||
ko: '머리말',
|
||||
zh: '前线事项',
|
||||
ja: 'フロントマター'
|
||||
},
|
||||
'auto.components.editor.MarkdownPreview.2b2b31382c': {
|
||||
ko: '머리말',
|
||||
zh: '前线事项',
|
||||
ja: 'フロントマター'
|
||||
},
|
||||
'auto.components.settings.IntegrationsPane.c0c8575e05': {
|
||||
ko: 'PR, 이슈 및 검사를 활성화하려면 GitHub CLI를 설치하세요.',
|
||||
zh: '安装 GitHub CLI 以启用拉取请求、议题和检查。',
|
||||
ja: 'GitHub CLI をインストールして PR、イシュー、チェックを有効にします。'
|
||||
},
|
||||
'auto.components.dashboard.DashboardAgentRow.92a7017987': {
|
||||
ko: '전송 중',
|
||||
zh: '发送',
|
||||
ja: '送信中'
|
||||
},
|
||||
'auto.components.github.pr.merge.state.bf5e4c6c92': {
|
||||
ko: '차단됨',
|
||||
zh: '已阻塞',
|
||||
ja: 'ブロック中'
|
||||
},
|
||||
'auto.components.sidebar.workspace.status.93ac840dcb': {
|
||||
ko: '차단됨',
|
||||
zh: '已阻塞',
|
||||
ja: 'ブロック中'
|
||||
},
|
||||
'auto.components.sidebar.workspace.status.6c1efa2cf8': {
|
||||
ko: '검토 중',
|
||||
zh: '评审中',
|
||||
ja: 'レビュー中'
|
||||
},
|
||||
'auto.components.sidebar.workspace.status.409528031f': {
|
||||
ko: '검토',
|
||||
zh: '评审',
|
||||
ja: 'レビュー'
|
||||
},
|
||||
'auto.components.UpdateCard.actionBadge': {
|
||||
ko: '작업',
|
||||
zh: '操作',
|
||||
ja: '操作'
|
||||
},
|
||||
'auto.components.settings.GitPane.b559bf9899': {
|
||||
ko: '예: feature',
|
||||
zh: '例如 feature',
|
||||
ja: '例: feature'
|
||||
},
|
||||
'auto.components.mobile.slides.TerminalSlide.985373052e': {
|
||||
ko: '휴대폰 모드로 전환',
|
||||
zh: '切换到手机模式',
|
||||
ja: 'スマートフォンモードに切り替え'
|
||||
},
|
||||
'auto.components.GitHubItemDialog.a341343303': {
|
||||
ko: '리뷰 댓글이 추가되었습니다.',
|
||||
zh: '已添加评审评论。',
|
||||
ja: 'レビューコメントを追加しました。'
|
||||
},
|
||||
...KO_KEY_OVERRIDES
|
||||
}
|
||||
|
|
@ -0,0 +1,158 @@
|
|||
// Korean key overrides from high-visibility UI audit round 4.
|
||||
export const KO_KEY_OVERRIDES = {
|
||||
'auto.hooks.useSettingsNavigationMetadata.40d80bad8a': {
|
||||
ko: '베타',
|
||||
zh: '测试版',
|
||||
ja: 'ベータ'
|
||||
},
|
||||
'auto.components.settings.integrations.search.c450244ad7': {
|
||||
ko: '연동',
|
||||
zh: '集成',
|
||||
ja: '連携'
|
||||
},
|
||||
'auto.components.settings.integrations.search.e1263dd748': {
|
||||
ko: 'Jira',
|
||||
zh: 'Jira',
|
||||
ja: 'Jira'
|
||||
},
|
||||
'auto.components.settings.integrations.search.581844769a': {
|
||||
ko: 'MR',
|
||||
zh: 'MR',
|
||||
ja: 'MR'
|
||||
},
|
||||
'auto.components.settings.integrations.search.129fc59aa8': {
|
||||
ko: 'Gitea',
|
||||
zh: 'Gitea',
|
||||
ja: 'Gitea'
|
||||
},
|
||||
'auto.components.settings.integrations.search.03a7b275be': {
|
||||
ko: 'ADO',
|
||||
zh: 'ADO',
|
||||
ja: 'ADO'
|
||||
},
|
||||
'auto.components.settings.integrations.search.f16e41cc72': {
|
||||
ko: 'GitHub 연동',
|
||||
zh: 'GitHub 集成',
|
||||
ja: 'GitHub 連携'
|
||||
},
|
||||
'auto.components.settings.integrations.search.b50b71ef9d': {
|
||||
ko: 'GitLab 연동',
|
||||
zh: 'GitLab 集成',
|
||||
ja: 'GitLab 連携'
|
||||
},
|
||||
'auto.components.settings.integrations.search.aab86d64e5': {
|
||||
ko: 'Gitea 연동',
|
||||
zh: 'Gitea 集成',
|
||||
ja: 'Gitea 連携'
|
||||
},
|
||||
'auto.components.settings.integrations.search.617603509b': {
|
||||
ko: 'Jira 연동',
|
||||
zh: 'Jira 集成',
|
||||
ja: 'Jira 連携'
|
||||
},
|
||||
'auto.components.settings.integrations.search.af6611fa6e': {
|
||||
ko: 'Azure DevOps 연동',
|
||||
zh: 'Azure DevOps 集成',
|
||||
ja: 'Azure DevOps 連携'
|
||||
},
|
||||
'auto.components.settings.integrations.search.67a2a0e868': {
|
||||
ko: 'Bitbucket 연동',
|
||||
zh: 'Bitbucket 集成',
|
||||
ja: 'Bitbucket 連携'
|
||||
},
|
||||
'auto.components.settings.integrations.search.b027b4b318': {
|
||||
ko: 'Linear 연동',
|
||||
zh: 'Linear 集成',
|
||||
ja: 'Linear 連携'
|
||||
},
|
||||
'auto.components.settings.integrations.search.b79c21bd42': {
|
||||
ko: 'GitHub',
|
||||
zh: 'GitHub',
|
||||
ja: 'GitHub'
|
||||
},
|
||||
'auto.components.settings.integrations.search.b40cbe5de4': {
|
||||
ko: 'glab',
|
||||
zh: 'glab',
|
||||
ja: 'glab'
|
||||
},
|
||||
'auto.components.settings.integrations.search.20540996ef': {
|
||||
ko: '자격 증명',
|
||||
zh: '凭据',
|
||||
ja: '認証情報'
|
||||
},
|
||||
'auto.components.skills.SkillsPage.b088e0785d': {
|
||||
ko: '베타',
|
||||
zh: '测试版',
|
||||
ja: 'ベータ'
|
||||
},
|
||||
'auto.components.workspace.space.WorkspaceSpacePage.e8d6ba11ab': {
|
||||
ko: '베타',
|
||||
zh: '测试版',
|
||||
ja: 'ベータ'
|
||||
},
|
||||
'auto.components.status.bar.WorkspaceSpaceCompactPanel.c361440dc0': {
|
||||
ko: '베타',
|
||||
zh: '测试版',
|
||||
ja: 'ベータ'
|
||||
},
|
||||
'auto.components.github.PRFilterDropdowns.19bb6f115f': {
|
||||
ko: 'reviewed-by',
|
||||
zh: 'reviewed-by',
|
||||
ja: 'reviewed-by'
|
||||
},
|
||||
'auto.components.TaskPage.9cd11ba218': {
|
||||
ko: 'Jira',
|
||||
zh: 'Jira',
|
||||
ja: 'Jira'
|
||||
},
|
||||
'auto.components.settings.TasksPane.6b23a34f6d': {
|
||||
ko: 'Jira',
|
||||
zh: 'Jira',
|
||||
ja: 'Jira'
|
||||
},
|
||||
'auto.components.settings.jira.integration.card.09742875cd': {
|
||||
ko: 'Jira',
|
||||
zh: 'Jira',
|
||||
ja: 'Jira'
|
||||
},
|
||||
'auto.components.workspace.cleanup.WorkspaceCleanupDialog.1b18868569': {
|
||||
ko: '리뷰 필요',
|
||||
zh: '待评审',
|
||||
ja: 'レビュー待ち'
|
||||
},
|
||||
'auto.components.onboarding.OnboardingFlow.a5e5da02f7': {
|
||||
ko: '연동',
|
||||
zh: '集成',
|
||||
ja: '連携'
|
||||
},
|
||||
'auto.components.GitLabItemDialog.4168eb2c51': {
|
||||
ko: '해결',
|
||||
zh: '解决',
|
||||
ja: '解決'
|
||||
},
|
||||
'auto.components.sidebar.workspace.status.6c1efa2cf8': {
|
||||
ko: '리뷰 중',
|
||||
zh: '评审中',
|
||||
ja: 'レビュー中'
|
||||
},
|
||||
'auto.components.sidebar.workspace.status.409528031f': {
|
||||
ko: '리뷰',
|
||||
zh: '评审',
|
||||
ja: 'レビュー'
|
||||
},
|
||||
'auto.components.sidebar.workspace.status.caebe3c10f': {
|
||||
ko: 'Conductor 리뷰',
|
||||
zh: 'Conductor 评审',
|
||||
ja: 'Conductor レビュー'
|
||||
},
|
||||
'auto.components.sidebar.workspace.list.groups.6798dc7c94': {
|
||||
ko: '리뷰 중',
|
||||
zh: '评审中',
|
||||
ja: 'レビュー中'
|
||||
},
|
||||
'auto.components.TaskPage.524f095d55': {
|
||||
ko: '리뷰 필요',
|
||||
zh: '待评审',
|
||||
ja: 'レビュー待ち'
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,60 @@
|
|||
// Korean phrase fixes from high-visibility UI audit round 5.
|
||||
export const KO_PHRASE_FIXES_ROUND5 = [
|
||||
{ pattern: /검토 필요/g, replacement: '리뷰 필요', whenEnIncludes: 'Needs review' },
|
||||
{ pattern: /검토 중/g, replacement: '리뷰 중', whenEnIncludes: 'In review' },
|
||||
{
|
||||
pattern: /마크다운 검토 노트/g,
|
||||
replacement: '마크다운 리뷰 노트',
|
||||
whenEnIncludes: 'Markdown Review Notes'
|
||||
},
|
||||
{ pattern: /충돌 검토/g, replacement: '충돌 리뷰', whenEnIncludes: 'Review conflicts' },
|
||||
{ pattern: /메모 검토/g, replacement: '리뷰 노트', whenEnIncludes: 'Review notes' },
|
||||
{ pattern: /검토 스냅샷/g, replacement: '리뷰 스냅샷', whenEnIncludes: 'review snapshot' },
|
||||
{ pattern: /검토를 위해/g, replacement: '리뷰를 위해', whenEnIncludes: 'for review' },
|
||||
{ pattern: /검토 작업/g, replacement: '리뷰 작업', whenEnIncludes: 'review task' },
|
||||
{ pattern: /지휘자 검토/g, replacement: 'Conductor 리뷰', whenEnIncludes: 'Conductor Review' },
|
||||
{ pattern: /다시 검토/g, replacement: '재리뷰', whenEnIncludes: 'Re-review' },
|
||||
{ pattern: /검토하고/g, replacement: '리뷰하고', whenEnIncludes: 'Review and' },
|
||||
{ pattern: /검토합니다/g, replacement: '리뷰합니다', whenEnIncludes: 'Review the' },
|
||||
{ pattern: /검토하세요/g, replacement: '리뷰하세요', whenEnIncludes: 'Review recent' },
|
||||
{ pattern: /반복 검토/g, replacement: '반복 리뷰', whenEnIncludes: 'Recurring review' },
|
||||
{
|
||||
pattern: /출시 준비 검토/g,
|
||||
replacement: '출시 준비 리뷰',
|
||||
whenEnIncludes: 'Release readiness review'
|
||||
},
|
||||
{
|
||||
pattern: /일일 변화 검토/g,
|
||||
replacement: '일일 변경 리뷰',
|
||||
whenEnIncludes: 'Daily change review'
|
||||
},
|
||||
{ pattern: /점검과 검토/g, replacement: '체크 및 리뷰', whenEnIncludes: 'checks and review' },
|
||||
{ pattern: /별도로 검토/g, replacement: '별도로 리뷰', whenEnIncludes: 'reviewed separately' },
|
||||
{
|
||||
pattern: /변경 사항을 검토/g,
|
||||
replacement: '변경 사항을 리뷰',
|
||||
whenEnIncludes: 'review changes'
|
||||
},
|
||||
{ pattern: /소스\/인증 검토/g, replacement: 'src/auth 리뷰', whenEnIncludes: 'review src/auth' },
|
||||
{
|
||||
pattern: /인증 예외 사례 검토/g,
|
||||
replacement: '인증 예외 사례 리뷰',
|
||||
whenEnIncludes: 'review auth edge cases'
|
||||
},
|
||||
{
|
||||
pattern: /실행 가능한 문제만/g,
|
||||
replacement: '실행 가능한 이슈만',
|
||||
whenEnIncludes: 'actionable issues'
|
||||
},
|
||||
{ pattern: /설정 > 통합/g, replacement: '설정 > 연동', whenEnIncludes: 'Integrations' },
|
||||
{ pattern: /Orca 기술/g, replacement: 'Orca 스킬', whenEnIncludes: 'Orca skill' },
|
||||
{ pattern: /확인하다 #/g, replacement: '체크 #', whenEnIncludes: 'check #' },
|
||||
{ pattern: /제출하다\./g, replacement: '제출.', whenEnIncludes: 'to submit.' },
|
||||
{ pattern: /추적하다/g, replacement: '추적', whenEnIncludes: 'trace' },
|
||||
{ pattern: /시작하다:/g, replacement: '실행:', whenEnIncludes: 'Launch:' },
|
||||
{ pattern: /시작하다/g, replacement: '실행', whenEnIncludes: 'Launch' },
|
||||
{ pattern: /표시하다/g, replacement: '표시', whenEnIncludes: 'display' },
|
||||
{ pattern: /구성하다/g, replacement: '작성', whenEnIncludes: 'compose' },
|
||||
{ pattern: /유지하다/g, replacement: '유지', whenEnIncludes: 'Keep' },
|
||||
{ pattern: /확인하다/g, replacement: '검증', whenEnIncludes: 'verify' }
|
||||
]
|
||||
|
|
@ -0,0 +1,71 @@
|
|||
import { KO_PHRASE_FIXES_ROUND5 } from './locale-ko-phrase-fixes-round5.mjs'
|
||||
|
||||
// Korean phrase fixes from high-visibility UI audit round 4.
|
||||
export const KO_PHRASE_FIXES_ROUND4 = [
|
||||
{ pattern: /일반적인/g, replacement: '일반', whenEnIncludes: 'common' },
|
||||
{ pattern: /검토자/g, replacement: '리뷰어', whenEnIncludes: 'Reviewer' },
|
||||
{
|
||||
pattern: /검토자 친화적/g,
|
||||
replacement: '리뷰어 친화적',
|
||||
whenEnIncludes: 'reviewer-friendly'
|
||||
},
|
||||
{ pattern: /호스팅 검토/g, replacement: '호스팅 PR', whenEnIncludes: 'hosted review' },
|
||||
{ pattern: /호스팅된 검토/g, replacement: '호스팅 PR', whenEnIncludes: 'hosted review' },
|
||||
{ pattern: /Git AI 작성자/g, replacement: 'Git AI Author', whenEnIncludes: 'Git AI Author' },
|
||||
{ pattern: /지테아/g, replacement: 'Gitea', whenEnIncludes: 'Gitea' },
|
||||
{ pattern: /기테아/g, replacement: 'Gitea', whenEnIncludes: 'gitea' },
|
||||
{
|
||||
pattern: /보고된 확인이/g,
|
||||
replacement: '보고된 체크가',
|
||||
whenEnIncludes: 'reported checks'
|
||||
},
|
||||
{ pattern: /보고된 확인/g, replacement: '보고된 체크', whenEnIncludes: 'reported checks' },
|
||||
{ pattern: /에이전트 기술/g, replacement: '에이전트 스킬', whenEnIncludes: 'agent skill' },
|
||||
{ pattern: /오케스트레이션 기술/g, replacement: '오케스트레이션 스킬', whenEnIncludes: 'skill' },
|
||||
{ pattern: /컴퓨터 사용 기술/g, replacement: 'Computer Use 스킬', whenEnIncludes: 'skill' },
|
||||
{ pattern: /브라우저 사용 기술/g, replacement: 'Browser Use 스킬', whenEnIncludes: 'skill' },
|
||||
{ pattern: /Orca CLI 기술/g, replacement: 'Orca CLI 스킬', whenEnIncludes: 'skill' },
|
||||
{ pattern: /CLI 및 기술/g, replacement: 'CLI 및 스킬', whenEnIncludes: 'skill' },
|
||||
{ pattern: /로컬 기술/g, replacement: '로컬 스킬', whenEnIncludes: 'skill' },
|
||||
{ pattern: /스캐닝 기술/g, replacement: '스킬 스캔 중', whenEnIncludes: 'Scanning skills' },
|
||||
{ pattern: /맹세하다/g, replacement: 'OAuth', whenEnIncludes: 'oauth' },
|
||||
{ pattern: /해결하다/g, replacement: '해결', whenEnIncludes: 'Resolve' },
|
||||
{ pattern: /회신하다/g, replacement: '회신', whenEnIncludes: 'Reply' },
|
||||
{ pattern: /답장하다/g, replacement: '답장', whenEnIncludes: 'Reply' },
|
||||
{ pattern: /관리하다/g, replacement: '관리', whenEnIncludes: 'Manage' },
|
||||
{ pattern: /인용하다/g, replacement: '인용', whenEnIncludes: 'Quote' },
|
||||
{ pattern: /저장하다/g, replacement: '저장', whenEnIncludes: 'Save' },
|
||||
{ pattern: /확인하다/g, replacement: '확인', whenEnIncludes: 'Confirm' },
|
||||
{ pattern: /이동하다/g, replacement: '이동', whenEnIncludes: 'Move' },
|
||||
{ pattern: /입력하다/g, replacement: '입력', whenEnIncludes: 'Enter' },
|
||||
{ pattern: /재개하다/g, replacement: '재개', whenEnIncludes: 'Resume' },
|
||||
{ pattern: /등록하다/g, replacement: '등록', whenEnIncludes: 'Register' },
|
||||
{ pattern: /생성하다/g, replacement: '생성', whenEnIncludes: 'Create' },
|
||||
{ pattern: /다시 시작하다/g, replacement: '다시 시작', whenEnIncludes: 'Restart' },
|
||||
{ pattern: /차단하다/g, replacement: '차단', whenEnIncludes: 'Block' },
|
||||
{ pattern: /복제하다/g, replacement: '복제', whenEnIncludes: 'Duplicate' },
|
||||
{ pattern: /복원하다/g, replacement: '복원', whenEnIncludes: 'Restore' },
|
||||
{ pattern: /구성하다/g, replacement: '구성', whenEnIncludes: 'Configure' },
|
||||
{ pattern: /집중하다/g, replacement: '집중', whenEnIncludes: 'Focus' },
|
||||
{ pattern: /시작하다/g, replacement: '시작', whenEnIncludes: 'Start' },
|
||||
{ pattern: /일하다/g, replacement: '작업', whenEnIncludes: 'Work' },
|
||||
{ pattern: /표시하다/g, replacement: '표시', whenEnIncludes: 'Show' },
|
||||
{ pattern: /통과하다/g, replacement: '통과', whenEnIncludes: 'Pass' },
|
||||
{ pattern: /유지하다/g, replacement: '유지', whenEnIncludes: 'Maintain' },
|
||||
{ pattern: /승인하다/g, replacement: '승인', whenEnIncludes: 'Approve' },
|
||||
{ pattern: /지원하다/g, replacement: '지원', whenEnIncludes: 'Support' },
|
||||
{ pattern: /추적하다/g, replacement: '추적', whenEnIncludes: 'Track' },
|
||||
{ pattern: /공유하다/g, replacement: '공유', whenEnIncludes: 'Share' },
|
||||
{ pattern: /개방하다/g, replacement: '열기', whenEnIncludes: 'Open' },
|
||||
{ pattern: /재인증하다/g, replacement: '재인증', whenEnIncludes: 'Re-authenticate' },
|
||||
{ pattern: /설립하다/g, replacement: '발견됨', whenEnIncludes: 'Found' },
|
||||
{ pattern: /밀어서 말하다/g, replacement: '누르고 말하기', whenEnIncludes: 'push to talk' },
|
||||
{ pattern: /검토 필요/g, replacement: '리뷰 필요', whenEnIncludes: 'Review needed' },
|
||||
{ pattern: /검토가 필요하다/g, replacement: '리뷰가 필요함', whenEnIncludes: 'Review needed' },
|
||||
{
|
||||
pattern: /다음과 같은 기술/g,
|
||||
replacement: '다음과 같은 스킬',
|
||||
whenEnIncludes: 'Supports skills'
|
||||
},
|
||||
...KO_PHRASE_FIXES_ROUND5
|
||||
]
|
||||
|
|
@ -0,0 +1,231 @@
|
|||
// Korean value overrides from high-visibility UI audit rounds 2–4.
|
||||
// Why: keep locale-value-overrides.mjs under max-lines while preserving exact-match repairs.
|
||||
export const KO_VALUE_OVERRIDES = {
|
||||
issue: '이슈',
|
||||
issues: '이슈',
|
||||
Issues: '이슈',
|
||||
'view issues': '이슈 보기',
|
||||
'project issues': '프로젝트 이슈',
|
||||
'Start workspace from issue': '이슈에서 워크스페이스 시작',
|
||||
'Jira issue': 'Jira 이슈',
|
||||
'Close Jira issue preview': 'Jira 이슈 미리보기 닫기',
|
||||
'file an issue': '이슈 등록',
|
||||
'Reading issue #': '이슈 # 읽는 중',
|
||||
'Issue source': '이슈 소스',
|
||||
'Removing…': '제거 중…',
|
||||
'Removing...': '제거 중...',
|
||||
pulling: '가져오는 중',
|
||||
lint: 'lint',
|
||||
simulator: '시뮬레이터',
|
||||
Rerun: '재실행',
|
||||
'Check reruns requested': '검사 재실행 요청됨',
|
||||
'Request reviewer {{value0}}': '리뷰어 요청 {{value0}}',
|
||||
'Unrequest reviewer {{value0}}': '리뷰 요청 취소 {{value0}}',
|
||||
'Review requested': '리뷰 요청됨',
|
||||
'merge request': 'MR',
|
||||
MergeRequest: 'MR',
|
||||
partial: '부분 연결',
|
||||
'Assign issue': '이슈 할당',
|
||||
'Edit issue': '이슈 편집',
|
||||
'Copy issue identifier': '이슈 식별자 복사',
|
||||
'Issue description formatting': '이슈 설명 형식',
|
||||
'More issue workspace actions': '추가 이슈 워크스페이스 작업',
|
||||
'updated the issue ·': '이슈를 업데이트했습니다 ·',
|
||||
'Showing issues from': '다음에서 이슈 표시',
|
||||
'No fetched issues match the selected teams': '선택한 팀과 일치하는 가져온 이슈가 없습니다.',
|
||||
'Failed to save issue-source preference': '이슈 소스 환경설정을 저장하지 못했습니다.',
|
||||
'No issues match this Linear context.': '이 Linear 컨텍스트와 일치하는 이슈가 없습니다.',
|
||||
'No issues match the selected preset.': '선택한 사전 설정과 일치하는 이슈가 없습니다.',
|
||||
'No GitLab issues match this filter.': '이 필터와 일치하는 GitLab 이슈가 없습니다.',
|
||||
'Failed to create issue.': '이슈를 생성하지 못했습니다.',
|
||||
'This repo has no Issue Types.': '이 저장소에는 이슈 유형이 없습니다.',
|
||||
'scoped issues': '범위가 지정된 이슈',
|
||||
'Open {{value0}} issues': '{{value0}} 이슈 열기',
|
||||
'Issue #{{value0}}': '이슈 #{{value0}}',
|
||||
'Linked issue #{{value0}}': '연결된 이슈 #{{value0}}',
|
||||
'Issue # or GitHub URL': '이슈 # 또는 GitHub URL',
|
||||
'Add Orca attribution to commits, PRs, and issues.': '커밋, PR 및 이슈에 Orca 속성을 추가합니다.',
|
||||
'Paste an issue URL, or enter a number. Leave blank to remove the link.':
|
||||
'이슈 URL을 붙여넣거나 숫자를 입력하세요. 링크를 제거하려면 비워두세요.',
|
||||
'Connect Linear in Settings to search issues.': '이슈를 검색하려면 설정에서 Linear를 연결하세요.',
|
||||
'Add Linear access to browse and link issues.':
|
||||
'이슈를 탐색하고 연결하려면 Linear 액세스를 추가하세요.',
|
||||
"Couldn't load issues from": '다음에서 이슈를 로드할 수 없습니다.',
|
||||
'Select a team from the project workspace before filing this issue.':
|
||||
'이 이슈를 제출하기 전에 프로젝트 워크스페이스에서 팀을 선택하세요.',
|
||||
'Issue has no repo slug.': '이슈에 저장소 슬러그가 없습니다.',
|
||||
'Install the GitLab CLI to enable merge requests, issues, and pipelines.':
|
||||
'MR, 이슈 및 파이프라인을 활성화하려면 GitLab CLI를 설치하세요.',
|
||||
'Install the GitHub CLI to enable pull requests, issues, and checks.':
|
||||
'PR, 이슈 및 검사를 활성화하려면 GitHub CLI를 설치하세요.',
|
||||
'Pull requests, issues, and checks via the': 'PR, 이슈 및 검사는 다음을 통해 이루어집니다.',
|
||||
'Merge requests, issues, todos, and pipelines via the':
|
||||
'다음을 통해 MR, 이슈, 할 일, 파이프라인을 병합합니다.',
|
||||
'Orca uses the GitHub CLI (gh) to show pull requests, issues, and checks.':
|
||||
'Orca는 GitHub CLI(gh)를 사용하여 PR, 이슈 및 검사를 표시합니다.',
|
||||
'Shared hook and issue-automation defaults are defined in the repo and available to everyone who uses it.':
|
||||
'공유 후크 및 이슈 자동화 기본값은 저장소에 정의되어 있으며 이를 사용하는 모든 사람이 사용할 수 있습니다.',
|
||||
DRAFT_ISSUE: 'DRAFT_ISSUE',
|
||||
Reviewer: '리뷰어',
|
||||
Reviewers: '리뷰어',
|
||||
Review: '리뷰',
|
||||
Resolve: '해결',
|
||||
Reply: '회신',
|
||||
Manage: '관리',
|
||||
Quote: '인용',
|
||||
Confirm: '확인',
|
||||
Enter: '입력',
|
||||
Move: '이동',
|
||||
Resume: '재개',
|
||||
Register: '등록',
|
||||
Restart: '다시 시작',
|
||||
Block: '차단',
|
||||
Duplicate: '복제',
|
||||
Restore: '복원',
|
||||
Configure: '구성',
|
||||
Focus: '집중',
|
||||
Start: '시작',
|
||||
Work: '작업',
|
||||
Show: '표시',
|
||||
Pass: '통과',
|
||||
Maintain: '유지',
|
||||
Approve: '승인',
|
||||
Support: '지원',
|
||||
Track: '추적',
|
||||
Share: '공유',
|
||||
'Re-authenticate': '재인증',
|
||||
Skills: '스킬',
|
||||
skill: '스킬',
|
||||
Gitea: 'Gitea',
|
||||
gitea: 'Gitea',
|
||||
glab: 'glab',
|
||||
gh: 'gh',
|
||||
oauth: 'OAuth',
|
||||
ado: 'ADO',
|
||||
github: 'GitHub',
|
||||
gitlab: 'gitlab',
|
||||
atlassian: 'Atlassian',
|
||||
jira: 'Jira',
|
||||
Jira: 'Jira',
|
||||
integrations: '연동',
|
||||
mr: 'MR',
|
||||
integration: '연동',
|
||||
credentials: '자격 증명',
|
||||
'push to talk': '누르고 말하기',
|
||||
'Start work': '작업 시작',
|
||||
Found: '발견됨',
|
||||
found: '발견됨',
|
||||
'Review needed': '리뷰 필요',
|
||||
'need review': '리뷰 필요',
|
||||
check: '확인',
|
||||
generate: '생성',
|
||||
reauthenticate: '재인증',
|
||||
wrk: '작업',
|
||||
'Reviewed by': '리뷰어',
|
||||
'Review from': '리뷰 출처',
|
||||
'Review comment added.': '리뷰 댓글이 추가되었습니다.',
|
||||
'Agent skills': '에이전트 스킬',
|
||||
'Agent Skills': '에이전트 스킬',
|
||||
'Agent skill': '에이전트 스킬',
|
||||
'Scanning skills': '스킬 스캔 중',
|
||||
'No local skills found': '로컬 스킬을 찾을 수 없습니다.',
|
||||
'Browser Use skill': 'Browser Use 스킬',
|
||||
'Computer Use skill': 'Computer Use 스킬',
|
||||
'CLI skill': 'CLI 스킬',
|
||||
'Orca CLI skill': 'Orca CLI 스킬',
|
||||
'No checks reported yet': '아직 보고된 체크가 없습니다.',
|
||||
'This pull request has no reported checks yet': '이 PR에는 아직 보고된 체크가 없습니다.',
|
||||
'Keyboard shortcuts for common actions.': '일반 작업에 대한 키보드 단축키입니다.',
|
||||
'Common emulator commands': '일반 에뮬레이터 명령',
|
||||
'GitHub Integration': 'GitHub 연동',
|
||||
'GitLab Integration': 'GitLab 연동',
|
||||
'Bitbucket Integration': 'Bitbucket 연동',
|
||||
'Azure DevOps Integration': 'Azure DevOps 연동',
|
||||
'Gitea Integration': 'Gitea 연동',
|
||||
'Jira Integration': 'Jira 연동',
|
||||
'Linear Integration': 'Linear 연동',
|
||||
'hosted review': '호스팅 PR',
|
||||
'Hosted review operation in progress…': '호스팅 PR 작업 진행 중…',
|
||||
'Open hosted review after creation': '생성 후 호스팅 PR 열기',
|
||||
'Reviewer id is unavailable for this GitLab user.':
|
||||
'이 GitLab 사용자의 리뷰어 ID를 사용할 수 없습니다.',
|
||||
'You have unsaved Git AI Author changes. Leaving will discard them.':
|
||||
'저장되지 않은 Git AI Author 변경사항이 있습니다. 떠나면 폐기됩니다.',
|
||||
'Discard unsaved Git AI Author changes?':
|
||||
'저장되지 않은 Git AI Author 변경사항을 삭제하시겠습니까?',
|
||||
'Branch naming, base refs, attribution, and Git AI Author.':
|
||||
'브랜치 이름 지정, 기본 참조, 속성 및 Git AI Author.',
|
||||
'Used by repositories that inherit global hosted-review defaults.':
|
||||
'전역 호스팅 PR 기본값을 상속하는 저장소에서 사용됩니다.',
|
||||
'Defaults used when the hosted-review composer opens.':
|
||||
'호스팅 PR 작성기가 열릴 때 사용되는 기본값입니다.',
|
||||
'Run hosted-review detail generation once when the composer opens.':
|
||||
'작성기가 열리면 호스팅 PR 세부 정보 생성을 한 번 실행합니다.',
|
||||
'Checks require a Git branch and hosted review context':
|
||||
'검사에는 Git 브랜치 및 호스팅 PR 컨텍스트가 필요합니다.',
|
||||
'Start an agent from failed hosted-review checks.':
|
||||
'실패한 호스팅 PR 체크에서 에이전트를 시작합니다.',
|
||||
'Start an agent for local or hosted-review merge conflicts.':
|
||||
'로컬 또는 호스팅 PR 병합 충돌에 대한 에이전트를 시작합니다.',
|
||||
'Review the workspace error below, then refresh.':
|
||||
'아래 워크스페이스 오류를 확인한 후 새로고침하세요.',
|
||||
'Review inactive workspaces before deleting their local files and Orca state.':
|
||||
'로컬 파일과 Orca 상태를 삭제하기 전에 비활성 워크스페이스를 확인하세요.',
|
||||
'Review inactive workspaces (': '비활성 워크스페이스 확인(',
|
||||
'Review the settings that will be imported from your Ghostty config.':
|
||||
'Ghostty 구성에서 가져올 설정을 확인하세요.',
|
||||
'GitHub requires review approval before this pull request can merge':
|
||||
'이 PR을 병합하려면 GitHub에서 리뷰 승인이 필요합니다.',
|
||||
'Prefer domain nouns from the task, avoid ticket IDs, and keep names reviewer-friendly.':
|
||||
'작업에서 도메인 명사를 선호하고, 티켓 ID를 피하고, 리뷰어 친화적인 이름을 유지하세요.',
|
||||
'Enable AI author': 'AI author 활성화',
|
||||
'AI author': 'AI author',
|
||||
'This pull request has no reported checks yet.': '이 PR에는 아직 보고된 체크가 없습니다.',
|
||||
'Needs review': '리뷰 필요',
|
||||
'In review': '리뷰 중',
|
||||
'Conductor Review': 'Conductor 리뷰',
|
||||
'Markdown Review Notes': '마크다운 리뷰 노트',
|
||||
'Review conflicts': '충돌 리뷰',
|
||||
'Review notes': '리뷰 노트',
|
||||
'Daily change review': '일일 변경 리뷰',
|
||||
'Release readiness review': '출시 준비 리뷰',
|
||||
'Recurring review': '반복 리뷰',
|
||||
'review src/auth': 'src/auth 리뷰',
|
||||
'review auth edge cases': '인증 예외 사례 리뷰',
|
||||
Launch: '실행',
|
||||
'Launch:': '실행:',
|
||||
launch: '실행',
|
||||
trace: '추적',
|
||||
display: '표시',
|
||||
compose: '작성',
|
||||
verify: '검증',
|
||||
Keep: '유지',
|
||||
'check #': '체크 #',
|
||||
'to submit.': '제출.',
|
||||
'Install the Orca skill so agents know to use the Orca CLI.':
|
||||
'에이전트가 Orca CLI를 사용하도록 Orca 스킬을 설치하세요.',
|
||||
'Linear, GitLab, Bitbucket, Azure DevOps, Gitea, and Jira live in Settings > Integrations.':
|
||||
'Linear, GitLab, Bitbucket, Azure DevOps, Gitea 및 Jira는 설정 > 연동에 있습니다.',
|
||||
'changed since you last approved. Re-review before it runs':
|
||||
'마지막으로 승인한 이후 변경되었습니다. 실행하기 전에 재리뷰하세요.',
|
||||
'Review and edit the full command input before starting an agent.':
|
||||
'에이전트를 시작하기 전에 전체 명령 입력을 리뷰하고 편집하세요.',
|
||||
'Create a {{value0}} to start checks and review.':
|
||||
'체크와 리뷰를 시작하려면 {{value0}}을(를) 만드세요.',
|
||||
"Control Orca from your phone. Check on agents, review changes, and kick off tasks while you're away from your desk.":
|
||||
'휴대폰에서 Orca를 제어하세요. 자리를 비운 동안 에이전트를 확인하고, 변경 사항을 리뷰하고, 작업을 시작하세요.',
|
||||
'Skill command copied and inserted below for review.':
|
||||
'리뷰를 위해 스킬 명령을 아래에 복사하여 삽입했습니다.',
|
||||
'X finishes, send it the review task.”': 'X가 끝나면 리뷰 작업을 보냅니다.”',
|
||||
'Conflicted files are reviewed separately': '충돌하는 파일은 별도로 리뷰됩니다.',
|
||||
'This review snapshot no longer has any live unresolved conflicts.':
|
||||
'이 리뷰 스냅샷에는 더 이상 실시간으로 해결되지 않은 충돌이 없습니다.',
|
||||
'Review before attaching. Captured page context may include visible site content.':
|
||||
'첨부하기 전에 리뷰하세요. 캡처된 페이지 컨텍스트에는 눈에 보이는 사이트 콘텐츠가 포함될 수 있습니다.',
|
||||
'Review the repository health. Check dependency updates, failing tests, lint/typecheck status, and risky open changes. Summarize findings and suggest the next action.':
|
||||
'저장소 상태를 리뷰합니다. 종속성 업데이트, 실패한 테스트, lint/typecheck 상태, 위험한 공개 변경 사항을 확인하세요. 조사 결과를 요약하고 다음 조치를 제안합니다.',
|
||||
'Review recent changes in this workspace. Focus on correctness risks, UX regressions, missing tests, and follow-up tasks. Keep the report short and actionable.':
|
||||
'이 워크스페이스의 최근 변경사항을 리뷰하세요. 정확성 위험, UX 회귀, 누락된 테스트 및 후속 작업에 중점을 둡니다. 보고서를 짧고 실행 가능하게 유지하세요.',
|
||||
'Check for stuck work, stale generated files, failing validation, and anything that needs human attention. Report only actionable issues.':
|
||||
'작업 중단, 오래 생성된 파일, 유효성 검사 실패 및 사람의 주의가 필요한 모든 사항을 확인하세요. 실행 가능한 이슈만 보고하세요.'
|
||||
}
|
||||
|
|
@ -0,0 +1,379 @@
|
|||
import { KO_PHRASE_FIXES_ROUND4 } from './locale-ko-phrase-fixes.mjs'
|
||||
import { ZH_PHRASE_FIXES_ROUND5 } from './locale-zh-phrase-fixes-round5.mjs'
|
||||
|
||||
import { JA_PHRASE_FIXES } from './locale-ja-phrase-fixes.mjs'
|
||||
|
||||
export const LOCALE_PHRASE_FIXES = {
|
||||
ko: [
|
||||
{ pattern: /해고하다/g, replacement: '닫기', whenEnIncludes: 'Dismiss' },
|
||||
{ pattern: /선택 과목/g, replacement: '선택 사항', whenEnIncludes: 'Optional' },
|
||||
{ pattern: /상담원/g, replacement: '에이전트', whenEnIncludes: 'agent' },
|
||||
{ pattern: /상담사/g, replacement: '에이전트', whenEnIncludes: 'agent' },
|
||||
{ pattern: /지점/g, replacement: '브랜치', whenEnIncludes: 'ranch' },
|
||||
{ pattern: /분기/g, replacement: '브랜치', whenEnIncludes: 'ranch' },
|
||||
{ pattern: /나뭇가지/g, replacement: '브랜치', whenEnIncludes: 'ranch' },
|
||||
{ pattern: /홍보/g, replacement: 'PR', whenEnIncludes: 'PR' },
|
||||
{ pattern: /선형/g, replacement: 'Linear', whenEnIncludes: 'Linear' },
|
||||
{ pattern: /관현악법/g, replacement: '오케스트레이션', whenEnIncludes: 'Orchestration' },
|
||||
{ pattern: /자치령 대표/g, replacement: '에이전트', whenEnIncludes: 'Agents' },
|
||||
{ pattern: /찾다\.\.\./g, replacement: '검색...', whenEnIncludes: 'Search' },
|
||||
{ pattern: /찾다/g, replacement: '검색', whenEnIncludes: 'Search' },
|
||||
{ pattern: /구하다/g, replacement: '저장', whenEnIncludes: 'Save' },
|
||||
{ pattern: /설치하다/g, replacement: '설치', whenEnIncludes: 'Install' },
|
||||
{ pattern: /장애가 있는/g, replacement: '비활성', whenEnIncludes: 'Disabled' },
|
||||
{ pattern: /준비가 된/g, replacement: '준비됨', whenEnIncludes: 'Ready' },
|
||||
{ pattern: /다시 놓기/g, replacement: '재설정', whenEnIncludes: 'Reset' },
|
||||
{ pattern: /새로 고치다/g, replacement: '새로고침', whenEnIncludes: 'Refresh' },
|
||||
{ pattern: /분명한/g, replacement: '지우기', whenEnIncludes: 'Clear' },
|
||||
{ pattern: /할 수 있게 하다/g, replacement: '활성화', whenEnIncludes: 'Enable' },
|
||||
{ pattern: /갈등/g, replacement: '충돌', whenEnIncludes: 'conflict' },
|
||||
{ pattern: /절약/g, replacement: '저장', whenEnIncludes: 'Saving' },
|
||||
{ pattern: /이동하는/g, replacement: '모바일', whenEnIncludes: 'Mobile' },
|
||||
{ pattern: /체크 무늬/g, replacement: '검사', whenEnIncludes: 'Checks' },
|
||||
{ pattern: /양수인/g, replacement: '담당자', whenEnIncludes: 'assignee' },
|
||||
{ pattern: /논평/g, replacement: '댓글', whenEnIncludes: 'Comment' },
|
||||
{
|
||||
pattern: /이력서 작업공간/g,
|
||||
replacement: '워크스페이스',
|
||||
whenEnIncludes: 'Resume workspace'
|
||||
},
|
||||
{
|
||||
pattern: /이력서 워크스페이스/g,
|
||||
replacement: '워크스페이스',
|
||||
whenEnIncludes: 'Resume workspace'
|
||||
},
|
||||
{
|
||||
pattern: /PR에 첨부된 이력서/g,
|
||||
replacement: 'PR에 연결된',
|
||||
whenEnIncludes: 'Resume workspace attached to PR'
|
||||
},
|
||||
{ pattern: /부동/g, replacement: '플로팅', whenEnIncludes: 'Floating' },
|
||||
{ pattern: /합격/g, replacement: '통과', whenEnIncludes: 'passing' },
|
||||
{ pattern: /작업공간/g, replacement: '워크스페이스', whenEnIncludes: 'workspace' },
|
||||
{ pattern: /작업 공간/g, replacement: '워크스페이스', whenEnIncludes: 'workspace' },
|
||||
{ pattern: /보다/g, replacement: '보기', whenEnIncludes: 'View' },
|
||||
{ pattern: /다시 해 보다/g, replacement: '다시 시도', whenEnIncludes: 'Retry' },
|
||||
{ pattern: /버리다/g, replacement: '버리기', whenEnIncludes: 'Discard' },
|
||||
{ pattern: /일반적인/g, replacement: '일반', whenEnIncludes: 'General' },
|
||||
{ pattern: /모습/g, replacement: '외관', whenEnIncludes: 'Appearance' },
|
||||
{ pattern: /목소리/g, replacement: '음성', whenEnIncludes: 'Voice' },
|
||||
{ pattern: /원격 측정/g, replacement: '텔레메트리', whenEnIncludes: 'Telemetry' },
|
||||
{ pattern: /충돌 신고/g, replacement: '크래시 신고', whenEnIncludes: 'Crash' },
|
||||
{ pattern: /충돌 보고서/g, replacement: '크래시 보고서', whenEnIncludes: 'crash report' },
|
||||
{ pattern: /충돌 세부/g, replacement: '크래시 세부', whenEnIncludes: 'crash' },
|
||||
{ pattern: /워크스페이스이/g, replacement: '워크스페이스가', whenEnIncludes: 'workspace' },
|
||||
{ pattern: /워크스페이스을/g, replacement: '워크스페이스를', whenEnIncludes: 'workspace' },
|
||||
{ pattern: /워크스페이스은/g, replacement: '워크스페이스는', whenEnIncludes: 'workspace' },
|
||||
{ pattern: /워크스페이스으로/g, replacement: '워크스페이스로', whenEnIncludes: 'workspace' },
|
||||
{ pattern: /작업 영역/g, replacement: '워크스페이스', whenEnIncludes: 'workspace' },
|
||||
{ pattern: /새로 고치는 중/g, replacement: '새로고침 중', whenEnIncludes: 'refresh' },
|
||||
{ pattern: /새로 고치지/g, replacement: '새로고침하지', whenEnIncludes: 'refresh' },
|
||||
{ pattern: /새로 고치는/g, replacement: '새로고침', whenEnIncludes: 'Refreshing' },
|
||||
{ pattern: /새로 고치고/g, replacement: '새로고침하고', whenEnIncludes: 'refresh' },
|
||||
{ pattern: /새로 고치/g, replacement: '새로고침', whenEnIncludes: 'Refresh' },
|
||||
{ pattern: /GitHub 문제/g, replacement: 'GitHub 이슈', whenEnIncludes: 'issue' },
|
||||
{ pattern: /미리 보는/g, replacement: '미리보기', whenEnIncludes: 'Preview' },
|
||||
{ pattern: /미리 보고/g, replacement: '미리보기하고', whenEnIncludes: 'Preview' },
|
||||
{ pattern: /풀 리퀘스트/g, replacement: 'PR', whenEnIncludes: 'pull request' },
|
||||
{ pattern: /풀 요청/g, replacement: 'PR', whenEnIncludes: 'pull request' },
|
||||
{ pattern: /풀 요청/g, replacement: 'PR', whenEnIncludes: 'pull-request' },
|
||||
{ pattern: /하위 문제/g, replacement: '하위 이슈', whenEnIncludes: 'sub-issue' },
|
||||
{ pattern: /어린이들/g, replacement: '하위', whenEnIncludes: 'children' },
|
||||
{ pattern: /어린이/g, replacement: '하위', whenEnIncludes: 'child' },
|
||||
{ pattern: /배상/g, replacement: '전송 중', whenEnIncludes: 'sending' },
|
||||
{ pattern: /보내다/g, replacement: '보내기', whenEnIncludes: 'Send' },
|
||||
{ pattern: /파견/g, replacement: '디스패치', whenEnIncludes: 'dispatch' },
|
||||
{ pattern: /이 호를/g, replacement: '이 이슈를', whenEnIncludes: 'opened this issue' },
|
||||
{ pattern: /문제를 열/g, replacement: '이슈를 열', whenEnIncludes: 'opened this issue' },
|
||||
{ pattern: /전시/g, replacement: '표시 중', whenEnIncludes: 'Showing' },
|
||||
{ pattern: /현재의/g, replacement: '현재', whenEnIncludes: 'Current' },
|
||||
{ pattern: /강제삭제/g, replacement: '강제 삭제', whenEnIncludes: 'Force Delete' },
|
||||
{ pattern: /끈/g, replacement: '문자열', whenEnIncludes: 'string' },
|
||||
{ pattern: /나뉘다/g, replacement: '분할', whenEnIncludes: 'split' },
|
||||
{ pattern: /제1터미널/g, replacement: '터미널 1', whenEnIncludes: 'Terminal 1' },
|
||||
{ pattern: /알았어요/g, replacement: '확인', whenEnIncludes: 'Got it' },
|
||||
{ pattern: /선택 해제/g, replacement: '거부', whenEnIncludes: 'Opt out' },
|
||||
{ pattern: /사이드바 전환/g, replacement: '사이드바 표시/숨기기', whenEnIncludes: 'Toggle' },
|
||||
{ pattern: /Jira 문제/g, replacement: 'Jira 이슈', whenEnIncludes: 'issue' },
|
||||
{ pattern: /GitLab 문제/g, replacement: 'GitLab 이슈', whenEnIncludes: 'issue' },
|
||||
{ pattern: /문제 소스/g, replacement: '이슈 소스', whenEnIncludes: 'issue source' },
|
||||
{ pattern: /문제 #/g, replacement: '이슈 #', whenEnIncludes: 'issue' },
|
||||
{ pattern: /문제에서/g, replacement: '이슈에서', whenEnIncludes: 'from issue' },
|
||||
{ pattern: /프로젝트 문제/g, replacement: '프로젝트 이슈', whenEnIncludes: 'project issues' },
|
||||
{ pattern: /할당된 문제/g, replacement: '할당된 이슈', whenEnIncludes: 'assigned issue' },
|
||||
{ pattern: /문제 보기/g, replacement: '이슈 보기', whenEnIncludes: 'view issues' },
|
||||
{ pattern: /문제를 제기하다/g, replacement: '이슈 등록', whenEnIncludes: 'file an issue' },
|
||||
{ pattern: /읽기 문제 #/g, replacement: '이슈 # 읽는 중', whenEnIncludes: 'Reading issue' },
|
||||
{ pattern: /병합 요청/g, replacement: 'MR', whenEnIncludes: 'merge request' },
|
||||
{ pattern: /병합요청/g, replacement: 'MR', whenEnIncludes: 'MergeRequest' },
|
||||
{ pattern: /풀이/g, replacement: '제거 중', whenEnIncludes: 'Removing' },
|
||||
{ pattern: /풀 중/g, replacement: '가져오는 중', whenEnIncludes: 'pulling' },
|
||||
{ pattern: /보풀/g, replacement: 'lint', whenEnIncludes: 'lint' },
|
||||
{ pattern: /모의 실험 장치/g, replacement: '시뮬레이터', whenEnIncludes: 'simulator' },
|
||||
{ pattern: /재방송/g, replacement: '재실행', whenEnIncludes: 'Rerun' },
|
||||
{
|
||||
pattern: /재방송 요청 확인/g,
|
||||
replacement: '검사 재실행 요청됨',
|
||||
whenEnIncludes: 'Check reruns'
|
||||
},
|
||||
{ pattern: /요청 검토자/g, replacement: '리뷰어 요청', whenEnIncludes: 'Request reviewer' },
|
||||
{
|
||||
pattern: /요청 취소 검토자/g,
|
||||
replacement: '리뷰 요청 취소',
|
||||
whenEnIncludes: 'Unrequest reviewer'
|
||||
},
|
||||
{ pattern: /검토가 요청됨/g, replacement: '리뷰 요청됨', whenEnIncludes: 'Review requested' },
|
||||
{ pattern: /문제 소스/g, replacement: '이슈 소스', whenEnIncludes: 'issue-source' },
|
||||
{ pattern: /PR, 문제/g, replacement: 'PR, 이슈', whenEnIncludes: 'issues' },
|
||||
{ pattern: /, 문제,/g, replacement: ', 이슈,', whenEnIncludes: 'issues' },
|
||||
{ pattern: /및 문제/g, replacement: '및 이슈', whenEnIncludes: 'issues' },
|
||||
{ pattern: /문제 자동화/g, replacement: '이슈 자동화', whenEnIncludes: 'issue-automation' },
|
||||
...KO_PHRASE_FIXES_ROUND4
|
||||
],
|
||||
zh: [
|
||||
{ pattern: /客服人员/g, replacement: '代理', whenEnIncludes: 'agent' },
|
||||
{ pattern: /会议/g, replacement: '会话', whenEnIncludes: 'session' },
|
||||
{ pattern: /港口/g, replacement: '端口', whenEnIncludes: 'ort' },
|
||||
{ pattern: /公关/g, replacement: 'PR', whenEnIncludes: 'PR' },
|
||||
{ pattern: /虎鲸:\/\//g, replacement: 'orca://', whenEnIncludes: 'orca://' },
|
||||
{ pattern: /代理商/g, replacement: '代理', whenEnIncludes: 'agent' },
|
||||
{ pattern: /智能体/g, replacement: '代理', whenEnIncludes: 'agent' },
|
||||
{ pattern: /分支机构/g, replacement: '分支', whenEnIncludes: 'ranch' },
|
||||
{ pattern: /座席/g, replacement: '代理', whenEnIncludes: 'agent' },
|
||||
{ pattern: /汽车/g, replacement: '自动', whenEnIncludes: 'Auto' },
|
||||
{ pattern: /清爽/g, replacement: '刷新中', whenEnIncludes: 'Refreshing' },
|
||||
{ pattern: /瓦斯尔/g, replacement: 'WSL', whenEnIncludes: 'wsl' },
|
||||
{ pattern: /细绳/g, replacement: '字符串', whenEnIncludes: 'string' },
|
||||
{ pattern: /在职的/g, replacement: '处理中', whenEnIncludes: 'Working' },
|
||||
{ pattern: /编曲/g, replacement: '编排', whenEnIncludes: 'Orchestration' },
|
||||
{ pattern: /复印门票/g, replacement: '复制工单', whenEnIncludes: 'Copy ticket' },
|
||||
{ pattern: /达尔文/g, replacement: 'darwin', whenEnIncludes: 'darwin' },
|
||||
{ pattern: /外貌/g, replacement: '外观', whenEnIncludes: 'Appearance' },
|
||||
{ pattern: /一般的/g, replacement: '通用', whenEnIncludes: 'General' },
|
||||
{ pattern: /先进的/g, replacement: '高级', whenEnIncludes: 'Advanced' },
|
||||
{ pattern: /实验性的/g, replacement: '实验性', whenEnIncludes: 'Experimental' },
|
||||
{ pattern: /移动的/g, replacement: '移动端', whenEnIncludes: 'Mobile' },
|
||||
{ pattern: /嗓音/g, replacement: '语音', whenEnIncludes: 'Voice' },
|
||||
{ pattern: /电脑使用/g, replacement: '计算机控制', whenEnIncludes: 'Computer Use' },
|
||||
{ pattern: /快捷方式/g, replacement: '快捷键', whenEnIncludes: 'Shortcuts' },
|
||||
{ pattern: /入职清单/g, replacement: '入门清单', whenEnIncludes: 'Onboarding checklist' },
|
||||
{ pattern: /发射代理/g, replacement: '启动代理', whenEnIncludes: 'Launch agent' },
|
||||
{ pattern: /地位/g, replacement: '状态', whenEnIncludes: 'Status' },
|
||||
{ pattern: /受让人/g, replacement: '负责人', whenEnIncludes: 'assignee' },
|
||||
{ pattern: /开放工作区/g, replacement: '打开工作区', whenEnIncludes: 'Open workspace' },
|
||||
{ pattern: /工作空间/g, replacement: '工作区', whenEnIncludes: 'Workspace' },
|
||||
{ pattern: /丢失的/g, replacement: '缺失', whenEnIncludes: 'Missing' },
|
||||
{
|
||||
pattern: /聆听捷径/g,
|
||||
replacement: '正在录制快捷键',
|
||||
whenEnIncludes: 'Listening for shortcut'
|
||||
},
|
||||
{ pattern: /寻找捷径/g, replacement: '搜索快捷键', whenEnIncludes: 'Find shortcuts' },
|
||||
{ pattern: /连接到Orca/g, replacement: '连接到 Orca', whenEnIncludes: 'Connect to Orca' },
|
||||
{
|
||||
pattern: /开始使用Orca/g,
|
||||
replacement: '开始使用 Orca',
|
||||
whenEnIncludes: 'get started with Orca'
|
||||
},
|
||||
{ pattern: /本机桌面/g, replacement: '原生桌面', whenEnIncludes: 'Native desktop' },
|
||||
{ pattern: /当前的/g, replacement: '当前', whenEnIncludes: 'Current' },
|
||||
{ pattern: /返回应用程序/g, replacement: '返回应用', whenEnIncludes: 'Back to app' },
|
||||
{ pattern: /可以安装/g, replacement: '可安装', whenEnIncludes: 'Available to install' },
|
||||
{ pattern: /未已检测/g, replacement: '未检测到', whenEnIncludes: 'detected' },
|
||||
{ pattern: /(?<!未)检测到/g, replacement: '已检测', whenEnIncludes: 'detected' },
|
||||
{ pattern: /技巧/g, replacement: '技能', whenEnIncludes: 'skill' },
|
||||
{ pattern: /地点/g, replacement: '位置', whenEnIncludes: 'location' },
|
||||
{ pattern: /吉拉问题/g, replacement: 'Jira 议题', whenEnIncludes: 'Jira issue' },
|
||||
{ pattern: /新吉拉问题/g, replacement: '新建 Jira 议题', whenEnIncludes: 'New Jira issue' },
|
||||
{ pattern: /在吉拉中打开/g, replacement: '在 Jira 中打开', whenEnIncludes: 'Open in Jira' },
|
||||
{ pattern: /连接吉拉/g, replacement: '连接 Jira', whenEnIncludes: 'Connect Jira' },
|
||||
{ pattern: /隐藏吉拉/g, replacement: '隐藏 Jira', whenEnIncludes: 'Hide Jira' },
|
||||
{ pattern: /吉拉集成/g, replacement: 'Jira 集成', whenEnIncludes: 'Jira Integration' },
|
||||
{ pattern: /吉拉/g, replacement: 'Jira', whenEnIncludes: 'Jira' },
|
||||
{ pattern: /Linear问题/g, replacement: 'Linear 议题', whenEnIncludes: 'Linear' },
|
||||
{ pattern: /Jira问题/g, replacement: 'Jira 议题', whenEnIncludes: 'Jira' },
|
||||
{
|
||||
pattern: /合并请求请求/g,
|
||||
replacement: '拉取请求已合并',
|
||||
whenEnIncludes: 'Pull request merged'
|
||||
},
|
||||
{ pattern: /USB设备/g, replacement: 'USB 设备', whenEnIncludes: 'USB Devices' },
|
||||
{ pattern: /球队/g, replacement: '团队', whenEnIncludes: 'teams' },
|
||||
{
|
||||
pattern: / {{value0}} 或 {{value1}} /g,
|
||||
replacement: ' {{value0}}/{{value1}} ',
|
||||
whenEnIncludes: 'of {{value1}} done'
|
||||
},
|
||||
{ pattern: /打开这个问题/g, replacement: '创建了此议题', whenEnIncludes: 'opened this issue' },
|
||||
{ pattern: /不和谐/g, replacement: 'Discord', whenEnIncludes: 'Discord' },
|
||||
{ pattern: /GitHub 问题/g, replacement: 'GitHub 议题', whenEnIncludes: 'issue' },
|
||||
{ pattern: /Jira 问题/g, replacement: 'Jira 议题', whenEnIncludes: 'issue' },
|
||||
{ pattern: /GitLab 问题/g, replacement: 'GitLab 议题', whenEnIncludes: 'issue' },
|
||||
{ pattern: /问题类型/g, replacement: '议题类型', whenEnIncludes: 'issue' },
|
||||
{ pattern: /问题来源/g, replacement: '议题来源', whenEnIncludes: 'issue' },
|
||||
{ pattern: /问题源/g, replacement: '议题源', whenEnIncludes: 'issue' },
|
||||
{ pattern: /问题标题/g, replacement: '议题标题', whenEnIncludes: 'issue' },
|
||||
{ pattern: /问题描述/g, replacement: '议题描述', whenEnIncludes: 'issue' },
|
||||
{ pattern: /问题标识符/g, replacement: '议题标识符', whenEnIncludes: 'issue' },
|
||||
{ pattern: /问题编号/g, replacement: '议题编号', whenEnIncludes: 'issue' },
|
||||
{ pattern: /问题自动化/g, replacement: '议题自动化', whenEnIncludes: 'issue' },
|
||||
{ pattern: /问题集/g, replacement: '议题集', whenEnIncludes: 'issue' },
|
||||
{ pattern: /从问题开始工作区/g, replacement: '从议题开始工作区', whenEnIncludes: 'issue' },
|
||||
{ pattern: /问题所附/g, replacement: '议题所附', whenEnIncludes: 'issue' },
|
||||
{ pattern: /此问题所附/g, replacement: '此议题所附', whenEnIncludes: 'issue' },
|
||||
{ pattern: /在提交此问题之前/g, replacement: '在提交此议题之前', whenEnIncludes: 'issue' },
|
||||
{ pattern: /在创建问题之前/g, replacement: '在创建议题之前', whenEnIncludes: 'issue' },
|
||||
{ pattern: /创建一个新问题/g, replacement: '创建一个新议题', whenEnIncludes: 'issue' },
|
||||
{ pattern: /从选定的问题开始/g, replacement: '从选定的议题开始', whenEnIncludes: 'issue' },
|
||||
{ pattern: /更新了问题/g, replacement: '更新了议题', whenEnIncludes: 'issue' },
|
||||
{ pattern: /更多问题工作区/g, replacement: '更多议题工作区', whenEnIncludes: 'issue' },
|
||||
{ pattern: /搜索 GitHub 问题/g, replacement: '搜索 GitHub 议题', whenEnIncludes: 'issue' },
|
||||
{ pattern: /刷新 Jira 问题/g, replacement: '刷新 Jira 议题', whenEnIncludes: 'issue' },
|
||||
{ pattern: /打开 GitHub 问题/g, replacement: '打开 GitHub 议题', whenEnIncludes: 'issue' },
|
||||
{
|
||||
pattern: /自定义 GitHub 问题命令/g,
|
||||
replacement: '自定义 GitHub 议题命令',
|
||||
whenEnIncludes: 'issue'
|
||||
},
|
||||
{ pattern: /链接问题/g, replacement: '链接议题', whenEnIncludes: 'issue' },
|
||||
{ pattern: /链接的问题/g, replacement: '链接的议题', whenEnIncludes: 'issue' },
|
||||
{ pattern: /GH问题/g, replacement: 'GH 议题', whenEnIncludes: 'issue' },
|
||||
{ pattern: /问题 #/g, replacement: '议题 #', whenEnIncludes: 'issue' },
|
||||
{ pattern: /问题没有/g, replacement: '议题没有', whenEnIncludes: 'issue' },
|
||||
{ pattern: /问题上/g, replacement: '议题上', whenEnIncludes: 'Issues' },
|
||||
{ pattern: /项目问题/g, replacement: '项目议题', whenEnIncludes: 'issue' },
|
||||
{ pattern: /范围问题/g, replacement: '范围议题', whenEnIncludes: 'issue' },
|
||||
{ pattern: /提出问题/g, replacement: '提交议题', whenEnIncludes: 'file an issue' },
|
||||
{ pattern: /创建问题/g, replacement: '创建议题', whenEnIncludes: 'issue' },
|
||||
{ pattern: /分配问题/g, replacement: '分配议题', whenEnIncludes: 'issue' },
|
||||
{ pattern: /编辑问题/g, replacement: '编辑议题', whenEnIncludes: 'issue' },
|
||||
{ pattern: /查看问题/g, replacement: '查看议题', whenEnIncludes: 'issue' },
|
||||
{ pattern: /无法更新 Jira 问题/g, replacement: '无法更新 Jira 议题', whenEnIncludes: 'issue' },
|
||||
{ pattern: /无法创建 Jira 问题/g, replacement: '无法创建 Jira 议题', whenEnIncludes: 'issue' },
|
||||
{ pattern: /无法创建问题/g, replacement: '无法创建议题', whenEnIncludes: 'issue' },
|
||||
{ pattern: /未发现 Jira 问题/g, replacement: '未发现 Jira 议题', whenEnIncludes: 'issue' },
|
||||
{ pattern: /关闭 Jira 问题预览/g, replacement: '关闭 Jira 议题预览', whenEnIncludes: 'issue' },
|
||||
{ pattern: /无法加载问题/g, replacement: '无法加载议题', whenEnIncludes: 'issue' },
|
||||
{ pattern: /没有分配的问题/g, replacement: '没有分配的议题', whenEnIncludes: 'issue' },
|
||||
{
|
||||
pattern: /没有问题与此Linear上下文匹配/g,
|
||||
replacement: '没有议题与此 Linear 上下文匹配',
|
||||
whenEnIncludes: 'issue'
|
||||
},
|
||||
{
|
||||
pattern: /没有与所选预设匹配的问题/g,
|
||||
replacement: '没有与所选预设匹配的议题',
|
||||
whenEnIncludes: 'issue'
|
||||
},
|
||||
{
|
||||
pattern: /没有获取与所选团队匹配的问题/g,
|
||||
replacement: '没有获取与所选团队匹配的议题',
|
||||
whenEnIncludes: 'issue'
|
||||
},
|
||||
{
|
||||
pattern: /浏览、编辑、创建 Jira 问题/g,
|
||||
replacement: '浏览、编辑、创建 Jira 议题',
|
||||
whenEnIncludes: 'issue'
|
||||
},
|
||||
{ pattern: /浏览和链接问题/g, replacement: '浏览和链接议题', whenEnIncludes: 'issue' },
|
||||
{
|
||||
pattern: /浏览、创建和链接问题/g,
|
||||
replacement: '浏览、创建和链接议题',
|
||||
whenEnIncludes: 'issue'
|
||||
},
|
||||
{
|
||||
pattern: /拉取请求、问题和检查/g,
|
||||
replacement: '拉取请求、议题和检查',
|
||||
whenEnIncludes: 'issue'
|
||||
},
|
||||
{
|
||||
pattern: /合并请求、问题和管道/g,
|
||||
replacement: '合并请求、议题和管道',
|
||||
whenEnIncludes: 'issue'
|
||||
},
|
||||
{
|
||||
pattern: /合并请求、问题、待办/g,
|
||||
replacement: '合并请求、议题、待办',
|
||||
whenEnIncludes: 'issue'
|
||||
},
|
||||
{ pattern: /提交、PR 和问题/g, replacement: '提交、PR 和议题', whenEnIncludes: 'issue' },
|
||||
{ pattern: /粘贴问题 URL/g, replacement: '粘贴议题 URL', whenEnIncludes: 'issue' },
|
||||
{ pattern: /阅读问题/g, replacement: '阅读议题', whenEnIncludes: 'issue' },
|
||||
{ pattern: /已打开问题/g, replacement: '已打开议题', whenEnIncludes: 'issue' },
|
||||
{
|
||||
pattern: /打开 {{value0}} 问题/g,
|
||||
replacement: '打开 {{value0}} 议题',
|
||||
whenEnIncludes: 'issue'
|
||||
},
|
||||
{ pattern: /显示问题来自/g, replacement: '显示议题来自', whenEnIncludes: 'issue' },
|
||||
{ pattern: /搜索问题/g, replacement: '搜索议题', whenEnIncludes: 'search issues' },
|
||||
{ pattern: /浏览问题/g, replacement: '浏览议题', whenEnIncludes: 'browse issues' },
|
||||
{ pattern: /复制Linear/g, replacement: '复制 Linear', whenEnIncludes: 'Linear' },
|
||||
{ pattern: /刷新Linear/g, replacement: '刷新 Linear', whenEnIncludes: 'Linear' },
|
||||
{ pattern: /无法更新Linear/g, replacement: '无法更新 Linear', whenEnIncludes: 'Linear' },
|
||||
{ pattern: /新Linear项目/g, replacement: '新建 Linear 项目', whenEnIncludes: 'Linear' },
|
||||
{ pattern: /添加Linear访问/g, replacement: '添加 Linear 访问', whenEnIncludes: 'Linear' },
|
||||
{ pattern: /Linear打开/g, replacement: '在 Linear 中打开', whenEnIncludes: 'Linear' },
|
||||
{ pattern: /以Linear方式打开/g, replacement: '在 Linear 中打开', whenEnIncludes: 'Linear' },
|
||||
{ pattern: /Linear视图/g, replacement: 'Linear 视图', whenEnIncludes: 'Linear' },
|
||||
{ pattern: /队伍/g, replacement: '团队', whenEnIncludes: 'teams' },
|
||||
{ pattern: /新特征/g, replacement: '新功能', whenEnIncludes: 'New features' },
|
||||
{ pattern: /审稿人/g, replacement: '评审人', whenEnIncludes: 'reviewer' },
|
||||
{ pattern: /审阅者/g, replacement: '评审人', whenEnIncludes: 'reviewer' },
|
||||
{ pattern: /电话/g, replacement: '手机', whenEnIncludes: 'phone' },
|
||||
{ pattern: /发射器/g, replacement: '启动器', whenEnIncludes: 'launcher' },
|
||||
{ pattern: /发射/g, replacement: '启动', whenEnIncludes: 'launch' },
|
||||
{ pattern: /完全的/g, replacement: '已完成', whenEnIncludes: 'Completed' },
|
||||
{ pattern: /排队/g, replacement: '内联', whenEnIncludes: 'Inline' },
|
||||
{ pattern: /床单/g, replacement: 'sheet', whenEnIncludes: 'sheet' },
|
||||
{ pattern: /评论评论/g, replacement: '评审评论', whenEnIncludes: 'Review comment' },
|
||||
{ pattern: /需要审查/g, replacement: '待评审', whenEnIncludes: 'Needs review' },
|
||||
{ pattern: /需要审查/g, replacement: '待评审', whenEnIncludes: 'need review' },
|
||||
{ pattern: /审核中/g, replacement: '评审中', whenEnIncludes: 'In review' },
|
||||
{ pattern: /已请求审核/g, replacement: '已请求评审', whenEnIncludes: 'Review requested' },
|
||||
{ pattern: /托管审核/g, replacement: '托管评审', whenEnIncludes: 'hosted review' },
|
||||
{ pattern: /托管审核/g, replacement: '托管评审', whenEnIncludes: 'Hosted review' },
|
||||
{ pattern: /审查冲突/g, replacement: '评审冲突', whenEnIncludes: 'Review conflicts' },
|
||||
{ pattern: /审查笔记/g, replacement: '评审笔记', whenEnIncludes: 'Review Notes' },
|
||||
{ pattern: /例如特征/g, replacement: '例如 feature', whenEnIncludes: 'e.g. feature' },
|
||||
{ pattern: /字体特征/g, replacement: '字体特性', whenEnIncludes: 'font features' },
|
||||
{ pattern: /审核批准/g, replacement: '评审批准', whenEnIncludes: 'review approval' },
|
||||
{ pattern: /行动食谱/g, replacement: '操作方案', whenEnIncludes: 'action recipes' },
|
||||
{ pattern: /更多行动/g, replacement: '更多操作', whenEnIncludes: 'More actions' },
|
||||
{ pattern: /更多PR行动/g, replacement: '更多 PR 操作', whenEnIncludes: 'More PR actions' },
|
||||
{
|
||||
pattern: /更多PR工作区行动/g,
|
||||
replacement: '更多 PR 工作区操作',
|
||||
whenEnIncludes: 'More PR workspace actions'
|
||||
},
|
||||
{ pattern: /的集体行动/g, replacement: '的分组操作', whenEnIncludes: 'Group actions' },
|
||||
{
|
||||
pattern: /没有阻碍PR行动/g,
|
||||
replacement: '没有阻塞 PR 操作',
|
||||
whenEnIncludes: 'blocking PR action'
|
||||
},
|
||||
{ pattern: /项目行动/g, replacement: '项目操作', whenEnIncludes: 'project actions' },
|
||||
{ pattern: /快速行动/g, replacement: '快捷操作', whenEnIncludes: 'Quick actions' },
|
||||
{
|
||||
pattern: /没有审稿人要求/g,
|
||||
replacement: '未请求评审人',
|
||||
whenEnIncludes: 'reviewers requested'
|
||||
},
|
||||
{ pattern: /审稿人被删除/g, replacement: '已移除评审人', whenEnIncludes: 'Reviewers removed' },
|
||||
{ pattern: /审稿人已删除/g, replacement: '已移除评审人', whenEnIncludes: 'Reviewer removed' },
|
||||
{ pattern: /审稿人要求/g, replacement: '已请求评审', whenEnIncludes: 'Reviewers requested' },
|
||||
{ pattern: /被阻止/g, replacement: '已阻塞', whenEnIncludes: 'pull request is blocked' },
|
||||
{ pattern: /查看的文件/g, replacement: '已查看文件', whenEnIncludes: 'files viewed' },
|
||||
{ pattern: /查看 #/g, replacement: '检查 #', whenEnIncludes: 'check #' },
|
||||
{ pattern: /指挥进展/g, replacement: 'Conductor 进度', whenEnIncludes: 'Conductor Progress' },
|
||||
{ pattern: /指挥评论/g, replacement: 'Conductor 评审', whenEnIncludes: 'Conductor Review' },
|
||||
{ pattern: /指挥完成/g, replacement: 'Conductor 完成', whenEnIncludes: 'Conductor Done' },
|
||||
{ pattern: /琥珀色/g, replacement: 'Amber', whenEnIncludes: 'Amber' },
|
||||
{ pattern: /蓝色的/g, replacement: 'Blue', whenEnIncludes: 'Blue' },
|
||||
{ pattern: /中性的/g, replacement: 'Neutral', whenEnIncludes: 'Neutral' },
|
||||
{ pattern: /破坏性的/g, replacement: 'destructive', whenEnIncludes: 'destructive' },
|
||||
{ pattern: /注解/g, replacement: '批注', whenEnIncludes: 'Annotation' },
|
||||
...ZH_PHRASE_FIXES_ROUND5
|
||||
],
|
||||
ja: JA_PHRASE_FIXES
|
||||
}
|
||||
|
|
@ -0,0 +1,257 @@
|
|||
export const SEARCH_KEYWORD_OVERRIDES = {
|
||||
ko: {
|
||||
dark: '다크',
|
||||
light: '라이트',
|
||||
font: '폰트',
|
||||
theme: '테마',
|
||||
zoom: '확대',
|
||||
scale: '배율',
|
||||
proxy: '프록시',
|
||||
terminal: '터미널',
|
||||
workspace: '워크스페이스',
|
||||
folder: '폴더',
|
||||
language: '언어',
|
||||
locale: '로케일',
|
||||
translation: '번역',
|
||||
agent: '에이전트',
|
||||
agents: '에이전트',
|
||||
default: '기본값',
|
||||
command: '명령',
|
||||
override: '재정의',
|
||||
install: '설치',
|
||||
installed: '설치됨',
|
||||
detected: '감지됨',
|
||||
enable: '활성화',
|
||||
disable: '비활성화',
|
||||
hide: '숨기기',
|
||||
show: '표시',
|
||||
awake: '깨어 있음',
|
||||
sleep: '절전',
|
||||
power: '전원',
|
||||
hooks: '훅',
|
||||
status: '상태',
|
||||
waiting: '대기',
|
||||
done: '완료',
|
||||
tab: '탭',
|
||||
title: '제목',
|
||||
prompt: '프롬프트',
|
||||
rename: '이름 변경',
|
||||
session: '세션',
|
||||
location: '위치',
|
||||
detect: '감지',
|
||||
path: '경로',
|
||||
cli: 'CLI',
|
||||
'shell command': '셸 명령',
|
||||
'open in': '열기',
|
||||
delete: '삭제',
|
||||
confirm: '확인',
|
||||
update: '업데이트',
|
||||
cache: '캐시',
|
||||
timer: '타이머',
|
||||
search: '검색',
|
||||
examples: '예시',
|
||||
coordinator: '코디네이터',
|
||||
worker: '워커',
|
||||
DAG: 'DAG',
|
||||
dispatch: '디스패치',
|
||||
'child agents': '하위 에이전트',
|
||||
handoff: '핸드오프',
|
||||
messaging: '메시징',
|
||||
coordination: '코디네이션',
|
||||
'multi-agent': '멀티 에이전트',
|
||||
orchestration: '오케스트레이션',
|
||||
task: '작업',
|
||||
issue: '이슈',
|
||||
issues: '이슈',
|
||||
review: '리뷰',
|
||||
reviewer: '리뷰어',
|
||||
pr: 'PR',
|
||||
mr: 'MR',
|
||||
gitea: 'Gitea',
|
||||
glab: 'glab',
|
||||
gh: 'gh',
|
||||
github: 'GitHub',
|
||||
gitlab: 'gitlab',
|
||||
jira: 'Jira',
|
||||
atlassian: 'Atlassian',
|
||||
integration: '연동',
|
||||
integrations: '연동',
|
||||
credentials: '자격 증명',
|
||||
ado: 'ADO',
|
||||
oauth: 'OAuth',
|
||||
skill: '스킬',
|
||||
skills: '스킬',
|
||||
'pull request': 'PR',
|
||||
'merge request': 'MR',
|
||||
'self-hosted': '자체 호스팅',
|
||||
'azure devops': 'Azure DevOps',
|
||||
'azure repos': 'Azure Repos',
|
||||
bitbucket: 'Bitbucket',
|
||||
'api token': 'API 토큰',
|
||||
'api key': 'API 키',
|
||||
disconnect: '연결 해제',
|
||||
connect: '연결',
|
||||
trace: '추적',
|
||||
launch: '실행',
|
||||
display: '표시',
|
||||
compose: '작성',
|
||||
verify: '검증',
|
||||
keep: '유지',
|
||||
'check #': '체크 #'
|
||||
},
|
||||
zh: {
|
||||
dark: '深色',
|
||||
light: '浅色',
|
||||
font: '字体',
|
||||
theme: '主题',
|
||||
zoom: '缩放',
|
||||
scale: '比例',
|
||||
proxy: '代理',
|
||||
terminal: '终端',
|
||||
workspace: '工作区',
|
||||
folder: '文件夹',
|
||||
language: '语言',
|
||||
locale: '区域设置',
|
||||
translation: '翻译',
|
||||
agent: '代理',
|
||||
agents: '代理',
|
||||
default: '默认',
|
||||
command: '命令',
|
||||
override: '覆盖',
|
||||
install: '安装',
|
||||
installed: '已安装',
|
||||
detected: '已检测',
|
||||
enable: '启用',
|
||||
disable: '禁用',
|
||||
hide: '隐藏',
|
||||
show: '显示',
|
||||
awake: '唤醒',
|
||||
sleep: '睡眠',
|
||||
power: '电源',
|
||||
hooks: '钩子',
|
||||
status: '状态',
|
||||
waiting: '等待',
|
||||
done: '完成',
|
||||
tab: '标签页',
|
||||
title: '标题',
|
||||
prompt: '提示词',
|
||||
rename: '重命名',
|
||||
session: '会话',
|
||||
location: '位置',
|
||||
detect: '检测',
|
||||
path: '路径',
|
||||
cli: 'CLI',
|
||||
'shell command': 'Shell 命令',
|
||||
'open in': '打开方式',
|
||||
delete: '删除',
|
||||
confirm: '确认',
|
||||
update: '更新',
|
||||
cache: '缓存',
|
||||
timer: '计时器',
|
||||
search: '搜索',
|
||||
linear: 'Linear',
|
||||
jira: 'Jira',
|
||||
codex: 'Codex',
|
||||
claude: 'Claude',
|
||||
integration: '集成',
|
||||
integrations: '集成',
|
||||
pr: 'PR',
|
||||
mr: 'MR',
|
||||
github: 'GitHub',
|
||||
gitlab: 'GitLab',
|
||||
gitea: 'Gitea',
|
||||
oauth: 'OAuth',
|
||||
attribution: '归因',
|
||||
skill: '技能',
|
||||
skills: '技能',
|
||||
phone: '手机',
|
||||
review: '评审',
|
||||
reviewer: '评审人',
|
||||
launch: '启动',
|
||||
launcher: '启动器',
|
||||
action: '操作',
|
||||
actions: '操作',
|
||||
completed: '已完成',
|
||||
inline: '内联',
|
||||
destructive: 'destructive',
|
||||
sheet: 'sheet'
|
||||
},
|
||||
ja: {
|
||||
dark: 'ダーク',
|
||||
light: 'ライト',
|
||||
font: 'フォント',
|
||||
theme: 'テーマ',
|
||||
zoom: 'ズーム',
|
||||
scale: '倍率',
|
||||
proxy: 'プロキシ',
|
||||
terminal: 'ターミナル',
|
||||
workspace: 'ワークスペース',
|
||||
folder: 'フォルダ',
|
||||
language: '言語',
|
||||
locale: 'ロケール',
|
||||
translation: '翻訳',
|
||||
agent: 'エージェント',
|
||||
agents: 'エージェント',
|
||||
default: 'デフォルト',
|
||||
command: 'コマンド',
|
||||
override: '上書き',
|
||||
install: 'インストール',
|
||||
installed: 'インストール済み',
|
||||
detected: '検出済み',
|
||||
enable: '有効化',
|
||||
disable: '無効化',
|
||||
hide: '非表示',
|
||||
show: '表示',
|
||||
awake: '起きたまま',
|
||||
sleep: 'スリープ',
|
||||
power: '電源',
|
||||
hooks: 'フック',
|
||||
status: '状態',
|
||||
waiting: '待機',
|
||||
done: '完了',
|
||||
tab: 'タブ',
|
||||
title: 'タイトル',
|
||||
prompt: 'プロンプト',
|
||||
rename: '名前変更',
|
||||
session: 'セッション',
|
||||
location: '場所',
|
||||
detect: '検出',
|
||||
path: 'パス',
|
||||
cli: 'CLI',
|
||||
'shell command': 'シェルコマンド',
|
||||
'open in': '開く',
|
||||
delete: '削除',
|
||||
confirm: '確認',
|
||||
update: '更新',
|
||||
cache: 'キャッシュ',
|
||||
timer: 'タイマー',
|
||||
search: '検索',
|
||||
integration: '連携',
|
||||
experimental: '実験的機能',
|
||||
linear: 'Linear',
|
||||
jira: 'Jira',
|
||||
gitea: 'Gitea',
|
||||
glab: 'glab',
|
||||
mr: 'MR',
|
||||
'azure devops': 'Azure DevOps',
|
||||
issue: 'イシュー',
|
||||
issues: 'イシュー',
|
||||
pr: 'PR',
|
||||
'pull request': 'PR',
|
||||
phone: 'スマートフォン',
|
||||
skill: 'スキル',
|
||||
skills: 'スキル',
|
||||
launch: '起動',
|
||||
inline: 'インライン',
|
||||
action: '操作',
|
||||
actions: '操作',
|
||||
blocked: 'ブロック中',
|
||||
play: 'Play',
|
||||
review: 'レビュー',
|
||||
reviewer: 'レビュアー',
|
||||
'merge request': 'MR',
|
||||
'font features': 'フォント特性',
|
||||
conductor: 'Conductor',
|
||||
'needs review': 'レビュー待ち'
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,86 @@
|
|||
import { describe, expect, it } from 'vitest'
|
||||
|
||||
import { repairTranslatedValue } from './locale-translation-policy.mjs'
|
||||
|
||||
describe('locale-translation-policy ko round 5', () => {
|
||||
it('fixes Korean round 5 review, integration, and search keyword regressions', () => {
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.sidebar.workspace.status.409528031f',
|
||||
enValue: 'Review',
|
||||
localeValue: '검토',
|
||||
locale: 'ko'
|
||||
})
|
||||
).toBe('리뷰')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.sidebar.workspace.status.6c1efa2cf8',
|
||||
enValue: 'In review',
|
||||
localeValue: '검토 중',
|
||||
locale: 'ko'
|
||||
})
|
||||
).toBe('리뷰 중')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.TaskPage.524f095d55',
|
||||
enValue: 'Needs review',
|
||||
localeValue: '검토 필요',
|
||||
locale: 'ko'
|
||||
})
|
||||
).toBe('리뷰 필요')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.onboarding.IntegrationsStep.277f30eb34',
|
||||
enValue:
|
||||
'Linear, GitLab, Bitbucket, Azure DevOps, Gitea, and Jira live in Settings > Integrations.',
|
||||
localeValue:
|
||||
'Linear, GitLab, Bitbucket, Azure DevOps, Gitea 및 Jira는 설정 > 통합에 있습니다.',
|
||||
locale: 'ko'
|
||||
})
|
||||
).toBe('Linear, GitLab, Bitbucket, Azure DevOps, Gitea 및 Jira는 설정 > 연동에 있습니다.')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.settings.general.search.244e3fb4c8',
|
||||
enValue: 'Install the Orca skill so agents know to use the Orca CLI.',
|
||||
localeValue: '에이전트가 Orca CLI 사용 방법을 알 수 있도록 Orca 기술을 설치합니다.',
|
||||
locale: 'ko'
|
||||
})
|
||||
).toBe('에이전트가 Orca CLI를 사용하도록 Orca 스킬을 설치하세요.')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.editor.MarkdownPreview.322afab6ff',
|
||||
enValue: 'Review notes',
|
||||
localeValue: '메모 검토',
|
||||
locale: 'ko'
|
||||
})
|
||||
).toBe('리뷰 노트')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.right.sidebar.source.control.repo.icon.ecf63ec3ef',
|
||||
enValue: 'Launch',
|
||||
localeValue: '시작하다',
|
||||
locale: 'ko'
|
||||
})
|
||||
).toBe('실행')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.GitHubItemDialog.485609c4f2',
|
||||
enValue: 'check #',
|
||||
localeValue: '확인하다 #',
|
||||
locale: 'ko'
|
||||
})
|
||||
).toBe('체크 #')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.lib.automation.templates.maintenance.prompt',
|
||||
enValue:
|
||||
'Check for stuck work, stale generated files, failing validation, and anything that needs human attention. Report only actionable issues.',
|
||||
localeValue:
|
||||
'작업 중단, 오래 생성된 파일, 유효성 검사 실패 및 사람의 주의가 필요한 모든 사항을 확인하세요. 실행 가능한 문제만 보고하세요.',
|
||||
locale: 'ko'
|
||||
})
|
||||
).toBe(
|
||||
'작업 중단, 오래 생성된 파일, 유효성 검사 실패 및 사람의 주의가 필요한 모든 사항을 확인하세요. 실행 가능한 이슈만 보고하세요.'
|
||||
)
|
||||
})
|
||||
})
|
||||
|
|
@ -0,0 +1,104 @@
|
|||
import { describe, expect, it } from 'vitest'
|
||||
|
||||
import { repairTranslatedValue } from './locale-translation-policy.mjs'
|
||||
|
||||
describe('locale-translation-policy ja round 5', () => {
|
||||
it('fixes inline, launch, action, MR, and status chip regressions', () => {
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.GitHubItemDialog.6e43a16435',
|
||||
enValue: 'Inline',
|
||||
localeValue: '列をなして',
|
||||
locale: 'ja'
|
||||
})
|
||||
).toBe('インライン')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.repo.repo.icon.ecf63ec3ef',
|
||||
enValue: 'Launch',
|
||||
localeValue: '打ち上げ',
|
||||
locale: 'ja'
|
||||
})
|
||||
).toBe('起動')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.sidebar.workspace.status.2c19d1db33',
|
||||
enValue: 'Play',
|
||||
localeValue: '遊ぶ',
|
||||
locale: 'ja'
|
||||
})
|
||||
).toBe('Play')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.TaskPage.8396825a14',
|
||||
enValue: 'Action',
|
||||
localeValue: 'アクション',
|
||||
locale: 'ja'
|
||||
})
|
||||
).toBe('操作')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.TaskPage.456b8512da',
|
||||
enValue: 'MergeRequest',
|
||||
localeValue: 'マージリクエスト',
|
||||
locale: 'ja'
|
||||
})
|
||||
).toBe('MR')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.github.PRFilterDropdowns.7f1ba66c3e',
|
||||
enValue: 'Reviewed by',
|
||||
localeValue: 'レビュー者',
|
||||
locale: 'ja'
|
||||
})
|
||||
).toBe('レビュアー')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.sidebar.workspace.status.caebe3c10f',
|
||||
enValue: 'Conductor Review',
|
||||
localeValue: '指揮者のレビュー',
|
||||
locale: 'ja'
|
||||
})
|
||||
).toBe('Conductor レビュー')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.github.pr.merge.state.bf5e4c6c92',
|
||||
enValue: 'Blocked',
|
||||
localeValue: 'ブロック',
|
||||
locale: 'ja'
|
||||
})
|
||||
).toBe('ブロック中')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.settings.IntegrationsPane.027440e1cb',
|
||||
enValue: 'Merge requests, issues, todos, and pipelines via the',
|
||||
localeValue: 'リクエスト、イシュー、ToDo、パイプラインをマージします。',
|
||||
locale: 'ja'
|
||||
})
|
||||
).toBe('MR、イシュー、ToDo、パイプラインは')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.GitLabItemDialog.98718490e4',
|
||||
enValue: 'MR title is required.',
|
||||
localeValue: 'MRの肩書きは必須です。',
|
||||
locale: 'ja'
|
||||
})
|
||||
).toBe('MR タイトルは必須です。')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.settings.terminal.search.d5e6c7fab1',
|
||||
enValue: 'font features',
|
||||
localeValue: 'フォントの特徴',
|
||||
locale: 'ja'
|
||||
})
|
||||
).toBe('フォント特性')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.GitHubItemDialog.f05d237049',
|
||||
enValue: 'Add a project first',
|
||||
localeValue: 'まずプロジェクトを追加してください',
|
||||
locale: 'ja'
|
||||
})
|
||||
).toBe('まずプロジェクトを追加')
|
||||
})
|
||||
})
|
||||
|
|
@ -0,0 +1,328 @@
|
|||
import { LOCALE_KEY_OVERRIDES } from './locale-key-overrides.mjs'
|
||||
import { LOCALE_PHRASE_FIXES } from './locale-phrase-fixes.mjs'
|
||||
import { SEARCH_KEYWORD_OVERRIDES } from './locale-search-keyword-overrides.mjs'
|
||||
import { LOCALE_VALUE_OVERRIDES } from './locale-value-overrides.mjs'
|
||||
|
||||
export { LOCALE_KEY_OVERRIDES } from './locale-key-overrides.mjs'
|
||||
export { LOCALE_PHRASE_FIXES } from './locale-phrase-fixes.mjs'
|
||||
export { SEARCH_KEYWORD_OVERRIDES } from './locale-search-keyword-overrides.mjs'
|
||||
export { LOCALE_VALUE_OVERRIDES } from './locale-value-overrides.mjs'
|
||||
|
||||
const AGENT_CATALOG_PREFIX = 'auto.lib.agent.catalog.'
|
||||
const OPEN_IN_APP_CATALOG_PREFIX = 'auto.lib.open.in.app.catalog.'
|
||||
|
||||
// Why: product names and agent labels stay Latin — MT reads them as common words (Codex→copy, Gemini→zodiac).
|
||||
export const ENGLISH_ONLY_KEY_PREFIXES = [AGENT_CATALOG_PREFIX, OPEN_IN_APP_CATALOG_PREFIX]
|
||||
|
||||
export const NEVER_TRANSLATE_VALUES = new Set([
|
||||
'Aider',
|
||||
'Amp',
|
||||
'Antigravity',
|
||||
'Auggie',
|
||||
'Autohand Code',
|
||||
'Charm',
|
||||
'Claude',
|
||||
'Claude Agent Teams',
|
||||
'Cline',
|
||||
'Codebuff',
|
||||
'Codex',
|
||||
'Command Code',
|
||||
'Continue',
|
||||
'Cursor',
|
||||
'Droid',
|
||||
'Gemini',
|
||||
'GitHub Copilot',
|
||||
'Goose',
|
||||
'Grok',
|
||||
'Hermes',
|
||||
'Kilocode',
|
||||
'Kimi',
|
||||
'Kiro',
|
||||
'Linear',
|
||||
'Mistral Vibe',
|
||||
'OMP',
|
||||
'OpenClaude',
|
||||
'OpenClaw',
|
||||
'OpenCode',
|
||||
'Orca',
|
||||
'Pi',
|
||||
'PostHog',
|
||||
'Qwen Code',
|
||||
'Rovo Dev',
|
||||
'VS Code',
|
||||
'Zed',
|
||||
'codex',
|
||||
'gemini',
|
||||
'claude',
|
||||
'gh',
|
||||
'idle',
|
||||
'anthropic',
|
||||
'Discord',
|
||||
'WSL',
|
||||
'wsl',
|
||||
'darwin',
|
||||
'Nautilus',
|
||||
'GitHub',
|
||||
'Beta'
|
||||
])
|
||||
|
||||
export const BRAND_MISTRANSLATIONS = {
|
||||
ko: {
|
||||
Codex: ['사본', '코덱스'],
|
||||
Gemini: ['쌍둥이자리'],
|
||||
Claude: ['클로드'],
|
||||
Grok: ['그록'],
|
||||
Orca: ['오르카', '범고래'],
|
||||
Cursor: ['커서'],
|
||||
OpenCode: ['오픈코드'],
|
||||
OpenClaw: ['오픈클로'],
|
||||
OpenClaude: ['오픈클로드'],
|
||||
Antigravity: ['반중력'],
|
||||
Continue: ['계속하다'],
|
||||
Charm: ['매력'],
|
||||
Goose: ['거위'],
|
||||
Pi: ['파이'],
|
||||
'GitHub Copilot': ['GitHub 코파일럿', '코파일럿'],
|
||||
Discord: ['디스코드'],
|
||||
Linear: ['선형']
|
||||
},
|
||||
zh: {
|
||||
Codex: ['法典'],
|
||||
Gemini: ['双子座'],
|
||||
Claude: ['克洛德', '克劳德'],
|
||||
Grok: ['格罗克'],
|
||||
Orca: ['虎鲸', '逆戟鲸'],
|
||||
Cursor: ['光标'],
|
||||
OpenCode: ['开放代码'],
|
||||
OpenClaw: ['开爪'],
|
||||
OpenClaude: ['开放克劳德'],
|
||||
Antigravity: ['反重力'],
|
||||
Continue: ['继续'],
|
||||
Charm: ['魅力'],
|
||||
Goose: ['鹅'],
|
||||
Pi: ['圆周率'],
|
||||
Droid: ['机器人'],
|
||||
'GitHub Copilot': ['GitHub 副驾驶', '副驾驶'],
|
||||
Linear: ['线性', '线形'],
|
||||
Jira: ['吉拉']
|
||||
},
|
||||
ja: {
|
||||
Codex: ['法典', 'コーデックス'],
|
||||
Gemini: ['双子座'],
|
||||
Claude: ['クロード'],
|
||||
Grok: ['グロック'],
|
||||
Orca: ['シャチ', '逆戟鲸', 'オルカ'],
|
||||
Cursor: ['カーソル'],
|
||||
OpenCode: ['オープンコード', 'オープン・コード'],
|
||||
OpenClaw: ['オープンクロー'],
|
||||
OpenClaude: ['オープンクロード'],
|
||||
Antigravity: ['反重力'],
|
||||
Continue: ['続ける', '続行'],
|
||||
Charm: ['魅力'],
|
||||
Goose: ['ガチョウ', '雁'],
|
||||
Pi: ['円周率'],
|
||||
Droid: ['ロボット', 'ドロイド'],
|
||||
'GitHub Copilot': ['GitHub コパイロット', 'コパイロット'],
|
||||
Discord: ['不和'],
|
||||
Linear: ['線形']
|
||||
}
|
||||
}
|
||||
|
||||
export const NATIVE_PICKER_LABELS = {
|
||||
zh: { chinese: '中文(简体)', korean: '한국어', japanese: '日本語' },
|
||||
ko: { chinese: '中文(简体)', korean: '한국어', japanese: '日本語' },
|
||||
ja: { chinese: '中文(简体)', korean: '한국어', japanese: '日本語' }
|
||||
}
|
||||
|
||||
export function isEnglishOnlyKey(key) {
|
||||
return ENGLISH_ONLY_KEY_PREFIXES.some((prefix) => key.startsWith(prefix))
|
||||
}
|
||||
|
||||
export function shouldPreserveEnglishValue(enValue, key = '') {
|
||||
if (!enValue?.trim()) {
|
||||
return true
|
||||
}
|
||||
if (/^https?:\/\//.test(enValue) || enValue.startsWith('orca://')) {
|
||||
return true
|
||||
}
|
||||
if (isEnglishOnlyKey(key)) {
|
||||
return true
|
||||
}
|
||||
return NEVER_TRANSLATE_VALUES.has(enValue)
|
||||
}
|
||||
|
||||
function applyBrandMistranslationFixes(enValue, localeValue, locale) {
|
||||
let result = localeValue
|
||||
const mistranslations = BRAND_MISTRANSLATIONS[locale] ?? {}
|
||||
|
||||
for (const [brand, wrongForms] of Object.entries(mistranslations)) {
|
||||
if (!enValue.includes(brand)) {
|
||||
continue
|
||||
}
|
||||
if (result.includes(brand)) {
|
||||
continue
|
||||
}
|
||||
for (const wrong of wrongForms) {
|
||||
if (!result.includes(wrong)) {
|
||||
continue
|
||||
}
|
||||
// Why: "Copy identifier" legitimately uses 사본/复制 — only swap when English names the brand.
|
||||
if (brand === 'Codex' && /\bCopy\b/i.test(enValue)) {
|
||||
continue
|
||||
}
|
||||
result = result.replaceAll(wrong, brand)
|
||||
}
|
||||
}
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
function applyPhraseFixes(enValue, localeValue, locale) {
|
||||
let result = localeValue
|
||||
for (const fix of LOCALE_PHRASE_FIXES[locale] ?? []) {
|
||||
if (!enValue.toLowerCase().includes(fix.whenEnIncludes.toLowerCase())) {
|
||||
continue
|
||||
}
|
||||
result = result.replace(fix.pattern, fix.replacement)
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
export function repairTranslatedValue({ key, enValue, localeValue, locale }) {
|
||||
const keyOverride = LOCALE_KEY_OVERRIDES[key]?.[locale]
|
||||
if (keyOverride) {
|
||||
return keyOverride
|
||||
}
|
||||
|
||||
if (shouldPreserveEnglishValue(enValue, key)) {
|
||||
return enValue
|
||||
}
|
||||
|
||||
const override = LOCALE_VALUE_OVERRIDES[locale]?.[enValue]
|
||||
if (override) {
|
||||
return override
|
||||
}
|
||||
|
||||
if (key.includes('.search.')) {
|
||||
const searchOverride = SEARCH_KEYWORD_OVERRIDES[locale]?.[enValue]
|
||||
if (searchOverride) {
|
||||
return searchOverride
|
||||
}
|
||||
}
|
||||
|
||||
let result = localeValue
|
||||
result = applyBrandMistranslationFixes(enValue, result, locale)
|
||||
result = applyPhraseFixes(enValue, result, locale)
|
||||
|
||||
if (enValue.includes('orca://')) {
|
||||
result = result.replace(/虎鲸:\/\//g, 'orca://')
|
||||
}
|
||||
|
||||
if (enValue === 'Orca' || enValue.startsWith('Orca ')) {
|
||||
result = result
|
||||
.replaceAll('虎鲸', 'Orca')
|
||||
.replaceAll('逆戟鲸', 'Orca')
|
||||
.replaceAll('シャチ', 'Orca')
|
||||
}
|
||||
|
||||
if (enValue.includes('orca://')) {
|
||||
result = result.replace(/シャチ:\/\//g, 'orca://')
|
||||
}
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
export function collectStringLeaves(value, prefix = '', leaves = []) {
|
||||
if (typeof value === 'string') {
|
||||
leaves.push({ key: prefix, value })
|
||||
return leaves
|
||||
}
|
||||
if (typeof value !== 'object' || value === null || Array.isArray(value)) {
|
||||
return leaves
|
||||
}
|
||||
for (const [key, child] of Object.entries(value)) {
|
||||
collectStringLeaves(child, prefix ? `${prefix}.${key}` : key, leaves)
|
||||
}
|
||||
return leaves
|
||||
}
|
||||
|
||||
export function setLeaf(catalog, key, translatedValue) {
|
||||
const parts = key.split('.')
|
||||
let cursor = catalog
|
||||
for (let index = 0; index < parts.length - 1; index += 1) {
|
||||
cursor = cursor[parts[index]]
|
||||
}
|
||||
cursor[parts.at(-1)] = translatedValue
|
||||
}
|
||||
|
||||
export function repairCatalog(enCatalog, localeCatalog, locale) {
|
||||
const leaves = collectStringLeaves(enCatalog)
|
||||
let repaired = 0
|
||||
|
||||
for (const leaf of leaves) {
|
||||
const current = leaf.key.split('.').reduce((cursor, part) => cursor?.[part], localeCatalog)
|
||||
const next = repairTranslatedValue({
|
||||
key: leaf.key,
|
||||
enValue: leaf.value,
|
||||
localeValue: current,
|
||||
locale
|
||||
})
|
||||
if (next !== current) {
|
||||
setLeaf(localeCatalog, leaf.key, next)
|
||||
repaired += 1
|
||||
}
|
||||
}
|
||||
|
||||
if (localeCatalog.settings?.appearance?.language) {
|
||||
for (const [labelKey, label] of Object.entries(NATIVE_PICKER_LABELS[locale] ?? {})) {
|
||||
if (localeCatalog.settings.appearance.language[labelKey] !== label) {
|
||||
localeCatalog.settings.appearance.language[labelKey] = label
|
||||
repaired += 1
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (localeCatalog.menu) {
|
||||
if (locale === 'zh') {
|
||||
if (localeCatalog.menu.exploreOrca !== '探索 Orca') {
|
||||
localeCatalog.menu.exploreOrca = '探索 Orca'
|
||||
repaired += 1
|
||||
}
|
||||
if (localeCatalog.menu.gettingStarted !== 'Orca 入门') {
|
||||
localeCatalog.menu.gettingStarted = 'Orca 入门'
|
||||
repaired += 1
|
||||
}
|
||||
}
|
||||
if (locale === 'ko') {
|
||||
if (localeCatalog.menu.exploreOrca !== 'Orca 둘러보기') {
|
||||
localeCatalog.menu.exploreOrca = 'Orca 둘러보기'
|
||||
repaired += 1
|
||||
}
|
||||
if (localeCatalog.menu.gettingStarted !== 'Orca 시작하기') {
|
||||
localeCatalog.menu.gettingStarted = 'Orca 시작하기'
|
||||
repaired += 1
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return repaired
|
||||
}
|
||||
|
||||
export function repairCacheMap(cache, locale) {
|
||||
let repaired = 0
|
||||
for (const [enValue, translated] of cache.entries()) {
|
||||
const next = shouldPreserveEnglishValue(enValue)
|
||||
? enValue
|
||||
: repairTranslatedValue({
|
||||
key: '',
|
||||
enValue,
|
||||
localeValue: translated,
|
||||
locale
|
||||
})
|
||||
if (next !== translated) {
|
||||
cache.set(enValue, next)
|
||||
repaired += 1
|
||||
}
|
||||
}
|
||||
return repaired
|
||||
}
|
||||
|
|
@ -0,0 +1,586 @@
|
|||
import { describe, expect, it } from 'vitest'
|
||||
|
||||
import { repairTranslatedValue, shouldPreserveEnglishValue } from './locale-translation-policy.mjs'
|
||||
|
||||
describe('locale-translation-policy', () => {
|
||||
it('keeps agent catalog labels in English', () => {
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.lib.agent.catalog.760bc6883d',
|
||||
enValue: 'Codex',
|
||||
localeValue: '사본',
|
||||
locale: 'ko'
|
||||
})
|
||||
).toBe('Codex')
|
||||
})
|
||||
|
||||
it('does not break Copy identifier when fixing Codex', () => {
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.example',
|
||||
enValue: 'Copy identifier',
|
||||
localeValue: '사본 식별자',
|
||||
locale: 'ko'
|
||||
})
|
||||
).toBe('사본 식별자')
|
||||
})
|
||||
|
||||
it('fixes Dismiss homograph in Korean', () => {
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.store.slices.worktrees.889487d8bb',
|
||||
enValue: 'Dismiss',
|
||||
localeValue: '해고하다',
|
||||
locale: 'ko'
|
||||
})
|
||||
).toBe('닫기')
|
||||
})
|
||||
|
||||
it('fixes Gemini zodiac mistranslation in Chinese catalog', () => {
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.lib.agent.catalog.12e6baa4f7',
|
||||
enValue: 'Gemini',
|
||||
localeValue: '双子座',
|
||||
locale: 'zh'
|
||||
})
|
||||
).toBe('Gemini')
|
||||
})
|
||||
|
||||
it('preserves orca URL scheme in Chinese', () => {
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.web.WebConnect.27393856e4',
|
||||
enValue: 'orca://pair?code=...',
|
||||
localeValue: '虎鲸://pair?code=...',
|
||||
locale: 'zh'
|
||||
})
|
||||
).toBe('orca://pair?code=...')
|
||||
})
|
||||
|
||||
it('skips machine translation for standalone brands', () => {
|
||||
expect(shouldPreserveEnglishValue('Codex')).toBe(true)
|
||||
expect(shouldPreserveEnglishValue('Codex', 'auto.stats.StatsPane.7d26110cea')).toBe(true)
|
||||
expect(shouldPreserveEnglishValue('Show Codex usage')).toBe(false)
|
||||
})
|
||||
|
||||
it('fixes high-visibility homograph mistranslations', () => {
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.settings.AgentsPane.c9b33eb5c0',
|
||||
enValue: 'Refreshing…',
|
||||
localeValue: '爽やか…',
|
||||
locale: 'ja'
|
||||
})
|
||||
).toBe('更新中…')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.sidebar.workspace.status.28986b3747',
|
||||
enValue: 'Started an AI agent for the broken checks.',
|
||||
localeValue: '壊れた小切手に対して AI エージェントを開始しました。',
|
||||
locale: 'ja'
|
||||
})
|
||||
).toBe('失敗したチェックに対して AI エージェントを開始しました。')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.hooks.useSettingsNavigationMetadata.95a1886d94',
|
||||
enValue: 'Control terminals and agents from your phone.',
|
||||
localeValue: '電話機からターミナルとエージェントを制御します。',
|
||||
locale: 'ja'
|
||||
})
|
||||
).toBe('スマートフォンからターミナルとエージェントを操作')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.GitHubItemDialog.934add88b6',
|
||||
enValue: 'Reviewer',
|
||||
localeValue: '査読者',
|
||||
locale: 'ja'
|
||||
})
|
||||
).toBe('レビュアー')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.settings.AgentsPane.92033495ff',
|
||||
enValue: 'Auto',
|
||||
localeValue: '汽车',
|
||||
locale: 'zh'
|
||||
})
|
||||
).toBe('自动')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'menu.reportCrash',
|
||||
enValue: 'Report Crash...',
|
||||
localeValue: '충돌 신고...',
|
||||
locale: 'ko'
|
||||
})
|
||||
).toBe('크래시 신고...')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.App.722d03aa62',
|
||||
enValue: 'The crash report dialog hit an error.',
|
||||
localeValue: '충돌 보고서 대화 상자에 오류가 발생했습니다.',
|
||||
locale: 'ko'
|
||||
})
|
||||
).toBe('크래시 보고서 대화 상자에 오류가 발생했습니다.')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.dashboard.DashboardAgentRow.912e136cd9',
|
||||
enValue: 'Send',
|
||||
localeValue: '보내다',
|
||||
locale: 'ko'
|
||||
})
|
||||
).toBe('보내기')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.settings.orchestration.search.ca54c69806',
|
||||
enValue: 'DAG',
|
||||
localeValue: '가리비',
|
||||
locale: 'ko'
|
||||
})
|
||||
).toBe('DAG')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.settings.CliSection.068552b191',
|
||||
enValue: 'Removing…',
|
||||
localeValue: '풀이…',
|
||||
locale: 'ko'
|
||||
})
|
||||
).toBe('제거 중…')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.status.bar.SshStatusSegment.63a2b965f6',
|
||||
enValue: 'pulling',
|
||||
localeValue: '풀 중',
|
||||
locale: 'ko'
|
||||
})
|
||||
).toBe('가져오는 중')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.TaskPage.be8cf68d9f',
|
||||
enValue: 'view issues',
|
||||
localeValue: '문제 보기',
|
||||
locale: 'ko'
|
||||
})
|
||||
).toBe('이슈 보기')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.GitHubItemDialog.8c45901789',
|
||||
enValue: 'Request reviewer {{value0}}',
|
||||
localeValue: '요청 검토자 {{value0}}',
|
||||
locale: 'ko'
|
||||
})
|
||||
).toBe('리뷰어 요청 {{value0}}')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.feature.wall.ReviewPRViewAnimatedVisual.25f6838e43',
|
||||
enValue: 'lint',
|
||||
localeValue: '보풀',
|
||||
locale: 'ko'
|
||||
})
|
||||
).toBe('lint')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.GitLabItemDialog.4168eb2c51',
|
||||
enValue: 'Resolve',
|
||||
localeValue: '해결하다',
|
||||
locale: 'ko'
|
||||
})
|
||||
).toBe('해결')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.GitHubItemDialog.934add88b6',
|
||||
enValue: 'Reviewer',
|
||||
localeValue: '검토자',
|
||||
locale: 'ko'
|
||||
})
|
||||
).toBe('리뷰어')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.skills.SkillsPage.f43ad6edf3',
|
||||
enValue: 'Skills',
|
||||
localeValue: '기술',
|
||||
locale: 'ko'
|
||||
})
|
||||
).toBe('스킬')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.settings.integrations.search.581844769a',
|
||||
enValue: 'mr',
|
||||
localeValue: '~ 씨',
|
||||
locale: 'ko'
|
||||
})
|
||||
).toBe('MR')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.settings.integrations.search.e1263dd748',
|
||||
enValue: 'jira',
|
||||
localeValue: '지라',
|
||||
locale: 'ko'
|
||||
})
|
||||
).toBe('Jira')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.settings.integrations.search.aab86d64e5',
|
||||
enValue: 'Gitea Integration',
|
||||
localeValue: '지테아 통합',
|
||||
locale: 'ko'
|
||||
})
|
||||
).toBe('Gitea 연동')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.hooks.useSettingsNavigationMetadata.2b043783ef',
|
||||
enValue: 'Integrations',
|
||||
localeValue: '통합',
|
||||
locale: 'ko'
|
||||
})
|
||||
).toBe('연동')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.GitHubItemDialog.e52bed9264',
|
||||
enValue: 'No checks reported yet',
|
||||
localeValue: '아직 보고된 검사가 없습니다.',
|
||||
locale: 'ko'
|
||||
})
|
||||
).toBe('아직 보고된 체크가 없습니다.')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.right.sidebar.source.control.primary.action.7aad2c0240',
|
||||
enValue: 'Hosted review operation in progress…',
|
||||
localeValue: '호스팅 검토 작업 진행 중…',
|
||||
locale: 'ko'
|
||||
})
|
||||
).toBe('호스팅 PR 작업 진행 중…')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.settings.integrations.search.933deaf732',
|
||||
enValue: 'oauth',
|
||||
localeValue: '맹세하다',
|
||||
locale: 'ko'
|
||||
})
|
||||
).toBe('OAuth')
|
||||
})
|
||||
|
||||
it('fixes Chinese detected-state and skill terminology regressions', () => {
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.sidebar.SidebarNav.e518f544b1',
|
||||
enValue: 'No agents detected',
|
||||
localeValue: '未已检测代理',
|
||||
locale: 'zh'
|
||||
})
|
||||
).toBe('未检测到代理')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.skills.SkillsPage.38e0951c3a',
|
||||
enValue: 'Agent Skills',
|
||||
localeValue: '代理技巧',
|
||||
locale: 'zh'
|
||||
})
|
||||
).toBe('代理技能')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.settings.appearance.search.9ae151b26b',
|
||||
enValue: 'linear',
|
||||
localeValue: '线性',
|
||||
locale: 'zh'
|
||||
})
|
||||
).toBe('Linear')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.JiraIssueWorkspace.ef21405c6d',
|
||||
enValue: 'Jira issue',
|
||||
localeValue: '吉拉问题',
|
||||
locale: 'zh'
|
||||
})
|
||||
).toBe('Jira 议题')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.GitHubItemDialog.dbe5e2448e',
|
||||
enValue: 'Pull request merged',
|
||||
localeValue: '合并请求请求',
|
||||
locale: 'zh'
|
||||
})
|
||||
).toBe('拉取请求已合并')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.GitHubItemDialog.3ab6ac0fc8',
|
||||
enValue: 'Preview and edit the selected GitHub issue or pull request.',
|
||||
localeValue: '预览并编辑选定的 GitHub 问题或拉取请求。',
|
||||
locale: 'zh'
|
||||
})
|
||||
).toBe('预览并编辑选定的 GitHub 议题或拉取请求。')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.LinearIssueWorkspace.0190b760c1',
|
||||
enValue: 'Open on Linear',
|
||||
localeValue: 'Linear打开',
|
||||
locale: 'zh'
|
||||
})
|
||||
).toBe('在 Linear 中打开')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.TaskPage.d0e3c8f933',
|
||||
enValue: 'No matching GitHub work',
|
||||
localeValue: '没有匹配的 GitHub 作品',
|
||||
locale: 'zh'
|
||||
})
|
||||
).toBe('没有匹配的 GitHub 工作项')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.hooks.useSettingsNavigationMetadata.4a728cd56b',
|
||||
enValue: 'New features that are still taking shape. Give them a try.',
|
||||
localeValue: '仍在形成的新特征。尝试一下。',
|
||||
locale: 'zh'
|
||||
})
|
||||
).toBe('仍在形成的新功能。尝试一下。')
|
||||
})
|
||||
|
||||
it('fixes Japanese integration, merge, and search keyword regressions', () => {
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.settings.integrations.search.f16e41cc72',
|
||||
enValue: 'GitHub Integration',
|
||||
localeValue: 'GitHubの統合',
|
||||
locale: 'ja'
|
||||
})
|
||||
).toBe('GitHub 連携')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.GitLabItemDialog.e089f62594',
|
||||
enValue: 'Merged MR !{{value0}}',
|
||||
localeValue: 'MR を統合しました !{{value0}}',
|
||||
locale: 'ja'
|
||||
})
|
||||
).toBe('MR をマージしました !{{value0}}')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.right.sidebar.source.control.primary.action.3d5dccef0b',
|
||||
enValue: 'Nothing to commit. PR is already merged.',
|
||||
localeValue: 'コミットするものは何もありません。 PR はすでに統合されています。',
|
||||
locale: 'ja'
|
||||
})
|
||||
).toBe('コミットするものはありません。PR はすでにマージされています。')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.settings.integrations.search.581844769a',
|
||||
enValue: 'mr',
|
||||
localeValue: '氏',
|
||||
locale: 'ja'
|
||||
})
|
||||
).toBe('MR')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.settings.integrations.search.e1263dd748',
|
||||
enValue: 'jira',
|
||||
localeValue: 'ジラ',
|
||||
locale: 'ja'
|
||||
})
|
||||
).toBe('Jira')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.settings.terminal.advanced.search.b7c2cee442',
|
||||
enValue: 'experimental',
|
||||
localeValue: '実験的機能な',
|
||||
locale: 'ja'
|
||||
})
|
||||
).toBe('実験的機能')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.TaskPage.ef21405c6d',
|
||||
enValue: 'Jira issue',
|
||||
localeValue: 'Jira の問題',
|
||||
locale: 'ja'
|
||||
})
|
||||
).toBe('Jira イシュー')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.mobile.MobileHero.668016be7a',
|
||||
enValue: 'on your computer and phone.',
|
||||
localeValue: 'コンピューターと携帯電話で。',
|
||||
locale: 'ja'
|
||||
})
|
||||
).toBe('コンピューターとスマートフォンで。')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.GitHubItemDialog.3ab6ac0fc8',
|
||||
enValue: 'Preview and edit the selected GitHub issue or pull request.',
|
||||
localeValue: '選択した GitHub の課題またはプル リクエストをプレビューおよび編集します。',
|
||||
locale: 'ja'
|
||||
})
|
||||
).toBe('選択した GitHub イシューまたは PR をプレビュー・編集します。')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.GitHubItemDialog.a2495e4784',
|
||||
enValue: 'Pull request',
|
||||
localeValue: 'プルリクエスト',
|
||||
locale: 'ja'
|
||||
})
|
||||
).toBe('PR')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.TaskPage.be8cf68d9f',
|
||||
enValue: 'view issues',
|
||||
localeValue: '問題を表示する',
|
||||
locale: 'ja'
|
||||
})
|
||||
).toBe('イシューを表示')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.editor.EditorContent.e4b074749d',
|
||||
enValue: 'Front Matter',
|
||||
localeValue: '前の問題',
|
||||
locale: 'ja'
|
||||
})
|
||||
).toBe('フロントマター')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.settings.IntegrationsPane.c0c8575e05',
|
||||
enValue: 'Install the GitHub CLI to enable pull requests, issues, and checks.',
|
||||
localeValue:
|
||||
'GitHub CLI をインストールして、プル リクエスト、発行、チェックを有効にします。',
|
||||
locale: 'ja'
|
||||
})
|
||||
).toBe('GitHub CLI をインストールして PR、イシュー、チェックを有効にします。')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.mobile.MobilePage.e17393c6a3',
|
||||
enValue: 'Phone preview',
|
||||
localeValue: '電話プレビュー',
|
||||
locale: 'ja'
|
||||
})
|
||||
).toBe('スマートフォンプレビュー')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.GitHubItemDialog.8c45901789',
|
||||
enValue: 'Request reviewer {{value0}}',
|
||||
localeValue: 'レビュアー {{value0}} をリクエスト',
|
||||
locale: 'ja'
|
||||
})
|
||||
).toBe('レビュアーをリクエスト {{value0}}')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.settings.appearance.search.5e5b8878bf',
|
||||
enValue: 'phone',
|
||||
localeValue: '電話',
|
||||
locale: 'ja'
|
||||
})
|
||||
).toBe('スマートフォン')
|
||||
})
|
||||
|
||||
it('fixes Chinese round 4 phone, review, PR, and status chip regressions', () => {
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.settings.appearance.search.5e5b8878bf',
|
||||
enValue: 'phone',
|
||||
localeValue: '电话',
|
||||
locale: 'zh'
|
||||
})
|
||||
).toBe('手机')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.mobile.slides.TerminalSlide.985373052e',
|
||||
enValue: 'Switch to phone mode',
|
||||
localeValue: '切换到电话模式',
|
||||
locale: 'zh'
|
||||
})
|
||||
).toBe('切换到手机模式')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.settings.GitPane.b559bf9899',
|
||||
enValue: 'e.g. feature',
|
||||
localeValue: '例如特征',
|
||||
locale: 'zh'
|
||||
})
|
||||
).toBe('例如 feature')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.settings.terminal.search.d5e6c7fab1',
|
||||
enValue: 'font features',
|
||||
localeValue: '字体特征',
|
||||
locale: 'zh'
|
||||
})
|
||||
).toBe('字体特性')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.GitHubItemDialog.934add88b6',
|
||||
enValue: 'Reviewer',
|
||||
localeValue: '审稿人',
|
||||
locale: 'zh'
|
||||
})
|
||||
).toBe('评审人')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.GitHubItemDialog.a341343303',
|
||||
enValue: 'Review comment added.',
|
||||
localeValue: '添加了评论评论。',
|
||||
locale: 'zh'
|
||||
})
|
||||
).toBe('已添加评审评论。')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.GitHubItemDialog.6e43a16435',
|
||||
enValue: 'Inline',
|
||||
localeValue: '排队',
|
||||
locale: 'zh'
|
||||
})
|
||||
).toBe('内联')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.github.pr.merge.state.bf5e4c6c92',
|
||||
enValue: 'Blocked',
|
||||
localeValue: '被阻止',
|
||||
locale: 'zh'
|
||||
})
|
||||
).toBe('已阻塞')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.sidebar.workspace.status.6c1efa2cf8',
|
||||
enValue: 'In review',
|
||||
localeValue: '审核中',
|
||||
locale: 'zh'
|
||||
})
|
||||
).toBe('评审中')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.sidebar.workspace.status.2c19d1db33',
|
||||
enValue: 'Play',
|
||||
localeValue: '玩',
|
||||
locale: 'zh'
|
||||
})
|
||||
).toBe('Play')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.right.sidebar.SourceControlAgentActionDialogForm.1bc0bdbb5e',
|
||||
enValue: 'Launch:',
|
||||
localeValue: '发射:',
|
||||
locale: 'zh'
|
||||
})
|
||||
).toBe('启动:')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.UpdateCard.actionBadge',
|
||||
enValue: 'Action',
|
||||
localeValue: '行动',
|
||||
locale: 'zh'
|
||||
})
|
||||
).toBe('操作')
|
||||
})
|
||||
|
||||
it('applies search keyword overrides for settings search synonyms', () => {
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.settings.appearance.search.262fe1d24f',
|
||||
enValue: 'dark',
|
||||
localeValue: '어두운',
|
||||
locale: 'ko'
|
||||
})
|
||||
).toBe('다크')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.settings.appearance.search.24094af355',
|
||||
enValue: 'font',
|
||||
localeValue: '세례반',
|
||||
locale: 'ko'
|
||||
})
|
||||
).toBe('폰트')
|
||||
})
|
||||
})
|
||||
|
|
@ -0,0 +1,88 @@
|
|||
import { describe, expect, it } from 'vitest'
|
||||
|
||||
import { repairTranslatedValue } from './locale-translation-policy.mjs'
|
||||
|
||||
describe('locale-translation-policy zh round 5', () => {
|
||||
it('fixes brand spacing, hosted review, and Orca Mobile regressions', () => {
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.stats.ShareUsageCard.0eb31e79ee',
|
||||
enValue: 'Orca IDE',
|
||||
localeValue: 'Orca集成开发环境',
|
||||
locale: 'zh'
|
||||
})
|
||||
).toBe('Orca IDE')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.settings.ShortcutsPane.2a0e8aeccf',
|
||||
enValue: 'Orca first',
|
||||
localeValue: 'Orca第一',
|
||||
locale: 'zh'
|
||||
})
|
||||
).toBe('Orca 优先')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.settings.CommitMessageAiPane.2dafc7646e',
|
||||
enValue: 'Hosted-review creation defaults',
|
||||
localeValue: '托管审阅创建默认值',
|
||||
locale: 'zh'
|
||||
})
|
||||
).toBe('托管评审创建默认值')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.settings.AccountsPane.3180536c7a',
|
||||
enValue: 'Codex Accounts',
|
||||
localeValue: 'Codex账户',
|
||||
locale: 'zh'
|
||||
})
|
||||
).toBe('Codex 账户')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'menu.showMobileButton',
|
||||
enValue: 'Show Orca Mobile Button',
|
||||
localeValue: '显示 Orca 移动按钮',
|
||||
locale: 'zh'
|
||||
})
|
||||
).toBe('显示 Orca Mobile 按钮')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.settings.GitPane.e02ea23a32',
|
||||
enValue: 'Orca Attribution',
|
||||
localeValue: 'Orca归属',
|
||||
locale: 'zh'
|
||||
})
|
||||
).toBe('Orca 归因')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.hooks.useSettingsNavigationMetadata.ab4b21b58e',
|
||||
enValue: 'Branch naming, base refs, attribution, and Git AI Author.',
|
||||
localeValue: '分支命名、基本引用、归属和 Git AI 作者。',
|
||||
locale: 'zh'
|
||||
})
|
||||
).toBe('分支命名、基础引用、归因和 Git AI Author。')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.workspace.cleanup.WorkspaceCleanupDialog.1b18868569',
|
||||
enValue: 'need review',
|
||||
localeValue: '待审阅',
|
||||
locale: 'zh'
|
||||
})
|
||||
).toBe('待评审')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.GitHubItemDialog.ec5c4b3ab2',
|
||||
enValue: 'Reopen PR',
|
||||
localeValue: '重新开放PR',
|
||||
locale: 'zh'
|
||||
})
|
||||
).toBe('重新打开 PR')
|
||||
expect(
|
||||
repairTranslatedValue({
|
||||
key: 'auto.components.settings.integrations.search.a5e5da02f7',
|
||||
enValue: 'integration',
|
||||
localeValue: '一体化',
|
||||
locale: 'zh'
|
||||
})
|
||||
).toBe('集成')
|
||||
})
|
||||
})
|
||||
|
|
@ -0,0 +1,513 @@
|
|||
import { JA_VALUE_OVERRIDES } from './locale-ja-value-overrides.mjs'
|
||||
import { KO_VALUE_OVERRIDES } from './locale-ko-value-overrides.mjs'
|
||||
import { ZH_VALUE_OVERRIDES } from './locale-zh-value-overrides.mjs'
|
||||
|
||||
export const LOCALE_VALUE_OVERRIDES = {
|
||||
ko: {
|
||||
Save: '저장',
|
||||
Close: '닫기',
|
||||
Connect: '연결',
|
||||
Edit: '편집',
|
||||
Add: '추가',
|
||||
Create: '생성',
|
||||
Delete: '삭제',
|
||||
Install: '설치',
|
||||
Remove: '제거',
|
||||
Refresh: '새로고침',
|
||||
Reset: '재설정',
|
||||
Enable: '활성화',
|
||||
Disabled: '비활성',
|
||||
Ready: '준비됨',
|
||||
Select: '선택',
|
||||
Clear: '지우기',
|
||||
Back: '뒤로',
|
||||
Reopen: '다시 열기',
|
||||
Closed: '닫힘',
|
||||
Agents: '에이전트',
|
||||
agents: '에이전트',
|
||||
orchestration: '오케스트레이션',
|
||||
conflict: '충돌',
|
||||
Disconnect: '연결 해제',
|
||||
Cancel: '취소',
|
||||
Copy: '복사',
|
||||
Done: '완료',
|
||||
Next: '다음',
|
||||
Beta: '베타',
|
||||
Dismiss: '닫기',
|
||||
Optional: '선택 사항',
|
||||
Ports: '포트',
|
||||
Active: '활성',
|
||||
'Dismiss agent': '에이전트 닫기',
|
||||
'Codex Usage': 'Codex 사용량',
|
||||
'Claude Usage': 'Claude 사용량',
|
||||
'Gemini Usage': 'Gemini 사용량',
|
||||
'Force Delete Branch': '브랜치 강제 삭제',
|
||||
'Time agents worked': '에이전트 작업 시간',
|
||||
PR: 'PR',
|
||||
Installed: '설치됨',
|
||||
'Not installed': '설치되지 않음',
|
||||
Checking: '확인 중',
|
||||
'Checking...': '확인 중...',
|
||||
Connected: '연결됨',
|
||||
Search: '검색',
|
||||
'Search...': '검색...',
|
||||
'Saving...': '저장 중...',
|
||||
'Report Crash...': '크래시 신고...',
|
||||
Mobile: '모바일',
|
||||
Checks: '검사',
|
||||
Assignees: '담당자',
|
||||
Assignee: '담당자',
|
||||
assignee: '담당자',
|
||||
'+ Assignee': '+ 담당자',
|
||||
Assign: '할당',
|
||||
Passed: '통과',
|
||||
Collapse: '접기',
|
||||
Comment: '댓글',
|
||||
View: '보기',
|
||||
General: '일반',
|
||||
Appearance: '외관',
|
||||
Voice: '음성',
|
||||
'Floating Workspace': '플로팅 워크스페이스',
|
||||
Discard: '버리기',
|
||||
Retry: '다시 시도',
|
||||
'Search settings': '설정 검색',
|
||||
'Find shortcuts': '바로가기 검색',
|
||||
'Opt out': '거부',
|
||||
'Got it': '확인',
|
||||
'Force Delete': '강제 삭제',
|
||||
Current: '현재',
|
||||
Showing: '표시 중',
|
||||
'Quick Commands': '빠른 명령어',
|
||||
string: '문자열',
|
||||
Refreshing: '새로고침 중',
|
||||
'Refreshing…': '새로고침 중…',
|
||||
Issue: '이슈',
|
||||
'Privacy & Telemetry': '개인정보 및 텔레메트리',
|
||||
Experimental: '실험적',
|
||||
Advanced: '고급',
|
||||
'Computer Use': '컴퓨터 사용',
|
||||
Shortcuts: '단축키',
|
||||
'Onboarding checklist': '온보딩 체크리스트',
|
||||
Integrations: '연동',
|
||||
split: '분할',
|
||||
space: '스페이스',
|
||||
mobile: '모바일',
|
||||
skills: '스킬',
|
||||
detected: '감지됨',
|
||||
'Toggle Left Sidebar': '왼쪽 사이드바 표시/숨기기',
|
||||
'Toggle Right Sidebar': '오른쪽 사이드바 표시/숨기기',
|
||||
'Open Worktree Palette': '워크트리 팔레트 열기',
|
||||
'Back to app': '앱으로 돌아가기',
|
||||
'Terminal 1': '터미널 1',
|
||||
'Enable floating workspace': '플로팅 워크스페이스 활성화',
|
||||
'Resume workspace': '워크스페이스 재개',
|
||||
'Resume workspace attached to PR': 'PR에 연결된 워크스페이스 재개',
|
||||
'Open workspace': '워크스페이스 열기',
|
||||
'Search Linear issues...': 'Linear 이슈 검색...',
|
||||
'Search Linear projects...': 'Linear 프로젝트 검색...',
|
||||
'Launch agent': '에이전트 실행',
|
||||
'Git AI Author': 'Git AI Author',
|
||||
'Copy ticket': '티켓 복사',
|
||||
'Try Again': '다시 시도',
|
||||
'Restart now': '지금 재시작',
|
||||
'Restart Orca': 'Orca 재시작',
|
||||
'Hide sleeping': '슬립 중인 항목 숨기기',
|
||||
'Open Linear tasks': 'Linear 작업 열기',
|
||||
New: '새로 만들기',
|
||||
Waiting: '대기 중',
|
||||
Missing: '누락',
|
||||
'Listening for shortcut': '단축키 입력 대기 중',
|
||||
'Connect to Orca': 'Orca에 연결',
|
||||
'USB Devices': 'USB 장치',
|
||||
'Available to install': '설치 가능',
|
||||
Workspace: '워크스페이스',
|
||||
Status: '상태',
|
||||
'Orchestration skill': '오케스트레이션 스킬',
|
||||
'Set Up': '설정 시작',
|
||||
Auto: '자동',
|
||||
'Working...': '작업 중...',
|
||||
Command: '명령',
|
||||
Dark: '다크',
|
||||
Interface: '인터페이스',
|
||||
Kill: '강제 종료',
|
||||
'Killing…': '종료 중…',
|
||||
'Kill all': '모두 강제 종료',
|
||||
'kill all': '모두 종료',
|
||||
'Collapse Orca': 'Orca 접기',
|
||||
'Search skills': '스킬 검색',
|
||||
'Search blocks': '블록 검색',
|
||||
teams: '팀',
|
||||
passing: '통과',
|
||||
'opened this issue': '이 이슈를 열었습니다',
|
||||
'Join Discord': 'Discord 참여',
|
||||
Send: '보내기',
|
||||
'Sending…': '전송 중…',
|
||||
'Sending...': '전송 중...',
|
||||
sending: '전송 중',
|
||||
'Pull request': 'PR',
|
||||
child: '하위',
|
||||
children: '하위',
|
||||
eligible: '전송 가능',
|
||||
dispatch: '디스패치',
|
||||
coordinator: '코디네이터',
|
||||
worker: '워커',
|
||||
DAG: 'DAG',
|
||||
examples: '예시',
|
||||
Timer: '타이머',
|
||||
...KO_VALUE_OVERRIDES
|
||||
},
|
||||
zh: {
|
||||
Save: '保存',
|
||||
Close: '关闭',
|
||||
Connect: '连接',
|
||||
Edit: '编辑',
|
||||
Add: '添加',
|
||||
Create: '创建',
|
||||
Delete: '删除',
|
||||
Install: '安装',
|
||||
Remove: '移除',
|
||||
Refresh: '刷新',
|
||||
Reset: '重置',
|
||||
Enable: '启用',
|
||||
Disabled: '已禁用',
|
||||
Ready: '就绪',
|
||||
Select: '选择',
|
||||
Clear: '清除',
|
||||
Back: '返回',
|
||||
Reopen: '重新打开',
|
||||
Closed: '已关闭',
|
||||
Agents: '代理',
|
||||
agents: '代理',
|
||||
orchestration: '编排',
|
||||
conflict: '冲突',
|
||||
Disconnect: '断开连接',
|
||||
Cancel: '取消',
|
||||
Copy: '复制',
|
||||
Done: '完成',
|
||||
Next: '下一步',
|
||||
Beta: '测试版',
|
||||
Dismiss: '关闭',
|
||||
Optional: '可选',
|
||||
Ports: '端口',
|
||||
Active: '当前',
|
||||
'Dismiss agent': '关闭代理',
|
||||
'Codex Usage': 'Codex 使用情况',
|
||||
'Claude Usage': 'Claude 使用情况',
|
||||
'Gemini Usage': 'Gemini 使用情况',
|
||||
'Force Delete Branch': '强制删除分支',
|
||||
'Time agents worked': '代理工作时间',
|
||||
PR: 'PR',
|
||||
linear: 'Linear',
|
||||
jira: 'Jira',
|
||||
Custom: '自定义',
|
||||
'Terminal 1': '终端 1',
|
||||
Starter: '入门版',
|
||||
Turns: '轮次',
|
||||
'Recent sessions': '最近的会话',
|
||||
Installed: '已安装',
|
||||
'Not installed': '未安装',
|
||||
Checking: '检查中',
|
||||
'Checking...': '检查中...',
|
||||
Connected: '已连接',
|
||||
Search: '搜索',
|
||||
'Search...': '搜索...',
|
||||
'Saving...': '保存中...',
|
||||
'Report Crash...': '报告崩溃...',
|
||||
Mobile: '移动端',
|
||||
Checks: '检查项',
|
||||
Assignees: '负责人',
|
||||
Assignee: '负责人',
|
||||
assignee: '负责人',
|
||||
'+ Assignee': '+ 负责人',
|
||||
Assign: '分配',
|
||||
Passed: '通过',
|
||||
Collapse: '折叠',
|
||||
Comment: '评论',
|
||||
View: '查看',
|
||||
General: '通用',
|
||||
Appearance: '外观',
|
||||
Voice: '语音',
|
||||
'Floating Workspace': '浮动工作区',
|
||||
Discard: '放弃',
|
||||
Retry: '重试',
|
||||
'Search settings': '搜索设置',
|
||||
'Find shortcuts': '搜索快捷键',
|
||||
'Opt out': '退出',
|
||||
'Got it': '知道了',
|
||||
'Force Delete': '强制删除',
|
||||
Current: '当前',
|
||||
Showing: '显示中',
|
||||
'Quick Commands': '快捷命令',
|
||||
string: '字符串',
|
||||
Refreshing: '刷新中',
|
||||
'Refreshing…': '刷新中…',
|
||||
Issue: '议题',
|
||||
'Privacy & Telemetry': '隐私与遥测',
|
||||
Experimental: '实验性',
|
||||
Advanced: '高级',
|
||||
'Computer Use': '计算机控制',
|
||||
Shortcuts: '快捷键',
|
||||
'Onboarding checklist': '入门清单',
|
||||
Integrations: '集成',
|
||||
split: '拆分',
|
||||
space: '空间',
|
||||
mobile: '移动端',
|
||||
skills: '技能',
|
||||
detected: '已检测',
|
||||
'Toggle Left Sidebar': '显示/隐藏左侧边栏',
|
||||
'Toggle Right Sidebar': '显示/隐藏右侧边栏',
|
||||
'Open Worktree Palette': '打开工作树面板',
|
||||
'Back to app': '返回应用',
|
||||
'Enable floating workspace': '启用浮动工作区',
|
||||
'Resume workspace': '恢复工作区',
|
||||
'Resume workspace attached to PR': '恢复关联 PR 的工作区',
|
||||
'Open workspace': '打开工作区',
|
||||
'Search Linear issues...': '搜索 Linear 议题...',
|
||||
'Search Linear projects...': '搜索 Linear 项目...',
|
||||
'Launch agent': '启动代理',
|
||||
'Git AI Author': 'Git AI Author',
|
||||
'Copy ticket': '复制工单',
|
||||
'Try Again': '重试',
|
||||
'Restart now': '立即重启',
|
||||
'Restart Orca': '重启 Orca',
|
||||
'Hide sleeping': '隐藏休眠项',
|
||||
'Open Linear tasks': '打开 Linear 任务',
|
||||
New: '新建',
|
||||
Waiting: '等待中',
|
||||
Missing: '缺失',
|
||||
'Listening for shortcut': '正在录制快捷键',
|
||||
'Connect to Orca': '连接到 Orca',
|
||||
'USB Devices': 'USB 设备',
|
||||
'Available to install': '可安装',
|
||||
Workspace: '工作区',
|
||||
Status: '状态',
|
||||
'Orchestration skill': '编排技能',
|
||||
'Set Up': '初始设置',
|
||||
Auto: '自动',
|
||||
'Working...': '处理中...',
|
||||
Command: '命令',
|
||||
Dark: '深色',
|
||||
Interface: '界面',
|
||||
Kill: '强制结束',
|
||||
'Killing…': '正在结束…',
|
||||
'Kill all': '全部强制结束',
|
||||
'kill all': '全部结束',
|
||||
'Collapse Orca': '折叠 Orca',
|
||||
'Search skills': '搜索技能',
|
||||
'Search blocks': '搜索块',
|
||||
teams: '团队',
|
||||
passing: '通过',
|
||||
'opened this issue': '创建了此议题',
|
||||
Open: '进行中',
|
||||
'Join Discord': '加入 Discord',
|
||||
'Pull request merged': '拉取请求已合并',
|
||||
'Agent Skills': '代理技能',
|
||||
'Agent skills': '代理技能',
|
||||
'Agent skill': '代理技能',
|
||||
'Browser Use skill': '浏览器使用技能',
|
||||
'Install Browser Use Skill': '安装浏览器使用技能',
|
||||
'Scanning skills': '正在扫描技能',
|
||||
'Agent location': '代理位置',
|
||||
Location: '位置',
|
||||
'Account Location': '账户位置',
|
||||
'Run location': '运行位置',
|
||||
'more locations': '更多位置',
|
||||
'No agents detected': '未检测到代理',
|
||||
'No external ports detected': '未检测到外部端口',
|
||||
'No workspace ports detected': '未检测到工作区端口',
|
||||
'No local ports detected': '未检测到本地端口',
|
||||
'No ports detected': '未检测到端口',
|
||||
'No speech detected.': '未检测到语音。',
|
||||
'No enabled AI agent was detected on this workspace host.':
|
||||
'此工作区主机上未检测到已启用的 AI 代理。',
|
||||
'The selected agent was not detected on this workspace host.':
|
||||
'此工作区主机上未检测到所选代理。',
|
||||
'No agents detected on your PATH. Pick one to install later, or continue with a blank terminal.':
|
||||
'PATH 中未检测到代理。可选择一个稍后安装,或使用空白终端继续。',
|
||||
'Jira issue': 'Jira 议题',
|
||||
'New Jira issue': '新建 Jira 议题',
|
||||
'Open in Jira': '在 Jira 中打开',
|
||||
'Hide Jira': '隐藏 Jira',
|
||||
'Connect Jira': '连接 Jira',
|
||||
'Jira Integration': 'Jira 集成',
|
||||
'Failed to resolve PR head.': '无法解析 PR 头引用。',
|
||||
'Failed to resolve PR base.': '无法解析 PR 基础引用。',
|
||||
'Linear issue': 'Linear 议题',
|
||||
'Linear issues': 'Linear 议题',
|
||||
'New Linear issue': '新建 Linear 议题',
|
||||
'Jira issues': 'Jira 议题',
|
||||
'Close Linear issue preview': '关闭 Linear 议题预览',
|
||||
'No Linear issues found': '未找到 Linear 议题',
|
||||
'Unable to load Linear issues': '无法加载 Linear 议题',
|
||||
'Preview and edit the selected Linear issue.': '预览并编辑选定的 Linear 议题。',
|
||||
'Browse and start work on your assigned Linear issues directly from here.':
|
||||
'直接从这里浏览并开始处理分配给您的 Linear 议题。',
|
||||
issue: '议题',
|
||||
issues: '议题',
|
||||
Issues: '议题',
|
||||
'No matching GitHub work': '没有匹配的 GitHub 工作项',
|
||||
'Open on Linear': '在 Linear 中打开',
|
||||
'Open in Linear': '在 Linear 中打开',
|
||||
'Copy Linear URL': '复制 Linear URL',
|
||||
'New Linear project': '新建 Linear 项目',
|
||||
'Add Linear access': '添加 Linear 访问',
|
||||
'Select one team to open in Linear': '选择一个团队在 Linear 中打开',
|
||||
"Couldn't load issues from": '无法加载议题,来源',
|
||||
'Reading issue #': '阅读议题 #',
|
||||
'Connect Linear in Settings to search issues.': '在设置中连接 Linear 以搜索议题。',
|
||||
'Show Titlebar App Name': '显示标题栏应用名称',
|
||||
'Hide App Name': '隐藏应用名称',
|
||||
'Refresh Linear': '刷新 Linear',
|
||||
'Failed to update Linear state': '无法更新 Linear 状态',
|
||||
'Add Linear access to browse and link issues.': '添加 Linear 访问以浏览和链接议题。',
|
||||
'No issues match this Linear context.': '没有议题与此 Linear 上下文匹配。',
|
||||
'Fix checks prompt is empty. Update Source Control AI settings.':
|
||||
'检查提示为空。请更新源代码管理 AI 设置。',
|
||||
Question: '疑问',
|
||||
...ZH_VALUE_OVERRIDES
|
||||
},
|
||||
ja: {
|
||||
Save: '保存',
|
||||
Close: '閉じる',
|
||||
Connect: '接続',
|
||||
Edit: '編集',
|
||||
Add: '追加',
|
||||
Create: '作成',
|
||||
Delete: '削除',
|
||||
Install: 'インストール',
|
||||
Remove: '削除',
|
||||
Refresh: '更新',
|
||||
Reset: 'リセット',
|
||||
Enable: '有効化',
|
||||
Disabled: '無効',
|
||||
Ready: '準備完了',
|
||||
Select: '選択',
|
||||
Clear: 'クリア',
|
||||
Back: '戻る',
|
||||
Reopen: '再度開く',
|
||||
Closed: 'クローズ',
|
||||
Agents: 'エージェント',
|
||||
agents: 'エージェント',
|
||||
orchestration: 'オーケストレーション',
|
||||
conflict: 'コンフリクト',
|
||||
Disconnect: '切断',
|
||||
Cancel: 'キャンセル',
|
||||
Copy: 'コピー',
|
||||
Done: '完了',
|
||||
Next: '次へ',
|
||||
Beta: 'ベータ',
|
||||
Dismiss: '閉じる',
|
||||
Optional: '任意',
|
||||
Ports: 'ポート',
|
||||
Active: 'アクティブ',
|
||||
'Dismiss agent': 'エージェントを閉じる',
|
||||
'Codex Usage': 'Codex 使用量',
|
||||
'Claude Usage': 'Claude 使用量',
|
||||
'Gemini Usage': 'Gemini 使用量',
|
||||
'Force Delete Branch': 'ブランチを強制削除',
|
||||
'Time agents worked': 'エージェント作業時間',
|
||||
PR: 'PR',
|
||||
Custom: 'カスタム',
|
||||
'Terminal 1': 'ターミナル 1',
|
||||
Starter: 'スターター',
|
||||
Turns: 'ターン',
|
||||
'Recent sessions': '最近のセッション',
|
||||
Installed: 'インストール済み',
|
||||
'Not installed': '未インストール',
|
||||
Checking: '確認中',
|
||||
'Checking...': '確認中...',
|
||||
Connected: '接続済み',
|
||||
Search: '検索',
|
||||
'Search...': '検索...',
|
||||
'Saving...': '保存中...',
|
||||
'Report Crash...': 'クラッシュを報告...',
|
||||
Mobile: 'モバイル',
|
||||
Checks: 'チェック',
|
||||
Assignees: '担当者',
|
||||
Assignee: '担当者',
|
||||
assignee: '担当者',
|
||||
'+ Assignee': '+ 担当者',
|
||||
Assign: '割り当て',
|
||||
Passed: '通過',
|
||||
Collapse: '折りたたむ',
|
||||
Comment: 'コメント',
|
||||
View: '表示',
|
||||
General: '一般',
|
||||
Appearance: '外観',
|
||||
Voice: '音声',
|
||||
'Floating Workspace': 'フローティングワークスペース',
|
||||
Discard: '破棄',
|
||||
Retry: '再試行',
|
||||
'Search settings': '設定を検索',
|
||||
'Find shortcuts': 'ショートカットを検索',
|
||||
'Opt out': 'オプトアウト',
|
||||
'Got it': '了解',
|
||||
'Force Delete': '強制削除',
|
||||
Current: '現在',
|
||||
Showing: '表示中',
|
||||
'Quick Commands': 'クイックコマンド',
|
||||
string: '文字列',
|
||||
Refreshing: '更新中',
|
||||
'Refreshing…': '更新中…',
|
||||
Issue: 'イシュー',
|
||||
'Privacy & Telemetry': 'プライバシーとテレメトリ',
|
||||
Experimental: '実験的機能',
|
||||
Advanced: '詳細設定',
|
||||
'Computer Use': 'コンピュータ操作',
|
||||
Shortcuts: 'ショートカット',
|
||||
'Onboarding checklist': 'オンボーディングチェックリスト',
|
||||
Integrations: '連携',
|
||||
split: '分割',
|
||||
space: 'スペース',
|
||||
mobile: 'モバイル',
|
||||
skills: 'スキル',
|
||||
detected: '検出済み',
|
||||
'Toggle Left Sidebar': '左サイドバーの表示/非表示',
|
||||
'Toggle Right Sidebar': '右サイドバーの表示/非表示',
|
||||
'Open Worktree Palette': 'ワークツリーパレットを開く',
|
||||
'Back to app': 'アプリに戻る',
|
||||
'Enable floating workspace': 'フローティングワークスペースを有効化',
|
||||
'Resume workspace': 'ワークスペースを再開',
|
||||
'Resume workspace attached to PR': 'PR に紐づくワークスペースを再開',
|
||||
'Open workspace': 'ワークスペースを開く',
|
||||
'Search Linear issues...': 'Linear イシューを検索...',
|
||||
'Search Linear projects...': 'Linear プロジェクトを検索...',
|
||||
'Launch agent': 'エージェントを起動',
|
||||
'Git AI Author': 'Git AI Author',
|
||||
'Copy ticket': 'チケットをコピー',
|
||||
'Try Again': '再試行',
|
||||
'Restart now': '今すぐ再起動',
|
||||
'Restart Orca': 'Orca を再起動',
|
||||
'Hide sleeping': 'スリープ中を非表示',
|
||||
'Open Linear tasks': 'Linear タスクを開く',
|
||||
New: '新規',
|
||||
Waiting: '待機中',
|
||||
Missing: '不足',
|
||||
'Listening for shortcut': 'ショートカットを記録中',
|
||||
'Connect to Orca': 'Orca に接続',
|
||||
'USB Devices': 'USB デバイス',
|
||||
'Available to install': 'インストール可能',
|
||||
Workspace: 'ワークスペース',
|
||||
Status: '状態',
|
||||
'Orchestration skill': 'オーケストレーションスキル',
|
||||
'Set Up': 'セットアップ',
|
||||
Auto: '自動',
|
||||
'Working...': '処理中...',
|
||||
Command: 'コマンド',
|
||||
Dark: 'ダーク',
|
||||
Interface: 'インターフェース',
|
||||
Kill: '強制終了',
|
||||
'Killing…': '終了中…',
|
||||
'Kill all': 'すべて強制終了',
|
||||
'kill all': 'すべて終了',
|
||||
'Collapse Orca': 'Orca を折りたたむ',
|
||||
'Search skills': 'スキルを検索',
|
||||
'Search blocks': 'ブロックを検索',
|
||||
teams: 'チーム',
|
||||
passing: '合格',
|
||||
'opened this issue': 'このイシューを作成しました',
|
||||
Open: 'オープン',
|
||||
'Join Discord': 'Discord に参加',
|
||||
...JA_VALUE_OVERRIDES
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,57 @@
|
|||
// Chinese phrase fixes from high-visibility UI audit round 5.
|
||||
export const ZH_PHRASE_FIXES_ROUND5 = [
|
||||
{ pattern: /Orca集成开发环境/g, replacement: 'Orca IDE', whenEnIncludes: 'Orca IDE' },
|
||||
{ pattern: /Orca第一/g, replacement: 'Orca 优先', whenEnIncludes: 'Orca first' },
|
||||
{ pattern: /Orca移动/g, replacement: 'Orca Mobile', whenEnIncludes: 'Orca Mobile' },
|
||||
{ pattern: /Orca归属/g, replacement: 'Orca 归因', whenEnIncludes: 'Orca Attribution' },
|
||||
{ pattern: /Orca标志/g, replacement: 'Orca 标志', whenEnIncludes: 'Orca logo' },
|
||||
{ pattern: /喜欢Orca/g, replacement: '喜欢 Orca', whenEnIncludes: 'Enjoying Orca' },
|
||||
{ pattern: /认识Orca/g, replacement: '了解 Orca', whenEnIncludes: 'Get to know Orca' },
|
||||
{ pattern: /支持Orca/g, replacement: '支持 Orca', whenEnIncludes: 'Support Orca' },
|
||||
{ pattern: /展开Orca/g, replacement: '展开 Orca', whenEnIncludes: 'Expand Orca' },
|
||||
{ pattern: /来自Orca/g, replacement: '来自 Orca', whenEnIncludes: 'from Orca' },
|
||||
{
|
||||
pattern: /正在重新启动Orca/g,
|
||||
replacement: '正在重启 Orca',
|
||||
whenEnIncludes: 'Restarting Orca'
|
||||
},
|
||||
{ pattern: /Orca([\u4e00-\u9fff])/g, replacement: 'Orca $1', whenEnIncludes: 'Orca' },
|
||||
{ pattern: /Linear([\u4e00-\u9fff])/g, replacement: 'Linear $1', whenEnIncludes: 'Linear' },
|
||||
{ pattern: /Codex([\u4e00-\u9fff])/g, replacement: 'Codex $1', whenEnIncludes: 'Codex' },
|
||||
{ pattern: /Claude([\u4e00-\u9fff])/g, replacement: 'Claude $1', whenEnIncludes: 'Claude' },
|
||||
{ pattern: /Claude代码/g, replacement: 'Claude Code', whenEnIncludes: 'Claude Code' },
|
||||
{ pattern: /GitHub 和Linear/g, replacement: 'GitHub 和 Linear', whenEnIncludes: 'Linear tasks' },
|
||||
{ pattern: /托管审阅/g, replacement: '托管评审', whenEnIncludes: 'hosted-review' },
|
||||
{ pattern: /托管审阅/g, replacement: '托管评审', whenEnIncludes: 'Hosted-review' },
|
||||
{ pattern: /审阅笔记/g, replacement: '评审笔记', whenEnIncludes: 'review note' },
|
||||
{ pattern: /审阅任务/g, replacement: '评审任务', whenEnIncludes: 'review task' },
|
||||
{ pattern: /待审阅/g, replacement: '待评审', whenEnIncludes: 'need review' },
|
||||
{ pattern: /重新审核/g, replacement: '重新评审', whenEnIncludes: 'Re-review' },
|
||||
{ pattern: /依赖项审核/g, replacement: '依赖项审计', whenEnIncludes: 'dependency audit' },
|
||||
{ pattern: /Git AI 作者/g, replacement: 'Git AI Author', whenEnIncludes: 'Git AI Author' },
|
||||
{ pattern: /基本引用/g, replacement: '基础引用', whenEnIncludes: 'base ref' },
|
||||
{ pattern: /重新开放PR/g, replacement: '重新打开 PR', whenEnIncludes: 'Reopen PR' },
|
||||
{ pattern: /重新开放/g, replacement: '重新打开', whenEnIncludes: 'reopen' },
|
||||
{ pattern: /受限制的钥匙/g, replacement: '受限制的密钥', whenEnIncludes: 'restricted keys' },
|
||||
{ pattern: /更换钥匙/g, replacement: '更换密钥', whenEnIncludes: 'Replace key' },
|
||||
{
|
||||
pattern: /根据所看到的内容采取行动/g,
|
||||
replacement: '根据所看到的内容执行操作',
|
||||
whenEnIncludes: 'act on what they see'
|
||||
},
|
||||
{
|
||||
pattern: /建议下一步行动/g,
|
||||
replacement: '建议下一步操作',
|
||||
whenEnIncludes: 'suggest next actions'
|
||||
},
|
||||
{
|
||||
pattern: /可操作的问题/g,
|
||||
replacement: '需处理的问题',
|
||||
whenEnIncludes: 'actionable issues'
|
||||
},
|
||||
{
|
||||
pattern: /显示 Orca 移动按钮/g,
|
||||
replacement: '显示 Orca Mobile 按钮',
|
||||
whenEnIncludes: 'Show Orca Mobile Button'
|
||||
}
|
||||
]
|
||||
|
|
@ -0,0 +1,191 @@
|
|||
// Chinese value overrides from high-visibility UI audit rounds 4–5.
|
||||
// Why: keep locale-value-overrides.mjs under max-lines while preserving exact-match repairs.
|
||||
export const ZH_VALUE_OVERRIDES = {
|
||||
phone: '手机',
|
||||
'Switch to phone mode': '切换到手机模式',
|
||||
'e.g. feature': '例如 feature',
|
||||
'font features': '字体特性',
|
||||
Launch: '启动',
|
||||
'Launch:': '启动:',
|
||||
launcher: '启动器',
|
||||
launch: '启动',
|
||||
Reviewer: '评审人',
|
||||
Reviewers: '评审人',
|
||||
reviewer: '评审人',
|
||||
review: '评审',
|
||||
Review: '评审',
|
||||
'No matching reviewers.': '没有匹配的评审人。',
|
||||
'Request up to 15 reviewers': '最多请求 15 名评审人',
|
||||
'No reviewers requested.': '未请求评审人',
|
||||
'Remove reviewer {{value0}}': '移除评审人 {{value0}}',
|
||||
'Loading reviewers': '正在加载评审人',
|
||||
'Request reviewer {{value0}}': '请求评审人 {{value0}}',
|
||||
'Unrequest reviewer {{value0}}': '取消请求评审人 {{value0}}',
|
||||
'Failed to remove reviewer': '移除评审人失败',
|
||||
'Reviewers removed': '已移除评审人',
|
||||
'Reviewer removed': '已移除评审人',
|
||||
'Failed to request reviewer': '请求评审人失败',
|
||||
'Reviewers requested': '已请求评审',
|
||||
'Reviewer requested': '已请求评审',
|
||||
'You can request up to 15 reviewers': '最多可请求 15 名评审人',
|
||||
'Enter a reviewer': '输入评审人',
|
||||
'Add reviewer': '添加评审人',
|
||||
'No reviewers.': '没有评审人',
|
||||
'Open the PR details to view current reviewers.': '打开 PR 详情以查看当前评审人。',
|
||||
'Review comment added.': '已添加评审评论。',
|
||||
'Needs review': '待评审',
|
||||
'need review': '待评审',
|
||||
'In review': '评审中',
|
||||
'Review requested': '已请求评审',
|
||||
'Review conflicts': '评审冲突',
|
||||
'Markdown Review Notes': 'Markdown 评审笔记',
|
||||
'Reviewed by': '评审人',
|
||||
'Review from': '评审来自',
|
||||
'Reviewer id is unavailable for this GitLab user.': '此 GitLab 用户无法获取评审人 ID。',
|
||||
'Create a {{value0}} to start checks and review.': '创建 {{value0}} 以开始检查和评审。',
|
||||
'Conflicted files are reviewed separately': '冲突文件单独评审',
|
||||
'This review snapshot no longer has any live unresolved conflicts.':
|
||||
'此评审快照不再有任何未解决的实时冲突。',
|
||||
'Skill command copied and inserted below for review.': '技能命令已复制并插入到下方以供评审。',
|
||||
'Release readiness review': '发布就绪评审',
|
||||
'Recurring review': '定期评审',
|
||||
Completed: '已完成',
|
||||
Inline: '内联',
|
||||
thread: '帖子串',
|
||||
destructive: 'destructive',
|
||||
sheet: 'sheet',
|
||||
page: 'page',
|
||||
Annotation: '批注',
|
||||
'check #': '检查 #',
|
||||
by: '由',
|
||||
'files viewed': '已查看文件',
|
||||
'comment L': 'comment L',
|
||||
'Note · line': '注释 · 行',
|
||||
'Copy Path to Line': '复制路径到行',
|
||||
'Copy Rel. Path to Line': '复制相对路径到行',
|
||||
Action: '操作',
|
||||
Actions: '操作',
|
||||
action: '操作',
|
||||
actions: '操作',
|
||||
'More actions': '更多操作',
|
||||
'More PR actions': '更多 PR 操作',
|
||||
'More PR workspace actions': '更多 PR 工作区操作',
|
||||
'Group actions for {{value0}}': '{{value0}} 的分组操作',
|
||||
'No blocking PR action': '没有阻塞 PR 操作',
|
||||
'Quick actions': '快捷操作',
|
||||
'action recipes': '操作方案',
|
||||
'Repository action recipes. Global settings are used until this repository customizes them.':
|
||||
'仓库操作方案。在此仓库自定义之前,将使用全局设置。',
|
||||
'Adds action recipes for Source Control commit, pull request, branch-name, and fix actions.':
|
||||
'为源代码管理的提交、拉取请求、分支命名和修复操作添加操作方案。',
|
||||
Play: 'Play',
|
||||
Flag: 'Flag',
|
||||
Zinc: 'Zinc',
|
||||
Rose: 'Rose',
|
||||
Emerald: 'Emerald',
|
||||
Amber: 'Amber',
|
||||
Violet: 'Violet',
|
||||
Sky: 'Sky',
|
||||
Blue: 'Blue',
|
||||
Neutral: 'Neutral',
|
||||
Dashed: '虚线',
|
||||
Dot: '圆点',
|
||||
Circle: '圆形',
|
||||
Progress: '进度',
|
||||
Alert: '警报',
|
||||
Paused: '已暂停',
|
||||
'In progress': '进行中',
|
||||
Done: '完成',
|
||||
'Conductor Progress': 'Conductor 进度',
|
||||
'Conductor Review': 'Conductor 评审',
|
||||
'Conductor Done': 'Conductor 完成',
|
||||
'GitHub reports this pull request is blocked': 'GitHub 报告此拉取请求已被阻塞',
|
||||
'GitHub requires review approval before this pull request can merge':
|
||||
'GitHub 需要评审批准才能合并此拉取请求',
|
||||
'Used by repositories that inherit global hosted-review defaults.':
|
||||
'由继承全局托管评审默认值的仓库使用。',
|
||||
'Use review template when available': '可用时使用评审模板',
|
||||
'Create hosted reviews as drafts unless changed in the composer.':
|
||||
'除非在编辑器中更改,否则将托管评审创建为草稿。',
|
||||
'Start an agent from failed hosted-review checks.': '从失败的托管评审检查中启动代理。',
|
||||
'Checks require a Git branch and hosted review context': '检查需要 Git 分支和托管评审上下文',
|
||||
'Resolve Review Conflicts With AI': '使用 AI 解决评审冲突',
|
||||
'Hosted review operation in progress…': '托管评审操作进行中…',
|
||||
'Hosted review creation defaults': '托管评审创建默认值',
|
||||
'Open hosted review after creation': '创建后打开托管评审',
|
||||
'Hosted review creation defaults used when the hosted review editor opens.':
|
||||
'打开托管评审编辑器时使用的托管评审创建默认值。',
|
||||
'Run hosted review detail generation once when the editor opens.':
|
||||
'编辑器打开时运行一次托管评审详情生成。',
|
||||
'Show local Markdown review notes controls in rich editor mode.':
|
||||
'在富文本编辑器模式下显示本地 Markdown 评审笔记控件。',
|
||||
'Orca IDE': 'Orca IDE',
|
||||
'Orca first': 'Orca 优先',
|
||||
'Orca Mobile': 'Orca Mobile',
|
||||
'Orca logo': 'Orca 标志',
|
||||
'Enjoying Orca?': '喜欢 Orca 吗?',
|
||||
'Get to know Orca': '了解 Orca',
|
||||
'Expand Orca': '展开 Orca',
|
||||
'Support Orca': '支持 Orca',
|
||||
'Restarting Orca…': '正在重启 Orca…',
|
||||
'Orca Attribution': 'Orca 归因',
|
||||
'Show Orca Mobile Button': '显示 Orca Mobile 按钮',
|
||||
'Codex Accounts': 'Codex 账户',
|
||||
'Codex Account': 'Codex 账户',
|
||||
'Active Codex Account': '活跃 Codex 账户',
|
||||
'Claude Accounts': 'Claude 账户',
|
||||
'Remove Claude Account?': '删除 Claude 账户?',
|
||||
'Claude account updated.': 'Claude 账户已更新。',
|
||||
'Claude account update failed.': 'Claude 账户更新失败。',
|
||||
'Could not load Claude accounts.': '无法加载 Claude 账户。',
|
||||
'Claude sign-in failed.': 'Claude 登录失败。',
|
||||
'Claude account added.': '已添加 Claude 账户。',
|
||||
'Claude Code session started': 'Claude Code 会话已开始',
|
||||
'Codex session started': 'Codex 会话已开始',
|
||||
'Enable Codex': '启用 Codex',
|
||||
'Most recent local Codex sessions in this scope.': '此范围内最近的本地 Codex 会话。',
|
||||
'Hosted-review creation defaults': '托管评审创建默认值',
|
||||
'Defaults used when the hosted-review composer opens.': '打开托管评审编辑器时使用的默认值。',
|
||||
'Run hosted-review detail generation once when the composer opens.':
|
||||
'编辑器打开时运行一次托管评审详情生成。',
|
||||
'Show local markdown review note controls in rich editor mode.':
|
||||
'在富文本编辑器模式下显示本地 Markdown 评审笔记控件。',
|
||||
'Start an agent for local or hosted-review merge conflicts.':
|
||||
'启动用于解决本地或托管评审合并冲突的代理。',
|
||||
'changed since you last approved. Re-review before it runs':
|
||||
'自您上次批准以来已发生变化。运行前请重新评审',
|
||||
'Run the weekly dependency audit and summarize risky changes.':
|
||||
'每周运行依赖项审计并总结有风险的更改。',
|
||||
"Give agents direct access to Orca's browser so they can test pages, capture screenshots, and act on what they see.":
|
||||
'让代理直接访问 Orca 的浏览器,以便测试页面、捕获屏幕截图并根据所见内容执行操作。',
|
||||
'X finishes, send it the review task.”': 'X 完成后,把评审任务发给它。”',
|
||||
'Branch naming, base refs, attribution, and Git AI Author.':
|
||||
'分支命名、基础引用、归因和 Git AI Author。',
|
||||
'You have unsaved Git AI Author changes. Leaving will discard them.':
|
||||
'您有未保存的 Git AI Author 更改。离开将丢弃它们。',
|
||||
'Discard unsaved Git AI Author changes?': '放弃未保存的 Git AI Author 更改?',
|
||||
'Create a Linear project for the selected team.': '为所选团队创建 Linear 项目。',
|
||||
'Linear task mode': 'Linear 任务模式',
|
||||
'Failed to switch Linear workspace.': '无法切换 Linear 工作区。',
|
||||
'Linear project is missing workspace context.': 'Linear 项目缺少工作区上下文。',
|
||||
'No Linear projects found': '未找到 Linear 项目',
|
||||
'Unable to load Linear projects': '无法加载 Linear 项目',
|
||||
'Change Linear state from {{value0}}': '将 Linear 状态从 {{value0}} 更改为',
|
||||
'GitHub & Linear tasks': 'GitHub 和 Linear 任务',
|
||||
'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.':
|
||||
'每个已连接的 Linear 工作区都有一个由活动运行时存储的密钥。全权限密钥可覆盖密钥所有者可访问的所有团队;受限密钥可随时更换。',
|
||||
'Show Linear in the Tasks source picker and sidebar shortcuts.':
|
||||
'在任务源选择器和侧边栏快捷方式中显示 Linear。',
|
||||
'Optional account switching for Claude while preserving shared chat context.':
|
||||
'Claude 的可选账户切换,同时保留共享聊天上下文。',
|
||||
'Countdown timer showing time until prompt cache expires (Claude agents).':
|
||||
'显示提示词缓存到期倒计时的计时器(Claude 代理)。',
|
||||
'Claude caches your conversation to reduce costs. When idle too long the cache expires and the next message resends full context at higher cost. This shows a countdown so you know when to resume.':
|
||||
'Claude 会缓存对话以降低成本。空闲过久后缓存会过期,下一条消息将以更高成本重新发送完整上下文。此倒计时可帮助您了解何时继续。',
|
||||
'from Orca. It is still on your disk.': '来自 Orca。它仍保留在您的磁盘上。',
|
||||
'Pull request reopened': '拉取请求已重新打开',
|
||||
'Reopen PR': '重新打开 PR',
|
||||
'Reopened MR !{{value0}}': '已重新打开 MR !{{value0}}',
|
||||
reopen: '重新打开',
|
||||
'Replace key': '更换密钥'
|
||||
}
|
||||
|
|
@ -0,0 +1,75 @@
|
|||
import fs from 'node:fs/promises'
|
||||
import path from 'node:path'
|
||||
import process from 'node:process'
|
||||
import { pathToFileURL } from 'node:url'
|
||||
|
||||
import { repairCacheMap, repairCatalog } from './locale-translation-policy.mjs'
|
||||
|
||||
const LOCALES_DIR = path.join('src', 'renderer', 'src', 'i18n', 'locales')
|
||||
|
||||
const LOCALE_CACHE_FILES = {
|
||||
ko: '.ko-catalog-cache.json',
|
||||
zh: '.zh-catalog-cache.json',
|
||||
ja: '.ja-catalog-cache.json'
|
||||
}
|
||||
|
||||
function parseLocaleArg(argv) {
|
||||
const localeFlagIndex = argv.indexOf('--locale')
|
||||
if (localeFlagIndex !== -1 && argv[localeFlagIndex + 1]) {
|
||||
return argv[localeFlagIndex + 1]
|
||||
}
|
||||
return undefined
|
||||
}
|
||||
|
||||
async function loadCache(cachePath) {
|
||||
try {
|
||||
const raw = JSON.parse(await fs.readFile(cachePath, 'utf8'))
|
||||
return new Map(Object.entries(raw))
|
||||
} catch {
|
||||
return new Map()
|
||||
}
|
||||
}
|
||||
|
||||
async function saveCache(cachePath, cache) {
|
||||
const raw = Object.fromEntries([...cache.entries()].sort(([a], [b]) => a.localeCompare(b)))
|
||||
await fs.writeFile(cachePath, `${JSON.stringify(raw, null, 2)}\n`, 'utf8')
|
||||
}
|
||||
|
||||
export async function repairLocale(root, locale) {
|
||||
const enPath = path.join(root, LOCALES_DIR, 'en.json')
|
||||
const localePath = path.join(root, LOCALES_DIR, `${locale}.json`)
|
||||
const cachePath = path.join(root, LOCALES_DIR, LOCALE_CACHE_FILES[locale])
|
||||
|
||||
const enCatalog = JSON.parse(await fs.readFile(enPath, 'utf8'))
|
||||
const localeCatalog = JSON.parse(await fs.readFile(localePath, 'utf8'))
|
||||
const cache = await loadCache(cachePath)
|
||||
|
||||
const catalogRepairs = repairCatalog(enCatalog, localeCatalog, locale)
|
||||
const cacheRepairs = repairCacheMap(cache, locale)
|
||||
|
||||
await fs.writeFile(localePath, `${JSON.stringify(localeCatalog, null, 2)}\n`, 'utf8')
|
||||
await saveCache(cachePath, cache)
|
||||
|
||||
console.log(`Repaired ${locale}.json (${catalogRepairs} leaf updates)`)
|
||||
console.log(`Repaired ${LOCALE_CACHE_FILES[locale]} (${cacheRepairs} cache updates)`)
|
||||
return { catalogRepairs, cacheRepairs }
|
||||
}
|
||||
|
||||
export async function main(root = process.cwd(), locale = parseLocaleArg(process.argv)) {
|
||||
const locales = locale ? [locale] : ['ko', 'zh', 'ja']
|
||||
const unsupported = locales.filter((code) => !LOCALE_CACHE_FILES[code])
|
||||
if (unsupported.length > 0) {
|
||||
console.error(`Unsupported locale(s): ${unsupported.join(', ')}`)
|
||||
return 1
|
||||
}
|
||||
|
||||
for (const code of locales) {
|
||||
await repairLocale(root, code)
|
||||
}
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
if (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href) {
|
||||
process.exit(await main())
|
||||
}
|
||||
|
|
@ -8,6 +8,7 @@ import ts from 'typescript'
|
|||
const SOURCE_EXTENSIONS = new Set(['.ts', '.tsx', '.js', '.jsx', '.mts', '.cts'])
|
||||
const SKIP_PATH_PARTS = new Set(['.git', 'dist', 'node_modules', 'out', '__snapshots__', 'assets'])
|
||||
const LOCALIZATION_FUNCTION_NAMES = new Set(['t', 'translate', 'translateMain'])
|
||||
const PLACEHOLDER_RE = /\{\{[^}]+\}\}/g
|
||||
|
||||
function normalizePath(root, filePath) {
|
||||
return path.relative(root, filePath).split(path.sep).join('/')
|
||||
|
|
@ -121,8 +122,92 @@ function formatMissingReferences(missing) {
|
|||
.join('\n')
|
||||
}
|
||||
|
||||
function formatMissingKeys(label, keys) {
|
||||
return keys.map((key) => `${label}: ${key}`).join('\n')
|
||||
}
|
||||
|
||||
function collectInterpolationVariables(value) {
|
||||
if (typeof value === 'string') {
|
||||
const matches = value.match(PLACEHOLDER_RE) ?? []
|
||||
return [...matches].sort()
|
||||
}
|
||||
if (typeof value !== 'object' || value === null || Array.isArray(value)) {
|
||||
return []
|
||||
}
|
||||
return Object.values(value).flatMap((child) => collectInterpolationVariables(child))
|
||||
}
|
||||
|
||||
function flattenCatalogEntries(value, prefix = '', entries = new Map()) {
|
||||
if (typeof value === 'string') {
|
||||
entries.set(prefix, value)
|
||||
return entries
|
||||
}
|
||||
if (typeof value !== 'object' || value === null || Array.isArray(value)) {
|
||||
return entries
|
||||
}
|
||||
for (const [key, child] of Object.entries(value)) {
|
||||
flattenCatalogEntries(child, prefix ? `${prefix}.${key}` : key, entries)
|
||||
}
|
||||
return entries
|
||||
}
|
||||
|
||||
function verifyLocaleParity(enCatalog, localeName, localeCatalog) {
|
||||
const enEntries = flattenCatalogEntries(enCatalog)
|
||||
const localeEntries = flattenCatalogEntries(localeCatalog)
|
||||
const missingInLocale = [...enEntries.keys()].filter((key) => !localeEntries.has(key))
|
||||
const extraInLocale = [...localeEntries.keys()].filter((key) => !enEntries.has(key))
|
||||
const interpolationMismatches = []
|
||||
|
||||
for (const key of enEntries.keys()) {
|
||||
if (!localeEntries.has(key)) {
|
||||
continue
|
||||
}
|
||||
const enVariables = collectInterpolationVariables(enEntries.get(key))
|
||||
const localeVariables = collectInterpolationVariables(localeEntries.get(key))
|
||||
if (enVariables.join('|') !== localeVariables.join('|')) {
|
||||
interpolationMismatches.push(key)
|
||||
}
|
||||
}
|
||||
|
||||
if (
|
||||
missingInLocale.length > 0 ||
|
||||
extraInLocale.length > 0 ||
|
||||
interpolationMismatches.length > 0
|
||||
) {
|
||||
console.error(`Locale catalog parity failed for ${localeName}.json.`)
|
||||
if (missingInLocale.length > 0) {
|
||||
console.error('')
|
||||
console.error(formatMissingKeys('missing', missingInLocale.slice(0, 20)))
|
||||
if (missingInLocale.length > 20) {
|
||||
console.error(`...and ${missingInLocale.length - 20} more missing keys`)
|
||||
}
|
||||
}
|
||||
if (extraInLocale.length > 0) {
|
||||
console.error('')
|
||||
console.error(formatMissingKeys('extra', extraInLocale.slice(0, 20)))
|
||||
if (extraInLocale.length > 20) {
|
||||
console.error(`...and ${extraInLocale.length - 20} more extra keys`)
|
||||
}
|
||||
}
|
||||
if (interpolationMismatches.length > 0) {
|
||||
console.error('')
|
||||
console.error(
|
||||
formatMissingKeys('interpolation mismatch', interpolationMismatches.slice(0, 20))
|
||||
)
|
||||
if (interpolationMismatches.length > 20) {
|
||||
console.error(`...and ${interpolationMismatches.length - 20} more interpolation mismatches`)
|
||||
}
|
||||
}
|
||||
return 1
|
||||
}
|
||||
|
||||
console.log(`Verified locale parity for ${localeName}.json (${localeEntries.size} keys).`)
|
||||
return 0
|
||||
}
|
||||
|
||||
export async function main(root = process.cwd()) {
|
||||
const catalogPath = path.join(root, 'src', 'renderer', 'src', 'i18n', 'locales', 'en.json')
|
||||
const localesDir = path.join(root, 'src', 'renderer', 'src', 'i18n', 'locales')
|
||||
const catalogPath = path.join(localesDir, 'en.json')
|
||||
const catalog = JSON.parse(await fs.readFile(catalogPath, 'utf8'))
|
||||
const catalogKeys = new Set(flattenCatalogKeys(catalog))
|
||||
const sourceRoots = [path.join(root, 'src', 'renderer', 'src'), path.join(root, 'src', 'main')]
|
||||
|
|
@ -146,6 +231,27 @@ export async function main(root = process.cwd()) {
|
|||
}
|
||||
|
||||
console.log(`Verified ${references.length} localization key references against en.json.`)
|
||||
|
||||
const localeFiles = (await fs.readdir(localesDir))
|
||||
.filter(
|
||||
(fileName) =>
|
||||
fileName.endsWith('.json') &&
|
||||
fileName !== 'en.json' &&
|
||||
!fileName.startsWith('.') &&
|
||||
!fileName.includes('-catalog-cache')
|
||||
)
|
||||
.sort()
|
||||
|
||||
for (const fileName of localeFiles) {
|
||||
const localeName = fileName.replace(/\.json$/, '')
|
||||
const localeCatalogPath = path.join(localesDir, fileName)
|
||||
const localeCatalog = JSON.parse(await fs.readFile(localeCatalogPath, 'utf8'))
|
||||
const exitCode = verifyLocaleParity(catalog, localeName, localeCatalog)
|
||||
if (exitCode !== 0) {
|
||||
return exitCode
|
||||
}
|
||||
}
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -45,6 +45,11 @@
|
|||
"verify:computer-native": "node config/scripts/verify-computer-native.mjs",
|
||||
"verify:cli-bin": "node config/scripts/verify-cli-bin.mjs",
|
||||
"verify:localization-catalog": "node config/scripts/verify-localization-catalog.mjs",
|
||||
"bootstrap:locale-catalog": "node config/scripts/bootstrap-locale-catalog.mjs",
|
||||
"bootstrap:zh-catalog": "node config/scripts/bootstrap-zh-catalog.mjs",
|
||||
"bootstrap:ko-catalog": "node config/scripts/bootstrap-locale-catalog.mjs --locale ko",
|
||||
"bootstrap:ja-catalog": "node config/scripts/bootstrap-locale-catalog.mjs --locale ja",
|
||||
"repair:locale-catalog": "node config/scripts/repair-locale-catalog.mjs",
|
||||
"verify:localization-coverage": "node config/scripts/audit-localization-coverage.mjs --check",
|
||||
"audit:localization": "node config/scripts/audit-localization-coverage.mjs",
|
||||
"build:cli": "tsc -p config/tsconfig.cli.json --outDir out --composite false --incremental false && node config/scripts/verify-cli-bin.mjs --fix-executable && node config/scripts/install-dev-cli.mjs",
|
||||
|
|
|
|||
|
|
@ -2,6 +2,9 @@ import { app } from 'electron'
|
|||
import i18next, { type i18n as I18nInstance, type TOptions } from 'i18next'
|
||||
|
||||
import en from '../../renderer/src/i18n/locales/en.json'
|
||||
import ja from '../../renderer/src/i18n/locales/ja.json'
|
||||
import ko from '../../renderer/src/i18n/locales/ko.json'
|
||||
import zh from '../../renderer/src/i18n/locales/zh.json'
|
||||
import { isPseudoLocalizationLocale, pseudoLocalizeString } from '../../shared/pseudo-localization'
|
||||
import { DEFAULT_UI_LOCALE, resolveUiLocale, type SupportedUiLocale } from '../../shared/ui-locale'
|
||||
import { UI_LANGUAGE_SYSTEM, type UiLanguage } from '../../shared/ui-language'
|
||||
|
|
@ -26,6 +29,15 @@ export async function ensureMainI18n(): Promise<I18nInstance> {
|
|||
resources: {
|
||||
en: {
|
||||
translation: en
|
||||
},
|
||||
zh: {
|
||||
translation: zh
|
||||
},
|
||||
ko: {
|
||||
translation: ko
|
||||
},
|
||||
ja: {
|
||||
translation: ja
|
||||
}
|
||||
},
|
||||
interpolation: {
|
||||
|
|
|
|||
|
|
@ -76,17 +76,37 @@ export function AgentCapabilitiesSetupAction(props: {
|
|||
}
|
||||
const firstWarning = result.warnings[0]
|
||||
if (firstWarning) {
|
||||
toast.warning(translate("auto.components.feature.wall.AgentCapabilitiesSetupAction.1aa657d8f4", "Some capability setup needs attention"), {
|
||||
description: firstWarning.message
|
||||
})
|
||||
toast.warning(
|
||||
translate(
|
||||
'auto.components.feature.wall.AgentCapabilitiesSetupAction.1aa657d8f4',
|
||||
'Some capability setup needs attention'
|
||||
),
|
||||
{
|
||||
description: firstWarning.message
|
||||
}
|
||||
)
|
||||
}
|
||||
if (result.skillCommandsCopied) {
|
||||
toast.success(translate("auto.components.feature.wall.AgentCapabilitiesSetupAction.c605f51f2b", "Capability setup ready"), {
|
||||
description: translate("auto.components.feature.wall.AgentCapabilitiesSetupAction.3a59452a67", "Skill command copied and inserted below for review.")
|
||||
})
|
||||
toast.success(
|
||||
translate(
|
||||
'auto.components.feature.wall.AgentCapabilitiesSetupAction.c605f51f2b',
|
||||
'Capability setup ready'
|
||||
),
|
||||
{
|
||||
description: translate(
|
||||
'auto.components.feature.wall.AgentCapabilitiesSetupAction.3a59452a67',
|
||||
'Skill command copied and inserted below for review.'
|
||||
)
|
||||
}
|
||||
)
|
||||
}
|
||||
if (result.computerUsePermissionsOpened) {
|
||||
toast.message(translate("auto.components.feature.wall.AgentCapabilitiesSetupAction.e9eb197e12", "Opened Computer Use permissions"))
|
||||
toast.message(
|
||||
translate(
|
||||
'auto.components.feature.wall.AgentCapabilitiesSetupAction.e9eb197e12',
|
||||
'Opened Computer Use permissions'
|
||||
)
|
||||
)
|
||||
}
|
||||
if (result.skillInstallCommand) {
|
||||
setFeatureSetupCommandSelection(featureSetup)
|
||||
|
|
@ -122,23 +142,38 @@ type AgentCapabilitySetupRow = {
|
|||
const AGENT_CAPABILITY_SETUP_ROWS: readonly AgentCapabilitySetupRow[] = [
|
||||
{
|
||||
id: 'orchestration',
|
||||
title: translate("auto.components.feature.wall.AgentCapabilitiesSetupAction.ac07f8887f", "Agent Orchestration"),
|
||||
description:
|
||||
translate("auto.components.feature.wall.AgentCapabilitiesSetupAction.c61c91e642", "Let agents coordinate through Orca to keep large, multi-step tasks moving to completion."),
|
||||
title: translate(
|
||||
'auto.components.feature.wall.AgentCapabilitiesSetupAction.ac07f8887f',
|
||||
'Agent Orchestration'
|
||||
),
|
||||
description: translate(
|
||||
'auto.components.feature.wall.AgentCapabilitiesSetupAction.c61c91e642',
|
||||
'Let agents coordinate through Orca to keep large, multi-step tasks moving to completion.'
|
||||
),
|
||||
icon: <Workflow className="size-4" />
|
||||
},
|
||||
{
|
||||
id: 'browserUse',
|
||||
title: translate("auto.components.feature.wall.AgentCapabilitiesSetupAction.e638da007a", "Agent Browser Use"),
|
||||
description:
|
||||
translate("auto.components.feature.wall.AgentCapabilitiesSetupAction.5e8fe5a72d", "Give agents direct access to Orca's browser so they can test pages, capture screenshots, and act on what they see."),
|
||||
title: translate(
|
||||
'auto.components.feature.wall.AgentCapabilitiesSetupAction.e638da007a',
|
||||
'Agent Browser Use'
|
||||
),
|
||||
description: translate(
|
||||
'auto.components.feature.wall.AgentCapabilitiesSetupAction.5e8fe5a72d',
|
||||
"Give agents direct access to Orca's browser so they can test pages, capture screenshots, and act on what they see."
|
||||
),
|
||||
icon: <Globe2 className="size-4" />
|
||||
},
|
||||
{
|
||||
id: 'computerUse',
|
||||
title: translate("auto.components.feature.wall.AgentCapabilitiesSetupAction.362a07517d", "Computer Use"),
|
||||
description:
|
||||
translate("auto.components.feature.wall.AgentCapabilitiesSetupAction.1b51644c2d", "Let agents control the desktop, moving the cursor, clicking, and typing in any app."),
|
||||
title: translate(
|
||||
'auto.components.feature.wall.AgentCapabilitiesSetupAction.362a07517d',
|
||||
'Computer Use'
|
||||
),
|
||||
description: translate(
|
||||
'auto.components.feature.wall.AgentCapabilitiesSetupAction.1b51644c2d',
|
||||
'Let agents control the desktop, moving the cursor, clicking, and typing in any app.'
|
||||
),
|
||||
icon: <MonitorCog className="size-4" />
|
||||
}
|
||||
]
|
||||
|
|
@ -176,7 +211,11 @@ function AgentCapabilitySetupControls(props: {
|
|||
) : (
|
||||
<Terminal className="size-4" />
|
||||
)}
|
||||
{props.setupBusyLabel ?? translate("auto.components.feature.wall.AgentCapabilitiesSetupAction.c89534cbe9", "Install CLI & Skills")}
|
||||
{props.setupBusyLabel ??
|
||||
translate(
|
||||
'auto.components.feature.wall.AgentCapabilitiesSetupAction.c89534cbe9',
|
||||
'Install CLI & Skills'
|
||||
)}
|
||||
</Button>
|
||||
</div>
|
||||
) : null}
|
||||
|
|
@ -260,8 +299,12 @@ function AgentCapabilityStatusNote(props: {
|
|||
return (
|
||||
<span className="mt-2 flex flex-wrap items-center gap-1.5">
|
||||
<span className="rounded-full border border-green-500/45 bg-green-500/10 px-2 py-0.5 text-[11px] font-semibold leading-none text-green-700 dark:text-green-300">
|
||||
{translate("auto.components.feature.wall.AgentCapabilitiesSetupAction.b8dc9dd8a2", "Installed")}</span>
|
||||
{props.status.label !== "Installed" ? (
|
||||
{translate(
|
||||
'auto.components.feature.wall.AgentCapabilitiesSetupAction.b8dc9dd8a2',
|
||||
'Installed'
|
||||
)}
|
||||
</span>
|
||||
{props.status.tone !== 'ready' ? (
|
||||
<span
|
||||
className={cn(
|
||||
'text-xs font-medium',
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
import type { JSX } from 'react'
|
||||
import { cn } from '@/lib/utils'
|
||||
import { AGENT_AWAKE_TITLE, getAgentAwakeDescription } from '../settings/agent-awake-copy'
|
||||
import { getAgentAwakeDescription, getAgentAwakeTitle } from '../settings/agent-awake-copy'
|
||||
import type { GlobalSettings } from '../../../../shared/types'
|
||||
import { translate } from '@/i18n/i18n'
|
||||
|
||||
|
|
@ -10,16 +10,16 @@ export function KeepAwakeCard(props: {
|
|||
}): JSX.Element {
|
||||
const { settings, updateSettings } = props
|
||||
const enabled = settings.keepComputerAwakeWhileAgentsRun
|
||||
const title = getAgentAwakeTitle()
|
||||
return (
|
||||
<div className="rounded-xl border border-border bg-muted/20 p-4">
|
||||
<div className="flex items-center justify-between gap-4">
|
||||
<div className="min-w-0 shrink space-y-1">
|
||||
<div className="flex flex-wrap items-center gap-2">
|
||||
<div className="text-[15px] font-semibold leading-tight text-foreground">
|
||||
{AGENT_AWAKE_TITLE}
|
||||
</div>
|
||||
<div className="text-[15px] font-semibold leading-tight text-foreground">{title}</div>
|
||||
<span className="rounded-full border border-border bg-background px-2 py-0.5 text-[11px] font-medium text-muted-foreground">
|
||||
{translate("auto.components.feature.wall.KeepAwakeCard.209713d3c7", "Optional")}</span>
|
||||
{translate('auto.components.feature.wall.KeepAwakeCard.209713d3c7', 'Optional')}
|
||||
</span>
|
||||
</div>
|
||||
<p className="text-[13px] leading-snug text-muted-foreground">
|
||||
{getAgentAwakeDescription()}
|
||||
|
|
@ -27,7 +27,7 @@ export function KeepAwakeCard(props: {
|
|||
</div>
|
||||
<button
|
||||
role="switch"
|
||||
aria-label={AGENT_AWAKE_TITLE}
|
||||
aria-label={title}
|
||||
aria-checked={enabled}
|
||||
onClick={() => updateSettings({ keepComputerAwakeWhileAgentsRun: !enabled })}
|
||||
className={cn(
|
||||
|
|
|
|||
|
|
@ -128,15 +128,40 @@ function getSkillInstallStatus(skill: {
|
|||
error: string | null
|
||||
}): AgentCapabilityInstallStatus {
|
||||
if (skill.loading) {
|
||||
return { label: translate("auto.components.feature.wall.agent.capability.setup.status.9b33e7fb13", "Checking install"), tone: 'checking' }
|
||||
return {
|
||||
label: translate(
|
||||
'auto.components.feature.wall.agent.capability.setup.status.9b33e7fb13',
|
||||
'Checking install'
|
||||
),
|
||||
tone: 'checking'
|
||||
}
|
||||
}
|
||||
if (skill.error) {
|
||||
return { label: translate("auto.components.feature.wall.agent.capability.setup.status.aa8e143a2f", "Could not check install"), tone: 'error' }
|
||||
return {
|
||||
label: translate(
|
||||
'auto.components.feature.wall.agent.capability.setup.status.aa8e143a2f',
|
||||
'Could not check install'
|
||||
),
|
||||
tone: 'error'
|
||||
}
|
||||
}
|
||||
if (skill.installed) {
|
||||
return { label: translate("auto.components.feature.wall.agent.capability.setup.status.8eccfcb314", "Installed"), tone: 'ready', installed: true }
|
||||
return {
|
||||
label: translate(
|
||||
'auto.components.feature.wall.agent.capability.setup.status.8eccfcb314',
|
||||
'Installed'
|
||||
),
|
||||
tone: 'ready',
|
||||
installed: true
|
||||
}
|
||||
}
|
||||
return {
|
||||
label: translate(
|
||||
'auto.components.feature.wall.agent.capability.setup.status.aae94eeb52',
|
||||
'Click Install CLI & Skills'
|
||||
),
|
||||
tone: 'pending'
|
||||
}
|
||||
return { label: translate("auto.components.feature.wall.agent.capability.setup.status.aae94eeb52", "Click Install CLI & Skills"), tone: 'pending' }
|
||||
}
|
||||
|
||||
function getComputerUseInstallStatus(
|
||||
|
|
@ -156,26 +181,49 @@ function getComputerUseInstallStatus(
|
|||
return skillStatus
|
||||
}
|
||||
if (permissions.checking) {
|
||||
return { label: translate("auto.components.feature.wall.agent.capability.setup.status.5c9293e51a", "checking app access"), tone: 'checking', installed: true }
|
||||
return {
|
||||
label: translate(
|
||||
'auto.components.feature.wall.agent.capability.setup.status.5c9293e51a',
|
||||
'checking app access'
|
||||
),
|
||||
tone: 'checking',
|
||||
installed: true
|
||||
}
|
||||
}
|
||||
if (permissions.unavailableReason) {
|
||||
return {
|
||||
label:
|
||||
permissions.unavailableReason === 'web_client'
|
||||
? 'open Orca Desktop on this Mac'
|
||||
: 'Unavailable in this build',
|
||||
? translate(
|
||||
'auto.components.feature.wall.agent.capability.setup.status.4c8e1f92a7',
|
||||
'open Orca Desktop on this Mac'
|
||||
)
|
||||
: translate(
|
||||
'auto.components.feature.wall.agent.capability.setup.status.6d2b0a84e1',
|
||||
'Unavailable in this build'
|
||||
),
|
||||
tone: 'pending',
|
||||
installed: true
|
||||
}
|
||||
}
|
||||
if (!permissions.ready) {
|
||||
return {
|
||||
label: translate("auto.components.feature.wall.agent.capability.setup.status.21d4f79c93", "click Install CLI & Skills to open macOS access settings"),
|
||||
label: translate(
|
||||
'auto.components.feature.wall.agent.capability.setup.status.21d4f79c93',
|
||||
'click Install CLI & Skills to open macOS access settings'
|
||||
),
|
||||
tone: 'pending',
|
||||
installed: true
|
||||
}
|
||||
}
|
||||
return { label: translate("auto.components.feature.wall.agent.capability.setup.status.8eccfcb314", "Installed"), tone: 'ready', installed: true }
|
||||
return {
|
||||
label: translate(
|
||||
'auto.components.feature.wall.agent.capability.setup.status.8eccfcb314',
|
||||
'Installed'
|
||||
),
|
||||
tone: 'ready',
|
||||
installed: true
|
||||
}
|
||||
}
|
||||
|
||||
function useComputerUsePermissionStatus(enabled: boolean): {
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
import type { GlobalSettings } from '../../../../shared/types'
|
||||
import { Label } from '../ui/label'
|
||||
import {
|
||||
AGENT_AWAKE_TITLE,
|
||||
getAgentAwakeDescription,
|
||||
getAgentAwakeSearchKeywords
|
||||
getAgentAwakeSearchKeywords,
|
||||
getAgentAwakeTitle
|
||||
} from './agent-awake-copy'
|
||||
import { SearchableSetting } from './SearchableSetting'
|
||||
|
||||
|
|
@ -16,18 +16,19 @@ export function AgentAwakeSetting({
|
|||
settings,
|
||||
updateSettings
|
||||
}: AgentAwakeSettingProps): React.JSX.Element {
|
||||
const title = getAgentAwakeTitle()
|
||||
const description = getAgentAwakeDescription()
|
||||
|
||||
return (
|
||||
<section className="space-y-3">
|
||||
<SearchableSetting
|
||||
title={AGENT_AWAKE_TITLE}
|
||||
title={title}
|
||||
description={description}
|
||||
keywords={getAgentAwakeSearchKeywords()}
|
||||
>
|
||||
<div className="flex items-start justify-between gap-4 py-2">
|
||||
<div className="min-w-0 flex-1 space-y-0.5">
|
||||
<Label>{AGENT_AWAKE_TITLE}</Label>
|
||||
<Label>{title}</Label>
|
||||
<p className="text-xs text-muted-foreground">{description}</p>
|
||||
</div>
|
||||
{/* Why: this button is read directly from the React element tree by tests
|
||||
|
|
@ -36,7 +37,7 @@ export function AgentAwakeSetting({
|
|||
<button
|
||||
type="button"
|
||||
role="switch"
|
||||
aria-label={AGENT_AWAKE_TITLE}
|
||||
aria-label={title}
|
||||
aria-checked={settings.keepComputerAwakeWhileAgentsRun}
|
||||
onClick={() =>
|
||||
updateSettings({
|
||||
|
|
|
|||
|
|
@ -7,9 +7,9 @@ import { getDefaultSettings } from '../../../../shared/constants'
|
|||
import type { GlobalSettings, TuiAgent } from '../../../../shared/types'
|
||||
import { AGENT_CATALOG } from '@/lib/agent-catalog'
|
||||
import { useAppStore } from '../../store'
|
||||
import { AGENT_GENERATED_TAB_TITLES_TITLE } from './agent-generated-tab-title-copy'
|
||||
import { AGENT_STATUS_HOOKS_TITLE } from './agent-status-hooks-copy'
|
||||
import { getAgentAwakeDescription } from './agent-awake-copy'
|
||||
import { getAgentGeneratedTabTitlesTitle } from './agent-generated-tab-title-copy'
|
||||
import { getAgentStatusHooksTitle } from './agent-status-hooks-copy'
|
||||
import { getAgentAwakeDescription, getAgentAwakeTitle } from './agent-awake-copy'
|
||||
import { AgentAwakeSetting } from './AgentAwakeSetting'
|
||||
import {
|
||||
AgentAvailabilityControl,
|
||||
|
|
@ -182,8 +182,9 @@ describe('AgentsPane', () => {
|
|||
updateSettings
|
||||
})
|
||||
|
||||
const keepAwakeSwitch = findSwitch(element, 'Keep computer awake while agents are working')
|
||||
expect(keepAwakeSwitch.props['aria-label']).toBe('Keep computer awake while agents are working')
|
||||
const keepAwakeTitle = getAgentAwakeTitle()
|
||||
const keepAwakeSwitch = findSwitch(element, keepAwakeTitle)
|
||||
expect(keepAwakeSwitch.props['aria-label']).toBe(keepAwakeTitle)
|
||||
expect(keepAwakeSwitch.props['aria-checked']).toBe(false)
|
||||
|
||||
const onClick = keepAwakeSwitch.props.onClick as () => void
|
||||
|
|
@ -204,7 +205,7 @@ describe('AgentsPane', () => {
|
|||
updateSettings
|
||||
})
|
||||
|
||||
const statusSwitch = findSwitchRow(element, AGENT_STATUS_HOOKS_TITLE)
|
||||
const statusSwitch = findSwitchRow(element, getAgentStatusHooksTitle())
|
||||
expect(statusSwitch.props.checked).toBe(true)
|
||||
|
||||
const onChange = statusSwitch.props.onChange as () => void
|
||||
|
|
@ -225,7 +226,7 @@ describe('AgentsPane', () => {
|
|||
updateSettings
|
||||
})
|
||||
|
||||
const generatedTitleSwitch = findSwitchRow(element, AGENT_GENERATED_TAB_TITLES_TITLE)
|
||||
const generatedTitleSwitch = findSwitchRow(element, getAgentGeneratedTabTitlesTitle())
|
||||
expect(generatedTitleSwitch.props.checked).toBe(false)
|
||||
|
||||
const onChange = generatedTitleSwitch.props.onChange as () => void
|
||||
|
|
|
|||
|
|
@ -12,11 +12,11 @@ import { Input } from '../ui/input'
|
|||
import { cn } from '@/lib/utils'
|
||||
import { AgentAwakeSetting } from './AgentAwakeSetting'
|
||||
import {
|
||||
AGENT_GENERATED_TAB_TITLES_DESCRIPTION,
|
||||
AGENT_GENERATED_TAB_TITLES_TITLE
|
||||
getAgentGeneratedTabTitlesDescription,
|
||||
getAgentGeneratedTabTitlesTitle
|
||||
} from './agent-generated-tab-title-copy'
|
||||
import { AgentLocationSetting } from './AgentLocationSetting'
|
||||
import { AGENT_STATUS_HOOKS_DESCRIPTION, AGENT_STATUS_HOOKS_TITLE } from './agent-status-hooks-copy'
|
||||
import { getAgentStatusHooksDescription, getAgentStatusHooksTitle } from './agent-status-hooks-copy'
|
||||
import {
|
||||
SettingsBadge,
|
||||
SettingsSegmentedControl,
|
||||
|
|
@ -646,15 +646,15 @@ export function AgentStatusHooksSetting({
|
|||
return (
|
||||
<section className="space-y-3">
|
||||
<SettingsSwitchRow
|
||||
label={AGENT_STATUS_HOOKS_TITLE}
|
||||
description={AGENT_STATUS_HOOKS_DESCRIPTION}
|
||||
label={getAgentStatusHooksTitle()}
|
||||
description={getAgentStatusHooksDescription()}
|
||||
checked={enabled}
|
||||
onChange={() =>
|
||||
updateSettings({
|
||||
agentStatusHooksEnabled: !enabled
|
||||
})
|
||||
}
|
||||
ariaLabel={AGENT_STATUS_HOOKS_TITLE}
|
||||
ariaLabel={getAgentStatusHooksTitle()}
|
||||
/>
|
||||
</section>
|
||||
)
|
||||
|
|
@ -668,15 +668,15 @@ export function AgentGeneratedTabTitlesSetting({
|
|||
return (
|
||||
<section className="space-y-3">
|
||||
<SettingsSwitchRow
|
||||
label={AGENT_GENERATED_TAB_TITLES_TITLE}
|
||||
description={AGENT_GENERATED_TAB_TITLES_DESCRIPTION}
|
||||
label={getAgentGeneratedTabTitlesTitle()}
|
||||
description={getAgentGeneratedTabTitlesDescription()}
|
||||
checked={enabled}
|
||||
onChange={() =>
|
||||
updateSettings({
|
||||
tabAutoGenerateTitle: !enabled
|
||||
})
|
||||
}
|
||||
ariaLabel={AGENT_GENERATED_TAB_TITLES_TITLE}
|
||||
ariaLabel={getAgentGeneratedTabTitlesTitle()}
|
||||
/>
|
||||
</section>
|
||||
)
|
||||
|
|
|
|||
|
|
@ -33,6 +33,57 @@ vi.mock('./TerminalAppearanceSection', () => ({
|
|||
TerminalAppearanceSection: () => null
|
||||
}))
|
||||
|
||||
vi.mock('../ui/select', async () => {
|
||||
const React = await import('react')
|
||||
|
||||
const SelectContext = React.createContext<{
|
||||
onValueChange?: (value: string) => void
|
||||
}>({})
|
||||
|
||||
return {
|
||||
Select: ({
|
||||
value,
|
||||
onValueChange,
|
||||
children
|
||||
}: {
|
||||
value: string
|
||||
onValueChange: (value: string) => void
|
||||
children: React.ReactNode
|
||||
}) => {
|
||||
const contextValue = React.useMemo(() => ({ onValueChange }), [onValueChange])
|
||||
return (
|
||||
<SelectContext.Provider value={contextValue}>
|
||||
<div data-slot="language-select" data-value={value}>
|
||||
{children}
|
||||
</div>
|
||||
</SelectContext.Provider>
|
||||
)
|
||||
},
|
||||
SelectTrigger: ({ children, ...props }: React.ComponentProps<'button'> & { size?: string }) => (
|
||||
<button type="button" data-slot="select-trigger" {...props}>
|
||||
{children}
|
||||
</button>
|
||||
),
|
||||
SelectValue: () => null,
|
||||
SelectContent: ({ children }: { children: React.ReactNode }) => (
|
||||
<div data-slot="select-content">{children}</div>
|
||||
),
|
||||
SelectItem: ({ value, children }: { value: string; children: React.ReactNode }) => {
|
||||
const { onValueChange } = React.useContext(SelectContext)
|
||||
return (
|
||||
<button
|
||||
type="button"
|
||||
data-slot="select-item"
|
||||
data-value={value}
|
||||
onClick={() => onValueChange?.(value)}
|
||||
>
|
||||
{children}
|
||||
</button>
|
||||
)
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
import { AppearancePane } from './AppearancePane'
|
||||
|
||||
const mountedRoots: Root[] = []
|
||||
|
|
@ -92,8 +143,7 @@ describe('AppearancePane', () => {
|
|||
mocks.state.settingsSearchQuery = 'automations'
|
||||
})
|
||||
|
||||
// Re-enable when SHOW_UI_LANGUAGE_SETTING is true (second locale shipped).
|
||||
it.skip('renders the language selector with system and english options', async () => {
|
||||
it('renders the language dropdown with system, english, chinese, korean, and japanese options', async () => {
|
||||
mocks.state.settingsSearchQuery = 'language'
|
||||
const updateSettings = vi.fn()
|
||||
const settings = {
|
||||
|
|
@ -102,25 +152,26 @@ describe('AppearancePane', () => {
|
|||
}
|
||||
|
||||
const container = await renderAppearancePane(settings, updateSettings)
|
||||
const languageControl = container.querySelector<HTMLDivElement>(
|
||||
'[role="radiogroup"][aria-label="Language"]'
|
||||
const languageTrigger = container.querySelector<HTMLButtonElement>(
|
||||
'[data-slot="select-trigger"][aria-label="Language"]'
|
||||
)
|
||||
const chineseOption = container.querySelector<HTMLButtonElement>(
|
||||
'[data-slot="select-item"][data-value="zh"]'
|
||||
)
|
||||
|
||||
expect(languageControl).not.toBeNull()
|
||||
expect(languageTrigger).not.toBeNull()
|
||||
expect(chineseOption).not.toBeNull()
|
||||
expect(container.textContent).toContain('System')
|
||||
expect(container.textContent).toContain('English')
|
||||
|
||||
const englishOption = Array.from(
|
||||
languageControl?.querySelectorAll<HTMLButtonElement>('button') ?? []
|
||||
).find((button) => button.textContent?.includes('English'))
|
||||
|
||||
expect(englishOption).toBeDefined()
|
||||
expect(container.textContent).toContain('中文(简体)')
|
||||
expect(container.textContent).toContain('한국어')
|
||||
expect(container.textContent).toContain('日本語')
|
||||
|
||||
await act(async () => {
|
||||
englishOption?.dispatchEvent(new MouseEvent('click', { bubbles: true }))
|
||||
chineseOption?.dispatchEvent(new MouseEvent('click', { bubbles: true }))
|
||||
})
|
||||
|
||||
expect(updateSettings).toHaveBeenCalledWith({ uiLanguage: 'en' })
|
||||
expect(updateSettings).toHaveBeenCalledWith({ uiLanguage: 'zh' })
|
||||
})
|
||||
|
||||
it('restores the Automations sidebar button from the sidebar settings switch', async () => {
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ import type React from 'react'
|
|||
import type { GlobalSettings } from '../../../../shared/types'
|
||||
|
||||
import { Separator } from '../ui/separator'
|
||||
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '../ui/select'
|
||||
import { UIZoomControl } from './UIZoomControl'
|
||||
import { SearchableSetting } from './SearchableSetting'
|
||||
import { matchesSettingsSearch } from './settings-search'
|
||||
|
|
@ -38,8 +39,13 @@ import { getTerminalAppearanceSearchEntries } from './terminal-search'
|
|||
import { TerminalAppearanceSection } from './TerminalAppearanceSection'
|
||||
import type { UseGhosttyImportReturn } from './useGhosttyImport'
|
||||
import { AppIconSelector } from './AppIconSelector'
|
||||
import { SHOW_UI_LANGUAGE_SETTING, UI_LANGUAGE_CHOICES } from '@/i18n/supported-languages'
|
||||
import {
|
||||
getUiLanguageChoiceLabel,
|
||||
SHOW_UI_LANGUAGE_SETTING,
|
||||
UI_LANGUAGE_CHOICES
|
||||
} from '@/i18n/supported-languages'
|
||||
import { translate } from '@/i18n/i18n'
|
||||
import type { UiLanguage } from '../../../../shared/ui-language'
|
||||
export { getAppearancePaneSearchEntries }
|
||||
|
||||
type AppearancePaneProps = {
|
||||
|
|
@ -165,15 +171,25 @@ export function AppearancePane({
|
|||
'Choose the language used by the Orca interface.'
|
||||
)}
|
||||
control={
|
||||
<SettingsSegmentedControl
|
||||
ariaLabel={translate('settings.appearance.language.title', 'Language')}
|
||||
<Select
|
||||
value={settings.uiLanguage}
|
||||
onChange={(value) => updateSettings({ uiLanguage: value })}
|
||||
options={UI_LANGUAGE_CHOICES.map((choice) => ({
|
||||
value: choice.value,
|
||||
label: translate(choice.labelKey, choice.value === 'en' ? 'English' : 'System')
|
||||
}))}
|
||||
/>
|
||||
onValueChange={(value) => updateSettings({ uiLanguage: value as UiLanguage })}
|
||||
>
|
||||
<SelectTrigger
|
||||
size="sm"
|
||||
className="min-w-[220px]"
|
||||
aria-label={translate('settings.appearance.language.title', 'Language')}
|
||||
>
|
||||
<SelectValue />
|
||||
</SelectTrigger>
|
||||
<SelectContent>
|
||||
{UI_LANGUAGE_CHOICES.map((choice) => (
|
||||
<SelectItem key={choice.value} value={choice.value}>
|
||||
{getUiLanguageChoiceLabel(choice, translate)}
|
||||
</SelectItem>
|
||||
))}
|
||||
</SelectContent>
|
||||
</Select>
|
||||
}
|
||||
/>
|
||||
</SearchableSetting>
|
||||
|
|
|
|||
|
|
@ -40,12 +40,17 @@ const SIMULATOR_STATE_SUFFIX_RE =
|
|||
|
||||
function statusText(availability: EmulatorAvailability | null, enabled: boolean): string {
|
||||
if (!enabled) {
|
||||
return 'Disabled'
|
||||
return translate('auto.components.settings.MobileEmulatorSettingsPane.a4f1c82d90', 'Disabled')
|
||||
}
|
||||
if (!availability) {
|
||||
return 'Checking'
|
||||
return translate(
|
||||
'auto.components.settings.MobileEmulatorSettingsPane.b5e2d93e01',
|
||||
'Checking...'
|
||||
)
|
||||
}
|
||||
return availability.available ? 'Ready' : 'Needs setup'
|
||||
return availability.available
|
||||
? translate('auto.components.settings.MobileEmulatorSettingsPane.c6f3ea4f12', 'Ready')
|
||||
: translate('auto.components.settings.MobileEmulatorSettingsPane.d704fb5023', 'Needs setup')
|
||||
}
|
||||
|
||||
function statusBadgeClassName(availability: EmulatorAvailability | null, enabled: boolean): string {
|
||||
|
|
|
|||
|
|
@ -86,14 +86,32 @@ import {
|
|||
import { translate } from '@/i18n/i18n'
|
||||
|
||||
const SETTINGS_NAV_GROUPS = [
|
||||
{ id: 'capabilities', title: translate("auto.components.settings.Settings.23c6874fdf", "AI Capabilities") },
|
||||
{ id: 'setup', title: translate("auto.components.settings.Settings.9abb9be3bc", "Set Up") },
|
||||
{ id: 'workflows', title: translate("auto.components.settings.Settings.e1578cd4bc", "Workflows") },
|
||||
{ id: 'interface', title: translate("auto.components.settings.Settings.8bd117d669", "Interface") },
|
||||
{ id: 'remote', title: translate("auto.components.settings.Settings.23931df7e8", "Remote Access") },
|
||||
{ id: 'security', title: translate("auto.components.settings.Settings.084d8fac5b", "Privacy & Security") },
|
||||
{ id: 'advanced', title: translate("auto.components.settings.Settings.1c87f8d024", "Advanced") },
|
||||
{ id: 'experimental', title: translate("auto.components.settings.Settings.8b017f2506", "Experimental") }
|
||||
{
|
||||
id: 'capabilities',
|
||||
title: translate('auto.components.settings.Settings.23c6874fdf', 'AI Capabilities')
|
||||
},
|
||||
{ id: 'setup', title: translate('auto.components.settings.Settings.9abb9be3bc', 'Set Up') },
|
||||
{
|
||||
id: 'workflows',
|
||||
title: translate('auto.components.settings.Settings.e1578cd4bc', 'Workflows')
|
||||
},
|
||||
{
|
||||
id: 'interface',
|
||||
title: translate('auto.components.settings.Settings.8bd117d669', 'Interface')
|
||||
},
|
||||
{
|
||||
id: 'remote',
|
||||
title: translate('auto.components.settings.Settings.23931df7e8', 'Remote Access')
|
||||
},
|
||||
{
|
||||
id: 'security',
|
||||
title: translate('auto.components.settings.Settings.084d8fac5b', 'Privacy & Security')
|
||||
},
|
||||
{ id: 'advanced', title: translate('auto.components.settings.Settings.1c87f8d024', 'Advanced') },
|
||||
{
|
||||
id: 'experimental',
|
||||
title: translate('auto.components.settings.Settings.8b017f2506', 'Experimental')
|
||||
}
|
||||
] as const
|
||||
|
||||
const SHORTCUTS_ESCAPE_CONFIRM_TOAST_ID = 'shortcuts-escape-confirm'
|
||||
|
|
@ -309,9 +327,15 @@ function Settings(): React.JSX.Element {
|
|||
return true
|
||||
}
|
||||
const shouldDiscard = await confirm({
|
||||
title: translate("auto.components.settings.Settings.17bdee4ff1", "Discard unsaved Git AI Author changes?"),
|
||||
description: translate("auto.components.settings.Settings.43b68e10f0", "You have unsaved Git AI Author changes. Leaving will discard them."),
|
||||
confirmLabel: translate("auto.components.settings.Settings.65358016ea", "Discard"),
|
||||
title: translate(
|
||||
'auto.components.settings.Settings.17bdee4ff1',
|
||||
'Discard unsaved Git AI Author changes?'
|
||||
),
|
||||
description: translate(
|
||||
'auto.components.settings.Settings.43b68e10f0',
|
||||
'You have unsaved Git AI Author changes. Leaving will discard them.'
|
||||
),
|
||||
confirmLabel: translate('auto.components.settings.Settings.65358016ea', 'Discard'),
|
||||
confirmVariant: 'destructive'
|
||||
})
|
||||
if (shouldDiscard) {
|
||||
|
|
@ -401,11 +425,17 @@ function Settings(): React.JSX.Element {
|
|||
return
|
||||
}
|
||||
shortcutsEscapeConfirmUntilRef.current = now + SHORTCUTS_ESCAPE_CONFIRM_WINDOW_MS
|
||||
toast.info(translate("auto.components.settings.Settings.acc7bbdefd", "Press ESC again to exit settings"), {
|
||||
id: SHORTCUTS_ESCAPE_CONFIRM_TOAST_ID,
|
||||
duration: SHORTCUTS_ESCAPE_CONFIRM_WINDOW_MS,
|
||||
className: 'whitespace-nowrap'
|
||||
})
|
||||
toast.info(
|
||||
translate(
|
||||
'auto.components.settings.Settings.acc7bbdefd',
|
||||
'Press ESC again to exit settings'
|
||||
),
|
||||
{
|
||||
id: SHORTCUTS_ESCAPE_CONFIRM_TOAST_ID,
|
||||
duration: SHORTCUTS_ESCAPE_CONFIRM_WINDOW_MS,
|
||||
className: 'whitespace-nowrap'
|
||||
}
|
||||
)
|
||||
return
|
||||
}
|
||||
void closeSettingsPageWithPromptGuard()
|
||||
|
|
@ -857,7 +887,8 @@ function Settings(): React.JSX.Element {
|
|||
className="settings-view-shell flex min-h-0 flex-1 overflow-hidden bg-background"
|
||||
>
|
||||
<div className="flex flex-1 items-center justify-center text-muted-foreground">
|
||||
{translate("auto.components.settings.Settings.c7ad095d96", "Loading settings...")}</div>
|
||||
{translate('auto.components.settings.Settings.c7ad095d96', 'Loading settings...')}
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
|
@ -919,13 +950,22 @@ function Settings(): React.JSX.Element {
|
|||
>
|
||||
{visibleNavSections.length === 0 ? (
|
||||
<div className="flex min-h-[24rem] items-center justify-center rounded-2xl border border-dashed border-border/60 bg-card/30 text-sm text-muted-foreground">
|
||||
{translate("auto.components.settings.Settings.3c88ec55d6", "No settings found for \"")}{settingsSearchQuery.trim()}{translate("auto.components.settings.Settings.add3b97ee6", "\"")}</div>
|
||||
{translate(
|
||||
'auto.components.settings.Settings.3c88ec55d6',
|
||||
'No settings found for "'
|
||||
)}
|
||||
{settingsSearchQuery.trim()}
|
||||
{translate('auto.components.settings.Settings.add3b97ee6', '"')}
|
||||
</div>
|
||||
) : (
|
||||
<ActiveSettingsSectionProvider value={activeSectionId}>
|
||||
<SettingsSection
|
||||
id="agents"
|
||||
title={translate("auto.components.settings.Settings.8afa676615", "Agents")}
|
||||
description={translate("auto.components.settings.Settings.ec1ba547f7", "Manage AI agents, set a default, and customize commands.")}
|
||||
title={translate('auto.components.settings.Settings.8afa676615', 'Agents')}
|
||||
description={translate(
|
||||
'auto.components.settings.Settings.ec1ba547f7',
|
||||
'Manage AI agents, set a default, and customize commands.'
|
||||
)}
|
||||
searchEntries={getSectionSearchEntries('agents')}
|
||||
>
|
||||
{isSectionMounted('agents') ? (
|
||||
|
|
@ -942,9 +982,18 @@ function Settings(): React.JSX.Element {
|
|||
|
||||
<SettingsSection
|
||||
id="accounts"
|
||||
title={translate("auto.components.settings.Settings.ad6c529693", "AI Provider Accounts")}
|
||||
description={translate("auto.components.settings.Settings.21f09426ea", "Optional. Orca works with your existing provider logins; add accounts only if you want Orca to help switch between them.")}
|
||||
badge="Optional"
|
||||
title={translate(
|
||||
'auto.components.settings.Settings.ad6c529693',
|
||||
'AI Provider Accounts'
|
||||
)}
|
||||
description={translate(
|
||||
'auto.components.settings.Settings.21f09426ea',
|
||||
'Optional. Orca works with your existing provider logins; add accounts only if you want Orca to help switch between them.'
|
||||
)}
|
||||
badge={translate(
|
||||
'auto.hooks.useSettingsNavigationMetadata.7c79d3b7bf',
|
||||
'Optional'
|
||||
)}
|
||||
searchEntries={getSectionSearchEntries('accounts')}
|
||||
>
|
||||
{isSectionMounted('accounts') ? (
|
||||
|
|
@ -961,8 +1010,11 @@ function Settings(): React.JSX.Element {
|
|||
|
||||
<SettingsSection
|
||||
id="orchestration"
|
||||
title={translate("auto.components.settings.Settings.00c3a7950d", "Orchestration")}
|
||||
description={translate("auto.components.settings.Settings.475980f53d", "Coordinate multiple coding agents through Orca.")}
|
||||
title={translate('auto.components.settings.Settings.00c3a7950d', 'Orchestration')}
|
||||
description={translate(
|
||||
'auto.components.settings.Settings.475980f53d',
|
||||
'Coordinate multiple coding agents through Orca.'
|
||||
)}
|
||||
searchEntries={getSectionSearchEntries('orchestration')}
|
||||
>
|
||||
{isSectionMounted('orchestration') ? <OrchestrationPane /> : null}
|
||||
|
|
@ -972,8 +1024,14 @@ function Settings(): React.JSX.Element {
|
|||
<>
|
||||
<SettingsSection
|
||||
id="computer-use"
|
||||
title={translate("auto.components.settings.Settings.c9841721cb", "Computer Use")}
|
||||
description={translate("auto.components.settings.Settings.7118953f14", "Enable agents to control any app on your computer.")}
|
||||
title={translate(
|
||||
'auto.components.settings.Settings.c9841721cb',
|
||||
'Computer Use'
|
||||
)}
|
||||
description={translate(
|
||||
'auto.components.settings.Settings.7118953f14',
|
||||
'Enable agents to control any app on your computer.'
|
||||
)}
|
||||
searchEntries={getSectionSearchEntries('computer-use')}
|
||||
>
|
||||
{isSectionMounted('computer-use') ? <ComputerUsePane /> : null}
|
||||
|
|
@ -981,8 +1039,11 @@ function Settings(): React.JSX.Element {
|
|||
|
||||
<SettingsSection
|
||||
id="voice"
|
||||
title={translate("auto.components.settings.Settings.5063bb47a5", "Voice")}
|
||||
description={translate("auto.components.settings.Settings.eb1176a14e", "Local speech-to-text dictation with on-device models.")}
|
||||
title={translate('auto.components.settings.Settings.5063bb47a5', 'Voice')}
|
||||
description={translate(
|
||||
'auto.components.settings.Settings.eb1176a14e',
|
||||
'Local speech-to-text dictation with on-device models.'
|
||||
)}
|
||||
searchEntries={getSectionSearchEntries('voice')}
|
||||
>
|
||||
{isSectionMounted('voice') ? (
|
||||
|
|
@ -994,8 +1055,14 @@ function Settings(): React.JSX.Element {
|
|||
|
||||
<SettingsSection
|
||||
id="setup-guide"
|
||||
title={translate("auto.components.settings.Settings.6d119427ef", "Onboarding checklist")}
|
||||
description={translate("auto.components.settings.Settings.6855b0f77d", "Finish the core workflows that make Orca useful for parallel agent work.")}
|
||||
title={translate(
|
||||
'auto.components.settings.Settings.6d119427ef',
|
||||
'Onboarding checklist'
|
||||
)}
|
||||
description={translate(
|
||||
'auto.components.settings.Settings.6855b0f77d',
|
||||
'Finish the core workflows that make Orca useful for parallel agent work.'
|
||||
)}
|
||||
searchEntries={getSectionSearchEntries('setup-guide')}
|
||||
bodyClassName="overflow-hidden rounded-none border-0 bg-transparent p-0 shadow-none"
|
||||
>
|
||||
|
|
@ -1004,8 +1071,11 @@ function Settings(): React.JSX.Element {
|
|||
|
||||
<SettingsSection
|
||||
id="general"
|
||||
title={translate("auto.components.settings.Settings.7807c11c4d", "General")}
|
||||
description={translate("auto.components.settings.Settings.f9b77539fd", "Workspace defaults, app setup, and maintenance.")}
|
||||
title={translate('auto.components.settings.Settings.7807c11c4d', 'General')}
|
||||
description={translate(
|
||||
'auto.components.settings.Settings.f9b77539fd',
|
||||
'Workspace defaults, app setup, and maintenance.'
|
||||
)}
|
||||
searchEntries={getSectionSearchEntries('general')}
|
||||
>
|
||||
{isSectionMounted('general') ? (
|
||||
|
|
@ -1021,8 +1091,11 @@ function Settings(): React.JSX.Element {
|
|||
|
||||
<SettingsSection
|
||||
id="integrations"
|
||||
title={translate("auto.components.settings.Settings.c9ca101a3b", "Integrations")}
|
||||
description={translate("auto.components.settings.Settings.b07041697f", "Connect GitHub, GitLab, Linear, and source-hosting services.")}
|
||||
title={translate('auto.components.settings.Settings.c9ca101a3b', 'Integrations')}
|
||||
description={translate(
|
||||
'auto.components.settings.Settings.b07041697f',
|
||||
'Connect GitHub, GitLab, Linear, and source-hosting services.'
|
||||
)}
|
||||
searchEntries={getSectionSearchEntries('integrations')}
|
||||
>
|
||||
{isSectionMounted('integrations') ? <IntegrationsPane /> : null}
|
||||
|
|
@ -1030,8 +1103,14 @@ function Settings(): React.JSX.Element {
|
|||
|
||||
<SettingsSection
|
||||
id="git"
|
||||
title={translate("auto.components.settings.Settings.70100f94c7", "Git & Source Control")}
|
||||
description={translate("auto.components.settings.Settings.cfa34f4465", "Branch naming, base refs, attribution, and Git AI Author.")}
|
||||
title={translate(
|
||||
'auto.components.settings.Settings.70100f94c7',
|
||||
'Git & Source Control'
|
||||
)}
|
||||
description={translate(
|
||||
'auto.components.settings.Settings.cfa34f4465',
|
||||
'Branch naming, base refs, attribution, and Git AI Author.'
|
||||
)}
|
||||
searchEntries={getSectionSearchEntries('git')}
|
||||
forceVisible={hasUnsavedSourceControlAiPromptChanges}
|
||||
>
|
||||
|
|
@ -1061,8 +1140,11 @@ function Settings(): React.JSX.Element {
|
|||
|
||||
<SettingsSection
|
||||
id="tasks"
|
||||
title={translate("auto.components.settings.Settings.11faa2f7dd", "Task Sources")}
|
||||
description={translate("auto.components.settings.Settings.dd72ed437a", "Choose which task providers appear in the Tasks page and sidebar.")}
|
||||
title={translate('auto.components.settings.Settings.11faa2f7dd', 'Task Sources')}
|
||||
description={translate(
|
||||
'auto.components.settings.Settings.dd72ed437a',
|
||||
'Choose which task providers appear in the Tasks page and sidebar.'
|
||||
)}
|
||||
searchEntries={getSectionSearchEntries('tasks')}
|
||||
>
|
||||
{isSectionMounted('tasks') ? (
|
||||
|
|
@ -1072,8 +1154,11 @@ function Settings(): React.JSX.Element {
|
|||
|
||||
<SettingsSection
|
||||
id="terminal"
|
||||
title={translate("auto.components.settings.Settings.3de4bbb841", "Terminal")}
|
||||
description={translate("auto.components.settings.Settings.b79b5b31e9", "Shells, renderer, sessions, and terminal behavior.")}
|
||||
title={translate('auto.components.settings.Settings.3de4bbb841', 'Terminal')}
|
||||
description={translate(
|
||||
'auto.components.settings.Settings.b79b5b31e9',
|
||||
'Shells, renderer, sessions, and terminal behavior.'
|
||||
)}
|
||||
searchEntries={getSectionSearchEntries('terminal')}
|
||||
>
|
||||
{isSectionMounted('terminal') ? (
|
||||
|
|
@ -1094,8 +1179,14 @@ function Settings(): React.JSX.Element {
|
|||
|
||||
<SettingsSection
|
||||
id="quick-commands"
|
||||
title={translate("auto.components.settings.Settings.13d4fe30ad", "Quick Commands")}
|
||||
description={translate("auto.components.settings.Settings.6742c7932c", "Saved terminal commands, scoped globally or per project.")}
|
||||
title={translate(
|
||||
'auto.components.settings.Settings.13d4fe30ad',
|
||||
'Quick Commands'
|
||||
)}
|
||||
description={translate(
|
||||
'auto.components.settings.Settings.6742c7932c',
|
||||
'Saved terminal commands, scoped globally or per project.'
|
||||
)}
|
||||
searchEntries={getSectionSearchEntries('quick-commands')}
|
||||
>
|
||||
{isSectionMounted('quick-commands') ? (
|
||||
|
|
@ -1110,8 +1201,11 @@ function Settings(): React.JSX.Element {
|
|||
{showDesktopOnlySettings ? (
|
||||
<SettingsSection
|
||||
id="browser"
|
||||
title={translate("auto.components.settings.Settings.c46215ea03", "Browser")}
|
||||
description={translate("auto.components.settings.Settings.ad9788036f", "Home page, link routing, and session cookies.")}
|
||||
title={translate('auto.components.settings.Settings.c46215ea03', 'Browser')}
|
||||
description={translate(
|
||||
'auto.components.settings.Settings.ad9788036f',
|
||||
'Home page, link routing, and session cookies.'
|
||||
)}
|
||||
searchEntries={getSectionSearchEntries('browser')}
|
||||
>
|
||||
{isSectionMounted('browser') ? (
|
||||
|
|
@ -1127,8 +1221,14 @@ function Settings(): React.JSX.Element {
|
|||
{showDesktopOnlySettings && isMac ? (
|
||||
<SettingsSection
|
||||
id="mobile-emulator"
|
||||
title={translate("auto.components.settings.Settings.f75daf1002", "Mobile Emulator")}
|
||||
description={translate("auto.components.settings.Settings.01f9d36292", "Configure mobile emulator support for Orca and coding agents.")}
|
||||
title={translate(
|
||||
'auto.components.settings.Settings.f75daf1002',
|
||||
'Mobile Emulator'
|
||||
)}
|
||||
description={translate(
|
||||
'auto.components.settings.Settings.01f9d36292',
|
||||
'Configure mobile emulator support for Orca and coding agents.'
|
||||
)}
|
||||
searchEntries={getSectionSearchEntries('mobile-emulator')}
|
||||
>
|
||||
{isSectionMounted('mobile-emulator') ? (
|
||||
|
|
@ -1142,8 +1242,14 @@ function Settings(): React.JSX.Element {
|
|||
|
||||
<SettingsSection
|
||||
id="floating-workspace"
|
||||
title={translate("auto.components.settings.Settings.3eb22a3ada", "Floating Workspace")}
|
||||
description={translate("auto.components.settings.Settings.3d9adfe6a5", "Global terminal, browser, and markdown tabs.")}
|
||||
title={translate(
|
||||
'auto.components.settings.Settings.3eb22a3ada',
|
||||
'Floating Workspace'
|
||||
)}
|
||||
description={translate(
|
||||
'auto.components.settings.Settings.3d9adfe6a5',
|
||||
'Global terminal, browser, and markdown tabs.'
|
||||
)}
|
||||
searchEntries={getSectionSearchEntries('floating-workspace')}
|
||||
>
|
||||
{isSectionMounted('floating-workspace') ? (
|
||||
|
|
@ -1153,8 +1259,11 @@ function Settings(): React.JSX.Element {
|
|||
|
||||
<SettingsSection
|
||||
id="appearance"
|
||||
title={translate("auto.components.settings.Settings.2b4474780a", "Appearance")}
|
||||
description={translate("auto.components.settings.Settings.6d1a27e193", "Theme, zoom, app and terminal appearance, sidebars, and status bar.")}
|
||||
title={translate('auto.components.settings.Settings.2b4474780a', 'Appearance')}
|
||||
description={translate(
|
||||
'auto.components.settings.Settings.6d1a27e193',
|
||||
'Theme, zoom, app and terminal appearance, sidebars, and status bar.'
|
||||
)}
|
||||
searchEntries={getSectionSearchEntries('appearance')}
|
||||
>
|
||||
{isSectionMounted('appearance') ? (
|
||||
|
|
@ -1174,8 +1283,14 @@ function Settings(): React.JSX.Element {
|
|||
|
||||
<SettingsSection
|
||||
id="input"
|
||||
title={translate("auto.components.settings.Settings.d7a3e635b6", "Input & Editing")}
|
||||
description={translate("auto.components.settings.Settings.d0b7021d64", "Selection and editing behavior.")}
|
||||
title={translate(
|
||||
'auto.components.settings.Settings.d7a3e635b6',
|
||||
'Input & Editing'
|
||||
)}
|
||||
description={translate(
|
||||
'auto.components.settings.Settings.d0b7021d64',
|
||||
'Selection and editing behavior.'
|
||||
)}
|
||||
searchEntries={getSectionSearchEntries('input')}
|
||||
>
|
||||
<InputPane settings={settings} updateSettings={updateSettings} />
|
||||
|
|
@ -1184,8 +1299,14 @@ function Settings(): React.JSX.Element {
|
|||
{showDesktopOnlySettings ? (
|
||||
<SettingsSection
|
||||
id="notifications"
|
||||
title={translate("auto.components.settings.Settings.9907545fa3", "Notifications")}
|
||||
description={translate("auto.components.settings.Settings.7210ac09c4", "Native desktop notifications for agent activity and terminal events.")}
|
||||
title={translate(
|
||||
'auto.components.settings.Settings.9907545fa3',
|
||||
'Notifications'
|
||||
)}
|
||||
description={translate(
|
||||
'auto.components.settings.Settings.7210ac09c4',
|
||||
'Native desktop notifications for agent activity and terminal events.'
|
||||
)}
|
||||
searchEntries={getSectionSearchEntries('notifications')}
|
||||
>
|
||||
{isSectionMounted('notifications') ? (
|
||||
|
|
@ -1196,8 +1317,11 @@ function Settings(): React.JSX.Element {
|
|||
|
||||
<SettingsSection
|
||||
id="shortcuts"
|
||||
title={translate("auto.components.settings.Settings.23bf7a1ad4", "Shortcuts")}
|
||||
description={translate("auto.components.settings.Settings.a737a4bb22", "Keyboard shortcuts for common actions.")}
|
||||
title={translate('auto.components.settings.Settings.23bf7a1ad4', 'Shortcuts')}
|
||||
description={translate(
|
||||
'auto.components.settings.Settings.a737a4bb22',
|
||||
'Keyboard shortcuts for common actions.'
|
||||
)}
|
||||
searchEntries={getSectionSearchEntries('shortcuts')}
|
||||
className={
|
||||
isFocusedShortcutsPane
|
||||
|
|
@ -1213,8 +1337,11 @@ function Settings(): React.JSX.Element {
|
|||
|
||||
<SettingsSection
|
||||
id="stats"
|
||||
title={translate("auto.components.settings.Settings.954a8f5aef", "Stats & Usage")}
|
||||
description={translate("auto.components.settings.Settings.8acf3f22e0", "Orca stats plus Claude, Codex, and OpenCode usage analytics.")}
|
||||
title={translate('auto.components.settings.Settings.954a8f5aef', 'Stats & Usage')}
|
||||
description={translate(
|
||||
'auto.components.settings.Settings.8acf3f22e0',
|
||||
'Orca stats plus Claude, Codex, and OpenCode usage analytics.'
|
||||
)}
|
||||
searchEntries={getSectionSearchEntries('stats')}
|
||||
>
|
||||
{isSectionMounted('stats') ? <StatsPane /> : null}
|
||||
|
|
@ -1222,12 +1349,21 @@ function Settings(): React.JSX.Element {
|
|||
|
||||
<SettingsSection
|
||||
id="servers"
|
||||
title={translate("auto.components.settings.Settings.bd0181eeca", "Remote Orca Servers")}
|
||||
title={translate(
|
||||
'auto.components.settings.Settings.bd0181eeca',
|
||||
'Remote Orca Servers'
|
||||
)}
|
||||
badge="Beta"
|
||||
description={
|
||||
isWebClient
|
||||
? translate("auto.components.settings.Settings.7686cb5c36", "Connect this browser to a saved Orca server.")
|
||||
: translate("auto.components.settings.Settings.b5ee17826b", "Switch between local desktop mode and paired remote Orca runtimes.")
|
||||
? translate(
|
||||
'auto.components.settings.Settings.7686cb5c36',
|
||||
'Connect this browser to a saved Orca server.'
|
||||
)
|
||||
: translate(
|
||||
'auto.components.settings.Settings.b5ee17826b',
|
||||
'Switch between local desktop mode and paired remote Orca runtimes.'
|
||||
)
|
||||
}
|
||||
searchEntries={getSectionSearchEntries('servers')}
|
||||
>
|
||||
|
|
@ -1245,8 +1381,11 @@ function Settings(): React.JSX.Element {
|
|||
<>
|
||||
<SettingsSection
|
||||
id="ssh"
|
||||
title={translate("auto.components.settings.Settings.9b02492d1f", "SSH Hosts")}
|
||||
description={translate("auto.components.settings.Settings.c2ee313198", "Remote SSH hosts for files, terminals, and git.")}
|
||||
title={translate('auto.components.settings.Settings.9b02492d1f', 'SSH Hosts')}
|
||||
description={translate(
|
||||
'auto.components.settings.Settings.c2ee313198',
|
||||
'Remote SSH hosts for files, terminals, and git.'
|
||||
)}
|
||||
searchEntries={getSectionSearchEntries('ssh')}
|
||||
>
|
||||
{isSectionMounted('ssh') ? <SshPane /> : null}
|
||||
|
|
@ -1254,9 +1393,12 @@ function Settings(): React.JSX.Element {
|
|||
|
||||
<SettingsSection
|
||||
id="mobile"
|
||||
title={translate("auto.components.settings.Settings.c40dadaac8", "Mobile")}
|
||||
title={translate('auto.components.settings.Settings.c40dadaac8', 'Mobile')}
|
||||
badge="Beta"
|
||||
description={translate("auto.components.settings.Settings.c6c01ac209", "Control terminals and agents from your phone.")}
|
||||
description={translate(
|
||||
'auto.components.settings.Settings.c6c01ac209',
|
||||
'Control terminals and agents from your phone.'
|
||||
)}
|
||||
searchEntries={getSectionSearchEntries('mobile')}
|
||||
>
|
||||
{isSectionMounted('mobile') ? (
|
||||
|
|
@ -1269,8 +1411,14 @@ function Settings(): React.JSX.Element {
|
|||
{showDesktopOnlySettings && isMac ? (
|
||||
<SettingsSection
|
||||
id="developer-permissions"
|
||||
title={translate("auto.components.settings.Settings.65660d4548", "macOS Permissions")}
|
||||
description={translate("auto.components.settings.Settings.9b83cc62c2", "macOS privacy access for terminal-launched developer tools.")}
|
||||
title={translate(
|
||||
'auto.components.settings.Settings.65660d4548',
|
||||
'macOS Permissions'
|
||||
)}
|
||||
description={translate(
|
||||
'auto.components.settings.Settings.9b83cc62c2',
|
||||
'macOS privacy access for terminal-launched developer tools.'
|
||||
)}
|
||||
searchEntries={getSectionSearchEntries('developer-permissions')}
|
||||
>
|
||||
{isSectionMounted('developer-permissions') ? (
|
||||
|
|
@ -1281,8 +1429,14 @@ function Settings(): React.JSX.Element {
|
|||
|
||||
<SettingsSection
|
||||
id="privacy"
|
||||
title={translate("auto.components.settings.Settings.d7e3f62d70", "Privacy & Telemetry")}
|
||||
description={translate("auto.components.settings.Settings.c1b43dc4e2", "Anonymous usage data and telemetry controls.")}
|
||||
title={translate(
|
||||
'auto.components.settings.Settings.d7e3f62d70',
|
||||
'Privacy & Telemetry'
|
||||
)}
|
||||
description={translate(
|
||||
'auto.components.settings.Settings.c1b43dc4e2',
|
||||
'Anonymous usage data and telemetry controls.'
|
||||
)}
|
||||
searchEntries={getSectionSearchEntries('privacy')}
|
||||
>
|
||||
{isSectionMounted('privacy') ? <PrivacyPane settings={settings} /> : null}
|
||||
|
|
@ -1291,8 +1445,11 @@ function Settings(): React.JSX.Element {
|
|||
{showDesktopOnlySettings ? (
|
||||
<SettingsSection
|
||||
id="advanced"
|
||||
title={translate("auto.components.settings.Settings.1c87f8d024", "Advanced")}
|
||||
description={translate("auto.components.settings.Settings.499c1cd7f9", "Low-level compatibility settings for troubleshooting.")}
|
||||
title={translate('auto.components.settings.Settings.1c87f8d024', 'Advanced')}
|
||||
description={translate(
|
||||
'auto.components.settings.Settings.499c1cd7f9',
|
||||
'Low-level compatibility settings for troubleshooting.'
|
||||
)}
|
||||
searchEntries={getSectionSearchEntries('advanced')}
|
||||
>
|
||||
{isSectionMounted('advanced') ? (
|
||||
|
|
@ -1303,8 +1460,11 @@ function Settings(): React.JSX.Element {
|
|||
|
||||
<SettingsSection
|
||||
id="experimental"
|
||||
title={translate("auto.components.settings.Settings.8b017f2506", "Experimental")}
|
||||
description={translate("auto.components.settings.Settings.075341c763", "New features that are still taking shape. Give them a try.")}
|
||||
title={translate('auto.components.settings.Settings.8b017f2506', 'Experimental')}
|
||||
description={translate(
|
||||
'auto.components.settings.Settings.075341c763',
|
||||
'New features that are still taking shape. Give them a try.'
|
||||
)}
|
||||
searchEntries={getSectionSearchEntries('experimental')}
|
||||
>
|
||||
{isSectionMounted('experimental') ? (
|
||||
|
|
@ -1324,7 +1484,11 @@ function Settings(): React.JSX.Element {
|
|||
<SettingsSection
|
||||
key={repo.id}
|
||||
id={repoSectionId}
|
||||
title={translate("auto.components.settings.Settings.3bf149e873", "Project Settings > {{value0}}", { value0: repo.displayName })}
|
||||
title={translate(
|
||||
'auto.components.settings.Settings.3bf149e873',
|
||||
'Project Settings > {{value0}}',
|
||||
{ value0: repo.displayName }
|
||||
)}
|
||||
description={repo.path}
|
||||
searchEntries={getSectionSearchEntries(repoSectionId)}
|
||||
>
|
||||
|
|
|
|||
|
|
@ -75,7 +75,11 @@ function SettingsSetupGuideNavRow({
|
|||
<button
|
||||
type="button"
|
||||
aria-current={setupActive ? 'page' : undefined}
|
||||
aria-label={translate("auto.components.settings.SettingsSidebar.82db1b7de4", "Onboarding checklist, {{value0}} of {{value1}} done. Show setup guide.", { value0: progress.doneCount, value1: progress.total })}
|
||||
aria-label={translate(
|
||||
'auto.components.settings.SettingsSidebar.82db1b7de4',
|
||||
'Onboarding checklist, {{value0}} of {{value1}} done. Show setup guide.',
|
||||
{ value0: progress.doneCount, value1: progress.total }
|
||||
)}
|
||||
onClick={(event) =>
|
||||
onSelect({
|
||||
metaKey: event.metaKey,
|
||||
|
|
@ -98,7 +102,9 @@ function SettingsSetupGuideNavRow({
|
|||
tooltipLabel={`${progress.doneCount}/${progress.total} complete`}
|
||||
/>
|
||||
<span className="flex min-w-0 flex-1 flex-col">
|
||||
<span className="truncate text-[13px] font-medium leading-4">{translate("auto.components.settings.SettingsSidebar.6503182299", "Onboarding checklist")}</span>
|
||||
<span className="truncate text-[13px] font-medium leading-4">
|
||||
{translate('auto.components.settings.SettingsSidebar.6503182299', 'Onboarding checklist')}
|
||||
</span>
|
||||
</span>
|
||||
</button>
|
||||
)
|
||||
|
|
@ -132,11 +138,14 @@ export function SettingsSidebar({
|
|||
const installStatusLabel = (status: SettingsNavInstallStatus): string => {
|
||||
switch (status) {
|
||||
case 'install':
|
||||
return 'Not installed'
|
||||
return translate(
|
||||
'auto.components.settings.AgentSkillSetupPanel.5289300939',
|
||||
'Not installed'
|
||||
)
|
||||
case 'installed':
|
||||
return 'Installed'
|
||||
return translate('auto.components.settings.AgentSkillSetupPanel.9fcebceb2a', 'Installed')
|
||||
case 'checking':
|
||||
return 'Checking'
|
||||
return translate('auto.components.settings.AgentSkillSetupPanel.68a468752e', 'Checking...')
|
||||
}
|
||||
}
|
||||
const installStatusClassName = (status: SettingsNavInstallStatus): string =>
|
||||
|
|
@ -159,7 +168,8 @@ export function SettingsSidebar({
|
|||
className="w-full justify-start gap-2 text-[13px] text-muted-foreground"
|
||||
>
|
||||
<ArrowLeft className="size-4" />
|
||||
{translate("auto.components.settings.SettingsSidebar.60f8a673a7", "Back to app")}</Button>
|
||||
{translate('auto.components.settings.SettingsSidebar.60f8a673a7', 'Back to app')}
|
||||
</Button>
|
||||
</div>
|
||||
|
||||
<div className="border-b border-worktree-sidebar-border px-3 py-3">
|
||||
|
|
@ -169,7 +179,10 @@ export function SettingsSidebar({
|
|||
ref={searchInputRef}
|
||||
value={searchQuery}
|
||||
onChange={(event) => onSearchChange(event.target.value)}
|
||||
placeholder={translate("auto.components.settings.SettingsSidebar.dbceaa8840", "Search settings")}
|
||||
placeholder={translate(
|
||||
'auto.components.settings.SettingsSidebar.dbceaa8840',
|
||||
'Search settings'
|
||||
)}
|
||||
className="pl-9 pr-14 text-[13px]"
|
||||
/>
|
||||
{searchQuery === '' ? (
|
||||
|
|
@ -239,7 +252,8 @@ export function SettingsSidebar({
|
|||
|
||||
<div className="space-y-2">
|
||||
<p className="px-3 text-[11px] font-medium uppercase tracking-[0.18em] text-muted-foreground">
|
||||
{translate("auto.components.settings.SettingsSidebar.5c9669ff9c", "Projects")}</p>
|
||||
{translate('auto.components.settings.SettingsSidebar.5c9669ff9c', 'Projects')}
|
||||
</p>
|
||||
|
||||
{repoSections.length > 0 ? (
|
||||
<div className="space-y-1">
|
||||
|
|
@ -272,7 +286,8 @@ export function SettingsSidebar({
|
|||
{section.isRemote && (
|
||||
<span className="ml-auto inline-flex shrink-0 items-center gap-1 text-[10px] text-muted-foreground">
|
||||
<Server className="size-3" />
|
||||
{translate("auto.components.settings.SettingsSidebar.e0900f83e7", "SSH")}</span>
|
||||
{translate('auto.components.settings.SettingsSidebar.e0900f83e7', 'SSH')}
|
||||
</span>
|
||||
)}
|
||||
</button>
|
||||
)
|
||||
|
|
@ -280,7 +295,15 @@ export function SettingsSidebar({
|
|||
</div>
|
||||
) : (
|
||||
<p className="px-3 text-xs text-muted-foreground">
|
||||
{hasRepos ? translate("auto.components.settings.SettingsSidebar.3e483e256b", "No matching project settings.") : translate("auto.components.settings.SettingsSidebar.df38d612b7", "No projects added yet.")}
|
||||
{hasRepos
|
||||
? translate(
|
||||
'auto.components.settings.SettingsSidebar.3e483e256b',
|
||||
'No matching project settings.'
|
||||
)
|
||||
: translate(
|
||||
'auto.components.settings.SettingsSidebar.df38d612b7',
|
||||
'No projects added yet.'
|
||||
)}
|
||||
</p>
|
||||
)}
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
import type { SettingsSearchEntry } from './settings-search'
|
||||
import { translate } from '@/i18n/i18n'
|
||||
import { translateSearchKeyword } from './settings-search-keywords'
|
||||
import { createLocalizedCatalog } from '@/i18n/localized-catalog'
|
||||
|
||||
export const getAccountsLocationSearchEntries = createLocalizedCatalog(() => [
|
||||
|
|
@ -10,13 +11,13 @@ export const getAccountsLocationSearchEntries = createLocalizedCatalog(() => [
|
|||
'Choose whether provider accounts are inspected and added on this device or in WSL.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.accounts.search.06662af91e', 'account'),
|
||||
translate('auto.components.settings.accounts.search.593720c17f', 'location'),
|
||||
translate('auto.components.settings.accounts.search.bdbd1e668e', 'windows'),
|
||||
translate('auto.components.settings.accounts.search.0b4d948eb5', 'wsl'),
|
||||
translate('auto.components.settings.accounts.search.488a7e9206', 'linux'),
|
||||
translate('auto.components.settings.accounts.search.9f70aa706c', 'provider'),
|
||||
translate('auto.components.settings.accounts.search.e02c136ad0', 'auth')
|
||||
...translateSearchKeyword('auto.components.settings.accounts.search.06662af91e', 'account'),
|
||||
...translateSearchKeyword('auto.components.settings.accounts.search.593720c17f', 'location'),
|
||||
...translateSearchKeyword('auto.components.settings.accounts.search.bdbd1e668e', 'windows'),
|
||||
...translateSearchKeyword('auto.components.settings.accounts.search.0b4d948eb5', 'wsl'),
|
||||
...translateSearchKeyword('auto.components.settings.accounts.search.488a7e9206', 'linux'),
|
||||
...translateSearchKeyword('auto.components.settings.accounts.search.9f70aa706c', 'provider'),
|
||||
...translateSearchKeyword('auto.components.settings.accounts.search.e02c136ad0', 'auth')
|
||||
]
|
||||
}
|
||||
])
|
||||
|
|
@ -29,13 +30,16 @@ export const getAccountsClaudeSearchEntries = createLocalizedCatalog(() => [
|
|||
'Optional account switching for Claude while preserving shared chat context.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.accounts.search.e14049e1a8', 'claude'),
|
||||
translate('auto.components.settings.accounts.search.06662af91e', 'account'),
|
||||
translate('auto.components.settings.accounts.search.5b3f18ef4a', 'switch'),
|
||||
translate('auto.components.settings.accounts.search.8b06729e0f', 'active'),
|
||||
translate('auto.components.settings.accounts.search.86edc96bc9', 'status bar'),
|
||||
translate('auto.components.settings.accounts.search.c759741d77', 'quota'),
|
||||
translate('auto.components.settings.accounts.search.f2d666a886', 'optional')
|
||||
...translateSearchKeyword('auto.components.settings.accounts.search.e14049e1a8', 'claude'),
|
||||
...translateSearchKeyword('auto.components.settings.accounts.search.06662af91e', 'account'),
|
||||
...translateSearchKeyword('auto.components.settings.accounts.search.5b3f18ef4a', 'switch'),
|
||||
...translateSearchKeyword('auto.components.settings.accounts.search.8b06729e0f', 'active'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.accounts.search.86edc96bc9',
|
||||
'status bar'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.accounts.search.c759741d77', 'quota'),
|
||||
...translateSearchKeyword('auto.components.settings.accounts.search.f2d666a886', 'optional')
|
||||
]
|
||||
}
|
||||
])
|
||||
|
|
@ -48,15 +52,27 @@ export const getAccountsCodexSearchEntries = createLocalizedCatalog(() => [
|
|||
'Optional account switching for Codex and live rate limit fetching.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.accounts.search.70d1b8def5', 'codex'),
|
||||
translate('auto.components.settings.accounts.search.06662af91e', 'account'),
|
||||
translate('auto.components.settings.accounts.search.e949b08ffb', 'rate limit'),
|
||||
translate('auto.components.settings.accounts.search.86edc96bc9', 'status bar'),
|
||||
translate('auto.components.settings.accounts.search.c759741d77', 'quota'),
|
||||
translate('auto.components.settings.accounts.search.f2d666a886', 'optional'),
|
||||
translate('auto.components.settings.accounts.search.77e32a2ad3', 'reauthenticate'),
|
||||
translate('auto.components.settings.accounts.search.02c438bc7b', 'expired'),
|
||||
translate('auto.components.settings.accounts.search.042885c07c', 'out of date')
|
||||
...translateSearchKeyword('auto.components.settings.accounts.search.70d1b8def5', 'codex'),
|
||||
...translateSearchKeyword('auto.components.settings.accounts.search.06662af91e', 'account'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.accounts.search.e949b08ffb',
|
||||
'rate limit'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.accounts.search.86edc96bc9',
|
||||
'status bar'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.accounts.search.c759741d77', 'quota'),
|
||||
...translateSearchKeyword('auto.components.settings.accounts.search.f2d666a886', 'optional'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.accounts.search.77e32a2ad3',
|
||||
'reauthenticate'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.accounts.search.02c438bc7b', 'expired'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.accounts.search.042885c07c',
|
||||
'out of date'
|
||||
)
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -66,13 +82,16 @@ export const getAccountsCodexSearchEntries = createLocalizedCatalog(() => [
|
|||
'Choose which optional saved Codex account powers live quota reads.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.accounts.search.70d1b8def5', 'codex'),
|
||||
translate('auto.components.settings.accounts.search.06662af91e', 'account'),
|
||||
translate('auto.components.settings.accounts.search.5b3f18ef4a', 'switch'),
|
||||
translate('auto.components.settings.accounts.search.8b06729e0f', 'active'),
|
||||
translate('auto.components.settings.accounts.search.86edc96bc9', 'status bar'),
|
||||
translate('auto.components.settings.accounts.search.f2d666a886', 'optional'),
|
||||
translate('auto.components.settings.accounts.search.35b461d817', 'sign in')
|
||||
...translateSearchKeyword('auto.components.settings.accounts.search.70d1b8def5', 'codex'),
|
||||
...translateSearchKeyword('auto.components.settings.accounts.search.06662af91e', 'account'),
|
||||
...translateSearchKeyword('auto.components.settings.accounts.search.5b3f18ef4a', 'switch'),
|
||||
...translateSearchKeyword('auto.components.settings.accounts.search.8b06729e0f', 'active'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.accounts.search.86edc96bc9',
|
||||
'status bar'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.accounts.search.f2d666a886', 'optional'),
|
||||
...translateSearchKeyword('auto.components.settings.accounts.search.35b461d817', 'sign in')
|
||||
]
|
||||
}
|
||||
])
|
||||
|
|
@ -88,13 +107,22 @@ export const getAccountsGeminiSearchEntries = createLocalizedCatalog(() => [
|
|||
'Extracts OAuth credentials from your local Gemini CLI installation to authenticate with Google.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.accounts.search.e8e1ff3887', 'gemini'),
|
||||
translate('auto.components.settings.accounts.search.8630464352', 'cli'),
|
||||
translate('auto.components.settings.accounts.search.933deaf732', 'oauth'),
|
||||
translate('auto.components.settings.accounts.search.7118d2f908', 'credentials'),
|
||||
translate('auto.components.settings.accounts.search.b7c2cee442', 'experimental'),
|
||||
translate('auto.components.settings.accounts.search.e949b08ffb', 'rate limit'),
|
||||
translate('auto.components.settings.accounts.search.86edc96bc9', 'status bar')
|
||||
...translateSearchKeyword('auto.components.settings.accounts.search.e8e1ff3887', 'gemini'),
|
||||
...translateSearchKeyword('auto.components.settings.accounts.search.8630464352', 'cli'),
|
||||
...translateSearchKeyword('auto.components.settings.accounts.search.933deaf732', 'oauth'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.accounts.search.7118d2f908',
|
||||
'credentials'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.accounts.search.b7c2cee442',
|
||||
'experimental'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.accounts.search.e949b08ffb',
|
||||
'rate limit'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.accounts.search.86edc96bc9', 'status bar')
|
||||
]
|
||||
}
|
||||
])
|
||||
|
|
@ -110,11 +138,14 @@ export const getAccountsOpencodeSearchEntries = createLocalizedCatalog(() => [
|
|||
'Paste your opencode.ai session cookie for rate limit fetching.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.accounts.search.8dcbef1856', 'opencode'),
|
||||
translate('auto.components.settings.accounts.search.61f7d1fcbe', 'cookie'),
|
||||
translate('auto.components.settings.accounts.search.9c4e40cf6b', 'session'),
|
||||
translate('auto.components.settings.accounts.search.e949b08ffb', 'rate limit'),
|
||||
translate('auto.components.settings.accounts.search.86edc96bc9', 'status bar')
|
||||
...translateSearchKeyword('auto.components.settings.accounts.search.8dcbef1856', 'opencode'),
|
||||
...translateSearchKeyword('auto.components.settings.accounts.search.61f7d1fcbe', 'cookie'),
|
||||
...translateSearchKeyword('auto.components.settings.accounts.search.9c4e40cf6b', 'session'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.accounts.search.e949b08ffb',
|
||||
'rate limit'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.accounts.search.86edc96bc9', 'status bar')
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -127,12 +158,15 @@ export const getAccountsOpencodeSearchEntries = createLocalizedCatalog(() => [
|
|||
'Optional workspace ID override if the automatic lookup fails.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.accounts.search.8dcbef1856', 'opencode'),
|
||||
translate('auto.components.settings.accounts.search.be8b621bdc', 'workspace'),
|
||||
translate('auto.components.settings.accounts.search.421c6be25e', 'id'),
|
||||
translate('auto.components.settings.accounts.search.7e67d7d1b6', 'wrk'),
|
||||
translate('auto.components.settings.accounts.search.e949b08ffb', 'rate limit'),
|
||||
translate('auto.components.settings.accounts.search.86edc96bc9', 'status bar')
|
||||
...translateSearchKeyword('auto.components.settings.accounts.search.8dcbef1856', 'opencode'),
|
||||
...translateSearchKeyword('auto.components.settings.accounts.search.be8b621bdc', 'workspace'),
|
||||
...translateSearchKeyword('auto.components.settings.accounts.search.421c6be25e', 'id'),
|
||||
...translateSearchKeyword('auto.components.settings.accounts.search.7e67d7d1b6', 'wrk'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.accounts.search.e949b08ffb',
|
||||
'rate limit'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.accounts.search.86edc96bc9', 'status bar')
|
||||
]
|
||||
}
|
||||
])
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
import type { SettingsSearchEntry } from './settings-search'
|
||||
import { createLocalizedCatalog } from '@/i18n/localized-catalog'
|
||||
import { translate } from '@/i18n/i18n'
|
||||
import { translateSearchKeyword } from './settings-search-keywords'
|
||||
|
||||
export const getAdvancedPaneSearchEntries = createLocalizedCatalog((): SettingsSearchEntry[] => [
|
||||
{
|
||||
|
|
@ -13,21 +14,30 @@ export const getAdvancedPaneSearchEntries = createLocalizedCatalog((): SettingsS
|
|||
'Use HTTP/1.1 for Electron networking when HTTP/2 fails behind a proxy.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.advanced.search.e04e9db503', 'advanced'),
|
||||
translate('auto.components.settings.advanced.search.2b4d26d11e', 'networking'),
|
||||
translate('auto.components.settings.advanced.search.4d44352eea', 'network'),
|
||||
translate('auto.components.settings.advanced.search.48a1c8f534', 'http'),
|
||||
translate('auto.components.settings.advanced.search.4b4ae4345a', 'http2'),
|
||||
translate('auto.components.settings.advanced.search.a0f71bd909', 'http/2'),
|
||||
translate('auto.components.settings.advanced.search.f8ff125ebe', 'http1'),
|
||||
translate('auto.components.settings.advanced.search.621233008b', 'http/1.1'),
|
||||
translate('auto.components.settings.advanced.search.65bf6af262', 'compatibility'),
|
||||
translate('auto.components.settings.advanced.search.f98a60af11', 'proxy'),
|
||||
translate('auto.components.settings.advanced.search.4383251647', 'vpn'),
|
||||
translate('auto.components.settings.advanced.search.79e0947e95', 'support'),
|
||||
translate('auto.components.settings.advanced.search.6576fce4d2', 'troubleshooting'),
|
||||
translate('auto.components.settings.advanced.search.e61ed8ab33', 'updates'),
|
||||
translate('auto.components.settings.advanced.search.a7002e1ac4', 'updater')
|
||||
...translateSearchKeyword('auto.components.settings.advanced.search.e04e9db503', 'advanced'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.advanced.search.2b4d26d11e',
|
||||
'networking'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.advanced.search.4d44352eea', 'network'),
|
||||
...translateSearchKeyword('auto.components.settings.advanced.search.48a1c8f534', 'http'),
|
||||
...translateSearchKeyword('auto.components.settings.advanced.search.4b4ae4345a', 'http2'),
|
||||
...translateSearchKeyword('auto.components.settings.advanced.search.a0f71bd909', 'http/2'),
|
||||
...translateSearchKeyword('auto.components.settings.advanced.search.f8ff125ebe', 'http1'),
|
||||
...translateSearchKeyword('auto.components.settings.advanced.search.621233008b', 'http/1.1'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.advanced.search.65bf6af262',
|
||||
'compatibility'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.advanced.search.f98a60af11', 'proxy'),
|
||||
...translateSearchKeyword('auto.components.settings.advanced.search.4383251647', 'vpn'),
|
||||
...translateSearchKeyword('auto.components.settings.advanced.search.79e0947e95', 'support'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.advanced.search.6576fce4d2',
|
||||
'troubleshooting'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.advanced.search.e61ed8ab33', 'updates'),
|
||||
...translateSearchKeyword('auto.components.settings.advanced.search.a7002e1ac4', 'updater')
|
||||
]
|
||||
}
|
||||
])
|
||||
|
|
|
|||
|
|
@ -1,18 +1,50 @@
|
|||
export const AGENT_AWAKE_TITLE = 'Keep computer awake while agents are working'
|
||||
import { translate } from '@/i18n/i18n'
|
||||
import { searchKeywords } from './settings-search-keywords'
|
||||
|
||||
const AGENT_AWAKE_TITLE_KEY = 'auto.components.settings.agent-awake-copy.e5995ce268'
|
||||
const AGENT_AWAKE_DESCRIPTION_WINDOWS_KEY = 'auto.components.settings.agent-awake-copy.95d3031db2'
|
||||
const AGENT_AWAKE_DESCRIPTION_DEFAULT_KEY = 'auto.components.settings.agent-awake-copy.a42f6fbdd8'
|
||||
|
||||
export function getAgentAwakeTitle(): string {
|
||||
return translate(AGENT_AWAKE_TITLE_KEY, 'Keep computer awake while agents are working')
|
||||
}
|
||||
|
||||
export function getAgentAwakeDescription(
|
||||
userAgent = typeof navigator === 'undefined' ? '' : navigator.userAgent
|
||||
): string {
|
||||
if (userAgent.includes('Windows')) {
|
||||
return "Keeps this computer and display awake while agents are working. Lid-close behavior follows this device's power settings."
|
||||
return translate(
|
||||
AGENT_AWAKE_DESCRIPTION_WINDOWS_KEY,
|
||||
"Keeps this computer and display awake while agents are working. Lid-close behavior follows this device's power settings."
|
||||
)
|
||||
}
|
||||
|
||||
return 'Keeps this computer and display awake while agents are working. Orca also asks this device to stay awake when the lid is closed, subject to its power policy.'
|
||||
return translate(
|
||||
AGENT_AWAKE_DESCRIPTION_DEFAULT_KEY,
|
||||
'Keeps this computer and display awake while agents are working. Orca also asks this device to stay awake when the lid is closed, subject to its power policy.'
|
||||
)
|
||||
}
|
||||
|
||||
export function getAgentAwakeSearchKeywords(
|
||||
userAgent = typeof navigator === 'undefined' ? '' : navigator.userAgent
|
||||
): string[] {
|
||||
const keywords = ['awake', 'sleep', 'power', 'agent', 'running', 'working', 'lid', 'display']
|
||||
return userAgent.includes('Linux') ? [...keywords, 'linux'] : keywords
|
||||
const keywords = searchKeywords([
|
||||
{ key: 'auto.components.settings.agents.search.66b6b82eb4', fallback: 'awake' },
|
||||
{ key: 'auto.components.settings.agents.search.dbc8aca6b0', fallback: 'sleep' },
|
||||
{ key: 'auto.components.settings.agents.search.845ad9128a', fallback: 'power' },
|
||||
{ key: 'auto.components.settings.agents.search.96ba2373b6', fallback: 'agent' },
|
||||
{ key: 'auto.components.settings.agents.search.48f84d10f1', fallback: 'running' },
|
||||
{ key: 'auto.components.settings.agents.search.affbf130f6', fallback: 'working' },
|
||||
{ key: 'auto.components.settings.agents.search.0d1c334987', fallback: 'lid' },
|
||||
{ key: 'auto.components.settings.agents.search.ff8de8a2ad', fallback: 'display' }
|
||||
])
|
||||
|
||||
return userAgent.includes('Linux')
|
||||
? [
|
||||
...keywords,
|
||||
...searchKeywords([
|
||||
{ key: 'auto.components.settings.agents.search.f622b8eb2a', fallback: 'linux' }
|
||||
])
|
||||
]
|
||||
: keywords
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,19 +1,35 @@
|
|||
export const AGENT_GENERATED_TAB_TITLES_TITLE = 'Auto-generate tab titles'
|
||||
import { translate } from '@/i18n/i18n'
|
||||
import { searchKeywords } from './settings-search-keywords'
|
||||
|
||||
export const AGENT_GENERATED_TAB_TITLES_DESCRIPTION =
|
||||
'Derive short stable tab names from the first known agent prompt. Manual renames always win.'
|
||||
const AGENT_GENERATED_TAB_TITLES_TITLE_KEY =
|
||||
'auto.components.settings.agent-generated-tab-title-copy.19ad21615a'
|
||||
const AGENT_GENERATED_TAB_TITLES_DESCRIPTION_KEY =
|
||||
'auto.components.settings.agent-generated-tab-title-copy.b036c7a409'
|
||||
|
||||
export const AGENT_GENERATED_TAB_TITLES_SEARCH_KEYWORDS = [
|
||||
'agent',
|
||||
'tab',
|
||||
'title',
|
||||
'generated title',
|
||||
'name',
|
||||
'generated',
|
||||
'auto',
|
||||
'prompt',
|
||||
'rename',
|
||||
'stable',
|
||||
'session',
|
||||
'stable session'
|
||||
]
|
||||
export function getAgentGeneratedTabTitlesTitle(): string {
|
||||
return translate(AGENT_GENERATED_TAB_TITLES_TITLE_KEY, 'Auto-generate tab titles')
|
||||
}
|
||||
|
||||
export function getAgentGeneratedTabTitlesDescription(): string {
|
||||
return translate(
|
||||
AGENT_GENERATED_TAB_TITLES_DESCRIPTION_KEY,
|
||||
'Derive short stable tab names from the first known agent prompt. Manual renames always win.'
|
||||
)
|
||||
}
|
||||
|
||||
export function getAgentGeneratedTabTitlesSearchKeywords(): string[] {
|
||||
return searchKeywords([
|
||||
{ key: 'auto.components.settings.agents.search.96ba2373b6', fallback: 'agent' },
|
||||
{ key: 'auto.components.settings.agents.search.be7ea3553b', fallback: 'tab' },
|
||||
{ key: 'auto.components.settings.agents.search.6956646a1e', fallback: 'title' },
|
||||
{ key: 'auto.components.settings.agents.search.32836788b0', fallback: 'generated title' },
|
||||
{ key: 'auto.components.settings.agents.search.966890236d', fallback: 'name' },
|
||||
{ key: 'auto.components.settings.agents.search.848dcae8d3', fallback: 'generated' },
|
||||
{ key: 'auto.components.settings.agents.search.52115d0d7c', fallback: 'auto' },
|
||||
{ key: 'auto.components.settings.agents.search.c64059f50d', fallback: 'prompt' },
|
||||
{ key: 'auto.components.settings.agents.search.5784ae8c43', fallback: 'rename' },
|
||||
{ key: 'auto.components.settings.agents.search.8a17fd6026', fallback: 'stable' },
|
||||
{ key: 'auto.components.settings.agents.search.a79d266f71', fallback: 'session' },
|
||||
{ key: 'auto.components.settings.agents.search.afbf35be68', fallback: 'stable session' }
|
||||
])
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,18 +1,41 @@
|
|||
export const AGENT_STATUS_HOOKS_TITLE = 'Agent status hooks'
|
||||
import { translate } from '@/i18n/i18n'
|
||||
import { searchKeywords } from './settings-search-keywords'
|
||||
|
||||
export const AGENT_STATUS_HOOKS_DESCRIPTION =
|
||||
'Shows working, waiting, and done states in Orca. Turn off to remove Orca-managed hooks and stop reinstalling them.'
|
||||
const AGENT_STATUS_HOOKS_TITLE_KEY = 'auto.components.settings.agent-status-hooks-copy.7707c15abb'
|
||||
const AGENT_STATUS_HOOKS_DESCRIPTION_KEY =
|
||||
'auto.components.settings.agent-status-hooks-copy.a68a642835'
|
||||
|
||||
export const AGENT_STATUS_HOOKS_SEARCH_KEYWORDS = [
|
||||
'hooks',
|
||||
'status',
|
||||
'working',
|
||||
'waiting',
|
||||
'done',
|
||||
'remove',
|
||||
'restore',
|
||||
'settings',
|
||||
'config',
|
||||
'claude',
|
||||
'codex'
|
||||
]
|
||||
export function getAgentStatusHooksTitle(): string {
|
||||
return translate(AGENT_STATUS_HOOKS_TITLE_KEY, 'Agent status hooks')
|
||||
}
|
||||
|
||||
export function getAgentStatusHooksDescription(): string {
|
||||
return translate(
|
||||
AGENT_STATUS_HOOKS_DESCRIPTION_KEY,
|
||||
'Shows working, waiting, and done states in Orca. Turn off to remove Orca-managed hooks and stop reinstalling them.'
|
||||
)
|
||||
}
|
||||
|
||||
export function getAgentStatusHooksSearchKeywords(): string[] {
|
||||
return searchKeywords([
|
||||
{ key: 'auto.components.settings.agents.search.0d752916f8', fallback: 'hooks' },
|
||||
{ key: 'auto.components.settings.agents.search.6984d4291a', fallback: 'status' },
|
||||
{ key: 'auto.components.settings.agents.search.affbf130f6', fallback: 'working' },
|
||||
{ key: 'auto.components.settings.agents.search.13b20636a6', fallback: 'waiting' },
|
||||
{ key: 'auto.components.settings.agents.search.8599603496', fallback: 'done' },
|
||||
{ key: 'auto.components.settings.agents.search.ea71995548', fallback: 'remove' },
|
||||
{ key: 'auto.components.settings.agents.search.c1317fe641', fallback: 'restore' },
|
||||
{ key: 'auto.components.settings.agents.search.5963143e00', fallback: 'settings' },
|
||||
{ key: 'auto.components.settings.agents.search.042c551bc5', fallback: 'config' },
|
||||
{
|
||||
key: 'auto.components.settings.agents.search.f412abbba5',
|
||||
fallback: 'claude',
|
||||
englishOnly: true
|
||||
},
|
||||
{
|
||||
key: 'auto.components.settings.agents.search.5ded38b843',
|
||||
fallback: 'codex',
|
||||
englishOnly: true
|
||||
}
|
||||
])
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,45 +1,48 @@
|
|||
import { getAgentCatalog } from '@/lib/agent-catalog'
|
||||
import {
|
||||
AGENT_AWAKE_TITLE,
|
||||
getAgentAwakeDescription,
|
||||
getAgentAwakeSearchKeywords
|
||||
getAgentAwakeSearchKeywords,
|
||||
getAgentAwakeTitle
|
||||
} from './agent-awake-copy'
|
||||
import {
|
||||
AGENT_GENERATED_TAB_TITLES_DESCRIPTION,
|
||||
AGENT_GENERATED_TAB_TITLES_SEARCH_KEYWORDS,
|
||||
AGENT_GENERATED_TAB_TITLES_TITLE
|
||||
getAgentGeneratedTabTitlesDescription,
|
||||
getAgentGeneratedTabTitlesSearchKeywords,
|
||||
getAgentGeneratedTabTitlesTitle
|
||||
} from './agent-generated-tab-title-copy'
|
||||
import {
|
||||
AGENT_STATUS_HOOKS_DESCRIPTION,
|
||||
AGENT_STATUS_HOOKS_SEARCH_KEYWORDS,
|
||||
AGENT_STATUS_HOOKS_TITLE
|
||||
getAgentStatusHooksDescription,
|
||||
getAgentStatusHooksSearchKeywords,
|
||||
getAgentStatusHooksTitle
|
||||
} from './agent-status-hooks-copy'
|
||||
import { translate } from '@/i18n/i18n'
|
||||
import { searchKeywords, translateSearchKeyword, uniqueKeywords } from './settings-search-keywords'
|
||||
import { createLocalizedCatalog } from '@/i18n/localized-catalog'
|
||||
|
||||
const AGENT_SETTINGS_KEYWORDS = buildAgentSettingsKeywords()
|
||||
|
||||
function buildAgentSettingsKeywords(): string[] {
|
||||
const keywords = [
|
||||
'agent',
|
||||
'default',
|
||||
'command',
|
||||
'override',
|
||||
'install',
|
||||
'detected',
|
||||
'enable',
|
||||
'disable',
|
||||
'hide',
|
||||
'show',
|
||||
'github'
|
||||
]
|
||||
const keywords = searchKeywords([
|
||||
{ key: 'auto.components.settings.agents.search.96ba2373b6', fallback: 'agent' },
|
||||
{ key: 'auto.components.settings.agents.search.d8f3a8b8a0', fallback: 'default' },
|
||||
{ key: 'auto.components.settings.agents.search.167daeb5e9', fallback: 'command' },
|
||||
{ key: 'auto.components.settings.agents.search.be59907510', fallback: 'override' },
|
||||
{ key: 'auto.components.settings.agents.search.a6d594c17d', fallback: 'install' },
|
||||
{ key: 'auto.components.settings.agents.search.f2932bf22b', fallback: 'detected' },
|
||||
{ key: 'auto.components.settings.agents.search.2afd3b5858', fallback: 'enable' },
|
||||
{ key: 'auto.components.settings.agents.search.60393e1b17', fallback: 'disable' },
|
||||
{ key: 'auto.components.settings.agents.search.2e188c771c', fallback: 'hide' },
|
||||
{ key: 'auto.components.settings.agents.search.87fffe6c20', fallback: 'show' },
|
||||
{
|
||||
key: 'auto.components.settings.agents.search.e2b7c0dcd7',
|
||||
fallback: 'github',
|
||||
englishOnly: true
|
||||
}
|
||||
])
|
||||
|
||||
for (const agent of getAgentCatalog()) {
|
||||
keywords.push(...expandAgentSearchText(agent.id), ...expandAgentSearchText(agent.label))
|
||||
keywords.push(...expandAgentSearchText(agent.cmd))
|
||||
}
|
||||
|
||||
return [...new Set(keywords)]
|
||||
return uniqueKeywords(keywords)
|
||||
}
|
||||
|
||||
function expandAgentSearchText(value: string): string[] {
|
||||
|
|
@ -58,7 +61,7 @@ export const getAgentsPaneSearchEntries = createLocalizedCatalog(() => [
|
|||
'auto.components.settings.agents.search.01926b9d8c',
|
||||
'Configure AI coding agents, default agent, and command overrides.'
|
||||
),
|
||||
keywords: AGENT_SETTINGS_KEYWORDS
|
||||
keywords: buildAgentSettingsKeywords()
|
||||
},
|
||||
{
|
||||
title: translate('auto.components.settings.agents.search.ef804b7337', 'Agent Location'),
|
||||
|
|
@ -67,28 +70,28 @@ export const getAgentsPaneSearchEntries = createLocalizedCatalog(() => [
|
|||
'Choose whether installed agents are detected on this device or in WSL.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.agents.search.96ba2373b6', 'agent'),
|
||||
translate('auto.components.settings.agents.search.d2952dfd74', 'location'),
|
||||
translate('auto.components.settings.agents.search.77c02fa3c3', 'windows'),
|
||||
translate('auto.components.settings.agents.search.d608654c03', 'wsl'),
|
||||
translate('auto.components.settings.agents.search.f622b8eb2a', 'linux'),
|
||||
translate('auto.components.settings.agents.search.839e82c81f', 'detect'),
|
||||
translate('auto.components.settings.agents.search.2814401339', 'installed'),
|
||||
translate('auto.components.settings.agents.search.719f53350c', 'path')
|
||||
...translateSearchKeyword('auto.components.settings.agents.search.96ba2373b6', 'agent'),
|
||||
...translateSearchKeyword('auto.components.settings.agents.search.d2952dfd74', 'location'),
|
||||
...translateSearchKeyword('auto.components.settings.agents.search.77c02fa3c3', 'windows'),
|
||||
...translateSearchKeyword('auto.components.settings.agents.search.d608654c03', 'wsl'),
|
||||
...translateSearchKeyword('auto.components.settings.agents.search.f622b8eb2a', 'linux'),
|
||||
...translateSearchKeyword('auto.components.settings.agents.search.839e82c81f', 'detect'),
|
||||
...translateSearchKeyword('auto.components.settings.agents.search.2814401339', 'installed'),
|
||||
...translateSearchKeyword('auto.components.settings.agents.search.719f53350c', 'path')
|
||||
]
|
||||
},
|
||||
{
|
||||
title: AGENT_STATUS_HOOKS_TITLE,
|
||||
description: AGENT_STATUS_HOOKS_DESCRIPTION,
|
||||
keywords: AGENT_STATUS_HOOKS_SEARCH_KEYWORDS
|
||||
title: getAgentStatusHooksTitle(),
|
||||
description: getAgentStatusHooksDescription(),
|
||||
keywords: getAgentStatusHooksSearchKeywords()
|
||||
},
|
||||
{
|
||||
title: AGENT_GENERATED_TAB_TITLES_TITLE,
|
||||
description: AGENT_GENERATED_TAB_TITLES_DESCRIPTION,
|
||||
keywords: AGENT_GENERATED_TAB_TITLES_SEARCH_KEYWORDS
|
||||
title: getAgentGeneratedTabTitlesTitle(),
|
||||
description: getAgentGeneratedTabTitlesDescription(),
|
||||
keywords: getAgentGeneratedTabTitlesSearchKeywords()
|
||||
},
|
||||
{
|
||||
title: AGENT_AWAKE_TITLE,
|
||||
title: getAgentAwakeTitle(),
|
||||
description: getAgentAwakeDescription(),
|
||||
keywords: getAgentAwakeSearchKeywords()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ import type { SettingsSearchEntry } from './settings-search'
|
|||
import { getTerminalAppearanceSearchEntries } from './terminal-search'
|
||||
import { createLocalizedCatalog } from '@/i18n/localized-catalog'
|
||||
import { translate } from '@/i18n/i18n'
|
||||
import { translateSearchKeyword } from './settings-search-keywords'
|
||||
import { SHOW_UI_LANGUAGE_SETTING } from '@/i18n/supported-languages'
|
||||
import { getStatusBarToggles } from './appearance-status-bar-search'
|
||||
|
||||
|
|
@ -15,9 +16,9 @@ export const getThemeEntries = createLocalizedCatalog((): SettingsSearchEntry[]
|
|||
'Choose how Orca looks in the app window.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.appearance.search.262fe1d24f', 'dark'),
|
||||
translate('auto.components.settings.appearance.search.44d873fd18', 'light'),
|
||||
translate('auto.components.settings.appearance.search.3a9b69d734', 'system')
|
||||
...translateSearchKeyword('auto.components.settings.appearance.search.262fe1d24f', 'dark'),
|
||||
...translateSearchKeyword('auto.components.settings.appearance.search.44d873fd18', 'light'),
|
||||
...translateSearchKeyword('auto.components.settings.appearance.search.3a9b69d734', 'system')
|
||||
]
|
||||
}
|
||||
])
|
||||
|
|
@ -30,16 +31,25 @@ export const getLanguageEntries = createLocalizedCatalog((): SettingsSearchEntry
|
|||
'Choose the language used by the Orca interface.'
|
||||
),
|
||||
keywords: [
|
||||
translate('settings.appearance.language.title', 'Language'),
|
||||
translate(
|
||||
...translateSearchKeyword('settings.appearance.language.title', 'Language'),
|
||||
...translateSearchKeyword(
|
||||
'settings.appearance.language.description',
|
||||
'Choose the language used by the Orca interface.'
|
||||
),
|
||||
translate('settings.appearance.language.system', 'System'),
|
||||
translate('settings.appearance.language.english', 'English'),
|
||||
translate('auto.components.settings.appearance.search.language.locale', 'locale'),
|
||||
translate('auto.components.settings.appearance.search.language.i18n', 'i18n'),
|
||||
translate('auto.components.settings.appearance.search.language.translation', 'translation')
|
||||
...translateSearchKeyword('settings.appearance.language.system', 'System'),
|
||||
...translateSearchKeyword('settings.appearance.language.english', 'English'),
|
||||
...translateSearchKeyword('settings.appearance.language.chinese', '中文(简体)'),
|
||||
...translateSearchKeyword('settings.appearance.language.korean', '한국어'),
|
||||
...translateSearchKeyword('settings.appearance.language.japanese', '日本語'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.appearance.search.language.locale',
|
||||
'locale'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.appearance.search.language.i18n', 'i18n'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.appearance.search.language.translation',
|
||||
'translation'
|
||||
)
|
||||
]
|
||||
}
|
||||
])
|
||||
|
|
@ -52,9 +62,9 @@ export const getZoomEntries = createLocalizedCatalog((): SettingsSearchEntry[] =
|
|||
'Scale the entire application interface.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.appearance.search.3ae5de6101', 'zoom'),
|
||||
translate('auto.components.settings.appearance.search.0952091186', 'scale'),
|
||||
translate('auto.components.settings.appearance.search.0c83659f48', 'shortcut')
|
||||
...translateSearchKeyword('auto.components.settings.appearance.search.3ae5de6101', 'zoom'),
|
||||
...translateSearchKeyword('auto.components.settings.appearance.search.0952091186', 'scale'),
|
||||
...translateSearchKeyword('auto.components.settings.appearance.search.0c83659f48', 'shortcut')
|
||||
]
|
||||
}
|
||||
])
|
||||
|
|
@ -67,14 +77,23 @@ export const getTypographyEntries = createLocalizedCatalog((): SettingsSearchEnt
|
|||
'Choose the font used by the Orca interface.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.appearance.search.24094af355', 'font'),
|
||||
translate('auto.components.settings.appearance.search.a0e09aed9c', 'typeface'),
|
||||
translate('auto.components.settings.appearance.search.8b36fb3f64', 'typography'),
|
||||
translate('auto.components.settings.appearance.search.fab91464dd', 'ide'),
|
||||
translate('auto.components.settings.appearance.search.1f2880a9d5', 'orca'),
|
||||
translate('auto.components.settings.appearance.search.5095258df2', 'interface'),
|
||||
translate('auto.components.settings.appearance.search.36e006efc1', 'app'),
|
||||
translate('auto.components.settings.appearance.search.2f12e1aa3a', 'ui')
|
||||
...translateSearchKeyword('auto.components.settings.appearance.search.24094af355', 'font'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.appearance.search.a0e09aed9c',
|
||||
'typeface'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.appearance.search.8b36fb3f64',
|
||||
'typography'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.appearance.search.fab91464dd', 'ide'),
|
||||
...translateSearchKeyword('auto.components.settings.appearance.search.1f2880a9d5', 'orca'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.appearance.search.5095258df2',
|
||||
'interface'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.appearance.search.36e006efc1', 'app'),
|
||||
...translateSearchKeyword('auto.components.settings.appearance.search.2f12e1aa3a', 'ui')
|
||||
]
|
||||
}
|
||||
])
|
||||
|
|
@ -90,12 +109,18 @@ export const getLayoutEntries = createLocalizedCatalog((): SettingsSearchEntry[]
|
|||
'Dim files matched by .gitignore in the file explorer.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.appearance.search.bce3ac317a', 'git'),
|
||||
translate('auto.components.settings.appearance.search.08c86bf58e', 'gitignore'),
|
||||
translate('auto.components.settings.appearance.search.9f2df826ac', 'ignored'),
|
||||
translate('auto.components.settings.appearance.search.c1bca1885a', 'file explorer'),
|
||||
translate('auto.components.settings.appearance.search.5bff6a2ef0', 'sidebar'),
|
||||
translate('auto.components.settings.appearance.search.648eeada79', 'hide')
|
||||
...translateSearchKeyword('auto.components.settings.appearance.search.bce3ac317a', 'git'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.appearance.search.08c86bf58e',
|
||||
'gitignore'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.appearance.search.9f2df826ac', 'ignored'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.appearance.search.c1bca1885a',
|
||||
'file explorer'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.appearance.search.5bff6a2ef0', 'sidebar'),
|
||||
...translateSearchKeyword('auto.components.settings.appearance.search.648eeada79', 'hide')
|
||||
]
|
||||
}
|
||||
])
|
||||
|
|
@ -108,11 +133,14 @@ export const getTitlebarEntries = createLocalizedCatalog((): SettingsSearchEntry
|
|||
'Show Orca in the titlebar.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.appearance.search.bed343b03e', 'titlebar'),
|
||||
translate('auto.components.settings.appearance.search.1f2880a9d5', 'orca'),
|
||||
translate('auto.components.settings.appearance.search.36e006efc1', 'app'),
|
||||
translate('auto.components.settings.appearance.search.51f957ce39', 'name'),
|
||||
translate('auto.components.settings.appearance.search.a895d0f938', 'brand')
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.appearance.search.bed343b03e',
|
||||
'titlebar'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.appearance.search.1f2880a9d5', 'orca'),
|
||||
...translateSearchKeyword('auto.components.settings.appearance.search.36e006efc1', 'app'),
|
||||
...translateSearchKeyword('auto.components.settings.appearance.search.51f957ce39', 'name'),
|
||||
...translateSearchKeyword('auto.components.settings.appearance.search.a895d0f938', 'brand')
|
||||
]
|
||||
}
|
||||
])
|
||||
|
|
@ -133,13 +161,13 @@ export const getSidebarEntries = createLocalizedCatalog((): SettingsSearchEntry[
|
|||
'Show the Tasks button at the top of the left sidebar.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.appearance.search.0d5a74b606', 'tasks'),
|
||||
translate('auto.components.settings.appearance.search.5bff6a2ef0', 'sidebar'),
|
||||
translate('auto.components.settings.appearance.search.6cf5f54ce1', 'button'),
|
||||
translate('auto.components.settings.appearance.search.648eeada79', 'hide'),
|
||||
translate('auto.components.settings.appearance.search.ac79fe4a04', 'show'),
|
||||
translate('auto.components.settings.appearance.search.2ee4810f38', 'github'),
|
||||
translate('auto.components.settings.appearance.search.6b846424cc', 'linear')
|
||||
...translateSearchKeyword('auto.components.settings.appearance.search.0d5a74b606', 'tasks'),
|
||||
...translateSearchKeyword('auto.components.settings.appearance.search.5bff6a2ef0', 'sidebar'),
|
||||
...translateSearchKeyword('auto.components.settings.appearance.search.6cf5f54ce1', 'button'),
|
||||
...translateSearchKeyword('auto.components.settings.appearance.search.648eeada79', 'hide'),
|
||||
...translateSearchKeyword('auto.components.settings.appearance.search.ac79fe4a04', 'show'),
|
||||
...translateSearchKeyword('auto.components.settings.appearance.search.2ee4810f38', 'github'),
|
||||
...translateSearchKeyword('auto.components.settings.appearance.search.6b846424cc', 'linear')
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -152,13 +180,22 @@ export const getSidebarEntries = createLocalizedCatalog((): SettingsSearchEntry[
|
|||
'Show the Automations button at the top of the left sidebar.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.appearance.search.b186f3cefb', 'automations'),
|
||||
translate('auto.components.settings.appearance.search.58f4e22fa2', 'automation'),
|
||||
translate('auto.components.settings.appearance.search.4c920ab2d1', 'schedule'),
|
||||
translate('auto.components.settings.appearance.search.5bff6a2ef0', 'sidebar'),
|
||||
translate('auto.components.settings.appearance.search.6cf5f54ce1', 'button'),
|
||||
translate('auto.components.settings.appearance.search.648eeada79', 'hide'),
|
||||
translate('auto.components.settings.appearance.search.ac79fe4a04', 'show')
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.appearance.search.b186f3cefb',
|
||||
'automations'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.appearance.search.58f4e22fa2',
|
||||
'automation'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.appearance.search.4c920ab2d1',
|
||||
'schedule'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.appearance.search.5bff6a2ef0', 'sidebar'),
|
||||
...translateSearchKeyword('auto.components.settings.appearance.search.6cf5f54ce1', 'button'),
|
||||
...translateSearchKeyword('auto.components.settings.appearance.search.648eeada79', 'hide'),
|
||||
...translateSearchKeyword('auto.components.settings.appearance.search.ac79fe4a04', 'show')
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -171,13 +208,13 @@ export const getSidebarEntries = createLocalizedCatalog((): SettingsSearchEntry[
|
|||
'Show the Orca Mobile button at the top of the left sidebar.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.appearance.search.74618577c7', 'mobile'),
|
||||
translate('auto.components.settings.appearance.search.5e5b8878bf', 'phone'),
|
||||
translate('auto.components.settings.appearance.search.5bff6a2ef0', 'sidebar'),
|
||||
translate('auto.components.settings.appearance.search.6cf5f54ce1', 'button'),
|
||||
translate('auto.components.settings.appearance.search.648eeada79', 'hide'),
|
||||
translate('auto.components.settings.appearance.search.ac79fe4a04', 'show'),
|
||||
translate('auto.components.settings.appearance.search.839fb1e3ed', 'toolbox')
|
||||
...translateSearchKeyword('auto.components.settings.appearance.search.74618577c7', 'mobile'),
|
||||
...translateSearchKeyword('auto.components.settings.appearance.search.5e5b8878bf', 'phone'),
|
||||
...translateSearchKeyword('auto.components.settings.appearance.search.5bff6a2ef0', 'sidebar'),
|
||||
...translateSearchKeyword('auto.components.settings.appearance.search.6cf5f54ce1', 'button'),
|
||||
...translateSearchKeyword('auto.components.settings.appearance.search.648eeada79', 'hide'),
|
||||
...translateSearchKeyword('auto.components.settings.appearance.search.ac79fe4a04', 'show'),
|
||||
...translateSearchKeyword('auto.components.settings.appearance.search.839fb1e3ed', 'toolbox')
|
||||
]
|
||||
}
|
||||
])
|
||||
|
|
@ -190,13 +227,22 @@ export const getAppIconEntries = createLocalizedCatalog((): SettingsSearchEntry[
|
|||
'Choose the app icon shown in the Dock and window switcher.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.appearance.search.2cfb3420c0', 'app icon'),
|
||||
translate('auto.components.settings.appearance.search.1f2880a9d5', 'orca'),
|
||||
translate('auto.components.settings.appearance.search.d18b54ca90', 'dock'),
|
||||
translate('auto.components.settings.appearance.search.e5bc35d59e', 'window'),
|
||||
translate('auto.components.settings.appearance.search.651f35b2c6', 'switcher'),
|
||||
translate('auto.components.settings.appearance.search.f586abfa35', 'blue'),
|
||||
translate('auto.components.settings.appearance.search.468448bba4', 'watercolor')
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.appearance.search.2cfb3420c0',
|
||||
'app icon'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.appearance.search.1f2880a9d5', 'orca'),
|
||||
...translateSearchKeyword('auto.components.settings.appearance.search.d18b54ca90', 'dock'),
|
||||
...translateSearchKeyword('auto.components.settings.appearance.search.e5bc35d59e', 'window'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.appearance.search.651f35b2c6',
|
||||
'switcher'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.appearance.search.f586abfa35', 'blue'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.appearance.search.468448bba4',
|
||||
'watercolor'
|
||||
)
|
||||
]
|
||||
}
|
||||
])
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
import type { StatusBarItem } from '../../../../shared/types'
|
||||
import { createLocalizedCatalog } from '@/i18n/localized-catalog'
|
||||
import { translate } from '@/i18n/i18n'
|
||||
import { translateSearchKeyword } from './settings-search-keywords'
|
||||
|
||||
export const getStatusBarToggles = createLocalizedCatalog(
|
||||
(): readonly {
|
||||
|
|
@ -18,12 +19,24 @@ export const getStatusBarToggles = createLocalizedCatalog(
|
|||
'Show Claude token and cost usage in the status bar.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.appearance.search.896eb53fd4', 'status bar'),
|
||||
translate('auto.components.settings.appearance.search.c9fe3a7876', 'claude'),
|
||||
translate('auto.components.settings.appearance.search.00a028f25f', 'usage'),
|
||||
translate('auto.components.settings.appearance.search.afbb6a3767', 'tokens'),
|
||||
translate('auto.components.settings.appearance.search.edbf0f63a0', 'cost'),
|
||||
translate('auto.components.settings.appearance.search.dea0a9a665', 'anthropic')
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.appearance.search.896eb53fd4',
|
||||
'status bar'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.appearance.search.c9fe3a7876',
|
||||
'claude'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.appearance.search.00a028f25f', 'usage'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.appearance.search.afbb6a3767',
|
||||
'tokens'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.appearance.search.edbf0f63a0', 'cost'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.appearance.search.dea0a9a665',
|
||||
'anthropic'
|
||||
)
|
||||
],
|
||||
toggleDescription: translate(
|
||||
'settings.appearance.statusBar.claudeToggleDescription',
|
||||
|
|
@ -38,12 +51,18 @@ export const getStatusBarToggles = createLocalizedCatalog(
|
|||
'Show Codex token and cost usage in the status bar.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.appearance.search.896eb53fd4', 'status bar'),
|
||||
translate('auto.components.settings.appearance.search.8dfd676c28', 'codex'),
|
||||
translate('auto.components.settings.appearance.search.00a028f25f', 'usage'),
|
||||
translate('auto.components.settings.appearance.search.afbb6a3767', 'tokens'),
|
||||
translate('auto.components.settings.appearance.search.edbf0f63a0', 'cost'),
|
||||
translate('auto.components.settings.appearance.search.97957e374e', 'openai')
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.appearance.search.896eb53fd4',
|
||||
'status bar'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.appearance.search.8dfd676c28', 'codex'),
|
||||
...translateSearchKeyword('auto.components.settings.appearance.search.00a028f25f', 'usage'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.appearance.search.afbb6a3767',
|
||||
'tokens'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.appearance.search.edbf0f63a0', 'cost'),
|
||||
...translateSearchKeyword('auto.components.settings.appearance.search.97957e374e', 'openai')
|
||||
],
|
||||
toggleDescription: translate(
|
||||
'settings.appearance.statusBar.codexToggleDescription',
|
||||
|
|
@ -58,12 +77,21 @@ export const getStatusBarToggles = createLocalizedCatalog(
|
|||
'Show Gemini token and cost usage in the status bar.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.appearance.search.896eb53fd4', 'status bar'),
|
||||
translate('auto.components.settings.appearance.search.2804a920ad', 'gemini'),
|
||||
translate('auto.components.settings.appearance.search.00a028f25f', 'usage'),
|
||||
translate('auto.components.settings.appearance.search.afbb6a3767', 'tokens'),
|
||||
translate('auto.components.settings.appearance.search.edbf0f63a0', 'cost'),
|
||||
translate('auto.components.settings.appearance.search.51b0ccd6a2', 'google')
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.appearance.search.896eb53fd4',
|
||||
'status bar'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.appearance.search.2804a920ad',
|
||||
'gemini'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.appearance.search.00a028f25f', 'usage'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.appearance.search.afbb6a3767',
|
||||
'tokens'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.appearance.search.edbf0f63a0', 'cost'),
|
||||
...translateSearchKeyword('auto.components.settings.appearance.search.51b0ccd6a2', 'google')
|
||||
],
|
||||
toggleDescription: translate(
|
||||
'settings.appearance.statusBar.geminiToggleDescription',
|
||||
|
|
@ -81,12 +109,24 @@ export const getStatusBarToggles = createLocalizedCatalog(
|
|||
'Show OpenCode Go token and cost usage in the status bar.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.appearance.search.896eb53fd4', 'status bar'),
|
||||
translate('auto.components.settings.appearance.search.a9d56852eb', 'opencode'),
|
||||
translate('auto.components.settings.appearance.search.d77537b580', 'opencode-go'),
|
||||
translate('auto.components.settings.appearance.search.00a028f25f', 'usage'),
|
||||
translate('auto.components.settings.appearance.search.afbb6a3767', 'tokens'),
|
||||
translate('auto.components.settings.appearance.search.edbf0f63a0', 'cost')
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.appearance.search.896eb53fd4',
|
||||
'status bar'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.appearance.search.a9d56852eb',
|
||||
'opencode'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.appearance.search.d77537b580',
|
||||
'opencode-go'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.appearance.search.00a028f25f', 'usage'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.appearance.search.afbb6a3767',
|
||||
'tokens'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.appearance.search.edbf0f63a0', 'cost')
|
||||
],
|
||||
toggleDescription: translate(
|
||||
'settings.appearance.statusBar.opencodeGoToggleDescription',
|
||||
|
|
@ -101,11 +141,20 @@ export const getStatusBarToggles = createLocalizedCatalog(
|
|||
'Show Kimi subscription usage in the status bar.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.appearance.search.896eb53fd4', 'status bar'),
|
||||
translate('auto.components.settings.appearance.search.40e5c3c285', 'kimi'),
|
||||
translate('auto.components.settings.appearance.search.00a028f25f', 'usage'),
|
||||
translate('auto.components.settings.appearance.search.de586def95', 'subscription'),
|
||||
translate('auto.components.settings.appearance.search.35565867cb', 'moonshot')
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.appearance.search.896eb53fd4',
|
||||
'status bar'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.appearance.search.40e5c3c285', 'kimi'),
|
||||
...translateSearchKeyword('auto.components.settings.appearance.search.00a028f25f', 'usage'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.appearance.search.de586def95',
|
||||
'subscription'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.appearance.search.35565867cb',
|
||||
'moonshot'
|
||||
)
|
||||
],
|
||||
toggleDescription: translate(
|
||||
'settings.appearance.statusBar.kimiToggleDescription',
|
||||
|
|
@ -120,11 +169,20 @@ export const getStatusBarToggles = createLocalizedCatalog(
|
|||
'Show the active SSH connection status in the status bar.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.appearance.search.896eb53fd4', 'status bar'),
|
||||
translate('auto.components.settings.appearance.search.6ecad74eb3', 'ssh'),
|
||||
translate('auto.components.settings.appearance.search.a278406ed5', 'remote'),
|
||||
translate('auto.components.settings.appearance.search.f4997e0f8a', 'connection'),
|
||||
translate('auto.components.settings.appearance.search.fe192b060e', 'host')
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.appearance.search.896eb53fd4',
|
||||
'status bar'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.appearance.search.6ecad74eb3', 'ssh'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.appearance.search.a278406ed5',
|
||||
'remote'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.appearance.search.f4997e0f8a',
|
||||
'connection'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.appearance.search.fe192b060e', 'host')
|
||||
],
|
||||
toggleDescription: translate(
|
||||
'settings.appearance.statusBar.sshToggleDescription',
|
||||
|
|
@ -139,14 +197,29 @@ export const getStatusBarToggles = createLocalizedCatalog(
|
|||
'Show CPU, memory, terminal sessions, and workspace disk usage in the status bar.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.appearance.search.896eb53fd4', 'status bar'),
|
||||
translate('auto.components.settings.appearance.search.c690a15849', 'resource'),
|
||||
translate('auto.components.settings.appearance.search.9c4d5f0894', 'manager'),
|
||||
translate('auto.components.settings.appearance.search.4355f18ac6', 'memory'),
|
||||
translate('auto.components.settings.appearance.search.4ddbde4999', 'cpu'),
|
||||
translate('auto.components.settings.appearance.search.96b4fb0064', 'terminal'),
|
||||
translate('auto.components.settings.appearance.search.90bdc043ea', 'disk'),
|
||||
translate('auto.components.settings.appearance.search.cb1cc62cf8', 'space')
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.appearance.search.896eb53fd4',
|
||||
'status bar'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.appearance.search.c690a15849',
|
||||
'resource'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.appearance.search.9c4d5f0894',
|
||||
'manager'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.appearance.search.4355f18ac6',
|
||||
'memory'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.appearance.search.4ddbde4999', 'cpu'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.appearance.search.96b4fb0064',
|
||||
'terminal'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.appearance.search.90bdc043ea', 'disk'),
|
||||
...translateSearchKeyword('auto.components.settings.appearance.search.cb1cc62cf8', 'space')
|
||||
],
|
||||
toggleDescription: translate(
|
||||
'settings.appearance.statusBar.resourceUsageToggleDescription',
|
||||
|
|
@ -161,11 +234,23 @@ export const getStatusBarToggles = createLocalizedCatalog(
|
|||
'Show live workspace ports in the status bar.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.appearance.search.896eb53fd4', 'status bar'),
|
||||
translate('auto.components.settings.appearance.search.006e67b279', 'ports'),
|
||||
translate('auto.components.settings.appearance.search.46d21eef62', 'localhost'),
|
||||
translate('auto.components.settings.appearance.search.43cfba3b95', 'server'),
|
||||
translate('auto.components.settings.appearance.search.dc02c8759d', 'workspace')
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.appearance.search.896eb53fd4',
|
||||
'status bar'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.appearance.search.006e67b279', 'ports'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.appearance.search.46d21eef62',
|
||||
'localhost'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.appearance.search.43cfba3b95',
|
||||
'server'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.appearance.search.dc02c8759d',
|
||||
'workspace'
|
||||
)
|
||||
],
|
||||
toggleDescription: translate(
|
||||
'settings.appearance.statusBar.portsToggleDescription',
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
import type { SettingsSearchEntry } from './settings-search'
|
||||
import { translate } from '@/i18n/i18n'
|
||||
import { translateSearchKeyword } from './settings-search-keywords'
|
||||
import { createLocalizedCatalog } from '@/i18n/localized-catalog'
|
||||
|
||||
export const getAutoRenameBranchParentSearchEntry = createLocalizedCatalog(
|
||||
|
|
@ -13,17 +14,50 @@ export const getAutoRenameBranchParentSearchEntry = createLocalizedCatalog(
|
|||
'Rename the auto-generated branch based on the work once an agent starts.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.auto.rename.branch.search.9319bd9827', 'branch'),
|
||||
translate('auto.components.settings.auto.rename.branch.search.55a1860e47', 'rename'),
|
||||
translate('auto.components.settings.auto.rename.branch.search.7803423877', 'auto'),
|
||||
translate('auto.components.settings.auto.rename.branch.search.f0acf64301', 'creature name'),
|
||||
translate('auto.components.settings.auto.rename.branch.search.3ef3cbe98c', 'agent'),
|
||||
translate('auto.components.settings.auto.rename.branch.search.40d21f2efc', 'prompt'),
|
||||
translate('auto.components.settings.auto.rename.branch.search.10485c4fc5', 'command'),
|
||||
translate('auto.components.settings.auto.rename.branch.search.7adefcdd94', 'template'),
|
||||
translate('auto.components.settings.auto.rename.branch.search.ed677944cc', 'worktree'),
|
||||
translate('auto.components.settings.auto.rename.branch.search.a482f6a423', 'slug'),
|
||||
translate('auto.components.settings.auto.rename.branch.search.f41833025e', 'generate')
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.auto.rename.branch.search.9319bd9827',
|
||||
'branch'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.auto.rename.branch.search.55a1860e47',
|
||||
'rename'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.auto.rename.branch.search.7803423877',
|
||||
'auto'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.auto.rename.branch.search.f0acf64301',
|
||||
'creature name'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.auto.rename.branch.search.3ef3cbe98c',
|
||||
'agent'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.auto.rename.branch.search.40d21f2efc',
|
||||
'prompt'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.auto.rename.branch.search.10485c4fc5',
|
||||
'command'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.auto.rename.branch.search.7adefcdd94',
|
||||
'template'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.auto.rename.branch.search.ed677944cc',
|
||||
'worktree'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.auto.rename.branch.search.a482f6a423',
|
||||
'slug'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.auto.rename.branch.search.f41833025e',
|
||||
'generate'
|
||||
)
|
||||
]
|
||||
})
|
||||
)
|
||||
|
|
@ -39,13 +73,34 @@ export const getAutoRenameBranchAdvancedSearchEntries = createLocalizedCatalog((
|
|||
'Agent command template used when generating branch names.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.auto.rename.branch.search.40d21f2efc', 'prompt'),
|
||||
translate('auto.components.settings.auto.rename.branch.search.502aa57681', 'instructions'),
|
||||
translate('auto.components.settings.auto.rename.branch.search.50139297e6', 'built-in prompt'),
|
||||
translate('auto.components.settings.auto.rename.branch.search.10485c4fc5', 'command'),
|
||||
translate('auto.components.settings.auto.rename.branch.search.7adefcdd94', 'template'),
|
||||
translate('auto.components.settings.auto.rename.branch.search.a482f6a423', 'slug'),
|
||||
translate('auto.components.settings.auto.rename.branch.search.0971762141', 'kebab-case')
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.auto.rename.branch.search.40d21f2efc',
|
||||
'prompt'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.auto.rename.branch.search.502aa57681',
|
||||
'instructions'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.auto.rename.branch.search.50139297e6',
|
||||
'built-in prompt'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.auto.rename.branch.search.10485c4fc5',
|
||||
'command'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.auto.rename.branch.search.7adefcdd94',
|
||||
'template'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.auto.rename.branch.search.a482f6a423',
|
||||
'slug'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.auto.rename.branch.search.0971762141',
|
||||
'kebab-case'
|
||||
)
|
||||
]
|
||||
}
|
||||
])
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
import type { SettingsSearchEntry } from './settings-search'
|
||||
import { translate } from '@/i18n/i18n'
|
||||
import { translateSearchKeyword } from './settings-search-keywords'
|
||||
|
||||
type BrowserShortcutPlatform = {
|
||||
isMac: boolean
|
||||
|
|
@ -30,14 +31,14 @@ export function getBrowserPaneSearchEntries(
|
|||
'URL opened when creating a new browser tab. Leave empty to open a blank tab.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.browser.search.2d2d995c58', 'browser'),
|
||||
translate('auto.components.settings.browser.search.291f480a5e', 'home'),
|
||||
translate('auto.components.settings.browser.search.0dbb1eaf4e', 'homepage'),
|
||||
translate('auto.components.settings.browser.search.5448f4097b', 'default'),
|
||||
translate('auto.components.settings.browser.search.4fda4fb066', 'url'),
|
||||
translate('auto.components.settings.browser.search.483a0eb5e0', 'new tab'),
|
||||
translate('auto.components.settings.browser.search.5164c47e31', 'blank'),
|
||||
translate('auto.components.settings.browser.search.4596a52cf7', 'landing')
|
||||
...translateSearchKeyword('auto.components.settings.browser.search.2d2d995c58', 'browser'),
|
||||
...translateSearchKeyword('auto.components.settings.browser.search.291f480a5e', 'home'),
|
||||
...translateSearchKeyword('auto.components.settings.browser.search.0dbb1eaf4e', 'homepage'),
|
||||
...translateSearchKeyword('auto.components.settings.browser.search.5448f4097b', 'default'),
|
||||
...translateSearchKeyword('auto.components.settings.browser.search.4fda4fb066', 'url'),
|
||||
...translateSearchKeyword('auto.components.settings.browser.search.483a0eb5e0', 'new tab'),
|
||||
...translateSearchKeyword('auto.components.settings.browser.search.5164c47e31', 'blank'),
|
||||
...translateSearchKeyword('auto.components.settings.browser.search.4596a52cf7', 'landing')
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -50,18 +51,21 @@ export function getBrowserPaneSearchEntries(
|
|||
'Search engine used when typing non-URL text in the address bar.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.browser.search.2d2d995c58', 'browser'),
|
||||
translate('auto.components.settings.browser.search.16bd69cd82', 'search'),
|
||||
translate('auto.components.settings.browser.search.72b4b89970', 'engine'),
|
||||
translate('auto.components.settings.browser.search.8a489aab8d', 'google'),
|
||||
translate('auto.components.settings.browser.search.1f8153acfb', 'duckduckgo'),
|
||||
translate('auto.components.settings.browser.search.ad40e75d13', 'bing'),
|
||||
translate('auto.components.settings.browser.search.e1c2a57f07', 'kagi'),
|
||||
translate('auto.components.settings.browser.search.66dd641a47', 'session'),
|
||||
translate('auto.components.settings.browser.search.0732ebe6fb', 'private'),
|
||||
translate('auto.components.settings.browser.search.3538b3aaeb', 'token'),
|
||||
translate('auto.components.settings.browser.search.8b8ed06e4b', 'omnibox'),
|
||||
translate('auto.components.settings.browser.search.0bb34eacc9', 'query')
|
||||
...translateSearchKeyword('auto.components.settings.browser.search.2d2d995c58', 'browser'),
|
||||
...translateSearchKeyword('auto.components.settings.browser.search.16bd69cd82', 'search'),
|
||||
...translateSearchKeyword('auto.components.settings.browser.search.72b4b89970', 'engine'),
|
||||
...translateSearchKeyword('auto.components.settings.browser.search.8a489aab8d', 'google'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.browser.search.1f8153acfb',
|
||||
'duckduckgo'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.browser.search.ad40e75d13', 'bing'),
|
||||
...translateSearchKeyword('auto.components.settings.browser.search.e1c2a57f07', 'kagi'),
|
||||
...translateSearchKeyword('auto.components.settings.browser.search.66dd641a47', 'session'),
|
||||
...translateSearchKeyword('auto.components.settings.browser.search.0732ebe6fb', 'private'),
|
||||
...translateSearchKeyword('auto.components.settings.browser.search.3538b3aaeb', 'token'),
|
||||
...translateSearchKeyword('auto.components.settings.browser.search.8b8ed06e4b', 'omnibox'),
|
||||
...translateSearchKeyword('auto.components.settings.browser.search.0bb34eacc9', 'query')
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -71,29 +75,38 @@ export function getBrowserPaneSearchEntries(
|
|||
'Zoom level applied to newly opened browser tabs.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.browser.search.2d2d995c58', 'browser'),
|
||||
translate('auto.components.settings.browser.search.4a98ed195f', 'zoom'),
|
||||
translate('auto.components.settings.browser.search.54f4ea55f7', 'scale'),
|
||||
translate('auto.components.settings.browser.search.5448f4097b', 'default'),
|
||||
translate('auto.components.settings.browser.search.726f2a8556', 'page zoom'),
|
||||
translate('auto.components.settings.browser.search.483a0eb5e0', 'new tab'),
|
||||
translate('auto.components.settings.browser.search.95944898e0', 'percentage')
|
||||
...translateSearchKeyword('auto.components.settings.browser.search.2d2d995c58', 'browser'),
|
||||
...translateSearchKeyword('auto.components.settings.browser.search.4a98ed195f', 'zoom'),
|
||||
...translateSearchKeyword('auto.components.settings.browser.search.54f4ea55f7', 'scale'),
|
||||
...translateSearchKeyword('auto.components.settings.browser.search.5448f4097b', 'default'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.browser.search.726f2a8556',
|
||||
'page zoom'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.browser.search.483a0eb5e0', 'new tab'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.browser.search.95944898e0',
|
||||
'percentage'
|
||||
)
|
||||
]
|
||||
},
|
||||
{
|
||||
title: translate('auto.components.settings.browser.search.5cb082b3e3', 'Link Routing'),
|
||||
description: getBrowserLinkRoutingDescription(platform),
|
||||
keywords: [
|
||||
translate('auto.components.settings.browser.search.2d2d995c58', 'browser'),
|
||||
translate('auto.components.settings.browser.search.44d14df30d', 'preview'),
|
||||
translate('auto.components.settings.browser.search.bea27bac4b', 'links'),
|
||||
translate('auto.components.settings.browser.search.82ba1c80ea', 'localhost'),
|
||||
translate('auto.components.settings.browser.search.72c58f7792', 'webview'),
|
||||
translate('auto.components.settings.browser.search.90425d313c', 'shift'),
|
||||
...translateSearchKeyword('auto.components.settings.browser.search.2d2d995c58', 'browser'),
|
||||
...translateSearchKeyword('auto.components.settings.browser.search.44d14df30d', 'preview'),
|
||||
...translateSearchKeyword('auto.components.settings.browser.search.bea27bac4b', 'links'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.browser.search.82ba1c80ea',
|
||||
'localhost'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.browser.search.72c58f7792', 'webview'),
|
||||
...translateSearchKeyword('auto.components.settings.browser.search.90425d313c', 'shift'),
|
||||
platform.isMac ? 'cmd' : 'ctrl',
|
||||
translate('auto.components.settings.browser.search.68d1db8929', 'markdown'),
|
||||
translate('auto.components.settings.browser.search.8dd4805991', 'file'),
|
||||
translate('auto.components.settings.browser.search.a7a07d5415', 'editor')
|
||||
...translateSearchKeyword('auto.components.settings.browser.search.68d1db8929', 'markdown'),
|
||||
...translateSearchKeyword('auto.components.settings.browser.search.8dd4805991', 'file'),
|
||||
...translateSearchKeyword('auto.components.settings.browser.search.a7a07d5415', 'editor')
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -103,16 +116,16 @@ export function getBrowserPaneSearchEntries(
|
|||
'Import cookies from Chrome, Edge, or other browsers to use existing logins inside Orca.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.browser.search.2d2d995c58', 'browser'),
|
||||
translate('auto.components.settings.browser.search.29193a51d5', 'cookies'),
|
||||
translate('auto.components.settings.browser.search.66dd641a47', 'session'),
|
||||
translate('auto.components.settings.browser.search.2e7f951773', 'import'),
|
||||
translate('auto.components.settings.browser.search.3910a41f32', 'auth'),
|
||||
translate('auto.components.settings.browser.search.854ef6ce83', 'login'),
|
||||
translate('auto.components.settings.browser.search.75a0d435b7', 'chrome'),
|
||||
translate('auto.components.settings.browser.search.533a253deb', 'edge'),
|
||||
translate('auto.components.settings.browser.search.1c1e097985', 'arc'),
|
||||
translate('auto.components.settings.browser.search.7539f6336c', 'profile')
|
||||
...translateSearchKeyword('auto.components.settings.browser.search.2d2d995c58', 'browser'),
|
||||
...translateSearchKeyword('auto.components.settings.browser.search.29193a51d5', 'cookies'),
|
||||
...translateSearchKeyword('auto.components.settings.browser.search.66dd641a47', 'session'),
|
||||
...translateSearchKeyword('auto.components.settings.browser.search.2e7f951773', 'import'),
|
||||
...translateSearchKeyword('auto.components.settings.browser.search.3910a41f32', 'auth'),
|
||||
...translateSearchKeyword('auto.components.settings.browser.search.854ef6ce83', 'login'),
|
||||
...translateSearchKeyword('auto.components.settings.browser.search.75a0d435b7', 'chrome'),
|
||||
...translateSearchKeyword('auto.components.settings.browser.search.533a253deb', 'edge'),
|
||||
...translateSearchKeyword('auto.components.settings.browser.search.1c1e097985', 'arc'),
|
||||
...translateSearchKeyword('auto.components.settings.browser.search.7539f6336c', 'profile')
|
||||
]
|
||||
}
|
||||
]
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
import { translate } from '@/i18n/i18n'
|
||||
import { translateSearchKeyword } from './settings-search-keywords'
|
||||
import { createLocalizedCatalog } from '@/i18n/localized-catalog'
|
||||
|
||||
export const getBrowserUsePaneSearchEntries = createLocalizedCatalog(() => [
|
||||
|
|
@ -9,14 +10,20 @@ export const getBrowserUsePaneSearchEntries = createLocalizedCatalog(() => [
|
|||
'Register the Orca CLI so agents can drive the browser.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.browser.use.search.ba4eb53b72', 'browser use'),
|
||||
translate('auto.components.settings.browser.use.search.85fab5e12c', 'cli'),
|
||||
translate('auto.components.settings.browser.use.search.ff05cbc344', 'orca'),
|
||||
translate('auto.components.settings.browser.use.search.30c74aaa1f', 'path'),
|
||||
translate('auto.components.settings.browser.use.search.3ffafc9b95', 'command'),
|
||||
translate('auto.components.settings.browser.use.search.7e0dcb257a', 'shell'),
|
||||
translate('auto.components.settings.browser.use.search.034c5e8d7f', 'enable'),
|
||||
translate('auto.components.settings.browser.use.search.e56c7b55c9', 'setup')
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.browser.use.search.ba4eb53b72',
|
||||
'browser use'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.browser.use.search.85fab5e12c', 'cli'),
|
||||
...translateSearchKeyword('auto.components.settings.browser.use.search.ff05cbc344', 'orca'),
|
||||
...translateSearchKeyword('auto.components.settings.browser.use.search.30c74aaa1f', 'path'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.browser.use.search.3ffafc9b95',
|
||||
'command'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.browser.use.search.7e0dcb257a', 'shell'),
|
||||
...translateSearchKeyword('auto.components.settings.browser.use.search.034c5e8d7f', 'enable'),
|
||||
...translateSearchKeyword('auto.components.settings.browser.use.search.e56c7b55c9', 'setup')
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -29,14 +36,29 @@ export const getBrowserUsePaneSearchEntries = createLocalizedCatalog(() => [
|
|||
"Install the Browser Use skill so agents can operate Orca's browser."
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.browser.use.search.ba4eb53b72', 'browser use'),
|
||||
translate('auto.components.settings.browser.use.search.a2d489263e', 'skill'),
|
||||
translate('auto.components.settings.browser.use.search.9d97446873', 'agent'),
|
||||
translate('auto.components.settings.browser.use.search.e5a784bc54', 'install'),
|
||||
translate('auto.components.settings.browser.use.search.f5b8fdddf5', 'orca-cli'),
|
||||
translate('auto.components.settings.browser.use.search.6ea88e5206', 'npx'),
|
||||
translate('auto.components.settings.browser.use.search.a57c2172dc', 'agent-browser'),
|
||||
translate('auto.components.settings.browser.use.search.cee44fb442', 'automation')
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.browser.use.search.ba4eb53b72',
|
||||
'browser use'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.browser.use.search.a2d489263e', 'skill'),
|
||||
...translateSearchKeyword('auto.components.settings.browser.use.search.9d97446873', 'agent'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.browser.use.search.e5a784bc54',
|
||||
'install'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.browser.use.search.f5b8fdddf5',
|
||||
'orca-cli'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.browser.use.search.6ea88e5206', 'npx'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.browser.use.search.a57c2172dc',
|
||||
'agent-browser'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.browser.use.search.cee44fb442',
|
||||
'automation'
|
||||
)
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -49,22 +71,52 @@ export const getBrowserUsePaneSearchEntries = createLocalizedCatalog(() => [
|
|||
'Import cookies from Chrome, Edge, or other browsers so agents can reuse your logins.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.browser.use.search.ba4eb53b72', 'browser use'),
|
||||
translate('auto.components.settings.browser.use.search.fb8178824f', 'cookies'),
|
||||
translate('auto.components.settings.browser.use.search.02837ee497', 'session'),
|
||||
translate('auto.components.settings.browser.use.search.d5ad1f7aad', 'import'),
|
||||
translate('auto.components.settings.browser.use.search.48557f639c', 'login'),
|
||||
translate('auto.components.settings.browser.use.search.96ce3d2de2', 'auth'),
|
||||
translate('auto.components.settings.browser.use.search.088e7a9012', 'chrome'),
|
||||
translate('auto.components.settings.browser.use.search.2e1b09897b', 'edge'),
|
||||
translate('auto.components.settings.browser.use.search.ab349a2dd0', 'arc'),
|
||||
translate('auto.components.settings.browser.use.search.20c1323d1e', 'computer use'),
|
||||
translate('auto.components.settings.browser.use.search.63a66da648', 'system browser'),
|
||||
translate('auto.components.settings.browser.use.search.62e2a790c0', 'existing session'),
|
||||
translate('auto.components.settings.browser.use.search.59968bb9b4', 'authenticated browser'),
|
||||
translate('auto.components.settings.browser.use.search.22fb801af8', 'chrome profile'),
|
||||
translate('auto.components.settings.browser.use.search.d5afa54d21', 'edge profile'),
|
||||
translate('auto.components.settings.browser.use.search.3f4c559deb', 'arc profile')
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.browser.use.search.ba4eb53b72',
|
||||
'browser use'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.browser.use.search.fb8178824f',
|
||||
'cookies'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.browser.use.search.02837ee497',
|
||||
'session'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.browser.use.search.d5ad1f7aad', 'import'),
|
||||
...translateSearchKeyword('auto.components.settings.browser.use.search.48557f639c', 'login'),
|
||||
...translateSearchKeyword('auto.components.settings.browser.use.search.96ce3d2de2', 'auth'),
|
||||
...translateSearchKeyword('auto.components.settings.browser.use.search.088e7a9012', 'chrome'),
|
||||
...translateSearchKeyword('auto.components.settings.browser.use.search.2e1b09897b', 'edge'),
|
||||
...translateSearchKeyword('auto.components.settings.browser.use.search.ab349a2dd0', 'arc'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.browser.use.search.20c1323d1e',
|
||||
'computer use'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.browser.use.search.63a66da648',
|
||||
'system browser'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.browser.use.search.62e2a790c0',
|
||||
'existing session'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.browser.use.search.59968bb9b4',
|
||||
'authenticated browser'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.browser.use.search.22fb801af8',
|
||||
'chrome profile'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.browser.use.search.d5afa54d21',
|
||||
'edge profile'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.browser.use.search.3f4c559deb',
|
||||
'arc profile'
|
||||
)
|
||||
]
|
||||
}
|
||||
])
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
import { translate } from '@/i18n/i18n'
|
||||
import { translateSearchKeyword } from './settings-search-keywords'
|
||||
import { createLocalizedCatalog } from '@/i18n/localized-catalog'
|
||||
|
||||
export const getCommitMessageAiPaneSearchEntries = createLocalizedCatalog(() => [
|
||||
|
|
@ -12,15 +13,42 @@ export const getCommitMessageAiPaneSearchEntries = createLocalizedCatalog(() =>
|
|||
'Adds action recipes for Source Control commit, pull request, branch-name, and fix actions.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.commit.message.ai.search.c33cb1b982', 'ai'),
|
||||
translate('auto.components.settings.commit.message.ai.search.127d512e75', 'commit'),
|
||||
translate('auto.components.settings.commit.message.ai.search.93e5210da8', 'message'),
|
||||
translate('auto.components.settings.commit.message.ai.search.8e9cc598d7', 'generate'),
|
||||
translate('auto.components.settings.commit.message.ai.search.3766941527', 'agent'),
|
||||
translate('auto.components.settings.commit.message.ai.search.f121bec167', 'claude'),
|
||||
translate('auto.components.settings.commit.message.ai.search.542e1a00a7', 'codex'),
|
||||
translate('auto.components.settings.commit.message.ai.search.82109d627d', 'source control'),
|
||||
translate('auto.components.settings.commit.message.ai.search.ee14a9e9f7', 'enabled')
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.commit.message.ai.search.c33cb1b982',
|
||||
'ai'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.commit.message.ai.search.127d512e75',
|
||||
'commit'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.commit.message.ai.search.93e5210da8',
|
||||
'message'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.commit.message.ai.search.8e9cc598d7',
|
||||
'generate'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.commit.message.ai.search.3766941527',
|
||||
'agent'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.commit.message.ai.search.f121bec167',
|
||||
'claude'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.commit.message.ai.search.542e1a00a7',
|
||||
'codex'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.commit.message.ai.search.82109d627d',
|
||||
'source control'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.commit.message.ai.search.ee14a9e9f7',
|
||||
'enabled'
|
||||
)
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -33,21 +61,66 @@ export const getCommitMessageAiPaneSearchEntries = createLocalizedCatalog(() =>
|
|||
'Agent, CLI arguments, and command template used by each Source Control AI button.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.commit.message.ai.search.3766941527', 'agent'),
|
||||
translate('auto.components.settings.commit.message.ai.search.0f29331fed', 'arguments'),
|
||||
translate('auto.components.settings.commit.message.ai.search.61117e57f3', 'args'),
|
||||
translate('auto.components.settings.commit.message.ai.search.57c851a68c', 'cli'),
|
||||
translate('auto.components.settings.commit.message.ai.search.f4731b22bf', 'command'),
|
||||
translate('auto.components.settings.commit.message.ai.search.8e0bcc5d99', 'model'),
|
||||
translate('auto.components.settings.commit.message.ai.search.b7d50da4d8', 'template'),
|
||||
translate('auto.components.settings.commit.message.ai.search.402f101af8', 'prompt'),
|
||||
translate('auto.components.settings.commit.message.ai.search.37c65bbb44', 'fix'),
|
||||
translate('auto.components.settings.commit.message.ai.search.c46e665f7e', 'checks'),
|
||||
translate('auto.components.settings.commit.message.ai.search.53e8504fb2', 'ci'),
|
||||
translate('auto.components.settings.commit.message.ai.search.d22a6459e4', 'conflicts'),
|
||||
translate('auto.components.settings.commit.message.ai.search.127d512e75', 'commit'),
|
||||
translate('auto.components.settings.commit.message.ai.search.110be48b81', 'pull request'),
|
||||
translate('auto.components.settings.commit.message.ai.search.d32936bb2a', 'branch')
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.commit.message.ai.search.3766941527',
|
||||
'agent'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.commit.message.ai.search.0f29331fed',
|
||||
'arguments'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.commit.message.ai.search.61117e57f3',
|
||||
'args'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.commit.message.ai.search.57c851a68c',
|
||||
'cli'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.commit.message.ai.search.f4731b22bf',
|
||||
'command'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.commit.message.ai.search.8e0bcc5d99',
|
||||
'model'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.commit.message.ai.search.b7d50da4d8',
|
||||
'template'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.commit.message.ai.search.402f101af8',
|
||||
'prompt'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.commit.message.ai.search.37c65bbb44',
|
||||
'fix'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.commit.message.ai.search.c46e665f7e',
|
||||
'checks'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.commit.message.ai.search.53e8504fb2',
|
||||
'ci'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.commit.message.ai.search.d22a6459e4',
|
||||
'conflicts'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.commit.message.ai.search.127d512e75',
|
||||
'commit'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.commit.message.ai.search.110be48b81',
|
||||
'pull request'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.commit.message.ai.search.d32936bb2a',
|
||||
'branch'
|
||||
)
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -60,12 +133,30 @@ export const getCommitMessageAiPaneSearchEntries = createLocalizedCatalog(() =>
|
|||
'Defaults used when the Create PR composer opens.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.commit.message.ai.search.110be48b81', 'pull request'),
|
||||
translate('auto.components.settings.commit.message.ai.search.b261c88609', 'pr'),
|
||||
translate('auto.components.settings.commit.message.ai.search.7e264b926b', 'draft'),
|
||||
translate('auto.components.settings.commit.message.ai.search.b7d50da4d8', 'template'),
|
||||
translate('auto.components.settings.commit.message.ai.search.8e9cc598d7', 'generate'),
|
||||
translate('auto.components.settings.commit.message.ai.search.181cdb0637', 'open')
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.commit.message.ai.search.110be48b81',
|
||||
'pull request'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.commit.message.ai.search.b261c88609',
|
||||
'pr'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.commit.message.ai.search.7e264b926b',
|
||||
'draft'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.commit.message.ai.search.b7d50da4d8',
|
||||
'template'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.commit.message.ai.search.8e9cc598d7',
|
||||
'generate'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.commit.message.ai.search.181cdb0637',
|
||||
'open'
|
||||
)
|
||||
]
|
||||
}
|
||||
])
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
import { translate } from '@/i18n/i18n'
|
||||
import { translateSearchKeyword } from './settings-search-keywords'
|
||||
import { createLocalizedCatalog } from '@/i18n/localized-catalog'
|
||||
|
||||
export const getComputerUsePaneSearchEntries = createLocalizedCatalog(() => [
|
||||
|
|
@ -9,12 +10,27 @@ export const getComputerUsePaneSearchEntries = createLocalizedCatalog(() => [
|
|||
'Allow agents to inspect screenshots and operate local apps when you ask.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.computer.use.search.fefb452f5b', 'computer use'),
|
||||
translate('auto.components.settings.computer.use.search.82f01c2d2c', 'accessibility'),
|
||||
translate('auto.components.settings.computer.use.search.26c1290d83', 'screen recording'),
|
||||
translate('auto.components.settings.computer.use.search.e27f8bafbf', 'screenshot'),
|
||||
translate('auto.components.settings.computer.use.search.798be54d7e', 'automation'),
|
||||
translate('auto.components.settings.computer.use.search.6e88da3508', 'skill')
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.computer.use.search.fefb452f5b',
|
||||
'computer use'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.computer.use.search.82f01c2d2c',
|
||||
'accessibility'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.computer.use.search.26c1290d83',
|
||||
'screen recording'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.computer.use.search.e27f8bafbf',
|
||||
'screenshot'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.computer.use.search.798be54d7e',
|
||||
'automation'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.computer.use.search.6e88da3508', 'skill')
|
||||
]
|
||||
}
|
||||
])
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
import { translate } from '@/i18n/i18n'
|
||||
import { translateSearchKeyword } from './settings-search-keywords'
|
||||
import { createLocalizedCatalog } from '@/i18n/localized-catalog'
|
||||
|
||||
export const getDeveloperPermissionsPaneSearchEntries = createLocalizedCatalog(() => [
|
||||
|
|
@ -12,10 +13,22 @@ export const getDeveloperPermissionsPaneSearchEntries = createLocalizedCatalog((
|
|||
'macOS permissions for terminal-launched developer tools.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.developer.permissions.search.a98aa11a9c', 'permissions'),
|
||||
translate('auto.components.settings.developer.permissions.search.2270ccff3f', 'privacy'),
|
||||
translate('auto.components.settings.developer.permissions.search.0c13b249e3', 'tcc'),
|
||||
translate('auto.components.settings.developer.permissions.search.6db4fca386', 'macos'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.developer.permissions.search.a98aa11a9c',
|
||||
'permissions'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.developer.permissions.search.2270ccff3f',
|
||||
'privacy'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.developer.permissions.search.0c13b249e3',
|
||||
'tcc'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.developer.permissions.search.6db4fca386',
|
||||
'macos'
|
||||
),
|
||||
translate(
|
||||
'auto.components.settings.developer.permissions.search.4e225e7c56',
|
||||
'developer tools'
|
||||
|
|
@ -32,14 +45,38 @@ export const getDeveloperPermissionsPaneSearchEntries = createLocalizedCatalog((
|
|||
'Allow voice, transcription, webcam, and media capture tools.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.developer.permissions.search.ed7c12bdb4', 'microphone'),
|
||||
translate('auto.components.settings.developer.permissions.search.259b829b84', 'camera'),
|
||||
translate('auto.components.settings.developer.permissions.search.af122938a3', 'voice'),
|
||||
translate('auto.components.settings.developer.permissions.search.b192432ef0', 'audio'),
|
||||
translate('auto.components.settings.developer.permissions.search.a765112513', 'video'),
|
||||
translate('auto.components.settings.developer.permissions.search.f061f08b7b', 'sox'),
|
||||
translate('auto.components.settings.developer.permissions.search.1e6e27b202', 'ffmpeg'),
|
||||
translate('auto.components.settings.developer.permissions.search.00e954319e', 'whisper')
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.developer.permissions.search.ed7c12bdb4',
|
||||
'microphone'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.developer.permissions.search.259b829b84',
|
||||
'camera'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.developer.permissions.search.af122938a3',
|
||||
'voice'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.developer.permissions.search.b192432ef0',
|
||||
'audio'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.developer.permissions.search.a765112513',
|
||||
'video'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.developer.permissions.search.f061f08b7b',
|
||||
'sox'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.developer.permissions.search.1e6e27b202',
|
||||
'ffmpeg'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.developer.permissions.search.00e954319e',
|
||||
'whisper'
|
||||
)
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -60,9 +97,18 @@ export const getDeveloperPermissionsPaneSearchEntries = createLocalizedCatalog((
|
|||
'auto.components.settings.developer.permissions.search.08f8039ca9',
|
||||
'accessibility'
|
||||
),
|
||||
translate('auto.components.settings.developer.permissions.search.0a467b750e', 'screenshot'),
|
||||
translate('auto.components.settings.developer.permissions.search.5610022e1e', 'automation'),
|
||||
translate('auto.components.settings.developer.permissions.search.7f145a3984', 'window')
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.developer.permissions.search.0a467b750e',
|
||||
'screenshot'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.developer.permissions.search.5610022e1e',
|
||||
'automation'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.developer.permissions.search.7f145a3984',
|
||||
'window'
|
||||
)
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -79,10 +125,22 @@ export const getDeveloperPermissionsPaneSearchEntries = createLocalizedCatalog((
|
|||
'auto.components.settings.developer.permissions.search.c10e36cbd1',
|
||||
'full disk access'
|
||||
),
|
||||
translate('auto.components.settings.developer.permissions.search.4438f81bfa', 'documents'),
|
||||
translate('auto.components.settings.developer.permissions.search.a0c19119fb', 'downloads'),
|
||||
translate('auto.components.settings.developer.permissions.search.ce07159ff5', 'desktop'),
|
||||
translate('auto.components.settings.developer.permissions.search.3e0131e45d', 'icloud')
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.developer.permissions.search.4438f81bfa',
|
||||
'documents'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.developer.permissions.search.a0c19119fb',
|
||||
'downloads'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.developer.permissions.search.ce07159ff5',
|
||||
'desktop'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.developer.permissions.search.3e0131e45d',
|
||||
'icloud'
|
||||
)
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -99,11 +157,26 @@ export const getDeveloperPermissionsPaneSearchEntries = createLocalizedCatalog((
|
|||
'auto.components.settings.developer.permissions.search.fa3239cd42',
|
||||
'local network'
|
||||
),
|
||||
translate('auto.components.settings.developer.permissions.search.c4a4a02ea4', 'usb'),
|
||||
translate('auto.components.settings.developer.permissions.search.e3fbc48083', 'bluetooth'),
|
||||
translate('auto.components.settings.developer.permissions.search.78a10b826f', 'bonjour'),
|
||||
translate('auto.components.settings.developer.permissions.search.11653d3f42', 'mdns'),
|
||||
translate('auto.components.settings.developer.permissions.search.6c82846f66', 'device')
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.developer.permissions.search.c4a4a02ea4',
|
||||
'usb'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.developer.permissions.search.e3fbc48083',
|
||||
'bluetooth'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.developer.permissions.search.78a10b826f',
|
||||
'bonjour'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.developer.permissions.search.11653d3f42',
|
||||
'mdns'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.developer.permissions.search.6c82846f66',
|
||||
'device'
|
||||
)
|
||||
]
|
||||
}
|
||||
])
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
import type { SettingsSearchEntry } from './settings-search'
|
||||
import { createLocalizedCatalog } from '@/i18n/localized-catalog'
|
||||
import { translate } from '@/i18n/i18n'
|
||||
import { translateSearchKeyword } from './settings-search-keywords'
|
||||
|
||||
export const getExperimentalPaneSearchEntries = createLocalizedCatalog(
|
||||
(): SettingsSearchEntry[] => [
|
||||
|
|
@ -11,14 +12,35 @@ export const getExperimentalPaneSearchEntries = createLocalizedCatalog(
|
|||
'Floating animated pet in the bottom-right corner.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.experimental.search.0d24759f14', 'experimental'),
|
||||
translate('auto.components.settings.experimental.search.051203d37c', 'pet'),
|
||||
translate('auto.components.settings.experimental.search.b54cea709b', 'sidekick'),
|
||||
translate('auto.components.settings.experimental.search.2a33975d72', 'mascot'),
|
||||
translate('auto.components.settings.experimental.search.9f5609bfb8', 'overlay'),
|
||||
translate('auto.components.settings.experimental.search.65df471ab2', 'animated'),
|
||||
translate('auto.components.settings.experimental.search.791fefc0b0', 'corner'),
|
||||
translate('auto.components.settings.experimental.search.9af7a518db', 'character')
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.experimental.search.0d24759f14',
|
||||
'experimental'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.experimental.search.051203d37c', 'pet'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.experimental.search.b54cea709b',
|
||||
'sidekick'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.experimental.search.2a33975d72',
|
||||
'mascot'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.experimental.search.9f5609bfb8',
|
||||
'overlay'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.experimental.search.65df471ab2',
|
||||
'animated'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.experimental.search.791fefc0b0',
|
||||
'corner'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.experimental.search.9af7a518db',
|
||||
'character'
|
||||
)
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -28,16 +50,46 @@ export const getExperimentalPaneSearchEntries = createLocalizedCatalog(
|
|||
'Threaded left-sidebar feed for agent completions and blocking states.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.experimental.search.0d24759f14', 'experimental'),
|
||||
translate('auto.components.settings.experimental.search.fa72e71f05', 'agents'),
|
||||
translate('auto.components.settings.experimental.search.92a9357d1f', 'agents view'),
|
||||
translate('auto.components.settings.experimental.search.244a0ecd3d', 'activity'),
|
||||
translate('auto.components.settings.experimental.search.d01b3882ba', 'notifications'),
|
||||
translate('auto.components.settings.experimental.search.10b52f79c1', 'worktrees'),
|
||||
translate('auto.components.settings.experimental.search.ca5d1f3f46', 'timeline'),
|
||||
translate('auto.components.settings.experimental.search.7b79081695', 'unread'),
|
||||
translate('auto.components.settings.experimental.search.8facf10138', 'bell'),
|
||||
translate('auto.components.settings.experimental.search.fe5688b761', 'sidebar')
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.experimental.search.0d24759f14',
|
||||
'experimental'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.experimental.search.fa72e71f05',
|
||||
'agents'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.experimental.search.92a9357d1f',
|
||||
'agents view'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.experimental.search.244a0ecd3d',
|
||||
'activity'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.experimental.search.d01b3882ba',
|
||||
'notifications'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.experimental.search.10b52f79c1',
|
||||
'worktrees'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.experimental.search.ca5d1f3f46',
|
||||
'timeline'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.experimental.search.7b79081695',
|
||||
'unread'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.experimental.search.8facf10138',
|
||||
'bell'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.experimental.search.fe5688b761',
|
||||
'sidebar'
|
||||
)
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -50,16 +102,46 @@ export const getExperimentalPaneSearchEntries = createLocalizedCatalog(
|
|||
'Persistent pane highlight for terminal bell and agent-completion events.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.experimental.search.0d24759f14', 'experimental'),
|
||||
translate('auto.components.settings.experimental.search.9bb3bd5098', 'terminal'),
|
||||
translate('auto.components.settings.experimental.search.01567f19ca', 'attention'),
|
||||
translate('auto.components.settings.experimental.search.268e99d957', 'highlight'),
|
||||
translate('auto.components.settings.experimental.search.edc49480a1', 'pane'),
|
||||
translate('auto.components.settings.experimental.search.8facf10138', 'bell'),
|
||||
translate('auto.components.settings.experimental.search.7695fd30e9', 'notification'),
|
||||
translate('auto.components.settings.experimental.search.5f067ba0f9', 'agent'),
|
||||
translate('auto.components.settings.experimental.search.f10d307468', 'completion'),
|
||||
translate('auto.components.settings.experimental.search.7b79081695', 'unread')
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.experimental.search.0d24759f14',
|
||||
'experimental'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.experimental.search.9bb3bd5098',
|
||||
'terminal'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.experimental.search.01567f19ca',
|
||||
'attention'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.experimental.search.268e99d957',
|
||||
'highlight'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.experimental.search.edc49480a1',
|
||||
'pane'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.experimental.search.8facf10138',
|
||||
'bell'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.experimental.search.7695fd30e9',
|
||||
'notification'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.experimental.search.5f067ba0f9',
|
||||
'agent'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.experimental.search.f10d307468',
|
||||
'completion'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.experimental.search.7b79081695',
|
||||
'unread'
|
||||
)
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -72,16 +154,43 @@ export const getExperimentalPaneSearchEntries = createLocalizedCatalog(
|
|||
'Automatically symlink configured files or folders into newly created worktrees so shared state (envs, caches, installs) stays connected.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.experimental.search.0d24759f14', 'experimental'),
|
||||
translate('auto.components.settings.experimental.search.d23ae13990', 'worktree'),
|
||||
translate('auto.components.settings.experimental.search.10b52f79c1', 'worktrees'),
|
||||
translate('auto.components.settings.experimental.search.c387565812', 'symlink'),
|
||||
translate('auto.components.settings.experimental.search.bff1ff7768', 'symlinks'),
|
||||
translate('auto.components.settings.experimental.search.3028f0bd3a', 'link'),
|
||||
translate('auto.components.settings.experimental.search.f082788cfe', 'links'),
|
||||
translate('auto.components.settings.experimental.search.3021571c30', 'shared'),
|
||||
translate('auto.components.settings.experimental.search.4ad605f222', 'env'),
|
||||
translate('auto.components.settings.experimental.search.44c7f209d5', 'node_modules')
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.experimental.search.0d24759f14',
|
||||
'experimental'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.experimental.search.d23ae13990',
|
||||
'worktree'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.experimental.search.10b52f79c1',
|
||||
'worktrees'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.experimental.search.c387565812',
|
||||
'symlink'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.experimental.search.bff1ff7768',
|
||||
'symlinks'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.experimental.search.3028f0bd3a',
|
||||
'link'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.experimental.search.f082788cfe',
|
||||
'links'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.experimental.search.3021571c30',
|
||||
'shared'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.experimental.search.4ad605f222', 'env'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.experimental.search.44c7f209d5',
|
||||
'node_modules'
|
||||
)
|
||||
]
|
||||
}
|
||||
]
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
import { translate } from '@/i18n/i18n'
|
||||
import { translateSearchKeyword } from './settings-search-keywords'
|
||||
import { createLocalizedCatalog } from '@/i18n/localized-catalog'
|
||||
|
||||
export const getFloatingWorkspaceSearchEntries = createLocalizedCatalog(() => [
|
||||
|
|
@ -20,20 +21,50 @@ export const getFloatingWorkspaceSearchEntries = createLocalizedCatalog(() => [
|
|||
'auto.components.settings.floating.workspace.search.6f183fa1b9',
|
||||
'floating terminal'
|
||||
),
|
||||
translate('auto.components.settings.floating.workspace.search.ebeedb2f6a', 'quick terminal'),
|
||||
translate('auto.components.settings.floating.workspace.search.2b5efa55c9', 'global'),
|
||||
translate('auto.components.settings.floating.workspace.search.6410fe83d8', 'terminal'),
|
||||
translate('auto.components.settings.floating.workspace.search.49db74a92d', 'browser'),
|
||||
translate('auto.components.settings.floating.workspace.search.884e5e6132', 'markdown'),
|
||||
translate('auto.components.settings.floating.workspace.search.156ffeee08', 'note'),
|
||||
translate('auto.components.settings.floating.workspace.search.52db6e3baf', 'notes'),
|
||||
translate('auto.components.settings.floating.workspace.search.a38bfc3f77', 'quick panel'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.floating.workspace.search.ebeedb2f6a',
|
||||
'quick terminal'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.floating.workspace.search.2b5efa55c9',
|
||||
'global'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.floating.workspace.search.6410fe83d8',
|
||||
'terminal'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.floating.workspace.search.49db74a92d',
|
||||
'browser'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.floating.workspace.search.884e5e6132',
|
||||
'markdown'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.floating.workspace.search.156ffeee08',
|
||||
'note'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.floating.workspace.search.52db6e3baf',
|
||||
'notes'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.floating.workspace.search.a38bfc3f77',
|
||||
'quick panel'
|
||||
),
|
||||
translate(
|
||||
'auto.components.settings.floating.workspace.search.6765b85e48',
|
||||
'launch directory'
|
||||
),
|
||||
translate('auto.components.settings.floating.workspace.search.a452146574', 'toggle button'),
|
||||
translate('auto.components.settings.floating.workspace.search.94f4d013c8', 'status bar')
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.floating.workspace.search.a452146574',
|
||||
'toggle button'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.floating.workspace.search.94f4d013c8',
|
||||
'status bar'
|
||||
)
|
||||
]
|
||||
}
|
||||
])
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
import { translate } from '@/i18n/i18n'
|
||||
import { translateSearchKeyword } from './settings-search-keywords'
|
||||
import { createLocalizedCatalog } from '@/i18n/localized-catalog'
|
||||
|
||||
export const getGeneralEditorSearchEntries = createLocalizedCatalog(() => [
|
||||
|
|
@ -9,8 +10,8 @@ export const getGeneralEditorSearchEntries = createLocalizedCatalog(() => [
|
|||
'Save editor and editable diff changes automatically after a short pause.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.general.search.86f54575c7', 'autosave'),
|
||||
translate('auto.components.settings.general.search.4469b6fa4e', 'save')
|
||||
...translateSearchKeyword('auto.components.settings.general.search.86f54575c7', 'autosave'),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.4469b6fa4e', 'save')
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -20,9 +21,12 @@ export const getGeneralEditorSearchEntries = createLocalizedCatalog(() => [
|
|||
'How long Orca waits after your last edit before saving automatically.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.general.search.86f54575c7', 'autosave'),
|
||||
translate('auto.components.settings.general.search.146728ac2c', 'delay'),
|
||||
translate('auto.components.settings.general.search.b2799ba622', 'milliseconds')
|
||||
...translateSearchKeyword('auto.components.settings.general.search.86f54575c7', 'autosave'),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.146728ac2c', 'delay'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.general.search.b2799ba622',
|
||||
'milliseconds'
|
||||
)
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -32,11 +36,14 @@ export const getGeneralEditorSearchEntries = createLocalizedCatalog(() => [
|
|||
'Preferred presentation format for showing git diffs by default.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.general.search.3b5733573e', 'diff'),
|
||||
translate('auto.components.settings.general.search.2b463f0bf9', 'view'),
|
||||
translate('auto.components.settings.general.search.0a5fa65926', 'inline'),
|
||||
translate('auto.components.settings.general.search.233f7e2f37', 'side-by-side'),
|
||||
translate('auto.components.settings.general.search.be24c7cd67', 'split')
|
||||
...translateSearchKeyword('auto.components.settings.general.search.3b5733573e', 'diff'),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.2b463f0bf9', 'view'),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.0a5fa65926', 'inline'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.general.search.233f7e2f37',
|
||||
'side-by-side'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.be24c7cd67', 'split')
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -49,11 +56,14 @@ export const getGeneralEditorSearchEntries = createLocalizedCatalog(() => [
|
|||
'Show or hide the file tree when opening combined diff views.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.general.search.3b5733573e', 'diff'),
|
||||
translate('auto.components.settings.general.search.2f42852568', 'tree'),
|
||||
translate('auto.components.settings.general.search.0a02059549', 'file tree'),
|
||||
translate('auto.components.settings.general.search.973ed6bfbf', 'combined diff'),
|
||||
translate('auto.components.settings.general.search.19baae651b', 'sidebar')
|
||||
...translateSearchKeyword('auto.components.settings.general.search.3b5733573e', 'diff'),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.2f42852568', 'tree'),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.0a02059549', 'file tree'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.general.search.973ed6bfbf',
|
||||
'combined diff'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.19baae651b', 'sidebar')
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -63,10 +73,10 @@ export const getGeneralEditorSearchEntries = createLocalizedCatalog(() => [
|
|||
'Show the minimap overview when editing a file.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.general.search.9c72990db8', 'minimap'),
|
||||
translate('auto.components.settings.general.search.e3919429c0', 'overview'),
|
||||
translate('auto.components.settings.general.search.3ca5ab78a5', 'code'),
|
||||
translate('auto.components.settings.general.search.a0014961ae', 'scroll')
|
||||
...translateSearchKeyword('auto.components.settings.general.search.9c72990db8', 'minimap'),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.e3919429c0', 'overview'),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.3ca5ab78a5', 'code'),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.a0014961ae', 'scroll')
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -76,11 +86,14 @@ export const getGeneralEditorSearchEntries = createLocalizedCatalog(() => [
|
|||
'Show local markdown review note controls in rich editor mode.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.general.search.d05f629d2c', 'markdown'),
|
||||
translate('auto.components.settings.general.search.4dd5684836', 'review'),
|
||||
translate('auto.components.settings.general.search.1ff67ba40c', 'notes'),
|
||||
translate('auto.components.settings.general.search.22572e99c1', 'annotations'),
|
||||
translate('auto.components.settings.general.search.baa263d6d8', 'agents')
|
||||
...translateSearchKeyword('auto.components.settings.general.search.d05f629d2c', 'markdown'),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.4dd5684836', 'review'),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.1ff67ba40c', 'notes'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.general.search.22572e99c1',
|
||||
'annotations'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.baa263d6d8', 'agents')
|
||||
]
|
||||
}
|
||||
])
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
import type { SettingsSearchEntry } from './settings-search'
|
||||
import { getGeneralEditorSearchEntries } from './general-editor-search'
|
||||
import { translate } from '@/i18n/i18n'
|
||||
import { searchKeywords, translateSearchKeyword } from './settings-search-keywords'
|
||||
import { createLocalizedCatalog } from '@/i18n/localized-catalog'
|
||||
|
||||
export { getGeneralEditorSearchEntries } from './general-editor-search'
|
||||
|
|
@ -13,10 +14,10 @@ export const getGeneralWorkspaceSearchEntries = createLocalizedCatalog(() => [
|
|||
'Root directory where workspace folders are created.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.general.search.7baf524b04', 'workspace'),
|
||||
translate('auto.components.settings.general.search.7887a2c262', 'folder'),
|
||||
translate('auto.components.settings.general.search.fb4f338a3d', 'path'),
|
||||
translate('auto.components.settings.general.search.df10666259', 'worktree')
|
||||
...translateSearchKeyword('auto.components.settings.general.search.7baf524b04', 'workspace'),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.7887a2c262', 'folder'),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.fb4f338a3d', 'path'),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.df10666259', 'worktree')
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -26,9 +27,9 @@ export const getGeneralWorkspaceSearchEntries = createLocalizedCatalog(() => [
|
|||
'Create workspaces inside a repo-named subfolder.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.general.search.ec5049e510', 'nested'),
|
||||
translate('auto.components.settings.general.search.9bde064915', 'subfolder'),
|
||||
translate('auto.components.settings.general.search.93f6ec5e70', 'directory')
|
||||
...translateSearchKeyword('auto.components.settings.general.search.ec5049e510', 'nested'),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.9bde064915', 'subfolder'),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.93f6ec5e70', 'directory')
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -41,12 +42,12 @@ export const getGeneralWorkspaceSearchEntries = createLocalizedCatalog(() => [
|
|||
'Show a confirmation dialog before deleting a workspace.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.general.search.84c67d0108', 'delete'),
|
||||
translate('auto.components.settings.general.search.df10666259', 'worktree'),
|
||||
translate('auto.components.settings.general.search.9f8558233a', 'confirm'),
|
||||
translate('auto.components.settings.general.search.ca86dd6e27', 'dialog'),
|
||||
translate('auto.components.settings.general.search.7e9b556873', 'skip'),
|
||||
translate('auto.components.settings.general.search.0efc9d96ad', 'prompt')
|
||||
...translateSearchKeyword('auto.components.settings.general.search.84c67d0108', 'delete'),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.df10666259', 'worktree'),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.9f8558233a', 'confirm'),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.ca86dd6e27', 'dialog'),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.7e9b556873', 'skip'),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.0efc9d96ad', 'prompt')
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -59,12 +60,12 @@ export const getGeneralWorkspaceSearchEntries = createLocalizedCatalog(() => [
|
|||
'Show a confirmation dialog before deleting an automation and its run history.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.general.search.84c67d0108', 'delete'),
|
||||
translate('auto.components.settings.general.search.7edf4f69e2', 'automation'),
|
||||
translate('auto.components.settings.general.search.9f8558233a', 'confirm'),
|
||||
translate('auto.components.settings.general.search.ca86dd6e27', 'dialog'),
|
||||
translate('auto.components.settings.general.search.7e9b556873', 'skip'),
|
||||
translate('auto.components.settings.general.search.0efc9d96ad', 'prompt')
|
||||
...translateSearchKeyword('auto.components.settings.general.search.84c67d0108', 'delete'),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.7edf4f69e2', 'automation'),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.9f8558233a', 'confirm'),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.ca86dd6e27', 'dialog'),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.7e9b556873', 'skip'),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.0efc9d96ad', 'prompt')
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -74,16 +75,19 @@ export const getGeneralWorkspaceSearchEntries = createLocalizedCatalog(() => [
|
|||
"Choose apps available from a workspace's Open in menu."
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.general.search.b8093e9a93', 'open in'),
|
||||
translate('auto.components.settings.general.search.5a9df5566f', 'open menu'),
|
||||
translate('auto.components.settings.general.search.e1ee631696', 'editor'),
|
||||
translate('auto.components.settings.general.search.8fb00fcd05', 'launcher'),
|
||||
translate('auto.components.settings.general.search.0cb3d94f00', 'cursor'),
|
||||
translate('auto.components.settings.general.search.ebf8f056b5', 'zed'),
|
||||
translate('auto.components.settings.general.search.dbeb1f348e', 'command'),
|
||||
translate('auto.components.settings.general.search.68d03d9980', 'vscode'),
|
||||
translate('auto.components.settings.general.search.c9d9636f24', 'finder'),
|
||||
translate('auto.components.settings.general.search.6c2ce8457c', 'file explorer')
|
||||
...translateSearchKeyword('auto.components.settings.general.search.b8093e9a93', 'open in'),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.5a9df5566f', 'open menu'),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.e1ee631696', 'editor'),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.8fb00fcd05', 'launcher'),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.0cb3d94f00', 'cursor'),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.ebf8f056b5', 'zed'),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.dbeb1f348e', 'command'),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.68d03d9980', 'vscode'),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.c9d9636f24', 'finder'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.general.search.6c2ce8457c',
|
||||
'file explorer'
|
||||
)
|
||||
]
|
||||
}
|
||||
])
|
||||
|
|
@ -96,12 +100,15 @@ export const getGeneralNetworkSearchEntries = createLocalizedCatalog(() => [
|
|||
'Proxy URL for Orca network requests and local terminal children.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.general.search.20b711ac9e', 'proxy'),
|
||||
translate('auto.components.settings.general.search.8f03d44672', 'http_proxy'),
|
||||
translate('auto.components.settings.general.search.b9096a44cf', 'https_proxy'),
|
||||
translate('auto.components.settings.general.search.c56cb6f1c2', 'network'),
|
||||
translate('auto.components.settings.general.search.9da6c875e5', 'dock'),
|
||||
translate('auto.components.settings.general.search.e55d62dfa4', 'launchpad')
|
||||
...translateSearchKeyword('auto.components.settings.general.search.20b711ac9e', 'proxy'),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.8f03d44672', 'http_proxy'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.general.search.b9096a44cf',
|
||||
'https_proxy'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.c56cb6f1c2', 'network'),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.9da6c875e5', 'dock'),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.e55d62dfa4', 'launchpad')
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -111,11 +118,11 @@ export const getGeneralNetworkSearchEntries = createLocalizedCatalog(() => [
|
|||
'Hosts that should bypass the configured HTTP proxy.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.general.search.20b711ac9e', 'proxy'),
|
||||
translate('auto.components.settings.general.search.3a73054565', 'bypass'),
|
||||
translate('auto.components.settings.general.search.91a46caafc', 'no_proxy'),
|
||||
translate('auto.components.settings.general.search.3566fce83f', 'localhost'),
|
||||
translate('auto.components.settings.general.search.c56cb6f1c2', 'network')
|
||||
...translateSearchKeyword('auto.components.settings.general.search.20b711ac9e', 'proxy'),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.3a73054565', 'bypass'),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.91a46caafc', 'no_proxy'),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.3566fce83f', 'localhost'),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.c56cb6f1c2', 'network')
|
||||
]
|
||||
}
|
||||
])
|
||||
|
|
@ -128,14 +135,17 @@ export const getGeneralNavigationSearchEntries = createLocalizedCatalog(() => [
|
|||
'Recent or tab strip.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.general.search.ca812803ea', 'recent tab order'),
|
||||
translate('auto.components.settings.general.search.2a254b725e', 'tab'),
|
||||
translate('auto.components.settings.general.search.fe62b3f09f', 'ctrl'),
|
||||
translate('auto.components.settings.general.search.750420dd9a', 'control'),
|
||||
translate('auto.components.settings.general.search.54ba13831a', 'recent'),
|
||||
translate('auto.components.settings.general.search.12ecc640a8', 'mru'),
|
||||
translate('auto.components.settings.general.search.f8f0ac213a', 'sequential'),
|
||||
translate('auto.components.settings.general.search.fb84767421', 'switch')
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.general.search.ca812803ea',
|
||||
'recent tab order'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.2a254b725e', 'tab'),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.fe62b3f09f', 'ctrl'),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.750420dd9a', 'control'),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.54ba13831a', 'recent'),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.12ecc640a8', 'mru'),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.f8f0ac213a', 'sequential'),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.fb84767421', 'switch')
|
||||
]
|
||||
}
|
||||
])
|
||||
|
|
@ -148,13 +158,21 @@ export const getGeneralCliSearchEntries = createLocalizedCatalog(() => [
|
|||
'Register or remove the Orca CLI command.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.general.search.924a660a78', 'cli'),
|
||||
translate('auto.components.settings.general.search.fb4f338a3d', 'path'),
|
||||
translate('auto.components.settings.general.search.88d3df9ce9', 'terminal'),
|
||||
translate('auto.components.settings.general.search.dbeb1f348e', 'command'),
|
||||
translate('auto.components.settings.general.search.0a00691c06', 'shell command')
|
||||
...translateSearchKeyword('auto.components.settings.general.search.924a660a78', 'cli'),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.fb4f338a3d', 'path'),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.88d3df9ce9', 'terminal'),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.dbeb1f348e', 'command'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.general.search.0a00691c06',
|
||||
'shell command'
|
||||
)
|
||||
],
|
||||
cmdJKeywords: ['cli', 'path', 'command', 'shell command'],
|
||||
cmdJKeywords: searchKeywords([
|
||||
{ key: 'auto.components.settings.general.search.924a660a78', fallback: 'cli' },
|
||||
{ key: 'auto.components.settings.general.search.fb4f338a3d', fallback: 'path' },
|
||||
{ key: 'auto.components.settings.general.search.dbeb1f348e', fallback: 'command' },
|
||||
{ key: 'auto.components.settings.general.search.0a00691c06', fallback: 'shell command' }
|
||||
]),
|
||||
targetSectionId: 'cli'
|
||||
},
|
||||
{
|
||||
|
|
@ -164,9 +182,9 @@ export const getGeneralCliSearchEntries = createLocalizedCatalog(() => [
|
|||
'Install the Orca skill so agents know to use the Orca CLI.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.general.search.bda108e66c', 'skill'),
|
||||
translate('auto.components.settings.general.search.baa263d6d8', 'agents'),
|
||||
translate('auto.components.settings.general.search.6382fe9724', 'npx')
|
||||
...translateSearchKeyword('auto.components.settings.general.search.bda108e66c', 'skill'),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.baa263d6d8', 'agents'),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.6382fe9724', 'npx')
|
||||
]
|
||||
}
|
||||
])
|
||||
|
|
@ -179,10 +197,13 @@ export const getGeneralUpdateSearchEntries = createLocalizedCatalog(() => [
|
|||
'Check for app updates and install a newer Orca version.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.general.search.f89a94773c', 'update'),
|
||||
translate('auto.components.settings.general.search.9e86ccd05c', 'version'),
|
||||
translate('auto.components.settings.general.search.c9d8c1ce66', 'release notes'),
|
||||
translate('auto.components.settings.general.search.e49e739a59', 'download')
|
||||
...translateSearchKeyword('auto.components.settings.general.search.f89a94773c', 'update'),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.9e86ccd05c', 'version'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.general.search.c9d8c1ce66',
|
||||
'release notes'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.e49e739a59', 'download')
|
||||
]
|
||||
}
|
||||
])
|
||||
|
|
@ -195,13 +216,13 @@ export const getGeneralCacheTimerSearchEntries = createLocalizedCatalog(() => [
|
|||
'Countdown timer showing time until prompt cache expires (Claude agents).'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.general.search.b2601a778c', 'cache'),
|
||||
translate('auto.components.settings.general.search.939b80f5fd', 'timer'),
|
||||
translate('auto.components.settings.general.search.0efc9d96ad', 'prompt'),
|
||||
translate('auto.components.settings.general.search.585beac3f8', 'ttl'),
|
||||
translate('auto.components.settings.general.search.95b63edde7', 'claude'),
|
||||
translate('auto.components.settings.general.search.660528b048', 'cost'),
|
||||
translate('auto.components.settings.general.search.3462308bd3', 'tokens')
|
||||
...translateSearchKeyword('auto.components.settings.general.search.b2601a778c', 'cache'),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.939b80f5fd', 'timer'),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.0efc9d96ad', 'prompt'),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.585beac3f8', 'ttl'),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.95b63edde7', 'claude'),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.660528b048', 'cost'),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.3462308bd3', 'tokens')
|
||||
]
|
||||
}
|
||||
])
|
||||
|
|
@ -214,19 +235,22 @@ export const getGeneralAgentSearchEntries = createLocalizedCatalog(() => [
|
|||
'Pre-select an AI coding agent in the new-workspace composer.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.general.search.8ea37a05bc', 'agent'),
|
||||
translate('auto.components.settings.general.search.41c2f9a025', 'default'),
|
||||
translate('auto.components.settings.general.search.95b63edde7', 'claude'),
|
||||
translate('auto.components.settings.general.search.aea7d2cccb', 'openclaude'),
|
||||
translate('auto.components.settings.general.search.5baf51c4d9', 'open claude'),
|
||||
translate('auto.components.settings.general.search.27d9b996ba', 'codex'),
|
||||
translate('auto.components.settings.general.search.882c4896fd', 'opencode'),
|
||||
translate('auto.components.settings.general.search.9b0bc30160', 'pi'),
|
||||
translate('auto.components.settings.general.search.5fdf1dc2d1', 'omp'),
|
||||
translate('auto.components.settings.general.search.3c30fe2d51', 'gemini'),
|
||||
translate('auto.components.settings.general.search.f472e97440', 'aider'),
|
||||
translate('auto.components.settings.general.search.5d9ba08673', 'copilot'),
|
||||
translate('auto.components.settings.general.search.c61b14be7c', 'grok')
|
||||
...translateSearchKeyword('auto.components.settings.general.search.8ea37a05bc', 'agent'),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.41c2f9a025', 'default'),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.95b63edde7', 'claude'),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.aea7d2cccb', 'openclaude'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.general.search.5baf51c4d9',
|
||||
'open claude'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.27d9b996ba', 'codex'),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.882c4896fd', 'opencode'),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.9b0bc30160', 'pi'),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.5fdf1dc2d1', 'omp'),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.3c30fe2d51', 'gemini'),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.f472e97440', 'aider'),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.5d9ba08673', 'copilot'),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.c61b14be7c', 'grok')
|
||||
]
|
||||
}
|
||||
])
|
||||
|
|
@ -239,11 +263,11 @@ export const getGeneralSupportSearchEntries = createLocalizedCatalog(() => [
|
|||
'Support the project with a GitHub star via the gh CLI.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.general.search.e4fb4516d0', 'star'),
|
||||
translate('auto.components.settings.general.search.06ea5a69a6', 'github'),
|
||||
translate('auto.components.settings.general.search.b65665703a', 'support'),
|
||||
translate('auto.components.settings.general.search.e6b01c8e30', 'feedback'),
|
||||
translate('auto.components.settings.general.search.bdfb6dc21b', 'like')
|
||||
...translateSearchKeyword('auto.components.settings.general.search.e4fb4516d0', 'star'),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.06ea5a69a6', 'github'),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.b65665703a', 'support'),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.e6b01c8e30', 'feedback'),
|
||||
...translateSearchKeyword('auto.components.settings.general.search.bdfb6dc21b', 'like')
|
||||
]
|
||||
}
|
||||
])
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
import { getAutoRenameBranchSearchEntries } from './auto-rename-branch-search'
|
||||
import { translate } from '@/i18n/i18n'
|
||||
import { translateSearchKeyword } from './settings-search-keywords'
|
||||
import { createLocalizedCatalog } from '@/i18n/localized-catalog'
|
||||
|
||||
export const getGitPaneSearchEntries = createLocalizedCatalog(() => [
|
||||
|
|
@ -10,9 +11,9 @@ export const getGitPaneSearchEntries = createLocalizedCatalog(() => [
|
|||
'Prefix added to branch names when creating worktrees.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.git.search.f83c8937c4', 'branch naming'),
|
||||
translate('auto.components.settings.git.search.1d2fae1fa2', 'git username'),
|
||||
translate('auto.components.settings.git.search.769ddd7f81', 'custom')
|
||||
...translateSearchKeyword('auto.components.settings.git.search.f83c8937c4', 'branch naming'),
|
||||
...translateSearchKeyword('auto.components.settings.git.search.1d2fae1fa2', 'git username'),
|
||||
...translateSearchKeyword('auto.components.settings.git.search.769ddd7f81', 'custom')
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -25,18 +26,21 @@ export const getGitPaneSearchEntries = createLocalizedCatalog(() => [
|
|||
'When you create a workspace, Orca refreshes the remote base and safely fast-forwards your matching local branch, such as main or master. This keeps commands like git diff main...HEAD from comparing against stale history. Orca skips the update if that branch has uncommitted changes or local-only commits.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.git.search.e3e9adde59', 'main'),
|
||||
translate('auto.components.settings.git.search.28192e3a63', 'master'),
|
||||
translate('auto.components.settings.git.search.564942ffc5', 'origin/main'),
|
||||
translate('auto.components.settings.git.search.6ee3cfff02', 'git diff'),
|
||||
translate('auto.components.settings.git.search.c41e345153', 'behind main'),
|
||||
translate('auto.components.settings.git.search.0849b571fe', 'up to date'),
|
||||
translate('auto.components.settings.git.search.d9f70d51a0', 'stale main'),
|
||||
translate('auto.components.settings.git.search.ab0e22c9f6', 'refresh local main'),
|
||||
translate('auto.components.settings.git.search.de06e9d105', 'base ref'),
|
||||
translate('auto.components.settings.git.search.bae91effdd', 'fresh base'),
|
||||
translate('auto.components.settings.git.search.0c75583ca9', 'safely'),
|
||||
translate('auto.components.settings.git.search.035134fcd9', 'worktree')
|
||||
...translateSearchKeyword('auto.components.settings.git.search.e3e9adde59', 'main'),
|
||||
...translateSearchKeyword('auto.components.settings.git.search.28192e3a63', 'master'),
|
||||
...translateSearchKeyword('auto.components.settings.git.search.564942ffc5', 'origin/main'),
|
||||
...translateSearchKeyword('auto.components.settings.git.search.6ee3cfff02', 'git diff'),
|
||||
...translateSearchKeyword('auto.components.settings.git.search.c41e345153', 'behind main'),
|
||||
...translateSearchKeyword('auto.components.settings.git.search.0849b571fe', 'up to date'),
|
||||
...translateSearchKeyword('auto.components.settings.git.search.d9f70d51a0', 'stale main'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.git.search.ab0e22c9f6',
|
||||
'refresh local main'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.git.search.de06e9d105', 'base ref'),
|
||||
...translateSearchKeyword('auto.components.settings.git.search.bae91effdd', 'fresh base'),
|
||||
...translateSearchKeyword('auto.components.settings.git.search.0c75583ca9', 'safely'),
|
||||
...translateSearchKeyword('auto.components.settings.git.search.035134fcd9', 'worktree')
|
||||
]
|
||||
},
|
||||
...getAutoRenameBranchSearchEntries(),
|
||||
|
|
@ -47,11 +51,11 @@ export const getGitPaneSearchEntries = createLocalizedCatalog(() => [
|
|||
'Current GitHub CLI REST, Search, and GraphQL rate limits.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.git.search.d088806071', 'github'),
|
||||
translate('auto.components.settings.git.search.16f53f7323', 'gh'),
|
||||
translate('auto.components.settings.git.search.65b69d9f80', 'graphql'),
|
||||
translate('auto.components.settings.git.search.b7e52124c7', 'rate limit'),
|
||||
translate('auto.components.settings.git.search.40f9b815fd', 'api budget')
|
||||
...translateSearchKeyword('auto.components.settings.git.search.d088806071', 'github'),
|
||||
...translateSearchKeyword('auto.components.settings.git.search.16f53f7323', 'gh'),
|
||||
...translateSearchKeyword('auto.components.settings.git.search.65b69d9f80', 'graphql'),
|
||||
...translateSearchKeyword('auto.components.settings.git.search.b7e52124c7', 'rate limit'),
|
||||
...translateSearchKeyword('auto.components.settings.git.search.40f9b815fd', 'api budget')
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -61,10 +65,10 @@ export const getGitPaneSearchEntries = createLocalizedCatalog(() => [
|
|||
'Current GitLab CLI REST rate-limit headers when available.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.git.search.4808f065b3', 'gitlab'),
|
||||
translate('auto.components.settings.git.search.ead733645f', 'glab'),
|
||||
translate('auto.components.settings.git.search.b7e52124c7', 'rate limit'),
|
||||
translate('auto.components.settings.git.search.40f9b815fd', 'api budget')
|
||||
...translateSearchKeyword('auto.components.settings.git.search.4808f065b3', 'gitlab'),
|
||||
...translateSearchKeyword('auto.components.settings.git.search.ead733645f', 'glab'),
|
||||
...translateSearchKeyword('auto.components.settings.git.search.b7e52124c7', 'rate limit'),
|
||||
...translateSearchKeyword('auto.components.settings.git.search.40f9b815fd', 'api budget')
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -74,14 +78,14 @@ export const getGitPaneSearchEntries = createLocalizedCatalog(() => [
|
|||
'Add Orca attribution to commits, PRs, and issues.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.git.search.d088806071', 'github'),
|
||||
translate('auto.components.settings.git.search.16f53f7323', 'gh'),
|
||||
translate('auto.components.settings.git.search.6bdea421bb', 'pr'),
|
||||
translate('auto.components.settings.git.search.af0a144bfb', 'issue'),
|
||||
translate('auto.components.settings.git.search.61f9f5d1fc', 'co-author'),
|
||||
translate('auto.components.settings.git.search.8461c908ae', 'coauthored'),
|
||||
translate('auto.components.settings.git.search.1b93c1143c', 'attribution'),
|
||||
translate('auto.components.settings.git.search.61eab13403', 'orca')
|
||||
...translateSearchKeyword('auto.components.settings.git.search.d088806071', 'github'),
|
||||
...translateSearchKeyword('auto.components.settings.git.search.16f53f7323', 'gh'),
|
||||
...translateSearchKeyword('auto.components.settings.git.search.6bdea421bb', 'pr'),
|
||||
...translateSearchKeyword('auto.components.settings.git.search.af0a144bfb', 'issue'),
|
||||
...translateSearchKeyword('auto.components.settings.git.search.61f9f5d1fc', 'co-author'),
|
||||
...translateSearchKeyword('auto.components.settings.git.search.8461c908ae', 'coauthored'),
|
||||
...translateSearchKeyword('auto.components.settings.git.search.1b93c1143c', 'attribution'),
|
||||
...translateSearchKeyword('auto.components.settings.git.search.61eab13403', 'orca')
|
||||
]
|
||||
}
|
||||
])
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
import { translate } from '@/i18n/i18n'
|
||||
import { translateSearchKeyword } from './settings-search-keywords'
|
||||
import { createLocalizedCatalog } from '@/i18n/localized-catalog'
|
||||
|
||||
export const getInputPaneSearchEntries = createLocalizedCatalog(() => [
|
||||
|
|
@ -12,17 +13,20 @@ export const getInputPaneSearchEntries = createLocalizedCatalog(() => [
|
|||
'Enabled by default on Linux and macOS. Linux uses the system selection clipboard; other platforms use a private buffer.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.input.search.b51d47ceb7', 'input'),
|
||||
translate('auto.components.settings.input.search.e25165320e', 'editing'),
|
||||
translate('auto.components.settings.input.search.e5cd0e7a46', 'selection'),
|
||||
translate('auto.components.settings.input.search.de51e18ee9', 'primary selection'),
|
||||
translate('auto.components.settings.input.search.31ba58c8ae', 'middle click'),
|
||||
translate('auto.components.settings.input.search.5fb84ba77f', 'middle mouse'),
|
||||
translate('auto.components.settings.input.search.c4440c3986', 'paste'),
|
||||
translate('auto.components.settings.input.search.7059cfb00a', 'clipboard'),
|
||||
translate('auto.components.settings.input.search.71905435dd', 'x11'),
|
||||
translate('auto.components.settings.input.search.26c83b06c5', 'linux'),
|
||||
translate('auto.components.settings.input.search.886597d6b3', 'macos')
|
||||
...translateSearchKeyword('auto.components.settings.input.search.b51d47ceb7', 'input'),
|
||||
...translateSearchKeyword('auto.components.settings.input.search.e25165320e', 'editing'),
|
||||
...translateSearchKeyword('auto.components.settings.input.search.e5cd0e7a46', 'selection'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.input.search.de51e18ee9',
|
||||
'primary selection'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.input.search.31ba58c8ae', 'middle click'),
|
||||
...translateSearchKeyword('auto.components.settings.input.search.5fb84ba77f', 'middle mouse'),
|
||||
...translateSearchKeyword('auto.components.settings.input.search.c4440c3986', 'paste'),
|
||||
...translateSearchKeyword('auto.components.settings.input.search.7059cfb00a', 'clipboard'),
|
||||
...translateSearchKeyword('auto.components.settings.input.search.71905435dd', 'x11'),
|
||||
...translateSearchKeyword('auto.components.settings.input.search.26c83b06c5', 'linux'),
|
||||
...translateSearchKeyword('auto.components.settings.input.search.886597d6b3', 'macos')
|
||||
]
|
||||
}
|
||||
])
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
import { translate } from '@/i18n/i18n'
|
||||
import { translateSearchKeyword } from './settings-search-keywords'
|
||||
import { createLocalizedCatalog } from '@/i18n/localized-catalog'
|
||||
|
||||
export const getIntegrationsPaneSearchEntries = createLocalizedCatalog(() => [
|
||||
|
|
@ -12,9 +13,15 @@ export const getIntegrationsPaneSearchEntries = createLocalizedCatalog(() => [
|
|||
'GitHub authentication via the gh CLI.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.integrations.search.b79c21bd42', 'github'),
|
||||
translate('auto.components.settings.integrations.search.41ccade05c', 'gh'),
|
||||
translate('auto.components.settings.integrations.search.c450244ad7', 'integration')
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.integrations.search.b79c21bd42',
|
||||
'github'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.integrations.search.41ccade05c', 'gh'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.integrations.search.c450244ad7',
|
||||
'integration'
|
||||
)
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -27,11 +34,20 @@ export const getIntegrationsPaneSearchEntries = createLocalizedCatalog(() => [
|
|||
'GitLab authentication via the glab CLI.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.integrations.search.b939695c69', 'gitlab'),
|
||||
translate('auto.components.settings.integrations.search.b40cbe5de4', 'glab'),
|
||||
translate('auto.components.settings.integrations.search.c450244ad7', 'integration'),
|
||||
translate('auto.components.settings.integrations.search.581844769a', 'mr'),
|
||||
translate('auto.components.settings.integrations.search.371ee914d2', 'merge request')
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.integrations.search.b939695c69',
|
||||
'gitlab'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.integrations.search.b40cbe5de4', 'glab'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.integrations.search.c450244ad7',
|
||||
'integration'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.integrations.search.581844769a', 'mr'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.integrations.search.371ee914d2',
|
||||
'merge request'
|
||||
)
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -44,10 +60,22 @@ export const getIntegrationsPaneSearchEntries = createLocalizedCatalog(() => [
|
|||
'Bitbucket Cloud authentication via API token environment variables.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.integrations.search.50d20817f7', 'bitbucket'),
|
||||
translate('auto.components.settings.integrations.search.c450244ad7', 'integration'),
|
||||
translate('auto.components.settings.integrations.search.8c568d761c', 'pull request'),
|
||||
translate('auto.components.settings.integrations.search.2ec2bd328c', 'api token')
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.integrations.search.50d20817f7',
|
||||
'bitbucket'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.integrations.search.c450244ad7',
|
||||
'integration'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.integrations.search.8c568d761c',
|
||||
'pull request'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.integrations.search.2ec2bd328c',
|
||||
'api token'
|
||||
)
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -60,12 +88,27 @@ export const getIntegrationsPaneSearchEntries = createLocalizedCatalog(() => [
|
|||
'Azure DevOps Repos authentication via token environment variables.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.integrations.search.b38b5d27f1', 'azure devops'),
|
||||
translate('auto.components.settings.integrations.search.ed63380247', 'azure repos'),
|
||||
translate('auto.components.settings.integrations.search.03a7b275be', 'ado'),
|
||||
translate('auto.components.settings.integrations.search.c450244ad7', 'integration'),
|
||||
translate('auto.components.settings.integrations.search.8c568d761c', 'pull request'),
|
||||
translate('auto.components.settings.integrations.search.2ec2bd328c', 'api token')
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.integrations.search.b38b5d27f1',
|
||||
'azure devops'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.integrations.search.ed63380247',
|
||||
'azure repos'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.integrations.search.03a7b275be', 'ado'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.integrations.search.c450244ad7',
|
||||
'integration'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.integrations.search.8c568d761c',
|
||||
'pull request'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.integrations.search.2ec2bd328c',
|
||||
'api token'
|
||||
)
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -78,11 +121,23 @@ export const getIntegrationsPaneSearchEntries = createLocalizedCatalog(() => [
|
|||
'Gitea authentication via API token environment variables.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.integrations.search.129fc59aa8', 'gitea'),
|
||||
translate('auto.components.settings.integrations.search.33180e8c10', 'self-hosted'),
|
||||
translate('auto.components.settings.integrations.search.c450244ad7', 'integration'),
|
||||
translate('auto.components.settings.integrations.search.8c568d761c', 'pull request'),
|
||||
translate('auto.components.settings.integrations.search.2ec2bd328c', 'api token')
|
||||
...translateSearchKeyword('auto.components.settings.integrations.search.129fc59aa8', 'gitea'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.integrations.search.33180e8c10',
|
||||
'self-hosted'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.integrations.search.c450244ad7',
|
||||
'integration'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.integrations.search.8c568d761c',
|
||||
'pull request'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.integrations.search.2ec2bd328c',
|
||||
'api token'
|
||||
)
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -92,13 +147,31 @@ export const getIntegrationsPaneSearchEntries = createLocalizedCatalog(() => [
|
|||
'Connect Jira Cloud or update Jira API token credentials.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.integrations.search.e1263dd748', 'jira'),
|
||||
translate('auto.components.settings.integrations.search.7345b7c3e6', 'atlassian'),
|
||||
translate('auto.components.settings.integrations.search.c450244ad7', 'integration'),
|
||||
translate('auto.components.settings.integrations.search.2ec2bd328c', 'api token'),
|
||||
translate('auto.components.settings.integrations.search.20540996ef', 'credentials'),
|
||||
translate('auto.components.settings.integrations.search.3c3d3d8ffa', 'connect'),
|
||||
translate('auto.components.settings.integrations.search.a626990bd2', 'disconnect')
|
||||
...translateSearchKeyword('auto.components.settings.integrations.search.e1263dd748', 'jira'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.integrations.search.7345b7c3e6',
|
||||
'atlassian'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.integrations.search.c450244ad7',
|
||||
'integration'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.integrations.search.2ec2bd328c',
|
||||
'api token'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.integrations.search.20540996ef',
|
||||
'credentials'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.integrations.search.3c3d3d8ffa',
|
||||
'connect'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.integrations.search.a626990bd2',
|
||||
'disconnect'
|
||||
)
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -111,11 +184,26 @@ export const getIntegrationsPaneSearchEntries = createLocalizedCatalog(() => [
|
|||
'Connect Linear to browse and link issues.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.integrations.search.7319e3015b', 'linear'),
|
||||
translate('auto.components.settings.integrations.search.c450244ad7', 'integration'),
|
||||
translate('auto.components.settings.integrations.search.faa0b5a0d9', 'api key'),
|
||||
translate('auto.components.settings.integrations.search.3c3d3d8ffa', 'connect'),
|
||||
translate('auto.components.settings.integrations.search.a626990bd2', 'disconnect')
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.integrations.search.7319e3015b',
|
||||
'linear'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.integrations.search.c450244ad7',
|
||||
'integration'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.integrations.search.faa0b5a0d9',
|
||||
'api key'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.integrations.search.3c3d3d8ffa',
|
||||
'connect'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.integrations.search.a626990bd2',
|
||||
'disconnect'
|
||||
)
|
||||
]
|
||||
}
|
||||
])
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
import { translate } from '@/i18n/i18n'
|
||||
import { translateSearchKeyword } from './settings-search-keywords'
|
||||
import { createLocalizedCatalog } from '@/i18n/localized-catalog'
|
||||
|
||||
export const getMobileEmulatorSearchEntries = createLocalizedCatalog(() => [
|
||||
|
|
@ -12,19 +13,58 @@ export const getMobileEmulatorSearchEntries = createLocalizedCatalog(() => [
|
|||
'Configure mobile emulator support for Orca and coding agents.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.mobile.emulator.search.25159de808', 'mobile emulator'),
|
||||
translate('auto.components.settings.mobile.emulator.search.c5eca29310', 'ios simulator'),
|
||||
translate('auto.components.settings.mobile.emulator.search.2d67f708ce', 'simulator'),
|
||||
translate('auto.components.settings.mobile.emulator.search.6b6407dc1f', 'emulator'),
|
||||
translate('auto.components.settings.mobile.emulator.search.49727355a3', 'iphone'),
|
||||
translate('auto.components.settings.mobile.emulator.search.bec7231663', 'ipad'),
|
||||
translate('auto.components.settings.mobile.emulator.search.7c5a8a2bee', 'xcode'),
|
||||
translate('auto.components.settings.mobile.emulator.search.84e5706975', 'serve-sim'),
|
||||
translate('auto.components.settings.mobile.emulator.search.d4b7833894', 'orca cli'),
|
||||
translate('auto.components.settings.mobile.emulator.search.9353854ff3', 'orca emulator'),
|
||||
translate('auto.components.settings.mobile.emulator.search.ac0a985873', 'emulator skill'),
|
||||
translate('auto.components.settings.mobile.emulator.search.1ad6fb6230', 'default device'),
|
||||
translate('auto.components.settings.mobile.emulator.search.b8ddd13195', 'agent emulator')
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.mobile.emulator.search.25159de808',
|
||||
'mobile emulator'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.mobile.emulator.search.c5eca29310',
|
||||
'ios simulator'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.mobile.emulator.search.2d67f708ce',
|
||||
'simulator'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.mobile.emulator.search.6b6407dc1f',
|
||||
'emulator'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.mobile.emulator.search.49727355a3',
|
||||
'iphone'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.mobile.emulator.search.bec7231663',
|
||||
'ipad'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.mobile.emulator.search.7c5a8a2bee',
|
||||
'xcode'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.mobile.emulator.search.84e5706975',
|
||||
'serve-sim'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.mobile.emulator.search.d4b7833894',
|
||||
'orca cli'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.mobile.emulator.search.9353854ff3',
|
||||
'orca emulator'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.mobile.emulator.search.ac0a985873',
|
||||
'emulator skill'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.mobile.emulator.search.1ad6fb6230',
|
||||
'default device'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.mobile.emulator.search.b8ddd13195',
|
||||
'agent emulator'
|
||||
)
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -37,11 +77,26 @@ export const getMobileEmulatorSearchEntries = createLocalizedCatalog(() => [
|
|||
'Choose which emulator device Orca opens by default.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.mobile.emulator.search.ab4814f3c5', 'default simulator'),
|
||||
translate('auto.components.settings.mobile.emulator.search.1dc8c52ffa', 'default iphone'),
|
||||
translate('auto.components.settings.mobile.emulator.search.ec3c4043fd', 'default ipad'),
|
||||
translate('auto.components.settings.mobile.emulator.search.25d7bfbcd4', 'udid'),
|
||||
translate('auto.components.settings.mobile.emulator.search.04c5f5d901', 'device')
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.mobile.emulator.search.ab4814f3c5',
|
||||
'default simulator'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.mobile.emulator.search.1dc8c52ffa',
|
||||
'default iphone'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.mobile.emulator.search.ec3c4043fd',
|
||||
'default ipad'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.mobile.emulator.search.25d7bfbcd4',
|
||||
'udid'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.mobile.emulator.search.04c5f5d901',
|
||||
'device'
|
||||
)
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -54,14 +109,26 @@ export const getMobileEmulatorSearchEntries = createLocalizedCatalog(() => [
|
|||
'Check whether Xcode, simctl, serve-sim, and emulator devices are ready.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.mobile.emulator.search.42bfab45d8', 'availability'),
|
||||
translate('auto.components.settings.mobile.emulator.search.3211e7acf9', 'xcrun'),
|
||||
translate('auto.components.settings.mobile.emulator.search.7650063d17', 'simctl'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.mobile.emulator.search.42bfab45d8',
|
||||
'availability'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.mobile.emulator.search.3211e7acf9',
|
||||
'xcrun'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.mobile.emulator.search.7650063d17',
|
||||
'simctl'
|
||||
),
|
||||
translate(
|
||||
'auto.components.settings.mobile.emulator.search.27397fe8e9',
|
||||
'xcode command line tools'
|
||||
),
|
||||
translate('auto.components.settings.mobile.emulator.search.8ef0f08d36', 'runtime')
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.mobile.emulator.search.8ef0f08d36',
|
||||
'runtime'
|
||||
)
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -74,11 +141,26 @@ export const getMobileEmulatorSearchEntries = createLocalizedCatalog(() => [
|
|||
'Use Orca CLI commands to list, attach, tap, and type into a mobile emulator.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.mobile.emulator.search.f8b871d655', 'agent cli'),
|
||||
translate('auto.components.settings.mobile.emulator.search.6f728f1456', 'emulator tap'),
|
||||
translate('auto.components.settings.mobile.emulator.search.64494f03c3', 'emulator attach'),
|
||||
translate('auto.components.settings.mobile.emulator.search.bbe4267416', 'emulator type'),
|
||||
translate('auto.components.settings.mobile.emulator.search.2bb2e09225', 'mobile skill')
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.mobile.emulator.search.f8b871d655',
|
||||
'agent cli'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.mobile.emulator.search.6f728f1456',
|
||||
'emulator tap'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.mobile.emulator.search.64494f03c3',
|
||||
'emulator attach'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.mobile.emulator.search.bbe4267416',
|
||||
'emulator type'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.mobile.emulator.search.2bb2e09225',
|
||||
'mobile skill'
|
||||
)
|
||||
]
|
||||
}
|
||||
])
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
import { translate } from '@/i18n/i18n'
|
||||
import { translateSearchKeyword } from './settings-search-keywords'
|
||||
import { createLocalizedCatalog } from '@/i18n/localized-catalog'
|
||||
|
||||
export const getMobilePaneSearchEntries = createLocalizedCatalog(() => [
|
||||
|
|
@ -9,12 +10,12 @@ export const getMobilePaneSearchEntries = createLocalizedCatalog(() => [
|
|||
'Pair a mobile device by scanning a QR code.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.mobile.pane.search.6db86f445f', 'mobile'),
|
||||
translate('auto.components.settings.mobile.pane.search.3c1807a81a', 'qr'),
|
||||
translate('auto.components.settings.mobile.pane.search.4a0c826f3d', 'code'),
|
||||
translate('auto.components.settings.mobile.pane.search.e518cbd61c', 'pair'),
|
||||
translate('auto.components.settings.mobile.pane.search.ad08035c5f', 'phone'),
|
||||
translate('auto.components.settings.mobile.pane.search.2128a21096', 'scan')
|
||||
...translateSearchKeyword('auto.components.settings.mobile.pane.search.6db86f445f', 'mobile'),
|
||||
...translateSearchKeyword('auto.components.settings.mobile.pane.search.3c1807a81a', 'qr'),
|
||||
...translateSearchKeyword('auto.components.settings.mobile.pane.search.4a0c826f3d', 'code'),
|
||||
...translateSearchKeyword('auto.components.settings.mobile.pane.search.e518cbd61c', 'pair'),
|
||||
...translateSearchKeyword('auto.components.settings.mobile.pane.search.ad08035c5f', 'phone'),
|
||||
...translateSearchKeyword('auto.components.settings.mobile.pane.search.2128a21096', 'scan')
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -24,11 +25,17 @@ export const getMobilePaneSearchEntries = createLocalizedCatalog(() => [
|
|||
'Manage paired mobile devices.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.mobile.pane.search.6db86f445f', 'mobile'),
|
||||
translate('auto.components.settings.mobile.pane.search.82783d9b71', 'devices'),
|
||||
translate('auto.components.settings.mobile.pane.search.905c65a308', 'revoke'),
|
||||
translate('auto.components.settings.mobile.pane.search.5e8fda4d7f', 'paired'),
|
||||
translate('auto.components.settings.mobile.pane.search.7d01f93ec0', 'connected')
|
||||
...translateSearchKeyword('auto.components.settings.mobile.pane.search.6db86f445f', 'mobile'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.mobile.pane.search.82783d9b71',
|
||||
'devices'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.mobile.pane.search.905c65a308', 'revoke'),
|
||||
...translateSearchKeyword('auto.components.settings.mobile.pane.search.5e8fda4d7f', 'paired'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.mobile.pane.search.7d01f93ec0',
|
||||
'connected'
|
||||
)
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -38,17 +45,35 @@ export const getMobilePaneSearchEntries = createLocalizedCatalog(() => [
|
|||
'Choose which network address to use for mobile pairing.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.mobile.pane.search.7b37c2e557', 'network'),
|
||||
translate('auto.components.settings.mobile.pane.search.a023683767', 'interface'),
|
||||
translate('auto.components.settings.mobile.pane.search.c690e3ee38', 'tailscale'),
|
||||
translate('auto.components.settings.mobile.pane.search.16bff559a0', 'tailnet'),
|
||||
translate('auto.components.settings.mobile.pane.search.87711f4b8f', 'vpn'),
|
||||
translate('auto.components.settings.mobile.pane.search.d0c89bc4a9', 'overlay'),
|
||||
translate('auto.components.settings.mobile.pane.search.1f70d63998', 'ip'),
|
||||
translate('auto.components.settings.mobile.pane.search.dd6e671aa9', 'address'),
|
||||
translate('auto.components.settings.mobile.pane.search.1802188b5d', 'wifi'),
|
||||
translate('auto.components.settings.mobile.pane.search.70f505f3c3', 'lan'),
|
||||
translate('auto.components.settings.mobile.pane.search.126afc5dbd', 'remote')
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.mobile.pane.search.7b37c2e557',
|
||||
'network'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.mobile.pane.search.a023683767',
|
||||
'interface'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.mobile.pane.search.c690e3ee38',
|
||||
'tailscale'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.mobile.pane.search.16bff559a0',
|
||||
'tailnet'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.mobile.pane.search.87711f4b8f', 'vpn'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.mobile.pane.search.d0c89bc4a9',
|
||||
'overlay'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.mobile.pane.search.1f70d63998', 'ip'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.mobile.pane.search.dd6e671aa9',
|
||||
'address'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.mobile.pane.search.1802188b5d', 'wifi'),
|
||||
...translateSearchKeyword('auto.components.settings.mobile.pane.search.70f505f3c3', 'lan'),
|
||||
...translateSearchKeyword('auto.components.settings.mobile.pane.search.126afc5dbd', 'remote')
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -61,17 +86,26 @@ export const getMobilePaneSearchEntries = createLocalizedCatalog(() => [
|
|||
'Choose what happens to terminals you were viewing on mobile after you close the app or switch away.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.mobile.pane.search.6db86f445f', 'mobile'),
|
||||
translate('auto.components.settings.mobile.pane.search.b34ad5b3a7', 'terminal'),
|
||||
translate('auto.components.settings.mobile.pane.search.6cd2bfdb0e', 'restore'),
|
||||
translate('auto.components.settings.mobile.pane.search.ad08035c5f', 'phone'),
|
||||
translate('auto.components.settings.mobile.pane.search.fadcbfdd99', 'fit'),
|
||||
translate('auto.components.settings.mobile.pane.search.356c31d6dc', 'width'),
|
||||
translate('auto.components.settings.mobile.pane.search.aa3f736042', 'resize'),
|
||||
translate('auto.components.settings.mobile.pane.search.8015fd9523', 'hold'),
|
||||
translate('auto.components.settings.mobile.pane.search.3a5e31e84b', 'leave'),
|
||||
translate('auto.components.settings.mobile.pane.search.9e16be01d6', 'background'),
|
||||
translate('auto.components.settings.mobile.pane.search.dbccde3a60', 'close')
|
||||
...translateSearchKeyword('auto.components.settings.mobile.pane.search.6db86f445f', 'mobile'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.mobile.pane.search.b34ad5b3a7',
|
||||
'terminal'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.mobile.pane.search.6cd2bfdb0e',
|
||||
'restore'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.mobile.pane.search.ad08035c5f', 'phone'),
|
||||
...translateSearchKeyword('auto.components.settings.mobile.pane.search.fadcbfdd99', 'fit'),
|
||||
...translateSearchKeyword('auto.components.settings.mobile.pane.search.356c31d6dc', 'width'),
|
||||
...translateSearchKeyword('auto.components.settings.mobile.pane.search.aa3f736042', 'resize'),
|
||||
...translateSearchKeyword('auto.components.settings.mobile.pane.search.8015fd9523', 'hold'),
|
||||
...translateSearchKeyword('auto.components.settings.mobile.pane.search.3a5e31e84b', 'leave'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.mobile.pane.search.9e16be01d6',
|
||||
'background'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.mobile.pane.search.dbccde3a60', 'close')
|
||||
]
|
||||
}
|
||||
])
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
import type { SettingsSearchEntry } from './settings-search'
|
||||
import { getMobilePaneSearchEntries } from './mobile-pane-search'
|
||||
import { translate } from '@/i18n/i18n'
|
||||
import { translateSearchKeyword } from './settings-search-keywords'
|
||||
import { createLocalizedCatalog } from '@/i18n/localized-catalog'
|
||||
|
||||
export const getMobileEnableSearchEntry = createLocalizedCatalog(
|
||||
|
|
@ -11,17 +12,47 @@ export const getMobileEnableSearchEntry = createLocalizedCatalog(
|
|||
'Control terminals and agents from your phone.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.mobile.settings.search.f213400800', 'mobile'),
|
||||
translate('auto.components.settings.mobile.settings.search.f4ed142753', 'phone'),
|
||||
translate('auto.components.settings.mobile.settings.search.cf2c93b479', 'pair'),
|
||||
translate('auto.components.settings.mobile.settings.search.87816d1c59', 'qr'),
|
||||
translate('auto.components.settings.mobile.settings.search.59b1d75fd1', 'code'),
|
||||
translate('auto.components.settings.mobile.settings.search.0b7e585cb9', 'scan'),
|
||||
translate('auto.components.settings.mobile.settings.search.7e801801ac', 'remote'),
|
||||
translate('auto.components.settings.mobile.settings.search.a7eececc1d', 'android'),
|
||||
translate('auto.components.settings.mobile.settings.search.6bfa001752', 'apk'),
|
||||
translate('auto.components.settings.mobile.settings.search.8d4ba0ef09', 'beta'),
|
||||
translate('auto.components.settings.mobile.settings.search.b730ff7049', 'experimental')
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.mobile.settings.search.f213400800',
|
||||
'mobile'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.mobile.settings.search.f4ed142753',
|
||||
'phone'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.mobile.settings.search.cf2c93b479',
|
||||
'pair'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.mobile.settings.search.87816d1c59', 'qr'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.mobile.settings.search.59b1d75fd1',
|
||||
'code'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.mobile.settings.search.0b7e585cb9',
|
||||
'scan'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.mobile.settings.search.7e801801ac',
|
||||
'remote'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.mobile.settings.search.a7eececc1d',
|
||||
'android'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.mobile.settings.search.6bfa001752',
|
||||
'apk'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.mobile.settings.search.8d4ba0ef09',
|
||||
'beta'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.mobile.settings.search.b730ff7049',
|
||||
'experimental'
|
||||
)
|
||||
]
|
||||
})
|
||||
)
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
import { translate } from '@/i18n/i18n'
|
||||
import { translateSearchKeyword } from './settings-search-keywords'
|
||||
import { createLocalizedCatalog } from '@/i18n/localized-catalog'
|
||||
|
||||
export const getNotificationsPaneSearchEntries = createLocalizedCatalog(() => [
|
||||
|
|
@ -12,10 +13,22 @@ export const getNotificationsPaneSearchEntries = createLocalizedCatalog(() => [
|
|||
'Master switch for Orca desktop notifications.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.notifications.search.ca8faa40d7', 'notifications'),
|
||||
translate('auto.components.settings.notifications.search.51ae2183e1', 'desktop'),
|
||||
translate('auto.components.settings.notifications.search.72539aede4', 'system'),
|
||||
translate('auto.components.settings.notifications.search.adbc3a0fcf', 'native')
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.notifications.search.ca8faa40d7',
|
||||
'notifications'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.notifications.search.51ae2183e1',
|
||||
'desktop'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.notifications.search.72539aede4',
|
||||
'system'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.notifications.search.adbc3a0fcf',
|
||||
'native'
|
||||
)
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -28,11 +41,20 @@ export const getNotificationsPaneSearchEntries = createLocalizedCatalog(() => [
|
|||
'Notify when a coding agent transitions from working to idle.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.notifications.search.ca8faa40d7', 'notifications'),
|
||||
translate('auto.components.settings.notifications.search.7fa07e9600', 'agent'),
|
||||
translate('auto.components.settings.notifications.search.5f7472d3fb', 'complete'),
|
||||
translate('auto.components.settings.notifications.search.dd9d3e5f0f', 'idle'),
|
||||
translate('auto.components.settings.notifications.search.193e1f107c', 'task')
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.notifications.search.ca8faa40d7',
|
||||
'notifications'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.notifications.search.7fa07e9600',
|
||||
'agent'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.notifications.search.5f7472d3fb',
|
||||
'complete'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.notifications.search.dd9d3e5f0f', 'idle'),
|
||||
...translateSearchKeyword('auto.components.settings.notifications.search.193e1f107c', 'task')
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -42,10 +64,19 @@ export const getNotificationsPaneSearchEntries = createLocalizedCatalog(() => [
|
|||
'Notify when a background terminal emits a bell character.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.notifications.search.ca8faa40d7', 'notifications'),
|
||||
translate('auto.components.settings.notifications.search.c638ae989d', 'terminal'),
|
||||
translate('auto.components.settings.notifications.search.ae0487f8fd', 'bell'),
|
||||
translate('auto.components.settings.notifications.search.a2ab73b325', 'attention')
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.notifications.search.ca8faa40d7',
|
||||
'notifications'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.notifications.search.c638ae989d',
|
||||
'terminal'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.notifications.search.ae0487f8fd', 'bell'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.notifications.search.a2ab73b325',
|
||||
'attention'
|
||||
)
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -58,10 +89,22 @@ export const getNotificationsPaneSearchEntries = createLocalizedCatalog(() => [
|
|||
'Avoid notifying when Orca is focused on the active worktree.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.notifications.search.ca8faa40d7', 'notifications'),
|
||||
translate('auto.components.settings.notifications.search.a4c3b29a3c', 'focused'),
|
||||
translate('auto.components.settings.notifications.search.fa60d8e4ab', 'suppress'),
|
||||
translate('auto.components.settings.notifications.search.4ada6bfde9', 'filtering')
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.notifications.search.ca8faa40d7',
|
||||
'notifications'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.notifications.search.a4c3b29a3c',
|
||||
'focused'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.notifications.search.fa60d8e4ab',
|
||||
'suppress'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.notifications.search.4ada6bfde9',
|
||||
'filtering'
|
||||
)
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -74,17 +117,26 @@ export const getNotificationsPaneSearchEntries = createLocalizedCatalog(() => [
|
|||
'Choose the built-in, system, or local audio file Orca plays for desktop notifications.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.notifications.search.ca8faa40d7', 'notifications'),
|
||||
translate('auto.components.settings.notifications.search.dc7d7c07cd', 'sound'),
|
||||
translate('auto.components.settings.notifications.search.6e08f78315', 'audio'),
|
||||
translate('auto.components.settings.notifications.search.5362074f19', 'mp3'),
|
||||
translate('auto.components.settings.notifications.search.57e34a31cd', 'wav'),
|
||||
translate('auto.components.settings.notifications.search.d16ae23645', 'ogg'),
|
||||
translate('auto.components.settings.notifications.search.6ecb8418cb', 'm4a'),
|
||||
translate('auto.components.settings.notifications.search.722face52f', 'aac'),
|
||||
translate('auto.components.settings.notifications.search.079c29aeb5', 'flac'),
|
||||
translate('auto.components.settings.notifications.search.3014ad1b8f', 'ding'),
|
||||
translate('auto.components.settings.notifications.search.ef86a782cc', 'bong')
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.notifications.search.ca8faa40d7',
|
||||
'notifications'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.notifications.search.dc7d7c07cd',
|
||||
'sound'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.notifications.search.6e08f78315',
|
||||
'audio'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.notifications.search.5362074f19', 'mp3'),
|
||||
...translateSearchKeyword('auto.components.settings.notifications.search.57e34a31cd', 'wav'),
|
||||
...translateSearchKeyword('auto.components.settings.notifications.search.d16ae23645', 'ogg'),
|
||||
...translateSearchKeyword('auto.components.settings.notifications.search.6ecb8418cb', 'm4a'),
|
||||
...translateSearchKeyword('auto.components.settings.notifications.search.722face52f', 'aac'),
|
||||
...translateSearchKeyword('auto.components.settings.notifications.search.079c29aeb5', 'flac'),
|
||||
...translateSearchKeyword('auto.components.settings.notifications.search.3014ad1b8f', 'ding'),
|
||||
...translateSearchKeyword('auto.components.settings.notifications.search.ef86a782cc', 'bong')
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -97,10 +149,22 @@ export const getNotificationsPaneSearchEntries = createLocalizedCatalog(() => [
|
|||
'Playback volume for non-system notification sounds.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.notifications.search.ca8faa40d7', 'notifications'),
|
||||
translate('auto.components.settings.notifications.search.dc7d7c07cd', 'sound'),
|
||||
translate('auto.components.settings.notifications.search.d58b64dddf', 'volume'),
|
||||
translate('auto.components.settings.notifications.search.ecdeff4993', 'loudness')
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.notifications.search.ca8faa40d7',
|
||||
'notifications'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.notifications.search.dc7d7c07cd',
|
||||
'sound'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.notifications.search.d58b64dddf',
|
||||
'volume'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.notifications.search.ecdeff4993',
|
||||
'loudness'
|
||||
)
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -113,8 +177,11 @@ export const getNotificationsPaneSearchEntries = createLocalizedCatalog(() => [
|
|||
'Trigger a sample desktop notification using the native delivery path.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.notifications.search.ca8faa40d7', 'notifications'),
|
||||
translate('auto.components.settings.notifications.search.aa288005c3', 'test')
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.notifications.search.ca8faa40d7',
|
||||
'notifications'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.notifications.search.aa288005c3', 'test')
|
||||
]
|
||||
}
|
||||
])
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
import { translate } from '@/i18n/i18n'
|
||||
import { translateSearchKeyword } from './settings-search-keywords'
|
||||
import { createLocalizedCatalog } from '@/i18n/localized-catalog'
|
||||
|
||||
export const getOrchestrationPaneSearchEntries = createLocalizedCatalog(() => [
|
||||
|
|
@ -12,21 +13,60 @@ export const getOrchestrationPaneSearchEntries = createLocalizedCatalog(() => [
|
|||
'Coordinate multiple coding agents via messaging, task DAGs, dispatch, and decision gates.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.orchestration.search.a7f76b4ca7', 'orchestration'),
|
||||
translate('auto.components.settings.orchestration.search.d86705ba77', 'multi-agent'),
|
||||
translate('auto.components.settings.orchestration.search.13ba5c6cbd', 'agents'),
|
||||
translate('auto.components.settings.orchestration.search.91fc8ab7e5', 'coordination'),
|
||||
translate('auto.components.settings.orchestration.search.9a5ebdca31', 'messaging'),
|
||||
translate('auto.components.settings.orchestration.search.eee028ae14', 'dispatch'),
|
||||
translate('auto.components.settings.orchestration.search.7ad948b714', 'task'),
|
||||
translate('auto.components.settings.orchestration.search.ca54c69806', 'DAG'),
|
||||
translate('auto.components.settings.orchestration.search.741dfc03fa', 'worker'),
|
||||
translate('auto.components.settings.orchestration.search.21c28ccdf7', 'coordinator'),
|
||||
translate('auto.components.settings.orchestration.search.32c5098e7b', 'claude'),
|
||||
translate('auto.components.settings.orchestration.search.f278fd04db', 'codex'),
|
||||
translate('auto.components.settings.orchestration.search.08c65b12a2', 'examples'),
|
||||
translate('auto.components.settings.orchestration.search.c766a01978', 'handoff'),
|
||||
translate('auto.components.settings.orchestration.search.f5d39af41e', 'child agents')
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.orchestration.search.a7f76b4ca7',
|
||||
'orchestration'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.orchestration.search.d86705ba77',
|
||||
'multi-agent'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.orchestration.search.13ba5c6cbd',
|
||||
'agents'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.orchestration.search.91fc8ab7e5',
|
||||
'coordination'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.orchestration.search.9a5ebdca31',
|
||||
'messaging'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.orchestration.search.eee028ae14',
|
||||
'dispatch'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.orchestration.search.7ad948b714', 'task'),
|
||||
...translateSearchKeyword('auto.components.settings.orchestration.search.ca54c69806', 'DAG'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.orchestration.search.741dfc03fa',
|
||||
'worker'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.orchestration.search.21c28ccdf7',
|
||||
'coordinator'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.orchestration.search.32c5098e7b',
|
||||
'claude'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.orchestration.search.f278fd04db',
|
||||
'codex'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.orchestration.search.08c65b12a2',
|
||||
'examples'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.orchestration.search.c766a01978',
|
||||
'handoff'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.orchestration.search.f5d39af41e',
|
||||
'child agents'
|
||||
)
|
||||
]
|
||||
}
|
||||
])
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
// terminal-search.ts, etc.) and keep Settings.tsx imports uniform.
|
||||
|
||||
import { translate } from '@/i18n/i18n'
|
||||
import { translateSearchKeyword } from './settings-search-keywords'
|
||||
import { createLocalizedCatalog } from '@/i18n/localized-catalog'
|
||||
|
||||
export const getPrivacyPaneSearchEntries = createLocalizedCatalog(() => [
|
||||
|
|
@ -13,15 +14,15 @@ export const getPrivacyPaneSearchEntries = createLocalizedCatalog(() => [
|
|||
'Anonymous product usage data, diagnostics, and telemetry controls.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.privacy.search.10124159f1', 'privacy'),
|
||||
translate('auto.components.settings.privacy.search.77d3180def', 'telemetry'),
|
||||
translate('auto.components.settings.privacy.search.4104f6f0f3', 'analytics'),
|
||||
translate('auto.components.settings.privacy.search.79c319948b', 'usage'),
|
||||
translate('auto.components.settings.privacy.search.b021b9cb81', 'anonymous'),
|
||||
translate('auto.components.settings.privacy.search.3922051573', 'data'),
|
||||
translate('auto.components.settings.privacy.search.2b5a5c312f', 'posthog'),
|
||||
translate('auto.components.settings.privacy.search.27a27b2f63', 'opt out'),
|
||||
translate('auto.components.settings.privacy.search.4d4bb76bf4', 'opt in')
|
||||
...translateSearchKeyword('auto.components.settings.privacy.search.10124159f1', 'privacy'),
|
||||
...translateSearchKeyword('auto.components.settings.privacy.search.77d3180def', 'telemetry'),
|
||||
...translateSearchKeyword('auto.components.settings.privacy.search.4104f6f0f3', 'analytics'),
|
||||
...translateSearchKeyword('auto.components.settings.privacy.search.79c319948b', 'usage'),
|
||||
...translateSearchKeyword('auto.components.settings.privacy.search.b021b9cb81', 'anonymous'),
|
||||
...translateSearchKeyword('auto.components.settings.privacy.search.3922051573', 'data'),
|
||||
...translateSearchKeyword('auto.components.settings.privacy.search.2b5a5c312f', 'posthog'),
|
||||
...translateSearchKeyword('auto.components.settings.privacy.search.27a27b2f63', 'opt out'),
|
||||
...translateSearchKeyword('auto.components.settings.privacy.search.4d4bb76bf4', 'opt in')
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -34,12 +35,12 @@ export const getPrivacyPaneSearchEntries = createLocalizedCatalog(() => [
|
|||
'Help improve Orca by sending anonymous feature-usage events.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.privacy.search.77d3180def', 'telemetry'),
|
||||
translate('auto.components.settings.privacy.search.79c319948b', 'usage'),
|
||||
translate('auto.components.settings.privacy.search.b021b9cb81', 'anonymous'),
|
||||
translate('auto.components.settings.privacy.search.4d4bb76bf4', 'opt in'),
|
||||
translate('auto.components.settings.privacy.search.27a27b2f63', 'opt out'),
|
||||
translate('auto.components.settings.privacy.search.ead1deded2', 'share')
|
||||
...translateSearchKeyword('auto.components.settings.privacy.search.77d3180def', 'telemetry'),
|
||||
...translateSearchKeyword('auto.components.settings.privacy.search.79c319948b', 'usage'),
|
||||
...translateSearchKeyword('auto.components.settings.privacy.search.b021b9cb81', 'anonymous'),
|
||||
...translateSearchKeyword('auto.components.settings.privacy.search.4d4bb76bf4', 'opt in'),
|
||||
...translateSearchKeyword('auto.components.settings.privacy.search.27a27b2f63', 'opt out'),
|
||||
...translateSearchKeyword('auto.components.settings.privacy.search.ead1deded2', 'share')
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -49,12 +50,18 @@ export const getPrivacyPaneSearchEntries = createLocalizedCatalog(() => [
|
|||
'Trace files and OTLP export controls.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.privacy.search.c0494ff48a', 'diagnostics'),
|
||||
translate('auto.components.settings.privacy.search.40de3c2f19', 'trace'),
|
||||
translate('auto.components.settings.privacy.search.685c68a81f', 'logs'),
|
||||
translate('auto.components.settings.privacy.search.9ea93ce3d6', 'otlp'),
|
||||
translate('auto.components.settings.privacy.search.4a583f3a2f', 'opentelemetry'),
|
||||
translate('auto.components.settings.privacy.search.1686c07fee', 'support')
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.privacy.search.c0494ff48a',
|
||||
'diagnostics'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.privacy.search.40de3c2f19', 'trace'),
|
||||
...translateSearchKeyword('auto.components.settings.privacy.search.685c68a81f', 'logs'),
|
||||
...translateSearchKeyword('auto.components.settings.privacy.search.9ea93ce3d6', 'otlp'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.privacy.search.4a583f3a2f',
|
||||
'opentelemetry'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.privacy.search.1686c07fee', 'support')
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -67,14 +74,29 @@ export const getPrivacyPaneSearchEntries = createLocalizedCatalog(() => [
|
|||
'Environment variables that disable telemetry transmission.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.privacy.search.83a6cd79b3', 'do not track'),
|
||||
translate('auto.components.settings.privacy.search.058550f6bc', 'do_not_track'),
|
||||
translate('auto.components.settings.privacy.search.69637f4dc4', 'orca_telemetry_disabled'),
|
||||
translate('auto.components.settings.privacy.search.5854a5c752', 'ci'),
|
||||
translate('auto.components.settings.privacy.search.664f1a8984', 'continuous integration'),
|
||||
translate('auto.components.settings.privacy.search.94e04427f6', 'env'),
|
||||
translate('auto.components.settings.privacy.search.d8191ae5ca', 'environment variable'),
|
||||
translate('auto.components.settings.privacy.search.e8bc614a18', 'disable')
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.privacy.search.83a6cd79b3',
|
||||
'do not track'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.privacy.search.058550f6bc',
|
||||
'do_not_track'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.privacy.search.69637f4dc4',
|
||||
'orca_telemetry_disabled'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.privacy.search.5854a5c752', 'ci'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.privacy.search.664f1a8984',
|
||||
'continuous integration'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.privacy.search.94e04427f6', 'env'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.privacy.search.d8191ae5ca',
|
||||
'environment variable'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.privacy.search.e8bc614a18', 'disable')
|
||||
]
|
||||
}
|
||||
])
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
import { translate } from '@/i18n/i18n'
|
||||
import { translateSearchKeyword } from './settings-search-keywords'
|
||||
import { createLocalizedCatalog } from '@/i18n/localized-catalog'
|
||||
|
||||
export const getQuickCommandsPaneSearchEntries = createLocalizedCatalog(() => [
|
||||
|
|
@ -9,21 +10,57 @@ export const getQuickCommandsPaneSearchEntries = createLocalizedCatalog(() => [
|
|||
'Saved terminal commands that can be launched from any terminal, scoped globally or to a specific project.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.quick.commands.search.236d4cfac8', 'quick'),
|
||||
translate('auto.components.settings.quick.commands.search.fecb031823', 'command'),
|
||||
translate('auto.components.settings.quick.commands.search.cfffa6cdb6', 'commands'),
|
||||
translate('auto.components.settings.quick.commands.search.0073cf8ce9', 'terminal'),
|
||||
translate('auto.components.settings.quick.commands.search.d07d130849', 'shortcut'),
|
||||
translate('auto.components.settings.quick.commands.search.a26ecdb77b', 'snippet'),
|
||||
translate('auto.components.settings.quick.commands.search.8bf43c2dad', 'global'),
|
||||
translate('auto.components.settings.quick.commands.search.f58b92a48f', 'project'),
|
||||
translate('auto.components.settings.quick.commands.search.89d2a9ad9f', 'repo'),
|
||||
translate('auto.components.settings.quick.commands.search.1c5bdcd0f2', 'repository'),
|
||||
translate('auto.components.settings.quick.commands.search.2d8aff42be', 'run'),
|
||||
translate('auto.components.settings.quick.commands.search.0b78c4a165', 'launch'),
|
||||
translate('auto.components.settings.quick.commands.search.b949a7c0a0', 'pnpm'),
|
||||
translate('auto.components.settings.quick.commands.search.b86c727100', 'npm'),
|
||||
translate('auto.components.settings.quick.commands.search.3c316e6ef8', 'yarn')
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.quick.commands.search.236d4cfac8',
|
||||
'quick'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.quick.commands.search.fecb031823',
|
||||
'command'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.quick.commands.search.cfffa6cdb6',
|
||||
'commands'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.quick.commands.search.0073cf8ce9',
|
||||
'terminal'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.quick.commands.search.d07d130849',
|
||||
'shortcut'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.quick.commands.search.a26ecdb77b',
|
||||
'snippet'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.quick.commands.search.8bf43c2dad',
|
||||
'global'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.quick.commands.search.f58b92a48f',
|
||||
'project'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.quick.commands.search.89d2a9ad9f',
|
||||
'repo'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.quick.commands.search.1c5bdcd0f2',
|
||||
'repository'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.quick.commands.search.2d8aff42be', 'run'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.quick.commands.search.0b78c4a165',
|
||||
'launch'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.quick.commands.search.b949a7c0a0',
|
||||
'pnpm'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.quick.commands.search.b86c727100', 'npm'),
|
||||
...translateSearchKeyword('auto.components.settings.quick.commands.search.3c316e6ef8', 'yarn')
|
||||
]
|
||||
}
|
||||
])
|
||||
|
|
|
|||
|
|
@ -0,0 +1,74 @@
|
|||
import type { Repo } from '../../../../shared/types'
|
||||
import type { SettingsSearchEntry } from './settings-search'
|
||||
import { translate } from '@/i18n/i18n'
|
||||
import { translateSearchKeyword } from './settings-search-keywords'
|
||||
|
||||
export function getRepositoryGitAuthorSearchEntries(repo: Repo): SettingsSearchEntry[] {
|
||||
return [
|
||||
{
|
||||
title: translate('auto.components.settings.repository.search.eec3995dc6', 'Git AI Author'),
|
||||
description: translate(
|
||||
'auto.components.settings.repository.search.6cc5c65e64',
|
||||
'Project-specific git generation overrides.'
|
||||
),
|
||||
keywords: [
|
||||
repo.displayName,
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.repository.search.a47f51127e',
|
||||
'source control'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.repository.search.cfad7ce5f3', 'ai'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.repository.search.eec39b3de6',
|
||||
'commit message'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.repository.search.5ff7fe1ade',
|
||||
'pull request'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.repository.search.8068d8d0f1', 'pr'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.repository.search.917dce844a',
|
||||
'branch name'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.repository.search.130d76dc16',
|
||||
'rename'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.repository.search.fa3131f223', 'model'),
|
||||
...translateSearchKeyword('auto.components.settings.repository.search.fff8834983', 'prompt')
|
||||
]
|
||||
},
|
||||
{
|
||||
title: translate('auto.components.settings.repository.search.31bd0a2420', 'MCP Configs'),
|
||||
description: translate(
|
||||
'auto.components.settings.repository.search.3c31801626',
|
||||
'Inspect project-level MCP server config files.'
|
||||
),
|
||||
keywords: [
|
||||
repo.displayName,
|
||||
...translateSearchKeyword('auto.components.settings.repository.search.343f0a508c', 'mcp'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.repository.search.16dc7a4637',
|
||||
'model context protocol'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.repository.search.e760e3fae7',
|
||||
'.mcp.json'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.repository.search.26f42fe773',
|
||||
'.cursor/mcp.json'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.repository.search.db11b337c4',
|
||||
'.claude.json'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.repository.search.d73fb47b45',
|
||||
'.claude/mcp.json'
|
||||
)
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,169 @@
|
|||
import type { Repo } from '../../../../shared/types'
|
||||
import type { SettingsSearchEntry } from './settings-search'
|
||||
import { translate } from '@/i18n/i18n'
|
||||
import { translateSearchKeyword } from './settings-search-keywords'
|
||||
|
||||
export function getRepositoryGitHooksSearchEntries(repo: Repo): SettingsSearchEntry[] {
|
||||
return [
|
||||
{
|
||||
title: translate('auto.components.settings.repository.search.b79df26937', 'Setup Script'),
|
||||
description: translate(
|
||||
'auto.components.settings.repository.search.baaf70bb37',
|
||||
'Local and shared scripts that run after a new worktree is created.'
|
||||
),
|
||||
keywords: [
|
||||
repo.displayName,
|
||||
...translateSearchKeyword('auto.components.settings.repository.search.8655e3387b', 'hooks'),
|
||||
...translateSearchKeyword('auto.components.settings.repository.search.5590388dfa', 'setup'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.repository.search.a31b43a7f8',
|
||||
'setup script'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.repository.search.491b05d6e6',
|
||||
'setup command'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.repository.search.6b80f7d3c8',
|
||||
'local settings scripts'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.repository.search.9cad92fe77',
|
||||
'orca.yaml hooks'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.repository.search.bf460fded8', 'yaml')
|
||||
]
|
||||
},
|
||||
{
|
||||
title: translate('auto.components.settings.repository.search.bce0ca23c6', 'Archive Script'),
|
||||
description: translate(
|
||||
'auto.components.settings.repository.search.acd1157f0c',
|
||||
'Local and shared scripts that run before a worktree is archived.'
|
||||
),
|
||||
keywords: [
|
||||
repo.displayName,
|
||||
...translateSearchKeyword('auto.components.settings.repository.search.8655e3387b', 'hooks'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.repository.search.4c17787d7b',
|
||||
'archive'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.repository.search.fbfd2386e8',
|
||||
'archive script'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.repository.search.a1a4c51d58',
|
||||
'archive command'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.repository.search.6b80f7d3c8',
|
||||
'local settings scripts'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.repository.search.9cad92fe77',
|
||||
'orca.yaml hooks'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.repository.search.bf460fded8', 'yaml')
|
||||
]
|
||||
},
|
||||
{
|
||||
title: translate('auto.components.settings.repository.search.cc11699c3d', 'Advanced'),
|
||||
description: translate(
|
||||
'auto.components.settings.repository.search.d141897c90',
|
||||
'Command source and orca.yaml details.'
|
||||
),
|
||||
keywords: [
|
||||
repo.displayName,
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.repository.search.19f58d6d89',
|
||||
'advanced'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.repository.search.ed269fad69',
|
||||
'command source'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.repository.search.0432d2fb7c', 'local'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.repository.search.603c68b68c',
|
||||
'orca.yaml'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.repository.search.fcb8fa8144',
|
||||
'shared'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.repository.search.1d90a6cfbb', 'both'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.repository.search.f1e1bfa89f',
|
||||
'source'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.repository.search.5e9445bbfd',
|
||||
'authoritative'
|
||||
)
|
||||
]
|
||||
},
|
||||
{
|
||||
title: translate(
|
||||
'auto.components.settings.repository.search.cdfe398068',
|
||||
'When to Run Setup'
|
||||
),
|
||||
description: translate(
|
||||
'auto.components.settings.repository.search.c00a549e03',
|
||||
'Choose the default behavior when a setup script is available.'
|
||||
),
|
||||
keywords: [
|
||||
repo.displayName,
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.repository.search.f9d84b7971',
|
||||
'setup run policy'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.repository.search.80c490b012', 'ask'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.repository.search.a69c5cbe90',
|
||||
'run by default'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.repository.search.c5e8bdbcbb',
|
||||
'skip by default'
|
||||
)
|
||||
]
|
||||
},
|
||||
{
|
||||
title: translate(
|
||||
'auto.components.settings.repository.search.d86ea12d16',
|
||||
'Custom GitHub Issue Command'
|
||||
),
|
||||
description: translate(
|
||||
'auto.components.settings.repository.search.d42d1e49c0',
|
||||
'File-based linked-issue command configured via orca.yaml and optional local override.'
|
||||
),
|
||||
keywords: [
|
||||
repo.displayName,
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.repository.search.2011a6a4f2',
|
||||
'github issue command'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.repository.search.66b584bd6c',
|
||||
'issue command'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.repository.search.ec70364df2',
|
||||
'workflow'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.repository.search.9dc60d7f6d',
|
||||
'github'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.repository.search.603c68b68c',
|
||||
'orca.yaml'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.repository.search.bc7e504b8e',
|
||||
'.orca/issue-command'
|
||||
)
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,136 @@
|
|||
import type { Repo } from '../../../../shared/types'
|
||||
import type { SettingsSearchEntry } from './settings-search'
|
||||
import { translate } from '@/i18n/i18n'
|
||||
import { translateSearchKeyword } from './settings-search-keywords'
|
||||
|
||||
export function getRepositoryGitWorktreeSearchEntries(repo: Repo): SettingsSearchEntry[] {
|
||||
return [
|
||||
{
|
||||
title: translate(
|
||||
'auto.components.settings.repository.search.094adbe930',
|
||||
'Default Worktree Base'
|
||||
),
|
||||
description: translate(
|
||||
'auto.components.settings.repository.search.f571081ec4',
|
||||
'Default base branch or ref when creating worktrees.'
|
||||
),
|
||||
keywords: [
|
||||
repo.displayName,
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.repository.search.f41cef5083',
|
||||
'base ref'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.repository.search.9811f3d152', 'branch')
|
||||
]
|
||||
},
|
||||
{
|
||||
title: translate(
|
||||
'auto.components.settings.repository.search.443d127b5a',
|
||||
'Worktree Location'
|
||||
),
|
||||
description: translate(
|
||||
'auto.components.settings.repository.search.cd33a5525e',
|
||||
'Project-specific directory for new worktrees.'
|
||||
),
|
||||
keywords: [
|
||||
repo.displayName,
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.repository.search.f3e6dee5fe',
|
||||
'worktree path'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.repository.search.a325a89dff',
|
||||
'workspace path'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.repository.search.1ff4f12c0c',
|
||||
'directory'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.repository.search.58d8bca414',
|
||||
'relative'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.repository.search.4733ec2395',
|
||||
'../worktrees'
|
||||
)
|
||||
]
|
||||
},
|
||||
{
|
||||
title: translate(
|
||||
'auto.components.settings.repository.search.1f0f20bbb6',
|
||||
'Sparse Checkout Presets'
|
||||
),
|
||||
description: translate(
|
||||
'auto.components.settings.repository.search.90a331fd68',
|
||||
'Saved directory sets for sparse worktree creation.'
|
||||
),
|
||||
keywords: [
|
||||
repo.displayName,
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.repository.search.4f3c0230c2',
|
||||
'sparse'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.repository.search.aa42616e3d',
|
||||
'checkout'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.repository.search.095fca94fe',
|
||||
'preset'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.repository.search.9f5ae26ccd',
|
||||
'presets'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.repository.search.1ff4f12c0c',
|
||||
'directory'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.repository.search.4e2529722c',
|
||||
'directories'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.repository.search.4b9a18a56d',
|
||||
'monorepo'
|
||||
)
|
||||
]
|
||||
},
|
||||
{
|
||||
title: translate(
|
||||
'auto.components.settings.repository.search.01b3377ebc',
|
||||
'Worktree Symlinks'
|
||||
),
|
||||
description: translate(
|
||||
'auto.components.settings.repository.search.ed885e589f',
|
||||
'Paths to symlink from the primary checkout into newly created worktrees.'
|
||||
),
|
||||
keywords: [
|
||||
repo.displayName,
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.repository.search.c06adcf136',
|
||||
'symlink'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.repository.search.7e228fc439',
|
||||
'symlinks'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.repository.search.f1c53f2820',
|
||||
'worktree'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.repository.search.3c180a251c', 'link'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.repository.search.fcb8fa8144',
|
||||
'shared'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.repository.search.0a3a582794', 'env'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.repository.search.84da7fa2d7',
|
||||
'node_modules'
|
||||
)
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -2,185 +2,92 @@ import type { Repo } from '../../../../shared/types'
|
|||
import { isFolderRepo } from '../../../../shared/repo-kind'
|
||||
import type { SettingsSearchEntry } from './settings-search'
|
||||
import { translate } from '@/i18n/i18n'
|
||||
import { translateSearchKeyword } from './settings-search-keywords'
|
||||
import { getRepositoryGitAuthorSearchEntries } from './repository-git-author-search-entries'
|
||||
import { getRepositoryGitHooksSearchEntries } from './repository-git-hooks-search-entries'
|
||||
import { getRepositoryGitWorktreeSearchEntries } from './repository-git-worktree-search-entries'
|
||||
|
||||
export function getRepositoryPaneSearchEntries(repo: Repo): SettingsSearchEntry[] {
|
||||
const isFolder = isFolderRepo(repo)
|
||||
return [
|
||||
{
|
||||
title: translate("auto.components.settings.repository.search.7e1e456a95", "Display Name"),
|
||||
description: translate("auto.components.settings.repository.search.883aad2801", "Project-specific display details for the sidebar and tabs."),
|
||||
keywords: [repo.displayName, repo.path, translate("auto.components.settings.repository.search.92af66c7ce", "project name"), translate("auto.components.settings.repository.search.cd73b976d7", "repository name")]
|
||||
},
|
||||
{
|
||||
title: translate("auto.components.settings.repository.search.b24f00294a", "Project Icon"),
|
||||
description: translate("auto.components.settings.repository.search.a1f3a2bd47", "Project icon and color used in the sidebar and tabs."),
|
||||
title: translate('auto.components.settings.repository.search.7e1e456a95', 'Display Name'),
|
||||
description: translate(
|
||||
'auto.components.settings.repository.search.883aad2801',
|
||||
'Project-specific display details for the sidebar and tabs.'
|
||||
),
|
||||
keywords: [
|
||||
repo.displayName,
|
||||
translate("auto.components.settings.repository.search.6438a94c63", "project icon"),
|
||||
translate("auto.components.settings.repository.search.b2546efab5", "repository icon"),
|
||||
translate("auto.components.settings.repository.search.8d045419b1", "color"),
|
||||
translate("auto.components.settings.repository.search.6d8de2f090", "hex"),
|
||||
translate("auto.components.settings.repository.search.c1075178cf", "badge"),
|
||||
translate("auto.components.settings.repository.search.cb4b4de666", "avatar"),
|
||||
translate("auto.components.settings.repository.search.9dc60d7f6d", "github"),
|
||||
translate("auto.components.settings.repository.search.1e73e840ff", "emoji"),
|
||||
translate("auto.components.settings.repository.search.27733eb6c1", "favicon")
|
||||
repo.path,
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.repository.search.92af66c7ce',
|
||||
'project name'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.repository.search.cd73b976d7',
|
||||
'repository name'
|
||||
)
|
||||
]
|
||||
},
|
||||
{
|
||||
title: translate('auto.components.settings.repository.search.b24f00294a', 'Project Icon'),
|
||||
description: translate(
|
||||
'auto.components.settings.repository.search.a1f3a2bd47',
|
||||
'Project icon and color used in the sidebar and tabs.'
|
||||
),
|
||||
keywords: [
|
||||
repo.displayName,
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.repository.search.6438a94c63',
|
||||
'project icon'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.repository.search.b2546efab5',
|
||||
'repository icon'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.repository.search.8d045419b1', 'color'),
|
||||
...translateSearchKeyword('auto.components.settings.repository.search.6d8de2f090', 'hex'),
|
||||
...translateSearchKeyword('auto.components.settings.repository.search.c1075178cf', 'badge'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.repository.search.cb4b4de666',
|
||||
'avatar'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.repository.search.9dc60d7f6d',
|
||||
'github'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.repository.search.1e73e840ff', 'emoji'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.repository.search.27733eb6c1',
|
||||
'favicon'
|
||||
)
|
||||
]
|
||||
},
|
||||
...(isFolder ? [] : getRepositoryGitWorktreeSearchEntries(repo)),
|
||||
{
|
||||
title: translate('auto.components.settings.repository.search.c5266c2c9d', 'Remove Project'),
|
||||
description: translate(
|
||||
'auto.components.settings.repository.search.c86478c3d8',
|
||||
'Remove this project from Orca.'
|
||||
),
|
||||
keywords: [
|
||||
repo.displayName,
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.repository.search.3067595d82',
|
||||
'delete'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.repository.search.6469de5368',
|
||||
'project'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.repository.search.cc876ca5f2',
|
||||
'repository'
|
||||
)
|
||||
]
|
||||
},
|
||||
...(isFolder
|
||||
? []
|
||||
: [
|
||||
{
|
||||
title: translate("auto.components.settings.repository.search.094adbe930", "Default Worktree Base"),
|
||||
description: translate("auto.components.settings.repository.search.f571081ec4", "Default base branch or ref when creating worktrees."),
|
||||
keywords: [repo.displayName, translate("auto.components.settings.repository.search.f41cef5083", "base ref"), translate("auto.components.settings.repository.search.9811f3d152", "branch")]
|
||||
},
|
||||
{
|
||||
title: translate("auto.components.settings.repository.search.443d127b5a", "Worktree Location"),
|
||||
description: translate("auto.components.settings.repository.search.cd33a5525e", "Project-specific directory for new worktrees."),
|
||||
keywords: [
|
||||
repo.displayName,
|
||||
translate("auto.components.settings.repository.search.f3e6dee5fe", "worktree path"),
|
||||
translate("auto.components.settings.repository.search.a325a89dff", "workspace path"),
|
||||
translate("auto.components.settings.repository.search.1ff4f12c0c", "directory"),
|
||||
translate("auto.components.settings.repository.search.58d8bca414", "relative"),
|
||||
translate("auto.components.settings.repository.search.4733ec2395", "../worktrees")
|
||||
]
|
||||
},
|
||||
{
|
||||
title: translate("auto.components.settings.repository.search.1f0f20bbb6", "Sparse Checkout Presets"),
|
||||
description: translate("auto.components.settings.repository.search.90a331fd68", "Saved directory sets for sparse worktree creation."),
|
||||
keywords: [
|
||||
repo.displayName,
|
||||
translate("auto.components.settings.repository.search.4f3c0230c2", "sparse"),
|
||||
translate("auto.components.settings.repository.search.aa42616e3d", "checkout"),
|
||||
translate("auto.components.settings.repository.search.095fca94fe", "preset"),
|
||||
translate("auto.components.settings.repository.search.9f5ae26ccd", "presets"),
|
||||
translate("auto.components.settings.repository.search.1ff4f12c0c", "directory"),
|
||||
translate("auto.components.settings.repository.search.4e2529722c", "directories"),
|
||||
translate("auto.components.settings.repository.search.4b9a18a56d", "monorepo")
|
||||
]
|
||||
}
|
||||
]),
|
||||
{
|
||||
title: translate("auto.components.settings.repository.search.c5266c2c9d", "Remove Project"),
|
||||
description: translate("auto.components.settings.repository.search.c86478c3d8", "Remove this project from Orca."),
|
||||
keywords: [repo.displayName, translate("auto.components.settings.repository.search.3067595d82", "delete"), translate("auto.components.settings.repository.search.6469de5368", "project"), translate("auto.components.settings.repository.search.cc876ca5f2", "repository")]
|
||||
},
|
||||
...(isFolder
|
||||
? []
|
||||
: [
|
||||
{
|
||||
title: translate("auto.components.settings.repository.search.eec3995dc6", "Git AI Author"),
|
||||
description: translate("auto.components.settings.repository.search.6cc5c65e64", "Project-specific git generation overrides."),
|
||||
keywords: [
|
||||
repo.displayName,
|
||||
translate("auto.components.settings.repository.search.a47f51127e", "source control"),
|
||||
translate("auto.components.settings.repository.search.cfad7ce5f3", "ai"),
|
||||
translate("auto.components.settings.repository.search.eec39b3de6", "commit message"),
|
||||
translate("auto.components.settings.repository.search.5ff7fe1ade", "pull request"),
|
||||
translate("auto.components.settings.repository.search.8068d8d0f1", "pr"),
|
||||
translate("auto.components.settings.repository.search.917dce844a", "branch name"),
|
||||
translate("auto.components.settings.repository.search.130d76dc16", "rename"),
|
||||
translate("auto.components.settings.repository.search.fa3131f223", "model"),
|
||||
translate("auto.components.settings.repository.search.fff8834983", "prompt")
|
||||
]
|
||||
},
|
||||
{
|
||||
title: translate("auto.components.settings.repository.search.01b3377ebc", "Worktree Symlinks"),
|
||||
description: translate("auto.components.settings.repository.search.ed885e589f", "Paths to symlink from the primary checkout into newly created worktrees."),
|
||||
keywords: [
|
||||
repo.displayName,
|
||||
translate("auto.components.settings.repository.search.c06adcf136", "symlink"),
|
||||
translate("auto.components.settings.repository.search.7e228fc439", "symlinks"),
|
||||
translate("auto.components.settings.repository.search.f1c53f2820", "worktree"),
|
||||
translate("auto.components.settings.repository.search.3c180a251c", "link"),
|
||||
translate("auto.components.settings.repository.search.fcb8fa8144", "shared"),
|
||||
translate("auto.components.settings.repository.search.0a3a582794", "env"),
|
||||
translate("auto.components.settings.repository.search.84da7fa2d7", "node_modules")
|
||||
]
|
||||
},
|
||||
{
|
||||
title: translate("auto.components.settings.repository.search.31bd0a2420", "MCP Configs"),
|
||||
description: translate("auto.components.settings.repository.search.3c31801626", "Inspect project-level MCP server config files."),
|
||||
keywords: [
|
||||
repo.displayName,
|
||||
translate("auto.components.settings.repository.search.343f0a508c", "mcp"),
|
||||
translate("auto.components.settings.repository.search.16dc7a4637", "model context protocol"),
|
||||
translate("auto.components.settings.repository.search.e760e3fae7", ".mcp.json"),
|
||||
translate("auto.components.settings.repository.search.26f42fe773", ".cursor/mcp.json"),
|
||||
translate("auto.components.settings.repository.search.db11b337c4", ".claude.json"),
|
||||
translate("auto.components.settings.repository.search.d73fb47b45", ".claude/mcp.json")
|
||||
]
|
||||
},
|
||||
{
|
||||
title: translate("auto.components.settings.repository.search.b79df26937", "Setup Script"),
|
||||
description: translate("auto.components.settings.repository.search.baaf70bb37", "Local and shared scripts that run after a new worktree is created."),
|
||||
keywords: [
|
||||
repo.displayName,
|
||||
translate("auto.components.settings.repository.search.8655e3387b", "hooks"),
|
||||
translate("auto.components.settings.repository.search.5590388dfa", "setup"),
|
||||
translate("auto.components.settings.repository.search.a31b43a7f8", "setup script"),
|
||||
translate("auto.components.settings.repository.search.491b05d6e6", "setup command"),
|
||||
translate("auto.components.settings.repository.search.6b80f7d3c8", "local settings scripts"),
|
||||
translate("auto.components.settings.repository.search.9cad92fe77", "orca.yaml hooks"),
|
||||
translate("auto.components.settings.repository.search.bf460fded8", "yaml")
|
||||
]
|
||||
},
|
||||
{
|
||||
title: translate("auto.components.settings.repository.search.bce0ca23c6", "Archive Script"),
|
||||
description: translate("auto.components.settings.repository.search.acd1157f0c", "Local and shared scripts that run before a worktree is archived."),
|
||||
keywords: [
|
||||
repo.displayName,
|
||||
translate("auto.components.settings.repository.search.8655e3387b", "hooks"),
|
||||
translate("auto.components.settings.repository.search.4c17787d7b", "archive"),
|
||||
translate("auto.components.settings.repository.search.fbfd2386e8", "archive script"),
|
||||
translate("auto.components.settings.repository.search.a1a4c51d58", "archive command"),
|
||||
translate("auto.components.settings.repository.search.6b80f7d3c8", "local settings scripts"),
|
||||
translate("auto.components.settings.repository.search.9cad92fe77", "orca.yaml hooks"),
|
||||
translate("auto.components.settings.repository.search.bf460fded8", "yaml")
|
||||
]
|
||||
},
|
||||
{
|
||||
title: translate("auto.components.settings.repository.search.cc11699c3d", "Advanced"),
|
||||
description: translate("auto.components.settings.repository.search.d141897c90", "Command source and orca.yaml details."),
|
||||
keywords: [
|
||||
repo.displayName,
|
||||
translate("auto.components.settings.repository.search.19f58d6d89", "advanced"),
|
||||
translate("auto.components.settings.repository.search.ed269fad69", "command source"),
|
||||
translate("auto.components.settings.repository.search.0432d2fb7c", "local"),
|
||||
translate("auto.components.settings.repository.search.603c68b68c", "orca.yaml"),
|
||||
translate("auto.components.settings.repository.search.fcb8fa8144", "shared"),
|
||||
translate("auto.components.settings.repository.search.1d90a6cfbb", "both"),
|
||||
translate("auto.components.settings.repository.search.f1e1bfa89f", "source"),
|
||||
translate("auto.components.settings.repository.search.5e9445bbfd", "authoritative")
|
||||
]
|
||||
},
|
||||
{
|
||||
title: translate("auto.components.settings.repository.search.cdfe398068", "When to Run Setup"),
|
||||
description: translate("auto.components.settings.repository.search.c00a549e03", "Choose the default behavior when a setup script is available."),
|
||||
keywords: [
|
||||
repo.displayName,
|
||||
translate("auto.components.settings.repository.search.f9d84b7971", "setup run policy"),
|
||||
translate("auto.components.settings.repository.search.80c490b012", "ask"),
|
||||
translate("auto.components.settings.repository.search.a69c5cbe90", "run by default"),
|
||||
translate("auto.components.settings.repository.search.c5e8bdbcbb", "skip by default")
|
||||
]
|
||||
},
|
||||
{
|
||||
title: translate("auto.components.settings.repository.search.d86ea12d16", "Custom GitHub Issue Command"),
|
||||
description:
|
||||
translate("auto.components.settings.repository.search.d42d1e49c0", "File-based linked-issue command configured via orca.yaml and optional local override."),
|
||||
keywords: [
|
||||
repo.displayName,
|
||||
translate("auto.components.settings.repository.search.2011a6a4f2", "github issue command"),
|
||||
translate("auto.components.settings.repository.search.66b584bd6c", "issue command"),
|
||||
translate("auto.components.settings.repository.search.ec70364df2", "workflow"),
|
||||
translate("auto.components.settings.repository.search.9dc60d7f6d", "github"),
|
||||
translate("auto.components.settings.repository.search.603c68b68c", "orca.yaml"),
|
||||
translate("auto.components.settings.repository.search.bc7e504b8e", ".orca/issue-command")
|
||||
]
|
||||
}
|
||||
])
|
||||
: [...getRepositoryGitAuthorSearchEntries(repo), ...getRepositoryGitHooksSearchEntries(repo)])
|
||||
]
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
import type { SettingsSearchEntry } from './settings-search'
|
||||
import { translate } from '@/i18n/i18n'
|
||||
import { translateSearchKeyword } from './settings-search-keywords'
|
||||
import { createLocalizedCatalog } from '@/i18n/localized-catalog'
|
||||
|
||||
export const getRuntimeEnvironmentsSearchEntry = createLocalizedCatalog(
|
||||
|
|
@ -13,17 +14,50 @@ export const getRuntimeEnvironmentsSearchEntry = createLocalizedCatalog(
|
|||
'Choose local desktop, add a saved remote Orca server, or generate a pairing URL.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.runtime.environments.search.d198440ce3', 'runtime'),
|
||||
translate('auto.components.settings.runtime.environments.search.ebd5369acf', 'environment'),
|
||||
translate('auto.components.settings.runtime.environments.search.09568ccc65', 'server'),
|
||||
translate('auto.components.settings.runtime.environments.search.d760866285', 'client'),
|
||||
translate('auto.components.settings.runtime.environments.search.5cd7dca3b8', 'remote'),
|
||||
translate('auto.components.settings.runtime.environments.search.104f4d7dbd', 'pairing'),
|
||||
translate('auto.components.settings.runtime.environments.search.81444c4102', 'pairing url'),
|
||||
translate('auto.components.settings.runtime.environments.search.f1575f1e09', 'web client'),
|
||||
translate('auto.components.settings.runtime.environments.search.45501ff2c3', 'cloud'),
|
||||
translate('auto.components.settings.runtime.environments.search.772e3b4753', 'vm'),
|
||||
translate('auto.components.settings.runtime.environments.search.c6e5a03aa0', 'dev box')
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.runtime.environments.search.d198440ce3',
|
||||
'runtime'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.runtime.environments.search.ebd5369acf',
|
||||
'environment'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.runtime.environments.search.09568ccc65',
|
||||
'server'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.runtime.environments.search.d760866285',
|
||||
'client'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.runtime.environments.search.5cd7dca3b8',
|
||||
'remote'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.runtime.environments.search.104f4d7dbd',
|
||||
'pairing'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.runtime.environments.search.81444c4102',
|
||||
'pairing url'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.runtime.environments.search.f1575f1e09',
|
||||
'web client'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.runtime.environments.search.45501ff2c3',
|
||||
'cloud'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.runtime.environments.search.772e3b4753',
|
||||
'vm'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.runtime.environments.search.c6e5a03aa0',
|
||||
'dev box'
|
||||
)
|
||||
]
|
||||
})
|
||||
)
|
||||
|
|
@ -39,14 +73,38 @@ export const getWebRuntimeEnvironmentsSearchEntry = createLocalizedCatalog(
|
|||
'Connect this browser to a saved Orca server.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.runtime.environments.search.d198440ce3', 'runtime'),
|
||||
translate('auto.components.settings.runtime.environments.search.ebd5369acf', 'environment'),
|
||||
translate('auto.components.settings.runtime.environments.search.09568ccc65', 'server'),
|
||||
translate('auto.components.settings.runtime.environments.search.d760866285', 'client'),
|
||||
translate('auto.components.settings.runtime.environments.search.5cd7dca3b8', 'remote'),
|
||||
translate('auto.components.settings.runtime.environments.search.2bd988d041', 'pairing code'),
|
||||
translate('auto.components.settings.runtime.environments.search.45501ff2c3', 'cloud'),
|
||||
translate('auto.components.settings.runtime.environments.search.772e3b4753', 'vm')
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.runtime.environments.search.d198440ce3',
|
||||
'runtime'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.runtime.environments.search.ebd5369acf',
|
||||
'environment'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.runtime.environments.search.09568ccc65',
|
||||
'server'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.runtime.environments.search.d760866285',
|
||||
'client'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.runtime.environments.search.5cd7dca3b8',
|
||||
'remote'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.runtime.environments.search.2bd988d041',
|
||||
'pairing code'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.runtime.environments.search.45501ff2c3',
|
||||
'cloud'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.runtime.environments.search.772e3b4753',
|
||||
'vm'
|
||||
)
|
||||
]
|
||||
})
|
||||
)
|
||||
|
|
|
|||
|
|
@ -0,0 +1,53 @@
|
|||
import { beforeEach, describe, expect, it } from 'vitest'
|
||||
|
||||
import { i18n } from '@/i18n/i18n'
|
||||
import { searchKeywords, translateSearchKeyword } from './settings-search-keywords'
|
||||
|
||||
describe('settings-search-keywords', () => {
|
||||
beforeEach(async () => {
|
||||
await i18n.changeLanguage('en')
|
||||
})
|
||||
|
||||
it('returns only localized text in English UI', async () => {
|
||||
await i18n.changeLanguage('en')
|
||||
expect(translateSearchKeyword('settings.appearance.language.title', 'Language')).toEqual([
|
||||
'Language'
|
||||
])
|
||||
})
|
||||
|
||||
it('keeps English fallback and aliases in localized UI', async () => {
|
||||
await i18n.changeLanguage('ko')
|
||||
expect(
|
||||
translateSearchKeyword('settings.appearance.language.title', 'Language', {
|
||||
aliases: ['locale']
|
||||
})
|
||||
).toEqual(['언어', 'Language', 'locale'])
|
||||
})
|
||||
|
||||
it('supports english-only keyword specs for brands', async () => {
|
||||
await i18n.changeLanguage('ko')
|
||||
expect(searchKeywords([{ key: 'unused', fallback: 'github', englishOnly: true }])).toEqual([
|
||||
'github'
|
||||
])
|
||||
})
|
||||
|
||||
it('deduplicates repeated keyword variants', () => {
|
||||
expect(searchKeywords(['terminal', 'terminal', { key: 'k', fallback: 'terminal' }])).toEqual([
|
||||
'terminal'
|
||||
])
|
||||
})
|
||||
|
||||
it('indexes localized agent search synonyms in Korean UI', async () => {
|
||||
await i18n.changeLanguage('ko')
|
||||
expect(
|
||||
searchKeywords([
|
||||
{ key: 'auto.components.settings.agents.search.66b6b82eb4', fallback: 'awake' }
|
||||
])
|
||||
).toEqual(['깨어 있음', 'awake'])
|
||||
expect(
|
||||
searchKeywords([
|
||||
{ key: 'auto.components.settings.agents.search.2afd3b5858', fallback: 'enable' }
|
||||
])
|
||||
).toEqual(['활성화', 'enable'])
|
||||
})
|
||||
})
|
||||
|
|
@ -0,0 +1,50 @@
|
|||
import { i18n } from '@/i18n/i18n'
|
||||
import { translate } from '@/i18n/i18n'
|
||||
|
||||
export type SearchKeywordSpec = {
|
||||
key: string
|
||||
fallback: string
|
||||
/** Extra English aliases kept when UI is localized (brands, acronyms). */
|
||||
aliases?: string[]
|
||||
/** When true, only the fallback/aliases are indexed — no localized variant. */
|
||||
englishOnly?: boolean
|
||||
}
|
||||
|
||||
// Why: settings search should match localized copy and English aliases devs still type.
|
||||
export function translateSearchKeyword(
|
||||
key: string,
|
||||
fallback: string,
|
||||
options?: Omit<SearchKeywordSpec, 'key' | 'fallback'>
|
||||
): string[] {
|
||||
if (options?.englishOnly || i18n.language === 'en') {
|
||||
return uniqueKeywords([fallback, ...(options?.aliases ?? [])])
|
||||
}
|
||||
|
||||
const localized = translate(key, fallback)
|
||||
return uniqueKeywords([localized, fallback, ...(options?.aliases ?? [])])
|
||||
}
|
||||
|
||||
export function searchKeywords(terms: (string | SearchKeywordSpec)[]): string[] {
|
||||
return uniqueKeywords(
|
||||
terms.flatMap((term) => {
|
||||
if (typeof term === 'string') {
|
||||
return [term]
|
||||
}
|
||||
return translateSearchKeyword(term.key, term.fallback, term)
|
||||
})
|
||||
)
|
||||
}
|
||||
|
||||
export function uniqueKeywords(values: string[]): string[] {
|
||||
const seen = new Set<string>()
|
||||
const result: string[] = []
|
||||
for (const value of values) {
|
||||
const trimmed = value.trim()
|
||||
if (!trimmed || seen.has(trimmed)) {
|
||||
continue
|
||||
}
|
||||
seen.add(trimmed)
|
||||
result.push(trimmed)
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
|
@ -1,6 +1,7 @@
|
|||
import { KEYBINDING_DEFINITIONS } from '../../../../shared/keybindings'
|
||||
import type { SettingsSearchEntry } from './settings-search'
|
||||
import { translate } from '@/i18n/i18n'
|
||||
import { translateSearchKeyword } from './settings-search-keywords'
|
||||
import { createLocalizedCatalog } from '@/i18n/localized-catalog'
|
||||
|
||||
export const getTerminalShortcutPolicySearchEntry = createLocalizedCatalog(
|
||||
|
|
@ -14,15 +15,21 @@ export const getTerminalShortcutPolicySearchEntry = createLocalizedCatalog(
|
|||
'Choose whether Orca or the focused terminal wins when shortcuts overlap.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.shortcuts.search.ca6a0c2df7', 'shortcut'),
|
||||
translate('auto.components.settings.shortcuts.search.0ecba9aa5f', 'keyboard'),
|
||||
translate('auto.components.settings.shortcuts.search.7e3fc707aa', 'terminal'),
|
||||
translate('auto.components.settings.shortcuts.search.7f1b38f59a', 'tui'),
|
||||
translate('auto.components.settings.shortcuts.search.f1adebbe8c', 'shell'),
|
||||
translate('auto.components.settings.shortcuts.search.0f8cb15582', 'agent'),
|
||||
translate('auto.components.settings.shortcuts.search.0ecfc47434', 'conflict'),
|
||||
translate('auto.components.settings.shortcuts.search.afda131738', 'orca first'),
|
||||
translate('auto.components.settings.shortcuts.search.4811a8264a', 'terminal first')
|
||||
...translateSearchKeyword('auto.components.settings.shortcuts.search.ca6a0c2df7', 'shortcut'),
|
||||
...translateSearchKeyword('auto.components.settings.shortcuts.search.0ecba9aa5f', 'keyboard'),
|
||||
...translateSearchKeyword('auto.components.settings.shortcuts.search.7e3fc707aa', 'terminal'),
|
||||
...translateSearchKeyword('auto.components.settings.shortcuts.search.7f1b38f59a', 'tui'),
|
||||
...translateSearchKeyword('auto.components.settings.shortcuts.search.f1adebbe8c', 'shell'),
|
||||
...translateSearchKeyword('auto.components.settings.shortcuts.search.0f8cb15582', 'agent'),
|
||||
...translateSearchKeyword('auto.components.settings.shortcuts.search.0ecfc47434', 'conflict'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.shortcuts.search.afda131738',
|
||||
'orca first'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.shortcuts.search.4811a8264a',
|
||||
'terminal first'
|
||||
)
|
||||
]
|
||||
})
|
||||
)
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
import { translate } from '@/i18n/i18n'
|
||||
import { translateSearchKeyword } from './settings-search-keywords'
|
||||
import { createLocalizedCatalog } from '@/i18n/localized-catalog'
|
||||
|
||||
export const getSshPaneSearchEntries = createLocalizedCatalog(() => [
|
||||
|
|
@ -9,11 +10,11 @@ export const getSshPaneSearchEntries = createLocalizedCatalog(() => [
|
|||
'Manage remote SSH targets.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.ssh.search.7efd17e816', 'ssh'),
|
||||
translate('auto.components.settings.ssh.search.d4bcd497c7', 'remote'),
|
||||
translate('auto.components.settings.ssh.search.f9493b80c0', 'server'),
|
||||
translate('auto.components.settings.ssh.search.237b391f7c', 'connection'),
|
||||
translate('auto.components.settings.ssh.search.8fb1cc87cc', 'host')
|
||||
...translateSearchKeyword('auto.components.settings.ssh.search.7efd17e816', 'ssh'),
|
||||
...translateSearchKeyword('auto.components.settings.ssh.search.d4bcd497c7', 'remote'),
|
||||
...translateSearchKeyword('auto.components.settings.ssh.search.f9493b80c0', 'server'),
|
||||
...translateSearchKeyword('auto.components.settings.ssh.search.237b391f7c', 'connection'),
|
||||
...translateSearchKeyword('auto.components.settings.ssh.search.8fb1cc87cc', 'host')
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -23,12 +24,12 @@ export const getSshPaneSearchEntries = createLocalizedCatalog(() => [
|
|||
'Add a new remote SSH target.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.ssh.search.7efd17e816', 'ssh'),
|
||||
translate('auto.components.settings.ssh.search.f7b6383aec', 'add'),
|
||||
translate('auto.components.settings.ssh.search.00d1fda01a', 'new'),
|
||||
translate('auto.components.settings.ssh.search.09395490af', 'target'),
|
||||
translate('auto.components.settings.ssh.search.8fb1cc87cc', 'host'),
|
||||
translate('auto.components.settings.ssh.search.f9493b80c0', 'server')
|
||||
...translateSearchKeyword('auto.components.settings.ssh.search.7efd17e816', 'ssh'),
|
||||
...translateSearchKeyword('auto.components.settings.ssh.search.f7b6383aec', 'add'),
|
||||
...translateSearchKeyword('auto.components.settings.ssh.search.00d1fda01a', 'new'),
|
||||
...translateSearchKeyword('auto.components.settings.ssh.search.09395490af', 'target'),
|
||||
...translateSearchKeyword('auto.components.settings.ssh.search.8fb1cc87cc', 'host'),
|
||||
...translateSearchKeyword('auto.components.settings.ssh.search.f9493b80c0', 'server')
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -38,10 +39,10 @@ export const getSshPaneSearchEntries = createLocalizedCatalog(() => [
|
|||
'Import hosts from ~/.ssh/config.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.ssh.search.7efd17e816', 'ssh'),
|
||||
translate('auto.components.settings.ssh.search.3b12e064a4', 'import'),
|
||||
translate('auto.components.settings.ssh.search.5220501141', 'config'),
|
||||
translate('auto.components.settings.ssh.search.2cd40ba0d0', 'hosts')
|
||||
...translateSearchKeyword('auto.components.settings.ssh.search.7efd17e816', 'ssh'),
|
||||
...translateSearchKeyword('auto.components.settings.ssh.search.3b12e064a4', 'import'),
|
||||
...translateSearchKeyword('auto.components.settings.ssh.search.5220501141', 'config'),
|
||||
...translateSearchKeyword('auto.components.settings.ssh.search.2cd40ba0d0', 'hosts')
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -51,10 +52,10 @@ export const getSshPaneSearchEntries = createLocalizedCatalog(() => [
|
|||
'Test connectivity to an SSH target.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.ssh.search.7efd17e816', 'ssh'),
|
||||
translate('auto.components.settings.ssh.search.8cb870b109', 'test'),
|
||||
translate('auto.components.settings.ssh.search.237b391f7c', 'connection'),
|
||||
translate('auto.components.settings.ssh.search.d41f296f64', 'ping')
|
||||
...translateSearchKeyword('auto.components.settings.ssh.search.7efd17e816', 'ssh'),
|
||||
...translateSearchKeyword('auto.components.settings.ssh.search.8cb870b109', 'test'),
|
||||
...translateSearchKeyword('auto.components.settings.ssh.search.237b391f7c', 'connection'),
|
||||
...translateSearchKeyword('auto.components.settings.ssh.search.d41f296f64', 'ping')
|
||||
]
|
||||
}
|
||||
])
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
import { translate } from '@/i18n/i18n'
|
||||
import { translateSearchKeyword } from './settings-search-keywords'
|
||||
import { createLocalizedCatalog } from '@/i18n/localized-catalog'
|
||||
|
||||
export const getTasksPaneSearchEntries = createLocalizedCatalog(() => [
|
||||
|
|
@ -9,16 +10,16 @@ export const getTasksPaneSearchEntries = createLocalizedCatalog(() => [
|
|||
'Choose which task providers appear in the Tasks page and sidebar shortcuts.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.tasks.search.2ec54bee51', 'tasks'),
|
||||
translate('auto.components.settings.tasks.search.cf0e3e0c2f', 'provider'),
|
||||
translate('auto.components.settings.tasks.search.3d81c26d78', 'source'),
|
||||
translate('auto.components.settings.tasks.search.c10ac2125e', 'github'),
|
||||
translate('auto.components.settings.tasks.search.11f001cdd4', 'gitlab'),
|
||||
translate('auto.components.settings.tasks.search.412ec3c702', 'linear'),
|
||||
translate('auto.components.settings.tasks.search.5430396e11', 'jira'),
|
||||
translate('auto.components.settings.tasks.search.604d8e4089', 'atlassian'),
|
||||
translate('auto.components.settings.tasks.search.44083ae418', 'display'),
|
||||
translate('auto.components.settings.tasks.search.58cda6f9c0', 'hide')
|
||||
...translateSearchKeyword('auto.components.settings.tasks.search.2ec54bee51', 'tasks'),
|
||||
...translateSearchKeyword('auto.components.settings.tasks.search.cf0e3e0c2f', 'provider'),
|
||||
...translateSearchKeyword('auto.components.settings.tasks.search.3d81c26d78', 'source'),
|
||||
...translateSearchKeyword('auto.components.settings.tasks.search.c10ac2125e', 'github'),
|
||||
...translateSearchKeyword('auto.components.settings.tasks.search.11f001cdd4', 'gitlab'),
|
||||
...translateSearchKeyword('auto.components.settings.tasks.search.412ec3c702', 'linear'),
|
||||
...translateSearchKeyword('auto.components.settings.tasks.search.5430396e11', 'jira'),
|
||||
...translateSearchKeyword('auto.components.settings.tasks.search.604d8e4089', 'atlassian'),
|
||||
...translateSearchKeyword('auto.components.settings.tasks.search.44083ae418', 'display'),
|
||||
...translateSearchKeyword('auto.components.settings.tasks.search.58cda6f9c0', 'hide')
|
||||
]
|
||||
}
|
||||
])
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
import { translate } from '@/i18n/i18n'
|
||||
import { translateSearchKeyword } from './settings-search-keywords'
|
||||
import { createLocalizedCatalog } from '@/i18n/localized-catalog'
|
||||
|
||||
export const getTerminalAdvancedSearchEntries = createLocalizedCatalog(() => [
|
||||
|
|
@ -9,10 +10,13 @@ export const getTerminalAdvancedSearchEntries = createLocalizedCatalog(() => [
|
|||
'Maximum terminal scrollback buffer size.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.terminal.search.f66a7cf715', 'terminal'),
|
||||
translate('auto.components.settings.terminal.search.cde233f5da', 'scrollback'),
|
||||
translate('auto.components.settings.terminal.search.fffdff40a7', 'buffer'),
|
||||
translate('auto.components.settings.terminal.search.56fff3d113', 'memory')
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.f66a7cf715', 'terminal'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.search.cde233f5da',
|
||||
'scrollback'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.fffdff40a7', 'buffer'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.56fff3d113', 'memory')
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -22,11 +26,14 @@ export const getTerminalAdvancedSearchEntries = createLocalizedCatalog(() => [
|
|||
'Characters treated as word boundaries for double-click selection.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.terminal.search.7286cd2566', 'word'),
|
||||
translate('auto.components.settings.terminal.search.d4aeafac10', 'separator'),
|
||||
translate('auto.components.settings.terminal.search.4ed3e239a8', 'boundary'),
|
||||
translate('auto.components.settings.terminal.search.d2a366c7f9', 'double-click'),
|
||||
translate('auto.components.settings.terminal.search.affb14efd4', 'selection')
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.7286cd2566', 'word'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.d4aeafac10', 'separator'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.4ed3e239a8', 'boundary'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.search.d2a366c7f9',
|
||||
'double-click'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.affb14efd4', 'selection')
|
||||
]
|
||||
}
|
||||
])
|
||||
|
|
@ -39,19 +46,22 @@ export const getTerminalMacOptionSearchEntries = createLocalizedCatalog(() => [
|
|||
"Controls whether the macOS Option key sends Alt/Esc sequences or composes characters. Mirrors Ghostty's macos-option-as-alt."
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.terminal.search.f66a7cf715', 'terminal'),
|
||||
translate('auto.components.settings.terminal.search.b37edfc65a', 'option'),
|
||||
translate('auto.components.settings.terminal.search.c4427dc5ff', 'alt'),
|
||||
translate('auto.components.settings.terminal.search.38f1b4f4cb', 'key'),
|
||||
translate('auto.components.settings.terminal.search.7ace5beec9', 'meta'),
|
||||
translate('auto.components.settings.terminal.search.983d45cf4c', 'compose'),
|
||||
translate('auto.components.settings.terminal.search.1ab57a0fbd', 'mac'),
|
||||
translate('auto.components.settings.terminal.search.d8d6f7a3c5', 'macos'),
|
||||
translate('auto.components.settings.terminal.search.abaa24752d', 'keyboard'),
|
||||
translate('auto.components.settings.terminal.search.dd4f6cb541', 'german'),
|
||||
translate('auto.components.settings.terminal.search.b3b94cfcb5', 'international'),
|
||||
translate('auto.components.settings.terminal.search.fae142a354', 'readline'),
|
||||
translate('auto.components.settings.terminal.search.82b63d07fe', 'ghostty')
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.f66a7cf715', 'terminal'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.b37edfc65a', 'option'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.c4427dc5ff', 'alt'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.38f1b4f4cb', 'key'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.7ace5beec9', 'meta'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.983d45cf4c', 'compose'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.1ab57a0fbd', 'mac'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.d8d6f7a3c5', 'macos'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.abaa24752d', 'keyboard'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.dd4f6cb541', 'german'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.search.b3b94cfcb5',
|
||||
'international'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.fae142a354', 'readline'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.82b63d07fe', 'ghostty')
|
||||
]
|
||||
}
|
||||
])
|
||||
|
|
@ -67,15 +77,15 @@ export const getTerminalMacYenSearchEntries = createLocalizedCatalog(() => [
|
|||
'Controls whether pressing the JIS Yen (¥) key sends a backslash (\\) instead.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.terminal.search.f66a7cf715', 'terminal'),
|
||||
translate('auto.components.settings.terminal.search.9c35f56625', 'yen'),
|
||||
translate('auto.components.settings.terminal.search.98059d0944', 'backslash'),
|
||||
translate('auto.components.settings.terminal.search.24f7977756', 'japanese'),
|
||||
translate('auto.components.settings.terminal.search.abaa24752d', 'keyboard'),
|
||||
translate('auto.components.settings.terminal.search.1ab57a0fbd', 'mac'),
|
||||
translate('auto.components.settings.terminal.search.d8d6f7a3c5', 'macos'),
|
||||
translate('auto.components.settings.terminal.search.b495dc6a9f', 'jis'),
|
||||
translate('auto.components.settings.terminal.search.4cec42dbf7', 'intl')
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.f66a7cf715', 'terminal'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.9c35f56625', 'yen'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.98059d0944', 'backslash'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.24f7977756', 'japanese'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.abaa24752d', 'keyboard'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.1ab57a0fbd', 'mac'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.d8d6f7a3c5', 'macos'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.b495dc6a9f', 'jis'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.4cec42dbf7', 'intl')
|
||||
]
|
||||
}
|
||||
])
|
||||
|
|
@ -88,11 +98,11 @@ export const getTerminalGhosttyImportSearchEntries = createLocalizedCatalog(() =
|
|||
'One-time import of supported Ghostty terminal settings.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.terminal.search.82b63d07fe', 'ghostty'),
|
||||
translate('auto.components.settings.terminal.search.fd752b3cac', 'import'),
|
||||
translate('auto.components.settings.terminal.search.f66a7cf715', 'terminal'),
|
||||
translate('auto.components.settings.terminal.search.2ade3ea490', 'config'),
|
||||
translate('auto.components.settings.terminal.search.10f9fb6fea', 'settings')
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.82b63d07fe', 'ghostty'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.fd752b3cac', 'import'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.f66a7cf715', 'terminal'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.2ade3ea490', 'config'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.10f9fb6fea', 'settings')
|
||||
]
|
||||
}
|
||||
])
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
import { translate } from '@/i18n/i18n'
|
||||
import { translateSearchKeyword } from './settings-search-keywords'
|
||||
import { createLocalizedCatalog } from '@/i18n/localized-catalog'
|
||||
|
||||
export const getTerminalClipboardSearchEntries = createLocalizedCatalog(() => [
|
||||
|
|
@ -12,16 +13,46 @@ export const getTerminalClipboardSearchEntries = createLocalizedCatalog(() => [
|
|||
'Automatically copy terminal selections to the clipboard as soon as a selection is made.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.terminal.clipboard.search.10d73e22d3', 'clipboard'),
|
||||
translate('auto.components.settings.terminal.clipboard.search.a38508c419', 'copy'),
|
||||
translate('auto.components.settings.terminal.clipboard.search.797fdfe4ca', 'select'),
|
||||
translate('auto.components.settings.terminal.clipboard.search.c38c18be15', 'selection'),
|
||||
translate('auto.components.settings.terminal.clipboard.search.664789b73a', 'auto'),
|
||||
translate('auto.components.settings.terminal.clipboard.search.e87c6d776d', 'automatic'),
|
||||
translate('auto.components.settings.terminal.clipboard.search.737cef6de1', 'x11'),
|
||||
translate('auto.components.settings.terminal.clipboard.search.cf83ac3dbd', 'linux'),
|
||||
translate('auto.components.settings.terminal.clipboard.search.4043e294d2', 'gnome'),
|
||||
translate('auto.components.settings.terminal.clipboard.search.5fb3512e8c', 'paste')
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.clipboard.search.10d73e22d3',
|
||||
'clipboard'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.clipboard.search.a38508c419',
|
||||
'copy'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.clipboard.search.797fdfe4ca',
|
||||
'select'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.clipboard.search.c38c18be15',
|
||||
'selection'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.clipboard.search.664789b73a',
|
||||
'auto'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.clipboard.search.e87c6d776d',
|
||||
'automatic'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.clipboard.search.737cef6de1',
|
||||
'x11'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.clipboard.search.cf83ac3dbd',
|
||||
'linux'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.clipboard.search.4043e294d2',
|
||||
'gnome'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.clipboard.search.5fb3512e8c',
|
||||
'paste'
|
||||
)
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -34,17 +65,50 @@ export const getTerminalClipboardSearchEntries = createLocalizedCatalog(() => [
|
|||
'Let programs in the terminal copy to the system clipboard through OSC 52, including over SSH.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.terminal.clipboard.search.62d1208b90', 'osc 52'),
|
||||
translate('auto.components.settings.terminal.clipboard.search.9dfc125cd3', 'osc52'),
|
||||
translate('auto.components.settings.terminal.clipboard.search.10d73e22d3', 'clipboard'),
|
||||
translate('auto.components.settings.terminal.clipboard.search.5ffcd13c90', 'tmux'),
|
||||
translate('auto.components.settings.terminal.clipboard.search.2061d8db1a', 'neovim'),
|
||||
translate('auto.components.settings.terminal.clipboard.search.64533e30cc', 'nvim'),
|
||||
translate('auto.components.settings.terminal.clipboard.search.9fda309db9', 'fzf'),
|
||||
translate('auto.components.settings.terminal.clipboard.search.043b32faa1', 'ssh'),
|
||||
translate('auto.components.settings.terminal.clipboard.search.d106f44fb4', 'remote'),
|
||||
translate('auto.components.settings.terminal.clipboard.search.a38508c419', 'copy'),
|
||||
translate('auto.components.settings.terminal.clipboard.search.5fb3512e8c', 'paste')
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.clipboard.search.62d1208b90',
|
||||
'osc 52'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.clipboard.search.9dfc125cd3',
|
||||
'osc52'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.clipboard.search.10d73e22d3',
|
||||
'clipboard'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.clipboard.search.5ffcd13c90',
|
||||
'tmux'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.clipboard.search.2061d8db1a',
|
||||
'neovim'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.clipboard.search.64533e30cc',
|
||||
'nvim'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.clipboard.search.9fda309db9',
|
||||
'fzf'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.clipboard.search.043b32faa1',
|
||||
'ssh'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.clipboard.search.d106f44fb4',
|
||||
'remote'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.clipboard.search.a38508c419',
|
||||
'copy'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.clipboard.search.5fb3512e8c',
|
||||
'paste'
|
||||
)
|
||||
]
|
||||
}
|
||||
])
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
import { getTerminalClipboardSearchEntries } from './terminal-clipboard-search'
|
||||
import { translate } from '@/i18n/i18n'
|
||||
import { translateSearchKeyword } from './settings-search-keywords'
|
||||
import { createLocalizedCatalog } from '@/i18n/localized-catalog'
|
||||
|
||||
export const getTerminalPaneAppearanceSearchEntries = createLocalizedCatalog(() => [
|
||||
|
|
@ -13,9 +14,9 @@ export const getTerminalPaneAppearanceSearchEntries = createLocalizedCatalog(()
|
|||
'Opacity applied to panes that are not currently active.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.terminal.search.846a7a1204', 'pane'),
|
||||
translate('auto.components.settings.terminal.search.46d99ef4bb', 'opacity'),
|
||||
translate('auto.components.settings.terminal.search.6c4c85ba43', 'dimming')
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.846a7a1204', 'pane'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.46d99ef4bb', 'opacity'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.6c4c85ba43', 'dimming')
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -25,9 +26,9 @@ export const getTerminalPaneAppearanceSearchEntries = createLocalizedCatalog(()
|
|||
'Thickness of the pane divider line.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.terminal.search.846a7a1204', 'pane'),
|
||||
translate('auto.components.settings.terminal.search.781f49d942', 'divider'),
|
||||
translate('auto.components.settings.terminal.search.f637a7dee9', 'thickness')
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.846a7a1204', 'pane'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.781f49d942', 'divider'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.f637a7dee9', 'thickness')
|
||||
]
|
||||
}
|
||||
])
|
||||
|
|
@ -40,13 +41,13 @@ export const getTerminalPaneInteractionSearchEntries = createLocalizedCatalog(()
|
|||
"Hovering a terminal pane activates it without needing to click. Mirrors Ghostty's focus-follows-mouse setting. Selections and window switching stay safe."
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.terminal.search.f5d1e3d472', 'focus'),
|
||||
translate('auto.components.settings.terminal.search.b5116e7b12', 'follows'),
|
||||
translate('auto.components.settings.terminal.search.ea364ce6e4', 'mouse'),
|
||||
translate('auto.components.settings.terminal.search.d1fa00a9cb', 'hover'),
|
||||
translate('auto.components.settings.terminal.search.846a7a1204', 'pane'),
|
||||
translate('auto.components.settings.terminal.search.82b63d07fe', 'ghostty'),
|
||||
translate('auto.components.settings.terminal.search.f036794286', 'active')
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.f5d1e3d472', 'focus'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.b5116e7b12', 'follows'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.ea364ce6e4', 'mouse'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.d1fa00a9cb', 'hover'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.846a7a1204', 'pane'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.82b63d07fe', 'ghostty'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.f036794286', 'active')
|
||||
]
|
||||
},
|
||||
...getTerminalClipboardSearchEntries()
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
import { translate } from '@/i18n/i18n'
|
||||
import { translateSearchKeyword } from './settings-search-keywords'
|
||||
import { createLocalizedCatalog } from '@/i18n/localized-catalog'
|
||||
|
||||
export const getTerminalDarkThemeSearchEntries = createLocalizedCatalog(() => [
|
||||
|
|
@ -9,10 +10,10 @@ export const getTerminalDarkThemeSearchEntries = createLocalizedCatalog(() => [
|
|||
'Choose the terminal theme used in dark mode.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.terminal.search.f66a7cf715', 'terminal'),
|
||||
translate('auto.components.settings.terminal.search.0ce176909a', 'theme'),
|
||||
translate('auto.components.settings.terminal.search.f785374072', 'dark'),
|
||||
translate('auto.components.settings.terminal.search.7718d70356', 'preview')
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.f66a7cf715', 'terminal'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.0ce176909a', 'theme'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.f785374072', 'dark'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.7718d70356', 'preview')
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -22,10 +23,10 @@ export const getTerminalDarkThemeSearchEntries = createLocalizedCatalog(() => [
|
|||
'Controls the split divider line between panes in dark mode.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.terminal.search.f66a7cf715', 'terminal'),
|
||||
translate('auto.components.settings.terminal.search.781f49d942', 'divider'),
|
||||
translate('auto.components.settings.terminal.search.f785374072', 'dark'),
|
||||
translate('auto.components.settings.terminal.search.674b7c8436', 'color')
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.f66a7cf715', 'terminal'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.781f49d942', 'divider'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.f785374072', 'dark'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.674b7c8436', 'color')
|
||||
]
|
||||
}
|
||||
])
|
||||
|
|
@ -41,9 +42,12 @@ export const getTerminalLightThemeSearchEntries = createLocalizedCatalog(() => [
|
|||
'When disabled, light mode reuses the dark terminal theme.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.terminal.search.f66a7cf715', 'terminal'),
|
||||
translate('auto.components.settings.terminal.search.da864e6cec', 'light mode'),
|
||||
translate('auto.components.settings.terminal.search.0ce176909a', 'theme')
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.f66a7cf715', 'terminal'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.search.da864e6cec',
|
||||
'light mode'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.0ce176909a', 'theme')
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -53,10 +57,10 @@ export const getTerminalLightThemeSearchEntries = createLocalizedCatalog(() => [
|
|||
'Choose the theme used when Orca is in light mode.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.terminal.search.f66a7cf715', 'terminal'),
|
||||
translate('auto.components.settings.terminal.search.0ce176909a', 'theme'),
|
||||
translate('auto.components.settings.terminal.search.411229c636', 'light'),
|
||||
translate('auto.components.settings.terminal.search.7718d70356', 'preview')
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.f66a7cf715', 'terminal'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.0ce176909a', 'theme'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.411229c636', 'light'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.7718d70356', 'preview')
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -66,10 +70,10 @@ export const getTerminalLightThemeSearchEntries = createLocalizedCatalog(() => [
|
|||
'Controls the split divider line between panes in light mode.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.terminal.search.f66a7cf715', 'terminal'),
|
||||
translate('auto.components.settings.terminal.search.781f49d942', 'divider'),
|
||||
translate('auto.components.settings.terminal.search.411229c636', 'light'),
|
||||
translate('auto.components.settings.terminal.search.674b7c8436', 'color')
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.f66a7cf715', 'terminal'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.781f49d942', 'divider'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.411229c636', 'light'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.674b7c8436', 'color')
|
||||
]
|
||||
}
|
||||
])
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
import { translate } from '@/i18n/i18n'
|
||||
import { translateSearchKeyword } from './settings-search-keywords'
|
||||
import { createLocalizedCatalog } from '@/i18n/localized-catalog'
|
||||
|
||||
export const getTerminalTypographySearchEntries = createLocalizedCatalog(() => [
|
||||
|
|
@ -9,9 +10,12 @@ export const getTerminalTypographySearchEntries = createLocalizedCatalog(() => [
|
|||
'Default terminal font size for new panes and live updates.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.terminal.search.f66a7cf715', 'terminal'),
|
||||
translate('auto.components.settings.terminal.search.103cdb862f', 'typography'),
|
||||
translate('auto.components.settings.terminal.search.33031c1465', 'text size')
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.f66a7cf715', 'terminal'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.search.103cdb862f',
|
||||
'typography'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.33031c1465', 'text size')
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -21,9 +25,12 @@ export const getTerminalTypographySearchEntries = createLocalizedCatalog(() => [
|
|||
'Default terminal font family for new panes and live updates.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.terminal.search.f66a7cf715', 'terminal'),
|
||||
translate('auto.components.settings.terminal.search.103cdb862f', 'typography'),
|
||||
translate('auto.components.settings.terminal.search.b0bb76ae6b', 'font')
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.f66a7cf715', 'terminal'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.search.103cdb862f',
|
||||
'typography'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.b0bb76ae6b', 'font')
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -33,9 +40,12 @@ export const getTerminalTypographySearchEntries = createLocalizedCatalog(() => [
|
|||
'Controls the terminal text font weight.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.terminal.search.f66a7cf715', 'terminal'),
|
||||
translate('auto.components.settings.terminal.search.103cdb862f', 'typography'),
|
||||
translate('auto.components.settings.terminal.search.20ce287cc6', 'weight')
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.f66a7cf715', 'terminal'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.search.103cdb862f',
|
||||
'typography'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.20ce287cc6', 'weight')
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -45,10 +55,16 @@ export const getTerminalTypographySearchEntries = createLocalizedCatalog(() => [
|
|||
'Controls the terminal line height multiplier.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.terminal.search.f66a7cf715', 'terminal'),
|
||||
translate('auto.components.settings.terminal.search.103cdb862f', 'typography'),
|
||||
translate('auto.components.settings.terminal.search.7341e3d00e', 'line height'),
|
||||
translate('auto.components.settings.terminal.search.b2f52cb96c', 'spacing')
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.f66a7cf715', 'terminal'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.search.103cdb862f',
|
||||
'typography'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.search.7341e3d00e',
|
||||
'line height'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.b2f52cb96c', 'spacing')
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -58,16 +74,28 @@ export const getTerminalTypographySearchEntries = createLocalizedCatalog(() => [
|
|||
'Render programming ligatures (e.g. => → ≠ ≥) for fonts that ship them. "Auto" enables ligatures only for known ligature fonts (Fira Code, JetBrains Mono, Cascadia Code, Iosevka, etc.).'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.terminal.search.f66a7cf715', 'terminal'),
|
||||
translate('auto.components.settings.terminal.search.103cdb862f', 'typography'),
|
||||
translate('auto.components.settings.terminal.search.afc8d5f790', 'ligatures'),
|
||||
translate('auto.components.settings.terminal.search.7ab424c4d3', 'ligature'),
|
||||
translate('auto.components.settings.terminal.search.7f7640c29e', 'fira code'),
|
||||
translate('auto.components.settings.terminal.search.35c2311a33', 'jetbrains mono'),
|
||||
translate('auto.components.settings.terminal.search.e3aeea308e', 'cascadia code'),
|
||||
translate('auto.components.settings.terminal.search.6ded6297fe', 'iosevka'),
|
||||
translate('auto.components.settings.terminal.search.a16224d16a', 'calt'),
|
||||
translate('auto.components.settings.terminal.search.d5e6c7fab1', 'font features')
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.f66a7cf715', 'terminal'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.search.103cdb862f',
|
||||
'typography'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.afc8d5f790', 'ligatures'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.7ab424c4d3', 'ligature'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.7f7640c29e', 'fira code'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.search.35c2311a33',
|
||||
'jetbrains mono'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.search.e3aeea308e',
|
||||
'cascadia code'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.6ded6297fe', 'iosevka'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.a16224d16a', 'calt'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.search.d5e6c7fab1',
|
||||
'font features'
|
||||
)
|
||||
]
|
||||
}
|
||||
])
|
||||
|
|
@ -80,14 +108,17 @@ export const getTerminalRenderingSearchEntries = createLocalizedCatalog(() => [
|
|||
'Controls whether the terminal uses xterm.js WebGL rendering. Auto tries WebGL when the renderer is supported, with conservative fallback for software or unknown GPU renderers.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.terminal.search.f66a7cf715', 'terminal'),
|
||||
translate('auto.components.settings.terminal.search.db82cb13b0', 'gpu'),
|
||||
translate('auto.components.settings.terminal.search.4b4e80d850', 'acceleration'),
|
||||
translate('auto.components.settings.terminal.search.6cddc858ba', 'webgl'),
|
||||
translate('auto.components.settings.terminal.search.fffa9ab980', 'renderer'),
|
||||
translate('auto.components.settings.terminal.search.bc7ae1f7c0', 'rendering'),
|
||||
translate('auto.components.settings.terminal.search.7d924d870d', 'graphics'),
|
||||
translate('auto.components.settings.terminal.search.1abcf4d7de', 'linux')
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.f66a7cf715', 'terminal'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.db82cb13b0', 'gpu'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.search.4b4e80d850',
|
||||
'acceleration'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.6cddc858ba', 'webgl'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.fffa9ab980', 'renderer'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.bc7ae1f7c0', 'rendering'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.7d924d870d', 'graphics'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.1abcf4d7de', 'linux')
|
||||
]
|
||||
}
|
||||
])
|
||||
|
|
@ -100,11 +131,11 @@ export const getTerminalCursorSearchEntries = createLocalizedCatalog(() => [
|
|||
'Default cursor appearance for Orca terminal panes.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.terminal.search.f66a7cf715', 'terminal'),
|
||||
translate('auto.components.settings.terminal.search.6eaf7ee0e4', 'cursor'),
|
||||
translate('auto.components.settings.terminal.search.a6e9dcc829', 'bar'),
|
||||
translate('auto.components.settings.terminal.search.015c82349f', 'block'),
|
||||
translate('auto.components.settings.terminal.search.eefd1d8332', 'underline')
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.f66a7cf715', 'terminal'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.6eaf7ee0e4', 'cursor'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.a6e9dcc829', 'bar'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.015c82349f', 'block'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.eefd1d8332', 'underline')
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -114,9 +145,9 @@ export const getTerminalCursorSearchEntries = createLocalizedCatalog(() => [
|
|||
'Uses the blinking variant of the selected cursor shape.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.terminal.search.f66a7cf715', 'terminal'),
|
||||
translate('auto.components.settings.terminal.search.6eaf7ee0e4', 'cursor'),
|
||||
translate('auto.components.settings.terminal.search.25f606d9e5', 'blink')
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.f66a7cf715', 'terminal'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.6eaf7ee0e4', 'cursor'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.25f606d9e5', 'blink')
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -126,10 +157,13 @@ export const getTerminalCursorSearchEntries = createLocalizedCatalog(() => [
|
|||
'Opacity of the terminal cursor.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.terminal.search.f66a7cf715', 'terminal'),
|
||||
translate('auto.components.settings.terminal.search.6eaf7ee0e4', 'cursor'),
|
||||
translate('auto.components.settings.terminal.search.46d99ef4bb', 'opacity'),
|
||||
translate('auto.components.settings.terminal.search.4f7f8f28ca', 'transparency')
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.f66a7cf715', 'terminal'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.6eaf7ee0e4', 'cursor'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.46d99ef4bb', 'opacity'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.search.4f7f8f28ca',
|
||||
'transparency'
|
||||
)
|
||||
]
|
||||
}
|
||||
])
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
import { translate } from '@/i18n/i18n'
|
||||
import { translateSearchKeyword } from './settings-search-keywords'
|
||||
import { createLocalizedCatalog } from '@/i18n/localized-catalog'
|
||||
|
||||
export const getManageSessionsSearchEntries = createLocalizedCatalog(() => [
|
||||
|
|
@ -9,20 +10,23 @@ export const getManageSessionsSearchEntries = createLocalizedCatalog(() => [
|
|||
'Recover from frozen terminals by killing sessions, clearing saved scrollback, or restarting the daemon.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.terminal.search.f35400f7e8', 'daemon'),
|
||||
translate('auto.components.settings.terminal.search.9f2dda133c', 'pty'),
|
||||
translate('auto.components.settings.terminal.search.d802a578bf', 'sessions'),
|
||||
translate('auto.components.settings.terminal.search.a8d2784214', 'manage'),
|
||||
translate('auto.components.settings.terminal.search.a3e5297c10', 'kill'),
|
||||
translate('auto.components.settings.terminal.search.920573d65b', 'kill all'),
|
||||
translate('auto.components.settings.terminal.search.456da64d4d', 'clear'),
|
||||
translate('auto.components.settings.terminal.search.3982d88725', 'history'),
|
||||
translate('auto.components.settings.terminal.search.cde233f5da', 'scrollback'),
|
||||
translate('auto.components.settings.terminal.search.6892fb1019', 'restart'),
|
||||
translate('auto.components.settings.terminal.search.f66a7cf715', 'terminal'),
|
||||
translate('auto.components.settings.terminal.search.0a05629060', 'recover'),
|
||||
translate('auto.components.settings.terminal.search.88561b3499', 'frozen'),
|
||||
translate('auto.components.settings.terminal.search.d4daf4f612', 'unfreeze')
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.f35400f7e8', 'daemon'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.9f2dda133c', 'pty'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.d802a578bf', 'sessions'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.a8d2784214', 'manage'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.a3e5297c10', 'kill'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.920573d65b', 'kill all'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.456da64d4d', 'clear'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.3982d88725', 'history'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.search.cde233f5da',
|
||||
'scrollback'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.6892fb1019', 'restart'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.f66a7cf715', 'terminal'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.0a05629060', 'recover'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.88561b3499', 'frozen'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.d4daf4f612', 'unfreeze')
|
||||
]
|
||||
}
|
||||
])
|
||||
|
|
@ -35,10 +39,16 @@ export const getTerminalWindowSearchEntries = createLocalizedCatalog(() => [
|
|||
'Controls the transparency of the terminal background.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.terminal.search.46d99ef4bb', 'opacity'),
|
||||
translate('auto.components.settings.terminal.search.4f7f8f28ca', 'transparency'),
|
||||
translate('auto.components.settings.terminal.search.f6dd9ff606', 'background'),
|
||||
translate('auto.components.settings.terminal.search.7db59c4738', 'alpha')
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.46d99ef4bb', 'opacity'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.search.4f7f8f28ca',
|
||||
'transparency'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.search.f6dd9ff606',
|
||||
'background'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.7db59c4738', 'alpha')
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -48,11 +58,17 @@ export const getTerminalWindowSearchEntries = createLocalizedCatalog(() => [
|
|||
'Apply background blur to the terminal window. Requires restart.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.terminal.search.0838b3717b', 'window'),
|
||||
translate('auto.components.settings.terminal.search.71eb45e293', 'blur'),
|
||||
translate('auto.components.settings.terminal.search.f6dd9ff606', 'background'),
|
||||
translate('auto.components.settings.terminal.search.4f7f8f28ca', 'transparency'),
|
||||
translate('auto.components.settings.terminal.search.6c2f9f05c8', 'vibrancy')
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.0838b3717b', 'window'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.71eb45e293', 'blur'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.search.f6dd9ff606',
|
||||
'background'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.search.4f7f8f28ca',
|
||||
'transparency'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.6c2f9f05c8', 'vibrancy')
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -62,10 +78,13 @@ export const getTerminalWindowSearchEntries = createLocalizedCatalog(() => [
|
|||
'Horizontal padding around the terminal grid in pixels.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.terminal.search.e8baf0d12c', 'padding'),
|
||||
translate('auto.components.settings.terminal.search.54a9b3725b', 'horizontal'),
|
||||
translate('auto.components.settings.terminal.search.b2f52cb96c', 'spacing'),
|
||||
translate('auto.components.settings.terminal.search.f25d948664', 'margin')
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.e8baf0d12c', 'padding'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.search.54a9b3725b',
|
||||
'horizontal'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.b2f52cb96c', 'spacing'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.f25d948664', 'margin')
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -75,10 +94,10 @@ export const getTerminalWindowSearchEntries = createLocalizedCatalog(() => [
|
|||
'Vertical padding around the terminal grid in pixels.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.terminal.search.e8baf0d12c', 'padding'),
|
||||
translate('auto.components.settings.terminal.search.18ce996647', 'vertical'),
|
||||
translate('auto.components.settings.terminal.search.b2f52cb96c', 'spacing'),
|
||||
translate('auto.components.settings.terminal.search.f25d948664', 'margin')
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.e8baf0d12c', 'padding'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.18ce996647', 'vertical'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.b2f52cb96c', 'spacing'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.f25d948664', 'margin')
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -91,10 +110,10 @@ export const getTerminalWindowSearchEntries = createLocalizedCatalog(() => [
|
|||
'Hide the mouse cursor when typing in the terminal.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.terminal.search.ea364ce6e4', 'mouse'),
|
||||
translate('auto.components.settings.terminal.search.ee611ae238', 'hide'),
|
||||
translate('auto.components.settings.terminal.search.34fe1af39d', 'typing'),
|
||||
translate('auto.components.settings.terminal.search.6eaf7ee0e4', 'cursor')
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.ea364ce6e4', 'mouse'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.ee611ae238', 'hide'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.34fe1af39d', 'typing'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.6eaf7ee0e4', 'cursor')
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -104,11 +123,11 @@ export const getTerminalWindowSearchEntries = createLocalizedCatalog(() => [
|
|||
'Override individual terminal colors.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.terminal.search.674b7c8436', 'color'),
|
||||
translate('auto.components.settings.terminal.search.d8bd6182b8', 'override'),
|
||||
translate('auto.components.settings.terminal.search.11fd3fbcf2', 'ansi'),
|
||||
translate('auto.components.settings.terminal.search.4ba8623632', 'palette'),
|
||||
translate('auto.components.settings.terminal.search.0ce176909a', 'theme')
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.674b7c8436', 'color'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.d8bd6182b8', 'override'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.11fd3fbcf2', 'ansi'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.4ba8623632', 'palette'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.0ce176909a', 'theme')
|
||||
]
|
||||
}
|
||||
])
|
||||
|
|
@ -124,16 +143,19 @@ export const getTerminalSetupScriptSearchEntries = createLocalizedCatalog(() =>
|
|||
"Where the repository setup script runs when a new workspace is created: a vertical split (default), a horizontal split, or a background tab titled 'Setup'."
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.terminal.search.4529806908', 'setup'),
|
||||
translate('auto.components.settings.terminal.search.6b659fff2a', 'script'),
|
||||
translate('auto.components.settings.terminal.search.7a48c7715b', 'workspace'),
|
||||
translate('auto.components.settings.terminal.search.de7bc1d5f5', 'split'),
|
||||
translate('auto.components.settings.terminal.search.54a9b3725b', 'horizontal'),
|
||||
translate('auto.components.settings.terminal.search.18ce996647', 'vertical'),
|
||||
translate('auto.components.settings.terminal.search.f44643328e', 'tab'),
|
||||
translate('auto.components.settings.terminal.search.fd6c24313d', 'new'),
|
||||
translate('auto.components.settings.terminal.search.b872de3926', 'location'),
|
||||
translate('auto.components.settings.terminal.search.c047f398cc', 'launch')
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.4529806908', 'setup'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.6b659fff2a', 'script'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.7a48c7715b', 'workspace'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.de7bc1d5f5', 'split'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.search.54a9b3725b',
|
||||
'horizontal'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.18ce996647', 'vertical'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.f44643328e', 'tab'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.fd6c24313d', 'new'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.b872de3926', 'location'),
|
||||
...translateSearchKeyword('auto.components.settings.terminal.search.c047f398cc', 'launch')
|
||||
]
|
||||
}
|
||||
])
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
import type { SettingsSearchEntry } from './settings-search'
|
||||
import { translate } from '@/i18n/i18n'
|
||||
import { translateSearchKeyword } from './settings-search-keywords'
|
||||
import { createLocalizedCatalog } from '@/i18n/localized-catalog'
|
||||
|
||||
export const getTerminalWindowsShellSearchEntry = createLocalizedCatalog(() => [
|
||||
|
|
@ -13,19 +14,58 @@ export const getTerminalWindowsShellSearchEntry = createLocalizedCatalog(() => [
|
|||
'Choose the default shell for new terminal panes on Windows.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.terminal.windows.search.e7d2793b03', 'terminal'),
|
||||
translate('auto.components.settings.terminal.windows.search.28ff08ed35', 'windows'),
|
||||
translate('auto.components.settings.terminal.windows.search.7c7056940a', 'shell'),
|
||||
translate('auto.components.settings.terminal.windows.search.2d99cd91be', 'powershell'),
|
||||
translate('auto.components.settings.terminal.windows.search.6cd20b9e64', 'cmd'),
|
||||
translate('auto.components.settings.terminal.windows.search.12519edb5d', 'command prompt'),
|
||||
translate('auto.components.settings.terminal.windows.search.04994f6929', 'default'),
|
||||
translate('auto.components.settings.terminal.windows.search.591912177b', 'git bash'),
|
||||
translate('auto.components.settings.terminal.windows.search.6e3adf4cba', 'wsl'),
|
||||
translate('auto.components.settings.terminal.windows.search.02c772582a', 'linux'),
|
||||
translate('auto.components.settings.terminal.windows.search.5a2db98d23', 'bash'),
|
||||
translate('auto.components.settings.terminal.windows.search.07ec155fb6', 'bash.exe'),
|
||||
translate('auto.components.settings.terminal.windows.search.4ee2579c32', 'ubuntu')
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.windows.search.e7d2793b03',
|
||||
'terminal'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.windows.search.28ff08ed35',
|
||||
'windows'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.windows.search.7c7056940a',
|
||||
'shell'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.windows.search.2d99cd91be',
|
||||
'powershell'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.windows.search.6cd20b9e64',
|
||||
'cmd'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.windows.search.12519edb5d',
|
||||
'command prompt'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.windows.search.04994f6929',
|
||||
'default'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.windows.search.591912177b',
|
||||
'git bash'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.windows.search.6e3adf4cba',
|
||||
'wsl'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.windows.search.02c772582a',
|
||||
'linux'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.windows.search.5a2db98d23',
|
||||
'bash'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.windows.search.07ec155fb6',
|
||||
'bash.exe'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.windows.search.4ee2579c32',
|
||||
'ubuntu'
|
||||
)
|
||||
]
|
||||
}
|
||||
])
|
||||
|
|
@ -41,17 +81,38 @@ export const getTerminalWindowsPowershellImplementationSearchEntry = createLocal
|
|||
'Choose whether the PowerShell shell option launches Windows PowerShell or PowerShell 7+ for new terminal panes.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.terminal.windows.search.e7d2793b03', 'terminal'),
|
||||
translate('auto.components.settings.terminal.windows.search.28ff08ed35', 'windows'),
|
||||
translate('auto.components.settings.terminal.windows.search.2d99cd91be', 'powershell'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.windows.search.e7d2793b03',
|
||||
'terminal'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.windows.search.28ff08ed35',
|
||||
'windows'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.windows.search.2d99cd91be',
|
||||
'powershell'
|
||||
),
|
||||
translate(
|
||||
'auto.components.settings.terminal.windows.search.f9162f0b8e',
|
||||
'windows powershell'
|
||||
),
|
||||
translate('auto.components.settings.terminal.windows.search.768613e483', 'powershell 7'),
|
||||
translate('auto.components.settings.terminal.windows.search.d414022016', 'pwsh'),
|
||||
translate('auto.components.settings.terminal.windows.search.4af2f7526e', 'version'),
|
||||
translate('auto.components.settings.terminal.windows.search.d57f870938', 'advanced')
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.windows.search.768613e483',
|
||||
'powershell 7'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.windows.search.d414022016',
|
||||
'pwsh'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.windows.search.4af2f7526e',
|
||||
'version'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.windows.search.d57f870938',
|
||||
'advanced'
|
||||
)
|
||||
]
|
||||
}
|
||||
])
|
||||
|
|
@ -67,15 +128,42 @@ export const getTerminalWindowsWslDistroSearchEntry = createLocalizedCatalog(()
|
|||
'Choose which WSL distribution new WSL terminals and local agent scans use.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.terminal.windows.search.e7d2793b03', 'terminal'),
|
||||
translate('auto.components.settings.terminal.windows.search.28ff08ed35', 'windows'),
|
||||
translate('auto.components.settings.terminal.windows.search.6e3adf4cba', 'wsl'),
|
||||
translate('auto.components.settings.terminal.windows.search.02c772582a', 'linux'),
|
||||
translate('auto.components.settings.terminal.windows.search.2b4a340ce0', 'distribution'),
|
||||
translate('auto.components.settings.terminal.windows.search.5074ad8b5f', 'distro'),
|
||||
translate('auto.components.settings.terminal.windows.search.4ee2579c32', 'ubuntu'),
|
||||
translate('auto.components.settings.terminal.windows.search.fc564eadaf', 'debian'),
|
||||
translate('auto.components.settings.terminal.windows.search.04994f6929', 'default')
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.windows.search.e7d2793b03',
|
||||
'terminal'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.windows.search.28ff08ed35',
|
||||
'windows'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.windows.search.6e3adf4cba',
|
||||
'wsl'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.windows.search.02c772582a',
|
||||
'linux'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.windows.search.2b4a340ce0',
|
||||
'distribution'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.windows.search.5074ad8b5f',
|
||||
'distro'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.windows.search.4ee2579c32',
|
||||
'ubuntu'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.windows.search.fc564eadaf',
|
||||
'debian'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.windows.search.04994f6929',
|
||||
'default'
|
||||
)
|
||||
]
|
||||
}
|
||||
])
|
||||
|
|
@ -91,11 +179,26 @@ export const getTerminalRightClickToPasteSearchEntry = createLocalizedCatalog(()
|
|||
'On Windows, right-click pastes the clipboard into the terminal. Use Ctrl+right-click to open the context menu.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.terminal.windows.search.e7d2793b03', 'terminal'),
|
||||
translate('auto.components.settings.terminal.windows.search.28ff08ed35', 'windows'),
|
||||
translate('auto.components.settings.terminal.windows.search.e55186fe2b', 'right click'),
|
||||
translate('auto.components.settings.terminal.windows.search.fcfa53920b', 'paste'),
|
||||
translate('auto.components.settings.terminal.windows.search.4d09141a42', 'context menu')
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.windows.search.e7d2793b03',
|
||||
'terminal'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.windows.search.28ff08ed35',
|
||||
'windows'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.windows.search.e55186fe2b',
|
||||
'right click'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.windows.search.fcfa53920b',
|
||||
'paste'
|
||||
),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.terminal.windows.search.4d09141a42',
|
||||
'context menu'
|
||||
)
|
||||
]
|
||||
}
|
||||
])
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
import type { SettingsSearchEntry } from './settings-search'
|
||||
import { translate } from '@/i18n/i18n'
|
||||
import { translateSearchKeyword } from './settings-search-keywords'
|
||||
import { createLocalizedCatalog } from '@/i18n/localized-catalog'
|
||||
|
||||
export const getOpenaiTranscriptionSearchEntry = createLocalizedCatalog(
|
||||
|
|
@ -13,13 +14,16 @@ export const getOpenaiTranscriptionSearchEntry = createLocalizedCatalog(
|
|||
'Configure the OpenAI API key used for cloud speech-to-text models.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.voice.pane.search.7640ed9848', 'voice'),
|
||||
translate('auto.components.settings.voice.pane.search.3d8b853963', 'speech'),
|
||||
translate('auto.components.settings.voice.pane.search.10d45a9fce', 'stt'),
|
||||
translate('auto.components.settings.voice.pane.search.04c25a6fb0', 'openai'),
|
||||
translate('auto.components.settings.voice.pane.search.2d206de105', 'api key'),
|
||||
translate('auto.components.settings.voice.pane.search.f6e0dfa61c', 'cloud'),
|
||||
translate('auto.components.settings.voice.pane.search.322d457a0d', 'transcription')
|
||||
...translateSearchKeyword('auto.components.settings.voice.pane.search.7640ed9848', 'voice'),
|
||||
...translateSearchKeyword('auto.components.settings.voice.pane.search.3d8b853963', 'speech'),
|
||||
...translateSearchKeyword('auto.components.settings.voice.pane.search.10d45a9fce', 'stt'),
|
||||
...translateSearchKeyword('auto.components.settings.voice.pane.search.04c25a6fb0', 'openai'),
|
||||
...translateSearchKeyword('auto.components.settings.voice.pane.search.2d206de105', 'api key'),
|
||||
...translateSearchKeyword('auto.components.settings.voice.pane.search.f6e0dfa61c', 'cloud'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.voice.pane.search.322d457a0d',
|
||||
'transcription'
|
||||
)
|
||||
]
|
||||
})
|
||||
)
|
||||
|
|
@ -35,11 +39,17 @@ export const getVoicePaneSearchEntries = createLocalizedCatalog(() => [
|
|||
'Master toggle for voice dictation features.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.voice.pane.search.7640ed9848', 'voice'),
|
||||
translate('auto.components.settings.voice.pane.search.089d31a45b', 'dictation'),
|
||||
translate('auto.components.settings.voice.pane.search.3d8b853963', 'speech'),
|
||||
translate('auto.components.settings.voice.pane.search.e360027a65', 'microphone'),
|
||||
translate('auto.components.settings.voice.pane.search.10d45a9fce', 'stt')
|
||||
...translateSearchKeyword('auto.components.settings.voice.pane.search.7640ed9848', 'voice'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.voice.pane.search.089d31a45b',
|
||||
'dictation'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.voice.pane.search.3d8b853963', 'speech'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.voice.pane.search.e360027a65',
|
||||
'microphone'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.voice.pane.search.10d45a9fce', 'stt')
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -49,12 +59,18 @@ export const getVoicePaneSearchEntries = createLocalizedCatalog(() => [
|
|||
'Toggle or hold-to-talk dictation behavior.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.voice.pane.search.7640ed9848', 'voice'),
|
||||
translate('auto.components.settings.voice.pane.search.089d31a45b', 'dictation'),
|
||||
translate('auto.components.settings.voice.pane.search.d86f5600da', 'mode'),
|
||||
translate('auto.components.settings.voice.pane.search.6fa48bcd41', 'toggle'),
|
||||
translate('auto.components.settings.voice.pane.search.064a9bd94a', 'hold'),
|
||||
translate('auto.components.settings.voice.pane.search.931b1a9e53', 'push to talk')
|
||||
...translateSearchKeyword('auto.components.settings.voice.pane.search.7640ed9848', 'voice'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.voice.pane.search.089d31a45b',
|
||||
'dictation'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.voice.pane.search.d86f5600da', 'mode'),
|
||||
...translateSearchKeyword('auto.components.settings.voice.pane.search.6fa48bcd41', 'toggle'),
|
||||
...translateSearchKeyword('auto.components.settings.voice.pane.search.064a9bd94a', 'hold'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.voice.pane.search.931b1a9e53',
|
||||
'push to talk'
|
||||
)
|
||||
]
|
||||
},
|
||||
getOpenaiTranscriptionSearchEntry(),
|
||||
|
|
@ -65,14 +81,17 @@ export const getVoicePaneSearchEntries = createLocalizedCatalog(() => [
|
|||
'Select a local or cloud speech-to-text model to use for dictation.'
|
||||
),
|
||||
keywords: [
|
||||
translate('auto.components.settings.voice.pane.search.7640ed9848', 'voice'),
|
||||
translate('auto.components.settings.voice.pane.search.080202facb', 'model'),
|
||||
translate('auto.components.settings.voice.pane.search.3d8b853963', 'speech'),
|
||||
translate('auto.components.settings.voice.pane.search.10d45a9fce', 'stt'),
|
||||
translate('auto.components.settings.voice.pane.search.b9dee49cd7', 'download'),
|
||||
translate('auto.components.settings.voice.pane.search.04c25a6fb0', 'openai'),
|
||||
translate('auto.components.settings.voice.pane.search.2d206de105', 'api key'),
|
||||
translate('auto.components.settings.voice.pane.search.f6e0dfa61c', 'cloud')
|
||||
...translateSearchKeyword('auto.components.settings.voice.pane.search.7640ed9848', 'voice'),
|
||||
...translateSearchKeyword('auto.components.settings.voice.pane.search.080202facb', 'model'),
|
||||
...translateSearchKeyword('auto.components.settings.voice.pane.search.3d8b853963', 'speech'),
|
||||
...translateSearchKeyword('auto.components.settings.voice.pane.search.10d45a9fce', 'stt'),
|
||||
...translateSearchKeyword(
|
||||
'auto.components.settings.voice.pane.search.b9dee49cd7',
|
||||
'download'
|
||||
),
|
||||
...translateSearchKeyword('auto.components.settings.voice.pane.search.04c25a6fb0', 'openai'),
|
||||
...translateSearchKeyword('auto.components.settings.voice.pane.search.2d206de105', 'api key'),
|
||||
...translateSearchKeyword('auto.components.settings.voice.pane.search.f6e0dfa61c', 'cloud')
|
||||
]
|
||||
}
|
||||
])
|
||||
|
|
|
|||
|
|
@ -2,6 +2,9 @@ import i18next, { type i18n as I18nInstance, type TOptions } from 'i18next'
|
|||
import { initReactI18next } from 'react-i18next'
|
||||
|
||||
import en from './locales/en.json'
|
||||
import ja from './locales/ja.json'
|
||||
import ko from './locales/ko.json'
|
||||
import zh from './locales/zh.json'
|
||||
import { isPseudoLocalizationLocale, pseudoLocalizeString } from './pseudo-localization'
|
||||
import { DEFAULT_LOCALE, resolveUiLocale } from './supported-languages'
|
||||
import type { UiLanguage } from '../../../shared/ui-language'
|
||||
|
|
@ -14,6 +17,15 @@ void i18n.use(initReactI18next).init({
|
|||
resources: {
|
||||
en: {
|
||||
translation: en
|
||||
},
|
||||
zh: {
|
||||
translation: zh
|
||||
},
|
||||
ko: {
|
||||
translation: ko
|
||||
},
|
||||
ja: {
|
||||
translation: ja
|
||||
}
|
||||
},
|
||||
interpolation: {
|
||||
|
|
|
|||
|
|
@ -13,7 +13,10 @@
|
|||
"title": "Language",
|
||||
"description": "Choose the language used by the Orca interface.",
|
||||
"system": "System",
|
||||
"english": "English"
|
||||
"english": "English",
|
||||
"chinese": "中文(简体)",
|
||||
"korean": "한국어",
|
||||
"japanese": "日本語"
|
||||
},
|
||||
"statusBar": {
|
||||
"claudeToggleDescription": "Show Claude token and cost usage for the active workspace.",
|
||||
|
|
@ -4572,7 +4575,11 @@
|
|||
"f9af91ea26": "Shows the New Mobile Emulator action and allows agents to attach to the active emulator.",
|
||||
"700ddbf9b1": "Enable Mobile Emulator",
|
||||
"bc39d0f115": "Configure mobile emulator support for Orca and coding agents.",
|
||||
"6593c9ddd3": "Mobile Emulator"
|
||||
"6593c9ddd3": "Mobile Emulator",
|
||||
"a4f1c82d90": "Disabled",
|
||||
"b5e2d93e01": "Checking...",
|
||||
"c6f3ea4f12": "Ready",
|
||||
"d704fb5023": "Needs setup"
|
||||
},
|
||||
"MobileNetworkInterfaceSection": {
|
||||
"63d5e4ae1e": "Regenerate the QR code and scan it from the Orca mobile app.",
|
||||
|
|
@ -5732,7 +5739,45 @@
|
|||
"cbdd7f3b9e": "Choose whether installed agents are detected on this device or in WSL.",
|
||||
"ef804b7337": "Agent Location",
|
||||
"01926b9d8c": "Configure AI coding agents, default agent, and command overrides.",
|
||||
"bb9ad95777": "Agents"
|
||||
"bb9ad95777": "Agents",
|
||||
"d8f3a8b8a0": "default",
|
||||
"167daeb5e9": "command",
|
||||
"be59907510": "override",
|
||||
"a6d594c17d": "install",
|
||||
"f2932bf22b": "detected",
|
||||
"2afd3b5858": "enable",
|
||||
"60393e1b17": "disable",
|
||||
"2e188c771c": "hide",
|
||||
"87fffe6c20": "show",
|
||||
"e2b7c0dcd7": "github",
|
||||
"66b6b82eb4": "awake",
|
||||
"dbc8aca6b0": "sleep",
|
||||
"845ad9128a": "power",
|
||||
"48f84d10f1": "running",
|
||||
"affbf130f6": "working",
|
||||
"0d1c334987": "lid",
|
||||
"ff8de8a2ad": "display",
|
||||
"0d752916f8": "hooks",
|
||||
"6984d4291a": "status",
|
||||
"13b20636a6": "waiting",
|
||||
"8599603496": "done",
|
||||
"ea71995548": "remove",
|
||||
"c1317fe641": "restore",
|
||||
"5963143e00": "settings",
|
||||
"042c551bc5": "config",
|
||||
"f412abbba5": "claude",
|
||||
"5ded38b843": "codex",
|
||||
"be7ea3553b": "tab",
|
||||
"6956646a1e": "title",
|
||||
"32836788b0": "generated title",
|
||||
"966890236d": "name",
|
||||
"848dcae8d3": "generated",
|
||||
"52115d0d7c": "auto",
|
||||
"c64059f50d": "prompt",
|
||||
"5784ae8c43": "rename",
|
||||
"8a17fd6026": "stable",
|
||||
"a79d266f71": "session",
|
||||
"afbf35be68": "stable session"
|
||||
}
|
||||
},
|
||||
"appearance": {
|
||||
|
|
@ -7081,6 +7126,19 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"agent-awake-copy": {
|
||||
"e5995ce268": "Keep computer awake while agents are working",
|
||||
"95d3031db2": "Keeps this computer and display awake while agents are working. Lid-close behavior follows this device's power settings.",
|
||||
"a42f6fbdd8": "Keeps this computer and display awake while agents are working. Orca also asks this device to stay awake when the lid is closed, subject to its power policy."
|
||||
},
|
||||
"agent-status-hooks-copy": {
|
||||
"7707c15abb": "Agent status hooks",
|
||||
"a68a642835": "Shows working, waiting, and done states in Orca. Turn off to remove Orca-managed hooks and stop reinstalling them."
|
||||
},
|
||||
"agent-generated-tab-title-copy": {
|
||||
"19ad21615a": "Auto-generate tab titles",
|
||||
"b036c7a409": "Derive short stable tab names from the first known agent prompt. Manual renames always win."
|
||||
}
|
||||
},
|
||||
"right": {
|
||||
|
|
@ -8476,7 +8534,9 @@
|
|||
"5c9293e51a": "checking app access",
|
||||
"aae94eeb52": "Click Install CLI & Skills",
|
||||
"aa8e143a2f": "Could not check install",
|
||||
"9b33e7fb13": "Checking install"
|
||||
"9b33e7fb13": "Checking install",
|
||||
"4c8e1f92a7": "open Orca Desktop on this Mac",
|
||||
"6d2b0a84e1": "Unavailable in this build"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -4,15 +4,17 @@ import {
|
|||
type SupportedUiLocale
|
||||
} from '../../../shared/ui-locale'
|
||||
import {
|
||||
UI_LANGUAGE_CHINESE,
|
||||
UI_LANGUAGE_ENGLISH,
|
||||
UI_LANGUAGE_JAPANESE,
|
||||
UI_LANGUAGE_KOREAN,
|
||||
UI_LANGUAGE_SYSTEM,
|
||||
type UiLanguage
|
||||
} from '../../../shared/ui-language'
|
||||
|
||||
export const DEFAULT_LOCALE = DEFAULT_UI_LOCALE
|
||||
|
||||
// Why: System vs English is not meaningful until a second locale ships (e.g. ko).
|
||||
export const SHOW_UI_LANGUAGE_SETTING = false
|
||||
export const SHOW_UI_LANGUAGE_SETTING = true
|
||||
|
||||
export type UiLanguageChoice = {
|
||||
value: UiLanguage
|
||||
|
|
@ -21,9 +23,27 @@ export type UiLanguageChoice = {
|
|||
|
||||
export const UI_LANGUAGE_CHOICES: UiLanguageChoice[] = [
|
||||
{ value: UI_LANGUAGE_SYSTEM, labelKey: 'settings.appearance.language.system' },
|
||||
{ value: UI_LANGUAGE_ENGLISH, labelKey: 'settings.appearance.language.english' }
|
||||
{ value: UI_LANGUAGE_ENGLISH, labelKey: 'settings.appearance.language.english' },
|
||||
{ value: UI_LANGUAGE_CHINESE, labelKey: 'settings.appearance.language.chinese' },
|
||||
{ value: UI_LANGUAGE_KOREAN, labelKey: 'settings.appearance.language.korean' },
|
||||
{ value: UI_LANGUAGE_JAPANESE, labelKey: 'settings.appearance.language.japanese' }
|
||||
]
|
||||
|
||||
const UI_LANGUAGE_CHOICE_FALLBACKS: Record<UiLanguage, string> = {
|
||||
[UI_LANGUAGE_SYSTEM]: 'System',
|
||||
[UI_LANGUAGE_ENGLISH]: 'English',
|
||||
[UI_LANGUAGE_CHINESE]: '中文(简体)',
|
||||
[UI_LANGUAGE_KOREAN]: '한국어',
|
||||
[UI_LANGUAGE_JAPANESE]: '日本語'
|
||||
}
|
||||
|
||||
export function getUiLanguageChoiceLabel(
|
||||
choice: UiLanguageChoice,
|
||||
translateFn: (key: string, fallback: string) => string
|
||||
): string {
|
||||
return translateFn(choice.labelKey, UI_LANGUAGE_CHOICE_FALLBACKS[choice.value])
|
||||
}
|
||||
|
||||
export function resolveUiLocale(language: UiLanguage): SupportedUiLocale {
|
||||
return resolveRendererUiLocale(language)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,25 @@
|
|||
import { describe, expect, it } from 'vitest'
|
||||
|
||||
import {
|
||||
UI_LANGUAGE_CHINESE,
|
||||
UI_LANGUAGE_ENGLISH,
|
||||
UI_LANGUAGE_JAPANESE,
|
||||
UI_LANGUAGE_KOREAN,
|
||||
UI_LANGUAGE_SYSTEM,
|
||||
normalizeUiLanguage
|
||||
} from './ui-language'
|
||||
|
||||
describe('normalizeUiLanguage', () => {
|
||||
it('accepts supported language settings', () => {
|
||||
expect(normalizeUiLanguage(UI_LANGUAGE_SYSTEM)).toBe('system')
|
||||
expect(normalizeUiLanguage(UI_LANGUAGE_ENGLISH)).toBe('en')
|
||||
expect(normalizeUiLanguage(UI_LANGUAGE_CHINESE)).toBe('zh')
|
||||
expect(normalizeUiLanguage(UI_LANGUAGE_KOREAN)).toBe('ko')
|
||||
expect(normalizeUiLanguage(UI_LANGUAGE_JAPANESE)).toBe('ja')
|
||||
})
|
||||
|
||||
it('falls back unknown values to system', () => {
|
||||
expect(normalizeUiLanguage('fr')).toBe('system')
|
||||
expect(normalizeUiLanguage(null)).toBe('system')
|
||||
})
|
||||
})
|
||||
|
|
@ -1,8 +1,24 @@
|
|||
export const UI_LANGUAGE_SYSTEM = 'system'
|
||||
export const UI_LANGUAGE_ENGLISH = 'en'
|
||||
export const UI_LANGUAGE_CHINESE = 'zh'
|
||||
export const UI_LANGUAGE_KOREAN = 'ko'
|
||||
export const UI_LANGUAGE_JAPANESE = 'ja'
|
||||
|
||||
export type UiLanguage = typeof UI_LANGUAGE_SYSTEM | typeof UI_LANGUAGE_ENGLISH
|
||||
export type UiLanguage =
|
||||
| typeof UI_LANGUAGE_SYSTEM
|
||||
| typeof UI_LANGUAGE_ENGLISH
|
||||
| typeof UI_LANGUAGE_CHINESE
|
||||
| typeof UI_LANGUAGE_KOREAN
|
||||
| typeof UI_LANGUAGE_JAPANESE
|
||||
|
||||
const UI_LANGUAGE_VALUES = new Set<UiLanguage>([
|
||||
UI_LANGUAGE_SYSTEM,
|
||||
UI_LANGUAGE_ENGLISH,
|
||||
UI_LANGUAGE_CHINESE,
|
||||
UI_LANGUAGE_KOREAN,
|
||||
UI_LANGUAGE_JAPANESE
|
||||
])
|
||||
|
||||
export function normalizeUiLanguage(value: unknown): UiLanguage {
|
||||
return value === UI_LANGUAGE_ENGLISH ? UI_LANGUAGE_ENGLISH : UI_LANGUAGE_SYSTEM
|
||||
return UI_LANGUAGE_VALUES.has(value as UiLanguage) ? (value as UiLanguage) : UI_LANGUAGE_SYSTEM
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,25 +1,70 @@
|
|||
import { describe, expect, it } from 'vitest'
|
||||
|
||||
import { normalizeSupportedUiLocale, resolveUiLocale, resolveRendererUiLocale } from './ui-locale'
|
||||
import { UI_LANGUAGE_ENGLISH, UI_LANGUAGE_SYSTEM } from './ui-language'
|
||||
import {
|
||||
UI_LANGUAGE_CHINESE,
|
||||
UI_LANGUAGE_ENGLISH,
|
||||
UI_LANGUAGE_JAPANESE,
|
||||
UI_LANGUAGE_KOREAN,
|
||||
UI_LANGUAGE_SYSTEM
|
||||
} from './ui-language'
|
||||
|
||||
describe('ui-locale', () => {
|
||||
it('normalizes supported locale prefixes', () => {
|
||||
expect(normalizeSupportedUiLocale('en-US')).toBe('en')
|
||||
expect(normalizeSupportedUiLocale('ko-KR')).toBe('en')
|
||||
expect(normalizeSupportedUiLocale('zh-CN')).toBe('zh')
|
||||
expect(normalizeSupportedUiLocale('zh-Hans')).toBe('zh')
|
||||
expect(normalizeSupportedUiLocale('zh-SG')).toBe('zh')
|
||||
})
|
||||
|
||||
it('normalizes Korean locale prefixes', () => {
|
||||
expect(normalizeSupportedUiLocale('ko-KR')).toBe('ko')
|
||||
expect(normalizeSupportedUiLocale('ko')).toBe('ko')
|
||||
})
|
||||
|
||||
it('normalizes Japanese locale prefixes', () => {
|
||||
expect(normalizeSupportedUiLocale('ja-JP')).toBe('ja')
|
||||
expect(normalizeSupportedUiLocale('ja')).toBe('ja')
|
||||
})
|
||||
|
||||
it('falls back unsupported locales to English', () => {
|
||||
expect(normalizeSupportedUiLocale('fr-FR')).toBe('en')
|
||||
})
|
||||
|
||||
it('does not map Traditional Chinese to Simplified yet', () => {
|
||||
expect(normalizeSupportedUiLocale('zh-TW')).toBe('en')
|
||||
expect(normalizeSupportedUiLocale('zh-HK')).toBe('en')
|
||||
expect(normalizeSupportedUiLocale('zh-Hant')).toBe('en')
|
||||
})
|
||||
|
||||
it('resolves explicit English independently of system locale', () => {
|
||||
expect(resolveUiLocale(UI_LANGUAGE_ENGLISH, 'ko-KR')).toBe('en')
|
||||
expect(resolveUiLocale(UI_LANGUAGE_ENGLISH, 'zh-CN')).toBe('en')
|
||||
})
|
||||
|
||||
it('maps system locale to English until more locales ship', () => {
|
||||
it('resolves explicit Chinese independently of system locale', () => {
|
||||
expect(resolveUiLocale(UI_LANGUAGE_CHINESE, 'en-US')).toBe('zh')
|
||||
})
|
||||
|
||||
it('resolves explicit Korean independently of system locale', () => {
|
||||
expect(resolveUiLocale(UI_LANGUAGE_KOREAN, 'en-US')).toBe('ko')
|
||||
})
|
||||
|
||||
it('resolves explicit Japanese independently of system locale', () => {
|
||||
expect(resolveUiLocale(UI_LANGUAGE_JAPANESE, 'en-US')).toBe('ja')
|
||||
})
|
||||
|
||||
it('maps system locale to the closest supported locale', () => {
|
||||
expect(resolveUiLocale(UI_LANGUAGE_SYSTEM, 'en-GB')).toBe('en')
|
||||
expect(resolveUiLocale(UI_LANGUAGE_SYSTEM, 'zh-CN')).toBe('zh')
|
||||
expect(resolveUiLocale(UI_LANGUAGE_SYSTEM, 'ko-KR')).toBe('ko')
|
||||
expect(resolveUiLocale(UI_LANGUAGE_SYSTEM, 'ja-JP')).toBe('ja')
|
||||
expect(resolveUiLocale(UI_LANGUAGE_SYSTEM, 'fr-FR')).toBe('en')
|
||||
})
|
||||
|
||||
it('uses renderer system locale only for the system setting', () => {
|
||||
expect(resolveRendererUiLocale(UI_LANGUAGE_ENGLISH)).toBe('en')
|
||||
expect(resolveRendererUiLocale(UI_LANGUAGE_SYSTEM)).toBe('en')
|
||||
expect(resolveRendererUiLocale(UI_LANGUAGE_CHINESE)).toBe('zh')
|
||||
expect(resolveRendererUiLocale(UI_LANGUAGE_KOREAN)).toBe('ko')
|
||||
expect(resolveRendererUiLocale(UI_LANGUAGE_JAPANESE)).toBe('ja')
|
||||
})
|
||||
})
|
||||
|
|
|
|||
|
|
@ -1,12 +1,30 @@
|
|||
import { UI_LANGUAGE_ENGLISH, UI_LANGUAGE_SYSTEM, type UiLanguage } from './ui-language'
|
||||
import {
|
||||
UI_LANGUAGE_CHINESE,
|
||||
UI_LANGUAGE_ENGLISH,
|
||||
UI_LANGUAGE_JAPANESE,
|
||||
UI_LANGUAGE_KOREAN,
|
||||
UI_LANGUAGE_SYSTEM,
|
||||
type UiLanguage
|
||||
} from './ui-language'
|
||||
|
||||
export const SUPPORTED_UI_LOCALES = ['en'] as const
|
||||
export const SUPPORTED_UI_LOCALES = ['en', 'zh', 'ko', 'ja'] as const
|
||||
export type SupportedUiLocale = (typeof SUPPORTED_UI_LOCALES)[number]
|
||||
|
||||
export const DEFAULT_UI_LOCALE: SupportedUiLocale = 'en'
|
||||
|
||||
function normalizeLocaleTag(locale: string | undefined): string {
|
||||
return (locale ?? DEFAULT_UI_LOCALE).trim().toLowerCase().replace(/_/g, '-')
|
||||
}
|
||||
|
||||
export function normalizeSupportedUiLocale(locale: string | undefined): SupportedUiLocale {
|
||||
const primary = (locale ?? DEFAULT_UI_LOCALE).split('-')[0]?.toLowerCase()
|
||||
const tag = normalizeLocaleTag(locale)
|
||||
const primary = tag.split('-')[0]
|
||||
if (primary === 'zh') {
|
||||
if (tag.startsWith('zh-tw') || tag.startsWith('zh-hk') || tag.startsWith('zh-hant')) {
|
||||
return DEFAULT_UI_LOCALE
|
||||
}
|
||||
return 'zh'
|
||||
}
|
||||
return SUPPORTED_UI_LOCALES.includes(primary as SupportedUiLocale)
|
||||
? (primary as SupportedUiLocale)
|
||||
: DEFAULT_UI_LOCALE
|
||||
|
|
@ -19,6 +37,15 @@ export function resolveUiLocale(
|
|||
if (language === UI_LANGUAGE_ENGLISH) {
|
||||
return DEFAULT_UI_LOCALE
|
||||
}
|
||||
if (language === UI_LANGUAGE_CHINESE) {
|
||||
return 'zh'
|
||||
}
|
||||
if (language === UI_LANGUAGE_KOREAN) {
|
||||
return 'ko'
|
||||
}
|
||||
if (language === UI_LANGUAGE_JAPANESE) {
|
||||
return 'ja'
|
||||
}
|
||||
return normalizeSupportedUiLocale(systemLocale)
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue