diff --git a/.env.example b/.env.example index 71ee01db..6979548d 100644 --- a/.env.example +++ b/.env.example @@ -12,3 +12,7 @@ VITE_SENTRY_DSN= # PostHog (https://posthog.com → Project → Settings → Project API Key) VITE_POSTHOG_KEY= VITE_POSTHOG_HOST=https://eu.i.posthog.com + +# Lara CLI (https://github.com/translated/lara-cli) +LARA_ACCESS_KEY_ID= +LARA_ACCESS_KEY_SECRET= diff --git a/.gitignore b/.gitignore index 55104136..dce5cdfc 100644 --- a/.gitignore +++ b/.gitignore @@ -70,5 +70,6 @@ CODE-HEALTH-REPORT.md *.key.pub # Local environment variables (never commit) +.env .env.local .env.*.local diff --git a/docs/ABSTRACTIONS.md b/docs/ABSTRACTIONS.md index 4c2cd518..b590c3d8 100644 --- a/docs/ABSTRACTIONS.md +++ b/docs/ABSTRACTIONS.md @@ -586,12 +586,13 @@ The app uses internal light and dark themes owned by Tolaria (see [ADR-0081](adr ## Localization -App UI strings are centralized in `src/lib/i18n.ts` (see [ADR-0084](adr/0084-app-localization-foundation.md)): +App UI strings are resolved through `src/lib/i18n.ts`, with flat JSON catalogs in `src/lib/locales/*.json` (see [ADR-0087](adr/0087-json-catalogs-and-lara-cli-localization.md)): -- `AppLocale`: currently `'en' | 'zh-Hans'` +- `AppLocale`: canonical locale tags such as `'en'`, `'zh-CN'`, `'fr-FR'`, `'es-419'` - `UiLanguagePreference`: `'system' | AppLocale`; persisted settings serialize `system` as `null` -- `resolveEffectiveLocale()`: maps an explicit preference or system/browser language list to the effective supported locale +- `resolveEffectiveLocale()`: maps an explicit preference or system/browser language list to the effective supported locale, including legacy aliases - `translate()` / `createTranslator()`: resolve keys with English fallback and simple `{name}` interpolation +- `scripts/validate-locales.mjs`: asserts every checked-in locale catalog matches the English keyset and stays flat-string-only `App.tsx` owns the effective locale and passes it to localized app chrome through props. Settings and command-palette language commands call back into `saveSettings`, so UI language changes update the current session without touching vault content or reopening the vault. @@ -705,12 +706,12 @@ interface Settings { anonymous_id: string | null release_channel: string | null // null = stable default, "alpha" = every-push prerelease feed theme_mode: 'light' | 'dark' | null - ui_language: 'en' | 'zh-Hans' | null + ui_language: AppLocale | null default_ai_agent: 'claude_code' | 'codex' | null } ``` -Managed by `useSettings` hook and `SettingsPanel` component. `theme_mode` is installation-local because it controls device comfort rather than vault structure. `ui_language` is also installation-local: `null` follows the supported system language with English fallback, while explicit values pin the UI language for this installation. `default_ai_agent` is an installation-local preference that selects which supported CLI agent the AI panel, command palette AI mode, and status bar should target by default. The AutoGit fields are also installation-local: `useAutoGit` consumes them to schedule automatic checkpoints, while `useCommitFlow` and the status bar quick action reuse the same checkpoint runner and deterministic automatic commit message generation. +Managed by `useSettings` hook and `SettingsPanel` component. `theme_mode` is installation-local because it controls device comfort rather than vault structure. `ui_language` is also installation-local: `null` follows the supported system language with English fallback, while explicit values pin the UI language for this installation. Stored legacy aliases such as `zh-Hans` are normalized to canonical locale codes before the setting reaches React state. `default_ai_agent` is an installation-local preference that selects which supported CLI agent the AI panel, command palette AI mode, and status bar should target by default. The AutoGit fields are also installation-local: `useAutoGit` consumes them to schedule automatic checkpoints, while `useCommitFlow` and the status bar quick action reuse the same checkpoint runner and deterministic automatic commit message generation. ## Telemetry diff --git a/docs/ARCHITECTURE.md b/docs/ARCHITECTURE.md index 5af72b3b..39ab9a7b 100644 --- a/docs/ARCHITECTURE.md +++ b/docs/ARCHITECTURE.md @@ -32,7 +32,7 @@ Examples: - ✅ Vault: `_pinned_properties` in a Type note (every device should show the same pinned properties) - ✅ Vault: `_icon: shapes` in a Type note (icon is part of the type's identity) - ✅ App settings: `zoom: 1.3` (machine-specific preference) -- ✅ App settings: `ui_language: "zh-Hans"` (installation-specific UI language) +- ✅ App settings: `ui_language: "zh-CN"` (installation-specific UI language) ### No hardcoded exceptions @@ -100,7 +100,7 @@ flowchart LR | Frontmatter parsing | gray_matter | 0.2 | | AI (agent panel) | CLI agent adapters (Claude Code + Codex) | - | | Search | Keyword (walkdir-based file scan) | - | -| Localization | App-owned dictionary (`src/lib/i18n.ts`) | English fallback + `zh-Hans` | +| Localization | App-owned runtime + JSON catalogs (`src/lib/i18n.ts`, `src/lib/locales/*.json`, `lara.yaml`) | English fallback + Lara CLI sync | | MCP | @modelcontextprotocol/sdk | 1.0 | | Tests | Vitest (unit), Playwright (E2E/smoke), cargo test (Rust) | - | | Package manager | pnpm | - | @@ -420,7 +420,7 @@ The app uses internal app-owned light and dark themes (see [ADR-0081](adr/0081-i ## Localization -Tolaria's app chrome uses an app-owned localization layer in `src/lib/i18n.ts` (see [ADR-0084](adr/0084-app-localization-foundation.md)). English is the canonical fallback, and Simplified Chinese (`zh-Hans`) is the first additional locale. The installation-local `ui_language` setting stores an explicit locale when the user chooses one; `null` means "follow the system language when Tolaria supports it, otherwise English." Missing translation keys fall back to English so partially translated locales do not render broken placeholders. +Tolaria's app chrome uses an app-owned localization runtime in `src/lib/i18n.ts`, backed by flat JSON catalogs in `src/lib/locales/` and Lara CLI synchronization through `lara.yaml` (see [ADR-0087](adr/0087-json-catalogs-and-lara-cli-localization.md)). `en.json` is the canonical source catalog, locale files are one file per locale, and English remains the fallback for any missing locale file or key. The installation-local `ui_language` setting stores an explicit locale when the user chooses one; `null` means "follow the system language when Tolaria supports it, otherwise English." Legacy stored values such as `zh-Hans` are normalized to canonical locale codes like `zh-CN`. `App.tsx` derives the effective locale from settings and browser/system language hints, then passes it down to localized surfaces. Settings exposes a keyboard-accessible shadcn `Select`, and the command palette includes actions to open language settings or switch directly to a supported language. diff --git a/docs/GETTING-STARTED.md b/docs/GETTING-STARTED.md index be929618..9cc090ce 100644 --- a/docs/GETTING-STARTED.md +++ b/docs/GETTING-STARTED.md @@ -157,7 +157,8 @@ tolaria/ │ ├── lib/ │ │ ├── aiAgents.ts # Shared agent registry + status helpers │ │ ├── appUpdater.ts # Frontend wrapper around channel-aware updater commands -│ │ ├── i18n.ts # App-owned localization dictionary and locale resolution +│ │ ├── i18n.ts # App-owned localization runtime and locale resolution +│ │ ├── locales/ # JSON locale catalogs (English source + translated locales) │ │ ├── releaseChannel.ts # Alpha/stable normalization helpers │ │ └── utils.ts # Tailwind merge + cn() helper │ │ @@ -212,6 +213,7 @@ tolaria/ ├── scripts/ # Build/utility scripts │ ├── package.json # Frontend dependencies + scripts +├── lara.yaml # Lara CLI locale sync configuration ├── vite.config.ts # Vite bundler config ├── tsconfig.json # TypeScript config ├── playwright.config.ts # Full Playwright regression config diff --git a/docs/adr/0087-json-catalogs-and-lara-cli-localization.md b/docs/adr/0087-json-catalogs-and-lara-cli-localization.md new file mode 100644 index 00000000..44b73d20 --- /dev/null +++ b/docs/adr/0087-json-catalogs-and-lara-cli-localization.md @@ -0,0 +1,39 @@ +--- +type: ADR +id: "0087" +title: "JSON locale catalogs with Lara CLI synchronization" +status: active +date: 2026-04-27 +supersedes: + - "0084" +--- + +## Context + +ADR-0084 established an app-owned localization layer in `src/lib/i18n.ts` with English fallback and hand-maintained TypeScript dictionaries. That was enough for the first localized UI surface, but it does not scale well to a broader locale matrix or machine-assisted translation workflows. + +We now want Tolaria to support a wider set of locales and to automate translation updates with Lara CLI while keeping the runtime dependency-light and preserving the existing English fallback behavior. + +## Decision + +Tolaria will keep its app-owned runtime localization layer, but the translation source-of-truth moves to flat JSON catalogs in `src/lib/locales/`. + +- `src/lib/locales/en.json` is the canonical source catalog. +- Additional locale files use one JSON file per locale code (for example `zh-CN.json`, `fr-FR.json`). +- `src/lib/i18n.ts` keeps fallback, interpolation, locale resolution, and props-down locale wiring, but it now loads locale catalogs from JSON files instead of TypeScript objects. +- Lara CLI configuration lives in `lara.yaml`, and translation runs happen through repo scripts (`pnpm l10n:translate`, `pnpm l10n:translate:force`). +- `scripts/validate-locales.mjs` verifies that every locale catalog present in the repo matches the English keyset and only contains flat string values. +- Legacy stored preferences such as `zh-Hans` are normalized to the canonical `zh-CN` locale. + +## Alternatives considered + +- **Keep TypeScript dictionaries and point Lara at `.ts` files**: possible, but JSON is the more standard interchange format for translation tooling and keeps diffs simpler for translators and reviewers. +- **Adopt a full frontend i18n framework now**: rejected because Tolaria already has working locale propagation and fallback behavior, and the immediate need is better content management plus translation automation. +- **Store translated strings outside the app repo**: rejected because Tolaria's chrome localization should stay versioned with the app code that consumes it. + +## Consequences + +- Translators and automation tools now work against plain JSON catalogs instead of editing source code. +- The runtime keeps English fallback behavior, so a missing locale file or missing key does not break app chrome. +- Locale additions become a data/config change first: add the locale metadata, run Lara, review JSON output, then ship. +- Localization work now has a dedicated validation step that can run in CI or before commit. diff --git a/lara.lock b/lara.lock new file mode 100644 index 00000000..16dd7c99 --- /dev/null +++ b/lara.lock @@ -0,0 +1,406 @@ +version: 1.1.0 +files: + e6ab9bf36c30b9d72bc97897e0d89a16: + command.noMatches: a2a97d96e196148e04c51c47d985e327 + command.palettePlaceholder: 6d6b61b4c08ed382ad7ba406a9ba395d + command.footerNavigate: e3808db59d29bcfc91532d6539c4f9ae + command.footerSelect: 6d73339906ed42e20f6be91bf7f5f4a9 + command.footerClose: dcf77460e548fe215ef28583f092a496 + command.footerSend: 6b19fc9694fd8b7b3f1aafaca83db864 + command.aiMode: 7197e3c5f9afd24022377176611f35cb + command.openSettings: 638c05f4f159a403e04aebe94b46a2a8 + command.openSettings.keywords: ab6b5e03395f4db955ed9cbfd4de33b7 + command.openLanguageSettings: e5a425aa6222fab3df66c0e1e0ca4183 + command.openLanguageSettings.keywords: 68efcb7e847b1a9d472baa609824be80 + command.useSystemLanguage: b7f0315c47d4a59faa2a49571fcf1fca + command.openH1Setting: 05b4f6edc0e98b29670e8ee902cdb9bf + command.contribute: 9887a4451812854f0f1b6f669a874307 + command.checkUpdates: f77f38f684c8b974dd4a56bb321cfd5f + command.group.navigation: 846495f9ceed11accf8879f555936a7d + command.group.note: 3b0649c72650c313a357338dcdfb64ec + command.group.git: 0bcc70105ad279503e31fe7b3f47b665 + command.group.view: 4351cfebe4b61d8aa5efa1d020710005 + command.group.settings: f4f70727dc34561dfde1a3c529b6205c + command.navigation.searchNotes: d8002e888293774162e43b263658cbb5 + command.navigation.goAllNotes: 7030dcbbb85b6f01d3c8b2fdcb6a5cff + command.navigation.goArchived: b620b8cb8fef8a287b986ff83a992a2a + command.navigation.goChanges: c6dd094ce55f8a765b68cef40a1c6bd9 + command.navigation.goHistory: 39b86b661267053a240ffe89b9eca847 + command.navigation.goBack: 4f2f5e1d6e2a13469ad431474a68ab82 + command.navigation.goForward: d13c318438f67d749cfc0904e3fafcda + command.navigation.goInbox: 522af71c26bc7e3ce1dae6204c2fbe9f + command.navigation.renameFolder: a3d3b0f787c52a984af61085c577bff2 + command.navigation.deleteFolder: 991e322cd8225c369a963bb60b0a9688 + command.navigation.showOpenNotes: bd1905c340d0518187865f4a6694e14d + command.navigation.showArchivedNotes: 241399b908884adfe8608a3ab827ca74 + command.navigation.listType: 4f70c27c6826a37543c8ada561397c22 + command.note.newNote: 23c4edda8b815f750782f01870d27271 + command.note.newType: adce5108f18945cc502a06c02445e32d + command.note.newTypedNote: 1493eda772c2179cb6247169d00723b2 + command.note.saveNote: 2a309cda46e95b00d2a5a8afb3cc0047 + command.note.findInNote: f72f8f93d8e6119d5d08b60eb3a7b3bc + command.note.replaceInNote: b008e2e20c5e4cd202f4386271d6bed1 + command.note.deleteNote: 56f727a2ee11d15159f1aa6373314cb6 + command.note.archiveNote: 6043509fda6dd7f6f167e4108033f8e8 + command.note.unarchiveNote: 6937fb694d00b11d579c21cd4bf103a2 + command.note.addFavorite: 782d6b28dce4e5d0b2ac92142c6624ba + command.note.removeFavorite: 4f9b5fa08f2ef86fdc5d0ceefc271981 + command.note.markOrganized: 505ad63357f533fb39e4276a2bfb9496 + command.note.markUnorganized: 1c62f1bffcb793c63d729096d2794ced + command.note.restoreDeleted: d704f8283ca322a9b3713d2ccf9a6cd4 + command.note.setIcon: 99b81d2663266c53e45e4d9c62c87a29 + command.note.removeIcon: 4bccbad66025e506b37b4218498b299c + command.note.changeType: 4a54ffd47ed1f65ee97f34bfe8c3de14 + command.note.moveToFolder: 3a0f26c42b9168ad839960d134065905 + command.note.openNewWindow: 6f67b2857093fa0fd45b1122dff4865d + command.git.initialize: 54a57cdc7105db6fb22dca661ce01ad6 + command.git.commitPush: 8cb5faa4019716f43dd69c41496b1d46 + command.git.addRemote: 7eef951b3f909340a68dc9811be83e9e + command.git.pull: 3988d61f4a4546381f61a4eaf61315b4 + command.git.resolveConflicts: 871ac36968cfca3d2297a89b28b25dee + command.git.viewChanges: b2699edf69d8e1031afce2b2f94e5c8d + command.view.editorOnly: 8355e056b32086b9190d639be290dda8 + command.view.editorNoteList: b9604b1609eb6f581cd9570dca72d3f0 + command.view.fullLayout: 1cebdf839eee2b1713828731aaa3b507 + command.view.toggleProperties: 54f12756a363401243d82cbd0466117e + command.view.toggleDiff: 148a10ef6f04f897e73289f529ecae86 + command.view.toggleRaw: 9b622257cd6345ceaf58e42b1410899b + command.view.leftLayout: 5046a7166675e2d0175b9da3befdcaca + command.view.centerLayout: 3bc6759c005178aae519aa3dd227cb74 + command.view.toggleAiPanel: 4279cbf31767465f25feff6e7bdd336e + command.view.newAiChat: 1b0a886d6e77f628ec96c2d71cdb0a9b + command.view.toggleBacklinks: b3c4be2d2c07bb8df181355a2c3658a7 + command.view.zoomIn: ae4a8e406b707636392b6673fca0e6a6 + command.view.zoomOut: 97326f8cd9df886a6b19af180fb7dcc9 + command.view.resetZoom: 193ee8c32391fc5cc303a51617cfd046 + command.settings.createEmptyVault: d7c9673bb6c62a2b8aef009546ce8b23 + command.settings.openVault: c40e74822da9417fdf52eb4a37bb23f2 + command.settings.removeVault: 390e2b2031cde0dd18381efee0923bea + command.settings.restoreGettingStarted: b3358dc1c7b873b2a02ac6f05473fe4d + command.settings.manageExternalAi: c36b9bd171f11a18a1e624365d2b57ac + command.settings.setupExternalAi: 24eea679eb699763daa2e3f2a67fcf9a + command.settings.reloadVault: f6e506dad6b6cf2be24d9438d458ae54 + command.settings.repairVault: cee560b1fd5ad9d1ff1c19a0a2afe77a + command.ai.openAgents: 612abe804edd0f5ae228a534f77f3d23 + command.ai.restoreGuidance: 23331fecc692d11d85cf24838ed273f2 + command.ai.switchToAgent: 5bb02187e653b360ab7ed661403271f2 + command.ai.switchDefault: 42724de254240d598fbcc40fdb5b18a3 + command.ai.switchDefaultWithAgent: d405f7914bb1cd86172f108f3c33d953 + settings.title: f4f70727dc34561dfde1a3c529b6205c + settings.close: 7812b3644f897c5d3efb0dd63440e751 + settings.sync.title: 36f62a237420dcdc7096ad3a9018c4d9 + settings.sync.description: 06a6957c40867be2c28783183dc1bf5f + settings.pullInterval: 4f95ca677398604bca241427261ed07b + settings.releaseChannel: 2da37055e15a217f18bd403922085c3f + settings.releaseStable: fa3aff3c185c6dc7754235f397c2099a + settings.releaseAlpha: 6132295fcf5570fb8b0a944ef322a598 + settings.appearance.title: a1c58e94227389415de133efdf78ea6e + settings.appearance.description: ca7b75a4c10ab8a540707e3a96cd3592 + settings.theme.label: d721757161f7f70c5b0949fdb6ec2c30 + settings.theme.light: 9914a0ce04a7b7b6a8e39bec55064b82 + settings.theme.dark: a18366b217ebf811ad1886e4f4f865b2 + settings.language.title: 4994a8ffeba4ac3140beb89e8d41f174 + settings.language.description: e2bb9b523067fdc32a494b1d6fd97906 + settings.language.label: 244c7b77926f077b863c33ff1244e1ec + settings.language.system: 41e2252344aa441e925589ddcb762e6d + settings.language.summary: edc83f1f48ce29bc80bf2f2f90e24997 + settings.autogit.title: e59f720605ec1cfa42b3b97d89d7e883 + settings.autogit.description.enabled: e65bec70ca4d7921be56f84d10836018 + settings.autogit.description.disabled: 1143ef6ee00614816785e3c6fc299d51 + settings.autogit.enable: 9b205a4ae0e3ad4e6708155880ce9c75 + settings.autogit.enableDescription: a7424a8f90c0b7f290a8144d12374554 + settings.autogit.idleThreshold: 28016cc6fccd951a904ee3020cd733b6 + settings.autogit.inactiveThreshold: d28cb60d1e70e020ae8d1294e32dd474 + settings.titles.title: 761443f70a5067ecf015c6fb3fae9cef + settings.titles.description: b94aeeca78dd376cc19b9aa019e53f6c + settings.titles.autoRename: 5383db8e790ebf5f956d9c59cb4c4f67 + settings.titles.autoRenameDescription: cc28c28d8817736e658082a2261d9a6e + settings.aiAgents.title: 27f08387b26e1ceeb1b60bd9c97e7a47 + settings.aiAgents.description: a13222e67eb121676ff6dfc7b085f02d + settings.aiAgents.default: 6af573559fd05d8c35bc57b41cc78e24 + settings.aiAgents.installed: 73329564760013a7824ff9d5d1af91ff + settings.aiAgents.missing: ea21841da70e6405af19fabc4ff8bdd9 + settings.aiAgents.ready: 909a648c713be25fcd050725d0a41e37 + settings.aiAgents.notInstalled: 0ac3f76ef78bfdbab6331731ee56ba22 + settings.workflow.title: 24f47cdbe9ddba774a7cc53e51d9032e + settings.workflow.description: aa9a07539b87cf407c3edc8a22732d45 + settings.workflow.explicit: 54a5b5c27937d25271c3127d093e8361 + settings.workflow.explicitDescription: ce523427b5dd0f9895f63d1fbb90ad24 + settings.workflow.autoAdvance: 9ed337f5bc61603d19a1ef35f3a3a243 + settings.workflow.autoAdvanceDescription: ae58ad8abf03df7cbdae8c3a725258f7 + settings.privacy.title: 0dd6c14e00cc9f45a68c1bca88d1317d + settings.privacy.description: 33d53059be620b58e38b8e5c5ab26b27 + settings.privacy.crashReporting: b4efc5b61526566d431e99242f5c21b4 + settings.privacy.crashReportingDescription: e9d7c7efce44adc08d0460be1aad5c42 + settings.privacy.analytics: 29d55bb222ea76e1a17396375dfab228 + settings.privacy.analyticsDescription: a0f8b61d555d6d3fd279de2f47aaca76 + settings.footerShortcut: 7dc840d6b0ef9f422a663ba41975871e + settings.cancel: ea4788705e6873b424c65e91c2846b19 + settings.save: c9cc8cce247e49bae79f15173ce97354 + common.cancel: ea4788705e6873b424c65e91c2846b19 + locale.en: 78463a384a5aa4fad5fa73e2f506ecfc + sidebar.nav.inbox: 3882d32c66e7e768145ecd8f104b0c08 + sidebar.nav.allNotes: cd76cf851b08a9d2feafaf255bc1f4d5 + sidebar.nav.archive: e727b00944f81e1d0a95c12886ac4641 + sidebar.group.favorites: 953bf4d5e8a1807c15dec4e255384b1d + sidebar.group.views: 8f56a72923a6ca8ff53462533d89e567 + sidebar.group.types: 6b20155008db90cf7589c07baa7334e9 + sidebar.group.folders: d86e2756f698bea5aac3e2276639f042 + sidebar.action.createView: ba019414ea8c7fcdb4a83a70ec1bb639 + sidebar.action.editView: acdf34bd08b0692b906d446e590b1eb9 + sidebar.action.deleteView: c8f4f9cd8ff820f955474e5c9f70ff39 + sidebar.action.customizeSections: 050a134cad1e9c6f04abe5d635592703 + sidebar.action.renameSection: 8936914051df04e7550d0eeb4a31e0e0 + sidebar.action.customizeIconColor: 9a2f685c74d261ab483ef00dee5314fe + sidebar.action.createType: 6cfb8b8aa3fdce38e675819691b48f5c + sidebar.action.collapse: 00873bdddd457791609bff1243c40a6b + sidebar.action.expand: 8f98e9696f6eed958573012f52710faa + sidebar.action.createFolder: 5dc1e97c14fbe72d8b566ce29c39f010 + sidebar.action.renameFolder: db76034f8218cda07dadb746a5643019 + sidebar.action.deleteFolder: 2a2f15300f6f7c81d69860ac1796b517 + sidebar.action.revealFolderMenu: 76f4ed52da9937ae432dcf5a108fabb4 + sidebar.action.copyFolderPathMenu: 1779ec6018a385912c1a5499a1bbf2b2 + sidebar.action.renameFolderMenu: deb1d8fa030292e7eda2c244b313aca2 + sidebar.action.deleteFolderMenu: c78c889ac7396dc148fc859c9221e545 + sidebar.folder.name: 710417c4e57a6a01500fe4c0c448ce3d + sidebar.folder.newName: e0ad5b2db20359a85de80c1231323bea + sidebar.folder.expand: b7545cb143816942ff096d890090fb6f + sidebar.folder.collapse: e9f8c6da708219313d72d99cc3998388 + sidebar.section.name: c3642037e309db278bbbfe0590114c02 + sidebar.section.showInSidebar: e38d073926d6fb3dfc4d4347708e3cf5 + sidebar.section.toggle: 2992ffbc76e607a2dc0e99781f101637 + sidebar.disabled.comingSoon: 81151a1669ebd695e837f304a0d8ec79 + noteList.title.archive: e727b00944f81e1d0a95c12886ac4641 + noteList.title.changes: c112bb3542e98308d12d5ecb10a67abc + noteList.title.inbox: 3882d32c66e7e768145ecd8f104b0c08 + noteList.title.history: 16d2b386b2034b9488996466aaae0b57 + noteList.title.view: 4351cfebe4b61d8aa5efa1d020710005 + noteList.title.notes: f4c6f851b00d5518bf888815de279aba + noteList.searchPlaceholder: 4857cd2689a0a40eb4a77cdc745c518e + noteList.searchAction: 5012120fc480c67686dd22ee2f9493cd + noteList.createNote: f1484bc40bd3fe3430c13fb89e2ce1af + noteList.empty.changesError: 4fca500c4b70f61f7d9413c57c34bdc4 + noteList.empty.noChanges: ad82ac153532f5625760c29c176c5d5f + noteList.empty.noArchived: 75fa9e2aaa902f65d433be856a2e8331 + noteList.empty.noMatching: 22838e3b8d3d174d33d7986ab6bdd693 + noteList.empty.allOrganized: ea8fbb54d21c03fae1469635e7043b9b + noteList.empty.noNotes: 910bd677fdd52f3e6edb4abc1d03ade8 + noteList.empty.noMatchingItems: 25cd76c4bbd00b682a45687705b41a14 + noteList.empty.noRelatedItems: 67eecd103b56ef0e56fd892d379b5a5e + noteList.sort.modified: 35e0c8c0b180c95d4e122e55ed62cc64 + noteList.sort.created: 0eceeb45861f9585dd7a97a3e36f85c6 + noteList.sort.title: b78a3223503896721cca1303f776159b + noteList.sort.status: ec53a8c4f07baed5d8825072c89799be + noteList.sort.by: 5cd12b67b005056a94f06368a7645b8e + noteList.sort.menu: 62bfadcf958eb6ad238e6c71e312a0ce + noteList.sort.ascending: cf3fb1ff52ea1eed3347ac5401ee7f0c + noteList.sort.descending: e3cf5ac19407b1a62c6fccaff675a53b + noteList.filter.open: c3bf447eabe632720a3aa1a7ce401274 + noteList.filter.archived: 7d69b3cb4cada18ae61811304f8fbcb5 + noteList.filter.week: d2ce009594dcc60befa6a4e6cbeb71fc + noteList.filter.month: 7cbb885aa1164b390a0bc050a64e1812 + noteList.filter.all: b1c94ca2fbc3e78fc30069c8d0f01680 + noteList.properties.customizeColumns: be39bb193d872e11bb21388add6eca23 + noteList.properties.customizeAllColumns: 0d382ece9a9d08bb9ddf10ed2c88d726 + noteList.properties.customizeInboxColumns: e7cf53b914ce1079801eeee603875660 + noteList.properties.customizeViewColumns: a5612e5d2aa2e86941d536a85b27c8b4 + noteList.properties.showInNoteList: f22a57c5fc14ff477000cc66d837c344 + noteList.properties.searchPlaceholder: 9c7569eb531ff041b2b7cf4de1e5a619 + noteList.properties.searchLabel: de1bc9695d5e79a75296abf74dc25056 + noteList.properties.noMatches: 1627ecc53b9e97c94b2b6b1b93a58721 + noteList.properties.reorder: c0955c7efaa1ce90d449a23cbc52b553 + noteList.changes.restoreNote: d6e99303c0e0b7b2abce06fe9214788b + noteList.changes.discardChanges: 98313f623bb6f464b9a154eca0b99bf3 + noteList.changes.restoreDescription: 45e13380b0538e6cbff330f99c260c0a + noteList.changes.discardDescription: cd953f51a81e10f8c90135e0106a45d6 + noteList.changes.thisFile: 976b976e66879a470635bf0f660e81fc + noteList.changes.restore: 2bd339d85ee3b33e513359ce781b60cc + noteList.changes.discard: d94b42030b9785fd754d5c1754961269 + noteList.changes.cancel: ea4788705e6873b424c65e91c2846b19 + editor.empty.selectNote: a71ec7c80aefe49c59f6aba033bf453e + editor.empty.shortcuts: 1133fdf3ecef6a09dd9e2a185e1bd4ec + editor.raw.label: 7a9754c15264b0604aa31dfea32321ea + editor.find.findLabel: 4cfa6c981549e990fe2344e4c805405e + editor.find.findPlaceholder: 4cfa6c981549e990fe2344e4c805405e + editor.find.replaceLabel: 0ebe6df8a3ac338e0512acc741823fdb + editor.find.replacePlaceholder: 0ebe6df8a3ac338e0512acc741823fdb + editor.find.matchCount: 29d3cd243c6850f5fbac283e79d6d6a7 + editor.find.noMatches: 3b470c1f6a10f58c8a8cb6b904577786 + editor.find.invalidRegex: 9704b2ccc6158864810a313702019d68 + editor.find.regexMustMatchText: 267728c2e7f2889b39847ee9b9b38891 + editor.find.previousMatch: afb1b7e6bbdfaa97114e1b519a817f13 + editor.find.nextMatch: 7f4d218b4f566ea7ff69ab8d912ba7b9 + editor.find.showReplace: 82c8fdb73dfe8baa1759a36c6c0fb282 + editor.find.hideReplace: a85baf9735f9acf26aa15b70f2ee55fb + editor.find.regex: 7486f19f279f95357c84706dd09ce9da + editor.find.matchCase: ba945280b8802ee1a7a50140e2fe94e2 + editor.find.close: b040fbda901d2135cad53e54e0127071 + editor.find.replace: 0ebe6df8a3ac338e0512acc741823fdb + editor.find.replaceAll: b1c94ca2fbc3e78fc30069c8d0f01680 + editor.toolbar.rawReturn: 5ddcf5e0dc8b933b344bb6ca3d8e131d + editor.toolbar.rawOpen: 89ad60735a649b60dacd2301cda0c4ec + editor.toolbar.centerLayout: 3fabf7e9b285eeec90704d271f1049b7 + editor.toolbar.leftLayout: acab6c8612816e012ff9f4220a42e485 + editor.toolbar.removeFavorite: 7188286e36fc6c1892dd53aaa54237fb + editor.toolbar.addFavorite: 910885435dbc44a22b68cb45c79e4a7e + editor.toolbar.markUnorganized: 83fb1b23a3609fab493737fe7af0a198 + editor.toolbar.markOrganized: 9d170c916afae3d7a82456838728ffa5 + editor.toolbar.noDiff: b2c4189f90648aaeb5cd2e81f9bd8d94 + editor.toolbar.loadingDiff: 430386d6aae3570fd399a133e41c7372 + editor.toolbar.showDiff: 08d579de8d3abdcdfce0953a797362c6 + editor.toolbar.openAi: d2e93006570a66709c8ce0dc27082ef1 + editor.toolbar.closeAi: cd46973ef73076d612dff9903ce54498 + editor.toolbar.restoreArchived: 1bff5cf4943af64c05b2e9aeadccbc84 + editor.toolbar.archive: 63dc964c32e715217b49f8739d49636b + editor.toolbar.delete: f48134a07b016a1de05d4ba6d2fbfb41 + editor.toolbar.revealFile: 76f4ed52da9937ae432dcf5a108fabb4 + editor.toolbar.copyFilePath: 64c6cec5ca57efbb8c9c93ae5fbccd27 + editor.toolbar.openProperties: 948b90b60b8ce827f179e8c5b85b112e + editor.filename.rename: c31c2b468229232ad6287e734fe67d96 + editor.filename.renameToTitle: bff34a6a2dd1eb87c59403946679237f + editor.filename.trigger: 4e9739c2f937c828bbf5d1f935fe7fb9 + editor.banner.archived: 7d69b3cb4cada18ae61811304f8fbcb5 + editor.banner.unarchive: 9fd02d2eb5ce348a74372eea202a0aec + editor.banner.conflict: 384fc5a4b31c662b1e3426a7ef56441e + editor.banner.keepMine: 544a2f2e8e09f93919f10e1920d1b69e + editor.banner.keepMineTooltip: 9988cb86b051dd728e2d2f852f0283e4 + editor.banner.keepTheirs: 46131020af44cc6ec4bfa0a8ff39e044 + editor.banner.keepTheirsTooltip: 9e5b845c4459747d6ab0df6438ccfac4 + inspector.title.properties: 9fc2d28c05ed9eb1d75ba4465abf15a9 + inspector.title.propertiesShortcut: 427d1cbdc813cf54c5fac2508d38d407 + inspector.title.closePropertiesShortcut: 97b953e45042d4143dd19624dc345d29 + inspector.empty.noNoteSelected: 046d95682b747a30ed8a7b0b1d581629 + inspector.empty.noProperties: 6864166e0f65d81b1eb474e41fde8822 + inspector.empty.initializeProperties: edf249d214b68f5afe8634c577b709c4 + inspector.empty.invalidProperties: 2ee2429c1ffbabcda9f57f91fb6c0b9d + inspector.empty.fixInEditor: b86d4934630d68bc5333c0feb25e5f3f + inspector.properties.addProperty: 9820ade036bf1bdf80c0b7da24a4ce0a + inspector.properties.deleteProperty: f1d0ab48c8596108e949dfc90e13050b + inspector.properties.none: 6adf97f83acf6453d4a6a4b1070f3754 + inspector.properties.missingType: 9179080e7bcc72408f3de7cb944ff400 + inspector.properties.missingTypeAria: 582c2c46117cff0534d13e7c8a45a3ba + inspector.properties.searchTypes: 84c8d94846183a79444bf36667e8d7ea + inspector.properties.noMatchingTypes: 9b64c31214171ba3b2d591743990b840 + inspector.properties.yes: 93cba07454f06a4a960172bbd6e2a435 + inspector.properties.no: bafd7322c6e97d25b6299b5d6fe8920b + inspector.properties.pickDate: e8e91fbba934dc8adfd7e433f5193911 + inspector.properties.valuePlaceholder: 689202409e48743b914713f96d93947c + inspector.properties.propertyName: 7e9982311d69d66d38809e5d85377a08 + inspector.relationship.add: ec211f7c20af43e742bf2570c3cb84f9 + inspector.relationship.addRelationship: d2b0cb45dcdbb00ee70db397c36f73ad + inspector.relationship.name: 7ed3fccc071d6939eff211b1a6fd9696 + inspector.relationship.noteTitle: f72ea00f174785710f0369b23c53963c + inspector.relationship.createAndOpen: 55bb53fea743c584c4024e7439c55bfe + inspector.info.title: 4059b0251f66a18cb56f544728796875 + inspector.info.modified: 35e0c8c0b180c95d4e122e55ed62cc64 + inspector.info.created: 0eceeb45861f9585dd7a97a3e36f85c6 + inspector.info.words: 6f15b8d4b7287d60a8ea3d1c5cbadc84 + inspector.info.size: 6f6cb72d544962fa333e2e34ce64f719 + update.available: 992477975168b876be8e77ce2975e390 + update.releaseNotes: 5dd03e8d039863e563e049be198c3fd3 + update.updateNow: 99b1054c0f320be9f109c877a5efd0b2 + update.dismiss: c8a59e7135a20b362f9c768b09454fdb + update.downloading: 2c7fdcafb08f831420f661810f826549 + update.readyRestart: 4d7487b02d955a44d599189ec383e469 + update.restartNow: 2d9c2140c53daf05855033aaceeaa8fd + status.update.check: eb1b4bb3667dd670210c7822badc2f1d + status.zoom.reset: dbf36ab275e5fbd256590e65aa1ca9a3 + status.feedback.contribute: 96ab5025e38aef43fdb73c9830795264 + status.feedback.label: 9887a4451812854f0f1b6f669a874307 + status.theme.light: 4abf27a209985375949aaa426c7c7f3d + status.theme.dark: 541be2a55a52b518b8e510c476c7cc95 + status.settings.open: bae08226d065231df6f01b08cd681c9b + status.build.unknown: d250349dd489bdfeb0cb0750b8b3ff89 + status.vault.switch: 8a2ad262643c556ff0cfa99497aaa529 + status.vault.default: 5b70a213f150f01f0776fa9481ef2ddf + status.vault.createEmpty: f37c03f236fbf1516222360a936249e8 + status.vault.openLocal: a367344e0429a12a5cc9a6cecbbfcde5 + status.vault.cloneGit: a7d0aef7c6237a36e54fd5a26e9c23fe + status.vault.cloneGettingStarted: 9953a11a477b441976a626a9acf5d7df + status.vault.notFound: 3119b7fa94c96209bca571b7c7ed0b7e + status.vault.remove: 7f3b4f76df23626170940dbc55c70728 + status.remote.noneConfigured: 18a4edd4e8d862ccb343937f45585fb1 + status.remote.inSync: a56f571b4df55d88fb06e61e343b3c91 + status.remote.aheadTitle: 1516f4b92671b83c17441b4cddf25a7a + status.remote.behindTitle: 55ee20469bc46b7c61e7515fbfdc0b5d + status.remote.ahead: 681557ace3a84e15060ffca1623b75e6 + status.remote.behind: 1825bb12c857a71861280e490e29debd + status.remote.add: f292f8ef85219f0acde6b66eb9c9c0f4 + status.remote.none: ed3f2ebe0d847584fd62fc9e0db2df33 + status.remote.noneDescription: f47636010c21c88a6f81cc41a962b26c + status.sync.syncing: b21888f3f83c224b3451901da243d00a + status.sync.conflict: f1d4ac54357cc0932f385d56814ba7e4 + status.sync.failed: 85b08b086888f8ee2680ddd3398f3574 + status.sync.pullRequired: 1ea27a2d3048b078a18665b24e8dcd91 + status.sync.notSynced: d18d6927f7ffe96f72e18b4da12e306b + status.sync.justNow: 7b9275ee2786ef410555041b92b36bb3 + status.sync.minutesAgo: b3ac76d1e2595531940035a8e2e2d13c + status.sync.resolveConflicts: b9f44cc5ee01c964f004f16e3a2833ca + status.sync.inProgress: 278d2bf6768809fbf6e97e7bb319a7c0 + status.sync.pullAndPush: e07c084a9e734a54bd079d5327a924e7 + status.sync.retry: ca43e18d4f930e8a3e6d403f31d30a39 + status.sync.now: c03fafa3a653240e6104348e1293bb88 + status.sync.synced: 5befab0dde764b6dd8b24a34dc30afa7 + status.sync.conflicts: d35cef9595a935771f5e8158f387227b + status.sync.error: 902b0d55fddef6f8d651fe1035b7d4bd + status.sync.status: 76590d5f9708692e3735891bdca40903 + status.sync.pull: 718f59718640c6506b3721fbc8bf3a4d + status.conflict.count: 46293d20ed2071fb30762b71fdaa5894 + status.offline.title: 3bf45a7003646cc4f963810b0b7ac0f5 + status.offline.label: 8d9da4bc0e49a50e09ac9f7e56789d39 + status.changes.view: 6d60d24d8f475ddaef94bbbc58514b5a + status.changes.label: c112bb3542e98308d12d5ecb10a67abc + status.commit.local: 6474fe7e2ed525df3da3eb447943bfcd + status.commit.push: a4aaf10ef20cf17a982bb5b6dad198e0 + status.commit.label: 59d5b10c3a447f036d85cb5ce524c96c + status.commit.openOnGitHub: 445ad18680a573c2aab062c3273ae16a + status.git.disabledTooltip: 6981fe5b4993e4b3299c774b185ecd70 + status.git.disabled: 7f822b0ee91b8922b0c41723da867bd1 + status.history.onlyGit: 7da5397c33ada1b73a81c5a449cbab16 + status.history.open: 802ec1fd97592612c19ebef7bebbb5c2 + status.history.label: 16d2b386b2034b9488996466aaae0b57 + status.mcp.notConnected: 7e8850f4a564088ced4f592996a39309 + status.mcp.unknown: 051ff29ff900592f75974d0ef554c2eb + status.claude.missing: 89021856e6152467f54ed33faed55e2f + status.claude.label: 38c66b824d5769e42c3866005296525b + status.claude.install: 1f4688bc2a2acc268811c9edcec810a1 + status.ai.noAgents: 0876a176a6297e79366d0a2935851f81 + status.ai.noAgentsTooltip: 1bdc02ec2dd7f9701b4371ffd5770318 + status.ai.selectedMissing: a37f3dbc73725219e90d709fe0d3ad97 + status.ai.defaultAgent: 79650d57d1678e56c75dbbcba6ea87f7 + status.ai.restoreDetails: 47a913b58ce40add6521bc93e807476f + status.ai.withGuidance: 1eafd34810db6bba54dac7aa549b5182 + status.ai.active: 059e3a3167c2ab00f4ca872e82a48d98 + status.ai.unavailable: 0d3e6e3afef545710aa24ed2ea4990af + status.ai.install: 349838fb1d851d3e2014b9fe39203275 + status.ai.installAgent: 78ac3395d977f8b86ca9a02f781f4af8 + status.ai.vaultGuidance: 7bb4644efe6ae7cec9993c8bd85f1519 + status.ai.restoreGuidance: 23331fecc692d11d85cf24838ed273f2 + status.ai.openOptions: d387b1ab67586c7a2d83db8900a4dd8e + pulse.title: 16d2b386b2034b9488996466aaae0b57 + pulse.today: 1dd1c5fb7f25cd41b291d43a89e3aefd + pulse.yesterday: ebfe9ce86e6e9fb953aa7a25b59c1956 + pulse.commitCount: 17dc5f11868c946f55ff8164d318856d + pulse.commitSingular: fffca4d67ea0a788813031b8bbc3b329 + pulse.commitPlural: a90814b38bbdfe717205f6d24183f6a7 + pulse.openOnGitHub: ddab0146d46f585f2ab36072c92a0048 + pulse.expandFiles: 53c567ce9f999dd937fc954c39853e81 + pulse.collapseFiles: 0ae74096d72faf840cd7d35635aa0cf9 + pulse.noActivity: cfbd8245c849f5f00b495d61ea14dfdf + pulse.emptyDescription: b5ee4968b62908444166182fe8e593c1 + pulse.retry: 6327b4e59f58137083214a1fec358855 + pulse.loadingActivity: 26bf6a6bc2fd8148cd8753542a0ddf86 + pulse.loading: 5f02f05c744a0f875aebb8625ae1486f + pulse.loadError: 63c17996fe219e6bd33b27d2b7ce0c96 + command.switchLanguage: 60f1a6760c7d1da0b1f7f6d0529608ee + locale.itIT: 4be8e06d27bca7e1828f2fa9a49ca985 + locale.frFR: ad225f707802ba118c22987186dd38e8 + locale.deDE: 86bc3115eb4e9873ac96904a4a68e19e + locale.ruRU: deba6920e70615401385fe1fb5a379ec + locale.esES: cdbe021be1976335ab583a845edf7ed6 + locale.ptBR: 26d5352ead4a731f3d11eb2e85d0e297 + locale.ptPT: 71bfc0d79772120b52c1c0782450ff84 + locale.es419: edbf64ac382b82a54795fb409beb54be + locale.zhCN: 1e81fc32fea0e9f3a978661e4b5e484d + locale.jaJP: f32ced6a9ba164c4b3c047fd1d7c882e + locale.koKR: d0bdb3cde477d82e766da05ebda50ccb diff --git a/lara.yaml b/lara.yaml new file mode 100644 index 00000000..9df72287 --- /dev/null +++ b/lara.yaml @@ -0,0 +1,30 @@ +version: "1.0.0" + +project: + instruction: > + Tolaria is a desktop knowledge-management app. Keep product names, CLI names, + markdown wikilinks, frontmatter keys, file paths, and placeholders like + {agent}, {zoom}, {language}, {name}, {label}, {file}, and {count} unchanged. + +locales: + source: en + target: + - it-IT + - fr-FR + - de-DE + - ru-RU + - es-ES + - pt-BR + - pt-PT + - es-419 + - zh-CN + - ja-JP + - ko-KR + +files: + json: + include: + - "src/lib/locales/[locale].json" + exclude: [] + lockedKeys: [] + ignoredKeys: [] diff --git a/package.json b/package.json index 596da2a5..46438ca7 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,9 @@ "build": "tsc -b && vite build", "bundle-mcp": "node scripts/bundle-mcp-server.mjs", "lint": "eslint .", + "l10n:translate": "lara-cli translate", + "l10n:translate:force": "lara-cli translate --force", + "l10n:validate": "node scripts/validate-locales.mjs", "preview": "vite preview", "tauri": "tauri", "test": "vitest run", @@ -72,6 +75,7 @@ "unicode-emoji-json": "^0.8.0" }, "devDependencies": { + "@translated/lara-cli": "^1.3.2", "@eslint/js": "^9.39.1", "@playwright/test": "^1.58.2", "@tauri-apps/cli": "^2.10.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d71744a0..1fed9494 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -99,7 +99,7 @@ importers: version: 10.47.0(react@19.2.4) '@tailwindcss/vite': specifier: ^4.1.18 - version: 4.1.18(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.30.2)) + version: 4.1.18(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.3)) '@tauri-apps/api': specifier: ^2.10.1 version: 2.10.1 @@ -185,6 +185,9 @@ importers: '@testing-library/react': specifier: ^16.3.2 version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@translated/lara-cli': + specifier: ^1.3.2 + version: 1.3.2(@types/node@24.10.13) '@types/node': specifier: ^24.10.1 version: 24.10.13 @@ -199,10 +202,10 @@ importers: version: 8.18.1 '@vitejs/plugin-react': specifier: ^5.1.1 - version: 5.1.4(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.30.2)) + version: 5.1.4(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.3)) '@vitest/coverage-v8': specifier: ^4.0.18 - version: 4.0.18(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(jiti@2.6.1)(jsdom@28.0.0)(lightningcss@1.30.2)) + version: 4.0.18(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(jiti@2.6.1)(jsdom@28.0.0)(lightningcss@1.30.2)(yaml@2.8.3)) esbuild: specifier: ^0.27.3 version: 0.27.3 @@ -235,10 +238,10 @@ importers: version: 8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) vite: specifier: ^7.3.1 - version: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.30.2) + version: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.3) vitest: specifier: ^4.0.18 - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(jiti@2.6.1)(jsdom@28.0.0)(lightningcss@1.30.2) + version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(jiti@2.6.1)(jsdom@28.0.0)(lightningcss@1.30.2)(yaml@2.8.3) ws: specifier: ^8.19.0 version: 8.19.0 @@ -340,6 +343,11 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + '@babel/parser@7.29.2': + resolution: {integrity: sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==} + engines: {node: '>=6.0.0'} + hasBin: true + '@babel/plugin-transform-react-jsx-self@7.27.1': resolution: {integrity: sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==} engines: {node: '>=6.9.0'} @@ -745,6 +753,144 @@ packages: resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} engines: {node: '>=18.18'} + '@inquirer/ansi@1.0.2': + resolution: {integrity: sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ==} + engines: {node: '>=18'} + + '@inquirer/checkbox@4.3.2': + resolution: {integrity: sha512-VXukHf0RR1doGe6Sm4F0Em7SWYLTHSsbGfJdS9Ja2bX5/D5uwVOEjr07cncLROdBvmnvCATYEWlHqYmXv2IlQA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/confirm@5.1.21': + resolution: {integrity: sha512-KR8edRkIsUayMXV+o3Gv+q4jlhENF9nMYUZs9PA2HzrXeHI8M5uDag70U7RJn9yyiMZSbtF5/UexBtAVtZGSbQ==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/core@10.3.2': + resolution: {integrity: sha512-43RTuEbfP8MbKzedNqBrlhhNKVwoK//vUFNW3Q3vZ88BLcrs4kYpGg+B2mm5p2K/HfygoCxuKwJJiv8PbGmE0A==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/editor@4.2.23': + resolution: {integrity: sha512-aLSROkEwirotxZ1pBaP8tugXRFCxW94gwrQLxXfrZsKkfjOYC1aRvAZuhpJOb5cu4IBTJdsCigUlf2iCOu4ZDQ==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/expand@4.0.23': + resolution: {integrity: sha512-nRzdOyFYnpeYTTR2qFwEVmIWypzdAx/sIkCMeTNTcflFOovfqUk+HcFhQQVBftAh9gmGrpFj6QcGEqrDMDOiew==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/external-editor@1.0.3': + resolution: {integrity: sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/figures@1.0.15': + resolution: {integrity: sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==} + engines: {node: '>=18'} + + '@inquirer/input@4.3.1': + resolution: {integrity: sha512-kN0pAM4yPrLjJ1XJBjDxyfDduXOuQHrBB8aLDMueuwUGn+vNpF7Gq7TvyVxx8u4SHlFFj4trmj+a2cbpG4Jn1g==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/number@3.0.23': + resolution: {integrity: sha512-5Smv0OK7K0KUzUfYUXDXQc9jrf8OHo4ktlEayFlelCjwMXz0299Y8OrI+lj7i4gCBY15UObk76q0QtxjzFcFcg==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/password@4.0.23': + resolution: {integrity: sha512-zREJHjhT5vJBMZX/IUbyI9zVtVfOLiTO66MrF/3GFZYZ7T4YILW5MSkEYHceSii/KtRk+4i3RE7E1CUXA2jHcA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/prompts@7.10.1': + resolution: {integrity: sha512-Dx/y9bCQcXLI5ooQ5KyvA4FTgeo2jYj/7plWfV5Ak5wDPKQZgudKez2ixyfz7tKXzcJciTxqLeK7R9HItwiByg==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/rawlist@4.1.11': + resolution: {integrity: sha512-+LLQB8XGr3I5LZN/GuAHo+GpDJegQwuPARLChlMICNdwW7OwV2izlCSCxN6cqpL0sMXmbKbFcItJgdQq5EBXTw==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/search@3.2.2': + resolution: {integrity: sha512-p2bvRfENXCZdWF/U2BXvnSI9h+tuA8iNqtUKb9UWbmLYCRQxd8WkvwWvYn+3NgYaNwdUkHytJMGG4MMLucI1kA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/select@4.4.2': + resolution: {integrity: sha512-l4xMuJo55MAe+N7Qr4rX90vypFwCajSakx59qe/tMaC1aEHWLyw68wF4o0A4SLAY4E0nd+Vt+EyskeDIqu1M6w==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/type@3.0.10': + resolution: {integrity: sha512-BvziSRxfz5Ov8ch0z/n3oijRSEcEsHnhggm4xFZe93DHcUCTlutlq9Ox4SVENAfcRD22UQq7T/atg9Wr3k09eA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@isaacs/cliui@9.0.0': + resolution: {integrity: sha512-AokJm4tuBHillT+FpMtxQ60n8ObyXBatq7jD2/JA9dxbDDokKQm8KMht5ibGzLVU9IJDIKK4TPKgMHEYMn3lMg==} + engines: {node: '>=18'} + '@jridgewell/gen-mapping@0.3.13': resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} @@ -815,6 +961,9 @@ packages: '@cfworker/json-schema': optional: true + '@nodable/entities@2.1.0': + resolution: {integrity: sha512-nyT7T3nbMyBI/lvr6L5TyWbFJAI9FTgVRakNoBqCD+PmID8DzFrrNdLLtHMwMszOtqZa8PAOV24ZqDnQrhQINA==} + '@opentelemetry/api-logs@0.208.0': resolution: {integrity: sha512-CjruKY9V6NMssL/T1kAFgzosF1v9o6oeN+aX5JB/C/xPNtmgIJqcXHG7fA82Ou1zCpWGl4lROQUKwUNE1pMCyg==} engines: {node: '>=8.0.0'} @@ -1700,79 +1849,66 @@ packages: resolution: {integrity: sha512-F8sWbhZ7tyuEfsmOxwc2giKDQzN3+kuBLPwwZGyVkLlKGdV1nvnNwYD0fKQ8+XS6hp9nY7B+ZeK01EBUE7aHaw==} cpu: [arm] os: [linux] - libc: [glibc] '@rollup/rollup-linux-arm-musleabihf@4.57.1': resolution: {integrity: sha512-rGfNUfn0GIeXtBP1wL5MnzSj98+PZe/AXaGBCRmT0ts80lU5CATYGxXukeTX39XBKsxzFpEeK+Mrp9faXOlmrw==} cpu: [arm] os: [linux] - libc: [musl] '@rollup/rollup-linux-arm64-gnu@4.57.1': resolution: {integrity: sha512-MMtej3YHWeg/0klK2Qodf3yrNzz6CGjo2UntLvk2RSPlhzgLvYEB3frRvbEF2wRKh1Z2fDIg9KRPe1fawv7C+g==} cpu: [arm64] os: [linux] - libc: [glibc] '@rollup/rollup-linux-arm64-musl@4.57.1': resolution: {integrity: sha512-1a/qhaaOXhqXGpMFMET9VqwZakkljWHLmZOX48R0I/YLbhdxr1m4gtG1Hq7++VhVUmf+L3sTAf9op4JlhQ5u1Q==} cpu: [arm64] os: [linux] - libc: [musl] '@rollup/rollup-linux-loong64-gnu@4.57.1': resolution: {integrity: sha512-QWO6RQTZ/cqYtJMtxhkRkidoNGXc7ERPbZN7dVW5SdURuLeVU7lwKMpo18XdcmpWYd0qsP1bwKPf7DNSUinhvA==} cpu: [loong64] os: [linux] - libc: [glibc] '@rollup/rollup-linux-loong64-musl@4.57.1': resolution: {integrity: sha512-xpObYIf+8gprgWaPP32xiN5RVTi/s5FCR+XMXSKmhfoJjrpRAjCuuqQXyxUa/eJTdAE6eJ+KDKaoEqjZQxh3Gw==} cpu: [loong64] os: [linux] - libc: [musl] '@rollup/rollup-linux-ppc64-gnu@4.57.1': resolution: {integrity: sha512-4BrCgrpZo4hvzMDKRqEaW1zeecScDCR+2nZ86ATLhAoJ5FQ+lbHVD3ttKe74/c7tNT9c6F2viwB3ufwp01Oh2w==} cpu: [ppc64] os: [linux] - libc: [glibc] '@rollup/rollup-linux-ppc64-musl@4.57.1': resolution: {integrity: sha512-NOlUuzesGauESAyEYFSe3QTUguL+lvrN1HtwEEsU2rOwdUDeTMJdO5dUYl/2hKf9jWydJrO9OL/XSSf65R5+Xw==} cpu: [ppc64] os: [linux] - libc: [musl] '@rollup/rollup-linux-riscv64-gnu@4.57.1': resolution: {integrity: sha512-ptA88htVp0AwUUqhVghwDIKlvJMD/fmL/wrQj99PRHFRAG6Z5nbWoWG4o81Nt9FT+IuqUQi+L31ZKAFeJ5Is+A==} cpu: [riscv64] os: [linux] - libc: [glibc] '@rollup/rollup-linux-riscv64-musl@4.57.1': resolution: {integrity: sha512-S51t7aMMTNdmAMPpBg7OOsTdn4tySRQvklmL3RpDRyknk87+Sp3xaumlatU+ppQ+5raY7sSTcC2beGgvhENfuw==} cpu: [riscv64] os: [linux] - libc: [musl] '@rollup/rollup-linux-s390x-gnu@4.57.1': resolution: {integrity: sha512-Bl00OFnVFkL82FHbEqy3k5CUCKH6OEJL54KCyx2oqsmZnFTR8IoNqBF+mjQVcRCT5sB6yOvK8A37LNm/kPJiZg==} cpu: [s390x] os: [linux] - libc: [glibc] '@rollup/rollup-linux-x64-gnu@4.57.1': resolution: {integrity: sha512-ABca4ceT4N+Tv/GtotnWAeXZUZuM/9AQyCyKYyKnpk4yoA7QIAuBt6Hkgpw8kActYlew2mvckXkvx0FfoInnLg==} cpu: [x64] os: [linux] - libc: [glibc] '@rollup/rollup-linux-x64-musl@4.57.1': resolution: {integrity: sha512-HFps0JeGtuOR2convgRRkHCekD7j+gdAuXM+/i6kGzQtFhlCtQkpwtNzkNj6QhCDp7DRJ7+qC/1Vg2jt5iSOFw==} cpu: [x64] os: [linux] - libc: [musl] '@rollup/rollup-openbsd-x64@4.57.1': resolution: {integrity: sha512-H+hXEv9gdVQuDTgnqD+SQffoWoc0Of59AStSzTEj/feWTBAnSfSD3+Dql1ZruJQxmykT/JVY0dE8Ka7z0DH1hw==} @@ -1900,28 +2036,24 @@ packages: engines: {node: '>= 10'} cpu: [arm64] os: [linux] - libc: [glibc] '@tailwindcss/oxide-linux-arm64-musl@4.1.18': resolution: {integrity: sha512-1px92582HkPQlaaCkdRcio71p8bc8i/ap5807tPRDK/uw953cauQBT8c5tVGkOwrHMfc2Yh6UuxaH4vtTjGvHg==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - libc: [musl] '@tailwindcss/oxide-linux-x64-gnu@4.1.18': resolution: {integrity: sha512-v3gyT0ivkfBLoZGF9LyHmts0Isc8jHZyVcbzio6Wpzifg/+5ZJpDiRiUhDLkcr7f/r38SWNe7ucxmGW3j3Kb/g==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - libc: [glibc] '@tailwindcss/oxide-linux-x64-musl@4.1.18': resolution: {integrity: sha512-bhJ2y2OQNlcRwwgOAGMY0xTFStt4/wyU6pvI6LSuZpRgKQwxTec0/3Scu91O8ir7qCR3AuepQKLU/kX99FouqQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - libc: [musl] '@tailwindcss/oxide-wasm32-wasi@4.1.18': resolution: {integrity: sha512-LffYTvPjODiP6PT16oNeUQJzNVyJl1cjIebq/rWWBF+3eDst5JGEFSc5cWxyRCJ0Mxl+KyIkqRxk1XPEs9x8TA==} @@ -1991,35 +2123,30 @@ packages: engines: {node: '>= 10'} cpu: [arm64] os: [linux] - libc: [glibc] '@tauri-apps/cli-linux-arm64-musl@2.10.0': resolution: {integrity: sha512-GUoPdVJmrJRIXFfW3Rkt+eGK9ygOdyISACZfC/bCSfOnGt8kNdQIQr5WRH9QUaTVFIwxMlQyV3m+yXYP+xhSVA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - libc: [musl] '@tauri-apps/cli-linux-riscv64-gnu@2.10.0': resolution: {integrity: sha512-JO7s3TlSxshwsoKNCDkyvsx5gw2QAs/Y2GbR5UE2d5kkU138ATKoPOtxn8G1fFT1aDW4LH0rYAAfBpGkDyJJnw==} engines: {node: '>= 10'} cpu: [riscv64] os: [linux] - libc: [glibc] '@tauri-apps/cli-linux-x64-gnu@2.10.0': resolution: {integrity: sha512-Uvh4SUUp4A6DVRSMWjelww0GnZI3PlVy7VS+DRF5napKuIehVjGl9XD0uKoCoxwAQBLctvipyEK+pDXpJeoHng==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - libc: [glibc] '@tauri-apps/cli-linux-x64-musl@2.10.0': resolution: {integrity: sha512-AP0KRK6bJuTpQ8kMNWvhIpKUkQJfcPFeba7QshOQZjJ8wOS6emwTN4K5g/d3AbCMo0RRdnZWwu67MlmtJyxC1Q==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - libc: [musl] '@tauri-apps/cli-win32-arm64-msvc@2.10.0': resolution: {integrity: sha512-97DXVU3dJystrq7W41IX+82JEorLNY+3+ECYxvXWqkq7DBN6FsA08x/EFGE8N/b0LTOui9X2dvpGGoeZKKV08g==} @@ -2163,6 +2290,15 @@ packages: react: ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0 + '@translated/lara-cli@1.3.2': + resolution: {integrity: sha512-AVJMvUztFcwc+GdxzlcsbkSU70JrunuTIzRM34MDxK1ZXvJWWTPc7bnS3brll/RLXuzR+c3A8YsDvWc8ck0i3w==} + engines: {node: '>=20'} + hasBin: true + + '@translated/lara@1.9.0': + resolution: {integrity: sha512-ybeozDQ9qasYH7MpvqLKQ/i70lQQifVONQ4eCP31fFl4YWsAmd7Y0hb9AuLgv6oNMo0IgbFXW/HqSA/7Qyr0Rg==} + engines: {node: '>=12.*'} + '@types/aria-query@5.0.4': resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} @@ -2349,6 +2485,10 @@ packages: '@vitest/utils@4.0.18': resolution: {integrity: sha512-msMRKLMVLWygpK3u2Hybgi4MNjcYJvwTb0Ru09+fOyCXIgT5raYP041DRRdiJiI3k/2U6SEbAETB3YtBrUkCFA==} + abort-controller@3.0.0: + resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} + engines: {node: '>=6.5'} + accepts@2.0.0: resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==} engines: {node: '>= 0.6'} @@ -2385,6 +2525,10 @@ packages: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} + ansi-regex@6.2.2: + resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} + engines: {node: '>=12'} + ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} @@ -2417,12 +2561,22 @@ packages: ast-v8-to-istanbul@0.3.11: resolution: {integrity: sha512-Qya9fkoofMjCBNVdWINMjB5KZvkYfaO9/anwkWnjxibpWUxo5iHl2sOdP7/uAqaRuUYuoo8rDwnbaaKVFxoUvw==} + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + bail@2.0.2: resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + balanced-match@4.0.4: + resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} + engines: {node: 18 || 20 || >=22} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + baseline-browser-mapping@2.9.19: resolution: {integrity: sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==} hasBin: true @@ -2440,11 +2594,18 @@ packages: brace-expansion@2.0.2: resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} + brace-expansion@5.0.5: + resolution: {integrity: sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==} + engines: {node: 18 || 20 || >=22} + browserslist@4.28.1: resolution: {integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true + buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + bytes@3.1.2: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} @@ -2475,6 +2636,10 @@ packages: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} + chalk@5.6.2: + resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + character-entities-html4@2.1.0: resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} @@ -2487,9 +2652,24 @@ packages: character-reference-invalid@2.0.1: resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} + chardet@2.1.1: + resolution: {integrity: sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==} + class-variance-authority@0.7.1: resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==} + cli-cursor@5.0.0: + resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} + engines: {node: '>=18'} + + cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} + engines: {node: '>=6'} + + cli-width@4.1.0: + resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} + engines: {node: '>= 12'} + clsx@2.1.1: resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} @@ -2501,9 +2681,17 @@ packages: color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + comma-separated-tokens@2.0.3: resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + commander@14.0.3: + resolution: {integrity: sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==} + engines: {node: '>=20'} + commander@8.3.0: resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} engines: {node: '>= 12'} @@ -2586,6 +2774,10 @@ packages: deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + depd@2.0.0: resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} engines: {node: '>= 0.8'} @@ -2613,6 +2805,10 @@ packages: dompurify@3.3.3: resolution: {integrity: sha512-Oj6pzI2+RqBfFG+qOaOLbFXLQ90ARpcGG6UePL82bJLtdsa6CYJD7nmiU8MW9nQNOtCHV3lZ/Bzq1X0QYbBZCA==} + dotenv@17.4.2: + resolution: {integrity: sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw==} + engines: {node: '>=12'} + dunder-proto@1.0.1: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} @@ -2626,10 +2822,19 @@ packages: emoji-mart@5.6.0: resolution: {integrity: sha512-eJp3QRe79pjwa+duv+n7+5YsNhRcMl812EcFVwrnRvYKoNPoQb5qxU8DG6Bgwji0akHdp6D4Ln6tYLG58MFSow==} + emoji-regex@10.6.0: + resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + encodeurl@2.0.0: resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} engines: {node: '>= 0.8'} + encoding@0.1.13: + resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} + enhanced-resolve@5.19.0: resolution: {integrity: sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg==} engines: {node: '>=10.13.0'} @@ -2657,6 +2862,10 @@ packages: resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} engines: {node: '>= 0.4'} + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} + esbuild@0.27.3: resolution: {integrity: sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==} engines: {node: '>=18'} @@ -2745,6 +2954,14 @@ packages: resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} engines: {node: '>= 0.6'} + event-target-shim@5.0.1: + resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} + engines: {node: '>=6'} + + events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + eventsource-parser@3.0.6: resolution: {integrity: sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg==} engines: {node: '>=18.0.0'} @@ -2790,6 +3007,13 @@ packages: fast-uri@3.1.0: resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} + fast-xml-builder@1.1.5: + resolution: {integrity: sha512-4TJn/8FKLeslLAH3dnohXqE3QSoxkhvaMzepOIZytwJXZO69Bfz0HBdDHzOTOon6G59Zrk6VQ2bEiv1t61rfkA==} + + fast-xml-parser@5.7.2: + resolution: {integrity: sha512-P7oW7tLbYnhOLQk/Gv7cZgzgMPP/XN03K02/Jy6Y/NHzyIAIpxuZIM/YqAkfiXFPxA2CTm7NtCijK9EDu09u2w==} + hasBin: true + fdir@6.5.0: resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} engines: {node: '>=12.0.0'} @@ -2818,9 +3042,22 @@ packages: resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} engines: {node: '>=16'} + flat@6.0.1: + resolution: {integrity: sha512-/3FfIa8mbrg3xE7+wAhWeV+bd7L2Mof+xtZb5dRDKZ+wDvYJK4WDYeIOuOhre5Yv5aQObZrlbRmk3RTSiuQBtw==} + engines: {node: '>=18'} + hasBin: true + flatted@3.3.3: resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} + foreground-child@3.3.1: + resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} + engines: {node: '>=14'} + + form-data@4.0.5: + resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==} + engines: {node: '>= 6'} + forwarded@0.2.0: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} engines: {node: '>= 0.6'} @@ -2846,6 +3083,10 @@ packages: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} + get-east-asian-width@1.5.0: + resolution: {integrity: sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==} + engines: {node: '>=18'} + get-intrinsic@1.3.0: resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} engines: {node: '>= 0.4'} @@ -2858,10 +3099,20 @@ packages: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} + gettext-parser@8.0.0: + resolution: {integrity: sha512-eFmhDi2xQ+2reMRY2AbJ2oa10uFOl1oyGbAKdCZiNOk94NJHi7aN0OBELSC9v35ZAPQdr+uRBi93/Gu4SlBdrA==} + engines: {node: '>=18'} + glob-parent@6.0.2: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} + glob@11.1.0: + resolution: {integrity: sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==} + engines: {node: 20 || >=22} + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me + hasBin: true + globals@14.0.0: resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} engines: {node: '>=18'} @@ -2889,6 +3140,10 @@ packages: resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} engines: {node: '>= 0.4'} + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + hasown@2.0.2: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} @@ -2991,10 +3246,17 @@ packages: engines: {node: '>=18'} hasBin: true + iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + iconv-lite@0.7.2: resolution: {integrity: sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==} engines: {node: '>=0.10.0'} + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + ignore@5.3.2: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} @@ -3046,6 +3308,10 @@ packages: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} @@ -3053,6 +3319,10 @@ packages: is-hexadecimal@2.0.1: resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} + is-interactive@2.0.0: + resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} + engines: {node: '>=12'} + is-plain-obj@4.1.0: resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} engines: {node: '>=12'} @@ -3063,6 +3333,14 @@ packages: is-promise@4.0.0: resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} + is-unicode-supported@1.3.0: + resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==} + engines: {node: '>=12'} + + is-unicode-supported@2.1.0: + resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} + engines: {node: '>=18'} + isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} @@ -3081,6 +3359,10 @@ packages: resolution: {integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==} engines: {node: '>=8'} + jackspeak@4.2.3: + resolution: {integrity: sha512-ykkVRwrYvFm1nb2AJfKKYPr0emF6IiXDYUaFx4Zn9ZuIH7MrzEZ3sD5RlqGXNRpHtvUHJyOnCEFxOlNDtGo7wg==} + engines: {node: 20 || >=22} + jiti@2.6.1: resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} hasBin: true @@ -3195,28 +3477,24 @@ packages: engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] - libc: [glibc] lightningcss-linux-arm64-musl@1.30.2: resolution: {integrity: sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] - libc: [musl] lightningcss-linux-x64-gnu@1.30.2: resolution: {integrity: sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] - libc: [glibc] lightningcss-linux-x64-musl@1.30.2: resolution: {integrity: sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] - libc: [musl] lightningcss-win32-arm64-msvc@1.30.2: resolution: {integrity: sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==} @@ -3247,6 +3525,10 @@ packages: lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + log-symbols@6.0.0: + resolution: {integrity: sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==} + engines: {node: '>=18'} + long@5.3.2: resolution: {integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==} @@ -3436,18 +3718,34 @@ packages: micromark@4.0.2: resolution: {integrity: sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==} + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + mime-db@1.54.0: resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} engines: {node: '>= 0.6'} + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + mime-types@3.0.2: resolution: {integrity: sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==} engines: {node: '>=18'} + mimic-function@5.0.1: + resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} + engines: {node: '>=18'} + min-indent@1.0.1: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} + minimatch@10.2.5: + resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} + engines: {node: 18 || 20 || >=22} + minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -3455,9 +3753,17 @@ packages: resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} + minipass@7.1.3: + resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==} + engines: {node: '>=16 || 14 >=14.17'} + ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + mute-stream@2.0.0: + resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} + engines: {node: ^18.17.0 || >=20.5.0} + nanoid@3.3.11: resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -3491,6 +3797,10 @@ packages: once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + onetime@7.0.0: + resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} + engines: {node: '>=18'} + oniguruma-parser@0.12.1: resolution: {integrity: sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==} @@ -3501,6 +3811,10 @@ packages: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} + ora@8.2.0: + resolution: {integrity: sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==} + engines: {node: '>=18'} + orderedmap@2.1.1: resolution: {integrity: sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g==} @@ -3512,6 +3826,9 @@ packages: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} @@ -3533,10 +3850,18 @@ packages: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} + path-expression-matcher@1.5.0: + resolution: {integrity: sha512-cbrerZV+6rvdQrrD+iGMcZFEiiSrbv9Tfdkvnusy6y0x0GKBXREFg/Y65GhIfm0tnLntThhzCnfKwp1WRjeCyQ==} + engines: {node: '>=14.0.0'} + path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} + path-scurry@2.0.2: + resolution: {integrity: sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==} + engines: {node: 18 || 20 || >=22} + path-to-regexp@8.3.0: resolution: {integrity: sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==} @@ -3550,6 +3875,10 @@ packages: resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} engines: {node: '>=12'} + picomatch@4.0.4: + resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} + engines: {node: '>=12'} + pkce-challenge@5.0.1: resolution: {integrity: sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==} engines: {node: '>=16.20.0'} @@ -3582,6 +3911,10 @@ packages: resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + process@0.11.10: + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} + engines: {node: '>= 0.6.0'} + property-information@7.1.0: resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==} @@ -3803,6 +4136,10 @@ packages: resolution: {integrity: sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==} engines: {node: '>=0.10.0'} + readable-stream@4.7.0: + resolution: {integrity: sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + redent@3.0.0: resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} engines: {node: '>=8'} @@ -3846,6 +4183,9 @@ packages: remark-stringify@11.0.0: resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} + remark@15.0.1: + resolution: {integrity: sha512-Eht5w30ruCXgFmxVUSlNWQ9iiimq07URKeFS3hNc8cUWy1llX4KDWfyEDZRycMc+znsN9Ux5/tJ/BFdgdOwA3A==} + require-from-string@2.0.2: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} @@ -3854,6 +4194,10 @@ packages: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} + restore-cursor@5.1.0: + resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} + engines: {node: '>=18'} + rollup@4.57.1: resolution: {integrity: sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} @@ -3866,6 +4210,9 @@ packages: resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==} engines: {node: '>= 18'} + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} @@ -3927,6 +4274,10 @@ packages: siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + source-map-js@1.2.1: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} @@ -3947,9 +4298,36 @@ packages: std-env@3.10.0: resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} + stdin-discarder@0.2.2: + resolution: {integrity: sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==} + engines: {node: '>=18'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@7.2.0: + resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} + engines: {node: '>=18'} + + string-width@8.2.1: + resolution: {integrity: sha512-IIaP0g3iy9Cyy18w3M9YcaDudujEAVHKt3a3QJg1+sr/oX96TbaGUubG0hJyCjCBThFH+tFpcIyoUHUn1ogaLA==} + engines: {node: '>=20'} + + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + stringify-entities@4.0.4: resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.2.0: + resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==} + engines: {node: '>=12'} + strip-bom-string@1.0.0: resolution: {integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==} engines: {node: '>=0.10.0'} @@ -3962,6 +4340,9 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} + strnum@2.2.3: + resolution: {integrity: sha512-oKx6RUCuHfT3oyVjtnrmn19H1SiCqgJSg+54XqURKp5aCMbrXrhLjRN9TjuwMjiYstZ0MzDrHqkGZ5dFTKd+zg==} + style-mod@4.1.3: resolution: {integrity: sha512-i/n8VsZydrugj3Iuzll8+x/00GH2vnYsk1eomD8QiRrSAeW6ItbCQDtfXCeJHd0iwiNagqjQkvpvREEPtW3IoQ==} @@ -4302,6 +4683,10 @@ packages: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} + wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} @@ -4343,6 +4728,11 @@ packages: yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + yaml@2.8.3: + resolution: {integrity: sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==} + engines: {node: '>= 14.6'} + hasBin: true + yjs@13.6.29: resolution: {integrity: sha512-kHqDPdltoXH+X4w1lVmMtddE3Oeqq48nM40FD5ojTd8xYhQpzIDcfE2keMSU5bAgRPJBe225WTUdyUgj1DtbiQ==} engines: {node: '>=16.0.0', npm: '>=8.0.0'} @@ -4351,6 +4741,10 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} + yoctocolors-cjs@2.1.3: + resolution: {integrity: sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==} + engines: {node: '>=18'} + zod-to-json-schema@3.25.1: resolution: {integrity: sha512-pM/SU9d3YAggzi6MtR4h7ruuQlqKtad8e9S0fmxcMi+ueAK5Korys/aWcV9LIIHTVbj01NdzxcnXSN+O74ZIVA==} peerDependencies: @@ -4477,6 +4871,10 @@ snapshots: dependencies: '@babel/types': 7.29.0 + '@babel/parser@7.29.2': + dependencies: + '@babel/types': 7.29.0 + '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 @@ -4500,7 +4898,7 @@ snapshots: '@babel/code-frame': 7.29.0 '@babel/generator': 7.29.1 '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.29.0 + '@babel/parser': 7.29.2 '@babel/template': 7.28.6 '@babel/types': 7.29.0 debug: 4.4.3 @@ -4941,6 +5339,133 @@ snapshots: '@humanwhocodes/retry@0.4.3': {} + '@inquirer/ansi@1.0.2': {} + + '@inquirer/checkbox@4.3.2(@types/node@24.10.13)': + dependencies: + '@inquirer/ansi': 1.0.2 + '@inquirer/core': 10.3.2(@types/node@24.10.13) + '@inquirer/figures': 1.0.15 + '@inquirer/type': 3.0.10(@types/node@24.10.13) + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 24.10.13 + + '@inquirer/confirm@5.1.21(@types/node@24.10.13)': + dependencies: + '@inquirer/core': 10.3.2(@types/node@24.10.13) + '@inquirer/type': 3.0.10(@types/node@24.10.13) + optionalDependencies: + '@types/node': 24.10.13 + + '@inquirer/core@10.3.2(@types/node@24.10.13)': + dependencies: + '@inquirer/ansi': 1.0.2 + '@inquirer/figures': 1.0.15 + '@inquirer/type': 3.0.10(@types/node@24.10.13) + cli-width: 4.1.0 + mute-stream: 2.0.0 + signal-exit: 4.1.0 + wrap-ansi: 6.2.0 + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 24.10.13 + + '@inquirer/editor@4.2.23(@types/node@24.10.13)': + dependencies: + '@inquirer/core': 10.3.2(@types/node@24.10.13) + '@inquirer/external-editor': 1.0.3(@types/node@24.10.13) + '@inquirer/type': 3.0.10(@types/node@24.10.13) + optionalDependencies: + '@types/node': 24.10.13 + + '@inquirer/expand@4.0.23(@types/node@24.10.13)': + dependencies: + '@inquirer/core': 10.3.2(@types/node@24.10.13) + '@inquirer/type': 3.0.10(@types/node@24.10.13) + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 24.10.13 + + '@inquirer/external-editor@1.0.3(@types/node@24.10.13)': + dependencies: + chardet: 2.1.1 + iconv-lite: 0.7.2 + optionalDependencies: + '@types/node': 24.10.13 + + '@inquirer/figures@1.0.15': {} + + '@inquirer/input@4.3.1(@types/node@24.10.13)': + dependencies: + '@inquirer/core': 10.3.2(@types/node@24.10.13) + '@inquirer/type': 3.0.10(@types/node@24.10.13) + optionalDependencies: + '@types/node': 24.10.13 + + '@inquirer/number@3.0.23(@types/node@24.10.13)': + dependencies: + '@inquirer/core': 10.3.2(@types/node@24.10.13) + '@inquirer/type': 3.0.10(@types/node@24.10.13) + optionalDependencies: + '@types/node': 24.10.13 + + '@inquirer/password@4.0.23(@types/node@24.10.13)': + dependencies: + '@inquirer/ansi': 1.0.2 + '@inquirer/core': 10.3.2(@types/node@24.10.13) + '@inquirer/type': 3.0.10(@types/node@24.10.13) + optionalDependencies: + '@types/node': 24.10.13 + + '@inquirer/prompts@7.10.1(@types/node@24.10.13)': + dependencies: + '@inquirer/checkbox': 4.3.2(@types/node@24.10.13) + '@inquirer/confirm': 5.1.21(@types/node@24.10.13) + '@inquirer/editor': 4.2.23(@types/node@24.10.13) + '@inquirer/expand': 4.0.23(@types/node@24.10.13) + '@inquirer/input': 4.3.1(@types/node@24.10.13) + '@inquirer/number': 3.0.23(@types/node@24.10.13) + '@inquirer/password': 4.0.23(@types/node@24.10.13) + '@inquirer/rawlist': 4.1.11(@types/node@24.10.13) + '@inquirer/search': 3.2.2(@types/node@24.10.13) + '@inquirer/select': 4.4.2(@types/node@24.10.13) + optionalDependencies: + '@types/node': 24.10.13 + + '@inquirer/rawlist@4.1.11(@types/node@24.10.13)': + dependencies: + '@inquirer/core': 10.3.2(@types/node@24.10.13) + '@inquirer/type': 3.0.10(@types/node@24.10.13) + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 24.10.13 + + '@inquirer/search@3.2.2(@types/node@24.10.13)': + dependencies: + '@inquirer/core': 10.3.2(@types/node@24.10.13) + '@inquirer/figures': 1.0.15 + '@inquirer/type': 3.0.10(@types/node@24.10.13) + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 24.10.13 + + '@inquirer/select@4.4.2(@types/node@24.10.13)': + dependencies: + '@inquirer/ansi': 1.0.2 + '@inquirer/core': 10.3.2(@types/node@24.10.13) + '@inquirer/figures': 1.0.15 + '@inquirer/type': 3.0.10(@types/node@24.10.13) + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 24.10.13 + + '@inquirer/type@3.0.10(@types/node@24.10.13)': + optionalDependencies: + '@types/node': 24.10.13 + + '@isaacs/cliui@9.0.0': {} + '@jridgewell/gen-mapping@0.3.13': dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -5045,6 +5570,8 @@ snapshots: transitivePeerDependencies: - supports-color + '@nodable/entities@2.1.0': {} + '@opentelemetry/api-logs@0.208.0': dependencies: '@opentelemetry/api': 1.9.0 @@ -6145,12 +6672,12 @@ snapshots: '@tailwindcss/oxide-win32-arm64-msvc': 4.1.18 '@tailwindcss/oxide-win32-x64-msvc': 4.1.18 - '@tailwindcss/vite@4.1.18(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.30.2))': + '@tailwindcss/vite@4.1.18(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.3))': dependencies: '@tailwindcss/node': 4.1.18 '@tailwindcss/oxide': 4.1.18 tailwindcss: 4.1.18 - vite: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.30.2) + vite: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.3) '@tanstack/react-store@0.7.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: @@ -6356,6 +6883,36 @@ snapshots: transitivePeerDependencies: - '@floating-ui/dom' + '@translated/lara-cli@1.3.2(@types/node@24.10.13)': + dependencies: + '@babel/parser': 7.29.2 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + '@inquirer/core': 10.3.2(@types/node@24.10.13) + '@inquirer/prompts': 7.10.1(@types/node@24.10.13) + '@translated/lara': 1.9.0 + commander: 14.0.3 + dotenv: 17.4.2 + fast-xml-parser: 5.7.2 + flat: 6.0.1 + gettext-parser: 8.0.0 + glob: 11.1.0 + ora: 8.2.0 + picomatch: 4.0.4 + remark: 15.0.1 + remark-gfm: 4.0.1 + string-width: 8.2.1 + unist-util-visit: 5.1.0 + yaml: 2.8.3 + zod: 4.3.6 + transitivePeerDependencies: + - '@types/node' + - supports-color + + '@translated/lara@1.9.0': + dependencies: + form-data: 4.0.5 + '@types/aria-query@5.0.4': {} '@types/babel__core@7.20.5': @@ -6537,7 +7094,7 @@ snapshots: '@ungap/structured-clone@1.3.0': {} - '@vitejs/plugin-react@5.1.4(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.30.2))': + '@vitejs/plugin-react@5.1.4(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.3))': dependencies: '@babel/core': 7.29.0 '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.0) @@ -6545,11 +7102,11 @@ snapshots: '@rolldown/pluginutils': 1.0.0-rc.3 '@types/babel__core': 7.20.5 react-refresh: 0.18.0 - vite: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.30.2) + vite: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.3) transitivePeerDependencies: - supports-color - '@vitest/coverage-v8@4.0.18(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(jiti@2.6.1)(jsdom@28.0.0)(lightningcss@1.30.2))': + '@vitest/coverage-v8@4.0.18(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(jiti@2.6.1)(jsdom@28.0.0)(lightningcss@1.30.2)(yaml@2.8.3))': dependencies: '@bcoe/v8-coverage': 1.0.2 '@vitest/utils': 4.0.18 @@ -6561,7 +7118,7 @@ snapshots: obug: 2.1.1 std-env: 3.10.0 tinyrainbow: 3.0.3 - vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(jiti@2.6.1)(jsdom@28.0.0)(lightningcss@1.30.2) + vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(jiti@2.6.1)(jsdom@28.0.0)(lightningcss@1.30.2)(yaml@2.8.3) '@vitest/expect@4.0.18': dependencies: @@ -6572,13 +7129,13 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.0.3 - '@vitest/mocker@4.0.18(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.30.2))': + '@vitest/mocker@4.0.18(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.3))': dependencies: '@vitest/spy': 4.0.18 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.30.2) + vite: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.3) '@vitest/pretty-format@4.0.18': dependencies: @@ -6602,6 +7159,10 @@ snapshots: '@vitest/pretty-format': 4.0.18 tinyrainbow: 3.0.3 + abort-controller@3.0.0: + dependencies: + event-target-shim: 5.0.1 + accepts@2.0.0: dependencies: mime-types: 3.0.2 @@ -6635,6 +7196,8 @@ snapshots: ansi-regex@5.0.1: {} + ansi-regex@6.2.2: {} + ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 @@ -6665,10 +7228,16 @@ snapshots: estree-walker: 3.0.3 js-tokens: 10.0.0 + asynckit@0.4.0: {} + bail@2.0.2: {} balanced-match@1.0.2: {} + balanced-match@4.0.4: {} + + base64-js@1.5.1: {} + baseline-browser-mapping@2.9.19: {} bidi-js@1.0.3: @@ -6698,6 +7267,10 @@ snapshots: dependencies: balanced-match: 1.0.2 + brace-expansion@5.0.5: + dependencies: + balanced-match: 4.0.4 + browserslist@4.28.1: dependencies: baseline-browser-mapping: 2.9.19 @@ -6706,6 +7279,11 @@ snapshots: node-releases: 2.0.27 update-browserslist-db: 1.2.3(browserslist@4.28.1) + buffer@6.0.3: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + bytes@3.1.2: {} call-bind-apply-helpers@1.0.2: @@ -6731,6 +7309,8 @@ snapshots: ansi-styles: 4.3.0 supports-color: 7.2.0 + chalk@5.6.2: {} + character-entities-html4@2.1.0: {} character-entities-legacy@3.0.0: {} @@ -6739,10 +7319,20 @@ snapshots: character-reference-invalid@2.0.1: {} + chardet@2.1.1: {} + class-variance-authority@0.7.1: dependencies: clsx: 2.1.1 + cli-cursor@5.0.0: + dependencies: + restore-cursor: 5.1.0 + + cli-spinners@2.9.2: {} + + cli-width@4.1.0: {} + clsx@2.1.1: {} color-convert@2.0.1: @@ -6751,8 +7341,14 @@ snapshots: color-name@1.1.4: {} + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + comma-separated-tokens@2.0.3: {} + commander@14.0.3: {} + commander@8.3.0: {} concat-map@0.0.1: {} @@ -6821,6 +7417,8 @@ snapshots: deep-is@0.1.4: {} + delayed-stream@1.0.0: {} + depd@2.0.0: {} dequal@2.0.3: {} @@ -6841,6 +7439,8 @@ snapshots: optionalDependencies: '@types/trusted-types': 2.0.7 + dotenv@17.4.2: {} + dunder-proto@1.0.1: dependencies: call-bind-apply-helpers: 1.0.2 @@ -6853,8 +7453,16 @@ snapshots: emoji-mart@5.6.0: {} + emoji-regex@10.6.0: {} + + emoji-regex@8.0.0: {} + encodeurl@2.0.0: {} + encoding@0.1.13: + dependencies: + iconv-lite: 0.6.3 + enhanced-resolve@5.19.0: dependencies: graceful-fs: 4.2.11 @@ -6874,6 +7482,13 @@ snapshots: dependencies: es-errors: 1.3.0 + es-set-tostringtag@2.1.0: + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + esbuild@0.27.3: optionalDependencies: '@esbuild/aix-ppc64': 0.27.3 @@ -7004,6 +7619,10 @@ snapshots: etag@1.8.1: {} + event-target-shim@5.0.1: {} + + events@3.3.0: {} + eventsource-parser@3.0.6: {} eventsource@3.0.7: @@ -7066,6 +7685,17 @@ snapshots: fast-uri@3.1.0: {} + fast-xml-builder@1.1.5: + dependencies: + path-expression-matcher: 1.5.0 + + fast-xml-parser@5.7.2: + dependencies: + '@nodable/entities': 2.1.0 + fast-xml-builder: 1.1.5 + path-expression-matcher: 1.5.0 + strnum: 2.2.3 + fdir@6.5.0(picomatch@4.0.3): optionalDependencies: picomatch: 4.0.3 @@ -7097,8 +7727,23 @@ snapshots: flatted: 3.3.3 keyv: 4.5.4 + flat@6.0.1: {} + flatted@3.3.3: {} + foreground-child@3.3.1: + dependencies: + cross-spawn: 7.0.6 + signal-exit: 4.1.0 + + form-data@4.0.5: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + hasown: 2.0.2 + mime-types: 2.1.35 + forwarded@0.2.0: {} fresh@2.0.0: {} @@ -7113,6 +7758,8 @@ snapshots: gensync@1.0.0-beta.2: {} + get-east-asian-width@1.5.0: {} + get-intrinsic@1.3.0: dependencies: call-bind-apply-helpers: 1.0.2 @@ -7133,10 +7780,26 @@ snapshots: dunder-proto: 1.0.1 es-object-atoms: 1.1.1 + gettext-parser@8.0.0: + dependencies: + content-type: 1.0.5 + encoding: 0.1.13 + readable-stream: 4.7.0 + safe-buffer: 5.2.1 + glob-parent@6.0.2: dependencies: is-glob: 4.0.3 + glob@11.1.0: + dependencies: + foreground-child: 3.3.1 + jackspeak: 4.2.3 + minimatch: 10.2.5 + minipass: 7.1.3 + package-json-from-dist: 1.0.1 + path-scurry: 2.0.2 + globals@14.0.0: {} globals@16.5.0: {} @@ -7156,6 +7819,10 @@ snapshots: has-symbols@1.1.0: {} + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.1.0 + hasown@2.0.2: dependencies: function-bind: 1.1.2 @@ -7351,10 +8018,16 @@ snapshots: husky@9.1.7: {} + iconv-lite@0.6.3: + dependencies: + safer-buffer: 2.1.2 + iconv-lite@0.7.2: dependencies: safer-buffer: 2.1.2 + ieee754@1.2.1: {} + ignore@5.3.2: {} ignore@7.0.5: {} @@ -7389,18 +8062,26 @@ snapshots: is-extglob@2.1.1: {} + is-fullwidth-code-point@3.0.0: {} + is-glob@4.0.3: dependencies: is-extglob: 2.1.1 is-hexadecimal@2.0.1: {} + is-interactive@2.0.0: {} + is-plain-obj@4.1.0: {} is-potential-custom-element-name@1.0.1: {} is-promise@4.0.0: {} + is-unicode-supported@1.3.0: {} + + is-unicode-supported@2.1.0: {} + isexe@2.0.0: {} isomorphic.js@0.2.5: {} @@ -7418,6 +8099,10 @@ snapshots: html-escaper: 2.0.2 istanbul-lib-report: 3.0.1 + jackspeak@4.2.3: + dependencies: + '@isaacs/cliui': 9.0.0 + jiti@2.6.1: {} jose@6.1.3: {} @@ -7560,6 +8245,11 @@ snapshots: lodash.merge@4.6.2: {} + log-symbols@6.0.0: + dependencies: + chalk: 5.6.2 + is-unicode-supported: 1.3.0 + long@5.3.2: {} longest-streak@3.1.0: {} @@ -7961,14 +8651,26 @@ snapshots: transitivePeerDependencies: - supports-color + mime-db@1.52.0: {} + mime-db@1.54.0: {} + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + mime-types@3.0.2: dependencies: mime-db: 1.54.0 + mimic-function@5.0.1: {} + min-indent@1.0.1: {} + minimatch@10.2.5: + dependencies: + brace-expansion: 5.0.5 + minimatch@3.1.2: dependencies: brace-expansion: 1.1.12 @@ -7977,8 +8679,12 @@ snapshots: dependencies: brace-expansion: 2.0.2 + minipass@7.1.3: {} + ms@2.1.3: {} + mute-stream@2.0.0: {} + nanoid@3.3.11: {} natural-compare@1.4.0: {} @@ -8001,6 +8707,10 @@ snapshots: dependencies: wrappy: 1.0.2 + onetime@7.0.0: + dependencies: + mimic-function: 5.0.1 + oniguruma-parser@0.12.1: {} oniguruma-to-es@4.3.5: @@ -8018,6 +8728,18 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.5 + ora@8.2.0: + dependencies: + chalk: 5.6.2 + cli-cursor: 5.0.0 + cli-spinners: 2.9.2 + is-interactive: 2.0.0 + is-unicode-supported: 2.1.0 + log-symbols: 6.0.0 + stdin-discarder: 0.2.2 + string-width: 7.2.0 + strip-ansi: 7.2.0 + orderedmap@2.1.1: {} p-limit@3.1.0: @@ -8028,6 +8750,8 @@ snapshots: dependencies: p-limit: 3.1.0 + package-json-from-dist@1.0.1: {} + parent-module@1.0.1: dependencies: callsites: 3.1.0 @@ -8054,8 +8778,15 @@ snapshots: path-exists@4.0.0: {} + path-expression-matcher@1.5.0: {} + path-key@3.1.1: {} + path-scurry@2.0.2: + dependencies: + lru-cache: 11.2.6 + minipass: 7.1.3 + path-to-regexp@8.3.0: {} pathe@2.0.3: {} @@ -8064,6 +8795,8 @@ snapshots: picomatch@4.0.3: {} + picomatch@4.0.4: {} + pkce-challenge@5.0.1: {} playwright-core@1.58.2: {} @@ -8106,6 +8839,8 @@ snapshots: ansi-styles: 5.2.0 react-is: 17.0.2 + process@0.11.10: {} + property-information@7.1.0: {} prosemirror-changeset@2.4.0: @@ -8410,6 +9145,14 @@ snapshots: react@19.2.4: {} + readable-stream@4.7.0: + dependencies: + abort-controller: 3.0.0 + buffer: 6.0.3 + events: 3.3.0 + process: 0.11.10 + string_decoder: 1.3.0 + redent@3.0.0: dependencies: indent-string: 4.0.0 @@ -8497,10 +9240,24 @@ snapshots: mdast-util-to-markdown: 2.1.2 unified: 11.0.5 + remark@15.0.1: + dependencies: + '@types/mdast': 4.0.4 + remark-parse: 11.0.0 + remark-stringify: 11.0.0 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + require-from-string@2.0.2: {} resolve-from@4.0.0: {} + restore-cursor@5.1.0: + dependencies: + onetime: 7.0.0 + signal-exit: 4.1.0 + rollup@4.57.1: dependencies: '@types/estree': 1.0.8 @@ -8544,6 +9301,8 @@ snapshots: transitivePeerDependencies: - supports-color + safe-buffer@5.2.1: {} + safer-buffer@2.1.2: {} saxes@6.0.0: @@ -8624,6 +9383,8 @@ snapshots: siginfo@2.0.0: {} + signal-exit@4.1.0: {} + source-map-js@1.2.1: {} space-separated-tokens@2.0.2: {} @@ -8636,11 +9397,42 @@ snapshots: std-env@3.10.0: {} + stdin-discarder@0.2.2: {} + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@7.2.0: + dependencies: + emoji-regex: 10.6.0 + get-east-asian-width: 1.5.0 + strip-ansi: 7.2.0 + + string-width@8.2.1: + dependencies: + get-east-asian-width: 1.5.0 + strip-ansi: 7.2.0 + + string_decoder@1.3.0: + dependencies: + safe-buffer: 5.2.1 + stringify-entities@4.0.4: dependencies: character-entities-html4: 2.1.0 character-entities-legacy: 3.0.0 + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-ansi@7.2.0: + dependencies: + ansi-regex: 6.2.2 + strip-bom-string@1.0.0: {} strip-indent@3.0.0: @@ -8649,6 +9441,8 @@ snapshots: strip-json-comments@3.1.1: {} + strnum@2.2.3: {} + style-mod@4.1.3: {} style-to-js@1.1.21: @@ -8856,7 +9650,7 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 - vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.30.2): + vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.3): dependencies: esbuild: 0.27.3 fdir: 6.5.0(picomatch@4.0.3) @@ -8869,11 +9663,12 @@ snapshots: fsevents: 2.3.3 jiti: 2.6.1 lightningcss: 1.30.2 + yaml: 2.8.3 - vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(jiti@2.6.1)(jsdom@28.0.0)(lightningcss@1.30.2): + vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(jiti@2.6.1)(jsdom@28.0.0)(lightningcss@1.30.2)(yaml@2.8.3): dependencies: '@vitest/expect': 4.0.18 - '@vitest/mocker': 4.0.18(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.30.2)) + '@vitest/mocker': 4.0.18(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.3)) '@vitest/pretty-format': 4.0.18 '@vitest/runner': 4.0.18 '@vitest/snapshot': 4.0.18 @@ -8890,7 +9685,7 @@ snapshots: tinyexec: 1.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vite: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.30.2) + vite: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.3) why-is-node-running: 2.3.0 optionalDependencies: '@opentelemetry/api': 1.9.0 @@ -8942,6 +9737,12 @@ snapshots: word-wrap@1.2.5: {} + wrap-ansi@6.2.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrappy@1.0.2: {} ws@8.19.0: {} @@ -8966,12 +9767,16 @@ snapshots: yallist@3.1.1: {} + yaml@2.8.3: {} + yjs@13.6.29: dependencies: lib0: 0.2.117 yocto-queue@0.1.0: {} + yoctocolors-cjs@2.1.3: {} + zod-to-json-schema@3.25.1(zod@4.3.6): dependencies: zod: 4.3.6 diff --git a/scripts/validate-locales.mjs b/scripts/validate-locales.mjs new file mode 100644 index 00000000..68766d81 --- /dev/null +++ b/scripts/validate-locales.mjs @@ -0,0 +1,61 @@ +import fs from 'node:fs' +import path from 'node:path' +import { fileURLToPath } from 'node:url' + +const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..') +const localesDir = path.join(root, 'src/lib/locales') +const sourcePath = path.join(localesDir, 'en.json') + +function readCatalog(filePath) { + return JSON.parse(fs.readFileSync(filePath, 'utf8')) +} + +function assertFlatStringCatalog(locale, catalog) { + if (!catalog || typeof catalog !== 'object' || Array.isArray(catalog)) { + throw new Error(`${locale}: expected a flat object of translation keys`) + } + + for (const [key, value] of Object.entries(catalog)) { + if (typeof value !== 'string') { + throw new Error(`${locale}: key "${key}" must map to a string`) + } + } +} + +const sourceCatalog = readCatalog(sourcePath) +assertFlatStringCatalog('en', sourceCatalog) + +const sourceKeys = Object.keys(sourceCatalog).sort() +const localeFiles = fs.readdirSync(localesDir).filter((file) => file.endsWith('.json')) +const issues = [] + +for (const file of localeFiles) { + const locale = file.replace(/\.json$/, '') + const filePath = path.join(localesDir, file) + const catalog = readCatalog(filePath) + + assertFlatStringCatalog(locale, catalog) + + if (locale === 'en') continue + + const keys = Object.keys(catalog).sort() + const missing = sourceKeys.filter((key) => !keys.includes(key)) + const extra = keys.filter((key) => !sourceKeys.includes(key)) + + if (missing.length > 0) { + issues.push(`${locale}: missing ${missing.length} key(s)`) + } + if (extra.length > 0) { + issues.push(`${locale}: extra ${extra.length} key(s)`) + } +} + +if (issues.length > 0) { + console.error('Locale validation failed:') + for (const issue of issues) { + console.error(`- ${issue}`) + } + process.exit(1) +} + +console.log(`Validated ${localeFiles.length} locale catalog(s) against ${sourceKeys.length} English keys.`) diff --git a/src/components/CommandPalette.test.tsx b/src/components/CommandPalette.test.tsx index 4e7f56ab..e2614c05 100644 --- a/src/components/CommandPalette.test.tsx +++ b/src/components/CommandPalette.test.tsx @@ -244,7 +244,7 @@ describe('CommandPalette', () => { }) it('localizes command palette chrome', () => { - render() + render() const input = screen.getByPlaceholderText('输入命令...') fireEvent.change(input, { target: { value: 'zzzzzzz' } }) diff --git a/src/components/DynamicPropertiesPanel.test.tsx b/src/components/DynamicPropertiesPanel.test.tsx index c645e306..f5437c7b 100644 --- a/src/components/DynamicPropertiesPanel.test.tsx +++ b/src/components/DynamicPropertiesPanel.test.tsx @@ -209,7 +209,7 @@ describe('DynamicPropertiesPanel', () => { renderPanel({ frontmatter: { Status: 'Active', 'Belongs to': 'some-team' }, onAddProperty, - locale: 'zh-Hans', + locale: 'zh-CN', }) expect(screen.getByText('Type')).toBeInTheDocument() diff --git a/src/components/PulseView.tsx b/src/components/PulseView.tsx index 9d03fcb2..59c2d56a 100644 --- a/src/components/PulseView.tsx +++ b/src/components/PulseView.tsx @@ -5,7 +5,7 @@ import { isTauri, mockInvoke } from '../mock-tauri' import { useDragRegion } from '../hooks/useDragRegion' import type { PulseCommit, PulseFile } from '../types' import { relativeDate } from '../utils/noteListHelpers' -import { translate, type AppLocale } from '../lib/i18n' +import { getLocaleDateLocale, translate, type AppLocale } from '../lib/i18n' import { Plus, Minus, PencilSimple, GitCommit, ArrowSquareOut, FileText, CaretDown, CaretRight, Pulse, @@ -57,7 +57,7 @@ function formatDayLabel(dateKey: string, locale: AppLocale): string { if (isYesterday(dateKey)) return translate(locale, 'pulse.yesterday') const date = new Date(`${dateKey}T00:00:00`) - const dateLocale = locale === 'zh-Hans' ? 'zh-CN' : 'en-US' + const dateLocale = getLocaleDateLocale(locale) return date.toLocaleDateString(dateLocale, { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' }) } diff --git a/src/components/SettingsPanel.test.tsx b/src/components/SettingsPanel.test.tsx index 907234e8..b622f892 100644 --- a/src/components/SettingsPanel.test.tsx +++ b/src/components/SettingsPanel.test.tsx @@ -78,7 +78,7 @@ describe('SettingsPanel', () => { rerender( @@ -122,7 +122,7 @@ describe('SettingsPanel', () => { open={true} settings={emptySettings} locale="en" - systemLocale="zh-Hans" + systemLocale="zh-CN" onSave={onSave} onClose={onClose} /> @@ -157,7 +157,7 @@ describe('SettingsPanel', () => { fireEvent.click(screen.getByTestId('settings-save')) expect(onSave).toHaveBeenCalledWith(expect.objectContaining({ - ui_language: 'zh-Hans', + ui_language: 'zh-CN', })) }) diff --git a/src/components/SettingsPanel.tsx b/src/components/SettingsPanel.tsx index d16a1e0d..8eb54d46 100644 --- a/src/components/SettingsPanel.tsx +++ b/src/components/SettingsPanel.tsx @@ -18,6 +18,7 @@ import { import { Moon, Sun, X } from '@phosphor-icons/react' import type { Settings } from '../types' import { + APP_LOCALES, SYSTEM_UI_LANGUAGE, createTranslator, localeDisplayName, @@ -673,8 +674,10 @@ function buildLanguageOptions(t: Translate, locale: AppLocale, systemLocale: App language: localeDisplayName(systemLocale, locale), }), }, - { value: 'en', label: t('settings.language.en') }, - { value: 'zh-Hans', label: t('settings.language.zhHans') }, + ...APP_LOCALES.map((appLocale) => ({ + value: appLocale, + label: localeDisplayName(appLocale, locale), + })), ] } diff --git a/src/components/UpdateBanner.test.tsx b/src/components/UpdateBanner.test.tsx index 6cdef7fc..15521c4c 100644 --- a/src/components/UpdateBanner.test.tsx +++ b/src/components/UpdateBanner.test.tsx @@ -50,7 +50,7 @@ function makeReadyStatus(overrides?: Partial) return { ...view, actions } } @@ -87,7 +87,7 @@ describe('UpdateBanner', () => { renderBanner(makeAvailableStatus({ version: '2026.4.16-alpha.3', displayVersion: 'Alpha 2026.4.16.3', - }), makeActions(), 'zh-Hans') + }), makeActions(), 'zh-CN') expect(screen.getByText(/Tolaria Alpha 2026\.4\.16\.3/)).toBeTruthy() expect(screen.getByText(/可用/)).toBeTruthy() diff --git a/src/components/inspector/NoteInfoPanel.tsx b/src/components/inspector/NoteInfoPanel.tsx index 758ed29a..7200f416 100644 --- a/src/components/inspector/NoteInfoPanel.tsx +++ b/src/components/inspector/NoteInfoPanel.tsx @@ -1,16 +1,12 @@ import type { VaultEntry } from '../../types' import { Info } from '@phosphor-icons/react' import { countWords } from '../../utils/wikilinks' -import { translate, type AppLocale } from '../../lib/i18n' - -function dateLocale(locale: AppLocale): string { - return locale === 'zh-Hans' ? 'zh-CN' : 'en-US' -} +import { getLocaleDateLocale, translate, type AppLocale } from '../../lib/i18n' function formatDate(timestamp: number | null, locale: AppLocale): string { if (!timestamp) return '\u2014' const d = new Date(timestamp * 1000) - return d.toLocaleDateString(dateLocale(locale), { year: 'numeric', month: 'short', day: 'numeric' }) + return d.toLocaleDateString(getLocaleDateLocale(locale), { year: 'numeric', month: 'short', day: 'numeric' }) } function formatFileSize(bytes: number): string { diff --git a/src/components/note-list/noteListUtils.test.ts b/src/components/note-list/noteListUtils.test.ts index e7bc2539..b3664731 100644 --- a/src/components/note-list/noteListUtils.test.ts +++ b/src/components/note-list/noteListUtils.test.ts @@ -40,7 +40,7 @@ describe('resolveHeaderTitle', () => { it('localizes built-in note list titles', () => { const selection: SidebarSelection = { kind: 'filter', filter: 'archived' } - expect(resolveHeaderTitle(selection, null, [], 'zh-Hans')).toBe('归档') + expect(resolveHeaderTitle(selection, null, [], 'zh-CN')).toBe('归档') }) it('keeps user-authored view names unchanged', () => { diff --git a/src/hooks/commands/settingsCommands.test.ts b/src/hooks/commands/settingsCommands.test.ts index 7c4d91e0..3be55f8c 100644 --- a/src/hooks/commands/settingsCommands.test.ts +++ b/src/hooks/commands/settingsCommands.test.ts @@ -57,21 +57,21 @@ describe('buildSettingsCommands', () => { onSetUiLanguage, }) - const chinese = commands.find((item) => item.id === 'switch-language-zh-hans') + const chinese = commands.find((item) => item.id === 'switch-language-zh-cn') expect(chinese).toMatchObject({ label: 'Switch Language to Simplified Chinese', enabled: true, }) chinese?.execute() - expect(onSetUiLanguage).toHaveBeenCalledWith('zh-Hans') + expect(onSetUiLanguage).toHaveBeenCalledWith('zh-CN') }) it('localizes language commands', () => { const commands = buildSettingsCommands({ onOpenSettings: vi.fn(), - locale: 'zh-Hans', - systemLocale: 'zh-Hans', + locale: 'zh-CN', + systemLocale: 'zh-CN', selectedUiLanguage: 'system', onSetUiLanguage: vi.fn(), }) diff --git a/src/hooks/commands/settingsCommands.ts b/src/hooks/commands/settingsCommands.ts index 9b94b28c..ce03ccb7 100644 --- a/src/hooks/commands/settingsCommands.ts +++ b/src/hooks/commands/settingsCommands.ts @@ -2,9 +2,11 @@ import { APP_COMMAND_IDS, getAppCommandShortcutDisplay } from '../appCommandCata import type { CommandAction } from './types' import { rememberFeedbackDialogOpener } from '../../lib/feedbackDialogOpener' import { + APP_LOCALES, SYSTEM_UI_LANGUAGE, createTranslator, localeDisplayName, + localeSearchKeywords, type AppLocale, type UiLanguagePreference, } from '../../lib/i18n' @@ -100,22 +102,20 @@ function buildLanguageCommands({ enabled: canSwitchLanguage && selectedUiLanguage !== SYSTEM_UI_LANGUAGE, execute: () => onSetUiLanguage?.(SYSTEM_UI_LANGUAGE), }, - { - id: 'switch-language-en', - label: t('command.switchToEnglish'), - group: 'Settings', - keywords: ['language', 'locale', 'english', 'en'], - enabled: canSwitchLanguage && selectedUiLanguage !== 'en', - execute: () => onSetUiLanguage?.('en'), - }, - { - id: 'switch-language-zh-hans', - label: t('command.switchToChinese'), - group: 'Settings', - keywords: ['language', 'locale', 'chinese', 'simplified', 'zh', '中文'], - enabled: canSwitchLanguage && selectedUiLanguage !== 'zh-Hans', - execute: () => onSetUiLanguage?.('zh-Hans'), - }, + ...APP_LOCALES.map((targetLocale) => ({ + id: `switch-language-${targetLocale.toLowerCase()}`, + label: t('command.switchLanguage', { + language: localeDisplayName(targetLocale, locale), + }), + group: 'Settings' as const, + keywords: [ + 'language', + 'locale', + ...localeSearchKeywords(targetLocale), + ], + enabled: canSwitchLanguage && selectedUiLanguage !== targetLocale, + execute: () => onSetUiLanguage?.(targetLocale), + })), ] } diff --git a/src/hooks/useSettings.test.ts b/src/hooks/useSettings.test.ts index 045978d9..da178768 100644 --- a/src/hooks/useSettings.test.ts +++ b/src/hooks/useSettings.test.ts @@ -81,7 +81,7 @@ function changedSettings(): Settings { anonymous_id: null, release_channel: null, theme_mode: null, - ui_language: 'zh-Hans', + ui_language: 'zh-CN', default_ai_agent: null, } } @@ -119,7 +119,7 @@ describe('useSettings', () => { const settings = await renderLoadedSettings() - expect(settings.ui_language).toBe('zh-Hans') + expect(settings.ui_language).toBe('zh-CN') expect(mockInvokeFn).not.toHaveBeenCalledWith('get_settings', {}) }) @@ -136,7 +136,7 @@ describe('useSettings', () => { it('normalizes unsupported language preferences on load', async () => { mockSettingsStore = { ...savedSettings, - ui_language: 'fr-FR' as Settings['ui_language'], + ui_language: 'xx-ZZ' as Settings['ui_language'], } const settings = await renderLoadedSettings() diff --git a/src/lib/i18n.test.ts b/src/lib/i18n.test.ts index 44f2de01..ee5d5d29 100644 --- a/src/lib/i18n.test.ts +++ b/src/lib/i18n.test.ts @@ -1,36 +1,59 @@ import { describe, expect, it } from 'vitest' import { + APP_LOCALES, EN_TRANSLATIONS, - ZH_HANS_TRANSLATIONS, + localeCatalogLocales, localeDisplayName, normalizeUiLanguagePreference, resolveEffectiveLocale, serializeUiLanguagePreference, + translate, } from './i18n' describe('i18n', () => { it('uses supported system languages before falling back to English', () => { - expect(resolveEffectiveLocale(null, ['zh-CN'])).toBe('zh-Hans') - expect(resolveEffectiveLocale('system', ['fr-FR'])).toBe('en') + expect(resolveEffectiveLocale(null, ['zh-CN'])).toBe('zh-CN') + expect(resolveEffectiveLocale(null, ['es-MX'])).toBe('es-419') + expect(resolveEffectiveLocale('system', ['fr-FR'])).toBe('fr-FR') + expect(resolveEffectiveLocale('system', ['xx-ZZ'])).toBe('en') }) - it('normalizes stored language preferences', () => { - expect(normalizeUiLanguagePreference(' zh-cn ')).toBe('zh-Hans') + it('normalizes current and legacy language preferences', () => { + expect(normalizeUiLanguagePreference(' zh-cn ')).toBe('zh-CN') + expect(normalizeUiLanguagePreference('zh-Hans')).toBe('zh-CN') + expect(normalizeUiLanguagePreference('fr-FR')).toBe('fr-FR') expect(normalizeUiLanguagePreference('auto')).toBe('system') - expect(normalizeUiLanguagePreference('fr-FR')).toBeNull() + expect(normalizeUiLanguagePreference('xx-ZZ')).toBeNull() }) it('serializes system preference as the settings default', () => { expect(serializeUiLanguagePreference('system')).toBeNull() - expect(serializeUiLanguagePreference('zh-Hans')).toBe('zh-Hans') + expect(serializeUiLanguagePreference('zh-Hans')).toBe('zh-CN') }) - it('keeps Simplified Chinese aligned with the canonical English keys', () => { - expect(Object.keys(ZH_HANS_TRANSLATIONS).sort()).toEqual(Object.keys(EN_TRANSLATIONS).sort()) + it('keeps English locale metadata aligned with the locale registry', () => { + expect(APP_LOCALES).toContain('zh-CN') + expect(APP_LOCALES).toContain('ko-KR') + expect(localeDisplayName('pt-BR', 'en')).toBe('Portuguese (Brazil)') }) it('formats locale display names in the active language', () => { - expect(localeDisplayName('zh-Hans', 'zh-Hans')).toBe('简体中文') - expect(localeDisplayName('en', 'zh-Hans')).toBe('英文') + expect(localeDisplayName('zh-CN', 'zh-CN')).toBe('简体中文') + expect(localeDisplayName('en', 'zh-CN')).toBe('英文') + expect(localeDisplayName('es-419', 'en')).toBe('Spanish (Latin America)') + }) + + it('keeps locale label keys present in English', () => { + expect(EN_TRANSLATIONS['locale.itIT']).toBe('Italian') + expect(EN_TRANSLATIONS['locale.koKR']).toBe('Korean') + }) + + it('loads a translation catalog for every configured locale', () => { + expect(localeCatalogLocales()).toEqual(APP_LOCALES) + }) + + it('drops English-only plural suffix values for non-English locales', () => { + expect(translate('en', 'status.conflict.count', { count: 2, plural: 's' })).toBe('2 conflicts') + expect(translate('zh-CN', 'status.conflict.count', { count: 2, plural: 's' })).toBe('2 个冲突') }) }) diff --git a/src/lib/i18n.ts b/src/lib/i18n.ts index 61ad9da0..4a503d16 100644 --- a/src/lib/i18n.ts +++ b/src/lib/i18n.ts @@ -1,22 +1,190 @@ -import { EN_TRANSLATIONS } from './locales/en' -import { ZH_HANS_TRANSLATIONS } from './locales/zh-Hans' +import EN_TRANSLATIONS from './locales/en.json' export const DEFAULT_APP_LOCALE = 'en' export const SYSTEM_UI_LANGUAGE = 'system' -export const APP_LOCALES = ['en', 'zh-Hans'] as const +export const APP_LOCALES = [ + 'en', + 'it-IT', + 'fr-FR', + 'de-DE', + 'ru-RU', + 'es-ES', + 'pt-BR', + 'pt-PT', + 'es-419', + 'zh-CN', + 'ja-JP', + 'ko-KR', +] as const + export type AppLocale = typeof APP_LOCALES[number] export type UiLanguagePreference = typeof SYSTEM_UI_LANGUAGE | AppLocale -export type TranslationKey = keyof typeof EN_TRANSLATIONS +export type TranslationCatalog = typeof EN_TRANSLATIONS +export type TranslationKey = keyof TranslationCatalog export type TranslationValues = Record -export { EN_TRANSLATIONS, ZH_HANS_TRANSLATIONS } +type LocaleDefinition = { + code: AppLocale + dateLocale: string + labelKey: TranslationKey + aliases: readonly string[] + searchKeywords: readonly string[] +} -const SIMPLIFIED_CHINESE_LANGUAGE_CODES = new Set(['zh', 'zh-cn', 'zh-hans', 'zh-sg']) +const LOCALE_DEFINITIONS: Record = { + en: { + code: 'en', + dateLocale: 'en-US', + labelKey: 'locale.en', + aliases: ['en', 'en-us', 'en-gb', 'en-ca', 'en-au'], + searchKeywords: ['english', 'en'], + }, + 'it-IT': { + code: 'it-IT', + dateLocale: 'it-IT', + labelKey: 'locale.itIT', + aliases: ['it', 'it-it'], + searchKeywords: ['italian', 'italiano', 'it', 'it-it'], + }, + 'fr-FR': { + code: 'fr-FR', + dateLocale: 'fr-FR', + labelKey: 'locale.frFR', + aliases: ['fr', 'fr-fr'], + searchKeywords: ['french', 'francais', 'français', 'fr', 'fr-fr'], + }, + 'de-DE': { + code: 'de-DE', + dateLocale: 'de-DE', + labelKey: 'locale.deDE', + aliases: ['de', 'de-de'], + searchKeywords: ['german', 'deutsch', 'de', 'de-de'], + }, + 'ru-RU': { + code: 'ru-RU', + dateLocale: 'ru-RU', + labelKey: 'locale.ruRU', + aliases: ['ru', 'ru-ru'], + searchKeywords: ['russian', 'russkiy', 'русский', 'ru', 'ru-ru'], + }, + 'es-ES': { + code: 'es-ES', + dateLocale: 'es-ES', + labelKey: 'locale.esES', + aliases: ['es-es'], + searchKeywords: ['spanish', 'espanol', 'español', 'spain', 'es', 'es-es'], + }, + 'pt-BR': { + code: 'pt-BR', + dateLocale: 'pt-BR', + labelKey: 'locale.ptBR', + aliases: ['pt-br'], + searchKeywords: ['portuguese', 'brasil', 'brazilian', 'pt', 'pt-br'], + }, + 'pt-PT': { + code: 'pt-PT', + dateLocale: 'pt-PT', + labelKey: 'locale.ptPT', + aliases: ['pt-pt'], + searchKeywords: ['portuguese', 'portugal', 'european', 'pt-pt'], + }, + 'es-419': { + code: 'es-419', + dateLocale: 'es-419', + labelKey: 'locale.es419', + aliases: [ + 'es-419', + 'es-ar', + 'es-bo', + 'es-cl', + 'es-co', + 'es-cr', + 'es-cu', + 'es-do', + 'es-ec', + 'es-gt', + 'es-hn', + 'es-mx', + 'es-ni', + 'es-pa', + 'es-pe', + 'es-pr', + 'es-py', + 'es-sv', + 'es-us', + 'es-uy', + 'es-ve', + ], + searchKeywords: ['spanish', 'latin', 'latam', 'latin america', 'es-419'], + }, + 'zh-CN': { + code: 'zh-CN', + dateLocale: 'zh-CN', + labelKey: 'locale.zhCN', + aliases: ['zh', 'zh-cn', 'zh-hans', 'zh-sg'], + searchKeywords: ['chinese', 'simplified', 'zh', 'zh-cn', '中文', '简体中文'], + }, + 'ja-JP': { + code: 'ja-JP', + dateLocale: 'ja-JP', + labelKey: 'locale.jaJP', + aliases: ['ja', 'ja-jp'], + searchKeywords: ['japanese', 'nihongo', '日本語', 'ja', 'ja-jp'], + }, + 'ko-KR': { + code: 'ko-KR', + dateLocale: 'ko-KR', + labelKey: 'locale.koKR', + aliases: ['ko', 'ko-kr'], + searchKeywords: ['korean', 'hangul', '한국어', 'ko', 'ko-kr'], + }, +} -const TRANSLATIONS: Record>> = { - en: EN_TRANSLATIONS, - 'zh-Hans': ZH_HANS_TRANSLATIONS, +const APP_LOCALE_SET = new Set(APP_LOCALES) +const NORMALIZED_LOCALE_LOOKUP = new Map() +for (const locale of APP_LOCALES) { + const definition = LOCALE_DEFINITIONS[locale] + NORMALIZED_LOCALE_LOOKUP.set(locale.toLowerCase(), locale) + for (const alias of definition.aliases) { + NORMALIZED_LOCALE_LOOKUP.set(alias, locale) + } +} + +const LOCALE_MODULES = import.meta.glob('./locales/*.json', { eager: true, import: 'default' }) as Record +const TRANSLATIONS: Partial>>> = buildTranslations() + +export const APP_LOCALE_DEFINITIONS = APP_LOCALES.map((locale) => LOCALE_DEFINITIONS[locale]) +export { EN_TRANSLATIONS } + +function buildTranslations() { + const translations: Partial>>> = { + en: EN_TRANSLATIONS, + } + + for (const [path, catalog] of Object.entries(LOCALE_MODULES)) { + const match = path.match(/\/([^/]+)\.json$/) + if (!match) continue + + const locale = normalizeLocaleCode(match[1]) + if (!locale || locale === 'en') continue + + translations[locale] = catalog + } + + return translations +} + +function isAppLocale(value: string): value is AppLocale { + return APP_LOCALE_SET.has(value as AppLocale) +} + +export function getLocaleDefinition(locale: AppLocale): LocaleDefinition { + return LOCALE_DEFINITIONS[locale] +} + +export function getLocaleDateLocale(locale: AppLocale): string { + return LOCALE_DEFINITIONS[locale].dateLocale } export function interpolate(template: string, values: TranslationValues = {}): string { @@ -26,9 +194,14 @@ export function interpolate(template: string, values: TranslationValues = {}): s }) } +function localizedInterpolationValues(locale: AppLocale, values?: TranslationValues): TranslationValues | undefined { + if (!values || locale === 'en' || values.plural === undefined) return values + return { ...values, plural: '' } +} + export function translate(locale: AppLocale, key: TranslationKey, values?: TranslationValues): string { const template = TRANSLATIONS[locale]?.[key] ?? EN_TRANSLATIONS[key] - return interpolate(template, values) + return interpolate(template, localizedInterpolationValues(locale, values)) } export function createTranslator(locale: AppLocale = DEFAULT_APP_LOCALE) { @@ -36,10 +209,14 @@ export function createTranslator(locale: AppLocale = DEFAULT_APP_LOCALE) { } function normalizeLocaleCode(value: string): AppLocale | null { - const normalized = value.trim().replace('_', '-').toLowerCase() - if (normalized === 'en' || normalized.startsWith('en-')) return 'en' - if (SIMPLIFIED_CHINESE_LANGUAGE_CODES.has(normalized)) return 'zh-Hans' - return null + const normalized = value.trim().replaceAll('_', '-').toLowerCase() + if (!normalized) return null + + const exactMatch = NORMALIZED_LOCALE_LOOKUP.get(normalized) + if (exactMatch) return exactMatch + + const languageMatches = APP_LOCALES.filter((locale) => locale.toLowerCase().startsWith(`${normalized}-`)) + return languageMatches.length === 1 ? languageMatches[0] : null } export function normalizeUiLanguagePreference(value: unknown): UiLanguagePreference | null { @@ -82,5 +259,21 @@ export function resolveEffectiveLocale( } export function localeDisplayName(locale: AppLocale, displayLocale: AppLocale = locale): string { - return translate(displayLocale, locale === 'zh-Hans' ? 'locale.zhHans' : 'locale.en') + return translate(displayLocale, LOCALE_DEFINITIONS[locale].labelKey) +} + +export function localeSearchKeywords(locale: AppLocale): readonly string[] { + return LOCALE_DEFINITIONS[locale].searchKeywords +} + +export function hasLocaleCatalog(locale: AppLocale): boolean { + return locale === 'en' || !!TRANSLATIONS[locale] +} + +export function localeCatalogLocales(): AppLocale[] { + return APP_LOCALES.filter((locale) => hasLocaleCatalog(locale)) +} + +export function isCanonicalAppLocale(value: string): value is AppLocale { + return isAppLocale(value) } diff --git a/src/lib/locales/de-DE.json b/src/lib/locales/de-DE.json new file mode 100644 index 00000000..633f861b --- /dev/null +++ b/src/lib/locales/de-DE.json @@ -0,0 +1,405 @@ +{ + "command.noMatches": "Keine passenden Befehle", + "command.palettePlaceholder": "Geben Sie einen Befehl ein …", + "command.footerNavigate": "↑↓ navigieren", + "command.footerSelect": "↵ Auswählen", + "command.footerClose": "esc schließen", + "command.footerSend": "↵ Senden", + "command.aiMode": "{agent}-Modus", + "command.openSettings": "Einstellungen öffnen", + "command.openSettings.keywords": "Einstellungen Konfiguration", + "command.openLanguageSettings": "Spracheinstellungen öffnen", + "command.openLanguageSettings.keywords": "Sprache Gebietsschema i18n Internationalisierung Lokalisierung Englisch Italienisch Französisch Deutsch Russisch Spanisch Portugiesisch Chinesisch Japanisch Koreanisch 中文", + "command.useSystemLanguage": "Systemsprache verwenden", + "command.openH1Setting": "Einstellung für automatische H1-Umbenennung öffnen", + "command.contribute": "Mitwirken", + "command.checkUpdates": "Nach Updates suchen", + "command.group.navigation": "Navigation", + "command.group.note": "Notiz", + "command.group.git": "Git", + "command.group.view": "Anzeigen", + "command.group.settings": "Einstellungen", + "command.navigation.searchNotes": "Notizen durchsuchen", + "command.navigation.goAllNotes": "Zu allen Notizen", + "command.navigation.goArchived": "Zu Archivierten Notizen", + "command.navigation.goChanges": "Zu den Änderungen", + "command.navigation.goHistory": "Zum Verlauf", + "command.navigation.goBack": "Zurück", + "command.navigation.goForward": "Vorwärts", + "command.navigation.goInbox": "Zum Posteingang", + "command.navigation.renameFolder": "Ordner umbenennen", + "command.navigation.deleteFolder": "Ordner löschen", + "command.navigation.showOpenNotes": "Offene Notizen anzeigen", + "command.navigation.showArchivedNotes": "Archivierte Notizen anzeigen", + "command.navigation.listType": "{type}-Liste", + "command.note.newNote": "Neue Notiz", + "command.note.newType": "Neuer Typ", + "command.note.newTypedNote": "Neuer {type}", + "command.note.saveNote": "Notiz speichern", + "command.note.findInNote": "In Notiz suchen", + "command.note.replaceInNote": "In Notiz ersetzen", + "command.note.deleteNote": "Notiz löschen", + "command.note.archiveNote": "Notiz archivieren", + "command.note.unarchiveNote": "Notiz aus dem Archiv holen", + "command.note.addFavorite": "Zu Favoriten hinzufügen", + "command.note.removeFavorite": "Aus Favoriten entfernen", + "command.note.markOrganized": "Als organisiert markieren", + "command.note.markUnorganized": "Als unorganisiert markieren", + "command.note.restoreDeleted": "Gelöschte Notiz wiederherstellen", + "command.note.setIcon": "Notizsymbol festlegen", + "command.note.removeIcon": "Notizsymbol entfernen", + "command.note.changeType": "Notiztyp ändern …", + "command.note.moveToFolder": "Notiz in Ordner verschieben …", + "command.note.openNewWindow": "In neuem Fenster öffnen", + "command.git.initialize": "Git für den aktuellen Vault initialisieren", + "command.git.commitPush": "Commit & Push", + "command.git.addRemote": "Remote zum aktuellen Vault hinzufügen", + "command.git.pull": "Von Remote abrufen", + "command.git.resolveConflicts": "Konflikte auflösen", + "command.git.viewChanges": "Ausstehende Änderungen anzeigen", + "command.view.editorOnly": "Nur Editor", + "command.view.editorNoteList": "Editor + Notizenliste", + "command.view.fullLayout": "Vollständiges Layout", + "command.view.toggleProperties": "Eigenschaften-Panel ein-/ausblenden", + "command.view.toggleDiff": "Diff-Modus umschalten", + "command.view.toggleRaw": "Raw-Editor umschalten", + "command.view.leftLayout": "Linksbündiges Notizenlayout verwenden", + "command.view.centerLayout": "Zentriertes Notizen-Layout verwenden", + "command.view.toggleAiPanel": "KI-Panel umschalten", + "command.view.newAiChat": "Neuer KI-Chat", + "command.view.toggleBacklinks": "Backlinks ein-/ausblenden", + "command.view.zoomIn": "Vergrößern ({zoom} %)", + "command.view.zoomOut": "Verkleinern ({zoom} %)", + "command.view.resetZoom": "Zoom zurücksetzen", + "command.settings.createEmptyVault": "Leeren Vault erstellen …", + "command.settings.openVault": "Vault öffnen …", + "command.settings.removeVault": "Vault aus der Liste entfernen", + "command.settings.restoreGettingStarted": "Getting-Started-Vault wiederherstellen", + "command.settings.manageExternalAi": "Externe KI-Tools verwalten …", + "command.settings.setupExternalAi": "Externe KI-Tools einrichten …", + "command.settings.reloadVault": "Vault neu laden", + "command.settings.repairVault": "Vault reparieren", + "command.ai.openAgents": "KI-Agents öffnen", + "command.ai.restoreGuidance": "Tolaria-KI-Anleitung wiederherstellen", + "command.ai.switchToAgent": "KI-Agent auf {agent} umstellen", + "command.ai.switchDefault": "Standard-AI-Agent wechseln", + "command.ai.switchDefaultWithAgent": "Standard-AI-Agent ({agent}) wechseln", + "settings.title": "Einstellungen", + "settings.close": "Einstellungen schließen", + "settings.sync.title": "Synchronisierung & Updates", + "settings.sync.description": "Konfigurieren Sie das Abrufen im Hintergrund und legen Sie fest, welchem Update-Feed Tolaria folgt. Stable erhält nur manuell promotete Releases, während Alpha jedem Push auf main folgt.", + "settings.pullInterval": "Pull-Intervall (Minuten)", + "settings.releaseChannel": "Release-Kanal", + "settings.releaseStable": "Stable", + "settings.releaseAlpha": "Alpha", + "settings.appearance.title": "Darstellung", + "settings.appearance.description": "Wählen Sie den App-Farbmodus aus, der für Tolaria Chrome, Editor-Oberflächen, Menüs und Dialoge verwendet werden soll.", + "settings.theme.label": "Design", + "settings.theme.light": "Hell", + "settings.theme.dark": "Dunkel", + "settings.language.title": "Sprache", + "settings.language.description": "Wählen Sie die Anzeigesprache für Tolaria Chrome aus. Das System folgt macOS, wenn diese Sprache unterstützt wird, wobei Englisch als Ausweichsprache dient.", + "settings.language.label": "Anzeigesprache", + "settings.language.system": "System ({language})", + "settings.language.summary": "Fehlende Übersetzungen fallen auf Englisch zurück, sodass teilweise übersetzte Locales weiterhin nutzbar bleiben.", + "settings.autogit.title": "AutoGit", + "settings.autogit.description.enabled": "Erstellt nach Bearbeitungspausen oder wenn die App nicht mehr aktiv ist automatisch konservative Git-Checkpoints.", + "settings.autogit.description.disabled": "AutoGit ist erst verfügbar, wenn der aktuelle Vault Git-fähig ist. Initialisieren Sie zunächst Git für diesen Vault.", + "settings.autogit.enable": "AutoGit aktivieren", + "settings.autogit.enableDescription": "Wenn diese Option aktiviert ist, führt Tolaria nach einer Inaktivitätspause oder nachdem die App inaktiv geworden ist, automatisch ein Commit und einen Push der gespeicherten lokalen Änderungen durch.", + "settings.autogit.idleThreshold": "Leerlaufschwelle (Sekunden)", + "settings.autogit.inactiveThreshold": "Kulanzzeitraum bei inaktiver App (Sekunden)", + "settings.titles.title": "Titel & Dateinamen", + "settings.titles.description": "Legen Sie fest, ob Tolaria Dateinamen von unbenannten Notizen automatisch anhand der ersten H1-Überschrift synchronisiert.", + "settings.titles.autoRename": "Unbenannte Notizen automatisch anhand der ersten H1-Uberschrift umbenennen", + "settings.titles.autoRenameDescription": "Wenn diese Option aktiviert ist, benennt Tolaria Dateien mit unbenannten Notizen um, sobald die erste H1-Überschrift zu einem echten Titel wird. Deaktivieren Sie diese Option, um den Dateinamen unverändert zu lassen, bis Sie ihn manuell über die Breadcrumb-Leiste umbenennen.", + "settings.aiAgents.title": "KI-Agents", + "settings.aiAgents.description": "Wählen Sie aus, welchen CLI-KI-Agenten Tolaria im KI-Panel und in der Befehlspalette verwendet.", + "settings.aiAgents.default": "Standard-KI-Agent", + "settings.aiAgents.installed": "installiert", + "settings.aiAgents.missing": "fehlt", + "settings.aiAgents.ready": "{agent}{version} ist einsatzbereit.", + "settings.aiAgents.notInstalled": "{agent} ist noch nicht installiert. Sie können ihn trotzdem jetzt auswählen und später installieren.", + "settings.workflow.title": "Workflow", + "settings.workflow.description": "Legen Sie fest, ob Tolaria den Inbox-Workflow anzeigt und wie Tolaria bei der Triage durch die Elemente navigiert.", + "settings.workflow.explicit": "Notizen explizit organisieren", + "settings.workflow.explicitDescription": "Wenn diese Option aktiviert ist, werden in einem Abschnitt der Inbox unorganisierte Notizen angezeigt, und über einen Schalter können Sie Notizen als organisiert markiert werden.", + "settings.workflow.autoAdvance": "Automatisch zum nächsten Inbox-Element wechseln", + "settings.workflow.autoAdvanceDescription": "Wenn diese Option aktiviert ist, wird beim Markieren einer Inbox-Notiz als organisiert sofort die nächste sichtbare Inbox-Notiz geöffnet.", + "settings.privacy.title": "Datenschutz & Telemetrie", + "settings.privacy.description": "Anonyme Daten helfen uns, Fehler zu beheben und Tolaria zu verbessern. Es werden niemals Vault-Inhalte, Notiztitel oder Dateipfade gesendet.", + "settings.privacy.crashReporting": "Absturzberichte", + "settings.privacy.crashReportingDescription": "Anonyme Fehlerberichte senden", + "settings.privacy.analytics": "Nutzungsanalysen", + "settings.privacy.analyticsDescription": "Anonyme Nutzungsmuster teilen", + "settings.footerShortcut": "⌘, um die Einstellungen zu öffnen", + "settings.cancel": "Abbrechen", + "settings.save": "Speichern", + "common.cancel": "Abbrechen", + "locale.en": "Englisch", + "sidebar.nav.inbox": "Posteingang", + "sidebar.nav.allNotes": "Alle Notizen", + "sidebar.nav.archive": "Archivieren", + "sidebar.group.favorites": "FAVORITEN", + "sidebar.group.views": "AUFRUFE", + "sidebar.group.types": "TYPEN", + "sidebar.group.folders": "ORDNER", + "sidebar.action.createView": "Ansicht erstellen", + "sidebar.action.editView": "Ansicht bearbeiten", + "sidebar.action.deleteView": "Ansicht löschen", + "sidebar.action.customizeSections": "Abschnitte anpassen", + "sidebar.action.renameSection": "Abschnitt umbenennen …", + "sidebar.action.customizeIconColor": "Symbol und Farbe anpassen …", + "sidebar.action.createType": "Neuen Typ erstellen", + "sidebar.action.collapse": "Seitenleiste einklappen", + "sidebar.action.expand": "Seitenleiste erweitern", + "sidebar.action.createFolder": "Ordner erstellen", + "sidebar.action.renameFolder": "Ordner umbenennen", + "sidebar.action.deleteFolder": "Ordner löschen", + "sidebar.action.revealFolderMenu": "Im Finder anzeigen", + "sidebar.action.copyFolderPathMenu": "Ordnerpfad kopieren", + "sidebar.action.renameFolderMenu": "Ordner umbenennen …", + "sidebar.action.deleteFolderMenu": "Ordner löschen …", + "sidebar.folder.name": "Ordnername", + "sidebar.folder.newName": "Neuer Ordnername", + "sidebar.folder.expand": "{name} erweitern", + "sidebar.folder.collapse": "{name} einklappen", + "sidebar.section.name": "Abschnittsname", + "sidebar.section.showInSidebar": "In der Seitenleiste anzeigen", + "sidebar.section.toggle": "{label} umschalten", + "sidebar.disabled.comingSoon": "Demnächst verfügbar", + "noteList.title.archive": "Archivieren", + "noteList.title.changes": "Änderungen", + "noteList.title.inbox": "Inbox", + "noteList.title.history": "Verlauf", + "noteList.title.view": "Anzeigen", + "noteList.title.notes": "Notizen", + "noteList.searchPlaceholder": "Notizen durchsuchen …", + "noteList.searchAction": "Notizen durchsuchen", + "noteList.createNote": "Neue Notiz erstellen", + "noteList.empty.changesError": "Änderungen konnten nicht geladen werden: {error}", + "noteList.empty.noChanges": "Keine ausstehenden Änderungen", + "noteList.empty.noArchived": "Keine archivierten Notizen", + "noteList.empty.noMatching": "Keine passenden Notizen", + "noteList.empty.allOrganized": "Alle Notizen sind organisiert", + "noteList.empty.noNotes": "Keine Notizen gefunden", + "noteList.empty.noMatchingItems": "Keine passenden Elemente", + "noteList.empty.noRelatedItems": "Keine verwandten Elemente", + "noteList.sort.modified": "Geändert", + "noteList.sort.created": "Erstellt", + "noteList.sort.title": "Titel", + "noteList.sort.status": "Status", + "noteList.sort.by": "Nach {label} sortieren", + "noteList.sort.menu": "{label} sortieren", + "noteList.sort.ascending": "Aufsteigend", + "noteList.sort.descending": "Absteigend", + "noteList.filter.open": "Offen", + "noteList.filter.archived": "Archiviert", + "noteList.filter.week": "Woche", + "noteList.filter.month": "Monat", + "noteList.filter.all": "Alle", + "noteList.properties.customizeColumns": "Spalten anpassen", + "noteList.properties.customizeAllColumns": "Alle Notes-Spalten anpassen", + "noteList.properties.customizeInboxColumns": "Spalten im Posteingang anpassen", + "noteList.properties.customizeViewColumns": "{name}-Spalten anpassen", + "noteList.properties.showInNoteList": "In Notizenliste anzeigen", + "noteList.properties.searchPlaceholder": "Eigenschaften suchen …", + "noteList.properties.searchLabel": "Eigenschaften der Notizenliste suchen", + "noteList.properties.noMatches": "Keine Eigenschaften entsprechen dieser Suche.", + "noteList.properties.reorder": "{name} neu anordnen", + "noteList.changes.restoreNote": "Notiz wiederherstellen", + "noteList.changes.discardChanges": "Änderungen verwerfen", + "noteList.changes.restoreDescription": "{file} aus Git wiederherstellen?", + "noteList.changes.discardDescription": "Änderungen an {file} verwerfen? Dieser Vorgang kann nicht rückgängig gemacht werden.", + "noteList.changes.thisFile": "diese Datei", + "noteList.changes.restore": "Wiederherstellen", + "noteList.changes.discard": "Verwerfen", + "noteList.changes.cancel": "Abbrechen", + "editor.empty.selectNote": "Wählen Sie eine Notiz aus, um mit der Bearbeitung zu beginnen", + "editor.empty.shortcuts": "{quickOpen} zum Suchen · {newNote} zum Erstellen", + "editor.raw.label": "Raw-Editor", + "editor.find.findLabel": "Suchen", + "editor.find.findPlaceholder": "Suchen", + "editor.find.replaceLabel": "Ersetzen", + "editor.find.replacePlaceholder": "Ersetzen", + "editor.find.matchCount": "{current} / {total}", + "editor.find.noMatches": "Keine Übereinstimmungen", + "editor.find.invalidRegex": "Ungültiger Regex", + "editor.find.regexMustMatchText": "Regex muss mit dem Text übereinstimmen", + "editor.find.previousMatch": "Vorheriges Match", + "editor.find.nextMatch": "Nächste Übereinstimmung", + "editor.find.showReplace": "Ersetzen anzeigen", + "editor.find.hideReplace": "Ersetzen ausblenden", + "editor.find.regex": "Regulären Ausdruck verwenden", + "editor.find.matchCase": "Groß-/Kleinschreibung beachten", + "editor.find.close": "Suche schließen", + "editor.find.replace": "Ersetzen", + "editor.find.replaceAll": "Alle", + "editor.toolbar.rawReturn": "Zum Editor zurückkehren", + "editor.toolbar.rawOpen": "Raw-Editor öffnen", + "editor.toolbar.centerLayout": "Zum zentrierten Notizen-Layout wechseln", + "editor.toolbar.leftLayout": "Zum linksbündigen Notizen-Layout wechseln", + "editor.toolbar.removeFavorite": "Aus Favoriten entfernen", + "editor.toolbar.addFavorite": "Zu Favoriten hinzufügen", + "editor.toolbar.markUnorganized": "Notiz als „Nicht organisiert“ markieren", + "editor.toolbar.markOrganized": "Notiz als organisiert markieren", + "editor.toolbar.noDiff": "Noch kein Diff verfügbar", + "editor.toolbar.loadingDiff": "Diff wird geladen", + "editor.toolbar.showDiff": "Aktuellen Diff anzeigen", + "editor.toolbar.openAi": "AI-Panel öffnen", + "editor.toolbar.closeAi": "AI-Panel schließen", + "editor.toolbar.restoreArchived": "Diese archivierte Notiz wiederherstellen", + "editor.toolbar.archive": "Diese Notiz archivieren", + "editor.toolbar.delete": "Diese Notiz löschen", + "editor.toolbar.revealFile": "Im Finder anzeigen", + "editor.toolbar.copyFilePath": "Dateipfad kopieren", + "editor.toolbar.openProperties": "Eigenschaften-Panel öffnen", + "editor.filename.rename": "Dateinamen umbenennen", + "editor.filename.renameToTitle": "Datei entsprechend dem Titel umbenennen", + "editor.filename.trigger": "Dateiname {filename}. Zum Umbenennen die Eingabetaste drücken", + "editor.banner.archived": "Archiviert", + "editor.banner.unarchive": "Aus dem Archiv holen", + "editor.banner.conflict": "Diese Notiz weist einen Merge-Konflikt auf", + "editor.banner.keepMine": "Meine behalten", + "editor.banner.keepMineTooltip": "Meine lokale Version behalten", + "editor.banner.keepTheirs": "Ihre Version behalten", + "editor.banner.keepTheirsTooltip": "Remote-Version beibehalten", + "inspector.title.properties": "Eigenschaften", + "inspector.title.propertiesShortcut": "Eigenschaften (⌘⇧I)", + "inspector.title.closePropertiesShortcut": "Eigenschaften schließen (⌘⇧I)", + "inspector.empty.noNoteSelected": "Keine Notiz ausgewählt", + "inspector.empty.noProperties": "Diese Notiz hat noch keine Eigenschaften", + "inspector.empty.initializeProperties": "Eigenschaften initialisieren", + "inspector.empty.invalidProperties": "Ungültige Eigenschaften", + "inspector.empty.fixInEditor": "Im Editor korrigieren", + "inspector.properties.addProperty": "Eigenschaft hinzufügen", + "inspector.properties.deleteProperty": "Eigenschaft löschen", + "inspector.properties.none": "Keine", + "inspector.properties.missingType": "Fehlender Typ", + "inspector.properties.missingTypeAria": "Typ {type} fehlt. Klicken Sie, um diesen Typ zu erstellen.", + "inspector.properties.searchTypes": "Typen suchen …", + "inspector.properties.noMatchingTypes": "Keine passenden Typen", + "inspector.properties.yes": "Ja", + "inspector.properties.no": "Nein", + "inspector.properties.pickDate": "Datum auswählen …", + "inspector.properties.valuePlaceholder": "Wert", + "inspector.properties.propertyName": "Eigenschaftsname", + "inspector.relationship.add": "Hinzufügen", + "inspector.relationship.addRelationship": "+ Beziehung hinzufügen", + "inspector.relationship.name": "Beziehungsname", + "inspector.relationship.noteTitle": "Notiztitel", + "inspector.relationship.createAndOpen": "Erstellen & öffnen", + "inspector.info.title": "Info", + "inspector.info.modified": "Geändert", + "inspector.info.created": "Erstellt", + "inspector.info.words": "Wörter", + "inspector.info.size": "Größe", + "update.available": "ist verfügbar", + "update.releaseNotes": "Versionshinweise", + "update.updateNow": "Jetzt aktualisieren", + "update.dismiss": "Ausblenden", + "update.downloading": "Tolaria {version} wird heruntergeladen …", + "update.readyRestart": "ist bereit – zum Übernehmen neu starten", + "update.restartNow": "Jetzt neu starten", + "status.update.check": "Nach Updates suchen", + "status.zoom.reset": "Zoomstufe zurücksetzen", + "status.feedback.contribute": "Zu Tolaria beitragen", + "status.feedback.label": "Beitragen", + "status.theme.light": "In den hellen Modus wechseln", + "status.theme.dark": "In den Dunkelmodus wechseln", + "status.settings.open": "Einstellungen öffnen", + "status.build.unknown": "b?", + "status.vault.switch": "Vault wechseln", + "status.vault.default": "Vault", + "status.vault.createEmpty": "Leeren Vault erstellen", + "status.vault.openLocal": "Lokalen Ordner öffnen", + "status.vault.cloneGit": "Git-Repo klonen", + "status.vault.cloneGettingStarted": "Getting-Started-Vault klonen", + "status.vault.notFound": "Vault nicht gefunden: {path}", + "status.vault.remove": "{label} aus der Liste entfernen", + "status.remote.noneConfigured": "Kein Remote konfiguriert", + "status.remote.inSync": "Mit Remote synchronisiert", + "status.remote.aheadTitle": "{count} Commit{plural} vor dem Remote-Branch", + "status.remote.behindTitle": "{count} Commit{plural} hinter dem Remote-Branch", + "status.remote.ahead": "{count} voraus", + "status.remote.behind": "{count} hinterher", + "status.remote.add": "Remote zu diesem Vault hinzufügen", + "status.remote.none": "Kein Remote", + "status.remote.noneDescription": "Für diesen Git-Vault ist kein Remote konfiguriert. Commits bleiben lokal, bis Sie einen Remote-Vault hinzufügen.", + "status.sync.syncing": "Wird synchronisiert …", + "status.sync.conflict": "Konflikt", + "status.sync.failed": "Synchronisierung fehlgeschlagen", + "status.sync.pullRequired": "Pull erforderlich", + "status.sync.notSynced": "Nicht synchronisiert", + "status.sync.justNow": "Gerade synchronisiert", + "status.sync.minutesAgo": "Vor {minutes} Min. synchronisiert", + "status.sync.resolveConflicts": "Merge-Konflikte beheben", + "status.sync.inProgress": "Synchronisierung läuft", + "status.sync.pullAndPush": "Von Remote abrufen und pushen", + "status.sync.retry": "Synchronisierung erneut versuchen", + "status.sync.now": "Jetzt synchronisieren", + "status.sync.synced": "Synchronisiert", + "status.sync.conflicts": "Konflikte", + "status.sync.error": "Fehler", + "status.sync.status": "Status: {status}", + "status.sync.pull": "Pull", + "status.conflict.count": "{count} Konflikt{plural}", + "status.offline.title": "Keine Internetverbindung", + "status.offline.label": "Offline", + "status.changes.view": "Ausstehende Änderungen anzeigen", + "status.changes.label": "Änderungen", + "status.commit.local": "Änderungen lokal committen", + "status.commit.push": "Änderungen commiten und pushen", + "status.commit.label": "Commit", + "status.commit.openOnGitHub": "Commit {hash} auf GitHub öffnen", + "status.git.disabledTooltip": "Git ist für diesen Vault deaktiviert. Initialisieren Sie Git, um den Verlauf, die Synchronisierung, Commits und Änderungsansichten zu aktivieren.", + "status.git.disabled": "Git deaktiviert", + "status.history.onlyGit": "Der Verlauf ist nur für Git-fähige Vaults verfügbar.", + "status.history.open": "Änderungsverlauf öffnen", + "status.history.label": "Verlauf", + "status.mcp.notConnected": "Externe KI-Tools nicht verbunden – zum Einrichten klicken", + "status.mcp.unknown": "MCP-Status unbekannt", + "status.claude.missing": "Claude Code fehlt", + "status.claude.label": "Claude Code", + "status.claude.install": "Claude-Code nicht gefunden – zum Installieren klicken", + "status.ai.noAgents": "Keine KI-Agents erkannt", + "status.ai.noAgentsTooltip": "Keine KI-Agents erkannt – zum Anzeigen der Setup-Details klicken", + "status.ai.selectedMissing": "{agent} ist ausgewählt, aber nicht installiert – zum Anzeigen der Setup-Details klicken", + "status.ai.defaultAgent": "Standard-AI-Agent: {agent}{version}", + "status.ai.restoreDetails": "{base}. {summary} – Zum Anzeigen der Wiederherstellungsdetails klicken", + "status.ai.withGuidance": "{base}. {summary}", + "status.ai.active": "Aktiver KI-Agent: {agent}", + "status.ai.unavailable": "Ausgewählter KI-Agent nicht verfügbar: {agent}", + "status.ai.install": "Installieren", + "status.ai.installAgent": "{agent} installieren", + "status.ai.vaultGuidance": "Vault-Anleitung", + "status.ai.restoreGuidance": "Tolaria-KI-Anleitung wiederherstellen", + "status.ai.openOptions": "AI-Agent-Optionen öffnen", + "pulse.title": "Verlauf", + "pulse.today": "Heute", + "pulse.yesterday": "Gestern", + "pulse.commitCount": "{count} {label}", + "pulse.commitSingular": "Commit", + "pulse.commitPlural": "Commits", + "pulse.openOnGitHub": "Auf GitHub öffnen", + "pulse.expandFiles": "Dateien erweitern", + "pulse.collapseFiles": "Dateien einklappen", + "pulse.noActivity": "Noch keine Aktivität", + "pulse.emptyDescription": "Änderungen commiten, um den Verlauf Ihres Vaults anzuzeigen", + "pulse.retry": "Erneut versuchen", + "pulse.loadingActivity": "Aktivität wird geladen …", + "pulse.loading": "Wird geladen …", + "pulse.loadError": "Fehler beim Laden der Aktivität", + "command.switchLanguage": "Sprache auf {language} umstellen", + "locale.itIT": "Italienisch", + "locale.frFR": "Französisch", + "locale.deDE": "Deutsch", + "locale.ruRU": "Russisch", + "locale.esES": "Español (España)", + "locale.ptBR": "Português (Brasil)", + "locale.ptPT": "葡萄牙语(葡萄牙)", + "locale.es419": "西班牙语(拉丁美洲)", + "locale.zhCN": "简体中文", + "locale.jaJP": "日本語", + "locale.koKR": "Coreano" +} diff --git a/src/lib/locales/en.json b/src/lib/locales/en.json new file mode 100644 index 00000000..c4a1c05b --- /dev/null +++ b/src/lib/locales/en.json @@ -0,0 +1,405 @@ +{ + "command.noMatches": "No matching commands", + "command.palettePlaceholder": "Type a command...", + "command.footerNavigate": "↑↓ navigate", + "command.footerSelect": "↵ select", + "command.footerClose": "esc close", + "command.footerSend": "↵ send", + "command.aiMode": "{agent} mode", + "command.openSettings": "Open Settings", + "command.openSettings.keywords": "preferences config", + "command.openLanguageSettings": "Open Language Settings", + "command.openLanguageSettings.keywords": "language locale i18n internationalization localization english italian french german russian spanish portuguese chinese japanese korean 中文", + "command.useSystemLanguage": "Use System Language", + "command.openH1Setting": "Open H1 Auto-Rename Setting", + "command.contribute": "Contribute", + "command.checkUpdates": "Check for Updates", + "command.group.navigation": "Navigation", + "command.group.note": "Note", + "command.group.git": "Git", + "command.group.view": "View", + "command.group.settings": "Settings", + "command.navigation.searchNotes": "Search Notes", + "command.navigation.goAllNotes": "Go to All Notes", + "command.navigation.goArchived": "Go to Archived", + "command.navigation.goChanges": "Go to Changes", + "command.navigation.goHistory": "Go to History", + "command.navigation.goBack": "Go Back", + "command.navigation.goForward": "Go Forward", + "command.navigation.goInbox": "Go to Inbox", + "command.navigation.renameFolder": "Rename Folder", + "command.navigation.deleteFolder": "Delete Folder", + "command.navigation.showOpenNotes": "Show Open Notes", + "command.navigation.showArchivedNotes": "Show Archived Notes", + "command.navigation.listType": "List {type}", + "command.note.newNote": "New Note", + "command.note.newType": "New Type", + "command.note.newTypedNote": "New {type}", + "command.note.saveNote": "Save Note", + "command.note.findInNote": "Find in Note", + "command.note.replaceInNote": "Replace in Note", + "command.note.deleteNote": "Delete Note", + "command.note.archiveNote": "Archive Note", + "command.note.unarchiveNote": "Unarchive Note", + "command.note.addFavorite": "Add to Favorites", + "command.note.removeFavorite": "Remove from Favorites", + "command.note.markOrganized": "Mark as Organized", + "command.note.markUnorganized": "Mark as Unorganized", + "command.note.restoreDeleted": "Restore Deleted Note", + "command.note.setIcon": "Set Note Icon", + "command.note.removeIcon": "Remove Note Icon", + "command.note.changeType": "Change Note Type…", + "command.note.moveToFolder": "Move Note to Folder…", + "command.note.openNewWindow": "Open in New Window", + "command.git.initialize": "Initialize Git for Current Vault", + "command.git.commitPush": "Commit & Push", + "command.git.addRemote": "Add Remote to Current Vault", + "command.git.pull": "Pull from Remote", + "command.git.resolveConflicts": "Resolve Conflicts", + "command.git.viewChanges": "View Pending Changes", + "command.view.editorOnly": "Editor Only", + "command.view.editorNoteList": "Editor + Note List", + "command.view.fullLayout": "Full Layout", + "command.view.toggleProperties": "Toggle Properties Panel", + "command.view.toggleDiff": "Toggle Diff Mode", + "command.view.toggleRaw": "Toggle Raw Editor", + "command.view.leftLayout": "Use Left-Aligned Note Layout", + "command.view.centerLayout": "Use Centered Note Layout", + "command.view.toggleAiPanel": "Toggle AI Panel", + "command.view.newAiChat": "New AI chat", + "command.view.toggleBacklinks": "Toggle Backlinks", + "command.view.zoomIn": "Zoom In ({zoom}%)", + "command.view.zoomOut": "Zoom Out ({zoom}%)", + "command.view.resetZoom": "Reset Zoom", + "command.settings.createEmptyVault": "Create Empty Vault…", + "command.settings.openVault": "Open Vault…", + "command.settings.removeVault": "Remove Vault from List", + "command.settings.restoreGettingStarted": "Restore Getting Started Vault", + "command.settings.manageExternalAi": "Manage External AI Tools…", + "command.settings.setupExternalAi": "Set Up External AI Tools…", + "command.settings.reloadVault": "Reload Vault", + "command.settings.repairVault": "Repair Vault", + "command.ai.openAgents": "Open AI Agents", + "command.ai.restoreGuidance": "Restore Tolaria AI Guidance", + "command.ai.switchToAgent": "Switch AI Agent to {agent}", + "command.ai.switchDefault": "Switch Default AI Agent", + "command.ai.switchDefaultWithAgent": "Switch Default AI Agent ({agent})", + "settings.title": "Settings", + "settings.close": "Close settings", + "settings.sync.title": "Sync & Updates", + "settings.sync.description": "Configure background pulling and which update feed Tolaria follows. Stable only receives manually promoted releases, while Alpha follows every push to main.", + "settings.pullInterval": "Pull interval (minutes)", + "settings.releaseChannel": "Release channel", + "settings.releaseStable": "Stable", + "settings.releaseAlpha": "Alpha", + "settings.appearance.title": "Appearance", + "settings.appearance.description": "Choose the app color mode used for Tolaria chrome, editor surfaces, menus, and dialogs.", + "settings.theme.label": "Theme", + "settings.theme.light": "Light", + "settings.theme.dark": "Dark", + "settings.language.title": "Language", + "settings.language.description": "Choose the display language for Tolaria chrome. System follows macOS when that language is supported, with English as the fallback.", + "settings.language.label": "Display language", + "settings.language.system": "System ({language})", + "settings.language.summary": "Missing translations fall back to English so partially translated locales stay usable.", + "settings.autogit.title": "AutoGit", + "settings.autogit.description.enabled": "Automatically create conservative Git checkpoints after editing pauses or when the app is no longer active.", + "settings.autogit.description.disabled": "AutoGit is unavailable until the current vault is Git-enabled. Initialize Git for this vault first.", + "settings.autogit.enable": "Enable AutoGit", + "settings.autogit.enableDescription": "When enabled, Tolaria will commit and push saved local changes automatically after an idle pause or after the app becomes inactive.", + "settings.autogit.idleThreshold": "Idle threshold (seconds)", + "settings.autogit.inactiveThreshold": "Inactive-app grace period (seconds)", + "settings.titles.title": "Titles & Filenames", + "settings.titles.description": "Choose whether Tolaria automatically syncs untitled note filenames from the first H1 title.", + "settings.titles.autoRename": "Auto-rename untitled notes from first H1", + "settings.titles.autoRenameDescription": "When enabled, Tolaria renames untitled-note files as soon as the first H1 becomes a real title. Turn this off to keep the filename unchanged until you rename it manually from the breadcrumb bar.", + "settings.aiAgents.title": "AI Agents", + "settings.aiAgents.description": "Choose which CLI AI agent Tolaria uses in the AI panel and command palette.", + "settings.aiAgents.default": "Default AI agent", + "settings.aiAgents.installed": "installed", + "settings.aiAgents.missing": "missing", + "settings.aiAgents.ready": "{agent}{version} is ready to use.", + "settings.aiAgents.notInstalled": "{agent} is not installed yet. You can still select it now and install it later.", + "settings.workflow.title": "Workflow", + "settings.workflow.description": "Choose whether Tolaria shows the Inbox workflow, plus how it moves through items while you triage them.", + "settings.workflow.explicit": "Organize notes explicitly", + "settings.workflow.explicitDescription": "When enabled, an Inbox section shows unorganized notes, and a toggle lets you mark notes as organized.", + "settings.workflow.autoAdvance": "Auto-advance to next Inbox item", + "settings.workflow.autoAdvanceDescription": "When enabled, marking an Inbox note as organized immediately opens the next visible Inbox note.", + "settings.privacy.title": "Privacy & Telemetry", + "settings.privacy.description": "Anonymous data helps us fix bugs and improve Tolaria. No vault content, note titles, or file paths are ever sent.", + "settings.privacy.crashReporting": "Crash reporting", + "settings.privacy.crashReportingDescription": "Send anonymous error reports", + "settings.privacy.analytics": "Usage analytics", + "settings.privacy.analyticsDescription": "Share anonymous usage patterns", + "settings.footerShortcut": "⌘, to open settings", + "settings.cancel": "Cancel", + "settings.save": "Save", + "common.cancel": "Cancel", + "locale.en": "English", + "sidebar.nav.inbox": "Inbox", + "sidebar.nav.allNotes": "All Notes", + "sidebar.nav.archive": "Archive", + "sidebar.group.favorites": "FAVORITES", + "sidebar.group.views": "VIEWS", + "sidebar.group.types": "TYPES", + "sidebar.group.folders": "FOLDERS", + "sidebar.action.createView": "Create view", + "sidebar.action.editView": "Edit view", + "sidebar.action.deleteView": "Delete view", + "sidebar.action.customizeSections": "Customize sections", + "sidebar.action.renameSection": "Rename section…", + "sidebar.action.customizeIconColor": "Customize icon & color…", + "sidebar.action.createType": "Create new type", + "sidebar.action.collapse": "Collapse sidebar", + "sidebar.action.expand": "Expand sidebar", + "sidebar.action.createFolder": "Create folder", + "sidebar.action.renameFolder": "Rename folder", + "sidebar.action.deleteFolder": "Delete folder", + "sidebar.action.revealFolderMenu": "Reveal in Finder", + "sidebar.action.copyFolderPathMenu": "Copy folder path", + "sidebar.action.renameFolderMenu": "Rename folder...", + "sidebar.action.deleteFolderMenu": "Delete folder...", + "sidebar.folder.name": "Folder name", + "sidebar.folder.newName": "New folder name", + "sidebar.folder.expand": "Expand {name}", + "sidebar.folder.collapse": "Collapse {name}", + "sidebar.section.name": "Section name", + "sidebar.section.showInSidebar": "Show in sidebar", + "sidebar.section.toggle": "Toggle {label}", + "sidebar.disabled.comingSoon": "Coming soon", + "noteList.title.archive": "Archive", + "noteList.title.changes": "Changes", + "noteList.title.inbox": "Inbox", + "noteList.title.history": "History", + "noteList.title.view": "View", + "noteList.title.notes": "Notes", + "noteList.searchPlaceholder": "Search notes...", + "noteList.searchAction": "Search notes", + "noteList.createNote": "Create new note", + "noteList.empty.changesError": "Failed to load changes: {error}", + "noteList.empty.noChanges": "No pending changes", + "noteList.empty.noArchived": "No archived notes", + "noteList.empty.noMatching": "No matching notes", + "noteList.empty.allOrganized": "All notes are organized", + "noteList.empty.noNotes": "No notes found", + "noteList.empty.noMatchingItems": "No matching items", + "noteList.empty.noRelatedItems": "No related items", + "noteList.sort.modified": "Modified", + "noteList.sort.created": "Created", + "noteList.sort.title": "Title", + "noteList.sort.status": "Status", + "noteList.sort.by": "Sort by {label}", + "noteList.sort.menu": "Sort {label}", + "noteList.sort.ascending": "Ascending", + "noteList.sort.descending": "Descending", + "noteList.filter.open": "Open", + "noteList.filter.archived": "Archived", + "noteList.filter.week": "Week", + "noteList.filter.month": "Month", + "noteList.filter.all": "All", + "noteList.properties.customizeColumns": "Customize columns", + "noteList.properties.customizeAllColumns": "Customize All Notes columns", + "noteList.properties.customizeInboxColumns": "Customize Inbox columns", + "noteList.properties.customizeViewColumns": "Customize {name} columns", + "noteList.properties.showInNoteList": "Show in note list", + "noteList.properties.searchPlaceholder": "Search properties...", + "noteList.properties.searchLabel": "Search note-list properties", + "noteList.properties.noMatches": "No properties match this search.", + "noteList.properties.reorder": "Reorder {name}", + "noteList.changes.restoreNote": "Restore note", + "noteList.changes.discardChanges": "Discard changes", + "noteList.changes.restoreDescription": "Restore {file} from Git?", + "noteList.changes.discardDescription": "Discard changes to {file}? This cannot be undone.", + "noteList.changes.thisFile": "this file", + "noteList.changes.restore": "Restore", + "noteList.changes.discard": "Discard", + "noteList.changes.cancel": "Cancel", + "editor.empty.selectNote": "Select a note to start editing", + "editor.empty.shortcuts": "{quickOpen} to search · {newNote} to create", + "editor.raw.label": "Raw editor", + "editor.find.findLabel": "Find", + "editor.find.findPlaceholder": "Find", + "editor.find.replaceLabel": "Replace", + "editor.find.replacePlaceholder": "Replace", + "editor.find.matchCount": "{current} / {total}", + "editor.find.noMatches": "No matches", + "editor.find.invalidRegex": "Invalid regex", + "editor.find.regexMustMatchText": "Regex must match text", + "editor.find.previousMatch": "Previous match", + "editor.find.nextMatch": "Next match", + "editor.find.showReplace": "Show replace", + "editor.find.hideReplace": "Hide replace", + "editor.find.regex": "Use regular expression", + "editor.find.matchCase": "Match case", + "editor.find.close": "Close find", + "editor.find.replace": "Replace", + "editor.find.replaceAll": "All", + "editor.toolbar.rawReturn": "Return to the editor", + "editor.toolbar.rawOpen": "Open the raw editor", + "editor.toolbar.centerLayout": "Switch to centered note layout", + "editor.toolbar.leftLayout": "Switch to left-aligned note layout", + "editor.toolbar.removeFavorite": "Remove from favorites", + "editor.toolbar.addFavorite": "Add to favorites", + "editor.toolbar.markUnorganized": "Set note as not organized", + "editor.toolbar.markOrganized": "Set note as organized", + "editor.toolbar.noDiff": "No diff is available yet", + "editor.toolbar.loadingDiff": "Loading the diff", + "editor.toolbar.showDiff": "Show the current diff", + "editor.toolbar.openAi": "Open the AI panel", + "editor.toolbar.closeAi": "Close the AI panel", + "editor.toolbar.restoreArchived": "Restore this archived note", + "editor.toolbar.archive": "Archive this note", + "editor.toolbar.delete": "Delete this note", + "editor.toolbar.revealFile": "Reveal in Finder", + "editor.toolbar.copyFilePath": "Copy file path", + "editor.toolbar.openProperties": "Open the properties panel", + "editor.filename.rename": "Rename filename", + "editor.filename.renameToTitle": "Rename the file to match the title", + "editor.filename.trigger": "Filename {filename}. Press Enter to rename", + "editor.banner.archived": "Archived", + "editor.banner.unarchive": "Unarchive", + "editor.banner.conflict": "This note has a merge conflict", + "editor.banner.keepMine": "Keep mine", + "editor.banner.keepMineTooltip": "Keep my local version", + "editor.banner.keepTheirs": "Keep theirs", + "editor.banner.keepTheirsTooltip": "Keep the remote version", + "inspector.title.properties": "Properties", + "inspector.title.propertiesShortcut": "Properties (⌘⇧I)", + "inspector.title.closePropertiesShortcut": "Close Properties (⌘⇧I)", + "inspector.empty.noNoteSelected": "No note selected", + "inspector.empty.noProperties": "This note has no properties yet", + "inspector.empty.initializeProperties": "Initialize properties", + "inspector.empty.invalidProperties": "Invalid properties", + "inspector.empty.fixInEditor": "Fix in editor", + "inspector.properties.addProperty": "Add property", + "inspector.properties.deleteProperty": "Delete property", + "inspector.properties.none": "None", + "inspector.properties.missingType": "Missing type", + "inspector.properties.missingTypeAria": "Missing type {type}. Click to create this type.", + "inspector.properties.searchTypes": "Search types...", + "inspector.properties.noMatchingTypes": "No matching types", + "inspector.properties.yes": "Yes", + "inspector.properties.no": "No", + "inspector.properties.pickDate": "Pick a date…", + "inspector.properties.valuePlaceholder": "Value", + "inspector.properties.propertyName": "Property name", + "inspector.relationship.add": "Add", + "inspector.relationship.addRelationship": "+ Add relationship", + "inspector.relationship.name": "Relationship name", + "inspector.relationship.noteTitle": "Note title", + "inspector.relationship.createAndOpen": "Create & open", + "inspector.info.title": "Info", + "inspector.info.modified": "Modified", + "inspector.info.created": "Created", + "inspector.info.words": "Words", + "inspector.info.size": "Size", + "update.available": "is available", + "update.releaseNotes": "Release Notes", + "update.updateNow": "Update Now", + "update.dismiss": "Dismiss", + "update.downloading": "Downloading Tolaria {version}...", + "update.readyRestart": "is ready - restart to apply", + "update.restartNow": "Restart Now", + "status.update.check": "Check for updates", + "status.zoom.reset": "Reset the zoom level", + "status.feedback.contribute": "Contribute to Tolaria", + "status.feedback.label": "Contribute", + "status.theme.light": "Switch to light mode", + "status.theme.dark": "Switch to dark mode", + "status.settings.open": "Open settings", + "status.build.unknown": "b?", + "status.vault.switch": "Switch vault", + "status.vault.default": "Vault", + "status.vault.createEmpty": "Create empty vault", + "status.vault.openLocal": "Open local folder", + "status.vault.cloneGit": "Clone Git repo", + "status.vault.cloneGettingStarted": "Clone Getting Started Vault", + "status.vault.notFound": "Vault not found: {path}", + "status.vault.remove": "Remove {label} from list", + "status.remote.noneConfigured": "No remote configured", + "status.remote.inSync": "In sync with remote", + "status.remote.aheadTitle": "{count} commit{plural} ahead of remote", + "status.remote.behindTitle": "{count} commit{plural} behind remote", + "status.remote.ahead": "{count} ahead", + "status.remote.behind": "{count} behind", + "status.remote.add": "Add a remote to this vault", + "status.remote.none": "No remote", + "status.remote.noneDescription": "This git vault has no remote configured. Commits stay local until you add one.", + "status.sync.syncing": "Syncing...", + "status.sync.conflict": "Conflict", + "status.sync.failed": "Sync failed", + "status.sync.pullRequired": "Pull required", + "status.sync.notSynced": "Not synced", + "status.sync.justNow": "Synced just now", + "status.sync.minutesAgo": "Synced {minutes}m ago", + "status.sync.resolveConflicts": "Resolve merge conflicts", + "status.sync.inProgress": "Sync in progress", + "status.sync.pullAndPush": "Pull from remote and push", + "status.sync.retry": "Retry sync", + "status.sync.now": "Sync now", + "status.sync.synced": "Synced", + "status.sync.conflicts": "Conflicts", + "status.sync.error": "Error", + "status.sync.status": "Status: {status}", + "status.sync.pull": "Pull", + "status.conflict.count": "{count} conflict{plural}", + "status.offline.title": "No internet connection", + "status.offline.label": "Offline", + "status.changes.view": "View pending changes", + "status.changes.label": "Changes", + "status.commit.local": "Commit changes locally", + "status.commit.push": "Commit and push changes", + "status.commit.label": "Commit", + "status.commit.openOnGitHub": "Open commit {hash} on GitHub", + "status.git.disabledTooltip": "Git is disabled for this vault. Initialize Git to enable history, sync, commits, and change views.", + "status.git.disabled": "Git disabled", + "status.history.onlyGit": "History is only available for git-enabled vaults", + "status.history.open": "Open change history", + "status.history.label": "History", + "status.mcp.notConnected": "External AI tools not connected — click to set up", + "status.mcp.unknown": "MCP status unknown", + "status.claude.missing": "Claude Code missing", + "status.claude.label": "Claude Code", + "status.claude.install": "Claude Code not found — click to install", + "status.ai.noAgents": "No AI agents detected", + "status.ai.noAgentsTooltip": "No AI agents detected — click for setup details", + "status.ai.selectedMissing": "{agent} is selected but not installed — click for setup details", + "status.ai.defaultAgent": "Default AI agent: {agent}{version}", + "status.ai.restoreDetails": "{base}. {summary} — click for restore details", + "status.ai.withGuidance": "{base}. {summary}", + "status.ai.active": "Active AI agent: {agent}", + "status.ai.unavailable": "Selected AI agent unavailable: {agent}", + "status.ai.install": "Install", + "status.ai.installAgent": "Install {agent}", + "status.ai.vaultGuidance": "Vault guidance", + "status.ai.restoreGuidance": "Restore Tolaria AI Guidance", + "status.ai.openOptions": "Open AI agent options", + "pulse.title": "History", + "pulse.today": "Today", + "pulse.yesterday": "Yesterday", + "pulse.commitCount": "{count} {label}", + "pulse.commitSingular": "commit", + "pulse.commitPlural": "commits", + "pulse.openOnGitHub": "Open on GitHub", + "pulse.expandFiles": "Expand files", + "pulse.collapseFiles": "Collapse files", + "pulse.noActivity": "No activity yet", + "pulse.emptyDescription": "Commit changes to see your vault's history", + "pulse.retry": "Retry", + "pulse.loadingActivity": "Loading activity…", + "pulse.loading": "Loading…", + "pulse.loadError": "Failed to load activity", + "command.switchLanguage": "Switch Language to {language}", + "locale.itIT": "Italian", + "locale.frFR": "French", + "locale.deDE": "German", + "locale.ruRU": "Russian", + "locale.esES": "Spanish (Spain)", + "locale.ptBR": "Portuguese (Brazil)", + "locale.ptPT": "Portuguese (Portugal)", + "locale.es419": "Spanish (Latin America)", + "locale.zhCN": "Simplified Chinese", + "locale.jaJP": "Japanese", + "locale.koKR": "Korean" +} diff --git a/src/lib/locales/en.ts b/src/lib/locales/en.ts deleted file mode 100644 index 6feef184..00000000 --- a/src/lib/locales/en.ts +++ /dev/null @@ -1,408 +0,0 @@ -export const EN_TRANSLATIONS = { - 'command.noMatches': 'No matching commands', - 'command.palettePlaceholder': 'Type a command...', - 'command.footerNavigate': '↑↓ navigate', - 'command.footerSelect': '↵ select', - 'command.footerClose': 'esc close', - 'command.footerSend': '↵ send', - 'command.aiMode': '{agent} mode', - 'command.openSettings': 'Open Settings', - 'command.openSettings.keywords': 'preferences config', - 'command.openLanguageSettings': 'Open Language Settings', - 'command.openLanguageSettings.keywords': 'language locale i18n internationalization localization chinese english 中文', - 'command.useSystemLanguage': 'Use System Language', - 'command.switchToEnglish': 'Switch Language to English', - 'command.switchToChinese': 'Switch Language to Simplified Chinese', - 'command.openH1Setting': 'Open H1 Auto-Rename Setting', - 'command.contribute': 'Contribute', - 'command.checkUpdates': 'Check for Updates', - 'command.group.navigation': 'Navigation', - 'command.group.note': 'Note', - 'command.group.git': 'Git', - 'command.group.view': 'View', - 'command.group.settings': 'Settings', - 'command.navigation.searchNotes': 'Search Notes', - 'command.navigation.goAllNotes': 'Go to All Notes', - 'command.navigation.goArchived': 'Go to Archived', - 'command.navigation.goChanges': 'Go to Changes', - 'command.navigation.goHistory': 'Go to History', - 'command.navigation.goBack': 'Go Back', - 'command.navigation.goForward': 'Go Forward', - 'command.navigation.goInbox': 'Go to Inbox', - 'command.navigation.renameFolder': 'Rename Folder', - 'command.navigation.deleteFolder': 'Delete Folder', - 'command.navigation.showOpenNotes': 'Show Open Notes', - 'command.navigation.showArchivedNotes': 'Show Archived Notes', - 'command.navigation.listType': 'List {type}', - 'command.note.newNote': 'New Note', - 'command.note.newType': 'New Type', - 'command.note.newTypedNote': 'New {type}', - 'command.note.saveNote': 'Save Note', - 'command.note.findInNote': 'Find in Note', - 'command.note.replaceInNote': 'Replace in Note', - 'command.note.deleteNote': 'Delete Note', - 'command.note.archiveNote': 'Archive Note', - 'command.note.unarchiveNote': 'Unarchive Note', - 'command.note.addFavorite': 'Add to Favorites', - 'command.note.removeFavorite': 'Remove from Favorites', - 'command.note.markOrganized': 'Mark as Organized', - 'command.note.markUnorganized': 'Mark as Unorganized', - 'command.note.restoreDeleted': 'Restore Deleted Note', - 'command.note.setIcon': 'Set Note Icon', - 'command.note.removeIcon': 'Remove Note Icon', - 'command.note.changeType': 'Change Note Type…', - 'command.note.moveToFolder': 'Move Note to Folder…', - 'command.note.openNewWindow': 'Open in New Window', - 'command.git.initialize': 'Initialize Git for Current Vault', - 'command.git.commitPush': 'Commit & Push', - 'command.git.addRemote': 'Add Remote to Current Vault', - 'command.git.pull': 'Pull from Remote', - 'command.git.resolveConflicts': 'Resolve Conflicts', - 'command.git.viewChanges': 'View Pending Changes', - 'command.view.editorOnly': 'Editor Only', - 'command.view.editorNoteList': 'Editor + Note List', - 'command.view.fullLayout': 'Full Layout', - 'command.view.toggleProperties': 'Toggle Properties Panel', - 'command.view.toggleDiff': 'Toggle Diff Mode', - 'command.view.toggleRaw': 'Toggle Raw Editor', - 'command.view.leftLayout': 'Use Left-Aligned Note Layout', - 'command.view.centerLayout': 'Use Centered Note Layout', - 'command.view.toggleAiPanel': 'Toggle AI Panel', - 'command.view.newAiChat': 'New AI chat', - 'command.view.toggleBacklinks': 'Toggle Backlinks', - 'command.view.zoomIn': 'Zoom In ({zoom}%)', - 'command.view.zoomOut': 'Zoom Out ({zoom}%)', - 'command.view.resetZoom': 'Reset Zoom', - 'command.settings.createEmptyVault': 'Create Empty Vault…', - 'command.settings.openVault': 'Open Vault…', - 'command.settings.removeVault': 'Remove Vault from List', - 'command.settings.restoreGettingStarted': 'Restore Getting Started Vault', - 'command.settings.manageExternalAi': 'Manage External AI Tools…', - 'command.settings.setupExternalAi': 'Set Up External AI Tools…', - 'command.settings.reloadVault': 'Reload Vault', - 'command.settings.repairVault': 'Repair Vault', - 'command.ai.openAgents': 'Open AI Agents', - 'command.ai.restoreGuidance': 'Restore Tolaria AI Guidance', - 'command.ai.switchToAgent': 'Switch AI Agent to {agent}', - 'command.ai.switchDefault': 'Switch Default AI Agent', - 'command.ai.switchDefaultWithAgent': 'Switch Default AI Agent ({agent})', - - 'settings.title': 'Settings', - 'settings.close': 'Close settings', - 'settings.sync.title': 'Sync & Updates', - 'settings.sync.description': 'Configure background pulling and which update feed Tolaria follows. Stable only receives manually promoted releases, while Alpha follows every push to main.', - 'settings.pullInterval': 'Pull interval (minutes)', - 'settings.releaseChannel': 'Release channel', - 'settings.releaseStable': 'Stable', - 'settings.releaseAlpha': 'Alpha', - 'settings.appearance.title': 'Appearance', - 'settings.appearance.description': 'Choose the app color mode used for Tolaria chrome, editor surfaces, menus, and dialogs.', - 'settings.theme.label': 'Theme', - 'settings.theme.light': 'Light', - 'settings.theme.dark': 'Dark', - 'settings.language.title': 'Language', - 'settings.language.description': 'Choose the display language for Tolaria chrome. System follows macOS when that language is supported, with English as the fallback.', - 'settings.language.label': 'Display language', - 'settings.language.system': 'System ({language})', - 'settings.language.en': 'English', - 'settings.language.zhHans': 'Simplified Chinese', - 'settings.language.summary': 'Missing translations fall back to English so partially translated locales stay usable.', - 'settings.autogit.title': 'AutoGit', - 'settings.autogit.description.enabled': 'Automatically create conservative Git checkpoints after editing pauses or when the app is no longer active.', - 'settings.autogit.description.disabled': 'AutoGit is unavailable until the current vault is Git-enabled. Initialize Git for this vault first.', - 'settings.autogit.enable': 'Enable AutoGit', - 'settings.autogit.enableDescription': 'When enabled, Tolaria will commit and push saved local changes automatically after an idle pause or after the app becomes inactive.', - 'settings.autogit.idleThreshold': 'Idle threshold (seconds)', - 'settings.autogit.inactiveThreshold': 'Inactive-app grace period (seconds)', - 'settings.titles.title': 'Titles & Filenames', - 'settings.titles.description': 'Choose whether Tolaria automatically syncs untitled note filenames from the first H1 title.', - 'settings.titles.autoRename': 'Auto-rename untitled notes from first H1', - 'settings.titles.autoRenameDescription': 'When enabled, Tolaria renames untitled-note files as soon as the first H1 becomes a real title. Turn this off to keep the filename unchanged until you rename it manually from the breadcrumb bar.', - 'settings.aiAgents.title': 'AI Agents', - 'settings.aiAgents.description': 'Choose which CLI AI agent Tolaria uses in the AI panel and command palette.', - 'settings.aiAgents.default': 'Default AI agent', - 'settings.aiAgents.installed': 'installed', - 'settings.aiAgents.missing': 'missing', - 'settings.aiAgents.ready': '{agent}{version} is ready to use.', - 'settings.aiAgents.notInstalled': '{agent} is not installed yet. You can still select it now and install it later.', - 'settings.workflow.title': 'Workflow', - 'settings.workflow.description': 'Choose whether Tolaria shows the Inbox workflow, plus how it moves through items while you triage them.', - 'settings.workflow.explicit': 'Organize notes explicitly', - 'settings.workflow.explicitDescription': 'When enabled, an Inbox section shows unorganized notes, and a toggle lets you mark notes as organized.', - 'settings.workflow.autoAdvance': 'Auto-advance to next Inbox item', - 'settings.workflow.autoAdvanceDescription': 'When enabled, marking an Inbox note as organized immediately opens the next visible Inbox note.', - 'settings.privacy.title': 'Privacy & Telemetry', - 'settings.privacy.description': 'Anonymous data helps us fix bugs and improve Tolaria. No vault content, note titles, or file paths are ever sent.', - 'settings.privacy.crashReporting': 'Crash reporting', - 'settings.privacy.crashReportingDescription': 'Send anonymous error reports', - 'settings.privacy.analytics': 'Usage analytics', - 'settings.privacy.analyticsDescription': 'Share anonymous usage patterns', - 'settings.footerShortcut': '⌘, to open settings', - 'settings.cancel': 'Cancel', - 'settings.save': 'Save', - - 'common.cancel': 'Cancel', - - 'locale.en': 'English', - 'locale.zhHans': 'Simplified Chinese', - - 'sidebar.nav.inbox': 'Inbox', - 'sidebar.nav.allNotes': 'All Notes', - 'sidebar.nav.archive': 'Archive', - 'sidebar.group.favorites': 'FAVORITES', - 'sidebar.group.views': 'VIEWS', - 'sidebar.group.types': 'TYPES', - 'sidebar.group.folders': 'FOLDERS', - 'sidebar.action.createView': 'Create view', - 'sidebar.action.editView': 'Edit view', - 'sidebar.action.deleteView': 'Delete view', - 'sidebar.action.customizeSections': 'Customize sections', - 'sidebar.action.renameSection': 'Rename section…', - 'sidebar.action.customizeIconColor': 'Customize icon & color…', - 'sidebar.action.createType': 'Create new type', - 'sidebar.action.collapse': 'Collapse sidebar', - 'sidebar.action.expand': 'Expand sidebar', - 'sidebar.action.createFolder': 'Create folder', - 'sidebar.action.renameFolder': 'Rename folder', - 'sidebar.action.deleteFolder': 'Delete folder', - 'sidebar.action.revealFolderMenu': 'Reveal in Finder', - 'sidebar.action.copyFolderPathMenu': 'Copy folder path', - 'sidebar.action.renameFolderMenu': 'Rename folder...', - 'sidebar.action.deleteFolderMenu': 'Delete folder...', - 'sidebar.folder.name': 'Folder name', - 'sidebar.folder.newName': 'New folder name', - 'sidebar.folder.expand': 'Expand {name}', - 'sidebar.folder.collapse': 'Collapse {name}', - 'sidebar.section.name': 'Section name', - 'sidebar.section.showInSidebar': 'Show in sidebar', - 'sidebar.section.toggle': 'Toggle {label}', - 'sidebar.disabled.comingSoon': 'Coming soon', - - 'noteList.title.archive': 'Archive', - 'noteList.title.changes': 'Changes', - 'noteList.title.inbox': 'Inbox', - 'noteList.title.history': 'History', - 'noteList.title.view': 'View', - 'noteList.title.notes': 'Notes', - 'noteList.searchPlaceholder': 'Search notes...', - 'noteList.searchAction': 'Search notes', - 'noteList.createNote': 'Create new note', - 'noteList.empty.changesError': 'Failed to load changes: {error}', - 'noteList.empty.noChanges': 'No pending changes', - 'noteList.empty.noArchived': 'No archived notes', - 'noteList.empty.noMatching': 'No matching notes', - 'noteList.empty.allOrganized': 'All notes are organized', - 'noteList.empty.noNotes': 'No notes found', - 'noteList.empty.noMatchingItems': 'No matching items', - 'noteList.empty.noRelatedItems': 'No related items', - 'noteList.sort.modified': 'Modified', - 'noteList.sort.created': 'Created', - 'noteList.sort.title': 'Title', - 'noteList.sort.status': 'Status', - 'noteList.sort.by': 'Sort by {label}', - 'noteList.sort.menu': 'Sort {label}', - 'noteList.sort.ascending': 'Ascending', - 'noteList.sort.descending': 'Descending', - 'noteList.filter.open': 'Open', - 'noteList.filter.archived': 'Archived', - 'noteList.filter.week': 'Week', - 'noteList.filter.month': 'Month', - 'noteList.filter.all': 'All', - 'noteList.properties.customizeColumns': 'Customize columns', - 'noteList.properties.customizeAllColumns': 'Customize All Notes columns', - 'noteList.properties.customizeInboxColumns': 'Customize Inbox columns', - 'noteList.properties.customizeViewColumns': 'Customize {name} columns', - 'noteList.properties.showInNoteList': 'Show in note list', - 'noteList.properties.searchPlaceholder': 'Search properties...', - 'noteList.properties.searchLabel': 'Search note-list properties', - 'noteList.properties.noMatches': 'No properties match this search.', - 'noteList.properties.reorder': 'Reorder {name}', - 'noteList.changes.restoreNote': 'Restore note', - 'noteList.changes.discardChanges': 'Discard changes', - 'noteList.changes.restoreDescription': 'Restore {file} from Git?', - 'noteList.changes.discardDescription': 'Discard changes to {file}? This cannot be undone.', - 'noteList.changes.thisFile': 'this file', - 'noteList.changes.restore': 'Restore', - 'noteList.changes.discard': 'Discard', - 'noteList.changes.cancel': 'Cancel', - - 'editor.empty.selectNote': 'Select a note to start editing', - 'editor.empty.shortcuts': '{quickOpen} to search · {newNote} to create', - 'editor.raw.label': 'Raw editor', - 'editor.find.findLabel': 'Find', - 'editor.find.findPlaceholder': 'Find', - 'editor.find.replaceLabel': 'Replace', - 'editor.find.replacePlaceholder': 'Replace', - 'editor.find.matchCount': '{current} / {total}', - 'editor.find.noMatches': 'No matches', - 'editor.find.invalidRegex': 'Invalid regex', - 'editor.find.regexMustMatchText': 'Regex must match text', - 'editor.find.previousMatch': 'Previous match', - 'editor.find.nextMatch': 'Next match', - 'editor.find.showReplace': 'Show replace', - 'editor.find.hideReplace': 'Hide replace', - 'editor.find.regex': 'Use regular expression', - 'editor.find.matchCase': 'Match case', - 'editor.find.close': 'Close find', - 'editor.find.replace': 'Replace', - 'editor.find.replaceAll': 'All', - 'editor.toolbar.rawReturn': 'Return to the editor', - 'editor.toolbar.rawOpen': 'Open the raw editor', - 'editor.toolbar.centerLayout': 'Switch to centered note layout', - 'editor.toolbar.leftLayout': 'Switch to left-aligned note layout', - 'editor.toolbar.removeFavorite': 'Remove from favorites', - 'editor.toolbar.addFavorite': 'Add to favorites', - 'editor.toolbar.markUnorganized': 'Set note as not organized', - 'editor.toolbar.markOrganized': 'Set note as organized', - 'editor.toolbar.noDiff': 'No diff is available yet', - 'editor.toolbar.loadingDiff': 'Loading the diff', - 'editor.toolbar.showDiff': 'Show the current diff', - 'editor.toolbar.openAi': 'Open the AI panel', - 'editor.toolbar.closeAi': 'Close the AI panel', - 'editor.toolbar.restoreArchived': 'Restore this archived note', - 'editor.toolbar.archive': 'Archive this note', - 'editor.toolbar.delete': 'Delete this note', - 'editor.toolbar.revealFile': 'Reveal in Finder', - 'editor.toolbar.copyFilePath': 'Copy file path', - 'editor.toolbar.openProperties': 'Open the properties panel', - 'editor.filename.rename': 'Rename filename', - 'editor.filename.renameToTitle': 'Rename the file to match the title', - 'editor.filename.trigger': 'Filename {filename}. Press Enter to rename', - 'editor.banner.archived': 'Archived', - 'editor.banner.unarchive': 'Unarchive', - 'editor.banner.conflict': 'This note has a merge conflict', - 'editor.banner.keepMine': 'Keep mine', - 'editor.banner.keepMineTooltip': 'Keep my local version', - 'editor.banner.keepTheirs': 'Keep theirs', - 'editor.banner.keepTheirsTooltip': 'Keep the remote version', - - 'inspector.title.properties': 'Properties', - 'inspector.title.propertiesShortcut': 'Properties (⌘⇧I)', - 'inspector.title.closePropertiesShortcut': 'Close Properties (⌘⇧I)', - 'inspector.empty.noNoteSelected': 'No note selected', - 'inspector.empty.noProperties': 'This note has no properties yet', - 'inspector.empty.initializeProperties': 'Initialize properties', - 'inspector.empty.invalidProperties': 'Invalid properties', - 'inspector.empty.fixInEditor': 'Fix in editor', - 'inspector.properties.addProperty': 'Add property', - 'inspector.properties.deleteProperty': 'Delete property', - 'inspector.properties.none': 'None', - 'inspector.properties.missingType': 'Missing type', - 'inspector.properties.missingTypeAria': 'Missing type {type}. Click to create this type.', - 'inspector.properties.searchTypes': 'Search types...', - 'inspector.properties.noMatchingTypes': 'No matching types', - 'inspector.properties.yes': 'Yes', - 'inspector.properties.no': 'No', - 'inspector.properties.pickDate': 'Pick a date…', - 'inspector.properties.valuePlaceholder': 'Value', - 'inspector.properties.propertyName': 'Property name', - 'inspector.relationship.add': 'Add', - 'inspector.relationship.addRelationship': '+ Add relationship', - 'inspector.relationship.name': 'Relationship name', - 'inspector.relationship.noteTitle': 'Note title', - 'inspector.relationship.createAndOpen': 'Create & open', - 'inspector.info.title': 'Info', - 'inspector.info.modified': 'Modified', - 'inspector.info.created': 'Created', - 'inspector.info.words': 'Words', - 'inspector.info.size': 'Size', - - 'update.available': 'is available', - 'update.releaseNotes': 'Release Notes', - 'update.updateNow': 'Update Now', - 'update.dismiss': 'Dismiss', - 'update.downloading': 'Downloading Tolaria {version}...', - 'update.readyRestart': 'is ready - restart to apply', - 'update.restartNow': 'Restart Now', - - 'status.update.check': 'Check for updates', - 'status.zoom.reset': 'Reset the zoom level', - 'status.feedback.contribute': 'Contribute to Tolaria', - 'status.feedback.label': 'Contribute', - 'status.theme.light': 'Switch to light mode', - 'status.theme.dark': 'Switch to dark mode', - 'status.settings.open': 'Open settings', - 'status.build.unknown': 'b?', - 'status.vault.switch': 'Switch vault', - 'status.vault.default': 'Vault', - 'status.vault.createEmpty': 'Create empty vault', - 'status.vault.openLocal': 'Open local folder', - 'status.vault.cloneGit': 'Clone Git repo', - 'status.vault.cloneGettingStarted': 'Clone Getting Started Vault', - 'status.vault.notFound': 'Vault not found: {path}', - 'status.vault.remove': 'Remove {label} from list', - 'status.remote.noneConfigured': 'No remote configured', - 'status.remote.inSync': 'In sync with remote', - 'status.remote.aheadTitle': '{count} commit{plural} ahead of remote', - 'status.remote.behindTitle': '{count} commit{plural} behind remote', - 'status.remote.ahead': '{count} ahead', - 'status.remote.behind': '{count} behind', - 'status.remote.add': 'Add a remote to this vault', - 'status.remote.none': 'No remote', - 'status.remote.noneDescription': 'This git vault has no remote configured. Commits stay local until you add one.', - 'status.sync.syncing': 'Syncing...', - 'status.sync.conflict': 'Conflict', - 'status.sync.failed': 'Sync failed', - 'status.sync.pullRequired': 'Pull required', - 'status.sync.notSynced': 'Not synced', - 'status.sync.justNow': 'Synced just now', - 'status.sync.minutesAgo': 'Synced {minutes}m ago', - 'status.sync.resolveConflicts': 'Resolve merge conflicts', - 'status.sync.inProgress': 'Sync in progress', - 'status.sync.pullAndPush': 'Pull from remote and push', - 'status.sync.retry': 'Retry sync', - 'status.sync.now': 'Sync now', - 'status.sync.synced': 'Synced', - 'status.sync.conflicts': 'Conflicts', - 'status.sync.error': 'Error', - 'status.sync.status': 'Status: {status}', - 'status.sync.pull': 'Pull', - 'status.conflict.count': '{count} conflict{plural}', - 'status.offline.title': 'No internet connection', - 'status.offline.label': 'Offline', - 'status.changes.view': 'View pending changes', - 'status.changes.label': 'Changes', - 'status.commit.local': 'Commit changes locally', - 'status.commit.push': 'Commit and push changes', - 'status.commit.label': 'Commit', - 'status.commit.openOnGitHub': 'Open commit {hash} on GitHub', - 'status.git.disabledTooltip': 'Git is disabled for this vault. Initialize Git to enable history, sync, commits, and change views.', - 'status.git.disabled': 'Git disabled', - 'status.history.onlyGit': 'History is only available for git-enabled vaults', - 'status.history.open': 'Open change history', - 'status.history.label': 'History', - 'status.mcp.notConnected': 'External AI tools not connected — click to set up', - 'status.mcp.unknown': 'MCP status unknown', - 'status.claude.missing': 'Claude Code missing', - 'status.claude.label': 'Claude Code', - 'status.claude.install': 'Claude Code not found — click to install', - 'status.ai.noAgents': 'No AI agents detected', - 'status.ai.noAgentsTooltip': 'No AI agents detected — click for setup details', - 'status.ai.selectedMissing': '{agent} is selected but not installed — click for setup details', - 'status.ai.defaultAgent': 'Default AI agent: {agent}{version}', - 'status.ai.restoreDetails': '{base}. {summary} — click for restore details', - 'status.ai.withGuidance': '{base}. {summary}', - 'status.ai.active': 'Active AI agent: {agent}', - 'status.ai.unavailable': 'Selected AI agent unavailable: {agent}', - 'status.ai.install': 'Install', - 'status.ai.installAgent': 'Install {agent}', - 'status.ai.vaultGuidance': 'Vault guidance', - 'status.ai.restoreGuidance': 'Restore Tolaria AI Guidance', - 'status.ai.openOptions': 'Open AI agent options', - - 'pulse.title': 'History', - 'pulse.today': 'Today', - 'pulse.yesterday': 'Yesterday', - 'pulse.commitCount': '{count} {label}', - 'pulse.commitSingular': 'commit', - 'pulse.commitPlural': 'commits', - 'pulse.openOnGitHub': 'Open on GitHub', - 'pulse.expandFiles': 'Expand files', - 'pulse.collapseFiles': 'Collapse files', - 'pulse.noActivity': 'No activity yet', - 'pulse.emptyDescription': "Commit changes to see your vault's history", - 'pulse.retry': 'Retry', - 'pulse.loadingActivity': 'Loading activity…', - 'pulse.loading': 'Loading…', - 'pulse.loadError': 'Failed to load activity', -} as const diff --git a/src/lib/locales/es-419.json b/src/lib/locales/es-419.json new file mode 100644 index 00000000..c535c732 --- /dev/null +++ b/src/lib/locales/es-419.json @@ -0,0 +1,405 @@ +{ + "command.noMatches": "No hay comandos que coincidan", + "command.palettePlaceholder": "Escriba un comando...", + "command.footerNavigate": "↑↓ navegar", + "command.footerSelect": "↵ seleccionar", + "command.footerClose": "esc cerrar", + "command.footerSend": "↵ enviar", + "command.aiMode": "Modo {agent}", + "command.openSettings": "Abrir Configuración", + "command.openSettings.keywords": "configuración de preferencias", + "command.openLanguageSettings": "Abrir la configuración de idioma", + "command.openLanguageSettings.keywords": "idioma configuración regional i18n internacionalización localización inglés italiano francés alemán ruso español portugués chino japonés coreano 中文", + "command.useSystemLanguage": "Usar el idioma del sistema", + "command.openH1Setting": "Abrir la configuración de renombrado automático de H1", + "command.contribute": "Contribuir", + "command.checkUpdates": "Buscar actualizaciones", + "command.group.navigation": "Navegación", + "command.group.note": "Nota", + "command.group.git": "Git", + "command.group.view": "Ver", + "command.group.settings": "Configuración", + "command.navigation.searchNotes": "Buscar notas", + "command.navigation.goAllNotes": "Ir a Todas las notas", + "command.navigation.goArchived": "Ir a Archivadas", + "command.navigation.goChanges": "Ir a Cambios", + "command.navigation.goHistory": "Ir a Historial", + "command.navigation.goBack": "Volver", + "command.navigation.goForward": "Avanzar", + "command.navigation.goInbox": "Ir a la bandeja de entrada", + "command.navigation.renameFolder": "Cambiar el nombre de la carpeta", + "command.navigation.deleteFolder": "Eliminar carpeta", + "command.navigation.showOpenNotes": "Mostrar notas abiertas", + "command.navigation.showArchivedNotes": "Mostrar notas archivadas", + "command.navigation.listType": "Lista {type}", + "command.note.newNote": "Nueva nota", + "command.note.newType": "Nuevo tipo", + "command.note.newTypedNote": "Nuevo {type}", + "command.note.saveNote": "Guardar nota", + "command.note.findInNote": "Buscar en la nota", + "command.note.replaceInNote": "Reemplazar en la nota", + "command.note.deleteNote": "Eliminar nota", + "command.note.archiveNote": "Archivar nota", + "command.note.unarchiveNote": "Desarchivar nota", + "command.note.addFavorite": "Agregar a Favoritos", + "command.note.removeFavorite": "Eliminar de Favoritos", + "command.note.markOrganized": "Marcar como organizada", + "command.note.markUnorganized": "Marcar como no organizada", + "command.note.restoreDeleted": "Restaurar nota eliminada", + "command.note.setIcon": "Establecer ícono de nota", + "command.note.removeIcon": "Eliminar ícono de nota", + "command.note.changeType": "Cambiar tipo de nota…", + "command.note.moveToFolder": "Mover nota a la carpeta…", + "command.note.openNewWindow": "Abrir en una ventana nueva", + "command.git.initialize": "Inicializar Git para el repositorio actual", + "command.git.commitPush": "Confirmar y enviar", + "command.git.addRemote": "Agregar repositorio remoto al repositorio actual", + "command.git.pull": "Extraer desde el repositorio remoto", + "command.git.resolveConflicts": "Resolver conflictos", + "command.git.viewChanges": "Ver cambios pendientes", + "command.view.editorOnly": "Solo editor", + "command.view.editorNoteList": "Editor + Lista de notas", + "command.view.fullLayout": "Diseño completo", + "command.view.toggleProperties": "Activar/desactivar el panel de propiedades", + "command.view.toggleDiff": "Activar/desactivar el modo de diferencias", + "command.view.toggleRaw": "Activar/desactivar el editor sin formato", + "command.view.leftLayout": "Usar diseño de nota alineado a la izquierda", + "command.view.centerLayout": "Usar diseño de nota centrado", + "command.view.toggleAiPanel": "Activar/desactivar el panel de IA", + "command.view.newAiChat": "Nuevo chat de IA", + "command.view.toggleBacklinks": "Activar/desactivar enlaces de retroceso", + "command.view.zoomIn": "Acercar ({zoom} %)", + "command.view.zoomOut": "Alejar ({zoom} %)", + "command.view.resetZoom": "Restablecer el zoom", + "command.settings.createEmptyVault": "Crear bóveda vacía…", + "command.settings.openVault": "Abrir bóveda…", + "command.settings.removeVault": "Eliminar caja fuerte de la lista", + "command.settings.restoreGettingStarted": "Restaurar el almacén de introducción", + "command.settings.manageExternalAi": "Administrar herramientas de IA externas…", + "command.settings.setupExternalAi": "Configurar herramientas de IA externas…", + "command.settings.reloadVault": "Volver a cargar el almacén", + "command.settings.repairVault": "Reparar el repositorio", + "command.ai.openAgents": "Abrir agentes de IA", + "command.ai.restoreGuidance": "Restaurar la guía de IA de Tolaria", + "command.ai.switchToAgent": "Cambiar el agente de IA a {agent}", + "command.ai.switchDefault": "Cambiar el agente de IA predeterminado", + "command.ai.switchDefaultWithAgent": "Cambiar agente de IA predeterminado ({agent})", + "settings.title": "Configuración", + "settings.close": "Cerrar la configuración", + "settings.sync.title": "Sincronización y actualizaciones", + "settings.sync.description": "Configure la extracción en segundo plano y el feed de actualizaciones que sigue Tolaria. Stable solo recibe las versiones promocionadas manualmente, mientras que Alpha sigue cada push a main.", + "settings.pullInterval": "Intervalo de extracción (minutos)", + "settings.releaseChannel": "Canal de versiones", + "settings.releaseStable": "Stable", + "settings.releaseAlpha": "Alpha", + "settings.appearance.title": "Apariencia", + "settings.appearance.description": "Elija el modo de color de la aplicación que se utilizará para Tolaria Chrome, las superficies del editor, los menús y los cuadros de diálogo.", + "settings.theme.label": "Tema", + "settings.theme.light": "Claro", + "settings.theme.dark": "Oscuro", + "settings.language.title": "Idioma", + "settings.language.description": "Elija el idioma de visualización para Tolaria Chrome. El sistema sigue la configuración de macOS cuando ese idioma es compatible; de lo contrario, se utiliza el inglés.", + "settings.language.label": "Idioma de la interfaz", + "settings.language.system": "Sistema ({language})", + "settings.language.summary": "Cuando faltan traducciones, se utiliza el inglés como idioma predeterminado para que las localizaciones parcialmente traducidas sigan siendo utilizables.", + "settings.autogit.title": "AutoGit", + "settings.autogit.description.enabled": "Crea automáticamente puntos de control Git conservadores después de pausas en la edición o cuando la aplicación deje de estar activa.", + "settings.autogit.description.disabled": "AutoGit no está disponible hasta que el almacén actual esté habilitado para Git. Primero, inicialice Git para este almacén.", + "settings.autogit.enable": "Habilitar AutoGit", + "settings.autogit.enableDescription": "Cuando esté habilitado, Tolaria confirmará y enviará automáticamente los cambios locales guardados después de una pausa por inactividad o cuando la aplicación deje de estar activa.", + "settings.autogit.idleThreshold": "Umbral de inactividad (segundos)", + "settings.autogit.inactiveThreshold": "Periodo de gracia de la aplicación inactiva (segundos)", + "settings.titles.title": "Títulos y nombres de archivo", + "settings.titles.description": "Elija si desea que Tolaria sincronice automáticamente los nombres de los archivos de notas sin título a partir del primer título H1.", + "settings.titles.autoRename": "Cambiar automáticamente el nombre de las notas sin título a partir del primer H1", + "settings.titles.autoRenameDescription": "Cuando esta opción está activada, Tolaria cambia el nombre de los archivos de notas sin título tan pronto como el primer H1 se convierte en un título real. Desactive esta opción para que el nombre del archivo no se modifique hasta que lo cambie manualmente desde la barra de navegación.", + "settings.aiAgents.title": "Agentes de IA", + "settings.aiAgents.description": "Elija qué agente de IA de CLI utiliza Tolaria en el panel de IA y en la paleta de comandos.", + "settings.aiAgents.default": "Agente de IA predeterminado", + "settings.aiAgents.installed": "instalado", + "settings.aiAgents.missing": "faltante", + "settings.aiAgents.ready": "{agent}{version} está listo para usarse.", + "settings.aiAgents.notInstalled": "{agent} aún no está instalado. Aún puede seleccionarlo ahora e instalarlo más adelante.", + "settings.workflow.title": "Flujo de trabajo", + "settings.workflow.description": "Elija si desea que Tolaria muestre el flujo de trabajo de la bandeja de entrada y cómo avanza por los elementos mientras usted los clasifica.", + "settings.workflow.explicit": "Organizar las notas de forma explícita", + "settings.workflow.explicitDescription": "Cuando esta opción está activada, se muestra una sección de la bandeja de entrada con las notas no organizadas, y un botón le permite marcar las notas como organizadas.", + "settings.workflow.autoAdvance": "Avance automático al siguiente elemento de la bandeja de entrada", + "settings.workflow.autoAdvanceDescription": "Cuando esta opción está activada, al marcar una nota de la bandeja de entrada como organizada, se abre de inmediato la siguiente nota visible de la bandeja de entrada.", + "settings.privacy.title": "Privacidad y telemetría", + "settings.privacy.description": "Los datos anónimos nos ayudan a corregir errores y a mejorar Tolaria. Nunca se envía contenido de la bóveda, títulos de notas ni rutas de archivos.", + "settings.privacy.crashReporting": "Informes de fallos", + "settings.privacy.crashReportingDescription": "Enviar informes de errores anónimos", + "settings.privacy.analytics": "Análisis de uso", + "settings.privacy.analyticsDescription": "Compartir patrones de uso anónimos", + "settings.footerShortcut": "⌘, para abrir la configuración", + "settings.cancel": "Cancelar", + "settings.save": "Guardar", + "common.cancel": "Cancelar", + "locale.en": "Inglés", + "sidebar.nav.inbox": "Bandeja de entrada", + "sidebar.nav.allNotes": "Todas las notas", + "sidebar.nav.archive": "Archivar", + "sidebar.group.favorites": "FAVORITOS", + "sidebar.group.views": "VISTAS", + "sidebar.group.types": "TIPOS", + "sidebar.group.folders": "CARPETAS", + "sidebar.action.createView": "Crear vista", + "sidebar.action.editView": "Editar vista", + "sidebar.action.deleteView": "Eliminar vista", + "sidebar.action.customizeSections": "Personalizar secciones", + "sidebar.action.renameSection": "Cambiar el nombre de la sección…", + "sidebar.action.customizeIconColor": "Personalizar ícono y color…", + "sidebar.action.createType": "Crear nuevo tipo", + "sidebar.action.collapse": "Ocultar la barra lateral", + "sidebar.action.expand": "Expandir la barra lateral", + "sidebar.action.createFolder": "Crear carpeta", + "sidebar.action.renameFolder": "Cambiar el nombre de la carpeta", + "sidebar.action.deleteFolder": "Eliminar carpeta", + "sidebar.action.revealFolderMenu": "Mostrar en el Finder", + "sidebar.action.copyFolderPathMenu": "Copiar ruta de la carpeta", + "sidebar.action.renameFolderMenu": "Cambiar el nombre de la carpeta...", + "sidebar.action.deleteFolderMenu": "Eliminar carpeta...", + "sidebar.folder.name": "Nombre de la carpeta", + "sidebar.folder.newName": "Nuevo nombre de carpeta", + "sidebar.folder.expand": "Expandir {name}", + "sidebar.folder.collapse": "Ocultar {name}", + "sidebar.section.name": "Nombre de la sección", + "sidebar.section.showInSidebar": "Mostrar en la barra lateral", + "sidebar.section.toggle": "Alternar {label}", + "sidebar.disabled.comingSoon": "Próximamente", + "noteList.title.archive": "Archivar", + "noteList.title.changes": "Cambios", + "noteList.title.inbox": "Bandeja de entrada", + "noteList.title.history": "Historial", + "noteList.title.view": "Ver", + "noteList.title.notes": "Notas", + "noteList.searchPlaceholder": "Buscar notas...", + "noteList.searchAction": "Buscar notas", + "noteList.createNote": "Crear nueva nota", + "noteList.empty.changesError": "Error al cargar los cambios: {error}", + "noteList.empty.noChanges": "No hay cambios pendientes", + "noteList.empty.noArchived": "No hay notas archivadas", + "noteList.empty.noMatching": "No hay notas que coincidan", + "noteList.empty.allOrganized": "Todas las notas están organizadas", + "noteList.empty.noNotes": "No se encontraron notas", + "noteList.empty.noMatchingItems": "No hay elementos que coincidan", + "noteList.empty.noRelatedItems": "No hay elementos relacionados", + "noteList.sort.modified": "Modificada", + "noteList.sort.created": "Creada", + "noteList.sort.title": "Título", + "noteList.sort.status": "Estado", + "noteList.sort.by": "Ordenar por {label}", + "noteList.sort.menu": "Ordenar por {label}", + "noteList.sort.ascending": "Ascendente", + "noteList.sort.descending": "Descendente", + "noteList.filter.open": "Abierto", + "noteList.filter.archived": "Archivado", + "noteList.filter.week": "Semana", + "noteList.filter.month": "Mes", + "noteList.filter.all": "Todo", + "noteList.properties.customizeColumns": "Personalizar columnas", + "noteList.properties.customizeAllColumns": "Personalizar todas las columnas de Notas", + "noteList.properties.customizeInboxColumns": "Personalizar las columnas de la bandeja de entrada", + "noteList.properties.customizeViewColumns": "Personalizar las columnas de {name}", + "noteList.properties.showInNoteList": "Mostrar en la lista de notas", + "noteList.properties.searchPlaceholder": "Buscar propiedades...", + "noteList.properties.searchLabel": "Buscar propiedades de la lista de notas", + "noteList.properties.noMatches": "Ninguna propiedad coincide con esta búsqueda.", + "noteList.properties.reorder": "Reordenar {name}", + "noteList.changes.restoreNote": "Restaurar nota", + "noteList.changes.discardChanges": "Descartar cambios", + "noteList.changes.restoreDescription": "¿Restaurar {file} desde Git?", + "noteList.changes.discardDescription": "¿Desea descartar los cambios en {file}? Esta acción no se puede deshacer.", + "noteList.changes.thisFile": "este archivo", + "noteList.changes.restore": "Restaurar", + "noteList.changes.discard": "Descartar", + "noteList.changes.cancel": "Cancelar", + "editor.empty.selectNote": "Seleccione una nota para comenzar a editarla", + "editor.empty.shortcuts": "{quickOpen} para buscar · {newNote} para crear", + "editor.raw.label": "Editor sin formato", + "editor.find.findLabel": "Buscar", + "editor.find.findPlaceholder": "Buscar", + "editor.find.replaceLabel": "Reemplazar", + "editor.find.replacePlaceholder": "Reemplazar", + "editor.find.matchCount": "{current} / {total}", + "editor.find.noMatches": "No hay coincidencias", + "editor.find.invalidRegex": "Expresión regular no válida", + "editor.find.regexMustMatchText": "La expresión regular (regex) debe coincidir con el texto", + "editor.find.previousMatch": "Coincidencia anterior", + "editor.find.nextMatch": "Siguiente coincidencia", + "editor.find.showReplace": "Mostrar reemplazo", + "editor.find.hideReplace": "Ocultar reemplazo", + "editor.find.regex": "Usar expresión regular", + "editor.find.matchCase": "Distinguir mayúsculas y minúsculas", + "editor.find.close": "Cerrar búsqueda", + "editor.find.replace": "Reemplazar", + "editor.find.replaceAll": "Todo", + "editor.toolbar.rawReturn": "Volver al editor", + "editor.toolbar.rawOpen": "Abrir el editor sin formato", + "editor.toolbar.centerLayout": "Cambiar al diseño de nota centrado", + "editor.toolbar.leftLayout": "Cambiar al diseño de nota alineado a la izquierda", + "editor.toolbar.removeFavorite": "Eliminar de favoritos", + "editor.toolbar.addFavorite": "Agregar a favoritos", + "editor.toolbar.markUnorganized": "Marcar la nota como no organizada", + "editor.toolbar.markOrganized": "Marcar la nota como organizada", + "editor.toolbar.noDiff": "Aún no hay ningún diff disponible", + "editor.toolbar.loadingDiff": "Cargando el diff", + "editor.toolbar.showDiff": "Mostrar el diff actual", + "editor.toolbar.openAi": "Abrir el panel de IA", + "editor.toolbar.closeAi": "Cerrar el panel de IA", + "editor.toolbar.restoreArchived": "Restaurar esta nota archivada", + "editor.toolbar.archive": "Archivar esta nota", + "editor.toolbar.delete": "Eliminar esta nota", + "editor.toolbar.revealFile": "Mostrar en el Finder", + "editor.toolbar.copyFilePath": "Copiar la ruta del archivo", + "editor.toolbar.openProperties": "Abrir el panel de propiedades", + "editor.filename.rename": "Cambiar el nombre del archivo", + "editor.filename.renameToTitle": "Cambiar el nombre del archivo para que coincida con el título", + "editor.filename.trigger": "Nombre de archivo {filename}. Presione Entrar para cambiar el nombre.", + "editor.banner.archived": "Archivada", + "editor.banner.unarchive": "Desarchivar", + "editor.banner.conflict": "Esta nota tiene un conflicto de fusión", + "editor.banner.keepMine": "Conservar la mía", + "editor.banner.keepMineTooltip": "Conservar mi versión local", + "editor.banner.keepTheirs": "Conservar la suya", + "editor.banner.keepTheirsTooltip": "Conservar la versión remota", + "inspector.title.properties": "Propiedades", + "inspector.title.propertiesShortcut": "Propiedades (⌘⇧I)", + "inspector.title.closePropertiesShortcut": "Cerrar Propiedades (⌘⇧I)", + "inspector.empty.noNoteSelected": "No se seleccionó ninguna nota", + "inspector.empty.noProperties": "Esta nota aún no tiene propiedades", + "inspector.empty.initializeProperties": "Inicializar propiedades", + "inspector.empty.invalidProperties": "Propiedades no válidas", + "inspector.empty.fixInEditor": "Corregir en el editor", + "inspector.properties.addProperty": "Agregar propiedad", + "inspector.properties.deleteProperty": "Eliminar propiedad", + "inspector.properties.none": "Ninguna", + "inspector.properties.missingType": "Falta el tipo", + "inspector.properties.missingTypeAria": "Falta el tipo {type}. Haga clic para crear este tipo.", + "inspector.properties.searchTypes": "Buscar tipos...", + "inspector.properties.noMatchingTypes": "No hay tipos que coincidan", + "inspector.properties.yes": "Sí", + "inspector.properties.no": "No", + "inspector.properties.pickDate": "Elija una fecha…", + "inspector.properties.valuePlaceholder": "Valor", + "inspector.properties.propertyName": "Nombre de la propiedad", + "inspector.relationship.add": "Agregar", + "inspector.relationship.addRelationship": "+ Agregar relación", + "inspector.relationship.name": "Nombre de la relación", + "inspector.relationship.noteTitle": "Título de la nota", + "inspector.relationship.createAndOpen": "Crear y abrir", + "inspector.info.title": "Información", + "inspector.info.modified": "Modificada", + "inspector.info.created": "Creada", + "inspector.info.words": "Palabras", + "inspector.info.size": "Tamaño", + "update.available": "está disponible", + "update.releaseNotes": "Notas de la versión", + "update.updateNow": "Actualizar ahora", + "update.dismiss": "Omitir", + "update.downloading": "Descargando Tolaria {version}...", + "update.readyRestart": "Está lista: reinicie para aplicar la actualización", + "update.restartNow": "Reiniciar ahora", + "status.update.check": "Buscar actualizaciones", + "status.zoom.reset": "Restablecer el nivel de zoom", + "status.feedback.contribute": "Contribuir a Tolaria", + "status.feedback.label": "Contribuir", + "status.theme.light": "Cambiar al modo claro", + "status.theme.dark": "Cambiar al modo oscuro", + "status.settings.open": "Abrir la configuración", + "status.build.unknown": "b?", + "status.vault.switch": "Cambiar de vault", + "status.vault.default": "Vault", + "status.vault.createEmpty": "Crear bóveda vacía", + "status.vault.openLocal": "Abrir carpeta local", + "status.vault.cloneGit": "Clonar repositorio Git", + "status.vault.cloneGettingStarted": "Clonar el vault de introducción", + "status.vault.notFound": "No se encontró el almacén: {path}", + "status.vault.remove": "Eliminar {label} de la lista", + "status.remote.noneConfigured": "No se ha configurado ningún repositorio remoto", + "status.remote.inSync": "Sincronizado con el repositorio remoto", + "status.remote.aheadTitle": "{count} commit{plural} por delante del repositorio remoto", + "status.remote.behindTitle": "{count} commit{plural} por detrás del repositorio remoto", + "status.remote.ahead": "{count} por delante", + "status.remote.behind": "{count} por detrás", + "status.remote.add": "Agregar un repositorio remoto a este vault", + "status.remote.none": "Sin repositorio remoto", + "status.remote.noneDescription": "Este repositorio Git no tiene ningún repositorio remoto configurado. Las confirmaciones se quedan a nivel local hasta que agregue un repositorio remoto.", + "status.sync.syncing": "Sincronizando...", + "status.sync.conflict": "Conflicto", + "status.sync.failed": "Error de sincronización", + "status.sync.pullRequired": "Se requiere una extracción", + "status.sync.notSynced": "No sincronizado", + "status.sync.justNow": "Sincronizado hace un momento", + "status.sync.minutesAgo": "Sincronizado hace {minutes} min", + "status.sync.resolveConflicts": "Resolver conflictos de fusión", + "status.sync.inProgress": "Sincronización en curso", + "status.sync.pullAndPush": "Extraer del repositorio remoto y enviar", + "status.sync.retry": "Reintentar sincronización", + "status.sync.now": "Sincronizar ahora", + "status.sync.synced": "Sincronizado", + "status.sync.conflicts": "Conflictos", + "status.sync.error": "Error", + "status.sync.status": "Estado: {status}", + "status.sync.pull": "Extraer", + "status.conflict.count": "{count} conflicto{plural}", + "status.offline.title": "Sin conexión a Internet", + "status.offline.label": "Sin conexión", + "status.changes.view": "Ver cambios pendientes", + "status.changes.label": "Cambios", + "status.commit.local": "Confirmar cambios localmente", + "status.commit.push": "Confirmar y enviar los cambios", + "status.commit.label": "Confirmar", + "status.commit.openOnGitHub": "Abrir la confirmación {hash} en GitHub", + "status.git.disabledTooltip": "Git está desactivado para esta bóveda. Inicialice Git para habilitar el historial, la sincronización, las confirmaciones y las vistas de cambios.", + "status.git.disabled": "Git desactivado", + "status.history.onlyGit": "El historial solo está disponible para los almacenes con Git habilitado", + "status.history.open": "Abrir historial de cambios", + "status.history.label": "Historial", + "status.mcp.notConnected": "Herramientas de IA externas no conectadas: haga clic para configurarlas", + "status.mcp.unknown": "Estado de MCP desconocido", + "status.claude.missing": "Falta Claude Code", + "status.claude.label": "Claude Code", + "status.claude.install": "No se encontró Claude Code: haga clic para instalarlo", + "status.ai.noAgents": "No se detectaron agentes de IA", + "status.ai.noAgentsTooltip": "No se detectaron agentes de IA: haga clic para obtener detalles de la configuración", + "status.ai.selectedMissing": "{agent} está seleccionado, pero no instalado — haga clic para obtener los detalles de la configuración", + "status.ai.defaultAgent": "Agente de IA predeterminado: {agent}{version}", + "status.ai.restoreDetails": "{base}. {summary} — Haga clic para ver los detalles de la restauración", + "status.ai.withGuidance": "{base}. {summary}", + "status.ai.active": "Agente de IA activo: {agent}", + "status.ai.unavailable": "Agente de IA seleccionado no disponible: {agent}", + "status.ai.install": "Instalar", + "status.ai.installAgent": "Instalar {agent}", + "status.ai.vaultGuidance": "Guía del repositorio", + "status.ai.restoreGuidance": "Restaurar la guía de IA de Tolaria", + "status.ai.openOptions": "Abrir opciones del agente de IA", + "pulse.title": "Historial", + "pulse.today": "Hoy", + "pulse.yesterday": "Ayer", + "pulse.commitCount": "{count} {label}", + "pulse.commitSingular": "commit", + "pulse.commitPlural": "confirmaciones", + "pulse.openOnGitHub": "Abrir en GitHub", + "pulse.expandFiles": "Expandir archivos", + "pulse.collapseFiles": "Ocultar archivos", + "pulse.noActivity": "Aún no hay actividad", + "pulse.emptyDescription": "Confirme los cambios para ver el historial de su bóveda", + "pulse.retry": "Reintentar", + "pulse.loadingActivity": "Cargando actividad…", + "pulse.loading": "Cargando…", + "pulse.loadError": "Error al cargar la actividad", + "command.switchLanguage": "Cambiar idioma a {language}", + "locale.itIT": "Italiano", + "locale.frFR": "Francés", + "locale.deDE": "Alemán", + "locale.ruRU": "Ruso", + "locale.esES": "Español (España)", + "locale.ptBR": "Portugués (Brasil)", + "locale.ptPT": "Portugués (Portugal)", + "locale.es419": "Español (Latinoamérica)", + "locale.zhCN": "Chino simplificado", + "locale.jaJP": "Japonés", + "locale.koKR": "Coreano" +} diff --git a/src/lib/locales/es-ES.json b/src/lib/locales/es-ES.json new file mode 100644 index 00000000..2ecd34dd --- /dev/null +++ b/src/lib/locales/es-ES.json @@ -0,0 +1,405 @@ +{ + "command.noMatches": "No hay comandos que coincidan", + "command.palettePlaceholder": "Escribe un comando...", + "command.footerNavigate": "↑↓ navegar", + "command.footerSelect": "↵ seleccionar", + "command.footerClose": "esc cerrar", + "command.footerSend": "↵ enviar", + "command.aiMode": "Modo {agent}", + "command.openSettings": "Abrir Ajustes", + "command.openSettings.keywords": "preferencias config", + "command.openLanguageSettings": "Abrir la configuración de idioma", + "command.openLanguageSettings.keywords": "idioma configuración regional i18n internacionalización localización inglés italiano francés alemán ruso español portugués chino japonés coreano 中文", + "command.useSystemLanguage": "Usar el idioma del sistema", + "command.openH1Setting": "Abrir la configuración de renombrado automático de H1", + "command.contribute": "Contribuir", + "command.checkUpdates": "Buscar actualizaciones", + "command.group.navigation": "Navegación", + "command.group.note": "Nota", + "command.group.git": "Git", + "command.group.view": "Ver", + "command.group.settings": "Ajustes", + "command.navigation.searchNotes": "Buscar en las notas", + "command.navigation.goAllNotes": "Ir a Todas las notas", + "command.navigation.goArchived": "Ir a Archivadas", + "command.navigation.goChanges": "Ir a Cambios", + "command.navigation.goHistory": "Ir al historial", + "command.navigation.goBack": "Volver atrás", + "command.navigation.goForward": "Ir adelante", + "command.navigation.goInbox": "Ir a la bandeja de entrada", + "command.navigation.renameFolder": "Cambiar el nombre de la carpeta", + "command.navigation.deleteFolder": "Eliminar carpeta", + "command.navigation.showOpenNotes": "Mostrar notas abiertas", + "command.navigation.showArchivedNotes": "Mostrar notas archivadas", + "command.navigation.listType": "Lista {type}", + "command.note.newNote": "Nueva nota", + "command.note.newType": "Nuevo tipo", + "command.note.newTypedNote": "Nuevo {type}", + "command.note.saveNote": "Guardar nota", + "command.note.findInNote": "Buscar en la nota", + "command.note.replaceInNote": "Reemplazar en la nota", + "command.note.deleteNote": "Eliminar nota", + "command.note.archiveNote": "Archivar nota", + "command.note.unarchiveNote": "Desarchivar nota", + "command.note.addFavorite": "Añadir a Favoritos", + "command.note.removeFavorite": "Eliminar de Favoritos", + "command.note.markOrganized": "Marcar como organizada", + "command.note.markUnorganized": "Marcar como no organizada", + "command.note.restoreDeleted": "Restaurar nota eliminada", + "command.note.setIcon": "Establecer icono de nota", + "command.note.removeIcon": "Eliminar icono de nota", + "command.note.changeType": "Cambiar tipo de nota…", + "command.note.moveToFolder": "Mover nota a la carpeta…", + "command.note.openNewWindow": "Abrir en una ventana nueva", + "command.git.initialize": "Inicializar Git para el almacén actual", + "command.git.commitPush": "Confirmar y enviar", + "command.git.addRemote": "Añadir repositorio remoto al almacén actual", + "command.git.pull": "Extraer del repositorio remoto", + "command.git.resolveConflicts": "Resolver conflictos", + "command.git.viewChanges": "Ver cambios pendientes", + "command.view.editorOnly": "Solo editor", + "command.view.editorNoteList": "Editor + Lista de notas", + "command.view.fullLayout": "Diseño completo", + "command.view.toggleProperties": "Activar/desactivar el panel de propiedades", + "command.view.toggleDiff": "Activar/desactivar el modo de diferencias", + "command.view.toggleRaw": "Activar/desactivar el editor sin formato", + "command.view.leftLayout": "Usar diseño de nota alineado a la izquierda", + "command.view.centerLayout": "Usar diseño de nota centrado", + "command.view.toggleAiPanel": "Activar/desactivar el panel de IA", + "command.view.newAiChat": "Nuevo chat de IA", + "command.view.toggleBacklinks": "Activar/desactivar los enlaces de retroceso", + "command.view.zoomIn": "Acercar ({zoom} %)", + "command.view.zoomOut": "Alejar ({zoom} %)", + "command.view.resetZoom": "Restablecer el zoom", + "command.settings.createEmptyVault": "Crear caja fuerte vacía…", + "command.settings.openVault": "Abrir caja fuerte…", + "command.settings.removeVault": "Eliminar caja fuerte de la lista", + "command.settings.restoreGettingStarted": "Restaurar el almacén de introducción", + "command.settings.manageExternalAi": "Gestionar herramientas externas de IA…", + "command.settings.setupExternalAi": "Configurar herramientas de IA externas…", + "command.settings.reloadVault": "Volver a cargar el almacén", + "command.settings.repairVault": "Reparar el almacén", + "command.ai.openAgents": "Abrir agentes de IA", + "command.ai.restoreGuidance": "Restaurar la guía de IA de Tolaria", + "command.ai.switchToAgent": "Cambiar el agente de IA a {agent}", + "command.ai.switchDefault": "Cambiar agente de IA predeterminado", + "command.ai.switchDefaultWithAgent": "Cambiar agente de IA predeterminado ({agent})", + "settings.title": "Ajustes", + "settings.close": "Cerrar ajustes", + "settings.sync.title": "Sincronización y actualizaciones", + "settings.sync.description": "Configurar la descarga en segundo plano y el canal de actualizaciones que sigue Tolaria. Stable solo recibe las versiones promocionadas manualmente, mientras que Alpha sigue todos los pushes a main.", + "settings.pullInterval": "Intervalo de extracción (minutos)", + "settings.releaseChannel": "Canal de versiones", + "settings.releaseStable": "Stable", + "settings.releaseAlpha": "Alpha", + "settings.appearance.title": "Apariencia", + "settings.appearance.description": "Seleccione el modo de color de la aplicación que se utilizará para Tolaria Chrome, las superficies del editor, los menús y los cuadros de diálogo.", + "settings.theme.label": "Tema", + "settings.theme.light": "Claro", + "settings.theme.dark": "Oscuro", + "settings.language.title": "Idioma", + "settings.language.description": "Elija el idioma de visualización de Tolaria Chrome. El sistema sigue la configuración de macOS cuando ese idioma es compatible; en caso contrario, se utiliza el inglés.", + "settings.language.label": "Idioma de la interfaz", + "settings.language.system": "Sistema ({language})", + "settings.language.summary": "Cuando faltan traducciones, se utiliza el inglés como idioma predeterminado para que las localizaciones parcialmente traducidas sigan siendo utilizables.", + "settings.autogit.title": "AutoGit", + "settings.autogit.description.enabled": "Crea automáticamente puntos de control Git conservadores después de pausas en la edición o cuando la aplicación deje de estar activa.", + "settings.autogit.description.disabled": "AutoGit no está disponible hasta que el almacén actual esté habilitado para Git. Primero, inicialice Git para este almacén.", + "settings.autogit.enable": "Habilitar AutoGit", + "settings.autogit.enableDescription": "Cuando esté habilitado, Tolaria confirmará y enviará automáticamente los cambios locales guardados después de una pausa por inactividad o cuando la aplicación deje de estar activa.", + "settings.autogit.idleThreshold": "Umbral de inactividad (segundos)", + "settings.autogit.inactiveThreshold": "Periodo de gracia de la aplicación inactiva (segundos)", + "settings.titles.title": "Títulos y nombres de archivo", + "settings.titles.description": "Decida si Tolaria sincroniza automáticamente los nombres de los archivos de las notas sin título a partir del primer título H1.", + "settings.titles.autoRename": "Cambiar automático del nombre de las notas sin título a partir del primer H1", + "settings.titles.autoRenameDescription": "Cuando esta opción está activada, Tolaria cambia el nombre de los archivos de notas sin título en cuanto el primer H1 se convierte en un título real. Desactive esta opción para que el nombre del archivo no cambie hasta que lo renombre manualmente desde la barra de navegación.", + "settings.aiAgents.title": "Agentes de IA", + "settings.aiAgents.description": "Elija qué agente de IA de CLI utiliza Tolaria en el panel de IA y en la paleta de comandos.", + "settings.aiAgents.default": "Agente de IA predeterminado", + "settings.aiAgents.installed": "instalado", + "settings.aiAgents.missing": "falta", + "settings.aiAgents.ready": "{agent}{version} está listo para usarse.", + "settings.aiAgents.notInstalled": "{agent} aún no está instalado. Aún puedes seleccionarlo ahora e instalarlo más tarde.", + "settings.workflow.title": "Flujo de trabajo", + "settings.workflow.description": "Decide si Tolaria muestra el flujo de trabajo de la bandeja de entrada y cómo avanza por los elementos mientras los clasificas.", + "settings.workflow.explicit": "Organizar las notas explícitamente", + "settings.workflow.explicitDescription": "Cuando esta opción está activada, se muestra una sección de la bandeja de entrada con las notas no organizadas y un botón que permite marcar las notas como organizadas.", + "settings.workflow.autoAdvance": "Avance automático al siguiente elemento de la bandeja de entrada", + "settings.workflow.autoAdvanceDescription": "Cuando esta opción está activada, al marcar una nota de la bandeja de entrada como organizada, se abre inmediatamente la siguiente nota visible de la bandeja de entrada.", + "settings.privacy.title": "Privacidad y telemetría", + "settings.privacy.description": "Los datos anónimos nos ayudan a corregir errores y a mejorar Tolaria. Nunca se envía contenido de la bóveda, títulos de notas ni rutas de archivos.", + "settings.privacy.crashReporting": "Informes de fallos", + "settings.privacy.crashReportingDescription": "Enviar informes de errores anónimos", + "settings.privacy.analytics": "Análisis de uso", + "settings.privacy.analyticsDescription": "Compartir patrones de uso anónimos", + "settings.footerShortcut": "⌘, para abrir los ajustes", + "settings.cancel": "Cancelar", + "settings.save": "Guardar", + "common.cancel": "Cancelar", + "locale.en": "Español", + "sidebar.nav.inbox": "Bandeja de entrada", + "sidebar.nav.allNotes": "Todas las notas", + "sidebar.nav.archive": "Archivar", + "sidebar.group.favorites": "FAVORITOS", + "sidebar.group.views": "VISUALIZACIONES", + "sidebar.group.types": "TIPOS", + "sidebar.group.folders": "CARPETAS", + "sidebar.action.createView": "Crear vista", + "sidebar.action.editView": "Editar vista", + "sidebar.action.deleteView": "Eliminar vista", + "sidebar.action.customizeSections": "Personalizar secciones", + "sidebar.action.renameSection": "Cambiar el nombre de la sección…", + "sidebar.action.customizeIconColor": "Personalizar icono y color…", + "sidebar.action.createType": "Crear nuevo tipo", + "sidebar.action.collapse": "Contraer la barra lateral", + "sidebar.action.expand": "Expandir la barra lateral", + "sidebar.action.createFolder": "Crear carpeta", + "sidebar.action.renameFolder": "Cambiar el nombre de la carpeta", + "sidebar.action.deleteFolder": "Eliminar carpeta", + "sidebar.action.revealFolderMenu": "Mostrar en el Finder", + "sidebar.action.copyFolderPathMenu": "Copiar ruta de la carpeta", + "sidebar.action.renameFolderMenu": "Cambiar el nombre de la carpeta...", + "sidebar.action.deleteFolderMenu": "Eliminar carpeta...", + "sidebar.folder.name": "Nombre de la carpeta", + "sidebar.folder.newName": "Nuevo nombre de carpeta", + "sidebar.folder.expand": "Expandir {name}", + "sidebar.folder.collapse": "Contraer {name}", + "sidebar.section.name": "Nombre de la sección", + "sidebar.section.showInSidebar": "Mostrar en la barra lateral", + "sidebar.section.toggle": "Activar/desactivar {label}", + "sidebar.disabled.comingSoon": "Próximamente", + "noteList.title.archive": "Archivar", + "noteList.title.changes": "Cambios", + "noteList.title.inbox": "Bandeja de entrada", + "noteList.title.history": "Historial", + "noteList.title.view": "Ver", + "noteList.title.notes": "Notas", + "noteList.searchPlaceholder": "Buscar notas…", + "noteList.searchAction": "Buscar notas", + "noteList.createNote": "Crear nueva nota", + "noteList.empty.changesError": "Error al cargar los cambios: {error}", + "noteList.empty.noChanges": "No hay cambios pendientes", + "noteList.empty.noArchived": "No hay notas archivadas", + "noteList.empty.noMatching": "No hay notas que coincidan", + "noteList.empty.allOrganized": "Todas las notas están organizadas", + "noteList.empty.noNotes": "No se han encontrado notas", + "noteList.empty.noMatchingItems": "No hay elementos que coincidan", + "noteList.empty.noRelatedItems": "No hay elementos relacionados", + "noteList.sort.modified": "Modificada", + "noteList.sort.created": "Creada", + "noteList.sort.title": "Título", + "noteList.sort.status": "Estado", + "noteList.sort.by": "Ordenar por {label}", + "noteList.sort.menu": "Ordenar por {label}", + "noteList.sort.ascending": "Ascendente", + "noteList.sort.descending": "Descendente", + "noteList.filter.open": "Abierto", + "noteList.filter.archived": "Archivado", + "noteList.filter.week": "Semana", + "noteList.filter.month": "Mes", + "noteList.filter.all": "Todo", + "noteList.properties.customizeColumns": "Personalizar columnas", + "noteList.properties.customizeAllColumns": "Personalizar todas las columnas de Notas", + "noteList.properties.customizeInboxColumns": "Personalizar las columnas de la bandeja de entrada", + "noteList.properties.customizeViewColumns": "Personalizar las columnas de {name}", + "noteList.properties.showInNoteList": "Mostrar en la lista de notas", + "noteList.properties.searchPlaceholder": "Buscar propiedades...", + "noteList.properties.searchLabel": "Buscar propiedades de la lista de notas", + "noteList.properties.noMatches": "Ninguna propiedad coincide con esta búsqueda.", + "noteList.properties.reorder": "Reordenar {name}", + "noteList.changes.restoreNote": "Restaurar nota", + "noteList.changes.discardChanges": "Descartar cambios", + "noteList.changes.restoreDescription": "¿Restaurar {file} desde Git?", + "noteList.changes.discardDescription": "¿Descartar los cambios en {file}? Esta acción no se puede deshacer.", + "noteList.changes.thisFile": "este archivo", + "noteList.changes.restore": "Restaurar", + "noteList.changes.discard": "Descartar", + "noteList.changes.cancel": "Cancelar", + "editor.empty.selectNote": "Selecciona una nota para empezar a editarla", + "editor.empty.shortcuts": "{quickOpen} para buscar · {newNote} para crear", + "editor.raw.label": "Editor sin formato", + "editor.find.findLabel": "Buscar", + "editor.find.findPlaceholder": "Buscar", + "editor.find.replaceLabel": "Reemplazar", + "editor.find.replacePlaceholder": "Reemplazar", + "editor.find.matchCount": "{current} / {total}", + "editor.find.noMatches": "No hay coincidencias", + "editor.find.invalidRegex": "Expresión regular no válida", + "editor.find.regexMustMatchText": "La expresión regular debe coincidir con el texto", + "editor.find.previousMatch": "Coincidencia anterior", + "editor.find.nextMatch": "Siguiente coincidencia", + "editor.find.showReplace": "Mostrar reemplazo", + "editor.find.hideReplace": "Ocultar reemplazo", + "editor.find.regex": "Usar expresión regular", + "editor.find.matchCase": "Distinguir mayúsculas y minúsculas", + "editor.find.close": "Cerrar búsqueda", + "editor.find.replace": "Reemplazar", + "editor.find.replaceAll": "Todo", + "editor.toolbar.rawReturn": "Volver al editor", + "editor.toolbar.rawOpen": "Abrir el editor sin formato", + "editor.toolbar.centerLayout": "Cambiar al diseño de nota centrado", + "editor.toolbar.leftLayout": "Cambiar al diseño de nota alineado a la izquierda", + "editor.toolbar.removeFavorite": "Eliminar de favoritos", + "editor.toolbar.addFavorite": "Añadir a favoritos", + "editor.toolbar.markUnorganized": "Marcar la nota como no organizada", + "editor.toolbar.markOrganized": "Marcar nota como organizada", + "editor.toolbar.noDiff": "Aún no hay ningún diff disponible", + "editor.toolbar.loadingDiff": "Cargando el diff", + "editor.toolbar.showDiff": "Mostrar el diff actual", + "editor.toolbar.openAi": "Abrir el panel de IA", + "editor.toolbar.closeAi": "Cerrar el panel de IA", + "editor.toolbar.restoreArchived": "Restaurar esta nota archivada", + "editor.toolbar.archive": "Archivar esta nota", + "editor.toolbar.delete": "Eliminar esta nota", + "editor.toolbar.revealFile": "Mostrar en el Finder", + "editor.toolbar.copyFilePath": "Copiar la ruta del archivo", + "editor.toolbar.openProperties": "Abrir el panel de propiedades", + "editor.filename.rename": "Cambiar el nombre del archivo", + "editor.filename.renameToTitle": "Cambiar el nombre del archivo para que coincida con el título", + "editor.filename.trigger": "Nombre de archivo {filename}. Pulsa Intro para cambiar el nombre", + "editor.banner.archived": "Archivada", + "editor.banner.unarchive": "Desarchivar", + "editor.banner.conflict": "Esta nota tiene un conflicto de fusión", + "editor.banner.keepMine": "Conservar la mía", + "editor.banner.keepMineTooltip": "Conservar mi versión local", + "editor.banner.keepTheirs": "Conservar la suya", + "editor.banner.keepTheirsTooltip": "Conservar la versión remota", + "inspector.title.properties": "Propiedades", + "inspector.title.propertiesShortcut": "Propiedades (⌘⇧I)", + "inspector.title.closePropertiesShortcut": "Cerrar Propiedades (⌘⇧I)", + "inspector.empty.noNoteSelected": "Ninguna nota seleccionada", + "inspector.empty.noProperties": "Esta nota aún no tiene propiedades", + "inspector.empty.initializeProperties": "Inicializar propiedades", + "inspector.empty.invalidProperties": "Propiedades no válidas", + "inspector.empty.fixInEditor": "Corregir en el editor", + "inspector.properties.addProperty": "Añadir propiedad", + "inspector.properties.deleteProperty": "Eliminar propiedad", + "inspector.properties.none": "Ninguna", + "inspector.properties.missingType": "Falta el tipo", + "inspector.properties.missingTypeAria": "Falta el tipo {type}. Haga clic para crear este tipo.", + "inspector.properties.searchTypes": "Buscar tipos…", + "inspector.properties.noMatchingTypes": "No hay tipos que coincidan", + "inspector.properties.yes": "Sí", + "inspector.properties.no": "No", + "inspector.properties.pickDate": "Seleccione una fecha…", + "inspector.properties.valuePlaceholder": "Valor", + "inspector.properties.propertyName": "Nombre de la propiedad", + "inspector.relationship.add": "Añadir", + "inspector.relationship.addRelationship": "+ Añadir relación", + "inspector.relationship.name": "Nombre de la relación", + "inspector.relationship.noteTitle": "Título de la nota", + "inspector.relationship.createAndOpen": "Crear y abrir", + "inspector.info.title": "Información", + "inspector.info.modified": "Modificada", + "inspector.info.created": "Creada", + "inspector.info.words": "Palabras", + "inspector.info.size": "Tamaño", + "update.available": "está disponible", + "update.releaseNotes": "Notas de la versión", + "update.updateNow": "Actualizar ahora", + "update.dismiss": "Omitir", + "update.downloading": "Descargando Tolaria {version}...", + "update.readyRestart": "está lista - reinicie para aplicarla", + "update.restartNow": "Reiniciar ahora", + "status.update.check": "Buscar actualizaciones", + "status.zoom.reset": "Restablecer el nivel de zoom", + "status.feedback.contribute": "Contribuir a Tolaria", + "status.feedback.label": "Contribuir", + "status.theme.light": "Cambiar al modo claro", + "status.theme.dark": "Cambiar al modo oscuro", + "status.settings.open": "Abrir ajustes", + "status.build.unknown": "b?", + "status.vault.switch": "Cambiar de almacén", + "status.vault.default": "Almacén", + "status.vault.createEmpty": "Crear almacén vacío", + "status.vault.openLocal": "Abrir carpeta local", + "status.vault.cloneGit": "Clonar repositorio Git", + "status.vault.cloneGettingStarted": "Clonar el almacén «Primeros pasos»", + "status.vault.notFound": "No se ha encontrado el almacén: {path}", + "status.vault.remove": "Eliminar {label} de la lista", + "status.remote.noneConfigured": "No hay ningún repositorio remoto configurado", + "status.remote.inSync": "Sincronizado con el repositorio remoto", + "status.remote.aheadTitle": "{count} commit{plural} por delante del repositorio remoto", + "status.remote.behindTitle": "{count} commit{plural} por detrás del remoto", + "status.remote.ahead": "{count} por delante", + "status.remote.behind": "{count} por detrás", + "status.remote.add": "Añadir un repositorio remoto a este repositorio GitVault", + "status.remote.none": "Sin repositorio remoto", + "status.remote.noneDescription": "Este repositorio Git no tiene ningún repositorio remoto configurado. Las confirmaciones se quedan en local hasta que añadas un repositorio remoto.", + "status.sync.syncing": "Sincronizando...", + "status.sync.conflict": "Conflicto", + "status.sync.failed": "Error en la sincronización", + "status.sync.pullRequired": "Se requiere una extracción", + "status.sync.notSynced": "Sin sincronizar", + "status.sync.justNow": "Sincronizado hace un momento", + "status.sync.minutesAgo": "Sincronizado hace {minutes} min", + "status.sync.resolveConflicts": "Resolver conflictos de fusión", + "status.sync.inProgress": "Sincronización en curso", + "status.sync.pullAndPush": "Extraer del repositorio remoto y enviar", + "status.sync.retry": "Reintentar la sincronización", + "status.sync.now": "Sincronizar ahora", + "status.sync.synced": "Sincronizado", + "status.sync.conflicts": "Conflictos", + "status.sync.error": "Error", + "status.sync.status": "Estado: {status}", + "status.sync.pull": "Extraer", + "status.conflict.count": "{count} conflicto{plural}", + "status.offline.title": "Sin conexión a Internet", + "status.offline.label": "Sin conexión", + "status.changes.view": "Ver cambios pendientes", + "status.changes.label": "Cambios", + "status.commit.local": "Confirmar los cambios localmente", + "status.commit.push": "Confirmar y enviar los cambios", + "status.commit.label": "Confirmar", + "status.commit.openOnGitHub": "Abrir la confirmación {hash} en GitHub", + "status.git.disabledTooltip": "Git está desactivado para este almacén. Inicialice Git para habilitar el historial, la sincronización, las confirmaciones y las vistas de cambios.", + "status.git.disabled": "Git desactivado", + "status.history.onlyGit": "El historial solo está disponible en los almacenes con Git habilitado", + "status.history.open": "Abrir el historial de cambios", + "status.history.label": "Historial", + "status.mcp.notConnected": "Herramientas de IA externas no conectadas — Haga clic para configurarlas", + "status.mcp.unknown": "Estado de MCP desconocido", + "status.claude.missing": "Falta Claude Code", + "status.claude.label": "Claude Code", + "status.claude.install": "No se ha encontrado Claude Code — Haga clic para instalarlo", + "status.ai.noAgents": "No se han detectado agentes de IA", + "status.ai.noAgentsTooltip": "No se han detectado agentes de IA — Haga clic para ver los detalles de la configuración", + "status.ai.selectedMissing": "{agent} está seleccionado, pero no instalado — haga clic para ver los detalles de la configuración", + "status.ai.defaultAgent": "Agente de IA predeterminado: {agent}{version}", + "status.ai.restoreDetails": "{base}. {summary} — Haga clic para ver los detalles de la restauración", + "status.ai.withGuidance": "{base}. {summary}", + "status.ai.active": "Agente de IA activo: {agent}", + "status.ai.unavailable": "Agente de IA seleccionado no disponible: {agent}", + "status.ai.install": "Instalar", + "status.ai.installAgent": "Instalar {agent}", + "status.ai.vaultGuidance": "Guía del repositorio", + "status.ai.restoreGuidance": "Restaurar la guía de IA de Tolaria", + "status.ai.openOptions": "Abrir las opciones del agente de IA", + "pulse.title": "Historial", + "pulse.today": "Hoy", + "pulse.yesterday": "Ayer", + "pulse.commitCount": "{count} {label}", + "pulse.commitSingular": "commit", + "pulse.commitPlural": "commits", + "pulse.openOnGitHub": "Abrir en GitHub", + "pulse.expandFiles": "Expandir archivos", + "pulse.collapseFiles": "Contraer archivos", + "pulse.noActivity": "Aún no hay actividad", + "pulse.emptyDescription": "Confirme los cambios para ver el historial de su almacén", + "pulse.retry": "Reintentar", + "pulse.loadingActivity": "Cargando actividad…", + "pulse.loading": "Cargando…", + "pulse.loadError": "Error al cargar la actividad", + "command.switchLanguage": "Cambiar idioma a {language}", + "locale.itIT": "Italiano", + "locale.frFR": "Francés", + "locale.deDE": "Alemán", + "locale.ruRU": "Ruso", + "locale.esES": "Español (España)", + "locale.ptBR": "Portugués (Brasil)", + "locale.ptPT": "Portugués (Portugal)", + "locale.es419": "Español (Latinoamérica)", + "locale.zhCN": "中国简体", + "locale.jaJP": "Japonés", + "locale.koKR": "Coreano" +} diff --git a/src/lib/locales/fr-FR.json b/src/lib/locales/fr-FR.json new file mode 100644 index 00000000..8c8fd91a --- /dev/null +++ b/src/lib/locales/fr-FR.json @@ -0,0 +1,405 @@ +{ + "command.noMatches": "Aucune commande correspondante", + "command.palettePlaceholder": "Saisir une commande…", + "command.footerNavigate": "↑↓ naviguer", + "command.footerSelect": "↵ sélectionner", + "command.footerClose": "esc fermer", + "command.footerSend": "↵ envoyer", + "command.aiMode": "Mode {agent}", + "command.openSettings": "Ouvrir les paramètres", + "command.openSettings.keywords": "préférences config", + "command.openLanguageSettings": "Ouvrir les paramètres de langue", + "command.openLanguageSettings.keywords": "langue paramètres régionaux i18n internationalisation localisation anglais italien français allemand russe espagnol portugais chinois japonais coréen 中文", + "command.useSystemLanguage": "Utiliser la langue du système", + "command.openH1Setting": "Ouvrir le paramètre de renommage automatique des titres H1", + "command.contribute": "Contribuer", + "command.checkUpdates": "Rechercher les mises à jour", + "command.group.navigation": "Navigation", + "command.group.note": "Note", + "command.group.git": "Git", + "command.group.view": "Afficher", + "command.group.settings": "Paramètres", + "command.navigation.searchNotes": "Rechercher dans les notes", + "command.navigation.goAllNotes": "Accéder à toutes les notes", + "command.navigation.goArchived": "Accéder aux notes archivées", + "command.navigation.goChanges": "Accéder aux modifications", + "command.navigation.goHistory": "Accéder à l'historique", + "command.navigation.goBack": "Retour en arrière", + "command.navigation.goForward": "Aller en avant", + "command.navigation.goInbox": "Accéder à la boîte de réception", + "command.navigation.renameFolder": "Renommer le dossier", + "command.navigation.deleteFolder": "Supprimer le dossier", + "command.navigation.showOpenNotes": "Afficher les notes ouvertes", + "command.navigation.showArchivedNotes": "Afficher les notes archivées", + "command.navigation.listType": "Liste {type}", + "command.note.newNote": "Nouvelle note", + "command.note.newType": "Nouveau type", + "command.note.newTypedNote": "Nouveau {type}", + "command.note.saveNote": "Enregistrer la note", + "command.note.findInNote": "Rechercher dans la note", + "command.note.replaceInNote": "Remplacer dans la note", + "command.note.deleteNote": "Supprimer la note", + "command.note.archiveNote": "Archiver la note", + "command.note.unarchiveNote": "Désarchiver la note", + "command.note.addFavorite": "Ajouter aux favoris", + "command.note.removeFavorite": "Supprimer des favoris", + "command.note.markOrganized": "Marquer comme organisée", + "command.note.markUnorganized": "Marquer comme non organisée", + "command.note.restoreDeleted": "Restaurer la note supprimée", + "command.note.setIcon": "Définir l'icône de la note", + "command.note.removeIcon": "Supprimer l'icône de la note", + "command.note.changeType": "Modifier le type de note…", + "command.note.moveToFolder": "Déplacer la note vers le dossier…", + "command.note.openNewWindow": "Ouvrir dans une nouvelle fenêtre", + "command.git.initialize": "Initialiser Git pour le coffre-fort actuel", + "command.git.commitPush": "Valider et pousser", + "command.git.addRemote": "Ajouter le dépôt distant au coffre-fort actuel", + "command.git.pull": "Extraire depuis le dépôt distant", + "command.git.resolveConflicts": "Résoudre les conflits", + "command.git.viewChanges": "Afficher les modifications en attente", + "command.view.editorOnly": "Éditeur uniquement", + "command.view.editorNoteList": "Éditeur + liste de notes", + "command.view.fullLayout": "Mise en page complète", + "command.view.toggleProperties": "Activer/désactiver le panneau des propriétés", + "command.view.toggleDiff": "Activer/désactiver le mode Diff", + "command.view.toggleRaw": "Activer/désactiver l'éditeur Raw", + "command.view.leftLayout": "Utiliser la mise en page des notes alignée à gauche", + "command.view.centerLayout": "Utiliser la mise en page centrée pour les notes", + "command.view.toggleAiPanel": "Activer/désactiver le panneau d'IA", + "command.view.newAiChat": "Nouveau chat IA", + "command.view.toggleBacklinks": "Activer/désactiver les backlinks", + "command.view.zoomIn": "Zoom avant ({zoom} %)", + "command.view.zoomOut": "Zoom arrière ({zoom} %)", + "command.view.resetZoom": "Réinitialiser le zoom", + "command.settings.createEmptyVault": "Créer un coffre-fort vide…", + "command.settings.openVault": "Ouvrir le coffre-fort…", + "command.settings.removeVault": "Supprimer le coffre de la liste", + "command.settings.restoreGettingStarted": "Restaurer le coffre-fort « Premiers pas »", + "command.settings.manageExternalAi": "Gérer les outils d'IA externes…", + "command.settings.setupExternalAi": "Configurer des outils d'IA externes…", + "command.settings.reloadVault": "Recharger le coffre-fort", + "command.settings.repairVault": "Réparer le coffre-fort", + "command.ai.openAgents": "Ouvrir les agents d'IA", + "command.ai.restoreGuidance": "Restaurer les conseils de l'IA Tolaria", + "command.ai.switchToAgent": "Basculer l'agent d'IA sur {agent}", + "command.ai.switchDefault": "Changer d'agent d'IA par défaut", + "command.ai.switchDefaultWithAgent": "Changer d'agent d'IA par défaut ({agent})", + "settings.title": "Paramètres", + "settings.close": "Fermer les paramètres", + "settings.sync.title": "Synchronisation et mises à jour", + "settings.sync.description": "Configurer la récupération en arrière-plan et le flux de mises à jour suivi par Tolaria. Stable ne reçoit que les versions promues manuellement, tandis qu'Alpha suit chaque push vers main.", + "settings.pullInterval": "Intervalle de pull (minutes)", + "settings.releaseChannel": "Canal de publication", + "settings.releaseStable": "Stable", + "settings.releaseAlpha": "Alpha", + "settings.appearance.title": "Apparence", + "settings.appearance.description": "Choisissez le mode de couleur de l'application utilisé pour Tolaria Chrome, les surfaces de l'éditeur, les menus et les boîtes de dialogue.", + "settings.theme.label": "Thème", + "settings.theme.light": "Clair", + "settings.theme.dark": "Sombre", + "settings.language.title": "Langue", + "settings.language.description": "Choisissez la langue d'affichage de Tolaria Chrome. Le système suit macOS lorsque cette langue est prise en charge, l'anglais étant la langue de secours.", + "settings.language.label": "Langue d'affichage", + "settings.language.system": "Système ({language})", + "settings.language.summary": "En l'absence de traduction, l'anglais est utilisé par défaut, ce qui permet de continuer à utiliser les localisations partiellement traduites.", + "settings.autogit.title": "AutoGit", + "settings.autogit.description.enabled": "Crée automatiquement des points de contrôle Git conservateurs après les pauses d'édition ou lorsque l'application n'est plus active.", + "settings.autogit.description.disabled": "AutoGit n'est pas disponible tant que le coffre-fort actuel n'est pas compatible avec Git. Veuillez d'abord initialiser Git pour ce coffre-fort.", + "settings.autogit.enable": "Activer AutoGit", + "settings.autogit.enableDescription": "Lorsque cette option est activée, Tolaria valide et pousse automatiquement les modifications locales enregistrées après une pause d'inactivité ou lorsque l'application devient inactive.", + "settings.autogit.idleThreshold": "Seuil d'inactivité (secondes)", + "settings.autogit.inactiveThreshold": "Délai de grâce en cas d'application inactive (secondes)", + "settings.titles.title": "Titres et noms de fichiers", + "settings.titles.description": "Indiquez si Tolaria doit synchroniser automatiquement les noms de fichier des notes sans titre à partir du premier titre H1.", + "settings.titles.autoRename": "Renommer automatiquement les notes sans titre à partir du premier H1", + "settings.titles.autoRenameDescription": "Lorsque cette option est activée, Tolaria renomme les fichiers de notes sans titre dès que le premier H1 devient un véritable titre. Désactivez cette option pour que le nom de fichier reste inchangé jusqu'à ce que vous le renommiez manuellement depuis la barre de navigation.", + "settings.aiAgents.title": "Agents d'IA", + "settings.aiAgents.description": "Choisissez l'agent d'IA CLI que Tolaria utilise dans le panneau d'IA et la palette de commandes.", + "settings.aiAgents.default": "Agent d'IA par défaut", + "settings.aiAgents.installed": "installé", + "settings.aiAgents.missing": "manquant", + "settings.aiAgents.ready": "{agent}{version} est prêt à l'emploi.", + "settings.aiAgents.notInstalled": "{agent} n'est pas encore installé. Vous pouvez toujours le sélectionner maintenant et l'installer plus tard.", + "settings.workflow.title": "Flux de travail", + "settings.workflow.description": "Choisissez si Tolaria affiche le flux de travail de la boîte de réception, ainsi que la manière dont il parcourt les éléments pendant que vous les triez.", + "settings.workflow.explicit": "Organiser les notes de manière explicite", + "settings.workflow.explicitDescription": "Lorsque cette option est activée, une section de la boîte de réception affiche les notes non organisées, et un bouton vous permet de marquer les notes comme organisées.", + "settings.workflow.autoAdvance": "Passer automatiquement à l'élément suivant de la boîte de réception", + "settings.workflow.autoAdvanceDescription": "Lorsque cette option est activée, le fait de marquer une note de la boîte de réception comme organisée ouvre immédiatement la note de la boîte de réception visible suivante.", + "settings.privacy.title": "Confidentialité et télémétrie", + "settings.privacy.description": "Les données anonymes nous aident à corriger les bugs et à améliorer Tolaria. Aucun contenu du coffre-fort, aucun titre de note et aucun chemin de fichier ne sont jamais envoyés.", + "settings.privacy.crashReporting": "Rapports d'erreur", + "settings.privacy.crashReportingDescription": "Envoyer des rapports d'erreur anonymes", + "settings.privacy.analytics": "Analyse de l'utilisation", + "settings.privacy.analyticsDescription": "Partager des habitudes d'utilisation de manière anonyme", + "settings.footerShortcut": "⌘, pour ouvrir les paramètres", + "settings.cancel": "Annuler", + "settings.save": "Enregistrer", + "common.cancel": "Annuler", + "locale.en": "Français", + "sidebar.nav.inbox": "Boîte de réception", + "sidebar.nav.allNotes": "Toutes les notes", + "sidebar.nav.archive": "Archiver", + "sidebar.group.favorites": "FAVORIS", + "sidebar.group.views": "VUES", + "sidebar.group.types": "TYPES", + "sidebar.group.folders": "DOSSIERS", + "sidebar.action.createView": "Créer une vue", + "sidebar.action.editView": "Modifier la vue", + "sidebar.action.deleteView": "Supprimer la vue", + "sidebar.action.customizeSections": "Personnaliser les sections", + "sidebar.action.renameSection": "Renommer la section…", + "sidebar.action.customizeIconColor": "Personnaliser l'icône et la couleur…", + "sidebar.action.createType": "Créer un nouveau type", + "sidebar.action.collapse": "Réduire la barre latérale", + "sidebar.action.expand": "Développer la barre latérale", + "sidebar.action.createFolder": "Créer un dossier", + "sidebar.action.renameFolder": "Renommer le dossier", + "sidebar.action.deleteFolder": "Supprimer le dossier", + "sidebar.action.revealFolderMenu": "Afficher dans le Finder", + "sidebar.action.copyFolderPathMenu": "Copier le chemin du dossier", + "sidebar.action.renameFolderMenu": "Renommer le dossier…", + "sidebar.action.deleteFolderMenu": "Supprimer le dossier…", + "sidebar.folder.name": "Nom du dossier", + "sidebar.folder.newName": "Nouveau nom du dossier", + "sidebar.folder.expand": "Développer {name}", + "sidebar.folder.collapse": "Réduire {name}", + "sidebar.section.name": "Nom de la section", + "sidebar.section.showInSidebar": "Afficher dans la barre latérale", + "sidebar.section.toggle": "Activer/désactiver {label}", + "sidebar.disabled.comingSoon": "Bientôt disponible", + "noteList.title.archive": "Archiver", + "noteList.title.changes": "Modifications", + "noteList.title.inbox": "Boîte de réception", + "noteList.title.history": "Historique", + "noteList.title.view": "Afficher", + "noteList.title.notes": "Notes", + "noteList.searchPlaceholder": "Rechercher des notes…", + "noteList.searchAction": "Rechercher dans les notes", + "noteList.createNote": "Créer une nouvelle note", + "noteList.empty.changesError": "Échec du chargement des modifications : {error}", + "noteList.empty.noChanges": "Aucune modification en attente", + "noteList.empty.noArchived": "Aucune note archivée", + "noteList.empty.noMatching": "Aucune note correspondante", + "noteList.empty.allOrganized": "Toutes les notes sont organisées", + "noteList.empty.noNotes": "Aucune note trouvée", + "noteList.empty.noMatchingItems": "Aucun élément correspondant", + "noteList.empty.noRelatedItems": "Aucun élément associé", + "noteList.sort.modified": "Modifiée", + "noteList.sort.created": "Créé", + "noteList.sort.title": "Titre", + "noteList.sort.status": "Statut", + "noteList.sort.by": "Trier par {label}", + "noteList.sort.menu": "Trier par {label}", + "noteList.sort.ascending": "Croissant", + "noteList.sort.descending": "Décroissant", + "noteList.filter.open": "Ouvert", + "noteList.filter.archived": "Archivé", + "noteList.filter.week": "Semaine", + "noteList.filter.month": "Mois", + "noteList.filter.all": "Tout", + "noteList.properties.customizeColumns": "Personnaliser les colonnes", + "noteList.properties.customizeAllColumns": "Personnaliser toutes les colonnes des notes", + "noteList.properties.customizeInboxColumns": "Personnaliser les colonnes de la boîte de réception", + "noteList.properties.customizeViewColumns": "Personnaliser les colonnes de {name}", + "noteList.properties.showInNoteList": "Afficher dans la liste des notes", + "noteList.properties.searchPlaceholder": "Rechercher des propriétés…", + "noteList.properties.searchLabel": "Rechercher des propriétés de la liste de notes", + "noteList.properties.noMatches": "Aucune propriété ne correspond à cette recherche.", + "noteList.properties.reorder": "Réorganiser {name}", + "noteList.changes.restoreNote": "Restaurer la note", + "noteList.changes.discardChanges": "Abandonner les modifications", + "noteList.changes.restoreDescription": "Restaurer {file} à partir de Git ?", + "noteList.changes.discardDescription": "Abandonner les modifications apportées à {file} ? Cette action est irréversible.", + "noteList.changes.thisFile": "ce fichier", + "noteList.changes.restore": "Restaurer", + "noteList.changes.discard": "Abandonner", + "noteList.changes.cancel": "Annuler", + "editor.empty.selectNote": "Sélectionner une note pour commencer à la modifier", + "editor.empty.shortcuts": "{quickOpen} pour rechercher · {newNote} pour créer", + "editor.raw.label": "Éditeur brut", + "editor.find.findLabel": "Rechercher", + "editor.find.findPlaceholder": "Rechercher", + "editor.find.replaceLabel": "Remplacer", + "editor.find.replacePlaceholder": "Remplacer", + "editor.find.matchCount": "{current} / {total}", + "editor.find.noMatches": "Aucune correspondance", + "editor.find.invalidRegex": "Expression rationnelle non valide", + "editor.find.regexMustMatchText": "L'expression rationnelle doit correspondre au texte", + "editor.find.previousMatch": "Correspondance précédente", + "editor.find.nextMatch": "Correspondance suivante", + "editor.find.showReplace": "Afficher le remplacement", + "editor.find.hideReplace": "Masquer le remplacement", + "editor.find.regex": "Utiliser une expression régulière", + "editor.find.matchCase": "Respecter la casse", + "editor.find.close": "Fermer la recherche", + "editor.find.replace": "Remplacer", + "editor.find.replaceAll": "Tout", + "editor.toolbar.rawReturn": "Retourner à l'éditeur", + "editor.toolbar.rawOpen": "Ouvrir l'éditeur Raw", + "editor.toolbar.centerLayout": "Passer à la mise en page centrée de la note", + "editor.toolbar.leftLayout": "Passer à mise en page de la note en alignement à gauche", + "editor.toolbar.removeFavorite": "Supprimer des favoris", + "editor.toolbar.addFavorite": "Ajouter aux favoris", + "editor.toolbar.markUnorganized": "Définir la note comme non organisée", + "editor.toolbar.markOrganized": "Définir la note comme organisée", + "editor.toolbar.noDiff": "Aucun diff n'est disponible pour le moment", + "editor.toolbar.loadingDiff": "Chargement du diff", + "editor.toolbar.showDiff": "Afficher le diff actuel", + "editor.toolbar.openAi": "Ouvrir le panneau d'IA", + "editor.toolbar.closeAi": "Fermer le panneau d'IA", + "editor.toolbar.restoreArchived": "Restaurer cette note archivée", + "editor.toolbar.archive": "Archiver cette note", + "editor.toolbar.delete": "Supprimer cette note", + "editor.toolbar.revealFile": "Afficher dans le Finder", + "editor.toolbar.copyFilePath": "Copier le chemin du fichier", + "editor.toolbar.openProperties": "Ouvrir le panneau des propriétés", + "editor.filename.rename": "Renommer le fichier", + "editor.filename.renameToTitle": "Renommer le fichier pour qu'il corresponde au titre", + "editor.filename.trigger": "Nom de fichier {filename}. Appuyez sur Entrée pour le renommer", + "editor.banner.archived": "Archivé", + "editor.banner.unarchive": "Désarchiver", + "editor.banner.conflict": "Cette note présente un conflit de fusion", + "editor.banner.keepMine": "Conserver la mienne", + "editor.banner.keepMineTooltip": "Conserver ma version locale", + "editor.banner.keepTheirs": "Conserver la leur", + "editor.banner.keepTheirsTooltip": "Conserver la version distante", + "inspector.title.properties": "Propriétés", + "inspector.title.propertiesShortcut": "Propriétés (⌘⇧I)", + "inspector.title.closePropertiesShortcut": "Fermer les propriétés (⌘⇧I)", + "inspector.empty.noNoteSelected": "Aucune note sélectionnée", + "inspector.empty.noProperties": "Cette note n'a pas encore de propriétés", + "inspector.empty.initializeProperties": "Initialiser les propriétés", + "inspector.empty.invalidProperties": "Propriétés non valides", + "inspector.empty.fixInEditor": "Corriger dans l'éditeur", + "inspector.properties.addProperty": "Ajouter une propriété", + "inspector.properties.deleteProperty": "Supprimer la propriété", + "inspector.properties.none": "Aucun", + "inspector.properties.missingType": "Type manquant", + "inspector.properties.missingTypeAria": "Type {type} manquant. Cliquez pour créer ce type.", + "inspector.properties.searchTypes": "Rechercher des types…", + "inspector.properties.noMatchingTypes": "Aucun type correspondant", + "inspector.properties.yes": "Oui", + "inspector.properties.no": "Non", + "inspector.properties.pickDate": "Choisir une date…", + "inspector.properties.valuePlaceholder": "Valeur", + "inspector.properties.propertyName": "Nom de la propriété", + "inspector.relationship.add": "Ajouter", + "inspector.relationship.addRelationship": "+ Ajouter une relation", + "inspector.relationship.name": "Nom de la relation", + "inspector.relationship.noteTitle": "Titre de la note", + "inspector.relationship.createAndOpen": "Créer et ouvrir", + "inspector.info.title": "Informations", + "inspector.info.modified": "Modifiée", + "inspector.info.created": "Créée", + "inspector.info.words": "Mots", + "inspector.info.size": "Taille", + "update.available": "est disponible", + "update.releaseNotes": "Notes de version", + "update.updateNow": "Mettre à jour maintenant", + "update.dismiss": "Ignorer", + "update.downloading": "Téléchargement de Tolaria {version} en cours…", + "update.readyRestart": "est prête – redémarrez pour appliquer la mise à jour", + "update.restartNow": "Redémarrer maintenant", + "status.update.check": "Rechercher les mises à jour", + "status.zoom.reset": "Réinitialiser le niveau de zoom", + "status.feedback.contribute": "Contribuer à Tolaria", + "status.feedback.label": "Contribuer", + "status.theme.light": "Passer en mode clair", + "status.theme.dark": "Passer en mode sombre", + "status.settings.open": "Ouvrir les paramètres", + "status.build.unknown": "b ?", + "status.vault.switch": "Changer de coffre", + "status.vault.default": "Coffre-fort", + "status.vault.createEmpty": "Créer un coffre-fort vide", + "status.vault.openLocal": "Ouvrir le dossier local", + "status.vault.cloneGit": "Cloner le dépôt Git", + "status.vault.cloneGettingStarted": "Cloner le coffre-fort « Premiers pas »", + "status.vault.notFound": "Coffre-fort introuvable : {path}", + "status.vault.remove": "Supprimer {label} de la liste", + "status.remote.noneConfigured": "Aucun serveur distant configuré", + "status.remote.inSync": "Synchronisé avec le dépôt distant", + "status.remote.aheadTitle": "{count} commit{plural} en avance sur le dépôt distant", + "status.remote.behindTitle": "{count} commit{plural} de retard sur le dépôt distant", + "status.remote.ahead": "{count} en avance", + "status.remote.behind": "{count} en retard", + "status.remote.add": "Ajouter un dépôt distant à ce coffre-fort", + "status.remote.none": "Aucun dépôt distant", + "status.remote.noneDescription": "Aucun dépôt distant n'est configuré pour ce coffre-fort Git. Les commits restent locaux jusqu'à ce que vous en ajoutiez un.", + "status.sync.syncing": "Synchronisation en cours…", + "status.sync.conflict": "Conflit", + "status.sync.failed": "Échec de la synchronisation", + "status.sync.pullRequired": "Pull requis", + "status.sync.notSynced": "Non synchronisé", + "status.sync.justNow": "Synchronisé à l'instant", + "status.sync.minutesAgo": "Synchronisé il y a {minutes} min", + "status.sync.resolveConflicts": "Résoudre les conflits de fusion", + "status.sync.inProgress": "Synchronisation en cours", + "status.sync.pullAndPush": "Effectuer un pull depuis le dépôt distant et un push", + "status.sync.retry": "Réessayer la synchronisation", + "status.sync.now": "Synchroniser maintenant", + "status.sync.synced": "Synchronisé", + "status.sync.conflicts": "Conflits", + "status.sync.error": "Erreur", + "status.sync.status": "Statut : {status}", + "status.sync.pull": "Extraire", + "status.conflict.count": "{count} conflit{plural}", + "status.offline.title": "Pas de connexion Internet", + "status.offline.label": "Hors ligne", + "status.changes.view": "Afficher les modifications en attente", + "status.changes.label": "Modifications", + "status.commit.local": "Valider les modifications localement", + "status.commit.push": "Valider et pousser les modifications", + "status.commit.label": "Valider", + "status.commit.openOnGitHub": "Ouvrir le commit {hash} sur GitHub", + "status.git.disabledTooltip": "Git est désactivé pour ce coffre-fort. Initialisez Git pour activer l'historique, la synchronisation, les validations et les vues des modifications.", + "status.git.disabled": "Git désactivé", + "status.history.onlyGit": "L'historique n'est disponible que pour les coffres-forts compatibles Git", + "status.history.open": "Ouvrir l'historique des modifications", + "status.history.label": "Historique", + "status.mcp.notConnected": "Outils d'IA externes non connectés — cliquez pour les configurer", + "status.mcp.unknown": "Statut MCP inconnu", + "status.claude.missing": "Claude Code manquant", + "status.claude.label": "Claude Code", + "status.claude.install": "Claude Code introuvable — cliquez pour l'installer", + "status.ai.noAgents": "Aucun agent d'IA détecté", + "status.ai.noAgentsTooltip": "Aucun agent d'IA détecté — cliquez pour afficher les détails de la configuration", + "status.ai.selectedMissing": "{agent} est sélectionné mais n'est pas installé — cliquez pour afficher les détails de la configuration", + "status.ai.defaultAgent": "Agent d'IA par défaut : {agent}{version}", + "status.ai.restoreDetails": "{base}. {summary} — cliquez pour afficher les détails de la restauration", + "status.ai.withGuidance": "{base}. {summary}", + "status.ai.active": "Agent d'IA actif : {agent}", + "status.ai.unavailable": "Agent d'IA sélectionné indisponible : {agent}", + "status.ai.install": "Installer", + "status.ai.installAgent": "Installer {agent}", + "status.ai.vaultGuidance": "Conseils relatifs au coffre-fort", + "status.ai.restoreGuidance": "Restaurer Tolaria AI Guidance", + "status.ai.openOptions": "Ouvrir les options de l'agent d'IA", + "pulse.title": "Historique", + "pulse.today": "Aujourd'hui", + "pulse.yesterday": "Hier", + "pulse.commitCount": "{count} {label}", + "pulse.commitSingular": "commit", + "pulse.commitPlural": "validations", + "pulse.openOnGitHub": "Ouvrir sur GitHub", + "pulse.expandFiles": "Développer les fichiers", + "pulse.collapseFiles": "Réduire les fichiers", + "pulse.noActivity": "Aucune activité pour le moment", + "pulse.emptyDescription": "Validez les modifications pour afficher l'historique de votre coffre-fort", + "pulse.retry": "Réessayer", + "pulse.loadingActivity": "Chargement de l'activité…", + "pulse.loading": "Chargement en cours…", + "pulse.loadError": "Échec du chargement de l'activité", + "command.switchLanguage": "Changer de langue : {language}", + "locale.itIT": "Italien", + "locale.frFR": "Français", + "locale.deDE": "Allemand", + "locale.ruRU": "Russe", + "locale.esES": "Espagnol (Espagne)", + "locale.ptBR": "Portugais (Brésil)", + "locale.ptPT": "Portugais (Portugal)", + "locale.es419": "Espagnol (Amérique latine)", + "locale.zhCN": "Chinois simplifié", + "locale.jaJP": "Japonais", + "locale.koKR": "Coréen" +} diff --git a/src/lib/locales/it-IT.json b/src/lib/locales/it-IT.json new file mode 100644 index 00000000..ebd816b3 --- /dev/null +++ b/src/lib/locales/it-IT.json @@ -0,0 +1,405 @@ +{ + "command.noMatches": "Nessun comando corrispondente", + "command.palettePlaceholder": "Digita un comando...", + "command.footerNavigate": "↑↓ naviga", + "command.footerSelect": "↵ seleziona", + "command.footerClose": "esc chiudi", + "command.footerSend": "↵ invia", + "command.aiMode": "Modalità {agent}", + "command.openSettings": "Apri le impostazioni", + "command.openSettings.keywords": "preferences config", + "command.openLanguageSettings": "Apri le impostazioni della lingua", + "command.openLanguageSettings.keywords": "lingua locale i18n internazionalizzazione localizzazione inglese italiano francese tedesco russo spagnolo portoghese cinese giapponese coreano 中文", + "command.useSystemLanguage": "Usa la lingua di sistema", + "command.openH1Setting": "Apri l'impostazione di rinomina automatica H1", + "command.contribute": "Contribuisci", + "command.checkUpdates": "Verifica disponibilità aggiornamenti", + "command.group.navigation": "Navigazione", + "command.group.note": "Nota", + "command.group.git": "Git", + "command.group.view": "Visualizza", + "command.group.settings": "Impostazioni", + "command.navigation.searchNotes": "Cerca note", + "command.navigation.goAllNotes": "Vai a Tutte le note", + "command.navigation.goArchived": "Vai ad Archiviate", + "command.navigation.goChanges": "Vai a Modifiche", + "command.navigation.goHistory": "Vai a Cronologia", + "command.navigation.goBack": "Torna indietro", + "command.navigation.goForward": "Vai avanti", + "command.navigation.goInbox": "Vai alla Posta in arrivo", + "command.navigation.renameFolder": "Rinomina cartella", + "command.navigation.deleteFolder": "Elimina cartella", + "command.navigation.showOpenNotes": "Mostra note aperte", + "command.navigation.showArchivedNotes": "Mostra note archiviate", + "command.navigation.listType": "Elenco {type}", + "command.note.newNote": "Nuova nota", + "command.note.newType": "Nuovo tipo", + "command.note.newTypedNote": "Nuovo {type}", + "command.note.saveNote": "Salva nota", + "command.note.findInNote": "Trova nella nota", + "command.note.replaceInNote": "Sostituisci nella nota", + "command.note.deleteNote": "Elimina nota", + "command.note.archiveNote": "Archivia nota", + "command.note.unarchiveNote": "Annulla archiviazione nota", + "command.note.addFavorite": "Aggiungi ai preferiti", + "command.note.removeFavorite": "Rimuovi dai Preferiti", + "command.note.markOrganized": "Contrassegna come organizzata", + "command.note.markUnorganized": "Contrassegna come Non organizzata", + "command.note.restoreDeleted": "Ripristina nota eliminata", + "command.note.setIcon": "Imposta icona nota", + "command.note.removeIcon": "Rimuovi icona nota", + "command.note.changeType": "Modifica tipo di nota…", + "command.note.moveToFolder": "Sposta nota nella cartella…", + "command.note.openNewWindow": "Apri in una nuova finestra", + "command.git.initialize": "Inizializza Git per il vault corrente", + "command.git.commitPush": "Commit e push", + "command.git.addRemote": "Aggiungi repository remoto al vault corrente", + "command.git.pull": "Esegui il pull dal repository remoto", + "command.git.resolveConflicts": "Risolvi conflitti", + "command.git.viewChanges": "Visualizza modifiche in sospeso", + "command.view.editorOnly": "Solo editor", + "command.view.editorNoteList": "Editor + Elenco note", + "command.view.fullLayout": "Layout completo", + "command.view.toggleProperties": "Attiva/disattiva pannello Proprietà", + "command.view.toggleDiff": "Attiva/disattiva modalità Diff", + "command.view.toggleRaw": "Attiva/disattiva editor RAW", + "command.view.leftLayout": "Usa layout delle note allineato a sinistra", + "command.view.centerLayout": "Usa layout delle note centrato", + "command.view.toggleAiPanel": "Attiva/disattiva pannello IA", + "command.view.newAiChat": "Nuova chat con l'IA", + "command.view.toggleBacklinks": "Attiva/disattiva backlink", + "command.view.zoomIn": "Ingrandisci ({zoom}%)", + "command.view.zoomOut": "Riduci ({zoom}%)", + "command.view.resetZoom": "Ripristina zoom", + "command.settings.createEmptyVault": "Crea vault vuoto…", + "command.settings.openVault": "Apri vault…", + "command.settings.removeVault": "Rimuovi vault dall'elenco", + "command.settings.restoreGettingStarted": "Ripristina il vault Getting Started", + "command.settings.manageExternalAi": "Gestisci strumenti di IA esterni…", + "command.settings.setupExternalAi": "Configura strumenti di IA esterni…", + "command.settings.reloadVault": "Ricarica Vault", + "command.settings.repairVault": "Ripara Vault", + "command.ai.openAgents": "Apri agenti IA", + "command.ai.restoreGuidance": "Ripristina la guida IA di Tolaria", + "command.ai.switchToAgent": "Passa ad agente IA {agent}", + "command.ai.switchDefault": "Cambia agente IA predefinito", + "command.ai.switchDefaultWithAgent": "Cambia agente IA predefinito ({agent})", + "settings.title": "Impostazioni", + "settings.close": "Chiudi le impostazioni", + "settings.sync.title": "Sincronizzazione e aggiornamenti", + "settings.sync.description": "Configura il pulling in background e scegli quale feed di aggiornamenti deve seguire Tolaria. Stable riceve solo le release promosse manualmente, mentre Alpha segue ogni push su main.", + "settings.pullInterval": "Intervallo di pull (minuti)", + "settings.releaseChannel": "Canale di rilascio", + "settings.releaseStable": "Stable", + "settings.releaseAlpha": "Alpha", + "settings.appearance.title": "Aspetto", + "settings.appearance.description": "Scegli la modalità colore dell'app da utilizzare per Tolaria Chrome, le interfacce dell'editor, i menu e le finestre di dialogo.", + "settings.theme.label": "Tema", + "settings.theme.light": "Chiaro", + "settings.theme.dark": "Scuro", + "settings.language.title": "Lingua", + "settings.language.description": "Scegli la lingua di visualizzazione per Tolaria chrome. Il sistema segue le impostazioni di macOS quando la lingua in questione è supportata; in caso contrario, viene utilizzata l'inglese come lingua predefinita.", + "settings.language.label": "Lingua di visualizzazione", + "settings.language.system": "Sistema ({language})", + "settings.language.summary": "In caso di traduzioni mancanti, viene utilizzato l'inglese come lingua predefinita, in modo che le localizzazioni parzialmente tradotte rimangano utilizzabili.", + "settings.autogit.title": "AutoGit", + "settings.autogit.description.enabled": "Crea automaticamente checkpoint Git conservativi dopo le pause di modifica o quando l'app non è più attiva.", + "settings.autogit.description.disabled": "AutoGit non è disponibile finché il vault corrente non è abilitato per Git. Innanzitutto, inizializza Git per questo vault.", + "settings.autogit.enable": "Abilita AutoGit", + "settings.autogit.enableDescription": "Se abilitato, Tolaria eseguirà automaticamente il commit e il push delle modifiche locali salvate dopo una pausa di inattività o quando l'app diventa inattiva.", + "settings.autogit.idleThreshold": "Soglia di inattività (secondi)", + "settings.autogit.inactiveThreshold": "Periodo di tolleranza per app inattiva (secondi)", + "settings.titles.title": "Titoli e nomi di file", + "settings.titles.description": "Scegli se desideri che Tolaria sincronizzi automaticamente i nomi dei file delle note senza titolo in base al primo titolo H1.", + "settings.titles.autoRename": "Rinomina automaticamente le note senza titolo in base al primo titolo H1", + "settings.titles.autoRenameDescription": "Se questa opzione è abilitata, Tolaria rinomina i file delle note senza titolo non appena il primo H1 diventa un titolo effettivo. Disattiva questa opzione per mantenere invariato il nome del file finché non lo rinomini manualmente dalla barra di navigazione.", + "settings.aiAgents.title": "Agenti IA", + "settings.aiAgents.description": "Scegli quale agente IA CLI deve utilizzare Tolaria nel pannello IA e nella palette dei comandi.", + "settings.aiAgents.default": "Agente IA predefinito", + "settings.aiAgents.installed": "installato", + "settings.aiAgents.missing": "mancante", + "settings.aiAgents.ready": "{agent}{version} è pronto per l'uso.", + "settings.aiAgents.notInstalled": "{agent} non è ancora installato. Puoi comunque selezionarlo ora e installarlo in seguito.", + "settings.workflow.title": "Flusso di lavoro", + "settings.workflow.description": "Scegli se Tolaria deve mostrare il flusso di lavoro della Posta in arrivo e come si sposta tra gli elementi mentre li smisti.", + "settings.workflow.explicit": "Organizza le note in modo esplicito", + "settings.workflow.explicitDescription": "Quando questa opzione è attivata, una sezione della Posta in arrivo mostra le note non organizzate e un pulsante ti consente di contrassegnare le note come organizzate.", + "settings.workflow.autoAdvance": "Passa automaticamente all'elemento successivo della Posta in arrivo", + "settings.workflow.autoAdvanceDescription": "Se questa opzione è abilitata, quando si contrassegna una nota dell'Inbox come organizzata, si apre immediatamente la nota successiva visibile nell'Inbox.", + "settings.privacy.title": "Privacy e telemetria", + "settings.privacy.description": "I dati anonimi ci aiutano a correggere i bug e a migliorare Tolaria. Non vengono mai inviati contenuti del vault, titoli di note o percorsi di file.", + "settings.privacy.crashReporting": "Segnalazione di arresti anomali", + "settings.privacy.crashReportingDescription": "Invia segnalazioni di errori in forma anonima", + "settings.privacy.analytics": "Analisi dell'utilizzo", + "settings.privacy.analyticsDescription": "Condividi modelli di utilizzo in forma anonima", + "settings.footerShortcut": "⌘, per aprire le impostazioni", + "settings.cancel": "Annulla", + "settings.save": "Salva", + "common.cancel": "Annulla", + "locale.en": "Inglese", + "sidebar.nav.inbox": "Posta in arrivo", + "sidebar.nav.allNotes": "Tutte le note", + "sidebar.nav.archive": "Archivia", + "sidebar.group.favorites": "PREFERITI", + "sidebar.group.views": "VISUALIZZAZIONI", + "sidebar.group.types": "TIPI", + "sidebar.group.folders": "CARTELLE", + "sidebar.action.createView": "Crea vista", + "sidebar.action.editView": "Modifica vista", + "sidebar.action.deleteView": "Elimina vista", + "sidebar.action.customizeSections": "Personalizza sezioni", + "sidebar.action.renameSection": "Rinomina sezione…", + "sidebar.action.customizeIconColor": "Personalizza icona e colore…", + "sidebar.action.createType": "Crea nuovo tipo", + "sidebar.action.collapse": "Comprimi la barra laterale", + "sidebar.action.expand": "Espandi la barra laterale", + "sidebar.action.createFolder": "Crea cartella", + "sidebar.action.renameFolder": "Rinomina cartella", + "sidebar.action.deleteFolder": "Elimina cartella", + "sidebar.action.revealFolderMenu": "Mostra in Finder", + "sidebar.action.copyFolderPathMenu": "Copia percorso della cartella", + "sidebar.action.renameFolderMenu": "Rinomina cartella...", + "sidebar.action.deleteFolderMenu": "Elimina cartella...", + "sidebar.folder.name": "Nome della cartella", + "sidebar.folder.newName": "Nuovo nome della cartella", + "sidebar.folder.expand": "Espandi {name}", + "sidebar.folder.collapse": "Comprimi {name}", + "sidebar.section.name": "Nome della sezione", + "sidebar.section.showInSidebar": "Mostra nella barra laterale", + "sidebar.section.toggle": "Attiva/disattiva {label}", + "sidebar.disabled.comingSoon": "In arrivo", + "noteList.title.archive": "Archivia", + "noteList.title.changes": "Modifiche", + "noteList.title.inbox": "Posta in arrivo", + "noteList.title.history": "Cronologia", + "noteList.title.view": "Visualizza", + "noteList.title.notes": "Note", + "noteList.searchPlaceholder": "Cerca note...", + "noteList.searchAction": "Cerca note", + "noteList.createNote": "Crea nuova nota", + "noteList.empty.changesError": "Caricamento delle modifiche non riuscito: {error}", + "noteList.empty.noChanges": "Nessuna modifica in sospeso", + "noteList.empty.noArchived": "Nessuna nota archiviata", + "noteList.empty.noMatching": "Nessuna nota corrispondente", + "noteList.empty.allOrganized": "Tutte le note sono organizzate", + "noteList.empty.noNotes": "Nessuna nota trovata", + "noteList.empty.noMatchingItems": "Nessun elemento corrispondente", + "noteList.empty.noRelatedItems": "Nessun elemento correlato", + "noteList.sort.modified": "Modificato", + "noteList.sort.created": "Creato", + "noteList.sort.title": "Titolo", + "noteList.sort.status": "Stato", + "noteList.sort.by": "Ordina per {label}", + "noteList.sort.menu": "Ordina per {label}", + "noteList.sort.ascending": "Crescente", + "noteList.sort.descending": "Decrescente", + "noteList.filter.open": "Aperto", + "noteList.filter.archived": "Archiviato", + "noteList.filter.week": "Settimana", + "noteList.filter.month": "Mese", + "noteList.filter.all": "Tutti", + "noteList.properties.customizeColumns": "Personalizza le colonne", + "noteList.properties.customizeAllColumns": "Personalizza tutte le colonne di Note", + "noteList.properties.customizeInboxColumns": "Personalizza le colonne della Posta in arrivo", + "noteList.properties.customizeViewColumns": "Personalizza le colonne di {name}", + "noteList.properties.showInNoteList": "Mostra nell'elenco delle note", + "noteList.properties.searchPlaceholder": "Cerca proprietà...", + "noteList.properties.searchLabel": "Cerca proprietà dell'elenco note", + "noteList.properties.noMatches": "Nessuna proprietà corrisponde a questa ricerca.", + "noteList.properties.reorder": "Riordina {name}", + "noteList.changes.restoreNote": "Ripristina nota", + "noteList.changes.discardChanges": "Ignora le modifiche", + "noteList.changes.restoreDescription": "Ripristinare {file} da Git?", + "noteList.changes.discardDescription": "Vuoi ignorare le modifiche a {file}? Questa operazione non può essere annullata.", + "noteList.changes.thisFile": "questo file", + "noteList.changes.restore": "Ripristina", + "noteList.changes.discard": "Ignora", + "noteList.changes.cancel": "Annulla", + "editor.empty.selectNote": "Seleziona una nota per iniziare a modificarla", + "editor.empty.shortcuts": "{quickOpen} per cercare · {newNote} per creare", + "editor.raw.label": "Editor Raw", + "editor.find.findLabel": "Trova", + "editor.find.findPlaceholder": "Trova", + "editor.find.replaceLabel": "Sostituisci", + "editor.find.replacePlaceholder": "Sostituisci", + "editor.find.matchCount": "{current} / {total}", + "editor.find.noMatches": "Nessuna corrispondenza", + "editor.find.invalidRegex": "Espressione regolare non valida", + "editor.find.regexMustMatchText": "La regex deve corrispondere al testo", + "editor.find.previousMatch": "Corrispondenza precedente", + "editor.find.nextMatch": "Corrispondenza successiva", + "editor.find.showReplace": "Mostra sostituzione", + "editor.find.hideReplace": "Nascondi sostituzione", + "editor.find.regex": "Usa espressione regolare", + "editor.find.matchCase": "Maiuscole/minuscole", + "editor.find.close": "Chiudi ricerca", + "editor.find.replace": "Sostituisci", + "editor.find.replaceAll": "Tutti", + "editor.toolbar.rawReturn": "Torna all'editor", + "editor.toolbar.rawOpen": "Apri l'editor raw", + "editor.toolbar.centerLayout": "Passa al layout della nota centrato", + "editor.toolbar.leftLayout": "Passa al layout della nota allineato a sinistra", + "editor.toolbar.removeFavorite": "Rimuovi dai preferiti", + "editor.toolbar.addFavorite": "Aggiungi ai preferiti", + "editor.toolbar.markUnorganized": "Imposta nota come non organizzata", + "editor.toolbar.markOrganized": "Imposta nota come organizzata", + "editor.toolbar.noDiff": "Nessuna diff ancora disponibile", + "editor.toolbar.loadingDiff": "Caricamento della diff in corso", + "editor.toolbar.showDiff": "Mostra il diff corrente", + "editor.toolbar.openAi": "Apri il pannello IA", + "editor.toolbar.closeAi": "Chiudi il pannello IA", + "editor.toolbar.restoreArchived": "Ripristina questa nota archiviata", + "editor.toolbar.archive": "Archivia questa nota", + "editor.toolbar.delete": "Elimina questa nota", + "editor.toolbar.revealFile": "Mostra nel Finder", + "editor.toolbar.copyFilePath": "Copia il percorso del file", + "editor.toolbar.openProperties": "Apri il pannello delle proprietà", + "editor.filename.rename": "Rinomina nome file", + "editor.filename.renameToTitle": "Rinomina il file in modo che corrisponda al titolo", + "editor.filename.trigger": "Nome file {filename}. Premi Invio per rinominarlo", + "editor.banner.archived": "Archiviato", + "editor.banner.unarchive": "Annulla archiviazione", + "editor.banner.conflict": "Questa nota presenta un conflitto di unione", + "editor.banner.keepMine": "Mantieni la mia", + "editor.banner.keepMineTooltip": "Mantieni la mia versione locale", + "editor.banner.keepTheirs": "Mantieni la loro", + "editor.banner.keepTheirsTooltip": "Mantieni la versione remota", + "inspector.title.properties": "Proprietà", + "inspector.title.propertiesShortcut": "Proprietà (⌘�⇧I)", + "inspector.title.closePropertiesShortcut": "Chiudi Proprietà (⌘⇧I)", + "inspector.empty.noNoteSelected": "Nessuna nota selezionata", + "inspector.empty.noProperties": "Questa nota non ha ancora proprietà", + "inspector.empty.initializeProperties": "Inizializza proprietà", + "inspector.empty.invalidProperties": "Proprietà non valide", + "inspector.empty.fixInEditor": "Correggi nell'editor", + "inspector.properties.addProperty": "Aggiungi proprietà", + "inspector.properties.deleteProperty": "Elimina proprietà", + "inspector.properties.none": "Nessuna", + "inspector.properties.missingType": "Tipo mancante", + "inspector.properties.missingTypeAria": "Tipo {type} mancante. Fai clic per creare questo tipo.", + "inspector.properties.searchTypes": "Cerca tipi...", + "inspector.properties.noMatchingTypes": "Nessun tipo corrispondente", + "inspector.properties.yes": "Sì", + "inspector.properties.no": "No", + "inspector.properties.pickDate": "Scegli una data…", + "inspector.properties.valuePlaceholder": "Valore", + "inspector.properties.propertyName": "Nome della proprietà", + "inspector.relationship.add": "Aggiungi", + "inspector.relationship.addRelationship": "+ Aggiungi relazione", + "inspector.relationship.name": "Nome della relazione", + "inspector.relationship.noteTitle": "Titolo della nota", + "inspector.relationship.createAndOpen": "Crea e apri", + "inspector.info.title": "Informazioni", + "inspector.info.modified": "Modificato", + "inspector.info.created": "Creato", + "inspector.info.words": "Parole", + "inspector.info.size": "Dimensione", + "update.available": "è disponibile", + "update.releaseNotes": "Note sulla versione", + "update.updateNow": "Aggiorna ora", + "update.dismiss": "Ignora", + "update.downloading": "Download di Tolaria {version} in corso...", + "update.readyRestart": "è pronta - riavvia per applicare l'aggiornamento", + "update.restartNow": "Riavvia ora", + "status.update.check": "Verifica disponibilità aggiornamenti", + "status.zoom.reset": "Ripristina il livello di zoom", + "status.feedback.contribute": "Contribuisci a Tolaria", + "status.feedback.label": "Contribuisci", + "status.theme.light": "Passa alla modalità chiara", + "status.theme.dark": "Passa alla modalità scura", + "status.settings.open": "Apri le impostazioni", + "status.build.unknown": "b?", + "status.vault.switch": "Cambia vault", + "status.vault.default": "Vault", + "status.vault.createEmpty": "Crea vault vuoto", + "status.vault.openLocal": "Apri cartella locale", + "status.vault.cloneGit": "Clona repository Git", + "status.vault.cloneGettingStarted": "Clona il vault Getting Started", + "status.vault.notFound": "Vault non trovato: {path}", + "status.vault.remove": "Rimuovi {label} dall'elenco", + "status.remote.noneConfigured": "Nessun remoto configurato", + "status.remote.inSync": "Sincronizzato con il repository remoto", + "status.remote.aheadTitle": "{count} commit{plural} in anticipo rispetto al repository remoto", + "status.remote.behindTitle": "{count} commit{plural} in ritardo rispetto al repository remoto", + "status.remote.ahead": "{count} in anticipo", + "status.remote.behind": "{count} indietro", + "status.remote.add": "Aggiungi un repository remoto a questo vault", + "status.remote.none": "Nessun remote", + "status.remote.noneDescription": "Questo vault Git non ha alcun remote configurato. I commit rimangono locali finché non ne aggiungi uno.", + "status.sync.syncing": "Sincronizzazione in corso...", + "status.sync.conflict": "Conflitto", + "status.sync.failed": "Sincronizzazione non riuscita", + "status.sync.pullRequired": "Pull richiesto", + "status.sync.notSynced": "Non sincronizzato", + "status.sync.justNow": "Sincronizzato proprio ora", + "status.sync.minutesAgo": "Sincronizzato {minutes} min fa", + "status.sync.resolveConflicts": "Risolvi i conflitti di merge", + "status.sync.inProgress": "Sincronizzazione in corso", + "status.sync.pullAndPush": "Esegui il pull dal repository remoto e il push", + "status.sync.retry": "Riprova la sincronizzazione", + "status.sync.now": "Sincronizza ora", + "status.sync.synced": "Sincronizzato", + "status.sync.conflicts": "Conflitti", + "status.sync.error": "Errore", + "status.sync.status": "Stato: {status}", + "status.sync.pull": "Esegui pull", + "status.conflict.count": "{count} conflitto{plural}", + "status.offline.title": "Nessuna connessione a Internet", + "status.offline.label": "Offline", + "status.changes.view": "Visualizza modifiche in sospeso", + "status.changes.label": "Modifiche", + "status.commit.local": "Esegui il commit delle modifiche localmente", + "status.commit.push": "Esegui il commit e il push delle modifiche", + "status.commit.label": "Commit", + "status.commit.openOnGitHub": "Apri il commit {hash} su GitHub", + "status.git.disabledTooltip": "Git è disabilitato per questo vault. Inizializza Git per abilitare la cronologia, la sincronizzazione, i commit e le viste delle modifiche.", + "status.git.disabled": "Git disabilitato", + "status.history.onlyGit": "La cronologia è disponibile solo per i vault abilitati per Git", + "status.history.open": "Apri la cronologia delle modifiche", + "status.history.label": "Cronologia", + "status.mcp.notConnected": "Strumenti di IA esterni non connessi — clicca per configurarli", + "status.mcp.unknown": "Stato MCP sconosciuto", + "status.claude.missing": "Claude Code mancante", + "status.claude.label": "Claude Code", + "status.claude.install": "Claude Code non trovato — clicca per installarlo", + "status.ai.noAgents": "Nessun agente IA rilevato", + "status.ai.noAgentsTooltip": "Nessun agente IA rilevato — clicca per i dettagli di configurazione", + "status.ai.selectedMissing": "{agent} è selezionato ma non installato — clicca per i dettagli di configurazione", + "status.ai.defaultAgent": "Agente IA predefinito: {agent}{version}", + "status.ai.restoreDetails": "{base}. {summary} — Clicca per i dettagli del ripristino", + "status.ai.withGuidance": "{base}. {summary}", + "status.ai.active": "Agente IA attivo: {agent}", + "status.ai.unavailable": "Agente IA selezionato non disponibile: {agent}", + "status.ai.install": "Installa", + "status.ai.installAgent": "Installa {agent}", + "status.ai.vaultGuidance": "Guida al vault", + "status.ai.restoreGuidance": "Ripristina la guida IA di Tolaria", + "status.ai.openOptions": "Apri le opzioni dell'agente IA", + "pulse.title": "Cronologia", + "pulse.today": "Oggi", + "pulse.yesterday": "Ieri", + "pulse.commitCount": "{count} {label}", + "pulse.commitSingular": "commit", + "pulse.commitPlural": "commit", + "pulse.openOnGitHub": "Apri su GitHub", + "pulse.expandFiles": "Espandi file", + "pulse.collapseFiles": "Comprimi file", + "pulse.noActivity": "Ancora nessuna attività", + "pulse.emptyDescription": "Esegui il commit delle modifiche per visualizzare la cronologia del tuo vault", + "pulse.retry": "Riprova", + "pulse.loadingActivity": "Caricamento attività in corso…", + "pulse.loading": "Caricamento in corso…", + "pulse.loadError": "Caricamento dell'attività non riuscito", + "command.switchLanguage": "Cambia lingua in {language}", + "locale.itIT": "Italiano", + "locale.frFR": "Francese", + "locale.deDE": "Tedesco", + "locale.ruRU": "Russo", + "locale.esES": "Español (España)", + "locale.ptBR": "Português (Brasil)", + "locale.ptPT": "Português (Portugal)", + "locale.es419": "Español (Latinoamérica)", + "locale.zhCN": "中文简体", + "locale.jaJP": "Japonais", + "locale.koKR": "Coreano" +} diff --git a/src/lib/locales/ja-JP.json b/src/lib/locales/ja-JP.json new file mode 100644 index 00000000..043b6d67 --- /dev/null +++ b/src/lib/locales/ja-JP.json @@ -0,0 +1,405 @@ +{ + "command.noMatches": "一致するコマンドはありません", + "command.palettePlaceholder": "コマンドを入力…", + "command.footerNavigate": "↑↓ 移動", + "command.footerSelect": "↵ 選択", + "command.footerClose": "esc 閉じる", + "command.footerSend": "↵ 送信", + "command.aiMode": "{agent}モード", + "command.openSettings": "設定を開く", + "command.openSettings.keywords": "preferences config", + "command.openLanguageSettings": "言語設定を開く", + "command.openLanguageSettings.keywords": "言語 ロケール i18n 国際化 ローカリゼーション 英語 イタリア語 フランス語 ドイツ語 ロシア語 スペイン語 ポルトガル語 中国語 日本語 韓国語 中文", + "command.useSystemLanguage": "システム言語を使用", + "command.openH1Setting": "H1 自動名前変更設定を開く", + "command.contribute": "投稿する", + "command.checkUpdates": "更新の確認", + "command.group.navigation": "ナビゲーション", + "command.group.note": "メモ", + "command.group.git": "Git", + "command.group.view": "表示", + "command.group.settings": "設定", + "command.navigation.searchNotes": "ノートを検索", + "command.navigation.goAllNotes": "すべてのノートへ移動", + "command.navigation.goArchived": "アーカイブ済みへ移動", + "command.navigation.goChanges": "変更へ移動", + "command.navigation.goHistory": "履歴へ移動", + "command.navigation.goBack": "戻る", + "command.navigation.goForward": "先に進む", + "command.navigation.goInbox": "受信トレイへ移動", + "command.navigation.renameFolder": "フォルダー名を変更", + "command.navigation.deleteFolder": "フォルダーを削除", + "command.navigation.showOpenNotes": "未解決のノートを表示", + "command.navigation.showArchivedNotes": "アーカイブされたノートを表示", + "command.navigation.listType": "{type}のリスト", + "command.note.newNote": "新規ノート", + "command.note.newType": "新しいタイプ", + "command.note.newTypedNote": "新規{type}", + "command.note.saveNote": "メモを保存", + "command.note.findInNote": "ノート内で検索", + "command.note.replaceInNote": "ノート内で置き換える", + "command.note.deleteNote": "ノートを削除", + "command.note.archiveNote": "メモをアーカイブ", + "command.note.unarchiveNote": "ノートのアーカイブ解除", + "command.note.addFavorite": "お気に入りに追加", + "command.note.removeFavorite": "お気に入りから削除", + "command.note.markOrganized": "整理済みとしてマーク", + "command.note.markUnorganized": "未整理としてマーク", + "command.note.restoreDeleted": "削除したノートを復元", + "command.note.setIcon": "ノートのアイコンを設定", + "command.note.removeIcon": "ノートアイコンを削除", + "command.note.changeType": "ノートの種類を変更…", + "command.note.moveToFolder": "ノートをフォルダーに移動…", + "command.note.openNewWindow": "新しいウィンドウで開く", + "command.git.initialize": "現在のボールトでGitを初期化", + "command.git.commitPush": "コミット & プッシュ", + "command.git.addRemote": "現在のボールトにリモートを追加", + "command.git.pull": "リモートからプル", + "command.git.resolveConflicts": "競合を解決", + "command.git.viewChanges": "保留中の変更を表示", + "command.view.editorOnly": "エディターのみ", + "command.view.editorNoteList": "エディター + メモリスト", + "command.view.fullLayout": "フルレイアウト", + "command.view.toggleProperties": "プロパティパネルの切り替え", + "command.view.toggleDiff": "差分モードの切り替え", + "command.view.toggleRaw": "Rawエディターの切り替え", + "command.view.leftLayout": "左揃えのノートレイアウトを使用", + "command.view.centerLayout": "メモの中央揃えレイアウトを使用", + "command.view.toggleAiPanel": "AIパネルの切り替え", + "command.view.newAiChat": "新しいAIチャット", + "command.view.toggleBacklinks": "バックリンクの切り替え", + "command.view.zoomIn": "拡大({zoom}%)", + "command.view.zoomOut": "ズームアウト({zoom}%)", + "command.view.resetZoom": "ズームをリセット", + "command.settings.createEmptyVault": "空のボールトを作成…", + "command.settings.openVault": "Vault を開く…", + "command.settings.removeVault": "リストからボールトを削除", + "command.settings.restoreGettingStarted": "Getting Started Vaultを復元", + "command.settings.manageExternalAi": "外部AIツールの管理…", + "command.settings.setupExternalAi": "外部AIツールを設定…", + "command.settings.reloadVault": "Vault を再読み込み", + "command.settings.repairVault": "Vault を修復", + "command.ai.openAgents": "AIエージェントを開く", + "command.ai.restoreGuidance": "Tolaria AIガイダンスを復元", + "command.ai.switchToAgent": "AIエージェントを{agent}に切り替える", + "command.ai.switchDefault": "デフォルトのAIエージェントを切り替える", + "command.ai.switchDefaultWithAgent": "デフォルトのAIエージェント({agent})に切り替える", + "settings.title": "設定", + "settings.close": "設定を閉じる", + "settings.sync.title": "同期と更新", + "settings.sync.description": "バックグラウンドでのプルと、Tolariaがフォローする更新フィードを設定します。Stableは手動でプロモートされたリリースのみを受け取り、Alphaはmainへのすべてのプッシュをフォローします。", + "settings.pullInterval": "プル間隔(分)", + "settings.releaseChannel": "リリースチャネル", + "settings.releaseStable": "Stable", + "settings.releaseAlpha": "Alpha", + "settings.appearance.title": "外観", + "settings.appearance.description": "Tolaria chrome、エディターのサーフェス、メニュー、およびダイアログに使用するアプリのカラーモードを選択します。", + "settings.theme.label": "テーマ", + "settings.theme.light": "ライト", + "settings.theme.dark": "ダーク", + "settings.language.title": "言語", + "settings.language.description": "Tolaria Chromeの表示言語を選択します。システムは、対応言語がサポートされている場合はmacOSに従い、サポートされていない場合は英語が使用されます。", + "settings.language.label": "表示言語", + "settings.language.system": "システム({language})", + "settings.language.summary": "翻訳が欠落している場合は英語にフォールバックするため、部分的に翻訳されたロケールも引き続き使用できます。", + "settings.autogit.title": "AutoGit", + "settings.autogit.description.enabled": "編集が一時停止した後、またはアプリがアクティブでなくなったときに、控えめなGitチェックポイントを自動的に作成します。", + "settings.autogit.description.disabled": "現在のボルトがGit対応になるまで、AutoGitは利用できません。まず、このボールトでGitを初期化してください。", + "settings.autogit.enable": "AutoGitを有効にする", + "settings.autogit.enableDescription": "有効にすると、Tolaria はアイドル状態になった後、またはアプリが非アクティブになった後に、保存されたローカル変更を自動的にコミットしてプッシュします。", + "settings.autogit.idleThreshold": "アイドルしきい値(秒)", + "settings.autogit.inactiveThreshold": "アプリ非アクティブ後の猶予期間(秒)", + "settings.titles.title": "タイトルとファイル名", + "settings.titles.description": "Tolaria が、タイトルのないノートのファイル名を最初の H1 タイトルに基づいて自動的に同期するかどうかを選択します。", + "settings.titles.autoRename": "タイトルのないノートのファイル名を最初のH1から自動的に変更する", + "settings.titles.autoRenameDescription": "この設定を有効にすると、Tolariaは最初のH1が実際のタイトルになった時点で、タイトルのないノートファイルの名前を変更します。この設定をオフにすると、ブレッドクラムバーから手動で名前を変更するまで、ファイル名は変更されません。", + "settings.aiAgents.title": "AIエージェント", + "settings.aiAgents.description": "TolariaがAIパネルとコマンドパレットで使用するCLI AIエージェントを選択します。", + "settings.aiAgents.default": "デフォルトのAIエージェント", + "settings.aiAgents.installed": "インストール済み", + "settings.aiAgents.missing": "未インストール", + "settings.aiAgents.ready": "{agent}{version}は使用可能です。", + "settings.aiAgents.notInstalled": "{agent} はまだインストールされていません。今選択して、後でインストールすることもできます。", + "settings.workflow.title": "ワークフロー", + "settings.workflow.description": "Tolariaが受信トレイのワークフローを表示するかどうか、およびあなたがアイテムをトリアージする際にTolariaがアイテム間を移動する方法を選択します。", + "settings.workflow.explicit": "ノートを明示的に整理する", + "settings.workflow.explicitDescription": "有効にすると、受信トレイセクションに整理されていないノートが表示され、トグルを使用してノートを整理済みとしてマークできます。", + "settings.workflow.autoAdvance": "受信トレイの次のアイテムへ自動的に進む", + "settings.workflow.autoAdvanceDescription": "この設定を有効にすると、受信トレイのノートを整理済みとしてマークすると、すぐに受信トレイに表示されている次のノートが開きます。", + "settings.privacy.title": "プライバシーとテレメトリ", + "settings.privacy.description": "匿名データは、バグの修正とTolariaの改善に役立ちます。Vaultのコンテンツ、ノートのタイトル、ファイルパスは、決して送信されません。", + "settings.privacy.crashReporting": "クラッシュレポート", + "settings.privacy.crashReportingDescription": "匿名のエラーレポートを送信する", + "settings.privacy.analytics": "利用状況分析", + "settings.privacy.analyticsDescription": "匿名の使用パターンを共有する", + "settings.footerShortcut": "⌘、設定を開く", + "settings.cancel": "キャンセル", + "settings.save": "保存", + "common.cancel": "キャンセル", + "locale.en": "英語", + "sidebar.nav.inbox": "受信トレイ", + "sidebar.nav.allNotes": "すべてのノート", + "sidebar.nav.archive": "アーカイブ", + "sidebar.group.favorites": "お気に入り", + "sidebar.group.views": "閲覧数", + "sidebar.group.types": "タイプ", + "sidebar.group.folders": "フォルダー", + "sidebar.action.createView": "ビューを作成", + "sidebar.action.editView": "ビューを編集", + "sidebar.action.deleteView": "ビューを削除", + "sidebar.action.customizeSections": "セクションをカスタマイズ", + "sidebar.action.renameSection": "セクション名を変更…", + "sidebar.action.customizeIconColor": "アイコンと色をカスタマイズ…", + "sidebar.action.createType": "新しいタイプを作成", + "sidebar.action.collapse": "サイドバーを折りたたむ", + "sidebar.action.expand": "サイドバーを展開", + "sidebar.action.createFolder": "フォルダーを作成", + "sidebar.action.renameFolder": "フォルダー名を変更", + "sidebar.action.deleteFolder": "フォルダーを削除", + "sidebar.action.revealFolderMenu": "Finder で表示", + "sidebar.action.copyFolderPathMenu": "フォルダパスをコピー", + "sidebar.action.renameFolderMenu": "フォルダー名を変更...", + "sidebar.action.deleteFolderMenu": "フォルダーを削除...", + "sidebar.folder.name": "フォルダー名", + "sidebar.folder.newName": "新しいフォルダー名", + "sidebar.folder.expand": "{name} を展開", + "sidebar.folder.collapse": "{name}を折りたたむ", + "sidebar.section.name": "セクション名", + "sidebar.section.showInSidebar": "サイドバーに表示", + "sidebar.section.toggle": "{label}を切り替える", + "sidebar.disabled.comingSoon": "近日公開予定", + "noteList.title.archive": "アーカイブ", + "noteList.title.changes": "変更点", + "noteList.title.inbox": "受信トレイ", + "noteList.title.history": "履歴", + "noteList.title.view": "表示", + "noteList.title.notes": "ノート", + "noteList.searchPlaceholder": "ノートを検索…", + "noteList.searchAction": "メモを検索", + "noteList.createNote": "新しいノートを作成", + "noteList.empty.changesError": "変更の読み込みに失敗しました:{error}", + "noteList.empty.noChanges": "保留中の変更はありません", + "noteList.empty.noArchived": "アーカイブされたノートはありません", + "noteList.empty.noMatching": "一致するノートはありません", + "noteList.empty.allOrganized": "すべてのノートが整理されています", + "noteList.empty.noNotes": "ノートが見つかりません", + "noteList.empty.noMatchingItems": "一致するアイテムはありません", + "noteList.empty.noRelatedItems": "関連するアイテムはありません", + "noteList.sort.modified": "更新日時", + "noteList.sort.created": "作成日時", + "noteList.sort.title": "タイトル", + "noteList.sort.status": "ステータス", + "noteList.sort.by": "{label}で並べ替え", + "noteList.sort.menu": "{label}で並べ替え", + "noteList.sort.ascending": "昇順", + "noteList.sort.descending": "降順", + "noteList.filter.open": "未解決", + "noteList.filter.archived": "アーカイブ済み", + "noteList.filter.week": "週", + "noteList.filter.month": "月", + "noteList.filter.all": "すべて", + "noteList.properties.customizeColumns": "列をカスタマイズ", + "noteList.properties.customizeAllColumns": "すべてのノートの列をカスタマイズ", + "noteList.properties.customizeInboxColumns": "受信トレイの列をカスタマイズ", + "noteList.properties.customizeViewColumns": "{name} の列をカスタマイズ", + "noteList.properties.showInNoteList": "ノートリストに表示", + "noteList.properties.searchPlaceholder": "プロパティを検索...", + "noteList.properties.searchLabel": "ノートリストのプロパティを検索", + "noteList.properties.noMatches": "この検索に一致するプロパティはありません。", + "noteList.properties.reorder": "{name}を並べ替える", + "noteList.changes.restoreNote": "ノートを復元", + "noteList.changes.discardChanges": "変更を破棄", + "noteList.changes.restoreDescription": "{file}をGitから復元しますか?", + "noteList.changes.discardDescription": "{file}への変更を破棄しますか?この操作は取り消せません。", + "noteList.changes.thisFile": "このファイル", + "noteList.changes.restore": "復元", + "noteList.changes.discard": "破棄", + "noteList.changes.cancel": "キャンセル", + "editor.empty.selectNote": "ノートを選択して編集を開始", + "editor.empty.shortcuts": "{quickOpen} で検索 · {newNote} で作成", + "editor.raw.label": "Raw エディター", + "editor.find.findLabel": "検索", + "editor.find.findPlaceholder": "検索", + "editor.find.replaceLabel": "置き換え", + "editor.find.replacePlaceholder": "置き換え", + "editor.find.matchCount": "{current} / {total}", + "editor.find.noMatches": "一致する項目はありません", + "editor.find.invalidRegex": "無効な正規表現", + "editor.find.regexMustMatchText": "正規表現はテキストと一致する必要があります", + "editor.find.previousMatch": "前の一致", + "editor.find.nextMatch": "次の一致", + "editor.find.showReplace": "置換を表示", + "editor.find.hideReplace": "置換を非表示", + "editor.find.regex": "正規表現を使用", + "editor.find.matchCase": "大文字と小文字を区別", + "editor.find.close": "検索を閉じる", + "editor.find.replace": "置換", + "editor.find.replaceAll": "すべて", + "editor.toolbar.rawReturn": "エディターに戻る", + "editor.toolbar.rawOpen": "RAWエディターを開く", + "editor.toolbar.centerLayout": "ノートの中央揃えレイアウトに切り替える", + "editor.toolbar.leftLayout": "左揃えのノートレイアウトに切り替える", + "editor.toolbar.removeFavorite": "お気に入りから削除", + "editor.toolbar.addFavorite": "お気に入りに追加", + "editor.toolbar.markUnorganized": "ノートを「未整理」に設定", + "editor.toolbar.markOrganized": "ノートを整理済みとして設定", + "editor.toolbar.noDiff": "まだ差分は利用できません", + "editor.toolbar.loadingDiff": "差分を読み込み中", + "editor.toolbar.showDiff": "現在の差分を表示", + "editor.toolbar.openAi": "AIパネルを開く", + "editor.toolbar.closeAi": "AIパネルを閉じる", + "editor.toolbar.restoreArchived": "このアーカイブされたノートを復元する", + "editor.toolbar.archive": "このノートをアーカイブする", + "editor.toolbar.delete": "このノートを削除", + "editor.toolbar.revealFile": "Finderで表示", + "editor.toolbar.copyFilePath": "ファイルパスをコピー", + "editor.toolbar.openProperties": "プロパティパネルを開く", + "editor.filename.rename": "ファイル名を変更", + "editor.filename.renameToTitle": "タイトルと一致するようにファイル名を変更する", + "editor.filename.trigger": "ファイル名:{filename}。名前を変更するにはEnterキーを押してください。", + "editor.banner.archived": "アーカイブ済み", + "editor.banner.unarchive": "アーカイブから復元", + "editor.banner.conflict": "このノートにはマージの競合があります", + "editor.banner.keepMine": "自分のものを保持", + "editor.banner.keepMineTooltip": "自分のローカルバージョンを保持する", + "editor.banner.keepTheirs": "相手のものを保持", + "editor.banner.keepTheirsTooltip": "リモートバージョンを保持", + "inspector.title.properties": "プロパティ", + "inspector.title.propertiesShortcut": "プロパティ(⌘⇧I)", + "inspector.title.closePropertiesShortcut": "プロパティを閉じる(⌘⇧I)", + "inspector.empty.noNoteSelected": "ノートが選択されていません", + "inspector.empty.noProperties": "このノートにはまだプロパティがありません", + "inspector.empty.initializeProperties": "プロパティを初期化", + "inspector.empty.invalidProperties": "無効なプロパティ", + "inspector.empty.fixInEditor": "エディターで修正", + "inspector.properties.addProperty": "プロパティを追加", + "inspector.properties.deleteProperty": "プロパティを削除", + "inspector.properties.none": "なし", + "inspector.properties.missingType": "タイプがありません", + "inspector.properties.missingTypeAria": "タイプ {type} がありません。クリックしてこのタイプを作成してください。", + "inspector.properties.searchTypes": "タイプを検索...", + "inspector.properties.noMatchingTypes": "一致するタイプはありません", + "inspector.properties.yes": "はい", + "inspector.properties.no": "いいえ", + "inspector.properties.pickDate": "日付を選択…", + "inspector.properties.valuePlaceholder": "値", + "inspector.properties.propertyName": "プロパティ名", + "inspector.relationship.add": "追加", + "inspector.relationship.addRelationship": "+ 関係を追加", + "inspector.relationship.name": "関係名", + "inspector.relationship.noteTitle": "ノートのタイトル", + "inspector.relationship.createAndOpen": "作成して開く", + "inspector.info.title": "情報", + "inspector.info.modified": "更新日時", + "inspector.info.created": "作成日時", + "inspector.info.words": "単語数", + "inspector.info.size": "サイズ", + "update.available": "利用可能", + "update.releaseNotes": "リリースノート", + "update.updateNow": "今すぐ更新", + "update.dismiss": "却下", + "update.downloading": "Tolaria {version} をダウンロード中...", + "update.readyRestart": "準備完了 - 適用するには再起動してください", + "update.restartNow": "今すぐ再起動", + "status.update.check": "更新を確認", + "status.zoom.reset": "ズームレベルをリセット", + "status.feedback.contribute": "Tolaria に貢献する", + "status.feedback.label": "貢献する", + "status.theme.light": "ライトモードに切り替える", + "status.theme.dark": "ダークモードに切り替える", + "status.settings.open": "設定を開く", + "status.build.unknown": "b?", + "status.vault.switch": "Vault を切り替える", + "status.vault.default": "Vault", + "status.vault.createEmpty": "空の Vault を作成", + "status.vault.openLocal": "ローカルフォルダーを開く", + "status.vault.cloneGit": "Gitリポジトリをクローンする", + "status.vault.cloneGettingStarted": "Getting Started Vault をクローンする", + "status.vault.notFound": "ボールトが見つかりません:{path}", + "status.vault.remove": "{label}をリストから削除", + "status.remote.noneConfigured": "リモートが設定されていません", + "status.remote.inSync": "リモートと同期済み", + "status.remote.aheadTitle": "リモートより{count}件先行するコミット{plural}", + "status.remote.behindTitle": "リモートより{count}件遅れのコミット{plural}", + "status.remote.ahead": "{count} 件先行", + "status.remote.behind": "{count} 件遅れ", + "status.remote.add": "この Vault にリモートを追加", + "status.remote.none": "リモートなし", + "status.remote.noneDescription": "この Git Vault にはリモートが設定されていません。リモートを追加するまで、コミットはローカルに保持されます。", + "status.sync.syncing": "同期中…", + "status.sync.conflict": "競合", + "status.sync.failed": "同期に失敗しました", + "status.sync.pullRequired": "プルが必要", + "status.sync.notSynced": "同期されていません", + "status.sync.justNow": "たった今同期されました", + "status.sync.minutesAgo": "{minutes}分前に同期済み", + "status.sync.resolveConflicts": "マージの競合を解決する", + "status.sync.inProgress": "同期中", + "status.sync.pullAndPush": "リモートからプルしてプッシュ", + "status.sync.retry": "同期を再試行", + "status.sync.now": "今すぐ同期", + "status.sync.synced": "同期済み", + "status.sync.conflicts": "競合", + "status.sync.error": "エラー", + "status.sync.status": "ステータス:{status}", + "status.sync.pull": "プル", + "status.conflict.count": "{count}件の競合{plural}", + "status.offline.title": "インターネット接続なし", + "status.offline.label": "オフライン", + "status.changes.view": "保留中の変更を表示", + "status.changes.label": "変更", + "status.commit.local": "変更をローカルでコミット", + "status.commit.push": "変更をコミットしてプッシュする", + "status.commit.label": "コミット", + "status.commit.openOnGitHub": "GitHub でコミット {hash} を開く", + "status.git.disabledTooltip": "このボールトでは Git が無効になっています。Gitを初期化して、履歴、同期、コミット、および変更ビューを有効にします。", + "status.git.disabled": "Git が無効", + "status.history.onlyGit": "履歴は、Gitが有効なボルトでのみ利用可能です。", + "status.history.open": "変更履歴を開く", + "status.history.label": "履歴", + "status.mcp.notConnected": "外部AIツールが接続されていません — クリックして設定してください", + "status.mcp.unknown": "MCPステータス不明", + "status.claude.missing": "Claude Codeがありません", + "status.claude.label": "Claude Code", + "status.claude.install": "Claude Codeが見つかりません — クリックしてインストール", + "status.ai.noAgents": "AIエージェントが検出されませんでした", + "status.ai.noAgentsTooltip": "AIエージェントが検出されませんでした — クリックして設定の詳細を表示", + "status.ai.selectedMissing": "{agent}が選択されていますが、インストールされていません — クリックして設定の詳細を表示", + "status.ai.defaultAgent": "デフォルトのAIエージェント:{agent}{version}", + "status.ai.restoreDetails": "{base}. {summary} — クリックして復元の詳細を表示", + "status.ai.withGuidance": "{base}. {summary}", + "status.ai.active": "アクティブなAIエージェント:{agent}", + "status.ai.unavailable": "選択したAIエージェントは利用できません:{agent}", + "status.ai.install": "インストール", + "status.ai.installAgent": "{agent} をインストール", + "status.ai.vaultGuidance": "Vault ガイダンス", + "status.ai.restoreGuidance": "Tolaria AIガイダンスを復元", + "status.ai.openOptions": "AIエージェントのオプションを開く", + "pulse.title": "履歴", + "pulse.today": "今日", + "pulse.yesterday": "昨日", + "pulse.commitCount": "{count} {label}", + "pulse.commitSingular": "コミット", + "pulse.commitPlural": "コミット", + "pulse.openOnGitHub": "GitHubで開く", + "pulse.expandFiles": "ファイルを展開", + "pulse.collapseFiles": "ファイルを折りたたむ", + "pulse.noActivity": "まだアクティビティはありません", + "pulse.emptyDescription": "変更をコミットして、Vaultの履歴を表示します", + "pulse.retry": "再試行", + "pulse.loadingActivity": "アクティビティを読み込み中…", + "pulse.loading": "読み込み中…", + "pulse.loadError": "アクティビティの読み込みに失敗しました", + "command.switchLanguage": "言語を{language}に切り替える", + "locale.itIT": "イタリア語", + "locale.frFR": "フランス語", + "locale.deDE": "ドイツ語", + "locale.ruRU": "ロシア語", + "locale.esES": "スペイン語(スペイン)", + "locale.ptBR": "Portuguese (Brazil)", + "locale.ptPT": "葡萄牙語(ポルトガル)", + "locale.es419": "西班牙语(拉丁美洲)", + "locale.zhCN": "简体中文", + "locale.jaJP": "日本語", + "locale.koKR": "韩国語" +} diff --git a/src/lib/locales/ko-KR.json b/src/lib/locales/ko-KR.json new file mode 100644 index 00000000..4b33bd8f --- /dev/null +++ b/src/lib/locales/ko-KR.json @@ -0,0 +1,405 @@ +{ + "command.noMatches": "일치하는 명령 없음", + "command.palettePlaceholder": "명령어를 입력하세요...", + "command.footerNavigate": "↑↓ 탐색", + "command.footerSelect": "↵ 선택", + "command.footerClose": "esc 닫기", + "command.footerSend": "↵ 보내기", + "command.aiMode": "{agent} 모드", + "command.openSettings": "설정 열기", + "command.openSettings.keywords": "preferences config", + "command.openLanguageSettings": "언어 설정 열기", + "command.openLanguageSettings.keywords": "언어 로케일 i18n 국제화 현지화 영어 이탈리아어 프랑스어 독일어 러시아어 스페인어 포르투갈어 중국어 일본어 한국어 中文", + "command.useSystemLanguage": "시스템 언어 사용", + "command.openH1Setting": "H1 자동 이름 변경 설정 열기", + "command.contribute": "기여하기", + "command.checkUpdates": "업데이트 확인", + "command.group.navigation": "탐색", + "command.group.note": "메모", + "command.group.git": "Git", + "command.group.view": "보기", + "command.group.settings": "설정", + "command.navigation.searchNotes": "노트 검색", + "command.navigation.goAllNotes": "모든 노트로 이동", + "command.navigation.goArchived": "보관 처리됨으로 이동", + "command.navigation.goChanges": "변경 사항으로 이동", + "command.navigation.goHistory": "이력으로 이동", + "command.navigation.goBack": "뒤로 가기", + "command.navigation.goForward": "앞으로 이동", + "command.navigation.goInbox": "받은 편지함으로 이동", + "command.navigation.renameFolder": "폴더 이름 변경", + "command.navigation.deleteFolder": "폴더 삭제", + "command.navigation.showOpenNotes": "열린 노트 표시", + "command.navigation.showArchivedNotes": "보관된 노트 표시", + "command.navigation.listType": "{type} 목록", + "command.note.newNote": "새 노트", + "command.note.newType": "새 유형", + "command.note.newTypedNote": "새 {type}", + "command.note.saveNote": "메모 저장", + "command.note.findInNote": "노트에서 찾기", + "command.note.replaceInNote": "노트에서 바꾸기", + "command.note.deleteNote": "메모 삭제", + "command.note.archiveNote": "메모 보관", + "command.note.unarchiveNote": "메모 보관 해제", + "command.note.addFavorite": "즐겨찾기에 추가", + "command.note.removeFavorite": "즐겨찾기에서 삭제", + "command.note.markOrganized": "정리됨으로 표시", + "command.note.markUnorganized": "정리되지 않음으로 표시", + "command.note.restoreDeleted": "삭제된 노트 복원", + "command.note.setIcon": "노트 아이콘 설정", + "command.note.removeIcon": "노트 아이콘 제거", + "command.note.changeType": "노트 유형 변경…", + "command.note.moveToFolder": "노트를 폴더로 이동…", + "command.note.openNewWindow": "새 창에서 열기", + "command.git.initialize": "현재 Vault에 대해 Git 초기화", + "command.git.commitPush": "커밋 및 푸시", + "command.git.addRemote": "현재 Vault에 원격 저장소 추가", + "command.git.pull": "원격에서 가져오기", + "command.git.resolveConflicts": "충돌 해결", + "command.git.viewChanges": "보류 중인 변경 사항 보기", + "command.view.editorOnly": "편집기만", + "command.view.editorNoteList": "편집기 + 노트 목록", + "command.view.fullLayout": "전체 레이아웃", + "command.view.toggleProperties": "속성 패널 켜기/끄기", + "command.view.toggleDiff": "차이 모드 전환", + "command.view.toggleRaw": "Raw Editor 켜기/끄기", + "command.view.leftLayout": "왼쪽 정렬 노트 레이아웃 사용", + "command.view.centerLayout": "중앙 정렬 노트 레이아웃 사용", + "command.view.toggleAiPanel": "AI 패널 켜기/끄기", + "command.view.newAiChat": "새 AI 채팅", + "command.view.toggleBacklinks": "백링크 켜기/끄기", + "command.view.zoomIn": "확대({zoom}%)", + "command.view.zoomOut": "축소({zoom}%)", + "command.view.resetZoom": "확대/축소 재설정", + "command.settings.createEmptyVault": "빈 Vault 생성…", + "command.settings.openVault": "Vault 열기…", + "command.settings.removeVault": "목록에서 Vault 제거", + "command.settings.restoreGettingStarted": "Getting Started Vault 복원", + "command.settings.manageExternalAi": "외부 AI 도구 관리…", + "command.settings.setupExternalAi": "외부 AI 도구 설정…", + "command.settings.reloadVault": "Vault 다시 로드", + "command.settings.repairVault": "Vault 복구", + "command.ai.openAgents": "AI 에이전트 열기", + "command.ai.restoreGuidance": "Tolaria AI 가이드ANCE 복원", + "command.ai.switchToAgent": "AI 에이전트를 {agent}(으)로 전환", + "command.ai.switchDefault": "기본 AI 에이전트 전환", + "command.ai.switchDefaultWithAgent": "기본 AI 에이전트({agent})로 전환", + "settings.title": "설정", + "settings.close": "설정 닫기", + "settings.sync.title": "동기화 및 업데이트", + "settings.sync.description": "백그라운드 풀링 및 Tolaria가 팔로우하는 업데이트 피드를 구성하세요. Stable은 수동으로 승격된 릴리스만 받으며, Alpha는 main으로의 모든 푸시를 따릅니다.", + "settings.pullInterval": "풀 간격(분)", + "settings.releaseChannel": "릴리스 채널", + "settings.releaseStable": "Stable", + "settings.releaseAlpha": "Alpha", + "settings.appearance.title": "외관", + "settings.appearance.description": "Tolaria chrome, 편집기 표면, 메뉴, 대화 상자에 사용되는 앱 색상 모드를 선택하세요.", + "settings.theme.label": "테마", + "settings.theme.light": "라이트", + "settings.theme.dark": "Dark", + "settings.language.title": "언어", + "settings.language.description": "Tolaria chrome의 표시 언어를 선택하세요. 해당 언어가 지원되는 경우 시스템은 macOS를 따릅니다. 지원되지 않는 경우 영어가 기본 언어로 설정됩니다.", + "settings.language.label": "표시 언어", + "settings.language.system": "시스템 ({language})", + "settings.language.summary": "번역이 누락된 경우 영어가 기본으로 설정되므로, 부분적으로만 번역된 로케일도 계속 사용할 수 있습니다.", + "settings.autogit.title": "AutoGit", + "settings.autogit.description.enabled": "편집이 일시 중지되거나 앱이 더 이상 활성 상태가 아닐 때 보수적인 Git 체크포인트를 자동으로 생성합니다.", + "settings.autogit.description.disabled": "현재 보관소가 Git 지원 상태가 될 때까지 AutoGit을 사용할 수 없습니다. 먼저 이 보관소에 대해 Git을 초기화하세요.", + "settings.autogit.enable": "AutoGit 활성화", + "settings.autogit.enableDescription": "이 기능을 활성화하면, Tolaria는 유휴 시간 중 일시 중지되거나 앱이 비활성화된 후 저장된 로컬 변경 사항을 자동으로 커밋하고 푸시합니다.", + "settings.autogit.idleThreshold": "유휴 시간 임계값(초)", + "settings.autogit.inactiveThreshold": "앱 비활성 유예 기간(초)", + "settings.titles.title": "제목 및 파일 이름", + "settings.titles.description": "Tolaria가 제목 없는 노트의 파일 이름을 첫 번째 H1 제목에서 자동으로 동기화할지 여부를 선택하세요.", + "settings.titles.autoRename": "첫 번째 H1 제목으로 제목 없는 노트 파일 이름 자동 변경", + "settings.titles.autoRenameDescription": "이 옵션을 활성화하면 Tolaria는 첫 번째 H1이 실제 제목이 되는 즉시 제목 없는 노트 파일의 이름을 변경합니다. 이 옵션을 끄면 브레드크럼 바에서 수동으로 파일 이름을 변경할 때까지 파일 이름이 변경되지 않습니다.", + "settings.aiAgents.title": "AI 에이전트", + "settings.aiAgents.description": "Tolaria가 AI 패널과 명령 팔레트에서 사용하는 CLI AI 에이전트를 선택하세요.", + "settings.aiAgents.default": "기본 AI 에이전트", + "settings.aiAgents.installed": "설치됨", + "settings.aiAgents.missing": "없음", + "settings.aiAgents.ready": "{agent}{version}을(를) 사용할 준비가 되었습니다.", + "settings.aiAgents.notInstalled": "{agent}이(가) 아직 설치되지 않았습니다. 지금 선택하고 나중에 설치하실 수 있습니다.", + "settings.workflow.title": "워크플로", + "settings.workflow.description": "Tolaria에서 받은 편지함 워크플로를 표시할지 여부와, 사용자가 항목을 분류하는 동안 Tolaria가 항목을 이동하는 방식을 선택하세요.", + "settings.workflow.explicit": "메모를 명확하게 정리", + "settings.workflow.explicitDescription": "이 옵션을 활성화하면 수신함 섹션에 정리되지 않은 메모가 표시되며, 토글 버튼을 사용하여 메모를 정리됨으로 표시할 수 있습니다.", + "settings.workflow.autoAdvance": "다음 받은 편지함 항목으로 자동 이동", + "settings.workflow.autoAdvanceDescription": "이 옵션을 활성화하면, 받은 편지함 메모를 정리됨으로 표시하면 즉시 다음으로 보이는 받은 편지함 메모가 열립니다.", + "settings.privacy.title": "개인정보 보호 및 텔레메트리", + "settings.privacy.description": "익명 데이터는 버그를 수정하고 Tolaria를 개선하는 데 도움이 됩니다. Vault 콘텐츠, 노트 제목 또는 파일 경로는 절대 전송되지 않습니다.", + "settings.privacy.crashReporting": "크래시 보고", + "settings.privacy.crashReportingDescription": "익명 오류 보고서 전송", + "settings.privacy.analytics": "사용 분석", + "settings.privacy.analyticsDescription": "익명의 사용 패턴 공유", + "settings.footerShortcut": "⌘, 설정 열기", + "settings.cancel": "취소", + "settings.save": "저장", + "common.cancel": "취소", + "locale.en": "English", + "sidebar.nav.inbox": "받은 편지함", + "sidebar.nav.allNotes": "모든 노트", + "sidebar.nav.archive": "보관", + "sidebar.group.favorites": "즐겨찾기", + "sidebar.group.views": "조회수", + "sidebar.group.types": "유형", + "sidebar.group.folders": "폴더", + "sidebar.action.createView": "보기 생성", + "sidebar.action.editView": "보기 편집", + "sidebar.action.deleteView": "보기 삭제", + "sidebar.action.customizeSections": "섹션 사용자 지정", + "sidebar.action.renameSection": "섹션 이름 변경…", + "sidebar.action.customizeIconColor": "아이콘 및 색상 사용자 지정…", + "sidebar.action.createType": "새 유형 생성", + "sidebar.action.collapse": "사이드바 접기", + "sidebar.action.expand": "사이드바 펼치기", + "sidebar.action.createFolder": "폴더 만들기", + "sidebar.action.renameFolder": "폴더 이름 변경", + "sidebar.action.deleteFolder": "폴더 삭제", + "sidebar.action.revealFolderMenu": "Finder에서 표시", + "sidebar.action.copyFolderPathMenu": "폴더 경로 복사", + "sidebar.action.renameFolderMenu": "폴더 이름 변경...", + "sidebar.action.deleteFolderMenu": "폴더 삭제...", + "sidebar.folder.name": "폴더 이름", + "sidebar.folder.newName": "새 폴더 이름", + "sidebar.folder.expand": "{name} 펼치기", + "sidebar.folder.collapse": "{name} 접기", + "sidebar.section.name": "섹션 이름", + "sidebar.section.showInSidebar": "사이드바에 표시", + "sidebar.section.toggle": "{label} 토글", + "sidebar.disabled.comingSoon": "서비스 예정", + "noteList.title.archive": "보관", + "noteList.title.changes": "변경 사항", + "noteList.title.inbox": "받은 편지함", + "noteList.title.history": "이력", + "noteList.title.view": "보기", + "noteList.title.notes": "메모", + "noteList.searchPlaceholder": "메모 검색...", + "noteList.searchAction": "메모 검색", + "noteList.createNote": "새 노트 만들기", + "noteList.empty.changesError": "변경 사항 로드 실패: {error}", + "noteList.empty.noChanges": "대기 중인 변경 사항 없음", + "noteList.empty.noArchived": "보관된 노트 없음", + "noteList.empty.noMatching": "일치하는 노트가 없습니다", + "noteList.empty.allOrganized": "모든 노트가 정리되었습니다", + "noteList.empty.noNotes": "노트를 찾을 수 없습니다", + "noteList.empty.noMatchingItems": "일치하는 항목 없음", + "noteList.empty.noRelatedItems": "관련 항목 없음", + "noteList.sort.modified": "수정됨", + "noteList.sort.created": "생성됨", + "noteList.sort.title": "제목", + "noteList.sort.status": "상태", + "noteList.sort.by": "{label} 기준으로 정렬", + "noteList.sort.menu": "{label} 정렬", + "noteList.sort.ascending": "오름차순", + "noteList.sort.descending": "내림차순", + "noteList.filter.open": "열기", + "noteList.filter.archived": "보관됨", + "noteList.filter.week": "주", + "noteList.filter.month": "월", + "noteList.filter.all": "모두", + "noteList.properties.customizeColumns": "열 사용자 지정", + "noteList.properties.customizeAllColumns": "모든 노트 열 사용자 지정", + "noteList.properties.customizeInboxColumns": "받은 편지함 열 사용자 지정", + "noteList.properties.customizeViewColumns": "{name} 열 사용자 지정", + "noteList.properties.showInNoteList": "노트 목록에 표시", + "noteList.properties.searchPlaceholder": "속성 검색...", + "noteList.properties.searchLabel": "노트 목록 속성 검색", + "noteList.properties.noMatches": "이 검색 조건과 일치하는 속성이 없습니다.", + "noteList.properties.reorder": "{name} 재정렬", + "noteList.changes.restoreNote": "노트 복원", + "noteList.changes.discardChanges": "변경 사항 취소", + "noteList.changes.restoreDescription": "Git에서 {file}을(를) 복원하시겠습니까?", + "noteList.changes.discardDescription": "{file}에 대한 변경 사항을 취소하시겠습니까? 이 작업은 취소할 수 없습니다.", + "noteList.changes.thisFile": "이 파일", + "noteList.changes.restore": "복원", + "noteList.changes.discard": "취소", + "noteList.changes.cancel": "취소", + "editor.empty.selectNote": "편집을 시작하려면 노트를 선택하세요.", + "editor.empty.shortcuts": "{quickOpen}으로 검색 · {newNote}으로 생성", + "editor.raw.label": "Raw 편집기", + "editor.find.findLabel": "찾기", + "editor.find.findPlaceholder": "찾기", + "editor.find.replaceLabel": "Replace", + "editor.find.replacePlaceholder": "Replace", + "editor.find.matchCount": "{current} / {total}", + "editor.find.noMatches": "일치하는 항목 없음", + "editor.find.invalidRegex": "유효하지 않은 정규 표현식", + "editor.find.regexMustMatchText": "정규 표현식은 텍스트와 일치해야 합니다.", + "editor.find.previousMatch": "이전 일치 항목", + "editor.find.nextMatch": "다음 일치 항목", + "editor.find.showReplace": "대체 항목 표시", + "editor.find.hideReplace": "대체 항목 숨기기", + "editor.find.regex": "정규 표현식 사용", + "editor.find.matchCase": "대소문자 구분", + "editor.find.close": "찾기 닫기", + "editor.find.replace": "바꾸기", + "editor.find.replaceAll": "모두", + "editor.toolbar.rawReturn": "편집기로 돌아가기", + "editor.toolbar.rawOpen": "Raw 편집기 열기", + "editor.toolbar.centerLayout": "노트 중앙 정렬 레이아웃으로 전환", + "editor.toolbar.leftLayout": "왼쪽 정렬 노트 레이아웃으로 전환", + "editor.toolbar.removeFavorite": "즐겨찾기에서 삭제", + "editor.toolbar.addFavorite": "즐겨찾기에 추가", + "editor.toolbar.markUnorganized": "노트를 '정리되지 않음'으로 설정", + "editor.toolbar.markOrganized": "노트를 '정리됨'으로 설정", + "editor.toolbar.noDiff": "아직 사용할 수 있는 diff가 없습니다", + "editor.toolbar.loadingDiff": "차이 내역 로드 중", + "editor.toolbar.showDiff": "현재 diff 표시", + "editor.toolbar.openAi": "AI 패널 열기", + "editor.toolbar.closeAi": "AI 패널 닫기", + "editor.toolbar.restoreArchived": "이 보관된 노트 복원", + "editor.toolbar.archive": "이 노트 보관", + "editor.toolbar.delete": "이 노트 삭제", + "editor.toolbar.revealFile": "Finder에서 표시", + "editor.toolbar.copyFilePath": "파일 경로 복사", + "editor.toolbar.openProperties": "속성 패널 열기", + "editor.filename.rename": "파일 이름 변경", + "editor.filename.renameToTitle": "파일 이름을 제목과 일치하도록 변경", + "editor.filename.trigger": "파일 이름 {filename}. 이름을 바꾸려면 Enter 키를 누르세요.", + "editor.banner.archived": "보관됨", + "editor.banner.unarchive": "보관 해제", + "editor.banner.conflict": "이 노트에는 병합 충돌이 있습니다.", + "editor.banner.keepMine": "내 버전 유지", + "editor.banner.keepMineTooltip": "내 로컬 버전 유지", + "editor.banner.keepTheirs": "상대방 버전 유지", + "editor.banner.keepTheirsTooltip": "원격 버전 유지", + "inspector.title.properties": "속성", + "inspector.title.propertiesShortcut": "속성(⌘⇧I)", + "inspector.title.closePropertiesShortcut": "속성 닫기 (⌘⇧I)", + "inspector.empty.noNoteSelected": "선택한 노트 없음", + "inspector.empty.noProperties": "이 노트에는 아직 속성이 없습니다.", + "inspector.empty.initializeProperties": "속성 초기화", + "inspector.empty.invalidProperties": "유효하지 않은 속성", + "inspector.empty.fixInEditor": "편집기에서 수정", + "inspector.properties.addProperty": "속성 추가", + "inspector.properties.deleteProperty": "속성 삭제", + "inspector.properties.none": "없음", + "inspector.properties.missingType": "유형 누락", + "inspector.properties.missingTypeAria": "{type} 유형이 없습니다. 클릭하여 이 유형을 생성하세요.", + "inspector.properties.searchTypes": "유형 검색...", + "inspector.properties.noMatchingTypes": "일치하는 유형 없음", + "inspector.properties.yes": "예", + "inspector.properties.no": "아니요", + "inspector.properties.pickDate": "날짜 선택…", + "inspector.properties.valuePlaceholder": "값", + "inspector.properties.propertyName": "속성 이름", + "inspector.relationship.add": "추가", + "inspector.relationship.addRelationship": "+ 관계 추가", + "inspector.relationship.name": "관계 이름", + "inspector.relationship.noteTitle": "노트 제목", + "inspector.relationship.createAndOpen": "생성 및 열기", + "inspector.info.title": "정보", + "inspector.info.modified": "수정됨", + "inspector.info.created": "생성됨", + "inspector.info.words": "단어 수", + "inspector.info.size": "크기", + "update.available": "사용 가능", + "update.releaseNotes": "릴리스 노트", + "update.updateNow": "지금 업데이트", + "update.dismiss": "닫기", + "update.downloading": "Tolaria {version} 다운로드 중...", + "update.readyRestart": "준비 완료 - 적용하려면 다시 시작하세요", + "update.restartNow": "지금 다시 시작", + "status.update.check": "업데이트 확인", + "status.zoom.reset": "확대/축소 수준 재설정", + "status.feedback.contribute": "Tolaria에 기여하기", + "status.feedback.label": "기여하기", + "status.theme.light": "라이트 모드로 전환", + "status.theme.dark": "다크 모드로 전환", + "status.settings.open": "설정 열기", + "status.build.unknown": "b?", + "status.vault.switch": "Vault 전환", + "status.vault.default": "Vault", + "status.vault.createEmpty": "빈 보관함 만들기", + "status.vault.openLocal": "로컬 폴더 열기", + "status.vault.cloneGit": "Git 리포지토리 복제", + "status.vault.cloneGettingStarted": "Getting Started Vault 복제", + "status.vault.notFound": "Vault를 찾을 수 없음: {path}", + "status.vault.remove": "목록에서 {label} 제거", + "status.remote.noneConfigured": "구성된 원격 없음", + "status.remote.inSync": "원격과 동기화됨", + "status.remote.aheadTitle": "원격 브랜치보다 {count}건의 커밋{plural} 앞서 있음", + "status.remote.behindTitle": "원격 브랜치보다 {count}개 커밋{plural} 뒤처짐", + "status.remote.ahead": "{count}개 앞서 있음", + "status.remote.behind": "{count}개 뒤처짐", + "status.remote.add": "이 보관소에 원격 저장소 추가", + "status.remote.none": "원격 없음", + "status.remote.noneDescription": "이 Git 보관소에는 원격 리포지토리가 구성되어 있지 않습니다. 원격 보관소를 추가하기 전까지는 커밋이 로컬에만 유지됩니다.", + "status.sync.syncing": "동기화 중...", + "status.sync.conflict": "충돌", + "status.sync.failed": "동기화 실패", + "status.sync.pullRequired": "풀 필요", + "status.sync.notSynced": "동기화되지 않음", + "status.sync.justNow": "방금 동기화됨", + "status.sync.minutesAgo": "{minutes}분 전에 동기화됨", + "status.sync.resolveConflicts": "병합 충돌 해결", + "status.sync.inProgress": "동기화 진행 중", + "status.sync.pullAndPush": "원격에서 가져오기 및 푸시", + "status.sync.retry": "동기화 재시도", + "status.sync.now": "지금 동기화", + "status.sync.synced": "동기화 완료", + "status.sync.conflicts": "충돌", + "status.sync.error": "오류", + "status.sync.status": "상태: {status}", + "status.sync.pull": "풀", + "status.conflict.count": "충돌 {count}건{plural}", + "status.offline.title": "인터넷 연결 없음", + "status.offline.label": "오프라인", + "status.changes.view": "대기 중인 변경 사항 보기", + "status.changes.label": "변경 사항", + "status.commit.local": "로컬에서 변경 사항 커밋", + "status.commit.push": "변경 사항 커밋 및 푸시", + "status.commit.label": "커밋", + "status.commit.openOnGitHub": "GitHub에서 커밋 {hash} 열기", + "status.git.disabledTooltip": "이 보관소에서는 Git이 비활성화되어 있습니다. Git을 초기화하여 기록, 동기화, 커밋, 변경 보기 기능을 활성화하세요.", + "status.git.disabled": "Git 비활성화됨", + "status.history.onlyGit": "이력 기능은 Git이 활성화된 보관함에서만 사용할 수 있습니다.", + "status.history.open": "변경 내역 열기", + "status.history.label": "이력", + "status.mcp.notConnected": "외부 AI 도구가 연결되지 않음 — 클릭하여 설정하세요", + "status.mcp.unknown": "MCP 상태 알 수 없음", + "status.claude.missing": "Claude Code 누락", + "status.claude.label": "Claude Code", + "status.claude.install": "Claude Code를 찾을 수 없습니다 — 클릭하여 설치하세요", + "status.ai.noAgents": "AI 에이전트 감지되지 않음", + "status.ai.noAgentsTooltip": "AI 에이전트가 감지되지 않음 — 클릭하여 설정 세부 정보 확인", + "status.ai.selectedMissing": "{agent}이(가) 선택되었지만 설치되지 않았습니다 — 클릭하여 설정 세부 정보를 확인하세요", + "status.ai.defaultAgent": "기본 AI 에이전트: {agent}{version}", + "status.ai.restoreDetails": "{base}. {summary} — 복원 세부 정보를 보려면 클릭하세요.", + "status.ai.withGuidance": "{base}. {summary}", + "status.ai.active": "활성 AI 에이전트: {agent}", + "status.ai.unavailable": "선택한 AI 에이전트를 사용할 수 없음: {agent}", + "status.ai.install": "설치", + "status.ai.installAgent": "{agent} 설치", + "status.ai.vaultGuidance": "Vault 가이드", + "status.ai.restoreGuidance": "Tolaria AI 가이드ANCE 복원", + "status.ai.openOptions": "AI 에이전트 옵션 열기", + "pulse.title": "이력", + "pulse.today": "오늘", + "pulse.yesterday": "어제", + "pulse.commitCount": "{count} {label}", + "pulse.commitSingular": "커밋", + "pulse.commitPlural": "커밋", + "pulse.openOnGitHub": "GitHub에서 열기", + "pulse.expandFiles": "파일 펼치기", + "pulse.collapseFiles": "파일 접기", + "pulse.noActivity": "아직 활동이 없습니다", + "pulse.emptyDescription": "보관함 기록을 보려면 변경 사항을 커밋하세요.", + "pulse.retry": "재시도", + "pulse.loadingActivity": "활동 로드 중…", + "pulse.loading": "로드 중…", + "pulse.loadError": "활동 로드 실패", + "command.switchLanguage": "언어 {language}(으)로 전환", + "locale.itIT": "이탈리아어", + "locale.frFR": "프랑스어", + "locale.deDE": "독일어", + "locale.ruRU": "러시아어", + "locale.esES": "스페인어(스페인)", + "locale.ptBR": "Portuguese (Brazil)", + "locale.ptPT": "포르투갈어 (포르투갈)", + "locale.es419": "스페인어(라틴 아메리카)", + "locale.zhCN": "简体中文", + "locale.jaJP": "日本語", + "locale.koKR": "한국어" +} diff --git a/src/lib/locales/pt-BR.json b/src/lib/locales/pt-BR.json new file mode 100644 index 00000000..9e8b53fc --- /dev/null +++ b/src/lib/locales/pt-BR.json @@ -0,0 +1,405 @@ +{ + "command.noMatches": "Nenhum comando correspondente", + "command.palettePlaceholder": "Digite um comando...", + "command.footerNavigate": "↑↓ navegar", + "command.footerSelect": "↵ selecionar", + "command.footerClose": "esc fechar", + "command.footerSend": "↵ enviar", + "command.aiMode": "Modo {agent}", + "command.openSettings": "Abrir configurações", + "command.openSettings.keywords": "configuração de preferências", + "command.openLanguageSettings": "Abrir configurações de idioma", + "command.openLanguageSettings.keywords": "idioma localidade i18n internacionalização localização inglês italiano francês alemão russo espanhol português chinês japonês coreano 中文", + "command.useSystemLanguage": "Usar o idioma do sistema", + "command.openH1Setting": "Abrir configuração de renomeação automática de H1", + "command.contribute": "Contribuir", + "command.checkUpdates": "Verificar atualizações", + "command.group.navigation": "Navegação", + "command.group.note": "Observação", + "command.group.git": "Git", + "command.group.view": "Visualizar", + "command.group.settings": "Configurações", + "command.navigation.searchNotes": "Buscar notas", + "command.navigation.goAllNotes": "Ir para Todas as notas", + "command.navigation.goArchived": "Ir para Arquivadas", + "command.navigation.goChanges": "Ir para Alterações", + "command.navigation.goHistory": "Ir para Histórico", + "command.navigation.goBack": "Voltar", + "command.navigation.goForward": "Avançar", + "command.navigation.goInbox": "Ir para a Caixa de entrada", + "command.navigation.renameFolder": "Renomear pasta", + "command.navigation.deleteFolder": "Excluir pasta", + "command.navigation.showOpenNotes": "Exibir notas abertas", + "command.navigation.showArchivedNotes": "Exibir notas arquivadas", + "command.navigation.listType": "Lista {type}", + "command.note.newNote": "Nova nota", + "command.note.newType": "Novo tipo", + "command.note.newTypedNote": "Novo {type}", + "command.note.saveNote": "Salvar nota", + "command.note.findInNote": "Localizar na nota", + "command.note.replaceInNote": "Substituir na nota", + "command.note.deleteNote": "Excluir nota", + "command.note.archiveNote": "Arquivar nota", + "command.note.unarchiveNote": "Desarquivar nota", + "command.note.addFavorite": "Adicionar aos Favoritos", + "command.note.removeFavorite": "Remover dos Favoritos", + "command.note.markOrganized": "Marcar como organizada", + "command.note.markUnorganized": "Marcar como não organizada", + "command.note.restoreDeleted": "Restaurar nota excluída", + "command.note.setIcon": "Definir ícone da nota", + "command.note.removeIcon": "Remover ícone da nota", + "command.note.changeType": "Alterar tipo de nota…", + "command.note.moveToFolder": "Mover nota para a pasta…", + "command.note.openNewWindow": "Abrir em nova janela", + "command.git.initialize": "Inicializar o Git para o cofre atual", + "command.git.commitPush": "Fazer commit e push", + "command.git.addRemote": "Adicionar repositório remoto ao cofre atual", + "command.git.pull": "Fazer pull do repositório remoto", + "command.git.resolveConflicts": "Resolver conflitos", + "command.git.viewChanges": "Exibir alterações pendentes", + "command.view.editorOnly": "Somente editor", + "command.view.editorNoteList": "Editor + Lista de notas", + "command.view.fullLayout": "Layout completo", + "command.view.toggleProperties": "Ativar/desativar painel de propriedades", + "command.view.toggleDiff": "Ativar/desativar modo de comparação", + "command.view.toggleRaw": "Ativar/desativar editor Raw", + "command.view.leftLayout": "Usar layout de nota alinhado à esquerda", + "command.view.centerLayout": "Usar layout de nota centralizado", + "command.view.toggleAiPanel": "Alternar painel de IA", + "command.view.newAiChat": "Novo chat de IA", + "command.view.toggleBacklinks": "Alternar backlinks", + "command.view.zoomIn": "Aumentar zoom ({zoom}%)", + "command.view.zoomOut": "Diminuir zoom ({zoom}%)", + "command.view.resetZoom": "Redefinir zoom", + "command.settings.createEmptyVault": "Criar cofre vazio…", + "command.settings.openVault": "Abrir cofre…", + "command.settings.removeVault": "Remover cofre da lista", + "command.settings.restoreGettingStarted": "Restaurar cofre de introdução", + "command.settings.manageExternalAi": "Gerenciar ferramentas externas de IA…", + "command.settings.setupExternalAi": "Configurar ferramentas externas de IA…", + "command.settings.reloadVault": "Recarregar cofre", + "command.settings.repairVault": "Reparar cofre", + "command.ai.openAgents": "Abrir agentes de IA", + "command.ai.restoreGuidance": "Restaurar orientação de IA da Tolaria", + "command.ai.switchToAgent": "Trocar o agente de IA para {agent}", + "command.ai.switchDefault": "Trocar agente de IA padrão", + "command.ai.switchDefaultWithAgent": "Trocar agente de IA padrão ({agent})", + "settings.title": "Configurações", + "settings.close": "Fechar configurações", + "settings.sync.title": "Sincronização e atualizações", + "settings.sync.description": "Configure o pull em segundo plano e qual feed de atualizações o Tolaria segue. O canal Stable recebe apenas versões promovidas manualmente, enquanto o canal Alpha acompanha todos os pushes para o main.", + "settings.pullInterval": "Intervalo de pull (minutos)", + "settings.releaseChannel": "Canal de lançamento", + "settings.releaseStable": "Stable", + "settings.releaseAlpha": "Alpha", + "settings.appearance.title": "Aparência", + "settings.appearance.description": "Escolha o modo de cores do aplicativo usado para o Tolaria Chrome, as superfícies do editor, os menus e as caixas de diálogo.", + "settings.theme.label": "Tema", + "settings.theme.light": "Claro", + "settings.theme.dark": "Escuro", + "settings.language.title": "Idioma", + "settings.language.description": "Escolha o idioma de exibição do Tolaria Chrome. O sistema segue o macOS quando esse idioma é suportado, com o inglês como opção alternativa.", + "settings.language.label": "Idioma de exibição", + "settings.language.system": "Sistema ({language})", + "settings.language.summary": "Quando faltam traduções, o sistema usa o inglês como padrão para que as localizações parcialmente traduzidas continuem utilizáveis.", + "settings.autogit.title": "AutoGit", + "settings.autogit.description.enabled": "Cria automaticamente checkpoints conservativos do Git após pausas na edição ou quando o aplicativo não estiver mais ativo.", + "settings.autogit.description.disabled": "O AutoGit não estará disponível até que o cofre atual seja habilitado para Git. Primeiro, inicialize o Git para este cofre.", + "settings.autogit.enable": "Ativar o AutoGit", + "settings.autogit.enableDescription": "Quando ativado, o Tolaria fará commit e push automaticamente das alterações locais salvas após uma pausa por inatividade ou depois que o aplicativo ficar inativo.", + "settings.autogit.idleThreshold": "Limite de inatividade (segundos)", + "settings.autogit.inactiveThreshold": "Período de carência para aplicativo inativo (segundos)", + "settings.titles.title": "Títulos e nomes de arquivo", + "settings.titles.description": "Escolha se o Tolaria deve sincronizar automaticamente os nomes de arquivo das notas sem título com base no primeiro título H1.", + "settings.titles.autoRename": "Renomear automaticamente notas sem título com base no primeiro H1", + "settings.titles.autoRenameDescription": "Quando ativada, a Tolaria renomeia os arquivos de anotações sem título assim que o primeiro H1 se torna um título de fato. Desative esta opção para manter o nome do arquivo inalterado até que você o renomeie manualmente na barra de navegação.", + "settings.aiAgents.title": "Agentes de IA", + "settings.aiAgents.description": "Escolha qual agente de IA de CLI o Tolaria usa no painel de IA e na paleta de comandos.", + "settings.aiAgents.default": "Agente de IA padrão", + "settings.aiAgents.installed": "instalado", + "settings.aiAgents.missing": "ausente", + "settings.aiAgents.ready": "{agent}{version} está pronto para uso.", + "settings.aiAgents.notInstalled": "O {agent} ainda não está instalado. Você ainda pode selecioná-lo agora e instalá-lo mais tarde.", + "settings.workflow.title": "Fluxo de trabalho", + "settings.workflow.description": "Escolha se o Tolaria deve exibir o fluxo de trabalho da Caixa de Entrada e como ele se desloca pelos itens enquanto você os tria.", + "settings.workflow.explicit": "Organizar anotações explicitamente", + "settings.workflow.explicitDescription": "Quando ativada, uma seção da Caixa de Entrada exibe anotações não organizadas, e um botão permite que você marque as anotações como organizadas.", + "settings.workflow.autoAdvance": "Avançar automaticamente para o próximo item da Caixa de Entrada", + "settings.workflow.autoAdvanceDescription": "Quando ativada, ao marcar uma anotação da Caixa de Entrada como organizada, a próxima anotação visível na Caixa de Entrada é aberta imediatamente.", + "settings.privacy.title": "Privacidade e telemetria", + "settings.privacy.description": "Dados anônimos nos ajudam a corrigir bugs e a aprimorar o Tolaria. Nenhum conteúdo do cofre, títulos de notas ou caminhos de arquivos é enviado.", + "settings.privacy.crashReporting": "Relatórios de falhas", + "settings.privacy.crashReportingDescription": "Enviar relatórios de erros anônimos", + "settings.privacy.analytics": "Análise de uso", + "settings.privacy.analyticsDescription": "Compartilhar padrões de uso anônimos", + "settings.footerShortcut": "⌘, para abrir as configurações", + "settings.cancel": "Cancelar", + "settings.save": "Salvar", + "common.cancel": "Cancelar", + "locale.en": "Inglês", + "sidebar.nav.inbox": "Caixa de entrada", + "sidebar.nav.allNotes": "Todas as anotações", + "sidebar.nav.archive": "Arquivar", + "sidebar.group.favorites": "FAVORITOS", + "sidebar.group.views": "VISUALIZAÇÕES", + "sidebar.group.types": "TIPOS", + "sidebar.group.folders": "PASTAS", + "sidebar.action.createView": "Criar visualização", + "sidebar.action.editView": "Editar visualização", + "sidebar.action.deleteView": "Excluir visualização", + "sidebar.action.customizeSections": "Personalizar seções", + "sidebar.action.renameSection": "Renomear seção…", + "sidebar.action.customizeIconColor": "Personalizar ícone e cor…", + "sidebar.action.createType": "Criar novo tipo", + "sidebar.action.collapse": "Recolher barra lateral", + "sidebar.action.expand": "Expandir barra lateral", + "sidebar.action.createFolder": "Criar pasta", + "sidebar.action.renameFolder": "Renomear pasta", + "sidebar.action.deleteFolder": "Excluir pasta", + "sidebar.action.revealFolderMenu": "Exibir no Finder", + "sidebar.action.copyFolderPathMenu": "Copiar caminho da pasta", + "sidebar.action.renameFolderMenu": "Renomear pasta...", + "sidebar.action.deleteFolderMenu": "Excluir pasta...", + "sidebar.folder.name": "Nome da pasta", + "sidebar.folder.newName": "Novo nome da pasta", + "sidebar.folder.expand": "Expandir {name}", + "sidebar.folder.collapse": "Recolher {name}", + "sidebar.section.name": "Nome da seção", + "sidebar.section.showInSidebar": "Exibir na barra lateral", + "sidebar.section.toggle": "Alternar {label}", + "sidebar.disabled.comingSoon": "Em breve", + "noteList.title.archive": "Arquivar", + "noteList.title.changes": "Alterações", + "noteList.title.inbox": "Caixa de entrada", + "noteList.title.history": "Histórico", + "noteList.title.view": "Visualizar", + "noteList.title.notes": "Notas", + "noteList.searchPlaceholder": "Buscar notas...", + "noteList.searchAction": "Buscar notas", + "noteList.createNote": "Criar nova nota", + "noteList.empty.changesError": "Falha ao carregar as alterações: {error}", + "noteList.empty.noChanges": "Sem alterações pendentes", + "noteList.empty.noArchived": "Nenhuma nota arquivada", + "noteList.empty.noMatching": "Nenhuma nota correspondente", + "noteList.empty.allOrganized": "Todas as notas estão organizadas", + "noteList.empty.noNotes": "Nenhuma nota encontrada", + "noteList.empty.noMatchingItems": "Nenhum item correspondente", + "noteList.empty.noRelatedItems": "Nenhum item relacionado", + "noteList.sort.modified": "Modificado", + "noteList.sort.created": "Criada", + "noteList.sort.title": "Título", + "noteList.sort.status": "Status", + "noteList.sort.by": "Ordenar por {label}", + "noteList.sort.menu": "Ordenar por {label}", + "noteList.sort.ascending": "Crescente", + "noteList.sort.descending": "Decrescente", + "noteList.filter.open": "Aberto", + "noteList.filter.archived": "Arquivado", + "noteList.filter.week": "Semana", + "noteList.filter.month": "Mês", + "noteList.filter.all": "Todas", + "noteList.properties.customizeColumns": "Personalizar colunas", + "noteList.properties.customizeAllColumns": "Personalizar todas as colunas de Notas", + "noteList.properties.customizeInboxColumns": "Personalizar colunas da Caixa de entrada", + "noteList.properties.customizeViewColumns": "Personalizar colunas de {name}", + "noteList.properties.showInNoteList": "Exibir na lista de notas", + "noteList.properties.searchPlaceholder": "Buscar propriedades...", + "noteList.properties.searchLabel": "Buscar propriedades da lista de notas", + "noteList.properties.noMatches": "Nenhuma propriedade corresponde a esta pesquisa.", + "noteList.properties.reorder": "Reordenar {name}", + "noteList.changes.restoreNote": "Restaurar nota", + "noteList.changes.discardChanges": "Descartar alterações", + "noteList.changes.restoreDescription": "Restaurar {file} do Git?", + "noteList.changes.discardDescription": "Descartar as alterações em {file}? Esta ação não pode ser desfeita.", + "noteList.changes.thisFile": "este arquivo", + "noteList.changes.restore": "Restaurar", + "noteList.changes.discard": "Descartar", + "noteList.changes.cancel": "Cancelar", + "editor.empty.selectNote": "Selecione uma nota para começar a editar", + "editor.empty.shortcuts": "{quickOpen} para buscar · {newNote} para criar", + "editor.raw.label": "Editor Raw", + "editor.find.findLabel": "Localizar", + "editor.find.findPlaceholder": "Localizar", + "editor.find.replaceLabel": "Substituir", + "editor.find.replacePlaceholder": "Substituir", + "editor.find.matchCount": "{current} / {total}", + "editor.find.noMatches": "Nenhuma correspondência", + "editor.find.invalidRegex": "Regex inválida", + "editor.find.regexMustMatchText": "A expressão regular deve corresponder ao texto", + "editor.find.previousMatch": "Correspondência anterior", + "editor.find.nextMatch": "Próxima correspondência", + "editor.find.showReplace": "Exibir substituição", + "editor.find.hideReplace": "Ocultar substituição", + "editor.find.regex": "Usar expressão regular", + "editor.find.matchCase": "Diferenciar maiúsculas de minúsculas", + "editor.find.close": "Fechar localizar", + "editor.find.replace": "Substituir", + "editor.find.replaceAll": "Todas", + "editor.toolbar.rawReturn": "Voltar ao editor", + "editor.toolbar.rawOpen": "Abrir o editor Raw", + "editor.toolbar.centerLayout": "Alternar para o layout de nota centralizado", + "editor.toolbar.leftLayout": "Alternar para o layout de nota alinhado à esquerda", + "editor.toolbar.removeFavorite": "Remover dos favoritos", + "editor.toolbar.addFavorite": "Adicionar aos favoritos", + "editor.toolbar.markUnorganized": "Definir nota como não organizada", + "editor.toolbar.markOrganized": "Definir nota como organizada", + "editor.toolbar.noDiff": "Ainda não há diff disponível", + "editor.toolbar.loadingDiff": "Carregando o diff", + "editor.toolbar.showDiff": "Exibir o diff atual", + "editor.toolbar.openAi": "Abrir o painel de IA", + "editor.toolbar.closeAi": "Fechar o painel de IA", + "editor.toolbar.restoreArchived": "Restaurar esta nota arquivada", + "editor.toolbar.archive": "Arquivar esta nota", + "editor.toolbar.delete": "Excluir esta nota", + "editor.toolbar.revealFile": "Exibir no Finder", + "editor.toolbar.copyFilePath": "Copiar caminho do arquivo", + "editor.toolbar.openProperties": "Abrir o painel de propriedades", + "editor.filename.rename": "Renomear nome do arquivo", + "editor.filename.renameToTitle": "Renomear o arquivo para corresponder ao título", + "editor.filename.trigger": "Nome do arquivo {filename}. Pressione Enter para renomear", + "editor.banner.archived": "Arquivado", + "editor.banner.unarchive": "Desarquivar", + "editor.banner.conflict": "Esta nota tem um conflito de mesclagem", + "editor.banner.keepMine": "Manter a minha", + "editor.banner.keepMineTooltip": "Manter minha versão local", + "editor.banner.keepTheirs": "Manter a versão deles", + "editor.banner.keepTheirsTooltip": "Manter a versão remota", + "inspector.title.properties": "Propriedades", + "inspector.title.propertiesShortcut": "Propriedades (⌘⇧I)", + "inspector.title.closePropertiesShortcut": "Fechar Propriedades (⌘⇧I)", + "inspector.empty.noNoteSelected": "Nenhuma nota selecionada", + "inspector.empty.noProperties": "Esta nota ainda não tem propriedades", + "inspector.empty.initializeProperties": "Inicializar propriedades", + "inspector.empty.invalidProperties": "Propriedades inválidas", + "inspector.empty.fixInEditor": "Corrigir no editor", + "inspector.properties.addProperty": "Adicionar propriedade", + "inspector.properties.deleteProperty": "Excluir propriedade", + "inspector.properties.none": "Nenhum", + "inspector.properties.missingType": "Tipo ausente", + "inspector.properties.missingTypeAria": "Tipo {type} ausente. Clique para criar este tipo.", + "inspector.properties.searchTypes": "Buscar tipos...", + "inspector.properties.noMatchingTypes": "Nenhum tipo correspondente", + "inspector.properties.yes": "Sim", + "inspector.properties.no": "Não", + "inspector.properties.pickDate": "Escolha uma data…", + "inspector.properties.valuePlaceholder": "Valor", + "inspector.properties.propertyName": "Nome da propriedade", + "inspector.relationship.add": "Adicionar", + "inspector.relationship.addRelationship": "+ Adicionar relacionamento", + "inspector.relationship.name": "Nome do relacionamento", + "inspector.relationship.noteTitle": "Título da nota", + "inspector.relationship.createAndOpen": "Criar e abrir", + "inspector.info.title": "Informações", + "inspector.info.modified": "Modificado", + "inspector.info.created": "Criada", + "inspector.info.words": "Palavras", + "inspector.info.size": "Tamanho", + "update.available": "está disponível", + "update.releaseNotes": "Notas da versão", + "update.updateNow": "Atualizar agora", + "update.dismiss": "Ignorar", + "update.downloading": "Baixando Tolaria {version}...", + "update.readyRestart": "está pronta – reinicie para aplicar", + "update.restartNow": "Reiniciar agora", + "status.update.check": "Verificar atualizações", + "status.zoom.reset": "Redefinir o nível de zoom", + "status.feedback.contribute": "Contribuir para o Tolaria", + "status.feedback.label": "Contribuir", + "status.theme.light": "Mudar para o modo claro", + "status.theme.dark": "Mudar para o modo escuro", + "status.settings.open": "Abrir configurações", + "status.build.unknown": "b?", + "status.vault.switch": "Trocar de vault", + "status.vault.default": "Cofre", + "status.vault.createEmpty": "Criar cofre vazio", + "status.vault.openLocal": "Abrir pasta local", + "status.vault.cloneGit": "Clonar repositório Git", + "status.vault.cloneGettingStarted": "Clonar cofre de introdução", + "status.vault.notFound": "Cofre não encontrado: {path}", + "status.vault.remove": "Remover {label} da lista", + "status.remote.noneConfigured": "Nenhum repositório remoto configurado", + "status.remote.inSync": "Sincronizado com o repositório remoto", + "status.remote.aheadTitle": "{count} commit{plural} à frente do repositório remoto", + "status.remote.behindTitle": "{count} commit{plural} atrasado(s) em relação ao repositório remoto", + "status.remote.ahead": "{count} à frente", + "status.remote.behind": "{count} atrasado(s)", + "status.remote.add": "Adicionar um remote a este vault", + "status.remote.none": "Sem remote", + "status.remote.noneDescription": "Este vault do Git não tem nenhum remote configurado. Os commits permanecem locais até que você adicione um.", + "status.sync.syncing": "Sincronizando...", + "status.sync.conflict": "Conflito", + "status.sync.failed": "Falha na sincronização", + "status.sync.pullRequired": "Pull necessário", + "status.sync.notSynced": "Não sincronizado", + "status.sync.justNow": "Sincronizado agora mesmo", + "status.sync.minutesAgo": "Sincronizado há {minutes} min", + "status.sync.resolveConflicts": "Resolver conflitos de merge", + "status.sync.inProgress": "Sincronização em andamento", + "status.sync.pullAndPush": "Fazer pull do repositório remoto e push", + "status.sync.retry": "Tentar sincronizar novamente", + "status.sync.now": "Sincronizar agora", + "status.sync.synced": "Sincronizado", + "status.sync.conflicts": "Conflitos", + "status.sync.error": "Erro", + "status.sync.status": "Status: {status}", + "status.sync.pull": "Fazer pull", + "status.conflict.count": "{count} conflito{plural}", + "status.offline.title": "Sem conexão com a Internet", + "status.offline.label": "Offline", + "status.changes.view": "Ver alterações pendentes", + "status.changes.label": "Alterações", + "status.commit.local": "Fazer commit das alterações localmente", + "status.commit.push": "Fazer commit e push das alterações", + "status.commit.label": "Fazer commit", + "status.commit.openOnGitHub": "Abrir o commit {hash} no GitHub", + "status.git.disabledTooltip": "O Git está desativado para este vault. Inicialize o Git para ativar o histórico, a sincronização, os commits e as visualizações de alterações.", + "status.git.disabled": "Git desativado", + "status.history.onlyGit": "O histórico só está disponível para cofres habilitados para Git", + "status.history.open": "Abrir histórico de alterações", + "status.history.label": "Histórico", + "status.mcp.notConnected": "Ferramentas externas de IA não conectadas — clique para configurar", + "status.mcp.unknown": "Status do MCP desconhecido", + "status.claude.missing": "Claude Code ausente", + "status.claude.label": "Claude Code", + "status.claude.install": "Claude Code não encontrado — clique para instalar", + "status.ai.noAgents": "Nenhum agente de IA detectado", + "status.ai.noAgentsTooltip": "Nenhum agente de IA detectado — clique para ver as informações de configuração", + "status.ai.selectedMissing": "{agent} está selecionado, mas não instalado — clique para ver as informações de configuração", + "status.ai.defaultAgent": "Agente de IA padrão: {agent}{version}", + "status.ai.restoreDetails": "{base}. {summary} — clique para ver os detalhes da restauração", + "status.ai.withGuidance": "{base}. {summary}", + "status.ai.active": "Agente de IA ativo: {agent}", + "status.ai.unavailable": "Agente de IA selecionado indisponível: {agent}", + "status.ai.install": "Instalar", + "status.ai.installAgent": "Instalar {agent}", + "status.ai.vaultGuidance": "Orientação do cofre", + "status.ai.restoreGuidance": "Restaurar orientação de IA do Tolaria", + "status.ai.openOptions": "Abrir opções do agente de IA", + "pulse.title": "Histórico", + "pulse.today": "Hoje", + "pulse.yesterday": "Ontem", + "pulse.commitCount": "{count} {label}", + "pulse.commitSingular": "commit", + "pulse.commitPlural": "commits", + "pulse.openOnGitHub": "Abrir no GitHub", + "pulse.expandFiles": "Expandir arquivos", + "pulse.collapseFiles": "Recolher arquivos", + "pulse.noActivity": "Ainda não há atividades", + "pulse.emptyDescription": "Faça o commit das alterações para ver o histórico do seu cofre", + "pulse.retry": "Tentar novamente", + "pulse.loadingActivity": "Carregando atividades…", + "pulse.loading": "Carregando…", + "pulse.loadError": "Falha ao carregar a atividade", + "command.switchLanguage": "Alterar idioma para {language}", + "locale.itIT": "Italiano", + "locale.frFR": "Francês", + "locale.deDE": "Alemão", + "locale.ruRU": "Russo", + "locale.esES": "Espanhol (Espanha)", + "locale.ptBR": "Português (Brasil)", + "locale.ptPT": "Português (Portugal)", + "locale.es419": "Espanhol (América Latina)", + "locale.zhCN": "简体中文", + "locale.jaJP": "Japonês", + "locale.koKR": "Coreano" +} diff --git a/src/lib/locales/pt-PT.json b/src/lib/locales/pt-PT.json new file mode 100644 index 00000000..79b43346 --- /dev/null +++ b/src/lib/locales/pt-PT.json @@ -0,0 +1,405 @@ +{ + "command.noMatches": "Sem comandos correspondentes", + "command.palettePlaceholder": "Escreva um comando...", + "command.footerNavigate": "↑↓ navegar", + "command.footerSelect": "↵ selecionar", + "command.footerClose": "esc fechar", + "command.footerSend": "↵ enviar", + "command.aiMode": "Modo {agent}", + "command.openSettings": "Abrir Definições", + "command.openSettings.keywords": "configuração de preferências", + "command.openLanguageSettings": "Abrir definições de idioma", + "command.openLanguageSettings.keywords": "idioma localização i18n internacionalização localização inglês italiano francês alemão russo espanhol português chinês japonês coreano 中文", + "command.useSystemLanguage": "Utilizar o idioma do sistema", + "command.openH1Setting": "Abrir a definição de renomeação automática de H1", + "command.contribute": "Contribuir", + "command.checkUpdates": "Verificar atualizações", + "command.group.navigation": "Navegação", + "command.group.note": "Nota", + "command.group.git": "Git", + "command.group.view": "Ver", + "command.group.settings": "Definições", + "command.navigation.searchNotes": "Pesquisar notas", + "command.navigation.goAllNotes": "Ir para Todas as notas", + "command.navigation.goArchived": "Ir para Arquivadas", + "command.navigation.goChanges": "Ir para Alterações", + "command.navigation.goHistory": "Ir para o Histórico", + "command.navigation.goBack": "Voltar", + "command.navigation.goForward": "Avançar", + "command.navigation.goInbox": "Ir para a Caixa de entrada", + "command.navigation.renameFolder": "Mudar o nome da pasta", + "command.navigation.deleteFolder": "Eliminar pasta", + "command.navigation.showOpenNotes": "Mostrar notas abertas", + "command.navigation.showArchivedNotes": "Mostrar notas arquivadas", + "command.navigation.listType": "Lista {type}", + "command.note.newNote": "Nova nota", + "command.note.newType": "Novo tipo", + "command.note.newTypedNote": "Novo {type}", + "command.note.saveNote": "Guardar nota", + "command.note.findInNote": "Procurar na nota", + "command.note.replaceInNote": "Substituir na nota", + "command.note.deleteNote": "Eliminar nota", + "command.note.archiveNote": "Arquivar nota", + "command.note.unarchiveNote": "Desarquivar nota", + "command.note.addFavorite": "Adicionar aos Favoritos", + "command.note.removeFavorite": "Remover dos Favoritos", + "command.note.markOrganized": "Assinalar como organizada", + "command.note.markUnorganized": "Assinalar como não organizada", + "command.note.restoreDeleted": "Recuperar nota eliminada", + "command.note.setIcon": "Definir ícone da nota", + "command.note.removeIcon": "Remover ícone da nota", + "command.note.changeType": "Alterar tipo de nota…", + "command.note.moveToFolder": "Mover nota para a pasta…", + "command.note.openNewWindow": "Abrir numa nova janela", + "command.git.initialize": "Inicializar o Git para o cofre atual", + "command.git.commitPush": "Fazer commit e push", + "command.git.addRemote": "Adicionar repositório remoto ao cofre atual", + "command.git.pull": "Efetuar pull do repositório remoto", + "command.git.resolveConflicts": "Resolver conflitos", + "command.git.viewChanges": "Ver alterações pendentes", + "command.view.editorOnly": "Apenas editor", + "command.view.editorNoteList": "Editor + Lista de notas", + "command.view.fullLayout": "Disposição completa", + "command.view.toggleProperties": "Ativar/desativar painel de propriedades", + "command.view.toggleDiff": "Ativar/desativar modo de diferenças", + "command.view.toggleRaw": "Ativar/desativar editor RAW", + "command.view.leftLayout": "Utilizar layout de nota alinhado à esquerda", + "command.view.centerLayout": "Utilizar layout de nota centrado", + "command.view.toggleAiPanel": "Ativar/desativar painel de IA", + "command.view.newAiChat": "Novo chat de IA", + "command.view.toggleBacklinks": "Ativar/desativar backlinks", + "command.view.zoomIn": "Aumentar ({zoom}%)", + "command.view.zoomOut": "Reduzir ({zoom}%)", + "command.view.resetZoom": "Repor o zoom", + "command.settings.createEmptyVault": "Criar cofre vazio…", + "command.settings.openVault": "Abrir cofre…", + "command.settings.removeVault": "Remover cofre da lista", + "command.settings.restoreGettingStarted": "Repor o cofre de introdução", + "command.settings.manageExternalAi": "Gerir ferramentas de IA externas…", + "command.settings.setupExternalAi": "Configurar ferramentas de IA externas…", + "command.settings.reloadVault": "Recarregar cofre", + "command.settings.repairVault": "Reparar cofre", + "command.ai.openAgents": "Abrir agentes de IA", + "command.ai.restoreGuidance": "Repor a orientação de IA da Tolaria", + "command.ai.switchToAgent": "Mudar o agente de IA para {agent}", + "command.ai.switchDefault": "Alterar agente de IA predefinido", + "command.ai.switchDefaultWithAgent": "Alterar agente de IA predefinido ({agent})", + "settings.title": "Definições", + "settings.close": "Fechar as definições", + "settings.sync.title": "Sincronização e atualizações", + "settings.sync.description": "Configurar a obtenção de atualizações em segundo plano e o feed de atualizações que a Tolaria segue. O canal Stable recebe apenas lançamentos promovidos manualmente, enquanto o canal Alpha segue todos os pushes para o main.", + "settings.pullInterval": "Intervalo de pull (minutos)", + "settings.releaseChannel": "Canal de lançamentos", + "settings.releaseStable": "Stable", + "settings.releaseAlpha": "Alpha", + "settings.appearance.title": "Aparência", + "settings.appearance.description": "Escolha o modo de cor da aplicação utilizado para o Tolaria Chrome, as superfícies do editor, os menus e as caixas de diálogo.", + "settings.theme.label": "Tema", + "settings.theme.light": "Claro", + "settings.theme.dark": "Escuro", + "settings.language.title": "Idioma", + "settings.language.description": "Escolha o idioma de apresentação do Tolaria Chrome. O sistema segue o macOS quando esse idioma é suportado, sendo o inglês a opção de recurso.", + "settings.language.label": "Idioma de apresentação", + "settings.language.system": "Sistema ({language})", + "settings.language.summary": "Quando faltam traduções, é utilizado o inglês como alternativa, para que as localizações parcialmente traduzidas continuem a poder ser utilizadas.", + "settings.autogit.title": "AutoGit", + "settings.autogit.description.enabled": "Cria automaticamente checkpoints conservativos do Git após pausas na edição ou quando a aplicação deixa de estar ativa.", + "settings.autogit.description.disabled": "O AutoGit não está disponível enquanto o cofre atual não estiver ativado para Git. Primeiro, inicialize o Git para este cofre.", + "settings.autogit.enable": "Ativar o AutoGit", + "settings.autogit.enableDescription": "Quando ativado, o Tolaria fará automaticamente o commit e o push das alterações locais guardadas após uma pausa por inatividade ou após a aplicação ficar inativa.", + "settings.autogit.idleThreshold": "Limite de inatividade (segundos)", + "settings.autogit.inactiveThreshold": "Período de tolerância de aplicação inativa (segundos)", + "settings.titles.title": "Títulos e nomes de ficheiro", + "settings.titles.description": "Escolha se a Tolaria deve sincronizar automaticamente os nomes de ficheiro das notas sem título com base no primeiro título H1.", + "settings.titles.autoRename": "Renomear automaticamente notas sem título com base no primeiro H1", + "settings.titles.autoRenameDescription": "Quando esta opção está ativada, a Tolaria muda o nome dos ficheiros de notas sem título assim que o primeiro H1 se torna um título verdadeiro. Desative esta opção para manter o nome do ficheiro inalterado até o renomear manualmente na barra de navegação.", + "settings.aiAgents.title": "Agentes de IA", + "settings.aiAgents.description": "Escolha que agente de IA de CLI é utilizado pela Tolaria no painel de IA e na paleta de comandos.", + "settings.aiAgents.default": "Agente de IA predefinido", + "settings.aiAgents.installed": "instalado", + "settings.aiAgents.missing": "em falta", + "settings.aiAgents.ready": "{agent}{version} está pronto a ser utilizado.", + "settings.aiAgents.notInstalled": "O {agent} ainda não está instalado. Ainda pode selecioná-lo agora e instalá-lo mais tarde.", + "settings.workflow.title": "Fluxo de trabalho", + "settings.workflow.description": "Escolha se a Tolaria deve mostrar o fluxo de trabalho da Caixa de entrada e como este se desloca pelos elementos enquanto os tria.", + "settings.workflow.explicit": "Organizar notas explicitamente", + "settings.workflow.explicitDescription": "Quando ativada, uma secção da Caixa de entrada mostra as notas não organizadas e um botão permite-lhe assinalar as notas como organizadas.", + "settings.workflow.autoAdvance": "Avançar automaticamente para o próximo elemento da Caixa de entrada", + "settings.workflow.autoAdvanceDescription": "Quando esta opção está ativada, ao marcar uma nota da Caixa de entrada como organizada, é imediatamente aberta a próxima nota visível da Caixa de entrada.", + "settings.privacy.title": "Privacidade e telemetria", + "settings.privacy.description": "Os dados anónimos ajudam-nos a corrigir erros e a melhorar a Tolaria. Nunca é enviado qualquer conteúdo do cofre, títulos de notas ou caminhos de ficheiros.", + "settings.privacy.crashReporting": "Relatórios de falhas", + "settings.privacy.crashReportingDescription": "Enviar relatórios de erros anónimos", + "settings.privacy.analytics": "Análise de utilização", + "settings.privacy.analyticsDescription": "Partilhar padrões de utilização anónimos", + "settings.footerShortcut": "⌘, para abrir as definições", + "settings.cancel": "Cancelar", + "settings.save": "Guardar", + "common.cancel": "Cancelar", + "locale.en": "Inglês", + "sidebar.nav.inbox": "Caixa de entrada", + "sidebar.nav.allNotes": "Todas as notas", + "sidebar.nav.archive": "Arquivar", + "sidebar.group.favorites": "FAVORITOS", + "sidebar.group.views": "VISUALIZAÇÕES", + "sidebar.group.types": "TIPOS", + "sidebar.group.folders": "PASTAS", + "sidebar.action.createView": "Criar vista", + "sidebar.action.editView": "Editar vista", + "sidebar.action.deleteView": "Eliminar vista", + "sidebar.action.customizeSections": "Personalizar secções", + "sidebar.action.renameSection": "Mudar o nome da secção…", + "sidebar.action.customizeIconColor": "Personalizar ícone e cor…", + "sidebar.action.createType": "Criar novo tipo", + "sidebar.action.collapse": "Recolher a barra lateral", + "sidebar.action.expand": "Expandir barra lateral", + "sidebar.action.createFolder": "Criar pasta", + "sidebar.action.renameFolder": "Mudar o nome da pasta", + "sidebar.action.deleteFolder": "Eliminar pasta", + "sidebar.action.revealFolderMenu": "Mostrar no Finder", + "sidebar.action.copyFolderPathMenu": "Copiar caminho da pasta", + "sidebar.action.renameFolderMenu": "Mudar o nome da pasta...", + "sidebar.action.deleteFolderMenu": "Eliminar pasta...", + "sidebar.folder.name": "Nome da pasta", + "sidebar.folder.newName": "Novo nome da pasta", + "sidebar.folder.expand": "Expandir {name}", + "sidebar.folder.collapse": "Fechar {name}", + "sidebar.section.name": "Nome da secção", + "sidebar.section.showInSidebar": "Mostrar na barra lateral", + "sidebar.section.toggle": "Alternar {label}", + "sidebar.disabled.comingSoon": "Brevemente", + "noteList.title.archive": "Arquivar", + "noteList.title.changes": "Alterações", + "noteList.title.inbox": "Caixa de entrada", + "noteList.title.history": "Histórico", + "noteList.title.view": "Ver", + "noteList.title.notes": "Notas", + "noteList.searchPlaceholder": "Pesquisar notas...", + "noteList.searchAction": "Pesquisar notas", + "noteList.createNote": "Criar nova nota", + "noteList.empty.changesError": "Não foi possível carregar as alterações: {error}", + "noteList.empty.noChanges": "Sem alterações pendentes", + "noteList.empty.noArchived": "Sem notas arquivadas", + "noteList.empty.noMatching": "Sem notas correspondentes", + "noteList.empty.allOrganized": "Todas as notas estão organizadas", + "noteList.empty.noNotes": "Não foram encontradas notas", + "noteList.empty.noMatchingItems": "Sem elementos correspondentes", + "noteList.empty.noRelatedItems": "Sem elementos relacionados", + "noteList.sort.modified": "Modificada", + "noteList.sort.created": "Criada", + "noteList.sort.title": "Título", + "noteList.sort.status": "Estado", + "noteList.sort.by": "Ordenar por {label}", + "noteList.sort.menu": "Ordenar por {label}", + "noteList.sort.ascending": "Ascendente", + "noteList.sort.descending": "Descendente", + "noteList.filter.open": "Aberto", + "noteList.filter.archived": "Arquivado", + "noteList.filter.week": "Semana", + "noteList.filter.month": "Mês", + "noteList.filter.all": "Todas", + "noteList.properties.customizeColumns": "Personalizar colunas", + "noteList.properties.customizeAllColumns": "Personalizar todas as colunas de Notas", + "noteList.properties.customizeInboxColumns": "Personalizar colunas da Caixa de entrada", + "noteList.properties.customizeViewColumns": "Personalizar colunas de {name}", + "noteList.properties.showInNoteList": "Mostrar na lista de notas", + "noteList.properties.searchPlaceholder": "Pesquisar propriedades...", + "noteList.properties.searchLabel": "Pesquisar propriedades da lista de notas", + "noteList.properties.noMatches": "Nenhuma propriedade corresponde a esta pesquisa.", + "noteList.properties.reorder": "Reordenar {name}", + "noteList.changes.restoreNote": "Repor nota", + "noteList.changes.discardChanges": "Rejeitar alterações", + "noteList.changes.restoreDescription": "Restaurar {file} a partir do Git?", + "noteList.changes.discardDescription": "Rejeitar as alterações a {file}? Esta ação não pode ser anulada.", + "noteList.changes.thisFile": "este ficheiro", + "noteList.changes.restore": "Repor", + "noteList.changes.discard": "Rejeitar", + "noteList.changes.cancel": "Cancelar", + "editor.empty.selectNote": "Selecione uma nota para começar a editar", + "editor.empty.shortcuts": "{quickOpen} para pesquisar · {newNote} para criar", + "editor.raw.label": "Editor RAW", + "editor.find.findLabel": "Localizar", + "editor.find.findPlaceholder": "Localizar", + "editor.find.replaceLabel": "Substituir", + "editor.find.replacePlaceholder": "Substituir", + "editor.find.matchCount": "{current} / {total}", + "editor.find.noMatches": "Sem correspondências", + "editor.find.invalidRegex": "Regex inválida", + "editor.find.regexMustMatchText": "A expressão regular (regex) tem de corresponder ao texto", + "editor.find.previousMatch": "Correspondência anterior", + "editor.find.nextMatch": "Próxima correspondência", + "editor.find.showReplace": "Mostrar substituição", + "editor.find.hideReplace": "Ocultar substituição", + "editor.find.regex": "Utilizar expressão regular", + "editor.find.matchCase": "Diferenciar maiúsculas de minúsculas", + "editor.find.close": "Fechar a localização", + "editor.find.replace": "Substituir", + "editor.find.replaceAll": "Todas", + "editor.toolbar.rawReturn": "Voltar ao editor", + "editor.toolbar.rawOpen": "Abrir o editor RAW", + "editor.toolbar.centerLayout": "Mudar para o layout de nota centrado", + "editor.toolbar.leftLayout": "Mudar para o layout de nota alinhado à esquerda", + "editor.toolbar.removeFavorite": "Remover dos favoritos", + "editor.toolbar.addFavorite": "Adicionar aos favoritos", + "editor.toolbar.markUnorganized": "Definir nota como não organizada", + "editor.toolbar.markOrganized": "Definir nota como organizada", + "editor.toolbar.noDiff": "Ainda não está disponível qualquer diff", + "editor.toolbar.loadingDiff": "A carregar o diff", + "editor.toolbar.showDiff": "Mostrar o diff atual", + "editor.toolbar.openAi": "Abrir o painel de IA", + "editor.toolbar.closeAi": "Fechar o painel de IA", + "editor.toolbar.restoreArchived": "Repor esta nota arquivada", + "editor.toolbar.archive": "Arquivar esta nota", + "editor.toolbar.delete": "Eliminar esta nota", + "editor.toolbar.revealFile": "Mostrar no Finder", + "editor.toolbar.copyFilePath": "Copiar caminho do ficheiro", + "editor.toolbar.openProperties": "Abrir o painel de propriedades", + "editor.filename.rename": "Mudar o nome do ficheiro", + "editor.filename.renameToTitle": "Mudar o nome do ficheiro para corresponder ao título", + "editor.filename.trigger": "Nome do ficheiro {filename}. Prima Enter para mudar o nome", + "editor.banner.archived": "Arquivado", + "editor.banner.unarchive": "Desarquivar", + "editor.banner.conflict": "Esta nota tem um conflito de fusão", + "editor.banner.keepMine": "Manter a minha", + "editor.banner.keepMineTooltip": "Manter a minha versão local", + "editor.banner.keepTheirs": "Manter a versão deles", + "editor.banner.keepTheirsTooltip": "Manter a versão remota", + "inspector.title.properties": "Propriedades", + "inspector.title.propertiesShortcut": "Propriedades (⌘⇧I)", + "inspector.title.closePropertiesShortcut": "Fechar Propriedades (⌘⇧I)", + "inspector.empty.noNoteSelected": "Nenhuma nota selecionada", + "inspector.empty.noProperties": "Esta nota ainda não tem propriedades", + "inspector.empty.initializeProperties": "Inicializar propriedades", + "inspector.empty.invalidProperties": "Propriedades inválidas", + "inspector.empty.fixInEditor": "Corrigir no editor", + "inspector.properties.addProperty": "Adicionar propriedade", + "inspector.properties.deleteProperty": "Eliminar propriedade", + "inspector.properties.none": "Nenhuma", + "inspector.properties.missingType": "Tipo em falta", + "inspector.properties.missingTypeAria": "Tipo {type} em falta. Clique para criar este tipo.", + "inspector.properties.searchTypes": "Pesquisar tipos...", + "inspector.properties.noMatchingTypes": "Sem tipos correspondentes", + "inspector.properties.yes": "Sim", + "inspector.properties.no": "Não", + "inspector.properties.pickDate": "Escolher uma data…", + "inspector.properties.valuePlaceholder": "Valor", + "inspector.properties.propertyName": "Nome da propriedade", + "inspector.relationship.add": "Adicionar", + "inspector.relationship.addRelationship": "+ Adicionar relação", + "inspector.relationship.name": "Nome da relação", + "inspector.relationship.noteTitle": "Título da nota", + "inspector.relationship.createAndOpen": "Criar e abrir", + "inspector.info.title": "Informações", + "inspector.info.modified": "Modificada", + "inspector.info.created": "Criada", + "inspector.info.words": "Palavras", + "inspector.info.size": "Tamanho", + "update.available": "está disponível", + "update.releaseNotes": "Notas de lançamento", + "update.updateNow": "Atualizar agora", + "update.dismiss": "Ignorar", + "update.downloading": "A transferir a Tolaria {version}...", + "update.readyRestart": "está pronta – reinicie para aplicar", + "update.restartNow": "Reiniciar agora", + "status.update.check": "Verificar se há atualizações", + "status.zoom.reset": "Repor o nível de zoom", + "status.feedback.contribute": "Contribuir para a Tolaria", + "status.feedback.label": "Contribuir", + "status.theme.light": "Mudar para o modo claro", + "status.theme.dark": "Mudar para o modo escuro", + "status.settings.open": "Abrir definições", + "status.build.unknown": "b?", + "status.vault.switch": "Mudar de cofre", + "status.vault.default": "Cofre", + "status.vault.createEmpty": "Criar cofre vazio", + "status.vault.openLocal": "Abrir pasta local", + "status.vault.cloneGit": "Clonar repositório Git", + "status.vault.cloneGettingStarted": "Clonar cofre Getting Started", + "status.vault.notFound": "Cofre não encontrado: {path}", + "status.vault.remove": "Remover {label} da lista", + "status.remote.noneConfigured": "Nenhum repositório remoto configurado", + "status.remote.inSync": "Sincronizado com o repositório remoto", + "status.remote.aheadTitle": "{count} commit{plural} à frente do repositório remoto", + "status.remote.behindTitle": "{count} commit{plural} de atraso em relação ao repositório remoto", + "status.remote.ahead": "{count} à frente", + "status.remote.behind": "{count} atrasado(s)", + "status.remote.add": "Adicionar um repositório remoto a este cofre", + "status.remote.none": "Sem remote", + "status.remote.noneDescription": "Este cofre Git não tem nenhum repositório remoto configurado. Os commits permanecem locais até adicionar um.", + "status.sync.syncing": "A sincronizar...", + "status.sync.conflict": "Conflito", + "status.sync.failed": "Falha na sincronização", + "status.sync.pullRequired": "Pull necessário", + "status.sync.notSynced": "Não sincronizado", + "status.sync.justNow": "Sincronizada agora mesmo", + "status.sync.minutesAgo": "Sincronizada há {minutes} min", + "status.sync.resolveConflicts": "Resolver conflitos de merge", + "status.sync.inProgress": "Sincronização em curso", + "status.sync.pullAndPush": "Efetuar pull do repositório remoto e push", + "status.sync.retry": "Tentar sincronizar novamente", + "status.sync.now": "Sincronizar agora", + "status.sync.synced": "Sincronizado", + "status.sync.conflicts": "Conflitos", + "status.sync.error": "Erro", + "status.sync.status": "Estado: {status}", + "status.sync.pull": "Pull", + "status.conflict.count": "{count} conflito{plural}", + "status.offline.title": "Sem ligação à Internet", + "status.offline.label": "Offline", + "status.changes.view": "Ver alterações pendentes", + "status.changes.label": "Alterações", + "status.commit.local": "Efetuar commit das alterações localmente", + "status.commit.push": "Efetuar commit e push das alterações", + "status.commit.label": "Efetuar commit", + "status.commit.openOnGitHub": "Abrir o commit {hash} no GitHub", + "status.git.disabledTooltip": "O Git está desativado para este cofre. Inicialize o Git para ativar o histórico, a sincronização, os commits e as vistas de alterações.", + "status.git.disabled": "Git desativado", + "status.history.onlyGit": "O histórico só está disponível para cofres com o Git ativado", + "status.history.open": "Abrir histórico de alterações", + "status.history.label": "Histórico", + "status.mcp.notConnected": "Ferramentas de IA externas não ligadas — clique para configurar", + "status.mcp.unknown": "Estado do MCP desconhecido", + "status.claude.missing": "Claude Code em falta", + "status.claude.label": "Claude Code", + "status.claude.install": "Claude Code não encontrado — clique para instalar", + "status.ai.noAgents": "Nenhum agente de IA detetado", + "status.ai.noAgentsTooltip": "Nenhum agente de IA detetado — clique para obter detalhes de configuração", + "status.ai.selectedMissing": "{agent} está selecionado, mas não instalado — clique para obter detalhes de configuração", + "status.ai.defaultAgent": "Agente de IA predefinido: {agent}{version}", + "status.ai.restoreDetails": "{base}. {summary} — clique para obter detalhes sobre o restauro", + "status.ai.withGuidance": "{base}. {summary}", + "status.ai.active": "Agente de IA ativo: {agent}", + "status.ai.unavailable": "Agente de IA selecionado indisponível: {agent}", + "status.ai.install": "Instalar", + "status.ai.installAgent": "Instalar {agent}", + "status.ai.vaultGuidance": "Orientação do cofre", + "status.ai.restoreGuidance": "Restaurar a orientação de IA da Tolaria", + "status.ai.openOptions": "Abrir opções do agente de IA", + "pulse.title": "Histórico", + "pulse.today": "Hoje", + "pulse.yesterday": "Ontem", + "pulse.commitCount": "{count} {label}", + "pulse.commitSingular": "commit", + "pulse.commitPlural": "commits", + "pulse.openOnGitHub": "Abrir no GitHub", + "pulse.expandFiles": "Expandir ficheiros", + "pulse.collapseFiles": "Ocultar ficheiros", + "pulse.noActivity": "Ainda não há atividade", + "pulse.emptyDescription": "Faça o commit das alterações para ver o histórico do seu cofre", + "pulse.retry": "Tentar novamente", + "pulse.loadingActivity": "A carregar atividade…", + "pulse.loading": "A carregar…", + "pulse.loadError": "Não foi possível carregar a atividade", + "command.switchLanguage": "Alterar idioma para {language}", + "locale.itIT": "Italiano", + "locale.frFR": "Francês", + "locale.deDE": "Alemão", + "locale.ruRU": "Russo", + "locale.esES": "Espanhol (Espanha)", + "locale.ptBR": "Português (Brasil)", + "locale.ptPT": "Português (Portugal)", + "locale.es419": "Espanhol (América Latina)", + "locale.zhCN": "Chinês simplificado", + "locale.jaJP": "Japonês", + "locale.koKR": "Coreano" +} diff --git a/src/lib/locales/ru-RU.json b/src/lib/locales/ru-RU.json new file mode 100644 index 00000000..7a119a93 --- /dev/null +++ b/src/lib/locales/ru-RU.json @@ -0,0 +1,405 @@ +{ + "command.noMatches": "Нет подходящих команд", + "command.palettePlaceholder": "Введите команду...", + "command.footerNavigate": "↑↓ навигация", + "command.footerSelect": "↵ выбрать", + "command.footerClose": "esc закрыть", + "command.footerSend": "↵ отправить", + "command.aiMode": "Режим {agent}", + "command.openSettings": "Открыть настройки", + "command.openSettings.keywords": "Настройки конфигурации", + "command.openLanguageSettings": "Открыть настройки языка", + "command.openLanguageSettings.keywords": "язык регион i18n интернационализация локализация английский итальянский французский немецкий русский испанский португальский китайский японский корейский 中文", + "command.useSystemLanguage": "Использовать язык системы", + "command.openH1Setting": "Открыть настройку автоматического переименования H1", + "command.contribute": "Внести свой вклад", + "command.checkUpdates": "Проверить наличие обновлений", + "command.group.navigation": "Навигация", + "command.group.note": "Примечание", + "command.group.git": "Git", + "command.group.view": "Просмотр", + "command.group.settings": "Настройки", + "command.navigation.searchNotes": "Поиск по заметкам", + "command.navigation.goAllNotes": "Перейти ко всем заметкам", + "command.navigation.goArchived": "Перейти к архивированным", + "command.navigation.goChanges": "Перейти к изменениям", + "command.navigation.goHistory": "Перейти к истории", + "command.navigation.goBack": "Назад", + "command.navigation.goForward": "Вперед", + "command.navigation.goInbox": "Перейти во «Входящие»", + "command.navigation.renameFolder": "Переименовать папку", + "command.navigation.deleteFolder": "Удалить папку", + "command.navigation.showOpenNotes": "Показать открытые заметки", + "command.navigation.showArchivedNotes": "Показать заархивированные заметки", + "command.navigation.listType": "Список {type}", + "command.note.newNote": "Новая заметка", + "command.note.newType": "Новый тип", + "command.note.newTypedNote": "Новый {type}", + "command.note.saveNote": "Сохранить заметку", + "command.note.findInNote": "Найти в заметке", + "command.note.replaceInNote": "Заменить в заметке", + "command.note.deleteNote": "Удалить заметку", + "command.note.archiveNote": "Архивировать заметку", + "command.note.unarchiveNote": "Разархивировать заметку", + "command.note.addFavorite": "Добавить в избранное", + "command.note.removeFavorite": "Удалить из избранного", + "command.note.markOrganized": "Пометить как упорядоченную", + "command.note.markUnorganized": "Пометить как неорганизованную", + "command.note.restoreDeleted": "Восстановить удаленную заметку", + "command.note.setIcon": "Установить значок заметки", + "command.note.removeIcon": "Удалить значок заметки", + "command.note.changeType": "Изменить тип заметки…", + "command.note.moveToFolder": "Переместить заметку в папку…", + "command.note.openNewWindow": "Открыть в новом окне", + "command.git.initialize": "Инициализировать Git для текущего хранилища", + "command.git.commitPush": "Commit и Push", + "command.git.addRemote": "Добавить удаленный репозиторий в текущий хранилище", + "command.git.pull": "Pull from Remote", + "command.git.resolveConflicts": "Разрешить конфликты", + "command.git.viewChanges": "Просмотреть ожидающие изменения", + "command.view.editorOnly": "Только редактор", + "command.view.editorNoteList": "Редактор + список заметок", + "command.view.fullLayout": "Полный макет", + "command.view.toggleProperties": "Переключить панель свойств", + "command.view.toggleDiff": "Переключить режим сравнения", + "command.view.toggleRaw": "Переключить редактор Raw", + "command.view.leftLayout": "Использовать левостороннее расположение заметок", + "command.view.centerLayout": "Использовать центрированный макет заметки", + "command.view.toggleAiPanel": "Переключить панель ИИ", + "command.view.newAiChat": "Новый AI-чат", + "command.view.toggleBacklinks": "Переключить обратные ссылки", + "command.view.zoomIn": "Увеличить ({zoom}%)", + "command.view.zoomOut": "Уменьшить ({zoom}%)", + "command.view.resetZoom": "Сбросить масштаб", + "command.settings.createEmptyVault": "Создать пустой хранилище…", + "command.settings.openVault": "Открыть хранилище…", + "command.settings.removeVault": "Удалить хранилище из списка", + "command.settings.restoreGettingStarted": "Восстановить хранилище «Начало работы»", + "command.settings.manageExternalAi": "Управление внешними инструментами ИИ…", + "command.settings.setupExternalAi": "Настроить внешние инструменты ИИ…", + "command.settings.reloadVault": "Перезагрузить хранилище", + "command.settings.repairVault": "Восстановить хранилище", + "command.ai.openAgents": "Открыть AI Agents", + "command.ai.restoreGuidance": "Восстановить руководство Tolaria AI", + "command.ai.switchToAgent": "Переключить AI-агента на {agent}", + "command.ai.switchDefault": "Переключить агент ИИ по умолчанию", + "command.ai.switchDefaultWithAgent": "Переключить агент ИИ по умолчанию ({agent})", + "settings.title": "Настройки", + "settings.close": "Закрыть настройки", + "settings.sync.title": "Синхронизация и обновления", + "settings.sync.description": "Настройте загрузку в фоновом режиме и выберите, за каким каналом обновлений будет следить Tolaria. В канале Stable поступают только релизы, продвигаемые вручную, а в канале Alpha отслежимается каждый пуш в main.", + "settings.pullInterval": "Интервал получения (минуты)", + "settings.releaseChannel": "Канал выпусков", + "settings.releaseStable": "Stable", + "settings.releaseAlpha": "Alpha", + "settings.appearance.title": "Внешний вид", + "settings.appearance.description": "Выберите цветовой режим приложения, который будет использоваться для Tolaria Chrome, интерфейса редактора, меню и диалоговых окон.", + "settings.theme.label": "Тема", + "settings.theme.light": "Светлая", + "settings.theme.dark": "Темная", + "settings.language.title": "Язык", + "settings.language.description": "Выберите язык отображения для Tolaria chrome. Система использует язык macOS, если он поддерживается, а в противном случае — английский.", + "settings.language.label": "Язык интерфейса", + "settings.language.system": "Системный ({language})", + "settings.language.summary": "Если перевод отсутствует, используется английский текст, поэтому частично переведенные локали остаются пригодными для использования.", + "settings.autogit.title": "AutoGit", + "settings.autogit.description.enabled": "Автоматически создавать консервативные контрольные точки Git после пауз в редактировании или когда приложение перестает быть активным.", + "settings.autogit.description.disabled": "Функция AutoGit недоступна, пока для текущего хранилища не включена поддержка Git. Сначала инициализируйте Git для этого хранилища.", + "settings.autogit.enable": "Включить AutoGit", + "settings.autogit.enableDescription": "Если эта функция включена, Tolaria будет автоматически выполнять коммит и пуш сохраненных локальных изменений после паузы бездействия или после того, как приложение станет неактивным.", + "settings.autogit.idleThreshold": "Порог бездействия (секунды)", + "settings.autogit.inactiveThreshold": "Период отсрочки при неактивном приложении (секунды)", + "settings.titles.title": "Заголовки и имена файлов", + "settings.titles.description": "Выберите, должна ли Tolaria автоматически синхронизировать имена файлов заметок без названия на основе первого заголовка H1.", + "settings.titles.autoRename": "Автоматически переименовывать заметки без названия по первому заголовку H1", + "settings.titles.autoRenameDescription": "Если эта функция включена, Tolaria переименовывает файлы заметок без названия, как только первый заголовок H1 становится настоящим заголовком. Отключите эту опцию, чтобы имя файла оставалось неизменным, пока вы не переименуете его вручную в строке навигации.", + "settings.aiAgents.title": "AI-агенты", + "settings.aiAgents.description": "Выберите, какой CLI-агент ИИ Tolaria будет использовать на панели ИИ и в палитре команд.", + "settings.aiAgents.default": "AI-агент по умолчанию", + "settings.aiAgents.installed": "установлен", + "settings.aiAgents.missing": "отсутствует", + "settings.aiAgents.ready": "{agent}{version} готов к использованию.", + "settings.aiAgents.notInstalled": "{agent} еще не установлен. Вы всё равно можете выбрать его сейчас и установить позже.", + "settings.workflow.title": "Рабочий процесс", + "settings.workflow.description": "Выберите, будет ли Tolaria отображать рабочий процесс в папке «Входящие», а также порядок перемещения по элементам во время их сортировки.", + "settings.workflow.explicit": "Явно упорядочивать заметки", + "settings.workflow.explicitDescription": "Если эта функция включена, в разделе «Входящие» отображаются неорганизованные заметки, а с помощью переключателя можно помечать заметки как организованные.", + "settings.workflow.autoAdvance": "Автоматический переход к следующему элементу в папке «Входящие»", + "settings.workflow.autoAdvanceDescription": "Если эта функция включена, при отметке заметки в папке «Входящие» как упорядоченной сразу же открывается следующая видимая заметка в папке «Входящие».", + "settings.privacy.title": "Конфиденциальность и телеметрия", + "settings.privacy.description": "Анонимные данные помогают нам исправлять ошибки и улучшать Tolaria. Мы никогда не отправляем содержимое хранилища, заголовки заметок или пути к файлам.", + "settings.privacy.crashReporting": "Отчеты о сбоях", + "settings.privacy.crashReportingDescription": "Отправлять анонимные отчеты об ошибках", + "settings.privacy.analytics": "Аналитика использования", + "settings.privacy.analyticsDescription": "Передача анонимных данных о характере использования", + "settings.footerShortcut": "⌘, чтобы открыть настройки", + "settings.cancel": "Отменить", + "settings.save": "Сохранить", + "common.cancel": "Отменить", + "locale.en": "Английский", + "sidebar.nav.inbox": "Входящие", + "sidebar.nav.allNotes": "Все заметки", + "sidebar.nav.archive": "Архив", + "sidebar.group.favorites": "ИЗБРАННОЕ", + "sidebar.group.views": "ПРОСМОТРЫ", + "sidebar.group.types": "ТИПЫ", + "sidebar.group.folders": "ПАПКИ", + "sidebar.action.createView": "Создать представление", + "sidebar.action.editView": "Редактировать представление", + "sidebar.action.deleteView": "Удалить представление", + "sidebar.action.customizeSections": "Настроить разделы", + "sidebar.action.renameSection": "Переименовать раздел…", + "sidebar.action.customizeIconColor": "Настроить значок и цвет…", + "sidebar.action.createType": "Создать новый тип", + "sidebar.action.collapse": "Свернуть боковую панель", + "sidebar.action.expand": "Развернуть боковую панель", + "sidebar.action.createFolder": "Создать папку", + "sidebar.action.renameFolder": "Переименовать папку", + "sidebar.action.deleteFolder": "Удалить папку", + "sidebar.action.revealFolderMenu": "Показать в Finder", + "sidebar.action.copyFolderPathMenu": "Копировать путь к папке", + "sidebar.action.renameFolderMenu": "Переименовать папку...", + "sidebar.action.deleteFolderMenu": "Удалить папку...", + "sidebar.folder.name": "Имя папки", + "sidebar.folder.newName": "Новое название папки", + "sidebar.folder.expand": "Развернуть {name}", + "sidebar.folder.collapse": "Свернуть {name}", + "sidebar.section.name": "Название раздела", + "sidebar.section.showInSidebar": "Показать на боковой панели", + "sidebar.section.toggle": "Переключить {label}", + "sidebar.disabled.comingSoon": "Скоро", + "noteList.title.archive": "Архив", + "noteList.title.changes": "Изменения", + "noteList.title.inbox": "Входящие", + "noteList.title.history": "История", + "noteList.title.view": "Просмотр", + "noteList.title.notes": "Заметки", + "noteList.searchPlaceholder": "Поиск заметок...", + "noteList.searchAction": "Поиск по заметкам", + "noteList.createNote": "Создать новую заметку", + "noteList.empty.changesError": "Не удалось загрузить изменения: {error}", + "noteList.empty.noChanges": "Нет изменений, ожидающих подтверждения", + "noteList.empty.noArchived": "Нет заархивированных заметок", + "noteList.empty.noMatching": "Нет соответствующие заметки", + "noteList.empty.allOrganized": "Все заметки упорядочены", + "noteList.empty.noNotes": "Заметок не найдено", + "noteList.empty.noMatchingItems": "Нет совпадающих элементов", + "noteList.empty.noRelatedItems": "Нет связанных элементов", + "noteList.sort.modified": "Изменено", + "noteList.sort.created": "Создано", + "noteList.sort.title": "Название", + "noteList.sort.status": "Статус", + "noteList.sort.by": "Сортировать по {label}", + "noteList.sort.menu": "Сортировать по {label}", + "noteList.sort.ascending": "По возрастанию", + "noteList.sort.descending": "По убыванию", + "noteList.filter.open": "Открыто", + "noteList.filter.archived": "Архивировано", + "noteList.filter.week": "Неделя", + "noteList.filter.month": "Месяц", + "noteList.filter.all": "Все", + "noteList.properties.customizeColumns": "Настроить столбцы", + "noteList.properties.customizeAllColumns": "Настроить все столбцы раздела «Заметки»", + "noteList.properties.customizeInboxColumns": "Настроить столбцы раздела «Входящие»", + "noteList.properties.customizeViewColumns": "Настроить столбцы {name}", + "noteList.properties.showInNoteList": "Показать в списке заметок", + "noteList.properties.searchPlaceholder": "Поиск свойств...", + "noteList.properties.searchLabel": "Поиск свойств списка заметок", + "noteList.properties.noMatches": "По этому поисковому запросу свойств не найдено.", + "noteList.properties.reorder": "Изменить порядок столбцов {name}", + "noteList.changes.restoreNote": "Восстановить заметку", + "noteList.changes.discardChanges": "Отменить изменения", + "noteList.changes.restoreDescription": "Восстановить {file} из Git?", + "noteList.changes.discardDescription": "Отменить изменения в {file}? Это действие нельзя отменить.", + "noteList.changes.thisFile": "этот файл", + "noteList.changes.restore": "Восстановить", + "noteList.changes.discard": "Отменить изменения", + "noteList.changes.cancel": "Отменить", + "editor.empty.selectNote": "Выберите заметку, чтобы начать редактирование", + "editor.empty.shortcuts": "{quickOpen} для поиска · {newNote} для создания", + "editor.raw.label": "Редактор Raw", + "editor.find.findLabel": "Найти", + "editor.find.findPlaceholder": "Найти", + "editor.find.replaceLabel": "Заменить", + "editor.find.replacePlaceholder": "Заменить", + "editor.find.matchCount": "{current} / {total}", + "editor.find.noMatches": "Совпадений нет", + "editor.find.invalidRegex": "Недопустимое регулярное выражение", + "editor.find.regexMustMatchText": "Регулярное выражение должно соответствовать тексту", + "editor.find.previousMatch": "Предыдущее совпадение", + "editor.find.nextMatch": "Следующее совпадение", + "editor.find.showReplace": "Показать замену", + "editor.find.hideReplace": "Скрыть замену", + "editor.find.regex": "Использовать регулярное выражение", + "editor.find.matchCase": "С учетом регистра", + "editor.find.close": "Закрыть поиск", + "editor.find.replace": "Заменить", + "editor.find.replaceAll": "Все", + "editor.toolbar.rawReturn": "Вернуться в редактор", + "editor.toolbar.rawOpen": "Открыть RAW-редактор", + "editor.toolbar.centerLayout": "Переключиться на центрированный макет заметки", + "editor.toolbar.leftLayout": "Переключиться на макет заметки с выравниванием по левому краю", + "editor.toolbar.removeFavorite": "Удалить из избранного", + "editor.toolbar.addFavorite": "Добавить в избранное", + "editor.toolbar.markUnorganized": "Пометить заметку как неорганизованную", + "editor.toolbar.markOrganized": "Пометить заметку как упорядоченную", + "editor.toolbar.noDiff": "Пока нет доступных diff", + "editor.toolbar.loadingDiff": "Загрузка diff", + "editor.toolbar.showDiff": "Показать текущий diff", + "editor.toolbar.openAi": "Открыть панель ИИ", + "editor.toolbar.closeAi": "Закрыть панель ИИ", + "editor.toolbar.restoreArchived": "Восстановить эту заархивированную заметку", + "editor.toolbar.archive": "Архивировать эту заметку", + "editor.toolbar.delete": "Удалить эту заметку", + "editor.toolbar.revealFile": "Показать в Finder", + "editor.toolbar.copyFilePath": "Копировать путь к файлу", + "editor.toolbar.openProperties": "Открыть панель свойств", + "editor.filename.rename": "Переименовать файл", + "editor.filename.renameToTitle": "Переименовать файл в соответствии с заголовком", + "editor.filename.trigger": "Имя файла: {filename}. Нажмите Enter, чтобы переименовать.", + "editor.banner.archived": "Архивировано", + "editor.banner.unarchive": "Разархивировать", + "editor.banner.conflict": "В этой заметке есть конфликт при объединении", + "editor.banner.keepMine": "Сохранить мою", + "editor.banner.keepMineTooltip": "Сохранить мою локальную версию", + "editor.banner.keepTheirs": "Сохранить их версию", + "editor.banner.keepTheirsTooltip": "Сохранить удаленную версию", + "inspector.title.properties": "Свойства", + "inspector.title.propertiesShortcut": "Свойства (⌘⇧I)", + "inspector.title.closePropertiesShortcut": "Закрыть свойства (⌘⇧I)", + "inspector.empty.noNoteSelected": "Ни одна заметка не выбрана", + "inspector.empty.noProperties": "У этой заметки пока нет свойств", + "inspector.empty.initializeProperties": "Инициализировать свойства", + "inspector.empty.invalidProperties": "Недействительные свойства", + "inspector.empty.fixInEditor": "Исправить в редакторе", + "inspector.properties.addProperty": "Добавить свойство", + "inspector.properties.deleteProperty": "Удалить свойство", + "inspector.properties.none": "Нет", + "inspector.properties.missingType": "Отсутствует тип", + "inspector.properties.missingTypeAria": "Отсутствует тип {type}. Нажмите, чтобы создать этот тип.", + "inspector.properties.searchTypes": "Поиск типов...", + "inspector.properties.noMatchingTypes": "Нет подходящих типов", + "inspector.properties.yes": "Да", + "inspector.properties.no": "Нет", + "inspector.properties.pickDate": "Выберите дату…", + "inspector.properties.valuePlaceholder": "Значение", + "inspector.properties.propertyName": "Название свойства", + "inspector.relationship.add": "Добавить", + "inspector.relationship.addRelationship": "+ Добавить связь", + "inspector.relationship.name": "Название связи", + "inspector.relationship.noteTitle": "Название заметки", + "inspector.relationship.createAndOpen": "Создать и открыть", + "inspector.info.title": "Информация", + "inspector.info.modified": "Изменено", + "inspector.info.created": "Создано", + "inspector.info.words": "Слов", + "inspector.info.size": "Размер", + "update.available": "доступно", + "update.releaseNotes": "Примечания к выпуску", + "update.updateNow": "Обновить сейчас", + "update.dismiss": "Закрыть", + "update.downloading": "Загрузка Tolaria {version}...", + "update.readyRestart": "Готово — перезапустите приложение, чтобы применить обновление", + "update.restartNow": "Перезапустить сейчас", + "status.update.check": "Проверить наличие обновлений", + "status.zoom.reset": "Сбросить уровень масштабирования", + "status.feedback.contribute": "Внести свой вклад в Tolaria", + "status.feedback.label": "Внести свой вклад", + "status.theme.light": "Переключиться в светлый режим", + "status.theme.dark": "Переключиться в темный режим", + "status.settings.open": "Открыть настройки", + "status.build.unknown": "b?", + "status.vault.switch": "Переключить хранилище", + "status.vault.default": "Хранилище", + "status.vault.createEmpty": "Создать пустой хранилище", + "status.vault.openLocal": "Открыть локальную папку", + "status.vault.cloneGit": "Клонировать Git-репозиторий", + "status.vault.cloneGettingStarted": "Клонировать хранилище «Начало работы»", + "status.vault.notFound": "Хранилище не найдено: {path}", + "status.vault.remove": "Удалить {label} из списка", + "status.remote.noneConfigured": "Ни один удаленный репозиторий не настроен", + "status.remote.inSync": "Синхронизировано с удаленным репозиторием", + "status.remote.aheadTitle": "На {count} коммит{plural} опережает удаленный репозиторий", + "status.remote.behindTitle": "Отстает от удаленного репозитория на {count} коммит{plural}", + "status.remote.ahead": "На {count} впереди", + "status.remote.behind": "Отстает на {count}", + "status.remote.add": "Добавить удаленный репозиторий в этот хранилище", + "status.remote.none": "Нет удаленного репозитория", + "status.remote.noneDescription": "Для этого хранилища Git не настроен ни один удаленный репозиторий. Коммиты остаются локальными, пока вы не добавите удаленный репозиторий.", + "status.sync.syncing": "Синхронизация...", + "status.sync.conflict": "Конфликт", + "status.sync.failed": "Синхронизация не выполнена", + "status.sync.pullRequired": "Требуется выполнить pull", + "status.sync.notSynced": "Не синхронизировано", + "status.sync.justNow": "Синхронизировано только что", + "status.sync.minutesAgo": "Синхронизировано {minutes} мин. назад", + "status.sync.resolveConflicts": "Устранить конфликты слияния", + "status.sync.inProgress": "Выполняется синхронизация", + "status.sync.pullAndPush": "Выполнить pull из удаленного репозитория и push", + "status.sync.retry": "Повторить синхронизацию", + "status.sync.now": "Синхронизировать сейчас", + "status.sync.synced": "Синхронизировано", + "status.sync.conflicts": "Конфликты", + "status.sync.error": "Ошибка", + "status.sync.status": "Статус: {status}", + "status.sync.pull": "Получить", + "status.conflict.count": "{count} конфликт{plural}", + "status.offline.title": "Нет подключения к Интернету", + "status.offline.label": "Офлайн", + "status.changes.view": "Посмотреть изменения, ожидающие подтверждения", + "status.changes.label": "Изменения", + "status.commit.local": "Зафиксировать изменения локально", + "status.commit.push": "Зафиксировать и отправить изменения", + "status.commit.label": "Commit", + "status.commit.openOnGitHub": "Открыть коммит {hash} на GitHub", + "status.git.disabledTooltip": "Для этого хранилища Git отключен. Инициализируйте Git, чтобы включить историю, синхронизацию, коммиты и представления изменений.", + "status.git.disabled": "Git отключен", + "status.history.onlyGit": "История доступна только для хранилищ с поддержкой Git.", + "status.history.open": "Открыть историю изменений", + "status.history.label": "История", + "status.mcp.notConnected": "Внешние инструменты ИИ не подключены — нажмите, чтобы настроить", + "status.mcp.unknown": "Статус MCP неизвестен", + "status.claude.missing": "Отсутствует Claude Code", + "status.claude.label": "Claude Code", + "status.claude.install": "Claude Code не найден — нажмите, чтобы установить", + "status.ai.noAgents": "AI-агенты не обнаружены", + "status.ai.noAgentsTooltip": "AI-агенты не обнаружены — нажмите, чтобы узнать подробности настройки", + "status.ai.selectedMissing": "{agent} выбран, но не установлен — нажмите, чтобы получить сведения о настройке", + "status.ai.defaultAgent": "AI-агент по умолчанию: {agent}{version}", + "status.ai.restoreDetails": "{base}. {summary} — нажмите, чтобы узнать подробности о восстановлении", + "status.ai.withGuidance": "{base}. {summary}", + "status.ai.active": "Активный AI-агент: {agent}", + "status.ai.unavailable": "Выбранный ИИ-агент недоступен: {agent}", + "status.ai.install": "Установить", + "status.ai.installAgent": "Установить {agent}", + "status.ai.vaultGuidance": "Руководство по хранилищу", + "status.ai.restoreGuidance": "Восстановить руководство Tolaria AI", + "status.ai.openOptions": "Открыть параметры AI-агента", + "pulse.title": "История", + "pulse.today": "Сегодня", + "pulse.yesterday": "Вчера", + "pulse.commitCount": "{count} {label}", + "pulse.commitSingular": "коммит", + "pulse.commitPlural": "Коммиты", + "pulse.openOnGitHub": "Открыть на GitHub", + "pulse.expandFiles": "Развернуть файлы", + "pulse.collapseFiles": "Свернуть файлы", + "pulse.noActivity": "Пока нет активности", + "pulse.emptyDescription": "Зафиксируйте изменения, чтобы увидеть историю вашего хранилища", + "pulse.retry": "Повторить попытку", + "pulse.loadingActivity": "Загрузка активности…", + "pulse.loading": "Загрузка…", + "pulse.loadError": "Не удалось загрузить активность", + "command.switchLanguage": "Изменить язык на {language}", + "locale.itIT": "Итальянский", + "locale.frFR": "Французский", + "locale.deDE": "Немецкий", + "locale.ruRU": "Русский", + "locale.esES": "Español (España)", + "locale.ptBR": "Português (Brasil)", + "locale.ptPT": "葡萄牙语(葡萄牙)", + "locale.es419": "西班牙语(拉丁美洲)", + "locale.zhCN": "简体中文", + "locale.jaJP": "日本語", + "locale.koKR": "Coreano" +} diff --git a/src/lib/locales/zh-CN.json b/src/lib/locales/zh-CN.json new file mode 100644 index 00000000..e6608d69 --- /dev/null +++ b/src/lib/locales/zh-CN.json @@ -0,0 +1,405 @@ +{ + "command.noMatches": "没有匹配的命令", + "command.palettePlaceholder": "输入命令...", + "command.footerNavigate": "↑↓ 导航", + "command.footerSelect": "↵ 选择", + "command.footerClose": "esc 关闭", + "command.footerSend": "↵ 发送", + "command.aiMode": "{agent} 模式", + "command.openSettings": "打开设置", + "command.openSettings.keywords": "设置 偏好 配置", + "command.openLanguageSettings": "打开语言设置", + "command.openLanguageSettings.keywords": "语言 区域 i18n 国际化 本地化 中文 english italian french german russian spanish portuguese japanese korean", + "command.useSystemLanguage": "使用系统语言", + "command.openH1Setting": "打开 H1 自动重命名设置", + "command.contribute": "参与贡献", + "command.checkUpdates": "检查更新", + "command.group.navigation": "导航", + "command.group.note": "笔记", + "command.group.git": "Git", + "command.group.view": "视图", + "command.group.settings": "设置", + "command.navigation.searchNotes": "搜索笔记", + "command.navigation.goAllNotes": "前往全部笔记", + "command.navigation.goArchived": "前往归档", + "command.navigation.goChanges": "前往更改", + "command.navigation.goHistory": "前往历史", + "command.navigation.goBack": "后退", + "command.navigation.goForward": "前进", + "command.navigation.goInbox": "前往收件箱", + "command.navigation.renameFolder": "重命名文件夹", + "command.navigation.deleteFolder": "删除文件夹", + "command.navigation.showOpenNotes": "显示打开的笔记", + "command.navigation.showArchivedNotes": "显示归档笔记", + "command.navigation.listType": "列出{type}", + "command.note.newNote": "新建笔记", + "command.note.newType": "新建类型", + "command.note.newTypedNote": "新建{type}", + "command.note.saveNote": "保存笔记", + "command.note.findInNote": "在笔记中查找", + "command.note.replaceInNote": "在笔记中替换", + "command.note.deleteNote": "删除笔记", + "command.note.archiveNote": "归档笔记", + "command.note.unarchiveNote": "取消归档笔记", + "command.note.addFavorite": "添加到收藏", + "command.note.removeFavorite": "从收藏中移除", + "command.note.markOrganized": "标记为已整理", + "command.note.markUnorganized": "标记为未整理", + "command.note.restoreDeleted": "恢复已删除笔记", + "command.note.setIcon": "设置笔记图标", + "command.note.removeIcon": "移除笔记图标", + "command.note.changeType": "更改笔记类型…", + "command.note.moveToFolder": "将笔记移动到文件夹…", + "command.note.openNewWindow": "在新窗口中打开", + "command.git.initialize": "为当前仓库初始化 Git", + "command.git.commitPush": "提交并推送", + "command.git.addRemote": "为当前仓库添加远程地址", + "command.git.pull": "从远程拉取", + "command.git.resolveConflicts": "解决冲突", + "command.git.viewChanges": "查看待处理更改", + "command.view.editorOnly": "仅编辑器", + "command.view.editorNoteList": "编辑器 + 笔记列表", + "command.view.fullLayout": "完整布局", + "command.view.toggleProperties": "切换属性面板", + "command.view.toggleDiff": "切换差异模式", + "command.view.toggleRaw": "切换源码编辑器", + "command.view.leftLayout": "使用左对齐笔记布局", + "command.view.centerLayout": "使用居中笔记布局", + "command.view.toggleAiPanel": "切换 AI 面板", + "command.view.newAiChat": "新建 AI 对话", + "command.view.toggleBacklinks": "切换反向链接", + "command.view.zoomIn": "放大({zoom}%)", + "command.view.zoomOut": "缩小({zoom}%)", + "command.view.resetZoom": "重置缩放", + "command.settings.createEmptyVault": "创建空仓库…", + "command.settings.openVault": "打开仓库…", + "command.settings.removeVault": "从列表移除仓库", + "command.settings.restoreGettingStarted": "恢复入门仓库", + "command.settings.manageExternalAi": "管理外部 AI 工具…", + "command.settings.setupExternalAi": "设置外部 AI 工具…", + "command.settings.reloadVault": "重新加载仓库", + "command.settings.repairVault": "修复仓库", + "command.ai.openAgents": "打开 AI 代理设置", + "command.ai.restoreGuidance": "恢复 Tolaria AI 指导文件", + "command.ai.switchToAgent": "将 AI 代理切换为 {agent}", + "command.ai.switchDefault": "切换默认 AI 代理", + "command.ai.switchDefaultWithAgent": "切换默认 AI 代理({agent})", + "settings.title": "设置", + "settings.close": "关闭设置", + "settings.sync.title": "同步与更新", + "settings.sync.description": "配置后台拉取以及 Tolaria 使用的更新通道。Stable 只接收手动推广的版本,Alpha 跟随 main 的每次推送。", + "settings.pullInterval": "拉取间隔(分钟)", + "settings.releaseChannel": "发布通道", + "settings.releaseStable": "Stable", + "settings.releaseAlpha": "Alpha", + "settings.appearance.title": "外观", + "settings.appearance.description": "选择 Tolaria 界面、编辑器、菜单和对话框使用的颜色模式。", + "settings.theme.label": "主题", + "settings.theme.light": "浅色", + "settings.theme.dark": "深色", + "settings.language.title": "语言", + "settings.language.description": "选择 Tolaria 界面的显示语言。系统选项会在支持时跟随 macOS,否则回退到英文。", + "settings.language.label": "显示语言", + "settings.language.system": "系统({language})", + "settings.language.summary": "缺失的翻译会回退到英文,因此部分翻译的语言也能正常使用。", + "settings.autogit.title": "AutoGit", + "settings.autogit.description.enabled": "在编辑暂停或应用不再活跃后,自动创建保守的 Git 检查点。", + "settings.autogit.description.disabled": "当前仓库启用 Git 后才能使用 AutoGit。请先为此仓库初始化 Git。", + "settings.autogit.enable": "启用 AutoGit", + "settings.autogit.enableDescription": "启用后,Tolaria 会在空闲暂停或应用变为非活跃后自动提交并推送保存的本地更改。", + "settings.autogit.idleThreshold": "空闲阈值(秒)", + "settings.autogit.inactiveThreshold": "应用非活跃宽限期(秒)", + "settings.titles.title": "标题与文件名", + "settings.titles.description": "选择 Tolaria 是否根据第一个 H1 标题自动同步未命名笔记的文件名。", + "settings.titles.autoRename": "根据第一个 H1 自动重命名未命名笔记", + "settings.titles.autoRenameDescription": "启用后,只要第一个 H1 成为真实标题,Tolaria 就会重命名 untitled-note 文件。关闭后,文件名会保持不变,直到你从面包屑栏手动重命名。", + "settings.aiAgents.title": "AI 代理", + "settings.aiAgents.description": "选择 Tolaria 在 AI 面板和命令面板中使用的 CLI AI 代理。", + "settings.aiAgents.default": "默认 AI 代理", + "settings.aiAgents.installed": "已安装", + "settings.aiAgents.missing": "缺失", + "settings.aiAgents.ready": "{agent}{version} 已可使用。", + "settings.aiAgents.notInstalled": "{agent} 尚未安装。你仍可先选择它,稍后再安装。", + "settings.workflow.title": "工作流", + "settings.workflow.description": "选择 Tolaria 是否显示收件箱工作流,以及整理时如何移动到下一项。", + "settings.workflow.explicit": "显式整理笔记", + "settings.workflow.explicitDescription": "启用后,收件箱会显示尚未整理的笔记,并提供一个开关用于标记为已整理。", + "settings.workflow.autoAdvance": "自动前进到下一条收件箱笔记", + "settings.workflow.autoAdvanceDescription": "启用后,将收件箱笔记标记为已整理会立即打开下一条可见的收件箱笔记。", + "settings.privacy.title": "隐私与遥测", + "settings.privacy.description": "匿名数据可帮助我们修复错误并改进 Tolaria。不会发送仓库内容、笔记标题或文件路径。", + "settings.privacy.crashReporting": "崩溃报告", + "settings.privacy.crashReportingDescription": "发送匿名错误报告", + "settings.privacy.analytics": "使用分析", + "settings.privacy.analyticsDescription": "分享匿名使用模式", + "settings.footerShortcut": "⌘, 打开设置", + "settings.cancel": "取消", + "settings.save": "保存", + "common.cancel": "取消", + "locale.en": "英文", + "sidebar.nav.inbox": "收件箱", + "sidebar.nav.allNotes": "全部笔记", + "sidebar.nav.archive": "归档", + "sidebar.group.favorites": "收藏", + "sidebar.group.views": "视图", + "sidebar.group.types": "类型", + "sidebar.group.folders": "文件夹", + "sidebar.action.createView": "创建视图", + "sidebar.action.editView": "编辑视图", + "sidebar.action.deleteView": "删除视图", + "sidebar.action.customizeSections": "自定义分组", + "sidebar.action.renameSection": "重命名分组…", + "sidebar.action.customizeIconColor": "自定义图标和颜色…", + "sidebar.action.createType": "新建类型", + "sidebar.action.collapse": "折叠侧边栏", + "sidebar.action.expand": "展开侧边栏", + "sidebar.action.createFolder": "创建文件夹", + "sidebar.action.renameFolder": "重命名文件夹", + "sidebar.action.deleteFolder": "删除文件夹", + "sidebar.action.revealFolderMenu": "在访达中显示", + "sidebar.action.copyFolderPathMenu": "复制文件夹路径", + "sidebar.action.renameFolderMenu": "重命名文件夹...", + "sidebar.action.deleteFolderMenu": "删除文件夹...", + "sidebar.folder.name": "文件夹名称", + "sidebar.folder.newName": "新文件夹名称", + "sidebar.folder.expand": "展开{name}", + "sidebar.folder.collapse": "折叠{name}", + "sidebar.section.name": "分组名称", + "sidebar.section.showInSidebar": "在侧边栏显示", + "sidebar.section.toggle": "切换{label}", + "sidebar.disabled.comingSoon": "即将推出", + "noteList.title.archive": "归档", + "noteList.title.changes": "更改", + "noteList.title.inbox": "收件箱", + "noteList.title.history": "历史", + "noteList.title.view": "视图", + "noteList.title.notes": "笔记", + "noteList.searchPlaceholder": "搜索笔记...", + "noteList.searchAction": "搜索笔记", + "noteList.createNote": "新建笔记", + "noteList.empty.changesError": "加载更改失败:{error}", + "noteList.empty.noChanges": "没有待处理更改", + "noteList.empty.noArchived": "没有归档笔记", + "noteList.empty.noMatching": "没有匹配的笔记", + "noteList.empty.allOrganized": "所有笔记都已整理", + "noteList.empty.noNotes": "没有笔记", + "noteList.empty.noMatchingItems": "没有匹配项", + "noteList.empty.noRelatedItems": "没有相关项", + "noteList.sort.modified": "已修改", + "noteList.sort.created": "已创建", + "noteList.sort.title": "标题", + "noteList.sort.status": "状态", + "noteList.sort.by": "按{label}排序", + "noteList.sort.menu": "排序{label}", + "noteList.sort.ascending": "升序", + "noteList.sort.descending": "降序", + "noteList.filter.open": "打开", + "noteList.filter.archived": "已归档", + "noteList.filter.week": "本周", + "noteList.filter.month": "本月", + "noteList.filter.all": "全部", + "noteList.properties.customizeColumns": "自定义列", + "noteList.properties.customizeAllColumns": "自定义全部笔记列", + "noteList.properties.customizeInboxColumns": "自定义收件箱列", + "noteList.properties.customizeViewColumns": "自定义{name}列", + "noteList.properties.showInNoteList": "在笔记列表中显示", + "noteList.properties.searchPlaceholder": "搜索属性...", + "noteList.properties.searchLabel": "搜索笔记列表属性", + "noteList.properties.noMatches": "没有匹配的属性。", + "noteList.properties.reorder": "重新排序{name}", + "noteList.changes.restoreNote": "恢复笔记", + "noteList.changes.discardChanges": "丢弃更改", + "noteList.changes.restoreDescription": "从 Git 恢复 {file}?", + "noteList.changes.discardDescription": "丢弃对 {file} 的更改?此操作无法撤销。", + "noteList.changes.thisFile": "此文件", + "noteList.changes.restore": "恢复", + "noteList.changes.discard": "丢弃", + "noteList.changes.cancel": "取消", + "editor.empty.selectNote": "选择一条笔记开始编辑", + "editor.empty.shortcuts": "{quickOpen} 搜索 · {newNote} 创建", + "editor.raw.label": "源码编辑器", + "editor.find.findLabel": "查找", + "editor.find.findPlaceholder": "查找", + "editor.find.replaceLabel": "替换", + "editor.find.replacePlaceholder": "替换", + "editor.find.matchCount": "{current} / {total}", + "editor.find.noMatches": "无匹配", + "editor.find.invalidRegex": "无效正则", + "editor.find.regexMustMatchText": "正则必须匹配文本", + "editor.find.previousMatch": "上一个匹配", + "editor.find.nextMatch": "下一个匹配", + "editor.find.showReplace": "显示替换", + "editor.find.hideReplace": "隐藏替换", + "editor.find.regex": "使用正则表达式", + "editor.find.matchCase": "区分大小写", + "editor.find.close": "关闭查找", + "editor.find.replace": "替换", + "editor.find.replaceAll": "全部", + "editor.toolbar.rawReturn": "返回编辑器", + "editor.toolbar.rawOpen": "打开源码编辑器", + "editor.toolbar.centerLayout": "切换到居中笔记布局", + "editor.toolbar.leftLayout": "切换到左对齐笔记布局", + "editor.toolbar.removeFavorite": "从收藏中移除", + "editor.toolbar.addFavorite": "添加到收藏", + "editor.toolbar.markUnorganized": "将笔记标记为未整理", + "editor.toolbar.markOrganized": "将笔记标记为已整理", + "editor.toolbar.noDiff": "尚无可用差异", + "editor.toolbar.loadingDiff": "正在加载差异", + "editor.toolbar.showDiff": "显示当前差异", + "editor.toolbar.openAi": "打开 AI 面板", + "editor.toolbar.closeAi": "关闭 AI 面板", + "editor.toolbar.restoreArchived": "恢复这条归档笔记", + "editor.toolbar.archive": "归档这条笔记", + "editor.toolbar.delete": "删除这条笔记", + "editor.toolbar.revealFile": "在访达中显示", + "editor.toolbar.copyFilePath": "复制文件路径", + "editor.toolbar.openProperties": "打开属性面板", + "editor.filename.rename": "重命名文件名", + "editor.filename.renameToTitle": "将文件重命名为匹配标题", + "editor.filename.trigger": "文件名 {filename}。按 Enter 重命名", + "editor.banner.archived": "已归档", + "editor.banner.unarchive": "取消归档", + "editor.banner.conflict": "这条笔记存在合并冲突", + "editor.banner.keepMine": "保留本地版本", + "editor.banner.keepMineTooltip": "保留我的本地版本", + "editor.banner.keepTheirs": "保留远程版本", + "editor.banner.keepTheirsTooltip": "保留远程版本", + "inspector.title.properties": "属性", + "inspector.title.propertiesShortcut": "属性(⌘⇧I)", + "inspector.title.closePropertiesShortcut": "关闭属性(⌘⇧I)", + "inspector.empty.noNoteSelected": "未选择笔记", + "inspector.empty.noProperties": "这条笔记还没有属性", + "inspector.empty.initializeProperties": "初始化属性", + "inspector.empty.invalidProperties": "属性无效", + "inspector.empty.fixInEditor": "在编辑器中修复", + "inspector.properties.addProperty": "添加属性", + "inspector.properties.deleteProperty": "删除属性", + "inspector.properties.none": "无", + "inspector.properties.missingType": "缺少类型", + "inspector.properties.missingTypeAria": "缺少类型 {type}。点击创建这个类型。", + "inspector.properties.searchTypes": "搜索类型...", + "inspector.properties.noMatchingTypes": "没有匹配的类型", + "inspector.properties.yes": "是", + "inspector.properties.no": "否", + "inspector.properties.pickDate": "选择日期…", + "inspector.properties.valuePlaceholder": "值", + "inspector.properties.propertyName": "属性名称", + "inspector.relationship.add": "添加", + "inspector.relationship.addRelationship": "+ 添加关系", + "inspector.relationship.name": "关系名称", + "inspector.relationship.noteTitle": "笔记标题", + "inspector.relationship.createAndOpen": "创建并打开", + "inspector.info.title": "信息", + "inspector.info.modified": "修改时间", + "inspector.info.created": "创建时间", + "inspector.info.words": "字数", + "inspector.info.size": "大小", + "update.available": "可用", + "update.releaseNotes": "发行说明", + "update.updateNow": "立即更新", + "update.dismiss": "关闭", + "update.downloading": "正在下载 Tolaria {version}...", + "update.readyRestart": "已准备好 - 重启后应用", + "update.restartNow": "立即重启", + "status.update.check": "检查更新", + "status.zoom.reset": "重置缩放级别", + "status.feedback.contribute": "为 Tolaria 贡献反馈", + "status.feedback.label": "贡献", + "status.theme.light": "切换到浅色模式", + "status.theme.dark": "切换到深色模式", + "status.settings.open": "打开设置", + "status.build.unknown": "b?", + "status.vault.switch": "切换仓库", + "status.vault.default": "仓库", + "status.vault.createEmpty": "创建空仓库", + "status.vault.openLocal": "打开本地文件夹", + "status.vault.cloneGit": "克隆 Git 仓库", + "status.vault.cloneGettingStarted": "克隆入门仓库", + "status.vault.notFound": "未找到仓库:{path}", + "status.vault.remove": "从列表移除 {label}", + "status.remote.noneConfigured": "未配置远程仓库", + "status.remote.inSync": "已与远程同步", + "status.remote.aheadTitle": "领先远程 {count} 个提交{plural}", + "status.remote.behindTitle": "落后远程 {count} 个提交{plural}", + "status.remote.ahead": "领先 {count}", + "status.remote.behind": "落后 {count}", + "status.remote.add": "为此仓库添加远程地址", + "status.remote.none": "无远程", + "status.remote.noneDescription": "这个 Git 仓库尚未配置远程地址。添加远程地址前,提交会保留在本地。", + "status.sync.syncing": "正在同步...", + "status.sync.conflict": "冲突", + "status.sync.failed": "同步失败", + "status.sync.pullRequired": "需要拉取", + "status.sync.notSynced": "未同步", + "status.sync.justNow": "刚刚已同步", + "status.sync.minutesAgo": "{minutes} 分钟前已同步", + "status.sync.resolveConflicts": "解决合并冲突", + "status.sync.inProgress": "同步进行中", + "status.sync.pullAndPush": "从远程拉取并推送", + "status.sync.retry": "重试同步", + "status.sync.now": "立即同步", + "status.sync.synced": "已同步", + "status.sync.conflicts": "冲突", + "status.sync.error": "错误", + "status.sync.status": "状态:{status}", + "status.sync.pull": "拉取", + "status.conflict.count": "{count} 个冲突{plural}", + "status.offline.title": "无互联网连接", + "status.offline.label": "离线", + "status.changes.view": "查看待处理更改", + "status.changes.label": "更改", + "status.commit.local": "在本地提交更改", + "status.commit.push": "提交并推送更改", + "status.commit.label": "提交", + "status.commit.openOnGitHub": "在 GitHub 打开提交 {hash}", + "status.git.disabledTooltip": "此仓库未启用 Git。初始化 Git 后可使用历史、同步、提交和更改视图。", + "status.git.disabled": "Git 已禁用", + "status.history.onlyGit": "历史仅适用于启用 Git 的仓库", + "status.history.open": "打开更改历史", + "status.history.label": "历史", + "status.mcp.notConnected": "外部 AI 工具未连接 - 点击设置", + "status.mcp.unknown": "MCP 状态未知", + "status.claude.missing": "缺少 Claude Code", + "status.claude.label": "Claude Code", + "status.claude.install": "未找到 Claude Code - 点击安装", + "status.ai.noAgents": "未检测到 AI 代理", + "status.ai.noAgentsTooltip": "未检测到 AI 代理 - 点击查看设置详情", + "status.ai.selectedMissing": "已选择 {agent},但尚未安装 - 点击查看设置详情", + "status.ai.defaultAgent": "默认 AI 代理:{agent}{version}", + "status.ai.restoreDetails": "{base}。{summary} - 点击查看恢复详情", + "status.ai.withGuidance": "{base}。{summary}", + "status.ai.active": "当前 AI 代理:{agent}", + "status.ai.unavailable": "所选 AI 代理不可用:{agent}", + "status.ai.install": "安装", + "status.ai.installAgent": "安装 {agent}", + "status.ai.vaultGuidance": "仓库指导文件", + "status.ai.restoreGuidance": "恢复 Tolaria AI 指导文件", + "status.ai.openOptions": "打开 AI 代理选项", + "pulse.title": "历史", + "pulse.today": "今天", + "pulse.yesterday": "昨天", + "pulse.commitCount": "{count} 个{label}", + "pulse.commitSingular": "提交", + "pulse.commitPlural": "提交", + "pulse.openOnGitHub": "在 GitHub 打开", + "pulse.expandFiles": "展开文件", + "pulse.collapseFiles": "折叠文件", + "pulse.noActivity": "暂无活动", + "pulse.emptyDescription": "提交更改后即可查看仓库历史", + "pulse.retry": "重试", + "pulse.loadingActivity": "正在加载活动…", + "pulse.loading": "正在加载…", + "pulse.loadError": "加载活动失败", + "command.switchLanguage": "切换语言为 {language}", + "locale.itIT": "意大利语", + "locale.frFR": "法语", + "locale.deDE": "德语", + "locale.ruRU": "俄语", + "locale.esES": "西班牙语(西班牙)", + "locale.ptBR": "葡萄牙语(巴西)", + "locale.ptPT": "葡萄牙语(葡萄牙)", + "locale.es419": "西班牙语(拉丁美洲)", + "locale.zhCN": "简体中文", + "locale.jaJP": "日语", + "locale.koKR": "韩语" +} diff --git a/src/lib/locales/zh-Hans.ts b/src/lib/locales/zh-Hans.ts deleted file mode 100644 index e462972d..00000000 --- a/src/lib/locales/zh-Hans.ts +++ /dev/null @@ -1,410 +0,0 @@ -import type { EN_TRANSLATIONS } from './en' - -export const ZH_HANS_TRANSLATIONS = { - 'command.noMatches': '没有匹配的命令', - 'command.palettePlaceholder': '输入命令...', - 'command.footerNavigate': '↑↓ 导航', - 'command.footerSelect': '↵ 选择', - 'command.footerClose': 'esc 关闭', - 'command.footerSend': '↵ 发送', - 'command.aiMode': '{agent} 模式', - 'command.openSettings': '打开设置', - 'command.openSettings.keywords': '设置 偏好 配置', - 'command.openLanguageSettings': '打开语言设置', - 'command.openLanguageSettings.keywords': '语言 区域 i18n 国际化 本地化 中文 english', - 'command.useSystemLanguage': '使用系统语言', - 'command.switchToEnglish': '切换到英文', - 'command.switchToChinese': '切换到简体中文', - 'command.openH1Setting': '打开 H1 自动重命名设置', - 'command.contribute': '参与贡献', - 'command.checkUpdates': '检查更新', - 'command.group.navigation': '导航', - 'command.group.note': '笔记', - 'command.group.git': 'Git', - 'command.group.view': '视图', - 'command.group.settings': '设置', - 'command.navigation.searchNotes': '搜索笔记', - 'command.navigation.goAllNotes': '前往全部笔记', - 'command.navigation.goArchived': '前往归档', - 'command.navigation.goChanges': '前往更改', - 'command.navigation.goHistory': '前往历史', - 'command.navigation.goBack': '后退', - 'command.navigation.goForward': '前进', - 'command.navigation.goInbox': '前往收件箱', - 'command.navigation.renameFolder': '重命名文件夹', - 'command.navigation.deleteFolder': '删除文件夹', - 'command.navigation.showOpenNotes': '显示打开的笔记', - 'command.navigation.showArchivedNotes': '显示归档笔记', - 'command.navigation.listType': '列出{type}', - 'command.note.newNote': '新建笔记', - 'command.note.newType': '新建类型', - 'command.note.newTypedNote': '新建{type}', - 'command.note.saveNote': '保存笔记', - 'command.note.findInNote': '在笔记中查找', - 'command.note.replaceInNote': '在笔记中替换', - 'command.note.deleteNote': '删除笔记', - 'command.note.archiveNote': '归档笔记', - 'command.note.unarchiveNote': '取消归档笔记', - 'command.note.addFavorite': '添加到收藏', - 'command.note.removeFavorite': '从收藏中移除', - 'command.note.markOrganized': '标记为已整理', - 'command.note.markUnorganized': '标记为未整理', - 'command.note.restoreDeleted': '恢复已删除笔记', - 'command.note.setIcon': '设置笔记图标', - 'command.note.removeIcon': '移除笔记图标', - 'command.note.changeType': '更改笔记类型…', - 'command.note.moveToFolder': '将笔记移动到文件夹…', - 'command.note.openNewWindow': '在新窗口中打开', - 'command.git.initialize': '为当前仓库初始化 Git', - 'command.git.commitPush': '提交并推送', - 'command.git.addRemote': '为当前仓库添加远程地址', - 'command.git.pull': '从远程拉取', - 'command.git.resolveConflicts': '解决冲突', - 'command.git.viewChanges': '查看待处理更改', - 'command.view.editorOnly': '仅编辑器', - 'command.view.editorNoteList': '编辑器 + 笔记列表', - 'command.view.fullLayout': '完整布局', - 'command.view.toggleProperties': '切换属性面板', - 'command.view.toggleDiff': '切换差异模式', - 'command.view.toggleRaw': '切换源码编辑器', - 'command.view.leftLayout': '使用左对齐笔记布局', - 'command.view.centerLayout': '使用居中笔记布局', - 'command.view.toggleAiPanel': '切换 AI 面板', - 'command.view.newAiChat': '新建 AI 对话', - 'command.view.toggleBacklinks': '切换反向链接', - 'command.view.zoomIn': '放大({zoom}%)', - 'command.view.zoomOut': '缩小({zoom}%)', - 'command.view.resetZoom': '重置缩放', - 'command.settings.createEmptyVault': '创建空仓库…', - 'command.settings.openVault': '打开仓库…', - 'command.settings.removeVault': '从列表移除仓库', - 'command.settings.restoreGettingStarted': '恢复入门仓库', - 'command.settings.manageExternalAi': '管理外部 AI 工具…', - 'command.settings.setupExternalAi': '设置外部 AI 工具…', - 'command.settings.reloadVault': '重新加载仓库', - 'command.settings.repairVault': '修复仓库', - 'command.ai.openAgents': '打开 AI 代理设置', - 'command.ai.restoreGuidance': '恢复 Tolaria AI 指导文件', - 'command.ai.switchToAgent': '将 AI 代理切换为 {agent}', - 'command.ai.switchDefault': '切换默认 AI 代理', - 'command.ai.switchDefaultWithAgent': '切换默认 AI 代理({agent})', - - 'settings.title': '设置', - 'settings.close': '关闭设置', - 'settings.sync.title': '同步与更新', - 'settings.sync.description': '配置后台拉取以及 Tolaria 使用的更新通道。Stable 只接收手动推广的版本,Alpha 跟随 main 的每次推送。', - 'settings.pullInterval': '拉取间隔(分钟)', - 'settings.releaseChannel': '发布通道', - 'settings.releaseStable': 'Stable', - 'settings.releaseAlpha': 'Alpha', - 'settings.appearance.title': '外观', - 'settings.appearance.description': '选择 Tolaria 界面、编辑器、菜单和对话框使用的颜色模式。', - 'settings.theme.label': '主题', - 'settings.theme.light': '浅色', - 'settings.theme.dark': '深色', - 'settings.language.title': '语言', - 'settings.language.description': '选择 Tolaria 界面的显示语言。系统选项会在支持时跟随 macOS,否则回退到英文。', - 'settings.language.label': '显示语言', - 'settings.language.system': '系统({language})', - 'settings.language.en': '英文', - 'settings.language.zhHans': '简体中文', - 'settings.language.summary': '缺失的翻译会回退到英文,因此部分翻译的语言也能正常使用。', - 'settings.autogit.title': 'AutoGit', - 'settings.autogit.description.enabled': '在编辑暂停或应用不再活跃后,自动创建保守的 Git 检查点。', - 'settings.autogit.description.disabled': '当前仓库启用 Git 后才能使用 AutoGit。请先为此仓库初始化 Git。', - 'settings.autogit.enable': '启用 AutoGit', - 'settings.autogit.enableDescription': '启用后,Tolaria 会在空闲暂停或应用变为非活跃后自动提交并推送保存的本地更改。', - 'settings.autogit.idleThreshold': '空闲阈值(秒)', - 'settings.autogit.inactiveThreshold': '应用非活跃宽限期(秒)', - 'settings.titles.title': '标题与文件名', - 'settings.titles.description': '选择 Tolaria 是否根据第一个 H1 标题自动同步未命名笔记的文件名。', - 'settings.titles.autoRename': '根据第一个 H1 自动重命名未命名笔记', - 'settings.titles.autoRenameDescription': '启用后,只要第一个 H1 成为真实标题,Tolaria 就会重命名 untitled-note 文件。关闭后,文件名会保持不变,直到你从面包屑栏手动重命名。', - 'settings.aiAgents.title': 'AI 代理', - 'settings.aiAgents.description': '选择 Tolaria 在 AI 面板和命令面板中使用的 CLI AI 代理。', - 'settings.aiAgents.default': '默认 AI 代理', - 'settings.aiAgents.installed': '已安装', - 'settings.aiAgents.missing': '缺失', - 'settings.aiAgents.ready': '{agent}{version} 已可使用。', - 'settings.aiAgents.notInstalled': '{agent} 尚未安装。你仍可先选择它,稍后再安装。', - 'settings.workflow.title': '工作流', - 'settings.workflow.description': '选择 Tolaria 是否显示收件箱工作流,以及整理时如何移动到下一项。', - 'settings.workflow.explicit': '显式整理笔记', - 'settings.workflow.explicitDescription': '启用后,收件箱会显示尚未整理的笔记,并提供一个开关用于标记为已整理。', - 'settings.workflow.autoAdvance': '自动前进到下一条收件箱笔记', - 'settings.workflow.autoAdvanceDescription': '启用后,将收件箱笔记标记为已整理会立即打开下一条可见的收件箱笔记。', - 'settings.privacy.title': '隐私与遥测', - 'settings.privacy.description': '匿名数据可帮助我们修复错误并改进 Tolaria。不会发送仓库内容、笔记标题或文件路径。', - 'settings.privacy.crashReporting': '崩溃报告', - 'settings.privacy.crashReportingDescription': '发送匿名错误报告', - 'settings.privacy.analytics': '使用分析', - 'settings.privacy.analyticsDescription': '分享匿名使用模式', - 'settings.footerShortcut': '⌘, 打开设置', - 'settings.cancel': '取消', - 'settings.save': '保存', - - 'common.cancel': '取消', - - 'locale.en': '英文', - 'locale.zhHans': '简体中文', - - 'sidebar.nav.inbox': '收件箱', - 'sidebar.nav.allNotes': '全部笔记', - 'sidebar.nav.archive': '归档', - 'sidebar.group.favorites': '收藏', - 'sidebar.group.views': '视图', - 'sidebar.group.types': '类型', - 'sidebar.group.folders': '文件夹', - 'sidebar.action.createView': '创建视图', - 'sidebar.action.editView': '编辑视图', - 'sidebar.action.deleteView': '删除视图', - 'sidebar.action.customizeSections': '自定义分组', - 'sidebar.action.renameSection': '重命名分组…', - 'sidebar.action.customizeIconColor': '自定义图标和颜色…', - 'sidebar.action.createType': '新建类型', - 'sidebar.action.collapse': '折叠侧边栏', - 'sidebar.action.expand': '展开侧边栏', - 'sidebar.action.createFolder': '创建文件夹', - 'sidebar.action.renameFolder': '重命名文件夹', - 'sidebar.action.deleteFolder': '删除文件夹', - 'sidebar.action.revealFolderMenu': '在访达中显示', - 'sidebar.action.copyFolderPathMenu': '复制文件夹路径', - 'sidebar.action.renameFolderMenu': '重命名文件夹...', - 'sidebar.action.deleteFolderMenu': '删除文件夹...', - 'sidebar.folder.name': '文件夹名称', - 'sidebar.folder.newName': '新文件夹名称', - 'sidebar.folder.expand': '展开{name}', - 'sidebar.folder.collapse': '折叠{name}', - 'sidebar.section.name': '分组名称', - 'sidebar.section.showInSidebar': '在侧边栏显示', - 'sidebar.section.toggle': '切换{label}', - 'sidebar.disabled.comingSoon': '即将推出', - - 'noteList.title.archive': '归档', - 'noteList.title.changes': '更改', - 'noteList.title.inbox': '收件箱', - 'noteList.title.history': '历史', - 'noteList.title.view': '视图', - 'noteList.title.notes': '笔记', - 'noteList.searchPlaceholder': '搜索笔记...', - 'noteList.searchAction': '搜索笔记', - 'noteList.createNote': '新建笔记', - 'noteList.empty.changesError': '加载更改失败:{error}', - 'noteList.empty.noChanges': '没有待处理更改', - 'noteList.empty.noArchived': '没有归档笔记', - 'noteList.empty.noMatching': '没有匹配的笔记', - 'noteList.empty.allOrganized': '所有笔记都已整理', - 'noteList.empty.noNotes': '没有笔记', - 'noteList.empty.noMatchingItems': '没有匹配项', - 'noteList.empty.noRelatedItems': '没有相关项', - 'noteList.sort.modified': '已修改', - 'noteList.sort.created': '已创建', - 'noteList.sort.title': '标题', - 'noteList.sort.status': '状态', - 'noteList.sort.by': '按{label}排序', - 'noteList.sort.menu': '排序{label}', - 'noteList.sort.ascending': '升序', - 'noteList.sort.descending': '降序', - 'noteList.filter.open': '打开', - 'noteList.filter.archived': '已归档', - 'noteList.filter.week': '本周', - 'noteList.filter.month': '本月', - 'noteList.filter.all': '全部', - 'noteList.properties.customizeColumns': '自定义列', - 'noteList.properties.customizeAllColumns': '自定义全部笔记列', - 'noteList.properties.customizeInboxColumns': '自定义收件箱列', - 'noteList.properties.customizeViewColumns': '自定义{name}列', - 'noteList.properties.showInNoteList': '在笔记列表中显示', - 'noteList.properties.searchPlaceholder': '搜索属性...', - 'noteList.properties.searchLabel': '搜索笔记列表属性', - 'noteList.properties.noMatches': '没有匹配的属性。', - 'noteList.properties.reorder': '重新排序{name}', - 'noteList.changes.restoreNote': '恢复笔记', - 'noteList.changes.discardChanges': '丢弃更改', - 'noteList.changes.restoreDescription': '从 Git 恢复 {file}?', - 'noteList.changes.discardDescription': '丢弃对 {file} 的更改?此操作无法撤销。', - 'noteList.changes.thisFile': '此文件', - 'noteList.changes.restore': '恢复', - 'noteList.changes.discard': '丢弃', - 'noteList.changes.cancel': '取消', - - 'editor.empty.selectNote': '选择一条笔记开始编辑', - 'editor.empty.shortcuts': '{quickOpen} 搜索 · {newNote} 创建', - 'editor.raw.label': '源码编辑器', - 'editor.find.findLabel': '查找', - 'editor.find.findPlaceholder': '查找', - 'editor.find.replaceLabel': '替换', - 'editor.find.replacePlaceholder': '替换', - 'editor.find.matchCount': '{current} / {total}', - 'editor.find.noMatches': '无匹配', - 'editor.find.invalidRegex': '无效正则', - 'editor.find.regexMustMatchText': '正则必须匹配文本', - 'editor.find.previousMatch': '上一个匹配', - 'editor.find.nextMatch': '下一个匹配', - 'editor.find.showReplace': '显示替换', - 'editor.find.hideReplace': '隐藏替换', - 'editor.find.regex': '使用正则表达式', - 'editor.find.matchCase': '区分大小写', - 'editor.find.close': '关闭查找', - 'editor.find.replace': '替换', - 'editor.find.replaceAll': '全部', - 'editor.toolbar.rawReturn': '返回编辑器', - 'editor.toolbar.rawOpen': '打开源码编辑器', - 'editor.toolbar.centerLayout': '切换到居中笔记布局', - 'editor.toolbar.leftLayout': '切换到左对齐笔记布局', - 'editor.toolbar.removeFavorite': '从收藏中移除', - 'editor.toolbar.addFavorite': '添加到收藏', - 'editor.toolbar.markUnorganized': '将笔记标记为未整理', - 'editor.toolbar.markOrganized': '将笔记标记为已整理', - 'editor.toolbar.noDiff': '尚无可用差异', - 'editor.toolbar.loadingDiff': '正在加载差异', - 'editor.toolbar.showDiff': '显示当前差异', - 'editor.toolbar.openAi': '打开 AI 面板', - 'editor.toolbar.closeAi': '关闭 AI 面板', - 'editor.toolbar.restoreArchived': '恢复这条归档笔记', - 'editor.toolbar.archive': '归档这条笔记', - 'editor.toolbar.delete': '删除这条笔记', - 'editor.toolbar.revealFile': '在访达中显示', - 'editor.toolbar.copyFilePath': '复制文件路径', - 'editor.toolbar.openProperties': '打开属性面板', - 'editor.filename.rename': '重命名文件名', - 'editor.filename.renameToTitle': '将文件重命名为匹配标题', - 'editor.filename.trigger': '文件名 {filename}。按 Enter 重命名', - 'editor.banner.archived': '已归档', - 'editor.banner.unarchive': '取消归档', - 'editor.banner.conflict': '这条笔记存在合并冲突', - 'editor.banner.keepMine': '保留本地版本', - 'editor.banner.keepMineTooltip': '保留我的本地版本', - 'editor.banner.keepTheirs': '保留远程版本', - 'editor.banner.keepTheirsTooltip': '保留远程版本', - - 'inspector.title.properties': '属性', - 'inspector.title.propertiesShortcut': '属性(⌘⇧I)', - 'inspector.title.closePropertiesShortcut': '关闭属性(⌘⇧I)', - 'inspector.empty.noNoteSelected': '未选择笔记', - 'inspector.empty.noProperties': '这条笔记还没有属性', - 'inspector.empty.initializeProperties': '初始化属性', - 'inspector.empty.invalidProperties': '属性无效', - 'inspector.empty.fixInEditor': '在编辑器中修复', - 'inspector.properties.addProperty': '添加属性', - 'inspector.properties.deleteProperty': '删除属性', - 'inspector.properties.none': '无', - 'inspector.properties.missingType': '缺少类型', - 'inspector.properties.missingTypeAria': '缺少类型 {type}。点击创建这个类型。', - 'inspector.properties.searchTypes': '搜索类型...', - 'inspector.properties.noMatchingTypes': '没有匹配的类型', - 'inspector.properties.yes': '是', - 'inspector.properties.no': '否', - 'inspector.properties.pickDate': '选择日期…', - 'inspector.properties.valuePlaceholder': '值', - 'inspector.properties.propertyName': '属性名称', - 'inspector.relationship.add': '添加', - 'inspector.relationship.addRelationship': '+ 添加关系', - 'inspector.relationship.name': '关系名称', - 'inspector.relationship.noteTitle': '笔记标题', - 'inspector.relationship.createAndOpen': '创建并打开', - 'inspector.info.title': '信息', - 'inspector.info.modified': '修改时间', - 'inspector.info.created': '创建时间', - 'inspector.info.words': '字数', - 'inspector.info.size': '大小', - - 'update.available': '可用', - 'update.releaseNotes': '发行说明', - 'update.updateNow': '立即更新', - 'update.dismiss': '关闭', - 'update.downloading': '正在下载 Tolaria {version}...', - 'update.readyRestart': '已准备好 - 重启后应用', - 'update.restartNow': '立即重启', - - 'status.update.check': '检查更新', - 'status.zoom.reset': '重置缩放级别', - 'status.feedback.contribute': '为 Tolaria 贡献反馈', - 'status.feedback.label': '贡献', - 'status.theme.light': '切换到浅色模式', - 'status.theme.dark': '切换到深色模式', - 'status.settings.open': '打开设置', - 'status.build.unknown': 'b?', - 'status.vault.switch': '切换仓库', - 'status.vault.default': '仓库', - 'status.vault.createEmpty': '创建空仓库', - 'status.vault.openLocal': '打开本地文件夹', - 'status.vault.cloneGit': '克隆 Git 仓库', - 'status.vault.cloneGettingStarted': '克隆入门仓库', - 'status.vault.notFound': '未找到仓库:{path}', - 'status.vault.remove': '从列表移除 {label}', - 'status.remote.noneConfigured': '未配置远程仓库', - 'status.remote.inSync': '已与远程同步', - 'status.remote.aheadTitle': '领先远程 {count} 个提交', - 'status.remote.behindTitle': '落后远程 {count} 个提交', - 'status.remote.ahead': '领先 {count}', - 'status.remote.behind': '落后 {count}', - 'status.remote.add': '为此仓库添加远程地址', - 'status.remote.none': '无远程', - 'status.remote.noneDescription': '这个 Git 仓库尚未配置远程地址。添加远程地址前,提交会保留在本地。', - 'status.sync.syncing': '正在同步...', - 'status.sync.conflict': '冲突', - 'status.sync.failed': '同步失败', - 'status.sync.pullRequired': '需要拉取', - 'status.sync.notSynced': '未同步', - 'status.sync.justNow': '刚刚已同步', - 'status.sync.minutesAgo': '{minutes} 分钟前已同步', - 'status.sync.resolveConflicts': '解决合并冲突', - 'status.sync.inProgress': '同步进行中', - 'status.sync.pullAndPush': '从远程拉取并推送', - 'status.sync.retry': '重试同步', - 'status.sync.now': '立即同步', - 'status.sync.synced': '已同步', - 'status.sync.conflicts': '冲突', - 'status.sync.error': '错误', - 'status.sync.status': '状态:{status}', - 'status.sync.pull': '拉取', - 'status.conflict.count': '{count} 个冲突', - 'status.offline.title': '无互联网连接', - 'status.offline.label': '离线', - 'status.changes.view': '查看待处理更改', - 'status.changes.label': '更改', - 'status.commit.local': '在本地提交更改', - 'status.commit.push': '提交并推送更改', - 'status.commit.label': '提交', - 'status.commit.openOnGitHub': '在 GitHub 打开提交 {hash}', - 'status.git.disabledTooltip': '此仓库未启用 Git。初始化 Git 后可使用历史、同步、提交和更改视图。', - 'status.git.disabled': 'Git 已禁用', - 'status.history.onlyGit': '历史仅适用于启用 Git 的仓库', - 'status.history.open': '打开更改历史', - 'status.history.label': '历史', - 'status.mcp.notConnected': '外部 AI 工具未连接 - 点击设置', - 'status.mcp.unknown': 'MCP 状态未知', - 'status.claude.missing': '缺少 Claude Code', - 'status.claude.label': 'Claude Code', - 'status.claude.install': '未找到 Claude Code - 点击安装', - 'status.ai.noAgents': '未检测到 AI 代理', - 'status.ai.noAgentsTooltip': '未检测到 AI 代理 - 点击查看设置详情', - 'status.ai.selectedMissing': '已选择 {agent},但尚未安装 - 点击查看设置详情', - 'status.ai.defaultAgent': '默认 AI 代理:{agent}{version}', - 'status.ai.restoreDetails': '{base}。{summary} - 点击查看恢复详情', - 'status.ai.withGuidance': '{base}。{summary}', - 'status.ai.active': '当前 AI 代理:{agent}', - 'status.ai.unavailable': '所选 AI 代理不可用:{agent}', - 'status.ai.install': '安装', - 'status.ai.installAgent': '安装 {agent}', - 'status.ai.vaultGuidance': '仓库指导文件', - 'status.ai.restoreGuidance': '恢复 Tolaria AI 指导文件', - 'status.ai.openOptions': '打开 AI 代理选项', - - 'pulse.title': '历史', - 'pulse.today': '今天', - 'pulse.yesterday': '昨天', - 'pulse.commitCount': '{count} 个{label}', - 'pulse.commitSingular': '提交', - 'pulse.commitPlural': '提交', - 'pulse.openOnGitHub': '在 GitHub 打开', - 'pulse.expandFiles': '展开文件', - 'pulse.collapseFiles': '折叠文件', - 'pulse.noActivity': '暂无活动', - 'pulse.emptyDescription': '提交更改后即可查看仓库历史', - 'pulse.retry': '重试', - 'pulse.loadingActivity': '正在加载活动…', - 'pulse.loading': '正在加载…', - 'pulse.loadError': '加载活动失败', -} satisfies Record diff --git a/src/mock-tauri/mock-handlers.coverage.test.ts b/src/mock-tauri/mock-handlers.coverage.test.ts index 0347f332..a6a56f88 100644 --- a/src/mock-tauri/mock-handlers.coverage.test.ts +++ b/src/mock-tauri/mock-handlers.coverage.test.ts @@ -152,7 +152,7 @@ describe('mockHandlers coverage', () => { analytics_enabled: true, anonymous_id: 'anon-1', release_channel: 'alpha', - ui_language: 'zh-Hans', + ui_language: 'zh-CN', default_ai_agent: 'codex', }, }) @@ -169,7 +169,7 @@ describe('mockHandlers coverage', () => { anonymous_id: 'anon-1', release_channel: 'alpha', theme_mode: null, - ui_language: 'zh-Hans', + ui_language: 'zh-CN', default_ai_agent: 'codex', }) diff --git a/tsconfig.app.json b/tsconfig.app.json index e5ea8d82..8f4f7e15 100644 --- a/tsconfig.app.json +++ b/tsconfig.app.json @@ -14,6 +14,7 @@ /* Bundler mode */ "moduleResolution": "bundler", + "resolveJsonModule": true, "allowImportingTsExtensions": true, "verbatimModuleSyntax": true, "moduleDetection": "force", diff --git a/tsconfig.node.json b/tsconfig.node.json index 15683c96..9b2bad39 100644 --- a/tsconfig.node.json +++ b/tsconfig.node.json @@ -9,6 +9,7 @@ /* Bundler mode */ "moduleResolution": "bundler", + "resolveJsonModule": true, "allowImportingTsExtensions": true, "verbatimModuleSyntax": true, "moduleDetection": "force",