mirror of
https://github.com/stablyai/orca.git
synced 2026-10-30 16:47:34 +00:00
* feat(mobile): add UI localization infrastructure Mobile follows the phone's language (or an in-app choice under Settings > Appearance) across the same 11 languages as desktop, switching live like the theme does. - i18next with desktop's translate(key, fallback, options) call shape; catalogs in mobile/src/i18n/locales load lazily, English fallbacks stay inline - Hermes lacks Intl.PluralRules: load the FormatJS polyfill with the 11 languages' rules - OTA pages get the shell's language through an optional bridge init field - iOS permission prompts localized; iOS and Android 13+ per-app language pickers - verify:mobile-localization and a coverage ratchet run in lint, check:changed and CI * fix(mobile): mount pages after the newest language request; tighten localization gates - Wait for the latest page language activation, not a superseded one - Keep literal fallbacks when a key also has a dynamic one - Count headerTitle as visible copy; select the mobile check when the runtime catalog generator changes * feat(mobile): repaint themed components on language changes Components that read the theme already subscribe for repaint; a language switch repaints them too, so labels built by helpers during render follow it. RPC recordings load the real i18next and JSON catalogs. * fix(mobile): scope the translate() gate to render bodies and memos; prune stale keys on sync Handlers and effects may call translate() when they run. sync:mobile-localization now removes keys no code references from every catalog. * fix(mobile): use node: imports in the locale config plugin; pass uiLocale in bridge hook test * chore(mobile): refresh the localization coverage baseline * fix(mobile): follow render callbacks in the translate() gate; keep used plural siblings on prune Also let anonymous default-exported screens count as components, flag any plural family a locale started, and mark JSON modules as ES modules in the recording loader. * fix(mobile): treat async and named local callbacks as handlers in the translate() gate * chore(mobile): refresh the localization coverage baseline * chore(mobile): refresh the localization coverage baseline --------- Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
157 lines
4.1 KiB
JSON
157 lines
4.1 KiB
JSON
[
|
|
{
|
|
"filePath": "src/renderer/src/components/settings/appearance-search.ts",
|
|
"kind": "object-property:keywords",
|
|
"text": "Idioma",
|
|
"dynamic": false,
|
|
"count": 1
|
|
},
|
|
{
|
|
"filePath": "src/renderer/src/components/settings/appearance-search.ts",
|
|
"kind": "object-property:keywords",
|
|
"text": "Langue",
|
|
"dynamic": false,
|
|
"count": 1
|
|
},
|
|
{
|
|
"filePath": "src/renderer/src/components/settings/appearance-search.ts",
|
|
"kind": "object-property:keywords",
|
|
"text": "Dil",
|
|
"dynamic": false,
|
|
"count": 1
|
|
},
|
|
{
|
|
"filePath": "src/renderer/src/components/settings/appearance-search.ts",
|
|
"kind": "object-property:keywords",
|
|
"text": "Sprache",
|
|
"dynamic": false,
|
|
"count": 1
|
|
},
|
|
{
|
|
"filePath": "src/renderer/src/components/settings/appearance-search.ts",
|
|
"kind": "object-property:keywords",
|
|
"text": "언어",
|
|
"dynamic": false,
|
|
"count": 1
|
|
},
|
|
{
|
|
"filePath": "src/renderer/src/components/settings/appearance-search.ts",
|
|
"kind": "object-property:keywords",
|
|
"text": "言語",
|
|
"dynamic": false,
|
|
"count": 1
|
|
},
|
|
{
|
|
"filePath": "src/renderer/src/components/settings/appearance-search.ts",
|
|
"kind": "object-property:keywords",
|
|
"text": "語言",
|
|
"dynamic": false,
|
|
"count": 1
|
|
},
|
|
{
|
|
"filePath": "src/renderer/src/components/settings/appearance-search.ts",
|
|
"kind": "object-property:keywords",
|
|
"text": "语言",
|
|
"dynamic": false,
|
|
"count": 1
|
|
},
|
|
{
|
|
"filePath": "src/renderer/src/components/settings/terminal-advanced-platform-search.ts",
|
|
"kind": "object-property:keywords",
|
|
"text": "ghostty",
|
|
"dynamic": false,
|
|
"count": 2
|
|
},
|
|
{
|
|
"filePath": "src/renderer/src/components/settings/terminal-advanced-platform-search.ts",
|
|
"kind": "object-property:keywords",
|
|
"text": "Ghostty",
|
|
"dynamic": false,
|
|
"count": 2
|
|
},
|
|
{
|
|
"filePath": "src/renderer/src/components/settings/terminal-pane-appearance-search.ts",
|
|
"kind": "object-property:keywords",
|
|
"text": "ghostty",
|
|
"dynamic": false,
|
|
"count": 1
|
|
},
|
|
{
|
|
"filePath": "src/renderer/src/components/settings/terminal-pane-appearance-search.ts",
|
|
"kind": "object-property:keywords",
|
|
"text": "Ghostty",
|
|
"dynamic": false,
|
|
"count": 1
|
|
},
|
|
{
|
|
"filePath": "src/renderer/src/components/sidebar/worktree-card-meta-row.tsx",
|
|
"kind": "jsx-attribute:label",
|
|
"text": "sidebar",
|
|
"dynamic": false,
|
|
"count": 1
|
|
},
|
|
{
|
|
"filePath": "src/renderer/src/components/onboarding/OnboardingLanguageSwitcher.tsx",
|
|
"kind": "jsx-text",
|
|
"text": "Switch language",
|
|
"dynamic": false,
|
|
"count": 1
|
|
},
|
|
{
|
|
"filePath": "src/renderer/src/component-fixtures/component-fixture-explorer.tsx",
|
|
"kind": "jsx-text",
|
|
"text": "Component fixtures",
|
|
"dynamic": false,
|
|
"count": 1
|
|
},
|
|
{
|
|
"filePath": "src/renderer/src/component-fixtures/component-fixture-explorer.tsx",
|
|
"kind": "jsx-text",
|
|
"text": "fixtures · files named *.fixture.tsx under src/renderer/src",
|
|
"dynamic": false,
|
|
"count": 1
|
|
},
|
|
{
|
|
"filePath": "src/renderer/src/components/settings/ChatFontFamilySetting.tsx",
|
|
"kind": "jsx-text",
|
|
"text": "fontFamily",
|
|
"dynamic": false,
|
|
"count": 1
|
|
},
|
|
{
|
|
"filePath": "src/renderer/src/lib/worktree-palette-evidence.ts",
|
|
"kind": "object-property:accessibilityLabel",
|
|
"text": "Workspace comment",
|
|
"dynamic": false,
|
|
"count": 1
|
|
},
|
|
{
|
|
"filePath": "src/renderer/src/lib/worktree-palette-evidence.ts",
|
|
"kind": "object-property:accessibilityLabel",
|
|
"text": "Created by automation",
|
|
"dynamic": false,
|
|
"count": 1
|
|
},
|
|
{
|
|
"filePath": "src/renderer/src/lib/worktree-palette-evidence.ts",
|
|
"kind": "object-property:accessibilityLabel",
|
|
"text": "Linked task",
|
|
"dynamic": false,
|
|
"count": 2
|
|
},
|
|
{
|
|
"filePath": "src/renderer/src/lib/worktree-palette-evidence.ts",
|
|
"kind": "object-property:accessibilityLabel",
|
|
"text": "Linked issue",
|
|
"dynamic": false,
|
|
"count": 1
|
|
},
|
|
{
|
|
"filePath": "src/renderer/src/lib/worktree-palette-evidence.ts",
|
|
"kind": "object-property:accessibilityLabel",
|
|
"text": "Listening port",
|
|
"dynamic": false,
|
|
"count": 1
|
|
}
|
|
]
|