diff --git a/.claude/memory.md b/.claude/memory.md index 1094a341d..4e50acc1b 100644 --- a/.claude/memory.md +++ b/.claude/memory.md @@ -287,7 +287,7 @@ Quick reference for anyone starting with Claude on this project. Updated by the - **`process_recovery.rs` is platform-gated** — `reap_stale_openhuman_processes` had only a macOS impl. Linux uses `/proc//cmdline`; Windows uses `wmic process get`. Tests for each platform's parsing logic live in the same file, following the existing macOS test pattern. - **`recover_port_conflict` is a Tauri IPC command, not JSON-RPC** — Rust E2E test for port fallback lives in `tests/json_rpc_e2e.rs` and calls `pick_listen_port` directly: bind port 7788 with a `std::net::TcpListener` (std, not tokio) to simulate conflict, confirm fallback, then serve via `tokio::net::TcpListener::from_std(pick_result.listener.into_std())`. - **`BootCheckTransport` is the right hook for frontend recovery** — `app/src/lib/bootCheck/index.ts` is the injection point for new recovery capabilities; don't add them directly to the BootCheck component. -- **i18n bootCheck keys live in `-3.ts` chunks** — New keys must be added to all 13 language files simultaneously (the `-3.ts` chunk for each language). +- **i18n locales are single flat files** — Each locale is one file at `app/src/lib/i18n/.ts` (`en.ts` is the source of truth; the old `chunks/-N.ts` layout was retired). New keys must be added to all 13 locale files simultaneously; `pnpm i18n:check` enforces key parity. - **Workflow folder** — `workflow/` at repo root has 5 markdown files (00–05) defining the full PR workflow: pick issue → architectobot plan → user approval → codecrusher → architectobot verify → checks → memory-keeper → commit → push/PR. ## Channel Event Workspace Routing (Issue #2602) diff --git a/AGENTS.md b/AGENTS.md index 6784c65c6..d8fecddac 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -532,7 +532,7 @@ Follow this order so behavior is **specified**, **proven in Rust**, **proven ove - **No dynamic imports** in production **`app/src`** code — use **static** `import` / `import type` at the top of the module. Do **not** use `import()` (async dynamic import), `React.lazy(() => import(...))`, or `await import('…')` to load app modules, Tauri APIs, or RPC clients. **Why:** predictable chunk graph, simpler static analysis, fewer surprises in Tauri + Vite, and easier code review. **If a module must not run at load time** (e.g. heavy optional path), use a static import and **guard the call site** with `try/catch` or an explicit runtime check instead of deferring module load via dynamic import. **Exceptions:** Vitest harness patterns (`vi.importActual`, dynamic imports **only** inside `*.test.ts` / `__tests__` / `test/setup.ts` when required by the runner); ambient `typeof import('…')` in `.d.ts`; config files (e.g. `tailwind.config.js` JSDoc).- **Type-only imports**: `import type` where appropriate. - **Dual socket / tool sync**: If you change realtime protocol, keep **frontend** (`socketService` / MCP transport) and **core** socket behavior aligned (see [`gitbooks/developing/architecture.md`](gitbooks/developing/architecture.md) dual-socket section). - **i18n for all UI text**: Every user-visible string in `app/src/**` (headings, labels, button text, placeholders, status chips, toasts, dialog copy, `aria-label`, etc.) must go through `useT()` from `app/src/lib/i18n/I18nContext`. Hard-coded literals in JSX or `label=`/`placeholder=`/`aria-label=` props are not allowed. Add the new key to [`app/src/lib/i18n/en.ts`](app/src/lib/i18n/en.ts) in the same PR — other locales fall back to English. **Exceptions:** developer-only debug logs, code identifiers, and non-display data (URLs, slugs, technical sentinel values). -- **i18n chunk files — update ALL locales**: The source-of-truth translation files are the **chunk files** under `app/src/lib/i18n/chunks/` (`en-{1..5}.ts` plus `-{1..5}.ts` for each locale). When adding or changing keys in `en.ts`, you **must also** add them to the corresponding English chunk file (`en-N.ts`) **and** to the same chunk number for every non-English locale (use the English value as a placeholder — translators fill in later). CI enforces parity via `pnpm i18n:check`; missing keys in any locale chunk will fail the i18n coverage gate. Locales: `ar`, `bn`, `de`, `es`, `fr`, `hi`, `id`, `it`, `ko`, `pt`, `ru`, `zh-CN`. +- **i18n locale files — update ALL locales**: Each locale is a **single flat file** at `app/src/lib/i18n/.ts` (`en.ts` is the source of truth; the chunked `chunks/-N.ts` layout was retired). When adding or changing keys in `en.ts`, you **must also** add the same key to every non-English locale file (use the English value as a placeholder — translators fill in later). CI enforces parity via `pnpm i18n:check`; a missing or extra key in any locale will fail the i18n coverage gate. Locales: `ar`, `bn`, `de`, `es`, `fr`, `hi`, `id`, `it`, `ko`, `pl`, `pt`, `ru`, `zh-CN`. --- diff --git a/CLAUDE.md b/CLAUDE.md index f94f46922..9c000748e 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -366,7 +366,7 @@ Specify → prove in Rust → prove over RPC → surface in the UI → test. - **No dynamic imports** in production `app/src` code — static `import` / `import type` only. No `import()`, `React.lazy(() => import(...))`, `await import(...)`. For heavy optional paths, use a static import and guard the call site with `try/catch` or a runtime check. *Exceptions*: Vitest harness patterns in `*.test.ts` / `__tests__` / `test/setup.ts`; ambient `typeof import('…')` in `.d.ts`; config files (e.g. `tailwind.config.js` JSDoc). - **Dual socket sync**: when changing the realtime protocol, keep `socketService` / MCP transport aligned with core socket behavior (see `gitbooks/developing/architecture.md` dual-socket section). - **i18n for all UI text**: every user-visible string in `app/src/**` (headings, labels, button text, placeholders, status chips, toasts, error messages, dialog copy) must go through `useT()` from `app/src/lib/i18n/I18nContext`. Hard-coded literals in JSX or `label=`/`placeholder=`/`aria-label=` props are not allowed. Add the key to [`app/src/lib/i18n/en.ts`](app/src/lib/i18n/en.ts) in the same PR — other locales fall back to English. Exceptions: developer-only debug logs, code identifiers, and non-display data (URLs, slugs, technical sentinel values). -- **i18n chunk files — update ALL locales**: the source-of-truth translation files are the **chunk files** under `app/src/lib/i18n/chunks/` (`en-{1..5}.ts` plus `-{1..5}.ts` for each locale). When adding or changing keys in `en.ts`, you **must also** add them to the corresponding English chunk file (`en-N.ts`) **and** to the same chunk number for every non-English locale (use the English value as a placeholder — translators fill in later). CI enforces parity via `pnpm i18n:check`; missing keys in any locale chunk will fail the i18n coverage gate. Locales: `ar`, `bn`, `de`, `es`, `fr`, `hi`, `id`, `it`, `ko`, `pt`, `ru`, `zh-CN`. +- **i18n locale files — update ALL locales**: each locale is a **single flat file** at `app/src/lib/i18n/.ts` (`en.ts` is the source of truth; the chunked `chunks/-N.ts` layout was retired). When adding or changing keys in `en.ts`, you **must also** add the same key to every non-English locale file (use the English value as a placeholder — translators fill in later). CI enforces parity via `pnpm i18n:check`; a missing or extra key in any locale will fail the i18n coverage gate. Locales: `ar`, `bn`, `de`, `es`, `fr`, `hi`, `id`, `it`, `ko`, `pl`, `pt`, `ru`, `zh-CN`. **`pnpm i18n:english:check`** ([`scripts/i18n-find-english.ts`](scripts/i18n-find-english.ts)) is a second gate that catches values still rendering English — including *stale* English (translated from an older en string that since changed), which `i18n:check` cannot see because it only compares against the current en value. It uses script-coverage for non-Latin locales and English-only function words for Latin locales, with a reviewed `INTENTIONAL_ENGLISH` allowlist for brand names / commands / paths / units / cognates. Add genuinely-English literals to that allowlist; never use it to silence an untranslated string. --- diff --git a/app/src/lib/i18n/__tests__/coverage.test.ts b/app/src/lib/i18n/__tests__/coverage.test.ts index 9aee355d2..a8c4b9d3b 100644 --- a/app/src/lib/i18n/__tests__/coverage.test.ts +++ b/app/src/lib/i18n/__tests__/coverage.test.ts @@ -2,7 +2,6 @@ import { describe, expect, it } from 'vitest'; import enAggregate from '../en'; -const CHUNK_COUNT = 5; const LOCALES = [ 'zh-CN', 'hi', @@ -16,95 +15,42 @@ const LOCALES = [ 'id', 'it', 'ko', + 'pl', ] as const; -interface ChunkModule { +interface LocaleModule { default: Record; } /** - * Eagerly imported chunk modules — Vite turns the glob into a static map at + * Eagerly imported locale modules — Vite turns the glob into a static map at * build time, so this works in both Vitest and production builds (no dynamic * import() at runtime, which CLAUDE.md forbids in app/src code). */ -const chunkModules = import.meta.glob('../chunks/*.ts', { eager: true }); +const localeModules = import.meta.glob('../*.ts', { eager: true }); -function loadChunks(locale: string): Array | null> { - const out: Array | null> = []; - for (let n = 1; n <= CHUNK_COUNT; n++) { - const key = `../chunks/${locale}-${n}.ts`; - const mod = chunkModules[key]; - out.push(mod ? mod.default : null); - } - return out; +function loadLocale(locale: string): Record { + const mod = localeModules[`../${locale}.ts`]; + if (!mod) throw new Error(`missing locale file: ${locale}.ts`); + return mod.default; } -function flatten(chunks: Array | null>): Record { - const out: Record = {}; - for (const c of chunks) { - if (!c) continue; - Object.assign(out, c); - } - return out; -} - -function keyToChunk(chunks: Array | null>): Map { - const out = new Map(); - chunks.forEach((c, i) => { - if (!c) return; - for (const k of Object.keys(c)) out.set(k, i + 1); - }); - return out; -} - -const enChunks = loadChunks('en'); -const enFlat = flatten(enChunks); -const enKeyChunk = keyToChunk(enChunks); +const enFlat = enAggregate as Record; describe('i18n coverage', () => { - it('English aggregate (en.ts) matches the en-N.ts chunks key-for-key', () => { - const enTsKeys = new Set(Object.keys(enAggregate as Record)); - const enChunkKeys = new Set(Object.keys(enFlat)); - const inAggregateOnly = [...enTsKeys].filter(k => !enChunkKeys.has(k)); - const inChunksOnly = [...enChunkKeys].filter(k => !enTsKeys.has(k)); - expect({ inAggregateOnly, inChunksOnly }).toEqual({ inAggregateOnly: [], inChunksOnly: [] }); - }); - - it('has no missing English chunk files', () => { - const missing = enChunks - .map((c, i) => (c == null ? i + 1 : null)) - .filter((n): n is number => n !== null); - expect(missing).toEqual([]); - }); - - it.each(LOCALES)('locale %s has no missing chunk files', locale => { - const missing = loadChunks(locale) - .map((c, i) => (c == null ? i + 1 : null)) - .filter((n): n is number => n !== null); - expect(missing).toEqual([]); + it.each(LOCALES)('locale %s has a translation file', locale => { + expect(localeModules[`../${locale}.ts`]).toBeDefined(); }); it.each(LOCALES)('locale %s defines every English key', locale => { - const flat = flatten(loadChunks(locale)); + const flat = loadLocale(locale); const missing = Object.keys(enFlat).filter(k => !(k in flat)); expect(missing).toEqual([]); }); it.each(LOCALES)('locale %s defines no keys absent from English', locale => { - const flat = flatten(loadChunks(locale)); + const flat = loadLocale(locale); const extra = Object.keys(flat).filter(k => !(k in enFlat)); expect(extra).toEqual([]); }); - - it.each(LOCALES)('locale %s places each key in the same chunk as English', locale => { - const localeKeyChunk = keyToChunk(loadChunks(locale)); - const drift: Array<{ key: string; en: number; locale: number }> = []; - for (const [k, actual] of localeKeyChunk) { - const expected = enKeyChunk.get(k); - if (expected !== undefined && expected !== actual) { - drift.push({ key: k, en: expected, locale: actual }); - } - } - expect(drift).toEqual([]); - }); }); diff --git a/app/src/lib/i18n/ar.ts b/app/src/lib/i18n/ar.ts index 86bfde069..f9b786974 100644 --- a/app/src/lib/i18n/ar.ts +++ b/app/src/lib/i18n/ar.ts @@ -1,31 +1,4010 @@ -import ar1 from './chunks/ar-1'; -import ar2 from './chunks/ar-2'; -import ar3 from './chunks/ar-3'; -import ar4 from './chunks/ar-4'; -import ar5 from './chunks/ar-5'; import type { TranslationMap } from './types'; -// Arabic (العربية) translations. Each chunk maps to chunks/en-N.ts. -// Missing keys fall back to English via I18nContext.resolveEn(). -const ar: TranslationMap = { - ...ar1, - ...ar2, - ...ar3, - ...ar4, - ...ar5, +// Arabic (العربية) translations. Keys mirror en.ts; missing/ +// English-identical values fall back to English via I18nContext.resolveEn(). +const messages: TranslationMap = { + 'nav.home': 'الرئيسية', + 'nav.human': 'إنسان', + 'nav.chat': 'المحادثة', + 'nav.connections': 'الاتصالات', + 'nav.memory': 'الذكاء', + 'nav.alerts': 'التنبيهات', + 'nav.rewards': 'المكافآت', + 'nav.settings': 'الإعدادات', + 'common.cancel': 'إلغاء', + 'common.save': 'حفظ', + 'common.confirm': 'تأكيد', + 'common.delete': 'حذف', + 'common.edit': 'تعديل', + 'common.create': 'إنشاء', + 'common.search': 'بحث', + 'common.loading': 'جارٍ التحميل…', + 'common.error': 'خطأ', + 'common.success': 'نجاح', + 'common.back': 'رجوع', + 'common.next': 'التالي', + 'common.finish': 'إنهاء', + 'common.close': 'إغلاق', + 'common.enabled': 'مفعّل', + 'common.disabled': 'معطّل', + 'common.on': 'تشغيل', + 'common.off': 'إيقاف', + 'common.yes': 'نعم', + 'common.no': 'لا', + 'common.ok': 'حسنًا', + 'common.name': 'الاسم', + 'common.retry': 'حاول مرة أخرى', + 'common.copy': 'نسخ', + 'common.copied': 'تم النسخ', + 'common.learnMore': 'معرفة المزيد', + 'common.seeAll': 'عرض', + 'common.dismiss': 'تجاهل', + 'common.clear': 'مسح', + 'common.reset': 'إعادة ضبط', + 'common.refresh': 'تحديث', + 'common.export': 'تصدير', + 'common.import': 'استيراد', + 'common.upload': 'رفع', + 'common.download': 'تنزيل', + 'common.add': 'إضافة', + 'common.remove': 'إزالة', + 'common.showMore': 'عرض المزيد', + 'common.showLess': 'عرض أقل', + 'common.submit': 'إرسال', + 'common.continue': 'متابعة', + 'common.comingSoon': 'قريبًا', + 'common.breadcrumb': 'مسار التنقل', + 'settings.general': 'عام', + 'settings.featuresAndAI': 'الميزات والذكاء الاصطناعي', + 'settings.billingAndRewards': 'الفوترة والمكافآت', + 'settings.support': 'الدعم', + 'settings.advanced': 'متقدم', + 'settings.dangerZone': 'منطقة الخطر', + 'settings.account': 'الحساب', + 'settings.accountDesc': 'عبارة الاسترداد والفريق والاتصالات والخصوصية', + 'settings.notifications': 'الإشعارات', + 'settings.notificationsDesc': 'عدم الإزعاج وضوابط الإشعارات لكل حساب', + 'settings.notifications.tabs.preferences': 'التفضيلات', + 'settings.notifications.tabs.routing': 'التوجيه', + 'settings.features': 'الميزات', + 'settings.featuresDesc': 'وعي الشاشة والمراسلة والأدوات', + 'settings.aiModels': 'الذكاء الاصطناعي والنماذج', + 'settings.aiModelsDesc': 'إعداد نموذج الذكاء الاصطناعي المحلي وتنزيلاته ومزود LLM', + 'settings.ai': 'إعداد الذكاء الاصطناعي', + 'settings.aiDesc': 'مزودو السحابة ونماذج Ollama المحلية والتوجيه لكل عبء عمل', + 'settings.billingUsage': 'الفوترة والاستخدام', + 'settings.billingUsageDesc': 'خطة الاشتراك والرصيد وطرق الدفع', + 'settings.rewards': 'المكافآت', + 'settings.rewardsDesc': 'الإحالات والقسائم والرصيد المكتسب', + 'settings.restartTour': 'إعادة الجولة التعريفية', + 'settings.restartTourDesc': 'إعادة تشغيل جولة المنتج من البداية', + 'settings.about': 'حول', + 'settings.aboutDesc': 'إصدار التطبيق وتحديثات البرنامج', + 'settings.developerOptions': 'متقدم', + 'settings.developerOptionsDesc': + 'إعداد الذكاء الاصطناعي وقنوات المراسلة والأدوات والتشخيص ولوحات التصحيح', + 'settings.clearAppData': 'مسح بيانات التطبيق', + 'settings.clearAppDataDesc': 'تسجيل الخروج وحذف جميع البيانات المحلية للتطبيق نهائيًا', + 'settings.logOut': 'تسجيل الخروج', + 'settings.logOutDesc': 'تسجيل الخروج من حسابك', + 'settings.exitLocalSession': 'الخروج من الجلسة المحلية', + 'settings.exitLocalSessionDesc': 'العودة إلى شاشة تسجيل الدخول', + 'settings.language': 'اللغة', + 'settings.betaBuild': 'الإصدار التجريبي - v{version}', + 'settings.languageDesc': 'لغة عرض واجهة التطبيق', + 'settings.alerts': 'التنبيهات', + 'settings.alertsDesc': 'عرض التنبيهات الأخيرة والنشاط في صندوق الوارد', + 'settings.account.recoveryPhrase': 'عبارة الاسترداد', + 'settings.account.recoveryPhraseDesc': 'عرض عبارة استرداد الحساب ونسخها احتياطيًا', + 'settings.account.team': 'الفريق', + 'settings.account.teamDesc': 'إدارة أعضاء الفريق والأذونات', + 'settings.account.connections': 'الاتصالات', + 'settings.account.connectionsDesc': 'إدارة الحسابات والخدمات المرتبطة', + 'settings.account.privacy': 'الخصوصية', + 'settings.account.privacyDesc': 'التحكم في البيانات التي تغادر جهازك', + 'migration.title': 'استيراد من مساعد آخر', + 'migration.description': + 'انقل الذاكرة والملاحظات من مساعد محلي آخر إلى مساحة العمل هذه. ابدأ بـ«معاينة» لرؤية ما سيتغير، ثم اضغط «تطبيق» لنسخ البيانات. يتم نسخ ذاكرتك الحالية احتياطيًا أولًا.', + 'migration.vendorLabel': 'المصدر', + 'migration.vendor.openclaw': 'OpenClaw', + 'migration.vendor.hermes': 'Hermes Agent', + 'migration.sourceLabel': 'مسار مساحة العمل المصدر (اختياري)', + 'migration.sourcePlaceholder': 'اتركه فارغًا للاكتشاف التلقائي (مثال: ~/.openclaw/workspace)', + 'migration.sourcePlaceholderHermes': 'اتركه فارغاً للاكتشاف التلقائي (مثال: ~/.hermes)', + 'migration.sourceHint': + 'يستخدم الموقع الافتراضي للمصدر عند تركه فارغًا. حدد مسارًا صريحًا إذا نقلت مساحة العمل إلى مكان آخر.', + 'migration.previewAction': 'معاينة', + 'migration.previewRunning': 'جاري المعاينة…', + 'migration.applyAction': 'تطبيق الاستيراد', + 'migration.applyRunning': 'جاري الاستيراد…', + 'migration.applyDisclaimer': + 'يُفتح التطبيق فقط بعد معاينة ناجحة لنفس المصدر. يتم نسخ الذاكرة الحالية احتياطيًا قبل أي استيراد.', + 'migration.reportTitlePreview': 'معاينة — لم يُستورد شيء بعد', + 'migration.reportTitleApplied': 'اكتمل الاستيراد', + 'migration.report.source': 'مساحة العمل المصدر', + 'migration.report.target': 'مساحة العمل الهدف', + 'migration.report.fromSqlite': 'من SQLite (brain.db)', + 'migration.report.fromMarkdown': 'من Markdown', + 'migration.report.imported': 'مُستورد', + 'migration.report.skippedUnchanged': 'تم تخطّيه (دون تغيير)', + 'migration.report.renamedConflicts': 'تمت إعادة التسمية عند التعارض', + 'migration.report.warnings': 'تحذيرات', + 'migration.report.previewHint': 'لم تُستورد أي بيانات بعد. اضغط «تطبيق الاستيراد» للنسخ.', + 'migration.report.appliedHint': + 'العناصر المستوردة أصبحت الآن في ذاكرتك. أعد تشغيل «المعاينة» للمقارنة مرة أخرى.', + 'migration.confirmImport.singular': + 'استيراد {count} عنصر إلى مساحة العمل الحالية؟\n\nالمصدر: {source}\nالهدف: {target}\n\nسيتم نسخ الذاكرة الحالية احتياطيًا قبل بدء الاستيراد.', + 'migration.confirmImport.plural': + 'استيراد {count} عنصر إلى مساحة العمل الحالية؟\n\nالمصدر: {source}\nالهدف: {target}\n\nسيتم نسخ الذاكرة الحالية احتياطيًا قبل بدء الاستيراد.', + 'settings.notifications.doNotDisturb': 'عدم الإزعاج', + 'settings.notifications.doNotDisturbDesc': 'إيقاف جميع الإشعارات مؤقتًا لفترة محددة', + 'settings.notifications.channelControls': 'ضوابط لكل قناة', + 'settings.notifications.channelControlsDesc': 'ضبط تفضيلات الإشعارات لكل قناة', + 'settings.features.screenAwareness': 'وعي الشاشة', + 'settings.features.screenAwarenessDesc': 'السماح للمساعد برؤية نافذتك النشطة', + 'settings.features.messaging': 'المراسلة', + 'settings.features.messagingDesc': 'إعدادات تكامل القنوات والمراسلة', + 'settings.features.tools': 'الأدوات', + 'settings.features.toolsDesc': 'إدارة الأدوات والتكاملات المتصلة', + 'settings.ai.localSetup': 'إعداد الذكاء الاصطناعي المحلي', + 'settings.ai.localSetupDesc': 'تنزيل نماذج الذكاء الاصطناعي المحلية وضبطها', + 'settings.ai.llmProvider': 'مزود LLM', + 'settings.ai.llmProviderDesc': 'اختيار مزود الذكاء الاصطناعي وضبطه', + 'clearData.title': 'مسح بيانات التطبيق', + 'clearData.warning': 'سيؤدي هذا إلى تسجيل خروجك وحذف بيانات التطبيق المحلية نهائيًا، بما فيها:', + 'clearData.bulletSettings': 'إعدادات التطبيق والمحادثات', + 'clearData.bulletCache': 'جميع بيانات ذاكرة التخزين المؤقت للتكاملات المحلية', + 'clearData.bulletWorkspace': 'بيانات مساحة العمل', + 'clearData.bulletOther': 'جميع البيانات المحلية الأخرى', + 'clearData.irreversible': 'لا يمكن التراجع عن هذا الإجراء.', + 'clearData.clearing': 'جارٍ مسح بيانات التطبيق...', + 'clearData.failed': 'فشل مسح البيانات وتسجيل الخروج. يرجى المحاولة مرة أخرى.', + 'clearData.failedLogout': 'فشل تسجيل الخروج. يرجى المحاولة مرة أخرى.', + 'clearData.failedPersist': 'فشل مسح حالة التطبيق المحفوظة. يرجى المحاولة مرة أخرى.', + 'welcome.title': 'مرحبًا بك في OpenHuman', + 'welcome.subtitle': 'مساعدك الذكي الشخصي. خاص وبسيط وبالغ القوة.', + 'welcome.connectPrompt': 'ضبط عنوان URL للـ RPC (متقدم)', + 'welcome.selectRuntime': 'اختر بيئة التشغيل', + 'welcome.clearingAppData': 'مسح بيانات التطبيق...', + 'welcome.clearAppDataAndRestart': 'مسح بيانات التطبيق وإعادة تشغيله', + 'welcome.clearAppDataWarning': + 'سيؤدي هذا إلى مسح الأسرار والحسابات المخزنة محلياً على هذا الجهاز. حسابك السحابي غير متأثر — يمكنك تسجيل الدخول مجدداً فوراً بعد ذلك.', + 'welcome.resetErrorFallback': + 'تعذّر مسح بيانات التطبيق. يرجى إنهاء OpenHuman وإعادة فتحه، ثم حاول مجدداً.', + 'welcome.signingIn': 'تسجيل دخولك...', + 'welcome.termsIntro': 'من خلال المتابعة، فإنك توافق على', + 'welcome.termsOfUse': 'الشروط', + 'welcome.termsJoiner': 'و', + 'welcome.privacyPolicy': 'سياسة الخصوصية', + 'welcome.termsOutro': '.', + 'welcome.urlPlaceholder': 'http://localhost:8089', + 'welcome.invalidUrl': 'يرجى إدخال عنوان URL صالح لـ HTTP أو HTTPS', + 'welcome.connecting': 'اختبار', + 'welcome.connect': 'اختبار', + 'home.greeting': 'صباح الخير', + 'home.greetingAfternoon': 'مساء الخير', + 'home.greetingEvening': 'مساء النور', + 'home.askAssistant': 'اسأل مساعدك أي شيء...', + 'home.statusOk': + 'جهازك متصل. احتفظ بالتطبيق مفتوحًا للحفاظ على الاتصال. راسل وكيلك باستخدام الزر أدناه.', + 'home.statusBackendOnly': 'جارٍ إعادة الاتصال بالخادم… سيتوفر وكيلك قريبًا.', + 'home.statusCoreUnreachable': + 'العملية الأساسية المحلية لا تستجيب. قد تكون عملية OpenHuman في الخلفية قد تعطلت أو فشلت في البدء.', + 'home.statusInternetOffline': + 'جهازك غير متصل بالإنترنت حاليًا. تحقق من شبكتك أو أعد تشغيل التطبيق لإعادة الاتصال.', + 'home.restartCore': 'إعادة تشغيل النواة', + 'home.restartingCore': 'جارٍ إعادة تشغيل النواة…', + 'home.themeToggle.toLight': 'التبديل إلى الوضع الفاتح', + 'home.themeToggle.toDark': 'التبديل إلى الوضع الداكن', + 'home.usageExhaustedTitle': 'لقد استنفدت حصتك', + 'home.usageExhaustedBody': 'لقد نفدت حصتك المضمنة حالياً. ابدأ اشتراكاً لفتح سعة إضافية مستمرة.', + 'home.usageExhaustedCta': 'ابدأ الاشتراك', + 'home.routinesCard': 'روتيناتك', + 'home.routinesActive': '{count} نشطة', + 'routines.title': 'روتيناتك', + 'routines.subtitle': 'الأشياء التي يقوم بها مساعدك تلقائياً', + 'routines.loading': 'روتينات تحميل...', + 'routines.empty': 'لا روتينات بعد', + 'routines.emptyHint': + 'ويمكن لمساعدكم أن يدير مهامه على جدول زمني - مثل جلسات الإحاطة الصباحية أو الملخصات اليومية.', + 'routines.refresh': 'التجديد', + 'routines.nextRun': 'الجولة التالية', + 'routines.lastRunSuccess': 'آخر مرة نجحت', + 'routines.lastRunFailed': 'آخر مرة فشلت', + 'routines.notRunYet': 'لم يهرب بعد', + 'routines.runNow': 'اركض الآن', + 'routines.running': 'تشغيل...', + 'routines.viewHistory': 'تاريخ الرؤية', + 'routines.loadingHistory': 'التعبئة...', + 'routines.noHistory': 'لا يوجد تاريخ بعد', + 'routines.statusSuccess': 'النجاح', + 'routines.statusError': 'خطأ', + 'routines.showOutput': 'النواتج', + 'routines.hideOutput': 'الناتج الخفي', + 'routines.toggleEnabled': 'هذا الروتيني', + 'routines.typeAgent': 'الوكيل', + 'routines.typeCommand': 'القيادة', + 'nav.routines': 'Routines', + 'chat.newThread': 'محادثة جديدة', + 'chat.typeMessage': 'اكتب رسالة...', + 'chat.send': 'إرسال الرسالة', + 'chat.thinking': 'جارٍ التفكير...', + 'chat.noMessages': 'لا توجد رسائل بعد', + 'chat.startConversation': 'ابدأ محادثة', + 'chat.regenerate': 'إعادة التوليد', + 'chat.copyResponse': 'نسخ الرد', + 'chat.citations': 'المراجع', + 'chat.toolUsed': 'الأداة المستخدمة', + 'scope.legacy': 'قديم', + 'scope.user': 'مستخدم', + 'scope.project': 'مشروع', + 'skills.title': 'الاتصالات', + 'skills.search': 'البحث في الاتصالات...', + 'skills.noResults': 'لم يتم العثور على اتصالات', + 'skills.connect': 'توصيل', + 'skills.disconnect': 'قطع الاتصال', + 'skills.configure': 'إدارة', + 'skills.connected': 'متصل', + 'skills.available': 'متاح', + 'skills.addAccount': 'إضافة حساب', + 'skills.channels': 'القنوات', + 'skills.integrations': 'التكاملات', + 'skills.integrationsSubtitle': + 'اتصالات OAuth السحابية — سجّل الدخول بحسابك ويتولى Composio إدارة الرموز حتى يتمكن الوكلاء من القراءة والتصرف نيابةً عنك. لا حاجة لإدارة مفاتيح API.', 'skills.composio.noApiKeyTitle': 'لم يتم إعداد مفتاح Composio API', 'skills.composio.noApiKeyDescription': 'يستخدم الوضع المحلي مفتاح Composio API الخاص بك. افتح الإعدادات ← الخيارات المتقدمة ← Composio لإضافته قبل توصيل التكاملات هنا.', 'skills.composio.noApiKeyCta': 'افتح في الإعدادات', - 'channels.localManagedUnavailable': 'القنوات المُدارة غير متاحة للمستخدمين المحليين.', + 'skills.tabs.composio': 'Composio', + 'skills.tabs.channels': 'القنوات', + 'skills.tabs.mcp': 'MCP الخوادم', + 'skills.tabs.runners': 'Runners', + 'memory.title': 'الذاكرة', + 'memory.search': 'البحث في الذكريات...', + 'memory.noResults': 'لم يتم العثور على ذكريات', + 'memory.empty': 'لا توجد ذكريات بعد. تُنشأ الذكريات تلقائيًا أثناء تفاعلك.', + 'memory.tab.memory': 'الذاكرة', + 'memory.tab.tasks': 'مهام الوكيل', + 'memory.tab.tasksDescription': + 'أنشئ المهام وتتبعها — مهامك الخاصة بالإضافة إلى اللوحات التي يبنيها وكلاؤك عبر المحادثات.', + 'memory.tab.subconscious': 'اللاوعي', + 'memory.tab.dreams': 'الأحلام', + 'memory.tab.calls': 'المكالمات', + 'memory.tab.diagram': 'Diagram', + 'memory.tab.centrality': 'Centrality', + 'memory.tab.settings': 'الإعدادات', + 'memory.analyzeNow': 'تحليل الآن', + 'graphCentrality.title': 'مركز المعرفة', + 'graphCentrality.intro': + 'ويظهر الإرسال على صور ذاكرتك مراكز الحمل - والكيانات الموصلة التي تربط المجموعات المنفصلة عن بعضها البعض، والتي لا يمكن لإحصاء الترددات الخام أن يكشف عنها.', + 'graphCentrality.loading': 'مركزية الكمبيوتر...', + 'graphCentrality.errorPrefix': 'لا يمكن تحميل الرسم البياني:', + 'graphCentrality.retry': 'Retry', + 'graphCentrality.empty': 'لا يوجد رسم بياني بعد', + 'graphCentrality.emptyHint': 'كما يسجل المساعد الحقائق عنك، أكثر الكيانات صلة سوف تظهر هنا.', + 'graphCentrality.namespaceLabel': 'الاسم الفضائي', + 'graphCentrality.namespaceAll': 'جميع أماكن الاسم', + 'graphCentrality.metricEntities': 'الكيانات', + 'graphCentrality.metricConnections': 'الارتباطات', + 'graphCentrality.metricClusters': 'المجموعات', + 'graphCentrality.clustersCaption': 'مجموعة " Xqx0xxx " ؛ أكبر الحاويات Xqx1x', + 'graphCentrality.approximateBadge': 'تقريبا', + 'graphCentrality.approximateTitle': 'وقفت في غطاء التكسير قبل التقارب الكامل', + 'graphCentrality.rankedHeading': 'الكيانات الرئيسية بالنفوذ', + 'graphCentrality.colRank': '#', + 'graphCentrality.colEntity': 'الكيان', + 'graphCentrality.colInfluence': 'التأثير', + 'graphCentrality.colLinks': 'الروابط', + 'graphCentrality.bridgeBadge': 'التوصيل', + 'graphCentrality.bridgeTitle': 'موصّل — أكثر تأثيرًا مما يوحي به عدد روابطه', + 'graphCentrality.degreeTitle': 'Xqx0xxx في ×1x', + 'memoryTree.status.title': 'شجرة الذاكرة', + 'memoryTree.status.autoSyncLabel': 'النظام الآلي', + 'memoryTree.status.autoSyncDescription': 'توقف عن الابتلاع (ويكي) الحالي يبقى قابلاً للتساؤل', + 'memoryTree.status.statusTile': 'الحالة', + 'memoryTree.status.lastSyncTile': 'آخر تزامن', + 'memoryTree.status.totalChunksTile': 'مجموع الشرائح', + 'memoryTree.status.wikiSizeTile': 'حجم ويك', + 'memoryTree.status.statusRunning': 'تشغيل', + 'memoryTree.status.statusPaused': 'مدفوع', + 'memoryTree.status.statusSyncing': 'الموسم', + 'memoryTree.status.statusError': 'خطأ', + 'memoryTree.status.statusIdle': 'Idle', + 'memoryTree.status.never': 'أبداً', + 'memoryTree.status.fetchError': 'لم أستطع الحصول على وضعية شجرة الذاكرة', + 'memoryTree.status.retry': 'Retry', + 'memoryTree.status.toggleFailed': 'لا يمكن أن نهز السيرة الذاتية', + 'memoryTree.status.justNow': 'الآن', + 'memoryTree.status.secondsAgo': 'اكساكسوكس قبل', + 'memoryTree.status.minuteAgo': 'قبل 1 دقائق', + 'memoryTree.status.minutesAgo': 'منذ {count} دقيقة', + 'memoryTree.status.hourAgo': 'قبل شهر', + 'memoryTree.status.hoursAgo': 'قبل شهر', + 'memoryTree.status.dayAgo': 'قبل يوم واحد', + 'memoryTree.status.daysAgo': 'قبل أيام', + 'alerts.title': 'التنبيهات', + 'alerts.empty': 'لا توجد تنبيهات بعد', + 'alerts.markAllRead': 'تحديد الكل كمقروء', + 'alerts.unread': 'غير مقروء', + 'rewards.title': 'المكافآت', + 'rewards.referrals': 'الإحالات', + 'rewards.coupons': 'استرداد', 'rewards.localUnavailable': 'تسجيل الدخول المحلي لا يمنح مكافآت أو قسائم أو رصيد إحالة. لكسب المكافآت، سجّل الخروج ثم تابِع بتسجيل الدخول باستخدام حساب OpenHuman.', 'rewards.localUnavailableCta': 'افتح إعدادات الحساب', + 'rewards.credits': 'الرصيد', + 'rewards.referralCode': 'رمز الإحالة الخاص بك', + 'rewards.copyCode': 'نسخ الرمز', + 'rewards.share': 'مشاركة', + 'onboarding.welcome': 'مرحبًا. أنا OpenHuman.', + 'onboarding.welcomeDesc': 'مساعدك الذكي الفائق الذي يعمل على جهازك. خاص وبسيط وبالغ القوة.', + 'onboarding.context': 'جمع السياق', + 'onboarding.contextDesc': 'اربط الأدوات والخدمات التي تستخدمها يوميًا.', + 'onboarding.localAI': 'الذكاء الاصطناعي المحلي', + 'onboarding.localAIDesc': 'إعداد نموذج ذكاء اصطناعي محلي يعمل على جهازك.', + 'onboarding.chatProvider': 'مزود المحادثة', + 'onboarding.chatProviderDesc': 'اختر طريقة تفاعلك مع مساعدك.', + 'onboarding.referral': 'الإحالة', + 'onboarding.referralDesc': 'أدخل رمز إحالة إن كان لديك واحد.', + 'onboarding.finish': 'إتمام الإعداد', + 'onboarding.finishDesc': 'انتهيت! ابدأ استخدام OpenHuman.', + 'onboarding.skip': 'تخطي', + 'onboarding.getStarted': 'ابدأ الآن', + 'onboarding.runtimeChoice.title': 'كيف تريد تشغيل OpenHuman؟', + 'onboarding.runtimeChoice.subtitle': + 'اختر الإعداد الأنسب لك. يمكنك تغيير هذا لاحقًا في الإعدادات.', + 'onboarding.runtimeChoice.cloud.title': 'بسيط', + 'onboarding.runtimeChoice.cloud.tagline': 'دع OpenHuman يدير كل شيء نيابةً عنك.', + 'onboarding.runtimeChoice.cloud.f1': 'أمان مدمج', + 'onboarding.runtimeChoice.cloud.f2': 'ضغط الرموز لتمديد استخدامك', + 'onboarding.runtimeChoice.cloud.f3': 'اشتراك واحد يشمل جميع النماذج', + 'onboarding.runtimeChoice.cloud.f4': 'لا حاجة لإدارة مفاتيح API', + 'onboarding.runtimeChoice.cloud.f5': 'سهل الإعداد', + 'onboarding.runtimeChoice.custom.title': 'تشغيل مخصص', + 'onboarding.runtimeChoice.custom.tagline': 'استخدم مفاتيحك الخاصة. تحكم كامل في ما تستخدمه.', + 'onboarding.runtimeChoice.custom.f1': 'ستحتاج إلى مفاتيح API لمعظم الميزات', + 'onboarding.runtimeChoice.custom.f2': 'يُعيد استخدام الخدمات التي تدفع لها مسبقًا', + 'onboarding.runtimeChoice.custom.f3': 'يمكن أن يكون مجانيًا إذا شغّلت كل شيء محليًا', + 'onboarding.runtimeChoice.custom.f4': 'إعداد أكثر وخيارات أوسع', + 'onboarding.runtimeChoice.custom.f5': 'الأفضل للمستخدمين المتمرسين والمطورين', + 'onboarding.runtimeChoice.cloud.creditHighlight': '$1 رصيد مجاني للتجربة', + 'onboarding.runtimeChoice.continueCloud': 'المتابعة بالخيار البسيط', + 'onboarding.runtimeChoice.continueCustom': 'المتابعة بالخيار المخصص', + 'onboarding.runtimeChoice.recommended': 'موصى به', + 'onboarding.apiKeys.title': 'لنضف مفاتيح API الخاصة بك', + 'onboarding.apiKeys.subtitle': + 'يمكنك لصقها الآن أو تخطيها وإضافتها لاحقًا من الإعدادات › الذكاء الاصطناعي. تُحفظ المفاتيح على هذا الجهاز مشفرةً.', + 'onboarding.apiKeys.openaiLabel': 'مفتاح OpenAI API', + 'onboarding.apiKeys.openaiPlaceholder': 'sk-...', + 'onboarding.apiKeys.openaiOauthHint': + 'استخدم ChatGPT Plus/Pro (اشتراك) أو مفتاح OpenAI API - ليس كلاهما مطلوبًا.', + 'onboarding.apiKeys.openaiOauthOpening': 'فتح تسجيل الدخول...', + 'onboarding.apiKeys.finishSignIn': 'إنهاء تسجيل الدخول إلى ChatGPT', + 'onboarding.apiKeys.orApiKey': 'أو مفتاح API', + 'onboarding.apiKeys.anthropicLabel': 'مفتاح Anthropic API', + 'onboarding.apiKeys.anthropicPlaceholder': 'sk-ant-...', + 'onboarding.apiKeys.saveError': 'تعذّر حفظ هذا المفتاح. يرجى مراجعته والمحاولة مرة أخرى.', + 'onboarding.apiKeys.skipForNow': 'تخطي في الوقت الحالي', + 'onboarding.apiKeys.continue': 'حفظ ومتابعة', + 'onboarding.apiKeys.saving': 'جارٍ الحفظ…', + 'onboarding.custom.stepperInference': 'الاستدلال', + 'onboarding.custom.stepperVoice': 'الصوت', + 'onboarding.custom.stepperOAuth': 'OAuth', + 'onboarding.custom.stepperSearch': 'البحث', + 'onboarding.custom.stepperEmbeddings': 'Embeddings', + 'onboarding.custom.stepperMemory': 'الذاكرة', + 'onboarding.custom.stepCounter': 'الخطوة {n} من {total}', + 'onboarding.custom.defaultTitle': 'افتراضي', + 'onboarding.custom.defaultSubtitle': 'دع OpenHuman يديره نيابةً عنك.', + 'onboarding.custom.configureTitle': 'ضبط', + 'onboarding.custom.configureSubtitle': 'سأختار ما يُستخدم بنفسي.', + 'onboarding.custom.progressAriaLabel': 'تقدم الإعداد الأولي', + 'onboarding.custom.continue': 'متابعة', + 'onboarding.custom.back': 'رجوع', + 'onboarding.custom.finish': 'إتمام الإعداد', + 'onboarding.custom.configureLater': + 'يمكنك إكمال الإعداد بعد انتهاء الإعداد الأولي. سننقلك إلى صفحة الإعدادات المناسبة عند الانتهاء.', + 'onboarding.custom.openSettings': 'فتح في الإعدادات', + 'onboarding.custom.inference.title': 'الاستدلال (النص)', + 'onboarding.custom.inference.subtitle': 'أي نموذج لغوي يجب أن يُجيب على أسئلتك ويشغّل وكلاءك؟', + 'onboarding.custom.inference.defaultDesc': + 'يُوجّه OpenHuman كل عبء عمل إلى نموذج افتراضي مناسب. بدون مفاتيح أو إعداد.', + 'onboarding.custom.inference.configureDesc': + 'استخدم مفتاحك الخاص من OpenAI أو Anthropic. سنستخدمه لجميع أعباء العمل النصية.', + 'onboarding.custom.voice.title': 'الصوت', + 'onboarding.custom.voice.subtitle': 'تحويل الكلام إلى نص والنص إلى كلام لوضع الصوت.', + 'onboarding.custom.voice.defaultDesc': + 'يأتي OpenHuman مع STT/TTS مُدار يعمل تلقائيًا. لا شيء يحتاج إلى إعداد.', + 'onboarding.custom.voice.configureDesc': + 'استخدم ElevenLabs / OpenAI Whisper / إلخ. اضبطه من الإعدادات › الصوت.', + 'onboarding.custom.oauth.title': 'الاتصالات (OAuth)', + 'onboarding.custom.oauth.subtitle': 'Gmail وSlack وNotion وخدمات أخرى متصلة تحتاج إلى OAuth.', + 'onboarding.custom.oauth.defaultDesc': + 'يشغّل OpenHuman مساحة عمل Composio مُدارة. نقرة واحدة لتوصيل كل خدمة لاحقًا.', + 'onboarding.custom.oauth.configureDesc': + 'استخدم حساب Composio الخاص بك / مفتاح API. اضبطه من الإعدادات › الاتصالات.', + 'onboarding.custom.search.title': 'البحث على الويب', + 'onboarding.custom.search.subtitle': 'كيف يبحث OpenHuman على الويب نيابةً عنك.', + 'onboarding.custom.search.defaultDesc': 'يستخدم OpenHuman خادم بحث مُدار. لا حاجة لمفاتيح.', + 'onboarding.custom.search.configureDesc': + 'استخدم مفتاح مزود البحث الخاص بك (Tavily أو Brave إلخ). اضبطه من الإعدادات › الأدوات.', + 'onboarding.custom.embeddings.title': 'Embeddings', + 'onboarding.custom.embeddings.subtitle': + 'كيف يُولِّد OpenHuman تضمينات المتجهات للبحث الدلالي في الذاكرة.', + 'onboarding.custom.embeddings.defaultDesc': + 'يستخدم OpenHuman خدمة تضمين مُدارة. لا حاجة لمفتاح API.', + 'onboarding.custom.embeddings.configureDesc': + 'استخدم موفر التضمين الخاص بك (OpenAI أو Voyage أو Ollama وغيرها).', + 'onboarding.custom.memory.title': 'الذاكرة', + 'onboarding.custom.memory.subtitle': 'كيف يتذكر OpenHuman سياقك وتفضيلاتك ومحادثاتك السابقة.', + 'onboarding.custom.memory.defaultDesc': + 'يدير OpenHuman تخزين الذاكرة واسترجاعها تلقائيًا. لا شيء يحتاج إلى إعداد.', + 'onboarding.custom.memory.configureDesc': + 'افحص الذاكرة أو صدّرها أو امسحها بنفسك. اضبطها من الإعدادات › الذاكرة.', + 'accounts.addAccount': 'إضافة حساب', + 'accounts.manageAccounts': 'إدارة الحسابات', + 'accounts.noAccounts': 'لا توجد حسابات متصلة', + 'accounts.connectAccount': 'اربط حسابًا للبدء', + 'accounts.agent': 'الوكيل', + 'accounts.respondQueue': 'قائمة الردود', + 'accounts.disconnect': 'قطع الاتصال', + 'accounts.disconnectConfirm': 'هل أنت متأكد من أنك تريد قطع الاتصال بهذا الحساب؟', + 'accounts.disconnectClearMemory': 'حذف الذاكرة من هذا المصدر أيضاً', + 'accounts.disconnectClearMemoryHint': + 'يُزيل نهائياً مقاطع الذاكرة المحلية المرتبطة بهذا الاتصال.', + 'accounts.searchAccounts': 'البحث في الحسابات...', + 'channels.title': 'القنوات', + 'channels.configure': 'ضبط القناة', + 'channels.setup': 'إعداد', + 'channels.noChannels': 'لا توجد قنوات مضبوطة', + 'channels.localManagedUnavailable': 'القنوات المُدارة غير متاحة للمستخدمين المحليين.', + 'channels.addChannel': 'إضافة قناة', + 'channels.status.connected': 'متصل', + 'channels.status.disconnected': 'غير متصل', + 'channels.status.error': 'خطأ', + 'channels.status.configuring': 'جارٍ الضبط', + 'channels.defaultMessaging': 'قناة المراسلة الافتراضية', + 'webhooks.title': 'الـ Webhooks', + 'webhooks.create': 'إنشاء Webhook', + 'webhooks.noWebhooks': 'لا توجد Webhooks مضبوطة', + 'webhooks.url': 'URL', + 'webhooks.secret': 'المفتاح السري', + 'webhooks.events': 'الأحداث', + 'webhooks.archiveDirectory': 'دليل الأرشيف', + 'webhooks.todayFile': 'ملف اليوم', + 'invites.title': 'الدعوات', + 'invites.create': 'إنشاء دعوة', + 'invites.noInvites': 'لا توجد دعوات معلقة', + 'invites.code': 'رمز الدعوة', + 'invites.copyLink': 'نسخ الرابط', + 'invites.generate': 'إنشاء دعوة', + 'invites.generating': 'جارٍ إنشاء...', + 'invites.refreshing': 'تحديث الدعوات...', + 'invites.loading': 'تحميل الدعوات...', + 'invites.copyCodeAria': 'نسخ رمز الدعوة', + 'invites.revokeAria': 'إلغاء الدعوة', + 'invites.usedUp': 'تم استخدامه', + 'invites.uses': 'الاستخدامات: {current}{max}', + 'invites.expiresOn': 'تنتهي الصلاحية {date}', + 'invites.empty': 'لا توجد دعوات حتى الآن', + 'invites.emptyHint': 'إنشاء رمز دعوة للمشاركة مع الآخرين', + 'invites.revokeTitle': 'إلغاء رمز الدعوة', + 'invites.revokePromptPrefix': 'هل أنت متأكد من رغبتك في إلغاء رمز الدعوة', + 'invites.revokeWarning': + 'لن يكون رمز الدعوة هذا صالحاً بعد الآن ولا يمكن استخدامه للانضمام إلى الفريق.', + 'invites.revoking': 'إلغاء...', + 'invites.revokeAction': 'إلغاء الدعوة', + 'invites.failedGenerate': 'فشل إنشاء الدعوة', + 'invites.failedRevoke': 'فشل إلغاء الدعوة', + 'team.refreshingMembers': 'جارٍ تحديث الأعضاء...', + 'team.loadingMembers': 'جارٍ تحميل الأعضاء...', + 'team.memberCount': '{count} عضو', + 'team.memberCountPlural': '{count} أعضاء', + 'team.you': '(أنت)', + 'team.removeAria': 'إزالة {name}', + 'team.noMembers': 'لم يتم العثور على أعضاء', + 'team.removeTitle': 'إزالة عضو الفريق', + 'team.removePromptPrefix': 'هل أنت متأكد من أنك تريد إزالة', + 'team.removePromptSuffix': 'من الفريق؟', + 'team.removeWarning': 'سيفقدون إمكانية الوصول إلى الفريق وجميع موارد الفريق.', + 'team.removing': 'جارٍ الإزالة...', + 'team.removeAction': 'إزالة العضو', + 'team.changeRoleTitle': 'تغيير دور العضو', + 'team.changeRolePrompt': 'تغيير دور {name} من {oldRole} إلى {newRole}؟', + 'team.changeRoleAdminGrant': + 'سيمنحهم ذلك صلاحيات إدارية كاملة تشمل القدرة على إدارة أعضاء الفريق.', + 'team.changeRoleAdminRemove': + 'سيُزيل ذلك صلاحياتهم الإدارية ولن يتمكنوا بعد الآن من إدارة الفريق.', + 'team.changing': 'جارٍ التغيير...', + 'team.changeRoleAction': 'تغيير الدور', + 'team.failedChangeRole': 'فشل تغيير الدور', + 'team.failedRemoveMember': 'فشلت إزالة العضو', + 'devOptions.title': 'متقدم', + 'devOptions.diagnostics': 'التشخيص', + 'devOptions.diagnosticsDesc': 'صحة النظام والسجلات ومقاييس الأداء', + 'devOptions.toolPolicyDiagnosticsDesc': + 'قوائم جرد المواد، ووضع السياسات، والقوائم المسموح بها بx0xx، والوحدات الأخيرة', + 'devOptions.toolPolicyDiagnostics.loading': 'التعبئة...', + 'devOptions.toolPolicyDiagnostics.unavailable': 'التشخيص غير متاح', + 'devOptions.toolPolicyDiagnostics.posture.title': 'وضع السياسات', + 'devOptions.toolPolicyDiagnostics.posture.autonomy': 'الحكم الذاتي:', + 'devOptions.toolPolicyDiagnostics.posture.workspaceOnly': 'مكان العمل فقط:', + 'devOptions.toolPolicyDiagnostics.posture.maxActionsPerHour': 'ماكس Xqx0xx:', + 'devOptions.toolPolicyDiagnostics.posture.approvalMediumRisk': 'الموافقة (مخاطر متوسطة):', + 'devOptions.toolPolicyDiagnostics.posture.blockHighRisk': 'مخاطر كبيرة:', + 'devOptions.toolPolicyDiagnostics.inventory.title': 'المخزون', + 'devOptions.toolPolicyDiagnostics.inventory.totalTools': 'مجموع الأدوات', + 'devOptions.toolPolicyDiagnostics.inventory.enabledTools': 'الأدوات التمكينية', + 'devOptions.toolPolicyDiagnostics.inventory.mcpStdioTools': 'أجهزة الاستديو', + 'devOptions.toolPolicyDiagnostics.inventory.jsonRpcTools': + 'xx0xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx0xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', + 'devOptions.toolPolicyDiagnostics.mcpAllowlists.title': 'القائمة المسموح بها', + 'devOptions.toolPolicyDiagnostics.mcpAllowlists.summary': + 'مُفعَّل: {enabled} · الخوادم: {enabledCount}/{totalCount}', + 'devOptions.toolPolicyDiagnostics.mcpAllowlists.unnamed': 'اسم مستعار', + 'devOptions.toolPolicyDiagnostics.mcpAllowlists.allowDeny': + 'السماح = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', + 'devOptions.toolPolicyDiagnostics.mcpWriteAudit.title': 'Xqx0xx', + 'devOptions.toolPolicyDiagnostics.mcpWriteAudit.summary': + 'مُفعَّل: {enabled} · الأخيرة (24 ساعة): {recentRows}', + 'devOptions.toolPolicyDiagnostics.recentBlocked.title': 'النداءات الأخيرة المغلقة', + 'devOptions.toolPolicyDiagnostics.recentBlocked.empty': 'لم تسجل أي مكالمات', + 'devOptions.toolPolicyDiagnostics.redactedSurfaces.title': 'أسطح متفاعلة', + 'devOptions.toolPolicyDiagnostics.redactedSurfaces.summary': + 'القدرة على الشطب: Xqx0xx: مساحات السياسة العامة: Xqx1xx', + 'devOptions.debugPanels': 'لوحات التصحيح', + 'devOptions.debugPanelsDesc': 'أعلام الميزات وفحص الحالة وأدوات التصحيح', + 'devOptions.webhooks': 'الـ Webhooks', + 'devOptions.webhooksDesc': 'ضبط واختبار تكاملات Webhook', + 'devOptions.memoryInspection': 'فحص الذاكرة', + 'devOptions.memoryInspectionDesc': 'تصفح وتساؤل وإدارة إدخالات الذاكرة', + 'voice.pushToTalk': 'اضغط للتحدث', + 'voice.recording': 'جارٍ التسجيل...', + 'voice.processing': 'جارٍ المعالجة...', + 'voice.languageHint': 'اللغة', + 'misc.rehydrating': 'جارٍ تحميل بياناتك...', + 'misc.checkingServices': 'جارٍ التحقق من الخدمات...', + 'misc.serviceUnavailable': 'الخدمة غير متاحة', + 'misc.somethingWentWrong': 'حدث خطأ ما', + 'misc.tryAgainLater': 'يرجى المحاولة مرة أخرى لاحقًا.', + 'misc.restartApp': 'إعادة تشغيل التطبيق', + 'misc.updateAvailable': 'تحديث متاح', + 'misc.updateNow': 'تحديث الآن', + 'misc.updateLater': 'لاحقًا', + 'misc.downloading': 'جارٍ التنزيل...', + 'misc.installing': 'جارٍ التثبيت...', + 'misc.beta': + 'OpenHuman في مرحلة تجريبية مبكرة. لا تتردد في مشاركة ملاحظاتك أو الإبلاغ عن أي أخطاء تواجهها — كل تقرير يساعدنا على الإنجاز بشكل أسرع.', + 'misc.betaFeedback': 'إرسال ملاحظات', + 'mnemonic.title': 'عبارة الاسترداد', + 'mnemonic.warning': 'اكتب هذه الكلمات بالترتيب واحفظها في مكان آمن.', + 'mnemonic.copyWarning': + 'لا تشارك عبارة الاسترداد أبدًا. أي شخص يمتلك هذه الكلمات يمكنه الوصول إلى حسابك.', + 'mnemonic.copied': 'تم نسخ عبارة الاسترداد إلى الحافظة', + 'mnemonic.reveal': 'الكشف عن العبارة', + 'mnemonic.revealPhrase': 'إظهار عبارة الاسترداد', + 'mnemonic.hidden': 'عبارة الاسترداد مخفية', + 'privacy.title': 'الخصوصية والأمان', + 'privacy.description': 'تقرير شفافية البيانات المُرسَلة إلى الخدمات الخارجية.', + 'privacy.empty': 'لم يُرصد أي نقل بيانات خارجي.', + 'privacy.whatLeavesComputer': 'ما يغادر جهازك', + 'privacy.loading': 'جارٍ تحميل تفاصيل الخصوصية...', + 'privacy.loadError': 'تعذّر تحميل قائمة الخصوصية المباشرة. لا تزال ضوابط التحليل أدناه تعمل.', + 'privacy.noCapabilities': 'لا توجد إمكانات تكشف عن حركة بيانات حاليًا.', + 'privacy.sentTo': 'مُرسَل إلى', + 'privacy.leavesDevice': 'يغادر الجهاز', + 'privacy.staysLocal': 'يبقى محليًا', + 'privacy.anonymizedAnalytics': 'تحليلات مجهولة الهوية', + 'privacy.shareAnonymizedData': 'مشاركة بيانات الاستخدام المجهولة', + 'privacy.shareAnonymizedDataDesc': + 'ساعد في تحسين OpenHuman من خلال مشاركة تقارير الأعطال وتحليلات الاستخدام المجهولة. جميع البيانات مجهولة الهوية تمامًا — لا يُجمع أي بيانات شخصية أو رسائل أو مفاتيح محفظة أو معلومات جلسة.', + 'privacy.meetingFollowUps': 'متابعات الاجتماعات', + 'privacy.autoHandoffMeet': 'تسليم نسخ Google Meet تلقائيًا إلى المنسق', + 'privacy.autoHandoffMeetDesc': + 'عند انتهاء مكالمة Google Meet، يمكن لمنسق OpenHuman قراءة النسخة المكتوبة واتخاذ إجراءات كصياغة الرسائل أو جدولة المتابعات أو نشر الملخصات في مساحة عمل Slack المتصلة. معطّل افتراضيًا.', + 'privacy.analyticsDisclaimer': + 'جميع التحليلات وتقارير الأخطاء مجهولة الهوية تمامًا. عند التفعيل، نجمع فقط معلومات الأعطال ونوع الجهاز وموقع الخطأ في الملف. لا نصل أبدًا إلى رسائلك أو بيانات جلستك أو مفاتيح المحفظة أو مفاتيح API أو أي معلومات شخصية. يمكنك تغيير هذا الإعداد في أي وقت.', + 'settings.about.version': 'الإصدار', + 'settings.about.updateAvailable': 'متاح', + 'settings.about.softwareUpdates': 'تحديثات البرنامج', + 'settings.about.lastChecked': 'آخر فحص', + 'settings.about.checking': 'جارٍ التحقق...', + 'settings.about.checkForUpdates': 'التحقق من التحديثات', + 'settings.about.releases': 'الإصدارات', + 'settings.about.releasesDesc': 'تصفح ملاحظات الإصدار والإصدارات السابقة على GitHub.', + 'settings.about.openReleases': 'فتح إصدارات GitHub', + 'settings.about.connection': 'اتصال', + 'settings.about.connectionMode': 'الوضع', + 'settings.about.connectionModeLocal': 'محلي', + 'settings.about.connectionModeCloud': 'السحابة', + 'settings.about.connectionModeUnset': 'لم يتم التحديد', + 'settings.about.serverUrl': 'الخادم URL', + 'settings.about.serverUrlUnavailable': 'غير متاح', + 'settings.about.connectionHelperLocal': + 'مأخوذة في العملية من قذيفة Xqx1x على عملية الإطلاق يتم اختيار المرفأ في البداية لذا تغيرت هذه الـ (إكسكساكس) بين الإطلاقات', + 'settings.about.connectionHelperCloud': + 'متصلة بقاعدة نائية غيّر هذا في (بوتشيك) أو مُخلّق السحابة.', + 'settings.heartbeat.title': 'نبضات القلب والحلقات', + 'settings.heartbeat.desc': 'التحكم في إيقاعات جدولة الخلفية وفحص خريطة الحلقة.', + 'settings.ledgerUsage.title': 'دفتر الأستاذ الاستخدام', + 'settings.ledgerUsage.desc': + 'وتُقرأ الميزانية في الآونة الأخيرة، وحسابات الميزانية، والخلفية Xqx0xx.', + 'settings.costDashboard.title': 'لوحة بيانات التكاليف', + 'settings.costDashboard.desc': + 'قضاء سبعة أيام والحرق عبر الحزام، مع سرعة الميزانية وانهيار كل نموذج.', + 'settings.costDashboard.sevenDayCost': 'التكلفة اليومية', + 'settings.costDashboard.sevenDayTokens': '7 أيام', + 'settings.costDashboard.totalSpend': 'المجموع 7 أيام', + 'settings.costDashboard.monthlyPace': 'الوتيرة الشهرية', + 'settings.costDashboard.budgetLimit': 'الحد الأقصى للميزانية', + 'settings.costDashboard.utilization': 'الاستخدام', + 'settings.costDashboard.modelBreakdown': 'التوزيع حسب النموذج', + 'settings.costDashboard.model': 'النموذج النموذجي', + 'settings.costDashboard.provider': 'Provider', + 'settings.costDashboard.cost': 'التكلفة', + 'settings.costDashboard.tokens': 'Tokens', + 'settings.costDashboard.requests': 'الطلبات', + 'settings.costDashboard.percentOfTotal': 'النسبة المئوية من المجموع', + 'settings.costDashboard.inputTokens': 'الناتج', + 'settings.costDashboard.outputTokens': 'الناتج', + 'settings.costDashboard.budgetNormal': 'على المسار', + 'settings.costDashboard.budgetWarning': 'تحذير', + 'settings.costDashboard.budgetExceeded': 'الميزانية', + 'settings.costDashboard.noBudget': 'لا حد محدد', + 'settings.costDashboard.noData': 'لم تسجل أي تكلفة حتى الآن في الأيام السبعة الماضية.', + 'settings.costDashboard.noModels': 'لا نشاط نموذجي في الأيام السبعة الماضية.', + 'settings.costDashboard.loading': 'لوح التعبئة', + 'settings.costDashboard.disabledHint': + 'خزانة التكاليف معطلة في الدير مجموعة [xx0xx] مُمَكَّنَة = حقيقي في Xqx1x إلى re-enable.', + 'settings.costDashboard.subtitle': + 'نقضي حياتنا ونحترق عبر الحزام ولا حاجة إلى إعادة تحميل الصفحات.', + 'settings.costDashboard.summaryAriaLabel': 'القياسات الموجزة للتكاليف', + 'settings.costDashboard.lastSevenDays': '7 أيام', + 'settings.costDashboard.utilizationOf': 'من', + 'settings.costDashboard.thisMonth': 'هذا الشهر', + 'settings.costDashboard.monthlyPaceHint': + 'الإنفاق الشهري المتوقع في المعدل اليومي الحالي (الساعة × 30).', + 'settings.costDashboard.budgetLimitHint': 'قراءة الميزانية الشهرية من Xqx0xx في Xqx1x.', + 'settings.costDashboard.dailyTarget': 'الهدف اليومي', + 'settings.costDashboard.today': 'اليوم', + 'settings.costDashboard.todayBadge': 'TODAY', + 'settings.costDashboard.unknownProvider': '-', + 'settings.costDashboard.justNow': 'الآن', + 'settings.costDashboard.secondsAgo': 'اكساكسوكس قبل', + 'settings.costDashboard.minutesAgo': 'Xqx0xx قبل', + 'settings.costDashboard.hoursAgo': 'Xqx0xx منذ ح', + 'settings.costDashboard.daysAgo': 'Xqx0xx قبل', + 'settings.costDashboard.updated': 'Updated', + 'settings.costDashboard.refresh': 'التجديد', + 'settings.costDashboard.utcNote': '"يوماً مربوطاً في "إكسكساكس', + 'settings.costDashboard.stackedNote': 'الناتج + الناتج', + 'settings.costDashboard.modelBreakdownHint': 'تم تجميعها خلال السبعة أيام الماضية', + 'settings.costDashboard.noDataHint': + 'إرسال رسالة وكيل - الاستخدام المكسور من النداء القادم للمزود سينشر المخطط في غضون حوالي 10 ثوان.', + 'settings.search.title': 'محرك البحث', + 'settings.search.menuDesc': 'تخلف عن البحث أو التنصت على مزودك الخاص بمفتاح اكسوكس', + 'settings.search.description': + 'اختر محرك البحث الذي يستخدمه الوكيل، أو عطّل أدوات البحث بالكامل. يستخدم الوضع المُدار واجهة خلفية OpenHuman (بدون إعداد). تعمل محركات Parallel وBrave وQuerit مباشرةً من جهازك باستخدام مفتاح API الخاص بك.', + 'settings.search.engineAria': 'محرك البحث', + 'settings.search.engineDisabledLabel': 'Disabled', + 'settings.search.engineDisabledDesc': 'أزل أدوات البحث من سياق الوكيل وقائمة الأدوات المتاحة.', + 'settings.search.engineManagedLabel': 'OpenHuman مُدار', + 'settings.search.engineManagedDesc': + 'خطأ تم سحبها من خلال الركيزة الخلفية - لا حاجة لمفتاح Xqx0xx.', 'settings.search.localManagedUnavailable': 'بحث OpenHuman المُدار غير متاح للمستخدمين المحليين. أضف مفتاح Parallel أو Brave الخاص بك لتفعيل البحث على الويب.', + 'settings.search.engineParallelLabel': 'Parallel', + 'settings.search.engineParallelDesc': + 'واجهة برمجية متوازية مباشرة: أدوات البحث والاستخراج والمحادثة والبحث المتعمق والإثراء ومجموعات البيانات.', + 'settings.search.engineBraveLabel': 'Brave بحث', + 'settings.search.engineBraveDesc': 'مباشر Brave بحث API: أدوات الويب والأخبار والصور والفيديو.', + 'settings.search.engineQueritLabel': 'Querit', + 'settings.search.engineQueritDesc': + 'واجهة Querit API المباشرة: بحث على الويب مع فلاتر الموقع والنطاق الزمني والبلد واللغة.', + 'settings.search.statusConfigured': 'تم تكوينه', + 'settings.search.statusNeedsKey': 'يحتاج إلى مفتاح API', + 'settings.search.fallbackToManaged': + 'ولن يتم تشكيل أي مفتاح - سوف يعود البحث إلى إدارة حتى يتم توفير المفتاح.', + 'settings.search.getApiKey': 'احصل على مفتاح API', + 'settings.search.save': 'احفظ', + 'settings.search.clear': 'مسح', + 'settings.search.show': 'عرض', + 'settings.search.hide': 'إخفاء', + 'settings.search.statusSaving': 'جاري الحفظ…', + 'settings.search.statusSaved': 'تم الحفظ.', + 'settings.search.statusError': 'فشل', + 'settings.search.parallelKeyLabel': 'Parallel API مفتاح', + 'settings.search.braveKeyLabel': 'Brave بحث API مفتاح', + 'settings.search.queritKeyLabel': 'مفتاح API الخاص بـ Querit', + 'settings.search.placeholderStored': '•••••••• (مخزن)', + 'settings.search.placeholderParallel': 'pk_...', + 'settings.search.placeholderBrave': 'BSA...', + 'settings.search.placeholderQuerit': 'مفتاح API الخاص بـ Querit', + 'settings.search.allowedSitesLabel': 'المواقع الشبكية المسموح بها', + 'settings.search.allowedSitesHint': + 'المضيفون الذين يُسمح للمساعد بفتحهم وقراءتهم — عبر جلب الويب وأداة المتصفح — مضيف واحد في كل سطر، مثل reuters.com. يشمل المضيف نطاقاته الفرعية أيضًا. البحث على الويب نفسه لا يتقيّد بهذه القائمة.', + 'settings.search.allowedSitesAllOn': + 'يمكن للمساعد فتح أي موقع علني العناوين المحلية والخاصة تبقى مغلقة', + 'settings.search.allowedSitesPlaceholder': 'reuters.com\napnews.com\ngithub.com', + 'settings.search.allowedSitesSave': 'توفير المواقع الشبكية', + 'settings.search.accessModeAria': 'شبكة الإنترنت', + 'settings.search.accessAllowAll': 'السماح للجميع', + 'settings.search.accessCustom': 'العرف', + 'settings.search.accessBlockAll': 'كل شيء', + 'settings.search.accessBlockAllHint': + 'وكل الوصول إلى شبكة الإنترنت مغلق - لا يمكن للمساعد فتح أو قراءة أي موقع على شبكة الإنترنت.', + 'settings.embeddings.title': 'التضمينات', + 'settings.embeddings.description': + 'اختر مزود التضمينات الذي يحول الذاكرة إلى متجهات للبحث الدلالي. تغيير المزود أو النموذج أو الأبعاد يبطل المتجهات المخزنة ويتطلب إعادة تعيين كاملة للذاكرة.', + 'settings.embeddings.providerAria': 'مزود التضمينات', + 'settings.embeddings.statusConfigured': 'تم التهيئة', + 'settings.embeddings.statusNeedsKey': 'يحتاج مفتاح API', + 'settings.embeddings.apiKeyLabel': 'مفتاح API لـ {provider}', + 'settings.embeddings.placeholderStored': '•••••••• (مخزن)', + 'settings.embeddings.placeholderKey': 'الصق مفتاح API الخاص بك…', + 'settings.embeddings.keyStoredEncrypted': 'يتم تخزين مفتاح API الخاص بك مشفرًا على هذا الجهاز.', + 'settings.embeddings.show': 'إظهار', + 'settings.embeddings.hide': 'إخفاء', + 'settings.embeddings.save': 'حفظ', + 'settings.embeddings.clear': 'مسح', + 'settings.embeddings.model': 'النموذج', + 'settings.embeddings.dimensions': 'الأبعاد', + 'settings.embeddings.customEndpoint': 'نقطة نهاية مخصصة', + 'settings.embeddings.customModelPlaceholder': 'اسم النموذج', + 'settings.embeddings.customDimsPlaceholder': 'الأبعاد', + 'settings.embeddings.applyCustom': 'تطبيق', + 'settings.embeddings.testConnection': 'اختبار الاتصال', + 'settings.embeddings.testing': 'جارٍ الاختبار…', + 'settings.embeddings.testSuccess': 'متصل — {dims} بُعد', + 'settings.embeddings.testFailed': 'فشل: {error}', + 'settings.embeddings.saving': 'جارٍ الحفظ…', + 'settings.embeddings.saved': 'تم الحفظ.', + 'settings.embeddings.errorPrefix': 'فشل', + 'settings.embeddings.wipeTitle': 'إعادة تعيين متجهات الذاكرة؟', + 'settings.embeddings.wipeBody': + 'سيؤدي تغيير مزود التضمينات أو النموذج أو الأبعاد إلى مسح جميع متجهات الذاكرة المخزنة. يجب إعادة بناء الذاكرة قبل أن يعمل الاسترجاع مرة أخرى. لا يمكن التراجع عن هذا.', + 'settings.embeddings.cancel': 'إلغاء', + 'settings.embeddings.confirmWipe': 'مسح وتطبيق', + 'settings.embeddings.setupTitle': 'إعداد {provider}', + 'settings.embeddings.saveAndSwitch': 'حفظ والتبديل', + 'settings.embeddings.optional': 'اختياري', + 'settings.embeddings.vectorSearchDisabled': + 'تم تعطيل البحث والتذكير بالذاكرة سيستخدم مضاهاة الكلمات الرئيسية والراحة فقط - لا ترتيب ساكن.', + 'settings.embeddings.clearKey': 'مسح مفتاح API', + 'pages.settings.ai.embeddings': 'التضمينات', + 'pages.settings.ai.embeddingsDesc': 'نموذج ترميز المتجهات لاسترجاع الذاكرة', + 'mcp.alphaBadge': 'ألفا', + 'mcp.alphaBannerText': + 'دعم خادم MCP في مرحلة ألفا المبكرة. قد يتصرف سجل Smithery وتدفق التثبيت وربط الأدوات بشكل غير متوقع أو يتغير شكله بين الإصدارات.', + 'mcp.toolList.noTools': 'لا توجد أدوات متاحة.', + 'mcp.setup.secretDialog.title': 'MCP الإعداد - أدخل السر', + 'mcp.setup.secretDialog.bodyPrefix': 'يحتاج وكيل الإعداد MCP', + 'mcp.setup.secretDialog.bodySuffix': + '. تُرسَل قيمتك مباشرةً إلى العملية الأساسية ولا تدخل محادثة الذكاء الاصطناعي أبداً.', + 'mcp.setup.secretDialog.inputLabel': 'القيمة', + 'mcp.setup.secretDialog.inputPlaceholder': 'الصق هنا', + 'mcp.setup.secretDialog.show': 'عرض', + 'mcp.setup.secretDialog.hide': 'إخفاء', + 'mcp.setup.secretDialog.submit': 'إرسال', + 'mcp.setup.secretDialog.cancel': 'إلغاء', + 'mcp.setup.secretDialog.submitting': 'الإرسال...', + 'mcp.setup.secretDialog.errorPrefix': 'فشل الإرسال:', + 'mcp.setup.secretDialog.privacyNote': 'مسروقة في طاولة الأسرار لم أسجل أو أرسل إلى نموذج', + 'devices.betaBadge': 'تجريبي', + 'devices.betaText': + 'هذه الميزة في مرحلة تجريبية حالياً. اربط هواتف iOS بـ OpenHuman لاستخدامها كعميل بعيد.', 'devices.comingSoonDescription': 'إقران الأجهزة قريبًا. ستكون هذه الصفحة مخصصة لإقران أجهزة iPhone وإدارة الأجهزة المتصلة.', + 'devices.title': 'الأجهزة', + 'devices.pairIphone': 'إقران iPhone', + 'devices.noPaired': 'لا توجد أجهزة مقترنة', + 'devices.emptyState': 'قم بمسح QR code على جهاز iPhone الخاص بك لتوصيله بجلسة OpenHuman هذه.', + 'devices.devicePairedTitle': 'تم إقران الجهاز', + 'devices.devicePairedMessage': 'تم توصيل iPhone بنجاح.', + 'devices.deviceRevokedTitle': 'تم إبطال الجهاز', + 'devices.deviceRevokedMessage': '{label} تمت إزالته.', + 'devices.revokeFailedTitle': 'فشل الإلغاء', + 'devices.online': 'متصل', + 'devices.offline': 'غير متصل', + 'devices.lastSeenNever': 'أبدًا', + 'devices.lastSeenNow': 'الآن', + 'devices.lastSeenMinutes': '{count}m منذ', + 'devices.lastSeenHours': '{count} قبل', + 'devices.lastSeenDays': '{count} قبل', + 'devices.revoke': 'إبطال', + 'devices.revokeAria': 'إبطال {label}', + 'devices.confirmRevokeTitle': 'إلغاء الجهاز؟', + 'devices.confirmRevokeBody': + 'لن يتمكن {label} من الاتصال بعد الآن. لا يمكن التراجع عن هذا الإجراء.', + 'devices.loadFailed': 'فشل تحميل الأجهزة: {message}', + 'devices.pairModal.title': 'إقران iPhone', + 'devices.pairModal.loading': 'إنشاء رمز الاقتران...', + 'devices.pairModal.instructions': 'افتح تطبيق OpenHuman على iPhone وامسح هذا الرمز.', + 'devices.pairModal.expiresIn': 'تنتهي صلاحية الرمز خلال ~{count} دقيقة', + 'devices.pairModal.expiresInPlural': 'تنتهي صلاحية الرمز خلال ~{count} دقيقة', + 'devices.pairModal.showDetails': 'إظهار التفاصيل', + 'devices.pairModal.hideDetails': 'إخفاء التفاصيل', + 'devices.pairModal.channelId': 'معرف القناة', + 'devices.pairModal.pairingUrl': 'الاقتران URL', + 'devices.pairModal.expiredTitle': 'QR code انتهت صلاحيته', + 'devices.pairModal.expiredBody': 'أنشئ رمزًا جديدًا لمواصلة الاقتران.', + 'devices.pairModal.generateNewCode': 'إنشاء رمز جديد', + 'devices.pairModal.successTitle': 'مقترن بجهاز iPhone', + 'devices.pairModal.autoClose': 'يتم الإغلاق تلقائيًا...', + 'devices.pairModal.errorPrefix': 'فشل إنشاء الاقتران: {message}', + 'devices.pairModal.errorTitle': 'حدث خطأ ما', + 'devices.pairModal.copyUrl': 'نسخ', + 'mcp.catalog.searchAria': 'البحث في كتالوج الحدادة', + 'mcp.catalog.searchPlaceholder': 'البحث في كتالوج الحدادة...', + 'mcp.catalog.loadFailed': 'فشل تحميل الكتالوج', + 'mcp.catalog.noResults': 'لم يتم العثور على خوادم.', + 'mcp.catalog.noResultsFor': 'لم يتم العثور على خوادم لـ "{query}".', + 'mcp.catalog.loadMore': 'تحميل المزيد', + 'mcp.configAssistant.title': 'مساعد التكوين', + 'mcp.configAssistant.empty': 'اسأل عن التكوين أو متغيرات env المطلوبة أو خطوات الإعداد.', + 'mcp.configAssistant.suggestedValues': 'القيم المقترحة:', + 'mcp.configAssistant.valueHidden': '(القيمة مخفية)', + 'mcp.configAssistant.applySuggested': 'تطبيق القيم المقترحة', + 'mcp.configAssistant.reinstallHint': 'أعد التثبيت بهذه القيم لتطبيقها.', + 'mcp.configAssistant.thinking': 'أفكر...', + 'mcp.configAssistant.inputPlaceholder': 'اطرح سؤالاً (أدخل للإرسال، Shift+Enter للسطر الجديد)', + 'mcp.configAssistant.send': 'إرسال', + 'mcp.configAssistant.failedResponse': 'فشل الحصول على الرد', + 'mcp.toolList.availableSingular': '{count} الأداة المتاحة', + 'mcp.toolList.availablePlural': '{count} الأدوات المتاحة', + 'mcp.toolList.tryTool': 'حاول', + 'mcp.toolList.tryToolAria': 'ملعب إعدام مفتوح', + 'mcp.playground.title': 'تشغيل {name}', + 'mcp.playground.close': 'إغلاق الملعب', + 'mcp.playground.inputSchema': 'مخطط الإدخال', + 'mcp.playground.argsLabel': 'المعطيات (JSON)', + 'mcp.playground.argsHelp': 'نوع (إكسكساكس) مطابق للشيما Empty input is treated as {}.', + 'mcp.playground.runShortcut': '⌘/Ctrl + Enter للتشغيل', + 'mcp.playground.format': 'الشكل', + 'mcp.playground.invalidJson': 'JSON غير صالح', + 'mcp.playground.run': 'تشغيل الأداة', + 'mcp.playground.running': 'تشغيل...', + 'mcp.playground.result': 'النتيجة', + 'mcp.playground.resultError': '(تول) أعاد الخطأ', + 'mcp.playground.copyResult': 'النتيجة', + 'mcp.playground.copied': 'Copied', + 'mcp.playground.history': 'التاريخ', + 'mcp.playground.historyEmpty': 'ولا توجد أية احتجاجات حتى الآن في هذه الدورة.', + 'mcp.playground.historyLoad': 'Load', + 'mcp.playground.unexpectedError': 'خطأ غير متوقع يستدعي أداة', + 'mcp.catalog.deployed': 'تم نشرها', + 'mcp.catalog.installCount': '{count} عمليات التثبيت', + 'app.update.dismissNotification': 'تجاهل إشعار التحديث', + 'bootCheck.rpcAuthSuffix': 'في كل RPC.', + 'app.localAiDownload.expandAria': 'توسيع تقدم التنزيل', + 'app.localAiDownload.collapseAria': 'طي تقدم التنزيل', + 'app.localAiDownload.dismissAria': 'تجاهل إشعار التنزيل', + 'mobile.nav.ariaLabel': 'التنقل عبر الهاتف المحمول', + 'progress.stepsAria': 'خطوات التقدم', + 'progress.stepAria': 'الخطوة {current} من {total}', + 'workspace.vaultsTitle': 'خزائن المعرفة', + 'workspace.vaultsDesc': 'أشر إلى مجلد محلي؛ يتم تقسيم الملفات وعكسها في الذاكرة.', + 'calls.title': 'المكالمات', + 'calls.comingSoonBody': 'ستتوفر قريبًا مكالمات مدعومة بالذكاء الاصطناعي. ابقوا متابعين.', + 'art.rotatingTetrahedronAria': 'مركبة فضائية رباعية السطوح دوارة مقلوبة', + 'mcp.installed.title': 'تم التثبيت', + 'mcp.installed.browseCatalog': 'تصفح الكتالوج', + 'mcp.installed.empty': 'لم يتم تثبيت خوادم MCP حتى الآن.', + 'mcp.installed.toolSingular': 'أداة {count}', + 'mcp.installed.toolPlural': 'أدوات {count}', + 'mcp.health.title': 'الصحة', + 'mcp.health.summaryAria': 'موجز الصحة', + 'mcp.health.connectedCount': 'Xqx0x', + 'mcp.health.connectingCount': '{count}connecting', + 'mcp.health.errorCount': '{count}', + 'mcp.health.disconnectedCount': 'Xqx0xxidle', + 'mcp.health.retryAll': 'إعادة المحاولة للكل ({count})', + 'mcp.health.retryAllAria': 'إعادة المحاولة لجميع خوادم MCP {count} التي واجهت أخطاء', + 'mcp.health.disconnectAll': 'قطع كل شيء (xx0xxx)', + 'mcp.health.disconnectAllAria': 'فصل جميع الخواديم متصلة بـ Xqx1xx', + 'mcp.health.disconnectConfirm.title': 'قطع كل خوادم الـ (إكساكس) ؟', + 'mcp.health.disconnectConfirm.body': + 'وسيقطع هذا الربط بين خوادم مكعبة من طراز Xqx0xx. تركيبات وأسرار مثبتة يتم حفظها، يمكنك إعادة ربط أي خادم في وقت لاحق.', + 'mcp.health.disconnectConfirm.cancel': 'إلغاء', + 'mcp.health.disconnectConfirm.confirm': 'انفصال كل شيء', + 'mcp.health.opErrorGeneric': 'عملية الشعب فشلت انظر السجلات', + 'mcp.health.bulkPartialFailure': '×0xx × ×1x خوادم فشل انظر السجلات', + 'mcp.installed.search.landmarkAria': 'حواسيب خواديم مجهزة', + 'mcp.installed.search.inputAria': 'صُوّبت حواسيب خوادم مكعبة بالاسم', + 'mcp.installed.search.placeholder': 'خوادم السينما...', + 'mcp.installed.search.clearAria': 'مرشح واضح', + 'mcp.installed.search.countMatches': 'Xqx0xxxx من خواديم Xqx1x', + 'mcp.installed.search.noMatches': 'لا يوجد خوادم تتطابق مع اكسوكس', + 'mcp.inventory.openButton': 'المخزون', + 'mcp.inventory.openAria': '(أفتح فريق جرد (إكساكسوكساكس', + 'mcp.inventory.title': 'قائمة MCP القابلة للمشاركة', + 'mcp.inventory.subtitle': + 'تصدير خوادم الـ (إكسكساكس) التي تم تركيبها كبيان محمول خال من السرية أو استيراد واحد من زميل الفريق ولا تُدرَج أو تستورد أبداً قيم الحراسة السرية.', + 'mcp.inventory.close': 'فريق الجرد المغلق', + 'mcp.inventory.tablistAria': 'أبواب المخزون', + 'mcp.inventory.tab.export': 'الصادرات', + 'mcp.inventory.tab.import': 'الواردات', + 'mcp.inventory.export.empty': + 'لا يوجد خوادم مكعبة بعد - لا شيء للتصدير. ضع واحداً من الكاتالوج أولاً', + 'mcp.inventory.export.privacyTitle': 'ما في هذا البيان', + 'mcp.inventory.export.privacyBody': + 'أسماء الخادم، أسماء مؤهلة، × ×xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx القيم السرية، أجهزة تحديد الآلات الخاصة بك، والمصابيح المحيطة بالتركيب يتم جردها عمدا.', + 'mcp.inventory.export.serverCount': '{count} خوادم في هذا البيان', + 'mcp.inventory.export.copy': 'نسخ', + 'mcp.inventory.export.copied': 'Copied', + 'mcp.inventory.export.copyAria': 'نسخ البيان Xqx0xx إلى مشبك', + 'mcp.inventory.export.download': 'تحميل', + 'mcp.inventory.export.downloadAria': 'تحميل البيان كملف JSON', + 'mcp.inventory.import.trustTitle': 'التعامل مع البيانات المستوردة كرمز غير موثوق', + 'mcp.inventory.import.trustBody': + 'خادم (إكسكساكس) هو أداة تمنحها لوكيلك فقط بيانات الاستيراد من المصادر التي قمت بها كل تركيبة تتطلب نقرتك الصريحة لا يوجد شيء آلي', + 'mcp.inventory.import.pasteLabel': 'لصق JSON الخاص بالبيان', + 'mcp.inventory.import.pastePlaceholder': 'قدمي بيان هنا أو ارفعي ملف (جيسون)', + 'mcp.inventory.import.preview': 'Preview', + 'mcp.inventory.import.clear': 'آمن', + 'mcp.inventory.import.uploadFile': 'أو تحميل ملف (جيسون)', + 'mcp.inventory.import.uploadFileAria': 'تحميل ملف (جيسون)', + 'mcp.inventory.import.fileTooLarge': 'File is too large (over 1 MB). رفض الحمل', + 'mcp.inventory.import.fileReadFailed': 'لم أستطع قراءة الملف', + 'mcp.inventory.import.parseErrorPrefix': 'لا يمكن أن يكون بياني', + 'mcp.inventory.import.previewHeading': 'Preview', + 'mcp.inventory.import.previewCounts': 'خواديم اكساكساكس - × 1xx جديد، Xqx2x', + 'mcp.inventory.import.previewEmpty': 'لا يوجد خوادم', + 'mcp.inventory.import.exportedFrom': 'مُصدَّر من {exporter}', + 'mcp.inventory.import.exportedAt': 'Xqx0xx', + 'mcp.inventory.import.statusNew': 'جديدة', + 'mcp.inventory.import.statusAlreadyInstalled': 'تم تركيبها', + 'mcp.inventory.import.envKeysLabel': 'مفاتيح Env', + 'mcp.inventory.import.install': 'Install', + 'mcp.inventory.import.installAria': 'تثبيت {name} من هذا البيان', + 'mcp.inventory.import.skipped': 'تخطيت', + 'mcp.inventory.parseError.empty': 'المخلوق فارغ', + 'mcp.inventory.parseError.invalidJson': 'JSON غير صالح.', + 'mcp.inventory.parseError.rootNotObject': 'يجب أن يكون النسيج جسماً من الجذر', + 'mcp.inventory.parseError.unsupportedSchema': 'ولم ينتج هذا الملف مصدر متوافق.', + 'mcp.inventory.parseError.missingExportedAt': 'مفقودة أو غير صحيحة في حقل (إكسكساكس)', + 'mcp.inventory.parseError.missingExportedBy': 'مفقودة أو غير صحيحة في حقل (إكسكساكس)', + 'mcp.inventory.parseError.invalidServers': 'مصفوفة اكسوكساكس أو غير صالحة', + 'mcp.inventory.parseError.serverNotObject': 'دخول الخادم ليس شيئاً', + 'mcp.inventory.parseError.serverMissingQualifiedName': 'دخول الخادم مفقود لقبه المؤهل', + 'mcp.inventory.parseError.serverMissingDisplayName': 'دخول الخادم يفتقد لقبه', + 'mcp.inventory.parseError.serverEnvKeysNotArray': + 'مدخل الخادم لديه حقل للمفاتيح ليس مجموعة من الخيوط', + 'mcp.inventory.parseError.serverContainsEnv': + 'ويحتوي دخول الخادم على خريطة قيمة Xqx0xx. والرفض للواردات - يجب أن لا تحمل البيانات سوى المحركات " المحركات " ، ولا تحمل أبدا قيما سرية.', + 'mcp.inventory.parseError.duplicateQualifiedName': + 'ازدواجية الإسم المؤهل وجد في البيان يجب أن يظهر كل خادم مرة واحدة', + 'mcp.tab.loading': 'جارٍ تحميل خوادم MCP...', + 'mcp.tab.emptyDetail': 'حدد خادمًا أو تصفح الكتالوج.', + 'mcp.install.loadingDetail': 'جارٍ تحميل تفاصيل الخادم...', + 'mcp.install.back': 'العودة', + 'mcp.install.title': 'تثبيت {name}', + 'mcp.install.requiredEnv': 'متغيرات البيئة المطلوبة', + 'mcp.install.enterValue': 'أدخل {key}', + 'mcp.install.show': 'إظهار', + 'mcp.install.hide': 'إخفاء', + 'mcp.install.configLabel': 'التكوين (اختياري JSON)', + 'mcp.install.configPlaceholder': '{"key": "value"}', + 'mcp.install.missingRequired': 'مطلوب "{key}"', + 'mcp.install.invalidJson': 'تكوين JSON غير صالح JSON', + 'mcp.install.failedDetail': 'فشل تحميل تفاصيل الخادم', + 'mcp.install.failedInstall': 'فشل التثبيت', + 'mcp.install.button': 'تثبيت', + 'mcp.install.installing': 'جارٍ التثبيت...', + 'mcp.detail.suggestedEnvReady': 'قيم البيئة المقترحة جاهزة', + 'mcp.detail.suggestedEnvBody': 'أعِد تثبيت هذا الخادم بالقيم المقترحة لتطبيقها: {keys}', + 'mcp.detail.connect': 'اتصال', + 'mcp.detail.connecting': 'جارٍ الاتصال...', + 'mcp.detail.disconnect': 'قطع الاتصال', + 'mcp.detail.hideAssistant': 'إخفاء المساعد', + 'mcp.detail.helpConfigure': 'ساعدني في التهيئة', + 'mcp.detail.confirmUninstall': 'هل تريد تأكيد إلغاء التثبيت؟', + 'mcp.detail.confirmUninstallAction': 'نعم، قم بإلغاء التثبيت', + 'mcp.detail.uninstall': 'قم بإلغاء التثبيت', + 'mcp.detail.envVars': 'متغيرات البيئة', + 'mcp.detail.tools': 'الأدوات', + 'onboarding.skipForNow': 'التخطي الآن', + 'onboarding.localAI.continueWithCloud': 'متابعة مع السحابة', + 'onboarding.localAI.useLocalAnyway': + 'استخدم الذكاء الاصطناعي المحلي على أي حال (غير موصى به لجهازك)', + 'onboarding.localAI.useLocalInstead': + 'استخدم الذكاء الاصطناعي المحلي بدلاً من ذلك (اربط Ollama الآن)', + 'onboarding.localAI.setupIssue': 'واجه إعداد الذكاء الاصطناعي المحلي مشكلة', + 'autonomy.title': 'استقلالية الوكيل', + 'autonomy.maxActionsLabel': 'الحد الأقصى للإجراءات في الساعة', + 'autonomy.maxActionsHelp': + 'الحد الأقصى لإجراءات الأداة التي يمكن للوكيل تنفيذها في كل ساعة متجددة. تسري القيمة الجديدة على محادثتك التالية. تحتفظ المهام المجدولة ومستمعو القنوات بحدودهم الحالية حتى تعيد تشغيل OpenHuman.', + 'autonomy.statusSaving': 'جارٍ الحفظ...', + 'autonomy.statusSaved': 'تم الحفظ.', + 'autonomy.statusFailed': 'فشل', + 'autonomy.unlimitedNote': 'غير محدود — تم تعطيل تحديد المعدل.', + 'autonomy.invalidIntegerMsg': + 'يجب أن يكون عدداً صحيحاً موجباً (استخدم الإعداد المسبق «غير محدود» لرفع القيد).', + 'autonomy.presetUnlimited': 'غير محدود (افتراضي)', + 'triggers.toggleFailed': '{action} فشل لـ {trigger}: {message}', + 'settings.ai.overview': 'نظرة عامة على نظام الذكاء الاصطناعي', + 'settings.ai.configStatus': 'حالة الإعداد', + 'settings.ai.fallbackMode': 'وضع الاحتياط', + 'settings.ai.loadedFromRuntime': 'مُحمَّل من بيئة التشغيل', + 'settings.ai.loadingDuration': 'مدة التحميل', + 'settings.ai.localRuntime': 'بيئة النموذج المحلي', + 'settings.ai.openManager': 'فتح المدير', + 'settings.ai.retryDownload': 'إعادة محاولة التنزيل', + 'settings.ai.state': 'الحالة', + 'settings.ai.targetModel': 'النموذج المستهدف', + 'settings.ai.download': 'تنزيل', + 'settings.ai.localModelUnavailable': 'حالة النموذج المحلي غير متاحة.', + 'settings.ai.soulConfig': 'إعداد شخصية SOUL', + 'settings.ai.refreshing': 'جارٍ التحديث...', + 'settings.ai.refreshSoul': 'تحديث SOUL', + 'settings.ai.loadingSoul': 'جارٍ تحميل إعداد SOUL...', + 'settings.ai.identity': 'الهوية', + 'settings.ai.personality': 'الشخصية', + 'settings.ai.safetyRules': 'قواعد الأمان', + 'settings.ai.source': 'المصدر', + 'settings.ai.loaded': 'مُحمَّل', + 'settings.ai.toolsConfig': 'إعداد TOOLS', + 'settings.ai.refreshTools': 'تحديث TOOLS', + 'settings.ai.toolsAvailable': 'الأدوات المتاحة', + 'settings.ai.tools': 'أدوات', + 'settings.ai.activeSkills': 'المهارات النشطة', + 'settings.ai.skills': 'مهارات', + 'settings.ai.skillsOverview': 'نظرة عامة على المهارات', + 'settings.ai.refreshingAll': 'جارٍ تحديث الكل...', + 'settings.ai.refreshAll': 'تحديث جميع إعدادات الذكاء الاصطناعي', + 'settings.notifications.suppressAll': 'كتم جميع الإشعارات', + 'settings.notifications.suppressAllDesc': + 'حظر جميع إشعارات نظام التشغيل من التطبيقات المدمجة بغض النظر عن حالة التركيز.', + 'settings.notifications.toggleDnd': 'تفعيل/تعطيل عدم الإزعاج', + 'settings.notifications.categories': 'الفئات', + 'settings.notifications.categoryFooter': + 'يؤدي تعطيل فئة إلى إيقاف ظهور الإشعارات الجديدة من هذا النوع في مركز الإشعارات. تبقى الإشعارات الموجودة حتى مسحها.', + 'settings.billing.movedToWeb': 'انتقلت الفوترة إلى الويب', + 'settings.billing.openDashboard': 'فتح لوحة الفوترة', + 'settings.billing.movedToWebDesc': + 'تغييرات الاشتراك وطرق الدفع والرصيد والفواتير تُدار الآن من TinyHumans على الويب.', + 'settings.billing.backToSettings': 'العودة إلى الإعدادات', + 'settings.billing.openingBrowser': 'جارٍ فتح المتصفح...', + 'settings.billing.browserNotOpen': 'إذا لم يفتح متصفحك، استخدم الزر أعلاه.', + 'settings.billing.browserOpenFailed': 'تعذّر فتح المتصفح تلقائيًا. استخدم الزر أعلاه.', + 'settings.tools.chooseCapabilities': + 'اختر الإمكانات التي يمكن لـ OpenHuman استخدامها نيابةً عنك.', + 'settings.tools.saveChanges': 'حفظ التغييرات', + 'settings.tools.preferencesSaved': 'تم حفظ التفضيلات', + 'settings.tools.saveFailed': 'فشل حفظ التفضيلات. حاول مرة أخرى.', + 'settings.screenAwareness.mode': 'الوضع', + 'settings.screenAwareness.allExceptBlacklist': 'الكل باستثناء القائمة السوداء', + 'settings.screenAwareness.whitelistOnly': 'القائمة البيضاء فقط', + 'settings.screenAwareness.screenMonitoring': 'مراقبة الشاشة', + 'settings.screenAwareness.saveSettings': 'حفظ الإعدادات', + 'settings.screenAwareness.session': 'الجلسة', + 'settings.screenAwareness.status': 'الحالة', + 'settings.screenAwareness.active': 'نشط', + 'settings.screenAwareness.stopped': 'متوقف', + 'settings.screenAwareness.remaining': 'المتبقي', + 'settings.screenAwareness.startSession': 'بدء الجلسة', + 'settings.screenAwareness.stopSession': 'إيقاف الجلسة', + 'settings.screenAwareness.analyzeNow': 'تحليل الآن', + 'settings.screenAwareness.macosOnly': + 'التقاط سطح المكتب لوعي الشاشة وضوابط الأذونات مدعومة حاليًا على macOS فقط.', + 'connections.comingSoon': 'قريبًا', + 'connections.setUp': 'إعداد', + 'connections.configured': 'مضبوط', + 'connections.unavailable': 'غير متاح', + 'connections.checking': 'جارٍ التحقق…', + 'connections.walletConfigured': 'تم ضبط هويات EVM وBTC وSolana وTron المحلية من عبارة الاسترداد.', + 'connections.walletReady': 'إعداد هويات EVM وBTC وSolana وTron المحلية من عبارة استرداد واحدة.', + 'connections.walletError': + 'تعذّر التحقق من حالة المحفظة. انقر للمحاولة مرة أخرى من لوحة عبارة الاسترداد.', + 'connections.walletChecking': 'جارٍ التحقق من حالة المحفظة...', + 'connections.walletIdentities': 'هويات المحفظة', + 'connections.walletDerived': 'مشتقة محليًا من عبارة الاسترداد ومحفوظة كبيانات وصفية آمنة فقط.', + 'connections.privacySecurity': 'الخصوصية والأمان', + 'connections.privacySecurityDesc': + 'جميع البيانات والاعتمادات مُخزَّنة محليًا بسياسة عدم الاحتفاظ بالبيانات. معلوماتك مشفرة ولا تُشارك مع أطراف ثالثة.', + 'channels.status.connecting': 'جارٍ الاتصال', + 'channels.status.notConfigured': 'غير مضبوط', + 'channels.noActiveRoute': 'لا يوجد مسار نشط', + 'channels.activeRoute': 'المسار النشط', + 'channels.loadingDefinitions': 'جارٍ تحميل تعريفات القنوات...', + 'channels.channelConnections': 'اتصالات القنوات', + 'channels.configureAuthModes': 'ضبط أوضاع المصادقة لكل قناة مراسلة.', + 'channels.configNotAvailable': 'الإعداد غير متاح لـ', + 'channels.channel': 'قناة', + 'devOptions.coreModeNotSet': 'وضع النواة: غير محدد', + 'devOptions.coreModeNotSetDesc': + 'لم يتم تأكيد محدد بدء التشغيل بعد. استخدم تبديل الوضع في المحدد للاختيار بين المحلي أو السحابي.', + 'devOptions.local': 'محلي', + 'devOptions.embeddedCoreSidecar': 'النواة المدمجة', + 'devOptions.sidecarSpawned': 'تم تشغيله داخل العملية بواسطة غلاف Tauri عند تشغيل التطبيق.', + 'devOptions.cloud': 'سحابي', + 'devOptions.remoteCoreRpc': 'RPC للنواة عن بُعد', + 'devOptions.token': 'الرمز', + 'devOptions.tokenNotSet': 'غير محدد — سيُعيد RPC خطأ 401', + 'devOptions.triggerSentryTest': 'تشغيل اختبار Sentry (تجريبي)', + 'devOptions.triggerSentryTestDesc': + 'يُطلق خطأ مُعلَّمًا للتحقق من خط أنابيب Sentry. المشكلة #1072 — احذف بعد التحقق.', + 'devOptions.sendTestEvent': 'إرسال حدث اختبار', + 'devOptions.sending': 'جارٍ الإرسال…', + 'devOptions.eventSent': 'تم إرسال الحدث', + 'devOptions.sentryDisabled': '(بدون معرف - تم تعطيل الحراسة في هذا الإصدار)', + 'devOptions.failed': 'فشل', + 'devOptions.appLogs': 'سجلات التطبيق', + 'devOptions.appLogsDesc': + 'فتح المجلد الذي يحتوي على ملفات السجل اليومية المتداولة. أرفق الملف الأحدث عند الإبلاغ عن مشكلة.', + 'devOptions.openLogsFolder': 'فتح مجلد السجلات', + 'mnemonic.phraseSaved': 'تم حفظ عبارة الاسترداد', + 'mnemonic.walletReady': 'هويات المحفظة متعددة السلاسل جاهزة. جارٍ العودة إلى الإعدادات...', + 'mnemonic.writeDownWords': 'اكتب هذه', + 'mnemonic.wordsInOrder': + 'كلمات بالترتيب واحفظها في مكان آمن. تُؤمِّن هذه العبارة مفتاح التشفير المحلي وهويات محافظ EVM وBTC وSolana وTron.', + 'mnemonic.cannotRecover': + 'لا يمكن استرداد هذه العبارة إذا فُقدت ويجب أن تبقى محلية على جهازك تمامًا.', + 'mnemonic.copyToClipboard': 'نسخ إلى الحافظة', + 'mnemonic.alreadyHavePhrase': 'لدي بالفعل عبارة استرداد', + 'mnemonic.consentSaved': 'حفظت هذه العبارة وأوافق على استخدامها لإعداد المحفظة المحلية', + 'mnemonic.enterPhraseToRestore': + 'أدخل عبارة الاسترداد أدناه لاستعادة هويات محفظتك المحلية، أو الصق العبارة الكاملة في أي حقل (12 كلمة للنسخ الاحتياطية الجديدة؛ عبارات 24 كلمة من الإصدارات القديمة لا تزال تعمل).', + 'mnemonic.words': 'الكلمات', + 'mnemonic.validPhrase': 'عبارة استرداد صالحة', + 'mnemonic.generateNewPhrase': 'توليد عبارة استرداد جديدة بدلاً من ذلك', + 'mnemonic.securingData': 'جارٍ تأمين بياناتك...', + 'mnemonic.saveRecoveryPhrase': 'حفظ عبارة الاسترداد', + 'mnemonic.userNotLoaded': 'لم يتم تحميل المستخدم. يرجى تسجيل الدخول مرة أخرى أو تحديث الصفحة.', + 'mnemonic.invalidPhrase': 'عبارة الاسترداد غير صالحة. يرجى مراجعة كلماتك والمحاولة مرة أخرى.', + 'mnemonic.somethingWentWrong': 'حدث خطأ ما. يرجى المحاولة مرة أخرى.', + 'team.failedToCreate': 'فشل إنشاء الفريق', + 'team.invalidInviteCode': 'رمز دعوة غير صالح أو منتهي الصلاحية', + 'team.failedToSwitch': 'فشل تبديل الفريق', + 'team.failedToLeave': 'فشل مغادرة الفريق', + 'team.role.owner': 'المالك', + 'team.role.admin': 'المسؤول', + 'team.role.billingManager': 'مدير الفوترة', + 'team.role.member': 'عضو', + 'team.active': 'نشط', + 'team.personalTeam': 'الفريق الشخصي', + 'team.manageTeam': 'إدارة الفريق', + 'team.switching': 'جارٍ التبديل...', + 'team.switch': 'تبديل', + 'team.leaving': 'جارٍ المغادرة...', + 'team.leave': 'مغادرة', + 'team.yourTeams': 'فرقك', + 'team.createNewTeam': 'إنشاء فريق جديد', + 'team.teamName': 'اسم الفريق', + 'team.creating': 'جارٍ الإنشاء...', + 'team.joinExistingTeam': 'الانضمام إلى فريق موجود', + 'team.inviteCode': 'رمز الدعوة', + 'team.joining': 'جارٍ الانضمام...', + 'team.join': 'انضمام', + 'team.leaveTeam': 'مغادرة الفريق', + 'team.confirmLeave': 'هل أنت متأكد من أنك تريد مغادرة', + 'team.leaveWarning': + 'ستفقد الوصول إلى الفريق وجميع موارده. ستحتاج إلى دعوة جديدة للانضمام مجددًا.', + 'team.management': 'إدارة الفريق', + 'team.notFound': 'الفريق غير موجود', + 'team.accessDenied': 'الوصول مرفوض', + 'team.members': 'الأعضاء', + 'team.membersDesc': 'إدارة أعضاء الفريق وأدواره', + 'team.invites': 'الدعوات', + 'team.invitesDesc': 'إنشاء رموز الدعوة وإدارتها', + 'team.settings': 'إعدادات الفريق', + 'team.settingsDesc': 'تحرير اسم الفريق وإعداداته', + 'team.editSettings': 'تحرير إعدادات الفريق', + 'team.enterName': 'أدخل اسم الفريق', + 'team.saving': 'جاري الحفظ...', + 'team.saveChanges': 'حفظ التغييرات', + 'team.delete': 'حذف الفريق', + 'team.deleteDesc': 'حذف هذا الفريق نهائيًا', + 'team.deleting': 'جارٍ الحذف...', + 'team.failedToUpdate': 'فشل تحديث الفريق', + 'team.failedToDelete': 'فشل حذف الفريق', + 'team.manageTitle': 'إدارة {name}', + 'team.planCreated': '{plan} الخطة • تم الإنشاء {date}', + 'team.confirmDelete': 'هل أنت متأكد من أنك تريد حذف {name}؟', + 'team.deleteWarning': 'لا يمكن التراجع عن هذا الإجراء. ستتم إزالة جميع بيانات الفريق نهائيًا.', + 'voice.title': 'الإملاء الصوتي', + 'voice.settings': 'إعدادات الصوت', + 'voice.settingsDesc': 'اضغط مع الاستمرار على المفتاح الساخن للإملاء وإدراج النص في الحقل النشط.', + 'voice.hotkey': 'المفتاح الساخن', + 'voice.activationMode': 'وضع التفعيل', + 'voice.tapToToggle': 'انقر للتبديل', + 'voice.writingStyle': 'أسلوب الكتابة', + 'voice.verbatimTranscription': 'النسخ الحرفي', + 'voice.naturalCleanup': 'تنظيف طبيعي', + 'voice.autoStart': 'بدء خادم الصوت تلقائيًا مع النواة', + 'voice.customDictionary': 'القاموس المخصص', + 'voice.customDictionaryDesc': 'أضف أسماء ومصطلحات تقنية وكلمات تخصصية لتحسين دقة التعرف.', + 'voice.addWord': 'أضف كلمة...', + 'voice.sttDisabled': 'الإملاء الصوتي معطّل حتى يتم تنزيل نموذج STT المحلي وجاهزيته.', + 'voice.openLocalAiModel': 'فتح نموذج الذكاء الاصطناعي المحلي', + 'voice.serverRestarted': 'تمت إعادة تشغيل خادم الصوت بالإعدادات الجديدة.', + 'voice.settingsSaved': 'تم حفظ إعدادات الصوت.', + 'voice.serverStarted': 'تم تشغيل خادم الصوت.', + 'voice.serverStopped': 'تم إيقاف خادم الصوت.', + 'voice.saveVoiceSettings': 'حفظ إعدادات الصوت', + 'voice.startVoiceServer': 'تشغيل خادم الصوت', + 'voice.stopVoiceServer': 'إيقاف خادم الصوت', + 'voice.debugTitle': 'تصحيح الصوت', + 'voice.failedToLoadSettings': 'فشل تحميل إعدادات الصوت', + 'voice.failedToSaveSettings': 'فشل في حفظ إعدادات الصوت', + 'voice.failedToStartServer': 'فشل في بدء تشغيل خادم الصوت', + 'voice.failedToStopServer': 'فشل في إيقاف خادم الصوت', + 'voice.sttDisabledPrefix': 'الإملاء الصوتي معطّل حتى يتم تنزيل نموذج STT المحلي. استخدم', + 'voice.sttDisabledSuffix': 'أعلاه لتثبيت Whisper.', + 'voice.debug.failedToLoadVoiceDebugData': 'فشل تحميل بيانات تصحيح الأخطاء الصوتية', + 'voice.debug.settingsSaved': 'تم حفظ إعدادات تصحيح الأخطاء.', + 'voice.debug.failedToSaveSettings': 'فشل حفظ إعدادات الصوت', + 'voice.debug.runtimeStatus': 'حالة وقت التشغيل', + 'voice.debug.runtimeStatusDesc': 'تشخيصات مباشرة لخادم الصوت ومحرك تحويل الكلام إلى نص.', + 'voice.debug.server': 'الخادم', + 'voice.debug.unavailable': 'غير متاح', + 'voice.debug.ready': 'جاهز', + 'voice.debug.notReady': 'غير جاهز', + 'voice.debug.hotkey': 'مفتاح التشغيل السريع', + 'voice.debug.notAvailable': 'غير متوفر', + 'voice.debug.mode': 'الوضع', + 'voice.debug.transcriptions': 'النسخ', + 'voice.debug.serverError': 'خطأ في الخادم', + 'voice.debug.advancedSettings': 'الإعدادات المتقدمة', + 'voice.debug.advancedSettingsDesc': 'معاملات ضبط منخفضة المستوى للتسجيل واكتشاف الصمت.', + 'voice.debug.minimumRecordingSeconds': 'الحد الأدنى لثواني التسجيل', + 'voice.debug.silenceThreshold': 'عتبة الصمت (RMS)', + 'voice.debug.silenceThresholdDesc': + 'تُعامَل التسجيلات ذات الطاقة الأدنى من هذا الحد كصمت ويُتخطى فيها. كلما كانت القيمة أصغر، كان النظام أكثر حساسية.', + 'voice.providers.saved': 'تم حفظ موفري الصوت.', + 'voice.providers.failedToSave': 'فشل في حفظ موفري الصوت', + 'voice.providers.ellipsis': '…', + 'voice.providers.installing': 'تثبيت', + 'voice.providers.installingBusy': 'جارٍ التثبيت...', + 'voice.providers.reinstallLocally': 'إعادة التثبيت محليًا', + 'voice.providers.repair': 'إصلاح', + 'voice.providers.retryLocally': 'أعد المحاولة محليًا', + 'voice.providers.installLocally': 'التثبيت محليًا', + 'voice.providers.whisperReady': 'Whisper جاهز.', + 'voice.providers.whisperInstallStarted': 'بدأ تثبيت Whisper', + 'voice.providers.queued': 'في قائمة الانتظار', + 'voice.providers.failedToInstallWhisper': 'فشل تثبيت Whisper', + 'voice.providers.piperReady': 'Piper جاهز.', + 'voice.providers.piperInstallStarted': 'بدأ تثبيت Piper', + 'voice.providers.failedToInstallPiper': 'فشل تثبيت Piper', + 'voice.providers.title': 'موفري الصوت', + 'voice.providers.desc': + 'اختر مكان تشغيل النسخ والتوليف. استخدم أزرار «التثبيت محلياً» لتنزيل الملفات الثنائية والنماذج في مساحة عملك. يمكن حفظ الموفرين المحليين قبل اكتمال التثبيت — لا حاجة لإعداد WHISPER_BIN أو PIPER_BIN يدوياً.', + 'voice.providers.sttProvider': 'موفر تحويل الكلام إلى نص', + 'voice.providers.sttProviderAria': 'موفر STT', + 'voice.providers.cloudWhisperProxy': 'السحابة (وكيل الهمس)', + 'voice.providers.localWhisper': 'الهمس المحلي', + 'voice.providers.installRequired': '(يتطلب التثبيت)', + 'voice.providers.whisperInstalledTitle': 'تم تثبيت Whisper. انقر لإعادة التثبيت.', + 'voice.providers.whisperDownloadTitle': 'تنزيل whisper.cpp ونموذج GGML في مساحة عملك.', + 'voice.providers.installed': 'تم التثبيت', + 'voice.providers.installFailed': 'فشل التثبيت', + 'voice.providers.notInstalled': 'غير مثبت', + 'voice.providers.whisperModel': 'نموذج الهمس', + 'voice.providers.whisperModelAria': 'نموذج الهمس', + 'voice.providers.whisperModelTiny': 'صغير (39 ميجابايت، الأسرع)', + 'voice.providers.whisperModelBase': 'أساسي (74 ميجابايت)', + 'voice.providers.whisperModelSmall': 'صغير (244 ميجابايت)', + 'voice.providers.whisperModelMedium': 'متوسط (769 ميجابايت، موصى به)', + 'voice.providers.whisperModelLargeTurbo': 'كبير v3 Turbo (1.5 جيجابايت، أفضل دقة)', + 'voice.providers.ttsProvider': 'موفر خدمة تحويل النص إلى كلام', + 'voice.providers.ttsProviderAria': 'موفر TTS', + 'voice.providers.cloudElevenLabsProxy': 'السحابة (وكيل ElevenLabs)', + 'voice.providers.localPiper': 'تم تثبيت مزمار محلي', + 'voice.providers.piperInstalledTitle': 'مزمار. انقر لإعادة التثبيت.', + 'voice.providers.piperDownloadTitle': + 'تنزيل Piper وصوت en_US-lessac-medium المُجمَّع في مساحة عملك.', + 'voice.providers.piperVoice': 'صوت المزمار', + 'voice.providers.piperVoiceAria': 'صوت المزمار', + 'voice.providers.customVoiceOption': 'أخرى (اكتب أدناه)...', + 'voice.providers.customVoiceAria': 'معرف صوت المزمار (مخصص)', + 'voice.providers.customVoicePlaceholder': 'en_US-lessac-medium', + 'voice.providers.piperVoicesDesc': + 'تأتي الأصوات من huggingface.co/rhasspy/piper-voices. قد يتطلب تبديل الأصوات نقرة تثبيت/إعادة تثبيت لتنزيل ملف .onnx الجديد.', + 'voice.providers.mascotVoice': 'تم تكوين صوت التميمة', + 'voice.providers.mascotVoiceDescPrefix': + 'صوت ElevenLabs الذي تستخدمه الشخصية في الردود الصوتية مُهيَّأ ضمن', + 'voice.providers.mascotSettings': 'إعدادات التميمة', + 'voice.providers.mascotVoiceDescSuffix': '.', + 'voice.providers.hotkeyPlaceholder': 'Fn', + 'voice.providers.piperPreset.lessacMedium': 'الولايات المتحدة · Lessac (محايد، موصى به)', + 'voice.providers.piperPreset.lessacHigh': 'الولايات المتحدة · Lessac (جودة أعلى، أكبر)', + 'voice.providers.piperPreset.ryanMedium': 'الولايات المتحدة · Ryan (ذكر)', + 'voice.providers.piperPreset.amyMedium': 'الولايات المتحدة · Amy (أنثى)', + 'voice.providers.piperPreset.librittsHigh': 'الولايات المتحدة · LibriTTS (متعدد المتحدثين)', + 'voice.providers.piperPreset.alanMedium': 'GB · Alan (ذكر)', + 'voice.providers.piperPreset.jennyDiocoMedium': 'GB · Jenny Dioco (أنثى)', + 'voice.providers.piperPreset.northernEnglishMaleMedium': 'GB · اللغة الإنجليزية الشمالية (ذكر)', + 'voice.providers.chip.cloud': 'OpenHuman (مُدار)', + 'voice.providers.chip.cloudAria': 'موفر OpenHuman المُدار مُفعَّل دائماً', + 'voice.providers.chip.whisper': 'Whisper (محلي)', + 'voice.providers.chip.enableWhisper': 'تفعيل Whisper STT المحلي', + 'voice.providers.chip.disableWhisper': 'تعطيل Whisper STT المحلي', + 'voice.providers.chip.piper': 'Piper (محلي)', + 'voice.providers.chip.enablePiper': 'تفعيل Piper TTS المحلي', + 'voice.providers.chip.disablePiper': 'تعطيل Piper TTS المحلي', + 'voice.providers.chip.enableProvider': 'Enable', + 'voice.providers.chip.disableProvider': 'Disable', + 'voice.providers.chip.apiKeyLabel': 'مفتاح API', + 'voice.providers.chip.apiKeyPlaceholder': 'sk-…', + 'voice.providers.chip.comingSoon': 'قريباً', + 'voice.modal.title': 'Configure', + 'voice.modal.desc': 'أدخل مفتاح API لتفعيل هذا الموفر. يمكنك اختبار الاتصال قبل الحفظ.', + 'voice.modal.testKey': 'اختبار المفتاح', + 'voice.modal.testing': 'جارٍ الاختبار…', + 'voice.modal.saveAndEnable': 'حفظ وتفعيل', + 'voice.modal.enable': 'Enable', + 'voice.modal.whisperDesc': + 'اختر حجم النموذج وثبّت ملف Whisper الثنائي ونموذج GGML في مساحة عملك. النماذج الأكبر أكثر دقة لكنها أبطأ.', + 'voice.modal.piperDesc': + 'اختر صوتاً وثبّت ملف Piper الثنائي ونموذج ONNX في مساحة عملك. يعمل Piper بالكامل دون اتصال بالإنترنت وبزمن استجابة منخفض.', + 'voice.routing.title': 'توجيه الصوت', + 'voice.routing.desc': + 'اختر الموفرين المُفعَّلين الذين يتولون تحويل الكلام إلى نص والنص إلى كلام.', + 'voice.routing.save': 'Save', + 'voice.routing.testStt': 'اختبار STT', + 'voice.routing.testTts': 'اختبار TTS', + 'voice.routing.elevenlabsVoice': 'صوت ElevenLabs', + 'voice.routing.elevenlabsVoiceAria': 'اختيار صوت ElevenLabs', + 'voice.routing.elevenlabsVoiceIdAria': 'معرف صوت ElevenLabs (مخصص)', + 'voice.routing.elevenlabsVoiceDesc': + 'اختر صوتاً منتقىً أو الصق معرف صوت مخصص من لوحة تحكم ElevenLabs.', + 'voice.externalProviders.title': 'موفرو الصوت الخارجيون', + 'voice.externalProviders.desc': + 'اربط واجهات API صوتية تابعة لجهات خارجية مثل Deepgram أو ElevenLabs أو OpenAI مباشرةً.', + 'voice.externalProviders.keySet': 'المفتاح مُعيَّن', + 'voice.externalProviders.noKey': 'لا يوجد مفتاح API', + 'voice.externalProviders.test': 'Test', + 'voice.externalProviders.testing': 'جارٍ الاختبار…', + 'voice.externalProviders.remove': 'Remove', + 'voice.externalProviders.provider': 'Provider', + 'voice.externalProviders.selectProvider': 'اختر موفراً…', + 'voice.externalProviders.apiKey': 'مفتاح API', + 'voice.externalProviders.apiKeyPlaceholder': 'sk-…', + 'voice.externalProviders.add': 'Add', + 'autocomplete.title': 'الإكمال التلقائي', + 'autocomplete.settings': 'الإعدادات', + 'autocomplete.acceptWithTab': 'قبول بـ Tab', + 'autocomplete.stylePreset': 'نمط ضبط مسبق', + 'autocomplete.style.balanced': 'متوازن', + 'autocomplete.style.concise': 'موجز', + 'autocomplete.style.formal': 'رسمي', + 'autocomplete.style.casual': 'غير رسمي', + 'autocomplete.style.custom': 'مخصص', + 'autocomplete.disabledApps': 'التطبيقات المعطّلة (رمز حزمة/تطبيق واحد في كل سطر)', + 'autocomplete.saveSettings': 'حفظ الإعدادات', + 'autocomplete.saving': 'جارٍ الحفظ…', + 'autocomplete.runtime': 'بيئة التشغيل', + 'autocomplete.running': 'يعمل', + 'autocomplete.start': 'تشغيل', + 'autocomplete.stop': 'إيقاف', + 'autocomplete.settingsSaved': 'تم حفظ إعدادات الإكمال التلقائي.', + 'autocomplete.started': 'تم تشغيل الإكمال التلقائي.', + 'autocomplete.didNotStart': 'لم يبدأ الإكمال التلقائي. تحقق مما إذا كان مفعّلاً.', + 'autocomplete.stopped': 'تم إيقاف الإكمال التلقائي.', + 'autocomplete.advancedSettings': 'إعدادات متقدمة', + 'autocomplete.debugTitle': 'تصحيح الإكمال التلقائي', + 'chat.agentChat': 'محادثة الوكيل', + 'chat.overrides': 'التجاوزات', + 'chat.model': 'النموذج', + 'chat.temperature': 'درجة الحرارة', + 'chat.conversation': 'المحادثة', + 'chat.startAgentConversation': 'ابدأ محادثة مع الوكيل.', + 'chat.you': 'أنت', + 'chat.agent': 'الوكيل', + 'chat.askAgent': 'اسأل الوكيل أي شيء...', + 'chat.sendMessage': 'إرسال الرسالة', + 'composio.triageTitle': 'مشغّلات التكامل', + 'composio.triageDesc': + 'عند التفعيل، يمر كل مشغّل Composio وارد عبر خطوة فرز بالذكاء الاصطناعي تُصنّف الحدث وقد تبدأ إجراءات آلية — دورة LLM محلية واحدة لكل مشغّل. عطّله عالميًا أو لكل تكامل إذا كنت تفضل المراجعة اليدوية. إذا كان متغير البيئة', + 'composio.disableAllTriage': 'تعطيل فرز الذكاء الاصطناعي لجميع المشغّلات', + 'composio.triggersStillRecorded': 'تُسجَّل المشغّلات في السجل — لا تُشغَّل دورة LLM.', + 'composio.disableSpecificIntegrations': 'تعطيل فرز الذكاء الاصطناعي لتكاملات محددة', + 'composio.settingsSaved': 'تم حفظ الإعدادات', + 'composio.saveFailed': 'فشل الحفظ. حاول مرة أخرى.', + 'cron.title': 'مهام Cron', + 'cron.scheduledJobs': 'المهام المجدولة', + 'cron.manageCronJobs': 'إدارة مهام cron من جدولة النواة.', + 'cron.refreshCronJobs': 'تحديث مهام Cron', + 'localModel.modelStatus': 'حالة النموذج', + 'localModel.downloadModels': 'تنزيل النماذج', + 'localModel.usage': 'الاستخدام', + 'localModel.usageDesc': + 'اختر الأنظمة الفرعية التي تعمل على النموذج المحلي. ما هو معطّل يستخدم السحابة.', + 'localModel.enableRuntime': 'تفعيل بيئة الذكاء الاصطناعي المحلي', + 'localModel.enableRuntimeDesc': + 'مفتاح رئيسي. معطّل افتراضيًا — Ollama يبقى خاملاً. عند التشغيل، يستخدم ملخّص الشجرة وذكاء الشاشة والإكمال التلقائي النموذجَ المحلي دائمًا.', + 'localModel.advancedSettings': 'إعدادات متقدمة', + 'localModel.debugTitle': 'تصحيح النموذج المحلي', + 'screenAwareness.debugTitle': 'تصحيح وعي الشاشة', + 'screenAwareness.debug.debugAndDiagnostics': 'التصحيح والتشخيص', + 'screenAwareness.debug.collapse': 'طي', + 'screenAwareness.debug.expand': 'توسيع', + 'screenAwareness.debug.failedToSave': 'فشل حفظ ذكاء الشاشة', + 'screenAwareness.debug.policyTitle': 'سياسة ذكاء الشاشة', + 'screenAwareness.debug.baselineFps': 'FPS الأساسي', + 'screenAwareness.debug.useVisionModel': 'استخدام نموذج الرؤية', + 'screenAwareness.debug.useVisionModelDesc': + 'أرسل لقطات الشاشة إلى نموذج رؤية LLM للحصول على سياق أغنى. عند التعطيل، يُستخدم نص OCR فقط مع نموذج نصي — أسرع ولا يتطلب نموذج رؤية.', + 'screenAwareness.debug.keepScreenshots': 'الاحتفاظ بلقطات الشاشة', + 'screenAwareness.debug.keepScreenshotsDesc': + 'احفظ لقطات الشاشة الملتقطة في مساحة العمل بدلاً من حذفها بعد المعالجة', + 'screenAwareness.debug.allowlist': 'القائمة المسموح بها (قاعدة واحدة لكل سطر)', + 'screenAwareness.debug.denylist': 'قائمة الرفض (قاعدة واحدة لكل سطر)', + 'screenAwareness.debug.saveSettings': 'حفظ إعدادات ذكاء الشاشة', + 'screenAwareness.debug.sessionStats': 'إحصائيات الجلسة', + 'screenAwareness.debug.framesEphemeral': 'الإطارات (عابرة)', + 'screenAwareness.debug.panicStop': 'توقف الذعر', + 'screenAwareness.debug.defaultPanicHotkey': 'Cmd+Shift+.', + 'screenAwareness.debug.vision': 'الرؤية', + 'screenAwareness.debug.idle': 'خاملة', + 'screenAwareness.debug.visionQueue': 'قائمة انتظار الرؤية', + 'screenAwareness.debug.lastVision': 'الرؤية الأخيرة', + 'screenAwareness.debug.notAvailable': 'غير متوفر', + 'screenAwareness.debug.visionSummaries': 'الرؤية الملخصات', + 'screenAwareness.debug.refreshing': 'تحديث...', + 'screenAwareness.debug.noSummaries': 'لا توجد ملخصات حتى الآن.', + 'screenAwareness.debug.unknownApp': 'تطبيق غير معروف', + 'screenAwareness.debug.macosOnly': 'ذكاء الشاشة V1 مدعوم على macOS فقط حالياً.', + 'memory.debugTitle': 'تصحيح الذاكرة', + 'memory.documents': 'المستندات', + 'memory.filterByNamespace': 'التصفية حسب مساحة الاسم...', + 'memory.refresh': 'تحديث', + 'memory.noDocumentsFound': 'لم يتم العثور على مستندات.', + 'memory.delete': 'حذف', + 'memory.rawResponse': 'الاستجابة الأولية', + 'memory.namespaces': 'مساحات الأسماء', + 'memory.noNamespacesFound': 'لم يتم العثور على مساحات أسماء.', + 'memory.queryRecall': 'الاستعلام والاستدعاء', + 'memory.namespace': 'مساحة الاسم', + 'memory.queryText': 'نص الاستعلام...', + 'memory.defaultMaxChunks': '10', + 'memory.maxChunks': 'الحد الأقصى للمجموعات', + 'memory.query': 'الاستعلام', + 'memory.recall': 'استدعاء', + 'memory.queryLabel': 'الاستعلام', + 'memory.recallLabel': 'استدعاء', + 'memory.queryResult': 'نتيجة الاستعلام', + 'memory.recallResult': 'نتيجة الاستدعاء', + 'memory.clearNamespace': 'مسح مساحة الاسم', + 'memory.clearNamespaceDescription': 'حذف جميع المستندات الموجودة في مساحة الاسم نهائيًا.', + 'memory.selectNamespace': 'حدد مساحة الاسم...', + 'memory.exampleNamespace': 'على سبيل المثال. Skill:gmail:user@example.com', + 'memory.clear': 'مسح', + 'memory.deleteConfirm': 'هل تريد حذف المستند "{documentId}" في مساحة الاسم "{namespace}"؟', + 'memory.clearNamespaceConfirm': + 'سيُحذف جميع المستندات في نطاق الاسم "{namespace}" نهائياً. هل تريد المتابعة؟', + 'memory.clearNamespaceSuccess': 'تم مسح مساحة الاسم "{namespace}".', + 'memory.clearNamespaceEmpty': 'لا يوجد شيء يجب مسحه في "{namespace}".', + 'webhooks.debugTitle': 'تصحيح الـ Webhooks', + 'webhooks.failedToLoadDebugData': 'فشل تحميل بيانات تصحيح أخطاء webhook', + 'webhooks.clearLogsConfirm': 'هل تريد مسح جميع سجلات تصحيح أخطاء webhook التي تم التقاطها؟', + 'webhooks.failedToClearLogs': 'فشل في مسح سجلات خطاف الويب', + 'webhooks.loading': 'جارٍ التحميل...', + 'webhooks.refresh': 'تحديث', + 'webhooks.clearing': 'مسح...', + 'webhooks.clearLogs': 'مسح السجلات', + 'webhooks.registered': 'تم تسجيل', + 'webhooks.captured': 'وتم التقاط', + 'webhooks.live': 'مباشرة', + 'webhooks.disconnected': 'تم قطع الاتصال', + 'webhooks.lastEvent': 'آخر حدث', + 'webhooks.at': 'في', + 'webhooks.registeredWebhooks': 'خطافات الويب المسجلة', + 'webhooks.noActiveRegistrations': 'لا توجد تسجيلات نشطة.', + 'webhooks.resolvingBackendUrl': 'حل الواجهة الخلفية URL...', + 'webhooks.capturedRequests': 'الطلبات الملتقطة', + 'webhooks.noRequestsCaptured': 'لم يتم التقاط طلبات خطاف الويب حتى الآن.', + 'webhooks.unrouted': 'تم إلغاء توجيهه', + 'webhooks.pending': 'معلق', + 'webhooks.requestHeaders': 'رؤوس الطلب', + 'webhooks.queryParams': 'معلمات الاستعلام', + 'webhooks.requestBody': 'نص الطلب', + 'webhooks.responseHeaders': 'رؤوس الاستجابة', + 'webhooks.responseBody': 'نص الاستجابة', + 'webhooks.rawPayload': 'الحمولة الأولية', + 'webhooks.empty': '[فارغة]', + 'providerSetup.error.defaultDetails': 'فشل إعداد الموفر.', + 'providerSetup.error.providerFallback': 'رفض الموفر', + 'providerSetup.error.credentialsRejected': + 'رفض {provider} بيانات الاعتماد. تحقق من مفتاح API وحاول مجدداً.', + 'providerSetup.error.endpointNotRecognized': + 'لم يتعرف {provider} على نقطة النهاية. تحقق من عنوان URL الأساسي وحاول مجدداً.', + 'providerSetup.error.providerUnavailable': + '{provider} غير متاح حالياً. حاول مجدداً أو تحقق من حالة الموفر.', + 'providerSetup.error.unreachable': + 'تعذّر الوصول إلى {provider}. تحقق من عنوان URL لنقطة النهاية واتصال الشبكة، ثم حاول مجدداً.', + 'providerSetup.error.couldNotReachWithMessage': 'تعذر الوصول إلى {provider}: {message}', + 'providerSetup.error.technicalDetails': 'التفاصيل الفنية', + 'notifications.routingTitle': 'توجيه الإشعارات', + 'notifications.routing.pipelineStats': 'إحصائيات المسار', + 'notifications.routing.total': 'الإجمالي', + 'notifications.routing.unread': 'غير مقروء', + 'notifications.routing.unscored': 'غير مسجل', + 'notifications.routing.intelligenceTitle': 'ذكاء الإشعارات', + 'notifications.routing.intelligenceDesc': + 'يُصنَّف كل إشعار من حساباتك المتصلة بواسطة نموذج ذكاء اصطناعي محلي. تُوجَّه الإشعارات عالية الأهمية تلقائياً إلى وكيل المنسق حتى لا يفوتك شيء حرج.', + 'notifications.routing.howItWorks': 'كيف يعمل', + 'notifications.routing.level.drop': 'إسقاط', + 'notifications.routing.level.dropDesc': 'تشويش / بريد عشوائي - تم تخزينه ولكن لم يتم عرضه', + 'notifications.routing.level.acknowledge': 'إقرار', + 'notifications.routing.level.acknowledgeDesc': 'أولوية منخفضة - تظهر في مركز الإشعارات', + 'notifications.routing.level.react': 'التفاعل', + 'notifications.routing.level.reactDesc': 'أولوية متوسطة — تؤدي إلى استجابة مركزة للوكيل', + 'notifications.routing.level.escalate': 'تصعيد', + 'notifications.routing.level.escalateDesc': 'أولوية عالية — يتم إعادة التوجيه إلى الوكيل المنسق', + 'notifications.routing.perProvider': 'التوجيه لكل موفر', + 'notifications.routing.threshold': 'العتبة', + 'notifications.routing.routeToOrchestrator': 'فشل التوجيه إلى المنسق', + 'notifications.routing.loadSettingsError': + 'فشل تحميل الإعدادات. أعد فتح هذا اللوح للمحاولة مجدداً.', + 'common.reload': 'إعادة تحميل', + 'common.skip': 'تخطي', + 'common.disable': 'تعطيل', + 'common.enable': 'تفعيل', + 'chat.safetyTimeout': 'لا استجابة من الوكيل بعد دقيقتين. حاول مرة أخرى أو تحقق من اتصالك.', + 'chat.filter.all': 'الكل', + 'chat.filter.work': 'العمل', + 'chat.filter.briefing': 'الإحاطة', + 'chat.filter.notification': 'الإشعار', + 'chat.filter.workers': 'العمال', + 'chat.selectThread': 'اختر محادثة', + 'chat.threads': 'المحادثات', + 'chat.noThreads': 'لا توجد محادثات بعد', + 'chat.noLabelThreads': 'لا توجد محادثات "{label}"', + 'chat.noWorkerThreads': 'لا توجد محادثات عمال بعد', + 'chat.deleteThread': 'حذف المحادثة', + 'chat.deleteThreadConfirm': 'هل أنت متأكد من أنك تريد حذف "{title}"؟', + 'chat.untitledThread': 'محادثة بلا عنوان', + 'chat.editThreadTitle': 'تعديل عنوان المحادثة', + 'chat.hideSidebar': 'إخفاء الشريط الجانبي', + 'chat.showSidebar': 'إظهار الشريط الجانبي', + 'chat.newThreadShortcut': 'محادثة جديدة (/new)', + 'chat.new': 'جديد', + 'chat.failedToLoadMessages': 'فشل تحميل الرسائل', + 'chat.thinkingIteration': 'جارٍ التفكير... ({n})', + 'chat.thinkingDots': 'جارٍ التفكير...', + 'chat.approachingLimit': 'الاقتراب من حد الاستخدام', + 'chat.approachingLimitMsg': 'لقد استخدمت {pct}% من حصتك المتاحة.', + 'chat.upgrade': 'الترقية', + 'chat.weeklyLimitHit': 'لقد وصلت إلى حدك الأسبوعي.', + 'chat.resets': 'إعادة ضبط', + 'chat.topUpToContinue': 'أضف رصيدًا للمتابعة.', + 'chat.budgetComplete': 'ميزانيتك المشمولة اكتملت. أضف رصيدًا أو قم بالترقية للمتابعة.', + 'chat.topUp': 'إضافة رصيد', + 'chat.cycle': 'الدورة', + 'chat.cycleSpent': 'الإنفاق في هذه الدورة', + 'chat.cycleRemaining': 'المتبقي', + 'chat.left': 'متبقٍ', + 'chat.setup': 'إعداد', + 'chat.switchToText': 'التبديل إلى النص', + 'chat.transcribing': 'جارٍ النسخ...', + 'chat.stopAndSend': 'إيقاف وإرسال', + 'chat.startTalking': 'ابدأ الحديث', + 'chat.playingVoiceReply': 'تشغيل الرد الصوتي', + 'chat.voiceHint': 'استخدم الميكروفون للتحدث', + 'chat.micUnavailable': 'الميكروفون غير متاح', + 'chat.turn': 'دورة', + 'chat.turns': 'دورات', + 'chat.openWorkerThread': 'فتح محادثة العامل', + 'chat.attachment.attach': 'إرفاق صورة', + 'chat.attachment.remove': 'إزالة {name}', + 'chat.attachment.tooMany': 'الحد الأقصى {max} صور لكل رسالة', + 'chat.attachment.tooLarge': 'حجم الصورة يتجاوز الحد المسموح {max}', + 'chat.attachment.unsupportedType': 'نوع ملف غير مدعوم. استخدم PNG أو JPEG أو WebP أو GIF أو BMP.', + 'chat.attachment.readFailed': 'تعذر قراءة الملف', + 'memory.searchAria': 'البحث في الذاكرة', + 'memory.searchPlaceholder': 'البحث في إدخالات الذاكرة...', + 'memory.sourceFilter.all': 'جميع المصادر', + 'memory.sourceFilter.email': 'البريد الإلكتروني', + 'memory.sourceFilter.calendar': 'التقويم', + 'memory.sourceFilter.telegram': 'Telegram', + 'memory.sourceFilter.aiInsight': 'رؤية الذكاء الاصطناعي', + 'memory.sourceFilter.system': 'النظام', + 'memory.sourceFilter.trading': 'التداول', + 'memory.sourceFilter.security': 'الأمان', + 'memory.ingestionActivity': 'نشاط الاستيعاب', + 'memory.events': 'أحداث', + 'memory.event': 'حدث', + 'memory.overTheLast': 'خلال آخر', + 'memory.months': 'أشهر', + 'memory.peak': 'الذروة', + 'memory.perDay': '/يوم', + 'memory.less': 'أقل', + 'memory.more': 'أكثر', + 'memory.on': 'في', + 'memory.loading': 'جارٍ تحميل الذاكرة', + 'memory.fetching': 'جارٍ جلب إدخالات الذاكرة...', + 'memory.analyzing': 'جارٍ تحليل الذاكرة', + 'memory.analyzingHint': 'جارٍ معالجة ذكرياتك لاستخلاص الرؤى...', + 'memory.noMatches': 'لا توجد نتائج مطابقة', + 'memory.noMatchesHint': 'جرّب تغيير مصطلحات البحث أو المرشحات.', + 'memory.allCaughtUp': 'تم مراجعة الكل', + 'memory.allCaughtUpHint': 'لا توجد إدخالات ذاكرة جديدة للمعالجة.', + 'memory.noAnalysis': 'لا يوجد تحليل بعد', + 'memory.noAnalysisHint': 'شغّل تحليلاً لاكتشاف الأنماط في ذكرياتك.', + 'memory.emptyHint': 'ابدأ التفاعل لإنشاء أول ذكرياتك.', + 'mic.unavailable': 'الميكروفون غير متاح', + 'mic.permissionDenied': 'تم رفض إذن الميكروفون', + 'mic.failedToStartRecorder': 'فشل تشغيل المسجّل', + 'mic.transcribing': 'جارٍ النسخ...', + 'mic.tapToSend': 'انقر للإرسال', + 'mic.waitingForAgent': 'في انتظار الوكيل...', + 'mic.tapAndSpeak': 'انقر وتحدث', + 'mic.stopRecording': 'إيقاف التسجيل وإرسال', + 'mic.startRecording': 'بدء التسجيل', + 'mic.deviceSelector': 'جهاز الميكروفون', + 'mic.tapToSendCountdown': 'انقر للإرسال ({seconds} ث)', + 'token.usageLimitReached': 'تم الوصول إلى حد الاستخدام', + 'token.approachingLimit': 'الاقتراب من الحد', + 'token.planClickForDetails': 'الخطة - انقر للتفاصيل', + 'token.sessionTokens': 'وارد: {in} | صادر: {out} | الدورات: {turns}', + 'token.limit': 'تم الوصول إلى الحد', + 'catalog.noCapabilityBinding': 'لا يوجد ربط بالإمكانات', + 'catalog.downloadFailed': 'فشل التنزيل', + 'catalog.active': 'نشط', + 'catalog.installed': 'مثبّت', + 'catalog.notDownloaded': 'لم يتم التنزيل', + 'catalog.inUse': 'قيد الاستخدام', + 'catalog.use': 'استخدام', + 'catalog.deleteModel': 'حذف النموذج', + 'catalog.download': 'تنزيل', + 'navigator.recent': 'الأخيرة', + 'navigator.today': 'اليوم', + 'navigator.thisWeek': 'هذا الأسبوع', + 'navigator.sources': 'المصادر', + 'navigator.email': 'البريد الإلكتروني', + 'navigator.slack': 'Slack', + 'navigator.chat': 'المحادثة', + 'navigator.documents': 'المستندات', + 'navigator.people': 'الأشخاص', + 'navigator.topics': 'المواضيع', + 'dreams.description': 'الأحلام هي انعكاسات مُولَّدة بالذكاء الاصطناعي تُركّب الأنماط من ذكرياتك.', + 'dreams.comingSoon': 'قريبًا', + 'assignment.memoryLlm': 'LLM الذاكرة', + 'assignment.memoryLlmAria': 'اختيار LLM الذاكرة', + 'assignment.embedder': 'المُضمِّن', + 'assignment.loaded': 'مُحمَّل', + 'assignment.notDownloaded': 'لم يتم التنزيل', + 'assignment.usedForExtractSummarise': 'مُستخدَم للاستخراج والتلخيص', + 'insights.knownFacts': 'الحقائق المعروفة', + 'insights.preferences': 'التفضيلات', + 'insights.relationships': 'العلاقات', + 'insights.skills': 'المهارات', + 'insights.opinions': 'الآراء', + 'insights.other': 'أخرى', + 'insights.title': 'الرؤى', + 'insights.empty': 'لا توجد رؤى بعد. تُولَّد الرؤى مع نمو ذاكرتك.', + 'insights.description': 'استنادًا إلى {count} علاقة في رسم بياني ذاكرتك.', + 'insights.items': 'عناصر', + 'insights.more': 'المزيد', + 'calls.joiningCall': 'جارٍ الانضمام إلى المكالمة', + 'calls.meetWindowOpening': 'جارٍ فتح نافذة Meet...', + 'calls.failedToStart': 'فشل بدء مكالمة Meet', + 'calls.couldNotStart': 'تعذّر بدء المكالمة', + 'calls.failedToClose': 'فشل إغلاق المكالمة', + 'calls.couldNotClose': 'تعذّر إغلاق المكالمة', + 'calls.joinMeet': 'الانضمام إلى مكالمة Google Meet', + 'calls.joinMeetDescription': 'أدخل رابط Google Meet للانضمام.', + 'calls.meetLink': 'رابط Meet', + 'calls.displayName': 'الاسم المعروض', + 'calls.openingMeet': 'جارٍ فتح Meet...', + 'calls.joinCall': 'انضمام إلى المكالمة', + 'calls.activeCalls': 'المكالمات النشطة', + 'calls.leave': 'مغادرة', + 'workspace.wipeConfirm': 'هل أنت متأكد من أنك تريد مسح جميع الذاكرة؟ لا يمكن التراجع عن هذا.', + 'workspace.resetTreeConfirm': 'هل أنت متأكد من أنك تريد إعادة بناء شجرة الذاكرة؟', + 'workspace.wipeTitle': 'مسح الذاكرة', + 'workspace.resetting': 'جارٍ إعادة الضبط...', + 'workspace.resetMemory': 'إعادة ضبط الذاكرة', + 'workspace.resetTreeTitle': 'إعادة بناء شجرة الذاكرة', + 'workspace.rebuilding': 'جارٍ إعادة البناء...', + 'workspace.resetMemoryTree': 'إعادة ضبط شجرة الذاكرة', + 'workspace.building': 'جارٍ البناء...', + 'workspace.buildSummaryTrees': 'بناء أشجار الملخصات', + 'workspace.viewVault': 'عرض الخزينة', + 'workspace.openingVaultTitle': 'فتح المخزن في Obsidian', + 'workspace.openingVaultMessage': + 'إذا لم يفتح Obsidian، ثبّته من obsidian.md أو استخدم «إظهار المجلد». مسار الخزنة:', + 'workspace.openVaultFailedTitle': 'تعذّر فتح الخزنة في Obsidian', + 'workspace.openVaultFailedMessage': 'استخدم Reveal Folder لفتح دليل المخزن مباشرة. مسار المدفن:', + 'workspace.revealVaultFailed': 'تعذّر إظهار مجلد الخزنة', + 'workspace.revealFolder': 'كشف المجلد', + 'workspace.checkingVault': 'جارٍ التحقق…', + 'workspace.vaultNotRegisteredHelp': + 'يفتح Obsidian فقط المجلدات التي أضفتها كخزنة. في Obsidian، اختر «فتح المجلد كخزنة» واختر المجلد أدناه — تحتاج إلى القيام بذلك مرة واحدة فقط. ثم انقر «عرض الخزنة» مجدداً.', + 'workspace.obsidianNotFoundHelp': + 'لم نتمكن من العثور على Obsidian على هذا الجهاز. ثبّته، أو — إذا كان مثبتاً في مكان غير قياسي — حدد مجلد إعداداته ضمن خيارات متقدمة.', + 'workspace.openAnyway': 'فتح في Obsidian على أي حال', + 'workspace.installObsidian': 'تثبيت Obsidian', + 'workspace.obsidianAdvanced': 'هل Obsidian مثبّت في مكان آخر؟', + 'workspace.obsidianConfigDirLabel': 'مجلد إعدادات Obsidian', + 'workspace.obsidianConfigDirHint': + 'المسار إلى المجلد الذي يحتوي على obsidian.json (مثال: ~/.config/obsidian). اتركه فارغاً للاكتشاف التلقائي.', + 'workspace.obsidianConfigDirPlaceholder': '~/.config/obsidian', + 'workspace.graphLoadFailed': 'فشل تحميل الرسم البياني للذاكرة', + 'workspace.loadingGraph': 'جارٍ تحميل الرسم البياني للذاكرة...', + 'workspace.graphViewMode': 'وضع عرض الرسم البياني للذاكرة', + 'workspace.trees': 'الأشجار', + 'workspace.contacts': 'جهات الاتصال', + 'graph.noContactMentions': 'لا توجد إشارات لجهات اتصال', + 'graph.noMemory': 'لا توجد ذاكرة', + 'graph.source': 'المصدر', + 'graph.topic': 'الموضوع', + 'graph.global': 'عام', + 'graph.document': 'المستند', + 'graph.contact': 'جهة الاتصال', + 'graph.nodes': 'عقد', + 'graph.parentChild': 'أب-ابن', + 'graph.documentContact': 'مستند-جهة اتصال', + 'graph.link': 'رابط', + 'graph.links': 'روابط', + 'graph.children': 'أبناء', + 'graph.clickToOpenObsidian': 'انقر للفتح في Obsidian', + 'graph.person': 'شخص', + 'modal.dontShowAgain': 'لا تظهر اقتراحات مماثلة', + 'reflections.loading': 'جارٍ تحميل التأملات...', + 'reflections.empty': 'لا توجد تأملات بعد', + 'reflections.title': 'التأملات', + 'reflections.proposedAction': 'الإجراء المقترح', + 'reflections.act': 'تنفيذ', + 'reflections.dismiss': 'تجاهل', + 'whatsapp.chatsSynced': 'محادثات مزامنة', + 'whatsapp.chatSynced': 'محادثة مزامنة', + 'sync.active': 'نشط', + 'sync.recent': 'الأخيرة', + 'sync.idle': 'خامل', + 'sync.memorySources': 'مصادر الذاكرة', + 'sync.noConnectedSources': 'لا توجد مصادر متصلة', + 'sync.chunks': 'أجزاء', + 'sync.lastChunk': 'آخر جزء:', + 'sync.pending': 'معلّق', + 'sync.processed': 'تمت المعالجة', + 'sync.syncing': 'جارٍ المزامنة…', + 'sync.sync': 'مزامنة', + 'sync.failedToLoad': 'فشل تحميل حالة المزامنة', + 'sync.noContent': 'لم تتم مزامنة أي محتوى في الذاكرة بعد. اربط تكاملاً للبدء.', + 'memorySources.title': 'المصادر الذاكرة', + 'memorySources.empty': 'لا توجد مصادر للذاكرة بعد أضف واحدة لبدء تغذية الذاكرة.', + 'memorySources.customSources': 'المصادر العرفية', + 'memorySources.addSource': 'المصدر', + 'memorySources.noCustomSources': + 'لا توجد مصادر عرفية بعد أضف ملفاً، ×1xx repo، ×x0x مكعب، أو صفحة على الشبكة للبدء.', + 'memorySources.loadingConnections': 'علاقات الحب...', + 'memorySources.noConnections': 'لم يتم العثور على أي وصلات اكسكساكسية نشطة. إجمع التكامل أولاً', + 'memorySources.pickConnection': 'اختر اتصال', + 'memorySources.selectConnection': '- اختيار اتصال -', + 'memorySources.composioListFailed': 'فشل في تحميل الأتصالات Xqx0x.', + 'memorySources.browse': '(بروز)...', + 'memorySources.folderPathPlaceholder': '/Users/you/notes', + 'memorySources.globPatternPlaceholder': '**', + 'memorySources.repoUrlPlaceholder': 'https://github.com/org/repo', + 'memorySources.branchPlaceholder': 'main', + 'memorySources.feedUrlPlaceholder': 'https://example.com/feed.xml', + 'memorySources.pageUrlPlaceholder': 'https://example.com/article', + 'memorySources.cssSelectorPlaceholder': 'article', + 'memorySources.searchQueryPlaceholder': 'من:', + 'memorySources.kind.composio': 'التكامل', + 'memorySources.kind.folder': 'محلي', + 'memorySources.kind.github_repo': 'Xqx0x', + 'memorySources.kind.twitter_query': 'Xqx0x', + 'memorySources.kind.rss_feed': 'Xqx0xq', + 'memorySources.kind.web_page': 'الصفحة', + 'memorySources.sync.successTitle': 'الموسم', + 'memorySources.sync.successMessage': 'وسيظهر التقدم قريبا.', + 'memorySources.sync.failedTitle': 'لقد فشل (سينك)', + 'time.justNow': 'للتو', + 'time.secondsAgoSuffix': 'ثانية مضت', + 'time.minutesAgoSuffix': 'دقيقة مضت', + 'time.hoursAgoSuffix': 'ساعة مضت', + 'time.daysAgoSuffix': 'يوم مضى', + 'memorySources.pickKind': 'أي نوع من المصادر تريد أن تضيفه؟', + 'memorySources.backToKinds': 'العودة إلى أنواع المصادر', + 'memorySources.label': 'Label', + 'memorySources.labelPlaceholder': 'مذكرات بحثي', + 'memorySources.add': 'مضاف', + 'memorySources.adding': 'إضافة...', + 'memorySources.added': 'المصدر مضاف', + 'memorySources.removed': 'المصدر:', + 'memorySources.remove': 'إزالة الألغام', + 'memorySources.enable': 'التمكين', + 'memorySources.disable': 'العجز', + 'memorySources.toggleFailed': 'فشل', + 'memorySources.removeFailed': 'التطهير فشل', + 'memorySources.folderPath': 'طريق الجواد', + 'memorySources.globPattern': 'نمط Glob', + 'memorySources.repoUrl': 'رابط المستودع', + 'memorySources.branch': 'الفرع', + 'memorySources.feedUrl': 'رابط الخلاصة', + 'memorySources.pageUrl': 'رابط الصفحة', + 'memorySources.cssSelector': 'محدد CSS (اختياري)', + 'memorySources.searchQuery': 'استفسار البحث', + 'backend.aiBackend': 'خلفية الذكاء الاصطناعي', + 'backend.cloud': 'سحابي', + 'backend.recommended': 'موصى به', + 'backend.cloudDescription': 'نماذج سريعة وقوية مستضافة على خوادمنا. جاهزة للاستخدام فورًا.', + 'backend.privacyNote': 'لا تُرسَل أي بيانات شخصية أو رسائل أو مفاتيح إلى خوادمنا.', + 'backend.local': 'محلي', + 'backend.advanced': 'متقدم', + 'backend.localDescription': + 'تشغيل النماذج على جهازك باستخدام Ollama. خصوصية كاملة، يتطلب إعدادًا.', + 'backend.ramRecommended': '16 جيجابايت+ RAM موصى به', + 'subconscious.tasks': 'مهام', + 'subconscious.ticks': 'دورات', + 'subconscious.last': 'آخر', + 'subconscious.failed': 'فشل', + 'subconscious.tickInterval': 'فترة الدورة', + 'subconscious.runNow': 'تشغيل الآن', + 'subconscious.providerUnavailableTitle': 'تم إيقاف اللاوعي مؤقتًا', + 'subconscious.providerSettings': 'إعدادات الذكاء الاصطناعي', + 'subconscious.approvalNeeded': 'يلزم الموافقة', + 'subconscious.requiresApproval': 'يتطلب الموافقة', + 'subconscious.fixInConnections': 'إصلاح في الاتصالات', + 'subconscious.goAhead': 'تقدّم', + 'subconscious.activeTasks': 'المهام النشطة', + 'subconscious.noActiveTasks': 'لا توجد مهام نشطة', + 'subconscious.default': 'افتراضي', + 'subconscious.addTaskPlaceholder': 'أضف مهمة جديدة...', + 'subconscious.activityLog': 'سجل النشاط', + 'subconscious.noActivity': 'لا يوجد نشاط بعد', + 'subconscious.decision.nothingNew': 'لا جديد', + 'subconscious.decision.completed': 'مكتمل', + 'subconscious.decision.evaluating': 'جارٍ التقييم', + 'subconscious.decision.waitingApproval': 'في انتظار الموافقة', + 'subconscious.decision.failed': 'فشل', + 'subconscious.decision.cancelled': 'ملغي', + 'subconscious.decision.skipped': 'تم تخطيه', + 'actionable.complete': 'إتمام', + 'actionable.dismiss': 'تجاهل', + 'actionable.snooze': 'تأجيل', + 'actionable.new': 'جديد', + 'stats.storage': 'التخزين', + 'stats.files': 'ملفات', + 'stats.documents': 'المستندات', + 'stats.today': 'اليوم', + 'stats.namespaces': 'مساحات الأسماء', + 'stats.relations': 'العلاقات', + 'stats.firstMemory': 'أول ذكرى', + 'stats.latest': 'الأحدث', + 'stats.sessions': 'الجلسات', + 'stats.tokens': 'رموز', + 'bootCheck.invalidUrl': 'يرجى إدخال عنوان URL لبيئة التشغيل.', + 'bootCheck.urlMustStartWith': 'يجب أن يبدأ عنوان URL بـ http:// أو https://', + 'bootCheck.validUrlRequired': 'لا يبدو أن هذا عنوان URL صالح (جرّب https://core.example.com/rpc)', + 'bootCheck.tokenRequired': 'سنحتاج إلى رمز مصادقة للاتصال.', + 'bootCheck.chooseCoreMode': 'اختر بيئة التشغيل', + 'bootCheck.connectToCore': 'اتصل ببيئة تشغيلك', + 'bootCheck.desktopDescription': 'يحتاج OpenHuman إلى بيئة تشغيل للعمل. اختر مكانها.', + 'bootCheck.webDescription': + 'على الويب، يتصل OpenHuman ببيئة تشغيل تتحكم فيها. أدخل عنوان URL الخاص بها ورمز المصادقة أدناه، أو احصل على تطبيق سطح المكتب لتشغيلها مباشرة على جهازك.', + 'bootCheck.preferDesktop': 'تفضّل إبقاء كل شيء على جهازك؟', + 'bootCheck.downloadDesktop': 'احصل على تطبيق سطح المكتب', + 'bootCheck.localRecommended': 'التشغيل محليًا (موصى به)', + 'bootCheck.localDescription': + 'يعمل مباشرة على جهازك. الأسرع، خصوصي تمامًا، لا شيء يحتاج إلى إعداد.', + 'bootCheck.cloudMode': 'التشغيل على السحابة (معقد)', + 'bootCheck.cloudDescription': + 'الاتصال ببيئة تشغيل تستضيفها في مكان آخر. تبقى متصلة 24×7 حتى لا تحتاج إلى إبقاء هذا الجهاز يعمل.', + 'bootCheck.coreRpcUrl': 'عنوان URL لبيئة التشغيل', + 'bootCheck.rpcUrlPlaceholder': 'https://core.example.com/rpc', + 'bootCheck.authToken': 'رمز المصادقة', + 'bootCheck.bearerTokenPlaceholder': 'رمز Bearer من بيئة تشغيلك البعيدة', + 'bootCheck.storedLocally': 'يُحفظ على هذا الجهاز فقط. يُرسَل كـ ', + 'bootCheck.testing': 'جارٍ الاختبار…', + 'bootCheck.testConnection': 'اختبار الاتصال', + 'bootCheck.connectedOk': 'متصل. أنت جاهز للانطلاق.', + 'bootCheck.authFailed': 'الرمز لم ينجح. تحقق منه وحاول مرة أخرى.', + 'bootCheck.unreachablePrefix': 'تعذّر الوصول إليه:', + 'bootCheck.checkingCore': 'جارٍ تنشيط بيئة تشغيلك…', + 'bootCheck.cannotReach': 'تعذّر الوصول إلى بيئة التشغيل', + 'bootCheck.cannotReachDesc': 'تعذّر الاتصال ببيئة تشغيلك. هل تريد تجربة بيئة مختلفة؟', + 'bootCheck.switchMode': 'اختر بيئة تشغيل مختلفة', + 'bootCheck.quit': 'خروج', + 'bootCheck.legacyDetected': 'تم اكتشاف بيئة تشغيل خلفية قديمة', + 'bootCheck.legacyDescription': + 'خدمة OpenHuman مثبّتة بشكل منفصل تعمل بالفعل على هذا الجهاز. نحتاج إلى إزالتها قبل أن تتولى بيئة التشغيل المدمجة.', + 'bootCheck.removing': 'جارٍ الإزالة…', + 'bootCheck.removeContinue': 'إزالة ومتابعة', + 'bootCheck.localNeedsRestart': 'بيئة التشغيل المحلية تحتاج إلى إعادة تشغيل', + 'bootCheck.localNeedsRestartDesc': + 'بيئة تشغيلك المحلية على إصدار مختلف عن هذا التطبيق. ستعيد إعادة التشغيل السريعة مزامنتهما.', + 'bootCheck.restarting': 'جارٍ إعادة التشغيل…', + 'bootCheck.restartCore': 'إعادة تشغيل بيئة التشغيل', + 'bootCheck.cloudNeedsUpdate': 'بيئة التشغيل السحابية تحتاج إلى تحديث', + 'bootCheck.cloudNeedsUpdateDesc': + 'بيئة تشغيلك السحابية على إصدار مختلف عن هذا التطبيق. شغّل المحدّث لإعادة مزامنتهما.', + 'bootCheck.updating': 'جارٍ التحديث…', + 'bootCheck.updateCloudCore': 'تحديث بيئة التشغيل السحابية', + 'bootCheck.versionCheckFailed': 'فشل التحقق من إصدار بيئة التشغيل', + 'bootCheck.versionCheckFailedDesc': + 'بيئة تشغيلك تعمل لكنها لا تُبلّغ عن إصدارها. قد تكون قديمة. أعد تشغيلها أو حدّثها للمتابعة.', + 'bootCheck.working': 'جارٍ العمل…', + 'bootCheck.restartUpdateCore': 'إعادة تشغيل / تحديث بيئة التشغيل', + 'bootCheck.unexpectedError': 'خطأ غير متوقع في فحص بدء التشغيل', + 'bootCheck.actionFailed': 'حدث خطأ ما. يرجى المحاولة مرة أخرى.', + 'bootCheck.portConflictTitle': 'تعذّر تشغيل محرّك التطبيق', + 'bootCheck.portConflictBody': + 'هناك عملية أخرى تستخدم منفذ الشبكة الذي يحتاجه OpenHuman. سنحاول إصلاح ذلك تلقائيًا.', + 'bootCheck.portConflictFixButton': 'إصلاح تلقائي', + 'bootCheck.portConflictFixing': 'جارٍ الإصلاح…', + 'bootCheck.portConflictFixFailed': + 'لم ينجح الإصلاح التلقائي. يُرجى إعادة تشغيل الكمبيوتر والمحاولة مجددًا.', + 'notifications.justNow': 'الآن', + 'notifications.minAgo': 'منذ {n} د', + 'notifications.hrAgo': 'منذ {n} س', + 'notifications.dayAgo': 'منذ {n} ي', + 'notifications.category.messages': 'الرسائل', + 'notifications.category.agents': 'الوكلاء', + 'notifications.category.skills': 'المهارات', + 'notifications.category.system': 'النظام', + 'notifications.category.meetings': 'الاجتماعات', + 'notifications.category.reminders': 'التذكيرات', + 'notifications.category.important': 'مهم', + 'about.update.status.checking': 'جارٍ التحقق...', + 'about.update.status.available': 'v{version} متاح', + 'about.update.status.availableNoVersion': 'تحديث متاح', + 'about.update.status.downloading': 'جارٍ التنزيل...', + 'about.update.status.readyToInstall': 'v{version} جاهز للتثبيت', + 'about.update.status.readyToInstallNoVersion': + 'تم تنزيل إصدار جديد وهو جاهز. أعد التشغيل للتطبيق.', + 'about.update.status.installing': 'جارٍ التثبيت...', + 'about.update.status.restarting': 'جارٍ إعادة التشغيل...', + 'about.update.status.upToDate': 'أنت تستخدم أحدث إصدار.', + 'about.update.status.error': 'فشل التحقق من التحديثات', + 'about.update.status.default': 'التحقق من التحديثات', + 'welcome.connectionFailed': 'فشل الاتصال: {status} {statusText}', + 'welcome.connectionFailedMsg': 'فشل الاتصال: {message}', + 'welcome.continueLocally': 'المتابعة محليًا', 'welcome.continueLocallyExperimental': 'المتابعة محليًا (تجريبي)', + 'welcome.localSessionStarting': 'بدء الجلسة المحلية...', + 'welcome.localSessionDesc': 'يستخدم ملف تعريف محلي غير متصل ويتخطى TinyHumans OAuth.', + 'chat.agentChatDesc': 'فتح جلسة محادثة مباشرة مع الوكيل.', + 'chat.modelPlaceholder': 'gpt-4o', + 'channels.activeRouteValue': '{channel} عبر {authMode}', + 'privacy.dataKind.messages': 'الرسائل', + 'privacy.dataKind.agents': 'الوكلاء', + 'privacy.dataKind.skills': 'المهارات', + 'privacy.dataKind.system': 'النظام', + 'privacy.dataKind.meetings': 'الاجتماعات', + 'privacy.dataKind.reminders': 'التذكيرات', + 'privacy.dataKind.important': 'مهم', + 'onboarding.enableLocalAI': 'تفعيل الذكاء الاصطناعي المحلي', + 'onboarding.skills.status.available': 'متاح', + 'onboarding.skills.status.connected': 'متصل', + 'onboarding.skills.status.connecting': 'جارٍ الاتصال', + 'onboarding.skills.status.error': 'خطأ', + 'onboarding.skills.status.unavailable': 'غير متاح', + 'composio.statusUnavailable': 'الحالة غير متاحة', + 'composio.authExpired': 'انتهت صلاحية المصادقة', + 'composio.reconnect': 'إعادة الاتصال', + 'composio.expiredAuthorization': '{name} انتهت صلاحية الترخيص', + 'composio.expiredDescription': + 'أعد الاتصال لإعادة تمكين أدوات {name}. OpenHuman سيبقي هذا التكامل غير متاح حتى تقوم بتحديث وصول OAuth.', + 'composio.envVarOverrides': 'محدد، فإنه يتجاوز هذا الإعداد.', + 'composio.previewBadge': 'معاينة', + 'composio.previewTooltip': + 'سيتم دمج الوكيل قريبًا - يمكنك الاتصال، ولكن لا يمكن للوكيل استخدام مجموعة الأدوات هذه بعد.', + 'memory.day.sun': 'أحد', + 'memory.day.mon': 'إثن', + 'memory.day.tue': 'ثلا', + 'memory.day.wed': 'أرب', + 'memory.day.thu': 'خمي', + 'memory.day.fri': 'جمع', + 'memory.day.sat': 'سبت', + 'memory.ingesting': 'جارٍ الاستيعاب', + 'memory.ingestionQueued': 'في قائمة الانتظار', + 'memory.ingestingTitle': 'جارٍ استيعاب {title}', + 'mic.noAudioCaptured': 'لم يُلتقط أي صوت', + 'mic.noSpeechDetected': 'لم يُكتشف أي كلام', + 'mic.lowConfidenceResult': 'تعذّر فهم الصوت بوضوح — يرجى المحاولة مرة أخرى', + 'mic.failedToStopRecording': 'فشل إيقاف التسجيل: {message}', + 'mic.transcriptionFailed': 'فشل النسخ: {message}', + 'reflections.kind.retrospective': 'مراجعة', + 'reflections.kind.derivedFact': 'حقيقة مستنتجة', + 'reflections.kind.moodInsight': 'رؤية المزاج', + 'reflections.kind.relationshipInsight': 'رؤية العلاقة', + 'graph.tooltip.summary': 'ملخص', + 'graph.tooltip.contact': 'جهة اتصال', + 'localModel.usage.never': 'أبدًا', + 'localModel.usage.mediumLoad': 'حمل متوسط', + 'localModel.usage.lowLoad': 'حمل منخفض', + 'localModel.usage.idleMode': 'وضع الخمول', + 'localModel.rebootstrapComplete': 'اكتملت إعادة تمهيد النموذج.', + 'localModel.modelsVerified': 'تم التحقق من النماذج المحلية.', + 'accounts.addModal.allConnected': 'الكل متصل', + 'accounts.addModal.title': 'إضافة حساب', + 'accounts.respondQueue.empty': 'فارغ', + 'accounts.respondQueue.hide': 'إخفاء قائمة الردود', + 'accounts.respondQueue.loadFailed': 'فشل تحميل قائمة الردود', + 'accounts.respondQueue.loading': 'جارٍ تحميل القائمة…', + 'accounts.respondQueue.pending': 'معلّق', + 'accounts.respondQueue.show': 'إظهار قائمة الردود', + 'accounts.respondQueue.title': 'قائمة الردود', + 'accounts.webviewHost.almostReady': 'على وشك الجهوزية...', + 'accounts.webviewHost.loadTimeout': 'انتهت مهلة تحميل العرض', + 'accounts.webviewHost.loading': 'جارٍ تحميل {providerName}...', + 'accounts.webviewHost.loadingAccount': 'جارٍ تحميل الحساب', + 'accounts.webviewHost.restoringSession': 'جارٍ استعادة الجلسة...', + 'accounts.webviewHost.retryLoading': 'إعادة محاولة التحميل', + 'accounts.webviewHost.takingLonger': '{providerName} يستغرق وقتًا أطول من المتوقع.', + 'accounts.webviewHost.timeoutHint': 'تلميح انتهاء المهلة', + 'app.connectionBadge.composio': 'Composio', + 'app.connectionBadge.messaging': 'المراسلة', + 'app.connectionIndicator.connected': 'متصل بـ OpenHuman AI 🚀', + 'app.connectionIndicator.connecting': 'جارٍ الاتصال', + 'app.connectionIndicator.coreOffline': 'النواة غير متصلة', + 'app.connectionIndicator.disconnected': 'غير متصل', + 'app.connectionIndicator.offline': 'غير متصل بالإنترنت', + 'app.connectionIndicator.reconnecting': 'إعادة الاتصال…', + 'app.errorFallback.componentStack': 'مكدس المكوّنات', + 'app.errorFallback.downloadLatest': 'تنزيل الأحدث', + 'app.errorFallback.heading': 'العنوان', + 'app.errorFallback.hint': 'تلميح', + 'app.errorFallback.reloadApp': 'إعادة تحميل التطبيق', + 'app.errorFallback.subheading': 'العنوان الفرعي', + 'app.errorFallback.tryRecover': 'محاولة الاسترداد', + 'app.localAiDownload.installing': 'جارٍ التثبيت...', + 'app.localAiDownload.preparing': 'جارٍ التحضير...', + 'app.openhumanLink.accounts.continueWith': 'متابعة باستخدام تسجيل الدخول عبر {label}', + 'app.openhumanLink.accounts.done': 'تم', + 'app.openhumanLink.accounts.intro': 'مقدمة', + 'app.openhumanLink.accounts.webviewNote': 'ملاحظة العرض', + 'app.openhumanLink.billing.openDashboard': 'فتح لوحة التحكم', + 'app.openhumanLink.billing.stayOnTrial': 'البقاء في النسخة التجريبية', + 'app.openhumanLink.billing.trialCredit': 'رصيد تجريبي', + 'app.openhumanLink.billing.trialDesc': 'وصف تجريبي', + 'app.openhumanLink.defaultBody': + 'غير جاهز في النافذة المنبثقة بعد. افتح صفحة الإعدادات الكاملة عند الحاجة', + 'app.openhumanLink.discord.intro': 'مقدمة', + 'app.openhumanLink.discord.openInvite': 'فتح الدعوة', + 'app.openhumanLink.discord.perk1': 'ميزة 1', + 'app.openhumanLink.discord.perk2': 'ميزة 2', + 'app.openhumanLink.discord.perk3': 'ميزة 3', + 'app.openhumanLink.discord.perk4': 'ميزة 4', + 'app.openhumanLink.done': 'تم', + 'app.openhumanLink.loadingChannelSetup': 'جارٍ تحميل إعداد القناة', + 'app.openhumanLink.maybeLater': 'ربما لاحقًا', + 'app.openhumanLink.notifications.asking': 'جارٍ الاستفسار من نظام التشغيل…', + 'app.openhumanLink.notifications.blocked': 'محظور', + 'app.openhumanLink.notifications.blockedStep1': 'الخطوة الأولى من الحظر', + 'app.openhumanLink.notifications.blockedStep2': 'الخطوة الثانية من الحظر', + 'app.openhumanLink.notifications.blockedStep3': 'الخطوة الثالثة من الحظر', + 'app.openhumanLink.notifications.intro': 'مقدمة', + 'app.openhumanLink.notifications.promptHint': 'تلميح الطلب', + 'app.openhumanLink.notifications.retry': 'إعادة إرسال إشعار اختبار', + 'app.openhumanLink.notifications.send': 'إرسال إشعار اختبار', + 'app.openhumanLink.notifications.sendFailed': 'تعذّر الإرسال: {error}', + 'app.openhumanLink.notifications.sent': + 'تم إرسال إشعار اختباري. إذا لم تستلمه، انتقل إلى إعدادات النظام ← الإشعارات ← OpenHuman، فعّل "السماح بالإشعارات"، واضبط نمط الشعار على "مستمر".', + 'app.openhumanLink.skipForNow': 'تخطي في الوقت الحالي', + 'app.openhumanLink.telegramUnavailable': 'Telegram غير متاح', + 'app.openhumanLink.title.accounts': 'ربط تطبيقاتك', + 'app.openhumanLink.title.billing': 'الفوترة والرصيد', + 'app.openhumanLink.title.discord': 'الانضمام إلى المجتمع', + 'app.openhumanLink.title.messaging': 'ربط قناة محادثة', + 'app.openhumanLink.title.notifications': 'السماح بالإشعارات', + 'app.persistRehydration.body': 'المحتوى', + 'app.persistRehydration.heading': 'العنوان', + 'app.persistRehydration.resetCta': 'جارٍ إعادة الضبط…', + 'app.persistRehydration.resetting': 'جارٍ إعادة الضبط…', + 'app.routeLoading.initializing': 'جارٍ تهيئة OpenHuman...', + 'app.update.currentlyOn': '{version}', + 'app.update.errorFallback': 'حدث خطأ أثناء التحديث.', + 'app.update.header.default': 'تحديث', + 'app.update.header.error': 'فشل التحديث', + 'app.update.header.installing': 'جارٍ تثبيت التحديث', + 'app.update.header.readyToInstall': 'التحديث جاهز للتثبيت', + 'app.update.header.restarting': 'جارٍ إعادة التشغيل…', + 'app.update.later': 'لاحقًا', + 'app.update.newVersionReady': 'إصدار جديد جاهز للتثبيت.', + 'app.update.progress.downloaded': 'تم تنزيل {amount}', + 'app.update.progress.installing': 'جارٍ تثبيت الإصدار الجديد…', + 'app.update.progress.restarting': 'جارٍ إعادة تشغيل التطبيق…', + 'app.update.progress.working': '{percent}%', + 'app.update.restartNote': 'ملاحظة إعادة التشغيل', + 'app.update.restartNow': 'إعادة التشغيل الآن', + 'app.update.versionReady': 'الإصدار {newVersion} جاهز للتثبيت.', + 'channels.discord.accountLinked': 'تم ربط الحساب', + 'channels.discord.connect': 'توصيل', + 'channels.discord.linkTokenExpired': 'انتهت صلاحية رمز الربط. يرجى المحاولة مرة أخرى.', + 'channels.discord.linkTokenInstruction': '{token}', + 'channels.discord.linkTokenLabel': 'تسمية رمز الربط', + 'channels.discord.linkTokenOnce': 'رمز الربط لمرة واحدة', + 'channels.discord.picker.allPermissionsOk': 'البوت يمتلك جميع الأذونات المطلوبة في هذه القناة.', + 'channels.discord.picker.botNotInServers': 'البوت ليس في أي خادم', + 'channels.discord.picker.category': 'الفئة', + 'channels.discord.picker.channel': 'قناة', + 'channels.discord.picker.checkingPermissions': 'جارٍ التحقق من الأذونات', + 'channels.discord.picker.loadingChannels': 'جارٍ تحميل القنوات...', + 'channels.discord.picker.loadingServers': 'جارٍ تحميل الخوادم...', + 'channels.discord.picker.missingPermissions': 'أذونات مفقودة', + 'channels.discord.picker.noChannels': 'لا توجد قنوات نصية', + 'channels.discord.picker.noServers': 'لا توجد خوادم', + 'channels.discord.picker.selectChannel': 'اختر قناة', + 'channels.discord.picker.selectServer': 'اختر خادمًا', + 'channels.discord.picker.server': 'خادم', + 'channels.discord.picker.serverChannelSelection': 'اختيار الخادم والقناة', + 'channels.discord.savedRestartRequired': 'تم حفظ القناة. أعد تشغيل التطبيق لتفعيلها.', + 'channels.telegram.connect': 'توصيل', + 'channels.telegram.managedDmConnecting': 'جارٍ اتصال الرسائل المباشرة المُدارة', + 'channels.telegram.managedDmTimeout': 'انتهت مهلة الرسائل المباشرة المُدارة', + 'channels.telegram.reconnect': 'إعادة الاتصال', + 'channels.telegram.savedRestartRequired': 'تم حفظ القناة. أعد تشغيل التطبيق لتفعيلها.', + 'channels.web.alwaysAvailable': 'متاح دائمًا', + 'chat.approval.approve': 'الموافقة', + 'chat.approval.alwaysAllow': 'دائماً ما تسمح', + 'chat.approval.alwaysAllowHint': 'توقّف عن طلب هذه الأداة - إضافتها إلى قائمتك دائماً -', + 'chat.approval.deciding': 'العمل...', + 'chat.approval.deny': 'ديني', + 'chat.approval.error': 'لا يمكن تسجيل قرارك حاول مرة أخرى', + 'chat.approval.fallback': 'العميل يريد القيام بعمل يحتاج إلى موافقتك', + 'chat.approval.title': 'الموافقة المطلوبة', + 'chat.approval.tool': 'Tool:', + 'channels.authMode.managed_dm': 'قم بتسجيل الدخول باستخدام OpenHuman', + 'channels.authMode.oauth': 'OAuth تسجيل الدخول', + 'channels.authMode.bot_token': 'استخدم رمز الروبوت الخاص بك', + 'channels.authMode.api_key': 'استخدم مفتاح API الخاص بك', + 'channels.fieldRequired': '{field} مطلوب', + 'channels.mcp.title': 'MCP الخوادم', + 'channels.mcp.description': + 'تصفح وأدر خوادم Model Context Protocol التي توسّع قدرات الذكاء الاصطناعي بأدوات جديدة.', + 'channels.discord.displayName': 'Discord', + 'channels.discord.description': 'إرسال واستقبال الرسائل عبر Discord.', + 'channels.discord.authMode.bot_token.description': + 'قم بتوفير رمز الروبوت المميز Discord الخاص بك.', + 'channels.discord.authMode.oauth.description': + 'قم بتثبيت الروبوت OpenHuman على خادم Discord الخاص بك عبر OAuth.', + 'channels.discord.authMode.managed_dm.description': + 'اربط حسابك الشخصي في Discord بالروبوت OpenHuman.', + 'channels.discord.fields.bot_token.label': 'رمز الروبوت', + 'channels.discord.fields.bot_token.placeholder': 'رمز الروبوت Discord الخاص بك', + 'channels.discord.fields.guild_id.label': 'معرف الخادم (الرابطة)', + 'channels.discord.fields.guild_id.placeholder': 'اختياري: يقتصر على خادم معين', + 'channels.telegram.displayName': 'Telegram', + 'channels.telegram.description': 'إرسال واستقبال الرسائل عبر Telegram.', + 'channels.telegram.authMode.managed_dm.description': + 'أرسل رسالة إلى الروبوت OpenHuman Telegram مباشرة.', + 'channels.telegram.authMode.bot_token.description': + 'قم بتوفير رمز الروبوت Telegram الخاص بك من @BotFather.', + 'channels.telegram.fields.bot_token.label': 'رمز الروبوت', + 'channels.telegram.fields.bot_token.placeholder': '123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11', + 'channels.telegram.fields.allowed_users.label': 'المستخدمون المسموح لهم', + 'channels.telegram.fields.allowed_users.placeholder': 'أسماء المستخدمين Telegram مفصولة بفواصل', + 'channels.telegram.remoteControlTitle': 'جهاز التحكم عن بعد (Telegram)', + 'channels.telegram.remoteControlBody': + 'من دردشة Telegram المسموح بها، أرسل /الحالة، /الجلسات، /جديد، أو /مساعدة. لا يزال توجيه النموذج يستخدم /model و /models.', + 'channels.web.displayName': 'الويب', + 'channels.web.description': 'الدردشة عبر واجهة مستخدم الويب المضمنة.', + 'channels.web.authMode.managed_dm.description': 'استخدم دردشة الويب المضمنة - لا يلزم الإعداد.', + 'channels.yuanbao.connect': 'Connect', + 'channels.yuanbao.connecting': 'جارٍ الاتصال…', + 'channels.yuanbao.fieldRequired': '{field} مطلوب', + 'channels.yuanbao.reconnect': 'Reconnect', + 'channels.yuanbao.savedRestartRequired': 'تم حفظ القناة. أعد تشغيل التطبيق لتفعيلها.', + 'channels.yuanbao.unexpectedStatus': 'حالة اتصال غير متوقعة: {status}', + 'chat.unsubscribeApproval.approve': 'موافقة وإلغاء الاشتراك', + 'chat.unsubscribeApproval.approved': '✓ تم إلغاء الاشتراك بنجاح.', + 'chat.unsubscribeApproval.denied': '✕ تم رفض الطلب.', + 'chat.unsubscribeApproval.deny': 'رفض', + 'chat.unsubscribeApproval.processing': 'جارٍ المعالجة...', + 'chat.unsubscribeApproval.title': 'طلب إلغاء الاشتراك', + 'commandPalette.ariaLabel': 'لوحة الأوامر', + 'commandPalette.description': 'الوصف', + 'commandPalette.label': 'الأوامر', + 'commandPalette.noResults': 'لا توجد نتائج', + 'commandPalette.placeholder': 'اكتب أمرًا أو ابحث…', + 'commandPalette.searchAria': 'البحث في الأوامر', + 'commandPalette.shortcutHint': 'اضغط ؟ لعرض جميع الاختصارات', + 'commandPalette.title': 'لوحة الأوامر', + 'kbd.ariaLabel': 'اختصار لوحة المفاتيح: {shortcut}', + 'iosMascot.connectedTo': 'متصل بـ', + 'iosMascot.defaultPairedLabel': 'سطح المكتب', + 'iosMascot.disconnect': 'قطع الاتصال', + 'iosMascot.error.generic': 'حدث خطأ ما. يرجى المحاولة مرة أخرى.', + 'iosMascot.error.sendFailed': 'فشل الإرسال. تحقق من اتصالك.', + 'iosMascot.pushToTalk': 'اضغط لتتحدث', + 'iosMascot.sendMessage': 'أرسل رسالة', + 'iosMascot.thinking': 'أفكر...', + 'iosMascot.typeMessage': 'اكتب أ رسالة...', + 'iosPair.connectedLoading': 'متصل! جارٍ التحميل...', + 'iosPair.connecting': 'جارٍ الاتصال بسطح المكتب...', + 'iosPair.desktopLabel': 'سطح المكتب', + 'iosPair.error.camera': 'فشل فحص الكاميرا. تحقق من أذونات الكاميرا وحاول مرة أخرى.', + 'iosPair.error.connectionFailed': 'فشل الاتصال. تأكد من تشغيل تطبيق سطح المكتب وحاول مجدداً.', + 'iosPair.error.invalidQr': 'رمز QR غير صالح. تأكد من مسح رمز إقران OpenHuman.', + 'iosPair.error.unreachableDesktop': + 'تعذّر الوصول إلى سطح المكتب. تأكد من اتصال كلا الجهازين بالإنترنت وحاول مجدداً.', + 'iosPair.expired': 'QR code انتهت صلاحيته. اطلب من سطح المكتب إعادة إنشاء الرمز.', + 'iosPair.instructions': + 'افتح OpenHuman على سطح المكتب، اذهب إلى الإعدادات > الأجهزة، واضغط «إقران الهاتف» لعرض رمز QR.', + 'iosPair.retryScan': 'أعد محاولة المسح', + 'iosPair.scanQrCode': 'المسح الضوئي QR code', + 'iosPair.scannerOpening': 'فتح الماسح الضوئي...', + 'iosPair.step.openDesktop': 'افتح OpenHuman على سطح المكتب', + 'iosPair.step.openSettings': 'انتقل إلى الإعدادات > الأجهزة', + 'iosPair.step.showQr': 'اضغط على "إقران الهاتف" لإظهار QR', + 'iosPair.title': 'الإقران مع سطح المكتب', + 'composio.connect.additionalConfigRequired': 'يلزم إعداد إضافي', + 'composio.connect.atlassianSubdomainHint': 'acme', + 'composio.connect.atlassianSubdomainLabel': 'تسمية النطاق الفرعي لـ Atlassian', + 'composio.connect.connect': 'اتصال', + 'composio.connect.dynamicsOrgNameHint': + 'على سبيل المثال، "myorg" لـ myorg.crm.dynamics.com. أدخل اسم المؤسسة المختصر فقط، وليس الرابط الكامل.', + 'composio.connect.dynamicsOrgNameLabel': 'اسم مؤسسة Dynamics 365', + 'composio.connect.connectionFailed': 'فشل الاتصال (الحالة: {status}).', + 'composio.connect.disconnectFailed': 'فشل قطع الاتصال: {msg}', + 'composio.connect.disconnecting': 'جارٍ قطع الاتصال…', + 'composio.connect.idleDescription': 'اربط حساب', + 'composio.connect.idleDescriptionSuffix': + 'الخاص بك. سنفتح نافذة متصفح، توافق فيها على الوصول، وسيكتشف هذا التطبيق الاتصال تلقائيًا.', + 'composio.connect.isConnected': 'متصل.', + 'composio.connect.manage': 'إدارة', + 'composio.connect.needsFieldsPrefix': 'للاتصال', + 'composio.connect.needsFieldsSuffix': + 'نحتاج إلى مزيد من المعلومات. املأ الحقول الناقصة أدناه وحاول مرة أخرى.', + 'composio.connect.needsSubdomain': 'للاتصال بـ', + 'composio.connect.needsSubdomainSuffix': + 'أدخل النطاق الفرعي لـ Atlassian (مثل acme لـ acme.atlassian.net) ثم أعد المحاولة.', + 'composio.connect.oauthComplete': 'بانتظار إكمال OAuth…', + 'composio.connect.oauthTimeout': 'انتهت مهلة OAuth', + 'composio.connect.permissions': 'الأذونات', + 'composio.connect.permissionsDefault': 'القراءة والكتابة مفعّلتان افتراضيًا', + 'composio.connect.permissionsNote': 'قد يكشف', + 'composio.connect.permissionsNoteSuffix': + 'أذونات وكيل OpenHuman الخاصة يتم التحكم بها أدناه عبر مفاتيح القراءة والكتابة والإدارة.', + 'composio.connect.reopenBrowser': 'إعادة فتح المتصفح', + 'composio.connect.requestingUrl': 'جارٍ طلب عنوان URL للاتصال…', + 'composio.connect.requiredFieldEmpty': 'هذا الحقل مطلوب.', + 'composio.connect.retryConnection': 'إعادة محاولة الاتصال', + 'composio.connect.scopeLoadError': 'تعذّر تحميل تفضيلات النطاق: {msg}', + 'composio.connect.scopeSaveError': 'تعذّر حفظ نطاق {key}: {msg}', + 'composio.connect.scope.read': 'قراءة', + 'composio.connect.scope.readHint': 'اسمح للوكيل بقراءة البيانات من هذا الاتصال.', + 'composio.connect.scope.write': 'اكتب', + 'composio.connect.scope.writeHint': 'اسمح للوكيل بإنشاء البيانات أو تعديلها من خلال هذا الاتصال.', + 'composio.connect.scope.admin': 'المسؤول', + 'composio.connect.scope.adminHint': + 'السماح للوكيل بإدارة الإعدادات أو الأذونات أو الإجراءات المدمرة.', + 'composio.connect.subdomainInvalid': + 'أدخل النطاق الفرعي القصير فقط (مثل "acme")، وليس الرابط الكامل. يجب أن يحتوي فقط على أحرف وأرقام وشُرَط.', + 'composio.connect.subdomainRequired': 'يرجى إدخال نطاقك الفرعي في Atlassian للمتابعة.', + 'composio.connect.wabaIdHint': + 'احصل عليه عبر GET /me/businesses ثم GET /{business_id}/owned_whatsapp_business_accounts باستخدام رمز وصول Meta الخاص بك.', + 'composio.connect.wabaIdLabel': 'تسمية معرف WABA', + 'composio.connect.wabaIdRequired': 'يرجى إدخال معرف حساب WhatsApp Business (WABA ID) للمتابعة.', + 'composio.connect.waitingFor': 'بانتظار', + 'composio.connect.waitingHint': 'تلميح الانتظار', + 'composio.triggers.heading': 'المشغّلات', + 'composio.triggers.listenFrom': 'الاستماع للأحداث من', + 'composio.triggers.loadError': 'تعذّر تحميل المشغّلات', + 'composio.triggers.needsConfiguration': 'يحتاج إلى إعداد', + 'composio.triggers.noneAvailable': 'لا توجد مشغّلات متاحة حاليًا لـ', + 'conversations.taskKanban.moveLeft': 'نقل لليسار', + 'conversations.taskKanban.moveRight': 'نقل لليمين', + 'conversations.taskKanban.title': 'المهام', + 'conversations.taskKanban.approval.default': 'التقصير', + 'conversations.taskKanban.approval.notRequired': 'غير مطلوب', + 'conversations.taskKanban.approval.notRequiredBadge': 'عدم الموافقة', + 'conversations.taskKanban.approval.required': 'المطلوب', + 'conversations.taskKanban.approval.requiredBadge': 'الموافقة', + 'conversations.taskKanban.approval.requiredBeforeExecution': 'مطلوب قبل الإعدام', + 'conversations.taskKanban.briefButton': 'موجز', + 'conversations.taskKanban.briefTitle': 'موجز', + 'conversations.taskKanban.closeBrief': 'موجز المهام', + 'conversations.taskKanban.field.acceptanceCriteria': 'معايير القبول', + 'conversations.taskKanban.field.allowedTools': 'الأدوات المسموح بها', + 'conversations.taskKanban.field.approval': 'الموافقة', + 'conversations.taskKanban.field.assignedAgent': 'وكيل موقع', + 'conversations.taskKanban.field.blocker': 'Blocker', + 'conversations.taskKanban.field.evidence': 'الأدلة', + 'conversations.taskKanban.field.notes': 'الحواشي', + 'conversations.taskKanban.field.objective': 'الهدف', + 'conversations.taskKanban.field.plan': 'الخطة', + 'conversations.taskKanban.field.status': 'الحالة', + 'conversations.taskKanban.field.title': 'العنوان', + 'conversations.taskKanban.saveChanges': 'التغييرات', + 'conversations.taskKanban.deleteCard': 'Delete', + 'conversations.taskKanban.updateFailed': 'ولم يتمكن من استكمال المهمة؛ ولم يتم توفير التغييرات.', + 'conversations.toolTimeline.turn': 'دور', + 'conversations.toolTimeline.workerThread': 'محادثة عامل', + 'daemon.serviceBlockingGate.body': 'المحتوى', + 'daemon.serviceBlockingGate.downloadHint': 'تلميح التنزيل', + 'daemon.serviceBlockingGate.downloadLatest': 'تنزيل أحدث إصدار', + 'daemon.serviceBlockingGate.retryCore': 'إعادة محاولة Core', + 'daemon.serviceBlockingGate.retryFailed': + 'فشلت إعادة المحاولة. نزّل أحدث إصدار للتطبيق وحاول مرة أخرى.', + 'daemon.serviceBlockingGate.retrying': 'جارٍ إعادة المحاولة...', + 'daemon.serviceBlockingGate.title': 'نواة OpenHuman غير متاحة', + 'home.banners.discordSubtitle': 'وصف Discord', + 'home.banners.discordTitle': 'انضم إلى Discord', + 'home.banners.earlyBirdDismiss': 'إغلاق لافتة المبكر', + 'home.banners.earlyBirdFirstSub': 'أول اشتراك.', + 'home.banners.earlyBirdOn': 'عرض المبكر نشط', + 'home.banners.earlyBirdTitle': 'أول 1,000 مستخدم يحصلون على خصم 60٪.', + 'home.banners.earlyBirdUseCode': 'استخدم كود المبكر', + 'home.banners.getSubscription': 'احصل على اشتراك', + 'home.banners.promoCreditsBody': 'وصف رصيد العرض', + 'home.banners.promoCreditsTitle': '{amount}', + 'home.banners.promoCreditsUsage': 'استخدام رصيد العرض', + 'intelligence.memoryChunk.detail.chunk': 'جزء', + 'intelligence.memoryChunk.detail.copyChunkId': 'نسخ معرف الجزء', + 'intelligence.memoryChunk.detail.embeddingInfo': 'bge-m3 1024dim', + 'intelligence.memoryChunk.detail.noEmbedding': 'لا يوجد تضمين', + 'intelligence.memoryChunk.letterhead.from': 'من', + 'intelligence.memoryChunk.letterhead.to': 'إلى', + 'intelligence.memoryChunk.mentioned.chunkOne': 'جزء واحد', + 'intelligence.memoryChunk.mentioned.chunkOther': '{count} أجزاء', + 'intelligence.memoryChunk.mentioned.heading': 'م ذ ك و ر', + 'intelligence.memoryChunk.scoreBars.ariaScore': 'نتيجة {name} {pct} بالمئة', + 'intelligence.memoryChunk.scoreBars.atThreshold': 'عند {threshold}', + 'intelligence.memoryChunk.scoreBars.dropped': 'مُسقَط', + 'intelligence.memoryChunk.scoreBars.heading': 'س ب ب ا ل ح ف ظ', + 'intelligence.memoryChunk.scoreBars.kept': 'محفوظ', + 'intelligence.diagram.title': 'مخطط البنية', + 'intelligence.diagram.description': 'أحدث مخرجات بنية محلية من نقطة نهاية المخططات المُهيأة.', + 'intelligence.diagram.refresh': 'Refresh', + 'intelligence.diagram.refreshAria': 'تحديث المخطط', + 'intelligence.diagram.emptyTitle': 'لا يوجد مخطط بعد', + 'intelligence.diagram.emptyDescription': + 'أنشئ مخطط بنية من المنسق وسيتجدد هذا اللوح تلقائياً من نقطة النهاية المحلية المُهيأة.', + 'intelligence.diagram.skillInstallCommand': 'npx skills add yizhiyanhua-ai/fireworks-tech-graph', + 'intelligence.diagram.promptExample': 'أنشئ مخطط بنية للسرب الحالي بأسلوب المحطة الداكنة', + 'intelligence.diagram.imageAlt': 'أحدث مخطط بنية OpenHuman المُولَّد', + 'intelligence.diagram.refreshesEvery': 'يتجدد كل {seconds} ثانية', + 'intelligence.memoryText.entityTypePrefix': 'نوع الكيان', + 'intelligence.screenDebug.active': 'نشط', + 'intelligence.screenDebug.app': 'التطبيق', + 'intelligence.screenDebug.bounds': 'الحدود', + 'intelligence.screenDebug.captureAlt': 'نتيجة اختبار التقاط', + 'intelligence.screenDebug.captureFailed': 'فشل', + 'intelligence.screenDebug.captureSuccess': 'نجاح', + 'intelligence.screenDebug.captureTest': 'اختبار الالتقاط', + 'intelligence.screenDebug.capturing': 'جارٍ الالتقاط', + 'intelligence.screenDebug.frames': 'الإطارات', + 'intelligence.screenDebug.idle': 'خامل', + 'intelligence.screenDebug.lastApp': 'آخر تطبيق', + 'intelligence.screenDebug.mode': 'الوضع', + 'intelligence.screenDebug.permAccessibility': 'إذن إمكانية الوصول', + 'intelligence.screenDebug.permInput': 'إذن الإدخال', + 'intelligence.screenDebug.permScreen': 'إمكانية الوصول', + 'intelligence.screenDebug.permissions': 'الأذونات', + 'intelligence.screenDebug.platformNotSupported': 'المنصة غير مدعومة', + 'intelligence.screenDebug.recentVisionSummaries': 'ملخصات الرؤية الأخيرة', + 'intelligence.screenDebug.session': 'الجلسة', + 'intelligence.screenDebug.size': 'الحجم', + 'intelligence.screenDebug.status': 'الحالة', + 'intelligence.screenDebug.testCapture': 'اختبار الالتقاط', + 'intelligence.screenDebug.time': 'الوقت', + 'intelligence.screenDebug.title': 'العنوان', + 'intelligence.screenDebug.unknown': 'غير معروف', + 'intelligence.screenDebug.visionQueue': 'قائمة انتظار الرؤية', + 'intelligence.screenDebug.visionState': 'حالة الرؤية', + 'intelligence.tasks.activeBoardOne': 'لوحة نشطة واحدة عبر المحادثات', + 'intelligence.tasks.activeBoardOther': '{count} لوحات نشطة عبر المحادثات', + 'intelligence.tasks.empty': 'لا توجد لوحات مهام للوكيل بعد', + 'intelligence.tasks.emptyHint': 'تلميح الفراغ', + 'intelligence.tasks.failedToLoad': 'فشل التحميل', + 'intelligence.tasks.live': 'مباشر', + 'intelligence.tasks.loadingBoards': 'جارٍ تحميل لوحات المهام…', + 'intelligence.tasks.threadPrefix': 'المحادثة {thread}', + 'intelligence.tasks.subtitle': 'مهمتك ومجالس عمل العملاء عبر مكان العمل', + 'intelligence.tasks.newTask': 'المهمة الجديدة', + 'intelligence.tasks.personalBoardTitle': 'عملاء', + 'intelligence.tasks.personalEmpty': 'لا مهام شخصية حتى الآن', + 'intelligence.tasks.composer.title': 'المهمة الجديدة', + 'intelligence.tasks.composer.titleLabel': 'العنوان', + 'intelligence.tasks.composer.titlePlaceholder': 'ماذا يجب أن نفعل؟', + 'intelligence.tasks.composer.statusLabel': 'الحالة', + 'intelligence.tasks.composer.attachLabel': 'مواكبة المحادثة', + 'intelligence.tasks.composer.attachNone': 'شخصية (لا محادثة)', + 'intelligence.tasks.composer.objectiveLabel': 'الهدف', + 'intelligence.tasks.composer.objectivePlaceholder': 'اختياري - النتيجة المنشودة', + 'intelligence.tasks.composer.notesLabel': 'الحواشي', + 'intelligence.tasks.composer.notesPlaceholder': 'الملاحظات الاختيارية', + 'intelligence.tasks.composer.create': 'إنشاء مهمة', + 'intelligence.tasks.composer.creating': 'خلق...', + 'intelligence.tasks.composer.createFailed': 'لا يمكن خلق المهمة', + 'notifications.card.dismiss': 'إغلاق الإشعار', + 'notifications.card.importanceTitle': 'الأهمية: {pct}%', + 'notifications.center.empty': 'لا توجد إشعارات بعد', + 'notifications.center.emptyHint': 'تلميح الفراغ', + 'notifications.center.filterAll': 'تصفية الكل', + 'notifications.center.markAllRead': 'تحديد الكل كمقروء', + 'notifications.center.title': 'الإشعارات', + 'oauth.button.connecting': 'جارٍ الاتصال...', + 'oauth.button.loopbackTimeout': + 'انتهت مهلة تسجيل الدخول — لم يكتمل المتصفح إعادة توجيه OAuth. يرجى المحاولة مرة أخرى.', + 'oauth.login.continueWith': 'المتابعة مع', + 'onboarding.contextGathering.buildingDesc': 'وصف البناء', + 'onboarding.contextGathering.buildingProfile': 'جارٍ بناء ملفك الشخصي...', + 'onboarding.contextGathering.continueToChat': 'المتابعة إلى المحادثة', + 'onboarding.contextGathering.coreAlive': 'النواة متاحة — قد يستغرق التشغيل الأول دقيقة.', + 'onboarding.contextGathering.coreAliveProbing': 'يجري التحقق من اتصال النواة…', + 'onboarding.contextGathering.coreUnreachable': + 'النواة لا تستجيب. يمكنك المتابعة والمحاولة لاحقًا.', + 'onboarding.contextGathering.errorDesc': + 'تعذّر إنشاء ملفك الكامل الآن، لكن لا بأس — يمكنك المتابعة وسيُبنى ملفك مع الوقت.', + 'onboarding.contextGathering.stillWorkingDesc': + 'قد يستغرق التشغيل الأول 30–60 ثانية أثناء تهيئة نموذجك المحلي والأدوات. يمكنك المتابعة إلى المحادثة في أي وقت — يستمر بناء الملف الشخصي في الخلفية.', + 'onboarding.contextGathering.stillWorkingTitle': 'لا يزال العمل جاريًا على ملفك الشخصي…', + 'onboarding.contextGathering.title': 'جمع السياق', + 'openhuman.team_list_teams': 'قائمة الفرق', + 'overlay.ariaAttention': 'رسالة انتباه', + 'overlay.ariaCompanion': 'الرفيق نشط', + 'overlay.ariaOrb': 'تراكب OpenHuman', + 'overlay.ariaVoiceActive': 'إدخال الصوت نشط', + 'overlay.companion.error': 'خطأ', + 'overlay.companion.listening': 'يستمع…', + 'overlay.companion.pointing': 'يشير…', + 'overlay.companion.speaking': 'يتحدث…', + 'overlay.companion.thinking': 'يفكر…', + 'overlay.orbTitle': 'اسحب للتحريك · انقر مرتين لإعادة الضبط', + 'pages.settings.account.connections': 'الاتصالات', + 'pages.settings.account.connectionsDesc': 'وصف الاتصالات', + 'pages.settings.account.migration': 'استيراد من مساعد آخر', + 'pages.settings.account.migrationDesc': + 'انقل الذاكرة والملاحظات من OpenClaw (وقريبًا Hermes) إلى مساحة العمل هذه.', + 'pages.settings.account.privacy': 'الخصوصية', + 'pages.settings.account.privacyDesc': 'وصف الخصوصية', + 'pages.settings.account.recoveryPhrase': 'عبارة الاسترداد', + 'pages.settings.account.recoveryPhraseDesc': 'وصف عبارة الاسترداد', + 'pages.settings.account.team': 'الفريق', + 'pages.settings.account.teamDesc': 'وصف الفريق', + 'pages.settings.accountSection.description': + 'عبارة الاسترداد والفريق والاتصالات وإعدادات الخصوصية.', + 'pages.settings.accountSection.title': 'الحساب', + 'pages.settings.ai.llm': 'LLM', + 'pages.settings.ai.llmDesc': 'وصف LLM', + 'pages.settings.ai.voice': 'الصوت', + 'pages.settings.ai.voiceDesc': 'وصف الصوت', + 'pages.settings.aiSection.description': 'مزودو نماذج اللغة وOllama المحلي والصوت (STT / TTS).', + 'pages.settings.aiSection.title': 'الذكاء الاصطناعي', + 'pages.settings.composioSection.title': 'Composio', + 'pages.settings.composioSection.description': + 'التوجيه والمشغلات وسجل عمليات التكامل المدعومة بواسطة Composio.', + 'settings.developerMenu.composio.title': 'Composio', + 'settings.developerMenu.composio.desc': 'وضع التوجيه ومشغلات التكامل وأرشيف محفوظات التشغيل.', + 'pages.settings.features.desktopCompanion': 'الرفيق المكتبي', + 'pages.settings.features.desktopCompanionDesc': + 'مساعد صوتي يدرك الشاشة — يستمع ويرى ويتحدث ويشير', + 'pages.settings.features.messagingChannels': 'قنوات المراسلة', + 'pages.settings.features.messagingChannelsDesc': 'وصف قنوات المراسلة', + 'pages.settings.features.notifications': 'الإشعارات', + 'pages.settings.features.notificationsDesc': 'وصف الإشعارات', + 'pages.settings.features.screenAwareness': 'وعي الشاشة', + 'pages.settings.features.screenAwarenessDesc': 'وصف وعي الشاشة', + 'pages.settings.features.tools': 'الأدوات', + 'pages.settings.features.toolsDesc': 'وصف الأدوات', + 'pages.settings.featuresSection.description': 'وعي الشاشة والمراسلة والأدوات.', + 'pages.settings.featuresSection.title': 'الميزات', + 'privacy.dataKind.credentials': 'بيانات الاعتماد', + 'privacy.dataKind.derived': 'مشتقة', + 'privacy.dataKind.diagnostics': 'التشخيص', + 'privacy.dataKind.metadata': 'البيانات الوصفية', + 'privacy.dataKind.raw': 'خام', + 'privacy.whatLeaves.link.label': 'ما الذي يغادر جهازي؟', + 'rewards.community.achievementsUnlocked': 'تم فتح {unlocked} من {total} إنجازات', + 'rewards.community.connectDiscord': 'ربط Discord', + 'rewards.community.cumulativeTokens': 'الرموز التراكمية', + 'rewards.community.currentStreak': 'السلسلة الحالية', + 'rewards.community.discordLinkedNotInGuild': 'Discord مرتبط لكن ليس في السيرفر', + 'rewards.community.discordMember': 'انضممت إلى الخادم', + 'rewards.community.discordNotLinked': 'Discord غير مرتبط', + 'rewards.community.discordServer': 'سيرفر Discord', + 'rewards.community.discordStatusUnavailable': 'حالة Discord غير متاحة', + 'rewards.community.discordWaiting': 'في انتظار Discord', + 'rewards.community.heroSubtitle': 'عنوان فرعي للبطل', + 'rewards.community.heroTitle': 'عنوان البطل', + 'rewards.community.joinDiscord': 'انضم إلى Discord', + 'rewards.community.loadingRewards': 'جارٍ تحميل المكافآت…', + 'rewards.community.locked': 'مفتوح', + 'rewards.community.retrying': 'جارٍ إعادة المحاولة…', + 'rewards.community.rolesAndRewards': 'الأدوار والمكافآت', + 'rewards.community.streakDays': '{n}', + 'rewards.community.syncPending': 'مزامنة المكافآت معلقة', + 'rewards.community.syncPendingDesc': 'وصف انتظار المزامنة', + 'rewards.community.syncUnavailable': 'المزامنة غير متاحة', + 'rewards.community.tryAgain': 'جارٍ إعادة المحاولة…', + 'rewards.community.unknown': 'غير معروف', + 'rewards.community.unlocked': 'مفتوح', + 'rewards.community.yourProgress': 'تقدمك', + 'rewards.coupon.colCode': 'الرمز', + 'rewards.coupon.colRedeemed': 'مُستردّ', + 'rewards.coupon.colReward': 'المكافأة', + 'rewards.coupon.colStatus': 'الحالة', + 'rewards.coupon.loadingHistory': 'جارٍ تحميل سجل المكافآت…', + 'rewards.coupon.noCodes': 'لم يتم استبدال أي رموز مكافآت بعد.', + 'rewards.coupon.pending': 'معلّق', + 'rewards.coupon.placeholder': 'رمز القسيمة', + 'rewards.coupon.promoCredits': 'رصيد عرض ترويجي', + 'rewards.coupon.recentRedemptions': 'عمليات الاسترداد الأخيرة', + 'rewards.coupon.redeemAccepted': 'تم قبول {code}. سيتم فتح {amount} بعد إكمال الإجراء المطلوب.', + 'rewards.coupon.redeemButton': 'استبدال الرمز', + 'rewards.coupon.redeemSuccess': 'تم استبدال {code}. تمت إضافة {amount} إلى رصيدك.', + 'rewards.coupon.redeemedCodes': 'الرموز المستردة', + 'rewards.coupon.redeeming': 'جارٍ الاسترداد...', + 'rewards.coupon.statusApplied': 'مُطبَّق', + 'rewards.coupon.statusPendingAction': 'بانتظار إجراء', + 'rewards.coupon.statusRedeemed': 'تم الاستبدال', + 'rewards.coupon.subtitle': 'العنوان الفرعي', + 'rewards.coupon.title': 'استرداد رمز قسيمة', + 'rewards.referralSection.activity': 'نشاط الإحالة', + 'rewards.referralSection.apply': 'جارٍ التطبيق…', + 'rewards.referralSection.applying': 'جارٍ التطبيق…', + 'rewards.referralSection.colReferredUser': 'المستخدم المُحال', + 'rewards.referralSection.colReward': 'المكافأة', + 'rewards.referralSection.colStatus': 'الحالة', + 'rewards.referralSection.colUpdated': 'المحدَّث', + 'rewards.referralSection.completed': 'مكتمل', + 'rewards.referralSection.copyCode': 'نسخ الرمز', + 'rewards.referralSection.copyFailed': 'فشل النسخ', + 'rewards.referralSection.haveCode': 'هل لديك رمز إحالة؟', + 'rewards.referralSection.haveCodeDesc': 'وصف امتلاك الرمز', + 'rewards.referralSection.linked': 'مرتبط', + 'rewards.referralSection.linkedCode': '(الرمز {code})', + 'rewards.referralSection.loading': 'جارٍ تحميل برنامج الإحالة…', + 'rewards.referralSection.retry': 'أعد المحاولة', + 'rewards.referralSection.noReferrals': 'لا توجد إحالات', + 'rewards.referralSection.pendingReferrals': 'الإحالات المعلقة', + 'rewards.referralSection.placeholder': 'رمز الإحالة', + 'rewards.referralSection.share': 'مشاركة', + 'rewards.referralSection.statusCompleted': 'الحالة: مكتمل', + 'rewards.referralSection.statusExpired': 'الحالة: منتهي الصلاحية', + 'rewards.referralSection.statusJoined': 'الحالة: انضم', + 'rewards.referralSection.subtitle': 'العنوان الفرعي', + 'rewards.referralSection.title': 'ادعُ أصدقاء واكسب رصيدًا', + 'rewards.referralSection.totalEarned': 'إجمالي المكتسب', + 'rewards.referralSection.yourCode': 'رمزك', + 'settings.ai.addCloudProvider': 'إضافة مزود سحابي', + 'settings.ai.addProvider': 'جارٍ الحفظ…', + 'settings.ai.apiKeyFieldLabel': 'تسمية حقل مفتاح API', + 'settings.ai.apiKeyRequired': 'يرجى لصق مفتاح API للمتابعة.', + 'settings.ai.apiKeyStoredEncrypted': 'مفتاح API محفوظ مشفّرًا', + 'settings.ai.apiKeysEncrypted': 'Xqx0xx', + 'settings.ai.clearStoredKey': 'مسح المفتاح المحفوظ', + 'settings.ai.connectProvider': 'ربط مزود', + 'settings.ai.customRouting': 'توجيه مخصص', + 'settings.ai.defaultResolvesTo': 'الافتراضي يُحل إلى', + 'settings.ai.discard': 'تجاهل', + 'settings.ai.editProvider': 'تعديل المزود', + 'settings.ai.llmProviders': 'مزودو LLM', + 'settings.ai.llmProvidersDesc': 'وصف مزودي LLM', + 'settings.ai.localOllama': 'محلي (Ollama)', + 'settings.ai.modelLabel': 'النموذج', + 'settings.ai.noCustomProviders': 'لا يوجد مزودون مخصصون', + 'settings.ai.openAiCompat.authHeaderExample': 'التفويض: الحامل <مفتاحك>', + 'settings.ai.openAiCompat.authHeaderLabel': 'رأس المصادقة', + 'settings.ai.openAiCompat.baseUrlLabel': 'القاعدة URL', + 'settings.ai.openAiCompat.baseUrlUnavailable': 'غير متاح', + 'settings.ai.openAiCompat.clearKey': 'مسح المفتاح', + 'settings.ai.openAiCompat.description': + 'توجيه العبوات المحلية في هذا الخادم / v1 إلى الطريق عبر مقدمي الخدمات المشكلين أدناه. التوثيق يستخدم مفتاحاً مستقراً وضعته هنا، وليس حامل اللب الداخلي للطلب.', + 'settings.ai.openAiCompat.keyConfigured': 'تم تكوين المفتاح', + 'settings.ai.openAiCompat.keyRequired': 'المفتاح مطلوب', + 'settings.ai.openAiCompat.rotateKey': 'مفتاح التدوير', + 'settings.ai.openAiCompat.setKey': 'مفتاح التعيين', + 'settings.ai.openAiCompat.title': 'OpenAI نقطة النهاية المتوافقة', + 'settings.ai.providerLabel': 'المزود', + 'skills.mcpComingSoon.title': 'MCP الخوادم', + 'skills.mcpComingSoon.description': + 'إدارة خادم MCP قادمة قريباً. ستكون هذه التبويبة المكان المخصص لاكتشاف خوادم MCP وتوصيلها ومراقبتها.', + 'settings.ai.routing': 'التوجيه', + 'settings.ai.routingCustom': 'توجيه مخصص', + 'settings.ai.routingDefault': 'افتراضي', + 'settings.ai.routingDesc': 'وصف التوجيه', + 'settings.ai.saveChanges': 'جارٍ الحفظ…', + 'settings.ai.saving': 'جارٍ الحفظ…', + 'settings.ai.unsavedChange': 'تغيير غير محفوظ', + 'settings.ai.unsavedChanges': 'تغييرات غير محفوظة', + 'settings.ai.workloadGroupBackground': 'مجموعة عبء العمل الخلفي', + 'settings.ai.workloadGroupChat': 'مجموعة عبء عمل المحادثة', + 'settings.ai.disconnectProvider': 'قطع الاتصال {label}', + 'settings.ai.connectProviderLabel': 'الاتصال {label}', + 'settings.ai.defaultLocalEndpoint': 'http://localhost:11434/v1', + 'settings.ai.endpointUrlLabel': 'نقطة النهاية URL', + 'settings.ai.localRuntimeHelper': + 'حيث يمكن الوصول إلى {label}. الإعداد الافتراضي هو المضيف المحلي؛ وجّه هذا إلى مضيف بعيد (مثلًا http://10.0.0.4:11434/v1) لاستخدام نسخة مشتركة.', + 'settings.ai.endpointUrlRequired': 'نقطة النهاية URL مطلوبة.', + 'settings.ai.endpointProtocolRequired': 'يجب أن تبدأ نقطة النهاية بـ http:// أو https://.', + 'settings.ai.connectProviderDialog': 'الاتصال {label}', + 'settings.ai.or': 'أو', + 'settings.ai.openRouterOauthDescription': + 'وقع مع OpenRouter وإستيراد مفتاح ×xxxxx متحكم به مستخدماً', + 'settings.ai.connecting': 'جارٍ الاتصال...', + 'settings.ai.backgroundLoops': 'حلقات الخلفية', + 'settings.ai.backgroundLoopsDesc': + 'شاهدْ ما يَعْملُ بدون رسالةِ دردشةِ، يَتوقّفُ عملَ نبضات القلب، ويَتفحصُ مؤخراً دفترِ دفاترِ الإئتمانِ.', + 'settings.ai.heartbeatControls': 'التحكم في نبضات القلب', + 'settings.ai.heartbeatControlsDesc': + 'تعطل ويؤدي التمكين إلى بدء الحلقة؛ ويؤدي إلى إجهاض المهمة الجارية.', + 'settings.ai.heartbeatLoop': 'حلقة نبضات القلب', + 'settings.ai.heartbeatLoopDesc': 'الجدول الزمني الرئيسي للمخطط + الإستنتاجات الخفية الاختيارية', + 'settings.ai.subconsciousInference': 'الاستدلال اللاواعي', + 'settings.ai.subconsciousInferenceDesc': 'يُجري تقييماً مُدعماً بنموذج (Xqx0x) على دقات القلب', + 'settings.ai.calendarMeetingChecks': 'يتحقق اجتماع التقويم', + 'settings.ai.calendarMeetingChecksDesc': + '(د) قائمة بالأحداث التقويمية للوصلات الناشطة من طراز Xqx0xx Calendar.', + 'settings.ai.calendarCap': 'غطاء التقويم', + 'settings.ai.connectionsPerTick': 'xxxxxxxxxxxxx', + 'settings.ai.meetingLookahead': 'نظرة أمامية للاجتماع', + 'settings.ai.minutesShort': '{count} دقيقة', + 'settings.ai.reminderLookahead': 'نظرة أمامية للتذكير', + 'settings.ai.cronReminderChecks': 'التحقق من تذكير Cron', + 'settings.ai.cronReminderChecksDesc': + 'وقد مكّنت الفحوصات من توفير فرص عمل للتذكير بالبنود المقبلة.', + 'settings.ai.relevantNotificationChecks': 'عمليات التحقق من الإشعارات ذات الصلة', + 'settings.ai.relevantNotificationChecksDesc': + ':: تشجيع الإخطارات المحلية العاجلة إلى تنبيهات استباقية.', + 'settings.ai.externalDelivery': 'التسليم الخارجي', + 'settings.ai.externalDeliveryDesc': 'دعونا نرسل رسائل استباقية إلى القنوات الخارجية.', + 'settings.ai.interval': 'الفاصل الزمني', + 'settings.ai.running': 'قيد التشغيل...', + 'settings.ai.plannerTickNow': 'علامة المخطط الآن', + 'settings.ai.loadingHeartbeatControls': 'جارٍ تحميل عناصر التحكم في نبضات القلب...', + 'settings.ai.heartbeatControlsUnavailable': 'عناصر التحكم في نبضات القلب غير متاحة.', + 'settings.ai.loopMap': 'خريطة حلقة', + 'settings.ai.plannerSummary': + 'المخطط: {sourceEvents} أحداث المصدر، {sent} تم إرسالها، {deduped} تم حذفها.', + 'settings.ai.routeLabel': 'المسار: {route}', + 'settings.ai.on': 'على', + 'settings.ai.off': 'إيقاف', + 'settings.ai.recentUsageLedger': 'دفتر أستاذ الاستخدام الأخير', + 'settings.ai.recentUsageLedgerDesc': + 'وتكشف الصفوف الخلفية ×xxxxxxxxxxx اليوم؛ وتحتاج بطاقات المصدر إلى دعم احتياطي.', + 'settings.ai.latestSpend': 'آخر إنفاق: {amount} في {time} ({action})', + 'settings.ai.topActions': 'أهم الإجراءات', + 'settings.ai.noSpendRows': 'لم يتم تحميل صفوف إنفاق.', + 'settings.ai.topHours': 'أعلى الساعات', + 'settings.ai.noHourlySpend': 'لا يوجد إنفاق بالساعة حتى الآن.', + 'settings.ai.openhumanDefault': 'OpenHuman (افتراضي)', + 'settings.ai.localModelResolved': 'Xqx1xxxxxx', + 'settings.ai.customRoutingForWorkload': 'التوجيه المخصص لـ {label}', + 'settings.ai.loadingModels': 'جارٍ تحميل النماذج...', + 'settings.ai.enterModelIdManually': 'أو أدخل معرف النموذج يدويًا:', + 'settings.ai.modelIdPlaceholderForProvider': '{slug} معرف النموذج', + 'settings.ai.modelIdPlaceholder': 'model-id', + 'settings.ai.selectModel': 'حدد نموذجًا...', + 'settings.ai.temperatureOverride': 'تجاوز درجة الحرارة', + 'settings.ai.temperatureOverrideSlider': 'تجاوز درجة الحرارة (شريط التمرير)', + 'settings.ai.temperatureOverrideValue': 'تجاوز درجة الحرارة (القيمة)', + 'settings.ai.temperatureOverrideDesc': + 'أقل = أكثر تحديدا. إتركْ غير مُمْكَنَّلَ لإسْتِعْمال قَبْل المُقدّمِ.', + 'settings.ai.testFailed': 'فشل الاختبار', + 'settings.ai.testingModel': 'نموذج الاختبار...', + 'settings.ai.modelResponse': 'استجابة النموذج', + 'settings.ai.providerWithValue': 'الموفر: {value}', + 'settings.ai.noneDash': '-', + 'settings.ai.promptHelloWorld': 'موجه: مرحبًا بالعالم', + 'settings.ai.startedAt': 'البداية: {value}', + 'settings.ai.waitingForModelResponse': 'في انتظار الاستجابة من النموذج المحدد...', + 'settings.ai.response': 'الاستجابة', + 'settings.ai.testing': 'جارٍ الاختبار...', + 'settings.ai.test': 'اختبار', + 'settings.ai.slugMissingError': 'أدخل اسم الموفر لإنشاء سبيكة ثابتة.', + 'settings.ai.slugInUseError': 'اسم الموفر هذا قيد الاستخدام بالفعل.', + 'settings.ai.slugReservedError': 'اختر اسم موفر مختلف.', + 'settings.ai.providerNamePlaceholder': 'موفر الخدمة الخاص بي', + 'settings.ai.slugLabel': 'الارتباط الثابت:', + 'settings.ai.openAiUrlLabel': 'Xqx1xxxxxxxxxxx', + 'settings.ai.openAiUrlPlaceholder': 'https://api.openai.com/v1', + 'settings.ai.keepExistingKeyPlaceholder': 'اتركه فارغًا للاحتفاظ بالمفتاح الموجود', + 'settings.ai.reindexingMemory': 'إعادة فهرسة الذاكرة', + 'settings.ai.reindexingMemoryMessage': + 'يتم إعادة تجهيز الامتصاصات ويعاد إدراج مادة (أدوات) ذاكرة " Xqx0xxx " في إطار النموذج الحالي - يخفض التذكر العلماني إلى حين الانتهاء من ذلك. البحث عن الكلمات الرئيسية يستمر في العمل، ويستمر إعادة التفكير في الخلفية إذا أغلقت هذا.', + 'settings.ai.signInWithOpenRouter': 'قم بتسجيل الدخول باستخدام OpenRouter', + 'settings.ai.weekBudget': 'ميزانية الأسبوع', + 'settings.ai.cycleRemaining': 'الدورة المتبقية', + 'settings.ai.cycleTotalSpend': 'إجمالي إنفاق الدورة', + 'settings.ai.avgSpendRow': 'متوسط صف الإنفاق', + 'settings.ai.backgroundApiReads': 'Bg API يقرأ', + 'settings.ai.backgroundWakeups': 'تنبيهات Bg', + 'settings.ai.budgetMath': 'حسابات الميزانية', + 'settings.ai.rowsLeft': 'الصفوف المتبقية', + 'settings.ai.rowsPerFullWeekBudget': 'الصفوف لكل ميزانية أسبوع كامل', + 'settings.ai.sampleBurnRate': 'معدل حرق العينة', + 'settings.ai.projectedEmpty': 'فارغ متوقع', + 'settings.ai.apiReadsPerDollarRemaining': 'API عدد القراءات لكل دولار متبقي', + 'settings.ai.loopCallBudget': 'ميزانية المكالمة المتكررة', + 'settings.ai.heartbeatTicks': 'علامات نبضات القلب', + 'settings.ai.calendarPlannerCalls': 'يستدعي مخطط التقويم', + 'settings.ai.calendarFanoutCap': 'غطاء التوزيع الموسع للتقويم', + 'settings.ai.subconsciousModelCalls': 'يستدعي نموذج اللاوعي', + 'settings.ai.composioSyncScans': 'Composio عمليات مسح المزامنة', + 'settings.ai.totalBackgroundApiReadBudget': 'إجمالي bg API ميزانية القراءة', + 'settings.ai.memoryWorkerPolls': 'استطلاعات عاملي الذاكرة', + 'settings.ai.defaultProviderName': 'OpenHuman', + 'settings.ai.routing.managed': 'المُدارة', + 'settings.ai.routing.managedDesc': + '(Xqx0xx) سيحقق كل شيء في السحابة، ويختار أفضل نموذج للمهمة، ويرفع التكاليف إلى أقصى حد، ويحتفظ بأمن التخلف عن الدفع.', + 'settings.ai.routing.managedMsg': + 'وسيتولى Xqx0xx معالجة جميع الإفادات المتعلقة بكل عبء عمل، ويختار تلقائيا أفضل طريق للتكاليف والجودة والأمن.', + 'settings.ai.routing.useYourOwn': 'استخدم النماذج الخاصة بك', + 'settings.ai.routing.useYourOwnDesc': + 'اختيار مقدم واحد + نموذج ودفع كل عبء عمل من خلاله. وهذا أمر بسيط، ولكن يمكن أن يكون غير فعال لأن الوزن الخفيف والوزن الثقيل يتقاسمان نفس الطريق.', + 'settings.ai.routing.advanced': 'متقدم', + 'settings.ai.routing.advancedDesc': + 'اختر نماذج مختلفة لمهام مختلفة وهذا هو أفضل خيار لتحقيق أقصى قدر من التكاليف والتحكم فيها.', + 'settings.ai.routing.customDesc': + 'التمرين الجيد يعطيك أفضل تكلفة و التحكم استخدم الصفوف الواردة أدناه لتحديد حجم العمل الذي يبقى جاهزاً والذي يستخدم عجزك المشترك والذي يلصق بنموذج محدد', + 'settings.ai.routing.chatAndConversations': 'الدردشة والمحادثات', + 'settings.ai.routing.chatDesc': + 'النماذج المستخدمة أثناء التفاعل المباشر للمستعملين، والردود، والتفسير، وحلقات العملاء، والمساعدة في التدوين.', + 'settings.ai.routing.backgroundTasks': 'مهام الخلفية', + 'settings.ai.routing.bgTasksDesc': + 'النماذج المستخدمة خارج التدفق الرئيسي للمحادثات للتلخيص والقلب والتعلم والتقييم اللاوعي.', + 'settings.ai.routing.addCustomProvider': 'إضافة موفر مخصص', + 'settings.ai.globalModel.title': 'اختر نموذجًا واحدًا لكل شيء', + 'settings.ai.globalModel.desc': + 'هذا يَسْحبُ كُلّ الإطلاع خلال نموذجِ واحد. وهي أبسط، ولكنها يمكن أن تكون غير فعالة من حيث التكلفة والجودة لأن الوزن الخفيف والمهام الثقيلة ستستخدم جميعها نفس الطريق.', + 'settings.ai.globalModel.noProviders': + 'أضف أو أربط المزود أولاً ثم يمكنك توجيه كل عبء عمل من خلال نموذج واحد هنا.', + 'settings.ai.globalModel.provider': 'الموفر', + 'settings.ai.globalModel.model': 'الموديل', + 'settings.ai.globalModel.loadingModels': 'جارٍ تحميل النماذج...', + 'settings.ai.globalModel.enterModelId': 'أدخل معرف النموذج', + 'settings.ai.globalModel.appliesToAll': + 'ينطبق على نفس المزود + النموذج للدردشة والتفكير والترميز والذاكرة و نبضات القلب والتعلم و اللاوعي تم تشكيل الخلايا بشكل منفصل التغييرات تنقذ عندما تنقر', + 'settings.ai.globalModel.saving': 'جاري الحفظ...', + 'settings.ai.globalModel.saved': 'تم الحفظ', + 'settings.ai.workload.noModel': 'لم يتم تحديد نموذج', + 'settings.ai.workload.changeModel': 'تغيير النموذج', + 'settings.ai.workload.chooseModel': 'اختر النموذج', + 'settings.ai.provider.ollama': 'Ollama', + 'settings.autocomplete.appFilter.acceptSuggestion': 'قبول الاقتراح', + 'settings.autocomplete.appFilter.app': 'التطبيق', + 'settings.autocomplete.appFilter.currentSuggestion': 'الاقتراح الحالي', + 'settings.autocomplete.appFilter.contextOverride': 'تجاوز السياق (اختياري)', + 'settings.autocomplete.appFilter.debounce': 'رفض', + 'settings.autocomplete.appFilter.debugFocus': 'تصحيح التركيز', + 'settings.autocomplete.appFilter.enabled': 'ممكّن', + 'settings.autocomplete.appFilter.getSuggestion': 'الحصول على اقتراح', + 'settings.autocomplete.appFilter.lastError': 'الخطأ الأخير', + 'settings.autocomplete.appFilter.liveLogs': 'السجلات المباشرة', + 'settings.autocomplete.appFilter.model': 'النموذج', + 'settings.autocomplete.appFilter.noLogs': ') :', + 'settings.autocomplete.appFilter.phase': 'المرحلة', + 'settings.autocomplete.appFilter.platformSupported': 'النظام الأساسي المدعوم', + 'settings.autocomplete.appFilter.refreshStatus': 'جارٍ التحديث…', + 'settings.autocomplete.appFilter.refreshing': 'جارٍ التحديث…', + 'settings.autocomplete.appFilter.running': 'قيد التشغيل', + 'settings.autocomplete.appFilter.runtime': 'بيئة التشغيل', + 'settings.autocomplete.appFilter.test': 'اختبار', + 'settings.autocomplete.completionStyle.acceptedCompletion': + 'تم تخزين {count} إكمال مقبول — يُستخدم لتخصيص الاقتراحات المستقبلية.', + 'settings.autocomplete.completionStyle.acceptedCompletions': + 'تم تخزين {count} إكمالات مقبولة — تُستخدم لتخصيص الاقتراحات المستقبلية.', + 'settings.autocomplete.completionStyle.clearHistory': 'جارٍ المسح…', + 'settings.autocomplete.completionStyle.clearing': 'جارٍ المسح…', + 'settings.autocomplete.completionStyle.debounce': 'تأخير (ms)', + 'settings.autocomplete.completionStyle.enabled': 'مفعّل', + 'settings.autocomplete.completionStyle.maxChars': 'الحد الأقصى للأحرف', + 'settings.autocomplete.completionStyle.noHistory': + 'لا توجد إكمالات مقبولة بعد. اقبل الاقتراحات بـ Tab للبدء بالتخصيص.', + 'settings.autocomplete.completionStyle.overlayTtl': 'مدة ظهور التراكب (ms)', + 'settings.autocomplete.completionStyle.personalizationHistory': 'سجل التخصيص', + 'settings.autocomplete.completionStyle.styleExamples': 'أمثلة الأسلوب (مثال لكل سطر)', + 'settings.autocomplete.completionStyle.styleInstructions': 'تعليمات الأسلوب', + 'settings.autocomplete.debug.acceptedPrefix': 'المقبول: {value}', + 'settings.autocomplete.debug.acceptFailed': 'فشل قبول الاقتراح', + 'settings.autocomplete.debug.alreadyRunning': 'الإكمال التلقائي قيد التشغيل بالفعل.', + 'settings.autocomplete.debug.clearHistoryFailed': 'فشل في مسح السجل', + 'settings.autocomplete.debug.didNotStart': 'لم يبدأ الإكمال التلقائي.', + 'settings.autocomplete.debug.disabledInSettings': + 'تم تعطيل الإكمال التلقائي في الإعدادات. تمكينه وحفظه أولا.', + 'settings.autocomplete.debug.fetchSuggestionFailed': 'فشل جلب الاقتراح الحالي', + 'settings.autocomplete.debug.inspectFocusedElementFailed': 'فشل فحص العنصر الذي تم التركيز عليه', + 'settings.autocomplete.debug.loadSettingsFailed': 'فشل تحميل إعدادات الإكمال التلقائي', + 'settings.autocomplete.debug.noSuggestionApplied': 'لم يتم تطبيق أي اقتراح.', + 'settings.autocomplete.debug.noSuggestionReturned': 'لم يتم إرجاع أي اقتراح.', + 'settings.autocomplete.debug.refreshStatusFailed': 'فشل في تحديث حالة الإكمال التلقائي', + 'settings.autocomplete.debug.saveAdvancedSettingsFailed': 'فشل في حفظ الإعدادات المتقدمة', + 'settings.autocomplete.debug.startFailed': 'فشل في بدء الإكمال التلقائي', + 'settings.autocomplete.debug.stopFailed': 'فشل في إيقاف الإكمال التلقائي', + 'settings.autocomplete.debug.suggestionPrefix': 'الاقتراح: {value}', + 'settings.autocomplete.shared.none': 'لا يوجد', + 'settings.autocomplete.shared.notApplicable': 'غير متاح', + 'settings.autocomplete.shared.unknown': 'غير معروف', + 'settings.billing.autoRecharge.addAmount': 'أضف هذا المبلغ', + 'settings.billing.autoRecharge.addCard': 'إضافة بطاقة', + 'settings.billing.autoRecharge.amountHint': 'تلميح المبلغ', + 'settings.billing.autoRecharge.defaultCard': 'البطاقة الافتراضية', + 'settings.billing.autoRecharge.lastRechargeFailed': 'فشلت آخر عملية شحن', + 'settings.billing.autoRecharge.lastRecharged': 'آخر شحن', + 'settings.billing.autoRecharge.expires': 'تنتهي صلاحيته {date}', + 'settings.billing.autoRecharge.noCards': 'لا توجد بطاقات', + 'settings.billing.autoRecharge.paymentMethods': 'طرق الدفع', + 'settings.billing.autoRecharge.rechargeInProgress': 'الشحن جارٍ', + 'settings.billing.autoRecharge.spentThisWeek': '${spent} من ${limit} المستخدم هذا الأسبوع', + 'settings.billing.autoRecharge.rechargeWhen': 'شحن عندما ينخفض الرصيد عن', + 'settings.billing.autoRecharge.saveSettings': 'جارٍ الحفظ…', + 'settings.billing.autoRecharge.saving': 'جارٍ الحفظ…', + 'settings.billing.autoRecharge.setDefault': ':', + 'settings.billing.autoRecharge.subtitle': 'العنوان الفرعي', + 'settings.billing.autoRecharge.title': 'تفعيل الشحن التلقائي', + 'settings.billing.autoRecharge.toggleAriaLabel': 'تبديل الشحن التلقائي', + 'settings.billing.autoRecharge.weeklyLimit': 'حد الإنفاق الأسبوعي', + 'settings.billing.history.desc': 'الوصف', + 'settings.billing.history.empty': 'فارغ', + 'settings.billing.history.openPortal': 'فتح البوابة', + 'settings.billing.history.posted': 'مُرسَل', + 'settings.billing.history.title': 'العنوان', + 'settings.billing.inferenceBudget.cycleEnds': 'نهاية الدورة', + 'settings.billing.inferenceBudget.exhausted': 'منتهٍ', + 'settings.billing.inferenceBudget.loadError': 'خطأ في التحميل', + 'settings.billing.inferenceBudget.noBudgetDesc': 'وصف عدم وجود ميزانية', + 'settings.billing.inferenceBudget.noRecurringBudget': 'لا توجد ميزانية متكررة', + 'settings.billing.inferenceBudget.noRecurringPlanBudget': 'لا توجد ميزانية خطة متكررة', + 'settings.billing.inferenceBudget.noRecurringWeeklyDesc': + 'خطتك الحالية لا تتضمن ميزانية إسبوالية متكررة وبدلاً من ذلك، يدفع الاستخدام من الائتمانات المتاحة.', + 'settings.billing.inferenceBudget.remaining': 'المتبقي', + 'settings.billing.inferenceBudget.remainingSummary': '{remaining} / {budget} المتبقي', + 'settings.billing.inferenceBudget.spentThisCycle': 'تم إنفاق {amount} هذه الدورة', + 'settings.billing.inferenceBudget.cycleEndsOn': 'تنتهي الدورة {date}', + 'settings.billing.inferenceBudget.exhaustedDesc': + 'واستُنفد استخدام الاشتراك المشمول. تقدم الائتمانات لتستمر في استخدام "آي آي" بدون انتظار الدورة القادمة', + 'settings.billing.inferenceBudget.discountVsPayg': '{pct}% أرخص لكل مكالمة من الدفع أولاً بأول.', + 'settings.billing.inferenceBudget.cycleSpend': 'الإنفاق الدوري', + 'settings.billing.inferenceBudget.totalAmount': '{amount} الإجمالي', + 'settings.billing.inferenceBudget.inference': 'الاستدلال', + 'settings.billing.inferenceBudget.integrations': 'عمليات التكامل', + 'settings.billing.inferenceBudget.calls': '{count} المكالمات', + 'settings.billing.inferenceBudget.dailySpend': 'الإنفاق اليومي', + 'settings.billing.inferenceBudget.dailySpendPoint': '{date}: {amount}', + 'settings.billing.inferenceBudget.topModels': 'أفضل الموديلات', + 'settings.billing.inferenceBudget.noInferenceUsage': 'لا يوجد استخدام للاستدلال في هذه الدورة.', + 'settings.billing.inferenceBudget.topIntegrations': 'أهم عمليات التكامل', + 'settings.billing.inferenceBudget.noIntegrationUsage': 'لا يوجد استخدام للتكامل في هذه الدورة.', + 'settings.billing.inferenceBudget.tenHourCap': 'حد عشر ساعات', + 'settings.billing.inferenceBudget.title': 'العنوان', + 'settings.billing.inferenceBudget.unableToLoad': 'غير قادر على تحميل بيانات الاستخدام', + 'settings.billing.inferenceBudget.notAvailable': 'غير متوفر', + 'settings.billing.payAsYouGo.available': 'متاح', + 'settings.billing.payAsYouGo.chargeCustomAmount': 'جارٍ الفتح…', + 'settings.billing.payAsYouGo.chooseTopUpDesc': 'وصف اختيار الشحن', + 'settings.billing.payAsYouGo.chooseTopUpTitle': 'عنوان اختيار الشحن', + 'settings.billing.payAsYouGo.creditBalanceDesc': 'وصف رصيد الائتمان', + 'settings.billing.payAsYouGo.creditBalanceTitle': 'عنوان رصيد الائتمان', + 'settings.billing.payAsYouGo.customAmount': 'مبلغ مخصص', + 'settings.billing.payAsYouGo.enterAmount': 'أدخل المبلغ', + 'settings.billing.payAsYouGo.opening': 'جارٍ الفتح', + 'settings.billing.payAsYouGo.promotionalCredits': 'رصيد ترويجي', + 'settings.billing.payAsYouGo.topUpBalance': 'شحن الرصيد', + 'settings.billing.payAsYouGo.topUpCredits': 'شحن الرصيد', + 'settings.billing.payAsYouGo.unableToLoad': 'تعذّر تحميل الرصيد.', + 'settings.billing.subscription.annual': 'سنوي', + 'settings.billing.subscription.billedAnnually': 'يُفوتر سنويًا', + 'settings.billing.subscription.chooseSubtitle': 'عنوان فرعي للاختيار', + 'settings.billing.subscription.chooseTitle': 'عنوان الاختيار', + 'settings.billing.subscription.cryptoDesc': 'وصف العملة المشفرة', + 'settings.billing.subscription.cryptoQuestion': 'سؤال العملة المشفرة', + 'settings.billing.subscription.current': 'الحالي', + 'settings.billing.subscription.currentPlan': 'الخطة الحالية', + 'settings.billing.subscription.monthly': 'شهري', + 'settings.billing.subscription.paymentConfirmed': 'تم تأكيد الدفع', + 'settings.billing.subscription.perMonth': 'في الشهر', + 'settings.billing.subscription.popular': 'شائع', + 'settings.billing.subscription.save': '{pct}', + 'settings.billing.subscription.upgrade': 'ترقية', + 'settings.billing.subscription.waiting': 'انتظار', + 'settings.billing.subscription.waitingPayment': 'في انتظار الدفع', + 'settings.composio.apiKeyDesc': 'يتم حاليًا تخزين مفتاح Composio API على هذا الجهاز.', + 'settings.composio.apiKeyExamplePlaceholder': 'ck_live_xxxxxxxxxxxxxxxxxx', + 'settings.composio.apiKeyLabel': 'مفتاح Composio API', + 'settings.composio.apiKeyStored': 'تم تخزين مفتاح API', + 'settings.composio.apiKeyStoredPlaceholder': + '• ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●', + 'settings.composio.clearedToBackend': 'تم التبديل إلى وضع الخلفية', + 'settings.composio.confirmItem1': 'حساب على app.composio.dev مع مفتاح API', + 'settings.composio.confirmItem2': 'لإعادة ربط كل تكامل عبر حساب Composio الشخصي الخاص بك', + 'settings.composio.confirmItem3': + 'ملاحظة: مشغّلات Composio (الـ webhooks الفورية) لا تعمل في الوضع المباشر بعد — فقط استدعاءات الأدوات المتزامنة', + 'settings.composio.confirmNeedItems': 'ستحتاج إلى:', + 'settings.composio.confirmSwitch': 'أفهم، التبديل إلى المباشر', + 'settings.composio.confirmTitle': '⚠️ التبديل إلى الوضع المباشر', + 'settings.composio.confirmWarning': + 'تكاملاتك الحالية (Gmail، Slack، GitHub، إلخ المرتبطة عبر OpenHuman) لن تكون مرئية — فهي موجودة في مستأجر Composio المُدار من OpenHuman.', + 'settings.composio.intro': + 'يُدمج Composio أكثر من 250 تطبيقًا خارجيًا كأدوات يمكن للوكيل استدعاؤها. اختر كيفية توجيه هذه الاستدعاءات.', + 'settings.composio.title': 'Composio', + 'settings.composio.modeDirect': 'مباشر (استخدم مفتاح API الخاص بك)', + 'settings.composio.modeDirectDesc': + 'تذهب الاستدعاءات إلى backend.composio.dev مباشرةً. سيادي / مناسب للعمل دون اتصال. تنفيذ الأدوات يعمل بشكل متزامن؛ مشغّلات الـ webhooks الفورية لم تُوجَّه بعد في الوضع المباشر (مشكلة متابعة).', + 'settings.composio.modeManaged': 'مُدار (OpenHuman يتولى الأمر نيابةً عنك)', + 'settings.composio.modeManagedDesc': + 'يقوم OpenHuman بتمرير استدعاءات الأدوات عبر خادمنا الخلفي (موصى به). تتم وساطة المصادقة؛ لن تلصق مفتاح Composio API. الـ webhooks مُوجَّهة بالكامل.', + 'settings.composio.routingMode': 'وضع التوجيه', + 'settings.composio.saveErrorNoKey': 'فشل الحفظ. الوضع المباشر يتطلب مفتاح API غير فارغ.', + 'settings.composio.saving': 'جارٍ الحفظ…', + 'settings.composio.switching': 'جارٍ التبديل…', + 'settings.companion.title': 'رفيق سطح المكتب', + 'settings.companion.session': 'الجلسة', + 'settings.companion.activeLabel': 'نشط', + 'settings.companion.inactiveStatus': 'غير نشط', + 'settings.companion.stopping': 'إيقاف...', + 'settings.companion.stopSession': 'إيقاف الجلسة', + 'settings.companion.starting': 'البدء...', + 'settings.companion.startSession': 'بدء الجلسة', + 'settings.companion.sessionId': 'معرف الجلسة', + 'settings.companion.turns': 'يتحول إلى', + 'settings.companion.remaining': 'تكوين', + 'settings.companion.configuration': 'المتبقي', + 'settings.companion.hotkey': 'مفتاح التشغيل السريع', + 'settings.companion.activationMode': 'وضع التنشيط', + 'settings.companion.sessionTtl': 'جلسة TTL', + 'settings.companion.screenCapture': 'لقطة الشاشة', + 'settings.companion.appContext': 'سياق التطبيق', + 'settings.cron.jobs.desc': 'الوصف', + 'settings.cron.jobs.empty': 'لا توجد مهام cron أساسية.', + 'settings.cron.jobs.lastStatus': 'آخر حالة', + 'settings.cron.jobs.loading': 'جارٍ تحميل مهام cron...', + 'settings.cron.jobs.loadingRuns': 'جارٍ تحميل عمليات التشغيل', + 'settings.cron.jobs.nextRun': 'التشغيل التالي', + 'settings.cron.jobs.pause': 'إيقاف مؤقت', + 'settings.cron.jobs.paused': 'متوقف مؤقتاً', + 'settings.cron.jobs.recentRuns': 'التشغيلات الأخيرة', + 'settings.cron.jobs.removing': 'جارٍ الإزالة', + 'settings.cron.jobs.resume': 'استئناف', + 'settings.cron.jobs.runningNow': 'يعمل الآن', + 'settings.cron.jobs.saving': 'جارٍ الحفظ…', + 'settings.cron.jobs.schedule': 'الجدول', + 'settings.cron.jobs.title': 'مهام Cron الأساسية', + 'settings.cron.jobs.viewRuns': 'عرض عمليات التشغيل', + 'settings.localModel.deviceCapability.active': 'نشط', + 'settings.localModel.deviceCapability.appliedTier': 'المستوى المطبّق', + 'settings.localModel.deviceCapability.applying': 'جارٍ التطبيق', + 'settings.localModel.deviceCapability.cores': '{count}', + 'settings.localModel.deviceCapability.couldNotLoadPresets': 'تعذّر تحميل الإعدادات المسبقة', + 'settings.localModel.deviceCapability.cpu': 'CPU', + 'settings.localModel.deviceCapability.customModelIds': 'معرفات نماذج مخصصة', + 'settings.localModel.deviceCapability.detected': 'تم الكشف', + 'settings.localModel.deviceCapability.disabled': 'معطّل', + 'settings.localModel.deviceCapability.disabledDesc': 'وصف التعطيل', + 'settings.localModel.deviceCapability.downloadingModels': '(جارٍ تنزيل النماذج)', + 'settings.localModel.deviceCapability.downloadingSetupDesc': + 'جارٍ تنزيل مثبّت OllamaSetup (~2 GB) وفكّه. قد يستغرق هذا دقيقة عند التثبيت الأول.', + 'settings.localModel.deviceCapability.failedToApplyPreset': 'فشل تطبيق الإعداد المسبق', + 'settings.localModel.deviceCapability.gpu': 'GPU', + 'settings.localModel.deviceCapability.installFailed': 'فشل تثبيت Ollama', + 'settings.localModel.deviceCapability.installFailedDesc': + 'خرج المثبّت قبل أن يصبح Ollama قابلاً للاستخدام. انقر إعادة المحاولة، أو ثبّته يدويًا من ollama.com.', + 'settings.localModel.deviceCapability.installFirst': 'شغّل Ollama أولاً.', + 'settings.localModel.deviceCapability.installFirstDesc': + 'تعتمد المستويات المحلية على نقطة نهاية Ollama مُدارة خارجيًا. شغّلها بنفسك، وحمّل النماذج التي تريدها، واستمر في استخدام "معطّل (التراجع السحابي)" حتى يصبح وقت التشغيل قابلاً للوصول.', + 'settings.localModel.deviceCapability.installOllamaFirst': + 'شغّل Ollama أولاً لاستخدام هذا المستوى', + 'settings.localModel.deviceCapability.installingOllama': 'جارٍ تثبيت Ollama', + 'settings.localModel.deviceCapability.loadingDeviceInfo': 'جارٍ تحميل معلومات الجهاز', + 'settings.localModel.deviceCapability.localAiDisabled': + 'الذكاء الاصطناعي المحلي معطّل — يُستخدم الاحتياط السحابي.', + 'settings.localModel.deviceCapability.modelTier': 'مستوى النموذج', + 'settings.localModel.deviceCapability.needsOllama': 'يحتاج إلى Ollama', + 'settings.localModel.deviceCapability.notDetected': 'لم يُكتشف', + 'settings.localModel.deviceCapability.disabledLowercase': 'معطل', + 'settings.localModel.deviceCapability.presetDetails': + 'الدردشة: {chatModel} · الرؤية: {visionModel} · ذاكرة الوصول العشوائي المستهدفة: {targetRamGb} جيجابايت', + 'settings.localModel.deviceCapability.ram': 'RAM', + 'settings.localModel.deviceCapability.recommended': 'موصى به', + 'settings.localModel.deviceCapability.retryInstall': 'جارٍ إعادة المحاولة…', + 'settings.localModel.deviceCapability.retrying': 'جارٍ إعادة المحاولة…', + 'settings.localModel.deviceCapability.starting': 'جارٍ البدء…', + 'settings.localModel.download.audioPathPlaceholder': 'المسار المطلق لملف الصوت', + 'settings.localModel.download.capabilityChat': 'الدردشة', + 'settings.localModel.download.capabilityEmbedding': 'التضمين', + 'settings.localModel.download.capabilityAssets': 'أصول الإمكانات', + 'settings.localModel.download.capabilityStt': 'STT', + 'settings.localModel.download.capabilityTts': 'TTS', + 'settings.localModel.download.capabilityVision': 'الرؤية', + 'settings.localModel.download.downloading': 'جارٍ التنزيل...', + 'settings.localModel.download.embeddingDimensions': 'الأبعاد: {dimensions}', + 'settings.localModel.download.embeddingModel': 'الموديل: {modelId}', + 'settings.localModel.download.embeddingPlaceholder': 'سلسلة إدخال واحدة في كل سطر...', + 'settings.localModel.download.embeddingVectors': 'المتجهات: {count}', + 'settings.localModel.download.noThinkMode': 'بدون وضع التفكير', + 'settings.localModel.download.notAvailable': 'غير متوفر', + 'settings.localModel.download.promptPlaceholder': 'اكتب أي طلب وشغّله على النموذج المحلي...', + 'settings.localModel.download.quantizationPref': 'تفضيل التكميم', + 'settings.localModel.download.runEmbeddingTest': 'جارٍ التشغيل...', + 'settings.localModel.download.runPromptTest': 'تشغيل اختبار المُوجِّه', + 'settings.localModel.download.runSummaryTest': 'تشغيل اختبار الملخص', + 'settings.localModel.download.runTranscriptionTest': 'جارٍ التشغيل...', + 'settings.localModel.download.runTtsTest': 'جارٍ التشغيل...', + 'settings.localModel.download.runVisionTest': 'جارٍ التشغيل...', + 'settings.localModel.download.running': 'جارٍ التشغيل...', + 'settings.localModel.download.runningPrompt': 'جارٍ تشغيل الطلب', + 'settings.localModel.download.summaryHelper': + 'يستدعي `openhuman.inference_summarize` عبر Rust core', + 'settings.localModel.download.summarizePlaceholder': 'الصق النص لتلخيصه بالنموذج المحلي...', + 'settings.localModel.download.testCustomPrompt': 'اختبار طلب مخصص', + 'settings.localModel.download.testEmbeddings': 'اختبار التضمينات', + 'settings.localModel.download.testSummarization': 'اختبار التلخيص', + 'settings.localModel.download.testVisionPrompt': 'اختبار طلب الرؤية', + 'settings.localModel.download.testVoiceInput': 'اختبار إدخال الصوت (STT)', + 'settings.localModel.download.testVoiceOutput': 'اختبار إخراج الصوت (TTS)', + 'settings.localModel.download.transcript': 'النص:', + 'settings.localModel.download.ttsOutput': 'الإخراج: {outputPath}', + 'settings.localModel.download.ttsOutputPlaceholder': 'مسار WAV للإخراج (اختياري)', + 'settings.localModel.download.ttsPlaceholder': 'أدخل النص للتحويل إلى كلام...', + 'settings.localModel.download.ttsVoice': 'الصوت: {voiceId}', + 'settings.localModel.download.visionImagePlaceholder': + 'مرجع صورة واحد في كل سطر (URI للبيانات أو URL أو مسار محلي)', + 'settings.localModel.download.visionPromptPlaceholder': 'أدخل طلبًا لنموذج الرؤية...', + 'settings.localModel.status.allChecksPassed': 'اجتازت جميع الفحوصات', + 'settings.localModel.status.artifact': 'المنتج', + 'settings.localModel.status.backend': 'الخلفية', + 'settings.localModel.status.binary': 'الملف الثنائي', + 'settings.localModel.status.bootstrapResume': 'تمهيد / استئناف', + 'settings.localModel.status.checking': 'جارٍ التحقق...', + 'settings.localModel.status.checkingOllama': 'جارٍ التحقق من Ollama', + 'settings.localModel.status.contextBelowMinimumBadge': + '{contextLength} ctx - أقل من {required} دقيقة', + 'settings.localModel.status.contextBelowMinimumTitle': + 'مرفوض: الرموز المميزة لنافذة السياق {contextLength} أقل من الحد الأدنى للرمز المميز {required} الذي تتطلبه طبقة الذاكرة. سيتم إتلاف الاستدعاء عن طريق الاقتطاع الصامت.', + 'settings.localModel.status.contextOkBadge': '{contextLength} ctx ✓', + 'settings.localModel.status.contextOkTitle': + 'تتوافق الرموز المميزة لنافذة السياق {contextLength} مع الحد الأدنى لطبقة الذاكرة وهو {required} من الرموز المميزة.', + 'settings.localModel.status.contextUnknownBadge': 'ctx غير معروف', + 'settings.localModel.status.contextUnknownTitle': + 'نافذة السياق غير معروفة؛ لا يمكن التأكد من أنه يلبي الحد الأدنى لطبقة الذاكرة {required}-token.', + 'settings.localModel.status.customLocation': 'موقع مخصص', + 'settings.localModel.status.customLocationDesc': 'وصف الموقع المخصص', + 'settings.localModel.status.diagnosticsHint': + 'انقر "تشغيل التشخيصات" للتحقق من أن Ollama يعمل وأن النماذج مثبتة.', + 'settings.localModel.status.downloadingUnknown': 'جارٍ التنزيل (الحجم غير معروف)', + 'settings.localModel.status.eta': 'الوقت المتوقع', + 'settings.localModel.status.expectedModels': 'النماذج المتوقعة', + 'settings.localModel.status.expectedChat': 'الدردشة: {model}', + 'settings.localModel.status.expectedEmbedding': 'التضمين: {model}', + 'settings.localModel.status.expectedVision': 'الرؤية: {model}', + 'settings.localModel.status.externalProcess': 'العملية الخارجية', + 'settings.localModel.status.forceRebootstrap': 'فرض إعادة التهيئة', + 'settings.localModel.status.generationTps': 'سرعة التوليد TPS', + 'settings.localModel.status.hideErrorDetails': 'إخفاء تفاصيل الخطأ', + 'settings.localModel.status.installManually': 'تثبيت يدوي', + 'settings.localModel.status.installManuallyFrom': 'تثبيت يدوي من', + 'settings.localModel.status.installOllama': 'جارٍ البدء…', + 'settings.localModel.status.installedModels': 'النماذج المثبّتة', + 'settings.localModel.status.installing': 'جارٍ التثبيت...', + 'settings.localModel.status.installingOllama': 'جارٍ تثبيت بيئة Ollama...', + 'settings.localModel.status.issues': 'المشكلات', + 'settings.localModel.status.issuesFound': 'تم العثور على {count} مشكلة', + 'settings.localModel.status.lastLatency': 'آخر زمن استجابة', + 'settings.localModel.status.model': 'النموذج', + 'settings.localModel.status.notAvailable': 'غير متوفر', + 'settings.localModel.status.notFound': 'غير موجود', + 'settings.localModel.status.notRunning': 'غير قيد التشغيل', + 'settings.localModel.status.ollamaBinaryPath': 'مسار ملف Ollama الثنائي', + 'localModel.ollamaServer.helperText': 'مثال: http://192.168.1.5:11434', + 'localModel.ollamaServer.label': 'عنوان URL لخادم Ollama', + 'localModel.ollamaServer.modelCount': 'نماذج', + 'localModel.ollamaServer.placeholder': 'http://localhost:11434', + 'localModel.ollamaServer.reachable': 'قابل للوصول', + 'localModel.ollamaServer.resetButton': 'إعادة التعيين إلى الافتراضي', + 'localModel.ollamaServer.saveButton': 'حفظ', + 'localModel.ollamaServer.testButton': 'اختبار الاتصال', + 'localModel.ollamaServer.unreachable': 'غير قابل للوصول', + 'localModel.ollamaServer.validationError': + 'يجب أن يكون عنوان URL صالحاً يبدأ بـ http:// أو https://', + 'settings.localModel.status.ollamaDiagnostics': 'تشخيص Ollama', + 'settings.localModel.status.ollamaNotInstalled': 'وقت تشغيل Ollama غير متاح', + 'settings.localModel.status.ollamaNotInstalledDesc': + 'يعامل OpenHuman الآن Ollama كوقت تشغيل استدلال خارجي. شغّل خادم Ollama الخاص بك، وحمّل النماذج التي تريدها، ووجّه توجيه الأحمال إليه.', + 'settings.localModel.status.progress': 'التقدم', + 'settings.localModel.status.provider': 'المزود', + 'settings.localModel.status.retryBootstrap': 'إعادة محاولة التمهيد', + 'settings.localModel.status.runDiagnostics': 'جارٍ التحقق...', + 'settings.localModel.status.running': 'يعمل', + 'settings.localModel.status.runningExternalProcess': 'يعمل عبر عملية خارجية', + 'settings.localModel.status.runtimeStatus': 'حالة بيئة التشغيل', + 'settings.localModel.status.server': 'الخادم', + 'settings.localModel.status.setPath': 'جارٍ الضبط...', + 'settings.localModel.status.setting': 'جارٍ الضبط...', + 'settings.localModel.status.showErrorDetails': 'إخفاء تفاصيل الخطأ', + 'settings.localModel.status.showInstallErrorDetails': 'إخفاء تفاصيل الخطأ', + 'settings.localModel.status.suggestedFixes': 'الإصلاحات المقترحة', + 'settings.localModel.status.thenSetPath': 'ثم اضبط المسار', + 'settings.localModel.status.triggering': 'جارٍ التشغيل...', + 'settings.localModel.status.unavailable': 'غير متاح', + 'settings.localModel.status.working': 'جارٍ العمل...', + 'settings.developerMenu.ai.title': 'إعدادات الذكاء الاصطناعي', + 'settings.developerMenu.ai.desc': 'مزودو السحابة، ونماذج Ollama المحلية، والتوجيه لكل عبء عمل', + 'settings.developerMenu.screenAwareness.title': 'الوعي بالشاشة', + 'settings.developerMenu.screenAwareness.desc': + 'أذونات التقاط الشاشة، وسياسة المراقبة، وعناصر التحكم في الجلسة', + 'settings.developerMenu.messagingChannels.title': 'قنوات المراسلة', + 'settings.developerMenu.messagingChannels.desc': + 'تكوين أوضاع مصادقة Telegram/Discord وتوجيه القناة الافتراضي', + 'settings.developerMenu.tools.title': 'الأدوات', + 'settings.developerMenu.tools.desc': + 'تفعيل أو تعطيل الإمكانات التي يمكن لـ OpenHuman استخدامها نيابةً عنك', + 'settings.developerMenu.agentChat.title': 'دردشة الوكيل', + 'settings.developerMenu.agentChat.desc': 'اختبار محادثة الوكيل مع تجاوزات النموذج ودرجة الحرارة', + 'settings.developerMenu.devWorkflow.title': 'سير عمل المطور', + 'settings.developerMenu.devWorkflow.desc': + 'عميلة ذاتية تلتقط مشاكلك في الاكسكسكساكس وتثير العلاقات العامة في الجدول الزمني', + 'settings.developerMenu.devWorkflow.panelDesc': + 'نؤمن بعميل مطور مستقل يلتقط القضايا التي تخصك و يجلب طلبات سحب تلقائياً على جدول زمني', + 'settings.developerMenu.skillsRunner.title': 'سكايل رانر', + 'settings.developerMenu.skillsRunner.desc': + 'تشغيل أي مهارة معبأة - ملء مدخلاته وإطلاق النار على خلفية مستقلة', + 'settings.developerMenu.skillsRunner.panelDesc': + 'اختر مهارة معبأة، واملأ مدخلاتها المعلنة، وأطلق النار ونبات الخلفية. استخدم (ديف) بدلاً من ذلك إذا أردت وظيفة متكررة', + 'settings.skillsRunner.skill': 'Skill', + 'settings.skillsRunner.selectSkill': 'اختيار مهارة...', + 'settings.skillsRunner.loadingSkills': 'مهارات التعبئة', + 'settings.skillsRunner.loadingDescription': 'مُدخلات مهارة التعبئة...', + 'settings.skillsRunner.noInputs': 'هذه المهارة لا تعلن أي مدخلات', + 'settings.skillsRunner.placeholder.required': 'required', + 'settings.skillsRunner.runNow': 'اركض الآن', + 'settings.skillsRunner.starting': 'بدء...', + 'settings.skillsRunner.started': 'بدأت...', + 'settings.skillsRunner.logPath': 'لوغ:', + 'settings.skillsRunner.error.listSkills': 'فشل في تحميل المهارات:', + 'settings.skillsRunner.error.describe': 'عدم تحميل المدخلات:', + 'settings.skillsRunner.error.missingRequired': 'المفقود يتطلب مدخلات (مساهمات):', + 'settings.skillsRunner.error.run': 'لم يبدأ التشغيل:', + 'settings.skillsRunner.error.preflightGate': 'البوابة الأمامية فشلت', + 'settings.skillsRunner.schedule.heading': 'الجدول (المتكرر)', + 'settings.skillsRunner.schedule.help': + 'وفر هذه المهارة + المدخلات كعمل كرتوني متكرر. العميل سيتصل بـ "هريب" في كل مرة', + 'settings.skillsRunner.schedule.frequency': 'التردد', + 'settings.skillsRunner.schedule.every30min': 'كل 30 دقيقة', + 'settings.skillsRunner.schedule.everyHour': 'كل ساعة', + 'settings.skillsRunner.schedule.every2hours': 'كل ساعتين', + 'settings.skillsRunner.schedule.every6hours': 'كل 6 ساعات', + 'settings.skillsRunner.schedule.onceDaily': 'يوم واحد (9:00)', + 'settings.skillsRunner.schedule.save': 'الجدول الزمني', + 'settings.skillsRunner.schedule.saving': 'إنقاذ...', + 'settings.skillsRunner.schedule.saved': 'تم حفظ الجدول.', + 'settings.skillsRunner.schedule.error': 'فشل الجدول الزمني:', + 'settings.skillsRunner.schedule.loadingJobs': 'وضع الجداول الحالية...', + 'settings.skillsRunner.schedule.noJobs': 'لم يتم توفير جداول لهذه المهارة بعد', + 'settings.skillsRunner.schedule.existing': 'الوظائف المقررة لهذه المهارة:', + 'settings.skillsRunner.schedule.runNow': 'اركض', + 'settings.skillsRunner.schedule.remove': 'إزالة الألغام', + 'settings.skillsRunner.scheduleEnabled': 'Enabled', + 'settings.skillsRunner.scheduleDisabled': 'مدفوع', + 'settings.skillsRunner.scheduleToggleAria': 'الجدول الزمني الميسر', + 'settings.skillsRunner.schedule.history': 'التاريخ', + 'settings.skillsRunner.schedule.historyLoading': 'تاريخ الحب...', + 'settings.skillsRunner.schedule.historyEmpty': 'لا ركض حتى الآن لهذا الجدول الزمني', + 'settings.skillsRunner.schedule.historyNoOutput': 'لم يسجل أي ناتج', + 'settings.skillsRunner.schedule.active': 'النشاط', + 'settings.skillsRunner.schedule.lastRunLabel': 'الأخير:', + 'settings.skillsRunner.recentRuns.headingForSkill': 'عمليات حديثة لهذه المهارة', + 'settings.skillsRunner.recentRuns.headingAll': 'المهارة الأخيرة (جميعها)', + 'settings.skillsRunner.recentRuns.refresh': 'التجديد', + 'settings.skillsRunner.recentRuns.loading': '....', + 'settings.skillsRunner.recentRuns.empty': 'لا عمليات حديثة', + 'settings.skillsRunner.viewer.loading': 'سجل الشحن...', + 'settings.skillsRunner.viewer.tailing': 'يحيا الذيل', + 'settings.skillsRunner.viewer.fetching': 'جلب', + 'settings.skillsRunner.viewer.error': 'يُستعاض عن العنوان بالفشل:', + 'settings.skillsRunner.repoPicker.loading': 'مستودعات التعبئة...', + 'settings.skillsRunner.repoPicker.select': 'اختيار مستودع...', + 'settings.skillsRunner.repoPicker.empty': + 'لم تُعاد أي مستودعات Connect GitHub via xqx1x to populate this list.', + 'settings.skillsRunner.repoPicker.notConnected': + 'GitHub غير متصل عبر Composio. قم بتوصيله من خلال المهارات ← Composio أولًا.', + 'settings.skillsRunner.repoPicker.privateTag': '(خاص)', + 'settings.skillsRunner.branchPicker.needRepo': 'اختر مذكرة أولاً', + 'settings.skillsRunner.branchPicker.loading': 'فروع التعبئة...', + 'settings.skillsRunner.branchPicker.select': 'اختيار فرع...', + 'settings.devWorkflow.githubRepository': 'مخزن Xqx0xx', + 'settings.devWorkflow.loadingRepositories': 'مستودعات التعبئة...', + 'settings.devWorkflow.selectRepository': 'اختيار مستودع', + 'settings.devWorkflow.privateTag': '(خاص)', + 'settings.devWorkflow.detectingForkInfo': 'كشف المعلومات الشوكية', + 'settings.devWorkflow.forkDetected': 'الشوكة المكتشفة', + 'settings.devWorkflow.upstream': 'أعلى النهر:', + 'settings.devWorkflow.forkPrNote': 'وستُرفع معدلات الحد من الفقر ضد مستودع ما بعد الإنتاج.', + 'settings.devWorkflow.notForkNote': 'ليس شوكة وستُثار أسعار الصرف ضد هذا المستودع مباشرة.', + 'settings.devWorkflow.targetBranch': 'الفرع المستهدف', + 'settings.devWorkflow.targetBranchNote': 'ستُرفع أسعار الصرف ضد هذا الفرع', + 'settings.devWorkflow.loadingBranches': 'فروع التعبئة...', + 'settings.devWorkflow.runFrequency': 'تشغيل التردد', + 'settings.devWorkflow.runFrequencyNote': + 'كم من الأحيان يجب على الوكيل أن يفحص القضايا ويرفع الحد من الفقر', + 'settings.devWorkflow.updateConfiguration': 'تحديث النظام', + 'settings.devWorkflow.saveConfiguration': 'إنقاذ المفاوضة', + 'settings.devWorkflow.remove': 'إزالة الألغام', + 'settings.devWorkflow.saved': 'منقذة', + 'settings.devWorkflow.activeConfiguration': 'الاتحاد النشط', + 'settings.devWorkflow.activeConfigRepository': 'مستودع:', + 'settings.devWorkflow.activeConfigUpstream': 'أعلى النهر:', + 'settings.devWorkflow.activeConfigTargetBranch': 'الفرع المستهدف:', + 'settings.devWorkflow.activeConfigSchedule': 'الجدول الزمني:', + 'settings.devWorkflow.enabled': 'Enabled', + 'settings.devWorkflow.paused': 'مدفوع', + 'settings.devWorkflow.nextRun': 'الجولة التالية', + 'settings.devWorkflow.lastRun': 'آخر مرة', + 'settings.devWorkflow.runNow': 'اركض الآن', + 'settings.devWorkflow.running': 'تشغيل...', + 'settings.devWorkflow.recentRuns': 'عمليات حديثة', + 'settings.devWorkflow.cronSaveError': 'فشل في توفير التشكيلة', + 'settings.devWorkflow.lastOutput': 'الناتج الأخير', + 'settings.devWorkflow.noOutput': 'لم يسجل أي ناتج', + 'settings.devWorkflow.runningStatus': 'الوكيل يَرْكضُ - يَلتقطُ a مشكلة ويَعْملُ على a إصلاح...', + 'settings.devWorkflow.errorNotConnected': + 'اكساكسوكس ليس متصلاً يرجى ربط Xqx1xx عبر ستينغز تقدمت أولاً', + 'settings.devWorkflow.errorToolNotEnabled': + 'أداة (إكسكساكس) غير مُمكّنة من هذه المساندة. أرجو أن تطلبوا من أمينكم أن يسمح بذلك في دمج الـ (إكسكس 1 xx) (النسخة رقم 842).', + 'settings.devWorkflow.errorNotAuthenticated': 'غير موثق يرجى التوقيع في البداية.', + 'settings.devWorkflow.errorNoRepositories': 'لا توجد مستودعات لهذا الحساب', + 'settings.devWorkflow.schedule.every30min': 'كل 30 دقيقة', + 'settings.devWorkflow.schedule.everyHour': 'كل ساعة', + 'settings.devWorkflow.schedule.every2hours': 'كل ساعتين', + 'settings.devWorkflow.schedule.every6hours': 'كل 6 ساعات', + 'settings.devWorkflow.schedule.onceDaily': 'يوم واحد (9 صباحا)', + 'settings.developerMenu.cronJobs.title': 'مهام Cron', + 'settings.developerMenu.cronJobs.desc': 'عرض وتكوين المهام المجدولة لمهارات وقت التشغيل', + 'settings.developerMenu.localModelDebug.title': 'تصحيح النموذج المحلي', + 'settings.developerMenu.localModelDebug.desc': + 'إعدادات Ollama، وتنزيلات الأصول، واختبارات النموذج، والتشخيصات', + 'settings.developerMenu.webhooks.title': 'خطافات الويب', + 'settings.developerMenu.webhooks.desc': + 'فحص تسجيلات خطافات الويب وقت التشغيل وسجلات الطلبات الملتقطة', + 'settings.developerMenu.eventLog.title': 'الحدث', + 'settings.developerMenu.eventLog.desc': + 'تيار ملون مباشر لجميع العناصر والأدوات والأحداث النظامية', + 'settings.developerMenu.eventLog.allTypes': 'جميع الأنواع', + 'settings.developerMenu.eventLog.filterAgent': '(فيلتر)', + 'settings.developerMenu.eventLog.download': 'تحميل', + 'settings.developerMenu.eventLog.events': 'أحداث', + 'settings.developerMenu.eventLog.live': 'الحياة', + 'settings.developerMenu.eventLog.disconnected': 'مفصولة', + 'settings.developerMenu.eventLog.waiting': 'ننتظر الأحداث...', + 'settings.developerMenu.eventLog.notConnected': 'غير متصل بالنواة', + 'settings.developerMenu.eventLog.jumpToLatest': 'اقفز على آخر', + 'settings.developerMenu.eventLog.badge.tool': 'TOOL', + 'settings.developerMenu.eventLog.badge.agent': 'AGENT', + 'settings.developerMenu.eventLog.badge.info': 'INFO', + 'settings.developerMenu.eventLog.badge.mem': 'MEM', + 'settings.developerMenu.eventLog.badge.chan': 'CHAN', + 'settings.developerMenu.eventLog.badge.cron': 'CRON', + 'settings.developerMenu.eventLog.badge.hook': 'HOOK', + 'settings.developerMenu.eventLog.badge.warn': 'WARN', + 'settings.developerMenu.eventLog.badge.skill': 'SKILL', + 'settings.developerMenu.eventLog.badge.comp': 'COMP', + 'settings.developerMenu.eventLog.badge.mcp': 'MCP', + 'settings.developerMenu.intelligence.title': 'الذكاء', + 'settings.developerMenu.intelligence.desc': + 'مساحة عمل الذاكرة، ومحرك اللاوعي، والأحلام، والإعدادات', + 'settings.developerMenu.notificationRouting.title': 'توجيه الإشعارات', + 'settings.developerMenu.notificationRouting.desc': + 'تقييم الأهمية بالذكاء الاصطناعي وتصعيد المنسق لتنبيهات التكامل', + 'settings.developerMenu.composeioTriggers.title': 'مشغلات ComposeIO', + 'settings.developerMenu.composeioTriggers.desc': 'عرض سجل مشغلات ComposeIO والأرشيف', + 'settings.developerMenu.composioRouting.title': 'توجيه Composio (الوضع المباشر)', + 'settings.developerMenu.composioRouting.desc': + 'استخدم مفتاح Composio API الخاص بك ووجّه الاستدعاءات مباشرةً إلى backend.composio.dev', + 'settings.developerMenu.integrationTriggers.title': 'مشغلات التكامل', + 'settings.developerMenu.integrationTriggers.desc': + 'تكوين إعدادات فرز الذكاء الاصطناعي لمشغلات تكامل Composio', + 'settings.developerMenu.mcpServer.title': 'MCP الخادم', + 'settings.developerMenu.mcpServer.desc': 'تكوين عملاء MCP الخارجيين للاتصال بـ OpenHuman', + 'settings.developerMenu.autonomy.title': 'استقلالية الوكيل', + 'settings.developerMenu.autonomy.desc': 'حدود معدل إجراءات الأدوات وعتبات الأمان', + 'settings.mcpServer.title': 'Xqx0x', + 'settings.mcpServer.toolsSectionTitle': 'الأدوات المتاحة', + 'settings.mcpServer.toolsSectionDesc': + 'الأدوات التي يتم كشفها عبر خادم MCP stdio عند تشغيل mcp openhuman-core', + 'settings.mcpServer.configSectionTitle': 'تكوين العميل', + 'settings.mcpServer.configSectionDesc': 'حدد عميل MCP الخاص بك لإنشاء مقتطف التكوين الصحيح', + 'settings.mcpServer.copySnippet': 'انسخ إلى الحافظة', + 'settings.mcpServer.copied': 'تم النسخ!', + 'settings.mcpServer.openConfigFile': 'فتح ملف التكوين', + 'settings.mcpServer.binaryPathNotFound': + 'OpenHuman لم يتم العثور على الثنائي. في حالة التشغيل من المصدر، قم بالإنشاء باستخدام: cargo build --bin openhuman-core', + 'settings.mcpServer.openConfigError': 'فشل في فتح ملف التكوين', + 'settings.mcpServer.clientClaudeDesktop': 'Claude Desktop', + 'settings.mcpServer.clientCursor': 'المؤشر', + 'settings.mcpServer.clientCodex': 'Codex', + 'settings.mcpServer.clientZed': 'Zed', + 'settings.mcpServer.configFilePath': 'ملف التكوين', + 'settings.mcpServer.clientSelectorAriaLabel': 'MCP محدد العميل', + 'settings.appearance.menuDesc': 'اختر الفاتح أو الداكن أو مطابقة سمة النظام', + 'settings.agentAccess.title': 'الوكيل OS وصول', + 'settings.agentAccess.menuDesc': 'التحكم في المكان الذي يمكن فيه للوكيل أن يستخدم القذيفة', + 'settings.agentAccess.loadError': 'فشل في تحديد مواقع الدخول', + 'settings.agentAccess.saveError': 'عدم توفير أماكن الوصول', + 'settings.agentAccess.saved': 'منقذ - ينطبق على رسالتك القادمة.', + 'settings.agentAccess.desktopOnly': 'ولا توجد أماكن الوصول إلا في التطبيق المكتبي.', + 'settings.agentAccess.loading': 'التعبئة...', + 'settings.agentAccess.accessMode': 'طريقة الوصول', + 'settings.agentAccess.tier.readonly.title': 'القراءة فقط', + 'settings.agentAccess.tier.readonly.desc': + 'ويقرأ الملفات ويدير الأوامر فقط للاستكشاف - ولكن لا يكتب أبدا، أو يحرر، أو يدير أي شيء يغير الدولة.', + 'settings.agentAccess.tier.supervised.title': 'اسأل قبل التحرير', + 'settings.agentAccess.tier.supervised.desc': + 'يخلق ملفات جديدة بحرية، ولكن يطلب موافقتك قبل تحرير ملف قائم، إدارة القيادة، الوصول إلى الشبكة، أو تركيب أي شيء.', + 'settings.agentAccess.tier.full.title': 'الوصول الكامل', + 'settings.agentAccess.tier.full.desc': + 'ويدير أوامره بوصول حسابك الكامل للمستعملين - ويمكنه أن يكون مكعبا في أي مكان مسموح به، باستثناء مخازن الإبداع والنظام. الأوامر المدمرة، الوصول إلى الشبكة، والتركات لا تزال تطلب الموافقة.', + 'settings.agentAccess.defaultTag': '(عجز)', + 'settings.agentAccess.fullWarning': + 'الدخول الكامل يُديرُ الأوامرَ بوصولِ حسابِكَ الكاملِ وهو لَيسَ مُربّطَ رملَ. فقط قم بتمكينها عندما تضغطين على العميل بهذه الآلة ولا تزال الأدلة الإبداعية والنظامية مجمدة، وما زالت أعمال التدمير والشبكات والتركيب تتطلب الموافقة.', + 'settings.agentAccess.confine.label': 'مقصورة على مكان العمل', + 'settings.agentAccess.confine.desc': + 'قيّد الوكيل بدليل مساحة العمل (بالإضافة إلى أي مجلدات ممنوحة)، بصرف النظر عن وضع الوصول المحدد. عند إيقاف التشغيل، يمكنه الوصول إلى أي مكان يمكن لمستخدمك الوصول إليه — باستثناء أدلة بيانات الاعتماد والنظام المحظورة دائمًا.', + 'settings.agentAccess.requireTaskPlanApproval.label': 'الموافقة على خطة العمل المطلوبة', + 'settings.agentAccess.requireTaskPlanApproval.desc': + 'وقف أمام عميل معين يقوم بتنفيذ موجز عمل مشرف على عميل', + 'settings.agentAccess.grantedFolders': 'الملفات الممنوحة', + 'settings.agentAccess.alwaysAllow': 'الأدوات المتدنية دائما', + 'settings.agentAccess.alwaysAllowDesc': + 'الأدوات التي وضعت علامة "الطرق تسمح" في الدردشة دون أن تسأل. أزيلي واحدة ليتم دفعها مجدداً', + 'settings.agentAccess.alwaysAllowNone': 'لا أدوات متدنية دائماً حتى الآن', + 'settings.agentAccess.grantedDesc': + 'يُرجى من العميل القراءة والكتابة، بالإضافة إلى مكان العمل. وتُحجب دائماً المخازن الإبداعية (Assh و///.gnupg و/.aws, keychains) ودليل النظام (/etc, /System, C:/ xqx0xx,...) حتى داخل ملف مُنح.', + 'settings.agentAccess.noneGranted': 'لم تُمنح الملفات', + 'settings.agentAccess.readWrite': 'يصبح نصها كما يلي:', + 'settings.agentAccess.readOnly': 'القراءة فقط', + 'settings.agentAccess.remove': 'إزالة الألغام', + 'settings.agentAccess.pathPlaceholder': 'المسار المطلق للمجلد', + 'settings.agentAccess.accessLevelLabel': 'مستوى الوصول', + 'settings.agentAccess.add': 'مضاف', + 'settings.agentAccess.saving': 'إنقاذ...', + 'settings.agentAccess.changesApply': 'التغييرات تنطبق على رسالتك القادمة', + 'settings.appearance.title': 'المظهر', + 'settings.appearance.themeHeading': 'الموضوع', + 'settings.appearance.themeAria': 'الموضوع', + 'settings.appearance.modeLight': 'فاتح', + 'settings.appearance.modeLightDesc': 'أسطح ساطعة، نص داكن.', + 'settings.appearance.modeDark': 'داكنة', + 'settings.appearance.modeDarkDesc': 'الأسطح المعتمة، تكون أسهل على العيون بعد الغسق.', + 'settings.appearance.modeSystem': 'نظام المطابقة', + 'settings.appearance.modeSystemDesc': 'اتبع إعداد مظهر نظام التشغيل لديك.', + 'settings.appearance.helperText': + 'يعمل الوضع الداكن على تحويل التطبيق بأكمله - الدردشة والإعدادات واللوحات - إلى لوحة معتمة. "نظام المطابقة" يتتبع مظهر نظام التشغيل الخاص بك وتحديثاته مباشرة.', + 'settings.appearance.tabBarHeading': 'شريط علامات التبويب السفلي', + 'settings.appearance.tabBarAlwaysShowLabels': 'إظهار التسميات دائمًا', + 'settings.appearance.tabBarAlwaysShowLabelsDesc': + 'عند إيقاف التشغيل، تظهر التسميات فقط عند التمرير أو لعلامة التبويب النشطة.', + 'settings.mascot.active': 'نشط', + 'settings.mascot.characterDesc': 'وصف الشخصية', + 'settings.mascot.characterHeading': 'عنوان الشخصية', + 'settings.mascot.customGifError': + 'أدخل HTTPS .gif URL، أو الاسترجاع HTTP .gif URL، أو file:// .gif URL، أو مسار .gif المحلي.', + 'settings.mascot.customGifHeading': 'الصورة الرمزية GIF المخصصة', + 'settings.mascot.customGifLabel': 'الصورة الرمزية GIF المخصصة URL', + 'settings.mascot.customGifPlaceholder': 'https://example.com/avatar.gif', + 'settings.mascot.characterPreview': 'معاينة', + 'settings.mascot.characterStates': 'تنص على', + 'settings.mascot.characterVisemes': 'vimeses', + 'settings.mascot.colorAria': 'OpenHuman اللون', + 'settings.mascot.colorDesc': 'وصف اللون', + 'settings.mascot.colorHeading': 'عنوان اللون', + 'settings.mascot.colorBlack': 'أسود', + 'settings.mascot.colorBurgundy': 'عنابي', + 'settings.mascot.colorCustom': 'العرف', + 'settings.mascot.colorNavy': 'بحري', + 'settings.mascot.primaryColor': 'اللون الابتدائي', + 'settings.mascot.secondaryColor': 'اللون الثانوي', + 'settings.mascot.colorYellow': 'أصفر', + 'settings.mascot.libraryUnavailable': 'مكتبة OpenHuman غير متاحة', + 'settings.mascot.title': 'OpenHuman', + 'settings.mascot.loadingLibrary': 'جارٍ تحميل مكتبة OpenHuman…', + 'settings.mascot.loadDetailError': 'تعذر تحميل التميمة.', + 'settings.mascot.loadLibraryError': 'تعذر تحميل مكتبة التميمة.', + 'settings.mascot.localDefault': 'OpenHuman المحلي (افتراضي)', + 'settings.mascot.menuTitle': 'التميمة', + 'settings.mascot.menuDesc': 'اختر لون التميمة المستخدم في جميع أنحاء التطبيق', + 'settings.mascot.noCharacters': 'لا توجد شخصيات OpenHuman متاحة بعد', + 'settings.mascot.noColorVariants': 'لا توجد ألوان متاحة', + 'settings.mascot.voice.current': 'الحالي', + 'settings.mascot.voice.customDesc': + 'ابحث عن معرّفات الصوت في api.elevenlabs.io/v1/voices أو لوحة تحكم ElevenLabs الخاصة بك. يُخزَّن المعرّف فقط — يبقى مفتاح API الخاص بك على الخادم.', + 'settings.mascot.voice.customHeading': 'معرّف صوت مخصص', + 'settings.mascot.voice.customOption': 'آخر (لصق معرّف الصوت)…', + 'settings.mascot.voice.customPlaceholder': 'على سبيل المثال. 21m00Tcm4TlvDq8ikWAM', + 'settings.mascot.voice.desc': + 'اختر صوت ElevenLabs الذي تستخدمه الشخصية للردود المنطوقة. صفِّ حسب الجنس، اختر من القائمة المنسّقة، الصق معرّفاً مخصصاً، أو دع التطبيق يختار صوتاً يطابق لغة الواجهة.', + 'settings.mascot.voice.genderFemale': 'أنثى', + 'settings.mascot.voice.genderHeading': 'جنس الصوت', + 'settings.mascot.voice.genderMale': 'ذكر', + 'settings.mascot.voice.heading': 'الصوت', + 'settings.mascot.voice.preset': 'إعداد الصوت المسبق', + 'settings.mascot.voice.presetHeading': 'إعداد الصوت المسبق', + 'settings.mascot.voice.preview': 'معاينة الصوت', + 'settings.mascot.voice.previewError': 'تعذّرت معاينة الصوت', + 'settings.mascot.voice.previewText': 'مرحبا، أنا مساعدتك. هذا عرض صوتي', + 'settings.mascot.voice.previewing': 'جاري المعاينة…', + 'settings.mascot.voice.reset': 'إعادة تعيين إلى الافتراضي', + 'settings.mascot.voice.useLocaleDefault': 'مطابقة لغة التطبيق', + 'settings.mascot.voice.useLocaleDefaultDesc': 'اختيار صوت تلقائياً للغة الواجهة الحالية.', + 'settings.persona.title': 'Persona', + 'settings.persona.menuTitle': 'Persona', + 'settings.persona.menuDesc': 'الاسم، الشخصية، الأفاتار، والصوت - مساعدك كهوية واحدة', + 'settings.persona.identityHeading': 'الهوية', + 'settings.persona.identityDesc': + 'اسم عرض ووصف قصير لمساعدك تظهر في التطبيق، ولا تغير كيفية تغيير أسباب المساعد.', + 'settings.persona.displayNameLabel': 'اسم التلاعب', + 'settings.persona.displayNamePlaceholder': 'e.g', + 'settings.persona.descriptionLabel': 'الوصف', + 'settings.persona.descriptionPlaceholder': 'Xqx0xx. مساعد هادئ ومختصر لفريقي', + 'settings.persona.soul.heading': 'الشخصية (x0x.md)', + 'settings.persona.soul.desc': + 'الشخصية تدفع المساعد يتبع في كل محادثة تم إنقاذ (إيديتس) إلى مكان عملك ويبدأ العمل على الرد التالي', + 'settings.persona.soul.editorLabel': 'SOUL', + 'settings.persona.soul.reset': 'إعادة إلى الافتراضي', + 'settings.persona.soul.usingDefault': 'باستخدام الخزنة', + 'settings.persona.soul.loadError': 'لا يمكن تحميل Xqx0xx', + 'settings.persona.soul.saveError': 'لا يُمكنُ أَنْ يَوفّرَ Xqx0xxx', + 'settings.persona.soul.resetError': 'لا يمكن إعادة تشغيل Xqx0xx', + 'settings.persona.appearanceHeading': 'صوت الأفاتار', + 'settings.persona.appearanceDesc': + 'لون الماسكوت، العرف Xqx0x avatar، وصوت الرد مصمم في أماكن مكوت.', + 'settings.persona.openMascotSettings': 'فتح الماسكوت', + 'settings.memoryWindow.balanced.badge': 'موصى به', + 'settings.memoryWindow.balanced.hint': + 'افتراضي معقول — استمرارية جيدة دون استهلاك رموز إضافية في كل تشغيل.', + 'settings.memoryWindow.balanced.label': 'متوازن', + 'settings.memoryWindow.description': + 'مقدار السياق المحفوظ الذي يحقنه OpenHuman في كل تشغيل وكيل جديد. النوافذ الأكبر تشعر بإدراك أكثر للمحادثات السابقة لكنها تستخدم رموزًا أكثر — وتكلّف أكثر — في كل تشغيل.', + 'settings.memoryWindow.extended.badge': 'سياق أكثر', + 'settings.memoryWindow.extended.hint': + 'حقن ذاكرة طويلة المدى أكثر في كل تشغيل. تكلفة رموز أعلى لكل دور.', + 'settings.memoryWindow.extended.label': 'موسّع', + 'settings.memoryWindow.maximum.badge': 'الأعلى تكلفة', + 'settings.memoryWindow.maximum.hint': + 'أكبر نافذة آمنة. أفضل استمرارية، مع فاتورة رموز أعلى بشكل ملحوظ في كل تشغيل.', + 'settings.memoryWindow.maximum.label': 'أقصى', + 'settings.memoryWindow.minimal.badge': 'الأرخص', + 'settings.memoryWindow.minimal.hint': + 'أصغر نافذة ذاكرة. الأرخص والأسرع وأقل استمرارية بين عمليات التشغيل.', + 'settings.memoryWindow.minimal.label': 'الحد الأدنى', + 'settings.memoryWindow.title': 'نافذة الذاكرة طويلة الأمد', + 'settings.modelHealth.title': 'نموذج الصحة', + 'settings.modelHealth.desc': + 'الجودة حسب النموذج، ومعدل الهلوسة، ومقارنة التكاليف بين النماذج النشطة', + 'settings.modelHealth.allStatuses': 'جميع الحالات', + 'settings.modelHealth.models': 'النماذج', + 'settings.modelHealth.loading': 'بيانات نموذجية لتحديد الموقع', + 'settings.modelHealth.empty': 'لا توجد نماذج مسجلة', + 'settings.modelHealth.col.model': 'النموذج النموذجي', + 'settings.modelHealth.col.quality': 'النوعية', + 'settings.modelHealth.col.halluc': '(هلوس) المعدل', + 'settings.modelHealth.col.cost': 'التكلفة/١٠٠', + 'settings.modelHealth.col.agents': 'العملاء', + 'settings.modelHealth.col.status': 'الحالة', + 'settings.modelHealth.badge.keep': 'استمر', + 'settings.modelHealth.badge.replace': 'يستعاض عن عبارة:', + 'settings.modelHealth.badge.staging': 'اختبار الطعن', + 'settings.modelHealth.badge.vision': 'الرؤية فقط', + 'settings.modelHealth.swap': 'ماذا؟', + 'settings.modelHealth.modal.title': 'استبدال النموذج؟', + 'settings.modelHealth.modal.hallucRate': 'معدل الهلوسة', + 'settings.modelHealth.modal.cancel': 'إلغاء', + 'settings.modelHealth.modal.apply': 'استبدال التطبيق', + 'settings.modelHealth.tag.cheaper': 'CHEAPER', + 'settings.modelHealth.tag.better': 'BETTER', + 'settings.screenIntel.permissions.accessibility': 'إمكانية الوصول', + 'settings.screenIntel.permissions.grantHint': 'تلميح المنح', + 'settings.screenIntel.permissions.inputMonitoring': 'مراقبة الإدخال', + 'settings.screenIntel.permissions.macosAppliesPrivacy': 'macOS يطبّق الخصوصية', + 'settings.screenIntel.permissions.openInputMonitoring': 'جارٍ الطلب…', + 'settings.screenIntel.permissions.refreshStatus': 'جارٍ التحديث…', + 'settings.screenIntel.permissions.refreshing': 'جارٍ التحديث…', + 'settings.screenIntel.permissions.requestAccessibility': 'جارٍ الطلب…', + 'settings.screenIntel.permissions.requestScreenRecording': 'جارٍ الطلب…', + 'settings.screenIntel.permissions.requesting': 'جارٍ الطلب…', + 'settings.screenIntel.permissions.restartRefresh': 'جارٍ إعادة تشغيل النواة…', + 'settings.screenIntel.permissions.restartingCore': 'جارٍ إعادة تشغيل النواة…', + 'settings.screenIntel.permissions.screenRecording': 'تسجيل الشاشة', + 'settings.screenIntel.permissions.title': 'الأذونات', + 'skills.card.moreActions': 'مزيد من الإجراءات', + 'skills.channelIcon.discord': 'Discord', + 'skills.channelIcon.imessage': 'iMessage', + 'skills.channelIcon.telegram': 'Telegram', + 'skills.channelIcon.web': 'الويب', + 'skills.channelIcon.yuanbao': 'Yuanbao', + 'skills.composio.poweredBy': 'مدعوم من Composio', + 'skills.composio.staleStatusTitle': 'تظهر الاتصالات حالة قديمة', + 'skills.create.allowedTools': 'الأدوات المسموح بها', + 'skills.create.allowedToolsHelp': 'تم عرضها في المادة الأمامية SKILL.md كـ', + 'skills.create.allowedToolsPlaceholder': 'عقدة_exec، جلب', + 'skills.create.author': 'المؤلف', + 'skills.create.authorPlaceholder': 'اسمك', + 'skills.create.commaSeparated': '(مفصولة بفاصلة)', + 'skills.create.createBtn': 'إنشاء مهارة', + 'skills.create.createError': 'تعذّر إنشاء المهارة', + 'skills.create.creating': 'جارٍ الإنشاء…', + 'skills.create.description': 'الوصف', + 'skills.create.descriptionPlaceholder': 'ما الذي تفعله هذه المهارة؟', + 'skills.create.optional': '(اختياري)', + 'skills.create.inputs.heading': 'Inputs', + 'skills.create.inputs.help': + 'أعلن عن المعاملات التي تحتاجها المهارة. سيعرض تشغيل المهارات نموذجاً لهذه المعاملات عند التشغيل.', + 'skills.create.inputs.add': 'إضافة إدخال', + 'skills.create.inputs.row.name': 'اسم الإدخال', + 'skills.create.inputs.row.namePlaceholder': 'مثال: repo', + 'skills.create.inputs.row.nameError': + 'الأحرف والأرقام والشرطات السفلية والشرطات فقط؛ يجب أن يبدأ بحرف.', + 'skills.create.inputs.row.description': 'وصف الإدخال', + 'skills.create.inputs.row.descriptionPlaceholder': 'ما الذي يذهب في هذا الحقل؟', + 'skills.create.inputs.row.type': 'Type', + 'skills.create.inputs.row.required': 'Required', + 'skills.create.inputs.row.remove': 'حذف الإدخال', + 'skills.create.inputs.type.string': 'Text', + 'skills.create.inputs.type.integer': 'Number', + 'skills.create.inputs.type.boolean': 'نعم / لا', + 'skills.create.license': 'الترخيص', + 'skills.create.licensePlaceholder': 'MIT', + 'skills.create.name': 'الاسم', + 'skills.create.namePlaceholder': 'مثال: يومية التداول', + 'skills.create.scope': 'النطاق', + 'skills.create.scopeProjectHint': '/.openhuman/skills/', + 'skills.create.scopeUserHint': + 'مكتوب في ~/.openhuman/skills//SKILL.md — متاح في جميع مساحات العمل.', + 'skills.create.slugLabel': 'تسمية المعرف', + 'skills.create.subtitle': 'SKILL.md', + 'skills.create.tags': 'الوسوم', + 'skills.create.tagsPlaceholder': 'تداول، بحث', + 'skills.create.title': 'مهارة جديدة', + 'skills.detail.allowedTools': 'الأدوات المسموح بها', + 'skills.detail.author': 'المؤلف', + 'skills.detail.bundledResources': 'الموارد المجمّعة', + 'skills.detail.closeAriaLabel': 'إغلاق تفاصيل المهارة', + 'skills.detail.location': 'الموقع', + 'skills.detail.noBundledResources': 'لا توجد موارد مجمّعة.', + 'skills.detail.tags': 'العلامات', + 'skills.detail.warnings': 'التحذيرات', + 'skills.install.errors.alreadyInstalledHint': + 'توجد بالفعل مهارة بهذه البزاقة في مساحة العمل. قم بإزالته أولاً أو قم بتغيير المادة الأمامية `metadata.id` / `name`.', + 'skills.install.errors.alreadyInstalledTitle': 'تم تثبيت المهارة بالفعل', + 'skills.install.errors.fetchFailedHint': + 'لم يكتمل الطلب بنجاح. تحقق من نقاط URL في ملف عام يمكن الوصول إليه، ومن أن المضيف قد قام بإرجاع استجابة 2xx.', + 'skills.install.errors.fetchFailedTitle': 'فشل الجلب', + 'skills.install.errors.fetchTimedOutHint': + 'لم يستجب المضيف البعيد في الوقت المناسب. حاول مرة أخرى أو ارفع المهلة (1-600 ثانية).', + 'skills.install.errors.fetchTimedOutTitle': 'انتهت مهلة الجلب', + 'skills.install.errors.fetchTooLargeHint': + 'يجب أن يكون حجم SKILL.md أقل من 1 ميجابايت. قم بتقسيم الموارد المجمعة إلى ملفات "مراجع/" أو "نصوص برمجية/" بدلاً من تضمينها.', + 'skills.install.errors.fetchTooLargeTitle': 'SKILL.md كبير جدًا', + 'skills.install.errors.genericHint': 'أرجعت الواجهة الخلفية خطأً. يتم عرض الرسالة الأولية أدناه.', + 'skills.install.errors.genericTitle': 'تعذر تثبيت المهارة', + 'skills.install.errors.invalidSkillHint': + 'يجب أن تكون المادة الأمامية YAML صالحة مع حقول `اسم` و`وصف` غير فارغة، ومنتهية بـ `---`.', + 'skills.install.errors.invalidSkillTitle': 'لم يقم SKILL.md بتحليل', + 'skills.install.errors.invalidUrlHint': + 'يُسمح فقط بـ HTTPS URLs العامة. يتم حظر مضيفي البيانات الخاصة والاسترجاعية والبيانات التعريفية.', + 'skills.install.errors.invalidUrlTitle': 'URL مرفوض', + 'skills.install.errors.unsupportedUrlHint': + 'تعمل فقط الروابط المباشرة `.md`. بالنسبة إلى GitHub، قم بالارتباط بملف (github.com/owner/repo/blob/.../SKILL.md) - لم يتم تثبيت جذور الشجرة والريبو.', + 'skills.install.errors.unsupportedUrlTitle': 'URL النموذج غير مدعوم', + 'skills.install.errors.writeFailedHint': + 'دليل مهارات مساحة العمل غير قابل للكتابة. تحقق من أذونات نظام الملفات لـ `/.openhuman/skills/`.', + 'skills.install.errors.writeFailedTitle': 'تعذر كتابة SKILL.md', + 'skills.install.fetchLog': 'جلب السجل', + 'skills.install.fetchingPrefix': 'جلب', + 'skills.install.fetchingSuffix': 'قد يستغرق ذلك حتى المهلة التي قمت بتكوينها.', + 'skills.install.installBtn': 'جارٍ التثبيت…', + 'skills.install.installComplete': 'اكتمل التثبيت', + 'skills.install.installing': 'جارٍ التثبيت…', + 'skills.install.parseWarnings': 'تحذيرات التحليل', + 'skills.install.rawError': 'خطأ خام', + 'skills.install.subtitleMiddle': 'عبر HTTPS وتثبيته ضمن', + 'skills.install.subtitlePrefix': 'جلب', + 'skills.install.subtitleSuffix': + 'HTTPS واحد فقط؛ تم حظر المضيفين الخاصين والمضيفين الاسترجاعيين.', + 'skills.install.successDiscovered': 'تم اكتشاف {count} مهارات جديدة.', + 'skills.install.successNoNewIds': + 'تم تثبيت المهارة، ولكن لم تظهر معرفات مهارة جديدة - قد يحتوي الكتالوج بالفعل على مهارة بنفس البزاقة.', + 'skills.install.timeoutHint': '(ثوانٍ، اختياري)', + 'skills.install.timeoutHelp': 'الافتراضي هو 60 ثانية. يتم تثبيت القيم خارج 1-600 من جانب الخادم.', + 'skills.install.timeoutInvalid': 'يجب أن يكون عددًا صحيحًا بين 1 و600.', + 'skills.install.timeoutLabel': 'تسمية المهلة', + 'skills.install.timeoutPlaceholder': '60', + 'skills.install.title': 'تثبيت مهارة من رابط', + 'skills.install.urlHelpMiddle': 'ملف.', + 'skills.install.urlHelpPrefix': 'الرابط المباشر إلى', + 'skills.install.urlHelpSuffix': 'URLs إعادة الكتابة التلقائية إلى', + 'skills.install.urlInvalidPrefix': 'URL يجب أن يكون رابط', + 'skills.install.urlInvalidSuffix': 'جيد التنسيق.', + 'skills.install.urlLabel': 'رابط المهارة', + 'skills.install.urlPlaceholder': 'https://raw.githubusercontent.com/owner/repo/main/SKILL.md', + 'skills.meetingBots.bannerDesc': 'وصف اللافتة', + 'skills.meetingBots.bannerTitle': 'عنوان اللافتة', + 'skills.meetingBots.busyTitle': 'OpenHuman مشغول', + 'skills.meetingBots.comingSoon': 'قريبًا', + 'skills.meetingBots.couldNotStartTitle': 'تعذّر بدء OpenHuman', + 'skills.meetingBots.displayName': 'الاسم المعروض', + 'skills.meetingBots.failedToStart': 'فشل تشغيل OpenHuman.', + 'skills.meetingBots.joiningMessage': 'يجب أن يظهر كمشارك في غضون ثوانٍ.', + 'skills.meetingBots.joiningTitle': 'OpenHuman ينضم إلى الاجتماع', + 'skills.meetingBots.meetingLink': 'رابط الاجتماع', + 'skills.meetingBots.modalAriaLabel': 'إرسال OpenHuman إلى اجتماع', + 'skills.meetingBots.modalDesc': 'وصف النافذة', + 'skills.meetingBots.modalTitle': 'إرسال OpenHuman إلى اجتماع', + 'skills.meetingBots.newBadge': 'شارة جديدة', + 'skills.meetingBots.platformComingSoon': '{label} الدعم قريبًا.', + 'skills.meetingBots.platformHints.gmeet': 'meet.google.com/abc-defg-hij', + 'skills.meetingBots.platformHints.teams': 'Teams.microsoft.com/...', + 'skills.meetingBots.platformHints.zoom': 'Zoom.us/j/...', + 'skills.meetingBots.platforms.gmeet': 'Google لقاء', + 'skills.meetingBots.platforms.teams': 'Microsoft Teams', + 'skills.meetingBots.platforms.zoom': 'تكبير', + 'skills.meetingBots.sendTo': 'إرسال إلى', + 'skills.meetingBots.soonSuffix': 'قريبًا', + 'skills.meetingBots.starting': 'جارٍ البدء…', + 'skills.resource.preview.closeAriaLabel': 'إغلاق المعاينة', + 'skills.resource.preview.failed': 'فشلت المعاينة', + 'skills.resource.preview.loading': 'جارٍ تحميل المعاينة…', + 'skills.resource.tree.empty': 'لا توجد موارد مجمّعة.', + 'skills.search.placeholder': 'بحث', + 'skills.setup.autocomplete.acceptKey': 'مفتاح القبول', + 'skills.setup.autocomplete.activeDesc': 'وصف النشاط', + 'skills.setup.autocomplete.activeTitle': 'الإكمال التلقائي نشط', + 'skills.setup.autocomplete.customizeSettings': 'تخصيص الإعدادات', + 'skills.setup.autocomplete.debounce': 'التأخير', + 'skills.setup.autocomplete.description': 'الوصف', + 'skills.setup.autocomplete.enableBtn': 'جارٍ التفعيل...', + 'skills.setup.autocomplete.enableError': 'فشل تفعيل الإكمال التلقائي', + 'skills.setup.autocomplete.enabling': 'جارٍ التفعيل...', + 'skills.setup.autocomplete.notSupported': 'غير مدعوم', + 'skills.setup.autocomplete.stepEnable': 'تفعيل الإكمالات المضمّنة', + 'skills.setup.autocomplete.stepSuccess': 'جاهز للانطلاق', + 'skills.setup.autocomplete.stylePreset': 'نمط ضبط مسبق', + 'skills.setup.autocomplete.stylePresetValue': 'متوازن (قابل للضبط لاحقًا)', + 'skills.setup.autocomplete.title': 'الإكمال التلقائي للنص', + 'skills.setup.screenIntel.activeDesc': 'وصف النشاط', + 'skills.setup.screenIntel.activeTitle': 'ذكاء الشاشة مفعّل', + 'skills.setup.screenIntel.advancedSettings': 'إعدادات متقدمة', + 'skills.setup.screenIntel.allGranted': 'تم منح جميع الأذونات', + 'skills.setup.screenIntel.captureMode': 'وضع الالتقاط', + 'skills.setup.screenIntel.captureModeValue': 'جميع النوافذ (قابل للضبط لاحقًا)', + 'skills.setup.screenIntel.deniedHint': + 'بعد منح الأذونات في إعدادات النظام، انقر أدناه لإعادة التشغيل وتطبيق التغييرات.', + 'skills.setup.screenIntel.enableBtn': 'جارٍ التفعيل...', + 'skills.setup.screenIntel.enableDesc': 'على شاشتك وتغذية سياق مفيد في وكيلك', + 'skills.setup.screenIntel.enableError': 'فشل تفعيل ذكاء الشاشة', + 'skills.setup.screenIntel.enabling': 'جارٍ التفعيل...', + 'skills.setup.screenIntel.grant': 'جارٍ الفتح...', + 'skills.setup.screenIntel.granted': 'تم المنح', + 'skills.setup.screenIntel.macosOnly': 'macOS فقط', + 'skills.setup.screenIntel.opening': 'جارٍ الفتح...', + 'skills.setup.screenIntel.panicHotkey': 'مفتاح ساخن للطوارئ', + 'skills.setup.screenIntel.permAccessibility': 'إمكانية الوصول', + 'skills.setup.screenIntel.permInputMonitoring': 'مراقبة الإدخال', + 'skills.setup.screenIntel.permScreenRecording': 'تسجيل الشاشة', + 'skills.setup.screenIntel.permissionsDesc': 'وصف الأذونات', + 'skills.setup.screenIntel.permissionPathLabel': 'يطبق macOS الخصوصية على:', + 'skills.setup.screenIntel.refreshStatus': 'تحديث الحالة', + 'skills.setup.screenIntel.restartRefresh': 'جارٍ إعادة التشغيل...', + 'skills.setup.screenIntel.restarting': 'جارٍ إعادة التشغيل...', + 'skills.setup.screenIntel.stepEnable': 'تفعيل المهارة', + 'skills.setup.screenIntel.stepPermissions': 'منح الأذونات', + 'skills.setup.screenIntel.stepSuccess': 'جاهز للانطلاق', + 'skills.setup.screenIntel.title': 'ذكاء الشاشة', + 'skills.setup.screenIntel.visionModel': 'نموذج الرؤية', + 'skills.setup.voice.activation': 'التفعيل', + 'skills.setup.voice.activeDescPrefix': 'Fn', + 'skills.setup.voice.activeDescSuffix': 'Fn', + 'skills.setup.voice.activeTitle': 'ذكاء الصوت نشط', + 'skills.setup.voice.customizeSettings': 'تخصيص الإعدادات', + 'skills.setup.voice.downloadSttBtn': 'تنزيل نموذج STT', + 'skills.setup.voice.enableDesc': 'وصف التفعيل', + 'skills.setup.voice.hotkey': 'المفتاح الساخن', + 'skills.setup.voice.startBtn': 'جارٍ البدء...', + 'skills.setup.voice.startError': 'فشل تشغيل خادم الصوت', + 'skills.setup.voice.starting': 'جارٍ البدء...', + 'skills.setup.voice.stepEnable': 'تشغيل خادم الصوت', + 'skills.setup.voice.stepSetup': 'يلزم تنزيل النموذج', + 'skills.setup.voice.stepSuccess': 'جاهز للانطلاق', + 'skills.setup.voice.sttNotReady': 'نموذج تحويل الكلام إلى نص غير جاهز', + 'skills.setup.voice.sttNotReadyDesc': + 'يتطلب ذكاء الصوت نموذج Whisper محليًا للنسخ. نزّله من إعدادات النموذج المحلي.', + 'skills.setup.voice.sttReady': 'نموذج تحويل الكلام إلى نص جاهز', + 'skills.setup.voice.sttReturnHint': 'تلميح العودة لـ STT', + 'skills.setup.voice.title': 'ذكاء الصوت', + 'skills.uninstall.couldNotUninstall': 'تعذّر إلغاء التثبيت', + 'skills.uninstall.description': + 'هذا يحذف دليل المهارة نهائيًا وجميع موارده المرفقة. سيتوقف الوكيل عن رؤيتها في الدور التالي.', + 'skills.uninstall.title': 'إلغاء التثبيت', + 'skills.uninstall.uninstallBtn': 'إلغاء التثبيت', + 'skills.uninstall.uninstalling': 'جارٍ إلغاء التثبيت…', + 'upsell.global.limitMessage': 'قم بترقية خطتك أو أضف رصيدًا للمتابعة', + 'upsell.global.limitTitle': 'أنت', + 'upsell.global.nearLimitMessage': + 'لقد استخدمت {pct}% من حد الاستخدام. قم بالترقية للحصول على حدود أعلى.', + 'upsell.global.nearLimitTitle': 'الاقتراب من حد الاستخدام', + 'upsell.usageLimit.bodyBudget': + 'لقد وصلت إلى حدّك الأسبوعي.{reset} قم بترقية خطتك أو شحن الرصيد لتجنّب الحدود.', + 'upsell.usageLimit.bodyRate': + 'لقد وصلت إلى حدّ معدّل الاستدلال لـ 10 ساعات.{reset} قم بالترقية للحصول على حدود أعلى.', + 'upsell.usageLimit.heading': 'تم الوصول إلى حد الاستخدام', + 'upsell.usageLimit.notNow': 'ليس الآن', + 'upsell.usageLimit.perWindow': '{amount}', + 'upsell.usageLimit.planIncludes': '{plan}', + 'upsell.usageLimit.resetsIn': 'يُعاد التعيين {time}.', + 'upsell.usageLimit.upgradePlan': 'ترقية الخطة', + 'upsell.usageLimit.weeklyInference': '{amount}', + 'walkthrough.tooltip.letsGo': 'هيا بنا!', + 'walkthrough.tooltip.next': 'التالي →', + 'walkthrough.tooltip.skip': 'تخطّي الجولة', + 'walkthrough.tooltip.stepCounter': '{n} من {total}', + 'webhooks.activity.empty': 'فارغ', + 'webhooks.activity.title': 'النشاط الأخير', + 'webhooks.composioHistory.empty': 'فارغ', + 'webhooks.composioHistory.metadataId': 'معرف البيانات الوصفية', + 'webhooks.composioHistory.metadataUuid': 'UUID البيانات الوصفية', + 'webhooks.composioHistory.payload': 'البيانات', + 'webhooks.composioHistory.title': 'سجل مشغّلات ComposeIO', + 'webhooks.tunnels.active': 'نشط', + 'webhooks.tunnels.createFailed': 'فشل إنشاء النفق', + 'webhooks.tunnels.creating': 'جارٍ الإنشاء...', + 'webhooks.tunnels.deleteFailed': 'فشل حذف النفق', + 'webhooks.tunnels.descriptionPlaceholder': 'الوصف (اختياري)', + 'webhooks.tunnels.echo': 'صدى', + 'webhooks.tunnels.empty': 'فارغ', + 'webhooks.tunnels.enableEcho': 'تفعيل الصدى', + 'webhooks.tunnels.inactive': 'غير نشط', + 'webhooks.tunnels.namePlaceholder': 'اسم النفق (مثال: telegram-bot)', + 'webhooks.tunnels.newTunnel': 'نفق جديد', + 'webhooks.tunnels.removeEcho': 'إزالة الصدى', + 'webhooks.tunnels.title': 'أنفاق Webhook', + 'webhooks.tunnels.toggleFailed': 'فشل تبديل الصدى', + 'composio.directModeRequiresKey': 'فشل الحفظ. الوضع المباشر يتطلب مفتاح API غير فارغ.', + 'composio.integrationSlugsHelp': 'التكامل المفصول بفواصل الرخويات، على سبيل المثال.', + 'composio.integrationSlugsExample': 'gmail، slack', + 'composio.integrationSlugsCaseInsensitive': 'غير حساس لحالة الأحرف.', + 'composio.integrationSlugsPlaceholder': 'gmail، slack، ...', + 'composio.notYetRouted': 'لم يتم توجيهه بعد', + 'composio.triggers.loading': 'جارٍ التحميل…', + 'conversations.taskKanban.todo': 'للتنفيذ', + 'chat.addReaction': 'إضافة تفاعل', + 'chat.agentProfile.create': 'إنشاء ملف تعريف الوكيل', + 'chat.agentProfile.createFailed': 'تعذر إنشاء ملف تعريف الوكيل.', + 'chat.agentProfile.customDescription': 'ملف تعريف الوكيل المخصص', + 'chat.agentProfile.defaultAgentLabel': 'المنسق', + 'chat.agentProfile.exists': 'ملف تعريف الوكيل "{name}" موجود بالفعل.', + 'chat.agentProfile.label': 'ملف تعريف الوكيل', + 'chat.agentProfile.namePlaceholder': 'اسم ملف التعريف', + 'chat.agentProfile.promptStylePlaceholder': 'نمط المطالبة', + 'chat.agentProfile.allowedToolsPlaceholder': 'الأدوات المسموح بها', + 'chat.backToThread': 'العودة إلى {title}', + 'chat.parentThread': 'الموضوع الأصلي', + 'chat.removeReaction': 'إزالة {emoji}', + 'settings.composio.loading': 'جارٍ التحميل…', + 'settings.mascot.noCharactersAvailable': 'لا توجد شخصيات OpenHuman متاحة بعد', + 'skills.uninstall.confirmTitle': 'إلغاء تثبيت {name}؟', + 'conversations.taskKanban.blocked': 'محظور', + 'conversations.taskKanban.done': 'مكتمل', + 'conversations.taskKanban.pending': 'تنتهي', + 'conversations.taskKanban.working': 'العمل', + 'conversations.taskKanban.awaitingApproval': 'في انتظار الموافقة', + 'conversations.taskKanban.ready': 'جاهز', + 'conversations.taskKanban.rejected': 'Rejected', + 'conversations.taskKanban.inProgress': 'قيد التنفيذ', + 'intelligence.memoryChunk.detail.copiedHint': 'تم النسخ', + 'settings.composio.notYetRouted': 'لم يتم توجيهه بعد', + 'settings.localModel.download.manageExternal': + 'إدارة هذا النموذج في وقت التشغيل الخارجي الخاص بك.', + 'settings.localModel.status.manageOllamaExternal': + 'أدِر عملية Ollama وعمليات تحميل النماذج خارج OpenHuman، ثم أعد تشغيل التشخيصات.', + 'settings.localModel.status.ollamaDocs': 'وثائق Ollama', + 'settings.localModel.status.thenRetry': + 'للحصول على تعليمات الإعداد، ثم أعد المحاولة عندما يصبح وقت التشغيل قابلاً للوصول.', + 'devOptions.menuAi': 'تكوين الذكاء الاصطناعي', + 'devOptions.menuAiDesc': 'موفرو السحابة، ونماذج Ollama المحلية، والتوجيه لكل حمل عمل', + 'devOptions.menuScreenAware': 'التعرف على الشاشة', + 'devOptions.menuScreenAwareDesc': + 'أذونات التقاط الشاشة، وسياسة المراقبة، وعناصر التحكم في الجلسة', + 'devOptions.menuMessaging': 'قنوات المراسلة', + 'devOptions.menuMessagingDesc': 'تكوين أوضاع المصادقة Telegram/Discord وتوجيه القناة الافتراضية', + 'devOptions.menuTools': 'الأدوات', + 'devOptions.menuToolsDesc': 'تمكين أو تعطيل الإمكانات التي يمكن أن يستخدمها OpenHuman نيابة عنك', + 'devOptions.menuAgentChat': 'دردشة الوكيل', + 'devOptions.menuAgentChatDesc': 'محادثة وكيل الاختبار مع تجاوزات النموذج ودرجة الحرارة', + 'devOptions.menuCronJobs': 'وظائف Cron', + 'devOptions.menuCronJobsDesc': 'عرض المهام المجدولة وتكوينها لمهارات وقت التشغيل', + 'devOptions.menuLocalModelDebug': 'تصحيح أخطاء النموذج المحلي', + 'devOptions.menuLocalModelDebugDesc': + 'Ollama التكوين وتنزيلات الأصول واختبارات النماذج والتشخيصات', + 'devOptions.menuWebhooksDebug': 'خطافات الويب', + 'devOptions.menuWebhooksDebugDesc': 'فحص تسجيلات خطاف الويب لوقت التشغيل وسجلات الطلبات الملتقطة', + 'devOptions.menuIntelligence': 'الذكاء', + 'devOptions.menuIntelligenceDesc': 'مساحة عمل الذاكرة ومحرك العقل الباطن والأحلام والإعدادات', + 'devOptions.menuNotificationRouting': 'توجيه الإشعارات', + 'devOptions.menuNotificationRoutingDesc': + 'تسجيل أهمية الذكاء الاصطناعي وتصعيد المنسق لتنبيهات التكامل', + 'devOptions.menuComposeIOTriggers': 'مشغلات ComposeIO', + 'devOptions.menuComposeIOTriggersDesc': 'عرض سجل وأرشيف مشغلات ComposeIO', + 'devOptions.menuComposioRouting': 'Composio التوجيه (الوضع المباشر)', + 'devOptions.menuComposioRoutingDesc': + 'أحضر مفتاح Composio API الخاص بك وقم بتوجيه المكالمات مباشرة إلى backend.composio.dev', + 'devOptions.menuComposioTriggers': 'مشغلات التكامل', + 'devOptions.menuComposioTriggersDesc': + 'تكوين إعدادات فرز الذكاء الاصطناعي لمشغلات التكامل Composio', + 'memory.sourceFilterAria': 'التصفية حسب المصدر', + 'calls.comingSoonDescription': 'المكالمات بمساعدة الذكاء الاصطناعي قادمة قريباً. ابقَ على اطلاع.', + 'vault.title': 'خزائن المعرفة', + 'vault.description': 'أشر إلى مجلد محلي؛ يتم تقسيم الملفات وعكسها في الذاكرة.', + 'vault.add': 'إضافة مخزن', + 'vault.added': 'تمت إضافة المخزن', + 'vault.createdMessage': 'تم إنشاء "{name}". انقر فوق {sync} لاستيعابها.', + 'vault.couldNotAdd': 'تعذر إضافة مخزن', + 'vault.syncFailed': 'فشلت المزامنة', + 'vault.syncFailedFor': 'فشلت المزامنة لـ "{name}"', + 'vault.syncFailedFiles': 'فشل ملف (ملفات) {count}', + 'vault.syncedTitle': 'تمت مزامنة "{name}"', + 'vault.syncSummary': 'تم استيعابها {ingested}، دون تغيير {unchanged}، تمت إزالة {removed}', + 'vault.syncSummaryFailed': ', فشل {count}', + 'vault.syncSummarySkipped': '، تم تخطي {count}', + 'vault.syncSummaryDuration': ' · {seconds}s', + 'vault.confirmRemovePurge': + 'إزالة الخزنة "{name}"؟\n\nانقر «موافق» لحذف ذاكرتها أيضاً (حذف جميع {count} مستند/مستندات مستوعبة).\nانقر «إلغاء» للاحتفاظ بالمستندات في الذاكرة.', + 'vault.confirmRemove': 'هل تريد حقًا إزالة المخزن "{name}"؟', + 'vault.removed': 'تمت إزالة المخزن', + 'vault.removedPurgedMessage': 'تمت إزالة "{name}" وتطهير ذاكرته.', + 'vault.removedKeptMessage': 'تمت إزالة "{name}". الوثائق المحفوظة في الذاكرة.', + 'vault.couldNotRemove': 'تعذرت إزالة المخزن', + 'vault.name': 'الاسم', + 'vault.namePlaceholder': 'ملاحظاتي البحثية', + 'vault.folderPath': 'مسار المجلد (مطلق)', + 'vault.folderPathPlaceholder': '/Users/you/Documents/notes', + 'vault.excludes': 'باستثناء (سلاسل فرعية مفصولة بفواصل، اختيارية)', + 'vault.excludesPlaceholder': 'المسودات/، .secret', + 'vault.creating': 'إنشاء...', + 'vault.create': 'إنشاء مخزن', + 'vault.loading': 'تحميل الخزائن...', + 'vault.failedToLoad': 'فشل تحميل الخزائن: {error}', + 'vault.empty': 'لا توجد خزائن حتى الآن. أضف واحدًا أعلاه لبدء استيعاب مجلد.', + 'vault.fileCount': '{count} ملف (ملفات)', + 'vault.syncedRelative': 'تمت مزامنته {time}', + 'vault.neverSynced': 'لم تتم مزامنته أبدًا', + 'vault.syncingProgress': 'جارٍ المزامنة… {ingested}/{total}', + 'vault.removing': 'جارٍ الإزالة...', + 'vault.relative.sec': 'قبل {count}s', + 'vault.relative.min': 'قبل {count}m', + 'vault.relative.hr': 'قبل {count} قبل', + 'vault.relative.day': 'قبل {count}d', + 'whatsapp.title': 'WhatsApp', + 'subconscious.interval.fiveMinutes': '5 دقائق', + 'subconscious.interval.tenMinutes': '10 دقائق', + 'subconscious.interval.fifteenMinutes': '15 دقيقة', + 'subconscious.interval.thirtyMinutes': '30 دقيقة', + 'subconscious.interval.oneHour': 'ساعة واحدة', + 'subconscious.interval.sixHours': '6 ساعات', + 'subconscious.interval.twelveHours': '12 ساعة', + 'subconscious.interval.oneDay': 'يوم واحد', + 'subconscious.priority.critical': 'حرجة', + 'subconscious.priority.important': 'مهم', + 'subconscious.priority.normal': 'عادي', + 'subconscious.durationSeconds': '{seconds} ثانية', + 'subconscious.durationMilliseconds': '{milliseconds} مللي ثانية', + 'settings.appearance': 'المظهر', + 'settings.appearanceDesc': 'اختر لونًا فاتحًا أو داكنًا أو قم بمطابقة سمة النظام لديك', + 'settings.mascot': 'التميمة', + 'settings.mascotDesc': 'اختر لون التميمة المستخدم عبر التطبيق', + 'pages.settings.account.walletBalances': 'أرصدة المحفظة', + 'pages.settings.account.walletBalancesDesc': 'عرض أرصدة السلاسل المتعددة لمحفظتك المحلية', + 'walletBalances.title': 'أرصدة المحفظة', + 'walletBalances.refresh': 'Refresh', + 'walletBalances.loading': 'جارٍ تحميل الأرصدة…', + 'walletBalances.retry': 'Retry', + 'walletBalances.emptyState': 'لا توجد حسابات محفظة بعد — أعدّ محفظة في عبارة الاسترداد.', + 'walletBalances.copyAddress': 'نسخ العنوان', + 'walletBalances.providerMissing': 'الموفر غير متاح', + 'walletBalances.rawBalance': 'الخام: {raw}', + 'walletBalances.errorGeneric': + 'تعذّر تحميل أرصدة المحفظة. أعدّ محفظتك في عبارة الاسترداد وحاول مجدداً.', + 'settings.taskSources.title': 'المصادر', + 'settings.taskSources.subtitle': 'سحب المهام من أدواتك على لوحة العميل (تود)', + 'settings.taskSources.description': + 'اجمع عناصر العمل من GitHub وNotion وLinear وClickUp، وأثرها، وقم بتوجيهها إلى لوحة مهام الوكيل.', + 'settings.taskSources.connectHint': 'مصادر المهمة تستخدم حساباتك المرتبطة إربطهم تحت الدمج أولاً', + 'settings.taskSources.disabledBanner': + 'وتُعوق مصادر المهام في البيئات. تمكنهم من الاقتراع تلقائياً', + 'settings.taskSources.loadError': 'عدم تحميل مصادر المهام', + 'settings.taskSources.addTitle': 'يضاف مصدر مهمة', + 'settings.taskSources.provider': 'Provider', + 'settings.taskSources.name': 'الاسم (اختياري)', + 'settings.taskSources.namePlaceholder': 'Xqx0xx. قضاياي المفتوحة', + 'settings.taskSources.github.repo': 'المستودع (المالك/الاسم، اختياري)', + 'settings.taskSources.github.labels': 'التصنيفات (مفصولة بفاصلة)', + 'settings.taskSources.notion.database': 'قاعدة البيانات (على متنها)', + 'settings.taskSources.linear.team': 'هوية الفريق (اختياري)', + 'settings.taskSources.clickup.team': 'مكان العمل (الفريق)', + 'settings.taskSources.assignedToMe': 'فقط البنود الموكلة لي', + 'settings.taskSources.add': 'المصدر', + 'settings.taskSources.adding': 'إضافة...', + 'settings.taskSources.preview': 'Preview', + 'settings.taskSources.previewResult': 'مُهمة (مُهمات) مُطابقة لهذا التصفية', + 'settings.taskSources.fetchNow': 'أحضر الآن', + 'settings.taskSources.fetching': '....', + 'settings.taskSources.fetchResult': 'تم توجيه {routed} من أصل {fetched} مهمة/مهام', + 'settings.taskSources.configured': 'المصادر المحظورة', + 'settings.taskSources.empty': 'لم يتم تشكيل مصادر المهمة بعد', + 'settings.taskSources.proactive': 'استباقي', + 'settings.taskSources.lastFetch': 'آخر مرة', + 'settings.taskSources.never': 'أبداً', + 'settings.taskSources.statusEnabled': 'Enabled', + 'settings.taskSources.statusDisabled': 'المعوقين', + 'settings.taskSources.enable': 'التمكين', + 'settings.taskSources.disable': 'العجز', + 'settings.taskSources.remove': 'إزالة الألغام', + 'settings.taskSources.removeConfirm': + 'إزالة مصدر المهمة هذا؟ وسيتم حذف كل تاريخ المهمة المستغل ولا يمكن التخلي عنه.', + 'settings.taskSources.refresh': 'التجديد', + 'settings.taskSources.providers.github': 'GitHub', + 'settings.taskSources.providers.notion': 'Notion', + 'settings.taskSources.providers.linear': 'Linear', + 'settings.taskSources.providers.clickup': 'ClickUp', + 'skills.dashboard.title': 'Skills', + 'skills.dashboard.scheduledHeading': 'المهارات المجدولة', + 'skills.dashboard.emptyTitle': 'لا توجد مهارات مجدولة', + 'skills.dashboard.emptyBody': 'شغّل مهارة مُجمَّعة مرة واحدة أو احفظ جدولاً متكرراً لعرضه هنا.', + 'skills.dashboard.create': 'إنشاء مهارة', + 'skills.dashboard.run': 'تشغيل مهارة', + 'skills.dashboard.enable': 'تفعيل المهارة المجدولة', + 'skills.dashboard.disable': 'تعطيل المهارة المجدولة', + 'skills.dashboard.lastRun': 'آخر تشغيل', + 'skills.dashboard.nextRun': 'التشغيل التالي', + 'skills.dashboard.cardOpenRunner': 'فتح في المشغّل', + 'skills.dashboard.loadError': 'فشل تحميل المهارات المجدولة', + 'skills.new.title': 'إنشاء مهارة', + 'skills.new.placeholderBody': + 'نموذج التأليف قادم قريباً. في الوقت الحالي، استخدم زر «مهارة جديدة» في صفحة المشغّل.', + 'settings.agents.title': 'العملاء', + 'settings.agents.subtitle': 'إدارة الوكلاء المتاحين للوفد - الفشل المبنية ووكلاء العرف الخاص بك.', + 'settings.agents.menuDesc': 'إدارة الوكلاء المضمنين والمخصصين', + 'settings.agents.newAgent': 'عميل جديد', + 'settings.agents.loadError': 'لا يمكن تحميل العملاء', + 'settings.agents.empty': 'لا عملاء بعد الآن', + 'settings.agents.sourceDefault': 'البناء', + 'settings.agents.sourceCustom': 'العرف', + 'settings.agents.enable': 'وكيل تمكين', + 'settings.agents.disable': 'وكيل مخرب', + 'settings.agents.edit': 'Edit', + 'settings.agents.delete': 'Delete', + 'settings.agents.reset': 'إعادة إلى الافتراضي', + 'settings.agents.modelLabel': 'النموذج النموذجي', + 'settings.agents.toolsLabel': 'الأدوات', + 'settings.agents.toolsAll': 'جميع الأدوات', + 'settings.agents.toolsCount': 'أدوات xx0xxx', + 'settings.agents.actionFailed': 'لم أستطع تحديث العميل', + 'settings.agents.orchestratorLocked': 'المقسم مُتاح دائماً', + 'settings.agents.editor.createTitle': 'عميل جديد', + 'settings.agents.editor.editTitle': 'وكيل إديت', + 'settings.agents.editor.id': 'ID', + 'settings.agents.editor.idHint': 'رسائل أقل، أرقام، فقط', + 'settings.agents.editor.name': 'الاسم', + 'settings.agents.editor.description': 'الوصف', + 'settings.agents.editor.model': 'النموذج (اختياري)', + 'settings.agents.editor.modelPlaceholder': 'الورثة، التلميح: فاسد، أو نموذج id', + 'settings.agents.editor.systemPrompt': 'النظام السريع (اختياري)', + 'settings.agents.editor.tools': 'الأدوات المسموح بها', + 'settings.agents.editor.toolsHint': 'اسم أداة واحدة لكل خط استخدام * لجميع الأدوات.', + 'settings.agents.editor.defaultsNote': 'تحرير عميل مبني ينقذ تجاوز يمكنك إعادة ضبطه لاحقاً', + 'settings.agents.editor.save': 'أنقذ', + 'settings.agents.editor.create': 'وكيل خلق', + 'settings.agents.editor.saving': 'إنقاذ...', + 'settings.agentsSection.title': 'Agents', + 'settings.agentsSection.description': + 'إدارة عواملك واستقلاليتها وما يمكنها الوصول إليه على هذا الجهاز.', + 'settings.agentsSection.menuDesc': 'السجل، الاستقلالية ووصول نظام التشغيل', + 'settings.agents.editor.notFound': 'العامل غير موجود.', + 'settings.agents.editor.modelInherit': 'موروث (الافتراضي للمنصة)', + 'settings.agents.editor.modelHints': 'تلميحات التوجيه', + 'settings.agents.editor.modelTiers': 'مستويات النموذج', + 'settings.agents.editor.modelCustom': 'معرّف نموذج مخصص…', + 'settings.agents.editor.modelCustomPlaceholder': 'مثال: anthropic/claude-sonnet-4', + 'settings.agents.editor.selectTools': 'إضافة أدوات', + 'settings.agents.editor.toolsAllSelected': 'كل الأدوات', + 'settings.agents.editor.toolsNoneSelected': 'لم يتم اختيار أي أدوات', + 'settings.agents.editor.removeToolAria': 'إزالة {tool}', + 'settings.agents.editor.toolsModalTitle': 'الأدوات المسموح بها', + 'settings.agents.editor.toolsSelectedCount': '{count} محددة', + 'settings.agents.editor.toolsSearchPlaceholder': 'البحث في الأدوات…', + 'settings.agents.editor.toolsAllowAll': 'السماح بجميع الأدوات (*)', + 'settings.agents.editor.toolsAllowAllHint': 'يمكن لهذا العامل استخدام كل الأدوات المتاحة.', + 'settings.agents.editor.toolsLoading': 'جارٍ تحميل الأدوات…', + 'settings.agents.editor.toolsLoadError': 'تعذّر تحميل الأدوات', + 'settings.agents.editor.toolsEmpty': 'لا توجد أدوات تطابق بحثك.', + 'settings.agents.editor.toolsDone': 'Done', + 'settings.agents.editor.builtInReadonly': + 'لا يمكن تعديل العوامل المدمجة. يمكنك تفعيلها أو تعطيلها أو إعادة ضبطها من قائمة العوامل.', }; -export default ar; +export default messages; diff --git a/app/src/lib/i18n/bn.ts b/app/src/lib/i18n/bn.ts index 75c5e7802..0a121e41b 100644 --- a/app/src/lib/i18n/bn.ts +++ b/app/src/lib/i18n/bn.ts @@ -1,31 +1,4082 @@ -import bn1 from './chunks/bn-1'; -import bn2 from './chunks/bn-2'; -import bn3 from './chunks/bn-3'; -import bn4 from './chunks/bn-4'; -import bn5 from './chunks/bn-5'; import type { TranslationMap } from './types'; -// Bengali (বাংলা) translations. Each chunk maps to chunks/en-N.ts. -// Missing keys fall back to English via I18nContext.resolveEn(). -const bn: TranslationMap = { - ...bn1, - ...bn2, - ...bn3, - ...bn4, - ...bn5, +// Bengali (বাংলা) translations. Keys mirror en.ts; missing/ +// English-identical values fall back to English via I18nContext.resolveEn(). +const messages: TranslationMap = { + 'nav.home': 'হোম', + 'nav.human': 'হিউম্যান', + 'nav.chat': 'চ্যাট', + 'nav.connections': 'সংযোগ', + 'nav.memory': 'ইন্টেলিজেন্স', + 'nav.alerts': 'সতর্কতা', + 'nav.rewards': 'পুরস্কার', + 'nav.settings': 'সেটিংস', + 'common.cancel': 'বাতিল', + 'common.save': 'সংরক্ষণ', + 'common.confirm': 'নিশ্চিত করুন', + 'common.delete': 'মুছুন', + 'common.edit': 'সম্পাদনা', + 'common.create': 'তৈরি করুন', + 'common.search': 'খুঁজুন', + 'common.loading': 'লোড হচ্ছে…', + 'common.error': 'ত্রুটি', + 'common.success': 'সফল', + 'common.back': 'পেছনে', + 'common.next': 'পরবর্তী', + 'common.finish': 'সম্পন্ন', + 'common.close': 'বন্ধ করুন', + 'common.enabled': 'সক্রিয়', + 'common.disabled': 'নিষ্ক্রিয়', + 'common.on': 'চালু', + 'common.off': 'বন্ধ', + 'common.yes': 'হ্যাঁ', + 'common.no': 'না', + 'common.ok': 'বুঝলাম', + 'common.name': 'নাম', + 'common.retry': 'আবার চেষ্টা করুন', + 'common.copy': 'কপি', + 'common.copied': 'কপি হয়েছে', + 'common.learnMore': 'আরও জানুন', + 'common.seeAll': 'দেখুন', + 'common.dismiss': 'বাদ দিন', + 'common.clear': 'পরিষ্কার', + 'common.reset': 'রিসেট', + 'common.refresh': 'রিফ্রেশ', + 'common.export': 'রপ্তানি', + 'common.import': 'আমদানি', + 'common.upload': 'আপলোড', + 'common.download': 'ডাউনলোড', + 'common.add': 'যোগ করুন', + 'common.remove': 'সরান', + 'common.showMore': 'আরও দেখুন', + 'common.showLess': 'কম দেখুন', + 'common.submit': 'জমা দিন', + 'common.continue': 'চালিয়ে যান', + 'common.comingSoon': 'শীঘ্রই আসছে', + 'common.breadcrumb': 'ব্রেডক্রাম্ব', + 'settings.general': 'সাধারণ', + 'settings.featuresAndAI': 'ফিচার ও AI', + 'settings.billingAndRewards': 'বিলিং ও পুরস্কার', + 'settings.support': 'সহায়তা', + 'settings.advanced': 'অ্যাডভান্সড', + 'settings.dangerZone': 'বিপদ অঞ্চল', + 'settings.account': 'অ্যাকাউন্ট', + 'settings.accountDesc': 'রিকভারি ফ্রেজ, টিম, সংযোগ ও গোপনীয়তা', + 'settings.notifications': 'বিজ্ঞপ্তি', + 'settings.notificationsDesc': 'ডু নট ডিস্টার্ব এবং প্রতিটি অ্যাকাউন্টের বিজ্ঞপ্তি নিয়ন্ত্রণ', + 'settings.notifications.tabs.preferences': 'পছন্দ', + 'settings.notifications.tabs.routing': 'রাউটিং', + 'settings.features': 'ফিচার', + 'settings.featuresDesc': 'স্ক্রিন সচেতনতা, মেসেজিং এবং টুলস', + 'settings.aiModels': 'AI ও মডেল', + 'settings.aiModelsDesc': 'লোকাল AI মডেল সেটআপ, ডাউনলোড এবং LLM প্রোভাইডার', + 'settings.ai': 'AI কনফিগারেশন', + 'settings.aiDesc': 'ক্লাউড প্রোভাইডার, লোকাল Ollama মডেল এবং ওয়ার্কলোড রুটিং', + 'settings.billingUsage': 'বিলিং ও ব্যবহার', + 'settings.billingUsageDesc': 'সাবস্ক্রিপশন প্ল্যান, ক্রেডিট এবং পেমেন্ট পদ্ধতি', + 'settings.rewards': 'পুরস্কার', + 'settings.rewardsDesc': 'রেফারেল, কুপন এবং অর্জিত ক্রেডিট', + 'settings.restartTour': 'ট্যুর পুনরায় শুরু', + 'settings.restartTourDesc': 'শুরু থেকে প্রোডাক্ট ওয়াকথ্রু আবার দেখুন', + 'settings.about': 'সম্পর্কে', + 'settings.aboutDesc': 'অ্যাপ ভার্সন এবং সফটওয়্যার আপডেট', + 'settings.developerOptions': 'অ্যাডভান্সড', + 'settings.developerOptionsDesc': + 'AI কনফিগারেশন, মেসেজিং চ্যানেল, টুলস, ডায়াগনস্টিক্স এবং ডিবাগ প্যানেল', + 'settings.clearAppData': 'অ্যাপ ডেটা মুছুন', + 'settings.clearAppDataDesc': 'সাইন আউট করুন এবং সব লোকাল ডেটা স্থায়ীভাবে মুছুন', + 'settings.logOut': 'লগ আউট', + 'settings.logOutDesc': 'আপনার অ্যাকাউন্ট থেকে সাইন আউট করুন', + 'settings.exitLocalSession': 'স্থানীয় সেশন থেকে প্রস্থান করুন', + 'settings.exitLocalSessionDesc': 'সাইন-ইন স্ক্রিনে ফিরে যান', + 'settings.language': 'ভাষা', + 'settings.betaBuild': 'বিটা বিল্ড - v{version}', + 'settings.languageDesc': 'অ্যাপ ইন্টারফেসের প্রদর্শন ভাষা', + 'settings.alerts': 'সতর্কতা', + 'settings.alertsDesc': 'ইনবক্সে সাম্প্রতিক সতর্কতা ও কার্যক্রম দেখুন', + 'settings.account.recoveryPhrase': 'রিকভারি ফ্রেজ', + 'settings.account.recoveryPhraseDesc': 'আপনার অ্যাকাউন্ট রিকভারি ফ্রেজ দেখুন ও ব্যাকআপ করুন', + 'settings.account.team': 'টিম', + 'settings.account.teamDesc': 'টিম সদস্য ও অনুমতি পরিচালনা করুন', + 'settings.account.connections': 'সংযোগ', + 'settings.account.connectionsDesc': 'লিংক করা অ্যাকাউন্ট ও সার্ভিস পরিচালনা করুন', + 'settings.account.privacy': 'গোপনীয়তা', + 'settings.account.privacyDesc': 'আপনার কম্পিউটার থেকে কোন ডেটা বাইরে যাচ্ছে তা নিয়ন্ত্রণ করুন', + 'migration.title': 'অন্য সহকারী থেকে আমদানি করুন', + 'migration.description': + 'অন্য একটি লোকাল সহকারী থেকে মেমরি ও নোট এই ওয়ার্কস্পেসে স্থানান্তর করুন। প্রথমে Preview চালিয়ে দেখুন ঠিক কী বদলাবে, তারপর Apply চাপলে ডেটা কপি হবে। আপনার বর্তমান মেমরি আগে ব্যাকআপ নেওয়া হবে।', + 'migration.vendorLabel': 'উৎস', + 'migration.vendor.openclaw': 'OpenClaw', + 'migration.vendor.hermes': 'Hermes Agent', + 'migration.sourceLabel': 'উৎস ওয়ার্কস্পেসের পাথ (ঐচ্ছিক)', + 'migration.sourcePlaceholder': 'অটো-ডিটেক্টের জন্য খালি রাখুন (যেমন ~/.openclaw/workspace)', + 'migration.sourcePlaceholderHermes': 'স্বয়ংক্রিয়ভাবে সনাক্ত করতে খালি রাখুন (যেমন ~/.hermes)', + 'migration.sourceHint': + 'খালি রাখলে উৎসের ডিফল্ট লোকেশন ব্যবহার হবে। ওয়ার্কস্পেস সরিয়ে থাকলে স্পষ্ট পাথ দিন।', + 'migration.previewAction': 'প্রিভিউ', + 'migration.previewRunning': 'প্রিভিউ চলছে…', + 'migration.applyAction': 'আমদানি প্রয়োগ করুন', + 'migration.applyRunning': 'আমদানি হচ্ছে…', + 'migration.applyDisclaimer': + 'একই উৎসের সফল Preview হলেই Apply খুলবে। যে কোনো আমদানির আগে বর্তমান মেমরির ব্যাকআপ নেওয়া হয়।', + 'migration.reportTitlePreview': 'প্রিভিউ — এখনো কিছু আমদানি হয়নি', + 'migration.reportTitleApplied': 'আমদানি সম্পন্ন', + 'migration.report.source': 'উৎস ওয়ার্কস্পেস', + 'migration.report.target': 'লক্ষ্য ওয়ার্কস্পেস', + 'migration.report.fromSqlite': 'SQLite (brain.db) থেকে', + 'migration.report.fromMarkdown': 'Markdown থেকে', + 'migration.report.imported': 'আমদানিকৃত', + 'migration.report.skippedUnchanged': 'এড়ানো হয়েছে (অপরিবর্তিত)', + 'migration.report.renamedConflicts': 'দ্বন্দ্বে নাম বদলানো হয়েছে', + 'migration.report.warnings': 'সতর্কতা', + 'migration.report.previewHint': 'এখনো কোনো ডেটা আমদানি হয়নি। কপি করতে Apply চাপুন।', + 'migration.report.appliedHint': + 'আমদানিকৃত এন্ট্রি এখন আপনার মেমরিতে আছে। তুলনা করতে আবার Preview চালান।', + 'migration.confirmImport.singular': + 'বর্তমান ওয়ার্কস্পেসে {count}টি এন্ট্রি আমদানি করবেন?\n\nউৎস: {source}\nলক্ষ্য: {target}\n\nআমদানির আগে বর্তমান মেমরির ব্যাকআপ নেওয়া হবে।', + 'migration.confirmImport.plural': + 'বর্তমান ওয়ার্কস্পেসে {count}টি এন্ট্রি আমদানি করবেন?\n\nউৎস: {source}\nলক্ষ্য: {target}\n\nআমদানির আগে বর্তমান মেমরির ব্যাকআপ নেওয়া হবে।', + 'settings.notifications.doNotDisturb': 'ডু নট ডিস্টার্ব', + 'settings.notifications.doNotDisturbDesc': 'নির্দিষ্ট সময়ের জন্য সব বিজ্ঞপ্তি বন্ধ রাখুন', + 'settings.notifications.channelControls': 'চ্যানেল-ভিত্তিক নিয়ন্ত্রণ', + 'settings.notifications.channelControlsDesc': 'প্রতিটি চ্যানেলের জন্য বিজ্ঞপ্তি পছন্দ সেট করুন', + 'settings.features.screenAwareness': 'স্ক্রিন সচেতনতা', + 'settings.features.screenAwarenessDesc': 'অ্যাসিস্ট্যান্টকে আপনার সক্রিয় উইন্ডো দেখতে দিন', + 'settings.features.messaging': 'মেসেজিং', + 'settings.features.messagingDesc': 'চ্যানেল ও মেসেজিং ইন্টিগ্রেশন সেটিংস', + 'settings.features.tools': 'টুলস', + 'settings.features.toolsDesc': 'সংযুক্ত টুলস ও ইন্টিগ্রেশন পরিচালনা করুন', + 'settings.ai.localSetup': 'লোকাল AI সেটআপ', + 'settings.ai.localSetupDesc': 'লোকাল AI মডেল ডাউনলোড ও কনফিগার করুন', + 'settings.ai.llmProvider': 'LLM প্রোভাইডার', + 'settings.ai.llmProviderDesc': 'আপনার AI প্রোভাইডার বেছে নিন ও কনফিগার করুন', + 'clearData.title': 'অ্যাপ ডেটা মুছুন', + 'clearData.warning': 'এটি আপনাকে সাইন আউট করবে এবং নিম্নলিখিত লোকাল ডেটা স্থায়ীভাবে মুছে দেবে:', + 'clearData.bulletSettings': 'অ্যাপ সেটিংস এবং কথোপকথন', + 'clearData.bulletCache': 'সব লোকাল ইন্টিগ্রেশন ক্যাশ ডেটা', + 'clearData.bulletWorkspace': 'ওয়ার্কস্পেস ডেটা', + 'clearData.bulletOther': 'অন্যান্য সব লোকাল ডেটা', + 'clearData.irreversible': 'এই কাজটি পূর্বাবস্থায় ফেরানো যাবে না।', + 'clearData.clearing': 'অ্যাপ ডেটা মোছা হচ্ছে...', + 'clearData.failed': 'ডেটা মুছতে ও লগ আউট করতে ব্যর্থ হয়েছে। আবার চেষ্টা করুন।', + 'clearData.failedLogout': 'লগ আউট করতে ব্যর্থ হয়েছে। আবার চেষ্টা করুন।', + 'clearData.failedPersist': 'অ্যাপ স্টেট মুছতে ব্যর্থ হয়েছে। আবার চেষ্টা করুন।', + 'welcome.title': 'OpenHuman-এ স্বাগতম', + 'welcome.subtitle': + 'আপনার ব্যক্তিগত AI সুপার ইন্টেলিজেন্স। ব্যক্তিগত, সহজ এবং অত্যন্ত শক্তিশালী।', + 'welcome.connectPrompt': 'RPC URL কনফিগার করুন (অ্যাডভান্সড)', + 'welcome.selectRuntime': 'একটি রানটাইম বেছে নিন', + 'welcome.clearingAppData': 'অ্যাপ ডেটা সাফ করা হচ্ছে...', + 'welcome.clearAppDataAndRestart': 'অ্যাপ ডেটা সাফ করুন এবং পুনরায় চালু করুন', + 'welcome.clearAppDataWarning': + 'এটি এই ডিভাইসে স্থানীয়ভাবে সংরক্ষিত সিক্রেট এবং অ্যাকাউন্ট মুছে দেয়। আপনার ক্লাউড অ্যাকাউন্ট প্রভাবিত হয় না — আপনি এরপরই আবার সাইন ইন করতে পারবেন।', + 'welcome.resetErrorFallback': + 'অ্যাপ ডেটা মুছতে পারেনি। OpenHuman বন্ধ করে আবার খুলুন, তারপর আবার চেষ্টা করুন।', + 'welcome.signingIn': 'আপনাকে সাইন ইন করা হচ্ছে...', + 'welcome.termsIntro': 'চালিয়ে যাওয়ার মাধ্যমে, আপনি', + 'welcome.termsOfUse': 'শর্তাবলীতে সম্মত হন', + 'welcome.termsJoiner': 'এবং', + 'welcome.privacyPolicy': 'গোপনীয়তা নীতি', + 'welcome.termsOutro': '.', + 'welcome.urlPlaceholder': 'http://localhost:8089', + 'welcome.invalidUrl': 'একটি বৈধ HTTP বা HTTPS URL দিন', + 'welcome.connecting': 'পরীক্ষা করা হচ্ছে', + 'welcome.connect': 'পরীক্ষা করুন', + 'home.greeting': 'শুভ সকাল', + 'home.greetingAfternoon': 'শুভ বিকেল', + 'home.greetingEvening': 'শুভ সন্ধ্যা', + 'home.askAssistant': 'আপনার অ্যাসিস্ট্যান্টকে যেকোনো কিছু জিজ্ঞেস করুন...', + 'home.statusOk': + 'আপনার ডিভাইস সংযুক্ত। সংযোগ সক্রিয় রাখতে অ্যাপটি চালু রাখুন। নিচের বাটন দিয়ে এজেন্টকে মেসেজ করুন।', + 'home.statusBackendOnly': 'ব্যাকএন্ডে পুনরায় সংযোগ হচ্ছে… আপনার এজেন্ট শীঘ্রই আবার পাওয়া যাবে।', + 'home.statusCoreUnreachable': + 'লোকাল কোর সাইডকার সাড়া দিচ্ছে না। OpenHuman ব্যাকগ্রাউন্ড প্রসেস ক্র্যাশ হয়েছে বা শুরু হয়নি।', + 'home.statusInternetOffline': + 'আপনার ডিভাইস এখন অফলাইনে। নেটওয়ার্ক পরীক্ষা করুন বা অ্যাপ রিস্টার্ট করুন।', + 'home.restartCore': 'কোর রিস্টার্ট', + 'home.restartingCore': 'কোর রিস্টার্ট হচ্ছে…', + 'home.themeToggle.toLight': 'লাইট মোডে স্যুইচ করুন', + 'home.themeToggle.toDark': 'ডার্ক মোডে স্যুইচ করুন', + 'home.usageExhaustedTitle': 'আপনার ব্যবহার শেষ হয়ে গেছে', + 'home.usageExhaustedBody': + 'আপাতত আপনার অন্তর্ভুক্ত ব্যবহার শেষ। আরও ধারাবাহিক সক্ষমতা আনলক করতে একটি সাবস্ক্রিপশন শুরু করুন।', + 'home.usageExhaustedCta': 'সাবস্ক্রিপশন শুরু করুন', + 'home.routinesCard': 'আপনার রুটিন', + 'home.routinesActive': '{count}টি সক্রিয়', + 'routines.title': 'তোমার বিদ্বান', + 'routines.subtitle': 'আপনার সহকারী স্বয়ংক্রিয়ভাবে যা কিছু করেন', + 'routines.loading': 'তালিকা লোড করা হচ্ছে...', + 'routines.empty': 'এখনই নেই', + 'routines.emptyHint': + 'আপনার সহকারী কোনো তালিকাতে কাজ করতে পারে — যেমন সকালের সংক্ষিপ্ত বিবরণ অথবা রোজকার তালিকা ।', + 'routines.refresh': 'নতুন করে প্রদর্শন', + 'routines.nextRun': 'পরবর্তী চালনা', + 'routines.lastRunSuccess': 'সর্বশেষ সঞ্চালিত হয়েছে', + 'routines.lastRunFailed': 'শেষ ব্যর্থ হয়েছে', + 'routines.notRunYet': 'এখনো চালাও নি', + 'routines.runNow': 'এখন সঞ্চালন করুন', + 'routines.running': 'চলমান...', + 'routines.viewHistory': 'পূর্ববর্তী তথ্য প্রদর্শন', + 'routines.loadingHistory': 'লোড করা হচ্ছে...', + 'routines.noHistory': 'এখনো কোন ইতিহাস নেই।', + 'routines.statusSuccess': 'সাফল্য', + 'routines.statusError': 'ত্রুটি', + 'routines.showOutput': 'আউটপুট দেখাও', + 'routines.hideOutput': 'আউটপুট আড়াল করা হবে', + 'routines.toggleEnabled': 'এই ব্যবস্থা নিষ্ক্রিয় অথবা নিষ্ক্রিয় করা যাবে', + 'routines.typeAgent': 'এজেন্ট', + 'routines.typeCommand': 'কমান্ড', + 'nav.routines': 'Routines', + 'chat.newThread': 'নতুন থ্রেড', + 'chat.typeMessage': 'একটি বার্তা টাইপ করুন...', + 'chat.send': 'বার্তা পাঠান', + 'chat.thinking': 'ভাবছে...', + 'chat.noMessages': 'এখনো কোনো বার্তা নেই', + 'chat.startConversation': 'একটি কথোপকথন শুরু করুন', + 'chat.regenerate': 'পুনরায় তৈরি করুন', + 'chat.copyResponse': 'উত্তর কপি করুন', + 'chat.citations': 'উদ্ধৃতি', + 'chat.toolUsed': 'ব্যবহৃত টুল', + 'scope.legacy': 'লেগ্যাসি', + 'scope.user': 'ব্যবহারকারী', + 'scope.project': 'প্রজেক্ট', + 'skills.title': 'সংযোগ', + 'skills.search': 'সংযোগ খুঁজুন...', + 'skills.noResults': 'কোনো সংযোগ পাওয়া যায়নি', + 'skills.connect': 'সংযুক্ত করুন', + 'skills.disconnect': 'সংযোগ বিচ্ছিন্ন', + 'skills.configure': 'পরিচালনা', + 'skills.connected': 'সংযুক্ত', + 'skills.available': 'পাওয়া যাচ্ছে', + 'skills.addAccount': 'অ্যাকাউন্ট যোগ করুন', + 'skills.channels': 'চ্যানেল', + 'skills.integrations': 'ইন্টিগ্রেশন', + 'skills.integrationsSubtitle': + 'ক্লাউড-ভিত্তিক OAuth সংযোগ — আপনার অ্যাকাউন্ট দিয়ে সাইন ইন করুন এবং Composio টোকেন পরিচালনা করে যাতে এজেন্টরা আপনার পক্ষে পড়তে এবং কাজ করতে পারে। কোনো API কী পরিচালনা করতে হবে না।', 'skills.composio.noApiKeyTitle': 'কোনো Composio API Key কনফিগার করা নেই', 'skills.composio.noApiKeyDescription': 'লোকাল মোডে আপনার নিজের Composio API key ব্যবহার হয়। এখানে ইন্টিগ্রেশন যুক্ত করার আগে Settings → Advanced → Composio খুলে একটি key যোগ করুন।', 'skills.composio.noApiKeyCta': 'সেটিংসে খুলুন', - 'channels.localManagedUnavailable': 'লোকাল ব্যবহারকারীদের জন্য ম্যানেজড চ্যানেল উপলভ্য নয়।', + 'skills.tabs.composio': 'Composio', + 'skills.tabs.channels': 'চ্যানেল', + 'skills.tabs.mcp': 'MCP সার্ভার', + 'skills.tabs.runners': 'Runners', + 'memory.title': 'মেমোরি', + 'memory.search': 'মেমোরি খুঁজুন...', + 'memory.noResults': 'কোনো মেমোরি পাওয়া যায়নি', + 'memory.empty': + 'এখনো কোনো মেমোরি নেই। আপনি যত ইন্টারঅ্যাক্ট করবেন, মেমোরি স্বয়ংক্রিয়ভাবে তৈরি হবে।', + 'memory.tab.memory': 'মেমোরি', + 'memory.tab.tasks': 'এজেন্ট টাস্ক', + 'memory.tab.tasksDescription': + 'টাস্ক তৈরি করুন এবং ট্র্যাক করুন — আপনার নিজের কাজের তালিকা এবং এজেন্টরা কথোপকথন জুড়ে যে বোর্ডগুলি তৈরি করে।', + 'memory.tab.subconscious': 'সাবকনশাস', + 'memory.tab.dreams': 'স্বপ্ন', + 'memory.tab.calls': 'কল', + 'memory.tab.diagram': 'Diagram', + 'memory.tab.centrality': 'Centrality', + 'memory.tab.settings': 'সেটিংস', + 'memory.analyzeNow': 'এখনই বিশ্লেষণ করুন', + 'graphCentrality.title': 'জ্ঞান গ্রাফ', + 'graphCentrality.intro': + 'আপনার মেমরি গ্রাফের উপর প্রদর্শিত পেজের ছবি- এবং সংযোগকারী সত্তার সাথে সংযুক্ত একটি সংযুক্ত চক্রের সংযোগ রয়েছে, যা একটি raw ফ্রিকোয়েন্সি গণনা প্রকাশ করতে পারে না।', + 'graphCentrality.loading': 'কেন্দ্রীয় অবস্থা...', + 'graphCentrality.errorPrefix': 'রেখাচিত্র লোড করতে ব্যর্থ:%s', + 'graphCentrality.retry': 'পুনরায় চেষ্টা করুন', + 'graphCentrality.empty': 'কোনো জ্ঞান নেই এখনো গ্রাফ।', + 'graphCentrality.emptyHint': + 'সহকারী রেকর্ড আপনার সম্পর্কে তথ্য হিসাবে, সবচেয়ে সংযুক্ত সত্ত্বা এখানে থাকবে।', + 'graphCentrality.namespaceLabel': 'নেম-স্পেস', + 'graphCentrality.namespaceAll': 'সমস্ত নেমস্পেস', + 'graphCentrality.metricEntities': 'কর্ম', + 'graphCentrality.metricConnections': 'সংযোগ', + 'graphCentrality.metricClusters': 'স্তবক', + 'graphCentrality.clustersCaption': 'xqxkx জিনোমের সবচেয়ে বড় স্তর হল xq1xqx', + 'graphCentrality.approximateBadge': 'অবধি', + 'graphCentrality.approximateTitle': 'সম্পূর্ণ বিচ্ছিন্ন করার পূর্বে ক্যাপ বন্ধ করা হয়েছে', + 'graphCentrality.rankedHeading': 'প্রভাব দ্বারা টপ', + 'graphCentrality.colRank': '#', + 'graphCentrality.colEntity': 'স্বত্বা', + 'graphCentrality.colInfluence': 'প্রভাব', + 'graphCentrality.colLinks': 'লিঙ্ক', + 'graphCentrality.bridgeBadge': 'স্বয়ংক্রিয়', + 'graphCentrality.bridgeTitle': 'Connector — এর লিংক গণনায় আরও প্রভাবশালী', + 'graphCentrality.degreeTitle': 'xqxqx × xx11x এর জন্য', + 'memoryTree.status.title': 'মেমরি ট্রি', + 'memoryTree.status.autoSyncLabel': 'স্বয়ংক্রিয়-sync', + 'memoryTree.status.autoSyncDescription': + 'নতুন অভিযান থামাতে বিরতি দাও। এখানে বিদ্যমান উইকি অনুসন্ধানের জন্য অপেক্ষা করছে।', + 'memoryTree.status.statusTile': 'অবস্থা', + 'memoryTree.status.lastSyncTile': 'সর্বশেষ সুসংগতি', + 'memoryTree.status.totalChunksTile': 'সর্বমোট', + 'memoryTree.status.wikiSizeTile': 'উইকি মাপ', + 'memoryTree.status.statusRunning': 'চলমান', + 'memoryTree.status.statusPaused': 'সাময়িক বিরতি চলছে', + 'memoryTree.status.statusSyncing': 'সুসংগতি', + 'memoryTree.status.statusError': 'ত্রুটি', + 'memoryTree.status.statusIdle': 'নিষ্ক্রিয়', + 'memoryTree.status.never': 'কখনো নয়', + 'memoryTree.status.fetchError': 'মেমরি প্রাপ্ত করতে ব্যর্থ', + 'memoryTree.status.retry': 'পুনরায় চেষ্টা করুন', + 'memoryTree.status.toggleFailed': 'স্বয়ংক্রিয়ভাবে সনাক্ত করা সম্ভব হয়নি', + 'memoryTree.status.justNow': 'এখন', + 'memoryTree.status.secondsAgo': 'xqxqx পূর্বে', + 'memoryTree.status.minuteAgo': '১ মিনিট আগে', + 'memoryTree.status.minutesAgo': 'xqxqx মিনিট আগে', + 'memoryTree.status.hourAgo': '১ ঘন্টা আগে', + 'memoryTree.status.hoursAgo': 'Xqxqx+1 পূর্বে', + 'memoryTree.status.dayAgo': '১ দিন পূর্বে', + 'memoryTree.status.daysAgo': 'xqxqx প্রচেষ্টা করুন', + 'alerts.title': 'সতর্কতা', + 'alerts.empty': 'এখনো কোনো সতর্কতা নেই', + 'alerts.markAllRead': 'সব পঠিত চিহ্নিত করুন', + 'alerts.unread': 'অপঠিত', + 'rewards.title': 'পুরস্কার', + 'rewards.referrals': 'রেফারেল', + 'rewards.coupons': 'রিডিম', 'rewards.localUnavailable': 'লোকাল লগইনে কোনো রিওয়ার্ড, কুপন বা রেফারেল ক্রেডিট মেলে না। রিওয়ার্ড পেতে লগ আউট করে একটি OpenHuman অ্যাকাউন্ট দিয়ে সাইন ইন করুন।', 'rewards.localUnavailableCta': 'অ্যাকাউন্ট সেটিংস খুলুন', + 'rewards.credits': 'ক্রেডিট', + 'rewards.referralCode': 'আপনার রেফারেল কোড', + 'rewards.copyCode': 'কোড কপি করুন', + 'rewards.share': 'শেয়ার', + 'onboarding.welcome': 'হ্যালো। আমি OpenHuman।', + 'onboarding.welcomeDesc': + 'আপনার সুপার-ইন্টেলিজেন্ট AI অ্যাসিস্ট্যান্ট যা আপনার কম্পিউটারে চলে। ব্যক্তিগত, সহজ এবং অত্যন্ত শক্তিশালী।', + 'onboarding.context': 'কন্টেক্সট সংগ্রহ', + 'onboarding.contextDesc': 'প্রতিদিন ব্যবহার করা টুলস ও সার্ভিস সংযুক্ত করুন।', + 'onboarding.localAI': 'লোকাল AI', + 'onboarding.localAIDesc': 'আপনার মেশিনে চলা একটি লোকাল AI মডেল সেটআপ করুন।', + 'onboarding.chatProvider': 'চ্যাট প্রোভাইডার', + 'onboarding.chatProviderDesc': 'আপনার অ্যাসিস্ট্যান্টের সাথে কীভাবে যোগাযোগ করবেন তা বেছে নিন।', + 'onboarding.referral': 'রেফারেল', + 'onboarding.referralDesc': 'যদি রেফারেল কোড থাকে তা প্রয়োগ করুন।', + 'onboarding.finish': 'সেটআপ সম্পন্ন', + 'onboarding.finishDesc': 'সব প্রস্তুত! OpenHuman ব্যবহার শুরু করুন।', + 'onboarding.skip': 'এড়িয়ে যান', + 'onboarding.getStarted': 'শুরু করুন', + 'onboarding.runtimeChoice.title': 'আপনি কীভাবে OpenHuman চালাতে চান?', + 'onboarding.runtimeChoice.subtitle': + 'আপনার জন্য উপযুক্ত সেটআপ বেছে নিন। পরে সেটিংসে পরিবর্তন করা যাবে।', + 'onboarding.runtimeChoice.cloud.title': 'সহজ', + 'onboarding.runtimeChoice.cloud.tagline': 'OpenHuman সব কিছু পরিচালনা করবে।', + 'onboarding.runtimeChoice.cloud.f1': 'বিল্ট-ইন নিরাপত্তা', + 'onboarding.runtimeChoice.cloud.f2': 'ব্যবহার আরও দীর্ঘ করতে টোকেন কম্প্রেশন', + 'onboarding.runtimeChoice.cloud.f3': 'একটি সাবস্ক্রিপশনে সব মডেল', + 'onboarding.runtimeChoice.cloud.f4': 'API কী পরিচালনার ঝামেলা নেই', + 'onboarding.runtimeChoice.cloud.f5': 'সেটআপ করা সহজ', + 'onboarding.runtimeChoice.custom.title': 'কাস্টম রান', + 'onboarding.runtimeChoice.custom.tagline': 'নিজের কী আনুন। সম্পূর্ণ নিয়ন্ত্রণ আপনার হাতে।', + 'onboarding.runtimeChoice.custom.f1': 'প্রায় সব কিছুর জন্য API কী প্রয়োজন', + 'onboarding.runtimeChoice.custom.f2': 'আপনার বিদ্যমান সার্ভিস পুনরায় ব্যবহার করে', + 'onboarding.runtimeChoice.custom.f3': 'সব লোকালে চালালে বিনামূল্যে হতে পারে', + 'onboarding.runtimeChoice.custom.f4': 'বেশি সেটআপ, বেশি নিয়ন্ত্রণ', + 'onboarding.runtimeChoice.custom.f5': 'পাওয়ার ইউজার ও ডেভেলপারদের জন্য সেরা', + 'onboarding.runtimeChoice.cloud.creditHighlight': 'চেষ্টা করতে $1 বিনামূল্যে ক্রেডিট', + 'onboarding.runtimeChoice.continueCloud': 'সহজ দিয়ে চালিয়ে যান', + 'onboarding.runtimeChoice.continueCustom': 'কাস্টম দিয়ে চালিয়ে যান', + 'onboarding.runtimeChoice.recommended': 'প্রস্তাবিত', + 'onboarding.apiKeys.title': 'আপনার API কী যোগ করুন', + 'onboarding.apiKeys.subtitle': + 'এখনই পেস্ট করুন বা এড়িয়ে গিয়ে পরে Settings › AI-এ যোগ করুন। কীগুলো এই ডিভাইসে এনক্রিপ্ট করে সংরক্ষিত থাকে।', + 'onboarding.apiKeys.openaiLabel': 'OpenAI API কী', + 'onboarding.apiKeys.openaiPlaceholder': 'sk-...', + 'onboarding.apiKeys.openaiOauthHint': + 'ChatGPT Plus/Pro (সাবস্ক্রিপশন) বা একটি OpenAI API কী ব্যবহার করুন — উভয়ের প্রয়োজন নেই।', + 'onboarding.apiKeys.openaiOauthOpening': 'সাইন-ইন খোলা হচ্ছে...', + 'onboarding.apiKeys.finishSignIn': 'ChatGPT সাইন-ইন শেষ করুন', + 'onboarding.apiKeys.orApiKey': 'বা API কী', + 'onboarding.apiKeys.anthropicLabel': 'Anthropic API কী', + 'onboarding.apiKeys.anthropicPlaceholder': 'sk-ant-...', + 'onboarding.apiKeys.saveError': 'কীটি সংরক্ষণ করা যায়নি। দয়া করে যাচাই করে আবার চেষ্টা করুন।', + 'onboarding.apiKeys.skipForNow': 'এখনের জন্য এড়িয়ে যান', + 'onboarding.apiKeys.continue': 'সংরক্ষণ করে চালিয়ে যান', + 'onboarding.apiKeys.saving': 'সংরক্ষণ হচ্ছে…', + 'onboarding.custom.stepperInference': 'ইনফারেন্স', + 'onboarding.custom.stepperVoice': 'ভয়েস', + 'onboarding.custom.stepperOAuth': 'OAuth', + 'onboarding.custom.stepperSearch': 'সার্চ', + 'onboarding.custom.stepperEmbeddings': 'Embeddings', + 'onboarding.custom.stepperMemory': 'মেমোরি', + 'onboarding.custom.stepCounter': 'ধাপ {n} / {total}', + 'onboarding.custom.defaultTitle': 'ডিফল্ট', + 'onboarding.custom.defaultSubtitle': 'OpenHuman আপনার হয়ে পরিচালনা করবে।', + 'onboarding.custom.configureTitle': 'কনফিগার', + 'onboarding.custom.configureSubtitle': 'আমি কী ব্যবহার করব তা বেছে নেব।', + 'onboarding.custom.progressAriaLabel': 'অনবোর্ডিং অগ্রগতি', + 'onboarding.custom.continue': 'চালিয়ে যান', + 'onboarding.custom.back': 'পেছনে', + 'onboarding.custom.finish': 'সেটআপ সম্পন্ন', + 'onboarding.custom.configureLater': + 'অনবোর্ডিং শেষে এটি কনফিগার করতে পারবেন। সম্পন্ন হলে সংশ্লিষ্ট সেটিংস পেজে নিয়ে যাওয়া হবে।', + 'onboarding.custom.openSettings': 'সেটিংসে খুলুন', + 'onboarding.custom.inference.title': 'ইনফারেন্স (টেক্সট)', + 'onboarding.custom.inference.subtitle': + 'কোন ল্যাঙ্গুয়েজ মডেল আপনার প্রশ্নের উত্তর দেবে এবং এজেন্ট চালাবে?', + 'onboarding.custom.inference.defaultDesc': + 'OpenHuman প্রতিটি ওয়ার্কলোড একটি সেন্সিবল ডিফল্ট মডেলে রুট করে। কোনো কী বা সেটআপ নেই।', + 'onboarding.custom.inference.configureDesc': + 'নিজের OpenAI বা Anthropic কী আনুন। আমরা সব টেক্সট-ভিত্তিক কাজে এটি ব্যবহার করি।', + 'onboarding.custom.voice.title': 'ভয়েস', + 'onboarding.custom.voice.subtitle': 'ভয়েস মোডের জন্য স্পিচ-টু-টেক্সট এবং টেক্সট-টু-স্পিচ।', + 'onboarding.custom.voice.defaultDesc': + 'OpenHuman ম্যানেজড STT/TTS সহ আসে যা সরাসরি কাজ করে। কিছু সেটআপ করতে হবে না।', + 'onboarding.custom.voice.configureDesc': + 'নিজের ElevenLabs / OpenAI Whisper / ইত্যাদি ব্যবহার করুন। Settings › Voice-এ কনফিগার করুন।', + 'onboarding.custom.oauth.title': 'সংযোগ (OAuth)', + 'onboarding.custom.oauth.subtitle': + 'Gmail, Slack, Notion এবং OAuth প্রয়োজন এমন অন্যান্য সংযুক্ত সার্ভিস।', + 'onboarding.custom.oauth.defaultDesc': + 'OpenHuman একটি ম্যানেজড Composio ওয়ার্কস্পেস চালায়। পরে প্রতিটি সার্ভিস সংযুক্ত করতে এক ক্লিক।', + 'onboarding.custom.oauth.configureDesc': + 'নিজের Composio অ্যাকাউন্ট / API কী আনুন। Settings › Connections-এ কনফিগার করুন।', + 'onboarding.custom.search.title': 'ওয়েব সার্চ', + 'onboarding.custom.search.subtitle': 'OpenHuman আপনার হয়ে কীভাবে ওয়েব সার্চ করে।', + 'onboarding.custom.search.defaultDesc': + 'OpenHuman ম্যানেজড সার্চ ব্যাকএন্ড ব্যবহার করে। কোনো কী লাগে না।', + 'onboarding.custom.search.configureDesc': + 'নিজের সার্চ প্রোভাইডার কী আনুন (Tavily, Brave ইত্যাদি)। Settings › Tools-এ কনফিগার করুন।', + 'onboarding.custom.embeddings.title': 'Embeddings', + 'onboarding.custom.embeddings.subtitle': + 'OpenHuman কীভাবে সিমান্টিক মেমোরি অনুসন্ধানের জন্য ভেক্টর এম্বেডিং তৈরি করে।', + 'onboarding.custom.embeddings.defaultDesc': + 'OpenHuman একটি পরিচালিত এম্বেডিং সেবা ব্যবহার করে। কোনো API কী প্রয়োজন নেই।', + 'onboarding.custom.embeddings.configureDesc': + 'আপনার নিজস্ব এম্বেডিং প্রোভাইডার ব্যবহার করুন (OpenAI, Voyage, Ollama, ইত্যাদি)।', + 'onboarding.custom.memory.title': 'মেমোরি', + 'onboarding.custom.memory.subtitle': + 'OpenHuman কীভাবে আপনার কন্টেক্সট, পছন্দ ও পূর্ববর্তী কথোপকথন মনে রাখে।', + 'onboarding.custom.memory.defaultDesc': + 'OpenHuman স্বয়ংক্রিয়ভাবে মেমোরি স্টোরেজ ও রিট্রিভাল পরিচালনা করে। কিছু সেটআপ করতে হবে না।', + 'onboarding.custom.memory.configureDesc': + 'মেমোরি নিজে পরীক্ষা, এক্সপোর্ট বা মুছুন। Settings › Memory-এ কনফিগার করুন।', + 'accounts.addAccount': 'অ্যাকাউন্ট যোগ করুন', + 'accounts.manageAccounts': 'অ্যাকাউন্ট পরিচালনা', + 'accounts.noAccounts': 'কোনো অ্যাকাউন্ট সংযুক্ত নেই', + 'accounts.connectAccount': 'শুরু করতে একটি অ্যাকাউন্ট সংযুক্ত করুন', + 'accounts.agent': 'এজেন্ট', + 'accounts.respondQueue': 'রেসপন্ড কিউ', + 'accounts.disconnect': 'সংযোগ বিচ্ছিন্ন', + 'accounts.disconnectConfirm': 'আপনি কি এই অ্যাকাউন্ট সংযোগ বিচ্ছিন্ন করতে চান?', + 'accounts.disconnectClearMemory': 'এই উৎস থেকে মেমোরিও মুছুন', + 'accounts.disconnectClearMemoryHint': + 'এই সংযোগের সাথে যুক্ত স্থানীয় মেমোরি চিরতরে মুছে ফেলা হবে।', + 'accounts.searchAccounts': 'অ্যাকাউন্ট খুঁজুন...', + 'channels.title': 'চ্যানেল', + 'channels.configure': 'চ্যানেল কনফিগার করুন', + 'channels.setup': 'সেটআপ', + 'channels.noChannels': 'কোনো চ্যানেল কনফিগার করা হয়নি', + 'channels.localManagedUnavailable': 'লোকাল ব্যবহারকারীদের জন্য ম্যানেজড চ্যানেল উপলভ্য নয়।', + 'channels.addChannel': 'চ্যানেল যোগ করুন', + 'channels.status.connected': 'সংযুক্ত', + 'channels.status.disconnected': 'সংযোগ বিচ্ছিন্ন', + 'channels.status.error': 'ত্রুটি', + 'channels.status.configuring': 'কনফিগার হচ্ছে', + 'channels.defaultMessaging': 'ডিফল্ট মেসেজিং চ্যানেল', + 'webhooks.title': 'ওয়েবহুক', + 'webhooks.create': 'Webhook তৈরি করুন', + 'webhooks.noWebhooks': 'কোনো webhook কনফিগার করা হয়নি', + 'webhooks.url': 'URL', + 'webhooks.secret': 'সিক্রেট', + 'webhooks.events': 'ইভেন্ট', + 'webhooks.archiveDirectory': 'আর্কাইভ ডিরেক্টরি', + 'webhooks.todayFile': 'আজকের ফাইল', + 'invites.title': 'আমন্ত্রণ', + 'invites.create': 'আমন্ত্রণ তৈরি করুন', + 'invites.noInvites': 'কোনো মুলতুবি আমন্ত্রণ নেই', + 'invites.code': 'আমন্ত্রণ কোড', + 'invites.copyLink': 'লিংক কপি করুন', + 'invites.generate': 'সরান', + 'invites.generating': 'আমন্ত্রণ তৈরি করুন', + 'invites.refreshing': 'জেনারেট করা হচ্ছে...', + 'invites.loading': '[N_18_8] রিফ্রেশ করা হচ্ছে... আমন্ত্রণগুলি লোড হচ্ছে...', + 'invites.copyCodeAria': 'আমন্ত্রণ কোড অনুলিপি করুন', + 'invites.revokeAria': 'আমন্ত্রণ প্রত্যাহার করুন', + 'invites.usedUp': 'ব্যবহৃত হয়েছে', + 'invites.uses': 'ব্যবহারগুলি: _____PH', + 'invites.expiresOn': 'মেয়াদ শেষ হবে {date}', + 'invites.empty': 'এখনো কোনো আমন্ত্রণ নেই', + 'invites.emptyHint': 'অন্যদের সাথে শেয়ার করার জন্য একটি আমন্ত্রণ কোড তৈরি করুন', + 'invites.revokeTitle': 'আমন্ত্রণ কোড প্রত্যাহার করুন', + 'invites.revokePromptPrefix': 'আপনি কি নিশ্চিত যে আপনি আমন্ত্রণ কোড প্রত্যাহার করতে চান', + 'invites.revokeWarning': + 'এই আমন্ত্রণ কোডটি আর বৈধ থাকবে না এবং দলে যোগ দিতে ব্যবহার করা যাবে না।', + 'invites.revoking': 'প্রত্যাহার করা হচ্ছে...', + 'invites.revokeAction': 'আমন্ত্রণ প্রত্যাহার করুন', + 'invites.failedGenerate': 'আমন্ত্রণ তৈরি করতে ব্যর্থ হয়েছে', + 'invites.failedRevoke': 'আমন্ত্রণ প্রত্যাহার করতে ব্যর্থ হয়েছে', + 'team.refreshingMembers': 'সদস্যদের রিফ্রেশ করা হচ্ছে...', + 'team.loadingMembers': 'সদস্য লোড হচ্ছে...', + 'team.memberCount': 'PH__18N_SEP_92731 সদস্য', + 'team.memberCountPlural': '{count} সদস্য', + 'team.you': '(আপনি)', + 'team.removeAria': 'সরান {name}', + 'team.noMembers': 'কোনো সদস্য পাওয়া যায়নি', + 'team.removeTitle': 'দলের সদস্যকে সরান', + 'team.removePromptPrefix': 'আপনি কি টিম থেকে', + 'team.removePromptSuffix': 'কে সরানোর বিষয়ে নিশ্চিত?', + 'team.removeWarning': 'তারা টিম এবং সমস্ত টিম রিসোর্সে অ্যাক্সেস হারাবে।', + 'team.removing': 'সরানো হচ্ছে...', + 'team.removeAction': 'সদস্য সরান', + 'team.changeRoleTitle': 'সদস্যের ভূমিকা পরিবর্তন করুন', + 'team.changeRolePrompt': '{name}-এর ভূমিকা {oldRole} থেকে {newRole}-এ পরিবর্তন করবেন?', + 'team.changeRoleAdminGrant': + 'এটি তাদের দলের সদস্যদের পরিচালনা করার ক্ষমতাসহ সম্পূর্ণ অ্যাডমিন অনুমতি দেবে।', + 'team.changeRoleAdminRemove': + 'এটি তাদের অ্যাডমিন অনুমতি সরিয়ে দেবে এবং তারা আর দল পরিচালনা করতে পারবে না।', + 'team.changing': 'পরিবর্তন হচ্ছে...', + 'team.changeRoleAction': 'ভূমিকা পরিবর্তন করুন', + 'team.failedChangeRole': 'ভূমিকা পরিবর্তন করতে ব্যর্থ হয়েছে', + 'team.failedRemoveMember': 'সদস্য সরাতে ব্যর্থ হয়েছে', + 'devOptions.title': 'অ্যাডভান্সড', + 'devOptions.diagnostics': 'ডায়াগনস্টিক্স', + 'devOptions.diagnosticsDesc': 'সিস্টেম স্বাস্থ্য, লগ এবং পারফরম্যান্স মেট্রিক্স', + 'devOptions.toolPolicyDiagnosticsDesc': 'টুল- মেকআপ, নীতি পোস্ট, xqxqxs, এবং সম্প্রতি ব্যবহৃত', + 'devOptions.toolPolicyDiagnostics.loading': 'লোড করা হচ্ছে...', + 'devOptions.toolPolicyDiagnostics.unavailable': 'ডায়াগনস্টিক উপলব্ধ নয়', + 'devOptions.toolPolicyDiagnostics.posture.title': 'পলিসি পোস্টিং', + 'devOptions.toolPolicyDiagnostics.posture.autonomy': 'স্বয়ংক্রিয়রূপে ব্যবহৃত:', + 'devOptions.toolPolicyDiagnostics.posture.workspaceOnly': 'শুধুমাত্র কর্মক্ষেত্র:', + 'devOptions.toolPolicyDiagnostics.posture.maxActionsPerHour': + 'ম্যাক্স এক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সক্সক্সক্স:', + 'devOptions.toolPolicyDiagnostics.posture.approvalMediumRisk': 'উপস্থিত ঝুঁকি:', + 'devOptions.toolPolicyDiagnostics.posture.blockHighRisk': 'সর্বাধিক গুরুত্বের মাত্রা:', + 'devOptions.toolPolicyDiagnostics.inventory.title': 'আরম্ভ', + 'devOptions.toolPolicyDiagnostics.inventory.totalTools': 'মোট সরঞ্জাম', + 'devOptions.toolPolicyDiagnostics.inventory.enabledTools': 'সক্রিয় টুল-টিপ', + 'devOptions.toolPolicyDiagnostics.inventory.mcpStdioTools': 'xqxqx stdio টুল', + 'devOptions.toolPolicyDiagnostics.inventory.jsonRpcTools': 'xqxqx - xx1x2x টুল', + 'devOptions.toolPolicyDiagnostics.mcpAllowlists.title': 'xqxqx সার্ভারে অনুমোদন করে', + 'devOptions.toolPolicyDiagnostics.mcpAllowlists.summary': 'সক্রিয়: xqxqx সার্ভার', + 'devOptions.toolPolicyDiagnostics.mcpAllowlists.unnamed': '<নামহীন>', + 'devOptions.toolPolicyDiagnostics.mcpAllowlists.allowDeny': 'xqxqx মোড অগ্রাহ্য করা হবে=x1x1xX1', + 'devOptions.toolPolicyDiagnostics.mcpWriteAudit.title': 'Xqxqx লিখন ব্যবস্থা', + 'devOptions.toolPolicyDiagnostics.mcpWriteAudit.summary': 'সক্রিয়: xqxqx সর্বশেষ (২৪: xx1x)', + 'devOptions.toolPolicyDiagnostics.recentBlocked.title': 'সম্প্রতি ব্যবহৃত কল', + 'devOptions.toolPolicyDiagnostics.recentBlocked.empty': 'সংযোগ বিচ্ছিন্ন করা হয়েছে', + 'devOptions.toolPolicyDiagnostics.redactedSurfaces.title': 'পুনরাবৃত্তিমূলক পৃষ্ঠ', + 'devOptions.toolPolicyDiagnostics.redactedSurfaces.summary': + 'লেখার সময় মাপ: xqxqxqx নিয়ন্ত্রণ প্রক্রিয়া: xqx1x1xkx2x', + 'devOptions.debugPanels': 'ডিবাগ প্যানেল', + 'devOptions.debugPanelsDesc': 'ফিচার ফ্ল্যাগ, স্টেট ইন্সপেকশন এবং ডিবাগিং টুলস', + 'devOptions.webhooks': 'ওয়েবহুকগুলি', + 'devOptions.webhooksDesc': 'Webhook ইন্টিগ্রেশন কনফিগার ও পরীক্ষা করুন', + 'devOptions.memoryInspection': 'মেমোরি ইন্সপেকশন', + 'devOptions.memoryInspectionDesc': 'মেমোরি এন্ট্রি ব্রাউজ, কোয়েরি ও পরিচালনা করুন', + 'voice.pushToTalk': 'পুশ টু টক', + 'voice.recording': 'রেকর্ড হচ্ছে...', + 'voice.processing': 'প্রক্রিয়া হচ্ছে...', + 'voice.languageHint': 'ভাষা', + 'misc.rehydrating': 'আপনার ডেটা লোড হচ্ছে...', + 'misc.checkingServices': 'সার্ভিস পরীক্ষা হচ্ছে...', + 'misc.serviceUnavailable': 'সার্ভিস পাওয়া যাচ্ছে না', + 'misc.somethingWentWrong': 'কিছু একটা ভুল হয়েছে', + 'misc.tryAgainLater': 'পরে আবার চেষ্টা করুন।', + 'misc.restartApp': 'অ্যাপ রিস্টার্ট করুন', + 'misc.updateAvailable': 'আপডেট পাওয়া গেছে', + 'misc.updateNow': 'এখনই আপডেট করুন', + 'misc.updateLater': 'পরে', + 'misc.downloading': 'ডাউনলোড হচ্ছে...', + 'misc.installing': 'ইনস্টল হচ্ছে...', + 'misc.beta': + 'OpenHuman এখন আর্লি বেটায় আছে। যেকোনো মতামত বা বাগ রিপোর্ট করুন — প্রতিটি রিপোর্ট আমাদের দ্রুত এগিয়ে যেতে সাহায্য করে।', + 'misc.betaFeedback': 'ফিডব্যাক পাঠান', + 'mnemonic.title': 'রিকভারি ফ্রেজ', + 'mnemonic.warning': 'এই শব্দগুলো ক্রমানুসারে লিখে নিরাপদ স্থানে সংরক্ষণ করুন।', + 'mnemonic.copyWarning': + 'আপনার রিকভারি ফ্রেজ কখনো শেয়ার করবেন না। এই শব্দগুলো দিয়ে যে কেউ আপনার অ্যাকাউন্টে প্রবেশ করতে পারবে।', + 'mnemonic.copied': 'রিকভারি ফ্রেজ ক্লিপবোর্ডে কপি হয়েছে', + 'mnemonic.reveal': 'ফ্রেজ দেখুন', + 'mnemonic.revealPhrase': 'পুনরুদ্ধার বাক্যাংশ দেখান', + 'mnemonic.hidden': 'রিকভারি ফ্রেজ লুকানো আছে', + 'privacy.title': 'গোপনীয়তা ও নিরাপত্তা', + 'privacy.description': 'বাহ্যিক সার্ভিসে পাঠানো ডেটার স্বচ্ছতা রিপোর্ট।', + 'privacy.empty': 'কোনো বাহ্যিক ডেটা স্থানান্তর শনাক্ত হয়নি।', + 'privacy.whatLeavesComputer': 'আপনার কম্পিউটার থেকে কী বাইরে যায়', + 'privacy.loading': 'গোপনীয়তার বিবরণ লোড হচ্ছে...', + 'privacy.loadError': + 'লাইভ গোপনীয়তা তালিকা লোড করা যায়নি। নিচের অ্যানালিটিক্স নিয়ন্ত্রণ এখনো কাজ করছে।', + 'privacy.noCapabilities': 'বর্তমানে কোনো ক্যাপাবিলিটি ডেটা মুভমেন্ট প্রকাশ করে না।', + 'privacy.sentTo': 'পাঠানো হয়েছে', + 'privacy.leavesDevice': 'ডিভাইস ছেড়ে যায়', + 'privacy.staysLocal': 'লোকালে থাকে', + 'privacy.anonymizedAnalytics': 'অ্যানোনিমাইজড অ্যানালিটিক্স', + 'privacy.shareAnonymizedData': 'অ্যানোনিমাইজড ব্যবহার ডেটা শেয়ার করুন', + 'privacy.shareAnonymizedDataDesc': + 'বেনামী ক্র্যাশ রিপোর্ট ও ব্যবহার অ্যানালিটিক্স শেয়ার করে OpenHuman উন্নত করতে সাহায্য করুন। সব ডেটা সম্পূর্ণ বেনামী — কোনো ব্যক্তিগত তথ্য, বার্তা, ওয়ালেট কী বা সেশন তথ্য কখনো সংগ্রহ করা হয় না।', + 'privacy.meetingFollowUps': 'মিটিং ফলো-আপ', + 'privacy.autoHandoffMeet': 'Google Meet ট্রান্সক্রিপ্ট স্বয়ংক্রিয়ভাবে অর্কেস্ট্রেটরে পাঠান', + 'privacy.autoHandoffMeetDesc': + 'Google Meet কল শেষ হলে, OpenHuman-এর অর্কেস্ট্রেটর ট্রান্সক্রিপ্ট পড়তে এবং বার্তা ড্রাফট করা, ফলো-আপ নির্ধারণ করা বা সংযুক্ত Slack ওয়ার্কস্পেসে সারসংক্ষেপ পোস্ট করার মতো কাজ করতে পারে। ডিফল্টে বন্ধ।', + 'privacy.analyticsDisclaimer': + 'সব অ্যানালিটিক্স ও বাগ রিপোর্ট সম্পূর্ণ বেনামী। সক্রিয় থাকলে, আমরা শুধু ক্র্যাশ তথ্য, ডিভাইসের ধরন এবং ত্রুটির ফাইল লোকেশন সংগ্রহ করি। আমরা কখনো আপনার বার্তা, সেশন ডেটা, ওয়ালেট কী, API কী বা ব্যক্তিগত তথ্য অ্যাক্সেস করি না। যেকোনো সময় এই সেটিং পরিবর্তন করা যাবে।', + 'settings.about.version': 'ভার্সন', + 'settings.about.updateAvailable': 'পাওয়া গেছে', + 'settings.about.softwareUpdates': 'সফটওয়্যার আপডেট', + 'settings.about.lastChecked': 'শেষ পরীক্ষা', + 'settings.about.checking': 'পরীক্ষা হচ্ছে...', + 'settings.about.checkForUpdates': 'আপডেট পরীক্ষা করুন', + 'settings.about.releases': 'রিলিজ', + 'settings.about.releasesDesc': 'GitHub-এ রিলিজ নোট ও আগের বিল্ড দেখুন।', + 'settings.about.openReleases': 'GitHub রিলিজ খুলুন', + 'settings.about.connection': 'সংযোগ', + 'settings.about.connectionMode': 'মোড', + 'settings.about.connectionModeLocal': 'স্থানীয়', + 'settings.about.connectionModeCloud': 'ক্লাউড', + 'settings.about.connectionModeUnset': 'নির্বাচিত হয়নি', + 'settings.about.serverUrl': 'সার্ভার URL', + 'settings.about.serverUrlUnavailable': 'অনুপলব্ধ', + 'settings.about.connectionHelperLocal': + 'অ্যাপ্লিকেশন চালুর সময় xqx1qx শেল-এ null র‍্যাপেড হয়। প্রারম্ভ হওয়া অবধি এই পোর্টটি নির্বাচন করা হয়েছে, তাই এই xqxqxqx সহযোগে আরম্ভ করা হয় ।', + 'settings.about.connectionHelperCloud': + 'রিমোটের সাথে সংযুক্ত। এটি বুট করা অথবা মেঘের মোড দ্বারা পরিবর্তন করা হবে।', + 'settings.heartbeat.title': 'হার্টবিট এবং লুপস', + 'settings.heartbeat.desc': 'ব্যাকরণ কালের সিডিউলিং এবং লুপ ম্যাপ পরীক্ষা করে দেখুন ।', + 'settings.ledgerUsage.title': 'ইউসেজ লেজার', + 'settings.ledgerUsage.desc': 'সাম্প্রতিক ক্রেডিট খরচ, বাজেটের গণিত, এবং পটভূমি API পড়া বাজেট।', + 'settings.costDashboard.title': 'বিভাজনের স্থান', + 'settings.costDashboard.desc': '৭ দিনের মতো সময় কাটা আর সাইনবোর্ড সব জায়গায় জ্বলতে থাকে।', + 'settings.costDashboard.sevenDayCost': '৭ দিনের মূল্য', + 'settings.costDashboard.sevenDayTokens': '৭ দিনের ব্যবহার', + 'settings.costDashboard.totalSpend': '৭ দিনের মত', + 'settings.costDashboard.monthlyPace': 'মাসিক গতি', + 'settings.costDashboard.budgetLimit': 'বিট- এর সীমা', + 'settings.costDashboard.utilization': 'নিক্তি', + 'settings.costDashboard.modelBreakdown': 'সংখ্যা:', + 'settings.costDashboard.model': 'মডেল', + 'settings.costDashboard.provider': 'পরিসেবা উপলব্ধকারী', + 'settings.costDashboard.cost': 'ব্যয়', + 'settings.costDashboard.tokens': 'টোকেন', + 'settings.costDashboard.requests': 'অনুরোধ', + 'settings.costDashboard.percentOfTotal': 'সর্বমোট%s', + 'settings.costDashboard.inputTokens': 'ইনপুট', + 'settings.costDashboard.outputTokens': 'আউটপুট', + 'settings.costDashboard.budgetNormal': 'ট্র্যাকে', + 'settings.costDashboard.budgetWarning': 'সতর্কবার্তা', + 'settings.costDashboard.budgetExceeded': 'বাজেট', + 'settings.costDashboard.noBudget': 'সময়সীমা নির্ধারিত নেই', + 'settings.costDashboard.noData': 'গত ৭ দিন ধরে কোন খরচ রেকর্ড করা হয়নি।', + 'settings.costDashboard.noModels': 'গত ৭ দিনে কোনো মডেল কর্ম হয়নি।', + 'settings.costDashboard.loading': 'ড্যাশবোর্ড লোড করা হচ্ছে...', + 'settings.costDashboard.disabledHint': + 'কনফিগ- এর ড্যাশবোর্ড নিষ্ক্রিয় করা হয়েছে। এক্স- অক্ষের সাথে ( xxxqx) সক্রিয় করুন = xx1xqxXqx সক্রিয় করুন।', + 'settings.costDashboard.subtitle': + 'লাইভ সময় কাটান আর গোছগাছে পুড়ে যায়। কয়েক সেকেন্ডের মধ্যে বার নতুন করে নতুন করে তৈরি করা হয় — কোনো পৃষ্ঠা পুনরায় লোড করার প্রয়োজন নেই ।', + 'settings.costDashboard.summaryAriaLabel': 'অবস্থানের সংক্ষিপ্ত তথ্য', + 'settings.costDashboard.lastSevenDays': 'গত ৭ দিন', + 'settings.costDashboard.utilizationOf': 'এর', + 'settings.costDashboard.thisMonth': 'এই মাসে', + 'settings.costDashboard.monthlyPaceHint': + 'বর্তমানে প্রতিদিনের রানটাইমে (ভলডেক্স ৩০) মাসিক খরচ হয়।', + 'settings.costDashboard.budgetLimitHint': 'মাসিক বাজেট এক্সqxxxxx থেকে পাঠ করা হয়েছে।', + 'settings.costDashboard.dailyTarget': 'দৈনিক লক্ষ্য', + 'settings.costDashboard.today': 'আজ', + 'settings.costDashboard.todayBadge': 'TODAY', + 'settings.costDashboard.unknownProvider': '—', + 'settings.costDashboard.justNow': 'এখন', + 'settings.costDashboard.secondsAgo': 'xqxqx পূর্বে', + 'settings.costDashboard.minutesAgo': 'এক্স.qxqx কনফিগারেশন', + 'settings.costDashboard.hoursAgo': 'এক্স.qxqx হর', + 'settings.costDashboard.daysAgo': 'Xqxqx পূর্বে', + 'settings.costDashboard.updated': 'আপডেট করা হয়েছে', + 'settings.costDashboard.refresh': 'নতুন করে প্রদর্শন', + 'settings.costDashboard.utcNote': 'xqxkx-এ অতিবাহিত দিন', + 'settings.costDashboard.stackedNote': 'ইনপুট + আউটপুট স্ট্যাক', + 'settings.costDashboard.modelBreakdownHint': 'গত ৭ দিনে পৃথকীকরণ।', + 'settings.costDashboard.noDataHint': 'এর ফলে, আপনার সঙ্গে যোগাযোগ করুন ।', + 'settings.search.title': 'সার্চ ইঞ্জিন', + 'settings.search.menuDesc': + 'Xqx1q1x - নিজ হাতে অনুসন্ধান অথবা তার নিজের উপলব্ধকারীর সাথে যোগাযোগ স্থাপন করুন। Xqxqxkey কী- র সাথে একযোগে কাজ করার জন্য', + 'settings.search.description': + 'এজেন্ট যে সার্চ ইঞ্জিন ব্যবহার করে তা বেছে নিন, অথবা সার্চ টুলগুলো সম্পূর্ণভাবে নিষ্ক্রিয় করুন। Managed OpenHuman-এর ব্যাকএন্ড ব্যবহার করে (কোনো সেটআপ নেই)। Parallel, Brave, এবং Querit আপনার API কী ব্যবহার করে সরাসরি আপনার মেশিন থেকে চলে।', + 'settings.search.engineAria': 'সার্চ ইঞ্জিন', + 'settings.search.engineDisabledLabel': 'Disabled', + 'settings.search.engineDisabledDesc': + 'এজেন্ট প্রেক্ষাপট এবং উপলব্ধ টুল তালিকা থেকে সার্চ টুলগুলি সরিয়ে দিন।', + 'settings.search.engineManagedLabel': 'OpenHuman পরিচালিত', + 'settings.search.engineManagedDesc': 'ডিফল্ট xqx1x ব্যাক-এন্ড দ্বারা রুট', 'settings.search.localManagedUnavailable': 'লোকাল ব্যবহারকারীদের জন্য OpenHuman Managed সার্চ উপলভ্য নয়। ওয়েব সার্চ চালু করতে আপনার নিজের Parallel বা Brave API key যোগ করুন।', + 'settings.search.engineParallelLabel': 'Parallel', + 'settings.search.engineParallelDesc': + 'সরাসরি xqxxxxxxxxxxxxqx; অনুসন্ধান, চ্যাট, গবেষণা, সমৃদ্ধ টুল।', + 'settings.search.engineBraveLabel': 'Brave অনুসন্ধান', + 'settings.search.engineBraveDesc': + 'সরাসরি Xqx1xxxxyxxxxxqxxxxxxxxx;: ওয়েব, সংবাদ, ছবি এবং ভিডিও টুল', + 'settings.search.engineQueritLabel': 'প্রতিদ্বন্ধিতা', + 'settings.search.engineQueritDesc': + 'সরাসরি কিউআরটিএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সক্স: সাইট, টাইম সীমা, এবং ভাষা ফিল্টার।', + 'settings.search.statusConfigured': 'কনফিগার করা', + 'settings.search.statusNeedsKey': 'API কী প্রয়োজন', + 'settings.search.fallbackToManaged': + 'কোনো কি কনফিগার করা হয়নি — অনুসন্ধান করা হবে একটি কি সংরক্ষণের পূর্বে এই কি দ্বারা নির্ধারিত হয়নি।', + 'settings.search.getApiKey': 'API কী পান', + 'settings.search.save': 'সংরক্ষণ করুন', + 'settings.search.clear': 'সাফ', + 'settings.search.show': 'দেখান', + 'settings.search.hide': 'লুকান', + 'settings.search.statusSaving': 'সংরক্ষণ করা হচ্ছে...', + 'settings.search.statusSaved': 'সংরক্ষিত।', + 'settings.search.statusError': 'ব্যর্থ হয়েছে', + 'settings.search.parallelKeyLabel': 'Parallel API কী', + 'settings.search.braveKeyLabel': 'Brave অনুসন্ধান API কী', + 'settings.search.queritKeyLabel': 'কিউ- টি xxqx কি', + 'settings.search.placeholderStored': '•••••••• (সংরক্ষিত)', + 'settings.search.placeholderParallel': 'pk_...', + 'settings.search.placeholderBrave': 'BSA...', + 'settings.search.placeholderQuerit': 'কিউ- টি xxqx কি', + 'settings.search.allowedSitesLabel': 'ওয়েবসাইটের অনুমতি দেওয়া হয়েছে', + 'settings.search.allowedSitesHint': + 'যেসব হোস্ট অ্যাসিস্ট্যান্ট খুলতে ও পড়তে পারবে — ওয়েব ফেচ এবং ব্রাউজার টুলের মাধ্যমে — প্রতি লাইনে একটি করে, যেমন reuters.com। একটি হোস্ট তার সাবডোমেইনগুলোও অন্তর্ভুক্ত করে। ওয়েব সার্চ নিজে এই তালিকা দ্বারা সীমাবদ্ধ নয়।', + 'settings.search.allowedSitesAllOn': + 'সহকারীটি যেকোন পাবলিক ওয়েবসাইট খুলতে পারে। স্থানীয় এবং ব্যক্তিগত ঠিকানা প্রতিরোধ করা হয়েছে।', + 'settings.search.allowedSitesPlaceholder': 'xqx+x\nএক্স.qx1x\nxqx2x', + 'settings.search.allowedSitesSave': 'ওয়েবসাইট সংরক্ষণ করো', + 'settings.search.accessModeAria': 'ওয়েব মোড', + 'settings.search.accessAllowAll': 'সকল অনুমোদন করা হবে', + 'settings.search.accessCustom': 'স্বনির্ধারিত', + 'settings.search.accessBlockAll': 'প্রতিরোধ করো', + 'settings.search.accessBlockAllHint': + 'সকল ওয়েব প্রবেশাধিকার ব্লক করা হয়েছে- সহকারী কোন ওয়েবসাইট খুলতে বা পড়তে পারে না।', + 'settings.embeddings.title': 'এমবেডিংস', + 'settings.embeddings.description': + 'কোন এমবেডিং প্রদানকারী মেমরিকে সিমান্টিক সার্চের জন্য ভেক্টরে রূপান্তর করে তা চয়ন করুন। প্রদানকারী, মডেল বা মাত্রা পরিবর্তন করলে সংরক্ষিত ভেক্টর অবৈধ হয়ে যায় এবং সম্পূর্ণ মেমরি রিসেট প্রয়োজন।', + 'settings.embeddings.providerAria': 'এমবেডিং প্রদানকারী', + 'settings.embeddings.statusConfigured': 'কনফিগার করা হয়েছে', + 'settings.embeddings.statusNeedsKey': 'API কী প্রয়োজন', + 'settings.embeddings.apiKeyLabel': '{provider} API কী', + 'settings.embeddings.placeholderStored': '•••••••• (সঞ্চিত)', + 'settings.embeddings.placeholderKey': 'আপনার API কী পেস্ট করুন…', + 'settings.embeddings.keyStoredEncrypted': 'আপনার API কী এই ডিভাইসে এনক্রিপ্ট করে সংরক্ষিত আছে।', + 'settings.embeddings.show': 'দেখান', + 'settings.embeddings.hide': 'লুকান', + 'settings.embeddings.save': 'সংরক্ষণ', + 'settings.embeddings.clear': 'মুছুন', + 'settings.embeddings.model': 'মডেল', + 'settings.embeddings.dimensions': 'মাত্রা', + 'settings.embeddings.customEndpoint': 'কাস্টম এন্ডপয়েন্ট', + 'settings.embeddings.customModelPlaceholder': 'মডেলের নাম', + 'settings.embeddings.customDimsPlaceholder': 'মাত্রা', + 'settings.embeddings.applyCustom': 'প্রয়োগ', + 'settings.embeddings.testConnection': 'সংযোগ পরীক্ষা', + 'settings.embeddings.testing': 'পরীক্ষা হচ্ছে…', + 'settings.embeddings.testSuccess': 'সংযুক্ত — {dims} মাত্রা', + 'settings.embeddings.testFailed': 'ব্যর্থ: {error}', + 'settings.embeddings.saving': 'সংরক্ষণ হচ্ছে…', + 'settings.embeddings.saved': 'সংরক্ষিত।', + 'settings.embeddings.errorPrefix': 'ব্যর্থ', + 'settings.embeddings.wipeTitle': 'মেমরি ভেক্টর রিসেট করবেন?', + 'settings.embeddings.wipeBody': + 'এমবেডিং প্রদানকারী, মডেল বা মাত্রা পরিবর্তন করলে সমস্ত সংরক্ষিত মেমরি ভেক্টর মুছে যাবে। পুনরুদ্ধার কাজ করার আগে মেমরি পুনর্নির্মাণ করতে হবে। এটি পূর্বাবস্থায় ফেরানো যাবে না।', + 'settings.embeddings.cancel': 'বাতিল', + 'settings.embeddings.confirmWipe': 'মুছুন এবং প্রয়োগ করুন', + 'settings.embeddings.setupTitle': '{provider} সেটআপ', + 'settings.embeddings.saveAndSwitch': 'সংরক্ষণ এবং স্যুইচ', + 'settings.embeddings.optional': 'ঐচ্ছিক', + 'settings.embeddings.vectorSearchDisabled': + 'ভেক্টর অনুসন্ধান নিষ্ক্রিয় করা হয়েছে । মনে রাখবেন যে, শুধু শব্দ ও ছাদের সঙ্গে মিল রেখে শব্দ ব্যবহার করা হবে ।', + 'settings.embeddings.clearKey': 'API কী মুছুন', + 'pages.settings.ai.embeddings': 'এমবেডিংস', + 'pages.settings.ai.embeddingsDesc': 'মেমরি পুনরুদ্ধারের জন্য ভেক্টর এনকোডিং মডেল', + 'mcp.alphaBadge': 'আলফা', + 'mcp.alphaBannerText': + 'Xqxqx সার্ভার চালু হয়েছে। স্মিথারি রেজিস্ট্রি, প্রবাহ ইনস্টল, এবং টুলগুলো হয়তো মুক্ত হওয়ার ক্ষেত্রে ভুল অবস্থা অথবা পরিবর্তন করতে পারে ।', + 'mcp.toolList.noTools': 'কোনো টুল উপলব্ধ নেই৷', + 'mcp.setup.secretDialog.title': 'MCP সেটআপ — এন্টার সিক্রেট', + 'mcp.setup.secretDialog.bodyPrefix': 'MCP সেটআপ এজেন্ট প্রয়োজন', + 'mcp.setup.secretDialog.bodySuffix': + '। আপনার মান সরাসরি কোর প্রসেসে পাঠানো হয় এবং AI কথোপকথনে কখনো প্রবেশ করে না।', + 'mcp.setup.secretDialog.inputLabel': 'মান', + 'mcp.setup.secretDialog.inputPlaceholder': 'এখানে আটকে দিন', + 'mcp.setup.secretDialog.show': 'দেখান', + 'mcp.setup.secretDialog.hide': 'লুকান', + 'mcp.setup.secretDialog.submit': 'জমা দিন', + 'mcp.setup.secretDialog.cancel': 'বাতিল', + 'mcp.setup.secretDialog.submitting': 'জমা দেওয়া হচ্ছে', + 'mcp.setup.secretDialog.errorPrefix': '18_18 জমা দিতে ব্যর্থ হয়েছে:', + 'mcp.setup.secretDialog.privacyNote': + 'স্থানীয় xqxqx গোপন টেবিলের মধ্যে সংরক্ষণ করা হয়েছে। কোনো অস্বীকৃত অথবা কোনো মডেল পাঠানো হয়নি।', + 'devices.betaBadge': 'বিটা', + 'devices.betaText': + 'এই ফিচারটি এখন বেটায় আছে। iOS ফোনকে রিমোট ক্লায়েন্ট হিসেবে ব্যবহার করতে এই OpenHuman-এর সাথে পেয়ার করুন।', 'devices.comingSoonDescription': 'ডিভাইস পেয়ারিং শীঘ্রই আসছে। এই পেজে iPhone পেয়ারিং এবং সংযুক্ত ডিভাইস ম্যানেজ করা যাবে।', + 'devices.title': 'ডিভাইস', + 'devices.pairIphone': 'পেয়ার iPhone', + 'devices.noPaired': 'কোনো পেয়ার করা ডিভাইস নেই', + 'devices.emptyState': 'এই OpenHuman সেশনে সংযোগ করতে আপনার iPhone এ একটি QR code স্ক্যান করুন।', + 'devices.devicePairedTitle': 'ডিভাইস পেয়ার করা', + 'devices.devicePairedMessage': 'iPhone সফলভাবে সংযুক্ত হয়েছে৷', + 'devices.deviceRevokedTitle': 'ডিভাইস প্রত্যাহার করা হয়েছে', + 'devices.deviceRevokedMessage': '{label} সরানো হয়েছে৷', + 'devices.revokeFailedTitle': 'প্রত্যাহার করা ব্যর্থ হয়েছে', + 'devices.online': 'অনলাইন', + 'devices.offline': 'অফলাইন', + 'devices.lastSeenNever': 'কখনোই', + 'devices.lastSeenNow': 'এইমাত্র', + 'devices.lastSeenMinutes': '{count}মিনিট আগে', + 'devices.lastSeenHours': '{count}ঘণ্টা আগে', + 'devices.lastSeenDays': '{count}দিন আগে', + 'devices.revoke': 'প্রত্যাহার করুন', + 'devices.revokeAria': 'প্রত্যাহার করুন {label}', + 'devices.confirmRevokeTitle': 'ডিভাইস প্রত্যাহার করবেন?', + 'devices.confirmRevokeBody': '{label} আর সংযোগ করতে পারবে না। এটি পূর্বাবস্থায় ফেরানো যাবে না।', + 'devices.loadFailed': 'ডিভাইসগুলি লোড করতে ব্যর্থ হয়েছে: {message}', + 'devices.pairModal.title': 'পেয়ার iPhone', + 'devices.pairModal.loading': 'পেয়ারিং কোড তৈরি করা হচ্ছে...', + 'devices.pairModal.instructions': + 'আপনার iPhone-এ OpenHuman অ্যাপ খুলুন এবং এই কোডটি স্ক্যান করুন।', + 'devices.pairModal.expiresIn': 'কোডের মেয়াদ ~{count} মিনিটে শেষ হবে', + 'devices.pairModal.expiresInPlural': 'কোডের মেয়াদ ~{count} মিনিটে শেষ হবে', + 'devices.pairModal.showDetails': 'বিবরণ দেখান', + 'devices.pairModal.hideDetails': 'বিবরণ লুকান', + 'devices.pairModal.channelId': 'চ্যানেল আইডি', + 'devices.pairModal.pairingUrl': 'পেয়ারিং URL', + 'devices.pairModal.expiredTitle': 'QR code মেয়াদ শেষ হয়ে গেছে', + 'devices.pairModal.expiredBody': 'পেয়ার করা চালিয়ে যেতে একটি নতুন কোড তৈরি করুন৷', + 'devices.pairModal.generateNewCode': 'নতুন কোড তৈরি করুন', + 'devices.pairModal.successTitle': 'iPhone এর সাথে পেয়ার করা', + 'devices.pairModal.autoClose': 'স্বয়ংক্রিয়ভাবে বন্ধ হচ্ছে...', + 'devices.pairModal.errorPrefix': 'পেয়ারিং তৈরি করতে ব্যর্থ হয়েছে: {message}', + 'devices.pairModal.errorTitle': 'কিছু ভুল হয়েছে', + 'devices.pairModal.copyUrl': 'অনুলিপি', + 'mcp.catalog.searchAria': 'Smithery ক্যাটালগ অনুসন্ধান', + 'mcp.catalog.searchPlaceholder': 'Smithery ক্যাটালগ অনুসন্ধান করুন...', + 'mcp.catalog.loadFailed': 'ক্যাটালগ করতে ব্যর্থ হয়েছে', + 'mcp.catalog.noResults': 'কোনো সার্ভার পাওয়া যায়নি।', + 'mcp.catalog.noResultsFor': '"{query}" এর জন্য কোনো সার্ভার পাওয়া যায়নি।', + 'mcp.catalog.loadMore': 'আরও লোড করুন', + 'mcp.configAssistant.title': 'কনফিগারেশন সহকারী', + 'mcp.configAssistant.empty': 'কনফিগারেশন জানার জন্য, বিবিধ বৈশিষ্ট্য অথবা প্রস্তুতির প্রয়োজন।', + 'mcp.configAssistant.suggestedValues': 'প্রস্তাবিত মান:', + 'mcp.configAssistant.valueHidden': '(মান লুকানো)', + 'mcp.configAssistant.applySuggested': 'প্রস্তাবিত মান প্রয়োগ করুন', + 'mcp.configAssistant.reinstallHint': 'এই মানগুলি প্রয়োগ করতে পুনরায় ইনস্টল করুন।', + 'mcp.configAssistant.thinking': 'ভাবছি...', + 'mcp.configAssistant.inputPlaceholder': + 'একটি প্রশ্ন জিজ্ঞাসা করা হবে (আমি যদি এর জন্য জিজ্ঞাসা করি)', + 'mcp.configAssistant.send': 'পাঠান', + 'mcp.configAssistant.failedResponse': 'প্রতিক্রিয়া পেতে ব্যর্থ', + 'mcp.toolList.availableSingular': '{count} টুল উপলব্ধ', + 'mcp.toolList.availablePlural': '{count} টুল উপলব্ধ', + 'mcp.toolList.tryTool': 'চেষ্টা করুন', + 'mcp.toolList.tryToolAria': 'xqxqx এর জন্য সঞ্চালনযোগ্য খেলার নাম', + 'mcp.playground.title': 'xqxqx চালান', + 'mcp.playground.close': 'খেলা বন্ধ করুন', + 'mcp.playground.inputSchema': 'ইনপুট স্কিমা', + 'mcp.playground.argsLabel': 'আর্গুমেন্ট', + 'mcp.playground.argsHelp': + 'ইনপুট স্কিমার ক্ষেত্রে xqxqx প্রয়োগ করা হবে। ফাঁকা ইনপুট পদ্ধতি {} অনুযায়ী চিহ্নিত।', + 'mcp.playground.runShortcut': 'CD/Ctrl+S কমান্ড সঞ্চালন করুন', + 'mcp.playground.format': 'বিন্যাস', + 'mcp.playground.invalidJson': 'অবৈধ xqxqx', + 'mcp.playground.run': 'সরঞ্জাম সঞ্চালন', + 'mcp.playground.running': 'চলমান...', + 'mcp.playground.result': 'ফলাফল', + 'mcp.playground.resultError': 'একটি ত্রুটি দেখা দিয়েছে', + 'mcp.playground.copyResult': 'ফলাফল অনুলিপি করুন', + 'mcp.playground.copied': 'প্রতিলিপি', + 'mcp.playground.history': 'ব্রাউজ-ইতিহাস', + 'mcp.playground.historyEmpty': 'এই সেশন- এ এখনো কোন অনুরোধ নয়।', + 'mcp.playground.historyLoad': 'ভার', + 'mcp.playground.unexpectedError': 'পরিসেবার অজানা ত্রুটি।', + 'mcp.catalog.deployed': 'স্থাপন করা হয়েছে', + 'mcp.catalog.installCount': '{count} ইনস্টল করা হয়েছে', + 'app.update.dismissNotification': 'আপডেট বাতিল করা হয়নি', + 'bootCheck.rpcAuthSuffix': 'প্রতি RPC এ।', + 'app.localAiDownload.expandAria': 'ডাউনলোডের অগ্রগতি প্রসারিত করুন', + 'app.localAiDownload.collapseAria': 'ডাউনলোডের অগ্রগতি আড়াল করুন', + 'app.localAiDownload.dismissAria': 'ডাউনলোড বিজ্ঞপ্তি খারিজ করুন', + 'mobile.nav.ariaLabel': 'মোবাইল নেভিগেশন', + 'progress.stepsAria': 'অগ্রগতির ধাপ', + 'progress.stepAria': 'ধাপ {total} এর {current}', + 'workspace.vaultsTitle': 'নলেজ ভল্ট', + 'workspace.vaultsDesc': + 'একটি স্থানীয় ফোল্ডারে পয়েন্ট করুন; ফাইলগুলিকে টুকরো টুকরো করে মেমরিতে মিরর করা হয়।', + 'calls.title': 'কল', + 'calls.comingSoonBody': 'AI-সহায়তা কলগুলি শীঘ্রই আসছে৷ সাথে থাকুন।', + 'art.rotatingTetrahedronAria': 'ইনভার্টেড টেট্রাহেড্রন মহাকাশযান ঘোরানো', + 'mcp.installed.title': 'ইনস্টল করা হয়েছে', + 'mcp.installed.browseCatalog': 'ক্যাটালগ ব্রাউজ করুন', + 'mcp.installed.empty': 'এখনো কোনো MCP সার্ভার ইনস্টল করা হয়নি।', + 'mcp.installed.toolSingular': '{count} টুল', + 'mcp.installed.toolPlural': '{count} টুল', + 'mcp.health.title': 'স্বাস্থ্য', + 'mcp.health.summaryAria': 'Xqxqx সংযোগের সংক্ষিপ্ত বিবরণ', + 'mcp.health.connectedCount': 'xqxqx সংযুক্ত করা হয়েছে', + 'mcp.health.connectingCount': 'এক্সqxqx সংযোগ ব্যবস্থা', + 'mcp.health.errorCount': 'Xqx+x সংক্রান্ত ত্রুটি', + 'mcp.health.disconnectedCount': 'xqxqx উজ্জ্বলতা%a', + 'mcp.health.retryAll': 'সর্বধরনের ছবি', + 'mcp.health.retryAllAria': 'সকল Xqxqx সংক্রান্ত ত্রুটি Xqx সার্ভার পুনরায় চেষ্টা করুন', + 'mcp.health.disconnectAll': 'সকল বিচ্ছিন্ন করুন (qxick)', + 'mcp.health.disconnectAllAria': 'সব xqxqx সংযুক্ত করা হবে', + 'mcp.health.disconnectConfirm.title': 'সকল xqxqx সার্ভার বন্ধ করা হবে কি?', + 'mcp.health.disconnectConfirm.body': + 'এটা xqxqx- এর সংযোগ বিচ্ছিন্ন করা হবে বর্তমানে xqx1x সার্ভার। ইনস্টল করা কনফিগারেশন ও গোপনীয়তাগুলি সংরক্ষিত হবে; কোনো সার্ভার দ্বারা পুনরায় সংযোগ করা যাবে ।', + 'mcp.health.disconnectConfirm.cancel': 'বাতিল', + 'mcp.health.disconnectConfirm.confirm': 'সকল বিচ্ছিন্ন করুন', + 'mcp.health.opErrorGeneric': 'বুস্টার অপারেশন ব্যর্থ হয়েছে। লগ দেখুন।', + 'mcp.health.bulkPartialFailure': 'xqx1x সার্ভার দ্বারা xqxqx কনফিগারেশন ব্যর্থ হয়েছে। লগ দেখুন।', + 'mcp.installed.search.landmarkAria': 'xqx সার্ভার ইনস্টল করা হয়েছে', + 'mcp.installed.search.inputAria': 'নাম দ্বারা xqxqx সার্ভার ইনস্টল করা হয়েছে', + 'mcp.installed.search.placeholder': 'ফিল্টার সার্ভার...', + 'mcp.installed.search.clearAria': 'ফিল্টার মুছে ফেলুন', + 'mcp.installed.search.countMatches': 'xqx1x সার্ভার', + 'mcp.installed.search.noMatches': 'কোনো সার্ভারের সাথে " xqxqx" মিল পাওয়া যায়নি।', + 'mcp.inventory.openButton': 'আরম্ভ', + 'mcp.inventory.openAria': 'Sharpicizxqx প্যানেল খুলুন', + 'mcp.inventory.title': 'যোজিত xxqxyxridgyrary', + 'mcp.inventory.subtitle': + 'আপনার ইনস্টলxqxqx সার্ভারকে বহনযোগ্য, গোপনীয়-পত্র হিসেবে, অথবা একটি দল থেকে ইম্পোর্ট করুন। গোপনীয় পাওয়ার মান কখনো অন্তর্ভুক্ত করা হয়নি অথবা ইম্পোর্ট করা হয়নি।', + 'mcp.inventory.close': 'প্যানেল বন্ধ করো', + 'mcp.inventory.tablistAria': '[ পাদটীকা]', + 'mcp.inventory.tab.export': 'এক্সপোর্ট করুন', + 'mcp.inventory.tab.import': 'ইম্পোর্ট', + 'mcp.inventory.export.empty': + 'কোনো xqxqx সার্ভার এখনো ইনস্টল করা হয়নি - এক্সপোর্ট করার জন্য কিছু উপস্থিত নেই। ক্যাটালগ থেকে প্রথমে একটি ইনস্টল করুন ।', + 'mcp.inventory.export.privacyTitle': '( ১ করি.', + 'mcp.inventory.export.privacyBody': + 'সার্ভার, যোগ্যতাসম্পন্ন নাম, নাম, নাম, envoxqxqxX1xkxyx, এবং নেস্টেড। গোপনীয় মূল্যবোধ, আপনার মেশিন চিহ্ন, এবং প্রতি মুদ্রণের সময় ইচ্ছে করে ফাঁস হয়ে গেছে।', + 'mcp.inventory.export.serverCount': 'এই প্রদর্শনীতে xqxqx সার্ভার', + 'mcp.inventory.export.copy': 'কপি করুন', + 'mcp.inventory.export.copied': 'প্রতিলিপি', + 'mcp.inventory.export.copyAria': 'প্রদর্শন ( প)', + 'mcp.inventory.export.download': 'ডাউনলোড করা হয়েছে', + 'mcp.inventory.export.downloadAria': 'Xqxqx ফাইল হিসেবে প্রদর্শন করুন', + 'mcp.inventory.import.trustTitle': 'ফাঁকা xqxqx সহযোগে এক্সপোর্ট করা হয়েছে', + 'mcp.inventory.import.trustBody': + 'আপনার প্রতিনিধি নিয়োগকারী একটি Xqxqx সার্ভার। শুধুমাত্র আপনার কাছ থেকে প্রাপ্ত. xq1x1qx এড়িয়ে চলুন। প্রতিটি ইনস্টলের জন্য আপনার স্পষ্ট ক্লিক আবশ্যক; কোনো কিছুই স্বয়ংক্রিয় ইনস্টল করা হয়নি ।', + 'mcp.inventory.import.pasteLabel': 'প্রদর্শন মুছে ফেলুন xqxqx', + 'mcp.inventory.import.pastePlaceholder': + 'এখানে একটি প্রকাশ করুন, অথবা নীচে একটি ফাইল আপলোড করুন ।', + 'mcp.inventory.import.preview': 'প্রাকদর্শন', + 'mcp.inventory.import.clear': 'মুছে ফেলুন', + 'mcp.inventory.import.uploadFile': 'অথবা ফাইল আপলোড অথবা আপলোড করুন', + 'mcp.inventory.import.uploadFileAria': 'একটি ফাইল আপলোড করুন', + 'mcp.inventory.import.fileTooLarge': 'ফাইল অত্যাধিক বড় (২ গিবিবাইটের বেশি)। লোড করতে মানা করছে।', + 'mcp.inventory.import.fileReadFailed': 'ফাইল পড়তে ব্যর্থ।', + 'mcp.inventory.import.parseErrorPrefix': 'বার্তা পার্স করতে ব্যর্থ', + 'mcp.inventory.import.previewHeading': 'প্রাকদর্শন', + 'mcp.inventory.import.previewCounts': + 'xqxqx সার্ভার - xx1x1 নতুন, xxqx কনফিগার করা হয়েছে, xxx2x', + 'mcp.inventory.import.previewEmpty': 'সার্ভারে কোনো সার্ভার উপস্থিত নেই।', + 'mcp.inventory.import.exportedFrom': 'xqxqx থেকে এক্সপোর্ট করা হয়েছে', + 'mcp.inventory.import.exportedAt': 'কে. ডি. ই. ২ ঠিকানা- তালিকা আমদানি করো', + 'mcp.inventory.import.statusNew': 'নতুন', + 'mcp.inventory.import.statusAlreadyInstalled': 'পূর্বেই ইনস্টল করা হয়েছে', + 'mcp.inventory.import.envKeysLabel': 'কী', + 'mcp.inventory.import.install': 'ইনস্টল করুন', + 'mcp.inventory.import.installAria': 'এই প্রদর্শন থেকে xqxqx ইনস্টল করুন', + 'mcp.inventory.import.skipped': 'এড়িয়ে যাও', + 'mcp.inventory.parseError.empty': 'সব ঠিক আছে.', + 'mcp.inventory.parseError.invalidJson': 'অবৈধ xqxqxy', + 'mcp.inventory.parseError.rootNotObject': 'প্রাথমিক পর্যায়ে xqxqx অবজেক্ট হতে হবে।', + 'mcp.inventory.parseError.unsupportedSchema': 'অসমর্থিত স্কিমা এই ফাইল ধারণ করেছিল ।', + 'mcp.inventory.parseError.missingExportedAt': 'অবৈধ অথবা xqxqx ফিল্ড।', + 'mcp.inventory.parseError.missingExportedBy': 'অবৈধ অথবা xqxqx ফিল্ড।', + 'mcp.inventory.parseError.invalidServers': 'অনুপস্থিত অথবা অবৈধ xxqxqx অ্যারে।', + 'mcp.inventory.parseError.serverNotObject': 'একটি সার্ভার এন্ট্রি কোন বস্তু নয়।', + 'mcp.inventory.parseError.serverMissingQualifiedName': 'কোনো সার্ভার এন্ট্রি সনাক্ত করা যায়নি।', + 'mcp.inventory.parseError.serverMissingDisplayName': + 'কোনো সার্ভার এন্ট্রির নাম উল্লেখ করা হয়নি।', + 'mcp.inventory.parseError.serverEnvKeysNotArray': + 'সার্ভারের এনট্রির মধ্যে একটি বিচ্ছিন্ন PGP-কি ক্ষেত্রের মধ্যে উপস্থিত রয়েছে। পরিত্যাগ করা হলে এই মান উপেক্ষা করা হবে না।', + 'mcp.inventory.parseError.serverContainsEnv': + 'একটি সার্ভারের এনট্রিতে একটি Xqxqxqx এর মান রয়েছে। আমদানি করতে অস্বীকার করে — প্রকাশ করা অবশ্যই কেবল ই-মেইল (নাম) বহন করতে হবে, কোন গোপন মূল্যবোধ নয় ।', + 'mcp.inventory.parseError.duplicateQualifiedName': + 'অফ-লাইন অবস্থায় উপস্থিত সর্বোচ্চ সংখ্যা: ( n) প্রতিটি সার্ভারের মধ্যে সবচেয়ে বেশি উপস্থিত থাকা আবশ্যক ।', + 'mcp.tab.loading': 'MCP সার্ভার লোড হচ্ছে...', + 'mcp.tab.emptyDetail': 'একটি সার্ভার বা সারি নির্বাচন করুন।', + 'mcp.install.loadingDetail': 'সার্ভারের বিবরণ লোড হচ্ছে...', + 'mcp.install.back': 'ফিরে যান', + 'mcp.install.title': '{name} ইনস্টল করুন', + 'mcp.install.requiredEnv': 'প্রয়োজনীয় পরিবেশ ভেরিয়েবল', + 'mcp.install.enterValue': 'লিখুন {key}', + 'mcp.install.show': 'দেখান', + 'mcp.install.hide': 'লুকান', + 'mcp.install.configLabel': 'কনফিগ (ঐচ্ছিক JSON)', + 'mcp.install.configPlaceholder': '{"key": "value"}', + 'mcp.install.missingRequired': '"{key}" প্রয়োজন', + 'mcp.install.invalidJson': 'কনফিগ JSON বৈধ নয় JSON', + 'mcp.install.failedDetail': 'সার্ভারের বিবরণ লোড করতে ব্যর্থ', + 'mcp.install.failedInstall': 'ইনস্টল ব্যর্থ হয়েছে', + 'mcp.install.button': 'ইনস্টল করুন', + 'mcp.install.installing': 'ইনস্টল করা হচ্ছে...', + 'mcp.detail.suggestedEnvReady': 'প্রস্তাবিত পরিবেশ মান প্রস্তুত', + 'mcp.detail.suggestedEnvBody': + 'এই সার্ভারে-ইনস্টল করার জন্য পরামর্শ দেওয়া হল: xqxq0x ব্যবহার করুন', + 'mcp.detail.connect': 'সংযোগ করুন', + 'mcp.detail.connecting': 'সংযুক্ত হচ্ছে...', + 'mcp.detail.disconnect': 'সংযোগ বিচ্ছিন্ন করুন', + 'mcp.detail.hideAssistant': 'সহকারী লুকান', + 'mcp.detail.helpConfigure': 'কনফিগার করতে আমাকে সাহায্য করুন', + 'mcp.detail.confirmUninstall': 'আনইনস্টল নিশ্চিত করবেন?', + 'mcp.detail.confirmUninstallAction': 'হ্যাঁ, আনইনস্টল করুন', + 'mcp.detail.uninstall': 'আনইনস্টল', + 'mcp.detail.envVars': 'এনভায়রনমেন্ট ভেরিয়েবল', + 'mcp.detail.tools': 'টুলস', + 'onboarding.skipForNow': 'এখনই এড়িয়ে যান', + 'onboarding.localAI.continueWithCloud': 'ক্লাউডের সাথে চালিয়ে যান', + 'onboarding.localAI.useLocalAnyway': + 'যাইহোক স্থানীয় AI ব্যবহার করুন (আপনার ডিভাইসের জন্য প্রস্তাবিত নয়)', + 'onboarding.localAI.useLocalInstead': + 'পরিবর্তে স্থানীয় AI ব্যবহার করুন (এখনই Ollama সংযোগ করুন)', + 'onboarding.localAI.setupIssue': 'স্থানীয় AI সেটআপ একটি সমস্যার সম্মুখীন হয়েছে', + 'autonomy.title': 'এজেন্ট স্বায়ত্তশাসন', + 'autonomy.maxActionsLabel': 'প্রতি ঘণ্টায় সর্বাধিক অ্যাকশন', + 'autonomy.maxActionsHelp': + 'একজন এজেন্ট প্রতি ঘণ্টায় সর্বোচ্চ কতটি টুল অ্যাকশন চালাতে পারবে। নতুন মান আপনার পরবর্তী চ্যাটে প্রযোজ্য হবে। Cron জব এবং চ্যানেল লিসেনার OpenHuman পুনরায় চালু না করা পর্যন্ত বর্তমান সীমা বজায় রাখবে।', + 'autonomy.statusSaving': 'সংরক্ষণ করা হচ্ছে...', + 'autonomy.statusSaved': 'সংরক্ষিত।', + 'autonomy.statusFailed': 'ব্যর্থ হয়েছে', + 'autonomy.unlimitedNote': 'সীমাহীন — হার সীমিত করা অক্ষম।', + 'autonomy.invalidIntegerMsg': + 'একটি ধনাত্মক পূর্ণসংখ্যা হতে হবে (কোনো সীমা না রাখতে Unlimited প্রিসেট ব্যবহার করুন)।', + 'autonomy.presetUnlimited': 'আনলিমিটেড (ডিফল্ট)', + 'triggers.toggleFailed': '{trigger} এর জন্য {action} ব্যর্থ হয়েছে: {message}', + 'settings.ai.overview': 'AI সিস্টেম ওভারভিউ', + 'settings.ai.configStatus': 'কনফিগারেশন স্ট্যাটাস', + 'settings.ai.fallbackMode': 'ফলব্যাক মোড', + 'settings.ai.loadedFromRuntime': 'রানটাইম থেকে লোড হয়েছে', + 'settings.ai.loadingDuration': 'লোডিং সময়', + 'settings.ai.localRuntime': 'লোকাল মডেল রানটাইম', + 'settings.ai.openManager': 'ম্যানেজার খুলুন', + 'settings.ai.retryDownload': 'ডাউনলোড আবার চেষ্টা করুন', + 'settings.ai.state': 'অবস্থা', + 'settings.ai.targetModel': 'টার্গেট মডেল', + 'settings.ai.download': 'ডাউনলোড', + 'settings.ai.localModelUnavailable': 'লোকাল মডেল স্ট্যাটাস পাওয়া যাচ্ছে না।', + 'settings.ai.soulConfig': 'SOUL পার্সোনা কনফিগারেশন', + 'settings.ai.refreshing': 'রিফ্রেশ হচ্ছে...', + 'settings.ai.refreshSoul': 'SOUL রিফ্রেশ করুন', + 'settings.ai.loadingSoul': 'SOUL কনফিগারেশন লোড হচ্ছে...', + 'settings.ai.identity': 'পরিচয়', + 'settings.ai.personality': 'ব্যক্তিত্ব', + 'settings.ai.safetyRules': 'নিরাপত্তা বিধি', + 'settings.ai.source': 'উৎস', + 'settings.ai.loaded': 'লোড হয়েছে', + 'settings.ai.toolsConfig': 'TOOLS কনফিগারেশন', + 'settings.ai.refreshTools': 'TOOLS রিফ্রেশ করুন', + 'settings.ai.toolsAvailable': 'পাওয়া যাচ্ছে টুলস', + 'settings.ai.tools': 'টুলস', + 'settings.ai.activeSkills': 'সক্রিয় স্কিলস', + 'settings.ai.skills': 'স্কিলস', + 'settings.ai.skillsOverview': 'স্কিলস ওভারভিউ', + 'settings.ai.refreshingAll': 'সব রিফ্রেশ হচ্ছে...', + 'settings.ai.refreshAll': 'সব AI কনফিগারেশন রিফ্রেশ করুন', + 'settings.notifications.suppressAll': 'সব বিজ্ঞপ্তি দমন করুন', + 'settings.notifications.suppressAllDesc': + 'ফোকাস স্টেট নির্বিশেষে এম্বেডেড অ্যাপ থেকে সব OS বিজ্ঞপ্তি টোস্ট ব্লক করুন।', + 'settings.notifications.toggleDnd': 'ডু নট ডিস্টার্ব টগল করুন', + 'settings.notifications.categories': 'ক্যাটাগরি', + 'settings.notifications.categoryFooter': + 'একটি ক্যাটাগরি নিষ্ক্রিয় করলে সেই ধরনের নতুন বিজ্ঞপ্তি বিজ্ঞপ্তি কেন্দ্রে আর দেখাবে না। বিদ্যমান বিজ্ঞপ্তিগুলো পরিষ্কার না করা পর্যন্ত থাকবে।', + 'settings.billing.movedToWeb': 'বিলিং ওয়েবে সরানো হয়েছে', + 'settings.billing.openDashboard': 'বিলিং ড্যাশবোর্ড খুলুন', + 'settings.billing.movedToWebDesc': + 'সাবস্ক্রিপশন পরিবর্তন, পেমেন্ট পদ্ধতি, ক্রেডিট এবং ইনভয়েস এখন ওয়েবে TinyHumans-এ পরিচালনা করা হয়।', + 'settings.billing.backToSettings': 'সেটিংসে ফিরুন', + 'settings.billing.openingBrowser': 'ব্রাউজার খোলা হচ্ছে...', + 'settings.billing.browserNotOpen': 'ব্রাউজার না খুললে উপরের বাটন ব্যবহার করুন।', + 'settings.billing.browserOpenFailed': + 'ব্রাউজার স্বয়ংক্রিয়ভাবে খোলা যায়নি। উপরের বাটন ব্যবহার করুন।', + 'settings.tools.chooseCapabilities': + 'OpenHuman আপনার হয়ে কোন ক্যাপাবিলিটিগুলো ব্যবহার করতে পারবে তা বেছে নিন।', + 'settings.tools.saveChanges': 'পরিবর্তন সংরক্ষণ করুন', + 'settings.tools.preferencesSaved': 'পছন্দ সংরক্ষিত', + 'settings.tools.saveFailed': 'পছন্দ সংরক্ষণ ব্যর্থ। আবার চেষ্টা করুন।', + 'settings.screenAwareness.mode': 'মোড', + 'settings.screenAwareness.allExceptBlacklist': 'ব্ল্যাকলিস্ট ছাড়া সব', + 'settings.screenAwareness.whitelistOnly': 'শুধু হোয়াইটলিস্ট', + 'settings.screenAwareness.screenMonitoring': 'স্ক্রিন মনিটরিং', + 'settings.screenAwareness.saveSettings': 'সেটিংস সংরক্ষণ করুন', + 'settings.screenAwareness.session': 'সেশন', + 'settings.screenAwareness.status': 'স্ট্যাটাস', + 'settings.screenAwareness.active': 'সক্রিয়', + 'settings.screenAwareness.stopped': 'বন্ধ', + 'settings.screenAwareness.remaining': 'অবশিষ্ট', + 'settings.screenAwareness.startSession': 'সেশন শুরু করুন', + 'settings.screenAwareness.stopSession': 'সেশন বন্ধ করুন', + 'settings.screenAwareness.analyzeNow': 'এখনই বিশ্লেষণ করুন', + 'settings.screenAwareness.macosOnly': + 'স্ক্রিন সচেতনতা ডেস্কটপ ক্যাপচার এবং অনুমতি নিয়ন্ত্রণ বর্তমানে শুধু macOS-এ সমর্থিত।', + 'connections.comingSoon': 'শীঘ্রই আসছে', + 'connections.setUp': 'সেটআপ করুন', + 'connections.configured': 'কনফিগার করা হয়েছে', + 'connections.unavailable': 'পাওয়া যাচ্ছে না', + 'connections.checking': 'পরীক্ষা হচ্ছে…', + 'connections.walletConfigured': + 'আপনার রিকভারি ফ্রেজ থেকে লোকাল EVM, BTC, Solana এবং Tron পরিচয় কনফিগার করা হয়েছে।', + 'connections.walletReady': + 'একটি রিকভারি ফ্রেজ থেকে লোকাল EVM, BTC, Solana এবং Tron পরিচয় সেটআপ করুন।', + 'connections.walletError': + 'ওয়ালেট স্ট্যাটাস পরীক্ষা করা যায়নি। রিকভারি ফ্রেজ প্যানেল থেকে আবার চেষ্টা করতে ট্যাপ করুন।', + 'connections.walletChecking': 'ওয়ালেট স্ট্যাটাস পরীক্ষা হচ্ছে...', + 'connections.walletIdentities': 'ওয়ালেট পরিচয়', + 'connections.walletDerived': + 'আপনার রিকভারি ফ্রেজ থেকে লোকালি ডেরাইভ করা এবং শুধু নিরাপদ মেটাডেটা হিসেবে সংরক্ষিত।', + 'connections.privacySecurity': 'গোপনীয়তা ও নিরাপত্তা', + 'connections.privacySecurityDesc': + 'সব ডেটা ও ক্রেডেনশিয়াল জিরো-ডেটা রিটেনশন নীতি সহ লোকালে সংরক্ষিত। আপনার তথ্য এনক্রিপ্ট করা এবং তৃতীয় পক্ষের সাথে কখনো শেয়ার করা হয় না।', + 'channels.status.connecting': 'সংযোগ হচ্ছে', + 'channels.status.notConfigured': 'কনফিগার করা হয়নি', + 'channels.noActiveRoute': 'কোনো সক্রিয় রুট নেই', + 'channels.activeRoute': 'সক্রিয় রুট', + 'channels.loadingDefinitions': 'চ্যানেল ডেফিনিশন লোড হচ্ছে...', + 'channels.channelConnections': 'চ্যানেল সংযোগ', + 'channels.configureAuthModes': 'প্রতিটি মেসেজিং চ্যানেলের জন্য অথ মোড কনফিগার করুন।', + 'channels.configNotAvailable': 'কনফিগারেশন পাওয়া যাচ্ছে না', + 'channels.channel': 'চ্যানেল', + 'devOptions.coreModeNotSet': 'কোর মোড: সেট করা হয়নি', + 'devOptions.coreModeNotSetDesc': + 'বুট-চেক পিকার এখনো নিশ্চিত করা হয়নি। লোকাল বা ক্লাউড বেছে নিতে পিকারে সুইচ মোড ব্যবহার করুন।', + 'devOptions.local': 'লোকাল', + 'devOptions.embeddedCoreSidecar': 'এম্বেডেড কোর সাইডকার', + 'devOptions.sidecarSpawned': 'অ্যাপ লঞ্চে Tauri শেল দ্বারা ইন-প্রসেসে স্প্যান করা হয়েছে।', + 'devOptions.cloud': 'ক্লাউড', + 'devOptions.remoteCoreRpc': 'রিমোট কোর RPC', + 'devOptions.token': 'টোকেন', + 'devOptions.tokenNotSet': 'সেট করা হয়নি — RPC 401 দেবে', + 'devOptions.triggerSentryTest': 'Sentry পরীক্ষা ট্রিগার করুন (স্টেজিং)', + 'devOptions.triggerSentryTestDesc': + 'Sentry পাইপলাইন যাচাই করতে একটি ট্যাগড ত্রুটি পাঠায়। ইস্যু #1072 — যাচাইয়ের পরে সরান।', + 'devOptions.sendTestEvent': 'পরীক্ষা ইভেন্ট পাঠান', + 'devOptions.sending': 'পাঠানো হচ্ছে…', + 'devOptions.eventSent': 'ইভেন্ট পাঠানো হয়েছে', + 'devOptions.sentryDisabled': '(কোনও আইডি নেই — এই বিল্ডে সেন্ট্রি নিষ্ক্রিয় করা হয়েছে)', + 'devOptions.failed': 'ব্যর্থ', + 'devOptions.appLogs': 'অ্যাপ লগ', + 'devOptions.appLogsDesc': + 'রোলিং ডেইলি লগ ফাইল ধারণকারী ফোল্ডার খুলুন। ইস্যু রিপোর্ট করার সময় সর্বশেষ ফাইলটি সংযুক্ত করুন।', + 'devOptions.openLogsFolder': 'লগ ফোল্ডার খুলুন', + 'mnemonic.phraseSaved': 'রিকভারি ফ্রেজ সংরক্ষিত', + 'mnemonic.walletReady': 'মাল্টি-চেইন ওয়ালেট পরিচয় প্রস্তুত। সেটিংসে ফিরছে...', + 'mnemonic.writeDownWords': 'এই', + 'mnemonic.wordsInOrder': + 'শব্দগুলো ক্রমানুসারে লিখে নিরাপদ স্থানে সংরক্ষণ করুন। এই ফ্রেজটি আপনার লোকাল এনক্রিপশন কী এবং EVM, BTC, Solana ও Tron ওয়ালেট পরিচয় সুরক্ষিত করে।', + 'mnemonic.cannotRecover': + 'এই ফ্রেজ হারালে কখনো পুনরুদ্ধার করা যাবে না এবং সম্পূর্ণ আপনার ডিভাইসে রাখা উচিত।', + 'mnemonic.copyToClipboard': 'ক্লিপবোর্ডে কপি করুন', + 'mnemonic.alreadyHavePhrase': 'আমার কাছে ইতিমধ্যে একটি রিকভারি ফ্রেজ আছে', + 'mnemonic.consentSaved': + 'আমি এই ফ্রেজটি সংরক্ষণ করেছি এবং লোকাল ওয়ালেট সেটআপের জন্য এটি ব্যবহারে সম্মতি দিচ্ছি', + 'mnemonic.enterPhraseToRestore': + 'আপনার লোকাল ওয়ালেট পরিচয় পুনরুদ্ধার করতে নিচে আপনার রিকভারি ফ্রেজ দিন, বা যেকোনো ফিল্ডে পুরো ফ্রেজ পেস্ট করুন (নতুন ব্যাকআপের জন্য ১২টি শব্দ; পুরনো ভার্সনের ২৪ শব্দের ফ্রেজও কাজ করে)।', + 'mnemonic.words': 'শব্দ', + 'mnemonic.validPhrase': 'বৈধ রিকভারি ফ্রেজ', + 'mnemonic.generateNewPhrase': 'পরিবর্তে একটি নতুন রিকভারি ফ্রেজ তৈরি করুন', + 'mnemonic.securingData': 'আপনার ডেটা সুরক্ষিত হচ্ছে...', + 'mnemonic.saveRecoveryPhrase': 'রিকভারি ফ্রেজ সংরক্ষণ করুন', + 'mnemonic.userNotLoaded': + 'ব্যবহারকারী লোড হয়নি। দয়া করে আবার সাইন ইন করুন বা পেজ রিফ্রেশ করুন।', + 'mnemonic.invalidPhrase': 'অবৈধ রিকভারি ফ্রেজ। আপনার শব্দগুলো পরীক্ষা করে আবার চেষ্টা করুন।', + 'mnemonic.somethingWentWrong': 'কিছু একটা ভুল হয়েছে। আবার চেষ্টা করুন।', + 'team.failedToCreate': 'টিম তৈরি করতে ব্যর্থ', + 'team.invalidInviteCode': 'অবৈধ বা মেয়াদোত্তীর্ণ আমন্ত্রণ কোড', + 'team.failedToSwitch': 'টিম পরিবর্তন করতে ব্যর্থ', + 'team.failedToLeave': 'টিম ছাড়তে ব্যর্থ', + 'team.role.owner': 'মালিক', + 'team.role.admin': 'অ্যাডমিন', + 'team.role.billingManager': 'বিলিং ম্যানেজার', + 'team.role.member': 'সদস্য', + 'team.active': 'সক্রিয়', + 'team.personalTeam': 'ব্যক্তিগত টিম', + 'team.manageTeam': 'টিম পরিচালনা', + 'team.switching': 'পরিবর্তন হচ্ছে...', + 'team.switch': 'পরিবর্তন করুন', + 'team.leaving': 'ছেড়ে যাচ্ছে...', + 'team.leave': 'ছেড়ে যান', + 'team.yourTeams': 'আপনার টিমগুলো', + 'team.createNewTeam': 'নতুন টিম তৈরি করুন', + 'team.teamName': 'টিমের নাম', + 'team.creating': 'তৈরি হচ্ছে...', + 'team.joinExistingTeam': 'বিদ্যমান টিমে যোগ দিন', + 'team.inviteCode': 'আমন্ত্রণ কোড', + 'team.joining': 'যোগ দেওয়া হচ্ছে...', + 'team.join': 'যোগ দিন', + 'team.leaveTeam': 'টিম ছাড়ুন', + 'team.confirmLeave': 'আপনি কি ছেড়ে যেতে চান', + 'team.leaveWarning': + 'আপনি টিম এবং সব টিম রিসোর্সে অ্যাক্সেস হারাবেন। পুনরায় যোগ দিতে নতুন আমন্ত্রণ প্রয়োজন।', + 'team.management': 'টিম ম্যানেজমেন্ট', + 'team.notFound': 'টিম পাওয়া যায়নি', + 'team.accessDenied': 'অ্যাক্সেস অস্বীকৃত', + 'team.members': 'সদস্য', + 'team.membersDesc': 'দলের সদস্যদের এবং ভূমিকাগুলি পরিচালনা করুন', + 'team.invites': 'আমন্ত্রণগুলি', + 'team.invitesDesc': 'আমন্ত্রণ কোডগুলি তৈরি এবং পরিচালনা করুন', + 'team.settings': 'টিম সেটিংস', + 'team.settingsDesc': 'দলের নাম এবং সেটিংস সম্পাদনা করুন', + 'team.editSettings': 'দলের নাম লিখুন', + 'team.enterName': 'সংরক্ষণ করা হচ্ছে...', + 'team.saving': 'পরিবর্তনগুলি সংরক্ষণ করুন', + 'team.saveChanges': 'টিম মুছুন', + 'team.delete': 'টিম মুছুন', + 'team.deleteDesc': 'টিম মুছুন', + 'team.deleting': 'মুছে ফেলা হচ্ছে...', + 'team.failedToUpdate': 'টিম আপডেট করতে ব্যর্থ হয়েছে', + 'team.failedToDelete': 'দল', + 'team.manageTitle': 'ম্যানেজ করতে ব্যর্থ হয়েছে {name}', + 'team.planCreated': '{plan} পরিকল্পনা • তৈরি করা হয়েছে {date}', + 'team.confirmDelete': 'আপনি কি নিশ্চিত আপনি {name} মুছতে চান?', + 'team.deleteWarning': + 'এই ক্রিয়াটি পূর্বাবস্থায় ফেরানো যাবে না। সমস্ত দলের ডেটা স্থায়ীভাবে মুছে ফেলা হবে।', + 'voice.title': 'ভয়েস ডিক্টেশন', + 'voice.settings': 'ভয়েস সেটিংস', + 'voice.settingsDesc': 'ডিক্টেট করতে এবং সক্রিয় ফিল্ডে টেক্সট ঢোকাতে হটকি ধরে রাখুন।', + 'voice.hotkey': 'হটকি', + 'voice.activationMode': 'অ্যাক্টিভেশন মোড', + 'voice.tapToToggle': 'টগল করতে ট্যাপ করুন', + 'voice.writingStyle': 'লেখার স্টাইল', + 'voice.verbatimTranscription': 'হুবহু ট্রান্সক্রিপশন', + 'voice.naturalCleanup': 'স্বাভাবিক পরিষ্কার', + 'voice.autoStart': 'কোরের সাথে স্বয়ংক্রিয়ভাবে ভয়েস সার্ভার শুরু করুন', + 'voice.customDictionary': 'কাস্টম ডিকশনারি', + 'voice.customDictionaryDesc': + 'স্বীকৃতির নির্ভুলতা উন্নত করতে নাম, প্রযুক্তিগত শব্দ এবং ডোমেন শব্দ যোগ করুন।', + 'voice.addWord': 'একটি শব্দ যোগ করুন...', + 'voice.sttDisabled': + 'লোকাল STT মডেল ডাউনলোড ও প্রস্তুত না হওয়া পর্যন্ত ভয়েস ডিক্টেশন নিষ্ক্রিয়।', + 'voice.openLocalAiModel': 'লোকাল AI মডেল খুলুন', + 'voice.serverRestarted': 'নতুন সেটিংস সহ ভয়েস সার্ভার রিস্টার্ট হয়েছে।', + 'voice.settingsSaved': 'ভয়েস সেটিংস সংরক্ষিত।', + 'voice.serverStarted': 'ভয়েস সার্ভার শুরু হয়েছে।', + 'voice.serverStopped': 'ভয়েস সার্ভার বন্ধ হয়েছে।', + 'voice.saveVoiceSettings': 'ভয়েস সেটিংস সংরক্ষণ করুন', + 'voice.startVoiceServer': 'ভয়েস সার্ভার শুরু করুন', + 'voice.stopVoiceServer': 'ভয়েস সার্ভার বন্ধ করুন', + 'voice.debugTitle': 'ভয়েস ডিবাগ', + 'voice.failedToLoadSettings': 'ভয়েস সেটিংস লোড করতে ব্যর্থ হয়েছে', + 'voice.failedToSaveSettings': 'ভয়েস সেটিংস সংরক্ষণ করতে ব্যর্থ হয়েছে', + 'voice.failedToStartServer': 'ভয়েস সার্ভার শুরু করতে ব্যর্থ হয়েছে', + 'voice.failedToStopServer': 'ভয়েস সার্ভার বন্ধ করতে ব্যর্থ হয়েছে', + 'voice.sttDisabledPrefix': + 'স্থানীয় STT মডেল ডাউনলোড না হওয়া পর্যন্ত ভয়েস ডিকটেশন নিষ্ক্রিয়। ব্যবহার করুন', + 'voice.sttDisabledSuffix': 'বিভাগটি ব্যবহার করুন৷', + 'voice.debug.failedToLoadVoiceDebugData': 'ভয়েস ডিবাগ ডেটা লোড করতে ব্যর্থ হয়েছে', + 'voice.debug.settingsSaved': 'ডিবাগ সেটিংস সংরক্ষণ করা হয়েছে৷', + 'voice.debug.failedToSaveSettings': 'ভয়েস সেটিংস সংরক্ষণ করতে ব্যর্থ হয়েছে', + 'voice.debug.runtimeStatus': 'রানটাইম স্ট্যাটাস', + 'voice.debug.runtimeStatusDesc': 'ভয়েস সার্ভার এবং স্পিচ-টু-টেক্সট ইঞ্জিনের লাইভ ডায়াগনস্টিক।', + 'voice.debug.server': 'সার্ভার', + 'voice.debug.unavailable': 'অনুপলব্ধ', + 'voice.debug.ready': 'প্রস্তুত', + 'voice.debug.notReady': 'প্রস্তুত নয় [[I18N_SEP_92731]', + 'voice.debug.hotkey': 'P_18 কী n/a', + 'voice.debug.notAvailable': 'মোড', + 'voice.debug.mode': 'ট্রান্সক্রিপশন', + 'voice.debug.transcriptions': 'সার্ভারের ত্রুটি', + 'voice.debug.serverError': 'উন্নত সেটিংস', + 'voice.debug.advancedSettings': 'টিউ 18-193 মিটারের নিম্ন স্তরের জন্য উন্নত সেটিংস', + 'voice.debug.advancedSettingsDesc': + 'রেকর্ডিং এবং নীরবতা সনাক্তকরণের জন্য নিম্ন-স্তরের টিউনিং প্যারামিটার।', + 'voice.debug.minimumRecordingSeconds': 'ন্যূনতম রেকর্ডিং সেকেন্ড', + 'voice.debug.silenceThreshold': 'সাইলেন্স থ্রেশহোল্ড (RMS)', + 'voice.debug.silenceThresholdDesc': + 'এই মানের নিচে শক্তির রেকর্ডিংগুলি নীরবতা হিসেবে গণ্য হয় এবং এড়িয়ে যাওয়া হয়। কম মান = আরও সংবেদনশীল।', + 'voice.providers.saved': 'ভয়েস প্রদানকারী সংরক্ষিত।', + 'voice.providers.failedToSave': 'ভয়েস প্রদানকারী সংরক্ষণ করতে ব্যর্থ', + 'voice.providers.ellipsis': '…', + 'voice.providers.installing': 'ইনস্টল করা হচ্ছে', + 'voice.providers.installingBusy': 'ইনস্টল করা হচ্ছে...', + 'voice.providers.reinstallLocally': 'স্থানীয়ভাবে পুনরায় ইনস্টল করুন', + 'voice.providers.repair': 'মেরামত', + 'voice.providers.retryLocally': 'স্থানীয়ভাবে পুনরায় চেষ্টা করুন', + 'voice.providers.installLocally': 'স্থানীয়ভাবে ইনস্টল করুন', + 'voice.providers.whisperReady': 'স্থানীয়ভাবে ইনস্টল করুন [[I18N_731 প্রস্তুত]।', + 'voice.providers.whisperInstallStarted': 'হুইস্পার ইনস্টল শুরু হয়েছে৷', + 'voice.providers.queued': 'সারিবদ্ধ', + 'voice.providers.failedToInstallWhisper': 'হুইস্পার ইনস্টল করতে ব্যর্থ', + 'voice.providers.piperReady': 'পাইপার প্রস্তুত।', + 'voice.providers.piperInstallStarted': 'পাইপার ইনস্টল শুরু হয়েছে', + 'voice.providers.failedToInstallPiper': 'পাইপার ইনস্টল করতে ব্যর্থ হয়েছে', + 'voice.providers.title': 'ভয়েস প্রদানকারী', + 'voice.providers.desc': + 'ট্রান্সক্রিপশন এবং সিনথেসিস কোথায় চলবে তা বেছে নিন। বাইনারি এবং মডেলগুলি আপনার ওয়ার্কস্পেসে ডাউনলোড করতে Install locally বোতাম ব্যবহার করুন। ইনস্টল শেষ হওয়ার আগেই স্থানীয় প্রোভাইডার সংরক্ষণ করা যাবে — কোনো ম্যানুয়াল WHISPER_BIN বা PIPER_BIN সেটআপ প্রয়োজন নেই।', + 'voice.providers.sttProvider': 'স্পিচ-টু-টেক্সট প্রদানকারী', + 'voice.providers.sttProviderAria': 'STT প্রদানকারী', + 'voice.providers.cloudWhisperProxy': 'ক্লাউড (হুইস্পার প্রক্সি)', + 'voice.providers.localWhisper': 'স্থানীয় হুইস্পার', + 'voice.providers.installRequired': '(ইনস্টল করতে হবে)', + 'voice.providers.whisperInstalledTitle': + 'Whisper ইনস্টল করা আছে। পুনরায় ইনস্টল করতে ক্লিক করুন।', + 'voice.providers.whisperDownloadTitle': + 'whisper.cpp এবং GGML মডেল আপনার ওয়ার্কস্পেসে ডাউনলোড করুন।', + 'voice.providers.installed': 'ইনস্টল করা হয়েছে', + 'voice.providers.installFailed': 'ইনস্টল ব্যর্থ হয়েছে', + 'voice.providers.notInstalled': 'ইনস্টল করা হয়নি', + 'voice.providers.whisperModel': 'হুইস্পার মডেল', + 'voice.providers.whisperModelAria': 'হুইস্পার মডেল', + 'voice.providers.whisperModelTiny': 'ছোট (39 MB, দ্রুততম)', + 'voice.providers.whisperModelBase': 'বেস (74 MB)', + 'voice.providers.whisperModelSmall': 'ছোট (244 MB)', + 'voice.providers.whisperModelMedium': '93MB (18 MB মাঝারি, 927) সুপারিশ করা হয়েছে', + 'voice.providers.whisperModelLargeTurbo': 'বড় v3 Turbo (1.5 GB, সর্বোত্তম নির্ভুলতা)', + 'voice.providers.ttsProvider': 'টেক্সট-টু-স্পিচ প্রদানকারী', + 'voice.providers.ttsProviderAria': 'TTS প্রদানকারী', + 'voice.providers.cloudElevenLabsProxy': 'ক্লাউড (ElevenLabs proxy)', + 'voice.providers.localPiper': 'স্থানীয় পাইপার', + 'voice.providers.piperInstalledTitle': 'পাইপার ইনস্টল করা আছে। পুনরায় ইনস্টল করতে ক্লিক করুন.', + 'voice.providers.piperDownloadTitle': + 'Piper এবং বান্ডেল করা en_US-lessac-medium ভয়েস আপনার ওয়ার্কস্পেসে ডাউনলোড করুন।', + 'voice.providers.piperVoice': 'পাইপার ভয়েস', + 'voice.providers.piperVoiceAria': 'পাইপার ভয়েস', + 'voice.providers.customVoiceOption': 'অন্যান্য (নীচে টাইপ করুন)…', + 'voice.providers.customVoiceAria': 'পাইপার ভয়েস আইডি (কাস্টম)', + 'voice.providers.customVoicePlaceholder': 'en_US-lessac-medium', + 'voice.providers.piperVoicesDesc': + 'ভয়েসগুলি huggingface.co/rhasspy/piper-voices থেকে আসে। ভয়েস পরিবর্তন করলে নতুন .onnx ডাউনলোড করতে Install/Reinstall ক্লিক করতে হতে পারে।', + 'voice.providers.mascotVoice': 'মাসকট ভয়েস', + 'voice.providers.mascotVoiceDescPrefix': + 'মাসকট কথিত উত্তরের জন্য যে ElevenLabs ভয়েস ব্যবহার করে তা কনফিগার করা আছে', + 'voice.providers.mascotSettings': 'মাসকট সেটিংস', + 'voice.providers.mascotVoiceDescSuffix': '.', + 'voice.providers.hotkeyPlaceholder': 'Fn এর অধীনে কনফিগার করা হয়েছে', + 'voice.providers.piperPreset.lessacMedium': 'US · Lessac (নিরপেক্ষ, প্রস্তাবিত)', + 'voice.providers.piperPreset.lessacHigh': 'US · Lessac (উচ্চ মানের, বড়)', + 'voice.providers.piperPreset.ryanMedium': 'US · রায়ান (পুরুষ)', + 'voice.providers.piperPreset.amyMedium': 'মার্কিন · অ্যামি (মহিলা)', + 'voice.providers.piperPreset.librittsHigh': 'US · LibriTTS (মাল্টি-স্পীকার)', + 'voice.providers.piperPreset.alanMedium': 'GB · অ্যালান (পুরুষ)', + 'voice.providers.piperPreset.jennyDiocoMedium': 'GB · জেনি ডিওকো (মহিলা)', + 'voice.providers.piperPreset.northernEnglishMaleMedium': 'GB · উত্তর ইংরেজি (পুরুষ)', + 'voice.providers.chip.cloud': 'OpenHuman (পরিচালিত)', + 'voice.providers.chip.cloudAria': 'OpenHuman পরিচালিত প্রোভাইডার সর্বদা সক্রিয়', + 'voice.providers.chip.whisper': 'Whisper (স্থানীয়)', + 'voice.providers.chip.enableWhisper': 'স্থানীয় Whisper STT সক্রিয় করুন', + 'voice.providers.chip.disableWhisper': 'স্থানীয় Whisper STT নিষ্ক্রিয় করুন', + 'voice.providers.chip.piper': 'Piper (স্থানীয়)', + 'voice.providers.chip.enablePiper': 'স্থানীয় Piper TTS সক্রিয় করুন', + 'voice.providers.chip.disablePiper': 'স্থানীয় Piper TTS নিষ্ক্রিয় করুন', + 'voice.providers.chip.enableProvider': 'Enable', + 'voice.providers.chip.disableProvider': 'Disable', + 'voice.providers.chip.apiKeyLabel': 'API কী', + 'voice.providers.chip.apiKeyPlaceholder': 'sk-…', + 'voice.providers.chip.comingSoon': 'শীঘ্রই আসছে', + 'voice.modal.title': 'Configure', + 'voice.modal.desc': + 'এই প্রোভাইডার সক্রিয় করতে আপনার API কী লিখুন। সংরক্ষণের আগে সংযোগ পরীক্ষা করতে পারবেন।', + 'voice.modal.testKey': 'কী পরীক্ষা করুন', + 'voice.modal.testing': 'পরীক্ষা হচ্ছে…', + 'voice.modal.saveAndEnable': 'সংরক্ষণ করুন ও সক্রিয় করুন', + 'voice.modal.enable': 'Enable', + 'voice.modal.whisperDesc': + 'একটি মডেল সাইজ বেছে নিন এবং Whisper বাইনারি ও GGML মডেল আপনার ওয়ার্কস্পেসে ইনস্টল করুন। বড় মডেল আরও নির্ভুল তবে ধীর।', + 'voice.modal.piperDesc': + 'একটি ভয়েস বেছে নিন এবং Piper বাইনারি ও ONNX মডেল আপনার ওয়ার্কস্পেসে ইনস্টল করুন। Piper সম্পূর্ণ অফলাইনে কম লেটেন্সিতে চলে।', + 'voice.routing.title': 'ভয়েস রাউটিং', + 'voice.routing.desc': + 'স্পিচ-টু-টেক্সট এবং টেক্সট-টু-স্পিচ পরিচালনার জন্য সক্রিয় প্রোভাইডার বেছে নিন।', + 'voice.routing.save': 'Save', + 'voice.routing.testStt': 'STT পরীক্ষা করুন', + 'voice.routing.testTts': 'TTS পরীক্ষা করুন', + 'voice.routing.elevenlabsVoice': 'ElevenLabs ভয়েস', + 'voice.routing.elevenlabsVoiceAria': 'ElevenLabs ভয়েস নির্বাচন', + 'voice.routing.elevenlabsVoiceIdAria': 'ElevenLabs ভয়েস ID (কাস্টম)', + 'voice.routing.elevenlabsVoiceDesc': + 'একটি কিউরেটেড ভয়েস বেছে নিন বা আপনার ElevenLabs ড্যাশবোর্ড থেকে একটি কাস্টম ভয়েস ID পেস্ট করুন।', + 'voice.externalProviders.title': 'বাহ্যিক ভয়েস প্রোভাইডার', + 'voice.externalProviders.desc': + 'Deepgram, ElevenLabs, বা OpenAI-এর মতো থার্ড-পার্টি STT/TTS API সরাসরি সংযোগ করুন।', + 'voice.externalProviders.keySet': 'কী সেট করা হয়েছে', + 'voice.externalProviders.noKey': 'কোনো API কী নেই', + 'voice.externalProviders.test': 'Test', + 'voice.externalProviders.testing': 'পরীক্ষা হচ্ছে…', + 'voice.externalProviders.remove': 'Remove', + 'voice.externalProviders.provider': 'Provider', + 'voice.externalProviders.selectProvider': 'একটি প্রোভাইডার বেছে নিন…', + 'voice.externalProviders.apiKey': 'API কী', + 'voice.externalProviders.apiKeyPlaceholder': 'sk-…', + 'voice.externalProviders.add': 'Add', + 'autocomplete.title': 'অটোকমপ্লিট', + 'autocomplete.settings': 'সেটিংস', + 'autocomplete.acceptWithTab': 'Tab দিয়ে গ্রহণ করুন', + 'autocomplete.stylePreset': 'স্টাইল প্রিসেট', + 'autocomplete.style.balanced': 'ব্যালান্সড', + 'autocomplete.style.concise': 'সংক্ষিপ্ত', + 'autocomplete.style.formal': 'আনুষ্ঠানিক', + 'autocomplete.style.casual': 'অনানুষ্ঠানিক', + 'autocomplete.style.custom': 'কাস্টম', + 'autocomplete.disabledApps': 'নিষ্ক্রিয় অ্যাপ (প্রতি লাইনে একটি বান্ডেল/অ্যাপ টোকেন)', + 'autocomplete.saveSettings': 'সেটিংস সংরক্ষণ করুন', + 'autocomplete.saving': 'সংরক্ষণ হচ্ছে…', + 'autocomplete.runtime': 'রানটাইম', + 'autocomplete.running': 'চলছে', + 'autocomplete.start': 'শুরু করুন', + 'autocomplete.stop': 'বন্ধ করুন', + 'autocomplete.settingsSaved': 'অটোকমপ্লিট সেটিংস সংরক্ষিত।', + 'autocomplete.started': 'অটোকমপ্লিট শুরু হয়েছে।', + 'autocomplete.didNotStart': 'অটোকমপ্লিট শুরু হয়নি। এটি সক্রিয় কিনা পরীক্ষা করুন।', + 'autocomplete.stopped': 'অটোকমপ্লিট বন্ধ হয়েছে।', + 'autocomplete.advancedSettings': 'অ্যাডভান্সড সেটিংস', + 'autocomplete.debugTitle': 'অটোকমপ্লিট ডিবাগ', + 'chat.agentChat': 'এজেন্ট চ্যাট', + 'chat.overrides': 'ওভাররাইড', + 'chat.model': 'মডেল', + 'chat.temperature': 'টেম্পারেচার', + 'chat.conversation': 'কথোপকথন', + 'chat.startAgentConversation': 'এজেন্টের সাথে একটি কথোপকথন শুরু করুন।', + 'chat.you': 'আপনি', + 'chat.agent': 'এজেন্ট', + 'chat.askAgent': 'এজেন্টকে যেকোনো কিছু জিজ্ঞেস করুন...', + 'chat.sendMessage': 'বার্তা পাঠান', + 'composio.triageTitle': 'ইন্টিগ্রেশন ট্রিগার', + 'composio.triageDesc': + 'সক্রিয় থাকলে, প্রতিটি আসন্ত Composio ট্রিগার একটি AI ট্রিয়াজ ধাপের মধ্য দিয়ে যায় যা ইভেন্ট শ্রেণীবদ্ধ করে এবং স্বয়ংক্রিয় কাজ শুরু করতে পারে — প্রতিটি ট্রিগারে একটি লোকাল LLM টার্ন। বৈশ্বিকভাবে বা নির্দিষ্ট ইন্টিগ্রেশনে নিষ্ক্রিয় করুন যদি আপনি ম্যানুয়াল রিভিউ পছন্দ করেন। যদি পরিবেশ ভ্যারিয়েবল', + 'composio.disableAllTriage': 'সব ট্রিগারের জন্য AI ট্রিয়াজ নিষ্ক্রিয় করুন', + 'composio.triggersStillRecorded': 'ট্রিগারগুলো ইতিহাসে রেকর্ড থাকবে — কোনো LLM টার্ন চলবে না।', + 'composio.disableSpecificIntegrations': + 'নির্দিষ্ট ইন্টিগ্রেশনের জন্য AI ট্রিয়াজ নিষ্ক্রিয় করুন', + 'composio.settingsSaved': 'সেটিংস সংরক্ষিত হয়েছে', + 'composio.saveFailed': 'সংরক্ষণ ব্যর্থ। আবার চেষ্টা করুন।', + 'cron.title': 'ক্রন জবস', + 'cron.scheduledJobs': 'নির্ধারিত জবস', + 'cron.manageCronJobs': 'কোর শিডিউলার থেকে ক্রন জবস পরিচালনা করুন।', + 'cron.refreshCronJobs': 'ক্রন জবস রিফ্রেশ করুন', + 'localModel.modelStatus': 'মডেল স্ট্যাটাস', + 'localModel.downloadModels': 'মডেল ডাউনলোড করুন', + 'localModel.usage': 'ব্যবহার', + 'localModel.usageDesc': + 'কোন সাবসিস্টেম লোকাল মডেলে চলবে তা বেছে নিন। বন্ধ থাকলে ক্লাউড ব্যবহার করে।', + 'localModel.enableRuntime': 'লোকাল AI রানটাইম সক্রিয় করুন', + 'localModel.enableRuntimeDesc': + 'মাস্টার সুইচ। ডিফল্টে বন্ধ — Ollama নিষ্ক্রিয় থাকে। চালু হলে, ট্রি সামারাইজার, স্ক্রিন ইন্টেলিজেন্স এবং অটোকমপ্লিট সর্বদা লোকাল মডেল ব্যবহার করে।', + 'localModel.advancedSettings': 'অ্যাডভান্সড সেটিংস', + 'localModel.debugTitle': 'লোকাল মডেল ডিবাগ', + 'screenAwareness.debugTitle': 'স্ক্রিন সচেতনতা ডিবাগ', + 'screenAwareness.debug.debugAndDiagnostics': 'ডিবাগ এবং ডায়াগনস্টিকস', + 'screenAwareness.debug.collapse': 'সঙ্কুচিত', + 'screenAwareness.debug.expand': 'প্রসারিত করুন', + 'screenAwareness.debug.failedToSave': 'স্ক্রীন ইন্টেলিজেন্স সংরক্ষণ করতে ব্যর্থ', + 'screenAwareness.debug.policyTitle': 'স্ক্রীন ইন্টেলিজেন্স নীতি', + 'screenAwareness.debug.baselineFps': 'বেসলাইন FPS', + 'screenAwareness.debug.useVisionModel': 'ভিআইপি ব্যবহার করুন', + 'screenAwareness.debug.useVisionModelDesc': + 'আরও সমৃদ্ধ প্রেক্ষাপটের জন্য একটি ভিশন LLM-এ স্ক্রিনশট পাঠান। বন্ধ থাকলে, শুধুমাত্র OCR টেক্সট একটি টেক্সট LLM-এর সাথে ব্যবহার করা হয় — দ্রুততর এবং কোনো ভিশন মডেল প্রয়োজন নেই।', + 'screenAwareness.debug.keepScreenshots': 'স্ক্রিনশটগুলি রাখুন', + 'screenAwareness.debug.keepScreenshotsDesc': + 'প্রক্রিয়াকরণের পরে মুছে না দিয়ে ক্যাপচার করা স্ক্রিনশটগুলি ওয়ার্কস্পেসে সংরক্ষণ করুন', + 'screenAwareness.debug.allowlist': 'অনুমতি তালিকা (প্রতি লাইনে একটি নিয়ম)', + 'screenAwareness.debug.denylist': 'অস্বীকারকারী (প্রতি লাইনে একটি নিয়ম)', + 'screenAwareness.debug.saveSettings': 'স্ক্রীন ইন্টেলিজেন্স সেটিংস সংরক্ষণ করুন', + 'screenAwareness.debug.sessionStats': 'সেশন পরিসংখ্যান', + 'screenAwareness.debug.framesEphemeral': 'ফ্রেম (ক্ষণস্থায়ী)', + 'screenAwareness.debug.panicStop': 'প্যানিক স্টপ', + 'screenAwareness.debug.defaultPanicHotkey': 'Cmd+Shift+.', + 'screenAwareness.debug.vision': 'দৃষ্টি', + 'screenAwareness.debug.idle': 'নিষ্ক্রিয়', + 'screenAwareness.debug.visionQueue': 'দৃষ্টি সারি', + 'screenAwareness.debug.lastVision': 'শেষ দর্শন', + 'screenAwareness.debug.notAvailable': 'n/a', + 'screenAwareness.debug.visionSummaries': 'ভিশন সারাংশ', + 'screenAwareness.debug.refreshing': 'রিফ্রেশ করা হচ্ছে...', + 'screenAwareness.debug.noSummaries': 'এখনও কোনো সারসংক্ষেপ নেই।', + 'screenAwareness.debug.unknownApp': 'অজানা অ্যাপ', + 'screenAwareness.debug.macosOnly': 'স্ক্রীন ইন্টেলিজেন্স V1 বর্তমানে শুধুমাত্র macOS-এ সমর্থিত।', + 'memory.debugTitle': 'মেমোরি ডিবাগ', + 'memory.documents': 'নথি', + 'memory.filterByNamespace': 'নামস্থান দ্বারা ফিল্টার করুন...', + 'memory.refresh': 'রিফ্রেশ করুন', + 'memory.noDocumentsFound': 'কোনো নথি পাওয়া যায়নি৷', + 'memory.delete': 'মুছুন', + 'memory.rawResponse': 'কাঁচা প্রতিক্রিয়া', + 'memory.namespaces': 'নেমস্পেস', + 'memory.noNamespacesFound': 'কোনো নামস্থান খুঁজে পাওয়া যায়নি।', + 'memory.queryRecall': 'ক্যোয়ারী এবং রিকল', + 'memory.namespace': 'নেমস্পেস', + 'memory.queryText': 'কোয়েরি পাঠ্য...', + 'memory.defaultMaxChunks': '10', + 'memory.maxChunks': 'সর্বাধিক খণ্ডগুলি', + 'memory.query': 'কোয়েরি', + 'memory.recall': 'প্রত্যাহার করুন', + 'memory.queryLabel': 'প্রশ্ন', + 'memory.recallLabel': 'প্রত্যাহার করুন', + 'memory.queryResult': '923 ফলাফল', + 'memory.recallResult': 'ফলাফল প্রত্যাহার করুন', + 'memory.clearNamespace': 'নামস্থান সাফ করুন', + 'memory.clearNamespaceDescription': 'একটি নামস্থানের মধ্যে থাকা সমস্ত নথি স্থায়ীভাবে মুছুন।', + 'memory.selectNamespace': 'নামস্থান নির্বাচন করুন...', + 'memory.exampleNamespace': 'যেমন skill:gmail:user@example.com', + 'memory.clear': 'সাফ', + 'memory.deleteConfirm': 'নামস্থান "{namespace}" এ নথি "{documentId}" মুছবেন?', + 'memory.clearNamespaceConfirm': + 'এটি "{namespace}" নেমস্পেসের সমস্ত ডকুমেন্ট স্থায়ীভাবে মুছে ফেলবে। চালিয়ে যাবেন?', + 'memory.clearNamespaceSuccess': 'নামস্থান "{namespace}" সাফ করা হয়েছে৷', + 'memory.clearNamespaceEmpty': '"{namespace}" এ পরিষ্কার করার কিছু নেই।', + 'webhooks.debugTitle': 'Webhooks ডিবাগ', + 'webhooks.failedToLoadDebugData': 'ওয়েবহুক ডিবাগ ডেটা লোড করতে ব্যর্থ হয়েছে', + 'webhooks.clearLogsConfirm': 'সমস্ত ক্যাপচার করা ওয়েবহুক ডিবাগ লগ সাফ করবেন?', + 'webhooks.failedToClearLogs': 'ওয়েবহুক লগগুলি সাফ করতে ব্যর্থ হয়েছে', + 'webhooks.loading': 'লোড হচ্ছে...', + 'webhooks.refresh': 'রিফ্রেশ করা হচ্ছে', + 'webhooks.clearing': 'সাফ করা হচ্ছে...', + 'webhooks.clearLogs': 'সাফ করা হচ্ছে...', + 'webhooks.registered': '[[I18N_SEP_92731]] নিবন্ধিত', + 'webhooks.captured': 'ক্যাপচার করা', + 'webhooks.live': 'লাইভ', + 'webhooks.disconnected': 'সংযোগ বিচ্ছিন্ন', + 'webhooks.lastEvent': 'সর্বশেষ ইভেন্ট', + 'webhooks.at': 'এ', + 'webhooks.registeredWebhooks': 'নিবন্ধিত ওয়েবহুক', + 'webhooks.noActiveRegistrations': 'কোন সক্রিয় নিবন্ধন.', + 'webhooks.resolvingBackendUrl': 'ব্যাকএন্ড সমাধান করা হচ্ছে URL…', + 'webhooks.capturedRequests': 'ক্যাপচার করা অনুরোধ', + 'webhooks.noRequestsCaptured': 'কোনো ওয়েবহুকের অনুরোধ এখনও ক্যাপচার করা হয়নি৷', + 'webhooks.unrouted': 'আনরাউটেড', + 'webhooks.pending': 'মুলতুবি', + 'webhooks.requestHeaders': 'অনুরোধ শিরোনাম', + 'webhooks.queryParams': 'কোয়েরি পরম', + 'webhooks.requestBody': 'রিকোয়েস্ট বডি', + 'webhooks.responseHeaders': 'রেসপন্স হেডার', + 'webhooks.responseBody': 'রেসপন্স বডি', + 'webhooks.rawPayload': 'কাঁচা পেলোড', + 'webhooks.empty': '[খালি]', + 'providerSetup.error.defaultDetails': 'প্রদানকারী সেটআপ ব্যর্থ হয়েছে৷', + 'providerSetup.error.providerFallback': 'প্রদানকারী', + 'providerSetup.error.credentialsRejected': + '{provider} শংসাপত্র প্রত্যাখ্যান করেছে। API কী পরীক্ষা করুন এবং আবার চেষ্টা করুন।', + 'providerSetup.error.endpointNotRecognized': + '{provider} এন্ডপয়েন্ট সনাক্ত করতে পারেনি। বেস URL পরীক্ষা করুন এবং আবার চেষ্টা করুন।', + 'providerSetup.error.providerUnavailable': + '{provider} এখন অনুপলব্ধ। আবার চেষ্টা করুন অথবা প্রোভাইডারের স্ট্যাটাস দেখুন।', + 'providerSetup.error.unreachable': + '{provider}-এ পৌঁছানো যায়নি। এন্ডপয়েন্ট URL এবং নেটওয়ার্ক সংযোগ পরীক্ষা করুন, তারপর আবার চেষ্টা করুন।', + 'providerSetup.error.couldNotReachWithMessage': '{provider} এ পৌঁছানো যায়নি: {message}', + 'providerSetup.error.technicalDetails': 'প্রযুক্তিগত বিবরণ', + 'notifications.routingTitle': 'বিজ্ঞপ্তি রুটিং', + 'notifications.routing.pipelineStats': 'পাইপলাইন পরিসংখ্যান', + 'notifications.routing.total': 'মোট', + 'notifications.routing.unread': 'অপঠিত', + 'notifications.routing.unscored': 'আনস্কোরড', + 'notifications.routing.intelligenceTitle': 'আনস্কোরড [[I18N_SEP_92731] নোটিফিকেশন', + 'notifications.routing.intelligenceDesc': + 'আপনার সংযুক্ত অ্যাকাউন্টের প্রতিটি বিজ্ঞপ্তি একটি স্থানীয় AI মডেল দ্বারা স্কোর করা হয়। উচ্চ-গুরুত্বের বিজ্ঞপ্তিগুলি স্বয়ংক্রিয়ভাবে আপনার অর্কেস্ট্রেটর এজেন্টে রুট করা হয় যাতে কিছু গুরুত্বপূর্ণ মিস না হয়।', + 'notifications.routing.howItWorks': 'এটি কীভাবে কাজ করে', + 'notifications.routing.level.drop': 'ড্রপ', + 'notifications.routing.level.dropDesc': 'নয়েজ / স্প্যাম — সঞ্চিত কিন্তু প্রকাশ করা হয় না', + 'notifications.routing.level.acknowledge': 'স্বীকার করুন', + 'notifications.routing.level.acknowledgeDesc': 'নিম্ন-অগ্রাধিকার — বিজ্ঞপ্তি কেন্দ্রে দেখানো হয়', + 'notifications.routing.level.react': 'প্রতিক্রিয়া', + 'notifications.routing.level.reactDesc': + 'মধ্যম-অগ্রাধিকার — একটি ফোকাসড এজেন্ট প্রতিক্রিয়া চালু করে', + 'notifications.routing.level.escalate': 'এস্কেলেট', + 'notifications.routing.level.escalateDesc': 'উচ্চ-অগ্রাধিকার — অর্কেস্ট্রেটর এজেন্টে পাঠানো হয়', + 'notifications.routing.perProvider': 'প্রতি-প্রদানকারী রাউটিং', + 'notifications.routing.threshold': 'থ্রেশহোল্ড', + 'notifications.routing.routeToOrchestrator': 'অর্কেস্ট্রেটরের রুট', + 'notifications.routing.loadSettingsError': + 'সেটিংস লোড করতে ব্যর্থ হয়েছে। পুনরায় চেষ্টা করতে এই প্যানেলটি আবার খুলুন।', + 'common.reload': 'পুনরায় লোড', + 'common.skip': 'এড়িয়ে যান', + 'common.disable': 'নিষ্ক্রিয় করুন', + 'common.enable': 'সক্রিয় করুন', + 'chat.safetyTimeout': + '২ মিনিট পরেও এজেন্টের কোনো সাড়া নেই। আবার চেষ্টা করুন বা সংযোগ পরীক্ষা করুন।', + 'chat.filter.all': 'সব', + 'chat.filter.work': 'কাজ', + 'chat.filter.briefing': 'ব্রিফিং', + 'chat.filter.notification': 'বিজ্ঞপ্তি', + 'chat.filter.workers': 'ওয়ার্কার', + 'chat.selectThread': 'একটি থ্রেড বেছে নিন', + 'chat.threads': 'থ্রেড', + 'chat.noThreads': 'এখনো কোনো থ্রেড নেই', + 'chat.noLabelThreads': '"{label}" থ্রেড নেই', + 'chat.noWorkerThreads': 'এখনো কোনো ওয়ার্কার থ্রেড নেই', + 'chat.deleteThread': 'থ্রেড মুছুন', + 'chat.deleteThreadConfirm': 'আপনি কি "{title}" মুছতে চান?', + 'chat.untitledThread': 'শিরোনামহীন থ্রেড', + 'chat.editThreadTitle': 'থ্রেডের শিরোনাম সম্পাদনা করুন', + 'chat.hideSidebar': 'সাইডবার লুকান', + 'chat.showSidebar': 'সাইডবার দেখান', + 'chat.newThreadShortcut': 'নতুন থ্রেড (/new)', + 'chat.new': 'নতুন', + 'chat.failedToLoadMessages': 'বার্তা লোড করতে ব্যর্থ', + 'chat.thinkingIteration': 'ভাবছে... ({n})', + 'chat.thinkingDots': 'ভাবছে...', + 'chat.approachingLimit': 'ব্যবহার সীমার কাছাকাছি', + 'chat.approachingLimitMsg': 'আপনি আপনার উপলব্ধ কোটার {pct}% ব্যবহার করেছেন।', + 'chat.upgrade': 'আপগ্রেড করুন', + 'chat.weeklyLimitHit': 'আপনি আপনার সাপ্তাহিক সীমায় পৌঁছেছেন।', + 'chat.resets': 'রিসেট হবে', + 'chat.topUpToContinue': 'চালিয়ে যেতে টপ আপ করুন।', + 'chat.budgetComplete': + 'আপনার অন্তর্ভুক্ত বাজেট শেষ হয়েছে। চালিয়ে যেতে ক্রেডিট যোগ করুন বা আপগ্রেড করুন।', + 'chat.topUp': 'টপ আপ', + 'chat.cycle': 'চক্র', + 'chat.cycleSpent': 'এই চক্রে ব্যয়', + 'chat.cycleRemaining': 'অবশিষ্ট', + 'chat.left': 'বাকি', + 'chat.setup': 'সেটআপ করুন', + 'chat.switchToText': 'টেক্সটে পরিবর্তন করুন', + 'chat.transcribing': 'ট্রান্সক্রাইব হচ্ছে...', + 'chat.stopAndSend': 'থামুন ও পাঠান', + 'chat.startTalking': 'কথা বলা শুরু করুন', + 'chat.playingVoiceReply': 'ভয়েস রিপ্লি বাজছে', + 'chat.voiceHint': 'কথা বলতে মাইক ব্যবহার করুন', + 'chat.micUnavailable': 'মাইক্রোফোন পাওয়া যাচ্ছে না', + 'chat.turn': 'টার্ন', + 'chat.turns': 'টার্ন', + 'chat.openWorkerThread': 'ওয়ার্কার থ্রেড খুলুন', + 'chat.attachment.attach': 'ছবি সংযুক্ত করুন', + 'chat.attachment.remove': '{name} সরান', + 'chat.attachment.tooMany': 'প্রতি বার্তায় সর্বোচ্চ {max}টি ছবি', + 'chat.attachment.tooLarge': 'ছবি {max} আকারের সীমা অতিক্রম করেছে', + 'chat.attachment.unsupportedType': + 'অসমর্থিত ফাইল প্রকার। PNG, JPEG, WebP, GIF, বা BMP ব্যবহার করুন।', + 'chat.attachment.readFailed': 'ফাইল পড়া যায়নি', + 'memory.searchAria': 'মেমোরি খুঁজুন', + 'memory.searchPlaceholder': 'মেমোরি এন্ট্রি খুঁজুন...', + 'memory.sourceFilter.all': 'সব উৎস', + 'memory.sourceFilter.email': 'ইমেইল', + 'memory.sourceFilter.calendar': 'ক্যালেন্ডার', + 'memory.sourceFilter.telegram': 'Telegram', + 'memory.sourceFilter.aiInsight': 'AI ইনসাইট', + 'memory.sourceFilter.system': 'সিস্টেম', + 'memory.sourceFilter.trading': 'ট্রেডিং', + 'memory.sourceFilter.security': 'নিরাপত্তা', + 'memory.ingestionActivity': 'ইনজেশন অ্যাক্টিভিটি', + 'memory.events': 'ইভেন্ট', + 'memory.event': 'ইভেন্ট', + 'memory.overTheLast': 'গত', + 'memory.months': 'মাসে', + 'memory.peak': 'শীর্ষ', + 'memory.perDay': '/দিন', + 'memory.less': 'কম', + 'memory.more': 'বেশি', + 'memory.on': 'তে', + 'memory.loading': 'মেমোরি লোড হচ্ছে', + 'memory.fetching': 'আপনার মেমোরি এন্ট্রি আনা হচ্ছে...', + 'memory.analyzing': 'মেমোরি বিশ্লেষণ হচ্ছে', + 'memory.analyzingHint': 'ইনসাইট বের করতে আপনার মেমোরি প্রক্রিয়া হচ্ছে...', + 'memory.noMatches': 'কোনো মিল পাওয়া যায়নি', + 'memory.noMatchesHint': 'সার্চ টার্ম বা ফিল্টার পরিবর্তন করে দেখুন।', + 'memory.allCaughtUp': 'সব আপডেট', + 'memory.allCaughtUpHint': 'প্রক্রিয়া করার মতো নতুন মেমোরি এন্ট্রি নেই।', + 'memory.noAnalysis': 'এখনো কোনো বিশ্লেষণ নেই', + 'memory.noAnalysisHint': 'আপনার মেমোরিতে প্যাটার্ন খুঁজে পেতে একটি বিশ্লেষণ চালান।', + 'memory.emptyHint': 'আপনার প্রথম মেমোরি তৈরি করতে ইন্টারঅ্যাক্ট শুরু করুন।', + 'mic.unavailable': 'মাইক্রোফোন পাওয়া যাচ্ছে না', + 'mic.permissionDenied': 'মাইক্রোফোন অনুমতি অস্বীকৃত', + 'mic.failedToStartRecorder': 'রেকর্ডার শুরু করতে ব্যর্থ', + 'mic.transcribing': 'ট্রান্সক্রাইব হচ্ছে...', + 'mic.tapToSend': 'পাঠাতে ট্যাপ করুন', + 'mic.waitingForAgent': 'এজেন্টের জন্য অপেক্ষা করছে...', + 'mic.tapAndSpeak': 'ট্যাপ করুন ও কথা বলুন', + 'mic.stopRecording': 'রেকর্ডিং বন্ধ করুন ও পাঠান', + 'mic.startRecording': 'রেকর্ডিং শুরু করুন', + 'mic.deviceSelector': 'মাইক্রোফোন ডিভাইস', + 'mic.tapToSendCountdown': 'পাঠাতে ট্যাপ করুন ({seconds}স)', + 'token.usageLimitReached': 'ব্যবহার সীমা পৌঁছেছে', + 'token.approachingLimit': 'সীমার কাছাকাছি', + 'token.planClickForDetails': 'প্ল্যান - বিস্তারিত জানতে ক্লিক করুন', + 'token.sessionTokens': 'ইন: {in} | আউট: {out} | টার্ন: {turns}', + 'token.limit': 'সীমা পৌঁছেছে', + 'catalog.noCapabilityBinding': 'কোনো ক্যাপাবিলিটি বাইন্ডিং নেই', + 'catalog.downloadFailed': 'ডাউনলোড ব্যর্থ', + 'catalog.active': 'সক্রিয়', + 'catalog.installed': 'ইনস্টল করা', + 'catalog.notDownloaded': 'ডাউনলোড করা হয়নি', + 'catalog.inUse': 'ব্যবহারে', + 'catalog.use': 'ব্যবহার করুন', + 'catalog.deleteModel': 'মডেল মুছুন', + 'catalog.download': 'ডাউনলোড', + 'navigator.recent': 'সাম্প্রতিক', + 'navigator.today': 'আজ', + 'navigator.thisWeek': 'এই সপ্তাহ', + 'navigator.sources': 'উৎস', + 'navigator.email': 'ইমেইল', + 'navigator.slack': 'Slack', + 'navigator.chat': 'চ্যাট', + 'navigator.documents': 'ডকুমেন্ট', + 'navigator.people': 'মানুষ', + 'navigator.topics': 'বিষয়', + 'dreams.description': + 'স্বপ্ন হলো AI-জেনারেটেড প্রতিফলন যা আপনার মেমোরি থেকে প্যাটার্ন সংশ্লেষণ করে।', + 'dreams.comingSoon': 'শীঘ্রই আসছে', + 'assignment.memoryLlm': 'মেমোরি LLM', + 'assignment.memoryLlmAria': 'মেমোরি LLM নির্বাচন', + 'assignment.embedder': 'এম্বেডার', + 'assignment.loaded': 'লোড হয়েছে', + 'assignment.notDownloaded': 'ডাউনলোড করা হয়নি', + 'assignment.usedForExtractSummarise': 'নিষ্কাশন এবং সারসংক্ষেপের জন্য ব্যবহৃত', + 'insights.knownFacts': 'পরিচিত তথ্য', + 'insights.preferences': 'পছন্দ', + 'insights.relationships': 'সম্পর্ক', + 'insights.skills': 'দক্ষতা', + 'insights.opinions': 'মতামত', + 'insights.other': 'অন্যান্য', + 'insights.title': 'ইনসাইট', + 'insights.empty': 'এখনো কোনো ইনসাইট নেই। আপনার মেমোরি বাড়ার সাথে ইনসাইট তৈরি হবে।', + 'insights.description': 'আপনার মেমোরি গ্রাফে {count}টি সম্পর্কের উপর ভিত্তি করে।', + 'insights.items': 'আইটেম', + 'insights.more': 'আরও', + 'calls.joiningCall': 'কলে যোগ দিচ্ছে', + 'calls.meetWindowOpening': 'Meet উইন্ডো খুলছে...', + 'calls.failedToStart': 'Meet কল শুরু করতে ব্যর্থ', + 'calls.couldNotStart': 'কল শুরু করা যায়নি', + 'calls.failedToClose': 'কল বন্ধ করতে ব্যর্থ', + 'calls.couldNotClose': 'কল বন্ধ করা যায়নি', + 'calls.joinMeet': 'একটি Google Meet কলে যোগ দিন', + 'calls.joinMeetDescription': 'যোগ দিতে একটি Google Meet লিংক দিন।', + 'calls.meetLink': 'Meet লিংক', + 'calls.displayName': 'প্রদর্শন নাম', + 'calls.openingMeet': 'Meet খোলা হচ্ছে...', + 'calls.joinCall': 'কলে যোগ দিন', + 'calls.activeCalls': 'সক্রিয় কল', + 'calls.leave': 'ছেড়ে যান', + 'workspace.wipeConfirm': 'আপনি কি সব মেমোরি মুছতে চান? এটি পূর্বাবস্থায় ফেরানো যাবে না।', + 'workspace.resetTreeConfirm': 'আপনি কি মেমোরি ট্রি পুনর্নির্মাণ করতে চান?', + 'workspace.wipeTitle': 'মেমোরি মুছুন', + 'workspace.resetting': 'রিসেট হচ্ছে...', + 'workspace.resetMemory': 'মেমোরি রিসেট করুন', + 'workspace.resetTreeTitle': 'মেমোরি ট্রি পুনর্নির্মাণ', + 'workspace.rebuilding': 'পুনর্নির্মাণ হচ্ছে...', + 'workspace.resetMemoryTree': 'মেমোরি ট্রি রিসেট করুন', + 'workspace.building': 'নির্মাণ হচ্ছে...', + 'workspace.buildSummaryTrees': 'সারসংক্ষেপ ট্রি তৈরি করুন', + 'workspace.viewVault': 'ভল্ট দেখুন', + 'workspace.openingVaultTitle': 'ওবসিডিয়ানে ভল্ট খোলা হচ্ছে', + 'workspace.openingVaultMessage': + 'Obsidian না খুললে, obsidian.md থেকে ইনস্টল করুন অথবা Reveal Folder ব্যবহার করুন। ভল্ট পাথ:', + 'workspace.openVaultFailedTitle': 'Obsidian-এ ভল্ট খোলা যায়নি', + 'workspace.openVaultFailedMessage': + 'ভল্ট ডিরেক্টরিটি সরাসরি খুলতে রিভিল ফোল্ডার ব্যবহার করুন। ভল্ট পাথ:', + 'workspace.revealVaultFailed': 'ভল্ট ফোল্ডার দেখানো যায়নি', + 'workspace.revealFolder': 'ফোল্ডার প্রকাশ করুন', + 'workspace.checkingVault': 'যাচাই হচ্ছে…', + 'workspace.vaultNotRegisteredHelp': + 'Obsidian শুধুমাত্র আপনার যোগ করা ফোল্ডারগুলি ভল্ট হিসেবে খোলে। Obsidian-এ, "Open folder as vault" বেছে নিন এবং নিচের ফোল্ডারটি পিক করুন — এটি শুধুমাত্র একবার করতে হবে। তারপর আবার View Vault ক্লিক করুন।', + 'workspace.obsidianNotFoundHelp': + 'আমরা এই ডিভাইসে Obsidian খুঁজে পাইনি। এটি ইনস্টল করুন, অথবা — যদি এটি অ-মানক কোথাও ইনস্টল করা থাকে — Advanced-এর অধীনে এর কনফিগ ফোল্ডার সেট করুন।', + 'workspace.openAnyway': 'যাইহোক Obsidian-এ খুলুন', + 'workspace.installObsidian': 'Obsidian ইনস্টল করুন', + 'workspace.obsidianAdvanced': 'Obsidian অন্য কোথাও ইনস্টল করা আছে?', + 'workspace.obsidianConfigDirLabel': 'Obsidian কনফিগ ফোল্ডার', + 'workspace.obsidianConfigDirHint': + 'obsidian.json ধারণকারী ফোল্ডারের পাথ (যেমন ~/.config/obsidian)। স্বয়ংক্রিয়ভাবে সনাক্ত করতে খালি রাখুন।', + 'workspace.obsidianConfigDirPlaceholder': '~/.config/obsidian', + 'workspace.graphLoadFailed': 'মেমোরি গ্রাফ লোড করতে ব্যর্থ', + 'workspace.loadingGraph': 'মেমোরি গ্রাফ লোড হচ্ছে...', + 'workspace.graphViewMode': 'মেমোরি গ্রাফ ভিউ মোড', + 'workspace.trees': 'ট্রি', + 'workspace.contacts': 'যোগাযোগ', + 'graph.noContactMentions': 'কোনো যোগাযোগ উল্লেখ নেই', + 'graph.noMemory': 'কোনো মেমোরি নেই', + 'graph.source': 'উৎস', + 'graph.topic': 'বিষয়', + 'graph.global': 'বৈশ্বিক', + 'graph.document': 'ডকুমেন্ট', + 'graph.contact': 'যোগাযোগ', + 'graph.nodes': 'নোড', + 'graph.parentChild': 'প্যারেন্ট-চাইল্ড', + 'graph.documentContact': 'ডকুমেন্ট-যোগাযোগ', + 'graph.link': 'লিংক', + 'graph.links': 'লিংক', + 'graph.children': 'চাইল্ড', + 'graph.clickToOpenObsidian': 'Obsidian-এ খুলতে ক্লিক করুন', + 'graph.person': 'ব্যক্তি', + 'modal.dontShowAgain': 'একই ধরনের পরামর্শ আর দেখাবেন না', + 'reflections.loading': 'প্রতিফলন লোড হচ্ছে...', + 'reflections.empty': 'এখনো কোনো প্রতিফলন নেই', + 'reflections.title': 'প্রতিফলন', + 'reflections.proposedAction': 'প্রস্তাবিত কাজ', + 'reflections.act': 'কাজ করুন', + 'reflections.dismiss': 'বাদ দিন', + 'whatsapp.chatsSynced': 'চ্যাট সিঙ্ক হয়েছে', + 'whatsapp.chatSynced': 'চ্যাট সিঙ্ক হয়েছে', + 'sync.active': 'সক্রিয়', + 'sync.recent': 'সাম্প্রতিক', + 'sync.idle': 'নিষ্ক্রিয়', + 'sync.memorySources': 'মেমোরি উৎস', + 'sync.noConnectedSources': 'কোনো সংযুক্ত উৎস নেই', + 'sync.chunks': 'চাংক', + 'sync.lastChunk': 'শেষ চাংক:', + 'sync.pending': 'মুলতুবি', + 'sync.processed': 'প্রক্রিয়া করা হয়েছে', + 'sync.syncing': 'সিঙ্ক হচ্ছে…', + 'sync.sync': 'সিঙ্ক', + 'sync.failedToLoad': 'সিঙ্ক স্ট্যাটাস লোড করতে ব্যর্থ', + 'sync.noContent': + 'এখনো কোনো কন্টেন্ট মেমোরিতে সিঙ্ক হয়নি। শুরু করতে একটি ইন্টিগ্রেশন সংযুক্ত করুন।', + 'memorySources.title': 'মেমরি উৎস', + 'memorySources.empty': 'কোনো মেমরি পাওয়া যায়নি। স্মৃতি খাওয়া শুরু করতে একটা যোগ করো।', + 'memorySources.customSources': 'স্বনির্ধারিত উৎস', + 'memorySources.addSource': 'উৎস যোগ করুন', + 'memorySources.noCustomSources': + 'কোনো স্বনির্ধারিত উৎস পাওয়া যায়নি। একটি ফোল্ডার যোগ করুন, xqx1x rex, xqxqx pxkx ফিড, অথবা ওয়েব পেজ আরম্ভ করুন।', + 'memorySources.loadingConnections': 'সংযোগ লোড করা হচ্ছে...', + 'memorySources.noConnections': 'কোনো সক্রিয় xqxqx সংযোগ পাওয়া যায়নি। একটা সম্পর্ক প্রথমে।', + 'memorySources.pickConnection': 'একটি সংযোগ নির্বাচন করুন', + 'memorySources.selectConnection': '- একটি সংযোগ নির্বাচন করুন -', + 'memorySources.composioListFailed': 'Xqxqx সংযোগ লোড করতে ব্যর্থ।', + 'memorySources.browse': 'ব্রাউজ করুন...', + 'memorySources.folderPathPlaceholder': '/Users/you/notes', + 'memorySources.globPatternPlaceholder': '*ড্যাম', + 'memorySources.repoUrlPlaceholder': 'https://github.com/org/repo', + 'memorySources.branchPlaceholder': 'main', + 'memorySources.feedUrlPlaceholder': 'https://example.com/feed.xml', + 'memorySources.pageUrlPlaceholder': 'https://example.com/article', + 'memorySources.cssSelectorPlaceholder': 'article', + 'memorySources.searchQueryPlaceholder': 'অজানা সংযোগ', + 'memorySources.kind.composio': 'অবধি', + 'memorySources.kind.folder': 'স্থানীয় ফোল্ডার', + 'memorySources.kind.github_repo': 'xqxqxRox', + 'memorySources.kind.twitter_query': 'Xqxqx অনুসন্ধান', + 'memorySources.kind.rss_feed': 'xqxqx ফিড', + 'memorySources.kind.web_page': 'ওয়েব পেজ', + 'memorySources.sync.successTitle': 'সুসংগতি', + 'memorySources.sync.successMessage': 'অগ্রগতি শীঘ্রই দেখা যাবে।', + 'memorySources.sync.failedTitle': 'সুসংগত করতে ব্যর্থ:', + 'time.justNow': 'এইমাত্র', + 'time.secondsAgoSuffix': 'সেকেন্ড আগে', + 'time.minutesAgoSuffix': 'মিনিট আগে', + 'time.hoursAgoSuffix': 'ঘণ্টা আগে', + 'time.daysAgoSuffix': 'দিন আগে', + 'memorySources.pickKind': 'কোন ধরনের উৎস আপনি যোগ করতে চান?', + 'memorySources.backToKinds': 'উৎস থেকে প্রাপ্ত', + 'memorySources.label': 'লেবেল', + 'memorySources.labelPlaceholder': 'আমার গবেষণা নোট', + 'memorySources.add': 'যোগ করুন', + 'memorySources.adding': 'যোগ করা হচ্ছে...', + 'memorySources.added': 'উৎস যোগ করা হয়েছে', + 'memorySources.removed': 'উৎস সরিয়ে ফেলা হয়েছে', + 'memorySources.remove': 'মুছে ফেলুন', + 'memorySources.enable': 'সক্রিয় করুন', + 'memorySources.disable': 'নিষ্ক্রিয়', + 'memorySources.toggleFailed': 'ব্যর্থ', + 'memorySources.removeFailed': 'মুছে ফেলা যায়নি', + 'memorySources.folderPath': 'ফোল্ডারের পাথ', + 'memorySources.globPattern': 'বিন্যাস', + 'memorySources.repoUrl': 'সংরক্ষণস্থল xqxqxqx', + 'memorySources.branch': 'ব্রাঞ্চ', + 'memorySources.feedUrl': 'ফিড xqxqx', + 'memorySources.pageUrl': 'পৃষ্ঠার xqxqx', + 'memorySources.cssSelector': 'xqxqx নির্বাচক', + 'memorySources.searchQuery': 'অনুসন্ধান', + 'backend.aiBackend': 'AI ব্যাকএন্ড', + 'backend.cloud': 'ক্লাউড', + 'backend.recommended': 'প্রস্তাবিত', + 'backend.cloudDescription': + 'আমাদের সার্ভারে হোস্ট করা দ্রুত, শক্তিশালী মডেল। সাথে সাথে ব্যবহারের জন্য প্রস্তুত।', + 'backend.privacyNote': 'কোনো ব্যক্তিগত ডেটা, বার্তা বা কী কখনো আমাদের সার্ভারে পাঠানো হয় না।', + 'backend.local': 'লোকাল', + 'backend.advanced': 'অ্যাডভান্সড', + 'backend.localDescription': + 'Ollama ব্যবহার করে নিজের মেশিনে মডেল চালান। সম্পূর্ণ গোপনীয়তা, সেটআপ প্রয়োজন।', + 'backend.ramRecommended': '16GB+ RAM প্রস্তাবিত', + 'subconscious.tasks': 'টাস্ক', + 'subconscious.ticks': 'টিক', + 'subconscious.last': 'শেষ', + 'subconscious.failed': 'ব্যর্থ', + 'subconscious.tickInterval': 'টিক ইন্টারভাল', + 'subconscious.runNow': 'এখনই চালান', + 'subconscious.providerUnavailableTitle': 'Subconscious বিরত আছে', + 'subconscious.providerSettings': 'AI সেটিংস', + 'subconscious.approvalNeeded': 'অনুমোদন প্রয়োজন', + 'subconscious.requiresApproval': 'অনুমোদন প্রয়োজন', + 'subconscious.fixInConnections': 'সংযোগে ঠিক করুন', + 'subconscious.goAhead': 'এগিয়ে যান', + 'subconscious.activeTasks': 'সক্রিয় টাস্ক', + 'subconscious.noActiveTasks': 'কোনো সক্রিয় টাস্ক নেই', + 'subconscious.default': 'ডিফল্ট', + 'subconscious.addTaskPlaceholder': 'একটি নতুন টাস্ক যোগ করুন...', + 'subconscious.activityLog': 'অ্যাক্টিভিটি লগ', + 'subconscious.noActivity': 'এখনো কোনো অ্যাক্টিভিটি নেই', + 'subconscious.decision.nothingNew': 'নতুন কিছু নেই', + 'subconscious.decision.completed': 'সম্পন্ন', + 'subconscious.decision.evaluating': 'মূল্যায়ন হচ্ছে', + 'subconscious.decision.waitingApproval': 'অনুমোদনের অপেক্ষায়', + 'subconscious.decision.failed': 'ব্যর্থ', + 'subconscious.decision.cancelled': 'বাতিল', + 'subconscious.decision.skipped': 'এড়িয়ে গেছে', + 'actionable.complete': 'সম্পন্ন', + 'actionable.dismiss': 'বাদ দিন', + 'actionable.snooze': 'স্নুজ', + 'actionable.new': 'নতুন', + 'stats.storage': 'স্টোরেজ', + 'stats.files': 'ফাইল', + 'stats.documents': 'ডকুমেন্ট', + 'stats.today': 'আজ', + 'stats.namespaces': 'নেমস্পেস', + 'stats.relations': 'সম্পর্ক', + 'stats.firstMemory': 'প্রথম মেমোরি', + 'stats.latest': 'সর্বশেষ', + 'stats.sessions': 'সেশন', + 'stats.tokens': 'টোকেন', + 'bootCheck.invalidUrl': 'একটি রানটাইম URL দিন।', + 'bootCheck.urlMustStartWith': 'URL-টি http:// বা https:// দিয়ে শুরু হতে হবে', + 'bootCheck.validUrlRequired': + 'এটি বৈধ URL মনে হচ্ছে না (চেষ্টা করুন https://core.example.com/rpc)', + 'bootCheck.tokenRequired': 'সংযোগ করতে একটি অথ টোকেন প্রয়োজন।', + 'bootCheck.chooseCoreMode': 'একটি রানটাইম বেছে নিন', + 'bootCheck.connectToCore': 'আপনার রানটাইমে সংযুক্ত হন', + 'bootCheck.desktopDescription': + 'OpenHuman চিন্তা করতে একটি রানটাইম প্রয়োজন। এটি কোথায় থাকবে তা বেছে নিন।', + 'bootCheck.webDescription': + 'ওয়েবে, OpenHuman আপনার নিয়ন্ত্রণে একটি রানটাইমে সংযুক্ত হয়। নিচে এর URL ও অথ টোকেন দিন, অথবা সরাসরি আপনার মেশিনে চালাতে ডেস্কটপ অ্যাপ নিন।', + 'bootCheck.preferDesktop': 'সব নিজের ডিভাইসে রাখতে চান?', + 'bootCheck.downloadDesktop': 'ডেস্কটপ অ্যাপ নিন', + 'bootCheck.localRecommended': 'লোকালি চালান (প্রস্তাবিত)', + 'bootCheck.localDescription': + 'সরাসরি আপনার কম্পিউটারে চলে। সবচেয়ে দ্রুত, সম্পূর্ণ ব্যক্তিগত, কিছু সেটআপ করতে হবে না।', + 'bootCheck.cloudMode': 'ক্লাউডে চালান (জটিল)', + 'bootCheck.cloudDescription': + 'অন্য কোথাও হোস্ট করা রানটাইমে সংযুক্ত হন। ২৪×৭ অনলাইন থাকে, এই ডিভাইস চালু রাখতে হয় না।', + 'bootCheck.coreRpcUrl': 'রানটাইম URL', + 'bootCheck.rpcUrlPlaceholder': 'https://core.example.com/rpc', + 'bootCheck.authToken': 'অথ টোকেন', + 'bootCheck.bearerTokenPlaceholder': 'আপনার রিমোট রানটাইম থেকে বেয়ারার টোকেন', + 'bootCheck.storedLocally': 'শুধু এই ডিভাইসে রাখা। পাঠানো হয় ', + 'bootCheck.testing': 'পরীক্ষা হচ্ছে…', + 'bootCheck.testConnection': 'সংযোগ পরীক্ষা করুন', + 'bootCheck.connectedOk': 'সংযুক্ত। সব ঠিকঠাক।', + 'bootCheck.authFailed': 'টোকেনটি কাজ করেনি। আবার পরীক্ষা করুন।', + 'bootCheck.unreachablePrefix': 'পৌঁছানো যায়নি:', + 'bootCheck.checkingCore': 'আপনার রানটাইম জাগানো হচ্ছে…', + 'bootCheck.cannotReach': 'রানটাইমে পৌঁছানো যাচ্ছে না', + 'bootCheck.cannotReachDesc': 'আপনার রানটাইমে সংযোগ করা যায়নি। অন্য একটি চেষ্টা করবেন?', + 'bootCheck.switchMode': 'ভিন্ন রানটাইম বেছে নিন', + 'bootCheck.quit': 'প্রস্থান', + 'bootCheck.legacyDetected': 'লেগ্যাসি ব্যাকগ্রাউন্ড রানটাইম শনাক্ত হয়েছে', + 'bootCheck.legacyDescription': + 'এই ডিভাইসে আলাদাভাবে ইনস্টল করা একটি OpenHuman ডেমন ইতিমধ্যে চলছে। বিল্ট-ইন রানটাইম নিয়ন্ত্রণ নেওয়ার আগে এটি সরাতে হবে।', + 'bootCheck.removing': 'সরানো হচ্ছে…', + 'bootCheck.removeContinue': 'সরান ও চালিয়ে যান', + 'bootCheck.localNeedsRestart': 'লোকাল রানটাইম রিস্টার্ট প্রয়োজন', + 'bootCheck.localNeedsRestartDesc': + 'আপনার লোকাল রানটাইম এই অ্যাপের চেয়ে ভিন্ন ভার্সনে আছে। দ্রুত রিস্টার্ট তাদের আবার সমন্বয় করবে।', + 'bootCheck.restarting': 'রিস্টার্ট হচ্ছে…', + 'bootCheck.restartCore': 'রানটাইম রিস্টার্ট করুন', + 'bootCheck.cloudNeedsUpdate': 'ক্লাউড রানটাইম আপডেট প্রয়োজন', + 'bootCheck.cloudNeedsUpdateDesc': + 'আপনার ক্লাউড রানটাইম এই অ্যাপের চেয়ে ভিন্ন ভার্সনে আছে। আপডেটার চালান।', + 'bootCheck.updating': 'আপডেট হচ্ছে…', + 'bootCheck.updateCloudCore': 'ক্লাউড রানটাইম আপডেট করুন', + 'bootCheck.versionCheckFailed': 'রানটাইম ভার্সন পরীক্ষা ব্যর্থ', + 'bootCheck.versionCheckFailedDesc': + 'আপনার রানটাইম চলছে কিন্তু ভার্সন জানাচ্ছে না। পুরনো হতে পারে। চালিয়ে যেতে রিস্টার্ট বা আপডেট করুন।', + 'bootCheck.working': 'কাজ হচ্ছে…', + 'bootCheck.restartUpdateCore': 'রানটাইম রিস্টার্ট / আপডেট করুন', + 'bootCheck.unexpectedError': 'অপ্রত্যাশিত বুট-চেক ত্রুটি', + 'bootCheck.actionFailed': 'কিছু একটা ভুল হয়েছে। আবার চেষ্টা করুন।', + 'bootCheck.portConflictTitle': 'অ্যাপ ইঞ্জিন চালু করা যায়নি', + 'bootCheck.portConflictBody': + 'অন্য একটি প্রক্রিয়া OpenHuman-এর প্রয়োজনীয় নেটওয়ার্ক পোর্ট ব্যবহার করছে। আমরা স্বয়ংক্রিয়ভাবে এটি ঠিক করার চেষ্টা করব।', + 'bootCheck.portConflictFixButton': 'স্বয়ংক্রিয়ভাবে ঠিক করুন', + 'bootCheck.portConflictFixing': 'ঠিক করা হচ্ছে…', + 'bootCheck.portConflictFixFailed': + 'স্বয়ংক্রিয় সংশোধন কাজ করেনি। অনুগ্রহ করে আপনার কম্পিউটার পুনরায় চালু করুন এবং আবার চেষ্টা করুন।', + 'notifications.justNow': 'এইমাত্র', + 'notifications.minAgo': '{n} মিনিট আগে', + 'notifications.hrAgo': '{n} ঘণ্টা আগে', + 'notifications.dayAgo': '{n} দিন আগে', + 'notifications.category.messages': 'বার্তা', + 'notifications.category.agents': 'এজেন্ট', + 'notifications.category.skills': 'স্কিলস', + 'notifications.category.system': 'সিস্টেম', + 'notifications.category.meetings': 'মিটিং', + 'notifications.category.reminders': 'রিমাইন্ডার', + 'notifications.category.important': 'গুরুত্বপূর্ণ', + 'about.update.status.checking': 'পরীক্ষা হচ্ছে...', + 'about.update.status.available': 'v{version} পাওয়া গেছে', + 'about.update.status.availableNoVersion': 'আপডেট পাওয়া গেছে', + 'about.update.status.downloading': 'ডাউনলোড হচ্ছে...', + 'about.update.status.readyToInstall': 'v{version} ইনস্টলের জন্য প্রস্তুত', + 'about.update.status.readyToInstallNoVersion': + 'নতুন ভার্সন ডাউনলোড হয়ে প্রস্তুত। প্রয়োগ করতে রিস্টার্ট করুন।', + 'about.update.status.installing': 'ইনস্টল হচ্ছে...', + 'about.update.status.restarting': 'রিস্টার্ট হচ্ছে...', + 'about.update.status.upToDate': 'আপনি সর্বশেষ ভার্সন চালাচ্ছেন।', + 'about.update.status.error': 'আপডেট পরীক্ষা ব্যর্থ', + 'about.update.status.default': 'আপডেট পরীক্ষা করুন', + 'welcome.connectionFailed': 'সংযোগ ব্যর্থ: {status} {statusText}', + 'welcome.connectionFailedMsg': 'সংযোগ ব্যর্থ: {message}', + 'welcome.continueLocally': 'স্থানীয়ভাবে চালিয়ে যান', 'welcome.continueLocallyExperimental': 'লোকালি চালিয়ে যান (প্রায়োগিক)', + 'welcome.localSessionStarting': 'স্থানীয় অধিবেশন শুরু করা হচ্ছে...', + 'welcome.localSessionDesc': 'একটি অফলাইন skips__ BR__Ans স্থানীয় প্রোফাইল ব্যবহার করে।', + 'chat.agentChatDesc': 'এজেন্টের সাথে সরাসরি চ্যাট সেশন খুলুন।', + 'chat.modelPlaceholder': 'gpt-4o', + 'channels.activeRouteValue': '{authMode} এর মাধ্যমে {channel}', + 'privacy.dataKind.messages': 'বার্তা', + 'privacy.dataKind.agents': 'এজেন্ট', + 'privacy.dataKind.skills': 'স্কিলস', + 'privacy.dataKind.system': 'সিস্টেম', + 'privacy.dataKind.meetings': 'মিটিং', + 'privacy.dataKind.reminders': 'রিমাইন্ডার', + 'privacy.dataKind.important': 'গুরুত্বপূর্ণ', + 'onboarding.enableLocalAI': 'লোকাল AI সক্রিয় করুন', + 'onboarding.skills.status.available': 'পাওয়া যাচ্ছে', + 'onboarding.skills.status.connected': 'সংযুক্ত', + 'onboarding.skills.status.connecting': 'সংযোগ হচ্ছে', + 'onboarding.skills.status.error': 'ত্রুটি', + 'onboarding.skills.status.unavailable': 'পাওয়া যাচ্ছে না', + 'composio.statusUnavailable': 'স্ট্যাটাস পাওয়া যাচ্ছে না', + 'composio.authExpired': 'অথ মেয়াদোত্তীর্ণ', + 'composio.reconnect': 'পুনঃসংযোগ', + 'composio.expiredAuthorization': '{name} অনুমোদনের মেয়াদ শেষ', + 'composio.expiredDescription': + 'পুনরায় সংযোগ করতে PH__0 টুল পুনরায় সংযুক্ত করুন। আপনি OAuth অ্যাক্সেস রিফ্রেশ না করা পর্যন্ত OpenHuman এই ইন্টিগ্রেশনটি অনুপলব্ধ রাখবে৷', + 'composio.envVarOverrides': 'সেট থাকলে, এই সেটিং ওভাররাইড করে।', + 'composio.previewBadge': 'পূর্বরূপ', + 'composio.previewTooltip': + 'এজেন্ট ইন্টিগ্রেশন শীঘ্রই আসছে — আপনি সংযোগ করতে পারেন, কিন্তু এজেন্ট এখনও এই টুলকিটটি ব্যবহার করতে পারবেন না।', + 'memory.day.sun': 'রবি', + 'memory.day.mon': 'সোম', + 'memory.day.tue': 'মঙ্গল', + 'memory.day.wed': 'বুধ', + 'memory.day.thu': 'বৃহঃ', + 'memory.day.fri': 'শুক্র', + 'memory.day.sat': 'শনি', + 'memory.ingesting': 'ইনজেস্ট হচ্ছে', + 'memory.ingestionQueued': 'কিউতে', + 'memory.ingestingTitle': '{title} ইনজেস্ট হচ্ছে', + 'mic.noAudioCaptured': 'কোনো অডিও ক্যাপচার হয়নি', + 'mic.noSpeechDetected': 'কোনো কথা শনাক্ত হয়নি', + 'mic.lowConfidenceResult': 'অডিও স্পষ্টভাবে বোঝা যায়নি — আবার চেষ্টা করুন', + 'mic.failedToStopRecording': 'রেকর্ডিং বন্ধ করতে ব্যর্থ: {message}', + 'mic.transcriptionFailed': 'ট্রান্সক্রিপশন ব্যর্থ: {message}', + 'reflections.kind.retrospective': 'পূর্বদর্শন', + 'reflections.kind.derivedFact': 'ডেরাইভড ফ্যাক্ট', + 'reflections.kind.moodInsight': 'মুড ইনসাইট', + 'reflections.kind.relationshipInsight': 'সম্পর্ক ইনসাইট', + 'graph.tooltip.summary': 'সারসংক্ষেপ', + 'graph.tooltip.contact': 'যোগাযোগ', + 'localModel.usage.never': 'কখনো না', + 'localModel.usage.mediumLoad': 'মাঝারি লোড', + 'localModel.usage.lowLoad': 'কম লোড', + 'localModel.usage.idleMode': 'আইডল মোড', + 'localModel.rebootstrapComplete': 'মডেল রি-বুটস্ট্র্যাপ সম্পন্ন।', + 'localModel.modelsVerified': 'লোকাল মডেল যাচাই করা হয়েছে।', + 'accounts.addModal.allConnected': 'সব সংযুক্ত', + 'accounts.addModal.title': 'অ্যাকাউন্ট যোগ করুন', + 'accounts.respondQueue.empty': 'খালি', + 'accounts.respondQueue.hide': 'প্রতিক্রিয়া সারি লুকান', + 'accounts.respondQueue.loadFailed': 'রেসপন্ড কিউ লোড করতে ব্যর্থ', + 'accounts.respondQueue.loading': 'কিউ লোড হচ্ছে…', + 'accounts.respondQueue.pending': 'মুলতুবি', + 'accounts.respondQueue.show': 'প্রতিক্রিয়া সারি দেখান', + 'accounts.respondQueue.title': 'রেসপন্ড কিউ', + 'accounts.webviewHost.almostReady': 'প্রায় প্রস্তুত...', + 'accounts.webviewHost.loadTimeout': 'Webview লোড টাইমআউট', + 'accounts.webviewHost.loading': '{providerName} লোড হচ্ছে...', + 'accounts.webviewHost.loadingAccount': 'অ্যাকাউন্ট লোড হচ্ছে', + 'accounts.webviewHost.restoringSession': 'সেশন পুনরুদ্ধার হচ্ছে...', + 'accounts.webviewHost.retryLoading': 'লোড আবার চেষ্টা করুন', + 'accounts.webviewHost.takingLonger': '{providerName} প্রত্যাশার চেয়ে বেশি সময় নিচ্ছে।', + 'accounts.webviewHost.timeoutHint': 'টাইমআউট হিন্ট', + 'app.connectionBadge.composio': 'Composio', + 'app.connectionBadge.messaging': 'মেসেজিং', + 'app.connectionIndicator.connected': 'OpenHuman AI-এ সংযুক্ত 🚀', + 'app.connectionIndicator.connecting': 'সংযোগ হচ্ছে', + 'app.connectionIndicator.coreOffline': 'কোর অফলাইন', + 'app.connectionIndicator.disconnected': 'সংযোগ বিচ্ছিন্ন', + 'app.connectionIndicator.offline': 'অফলাইন', + 'app.connectionIndicator.reconnecting': 'পুনঃসংযোগ হচ্ছে…', + 'app.errorFallback.componentStack': 'কম্পোনেন্ট স্ট্যাক', + 'app.errorFallback.downloadLatest': 'সর্বশেষ ডাউনলোড করুন', + 'app.errorFallback.heading': 'শিরোনাম', + 'app.errorFallback.hint': 'হিন্ট', + 'app.errorFallback.reloadApp': 'অ্যাপ রিলোড করুন', + 'app.errorFallback.subheading': 'উপশিরোনাম', + 'app.errorFallback.tryRecover': 'পুনরুদ্ধার চেষ্টা করুন', + 'app.localAiDownload.installing': 'ইনস্টল হচ্ছে...', + 'app.localAiDownload.preparing': 'প্রস্তুত হচ্ছে...', + 'app.openhumanLink.accounts.continueWith': '{label} সাইন-ইন দিয়ে চালিয়ে যান', + 'app.openhumanLink.accounts.done': 'সম্পন্ন', + 'app.openhumanLink.accounts.intro': 'ভূমিকা', + 'app.openhumanLink.accounts.webviewNote': 'Webview নোট', + 'app.openhumanLink.billing.openDashboard': 'ড্যাশবোর্ড খুলুন', + 'app.openhumanLink.billing.stayOnTrial': 'ট্রায়ালে থাকুন', + 'app.openhumanLink.billing.trialCredit': 'ট্রায়াল ক্রেডিট', + 'app.openhumanLink.billing.trialDesc': 'ট্রায়াল বিবরণ', + 'app.openhumanLink.defaultBody': 'পপআপে এখনো প্রস্তুত নয়। সম্পূর্ণ সেটিংস পেজ খুলুন যখন', + 'app.openhumanLink.discord.intro': 'ভূমিকা', + 'app.openhumanLink.discord.openInvite': 'আমন্ত্রণ খুলুন', + 'app.openhumanLink.discord.perk1': 'সুবিধা ১', + 'app.openhumanLink.discord.perk2': 'সুবিধা ২', + 'app.openhumanLink.discord.perk3': 'সুবিধা ৩', + 'app.openhumanLink.discord.perk4': 'সুবিধা ৪', + 'app.openhumanLink.done': 'সম্পন্ন', + 'app.openhumanLink.loadingChannelSetup': 'চ্যানেল সেটআপ লোড হচ্ছে', + 'app.openhumanLink.maybeLater': 'হয়তো পরে', + 'app.openhumanLink.notifications.asking': 'OS-এ জিজ্ঞেস করছে…', + 'app.openhumanLink.notifications.blocked': 'ব্লক করা', + 'app.openhumanLink.notifications.blockedStep1': 'ব্লক করা ধাপ ১', + 'app.openhumanLink.notifications.blockedStep2': 'ব্লক করা ধাপ ২', + 'app.openhumanLink.notifications.blockedStep3': 'ব্লক করা ধাপ ৩', + 'app.openhumanLink.notifications.intro': 'ভূমিকা', + 'app.openhumanLink.notifications.promptHint': 'প্রম্পট হিন্ট', + 'app.openhumanLink.notifications.retry': 'পরীক্ষা বিজ্ঞপ্তি আবার চেষ্টা করুন', + 'app.openhumanLink.notifications.send': 'পরীক্ষা বিজ্ঞপ্তি পাঠান', + 'app.openhumanLink.notifications.sendFailed': 'পাঠানো যায়নি: {error}', + 'app.openhumanLink.notifications.sent': + 'টেস্ট নোটিফিকেশন পাঠানো হয়েছে। যদি না পেয়ে থাকেন, System Settings → Notifications → OpenHuman-এ যান, Allow Notifications চালু করুন, এবং Banner Style-কে Persistent-এ সেট করুন।', + 'app.openhumanLink.skipForNow': 'এখনের জন্য এড়িয়ে যান', + 'app.openhumanLink.telegramUnavailable': 'Telegram পাওয়া যাচ্ছে না', + 'app.openhumanLink.title.accounts': 'আপনার অ্যাপ সংযুক্ত করুন', + 'app.openhumanLink.title.billing': 'বিলিং ও ক্রেডিট', + 'app.openhumanLink.title.discord': 'কমিউনিটিতে যোগ দিন', + 'app.openhumanLink.title.messaging': 'একটি চ্যাট চ্যানেল সংযুক্ত করুন', + 'app.openhumanLink.title.notifications': 'বিজ্ঞপ্তির অনুমতি দিন', + 'app.persistRehydration.body': 'বডি', + 'app.persistRehydration.heading': 'শিরোনাম', + 'app.persistRehydration.resetCta': 'রিসেট হচ্ছে…', + 'app.persistRehydration.resetting': 'রিসেট হচ্ছে…', + 'app.routeLoading.initializing': 'OpenHuman শুরু হচ্ছে...', + 'app.update.currentlyOn': '{version}', + 'app.update.errorFallback': 'আপডেটের সময় কিছু একটা ভুল হয়েছে।', + 'app.update.header.default': 'আপডেট', + 'app.update.header.error': 'আপডেট ব্যর্থ', + 'app.update.header.installing': 'আপডেট ইনস্টল হচ্ছে', + 'app.update.header.readyToInstall': 'আপডেট ইনস্টলের জন্য প্রস্তুত', + 'app.update.header.restarting': 'রিস্টার্ট হচ্ছে…', + 'app.update.later': 'পরে', + 'app.update.newVersionReady': 'একটি নতুন ভার্সন ইনস্টলের জন্য প্রস্তুত।', + 'app.update.progress.downloaded': '{amount} ডাউনলোড হয়েছে', + 'app.update.progress.installing': 'নতুন ভার্সন ইনস্টল হচ্ছে…', + 'app.update.progress.restarting': 'অ্যাপ পুনরায় লঞ্চ হচ্ছে…', + 'app.update.progress.working': '{percent}%', + 'app.update.restartNote': 'রিস্টার্ট নোট', + 'app.update.restartNow': 'এখনই রিস্টার্ট করুন', + 'app.update.versionReady': 'ভার্সন {newVersion} ইনস্টলের জন্য প্রস্তুত।', + 'channels.discord.accountLinked': 'অ্যাকাউন্ট লিংক হয়েছে', + 'channels.discord.connect': 'সংযুক্ত করুন', + 'channels.discord.linkTokenExpired': 'লিংক টোকেনের মেয়াদ শেষ। আবার চেষ্টা করুন।', + 'channels.discord.linkTokenInstruction': '{token}', + 'channels.discord.linkTokenLabel': 'লিংক টোকেন লেবেল', + 'channels.discord.linkTokenOnce': 'লিংক টোকেন একবার', + 'channels.discord.picker.allPermissionsOk': 'বট এই চ্যানেলে সব প্রয়োজনীয় অনুমতি পেয়েছে।', + 'channels.discord.picker.botNotInServers': 'বট কোনো সার্ভারে নেই', + 'channels.discord.picker.category': 'ক্যাটাগরি', + 'channels.discord.picker.channel': 'চ্যানেল', + 'channels.discord.picker.checkingPermissions': 'অনুমতি পরীক্ষা হচ্ছে', + 'channels.discord.picker.loadingChannels': 'চ্যানেল লোড হচ্ছে...', + 'channels.discord.picker.loadingServers': 'সার্ভার লোড হচ্ছে...', + 'channels.discord.picker.missingPermissions': 'অনুমতি নেই', + 'channels.discord.picker.noChannels': 'কোনো টেক্সট চ্যানেল পাওয়া যায়নি', + 'channels.discord.picker.noServers': 'কোনো সার্ভার পাওয়া যায়নি', + 'channels.discord.picker.selectChannel': 'একটি চ্যানেল বেছে নিন', + 'channels.discord.picker.selectServer': 'একটি সার্ভার বেছে নিন', + 'channels.discord.picker.server': 'সার্ভার', + 'channels.discord.picker.serverChannelSelection': 'সার্ভার ও চ্যানেল নির্বাচন', + 'channels.discord.savedRestartRequired': 'চ্যানেল সংরক্ষিত। সক্রিয় করতে অ্যাপ রিস্টার্ট করুন।', + 'channels.telegram.connect': 'সংযুক্ত করুন', + 'channels.telegram.managedDmConnecting': 'ম্যানেজড DM সংযোগ হচ্ছে', + 'channels.telegram.managedDmTimeout': 'ম্যানেজড DM টাইমআউট', + 'channels.telegram.reconnect': 'পুনরায় সংযুক্ত করুন', + 'channels.telegram.savedRestartRequired': 'চ্যানেল সংরক্ষিত। সক্রিয় করতে অ্যাপ রিস্টার্ট করুন।', + 'channels.web.alwaysAvailable': 'সর্বদা পাওয়া যায়', + 'chat.approval.approve': 'লিইরোভ', + 'chat.approval.alwaysAllow': 'সর্বদা অনুমতি প্রদান করা হবে', + 'chat.approval.alwaysAllowHint': + 'এই সরঞ্জামের জন্য অনুরোধ করবেন না - সর্বদা আপনার তালিকায় যোগ করুন', + 'chat.approval.deciding': 'চলমান...', + 'chat.approval.deny': 'প্রত্যাখ্যান করুন', + 'chat.approval.error': 'আপনার সিদ্ধান্তের কথা রেকর্ড করা যায় নি — আবার চেষ্টা করুন ।', + 'chat.approval.fallback': 'এজেন্ট এমন কাজ করতে চায় যা আপনার অনুমোদন প্রয়োজন.', + 'chat.approval.title': 'অনুমোদন প্রয়োজন', + 'chat.approval.tool': 'টুল:', + 'channels.authMode.managed_dm': 'OpenHuman দিয়ে লগইন করুন', + 'channels.authMode.oauth': 'OAuth সাইন-ইন করুন', + 'channels.authMode.bot_token': 'আপনার নিজের বট টোকেন ব্যবহার করুন', + 'channels.authMode.api_key': 'আপনার নিজস্ব API কী ব্যবহার করুন', + 'channels.fieldRequired': '{field} প্রয়োজন', + 'channels.mcp.title': '__PH0__ সার্ভার__92731', + 'channels.mcp.description': + 'Model Context Protocol সার্ভার ব্রাউজ করুন এবং পরিচালনা করুন, যা AI-কে নতুন টুল দিয়ে সম্প্রসারিত করে।', + 'channels.discord.displayName': 'Discord', + 'channels.discord.description': 'Discord এর মাধ্যমে বার্তা পাঠান এবং গ্রহণ করুন।', + 'channels.discord.authMode.bot_token.description': 'আপনার নিজস্ব Discord বট টোকেন প্রদান করুন।', + 'channels.discord.authMode.oauth.description': + 'OAuth এর মাধ্যমে আপনার Discord সার্ভারে OpenHuman বট ইনস্টল করুন।', + 'channels.discord.authMode.managed_dm.description': + 'আপনার ব্যক্তিগত Discord অ্যাকাউন্টটি OpenHuman বটের সাথে লিঙ্ক করুন।', + 'channels.discord.fields.bot_token.label': 'বট টোকেন', + 'channels.discord.fields.bot_token.placeholder': 'আপনার Discord বট টোকেন', + 'channels.discord.fields.guild_id.label': 'সার্ভার (গিল্ড) আইডি', + 'channels.discord.fields.guild_id.placeholder': 'ঐচ্ছিক: একটি নির্দিষ্ট সার্ভারে সীমাবদ্ধ', + 'channels.telegram.displayName': 'Telegram', + 'channels.telegram.description': 'Telegram এর মাধ্যমে বার্তা পাঠান এবং গ্রহণ করুন।', + 'channels.telegram.authMode.managed_dm.description': 'সরাসরি OpenHuman Telegram বটকে মেসেজ করুন।', + 'channels.telegram.authMode.bot_token.description': + '@BotFather থেকে আপনার নিজস্ব Telegram বট টোকেন প্রদান করুন।', + 'channels.telegram.fields.bot_token.label': 'বট টোকেন', + 'channels.telegram.fields.bot_token.placeholder': '123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11', + 'channels.telegram.fields.allowed_users.label': 'অনুমোদিত ব্যবহারকারীদের', + 'channels.telegram.fields.allowed_users.placeholder': + 'কমা দ্বারা পৃথক করা Telegram ব্যবহারকারীর নাম', + 'channels.telegram.remoteControlTitle': 'রিমোট কন্ট্রোল (Telegram)', + 'channels.telegram.remoteControlBody': + 'একটি অনুমোদিত Telegram চ্যাট থেকে, /status, /sessions, /new, অথবা /help পাঠান। মডেল রাউটিং এখনও /মডেল এবং /মডেল ব্যবহার করে।', + 'channels.web.displayName': 'ওয়েব', + 'channels.web.description': 'বিল্ট-ইন ওয়েব UI এর মাধ্যমে চ্যাট করুন।', + 'channels.web.authMode.managed_dm.description': + 'এমবেড করা ওয়েব চ্যাট ব্যবহার করুন — কোনো সেটআপের প্রয়োজন নেই।', + 'channels.yuanbao.connect': 'Connect', + 'channels.yuanbao.connecting': 'সংযোগ হচ্ছে…', + 'channels.yuanbao.fieldRequired': '{field} আবশ্যক', + 'channels.yuanbao.reconnect': 'Reconnect', + 'channels.yuanbao.savedRestartRequired': + 'চ্যানেল সংরক্ষিত হয়েছে। সক্রিয় করতে অ্যাপটি পুনরায় চালু করুন।', + 'channels.yuanbao.unexpectedStatus': 'অপ্রত্যাশিত সংযোগ অবস্থা: {status}', + 'chat.unsubscribeApproval.approve': 'অনুমোদন ও আনসাবস্ক্রাইব', + 'chat.unsubscribeApproval.approved': '✓ সফলভাবে আনসাবস্ক্রাইব হয়েছে।', + 'chat.unsubscribeApproval.denied': '✕ অনুরোধ প্রত্যাখ্যাত।', + 'chat.unsubscribeApproval.deny': 'প্রত্যাখ্যান করুন', + 'chat.unsubscribeApproval.processing': 'প্রক্রিয়া হচ্ছে...', + 'chat.unsubscribeApproval.title': 'আনসাবস্ক্রাইব অনুরোধ', + 'commandPalette.ariaLabel': 'কমান্ড প্যালেট', + 'commandPalette.description': 'বিবরণ', + 'commandPalette.label': 'কমান্ড', + 'commandPalette.noResults': 'কোনো ফলাফল নেই', + 'commandPalette.placeholder': 'একটি কমান্ড টাইপ করুন বা খুঁজুন…', + 'commandPalette.searchAria': 'কমান্ড খুঁজুন', + 'commandPalette.shortcutHint': 'সব শর্টকাটের জন্য ? চাপুন', + 'commandPalette.title': 'কমান্ড প্যালেট', + 'kbd.ariaLabel': 'কীবোর্ড শর্টকাট: {shortcut}', + 'iosMascot.connectedTo': '[[I18N_SEP_92731]] এর সাথে সংযুক্ত', + 'iosMascot.defaultPairedLabel': 'ডেস্কটপ', + 'iosMascot.disconnect': 'সংযোগ বিচ্ছিন্ন করুন', + 'iosMascot.error.generic': 'কিছু ভুল হয়েছে৷ আবার চেষ্টা করুন.', + 'iosMascot.error.sendFailed': 'পাঠাতে ব্যর্থ হয়েছে৷ আপনার সংযোগ পরীক্ষা করুন.', + 'iosMascot.pushToTalk': 'কথা বলার জন্য চাপ দিন', + 'iosMascot.sendMessage': 'বার্তা পাঠান', + 'iosMascot.thinking': 'থিং...', + 'iosMascot.typeMessage': 'একটি বার্তা টাইপ করুন...', + 'iosPair.connectedLoading': 'সংযুক্ত! লোড হচ্ছে...', + 'iosPair.connecting': 'ডেস্কটপের সাথে সংযুক্ত হচ্ছে...', + 'iosPair.desktopLabel': 'ডেস্কটপ', + 'iosPair.error.camera': + 'ক্যামেরা স্ক্যান ব্যর্থ হয়েছে। ক্যামেরার অনুমতি পরীক্ষা করুন এবং আবার চেষ্টা করুন।', + 'iosPair.error.connectionFailed': + 'সংযোগ ব্যর্থ হয়েছে। নিশ্চিত করুন ডেস্কটপ অ্যাপটি চলছে এবং আবার চেষ্টা করুন।', + 'iosPair.error.invalidQr': + 'অবৈধ QR কোড। নিশ্চিত করুন আপনি একটি OpenHuman পেয়ারিং কোড স্ক্যান করছেন।', + 'iosPair.error.unreachableDesktop': + 'ডেস্কটপে পৌঁছানো যায়নি। নিশ্চিত করুন উভয় ডিভাইস অনলাইনে আছে এবং আবার চেষ্টা করুন।', + 'iosPair.expired': 'QR code মেয়াদ শেষ হয়েছে। কোডটি পুনরায় তৈরি করতে ডেস্কটপকে বলুন।', + 'iosPair.instructions': + 'আপনার ডেস্কটপে OpenHuman খুলুন, Settings > Devices-এ যান, এবং QR কোড দেখাতে "Pair phone" ট্যাপ করুন।', + 'iosPair.retryScan': 'পুনরায় স্ক্যান করার চেষ্টা করুন', + 'iosPair.scanQrCode': 'স্ক্যান QR code', + 'iosPair.scannerOpening': 'স্ক্যানার খোলা হচ্ছে...', + 'iosPair.step.openDesktop': 'ডেস্কটপে OpenHuman খুলুন', + 'iosPair.step.openSettings': 'সেটিংস > ডিভাইসগুলিতে যান', + 'iosPair.step.showQr': 'QR', + 'iosPair.title': 'আপনার ডেস্কটপের সাথে পেয়ার করুন', + 'composio.connect.additionalConfigRequired': 'অতিরিক্ত কনফিগ প্রয়োজন', + 'composio.connect.atlassianSubdomainHint': 'acme', + 'composio.connect.atlassianSubdomainLabel': 'Atlassian সাবডোমেইন লেবেল', + 'composio.connect.connect': 'সংযোগ করুন', + 'composio.connect.dynamicsOrgNameHint': + 'উদাহরণস্বরূপ, myorg.crm.dynamics.com-এর জন্য "myorg"। সম্পূর্ণ URL নয়, শুধু সংক্ষিপ্ত সংস্থার নাম লিখুন।', + 'composio.connect.dynamicsOrgNameLabel': 'Dynamics 365 সংস্থার নাম', + 'composio.connect.connectionFailed': 'সংযোগ ব্যর্থ (স্ট্যাটাস: {status})।', + 'composio.connect.disconnectFailed': 'সংযোগ বিচ্ছিন্ন করতে ব্যর্থ: {msg}', + 'composio.connect.disconnecting': 'সংযোগ বিচ্ছিন্ন হচ্ছে…', + 'composio.connect.idleDescription': 'সংযোগ করুন আপনার', + 'composio.connect.idleDescriptionSuffix': + 'অ্যাকাউন্ট। আমরা একটি ব্রাউজার উইন্ডো খুলব, সেখানে আপনি অ্যাক্সেস অনুমোদন করবেন, এবং এই অ্যাপ স্বয়ংক্রিয়ভাবে সংযোগ শনাক্ত করবে।', + 'composio.connect.isConnected': 'সংযুক্ত।', + 'composio.connect.manage': 'পরিচালনা', + 'composio.connect.needsFieldsPrefix': 'সংযোগ করতে', + 'composio.connect.needsFieldsSuffix': + 'আমাদের আরও কিছু তথ্য প্রয়োজন। নিচের অনুপস্থিত ফিল্ডগুলি পূরণ করুন এবং আবার চেষ্টা করুন।', + 'composio.connect.needsSubdomain': 'সংযোগ করতে', + 'composio.connect.needsSubdomainSuffix': + 'আপনার Atlassian সাবডোমেইন লিখুন (যেমন acme.atlassian.net-এর জন্য acme) এবং আবার চেষ্টা করুন।', + 'composio.connect.oauthComplete': 'OAuth সম্পূর্ণ করতে…', + 'composio.connect.oauthTimeout': 'OAuth টাইমআউট', + 'composio.connect.permissions': 'অনুমতি', + 'composio.connect.permissionsDefault': 'পড়া + লেখা ডিফল্টে সক্রিয়', + 'composio.connect.permissionsNote': 'প্রকাশ করতে পারে', + 'composio.connect.permissionsNoteSuffix': + 'OpenHuman-এর নিজস্ব এজেন্ট অনুমতি নিচে read, write, এবং admin টগল হিসেবে নিয়ন্ত্রিত।', + 'composio.connect.reopenBrowser': 'ব্রাউজার আবার খুলুন', + 'composio.connect.requestingUrl': 'সংযোগ URL অনুরোধ হচ্ছে…', + 'composio.connect.requiredFieldEmpty': 'এই ফিল্ডটি আবশ্যক।', + 'composio.connect.retryConnection': 'সংযোগ আবার চেষ্টা করুন', + 'composio.connect.scopeLoadError': 'স্কোপ পছন্দ লোড করা যায়নি: {msg}', + 'composio.connect.scopeSaveError': '{key} স্কোপ সংরক্ষণ করা যায়নি: {msg}', + 'composio.connect.scope.read': 'পড়ুন', + 'composio.connect.scope.readHint': 'এজেন্টকে এই সংযোগ থেকে ডেটা পড়ার অনুমতি দিন।', + 'composio.connect.scope.write': 'লিখুন', + 'composio.connect.scope.writeHint': + 'এজেন্টকে এই সংযোগের মাধ্যমে ডেটা তৈরি বা পরিবর্তন করার অনুমতি দিন।', + 'composio.connect.scope.admin': 'প্রশাসক', + 'composio.connect.scope.adminHint': + 'এজেন্টকে সেটিংস, অনুমতি বা ধ্বংসাত্মক ক্রিয়াকলাপ পরিচালনা করার অনুমতি দিন।', + 'composio.connect.subdomainInvalid': + 'শুধু সংক্ষিপ্ত সাবডোমেইন লিখুন (যেমন "acme"), পুরো URL নয়। এতে শুধু অক্ষর, সংখ্যা এবং হাইফেন থাকা উচিত।', + 'composio.connect.subdomainRequired': 'চালিয়ে যেতে আপনার Atlassian সাবডোমেইন দিন।', + 'composio.connect.wabaIdHint': + 'আপনার Meta অ্যাক্সেস টোকেন ব্যবহার করে GET /me/businesses তারপর GET /{business_id}/owned_whatsapp_business_accounts এর মাধ্যমে এটি খুঁজে পান।', + 'composio.connect.wabaIdLabel': 'WABA ID লেবেল', + 'composio.connect.wabaIdRequired': + 'চালিয়ে যেতে আপনার WhatsApp Business Account ID (WABA ID) দিন।', + 'composio.connect.waitingFor': 'অপেক্ষা করছে', + 'composio.connect.waitingHint': 'অপেক্ষার হিন্ট', + 'composio.triggers.heading': 'ট্রিগার', + 'composio.triggers.listenFrom': 'ইভেন্টের জন্য শুনুন', + 'composio.triggers.loadError': 'ট্রিগার লোড করা যায়নি', + 'composio.triggers.needsConfiguration': 'কনফিগারেশন প্রয়োজন', + 'composio.triggers.noneAvailable': 'বর্তমানে কোনো ট্রিগার উপলব্ধ নেই', + 'conversations.taskKanban.moveLeft': 'বামে সরান', + 'conversations.taskKanban.moveRight': 'ডানে সরান', + 'conversations.taskKanban.title': 'টাস্ক', + 'conversations.taskKanban.approval.default': 'ডিফল্ট', + 'conversations.taskKanban.approval.notRequired': 'প্রয়োজন নেই', + 'conversations.taskKanban.approval.notRequiredBadge': 'অনুমোদন করা হবে না', + 'conversations.taskKanban.approval.required': 'আবশ্যক', + 'conversations.taskKanban.approval.requiredBadge': 'অনুমোদন', + 'conversations.taskKanban.approval.requiredBeforeExecution': 'সঞ্চালনের পূর্বে আবশ্যক', + 'conversations.taskKanban.briefButton': 'কাজের সংক্ষিপ্ত', + 'conversations.taskKanban.briefTitle': 'কাজের সংক্ষিপ্ত', + 'conversations.taskKanban.closeBrief': 'স্বল্প বিরতি বন্ধ করুন', + 'conversations.taskKanban.field.acceptanceCriteria': 'বিশেষ মান গ্রহণ করা হবে', + 'conversations.taskKanban.field.allowedTools': 'ব্যবহারের জন্য চিহ্নিত সামগ্রী', + 'conversations.taskKanban.field.approval': 'বিবিধ বৈশিষ্ট্য', + 'conversations.taskKanban.field.assignedAgent': 'বরাদ্দকৃত এজেন্ট', + 'conversations.taskKanban.field.blocker': 'স্তম্ভ', + 'conversations.taskKanban.field.evidence': 'প্রমাণ', + 'conversations.taskKanban.field.notes': 'নোট', + 'conversations.taskKanban.field.objective': 'উদ্দেশ্য', + 'conversations.taskKanban.field.plan': 'পরিকল্পনা', + 'conversations.taskKanban.field.status': 'অবস্থা', + 'conversations.taskKanban.field.title': 'শিরোনাম', + 'conversations.taskKanban.saveChanges': 'পরিবর্তন সংরক্ষণ করা হবে', + 'conversations.taskKanban.deleteCard': 'Delete', + 'conversations.taskKanban.updateFailed': 'কাজটি সংরক্ষণ করা যায়নি।', + 'conversations.toolTimeline.turn': 'টার্ন', + 'conversations.toolTimeline.workerThread': 'ওয়ার্কার থ্রেড', + 'daemon.serviceBlockingGate.body': 'বডি', + 'daemon.serviceBlockingGate.downloadHint': 'ডাউনলোড হিন্ট', + 'daemon.serviceBlockingGate.downloadLatest': 'সর্বশেষ সংস্করণ ডাউনলোড করুন', + 'daemon.serviceBlockingGate.retryCore': 'Core আবার চেষ্টা করুন', + 'daemon.serviceBlockingGate.retryFailed': + 'আবার চেষ্টা ব্যর্থ। সর্বশেষ অ্যাপ বিল্ড ডাউনলোড করে আবার চেষ্টা করুন।', + 'daemon.serviceBlockingGate.retrying': 'আবার চেষ্টা হচ্ছে...', + 'daemon.serviceBlockingGate.title': 'OpenHuman কোর পাওয়া যাচ্ছে না', + 'home.banners.discordSubtitle': 'Discord সাবটাইটেল', + 'home.banners.discordTitle': 'আমাদের Discord-এ যোগ দিন', + 'home.banners.earlyBirdDismiss': 'আর্লি বার্ড ব্যানার বাদ দিন', + 'home.banners.earlyBirdFirstSub': 'প্রথম সাবস্ক্রিপশন।', + 'home.banners.earlyBirdOn': 'আর্লি বার্ড চালু', + 'home.banners.earlyBirdTitle': 'প্রথম ১,০০০ ব্যবহারকারী ৬০% ছাড় পাবেন।', + 'home.banners.earlyBirdUseCode': 'আর্লি বার্ড কোড ব্যবহার করুন', + 'home.banners.getSubscription': 'সাবস্ক্রিপশন নিন', + 'home.banners.promoCreditsBody': 'প্রোমো ক্রেডিট বডি', + 'home.banners.promoCreditsTitle': '{amount}', + 'home.banners.promoCreditsUsage': 'প্রোমো ক্রেডিট ব্যবহার', + 'intelligence.memoryChunk.detail.chunk': 'চাংক', + 'intelligence.memoryChunk.detail.copyChunkId': 'চাংক ID কপি করুন', + 'intelligence.memoryChunk.detail.embeddingInfo': 'bge-m3 1024dim', + 'intelligence.memoryChunk.detail.noEmbedding': 'কোনো এম্বেডিং নেই', + 'intelligence.memoryChunk.letterhead.from': 'থেকে', + 'intelligence.memoryChunk.letterhead.to': 'পর্যন্ত', + 'intelligence.memoryChunk.mentioned.chunkOne': '১টি চাঙ্ক', + 'intelligence.memoryChunk.mentioned.chunkOther': '{count}টি চাঙ্ক', + 'intelligence.memoryChunk.mentioned.heading': 'উ ল্লে খি ত', + 'intelligence.memoryChunk.scoreBars.ariaScore': '{name} স্কোর {pct} শতাংশ', + 'intelligence.memoryChunk.scoreBars.atThreshold': '{threshold}-এ', + 'intelligence.memoryChunk.scoreBars.dropped': 'বাদ দেওয়া হয়েছে', + 'intelligence.memoryChunk.scoreBars.heading': 'কে ন রা খা', + 'intelligence.memoryChunk.scoreBars.kept': 'রাখা হয়েছে', + 'intelligence.diagram.title': 'আর্কিটেকচার ডায়াগ্রাম', + 'intelligence.diagram.description': + 'কনফিগার করা ডায়াগ্রাম এন্ডপয়েন্ট থেকে সর্বশেষ স্থানীয় আর্কিটেকচার আউটপুট।', + 'intelligence.diagram.refresh': 'Refresh', + 'intelligence.diagram.refreshAria': 'ডায়াগ্রাম রিফ্রেশ করুন', + 'intelligence.diagram.emptyTitle': 'এখনো কোনো ডায়াগ্রাম নেই', + 'intelligence.diagram.emptyDescription': + 'অর্কেস্ট্রেটর থেকে একটি আর্কিটেকচার ডায়াগ্রাম তৈরি করুন এবং এই প্যানেলটি কনফিগার করা স্থানীয় এন্ডপয়েন্ট থেকে রিফ্রেশ হবে।', + 'intelligence.diagram.skillInstallCommand': 'npx skills add yizhiyanhua-ai/fireworks-tech-graph', + 'intelligence.diagram.promptExample': + 'ডার্ক টার্মিনাল স্টাইলে বর্তমান swarm-এর একটি আর্কিটেকচার ডায়াগ্রাম তৈরি করুন', + 'intelligence.diagram.imageAlt': 'সর্বশেষ তৈরি OpenHuman আর্কিটেকচার ডায়াগ্রাম', + 'intelligence.diagram.refreshesEvery': 'প্রতি {seconds}s-এ রিফ্রেশ হয়', + 'intelligence.memoryText.entityTypePrefix': 'এনটিটি ধরন', + 'intelligence.screenDebug.active': 'সক্রিয়', + 'intelligence.screenDebug.app': 'অ্যাপ', + 'intelligence.screenDebug.bounds': 'সীমানা', + 'intelligence.screenDebug.captureAlt': 'ক্যাপচার পরীক্ষার ফলাফল', + 'intelligence.screenDebug.captureFailed': 'ব্যর্থ', + 'intelligence.screenDebug.captureSuccess': 'সফল', + 'intelligence.screenDebug.captureTest': 'ক্যাপচার পরীক্ষা', + 'intelligence.screenDebug.capturing': 'ক্যাপচার হচ্ছে', + 'intelligence.screenDebug.frames': 'ফ্রেম', + 'intelligence.screenDebug.idle': 'নিষ্ক্রিয়', + 'intelligence.screenDebug.lastApp': 'শেষ অ্যাপ', + 'intelligence.screenDebug.mode': 'মোড', + 'intelligence.screenDebug.permAccessibility': 'অ্যাক্সেসিবিলিটি অনুমতি', + 'intelligence.screenDebug.permInput': 'ইনপুট অনুমতি', + 'intelligence.screenDebug.permScreen': 'অ্যাক্সেসিবিলিটি', + 'intelligence.screenDebug.permissions': 'অনুমতি', + 'intelligence.screenDebug.platformNotSupported': 'প্ল্যাটফর্ম সমর্থিত নয়', + 'intelligence.screenDebug.recentVisionSummaries': 'সাম্প্রতিক ভিশন সারসংক্ষেপ', + 'intelligence.screenDebug.session': 'সেশন', + 'intelligence.screenDebug.size': 'আকার', + 'intelligence.screenDebug.status': 'স্ট্যাটাস', + 'intelligence.screenDebug.testCapture': 'ক্যাপচার পরীক্ষা করুন', + 'intelligence.screenDebug.time': 'সময়', + 'intelligence.screenDebug.title': 'শিরোনাম', + 'intelligence.screenDebug.unknown': 'অজানা', + 'intelligence.screenDebug.visionQueue': 'ভিশন কিউ', + 'intelligence.screenDebug.visionState': 'ভিশন স্টেট', + 'intelligence.tasks.activeBoardOne': 'কথোপকথনজুড়ে ১টি সক্রিয় বোর্ড', + 'intelligence.tasks.activeBoardOther': 'কথোপকথনজুড়ে {count}টি সক্রিয় বোর্ড', + 'intelligence.tasks.empty': 'এখনো কোনো এজেন্ট টাস্ক বোর্ড নেই', + 'intelligence.tasks.emptyHint': 'খালি হিন্ট', + 'intelligence.tasks.failedToLoad': 'লোড করতে ব্যর্থ', + 'intelligence.tasks.live': 'লাইভ', + 'intelligence.tasks.loadingBoards': 'টাস্ক বোর্ড লোড হচ্ছে…', + 'intelligence.tasks.threadPrefix': 'থ্রেড {thread}', + 'intelligence.tasks.subtitle': 'তোমার কাজ আর এজেন্ট বোর্ড পুরো কর্মক্ষেত্রে.', + 'intelligence.tasks.newTask': 'নতুন কাজ', + 'intelligence.tasks.personalBoardTitle': 'এজেন্ট কাজ', + 'intelligence.tasks.personalEmpty': 'ব্যক্তিগত কোনো কর্ম বর্তমানে উপলব্ধ নয়', + 'intelligence.tasks.composer.title': 'নতুন কাজ', + 'intelligence.tasks.composer.titleLabel': 'শিরোনাম', + 'intelligence.tasks.composer.titlePlaceholder': 'কী করতে হবে?', + 'intelligence.tasks.composer.statusLabel': 'অবস্থা', + 'intelligence.tasks.composer.attachLabel': 'কথোপকথনের সাথে সংযুক্ত করুন', + 'intelligence.tasks.composer.attachNone': 'ব্যক্তিগত (কোনো আলাপন নেই)', + 'intelligence.tasks.composer.objectiveLabel': 'উদ্দেশ্য', + 'intelligence.tasks.composer.objectivePlaceholder': 'ঐচ্ছিক ফলাফল', + 'intelligence.tasks.composer.notesLabel': 'নোট', + 'intelligence.tasks.composer.notesPlaceholder': 'ঐচ্ছিক নোট', + 'intelligence.tasks.composer.create': 'কাজ তৈরি করুন ( T)', + 'intelligence.tasks.composer.creating': 'তৈরি করা হচ্ছে...', + 'intelligence.tasks.composer.createFailed': 'কাজ তৈরি করতে ব্যর্থ', + 'notifications.card.dismiss': 'বিজ্ঞপ্তি বাদ দিন', + 'notifications.card.importanceTitle': 'গুরুত্ব: {pct}%', + 'notifications.center.empty': 'এখনো কোনো বিজ্ঞপ্তি নেই', + 'notifications.center.emptyHint': 'খালি হিন্ট', + 'notifications.center.filterAll': 'সব ফিল্টার', + 'notifications.center.markAllRead': 'সব পঠিত চিহ্নিত করুন', + 'notifications.center.title': 'বিজ্ঞপ্তি', + 'oauth.button.connecting': 'সংযোগ হচ্ছে...', + 'oauth.button.loopbackTimeout': + 'সাইন-ইন টাইম আউট হয়েছে — ব্রাউজার OAuth পুনর্নির্দেশনা সম্পন্ন করেনি। অনুগ্রহ করে আবার চেষ্টা করুন।', + 'oauth.login.continueWith': 'দিয়ে চালিয়ে যান', + 'onboarding.contextGathering.buildingDesc': 'বিল্ডিং বিবরণ', + 'onboarding.contextGathering.buildingProfile': 'আপনার প্রোফাইল তৈরি হচ্ছে...', + 'onboarding.contextGathering.continueToChat': 'চ্যাটে চালিয়ে যান', + 'onboarding.contextGathering.coreAlive': 'কোর সংযোগযোগ্য — প্রথম লঞ্চ এক মিনিট সময় নিতে পারে।', + 'onboarding.contextGathering.coreAliveProbing': 'কোর সংযোগ যাচাই করা হচ্ছে…', + 'onboarding.contextGathering.coreUnreachable': + 'কোর সাড়া দিচ্ছে না। আপনি চালিয়ে যেতে পারেন এবং পরে আবার চেষ্টা করতে পারেন।', + 'onboarding.contextGathering.errorDesc': + 'আমরা এখনই আপনার পূর্ণ প্রোফাইল তৈরি করতে পারিনি, কিন্তু সমস্যা নেই — আপনি চালিয়ে যেতে পারেন এবং আপনার প্রোফাইল সময়ের সাথে তৈরি হবে।', + 'onboarding.contextGathering.stillWorkingDesc': + 'আমরা আপনার লোকাল মডেল এবং টুলস প্রস্তুত করছি, প্রথম লঞ্চ ৩০–৬০ সেকেন্ড সময় নিতে পারে। আপনি যেকোনো সময় চ্যাটে যেতে পারেন — প্রোফাইল তৈরি ব্যাকগ্রাউন্ডে চলতে থাকবে।', + 'onboarding.contextGathering.stillWorkingTitle': 'এখনও আপনার প্রোফাইলে কাজ চলছে…', + 'onboarding.contextGathering.title': 'কন্টেক্সট সংগ্রহ', + 'openhuman.team_list_teams': 'টিম তালিকা', + 'overlay.ariaAttention': 'মনোযোগের বার্তা', + 'overlay.ariaCompanion': 'কম্প্যানিয়ন সক্রিয়', + 'overlay.ariaOrb': 'OpenHuman ওভারলে', + 'overlay.ariaVoiceActive': 'ভয়েস ইনপুট সক্রিয়', + 'overlay.companion.error': 'ত্রুটি', + 'overlay.companion.listening': 'শুনছে…', + 'overlay.companion.pointing': 'নির্দেশ করছে…', + 'overlay.companion.speaking': 'বলছে…', + 'overlay.companion.thinking': 'ভাবছে…', + 'overlay.orbTitle': 'সরাতে টেনে আনুন · পজিশন রিসেট করতে ডাবল-ক্লিক করুন', + 'pages.settings.account.connections': 'সংযোগ', + 'pages.settings.account.connectionsDesc': 'সংযোগের বিবরণ', + 'pages.settings.account.migration': 'অন্য সহকারী থেকে আমদানি করুন', + 'pages.settings.account.migrationDesc': + 'OpenClaw (এবং শীঘ্রই Hermes) থেকে মেমরি ও নোট এই ওয়ার্কস্পেসে স্থানান্তর করুন।', + 'pages.settings.account.privacy': 'গোপনীয়তা', + 'pages.settings.account.privacyDesc': 'গোপনীয়তার বিবরণ', + 'pages.settings.account.recoveryPhrase': 'রিকভারি ফ্রেজ', + 'pages.settings.account.recoveryPhraseDesc': 'রিকভারি ফ্রেজের বিবরণ', + 'pages.settings.account.team': 'টিম', + 'pages.settings.account.teamDesc': 'টিমের বিবরণ', + 'pages.settings.accountSection.description': 'রিকভারি ফ্রেজ, টিম, সংযোগ এবং গোপনীয়তা সেটিংস।', + 'pages.settings.accountSection.title': 'অ্যাকাউন্ট', + 'pages.settings.ai.llm': 'LLM', + 'pages.settings.ai.llmDesc': 'LLM বিবরণ', + 'pages.settings.ai.voice': 'ভয়েস', + 'pages.settings.ai.voiceDesc': 'ভয়েস বিবরণ', + 'pages.settings.aiSection.description': + 'ল্যাঙ্গুয়েজ মডেল প্রোভাইডার, লোকাল Ollama, এবং ভয়েস (STT / TTS)।', + 'pages.settings.aiSection.title': 'AI', + 'pages.settings.composioSection.title': 'Composio', + 'pages.settings.composioSection.description': + 'Composio দ্বারা চালিত ইন্টিগ্রেশনের জন্য রাউটিং, ট্রিগার এবং ইতিহাস।', + 'settings.developerMenu.composio.title': 'Composio', + 'settings.developerMenu.composio.desc': 'রাউটিং মোড, ইন্টিগ্রেশন ট্রিগার, এবং ট্রিগার ইতিহাস।', + 'pages.settings.features.desktopCompanion': 'ডেস্কটপ কম্প্যানিয়ন', + 'pages.settings.features.desktopCompanionDesc': + 'স্ক্রিন সচেতনতা সহ ভয়েস সহকারী — শোনে, দেখে, কথা বলে, নির্দেশ করে', + 'pages.settings.features.messagingChannels': 'মেসেজিং চ্যানেল', + 'pages.settings.features.messagingChannelsDesc': 'মেসেজিং চ্যানেলের বিবরণ', + 'pages.settings.features.notifications': 'বিজ্ঞপ্তি', + 'pages.settings.features.notificationsDesc': 'বিজ্ঞপ্তির বিবরণ', + 'pages.settings.features.screenAwareness': 'স্ক্রিন সচেতনতা', + 'pages.settings.features.screenAwarenessDesc': 'স্ক্রিন সচেতনতার বিবরণ', + 'pages.settings.features.tools': 'টুলস', + 'pages.settings.features.toolsDesc': 'টুলসের বিবরণ', + 'pages.settings.featuresSection.description': 'স্ক্রিন সচেতনতা, মেসেজিং এবং টুলস।', + 'pages.settings.featuresSection.title': 'ফিচার', + 'privacy.dataKind.credentials': 'ক্রেডেনশিয়াল', + 'privacy.dataKind.derived': 'ডেরাইভড', + 'privacy.dataKind.diagnostics': 'ডায়াগনস্টিক্স', + 'privacy.dataKind.metadata': 'মেটাডেটা', + 'privacy.dataKind.raw': 'রা', + 'privacy.whatLeaves.link.label': 'আমার কম্পিউটার থেকে কী বের হয়?', + 'rewards.community.achievementsUnlocked': '{total}টির মধ্যে {unlocked}টি অর্জন আনলক হয়েছে', + 'rewards.community.connectDiscord': 'Discord সংযুক্ত করুন', + 'rewards.community.cumulativeTokens': 'সঞ্চিত টোকেন', + 'rewards.community.currentStreak': 'বর্তমান স্ট্রিক', + 'rewards.community.discordLinkedNotInGuild': 'Discord লিংক কিন্তু গিল্ডে নেই', + 'rewards.community.discordMember': 'সার্ভারে যোগ দিয়েছেন', + 'rewards.community.discordNotLinked': 'Discord লিংক করা হয়নি', + 'rewards.community.discordServer': 'Discord সার্ভার', + 'rewards.community.discordStatusUnavailable': 'Discord স্ট্যাটাস পাওয়া যাচ্ছে না', + 'rewards.community.discordWaiting': 'Discord অপেক্ষায়', + 'rewards.community.heroSubtitle': 'হিরো সাবটাইটেল', + 'rewards.community.heroTitle': 'হিরো শিরোনাম', + 'rewards.community.joinDiscord': 'Discord-এ যোগ দিন', + 'rewards.community.loadingRewards': 'পুরস্কার লোড হচ্ছে…', + 'rewards.community.locked': 'আনলক করা', + 'rewards.community.retrying': 'আবার চেষ্টা হচ্ছে…', + 'rewards.community.rolesAndRewards': 'রোল ও পুরস্কার', + 'rewards.community.streakDays': '{n}', + 'rewards.community.syncPending': 'পুরস্কার সিঙ্ক মুলতুবি', + 'rewards.community.syncPendingDesc': 'সিঙ্ক মুলতুবির বিবরণ', + 'rewards.community.syncUnavailable': 'সিঙ্ক পাওয়া যাচ্ছে না', + 'rewards.community.tryAgain': 'আবার চেষ্টা হচ্ছে…', + 'rewards.community.unknown': 'অজানা', + 'rewards.community.unlocked': 'আনলক করা', + 'rewards.community.yourProgress': 'আপনার অগ্রগতি', + 'rewards.coupon.colCode': 'কোড', + 'rewards.coupon.colRedeemed': 'রিডিম করা', + 'rewards.coupon.colReward': 'পুরস্কার', + 'rewards.coupon.colStatus': 'স্ট্যাটাস', + 'rewards.coupon.loadingHistory': 'পুরস্কার ইতিহাস লোড হচ্ছে…', + 'rewards.coupon.noCodes': 'এখনও কোনো রিওয়ার্ড কোড রিডিম করা হয়নি।', + 'rewards.coupon.pending': 'মুলতুবি', + 'rewards.coupon.placeholder': 'কুপন কোড', + 'rewards.coupon.promoCredits': 'প্রোমো ক্রেডিট', + 'rewards.coupon.recentRedemptions': 'সাম্প্রতিক রিডেম্পশন', + 'rewards.coupon.redeemAccepted': + '{code} গৃহীত হয়েছে। প্রয়োজনীয় কাজটি সম্পন্ন হলে {amount} আনলক হবে।', + 'rewards.coupon.redeemButton': 'কোড রিডিম করুন', + 'rewards.coupon.redeemSuccess': '{code} রিডিম হয়েছে। আপনার ক্রেডিটে {amount} যোগ হয়েছে।', + 'rewards.coupon.redeemedCodes': 'রিডিম করা কোড', + 'rewards.coupon.redeeming': 'রিডিম হচ্ছে...', + 'rewards.coupon.statusApplied': 'প্রয়োগ হয়েছে', + 'rewards.coupon.statusPendingAction': 'অ্যাকশন বাকি', + 'rewards.coupon.statusRedeemed': 'রিডিম হয়েছে', + 'rewards.coupon.subtitle': 'সাবটাইটেল', + 'rewards.coupon.title': 'একটি কুপন কোড রিডিম করুন', + 'rewards.referralSection.activity': 'রেফারেল অ্যাক্টিভিটি', + 'rewards.referralSection.apply': 'প্রয়োগ হচ্ছে…', + 'rewards.referralSection.applying': 'প্রয়োগ হচ্ছে…', + 'rewards.referralSection.colReferredUser': 'রেফার করা ব্যবহারকারী', + 'rewards.referralSection.colReward': 'পুরস্কার', + 'rewards.referralSection.colStatus': 'স্ট্যাটাস', + 'rewards.referralSection.colUpdated': 'আপডেট', + 'rewards.referralSection.completed': 'সম্পন্ন', + 'rewards.referralSection.copyCode': 'কোড কপি করুন', + 'rewards.referralSection.copyFailed': 'কপি ব্যর্থ', + 'rewards.referralSection.haveCode': 'রেফারেল কোড আছে?', + 'rewards.referralSection.haveCodeDesc': 'কোড আছে বিবরণ', + 'rewards.referralSection.linked': 'লিংক করা', + 'rewards.referralSection.linkedCode': '(কোড {code})', + 'rewards.referralSection.loading': 'রেফারেল প্রোগ্রাম লোড হচ্ছে…', + 'rewards.referralSection.retry': 'আবার চেষ্টা করুন', + 'rewards.referralSection.noReferrals': 'কোনো রেফারেল নেই', + 'rewards.referralSection.pendingReferrals': 'মুলতুবি রেফারেল', + 'rewards.referralSection.placeholder': 'রেফারেল কোড', + 'rewards.referralSection.share': 'শেয়ার', + 'rewards.referralSection.statusCompleted': 'স্ট্যাটাস সম্পন্ন', + 'rewards.referralSection.statusExpired': 'স্ট্যাটাস মেয়াদোত্তীর্ণ', + 'rewards.referralSection.statusJoined': 'স্ট্যাটাস যোগ দিয়েছে', + 'rewards.referralSection.subtitle': 'সাবটাইটেল', + 'rewards.referralSection.title': 'বন্ধুদের আমন্ত্রণ জানান, ক্রেডিট অর্জন করুন', + 'rewards.referralSection.totalEarned': 'মোট অর্জিত', + 'rewards.referralSection.yourCode': 'আপনার কোড', + 'settings.ai.addCloudProvider': 'ক্লাউড প্রোভাইডার যোগ করুন', + 'settings.ai.addProvider': 'সংরক্ষণ হচ্ছে…', + 'settings.ai.apiKeyFieldLabel': 'API কী ফিল্ড লেবেল', + 'settings.ai.apiKeyRequired': 'চালিয়ে যেতে আপনার API কী পেস্ট করুন।', + 'settings.ai.apiKeyStoredEncrypted': 'API কী এনক্রিপ্ট করে সংরক্ষিত', + 'settings.ai.apiKeysEncrypted': 'xqx+x', + 'settings.ai.clearStoredKey': 'সংরক্ষিত কী মুছুন', + 'settings.ai.connectProvider': 'প্রোভাইডার সংযোগ করুন', + 'settings.ai.customRouting': 'কাস্টম রুটিং', + 'settings.ai.defaultResolvesTo': 'ডিফল্ট এতে সমাধান হয়', + 'settings.ai.discard': 'বাতিল করুন', + 'settings.ai.editProvider': 'প্রোভাইডার সম্পাদনা করুন', + 'settings.ai.llmProviders': 'LLM প্রোভাইডার', + 'settings.ai.llmProvidersDesc': 'LLM প্রোভাইডার বিবরণ', + 'settings.ai.localOllama': 'লোকাল (Ollama)', + 'settings.ai.modelLabel': 'মডেল', + 'settings.ai.noCustomProviders': 'কোনো কাস্টম প্রোভাইডার নেই', + 'settings.ai.openAiCompat.authHeaderExample': 'অনুমোদন: বহনকারী <আপনার কী>', + 'settings.ai.openAiCompat.authHeaderLabel': 'অথ হেডার', + 'settings.ai.openAiCompat.baseUrlLabel': 'বেস URL', + 'settings.ai.openAiCompat.baseUrlUnavailable': 'অনুপলব্ধ', + 'settings.ai.openAiCompat.clearKey': 'ক্লিয়ার কী', + 'settings.ai.openAiCompat.description': + 'এই /v1 সার্ভারে স্থানীয় অপারেটিং সিস্টেমের মাধ্যমে প্রোগ্র্যামক ব্যবহার করে । অনুমোদন ব্যবস্থা আপনার এখানে একটি স্থায়ী চাবি ব্যবহার করে, অ্যাপ্লিকেশনের নিজস্ব প্রধান অংশ নয় ।', + 'settings.ai.openAiCompat.keyConfigured': 'কী কনফিগার করা', + 'settings.ai.openAiCompat.keyRequired': 'কী প্রয়োজন', + 'settings.ai.openAiCompat.rotateKey': 'ঘোরান কী', + 'settings.ai.openAiCompat.setKey': 'সেট কী', + 'settings.ai.openAiCompat.title': 'OpenAI-সামঞ্জস্যপূর্ণ এন্ডপয়েন্ট', + 'settings.ai.providerLabel': 'প্রোভাইডার', + 'skills.mcpComingSoon.title': 'MCP সার্ভার', + 'skills.mcpComingSoon.description': + 'MCP সার্ভার ম্যানেজমেন্ট শীঘ্রই আসছে। এই ট্যাবটি আপনার MCP সার্ভার ইন্টিগ্রেশন আবিষ্কার, সংযোগ এবং পর্যবেক্ষণের জায়গা হবে।', + 'settings.ai.routing': 'রুটিং', + 'settings.ai.routingCustom': 'কাস্টম রুটিং', + 'settings.ai.routingDefault': 'ডিফল্ট', + 'settings.ai.routingDesc': 'রুটিং বিবরণ', + 'settings.ai.saveChanges': 'সংরক্ষণ হচ্ছে…', + 'settings.ai.saving': 'সংরক্ষণ হচ্ছে…', + 'settings.ai.unsavedChange': 'অসংরক্ষিত পরিবর্তন', + 'settings.ai.unsavedChanges': 'অসংরক্ষিত পরিবর্তন', + 'settings.ai.workloadGroupBackground': 'ওয়ার্কলোড গ্রুপ ব্যাকগ্রাউন্ড', + 'settings.ai.workloadGroupChat': 'ওয়ার্কলোড গ্রুপ চ্যাট', + 'settings.ai.disconnectProvider': 'সংযোগ বিচ্ছিন্ন করুন {label}', + 'settings.ai.connectProviderLabel': 'সংযোগ {label}', + 'settings.ai.defaultLocalEndpoint': 'http://localhost:11434/v1', + 'settings.ai.endpointUrlLabel': 'শেষবিন্দু URL', + 'settings.ai.localRuntimeHelper': + 'xqxqx সহযোগে সংযোগ ব্যবস্থা করা হবে। ডিফল্ট স্থানীয় হোস্ট; দূরবর্তী হোস্টটিকে এই অবস্থায় দেখা যাবে (যেমন, xq1xqxqx ব্যবহার করা হচ্ছে)।', + 'settings.ai.endpointUrlRequired': 'এন্ডপয়েন্ট URL প্রয়োজন।', + 'settings.ai.endpointProtocolRequired': 'সমাপ্তির তারিখ / http://wxqxqxkx/x উচিত', + 'settings.ai.connectProviderDialog': 'সংযোগ করুন {label}', + 'settings.ai.or': 'অথবা', + 'settings.ai.openRouterOauthDescription': + 'xqxqxx সহযোগে সাইন করুন এবং xqxyqx ব্যবহার করে একটি ব্যবহারকারী xxqx কী ইম্পোর্ট করুন', + 'settings.ai.connecting': 'সংযোগ করা হচ্ছে...', + 'settings.ai.backgroundLoops': 'ব্যাকগ্রাউন্ড লুপস', + 'settings.ai.backgroundLoopsDesc': + 'লক্ষ্য করুন যে, কোন আড্ডা ছাড়াই কি করা হয়, হার্টবিটের কাজ বিরতি দিন এবং সম্প্রতি ক্রেডিট কার্ড পরীক্ষা করুন ।', + 'settings.ai.heartbeatControls': 'হার্টবিট নিয়ন্ত্রণ', + 'settings.ai.heartbeatControlsDesc': + 'বন্ধ করো। লুপ সক্রিয় করা হচ্ছে; চলমান কাজ পরিত্যাগ করা হচ্ছে।', + 'settings.ai.heartbeatLoop': 'হার্টবিট লুপ', + 'settings.ai.heartbeatLoopDesc': 'প্লানার + ঐচ্ছিক অবচেতনের মাস্টার শিডিউলার।', + 'settings.ai.subconsciousInference': 'অবচেতন অনুমান', + 'settings.ai.subconsciousInferenceDesc': 'হার্টবিট চেকের জন্য মডেল-বিন্যস্ত xqxqx পরীক্ষা চালান।', + 'settings.ai.calendarMeetingChecks': 'ক্যালেন্ডার মিটিং চেক', + 'settings.ai.calendarMeetingChecksDesc': 'সক্রিয় xqxqx বর্ষপঞ্জির তালিকা।', + 'settings.ai.calendarCap': 'ক্যালেন্ডার ক্যাপ', + 'settings.ai.connectionsPerTick': 'এক্স.x% 1x xx%x+1x', + 'settings.ai.meetingLookahead': 'মিটিং এর আগে', + 'settings.ai.minutesShort': '{count} মিনিট', + 'settings.ai.reminderLookahead': '__PH0__ Re__2 মিনিট] লুকআহেড', + 'settings.ai.cronReminderChecks': 'ক্রোন রিমাইন্ডার চেক করে', + 'settings.ai.cronReminderChecksDesc': + 'বিভিন্ন স্ক্যানের সময় বিশেষ কিছু বস্তু চিহ্নিত করার উদ্দেশ্যে স্বয়ংক্রিয়ভাবে কর্মের কর্ম সক্রিয় করা হয়।', + 'settings.ai.relevantNotificationChecks': 'প্রাসঙ্গিক বিজ্ঞপ্তি চেক', + 'settings.ai.relevantNotificationChecksDesc': + 'সক্রিয় সতর্কতার সাথে স্থানীয় গুরুত্বপূর্ণ বার্তা প্রচার করা।', + 'settings.ai.externalDelivery': 'বাহ্যিক ডেলিভারি', + 'settings.ai.externalDeliveryDesc': + 'হার্টবিট সতর্ক সংকেত দেয় বহিস্থিত চ্যানেলগুলোর কাছে সক্রিয় বার্তা পাঠাতে।', + 'settings.ai.interval': 'ব্যবধান', + 'settings.ai.running': 'চলছে...', + 'settings.ai.plannerTickNow': 'প্ল্যানার এখন টিক দিন', + 'settings.ai.loadingHeartbeatControls': 'হার্টবিট নিয়ন্ত্রণ লোড হচ্ছে...', + 'settings.ai.heartbeatControlsUnavailable': 'হার্টবিট নিয়ন্ত্রণ অনুপলব্ধ৷', + 'settings.ai.loopMap': 'লুপ ম্যাপ', + 'settings.ai.plannerSummary': + 'পরিকল্পনাকারী: {sourceEvents} উৎস ইভেন্ট, {sent} পাঠানো হয়েছে, {deduped} ডিডুড করা হয়েছে।', + 'settings.ai.routeLabel': 'রুট: {route}', + 'settings.ai.on': 'উপর', + 'settings.ai.off': 'বন্ধ', + 'settings.ai.recentUsageLedger': 'সাম্প্রতিক ব্যবহার লেজার', + 'settings.ai.recentUsageLedgerDesc': + 'ব্যাক-এন্ড সারি আজ xqxqxqx; সোর্স ট্যাগের ব্যাক-এন্ড সমর্থন প্রয়োজন।', + 'settings.ai.latestSpend': 'সর্বশেষ খরচ: {amount} এ {time} ({action})', + 'settings.ai.topActions': 'টপ অ্যাকশন', + 'settings.ai.noSpendRows': 'কোনো খরচ সারি লোড করা হয়নি।', + 'settings.ai.topHours': 'সেরা ঘন্টা', + 'settings.ai.noHourlySpend': 'এখনও কোন ঘন্টা খরচ নেই.', + 'settings.ai.openhumanDefault': 'OpenHuman (ডিফল্ট)', + 'settings.ai.localModelResolved': 'Ollama · {model}', + 'settings.ai.customRoutingForWorkload': '{label} এর জন্য কাস্টম রাউটিং', + 'settings.ai.loadingModels': 'মডেল লোড হচ্ছে...', + 'settings.ai.enterModelIdManually': 'অথবা ম্যানুয়ালি মডেল লিখুন', + 'settings.ai.modelIdPlaceholderForProvider': '{slug} মডেল আইডি', + 'settings.ai.modelIdPlaceholder': 'model-id', + 'settings.ai.selectModel': 'একটি মডেল নির্বাচন করুন...', + 'settings.ai.temperatureOverride': 'তাপমাত্রা ওভাররাইড', + 'settings.ai.temperatureOverrideSlider': 'তাপমাত্রা ওভাররাইড (স্লাইডার)', + 'settings.ai.temperatureOverrideValue': 'তাপমাত্রা ওভাররাইড (মান)', + 'settings.ai.temperatureOverrideDesc': + 'নিচে = আরও বুদ্ধিমান. পরিসেবা উপলব্ধকারীর ডিফল্ট ব্যবহারের জন্য সীমা ধার্য না করা হলে, বন্ধ করুন ।', + 'settings.ai.testFailed': 'পরীক্ষা ব্যর্থ হয়েছে', + 'settings.ai.testingModel': 'পরীক্ষার মডেল...', + 'settings.ai.modelResponse': 'মডেল প্রতিক্রিয়া', + 'settings.ai.providerWithValue': 'প্রদানকারী: {value}', + 'settings.ai.noneDash': '—', + 'settings.ai.promptHelloWorld': 'প্রম্পট: হ্যালো ওয়ার্ল্ড', + 'settings.ai.startedAt': 'শুরু হয়েছে: {value}', + 'settings.ai.waitingForModelResponse': 'মডেল থেকে প্রতিক্রিয়ার জন্য অপেক্ষা করুন...', + 'settings.ai.response': 'প্রতিক্রিয়া', + 'settings.ai.testing': 'পরীক্ষা করা হচ্ছে...', + 'settings.ai.test': 'পরীক্ষা', + 'settings.ai.slugMissingError': 'একটি স্লাগ তৈরি করতে একটি প্রদানকারীর নাম লিখুন৷', + 'settings.ai.slugInUseError': 'সেই প্রদানকারীর নাম ইতিমধ্যেই ব্যবহার করা হচ্ছে৷', + 'settings.ai.slugReservedError': 'একটি ভিন্ন প্রদানকারীর নাম বেছে নিন।', + 'settings.ai.providerNamePlaceholder': 'আমার প্রদানকারী', + 'settings.ai.slugLabel': 'স্লাগ:', + 'settings.ai.openAiUrlLabel': 'এক্স.x১xxx xx+qx', + 'settings.ai.openAiUrlPlaceholder': 'https://api.openai.com/v1', + 'settings.ai.keepExistingKeyPlaceholder': 'বিদ্যমান কী রাখার জন্য ফাঁকা ছেড়ে দিন', + 'settings.ai.reindexingMemory': 'মেমরি পুনঃসূচীকরণ করা হচ্ছে', + 'settings.ai.reindexingMemoryMessage': + 'এম্পটগুলো পুনরায় চালু হচ্ছে। xqxqx মেমরি((s) বর্তমান মডেলের মধ্যে পুনরায় বিবাহ করা হচ্ছে- এই ধরনের কাজ শেষ না হওয়া পর্যন্ত তা কমিয়ে আনা হচ্ছে। শব্দ অনুসন্ধান কাজ করছে, এবং পটভূমিতে আবার অনুসন্ধান চালিয়ে যাচ্ছে যদি আপনি এটা বন্ধ করেন।', + 'settings.ai.signInWithOpenRouter': 'xqxqx সহযোগে সাইন করুন', + 'settings.ai.weekBudget': '__BR0__ দিয়ে সাইন ইন করুন', + 'settings.ai.cycleRemaining': 'সপ্তাহের বাজেট', + 'settings.ai.cycleTotalSpend': 'বাকি সাইকেল', + 'settings.ai.avgSpendRow': 'সাইকেলের মোট খরচ [[I18N_SEP_92731] সারির মোট খরচ [[I18N_SEP_92731]', + 'settings.ai.backgroundApiReads': 'Bg API পড়েছে', + 'settings.ai.backgroundWakeups': 'ঘুম থেকে জেগে উঠ', + 'settings.ai.budgetMath': 'বাজেটের গণিত', + 'settings.ai.rowsLeft': 'সারি বাকি', + 'settings.ai.rowsPerFullWeekBudget': 'পূর্ণ সপ্তাহের বাজেট প্রতি সারি', + 'settings.ai.sampleBurnRate': 'নমুনা পোড়া হার', + 'settings.ai.projectedEmpty': 'খালি অনুমান করা হয়েছে', + 'settings.ai.apiReadsPerDollarRemaining': 'API রিড প্রতি $ অবশিষ্ট', + 'settings.ai.loopCallBudget': 'লুপ কল বাজেট', + 'settings.ai.heartbeatTicks': 'হার্টবিট টিক', + 'settings.ai.calendarPlannerCalls': 'ক্যালেন্ডার পরিকল্পনাকারী কল', + 'settings.ai.calendarFanoutCap': 'ক্যালেন্ডার ফ্যানআউট ক্যাপ', + 'settings.ai.subconsciousModelCalls': 'অবচেতন মডেল কল', + 'settings.ai.composioSyncScans': 'Composio সিঙ্ক স্ক্যান', + 'settings.ai.totalBackgroundApiReadBudget': 'মোট bg API পঠিত বাজেট', + 'settings.ai.memoryWorkerPolls': 'মেমরি কর্মী পোল', + 'settings.ai.defaultProviderName': 'OpenHuman', + 'settings.ai.routing.managed': 'পরিচালিত', + 'settings.ai.routing.managedDesc': + 'xq0xqx সমস্ত প্রকার মেঘে রান করা হবে, কর্মের জন্য সেরা মডেল নির্বাচন করুন, খরচের জন্য ব্যবহারযোগ্য ডিফল্ট মান নির্বাচন করুন।', + 'settings.ai.routing.managedMsg': + 'xqxqx সকল কাজের জন্য ফাংশনসমূহ পরিচালনা করবে এবং স্বয়ংক্রিয়ভাবে ব্যয়, মান, এবং নিরাপত্তার জন্য সেরা পথ নির্বাচন করবে।', + 'settings.ai.routing.useYourOwn': 'আপনার নিজের মডেলগুলি ব্যবহার করুন', + 'settings.ai.routing.useYourOwnDesc': + 'প্রোভাইডার + মডেল এবং প্রত্যেক ওয়ার্কশপে রুট বেছে নিন । এটা খুব সহজ, কিন্তু এটা দক্ষ হতে পারে কারণ লাইটওয়েট এবং ভারী ওজন একই পথ শেয়ার করতে পারে।', + 'settings.ai.routing.advanced': 'উন্নত', + 'settings.ai.routing.advancedDesc': + 'ভিন্ন কাজের জন্য বিভিন্ন মডেল নির্বাচন করুন। এটা হচ্ছে সবচেয়ে ভালো উপায় যে, খরচ কমানোর জন্য সব থেকে বেশী খরচ করা যায়।', + 'settings.ai.routing.customDesc': + 'ফাইন-গ্রান্টিং আপনার জন্য সবচেয়ে ভাল দাম এবং সর্বোচ্চ ক্ষমতা দেয়. নীচে যে সারি ব্যবহার করা হবে তা নির্ধারণ করুন ।', + 'settings.ai.routing.chatAndConversations': 'চ্যাট এবং কথোপকথন', + 'settings.ai.routing.chatDesc': + 'সরাসরি ব্যবহারকারী যোগাযোগ, উত্তর, যুক্তি, এজেন্ট লুপ এবং কোড সাহায্য করার সময় ব্যবহার করা হয়েছে।', + 'settings.ai.routing.backgroundTasks': 'ব্যাকগ্রাউন্ড টাস্ক', + 'settings.ai.routing.bgTasksDesc': + 'তুলনা, হার্টবিট, শিক্ষা এবং অবচেতনের মূল্যায়নের মূল কথোপকথনের বাইরে যে মডেলগুলো ব্যবহার করা হয়েছে সেগুলো ব্যবহার করা হয়েছে।', + 'settings.ai.routing.addCustomProvider': 'কাস্টম প্রদানকারী যোগ করুন', + 'settings.ai.globalModel.title': 'সবকিছুর জন্য একটি মডেল চয়ন করুন', + 'settings.ai.globalModel.desc': + 'এই সব পথ এক মডেল দ্বারা সীমাবদ্ধ। এটা সহজ, কিন্তু খরচ ও গুণের ক্ষেত্রে এটি দক্ষ হতে পারে, কারণ লাইটওয়েট এবং ভারী কাজ সকল পথ একই ভাবে ব্যবহার করা হবে।', + 'settings.ai.globalModel.noProviders': + 'সংযোগ যোগ অথবা পরিসেবার সাথে সংযোগ স্থাপন করুন । তারপর তুমি প্রতিটি ওয়ার্কশপ পার করতে পারবে একটা মডেল দিয়ে।', + 'settings.ai.globalModel.provider': 'প্রদানকারী', + 'settings.ai.globalModel.model': 'মডেল', + 'settings.ai.globalModel.loadingModels': 'মডেলগুলি লোড করা হচ্ছে...', + 'settings.ai.globalModel.enterModelId': 'মডেল আইডি লিখুন', + 'settings.ai.globalModel.appliesToAll': + 'একই সেবা প্রদানকারী + মডেল, যুক্তি, মেমরি, হার্টবিট, শিক্ষা, এবং অবচেতনের মাধ্যমে কথোপকথন, যুক্তি, যুক্তি, মেমরি, মেমরি, মেমরি, হৃদয়বিট। equice কনফিগার করা হয়েছে। সংরক্ষণ করার সময় পরিবর্তনগুলি সংরক্ষণ করা হবে।', + 'settings.ai.globalModel.saving': 'ইনস্টল করা হয়েছে...', + 'settings.ai.globalModel.saved': 'সংরক্ষণ করা হচ্ছে...', + 'settings.ai.workload.noModel': 'সংরক্ষণ করা হয়েছে', + 'settings.ai.workload.changeModel': 'কোনো মডেল নির্বাচিত হয়নি', + 'settings.ai.workload.chooseModel': 'মডেল পরিবর্তন করুন [[I18N_SEP_92731] মডেল চয়ন করুন', + 'settings.ai.provider.ollama': 'Ollama', + 'settings.autocomplete.appFilter.acceptSuggestion': 'পরামর্শ গ্রহণ করুন', + 'settings.autocomplete.appFilter.app': 'অ্যাপ', + 'settings.autocomplete.appFilter.currentSuggestion': 'বর্তমান পরামর্শ', + 'settings.autocomplete.appFilter.contextOverride': 'কন্টেক্সট ওভাররাইড (ঐচ্ছিক)', + 'settings.autocomplete.appFilter.debounce': 'ডিবাউন্স', + 'settings.autocomplete.appFilter.debugFocus': 'ডিবাগ ফোকাস', + 'settings.autocomplete.appFilter.enabled': 'সক্ষম', + 'settings.autocomplete.appFilter.getSuggestion': 'পরামর্শ পান', + 'settings.autocomplete.appFilter.lastError': 'শেষ ত্রুটি', + 'settings.autocomplete.appFilter.liveLogs': 'লাইভ লগ', + 'settings.autocomplete.appFilter.model': 'মডেল', + 'settings.autocomplete.appFilter.noLogs': ') :', + 'settings.autocomplete.appFilter.phase': 'ফেজ', + 'settings.autocomplete.appFilter.platformSupported': 'প্ল্যাটফর্ম সমর্থিত', + 'settings.autocomplete.appFilter.refreshStatus': 'রিফ্রেশ হচ্ছে…', + 'settings.autocomplete.appFilter.refreshing': 'রিফ্রেশ হচ্ছে…', + 'settings.autocomplete.appFilter.running': 'চলমান', + 'settings.autocomplete.appFilter.runtime': 'রানটাইম', + 'settings.autocomplete.appFilter.test': 'পরীক্ষা', + 'settings.autocomplete.completionStyle.acceptedCompletion': + '{count}টি গৃহীত completion সংরক্ষিত — ভবিষ্যৎ পরামর্শ ব্যক্তিগতকরণে ব্যবহৃত হয়।', + 'settings.autocomplete.completionStyle.acceptedCompletions': + '{count}টি গৃহীত completion সংরক্ষিত — ভবিষ্যৎ পরামর্শ ব্যক্তিগতকরণে ব্যবহৃত হয়।', + 'settings.autocomplete.completionStyle.clearHistory': 'পরিষ্কার হচ্ছে…', + 'settings.autocomplete.completionStyle.clearing': 'পরিষ্কার হচ্ছে…', + 'settings.autocomplete.completionStyle.debounce': 'ডিবাউন্স (ms)', + 'settings.autocomplete.completionStyle.enabled': 'সক্রিয়', + 'settings.autocomplete.completionStyle.maxChars': 'সর্বোচ্চ অক্ষর', + 'settings.autocomplete.completionStyle.noHistory': + 'এখনো কোনো গৃহীত কমপ্লিশন নেই। ব্যক্তিগতকৃত করা শুরু করতে Tab দিয়ে পরামর্শ গ্রহণ করুন।', + 'settings.autocomplete.completionStyle.overlayTtl': 'ওভারলে TTL (ms)', + 'settings.autocomplete.completionStyle.personalizationHistory': 'ব্যক্তিগতকরণ ইতিহাস', + 'settings.autocomplete.completionStyle.styleExamples': 'স্টাইল উদাহরণ (প্রতি লাইনে একটি)', + 'settings.autocomplete.completionStyle.styleInstructions': 'স্টাইল নির্দেশনা', + 'settings.autocomplete.debug.acceptedPrefix': 'গৃহীত: {value}', + 'settings.autocomplete.debug.acceptFailed': 'প্রস্তাবনা গ্রহণ করতে ব্যর্থ হয়েছে', + 'settings.autocomplete.debug.alreadyRunning': 'স্বয়ংসম্পূর্ণ ইতিমধ্যেই চলছে৷', + 'settings.autocomplete.debug.clearHistoryFailed': 'ইতিহাস সাফ করতে ব্যর্থ হয়েছে', + 'settings.autocomplete.debug.didNotStart': 'স্বয়ংসম্পূর্ণ শুরু হয়নি৷', + 'settings.autocomplete.debug.disabledInSettings': + 'সেটিংসে স্বয়ংসম্পূর্ণ অক্ষম করা আছে। এটি সক্রিয় করুন এবং প্রথমে সংরক্ষণ করুন।', + 'settings.autocomplete.debug.fetchSuggestionFailed': 'বর্তমান প্রস্তাবনা আনতে ব্যর্থ হয়েছে', + 'settings.autocomplete.debug.inspectFocusedElementFailed': + 'ফোকাস করা উপাদান পরিদর্শন করতে ব্যর্থ হয়েছে', + 'settings.autocomplete.debug.loadSettingsFailed': 'স্বয়ংসম্পূর্ণ সেটিংস লোড করতে ব্যর্থ হয়েছে', + 'settings.autocomplete.debug.noSuggestionApplied': 'কোন পরামর্শ প্রয়োগ করা হয়নি.', + 'settings.autocomplete.debug.noSuggestionReturned': 'কোনো পরামর্শ ফেরত দেওয়া হয়নি৷', + 'settings.autocomplete.debug.refreshStatusFailed': + 'স্বয়ংসম্পূর্ণ স্থিতি রিফ্রেশ করতে ব্যর্থ হয়েছে', + 'settings.autocomplete.debug.saveAdvancedSettingsFailed': + 'উন্নত সেটিংস সংরক্ষণ করতে ব্যর্থ হয়েছে', + 'settings.autocomplete.debug.startFailed': 'স্বয়ংসম্পূর্ণ শুরু করতে ব্যর্থ হয়েছে', + 'settings.autocomplete.debug.stopFailed': 'স্বয়ংসম্পূর্ণ বন্ধ করতে ব্যর্থ হয়েছে', + 'settings.autocomplete.debug.suggestionPrefix': 'সাজেশন: {value}', + 'settings.autocomplete.shared.none': 'কোনটিই', + 'settings.autocomplete.shared.notApplicable': 'n/a', + 'settings.autocomplete.shared.unknown': 'অজানা', + 'settings.billing.autoRecharge.addAmount': 'এই পরিমাণ যোগ করুন', + 'settings.billing.autoRecharge.addCard': 'কার্ড যোগ করুন', + 'settings.billing.autoRecharge.amountHint': 'পরিমাণ হিন্ট', + 'settings.billing.autoRecharge.defaultCard': 'ডিফল্ট কার্ড', + 'settings.billing.autoRecharge.lastRechargeFailed': 'শেষ রিচার্জ ব্যর্থ', + 'settings.billing.autoRecharge.lastRecharged': 'শেষ রিচার্জ', + 'settings.billing.autoRecharge.expires': '{date} এ মেয়াদ শেষ', + 'settings.billing.autoRecharge.noCards': 'কোনো কার্ড নেই', + 'settings.billing.autoRecharge.paymentMethods': 'পেমেন্ট পদ্ধতি', + 'settings.billing.autoRecharge.rechargeInProgress': 'রিচার্জ চলছে', + 'settings.billing.autoRecharge.spentThisWeek': 'এই সপ্তাহে ${spent} / ${limit} ব্যবহৃত', + 'settings.billing.autoRecharge.rechargeWhen': 'ব্যালেন্স কম হলে রিচার্জ করুন', + 'settings.billing.autoRecharge.saveSettings': 'সংরক্ষণ হচ্ছে…', + 'settings.billing.autoRecharge.saving': 'সংরক্ষণ হচ্ছে…', + 'settings.billing.autoRecharge.setDefault': ':', + 'settings.billing.autoRecharge.subtitle': 'সাবটাইটেল', + 'settings.billing.autoRecharge.title': 'অটো-রিচার্জ সক্রিয় করুন', + 'settings.billing.autoRecharge.toggleAriaLabel': 'অটো-রিচার্জ টগল করুন', + 'settings.billing.autoRecharge.weeklyLimit': 'সাপ্তাহিক ব্যয় সীমা', + 'settings.billing.history.desc': 'বিবরণ', + 'settings.billing.history.empty': 'খালি', + 'settings.billing.history.openPortal': 'পোর্টাল খুলুন', + 'settings.billing.history.posted': 'পোস্ট করা', + 'settings.billing.history.title': 'শিরোনাম', + 'settings.billing.inferenceBudget.cycleEnds': 'সাইকেল শেষ', + 'settings.billing.inferenceBudget.exhausted': 'শেষ হয়েছে', + 'settings.billing.inferenceBudget.loadError': 'লোড ত্রুটি', + 'settings.billing.inferenceBudget.noBudgetDesc': 'বাজেট নেই বিবরণ', + 'settings.billing.inferenceBudget.noRecurringBudget': 'কোনো পুনরাবৃত্ত বাজেট নেই', + 'settings.billing.inferenceBudget.noRecurringPlanBudget': 'কোনো পুনরাবৃত্ত প্ল্যান বাজেট নেই', + 'settings.billing.inferenceBudget.noRecurringWeeklyDesc': + 'আপনার বর্তমান পরিকল্পনার মধ্যে রয়েছে নিয়মিত এক সাপ্তাহিক বাজেটের মধ্যে। পরিবর্তে, ব্যবহারের জন্য উপলব্ধ স্বীকৃতি প্রাপ্ত করা হয়েছে ।', + 'settings.billing.inferenceBudget.remaining': 'অবশিষ্ট', + 'settings.billing.inferenceBudget.remainingSummary': '{remaining} / {budget} অবশিষ্ট', + 'settings.billing.inferenceBudget.spentThisCycle': '{amount} এই চক্রটি ব্যয় করেছে', + 'settings.billing.inferenceBudget.cycleEndsOn': 'চক্র শেষ হয় {date}', + 'settings.billing.inferenceBudget.exhaustedDesc': + 'সাবস্ক্রিপশন বিশিষ্ট সাবস্ক্রিপশন ব্যবহৃত হয় না। পরবর্তী চক্রের জন্য অপেক্ষা না করে AI ব্যবহার করার জন্য উপর উপর ক্লিক করুন।', + 'settings.billing.inferenceBudget.discountVsPayg': 'Xqxqx%s-র জন্য চার্জ করা হয়েছে।', + 'settings.billing.inferenceBudget.cycleSpend': 'সাইকেল খরচ', + 'settings.billing.inferenceBudget.totalAmount': '{amount} মোট', + 'settings.billing.inferenceBudget.inference': 'অনুমান', + 'settings.billing.inferenceBudget.integrations': 'ইন্টিগ্রেশন', + 'settings.billing.inferenceBudget.calls': '{count} কল করে', + 'settings.billing.inferenceBudget.dailySpend': 'দৈনিক খরচ', + 'settings.billing.inferenceBudget.dailySpendPoint': '{date}: {amount}', + 'settings.billing.inferenceBudget.topModels': 'শীর্ষ মডেল', + 'settings.billing.inferenceBudget.noInferenceUsage': 'এই চক্রের কোনো অনুমান ব্যবহার নেই।', + 'settings.billing.inferenceBudget.topIntegrations': 'শীর্ষ ইন্টিগ্রেশন', + 'settings.billing.inferenceBudget.noIntegrationUsage': 'এই চক্রের কোনো ইন্টিগ্রেশন ব্যবহার নেই।', + 'settings.billing.inferenceBudget.tenHourCap': 'দশ ঘণ্টার ক্যাপ', + 'settings.billing.inferenceBudget.title': 'শিরোনাম', + 'settings.billing.inferenceBudget.unableToLoad': 'ব্যবহারের ডেটা লোড করতে অক্ষম৷', + 'settings.billing.inferenceBudget.notAvailable': 'n/a', + 'settings.billing.payAsYouGo.available': 'পাওয়া যাচ্ছে', + 'settings.billing.payAsYouGo.chargeCustomAmount': 'খোলা হচ্ছে…', + 'settings.billing.payAsYouGo.chooseTopUpDesc': 'টপ আপ বিবরণ বেছে নিন', + 'settings.billing.payAsYouGo.chooseTopUpTitle': 'টপ আপ শিরোনাম বেছে নিন', + 'settings.billing.payAsYouGo.creditBalanceDesc': 'ক্রেডিট ব্যালেন্স বিবরণ', + 'settings.billing.payAsYouGo.creditBalanceTitle': 'ক্রেডিট ব্যালেন্স শিরোনাম', + 'settings.billing.payAsYouGo.customAmount': 'কাস্টম পরিমাণ', + 'settings.billing.payAsYouGo.enterAmount': 'পরিমাণ দিন', + 'settings.billing.payAsYouGo.opening': 'খোলা হচ্ছে', + 'settings.billing.payAsYouGo.promotionalCredits': 'প্রচারমূলক ক্রেডিট', + 'settings.billing.payAsYouGo.topUpBalance': 'টপ-আপ ব্যালেন্স', + 'settings.billing.payAsYouGo.topUpCredits': 'ক্রেডিট টপ আপ করুন', + 'settings.billing.payAsYouGo.unableToLoad': 'ব্যালেন্স লোড করা যাচ্ছে না।', + 'settings.billing.subscription.annual': 'বার্ষিক', + 'settings.billing.subscription.billedAnnually': 'বার্ষিক বিল', + 'settings.billing.subscription.chooseSubtitle': 'সাবটাইটেল বেছে নিন', + 'settings.billing.subscription.chooseTitle': 'শিরোনাম বেছে নিন', + 'settings.billing.subscription.cryptoDesc': 'ক্রিপ্টো বিবরণ', + 'settings.billing.subscription.cryptoQuestion': 'ক্রিপ্টো প্রশ্ন', + 'settings.billing.subscription.current': 'বর্তমান', + 'settings.billing.subscription.currentPlan': 'বর্তমান প্ল্যান', + 'settings.billing.subscription.monthly': 'মাসিক', + 'settings.billing.subscription.paymentConfirmed': 'পেমেন্ট নিশ্চিত', + 'settings.billing.subscription.perMonth': 'প্রতি মাসে', + 'settings.billing.subscription.popular': 'জনপ্রিয়', + 'settings.billing.subscription.save': '{pct}', + 'settings.billing.subscription.upgrade': 'আপগ্রেড করুন', + 'settings.billing.subscription.waiting': 'অপেক্ষা করছে', + 'settings.billing.subscription.waitingPayment': 'পেমেন্টের অপেক্ষায়', + 'settings.composio.apiKeyDesc': 'এই ডিভাইসে বর্তমানে একটি Composio API key সংরক্ষিত আছে।', + 'settings.composio.apiKeyExamplePlaceholder': 'ck_live_xxxxxxxxxxxxxxxx', + 'settings.composio.apiKeyLabel': 'Composio API কী', + 'settings.composio.apiKeyStored': 'API key সংরক্ষিত', + 'settings.composio.apiKeyStoredPlaceholder': + '• • • • • • ক • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • ক • • • • • • • • • • • • • • • • • • • • • ক • • • • • • • • • • • • • • • • • • • ক • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • ক ক • • • • • • • • • ক • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • ক ক • • • • • • • • • • • • • • • • • • • • ক • • • • • • • • • • • • • • • • • ক ক ক • • • • • • • • • • • • • • • • • • • • • • • • • • • • ক ক ক ক ক • • • • • • • • • • • • • • • • • • •', + 'settings.composio.clearedToBackend': 'ব্যাকএন্ড মোডে পরিবর্তিত', + 'settings.composio.confirmItem1': 'API key সহ app.composio.dev-এ একটি অ্যাকাউন্ট', + 'settings.composio.confirmItem2': + 'আপনার ব্যক্তিগত Composio অ্যাকাউন্টের মাধ্যমে প্রতিটি ইন্টিগ্রেশন পুনঃলিঙ্ক করতে', + 'settings.composio.confirmItem3': + 'নোট: Composio ট্রিগার (রিয়েল-টাইম webhooks) এখনও Direct মোডে কাজ করে না — শুধু সিঙ্ক্রোনাস টুল কল', + 'settings.composio.confirmNeedItems': 'আপনার প্রয়োজন হবে:', + 'settings.composio.confirmSwitch': 'আমি বুঝেছি, Direct-এ স্যুইচ করুন', + 'settings.composio.confirmTitle': '⚠️ Direct মোডে স্যুইচ হচ্ছে', + 'settings.composio.confirmWarning': + 'OpenHuman-এর মাধ্যমে লিঙ্ক করা আপনার বিদ্যমান ইন্টিগ্রেশনগুলি (Gmail, Slack, GitHub ইত্যাদি) দৃশ্যমান হবে না — সেগুলি OpenHuman-পরিচালিত Composio টেন্যান্টে থাকে।', + 'settings.composio.intro': + 'Composio ২৫০+ বহিরাগত অ্যাপকে টুল হিসেবে ইন্টিগ্রেট করে যা আপনার এজেন্ট কল করতে পারে। এই টুল কলগুলি কীভাবে রুট হবে তা নির্বাচন করুন।', + 'settings.composio.title': 'Composio', + 'settings.composio.modeDirect': 'ডাইরেক্ট (নিজের API কী আনুন)', + 'settings.composio.modeDirectDesc': + 'কলগুলি সরাসরি backend.composio.dev-এ যায়। সার্বভৌম / অফলাইন-বান্ধব। টুল এক্সিকিউশন সিঙ্ক্রোনাসভাবে কাজ করে; রিয়েল-টাইম ট্রিগার webhooks এখনও direct মোডে রুট করা হয় না (ফলো-আপ ইস্যু)।', + 'settings.composio.modeManaged': 'ম্যানেজড (OpenHuman আপনার হয়ে পরিচালনা করে)', + 'settings.composio.modeManagedDesc': + 'OpenHuman আমাদের ব্যাকএন্ডের মাধ্যমে টুল কল প্রক্সি করে (প্রস্তাবিত)। অথ ব্রোকার করা হয়; আপনি কখনও Composio API key পেস্ট করেন না। Webhooks সম্পূর্ণরূপে রুট করা।', + 'settings.composio.routingMode': 'রুটিং মোড', + 'settings.composio.saveErrorNoKey': 'সংরক্ষণ ব্যর্থ। Direct মোডের জন্য একটি API key প্রয়োজন।', + 'settings.composio.saving': 'সংরক্ষণ হচ্ছে…', + 'settings.composio.switching': 'স্যুইচ হচ্ছে…', + 'settings.companion.title': 'ডেস্কটপ সঙ্গী', + 'settings.companion.session': 'সেশন', + 'settings.companion.activeLabel': 'সক্রিয়', + 'settings.companion.inactiveStatus': 'নিষ্ক্রিয়', + 'settings.companion.stopping': 'টপিং...', + 'settings.companion.stopSession': 'স্টপ সেশন', + 'settings.companion.starting': 'শুরু হচ্ছে...', + 'settings.companion.startSession': 'শুরু হচ্ছে সেশন', + 'settings.companion.sessionId': 'সেশন আইডি', + 'settings.companion.turns': '92 টার্ন', + 'settings.companion.remaining': 'অবশিষ্ট', + 'settings.companion.configuration': 'কনফিগারেশন', + 'settings.companion.hotkey': 'হটকি', + 'settings.companion.activationMode': 'সক্রিয়করণ মোড', + 'settings.companion.sessionTtl': 'সেশন TTL', + 'settings.companion.screenCapture': 'স্ক্রিন ক্যাপচার', + 'settings.companion.appContext': 'অ্যাপ প্রসঙ্গ', + 'settings.cron.jobs.desc': 'বিবরণ', + 'settings.cron.jobs.empty': 'কোনো কোর ক্রন জব পাওয়া যায়নি।', + 'settings.cron.jobs.lastStatus': 'শেষ স্ট্যাটাস', + 'settings.cron.jobs.loading': 'ক্রন জব লোড হচ্ছে...', + 'settings.cron.jobs.loadingRuns': 'রান লোড হচ্ছে', + 'settings.cron.jobs.nextRun': 'পরবর্তী রান', + 'settings.cron.jobs.pause': 'বিরতি', + 'settings.cron.jobs.paused': 'বিরতিতে', + 'settings.cron.jobs.recentRuns': 'সাম্প্রতিক রান', + 'settings.cron.jobs.removing': 'অপসারণ হচ্ছে', + 'settings.cron.jobs.resume': 'পুনরায় শুরু', + 'settings.cron.jobs.runningNow': 'এখন চলছে', + 'settings.cron.jobs.saving': 'সংরক্ষণ হচ্ছে…', + 'settings.cron.jobs.schedule': 'সময়সূচি', + 'settings.cron.jobs.title': 'কোর ক্রন জবস', + 'settings.cron.jobs.viewRuns': 'রান দেখুন', + 'settings.localModel.deviceCapability.active': 'সক্রিয়', + 'settings.localModel.deviceCapability.appliedTier': 'প্রয়োগকৃত টায়ার', + 'settings.localModel.deviceCapability.applying': 'প্রয়োগ হচ্ছে', + 'settings.localModel.deviceCapability.cores': '{count}', + 'settings.localModel.deviceCapability.couldNotLoadPresets': 'প্রিসেট লোড করা যায়নি', + 'settings.localModel.deviceCapability.cpu': 'CPU', + 'settings.localModel.deviceCapability.customModelIds': 'কাস্টম মডেল ID', + 'settings.localModel.deviceCapability.detected': 'শনাক্ত', + 'settings.localModel.deviceCapability.disabled': 'নিষ্ক্রিয়', + 'settings.localModel.deviceCapability.disabledDesc': 'নিষ্ক্রিয় বিবরণ', + 'settings.localModel.deviceCapability.downloadingModels': '(মডেল ডাউনলোড হচ্ছে)', + 'settings.localModel.deviceCapability.downloadingSetupDesc': + 'OllamaSetup ইনস্টলার (~2 GB) ডাউনলোড ও আনপ্যাক হচ্ছে। প্রথম ইনস্টলে এক মিনিট সময় লাগতে পারে।', + 'settings.localModel.deviceCapability.failedToApplyPreset': 'প্রিসেট প্রয়োগ করতে ব্যর্থ', + 'settings.localModel.deviceCapability.gpu': 'GPU', + 'settings.localModel.deviceCapability.installFailed': 'Ollama ইনস্টল ব্যর্থ', + 'settings.localModel.deviceCapability.installFailedDesc': + 'Ollama ব্যবহারযোগ্য হওয়ার আগে ইনস্টলার বন্ধ হয়েছে। আবার চেষ্টা করতে ক্লিক করুন, বা ollama.com থেকে ম্যানুয়ালি ইনস্টল করুন।', + 'settings.localModel.deviceCapability.installFirst': 'প্রথমে Ollama চালান।', + 'settings.localModel.deviceCapability.installFirstDesc': + 'লোকাল টিয়ার একটি বাহ্যিকভাবে পরিচালিত Ollama endpoint-এর উপর নির্ভর করে। নিজে এটি শুরু করুন, আপনি যে মডেলগুলি চান তা টানুন, এবং রানটাইম পৌঁছানো না যাওয়া পর্যন্ত "Disabled (cloud fallback)" ব্যবহার করতে থাকুন।', + 'settings.localModel.deviceCapability.installOllamaFirst': + 'এই টিয়ার ব্যবহার করতে প্রথমে Ollama চালান', + 'settings.localModel.deviceCapability.installingOllama': 'Ollama ইনস্টল হচ্ছে', + 'settings.localModel.deviceCapability.loadingDeviceInfo': 'ডিভাইস তথ্য লোড হচ্ছে', + 'settings.localModel.deviceCapability.localAiDisabled': + 'লোকাল AI নিষ্ক্রিয় — ক্লাউড ফলব্যাক ব্যবহার করছে।', + 'settings.localModel.deviceCapability.modelTier': 'মডেল টায়ার', + 'settings.localModel.deviceCapability.needsOllama': 'Ollama প্রয়োজন', + 'settings.localModel.deviceCapability.notDetected': 'শনাক্ত হয়নি', + 'settings.localModel.deviceCapability.disabledLowercase': 'অক্ষম', + 'settings.localModel.deviceCapability.presetDetails': + 'চ্যাট: {chatModel} · দৃষ্টি: {visionModel} · লক্ষ্য RAM: {targetRamGb} GB', + 'settings.localModel.deviceCapability.ram': 'RAM', + 'settings.localModel.deviceCapability.recommended': 'প্রস্তাবিত', + 'settings.localModel.deviceCapability.retryInstall': 'আবার চেষ্টা হচ্ছে…', + 'settings.localModel.deviceCapability.retrying': 'আবার চেষ্টা হচ্ছে…', + 'settings.localModel.deviceCapability.starting': 'শুরু হচ্ছে…', + 'settings.localModel.download.audioPathPlaceholder': 'অডিও ফাইলের পূর্ণ পথ', + 'settings.localModel.download.capabilityChat': 'চ্যাট', + 'settings.localModel.download.capabilityEmbedding': 'এম্বেড করা', + 'settings.localModel.download.capabilityAssets': 'ক্যাপাবিলিটি অ্যাসেট', + 'settings.localModel.download.capabilityStt': 'STT', + 'settings.localModel.download.capabilityTts': 'TTS', + 'settings.localModel.download.capabilityVision': 'দৃষ্টি', + 'settings.localModel.download.downloading': 'ডাউনলোড হচ্ছে...', + 'settings.localModel.download.embeddingDimensions': 'মাত্রা: {dimensions}', + 'settings.localModel.download.embeddingModel': 'মডেল: {modelId}', + 'settings.localModel.download.embeddingPlaceholder': 'প্রতি লাইনে একটি ইনপুট স্ট্রিং...', + 'settings.localModel.download.embeddingVectors': 'ভেক্টর: {count}', + 'settings.localModel.download.noThinkMode': 'থিংক মোড নেই', + 'settings.localModel.download.notAvailable': 'n/a', + 'settings.localModel.download.promptPlaceholder': + 'যেকোনো প্রম্পট টাইপ করুন এবং লোকাল মডেলে চালান...', + 'settings.localModel.download.quantizationPref': 'কোয়ান্টাইজেশন পছন্দ', + 'settings.localModel.download.runEmbeddingTest': 'চলছে...', + 'settings.localModel.download.runPromptTest': 'Prompt Test চালান', + 'settings.localModel.download.runSummaryTest': 'Summary Test চালান', + 'settings.localModel.download.runTranscriptionTest': 'চলছে...', + 'settings.localModel.download.runTtsTest': 'চলছে...', + 'settings.localModel.download.runVisionTest': 'চলছে...', + 'settings.localModel.download.running': 'চলছে...', + 'settings.localModel.download.runningPrompt': 'প্রম্পট চলছে', + 'settings.localModel.download.summaryHelper': + 'রাস্ট কোরের মাধ্যমে `openhuman.inference_summarize` কল করে', + 'settings.localModel.download.summarizePlaceholder': + 'লোকাল মডেল দিয়ে সারসংক্ষেপের জন্য টেক্সট পেস্ট করুন...', + 'settings.localModel.download.testCustomPrompt': 'কাস্টম প্রম্পট পরীক্ষা করুন', + 'settings.localModel.download.testEmbeddings': 'এম্বেডিং পরীক্ষা করুন', + 'settings.localModel.download.testSummarization': 'সারসংক্ষেপ পরীক্ষা করুন', + 'settings.localModel.download.testVisionPrompt': 'ভিশন প্রম্পট পরীক্ষা করুন', + 'settings.localModel.download.testVoiceInput': 'ভয়েস ইনপুট পরীক্ষা করুন (STT)', + 'settings.localModel.download.testVoiceOutput': 'ভয়েস আউটপুট পরীক্ষা করুন (TTS)', + 'settings.localModel.download.transcript': 'ট্রান্সক্রিপ্ট:', + 'settings.localModel.download.ttsOutput': 'আউটপুট: {outputPath}', + 'settings.localModel.download.ttsOutputPlaceholder': 'ঐচ্ছিক আউটপুট WAV পথ', + 'settings.localModel.download.ttsPlaceholder': 'সংশ্লেষণের জন্য টেক্সট দিন...', + 'settings.localModel.download.ttsVoice': 'ভয়েস: {voiceId}', + 'settings.localModel.download.visionImagePlaceholder': + 'প্রতি লাইনে একটি ইমেজ রেফারেন্স (data URI, URL, বা লোকাল পথ মার্কার)', + 'settings.localModel.download.visionPromptPlaceholder': 'ভিশন মডেলের জন্য একটি প্রম্পট দিন...', + 'settings.localModel.status.allChecksPassed': 'সব পরীক্ষা পাস', + 'settings.localModel.status.artifact': 'আর্টিফ্যাক্ট', + 'settings.localModel.status.backend': 'ব্যাকএন্ড', + 'settings.localModel.status.binary': 'বাইনারি', + 'settings.localModel.status.bootstrapResume': 'বুটস্ট্র্যাপ / রিজিউম', + 'settings.localModel.status.checking': 'পরীক্ষা হচ্ছে...', + 'settings.localModel.status.checkingOllama': 'Ollama পরীক্ষা হচ্ছে', + 'settings.localModel.status.contextBelowMinimumBadge': + '{contextLength} ctx - নীচে {required} মিনিট', + 'settings.localModel.status.contextBelowMinimumTitle': + 'প্রত্যাখ্যান করা হয়েছে: প্রসঙ্গ উইন্ডো {contextLength} টোকেনগুলি মেমরি স্তরের প্রয়োজনীয় ন্যূনতম {required}-টোকেনের নীচে। প্রত্যাহার নীরব ছেদন দ্বারা দূষিত হবে.', + 'settings.localModel.status.contextOkBadge': 'Xqxqxqx সার্ভার মোড ব্যবহার করুন', + 'settings.localModel.status.contextOkTitle': + 'কনটেক্সট উইন্ডো {contextLength} টোকেন মেমরি-লেয়ার ন্যূনতম {required} টোকেন পূরণ করে।', + 'settings.localModel.status.contextUnknownBadge': 'ctx অজানা', + 'settings.localModel.status.contextUnknownTitle': + 'প্রসঙ্গ উইন্ডো অজানা; নিশ্চিত করতে পারেনি এটি {required}-টোকেন মেমরি-লেয়ার ন্যূনতম পূরণ করে।', + 'settings.localModel.status.customLocation': 'কাস্টম লোকেশন', + 'settings.localModel.status.customLocationDesc': 'কাস্টম লোকেশন বিবরণ', + 'settings.localModel.status.diagnosticsHint': + 'Ollama চলছে এবং মডেল ইনস্টল আছে কিনা যাচাই করতে "Run Diagnostics"-এ ক্লিক করুন।', + 'settings.localModel.status.downloadingUnknown': 'ডাউনলোড হচ্ছে (আকার অজানা)', + 'settings.localModel.status.eta': 'ETA', + 'settings.localModel.status.expectedModels': 'প্রত্যাশিত মডেল', + 'settings.localModel.status.expectedChat': 'চ্যাট: {model}', + 'settings.localModel.status.expectedEmbedding': 'এম্বেডিং: {model}', + 'settings.localModel.status.expectedVision': 'দৃষ্টি: {model}', + 'settings.localModel.status.externalProcess': 'বাহ্যিক প্রক্রিয়া', + 'settings.localModel.status.forceRebootstrap': 'ফোর্স রি-বুটস্ট্র্যাপ', + 'settings.localModel.status.generationTps': 'জেনারেশন TPS', + 'settings.localModel.status.hideErrorDetails': 'ত্রুটির বিবরণ লুকান', + 'settings.localModel.status.installManually': 'ম্যানুয়ালি ইনস্টল করুন', + 'settings.localModel.status.installManuallyFrom': 'থেকে ম্যানুয়ালি ইনস্টল করুন', + 'settings.localModel.status.installOllama': 'শুরু হচ্ছে…', + 'settings.localModel.status.installedModels': 'ইনস্টল করা মডেল', + 'settings.localModel.status.installing': 'ইনস্টল হচ্ছে...', + 'settings.localModel.status.installingOllama': 'Ollama রানটাইম ইনস্টল হচ্ছে...', + 'settings.localModel.status.issues': 'সমস্যা', + 'settings.localModel.status.issuesFound': '{count}টি সমস্যা পাওয়া গেছে', + 'settings.localModel.status.lastLatency': 'শেষ লেটেন্সি', + 'settings.localModel.status.model': 'মডেল', + 'settings.localModel.status.notAvailable': 'n/a', + 'settings.localModel.status.notFound': 'পাওয়া যায়নি', + 'settings.localModel.status.notRunning': 'চলছে না', + 'settings.localModel.status.ollamaBinaryPath': 'Ollama বাইনারি পথ', + 'localModel.ollamaServer.helperText': 'উদাহরণ: http://192.168.1.5:11434', + 'localModel.ollamaServer.label': 'Ollama সার্ভার URL', + 'localModel.ollamaServer.modelCount': 'মডেল', + 'localModel.ollamaServer.placeholder': 'http://localhost:11434', + 'localModel.ollamaServer.reachable': 'পৌঁছানো যাচ্ছে', + 'localModel.ollamaServer.resetButton': 'ডিফল্টে পুনরায় সেট করুন', + 'localModel.ollamaServer.saveButton': 'সংরক্ষণ করুন', + 'localModel.ollamaServer.testButton': 'সংযোগ পরীক্ষা করুন', + 'localModel.ollamaServer.unreachable': 'পৌঁছানো যাচ্ছে না', + 'localModel.ollamaServer.validationError': 'একটি বৈধ http:// বা https:// URL হতে হবে', + 'settings.localModel.status.ollamaDiagnostics': 'Ollama ডায়াগনস্টিক্স', + 'settings.localModel.status.ollamaNotInstalled': 'Ollama রানটাইম অনুপলব্ধ', + 'settings.localModel.status.ollamaNotInstalledDesc': + 'OpenHuman এখন Ollama-কে একটি বাহ্যিক ইনফারেন্স রানটাইম হিসেবে গণ্য করে। আপনার নিজের Ollama সার্ভার শুরু করুন, যে মডেলগুলি চান টানুন, এবং ওয়ার্কলোড রাউটিং সেদিকে নির্দেশ করুন।', + 'settings.localModel.status.progress': 'অগ্রগতি', + 'settings.localModel.status.provider': 'প্রোভাইডার', + 'settings.localModel.status.retryBootstrap': 'বুটস্ট্র্যাপ আবার চেষ্টা করুন', + 'settings.localModel.status.runDiagnostics': 'পরীক্ষা হচ্ছে...', + 'settings.localModel.status.running': 'চলছে', + 'settings.localModel.status.runningExternalProcess': 'বাহ্যিক প্রসেসের মাধ্যমে চলছে', + 'settings.localModel.status.runtimeStatus': 'রানটাইম স্ট্যাটাস', + 'settings.localModel.status.server': 'সার্ভার', + 'settings.localModel.status.setPath': 'সেট হচ্ছে...', + 'settings.localModel.status.setting': 'সেট হচ্ছে...', + 'settings.localModel.status.showErrorDetails': 'ত্রুটির বিবরণ লুকান', + 'settings.localModel.status.showInstallErrorDetails': 'ত্রুটির বিবরণ লুকান', + 'settings.localModel.status.suggestedFixes': 'প্রস্তাবিত সমাধান', + 'settings.localModel.status.thenSetPath': 'তারপর পথ সেট করুন', + 'settings.localModel.status.triggering': 'ট্রিগার হচ্ছে...', + 'settings.localModel.status.unavailable': 'পাওয়া যাচ্ছে না', + 'settings.localModel.status.working': 'কাজ হচ্ছে...', + 'settings.developerMenu.ai.title': 'AI কনফিগারেশন', + 'settings.developerMenu.ai.desc': + 'ক্লাউড প্রদানকারী, স্থানীয় Ollama মডেল এবং প্রতি-ওয়ার্কলোড রাউটিং', + 'settings.developerMenu.screenAwareness.title': 'স্ক্রিন সচেতনতা', + 'settings.developerMenu.screenAwareness.desc': + 'স্ক্রিন ক্যাপচার অনুমতি, মনিটরিং নীতি এবং সেশন নিয়ন্ত্রণ', + 'settings.developerMenu.messagingChannels.title': 'মেসেজিং চ্যানেল', + 'settings.developerMenu.messagingChannels.desc': + 'Telegram/Discord অথেন্টিকেশন মোড এবং ডিফল্ট চ্যানেল রাউটিং কনফিগার করুন', + 'settings.developerMenu.tools.title': 'টুলস', + 'settings.developerMenu.tools.desc': + 'OpenHuman আপনার পক্ষ থেকে যে সক্ষমতাগুলি ব্যবহার করতে পারে সেগুলি চালু বা বন্ধ করুন', + 'settings.developerMenu.agentChat.title': 'এজেন্ট চ্যাট', + 'settings.developerMenu.agentChat.desc': + 'মডেল এবং টেম্পারেচার ওভাররাইডসহ এজেন্ট কথোপকথন পরীক্ষা করুন', + 'settings.developerMenu.devWorkflow.title': 'Beavil কর্ম', + 'settings.developerMenu.devWorkflow.desc': + 'একজন স্বায়ত্তশাসিত এজেন্ট যে আপনার xqxqx বিষয় গ্রহণ করে এবং একটি তালিকাতে জনসংযোগের আয়োজন করে।', + 'settings.developerMenu.devWorkflow.panelDesc': + 'একটি স্বায়ত্তশাসিত ডেভেলপার এজেন্ট আপনার কাছে xqxkx বিষয় নির্বাচন করে এবং একটি সুনির্দিষ্ট সময়ে স্বয়ংক্রিয়ভাবে অনুরোধ জানায়।', + 'settings.developerMenu.skillsRunner.title': 'স্কিলস রানার', + 'settings.developerMenu.skillsRunner.desc': + 'যে কোন একটিd-hoc চালান - এর ইনপুট পূর্ণ করুন এবং স্বায়ত্তশাসিত পটভূমি দিয়ে আগুন জমবে', + 'settings.developerMenu.skillsRunner.panelDesc': + 'একটি জোড়ার দক্ষতা, এর ঘোষণাকৃত ইনপুটে ভর্তি, এবং অগ্নি-গঠিত পটভূমি। যদি আপনি পুনরাবৃত্তিমূলক কাজ করতে চান, তাহলে দেব রো ব্যবহার করুন।', + 'settings.skillsRunner.skill': 'দক্ষতা', + 'settings.skillsRunner.selectSkill': 'একটি দক্ষতা স্তর বেছে নিন...', + 'settings.skillsRunner.loadingSkills': 'দক্ষতা স্তর...', + 'settings.skillsRunner.loadingDescription': 'দক্ষতা ইনপুট করা হচ্ছে...', + 'settings.skillsRunner.noInputs': 'এই দক্ষতায় কোনো ইনপুট নেই।', + 'settings.skillsRunner.placeholder.required': 'required', + 'settings.skillsRunner.runNow': 'এখন সঞ্চালন করুন', + 'settings.skillsRunner.starting': '%s শুরু করা হচ্ছে', + 'settings.skillsRunner.started': 'আরম্ভ করা হয়েছে - ID:', + 'settings.skillsRunner.logPath': 'লগ:', + 'settings.skillsRunner.error.listSkills': 'প্লাগ-ইন লোড করতে ব্যর্থ:', + 'settings.skillsRunner.error.describe': 'ইনপুট লোড করতে ব্যর্থ:%s', + 'settings.skillsRunner.error.missingRequired': 'প্রয়োজনীয় ইনপুট পাওয়া যায়নি:%s', + 'settings.skillsRunner.error.run': 'আরম্ভ করতে ব্যর্থ:', + 'settings.skillsRunner.error.preflightGate': 'প্রিমবট গেট ব্যর্থ হয়েছে', + 'settings.skillsRunner.schedule.heading': 'নির্ধারিত সময় অবধি (বিপ)', + 'settings.skillsRunner.schedule.help': + 'এই দক্ষতা + ইনপুট একটি পুনরাবৃত্তিমূলক কাজ হিসাবে সংরক্ষণ করো । যে এজেন্টকে ফোন করা হবে প্রত্যেক টিকতে.', + 'settings.skillsRunner.schedule.frequency': 'ফ্রিকোয়েন্সি', + 'settings.skillsRunner.schedule.every30min': 'প্রতি ৩০ মিনিট', + 'settings.skillsRunner.schedule.everyHour': 'প্রতি ঘন্টায়', + 'settings.skillsRunner.schedule.every2hours': 'প্রতি ২ ঘন্টা', + 'settings.skillsRunner.schedule.every6hours': 'প্রতি ৬ ঘন্টা', + 'settings.skillsRunner.schedule.onceDaily': 'প্রতিদিন (৯: ০০)', + 'settings.skillsRunner.schedule.save': 'সময় সংরক্ষণ করুন', + 'settings.skillsRunner.schedule.saving': 'ইনস্টল করা হয়েছে...', + 'settings.skillsRunner.schedule.saved': 'নির্ধারিত মান সংরক্ষণ করুন ।', + 'settings.skillsRunner.schedule.error': 'সংরক্ষণ করতে ব্যর্থ:', + 'settings.skillsRunner.schedule.loadingJobs': 'উপস্থিত তালিকা লোড করা হচ্ছে...', + 'settings.skillsRunner.schedule.noJobs': 'এই দক্ষতায় এখনো কোন সময় সংরক্ষিত হয়নি।', + 'settings.skillsRunner.schedule.existing': 'এই কাজের জন্য নির্ধারিত কাজ:', + 'settings.skillsRunner.schedule.runNow': 'সঞ্চালন ( R)', + 'settings.skillsRunner.schedule.remove': 'মুছে ফেলুন', + 'settings.skillsRunner.scheduleEnabled': 'সক্রিয়', + 'settings.skillsRunner.scheduleDisabled': 'সাময়িক বিরতি চলছে', + 'settings.skillsRunner.scheduleToggleAria': 'পর্দা পাঠ ব্যবস্থা সক্রিয় করা হবে', + 'settings.skillsRunner.schedule.history': 'ব্রাউজ-ইতিহাস', + 'settings.skillsRunner.schedule.historyLoading': 'ইতিহাস লোড করা হচ্ছে...', + 'settings.skillsRunner.schedule.historyEmpty': 'এই শিডিউলের জন্য এখনো পালাই নি।', + 'settings.skillsRunner.schedule.historyNoOutput': 'কোনো আউটপুট পাওয়া যায়নি।', + 'settings.skillsRunner.schedule.active': 'সক্রিয়', + 'settings.skillsRunner.schedule.lastRunLabel': 'শেষ', + 'settings.skillsRunner.recentRuns.headingForSkill': 'এই কাজের জন্য সম্প্রতি ব্যবহৃত রান', + 'settings.skillsRunner.recentRuns.headingAll': 'সম্প্রতি ব্যবহৃত দক্ষতা স্তর (সকল)', + 'settings.skillsRunner.recentRuns.refresh': 'নতুন করে প্রদর্শন', + 'settings.skillsRunner.recentRuns.loading': 'সর্বশেষ চালানো হচ্ছে...', + 'settings.skillsRunner.recentRuns.empty': 'কোন সাম্প্রতিক রান নেই।', + 'settings.skillsRunner.viewer.loading': 'লগ লোড করা হচ্ছে...', + 'settings.skillsRunner.viewer.tailing': 'লাইভ টেইলিং', + 'settings.skillsRunner.viewer.fetching': 'প্রাপ্ত করা হচ্ছে', + 'settings.skillsRunner.viewer.error': 'লগ- ইন পড়তে ব্যর্থ', + 'settings.skillsRunner.repoPicker.loading': 'সংগ্রহস্থল লোড করা হচ্ছে...', + 'settings.skillsRunner.repoPicker.select': 'সংগ্রহস্থল নির্বাচন করুন', + 'settings.skillsRunner.repoPicker.empty': + 'সংগ্রহস্থল অনুপস্থিত। xqx1x সহযোগে xqxqx সহযোগে xq1-র সাথে সংযোগ করা হবে', + 'settings.skillsRunner.repoPicker.notConnected': + 'xqxqx +x সহযোগে xq1x-র সাথে সংযুক্ত করা হয়নি প্রথমে এটাকে দক্ষতার সাথে এক্সqxxx2x+x এর সাথে সংযুক্ত করুন।', + 'settings.skillsRunner.repoPicker.privateTag': '(ব্যক্তিগত)', + 'settings.skillsRunner.branchPicker.needRepo': 'আগে আর একটা জিনিস নাও...', + 'settings.skillsRunner.branchPicker.loading': 'শাখা লোড করা হচ্ছে...', + 'settings.skillsRunner.branchPicker.select': 'একটি শাখা নির্বাচন করুন...', + 'settings.devWorkflow.githubRepository': 'xqxxqx সংগ্রহস্থল', + 'settings.devWorkflow.loadingRepositories': 'সংগ্রহস্থল লোড করা হচ্ছে...', + 'settings.devWorkflow.selectRepository': 'সংগ্রহস্থল নির্বাচন করুন', + 'settings.devWorkflow.privateTag': '(ব্যক্তিগত)', + 'settings.devWorkflow.detectingForkInfo': 'fork তথ্য সনাক্ত করা হচ্ছে...', + 'settings.devWorkflow.forkDetected': 'k সনাক্ত করা হয়েছে', + 'settings.devWorkflow.upstream': 'উপরে:', + 'settings.devWorkflow.forkPrNote': 'স্ট্রিমিং রিপোজিটরিতে জনসংযোগ করা হবে।', + 'settings.devWorkflow.notForkNote': + 'fork না। সরাসরি এই রিপোজিটরির বিরুদ্ধে জনসংযোগ ব্যবস্থা গ্রহণ করা হবে।', + 'settings.devWorkflow.targetBranch': 'লক্ষ্য ব্রাঞ্চ', + 'settings.devWorkflow.targetBranchNote': 'এই শাখার বিরুদ্ধে জনসংযোগ হবে', + 'settings.devWorkflow.loadingBranches': 'শাখা লোড করা হচ্ছে...', + 'settings.devWorkflow.runFrequency': 'ফ্রিকোয়েন্সি চালানো হবে', + 'settings.devWorkflow.runFrequencyNote': 'এজেন্টরা কত বার এই বিষয়ে যাচাই করে জনসংযোগ করেন।', + 'settings.devWorkflow.updateConfiguration': 'কনফিগারেশন আপডেট করুন', + 'settings.devWorkflow.saveConfiguration': 'কনফিগারেশন সংরক্ষণ করুন', + 'settings.devWorkflow.remove': 'মুছে ফেলুন', + 'settings.devWorkflow.saved': 'সংরক্ষিত', + 'settings.devWorkflow.activeConfiguration': 'সক্রিয় কনফিগারেশন', + 'settings.devWorkflow.activeConfigRepository': 'সংগ্রহস্থল:', + 'settings.devWorkflow.activeConfigUpstream': 'উপরে:', + 'settings.devWorkflow.activeConfigTargetBranch': 'লক্ষ্য শাখা:', + 'settings.devWorkflow.activeConfigSchedule': 'নির্ধারিত & সময়:', + 'settings.devWorkflow.enabled': 'সক্রিয়', + 'settings.devWorkflow.paused': 'সাময়িক বিরতি চলছে', + 'settings.devWorkflow.nextRun': 'পরবর্তী চালনা', + 'settings.devWorkflow.lastRun': 'সর্বশেষ সঞ্চালিত', + 'settings.devWorkflow.runNow': 'এখন সঞ্চালন করুন', + 'settings.devWorkflow.running': 'চলমান...', + 'settings.devWorkflow.recentRuns': 'সম্প্রতি ব্যবহৃত', + 'settings.devWorkflow.cronSaveError': 'কনফিগারেশন সংরক্ষণ করতে ব্যর্থ', + 'settings.devWorkflow.lastOutput': 'শেষ আউটপুট', + 'settings.devWorkflow.noOutput': 'কোনো আউটপুট পাওয়া যায়নি', + 'settings.devWorkflow.runningStatus': + 'এজেন্ট চলছে - একটা সমস্যা হচ্ছে আর ঠিক করার চেষ্টা করছে...', + 'settings.devWorkflow.errorNotConnected': + 'xqxqx সংযুক্ত নয়। অনুগ্রহ করে Xqx1qx; এর মাধ্যমে part- র সাথে সংযোগ করুন উচ্চ পর্যায়ের x xqx2x প্রথমে', + 'settings.devWorkflow.errorToolNotEnabled': + 'xqxqx টুল এই ব্যাক-এন্ডে সক্রিয় করা হয়নি। অনুগ্রহ করে আপনার অ্যাডমিনিস্ট্রেটরের সাথে যোগাযোগ করুন। Xqxq1qx সহযোগে এটি সক্রিয় করার অনুরোধ জানানো হয়েছে।', + 'settings.devWorkflow.errorNotAuthenticated': 'অনুমোদিত নয়। দয়া করে প্রথমে সাইন ইন করুন।', + 'settings.devWorkflow.errorNoRepositories': 'xqxx অ্যাকাউন্টের জন্য কোন সংগ্রহস্থল পাওয়া যায়নি', + 'settings.devWorkflow.schedule.every30min': 'প্রতি ৩০ মিনিট', + 'settings.devWorkflow.schedule.everyHour': 'প্রতি ঘন্টায়', + 'settings.devWorkflow.schedule.every2hours': 'প্রতি ২ ঘন্টা', + 'settings.devWorkflow.schedule.every6hours': 'প্রতি ৬ ঘন্টা', + 'settings.devWorkflow.schedule.onceDaily': 'প্রতিদিন (৯.', + 'settings.developerMenu.cronJobs.title': 'Cron জব', + 'settings.developerMenu.cronJobs.desc': + 'রানটাইম স্কিলের জন্য নির্ধারিত জব দেখুন এবং কনফিগার করুন', + 'settings.developerMenu.localModelDebug.title': 'লোকাল মডেল ডিবাগ', + 'settings.developerMenu.localModelDebug.desc': + 'Ollama কনফিগারেশন, অ্যাসেট ডাউনলোড, মডেল টেস্ট এবং ডায়াগনস্টিক্স', + 'settings.developerMenu.webhooks.title': 'ওয়েবহুক', + 'settings.developerMenu.webhooks.desc': + 'রানটাইম ওয়েবহুক রেজিস্ট্রেশন এবং ধরা পড়া রিকোয়েস্ট লগ পরিদর্শন করুন', + 'settings.developerMenu.eventLog.title': 'ইভেন্টের লগ', + 'settings.developerMenu.eventLog.desc': + 'লাইভ রঙ-কোডকৃত সব এজেন্ট, টুল, এবং সিস্টেম ইভেন্টের জন্য', + 'settings.developerMenu.eventLog.allTypes': 'সর্ব প্রকার', + 'settings.developerMenu.eventLog.filterAgent': 'ফিল্টার...', + 'settings.developerMenu.eventLog.download': 'ডাউনলোড করা হয়েছে', + 'settings.developerMenu.eventLog.events': 'ইভেন্ট', + 'settings.developerMenu.eventLog.live': 'লাইভ', + 'settings.developerMenu.eventLog.disconnected': 'বিচ্ছিন্ন', + 'settings.developerMenu.eventLog.waiting': 'ইভেন্টের অপেক্ষা করা হচ্ছে...', + 'settings.developerMenu.eventLog.notConnected': 'সংযুক্ত নয়', + 'settings.developerMenu.eventLog.jumpToLatest': 'সর্বশেষ গুরুত্বপূর্ণ', + 'settings.developerMenu.eventLog.badge.tool': 'TOOL', + 'settings.developerMenu.eventLog.badge.agent': 'AGENT', + 'settings.developerMenu.eventLog.badge.info': 'INFO', + 'settings.developerMenu.eventLog.badge.mem': 'MEM', + 'settings.developerMenu.eventLog.badge.chan': 'CHAN', + 'settings.developerMenu.eventLog.badge.cron': 'CRON', + 'settings.developerMenu.eventLog.badge.hook': 'HOOK', + 'settings.developerMenu.eventLog.badge.warn': 'WARN', + 'settings.developerMenu.eventLog.badge.skill': 'SKILL', + 'settings.developerMenu.eventLog.badge.comp': 'COMP', + 'settings.developerMenu.eventLog.badge.mcp': 'MCP', + 'settings.developerMenu.intelligence.title': 'ইন্টেলিজেন্স', + 'settings.developerMenu.intelligence.desc': + 'মেমরি ওয়ার্কস্পেস, সাবকনশাস ইঞ্জিন, ড্রিমস এবং সেটিংস', + 'settings.developerMenu.notificationRouting.title': 'নোটিফিকেশন রাউটিং', + 'settings.developerMenu.notificationRouting.desc': + 'ইন্টিগ্রেশন অ্যালার্টের জন্য AI গুরুত্ব স্কোরিং এবং অর্কেস্ট্রেটর এসকেলেশন', + 'settings.developerMenu.composeioTriggers.title': 'ComposeIO ট্রিগার', + 'settings.developerMenu.composeioTriggers.desc': 'ComposeIO ট্রিগার ইতিহাস এবং আর্কাইভ দেখুন', + 'settings.developerMenu.composioRouting.title': 'Composio রাউটিং (ডাইরেক্ট মোড)', + 'settings.developerMenu.composioRouting.desc': + 'আপনার নিজস্ব Composio API কী ব্যবহার করুন এবং কল সরাসরি backend.composio.dev-এ রাউট করুন', + 'settings.developerMenu.integrationTriggers.title': 'ইন্টিগ্রেশন ট্রিগার', + 'settings.developerMenu.integrationTriggers.desc': + 'Composio ইন্টিগ্রেশন ট্রিগারের জন্য AI ট্রায়াজ সেটিংস কনফিগার করুন', + 'settings.developerMenu.mcpServer.title': 'MCP লাইব্রেরি অনুপলব্ধ', + 'settings.developerMenu.mcpServer.desc': + 'বাহ্যিক MCP ক্লায়েন্টগুলিকে OpenHuman-এ সংযুক্ত করতে কনফিগার করুন', + 'settings.developerMenu.autonomy.title': 'এজেন্ট স্বায়ত্তশাসন', + 'settings.developerMenu.autonomy.desc': 'টুল অ্যাকশনের রেট সীমা এবং নিরাপত্তা থ্রেশহোল্ড', + 'settings.mcpServer.title': + 'MCP সার্ভারের সাথে সংযোগ করতে বহিরাগত __BR1__ ক্লায়েন্ট কনফিগার করুন', + 'settings.mcpServer.toolsSectionTitle': 'উপলভ্য টুল', + 'settings.mcpServer.toolsSectionDesc': 'উপলভ্য টুলস stdio সার্ভার যখন openhuman-core mcp', + 'settings.mcpServer.configSectionTitle': 'ক্লায়েন্ট কনফিগারেশন চালায়', + 'settings.mcpServer.configSectionDesc': + 'সঠিক কনফিগারেশন স্নিপেট তৈরি করতে আপনার MCP ক্লায়েন্ট নির্বাচন করুন', + 'settings.mcpServer.copySnippet': 'ক্লিপবোর্ডে কপি করুন', + 'settings.mcpServer.copied': 'কপি করা হয়েছে!', + 'settings.mcpServer.openConfigFile': 'কনফিগ ফাইল খুলুন', + 'settings.mcpServer.binaryPathNotFound': + 'OpenHuman বাইনারি পাওয়া যায়নি। উৎস থেকে চললে, এর সাথে তৈরি করুন: cargo build --bin openhuman-core', + 'settings.mcpServer.openConfigError': 'কনফিগার ফাইল খুলতে ব্যর্থ', + 'settings.mcpServer.clientClaudeDesktop': 'Claude Desktop', + 'settings.mcpServer.clientCursor': 'কার্সার', + 'settings.mcpServer.clientCodex': 'কার্সার', + 'settings.mcpServer.clientZed': 'জেড', + 'settings.mcpServer.configFilePath': 'কনফিগার ফাইল', + 'settings.mcpServer.clientSelectorAriaLabel': 'MCP ক্লায়েন্ট নির্বাচক', + 'settings.appearance.menuDesc': 'লাইট, ডার্ক বা সিস্টেম থিমের সাথে মিল বেছে নিন', + 'settings.agentAccess.title': 'এজেন্ট OS ব্যবহার', + 'settings.agentAccess.menuDesc': + 'যেখানে এজেন্ট xqxqx ব্যবহার করে সেটি নিয়ন্ত্রণ করুন এবং শেল ব্যবহার করতে পারেন কি না ।', + 'settings.agentAccess.loadError': 'বৈশিষ্ট্য লোড করতে ব্যর্থ', + 'settings.agentAccess.saveError': 'বৈশিষ্ট্য সংরক্ষণ করতে ব্যর্থ', + 'settings.agentAccess.saved': 'সংরক্ষিত — আপনার পরবর্তী বার্তার ওপর প্রয়োগ করা হয়েছে ।', + 'settings.agentAccess.desktopOnly': + 'শুধুমাত্র ডেস্কটপের মধ্যে উপলব্ধ বৈশিষ্ট্যগুলি উপলব্ধ রয়েছে ।', + 'settings.agentAccess.loading': 'লোড করা হচ্ছে...', + 'settings.agentAccess.accessMode': 'অফলাইন মোড', + 'settings.agentAccess.tier.readonly.title': 'শুধুমাত্র পাঠযোগ্য', + 'settings.agentAccess.tier.readonly.desc': + 'ফাইল পড়ুন এবং শুধুমাত্র পাঠ করুন - কিন্তু কখনো লিখতে পারবেন না, সম্পাদনা, সম্পাদনা অথবা কোনো কিছু পরিবর্তন সাধন করতে পারবেন না ।', + 'settings.agentAccess.tier.supervised.title': 'সম্পাদনা করার পূর্বে জিজ্ঞাসা করা হবে', + 'settings.agentAccess.tier.supervised.desc': + 'অবাধভাবে নতুন ফাইল নির্মাণ করুন, কিন্তু কোনো উপস্থিত ফাইল সম্পাদনা করার পূর্বে আপনার অনুমোদন দাবি করা হবে, একটি কমান্ড চালানো অথবা নেটওয়ার্ক-এ প্রবেশ করান।', + 'settings.agentAccess.tier.full.title': 'সম্পূর্ণ ব্যবহার', + 'settings.agentAccess.tier.full.desc': + 'আপনার সম্পূর্ণ ব্যবহারকারী অ্যাকাউন্ট ব্যবহার করে কমান্ড সঞ্চালনার জন্য এটি xqxqxnx অনুমোদন করতে পারে, শুধুমাত্র পরিচয় এবং সিস্টেম স্টোর ছাড়া। দেশাঞ্চলীয় কমান্ড, নেটওয়ার্ক প্রবেশাধিকার এবং এখনও অনুমোদনের জন্য আবেদন করে।', + 'settings.agentAccess.defaultTag': '(ডিফল্ট)', + 'settings.agentAccess.fullWarning': + 'XKB সম্পূর্ণ ব্যবহার করে আপনার অ্যাকাউন্টের প্রবেশপথ চালু করা হয়েছে এবং আপনি স্যান্ডবক্স না। যখন আপনি xqxqxkx এই মেশিনের এজেন্টটিকে সক্রিয় করতে চান তখন এটি সক্রিয় করুন । অত্যন্ত সক্রিয় এবং সিস্টেম ডিরেক্টরি অবরুদ্ধ থাকবে, এবং ধ্বংসাত্মক হবে, নেটওয়ার্ক এবং অনুমোদন চেয়ে কাজ স্থাপন করবে।', + 'settings.agentAccess.confine.label': 'কর্মক্ষেত্র সক্রিয় করা হবে', + 'settings.agentAccess.confine.desc': + 'কর্মক্ষেত্রের মধ্যে উপস্থিত ফোল্ডারগুলির উপর নির্ভর করে (যেমন কোনো ফোল্ডার), যে কোনো ফোল্ডার নির্বাচন করা হবে। বন্ধ করা হলে, এটি আপনার ব্যবহারকারী যে কোন স্থানে পৌঁছাতে পারে - তবে একমাত্র নির্ধারিত পরিচয় এবং সিস্টেম ডিরেক্টরি ছাড়া।', + 'settings.agentAccess.requireTaskPlanApproval.label': 'কাজের পরিকল্পনা অনুমোদন প্রয়োজন', + 'settings.agentAccess.requireTaskPlanApproval.desc': + 'নির্ধারিত কর্মের পূর্বে একটি author-ed কর্মের সঞ্চালনার পূর্বে কর্ম স্থগিত করা হবে।', + 'settings.agentAccess.grantedFolders': 'ফোল্ডার', + 'settings.agentAccess.alwaysAllow': 'সর্বদা অপসারণযোগ্য সরঞ্জাম', + 'settings.agentAccess.alwaysAllowDesc': + 'জিজ্ঞাসা না করে আলাপনের ক্ষেত্রে "সর্বদা" প্রয়োগ করা হবে। পুনরায় লেখার জন্য একটি ফোল্ডার মুছে ফেলা হবে।', + 'settings.agentAccess.alwaysAllowNone': 'এখনো পর্যন্ত কোন যন্ত্র নেই।', + 'settings.agentAccess.grantedDesc': + 'এজেন্টটি পড়তে পারে এবং লিখতে পারে, কর্মক্ষেত্রের সাথে যুক্ত। অন্তর্ভুক্ত স্টোর (~/.s, ~/.gag, ~/.wasg, কীচাইন (etc, /etc, সিস্টেম) এবং সিস্টেম ডিরেক্টরি (etc, C BAR xqxkxxxx,...) সর্বদা বন্ধ করা হয়, এমনকি একটি ফোল্ডারও নিষিদ্ধ করা হয়।', + 'settings.agentAccess.noneGranted': 'কোন ফোল্ডার দেয়া হয়নি।', + 'settings.agentAccess.readWrite': 'পড়া + লেখা', + 'settings.agentAccess.readOnly': 'শুধুমাত্র পাঠযোগ্য', + 'settings.agentAccess.remove': 'মুছে ফেলুন', + 'settings.agentAccess.pathPlaceholder': 'ফোল্ডারের সম্পূর্ণ পাথ', + 'settings.agentAccess.accessLevelLabel': 'দক্ষতা স্তর', + 'settings.agentAccess.add': 'যোগ করুন', + 'settings.agentAccess.saving': 'ইনস্টল করা হয়েছে...', + 'settings.agentAccess.changesApply': 'পরবর্তী বার্তায় পরিবর্তন প্রয়োগ করা হবে।', + 'settings.appearance.title': 'উপস্থিতি', + 'settings.appearance.themeHeading': 'থিম', + 'settings.appearance.themeAria': 'থিম', + 'settings.appearance.modeLight': 'হালকা', + 'settings.appearance.modeLightDesc': 'উজ্জ্বল পৃষ্ঠ, অন্ধকার পাঠ্য।', + 'settings.appearance.modeDark': 'অন্ধকার', + 'settings.appearance.modeDarkDesc': 'আবছা পৃষ্ঠ, সন্ধ্যার পরে চোখের উপর সহজ।', + 'settings.appearance.modeSystem': 'ম্যাচ সিস্টেম', + 'settings.appearance.modeSystemDesc': 'আপনার OS চেহারা সেটিং অনুসরণ করুন.', + 'settings.appearance.helperText': + 'ডার্ক মোড পুরো অ্যাপকে স্যুইচ করে — চ্যাট, সেটিংস, প্যানেল — একটি আবছা প্যালেটে। "ম্যাচ সিস্টেম" আপনার OS চেহারা অনুসরণ করে এবং লাইভ আপডেট করে।', + 'settings.appearance.tabBarHeading': 'নীচের ট্যাব বার', + 'settings.appearance.tabBarAlwaysShowLabels': 'সর্বদা লেবেলগুলি দেখান', + 'settings.appearance.tabBarAlwaysShowLabelsDesc': + 'বন্ধ থাকা অবস্থায়, লেবেলগুলি শুধুমাত্র হোভারে বা সক্রিয় ট্যাবের জন্য প্রদর্শিত হয়৷', + 'settings.mascot.active': 'সক্রিয়', + 'settings.mascot.characterDesc': 'চরিত্রের বিবরণ', + 'settings.mascot.characterHeading': 'চরিত্রের শিরোনাম', + 'settings.mascot.customGifError': + 'একটি HTTPS .gif URL, লুপব্যাক HTTP .gif URL, file:// .gif URL, অথবা স্থানীয় .gif পাথ লিখুন।', + 'settings.mascot.customGifHeading': 'কাস্টম GIF অবতার', + 'settings.mascot.customGifLabel': 'কাস্টম GIF অবতার URL', + 'settings.mascot.customGifPlaceholder': 'https://example.com/avatar.gif', + 'settings.mascot.characterPreview': 'পূর্বরূপ', + 'settings.mascot.characterStates': 'স্টেটস', + 'settings.mascot.characterVisemes': 'তুষারপাত', + 'settings.mascot.colorAria': 'OpenHuman রঙ', + 'settings.mascot.colorDesc': 'রঙের বিবরণ', + 'settings.mascot.colorHeading': 'রঙের শিরোনাম', + 'settings.mascot.colorBlack': 'কালো', + 'settings.mascot.colorBurgundy': 'বারগান্ডি', + 'settings.mascot.colorCustom': 'স্বনির্ধারিত', + 'settings.mascot.colorNavy': 'নৌবাহিনী', + 'settings.mascot.primaryColor': 'প্রধান রং', + 'settings.mascot.secondaryColor': 'দ্বিতীয় রং', + 'settings.mascot.colorYellow': 'হলুদ', + 'settings.mascot.libraryUnavailable': 'OpenHuman লাইব্রেরি অনুপলব্ধ', + 'settings.mascot.title': 'OpenHuman', + 'settings.mascot.loadingLibrary': 'OpenHuman লাইব্রেরি লোড হচ্ছে…', + 'settings.mascot.loadDetailError': 'মাসকট লোড করা যায়নি৷', + 'settings.mascot.loadLibraryError': 'মাসকট লাইব্রেরি লোড করা যায়নি।', + 'settings.mascot.localDefault': 'লোকাল OpenHuman (ডিফল্ট)', + 'settings.mascot.menuTitle': 'মাসকট', + 'settings.mascot.menuDesc': 'অ্যাপ জুড়ে ব্যবহৃত মাসকটের রঙ বেছে নিন', + 'settings.mascot.noCharacters': 'কোনো OpenHuman ক্যারেক্টার এখনও উপলব্ধ নেই', + 'settings.mascot.noColorVariants': 'কোনো রঙের ভেরিয়েন্ট নেই', + 'settings.mascot.voice.current': 'বর্তমান', + 'settings.mascot.voice.customDesc': + 'ভয়েস আইডি খুঁজুন api.elevenlabs.io/v1/voices বা আপনার ElevenLabs ড্যাশবোর্ডে। শুধু আইডি সংরক্ষিত থাকে — আপনার API কী ব্যাকএন্ডে থাকে।', + 'settings.mascot.voice.customHeading': 'কাস্টম ভয়েস আইডি', + 'settings.mascot.voice.customOption': 'অন্যান্য (ভয়েস আইডি পেস্ট করুন)…', + 'settings.mascot.voice.customPlaceholder': 'যেমন 21m00Tcm4TlvDq8ikWAM', + 'settings.mascot.voice.desc': + 'স্পোকেন উত্তরের জন্য ম্যাসকট যে ElevenLabs ভয়েস ব্যবহার করে তা বেছে নিন। জেন্ডার অনুযায়ী ফিল্টার করুন, কিউরেটেড তালিকা থেকে বাছাই করুন, কাস্টম আইডি পেস্ট করুন, অথবা ইন্টারফেস ভাষার সাথে মেলে এমন ভয়েস অ্যাপটিকে বেছে নিতে দিন।', + 'settings.mascot.voice.genderFemale': 'মহিলা', + 'settings.mascot.voice.genderHeading': 'ভয়েস জেন্ডার', + 'settings.mascot.voice.genderMale': 'পুরুষ', + 'settings.mascot.voice.heading': 'ভয়েস', + 'settings.mascot.voice.preset': 'ভয়েস প্রিসেট', + 'settings.mascot.voice.presetHeading': 'ভয়েস প্রিসেট', + 'settings.mascot.voice.preview': 'ভয়েস প্রিভিউ', + 'settings.mascot.voice.previewError': 'ভয়েস প্রিভিউ ব্যর্থ হয়েছে', + 'settings.mascot.voice.previewText': 'হাই, আমি তোমার সহকারী। এটি একটি ভয়েস প্রাকদর্শন.', + 'settings.mascot.voice.previewing': 'প্রিভিউ চলছে…', + 'settings.mascot.voice.reset': 'ডিফল্টে রিসেট করুন', + 'settings.mascot.voice.useLocaleDefault': 'অ্যাপের ভাষার সাথে মিলান', + 'settings.mascot.voice.useLocaleDefaultDesc': + 'বর্তমান ইন্টারফেস ভাষার জন্য স্বয়ংক্রিয়ভাবে একটি ভয়েস বেছে নিন।', + 'settings.persona.title': 'ব্রেসট', + 'settings.persona.menuTitle': 'ব্রেসট', + 'settings.persona.menuDesc': + 'নাম, ব্যক্তিত্ব, অবতার এবং কণ্ঠস্বর — আপনার সহকারীকে এক প্রতীক হিসেবে', + 'settings.persona.identityHeading': 'পরিচয়', + 'settings.persona.identityDesc': + 'আপনার সহায়ক ব্যবস্থার জন্য একটি প্রদর্শন ও বিবরণ। অ্যাপ্লিকেশনে প্রদর্শিত; সহকারী কারণ পরিবর্তন হয় না।', + 'settings.persona.displayNameLabel': 'প্রদর্শনের নাম', + 'settings.persona.displayNamePlaceholder': 'xqxqx সকাল', + 'settings.persona.descriptionLabel': 'বিবরণ', + 'settings.persona.descriptionPlaceholder': 'এক্স.qxqx. শান্ত হও, আমার টিমের কনফিউজিং সহকারী।', + 'settings.persona.soul.heading': 'ব্যক্তিগত ( xxqxqx)', + 'settings.persona.soul.desc': + '( হিতো. আপনার কর্মক্ষেত্রের ওপর সংরক্ষিত বৈশিষ্ট্য সংরক্ষণ করে পরবর্তী উত্তর সম্পাদন করা হবে।', + 'settings.persona.soul.editorLabel': "xqxqx ছবি. mdn' র", + 'settings.persona.soul.reset': 'ডিফল্ট মান পুনরায় স্থাপন করুন', + 'settings.persona.soul.usingDefault': 'দ্বারা বিভাজিত ডিফল্ট', + 'settings.persona.soul.loadError': 'xqxqx লোড করতে ব্যর্থ', + 'settings.persona.soul.saveError': 'ছবি সংরক্ষণ করতে ব্যর্থx% 1', + 'settings.persona.soul.resetError': 'xqxqx সার্ভার আরম্ভ করতে ব্যর্থ', + 'settings.persona.appearanceHeading': 'অবতার & ভয়েস', + 'settings.persona.appearanceDesc': + 'Mascot রঙের রং, স্বনির্ধারিত xxqxqx অ্যাভাটার, এবং Scotox বৈশিষ্ট্যের মধ্য থেকে ভয়েস কনফিগার করা হয়েছে।', + 'settings.persona.openMascotSettings': 'মাস অনুযায়ী প্রদর্শন ব্যবস্থা আরম্ভ করা হবে', + 'settings.memoryWindow.balanced.badge': 'প্রস্তাবিত', + 'settings.memoryWindow.balanced.hint': + 'যৌক্তিক ডিফল্ট — প্রতিটি রানে অতিরিক্ত টোকেন না পুড়িয়ে ভাল ধারাবাহিকতা।', + 'settings.memoryWindow.balanced.label': 'সুষম', + 'settings.memoryWindow.description': + 'প্রতিটি নতুন এজেন্ট রানে OpenHuman কতটা মনে রাখা প্রসঙ্গ ইনজেক্ট করে। বড় উইন্ডো অতীত কথোপকথন সম্পর্কে বেশি সচেতন মনে হয় কিন্তু প্রতিটি রানে বেশি টোকেন ব্যবহার করে — এবং বেশি খরচ হয়।', + 'settings.memoryWindow.extended.badge': 'আরও প্রসঙ্গ', + 'settings.memoryWindow.extended.hint': + 'প্রতিটি রানে আরও দীর্ঘমেয়াদী মেমরি ইনজেক্ট করা হয়। প্রতি টার্নে উচ্চ টোকেন খরচ।', + 'settings.memoryWindow.extended.label': 'বর্ধিত', + 'settings.memoryWindow.maximum.badge': 'সর্বোচ্চ খরচ', + 'settings.memoryWindow.maximum.hint': + 'সবচেয়ে বড় নিরাপদ উইন্ডো। সেরা ধারাবাহিকতা, প্রতিটি রানে উল্লেখযোগ্যভাবে বেশি টোকেন বিল।', + 'settings.memoryWindow.maximum.label': 'সর্বোচ্চ', + 'settings.memoryWindow.minimal.badge': 'সবচেয়ে সস্তা', + 'settings.memoryWindow.minimal.hint': + 'সবচেয়ে ছোট মেমরি উইন্ডো। সবচেয়ে সস্তা, দ্রুততম, রানগুলির মধ্যে সবচেয়ে কম ধারাবাহিকতা।', + 'settings.memoryWindow.minimal.label': 'ন্যূনতম', + 'settings.memoryWindow.title': 'দীর্ঘমেয়াদী মেমোরি উইন্ডো', + 'settings.modelHealth.title': 'মডেল স্বাস্থ্য', + 'settings.modelHealth.desc': 'প্রতি মডেল, কল্পনার গুণমান, এবং দাম তুলনার ক্ষেত্রে', + 'settings.modelHealth.allStatuses': 'সমস্ত অবস্থা', + 'settings.modelHealth.models': 'মডেল', + 'settings.modelHealth.loading': 'তথ্যের তথ্য লোড করা হচ্ছে...', + 'settings.modelHealth.empty': 'কোনো মডেল নিবন্ধিত হয়নি', + 'settings.modelHealth.col.model': 'মডেল', + 'settings.modelHealth.col.quality': 'গুণমান', + 'settings.modelHealth.col.halluc': 'হ্যালো. হার', + 'settings.modelHealth.col.cost': 'সময়সীমা', + 'settings.modelHealth.col.agents': 'এজেন্ট', + 'settings.modelHealth.col.status': 'অবস্থা', + 'settings.modelHealth.badge.keep': 'রাখো', + 'settings.modelHealth.badge.replace': 'প্রতিস্থাপন', + 'settings.modelHealth.badge.staging': 'িং পরীক্ষা', + 'settings.modelHealth.badge.vision': 'শুধু দৃষ্টি', + 'settings.modelHealth.swap': 'রক্ত?', + 'settings.modelHealth.modal.title': 'মডেল প্রতিস্থাপন?', + 'settings.modelHealth.modal.hallucRate': 'হার', + 'settings.modelHealth.modal.cancel': 'বাতিল', + 'settings.modelHealth.modal.apply': '& বদলাও', + 'settings.modelHealth.tag.cheaper': 'CHEAPER', + 'settings.modelHealth.tag.better': 'BETTER', + 'settings.screenIntel.permissions.accessibility': 'অ্যাক্সেসিবিলিটি', + 'settings.screenIntel.permissions.grantHint': 'গ্রান্ট হিন্ট', + 'settings.screenIntel.permissions.inputMonitoring': 'ইনপুট মনিটরিং', + 'settings.screenIntel.permissions.macosAppliesPrivacy': 'macOS গোপনীয়তা প্রয়োগ করে', + 'settings.screenIntel.permissions.openInputMonitoring': 'অনুরোধ করা হচ্ছে…', + 'settings.screenIntel.permissions.refreshStatus': 'রিফ্রেশ হচ্ছে…', + 'settings.screenIntel.permissions.refreshing': 'রিফ্রেশ হচ্ছে…', + 'settings.screenIntel.permissions.requestAccessibility': 'অনুরোধ করা হচ্ছে…', + 'settings.screenIntel.permissions.requestScreenRecording': 'অনুরোধ করা হচ্ছে…', + 'settings.screenIntel.permissions.requesting': 'অনুরোধ করা হচ্ছে…', + 'settings.screenIntel.permissions.restartRefresh': 'কোর রিস্টার্ট হচ্ছে…', + 'settings.screenIntel.permissions.restartingCore': 'কোর রিস্টার্ট হচ্ছে…', + 'settings.screenIntel.permissions.screenRecording': 'স্ক্রিন রেকর্ডিং', + 'settings.screenIntel.permissions.title': 'অনুমতি', + 'skills.card.moreActions': 'আরও কাজ', + 'skills.channelIcon.discord': 'Discord', + 'skills.channelIcon.imessage': 'iMessage', + 'skills.channelIcon.telegram': 'Telegram', + 'skills.channelIcon.web': 'ওয়েব', + 'skills.channelIcon.yuanbao': 'Yuanbao', + 'skills.composio.poweredBy': 'Composio দ্বারা চালিত', + 'skills.composio.staleStatusTitle': 'সংযোগগুলি পুরানো অবস্থা দেখাচ্ছে', + 'skills.create.allowedTools': 'অনুমোদিত টুল', + 'skills.create.allowedToolsHelp': 'হিসাবে SKILL.md ফ্রন্টম্যাটারে রেন্ডার করা হয়েছে', + 'skills.create.allowedToolsPlaceholder': 'node_exec, fetch', + 'skills.create.author': 'লেখক', + 'skills.create.authorPlaceholder': 'আপনার নাম', + 'skills.create.commaSeparated': '(কমা দিয়ে আলাদা)', + 'skills.create.createBtn': 'স্কিল তৈরি করুন', + 'skills.create.createError': 'স্কিল তৈরি করা যায়নি', + 'skills.create.creating': 'তৈরি হচ্ছে…', + 'skills.create.description': 'বিবরণ', + 'skills.create.descriptionPlaceholder': 'এই স্কিল কী করে?', + 'skills.create.optional': '(ঐচ্ছিক)', + 'skills.create.inputs.heading': 'Inputs', + 'skills.create.inputs.help': + 'স্কিলের প্রয়োজনীয় প্যারামিটার ঘোষণা করুন। Skills Runner রানটাইমে এগুলির জন্য একটি ফর্ম রেন্ডার করবে।', + 'skills.create.inputs.add': 'ইনপুট যোগ করুন', + 'skills.create.inputs.row.name': 'ইনপুটের নাম', + 'skills.create.inputs.row.namePlaceholder': 'যেমন repo', + 'skills.create.inputs.row.nameError': + 'শুধুমাত্র অক্ষর, সংখ্যা, আন্ডারস্কোর এবং ড্যাশ; অক্ষর দিয়ে শুরু হতে হবে।', + 'skills.create.inputs.row.description': 'ইনপুট বিবরণ', + 'skills.create.inputs.row.descriptionPlaceholder': 'এই ক্ষেত্রে কী যাবে?', + 'skills.create.inputs.row.type': 'Type', + 'skills.create.inputs.row.required': 'Required', + 'skills.create.inputs.row.remove': 'ইনপুট সরান', + 'skills.create.inputs.type.string': 'Text', + 'skills.create.inputs.type.integer': 'Number', + 'skills.create.inputs.type.boolean': 'হ্যাঁ / না', + 'skills.create.license': 'লাইসেন্স', + 'skills.create.licensePlaceholder': 'MIT', + 'skills.create.name': 'নাম', + 'skills.create.namePlaceholder': 'যেমন Trade Journal', + 'skills.create.scope': 'স্কোপ', + 'skills.create.scopeProjectHint': '/.openhuman/skills/', + 'skills.create.scopeUserHint': + '~/.openhuman/skills//SKILL.md-এ লেখা — সব ওয়ার্কস্পেসে পাওয়া যায়।', + 'skills.create.slugLabel': 'স্লাগ লেবেল', + 'skills.create.subtitle': 'SKILL.md', + 'skills.create.tags': 'ট্যাগ', + 'skills.create.tagsPlaceholder': 'ট্রেডিং, গবেষণা', + 'skills.create.title': 'নতুন স্কিল', + 'skills.detail.allowedTools': 'অনুমোদিত টুলস', + 'skills.detail.author': 'লেখক', + 'skills.detail.bundledResources': 'বান্ডেলড রিসোর্স', + 'skills.detail.closeAriaLabel': 'স্কিলের বিবরণ বন্ধ করুন', + 'skills.detail.location': 'লোকেশন', + 'skills.detail.noBundledResources': 'কোনো বান্ডেলড রিসোর্স নেই।', + 'skills.detail.tags': 'ট্যাগ', + 'skills.detail.warnings': 'সতর্কতা', + 'skills.install.errors.alreadyInstalledHint': + 'এই স্লাগের সাথে একটি দক্ষতা ইতিমধ্যেই কর্মক্ষেত্রে বিদ্যমান। প্রথমে এটি সরান বা সামনের বস্তু `metadata.id` / `name` পরিবর্তন করুন।', + 'skills.install.errors.alreadyInstalledTitle': 'দক্ষতা ইতিমধ্যেই ইনস্টল করা হয়েছে', + 'skills.install.errors.fetchFailedHint': + 'অনুরোধটি সফলভাবে সম্পূর্ণ হয়নি৷ একটি পৌঁছানোর পাবলিক ফাইলে URL পয়েন্টগুলি পরীক্ষা করুন, এবং হোস্ট একটি 2xx প্রতিক্রিয়া ফিরিয়ে দিয়েছে৷', + 'skills.install.errors.fetchFailedTitle': 'আনা ব্যর্থ হয়েছে', + 'skills.install.errors.fetchTimedOutHint': + 'দূরবর্তী হোস্ট সময়মতো সাড়া দেয়নি৷ আবার চেষ্টা করুন বা সময়সীমা বাড়ান (1-600 সেকেন্ড)।', + 'skills.install.errors.fetchTimedOutTitle': 'আনার সময় শেষ হয়েছে', + 'skills.install.errors.fetchTooLargeHint': + 'SKILL.md অবশ্যই 1 MiB এর নিচে হতে হবে। বান্ডিল করা সম্পদগুলিকে ইনলাইন করার পরিবর্তে `রেফারেন্স/` বা `স্ক্রিপ্ট/` ফাইলে ভাগ করুন।', + 'skills.install.errors.fetchTooLargeTitle': 'SKILL.md খুব বড়', + 'skills.install.errors.genericHint': + 'ব্যাকএন্ড একটি ত্রুটি ফিরিয়ে দিয়েছে। কাঁচা বার্তা নীচে দেখানো হয়.', + 'skills.install.errors.genericTitle': 'দক্ষতা ইনস্টল করা যায়নি', + 'skills.install.errors.invalidSkillHint': + 'ফ্রন্টম্যাটারটি খালি নয় `নাম` এবং `বর্ণনা` ক্ষেত্র সহ বৈধ YAML হতে হবে, `---` দ্বারা সমাপ্ত।', + 'skills.install.errors.invalidSkillTitle': 'SKILL.md পার্স করেনি', + 'skills.install.errors.invalidUrlHint': + 'শুধুমাত্র সর্বজনীন HTTPS URLগুলি অনুমোদিত। ব্যক্তিগত, লুপব্যাক এবং মেটাডেটা হোস্ট ব্লক করা হয়েছে।', + 'skills.install.errors.invalidUrlTitle': 'URL প্রত্যাখ্যান', + 'skills.install.errors.unsupportedUrlHint': + 'শুধুমাত্র সরাসরি `.md` লিঙ্কগুলি কাজ করে৷ GitHub-এর জন্য, একটি ফাইলের সাথে লিঙ্ক করুন (github.com/owner/repo/blob/.../SKILL.md) - গাছ এবং রেপো রুট ইনস্টল করা নেই।', + 'skills.install.errors.unsupportedUrlTitle': 'URL ফর্ম সমর্থিত নয়', + 'skills.install.errors.writeFailedHint': + 'ওয়ার্কস্পেস দক্ষতা ডিরেক্টরি লেখার যোগ্য ছিল না। `/.openhuman/skills/`-এর জন্য ফাইল সিস্টেমের অনুমতি পরীক্ষা করুন।', + 'skills.install.errors.writeFailedTitle': 'SKILL.md লেখা যায়নি', + 'skills.install.fetchLog': 'ফেচ লগ', + 'skills.install.fetchingPrefix': 'আনা হচ্ছে', + 'skills.install.fetchingSuffix': 'এটি আপনার কনফিগার করা সময়সীমা পর্যন্ত নিতে পারে।', + 'skills.install.installBtn': 'ইনস্টল হচ্ছে…', + 'skills.install.installComplete': 'ইনস্টল সম্পন্ন', + 'skills.install.installing': 'ইনস্টল হচ্ছে…', + 'skills.install.parseWarnings': 'পার্স সতর্কতা', + 'skills.install.rawError': 'রা ত্রুটি', + 'skills.install.subtitleMiddle': 'HTTPS এর উপরে এবং এটিকে', + 'skills.install.subtitlePrefix': 'এর অধীনে ইনস্টল করে একটি একক', + 'skills.install.subtitleSuffix': + 'HTTPS শুধুমাত্র আনয়ন করে; ব্যক্তিগত এবং লুপব্যাক হোস্ট অবরুদ্ধ।', + 'skills.install.successDiscovered': 'আবিষ্কৃত {count} নতুন দক্ষতা(গুলি)।', + 'skills.install.successNoNewIds': + 'দক্ষতা ইনস্টল করা হয়েছে, কিন্তু কোনো নতুন দক্ষতা আইডি উপস্থিত হয়নি - ক্যাটালগে ইতিমধ্যেই একই স্লাগ সহ একটি দক্ষতা থাকতে পারে।', + 'skills.install.timeoutHint': '(সেকেন্ড, ঐচ্ছিক)', + 'skills.install.timeoutHelp': + 'ডিফল্ট 60 সেকেন্ড। 1-600 এর বাইরের মানগুলি সার্ভার-সাইডে ক্ল্যাম্প করা হয়৷', + 'skills.install.timeoutInvalid': '1 এবং 600 এর মধ্যে একটি পূর্ণসংখ্যা হতে হবে।', + 'skills.install.timeoutLabel': 'টাইমআউট লেবেল', + 'skills.install.timeoutPlaceholder': '60', + 'skills.install.title': 'URL থেকে স্কিল ইনস্টল করুন', + 'skills.install.urlHelpMiddle': 'ফাইল', + 'skills.install.urlHelpPrefix': 'একটি সরাসরি লিঙ্ক', + 'skills.install.urlHelpSuffix': 'URL এর স্বয়ংক্রিয়-পুনঃলিখন', + 'skills.install.urlInvalidPrefix': 'URL অবশ্যই একটি সুগঠিত', + 'skills.install.urlInvalidSuffix': 'লিঙ্ক হতে হবে।', + 'skills.install.urlLabel': 'স্কিল URL', + 'skills.install.urlPlaceholder': 'https://raw.githubusercontent.com/owner/repo/main/SKILL.md', + 'skills.meetingBots.bannerDesc': 'ব্যানার বিবরণ', + 'skills.meetingBots.bannerTitle': 'ব্যানার শিরোনাম', + 'skills.meetingBots.busyTitle': 'OpenHuman ব্যস্ত', + 'skills.meetingBots.comingSoon': 'শীঘ্রই আসছে', + 'skills.meetingBots.couldNotStartTitle': 'OpenHuman শুরু করা যায়নি', + 'skills.meetingBots.displayName': 'প্রদর্শন নাম', + 'skills.meetingBots.failedToStart': 'OpenHuman শুরু করতে ব্যর্থ।', + 'skills.meetingBots.joiningMessage': 'কয়েক সেকেন্ডের মধ্যে অংশগ্রহণকারী হিসেবে দেখা যাবে।', + 'skills.meetingBots.joiningTitle': 'OpenHuman মিটিংয়ে যোগ দিচ্ছে', + 'skills.meetingBots.meetingLink': 'মিটিং লিংক', + 'skills.meetingBots.modalAriaLabel': 'OpenHuman-কে একটি মিটিংয়ে পাঠান', + 'skills.meetingBots.modalDesc': 'মোডাল বিবরণ', + 'skills.meetingBots.modalTitle': 'OpenHuman-কে একটি মিটিংয়ে পাঠান', + 'skills.meetingBots.newBadge': 'নতুন ব্যাজ', + 'skills.meetingBots.platformComingSoon': '{label} সমর্থন শীঘ্রই আসছে।', + 'skills.meetingBots.platformHints.gmeet': 'meet.google.com/abc-defg-hij', + 'skills.meetingBots.platformHints.teams': 'teams.microsoft.com/...', + 'skills.meetingBots.platformHints.zoom': 'zoom.us/j/...', + 'skills.meetingBots.platforms.gmeet': 'Google Meet', + 'skills.meetingBots.platforms.teams': 'মাইক্রোসফট টিম', + 'skills.meetingBots.platforms.zoom': 'জুম', + 'skills.meetingBots.sendTo': 'পাঠান', + 'skills.meetingBots.soonSuffix': 'শীঘ্রই', + 'skills.meetingBots.starting': 'শুরু হচ্ছে…', + 'skills.resource.preview.closeAriaLabel': 'প্রিভিউ বন্ধ করুন', + 'skills.resource.preview.failed': 'প্রিভিউ ব্যর্থ', + 'skills.resource.preview.loading': 'প্রিভিউ লোড হচ্ছে…', + 'skills.resource.tree.empty': 'কোনো বান্ডেলড রিসোর্স নেই।', + 'skills.search.placeholder': 'প্লেসহোল্ডার', + 'skills.setup.autocomplete.acceptKey': 'অ্যাক্সেপ্ট কী', + 'skills.setup.autocomplete.activeDesc': 'সক্রিয় বিবরণ', + 'skills.setup.autocomplete.activeTitle': 'অটো-কমপ্লিট সক্রিয়', + 'skills.setup.autocomplete.customizeSettings': 'সেটিংস কাস্টমাইজ করুন', + 'skills.setup.autocomplete.debounce': 'ডিবাউন্স', + 'skills.setup.autocomplete.description': 'বিবরণ', + 'skills.setup.autocomplete.enableBtn': 'সক্রিয় হচ্ছে...', + 'skills.setup.autocomplete.enableError': 'অটোকমপ্লিট সক্রিয় করতে ব্যর্থ', + 'skills.setup.autocomplete.enabling': 'সক্রিয় হচ্ছে...', + 'skills.setup.autocomplete.notSupported': 'সমর্থিত নয়', + 'skills.setup.autocomplete.stepEnable': 'ইনলাইন কমপ্লিশন সক্রিয় করুন', + 'skills.setup.autocomplete.stepSuccess': 'যেতে প্রস্তুত', + 'skills.setup.autocomplete.stylePreset': 'স্টাইল প্রিসেট', + 'skills.setup.autocomplete.stylePresetValue': 'ব্যালান্সড (পরে কনফিগারযোগ্য)', + 'skills.setup.autocomplete.title': 'টেক্সট অটো-কমপ্লিট', + 'skills.setup.screenIntel.activeDesc': 'সক্রিয় বিবরণ', + 'skills.setup.screenIntel.activeTitle': 'স্ক্রিন ইন্টেলিজেন্স সক্রিয়', + 'skills.setup.screenIntel.advancedSettings': 'অ্যাডভান্সড সেটিংস', + 'skills.setup.screenIntel.allGranted': 'সব অনুমতি দেওয়া হয়েছে', + 'skills.setup.screenIntel.captureMode': 'ক্যাপচার মোড', + 'skills.setup.screenIntel.captureModeValue': 'সব উইন্ডো (পরে কনফিগারযোগ্য)', + 'skills.setup.screenIntel.deniedHint': + 'সিস্টেম সেটিংসে অনুমতি দেওয়ার পর, পরিবর্তন নিতে নিচে ক্লিক করে রিস্টার্ট করুন।', + 'skills.setup.screenIntel.enableBtn': 'সক্রিয় হচ্ছে...', + 'skills.setup.screenIntel.enableDesc': 'আপনার স্ক্রিনে এবং এজেন্টে দরকারী কন্টেক্সট ফিড করুন', + 'skills.setup.screenIntel.enableError': 'স্ক্রিন ইন্টেলিজেন্স সক্রিয় করতে ব্যর্থ', + 'skills.setup.screenIntel.enabling': 'সক্রিয় হচ্ছে...', + 'skills.setup.screenIntel.grant': 'খোলা হচ্ছে...', + 'skills.setup.screenIntel.granted': 'দেওয়া হয়েছে', + 'skills.setup.screenIntel.macosOnly': 'শুধু macOS', + 'skills.setup.screenIntel.opening': 'খোলা হচ্ছে...', + 'skills.setup.screenIntel.panicHotkey': 'প্যানিক হটকি', + 'skills.setup.screenIntel.permAccessibility': 'অ্যাক্সেসিবিলিটি', + 'skills.setup.screenIntel.permInputMonitoring': 'ইনপুট মনিটরিং', + 'skills.setup.screenIntel.permScreenRecording': 'স্ক্রিন রেকর্ডিং', + 'skills.setup.screenIntel.permissionsDesc': 'অনুমতির বিবরণ', + 'skills.setup.screenIntel.permissionPathLabel': 'macOS গোপনীয়তা প্রযোজ্য:', + 'skills.setup.screenIntel.refreshStatus': 'স্ট্যাটাস রিফ্রেশ করুন', + 'skills.setup.screenIntel.restartRefresh': 'রিস্টার্ট হচ্ছে...', + 'skills.setup.screenIntel.restarting': 'রিস্টার্ট হচ্ছে...', + 'skills.setup.screenIntel.stepEnable': 'স্কিল সক্রিয় করুন', + 'skills.setup.screenIntel.stepPermissions': 'অনুমতি দিন', + 'skills.setup.screenIntel.stepSuccess': 'যেতে প্রস্তুত', + 'skills.setup.screenIntel.title': 'স্ক্রিন ইন্টেলিজেন্স', + 'skills.setup.screenIntel.visionModel': 'ভিশন মডেল', + 'skills.setup.voice.activation': 'অ্যাক্টিভেশন', + 'skills.setup.voice.activeDescPrefix': 'Fn', + 'skills.setup.voice.activeDescSuffix': 'Fn', + 'skills.setup.voice.activeTitle': 'ভয়েস ইন্টেলিজেন্স সক্রিয়', + 'skills.setup.voice.customizeSettings': 'সেটিংস কাস্টমাইজ করুন', + 'skills.setup.voice.downloadSttBtn': 'STT ডাউনলোড বাটন', + 'skills.setup.voice.enableDesc': 'সক্রিয় বিবরণ', + 'skills.setup.voice.hotkey': 'হটকি', + 'skills.setup.voice.startBtn': 'শুরু হচ্ছে...', + 'skills.setup.voice.startError': 'ভয়েস সার্ভার শুরু করতে ব্যর্থ', + 'skills.setup.voice.starting': 'শুরু হচ্ছে...', + 'skills.setup.voice.stepEnable': 'ভয়েস সার্ভার শুরু করুন', + 'skills.setup.voice.stepSetup': 'মডেল ডাউনলোড প্রয়োজন', + 'skills.setup.voice.stepSuccess': 'যেতে প্রস্তুত', + 'skills.setup.voice.sttNotReady': 'স্পিচ-টু-টেক্সট মডেল প্রস্তুত নয়', + 'skills.setup.voice.sttNotReadyDesc': + 'ভয়েস ইন্টেলিজেন্সের জন্য ট্রান্সক্রিপশনের জন্য একটি লোকাল Whisper মডেল প্রয়োজন। লোকাল মডেল সেটিংস থেকে ডাউনলোড করুন।', + 'skills.setup.voice.sttReady': 'স্পিচ-টু-টেক্সট মডেল প্রস্তুত', + 'skills.setup.voice.sttReturnHint': 'STT রিটার্ন হিন্ট', + 'skills.setup.voice.title': 'ভয়েস ইন্টেলিজেন্স', + 'skills.uninstall.couldNotUninstall': 'আনইনস্টল করা যায়নি', + 'skills.uninstall.description': + 'এটি স্থায়ীভাবে স্কিল ডিরেক্টরি এবং এর সমস্ত বান্ডল রিসোর্স মুছে ফেলে। এজেন্ট পরবর্তী টার্নে এটি দেখা বন্ধ করবে।', + 'skills.uninstall.title': 'আনইনস্টল', + 'skills.uninstall.uninstallBtn': 'আনইনস্টল', + 'skills.uninstall.uninstalling': 'আনইনস্টল হচ্ছে…', + 'upsell.global.limitMessage': 'চালিয়ে যেতে আপনার প্ল্যান আপগ্রেড করুন বা ক্রেডিট টপ আপ করুন', + 'upsell.global.limitTitle': 'আপনি', + 'upsell.global.nearLimitMessage': + 'আপনি আপনার ব্যবহার সীমার {pct}% ব্যবহার করেছেন। উচ্চ সীমার জন্য আপগ্রেড করুন।', + 'upsell.global.nearLimitTitle': 'ব্যবহার সীমার কাছাকাছি', + 'upsell.usageLimit.bodyBudget': + 'আপনি সাপ্তাহিক সীমায় পৌঁছেছেন।{reset} সীমা এড়াতে আপনার প্ল্যান আপগ্রেড করুন বা ক্রেডিট টপ আপ করুন।', + 'upsell.usageLimit.bodyRate': + 'আপনি ১০-ঘণ্টার ইনফারেন্স রেট সীমায় পৌঁছেছেন।{reset} উচ্চতর সীমার জন্য আপগ্রেড করুন।', + 'upsell.usageLimit.heading': 'ব্যবহার সীমা পৌঁছেছে', + 'upsell.usageLimit.notNow': 'এখন না', + 'upsell.usageLimit.perWindow': '{amount}', + 'upsell.usageLimit.planIncludes': '{plan}', + 'upsell.usageLimit.resetsIn': 'এটি {time} রিসেট হবে।', + 'upsell.usageLimit.upgradePlan': 'প্ল্যান আপগ্রেড করুন', + 'upsell.usageLimit.weeklyInference': '{amount}', + 'walkthrough.tooltip.letsGo': 'চলুন শুরু করি!', + 'walkthrough.tooltip.next': 'পরবর্তী →', + 'walkthrough.tooltip.skip': 'ট্যুর এড়িয়ে যান', + 'walkthrough.tooltip.stepCounter': '{total}-এর মধ্যে {n}', + 'webhooks.activity.empty': 'খালি', + 'webhooks.activity.title': 'সাম্প্রতিক কার্যক্রম', + 'webhooks.composioHistory.empty': 'খালি', + 'webhooks.composioHistory.metadataId': 'মেটাডেটা ID', + 'webhooks.composioHistory.metadataUuid': 'মেটাডেটা UUID', + 'webhooks.composioHistory.payload': 'পেলোড', + 'webhooks.composioHistory.title': 'ComposeIO ট্রিগার ইতিহাস', + 'webhooks.tunnels.active': 'সক্রিয়', + 'webhooks.tunnels.createFailed': 'টানেল তৈরি করতে ব্যর্থ', + 'webhooks.tunnels.creating': 'তৈরি হচ্ছে...', + 'webhooks.tunnels.deleteFailed': 'টানেল মুছতে ব্যর্থ', + 'webhooks.tunnels.descriptionPlaceholder': 'বিবরণ (ঐচ্ছিক)', + 'webhooks.tunnels.echo': 'ইকো', + 'webhooks.tunnels.empty': 'খালি', + 'webhooks.tunnels.enableEcho': 'ইকো চালু করুন', + 'webhooks.tunnels.inactive': 'নিষ্ক্রিয়', + 'webhooks.tunnels.namePlaceholder': 'টানেলের নাম (যেমন telegram-bot)', + 'webhooks.tunnels.newTunnel': 'নতুন টানেল', + 'webhooks.tunnels.removeEcho': 'ইকো সরান', + 'webhooks.tunnels.title': 'Webhook টানেল', + 'webhooks.tunnels.toggleFailed': 'ইকো টগল করতে ব্যর্থ', + 'composio.directModeRequiresKey': 'সংরক্ষণ ব্যর্থ। Direct মোডের জন্য একটি API key প্রয়োজন।', + 'composio.integrationSlugsHelp': 'কমা-বিচ্ছিন্ন ইন্টিগ্রেশন স্লাগ, যেমন', + 'composio.integrationSlugsExample': 'gmail, slack', + 'composio.integrationSlugsCaseInsensitive': 'কেস-সংবেদনশীল।', + 'composio.integrationSlugsPlaceholder': 'gmail, slack, ...', + 'composio.notYetRouted': 'এখনও রুট করা হয়নি', + 'composio.triggers.loading': 'লোড হচ্ছে…', + 'conversations.taskKanban.todo': 'করণীয়', + 'chat.addReaction': 'প্রতিক্রিয়া যোগ করুন', + 'chat.agentProfile.create': 'এজেন্ট প্রোফাইল তৈরি করুন', + 'chat.agentProfile.createFailed': 'এজেন্ট প্রোফাইল তৈরি করা যায়নি।', + 'chat.agentProfile.customDescription': 'কাস্টম এজেন্ট প্রোফাইল', + 'chat.agentProfile.defaultAgentLabel': 'অর্কেস্ট্রেটর', + 'chat.agentProfile.exists': 'এজেন্ট প্রোফাইল "{name}" ইতিমধ্যেই বিদ্যমান৷', + 'chat.agentProfile.label': 'এজেন্ট প্রোফাইল', + 'chat.agentProfile.namePlaceholder': 'প্রোফাইল নাম', + 'chat.agentProfile.promptStylePlaceholder': 'প্রম্পট স্টাইল', + 'chat.agentProfile.allowedToolsPlaceholder': 'অনুমোদিত টুল', + 'chat.backToThread': '{title} এ ফিরে যান', + 'chat.parentThread': 'মূল থ্রেড', + 'chat.removeReaction': '{emoji}', + 'settings.composio.loading': 'লোড হচ্ছে…', + 'settings.mascot.noCharactersAvailable': 'কোনো OpenHuman ক্যারেক্টার এখনও উপলব্ধ নেই', + 'skills.uninstall.confirmTitle': '{name} আনইনস্টল করবেন?', + 'conversations.taskKanban.blocked': 'ব্লকড', + 'conversations.taskKanban.done': 'সম্পন্ন', + 'conversations.taskKanban.pending': 'অসমাপ্ত', + 'conversations.taskKanban.working': 'কাজের', + 'conversations.taskKanban.awaitingApproval': 'অপেক্ষা করা', + 'conversations.taskKanban.ready': 'প্রস্তুত', + 'conversations.taskKanban.rejected': 'প্রত্যাখ্যান করা হয়েছে', + 'conversations.taskKanban.inProgress': 'চলমান', + 'intelligence.memoryChunk.detail.copiedHint': 'কপি হয়েছে', + 'settings.composio.notYetRouted': 'এখনও রুট করা হয়নি', + 'settings.localModel.download.manageExternal': 'আপনার বাহ্যিক রানটাইমে এই মডেলটি পরিচালনা করুন।', + 'settings.localModel.status.manageOllamaExternal': + 'OpenHuman-এর বাইরে Ollama প্রক্রিয়া এবং মডেল পুল পরিচালনা করুন, তারপর ডায়াগনস্টিক পুনরায় চালান।', + 'settings.localModel.status.ollamaDocs': 'Ollama ডকস', + 'settings.localModel.status.thenRetry': + 'সেটআপ নির্দেশনার জন্য, তারপর আপনার রানটাইম পৌঁছানো গেলে পুনরায় চেষ্টা করুন।', + 'devOptions.menuAi': 'AI কনফিগারেশন', + 'devOptions.menuAiDesc': 'ক্লাউড প্রদানকারী, স্থানীয় Ollama মডেল, এবং প্রতি-ওয়ার্কলোড রাউটিং', + 'devOptions.menuScreenAware': 'স্ক্রীন সচেতনতা', + 'devOptions.menuScreenAwareDesc': 'স্ক্রীন ক্যাপচার অনুমতি এবং সেশন নিয়ন্ত্রণ, নিরীক্ষণ নীতি', + 'devOptions.menuMessaging': 'মেসেজিং চ্যানেলগুলি', + 'devOptions.menuMessagingDesc': + 'কনফিগার করুন Telegram/Discord প্রমাণীকরণ মোড এবং ডিফল্ট চ্যানেল রাউটিং', + 'devOptions.menuTools': 'টুলগুলি', + 'devOptions.menuToolsDesc': + 'টুলগুলি [[I18N_SEP_92731] BR__7 সক্ষম করতে সক্ষম]__3 সক্ষম করতে পারে। আপনার পক্ষে ব্যবহার করুন', + 'devOptions.menuAgentChat': 'এজেন্ট চ্যাট', + 'devOptions.menuAgentChatDesc': 'মডেল এবং তাপমাত্রা ওভাররাইডের সাথে পরীক্ষা এজেন্ট কথোপকথন', + 'devOptions.menuCronJobs': 'ক্রোন জবস', + 'devOptions.menuCronJobsDesc': 'কাজের সময়সূচী চালনার সময়সূচী কনফিগার করুন', + 'devOptions.menuLocalModelDebug': 'স্থানীয় মডেল ডিবাগ', + 'devOptions.menuLocalModelDebugDesc': + 'Ollama কনফিগারেশন, সম্পদ ডাউনলোড, মডেল পরীক্ষা, এবং ডায়াগনস্টিকস', + 'devOptions.menuWebhooksDebug': 'ওয়েবহুক', + 'devOptions.menuWebhooksDebugDesc': + 'রানটাইম ওয়েবহুক নিবন্ধন এবং ক্যাপচার করা অনুরোধ লগগুলি পরিদর্শন করুন', + 'devOptions.menuIntelligence': 'বুদ্ধিমত্তা', + 'devOptions.menuIntelligenceDesc': 'মেমরি ওয়ার্কস্পেস, অবচেতন ইঞ্জিন, স্বপ্ন এবং সেটিংস', + 'devOptions.menuNotificationRouting': 'বিজ্ঞপ্তি রাউটিং', + 'devOptions.menuNotificationRoutingDesc': 'এআই গুরুত্ব স্কোরিং এবং অর্কেস্ট্রেটর বৃদ্ধির জন্য', + 'devOptions.menuComposeIOTriggers': 'ComposeIO ট্রিগারগুলি', + 'devOptions.menuComposeIOTriggersDesc': 'ComposeIO ট্রিগার ইতিহাস দেখুন এবং সংরক্ষণাগার', + 'devOptions.menuComposioRouting': 'Composio রাউটিং (ডাইরেক্ট মোড)', + 'devOptions.menuComposioRoutingDesc': + 'আপনার নিজের Composio এবং Composio Composio __বিরুট সরাসরি কল করুন।', + 'devOptions.menuComposioTriggers': 'ইন্টিগ্রেশন ট্রিগার', + 'devOptions.menuComposioTriggersDesc': + 'Composio ইন্টিগ্রেশন ট্রিগারের জন্য AI ট্রাইজ সেটিংস কনফিগার করুন', + 'memory.sourceFilterAria': 'উত্স দ্বারা ফিল্টার', + 'calls.comingSoonDescription': 'AI-সহায়তা কলগুলি শীঘ্রই আসছে৷ সাথে থাকুন।', + 'vault.title': 'নলেজ ভল্ট', + 'vault.description': + 'একটি স্থানীয় ফোল্ডার নির্দেশ করুন; ফাইলগুলি চাঙ্ক করা হয় এবং মেমোরিতে মিরর করা হয়।', + 'vault.add': 'ভল্ট যোগ করুন', + 'vault.added': 'ভল্ট যোগ করা হয়েছে', + 'vault.createdMessage': 'তৈরি করা হয়েছে "{name}"। ইনজেস্ট করতে {sync} এ ক্লিক করুন।', + 'vault.couldNotAdd': 'ভল্ট যোগ করা যায়নি', + 'vault.syncFailed': 'সিঙ্ক ব্যর্থ হয়েছে', + 'vault.syncFailedFor': '"{name}"-এর জন্য সিঙ্ক ব্যর্থ হয়েছে', + 'vault.syncFailedFiles': 'ফাইল __000 এর জন্য সিঙ্ক ব্যর্থ হয়েছে', + 'vault.syncedTitle': 'সিঙ্ক হয়েছে "{name}"', + 'vault.syncSummary': 'ইনজেস্ট {ingested}, অপরিবর্তিত {unchanged}, সরানো {removed}', + 'vault.syncSummaryFailed': ', ব্যর্থ হয়েছে {count}', + 'vault.syncSummarySkipped': '__PH এড়িয়ে গেছে', + 'vault.syncSummaryDuration': ' · {seconds}s', + 'vault.confirmRemovePurge': + 'ভল্ট "{name}" সরিয়ে দেবেন?\n\nOK ক্লিক করুন এর মেমোরিও মুছে ফেলতে (সমস্ত {count}টি ইনজেস্ট করা ডকুমেন্ট মুছুন)।\nডকুমেন্টগুলি মেমোরিতে রাখতে Cancel ক্লিক করুন।', + 'vault.confirmRemove': 'সত্যিই ভল্ট "{name}" সরান?', + 'vault.removed': 'ভল্ট সরানো হয়েছে', + 'vault.removedPurgedMessage': '"{name}" সরানো হয়েছে এবং এর মেমরি পরিষ্কার করেছে৷', + 'vault.removedKeptMessage': '"{name}" সরানো হয়েছে। নথি মেমরি রাখা.', + 'vault.couldNotRemove': 'ভল্ট সরানো যায়নি', + 'vault.name': 'নাম', + 'vault.namePlaceholder': 'আমার গবেষণা নোট', + 'vault.folderPath': 'ফোল্ডার পাথ (পরম)', + 'vault.folderPathPlaceholder': '/Users/you/Documents/notes', + 'vault.excludes': 'বাদ দেয় (কমা দ্বারা পৃথক করা সাবস্ট্রিং, ঐচ্ছিক)', + 'vault.excludesPlaceholder': 'drafts/, .secret', + 'vault.creating': 'তৈরি করা হচ্ছে...', + 'vault.create': 'ভল্ট তৈরি করুন', + 'vault.loading': 'ভল্ট লোড হচ্ছে...', + 'vault.failedToLoad': 'ভল্ট লোড করতে ব্যর্থ হয়েছে: {error}', + 'vault.empty': 'এখনো কোনো ভল্ট নেই। একটি ফোল্ডার ইনজেস্ট করা শুরু করতে উপরে একটি যোগ করুন।', + 'vault.fileCount': '{count} ফাইল(গুলি)', + 'vault.syncedRelative': 'সিঙ্ক করা হয়েছে {time}', + 'vault.neverSynced': 'কখনই সিঙ্ক করা হয়নি', + 'vault.syncingProgress': 'সিঙ্ক হচ্ছে... {ingested}/{total}', + 'vault.removing': 'সরানো হচ্ছে...', + 'vault.relative.sec': '{count}সেকেন্ড আগে', + 'vault.relative.min': '{count}মি আগে', + 'vault.relative.hr': '{count}সেকেন্ড আগে', + 'vault.relative.day': '{count}দিন আগে', + 'whatsapp.title': 'WhatsApp', + 'subconscious.interval.fiveMinutes': '5 মিনিট', + 'subconscious.interval.tenMinutes': '10 মিনিট', + 'subconscious.interval.fifteenMinutes': '15 মিনিট', + 'subconscious.interval.thirtyMinutes': '30 মিনিট', + 'subconscious.interval.oneHour': '1 ঘন্টা', + 'subconscious.interval.sixHours': '1 ঘন্টা', + 'subconscious.interval.twelveHours': '[[I18N_SEP_92731]] 12 ঘন্টা', + 'subconscious.interval.oneDay': '1 দিন', + 'subconscious.priority.critical': 'গুরুত্বপূর্ণ', + 'subconscious.priority.important': 'গুরুত্বপূর্ণ', + 'subconscious.priority.normal': 'স্বাভাবিক', + 'subconscious.durationSeconds': '{seconds}s', + 'subconscious.durationMilliseconds': '{milliseconds}ms', + 'settings.appearance': 'চেহারা', + 'settings.appearanceDesc': 'হালকা, অন্ধকার বাছুন বা আপনার সিস্টেম থিমের সাথে মেলে', + 'settings.mascot': 'মাসকট', + 'settings.mascotDesc': 'অ্যাপের মাস্কট রঙ জুড়ে ব্যবহার করুন', + 'pages.settings.account.walletBalances': 'ওয়ালেট ব্যালেন্স', + 'pages.settings.account.walletBalancesDesc': + 'আপনার স্থানীয় ওয়ালেটের মাল্টি-চেইন ব্যালেন্স দেখুন', + 'walletBalances.title': 'ওয়ালেট ব্যালেন্স', + 'walletBalances.refresh': 'Refresh', + 'walletBalances.loading': 'ব্যালেন্স লোড হচ্ছে…', + 'walletBalances.retry': 'Retry', + 'walletBalances.emptyState': + 'এখনো কোনো ওয়ালেট অ্যাকাউন্ট নেই — Recovery Phrase-এ একটি ওয়ালেট সেটআপ করুন।', + 'walletBalances.copyAddress': 'ঠিকানা কপি করুন', + 'walletBalances.providerMissing': 'প্রোভাইডার অনুপলব্ধ', + 'walletBalances.rawBalance': 'কাঁচা: {raw}', + 'walletBalances.errorGeneric': + 'ওয়ালেট ব্যালেন্স লোড করতে অক্ষম। Recovery Phrase-এ আপনার ওয়ালেট সেটআপ করুন এবং আবার চেষ্টা করুন।', + 'settings.taskSources.title': 'কাজের উৎস', + 'settings.taskSources.subtitle': 'আপনার টুল থেকে Tworet পরিচালনা করুন', + 'settings.taskSources.description': + 'GitHub, Notion, Linear, এবং ClickUp থেকে কাজের আইটেম সংগ্রহ করুন, সেগুলো সমৃদ্ধ করুন, এবং এজেন্টের টোডো বোর্ডে রুট করুন।', + 'settings.taskSources.connectHint': + 'আপনার সংযুক্ত অ্যাকাউন্ট ব্যবহার করে কাজের উৎস খুঁজে নিন। প্রথমে তাদের সাথে যোগাযোগ করুন।', + 'settings.taskSources.disabledBanner': + 'কাজের উৎস নিষ্ক্রিয় করা হয়েছে। স্বয়ংক্রিয়ভাবে পোল করার ব্যবস্থা সক্রিয় করা হবে।', + 'settings.taskSources.loadError': 'কাজ লোড করতে ব্যর্থ', + 'settings.taskSources.addTitle': 'কাজ যোগ করুন', + 'settings.taskSources.provider': 'পরিসেবা উপলব্ধকারী', + 'settings.taskSources.name': 'নাম (ঐচ্ছিক)', + 'settings.taskSources.namePlaceholder': 'এক্স.qxqx. আমার খোলা বিষয়গুলো', + 'settings.taskSources.github.repo': 'ডক ( xqxqx, ঐচ্ছিক)', + 'settings.taskSources.github.labels': 'লেবেল (মাউন্ট করা যায় না)', + 'settings.taskSources.notion.database': 'ডাটাবেস (board) আইডি', + 'settings.taskSources.linear.team': 'দল ID (ঐচ্ছিক)', + 'settings.taskSources.clickup.team': 'কর্মক্ষেত্র (ঐচ্ছিক)', + 'settings.taskSources.assignedToMe': 'শুধুমাত্র আমার করা আইটেমগুলি', + 'settings.taskSources.add': 'উৎস যোগ করুন', + 'settings.taskSources.adding': 'যোগ করা হচ্ছে...', + 'settings.taskSources.preview': 'প্রাকদর্শন', + 'settings.taskSources.previewResult': 'এই ফিল্টারের জন্য xqxqx প্রচেষ্টা করুন', + 'settings.taskSources.fetchNow': 'এখন নিয়ে এসো', + 'settings.taskSources.fetching': 'প্রাপ্ত করা হচ্ছে...', + 'settings.taskSources.fetchResult': 'xxqxqx এর রুট', + 'settings.taskSources.configured': '%d-টি উৎসস্থল কনফিগার করুন', + 'settings.taskSources.empty': 'কোনো কর্ম কনফিগার করা হয়নি।', + 'settings.taskSources.proactive': 'আকর্ষণীয়', + 'settings.taskSources.lastFetch': 'সর্বশেষ প্রাপ্ত', + 'settings.taskSources.never': 'কখনো নয়', + 'settings.taskSources.statusEnabled': 'সক্রিয়', + 'settings.taskSources.statusDisabled': 'নিষ্ক্রিয়', + 'settings.taskSources.enable': 'সক্রিয় করুন', + 'settings.taskSources.disable': 'নিষ্ক্রিয়', + 'settings.taskSources.remove': 'মুছে ফেলুন', + 'settings.taskSources.removeConfirm': + 'এই কাজটি মুছে ফেলা হবে কি? সকল পূর্ববর্তী তথ্য মুছে ফেলা হবে এবং তা উদ্ধার করা যাবে না।', + 'settings.taskSources.refresh': 'নতুন করে প্রদর্শন', + 'settings.taskSources.providers.github': 'GitHub', + 'settings.taskSources.providers.notion': 'সংযোগ', + 'settings.taskSources.providers.linear': 'লিনিয়ার', + 'settings.taskSources.providers.clickup': 'উপরে ক্লিক করুন', + 'skills.dashboard.title': 'Skills', + 'skills.dashboard.scheduledHeading': 'নির্ধারিত স্কিল', + 'skills.dashboard.emptyTitle': 'কোনো নির্ধারিত স্কিল নেই', + 'skills.dashboard.emptyBody': + 'এখানে দেখতে একবার কোনো বান্ডেল স্কিল চালান বা একটি পুনরাবৃত্তি সময়সূচি সংরক্ষণ করুন।', + 'skills.dashboard.create': 'একটি স্কিল তৈরি করুন', + 'skills.dashboard.run': 'একটি স্কিল চালান', + 'skills.dashboard.enable': 'নির্ধারিত স্কিল সক্রিয় করুন', + 'skills.dashboard.disable': 'নির্ধারিত স্কিল নিষ্ক্রিয় করুন', + 'skills.dashboard.lastRun': 'শেষ চালানো', + 'skills.dashboard.nextRun': 'পরবর্তী চালানো', + 'skills.dashboard.cardOpenRunner': 'রানারে খুলুন', + 'skills.dashboard.loadError': 'নির্ধারিত স্কিল লোড করতে ব্যর্থ হয়েছে', + 'skills.new.title': 'একটি স্কিল তৈরি করুন', + 'skills.new.placeholderBody': + 'অথরিং ফর্ম শীঘ্রই আসছে। এখনের জন্য, রানার পৃষ্ঠায় "New skill" বোতাম ব্যবহার করুন।', + 'settings.agents.title': 'এজেন্ট', + 'settings.agents.subtitle': + 'প্রতিনিধিদের জন্য উপলব্ধ এজেন্টগুলো তৈরি করা হয় – ডিফল্ট এবং আপনার নিজস্ব কাস্টম এজেন্টদের জন্য।', + 'settings.agents.menuDesc': 'প্লাগ-ইন ও স্বনির্ধারিত এজেন্ট পরিচালনা করুন', + 'settings.agents.newAgent': 'নতুন এজেন্ট', + 'settings.agents.loadError': 'এজেন্ট লোড করতে ব্যর্থ', + 'settings.agents.empty': 'এখনো কোন এজেন্ট নেই', + 'settings.agents.sourceDefault': 'অন্তর্ভুক্ত', + 'settings.agents.sourceCustom': 'স্বনির্ধারিত', + 'settings.agents.enable': 'সক্রিয় করা হবে', + 'settings.agents.disable': 'নিষ্ক্রিয় করুন', + 'settings.agents.edit': 'সম্পাদনা', + 'settings.agents.delete': 'Delete', + 'settings.agents.reset': 'ডিফল্ট মান পুনরায় স্থাপন করুন', + 'settings.agents.modelLabel': 'মডেল', + 'settings.agents.toolsLabel': 'সরঞ্জাম', + 'settings.agents.toolsAll': 'সকল টুল', + 'settings.agents.toolsCount': 'xqxqx টুল', + 'settings.agents.actionFailed': 'কর্ম আপডেট করা যায়নি', + 'settings.agents.orchestratorLocked': 'অর্কেস্ট্রা সবসময় সক্রিয় থাকে.', + 'settings.agents.editor.createTitle': 'নতুন এজেন্ট', + 'settings.agents.editor.editTitle': 'এজেন্ট সম্পাদনা', + 'settings.agents.editor.id': 'ID', + 'settings.agents.editor.idHint': 'ছোট অক্ষর, সংখ্যা, এবং - শুধুমাত্র।', + 'settings.agents.editor.name': 'নাম', + 'settings.agents.editor.description': 'বিবরণ', + 'settings.agents.editor.model': 'মডেল (ঐচ্ছিক)', + 'settings.agents.editor.modelPlaceholder': 'xqxqx; এর উত্তর, ইঙ্গিত: fast, অথবা একটি মডেল', + 'settings.agents.editor.systemPrompt': 'সিস্টেম প্রম্পট (ঐচ্ছিক)', + 'settings.agents.editor.tools': 'ব্যবহারের জন্য চিহ্নিত সামগ্রী', + 'settings.agents.editor.toolsHint': + 'প্রতিটি রেখার জন্য একটি টুল-নেম * সব হাতিয়ারের জন্য * ব্যবহার করুন ।', + 'settings.agents.editor.defaultsNote': + 'একটি নির্মিত ইন-ইন এজেন্ট সম্পাদনা করে আপনি পরে পুনরায় নির্ধারণ করতে পারবেন।', + 'settings.agents.editor.save': 'সংরক্ষণ', + 'settings.agents.editor.create': 'নির্মাণ করুন', + 'settings.agents.editor.saving': 'ইনস্টল করা হয়েছে...', + 'settings.agentsSection.title': 'Agents', + 'settings.agentsSection.description': + 'আপনার এজেন্ট, তাদের স্বায়ত্তশাসন এবং এই কম্পিউটারে তারা কী অ্যাক্সেস করতে পারে তা পরিচালনা করুন।', + 'settings.agentsSection.menuDesc': 'রেজিস্ট্রি, স্বায়ত্তশাসন ও ওএস অ্যাক্সেস', + 'settings.agents.editor.notFound': 'এজেন্ট পাওয়া যায়নি।', + 'settings.agents.editor.modelInherit': 'উত্তরাধিকার (প্ল্যাটফর্ম ডিফল্ট)', + 'settings.agents.editor.modelHints': 'রুট হিন্টস', + 'settings.agents.editor.modelTiers': 'মডেল স্তর', + 'settings.agents.editor.modelCustom': 'কাস্টম মডেল আইডি…', + 'settings.agents.editor.modelCustomPlaceholder': 'যেমন anthropic/claude-sonnet-4', + 'settings.agents.editor.selectTools': 'টুল যোগ করুন', + 'settings.agents.editor.toolsAllSelected': 'সব টুল', + 'settings.agents.editor.toolsNoneSelected': 'কোনো টুল নির্বাচিত নয়', + 'settings.agents.editor.removeToolAria': '{tool} সরান', + 'settings.agents.editor.toolsModalTitle': 'অনুমোদিত টুল', + 'settings.agents.editor.toolsSelectedCount': '{count}টি নির্বাচিত', + 'settings.agents.editor.toolsSearchPlaceholder': 'টুল খুঁজুন…', + 'settings.agents.editor.toolsAllowAll': 'সব টুল অনুমতি দিন (*)', + 'settings.agents.editor.toolsAllowAllHint': 'এই এজেন্ট প্রতিটি উপলব্ধ টুল ব্যবহার করতে পারে।', + 'settings.agents.editor.toolsLoading': 'টুল লোড হচ্ছে…', + 'settings.agents.editor.toolsLoadError': 'টুল লোড করা যায়নি', + 'settings.agents.editor.toolsEmpty': 'আপনার অনুসন্ধানের সাথে কোনো টুল মেলে না।', + 'settings.agents.editor.toolsDone': 'Done', + 'settings.agents.editor.builtInReadonly': + 'বিল্ট-ইন এজেন্ট সম্পাদনা করা যাবে না। আপনি এজেন্ট তালিকা থেকে সেগুলো সক্রিয়, নিষ্ক্রিয় বা পুনরায় সেট করতে পারেন।', }; -export default bn; +export default messages; diff --git a/app/src/lib/i18n/chunks/ar-1.ts b/app/src/lib/i18n/chunks/ar-1.ts deleted file mode 100644 index a86213be7..000000000 --- a/app/src/lib/i18n/chunks/ar-1.ts +++ /dev/null @@ -1,1611 +0,0 @@ -import type { TranslationMap } from '../types'; - -// Arabic (العربية) chunk 1/5. Translated from chunks/en-1.ts. -const ar1: TranslationMap = { - 'nav.home': 'الرئيسية', - 'nav.human': 'إنسان', - 'nav.chat': 'المحادثة', - 'nav.connections': 'الاتصالات', - 'nav.memory': 'الذكاء', - 'nav.alerts': 'التنبيهات', - 'nav.rewards': 'المكافآت', - 'nav.settings': 'الإعدادات', - 'common.cancel': 'إلغاء', - 'common.save': 'حفظ', - 'common.confirm': 'تأكيد', - 'common.delete': 'حذف', - 'common.edit': 'تعديل', - 'common.create': 'إنشاء', - 'common.search': 'بحث', - 'common.loading': 'جارٍ التحميل…', - 'common.error': 'خطأ', - 'common.success': 'نجاح', - 'common.back': 'رجوع', - 'common.next': 'التالي', - 'common.finish': 'إنهاء', - 'common.close': 'إغلاق', - 'common.enabled': 'مفعّل', - 'common.disabled': 'معطّل', - 'common.on': 'تشغيل', - 'common.off': 'إيقاف', - 'common.yes': 'نعم', - 'common.no': 'لا', - 'common.ok': 'حسنًا', - 'common.retry': 'حاول مرة أخرى', - 'common.copy': 'نسخ', - 'common.copied': 'تم النسخ', - 'common.learnMore': 'معرفة المزيد', - 'common.seeAll': 'عرض', - 'common.dismiss': 'تجاهل', - 'common.clear': 'مسح', - 'common.reset': 'إعادة ضبط', - 'common.refresh': 'تحديث', - 'common.export': 'تصدير', - 'common.import': 'استيراد', - 'common.upload': 'رفع', - 'common.download': 'تنزيل', - 'common.add': 'إضافة', - 'common.remove': 'إزالة', - 'common.showMore': 'عرض المزيد', - 'common.showLess': 'عرض أقل', - 'common.submit': 'إرسال', - 'common.continue': 'متابعة', - 'common.comingSoon': 'قريبًا', - 'settings.general': 'عام', - 'settings.featuresAndAI': 'الميزات والذكاء الاصطناعي', - 'settings.billingAndRewards': 'الفوترة والمكافآت', - 'settings.support': 'الدعم', - 'settings.advanced': 'متقدم', - 'settings.dangerZone': 'منطقة الخطر', - 'settings.account': 'الحساب', - 'settings.accountDesc': 'عبارة الاسترداد والفريق والاتصالات والخصوصية', - 'settings.notifications': 'الإشعارات', - 'settings.notificationsDesc': 'عدم الإزعاج وضوابط الإشعارات لكل حساب', - 'settings.notifications.tabs.preferences': 'التفضيلات', - 'settings.notifications.tabs.routing': 'التوجيه', - 'settings.features': 'الميزات', - 'settings.featuresDesc': 'وعي الشاشة والمراسلة والأدوات', - 'settings.aiModels': 'الذكاء الاصطناعي والنماذج', - 'settings.aiModelsDesc': 'إعداد نموذج الذكاء الاصطناعي المحلي وتنزيلاته ومزود LLM', - 'settings.ai': 'إعداد الذكاء الاصطناعي', - 'settings.aiDesc': 'مزودو السحابة ونماذج Ollama المحلية والتوجيه لكل عبء عمل', - 'settings.billingUsage': 'الفوترة والاستخدام', - 'settings.billingUsageDesc': 'خطة الاشتراك والرصيد وطرق الدفع', - 'settings.rewards': 'المكافآت', - 'settings.rewardsDesc': 'الإحالات والقسائم والرصيد المكتسب', - 'settings.restartTour': 'إعادة الجولة التعريفية', - 'settings.restartTourDesc': 'إعادة تشغيل جولة المنتج من البداية', - 'settings.about': 'حول', - 'settings.aboutDesc': 'إصدار التطبيق وتحديثات البرنامج', - 'settings.developerOptions': 'متقدم', - 'settings.developerOptionsDesc': - 'إعداد الذكاء الاصطناعي وقنوات المراسلة والأدوات والتشخيص ولوحات التصحيح', - 'settings.clearAppData': 'مسح بيانات التطبيق', - 'settings.clearAppDataDesc': 'تسجيل الخروج وحذف جميع البيانات المحلية للتطبيق نهائيًا', - 'settings.logOut': 'تسجيل الخروج', - 'settings.logOutDesc': 'تسجيل الخروج من حسابك', - 'settings.exitLocalSession': 'الخروج من الجلسة المحلية', - 'settings.exitLocalSessionDesc': 'العودة إلى شاشة تسجيل الدخول', - 'settings.language': 'اللغة', - 'settings.languageDesc': 'لغة عرض واجهة التطبيق', - 'settings.alerts': 'التنبيهات', - 'settings.alertsDesc': 'عرض التنبيهات الأخيرة والنشاط في صندوق الوارد', - 'settings.account.recoveryPhrase': 'عبارة الاسترداد', - 'settings.account.recoveryPhraseDesc': 'عرض عبارة استرداد الحساب ونسخها احتياطيًا', - 'settings.account.team': 'الفريق', - 'settings.account.teamDesc': 'إدارة أعضاء الفريق والأذونات', - 'settings.account.connections': 'الاتصالات', - 'settings.account.connectionsDesc': 'إدارة الحسابات والخدمات المرتبطة', - 'settings.account.privacy': 'الخصوصية', - 'settings.account.privacyDesc': 'التحكم في البيانات التي تغادر جهازك', - 'settings.notifications.doNotDisturb': 'عدم الإزعاج', - 'settings.notifications.doNotDisturbDesc': 'إيقاف جميع الإشعارات مؤقتًا لفترة محددة', - 'settings.notifications.channelControls': 'ضوابط لكل قناة', - 'settings.notifications.channelControlsDesc': 'ضبط تفضيلات الإشعارات لكل قناة', - 'settings.features.screenAwareness': 'وعي الشاشة', - 'settings.features.screenAwarenessDesc': 'السماح للمساعد برؤية نافذتك النشطة', - 'settings.features.messaging': 'المراسلة', - 'settings.features.messagingDesc': 'إعدادات تكامل القنوات والمراسلة', - 'settings.features.tools': 'الأدوات', - 'settings.features.toolsDesc': 'إدارة الأدوات والتكاملات المتصلة', - 'settings.ai.localSetup': 'إعداد الذكاء الاصطناعي المحلي', - 'settings.ai.localSetupDesc': 'تنزيل نماذج الذكاء الاصطناعي المحلية وضبطها', - 'settings.ai.llmProvider': 'مزود LLM', - 'settings.ai.llmProviderDesc': 'اختيار مزود الذكاء الاصطناعي وضبطه', - 'clearData.title': 'مسح بيانات التطبيق', - 'clearData.warning': 'سيؤدي هذا إلى تسجيل خروجك وحذف بيانات التطبيق المحلية نهائيًا، بما فيها:', - 'clearData.bulletSettings': 'إعدادات التطبيق والمحادثات', - 'clearData.bulletCache': 'جميع بيانات ذاكرة التخزين المؤقت للتكاملات المحلية', - 'clearData.bulletWorkspace': 'بيانات مساحة العمل', - 'clearData.bulletOther': 'جميع البيانات المحلية الأخرى', - 'clearData.irreversible': 'لا يمكن التراجع عن هذا الإجراء.', - 'clearData.clearing': 'جارٍ مسح بيانات التطبيق...', - 'clearData.failed': 'فشل مسح البيانات وتسجيل الخروج. يرجى المحاولة مرة أخرى.', - 'clearData.failedLogout': 'فشل تسجيل الخروج. يرجى المحاولة مرة أخرى.', - 'clearData.failedPersist': 'فشل مسح حالة التطبيق المحفوظة. يرجى المحاولة مرة أخرى.', - 'welcome.title': 'مرحبًا بك في OpenHuman', - 'welcome.subtitle': 'مساعدك الذكي الشخصي. خاص وبسيط وبالغ القوة.', - 'welcome.connectPrompt': 'ضبط عنوان URL للـ RPC (متقدم)', - 'welcome.selectRuntime': 'اختر بيئة التشغيل', - 'welcome.urlPlaceholder': 'http://localhost:8089', - 'welcome.invalidUrl': 'يرجى إدخال عنوان URL صالح لـ HTTP أو HTTPS', - 'welcome.connecting': 'اختبار', - 'welcome.connect': 'اختبار', - 'home.greeting': 'صباح الخير', - 'home.greetingAfternoon': 'مساء الخير', - 'home.greetingEvening': 'مساء النور', - 'home.askAssistant': 'اسأل مساعدك أي شيء...', - 'home.statusOk': - 'جهازك متصل. احتفظ بالتطبيق مفتوحًا للحفاظ على الاتصال. راسل وكيلك باستخدام الزر أدناه.', - 'home.statusBackendOnly': 'جارٍ إعادة الاتصال بالخادم… سيتوفر وكيلك قريبًا.', - 'home.statusCoreUnreachable': - 'العملية الأساسية المحلية لا تستجيب. قد تكون عملية OpenHuman في الخلفية قد تعطلت أو فشلت في البدء.', - 'home.statusInternetOffline': - 'جهازك غير متصل بالإنترنت حاليًا. تحقق من شبكتك أو أعد تشغيل التطبيق لإعادة الاتصال.', - 'home.restartCore': 'إعادة تشغيل النواة', - 'home.restartingCore': 'جارٍ إعادة تشغيل النواة…', - 'home.themeToggle.toLight': 'التبديل إلى الوضع الفاتح', - 'home.themeToggle.toDark': 'التبديل إلى الوضع الداكن', - 'chat.newThread': 'محادثة جديدة', - 'chat.typeMessage': 'اكتب رسالة...', - 'chat.send': 'إرسال الرسالة', - 'chat.thinking': 'جارٍ التفكير...', - 'chat.noMessages': 'لا توجد رسائل بعد', - 'chat.startConversation': 'ابدأ محادثة', - 'chat.regenerate': 'إعادة التوليد', - 'chat.copyResponse': 'نسخ الرد', - 'chat.citations': 'المراجع', - 'chat.toolUsed': 'الأداة المستخدمة', - 'scope.legacy': 'قديم', - 'scope.user': 'مستخدم', - 'scope.project': 'مشروع', - 'skills.title': 'الاتصالات', - 'skills.search': 'البحث في الاتصالات...', - 'skills.noResults': 'لم يتم العثور على اتصالات', - 'skills.connect': 'توصيل', - 'skills.disconnect': 'قطع الاتصال', - 'skills.configure': 'إدارة', - 'skills.connected': 'متصل', - 'skills.available': 'متاح', - 'skills.addAccount': 'إضافة حساب', - 'skills.channels': 'القنوات', - 'skills.integrations': 'التكاملات', - 'memory.title': 'الذاكرة', - 'memory.search': 'البحث في الذكريات...', - 'memory.noResults': 'لم يتم العثور على ذكريات', - 'memory.empty': 'لا توجد ذكريات بعد. تُنشأ الذكريات تلقائيًا أثناء تفاعلك.', - 'memory.tab.memory': 'الذاكرة', - 'memory.tab.tasks': 'Agent Tasks', - 'memory.tab.tasksDescription': - 'Create and track tasks — your own to-dos plus the boards your agents build across conversations.', - 'memory.tab.subconscious': 'اللاوعي', - 'memory.tab.dreams': 'الأحلام', - 'memory.tab.calls': 'المكالمات', - 'memory.tab.diagram': 'Diagram', - 'memory.tab.settings': 'الإعدادات', - 'memory.analyzeNow': 'تحليل الآن', - 'memoryTree.status.title': 'Memory Tree', - 'memoryTree.status.autoSyncLabel': 'Auto-sync', - 'memoryTree.status.autoSyncDescription': - 'Pause to stop new ingestion. Existing wiki stays queryable.', - 'memoryTree.status.statusTile': 'Status', - 'memoryTree.status.lastSyncTile': 'Last sync', - 'memoryTree.status.totalChunksTile': 'Total chunks', - 'memoryTree.status.wikiSizeTile': 'Wiki size', - 'memoryTree.status.statusRunning': 'Running', - 'memoryTree.status.statusPaused': 'Paused', - 'memoryTree.status.statusSyncing': 'Syncing', - 'memoryTree.status.statusError': 'Error', - 'memoryTree.status.statusIdle': 'Idle', - 'memoryTree.status.never': 'Never', - 'memoryTree.status.fetchError': "Couldn't fetch Memory Tree status", - 'memoryTree.status.retry': 'Retry', - 'memoryTree.status.toggleFailed': "Couldn't toggle auto-sync", - 'memoryTree.status.justNow': 'just now', - 'memoryTree.status.secondsAgo': '{count}s ago', - 'memoryTree.status.minuteAgo': '1 min ago', - 'memoryTree.status.minutesAgo': '{count} min ago', - 'memoryTree.status.hourAgo': '1 hr ago', - 'memoryTree.status.hoursAgo': '{count} hr ago', - 'memoryTree.status.dayAgo': '1 day ago', - 'memoryTree.status.daysAgo': '{count} days ago', - 'alerts.title': 'التنبيهات', - 'alerts.empty': 'لا توجد تنبيهات بعد', - 'alerts.markAllRead': 'تحديد الكل كمقروء', - 'alerts.unread': 'غير مقروء', - 'rewards.title': 'المكافآت', - 'rewards.referrals': 'الإحالات', - 'rewards.coupons': 'استرداد', - 'rewards.credits': 'الرصيد', - 'rewards.referralCode': 'رمز الإحالة الخاص بك', - 'rewards.copyCode': 'نسخ الرمز', - 'rewards.share': 'مشاركة', - 'onboarding.welcome': 'مرحبًا. أنا OpenHuman.', - 'onboarding.welcomeDesc': 'مساعدك الذكي الفائق الذي يعمل على جهازك. خاص وبسيط وبالغ القوة.', - 'onboarding.context': 'جمع السياق', - 'onboarding.contextDesc': 'اربط الأدوات والخدمات التي تستخدمها يوميًا.', - 'onboarding.localAI': 'الذكاء الاصطناعي المحلي', - 'onboarding.localAIDesc': 'إعداد نموذج ذكاء اصطناعي محلي يعمل على جهازك.', - 'onboarding.chatProvider': 'مزود المحادثة', - 'onboarding.chatProviderDesc': 'اختر طريقة تفاعلك مع مساعدك.', - 'onboarding.referral': 'الإحالة', - 'onboarding.referralDesc': 'أدخل رمز إحالة إن كان لديك واحد.', - 'onboarding.finish': 'إتمام الإعداد', - 'onboarding.finishDesc': 'انتهيت! ابدأ استخدام OpenHuman.', - 'onboarding.skip': 'تخطي', - 'onboarding.getStarted': 'ابدأ الآن', - 'onboarding.runtimeChoice.title': 'كيف تريد تشغيل OpenHuman؟', - 'onboarding.runtimeChoice.subtitle': - 'اختر الإعداد الأنسب لك. يمكنك تغيير هذا لاحقًا في الإعدادات.', - 'onboarding.runtimeChoice.cloud.title': 'بسيط', - 'onboarding.runtimeChoice.cloud.tagline': 'دع OpenHuman يدير كل شيء نيابةً عنك.', - 'onboarding.runtimeChoice.cloud.f1': 'أمان مدمج', - 'onboarding.runtimeChoice.cloud.f2': 'ضغط الرموز لتمديد استخدامك', - 'onboarding.runtimeChoice.cloud.f3': 'اشتراك واحد يشمل جميع النماذج', - 'onboarding.runtimeChoice.cloud.f4': 'لا حاجة لإدارة مفاتيح API', - 'onboarding.runtimeChoice.cloud.f5': 'سهل الإعداد', - 'onboarding.runtimeChoice.custom.title': 'تشغيل مخصص', - 'onboarding.runtimeChoice.custom.tagline': 'استخدم مفاتيحك الخاصة. تحكم كامل في ما تستخدمه.', - 'onboarding.runtimeChoice.custom.f1': 'ستحتاج إلى مفاتيح API لمعظم الميزات', - 'onboarding.runtimeChoice.custom.f2': 'يُعيد استخدام الخدمات التي تدفع لها مسبقًا', - 'onboarding.runtimeChoice.custom.f3': 'يمكن أن يكون مجانيًا إذا شغّلت كل شيء محليًا', - 'onboarding.runtimeChoice.custom.f4': 'إعداد أكثر وخيارات أوسع', - 'onboarding.runtimeChoice.custom.f5': 'الأفضل للمستخدمين المتمرسين والمطورين', - 'onboarding.runtimeChoice.cloud.creditHighlight': '$1 رصيد مجاني للتجربة', - 'onboarding.runtimeChoice.continueCloud': 'المتابعة بالخيار البسيط', - 'onboarding.runtimeChoice.continueCustom': 'المتابعة بالخيار المخصص', - 'onboarding.runtimeChoice.recommended': 'موصى به', - 'onboarding.apiKeys.title': 'لنضف مفاتيح API الخاصة بك', - 'onboarding.apiKeys.subtitle': - 'يمكنك لصقها الآن أو تخطيها وإضافتها لاحقًا من الإعدادات › الذكاء الاصطناعي. تُحفظ المفاتيح على هذا الجهاز مشفرةً.', - 'onboarding.apiKeys.openaiLabel': 'مفتاح OpenAI API', - 'onboarding.apiKeys.openaiPlaceholder': 'sk-...', - 'onboarding.apiKeys.anthropicLabel': 'مفتاح Anthropic API', - 'onboarding.apiKeys.anthropicPlaceholder': 'sk-ant-...', - 'onboarding.apiKeys.saveError': 'تعذّر حفظ هذا المفتاح. يرجى مراجعته والمحاولة مرة أخرى.', - 'onboarding.apiKeys.skipForNow': 'تخطي في الوقت الحالي', - 'onboarding.apiKeys.continue': 'حفظ ومتابعة', - 'onboarding.apiKeys.saving': 'جارٍ الحفظ…', - 'onboarding.custom.stepperInference': 'الاستدلال', - 'onboarding.custom.stepperVoice': 'الصوت', - 'onboarding.custom.stepperOAuth': 'OAuth', - 'onboarding.custom.stepperSearch': 'البحث', - 'onboarding.custom.stepperEmbeddings': 'Embeddings', - 'onboarding.custom.stepperMemory': 'الذاكرة', - 'onboarding.custom.stepCounter': 'الخطوة {n} من {total}', - 'onboarding.custom.defaultTitle': 'افتراضي', - 'onboarding.custom.defaultSubtitle': 'دع OpenHuman يديره نيابةً عنك.', - 'onboarding.custom.configureTitle': 'ضبط', - 'onboarding.custom.configureSubtitle': 'سأختار ما يُستخدم بنفسي.', - 'onboarding.custom.progressAriaLabel': 'تقدم الإعداد الأولي', - 'onboarding.custom.continue': 'متابعة', - 'onboarding.custom.back': 'رجوع', - 'onboarding.custom.finish': 'إتمام الإعداد', - 'onboarding.custom.configureLater': - 'يمكنك إكمال الإعداد بعد انتهاء الإعداد الأولي. سننقلك إلى صفحة الإعدادات المناسبة عند الانتهاء.', - 'onboarding.custom.openSettings': 'فتح في الإعدادات', - 'onboarding.custom.inference.title': 'الاستدلال (النص)', - 'onboarding.custom.inference.subtitle': 'أي نموذج لغوي يجب أن يُجيب على أسئلتك ويشغّل وكلاءك؟', - 'onboarding.custom.inference.defaultDesc': - 'يُوجّه OpenHuman كل عبء عمل إلى نموذج افتراضي مناسب. بدون مفاتيح أو إعداد.', - 'onboarding.custom.inference.configureDesc': - 'استخدم مفتاحك الخاص من OpenAI أو Anthropic. سنستخدمه لجميع أعباء العمل النصية.', - 'onboarding.custom.voice.title': 'الصوت', - 'onboarding.custom.voice.subtitle': 'تحويل الكلام إلى نص والنص إلى كلام لوضع الصوت.', - 'onboarding.custom.voice.defaultDesc': - 'يأتي OpenHuman مع STT/TTS مُدار يعمل تلقائيًا. لا شيء يحتاج إلى إعداد.', - 'onboarding.custom.voice.configureDesc': - 'استخدم ElevenLabs / OpenAI Whisper / إلخ. اضبطه من الإعدادات › الصوت.', - 'onboarding.custom.oauth.title': 'الاتصالات (OAuth)', - 'onboarding.custom.oauth.subtitle': 'Gmail وSlack وNotion وخدمات أخرى متصلة تحتاج إلى OAuth.', - 'onboarding.custom.oauth.defaultDesc': - 'يشغّل OpenHuman مساحة عمل Composio مُدارة. نقرة واحدة لتوصيل كل خدمة لاحقًا.', - 'onboarding.custom.oauth.configureDesc': - 'استخدم حساب Composio الخاص بك / مفتاح API. اضبطه من الإعدادات › الاتصالات.', - 'onboarding.custom.search.title': 'البحث على الويب', - 'onboarding.custom.search.subtitle': 'كيف يبحث OpenHuman على الويب نيابةً عنك.', - 'onboarding.custom.search.defaultDesc': 'يستخدم OpenHuman خادم بحث مُدار. لا حاجة لمفاتيح.', - 'onboarding.custom.search.configureDesc': - 'استخدم مفتاح مزود البحث الخاص بك (Tavily أو Brave إلخ). اضبطه من الإعدادات › الأدوات.', - 'onboarding.custom.embeddings.title': 'Embeddings', - 'onboarding.custom.embeddings.subtitle': - 'How OpenHuman generates vector embeddings for semantic memory search.', - 'onboarding.custom.embeddings.defaultDesc': - 'OpenHuman uses a managed embedding service. No API key needed.', - 'onboarding.custom.embeddings.configureDesc': - 'Bring your own embedding provider (OpenAI, Voyage, Ollama, etc.).', - 'onboarding.custom.memory.title': 'الذاكرة', - 'onboarding.custom.memory.subtitle': 'كيف يتذكر OpenHuman سياقك وتفضيلاتك ومحادثاتك السابقة.', - 'onboarding.custom.memory.defaultDesc': - 'يدير OpenHuman تخزين الذاكرة واسترجاعها تلقائيًا. لا شيء يحتاج إلى إعداد.', - 'onboarding.custom.memory.configureDesc': - 'افحص الذاكرة أو صدّرها أو امسحها بنفسك. اضبطها من الإعدادات › الذاكرة.', - 'accounts.addAccount': 'إضافة حساب', - 'accounts.manageAccounts': 'إدارة الحسابات', - 'accounts.noAccounts': 'لا توجد حسابات متصلة', - 'accounts.connectAccount': 'اربط حسابًا للبدء', - 'accounts.agent': 'الوكيل', - 'accounts.respondQueue': 'قائمة الردود', - 'accounts.disconnect': 'قطع الاتصال', - 'accounts.disconnectConfirm': 'هل أنت متأكد من أنك تريد قطع الاتصال بهذا الحساب؟', - 'accounts.disconnectClearMemory': 'Also delete memory from this source', - 'accounts.disconnectClearMemoryHint': - 'Permanently removes local memory chunks linked to this connection.', - 'accounts.searchAccounts': 'البحث في الحسابات...', - 'channels.title': 'القنوات', - 'channels.configure': 'ضبط القناة', - 'channels.setup': 'إعداد', - 'channels.noChannels': 'لا توجد قنوات مضبوطة', - 'channels.addChannel': 'إضافة قناة', - 'channels.status.connected': 'متصل', - 'channels.status.disconnected': 'غير متصل', - 'channels.status.error': 'خطأ', - 'channels.status.configuring': 'جارٍ الضبط', - 'channels.defaultMessaging': 'قناة المراسلة الافتراضية', - 'webhooks.title': 'الـ Webhooks', - 'webhooks.create': 'إنشاء Webhook', - 'webhooks.noWebhooks': 'لا توجد Webhooks مضبوطة', - 'webhooks.url': 'URL', - 'webhooks.secret': 'المفتاح السري', - 'webhooks.events': 'الأحداث', - 'webhooks.archiveDirectory': 'دليل الأرشيف', - 'webhooks.todayFile': 'ملف اليوم', - 'invites.title': 'الدعوات', - 'invites.create': 'إنشاء دعوة', - 'invites.noInvites': 'لا توجد دعوات معلقة', - 'invites.code': 'رمز الدعوة', - 'invites.copyLink': 'نسخ الرابط', - 'devOptions.title': 'متقدم', - 'devOptions.diagnostics': 'التشخيص', - 'devOptions.diagnosticsDesc': 'صحة النظام والسجلات ومقاييس الأداء', - 'devOptions.toolPolicyDiagnosticsDesc': - 'Tool inventory, policy posture, MCP allowlists, and recent blocks', - 'devOptions.toolPolicyDiagnostics.loading': 'Loading…', - 'devOptions.toolPolicyDiagnostics.unavailable': 'Diagnostics unavailable', - 'devOptions.toolPolicyDiagnostics.posture.title': 'Policy posture', - 'devOptions.toolPolicyDiagnostics.posture.autonomy': 'Autonomy:', - 'devOptions.toolPolicyDiagnostics.posture.workspaceOnly': 'Workspace only:', - 'devOptions.toolPolicyDiagnostics.posture.maxActionsPerHour': 'Max actions/hr:', - 'devOptions.toolPolicyDiagnostics.posture.approvalMediumRisk': 'Approval (medium risk):', - 'devOptions.toolPolicyDiagnostics.posture.blockHighRisk': 'Block high risk:', - 'devOptions.toolPolicyDiagnostics.inventory.title': 'Inventory', - 'devOptions.toolPolicyDiagnostics.inventory.totalTools': 'Total tools', - 'devOptions.toolPolicyDiagnostics.inventory.enabledTools': 'Enabled tools', - 'devOptions.toolPolicyDiagnostics.inventory.mcpStdioTools': 'MCP stdio tools', - 'devOptions.toolPolicyDiagnostics.inventory.jsonRpcTools': 'JSON-RPC tools', - 'devOptions.toolPolicyDiagnostics.mcpAllowlists.title': 'MCP allowlists', - 'devOptions.toolPolicyDiagnostics.mcpAllowlists.summary': - 'Enabled: {enabled} · Servers: {enabledCount}/{totalCount}', - 'devOptions.toolPolicyDiagnostics.mcpAllowlists.unnamed': '', - 'devOptions.toolPolicyDiagnostics.mcpAllowlists.allowDeny': 'allow={allowCount} deny={denyCount}', - 'devOptions.toolPolicyDiagnostics.mcpWriteAudit.title': 'MCP write audit', - 'devOptions.toolPolicyDiagnostics.mcpWriteAudit.summary': - 'Enabled: {enabled} · Recent (24h): {recentRows}', - 'devOptions.toolPolicyDiagnostics.recentBlocked.title': 'Recent blocked calls', - 'devOptions.toolPolicyDiagnostics.recentBlocked.empty': 'No blocked calls recorded.', - 'devOptions.toolPolicyDiagnostics.redactedSurfaces.title': 'Redacted surfaces', - 'devOptions.toolPolicyDiagnostics.redactedSurfaces.summary': - 'Write-capable: {writeCount} · Policy surfaces: {policyCount}', - 'devOptions.debugPanels': 'لوحات التصحيح', - 'devOptions.debugPanelsDesc': 'أعلام الميزات وفحص الحالة وأدوات التصحيح', - 'devOptions.webhooks': 'الـ Webhooks', - 'devOptions.webhooksDesc': 'ضبط واختبار تكاملات Webhook', - 'devOptions.memoryInspection': 'فحص الذاكرة', - 'devOptions.memoryInspectionDesc': 'تصفح وتساؤل وإدارة إدخالات الذاكرة', - 'voice.pushToTalk': 'اضغط للتحدث', - 'voice.recording': 'جارٍ التسجيل...', - 'voice.processing': 'جارٍ المعالجة...', - 'voice.languageHint': 'اللغة', - 'misc.rehydrating': 'جارٍ تحميل بياناتك...', - 'misc.checkingServices': 'جارٍ التحقق من الخدمات...', - 'misc.serviceUnavailable': 'الخدمة غير متاحة', - 'misc.somethingWentWrong': 'حدث خطأ ما', - 'misc.tryAgainLater': 'يرجى المحاولة مرة أخرى لاحقًا.', - 'misc.restartApp': 'إعادة تشغيل التطبيق', - 'misc.updateAvailable': 'تحديث متاح', - 'misc.updateNow': 'تحديث الآن', - 'misc.updateLater': 'لاحقًا', - 'misc.downloading': 'جارٍ التنزيل...', - 'misc.installing': 'جارٍ التثبيت...', - 'misc.beta': - 'OpenHuman في مرحلة تجريبية مبكرة. لا تتردد في مشاركة ملاحظاتك أو الإبلاغ عن أي أخطاء تواجهها — كل تقرير يساعدنا على الإنجاز بشكل أسرع.', - 'misc.betaFeedback': 'إرسال ملاحظات', - 'mnemonic.title': 'عبارة الاسترداد', - 'mnemonic.warning': 'اكتب هذه الكلمات بالترتيب واحفظها في مكان آمن.', - 'mnemonic.copyWarning': - 'لا تشارك عبارة الاسترداد أبدًا. أي شخص يمتلك هذه الكلمات يمكنه الوصول إلى حسابك.', - 'mnemonic.copied': 'تم نسخ عبارة الاسترداد إلى الحافظة', - 'mnemonic.reveal': 'الكشف عن العبارة', - 'mnemonic.revealPhrase': 'Reveal recovery phrase', - 'mnemonic.hidden': 'عبارة الاسترداد مخفية', - 'privacy.title': 'الخصوصية والأمان', - 'privacy.description': 'تقرير شفافية البيانات المُرسَلة إلى الخدمات الخارجية.', - 'privacy.empty': 'لم يُرصد أي نقل بيانات خارجي.', - 'privacy.whatLeavesComputer': 'ما يغادر جهازك', - 'privacy.loading': 'جارٍ تحميل تفاصيل الخصوصية...', - 'privacy.loadError': 'تعذّر تحميل قائمة الخصوصية المباشرة. لا تزال ضوابط التحليل أدناه تعمل.', - 'privacy.noCapabilities': 'لا توجد إمكانات تكشف عن حركة بيانات حاليًا.', - 'privacy.sentTo': 'مُرسَل إلى', - 'privacy.leavesDevice': 'يغادر الجهاز', - 'privacy.staysLocal': 'يبقى محليًا', - 'privacy.anonymizedAnalytics': 'تحليلات مجهولة الهوية', - 'privacy.shareAnonymizedData': 'مشاركة بيانات الاستخدام المجهولة', - 'privacy.shareAnonymizedDataDesc': - 'ساعد في تحسين OpenHuman من خلال مشاركة تقارير الأعطال وتحليلات الاستخدام المجهولة. جميع البيانات مجهولة الهوية تمامًا — لا يُجمع أي بيانات شخصية أو رسائل أو مفاتيح محفظة أو معلومات جلسة.', - 'privacy.meetingFollowUps': 'متابعات الاجتماعات', - 'privacy.autoHandoffMeet': 'تسليم نسخ Google Meet تلقائيًا إلى المنسق', - 'privacy.autoHandoffMeetDesc': - 'عند انتهاء مكالمة Google Meet، يمكن لمنسق OpenHuman قراءة النسخة المكتوبة واتخاذ إجراءات كصياغة الرسائل أو جدولة المتابعات أو نشر الملخصات في مساحة عمل Slack المتصلة. معطّل افتراضيًا.', - 'privacy.analyticsDisclaimer': - 'جميع التحليلات وتقارير الأخطاء مجهولة الهوية تمامًا. عند التفعيل، نجمع فقط معلومات الأعطال ونوع الجهاز وموقع الخطأ في الملف. لا نصل أبدًا إلى رسائلك أو بيانات جلستك أو مفاتيح المحفظة أو مفاتيح API أو أي معلومات شخصية. يمكنك تغيير هذا الإعداد في أي وقت.', - 'settings.about.version': 'الإصدار', - 'settings.about.updateAvailable': 'متاح', - 'settings.about.softwareUpdates': 'تحديثات البرنامج', - 'settings.about.lastChecked': 'آخر فحص', - 'settings.about.checking': 'جارٍ التحقق...', - 'settings.about.checkForUpdates': 'التحقق من التحديثات', - 'settings.about.releases': 'الإصدارات', - 'settings.about.releasesDesc': 'تصفح ملاحظات الإصدار والإصدارات السابقة على GitHub.', - 'settings.about.openReleases': 'فتح إصدارات GitHub', - 'settings.ai.overview': 'نظرة عامة على نظام الذكاء الاصطناعي', - 'migration.title': 'استيراد من مساعد آخر', - 'migration.description': - 'انقل الذاكرة والملاحظات من مساعد محلي آخر إلى مساحة العمل هذه. ابدأ بـ«معاينة» لرؤية ما سيتغير، ثم اضغط «تطبيق» لنسخ البيانات. يتم نسخ ذاكرتك الحالية احتياطيًا أولًا.', - 'migration.vendorLabel': 'المصدر', - 'migration.sourceLabel': 'مسار مساحة العمل المصدر (اختياري)', - 'migration.sourcePlaceholder': 'اتركه فارغًا للاكتشاف التلقائي (مثال: ~/.openclaw/workspace)', - 'migration.sourcePlaceholderHermes': 'Leave blank to auto-detect (e.g. ~/.hermes)', - 'migration.sourceHint': - 'يستخدم الموقع الافتراضي للمصدر عند تركه فارغًا. حدد مسارًا صريحًا إذا نقلت مساحة العمل إلى مكان آخر.', - 'migration.previewAction': 'معاينة', - 'migration.previewRunning': 'جاري المعاينة…', - 'migration.applyAction': 'تطبيق الاستيراد', - 'migration.applyRunning': 'جاري الاستيراد…', - 'migration.applyDisclaimer': - 'يُفتح التطبيق فقط بعد معاينة ناجحة لنفس المصدر. يتم نسخ الذاكرة الحالية احتياطيًا قبل أي استيراد.', - 'migration.reportTitlePreview': 'معاينة — لم يُستورد شيء بعد', - 'migration.reportTitleApplied': 'اكتمل الاستيراد', - 'migration.report.source': 'مساحة العمل المصدر', - 'migration.report.target': 'مساحة العمل الهدف', - 'migration.report.fromSqlite': 'من SQLite (brain.db)', - 'migration.report.fromMarkdown': 'من Markdown', - 'migration.report.imported': 'مُستورد', - 'migration.report.skippedUnchanged': 'تم تخطّيه (دون تغيير)', - 'migration.report.renamedConflicts': 'تمت إعادة التسمية عند التعارض', - 'migration.report.warnings': 'تحذيرات', - 'migration.report.previewHint': 'لم تُستورد أي بيانات بعد. اضغط «تطبيق الاستيراد» للنسخ.', - 'migration.report.appliedHint': - 'العناصر المستوردة أصبحت الآن في ذاكرتك. أعد تشغيل «المعاينة» للمقارنة مرة أخرى.', - 'migration.confirmImport.singular': - 'استيراد {count} عنصر إلى مساحة العمل الحالية؟\n\nالمصدر: {source}\nالهدف: {target}\n\nسيتم نسخ الذاكرة الحالية احتياطيًا قبل بدء الاستيراد.', - 'migration.confirmImport.plural': - 'استيراد {count} عنصر إلى مساحة العمل الحالية؟\n\nالمصدر: {source}\nالهدف: {target}\n\nسيتم نسخ الذاكرة الحالية احتياطيًا قبل بدء الاستيراد.', - // Settings menu: Appearance + Mascot (#2225) — English stubs; native translations welcome - 'settings.appearance': 'المظهر', - 'settings.appearanceDesc': 'اختر لونًا فاتحًا أو داكنًا أو قم بمطابقة سمة النظام لديك', - 'settings.mascot': 'التميمة', - 'settings.mascotDesc': 'اختر لون التميمة المستخدم عبر التطبيق', - 'channels.authMode.managed_dm': 'قم بتسجيل الدخول باستخدام OpenHuman', - 'channels.authMode.oauth': 'OAuth تسجيل الدخول', - 'channels.authMode.bot_token': 'استخدم رمز الروبوت الخاص بك', - 'channels.authMode.api_key': 'استخدم مفتاح API الخاص بك', - 'channels.fieldRequired': '{field} مطلوب', - 'channels.mcp.title': 'MCP الخوادم', - 'channels.mcp.description': - 'Browse and manage Model Context Protocol servers that extend the AI with new tools.', - 'skills.integrationsSubtitle': - 'Cloud-based OAuth connections — sign in with your account and Composio brokers the tokens so agents can read and act on your behalf. No API keys to manage.', - 'skills.tabs.composio': 'Composio', - 'skills.tabs.channels': 'القنوات', - 'skills.tabs.mcp': 'MCP الخوادم', - 'skills.mcpComingSoon.title': 'MCP الخوادم', - 'skills.mcpComingSoon.description': - 'MCP server management is coming soon. This tab will be the home for discovering, connecting, and monitoring your MCP server integrations.', - 'settings.about.connection': 'اتصال', - 'settings.about.connectionMode': 'الوضع', - 'settings.about.connectionModeLocal': 'محلي', - 'settings.about.connectionModeCloud': 'السحابة', - 'settings.about.connectionModeUnset': 'لم يتم التحديد', - 'settings.about.serverUrl': 'الخادم URL', - 'settings.about.serverUrlUnavailable': 'غير متاح', - 'settings.about.connectionHelperLocal': - 'Spawned in-process by the Tauri shell on app launch. The port is chosen at startup, so this URL changes between launches.', - 'settings.about.connectionHelperCloud': - 'Connected to a remote core. Change this in BootCheck or the cloud mode picker.', - 'settings.heartbeat.title': 'نبضات القلب والحلقات', - 'settings.heartbeat.desc': 'التحكم في إيقاعات جدولة الخلفية وفحص خريطة الحلقة.', - 'settings.ledgerUsage.title': 'دفتر الأستاذ الاستخدام', - 'settings.ledgerUsage.desc': 'Recent credit spend, budget math, and background API read budget.', - 'settings.costDashboard.title': 'Cost dashboard', - 'settings.costDashboard.desc': - '7-day spend and token burn across the swarm, with budget pace and per-model breakdown.', - 'settings.costDashboard.sevenDayCost': '7-day daily cost', - 'settings.costDashboard.sevenDayTokens': '7-day token usage', - 'settings.costDashboard.totalSpend': '7-day total', - 'settings.costDashboard.monthlyPace': 'Monthly pace', - 'settings.costDashboard.budgetLimit': 'Budget limit', - 'settings.costDashboard.utilization': 'Utilisation', - 'settings.costDashboard.modelBreakdown': 'Per-model breakdown', - 'settings.costDashboard.model': 'Model', - 'settings.costDashboard.provider': 'Provider', - 'settings.costDashboard.cost': 'Cost', - 'settings.costDashboard.tokens': 'Tokens', - 'settings.costDashboard.requests': 'Requests', - 'settings.costDashboard.percentOfTotal': '% of total', - 'settings.costDashboard.inputTokens': 'Input', - 'settings.costDashboard.outputTokens': 'Output', - 'settings.costDashboard.budgetNormal': 'On track', - 'settings.costDashboard.budgetWarning': 'Warning', - 'settings.costDashboard.budgetExceeded': 'Over budget', - 'settings.costDashboard.noBudget': 'No limit set', - 'settings.costDashboard.noData': 'No cost recorded yet for the last 7 days.', - 'settings.costDashboard.noModels': 'No model activity in the last 7 days.', - 'settings.costDashboard.loading': 'Loading cost dashboard…', - 'settings.costDashboard.disabledHint': - 'Cost dashboard is disabled in config. Set [cost.dashboard] enabled = true in config.toml to re-enable.', - 'settings.costDashboard.subtitle': - 'Live spend and token burn across the swarm. Bars auto-refresh every few seconds — no page reload needed.', - 'settings.costDashboard.summaryAriaLabel': 'Cost summary metrics', - 'settings.costDashboard.lastSevenDays': 'last 7 days', - 'settings.costDashboard.utilizationOf': 'of', - 'settings.costDashboard.thisMonth': 'this month', - 'settings.costDashboard.monthlyPaceHint': - 'Projected monthly spend at the current daily run-rate (avg × 30).', - 'settings.costDashboard.budgetLimitHint': - 'Monthly budget read from cost.monthly_limit_usd in config.toml.', - 'settings.costDashboard.dailyTarget': 'Daily target', - 'settings.costDashboard.today': 'Today', - 'settings.costDashboard.todayBadge': 'TODAY', - 'settings.costDashboard.unknownProvider': '—', - 'settings.costDashboard.justNow': 'Just now', - 'settings.costDashboard.secondsAgo': '{value}s ago', - 'settings.costDashboard.minutesAgo': '{value}m ago', - 'settings.costDashboard.hoursAgo': '{value}h ago', - 'settings.costDashboard.daysAgo': '{value}d ago', - 'settings.costDashboard.updated': 'Updated', - 'settings.costDashboard.refresh': 'Refresh', - 'settings.costDashboard.utcNote': 'Days bucketed in UTC', - 'settings.costDashboard.stackedNote': 'Input + output stacked', - 'settings.costDashboard.modelBreakdownHint': 'Aggregated across the last 7 days.', - 'settings.costDashboard.noDataHint': - 'Send an agent message — token usage from the next provider call will populate the chart within ~10 seconds.', - 'settings.search.title': 'محرك البحث', - 'settings.search.menuDesc': - 'Default to OpenHuman-managed search or wire up your own provider with an API key.', - 'settings.search.description': - 'Pick the search engine the agent uses. Managed uses OpenHuman’s backend (no setup). Parallel and Brave run direct from your machine using your API key.', - 'settings.search.engineAria': 'محرك البحث', - 'settings.search.engineManagedLabel': 'OpenHuman مُدار', - 'settings.search.engineManagedDesc': - 'Default. Routed through the OpenHuman backend — no API key required.', - 'settings.search.engineParallelLabel': 'Parallel', - 'settings.search.engineParallelDesc': - 'Direct Parallel API: search, extract, chat, research, enrich, dataset tools.', - 'settings.search.engineBraveLabel': 'Brave بحث', - 'settings.search.engineBraveDesc': 'مباشر Brave بحث API: أدوات الويب والأخبار والصور والفيديو.', - 'settings.search.engineQueritLabel': 'Querit', - 'settings.search.engineQueritDesc': - 'Direct Querit API: web search with site, time range, country, and language filters.', - 'settings.search.statusConfigured': 'تم تكوينه', - 'settings.search.statusNeedsKey': 'يحتاج إلى مفتاح API', - 'settings.search.fallbackToManaged': - 'No key configured — search will fall back to Managed until a key is saved.', - 'settings.search.getApiKey': 'احصل على مفتاح API', - 'settings.search.save': 'احفظ', - 'settings.search.clear': 'مسح', - 'settings.search.show': 'عرض', - 'settings.search.hide': 'إخفاء', - 'settings.search.statusSaving': 'جاري الحفظ…', - 'settings.search.statusSaved': 'تم الحفظ.', - 'settings.search.statusError': 'فشل', - 'settings.search.parallelKeyLabel': 'Parallel API مفتاح', - 'settings.search.braveKeyLabel': 'Brave بحث API مفتاح', - 'settings.search.queritKeyLabel': 'Querit API key', - 'settings.search.placeholderStored': '•••••••• (مخزن)', - 'settings.search.placeholderParallel': 'pk_...', - 'settings.search.placeholderBrave': 'BSA...', - 'settings.search.placeholderQuerit': 'Querit API key', - 'settings.embeddings.title': 'التضمينات', - 'settings.embeddings.description': - 'اختر مزود التضمينات الذي يحول الذاكرة إلى متجهات للبحث الدلالي. تغيير المزود أو النموذج أو الأبعاد يبطل المتجهات المخزنة ويتطلب إعادة تعيين كاملة للذاكرة.', - 'settings.embeddings.providerAria': 'مزود التضمينات', - 'settings.embeddings.statusConfigured': 'تم التهيئة', - 'settings.embeddings.statusNeedsKey': 'يحتاج مفتاح API', - 'settings.embeddings.apiKeyLabel': 'مفتاح API لـ {provider}', - 'settings.embeddings.placeholderStored': '•••••••• (مخزن)', - 'settings.embeddings.placeholderKey': 'الصق مفتاح API الخاص بك…', - 'settings.embeddings.keyStoredEncrypted': 'يتم تخزين مفتاح API الخاص بك مشفرًا على هذا الجهاز.', - 'settings.embeddings.show': 'إظهار', - 'settings.embeddings.hide': 'إخفاء', - 'settings.embeddings.save': 'حفظ', - 'settings.embeddings.clear': 'مسح', - 'settings.embeddings.model': 'النموذج', - 'settings.embeddings.dimensions': 'الأبعاد', - 'settings.embeddings.customEndpoint': 'نقطة نهاية مخصصة', - 'settings.embeddings.customModelPlaceholder': 'اسم النموذج', - 'settings.embeddings.customDimsPlaceholder': 'الأبعاد', - 'settings.embeddings.applyCustom': 'تطبيق', - 'settings.embeddings.testConnection': 'اختبار الاتصال', - 'settings.embeddings.testing': 'جارٍ الاختبار…', - 'settings.embeddings.testSuccess': 'متصل — {dims} بُعد', - 'settings.embeddings.testFailed': 'فشل: {error}', - 'settings.embeddings.saving': 'جارٍ الحفظ…', - 'settings.embeddings.saved': 'تم الحفظ.', - 'settings.embeddings.errorPrefix': 'فشل', - 'settings.embeddings.wipeTitle': 'إعادة تعيين متجهات الذاكرة؟', - 'settings.embeddings.wipeBody': - 'سيؤدي تغيير مزود التضمينات أو النموذج أو الأبعاد إلى مسح جميع متجهات الذاكرة المخزنة. يجب إعادة بناء الذاكرة قبل أن يعمل الاسترجاع مرة أخرى. لا يمكن التراجع عن هذا.', - 'settings.embeddings.cancel': 'إلغاء', - 'settings.embeddings.confirmWipe': 'مسح وتطبيق', - 'settings.embeddings.setupTitle': 'إعداد {provider}', - 'settings.embeddings.saveAndSwitch': 'حفظ والتبديل', - 'settings.embeddings.optional': 'اختياري', - 'settings.embeddings.vectorSearchDisabled': - 'Vector search is disabled. Memory recall will use keyword matching and recency only — no semantic ranking.', - 'settings.embeddings.clearKey': 'مسح مفتاح API', - 'mcp.alphaBadge': 'Alpha', - 'mcp.alphaBannerText': - 'MCP server support is in early alpha. The Smithery registry, install flow, and tool wiring may misbehave or change shape between releases.', - 'mcp.toolList.noTools': 'لا توجد أدوات متاحة.', - 'mcp.setup.secretDialog.title': 'MCP الإعداد - أدخل السر', - 'mcp.setup.secretDialog.bodyPrefix': 'يحتاج وكيل الإعداد MCP', - 'mcp.setup.secretDialog.bodySuffix': - '. Your value is sent directly to the core process and never enters the AI conversation.', - 'mcp.setup.secretDialog.inputLabel': 'القيمة', - 'mcp.setup.secretDialog.inputPlaceholder': 'الصق هنا', - 'mcp.setup.secretDialog.show': 'عرض', - 'mcp.setup.secretDialog.hide': 'إخفاء', - 'mcp.setup.secretDialog.submit': 'إرسال', - 'mcp.setup.secretDialog.cancel': 'إلغاء', - 'mcp.setup.secretDialog.submitting': 'الإرسال...', - 'mcp.setup.secretDialog.errorPrefix': 'فشل الإرسال:', - 'mcp.setup.secretDialog.privacyNote': - 'Stored encrypted in the local MCP secrets table. Never logged or sent to a model.', - 'devices.betaBadge': 'تجريبي', - 'devices.betaText': - 'This feature is currently in beta. Pair iOS phones with this OpenHuman to use them as a remote client.', - 'autonomy.title': 'استقلالية الوكيل', - 'autonomy.maxActionsLabel': 'الحد الأقصى للإجراءات في الساعة', - 'autonomy.maxActionsHelp': - 'Maximum tool actions an agent can run per rolling hour. New value applies to your next chat. Cron jobs and channel listeners keep their current limit until you restart OpenHuman.', - 'autonomy.statusSaving': 'جارٍ الحفظ...', - 'autonomy.statusSaved': 'تم الحفظ.', - 'autonomy.statusFailed': 'فشل', - 'autonomy.unlimitedNote': 'غير محدود — تم تعطيل تحديد المعدل.', - 'autonomy.invalidIntegerMsg': - 'Must be a positive integer (use the Unlimited preset for no limit).', - 'autonomy.presetUnlimited': 'غير محدود (افتراضي)', - 'triggers.toggleFailed': '{action} فشل لـ {trigger}: {message}', - 'skills.composio.noApiKeyTitle': 'لا Composio API تم تكوين المفتاح', - 'skills.composio.noApiKeyDescription': - 'Local mode uses your own Composio API key. Open Settings → Advanced → Composio to add one before connecting integrations here.', - 'skills.composio.noApiKeyCta': 'مفتوح في الإعدادات', - 'rewards.localUnavailable': - 'Local login does not earn rewards, coupons, or referral credit. To earn rewards, log out and continue by signing in with an OpenHuman account.', - 'rewards.localUnavailableCta': 'افتح إعدادات الحساب', - 'channels.localManagedUnavailable': 'القنوات المُدارة غير متاحة للمستخدمين المحليين.', - 'settings.search.localManagedUnavailable': - 'OpenHuman Managed search is not available for local users. Add your own Parallel, Brave, or Querit API key to enable web search.', - 'devices.comingSoonDescription': - 'Device pairing is coming soon. This page will be the home for pairing iPhones and managing connected devices.', - 'common.breadcrumb': 'مسار التنقل', - 'settings.betaBuild': 'إصدار تجريبي - v{version}', - 'migration.vendor.openclaw': 'OpenClaw', - 'migration.vendor.hermes': 'Hermes Agent', - 'onboarding.apiKeys.openaiOauthHint': - 'استخدم ChatGPT Plus/Pro (اشتراك) أو مفتاح OpenAI API، ولا تحتاج إلى كليهما.', - 'onboarding.apiKeys.openaiOauthOpening': 'جارٍ فتح تسجيل الدخول…', - 'onboarding.apiKeys.finishSignIn': 'أكمل تسجيل الدخول إلى ChatGPT', - 'onboarding.apiKeys.orApiKey': 'أو مفتاح API', - 'calls.title': 'المكالمات', - 'calls.comingSoonBody': 'المكالمات المدعومة بالذكاء الاصطناعي قادمة قريبًا. ترقّبها.', - 'rewards.referralSection.retry': 'إعادة المحاولة', - 'devOptions.sentryDisabled': '(لا يوجد معرّف — تم تعطيل Sentry في هذا الإصدار)', - 'home.usageExhaustedTitle': 'لقد استنفدت حصتك', - 'home.usageExhaustedBody': 'لقد نفدت حصتك المضمنة حالياً. ابدأ اشتراكاً لفتح سعة إضافية مستمرة.', - 'home.usageExhaustedCta': 'ابدأ الاشتراك', - 'home.routinesCard': 'Your Routines', - 'home.routinesActive': '{count} active', - 'routines.title': 'Your Routines', - 'routines.subtitle': 'Things your assistant does automatically', - 'routines.loading': 'Loading routines…', - 'routines.empty': 'No routines yet', - 'routines.emptyHint': - 'Your assistant can run tasks on a schedule — like morning briefings or daily summaries.', - 'routines.refresh': 'Refresh', - 'routines.nextRun': 'Next run', - 'routines.lastRunSuccess': 'Last run succeeded', - 'routines.lastRunFailed': 'Last run failed', - 'routines.notRunYet': 'Not run yet', - 'routines.runNow': 'Run Now', - 'routines.running': 'Running…', - 'routines.viewHistory': 'View history', - 'routines.loadingHistory': 'Loading…', - 'routines.noHistory': 'No run history yet.', - 'routines.statusSuccess': 'Success', - 'routines.statusError': 'Error', - 'routines.showOutput': 'Show output', - 'routines.hideOutput': 'Hide output', - 'routines.toggleEnabled': 'Enable or disable this routine', - 'routines.typeAgent': 'Agent', - 'routines.typeCommand': 'Command', - 'nav.routines': 'Routines', - 'common.name': 'الاسم', - 'settings.ai.disconnectProvider': 'قطع الاتصال {label}', - 'settings.ai.connectProviderLabel': 'الاتصال {label}', - 'settings.ai.defaultLocalEndpoint': 'http://localhost:11434/v1', - 'settings.ai.endpointUrlLabel': 'نقطة النهاية URL', - 'settings.ai.localRuntimeHelper': - 'Where {label} is reachable. Default is localhost; point this at a remote host (for example, http://10.0.0.4:11434/v1) to use a shared instance.', - 'settings.ai.endpointUrlRequired': 'نقطة النهاية URL مطلوبة.', - 'settings.ai.endpointProtocolRequired': 'يجب أن تبدأ نقطة النهاية بـ http:// أو https://.', - 'settings.ai.connectProviderDialog': 'الاتصال {label}', - 'settings.ai.or': 'أو', - 'settings.ai.openRouterOauthDescription': - 'Sign in with OpenRouter and import a user-controlled API key using PKCE.', - 'settings.ai.connecting': 'جارٍ الاتصال...', - 'settings.ai.backgroundLoops': 'حلقات الخلفية', - 'settings.ai.backgroundLoopsDesc': - 'See what runs without a chat message, pause heartbeat work, and inspect recent credit ledger rows.', - 'settings.ai.heartbeatControls': 'التحكم في نبضات القلب', - 'settings.ai.heartbeatControlsDesc': - 'Defaults off. Enabling starts the loop; disabling aborts the running task.', - 'settings.ai.heartbeatLoop': 'حلقة نبضات القلب', - 'settings.ai.heartbeatLoopDesc': - 'Master scheduler for planner + optional subconscious inference.', - 'settings.ai.subconsciousInference': 'الاستدلال اللاواعي', - 'settings.ai.subconsciousInferenceDesc': - 'Runs model-backed task/reflection evaluation on heartbeat ticks.', - 'settings.ai.calendarMeetingChecks': 'يتحقق اجتماع التقويم', - 'settings.ai.calendarMeetingChecksDesc': - 'Calls calendar event list for active Google Calendar connections.', - 'settings.ai.calendarCap': 'غطاء التقويم', - 'settings.ai.connectionsPerTick': '{count} conn/tick', - 'settings.ai.meetingLookahead': 'نظرة أمامية للاجتماع', - 'settings.ai.minutesShort': '{count} دقيقة', - 'settings.ai.reminderLookahead': 'نظرة أمامية للتذكير', - 'settings.ai.cronReminderChecks': 'التحقق من تذكير Cron', - 'settings.ai.cronReminderChecksDesc': 'Scans enabled cron jobs for reminder-like upcoming items.', - 'settings.ai.relevantNotificationChecks': 'عمليات التحقق من الإشعارات ذات الصلة', - 'settings.ai.relevantNotificationChecksDesc': - 'Promotes urgent local notifications into proactive alerts.', - 'settings.ai.externalDelivery': 'التسليم الخارجي', - 'settings.ai.externalDeliveryDesc': - 'Lets heartbeat alerts send proactive messages to external channels.', - 'settings.ai.interval': 'الفاصل الزمني', - 'settings.ai.running': 'قيد التشغيل...', - 'settings.ai.plannerTickNow': 'علامة المخطط الآن', - 'settings.ai.loadingHeartbeatControls': 'جارٍ تحميل عناصر التحكم في نبضات القلب...', - 'settings.ai.heartbeatControlsUnavailable': 'عناصر التحكم في نبضات القلب غير متاحة.', - 'settings.ai.loopMap': 'خريطة حلقة', - 'settings.ai.on': 'على', - 'settings.ai.off': 'إيقاف', - 'settings.ai.recentUsageLedger': 'دفتر أستاذ الاستخدام الأخير', - 'settings.ai.recentUsageLedgerDesc': - 'Backend rows expose action/time today; source tags need backend support.', - 'settings.ai.openhumanDefault': 'OpenHuman (افتراضي)', - 'settings.ai.localModelResolved': 'Ollama · {model}', - 'settings.ai.customRoutingForWorkload': 'التوجيه المخصص لـ {label}', - 'settings.ai.loadingModels': 'جارٍ تحميل النماذج...', - 'settings.ai.enterModelIdManually': 'أو أدخل معرف النموذج يدويًا:', - 'settings.ai.modelIdPlaceholderForProvider': '{slug} معرف النموذج', - 'settings.ai.modelIdPlaceholder': 'model-id', - 'settings.ai.selectModel': 'حدد نموذجًا...', - 'settings.ai.temperatureOverride': 'تجاوز درجة الحرارة', - 'settings.ai.temperatureOverrideSlider': 'تجاوز درجة الحرارة (شريط التمرير)', - 'settings.ai.temperatureOverrideValue': 'تجاوز درجة الحرارة (القيمة)', - 'settings.ai.temperatureOverrideDesc': - 'Lower = more deterministic. Leave unchecked to use the provider default.', - 'settings.ai.testFailed': 'فشل الاختبار', - 'settings.ai.testingModel': 'نموذج الاختبار...', - 'settings.ai.modelResponse': 'استجابة النموذج', - 'settings.ai.providerWithValue': 'الموفر: {value}', - 'settings.ai.noneDash': '—', - 'settings.ai.promptHelloWorld': 'موجه: مرحبًا بالعالم', - 'settings.ai.startedAt': 'البداية: {value}', - 'settings.ai.waitingForModelResponse': 'في انتظار الاستجابة من النموذج المحدد...', - 'settings.ai.response': 'الاستجابة', - 'settings.ai.testing': 'جارٍ الاختبار...', - 'settings.ai.test': 'اختبار', - 'settings.ai.slugMissingError': 'أدخل اسم الموفر لإنشاء سبيكة ثابتة.', - 'settings.ai.slugInUseError': 'اسم الموفر هذا قيد الاستخدام بالفعل.', - 'settings.ai.slugReservedError': 'اختر اسم موفر مختلف.', - 'settings.ai.providerNamePlaceholder': 'موفر الخدمة الخاص بي', - 'settings.ai.slugLabel': 'الارتباط الثابت:', - 'settings.ai.openAiUrlLabel': 'OpenAI URL', - 'settings.ai.openAiUrlPlaceholder': 'https://api.openai.com/v1', - 'settings.ai.keepExistingKeyPlaceholder': 'اتركه فارغًا للاحتفاظ بالمفتاح الموجود', - 'settings.ai.reindexingMemory': 'إعادة فهرسة الذاكرة', - 'settings.ai.reindexingMemoryMessage': - 'Embeddings are being reprocessed. {pending} memory item(s) are being re-embedded under the current model — semantic recall is reduced until this finishes. Keyword search keeps working, and re-embedding continues in the background if you close this.', - 'settings.ai.signInWithOpenRouter': 'قم بتسجيل الدخول باستخدام OpenRouter', - 'settings.ai.weekBudget': 'ميزانية الأسبوع', - 'settings.ai.cycleRemaining': 'الدورة المتبقية', - 'settings.ai.cycleTotalSpend': 'إجمالي إنفاق الدورة', - 'settings.ai.avgSpendRow': 'متوسط صف الإنفاق', - 'settings.ai.backgroundApiReads': 'Bg API يقرأ', - 'settings.ai.backgroundWakeups': 'تنبيهات Bg', - 'settings.ai.budgetMath': 'حسابات الميزانية', - 'settings.ai.rowsLeft': 'الصفوف المتبقية', - 'settings.ai.rowsPerFullWeekBudget': 'الصفوف لكل ميزانية أسبوع كامل', - 'settings.ai.sampleBurnRate': 'معدل حرق العينة', - 'settings.ai.projectedEmpty': 'فارغ متوقع', - 'settings.ai.apiReadsPerDollarRemaining': 'API عدد القراءات لكل دولار متبقي', - 'settings.ai.loopCallBudget': 'ميزانية المكالمة المتكررة', - 'settings.ai.heartbeatTicks': 'علامات نبضات القلب', - 'settings.ai.calendarPlannerCalls': 'يستدعي مخطط التقويم', - 'settings.ai.calendarFanoutCap': 'غطاء التوزيع الموسع للتقويم', - 'settings.ai.subconsciousModelCalls': 'يستدعي نموذج اللاوعي', - 'settings.ai.composioSyncScans': 'Composio عمليات مسح المزامنة', - 'settings.ai.totalBackgroundApiReadBudget': 'إجمالي bg API ميزانية القراءة', - 'settings.ai.memoryWorkerPolls': 'استطلاعات عاملي الذاكرة', - 'settings.ai.defaultProviderName': 'OpenHuman', - 'settings.ai.routing.managed': 'المُدارة', - 'settings.ai.routing.managedDesc': - 'OpenHuman will run all inference in the cloud, choose the best model for the task, optimize for cost, and keep the safest routing defaults.', - 'settings.ai.routing.managedMsg': - 'OpenHuman will handle all inference for every workload and automatically choose the best route for cost, quality, and security.', - 'settings.ai.routing.useYourOwn': 'استخدم النماذج الخاصة بك', - 'settings.ai.routing.useYourOwnDesc': - 'Choose one provider + model and route every workload through it. This is simple, but it can be inefficient because lightweight and heavyweight inference all share the same route.', - 'settings.ai.routing.advanced': 'متقدم', - 'settings.ai.routing.advancedDesc': - 'Pick different models for different tasks. This is the best option for tight cost optimization and the most control.', - 'settings.ai.routing.customDesc': - 'Fine-grained routing gives you the best cost optimization and the most control. Use the rows below to decide which workloads stay Managed, which use your shared default, and which pin to a specific model.', - 'settings.ai.routing.chatAndConversations': 'الدردشة والمحادثات', - 'settings.ai.routing.chatDesc': - 'Models used during direct user interaction, replies, reasoning, agent loops, and coding help.', - 'settings.ai.routing.backgroundTasks': 'مهام الخلفية', - 'settings.ai.routing.bgTasksDesc': - 'Models used outside the main conversation flow for summarization, heartbeat, learning, and subconscious evaluation.', - 'settings.ai.routing.addCustomProvider': 'إضافة موفر مخصص', - 'settings.ai.globalModel.title': 'اختر نموذجًا واحدًا لكل شيء', - 'settings.ai.globalModel.desc': - 'This routes all inference through one model. It is simpler, but it can be inefficient for cost and quality because lightweight and heavy tasks will all use the same route.', - 'settings.ai.globalModel.noProviders': - 'Add or connect a provider first. Then you can route every workload through one model here.', - 'settings.ai.globalModel.provider': 'الموفر', - 'settings.ai.globalModel.model': 'الموديل', - 'settings.ai.globalModel.loadingModels': 'جارٍ تحميل النماذج...', - 'settings.ai.globalModel.enterModelId': 'أدخل معرف النموذج', - 'settings.ai.globalModel.appliesToAll': - 'Applies the same provider + model to chat, reasoning, coding, memory, heartbeat, learning, and subconscious. Embeddings are configured separately. Changes save when you click save.', - 'settings.ai.globalModel.saving': 'جاري الحفظ...', - 'settings.ai.globalModel.saved': 'تم الحفظ', - 'settings.ai.workload.noModel': 'لم يتم تحديد نموذج', - 'settings.ai.workload.changeModel': 'تغيير النموذج', - 'settings.ai.workload.chooseModel': 'اختر النموذج', - 'settings.ai.provider.ollama': 'Ollama', - 'kbd.ariaLabel': 'اختصار لوحة المفاتيح: {shortcut}', - 'chat.modelPlaceholder': 'gpt-4o', - 'iosPair.title': 'الإقران مع سطح المكتب', - 'iosPair.instructions': - 'Open OpenHuman on your desktop, go to Settings > Devices, and tap "Pair phone" to show the QR code.', - 'iosPair.scanQrCode': 'المسح الضوئي QR code', - 'iosPair.scannerOpening': 'فتح الماسح الضوئي...', - 'iosPair.connecting': 'جارٍ الاتصال بسطح المكتب...', - 'iosPair.connectedLoading': 'متصل! جارٍ التحميل...', - 'iosPair.expired': 'QR code انتهت صلاحيته. اطلب من سطح المكتب إعادة إنشاء الرمز.', - 'iosPair.desktopLabel': 'سطح المكتب', - 'iosPair.retryScan': 'أعد محاولة المسح', - 'iosPair.step.openDesktop': 'افتح OpenHuman على سطح المكتب', - 'iosPair.step.openSettings': 'انتقل إلى الإعدادات > الأجهزة', - 'iosPair.step.showQr': 'اضغط على "إقران الهاتف" لإظهار QR', - 'iosPair.error.camera': 'فشل فحص الكاميرا. تحقق من أذونات الكاميرا وحاول مرة أخرى.', - 'iosPair.error.invalidQr': - 'Invalid QR code. Make sure you are scanning an OpenHuman pairing code.', - 'iosPair.error.unreachableDesktop': - 'Could not reach the desktop. Make sure both devices are online and try again.', - 'iosPair.error.connectionFailed': - 'Connection failed. Make sure the desktop app is running and try again.', - 'iosMascot.defaultPairedLabel': 'سطح المكتب', - 'iosMascot.connectedTo': 'متصل بـ', - 'iosMascot.disconnect': 'قطع الاتصال', - 'iosMascot.pushToTalk': 'اضغط لتتحدث', - 'iosMascot.thinking': 'أفكر...', - 'iosMascot.typeMessage': 'اكتب أ رسالة...', - 'iosMascot.sendMessage': 'أرسل رسالة', - 'iosMascot.error.generic': 'حدث خطأ ما. يرجى المحاولة مرة أخرى.', - 'iosMascot.error.sendFailed': 'فشل الإرسال. تحقق من اتصالك.', - 'settings.companion.title': 'رفيق سطح المكتب', - 'settings.companion.session': 'الجلسة', - 'settings.companion.activeLabel': 'نشط', - 'settings.companion.inactiveStatus': 'غير نشط', - 'settings.companion.stopping': 'إيقاف...', - 'settings.companion.stopSession': 'إيقاف الجلسة', - 'settings.companion.starting': 'البدء...', - 'settings.companion.startSession': 'بدء الجلسة', - 'settings.companion.sessionId': 'معرف الجلسة', - 'settings.companion.turns': 'يتحول إلى', - 'settings.companion.remaining': 'تكوين', - 'settings.companion.configuration': 'المتبقي', - 'settings.companion.hotkey': 'مفتاح التشغيل السريع', - 'settings.companion.activationMode': 'وضع التنشيط', - 'settings.companion.sessionTtl': 'جلسة TTL', - 'settings.companion.screenCapture': 'لقطة الشاشة', - 'settings.companion.appContext': 'سياق التطبيق', - 'settings.composio.title': 'Composio', - 'settings.composio.apiKeyExamplePlaceholder': 'ck_live_xxxxxxxxxxxxxxxxxx', - 'composio.integrationSlugsHelp': 'التكامل المفصول بفواصل الرخويات، على سبيل المثال.', - 'composio.integrationSlugsExample': 'gmail، slack', - 'composio.integrationSlugsCaseInsensitive': 'غير حساس لحالة الأحرف.', - 'composio.integrationSlugsPlaceholder': 'gmail، slack، ...', - 'team.members': 'الأعضاء', - 'team.membersDesc': 'إدارة أعضاء الفريق وأدواره', - 'team.invites': 'الدعوات', - 'team.invitesDesc': 'إنشاء رموز الدعوة وإدارتها', - 'team.settings': 'إعدادات الفريق', - 'team.settingsDesc': 'تحرير اسم الفريق وإعداداته', - 'team.editSettings': 'تحرير إعدادات الفريق', - 'team.enterName': 'أدخل اسم الفريق', - 'team.saving': 'جاري الحفظ...', - 'team.saveChanges': 'حفظ التغييرات', - 'team.delete': 'حذف الفريق', - 'team.deleteDesc': 'حذف هذا الفريق نهائيًا', - 'team.deleting': 'جارٍ الحذف...', - 'team.failedToUpdate': 'فشل تحديث الفريق', - 'team.failedToDelete': 'فشل حذف الفريق', - 'team.manageTitle': 'إدارة {name}', - 'team.planCreated': '{plan} الخطة • تم الإنشاء {date}', - 'team.confirmDelete': 'هل أنت متأكد من أنك تريد حذف {name}؟', - 'team.deleteWarning': 'لا يمكن التراجع عن هذا الإجراء. ستتم إزالة جميع بيانات الفريق نهائيًا.', - 'welcome.clearingAppData': 'مسح بيانات التطبيق...', - 'welcome.clearAppDataAndRestart': 'مسح بيانات التطبيق وإعادة تشغيله', - 'welcome.clearAppDataWarning': - 'This wipes locally stored secrets and accounts on this device. Your cloud account is unaffected - you can sign in again right after.', - 'welcome.resetErrorFallback': - 'Could not clear app data. Please quit and reopen OpenHuman, then try again.', - 'welcome.signingIn': 'تسجيل دخولك...', - 'welcome.termsIntro': 'من خلال المتابعة، فإنك توافق على', - 'welcome.termsOfUse': 'الشروط', - 'welcome.termsJoiner': 'و', - 'welcome.privacyPolicy': 'سياسة الخصوصية', - 'welcome.termsOutro': '.', - 'chat.addReaction': 'إضافة تفاعل', - 'chat.agentProfile.create': 'إنشاء ملف تعريف الوكيل', - 'chat.agentProfile.createFailed': 'تعذر إنشاء ملف تعريف الوكيل.', - 'chat.agentProfile.customDescription': 'ملف تعريف الوكيل المخصص', - 'chat.agentProfile.defaultAgentLabel': 'المنسق', - 'chat.agentProfile.exists': 'ملف تعريف الوكيل "{name}" موجود بالفعل.', - 'chat.agentProfile.label': 'ملف تعريف الوكيل', - 'chat.agentProfile.namePlaceholder': 'اسم ملف التعريف', - 'chat.agentProfile.promptStylePlaceholder': 'نمط المطالبة', - 'chat.agentProfile.allowedToolsPlaceholder': 'الأدوات المسموح بها', - 'chat.backToThread': 'العودة إلى {title}', - 'chat.parentThread': 'الموضوع الأصلي', - 'chat.removeReaction': 'إزالة {emoji}', - 'invites.generate': 'إنشاء دعوة', - 'invites.generating': 'جارٍ إنشاء...', - 'invites.refreshing': 'تحديث الدعوات...', - 'invites.loading': 'تحميل الدعوات...', - 'invites.copyCodeAria': 'نسخ رمز الدعوة', - 'invites.revokeAria': 'إلغاء الدعوة', - 'invites.usedUp': 'تم استخدامه', - 'invites.uses': 'الاستخدامات: {current}{max}', - 'invites.expiresOn': 'تنتهي الصلاحية {date}', - 'invites.empty': 'لا توجد دعوات حتى الآن', - 'invites.emptyHint': 'إنشاء رمز دعوة للمشاركة مع الآخرين', - 'invites.revokeTitle': 'إلغاء رمز الدعوة', - 'invites.revokePromptPrefix': 'هل أنت متأكد من رغبتك في إلغاء رمز الدعوة', - 'invites.revokeWarning': - 'This invite code will no longer be valid and cannot be used to join the team.', - 'invites.revoking': 'إلغاء...', - 'invites.revokeAction': 'إلغاء الدعوة', - 'invites.failedGenerate': 'فشل إنشاء الدعوة', - 'invites.failedRevoke': 'فشل إلغاء الدعوة', - 'team.refreshingMembers': 'جارٍ تحديث الأعضاء...', - 'team.loadingMembers': 'جارٍ تحميل الأعضاء...', - 'team.memberCount': '{count} عضو', - 'team.memberCountPlural': '{count} أعضاء', - 'team.you': '(أنت)', - 'team.removeAria': 'إزالة {name}', - 'team.noMembers': 'لم يتم العثور على أعضاء', - 'team.removeTitle': 'إزالة عضو الفريق', - 'team.removePromptPrefix': 'هل أنت متأكد من أنك تريد إزالة', - 'team.removePromptSuffix': 'من الفريق؟', - 'team.removeWarning': 'سيفقدون إمكانية الوصول إلى الفريق وجميع موارد الفريق.', - 'team.removing': 'جارٍ الإزالة...', - 'team.removeAction': 'إزالة العضو', - 'team.changeRoleTitle': 'تغيير دور العضو', - 'team.changeRolePrompt': "Change {name}'s role from {oldRole} to {newRole}?", - 'team.changeRoleAdminGrant': - 'This will grant them full admin permissions including the ability to manage team members.', - 'team.changeRoleAdminRemove': - 'This will remove their admin permissions and they will no longer be able to manage the team.', - 'team.changing': 'جارٍ التغيير...', - 'team.changeRoleAction': 'تغيير الدور', - 'team.failedChangeRole': 'فشل تغيير الدور', - 'team.failedRemoveMember': 'فشلت إزالة العضو', - 'voice.failedToLoadSettings': 'فشل تحميل إعدادات الصوت', - 'voice.failedToSaveSettings': 'فشل في حفظ إعدادات الصوت', - 'voice.failedToStartServer': 'فشل في بدء تشغيل خادم الصوت', - 'voice.failedToStopServer': 'فشل في إيقاف خادم الصوت', - 'voice.sttDisabledPrefix': - 'Voice dictation is disabled until the local STT model is downloaded. Use the', - 'voice.sttDisabledSuffix': 'أعلاه لتثبيت Whisper.', - 'voice.debug.failedToLoadVoiceDebugData': 'فشل تحميل بيانات تصحيح الأخطاء الصوتية', - 'voice.debug.settingsSaved': 'تم حفظ إعدادات تصحيح الأخطاء.', - 'voice.debug.failedToSaveSettings': 'فشل حفظ إعدادات الصوت', - 'voice.debug.runtimeStatus': 'حالة وقت التشغيل', - 'voice.debug.runtimeStatusDesc': - 'Live diagnostics for the voice server and speech-to-text engine.', - 'voice.debug.server': 'الخادم', - 'voice.debug.unavailable': 'غير متاح', - 'voice.debug.ready': 'جاهز', - 'voice.debug.notReady': 'غير جاهز', - 'voice.debug.hotkey': 'مفتاح التشغيل السريع', - 'voice.debug.notAvailable': 'غير متوفر', - 'voice.debug.mode': 'الوضع', - 'voice.debug.transcriptions': 'النسخ', - 'voice.debug.serverError': 'خطأ في الخادم', - 'voice.debug.advancedSettings': 'الإعدادات المتقدمة', - 'voice.debug.advancedSettingsDesc': - 'Low-level tuning parameters for recording and silence detection.', - 'voice.debug.minimumRecordingSeconds': 'الحد الأدنى لثواني التسجيل', - 'voice.debug.silenceThreshold': 'عتبة الصمت (RMS)', - 'voice.debug.silenceThresholdDesc': - 'Recordings with energy below this are treated as silence and skipped. Lower = more sensitive.', - 'voice.providers.saved': 'تم حفظ موفري الصوت.', - 'voice.providers.failedToSave': 'فشل في حفظ موفري الصوت', - 'voice.providers.ellipsis': '…', - 'voice.providers.installing': 'تثبيت', - 'voice.providers.installingBusy': 'جارٍ التثبيت...', - 'voice.providers.reinstallLocally': 'إعادة التثبيت محليًا', - 'voice.providers.repair': 'إصلاح', - 'voice.providers.retryLocally': 'أعد المحاولة محليًا', - 'voice.providers.installLocally': 'التثبيت محليًا', - 'voice.providers.whisperReady': 'Whisper جاهز.', - 'voice.providers.whisperInstallStarted': 'بدأ تثبيت Whisper', - 'voice.providers.queued': 'في قائمة الانتظار', - 'voice.providers.failedToInstallWhisper': 'فشل تثبيت Whisper', - 'voice.providers.piperReady': 'Piper جاهز.', - 'voice.providers.piperInstallStarted': 'بدأ تثبيت Piper', - 'voice.providers.failedToInstallPiper': 'فشل تثبيت Piper', - 'voice.providers.title': 'موفري الصوت', - 'voice.providers.desc': - 'Choose where transcription and synthesis run. Use the Install locally buttons to download the binaries and models into your workspace. Local providers can be saved before the install finishes — no manual WHISPER_BIN or PIPER_BIN setup required.', - 'voice.providers.sttProvider': 'موفر تحويل الكلام إلى نص', - 'voice.providers.sttProviderAria': 'موفر STT', - 'voice.providers.cloudWhisperProxy': 'السحابة (وكيل الهمس)', - 'voice.providers.localWhisper': 'الهمس المحلي', - 'voice.providers.installRequired': '(يتطلب التثبيت)', - 'voice.providers.whisperInstalledTitle': 'تم تثبيت Whisper. انقر لإعادة التثبيت.', - 'voice.providers.whisperDownloadTitle': - 'Download whisper.cpp and the GGML model into your workspace.', - 'voice.providers.installed': 'تم التثبيت', - 'voice.providers.installFailed': 'فشل التثبيت', - 'voice.providers.notInstalled': 'غير مثبت', - 'voice.providers.whisperModel': 'نموذج الهمس', - 'voice.providers.whisperModelAria': 'نموذج الهمس', - 'voice.providers.whisperModelTiny': 'صغير (39 ميجابايت، الأسرع)', - 'voice.providers.whisperModelBase': 'أساسي (74 ميجابايت)', - 'voice.providers.whisperModelSmall': 'صغير (244 ميجابايت)', - 'voice.providers.whisperModelMedium': 'متوسط (769 ميجابايت، موصى به)', - 'voice.providers.whisperModelLargeTurbo': 'كبير v3 Turbo (1.5 جيجابايت، أفضل دقة)', - 'voice.providers.ttsProvider': 'موفر خدمة تحويل النص إلى كلام', - 'voice.providers.ttsProviderAria': 'موفر TTS', - 'voice.providers.cloudElevenLabsProxy': 'السحابة (وكيل ElevenLabs)', - 'voice.providers.localPiper': 'تم تثبيت مزمار محلي', - 'voice.providers.piperInstalledTitle': 'مزمار. انقر لإعادة التثبيت.', - 'voice.providers.piperDownloadTitle': - 'Download Piper and the bundled en_US-lessac-medium voice into your workspace.', - 'voice.providers.piperVoice': 'صوت المزمار', - 'voice.providers.piperVoiceAria': 'صوت المزمار', - 'voice.providers.customVoiceOption': 'أخرى (اكتب أدناه)...', - 'voice.providers.customVoiceAria': 'معرف صوت المزمار (مخصص)', - 'voice.providers.customVoicePlaceholder': 'en_US-lessac-medium', - 'voice.providers.piperVoicesDesc': - 'Voices come from huggingface.co/rhasspy/piper-voices. Switching voices may require an Install/Reinstall click to download the new .onnx.', - 'voice.providers.mascotVoice': 'تم تكوين صوت التميمة', - 'voice.providers.mascotVoiceDescPrefix': - 'The ElevenLabs voice the mascot uses for spoken replies is configured under', - 'voice.providers.mascotSettings': 'إعدادات التميمة', - 'voice.providers.mascotVoiceDescSuffix': '.', - 'voice.providers.hotkeyPlaceholder': 'Fn', - 'voice.providers.piperPreset.lessacMedium': 'الولايات المتحدة · Lessac (محايد، موصى به)', - 'voice.providers.piperPreset.lessacHigh': 'الولايات المتحدة · Lessac (جودة أعلى، أكبر)', - 'voice.providers.piperPreset.ryanMedium': 'الولايات المتحدة · Ryan (ذكر)', - 'voice.providers.piperPreset.amyMedium': 'الولايات المتحدة · Amy (أنثى)', - 'voice.providers.piperPreset.librittsHigh': 'الولايات المتحدة · LibriTTS (متعدد المتحدثين)', - 'voice.providers.piperPreset.alanMedium': 'GB · Alan (ذكر)', - 'voice.providers.piperPreset.jennyDiocoMedium': 'GB · Jenny Dioco (أنثى)', - 'voice.providers.piperPreset.northernEnglishMaleMedium': 'GB · اللغة الإنجليزية الشمالية (ذكر)', - 'voice.providers.chip.cloud': 'OpenHuman (Managed)', - 'voice.providers.chip.cloudAria': 'OpenHuman managed provider is always enabled', - 'voice.providers.chip.whisper': 'Whisper (Local)', - 'voice.providers.chip.enableWhisper': 'Enable local Whisper STT', - 'voice.providers.chip.disableWhisper': 'Disable local Whisper STT', - 'voice.providers.chip.piper': 'Piper (Local)', - 'voice.providers.chip.enablePiper': 'Enable local Piper TTS', - 'voice.providers.chip.disablePiper': 'Disable local Piper TTS', - 'voice.providers.chip.enableProvider': 'Enable', - 'voice.providers.chip.disableProvider': 'Disable', - 'voice.providers.chip.apiKeyLabel': 'API Key', - 'voice.providers.chip.apiKeyPlaceholder': 'sk-…', - 'voice.providers.chip.comingSoon': 'coming soon', - 'voice.modal.title': 'Configure', - 'voice.modal.desc': - 'Enter your API key to enable this provider. You can test the connection before saving.', - 'voice.modal.testKey': 'Test Key', - 'voice.modal.testing': 'Testing…', - 'voice.modal.saveAndEnable': 'Save & Enable', - 'voice.modal.enable': 'Enable', - 'voice.modal.whisperDesc': - 'Choose a model size and install the Whisper binary and GGML model into your workspace. Larger models are more accurate but slower.', - 'voice.modal.piperDesc': - 'Choose a voice and install the Piper binary and ONNX model into your workspace. Piper runs fully offline with low latency.', - 'voice.routing.title': 'Voice Routing', - 'voice.routing.desc': 'Choose which enabled providers handle speech-to-text and text-to-speech.', - 'voice.routing.save': 'Save', - 'voice.routing.testStt': 'Test STT', - 'voice.routing.testTts': 'Test TTS', - 'voice.routing.elevenlabsVoice': 'ElevenLabs Voice', - 'voice.routing.elevenlabsVoiceAria': 'ElevenLabs voice selection', - 'voice.routing.elevenlabsVoiceIdAria': 'ElevenLabs voice ID (custom)', - 'voice.routing.elevenlabsVoiceDesc': - 'Pick a curated voice or paste a custom voice ID from your ElevenLabs dashboard.', - 'voice.externalProviders.title': 'External Voice Providers', - 'voice.externalProviders.desc': - 'Connect third-party STT/TTS APIs like Deepgram, ElevenLabs, or OpenAI directly.', - 'voice.externalProviders.keySet': 'Key set', - 'voice.externalProviders.noKey': 'No API key', - 'voice.externalProviders.test': 'Test', - 'voice.externalProviders.testing': 'Testing…', - 'voice.externalProviders.remove': 'Remove', - 'voice.externalProviders.provider': 'Provider', - 'voice.externalProviders.selectProvider': 'Select a provider…', - 'voice.externalProviders.apiKey': 'API Key', - 'voice.externalProviders.apiKeyPlaceholder': 'sk-…', - 'voice.externalProviders.add': 'Add', - 'screenAwareness.debug.debugAndDiagnostics': 'التصحيح والتشخيص', - 'screenAwareness.debug.collapse': 'طي', - 'screenAwareness.debug.expand': 'توسيع', - 'screenAwareness.debug.failedToSave': 'فشل حفظ ذكاء الشاشة', - 'screenAwareness.debug.policyTitle': 'سياسة ذكاء الشاشة', - 'screenAwareness.debug.baselineFps': 'FPS الأساسي', - 'screenAwareness.debug.useVisionModel': 'استخدام نموذج الرؤية', - 'screenAwareness.debug.useVisionModelDesc': - 'Send screenshots to a vision LLM for richer context. When off, only OCR text is used with a text LLM — faster and no vision model required.', - 'screenAwareness.debug.keepScreenshots': 'الاحتفاظ بلقطات الشاشة', - 'screenAwareness.debug.keepScreenshotsDesc': - 'Save captured screenshots to the workspace instead of deleting after processing', - 'screenAwareness.debug.allowlist': 'القائمة المسموح بها (قاعدة واحدة لكل سطر)', - 'screenAwareness.debug.denylist': 'قائمة الرفض (قاعدة واحدة لكل سطر)', - 'screenAwareness.debug.saveSettings': 'حفظ إعدادات ذكاء الشاشة', - 'screenAwareness.debug.sessionStats': 'إحصائيات الجلسة', - 'screenAwareness.debug.framesEphemeral': 'الإطارات (عابرة)', - 'screenAwareness.debug.panicStop': 'توقف الذعر', - 'screenAwareness.debug.defaultPanicHotkey': 'Cmd+Shift+.', - 'screenAwareness.debug.vision': 'الرؤية', - 'screenAwareness.debug.idle': 'خاملة', - 'screenAwareness.debug.visionQueue': 'قائمة انتظار الرؤية', - 'screenAwareness.debug.lastVision': 'الرؤية الأخيرة', - 'screenAwareness.debug.notAvailable': 'غير متوفر', - 'screenAwareness.debug.visionSummaries': 'الرؤية الملخصات', - 'screenAwareness.debug.refreshing': 'تحديث...', - 'screenAwareness.debug.noSummaries': 'لا توجد ملخصات حتى الآن.', - 'screenAwareness.debug.unknownApp': 'تطبيق غير معروف', - 'screenAwareness.debug.macosOnly': 'Screen Intelligence V1 is currently supported on macOS only.', - 'memory.debugTitle': 'تصحيح أخطاء الذاكرة', - 'memory.documents': 'المستندات', - 'memory.filterByNamespace': 'التصفية حسب مساحة الاسم...', - 'memory.refresh': 'تحديث', - 'memory.noDocumentsFound': 'لم يتم العثور على مستندات.', - 'memory.delete': 'حذف', - 'memory.rawResponse': 'الاستجابة الأولية', - 'memory.namespaces': 'مساحات الأسماء', - 'memory.noNamespacesFound': 'لم يتم العثور على مساحات أسماء.', - 'memory.queryRecall': 'الاستعلام والاستدعاء', - 'memory.namespace': 'مساحة الاسم', - 'memory.queryText': 'نص الاستعلام...', - 'memory.defaultMaxChunks': '10', - 'memory.maxChunks': 'الحد الأقصى للمجموعات', - 'memory.query': 'الاستعلام', - 'memory.recall': 'استدعاء', - 'memory.queryLabel': 'الاستعلام', - 'memory.recallLabel': 'استدعاء', - 'memory.queryResult': 'نتيجة الاستعلام', - 'memory.recallResult': 'نتيجة الاستدعاء', - 'memory.clearNamespace': 'مسح مساحة الاسم', - 'memory.clearNamespaceDescription': 'حذف جميع المستندات الموجودة في مساحة الاسم نهائيًا.', - 'memory.selectNamespace': 'حدد مساحة الاسم...', - 'memory.exampleNamespace': 'على سبيل المثال. Skill:gmail:user@example.com', - 'memory.clear': 'مسح', - 'memory.deleteConfirm': 'هل تريد حذف المستند "{documentId}" في مساحة الاسم "{namespace}"؟', - 'memory.clearNamespaceConfirm': - 'This will permanently delete ALL documents in namespace "{namespace}". Continue?', - 'memory.clearNamespaceSuccess': 'تم مسح مساحة الاسم "{namespace}".', - 'memory.clearNamespaceEmpty': 'لا يوجد شيء يجب مسحه في "{namespace}".', - 'webhooks.debugTitle': 'تصحيح أخطاء Webhooks', - 'webhooks.failedToLoadDebugData': 'فشل تحميل بيانات تصحيح أخطاء webhook', - 'webhooks.clearLogsConfirm': 'هل تريد مسح جميع سجلات تصحيح أخطاء webhook التي تم التقاطها؟', - 'webhooks.failedToClearLogs': 'فشل في مسح سجلات خطاف الويب', - 'webhooks.loading': 'جارٍ التحميل...', - 'webhooks.refresh': 'تحديث', - 'webhooks.clearing': 'مسح...', - 'webhooks.clearLogs': 'مسح السجلات', - 'webhooks.registered': 'تم تسجيل', - 'webhooks.captured': 'وتم التقاط', - 'webhooks.live': 'مباشرة', - 'webhooks.disconnected': 'تم قطع الاتصال', - 'webhooks.lastEvent': 'آخر حدث', - 'webhooks.at': 'في', - 'webhooks.registeredWebhooks': 'خطافات الويب المسجلة', - 'webhooks.noActiveRegistrations': 'لا توجد تسجيلات نشطة.', - 'webhooks.resolvingBackendUrl': 'حل الواجهة الخلفية URL...', - 'webhooks.capturedRequests': 'الطلبات الملتقطة', - 'webhooks.noRequestsCaptured': 'لم يتم التقاط طلبات خطاف الويب حتى الآن.', - 'webhooks.unrouted': 'تم إلغاء توجيهه', - 'webhooks.pending': 'معلق', - 'webhooks.requestHeaders': 'رؤوس الطلب', - 'webhooks.queryParams': 'معلمات الاستعلام', - 'webhooks.requestBody': 'نص الطلب', - 'webhooks.responseHeaders': 'رؤوس الاستجابة', - 'webhooks.responseBody': 'نص الاستجابة', - 'webhooks.rawPayload': 'الحمولة الأولية', - 'webhooks.empty': '[فارغة]', - 'providerSetup.error.defaultDetails': 'فشل إعداد الموفر.', - 'providerSetup.error.providerFallback': 'رفض الموفر', - 'providerSetup.error.credentialsRejected': - '{provider} rejected the credentials. Check the API key and try again.', - 'providerSetup.error.endpointNotRecognized': - '{provider} did not recognize the endpoint. Check the base URL and try again.', - 'providerSetup.error.providerUnavailable': - '{provider} is unavailable right now. Try again or check the provider status.', - 'providerSetup.error.unreachable': - 'Could not reach {provider}. Check the endpoint URL and network connection, then try again.', - 'providerSetup.error.couldNotReachWithMessage': 'تعذر الوصول إلى {provider}: {message}', - 'providerSetup.error.technicalDetails': 'التفاصيل الفنية', - 'devices.title': 'الأجهزة', - 'devices.pairIphone': 'إقران iPhone', - 'devices.noPaired': 'لا توجد أجهزة مقترنة', - 'devices.emptyState': 'قم بمسح QR code على جهاز iPhone الخاص بك لتوصيله بجلسة OpenHuman هذه.', - 'devices.devicePairedTitle': 'تم إقران الجهاز', - 'devices.devicePairedMessage': 'تم توصيل iPhone بنجاح.', - 'devices.deviceRevokedTitle': 'تم إبطال الجهاز', - 'devices.deviceRevokedMessage': '{label} تمت إزالته.', - 'devices.revokeFailedTitle': 'فشل الإلغاء', - 'devices.online': 'متصل', - 'devices.offline': 'غير متصل', - 'devices.lastSeenNever': 'أبدًا', - 'devices.lastSeenNow': 'الآن', - 'devices.lastSeenMinutes': '{count}m منذ', - 'devices.lastSeenHours': '{count} قبل', - 'devices.lastSeenDays': '{count} قبل', - 'devices.revoke': 'إبطال', - 'devices.revokeAria': 'إبطال {label}', - 'devices.confirmRevokeTitle': 'إلغاء الجهاز؟', - 'devices.confirmRevokeBody': '{label} will no longer be able to connect. This cannot be undone.', - 'devices.loadFailed': 'فشل تحميل الأجهزة: {message}', - 'devices.pairModal.title': 'إقران iPhone', - 'devices.pairModal.loading': 'إنشاء رمز الاقتران...', - 'devices.pairModal.instructions': 'Open the OpenHuman app on your iPhone and scan this code.', - 'devices.pairModal.expiresIn': 'تنتهي صلاحية الرمز خلال ~{count} دقيقة', - 'devices.pairModal.expiresInPlural': 'تنتهي صلاحية الرمز خلال ~{count} دقيقة', - 'devices.pairModal.showDetails': 'إظهار التفاصيل', - 'devices.pairModal.hideDetails': 'إخفاء التفاصيل', - 'devices.pairModal.channelId': 'معرف القناة', - 'devices.pairModal.pairingUrl': 'الاقتران URL', - 'devices.pairModal.expiredTitle': 'QR code انتهت صلاحيته', - 'devices.pairModal.expiredBody': 'أنشئ رمزًا جديدًا لمواصلة الاقتران.', - 'devices.pairModal.generateNewCode': 'إنشاء رمز جديد', - 'devices.pairModal.successTitle': 'مقترن بجهاز iPhone', - 'devices.pairModal.autoClose': 'يتم الإغلاق تلقائيًا...', - 'devices.pairModal.errorPrefix': 'فشل إنشاء الاقتران: {message}', - 'devices.pairModal.errorTitle': 'حدث خطأ ما', - 'devices.pairModal.copyUrl': 'نسخ', - 'mcp.catalog.searchAria': 'البحث في كتالوج الحدادة', - 'mcp.catalog.searchPlaceholder': 'البحث في كتالوج الحدادة...', - 'mcp.catalog.loadFailed': 'فشل تحميل الكتالوج', - 'mcp.catalog.noResults': 'لم يتم العثور على خوادم.', - 'mcp.catalog.noResultsFor': 'لم يتم العثور على خوادم لـ "{query}".', - 'mcp.catalog.loadMore': 'تحميل المزيد', - 'mcp.configAssistant.title': 'مساعد التكوين', - 'mcp.configAssistant.empty': 'اسأل عن التكوين أو متغيرات env المطلوبة أو خطوات الإعداد.', - 'mcp.configAssistant.suggestedValues': 'القيم المقترحة:', - 'mcp.configAssistant.valueHidden': '(القيمة مخفية)', - 'mcp.configAssistant.applySuggested': 'تطبيق القيم المقترحة', - 'mcp.configAssistant.reinstallHint': 'أعد التثبيت بهذه القيم لتطبيقها.', - 'mcp.configAssistant.thinking': 'أفكر...', - 'mcp.configAssistant.inputPlaceholder': 'اطرح سؤالاً (أدخل للإرسال، Shift+Enter للسطر الجديد)', - 'mcp.configAssistant.send': 'إرسال', - 'mcp.configAssistant.failedResponse': 'فشل الحصول على الرد', - 'mcp.toolList.availableSingular': '{count} الأداة المتاحة', - 'mcp.toolList.availablePlural': '{count} الأدوات المتاحة', - 'mcp.toolList.tryTool': 'Try', - 'mcp.toolList.tryToolAria': 'Open execution playground for {name}', - 'mcp.playground.title': 'Run {name}', - 'mcp.playground.close': 'Close playground', - 'mcp.playground.inputSchema': 'Input schema', - 'mcp.playground.argsLabel': 'Arguments (JSON)', - 'mcp.playground.argsHelp': 'Type JSON matching the input schema. Empty input is treated as {}.', - 'mcp.playground.runShortcut': '⌘/Ctrl + Enter to run', - 'mcp.playground.format': 'Format', - 'mcp.playground.invalidJson': 'Invalid JSON', - 'mcp.playground.run': 'Run tool', - 'mcp.playground.running': 'Running…', - 'mcp.playground.result': 'Result', - 'mcp.playground.resultError': 'Tool returned an error', - 'mcp.playground.copyResult': 'Copy result', - 'mcp.playground.copied': 'Copied', - 'mcp.playground.history': 'History', - 'mcp.playground.historyEmpty': 'No invocations yet in this session.', - 'mcp.playground.historyLoad': 'Load', - 'mcp.playground.unexpectedError': 'Unexpected error invoking tool.', - 'mcp.catalog.deployed': 'تم نشرها', - 'mcp.catalog.installCount': '{count} عمليات التثبيت', - 'app.update.dismissNotification': 'تجاهل إشعار التحديث', - 'bootCheck.rpcAuthSuffix': 'في كل RPC.', - 'mcp.installed.title': 'تم التثبيت', - 'mcp.installed.browseCatalog': 'تصفح الكتالوج', - 'mcp.installed.empty': 'لم يتم تثبيت خوادم MCP حتى الآن.', - 'mcp.installed.toolSingular': 'أداة {count}', - 'mcp.installed.toolPlural': 'أدوات {count}', - 'mcp.health.title': 'Health', - 'mcp.health.summaryAria': 'MCP connection health summary', - 'mcp.health.connectedCount': '{count} connected', - 'mcp.health.connectingCount': '{count} connecting', - 'mcp.health.errorCount': '{count} error', - 'mcp.health.disconnectedCount': '{count} idle', - 'mcp.health.retryAll': 'Retry all ({count})', - 'mcp.health.retryAllAria': 'Retry all {count} errored MCP servers', - 'mcp.health.disconnectAll': 'Disconnect all ({count})', - 'mcp.health.disconnectAllAria': 'Disconnect all {count} connected MCP servers', - 'mcp.health.disconnectConfirm.title': 'Disconnect all MCP servers?', - 'mcp.health.disconnectConfirm.body': - 'This will disconnect {count} currently-connected MCP servers. Installed configurations and secrets are kept; you can reconnect any server later.', - 'mcp.health.disconnectConfirm.cancel': 'Cancel', - 'mcp.health.disconnectConfirm.confirm': 'Disconnect all', - 'mcp.health.opErrorGeneric': 'Bulk operation failed. See logs.', - 'mcp.health.bulkPartialFailure': '{failed} of {total} servers failed. See logs.', - 'mcp.installed.search.landmarkAria': 'Search installed MCP servers', - 'mcp.installed.search.inputAria': 'Filter installed MCP servers by name', - 'mcp.installed.search.placeholder': 'Filter servers…', - 'mcp.installed.search.clearAria': 'Clear filter', - 'mcp.installed.search.countMatches': '{shown} of {total} servers', - 'mcp.installed.search.noMatches': 'No servers match "{query}".', - 'mcp.inventory.openButton': 'Inventory', - 'mcp.inventory.openAria': 'Open the sharable MCP inventory panel', - 'mcp.inventory.title': 'Sharable MCP Inventory', - 'mcp.inventory.subtitle': - 'Export your installed MCP servers as a portable, secret-free manifest, or import one from a teammate. Secret env values are never included or imported.', - 'mcp.inventory.close': 'Close inventory panel', - 'mcp.inventory.tablistAria': 'Inventory sections', - 'mcp.inventory.tab.export': 'Export', - 'mcp.inventory.tab.import': 'Import', - 'mcp.inventory.export.empty': - 'No MCP servers installed yet — nothing to export. Install one from the catalog first.', - 'mcp.inventory.export.privacyTitle': 'What is in this manifest', - 'mcp.inventory.export.privacyBody': - 'Server names, qualified names, env-variable KEY NAMES, and non-secret config only. Secret values, your machine identifiers, and per-install timestamps are intentionally stripped.', - 'mcp.inventory.export.serverCount': '{count} servers in this manifest', - 'mcp.inventory.export.copy': 'Copy', - 'mcp.inventory.export.copied': 'Copied', - 'mcp.inventory.export.copyAria': 'Copy the manifest JSON to the clipboard', - 'mcp.inventory.export.download': 'Download', - 'mcp.inventory.export.downloadAria': 'Download the manifest as a JSON file', - 'mcp.inventory.import.trustTitle': 'Treat imported manifests as untrusted code', - 'mcp.inventory.import.trustBody': - 'An MCP server is a tool you grant your agent. Only import manifests from sources you trust. Each install requires your explicit click; nothing is auto-installed.', - 'mcp.inventory.import.pasteLabel': 'Paste manifest JSON', - 'mcp.inventory.import.pastePlaceholder': 'Paste a manifest here, or upload a .json file below.', - 'mcp.inventory.import.preview': 'Preview', - 'mcp.inventory.import.clear': 'Clear', - 'mcp.inventory.import.uploadFile': 'or upload a .json file', - 'mcp.inventory.import.uploadFileAria': 'Upload a manifest .json file', - 'mcp.inventory.import.fileTooLarge': 'File is too large (over 1 MB). Refusing to load.', - 'mcp.inventory.import.fileReadFailed': 'Could not read file.', - 'mcp.inventory.import.parseErrorPrefix': 'Could not parse manifest:', - 'mcp.inventory.import.previewHeading': 'Preview', - 'mcp.inventory.import.previewCounts': - '{total} servers — {newly} new, {already} already installed', - 'mcp.inventory.import.previewEmpty': 'Manifest contains no servers.', - 'mcp.inventory.import.exportedFrom': 'Exported from {exporter}', - 'mcp.inventory.import.exportedAt': 'at {when}', - 'mcp.inventory.import.statusNew': 'New', - 'mcp.inventory.import.statusAlreadyInstalled': 'Already installed', - 'mcp.inventory.import.envKeysLabel': 'Env keys', - 'mcp.inventory.import.install': 'Install', - 'mcp.inventory.import.installAria': 'Install {name} from this manifest', - 'mcp.inventory.import.skipped': 'skipped', - 'mcp.inventory.parseError.empty': 'Manifest is empty.', - 'mcp.inventory.parseError.invalidJson': 'Invalid JSON.', - 'mcp.inventory.parseError.rootNotObject': 'Manifest must be a JSON object at the root.', - 'mcp.inventory.parseError.unsupportedSchema': - 'Unsupported manifest schema — this file was not produced by a compatible exporter.', - 'mcp.inventory.parseError.missingExportedAt': 'Missing or invalid `exported_at` field.', - 'mcp.inventory.parseError.missingExportedBy': 'Missing or invalid `exported_by` field.', - 'mcp.inventory.parseError.invalidServers': 'Missing or invalid `servers` array.', - 'mcp.inventory.parseError.serverNotObject': 'A server entry is not an object.', - 'mcp.inventory.parseError.serverMissingQualifiedName': - 'A server entry is missing its qualified_name.', - 'mcp.inventory.parseError.serverMissingDisplayName': - 'A server entry is missing its display_name.', - 'mcp.inventory.parseError.serverEnvKeysNotArray': - 'A server entry has an env_keys field that is not an array of strings.', - 'mcp.inventory.parseError.serverContainsEnv': - 'A server entry contains an `env` value map. Refusing to import — manifests must only carry env_keys (names), never secret values.', - 'mcp.inventory.parseError.duplicateQualifiedName': - 'Duplicate qualified_name found in manifest. Each server must appear at most once.', - 'mcp.tab.loading': 'جارٍ تحميل خوادم MCP...', - 'mcp.tab.emptyDetail': 'حدد خادمًا أو تصفح الكتالوج.', - 'mcp.install.loadingDetail': 'جارٍ تحميل تفاصيل الخادم...', - 'mcp.install.back': 'العودة', - 'mcp.install.title': 'تثبيت {name}', - 'mcp.install.requiredEnv': 'متغيرات البيئة المطلوبة', - 'mcp.install.enterValue': 'أدخل {key}', - 'mcp.install.show': 'إظهار', - 'mcp.install.hide': 'إخفاء', - 'mcp.install.configLabel': 'التكوين (اختياري JSON)', - 'mcp.install.configPlaceholder': '{"key": "value"}', - 'mcp.install.missingRequired': 'مطلوب "{key}"', - 'mcp.install.invalidJson': 'تكوين JSON غير صالح JSON', - 'mcp.install.failedDetail': 'فشل تحميل تفاصيل الخادم', - 'mcp.install.failedInstall': 'فشل التثبيت', - 'mcp.install.button': 'تثبيت', - 'mcp.install.installing': 'جارٍ التثبيت...', - 'mcp.detail.suggestedEnvReady': 'قيم البيئة المقترحة جاهزة', - 'mcp.detail.suggestedEnvBody': - 'Re-install this server with the suggested values to apply them: {keys}', - 'mcp.detail.connect': 'اتصال', - 'mcp.detail.connecting': 'جارٍ الاتصال...', - 'mcp.detail.disconnect': 'قطع الاتصال', - 'mcp.detail.hideAssistant': 'إخفاء المساعد', - 'mcp.detail.helpConfigure': 'ساعدني في التهيئة', - 'mcp.detail.confirmUninstall': 'هل تريد تأكيد إلغاء التثبيت؟', - 'mcp.detail.confirmUninstallAction': 'نعم، قم بإلغاء التثبيت', - 'mcp.detail.uninstall': 'قم بإلغاء التثبيت', - 'mcp.detail.envVars': 'متغيرات البيئة', - 'mcp.detail.tools': 'الأدوات', - 'onboarding.skipForNow': 'التخطي الآن', - 'onboarding.localAI.continueWithCloud': 'متابعة مع السحابة', - 'onboarding.localAI.useLocalAnyway': 'Use local AI anyway (not recommended for your device)', - 'onboarding.localAI.useLocalInstead': 'Use local AI instead (connect Ollama now)', - 'onboarding.localAI.setupIssue': 'واجه إعداد الذكاء الاصطناعي المحلي مشكلة', - 'notifications.routingTitle': 'توجيه الإشعارات', - 'notifications.routing.pipelineStats': 'إحصائيات المسار', - 'notifications.routing.total': 'الإجمالي', - 'notifications.routing.unread': 'غير مقروء', - 'notifications.routing.unscored': 'غير مسجل', - 'notifications.routing.intelligenceTitle': 'ذكاء الإشعارات', - 'notifications.routing.intelligenceDesc': - 'Every notification from your connected accounts is scored by a local AI model. High-importance notifications are automatically routed to your orchestrator agent so nothing critical slips through.', - 'notifications.routing.howItWorks': 'كيف يعمل', - 'notifications.routing.level.drop': 'إسقاط', - 'notifications.routing.level.dropDesc': 'تشويش / بريد عشوائي - تم تخزينه ولكن لم يتم عرضه', - 'notifications.routing.level.acknowledge': 'إقرار', - 'notifications.routing.level.acknowledgeDesc': 'أولوية منخفضة - تظهر في مركز الإشعارات', - 'notifications.routing.level.react': 'التفاعل', - 'notifications.routing.level.reactDesc': 'أولوية متوسطة — تؤدي إلى استجابة مركزة للوكيل', - 'notifications.routing.level.escalate': 'تصعيد', - 'notifications.routing.level.escalateDesc': 'أولوية عالية — يتم إعادة التوجيه إلى الوكيل المنسق', - 'notifications.routing.perProvider': 'التوجيه لكل موفر', - 'notifications.routing.threshold': 'العتبة', - 'notifications.routing.routeToOrchestrator': 'فشل التوجيه إلى المنسق', - 'notifications.routing.loadSettingsError': 'Failed to load settings. Reopen this panel to retry.', - 'settings.billing.inferenceBudget.title': 'Inference Budget', - 'settings.billing.inferenceBudget.noRecurringPlanBudget': 'لا توجد ميزانية خطة متكررة', - 'settings.billing.inferenceBudget.noRecurringWeeklyDesc': - 'Your current plan does not include a recurring weekly inference budget. Usage is paid from available credits instead.', - 'settings.billing.inferenceBudget.remainingSummary': '{remaining} / {budget} المتبقي', - 'settings.billing.inferenceBudget.spentThisCycle': 'تم إنفاق {amount} هذه الدورة', - 'settings.billing.inferenceBudget.cycleEndsOn': 'تنتهي الدورة {date}', - 'settings.billing.inferenceBudget.exhaustedDesc': - 'Included subscription usage is exhausted. Top up credits to keep using AI without waiting for the next cycle.', - 'settings.billing.inferenceBudget.discountVsPayg': '{pct}% أرخص لكل مكالمة من الدفع أولاً بأول.', - 'settings.billing.inferenceBudget.cycleSpend': 'الإنفاق الدوري', - 'settings.billing.inferenceBudget.totalAmount': '{amount} الإجمالي', - 'settings.billing.inferenceBudget.inference': 'الاستدلال', - 'settings.billing.inferenceBudget.integrations': 'عمليات التكامل', - 'settings.billing.inferenceBudget.calls': '{count} المكالمات', - 'settings.billing.inferenceBudget.dailySpend': 'الإنفاق اليومي', - 'settings.billing.inferenceBudget.dailySpendPoint': '{date}: {amount}', - 'settings.billing.inferenceBudget.topModels': 'أفضل الموديلات', - 'settings.billing.inferenceBudget.noInferenceUsage': 'لا يوجد استخدام للاستدلال في هذه الدورة.', - 'settings.billing.inferenceBudget.topIntegrations': 'أهم عمليات التكامل', - 'settings.billing.inferenceBudget.noIntegrationUsage': 'لا يوجد استخدام للتكامل في هذه الدورة.', - 'settings.billing.inferenceBudget.unableToLoad': 'غير قادر على تحميل بيانات الاستخدام', - 'settings.billing.inferenceBudget.notAvailable': 'غير متوفر', - 'memory.sourceFilterAria': 'التصفية حسب المصدر', - 'calls.comingSoonDescription': 'AI-assisted calls are coming soon. Stay tuned.', - 'vault.title': 'خزائن المعرفة', - 'vault.description': 'أشر إلى مجلد محلي؛ يتم تقسيم الملفات وعكسها في الذاكرة.', - 'vault.add': 'إضافة مخزن', - 'vault.added': 'تمت إضافة المخزن', - 'vault.createdMessage': 'تم إنشاء "{name}". انقر فوق {sync} لاستيعابها.', - 'vault.couldNotAdd': 'تعذر إضافة مخزن', - 'vault.syncFailed': 'فشلت المزامنة', - 'vault.syncFailedFor': 'فشلت المزامنة لـ "{name}"', - 'vault.syncFailedFiles': 'فشل ملف (ملفات) {count}', - 'vault.syncedTitle': 'تمت مزامنة "{name}"', - 'vault.syncSummary': 'تم استيعابها {ingested}، دون تغيير {unchanged}، تمت إزالة {removed}', - 'vault.syncSummaryFailed': ', فشل {count}', - 'vault.syncSummarySkipped': '، تم تخطي {count}', - 'vault.syncSummaryDuration': '· {seconds}s', - 'vault.confirmRemovePurge': - 'Remove vault "{name}"?\n\nClick OK to also purge its memory (delete all {count} ingested document(s)).\nClick Cancel to keep the documents in memory.', - 'vault.confirmRemove': 'هل تريد حقًا إزالة المخزن "{name}"؟', - 'vault.removed': 'تمت إزالة المخزن', - 'vault.removedPurgedMessage': 'تمت إزالة "{name}" وتطهير ذاكرته.', - 'vault.removedKeptMessage': 'تمت إزالة "{name}". الوثائق المحفوظة في الذاكرة.', - 'vault.couldNotRemove': 'تعذرت إزالة المخزن', - 'vault.name': 'الاسم', - 'vault.namePlaceholder': 'ملاحظاتي البحثية', - 'vault.folderPath': 'مسار المجلد (مطلق)', - 'vault.folderPathPlaceholder': '/Users/you/Documents/notes', - 'vault.excludes': 'باستثناء (سلاسل فرعية مفصولة بفواصل، اختيارية)', - 'vault.excludesPlaceholder': 'المسودات/، .secret', - 'vault.creating': 'إنشاء...', - 'vault.create': 'إنشاء مخزن', - 'vault.loading': 'تحميل الخزائن...', - 'vault.failedToLoad': 'فشل تحميل الخزائن: {error}', - 'vault.empty': 'لا توجد خزائن حتى الآن. أضف واحدًا أعلاه لبدء استيعاب مجلد.', - 'vault.fileCount': '{count} ملف (ملفات)', - 'vault.syncedRelative': 'تمت مزامنته {time}', - 'vault.neverSynced': 'لم تتم مزامنته أبدًا', - 'vault.syncingProgress': 'جارٍ المزامنة… {ingested}/{total}', - 'vault.removing': 'جارٍ الإزالة...', - 'vault.relative.sec': 'قبل {count}s', - 'vault.relative.min': 'قبل {count}m', - 'vault.relative.hr': 'قبل {count} قبل', - 'vault.relative.day': 'قبل {count}d', - 'whatsapp.title': 'WhatsApp', - 'subconscious.interval.fiveMinutes': '5 دقائق', - 'subconscious.interval.tenMinutes': '10 دقائق', - 'subconscious.interval.fifteenMinutes': '15 دقيقة', - 'subconscious.interval.thirtyMinutes': '30 دقيقة', - 'subconscious.interval.oneHour': 'ساعة واحدة', - 'subconscious.interval.sixHours': '6 ساعات', - 'subconscious.interval.twelveHours': '12 ساعة', - 'subconscious.interval.oneDay': 'يوم واحد', - 'subconscious.priority.critical': 'حرجة', - 'subconscious.priority.important': 'مهم', - 'subconscious.priority.normal': 'عادي', - 'subconscious.durationSeconds': '{seconds}s', - 'subconscious.durationMilliseconds': '{milliseconds}ms', - 'settings.search.allowedSitesLabel': 'Allowed websites', - 'settings.search.allowedSitesHint': - 'Websites the assistant may open and read while researching (one host per line, e.g. reuters.com). A host also covers its subdomains. Leave empty to block all web access.', - 'settings.search.allowedSitesAllOn': - 'The assistant can open any public website. Local and private addresses stay blocked.', - 'settings.search.allowedSitesPlaceholder': 'reuters.com\napnews.com\ngithub.com', - 'settings.search.allowedSitesSave': 'Save websites', - 'settings.search.accessModeAria': 'Web access mode', - 'settings.search.accessAllowAll': 'Allow all', - 'settings.search.accessCustom': 'Custom', - 'settings.search.accessBlockAll': 'Block all', - 'settings.search.accessBlockAllHint': - 'All web access is blocked — the assistant cannot open or read any website.', - 'memory.tab.centrality': 'Centrality', - 'graphCentrality.title': 'Knowledge Graph Centrality', - 'graphCentrality.intro': - 'PageRank over your memory graph surfaces the load-bearing hubs — and the connector entities that link otherwise-separate clusters, which a raw frequency count cannot reveal.', - 'graphCentrality.loading': 'Computing centrality…', - 'graphCentrality.errorPrefix': 'Could not load the graph:', - 'graphCentrality.retry': 'Retry', - 'graphCentrality.empty': 'No knowledge graph yet.', - 'graphCentrality.emptyHint': - 'As the assistant records facts about you, the most connected entities will surface here.', - 'graphCentrality.namespaceLabel': 'Namespace', - 'graphCentrality.namespaceAll': 'All namespaces', - 'graphCentrality.metricEntities': 'Entities', - 'graphCentrality.metricConnections': 'Connections', - 'graphCentrality.metricClusters': 'Clusters', - 'graphCentrality.clustersCaption': '{components} clusters · largest holds {largest}', - 'graphCentrality.approximateBadge': 'approximate', - 'graphCentrality.approximateTitle': 'Stopped at the iteration cap before fully converging', - 'graphCentrality.rankedHeading': 'Top entities by influence', - 'graphCentrality.colRank': '#', - 'graphCentrality.colEntity': 'Entity', - 'graphCentrality.colInfluence': 'Influence', - 'graphCentrality.colLinks': 'Links', - 'graphCentrality.bridgeBadge': 'connector', - 'graphCentrality.bridgeTitle': 'Connector — more influential than its link count suggests', - 'graphCentrality.degreeTitle': '{in} in · {out} out', - 'settings.search.engineDisabledLabel': 'Disabled', - 'settings.search.engineDisabledDesc': - 'Remove search tools from the agent context and available tool list.', -}; - -export default ar1; diff --git a/app/src/lib/i18n/chunks/ar-2.ts b/app/src/lib/i18n/chunks/ar-2.ts deleted file mode 100644 index 2fcd7c0cc..000000000 --- a/app/src/lib/i18n/chunks/ar-2.ts +++ /dev/null @@ -1,486 +0,0 @@ -import type { TranslationMap } from '../types'; - -// Arabic (العربية) chunk 2/5. Translated from chunks/en-2.ts. -const ar2: TranslationMap = { - 'settings.ai.configStatus': 'حالة الإعداد', - 'settings.ai.fallbackMode': 'وضع الاحتياط', - 'settings.ai.loadedFromRuntime': 'مُحمَّل من بيئة التشغيل', - 'settings.ai.loadingDuration': 'مدة التحميل', - 'settings.ai.localRuntime': 'بيئة النموذج المحلي', - 'settings.ai.openManager': 'فتح المدير', - 'settings.ai.retryDownload': 'إعادة محاولة التنزيل', - 'settings.ai.state': 'الحالة', - 'settings.ai.targetModel': 'النموذج المستهدف', - 'settings.ai.download': 'تنزيل', - 'settings.ai.localModelUnavailable': 'حالة النموذج المحلي غير متاحة.', - 'settings.ai.soulConfig': 'إعداد شخصية SOUL', - 'settings.ai.refreshing': 'جارٍ التحديث...', - 'settings.ai.refreshSoul': 'تحديث SOUL', - 'settings.ai.loadingSoul': 'جارٍ تحميل إعداد SOUL...', - 'settings.ai.identity': 'الهوية', - 'settings.ai.personality': 'الشخصية', - 'settings.ai.safetyRules': 'قواعد الأمان', - 'settings.ai.source': 'المصدر', - 'settings.ai.loaded': 'مُحمَّل', - 'settings.ai.toolsConfig': 'إعداد TOOLS', - 'settings.ai.refreshTools': 'تحديث TOOLS', - 'settings.ai.toolsAvailable': 'الأدوات المتاحة', - 'settings.ai.tools': 'أدوات', - 'settings.ai.activeSkills': 'المهارات النشطة', - 'settings.ai.skills': 'مهارات', - 'settings.ai.skillsOverview': 'نظرة عامة على المهارات', - 'settings.ai.refreshingAll': 'جارٍ تحديث الكل...', - 'settings.ai.refreshAll': 'تحديث جميع إعدادات الذكاء الاصطناعي', - 'settings.notifications.suppressAll': 'كتم جميع الإشعارات', - 'settings.notifications.suppressAllDesc': - 'حظر جميع إشعارات نظام التشغيل من التطبيقات المدمجة بغض النظر عن حالة التركيز.', - 'settings.notifications.toggleDnd': 'تفعيل/تعطيل عدم الإزعاج', - 'settings.notifications.categories': 'الفئات', - 'settings.notifications.categoryFooter': - 'يؤدي تعطيل فئة إلى إيقاف ظهور الإشعارات الجديدة من هذا النوع في مركز الإشعارات. تبقى الإشعارات الموجودة حتى مسحها.', - 'settings.billing.movedToWeb': 'انتقلت الفوترة إلى الويب', - 'settings.billing.openDashboard': 'فتح لوحة الفوترة', - 'settings.billing.movedToWebDesc': - 'تغييرات الاشتراك وطرق الدفع والرصيد والفواتير تُدار الآن من TinyHumans على الويب.', - 'settings.billing.backToSettings': 'العودة إلى الإعدادات', - 'settings.billing.openingBrowser': 'جارٍ فتح المتصفح...', - 'settings.billing.browserNotOpen': 'إذا لم يفتح متصفحك، استخدم الزر أعلاه.', - 'settings.billing.browserOpenFailed': 'تعذّر فتح المتصفح تلقائيًا. استخدم الزر أعلاه.', - 'settings.tools.chooseCapabilities': - 'اختر الإمكانات التي يمكن لـ OpenHuman استخدامها نيابةً عنك.', - 'settings.tools.saveChanges': 'حفظ التغييرات', - 'settings.tools.preferencesSaved': 'تم حفظ التفضيلات', - 'settings.tools.saveFailed': 'فشل حفظ التفضيلات. حاول مرة أخرى.', - 'settings.screenAwareness.mode': 'الوضع', - 'settings.screenAwareness.allExceptBlacklist': 'الكل باستثناء القائمة السوداء', - 'settings.screenAwareness.whitelistOnly': 'القائمة البيضاء فقط', - 'settings.screenAwareness.screenMonitoring': 'مراقبة الشاشة', - 'settings.screenAwareness.saveSettings': 'حفظ الإعدادات', - 'settings.screenAwareness.session': 'الجلسة', - 'settings.screenAwareness.status': 'الحالة', - 'settings.screenAwareness.active': 'نشط', - 'settings.screenAwareness.stopped': 'متوقف', - 'settings.screenAwareness.remaining': 'المتبقي', - 'settings.screenAwareness.startSession': 'بدء الجلسة', - 'settings.screenAwareness.stopSession': 'إيقاف الجلسة', - 'settings.screenAwareness.analyzeNow': 'تحليل الآن', - 'settings.screenAwareness.macosOnly': - 'التقاط سطح المكتب لوعي الشاشة وضوابط الأذونات مدعومة حاليًا على macOS فقط.', - 'connections.comingSoon': 'قريبًا', - 'connections.setUp': 'إعداد', - 'connections.configured': 'مضبوط', - 'connections.unavailable': 'غير متاح', - 'connections.checking': 'جارٍ التحقق…', - 'connections.walletConfigured': 'تم ضبط هويات EVM وBTC وSolana وTron المحلية من عبارة الاسترداد.', - 'connections.walletReady': 'إعداد هويات EVM وBTC وSolana وTron المحلية من عبارة استرداد واحدة.', - 'connections.walletError': - 'تعذّر التحقق من حالة المحفظة. انقر للمحاولة مرة أخرى من لوحة عبارة الاسترداد.', - 'connections.walletChecking': 'جارٍ التحقق من حالة المحفظة...', - 'connections.walletIdentities': 'هويات المحفظة', - 'connections.walletDerived': 'مشتقة محليًا من عبارة الاسترداد ومحفوظة كبيانات وصفية آمنة فقط.', - 'connections.privacySecurity': 'الخصوصية والأمان', - 'connections.privacySecurityDesc': - 'جميع البيانات والاعتمادات مُخزَّنة محليًا بسياسة عدم الاحتفاظ بالبيانات. معلوماتك مشفرة ولا تُشارك مع أطراف ثالثة.', - 'channels.status.connecting': 'جارٍ الاتصال', - 'channels.status.notConfigured': 'غير مضبوط', - 'channels.noActiveRoute': 'لا يوجد مسار نشط', - 'channels.activeRoute': 'المسار النشط', - 'channels.loadingDefinitions': 'جارٍ تحميل تعريفات القنوات...', - 'channels.channelConnections': 'اتصالات القنوات', - 'channels.configureAuthModes': 'ضبط أوضاع المصادقة لكل قناة مراسلة.', - 'channels.configNotAvailable': 'الإعداد غير متاح لـ', - 'channels.channel': 'قناة', - 'devOptions.coreModeNotSet': 'وضع النواة: غير محدد', - 'devOptions.coreModeNotSetDesc': - 'لم يتم تأكيد محدد بدء التشغيل بعد. استخدم تبديل الوضع في المحدد للاختيار بين المحلي أو السحابي.', - 'devOptions.local': 'محلي', - 'devOptions.embeddedCoreSidecar': 'النواة المدمجة', - 'devOptions.sidecarSpawned': 'تم تشغيله داخل العملية بواسطة غلاف Tauri عند تشغيل التطبيق.', - 'devOptions.cloud': 'سحابي', - 'devOptions.remoteCoreRpc': 'RPC للنواة عن بُعد', - 'devOptions.token': 'الرمز', - 'devOptions.tokenNotSet': 'غير محدد — سيُعيد RPC خطأ 401', - 'devOptions.triggerSentryTest': 'تشغيل اختبار Sentry (تجريبي)', - 'devOptions.triggerSentryTestDesc': - 'يُطلق خطأ مُعلَّمًا للتحقق من خط أنابيب Sentry. المشكلة #1072 — احذف بعد التحقق.', - 'devOptions.sendTestEvent': 'إرسال حدث اختبار', - 'devOptions.sending': 'جارٍ الإرسال…', - 'devOptions.eventSent': 'تم إرسال الحدث', - 'devOptions.failed': 'فشل', - 'devOptions.appLogs': 'سجلات التطبيق', - 'devOptions.appLogsDesc': - 'فتح المجلد الذي يحتوي على ملفات السجل اليومية المتداولة. أرفق الملف الأحدث عند الإبلاغ عن مشكلة.', - 'devOptions.openLogsFolder': 'فتح مجلد السجلات', - 'mnemonic.phraseSaved': 'تم حفظ عبارة الاسترداد', - 'mnemonic.walletReady': 'هويات المحفظة متعددة السلاسل جاهزة. جارٍ العودة إلى الإعدادات...', - 'mnemonic.writeDownWords': 'اكتب هذه', - 'mnemonic.wordsInOrder': - 'كلمات بالترتيب واحفظها في مكان آمن. تُؤمِّن هذه العبارة مفتاح التشفير المحلي وهويات محافظ EVM وBTC وSolana وTron.', - 'mnemonic.cannotRecover': - 'لا يمكن استرداد هذه العبارة إذا فُقدت ويجب أن تبقى محلية على جهازك تمامًا.', - 'mnemonic.copyToClipboard': 'نسخ إلى الحافظة', - 'mnemonic.alreadyHavePhrase': 'لدي بالفعل عبارة استرداد', - 'mnemonic.consentSaved': 'حفظت هذه العبارة وأوافق على استخدامها لإعداد المحفظة المحلية', - 'mnemonic.enterPhraseToRestore': - 'أدخل عبارة الاسترداد أدناه لاستعادة هويات محفظتك المحلية، أو الصق العبارة الكاملة في أي حقل (12 كلمة للنسخ الاحتياطية الجديدة؛ عبارات 24 كلمة من الإصدارات القديمة لا تزال تعمل).', - 'mnemonic.words': 'الكلمات', - 'mnemonic.validPhrase': 'عبارة استرداد صالحة', - 'mnemonic.generateNewPhrase': 'توليد عبارة استرداد جديدة بدلاً من ذلك', - 'mnemonic.securingData': 'جارٍ تأمين بياناتك...', - 'mnemonic.saveRecoveryPhrase': 'حفظ عبارة الاسترداد', - 'mnemonic.userNotLoaded': 'لم يتم تحميل المستخدم. يرجى تسجيل الدخول مرة أخرى أو تحديث الصفحة.', - 'mnemonic.invalidPhrase': 'عبارة الاسترداد غير صالحة. يرجى مراجعة كلماتك والمحاولة مرة أخرى.', - 'mnemonic.somethingWentWrong': 'حدث خطأ ما. يرجى المحاولة مرة أخرى.', - 'team.failedToCreate': 'فشل إنشاء الفريق', - 'team.invalidInviteCode': 'رمز دعوة غير صالح أو منتهي الصلاحية', - 'team.failedToSwitch': 'فشل تبديل الفريق', - 'team.failedToLeave': 'فشل مغادرة الفريق', - 'team.role.owner': 'المالك', - 'team.role.admin': 'المسؤول', - 'team.role.billingManager': 'مدير الفوترة', - 'team.role.member': 'عضو', - 'team.active': 'نشط', - 'team.personalTeam': 'الفريق الشخصي', - 'team.manageTeam': 'إدارة الفريق', - 'team.switching': 'جارٍ التبديل...', - 'team.switch': 'تبديل', - 'team.leaving': 'جارٍ المغادرة...', - 'team.leave': 'مغادرة', - 'team.yourTeams': 'فرقك', - 'team.createNewTeam': 'إنشاء فريق جديد', - 'team.teamName': 'اسم الفريق', - 'team.creating': 'جارٍ الإنشاء...', - 'team.joinExistingTeam': 'الانضمام إلى فريق موجود', - 'team.inviteCode': 'رمز الدعوة', - 'team.joining': 'جارٍ الانضمام...', - 'team.join': 'انضمام', - 'team.leaveTeam': 'مغادرة الفريق', - 'team.confirmLeave': 'هل أنت متأكد من أنك تريد مغادرة', - 'team.leaveWarning': - 'ستفقد الوصول إلى الفريق وجميع موارده. ستحتاج إلى دعوة جديدة للانضمام مجددًا.', - 'team.management': 'إدارة الفريق', - 'team.notFound': 'الفريق غير موجود', - 'team.accessDenied': 'الوصول مرفوض', - 'team.members': 'الأعضاء', - 'voice.title': 'الإملاء الصوتي', - 'voice.settings': 'إعدادات الصوت', - 'voice.settingsDesc': 'اضغط مع الاستمرار على المفتاح الساخن للإملاء وإدراج النص في الحقل النشط.', - 'voice.hotkey': 'المفتاح الساخن', - 'voice.activationMode': 'وضع التفعيل', - 'voice.tapToToggle': 'انقر للتبديل', - 'voice.writingStyle': 'أسلوب الكتابة', - 'voice.verbatimTranscription': 'النسخ الحرفي', - 'voice.naturalCleanup': 'تنظيف طبيعي', - 'voice.autoStart': 'بدء خادم الصوت تلقائيًا مع النواة', - 'voice.customDictionary': 'القاموس المخصص', - 'voice.customDictionaryDesc': 'أضف أسماء ومصطلحات تقنية وكلمات تخصصية لتحسين دقة التعرف.', - 'voice.addWord': 'أضف كلمة...', - 'voice.sttDisabled': 'الإملاء الصوتي معطّل حتى يتم تنزيل نموذج STT المحلي وجاهزيته.', - 'voice.openLocalAiModel': 'فتح نموذج الذكاء الاصطناعي المحلي', - 'voice.serverRestarted': 'تمت إعادة تشغيل خادم الصوت بالإعدادات الجديدة.', - 'voice.settingsSaved': 'تم حفظ إعدادات الصوت.', - 'voice.serverStarted': 'تم تشغيل خادم الصوت.', - 'voice.serverStopped': 'تم إيقاف خادم الصوت.', - 'voice.saveVoiceSettings': 'حفظ إعدادات الصوت', - 'voice.startVoiceServer': 'تشغيل خادم الصوت', - 'voice.stopVoiceServer': 'إيقاف خادم الصوت', - 'voice.debugTitle': 'تصحيح الصوت', - 'autocomplete.title': 'الإكمال التلقائي', - 'autocomplete.settings': 'الإعدادات', - 'autocomplete.acceptWithTab': 'قبول بـ Tab', - 'autocomplete.stylePreset': 'نمط ضبط مسبق', - 'autocomplete.style.balanced': 'متوازن', - 'autocomplete.style.concise': 'موجز', - 'autocomplete.style.formal': 'رسمي', - 'autocomplete.style.casual': 'غير رسمي', - 'autocomplete.style.custom': 'مخصص', - 'autocomplete.disabledApps': 'التطبيقات المعطّلة (رمز حزمة/تطبيق واحد في كل سطر)', - 'autocomplete.saveSettings': 'حفظ الإعدادات', - 'autocomplete.saving': 'جارٍ الحفظ…', - 'autocomplete.runtime': 'بيئة التشغيل', - 'autocomplete.running': 'يعمل', - 'autocomplete.start': 'تشغيل', - 'autocomplete.stop': 'إيقاف', - 'autocomplete.settingsSaved': 'تم حفظ إعدادات الإكمال التلقائي.', - 'autocomplete.started': 'تم تشغيل الإكمال التلقائي.', - 'autocomplete.didNotStart': 'لم يبدأ الإكمال التلقائي. تحقق مما إذا كان مفعّلاً.', - 'autocomplete.stopped': 'تم إيقاف الإكمال التلقائي.', - 'autocomplete.advancedSettings': 'إعدادات متقدمة', - 'autocomplete.debugTitle': 'تصحيح الإكمال التلقائي', - 'chat.agentChat': 'محادثة الوكيل', - 'chat.overrides': 'التجاوزات', - 'chat.model': 'النموذج', - 'chat.temperature': 'درجة الحرارة', - 'chat.conversation': 'المحادثة', - 'chat.startAgentConversation': 'ابدأ محادثة مع الوكيل.', - 'chat.you': 'أنت', - 'chat.agent': 'الوكيل', - 'chat.askAgent': 'اسأل الوكيل أي شيء...', - 'chat.sendMessage': 'إرسال الرسالة', - 'composio.triageTitle': 'مشغّلات التكامل', - 'composio.triageDesc': - 'عند التفعيل، يمر كل مشغّل Composio وارد عبر خطوة فرز بالذكاء الاصطناعي تُصنّف الحدث وقد تبدأ إجراءات آلية — دورة LLM محلية واحدة لكل مشغّل. عطّله عالميًا أو لكل تكامل إذا كنت تفضل المراجعة اليدوية. إذا كان متغير البيئة', - 'composio.disableAllTriage': 'تعطيل فرز الذكاء الاصطناعي لجميع المشغّلات', - 'composio.triggersStillRecorded': 'تُسجَّل المشغّلات في السجل — لا تُشغَّل دورة LLM.', - 'composio.disableSpecificIntegrations': 'تعطيل فرز الذكاء الاصطناعي لتكاملات محددة', - 'composio.settingsSaved': 'تم حفظ الإعدادات', - 'composio.saveFailed': 'فشل الحفظ. حاول مرة أخرى.', - 'cron.title': 'مهام Cron', - 'cron.scheduledJobs': 'المهام المجدولة', - 'cron.manageCronJobs': 'إدارة مهام cron من جدولة النواة.', - 'cron.refreshCronJobs': 'تحديث مهام Cron', - 'localModel.modelStatus': 'حالة النموذج', - 'localModel.downloadModels': 'تنزيل النماذج', - 'localModel.usage': 'الاستخدام', - 'localModel.usageDesc': - 'اختر الأنظمة الفرعية التي تعمل على النموذج المحلي. ما هو معطّل يستخدم السحابة.', - 'localModel.enableRuntime': 'تفعيل بيئة الذكاء الاصطناعي المحلي', - 'localModel.enableRuntimeDesc': - 'مفتاح رئيسي. معطّل افتراضيًا — Ollama يبقى خاملاً. عند التشغيل، يستخدم ملخّص الشجرة وذكاء الشاشة والإكمال التلقائي النموذجَ المحلي دائمًا.', - 'localModel.advancedSettings': 'إعدادات متقدمة', - 'localModel.debugTitle': 'تصحيح النموذج المحلي', - 'localModel.ollamaServer.helperText': 'مثال: http://192.168.1.5:11434', - 'localModel.ollamaServer.label': 'عنوان URL لخادم Ollama', - 'localModel.ollamaServer.modelCount': 'نماذج', - 'localModel.ollamaServer.placeholder': 'http://localhost:11434', - 'localModel.ollamaServer.reachable': 'قابل للوصول', - 'localModel.ollamaServer.resetButton': 'إعادة التعيين إلى الافتراضي', - 'localModel.ollamaServer.saveButton': 'حفظ', - 'localModel.ollamaServer.testButton': 'اختبار الاتصال', - 'localModel.ollamaServer.unreachable': 'غير قابل للوصول', - 'localModel.ollamaServer.validationError': - 'يجب أن يكون عنوان URL صالحاً يبدأ بـ http:// أو https://', - 'screenAwareness.debugTitle': 'تصحيح وعي الشاشة', - 'memory.debugTitle': 'تصحيح الذاكرة', - 'webhooks.debugTitle': 'تصحيح الـ Webhooks', - 'notifications.routingTitle': 'توجيه الإشعارات', - 'common.reload': 'إعادة تحميل', - 'common.skip': 'تخطي', - 'common.disable': 'تعطيل', - 'common.enable': 'تفعيل', - 'chat.safetyTimeout': 'لا استجابة من الوكيل بعد دقيقتين. حاول مرة أخرى أو تحقق من اتصالك.', - 'chat.filter.all': 'الكل', - 'chat.filter.work': 'العمل', - 'chat.filter.briefing': 'الإحاطة', - 'chat.filter.notification': 'الإشعار', - 'chat.filter.workers': 'العمال', - 'chat.selectThread': 'اختر محادثة', - 'chat.threads': 'المحادثات', - 'chat.noThreads': 'لا توجد محادثات بعد', - 'chat.noLabelThreads': 'لا توجد محادثات "{label}"', - 'chat.noWorkerThreads': 'لا توجد محادثات عمال بعد', - 'chat.deleteThread': 'حذف المحادثة', - 'chat.deleteThreadConfirm': 'هل أنت متأكد من أنك تريد حذف "{title}"؟', - 'chat.untitledThread': 'محادثة بلا عنوان', - 'chat.editThreadTitle': 'Edit thread title', - 'chat.hideSidebar': 'إخفاء الشريط الجانبي', - 'chat.showSidebar': 'إظهار الشريط الجانبي', - 'chat.newThreadShortcut': 'محادثة جديدة (/new)', - 'chat.new': 'جديد', - 'chat.failedToLoadMessages': 'فشل تحميل الرسائل', - 'chat.thinkingIteration': 'جارٍ التفكير... ({n})', - 'chat.thinkingDots': 'جارٍ التفكير...', - 'chat.approachingLimit': 'الاقتراب من حد الاستخدام', - 'chat.approachingLimitMsg': 'لقد استخدمت {pct}% من حصتك المتاحة.', - 'chat.upgrade': 'الترقية', - 'chat.weeklyLimitHit': 'لقد وصلت إلى حدك الأسبوعي.', - 'chat.resets': 'إعادة ضبط', - 'chat.topUpToContinue': 'أضف رصيدًا للمتابعة.', - 'chat.budgetComplete': 'ميزانيتك المشمولة اكتملت. أضف رصيدًا أو قم بالترقية للمتابعة.', - 'chat.topUp': 'إضافة رصيد', - 'chat.cycle': 'الدورة', - 'chat.cycleSpent': 'الإنفاق في هذه الدورة', - 'chat.cycleRemaining': 'المتبقي', - 'chat.left': 'متبقٍ', - 'chat.setup': 'إعداد', - 'chat.switchToText': 'التبديل إلى النص', - 'chat.transcribing': 'جارٍ النسخ...', - 'chat.stopAndSend': 'إيقاف وإرسال', - 'chat.startTalking': 'ابدأ الحديث', - 'chat.playingVoiceReply': 'تشغيل الرد الصوتي', - 'chat.voiceHint': 'استخدم الميكروفون للتحدث', - 'chat.micUnavailable': 'الميكروفون غير متاح', - 'chat.turn': 'دورة', - 'chat.turns': 'دورات', - 'chat.openWorkerThread': 'فتح محادثة العامل', - 'chat.attachment.attach': 'إرفاق صورة', - 'chat.attachment.remove': 'إزالة {name}', - 'chat.attachment.tooMany': 'الحد الأقصى {max} صور لكل رسالة', - 'chat.attachment.tooLarge': 'حجم الصورة يتجاوز الحد المسموح {max}', - 'chat.attachment.unsupportedType': 'نوع ملف غير مدعوم. استخدم PNG أو JPEG أو WebP أو GIF أو BMP.', - 'chat.attachment.readFailed': 'تعذر قراءة الملف', - 'memory.searchAria': 'البحث في الذاكرة', - 'memory.searchPlaceholder': 'البحث في إدخالات الذاكرة...', - 'memory.sourceFilter.all': 'جميع المصادر', - 'memory.sourceFilter.email': 'البريد الإلكتروني', - 'memory.sourceFilter.calendar': 'التقويم', - 'memory.sourceFilter.telegram': 'Telegram', - 'memory.sourceFilter.aiInsight': 'رؤية الذكاء الاصطناعي', - 'memory.sourceFilter.system': 'النظام', - 'memory.sourceFilter.trading': 'التداول', - 'memory.sourceFilter.security': 'الأمان', - 'memory.ingestionActivity': 'نشاط الاستيعاب', - 'memory.events': 'أحداث', - 'memory.event': 'حدث', - 'memory.overTheLast': 'خلال آخر', - 'memory.months': 'أشهر', - 'memory.peak': 'الذروة', - 'memory.perDay': '/يوم', - 'memory.less': 'أقل', - 'memory.more': 'أكثر', - 'memory.on': 'في', - 'memory.loading': 'جارٍ تحميل الذاكرة', - 'memory.fetching': 'جارٍ جلب إدخالات الذاكرة...', - 'memory.analyzing': 'جارٍ تحليل الذاكرة', - 'memory.analyzingHint': 'جارٍ معالجة ذكرياتك لاستخلاص الرؤى...', - 'memory.noMatches': 'لا توجد نتائج مطابقة', - 'memory.noMatchesHint': 'جرّب تغيير مصطلحات البحث أو المرشحات.', - 'memory.allCaughtUp': 'تم مراجعة الكل', - 'memory.allCaughtUpHint': 'لا توجد إدخالات ذاكرة جديدة للمعالجة.', - 'memory.noAnalysis': 'لا يوجد تحليل بعد', - 'memory.noAnalysisHint': 'شغّل تحليلاً لاكتشاف الأنماط في ذكرياتك.', - 'memory.emptyHint': 'ابدأ التفاعل لإنشاء أول ذكرياتك.', - 'mic.unavailable': 'الميكروفون غير متاح', - 'mic.permissionDenied': 'تم رفض إذن الميكروفون', - 'mic.failedToStartRecorder': 'فشل تشغيل المسجّل', - 'mic.transcribing': 'جارٍ النسخ...', - 'mic.tapToSend': 'انقر للإرسال', - 'mic.waitingForAgent': 'في انتظار الوكيل...', - 'mic.tapAndSpeak': 'انقر وتحدث', - 'mic.stopRecording': 'إيقاف التسجيل وإرسال', - 'mic.startRecording': 'بدء التسجيل', - 'token.usageLimitReached': 'تم الوصول إلى حد الاستخدام', - 'token.approachingLimit': 'الاقتراب من الحد', - 'token.planClickForDetails': 'الخطة - انقر للتفاصيل', - 'token.sessionTokens': 'وارد: {in} | صادر: {out} | الدورات: {turns}', - 'token.limit': 'تم الوصول إلى الحد', - 'catalog.noCapabilityBinding': 'لا يوجد ربط بالإمكانات', - 'catalog.downloadFailed': 'فشل التنزيل', - 'catalog.active': 'نشط', - 'catalog.installed': 'مثبّت', - 'catalog.notDownloaded': 'لم يتم التنزيل', - 'catalog.inUse': 'قيد الاستخدام', - 'catalog.use': 'استخدام', - 'catalog.deleteModel': 'حذف النموذج', - 'catalog.download': 'تنزيل', - 'navigator.recent': 'الأخيرة', - 'navigator.today': 'اليوم', - 'navigator.thisWeek': 'هذا الأسبوع', - 'navigator.sources': 'المصادر', - 'navigator.email': 'البريد الإلكتروني', - 'navigator.slack': 'Slack', - 'navigator.chat': 'المحادثة', - 'navigator.documents': 'المستندات', - 'navigator.people': 'الأشخاص', - 'navigator.topics': 'المواضيع', - 'dreams.description': 'الأحلام هي انعكاسات مُولَّدة بالذكاء الاصطناعي تُركّب الأنماط من ذكرياتك.', - 'dreams.comingSoon': 'قريبًا', - 'assignment.memoryLlm': 'LLM الذاكرة', - 'assignment.memoryLlmAria': 'اختيار LLM الذاكرة', - 'assignment.embedder': 'المُضمِّن', - 'assignment.loaded': 'مُحمَّل', - 'assignment.notDownloaded': 'لم يتم التنزيل', - 'assignment.usedForExtractSummarise': 'مُستخدَم للاستخراج والتلخيص', - 'insights.knownFacts': 'الحقائق المعروفة', - 'insights.preferences': 'التفضيلات', - 'insights.relationships': 'العلاقات', - 'insights.skills': 'المهارات', - 'insights.opinions': 'الآراء', - // Developer options menu items (#2225) — English stubs; native translations welcome - 'devOptions.menuAi': 'تكوين الذكاء الاصطناعي', - 'devOptions.menuAiDesc': 'موفرو السحابة، ونماذج Ollama المحلية، والتوجيه لكل حمل عمل', - 'devOptions.menuScreenAware': 'التعرف على الشاشة', - 'devOptions.menuScreenAwareDesc': - 'أذونات التقاط الشاشة، وسياسة المراقبة، وعناصر التحكم في الجلسة', - 'devOptions.menuMessaging': 'قنوات المراسلة', - 'devOptions.menuMessagingDesc': 'تكوين أوضاع المصادقة Telegram/Discord وتوجيه القناة الافتراضية', - 'devOptions.menuTools': 'الأدوات', - 'devOptions.menuToolsDesc': 'تمكين أو تعطيل الإمكانات التي يمكن أن يستخدمها OpenHuman نيابة عنك', - 'devOptions.menuAgentChat': 'دردشة الوكيل', - 'devOptions.menuAgentChatDesc': 'محادثة وكيل الاختبار مع تجاوزات النموذج ودرجة الحرارة', - 'devOptions.menuCronJobs': 'وظائف Cron', - 'devOptions.menuCronJobsDesc': 'عرض المهام المجدولة وتكوينها لمهارات وقت التشغيل', - 'devOptions.menuLocalModelDebug': 'تصحيح أخطاء النموذج المحلي', - 'devOptions.menuLocalModelDebugDesc': - 'Ollama التكوين وتنزيلات الأصول واختبارات النماذج والتشخيصات', - 'devOptions.menuWebhooksDebug': 'خطافات الويب', - 'devOptions.menuWebhooksDebugDesc': 'فحص تسجيلات خطاف الويب لوقت التشغيل وسجلات الطلبات الملتقطة', - 'devOptions.menuIntelligence': 'الذكاء', - 'devOptions.menuIntelligenceDesc': 'مساحة عمل الذاكرة ومحرك العقل الباطن والأحلام والإعدادات', - 'devOptions.menuNotificationRouting': 'توجيه الإشعارات', - 'devOptions.menuNotificationRoutingDesc': - 'تسجيل أهمية الذكاء الاصطناعي وتصعيد المنسق لتنبيهات التكامل', - 'devOptions.menuComposeIOTriggers': 'مشغلات ComposeIO', - 'devOptions.menuComposeIOTriggersDesc': 'عرض سجل وأرشيف مشغلات ComposeIO', - 'devOptions.menuComposioRouting': 'Composio التوجيه (الوضع المباشر)', - 'devOptions.menuComposioRoutingDesc': - 'أحضر مفتاح Composio API الخاص بك وقم بتوجيه المكالمات مباشرة إلى backend.composio.dev', - 'devOptions.menuComposioTriggers': 'مشغلات التكامل', - 'devOptions.menuComposioTriggersDesc': - 'تكوين إعدادات فرز الذكاء الاصطناعي لمشغلات التكامل Composio', - 'mic.deviceSelector': 'جهاز الميكروفون', - 'mic.tapToSendCountdown': 'انقر للإرسال ({seconds} ث)', - 'settings.agents.title': 'Agents', - 'settings.agents.subtitle': - 'Manage the agents available for delegation — built-in defaults and your own custom agents.', - 'settings.agents.menuDesc': 'Manage built-in and custom agents', - 'settings.agents.newAgent': 'New agent', - 'settings.agents.loadError': "Couldn't load agents", - 'settings.agents.empty': 'No agents yet', - 'settings.agents.sourceDefault': 'Built-in', - 'settings.agents.sourceCustom': 'Custom', - 'settings.agents.enable': 'Enable agent', - 'settings.agents.disable': 'Disable agent', - 'settings.agents.edit': 'Edit', - 'settings.agents.delete': 'Delete', - 'settings.agents.reset': 'Reset to default', - 'settings.agents.modelLabel': 'Model', - 'settings.agents.toolsLabel': 'Tools', - 'settings.agents.toolsAll': 'All tools', - 'settings.agents.toolsCount': '{count} tools', - 'settings.agents.actionFailed': "Couldn't update the agent", - 'settings.agents.orchestratorLocked': 'The orchestrator is always enabled.', - 'settings.agents.editor.createTitle': 'New agent', - 'settings.agents.editor.editTitle': 'Edit agent', - 'settings.agents.editor.id': 'ID', - 'settings.agents.editor.idHint': 'Lowercase letters, numbers, _ and - only.', - 'settings.agents.editor.name': 'Name', - 'settings.agents.editor.description': 'Description', - 'settings.agents.editor.model': 'Model (optional)', - 'settings.agents.editor.modelPlaceholder': 'e.g. inherit, hint:fast, or a model id', - 'settings.agents.editor.systemPrompt': 'System prompt (optional)', - 'settings.agents.editor.tools': 'Allowed tools', - 'settings.agents.editor.toolsHint': 'One tool name per line. Use * for all tools.', - 'settings.agents.editor.defaultsNote': - 'Editing a built-in agent saves an override you can reset later.', - 'settings.agents.editor.save': 'Save', - 'settings.agents.editor.create': 'Create agent', - 'settings.agents.editor.saving': 'Saving…', - 'settings.agentsSection.title': 'Agents', - 'settings.agentsSection.description': - 'Manage your agents, their autonomy, and what they can access on this computer.', - 'settings.agentsSection.menuDesc': 'Registry, autonomy & OS access', - 'settings.agents.editor.notFound': 'Agent not found.', - 'settings.agents.editor.modelInherit': 'Inherit (platform default)', - 'settings.agents.editor.modelHints': 'Route hints', - 'settings.agents.editor.modelTiers': 'Model tiers', - 'settings.agents.editor.modelCustom': 'Custom model id…', - 'settings.agents.editor.modelCustomPlaceholder': 'e.g. anthropic/claude-sonnet-4', - 'settings.agents.editor.selectTools': 'Add tools', - 'settings.agents.editor.toolsAllSelected': 'All tools', - 'settings.agents.editor.toolsNoneSelected': 'No tools selected', - 'settings.agents.editor.removeToolAria': 'Remove {tool}', - 'settings.agents.editor.toolsModalTitle': 'Allowed tools', - 'settings.agents.editor.toolsSelectedCount': '{count} selected', - 'settings.agents.editor.toolsSearchPlaceholder': 'Search tools…', - 'settings.agents.editor.toolsAllowAll': 'Allow all tools (*)', - 'settings.agents.editor.toolsAllowAllHint': 'This agent can use every available tool.', - 'settings.agents.editor.toolsLoading': 'Loading tools…', - 'settings.agents.editor.toolsLoadError': 'Couldn’t load tools', - 'settings.agents.editor.toolsEmpty': 'No tools match your search.', - 'settings.agents.editor.toolsDone': 'Done', - 'settings.agents.editor.builtInReadonly': - 'Built-in agents can’t be edited. You can enable, disable, or reset them from the agents list.', -}; - -export default ar2; diff --git a/app/src/lib/i18n/chunks/ar-3.ts b/app/src/lib/i18n/chunks/ar-3.ts deleted file mode 100644 index 958d5d3ac..000000000 --- a/app/src/lib/i18n/chunks/ar-3.ts +++ /dev/null @@ -1,498 +0,0 @@ -import type { TranslationMap } from '../types'; - -// Arabic (العربية) chunk 3/5. Translated from chunks/en-3.ts. -const ar3: TranslationMap = { - 'insights.other': 'أخرى', - 'insights.title': 'الرؤى', - 'insights.empty': 'لا توجد رؤى بعد. تُولَّد الرؤى مع نمو ذاكرتك.', - 'insights.description': 'استنادًا إلى {count} علاقة في رسم بياني ذاكرتك.', - 'insights.items': 'عناصر', - 'insights.more': 'المزيد', - 'calls.joiningCall': 'جارٍ الانضمام إلى المكالمة', - 'calls.meetWindowOpening': 'جارٍ فتح نافذة Meet...', - 'calls.failedToStart': 'فشل بدء مكالمة Meet', - 'calls.couldNotStart': 'تعذّر بدء المكالمة', - 'calls.failedToClose': 'فشل إغلاق المكالمة', - 'calls.couldNotClose': 'تعذّر إغلاق المكالمة', - 'calls.joinMeet': 'الانضمام إلى مكالمة Google Meet', - 'calls.joinMeetDescription': 'أدخل رابط Google Meet للانضمام.', - 'calls.meetLink': 'رابط Meet', - 'calls.displayName': 'الاسم المعروض', - 'calls.openingMeet': 'جارٍ فتح Meet...', - 'calls.joinCall': 'انضمام إلى المكالمة', - 'calls.activeCalls': 'المكالمات النشطة', - 'calls.leave': 'مغادرة', - 'workspace.wipeConfirm': 'هل أنت متأكد من أنك تريد مسح جميع الذاكرة؟ لا يمكن التراجع عن هذا.', - 'workspace.resetTreeConfirm': 'هل أنت متأكد من أنك تريد إعادة بناء شجرة الذاكرة؟', - 'workspace.wipeTitle': 'مسح الذاكرة', - 'workspace.resetting': 'جارٍ إعادة الضبط...', - 'workspace.resetMemory': 'إعادة ضبط الذاكرة', - 'workspace.resetTreeTitle': 'إعادة بناء شجرة الذاكرة', - 'workspace.rebuilding': 'جارٍ إعادة البناء...', - 'workspace.resetMemoryTree': 'إعادة ضبط شجرة الذاكرة', - 'workspace.building': 'جارٍ البناء...', - 'workspace.buildSummaryTrees': 'بناء أشجار الملخصات', - 'workspace.viewVault': 'عرض الخزينة', - 'workspace.openingVaultTitle': 'فتح المخزن في Obsidian', - 'workspace.openingVaultMessage': - "If Obsidian doesn't open, install it from obsidian.md or use Reveal Folder. Vault path:", - 'workspace.openVaultFailedTitle': "Couldn't open vault in Obsidian", - 'workspace.openVaultFailedMessage': 'استخدم Reveal Folder لفتح دليل المخزن مباشرة. مسار المدفن:', - 'workspace.revealVaultFailed': "Couldn't reveal vault folder", - 'workspace.revealFolder': 'كشف المجلد', - 'workspace.checkingVault': 'Checking…', - 'workspace.vaultNotRegisteredHelp': - 'Obsidian only opens folders you\'ve added as a vault. In Obsidian, choose "Open folder as vault" and pick the folder below — you only need to do this once. Then click View Vault again.', - 'workspace.obsidianNotFoundHelp': - "We couldn't find Obsidian on this device. Install it, or — if it's installed somewhere non-standard — set its config folder under Advanced.", - 'workspace.openAnyway': 'Open in Obsidian anyway', - 'workspace.installObsidian': 'Install Obsidian', - 'workspace.obsidianAdvanced': 'Obsidian installed elsewhere?', - 'workspace.obsidianConfigDirLabel': 'Obsidian config folder', - 'workspace.obsidianConfigDirHint': - 'Path to the folder containing obsidian.json (e.g. ~/.config/obsidian). Leave blank to auto-detect.', - 'workspace.obsidianConfigDirPlaceholder': '~/.config/obsidian', - 'workspace.graphLoadFailed': 'فشل تحميل الرسم البياني للذاكرة', - 'workspace.loadingGraph': 'جارٍ تحميل الرسم البياني للذاكرة...', - 'workspace.graphViewMode': 'وضع عرض الرسم البياني للذاكرة', - 'workspace.trees': 'الأشجار', - 'workspace.contacts': 'جهات الاتصال', - 'graph.noContactMentions': 'لا توجد إشارات لجهات اتصال', - 'graph.noMemory': 'لا توجد ذاكرة', - 'graph.source': 'المصدر', - 'graph.topic': 'الموضوع', - 'graph.global': 'عام', - 'graph.document': 'المستند', - 'graph.contact': 'جهة الاتصال', - 'graph.nodes': 'عقد', - 'graph.parentChild': 'أب-ابن', - 'graph.documentContact': 'مستند-جهة اتصال', - 'graph.link': 'رابط', - 'graph.links': 'روابط', - 'graph.children': 'أبناء', - 'graph.clickToOpenObsidian': 'انقر للفتح في Obsidian', - 'graph.person': 'شخص', - 'modal.dontShowAgain': 'لا تظهر اقتراحات مماثلة', - 'reflections.loading': 'جارٍ تحميل التأملات...', - 'reflections.empty': 'لا توجد تأملات بعد', - 'reflections.title': 'التأملات', - 'reflections.proposedAction': 'الإجراء المقترح', - 'reflections.act': 'تنفيذ', - 'reflections.dismiss': 'تجاهل', - 'whatsapp.chatsSynced': 'محادثات مزامنة', - 'whatsapp.chatSynced': 'محادثة مزامنة', - 'sync.active': 'نشط', - 'sync.recent': 'الأخيرة', - 'sync.idle': 'خامل', - 'sync.memorySources': 'مصادر الذاكرة', - 'sync.noConnectedSources': 'لا توجد مصادر متصلة', - 'sync.chunks': 'أجزاء', - 'sync.lastChunk': 'آخر جزء:', - 'sync.pending': 'معلّق', - 'sync.processed': 'تمت المعالجة', - 'sync.syncing': 'جارٍ المزامنة…', - 'sync.sync': 'مزامنة', - 'sync.failedToLoad': 'فشل تحميل حالة المزامنة', - 'sync.noContent': 'لم تتم مزامنة أي محتوى في الذاكرة بعد. اربط تكاملاً للبدء.', - 'memorySources.title': 'Memory Sources', - 'memorySources.empty': 'No memory sources yet. Add one to start feeding memory.', - 'memorySources.loadingConnections': 'Loading connections…', - 'memorySources.noConnections': - 'No active Composio connections found. Connect an integration first.', - 'memorySources.pickConnection': 'Pick a connection', - 'memorySources.selectConnection': '— Select a connection —', - 'memorySources.composioListFailed': 'Failed to load Composio connections.', - 'memorySources.browse': 'Browse…', - 'memorySources.folderPathPlaceholder': '/Users/you/notes', - 'memorySources.globPatternPlaceholder': '**/*.md', - 'memorySources.repoUrlPlaceholder': 'https://github.com/org/repo', - 'memorySources.branchPlaceholder': 'main', - 'memorySources.feedUrlPlaceholder': 'https://example.com/feed.xml', - 'memorySources.pageUrlPlaceholder': 'https://example.com/article', - 'memorySources.cssSelectorPlaceholder': 'article', - 'memorySources.searchQueryPlaceholder': 'from:user AI safety', - 'memorySources.kind.composio': 'Integration', - 'memorySources.kind.folder': 'Local Folder', - 'memorySources.kind.github_repo': 'GitHub Repo', - 'memorySources.kind.twitter_query': 'Twitter Search', - 'memorySources.kind.rss_feed': 'RSS Feed', - 'memorySources.kind.web_page': 'Web Page', - 'memorySources.sync.successTitle': 'Syncing', - 'memorySources.sync.successMessage': 'Progress will appear shortly.', - 'memorySources.sync.failedTitle': 'Sync failed:', - 'time.justNow': 'just now', - 'time.secondsAgoSuffix': 's ago', - 'time.minutesAgoSuffix': 'm ago', - 'time.hoursAgoSuffix': 'h ago', - 'time.daysAgoSuffix': 'd ago', - 'memorySources.customSources': 'Custom Sources', - 'memorySources.addSource': 'Add Source', - 'memorySources.noCustomSources': - 'No custom sources yet. Add a folder, GitHub repo, RSS feed, or web page to start.', - 'memorySources.pickKind': 'What kind of source do you want to add?', - 'memorySources.backToKinds': 'Back to source types', - 'memorySources.label': 'Label', - 'memorySources.labelPlaceholder': 'My research notes', - 'memorySources.add': 'Add', - 'memorySources.adding': 'Adding…', - 'memorySources.added': 'Source added', - 'memorySources.removed': 'Source removed', - 'memorySources.remove': 'Remove', - 'memorySources.enable': 'Enable', - 'memorySources.disable': 'Disable', - 'memorySources.toggleFailed': 'Toggle failed', - 'memorySources.removeFailed': 'Remove failed', - 'memorySources.folderPath': 'Folder path', - 'memorySources.globPattern': 'Glob pattern', - 'memorySources.repoUrl': 'Repository URL', - 'memorySources.branch': 'Branch', - 'memorySources.feedUrl': 'Feed URL', - 'memorySources.pageUrl': 'Page URL', - 'memorySources.cssSelector': 'CSS selector (optional)', - 'memorySources.searchQuery': 'Search query', - 'backend.aiBackend': 'خلفية الذكاء الاصطناعي', - 'backend.cloud': 'سحابي', - 'backend.recommended': 'موصى به', - 'backend.cloudDescription': 'نماذج سريعة وقوية مستضافة على خوادمنا. جاهزة للاستخدام فورًا.', - 'backend.privacyNote': 'لا تُرسَل أي بيانات شخصية أو رسائل أو مفاتيح إلى خوادمنا.', - 'backend.local': 'محلي', - 'backend.advanced': 'متقدم', - 'backend.localDescription': - 'تشغيل النماذج على جهازك باستخدام Ollama. خصوصية كاملة، يتطلب إعدادًا.', - 'backend.ramRecommended': '16 جيجابايت+ RAM موصى به', - 'subconscious.tasks': 'مهام', - 'subconscious.ticks': 'دورات', - 'subconscious.last': 'آخر', - 'subconscious.failed': 'فشل', - 'subconscious.tickInterval': 'فترة الدورة', - 'subconscious.runNow': 'تشغيل الآن', - 'subconscious.providerUnavailableTitle': 'تم إيقاف اللاوعي مؤقتًا', - 'subconscious.providerSettings': 'إعدادات الذكاء الاصطناعي', - 'subconscious.approvalNeeded': 'يلزم الموافقة', - 'subconscious.requiresApproval': 'يتطلب الموافقة', - 'subconscious.fixInConnections': 'إصلاح في الاتصالات', - 'subconscious.goAhead': 'تقدّم', - 'subconscious.activeTasks': 'المهام النشطة', - 'subconscious.noActiveTasks': 'لا توجد مهام نشطة', - 'subconscious.default': 'افتراضي', - 'subconscious.addTaskPlaceholder': 'أضف مهمة جديدة...', - 'subconscious.activityLog': 'سجل النشاط', - 'subconscious.noActivity': 'لا يوجد نشاط بعد', - 'subconscious.decision.nothingNew': 'لا جديد', - 'subconscious.decision.completed': 'مكتمل', - 'subconscious.decision.evaluating': 'جارٍ التقييم', - 'subconscious.decision.waitingApproval': 'في انتظار الموافقة', - 'subconscious.decision.failed': 'فشل', - 'subconscious.decision.cancelled': 'ملغي', - 'subconscious.decision.skipped': 'تم تخطيه', - 'actionable.complete': 'إتمام', - 'actionable.dismiss': 'تجاهل', - 'actionable.snooze': 'تأجيل', - 'actionable.new': 'جديد', - 'stats.storage': 'التخزين', - 'stats.files': 'ملفات', - 'stats.documents': 'المستندات', - 'stats.today': 'اليوم', - 'stats.namespaces': 'مساحات الأسماء', - 'stats.relations': 'العلاقات', - 'stats.firstMemory': 'أول ذكرى', - 'stats.latest': 'الأحدث', - 'stats.sessions': 'الجلسات', - 'stats.tokens': 'رموز', - 'bootCheck.invalidUrl': 'يرجى إدخال عنوان URL لبيئة التشغيل.', - 'bootCheck.urlMustStartWith': 'يجب أن يبدأ عنوان URL بـ http:// أو https://', - 'bootCheck.validUrlRequired': 'لا يبدو أن هذا عنوان URL صالح (جرّب https://core.example.com/rpc)', - 'bootCheck.tokenRequired': 'سنحتاج إلى رمز مصادقة للاتصال.', - 'bootCheck.chooseCoreMode': 'اختر بيئة التشغيل', - 'bootCheck.connectToCore': 'اتصل ببيئة تشغيلك', - 'bootCheck.desktopDescription': 'يحتاج OpenHuman إلى بيئة تشغيل للعمل. اختر مكانها.', - 'bootCheck.webDescription': - 'على الويب، يتصل OpenHuman ببيئة تشغيل تتحكم فيها. أدخل عنوان URL الخاص بها ورمز المصادقة أدناه، أو احصل على تطبيق سطح المكتب لتشغيلها مباشرة على جهازك.', - 'bootCheck.preferDesktop': 'تفضّل إبقاء كل شيء على جهازك؟', - 'bootCheck.downloadDesktop': 'احصل على تطبيق سطح المكتب', - 'bootCheck.localRecommended': 'التشغيل محليًا (موصى به)', - 'bootCheck.localDescription': - 'يعمل مباشرة على جهازك. الأسرع، خصوصي تمامًا، لا شيء يحتاج إلى إعداد.', - 'bootCheck.cloudMode': 'التشغيل على السحابة (معقد)', - 'bootCheck.cloudDescription': - 'الاتصال ببيئة تشغيل تستضيفها في مكان آخر. تبقى متصلة 24×7 حتى لا تحتاج إلى إبقاء هذا الجهاز يعمل.', - 'bootCheck.coreRpcUrl': 'عنوان URL لبيئة التشغيل', - 'bootCheck.rpcUrlPlaceholder': 'https://core.example.com/rpc', - 'bootCheck.authToken': 'رمز المصادقة', - 'bootCheck.bearerTokenPlaceholder': 'رمز Bearer من بيئة تشغيلك البعيدة', - 'bootCheck.storedLocally': 'يُحفظ على هذا الجهاز فقط. يُرسَل كـ ', - 'bootCheck.testing': 'جارٍ الاختبار…', - 'bootCheck.testConnection': 'اختبار الاتصال', - 'bootCheck.connectedOk': 'متصل. أنت جاهز للانطلاق.', - 'bootCheck.authFailed': 'الرمز لم ينجح. تحقق منه وحاول مرة أخرى.', - 'bootCheck.unreachablePrefix': 'تعذّر الوصول إليه:', - 'bootCheck.checkingCore': 'جارٍ تنشيط بيئة تشغيلك…', - 'bootCheck.cannotReach': 'تعذّر الوصول إلى بيئة التشغيل', - 'bootCheck.cannotReachDesc': 'تعذّر الاتصال ببيئة تشغيلك. هل تريد تجربة بيئة مختلفة؟', - 'bootCheck.switchMode': 'اختر بيئة تشغيل مختلفة', - 'bootCheck.quit': 'خروج', - 'bootCheck.legacyDetected': 'تم اكتشاف بيئة تشغيل خلفية قديمة', - 'bootCheck.legacyDescription': - 'خدمة OpenHuman مثبّتة بشكل منفصل تعمل بالفعل على هذا الجهاز. نحتاج إلى إزالتها قبل أن تتولى بيئة التشغيل المدمجة.', - 'bootCheck.removing': 'جارٍ الإزالة…', - 'bootCheck.removeContinue': 'إزالة ومتابعة', - 'bootCheck.localNeedsRestart': 'بيئة التشغيل المحلية تحتاج إلى إعادة تشغيل', - 'bootCheck.localNeedsRestartDesc': - 'بيئة تشغيلك المحلية على إصدار مختلف عن هذا التطبيق. ستعيد إعادة التشغيل السريعة مزامنتهما.', - 'bootCheck.restarting': 'جارٍ إعادة التشغيل…', - 'bootCheck.restartCore': 'إعادة تشغيل بيئة التشغيل', - 'bootCheck.cloudNeedsUpdate': 'بيئة التشغيل السحابية تحتاج إلى تحديث', - 'bootCheck.cloudNeedsUpdateDesc': - 'بيئة تشغيلك السحابية على إصدار مختلف عن هذا التطبيق. شغّل المحدّث لإعادة مزامنتهما.', - 'bootCheck.updating': 'جارٍ التحديث…', - 'bootCheck.updateCloudCore': 'تحديث بيئة التشغيل السحابية', - 'bootCheck.versionCheckFailed': 'فشل التحقق من إصدار بيئة التشغيل', - 'bootCheck.versionCheckFailedDesc': - 'بيئة تشغيلك تعمل لكنها لا تُبلّغ عن إصدارها. قد تكون قديمة. أعد تشغيلها أو حدّثها للمتابعة.', - 'bootCheck.working': 'جارٍ العمل…', - 'bootCheck.restartUpdateCore': 'إعادة تشغيل / تحديث بيئة التشغيل', - 'bootCheck.unexpectedError': 'خطأ غير متوقع في فحص بدء التشغيل', - 'bootCheck.actionFailed': 'حدث خطأ ما. يرجى المحاولة مرة أخرى.', - 'bootCheck.portConflictTitle': 'تعذّر تشغيل محرّك التطبيق', - 'bootCheck.portConflictBody': - 'هناك عملية أخرى تستخدم منفذ الشبكة الذي يحتاجه OpenHuman. سنحاول إصلاح ذلك تلقائيًا.', - 'bootCheck.portConflictFixButton': 'إصلاح تلقائي', - 'bootCheck.portConflictFixing': 'جارٍ الإصلاح…', - 'bootCheck.portConflictFixFailed': - 'لم ينجح الإصلاح التلقائي. يُرجى إعادة تشغيل الكمبيوتر والمحاولة مجددًا.', - 'notifications.justNow': 'الآن', - 'notifications.minAgo': 'منذ {n} د', - 'notifications.hrAgo': 'منذ {n} س', - 'notifications.dayAgo': 'منذ {n} ي', - 'notifications.category.messages': 'الرسائل', - 'notifications.category.agents': 'الوكلاء', - 'notifications.category.skills': 'المهارات', - 'notifications.category.system': 'النظام', - 'notifications.category.meetings': 'الاجتماعات', - 'notifications.category.reminders': 'التذكيرات', - 'notifications.category.important': 'مهم', - 'about.update.status.checking': 'جارٍ التحقق...', - 'about.update.status.available': 'v{version} متاح', - 'about.update.status.availableNoVersion': 'تحديث متاح', - 'about.update.status.downloading': 'جارٍ التنزيل...', - 'about.update.status.readyToInstall': 'v{version} جاهز للتثبيت', - 'about.update.status.readyToInstallNoVersion': - 'تم تنزيل إصدار جديد وهو جاهز. أعد التشغيل للتطبيق.', - 'about.update.status.installing': 'جارٍ التثبيت...', - 'about.update.status.restarting': 'جارٍ إعادة التشغيل...', - 'about.update.status.upToDate': 'أنت تستخدم أحدث إصدار.', - 'about.update.status.error': 'فشل التحقق من التحديثات', - 'about.update.status.default': 'التحقق من التحديثات', - 'welcome.connectionFailed': 'فشل الاتصال: {status} {statusText}', - 'welcome.connectionFailedMsg': 'فشل الاتصال: {message}', - 'welcome.continueLocally': 'المتابعة محليًا', - 'welcome.localSessionStarting': 'بدء الجلسة المحلية...', - 'welcome.localSessionDesc': 'يستخدم ملف تعريف محلي غير متصل ويتخطى TinyHumans OAuth.', - 'chat.agentChatDesc': 'فتح جلسة محادثة مباشرة مع الوكيل.', - 'channels.activeRouteValue': '{channel} عبر {authMode}', - 'privacy.dataKind.messages': 'الرسائل', - 'privacy.dataKind.agents': 'الوكلاء', - 'privacy.dataKind.skills': 'المهارات', - 'privacy.dataKind.system': 'النظام', - 'privacy.dataKind.meetings': 'الاجتماعات', - 'privacy.dataKind.reminders': 'التذكيرات', - 'privacy.dataKind.important': 'مهم', - 'onboarding.enableLocalAI': 'تفعيل الذكاء الاصطناعي المحلي', - 'onboarding.skills.status.available': 'متاح', - 'onboarding.skills.status.connected': 'متصل', - 'onboarding.skills.status.connecting': 'جارٍ الاتصال', - 'onboarding.skills.status.error': 'خطأ', - 'onboarding.skills.status.unavailable': 'غير متاح', - 'composio.statusUnavailable': 'الحالة غير متاحة', - 'composio.envVarOverrides': 'محدد، فإنه يتجاوز هذا الإعداد.', - 'memory.day.sun': 'أحد', - 'memory.day.mon': 'إثن', - 'memory.day.tue': 'ثلا', - 'memory.day.wed': 'أرب', - 'memory.day.thu': 'خمي', - 'memory.day.fri': 'جمع', - 'memory.day.sat': 'سبت', - 'memory.ingesting': 'جارٍ الاستيعاب', - 'memory.ingestionQueued': 'في قائمة الانتظار', - 'memory.ingestingTitle': 'جارٍ استيعاب {title}', - 'mic.noAudioCaptured': 'لم يُلتقط أي صوت', - 'mic.noSpeechDetected': 'لم يُكتشف أي كلام', - 'mic.lowConfidenceResult': 'تعذّر فهم الصوت بوضوح — يرجى المحاولة مرة أخرى', - 'mic.failedToStopRecording': 'فشل إيقاف التسجيل: {message}', - 'mic.transcriptionFailed': 'فشل النسخ: {message}', - 'reflections.kind.retrospective': 'مراجعة', - 'reflections.kind.derivedFact': 'حقيقة مستنتجة', - 'reflections.kind.moodInsight': 'رؤية المزاج', - 'reflections.kind.relationshipInsight': 'رؤية العلاقة', - 'graph.tooltip.summary': 'ملخص', - 'graph.tooltip.contact': 'جهة اتصال', - 'localModel.usage.never': 'أبدًا', - 'localModel.usage.mediumLoad': 'حمل متوسط', - 'localModel.usage.lowLoad': 'حمل منخفض', - 'localModel.usage.idleMode': 'وضع الخمول', - 'localModel.rebootstrapComplete': 'اكتملت إعادة تمهيد النموذج.', - 'localModel.modelsVerified': 'تم التحقق من النماذج المحلية.', - 'accounts.addModal.allConnected': 'الكل متصل', - 'accounts.addModal.title': 'إضافة حساب', - 'accounts.respondQueue.empty': 'فارغ', - 'accounts.respondQueue.hide': 'إخفاء قائمة الردود', - 'accounts.respondQueue.loadFailed': 'فشل تحميل قائمة الردود', - 'accounts.respondQueue.loading': 'جارٍ تحميل القائمة…', - 'accounts.respondQueue.pending': 'معلّق', - 'accounts.respondQueue.show': 'إظهار قائمة الردود', - 'accounts.respondQueue.title': 'قائمة الردود', - 'accounts.webviewHost.almostReady': 'على وشك الجهوزية...', - 'accounts.webviewHost.loadTimeout': 'انتهت مهلة تحميل العرض', - 'accounts.webviewHost.loading': 'جارٍ تحميل {providerName}...', - 'accounts.webviewHost.loadingAccount': 'جارٍ تحميل الحساب', - 'accounts.webviewHost.restoringSession': 'جارٍ استعادة الجلسة...', - 'accounts.webviewHost.retryLoading': 'إعادة محاولة التحميل', - 'accounts.webviewHost.takingLonger': '{providerName} يستغرق وقتًا أطول من المتوقع.', - 'accounts.webviewHost.timeoutHint': 'تلميح انتهاء المهلة', - 'app.connectionBadge.composio': 'Composio', - 'app.connectionBadge.messaging': 'المراسلة', - 'app.connectionIndicator.connected': 'متصل بـ OpenHuman AI 🚀', - 'app.connectionIndicator.connecting': 'جارٍ الاتصال', - 'app.connectionIndicator.coreOffline': 'النواة غير متصلة', - 'app.connectionIndicator.disconnected': 'غير متصل', - 'app.connectionIndicator.offline': 'غير متصل بالإنترنت', - 'app.connectionIndicator.reconnecting': 'إعادة الاتصال…', - 'app.errorFallback.componentStack': 'مكدس المكوّنات', - 'app.errorFallback.downloadLatest': 'تنزيل الأحدث', - 'app.errorFallback.heading': 'العنوان', - 'app.errorFallback.hint': 'تلميح', - 'app.errorFallback.reloadApp': 'إعادة تحميل التطبيق', - 'app.errorFallback.subheading': 'العنوان الفرعي', - 'app.errorFallback.tryRecover': 'محاولة الاسترداد', - 'app.localAiDownload.installing': 'جارٍ التثبيت...', - 'app.localAiDownload.preparing': 'جارٍ التحضير...', - 'app.openhumanLink.accounts.continueWith': 'متابعة باستخدام تسجيل الدخول عبر {label}', - 'app.openhumanLink.accounts.done': 'تم', - 'app.openhumanLink.accounts.intro': 'مقدمة', - 'app.openhumanLink.accounts.webviewNote': 'ملاحظة العرض', - 'app.openhumanLink.billing.openDashboard': 'فتح لوحة التحكم', - 'app.openhumanLink.billing.stayOnTrial': 'البقاء في النسخة التجريبية', - 'app.openhumanLink.billing.trialCredit': 'رصيد تجريبي', - 'app.openhumanLink.billing.trialDesc': 'وصف تجريبي', - 'app.openhumanLink.defaultBody': - 'غير جاهز في النافذة المنبثقة بعد. افتح صفحة الإعدادات الكاملة عند الحاجة', - 'app.openhumanLink.discord.intro': 'مقدمة', - 'app.openhumanLink.discord.openInvite': 'فتح الدعوة', - 'app.openhumanLink.discord.perk1': 'ميزة 1', - 'app.openhumanLink.discord.perk2': 'ميزة 2', - 'app.openhumanLink.discord.perk3': 'ميزة 3', - 'app.openhumanLink.discord.perk4': 'ميزة 4', - 'app.openhumanLink.done': 'تم', - 'app.openhumanLink.loadingChannelSetup': 'جارٍ تحميل إعداد القناة', - 'app.openhumanLink.maybeLater': 'ربما لاحقًا', - 'app.openhumanLink.notifications.asking': 'جارٍ الاستفسار من نظام التشغيل…', - 'app.openhumanLink.notifications.blocked': 'محظور', - 'app.openhumanLink.notifications.blockedStep1': 'الخطوة الأولى من الحظر', - 'app.openhumanLink.notifications.blockedStep2': 'الخطوة الثانية من الحظر', - 'app.openhumanLink.notifications.blockedStep3': 'الخطوة الثالثة من الحظر', - 'app.openhumanLink.notifications.intro': 'مقدمة', - 'app.openhumanLink.notifications.promptHint': 'تلميح الطلب', - 'app.openhumanLink.notifications.retry': 'إعادة إرسال إشعار اختبار', - 'app.openhumanLink.notifications.send': 'إرسال إشعار اختبار', - 'app.openhumanLink.notifications.sendFailed': 'تعذّر الإرسال: {error}', - 'app.openhumanLink.notifications.sent': - 'تم إرسال إشعار اختباري. إذا لم تستلمه، انتقل إلى إعدادات النظام ← الإشعارات ← OpenHuman، فعّل "السماح بالإشعارات"، واضبط نمط الشعار على "مستمر".', - 'app.openhumanLink.skipForNow': 'تخطي في الوقت الحالي', - 'app.openhumanLink.telegramUnavailable': 'Telegram غير متاح', - 'app.openhumanLink.title.accounts': 'ربط تطبيقاتك', - 'app.openhumanLink.title.billing': 'الفوترة والرصيد', - 'app.openhumanLink.title.discord': 'الانضمام إلى المجتمع', - 'app.openhumanLink.title.messaging': 'ربط قناة محادثة', - 'app.openhumanLink.title.notifications': 'السماح بالإشعارات', - 'app.persistRehydration.body': 'المحتوى', - 'app.persistRehydration.heading': 'العنوان', - 'app.persistRehydration.resetCta': 'جارٍ إعادة الضبط…', - 'app.persistRehydration.resetting': 'جارٍ إعادة الضبط…', - 'app.routeLoading.initializing': 'جارٍ تهيئة OpenHuman...', - 'app.update.currentlyOn': '{version}', - 'app.update.errorFallback': 'حدث خطأ أثناء التحديث.', - 'app.update.header.default': 'تحديث', - 'app.update.header.error': 'فشل التحديث', - 'app.update.header.installing': 'جارٍ تثبيت التحديث', - 'app.update.header.readyToInstall': 'التحديث جاهز للتثبيت', - 'app.update.header.restarting': 'جارٍ إعادة التشغيل…', - 'app.update.later': 'لاحقًا', - 'app.update.newVersionReady': 'إصدار جديد جاهز للتثبيت.', - 'app.update.progress.downloaded': 'تم تنزيل {amount}', - 'app.update.progress.installing': 'جارٍ تثبيت الإصدار الجديد…', - 'app.update.progress.restarting': 'جارٍ إعادة تشغيل التطبيق…', - 'app.update.progress.working': '{percent}%', - 'app.update.restartNote': 'ملاحظة إعادة التشغيل', - 'app.update.restartNow': 'إعادة التشغيل الآن', - 'app.update.versionReady': 'الإصدار {newVersion} جاهز للتثبيت.', - 'channels.discord.accountLinked': 'تم ربط الحساب', - 'channels.discord.connect': 'توصيل', - 'channels.discord.linkTokenExpired': 'انتهت صلاحية رمز الربط. يرجى المحاولة مرة أخرى.', - 'channels.discord.linkTokenInstruction': '{token}', - 'channels.discord.linkTokenLabel': 'تسمية رمز الربط', - 'channels.discord.linkTokenOnce': 'رمز الربط لمرة واحدة', - 'channels.discord.picker.allPermissionsOk': 'البوت يمتلك جميع الأذونات المطلوبة في هذه القناة.', - 'channels.discord.picker.botNotInServers': 'البوت ليس في أي خادم', - 'channels.discord.picker.category': 'الفئة', - 'channels.discord.picker.channel': 'قناة', - 'channels.discord.picker.checkingPermissions': 'جارٍ التحقق من الأذونات', - 'channels.discord.picker.loadingChannels': 'جارٍ تحميل القنوات...', - 'channels.discord.picker.loadingServers': 'جارٍ تحميل الخوادم...', - 'channels.discord.picker.missingPermissions': 'أذونات مفقودة', - 'channels.discord.picker.noChannels': 'لا توجد قنوات نصية', - 'channels.discord.picker.noServers': 'لا توجد خوادم', - 'channels.discord.picker.selectChannel': 'اختر قناة', - 'channels.discord.picker.selectServer': 'اختر خادمًا', - 'channels.discord.picker.server': 'خادم', - 'channels.discord.picker.serverChannelSelection': 'اختيار الخادم والقناة', - 'channels.discord.savedRestartRequired': 'تم حفظ القناة. أعد تشغيل التطبيق لتفعيلها.', - 'channels.telegram.connect': 'توصيل', - 'channels.telegram.managedDmConnecting': 'جارٍ اتصال الرسائل المباشرة المُدارة', - 'channels.telegram.managedDmTimeout': 'انتهت مهلة الرسائل المباشرة المُدارة', - 'channels.telegram.reconnect': 'إعادة الاتصال', - 'channels.telegram.savedRestartRequired': 'تم حفظ القناة. أعد تشغيل التطبيق لتفعيلها.', - 'channels.web.alwaysAvailable': 'متاح دائمًا', - 'channels.discord.displayName': 'Discord', - 'channels.discord.description': 'إرسال واستقبال الرسائل عبر Discord.', - 'channels.discord.authMode.bot_token.description': - 'قم بتوفير رمز الروبوت المميز Discord الخاص بك.', - 'channels.discord.authMode.oauth.description': - 'قم بتثبيت الروبوت OpenHuman على خادم Discord الخاص بك عبر OAuth.', - 'channels.discord.authMode.managed_dm.description': - 'اربط حسابك الشخصي في Discord بالروبوت OpenHuman.', - 'channels.discord.fields.bot_token.label': 'رمز الروبوت', - 'channels.discord.fields.bot_token.placeholder': 'رمز الروبوت Discord الخاص بك', - 'channels.discord.fields.guild_id.label': 'معرف الخادم (الرابطة)', - 'channels.discord.fields.guild_id.placeholder': 'اختياري: يقتصر على خادم معين', - 'channels.telegram.displayName': 'Telegram', - 'channels.telegram.description': 'إرسال واستقبال الرسائل عبر Telegram.', - 'channels.telegram.authMode.managed_dm.description': - 'أرسل رسالة إلى الروبوت OpenHuman Telegram مباشرة.', - 'channels.telegram.authMode.bot_token.description': - 'قم بتوفير رمز الروبوت Telegram الخاص بك من @BotFather.', - 'channels.telegram.fields.bot_token.label': 'رمز الروبوت', - 'channels.telegram.fields.bot_token.placeholder': '123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11', - 'channels.telegram.fields.allowed_users.label': 'المستخدمون المسموح لهم', - 'channels.telegram.fields.allowed_users.placeholder': 'أسماء المستخدمين Telegram مفصولة بفواصل', - 'channels.web.displayName': 'الويب', - 'channels.web.description': 'الدردشة عبر واجهة مستخدم الويب المضمنة.', - 'channels.web.authMode.managed_dm.description': 'استخدم دردشة الويب المضمنة - لا يلزم الإعداد.', - 'welcome.continueLocallyExperimental': 'المتابعة محليًا (تجريبي)', - 'channels.yuanbao.connect': 'Connect', - 'channels.yuanbao.connecting': 'Connecting…', - 'channels.yuanbao.fieldRequired': '{field} is required', - 'channels.yuanbao.reconnect': 'Reconnect', - 'channels.yuanbao.savedRestartRequired': 'Channel saved. Restart the app to activate it.', - 'channels.yuanbao.unexpectedStatus': 'Unexpected connection status: {status}', - 'chat.approval.approve': 'Approve', - 'chat.approval.alwaysAllow': 'Always allow', - 'chat.approval.alwaysAllowHint': 'Stop asking for this tool — add it to your Always-allow list', - 'chat.approval.deciding': 'Working…', - 'chat.approval.deny': 'Deny', - 'chat.approval.error': 'Could not record your decision — try again.', - 'chat.approval.fallback': 'The agent wants to run an action that needs your approval.', - 'chat.approval.title': 'Approval needed', - 'chat.approval.tool': 'Tool:', -}; - -export default ar3; diff --git a/app/src/lib/i18n/chunks/ar-4.ts b/app/src/lib/i18n/chunks/ar-4.ts deleted file mode 100644 index e0b2a1f59..000000000 --- a/app/src/lib/i18n/chunks/ar-4.ts +++ /dev/null @@ -1,485 +0,0 @@ -import type { TranslationMap } from '../types'; - -// Arabic (العربية) chunk 4/5. Translated from chunks/en-4.ts. -const ar4: TranslationMap = { - 'chat.unsubscribeApproval.approve': 'موافقة وإلغاء الاشتراك', - 'chat.unsubscribeApproval.approved': '✓ تم إلغاء الاشتراك بنجاح.', - 'chat.unsubscribeApproval.denied': '✕ تم رفض الطلب.', - 'chat.unsubscribeApproval.deny': 'رفض', - 'chat.unsubscribeApproval.processing': 'جارٍ المعالجة...', - 'chat.unsubscribeApproval.title': 'طلب إلغاء الاشتراك', - 'commandPalette.ariaLabel': 'لوحة الأوامر', - 'commandPalette.description': 'الوصف', - 'commandPalette.label': 'الأوامر', - 'commandPalette.noResults': 'لا توجد نتائج', - 'commandPalette.placeholder': 'اكتب أمرًا أو ابحث…', - 'commandPalette.searchAria': 'البحث في الأوامر', - 'commandPalette.shortcutHint': 'اضغط ؟ لعرض جميع الاختصارات', - 'commandPalette.title': 'لوحة الأوامر', - 'composio.connect.additionalConfigRequired': 'يلزم إعداد إضافي', - 'composio.connect.atlassianSubdomainHint': 'acme', - 'composio.connect.atlassianSubdomainLabel': 'تسمية النطاق الفرعي لـ Atlassian', - 'composio.connect.connect': 'اتصال', - 'composio.connect.connectionFailed': 'فشل الاتصال (الحالة: {status}).', - 'composio.connect.disconnectFailed': 'فشل قطع الاتصال: {msg}', - 'composio.connect.disconnecting': 'جارٍ قطع الاتصال…', - 'composio.connect.idleDescription': 'اربط حساب', - 'composio.connect.idleDescriptionSuffix': - 'الخاص بك. سنفتح نافذة متصفح، توافق فيها على الوصول، وسيكتشف هذا التطبيق الاتصال تلقائيًا.', - 'composio.connect.isConnected': 'متصل.', - 'composio.connect.manage': 'إدارة', - 'composio.connect.needsSubdomain': 'للاتصال بـ', - 'composio.connect.needsSubdomainSuffix': - 'أدخل النطاق الفرعي لـ Atlassian (مثل acme لـ acme.atlassian.net) ثم أعد المحاولة.', - 'composio.connect.oauthComplete': 'بانتظار إكمال OAuth…', - 'composio.connect.oauthTimeout': 'انتهت مهلة OAuth', - 'composio.connect.permissions': 'الأذونات', - 'composio.connect.permissionsDefault': 'القراءة والكتابة مفعّلتان افتراضيًا', - 'composio.connect.permissionsNote': 'قد يكشف', - 'composio.connect.permissionsNoteSuffix': - 'أذونات وكيل OpenHuman الخاصة يتم التحكم بها أدناه عبر مفاتيح القراءة والكتابة والإدارة.', - 'composio.connect.reopenBrowser': 'إعادة فتح المتصفح', - 'composio.connect.requestingUrl': 'جارٍ طلب عنوان URL للاتصال…', - 'composio.connect.retryConnection': 'إعادة محاولة الاتصال', - 'composio.connect.scopeLoadError': 'تعذّر تحميل تفضيلات النطاق: {msg}', - 'composio.connect.scopeSaveError': 'تعذّر حفظ نطاق {key}: {msg}', - 'composio.connect.subdomainInvalid': - 'أدخل النطاق الفرعي القصير فقط (مثل "acme")، وليس الرابط الكامل. يجب أن يحتوي فقط على أحرف وأرقام وشُرَط.', - 'composio.connect.subdomainRequired': 'يرجى إدخال نطاقك الفرعي في Atlassian للمتابعة.', - 'composio.connect.dynamicsOrgNameLabel': 'اسم مؤسسة Dynamics 365', - 'composio.connect.dynamicsOrgNameHint': - 'على سبيل المثال، "myorg" لـ myorg.crm.dynamics.com. أدخل اسم المؤسسة المختصر فقط، وليس الرابط الكامل.', - 'composio.connect.needsFieldsPrefix': 'للاتصال', - 'composio.connect.needsFieldsSuffix': - 'نحتاج إلى مزيد من المعلومات. املأ الحقول الناقصة أدناه وحاول مرة أخرى.', - 'composio.connect.requiredFieldEmpty': 'هذا الحقل مطلوب.', - 'composio.connect.wabaIdHint': - 'احصل عليه عبر GET /me/businesses ثم GET /{business_id}/owned_whatsapp_business_accounts باستخدام رمز وصول Meta الخاص بك.', - 'composio.connect.wabaIdLabel': 'تسمية معرف WABA', - 'composio.connect.wabaIdRequired': 'يرجى إدخال معرف حساب WhatsApp Business (WABA ID) للمتابعة.', - 'composio.connect.waitingFor': 'بانتظار', - 'composio.connect.waitingHint': 'تلميح الانتظار', - 'composio.triggers.heading': 'المشغّلات', - 'composio.triggers.listenFrom': 'الاستماع للأحداث من', - 'composio.triggers.loadError': 'تعذّر تحميل المشغّلات', - 'composio.triggers.needsConfiguration': 'يحتاج إلى إعداد', - 'composio.triggers.noneAvailable': 'لا توجد مشغّلات متاحة حاليًا لـ', - 'conversations.taskKanban.moveLeft': 'نقل لليسار', - 'conversations.taskKanban.moveRight': 'نقل لليمين', - 'conversations.taskKanban.title': 'المهام', - 'conversations.toolTimeline.turn': 'دور', - 'conversations.toolTimeline.workerThread': 'محادثة عامل', - 'daemon.serviceBlockingGate.body': 'المحتوى', - 'daemon.serviceBlockingGate.downloadHint': 'تلميح التنزيل', - 'daemon.serviceBlockingGate.downloadLatest': 'تنزيل أحدث إصدار', - 'daemon.serviceBlockingGate.retryCore': 'إعادة محاولة Core', - 'daemon.serviceBlockingGate.retryFailed': - 'فشلت إعادة المحاولة. نزّل أحدث إصدار للتطبيق وحاول مرة أخرى.', - 'daemon.serviceBlockingGate.retrying': 'جارٍ إعادة المحاولة...', - 'daemon.serviceBlockingGate.title': 'نواة OpenHuman غير متاحة', - 'home.banners.discordSubtitle': 'وصف Discord', - 'home.banners.discordTitle': 'انضم إلى Discord', - 'home.banners.earlyBirdDismiss': 'إغلاق لافتة المبكر', - 'home.banners.earlyBirdFirstSub': 'أول اشتراك.', - 'home.banners.earlyBirdOn': 'عرض المبكر نشط', - 'home.banners.earlyBirdTitle': 'أول 1,000 مستخدم يحصلون على خصم 60٪.', - 'home.banners.earlyBirdUseCode': 'استخدم كود المبكر', - 'home.banners.getSubscription': 'احصل على اشتراك', - 'home.banners.promoCreditsBody': 'وصف رصيد العرض', - 'home.banners.promoCreditsTitle': '{amount}', - 'home.banners.promoCreditsUsage': 'استخدام رصيد العرض', - 'intelligence.memoryChunk.detail.chunk': 'جزء', - 'intelligence.memoryChunk.detail.copyChunkId': 'نسخ معرف الجزء', - 'intelligence.memoryChunk.detail.embeddingInfo': 'bge-m3 1024dim', - 'intelligence.memoryChunk.detail.noEmbedding': 'لا يوجد تضمين', - 'intelligence.memoryChunk.letterhead.from': 'من', - 'intelligence.memoryChunk.letterhead.to': 'إلى', - 'intelligence.memoryChunk.mentioned.chunkOne': 'جزء واحد', - 'intelligence.memoryChunk.mentioned.chunkOther': '{count} أجزاء', - 'intelligence.memoryChunk.mentioned.heading': 'م ذ ك و ر', - 'intelligence.memoryChunk.scoreBars.ariaScore': 'نتيجة {name} {pct} بالمئة', - 'intelligence.memoryChunk.scoreBars.atThreshold': 'عند {threshold}', - 'intelligence.memoryChunk.scoreBars.dropped': 'مُسقَط', - 'intelligence.memoryChunk.scoreBars.heading': 'س ب ب ا ل ح ف ظ', - 'intelligence.memoryChunk.scoreBars.kept': 'محفوظ', - 'intelligence.diagram.title': 'Architecture Diagram', - 'intelligence.diagram.description': - 'Latest local architecture output from the configured diagram endpoint.', - 'intelligence.diagram.refresh': 'Refresh', - 'intelligence.diagram.refreshAria': 'Refresh diagram', - 'intelligence.diagram.emptyTitle': 'No diagram available yet', - 'intelligence.diagram.emptyDescription': - 'Generate an architecture diagram from the orchestrator and this panel will refresh from the configured local endpoint.', - 'intelligence.diagram.skillInstallCommand': 'npx skills add yizhiyanhua-ai/fireworks-tech-graph', - 'intelligence.diagram.promptExample': - 'Generate an architecture diagram of the current swarm in dark terminal style', - 'intelligence.diagram.imageAlt': 'Latest generated OpenHuman architecture diagram', - 'intelligence.diagram.refreshesEvery': 'Refreshes every {seconds}s', - 'intelligence.memoryText.entityTypePrefix': 'نوع الكيان', - 'intelligence.screenDebug.active': 'نشط', - 'intelligence.screenDebug.app': 'التطبيق', - 'intelligence.screenDebug.bounds': 'الحدود', - 'intelligence.screenDebug.captureAlt': 'نتيجة اختبار التقاط', - 'intelligence.screenDebug.captureFailed': 'فشل', - 'intelligence.screenDebug.captureSuccess': 'نجاح', - 'intelligence.screenDebug.captureTest': 'اختبار الالتقاط', - 'intelligence.screenDebug.capturing': 'جارٍ الالتقاط', - 'intelligence.screenDebug.frames': 'الإطارات', - 'intelligence.screenDebug.idle': 'خامل', - 'intelligence.screenDebug.lastApp': 'آخر تطبيق', - 'intelligence.screenDebug.mode': 'الوضع', - 'intelligence.screenDebug.permAccessibility': 'إذن إمكانية الوصول', - 'intelligence.screenDebug.permInput': 'إذن الإدخال', - 'intelligence.screenDebug.permScreen': 'إمكانية الوصول', - 'intelligence.screenDebug.permissions': 'الأذونات', - 'intelligence.screenDebug.platformNotSupported': 'المنصة غير مدعومة', - 'intelligence.screenDebug.recentVisionSummaries': 'ملخصات الرؤية الأخيرة', - 'intelligence.screenDebug.session': 'الجلسة', - 'intelligence.screenDebug.size': 'الحجم', - 'intelligence.screenDebug.status': 'الحالة', - 'intelligence.screenDebug.testCapture': 'اختبار الالتقاط', - 'intelligence.screenDebug.time': 'الوقت', - 'intelligence.screenDebug.title': 'العنوان', - 'intelligence.screenDebug.unknown': 'غير معروف', - 'intelligence.screenDebug.visionQueue': 'قائمة انتظار الرؤية', - 'intelligence.screenDebug.visionState': 'حالة الرؤية', - 'intelligence.tasks.activeBoardOne': 'لوحة نشطة واحدة عبر المحادثات', - 'intelligence.tasks.activeBoardOther': '{count} لوحات نشطة عبر المحادثات', - 'intelligence.tasks.empty': 'لا توجد لوحات مهام للوكيل بعد', - 'intelligence.tasks.emptyHint': 'تلميح الفراغ', - 'intelligence.tasks.failedToLoad': 'فشل التحميل', - 'intelligence.tasks.live': 'مباشر', - 'intelligence.tasks.loadingBoards': 'جارٍ تحميل لوحات المهام…', - 'intelligence.tasks.threadPrefix': 'المحادثة {thread}', - 'intelligence.tasks.subtitle': 'Your tasks and agent task boards across the workspace.', - 'intelligence.tasks.newTask': 'New task', - 'intelligence.tasks.personalBoardTitle': 'Agent Tasks', - 'intelligence.tasks.personalEmpty': 'No personal tasks yet', - 'intelligence.tasks.composer.title': 'New task', - 'intelligence.tasks.composer.titleLabel': 'Title', - 'intelligence.tasks.composer.titlePlaceholder': 'What needs to be done?', - 'intelligence.tasks.composer.statusLabel': 'Status', - 'intelligence.tasks.composer.attachLabel': 'Attach to conversation', - 'intelligence.tasks.composer.attachNone': 'Personal (no conversation)', - 'intelligence.tasks.composer.objectiveLabel': 'Objective', - 'intelligence.tasks.composer.objectivePlaceholder': 'Optional — the desired outcome', - 'intelligence.tasks.composer.notesLabel': 'Notes', - 'intelligence.tasks.composer.notesPlaceholder': 'Optional notes', - 'intelligence.tasks.composer.create': 'Create task', - 'intelligence.tasks.composer.creating': 'Creating…', - 'intelligence.tasks.composer.createFailed': "Couldn't create the task", - 'notifications.card.dismiss': 'إغلاق الإشعار', - 'notifications.card.importanceTitle': 'الأهمية: {pct}%', - 'notifications.center.empty': 'لا توجد إشعارات بعد', - 'notifications.center.emptyHint': 'تلميح الفراغ', - 'notifications.center.filterAll': 'تصفية الكل', - 'notifications.center.markAllRead': 'تحديد الكل كمقروء', - 'notifications.center.title': 'الإشعارات', - 'oauth.button.loopbackTimeout': - 'انتهت مهلة تسجيل الدخول — لم يكتمل المتصفح إعادة توجيه OAuth. يرجى المحاولة مرة أخرى.', - 'oauth.button.connecting': 'جارٍ الاتصال...', - 'oauth.login.continueWith': 'المتابعة مع', - 'onboarding.contextGathering.buildingDesc': 'وصف البناء', - 'onboarding.contextGathering.buildingProfile': 'جارٍ بناء ملفك الشخصي...', - 'onboarding.contextGathering.continueToChat': 'المتابعة إلى المحادثة', - 'onboarding.contextGathering.errorDesc': - 'تعذّر إنشاء ملفك الكامل الآن، لكن لا بأس — يمكنك المتابعة وسيُبنى ملفك مع الوقت.', - 'onboarding.contextGathering.coreAlive': 'النواة متاحة — قد يستغرق التشغيل الأول دقيقة.', - 'onboarding.contextGathering.coreAliveProbing': 'يجري التحقق من اتصال النواة…', - 'onboarding.contextGathering.coreUnreachable': - 'النواة لا تستجيب. يمكنك المتابعة والمحاولة لاحقًا.', - 'onboarding.contextGathering.stillWorkingDesc': - 'قد يستغرق التشغيل الأول 30–60 ثانية أثناء تهيئة نموذجك المحلي والأدوات. يمكنك المتابعة إلى المحادثة في أي وقت — يستمر بناء الملف الشخصي في الخلفية.', - 'onboarding.contextGathering.stillWorkingTitle': 'لا يزال العمل جاريًا على ملفك الشخصي…', - 'onboarding.contextGathering.title': 'جمع السياق', - 'openhuman.team_list_teams': 'قائمة الفرق', - 'overlay.ariaAttention': 'رسالة انتباه', - 'overlay.ariaCompanion': 'الرفيق نشط', - 'overlay.ariaOrb': 'تراكب OpenHuman', - 'overlay.ariaVoiceActive': 'إدخال الصوت نشط', - 'overlay.companion.error': 'خطأ', - 'overlay.companion.listening': 'يستمع…', - 'overlay.companion.pointing': 'يشير…', - 'overlay.companion.speaking': 'يتحدث…', - 'overlay.companion.thinking': 'يفكر…', - 'overlay.orbTitle': 'اسحب للتحريك · انقر مرتين لإعادة الضبط', - 'pages.settings.account.connections': 'الاتصالات', - 'pages.settings.account.connectionsDesc': 'وصف الاتصالات', - 'pages.settings.account.privacy': 'الخصوصية', - 'pages.settings.account.privacyDesc': 'وصف الخصوصية', - 'pages.settings.account.recoveryPhrase': 'عبارة الاسترداد', - 'pages.settings.account.recoveryPhraseDesc': 'وصف عبارة الاسترداد', - 'pages.settings.account.team': 'الفريق', - 'pages.settings.account.teamDesc': 'وصف الفريق', - 'pages.settings.accountSection.description': - 'عبارة الاسترداد والفريق والاتصالات وإعدادات الخصوصية.', - 'pages.settings.accountSection.title': 'الحساب', - 'pages.settings.ai.llm': 'LLM', - 'pages.settings.ai.llmDesc': 'وصف LLM', - 'pages.settings.ai.voice': 'الصوت', - 'pages.settings.ai.voiceDesc': 'وصف الصوت', - 'pages.settings.ai.embeddings': 'التضمينات', - 'pages.settings.ai.embeddingsDesc': 'نموذج ترميز المتجهات لاسترجاع الذاكرة', - 'pages.settings.aiSection.description': 'مزودو نماذج اللغة وOllama المحلي والصوت (STT / TTS).', - 'pages.settings.aiSection.title': 'الذكاء الاصطناعي', - 'pages.settings.features.desktopCompanion': 'الرفيق المكتبي', - 'pages.settings.features.desktopCompanionDesc': - 'مساعد صوتي يدرك الشاشة — يستمع ويرى ويتحدث ويشير', - 'pages.settings.features.messagingChannels': 'قنوات المراسلة', - 'pages.settings.features.messagingChannelsDesc': 'وصف قنوات المراسلة', - 'pages.settings.features.notifications': 'الإشعارات', - 'pages.settings.features.notificationsDesc': 'وصف الإشعارات', - 'pages.settings.features.screenAwareness': 'وعي الشاشة', - 'pages.settings.features.screenAwarenessDesc': 'وصف وعي الشاشة', - 'pages.settings.features.tools': 'الأدوات', - 'pages.settings.features.toolsDesc': 'وصف الأدوات', - 'pages.settings.featuresSection.description': 'وعي الشاشة والمراسلة والأدوات.', - 'pages.settings.featuresSection.title': 'الميزات', - 'privacy.dataKind.credentials': 'بيانات الاعتماد', - 'privacy.dataKind.derived': 'مشتقة', - 'privacy.dataKind.diagnostics': 'التشخيص', - 'privacy.dataKind.metadata': 'البيانات الوصفية', - 'privacy.dataKind.raw': 'خام', - 'privacy.whatLeaves.link.label': 'ما الذي يغادر جهازي؟', - 'rewards.community.achievementsUnlocked': 'تم فتح {unlocked} من {total} إنجازات', - 'rewards.community.connectDiscord': 'ربط Discord', - 'rewards.community.cumulativeTokens': 'الرموز التراكمية', - 'rewards.community.currentStreak': 'السلسلة الحالية', - 'rewards.community.discordLinkedNotInGuild': 'Discord مرتبط لكن ليس في السيرفر', - 'rewards.community.discordMember': 'انضممت إلى الخادم', - 'rewards.community.discordNotLinked': 'Discord غير مرتبط', - 'rewards.community.discordServer': 'سيرفر Discord', - 'rewards.community.discordStatusUnavailable': 'حالة Discord غير متاحة', - 'rewards.community.discordWaiting': 'في انتظار Discord', - 'rewards.community.heroSubtitle': 'عنوان فرعي للبطل', - 'rewards.community.heroTitle': 'عنوان البطل', - 'rewards.community.joinDiscord': 'انضم إلى Discord', - 'rewards.community.loadingRewards': 'جارٍ تحميل المكافآت…', - 'rewards.community.locked': 'مفتوح', - 'rewards.community.retrying': 'جارٍ إعادة المحاولة…', - 'rewards.community.rolesAndRewards': 'الأدوار والمكافآت', - 'rewards.community.streakDays': '{n}', - 'rewards.community.syncPending': 'مزامنة المكافآت معلقة', - 'rewards.community.syncPendingDesc': 'وصف انتظار المزامنة', - 'rewards.community.syncUnavailable': 'المزامنة غير متاحة', - 'rewards.community.tryAgain': 'جارٍ إعادة المحاولة…', - 'rewards.community.unknown': 'غير معروف', - 'rewards.community.unlocked': 'مفتوح', - 'rewards.community.yourProgress': 'تقدمك', - 'rewards.coupon.colCode': 'الرمز', - 'rewards.coupon.colRedeemed': 'مُستردّ', - 'rewards.coupon.colReward': 'المكافأة', - 'rewards.coupon.colStatus': 'الحالة', - 'rewards.coupon.loadingHistory': 'جارٍ تحميل سجل المكافآت…', - 'rewards.coupon.noCodes': 'لم يتم استبدال أي رموز مكافآت بعد.', - 'rewards.coupon.pending': 'معلّق', - 'rewards.coupon.placeholder': 'رمز القسيمة', - 'rewards.coupon.promoCredits': 'رصيد عرض ترويجي', - 'rewards.coupon.recentRedemptions': 'عمليات الاسترداد الأخيرة', - 'rewards.coupon.redeemAccepted': 'تم قبول {code}. سيتم فتح {amount} بعد إكمال الإجراء المطلوب.', - 'rewards.coupon.redeemButton': 'استبدال الرمز', - 'rewards.coupon.redeemSuccess': 'تم استبدال {code}. تمت إضافة {amount} إلى رصيدك.', - 'rewards.coupon.redeemedCodes': 'الرموز المستردة', - 'rewards.coupon.redeeming': 'جارٍ الاسترداد...', - 'rewards.coupon.statusApplied': 'مُطبَّق', - 'rewards.coupon.statusPendingAction': 'بانتظار إجراء', - 'rewards.coupon.statusRedeemed': 'تم الاستبدال', - 'rewards.coupon.subtitle': 'العنوان الفرعي', - 'rewards.coupon.title': 'استرداد رمز قسيمة', - 'rewards.referralSection.activity': 'نشاط الإحالة', - 'rewards.referralSection.apply': 'جارٍ التطبيق…', - 'rewards.referralSection.applying': 'جارٍ التطبيق…', - 'rewards.referralSection.colReferredUser': 'المستخدم المُحال', - 'rewards.referralSection.colReward': 'المكافأة', - 'rewards.referralSection.colStatus': 'الحالة', - 'rewards.referralSection.colUpdated': 'المحدَّث', - 'rewards.referralSection.completed': 'مكتمل', - 'rewards.referralSection.copyCode': 'نسخ الرمز', - 'rewards.referralSection.copyFailed': 'فشل النسخ', - 'rewards.referralSection.haveCode': 'هل لديك رمز إحالة؟', - 'rewards.referralSection.haveCodeDesc': 'وصف امتلاك الرمز', - 'rewards.referralSection.linked': 'مرتبط', - 'rewards.referralSection.linkedCode': '(الرمز {code})', - 'rewards.referralSection.loading': 'جارٍ تحميل برنامج الإحالة…', - 'rewards.referralSection.noReferrals': 'لا توجد إحالات', - 'rewards.referralSection.pendingReferrals': 'الإحالات المعلقة', - 'rewards.referralSection.placeholder': 'رمز الإحالة', - 'rewards.referralSection.share': 'مشاركة', - 'rewards.referralSection.statusCompleted': 'الحالة: مكتمل', - 'rewards.referralSection.statusExpired': 'الحالة: منتهي الصلاحية', - 'rewards.referralSection.statusJoined': 'الحالة: انضم', - 'rewards.referralSection.subtitle': 'العنوان الفرعي', - 'rewards.referralSection.title': 'ادعُ أصدقاء واكسب رصيدًا', - 'rewards.referralSection.totalEarned': 'إجمالي المكتسب', - 'rewards.referralSection.yourCode': 'رمزك', - 'settings.ai.addCloudProvider': 'إضافة مزود سحابي', - 'settings.ai.addProvider': 'جارٍ الحفظ…', - 'settings.ai.apiKeyFieldLabel': 'تسمية حقل مفتاح API', - 'settings.ai.apiKeyRequired': 'يرجى لصق مفتاح API للمتابعة.', - 'settings.ai.apiKeyStoredEncrypted': 'مفتاح API محفوظ مشفّرًا', - 'settings.ai.apiKeysEncrypted': 'auth-profiles.json', - 'settings.ai.clearStoredKey': 'مسح المفتاح المحفوظ', - 'settings.ai.connectProvider': 'ربط مزود', - 'settings.ai.customRouting': 'توجيه مخصص', - 'settings.ai.defaultResolvesTo': 'الافتراضي يُحل إلى', - 'settings.ai.discard': 'تجاهل', - 'settings.ai.editProvider': 'تعديل المزود', - 'settings.ai.llmProviders': 'مزودو LLM', - 'settings.ai.llmProvidersDesc': 'وصف مزودي LLM', - 'settings.ai.localOllama': 'محلي (Ollama)', - 'settings.ai.modelLabel': 'النموذج', - 'settings.ai.noCustomProviders': 'لا يوجد مزودون مخصصون', - 'settings.ai.openAiCompat.authHeaderExample': 'التفويض: الحامل <مفتاحك>', - 'settings.ai.openAiCompat.authHeaderLabel': 'رأس المصادقة', - 'settings.ai.openAiCompat.baseUrlLabel': 'القاعدة URL', - 'settings.ai.openAiCompat.baseUrlUnavailable': 'غير متاح', - 'settings.ai.openAiCompat.clearKey': 'مسح المفتاح', - 'settings.ai.openAiCompat.description': - "Point local harnesses at this /v1 server to route through the providers configured below. Authentication uses a stable key you set here, not the app's internal core bearer.", - 'settings.ai.openAiCompat.keyConfigured': 'تم تكوين المفتاح', - 'settings.ai.openAiCompat.keyRequired': 'المفتاح مطلوب', - 'settings.ai.openAiCompat.rotateKey': 'مفتاح التدوير', - 'settings.ai.openAiCompat.setKey': 'مفتاح التعيين', - 'settings.ai.openAiCompat.title': 'OpenAI نقطة النهاية المتوافقة', - 'settings.ai.providerLabel': 'المزود', - 'settings.ai.routing': 'التوجيه', - 'settings.ai.routingCustom': 'توجيه مخصص', - 'settings.ai.routingDefault': 'افتراضي', - 'settings.ai.routingDesc': 'وصف التوجيه', - 'settings.ai.saveChanges': 'جارٍ الحفظ…', - 'settings.ai.saving': 'جارٍ الحفظ…', - 'settings.ai.unsavedChange': 'تغيير غير محفوظ', - 'settings.ai.unsavedChanges': 'تغييرات غير محفوظة', - 'settings.ai.workloadGroupBackground': 'مجموعة عبء العمل الخلفي', - 'settings.ai.workloadGroupChat': 'مجموعة عبء عمل المحادثة', - 'settings.autocomplete.appFilter.acceptSuggestion': 'قبول الاقتراح', - 'settings.autocomplete.appFilter.contextOverride': 'تجاوز السياق (اختياري)', - 'settings.autocomplete.appFilter.debugFocus': 'تصحيح التركيز', - 'settings.autocomplete.appFilter.getSuggestion': 'الحصول على اقتراح', - 'settings.autocomplete.appFilter.liveLogs': 'السجلات المباشرة', - 'settings.autocomplete.appFilter.noLogs': ') :', - 'settings.autocomplete.appFilter.refreshStatus': 'جارٍ التحديث…', - 'settings.autocomplete.appFilter.refreshing': 'جارٍ التحديث…', - 'settings.autocomplete.appFilter.runtime': 'بيئة التشغيل', - 'settings.autocomplete.appFilter.test': 'اختبار', - 'settings.autocomplete.completionStyle.acceptedCompletion': - 'تم تخزين {count} إكمال مقبول — يُستخدم لتخصيص الاقتراحات المستقبلية.', - 'settings.autocomplete.completionStyle.acceptedCompletions': - 'تم تخزين {count} إكمالات مقبولة — تُستخدم لتخصيص الاقتراحات المستقبلية.', - 'settings.autocomplete.completionStyle.clearHistory': 'جارٍ المسح…', - 'settings.autocomplete.completionStyle.clearing': 'جارٍ المسح…', - 'settings.autocomplete.completionStyle.debounce': 'تأخير (ms)', - 'settings.autocomplete.completionStyle.enabled': 'مفعّل', - 'settings.autocomplete.completionStyle.maxChars': 'الحد الأقصى للأحرف', - 'settings.autocomplete.completionStyle.noHistory': - 'لا توجد إكمالات مقبولة بعد. اقبل الاقتراحات بـ Tab للبدء بالتخصيص.', - 'settings.autocomplete.completionStyle.overlayTtl': 'مدة ظهور التراكب (ms)', - 'settings.autocomplete.completionStyle.personalizationHistory': 'سجل التخصيص', - 'settings.autocomplete.completionStyle.styleExamples': 'أمثلة الأسلوب (مثال لكل سطر)', - 'settings.autocomplete.completionStyle.styleInstructions': 'تعليمات الأسلوب', - 'settings.billing.autoRecharge.addAmount': 'أضف هذا المبلغ', - 'settings.billing.autoRecharge.addCard': 'إضافة بطاقة', - 'settings.billing.autoRecharge.amountHint': 'تلميح المبلغ', - 'settings.billing.autoRecharge.defaultCard': 'البطاقة الافتراضية', - 'settings.billing.autoRecharge.lastRechargeFailed': 'فشلت آخر عملية شحن', - 'settings.billing.autoRecharge.lastRecharged': 'آخر شحن', - 'settings.billing.autoRecharge.noCards': 'لا توجد بطاقات', - 'settings.billing.autoRecharge.paymentMethods': 'طرق الدفع', - 'settings.billing.autoRecharge.rechargeInProgress': 'الشحن جارٍ', - 'settings.billing.autoRecharge.rechargeWhen': 'شحن عندما ينخفض الرصيد عن', - 'settings.billing.autoRecharge.saveSettings': 'جارٍ الحفظ…', - 'settings.billing.autoRecharge.saving': 'جارٍ الحفظ…', - 'settings.billing.autoRecharge.setDefault': ':', - 'settings.billing.autoRecharge.subtitle': 'العنوان الفرعي', - 'settings.billing.autoRecharge.title': 'تفعيل الشحن التلقائي', - 'settings.billing.autoRecharge.toggleAriaLabel': 'تبديل الشحن التلقائي', - 'settings.billing.autoRecharge.weeklyLimit': 'حد الإنفاق الأسبوعي', - 'settings.billing.history.desc': 'الوصف', - 'settings.billing.history.empty': 'فارغ', - 'settings.billing.history.openPortal': 'فتح البوابة', - 'settings.billing.history.posted': 'مُرسَل', - 'settings.billing.history.title': 'العنوان', - 'settings.billing.inferenceBudget.cycleEnds': 'نهاية الدورة', - 'settings.billing.inferenceBudget.exhausted': 'منتهٍ', - 'settings.billing.inferenceBudget.loadError': 'خطأ في التحميل', - 'settings.billing.inferenceBudget.noBudgetDesc': 'وصف عدم وجود ميزانية', - 'settings.billing.inferenceBudget.noRecurringBudget': 'لا توجد ميزانية متكررة', - 'settings.billing.inferenceBudget.remaining': 'المتبقي', - 'settings.billing.inferenceBudget.tenHourCap': 'حد عشر ساعات', - 'settings.billing.inferenceBudget.title': 'العنوان', - 'settings.billing.payAsYouGo.available': 'متاح', - 'settings.billing.payAsYouGo.chargeCustomAmount': 'جارٍ الفتح…', - 'settings.billing.payAsYouGo.chooseTopUpDesc': 'وصف اختيار الشحن', - 'settings.billing.payAsYouGo.chooseTopUpTitle': 'عنوان اختيار الشحن', - 'settings.billing.payAsYouGo.creditBalanceDesc': 'وصف رصيد الائتمان', - 'settings.billing.payAsYouGo.creditBalanceTitle': 'عنوان رصيد الائتمان', - 'settings.billing.payAsYouGo.customAmount': 'مبلغ مخصص', - 'settings.billing.payAsYouGo.enterAmount': 'أدخل المبلغ', - 'settings.billing.payAsYouGo.opening': 'جارٍ الفتح', - 'settings.billing.payAsYouGo.promotionalCredits': 'رصيد ترويجي', - 'settings.billing.payAsYouGo.topUpBalance': 'شحن الرصيد', - 'settings.billing.payAsYouGo.topUpCredits': 'شحن الرصيد', - 'settings.billing.payAsYouGo.unableToLoad': 'تعذّر تحميل الرصيد.', - 'settings.billing.subscription.annual': 'سنوي', - 'settings.billing.subscription.billedAnnually': 'يُفوتر سنويًا', - 'settings.billing.subscription.chooseSubtitle': 'عنوان فرعي للاختيار', - 'settings.billing.subscription.chooseTitle': 'عنوان الاختيار', - 'settings.billing.subscription.cryptoDesc': 'وصف العملة المشفرة', - 'settings.billing.subscription.cryptoQuestion': 'سؤال العملة المشفرة', - 'settings.billing.subscription.current': 'الحالي', - 'settings.billing.subscription.currentPlan': 'الخطة الحالية', - 'settings.billing.subscription.monthly': 'شهري', - 'settings.billing.subscription.paymentConfirmed': 'تم تأكيد الدفع', - 'settings.billing.subscription.perMonth': 'في الشهر', - 'settings.billing.subscription.popular': 'شائع', - 'pages.settings.account.migration': 'استيراد من مساعد آخر', - 'pages.settings.account.migrationDesc': - 'انقل الذاكرة والملاحظات من OpenClaw (وقريبًا Hermes) إلى مساحة العمل هذه.', - 'composio.connect.scope.read': 'قراءة', - 'composio.connect.scope.readHint': 'اسمح للوكيل بقراءة البيانات من هذا الاتصال.', - 'composio.connect.scope.write': 'اكتب', - 'composio.connect.scope.writeHint': 'اسمح للوكيل بإنشاء البيانات أو تعديلها من خلال هذا الاتصال.', - 'composio.connect.scope.admin': 'المسؤول', - 'composio.connect.scope.adminHint': - 'السماح للوكيل بإدارة الإعدادات أو الأذونات أو الإجراءات المدمرة.', - 'pages.settings.composioSection.title': 'Composio', - 'pages.settings.composioSection.description': - 'التوجيه والمشغلات وسجل عمليات التكامل المدعومة بواسطة Composio.', - 'pages.settings.account.walletBalances': 'Wallet Balances', - 'pages.settings.account.walletBalancesDesc': 'View multi-chain balances for your local wallet', - 'walletBalances.title': 'Wallet Balances', - 'walletBalances.refresh': 'Refresh', - 'walletBalances.loading': 'Loading balances…', - 'walletBalances.retry': 'Retry', - 'walletBalances.emptyState': 'No wallet accounts yet — set up a wallet in Recovery Phrase.', - 'walletBalances.copyAddress': 'Copy address', - 'walletBalances.providerMissing': 'provider unavailable', - 'walletBalances.rawBalance': 'Raw: {raw}', - 'walletBalances.errorGeneric': - 'Unable to load wallet balances. Set up your wallet in Recovery Phrase and try again.', - 'conversations.taskKanban.approval.default': 'Default', - 'conversations.taskKanban.approval.notRequired': 'Not required', - 'conversations.taskKanban.approval.notRequiredBadge': 'no approval', - 'conversations.taskKanban.approval.required': 'Required', - 'conversations.taskKanban.approval.requiredBadge': 'approval', - 'conversations.taskKanban.approval.requiredBeforeExecution': 'Required before execution', - 'conversations.taskKanban.briefButton': 'Task brief', - 'conversations.taskKanban.briefTitle': 'Task brief', - 'conversations.taskKanban.closeBrief': 'Close task brief', - 'conversations.taskKanban.field.acceptanceCriteria': 'Acceptance criteria', - 'conversations.taskKanban.field.allowedTools': 'Allowed tools', - 'conversations.taskKanban.field.approval': 'Approval', - 'conversations.taskKanban.field.assignedAgent': 'Assigned agent', - 'conversations.taskKanban.field.blocker': 'Blocker', - 'conversations.taskKanban.field.evidence': 'Evidence', - 'conversations.taskKanban.field.notes': 'Notes', - 'conversations.taskKanban.field.objective': 'Objective', - 'conversations.taskKanban.field.plan': 'Plan', - 'conversations.taskKanban.field.status': 'Status', - 'conversations.taskKanban.field.title': 'Title', - 'conversations.taskKanban.saveChanges': 'Save changes', - 'conversations.taskKanban.deleteCard': 'Delete', - 'conversations.taskKanban.updateFailed': 'Could not update task; changes were not saved.', -}; - -export default ar4; diff --git a/app/src/lib/i18n/chunks/ar-5.ts b/app/src/lib/i18n/chunks/ar-5.ts deleted file mode 100644 index 22d5974f3..000000000 --- a/app/src/lib/i18n/chunks/ar-5.ts +++ /dev/null @@ -1,1005 +0,0 @@ -import type { TranslationMap } from '../types'; - -// Arabic (العربية) chunk 5/5. Translated from chunks/en-5.ts. -const ar5: TranslationMap = { - 'settings.billing.subscription.save': '{pct}', - 'settings.billing.subscription.upgrade': 'ترقية', - 'settings.billing.subscription.waiting': 'انتظار', - 'settings.billing.subscription.waitingPayment': 'في انتظار الدفع', - 'settings.composio.apiKeyDesc': 'يتم حاليًا تخزين مفتاح Composio API على هذا الجهاز.', - 'settings.composio.apiKeyLabel': 'مفتاح Composio API', - 'settings.composio.apiKeyStored': 'تم تخزين مفتاح API', - 'settings.composio.apiKeyStoredPlaceholder': '••••••••••••••••', - 'settings.composio.clearedToBackend': 'تم التبديل إلى وضع الخلفية', - 'settings.composio.confirmItem1': 'حساب على app.composio.dev مع مفتاح API', - 'settings.composio.confirmItem2': 'لإعادة ربط كل تكامل عبر حساب Composio الشخصي الخاص بك', - 'settings.composio.confirmItem3': - 'ملاحظة: مشغّلات Composio (الـ webhooks الفورية) لا تعمل في الوضع المباشر بعد — فقط استدعاءات الأدوات المتزامنة', - 'settings.composio.confirmNeedItems': 'ستحتاج إلى:', - 'settings.composio.confirmSwitch': 'أفهم، التبديل إلى المباشر', - 'settings.composio.confirmTitle': '⚠️ التبديل إلى الوضع المباشر', - 'settings.composio.confirmWarning': - 'تكاملاتك الحالية (Gmail، Slack، GitHub، إلخ المرتبطة عبر OpenHuman) لن تكون مرئية — فهي موجودة في مستأجر Composio المُدار من OpenHuman.', - 'settings.composio.intro': - 'يُدمج Composio أكثر من 250 تطبيقًا خارجيًا كأدوات يمكن للوكيل استدعاؤها. اختر كيفية توجيه هذه الاستدعاءات.', - 'settings.composio.modeDirect': 'مباشر (استخدم مفتاح API الخاص بك)', - 'settings.composio.modeDirectDesc': - 'تذهب الاستدعاءات إلى backend.composio.dev مباشرةً. سيادي / مناسب للعمل دون اتصال. تنفيذ الأدوات يعمل بشكل متزامن؛ مشغّلات الـ webhooks الفورية لم تُوجَّه بعد في الوضع المباشر (مشكلة متابعة).', - 'settings.composio.modeManaged': 'مُدار (OpenHuman يتولى الأمر نيابةً عنك)', - 'settings.composio.modeManagedDesc': - 'يقوم OpenHuman بتمرير استدعاءات الأدوات عبر خادمنا الخلفي (موصى به). تتم وساطة المصادقة؛ لن تلصق مفتاح Composio API. الـ webhooks مُوجَّهة بالكامل.', - 'settings.composio.routingMode': 'وضع التوجيه', - 'settings.composio.saveErrorNoKey': 'فشل الحفظ. الوضع المباشر يتطلب مفتاح API غير فارغ.', - 'settings.composio.saving': 'جارٍ الحفظ…', - 'settings.composio.switching': 'جارٍ التبديل…', - 'settings.cron.jobs.desc': 'الوصف', - 'settings.cron.jobs.empty': 'لا توجد مهام cron أساسية.', - 'settings.cron.jobs.lastStatus': 'آخر حالة', - 'settings.cron.jobs.loading': 'جارٍ تحميل مهام cron...', - 'settings.cron.jobs.loadingRuns': 'جارٍ تحميل عمليات التشغيل', - 'settings.cron.jobs.nextRun': 'التشغيل التالي', - 'settings.cron.jobs.pause': 'إيقاف مؤقت', - 'settings.cron.jobs.paused': 'متوقف مؤقتاً', - 'settings.cron.jobs.recentRuns': 'التشغيلات الأخيرة', - 'settings.cron.jobs.removing': 'جارٍ الإزالة', - 'settings.cron.jobs.resume': 'استئناف', - 'settings.cron.jobs.runningNow': 'يعمل الآن', - 'settings.cron.jobs.saving': 'جارٍ الحفظ…', - 'settings.cron.jobs.schedule': 'الجدول', - 'settings.cron.jobs.title': 'مهام Cron الأساسية', - 'settings.cron.jobs.viewRuns': 'عرض عمليات التشغيل', - 'settings.localModel.deviceCapability.active': 'نشط', - 'settings.localModel.deviceCapability.appliedTier': 'المستوى المطبّق', - 'settings.localModel.deviceCapability.applying': 'جارٍ التطبيق', - 'settings.localModel.deviceCapability.cores': '{count}', - 'settings.localModel.deviceCapability.couldNotLoadPresets': 'تعذّر تحميل الإعدادات المسبقة', - 'settings.localModel.deviceCapability.cpu': 'CPU', - 'settings.localModel.deviceCapability.customModelIds': 'معرفات نماذج مخصصة', - 'settings.localModel.deviceCapability.detected': 'تم الكشف', - 'settings.localModel.deviceCapability.disabled': 'معطّل', - 'settings.localModel.deviceCapability.disabledDesc': 'وصف التعطيل', - 'settings.localModel.deviceCapability.downloadingModels': '(جارٍ تنزيل النماذج)', - 'settings.localModel.deviceCapability.downloadingSetupDesc': - 'جارٍ تنزيل مثبّت OllamaSetup (~2 GB) وفكّه. قد يستغرق هذا دقيقة عند التثبيت الأول.', - 'settings.localModel.deviceCapability.failedToApplyPreset': 'فشل تطبيق الإعداد المسبق', - 'settings.localModel.deviceCapability.gpu': 'GPU', - 'settings.localModel.deviceCapability.installFailed': 'فشل تثبيت Ollama', - 'settings.localModel.deviceCapability.installFailedDesc': - 'خرج المثبّت قبل أن يصبح Ollama قابلاً للاستخدام. انقر إعادة المحاولة، أو ثبّته يدويًا من ollama.com.', - 'settings.localModel.deviceCapability.installFirst': 'شغّل Ollama أولاً.', - 'settings.localModel.deviceCapability.installFirstDesc': - 'تعتمد المستويات المحلية على نقطة نهاية Ollama مُدارة خارجيًا. شغّلها بنفسك، وحمّل النماذج التي تريدها، واستمر في استخدام "معطّل (التراجع السحابي)" حتى يصبح وقت التشغيل قابلاً للوصول.', - 'settings.localModel.deviceCapability.installOllamaFirst': - 'شغّل Ollama أولاً لاستخدام هذا المستوى', - 'settings.localModel.deviceCapability.installingOllama': 'جارٍ تثبيت Ollama', - 'settings.localModel.deviceCapability.loadingDeviceInfo': 'جارٍ تحميل معلومات الجهاز', - 'settings.localModel.deviceCapability.localAiDisabled': - 'الذكاء الاصطناعي المحلي معطّل — يُستخدم الاحتياط السحابي.', - 'settings.localModel.deviceCapability.modelTier': 'مستوى النموذج', - 'settings.localModel.deviceCapability.needsOllama': 'يحتاج إلى Ollama', - 'settings.localModel.deviceCapability.notDetected': 'لم يُكتشف', - 'settings.localModel.deviceCapability.ram': 'RAM', - 'settings.localModel.deviceCapability.recommended': 'موصى به', - 'settings.localModel.deviceCapability.retryInstall': 'جارٍ إعادة المحاولة…', - 'settings.localModel.deviceCapability.retrying': 'جارٍ إعادة المحاولة…', - 'settings.localModel.deviceCapability.starting': 'جارٍ البدء…', - 'settings.localModel.download.audioPathPlaceholder': 'المسار المطلق لملف الصوت', - 'settings.localModel.download.capabilityAssets': 'أصول الإمكانات', - 'settings.localModel.download.downloading': 'جارٍ التنزيل...', - 'settings.localModel.download.embeddingPlaceholder': 'سلسلة إدخال واحدة في كل سطر...', - 'settings.localModel.download.noThinkMode': 'بدون وضع التفكير', - 'settings.localModel.download.promptPlaceholder': 'اكتب أي طلب وشغّله على النموذج المحلي...', - 'settings.localModel.download.quantizationPref': 'تفضيل التكميم', - 'settings.localModel.download.runEmbeddingTest': 'جارٍ التشغيل...', - 'settings.localModel.download.runPromptTest': 'تشغيل اختبار المُوجِّه', - 'settings.localModel.download.runSummaryTest': 'تشغيل اختبار الملخص', - 'settings.localModel.download.runTranscriptionTest': 'جارٍ التشغيل...', - 'settings.localModel.download.runTtsTest': 'جارٍ التشغيل...', - 'settings.localModel.download.runVisionTest': 'جارٍ التشغيل...', - 'settings.localModel.download.running': 'جارٍ التشغيل...', - 'settings.localModel.download.runningPrompt': 'جارٍ تشغيل الطلب', - 'settings.localModel.download.summarizePlaceholder': 'الصق النص لتلخيصه بالنموذج المحلي...', - 'settings.localModel.download.testCustomPrompt': 'اختبار طلب مخصص', - 'settings.localModel.download.testEmbeddings': 'اختبار التضمينات', - 'settings.localModel.download.testSummarization': 'اختبار التلخيص', - 'settings.localModel.download.testVisionPrompt': 'اختبار طلب الرؤية', - 'settings.localModel.download.testVoiceInput': 'اختبار إدخال الصوت (STT)', - 'settings.localModel.download.testVoiceOutput': 'اختبار إخراج الصوت (TTS)', - 'settings.localModel.download.ttsOutputPlaceholder': 'مسار WAV للإخراج (اختياري)', - 'settings.localModel.download.ttsPlaceholder': 'أدخل النص للتحويل إلى كلام...', - 'settings.localModel.download.visionImagePlaceholder': - 'مرجع صورة واحد في كل سطر (URI للبيانات أو URL أو مسار محلي)', - 'settings.localModel.download.visionPromptPlaceholder': 'أدخل طلبًا لنموذج الرؤية...', - 'settings.localModel.status.allChecksPassed': 'اجتازت جميع الفحوصات', - 'settings.localModel.status.artifact': 'المنتج', - 'settings.localModel.status.backend': 'الخلفية', - 'settings.localModel.status.binary': 'الملف الثنائي', - 'settings.localModel.status.bootstrapResume': 'تمهيد / استئناف', - 'settings.localModel.status.checking': 'جارٍ التحقق...', - 'settings.localModel.status.checkingOllama': 'جارٍ التحقق من Ollama', - 'settings.localModel.status.customLocation': 'موقع مخصص', - 'settings.localModel.status.customLocationDesc': 'وصف الموقع المخصص', - 'settings.localModel.status.diagnosticsHint': - 'انقر "تشغيل التشخيصات" للتحقق من أن Ollama يعمل وأن النماذج مثبتة.', - 'settings.localModel.status.downloadingUnknown': 'جارٍ التنزيل (الحجم غير معروف)', - 'settings.localModel.status.eta': 'الوقت المتوقع', - 'settings.localModel.status.expectedModels': 'النماذج المتوقعة', - 'settings.localModel.status.forceRebootstrap': 'فرض إعادة التهيئة', - 'settings.localModel.status.generationTps': 'سرعة التوليد TPS', - 'settings.localModel.status.hideErrorDetails': 'إخفاء تفاصيل الخطأ', - 'settings.localModel.status.installManually': 'تثبيت يدوي', - 'settings.localModel.status.installManuallyFrom': 'تثبيت يدوي من', - 'settings.localModel.status.installOllama': 'جارٍ البدء…', - 'settings.localModel.status.installedModels': 'النماذج المثبّتة', - 'settings.localModel.status.installing': 'جارٍ التثبيت...', - 'settings.localModel.status.installingOllama': 'جارٍ تثبيت بيئة Ollama...', - 'settings.localModel.status.issues': 'المشكلات', - 'settings.localModel.status.issuesFound': 'تم العثور على {count} مشكلة', - 'settings.localModel.status.lastLatency': 'آخر زمن استجابة', - 'settings.localModel.status.model': 'النموذج', - 'settings.localModel.status.notFound': 'غير موجود', - 'settings.localModel.status.notRunning': 'غير قيد التشغيل', - 'settings.localModel.status.ollamaBinaryPath': 'مسار ملف Ollama الثنائي', - 'settings.localModel.status.ollamaDiagnostics': 'تشخيص Ollama', - 'settings.localModel.status.ollamaNotInstalled': 'وقت تشغيل Ollama غير متاح', - 'settings.localModel.status.ollamaNotInstalledDesc': - 'يعامل OpenHuman الآن Ollama كوقت تشغيل استدلال خارجي. شغّل خادم Ollama الخاص بك، وحمّل النماذج التي تريدها، ووجّه توجيه الأحمال إليه.', - 'settings.localModel.status.progress': 'التقدم', - 'settings.localModel.status.provider': 'المزود', - 'settings.localModel.status.retryBootstrap': 'إعادة محاولة التمهيد', - 'settings.localModel.status.runDiagnostics': 'جارٍ التحقق...', - 'settings.localModel.status.running': 'يعمل', - 'settings.localModel.status.runningExternalProcess': 'يعمل عبر عملية خارجية', - 'settings.localModel.status.runtimeStatus': 'حالة بيئة التشغيل', - 'settings.localModel.status.server': 'الخادم', - 'settings.localModel.status.setPath': 'جارٍ الضبط...', - 'settings.localModel.status.setting': 'جارٍ الضبط...', - 'settings.localModel.status.showErrorDetails': 'إخفاء تفاصيل الخطأ', - 'settings.localModel.status.showInstallErrorDetails': 'إخفاء تفاصيل الخطأ', - 'settings.localModel.status.suggestedFixes': 'الإصلاحات المقترحة', - 'settings.localModel.status.thenSetPath': 'ثم اضبط المسار', - 'settings.localModel.status.triggering': 'جارٍ التشغيل...', - 'settings.localModel.status.unavailable': 'غير متاح', - 'settings.localModel.status.working': 'جارٍ العمل...', - 'settings.developerMenu.ai.title': 'إعدادات الذكاء الاصطناعي', - 'settings.developerMenu.ai.desc': 'مزودو السحابة، ونماذج Ollama المحلية، والتوجيه لكل عبء عمل', - 'settings.developerMenu.screenAwareness.title': 'الوعي بالشاشة', - 'settings.developerMenu.screenAwareness.desc': - 'أذونات التقاط الشاشة، وسياسة المراقبة، وعناصر التحكم في الجلسة', - 'settings.developerMenu.messagingChannels.title': 'قنوات المراسلة', - 'settings.developerMenu.messagingChannels.desc': - 'تكوين أوضاع مصادقة Telegram/Discord وتوجيه القناة الافتراضي', - 'settings.developerMenu.tools.title': 'الأدوات', - 'settings.developerMenu.tools.desc': - 'تفعيل أو تعطيل الإمكانات التي يمكن لـ OpenHuman استخدامها نيابةً عنك', - 'settings.developerMenu.agentChat.title': 'دردشة الوكيل', - 'settings.developerMenu.agentChat.desc': 'اختبار محادثة الوكيل مع تجاوزات النموذج ودرجة الحرارة', - 'settings.developerMenu.devWorkflow.title': 'Dev Workflow', - 'settings.developerMenu.devWorkflow.desc': - 'Autonomous agent that picks your GitHub issues and raises PRs on a schedule', - 'settings.developerMenu.devWorkflow.panelDesc': - 'Configure an autonomous developer agent that picks GitHub issues assigned to you and raises pull requests automatically on a schedule.', - 'settings.devWorkflow.githubRepository': 'GitHub Repository', - 'settings.devWorkflow.loadingRepositories': 'Loading repositories...', - 'settings.devWorkflow.selectRepository': 'Select a repository', - 'settings.devWorkflow.privateTag': '(private)', - 'settings.devWorkflow.detectingForkInfo': 'Detecting fork info...', - 'settings.devWorkflow.forkDetected': 'Fork detected', - 'settings.devWorkflow.upstream': 'Upstream:', - 'settings.devWorkflow.forkPrNote': 'PRs will be raised against the upstream repository.', - 'settings.devWorkflow.notForkNote': - 'Not a fork. PRs will be raised against this repository directly.', - 'settings.devWorkflow.targetBranch': 'Target Branch', - 'settings.devWorkflow.targetBranchNote': 'PRs will be raised against this branch', - 'settings.devWorkflow.loadingBranches': 'Loading branches...', - 'settings.devWorkflow.runFrequency': 'Run Frequency', - 'settings.devWorkflow.runFrequencyNote': - 'How often the agent should check for issues and raise PRs.', - 'settings.devWorkflow.updateConfiguration': 'Update Configuration', - 'settings.devWorkflow.saveConfiguration': 'Save Configuration', - 'settings.devWorkflow.remove': 'Remove', - 'settings.devWorkflow.saved': 'Saved', - 'settings.devWorkflow.activeConfiguration': 'Active Configuration', - 'settings.devWorkflow.activeConfigRepository': 'Repository:', - 'settings.devWorkflow.activeConfigUpstream': 'Upstream:', - 'settings.devWorkflow.activeConfigTargetBranch': 'Target branch:', - 'settings.devWorkflow.activeConfigSchedule': 'Schedule:', - 'settings.devWorkflow.enabled': 'Enabled', - 'settings.devWorkflow.paused': 'Paused', - 'settings.skillsRunner.scheduleEnabled': 'Enabled', - 'settings.skillsRunner.scheduleDisabled': 'Paused', - 'settings.skillsRunner.scheduleToggleAria': 'Toggle schedule enabled', - 'settings.skillsRunner.schedule.history': 'History', - 'settings.skillsRunner.schedule.historyLoading': 'Loading history\u2026', - 'settings.skillsRunner.schedule.historyEmpty': 'No runs yet for this schedule.', - 'settings.skillsRunner.schedule.historyNoOutput': 'No output captured.', - 'settings.skillsRunner.schedule.active': 'Active', - 'settings.skillsRunner.schedule.lastRunLabel': 'last:', - 'settings.devWorkflow.nextRun': 'Next run', - 'settings.devWorkflow.lastRun': 'Last run', - 'settings.devWorkflow.runNow': 'Run now', - 'settings.devWorkflow.running': 'Running…', - 'settings.devWorkflow.recentRuns': 'Recent runs', - 'settings.devWorkflow.cronSaveError': 'Failed to save configuration', - 'settings.devWorkflow.lastOutput': 'Last output', - 'settings.devWorkflow.noOutput': 'No output captured', - 'settings.devWorkflow.runningStatus': - 'Agent is running — picking an issue and working on a fix...', - 'settings.devWorkflow.errorNotConnected': - 'GitHub is not connected. Please connect GitHub via Settings > Advanced > Composio first.', - 'settings.devWorkflow.errorToolNotEnabled': - 'GITHUB_LIST_REPOSITORIES_FOR_THE_AUTHENTICATED_USER tool is not enabled on this backend. Please ask your admin to enable it in the Composio integration (backend#842).', - 'settings.devWorkflow.errorNotAuthenticated': 'Not authenticated. Please sign in first.', - 'settings.devWorkflow.errorNoRepositories': 'No repositories found for this GitHub account.', - 'settings.devWorkflow.schedule.every30min': 'Every 30 minutes', - 'settings.devWorkflow.schedule.everyHour': 'Every hour', - 'settings.devWorkflow.schedule.every2hours': 'Every 2 hours', - 'settings.devWorkflow.schedule.every6hours': 'Every 6 hours', - 'settings.devWorkflow.schedule.onceDaily': 'Once daily (9 AM)', - 'settings.developerMenu.cronJobs.title': 'مهام Cron', - 'settings.developerMenu.cronJobs.desc': 'عرض وتكوين المهام المجدولة لمهارات وقت التشغيل', - 'settings.developerMenu.localModelDebug.title': 'تصحيح النموذج المحلي', - 'settings.developerMenu.localModelDebug.desc': - 'إعدادات Ollama، وتنزيلات الأصول، واختبارات النموذج، والتشخيصات', - 'settings.developerMenu.webhooks.title': 'خطافات الويب', - 'settings.developerMenu.webhooks.desc': - 'فحص تسجيلات خطافات الويب وقت التشغيل وسجلات الطلبات الملتقطة', - 'settings.developerMenu.eventLog.title': 'Event Log', - 'settings.developerMenu.eventLog.desc': - 'Live colour-coded stream of all agent, tool, and system events', - 'settings.developerMenu.eventLog.allTypes': 'All types', - 'settings.developerMenu.eventLog.filterAgent': 'Filter...', - 'settings.developerMenu.eventLog.download': 'Download', - 'settings.developerMenu.eventLog.events': 'events', - 'settings.developerMenu.eventLog.live': 'Live', - 'settings.developerMenu.eventLog.disconnected': 'Disconnected', - 'settings.developerMenu.eventLog.waiting': 'Waiting for events...', - 'settings.developerMenu.eventLog.notConnected': 'Not connected to core', - 'settings.developerMenu.eventLog.jumpToLatest': 'Jump to latest', - 'settings.developerMenu.eventLog.badge.tool': 'TOOL', - 'settings.developerMenu.eventLog.badge.agent': 'AGENT', - 'settings.developerMenu.eventLog.badge.info': 'INFO', - 'settings.developerMenu.eventLog.badge.mem': 'MEM', - 'settings.developerMenu.eventLog.badge.chan': 'CHAN', - 'settings.developerMenu.eventLog.badge.cron': 'CRON', - 'settings.developerMenu.eventLog.badge.hook': 'HOOK', - 'settings.developerMenu.eventLog.badge.warn': 'WARN', - 'settings.developerMenu.eventLog.badge.skill': 'SKILL', - 'settings.developerMenu.eventLog.badge.comp': 'COMP', - 'settings.developerMenu.eventLog.badge.mcp': 'MCP', - 'settings.developerMenu.intelligence.title': 'الذكاء', - 'settings.developerMenu.intelligence.desc': - 'مساحة عمل الذاكرة، ومحرك اللاوعي، والأحلام، والإعدادات', - 'settings.developerMenu.notificationRouting.title': 'توجيه الإشعارات', - 'settings.developerMenu.notificationRouting.desc': - 'تقييم الأهمية بالذكاء الاصطناعي وتصعيد المنسق لتنبيهات التكامل', - 'settings.developerMenu.composeioTriggers.title': 'مشغلات ComposeIO', - 'settings.developerMenu.composeioTriggers.desc': 'عرض سجل مشغلات ComposeIO والأرشيف', - 'settings.developerMenu.composioRouting.title': 'توجيه Composio (الوضع المباشر)', - 'settings.developerMenu.composioRouting.desc': - 'استخدم مفتاح Composio API الخاص بك ووجّه الاستدعاءات مباشرةً إلى backend.composio.dev', - 'settings.developerMenu.integrationTriggers.title': 'مشغلات التكامل', - 'settings.developerMenu.integrationTriggers.desc': - 'تكوين إعدادات فرز الذكاء الاصطناعي لمشغلات تكامل Composio', - 'settings.appearance.menuDesc': 'اختر الفاتح أو الداكن أو مطابقة سمة النظام', - 'settings.mascot.active': 'نشط', - 'settings.mascot.characterDesc': 'وصف الشخصية', - 'settings.mascot.characterHeading': 'عنوان الشخصية', - // TODO: translate custom GIF mascot strings. - 'settings.mascot.customGifError': - 'أدخل HTTPS .gif URL، أو الاسترجاع HTTP .gif URL، أو file:// .gif URL، أو مسار .gif المحلي.', - 'settings.mascot.customGifHeading': 'الصورة الرمزية GIF المخصصة', - 'settings.mascot.customGifLabel': 'الصورة الرمزية GIF المخصصة URL', - 'settings.mascot.colorDesc': 'وصف اللون', - 'settings.mascot.colorHeading': 'عنوان اللون', - 'settings.mascot.loadingLibrary': 'جارٍ تحميل مكتبة OpenHuman…', - 'settings.mascot.localDefault': 'OpenHuman المحلي (افتراضي)', - 'settings.mascot.menuTitle': 'التميمة', - 'settings.mascot.menuDesc': 'اختر لون التميمة المستخدم في جميع أنحاء التطبيق', - 'settings.mascot.noCharacters': 'لا توجد شخصيات OpenHuman متاحة بعد', - 'settings.mascot.noColorVariants': 'لا توجد ألوان متاحة', - 'settings.mascot.voice.current': 'الحالي', - 'settings.mascot.voice.customDesc': - 'ابحث عن معرّفات الصوت في api.elevenlabs.io/v1/voices أو لوحة تحكم ElevenLabs الخاصة بك. يُخزَّن المعرّف فقط — يبقى مفتاح API الخاص بك على الخادم.', - 'settings.mascot.voice.customHeading': 'معرّف صوت مخصص', - 'settings.mascot.voice.customOption': 'آخر (لصق معرّف الصوت)…', - 'settings.mascot.voice.desc': - 'اختر صوت ElevenLabs الذي تستخدمه الشخصية للردود المنطوقة. صفِّ حسب الجنس، اختر من القائمة المنسّقة، الصق معرّفاً مخصصاً، أو دع التطبيق يختار صوتاً يطابق لغة الواجهة.', - 'settings.mascot.voice.genderFemale': 'أنثى', - 'settings.mascot.voice.genderHeading': 'جنس الصوت', - 'settings.mascot.voice.genderMale': 'ذكر', - 'settings.mascot.voice.heading': 'الصوت', - 'settings.mascot.voice.preset': 'إعداد الصوت المسبق', - 'settings.mascot.voice.presetHeading': 'إعداد الصوت المسبق', - 'settings.mascot.voice.preview': 'معاينة الصوت', - 'settings.mascot.voice.previewError': 'تعذّرت معاينة الصوت', - 'settings.mascot.voice.previewing': 'جاري المعاينة…', - 'settings.mascot.voice.reset': 'إعادة تعيين إلى الافتراضي', - 'settings.mascot.voice.useLocaleDefault': 'مطابقة لغة التطبيق', - 'settings.mascot.voice.useLocaleDefaultDesc': 'اختيار صوت تلقائياً للغة الواجهة الحالية.', - 'settings.memoryWindow.balanced.badge': 'موصى به', - 'settings.memoryWindow.balanced.hint': - 'افتراضي معقول — استمرارية جيدة دون استهلاك رموز إضافية في كل تشغيل.', - 'settings.memoryWindow.balanced.label': 'متوازن', - 'settings.memoryWindow.description': - 'مقدار السياق المحفوظ الذي يحقنه OpenHuman في كل تشغيل وكيل جديد. النوافذ الأكبر تشعر بإدراك أكثر للمحادثات السابقة لكنها تستخدم رموزًا أكثر — وتكلّف أكثر — في كل تشغيل.', - 'settings.memoryWindow.extended.badge': 'سياق أكثر', - 'settings.memoryWindow.extended.hint': - 'حقن ذاكرة طويلة المدى أكثر في كل تشغيل. تكلفة رموز أعلى لكل دور.', - 'settings.memoryWindow.extended.label': 'موسّع', - 'settings.memoryWindow.maximum.badge': 'الأعلى تكلفة', - 'settings.memoryWindow.maximum.hint': - 'أكبر نافذة آمنة. أفضل استمرارية، مع فاتورة رموز أعلى بشكل ملحوظ في كل تشغيل.', - 'settings.memoryWindow.maximum.label': 'أقصى', - 'settings.memoryWindow.minimal.badge': 'الأرخص', - 'settings.memoryWindow.minimal.hint': - 'أصغر نافذة ذاكرة. الأرخص والأسرع وأقل استمرارية بين عمليات التشغيل.', - 'settings.memoryWindow.minimal.label': 'الحد الأدنى', - 'settings.memoryWindow.title': 'نافذة الذاكرة طويلة الأمد', - 'settings.screenIntel.permissions.accessibility': 'إمكانية الوصول', - 'settings.screenIntel.permissions.grantHint': 'تلميح المنح', - 'settings.screenIntel.permissions.inputMonitoring': 'مراقبة الإدخال', - 'settings.screenIntel.permissions.macosAppliesPrivacy': 'macOS يطبّق الخصوصية', - 'settings.screenIntel.permissions.openInputMonitoring': 'جارٍ الطلب…', - 'settings.screenIntel.permissions.refreshStatus': 'جارٍ التحديث…', - 'settings.screenIntel.permissions.refreshing': 'جارٍ التحديث…', - 'settings.screenIntel.permissions.requestAccessibility': 'جارٍ الطلب…', - 'settings.screenIntel.permissions.requestScreenRecording': 'جارٍ الطلب…', - 'settings.screenIntel.permissions.requesting': 'جارٍ الطلب…', - 'settings.screenIntel.permissions.restartRefresh': 'جارٍ إعادة تشغيل النواة…', - 'settings.screenIntel.permissions.restartingCore': 'جارٍ إعادة تشغيل النواة…', - 'settings.screenIntel.permissions.screenRecording': 'تسجيل الشاشة', - 'settings.screenIntel.permissions.title': 'الأذونات', - 'skills.card.moreActions': 'مزيد من الإجراءات', - 'skills.create.allowedTools': 'الأدوات المسموح بها', - 'skills.create.author': 'المؤلف', - 'skills.create.authorPlaceholder': 'اسمك', - 'skills.create.commaSeparated': '(مفصولة بفاصلة)', - 'skills.create.createBtn': 'إنشاء مهارة', - 'skills.create.createError': 'تعذّر إنشاء المهارة', - 'skills.create.creating': 'جارٍ الإنشاء…', - 'skills.create.description': 'الوصف', - 'skills.create.descriptionPlaceholder': 'ما الذي تفعله هذه المهارة؟', - 'skills.create.optional': '(optional)', - 'skills.create.inputs.heading': 'Inputs', - 'skills.create.inputs.help': - 'Declare parameters the skill needs. The Skills Runner will render a form for these at run time.', - 'skills.create.inputs.add': 'Add input', - 'skills.create.inputs.row.name': 'Input name', - 'skills.create.inputs.row.namePlaceholder': 'e.g. repo', - 'skills.create.inputs.row.nameError': - 'Letters, digits, underscores, and dashes only; must start with a letter.', - 'skills.create.inputs.row.description': 'Input description', - 'skills.create.inputs.row.descriptionPlaceholder': 'What goes in this field?', - 'skills.create.inputs.row.type': 'Type', - 'skills.create.inputs.row.required': 'Required', - 'skills.create.inputs.row.remove': 'Remove input', - 'skills.create.inputs.type.string': 'Text', - 'skills.create.inputs.type.integer': 'Number', - 'skills.create.inputs.type.boolean': 'Yes / No', - 'skills.create.license': 'الترخيص', - 'skills.create.name': 'الاسم', - 'skills.create.namePlaceholder': 'مثال: يومية التداول', - 'skills.create.scope': 'النطاق', - 'skills.create.scopeProjectHint': '/.openhuman/skills/', - 'skills.create.scopeUserHint': - 'مكتوب في ~/.openhuman/skills//SKILL.md — متاح في جميع مساحات العمل.', - 'skills.create.slugLabel': 'تسمية المعرف', - 'skills.create.subtitle': 'SKILL.md', - 'skills.create.tags': 'الوسوم', - 'skills.create.title': 'مهارة جديدة', - 'skills.detail.allowedTools': 'الأدوات المسموح بها', - 'skills.detail.author': 'المؤلف', - 'skills.detail.bundledResources': 'الموارد المجمّعة', - 'skills.detail.closeAriaLabel': 'إغلاق تفاصيل المهارة', - 'skills.detail.location': 'الموقع', - 'skills.detail.noBundledResources': 'لا توجد موارد مجمّعة.', - 'skills.detail.tags': 'العلامات', - 'skills.detail.warnings': 'التحذيرات', - 'skills.install.fetchLog': 'جلب السجل', - 'skills.install.installBtn': 'جارٍ التثبيت…', - 'skills.install.installComplete': 'اكتمل التثبيت', - 'skills.install.installing': 'جارٍ التثبيت…', - 'skills.install.parseWarnings': 'تحذيرات التحليل', - 'skills.install.rawError': 'خطأ خام', - 'skills.install.timeoutHint': '(ثوانٍ، اختياري)', - 'skills.install.timeoutLabel': 'تسمية المهلة', - 'skills.install.title': 'تثبيت مهارة من رابط', - 'skills.install.urlLabel': 'رابط المهارة', - 'skills.meetingBots.bannerDesc': 'وصف اللافتة', - 'skills.meetingBots.bannerTitle': 'عنوان اللافتة', - 'skills.meetingBots.busyTitle': 'OpenHuman مشغول', - 'skills.meetingBots.comingSoon': 'قريبًا', - 'skills.meetingBots.couldNotStartTitle': 'تعذّر بدء OpenHuman', - 'skills.meetingBots.displayName': 'الاسم المعروض', - 'skills.meetingBots.failedToStart': 'فشل تشغيل OpenHuman.', - 'skills.meetingBots.joiningMessage': 'يجب أن يظهر كمشارك في غضون ثوانٍ.', - 'skills.meetingBots.joiningTitle': 'OpenHuman ينضم إلى الاجتماع', - 'skills.meetingBots.meetingLink': 'رابط الاجتماع', - 'skills.meetingBots.modalAriaLabel': 'إرسال OpenHuman إلى اجتماع', - 'skills.meetingBots.modalDesc': 'وصف النافذة', - 'skills.meetingBots.modalTitle': 'إرسال OpenHuman إلى اجتماع', - 'skills.meetingBots.newBadge': 'شارة جديدة', - 'skills.meetingBots.sendTo': 'إرسال إلى', - 'skills.meetingBots.starting': 'جارٍ البدء…', - 'skills.resource.preview.closeAriaLabel': 'إغلاق المعاينة', - 'skills.resource.preview.failed': 'فشلت المعاينة', - 'skills.resource.preview.loading': 'جارٍ تحميل المعاينة…', - 'skills.resource.tree.empty': 'لا توجد موارد مجمّعة.', - 'skills.search.placeholder': 'بحث', - 'skills.setup.autocomplete.acceptKey': 'مفتاح القبول', - 'skills.setup.autocomplete.activeDesc': 'وصف النشاط', - 'skills.setup.autocomplete.activeTitle': 'الإكمال التلقائي نشط', - 'skills.setup.autocomplete.customizeSettings': 'تخصيص الإعدادات', - 'skills.setup.autocomplete.debounce': 'التأخير', - 'skills.setup.autocomplete.description': 'الوصف', - 'skills.setup.autocomplete.enableBtn': 'جارٍ التفعيل...', - 'skills.setup.autocomplete.enableError': 'فشل تفعيل الإكمال التلقائي', - 'skills.setup.autocomplete.enabling': 'جارٍ التفعيل...', - 'skills.setup.autocomplete.notSupported': 'غير مدعوم', - 'skills.setup.autocomplete.stepEnable': 'تفعيل الإكمالات المضمّنة', - 'skills.setup.autocomplete.stepSuccess': 'جاهز للانطلاق', - 'skills.setup.autocomplete.stylePreset': 'نمط ضبط مسبق', - 'skills.setup.autocomplete.stylePresetValue': 'متوازن (قابل للضبط لاحقًا)', - 'skills.setup.autocomplete.title': 'الإكمال التلقائي للنص', - 'skills.setup.screenIntel.activeDesc': 'وصف النشاط', - 'skills.setup.screenIntel.activeTitle': 'ذكاء الشاشة مفعّل', - 'skills.setup.screenIntel.advancedSettings': 'إعدادات متقدمة', - 'skills.setup.screenIntel.allGranted': 'تم منح جميع الأذونات', - 'skills.setup.screenIntel.captureMode': 'وضع الالتقاط', - 'skills.setup.screenIntel.captureModeValue': 'جميع النوافذ (قابل للضبط لاحقًا)', - 'skills.setup.screenIntel.deniedHint': - 'بعد منح الأذونات في إعدادات النظام، انقر أدناه لإعادة التشغيل وتطبيق التغييرات.', - 'skills.setup.screenIntel.enableBtn': 'جارٍ التفعيل...', - 'skills.setup.screenIntel.enableDesc': 'على شاشتك وتغذية سياق مفيد في وكيلك', - 'skills.setup.screenIntel.enableError': 'فشل تفعيل ذكاء الشاشة', - 'skills.setup.screenIntel.enabling': 'جارٍ التفعيل...', - 'skills.setup.screenIntel.grant': 'جارٍ الفتح...', - 'skills.setup.screenIntel.granted': 'تم المنح', - 'skills.setup.screenIntel.macosOnly': 'macOS فقط', - 'skills.setup.screenIntel.opening': 'جارٍ الفتح...', - 'skills.setup.screenIntel.panicHotkey': 'مفتاح ساخن للطوارئ', - 'skills.setup.screenIntel.permAccessibility': 'إمكانية الوصول', - 'skills.setup.screenIntel.permInputMonitoring': 'مراقبة الإدخال', - 'skills.setup.screenIntel.permScreenRecording': 'تسجيل الشاشة', - 'skills.setup.screenIntel.permissionsDesc': 'وصف الأذونات', - 'skills.setup.screenIntel.refreshStatus': 'تحديث الحالة', - 'skills.setup.screenIntel.restartRefresh': 'جارٍ إعادة التشغيل...', - 'skills.setup.screenIntel.restarting': 'جارٍ إعادة التشغيل...', - 'skills.setup.screenIntel.stepEnable': 'تفعيل المهارة', - 'skills.setup.screenIntel.stepPermissions': 'منح الأذونات', - 'skills.setup.screenIntel.stepSuccess': 'جاهز للانطلاق', - 'skills.setup.screenIntel.title': 'ذكاء الشاشة', - 'skills.setup.screenIntel.visionModel': 'نموذج الرؤية', - 'skills.setup.voice.activation': 'التفعيل', - 'skills.setup.voice.activeDescPrefix': 'Fn', - 'skills.setup.voice.activeDescSuffix': 'Fn', - 'skills.setup.voice.activeTitle': 'ذكاء الصوت نشط', - 'skills.setup.voice.customizeSettings': 'تخصيص الإعدادات', - 'skills.setup.voice.downloadSttBtn': 'تنزيل نموذج STT', - 'skills.setup.voice.enableDesc': 'وصف التفعيل', - 'skills.setup.voice.hotkey': 'المفتاح الساخن', - 'skills.setup.voice.startBtn': 'جارٍ البدء...', - 'skills.setup.voice.startError': 'فشل تشغيل خادم الصوت', - 'skills.setup.voice.starting': 'جارٍ البدء...', - 'skills.setup.voice.stepEnable': 'تشغيل خادم الصوت', - 'skills.setup.voice.stepSetup': 'يلزم تنزيل النموذج', - 'skills.setup.voice.stepSuccess': 'جاهز للانطلاق', - 'skills.setup.voice.sttNotReady': 'نموذج تحويل الكلام إلى نص غير جاهز', - 'skills.setup.voice.sttNotReadyDesc': - 'يتطلب ذكاء الصوت نموذج Whisper محليًا للنسخ. نزّله من إعدادات النموذج المحلي.', - 'skills.setup.voice.sttReady': 'نموذج تحويل الكلام إلى نص جاهز', - 'skills.setup.voice.sttReturnHint': 'تلميح العودة لـ STT', - 'skills.setup.voice.title': 'ذكاء الصوت', - 'skills.uninstall.couldNotUninstall': 'تعذّر إلغاء التثبيت', - 'skills.uninstall.description': - 'هذا يحذف دليل المهارة نهائيًا وجميع موارده المرفقة. سيتوقف الوكيل عن رؤيتها في الدور التالي.', - 'skills.uninstall.title': 'إلغاء التثبيت', - 'skills.uninstall.uninstallBtn': 'إلغاء التثبيت', - 'skills.uninstall.uninstalling': 'جارٍ إلغاء التثبيت…', - 'upsell.global.limitMessage': 'قم بترقية خطتك أو أضف رصيدًا للمتابعة', - 'upsell.global.limitTitle': 'أنت', - 'upsell.global.nearLimitMessage': - 'لقد استخدمت {pct}% من حد الاستخدام. قم بالترقية للحصول على حدود أعلى.', - 'upsell.global.nearLimitTitle': 'الاقتراب من حد الاستخدام', - 'upsell.usageLimit.bodyBudget': - 'لقد وصلت إلى حدّك الأسبوعي.{reset} قم بترقية خطتك أو شحن الرصيد لتجنّب الحدود.', - 'upsell.usageLimit.bodyRate': - 'لقد وصلت إلى حدّ معدّل الاستدلال لـ 10 ساعات.{reset} قم بالترقية للحصول على حدود أعلى.', - 'upsell.usageLimit.heading': 'تم الوصول إلى حد الاستخدام', - 'upsell.usageLimit.notNow': 'ليس الآن', - 'upsell.usageLimit.perWindow': '{amount}', - 'upsell.usageLimit.planIncludes': '{plan}', - 'upsell.usageLimit.resetsIn': 'يُعاد التعيين {time}.', - 'upsell.usageLimit.upgradePlan': 'ترقية الخطة', - 'upsell.usageLimit.weeklyInference': '{amount}', - 'walkthrough.tooltip.letsGo': 'هيا بنا!', - 'walkthrough.tooltip.next': 'التالي →', - 'walkthrough.tooltip.skip': 'تخطّي الجولة', - 'walkthrough.tooltip.stepCounter': '{n} من {total}', - 'webhooks.activity.empty': 'فارغ', - 'webhooks.activity.title': 'النشاط الأخير', - 'webhooks.composioHistory.empty': 'فارغ', - 'webhooks.composioHistory.metadataId': 'معرف البيانات الوصفية', - 'webhooks.composioHistory.metadataUuid': 'UUID البيانات الوصفية', - 'webhooks.composioHistory.payload': 'البيانات', - 'webhooks.composioHistory.title': 'سجل مشغّلات ComposeIO', - 'webhooks.tunnels.active': 'نشط', - 'webhooks.tunnels.createFailed': 'فشل إنشاء النفق', - 'webhooks.tunnels.creating': 'جارٍ الإنشاء...', - 'webhooks.tunnels.deleteFailed': 'فشل حذف النفق', - 'webhooks.tunnels.descriptionPlaceholder': 'الوصف (اختياري)', - 'webhooks.tunnels.echo': 'صدى', - 'webhooks.tunnels.empty': 'فارغ', - 'webhooks.tunnels.enableEcho': 'تفعيل الصدى', - 'webhooks.tunnels.inactive': 'غير نشط', - 'webhooks.tunnels.namePlaceholder': 'اسم النفق (مثال: telegram-bot)', - 'webhooks.tunnels.newTunnel': 'نفق جديد', - 'webhooks.tunnels.removeEcho': 'إزالة الصدى', - 'webhooks.tunnels.title': 'أنفاق Webhook', - 'webhooks.tunnels.toggleFailed': 'فشل تبديل الصدى', - 'composio.authExpired': 'انتهت صلاحية المصادقة', - 'composio.reconnect': 'إعادة الاتصال', - 'composio.previewBadge': 'معاينة', - 'composio.previewTooltip': - 'سيتم دمج الوكيل قريبًا - يمكنك الاتصال، ولكن لا يمكن للوكيل استخدام مجموعة الأدوات هذه بعد.', - 'composio.directModeRequiresKey': 'فشل الحفظ. الوضع المباشر يتطلب مفتاح API غير فارغ.', - 'composio.notYetRouted': 'لم يتم توجيهه بعد', - 'composio.triggers.loading': 'جارٍ التحميل…', - 'conversations.taskKanban.todo': 'للتنفيذ', - 'settings.composio.loading': 'جارٍ التحميل…', - 'settings.mascot.noCharactersAvailable': 'لا توجد شخصيات OpenHuman متاحة بعد', - 'skills.uninstall.confirmTitle': 'إلغاء تثبيت {name}؟', - 'conversations.taskKanban.blocked': 'محظور', - 'conversations.taskKanban.done': 'مكتمل', - 'conversations.taskKanban.pending': 'Pending', - 'conversations.taskKanban.working': 'Working', - 'conversations.taskKanban.awaitingApproval': 'Awaiting approval', - 'conversations.taskKanban.ready': 'Ready', - 'conversations.taskKanban.rejected': 'Rejected', - 'conversations.taskKanban.inProgress': 'قيد التنفيذ', - 'intelligence.memoryChunk.detail.copiedHint': 'تم النسخ', - 'settings.composio.notYetRouted': 'لم يتم توجيهه بعد', - 'settings.localModel.download.manageExternal': - 'إدارة هذا النموذج في وقت التشغيل الخارجي الخاص بك.', - 'settings.localModel.status.manageOllamaExternal': - 'أدِر عملية Ollama وعمليات تحميل النماذج خارج OpenHuman، ثم أعد تشغيل التشخيصات.', - 'settings.localModel.status.ollamaDocs': 'وثائق Ollama', - 'settings.localModel.status.thenRetry': - 'للحصول على تعليمات الإعداد، ثم أعد المحاولة عندما يصبح وقت التشغيل قابلاً للوصول.', - 'settings.appearance.title': 'المظهر', - 'settings.appearance.themeHeading': 'الموضوع', - 'settings.appearance.themeAria': 'الموضوع', - 'settings.appearance.modeLight': 'فاتح', - 'settings.appearance.modeLightDesc': 'أسطح ساطعة، نص داكن.', - 'settings.appearance.modeDark': 'داكنة', - 'settings.appearance.modeDarkDesc': 'الأسطح المعتمة، تكون أسهل على العيون بعد الغسق.', - 'settings.appearance.modeSystem': 'نظام المطابقة', - 'settings.appearance.modeSystemDesc': 'اتبع إعداد مظهر نظام التشغيل لديك.', - 'settings.appearance.helperText': - 'يعمل الوضع الداكن على تحويل التطبيق بأكمله - الدردشة والإعدادات واللوحات - إلى لوحة معتمة. "نظام المطابقة" يتتبع مظهر نظام التشغيل الخاص بك وتحديثاته مباشرة.', - 'settings.mascot.characterPreview': 'معاينة', - 'settings.mascot.characterStates': 'تنص على', - 'settings.mascot.characterVisemes': 'vimeses', - 'settings.mascot.colorAria': 'OpenHuman اللون', - 'settings.mascot.colorBlack': 'أسود', - 'settings.mascot.colorBurgundy': 'عنابي', - 'settings.mascot.colorCustom': 'Custom', - 'settings.mascot.colorNavy': 'بحري', - 'settings.mascot.primaryColor': 'Primary color', - 'settings.mascot.secondaryColor': 'Secondary color', - 'settings.mascot.colorYellow': 'أصفر', - 'settings.mascot.libraryUnavailable': 'مكتبة OpenHuman غير متاحة', - 'settings.mascot.title': 'OpenHuman', - 'settings.developerMenu.mcpServer.title': 'MCP الخادم', - 'settings.developerMenu.mcpServer.desc': 'تكوين عملاء MCP الخارجيين للاتصال بـ OpenHuman', - 'settings.developerMenu.autonomy.title': 'استقلالية الوكيل', - 'settings.developerMenu.autonomy.desc': 'حدود معدل إجراءات الأدوات وعتبات الأمان', - 'settings.mcpServer.title': 'MCP Server', - 'settings.mcpServer.toolsSectionTitle': 'الأدوات المتاحة', - 'settings.mcpServer.toolsSectionDesc': - 'الأدوات التي يتم كشفها عبر خادم MCP stdio عند تشغيل mcp openhuman-core', - 'settings.mcpServer.configSectionTitle': 'تكوين العميل', - 'settings.mcpServer.configSectionDesc': 'حدد عميل MCP الخاص بك لإنشاء مقتطف التكوين الصحيح', - 'settings.mcpServer.copySnippet': 'انسخ إلى الحافظة', - 'settings.mcpServer.copied': 'تم النسخ!', - 'settings.mcpServer.openConfigFile': 'فتح ملف التكوين', - 'settings.mcpServer.binaryPathNotFound': - 'OpenHuman لم يتم العثور على الثنائي. في حالة التشغيل من المصدر، قم بالإنشاء باستخدام: cargo build --bin openhuman-core', - 'settings.mcpServer.openConfigError': 'فشل في فتح ملف التكوين', - 'settings.mcpServer.clientClaudeDesktop': 'Claude Desktop', - 'settings.mcpServer.clientCursor': 'المؤشر', - 'settings.mcpServer.clientCodex': 'Codex', - 'settings.mcpServer.clientZed': 'Zed', - 'settings.mcpServer.configFilePath': 'ملف التكوين', - 'settings.mcpServer.clientSelectorAriaLabel': 'MCP محدد العميل', - 'settings.persona.title': 'Persona', - 'settings.persona.menuTitle': 'Persona', - 'settings.persona.menuDesc': - 'Name, personality, avatar, and voice — your assistant as one identity', - 'settings.persona.identityHeading': 'Identity', - 'settings.persona.identityDesc': - 'A display name and short description for your assistant. Shown in the app; does not change how the assistant reasons.', - 'settings.persona.displayNameLabel': 'Display name', - 'settings.persona.displayNamePlaceholder': 'e.g. Nova', - 'settings.persona.descriptionLabel': 'Description', - 'settings.persona.descriptionPlaceholder': 'e.g. A calm, concise assistant for my team.', - 'settings.persona.soul.heading': 'Personality (SOUL.md)', - 'settings.persona.soul.desc': - 'The personality prompt the assistant follows in every conversation. Edits are saved to your workspace and take effect on the next reply.', - 'settings.persona.soul.editorLabel': 'SOUL.md contents', - 'settings.persona.soul.reset': 'Reset to default', - 'settings.persona.soul.usingDefault': 'Using the bundled default', - 'settings.persona.soul.loadError': 'Could not load SOUL.md', - 'settings.persona.soul.saveError': 'Could not save SOUL.md', - 'settings.persona.soul.resetError': 'Could not reset SOUL.md', - 'settings.persona.appearanceHeading': 'Avatar & Voice', - 'settings.persona.appearanceDesc': - 'Mascot color, custom GIF avatar, and reply voice are configured in Mascot settings.', - 'settings.persona.openMascotSettings': 'Open Mascot settings', - 'settings.developerMenu.composio.title': 'Composio', - 'settings.developerMenu.composio.desc': 'وضع التوجيه ومشغلات التكامل وأرشيف محفوظات التشغيل.', - 'settings.appearance.tabBarHeading': 'شريط علامات التبويب السفلي', - 'settings.appearance.tabBarAlwaysShowLabels': 'إظهار التسميات دائمًا', - 'settings.appearance.tabBarAlwaysShowLabelsDesc': - 'عند إيقاف التشغيل، تظهر التسميات فقط عند التمرير أو لعلامة التبويب النشطة.', - 'common.breadcrumb': 'مسار التنقل', - 'settings.betaBuild': 'الإصدار التجريبي - v{version}', - 'migration.vendor.openclaw': 'OpenClaw', - 'migration.vendor.hermes': 'Hermes Agent', - 'onboarding.apiKeys.openaiOauthHint': - 'استخدم ChatGPT Plus/Pro (اشتراك) أو مفتاح OpenAI API - ليس كلاهما مطلوبًا.', - 'onboarding.apiKeys.openaiOauthOpening': 'فتح تسجيل الدخول...', - 'onboarding.apiKeys.finishSignIn': 'إنهاء تسجيل الدخول إلى ChatGPT', - 'onboarding.apiKeys.orApiKey': 'أو مفتاح API', - 'app.localAiDownload.expandAria': 'توسيع تقدم التنزيل', - 'app.localAiDownload.collapseAria': 'طي تقدم التنزيل', - 'app.localAiDownload.dismissAria': 'تجاهل إشعار التنزيل', - 'mobile.nav.ariaLabel': 'التنقل عبر الهاتف المحمول', - 'progress.stepsAria': 'خطوات التقدم', - 'progress.stepAria': 'الخطوة {current} من {total}', - 'workspace.vaultsTitle': 'خزائن المعرفة', - 'workspace.vaultsDesc': 'أشر إلى مجلد محلي؛ يتم تقسيم الملفات وعكسها في الذاكرة.', - 'calls.title': 'المكالمات', - 'calls.comingSoonBody': 'ستتوفر قريبًا مكالمات مدعومة بالذكاء الاصطناعي. ابقوا متابعين.', - 'art.rotatingTetrahedronAria': 'مركبة فضائية رباعية السطوح دوارة مقلوبة', - 'devOptions.sentryDisabled': '(بدون معرف - تم تعطيل الحراسة في هذا الإصدار)', - 'composio.expiredAuthorization': '{name} انتهت صلاحية الترخيص', - 'composio.expiredDescription': - 'أعد الاتصال لإعادة تمكين أدوات {name}. OpenHuman سيبقي هذا التكامل غير متاح حتى تقوم بتحديث وصول OAuth.', - 'channels.telegram.remoteControlTitle': 'جهاز التحكم عن بعد (Telegram)', - 'channels.telegram.remoteControlBody': - 'من دردشة Telegram المسموح بها، أرسل /الحالة، /الجلسات، /جديد، أو /مساعدة. لا يزال توجيه النموذج يستخدم /model و /models.', - 'rewards.referralSection.retry': 'أعد المحاولة', - 'settings.ai.plannerSummary': - 'المخطط: {sourceEvents} أحداث المصدر، {sent} تم إرسالها، {deduped} تم حذفها.', - 'settings.ai.routeLabel': 'المسار: {route}', - 'settings.ai.latestSpend': 'آخر إنفاق: {amount} في {time} ({action})', - 'settings.ai.topActions': 'أهم الإجراءات', - 'settings.ai.noSpendRows': 'لم يتم تحميل صفوف إنفاق.', - 'settings.ai.topHours': 'أعلى الساعات', - 'settings.ai.noHourlySpend': 'لا يوجد إنفاق بالساعة حتى الآن.', - 'settings.autocomplete.appFilter.app': 'التطبيق', - 'settings.autocomplete.appFilter.currentSuggestion': 'الاقتراح الحالي', - 'settings.autocomplete.appFilter.debounce': 'رفض', - 'settings.autocomplete.appFilter.enabled': 'ممكّن', - 'settings.autocomplete.appFilter.lastError': 'الخطأ الأخير', - 'settings.autocomplete.appFilter.model': 'النموذج', - 'settings.autocomplete.appFilter.phase': 'المرحلة', - 'settings.autocomplete.appFilter.platformSupported': 'النظام الأساسي المدعوم', - 'settings.autocomplete.appFilter.running': 'قيد التشغيل', - 'settings.autocomplete.debug.acceptedPrefix': 'المقبول: {value}', - 'settings.autocomplete.debug.acceptFailed': 'فشل قبول الاقتراح', - 'settings.autocomplete.debug.alreadyRunning': 'الإكمال التلقائي قيد التشغيل بالفعل.', - 'settings.autocomplete.debug.clearHistoryFailed': 'فشل في مسح السجل', - 'settings.autocomplete.debug.didNotStart': 'لم يبدأ الإكمال التلقائي.', - 'settings.autocomplete.debug.disabledInSettings': - 'تم تعطيل الإكمال التلقائي في الإعدادات. تمكينه وحفظه أولا.', - 'settings.autocomplete.debug.fetchSuggestionFailed': 'فشل جلب الاقتراح الحالي', - 'settings.autocomplete.debug.inspectFocusedElementFailed': 'فشل فحص العنصر الذي تم التركيز عليه', - 'settings.autocomplete.debug.loadSettingsFailed': 'فشل تحميل إعدادات الإكمال التلقائي', - 'settings.autocomplete.debug.noSuggestionApplied': 'لم يتم تطبيق أي اقتراح.', - 'settings.autocomplete.debug.noSuggestionReturned': 'لم يتم إرجاع أي اقتراح.', - 'settings.autocomplete.debug.refreshStatusFailed': 'فشل في تحديث حالة الإكمال التلقائي', - 'settings.autocomplete.debug.saveAdvancedSettingsFailed': 'فشل في حفظ الإعدادات المتقدمة', - 'settings.autocomplete.debug.startFailed': 'فشل في بدء الإكمال التلقائي', - 'settings.autocomplete.debug.stopFailed': 'فشل في إيقاف الإكمال التلقائي', - 'settings.autocomplete.debug.suggestionPrefix': 'الاقتراح: {value}', - 'settings.autocomplete.shared.none': 'لا يوجد', - 'settings.autocomplete.shared.notApplicable': 'غير متاح', - 'settings.autocomplete.shared.unknown': 'غير معروف', - 'settings.billing.autoRecharge.expires': 'تنتهي صلاحيته {date}', - 'settings.billing.autoRecharge.spentThisWeek': '${spent} من ${limit} المستخدم هذا الأسبوع', - 'settings.localModel.deviceCapability.disabledLowercase': 'معطل', - 'settings.localModel.deviceCapability.presetDetails': - 'الدردشة: {chatModel} · الرؤية: {visionModel} · ذاكرة الوصول العشوائي المستهدفة: {targetRamGb} جيجابايت', - 'settings.localModel.download.capabilityChat': 'الدردشة', - 'settings.localModel.download.capabilityEmbedding': 'التضمين', - 'settings.localModel.download.capabilityStt': 'STT', - 'settings.localModel.download.capabilityTts': 'TTS', - 'settings.localModel.download.capabilityVision': 'الرؤية', - 'settings.localModel.download.embeddingDimensions': 'الأبعاد: {dimensions}', - 'settings.localModel.download.embeddingModel': 'الموديل: {modelId}', - 'settings.localModel.download.embeddingVectors': 'المتجهات: {count}', - 'settings.localModel.download.notAvailable': 'غير متوفر', - 'settings.localModel.download.summaryHelper': - 'يستدعي `openhuman.inference_summarize` عبر Rust core', - 'settings.localModel.download.transcript': 'النص:', - 'settings.localModel.download.ttsOutput': 'الإخراج: {outputPath}', - 'settings.localModel.download.ttsVoice': 'الصوت: {voiceId}', - 'settings.localModel.status.contextBelowMinimumBadge': - '{contextLength} ctx - أقل من {required} دقيقة', - 'settings.localModel.status.contextBelowMinimumTitle': - 'مرفوض: الرموز المميزة لنافذة السياق {contextLength} أقل من الحد الأدنى للرمز المميز {required} الذي تتطلبه طبقة الذاكرة. سيتم إتلاف الاستدعاء عن طريق الاقتطاع الصامت.', - 'settings.localModel.status.contextOkBadge': '{contextLength} ctx ✓', - 'settings.localModel.status.contextOkTitle': - 'تتوافق الرموز المميزة لنافذة السياق {contextLength} مع الحد الأدنى لطبقة الذاكرة وهو {required} من الرموز المميزة.', - 'settings.localModel.status.contextUnknownBadge': 'ctx غير معروف', - 'settings.localModel.status.contextUnknownTitle': - 'نافذة السياق غير معروفة؛ لا يمكن التأكد من أنه يلبي الحد الأدنى لطبقة الذاكرة {required}-token.', - 'settings.localModel.status.expectedChat': 'الدردشة: {model}', - 'settings.localModel.status.expectedEmbedding': 'التضمين: {model}', - 'settings.localModel.status.expectedVision': 'الرؤية: {model}', - 'settings.localModel.status.externalProcess': 'العملية الخارجية', - 'settings.localModel.status.notAvailable': 'غير متوفر', - 'settings.mascot.customGifPlaceholder': 'https://example.com/avatar.gif', - 'settings.mascot.loadDetailError': 'تعذر تحميل التميمة.', - 'settings.mascot.loadLibraryError': 'تعذر تحميل مكتبة التميمة.', - 'settings.mascot.voice.customPlaceholder': 'على سبيل المثال. 21m00Tcm4TlvDq8ikWAM', - 'settings.mascot.voice.previewText': "Hi, I'm your assistant. This is a voice preview.", - 'skills.channelIcon.discord': 'Discord', - 'skills.channelIcon.imessage': 'iMessage', - 'skills.channelIcon.telegram': 'Telegram', - 'skills.channelIcon.web': 'الويب', - 'skills.channelIcon.yuanbao': 'Yuanbao', - 'skills.composio.poweredBy': 'مدعوم من Composio', - 'skills.composio.staleStatusTitle': 'تظهر الاتصالات حالة قديمة', - 'skills.create.allowedToolsHelp': 'تم عرضها في المادة الأمامية SKILL.md كـ', - 'skills.create.allowedToolsPlaceholder': 'عقدة_exec، جلب', - 'skills.create.licensePlaceholder': 'MIT', - 'skills.create.tagsPlaceholder': 'تداول، بحث', - 'skills.install.errors.alreadyInstalledHint': - 'توجد بالفعل مهارة بهذه البزاقة في مساحة العمل. قم بإزالته أولاً أو قم بتغيير المادة الأمامية `metadata.id` / `name`.', - 'skills.install.errors.alreadyInstalledTitle': 'تم تثبيت المهارة بالفعل', - 'skills.install.errors.fetchFailedHint': - 'لم يكتمل الطلب بنجاح. تحقق من نقاط URL في ملف عام يمكن الوصول إليه، ومن أن المضيف قد قام بإرجاع استجابة 2xx.', - 'skills.install.errors.fetchFailedTitle': 'فشل الجلب', - 'skills.install.errors.fetchTimedOutHint': - 'لم يستجب المضيف البعيد في الوقت المناسب. حاول مرة أخرى أو ارفع المهلة (1-600 ثانية).', - 'skills.install.errors.fetchTimedOutTitle': 'انتهت مهلة الجلب', - 'skills.install.errors.fetchTooLargeHint': - 'يجب أن يكون حجم SKILL.md أقل من 1 ميجابايت. قم بتقسيم الموارد المجمعة إلى ملفات "مراجع/" أو "نصوص برمجية/" بدلاً من تضمينها.', - 'skills.install.errors.fetchTooLargeTitle': 'SKILL.md كبير جدًا', - 'skills.install.errors.genericHint': 'أرجعت الواجهة الخلفية خطأً. يتم عرض الرسالة الأولية أدناه.', - 'skills.install.errors.genericTitle': 'تعذر تثبيت المهارة', - 'skills.install.errors.invalidSkillHint': - 'يجب أن تكون المادة الأمامية YAML صالحة مع حقول `اسم` و`وصف` غير فارغة، ومنتهية بـ `---`.', - 'skills.install.errors.invalidSkillTitle': 'لم يقم SKILL.md بتحليل', - 'skills.install.errors.invalidUrlHint': - 'يُسمح فقط بـ HTTPS URLs العامة. يتم حظر مضيفي البيانات الخاصة والاسترجاعية والبيانات التعريفية.', - 'skills.install.errors.invalidUrlTitle': 'URL مرفوض', - 'skills.install.errors.unsupportedUrlHint': - 'تعمل فقط الروابط المباشرة `.md`. بالنسبة إلى GitHub، قم بالارتباط بملف (github.com/owner/repo/blob/.../SKILL.md) - لم يتم تثبيت جذور الشجرة والريبو.', - 'skills.install.errors.unsupportedUrlTitle': 'URL النموذج غير مدعوم', - 'skills.install.errors.writeFailedHint': - 'دليل مهارات مساحة العمل غير قابل للكتابة. تحقق من أذونات نظام الملفات لـ `/.openhuman/skills/`.', - 'skills.install.errors.writeFailedTitle': 'تعذر كتابة SKILL.md', - 'skills.install.fetchingPrefix': 'جلب', - 'skills.install.fetchingSuffix': 'قد يستغرق ذلك حتى المهلة التي قمت بتكوينها.', - 'skills.install.subtitleMiddle': 'عبر HTTPS وتثبيته ضمن', - 'skills.install.subtitlePrefix': 'جلب', - 'skills.install.subtitleSuffix': - 'HTTPS واحد فقط؛ تم حظر المضيفين الخاصين والمضيفين الاسترجاعيين.', - 'skills.install.successDiscovered': 'تم اكتشاف {count} مهارات جديدة.', - 'skills.install.successNoNewIds': - 'تم تثبيت المهارة، ولكن لم تظهر معرفات مهارة جديدة - قد يحتوي الكتالوج بالفعل على مهارة بنفس البزاقة.', - 'skills.install.timeoutHelp': 'الافتراضي هو 60 ثانية. يتم تثبيت القيم خارج 1-600 من جانب الخادم.', - 'skills.install.timeoutInvalid': 'يجب أن يكون عددًا صحيحًا بين 1 و600.', - 'skills.install.timeoutPlaceholder': '60', - 'skills.install.urlHelpMiddle': 'ملف.', - 'skills.install.urlHelpPrefix': 'الرابط المباشر إلى', - 'skills.install.urlHelpSuffix': 'URLs إعادة الكتابة التلقائية إلى', - 'skills.install.urlInvalidPrefix': 'URL يجب أن يكون رابط', - 'skills.install.urlInvalidSuffix': 'جيد التنسيق.', - 'skills.install.urlPlaceholder': 'https://raw.githubusercontent.com/owner/repo/main/SKILL.md', - 'skills.meetingBots.platformComingSoon': '{label} الدعم قريبًا.', - 'skills.meetingBots.platformHints.gmeet': 'meet.google.com/abc-defg-hij', - 'skills.meetingBots.platformHints.teams': 'Teams.microsoft.com/...', - 'skills.meetingBots.platformHints.zoom': 'Zoom.us/j/...', - 'skills.meetingBots.platforms.gmeet': 'Google لقاء', - 'skills.meetingBots.platforms.teams': 'Microsoft Teams', - 'skills.meetingBots.platforms.zoom': 'تكبير', - 'skills.meetingBots.soonSuffix': 'قريبًا', - 'skills.setup.screenIntel.permissionPathLabel': 'يطبق macOS الخصوصية على:', - 'settings.agentAccess.title': 'Agent OS access', - 'settings.agentAccess.menuDesc': - 'Control where the agent can read/write and whether it can use the shell.', - 'settings.agentAccess.loadError': 'Failed to load access settings', - 'settings.agentAccess.saveError': 'Failed to save access settings', - 'settings.agentAccess.saved': 'Saved — applies on your next message.', - 'settings.agentAccess.desktopOnly': 'Access settings are only available in the desktop app.', - 'settings.agentAccess.loading': 'Loading…', - 'settings.agentAccess.accessMode': 'Access mode', - 'settings.agentAccess.tier.readonly.title': 'Read-only', - 'settings.agentAccess.tier.readonly.desc': - 'Reads files and runs read-only commands to explore — but never writes, edits, or runs anything that changes state.', - 'settings.agentAccess.tier.supervised.title': 'Ask before edit', - 'settings.agentAccess.tier.supervised.desc': - 'Creates new files freely, but asks for your approval before editing an existing file, running a command, reaching the network, or installing anything.', - 'settings.agentAccess.tier.full.title': 'Full access', - 'settings.agentAccess.tier.full.desc': - 'Runs commands with your full user account access — it can read/write anywhere allowed, except credential and system stores. Destructive commands, network access, and installs still ask for approval.', - 'settings.agentAccess.defaultTag': '(default)', - 'settings.agentAccess.fullWarning': - '⚠ Full access runs commands with your full account access and is not sandboxed. Only enable it when you trust the agent with this machine. Credential and system directories stay blocked, and destructive, network, and install actions still ask for approval.', - 'settings.agentAccess.confine.label': 'Confine to workspace', - 'settings.agentAccess.confine.desc': - 'Restrict the agent to the workspace directory (plus any granted folders), whichever access mode is selected. When off, it can reach anywhere your user can — except the always-blocked credential and system directories.', - 'settings.agentAccess.grantedFolders': 'Granted folders', - 'settings.agentAccess.alwaysAllow': 'Always-allowed tools', - 'settings.agentAccess.alwaysAllowDesc': - 'Tools you marked "Always allow" in chat run without asking. Remove one to be prompted again.', - 'settings.agentAccess.alwaysAllowNone': 'No always-allowed tools yet.', - 'settings.agentAccess.grantedDesc': - 'Folders the agent may read and write, in addition to the workspace. Credential stores (~/.ssh, ~/.gnupg, ~/.aws, keychains) and system directories (/etc, /System, C:\\Windows, …) are always blocked, even inside a granted folder.', - 'settings.agentAccess.noneGranted': 'No folders granted.', - 'settings.agentAccess.readWrite': 'read + write', - 'settings.agentAccess.readOnly': 'read-only', - 'settings.agentAccess.remove': 'Remove', - 'settings.agentAccess.pathPlaceholder': 'المسار المطلق للمجلد', - 'settings.agentAccess.accessLevelLabel': 'Access level', - 'settings.agentAccess.add': 'Add', - 'settings.agentAccess.saving': 'Saving…', - 'settings.agentAccess.changesApply': 'Changes apply on your next message.', - 'skills.tabs.runners': 'Runners', - 'settings.developerMenu.skillsRunner.title': 'Skills Runner', - 'settings.developerMenu.skillsRunner.desc': - 'Run any bundled skill ad-hoc — fill its inputs and fire a background autonomous run', - 'settings.developerMenu.skillsRunner.panelDesc': - 'Pick a bundled skill, fill in its declared inputs, and fire a fire-and-forget background run. Use Dev Workflow instead if you want a cron-scheduled recurring job.', - 'settings.skillsRunner.skill': 'Skill', - 'settings.skillsRunner.selectSkill': 'Select a skill…', - 'settings.skillsRunner.loadingSkills': 'Loading skills…', - 'settings.skillsRunner.loadingDescription': 'Loading skill inputs…', - 'settings.skillsRunner.noInputs': 'This skill declares no inputs.', - 'settings.skillsRunner.placeholder.required': 'required', - 'settings.skillsRunner.runNow': 'Run now', - 'settings.skillsRunner.starting': 'Starting…', - 'settings.skillsRunner.started': 'Started — run id:', - 'settings.skillsRunner.logPath': 'Log:', - 'settings.skillsRunner.error.listSkills': 'Failed to load skills:', - 'settings.skillsRunner.error.describe': 'Failed to load inputs:', - 'settings.skillsRunner.error.missingRequired': 'Missing required input(s):', - 'settings.skillsRunner.error.run': 'Run failed to start:', - 'settings.skillsRunner.error.preflightGate': 'Preflight gate failed', - 'settings.skillsRunner.schedule.heading': 'Schedule (recurring)', - 'settings.skillsRunner.schedule.help': - 'Save this skill + inputs as a recurring cron job. The agent will call run_skill at each tick.', - 'settings.skillsRunner.schedule.frequency': 'Frequency', - 'settings.skillsRunner.schedule.every30min': 'Every 30 minutes', - 'settings.skillsRunner.schedule.everyHour': 'Every hour', - 'settings.skillsRunner.schedule.every2hours': 'Every 2 hours', - 'settings.skillsRunner.schedule.every6hours': 'Every 6 hours', - 'settings.skillsRunner.schedule.onceDaily': 'Once daily (9:00)', - 'settings.skillsRunner.schedule.save': 'Save schedule', - 'settings.skillsRunner.schedule.saving': 'Saving…', - 'settings.skillsRunner.schedule.saved': 'Schedule saved.', - 'settings.skillsRunner.schedule.error': 'Schedule save failed:', - 'settings.skillsRunner.schedule.loadingJobs': 'Loading existing schedules…', - 'settings.skillsRunner.schedule.noJobs': 'No schedules saved for this skill yet.', - 'settings.skillsRunner.schedule.existing': 'Scheduled jobs for this skill:', - 'settings.skillsRunner.schedule.runNow': 'Run', - 'settings.skillsRunner.schedule.remove': 'Remove', - 'settings.skillsRunner.recentRuns.headingForSkill': 'Recent runs for this skill', - 'settings.skillsRunner.recentRuns.headingAll': 'Recent skill runs (all)', - 'settings.skillsRunner.recentRuns.refresh': 'Refresh', - 'settings.skillsRunner.recentRuns.loading': 'Loading recent runs…', - 'settings.skillsRunner.recentRuns.empty': 'No recent runs.', - 'settings.skillsRunner.viewer.loading': 'Loading log…', - 'settings.skillsRunner.viewer.tailing': 'Live tailing', - 'settings.skillsRunner.viewer.fetching': 'fetching', - 'settings.skillsRunner.viewer.error': 'Log read failed:', - 'settings.skillsRunner.repoPicker.loading': 'Loading repositories…', - 'settings.skillsRunner.repoPicker.select': 'Select a repository…', - 'settings.skillsRunner.repoPicker.empty': - 'No repositories returned. Connect GitHub via Composio to populate this list.', - 'settings.skillsRunner.repoPicker.notConnected': - 'GitHub isn’t connected via Composio. Connect it under Skills → Composio first.', - 'settings.skillsRunner.repoPicker.privateTag': '(private)', - 'settings.skillsRunner.branchPicker.needRepo': 'Pick a repo first…', - 'settings.skillsRunner.branchPicker.loading': 'Loading branches…', - 'settings.skillsRunner.branchPicker.select': 'Select a branch…', - 'settings.modelHealth.title': 'Model Health', - 'settings.modelHealth.desc': - 'Per-model quality, hallucination rate, and cost comparison across active models', - 'settings.modelHealth.allStatuses': 'All statuses', - 'settings.modelHealth.models': 'models', - 'settings.modelHealth.loading': 'Loading model data...', - 'settings.modelHealth.empty': 'No models registered', - 'settings.modelHealth.col.model': 'Model', - 'settings.modelHealth.col.quality': 'Quality', - 'settings.modelHealth.col.halluc': 'Halluc. Rate', - 'settings.modelHealth.col.cost': 'Cost / 1M out', - 'settings.modelHealth.col.agents': 'Agents', - 'settings.modelHealth.col.status': 'Status', - 'settings.modelHealth.badge.keep': 'Keep', - 'settings.modelHealth.badge.replace': 'Replace', - 'settings.modelHealth.badge.staging': 'Staging test', - 'settings.modelHealth.badge.vision': 'Vision only', - 'settings.modelHealth.swap': 'Swap?', - 'settings.modelHealth.modal.title': 'Replace Model?', - 'settings.modelHealth.modal.hallucRate': 'Hallucination rate', - 'settings.modelHealth.modal.cancel': 'Cancel', - 'settings.modelHealth.modal.apply': 'Apply Replacement', - 'settings.modelHealth.tag.cheaper': 'CHEAPER', - 'settings.modelHealth.tag.better': 'BETTER', - // Task sources (#task-sources) - 'settings.taskSources.title': 'Task Sources', - 'settings.taskSources.subtitle': 'Pull tasks from your tools onto the agent todo board', - 'settings.taskSources.description': - 'Collect work items from GitHub, Notion, Linear, and ClickUp, enrich them, and route them onto the agent todo board.', - 'settings.taskSources.connectHint': - 'Task sources use your connected accounts. Connect them under Integrations first.', - 'settings.taskSources.disabledBanner': - 'Task sources are disabled in settings. Enable them to poll automatically.', - 'settings.taskSources.loadError': 'Failed to load task sources', - 'settings.taskSources.addTitle': 'Add a task source', - 'settings.taskSources.provider': 'Provider', - 'settings.taskSources.name': 'Name (optional)', - 'settings.taskSources.namePlaceholder': 'e.g. My open issues', - 'settings.taskSources.github.repo': 'Repository (owner/name, optional)', - 'settings.taskSources.github.labels': 'Labels (comma-separated)', - 'settings.taskSources.notion.database': 'Database (board) ID', - 'settings.taskSources.linear.team': 'Team ID (optional)', - 'settings.taskSources.clickup.team': 'Workspace (team) ID (optional)', - 'settings.taskSources.assignedToMe': 'Only items assigned to me', - 'settings.taskSources.add': 'Add source', - 'settings.taskSources.adding': 'Adding…', - 'settings.taskSources.preview': 'Preview', - 'settings.taskSources.previewResult': '{count} task(s) match this filter', - 'settings.taskSources.fetchNow': 'Fetch now', - 'settings.taskSources.fetching': 'Fetching…', - 'settings.taskSources.fetchResult': 'Routed {routed} of {fetched} task(s)', - 'settings.taskSources.configured': 'Configured sources', - 'settings.taskSources.empty': 'No task sources configured yet.', - 'settings.taskSources.proactive': 'Proactive', - 'settings.taskSources.lastFetch': 'Last fetch', - 'settings.taskSources.never': 'Never', - 'settings.taskSources.statusEnabled': 'Enabled', - 'settings.taskSources.statusDisabled': 'Disabled', - 'settings.taskSources.enable': 'Enable', - 'settings.taskSources.disable': 'Disable', - 'settings.taskSources.remove': 'Remove', - 'settings.taskSources.removeConfirm': - 'Remove this task source? All ingested task history will be deleted and cannot be undone.', - - 'settings.taskSources.refresh': 'Refresh', - // Task sources provider labels (#task-sources) - 'settings.taskSources.providers.github': 'GitHub', - 'settings.taskSources.providers.notion': 'Notion', - 'settings.taskSources.providers.linear': 'Linear', - 'settings.taskSources.providers.clickup': 'ClickUp', - - // /skills IA restructure (Phase 2/3) — dashboard + new-skill page. - 'skills.dashboard.title': 'Skills', - 'skills.dashboard.scheduledHeading': 'Scheduled skills', - 'skills.dashboard.emptyTitle': 'No scheduled skills', - 'skills.dashboard.emptyBody': - 'Run a bundled skill once or save a recurring schedule to see it here.', - 'skills.dashboard.create': 'Create a Skill', - 'skills.dashboard.run': 'Run a Skill', - 'skills.dashboard.enable': 'Enable scheduled skill', - 'skills.dashboard.disable': 'Disable scheduled skill', - 'skills.dashboard.lastRun': 'Last run', - 'skills.dashboard.nextRun': 'Next run', - 'skills.dashboard.cardOpenRunner': 'Open in runner', - 'skills.dashboard.loadError': 'Failed to load scheduled skills', - 'skills.new.title': 'Create a skill', - 'skills.new.placeholderBody': - 'Authoring form arrives soon. For now, use the “New skill” button on the runner page.', - 'settings.agentAccess.requireTaskPlanApproval.label': 'Require task plan approval', - 'settings.agentAccess.requireTaskPlanApproval.desc': - 'Pause before an assigned agent executes an agent-authored task brief.', -}; - -export default ar5; diff --git a/app/src/lib/i18n/chunks/bn-1.ts b/app/src/lib/i18n/chunks/bn-1.ts deleted file mode 100644 index fe7c2dc78..000000000 --- a/app/src/lib/i18n/chunks/bn-1.ts +++ /dev/null @@ -1,1620 +0,0 @@ -import type { TranslationMap } from '../types'; - -// Bengali (বাংলা) chunk 1/5. Translated from chunks/en-1.ts. -const bn1: TranslationMap = { - 'nav.home': 'হোম', - 'nav.human': 'হিউম্যান', - 'nav.chat': 'চ্যাট', - 'nav.connections': 'সংযোগ', - 'nav.memory': 'ইন্টেলিজেন্স', - 'nav.alerts': 'সতর্কতা', - 'nav.rewards': 'পুরস্কার', - 'nav.settings': 'সেটিংস', - 'common.cancel': 'বাতিল', - 'common.save': 'সংরক্ষণ', - 'common.confirm': 'নিশ্চিত করুন', - 'common.delete': 'মুছুন', - 'common.edit': 'সম্পাদনা', - 'common.create': 'তৈরি করুন', - 'common.search': 'খুঁজুন', - 'common.loading': 'লোড হচ্ছে…', - 'common.error': 'ত্রুটি', - 'common.success': 'সফল', - 'common.back': 'পেছনে', - 'common.next': 'পরবর্তী', - 'common.finish': 'সম্পন্ন', - 'common.close': 'বন্ধ করুন', - 'common.enabled': 'সক্রিয়', - 'common.disabled': 'নিষ্ক্রিয়', - 'common.on': 'চালু', - 'common.off': 'বন্ধ', - 'common.yes': 'হ্যাঁ', - 'common.no': 'না', - 'common.ok': 'বুঝলাম', - 'common.retry': 'আবার চেষ্টা করুন', - 'common.copy': 'কপি', - 'common.copied': 'কপি হয়েছে', - 'common.learnMore': 'আরও জানুন', - 'common.seeAll': 'দেখুন', - 'common.dismiss': 'বাদ দিন', - 'common.clear': 'পরিষ্কার', - 'common.reset': 'রিসেট', - 'common.refresh': 'রিফ্রেশ', - 'common.export': 'রপ্তানি', - 'common.import': 'আমদানি', - 'common.upload': 'আপলোড', - 'common.download': 'ডাউনলোড', - 'common.add': 'যোগ করুন', - 'common.remove': 'সরান', - 'common.showMore': 'আরও দেখুন', - 'common.showLess': 'কম দেখুন', - 'common.submit': 'জমা দিন', - 'common.continue': 'চালিয়ে যান', - 'common.comingSoon': 'শীঘ্রই আসছে', - 'settings.general': 'সাধারণ', - 'settings.featuresAndAI': 'ফিচার ও AI', - 'settings.billingAndRewards': 'বিলিং ও পুরস্কার', - 'settings.support': 'সহায়তা', - 'settings.advanced': 'অ্যাডভান্সড', - 'settings.dangerZone': 'বিপদ অঞ্চল', - 'settings.account': 'অ্যাকাউন্ট', - 'settings.accountDesc': 'রিকভারি ফ্রেজ, টিম, সংযোগ ও গোপনীয়তা', - 'settings.notifications': 'বিজ্ঞপ্তি', - 'settings.notificationsDesc': 'ডু নট ডিস্টার্ব এবং প্রতিটি অ্যাকাউন্টের বিজ্ঞপ্তি নিয়ন্ত্রণ', - 'settings.notifications.tabs.preferences': 'পছন্দ', - 'settings.notifications.tabs.routing': 'রাউটিং', - 'settings.features': 'ফিচার', - 'settings.featuresDesc': 'স্ক্রিন সচেতনতা, মেসেজিং এবং টুলস', - 'settings.aiModels': 'AI ও মডেল', - 'settings.aiModelsDesc': 'লোকাল AI মডেল সেটআপ, ডাউনলোড এবং LLM প্রোভাইডার', - 'settings.ai': 'AI কনফিগারেশন', - 'settings.aiDesc': 'ক্লাউড প্রোভাইডার, লোকাল Ollama মডেল এবং ওয়ার্কলোড রুটিং', - 'settings.billingUsage': 'বিলিং ও ব্যবহার', - 'settings.billingUsageDesc': 'সাবস্ক্রিপশন প্ল্যান, ক্রেডিট এবং পেমেন্ট পদ্ধতি', - 'settings.rewards': 'পুরস্কার', - 'settings.rewardsDesc': 'রেফারেল, কুপন এবং অর্জিত ক্রেডিট', - 'settings.restartTour': 'ট্যুর পুনরায় শুরু', - 'settings.restartTourDesc': 'শুরু থেকে প্রোডাক্ট ওয়াকথ্রু আবার দেখুন', - 'settings.about': 'সম্পর্কে', - 'settings.aboutDesc': 'অ্যাপ ভার্সন এবং সফটওয়্যার আপডেট', - 'settings.developerOptions': 'অ্যাডভান্সড', - 'settings.developerOptionsDesc': - 'AI কনফিগারেশন, মেসেজিং চ্যানেল, টুলস, ডায়াগনস্টিক্স এবং ডিবাগ প্যানেল', - 'settings.clearAppData': 'অ্যাপ ডেটা মুছুন', - 'settings.clearAppDataDesc': 'সাইন আউট করুন এবং সব লোকাল ডেটা স্থায়ীভাবে মুছুন', - 'settings.logOut': 'লগ আউট', - 'settings.logOutDesc': 'আপনার অ্যাকাউন্ট থেকে সাইন আউট করুন', - 'settings.exitLocalSession': 'স্থানীয় সেশন থেকে প্রস্থান করুন', - 'settings.exitLocalSessionDesc': 'সাইন-ইন স্ক্রিনে ফিরে যান', - 'settings.language': 'ভাষা', - 'settings.languageDesc': 'অ্যাপ ইন্টারফেসের প্রদর্শন ভাষা', - 'settings.alerts': 'সতর্কতা', - 'settings.alertsDesc': 'ইনবক্সে সাম্প্রতিক সতর্কতা ও কার্যক্রম দেখুন', - 'settings.account.recoveryPhrase': 'রিকভারি ফ্রেজ', - 'settings.account.recoveryPhraseDesc': 'আপনার অ্যাকাউন্ট রিকভারি ফ্রেজ দেখুন ও ব্যাকআপ করুন', - 'settings.account.team': 'টিম', - 'settings.account.teamDesc': 'টিম সদস্য ও অনুমতি পরিচালনা করুন', - 'settings.account.connections': 'সংযোগ', - 'settings.account.connectionsDesc': 'লিংক করা অ্যাকাউন্ট ও সার্ভিস পরিচালনা করুন', - 'settings.account.privacy': 'গোপনীয়তা', - 'settings.account.privacyDesc': 'আপনার কম্পিউটার থেকে কোন ডেটা বাইরে যাচ্ছে তা নিয়ন্ত্রণ করুন', - 'settings.notifications.doNotDisturb': 'ডু নট ডিস্টার্ব', - 'settings.notifications.doNotDisturbDesc': 'নির্দিষ্ট সময়ের জন্য সব বিজ্ঞপ্তি বন্ধ রাখুন', - 'settings.notifications.channelControls': 'চ্যানেল-ভিত্তিক নিয়ন্ত্রণ', - 'settings.notifications.channelControlsDesc': 'প্রতিটি চ্যানেলের জন্য বিজ্ঞপ্তি পছন্দ সেট করুন', - 'settings.features.screenAwareness': 'স্ক্রিন সচেতনতা', - 'settings.features.screenAwarenessDesc': 'অ্যাসিস্ট্যান্টকে আপনার সক্রিয় উইন্ডো দেখতে দিন', - 'settings.features.messaging': 'মেসেজিং', - 'settings.features.messagingDesc': 'চ্যানেল ও মেসেজিং ইন্টিগ্রেশন সেটিংস', - 'settings.features.tools': 'টুলস', - 'settings.features.toolsDesc': 'সংযুক্ত টুলস ও ইন্টিগ্রেশন পরিচালনা করুন', - 'settings.ai.localSetup': 'লোকাল AI সেটআপ', - 'settings.ai.localSetupDesc': 'লোকাল AI মডেল ডাউনলোড ও কনফিগার করুন', - 'settings.ai.llmProvider': 'LLM প্রোভাইডার', - 'settings.ai.llmProviderDesc': 'আপনার AI প্রোভাইডার বেছে নিন ও কনফিগার করুন', - 'clearData.title': 'অ্যাপ ডেটা মুছুন', - 'clearData.warning': 'এটি আপনাকে সাইন আউট করবে এবং নিম্নলিখিত লোকাল ডেটা স্থায়ীভাবে মুছে দেবে:', - 'clearData.bulletSettings': 'অ্যাপ সেটিংস এবং কথোপকথন', - 'clearData.bulletCache': 'সব লোকাল ইন্টিগ্রেশন ক্যাশ ডেটা', - 'clearData.bulletWorkspace': 'ওয়ার্কস্পেস ডেটা', - 'clearData.bulletOther': 'অন্যান্য সব লোকাল ডেটা', - 'clearData.irreversible': 'এই কাজটি পূর্বাবস্থায় ফেরানো যাবে না।', - 'clearData.clearing': 'অ্যাপ ডেটা মোছা হচ্ছে...', - 'clearData.failed': 'ডেটা মুছতে ও লগ আউট করতে ব্যর্থ হয়েছে। আবার চেষ্টা করুন।', - 'clearData.failedLogout': 'লগ আউট করতে ব্যর্থ হয়েছে। আবার চেষ্টা করুন।', - 'clearData.failedPersist': 'অ্যাপ স্টেট মুছতে ব্যর্থ হয়েছে। আবার চেষ্টা করুন।', - 'welcome.title': 'OpenHuman-এ স্বাগতম', - 'welcome.subtitle': - 'আপনার ব্যক্তিগত AI সুপার ইন্টেলিজেন্স। ব্যক্তিগত, সহজ এবং অত্যন্ত শক্তিশালী।', - 'welcome.connectPrompt': 'RPC URL কনফিগার করুন (অ্যাডভান্সড)', - 'welcome.selectRuntime': 'একটি রানটাইম বেছে নিন', - 'welcome.urlPlaceholder': 'http://localhost:8089', - 'welcome.invalidUrl': 'একটি বৈধ HTTP বা HTTPS URL দিন', - 'welcome.connecting': 'পরীক্ষা করা হচ্ছে', - 'welcome.connect': 'পরীক্ষা করুন', - 'home.greeting': 'শুভ সকাল', - 'home.greetingAfternoon': 'শুভ বিকেল', - 'home.greetingEvening': 'শুভ সন্ধ্যা', - 'home.askAssistant': 'আপনার অ্যাসিস্ট্যান্টকে যেকোনো কিছু জিজ্ঞেস করুন...', - 'home.statusOk': - 'আপনার ডিভাইস সংযুক্ত। সংযোগ সক্রিয় রাখতে অ্যাপটি চালু রাখুন। নিচের বাটন দিয়ে এজেন্টকে মেসেজ করুন।', - 'home.statusBackendOnly': 'ব্যাকএন্ডে পুনরায় সংযোগ হচ্ছে… আপনার এজেন্ট শীঘ্রই আবার পাওয়া যাবে।', - 'home.statusCoreUnreachable': - 'লোকাল কোর সাইডকার সাড়া দিচ্ছে না। OpenHuman ব্যাকগ্রাউন্ড প্রসেস ক্র্যাশ হয়েছে বা শুরু হয়নি।', - 'home.statusInternetOffline': - 'আপনার ডিভাইস এখন অফলাইনে। নেটওয়ার্ক পরীক্ষা করুন বা অ্যাপ রিস্টার্ট করুন।', - 'home.restartCore': 'কোর রিস্টার্ট', - 'home.restartingCore': 'কোর রিস্টার্ট হচ্ছে…', - 'home.themeToggle.toLight': 'লাইট মোডে স্যুইচ করুন', - 'home.themeToggle.toDark': 'ডার্ক মোডে স্যুইচ করুন', - 'chat.newThread': 'নতুন থ্রেড', - 'chat.typeMessage': 'একটি বার্তা টাইপ করুন...', - 'chat.send': 'বার্তা পাঠান', - 'chat.thinking': 'ভাবছে...', - 'chat.noMessages': 'এখনো কোনো বার্তা নেই', - 'chat.startConversation': 'একটি কথোপকথন শুরু করুন', - 'chat.regenerate': 'পুনরায় তৈরি করুন', - 'chat.copyResponse': 'উত্তর কপি করুন', - 'chat.citations': 'উদ্ধৃতি', - 'chat.toolUsed': 'ব্যবহৃত টুল', - 'scope.legacy': 'লেগ্যাসি', - 'scope.user': 'ব্যবহারকারী', - 'scope.project': 'প্রজেক্ট', - 'skills.title': 'সংযোগ', - 'skills.search': 'সংযোগ খুঁজুন...', - 'skills.noResults': 'কোনো সংযোগ পাওয়া যায়নি', - 'skills.connect': 'সংযুক্ত করুন', - 'skills.disconnect': 'সংযোগ বিচ্ছিন্ন', - 'skills.configure': 'পরিচালনা', - 'skills.connected': 'সংযুক্ত', - 'skills.available': 'পাওয়া যাচ্ছে', - 'skills.addAccount': 'অ্যাকাউন্ট যোগ করুন', - 'skills.channels': 'চ্যানেল', - 'skills.integrations': 'ইন্টিগ্রেশন', - 'memory.title': 'মেমোরি', - 'memory.search': 'মেমোরি খুঁজুন...', - 'memory.noResults': 'কোনো মেমোরি পাওয়া যায়নি', - 'memory.empty': - 'এখনো কোনো মেমোরি নেই। আপনি যত ইন্টারঅ্যাক্ট করবেন, মেমোরি স্বয়ংক্রিয়ভাবে তৈরি হবে।', - 'memory.tab.memory': 'মেমোরি', - 'memory.tab.tasks': 'Agent Tasks', - 'memory.tab.tasksDescription': - 'Create and track tasks — your own to-dos plus the boards your agents build across conversations.', - 'memory.tab.subconscious': 'সাবকনশাস', - 'memory.tab.dreams': 'স্বপ্ন', - 'memory.tab.calls': 'কল', - 'memory.tab.diagram': 'Diagram', - 'memory.tab.settings': 'সেটিংস', - 'memory.analyzeNow': 'এখনই বিশ্লেষণ করুন', - 'memoryTree.status.title': 'Memory Tree', - 'memoryTree.status.autoSyncLabel': 'Auto-sync', - 'memoryTree.status.autoSyncDescription': - 'Pause to stop new ingestion. Existing wiki stays queryable.', - 'memoryTree.status.statusTile': 'Status', - 'memoryTree.status.lastSyncTile': 'Last sync', - 'memoryTree.status.totalChunksTile': 'Total chunks', - 'memoryTree.status.wikiSizeTile': 'Wiki size', - 'memoryTree.status.statusRunning': 'Running', - 'memoryTree.status.statusPaused': 'Paused', - 'memoryTree.status.statusSyncing': 'Syncing', - 'memoryTree.status.statusError': 'Error', - 'memoryTree.status.statusIdle': 'Idle', - 'memoryTree.status.never': 'Never', - 'memoryTree.status.fetchError': "Couldn't fetch Memory Tree status", - 'memoryTree.status.retry': 'Retry', - 'memoryTree.status.toggleFailed': "Couldn't toggle auto-sync", - 'memoryTree.status.justNow': 'just now', - 'memoryTree.status.secondsAgo': '{count}s ago', - 'memoryTree.status.minuteAgo': '1 min ago', - 'memoryTree.status.minutesAgo': '{count} min ago', - 'memoryTree.status.hourAgo': '1 hr ago', - 'memoryTree.status.hoursAgo': '{count} hr ago', - 'memoryTree.status.dayAgo': '1 day ago', - 'memoryTree.status.daysAgo': '{count} days ago', - 'alerts.title': 'সতর্কতা', - 'alerts.empty': 'এখনো কোনো সতর্কতা নেই', - 'alerts.markAllRead': 'সব পঠিত চিহ্নিত করুন', - 'alerts.unread': 'অপঠিত', - 'rewards.title': 'পুরস্কার', - 'rewards.referrals': 'রেফারেল', - 'rewards.coupons': 'রিডিম', - 'rewards.credits': 'ক্রেডিট', - 'rewards.referralCode': 'আপনার রেফারেল কোড', - 'rewards.copyCode': 'কোড কপি করুন', - 'rewards.share': 'শেয়ার', - 'onboarding.welcome': 'হ্যালো। আমি OpenHuman।', - 'onboarding.welcomeDesc': - 'আপনার সুপার-ইন্টেলিজেন্ট AI অ্যাসিস্ট্যান্ট যা আপনার কম্পিউটারে চলে। ব্যক্তিগত, সহজ এবং অত্যন্ত শক্তিশালী।', - 'onboarding.context': 'কন্টেক্সট সংগ্রহ', - 'onboarding.contextDesc': 'প্রতিদিন ব্যবহার করা টুলস ও সার্ভিস সংযুক্ত করুন।', - 'onboarding.localAI': 'লোকাল AI', - 'onboarding.localAIDesc': 'আপনার মেশিনে চলা একটি লোকাল AI মডেল সেটআপ করুন।', - 'onboarding.chatProvider': 'চ্যাট প্রোভাইডার', - 'onboarding.chatProviderDesc': 'আপনার অ্যাসিস্ট্যান্টের সাথে কীভাবে যোগাযোগ করবেন তা বেছে নিন।', - 'onboarding.referral': 'রেফারেল', - 'onboarding.referralDesc': 'যদি রেফারেল কোড থাকে তা প্রয়োগ করুন।', - 'onboarding.finish': 'সেটআপ সম্পন্ন', - 'onboarding.finishDesc': 'সব প্রস্তুত! OpenHuman ব্যবহার শুরু করুন।', - 'onboarding.skip': 'এড়িয়ে যান', - 'onboarding.getStarted': 'শুরু করুন', - 'onboarding.runtimeChoice.title': 'আপনি কীভাবে OpenHuman চালাতে চান?', - 'onboarding.runtimeChoice.subtitle': - 'আপনার জন্য উপযুক্ত সেটআপ বেছে নিন। পরে সেটিংসে পরিবর্তন করা যাবে।', - 'onboarding.runtimeChoice.cloud.title': 'সহজ', - 'onboarding.runtimeChoice.cloud.tagline': 'OpenHuman সব কিছু পরিচালনা করবে।', - 'onboarding.runtimeChoice.cloud.f1': 'বিল্ট-ইন নিরাপত্তা', - 'onboarding.runtimeChoice.cloud.f2': 'ব্যবহার আরও দীর্ঘ করতে টোকেন কম্প্রেশন', - 'onboarding.runtimeChoice.cloud.f3': 'একটি সাবস্ক্রিপশনে সব মডেল', - 'onboarding.runtimeChoice.cloud.f4': 'API কী পরিচালনার ঝামেলা নেই', - 'onboarding.runtimeChoice.cloud.f5': 'সেটআপ করা সহজ', - 'onboarding.runtimeChoice.custom.title': 'কাস্টম রান', - 'onboarding.runtimeChoice.custom.tagline': 'নিজের কী আনুন। সম্পূর্ণ নিয়ন্ত্রণ আপনার হাতে।', - 'onboarding.runtimeChoice.custom.f1': 'প্রায় সব কিছুর জন্য API কী প্রয়োজন', - 'onboarding.runtimeChoice.custom.f2': 'আপনার বিদ্যমান সার্ভিস পুনরায় ব্যবহার করে', - 'onboarding.runtimeChoice.custom.f3': 'সব লোকালে চালালে বিনামূল্যে হতে পারে', - 'onboarding.runtimeChoice.custom.f4': 'বেশি সেটআপ, বেশি নিয়ন্ত্রণ', - 'onboarding.runtimeChoice.custom.f5': 'পাওয়ার ইউজার ও ডেভেলপারদের জন্য সেরা', - 'onboarding.runtimeChoice.cloud.creditHighlight': 'চেষ্টা করতে $1 বিনামূল্যে ক্রেডিট', - 'onboarding.runtimeChoice.continueCloud': 'সহজ দিয়ে চালিয়ে যান', - 'onboarding.runtimeChoice.continueCustom': 'কাস্টম দিয়ে চালিয়ে যান', - 'onboarding.runtimeChoice.recommended': 'প্রস্তাবিত', - 'onboarding.apiKeys.title': 'আপনার API কী যোগ করুন', - 'onboarding.apiKeys.subtitle': - 'এখনই পেস্ট করুন বা এড়িয়ে গিয়ে পরে Settings › AI-এ যোগ করুন। কীগুলো এই ডিভাইসে এনক্রিপ্ট করে সংরক্ষিত থাকে।', - 'onboarding.apiKeys.openaiLabel': 'OpenAI API কী', - 'onboarding.apiKeys.openaiPlaceholder': 'sk-...', - 'onboarding.apiKeys.anthropicLabel': 'Anthropic API কী', - 'onboarding.apiKeys.anthropicPlaceholder': 'sk-ant-...', - 'onboarding.apiKeys.saveError': 'কীটি সংরক্ষণ করা যায়নি। দয়া করে যাচাই করে আবার চেষ্টা করুন।', - 'onboarding.apiKeys.skipForNow': 'এখনের জন্য এড়িয়ে যান', - 'onboarding.apiKeys.continue': 'সংরক্ষণ করে চালিয়ে যান', - 'onboarding.apiKeys.saving': 'সংরক্ষণ হচ্ছে…', - 'onboarding.custom.stepperInference': 'ইনফারেন্স', - 'onboarding.custom.stepperVoice': 'ভয়েস', - 'onboarding.custom.stepperOAuth': 'OAuth', - 'onboarding.custom.stepperSearch': 'সার্চ', - 'onboarding.custom.stepperEmbeddings': 'Embeddings', - 'onboarding.custom.stepperMemory': 'মেমোরি', - 'onboarding.custom.stepCounter': 'ধাপ {n} / {total}', - 'onboarding.custom.defaultTitle': 'ডিফল্ট', - 'onboarding.custom.defaultSubtitle': 'OpenHuman আপনার হয়ে পরিচালনা করবে।', - 'onboarding.custom.configureTitle': 'কনফিগার', - 'onboarding.custom.configureSubtitle': 'আমি কী ব্যবহার করব তা বেছে নেব।', - 'onboarding.custom.progressAriaLabel': 'অনবোর্ডিং অগ্রগতি', - 'onboarding.custom.continue': 'চালিয়ে যান', - 'onboarding.custom.back': 'পেছনে', - 'onboarding.custom.finish': 'সেটআপ সম্পন্ন', - 'onboarding.custom.configureLater': - 'অনবোর্ডিং শেষে এটি কনফিগার করতে পারবেন। সম্পন্ন হলে সংশ্লিষ্ট সেটিংস পেজে নিয়ে যাওয়া হবে।', - 'onboarding.custom.openSettings': 'সেটিংসে খুলুন', - 'onboarding.custom.inference.title': 'ইনফারেন্স (টেক্সট)', - 'onboarding.custom.inference.subtitle': - 'কোন ল্যাঙ্গুয়েজ মডেল আপনার প্রশ্নের উত্তর দেবে এবং এজেন্ট চালাবে?', - 'onboarding.custom.inference.defaultDesc': - 'OpenHuman প্রতিটি ওয়ার্কলোড একটি সেন্সিবল ডিফল্ট মডেলে রুট করে। কোনো কী বা সেটআপ নেই।', - 'onboarding.custom.inference.configureDesc': - 'নিজের OpenAI বা Anthropic কী আনুন। আমরা সব টেক্সট-ভিত্তিক কাজে এটি ব্যবহার করি।', - 'onboarding.custom.voice.title': 'ভয়েস', - 'onboarding.custom.voice.subtitle': 'ভয়েস মোডের জন্য স্পিচ-টু-টেক্সট এবং টেক্সট-টু-স্পিচ।', - 'onboarding.custom.voice.defaultDesc': - 'OpenHuman ম্যানেজড STT/TTS সহ আসে যা সরাসরি কাজ করে। কিছু সেটআপ করতে হবে না।', - 'onboarding.custom.voice.configureDesc': - 'নিজের ElevenLabs / OpenAI Whisper / ইত্যাদি ব্যবহার করুন। Settings › Voice-এ কনফিগার করুন।', - 'onboarding.custom.oauth.title': 'সংযোগ (OAuth)', - 'onboarding.custom.oauth.subtitle': - 'Gmail, Slack, Notion এবং OAuth প্রয়োজন এমন অন্যান্য সংযুক্ত সার্ভিস।', - 'onboarding.custom.oauth.defaultDesc': - 'OpenHuman একটি ম্যানেজড Composio ওয়ার্কস্পেস চালায়। পরে প্রতিটি সার্ভিস সংযুক্ত করতে এক ক্লিক।', - 'onboarding.custom.oauth.configureDesc': - 'নিজের Composio অ্যাকাউন্ট / API কী আনুন। Settings › Connections-এ কনফিগার করুন।', - 'onboarding.custom.search.title': 'ওয়েব সার্চ', - 'onboarding.custom.search.subtitle': 'OpenHuman আপনার হয়ে কীভাবে ওয়েব সার্চ করে।', - 'onboarding.custom.search.defaultDesc': - 'OpenHuman ম্যানেজড সার্চ ব্যাকএন্ড ব্যবহার করে। কোনো কী লাগে না।', - 'onboarding.custom.search.configureDesc': - 'নিজের সার্চ প্রোভাইডার কী আনুন (Tavily, Brave ইত্যাদি)। Settings › Tools-এ কনফিগার করুন।', - 'onboarding.custom.embeddings.title': 'Embeddings', - 'onboarding.custom.embeddings.subtitle': - 'How OpenHuman generates vector embeddings for semantic memory search.', - 'onboarding.custom.embeddings.defaultDesc': - 'OpenHuman uses a managed embedding service. No API key needed.', - 'onboarding.custom.embeddings.configureDesc': - 'Bring your own embedding provider (OpenAI, Voyage, Ollama, etc.).', - 'onboarding.custom.memory.title': 'মেমোরি', - 'onboarding.custom.memory.subtitle': - 'OpenHuman কীভাবে আপনার কন্টেক্সট, পছন্দ ও পূর্ববর্তী কথোপকথন মনে রাখে।', - 'onboarding.custom.memory.defaultDesc': - 'OpenHuman স্বয়ংক্রিয়ভাবে মেমোরি স্টোরেজ ও রিট্রিভাল পরিচালনা করে। কিছু সেটআপ করতে হবে না।', - 'onboarding.custom.memory.configureDesc': - 'মেমোরি নিজে পরীক্ষা, এক্সপোর্ট বা মুছুন। Settings › Memory-এ কনফিগার করুন।', - 'accounts.addAccount': 'অ্যাকাউন্ট যোগ করুন', - 'accounts.manageAccounts': 'অ্যাকাউন্ট পরিচালনা', - 'accounts.noAccounts': 'কোনো অ্যাকাউন্ট সংযুক্ত নেই', - 'accounts.connectAccount': 'শুরু করতে একটি অ্যাকাউন্ট সংযুক্ত করুন', - 'accounts.agent': 'এজেন্ট', - 'accounts.respondQueue': 'রেসপন্ড কিউ', - 'accounts.disconnect': 'সংযোগ বিচ্ছিন্ন', - 'accounts.disconnectConfirm': 'আপনি কি এই অ্যাকাউন্ট সংযোগ বিচ্ছিন্ন করতে চান?', - 'accounts.disconnectClearMemory': 'Also delete memory from this source', - 'accounts.disconnectClearMemoryHint': - 'Permanently removes local memory chunks linked to this connection.', - 'accounts.searchAccounts': 'অ্যাকাউন্ট খুঁজুন...', - 'channels.title': 'চ্যানেল', - 'channels.configure': 'চ্যানেল কনফিগার করুন', - 'channels.setup': 'সেটআপ', - 'channels.noChannels': 'কোনো চ্যানেল কনফিগার করা হয়নি', - 'channels.addChannel': 'চ্যানেল যোগ করুন', - 'channels.status.connected': 'সংযুক্ত', - 'channels.status.disconnected': 'সংযোগ বিচ্ছিন্ন', - 'channels.status.error': 'ত্রুটি', - 'channels.status.configuring': 'কনফিগার হচ্ছে', - 'channels.defaultMessaging': 'ডিফল্ট মেসেজিং চ্যানেল', - 'webhooks.title': 'ওয়েবহুক', - 'webhooks.create': 'Webhook তৈরি করুন', - 'webhooks.noWebhooks': 'কোনো webhook কনফিগার করা হয়নি', - 'webhooks.url': 'URL', - 'webhooks.secret': 'সিক্রেট', - 'webhooks.events': 'ইভেন্ট', - 'webhooks.archiveDirectory': 'আর্কাইভ ডিরেক্টরি', - 'webhooks.todayFile': 'আজকের ফাইল', - 'invites.title': 'আমন্ত্রণ', - 'invites.create': 'আমন্ত্রণ তৈরি করুন', - 'invites.noInvites': 'কোনো মুলতুবি আমন্ত্রণ নেই', - 'invites.code': 'আমন্ত্রণ কোড', - 'invites.copyLink': 'লিংক কপি করুন', - 'devOptions.title': 'অ্যাডভান্সড', - 'devOptions.diagnostics': 'ডায়াগনস্টিক্স', - 'devOptions.diagnosticsDesc': 'সিস্টেম স্বাস্থ্য, লগ এবং পারফরম্যান্স মেট্রিক্স', - 'devOptions.toolPolicyDiagnosticsDesc': - 'Tool inventory, policy posture, MCP allowlists, and recent blocks', - 'devOptions.toolPolicyDiagnostics.loading': 'Loading…', - 'devOptions.toolPolicyDiagnostics.unavailable': 'Diagnostics unavailable', - 'devOptions.toolPolicyDiagnostics.posture.title': 'Policy posture', - 'devOptions.toolPolicyDiagnostics.posture.autonomy': 'Autonomy:', - 'devOptions.toolPolicyDiagnostics.posture.workspaceOnly': 'Workspace only:', - 'devOptions.toolPolicyDiagnostics.posture.maxActionsPerHour': 'Max actions/hr:', - 'devOptions.toolPolicyDiagnostics.posture.approvalMediumRisk': 'Approval (medium risk):', - 'devOptions.toolPolicyDiagnostics.posture.blockHighRisk': 'Block high risk:', - 'devOptions.toolPolicyDiagnostics.inventory.title': 'Inventory', - 'devOptions.toolPolicyDiagnostics.inventory.totalTools': 'Total tools', - 'devOptions.toolPolicyDiagnostics.inventory.enabledTools': 'Enabled tools', - 'devOptions.toolPolicyDiagnostics.inventory.mcpStdioTools': 'MCP stdio tools', - 'devOptions.toolPolicyDiagnostics.inventory.jsonRpcTools': 'JSON-RPC tools', - 'devOptions.toolPolicyDiagnostics.mcpAllowlists.title': 'MCP allowlists', - 'devOptions.toolPolicyDiagnostics.mcpAllowlists.summary': - 'Enabled: {enabled} · Servers: {enabledCount}/{totalCount}', - 'devOptions.toolPolicyDiagnostics.mcpAllowlists.unnamed': '', - 'devOptions.toolPolicyDiagnostics.mcpAllowlists.allowDeny': 'allow={allowCount} deny={denyCount}', - 'devOptions.toolPolicyDiagnostics.mcpWriteAudit.title': 'MCP write audit', - 'devOptions.toolPolicyDiagnostics.mcpWriteAudit.summary': - 'Enabled: {enabled} · Recent (24h): {recentRows}', - 'devOptions.toolPolicyDiagnostics.recentBlocked.title': 'Recent blocked calls', - 'devOptions.toolPolicyDiagnostics.recentBlocked.empty': 'No blocked calls recorded.', - 'devOptions.toolPolicyDiagnostics.redactedSurfaces.title': 'Redacted surfaces', - 'devOptions.toolPolicyDiagnostics.redactedSurfaces.summary': - 'Write-capable: {writeCount} · Policy surfaces: {policyCount}', - 'devOptions.debugPanels': 'ডিবাগ প্যানেল', - 'devOptions.debugPanelsDesc': 'ফিচার ফ্ল্যাগ, স্টেট ইন্সপেকশন এবং ডিবাগিং টুলস', - 'devOptions.webhooks': 'ওয়েবহুকগুলি', - 'devOptions.webhooksDesc': 'Webhook ইন্টিগ্রেশন কনফিগার ও পরীক্ষা করুন', - 'devOptions.memoryInspection': 'মেমোরি ইন্সপেকশন', - 'devOptions.memoryInspectionDesc': 'মেমোরি এন্ট্রি ব্রাউজ, কোয়েরি ও পরিচালনা করুন', - 'voice.pushToTalk': 'পুশ টু টক', - 'voice.recording': 'রেকর্ড হচ্ছে...', - 'voice.processing': 'প্রক্রিয়া হচ্ছে...', - 'voice.languageHint': 'ভাষা', - 'misc.rehydrating': 'আপনার ডেটা লোড হচ্ছে...', - 'misc.checkingServices': 'সার্ভিস পরীক্ষা হচ্ছে...', - 'misc.serviceUnavailable': 'সার্ভিস পাওয়া যাচ্ছে না', - 'misc.somethingWentWrong': 'কিছু একটা ভুল হয়েছে', - 'misc.tryAgainLater': 'পরে আবার চেষ্টা করুন।', - 'misc.restartApp': 'অ্যাপ রিস্টার্ট করুন', - 'misc.updateAvailable': 'আপডেট পাওয়া গেছে', - 'misc.updateNow': 'এখনই আপডেট করুন', - 'misc.updateLater': 'পরে', - 'misc.downloading': 'ডাউনলোড হচ্ছে...', - 'misc.installing': 'ইনস্টল হচ্ছে...', - 'misc.beta': - 'OpenHuman এখন আর্লি বেটায় আছে। যেকোনো মতামত বা বাগ রিপোর্ট করুন — প্রতিটি রিপোর্ট আমাদের দ্রুত এগিয়ে যেতে সাহায্য করে।', - 'misc.betaFeedback': 'ফিডব্যাক পাঠান', - 'mnemonic.title': 'রিকভারি ফ্রেজ', - 'mnemonic.warning': 'এই শব্দগুলো ক্রমানুসারে লিখে নিরাপদ স্থানে সংরক্ষণ করুন।', - 'mnemonic.copyWarning': - 'আপনার রিকভারি ফ্রেজ কখনো শেয়ার করবেন না। এই শব্দগুলো দিয়ে যে কেউ আপনার অ্যাকাউন্টে প্রবেশ করতে পারবে।', - 'mnemonic.copied': 'রিকভারি ফ্রেজ ক্লিপবোর্ডে কপি হয়েছে', - 'mnemonic.reveal': 'ফ্রেজ দেখুন', - 'mnemonic.revealPhrase': 'Reveal recovery phrase', - 'mnemonic.hidden': 'রিকভারি ফ্রেজ লুকানো আছে', - 'privacy.title': 'গোপনীয়তা ও নিরাপত্তা', - 'privacy.description': 'বাহ্যিক সার্ভিসে পাঠানো ডেটার স্বচ্ছতা রিপোর্ট।', - 'privacy.empty': 'কোনো বাহ্যিক ডেটা স্থানান্তর শনাক্ত হয়নি।', - 'privacy.whatLeavesComputer': 'আপনার কম্পিউটার থেকে কী বাইরে যায়', - 'privacy.loading': 'গোপনীয়তার বিবরণ লোড হচ্ছে...', - 'privacy.loadError': - 'লাইভ গোপনীয়তা তালিকা লোড করা যায়নি। নিচের অ্যানালিটিক্স নিয়ন্ত্রণ এখনো কাজ করছে।', - 'privacy.noCapabilities': 'বর্তমানে কোনো ক্যাপাবিলিটি ডেটা মুভমেন্ট প্রকাশ করে না।', - 'privacy.sentTo': 'পাঠানো হয়েছে', - 'privacy.leavesDevice': 'ডিভাইস ছেড়ে যায়', - 'privacy.staysLocal': 'লোকালে থাকে', - 'privacy.anonymizedAnalytics': 'অ্যানোনিমাইজড অ্যানালিটিক্স', - 'privacy.shareAnonymizedData': 'অ্যানোনিমাইজড ব্যবহার ডেটা শেয়ার করুন', - 'privacy.shareAnonymizedDataDesc': - 'বেনামী ক্র্যাশ রিপোর্ট ও ব্যবহার অ্যানালিটিক্স শেয়ার করে OpenHuman উন্নত করতে সাহায্য করুন। সব ডেটা সম্পূর্ণ বেনামী — কোনো ব্যক্তিগত তথ্য, বার্তা, ওয়ালেট কী বা সেশন তথ্য কখনো সংগ্রহ করা হয় না।', - 'privacy.meetingFollowUps': 'মিটিং ফলো-আপ', - 'privacy.autoHandoffMeet': 'Google Meet ট্রান্সক্রিপ্ট স্বয়ংক্রিয়ভাবে অর্কেস্ট্রেটরে পাঠান', - 'privacy.autoHandoffMeetDesc': - 'Google Meet কল শেষ হলে, OpenHuman-এর অর্কেস্ট্রেটর ট্রান্সক্রিপ্ট পড়তে এবং বার্তা ড্রাফট করা, ফলো-আপ নির্ধারণ করা বা সংযুক্ত Slack ওয়ার্কস্পেসে সারসংক্ষেপ পোস্ট করার মতো কাজ করতে পারে। ডিফল্টে বন্ধ।', - 'privacy.analyticsDisclaimer': - 'সব অ্যানালিটিক্স ও বাগ রিপোর্ট সম্পূর্ণ বেনামী। সক্রিয় থাকলে, আমরা শুধু ক্র্যাশ তথ্য, ডিভাইসের ধরন এবং ত্রুটির ফাইল লোকেশন সংগ্রহ করি। আমরা কখনো আপনার বার্তা, সেশন ডেটা, ওয়ালেট কী, API কী বা ব্যক্তিগত তথ্য অ্যাক্সেস করি না। যেকোনো সময় এই সেটিং পরিবর্তন করা যাবে।', - 'settings.about.version': 'ভার্সন', - 'settings.about.updateAvailable': 'পাওয়া গেছে', - 'settings.about.softwareUpdates': 'সফটওয়্যার আপডেট', - 'settings.about.lastChecked': 'শেষ পরীক্ষা', - 'settings.about.checking': 'পরীক্ষা হচ্ছে...', - 'settings.about.checkForUpdates': 'আপডেট পরীক্ষা করুন', - 'settings.about.releases': 'রিলিজ', - 'settings.about.releasesDesc': 'GitHub-এ রিলিজ নোট ও আগের বিল্ড দেখুন।', - 'settings.about.openReleases': 'GitHub রিলিজ খুলুন', - 'settings.ai.overview': 'AI সিস্টেম ওভারভিউ', - 'migration.title': 'অন্য সহকারী থেকে আমদানি করুন', - 'migration.description': - 'অন্য একটি লোকাল সহকারী থেকে মেমরি ও নোট এই ওয়ার্কস্পেসে স্থানান্তর করুন। প্রথমে Preview চালিয়ে দেখুন ঠিক কী বদলাবে, তারপর Apply চাপলে ডেটা কপি হবে। আপনার বর্তমান মেমরি আগে ব্যাকআপ নেওয়া হবে।', - 'migration.vendorLabel': 'উৎস', - 'migration.sourceLabel': 'উৎস ওয়ার্কস্পেসের পাথ (ঐচ্ছিক)', - 'migration.sourcePlaceholder': 'অটো-ডিটেক্টের জন্য খালি রাখুন (যেমন ~/.openclaw/workspace)', - 'migration.sourcePlaceholderHermes': 'Leave blank to auto-detect (e.g. ~/.hermes)', - 'migration.sourceHint': - 'খালি রাখলে উৎসের ডিফল্ট লোকেশন ব্যবহার হবে। ওয়ার্কস্পেস সরিয়ে থাকলে স্পষ্ট পাথ দিন।', - 'migration.previewAction': 'প্রিভিউ', - 'migration.previewRunning': 'প্রিভিউ চলছে…', - 'migration.applyAction': 'আমদানি প্রয়োগ করুন', - 'migration.applyRunning': 'আমদানি হচ্ছে…', - 'migration.applyDisclaimer': - 'একই উৎসের সফল Preview হলেই Apply খুলবে। যে কোনো আমদানির আগে বর্তমান মেমরির ব্যাকআপ নেওয়া হয়।', - 'migration.reportTitlePreview': 'প্রিভিউ — এখনো কিছু আমদানি হয়নি', - 'migration.reportTitleApplied': 'আমদানি সম্পন্ন', - 'migration.report.source': 'উৎস ওয়ার্কস্পেস', - 'migration.report.target': 'লক্ষ্য ওয়ার্কস্পেস', - 'migration.report.fromSqlite': 'SQLite (brain.db) থেকে', - 'migration.report.fromMarkdown': 'Markdown থেকে', - 'migration.report.imported': 'আমদানিকৃত', - 'migration.report.skippedUnchanged': 'এড়ানো হয়েছে (অপরিবর্তিত)', - 'migration.report.renamedConflicts': 'দ্বন্দ্বে নাম বদলানো হয়েছে', - 'migration.report.warnings': 'সতর্কতা', - 'migration.report.previewHint': 'এখনো কোনো ডেটা আমদানি হয়নি। কপি করতে Apply চাপুন।', - 'migration.report.appliedHint': - 'আমদানিকৃত এন্ট্রি এখন আপনার মেমরিতে আছে। তুলনা করতে আবার Preview চালান।', - 'migration.confirmImport.singular': - 'বর্তমান ওয়ার্কস্পেসে {count}টি এন্ট্রি আমদানি করবেন?\n\nউৎস: {source}\nলক্ষ্য: {target}\n\nআমদানির আগে বর্তমান মেমরির ব্যাকআপ নেওয়া হবে।', - 'migration.confirmImport.plural': - 'বর্তমান ওয়ার্কস্পেসে {count}টি এন্ট্রি আমদানি করবেন?\n\nউৎস: {source}\nলক্ষ্য: {target}\n\nআমদানির আগে বর্তমান মেমরির ব্যাকআপ নেওয়া হবে।', - // Settings menu: Appearance + Mascot (#2225) — English stubs; native translations welcome - 'settings.appearance': 'চেহারা', - 'settings.appearanceDesc': 'হালকা, অন্ধকার বাছুন বা আপনার সিস্টেম থিমের সাথে মেলে', - 'settings.mascot': 'মাসকট', - 'settings.mascotDesc': 'অ্যাপের মাস্কট রঙ জুড়ে ব্যবহার করুন', - 'channels.authMode.managed_dm': 'OpenHuman দিয়ে লগইন করুন', - 'channels.authMode.oauth': 'OAuth সাইন-ইন করুন', - 'channels.authMode.bot_token': 'আপনার নিজের বট টোকেন ব্যবহার করুন', - 'channels.authMode.api_key': 'আপনার নিজস্ব API কী ব্যবহার করুন', - 'channels.fieldRequired': '{field} প্রয়োজন', - 'channels.mcp.title': '__PH0__ সার্ভার__92731', - 'channels.mcp.description': - 'Browse and manage Model Context Protocol servers that extend the AI with new tools.', - 'skills.integrationsSubtitle': - 'Cloud-based OAuth connections — sign in with your account and Composio brokers the tokens so agents can read and act on your behalf. No API keys to manage.', - 'skills.tabs.composio': 'Composio', - 'skills.tabs.channels': 'চ্যানেল', - 'skills.tabs.mcp': 'MCP সার্ভার', - 'skills.mcpComingSoon.title': 'MCP সার্ভার', - 'skills.mcpComingSoon.description': - 'MCP server management is coming soon. This tab will be the home for discovering, connecting, and monitoring your MCP server integrations.', - 'settings.about.connection': 'সংযোগ', - 'settings.about.connectionMode': 'মোড', - 'settings.about.connectionModeLocal': 'স্থানীয়', - 'settings.about.connectionModeCloud': 'ক্লাউড', - 'settings.about.connectionModeUnset': 'নির্বাচিত হয়নি', - 'settings.about.serverUrl': 'সার্ভার URL', - 'settings.about.serverUrlUnavailable': 'অনুপলব্ধ', - 'settings.about.connectionHelperLocal': - 'Spawned in-process by the Tauri shell on app launch. The port is chosen at startup, so this URL changes between launches.', - 'settings.about.connectionHelperCloud': - 'Connected to a remote core. Change this in BootCheck or the cloud mode picker.', - 'settings.heartbeat.title': 'হার্টবিট এবং লুপস', - 'settings.heartbeat.desc': 'Control background scheduling cadences and inspect the loop map.', - 'settings.ledgerUsage.title': 'ইউসেজ লেজার', - 'settings.ledgerUsage.desc': 'সাম্প্রতিক ক্রেডিট খরচ, বাজেটের গণিত, এবং পটভূমি API পড়া বাজেট।', - 'settings.costDashboard.title': 'Cost dashboard', - 'settings.costDashboard.desc': - '7-day spend and token burn across the swarm, with budget pace and per-model breakdown.', - 'settings.costDashboard.sevenDayCost': '7-day daily cost', - 'settings.costDashboard.sevenDayTokens': '7-day token usage', - 'settings.costDashboard.totalSpend': '7-day total', - 'settings.costDashboard.monthlyPace': 'Monthly pace', - 'settings.costDashboard.budgetLimit': 'Budget limit', - 'settings.costDashboard.utilization': 'Utilisation', - 'settings.costDashboard.modelBreakdown': 'Per-model breakdown', - 'settings.costDashboard.model': 'Model', - 'settings.costDashboard.provider': 'Provider', - 'settings.costDashboard.cost': 'Cost', - 'settings.costDashboard.tokens': 'Tokens', - 'settings.costDashboard.requests': 'Requests', - 'settings.costDashboard.percentOfTotal': '% of total', - 'settings.costDashboard.inputTokens': 'Input', - 'settings.costDashboard.outputTokens': 'Output', - 'settings.costDashboard.budgetNormal': 'On track', - 'settings.costDashboard.budgetWarning': 'Warning', - 'settings.costDashboard.budgetExceeded': 'Over budget', - 'settings.costDashboard.noBudget': 'No limit set', - 'settings.costDashboard.noData': 'No cost recorded yet for the last 7 days.', - 'settings.costDashboard.noModels': 'No model activity in the last 7 days.', - 'settings.costDashboard.loading': 'Loading cost dashboard…', - 'settings.costDashboard.disabledHint': - 'Cost dashboard is disabled in config. Set [cost.dashboard] enabled = true in config.toml to re-enable.', - 'settings.costDashboard.subtitle': - 'Live spend and token burn across the swarm. Bars auto-refresh every few seconds — no page reload needed.', - 'settings.costDashboard.summaryAriaLabel': 'Cost summary metrics', - 'settings.costDashboard.lastSevenDays': 'last 7 days', - 'settings.costDashboard.utilizationOf': 'of', - 'settings.costDashboard.thisMonth': 'this month', - 'settings.costDashboard.monthlyPaceHint': - 'Projected monthly spend at the current daily run-rate (avg × 30).', - 'settings.costDashboard.budgetLimitHint': - 'Monthly budget read from cost.monthly_limit_usd in config.toml.', - 'settings.costDashboard.dailyTarget': 'Daily target', - 'settings.costDashboard.today': 'Today', - 'settings.costDashboard.todayBadge': 'TODAY', - 'settings.costDashboard.unknownProvider': '—', - 'settings.costDashboard.justNow': 'Just now', - 'settings.costDashboard.secondsAgo': '{value}s ago', - 'settings.costDashboard.minutesAgo': '{value}m ago', - 'settings.costDashboard.hoursAgo': '{value}h ago', - 'settings.costDashboard.daysAgo': '{value}d ago', - 'settings.costDashboard.updated': 'Updated', - 'settings.costDashboard.refresh': 'Refresh', - 'settings.costDashboard.utcNote': 'Days bucketed in UTC', - 'settings.costDashboard.stackedNote': 'Input + output stacked', - 'settings.costDashboard.modelBreakdownHint': 'Aggregated across the last 7 days.', - 'settings.costDashboard.noDataHint': - 'Send an agent message — token usage from the next provider call will populate the chart within ~10 seconds.', - 'settings.search.title': 'সার্চ ইঞ্জিন', - 'settings.search.menuDesc': - 'Default to OpenHuman-managed search or wire up your own provider with an API key.', - 'settings.search.description': - 'Pick the search engine the agent uses. Managed uses OpenHuman’s backend (no setup). Parallel and Brave run direct from your machine using your API key.', - 'settings.search.engineAria': 'সার্চ ইঞ্জিন', - 'settings.search.engineManagedLabel': 'OpenHuman পরিচালিত', - 'settings.search.engineManagedDesc': - 'Default. Routed through the OpenHuman backend — no API key required.', - 'settings.search.engineParallelLabel': 'Parallel', - 'settings.search.engineParallelDesc': - 'Direct Parallel API: search, extract, chat, research, enrich, dataset tools.', - 'settings.search.engineBraveLabel': 'Brave অনুসন্ধান', - 'settings.search.engineBraveDesc': 'Direct Brave Search API: web, news, image, and video tools.', - 'settings.search.engineQueritLabel': 'Querit', - 'settings.search.engineQueritDesc': - 'Direct Querit API: web search with site, time range, country, and language filters.', - 'settings.search.statusConfigured': 'কনফিগার করা', - 'settings.search.statusNeedsKey': 'API কী প্রয়োজন', - 'settings.search.fallbackToManaged': - 'No key configured — search will fall back to Managed until a key is saved.', - 'settings.search.getApiKey': 'API কী পান', - 'settings.search.save': 'সংরক্ষণ করুন', - 'settings.search.clear': 'সাফ', - 'settings.search.show': 'দেখান', - 'settings.search.hide': 'লুকান', - 'settings.search.statusSaving': 'সংরক্ষণ করা হচ্ছে...', - 'settings.search.statusSaved': 'সংরক্ষিত।', - 'settings.search.statusError': 'ব্যর্থ হয়েছে', - 'settings.search.parallelKeyLabel': 'Parallel API কী', - 'settings.search.braveKeyLabel': 'Brave অনুসন্ধান API কী', - 'settings.search.queritKeyLabel': 'Querit API key', - 'settings.search.placeholderStored': '(•••stor)', - 'settings.search.placeholderParallel': 'pk_...', - 'settings.search.placeholderBrave': 'BSA...', - 'settings.search.placeholderQuerit': 'Querit API key', - 'settings.embeddings.title': 'এমবেডিংস', - 'settings.embeddings.description': - 'কোন এমবেডিং প্রদানকারী মেমরিকে সিমান্টিক সার্চের জন্য ভেক্টরে রূপান্তর করে তা চয়ন করুন। প্রদানকারী, মডেল বা মাত্রা পরিবর্তন করলে সংরক্ষিত ভেক্টর অবৈধ হয়ে যায় এবং সম্পূর্ণ মেমরি রিসেট প্রয়োজন।', - 'settings.embeddings.providerAria': 'এমবেডিং প্রদানকারী', - 'settings.embeddings.statusConfigured': 'কনফিগার করা হয়েছে', - 'settings.embeddings.statusNeedsKey': 'API কী প্রয়োজন', - 'settings.embeddings.apiKeyLabel': '{provider} API কী', - 'settings.embeddings.placeholderStored': '•••••••• (সঞ্চিত)', - 'settings.embeddings.placeholderKey': 'আপনার API কী পেস্ট করুন…', - 'settings.embeddings.keyStoredEncrypted': 'আপনার API কী এই ডিভাইসে এনক্রিপ্ট করে সংরক্ষিত আছে।', - 'settings.embeddings.show': 'দেখান', - 'settings.embeddings.hide': 'লুকান', - 'settings.embeddings.save': 'সংরক্ষণ', - 'settings.embeddings.clear': 'মুছুন', - 'settings.embeddings.model': 'মডেল', - 'settings.embeddings.dimensions': 'মাত্রা', - 'settings.embeddings.customEndpoint': 'কাস্টম এন্ডপয়েন্ট', - 'settings.embeddings.customModelPlaceholder': 'মডেলের নাম', - 'settings.embeddings.customDimsPlaceholder': 'মাত্রা', - 'settings.embeddings.applyCustom': 'প্রয়োগ', - 'settings.embeddings.testConnection': 'সংযোগ পরীক্ষা', - 'settings.embeddings.testing': 'পরীক্ষা হচ্ছে…', - 'settings.embeddings.testSuccess': 'সংযুক্ত — {dims} মাত্রা', - 'settings.embeddings.testFailed': 'ব্যর্থ: {error}', - 'settings.embeddings.saving': 'সংরক্ষণ হচ্ছে…', - 'settings.embeddings.saved': 'সংরক্ষিত।', - 'settings.embeddings.errorPrefix': 'ব্যর্থ', - 'settings.embeddings.wipeTitle': 'মেমরি ভেক্টর রিসেট করবেন?', - 'settings.embeddings.wipeBody': - 'এমবেডিং প্রদানকারী, মডেল বা মাত্রা পরিবর্তন করলে সমস্ত সংরক্ষিত মেমরি ভেক্টর মুছে যাবে। পুনরুদ্ধার কাজ করার আগে মেমরি পুনর্নির্মাণ করতে হবে। এটি পূর্বাবস্থায় ফেরানো যাবে না।', - 'settings.embeddings.cancel': 'বাতিল', - 'settings.embeddings.confirmWipe': 'মুছুন এবং প্রয়োগ করুন', - 'settings.embeddings.setupTitle': '{provider} সেটআপ', - 'settings.embeddings.saveAndSwitch': 'সংরক্ষণ এবং স্যুইচ', - 'settings.embeddings.optional': 'ঐচ্ছিক', - 'settings.embeddings.vectorSearchDisabled': - 'Vector search is disabled. Memory recall will use keyword matching and recency only — no semantic ranking.', - 'settings.embeddings.clearKey': 'API কী মুছুন', - 'mcp.alphaBadge': 'আলফা', - 'mcp.alphaBannerText': - 'MCP server support is in early alpha. The Smithery registry, install flow, and tool wiring may misbehave or change shape between releases.', - 'mcp.toolList.noTools': 'কোনো টুল উপলব্ধ নেই৷', - 'mcp.setup.secretDialog.title': 'MCP সেটআপ — এন্টার সিক্রেট', - 'mcp.setup.secretDialog.bodyPrefix': 'MCP সেটআপ এজেন্ট প্রয়োজন', - 'mcp.setup.secretDialog.bodySuffix': - '. Your value is sent directly to the core process and never enters the AI conversation.', - 'mcp.setup.secretDialog.inputLabel': 'মান', - 'mcp.setup.secretDialog.inputPlaceholder': 'এখানে আটকে দিন', - 'mcp.setup.secretDialog.show': 'দেখান', - 'mcp.setup.secretDialog.hide': 'লুকান', - 'mcp.setup.secretDialog.submit': 'জমা দিন', - 'mcp.setup.secretDialog.cancel': 'বাতিল', - 'mcp.setup.secretDialog.submitting': 'জমা দেওয়া হচ্ছে', - 'mcp.setup.secretDialog.errorPrefix': '18_18 জমা দিতে ব্যর্থ হয়েছে:', - 'mcp.setup.secretDialog.privacyNote': - 'Stored encrypted in the local MCP secrets table. Never logged or sent to a model.', - 'devices.betaBadge': 'বিটা', - 'devices.betaText': - 'This feature is currently in beta. Pair iOS phones with this OpenHuman to use them as a remote client.', - 'autonomy.title': 'এজেন্ট স্বায়ত্তশাসন', - 'autonomy.maxActionsLabel': 'প্রতি ঘণ্টায় সর্বাধিক অ্যাকশন', - 'autonomy.maxActionsHelp': - 'Maximum tool actions an agent can run per rolling hour. New value applies to your next chat. Cron jobs and channel listeners keep their current limit until you restart OpenHuman.', - 'autonomy.statusSaving': 'সংরক্ষণ করা হচ্ছে...', - 'autonomy.statusSaved': 'সংরক্ষিত।', - 'autonomy.statusFailed': 'ব্যর্থ হয়েছে', - 'autonomy.unlimitedNote': 'সীমাহীন — হার সীমিত করা অক্ষম।', - 'autonomy.invalidIntegerMsg': - 'Must be a positive integer (use the Unlimited preset for no limit).', - 'autonomy.presetUnlimited': 'আনলিমিটেড (ডিফল্ট)', - 'triggers.toggleFailed': '{trigger} এর জন্য {action} ব্যর্থ হয়েছে: {message}', - 'skills.composio.noApiKeyTitle': 'না Composio API কী কনফিগার করা হয়েছে', - 'skills.composio.noApiKeyDescription': - 'Local mode uses your own Composio API key. Open Settings → Advanced → Composio to add one before connecting integrations here.', - 'skills.composio.noApiKeyCta': 'সেটিংসে খুলুন', - 'rewards.localUnavailable': - 'Local login does not earn rewards, coupons, or referral credit. To earn rewards, log out and continue by signing in with an OpenHuman account.', - 'rewards.localUnavailableCta': 'অ্যাকাউন্ট সেটিংস খুলুন', - 'channels.localManagedUnavailable': 'Managed channels are not available for local users.', - 'settings.search.localManagedUnavailable': - 'OpenHuman Managed search is not available for local users. Add your own Parallel, Brave, or Querit API key to enable web search.', - 'devices.comingSoonDescription': - 'Device pairing is coming soon. This page will be the home for pairing iPhones and managing connected devices.', - 'common.breadcrumb': 'ব্রেডক্রাম্ব নেভিগেশন', - 'settings.betaBuild': 'বেটা বিল্ড - v{version}', - 'migration.vendor.openclaw': 'OpenClaw', - 'migration.vendor.hermes': 'Hermes Agent', - 'onboarding.apiKeys.openaiOauthHint': - 'ChatGPT Plus/Pro (সাবস্ক্রিপশন) বা OpenAI API কী ব্যবহার করুন — দুটিই প্রয়োজন নয়।', - 'onboarding.apiKeys.openaiOauthOpening': 'সাইন-ইন খোলা হচ্ছে…', - 'onboarding.apiKeys.finishSignIn': 'ChatGPT সাইন-ইন সম্পূর্ণ করুন', - 'onboarding.apiKeys.orApiKey': 'অথবা API কী', - 'calls.title': 'কল', - 'calls.comingSoonBody': 'AI-সহায়িত কল শিগগিরই আসছে। সঙ্গে থাকুন।', - 'rewards.referralSection.retry': 'আবার চেষ্টা করুন', - 'devOptions.sentryDisabled': '(কোনো আইডি নেই — এই বিল্ডে Sentry নিষ্ক্রিয়)', - 'home.usageExhaustedTitle': 'আপনার ব্যবহার শেষ হয়ে গেছে', - 'home.usageExhaustedBody': - 'আপাতত আপনার অন্তর্ভুক্ত ব্যবহার শেষ। আরও ধারাবাহিক সক্ষমতা আনলক করতে একটি সাবস্ক্রিপশন শুরু করুন।', - 'home.usageExhaustedCta': 'সাবস্ক্রিপশন শুরু করুন', - 'home.routinesCard': 'Your Routines', - 'home.routinesActive': '{count} active', - 'routines.title': 'Your Routines', - 'routines.subtitle': 'Things your assistant does automatically', - 'routines.loading': 'Loading routines…', - 'routines.empty': 'No routines yet', - 'routines.emptyHint': - 'Your assistant can run tasks on a schedule — like morning briefings or daily summaries.', - 'routines.refresh': 'Refresh', - 'routines.nextRun': 'Next run', - 'routines.lastRunSuccess': 'Last run succeeded', - 'routines.lastRunFailed': 'Last run failed', - 'routines.notRunYet': 'Not run yet', - 'routines.runNow': 'Run Now', - 'routines.running': 'Running…', - 'routines.viewHistory': 'View history', - 'routines.loadingHistory': 'Loading…', - 'routines.noHistory': 'No run history yet.', - 'routines.statusSuccess': 'Success', - 'routines.statusError': 'Error', - 'routines.showOutput': 'Show output', - 'routines.hideOutput': 'Hide output', - 'routines.toggleEnabled': 'Enable or disable this routine', - 'routines.typeAgent': 'Agent', - 'routines.typeCommand': 'Command', - 'nav.routines': 'Routines', - 'common.name': 'নাম', - 'settings.ai.disconnectProvider': 'সংযোগ বিচ্ছিন্ন করুন {label}', - 'settings.ai.connectProviderLabel': 'সংযোগ {label}', - 'settings.ai.defaultLocalEndpoint': 'http://localhost:11434/v1', - 'settings.ai.endpointUrlLabel': 'শেষবিন্দু URL', - 'settings.ai.localRuntimeHelper': - 'Where {label} is reachable. Default is localhost; point this at a remote host (for example, http://10.0.0.4:11434/v1) to use a shared instance.', - 'settings.ai.endpointUrlRequired': 'এন্ডপয়েন্ট URL প্রয়োজন।', - 'settings.ai.endpointProtocolRequired': 'Endpoint must start with http:// or https://.', - 'settings.ai.connectProviderDialog': 'সংযোগ করুন {label}', - 'settings.ai.or': 'অথবা', - 'settings.ai.openRouterOauthDescription': - 'Sign in with OpenRouter and import a user-controlled API key using PKCE.', - 'settings.ai.connecting': 'সংযোগ করা হচ্ছে...', - 'settings.ai.backgroundLoops': 'ব্যাকগ্রাউন্ড লুপস', - 'settings.ai.backgroundLoopsDesc': - 'See what runs without a chat message, pause heartbeat work, and inspect recent credit ledger rows.', - 'settings.ai.heartbeatControls': 'হার্টবিট নিয়ন্ত্রণ', - 'settings.ai.heartbeatControlsDesc': - 'Defaults off. Enabling starts the loop; disabling aborts the running task.', - 'settings.ai.heartbeatLoop': 'হার্টবিট লুপ', - 'settings.ai.heartbeatLoopDesc': - 'Master scheduler for planner + optional subconscious inference.', - 'settings.ai.subconsciousInference': 'অবচেতন অনুমান', - 'settings.ai.subconsciousInferenceDesc': - 'Runs model-backed task/reflection evaluation on heartbeat ticks.', - 'settings.ai.calendarMeetingChecks': 'ক্যালেন্ডার মিটিং চেক', - 'settings.ai.calendarMeetingChecksDesc': - 'Calls calendar event list for active Google Calendar connections.', - 'settings.ai.calendarCap': 'ক্যালেন্ডার ক্যাপ', - 'settings.ai.connectionsPerTick': '{count} conn/tick', - 'settings.ai.meetingLookahead': 'মিটিং এর আগে', - 'settings.ai.minutesShort': '{count} মিনিট', - 'settings.ai.reminderLookahead': '__PH0__ Re__2 মিনিট] লুকআহেড', - 'settings.ai.cronReminderChecks': 'ক্রোন রিমাইন্ডার চেক করে', - 'settings.ai.cronReminderChecksDesc': 'Scans enabled cron jobs for reminder-like upcoming items.', - 'settings.ai.relevantNotificationChecks': 'প্রাসঙ্গিক বিজ্ঞপ্তি চেক', - 'settings.ai.relevantNotificationChecksDesc': - 'Promotes urgent local notifications into proactive alerts.', - 'settings.ai.externalDelivery': 'বাহ্যিক ডেলিভারি', - 'settings.ai.externalDeliveryDesc': - 'Lets heartbeat alerts send proactive messages to external channels.', - 'settings.ai.interval': 'ব্যবধান', - 'settings.ai.running': 'চলছে...', - 'settings.ai.plannerTickNow': 'প্ল্যানার এখন টিক দিন', - 'settings.ai.loadingHeartbeatControls': 'হার্টবিট নিয়ন্ত্রণ লোড হচ্ছে...', - 'settings.ai.heartbeatControlsUnavailable': 'হার্টবিট নিয়ন্ত্রণ অনুপলব্ধ৷', - 'settings.ai.loopMap': 'লুপ ম্যাপ', - 'settings.ai.on': 'উপর', - 'settings.ai.off': 'বন্ধ', - 'settings.ai.recentUsageLedger': 'সাম্প্রতিক ব্যবহার লেজার', - 'settings.ai.recentUsageLedgerDesc': - 'Backend rows expose action/time today; source tags need backend support.', - 'settings.ai.openhumanDefault': 'OpenHuman (ডিফল্ট)', - 'settings.ai.localModelResolved': 'Ollama · {model}', - 'settings.ai.customRoutingForWorkload': '{label} এর জন্য কাস্টম রাউটিং', - 'settings.ai.loadingModels': 'মডেল লোড হচ্ছে...', - 'settings.ai.enterModelIdManually': 'অথবা ম্যানুয়ালি মডেল লিখুন', - 'settings.ai.modelIdPlaceholderForProvider': '{slug} মডেল আইডি', - 'settings.ai.modelIdPlaceholder': 'model-id', - 'settings.ai.selectModel': 'একটি মডেল নির্বাচন করুন...', - 'settings.ai.temperatureOverride': 'তাপমাত্রা ওভাররাইড', - 'settings.ai.temperatureOverrideSlider': 'তাপমাত্রা ওভাররাইড (স্লাইডার)', - 'settings.ai.temperatureOverrideValue': 'তাপমাত্রা ওভাররাইড (মান)', - 'settings.ai.temperatureOverrideDesc': - 'Lower = more deterministic. Leave unchecked to use the provider default.', - 'settings.ai.testFailed': 'পরীক্ষা ব্যর্থ হয়েছে', - 'settings.ai.testingModel': 'পরীক্ষার মডেল...', - 'settings.ai.modelResponse': 'মডেল প্রতিক্রিয়া', - 'settings.ai.providerWithValue': 'প্রদানকারী: {value}', - 'settings.ai.noneDash': '—', - 'settings.ai.promptHelloWorld': 'প্রম্পট: হ্যালো ওয়ার্ল্ড', - 'settings.ai.startedAt': 'শুরু হয়েছে: {value}', - 'settings.ai.waitingForModelResponse': 'মডেল থেকে প্রতিক্রিয়ার জন্য অপেক্ষা করুন...', - 'settings.ai.response': 'প্রতিক্রিয়া', - 'settings.ai.testing': 'পরীক্ষা করা হচ্ছে...', - 'settings.ai.test': 'পরীক্ষা', - 'settings.ai.slugMissingError': 'একটি স্লাগ তৈরি করতে একটি প্রদানকারীর নাম লিখুন৷', - 'settings.ai.slugInUseError': 'সেই প্রদানকারীর নাম ইতিমধ্যেই ব্যবহার করা হচ্ছে৷', - 'settings.ai.slugReservedError': 'একটি ভিন্ন প্রদানকারীর নাম বেছে নিন।', - 'settings.ai.providerNamePlaceholder': 'আমার প্রদানকারী', - 'settings.ai.slugLabel': 'স্লাগ:', - 'settings.ai.openAiUrlLabel': 'OpenAI URL', - 'settings.ai.openAiUrlPlaceholder': 'https://api.openai.com/v1', - 'settings.ai.keepExistingKeyPlaceholder': 'বিদ্যমান কী রাখার জন্য ফাঁকা ছেড়ে দিন', - 'settings.ai.reindexingMemory': 'মেমরি পুনঃসূচীকরণ করা হচ্ছে', - 'settings.ai.reindexingMemoryMessage': - 'Embeddings are being reprocessed. {pending} memory item(s) are being re-embedded under the current model — semantic recall is reduced until this finishes. Keyword search keeps working, and re-embedding continues in the background if you close this.', - 'settings.ai.signInWithOpenRouter': 'Sign in with OpenRouter', - 'settings.ai.weekBudget': '__BR0__ দিয়ে সাইন ইন করুন', - 'settings.ai.cycleRemaining': 'সপ্তাহের বাজেট', - 'settings.ai.cycleTotalSpend': 'বাকি সাইকেল', - 'settings.ai.avgSpendRow': 'সাইকেলের মোট খরচ [[I18N_SEP_92731] সারির মোট খরচ [[I18N_SEP_92731]', - 'settings.ai.backgroundApiReads': 'Bg API পড়েছে', - 'settings.ai.backgroundWakeups': 'Bg wakeups', - 'settings.ai.budgetMath': 'বাজেটের গণিত', - 'settings.ai.rowsLeft': 'সারি বাকি', - 'settings.ai.rowsPerFullWeekBudget': 'পূর্ণ সপ্তাহের বাজেট প্রতি সারি', - 'settings.ai.sampleBurnRate': 'নমুনা পোড়া হার', - 'settings.ai.projectedEmpty': 'খালি অনুমান করা হয়েছে', - 'settings.ai.apiReadsPerDollarRemaining': 'API রিড প্রতি $ অবশিষ্ট', - 'settings.ai.loopCallBudget': 'লুপ কল বাজেট', - 'settings.ai.heartbeatTicks': 'হার্টবিট টিক', - 'settings.ai.calendarPlannerCalls': 'ক্যালেন্ডার পরিকল্পনাকারী কল', - 'settings.ai.calendarFanoutCap': 'ক্যালেন্ডার ফ্যানআউট ক্যাপ', - 'settings.ai.subconsciousModelCalls': 'অবচেতন মডেল কল', - 'settings.ai.composioSyncScans': 'Composio সিঙ্ক স্ক্যান', - 'settings.ai.totalBackgroundApiReadBudget': 'মোট bg API পঠিত বাজেট', - 'settings.ai.memoryWorkerPolls': 'মেমরি কর্মী পোল', - 'settings.ai.defaultProviderName': 'OpenHuman', - 'settings.ai.routing.managed': 'পরিচালিত', - 'settings.ai.routing.managedDesc': - 'OpenHuman will run all inference in the cloud, choose the best model for the task, optimize for cost, and keep the safest routing defaults.', - 'settings.ai.routing.managedMsg': - 'OpenHuman will handle all inference for every workload and automatically choose the best route for cost, quality, and security.', - 'settings.ai.routing.useYourOwn': 'আপনার নিজের মডেলগুলি ব্যবহার করুন', - 'settings.ai.routing.useYourOwnDesc': - 'Choose one provider + model and route every workload through it. This is simple, but it can be inefficient because lightweight and heavyweight inference all share the same route.', - 'settings.ai.routing.advanced': 'উন্নত', - 'settings.ai.routing.advancedDesc': - 'Pick different models for different tasks. This is the best option for tight cost optimization and the most control.', - 'settings.ai.routing.customDesc': - 'Fine-grained routing gives you the best cost optimization and the most control. Use the rows below to decide which workloads stay Managed, which use your shared default, and which pin to a specific model.', - 'settings.ai.routing.chatAndConversations': 'চ্যাট এবং কথোপকথন', - 'settings.ai.routing.chatDesc': - 'Models used during direct user interaction, replies, reasoning, agent loops, and coding help.', - 'settings.ai.routing.backgroundTasks': 'ব্যাকগ্রাউন্ড টাস্ক', - 'settings.ai.routing.bgTasksDesc': - 'Models used outside the main conversation flow for summarization, heartbeat, learning, and subconscious evaluation.', - 'settings.ai.routing.addCustomProvider': 'কাস্টম প্রদানকারী যোগ করুন', - 'settings.ai.globalModel.title': 'সবকিছুর জন্য একটি মডেল চয়ন করুন', - 'settings.ai.globalModel.desc': - 'This routes all inference through one model. It is simpler, but it can be inefficient for cost and quality because lightweight and heavy tasks will all use the same route.', - 'settings.ai.globalModel.noProviders': - 'Add or connect a provider first. Then you can route every workload through one model here.', - 'settings.ai.globalModel.provider': 'প্রদানকারী', - 'settings.ai.globalModel.model': 'মডেল', - 'settings.ai.globalModel.loadingModels': 'মডেলগুলি লোড করা হচ্ছে...', - 'settings.ai.globalModel.enterModelId': 'মডেল আইডি লিখুন', - 'settings.ai.globalModel.appliesToAll': - 'Applies the same provider + model to chat, reasoning, coding, memory, heartbeat, learning, and subconscious. Embeddings are configured separately. Changes save when you click save.', - 'settings.ai.globalModel.saving': 'Saving…', - 'settings.ai.globalModel.saved': 'সংরক্ষণ করা হচ্ছে...', - 'settings.ai.workload.noModel': 'সংরক্ষণ করা হয়েছে', - 'settings.ai.workload.changeModel': 'কোনো মডেল নির্বাচিত হয়নি', - 'settings.ai.workload.chooseModel': 'মডেল পরিবর্তন করুন [[I18N_SEP_92731] মডেল চয়ন করুন', - 'settings.ai.provider.ollama': 'Ollama', - 'kbd.ariaLabel': 'কীবোর্ড শর্টকাট: {shortcut}', - 'chat.modelPlaceholder': 'gpt-4o', - 'iosPair.title': 'আপনার ডেস্কটপের সাথে পেয়ার করুন', - 'iosPair.instructions': - 'Open OpenHuman on your desktop, go to Settings > Devices, and tap "Pair phone" to show the QR code.', - 'iosPair.scanQrCode': 'স্ক্যান QR code', - 'iosPair.scannerOpening': 'স্ক্যানার খোলা হচ্ছে...', - 'iosPair.connecting': 'ডেস্কটপের সাথে সংযুক্ত হচ্ছে...', - 'iosPair.connectedLoading': 'সংযুক্ত! লোড হচ্ছে...', - 'iosPair.expired': 'QR code মেয়াদ শেষ হয়েছে। কোডটি পুনরায় তৈরি করতে ডেস্কটপকে বলুন।', - 'iosPair.desktopLabel': 'ডেস্কটপ', - 'iosPair.retryScan': 'পুনরায় স্ক্যান করার চেষ্টা করুন', - 'iosPair.step.openDesktop': 'ডেস্কটপে OpenHuman খুলুন', - 'iosPair.step.openSettings': 'সেটিংস > ডিভাইসগুলিতে যান', - 'iosPair.step.showQr': 'QR', - 'iosPair.error.camera': 'Camera scan failed. Check camera permissions and try again.', - 'iosPair.error.invalidQr': - 'Invalid QR code. Make sure you are scanning an OpenHuman pairing code.', - 'iosPair.error.unreachableDesktop': - 'Could not reach the desktop. Make sure both devices are online and try again.', - 'iosPair.error.connectionFailed': - 'Connection failed. Make sure the desktop app is running and try again.', - 'iosMascot.defaultPairedLabel': 'ডেস্কটপ', - 'iosMascot.connectedTo': '[[I18N_SEP_92731]] এর সাথে সংযুক্ত', - 'iosMascot.disconnect': 'সংযোগ বিচ্ছিন্ন করুন', - 'iosMascot.pushToTalk': 'কথা বলার জন্য চাপ দিন', - 'iosMascot.thinking': 'থিং...', - 'iosMascot.typeMessage': 'একটি বার্তা টাইপ করুন...', - 'iosMascot.sendMessage': 'বার্তা পাঠান', - 'iosMascot.error.generic': 'কিছু ভুল হয়েছে৷ আবার চেষ্টা করুন.', - 'iosMascot.error.sendFailed': 'পাঠাতে ব্যর্থ হয়েছে৷ আপনার সংযোগ পরীক্ষা করুন.', - 'settings.companion.title': 'ডেস্কটপ সঙ্গী', - 'settings.companion.session': 'সেশন', - 'settings.companion.activeLabel': 'সক্রিয়', - 'settings.companion.inactiveStatus': 'নিষ্ক্রিয়', - 'settings.companion.stopping': 'টপিং...', - 'settings.companion.stopSession': 'স্টপ সেশন', - 'settings.companion.starting': 'শুরু হচ্ছে...', - 'settings.companion.startSession': 'শুরু হচ্ছে সেশন', - 'settings.companion.sessionId': 'সেশন আইডি', - 'settings.companion.turns': '92 টার্ন', - 'settings.companion.remaining': 'অবশিষ্ট', - 'settings.companion.configuration': 'কনফিগারেশন', - 'settings.companion.hotkey': 'হটকি', - 'settings.companion.activationMode': 'সক্রিয়করণ মোড', - 'settings.companion.sessionTtl': 'সেশন TTL', - 'settings.companion.screenCapture': 'স্ক্রিন ক্যাপচার', - 'settings.companion.appContext': 'অ্যাপ প্রসঙ্গ', - 'settings.composio.title': 'Composio', - 'settings.composio.apiKeyExamplePlaceholder': 'ck_live_xxxxxxxxxxxxxxxx', - 'composio.integrationSlugsHelp': 'কমা-বিচ্ছিন্ন ইন্টিগ্রেশন স্লাগ, যেমন', - 'composio.integrationSlugsExample': 'gmail, slack', - 'composio.integrationSlugsCaseInsensitive': 'কেস-সংবেদনশীল।', - 'composio.integrationSlugsPlaceholder': 'gmail, slack, ...', - 'team.members': 'সদস্যরা', - 'team.membersDesc': 'দলের সদস্যদের এবং ভূমিকাগুলি পরিচালনা করুন', - 'team.invites': 'আমন্ত্রণগুলি', - 'team.invitesDesc': 'আমন্ত্রণ কোডগুলি তৈরি এবং পরিচালনা করুন', - 'team.settings': 'টিম সেটিংস', - 'team.settingsDesc': 'Edit team name and settings', - 'team.editSettings': 'দলের নাম লিখুন', - 'team.enterName': 'সংরক্ষণ করা হচ্ছে...', - 'team.saving': 'পরিবর্তনগুলি সংরক্ষণ করুন', - 'team.saveChanges': 'টিম মুছুন', - 'team.delete': 'টিম মুছুন', - 'team.deleteDesc': 'টিম মুছুন', - 'team.deleting': 'মুছে ফেলা হচ্ছে...', - 'team.failedToUpdate': 'টিম আপডেট করতে ব্যর্থ হয়েছে', - 'team.failedToDelete': 'দল', - 'team.manageTitle': 'ম্যানেজ করতে ব্যর্থ হয়েছে {name}', - 'team.planCreated': '{plan} পরিকল্পনা • তৈরি করা হয়েছে {date}', - 'team.confirmDelete': 'আপনি কি নিশ্চিত আপনি {name} মুছতে চান?', - 'team.deleteWarning': 'This action cannot be undone. All team data will be permanently removed.', - 'welcome.clearingAppData': 'অ্যাপ ডেটা সাফ করা হচ্ছে...', - 'welcome.clearAppDataAndRestart': 'অ্যাপ ডেটা সাফ করুন এবং পুনরায় চালু করুন', - 'welcome.clearAppDataWarning': - 'This wipes locally stored secrets and accounts on this device. Your cloud account is unaffected - you can sign in again right after.', - 'welcome.resetErrorFallback': - 'Could not clear app data. Please quit and reopen OpenHuman, then try again.', - 'welcome.signingIn': 'আপনাকে সাইন ইন করা হচ্ছে...', - 'welcome.termsIntro': 'চালিয়ে যাওয়ার মাধ্যমে, আপনি', - 'welcome.termsOfUse': 'শর্তাবলীতে সম্মত হন', - 'welcome.termsJoiner': 'এবং', - 'welcome.privacyPolicy': 'গোপনীয়তা নীতি', - 'welcome.termsOutro': '.', - 'chat.addReaction': 'প্রতিক্রিয়া যোগ করুন', - 'chat.agentProfile.create': 'এজেন্ট প্রোফাইল তৈরি করুন', - 'chat.agentProfile.createFailed': 'এজেন্ট প্রোফাইল তৈরি করা যায়নি।', - 'chat.agentProfile.customDescription': 'কাস্টম এজেন্ট প্রোফাইল', - 'chat.agentProfile.defaultAgentLabel': 'অর্কেস্ট্রেটর', - 'chat.agentProfile.exists': 'এজেন্ট প্রোফাইল "{name}" ইতিমধ্যেই বিদ্যমান৷', - 'chat.agentProfile.label': 'এজেন্ট প্রোফাইল', - 'chat.agentProfile.namePlaceholder': 'প্রোফাইল নাম', - 'chat.agentProfile.promptStylePlaceholder': 'প্রম্পট স্টাইল', - 'chat.agentProfile.allowedToolsPlaceholder': 'অনুমোদিত টুল', - 'chat.backToThread': '{title} এ ফিরে যান', - 'chat.parentThread': 'মূল থ্রেড', - 'chat.removeReaction': '{emoji}', - 'invites.generate': 'সরান', - 'invites.generating': 'আমন্ত্রণ তৈরি করুন', - 'invites.refreshing': 'জেনারেট করা হচ্ছে...', - 'invites.loading': '[N_18_8] রিফ্রেশ করা হচ্ছে... আমন্ত্রণগুলি লোড হচ্ছে...', - 'invites.copyCodeAria': 'আমন্ত্রণ কোড অনুলিপি করুন', - 'invites.revokeAria': 'আমন্ত্রণ প্রত্যাহার করুন', - 'invites.usedUp': 'ব্যবহৃত হয়েছে', - 'invites.uses': 'ব্যবহারগুলি: _____PH', - 'invites.expiresOn': 'মেয়াদ শেষ হবে {date}', - 'invites.empty': 'এখনো কোনো আমন্ত্রণ নেই', - 'invites.emptyHint': 'অন্যদের সাথে শেয়ার করার জন্য একটি আমন্ত্রণ কোড তৈরি করুন', - 'invites.revokeTitle': 'আমন্ত্রণ কোড প্রত্যাহার করুন', - 'invites.revokePromptPrefix': 'আপনি কি নিশ্চিত যে আপনি আমন্ত্রণ কোড প্রত্যাহার করতে চান', - 'invites.revokeWarning': - 'This invite code will no longer be valid and cannot be used to join the team.', - 'invites.revoking': 'প্রত্যাহার করা হচ্ছে...', - 'invites.revokeAction': 'আমন্ত্রণ প্রত্যাহার করুন', - 'invites.failedGenerate': 'আমন্ত্রণ তৈরি করতে ব্যর্থ হয়েছে', - 'invites.failedRevoke': 'আমন্ত্রণ প্রত্যাহার করতে ব্যর্থ হয়েছে', - 'team.refreshingMembers': 'সদস্যদের রিফ্রেশ করা হচ্ছে...', - 'team.loadingMembers': 'সদস্য লোড হচ্ছে...', - 'team.memberCount': 'PH__18N_SEP_92731 সদস্য', - 'team.memberCountPlural': '{count} সদস্য', - 'team.you': '(আপনি)', - 'team.removeAria': 'সরান {name}', - 'team.noMembers': 'কোনো সদস্য পাওয়া যায়নি', - 'team.removeTitle': 'দলের সদস্যকে সরান', - 'team.removePromptPrefix': 'আপনি কি টিম থেকে', - 'team.removePromptSuffix': 'কে সরানোর বিষয়ে নিশ্চিত?', - 'team.removeWarning': 'তারা টিম এবং সমস্ত টিম রিসোর্সে অ্যাক্সেস হারাবে।', - 'team.removing': 'সরানো হচ্ছে...', - 'team.removeAction': 'সদস্য সরান', - 'team.changeRoleTitle': 'সদস্যের ভূমিকা পরিবর্তন করুন', - 'team.changeRolePrompt': "Change {name}'s role from {oldRole} to {newRole}?", - 'team.changeRoleAdminGrant': - 'This will grant them full admin permissions including the ability to manage team members.', - 'team.changeRoleAdminRemove': - 'This will remove their admin permissions and they will no longer be able to manage the team.', - 'team.changing': 'পরিবর্তন হচ্ছে...', - 'team.changeRoleAction': 'ভূমিকা পরিবর্তন করুন', - 'team.failedChangeRole': 'ভূমিকা পরিবর্তন করতে ব্যর্থ হয়েছে', - 'team.failedRemoveMember': 'সদস্য সরাতে ব্যর্থ হয়েছে', - 'voice.failedToLoadSettings': 'ভয়েস সেটিংস লোড করতে ব্যর্থ হয়েছে', - 'voice.failedToSaveSettings': 'ভয়েস সেটিংস সংরক্ষণ করতে ব্যর্থ হয়েছে', - 'voice.failedToStartServer': 'ভয়েস সার্ভার শুরু করতে ব্যর্থ হয়েছে', - 'voice.failedToStopServer': 'ভয়েস সার্ভার বন্ধ করতে ব্যর্থ হয়েছে', - 'voice.sttDisabledPrefix': - 'Voice dictation is disabled until the local STT model is downloaded. Use the', - 'voice.sttDisabledSuffix': 'বিভাগটি ব্যবহার করুন৷', - 'voice.debug.failedToLoadVoiceDebugData': 'ভয়েস ডিবাগ ডেটা লোড করতে ব্যর্থ হয়েছে', - 'voice.debug.settingsSaved': 'ডিবাগ সেটিংস সংরক্ষণ করা হয়েছে৷', - 'voice.debug.failedToSaveSettings': 'ভয়েস সেটিংস সংরক্ষণ করতে ব্যর্থ হয়েছে', - 'voice.debug.runtimeStatus': 'রানটাইম স্ট্যাটাস', - 'voice.debug.runtimeStatusDesc': - 'Live diagnostics for the voice server and speech-to-text engine.', - 'voice.debug.server': 'সার্ভার', - 'voice.debug.unavailable': 'অনুপলব্ধ', - 'voice.debug.ready': 'প্রস্তুত', - 'voice.debug.notReady': 'প্রস্তুত নয় [[I18N_SEP_92731]', - 'voice.debug.hotkey': 'P_18 কী n/a', - 'voice.debug.notAvailable': 'মোড', - 'voice.debug.mode': 'ট্রান্সক্রিপশন', - 'voice.debug.transcriptions': 'সার্ভারের ত্রুটি', - 'voice.debug.serverError': 'উন্নত সেটিংস', - 'voice.debug.advancedSettings': 'টিউ 18-193 মিটারের নিম্ন স্তরের জন্য উন্নত সেটিংস', - 'voice.debug.advancedSettingsDesc': - 'Low-level tuning parameters for recording and silence detection.', - 'voice.debug.minimumRecordingSeconds': 'ন্যূনতম রেকর্ডিং সেকেন্ড', - 'voice.debug.silenceThreshold': 'সাইলেন্স থ্রেশহোল্ড (RMS)', - 'voice.debug.silenceThresholdDesc': - 'Recordings with energy below this are treated as silence and skipped. Lower = more sensitive.', - 'voice.providers.saved': 'ভয়েস প্রদানকারী সংরক্ষিত।', - 'voice.providers.failedToSave': 'ভয়েস প্রদানকারী সংরক্ষণ করতে ব্যর্থ', - 'voice.providers.ellipsis': '…', - 'voice.providers.installing': 'ইনস্টল করা হচ্ছে', - 'voice.providers.installingBusy': 'ইনস্টল করা হচ্ছে...', - 'voice.providers.reinstallLocally': 'স্থানীয়ভাবে পুনরায় ইনস্টল করুন', - 'voice.providers.repair': 'মেরামত', - 'voice.providers.retryLocally': 'স্থানীয়ভাবে পুনরায় চেষ্টা করুন', - 'voice.providers.installLocally': 'স্থানীয়ভাবে ইনস্টল করুন', - 'voice.providers.whisperReady': 'স্থানীয়ভাবে ইনস্টল করুন [[I18N_731 প্রস্তুত]।', - 'voice.providers.whisperInstallStarted': 'হুইস্পার ইনস্টল শুরু হয়েছে৷', - 'voice.providers.queued': 'সারিবদ্ধ', - 'voice.providers.failedToInstallWhisper': 'হুইস্পার ইনস্টল করতে ব্যর্থ', - 'voice.providers.piperReady': 'পাইপার প্রস্তুত।', - 'voice.providers.piperInstallStarted': 'পাইপার ইনস্টল শুরু হয়েছে', - 'voice.providers.failedToInstallPiper': 'পাইপার ইনস্টল করতে ব্যর্থ হয়েছে', - 'voice.providers.title': 'ভয়েস প্রদানকারী', - 'voice.providers.desc': - 'Choose where transcription and synthesis run. Use the Install locally buttons to download the binaries and models into your workspace. Local providers can be saved before the install finishes — no manual WHISPER_BIN or PIPER_BIN setup required.', - 'voice.providers.sttProvider': 'স্পিচ-টু-টেক্সট প্রদানকারী', - 'voice.providers.sttProviderAria': 'STT প্রদানকারী', - 'voice.providers.cloudWhisperProxy': 'ক্লাউড (হুইস্পার প্রক্সি)', - 'voice.providers.localWhisper': 'স্থানীয় হুইস্পার', - 'voice.providers.installRequired': '(ইনস্টল করতে হবে)', - 'voice.providers.whisperInstalledTitle': 'Whisper is installed. Click to reinstall.', - 'voice.providers.whisperDownloadTitle': - 'Download whisper.cpp and the GGML model into your workspace.', - 'voice.providers.installed': 'ইনস্টল করা হয়েছে', - 'voice.providers.installFailed': 'ইনস্টল ব্যর্থ হয়েছে', - 'voice.providers.notInstalled': 'ইনস্টল করা হয়নি', - 'voice.providers.whisperModel': 'হুইস্পার মডেল', - 'voice.providers.whisperModelAria': 'হুইস্পার মডেল', - 'voice.providers.whisperModelTiny': 'ছোট (39 MB, দ্রুততম)', - 'voice.providers.whisperModelBase': 'বেস (74 MB)', - 'voice.providers.whisperModelSmall': 'ছোট (244 MB)', - 'voice.providers.whisperModelMedium': '93MB (18 MB মাঝারি, 927) সুপারিশ করা হয়েছে', - 'voice.providers.whisperModelLargeTurbo': 'বড় v3 Turbo (1.5 GB, সর্বোত্তম নির্ভুলতা)', - 'voice.providers.ttsProvider': 'টেক্সট-টু-স্পিচ প্রদানকারী', - 'voice.providers.ttsProviderAria': 'TTS প্রদানকারী', - 'voice.providers.cloudElevenLabsProxy': 'ক্লাউড (ElevenLabs proxy)', - 'voice.providers.localPiper': 'স্থানীয় পাইপার', - 'voice.providers.piperInstalledTitle': 'পাইপার ইনস্টল করা আছে। পুনরায় ইনস্টল করতে ক্লিক করুন.', - 'voice.providers.piperDownloadTitle': - 'Download Piper and the bundled en_US-lessac-medium voice into your workspace.', - 'voice.providers.piperVoice': 'পাইপার ভয়েস', - 'voice.providers.piperVoiceAria': 'পাইপার ভয়েস', - 'voice.providers.customVoiceOption': 'অন্যান্য (নীচে টাইপ করুন)…', - 'voice.providers.customVoiceAria': 'পাইপার ভয়েস আইডি (কাস্টম)', - 'voice.providers.customVoicePlaceholder': 'en_US-lessac-medium', - 'voice.providers.piperVoicesDesc': - 'Voices come from huggingface.co/rhasspy/piper-voices. Switching voices may require an Install/Reinstall click to download the new .onnx.', - 'voice.providers.mascotVoice': 'মাসকট ভয়েস', - 'voice.providers.mascotVoiceDescPrefix': - 'The ElevenLabs voice the mascot uses for spoken replies is configured under', - 'voice.providers.mascotSettings': 'মাসকট সেটিংস', - 'voice.providers.mascotVoiceDescSuffix': '.', - 'voice.providers.hotkeyPlaceholder': 'Fn এর অধীনে কনফিগার করা হয়েছে', - 'voice.providers.piperPreset.lessacMedium': 'US · Lessac (নিরপেক্ষ, প্রস্তাবিত)', - 'voice.providers.piperPreset.lessacHigh': 'US · Lessac (উচ্চ মানের, বড়)', - 'voice.providers.piperPreset.ryanMedium': 'US · রায়ান (পুরুষ)', - 'voice.providers.piperPreset.amyMedium': 'মার্কিন · অ্যামি (মহিলা)', - 'voice.providers.piperPreset.librittsHigh': 'US · LibriTTS (মাল্টি-স্পীকার)', - 'voice.providers.piperPreset.alanMedium': 'GB · অ্যালান (পুরুষ)', - 'voice.providers.piperPreset.jennyDiocoMedium': 'GB · জেনি ডিওকো (মহিলা)', - 'voice.providers.piperPreset.northernEnglishMaleMedium': 'GB · উত্তর ইংরেজি (পুরুষ)', - 'voice.providers.chip.cloud': 'OpenHuman (Managed)', - 'voice.providers.chip.cloudAria': 'OpenHuman managed provider is always enabled', - 'voice.providers.chip.whisper': 'Whisper (Local)', - 'voice.providers.chip.enableWhisper': 'Enable local Whisper STT', - 'voice.providers.chip.disableWhisper': 'Disable local Whisper STT', - 'voice.providers.chip.piper': 'Piper (Local)', - 'voice.providers.chip.enablePiper': 'Enable local Piper TTS', - 'voice.providers.chip.disablePiper': 'Disable local Piper TTS', - 'voice.providers.chip.enableProvider': 'Enable', - 'voice.providers.chip.disableProvider': 'Disable', - 'voice.providers.chip.apiKeyLabel': 'API Key', - 'voice.providers.chip.apiKeyPlaceholder': 'sk-…', - 'voice.providers.chip.comingSoon': 'coming soon', - 'voice.modal.title': 'Configure', - 'voice.modal.desc': - 'Enter your API key to enable this provider. You can test the connection before saving.', - 'voice.modal.testKey': 'Test Key', - 'voice.modal.testing': 'Testing…', - 'voice.modal.saveAndEnable': 'Save & Enable', - 'voice.modal.enable': 'Enable', - 'voice.modal.whisperDesc': - 'Choose a model size and install the Whisper binary and GGML model into your workspace. Larger models are more accurate but slower.', - 'voice.modal.piperDesc': - 'Choose a voice and install the Piper binary and ONNX model into your workspace. Piper runs fully offline with low latency.', - 'voice.routing.title': 'Voice Routing', - 'voice.routing.desc': 'Choose which enabled providers handle speech-to-text and text-to-speech.', - 'voice.routing.save': 'Save', - 'voice.routing.testStt': 'Test STT', - 'voice.routing.testTts': 'Test TTS', - 'voice.routing.elevenlabsVoice': 'ElevenLabs Voice', - 'voice.routing.elevenlabsVoiceAria': 'ElevenLabs voice selection', - 'voice.routing.elevenlabsVoiceIdAria': 'ElevenLabs voice ID (custom)', - 'voice.routing.elevenlabsVoiceDesc': - 'Pick a curated voice or paste a custom voice ID from your ElevenLabs dashboard.', - 'voice.externalProviders.title': 'External Voice Providers', - 'voice.externalProviders.desc': - 'Connect third-party STT/TTS APIs like Deepgram, ElevenLabs, or OpenAI directly.', - 'voice.externalProviders.keySet': 'Key set', - 'voice.externalProviders.noKey': 'No API key', - 'voice.externalProviders.test': 'Test', - 'voice.externalProviders.testing': 'Testing…', - 'voice.externalProviders.remove': 'Remove', - 'voice.externalProviders.provider': 'Provider', - 'voice.externalProviders.selectProvider': 'Select a provider…', - 'voice.externalProviders.apiKey': 'API Key', - 'voice.externalProviders.apiKeyPlaceholder': 'sk-…', - 'voice.externalProviders.add': 'Add', - 'screenAwareness.debug.debugAndDiagnostics': 'ডিবাগ এবং ডায়াগনস্টিকস', - 'screenAwareness.debug.collapse': 'সঙ্কুচিত', - 'screenAwareness.debug.expand': 'প্রসারিত করুন', - 'screenAwareness.debug.failedToSave': 'স্ক্রীন ইন্টেলিজেন্স সংরক্ষণ করতে ব্যর্থ', - 'screenAwareness.debug.policyTitle': 'স্ক্রীন ইন্টেলিজেন্স নীতি', - 'screenAwareness.debug.baselineFps': 'বেসলাইন FPS', - 'screenAwareness.debug.useVisionModel': 'ভিআইপি ব্যবহার করুন', - 'screenAwareness.debug.useVisionModelDesc': - 'Send screenshots to a vision LLM for richer context. When off, only OCR text is used with a text LLM — faster and no vision model required.', - 'screenAwareness.debug.keepScreenshots': 'স্ক্রিনশটগুলি রাখুন', - 'screenAwareness.debug.keepScreenshotsDesc': - 'Save captured screenshots to the workspace instead of deleting after processing', - 'screenAwareness.debug.allowlist': 'অনুমতি তালিকা (প্রতি লাইনে একটি নিয়ম)', - 'screenAwareness.debug.denylist': 'অস্বীকারকারী (প্রতি লাইনে একটি নিয়ম)', - 'screenAwareness.debug.saveSettings': 'স্ক্রীন ইন্টেলিজেন্স সেটিংস সংরক্ষণ করুন', - 'screenAwareness.debug.sessionStats': 'সেশন পরিসংখ্যান', - 'screenAwareness.debug.framesEphemeral': 'ফ্রেম (ক্ষণস্থায়ী)', - 'screenAwareness.debug.panicStop': 'প্যানিক স্টপ', - 'screenAwareness.debug.defaultPanicHotkey': 'Cmd+Shift+।', - 'screenAwareness.debug.vision': 'দৃষ্টি', - 'screenAwareness.debug.idle': 'নিষ্ক্রিয়', - 'screenAwareness.debug.visionQueue': 'দৃষ্টি সারি', - 'screenAwareness.debug.lastVision': 'শেষ দর্শন', - 'screenAwareness.debug.notAvailable': 'n/a', - 'screenAwareness.debug.visionSummaries': 'ভিশন সারাংশ', - 'screenAwareness.debug.refreshing': 'রিফ্রেশ করা হচ্ছে...', - 'screenAwareness.debug.noSummaries': 'এখনও কোনো সারসংক্ষেপ নেই।', - 'screenAwareness.debug.unknownApp': 'অজানা অ্যাপ', - 'screenAwareness.debug.macosOnly': 'স্ক্রীন ইন্টেলিজেন্স V1 বর্তমানে শুধুমাত্র macOS-এ সমর্থিত।', - 'memory.debugTitle': 'মেমরি ডিবাগ', - 'memory.documents': 'নথি', - 'memory.filterByNamespace': 'নামস্থান দ্বারা ফিল্টার করুন...', - 'memory.refresh': 'রিফ্রেশ করুন', - 'memory.noDocumentsFound': 'কোনো নথি পাওয়া যায়নি৷', - 'memory.delete': 'মুছুন', - 'memory.rawResponse': 'কাঁচা প্রতিক্রিয়া', - 'memory.namespaces': 'নেমস্পেস', - 'memory.noNamespacesFound': 'কোনো নামস্থান খুঁজে পাওয়া যায়নি।', - 'memory.queryRecall': 'ক্যোয়ারী এবং রিকল', - 'memory.namespace': 'নেমস্পেস', - 'memory.queryText': 'কোয়েরি পাঠ্য...', - 'memory.defaultMaxChunks': '10', - 'memory.maxChunks': 'সর্বাধিক খণ্ডগুলি', - 'memory.query': 'কোয়েরি', - 'memory.recall': 'প্রত্যাহার করুন', - 'memory.queryLabel': 'প্রশ্ন', - 'memory.recallLabel': 'প্রত্যাহার করুন', - 'memory.queryResult': '923 ফলাফল', - 'memory.recallResult': 'ফলাফল প্রত্যাহার করুন', - 'memory.clearNamespace': 'নামস্থান সাফ করুন', - 'memory.clearNamespaceDescription': 'একটি নামস্থানের মধ্যে থাকা সমস্ত নথি স্থায়ীভাবে মুছুন।', - 'memory.selectNamespace': 'নামস্থান নির্বাচন করুন...', - 'memory.exampleNamespace': 'যেমন skill:gmail:user@example.com', - 'memory.clear': 'সাফ', - 'memory.deleteConfirm': 'নামস্থান "{namespace}" এ নথি "{documentId}" মুছবেন?', - 'memory.clearNamespaceConfirm': - 'This will permanently delete ALL documents in namespace "{namespace}". Continue?', - 'memory.clearNamespaceSuccess': 'নামস্থান "{namespace}" সাফ করা হয়েছে৷', - 'memory.clearNamespaceEmpty': '"{namespace}" এ পরিষ্কার করার কিছু নেই।', - 'webhooks.debugTitle': 'ওয়েবহুক ডিবাগ', - 'webhooks.failedToLoadDebugData': 'ওয়েবহুক ডিবাগ ডেটা লোড করতে ব্যর্থ হয়েছে', - 'webhooks.clearLogsConfirm': 'সমস্ত ক্যাপচার করা ওয়েবহুক ডিবাগ লগ সাফ করবেন?', - 'webhooks.failedToClearLogs': 'ওয়েবহুক লগগুলি সাফ করতে ব্যর্থ হয়েছে', - 'webhooks.loading': 'লোড হচ্ছে...', - 'webhooks.refresh': 'রিফ্রেশ করা হচ্ছে', - 'webhooks.clearing': 'সাফ করা হচ্ছে...', - 'webhooks.clearLogs': 'সাফ করা হচ্ছে...', - 'webhooks.registered': '[[I18N_SEP_92731]] নিবন্ধিত', - 'webhooks.captured': 'ক্যাপচার করা', - 'webhooks.live': 'লাইভ', - 'webhooks.disconnected': 'সংযোগ বিচ্ছিন্ন', - 'webhooks.lastEvent': 'সর্বশেষ ইভেন্ট', - 'webhooks.at': 'এ', - 'webhooks.registeredWebhooks': 'নিবন্ধিত ওয়েবহুক', - 'webhooks.noActiveRegistrations': 'কোন সক্রিয় নিবন্ধন.', - 'webhooks.resolvingBackendUrl': 'ব্যাকএন্ড সমাধান করা হচ্ছে URL…', - 'webhooks.capturedRequests': 'ক্যাপচার করা অনুরোধ', - 'webhooks.noRequestsCaptured': 'কোনো ওয়েবহুকের অনুরোধ এখনও ক্যাপচার করা হয়নি৷', - 'webhooks.unrouted': 'আনরাউটেড', - 'webhooks.pending': 'মুলতুবি', - 'webhooks.requestHeaders': 'অনুরোধ শিরোনাম', - 'webhooks.queryParams': 'কোয়েরি পরম', - 'webhooks.requestBody': 'রিকোয়েস্ট বডি', - 'webhooks.responseHeaders': 'রেসপন্স হেডার', - 'webhooks.responseBody': 'রেসপন্স বডি', - 'webhooks.rawPayload': 'Raw Payload', - 'webhooks.empty': '[খালি]', - 'providerSetup.error.defaultDetails': 'প্রদানকারী সেটআপ ব্যর্থ হয়েছে৷', - 'providerSetup.error.providerFallback': 'প্রদানকারী', - 'providerSetup.error.credentialsRejected': - '{provider} rejected the credentials. Check the API key and try again.', - 'providerSetup.error.endpointNotRecognized': - '{provider} did not recognize the endpoint. Check the base URL and try again.', - 'providerSetup.error.providerUnavailable': - '{provider} is unavailable right now. Try again or check the provider status.', - 'providerSetup.error.unreachable': - 'Could not reach {provider}. Check the endpoint URL and network connection, then try again.', - 'providerSetup.error.couldNotReachWithMessage': '{provider} এ পৌঁছানো যায়নি: {message}', - 'providerSetup.error.technicalDetails': 'প্রযুক্তিগত বিবরণ', - 'devices.title': 'ডিভাইস', - 'devices.pairIphone': 'পেয়ার iPhone', - 'devices.noPaired': 'কোনো পেয়ার করা ডিভাইস নেই', - 'devices.emptyState': 'এই OpenHuman সেশনে সংযোগ করতে আপনার iPhone এ একটি QR code স্ক্যান করুন।', - 'devices.devicePairedTitle': 'ডিভাইস পেয়ার করা', - 'devices.devicePairedMessage': 'iPhone সফলভাবে সংযুক্ত হয়েছে৷', - 'devices.deviceRevokedTitle': 'ডিভাইস প্রত্যাহার করা হয়েছে', - 'devices.deviceRevokedMessage': '{label} সরানো হয়েছে৷', - 'devices.revokeFailedTitle': 'প্রত্যাহার করা ব্যর্থ হয়েছে', - 'devices.online': 'অনলাইন', - 'devices.offline': 'অফলাইন', - 'devices.lastSeenNever': 'কখনোই', - 'devices.lastSeenNow': 'এইমাত্র', - 'devices.lastSeenMinutes': '{count}মিনিট আগে', - 'devices.lastSeenHours': '{count}ঘণ্টা আগে', - 'devices.lastSeenDays': '{count}দিন আগে', - 'devices.revoke': 'প্রত্যাহার করুন', - 'devices.revokeAria': 'প্রত্যাহার করুন {label}', - 'devices.confirmRevokeTitle': 'ডিভাইস প্রত্যাহার করবেন?', - 'devices.confirmRevokeBody': '{label} will no longer be able to connect. This cannot be undone.', - 'devices.loadFailed': 'ডিভাইসগুলি লোড করতে ব্যর্থ হয়েছে: {message}', - 'devices.pairModal.title': 'পেয়ার iPhone', - 'devices.pairModal.loading': 'পেয়ারিং কোড তৈরি করা হচ্ছে...', - 'devices.pairModal.instructions': 'Open the OpenHuman app on your iPhone and scan this code.', - 'devices.pairModal.expiresIn': 'কোডের মেয়াদ ~{count} মিনিটে শেষ হবে', - 'devices.pairModal.expiresInPlural': 'কোডের মেয়াদ ~{count} মিনিটে শেষ হবে', - 'devices.pairModal.showDetails': 'বিবরণ দেখান', - 'devices.pairModal.hideDetails': 'বিবরণ লুকান', - 'devices.pairModal.channelId': 'চ্যানেল আইডি', - 'devices.pairModal.pairingUrl': 'পেয়ারিং URL', - 'devices.pairModal.expiredTitle': 'QR code মেয়াদ শেষ হয়ে গেছে', - 'devices.pairModal.expiredBody': 'পেয়ার করা চালিয়ে যেতে একটি নতুন কোড তৈরি করুন৷', - 'devices.pairModal.generateNewCode': 'নতুন কোড তৈরি করুন', - 'devices.pairModal.successTitle': 'iPhone এর সাথে পেয়ার করা', - 'devices.pairModal.autoClose': 'স্বয়ংক্রিয়ভাবে বন্ধ হচ্ছে...', - 'devices.pairModal.errorPrefix': 'পেয়ারিং তৈরি করতে ব্যর্থ হয়েছে: {message}', - 'devices.pairModal.errorTitle': 'কিছু ভুল হয়েছে', - 'devices.pairModal.copyUrl': 'অনুলিপি', - 'mcp.catalog.searchAria': 'Smithery ক্যাটালগ অনুসন্ধান', - 'mcp.catalog.searchPlaceholder': 'Smithery ক্যাটালগ অনুসন্ধান করুন...', - 'mcp.catalog.loadFailed': 'ক্যাটালগ করতে ব্যর্থ হয়েছে', - 'mcp.catalog.noResults': 'কোনো সার্ভার পাওয়া যায়নি।', - 'mcp.catalog.noResultsFor': '"{query}" এর জন্য কোনো সার্ভার পাওয়া যায়নি।', - 'mcp.catalog.loadMore': 'আরও লোড করুন', - 'mcp.configAssistant.title': 'কনফিগারেশন সহকারী', - 'mcp.configAssistant.empty': 'Ask about configuration, required env vars, or setup steps.', - 'mcp.configAssistant.suggestedValues': 'প্রস্তাবিত মান:', - 'mcp.configAssistant.valueHidden': '(মান লুকানো)', - 'mcp.configAssistant.applySuggested': 'প্রস্তাবিত মান প্রয়োগ করুন', - 'mcp.configAssistant.reinstallHint': 'এই মানগুলি প্রয়োগ করতে পুনরায় ইনস্টল করুন।', - 'mcp.configAssistant.thinking': 'ভাবছি...', - 'mcp.configAssistant.inputPlaceholder': 'Ask a question (Enter to send, Shift+Enter for newline)', - 'mcp.configAssistant.send': 'পাঠান', - 'mcp.configAssistant.failedResponse': 'প্রতিক্রিয়া পেতে ব্যর্থ', - 'mcp.toolList.availableSingular': '{count} টুল উপলব্ধ', - 'mcp.toolList.availablePlural': '{count} টুল উপলব্ধ', - 'mcp.toolList.tryTool': 'Try', - 'mcp.toolList.tryToolAria': 'Open execution playground for {name}', - 'mcp.playground.title': 'Run {name}', - 'mcp.playground.close': 'Close playground', - 'mcp.playground.inputSchema': 'Input schema', - 'mcp.playground.argsLabel': 'Arguments (JSON)', - 'mcp.playground.argsHelp': 'Type JSON matching the input schema. Empty input is treated as {}.', - 'mcp.playground.runShortcut': '⌘/Ctrl + Enter to run', - 'mcp.playground.format': 'Format', - 'mcp.playground.invalidJson': 'Invalid JSON', - 'mcp.playground.run': 'Run tool', - 'mcp.playground.running': 'Running…', - 'mcp.playground.result': 'Result', - 'mcp.playground.resultError': 'Tool returned an error', - 'mcp.playground.copyResult': 'Copy result', - 'mcp.playground.copied': 'Copied', - 'mcp.playground.history': 'History', - 'mcp.playground.historyEmpty': 'No invocations yet in this session.', - 'mcp.playground.historyLoad': 'Load', - 'mcp.playground.unexpectedError': 'Unexpected error invoking tool.', - 'mcp.catalog.deployed': 'স্থাপন করা হয়েছে', - 'mcp.catalog.installCount': '{count} ইনস্টল করা হয়েছে', - 'app.update.dismissNotification': 'আপডেট বাতিল করা হয়নি', - 'bootCheck.rpcAuthSuffix': 'প্রতি RPC এ।', - 'mcp.installed.title': 'ইনস্টল করা হয়েছে', - 'mcp.installed.browseCatalog': 'ক্যাটালগ ব্রাউজ করুন', - 'mcp.installed.empty': 'এখনো কোনো MCP সার্ভার ইনস্টল করা হয়নি।', - 'mcp.installed.toolSingular': '{count} টুল', - 'mcp.installed.toolPlural': '{count} টুল', - 'mcp.health.title': 'Health', - 'mcp.health.summaryAria': 'MCP connection health summary', - 'mcp.health.connectedCount': '{count} connected', - 'mcp.health.connectingCount': '{count} connecting', - 'mcp.health.errorCount': '{count} error', - 'mcp.health.disconnectedCount': '{count} idle', - 'mcp.health.retryAll': 'Retry all ({count})', - 'mcp.health.retryAllAria': 'Retry all {count} errored MCP servers', - 'mcp.health.disconnectAll': 'Disconnect all ({count})', - 'mcp.health.disconnectAllAria': 'Disconnect all {count} connected MCP servers', - 'mcp.health.disconnectConfirm.title': 'Disconnect all MCP servers?', - 'mcp.health.disconnectConfirm.body': - 'This will disconnect {count} currently-connected MCP servers. Installed configurations and secrets are kept; you can reconnect any server later.', - 'mcp.health.disconnectConfirm.cancel': 'Cancel', - 'mcp.health.disconnectConfirm.confirm': 'Disconnect all', - 'mcp.health.opErrorGeneric': 'Bulk operation failed. See logs.', - 'mcp.health.bulkPartialFailure': '{failed} of {total} servers failed. See logs.', - 'mcp.installed.search.landmarkAria': 'Search installed MCP servers', - 'mcp.installed.search.inputAria': 'Filter installed MCP servers by name', - 'mcp.installed.search.placeholder': 'Filter servers…', - 'mcp.installed.search.clearAria': 'Clear filter', - 'mcp.installed.search.countMatches': '{shown} of {total} servers', - 'mcp.installed.search.noMatches': 'No servers match "{query}".', - 'mcp.inventory.openButton': 'Inventory', - 'mcp.inventory.openAria': 'Open the sharable MCP inventory panel', - 'mcp.inventory.title': 'Sharable MCP Inventory', - 'mcp.inventory.subtitle': - 'Export your installed MCP servers as a portable, secret-free manifest, or import one from a teammate. Secret env values are never included or imported.', - 'mcp.inventory.close': 'Close inventory panel', - 'mcp.inventory.tablistAria': 'Inventory sections', - 'mcp.inventory.tab.export': 'Export', - 'mcp.inventory.tab.import': 'Import', - 'mcp.inventory.export.empty': - 'No MCP servers installed yet — nothing to export. Install one from the catalog first.', - 'mcp.inventory.export.privacyTitle': 'What is in this manifest', - 'mcp.inventory.export.privacyBody': - 'Server names, qualified names, env-variable KEY NAMES, and non-secret config only. Secret values, your machine identifiers, and per-install timestamps are intentionally stripped.', - 'mcp.inventory.export.serverCount': '{count} servers in this manifest', - 'mcp.inventory.export.copy': 'Copy', - 'mcp.inventory.export.copied': 'Copied', - 'mcp.inventory.export.copyAria': 'Copy the manifest JSON to the clipboard', - 'mcp.inventory.export.download': 'Download', - 'mcp.inventory.export.downloadAria': 'Download the manifest as a JSON file', - 'mcp.inventory.import.trustTitle': 'Treat imported manifests as untrusted code', - 'mcp.inventory.import.trustBody': - 'An MCP server is a tool you grant your agent. Only import manifests from sources you trust. Each install requires your explicit click; nothing is auto-installed.', - 'mcp.inventory.import.pasteLabel': 'Paste manifest JSON', - 'mcp.inventory.import.pastePlaceholder': 'Paste a manifest here, or upload a .json file below.', - 'mcp.inventory.import.preview': 'Preview', - 'mcp.inventory.import.clear': 'Clear', - 'mcp.inventory.import.uploadFile': 'or upload a .json file', - 'mcp.inventory.import.uploadFileAria': 'Upload a manifest .json file', - 'mcp.inventory.import.fileTooLarge': 'File is too large (over 1 MB). Refusing to load.', - 'mcp.inventory.import.fileReadFailed': 'Could not read file.', - 'mcp.inventory.import.parseErrorPrefix': 'Could not parse manifest:', - 'mcp.inventory.import.previewHeading': 'Preview', - 'mcp.inventory.import.previewCounts': - '{total} servers — {newly} new, {already} already installed', - 'mcp.inventory.import.previewEmpty': 'Manifest contains no servers.', - 'mcp.inventory.import.exportedFrom': 'Exported from {exporter}', - 'mcp.inventory.import.exportedAt': 'at {when}', - 'mcp.inventory.import.statusNew': 'New', - 'mcp.inventory.import.statusAlreadyInstalled': 'Already installed', - 'mcp.inventory.import.envKeysLabel': 'Env keys', - 'mcp.inventory.import.install': 'Install', - 'mcp.inventory.import.installAria': 'Install {name} from this manifest', - 'mcp.inventory.import.skipped': 'skipped', - 'mcp.inventory.parseError.empty': 'Manifest is empty.', - 'mcp.inventory.parseError.invalidJson': 'Invalid JSON.', - 'mcp.inventory.parseError.rootNotObject': 'Manifest must be a JSON object at the root.', - 'mcp.inventory.parseError.unsupportedSchema': - 'Unsupported manifest schema — this file was not produced by a compatible exporter.', - 'mcp.inventory.parseError.missingExportedAt': 'Missing or invalid `exported_at` field.', - 'mcp.inventory.parseError.missingExportedBy': 'Missing or invalid `exported_by` field.', - 'mcp.inventory.parseError.invalidServers': 'Missing or invalid `servers` array.', - 'mcp.inventory.parseError.serverNotObject': 'A server entry is not an object.', - 'mcp.inventory.parseError.serverMissingQualifiedName': - 'A server entry is missing its qualified_name.', - 'mcp.inventory.parseError.serverMissingDisplayName': - 'A server entry is missing its display_name.', - 'mcp.inventory.parseError.serverEnvKeysNotArray': - 'A server entry has an env_keys field that is not an array of strings.', - 'mcp.inventory.parseError.serverContainsEnv': - 'A server entry contains an `env` value map. Refusing to import — manifests must only carry env_keys (names), never secret values.', - 'mcp.inventory.parseError.duplicateQualifiedName': - 'Duplicate qualified_name found in manifest. Each server must appear at most once.', - 'mcp.tab.loading': 'MCP সার্ভার লোড হচ্ছে...', - 'mcp.tab.emptyDetail': 'একটি সার্ভার বা সারি নির্বাচন করুন।', - 'mcp.install.loadingDetail': 'সার্ভারের বিবরণ লোড হচ্ছে...', - 'mcp.install.back': 'ফিরে যান', - 'mcp.install.title': '{name} ইনস্টল করুন', - 'mcp.install.requiredEnv': 'প্রয়োজনীয় পরিবেশ ভেরিয়েবল', - 'mcp.install.enterValue': 'লিখুন {key}', - 'mcp.install.show': 'দেখান', - 'mcp.install.hide': 'লুকান', - 'mcp.install.configLabel': 'কনফিগ (ঐচ্ছিক JSON)', - 'mcp.install.configPlaceholder': '{"key": "value"}', - 'mcp.install.missingRequired': '"{key}" প্রয়োজন', - 'mcp.install.invalidJson': 'কনফিগ JSON বৈধ নয় JSON', - 'mcp.install.failedDetail': 'সার্ভারের বিবরণ লোড করতে ব্যর্থ', - 'mcp.install.failedInstall': 'ইনস্টল ব্যর্থ হয়েছে', - 'mcp.install.button': 'ইনস্টল করুন', - 'mcp.install.installing': 'ইনস্টল করা হচ্ছে...', - 'mcp.detail.suggestedEnvReady': 'প্রস্তাবিত পরিবেশ মান প্রস্তুত', - 'mcp.detail.suggestedEnvBody': - 'Re-install this server with the suggested values to apply them: {keys}', - 'mcp.detail.connect': 'সংযোগ করুন', - 'mcp.detail.connecting': 'সংযুক্ত হচ্ছে...', - 'mcp.detail.disconnect': 'সংযোগ বিচ্ছিন্ন করুন', - 'mcp.detail.hideAssistant': 'সহকারী লুকান', - 'mcp.detail.helpConfigure': 'কনফিগার করতে আমাকে সাহায্য করুন', - 'mcp.detail.confirmUninstall': 'আনইনস্টল নিশ্চিত করবেন?', - 'mcp.detail.confirmUninstallAction': 'হ্যাঁ, আনইনস্টল করুন', - 'mcp.detail.uninstall': 'আনইনস্টল', - 'mcp.detail.envVars': 'এনভায়রনমেন্ট ভেরিয়েবল', - 'mcp.detail.tools': 'টুলস', - 'onboarding.skipForNow': 'এখনই এড়িয়ে যান', - 'onboarding.localAI.continueWithCloud': 'ক্লাউডের সাথে চালিয়ে যান', - 'onboarding.localAI.useLocalAnyway': 'Use local AI anyway (not recommended for your device)', - 'onboarding.localAI.useLocalInstead': 'Use local AI instead (connect Ollama now)', - 'onboarding.localAI.setupIssue': 'স্থানীয় AI সেটআপ একটি সমস্যার সম্মুখীন হয়েছে', - 'notifications.routingTitle': 'বিজ্ঞপ্তি রাউটিং', - 'notifications.routing.pipelineStats': 'পাইপলাইন পরিসংখ্যান', - 'notifications.routing.total': 'মোট', - 'notifications.routing.unread': 'অপঠিত', - 'notifications.routing.unscored': 'আনস্কোরড', - 'notifications.routing.intelligenceTitle': 'আনস্কোরড [[I18N_SEP_92731] নোটিফিকেশন', - 'notifications.routing.intelligenceDesc': - 'Every notification from your connected accounts is scored by a local AI model. High-importance notifications are automatically routed to your orchestrator agent so nothing critical slips through.', - 'notifications.routing.howItWorks': 'এটি কীভাবে কাজ করে', - 'notifications.routing.level.drop': 'ড্রপ', - 'notifications.routing.level.dropDesc': 'নয়েজ / স্প্যাম — সঞ্চিত কিন্তু প্রকাশ করা হয় না', - 'notifications.routing.level.acknowledge': 'স্বীকার করুন', - 'notifications.routing.level.acknowledgeDesc': 'Low-priority — shown in notification center', - 'notifications.routing.level.react': 'প্রতিক্রিয়া', - 'notifications.routing.level.reactDesc': 'Medium-priority — triggers a focused agent response', - 'notifications.routing.level.escalate': 'এস্কেলেট', - 'notifications.routing.level.escalateDesc': 'High-priority — forwarded to orchestrator agent', - 'notifications.routing.perProvider': 'প্রতি-প্রদানকারী রাউটিং', - 'notifications.routing.threshold': 'থ্রেশহোল্ড', - 'notifications.routing.routeToOrchestrator': 'অর্কেস্ট্রেটরের রুট', - 'notifications.routing.loadSettingsError': 'Failed to load settings. Reopen this panel to retry.', - 'settings.billing.inferenceBudget.title': 'Inference Budget', - 'settings.billing.inferenceBudget.noRecurringPlanBudget': 'কোনো পুনরাবৃত্ত প্ল্যান বাজেট নেই', - 'settings.billing.inferenceBudget.noRecurringWeeklyDesc': - 'Your current plan does not include a recurring weekly inference budget. Usage is paid from available credits instead.', - 'settings.billing.inferenceBudget.remainingSummary': '{remaining} / {budget} অবশিষ্ট', - 'settings.billing.inferenceBudget.spentThisCycle': '{amount} এই চক্রটি ব্যয় করেছে', - 'settings.billing.inferenceBudget.cycleEndsOn': 'চক্র শেষ হয় {date}', - 'settings.billing.inferenceBudget.exhaustedDesc': - 'Included subscription usage is exhausted. Top up credits to keep using AI without waiting for the next cycle.', - 'settings.billing.inferenceBudget.discountVsPayg': '{pct}% cheaper per call than pay-as-you-go.', - 'settings.billing.inferenceBudget.cycleSpend': 'সাইকেল খরচ', - 'settings.billing.inferenceBudget.totalAmount': '{amount} মোট', - 'settings.billing.inferenceBudget.inference': 'অনুমান', - 'settings.billing.inferenceBudget.integrations': 'ইন্টিগ্রেশন', - 'settings.billing.inferenceBudget.calls': '{count} কল করে', - 'settings.billing.inferenceBudget.dailySpend': 'দৈনিক খরচ', - 'settings.billing.inferenceBudget.dailySpendPoint': '{date}: {amount}', - 'settings.billing.inferenceBudget.topModels': 'শীর্ষ মডেল', - 'settings.billing.inferenceBudget.noInferenceUsage': 'এই চক্রের কোনো অনুমান ব্যবহার নেই।', - 'settings.billing.inferenceBudget.topIntegrations': 'শীর্ষ ইন্টিগ্রেশন', - 'settings.billing.inferenceBudget.noIntegrationUsage': 'এই চক্রের কোনো ইন্টিগ্রেশন ব্যবহার নেই।', - 'settings.billing.inferenceBudget.unableToLoad': 'ব্যবহারের ডেটা লোড করতে অক্ষম৷', - 'settings.billing.inferenceBudget.notAvailable': 'n/a', - 'memory.sourceFilterAria': 'উত্স দ্বারা ফিল্টার', - 'calls.comingSoonDescription': 'AI-সহায়তা কলগুলি শীঘ্রই আসছে৷ সাথে থাকুন।', - 'vault.title': 'নলেজ ভল্ট', - 'vault.description': 'Point at a local folder; files are chunked and mirrored into memory.', - 'vault.add': 'ভল্ট যোগ করুন', - 'vault.added': 'ভল্ট যোগ করা হয়েছে', - 'vault.createdMessage': 'তৈরি করা হয়েছে "{name}"। ইনজেস্ট করতে {sync} এ ক্লিক করুন।', - 'vault.couldNotAdd': 'ভল্ট যোগ করা যায়নি', - 'vault.syncFailed': 'সিঙ্ক ব্যর্থ হয়েছে', - 'vault.syncFailedFor': '"{name}"', - 'vault.syncFailedFiles': 'ফাইল __000 এর জন্য সিঙ্ক ব্যর্থ হয়েছে', - 'vault.syncedTitle': '"{name}"', - 'vault.syncSummary': 'Ingested {ingested}, unchanged {unchanged}, removed {removed}', - 'vault.syncSummaryFailed': ', ব্যর্থ হয়েছে {count}', - 'vault.syncSummarySkipped': '__PH এড়িয়ে গেছে', - 'vault.syncSummaryDuration': '· {seconds}s', - 'vault.confirmRemovePurge': - 'Remove vault "{name}"?\n\nClick OK to also purge its memory (delete all {count} ingested document(s)).\nClick Cancel to keep the documents in memory.', - 'vault.confirmRemove': 'সত্যিই ভল্ট "{name}" সরান?', - 'vault.removed': 'ভল্ট সরানো হয়েছে', - 'vault.removedPurgedMessage': '"{name}" সরানো হয়েছে এবং এর মেমরি পরিষ্কার করেছে৷', - 'vault.removedKeptMessage': '"{name}" সরানো হয়েছে। নথি মেমরি রাখা.', - 'vault.couldNotRemove': 'ভল্ট সরানো যায়নি', - 'vault.name': 'নাম', - 'vault.namePlaceholder': 'আমার গবেষণা নোট', - 'vault.folderPath': 'ফোল্ডার পাথ (পরম)', - 'vault.folderPathPlaceholder': '/Users/you/Documents/notes', - 'vault.excludes': 'বাদ দেয় (কমা দ্বারা পৃথক করা সাবস্ট্রিং, ঐচ্ছিক)', - 'vault.excludesPlaceholder': 'drafts/, .secret', - 'vault.creating': 'তৈরি করা হচ্ছে...', - 'vault.create': 'ভল্ট তৈরি করুন', - 'vault.loading': 'ভল্ট লোড হচ্ছে...', - 'vault.failedToLoad': 'ভল্ট লোড করতে ব্যর্থ হয়েছে: {error}', - 'vault.empty': 'এখনো কোনো ভল্ট নেই। একটি ফোল্ডার ইনজেস্ট করা শুরু করতে উপরে একটি যোগ করুন।', - 'vault.fileCount': '{count} ফাইল(গুলি)', - 'vault.syncedRelative': 'সিঙ্ক করা হয়েছে {time}', - 'vault.neverSynced': 'কখনই সিঙ্ক করা হয়নি', - 'vault.syncingProgress': 'সিঙ্ক হচ্ছে... {ingested}/{total}', - 'vault.removing': 'সরানো হচ্ছে...', - 'vault.relative.sec': '{count}সেকেন্ড আগে', - 'vault.relative.min': '{count}মি আগে', - 'vault.relative.hr': '{count}সেকেন্ড আগে', - 'vault.relative.day': '{count}দিন আগে', - 'whatsapp.title': 'WhatsApp', - 'subconscious.interval.fiveMinutes': '5 মিনিট', - 'subconscious.interval.tenMinutes': '10 মিনিট', - 'subconscious.interval.fifteenMinutes': '15 মিনিট', - 'subconscious.interval.thirtyMinutes': '30 মিনিট', - 'subconscious.interval.oneHour': '1 ঘন্টা', - 'subconscious.interval.sixHours': '1 ঘন্টা', - 'subconscious.interval.twelveHours': '[[I18N_SEP_92731]] 12 ঘন্টা', - 'subconscious.interval.oneDay': '1 দিন', - 'subconscious.priority.critical': 'গুরুত্বপূর্ণ', - 'subconscious.priority.important': 'গুরুত্বপূর্ণ', - 'subconscious.priority.normal': 'স্বাভাবিক', - 'subconscious.durationSeconds': '{seconds}s', - 'subconscious.durationMilliseconds': '{milliseconds}ms', - 'settings.search.allowedSitesLabel': 'Allowed websites', - 'settings.search.allowedSitesHint': - 'Websites the assistant may open and read while researching (one host per line, e.g. reuters.com). A host also covers its subdomains. Leave empty to block all web access.', - 'settings.search.allowedSitesAllOn': - 'The assistant can open any public website. Local and private addresses stay blocked.', - 'settings.search.allowedSitesPlaceholder': 'reuters.com\napnews.com\ngithub.com', - 'settings.search.allowedSitesSave': 'Save websites', - 'settings.search.accessModeAria': 'Web access mode', - 'settings.search.accessAllowAll': 'Allow all', - 'settings.search.accessCustom': 'Custom', - 'settings.search.accessBlockAll': 'Block all', - 'settings.search.accessBlockAllHint': - 'All web access is blocked — the assistant cannot open or read any website.', - 'memory.tab.centrality': 'Centrality', - 'graphCentrality.title': 'Knowledge Graph Centrality', - 'graphCentrality.intro': - 'PageRank over your memory graph surfaces the load-bearing hubs — and the connector entities that link otherwise-separate clusters, which a raw frequency count cannot reveal.', - 'graphCentrality.loading': 'Computing centrality…', - 'graphCentrality.errorPrefix': 'Could not load the graph:', - 'graphCentrality.retry': 'Retry', - 'graphCentrality.empty': 'No knowledge graph yet.', - 'graphCentrality.emptyHint': - 'As the assistant records facts about you, the most connected entities will surface here.', - 'graphCentrality.namespaceLabel': 'Namespace', - 'graphCentrality.namespaceAll': 'All namespaces', - 'graphCentrality.metricEntities': 'Entities', - 'graphCentrality.metricConnections': 'Connections', - 'graphCentrality.metricClusters': 'Clusters', - 'graphCentrality.clustersCaption': '{components} clusters · largest holds {largest}', - 'graphCentrality.approximateBadge': 'approximate', - 'graphCentrality.approximateTitle': 'Stopped at the iteration cap before fully converging', - 'graphCentrality.rankedHeading': 'Top entities by influence', - 'graphCentrality.colRank': '#', - 'graphCentrality.colEntity': 'Entity', - 'graphCentrality.colInfluence': 'Influence', - 'graphCentrality.colLinks': 'Links', - 'graphCentrality.bridgeBadge': 'connector', - 'graphCentrality.bridgeTitle': 'Connector — more influential than its link count suggests', - 'graphCentrality.degreeTitle': '{in} in · {out} out', - 'settings.search.engineDisabledLabel': 'Disabled', - 'settings.search.engineDisabledDesc': - 'Remove search tools from the agent context and available tool list.', -}; - -export default bn1; diff --git a/app/src/lib/i18n/chunks/bn-2.ts b/app/src/lib/i18n/chunks/bn-2.ts deleted file mode 100644 index 97791cd2a..000000000 --- a/app/src/lib/i18n/chunks/bn-2.ts +++ /dev/null @@ -1,499 +0,0 @@ -import type { TranslationMap } from '../types'; - -// Bengali (বাংলা) chunk 2/5. Translated from chunks/en-2.ts. -const bn2: TranslationMap = { - 'settings.ai.configStatus': 'কনফিগারেশন স্ট্যাটাস', - 'settings.ai.fallbackMode': 'ফলব্যাক মোড', - 'settings.ai.loadedFromRuntime': 'রানটাইম থেকে লোড হয়েছে', - 'settings.ai.loadingDuration': 'লোডিং সময়', - 'settings.ai.localRuntime': 'লোকাল মডেল রানটাইম', - 'settings.ai.openManager': 'ম্যানেজার খুলুন', - 'settings.ai.retryDownload': 'ডাউনলোড আবার চেষ্টা করুন', - 'settings.ai.state': 'অবস্থা', - 'settings.ai.targetModel': 'টার্গেট মডেল', - 'settings.ai.download': 'ডাউনলোড', - 'settings.ai.localModelUnavailable': 'লোকাল মডেল স্ট্যাটাস পাওয়া যাচ্ছে না।', - 'settings.ai.soulConfig': 'SOUL পার্সোনা কনফিগারেশন', - 'settings.ai.refreshing': 'রিফ্রেশ হচ্ছে...', - 'settings.ai.refreshSoul': 'SOUL রিফ্রেশ করুন', - 'settings.ai.loadingSoul': 'SOUL কনফিগারেশন লোড হচ্ছে...', - 'settings.ai.identity': 'পরিচয়', - 'settings.ai.personality': 'ব্যক্তিত্ব', - 'settings.ai.safetyRules': 'নিরাপত্তা বিধি', - 'settings.ai.source': 'উৎস', - 'settings.ai.loaded': 'লোড হয়েছে', - 'settings.ai.toolsConfig': 'TOOLS কনফিগারেশন', - 'settings.ai.refreshTools': 'TOOLS রিফ্রেশ করুন', - 'settings.ai.toolsAvailable': 'পাওয়া যাচ্ছে টুলস', - 'settings.ai.tools': 'টুলস', - 'settings.ai.activeSkills': 'সক্রিয় স্কিলস', - 'settings.ai.skills': 'স্কিলস', - 'settings.ai.skillsOverview': 'স্কিলস ওভারভিউ', - 'settings.ai.refreshingAll': 'সব রিফ্রেশ হচ্ছে...', - 'settings.ai.refreshAll': 'সব AI কনফিগারেশন রিফ্রেশ করুন', - 'settings.notifications.suppressAll': 'সব বিজ্ঞপ্তি দমন করুন', - 'settings.notifications.suppressAllDesc': - 'ফোকাস স্টেট নির্বিশেষে এম্বেডেড অ্যাপ থেকে সব OS বিজ্ঞপ্তি টোস্ট ব্লক করুন।', - 'settings.notifications.toggleDnd': 'ডু নট ডিস্টার্ব টগল করুন', - 'settings.notifications.categories': 'ক্যাটাগরি', - 'settings.notifications.categoryFooter': - 'একটি ক্যাটাগরি নিষ্ক্রিয় করলে সেই ধরনের নতুন বিজ্ঞপ্তি বিজ্ঞপ্তি কেন্দ্রে আর দেখাবে না। বিদ্যমান বিজ্ঞপ্তিগুলো পরিষ্কার না করা পর্যন্ত থাকবে।', - 'settings.billing.movedToWeb': 'বিলিং ওয়েবে সরানো হয়েছে', - 'settings.billing.openDashboard': 'বিলিং ড্যাশবোর্ড খুলুন', - 'settings.billing.movedToWebDesc': - 'সাবস্ক্রিপশন পরিবর্তন, পেমেন্ট পদ্ধতি, ক্রেডিট এবং ইনভয়েস এখন ওয়েবে TinyHumans-এ পরিচালনা করা হয়।', - 'settings.billing.backToSettings': 'সেটিংসে ফিরুন', - 'settings.billing.openingBrowser': 'ব্রাউজার খোলা হচ্ছে...', - 'settings.billing.browserNotOpen': 'ব্রাউজার না খুললে উপরের বাটন ব্যবহার করুন।', - 'settings.billing.browserOpenFailed': - 'ব্রাউজার স্বয়ংক্রিয়ভাবে খোলা যায়নি। উপরের বাটন ব্যবহার করুন।', - 'settings.tools.chooseCapabilities': - 'OpenHuman আপনার হয়ে কোন ক্যাপাবিলিটিগুলো ব্যবহার করতে পারবে তা বেছে নিন।', - 'settings.tools.saveChanges': 'পরিবর্তন সংরক্ষণ করুন', - 'settings.tools.preferencesSaved': 'পছন্দ সংরক্ষিত', - 'settings.tools.saveFailed': 'পছন্দ সংরক্ষণ ব্যর্থ। আবার চেষ্টা করুন।', - 'settings.screenAwareness.mode': 'মোড', - 'settings.screenAwareness.allExceptBlacklist': 'ব্ল্যাকলিস্ট ছাড়া সব', - 'settings.screenAwareness.whitelistOnly': 'শুধু হোয়াইটলিস্ট', - 'settings.screenAwareness.screenMonitoring': 'স্ক্রিন মনিটরিং', - 'settings.screenAwareness.saveSettings': 'সেটিংস সংরক্ষণ করুন', - 'settings.screenAwareness.session': 'সেশন', - 'settings.screenAwareness.status': 'স্ট্যাটাস', - 'settings.screenAwareness.active': 'সক্রিয়', - 'settings.screenAwareness.stopped': 'বন্ধ', - 'settings.screenAwareness.remaining': 'অবশিষ্ট', - 'settings.screenAwareness.startSession': 'সেশন শুরু করুন', - 'settings.screenAwareness.stopSession': 'সেশন বন্ধ করুন', - 'settings.screenAwareness.analyzeNow': 'এখনই বিশ্লেষণ করুন', - 'settings.screenAwareness.macosOnly': - 'স্ক্রিন সচেতনতা ডেস্কটপ ক্যাপচার এবং অনুমতি নিয়ন্ত্রণ বর্তমানে শুধু macOS-এ সমর্থিত।', - 'connections.comingSoon': 'শীঘ্রই আসছে', - 'connections.setUp': 'সেটআপ করুন', - 'connections.configured': 'কনফিগার করা হয়েছে', - 'connections.unavailable': 'পাওয়া যাচ্ছে না', - 'connections.checking': 'পরীক্ষা হচ্ছে…', - 'connections.walletConfigured': - 'আপনার রিকভারি ফ্রেজ থেকে লোকাল EVM, BTC, Solana এবং Tron পরিচয় কনফিগার করা হয়েছে।', - 'connections.walletReady': - 'একটি রিকভারি ফ্রেজ থেকে লোকাল EVM, BTC, Solana এবং Tron পরিচয় সেটআপ করুন।', - 'connections.walletError': - 'ওয়ালেট স্ট্যাটাস পরীক্ষা করা যায়নি। রিকভারি ফ্রেজ প্যানেল থেকে আবার চেষ্টা করতে ট্যাপ করুন।', - 'connections.walletChecking': 'ওয়ালেট স্ট্যাটাস পরীক্ষা হচ্ছে...', - 'connections.walletIdentities': 'ওয়ালেট পরিচয়', - 'connections.walletDerived': - 'আপনার রিকভারি ফ্রেজ থেকে লোকালি ডেরাইভ করা এবং শুধু নিরাপদ মেটাডেটা হিসেবে সংরক্ষিত।', - 'connections.privacySecurity': 'গোপনীয়তা ও নিরাপত্তা', - 'connections.privacySecurityDesc': - 'সব ডেটা ও ক্রেডেনশিয়াল জিরো-ডেটা রিটেনশন নীতি সহ লোকালে সংরক্ষিত। আপনার তথ্য এনক্রিপ্ট করা এবং তৃতীয় পক্ষের সাথে কখনো শেয়ার করা হয় না।', - 'channels.status.connecting': 'সংযোগ হচ্ছে', - 'channels.status.notConfigured': 'কনফিগার করা হয়নি', - 'channels.noActiveRoute': 'কোনো সক্রিয় রুট নেই', - 'channels.activeRoute': 'সক্রিয় রুট', - 'channels.loadingDefinitions': 'চ্যানেল ডেফিনিশন লোড হচ্ছে...', - 'channels.channelConnections': 'চ্যানেল সংযোগ', - 'channels.configureAuthModes': 'প্রতিটি মেসেজিং চ্যানেলের জন্য অথ মোড কনফিগার করুন।', - 'channels.configNotAvailable': 'কনফিগারেশন পাওয়া যাচ্ছে না', - 'channels.channel': 'চ্যানেল', - 'devOptions.coreModeNotSet': 'কোর মোড: সেট করা হয়নি', - 'devOptions.coreModeNotSetDesc': - 'বুট-চেক পিকার এখনো নিশ্চিত করা হয়নি। লোকাল বা ক্লাউড বেছে নিতে পিকারে সুইচ মোড ব্যবহার করুন।', - 'devOptions.local': 'লোকাল', - 'devOptions.embeddedCoreSidecar': 'এম্বেডেড কোর সাইডকার', - 'devOptions.sidecarSpawned': 'অ্যাপ লঞ্চে Tauri শেল দ্বারা ইন-প্রসেসে স্প্যান করা হয়েছে।', - 'devOptions.cloud': 'ক্লাউড', - 'devOptions.remoteCoreRpc': 'রিমোট কোর RPC', - 'devOptions.token': 'টোকেন', - 'devOptions.tokenNotSet': 'সেট করা হয়নি — RPC 401 দেবে', - 'devOptions.triggerSentryTest': 'Sentry পরীক্ষা ট্রিগার করুন (স্টেজিং)', - 'devOptions.triggerSentryTestDesc': - 'Sentry পাইপলাইন যাচাই করতে একটি ট্যাগড ত্রুটি পাঠায়। ইস্যু #1072 — যাচাইয়ের পরে সরান।', - 'devOptions.sendTestEvent': 'পরীক্ষা ইভেন্ট পাঠান', - 'devOptions.sending': 'পাঠানো হচ্ছে…', - 'devOptions.eventSent': 'ইভেন্ট পাঠানো হয়েছে', - 'devOptions.failed': 'ব্যর্থ', - 'devOptions.appLogs': 'অ্যাপ লগ', - 'devOptions.appLogsDesc': - 'রোলিং ডেইলি লগ ফাইল ধারণকারী ফোল্ডার খুলুন। ইস্যু রিপোর্ট করার সময় সর্বশেষ ফাইলটি সংযুক্ত করুন।', - 'devOptions.openLogsFolder': 'লগ ফোল্ডার খুলুন', - 'mnemonic.phraseSaved': 'রিকভারি ফ্রেজ সংরক্ষিত', - 'mnemonic.walletReady': 'মাল্টি-চেইন ওয়ালেট পরিচয় প্রস্তুত। সেটিংসে ফিরছে...', - 'mnemonic.writeDownWords': 'এই', - 'mnemonic.wordsInOrder': - 'শব্দগুলো ক্রমানুসারে লিখে নিরাপদ স্থানে সংরক্ষণ করুন। এই ফ্রেজটি আপনার লোকাল এনক্রিপশন কী এবং EVM, BTC, Solana ও Tron ওয়ালেট পরিচয় সুরক্ষিত করে।', - 'mnemonic.cannotRecover': - 'এই ফ্রেজ হারালে কখনো পুনরুদ্ধার করা যাবে না এবং সম্পূর্ণ আপনার ডিভাইসে রাখা উচিত।', - 'mnemonic.copyToClipboard': 'ক্লিপবোর্ডে কপি করুন', - 'mnemonic.alreadyHavePhrase': 'আমার কাছে ইতিমধ্যে একটি রিকভারি ফ্রেজ আছে', - 'mnemonic.consentSaved': - 'আমি এই ফ্রেজটি সংরক্ষণ করেছি এবং লোকাল ওয়ালেট সেটআপের জন্য এটি ব্যবহারে সম্মতি দিচ্ছি', - 'mnemonic.enterPhraseToRestore': - 'আপনার লোকাল ওয়ালেট পরিচয় পুনরুদ্ধার করতে নিচে আপনার রিকভারি ফ্রেজ দিন, বা যেকোনো ফিল্ডে পুরো ফ্রেজ পেস্ট করুন (নতুন ব্যাকআপের জন্য ১২টি শব্দ; পুরনো ভার্সনের ২৪ শব্দের ফ্রেজও কাজ করে)।', - 'mnemonic.words': 'শব্দ', - 'mnemonic.validPhrase': 'বৈধ রিকভারি ফ্রেজ', - 'mnemonic.generateNewPhrase': 'পরিবর্তে একটি নতুন রিকভারি ফ্রেজ তৈরি করুন', - 'mnemonic.securingData': 'আপনার ডেটা সুরক্ষিত হচ্ছে...', - 'mnemonic.saveRecoveryPhrase': 'রিকভারি ফ্রেজ সংরক্ষণ করুন', - 'mnemonic.userNotLoaded': - 'ব্যবহারকারী লোড হয়নি। দয়া করে আবার সাইন ইন করুন বা পেজ রিফ্রেশ করুন।', - 'mnemonic.invalidPhrase': 'অবৈধ রিকভারি ফ্রেজ। আপনার শব্দগুলো পরীক্ষা করে আবার চেষ্টা করুন।', - 'mnemonic.somethingWentWrong': 'কিছু একটা ভুল হয়েছে। আবার চেষ্টা করুন।', - 'team.failedToCreate': 'টিম তৈরি করতে ব্যর্থ', - 'team.invalidInviteCode': 'অবৈধ বা মেয়াদোত্তীর্ণ আমন্ত্রণ কোড', - 'team.failedToSwitch': 'টিম পরিবর্তন করতে ব্যর্থ', - 'team.failedToLeave': 'টিম ছাড়তে ব্যর্থ', - 'team.role.owner': 'মালিক', - 'team.role.admin': 'অ্যাডমিন', - 'team.role.billingManager': 'বিলিং ম্যানেজার', - 'team.role.member': 'সদস্য', - 'team.active': 'সক্রিয়', - 'team.personalTeam': 'ব্যক্তিগত টিম', - 'team.manageTeam': 'টিম পরিচালনা', - 'team.switching': 'পরিবর্তন হচ্ছে...', - 'team.switch': 'পরিবর্তন করুন', - 'team.leaving': 'ছেড়ে যাচ্ছে...', - 'team.leave': 'ছেড়ে যান', - 'team.yourTeams': 'আপনার টিমগুলো', - 'team.createNewTeam': 'নতুন টিম তৈরি করুন', - 'team.teamName': 'টিমের নাম', - 'team.creating': 'তৈরি হচ্ছে...', - 'team.joinExistingTeam': 'বিদ্যমান টিমে যোগ দিন', - 'team.inviteCode': 'আমন্ত্রণ কোড', - 'team.joining': 'যোগ দেওয়া হচ্ছে...', - 'team.join': 'যোগ দিন', - 'team.leaveTeam': 'টিম ছাড়ুন', - 'team.confirmLeave': 'আপনি কি ছেড়ে যেতে চান', - 'team.leaveWarning': - 'আপনি টিম এবং সব টিম রিসোর্সে অ্যাক্সেস হারাবেন। পুনরায় যোগ দিতে নতুন আমন্ত্রণ প্রয়োজন।', - 'team.management': 'টিম ম্যানেজমেন্ট', - 'team.notFound': 'টিম পাওয়া যায়নি', - 'team.accessDenied': 'অ্যাক্সেস অস্বীকৃত', - 'team.members': 'সদস্য', - 'voice.title': 'ভয়েস ডিক্টেশন', - 'voice.settings': 'ভয়েস সেটিংস', - 'voice.settingsDesc': 'ডিক্টেট করতে এবং সক্রিয় ফিল্ডে টেক্সট ঢোকাতে হটকি ধরে রাখুন।', - 'voice.hotkey': 'হটকি', - 'voice.activationMode': 'অ্যাক্টিভেশন মোড', - 'voice.tapToToggle': 'টগল করতে ট্যাপ করুন', - 'voice.writingStyle': 'লেখার স্টাইল', - 'voice.verbatimTranscription': 'হুবহু ট্রান্সক্রিপশন', - 'voice.naturalCleanup': 'স্বাভাবিক পরিষ্কার', - 'voice.autoStart': 'কোরের সাথে স্বয়ংক্রিয়ভাবে ভয়েস সার্ভার শুরু করুন', - 'voice.customDictionary': 'কাস্টম ডিকশনারি', - 'voice.customDictionaryDesc': - 'স্বীকৃতির নির্ভুলতা উন্নত করতে নাম, প্রযুক্তিগত শব্দ এবং ডোমেন শব্দ যোগ করুন।', - 'voice.addWord': 'একটি শব্দ যোগ করুন...', - 'voice.sttDisabled': - 'লোকাল STT মডেল ডাউনলোড ও প্রস্তুত না হওয়া পর্যন্ত ভয়েস ডিক্টেশন নিষ্ক্রিয়।', - 'voice.openLocalAiModel': 'লোকাল AI মডেল খুলুন', - 'voice.serverRestarted': 'নতুন সেটিংস সহ ভয়েস সার্ভার রিস্টার্ট হয়েছে।', - 'voice.settingsSaved': 'ভয়েস সেটিংস সংরক্ষিত।', - 'voice.serverStarted': 'ভয়েস সার্ভার শুরু হয়েছে।', - 'voice.serverStopped': 'ভয়েস সার্ভার বন্ধ হয়েছে।', - 'voice.saveVoiceSettings': 'ভয়েস সেটিংস সংরক্ষণ করুন', - 'voice.startVoiceServer': 'ভয়েস সার্ভার শুরু করুন', - 'voice.stopVoiceServer': 'ভয়েস সার্ভার বন্ধ করুন', - 'voice.debugTitle': 'ভয়েস ডিবাগ', - 'autocomplete.title': 'অটোকমপ্লিট', - 'autocomplete.settings': 'সেটিংস', - 'autocomplete.acceptWithTab': 'Tab দিয়ে গ্রহণ করুন', - 'autocomplete.stylePreset': 'স্টাইল প্রিসেট', - 'autocomplete.style.balanced': 'ব্যালান্সড', - 'autocomplete.style.concise': 'সংক্ষিপ্ত', - 'autocomplete.style.formal': 'আনুষ্ঠানিক', - 'autocomplete.style.casual': 'অনানুষ্ঠানিক', - 'autocomplete.style.custom': 'কাস্টম', - 'autocomplete.disabledApps': 'নিষ্ক্রিয় অ্যাপ (প্রতি লাইনে একটি বান্ডেল/অ্যাপ টোকেন)', - 'autocomplete.saveSettings': 'সেটিংস সংরক্ষণ করুন', - 'autocomplete.saving': 'সংরক্ষণ হচ্ছে…', - 'autocomplete.runtime': 'রানটাইম', - 'autocomplete.running': 'চলছে', - 'autocomplete.start': 'শুরু করুন', - 'autocomplete.stop': 'বন্ধ করুন', - 'autocomplete.settingsSaved': 'অটোকমপ্লিট সেটিংস সংরক্ষিত।', - 'autocomplete.started': 'অটোকমপ্লিট শুরু হয়েছে।', - 'autocomplete.didNotStart': 'অটোকমপ্লিট শুরু হয়নি। এটি সক্রিয় কিনা পরীক্ষা করুন।', - 'autocomplete.stopped': 'অটোকমপ্লিট বন্ধ হয়েছে।', - 'autocomplete.advancedSettings': 'অ্যাডভান্সড সেটিংস', - 'autocomplete.debugTitle': 'অটোকমপ্লিট ডিবাগ', - 'chat.agentChat': 'এজেন্ট চ্যাট', - 'chat.overrides': 'ওভাররাইড', - 'chat.model': 'মডেল', - 'chat.temperature': 'টেম্পারেচার', - 'chat.conversation': 'কথোপকথন', - 'chat.startAgentConversation': 'এজেন্টের সাথে একটি কথোপকথন শুরু করুন।', - 'chat.you': 'আপনি', - 'chat.agent': 'এজেন্ট', - 'chat.askAgent': 'এজেন্টকে যেকোনো কিছু জিজ্ঞেস করুন...', - 'chat.sendMessage': 'বার্তা পাঠান', - 'composio.triageTitle': 'ইন্টিগ্রেশন ট্রিগার', - 'composio.triageDesc': - 'সক্রিয় থাকলে, প্রতিটি আসন্ত Composio ট্রিগার একটি AI ট্রিয়াজ ধাপের মধ্য দিয়ে যায় যা ইভেন্ট শ্রেণীবদ্ধ করে এবং স্বয়ংক্রিয় কাজ শুরু করতে পারে — প্রতিটি ট্রিগারে একটি লোকাল LLM টার্ন। বৈশ্বিকভাবে বা নির্দিষ্ট ইন্টিগ্রেশনে নিষ্ক্রিয় করুন যদি আপনি ম্যানুয়াল রিভিউ পছন্দ করেন। যদি পরিবেশ ভ্যারিয়েবল', - 'composio.disableAllTriage': 'সব ট্রিগারের জন্য AI ট্রিয়াজ নিষ্ক্রিয় করুন', - 'composio.triggersStillRecorded': 'ট্রিগারগুলো ইতিহাসে রেকর্ড থাকবে — কোনো LLM টার্ন চলবে না।', - 'composio.disableSpecificIntegrations': - 'নির্দিষ্ট ইন্টিগ্রেশনের জন্য AI ট্রিয়াজ নিষ্ক্রিয় করুন', - 'composio.settingsSaved': 'সেটিংস সংরক্ষিত হয়েছে', - 'composio.saveFailed': 'সংরক্ষণ ব্যর্থ। আবার চেষ্টা করুন।', - 'cron.title': 'ক্রন জবস', - 'cron.scheduledJobs': 'নির্ধারিত জবস', - 'cron.manageCronJobs': 'কোর শিডিউলার থেকে ক্রন জবস পরিচালনা করুন।', - 'cron.refreshCronJobs': 'ক্রন জবস রিফ্রেশ করুন', - 'localModel.modelStatus': 'মডেল স্ট্যাটাস', - 'localModel.downloadModels': 'মডেল ডাউনলোড করুন', - 'localModel.usage': 'ব্যবহার', - 'localModel.usageDesc': - 'কোন সাবসিস্টেম লোকাল মডেলে চলবে তা বেছে নিন। বন্ধ থাকলে ক্লাউড ব্যবহার করে।', - 'localModel.enableRuntime': 'লোকাল AI রানটাইম সক্রিয় করুন', - 'localModel.enableRuntimeDesc': - 'মাস্টার সুইচ। ডিফল্টে বন্ধ — Ollama নিষ্ক্রিয় থাকে। চালু হলে, ট্রি সামারাইজার, স্ক্রিন ইন্টেলিজেন্স এবং অটোকমপ্লিট সর্বদা লোকাল মডেল ব্যবহার করে।', - 'localModel.advancedSettings': 'অ্যাডভান্সড সেটিংস', - 'localModel.debugTitle': 'লোকাল মডেল ডিবাগ', - 'localModel.ollamaServer.helperText': 'উদাহরণ: http://192.168.1.5:11434', - 'localModel.ollamaServer.label': 'Ollama সার্ভার URL', - 'localModel.ollamaServer.modelCount': 'মডেল', - 'localModel.ollamaServer.placeholder': 'http://localhost:11434', - 'localModel.ollamaServer.reachable': 'পৌঁছানো যাচ্ছে', - 'localModel.ollamaServer.resetButton': 'ডিফল্টে পুনরায় সেট করুন', - 'localModel.ollamaServer.saveButton': 'সংরক্ষণ করুন', - 'localModel.ollamaServer.testButton': 'সংযোগ পরীক্ষা করুন', - 'localModel.ollamaServer.unreachable': 'পৌঁছানো যাচ্ছে না', - 'localModel.ollamaServer.validationError': 'একটি বৈধ http:// বা https:// URL হতে হবে', - 'screenAwareness.debugTitle': 'স্ক্রিন সচেতনতা ডিবাগ', - 'memory.debugTitle': 'মেমোরি ডিবাগ', - 'webhooks.debugTitle': 'Webhooks ডিবাগ', - 'notifications.routingTitle': 'বিজ্ঞপ্তি রুটিং', - 'common.reload': 'পুনরায় লোড', - 'common.skip': 'এড়িয়ে যান', - 'common.disable': 'নিষ্ক্রিয় করুন', - 'common.enable': 'সক্রিয় করুন', - 'chat.safetyTimeout': - '২ মিনিট পরেও এজেন্টের কোনো সাড়া নেই। আবার চেষ্টা করুন বা সংযোগ পরীক্ষা করুন।', - 'chat.filter.all': 'সব', - 'chat.filter.work': 'কাজ', - 'chat.filter.briefing': 'ব্রিফিং', - 'chat.filter.notification': 'বিজ্ঞপ্তি', - 'chat.filter.workers': 'ওয়ার্কার', - 'chat.selectThread': 'একটি থ্রেড বেছে নিন', - 'chat.threads': 'থ্রেড', - 'chat.noThreads': 'এখনো কোনো থ্রেড নেই', - 'chat.noLabelThreads': '"{label}" থ্রেড নেই', - 'chat.noWorkerThreads': 'এখনো কোনো ওয়ার্কার থ্রেড নেই', - 'chat.deleteThread': 'থ্রেড মুছুন', - 'chat.deleteThreadConfirm': 'আপনি কি "{title}" মুছতে চান?', - 'chat.untitledThread': 'শিরোনামহীন থ্রেড', - 'chat.editThreadTitle': 'Edit thread title', - 'chat.hideSidebar': 'সাইডবার লুকান', - 'chat.showSidebar': 'সাইডবার দেখান', - 'chat.newThreadShortcut': 'নতুন থ্রেড (/new)', - 'chat.new': 'নতুন', - 'chat.failedToLoadMessages': 'বার্তা লোড করতে ব্যর্থ', - 'chat.thinkingIteration': 'ভাবছে... ({n})', - 'chat.thinkingDots': 'ভাবছে...', - 'chat.approachingLimit': 'ব্যবহার সীমার কাছাকাছি', - 'chat.approachingLimitMsg': 'আপনি আপনার উপলব্ধ কোটার {pct}% ব্যবহার করেছেন।', - 'chat.upgrade': 'আপগ্রেড করুন', - 'chat.weeklyLimitHit': 'আপনি আপনার সাপ্তাহিক সীমায় পৌঁছেছেন।', - 'chat.resets': 'রিসেট হবে', - 'chat.topUpToContinue': 'চালিয়ে যেতে টপ আপ করুন।', - 'chat.budgetComplete': - 'আপনার অন্তর্ভুক্ত বাজেট শেষ হয়েছে। চালিয়ে যেতে ক্রেডিট যোগ করুন বা আপগ্রেড করুন।', - 'chat.topUp': 'টপ আপ', - 'chat.cycle': 'চক্র', - 'chat.cycleSpent': 'এই চক্রে ব্যয়', - 'chat.cycleRemaining': 'অবশিষ্ট', - 'chat.left': 'বাকি', - 'chat.setup': 'সেটআপ করুন', - 'chat.switchToText': 'টেক্সটে পরিবর্তন করুন', - 'chat.transcribing': 'ট্রান্সক্রাইব হচ্ছে...', - 'chat.stopAndSend': 'থামুন ও পাঠান', - 'chat.startTalking': 'কথা বলা শুরু করুন', - 'chat.playingVoiceReply': 'ভয়েস রিপ্লি বাজছে', - 'chat.voiceHint': 'কথা বলতে মাইক ব্যবহার করুন', - 'chat.micUnavailable': 'মাইক্রোফোন পাওয়া যাচ্ছে না', - 'chat.turn': 'টার্ন', - 'chat.turns': 'টার্ন', - 'chat.openWorkerThread': 'ওয়ার্কার থ্রেড খুলুন', - 'chat.attachment.attach': 'ছবি সংযুক্ত করুন', - 'chat.attachment.remove': '{name} সরান', - 'chat.attachment.tooMany': 'প্রতি বার্তায় সর্বোচ্চ {max}টি ছবি', - 'chat.attachment.tooLarge': 'ছবি {max} আকারের সীমা অতিক্রম করেছে', - 'chat.attachment.unsupportedType': - 'অসমর্থিত ফাইল প্রকার। PNG, JPEG, WebP, GIF, বা BMP ব্যবহার করুন।', - 'chat.attachment.readFailed': 'ফাইল পড়া যায়নি', - 'memory.searchAria': 'মেমোরি খুঁজুন', - 'memory.searchPlaceholder': 'মেমোরি এন্ট্রি খুঁজুন...', - 'memory.sourceFilter.all': 'সব উৎস', - 'memory.sourceFilter.email': 'ইমেইল', - 'memory.sourceFilter.calendar': 'ক্যালেন্ডার', - 'memory.sourceFilter.telegram': 'Telegram', - 'memory.sourceFilter.aiInsight': 'AI ইনসাইট', - 'memory.sourceFilter.system': 'সিস্টেম', - 'memory.sourceFilter.trading': 'ট্রেডিং', - 'memory.sourceFilter.security': 'নিরাপত্তা', - 'memory.ingestionActivity': 'ইনজেশন অ্যাক্টিভিটি', - 'memory.events': 'ইভেন্ট', - 'memory.event': 'ইভেন্ট', - 'memory.overTheLast': 'গত', - 'memory.months': 'মাসে', - 'memory.peak': 'শীর্ষ', - 'memory.perDay': '/দিন', - 'memory.less': 'কম', - 'memory.more': 'বেশি', - 'memory.on': 'তে', - 'memory.loading': 'মেমোরি লোড হচ্ছে', - 'memory.fetching': 'আপনার মেমোরি এন্ট্রি আনা হচ্ছে...', - 'memory.analyzing': 'মেমোরি বিশ্লেষণ হচ্ছে', - 'memory.analyzingHint': 'ইনসাইট বের করতে আপনার মেমোরি প্রক্রিয়া হচ্ছে...', - 'memory.noMatches': 'কোনো মিল পাওয়া যায়নি', - 'memory.noMatchesHint': 'সার্চ টার্ম বা ফিল্টার পরিবর্তন করে দেখুন।', - 'memory.allCaughtUp': 'সব আপডেট', - 'memory.allCaughtUpHint': 'প্রক্রিয়া করার মতো নতুন মেমোরি এন্ট্রি নেই।', - 'memory.noAnalysis': 'এখনো কোনো বিশ্লেষণ নেই', - 'memory.noAnalysisHint': 'আপনার মেমোরিতে প্যাটার্ন খুঁজে পেতে একটি বিশ্লেষণ চালান।', - 'memory.emptyHint': 'আপনার প্রথম মেমোরি তৈরি করতে ইন্টারঅ্যাক্ট শুরু করুন।', - 'mic.unavailable': 'মাইক্রোফোন পাওয়া যাচ্ছে না', - 'mic.permissionDenied': 'মাইক্রোফোন অনুমতি অস্বীকৃত', - 'mic.failedToStartRecorder': 'রেকর্ডার শুরু করতে ব্যর্থ', - 'mic.transcribing': 'ট্রান্সক্রাইব হচ্ছে...', - 'mic.tapToSend': 'পাঠাতে ট্যাপ করুন', - 'mic.waitingForAgent': 'এজেন্টের জন্য অপেক্ষা করছে...', - 'mic.tapAndSpeak': 'ট্যাপ করুন ও কথা বলুন', - 'mic.stopRecording': 'রেকর্ডিং বন্ধ করুন ও পাঠান', - 'mic.startRecording': 'রেকর্ডিং শুরু করুন', - 'token.usageLimitReached': 'ব্যবহার সীমা পৌঁছেছে', - 'token.approachingLimit': 'সীমার কাছাকাছি', - 'token.planClickForDetails': 'প্ল্যান - বিস্তারিত জানতে ক্লিক করুন', - 'token.sessionTokens': 'ইন: {in} | আউট: {out} | টার্ন: {turns}', - 'token.limit': 'সীমা পৌঁছেছে', - 'catalog.noCapabilityBinding': 'কোনো ক্যাপাবিলিটি বাইন্ডিং নেই', - 'catalog.downloadFailed': 'ডাউনলোড ব্যর্থ', - 'catalog.active': 'সক্রিয়', - 'catalog.installed': 'ইনস্টল করা', - 'catalog.notDownloaded': 'ডাউনলোড করা হয়নি', - 'catalog.inUse': 'ব্যবহারে', - 'catalog.use': 'ব্যবহার করুন', - 'catalog.deleteModel': 'মডেল মুছুন', - 'catalog.download': 'ডাউনলোড', - 'navigator.recent': 'সাম্প্রতিক', - 'navigator.today': 'আজ', - 'navigator.thisWeek': 'এই সপ্তাহ', - 'navigator.sources': 'উৎস', - 'navigator.email': 'ইমেইল', - 'navigator.slack': 'Slack', - 'navigator.chat': 'চ্যাট', - 'navigator.documents': 'ডকুমেন্ট', - 'navigator.people': 'মানুষ', - 'navigator.topics': 'বিষয়', - 'dreams.description': - 'স্বপ্ন হলো AI-জেনারেটেড প্রতিফলন যা আপনার মেমোরি থেকে প্যাটার্ন সংশ্লেষণ করে।', - 'dreams.comingSoon': 'শীঘ্রই আসছে', - 'assignment.memoryLlm': 'মেমোরি LLM', - 'assignment.memoryLlmAria': 'মেমোরি LLM নির্বাচন', - 'assignment.embedder': 'এম্বেডার', - 'assignment.loaded': 'লোড হয়েছে', - 'assignment.notDownloaded': 'ডাউনলোড করা হয়নি', - 'assignment.usedForExtractSummarise': 'নিষ্কাশন এবং সারসংক্ষেপের জন্য ব্যবহৃত', - 'insights.knownFacts': 'পরিচিত তথ্য', - 'insights.preferences': 'পছন্দ', - 'insights.relationships': 'সম্পর্ক', - 'insights.skills': 'দক্ষতা', - 'insights.opinions': 'মতামত', - // Developer options menu items (#2225) — English stubs; native translations welcome - 'devOptions.menuAi': 'AI কনফিগারেশন', - 'devOptions.menuAiDesc': 'ক্লাউড প্রদানকারী, স্থানীয় Ollama মডেল, এবং প্রতি-ওয়ার্কলোড রাউটিং', - 'devOptions.menuScreenAware': 'স্ক্রীন সচেতনতা', - 'devOptions.menuScreenAwareDesc': 'স্ক্রীন ক্যাপচার অনুমতি এবং সেশন নিয়ন্ত্রণ, নিরীক্ষণ নীতি', - 'devOptions.menuMessaging': 'মেসেজিং চ্যানেলগুলি', - 'devOptions.menuMessagingDesc': - 'কনফিগার করুন Telegram/Discord প্রমাণীকরণ মোড এবং ডিফল্ট চ্যানেল রাউটিং', - 'devOptions.menuTools': 'টুলগুলি', - 'devOptions.menuToolsDesc': - 'টুলগুলি [[I18N_SEP_92731] BR__7 সক্ষম করতে সক্ষম]__3 সক্ষম করতে পারে। আপনার পক্ষে ব্যবহার করুন', - 'devOptions.menuAgentChat': 'এজেন্ট চ্যাট', - 'devOptions.menuAgentChatDesc': 'মডেল এবং তাপমাত্রা ওভাররাইডের সাথে পরীক্ষা এজেন্ট কথোপকথন', - 'devOptions.menuCronJobs': 'ক্রোন জবস', - 'devOptions.menuCronJobsDesc': 'কাজের সময়সূচী চালনার সময়সূচী কনফিগার করুন', - 'devOptions.menuLocalModelDebug': 'স্থানীয় মডেল ডিবাগ', - 'devOptions.menuLocalModelDebugDesc': - 'Ollama কনফিগারেশন, সম্পদ ডাউনলোড, মডেল পরীক্ষা, এবং ডায়াগনস্টিকস', - 'devOptions.menuWebhooksDebug': 'ওয়েবহুক', - 'devOptions.menuWebhooksDebugDesc': - 'রানটাইম ওয়েবহুক নিবন্ধন এবং ক্যাপচার করা অনুরোধ লগগুলি পরিদর্শন করুন', - 'devOptions.menuIntelligence': 'বুদ্ধিমত্তা', - 'devOptions.menuIntelligenceDesc': 'মেমরি ওয়ার্কস্পেস, অবচেতন ইঞ্জিন, স্বপ্ন এবং সেটিংস', - 'devOptions.menuNotificationRouting': 'বিজ্ঞপ্তি রাউটিং', - 'devOptions.menuNotificationRoutingDesc': 'এআই গুরুত্ব স্কোরিং এবং অর্কেস্ট্রেটর বৃদ্ধির জন্য', - 'devOptions.menuComposeIOTriggers': 'ComposeIO ট্রিগারগুলি', - 'devOptions.menuComposeIOTriggersDesc': 'ComposeIO ট্রিগার ইতিহাস দেখুন এবং সংরক্ষণাগার', - 'devOptions.menuComposioRouting': 'Composio রাউটিং (ডাইরেক্ট মোড)', - 'devOptions.menuComposioRoutingDesc': - 'আপনার নিজের Composio এবং Composio Composio __বিরুট সরাসরি কল করুন।', - 'devOptions.menuComposioTriggers': 'ইন্টিগ্রেশন ট্রিগার', - 'devOptions.menuComposioTriggersDesc': - 'Composio ইন্টিগ্রেশন ট্রিগারের জন্য AI ট্রাইজ সেটিংস কনফিগার করুন', - 'mic.deviceSelector': 'মাইক্রোফোন ডিভাইস', - 'mic.tapToSendCountdown': 'পাঠাতে ট্যাপ করুন ({seconds}স)', - 'settings.agents.title': 'Agents', - 'settings.agents.subtitle': - 'Manage the agents available for delegation — built-in defaults and your own custom agents.', - 'settings.agents.menuDesc': 'Manage built-in and custom agents', - 'settings.agents.newAgent': 'New agent', - 'settings.agents.loadError': "Couldn't load agents", - 'settings.agents.empty': 'No agents yet', - 'settings.agents.sourceDefault': 'Built-in', - 'settings.agents.sourceCustom': 'Custom', - 'settings.agents.enable': 'Enable agent', - 'settings.agents.disable': 'Disable agent', - 'settings.agents.edit': 'Edit', - 'settings.agents.delete': 'Delete', - 'settings.agents.reset': 'Reset to default', - 'settings.agents.modelLabel': 'Model', - 'settings.agents.toolsLabel': 'Tools', - 'settings.agents.toolsAll': 'All tools', - 'settings.agents.toolsCount': '{count} tools', - 'settings.agents.actionFailed': "Couldn't update the agent", - 'settings.agents.orchestratorLocked': 'The orchestrator is always enabled.', - 'settings.agents.editor.createTitle': 'New agent', - 'settings.agents.editor.editTitle': 'Edit agent', - 'settings.agents.editor.id': 'ID', - 'settings.agents.editor.idHint': 'Lowercase letters, numbers, _ and - only.', - 'settings.agents.editor.name': 'Name', - 'settings.agents.editor.description': 'Description', - 'settings.agents.editor.model': 'Model (optional)', - 'settings.agents.editor.modelPlaceholder': 'e.g. inherit, hint:fast, or a model id', - 'settings.agents.editor.systemPrompt': 'System prompt (optional)', - 'settings.agents.editor.tools': 'Allowed tools', - 'settings.agents.editor.toolsHint': 'One tool name per line. Use * for all tools.', - 'settings.agents.editor.defaultsNote': - 'Editing a built-in agent saves an override you can reset later.', - 'settings.agents.editor.save': 'Save', - 'settings.agents.editor.create': 'Create agent', - 'settings.agents.editor.saving': 'Saving…', - 'settings.agentsSection.title': 'Agents', - 'settings.agentsSection.description': - 'Manage your agents, their autonomy, and what they can access on this computer.', - 'settings.agentsSection.menuDesc': 'Registry, autonomy & OS access', - 'settings.agents.editor.notFound': 'Agent not found.', - 'settings.agents.editor.modelInherit': 'Inherit (platform default)', - 'settings.agents.editor.modelHints': 'Route hints', - 'settings.agents.editor.modelTiers': 'Model tiers', - 'settings.agents.editor.modelCustom': 'Custom model id…', - 'settings.agents.editor.modelCustomPlaceholder': 'e.g. anthropic/claude-sonnet-4', - 'settings.agents.editor.selectTools': 'Add tools', - 'settings.agents.editor.toolsAllSelected': 'All tools', - 'settings.agents.editor.toolsNoneSelected': 'No tools selected', - 'settings.agents.editor.removeToolAria': 'Remove {tool}', - 'settings.agents.editor.toolsModalTitle': 'Allowed tools', - 'settings.agents.editor.toolsSelectedCount': '{count} selected', - 'settings.agents.editor.toolsSearchPlaceholder': 'Search tools…', - 'settings.agents.editor.toolsAllowAll': 'Allow all tools (*)', - 'settings.agents.editor.toolsAllowAllHint': 'This agent can use every available tool.', - 'settings.agents.editor.toolsLoading': 'Loading tools…', - 'settings.agents.editor.toolsLoadError': 'Couldn’t load tools', - 'settings.agents.editor.toolsEmpty': 'No tools match your search.', - 'settings.agents.editor.toolsDone': 'Done', - 'settings.agents.editor.builtInReadonly': - 'Built-in agents can’t be edited. You can enable, disable, or reset them from the agents list.', -}; - -export default bn2; diff --git a/app/src/lib/i18n/chunks/bn-3.ts b/app/src/lib/i18n/chunks/bn-3.ts deleted file mode 100644 index 0dedc491f..000000000 --- a/app/src/lib/i18n/chunks/bn-3.ts +++ /dev/null @@ -1,502 +0,0 @@ -import type { TranslationMap } from '../types'; - -// Bengali (বাংলা) chunk 3/5. Translated from chunks/en-3.ts. -const bn3: TranslationMap = { - 'insights.other': 'অন্যান্য', - 'insights.title': 'ইনসাইট', - 'insights.empty': 'এখনো কোনো ইনসাইট নেই। আপনার মেমোরি বাড়ার সাথে ইনসাইট তৈরি হবে।', - 'insights.description': 'আপনার মেমোরি গ্রাফে {count}টি সম্পর্কের উপর ভিত্তি করে।', - 'insights.items': 'আইটেম', - 'insights.more': 'আরও', - 'calls.joiningCall': 'কলে যোগ দিচ্ছে', - 'calls.meetWindowOpening': 'Meet উইন্ডো খুলছে...', - 'calls.failedToStart': 'Meet কল শুরু করতে ব্যর্থ', - 'calls.couldNotStart': 'কল শুরু করা যায়নি', - 'calls.failedToClose': 'কল বন্ধ করতে ব্যর্থ', - 'calls.couldNotClose': 'কল বন্ধ করা যায়নি', - 'calls.joinMeet': 'একটি Google Meet কলে যোগ দিন', - 'calls.joinMeetDescription': 'যোগ দিতে একটি Google Meet লিংক দিন।', - 'calls.meetLink': 'Meet লিংক', - 'calls.displayName': 'প্রদর্শন নাম', - 'calls.openingMeet': 'Meet খোলা হচ্ছে...', - 'calls.joinCall': 'কলে যোগ দিন', - 'calls.activeCalls': 'সক্রিয় কল', - 'calls.leave': 'ছেড়ে যান', - 'workspace.wipeConfirm': 'আপনি কি সব মেমোরি মুছতে চান? এটি পূর্বাবস্থায় ফেরানো যাবে না।', - 'workspace.resetTreeConfirm': 'আপনি কি মেমোরি ট্রি পুনর্নির্মাণ করতে চান?', - 'workspace.wipeTitle': 'মেমোরি মুছুন', - 'workspace.resetting': 'রিসেট হচ্ছে...', - 'workspace.resetMemory': 'মেমোরি রিসেট করুন', - 'workspace.resetTreeTitle': 'মেমোরি ট্রি পুনর্নির্মাণ', - 'workspace.rebuilding': 'পুনর্নির্মাণ হচ্ছে...', - 'workspace.resetMemoryTree': 'মেমোরি ট্রি রিসেট করুন', - 'workspace.building': 'নির্মাণ হচ্ছে...', - 'workspace.buildSummaryTrees': 'সারসংক্ষেপ ট্রি তৈরি করুন', - 'workspace.viewVault': 'ভল্ট দেখুন', - 'workspace.openingVaultTitle': 'ওবসিডিয়ানে ভল্ট খোলা হচ্ছে', - 'workspace.openingVaultMessage': - "If Obsidian doesn't open, install it from obsidian.md or use Reveal Folder. Vault path:", - 'workspace.openVaultFailedTitle': "Couldn't open vault in Obsidian", - 'workspace.openVaultFailedMessage': - 'ভল্ট ডিরেক্টরিটি সরাসরি খুলতে রিভিল ফোল্ডার ব্যবহার করুন। ভল্ট পাথ:', - 'workspace.revealVaultFailed': "Couldn't reveal vault folder", - 'workspace.revealFolder': 'ফোল্ডার প্রকাশ করুন', - 'workspace.checkingVault': 'Checking…', - 'workspace.vaultNotRegisteredHelp': - 'Obsidian only opens folders you\'ve added as a vault. In Obsidian, choose "Open folder as vault" and pick the folder below — you only need to do this once. Then click View Vault again.', - 'workspace.obsidianNotFoundHelp': - "We couldn't find Obsidian on this device. Install it, or — if it's installed somewhere non-standard — set its config folder under Advanced.", - 'workspace.openAnyway': 'Open in Obsidian anyway', - 'workspace.installObsidian': 'Install Obsidian', - 'workspace.obsidianAdvanced': 'Obsidian installed elsewhere?', - 'workspace.obsidianConfigDirLabel': 'Obsidian config folder', - 'workspace.obsidianConfigDirHint': - 'Path to the folder containing obsidian.json (e.g. ~/.config/obsidian). Leave blank to auto-detect.', - 'workspace.obsidianConfigDirPlaceholder': '~/.config/obsidian', - 'workspace.graphLoadFailed': 'মেমোরি গ্রাফ লোড করতে ব্যর্থ', - 'workspace.loadingGraph': 'মেমোরি গ্রাফ লোড হচ্ছে...', - 'workspace.graphViewMode': 'মেমোরি গ্রাফ ভিউ মোড', - 'workspace.trees': 'ট্রি', - 'workspace.contacts': 'যোগাযোগ', - 'graph.noContactMentions': 'কোনো যোগাযোগ উল্লেখ নেই', - 'graph.noMemory': 'কোনো মেমোরি নেই', - 'graph.source': 'উৎস', - 'graph.topic': 'বিষয়', - 'graph.global': 'বৈশ্বিক', - 'graph.document': 'ডকুমেন্ট', - 'graph.contact': 'যোগাযোগ', - 'graph.nodes': 'নোড', - 'graph.parentChild': 'প্যারেন্ট-চাইল্ড', - 'graph.documentContact': 'ডকুমেন্ট-যোগাযোগ', - 'graph.link': 'লিংক', - 'graph.links': 'লিংক', - 'graph.children': 'চাইল্ড', - 'graph.clickToOpenObsidian': 'Obsidian-এ খুলতে ক্লিক করুন', - 'graph.person': 'ব্যক্তি', - 'modal.dontShowAgain': 'একই ধরনের পরামর্শ আর দেখাবেন না', - 'reflections.loading': 'প্রতিফলন লোড হচ্ছে...', - 'reflections.empty': 'এখনো কোনো প্রতিফলন নেই', - 'reflections.title': 'প্রতিফলন', - 'reflections.proposedAction': 'প্রস্তাবিত কাজ', - 'reflections.act': 'কাজ করুন', - 'reflections.dismiss': 'বাদ দিন', - 'whatsapp.chatsSynced': 'চ্যাট সিঙ্ক হয়েছে', - 'whatsapp.chatSynced': 'চ্যাট সিঙ্ক হয়েছে', - 'sync.active': 'সক্রিয়', - 'sync.recent': 'সাম্প্রতিক', - 'sync.idle': 'নিষ্ক্রিয়', - 'sync.memorySources': 'মেমোরি উৎস', - 'sync.noConnectedSources': 'কোনো সংযুক্ত উৎস নেই', - 'sync.chunks': 'চাংক', - 'sync.lastChunk': 'শেষ চাংক:', - 'sync.pending': 'মুলতুবি', - 'sync.processed': 'প্রক্রিয়া করা হয়েছে', - 'sync.syncing': 'সিঙ্ক হচ্ছে…', - 'sync.sync': 'সিঙ্ক', - 'sync.failedToLoad': 'সিঙ্ক স্ট্যাটাস লোড করতে ব্যর্থ', - 'sync.noContent': - 'এখনো কোনো কন্টেন্ট মেমোরিতে সিঙ্ক হয়নি। শুরু করতে একটি ইন্টিগ্রেশন সংযুক্ত করুন।', - 'memorySources.title': 'Memory Sources', - 'memorySources.empty': 'No memory sources yet. Add one to start feeding memory.', - 'memorySources.loadingConnections': 'Loading connections…', - 'memorySources.noConnections': - 'No active Composio connections found. Connect an integration first.', - 'memorySources.pickConnection': 'Pick a connection', - 'memorySources.selectConnection': '— Select a connection —', - 'memorySources.composioListFailed': 'Failed to load Composio connections.', - 'memorySources.browse': 'Browse…', - 'memorySources.folderPathPlaceholder': '/Users/you/notes', - 'memorySources.globPatternPlaceholder': '**/*.md', - 'memorySources.repoUrlPlaceholder': 'https://github.com/org/repo', - 'memorySources.branchPlaceholder': 'main', - 'memorySources.feedUrlPlaceholder': 'https://example.com/feed.xml', - 'memorySources.pageUrlPlaceholder': 'https://example.com/article', - 'memorySources.cssSelectorPlaceholder': 'article', - 'memorySources.searchQueryPlaceholder': 'from:user AI safety', - 'memorySources.kind.composio': 'Integration', - 'memorySources.kind.folder': 'Local Folder', - 'memorySources.kind.github_repo': 'GitHub Repo', - 'memorySources.kind.twitter_query': 'Twitter Search', - 'memorySources.kind.rss_feed': 'RSS Feed', - 'memorySources.kind.web_page': 'Web Page', - 'memorySources.sync.successTitle': 'Syncing', - 'memorySources.sync.successMessage': 'Progress will appear shortly.', - 'memorySources.sync.failedTitle': 'Sync failed:', - 'time.justNow': 'just now', - 'time.secondsAgoSuffix': 's ago', - 'time.minutesAgoSuffix': 'm ago', - 'time.hoursAgoSuffix': 'h ago', - 'time.daysAgoSuffix': 'd ago', - 'memorySources.customSources': 'Custom Sources', - 'memorySources.addSource': 'Add Source', - 'memorySources.noCustomSources': - 'No custom sources yet. Add a folder, GitHub repo, RSS feed, or web page to start.', - 'memorySources.pickKind': 'What kind of source do you want to add?', - 'memorySources.backToKinds': 'Back to source types', - 'memorySources.label': 'Label', - 'memorySources.labelPlaceholder': 'My research notes', - 'memorySources.add': 'Add', - 'memorySources.adding': 'Adding…', - 'memorySources.added': 'Source added', - 'memorySources.removed': 'Source removed', - 'memorySources.remove': 'Remove', - 'memorySources.enable': 'Enable', - 'memorySources.disable': 'Disable', - 'memorySources.toggleFailed': 'Toggle failed', - 'memorySources.removeFailed': 'Remove failed', - 'memorySources.folderPath': 'Folder path', - 'memorySources.globPattern': 'Glob pattern', - 'memorySources.repoUrl': 'Repository URL', - 'memorySources.branch': 'Branch', - 'memorySources.feedUrl': 'Feed URL', - 'memorySources.pageUrl': 'Page URL', - 'memorySources.cssSelector': 'CSS selector (optional)', - 'memorySources.searchQuery': 'Search query', - 'backend.aiBackend': 'AI ব্যাকএন্ড', - 'backend.cloud': 'ক্লাউড', - 'backend.recommended': 'প্রস্তাবিত', - 'backend.cloudDescription': - 'আমাদের সার্ভারে হোস্ট করা দ্রুত, শক্তিশালী মডেল। সাথে সাথে ব্যবহারের জন্য প্রস্তুত।', - 'backend.privacyNote': 'কোনো ব্যক্তিগত ডেটা, বার্তা বা কী কখনো আমাদের সার্ভারে পাঠানো হয় না।', - 'backend.local': 'লোকাল', - 'backend.advanced': 'অ্যাডভান্সড', - 'backend.localDescription': - 'Ollama ব্যবহার করে নিজের মেশিনে মডেল চালান। সম্পূর্ণ গোপনীয়তা, সেটআপ প্রয়োজন।', - 'backend.ramRecommended': '16GB+ RAM প্রস্তাবিত', - 'subconscious.tasks': 'টাস্ক', - 'subconscious.ticks': 'টিক', - 'subconscious.last': 'শেষ', - 'subconscious.failed': 'ব্যর্থ', - 'subconscious.tickInterval': 'টিক ইন্টারভাল', - 'subconscious.runNow': 'এখনই চালান', - 'subconscious.providerUnavailableTitle': 'Subconscious বিরত আছে', - 'subconscious.providerSettings': 'AI সেটিংস', - 'subconscious.approvalNeeded': 'অনুমোদন প্রয়োজন', - 'subconscious.requiresApproval': 'অনুমোদন প্রয়োজন', - 'subconscious.fixInConnections': 'সংযোগে ঠিক করুন', - 'subconscious.goAhead': 'এগিয়ে যান', - 'subconscious.activeTasks': 'সক্রিয় টাস্ক', - 'subconscious.noActiveTasks': 'কোনো সক্রিয় টাস্ক নেই', - 'subconscious.default': 'ডিফল্ট', - 'subconscious.addTaskPlaceholder': 'একটি নতুন টাস্ক যোগ করুন...', - 'subconscious.activityLog': 'অ্যাক্টিভিটি লগ', - 'subconscious.noActivity': 'এখনো কোনো অ্যাক্টিভিটি নেই', - 'subconscious.decision.nothingNew': 'নতুন কিছু নেই', - 'subconscious.decision.completed': 'সম্পন্ন', - 'subconscious.decision.evaluating': 'মূল্যায়ন হচ্ছে', - 'subconscious.decision.waitingApproval': 'অনুমোদনের অপেক্ষায়', - 'subconscious.decision.failed': 'ব্যর্থ', - 'subconscious.decision.cancelled': 'বাতিল', - 'subconscious.decision.skipped': 'এড়িয়ে গেছে', - 'actionable.complete': 'সম্পন্ন', - 'actionable.dismiss': 'বাদ দিন', - 'actionable.snooze': 'স্নুজ', - 'actionable.new': 'নতুন', - 'stats.storage': 'স্টোরেজ', - 'stats.files': 'ফাইল', - 'stats.documents': 'ডকুমেন্ট', - 'stats.today': 'আজ', - 'stats.namespaces': 'নেমস্পেস', - 'stats.relations': 'সম্পর্ক', - 'stats.firstMemory': 'প্রথম মেমোরি', - 'stats.latest': 'সর্বশেষ', - 'stats.sessions': 'সেশন', - 'stats.tokens': 'টোকেন', - 'bootCheck.invalidUrl': 'একটি রানটাইম URL দিন।', - 'bootCheck.urlMustStartWith': 'URL-টি http:// বা https:// দিয়ে শুরু হতে হবে', - 'bootCheck.validUrlRequired': - 'এটি বৈধ URL মনে হচ্ছে না (চেষ্টা করুন https://core.example.com/rpc)', - 'bootCheck.tokenRequired': 'সংযোগ করতে একটি অথ টোকেন প্রয়োজন।', - 'bootCheck.chooseCoreMode': 'একটি রানটাইম বেছে নিন', - 'bootCheck.connectToCore': 'আপনার রানটাইমে সংযুক্ত হন', - 'bootCheck.desktopDescription': - 'OpenHuman চিন্তা করতে একটি রানটাইম প্রয়োজন। এটি কোথায় থাকবে তা বেছে নিন।', - 'bootCheck.webDescription': - 'ওয়েবে, OpenHuman আপনার নিয়ন্ত্রণে একটি রানটাইমে সংযুক্ত হয়। নিচে এর URL ও অথ টোকেন দিন, অথবা সরাসরি আপনার মেশিনে চালাতে ডেস্কটপ অ্যাপ নিন।', - 'bootCheck.preferDesktop': 'সব নিজের ডিভাইসে রাখতে চান?', - 'bootCheck.downloadDesktop': 'ডেস্কটপ অ্যাপ নিন', - 'bootCheck.localRecommended': 'লোকালি চালান (প্রস্তাবিত)', - 'bootCheck.localDescription': - 'সরাসরি আপনার কম্পিউটারে চলে। সবচেয়ে দ্রুত, সম্পূর্ণ ব্যক্তিগত, কিছু সেটআপ করতে হবে না।', - 'bootCheck.cloudMode': 'ক্লাউডে চালান (জটিল)', - 'bootCheck.cloudDescription': - 'অন্য কোথাও হোস্ট করা রানটাইমে সংযুক্ত হন। ২৪×৭ অনলাইন থাকে, এই ডিভাইস চালু রাখতে হয় না।', - 'bootCheck.coreRpcUrl': 'রানটাইম URL', - 'bootCheck.rpcUrlPlaceholder': 'https://core.example.com/rpc', - 'bootCheck.authToken': 'অথ টোকেন', - 'bootCheck.bearerTokenPlaceholder': 'আপনার রিমোট রানটাইম থেকে বেয়ারার টোকেন', - 'bootCheck.storedLocally': 'শুধু এই ডিভাইসে রাখা। পাঠানো হয় ', - 'bootCheck.testing': 'পরীক্ষা হচ্ছে…', - 'bootCheck.testConnection': 'সংযোগ পরীক্ষা করুন', - 'bootCheck.connectedOk': 'সংযুক্ত। সব ঠিকঠাক।', - 'bootCheck.authFailed': 'টোকেনটি কাজ করেনি। আবার পরীক্ষা করুন।', - 'bootCheck.unreachablePrefix': 'পৌঁছানো যায়নি:', - 'bootCheck.checkingCore': 'আপনার রানটাইম জাগানো হচ্ছে…', - 'bootCheck.cannotReach': 'রানটাইমে পৌঁছানো যাচ্ছে না', - 'bootCheck.cannotReachDesc': 'আপনার রানটাইমে সংযোগ করা যায়নি। অন্য একটি চেষ্টা করবেন?', - 'bootCheck.switchMode': 'ভিন্ন রানটাইম বেছে নিন', - 'bootCheck.quit': 'প্রস্থান', - 'bootCheck.legacyDetected': 'লেগ্যাসি ব্যাকগ্রাউন্ড রানটাইম শনাক্ত হয়েছে', - 'bootCheck.legacyDescription': - 'এই ডিভাইসে আলাদাভাবে ইনস্টল করা একটি OpenHuman ডেমন ইতিমধ্যে চলছে। বিল্ট-ইন রানটাইম নিয়ন্ত্রণ নেওয়ার আগে এটি সরাতে হবে।', - 'bootCheck.removing': 'সরানো হচ্ছে…', - 'bootCheck.removeContinue': 'সরান ও চালিয়ে যান', - 'bootCheck.localNeedsRestart': 'লোকাল রানটাইম রিস্টার্ট প্রয়োজন', - 'bootCheck.localNeedsRestartDesc': - 'আপনার লোকাল রানটাইম এই অ্যাপের চেয়ে ভিন্ন ভার্সনে আছে। দ্রুত রিস্টার্ট তাদের আবার সমন্বয় করবে।', - 'bootCheck.restarting': 'রিস্টার্ট হচ্ছে…', - 'bootCheck.restartCore': 'রানটাইম রিস্টার্ট করুন', - 'bootCheck.cloudNeedsUpdate': 'ক্লাউড রানটাইম আপডেট প্রয়োজন', - 'bootCheck.cloudNeedsUpdateDesc': - 'আপনার ক্লাউড রানটাইম এই অ্যাপের চেয়ে ভিন্ন ভার্সনে আছে। আপডেটার চালান।', - 'bootCheck.updating': 'আপডেট হচ্ছে…', - 'bootCheck.updateCloudCore': 'ক্লাউড রানটাইম আপডেট করুন', - 'bootCheck.versionCheckFailed': 'রানটাইম ভার্সন পরীক্ষা ব্যর্থ', - 'bootCheck.versionCheckFailedDesc': - 'আপনার রানটাইম চলছে কিন্তু ভার্সন জানাচ্ছে না। পুরনো হতে পারে। চালিয়ে যেতে রিস্টার্ট বা আপডেট করুন।', - 'bootCheck.working': 'কাজ হচ্ছে…', - 'bootCheck.restartUpdateCore': 'রানটাইম রিস্টার্ট / আপডেট করুন', - 'bootCheck.unexpectedError': 'অপ্রত্যাশিত বুট-চেক ত্রুটি', - 'bootCheck.actionFailed': 'কিছু একটা ভুল হয়েছে। আবার চেষ্টা করুন।', - 'bootCheck.portConflictTitle': 'অ্যাপ ইঞ্জিন চালু করা যায়নি', - 'bootCheck.portConflictBody': - 'অন্য একটি প্রক্রিয়া OpenHuman-এর প্রয়োজনীয় নেটওয়ার্ক পোর্ট ব্যবহার করছে। আমরা স্বয়ংক্রিয়ভাবে এটি ঠিক করার চেষ্টা করব।', - 'bootCheck.portConflictFixButton': 'স্বয়ংক্রিয়ভাবে ঠিক করুন', - 'bootCheck.portConflictFixing': 'ঠিক করা হচ্ছে…', - 'bootCheck.portConflictFixFailed': - 'স্বয়ংক্রিয় সংশোধন কাজ করেনি। অনুগ্রহ করে আপনার কম্পিউটার পুনরায় চালু করুন এবং আবার চেষ্টা করুন।', - 'notifications.justNow': 'এইমাত্র', - 'notifications.minAgo': '{n} মিনিট আগে', - 'notifications.hrAgo': '{n} ঘণ্টা আগে', - 'notifications.dayAgo': '{n} দিন আগে', - 'notifications.category.messages': 'বার্তা', - 'notifications.category.agents': 'এজেন্ট', - 'notifications.category.skills': 'স্কিলস', - 'notifications.category.system': 'সিস্টেম', - 'notifications.category.meetings': 'মিটিং', - 'notifications.category.reminders': 'রিমাইন্ডার', - 'notifications.category.important': 'গুরুত্বপূর্ণ', - 'about.update.status.checking': 'পরীক্ষা হচ্ছে...', - 'about.update.status.available': 'v{version} পাওয়া গেছে', - 'about.update.status.availableNoVersion': 'আপডেট পাওয়া গেছে', - 'about.update.status.downloading': 'ডাউনলোড হচ্ছে...', - 'about.update.status.readyToInstall': 'v{version} ইনস্টলের জন্য প্রস্তুত', - 'about.update.status.readyToInstallNoVersion': - 'নতুন ভার্সন ডাউনলোড হয়ে প্রস্তুত। প্রয়োগ করতে রিস্টার্ট করুন।', - 'about.update.status.installing': 'ইনস্টল হচ্ছে...', - 'about.update.status.restarting': 'রিস্টার্ট হচ্ছে...', - 'about.update.status.upToDate': 'আপনি সর্বশেষ ভার্সন চালাচ্ছেন।', - 'about.update.status.error': 'আপডেট পরীক্ষা ব্যর্থ', - 'about.update.status.default': 'আপডেট পরীক্ষা করুন', - 'welcome.connectionFailed': 'সংযোগ ব্যর্থ: {status} {statusText}', - 'welcome.connectionFailedMsg': 'সংযোগ ব্যর্থ: {message}', - 'welcome.continueLocally': 'স্থানীয়ভাবে চালিয়ে যান', - 'welcome.localSessionStarting': 'স্থানীয় অধিবেশন শুরু করা হচ্ছে...', - 'welcome.localSessionDesc': 'একটি অফলাইন skips__ BR__Ans স্থানীয় প্রোফাইল ব্যবহার করে।', - 'chat.agentChatDesc': 'এজেন্টের সাথে সরাসরি চ্যাট সেশন খুলুন।', - 'channels.activeRouteValue': '{authMode} এর মাধ্যমে {channel}', - 'privacy.dataKind.messages': 'বার্তা', - 'privacy.dataKind.agents': 'এজেন্ট', - 'privacy.dataKind.skills': 'স্কিলস', - 'privacy.dataKind.system': 'সিস্টেম', - 'privacy.dataKind.meetings': 'মিটিং', - 'privacy.dataKind.reminders': 'রিমাইন্ডার', - 'privacy.dataKind.important': 'গুরুত্বপূর্ণ', - 'onboarding.enableLocalAI': 'লোকাল AI সক্রিয় করুন', - 'onboarding.skills.status.available': 'পাওয়া যাচ্ছে', - 'onboarding.skills.status.connected': 'সংযুক্ত', - 'onboarding.skills.status.connecting': 'সংযোগ হচ্ছে', - 'onboarding.skills.status.error': 'ত্রুটি', - 'onboarding.skills.status.unavailable': 'পাওয়া যাচ্ছে না', - 'composio.statusUnavailable': 'স্ট্যাটাস পাওয়া যাচ্ছে না', - 'composio.envVarOverrides': 'সেট থাকলে, এই সেটিং ওভাররাইড করে।', - 'memory.day.sun': 'রবি', - 'memory.day.mon': 'সোম', - 'memory.day.tue': 'মঙ্গল', - 'memory.day.wed': 'বুধ', - 'memory.day.thu': 'বৃহঃ', - 'memory.day.fri': 'শুক্র', - 'memory.day.sat': 'শনি', - 'memory.ingesting': 'ইনজেস্ট হচ্ছে', - 'memory.ingestionQueued': 'কিউতে', - 'memory.ingestingTitle': '{title} ইনজেস্ট হচ্ছে', - 'mic.noAudioCaptured': 'কোনো অডিও ক্যাপচার হয়নি', - 'mic.noSpeechDetected': 'কোনো কথা শনাক্ত হয়নি', - 'mic.lowConfidenceResult': 'অডিও স্পষ্টভাবে বোঝা যায়নি — আবার চেষ্টা করুন', - 'mic.failedToStopRecording': 'রেকর্ডিং বন্ধ করতে ব্যর্থ: {message}', - 'mic.transcriptionFailed': 'ট্রান্সক্রিপশন ব্যর্থ: {message}', - 'reflections.kind.retrospective': 'পূর্বদর্শন', - 'reflections.kind.derivedFact': 'ডেরাইভড ফ্যাক্ট', - 'reflections.kind.moodInsight': 'মুড ইনসাইট', - 'reflections.kind.relationshipInsight': 'সম্পর্ক ইনসাইট', - 'graph.tooltip.summary': 'সারসংক্ষেপ', - 'graph.tooltip.contact': 'যোগাযোগ', - 'localModel.usage.never': 'কখনো না', - 'localModel.usage.mediumLoad': 'মাঝারি লোড', - 'localModel.usage.lowLoad': 'কম লোড', - 'localModel.usage.idleMode': 'আইডল মোড', - 'localModel.rebootstrapComplete': 'মডেল রি-বুটস্ট্র্যাপ সম্পন্ন।', - 'localModel.modelsVerified': 'লোকাল মডেল যাচাই করা হয়েছে।', - 'accounts.addModal.allConnected': 'সব সংযুক্ত', - 'accounts.addModal.title': 'অ্যাকাউন্ট যোগ করুন', - 'accounts.respondQueue.empty': 'খালি', - 'accounts.respondQueue.hide': 'প্রতিক্রিয়া সারি লুকান', - 'accounts.respondQueue.loadFailed': 'রেসপন্ড কিউ লোড করতে ব্যর্থ', - 'accounts.respondQueue.loading': 'কিউ লোড হচ্ছে…', - 'accounts.respondQueue.pending': 'মুলতুবি', - 'accounts.respondQueue.show': 'প্রতিক্রিয়া সারি দেখান', - 'accounts.respondQueue.title': 'রেসপন্ড কিউ', - 'accounts.webviewHost.almostReady': 'প্রায় প্রস্তুত...', - 'accounts.webviewHost.loadTimeout': 'Webview লোড টাইমআউট', - 'accounts.webviewHost.loading': '{providerName} লোড হচ্ছে...', - 'accounts.webviewHost.loadingAccount': 'অ্যাকাউন্ট লোড হচ্ছে', - 'accounts.webviewHost.restoringSession': 'সেশন পুনরুদ্ধার হচ্ছে...', - 'accounts.webviewHost.retryLoading': 'লোড আবার চেষ্টা করুন', - 'accounts.webviewHost.takingLonger': '{providerName} প্রত্যাশার চেয়ে বেশি সময় নিচ্ছে।', - 'accounts.webviewHost.timeoutHint': 'টাইমআউট হিন্ট', - 'app.connectionBadge.composio': 'Composio', - 'app.connectionBadge.messaging': 'মেসেজিং', - 'app.connectionIndicator.connected': 'OpenHuman AI-এ সংযুক্ত 🚀', - 'app.connectionIndicator.connecting': 'সংযোগ হচ্ছে', - 'app.connectionIndicator.coreOffline': 'কোর অফলাইন', - 'app.connectionIndicator.disconnected': 'সংযোগ বিচ্ছিন্ন', - 'app.connectionIndicator.offline': 'অফলাইন', - 'app.connectionIndicator.reconnecting': 'পুনঃসংযোগ হচ্ছে…', - 'app.errorFallback.componentStack': 'কম্পোনেন্ট স্ট্যাক', - 'app.errorFallback.downloadLatest': 'সর্বশেষ ডাউনলোড করুন', - 'app.errorFallback.heading': 'শিরোনাম', - 'app.errorFallback.hint': 'হিন্ট', - 'app.errorFallback.reloadApp': 'অ্যাপ রিলোড করুন', - 'app.errorFallback.subheading': 'উপশিরোনাম', - 'app.errorFallback.tryRecover': 'পুনরুদ্ধার চেষ্টা করুন', - 'app.localAiDownload.installing': 'ইনস্টল হচ্ছে...', - 'app.localAiDownload.preparing': 'প্রস্তুত হচ্ছে...', - 'app.openhumanLink.accounts.continueWith': '{label} সাইন-ইন দিয়ে চালিয়ে যান', - 'app.openhumanLink.accounts.done': 'সম্পন্ন', - 'app.openhumanLink.accounts.intro': 'ভূমিকা', - 'app.openhumanLink.accounts.webviewNote': 'Webview নোট', - 'app.openhumanLink.billing.openDashboard': 'ড্যাশবোর্ড খুলুন', - 'app.openhumanLink.billing.stayOnTrial': 'ট্রায়ালে থাকুন', - 'app.openhumanLink.billing.trialCredit': 'ট্রায়াল ক্রেডিট', - 'app.openhumanLink.billing.trialDesc': 'ট্রায়াল বিবরণ', - 'app.openhumanLink.defaultBody': 'পপআপে এখনো প্রস্তুত নয়। সম্পূর্ণ সেটিংস পেজ খুলুন যখন', - 'app.openhumanLink.discord.intro': 'ভূমিকা', - 'app.openhumanLink.discord.openInvite': 'আমন্ত্রণ খুলুন', - 'app.openhumanLink.discord.perk1': 'সুবিধা ১', - 'app.openhumanLink.discord.perk2': 'সুবিধা ২', - 'app.openhumanLink.discord.perk3': 'সুবিধা ৩', - 'app.openhumanLink.discord.perk4': 'সুবিধা ৪', - 'app.openhumanLink.done': 'সম্পন্ন', - 'app.openhumanLink.loadingChannelSetup': 'চ্যানেল সেটআপ লোড হচ্ছে', - 'app.openhumanLink.maybeLater': 'হয়তো পরে', - 'app.openhumanLink.notifications.asking': 'OS-এ জিজ্ঞেস করছে…', - 'app.openhumanLink.notifications.blocked': 'ব্লক করা', - 'app.openhumanLink.notifications.blockedStep1': 'ব্লক করা ধাপ ১', - 'app.openhumanLink.notifications.blockedStep2': 'ব্লক করা ধাপ ২', - 'app.openhumanLink.notifications.blockedStep3': 'ব্লক করা ধাপ ৩', - 'app.openhumanLink.notifications.intro': 'ভূমিকা', - 'app.openhumanLink.notifications.promptHint': 'প্রম্পট হিন্ট', - 'app.openhumanLink.notifications.retry': 'পরীক্ষা বিজ্ঞপ্তি আবার চেষ্টা করুন', - 'app.openhumanLink.notifications.send': 'পরীক্ষা বিজ্ঞপ্তি পাঠান', - 'app.openhumanLink.notifications.sendFailed': 'পাঠানো যায়নি: {error}', - 'app.openhumanLink.notifications.sent': - 'টেস্ট নোটিফিকেশন পাঠানো হয়েছে। যদি না পেয়ে থাকেন, System Settings → Notifications → OpenHuman-এ যান, Allow Notifications চালু করুন, এবং Banner Style-কে Persistent-এ সেট করুন।', - 'app.openhumanLink.skipForNow': 'এখনের জন্য এড়িয়ে যান', - 'app.openhumanLink.telegramUnavailable': 'Telegram পাওয়া যাচ্ছে না', - 'app.openhumanLink.title.accounts': 'আপনার অ্যাপ সংযুক্ত করুন', - 'app.openhumanLink.title.billing': 'বিলিং ও ক্রেডিট', - 'app.openhumanLink.title.discord': 'কমিউনিটিতে যোগ দিন', - 'app.openhumanLink.title.messaging': 'একটি চ্যাট চ্যানেল সংযুক্ত করুন', - 'app.openhumanLink.title.notifications': 'বিজ্ঞপ্তির অনুমতি দিন', - 'app.persistRehydration.body': 'বডি', - 'app.persistRehydration.heading': 'শিরোনাম', - 'app.persistRehydration.resetCta': 'রিসেট হচ্ছে…', - 'app.persistRehydration.resetting': 'রিসেট হচ্ছে…', - 'app.routeLoading.initializing': 'OpenHuman শুরু হচ্ছে...', - 'app.update.currentlyOn': '{version}', - 'app.update.errorFallback': 'আপডেটের সময় কিছু একটা ভুল হয়েছে।', - 'app.update.header.default': 'আপডেট', - 'app.update.header.error': 'আপডেট ব্যর্থ', - 'app.update.header.installing': 'আপডেট ইনস্টল হচ্ছে', - 'app.update.header.readyToInstall': 'আপডেট ইনস্টলের জন্য প্রস্তুত', - 'app.update.header.restarting': 'রিস্টার্ট হচ্ছে…', - 'app.update.later': 'পরে', - 'app.update.newVersionReady': 'একটি নতুন ভার্সন ইনস্টলের জন্য প্রস্তুত।', - 'app.update.progress.downloaded': '{amount} ডাউনলোড হয়েছে', - 'app.update.progress.installing': 'নতুন ভার্সন ইনস্টল হচ্ছে…', - 'app.update.progress.restarting': 'অ্যাপ পুনরায় লঞ্চ হচ্ছে…', - 'app.update.progress.working': '{percent}%', - 'app.update.restartNote': 'রিস্টার্ট নোট', - 'app.update.restartNow': 'এখনই রিস্টার্ট করুন', - 'app.update.versionReady': 'ভার্সন {newVersion} ইনস্টলের জন্য প্রস্তুত।', - 'channels.discord.accountLinked': 'অ্যাকাউন্ট লিংক হয়েছে', - 'channels.discord.connect': 'সংযুক্ত করুন', - 'channels.discord.linkTokenExpired': 'লিংক টোকেনের মেয়াদ শেষ। আবার চেষ্টা করুন।', - 'channels.discord.linkTokenInstruction': '{token}', - 'channels.discord.linkTokenLabel': 'লিংক টোকেন লেবেল', - 'channels.discord.linkTokenOnce': 'লিংক টোকেন একবার', - 'channels.discord.picker.allPermissionsOk': 'বট এই চ্যানেলে সব প্রয়োজনীয় অনুমতি পেয়েছে।', - 'channels.discord.picker.botNotInServers': 'বট কোনো সার্ভারে নেই', - 'channels.discord.picker.category': 'ক্যাটাগরি', - 'channels.discord.picker.channel': 'চ্যানেল', - 'channels.discord.picker.checkingPermissions': 'অনুমতি পরীক্ষা হচ্ছে', - 'channels.discord.picker.loadingChannels': 'চ্যানেল লোড হচ্ছে...', - 'channels.discord.picker.loadingServers': 'সার্ভার লোড হচ্ছে...', - 'channels.discord.picker.missingPermissions': 'অনুমতি নেই', - 'channels.discord.picker.noChannels': 'কোনো টেক্সট চ্যানেল পাওয়া যায়নি', - 'channels.discord.picker.noServers': 'কোনো সার্ভার পাওয়া যায়নি', - 'channels.discord.picker.selectChannel': 'একটি চ্যানেল বেছে নিন', - 'channels.discord.picker.selectServer': 'একটি সার্ভার বেছে নিন', - 'channels.discord.picker.server': 'সার্ভার', - 'channels.discord.picker.serverChannelSelection': 'সার্ভার ও চ্যানেল নির্বাচন', - 'channels.discord.savedRestartRequired': 'চ্যানেল সংরক্ষিত। সক্রিয় করতে অ্যাপ রিস্টার্ট করুন।', - 'channels.telegram.connect': 'সংযুক্ত করুন', - 'channels.telegram.managedDmConnecting': 'ম্যানেজড DM সংযোগ হচ্ছে', - 'channels.telegram.managedDmTimeout': 'ম্যানেজড DM টাইমআউট', - 'channels.telegram.reconnect': 'পুনরায় সংযুক্ত করুন', - 'channels.telegram.savedRestartRequired': 'চ্যানেল সংরক্ষিত। সক্রিয় করতে অ্যাপ রিস্টার্ট করুন।', - 'channels.web.alwaysAvailable': 'সর্বদা পাওয়া যায়', - 'channels.discord.displayName': 'Discord', - 'channels.discord.description': 'Discord এর মাধ্যমে বার্তা পাঠান এবং গ্রহণ করুন।', - 'channels.discord.authMode.bot_token.description': 'আপনার নিজস্ব Discord বট টোকেন প্রদান করুন।', - 'channels.discord.authMode.oauth.description': - 'OAuth এর মাধ্যমে আপনার Discord সার্ভারে OpenHuman বট ইনস্টল করুন।', - 'channels.discord.authMode.managed_dm.description': - 'আপনার ব্যক্তিগত Discord অ্যাকাউন্টটি OpenHuman বটের সাথে লিঙ্ক করুন।', - 'channels.discord.fields.bot_token.label': 'বট টোকেন', - 'channels.discord.fields.bot_token.placeholder': 'আপনার Discord বট টোকেন', - 'channels.discord.fields.guild_id.label': 'সার্ভার (গিল্ড) আইডি', - 'channels.discord.fields.guild_id.placeholder': 'ঐচ্ছিক: একটি নির্দিষ্ট সার্ভারে সীমাবদ্ধ', - 'channels.telegram.displayName': 'Telegram', - 'channels.telegram.description': 'Telegram এর মাধ্যমে বার্তা পাঠান এবং গ্রহণ করুন।', - 'channels.telegram.authMode.managed_dm.description': 'সরাসরি OpenHuman Telegram বটকে মেসেজ করুন।', - 'channels.telegram.authMode.bot_token.description': - '@BotFather থেকে আপনার নিজস্ব Telegram বট টোকেন প্রদান করুন।', - 'channels.telegram.fields.bot_token.label': 'বট টোকেন', - 'channels.telegram.fields.bot_token.placeholder': '123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11', - 'channels.telegram.fields.allowed_users.label': 'অনুমোদিত ব্যবহারকারীদের', - 'channels.telegram.fields.allowed_users.placeholder': - 'কমা দ্বারা পৃথক করা Telegram ব্যবহারকারীর নাম', - 'channels.web.displayName': 'ওয়েব', - 'channels.web.description': 'বিল্ট-ইন ওয়েব UI এর মাধ্যমে চ্যাট করুন।', - 'channels.web.authMode.managed_dm.description': - 'এমবেড করা ওয়েব চ্যাট ব্যবহার করুন — কোনো সেটআপের প্রয়োজন নেই।', - 'welcome.continueLocallyExperimental': 'স্থানীয়ভাবে চালিয়ে যান (পরীক্ষামূলক)', - 'channels.yuanbao.connect': 'Connect', - 'channels.yuanbao.connecting': 'Connecting…', - 'channels.yuanbao.fieldRequired': '{field} is required', - 'channels.yuanbao.reconnect': 'Reconnect', - 'channels.yuanbao.savedRestartRequired': 'Channel saved. Restart the app to activate it.', - 'channels.yuanbao.unexpectedStatus': 'Unexpected connection status: {status}', - 'chat.approval.approve': 'Approve', - 'chat.approval.alwaysAllow': 'Always allow', - 'chat.approval.alwaysAllowHint': 'Stop asking for this tool — add it to your Always-allow list', - 'chat.approval.deciding': 'Working…', - 'chat.approval.deny': 'Deny', - 'chat.approval.error': 'Could not record your decision — try again.', - 'chat.approval.fallback': 'The agent wants to run an action that needs your approval.', - 'chat.approval.title': 'Approval needed', - 'chat.approval.tool': 'Tool:', -}; - -export default bn3; diff --git a/app/src/lib/i18n/chunks/bn-4.ts b/app/src/lib/i18n/chunks/bn-4.ts deleted file mode 100644 index 694e0a0fc..000000000 --- a/app/src/lib/i18n/chunks/bn-4.ts +++ /dev/null @@ -1,488 +0,0 @@ -import type { TranslationMap } from '../types'; - -// Bengali (বাংলা) chunk 4/5. Translated from chunks/en-4.ts. -const bn4: TranslationMap = { - 'chat.unsubscribeApproval.approve': 'অনুমোদন ও আনসাবস্ক্রাইব', - 'chat.unsubscribeApproval.approved': '✓ সফলভাবে আনসাবস্ক্রাইব হয়েছে।', - 'chat.unsubscribeApproval.denied': '✕ অনুরোধ প্রত্যাখ্যাত।', - 'chat.unsubscribeApproval.deny': 'প্রত্যাখ্যান করুন', - 'chat.unsubscribeApproval.processing': 'প্রক্রিয়া হচ্ছে...', - 'chat.unsubscribeApproval.title': 'আনসাবস্ক্রাইব অনুরোধ', - 'commandPalette.ariaLabel': 'কমান্ড প্যালেট', - 'commandPalette.description': 'বিবরণ', - 'commandPalette.label': 'কমান্ড', - 'commandPalette.noResults': 'কোনো ফলাফল নেই', - 'commandPalette.placeholder': 'একটি কমান্ড টাইপ করুন বা খুঁজুন…', - 'commandPalette.searchAria': 'কমান্ড খুঁজুন', - 'commandPalette.shortcutHint': 'সব শর্টকাটের জন্য ? চাপুন', - 'commandPalette.title': 'কমান্ড প্যালেট', - 'composio.connect.additionalConfigRequired': 'অতিরিক্ত কনফিগ প্রয়োজন', - 'composio.connect.atlassianSubdomainHint': 'acme', - 'composio.connect.atlassianSubdomainLabel': 'Atlassian সাবডোমেইন লেবেল', - 'composio.connect.connect': 'সংযোগ করুন', - 'composio.connect.connectionFailed': 'সংযোগ ব্যর্থ (স্ট্যাটাস: {status})।', - 'composio.connect.disconnectFailed': 'সংযোগ বিচ্ছিন্ন করতে ব্যর্থ: {msg}', - 'composio.connect.disconnecting': 'সংযোগ বিচ্ছিন্ন হচ্ছে…', - 'composio.connect.idleDescription': 'সংযোগ করুন আপনার', - 'composio.connect.idleDescriptionSuffix': - 'অ্যাকাউন্ট। আমরা একটি ব্রাউজার উইন্ডো খুলব, সেখানে আপনি অ্যাক্সেস অনুমোদন করবেন, এবং এই অ্যাপ স্বয়ংক্রিয়ভাবে সংযোগ শনাক্ত করবে।', - 'composio.connect.isConnected': 'সংযুক্ত।', - 'composio.connect.manage': 'পরিচালনা', - 'composio.connect.needsSubdomain': 'সংযোগ করতে', - 'composio.connect.needsSubdomainSuffix': - 'আপনার Atlassian সাবডোমেইন লিখুন (যেমন acme.atlassian.net-এর জন্য acme) এবং আবার চেষ্টা করুন।', - 'composio.connect.oauthComplete': 'OAuth সম্পূর্ণ করতে…', - 'composio.connect.oauthTimeout': 'OAuth টাইমআউট', - 'composio.connect.permissions': 'অনুমতি', - 'composio.connect.permissionsDefault': 'পড়া + লেখা ডিফল্টে সক্রিয়', - 'composio.connect.permissionsNote': 'প্রকাশ করতে পারে', - 'composio.connect.permissionsNoteSuffix': - 'OpenHuman-এর নিজস্ব এজেন্ট অনুমতি নিচে read, write, এবং admin টগল হিসেবে নিয়ন্ত্রিত।', - 'composio.connect.reopenBrowser': 'ব্রাউজার আবার খুলুন', - 'composio.connect.requestingUrl': 'সংযোগ URL অনুরোধ হচ্ছে…', - 'composio.connect.retryConnection': 'সংযোগ আবার চেষ্টা করুন', - 'composio.connect.scopeLoadError': 'স্কোপ পছন্দ লোড করা যায়নি: {msg}', - 'composio.connect.scopeSaveError': '{key} স্কোপ সংরক্ষণ করা যায়নি: {msg}', - 'composio.connect.subdomainInvalid': - 'শুধু সংক্ষিপ্ত সাবডোমেইন লিখুন (যেমন "acme"), পুরো URL নয়। এতে শুধু অক্ষর, সংখ্যা এবং হাইফেন থাকা উচিত।', - 'composio.connect.subdomainRequired': 'চালিয়ে যেতে আপনার Atlassian সাবডোমেইন দিন।', - 'composio.connect.dynamicsOrgNameLabel': 'Dynamics 365 সংস্থার নাম', - 'composio.connect.dynamicsOrgNameHint': - 'উদাহরণস্বরূপ, myorg.crm.dynamics.com-এর জন্য "myorg"। সম্পূর্ণ URL নয়, শুধু সংক্ষিপ্ত সংস্থার নাম লিখুন।', - 'composio.connect.needsFieldsPrefix': 'সংযোগ করতে', - 'composio.connect.needsFieldsSuffix': - 'আমাদের আরও কিছু তথ্য প্রয়োজন। নিচের অনুপস্থিত ফিল্ডগুলি পূরণ করুন এবং আবার চেষ্টা করুন।', - 'composio.connect.requiredFieldEmpty': 'এই ফিল্ডটি আবশ্যক।', - 'composio.connect.wabaIdHint': - 'আপনার Meta অ্যাক্সেস টোকেন ব্যবহার করে GET /me/businesses তারপর GET /{business_id}/owned_whatsapp_business_accounts এর মাধ্যমে এটি খুঁজে পান।', - 'composio.connect.wabaIdLabel': 'WABA ID লেবেল', - 'composio.connect.wabaIdRequired': - 'চালিয়ে যেতে আপনার WhatsApp Business Account ID (WABA ID) দিন।', - 'composio.connect.waitingFor': 'অপেক্ষা করছে', - 'composio.connect.waitingHint': 'অপেক্ষার হিন্ট', - 'composio.triggers.heading': 'ট্রিগার', - 'composio.triggers.listenFrom': 'ইভেন্টের জন্য শুনুন', - 'composio.triggers.loadError': 'ট্রিগার লোড করা যায়নি', - 'composio.triggers.needsConfiguration': 'কনফিগারেশন প্রয়োজন', - 'composio.triggers.noneAvailable': 'বর্তমানে কোনো ট্রিগার উপলব্ধ নেই', - 'conversations.taskKanban.moveLeft': 'বামে সরান', - 'conversations.taskKanban.moveRight': 'ডানে সরান', - 'conversations.taskKanban.title': 'টাস্ক', - 'conversations.toolTimeline.turn': 'টার্ন', - 'conversations.toolTimeline.workerThread': 'ওয়ার্কার থ্রেড', - 'daemon.serviceBlockingGate.body': 'বডি', - 'daemon.serviceBlockingGate.downloadHint': 'ডাউনলোড হিন্ট', - 'daemon.serviceBlockingGate.downloadLatest': 'সর্বশেষ সংস্করণ ডাউনলোড করুন', - 'daemon.serviceBlockingGate.retryCore': 'Core আবার চেষ্টা করুন', - 'daemon.serviceBlockingGate.retryFailed': - 'আবার চেষ্টা ব্যর্থ। সর্বশেষ অ্যাপ বিল্ড ডাউনলোড করে আবার চেষ্টা করুন।', - 'daemon.serviceBlockingGate.retrying': 'আবার চেষ্টা হচ্ছে...', - 'daemon.serviceBlockingGate.title': 'OpenHuman কোর পাওয়া যাচ্ছে না', - 'home.banners.discordSubtitle': 'Discord সাবটাইটেল', - 'home.banners.discordTitle': 'আমাদের Discord-এ যোগ দিন', - 'home.banners.earlyBirdDismiss': 'আর্লি বার্ড ব্যানার বাদ দিন', - 'home.banners.earlyBirdFirstSub': 'প্রথম সাবস্ক্রিপশন।', - 'home.banners.earlyBirdOn': 'আর্লি বার্ড চালু', - 'home.banners.earlyBirdTitle': 'প্রথম ১,০০০ ব্যবহারকারী ৬০% ছাড় পাবেন।', - 'home.banners.earlyBirdUseCode': 'আর্লি বার্ড কোড ব্যবহার করুন', - 'home.banners.getSubscription': 'সাবস্ক্রিপশন নিন', - 'home.banners.promoCreditsBody': 'প্রোমো ক্রেডিট বডি', - 'home.banners.promoCreditsTitle': '{amount}', - 'home.banners.promoCreditsUsage': 'প্রোমো ক্রেডিট ব্যবহার', - 'intelligence.memoryChunk.detail.chunk': 'চাংক', - 'intelligence.memoryChunk.detail.copyChunkId': 'চাংক ID কপি করুন', - 'intelligence.memoryChunk.detail.embeddingInfo': 'bge-m3 1024dim', - 'intelligence.memoryChunk.detail.noEmbedding': 'কোনো এম্বেডিং নেই', - 'intelligence.memoryChunk.letterhead.from': 'থেকে', - 'intelligence.memoryChunk.letterhead.to': 'পর্যন্ত', - 'intelligence.memoryChunk.mentioned.chunkOne': '১টি চাঙ্ক', - 'intelligence.memoryChunk.mentioned.chunkOther': '{count}টি চাঙ্ক', - 'intelligence.memoryChunk.mentioned.heading': 'উ ল্লে খি ত', - 'intelligence.memoryChunk.scoreBars.ariaScore': '{name} স্কোর {pct} শতাংশ', - 'intelligence.memoryChunk.scoreBars.atThreshold': '{threshold}-এ', - 'intelligence.memoryChunk.scoreBars.dropped': 'বাদ দেওয়া হয়েছে', - 'intelligence.memoryChunk.scoreBars.heading': 'কে ন রা খা', - 'intelligence.memoryChunk.scoreBars.kept': 'রাখা হয়েছে', - 'intelligence.diagram.title': 'Architecture Diagram', - 'intelligence.diagram.description': - 'Latest local architecture output from the configured diagram endpoint.', - 'intelligence.diagram.refresh': 'Refresh', - 'intelligence.diagram.refreshAria': 'Refresh diagram', - 'intelligence.diagram.emptyTitle': 'No diagram available yet', - 'intelligence.diagram.emptyDescription': - 'Generate an architecture diagram from the orchestrator and this panel will refresh from the configured local endpoint.', - 'intelligence.diagram.skillInstallCommand': 'npx skills add yizhiyanhua-ai/fireworks-tech-graph', - 'intelligence.diagram.promptExample': - 'Generate an architecture diagram of the current swarm in dark terminal style', - 'intelligence.diagram.imageAlt': 'Latest generated OpenHuman architecture diagram', - 'intelligence.diagram.refreshesEvery': 'Refreshes every {seconds}s', - 'intelligence.memoryText.entityTypePrefix': 'এনটিটি ধরন', - 'intelligence.screenDebug.active': 'সক্রিয়', - 'intelligence.screenDebug.app': 'অ্যাপ', - 'intelligence.screenDebug.bounds': 'সীমানা', - 'intelligence.screenDebug.captureAlt': 'ক্যাপচার পরীক্ষার ফলাফল', - 'intelligence.screenDebug.captureFailed': 'ব্যর্থ', - 'intelligence.screenDebug.captureSuccess': 'সফল', - 'intelligence.screenDebug.captureTest': 'ক্যাপচার পরীক্ষা', - 'intelligence.screenDebug.capturing': 'ক্যাপচার হচ্ছে', - 'intelligence.screenDebug.frames': 'ফ্রেম', - 'intelligence.screenDebug.idle': 'নিষ্ক্রিয়', - 'intelligence.screenDebug.lastApp': 'শেষ অ্যাপ', - 'intelligence.screenDebug.mode': 'মোড', - 'intelligence.screenDebug.permAccessibility': 'অ্যাক্সেসিবিলিটি অনুমতি', - 'intelligence.screenDebug.permInput': 'ইনপুট অনুমতি', - 'intelligence.screenDebug.permScreen': 'অ্যাক্সেসিবিলিটি', - 'intelligence.screenDebug.permissions': 'অনুমতি', - 'intelligence.screenDebug.platformNotSupported': 'প্ল্যাটফর্ম সমর্থিত নয়', - 'intelligence.screenDebug.recentVisionSummaries': 'সাম্প্রতিক ভিশন সারসংক্ষেপ', - 'intelligence.screenDebug.session': 'সেশন', - 'intelligence.screenDebug.size': 'আকার', - 'intelligence.screenDebug.status': 'স্ট্যাটাস', - 'intelligence.screenDebug.testCapture': 'ক্যাপচার পরীক্ষা করুন', - 'intelligence.screenDebug.time': 'সময়', - 'intelligence.screenDebug.title': 'শিরোনাম', - 'intelligence.screenDebug.unknown': 'অজানা', - 'intelligence.screenDebug.visionQueue': 'ভিশন কিউ', - 'intelligence.screenDebug.visionState': 'ভিশন স্টেট', - 'intelligence.tasks.activeBoardOne': 'কথোপকথনজুড়ে ১টি সক্রিয় বোর্ড', - 'intelligence.tasks.activeBoardOther': 'কথোপকথনজুড়ে {count}টি সক্রিয় বোর্ড', - 'intelligence.tasks.empty': 'এখনো কোনো এজেন্ট টাস্ক বোর্ড নেই', - 'intelligence.tasks.emptyHint': 'খালি হিন্ট', - 'intelligence.tasks.failedToLoad': 'লোড করতে ব্যর্থ', - 'intelligence.tasks.live': 'লাইভ', - 'intelligence.tasks.loadingBoards': 'টাস্ক বোর্ড লোড হচ্ছে…', - 'intelligence.tasks.threadPrefix': 'থ্রেড {thread}', - 'intelligence.tasks.subtitle': 'Your tasks and agent task boards across the workspace.', - 'intelligence.tasks.newTask': 'New task', - 'intelligence.tasks.personalBoardTitle': 'Agent Tasks', - 'intelligence.tasks.personalEmpty': 'No personal tasks yet', - 'intelligence.tasks.composer.title': 'New task', - 'intelligence.tasks.composer.titleLabel': 'Title', - 'intelligence.tasks.composer.titlePlaceholder': 'What needs to be done?', - 'intelligence.tasks.composer.statusLabel': 'Status', - 'intelligence.tasks.composer.attachLabel': 'Attach to conversation', - 'intelligence.tasks.composer.attachNone': 'Personal (no conversation)', - 'intelligence.tasks.composer.objectiveLabel': 'Objective', - 'intelligence.tasks.composer.objectivePlaceholder': 'Optional — the desired outcome', - 'intelligence.tasks.composer.notesLabel': 'Notes', - 'intelligence.tasks.composer.notesPlaceholder': 'Optional notes', - 'intelligence.tasks.composer.create': 'Create task', - 'intelligence.tasks.composer.creating': 'Creating…', - 'intelligence.tasks.composer.createFailed': "Couldn't create the task", - 'notifications.card.dismiss': 'বিজ্ঞপ্তি বাদ দিন', - 'notifications.card.importanceTitle': 'গুরুত্ব: {pct}%', - 'notifications.center.empty': 'এখনো কোনো বিজ্ঞপ্তি নেই', - 'notifications.center.emptyHint': 'খালি হিন্ট', - 'notifications.center.filterAll': 'সব ফিল্টার', - 'notifications.center.markAllRead': 'সব পঠিত চিহ্নিত করুন', - 'notifications.center.title': 'বিজ্ঞপ্তি', - 'oauth.button.loopbackTimeout': - 'সাইন-ইন টাইম আউট হয়েছে — ব্রাউজার OAuth পুনর্নির্দেশনা সম্পন্ন করেনি। অনুগ্রহ করে আবার চেষ্টা করুন।', - 'oauth.button.connecting': 'সংযোগ হচ্ছে...', - 'oauth.login.continueWith': 'দিয়ে চালিয়ে যান', - 'onboarding.contextGathering.buildingDesc': 'বিল্ডিং বিবরণ', - 'onboarding.contextGathering.buildingProfile': 'আপনার প্রোফাইল তৈরি হচ্ছে...', - 'onboarding.contextGathering.continueToChat': 'চ্যাটে চালিয়ে যান', - 'onboarding.contextGathering.errorDesc': - 'আমরা এখনই আপনার পূর্ণ প্রোফাইল তৈরি করতে পারিনি, কিন্তু সমস্যা নেই — আপনি চালিয়ে যেতে পারেন এবং আপনার প্রোফাইল সময়ের সাথে তৈরি হবে।', - 'onboarding.contextGathering.coreAlive': 'কোর সংযোগযোগ্য — প্রথম লঞ্চ এক মিনিট সময় নিতে পারে।', - 'onboarding.contextGathering.coreAliveProbing': 'কোর সংযোগ যাচাই করা হচ্ছে…', - 'onboarding.contextGathering.coreUnreachable': - 'কোর সাড়া দিচ্ছে না। আপনি চালিয়ে যেতে পারেন এবং পরে আবার চেষ্টা করতে পারেন।', - 'onboarding.contextGathering.stillWorkingDesc': - 'আমরা আপনার লোকাল মডেল এবং টুলস প্রস্তুত করছি, প্রথম লঞ্চ ৩০–৬০ সেকেন্ড সময় নিতে পারে। আপনি যেকোনো সময় চ্যাটে যেতে পারেন — প্রোফাইল তৈরি ব্যাকগ্রাউন্ডে চলতে থাকবে।', - 'onboarding.contextGathering.stillWorkingTitle': 'এখনও আপনার প্রোফাইলে কাজ চলছে…', - 'onboarding.contextGathering.title': 'কন্টেক্সট সংগ্রহ', - 'openhuman.team_list_teams': 'টিম তালিকা', - 'overlay.ariaAttention': 'মনোযোগের বার্তা', - 'overlay.ariaCompanion': 'কম্প্যানিয়ন সক্রিয়', - 'overlay.ariaOrb': 'OpenHuman ওভারলে', - 'overlay.ariaVoiceActive': 'ভয়েস ইনপুট সক্রিয়', - 'overlay.companion.error': 'ত্রুটি', - 'overlay.companion.listening': 'শুনছে…', - 'overlay.companion.pointing': 'নির্দেশ করছে…', - 'overlay.companion.speaking': 'বলছে…', - 'overlay.companion.thinking': 'ভাবছে…', - 'overlay.orbTitle': 'সরাতে টেনে আনুন · পজিশন রিসেট করতে ডাবল-ক্লিক করুন', - 'pages.settings.account.connections': 'সংযোগ', - 'pages.settings.account.connectionsDesc': 'সংযোগের বিবরণ', - 'pages.settings.account.privacy': 'গোপনীয়তা', - 'pages.settings.account.privacyDesc': 'গোপনীয়তার বিবরণ', - 'pages.settings.account.recoveryPhrase': 'রিকভারি ফ্রেজ', - 'pages.settings.account.recoveryPhraseDesc': 'রিকভারি ফ্রেজের বিবরণ', - 'pages.settings.account.team': 'টিম', - 'pages.settings.account.teamDesc': 'টিমের বিবরণ', - 'pages.settings.accountSection.description': 'রিকভারি ফ্রেজ, টিম, সংযোগ এবং গোপনীয়তা সেটিংস।', - 'pages.settings.accountSection.title': 'অ্যাকাউন্ট', - 'pages.settings.ai.llm': 'LLM', - 'pages.settings.ai.llmDesc': 'LLM বিবরণ', - 'pages.settings.ai.voice': 'ভয়েস', - 'pages.settings.ai.voiceDesc': 'ভয়েস বিবরণ', - 'pages.settings.ai.embeddings': 'এমবেডিংস', - 'pages.settings.ai.embeddingsDesc': 'মেমরি পুনরুদ্ধারের জন্য ভেক্টর এনকোডিং মডেল', - 'pages.settings.aiSection.description': - 'ল্যাঙ্গুয়েজ মডেল প্রোভাইডার, লোকাল Ollama, এবং ভয়েস (STT / TTS)।', - 'pages.settings.aiSection.title': 'AI', - 'pages.settings.features.desktopCompanion': 'ডেস্কটপ কম্প্যানিয়ন', - 'pages.settings.features.desktopCompanionDesc': - 'স্ক্রিন সচেতনতা সহ ভয়েস সহকারী — শোনে, দেখে, কথা বলে, নির্দেশ করে', - 'pages.settings.features.messagingChannels': 'মেসেজিং চ্যানেল', - 'pages.settings.features.messagingChannelsDesc': 'মেসেজিং চ্যানেলের বিবরণ', - 'pages.settings.features.notifications': 'বিজ্ঞপ্তি', - 'pages.settings.features.notificationsDesc': 'বিজ্ঞপ্তির বিবরণ', - 'pages.settings.features.screenAwareness': 'স্ক্রিন সচেতনতা', - 'pages.settings.features.screenAwarenessDesc': 'স্ক্রিন সচেতনতার বিবরণ', - 'pages.settings.features.tools': 'টুলস', - 'pages.settings.features.toolsDesc': 'টুলসের বিবরণ', - 'pages.settings.featuresSection.description': 'স্ক্রিন সচেতনতা, মেসেজিং এবং টুলস।', - 'pages.settings.featuresSection.title': 'ফিচার', - 'privacy.dataKind.credentials': 'ক্রেডেনশিয়াল', - 'privacy.dataKind.derived': 'ডেরাইভড', - 'privacy.dataKind.diagnostics': 'ডায়াগনস্টিক্স', - 'privacy.dataKind.metadata': 'মেটাডেটা', - 'privacy.dataKind.raw': 'রা', - 'privacy.whatLeaves.link.label': 'আমার কম্পিউটার থেকে কী বের হয়?', - 'rewards.community.achievementsUnlocked': '{total}টির মধ্যে {unlocked}টি অর্জন আনলক হয়েছে', - 'rewards.community.connectDiscord': 'Discord সংযুক্ত করুন', - 'rewards.community.cumulativeTokens': 'সঞ্চিত টোকেন', - 'rewards.community.currentStreak': 'বর্তমান স্ট্রিক', - 'rewards.community.discordLinkedNotInGuild': 'Discord লিংক কিন্তু গিল্ডে নেই', - 'rewards.community.discordMember': 'সার্ভারে যোগ দিয়েছেন', - 'rewards.community.discordNotLinked': 'Discord লিংক করা হয়নি', - 'rewards.community.discordServer': 'Discord সার্ভার', - 'rewards.community.discordStatusUnavailable': 'Discord স্ট্যাটাস পাওয়া যাচ্ছে না', - 'rewards.community.discordWaiting': 'Discord অপেক্ষায়', - 'rewards.community.heroSubtitle': 'হিরো সাবটাইটেল', - 'rewards.community.heroTitle': 'হিরো শিরোনাম', - 'rewards.community.joinDiscord': 'Discord-এ যোগ দিন', - 'rewards.community.loadingRewards': 'পুরস্কার লোড হচ্ছে…', - 'rewards.community.locked': 'আনলক করা', - 'rewards.community.retrying': 'আবার চেষ্টা হচ্ছে…', - 'rewards.community.rolesAndRewards': 'রোল ও পুরস্কার', - 'rewards.community.streakDays': '{n}', - 'rewards.community.syncPending': 'পুরস্কার সিঙ্ক মুলতুবি', - 'rewards.community.syncPendingDesc': 'সিঙ্ক মুলতুবির বিবরণ', - 'rewards.community.syncUnavailable': 'সিঙ্ক পাওয়া যাচ্ছে না', - 'rewards.community.tryAgain': 'আবার চেষ্টা হচ্ছে…', - 'rewards.community.unknown': 'অজানা', - 'rewards.community.unlocked': 'আনলক করা', - 'rewards.community.yourProgress': 'আপনার অগ্রগতি', - 'rewards.coupon.colCode': 'কোড', - 'rewards.coupon.colRedeemed': 'রিডিম করা', - 'rewards.coupon.colReward': 'পুরস্কার', - 'rewards.coupon.colStatus': 'স্ট্যাটাস', - 'rewards.coupon.loadingHistory': 'পুরস্কার ইতিহাস লোড হচ্ছে…', - 'rewards.coupon.noCodes': 'এখনও কোনো রিওয়ার্ড কোড রিডিম করা হয়নি।', - 'rewards.coupon.pending': 'মুলতুবি', - 'rewards.coupon.placeholder': 'কুপন কোড', - 'rewards.coupon.promoCredits': 'প্রোমো ক্রেডিট', - 'rewards.coupon.recentRedemptions': 'সাম্প্রতিক রিডেম্পশন', - 'rewards.coupon.redeemAccepted': - '{code} গৃহীত হয়েছে। প্রয়োজনীয় কাজটি সম্পন্ন হলে {amount} আনলক হবে।', - 'rewards.coupon.redeemButton': 'কোড রিডিম করুন', - 'rewards.coupon.redeemSuccess': '{code} রিডিম হয়েছে। আপনার ক্রেডিটে {amount} যোগ হয়েছে।', - 'rewards.coupon.redeemedCodes': 'রিডিম করা কোড', - 'rewards.coupon.redeeming': 'রিডিম হচ্ছে...', - 'rewards.coupon.statusApplied': 'প্রয়োগ হয়েছে', - 'rewards.coupon.statusPendingAction': 'অ্যাকশন বাকি', - 'rewards.coupon.statusRedeemed': 'রিডিম হয়েছে', - 'rewards.coupon.subtitle': 'সাবটাইটেল', - 'rewards.coupon.title': 'একটি কুপন কোড রিডিম করুন', - 'rewards.referralSection.activity': 'রেফারেল অ্যাক্টিভিটি', - 'rewards.referralSection.apply': 'প্রয়োগ হচ্ছে…', - 'rewards.referralSection.applying': 'প্রয়োগ হচ্ছে…', - 'rewards.referralSection.colReferredUser': 'রেফার করা ব্যবহারকারী', - 'rewards.referralSection.colReward': 'পুরস্কার', - 'rewards.referralSection.colStatus': 'স্ট্যাটাস', - 'rewards.referralSection.colUpdated': 'আপডেট', - 'rewards.referralSection.completed': 'সম্পন্ন', - 'rewards.referralSection.copyCode': 'কোড কপি করুন', - 'rewards.referralSection.copyFailed': 'কপি ব্যর্থ', - 'rewards.referralSection.haveCode': 'রেফারেল কোড আছে?', - 'rewards.referralSection.haveCodeDesc': 'কোড আছে বিবরণ', - 'rewards.referralSection.linked': 'লিংক করা', - 'rewards.referralSection.linkedCode': '(কোড {code})', - 'rewards.referralSection.loading': 'রেফারেল প্রোগ্রাম লোড হচ্ছে…', - 'rewards.referralSection.noReferrals': 'কোনো রেফারেল নেই', - 'rewards.referralSection.pendingReferrals': 'মুলতুবি রেফারেল', - 'rewards.referralSection.placeholder': 'রেফারেল কোড', - 'rewards.referralSection.share': 'শেয়ার', - 'rewards.referralSection.statusCompleted': 'স্ট্যাটাস সম্পন্ন', - 'rewards.referralSection.statusExpired': 'স্ট্যাটাস মেয়াদোত্তীর্ণ', - 'rewards.referralSection.statusJoined': 'স্ট্যাটাস যোগ দিয়েছে', - 'rewards.referralSection.subtitle': 'সাবটাইটেল', - 'rewards.referralSection.title': 'বন্ধুদের আমন্ত্রণ জানান, ক্রেডিট অর্জন করুন', - 'rewards.referralSection.totalEarned': 'মোট অর্জিত', - 'rewards.referralSection.yourCode': 'আপনার কোড', - 'settings.ai.addCloudProvider': 'ক্লাউড প্রোভাইডার যোগ করুন', - 'settings.ai.addProvider': 'সংরক্ষণ হচ্ছে…', - 'settings.ai.apiKeyFieldLabel': 'API কী ফিল্ড লেবেল', - 'settings.ai.apiKeyRequired': 'চালিয়ে যেতে আপনার API কী পেস্ট করুন।', - 'settings.ai.apiKeyStoredEncrypted': 'API কী এনক্রিপ্ট করে সংরক্ষিত', - 'settings.ai.apiKeysEncrypted': 'auth-profiles.json', - 'settings.ai.clearStoredKey': 'সংরক্ষিত কী মুছুন', - 'settings.ai.connectProvider': 'প্রোভাইডার সংযোগ করুন', - 'settings.ai.customRouting': 'কাস্টম রুটিং', - 'settings.ai.defaultResolvesTo': 'ডিফল্ট এতে সমাধান হয়', - 'settings.ai.discard': 'বাতিল করুন', - 'settings.ai.editProvider': 'প্রোভাইডার সম্পাদনা করুন', - 'settings.ai.llmProviders': 'LLM প্রোভাইডার', - 'settings.ai.llmProvidersDesc': 'LLM প্রোভাইডার বিবরণ', - 'settings.ai.localOllama': 'লোকাল (Ollama)', - 'settings.ai.modelLabel': 'মডেল', - 'settings.ai.noCustomProviders': 'কোনো কাস্টম প্রোভাইডার নেই', - 'settings.ai.openAiCompat.authHeaderExample': 'অনুমোদন: বহনকারী <আপনার কী>', - 'settings.ai.openAiCompat.authHeaderLabel': '2th head]9', - 'settings.ai.openAiCompat.baseUrlLabel': 'বেস URL', - 'settings.ai.openAiCompat.baseUrlUnavailable': 'অনুপলব্ধ', - 'settings.ai.openAiCompat.clearKey': 'ক্লিয়ার কী', - 'settings.ai.openAiCompat.description': - "Point local harnesses at this /v1 server to route through the providers configured below. Authentication uses a stable key you set here, not the app's internal core bearer.", - 'settings.ai.openAiCompat.keyConfigured': 'কী কনফিগার করা', - 'settings.ai.openAiCompat.keyRequired': 'কী প্রয়োজন', - 'settings.ai.openAiCompat.rotateKey': 'ঘোরান কী', - 'settings.ai.openAiCompat.setKey': 'সেট কী', - 'settings.ai.openAiCompat.title': 'OpenAI-সামঞ্জস্যপূর্ণ এন্ডপয়েন্ট', - 'settings.ai.providerLabel': 'প্রোভাইডার', - 'settings.ai.routing': 'রুটিং', - 'settings.ai.routingCustom': 'কাস্টম রুটিং', - 'settings.ai.routingDefault': 'ডিফল্ট', - 'settings.ai.routingDesc': 'রুটিং বিবরণ', - 'settings.ai.saveChanges': 'সংরক্ষণ হচ্ছে…', - 'settings.ai.saving': 'সংরক্ষণ হচ্ছে…', - 'settings.ai.unsavedChange': 'অসংরক্ষিত পরিবর্তন', - 'settings.ai.unsavedChanges': 'অসংরক্ষিত পরিবর্তন', - 'settings.ai.workloadGroupBackground': 'ওয়ার্কলোড গ্রুপ ব্যাকগ্রাউন্ড', - 'settings.ai.workloadGroupChat': 'ওয়ার্কলোড গ্রুপ চ্যাট', - 'settings.autocomplete.appFilter.acceptSuggestion': 'পরামর্শ গ্রহণ করুন', - 'settings.autocomplete.appFilter.contextOverride': 'কন্টেক্সট ওভাররাইড (ঐচ্ছিক)', - 'settings.autocomplete.appFilter.debugFocus': 'ডিবাগ ফোকাস', - 'settings.autocomplete.appFilter.getSuggestion': 'পরামর্শ পান', - 'settings.autocomplete.appFilter.liveLogs': 'লাইভ লগ', - 'settings.autocomplete.appFilter.noLogs': ') :', - 'settings.autocomplete.appFilter.refreshStatus': 'রিফ্রেশ হচ্ছে…', - 'settings.autocomplete.appFilter.refreshing': 'রিফ্রেশ হচ্ছে…', - 'settings.autocomplete.appFilter.runtime': 'রানটাইম', - 'settings.autocomplete.appFilter.test': 'পরীক্ষা', - 'settings.autocomplete.completionStyle.acceptedCompletion': - '{count}টি গৃহীত completion সংরক্ষিত — ভবিষ্যৎ পরামর্শ ব্যক্তিগতকরণে ব্যবহৃত হয়।', - 'settings.autocomplete.completionStyle.acceptedCompletions': - '{count}টি গৃহীত completion সংরক্ষিত — ভবিষ্যৎ পরামর্শ ব্যক্তিগতকরণে ব্যবহৃত হয়।', - 'settings.autocomplete.completionStyle.clearHistory': 'পরিষ্কার হচ্ছে…', - 'settings.autocomplete.completionStyle.clearing': 'পরিষ্কার হচ্ছে…', - 'settings.autocomplete.completionStyle.debounce': 'ডিবাউন্স (ms)', - 'settings.autocomplete.completionStyle.enabled': 'সক্রিয়', - 'settings.autocomplete.completionStyle.maxChars': 'সর্বোচ্চ অক্ষর', - 'settings.autocomplete.completionStyle.noHistory': - 'এখনো কোনো গৃহীত কমপ্লিশন নেই। ব্যক্তিগতকৃত করা শুরু করতে Tab দিয়ে পরামর্শ গ্রহণ করুন।', - 'settings.autocomplete.completionStyle.overlayTtl': 'ওভারলে TTL (ms)', - 'settings.autocomplete.completionStyle.personalizationHistory': 'ব্যক্তিগতকরণ ইতিহাস', - 'settings.autocomplete.completionStyle.styleExamples': 'স্টাইল উদাহরণ (প্রতি লাইনে একটি)', - 'settings.autocomplete.completionStyle.styleInstructions': 'স্টাইল নির্দেশনা', - 'settings.billing.autoRecharge.addAmount': 'এই পরিমাণ যোগ করুন', - 'settings.billing.autoRecharge.addCard': 'কার্ড যোগ করুন', - 'settings.billing.autoRecharge.amountHint': 'পরিমাণ হিন্ট', - 'settings.billing.autoRecharge.defaultCard': 'ডিফল্ট কার্ড', - 'settings.billing.autoRecharge.lastRechargeFailed': 'শেষ রিচার্জ ব্যর্থ', - 'settings.billing.autoRecharge.lastRecharged': 'শেষ রিচার্জ', - 'settings.billing.autoRecharge.noCards': 'কোনো কার্ড নেই', - 'settings.billing.autoRecharge.paymentMethods': 'পেমেন্ট পদ্ধতি', - 'settings.billing.autoRecharge.rechargeInProgress': 'রিচার্জ চলছে', - 'settings.billing.autoRecharge.rechargeWhen': 'ব্যালেন্স কম হলে রিচার্জ করুন', - 'settings.billing.autoRecharge.saveSettings': 'সংরক্ষণ হচ্ছে…', - 'settings.billing.autoRecharge.saving': 'সংরক্ষণ হচ্ছে…', - 'settings.billing.autoRecharge.setDefault': ':', - 'settings.billing.autoRecharge.subtitle': 'সাবটাইটেল', - 'settings.billing.autoRecharge.title': 'অটো-রিচার্জ সক্রিয় করুন', - 'settings.billing.autoRecharge.toggleAriaLabel': 'অটো-রিচার্জ টগল করুন', - 'settings.billing.autoRecharge.weeklyLimit': 'সাপ্তাহিক ব্যয় সীমা', - 'settings.billing.history.desc': 'বিবরণ', - 'settings.billing.history.empty': 'খালি', - 'settings.billing.history.openPortal': 'পোর্টাল খুলুন', - 'settings.billing.history.posted': 'পোস্ট করা', - 'settings.billing.history.title': 'শিরোনাম', - 'settings.billing.inferenceBudget.cycleEnds': 'সাইকেল শেষ', - 'settings.billing.inferenceBudget.exhausted': 'শেষ হয়েছে', - 'settings.billing.inferenceBudget.loadError': 'লোড ত্রুটি', - 'settings.billing.inferenceBudget.noBudgetDesc': 'বাজেট নেই বিবরণ', - 'settings.billing.inferenceBudget.noRecurringBudget': 'কোনো পুনরাবৃত্ত বাজেট নেই', - 'settings.billing.inferenceBudget.remaining': 'অবশিষ্ট', - 'settings.billing.inferenceBudget.tenHourCap': 'দশ ঘণ্টার ক্যাপ', - 'settings.billing.inferenceBudget.title': 'শিরোনাম', - 'settings.billing.payAsYouGo.available': 'পাওয়া যাচ্ছে', - 'settings.billing.payAsYouGo.chargeCustomAmount': 'খোলা হচ্ছে…', - 'settings.billing.payAsYouGo.chooseTopUpDesc': 'টপ আপ বিবরণ বেছে নিন', - 'settings.billing.payAsYouGo.chooseTopUpTitle': 'টপ আপ শিরোনাম বেছে নিন', - 'settings.billing.payAsYouGo.creditBalanceDesc': 'ক্রেডিট ব্যালেন্স বিবরণ', - 'settings.billing.payAsYouGo.creditBalanceTitle': 'ক্রেডিট ব্যালেন্স শিরোনাম', - 'settings.billing.payAsYouGo.customAmount': 'কাস্টম পরিমাণ', - 'settings.billing.payAsYouGo.enterAmount': 'পরিমাণ দিন', - 'settings.billing.payAsYouGo.opening': 'খোলা হচ্ছে', - 'settings.billing.payAsYouGo.promotionalCredits': 'প্রচারমূলক ক্রেডিট', - 'settings.billing.payAsYouGo.topUpBalance': 'টপ-আপ ব্যালেন্স', - 'settings.billing.payAsYouGo.topUpCredits': 'ক্রেডিট টপ আপ করুন', - 'settings.billing.payAsYouGo.unableToLoad': 'ব্যালেন্স লোড করা যাচ্ছে না।', - 'settings.billing.subscription.annual': 'বার্ষিক', - 'settings.billing.subscription.billedAnnually': 'বার্ষিক বিল', - 'settings.billing.subscription.chooseSubtitle': 'সাবটাইটেল বেছে নিন', - 'settings.billing.subscription.chooseTitle': 'শিরোনাম বেছে নিন', - 'settings.billing.subscription.cryptoDesc': 'ক্রিপ্টো বিবরণ', - 'settings.billing.subscription.cryptoQuestion': 'ক্রিপ্টো প্রশ্ন', - 'settings.billing.subscription.current': 'বর্তমান', - 'settings.billing.subscription.currentPlan': 'বর্তমান প্ল্যান', - 'settings.billing.subscription.monthly': 'মাসিক', - 'settings.billing.subscription.paymentConfirmed': 'পেমেন্ট নিশ্চিত', - 'settings.billing.subscription.perMonth': 'প্রতি মাসে', - 'settings.billing.subscription.popular': 'জনপ্রিয়', - 'pages.settings.account.migration': 'অন্য সহকারী থেকে আমদানি করুন', - 'pages.settings.account.migrationDesc': - 'OpenClaw (এবং শীঘ্রই Hermes) থেকে মেমরি ও নোট এই ওয়ার্কস্পেসে স্থানান্তর করুন।', - 'composio.connect.scope.read': 'পড়ুন', - 'composio.connect.scope.readHint': 'এজেন্টকে এই সংযোগ থেকে ডেটা পড়ার অনুমতি দিন।', - 'composio.connect.scope.write': 'লিখুন', - 'composio.connect.scope.writeHint': - 'এজেন্টকে এই সংযোগের মাধ্যমে ডেটা তৈরি বা পরিবর্তন করার অনুমতি দিন।', - 'composio.connect.scope.admin': 'প্রশাসক', - 'composio.connect.scope.adminHint': - 'এজেন্টকে সেটিংস, অনুমতি বা ধ্বংসাত্মক ক্রিয়াকলাপ পরিচালনা করার অনুমতি দিন।', - 'pages.settings.composioSection.title': 'Composio', - 'pages.settings.composioSection.description': - 'Composio দ্বারা চালিত ইন্টিগ্রেশনের জন্য রাউটিং, ট্রিগার এবং ইতিহাস।', - 'pages.settings.account.walletBalances': 'Wallet Balances', - 'pages.settings.account.walletBalancesDesc': 'View multi-chain balances for your local wallet', - 'walletBalances.title': 'Wallet Balances', - 'walletBalances.refresh': 'Refresh', - 'walletBalances.loading': 'Loading balances…', - 'walletBalances.retry': 'Retry', - 'walletBalances.emptyState': 'No wallet accounts yet — set up a wallet in Recovery Phrase.', - 'walletBalances.copyAddress': 'Copy address', - 'walletBalances.providerMissing': 'provider unavailable', - 'walletBalances.rawBalance': 'Raw: {raw}', - 'walletBalances.errorGeneric': - 'Unable to load wallet balances. Set up your wallet in Recovery Phrase and try again.', - 'conversations.taskKanban.approval.default': 'Default', - 'conversations.taskKanban.approval.notRequired': 'Not required', - 'conversations.taskKanban.approval.notRequiredBadge': 'no approval', - 'conversations.taskKanban.approval.required': 'Required', - 'conversations.taskKanban.approval.requiredBadge': 'approval', - 'conversations.taskKanban.approval.requiredBeforeExecution': 'Required before execution', - 'conversations.taskKanban.briefButton': 'Task brief', - 'conversations.taskKanban.briefTitle': 'Task brief', - 'conversations.taskKanban.closeBrief': 'Close task brief', - 'conversations.taskKanban.field.acceptanceCriteria': 'Acceptance criteria', - 'conversations.taskKanban.field.allowedTools': 'Allowed tools', - 'conversations.taskKanban.field.approval': 'Approval', - 'conversations.taskKanban.field.assignedAgent': 'Assigned agent', - 'conversations.taskKanban.field.blocker': 'Blocker', - 'conversations.taskKanban.field.evidence': 'Evidence', - 'conversations.taskKanban.field.notes': 'Notes', - 'conversations.taskKanban.field.objective': 'Objective', - 'conversations.taskKanban.field.plan': 'Plan', - 'conversations.taskKanban.field.status': 'Status', - 'conversations.taskKanban.field.title': 'Title', - 'conversations.taskKanban.saveChanges': 'Save changes', - 'conversations.taskKanban.deleteCard': 'Delete', - 'conversations.taskKanban.updateFailed': 'Could not update task; changes were not saved.', -}; - -export default bn4; diff --git a/app/src/lib/i18n/chunks/bn-5.ts b/app/src/lib/i18n/chunks/bn-5.ts deleted file mode 100644 index 0706043da..000000000 --- a/app/src/lib/i18n/chunks/bn-5.ts +++ /dev/null @@ -1,1018 +0,0 @@ -import type { TranslationMap } from '../types'; - -// Bengali (বাংলা) chunk 5/5. Translated from chunks/en-5.ts. -const bn5: TranslationMap = { - 'settings.billing.subscription.save': '{pct}', - 'settings.billing.subscription.upgrade': 'আপগ্রেড করুন', - 'settings.billing.subscription.waiting': 'অপেক্ষা করছে', - 'settings.billing.subscription.waitingPayment': 'পেমেন্টের অপেক্ষায়', - 'settings.composio.apiKeyDesc': 'এই ডিভাইসে বর্তমানে একটি Composio API key সংরক্ষিত আছে।', - 'settings.composio.apiKeyLabel': 'Composio API কী', - 'settings.composio.apiKeyStored': 'API key সংরক্ষিত', - 'settings.composio.apiKeyStoredPlaceholder': '••••••••••••••••', - 'settings.composio.clearedToBackend': 'ব্যাকএন্ড মোডে পরিবর্তিত', - 'settings.composio.confirmItem1': 'API key সহ app.composio.dev-এ একটি অ্যাকাউন্ট', - 'settings.composio.confirmItem2': - 'আপনার ব্যক্তিগত Composio অ্যাকাউন্টের মাধ্যমে প্রতিটি ইন্টিগ্রেশন পুনঃলিঙ্ক করতে', - 'settings.composio.confirmItem3': - 'নোট: Composio ট্রিগার (রিয়েল-টাইম webhooks) এখনও Direct মোডে কাজ করে না — শুধু সিঙ্ক্রোনাস টুল কল', - 'settings.composio.confirmNeedItems': 'আপনার প্রয়োজন হবে:', - 'settings.composio.confirmSwitch': 'আমি বুঝেছি, Direct-এ স্যুইচ করুন', - 'settings.composio.confirmTitle': '⚠️ Direct মোডে স্যুইচ হচ্ছে', - 'settings.composio.confirmWarning': - 'OpenHuman-এর মাধ্যমে লিঙ্ক করা আপনার বিদ্যমান ইন্টিগ্রেশনগুলি (Gmail, Slack, GitHub ইত্যাদি) দৃশ্যমান হবে না — সেগুলি OpenHuman-পরিচালিত Composio টেন্যান্টে থাকে।', - 'settings.composio.intro': - 'Composio ২৫০+ বহিরাগত অ্যাপকে টুল হিসেবে ইন্টিগ্রেট করে যা আপনার এজেন্ট কল করতে পারে। এই টুল কলগুলি কীভাবে রুট হবে তা নির্বাচন করুন।', - 'settings.composio.modeDirect': 'ডাইরেক্ট (নিজের API কী আনুন)', - 'settings.composio.modeDirectDesc': - 'কলগুলি সরাসরি backend.composio.dev-এ যায়। সার্বভৌম / অফলাইন-বান্ধব। টুল এক্সিকিউশন সিঙ্ক্রোনাসভাবে কাজ করে; রিয়েল-টাইম ট্রিগার webhooks এখনও direct মোডে রুট করা হয় না (ফলো-আপ ইস্যু)।', - 'settings.composio.modeManaged': 'ম্যানেজড (OpenHuman আপনার হয়ে পরিচালনা করে)', - 'settings.composio.modeManagedDesc': - 'OpenHuman আমাদের ব্যাকএন্ডের মাধ্যমে টুল কল প্রক্সি করে (প্রস্তাবিত)। অথ ব্রোকার করা হয়; আপনি কখনও Composio API key পেস্ট করেন না। Webhooks সম্পূর্ণরূপে রুট করা।', - 'settings.composio.routingMode': 'রুটিং মোড', - 'settings.composio.saveErrorNoKey': 'সংরক্ষণ ব্যর্থ। Direct মোডের জন্য একটি API key প্রয়োজন।', - 'settings.composio.saving': 'সংরক্ষণ হচ্ছে…', - 'settings.composio.switching': 'স্যুইচ হচ্ছে…', - 'settings.cron.jobs.desc': 'বিবরণ', - 'settings.cron.jobs.empty': 'কোনো কোর ক্রন জব পাওয়া যায়নি।', - 'settings.cron.jobs.lastStatus': 'শেষ স্ট্যাটাস', - 'settings.cron.jobs.loading': 'ক্রন জব লোড হচ্ছে...', - 'settings.cron.jobs.loadingRuns': 'রান লোড হচ্ছে', - 'settings.cron.jobs.nextRun': 'পরবর্তী রান', - 'settings.cron.jobs.pause': 'বিরতি', - 'settings.cron.jobs.paused': 'বিরতিতে', - 'settings.cron.jobs.recentRuns': 'সাম্প্রতিক রান', - 'settings.cron.jobs.removing': 'অপসারণ হচ্ছে', - 'settings.cron.jobs.resume': 'পুনরায় শুরু', - 'settings.cron.jobs.runningNow': 'এখন চলছে', - 'settings.cron.jobs.saving': 'সংরক্ষণ হচ্ছে…', - 'settings.cron.jobs.schedule': 'সময়সূচি', - 'settings.cron.jobs.title': 'কোর ক্রন জবস', - 'settings.cron.jobs.viewRuns': 'রান দেখুন', - 'settings.localModel.deviceCapability.active': 'সক্রিয়', - 'settings.localModel.deviceCapability.appliedTier': 'প্রয়োগকৃত টায়ার', - 'settings.localModel.deviceCapability.applying': 'প্রয়োগ হচ্ছে', - 'settings.localModel.deviceCapability.cores': '{count}', - 'settings.localModel.deviceCapability.couldNotLoadPresets': 'প্রিসেট লোড করা যায়নি', - 'settings.localModel.deviceCapability.cpu': 'CPU', - 'settings.localModel.deviceCapability.customModelIds': 'কাস্টম মডেল ID', - 'settings.localModel.deviceCapability.detected': 'শনাক্ত', - 'settings.localModel.deviceCapability.disabled': 'নিষ্ক্রিয়', - 'settings.localModel.deviceCapability.disabledDesc': 'নিষ্ক্রিয় বিবরণ', - 'settings.localModel.deviceCapability.downloadingModels': '(মডেল ডাউনলোড হচ্ছে)', - 'settings.localModel.deviceCapability.downloadingSetupDesc': - 'OllamaSetup ইনস্টলার (~2 GB) ডাউনলোড ও আনপ্যাক হচ্ছে। প্রথম ইনস্টলে এক মিনিট সময় লাগতে পারে।', - 'settings.localModel.deviceCapability.failedToApplyPreset': 'প্রিসেট প্রয়োগ করতে ব্যর্থ', - 'settings.localModel.deviceCapability.gpu': 'GPU', - 'settings.localModel.deviceCapability.installFailed': 'Ollama ইনস্টল ব্যর্থ', - 'settings.localModel.deviceCapability.installFailedDesc': - 'Ollama ব্যবহারযোগ্য হওয়ার আগে ইনস্টলার বন্ধ হয়েছে। আবার চেষ্টা করতে ক্লিক করুন, বা ollama.com থেকে ম্যানুয়ালি ইনস্টল করুন।', - 'settings.localModel.deviceCapability.installFirst': 'প্রথমে Ollama চালান।', - 'settings.localModel.deviceCapability.installFirstDesc': - 'লোকাল টিয়ার একটি বাহ্যিকভাবে পরিচালিত Ollama endpoint-এর উপর নির্ভর করে। নিজে এটি শুরু করুন, আপনি যে মডেলগুলি চান তা টানুন, এবং রানটাইম পৌঁছানো না যাওয়া পর্যন্ত "Disabled (cloud fallback)" ব্যবহার করতে থাকুন।', - 'settings.localModel.deviceCapability.installOllamaFirst': - 'এই টিয়ার ব্যবহার করতে প্রথমে Ollama চালান', - 'settings.localModel.deviceCapability.installingOllama': 'Ollama ইনস্টল হচ্ছে', - 'settings.localModel.deviceCapability.loadingDeviceInfo': 'ডিভাইস তথ্য লোড হচ্ছে', - 'settings.localModel.deviceCapability.localAiDisabled': - 'লোকাল AI নিষ্ক্রিয় — ক্লাউড ফলব্যাক ব্যবহার করছে।', - 'settings.localModel.deviceCapability.modelTier': 'মডেল টায়ার', - 'settings.localModel.deviceCapability.needsOllama': 'Ollama প্রয়োজন', - 'settings.localModel.deviceCapability.notDetected': 'শনাক্ত হয়নি', - 'settings.localModel.deviceCapability.ram': 'RAM', - 'settings.localModel.deviceCapability.recommended': 'প্রস্তাবিত', - 'settings.localModel.deviceCapability.retryInstall': 'আবার চেষ্টা হচ্ছে…', - 'settings.localModel.deviceCapability.retrying': 'আবার চেষ্টা হচ্ছে…', - 'settings.localModel.deviceCapability.starting': 'শুরু হচ্ছে…', - 'settings.localModel.download.audioPathPlaceholder': 'অডিও ফাইলের পূর্ণ পথ', - 'settings.localModel.download.capabilityAssets': 'ক্যাপাবিলিটি অ্যাসেট', - 'settings.localModel.download.downloading': 'ডাউনলোড হচ্ছে...', - 'settings.localModel.download.embeddingPlaceholder': 'প্রতি লাইনে একটি ইনপুট স্ট্রিং...', - 'settings.localModel.download.noThinkMode': 'থিংক মোড নেই', - 'settings.localModel.download.promptPlaceholder': - 'যেকোনো প্রম্পট টাইপ করুন এবং লোকাল মডেলে চালান...', - 'settings.localModel.download.quantizationPref': 'কোয়ান্টাইজেশন পছন্দ', - 'settings.localModel.download.runEmbeddingTest': 'চলছে...', - 'settings.localModel.download.runPromptTest': 'Prompt Test চালান', - 'settings.localModel.download.runSummaryTest': 'Summary Test চালান', - 'settings.localModel.download.runTranscriptionTest': 'চলছে...', - 'settings.localModel.download.runTtsTest': 'চলছে...', - 'settings.localModel.download.runVisionTest': 'চলছে...', - 'settings.localModel.download.running': 'চলছে...', - 'settings.localModel.download.runningPrompt': 'প্রম্পট চলছে', - 'settings.localModel.download.summarizePlaceholder': - 'লোকাল মডেল দিয়ে সারসংক্ষেপের জন্য টেক্সট পেস্ট করুন...', - 'settings.localModel.download.testCustomPrompt': 'কাস্টম প্রম্পট পরীক্ষা করুন', - 'settings.localModel.download.testEmbeddings': 'এম্বেডিং পরীক্ষা করুন', - 'settings.localModel.download.testSummarization': 'সারসংক্ষেপ পরীক্ষা করুন', - 'settings.localModel.download.testVisionPrompt': 'ভিশন প্রম্পট পরীক্ষা করুন', - 'settings.localModel.download.testVoiceInput': 'ভয়েস ইনপুট পরীক্ষা করুন (STT)', - 'settings.localModel.download.testVoiceOutput': 'ভয়েস আউটপুট পরীক্ষা করুন (TTS)', - 'settings.localModel.download.ttsOutputPlaceholder': 'ঐচ্ছিক আউটপুট WAV পথ', - 'settings.localModel.download.ttsPlaceholder': 'সংশ্লেষণের জন্য টেক্সট দিন...', - 'settings.localModel.download.visionImagePlaceholder': - 'প্রতি লাইনে একটি ইমেজ রেফারেন্স (data URI, URL, বা লোকাল পথ মার্কার)', - 'settings.localModel.download.visionPromptPlaceholder': 'ভিশন মডেলের জন্য একটি প্রম্পট দিন...', - 'settings.localModel.status.allChecksPassed': 'সব পরীক্ষা পাস', - 'settings.localModel.status.artifact': 'আর্টিফ্যাক্ট', - 'settings.localModel.status.backend': 'ব্যাকএন্ড', - 'settings.localModel.status.binary': 'বাইনারি', - 'settings.localModel.status.bootstrapResume': 'বুটস্ট্র্যাপ / রিজিউম', - 'settings.localModel.status.checking': 'পরীক্ষা হচ্ছে...', - 'settings.localModel.status.checkingOllama': 'Ollama পরীক্ষা হচ্ছে', - 'settings.localModel.status.customLocation': 'কাস্টম লোকেশন', - 'settings.localModel.status.customLocationDesc': 'কাস্টম লোকেশন বিবরণ', - 'settings.localModel.status.diagnosticsHint': - 'Ollama চলছে এবং মডেল ইনস্টল আছে কিনা যাচাই করতে "Run Diagnostics"-এ ক্লিক করুন।', - 'settings.localModel.status.downloadingUnknown': 'ডাউনলোড হচ্ছে (আকার অজানা)', - 'settings.localModel.status.eta': 'ETA', - 'settings.localModel.status.expectedModels': 'প্রত্যাশিত মডেল', - 'settings.localModel.status.forceRebootstrap': 'ফোর্স রি-বুটস্ট্র্যাপ', - 'settings.localModel.status.generationTps': 'জেনারেশন TPS', - 'settings.localModel.status.hideErrorDetails': 'ত্রুটির বিবরণ লুকান', - 'settings.localModel.status.installManually': 'ম্যানুয়ালি ইনস্টল করুন', - 'settings.localModel.status.installManuallyFrom': 'থেকে ম্যানুয়ালি ইনস্টল করুন', - 'settings.localModel.status.installOllama': 'শুরু হচ্ছে…', - 'settings.localModel.status.installedModels': 'ইনস্টল করা মডেল', - 'settings.localModel.status.installing': 'ইনস্টল হচ্ছে...', - 'settings.localModel.status.installingOllama': 'Ollama রানটাইম ইনস্টল হচ্ছে...', - 'settings.localModel.status.issues': 'সমস্যা', - 'settings.localModel.status.issuesFound': '{count}টি সমস্যা পাওয়া গেছে', - 'settings.localModel.status.lastLatency': 'শেষ লেটেন্সি', - 'settings.localModel.status.model': 'মডেল', - 'settings.localModel.status.notFound': 'পাওয়া যায়নি', - 'settings.localModel.status.notRunning': 'চলছে না', - 'settings.localModel.status.ollamaBinaryPath': 'Ollama বাইনারি পথ', - 'settings.localModel.status.ollamaDiagnostics': 'Ollama ডায়াগনস্টিক্স', - 'settings.localModel.status.ollamaNotInstalled': 'Ollama রানটাইম অনুপলব্ধ', - 'settings.localModel.status.ollamaNotInstalledDesc': - 'OpenHuman এখন Ollama-কে একটি বাহ্যিক ইনফারেন্স রানটাইম হিসেবে গণ্য করে। আপনার নিজের Ollama সার্ভার শুরু করুন, যে মডেলগুলি চান টানুন, এবং ওয়ার্কলোড রাউটিং সেদিকে নির্দেশ করুন।', - 'settings.localModel.status.progress': 'অগ্রগতি', - 'settings.localModel.status.provider': 'প্রোভাইডার', - 'settings.localModel.status.retryBootstrap': 'বুটস্ট্র্যাপ আবার চেষ্টা করুন', - 'settings.localModel.status.runDiagnostics': 'পরীক্ষা হচ্ছে...', - 'settings.localModel.status.running': 'চলছে', - 'settings.localModel.status.runningExternalProcess': 'বাহ্যিক প্রসেসের মাধ্যমে চলছে', - 'settings.localModel.status.runtimeStatus': 'রানটাইম স্ট্যাটাস', - 'settings.localModel.status.server': 'সার্ভার', - 'settings.localModel.status.setPath': 'সেট হচ্ছে...', - 'settings.localModel.status.setting': 'সেট হচ্ছে...', - 'settings.localModel.status.showErrorDetails': 'ত্রুটির বিবরণ লুকান', - 'settings.localModel.status.showInstallErrorDetails': 'ত্রুটির বিবরণ লুকান', - 'settings.localModel.status.suggestedFixes': 'প্রস্তাবিত সমাধান', - 'settings.localModel.status.thenSetPath': 'তারপর পথ সেট করুন', - 'settings.localModel.status.triggering': 'ট্রিগার হচ্ছে...', - 'settings.localModel.status.unavailable': 'পাওয়া যাচ্ছে না', - 'settings.localModel.status.working': 'কাজ হচ্ছে...', - 'settings.developerMenu.ai.title': 'AI কনফিগারেশন', - 'settings.developerMenu.ai.desc': - 'ক্লাউড প্রদানকারী, স্থানীয় Ollama মডেল এবং প্রতি-ওয়ার্কলোড রাউটিং', - 'settings.developerMenu.screenAwareness.title': 'স্ক্রিন সচেতনতা', - 'settings.developerMenu.screenAwareness.desc': - 'স্ক্রিন ক্যাপচার অনুমতি, মনিটরিং নীতি এবং সেশন নিয়ন্ত্রণ', - 'settings.developerMenu.messagingChannels.title': 'মেসেজিং চ্যানেল', - 'settings.developerMenu.messagingChannels.desc': - 'Telegram/Discord অথেন্টিকেশন মোড এবং ডিফল্ট চ্যানেল রাউটিং কনফিগার করুন', - 'settings.developerMenu.tools.title': 'টুলস', - 'settings.developerMenu.tools.desc': - 'OpenHuman আপনার পক্ষ থেকে যে সক্ষমতাগুলি ব্যবহার করতে পারে সেগুলি চালু বা বন্ধ করুন', - 'settings.developerMenu.agentChat.title': 'এজেন্ট চ্যাট', - 'settings.developerMenu.agentChat.desc': - 'মডেল এবং টেম্পারেচার ওভাররাইডসহ এজেন্ট কথোপকথন পরীক্ষা করুন', - 'settings.developerMenu.devWorkflow.title': 'Dev Workflow', - 'settings.developerMenu.devWorkflow.desc': - 'Autonomous agent that picks your GitHub issues and raises PRs on a schedule', - 'settings.developerMenu.devWorkflow.panelDesc': - 'Configure an autonomous developer agent that picks GitHub issues assigned to you and raises pull requests automatically on a schedule.', - 'settings.devWorkflow.githubRepository': 'GitHub Repository', - 'settings.devWorkflow.loadingRepositories': 'Loading repositories...', - 'settings.devWorkflow.selectRepository': 'Select a repository', - 'settings.devWorkflow.privateTag': '(private)', - 'settings.devWorkflow.detectingForkInfo': 'Detecting fork info...', - 'settings.devWorkflow.forkDetected': 'Fork detected', - 'settings.devWorkflow.upstream': 'Upstream:', - 'settings.devWorkflow.forkPrNote': 'PRs will be raised against the upstream repository.', - 'settings.devWorkflow.notForkNote': - 'Not a fork. PRs will be raised against this repository directly.', - 'settings.devWorkflow.targetBranch': 'Target Branch', - 'settings.devWorkflow.targetBranchNote': 'PRs will be raised against this branch', - 'settings.devWorkflow.loadingBranches': 'Loading branches...', - 'settings.devWorkflow.runFrequency': 'Run Frequency', - 'settings.devWorkflow.runFrequencyNote': - 'How often the agent should check for issues and raise PRs.', - 'settings.devWorkflow.updateConfiguration': 'Update Configuration', - 'settings.devWorkflow.saveConfiguration': 'Save Configuration', - 'settings.devWorkflow.remove': 'Remove', - 'settings.devWorkflow.saved': 'Saved', - 'settings.devWorkflow.activeConfiguration': 'Active Configuration', - 'settings.devWorkflow.activeConfigRepository': 'Repository:', - 'settings.devWorkflow.activeConfigUpstream': 'Upstream:', - 'settings.devWorkflow.activeConfigTargetBranch': 'Target branch:', - 'settings.devWorkflow.activeConfigSchedule': 'Schedule:', - 'settings.devWorkflow.enabled': 'Enabled', - 'settings.devWorkflow.paused': 'Paused', - 'settings.skillsRunner.scheduleEnabled': 'Enabled', - 'settings.skillsRunner.scheduleDisabled': 'Paused', - 'settings.skillsRunner.scheduleToggleAria': 'Toggle schedule enabled', - 'settings.skillsRunner.schedule.history': 'History', - 'settings.skillsRunner.schedule.historyLoading': 'Loading history\u2026', - 'settings.skillsRunner.schedule.historyEmpty': 'No runs yet for this schedule.', - 'settings.skillsRunner.schedule.historyNoOutput': 'No output captured.', - 'settings.skillsRunner.schedule.active': 'Active', - 'settings.skillsRunner.schedule.lastRunLabel': 'last:', - 'settings.devWorkflow.nextRun': 'Next run', - 'settings.devWorkflow.lastRun': 'Last run', - 'settings.devWorkflow.runNow': 'Run now', - 'settings.devWorkflow.running': 'Running…', - 'settings.devWorkflow.recentRuns': 'Recent runs', - 'settings.devWorkflow.cronSaveError': 'Failed to save configuration', - 'settings.devWorkflow.lastOutput': 'Last output', - 'settings.devWorkflow.noOutput': 'No output captured', - 'settings.devWorkflow.runningStatus': - 'Agent is running — picking an issue and working on a fix...', - 'settings.devWorkflow.errorNotConnected': - 'GitHub is not connected. Please connect GitHub via Settings > Advanced > Composio first.', - 'settings.devWorkflow.errorToolNotEnabled': - 'GITHUB_LIST_REPOSITORIES_FOR_THE_AUTHENTICATED_USER tool is not enabled on this backend. Please ask your admin to enable it in the Composio integration (backend#842).', - 'settings.devWorkflow.errorNotAuthenticated': 'Not authenticated. Please sign in first.', - 'settings.devWorkflow.errorNoRepositories': 'No repositories found for this GitHub account.', - 'settings.devWorkflow.schedule.every30min': 'Every 30 minutes', - 'settings.devWorkflow.schedule.everyHour': 'Every hour', - 'settings.devWorkflow.schedule.every2hours': 'Every 2 hours', - 'settings.devWorkflow.schedule.every6hours': 'Every 6 hours', - 'settings.devWorkflow.schedule.onceDaily': 'Once daily (9 AM)', - 'settings.developerMenu.cronJobs.title': 'Cron জব', - 'settings.developerMenu.cronJobs.desc': - 'রানটাইম স্কিলের জন্য নির্ধারিত জব দেখুন এবং কনফিগার করুন', - 'settings.developerMenu.localModelDebug.title': 'লোকাল মডেল ডিবাগ', - 'settings.developerMenu.localModelDebug.desc': - 'Ollama কনফিগারেশন, অ্যাসেট ডাউনলোড, মডেল টেস্ট এবং ডায়াগনস্টিক্স', - 'settings.developerMenu.webhooks.title': 'ওয়েবহুক', - 'settings.developerMenu.webhooks.desc': - 'রানটাইম ওয়েবহুক রেজিস্ট্রেশন এবং ধরা পড়া রিকোয়েস্ট লগ পরিদর্শন করুন', - 'settings.developerMenu.eventLog.title': 'Event Log', - 'settings.developerMenu.eventLog.desc': - 'Live colour-coded stream of all agent, tool, and system events', - 'settings.developerMenu.eventLog.allTypes': 'All types', - 'settings.developerMenu.eventLog.filterAgent': 'Filter...', - 'settings.developerMenu.eventLog.download': 'Download', - 'settings.developerMenu.eventLog.events': 'events', - 'settings.developerMenu.eventLog.live': 'Live', - 'settings.developerMenu.eventLog.disconnected': 'Disconnected', - 'settings.developerMenu.eventLog.waiting': 'Waiting for events...', - 'settings.developerMenu.eventLog.notConnected': 'Not connected to core', - 'settings.developerMenu.eventLog.jumpToLatest': 'Jump to latest', - 'settings.developerMenu.eventLog.badge.tool': 'TOOL', - 'settings.developerMenu.eventLog.badge.agent': 'AGENT', - 'settings.developerMenu.eventLog.badge.info': 'INFO', - 'settings.developerMenu.eventLog.badge.mem': 'MEM', - 'settings.developerMenu.eventLog.badge.chan': 'CHAN', - 'settings.developerMenu.eventLog.badge.cron': 'CRON', - 'settings.developerMenu.eventLog.badge.hook': 'HOOK', - 'settings.developerMenu.eventLog.badge.warn': 'WARN', - 'settings.developerMenu.eventLog.badge.skill': 'SKILL', - 'settings.developerMenu.eventLog.badge.comp': 'COMP', - 'settings.developerMenu.eventLog.badge.mcp': 'MCP', - 'settings.developerMenu.intelligence.title': 'ইন্টেলিজেন্স', - 'settings.developerMenu.intelligence.desc': - 'মেমরি ওয়ার্কস্পেস, সাবকনশাস ইঞ্জিন, ড্রিমস এবং সেটিংস', - 'settings.developerMenu.notificationRouting.title': 'নোটিফিকেশন রাউটিং', - 'settings.developerMenu.notificationRouting.desc': - 'ইন্টিগ্রেশন অ্যালার্টের জন্য AI গুরুত্ব স্কোরিং এবং অর্কেস্ট্রেটর এসকেলেশন', - 'settings.developerMenu.composeioTriggers.title': 'ComposeIO ট্রিগার', - 'settings.developerMenu.composeioTriggers.desc': 'ComposeIO ট্রিগার ইতিহাস এবং আর্কাইভ দেখুন', - 'settings.developerMenu.composioRouting.title': 'Composio রাউটিং (ডাইরেক্ট মোড)', - 'settings.developerMenu.composioRouting.desc': - 'আপনার নিজস্ব Composio API কী ব্যবহার করুন এবং কল সরাসরি backend.composio.dev-এ রাউট করুন', - 'settings.developerMenu.integrationTriggers.title': 'ইন্টিগ্রেশন ট্রিগার', - 'settings.developerMenu.integrationTriggers.desc': - 'Composio ইন্টিগ্রেশন ট্রিগারের জন্য AI ট্রায়াজ সেটিংস কনফিগার করুন', - 'settings.appearance.menuDesc': 'লাইট, ডার্ক বা সিস্টেম থিমের সাথে মিল বেছে নিন', - 'settings.mascot.active': 'সক্রিয়', - 'settings.mascot.characterDesc': 'চরিত্রের বিবরণ', - 'settings.mascot.characterHeading': 'চরিত্রের শিরোনাম', - // TODO: translate custom GIF mascot strings. - 'settings.mascot.customGifError': - 'একটি HTTPS .gif URL, লুপব্যাক HTTP .gif URL, file:// .gif URL, অথবা স্থানীয় .gif পাথ লিখুন।', - 'settings.mascot.customGifHeading': 'কাস্টম GIF অবতার', - 'settings.mascot.customGifLabel': 'কাস্টম GIF অবতার URL', - 'settings.mascot.colorDesc': 'রঙের বিবরণ', - 'settings.mascot.colorHeading': 'রঙের শিরোনাম', - 'settings.mascot.loadingLibrary': 'OpenHuman লাইব্রেরি লোড হচ্ছে…', - 'settings.mascot.localDefault': 'লোকাল OpenHuman (ডিফল্ট)', - 'settings.mascot.menuTitle': 'মাসকট', - 'settings.mascot.menuDesc': 'অ্যাপ জুড়ে ব্যবহৃত মাসকটের রঙ বেছে নিন', - 'settings.mascot.noCharacters': 'কোনো OpenHuman ক্যারেক্টার এখনও উপলব্ধ নেই', - 'settings.mascot.noColorVariants': 'কোনো রঙের ভেরিয়েন্ট নেই', - 'settings.mascot.voice.current': 'বর্তমান', - 'settings.mascot.voice.customDesc': - 'ভয়েস আইডি খুঁজুন api.elevenlabs.io/v1/voices বা আপনার ElevenLabs ড্যাশবোর্ডে। শুধু আইডি সংরক্ষিত থাকে — আপনার API কী ব্যাকএন্ডে থাকে।', - 'settings.mascot.voice.customHeading': 'কাস্টম ভয়েস আইডি', - 'settings.mascot.voice.customOption': 'অন্যান্য (ভয়েস আইডি পেস্ট করুন)…', - 'settings.mascot.voice.desc': - 'স্পোকেন উত্তরের জন্য ম্যাসকট যে ElevenLabs ভয়েস ব্যবহার করে তা বেছে নিন। জেন্ডার অনুযায়ী ফিল্টার করুন, কিউরেটেড তালিকা থেকে বাছাই করুন, কাস্টম আইডি পেস্ট করুন, অথবা ইন্টারফেস ভাষার সাথে মেলে এমন ভয়েস অ্যাপটিকে বেছে নিতে দিন।', - 'settings.mascot.voice.genderFemale': 'মহিলা', - 'settings.mascot.voice.genderHeading': 'ভয়েস জেন্ডার', - 'settings.mascot.voice.genderMale': 'পুরুষ', - 'settings.mascot.voice.heading': 'ভয়েস', - 'settings.mascot.voice.preset': 'ভয়েস প্রিসেট', - 'settings.mascot.voice.presetHeading': 'ভয়েস প্রিসেট', - 'settings.mascot.voice.preview': 'ভয়েস প্রিভিউ', - 'settings.mascot.voice.previewError': 'ভয়েস প্রিভিউ ব্যর্থ হয়েছে', - 'settings.mascot.voice.previewing': 'প্রিভিউ চলছে…', - 'settings.mascot.voice.reset': 'ডিফল্টে রিসেট করুন', - 'settings.mascot.voice.useLocaleDefault': 'অ্যাপের ভাষার সাথে মিলান', - 'settings.mascot.voice.useLocaleDefaultDesc': - 'বর্তমান ইন্টারফেস ভাষার জন্য স্বয়ংক্রিয়ভাবে একটি ভয়েস বেছে নিন।', - 'settings.memoryWindow.balanced.badge': 'প্রস্তাবিত', - 'settings.memoryWindow.balanced.hint': - 'যৌক্তিক ডিফল্ট — প্রতিটি রানে অতিরিক্ত টোকেন না পুড়িয়ে ভাল ধারাবাহিকতা।', - 'settings.memoryWindow.balanced.label': 'সুষম', - 'settings.memoryWindow.description': - 'প্রতিটি নতুন এজেন্ট রানে OpenHuman কতটা মনে রাখা প্রসঙ্গ ইনজেক্ট করে। বড় উইন্ডো অতীত কথোপকথন সম্পর্কে বেশি সচেতন মনে হয় কিন্তু প্রতিটি রানে বেশি টোকেন ব্যবহার করে — এবং বেশি খরচ হয়।', - 'settings.memoryWindow.extended.badge': 'আরও প্রসঙ্গ', - 'settings.memoryWindow.extended.hint': - 'প্রতিটি রানে আরও দীর্ঘমেয়াদী মেমরি ইনজেক্ট করা হয়। প্রতি টার্নে উচ্চ টোকেন খরচ।', - 'settings.memoryWindow.extended.label': 'বর্ধিত', - 'settings.memoryWindow.maximum.badge': 'সর্বোচ্চ খরচ', - 'settings.memoryWindow.maximum.hint': - 'সবচেয়ে বড় নিরাপদ উইন্ডো। সেরা ধারাবাহিকতা, প্রতিটি রানে উল্লেখযোগ্যভাবে বেশি টোকেন বিল।', - 'settings.memoryWindow.maximum.label': 'সর্বোচ্চ', - 'settings.memoryWindow.minimal.badge': 'সবচেয়ে সস্তা', - 'settings.memoryWindow.minimal.hint': - 'সবচেয়ে ছোট মেমরি উইন্ডো। সবচেয়ে সস্তা, দ্রুততম, রানগুলির মধ্যে সবচেয়ে কম ধারাবাহিকতা।', - 'settings.memoryWindow.minimal.label': 'ন্যূনতম', - 'settings.memoryWindow.title': 'দীর্ঘমেয়াদী মেমোরি উইন্ডো', - 'settings.screenIntel.permissions.accessibility': 'অ্যাক্সেসিবিলিটি', - 'settings.screenIntel.permissions.grantHint': 'গ্রান্ট হিন্ট', - 'settings.screenIntel.permissions.inputMonitoring': 'ইনপুট মনিটরিং', - 'settings.screenIntel.permissions.macosAppliesPrivacy': 'macOS গোপনীয়তা প্রয়োগ করে', - 'settings.screenIntel.permissions.openInputMonitoring': 'অনুরোধ করা হচ্ছে…', - 'settings.screenIntel.permissions.refreshStatus': 'রিফ্রেশ হচ্ছে…', - 'settings.screenIntel.permissions.refreshing': 'রিফ্রেশ হচ্ছে…', - 'settings.screenIntel.permissions.requestAccessibility': 'অনুরোধ করা হচ্ছে…', - 'settings.screenIntel.permissions.requestScreenRecording': 'অনুরোধ করা হচ্ছে…', - 'settings.screenIntel.permissions.requesting': 'অনুরোধ করা হচ্ছে…', - 'settings.screenIntel.permissions.restartRefresh': 'কোর রিস্টার্ট হচ্ছে…', - 'settings.screenIntel.permissions.restartingCore': 'কোর রিস্টার্ট হচ্ছে…', - 'settings.screenIntel.permissions.screenRecording': 'স্ক্রিন রেকর্ডিং', - 'settings.screenIntel.permissions.title': 'অনুমতি', - 'skills.card.moreActions': 'আরও কাজ', - 'skills.create.allowedTools': 'অনুমোদিত টুল', - 'skills.create.author': 'লেখক', - 'skills.create.authorPlaceholder': 'আপনার নাম', - 'skills.create.commaSeparated': '(কমা দিয়ে আলাদা)', - 'skills.create.createBtn': 'স্কিল তৈরি করুন', - 'skills.create.createError': 'স্কিল তৈরি করা যায়নি', - 'skills.create.creating': 'তৈরি হচ্ছে…', - 'skills.create.description': 'বিবরণ', - 'skills.create.descriptionPlaceholder': 'এই স্কিল কী করে?', - 'skills.create.optional': '(optional)', - 'skills.create.inputs.heading': 'Inputs', - 'skills.create.inputs.help': - 'Declare parameters the skill needs. The Skills Runner will render a form for these at run time.', - 'skills.create.inputs.add': 'Add input', - 'skills.create.inputs.row.name': 'Input name', - 'skills.create.inputs.row.namePlaceholder': 'e.g. repo', - 'skills.create.inputs.row.nameError': - 'Letters, digits, underscores, and dashes only; must start with a letter.', - 'skills.create.inputs.row.description': 'Input description', - 'skills.create.inputs.row.descriptionPlaceholder': 'What goes in this field?', - 'skills.create.inputs.row.type': 'Type', - 'skills.create.inputs.row.required': 'Required', - 'skills.create.inputs.row.remove': 'Remove input', - 'skills.create.inputs.type.string': 'Text', - 'skills.create.inputs.type.integer': 'Number', - 'skills.create.inputs.type.boolean': 'Yes / No', - 'skills.create.license': 'লাইসেন্স', - 'skills.create.name': 'নাম', - 'skills.create.namePlaceholder': 'যেমন Trade Journal', - 'skills.create.scope': 'স্কোপ', - 'skills.create.scopeProjectHint': '/.openhuman/skills/', - 'skills.create.scopeUserHint': - '~/.openhuman/skills//SKILL.md-এ লেখা — সব ওয়ার্কস্পেসে পাওয়া যায়।', - 'skills.create.slugLabel': 'স্লাগ লেবেল', - 'skills.create.subtitle': 'SKILL.md', - 'skills.create.tags': 'ট্যাগ', - 'skills.create.title': 'নতুন স্কিল', - 'skills.detail.allowedTools': 'অনুমোদিত টুলস', - 'skills.detail.author': 'লেখক', - 'skills.detail.bundledResources': 'বান্ডেলড রিসোর্স', - 'skills.detail.closeAriaLabel': 'স্কিলের বিবরণ বন্ধ করুন', - 'skills.detail.location': 'লোকেশন', - 'skills.detail.noBundledResources': 'কোনো বান্ডেলড রিসোর্স নেই।', - 'skills.detail.tags': 'ট্যাগ', - 'skills.detail.warnings': 'সতর্কতা', - 'skills.install.fetchLog': 'ফেচ লগ', - 'skills.install.installBtn': 'ইনস্টল হচ্ছে…', - 'skills.install.installComplete': 'ইনস্টল সম্পন্ন', - 'skills.install.installing': 'ইনস্টল হচ্ছে…', - 'skills.install.parseWarnings': 'পার্স সতর্কতা', - 'skills.install.rawError': 'রা ত্রুটি', - 'skills.install.timeoutHint': '(সেকেন্ড, ঐচ্ছিক)', - 'skills.install.timeoutLabel': 'টাইমআউট লেবেল', - 'skills.install.title': 'URL থেকে স্কিল ইনস্টল করুন', - 'skills.install.urlLabel': 'স্কিল URL', - 'skills.meetingBots.bannerDesc': 'ব্যানার বিবরণ', - 'skills.meetingBots.bannerTitle': 'ব্যানার শিরোনাম', - 'skills.meetingBots.busyTitle': 'OpenHuman ব্যস্ত', - 'skills.meetingBots.comingSoon': 'শীঘ্রই আসছে', - 'skills.meetingBots.couldNotStartTitle': 'OpenHuman শুরু করা যায়নি', - 'skills.meetingBots.displayName': 'প্রদর্শন নাম', - 'skills.meetingBots.failedToStart': 'OpenHuman শুরু করতে ব্যর্থ।', - 'skills.meetingBots.joiningMessage': 'কয়েক সেকেন্ডের মধ্যে অংশগ্রহণকারী হিসেবে দেখা যাবে।', - 'skills.meetingBots.joiningTitle': 'OpenHuman মিটিংয়ে যোগ দিচ্ছে', - 'skills.meetingBots.meetingLink': 'মিটিং লিংক', - 'skills.meetingBots.modalAriaLabel': 'OpenHuman-কে একটি মিটিংয়ে পাঠান', - 'skills.meetingBots.modalDesc': 'মোডাল বিবরণ', - 'skills.meetingBots.modalTitle': 'OpenHuman-কে একটি মিটিংয়ে পাঠান', - 'skills.meetingBots.newBadge': 'নতুন ব্যাজ', - 'skills.meetingBots.sendTo': 'পাঠান', - 'skills.meetingBots.starting': 'শুরু হচ্ছে…', - 'skills.resource.preview.closeAriaLabel': 'প্রিভিউ বন্ধ করুন', - 'skills.resource.preview.failed': 'প্রিভিউ ব্যর্থ', - 'skills.resource.preview.loading': 'প্রিভিউ লোড হচ্ছে…', - 'skills.resource.tree.empty': 'কোনো বান্ডেলড রিসোর্স নেই।', - 'skills.search.placeholder': 'প্লেসহোল্ডার', - 'skills.setup.autocomplete.acceptKey': 'অ্যাক্সেপ্ট কী', - 'skills.setup.autocomplete.activeDesc': 'সক্রিয় বিবরণ', - 'skills.setup.autocomplete.activeTitle': 'অটো-কমপ্লিট সক্রিয়', - 'skills.setup.autocomplete.customizeSettings': 'সেটিংস কাস্টমাইজ করুন', - 'skills.setup.autocomplete.debounce': 'ডিবাউন্স', - 'skills.setup.autocomplete.description': 'বিবরণ', - 'skills.setup.autocomplete.enableBtn': 'সক্রিয় হচ্ছে...', - 'skills.setup.autocomplete.enableError': 'অটোকমপ্লিট সক্রিয় করতে ব্যর্থ', - 'skills.setup.autocomplete.enabling': 'সক্রিয় হচ্ছে...', - 'skills.setup.autocomplete.notSupported': 'সমর্থিত নয়', - 'skills.setup.autocomplete.stepEnable': 'ইনলাইন কমপ্লিশন সক্রিয় করুন', - 'skills.setup.autocomplete.stepSuccess': 'যেতে প্রস্তুত', - 'skills.setup.autocomplete.stylePreset': 'স্টাইল প্রিসেট', - 'skills.setup.autocomplete.stylePresetValue': 'ব্যালান্সড (পরে কনফিগারযোগ্য)', - 'skills.setup.autocomplete.title': 'টেক্সট অটো-কমপ্লিট', - 'skills.setup.screenIntel.activeDesc': 'সক্রিয় বিবরণ', - 'skills.setup.screenIntel.activeTitle': 'স্ক্রিন ইন্টেলিজেন্স সক্রিয়', - 'skills.setup.screenIntel.advancedSettings': 'অ্যাডভান্সড সেটিংস', - 'skills.setup.screenIntel.allGranted': 'সব অনুমতি দেওয়া হয়েছে', - 'skills.setup.screenIntel.captureMode': 'ক্যাপচার মোড', - 'skills.setup.screenIntel.captureModeValue': 'সব উইন্ডো (পরে কনফিগারযোগ্য)', - 'skills.setup.screenIntel.deniedHint': - 'সিস্টেম সেটিংসে অনুমতি দেওয়ার পর, পরিবর্তন নিতে নিচে ক্লিক করে রিস্টার্ট করুন।', - 'skills.setup.screenIntel.enableBtn': 'সক্রিয় হচ্ছে...', - 'skills.setup.screenIntel.enableDesc': 'আপনার স্ক্রিনে এবং এজেন্টে দরকারী কন্টেক্সট ফিড করুন', - 'skills.setup.screenIntel.enableError': 'স্ক্রিন ইন্টেলিজেন্স সক্রিয় করতে ব্যর্থ', - 'skills.setup.screenIntel.enabling': 'সক্রিয় হচ্ছে...', - 'skills.setup.screenIntel.grant': 'খোলা হচ্ছে...', - 'skills.setup.screenIntel.granted': 'দেওয়া হয়েছে', - 'skills.setup.screenIntel.macosOnly': 'শুধু macOS', - 'skills.setup.screenIntel.opening': 'খোলা হচ্ছে...', - 'skills.setup.screenIntel.panicHotkey': 'প্যানিক হটকি', - 'skills.setup.screenIntel.permAccessibility': 'অ্যাক্সেসিবিলিটি', - 'skills.setup.screenIntel.permInputMonitoring': 'ইনপুট মনিটরিং', - 'skills.setup.screenIntel.permScreenRecording': 'স্ক্রিন রেকর্ডিং', - 'skills.setup.screenIntel.permissionsDesc': 'অনুমতির বিবরণ', - 'skills.setup.screenIntel.refreshStatus': 'স্ট্যাটাস রিফ্রেশ করুন', - 'skills.setup.screenIntel.restartRefresh': 'রিস্টার্ট হচ্ছে...', - 'skills.setup.screenIntel.restarting': 'রিস্টার্ট হচ্ছে...', - 'skills.setup.screenIntel.stepEnable': 'স্কিল সক্রিয় করুন', - 'skills.setup.screenIntel.stepPermissions': 'অনুমতি দিন', - 'skills.setup.screenIntel.stepSuccess': 'যেতে প্রস্তুত', - 'skills.setup.screenIntel.title': 'স্ক্রিন ইন্টেলিজেন্স', - 'skills.setup.screenIntel.visionModel': 'ভিশন মডেল', - 'skills.setup.voice.activation': 'অ্যাক্টিভেশন', - 'skills.setup.voice.activeDescPrefix': 'Fn', - 'skills.setup.voice.activeDescSuffix': 'Fn', - 'skills.setup.voice.activeTitle': 'ভয়েস ইন্টেলিজেন্স সক্রিয়', - 'skills.setup.voice.customizeSettings': 'সেটিংস কাস্টমাইজ করুন', - 'skills.setup.voice.downloadSttBtn': 'STT ডাউনলোড বাটন', - 'skills.setup.voice.enableDesc': 'সক্রিয় বিবরণ', - 'skills.setup.voice.hotkey': 'হটকি', - 'skills.setup.voice.startBtn': 'শুরু হচ্ছে...', - 'skills.setup.voice.startError': 'ভয়েস সার্ভার শুরু করতে ব্যর্থ', - 'skills.setup.voice.starting': 'শুরু হচ্ছে...', - 'skills.setup.voice.stepEnable': 'ভয়েস সার্ভার শুরু করুন', - 'skills.setup.voice.stepSetup': 'মডেল ডাউনলোড প্রয়োজন', - 'skills.setup.voice.stepSuccess': 'যেতে প্রস্তুত', - 'skills.setup.voice.sttNotReady': 'স্পিচ-টু-টেক্সট মডেল প্রস্তুত নয়', - 'skills.setup.voice.sttNotReadyDesc': - 'ভয়েস ইন্টেলিজেন্সের জন্য ট্রান্সক্রিপশনের জন্য একটি লোকাল Whisper মডেল প্রয়োজন। লোকাল মডেল সেটিংস থেকে ডাউনলোড করুন।', - 'skills.setup.voice.sttReady': 'স্পিচ-টু-টেক্সট মডেল প্রস্তুত', - 'skills.setup.voice.sttReturnHint': 'STT রিটার্ন হিন্ট', - 'skills.setup.voice.title': 'ভয়েস ইন্টেলিজেন্স', - 'skills.uninstall.couldNotUninstall': 'আনইনস্টল করা যায়নি', - 'skills.uninstall.description': - 'এটি স্থায়ীভাবে স্কিল ডিরেক্টরি এবং এর সমস্ত বান্ডল রিসোর্স মুছে ফেলে। এজেন্ট পরবর্তী টার্নে এটি দেখা বন্ধ করবে।', - 'skills.uninstall.title': 'আনইনস্টল', - 'skills.uninstall.uninstallBtn': 'আনইনস্টল', - 'skills.uninstall.uninstalling': 'আনইনস্টল হচ্ছে…', - 'upsell.global.limitMessage': 'চালিয়ে যেতে আপনার প্ল্যান আপগ্রেড করুন বা ক্রেডিট টপ আপ করুন', - 'upsell.global.limitTitle': 'আপনি', - 'upsell.global.nearLimitMessage': - 'আপনি আপনার ব্যবহার সীমার {pct}% ব্যবহার করেছেন। উচ্চ সীমার জন্য আপগ্রেড করুন।', - 'upsell.global.nearLimitTitle': 'ব্যবহার সীমার কাছাকাছি', - 'upsell.usageLimit.bodyBudget': - 'আপনি সাপ্তাহিক সীমায় পৌঁছেছেন।{reset} সীমা এড়াতে আপনার প্ল্যান আপগ্রেড করুন বা ক্রেডিট টপ আপ করুন।', - 'upsell.usageLimit.bodyRate': - 'আপনি ১০-ঘণ্টার ইনফারেন্স রেট সীমায় পৌঁছেছেন।{reset} উচ্চতর সীমার জন্য আপগ্রেড করুন।', - 'upsell.usageLimit.heading': 'ব্যবহার সীমা পৌঁছেছে', - 'upsell.usageLimit.notNow': 'এখন না', - 'upsell.usageLimit.perWindow': '{amount}', - 'upsell.usageLimit.planIncludes': '{plan}', - 'upsell.usageLimit.resetsIn': 'এটি {time} রিসেট হবে।', - 'upsell.usageLimit.upgradePlan': 'প্ল্যান আপগ্রেড করুন', - 'upsell.usageLimit.weeklyInference': '{amount}', - 'walkthrough.tooltip.letsGo': 'চলুন শুরু করি!', - 'walkthrough.tooltip.next': 'পরবর্তী →', - 'walkthrough.tooltip.skip': 'ট্যুর এড়িয়ে যান', - 'walkthrough.tooltip.stepCounter': '{total}-এর মধ্যে {n}', - 'webhooks.activity.empty': 'খালি', - 'webhooks.activity.title': 'সাম্প্রতিক কার্যক্রম', - 'webhooks.composioHistory.empty': 'খালি', - 'webhooks.composioHistory.metadataId': 'মেটাডেটা ID', - 'webhooks.composioHistory.metadataUuid': 'মেটাডেটা UUID', - 'webhooks.composioHistory.payload': 'পেলোড', - 'webhooks.composioHistory.title': 'ComposeIO ট্রিগার ইতিহাস', - 'webhooks.tunnels.active': 'সক্রিয়', - 'webhooks.tunnels.createFailed': 'টানেল তৈরি করতে ব্যর্থ', - 'webhooks.tunnels.creating': 'তৈরি হচ্ছে...', - 'webhooks.tunnels.deleteFailed': 'টানেল মুছতে ব্যর্থ', - 'webhooks.tunnels.descriptionPlaceholder': 'বিবরণ (ঐচ্ছিক)', - 'webhooks.tunnels.echo': 'ইকো', - 'webhooks.tunnels.empty': 'খালি', - 'webhooks.tunnels.enableEcho': 'ইকো চালু করুন', - 'webhooks.tunnels.inactive': 'নিষ্ক্রিয়', - 'webhooks.tunnels.namePlaceholder': 'টানেলের নাম (যেমন telegram-bot)', - 'webhooks.tunnels.newTunnel': 'নতুন টানেল', - 'webhooks.tunnels.removeEcho': 'ইকো সরান', - 'webhooks.tunnels.title': 'Webhook টানেল', - 'webhooks.tunnels.toggleFailed': 'ইকো টগল করতে ব্যর্থ', - 'composio.authExpired': 'অথ মেয়াদোত্তীর্ণ', - 'composio.reconnect': 'পুনঃসংযোগ', - 'composio.previewBadge': 'পূর্বরূপ', - 'composio.previewTooltip': - 'এজেন্ট ইন্টিগ্রেশন শীঘ্রই আসছে — আপনি সংযোগ করতে পারেন, কিন্তু এজেন্ট এখনও এই টুলকিটটি ব্যবহার করতে পারবেন না।', - 'composio.directModeRequiresKey': 'সংরক্ষণ ব্যর্থ। Direct মোডের জন্য একটি API key প্রয়োজন।', - 'composio.notYetRouted': 'এখনও রুট করা হয়নি', - 'composio.triggers.loading': 'লোড হচ্ছে…', - 'conversations.taskKanban.todo': 'করণীয়', - 'settings.composio.loading': 'লোড হচ্ছে…', - 'settings.mascot.noCharactersAvailable': 'কোনো OpenHuman ক্যারেক্টার এখনও উপলব্ধ নেই', - 'skills.uninstall.confirmTitle': '{name} আনইনস্টল করবেন?', - 'conversations.taskKanban.blocked': 'ব্লকড', - 'conversations.taskKanban.done': 'সম্পন্ন', - 'conversations.taskKanban.pending': 'Pending', - 'conversations.taskKanban.working': 'Working', - 'conversations.taskKanban.awaitingApproval': 'Awaiting approval', - 'conversations.taskKanban.ready': 'Ready', - 'conversations.taskKanban.rejected': 'Rejected', - 'conversations.taskKanban.inProgress': 'চলমান', - 'intelligence.memoryChunk.detail.copiedHint': 'কপি হয়েছে', - 'settings.composio.notYetRouted': 'এখনও রুট করা হয়নি', - 'settings.localModel.download.manageExternal': 'আপনার বাহ্যিক রানটাইমে এই মডেলটি পরিচালনা করুন।', - 'settings.localModel.status.manageOllamaExternal': - 'OpenHuman-এর বাইরে Ollama প্রক্রিয়া এবং মডেল পুল পরিচালনা করুন, তারপর ডায়াগনস্টিক পুনরায় চালান।', - 'settings.localModel.status.ollamaDocs': 'Ollama ডকস', - 'settings.localModel.status.thenRetry': - 'সেটআপ নির্দেশনার জন্য, তারপর আপনার রানটাইম পৌঁছানো গেলে পুনরায় চেষ্টা করুন।', - 'settings.appearance.title': 'উপস্থিতি', - 'settings.appearance.themeHeading': 'থিম', - 'settings.appearance.themeAria': 'থিম', - 'settings.appearance.modeLight': 'হালকা', - 'settings.appearance.modeLightDesc': 'উজ্জ্বল পৃষ্ঠ, অন্ধকার পাঠ্য।', - 'settings.appearance.modeDark': 'অন্ধকার', - 'settings.appearance.modeDarkDesc': 'আবছা পৃষ্ঠ, সন্ধ্যার পরে চোখের উপর সহজ।', - 'settings.appearance.modeSystem': 'ম্যাচ সিস্টেম', - 'settings.appearance.modeSystemDesc': 'আপনার OS চেহারা সেটিং অনুসরণ করুন.', - 'settings.appearance.helperText': - 'ডার্ক মোড পুরো অ্যাপকে স্যুইচ করে — চ্যাট, সেটিংস, প্যানেল — একটি আবছা প্যালেটে। "ম্যাচ সিস্টেম" আপনার OS চেহারা অনুসরণ করে এবং লাইভ আপডেট করে।', - 'settings.mascot.characterPreview': 'পূর্বরূপ', - 'settings.mascot.characterStates': 'স্টেটস', - 'settings.mascot.characterVisemes': 'visemes', - 'settings.mascot.colorAria': 'OpenHuman রঙ', - 'settings.mascot.colorBlack': 'কালো', - 'settings.mascot.colorBurgundy': 'বারগান্ডি', - 'settings.mascot.colorCustom': 'Custom', - 'settings.mascot.colorNavy': 'নৌবাহিনী', - 'settings.mascot.primaryColor': 'Primary color', - 'settings.mascot.secondaryColor': 'Secondary color', - 'settings.mascot.colorYellow': 'হলুদ', - 'settings.mascot.libraryUnavailable': 'OpenHuman লাইব্রেরি অনুপলব্ধ', - 'settings.mascot.title': 'OpenHuman', - 'settings.developerMenu.mcpServer.title': 'MCP লাইব্রেরি অনুপলব্ধ', - 'settings.developerMenu.mcpServer.desc': '[[I18N_SEP_92731]] OpenHuman', - 'settings.developerMenu.autonomy.title': 'এজেন্ট স্বায়ত্তশাসন', - 'settings.developerMenu.autonomy.desc': 'টুল অ্যাকশনের রেট সীমা এবং নিরাপত্তা থ্রেশহোল্ড', - 'settings.mcpServer.title': - 'MCP সার্ভারের সাথে সংযোগ করতে বহিরাগত __BR1__ ক্লায়েন্ট কনফিগার করুন', - 'settings.mcpServer.toolsSectionTitle': 'উপলভ্য টুল', - 'settings.mcpServer.toolsSectionDesc': 'উপলভ্য টুলস stdio সার্ভার যখন openhuman-core mcp', - 'settings.mcpServer.configSectionTitle': 'ক্লায়েন্ট কনফিগারেশন চালায়', - 'settings.mcpServer.configSectionDesc': - 'সঠিক কনফিগারেশন স্নিপেট তৈরি করতে আপনার MCP ক্লায়েন্ট নির্বাচন করুন', - 'settings.mcpServer.copySnippet': 'ক্লিপবোর্ডে কপি করুন', - 'settings.mcpServer.copied': 'কপি করা হয়েছে!', - 'settings.mcpServer.openConfigFile': 'কনফিগ ফাইল খুলুন', - 'settings.mcpServer.binaryPathNotFound': - 'OpenHuman বাইনারি পাওয়া যায়নি। উৎস থেকে চললে, এর সাথে তৈরি করুন: cargo build --bin openhuman-core', - 'settings.mcpServer.openConfigError': 'কনফিগার ফাইল খুলতে ব্যর্থ', - 'settings.mcpServer.clientClaudeDesktop': 'Claude Desktop', - 'settings.mcpServer.clientCursor': 'কার্সার', - 'settings.mcpServer.clientCodex': 'কার্সার', - 'settings.mcpServer.clientZed': 'Zed', - 'settings.mcpServer.configFilePath': 'কনফিগার ফাইল', - 'settings.mcpServer.clientSelectorAriaLabel': 'MCP ক্লায়েন্ট নির্বাচক', - 'settings.persona.title': 'Persona', - 'settings.persona.menuTitle': 'Persona', - 'settings.persona.menuDesc': - 'Name, personality, avatar, and voice — your assistant as one identity', - 'settings.persona.identityHeading': 'Identity', - 'settings.persona.identityDesc': - 'A display name and short description for your assistant. Shown in the app; does not change how the assistant reasons.', - 'settings.persona.displayNameLabel': 'Display name', - 'settings.persona.displayNamePlaceholder': 'e.g. Nova', - 'settings.persona.descriptionLabel': 'Description', - 'settings.persona.descriptionPlaceholder': 'e.g. A calm, concise assistant for my team.', - 'settings.persona.soul.heading': 'Personality (SOUL.md)', - 'settings.persona.soul.desc': - 'The personality prompt the assistant follows in every conversation. Edits are saved to your workspace and take effect on the next reply.', - 'settings.persona.soul.editorLabel': 'SOUL.md contents', - 'settings.persona.soul.reset': 'Reset to default', - 'settings.persona.soul.usingDefault': 'Using the bundled default', - 'settings.persona.soul.loadError': 'Could not load SOUL.md', - 'settings.persona.soul.saveError': 'Could not save SOUL.md', - 'settings.persona.soul.resetError': 'Could not reset SOUL.md', - 'settings.persona.appearanceHeading': 'Avatar & Voice', - 'settings.persona.appearanceDesc': - 'Mascot color, custom GIF avatar, and reply voice are configured in Mascot settings.', - 'settings.persona.openMascotSettings': 'Open Mascot settings', - 'settings.developerMenu.composio.title': 'Composio', - 'settings.developerMenu.composio.desc': 'রাউটিং মোড, ইন্টিগ্রেশন ট্রিগার, এবং ট্রিগার ইতিহাস।', - 'settings.appearance.tabBarHeading': 'নীচের ট্যাব বার', - 'settings.appearance.tabBarAlwaysShowLabels': 'সর্বদা লেবেলগুলি দেখান', - 'settings.appearance.tabBarAlwaysShowLabelsDesc': - 'বন্ধ থাকা অবস্থায়, লেবেলগুলি শুধুমাত্র হোভারে বা সক্রিয় ট্যাবের জন্য প্রদর্শিত হয়৷', - 'common.breadcrumb': 'ব্রেডক্রাম্ব', - 'settings.betaBuild': 'বিটা বিল্ড - v{version}', - 'migration.vendor.openclaw': 'OpenClaw', - 'migration.vendor.hermes': 'Hermes Agent', - 'onboarding.apiKeys.openaiOauthHint': - 'ChatGPT Plus/Pro (সাবস্ক্রিপশন) বা একটি OpenAI API কী ব্যবহার করুন — উভয়ের প্রয়োজন নেই।', - 'onboarding.apiKeys.openaiOauthOpening': 'সাইন-ইন খোলা হচ্ছে...', - 'onboarding.apiKeys.finishSignIn': 'ChatGPT সাইন-ইন শেষ করুন', - 'onboarding.apiKeys.orApiKey': 'বা API কী', - 'app.localAiDownload.expandAria': 'ডাউনলোডের অগ্রগতি প্রসারিত করুন', - 'app.localAiDownload.collapseAria': 'ডাউনলোডের অগ্রগতি আড়াল করুন', - 'app.localAiDownload.dismissAria': 'ডাউনলোড বিজ্ঞপ্তি খারিজ করুন', - 'mobile.nav.ariaLabel': 'মোবাইল নেভিগেশন', - 'progress.stepsAria': 'অগ্রগতির ধাপ', - 'progress.stepAria': 'ধাপ {total} এর {current}', - 'workspace.vaultsTitle': 'নলেজ ভল্ট', - 'workspace.vaultsDesc': - 'একটি স্থানীয় ফোল্ডারে পয়েন্ট করুন; ফাইলগুলিকে টুকরো টুকরো করে মেমরিতে মিরর করা হয়।', - 'calls.title': 'কল', - 'calls.comingSoonBody': 'AI-সহায়তা কলগুলি শীঘ্রই আসছে৷ সাথে থাকুন।', - 'art.rotatingTetrahedronAria': 'ইনভার্টেড টেট্রাহেড্রন মহাকাশযান ঘোরানো', - 'devOptions.sentryDisabled': '(কোনও আইডি নেই — এই বিল্ডে সেন্ট্রি নিষ্ক্রিয় করা হয়েছে)', - 'composio.expiredAuthorization': '{name} অনুমোদনের মেয়াদ শেষ', - 'composio.expiredDescription': - 'পুনরায় সংযোগ করতে PH__0 টুল পুনরায় সংযুক্ত করুন। আপনি OAuth অ্যাক্সেস রিফ্রেশ না করা পর্যন্ত OpenHuman এই ইন্টিগ্রেশনটি অনুপলব্ধ রাখবে৷', - 'channels.telegram.remoteControlTitle': 'রিমোট কন্ট্রোল (Telegram)', - 'channels.telegram.remoteControlBody': - 'একটি অনুমোদিত Telegram চ্যাট থেকে, /status, /sessions, /new, অথবা /help পাঠান। মডেল রাউটিং এখনও /মডেল এবং /মডেল ব্যবহার করে।', - 'rewards.referralSection.retry': 'আবার চেষ্টা করুন', - 'settings.ai.plannerSummary': - 'পরিকল্পনাকারী: {sourceEvents} উৎস ইভেন্ট, {sent} পাঠানো হয়েছে, {deduped} ডিডুড করা হয়েছে।', - 'settings.ai.routeLabel': 'রুট: {route}', - 'settings.ai.latestSpend': 'সর্বশেষ খরচ: {amount} এ {time} ({action})', - 'settings.ai.topActions': 'টপ অ্যাকশন', - 'settings.ai.noSpendRows': 'কোনো খরচ সারি লোড করা হয়নি।', - 'settings.ai.topHours': 'সেরা ঘন্টা', - 'settings.ai.noHourlySpend': 'এখনও কোন ঘন্টা খরচ নেই.', - 'settings.autocomplete.appFilter.app': 'অ্যাপ', - 'settings.autocomplete.appFilter.currentSuggestion': 'বর্তমান পরামর্শ', - 'settings.autocomplete.appFilter.debounce': 'ডিবাউন্স', - 'settings.autocomplete.appFilter.enabled': 'সক্ষম', - 'settings.autocomplete.appFilter.lastError': 'শেষ ত্রুটি', - 'settings.autocomplete.appFilter.model': 'মডেল', - 'settings.autocomplete.appFilter.phase': 'ফেজ', - 'settings.autocomplete.appFilter.platformSupported': 'প্ল্যাটফর্ম সমর্থিত', - 'settings.autocomplete.appFilter.running': 'চলমান', - 'settings.autocomplete.debug.acceptedPrefix': 'গৃহীত: {value}', - 'settings.autocomplete.debug.acceptFailed': 'প্রস্তাবনা গ্রহণ করতে ব্যর্থ হয়েছে', - 'settings.autocomplete.debug.alreadyRunning': 'স্বয়ংসম্পূর্ণ ইতিমধ্যেই চলছে৷', - 'settings.autocomplete.debug.clearHistoryFailed': 'ইতিহাস সাফ করতে ব্যর্থ হয়েছে', - 'settings.autocomplete.debug.didNotStart': 'স্বয়ংসম্পূর্ণ শুরু হয়নি৷', - 'settings.autocomplete.debug.disabledInSettings': - 'সেটিংসে স্বয়ংসম্পূর্ণ অক্ষম করা আছে। এটি সক্রিয় করুন এবং প্রথমে সংরক্ষণ করুন।', - 'settings.autocomplete.debug.fetchSuggestionFailed': 'বর্তমান প্রস্তাবনা আনতে ব্যর্থ হয়েছে', - 'settings.autocomplete.debug.inspectFocusedElementFailed': - 'ফোকাস করা উপাদান পরিদর্শন করতে ব্যর্থ হয়েছে', - 'settings.autocomplete.debug.loadSettingsFailed': 'স্বয়ংসম্পূর্ণ সেটিংস লোড করতে ব্যর্থ হয়েছে', - 'settings.autocomplete.debug.noSuggestionApplied': 'কোন পরামর্শ প্রয়োগ করা হয়নি.', - 'settings.autocomplete.debug.noSuggestionReturned': 'কোনো পরামর্শ ফেরত দেওয়া হয়নি৷', - 'settings.autocomplete.debug.refreshStatusFailed': - 'স্বয়ংসম্পূর্ণ স্থিতি রিফ্রেশ করতে ব্যর্থ হয়েছে', - 'settings.autocomplete.debug.saveAdvancedSettingsFailed': - 'উন্নত সেটিংস সংরক্ষণ করতে ব্যর্থ হয়েছে', - 'settings.autocomplete.debug.startFailed': 'স্বয়ংসম্পূর্ণ শুরু করতে ব্যর্থ হয়েছে', - 'settings.autocomplete.debug.stopFailed': 'স্বয়ংসম্পূর্ণ বন্ধ করতে ব্যর্থ হয়েছে', - 'settings.autocomplete.debug.suggestionPrefix': 'সাজেশন: {value}', - 'settings.autocomplete.shared.none': 'কোনটিই', - 'settings.autocomplete.shared.notApplicable': 'n/a', - 'settings.autocomplete.shared.unknown': 'অজানা', - 'settings.billing.autoRecharge.expires': '{date} এ মেয়াদ শেষ', - 'settings.billing.autoRecharge.spentThisWeek': 'এই সপ্তাহে ${spent} / ${limit} ব্যবহৃত', - 'settings.localModel.deviceCapability.disabledLowercase': 'অক্ষম', - 'settings.localModel.deviceCapability.presetDetails': - 'চ্যাট: {chatModel} · দৃষ্টি: {visionModel} · লক্ষ্য RAM: {targetRamGb} GB', - 'settings.localModel.download.capabilityChat': 'চ্যাট', - 'settings.localModel.download.capabilityEmbedding': 'এম্বেড করা', - 'settings.localModel.download.capabilityStt': 'STT', - 'settings.localModel.download.capabilityTts': 'TTS', - 'settings.localModel.download.capabilityVision': 'দৃষ্টি', - 'settings.localModel.download.embeddingDimensions': 'মাত্রা: {dimensions}', - 'settings.localModel.download.embeddingModel': 'মডেল: {modelId}', - 'settings.localModel.download.embeddingVectors': 'ভেক্টর: {count}', - 'settings.localModel.download.notAvailable': 'n/a', - 'settings.localModel.download.summaryHelper': - 'রাস্ট কোরের মাধ্যমে `openhuman.inference_summarize` কল করে', - 'settings.localModel.download.transcript': 'ট্রান্সক্রিপ্ট:', - 'settings.localModel.download.ttsOutput': 'আউটপুট: {outputPath}', - 'settings.localModel.download.ttsVoice': 'ভয়েস: {voiceId}', - 'settings.localModel.status.contextBelowMinimumBadge': - '{contextLength} ctx - নীচে {required} মিনিট', - 'settings.localModel.status.contextBelowMinimumTitle': - 'প্রত্যাখ্যান করা হয়েছে: প্রসঙ্গ উইন্ডো {contextLength} টোকেনগুলি মেমরি স্তরের প্রয়োজনীয় ন্যূনতম {required}-টোকেনের নীচে। প্রত্যাহার নীরব ছেদন দ্বারা দূষিত হবে.', - 'settings.localModel.status.contextOkBadge': '{contextLength} ctx ✓', - 'settings.localModel.status.contextOkTitle': - 'কনটেক্সট উইন্ডো {contextLength} টোকেন মেমরি-লেয়ার ন্যূনতম {required} টোকেন পূরণ করে।', - 'settings.localModel.status.contextUnknownBadge': 'ctx অজানা', - 'settings.localModel.status.contextUnknownTitle': - 'প্রসঙ্গ উইন্ডো অজানা; নিশ্চিত করতে পারেনি এটি {required}-টোকেন মেমরি-লেয়ার ন্যূনতম পূরণ করে।', - 'settings.localModel.status.expectedChat': 'চ্যাট: {model}', - 'settings.localModel.status.expectedEmbedding': 'এম্বেডিং: {model}', - 'settings.localModel.status.expectedVision': 'দৃষ্টি: {model}', - 'settings.localModel.status.externalProcess': 'বাহ্যিক প্রক্রিয়া', - 'settings.localModel.status.notAvailable': 'n/a', - 'settings.mascot.customGifPlaceholder': 'https://example.com/avatar.gif', - 'settings.mascot.loadDetailError': 'মাসকট লোড করা যায়নি৷', - 'settings.mascot.loadLibraryError': 'মাসকট লাইব্রেরি লোড করা যায়নি।', - 'settings.mascot.voice.customPlaceholder': 'যেমন 21m00Tcm4TlvDq8ikWAM', - 'settings.mascot.voice.previewText': "Hi, I'm your assistant. This is a voice preview.", - 'skills.channelIcon.discord': 'Discord', - 'skills.channelIcon.imessage': 'iMessage', - 'skills.channelIcon.telegram': 'Telegram', - 'skills.channelIcon.web': 'ওয়েব', - 'skills.channelIcon.yuanbao': 'Yuanbao', - 'skills.composio.poweredBy': 'Composio দ্বারা চালিত', - 'skills.composio.staleStatusTitle': 'সংযোগগুলি পুরানো অবস্থা দেখাচ্ছে', - 'skills.create.allowedToolsHelp': 'হিসাবে SKILL.md ফ্রন্টম্যাটারে রেন্ডার করা হয়েছে', - 'skills.create.allowedToolsPlaceholder': 'node_exec, fetch', - 'skills.create.licensePlaceholder': 'MIT', - 'skills.create.tagsPlaceholder': 'ট্রেডিং, গবেষণা', - 'skills.install.errors.alreadyInstalledHint': - 'এই স্লাগের সাথে একটি দক্ষতা ইতিমধ্যেই কর্মক্ষেত্রে বিদ্যমান। প্রথমে এটি সরান বা সামনের বস্তু `metadata.id` / `name` পরিবর্তন করুন।', - 'skills.install.errors.alreadyInstalledTitle': 'দক্ষতা ইতিমধ্যেই ইনস্টল করা হয়েছে', - 'skills.install.errors.fetchFailedHint': - 'অনুরোধটি সফলভাবে সম্পূর্ণ হয়নি৷ একটি পৌঁছানোর পাবলিক ফাইলে URL পয়েন্টগুলি পরীক্ষা করুন, এবং হোস্ট একটি 2xx প্রতিক্রিয়া ফিরিয়ে দিয়েছে৷', - 'skills.install.errors.fetchFailedTitle': 'আনা ব্যর্থ হয়েছে', - 'skills.install.errors.fetchTimedOutHint': - 'দূরবর্তী হোস্ট সময়মতো সাড়া দেয়নি৷ আবার চেষ্টা করুন বা সময়সীমা বাড়ান (1-600 সেকেন্ড)।', - 'skills.install.errors.fetchTimedOutTitle': 'আনার সময় শেষ হয়েছে', - 'skills.install.errors.fetchTooLargeHint': - 'SKILL.md অবশ্যই 1 MiB এর নিচে হতে হবে। বান্ডিল করা সম্পদগুলিকে ইনলাইন করার পরিবর্তে `রেফারেন্স/` বা `স্ক্রিপ্ট/` ফাইলে ভাগ করুন।', - 'skills.install.errors.fetchTooLargeTitle': 'SKILL.md খুব বড়', - 'skills.install.errors.genericHint': - 'ব্যাকএন্ড একটি ত্রুটি ফিরিয়ে দিয়েছে। কাঁচা বার্তা নীচে দেখানো হয়.', - 'skills.install.errors.genericTitle': 'দক্ষতা ইনস্টল করা যায়নি', - 'skills.install.errors.invalidSkillHint': - 'ফ্রন্টম্যাটারটি খালি নয় `নাম` এবং `বর্ণনা` ক্ষেত্র সহ বৈধ YAML হতে হবে, `---` দ্বারা সমাপ্ত।', - 'skills.install.errors.invalidSkillTitle': 'SKILL.md পার্স করেনি', - 'skills.install.errors.invalidUrlHint': - 'শুধুমাত্র সর্বজনীন HTTPS URLগুলি অনুমোদিত। ব্যক্তিগত, লুপব্যাক এবং মেটাডেটা হোস্ট ব্লক করা হয়েছে।', - 'skills.install.errors.invalidUrlTitle': 'URL প্রত্যাখ্যান', - 'skills.install.errors.unsupportedUrlHint': - 'শুধুমাত্র সরাসরি `.md` লিঙ্কগুলি কাজ করে৷ GitHub-এর জন্য, একটি ফাইলের সাথে লিঙ্ক করুন (github.com/owner/repo/blob/.../SKILL.md) - গাছ এবং রেপো রুট ইনস্টল করা নেই।', - 'skills.install.errors.unsupportedUrlTitle': 'URL ফর্ম সমর্থিত নয়', - 'skills.install.errors.writeFailedHint': - 'ওয়ার্কস্পেস দক্ষতা ডিরেক্টরি লেখার যোগ্য ছিল না। `/.openhuman/skills/`-এর জন্য ফাইল সিস্টেমের অনুমতি পরীক্ষা করুন।', - 'skills.install.errors.writeFailedTitle': 'SKILL.md লেখা যায়নি', - 'skills.install.fetchingPrefix': 'আনা হচ্ছে', - 'skills.install.fetchingSuffix': 'এটি আপনার কনফিগার করা সময়সীমা পর্যন্ত নিতে পারে।', - 'skills.install.subtitleMiddle': 'HTTPS এর উপরে এবং এটিকে', - 'skills.install.subtitlePrefix': 'এর অধীনে ইনস্টল করে একটি একক', - 'skills.install.subtitleSuffix': - 'HTTPS শুধুমাত্র আনয়ন করে; ব্যক্তিগত এবং লুপব্যাক হোস্ট অবরুদ্ধ।', - 'skills.install.successDiscovered': 'আবিষ্কৃত {count} নতুন দক্ষতা(গুলি)।', - 'skills.install.successNoNewIds': - 'দক্ষতা ইনস্টল করা হয়েছে, কিন্তু কোনো নতুন দক্ষতা আইডি উপস্থিত হয়নি - ক্যাটালগে ইতিমধ্যেই একই স্লাগ সহ একটি দক্ষতা থাকতে পারে।', - 'skills.install.timeoutHelp': - 'ডিফল্ট 60 সেকেন্ড। 1-600 এর বাইরের মানগুলি সার্ভার-সাইডে ক্ল্যাম্প করা হয়৷', - 'skills.install.timeoutInvalid': '1 এবং 600 এর মধ্যে একটি পূর্ণসংখ্যা হতে হবে।', - 'skills.install.timeoutPlaceholder': '60', - 'skills.install.urlHelpMiddle': 'ফাইল', - 'skills.install.urlHelpPrefix': 'একটি সরাসরি লিঙ্ক', - 'skills.install.urlHelpSuffix': 'URL এর স্বয়ংক্রিয়-পুনঃলিখন', - 'skills.install.urlInvalidPrefix': 'URL অবশ্যই একটি সুগঠিত', - 'skills.install.urlInvalidSuffix': 'লিঙ্ক হতে হবে।', - 'skills.install.urlPlaceholder': 'https://raw.githubusercontent.com/owner/repo/main/SKILL.md', - 'skills.meetingBots.platformComingSoon': '{label} সমর্থন শীঘ্রই আসছে।', - 'skills.meetingBots.platformHints.gmeet': 'meet.google.com/abc-defg-hij', - 'skills.meetingBots.platformHints.teams': 'teams.microsoft.com/...', - 'skills.meetingBots.platformHints.zoom': 'zoom.us/j/...', - 'skills.meetingBots.platforms.gmeet': 'zoom.us/j/... [[I18N_SEP_92731]__7]92', - 'skills.meetingBots.platforms.teams': 'মাইক্রোসফট টিম', - 'skills.meetingBots.platforms.zoom': 'জুম', - 'skills.meetingBots.soonSuffix': 'শীঘ্রই', - 'skills.setup.screenIntel.permissionPathLabel': 'macOS গোপনীয়তা প্রযোজ্য:', - 'settings.agentAccess.title': 'Agent OS access', - 'settings.agentAccess.menuDesc': - 'Control where the agent can read/write and whether it can use the shell.', - 'settings.agentAccess.loadError': 'Failed to load access settings', - 'settings.agentAccess.saveError': 'Failed to save access settings', - 'settings.agentAccess.saved': 'Saved — applies on your next message.', - 'settings.agentAccess.desktopOnly': 'Access settings are only available in the desktop app.', - 'settings.agentAccess.loading': 'Loading…', - 'settings.agentAccess.accessMode': 'Access mode', - 'settings.agentAccess.tier.readonly.title': 'Read-only', - 'settings.agentAccess.tier.readonly.desc': - 'Reads files and runs read-only commands to explore — but never writes, edits, or runs anything that changes state.', - 'settings.agentAccess.tier.supervised.title': 'Ask before edit', - 'settings.agentAccess.tier.supervised.desc': - 'Creates new files freely, but asks for your approval before editing an existing file, running a command, reaching the network, or installing anything.', - 'settings.agentAccess.tier.full.title': 'Full access', - 'settings.agentAccess.tier.full.desc': - 'Runs commands with your full user account access — it can read/write anywhere allowed, except credential and system stores. Destructive commands, network access, and installs still ask for approval.', - 'settings.agentAccess.defaultTag': '(default)', - 'settings.agentAccess.fullWarning': - '⚠ Full access runs commands with your full account access and is not sandboxed. Only enable it when you trust the agent with this machine. Credential and system directories stay blocked, and destructive, network, and install actions still ask for approval.', - 'settings.agentAccess.confine.label': 'Confine to workspace', - 'settings.agentAccess.confine.desc': - 'Restrict the agent to the workspace directory (plus any granted folders), whichever access mode is selected. When off, it can reach anywhere your user can — except the always-blocked credential and system directories.', - 'settings.agentAccess.grantedFolders': 'Granted folders', - 'settings.agentAccess.alwaysAllow': 'Always-allowed tools', - 'settings.agentAccess.alwaysAllowDesc': - 'Tools you marked "Always allow" in chat run without asking. Remove one to be prompted again.', - 'settings.agentAccess.alwaysAllowNone': 'No always-allowed tools yet.', - 'settings.agentAccess.grantedDesc': - 'Folders the agent may read and write, in addition to the workspace. Credential stores (~/.ssh, ~/.gnupg, ~/.aws, keychains) and system directories (/etc, /System, C:\\Windows, …) are always blocked, even inside a granted folder.', - 'settings.agentAccess.noneGranted': 'No folders granted.', - 'settings.agentAccess.readWrite': 'read + write', - 'settings.agentAccess.readOnly': 'read-only', - 'settings.agentAccess.remove': 'Remove', - 'settings.agentAccess.pathPlaceholder': 'ফোল্ডারের সম্পূর্ণ পাথ', - 'settings.agentAccess.accessLevelLabel': 'Access level', - 'settings.agentAccess.add': 'Add', - 'settings.agentAccess.saving': 'Saving…', - 'settings.agentAccess.changesApply': 'Changes apply on your next message.', - 'skills.tabs.runners': 'Runners', - 'settings.developerMenu.skillsRunner.title': 'Skills Runner', - 'settings.developerMenu.skillsRunner.desc': - 'Run any bundled skill ad-hoc — fill its inputs and fire a background autonomous run', - 'settings.developerMenu.skillsRunner.panelDesc': - 'Pick a bundled skill, fill in its declared inputs, and fire a fire-and-forget background run. Use Dev Workflow instead if you want a cron-scheduled recurring job.', - 'settings.skillsRunner.skill': 'Skill', - 'settings.skillsRunner.selectSkill': 'Select a skill…', - 'settings.skillsRunner.loadingSkills': 'Loading skills…', - 'settings.skillsRunner.loadingDescription': 'Loading skill inputs…', - 'settings.skillsRunner.noInputs': 'This skill declares no inputs.', - 'settings.skillsRunner.placeholder.required': 'required', - 'settings.skillsRunner.runNow': 'Run now', - 'settings.skillsRunner.starting': 'Starting…', - 'settings.skillsRunner.started': 'Started — run id:', - 'settings.skillsRunner.logPath': 'Log:', - 'settings.skillsRunner.error.listSkills': 'Failed to load skills:', - 'settings.skillsRunner.error.describe': 'Failed to load inputs:', - 'settings.skillsRunner.error.missingRequired': 'Missing required input(s):', - 'settings.skillsRunner.error.run': 'Run failed to start:', - 'settings.skillsRunner.error.preflightGate': 'Preflight gate failed', - 'settings.skillsRunner.schedule.heading': 'Schedule (recurring)', - 'settings.skillsRunner.schedule.help': - 'Save this skill + inputs as a recurring cron job. The agent will call run_skill at each tick.', - 'settings.skillsRunner.schedule.frequency': 'Frequency', - 'settings.skillsRunner.schedule.every30min': 'Every 30 minutes', - 'settings.skillsRunner.schedule.everyHour': 'Every hour', - 'settings.skillsRunner.schedule.every2hours': 'Every 2 hours', - 'settings.skillsRunner.schedule.every6hours': 'Every 6 hours', - 'settings.skillsRunner.schedule.onceDaily': 'Once daily (9:00)', - 'settings.skillsRunner.schedule.save': 'Save schedule', - 'settings.skillsRunner.schedule.saving': 'Saving…', - 'settings.skillsRunner.schedule.saved': 'Schedule saved.', - 'settings.skillsRunner.schedule.error': 'Schedule save failed:', - 'settings.skillsRunner.schedule.loadingJobs': 'Loading existing schedules…', - 'settings.skillsRunner.schedule.noJobs': 'No schedules saved for this skill yet.', - 'settings.skillsRunner.schedule.existing': 'Scheduled jobs for this skill:', - 'settings.skillsRunner.schedule.runNow': 'Run', - 'settings.skillsRunner.schedule.remove': 'Remove', - 'settings.skillsRunner.recentRuns.headingForSkill': 'Recent runs for this skill', - 'settings.skillsRunner.recentRuns.headingAll': 'Recent skill runs (all)', - 'settings.skillsRunner.recentRuns.refresh': 'Refresh', - 'settings.skillsRunner.recentRuns.loading': 'Loading recent runs…', - 'settings.skillsRunner.recentRuns.empty': 'No recent runs.', - 'settings.skillsRunner.viewer.loading': 'Loading log…', - 'settings.skillsRunner.viewer.tailing': 'Live tailing', - 'settings.skillsRunner.viewer.fetching': 'fetching', - 'settings.skillsRunner.viewer.error': 'Log read failed:', - 'settings.skillsRunner.repoPicker.loading': 'Loading repositories…', - 'settings.skillsRunner.repoPicker.select': 'Select a repository…', - 'settings.skillsRunner.repoPicker.empty': - 'No repositories returned. Connect GitHub via Composio to populate this list.', - 'settings.skillsRunner.repoPicker.notConnected': - 'GitHub isn’t connected via Composio. Connect it under Skills → Composio first.', - 'settings.skillsRunner.repoPicker.privateTag': '(private)', - 'settings.skillsRunner.branchPicker.needRepo': 'Pick a repo first…', - 'settings.skillsRunner.branchPicker.loading': 'Loading branches…', - 'settings.skillsRunner.branchPicker.select': 'Select a branch…', - 'settings.modelHealth.title': 'Model Health', - 'settings.modelHealth.desc': - 'Per-model quality, hallucination rate, and cost comparison across active models', - 'settings.modelHealth.allStatuses': 'All statuses', - 'settings.modelHealth.models': 'models', - 'settings.modelHealth.loading': 'Loading model data...', - 'settings.modelHealth.empty': 'No models registered', - 'settings.modelHealth.col.model': 'Model', - 'settings.modelHealth.col.quality': 'Quality', - 'settings.modelHealth.col.halluc': 'Halluc. Rate', - 'settings.modelHealth.col.cost': 'Cost / 1M out', - 'settings.modelHealth.col.agents': 'Agents', - 'settings.modelHealth.col.status': 'Status', - 'settings.modelHealth.badge.keep': 'Keep', - 'settings.modelHealth.badge.replace': 'Replace', - 'settings.modelHealth.badge.staging': 'Staging test', - 'settings.modelHealth.badge.vision': 'Vision only', - 'settings.modelHealth.swap': 'Swap?', - 'settings.modelHealth.modal.title': 'Replace Model?', - 'settings.modelHealth.modal.hallucRate': 'Hallucination rate', - 'settings.modelHealth.modal.cancel': 'Cancel', - 'settings.modelHealth.modal.apply': 'Apply Replacement', - 'settings.modelHealth.tag.cheaper': 'CHEAPER', - 'settings.modelHealth.tag.better': 'BETTER', - // Task sources (#task-sources) - 'settings.taskSources.title': 'Task Sources', - 'settings.taskSources.subtitle': 'Pull tasks from your tools onto the agent todo board', - 'settings.taskSources.description': - 'Collect work items from GitHub, Notion, Linear, and ClickUp, enrich them, and route them onto the agent todo board.', - 'settings.taskSources.connectHint': - 'Task sources use your connected accounts. Connect them under Integrations first.', - 'settings.taskSources.disabledBanner': - 'Task sources are disabled in settings. Enable them to poll automatically.', - 'settings.taskSources.loadError': 'Failed to load task sources', - 'settings.taskSources.addTitle': 'Add a task source', - 'settings.taskSources.provider': 'Provider', - 'settings.taskSources.name': 'Name (optional)', - 'settings.taskSources.namePlaceholder': 'e.g. My open issues', - 'settings.taskSources.github.repo': 'Repository (owner/name, optional)', - 'settings.taskSources.github.labels': 'Labels (comma-separated)', - 'settings.taskSources.notion.database': 'Database (board) ID', - 'settings.taskSources.linear.team': 'Team ID (optional)', - 'settings.taskSources.clickup.team': 'Workspace (team) ID (optional)', - 'settings.taskSources.assignedToMe': 'Only items assigned to me', - 'settings.taskSources.add': 'Add source', - 'settings.taskSources.adding': 'Adding…', - 'settings.taskSources.preview': 'Preview', - 'settings.taskSources.previewResult': '{count} task(s) match this filter', - 'settings.taskSources.fetchNow': 'Fetch now', - 'settings.taskSources.fetching': 'Fetching…', - 'settings.taskSources.fetchResult': 'Routed {routed} of {fetched} task(s)', - 'settings.taskSources.configured': 'Configured sources', - 'settings.taskSources.empty': 'No task sources configured yet.', - 'settings.taskSources.proactive': 'Proactive', - 'settings.taskSources.lastFetch': 'Last fetch', - 'settings.taskSources.never': 'Never', - 'settings.taskSources.statusEnabled': 'Enabled', - 'settings.taskSources.statusDisabled': 'Disabled', - 'settings.taskSources.enable': 'Enable', - 'settings.taskSources.disable': 'Disable', - 'settings.taskSources.remove': 'Remove', - 'settings.taskSources.removeConfirm': - 'Remove this task source? All ingested task history will be deleted and cannot be undone.', - - 'settings.taskSources.refresh': 'Refresh', - // Task sources provider labels (#task-sources) - 'settings.taskSources.providers.github': 'GitHub', - 'settings.taskSources.providers.notion': 'Notion', - 'settings.taskSources.providers.linear': 'Linear', - 'settings.taskSources.providers.clickup': 'ClickUp', - - // /skills IA restructure (Phase 2/3) — dashboard + new-skill page. - 'skills.dashboard.title': 'Skills', - 'skills.dashboard.scheduledHeading': 'Scheduled skills', - 'skills.dashboard.emptyTitle': 'No scheduled skills', - 'skills.dashboard.emptyBody': - 'Run a bundled skill once or save a recurring schedule to see it here.', - 'skills.dashboard.create': 'Create a Skill', - 'skills.dashboard.run': 'Run a Skill', - 'skills.dashboard.enable': 'Enable scheduled skill', - 'skills.dashboard.disable': 'Disable scheduled skill', - 'skills.dashboard.lastRun': 'Last run', - 'skills.dashboard.nextRun': 'Next run', - 'skills.dashboard.cardOpenRunner': 'Open in runner', - 'skills.dashboard.loadError': 'Failed to load scheduled skills', - 'skills.new.title': 'Create a skill', - 'skills.new.placeholderBody': - 'Authoring form arrives soon. For now, use the “New skill” button on the runner page.', - 'settings.agentAccess.requireTaskPlanApproval.label': 'Require task plan approval', - 'settings.agentAccess.requireTaskPlanApproval.desc': - 'Pause before an assigned agent executes an agent-authored task brief.', -}; - -export default bn5; diff --git a/app/src/lib/i18n/chunks/de-1.ts b/app/src/lib/i18n/chunks/de-1.ts deleted file mode 100644 index a80055f56..000000000 --- a/app/src/lib/i18n/chunks/de-1.ts +++ /dev/null @@ -1,1638 +0,0 @@ -import type { TranslationMap } from '../types'; - -// German (Deutsch) translations. Each chunk maps to chunks/en-1.ts. -const de1: TranslationMap = { - 'nav.home': 'Start', - 'nav.human': 'Mensch', - 'nav.chat': 'Chat', - 'nav.connections': 'Verbindungen', - 'nav.memory': 'Intelligenz', - 'nav.alerts': 'Benachrichtigungen', - 'nav.rewards': 'Belohnungen', - 'nav.settings': 'Einstellungen', - 'common.cancel': 'Abbrechen', - 'common.save': 'Speichern', - 'common.confirm': 'Bestätigen', - 'common.delete': 'Löschen', - 'common.edit': 'Bearbeiten', - 'common.create': 'Erstellen', - 'common.search': 'Suchen', - 'common.loading': 'Laden…', - 'common.error': 'Fehler', - 'common.success': 'Erfolg', - 'common.back': 'Zurück', - 'common.next': 'Weiter', - 'common.finish': 'Fertig', - 'common.close': 'Schließen', - 'common.enabled': 'Aktiviert', - 'common.disabled': 'Deaktiviert', - 'common.on': 'Ein', - 'common.off': 'Aus', - 'common.yes': 'Ja', - 'common.no': 'Nein', - 'common.ok': 'Verstanden', - 'common.retry': 'Erneut versuchen', - 'common.copy': 'Kopieren', - 'common.copied': 'Kopiert', - 'common.learnMore': 'Mehr erfahren', - 'common.seeAll': 'Alle anzeigen', - 'common.dismiss': 'Ausblenden', - 'common.clear': 'Leeren', - 'common.reset': 'Zurücksetzen', - 'common.refresh': 'Aktualisieren', - 'common.export': 'Exportieren', - 'common.import': 'Importieren', - 'common.upload': 'Hochladen', - 'common.download': 'Herunterladen', - 'common.add': 'Hinzufügen', - 'common.remove': 'Entfernen', - 'common.showMore': 'Mehr anzeigen', - 'common.showLess': 'Weniger anzeigen', - 'common.submit': 'Senden', - 'common.continue': 'Weiter', - 'common.comingSoon': 'Demnächst verfügbar', - 'settings.general': 'Allgemein', - 'settings.featuresAndAI': 'Funktionen und KI', - 'settings.billingAndRewards': 'Abrechnung und Prämien', - 'settings.support': 'Unterstützung', - 'settings.advanced': 'Erweitert', - 'settings.dangerZone': 'Gefahrenbereich', - 'settings.account': 'Konto', - 'settings.accountDesc': 'Wiederherstellungsphrase, Team, Verbindungen und Privatsphäre', - 'settings.notifications': 'Benachrichtigungen', - 'settings.notificationsDesc': '„Bitte nicht stören“ und Benachrichtigungskontrollen pro Konto', - 'settings.notifications.tabs.preferences': 'Einstellungen', - 'settings.notifications.tabs.routing': 'Routing', - 'settings.features': 'Funktionen', - 'settings.featuresDesc': 'Bildschirmbewusstsein, Nachrichten und Tools', - 'settings.aiModels': 'KI & Modelle', - 'settings.aiModelsDesc': 'Lokales KI-Modell-Setup, Downloads und LLM-Anbieter', - 'settings.ai': 'KI-Konfiguration', - 'settings.aiDesc': 'Cloud-Anbieter, lokale Ollama-Modelle und Routing pro Workload', - 'settings.billingUsage': 'Abrechnung und Nutzung', - 'settings.billingUsageDesc': 'Abonnementplan, Guthaben und Zahlungsmethoden', - 'settings.rewards': 'Belohnungen', - 'settings.rewardsDesc': 'Empfehlungen, Gutscheine und verdiente Credits', - 'settings.restartTour': 'Tour neu starten', - 'settings.restartTourDesc': 'Wiederhole die Produktanleitung von Anfang an', - 'settings.about': 'Über', - 'settings.aboutDesc': 'App-Version und Software-Updates', - 'settings.developerOptions': 'Fortgeschritten', - 'settings.developerOptionsDesc': - 'KI-Konfiguration, Nachrichtenkanäle, Tools, Diagnose und Debug-Panels', - 'settings.clearAppData': 'App-Daten löschen', - 'settings.clearAppDataDesc': 'Melde dich ab und lösche alle lokalen App-Daten dauerhaft', - 'settings.logOut': 'Abmelden', - 'settings.logOutDesc': 'Melde dich von deinem Konto ab', - 'settings.language': 'Sprache', - 'settings.languageDesc': 'Anzeigesprache für die App-Oberfläche', - 'settings.alerts': 'Warnungen', - 'settings.alertsDesc': - 'Sieh dir aktuelle Benachrichtigungen und Aktivitäten in deinem Posteingang an', - 'settings.account.recoveryPhrase': 'Wiederherstellungssatz', - 'settings.account.recoveryPhraseDesc': - 'Sieh dir deinen Kontowiederherstellungssatz an und sichere ihn', - 'settings.account.team': 'Team', - 'settings.account.teamDesc': 'Verwalte Teammitglieder und Berechtigungen', - 'settings.account.connections': 'Verbindungen', - 'settings.account.connectionsDesc': 'Verwalte verknüpfte Konten und Dienste', - 'settings.account.privacy': 'Privatsphäre', - 'settings.account.privacyDesc': 'Kontrolliere, welche Daten deinen Computer verlassen', - 'migration.title': 'Von einem anderen Assistenten importieren', - 'migration.description': - 'Speicher und Notizen von einem anderen lokalen Assistenten in diesen Arbeitsbereich migrieren. Beginne mit einer Vorschau, um genau zu sehen, was sich ändern würde, und kopiere dann die Daten mit „Übernehmen“. Dein aktueller Speicher wird zunächst gesichert.', - 'migration.vendorLabel': 'Quellanbieter', - 'migration.sourceLabel': 'Quellarbeitsbereichspfad (optional)', - 'migration.sourcePlaceholder': - 'Zur automatischen Erkennung leer lassen (z. B. ~/.openclaw/workspace)', - 'migration.sourcePlaceholderHermes': 'Leave blank to auto-detect (e.g. ~/.hermes)', - 'migration.sourceHint': - 'Wenn leer, wird standardmäßig der Standardspeicherort des Anbieters verwendet. Lege einen expliziten Pfad fest, wenn du den Arbeitsbereich an einen anderen Ort verschoben hast.', - 'migration.previewAction': 'Vorschau', - 'migration.previewRunning': 'Vorschau...', - 'migration.applyAction': 'Import anwenden', - 'migration.applyRunning': 'Importieren…', - 'migration.applyDisclaimer': - '„Anwenden“ wird nach einer erfolgreichen Vorschau derselben Quelle freigeschaltet. Vor jedem Import wird der vorhandene Speicher gesichert.', - 'migration.reportTitlePreview': 'Vorschau – noch nichts importiert', - 'migration.reportTitleApplied': 'Import abgeschlossen', - 'migration.report.source': 'Quellarbeitsbereich', - 'migration.report.target': 'Zielarbeitsbereich', - 'migration.report.fromSqlite': 'Von SQLite (brain.db)', - 'migration.report.fromMarkdown': 'Von Markdown', - 'migration.report.imported': 'Importiert', - 'migration.report.skippedUnchanged': 'Übersprungen (unverändert)', - 'migration.report.renamedConflicts': 'Aufgrund eines Konflikts umbenannt', - 'migration.report.warnings': 'Warnungen', - 'migration.report.previewHint': - 'Es wurden noch keine Daten importiert. Klicke auf Import anwenden, um ihn zu kopieren.', - 'migration.report.appliedHint': - 'Importierte Einträge sind jetzt in deinem Speicher. Führe die Vorschau erneut aus, wenn du noch einmal vergleichen möchtest.', - 'migration.confirmImport.singular': - 'Eintrag {count} in den aktuellen Arbeitsbereich importieren?\n\nQuelle: {source}\nZiel: {target}\n\nVorhandener Speicher wird gesichert, bevor der Import ausgeführt wird.', - 'migration.confirmImport.plural': - '{count} Einträge in den aktuellen Arbeitsbereich importieren?\n\nQuelle: {source}\nZiel: {target}\n\nVorhandener Speicher wird gesichert, bevor der Import ausgeführt wird.', - 'settings.notifications.doNotDisturb': 'Bitte nicht stören', - 'settings.notifications.doNotDisturbDesc': - 'Pausiere alle Benachrichtigungen für einen festgelegten Zeitraum', - 'settings.notifications.channelControls': 'Steuerung pro Kanal', - 'settings.notifications.channelControlsDesc': - 'Konfiguriere Benachrichtigungseinstellungen für jeden Kanal', - 'settings.features.screenAwareness': 'Bildschirmbewusstsein', - 'settings.features.screenAwarenessDesc': 'Lass den Assistenten dein aktives Fenster sehen', - 'settings.features.messaging': 'Nachrichten', - 'settings.features.messagingDesc': 'Einstellungen für die Kanal- und Messaging-Integration', - 'settings.features.tools': 'Werkzeuge', - 'settings.features.toolsDesc': 'Verwalte verbundene Tools und Integrationen', - 'settings.ai.localSetup': 'Lokales KI-Setup', - 'settings.ai.localSetupDesc': 'Lade lokale KI-Modelle herunter und konfiguriere sie', - 'settings.ai.llmProvider': 'LLM Anbieter', - 'settings.ai.llmProviderDesc': 'Wähle und konfiguriere deinen KI-Anbieter', - 'clearData.title': 'App-Daten löschen', - 'clearData.warning': - 'Dadurch wirst du abgemeldet und lokale App-Daten werden dauerhaft gelöscht, einschließlich:', - 'clearData.bulletSettings': 'App-Einstellungen und Konversationen', - 'clearData.bulletCache': 'Alle Daten des lokalen Integrationscache', - 'clearData.bulletWorkspace': 'Arbeitsbereichsdaten', - 'clearData.bulletOther': 'Alle anderen lokalen Daten', - 'clearData.irreversible': 'Diese Aktion kann nicht rückgängig gemacht werden.', - 'clearData.clearing': 'App-Daten löschen...', - 'clearData.failed': 'Daten löschen und Abmelden fehlgeschlagen. Bitte versuche es erneut.', - 'clearData.failedLogout': 'Abmelden fehlgeschlagen. Bitte versuche es erneut.', - 'clearData.failedPersist': - 'Der persistente App-Status konnte nicht gelöscht werden. Bitte versuche es erneut.', - 'welcome.title': 'Willkommen bei OpenHuman', - 'welcome.subtitle': - 'Deine persönliche KI-Superintelligenz. Privat, einfach und äußerst leistungsstark.', - 'welcome.connectPrompt': 'Konfiguriere RPC URL (Erweitert)', - 'welcome.selectRuntime': 'Wähle eine Laufzeit aus', - 'welcome.urlPlaceholder': 'http://localhost:8089', - 'welcome.invalidUrl': 'Bitte gib einen gültigen HTTP oder HTTPS URL ein.', - 'welcome.connecting': 'Testen', - 'welcome.connect': 'Testen', - 'home.greeting': 'Guten Morgen', - 'home.greetingAfternoon': 'Guten Tag', - 'home.greetingEvening': 'Guten Abend', - 'home.askAssistant': 'Frag deinen Assistenten etwas ...', - 'home.statusOk': - 'Dein Gerät ist verbunden. Lass die App laufen, um die Verbindung aufrechtzuerhalten. Sende deinem Agenten über die Schaltfläche unten eine Nachricht.', - 'home.statusBackendOnly': - 'Verbindung zum Backend wird wiederhergestellt. Dein Agent wird in Kürze wieder verfügbar sein.', - 'home.statusCoreUnreachable': - 'Der lokale Core-Sidecar reagiert nicht. Der Hintergrundprozess OpenHuman ist möglicherweise abgestürzt oder konnte nicht gestartet werden.', - 'home.statusInternetOffline': - 'Dein Gerät ist gerade offline. Prüfe dein Netzwerk oder starte die App neu, um die Verbindung wiederherzustellen.', - 'home.restartCore': 'Starte Core neu', - 'home.restartingCore': 'Kern wird neu gestartet...', - 'home.themeToggle.toLight': 'Wechsle in den Lichtmodus', - 'home.themeToggle.toDark': 'Wechsle in den Dunkelmodus', - 'chat.newThread': 'Neuer Thread', - 'chat.typeMessage': 'Gib eine Nachricht ein...', - 'chat.send': 'Nachricht senden', - 'chat.thinking': 'Denken...', - 'chat.noMessages': 'Noch keine Nachrichten', - 'chat.startConversation': 'Beginne ein Gespräch', - 'chat.regenerate': 'Regenerieren', - 'chat.copyResponse': 'Antwort kopieren', - 'chat.citations': 'Zitate', - 'chat.toolUsed': 'Werkzeug verwendet', - 'scope.legacy': 'Vermächtnis', - 'scope.user': 'Benutzer', - 'scope.project': 'Projekt', - 'skills.title': 'Verbindungen', - 'skills.search': 'Verbindungen suchen...', - 'skills.noResults': 'Keine Verbindungen gefunden', - 'skills.connect': 'Verbinden', - 'skills.disconnect': 'Trennen', - 'skills.configure': 'Verwalten', - 'skills.connected': 'Verbunden', - 'skills.available': 'Verfügbar', - 'skills.addAccount': 'Konto hinzufügen', - 'skills.channels': 'Kanäle', - 'skills.integrations': 'Integrationen', - 'memory.title': 'Erinnerung', - 'memory.search': 'Erinnerungen suchen...', - 'memory.noResults': 'Keine Erinnerungen gefunden', - 'memory.empty': - 'Noch keine Erinnerungen. Erinnerungen werden automatisch erstellt, während du interagierst.', - 'memory.tab.memory': 'Erinnerung', - 'memory.tab.tasks': 'Agent Tasks', - 'memory.tab.tasksDescription': - 'Create and track tasks — your own to-dos plus the boards your agents build across conversations.', - 'memory.tab.subconscious': 'Unterbewusstsein', - 'memory.tab.dreams': 'Träume', - 'memory.tab.calls': 'Anrufe', - 'memory.tab.diagram': 'Diagram', - 'memory.tab.settings': 'Einstellungen', - 'memory.analyzeNow': 'Jetzt analysieren', - 'memoryTree.status.title': 'Memory Tree', - 'memoryTree.status.autoSyncLabel': 'Auto-sync', - 'memoryTree.status.autoSyncDescription': - 'Pause to stop new ingestion. Existing wiki stays queryable.', - 'memoryTree.status.statusTile': 'Status', - 'memoryTree.status.lastSyncTile': 'Last sync', - 'memoryTree.status.totalChunksTile': 'Total chunks', - 'memoryTree.status.wikiSizeTile': 'Wiki size', - 'memoryTree.status.statusRunning': 'Running', - 'memoryTree.status.statusPaused': 'Paused', - 'memoryTree.status.statusSyncing': 'Syncing', - 'memoryTree.status.statusError': 'Error', - 'memoryTree.status.statusIdle': 'Idle', - 'memoryTree.status.never': 'Never', - 'memoryTree.status.fetchError': "Couldn't fetch Memory Tree status", - 'memoryTree.status.retry': 'Retry', - 'memoryTree.status.toggleFailed': "Couldn't toggle auto-sync", - 'memoryTree.status.justNow': 'just now', - 'memoryTree.status.secondsAgo': '{count}s ago', - 'memoryTree.status.minuteAgo': '1 min ago', - 'memoryTree.status.minutesAgo': '{count} min ago', - 'memoryTree.status.hourAgo': '1 hr ago', - 'memoryTree.status.hoursAgo': '{count} hr ago', - 'memoryTree.status.dayAgo': '1 day ago', - 'memoryTree.status.daysAgo': '{count} days ago', - 'alerts.title': 'Warnungen', - 'alerts.empty': 'Noch keine Benachrichtigungen', - 'alerts.markAllRead': 'Alle als gelesen markieren', - 'alerts.unread': 'ungelesen', - 'rewards.title': 'Belohnungen', - 'rewards.referrals': 'Empfehlungen', - 'rewards.coupons': 'Einlösen', - 'rewards.credits': 'Credits', - 'rewards.referralCode': 'Dein Empfehlungscode', - 'rewards.copyCode': 'Code kopieren', - 'rewards.share': 'Teilen', - 'onboarding.welcome': 'Hallo. Ich bin OpenHuman.', - 'onboarding.welcomeDesc': - 'Dein superintelligenter KI-Assistent, der auf deinem Computer läuft. Privat, einfach und äußerst leistungsstark.', - 'onboarding.context': 'Kontexterfassung', - 'onboarding.contextDesc': 'Verbinde die Tools und Dienste, die du täglich nutzt.', - 'onboarding.localAI': 'Lokale KI', - 'onboarding.localAIDesc': - 'Richte ein lokales KI-Modell ein, das auf deinem Computer ausgeführt wird.', - 'onboarding.chatProvider': 'Chat-Anbieter', - 'onboarding.chatProviderDesc': 'Wähle aus, wie du mit deinem Assistenten interagieren möchtest.', - 'onboarding.referral': 'Empfehlung', - 'onboarding.referralDesc': 'Wende einen Empfehlungscode an, falls du einen hast.', - 'onboarding.finish': 'Schließe die Einrichtung', - 'onboarding.finishDesc': 'Du bist bereit! Beginne mit der Verwendung von OpenHuman.', - 'onboarding.skip': 'Überspringen', - 'onboarding.getStarted': 'Lege los', - 'onboarding.runtimeChoice.title': 'Wie möchtest du OpenHuman starten?', - 'onboarding.runtimeChoice.subtitle': - 'Wähle das Setup, das am besten zu dir passt. Du kannst es später in den Einstellungen ändern.', - 'onboarding.runtimeChoice.cloud.title': 'Einfach', - 'onboarding.runtimeChoice.cloud.tagline': 'Lass OpenHuman alles für dich verwalten.', - 'onboarding.runtimeChoice.cloud.f1': 'Integrierte Sicherheit', - 'onboarding.runtimeChoice.cloud.f2': 'Token-Komprimierung, um deine Nutzung weiter auszudehnen', - 'onboarding.runtimeChoice.cloud.f3': 'Ein Abonnement, jedes Modell inklusive', - 'onboarding.runtimeChoice.cloud.f4': 'Keine API Schlüssel zum Verwalten', - 'onboarding.runtimeChoice.cloud.f5': 'Einfach einzurichten', - 'onboarding.runtimeChoice.custom.title': 'Führe Benutzerdefiniert aus', - 'onboarding.runtimeChoice.custom.tagline': - 'Bring deine eigenen Schlüssel mit. Volle Kontrolle darüber, was du verwendest.', - 'onboarding.runtimeChoice.custom.f1': 'Du brauchst für fast alles API-Schlüssel', - 'onboarding.runtimeChoice.custom.f2': 'Nutzt Dienste wieder, für die du bereits bezahlt hast', - 'onboarding.runtimeChoice.custom.f3': 'Kann kostenlos sein, wenn du alles lokal ausführst', - 'onboarding.runtimeChoice.custom.f4': 'Mehr Setup, mehr Knöpfe', - 'onboarding.runtimeChoice.custom.f5': 'Am besten für Power-User und Entwickler geeignet', - 'onboarding.runtimeChoice.cloud.creditHighlight': '1 $ Gratisguthaben zum Ausprobieren', - 'onboarding.runtimeChoice.continueCloud': 'Fahre mit „Einfach“ fort', - 'onboarding.runtimeChoice.continueCustom': 'Fahre mit Benutzerdefiniert fort', - 'onboarding.runtimeChoice.recommended': 'Empfohlen', - 'onboarding.apiKeys.title': 'Fügen wir deine API-Schlüssel hinzu', - 'onboarding.apiKeys.subtitle': - 'Du kannst sie jetzt einfügen oder überspringen und später unter „Einstellungen“ > „KI“ hinzufügen. Schlüssel werden auf diesem Gerät gespeichert und im Ruhezustand verschlüsselt.', - 'onboarding.apiKeys.openaiLabel': 'OpenAI API Schlüssel', - 'onboarding.apiKeys.openaiPlaceholder': 'sk-...', - 'onboarding.apiKeys.anthropicLabel': 'Anthropic API Schlüssel', - 'onboarding.apiKeys.anthropicPlaceholder': 'sk-ant-...', - 'onboarding.apiKeys.saveError': - 'Der Schlüssel konnte nicht gespeichert werden. Bitte prüfe ihn noch einmal und versuche es erneut.', - 'onboarding.apiKeys.skipForNow': 'Erstmal überspringen', - 'onboarding.apiKeys.continue': 'Speichern und fortfahren', - 'onboarding.apiKeys.saving': 'Sparen…', - 'onboarding.custom.stepperInference': 'Schlussfolgerung', - 'onboarding.custom.stepperVoice': 'Stimme', - 'onboarding.custom.stepperOAuth': 'OAuth', - 'onboarding.custom.stepperSearch': 'Suchen', - 'onboarding.custom.stepperEmbeddings': 'Embeddings', - 'onboarding.custom.stepperMemory': 'Erinnerung', - 'onboarding.custom.stepCounter': 'Schritt {n} von {total}', - 'onboarding.custom.defaultTitle': 'Standard', - 'onboarding.custom.defaultSubtitle': 'Lass OpenHuman das für dich erledigen.', - 'onboarding.custom.configureTitle': 'Konfigurieren', - 'onboarding.custom.configureSubtitle': 'Ich wähle aus, was ich verwenden möchte.', - 'onboarding.custom.progressAriaLabel': 'Onboarding-Fortschritt', - 'onboarding.custom.continue': 'Weiter', - 'onboarding.custom.back': 'Zurück', - 'onboarding.custom.finish': 'Schließe die Einrichtung', - 'onboarding.custom.configureLater': - 'Du kannst die Verknüpfung nach dem Onboarding abschließen. Sobald du fertig bist, wirst du auf die passende Einstellungsseite weitergeleitet.', - 'onboarding.custom.openSettings': 'In den Einstellungen öffnen', - 'onboarding.custom.inference.title': 'Schlussfolgerung (Text)', - 'onboarding.custom.inference.subtitle': - 'Welches Sprachmodell soll deine Fragen beantworten und deine Agenten betreiben?', - 'onboarding.custom.inference.defaultDesc': - 'OpenHuman leitet jede Arbeitslast an ein sinnvolles Standardmodell weiter. Keine Schlüssel, keine Einrichtung.', - 'onboarding.custom.inference.configureDesc': - 'Bring deinen eigenen OpenAI- oder Anthropic-Schlüssel mit. Wir verwenden ihn für jede textbasierte Arbeitslast.', - 'onboarding.custom.voice.title': 'Stimme', - 'onboarding.custom.voice.subtitle': 'Speech-to-Text und Text-to-Speech für den Sprachmodus.', - 'onboarding.custom.voice.defaultDesc': - 'OpenHuman wird mit verwaltetem STT/TTS geliefert, das einfach funktioniert. Nichts zu verkabeln.', - 'onboarding.custom.voice.configureDesc': - 'Verwende dein eigenes ElevenLabs / OpenAI Whisper / usw. Konfiguriere es in den Einstellungen › Stimme.', - 'onboarding.custom.oauth.title': 'Verbindungen (OAuth)', - 'onboarding.custom.oauth.subtitle': - 'Gmail, Slack, Notion und andere verbundene Dienste, die OAuth benötigen.', - 'onboarding.custom.oauth.defaultDesc': - 'OpenHuman führt einen verwalteten Composio-Arbeitsbereich aus. Ein Klick, um jeden Dienst später zu verbinden.', - 'onboarding.custom.oauth.configureDesc': - 'Bring dein eigenes Composio-Konto / API-Schlüssel mit. Konfiguriere unter Einstellungen › Verbindungen.', - 'onboarding.custom.search.title': 'Websuche', - 'onboarding.custom.search.subtitle': 'Wie OpenHuman das Web in deinem Namen durchsucht.', - 'onboarding.custom.search.defaultDesc': - 'OpenHuman verwendet ein verwaltetes Such-Backend. Keine Schlüssel erforderlich.', - 'onboarding.custom.search.configureDesc': - 'Bring deinen eigenen Suchanbieterschlüssel mit (Tavily, Brave usw.). Konfiguriere unter Einstellungen › Extras.', - 'onboarding.custom.embeddings.title': 'Embeddings', - 'onboarding.custom.embeddings.subtitle': - 'How OpenHuman generates vector embeddings for semantic memory search.', - 'onboarding.custom.embeddings.defaultDesc': - 'OpenHuman uses a managed embedding service. No API key needed.', - 'onboarding.custom.embeddings.configureDesc': - 'Bring your own embedding provider (OpenAI, Voyage, Ollama, etc.).', - 'onboarding.custom.memory.title': 'Erinnerung', - 'onboarding.custom.memory.subtitle': - 'Wie OpenHuman sich deinen Kontext, deine Vorlieben und frühere Gespräche merkt.', - 'onboarding.custom.memory.defaultDesc': - 'OpenHuman verwaltet die Speicherung und den Abruf des Speichers automatisch. Nichts einzurichten.', - 'onboarding.custom.memory.configureDesc': - 'Überprüfe, exportiere oder lösche den Speicher selbst. Konfiguriere in den Einstellungen › Speicher.', - 'accounts.addAccount': 'Konto hinzufügen', - 'accounts.manageAccounts': 'Konten verwalten', - 'accounts.noAccounts': 'Keine Konten verbunden', - 'accounts.connectAccount': 'Verbinde ein Konto, um loszulegen', - 'accounts.agent': 'Agent', - 'accounts.respondQueue': 'Antwortwarteschlange', - 'accounts.disconnect': 'Trennen', - 'accounts.disconnectConfirm': 'Möchtest du dieses Konto wirklich trennen?', - 'accounts.disconnectClearMemory': 'Also delete memory from this source', - 'accounts.disconnectClearMemoryHint': - 'Permanently removes local memory chunks linked to this connection.', - 'accounts.searchAccounts': 'Konten durchsuchen...', - 'channels.title': 'Kanäle', - 'channels.configure': 'Kanal konfigurieren', - 'channels.setup': 'Einrichtung', - 'channels.noChannels': 'Keine Kanäle konfiguriert', - 'channels.addChannel': 'Kanal hinzufügen', - 'channels.status.connected': 'Verbunden', - 'channels.status.disconnected': 'Nicht verbunden', - 'channels.status.error': 'Fehler', - 'channels.status.configuring': 'Konfigurieren', - 'channels.defaultMessaging': 'Standard-Messaging-Kanal', - 'webhooks.title': 'Webhooks', - 'webhooks.create': 'Erstelle einen Webhook', - 'webhooks.noWebhooks': 'Keine Webhooks konfiguriert', - 'webhooks.url': 'URL', - 'webhooks.secret': 'Geheimnis', - 'webhooks.events': 'Veranstaltungen', - 'webhooks.archiveDirectory': 'Archivverzeichnis', - 'webhooks.todayFile': 'Heutige Akte', - 'invites.title': 'Lädt ein', - 'invites.create': 'Einladung erstellen', - 'invites.noInvites': 'Keine ausstehenden Einladungen', - 'invites.code': 'Einladungscode', - 'invites.copyLink': 'Link kopieren', - 'devOptions.title': 'Fortgeschritten', - 'devOptions.diagnostics': 'Diagnose', - 'devOptions.diagnosticsDesc': 'Systemzustand, Protokolle und Leistungsmetriken', - 'devOptions.toolPolicyDiagnosticsDesc': - 'Tool inventory, policy posture, MCP allowlists, and recent blocks', - 'devOptions.toolPolicyDiagnostics.loading': 'Loading…', - 'devOptions.toolPolicyDiagnostics.unavailable': 'Diagnostics unavailable', - 'devOptions.toolPolicyDiagnostics.posture.title': 'Policy posture', - 'devOptions.toolPolicyDiagnostics.posture.autonomy': 'Autonomy:', - 'devOptions.toolPolicyDiagnostics.posture.workspaceOnly': 'Workspace only:', - 'devOptions.toolPolicyDiagnostics.posture.maxActionsPerHour': 'Max actions/hr:', - 'devOptions.toolPolicyDiagnostics.posture.approvalMediumRisk': 'Approval (medium risk):', - 'devOptions.toolPolicyDiagnostics.posture.blockHighRisk': 'Block high risk:', - 'devOptions.toolPolicyDiagnostics.inventory.title': 'Inventory', - 'devOptions.toolPolicyDiagnostics.inventory.totalTools': 'Total tools', - 'devOptions.toolPolicyDiagnostics.inventory.enabledTools': 'Enabled tools', - 'devOptions.toolPolicyDiagnostics.inventory.mcpStdioTools': 'MCP stdio tools', - 'devOptions.toolPolicyDiagnostics.inventory.jsonRpcTools': 'JSON-RPC tools', - 'devOptions.toolPolicyDiagnostics.mcpAllowlists.title': 'MCP allowlists', - 'devOptions.toolPolicyDiagnostics.mcpAllowlists.summary': - 'Enabled: {enabled} · Servers: {enabledCount}/{totalCount}', - 'devOptions.toolPolicyDiagnostics.mcpAllowlists.unnamed': '', - 'devOptions.toolPolicyDiagnostics.mcpAllowlists.allowDeny': 'allow={allowCount} deny={denyCount}', - 'devOptions.toolPolicyDiagnostics.mcpWriteAudit.title': 'MCP write audit', - 'devOptions.toolPolicyDiagnostics.mcpWriteAudit.summary': - 'Enabled: {enabled} · Recent (24h): {recentRows}', - 'devOptions.toolPolicyDiagnostics.recentBlocked.title': 'Recent blocked calls', - 'devOptions.toolPolicyDiagnostics.recentBlocked.empty': 'No blocked calls recorded.', - 'devOptions.toolPolicyDiagnostics.redactedSurfaces.title': 'Redacted surfaces', - 'devOptions.toolPolicyDiagnostics.redactedSurfaces.summary': - 'Write-capable: {writeCount} · Policy surfaces: {policyCount}', - 'devOptions.debugPanels': 'Debug-Panels', - 'devOptions.debugPanelsDesc': 'Feature-Flags, Zustandsprüfung und Debugging-Tools', - 'devOptions.webhooks': 'Webhooks', - 'devOptions.webhooksDesc': 'Konfiguriere und teste Webhook-Integrationen', - 'devOptions.memoryInspection': 'Speicherinspektion', - 'devOptions.memoryInspectionDesc': 'Speichereinträge durchsuchen, abfragen und verwalten', - 'voice.pushToTalk': 'Push-to-Talk', - 'voice.recording': 'Aufnahme...', - 'voice.processing': 'Verarbeitung...', - 'voice.languageHint': 'Sprache', - 'misc.rehydrating': 'Deine Daten werden geladen...', - 'misc.checkingServices': 'Dienste prüfen...', - 'misc.serviceUnavailable': 'Dienst nicht verfügbar', - 'misc.somethingWentWrong': 'Etwas ist schief gelaufen', - 'misc.tryAgainLater': 'Bitte versuche es später noch einmal.', - 'misc.restartApp': 'App neu starten', - 'misc.updateAvailable': 'Update verfügbar', - 'misc.updateNow': 'Jetzt aktualisieren', - 'misc.updateLater': 'Später', - 'misc.downloading': 'Herunterladen...', - 'misc.installing': 'Installieren...', - 'misc.beta': - 'OpenHuman befindet sich in der frühen Betaphase. Teile uns gerne dein Feedback mit oder melde Fehler, auf die du stößt – jede Meldung hilft uns, schneller zu liefern.', - 'misc.betaFeedback': 'Feedback senden', - 'mnemonic.title': 'Wiederherstellungssatz', - 'mnemonic.warning': - 'Schreibe diese Wörter der Reihe nach auf und bewahre sie an einem sicheren Ort auf.', - 'mnemonic.copyWarning': - 'Gib niemals deine Wiederherstellungsphrase weiter. Jeder mit diesen Wörtern kann auf dein Konto zugreifen.', - 'mnemonic.copied': 'Wiederherstellungsphrase in die Zwischenablage kopiert', - 'mnemonic.reveal': 'Satz enthüllen', - 'mnemonic.revealPhrase': 'Reveal recovery phrase', - 'mnemonic.hidden': 'Die Wiederherstellungsphrase ist ausgeblendet', - 'privacy.title': 'Datenschutz und Sicherheit', - 'privacy.description': 'Transparenzbericht der an externe Dienste gesendeten Daten.', - 'privacy.empty': 'Keine externen Datenübertragungen erkannt.', - 'privacy.whatLeavesComputer': 'Was deinen Computer verlässt', - 'privacy.loading': 'Datenschutzdetails werden geladen...', - 'privacy.loadError': - 'Die Live-Datenschutzliste konnte nicht geladen werden. Die unten aufgeführten Analytics-Steuerelemente funktionieren weiterhin.', - 'privacy.noCapabilities': 'Derzeit geben keine Funktionen Datenbewegungen offen.', - 'privacy.sentTo': 'Gesendet an', - 'privacy.leavesDevice': 'Verlässt das Gerät', - 'privacy.staysLocal': 'Bleibt lokal', - 'privacy.anonymizedAnalytics': 'Anonymisierte Analysen', - 'privacy.shareAnonymizedData': 'Teile anonymisierte Nutzungsdaten', - 'privacy.shareAnonymizedDataDesc': - 'Hilf mit, OpenHuman zu verbessern, indem du anonyme Absturzberichte und Nutzungsanalysen teilst. Alle Daten sind vollständig anonymisiert – es werden niemals persönliche Daten, Nachrichten, Wallet-Schlüssel oder Sitzungsinformationen erfasst.', - 'privacy.meetingFollowUps': 'Nachbereitung von Besprechungen', - 'privacy.autoHandoffMeet': 'Automatische Übergabe Google Meet-Transkripte an den Orchestrator', - 'privacy.autoHandoffMeetDesc': - 'Wenn ein Google Meet-Anruf endet, kann der Orchestrator von OpenHuman das Transkript lesen und Maßnahmen wie das Verfassen von Nachrichten, das Planen von Folgemaßnahmen oder das Veröffentlichen von Zusammenfassungen in deinem verbundenen Slack-Arbeitsbereich ergreifen. Standardmäßig deaktiviert.', - 'privacy.analyticsDisclaimer': - 'Alle Analysen und Fehlerberichte sind vollständig anonymisiert. Wenn diese Option aktiviert ist, erfassen wir nur Absturzinformationen, den Gerätetyp und den Dateispeicherort von Fehlern. Wir greifen niemals auf deine Nachrichten, Sitzungsdaten, Wallet-Schlüssel, API-Schlüssel oder andere persönlich identifizierbare Informationen zu. Du kannst diese Einstellung jederzeit ändern.', - 'settings.about.version': 'Version', - 'settings.about.updateAvailable': 'ist vorhanden', - 'settings.about.softwareUpdates': 'Software-Updates', - 'settings.about.lastChecked': 'Zuletzt überprüft', - 'settings.about.checking': 'Überprüfen...', - 'settings.about.checkForUpdates': 'Nach Updates suchen', - 'settings.about.releases': 'Veröffentlichungen', - 'settings.about.releasesDesc': 'Durchsuche Versionshinweise und frühere Builds auf GitHub.', - 'settings.about.openReleases': 'Öffne GitHub-Releases', - 'settings.ai.overview': 'Übersicht über das KI-System', - 'settings.appearance': 'Aussehen', - 'settings.appearanceDesc': 'Wähle hell, dunkel oder passend zu deinem Systemthema', - 'settings.mascot': 'Maskottchen', - 'settings.mascotDesc': 'Wähle die Maskottchenfarbe aus, die in der gesamten App verwendet wird', - 'channels.authMode.managed_dm': 'Mit OpenHuman anmelden', - 'channels.authMode.oauth': 'OAuth-Anmeldung', - 'channels.authMode.bot_token': 'Eigenen Bot-Token verwenden', - 'channels.authMode.api_key': 'Eigenen API-Schlüssel verwenden', - 'channels.fieldRequired': '{field} ist erforderlich', - 'channels.mcp.title': 'MCP-Server', - 'channels.mcp.description': - 'Durchsuche und verwalte Model Context Protocol-Server, die die KI um neue Tools erweitern.', - 'skills.integrationsSubtitle': - 'Cloud-based OAuth connections — sign in with your account and Composio brokers the tokens so agents can read and act on your behalf. No API keys to manage.', - 'skills.tabs.composio': 'Composio', - 'skills.tabs.channels': 'Kanäle', - 'skills.tabs.mcp': 'MCP Server', - 'skills.mcpComingSoon.title': 'MCP Server', - 'skills.mcpComingSoon.description': - 'MCP server management is coming soon. This tab will be the home for discovering, connecting, and monitoring your MCP server integrations.', - 'settings.about.connection': 'Verbindung', - 'settings.about.connectionMode': 'Modus', - 'settings.about.connectionModeLocal': 'Lokal', - 'settings.about.connectionModeCloud': 'Cloud', - 'settings.about.connectionModeUnset': 'Nicht ausgewählt', - 'settings.about.serverUrl': 'Server URL', - 'settings.about.serverUrlUnavailable': 'Nicht verfügbar', - 'settings.about.connectionHelperLocal': - 'Spawned in-process by the Tauri shell on app launch. The port is chosen at startup, so this URL changes between launches.', - 'settings.about.connectionHelperCloud': - 'Connected to a remote core. Change this in BootCheck or the cloud mode picker.', - 'settings.heartbeat.title': 'Heartbeat und Schleifen', - 'settings.heartbeat.desc': 'Control background scheduling cadences and inspect the loop map.', - 'settings.ledgerUsage.title': 'Nutzungsbuch', - 'settings.ledgerUsage.desc': 'Recent credit spend, budget math, and background API read budget.', - 'settings.costDashboard.title': 'Cost dashboard', - 'settings.costDashboard.desc': - '7-day spend and token burn across the swarm, with budget pace and per-model breakdown.', - 'settings.costDashboard.sevenDayCost': '7-day daily cost', - 'settings.costDashboard.sevenDayTokens': '7-day token usage', - 'settings.costDashboard.totalSpend': '7-day total', - 'settings.costDashboard.monthlyPace': 'Monthly pace', - 'settings.costDashboard.budgetLimit': 'Budget limit', - 'settings.costDashboard.utilization': 'Utilisation', - 'settings.costDashboard.modelBreakdown': 'Per-model breakdown', - 'settings.costDashboard.model': 'Model', - 'settings.costDashboard.provider': 'Provider', - 'settings.costDashboard.cost': 'Cost', - 'settings.costDashboard.tokens': 'Tokens', - 'settings.costDashboard.requests': 'Requests', - 'settings.costDashboard.percentOfTotal': '% of total', - 'settings.costDashboard.inputTokens': 'Input', - 'settings.costDashboard.outputTokens': 'Output', - 'settings.costDashboard.budgetNormal': 'On track', - 'settings.costDashboard.budgetWarning': 'Warning', - 'settings.costDashboard.budgetExceeded': 'Over budget', - 'settings.costDashboard.noBudget': 'No limit set', - 'settings.costDashboard.noData': 'No cost recorded yet for the last 7 days.', - 'settings.costDashboard.noModels': 'No model activity in the last 7 days.', - 'settings.costDashboard.loading': 'Loading cost dashboard…', - 'settings.costDashboard.disabledHint': - 'Cost dashboard is disabled in config. Set [cost.dashboard] enabled = true in config.toml to re-enable.', - 'settings.costDashboard.subtitle': - 'Live spend and token burn across the swarm. Bars auto-refresh every few seconds — no page reload needed.', - 'settings.costDashboard.summaryAriaLabel': 'Cost summary metrics', - 'settings.costDashboard.lastSevenDays': 'last 7 days', - 'settings.costDashboard.utilizationOf': 'of', - 'settings.costDashboard.thisMonth': 'this month', - 'settings.costDashboard.monthlyPaceHint': - 'Projected monthly spend at the current daily run-rate (avg × 30).', - 'settings.costDashboard.budgetLimitHint': - 'Monthly budget read from cost.monthly_limit_usd in config.toml.', - 'settings.costDashboard.dailyTarget': 'Daily target', - 'settings.costDashboard.today': 'Today', - 'settings.costDashboard.todayBadge': 'TODAY', - 'settings.costDashboard.unknownProvider': '—', - 'settings.costDashboard.justNow': 'Just now', - 'settings.costDashboard.secondsAgo': '{value}s ago', - 'settings.costDashboard.minutesAgo': '{value}m ago', - 'settings.costDashboard.hoursAgo': '{value}h ago', - 'settings.costDashboard.daysAgo': '{value}d ago', - 'settings.costDashboard.updated': 'Updated', - 'settings.costDashboard.refresh': 'Refresh', - 'settings.costDashboard.utcNote': 'Days bucketed in UTC', - 'settings.costDashboard.stackedNote': 'Input + output stacked', - 'settings.costDashboard.modelBreakdownHint': 'Aggregated across the last 7 days.', - 'settings.costDashboard.noDataHint': - 'Send an agent message — token usage from the next provider call will populate the chart within ~10 seconds.', - 'settings.search.title': 'Suchmaschine', - 'settings.search.menuDesc': - 'Default to OpenHuman-managed search or wire up your own provider with an API key.', - 'settings.search.description': - 'Pick the search engine the agent uses. Managed uses OpenHuman’s backend (no setup). Parallel and Brave run direct from your machine using your API key.', - 'settings.search.engineAria': 'Suchmaschine', - 'settings.search.engineManagedLabel': 'OpenHuman Verwaltet', - 'settings.search.engineManagedDesc': - 'Default. Routed through the OpenHuman backend — no API key required.', - 'settings.search.engineParallelLabel': 'Parallel', - 'settings.search.engineParallelDesc': - 'Direct Parallel API: search, extract, chat, research, enrich, dataset tools.', - 'settings.search.engineBraveLabel': 'Brave Suche', - 'settings.search.engineBraveDesc': 'Direct Brave Search API: web, news, image, and video tools.', - 'settings.search.engineQueritLabel': 'Querit', - 'settings.search.engineQueritDesc': - 'Direct Querit API: web search with site, time range, country, and language filters.', - 'settings.search.statusConfigured': 'Konfiguriert', - 'settings.search.statusNeedsKey': 'Benötigt API-Schlüssel', - 'settings.search.fallbackToManaged': - 'No key configured — search will fall back to Managed until a key is saved.', - 'settings.search.getApiKey': 'API-Schlüssel abrufen', - 'settings.search.save': 'Speichern', - 'settings.search.clear': 'Löschen', - 'settings.search.show': 'Anzeigen', - 'settings.search.hide': 'Ausblenden', - 'settings.search.statusSaving': 'Speichern…', - 'settings.search.statusSaved': 'Gespeichert.', - 'settings.search.statusError': 'Schlüssel', - 'settings.search.parallelKeyLabel': 'Parallel API fehlgeschlagen', - 'settings.search.braveKeyLabel': 'Brave Suche API Schlüssel', - 'settings.search.queritKeyLabel': 'Querit API key', - 'settings.search.placeholderStored': '•••••••• (gespeichert)', - 'settings.search.placeholderParallel': 'pk_...', - 'settings.search.placeholderBrave': 'BSA...', - 'settings.search.placeholderQuerit': 'Querit API key', - 'settings.embeddings.title': 'Einbettungen', - 'settings.embeddings.description': - 'Wählen Sie den Embedding-Anbieter, der Erinnerungen in Vektoren für die semantische Suche umwandelt. Das Ändern des Anbieters, Modells oder der Dimensionen macht gespeicherte Vektoren ungültig und erfordert einen vollständigen Speicher-Reset.', - 'settings.embeddings.providerAria': 'Embedding-Anbieter', - 'settings.embeddings.statusConfigured': 'Konfiguriert', - 'settings.embeddings.statusNeedsKey': 'API-Schlüssel benötigt', - 'settings.embeddings.apiKeyLabel': '{provider} API-Schlüssel', - 'settings.embeddings.placeholderStored': '•••••••• (gespeichert)', - 'settings.embeddings.placeholderKey': 'API-Schlüssel einfügen…', - 'settings.embeddings.keyStoredEncrypted': - 'Ihr API-Schlüssel wird verschlüsselt auf diesem Gerät gespeichert.', - 'settings.embeddings.show': 'Anzeigen', - 'settings.embeddings.hide': 'Verbergen', - 'settings.embeddings.save': 'Speichern', - 'settings.embeddings.clear': 'Löschen', - 'settings.embeddings.model': 'Modell', - 'settings.embeddings.dimensions': 'Dimensionen', - 'settings.embeddings.customEndpoint': 'Benutzerdefinierter Endpunkt', - 'settings.embeddings.customModelPlaceholder': 'Modellname', - 'settings.embeddings.customDimsPlaceholder': 'Dim.', - 'settings.embeddings.applyCustom': 'Anwenden', - 'settings.embeddings.testConnection': 'Verbindung testen', - 'settings.embeddings.testing': 'Wird getestet…', - 'settings.embeddings.testSuccess': 'Verbunden — {dims} Dimensionen', - 'settings.embeddings.testFailed': 'Fehlgeschlagen: {error}', - 'settings.embeddings.saving': 'Wird gespeichert…', - 'settings.embeddings.saved': 'Gespeichert.', - 'settings.embeddings.errorPrefix': 'Fehlgeschlagen', - 'settings.embeddings.wipeTitle': 'Speichervektoren zurücksetzen?', - 'settings.embeddings.wipeBody': - 'Das Ändern des Embedding-Anbieters, Modells oder der Dimensionen löscht alle gespeicherten Speichervektoren. Der Speicher muss neu aufgebaut werden, bevor die Abfrage wieder funktioniert. Dies kann nicht rückgängig gemacht werden.', - 'settings.embeddings.cancel': 'Abbrechen', - 'settings.embeddings.confirmWipe': 'Löschen & anwenden', - 'settings.embeddings.setupTitle': '{provider} einrichten', - 'settings.embeddings.saveAndSwitch': 'Speichern & wechseln', - 'settings.embeddings.optional': 'optional', - 'settings.embeddings.vectorSearchDisabled': - 'Vector search is disabled. Memory recall will use keyword matching and recency only — no semantic ranking.', - 'settings.embeddings.clearKey': 'API-Schlüssel löschen', - 'mcp.alphaBadge': 'Alpha', - 'mcp.alphaBannerText': - 'MCP server support is in early alpha. The Smithery registry, install flow, and tool wiring may misbehave or change shape between releases.', - 'mcp.toolList.noTools': 'Keine Tools verfügbar.', - 'mcp.setup.secretDialog.title': 'MCP-Setup – Geben Sie das Geheimnis ein', - 'mcp.setup.secretDialog.bodyPrefix': 'Der MCP-Setup-Agent benötigt', - 'mcp.setup.secretDialog.bodySuffix': - '. Your value is sent directly to the core process and never enters the AI conversation.', - 'mcp.setup.secretDialog.inputLabel': 'Wert', - 'mcp.setup.secretDialog.inputPlaceholder': 'Hier einfügen', - 'mcp.setup.secretDialog.show': 'Anzeigen', - 'mcp.setup.secretDialog.hide': 'Ausblenden', - 'mcp.setup.secretDialog.submit': 'Senden', - 'mcp.setup.secretDialog.cancel': 'Abbrechen', - 'mcp.setup.secretDialog.submitting': 'Senden…', - 'mcp.setup.secretDialog.errorPrefix': 'Senden fehlgeschlagen:', - 'mcp.setup.secretDialog.privacyNote': - 'Stored encrypted in the local MCP secrets table. Never logged or sent to a model.', - 'devices.betaBadge': 'Beta', - 'devices.betaText': - 'This feature is currently in beta. Pair iOS phones with this OpenHuman to use them as a remote client.', - 'autonomy.title': 'Agentenautonomie', - 'autonomy.maxActionsLabel': 'Maximale Aktionen pro Stunde', - 'autonomy.maxActionsHelp': - 'Maximum tool actions an agent can run per rolling hour. New value applies to your next chat. Cron jobs and channel listeners keep their current limit until you restart OpenHuman.', - 'autonomy.statusSaving': 'Wird gespeichert…', - 'autonomy.statusSaved': 'Gespeichert.', - 'autonomy.statusFailed': 'Fehlgeschlagen', - 'autonomy.unlimitedNote': 'Unbegrenzt – Ratenbegrenzung deaktiviert.', - 'autonomy.invalidIntegerMsg': - 'Must be a positive integer (use the Unlimited preset for no limit).', - 'autonomy.presetUnlimited': 'Unbegrenzt (Standard)', - 'triggers.toggleFailed': '{action} fehlgeschlagen für {trigger}: {message}', - 'settings.exitLocalSession': 'Lokale Sitzung beenden', - 'settings.exitLocalSessionDesc': 'Zum Anmeldebildschirm zurückkehren', - 'skills.composio.noApiKeyTitle': 'Kein Composio API Schlüssel konfiguriert', - 'skills.composio.noApiKeyDescription': - 'Local mode uses your own Composio API key. Open Settings → Advanced → Composio to add one before connecting integrations here.', - 'skills.composio.noApiKeyCta': 'In den Einstellungen öffnen', - 'rewards.localUnavailable': - 'Local login does not earn rewards, coupons, or referral credit. To earn rewards, log out and continue by signing in with an OpenHuman account.', - 'rewards.localUnavailableCta': 'Kontoeinstellungen öffnen', - 'channels.localManagedUnavailable': 'Verwaltete Kanäle sind für lokale Benutzer nicht verfügbar.', - 'settings.search.localManagedUnavailable': - 'OpenHuman Managed search is not available for local users. Add your own Parallel, Brave, or Querit API key to enable web search.', - 'devices.comingSoonDescription': - 'Device pairing is coming soon. This page will be the home for pairing iPhones and managing connected devices.', - 'common.breadcrumb': 'Navigationspfad', - 'settings.betaBuild': 'Beta-Build - v{version}', - 'migration.vendor.openclaw': 'OpenClaw', - 'migration.vendor.hermes': 'Hermes Agent', - 'onboarding.apiKeys.openaiOauthHint': - 'Verwende ChatGPT Plus/Pro (Abo) oder einen OpenAI-API-Schlüssel — beides ist nicht erforderlich.', - 'onboarding.apiKeys.openaiOauthOpening': 'Anmeldung wird geöffnet…', - 'onboarding.apiKeys.finishSignIn': 'ChatGPT-Anmeldung abschließen', - 'onboarding.apiKeys.orApiKey': 'oder API-Schlüssel', - 'calls.title': 'Anrufe', - 'calls.comingSoonBody': 'KI-gestützte Anrufe kommen bald. Bleib dran.', - 'rewards.referralSection.retry': 'Erneut versuchen', - 'devOptions.sentryDisabled': '(keine ID — Sentry ist in diesem Build deaktiviert)', - 'home.usageExhaustedTitle': 'Dein Nutzungskontingent ist aufgebraucht', - 'home.usageExhaustedBody': - 'Dein enthaltenes Nutzungskontingent ist vorerst aufgebraucht. Starte ein Abo, um mehr laufende Kapazität freizuschalten.', - 'home.usageExhaustedCta': 'Abo starten', - 'home.routinesCard': 'Your Routines', - 'home.routinesActive': '{count} active', - 'routines.title': 'Your Routines', - 'routines.subtitle': 'Things your assistant does automatically', - 'routines.loading': 'Loading routines…', - 'routines.empty': 'No routines yet', - 'routines.emptyHint': - 'Your assistant can run tasks on a schedule — like morning briefings or daily summaries.', - 'routines.refresh': 'Refresh', - 'routines.nextRun': 'Next run', - 'routines.lastRunSuccess': 'Last run succeeded', - 'routines.lastRunFailed': 'Last run failed', - 'routines.notRunYet': 'Not run yet', - 'routines.runNow': 'Run Now', - 'routines.running': 'Running…', - 'routines.viewHistory': 'View history', - 'routines.loadingHistory': 'Loading…', - 'routines.noHistory': 'No run history yet.', - 'routines.statusSuccess': 'Success', - 'routines.statusError': 'Error', - 'routines.showOutput': 'Show output', - 'routines.hideOutput': 'Hide output', - 'routines.toggleEnabled': 'Enable or disable this routine', - 'routines.typeAgent': 'Agent', - 'routines.typeCommand': 'Command', - 'nav.routines': 'Routines', - 'channels.telegram.remoteControlTitle': 'Fernsteuerung (Telegram)', - 'channels.telegram.remoteControlBody': - 'Sende aus einem erlaubten Telegram-Chat /status, /sessions, /new oder /help. Das Modell-Routing verwendet weiterhin /model und /models.', - 'common.name': 'Name', - 'devices.title': 'Geräte', - 'devices.pairIphone': 'iPhone koppeln', - 'devices.noPaired': 'Keine gekoppelten Geräte', - 'devices.online': 'Online', - 'devices.offline': 'Offline', - 'devices.revoke': 'Widerrufen', - 'devices.confirmRevokeTitle': 'Gerät widerrufen?', - 'devices.confirmRevokeBody': - '{label} kann sich nicht mehr verbinden. Dies kann nicht rückgängig gemacht werden.', - 'devices.loadFailed': 'Geräte konnten nicht geladen werden: {message}', - 'devices.pairModal.title': 'iPhone koppeln', - 'devices.pairModal.loading': 'Kopplungscode wird erzeugt…', - 'devices.pairModal.instructions': - 'Öffne die OpenHuman-App auf deinem iPhone und scanne diesen Code.', - 'devices.pairModal.expiredTitle': 'QR-Code abgelaufen', - 'devices.pairModal.expiredBody': 'Erzeuge einen neuen Code, um die Kopplung fortzusetzen.', - 'devices.pairModal.generateNewCode': 'Neuen Code erzeugen', - 'devices.pairModal.successTitle': 'iPhone gekoppelt', - 'devices.pairModal.autoClose': 'Wird automatisch geschlossen…', - 'devices.pairModal.errorTitle': 'Etwas ist schiefgelaufen', - 'devices.pairModal.copyUrl': 'Kopieren', - 'invites.generate': 'Einladung erstellen', - 'invites.generating': 'Wird erstellt…', - 'invites.loading': 'Einladungen werden geladen…', - 'invites.refreshing': 'Einladungen werden aktualisiert…', - 'invites.empty': 'Noch keine Einladungen', - 'invites.emptyHint': 'Erstelle einen Einladungscode, um ihn mit anderen zu teilen', - 'invites.revokeAction': 'Einladung widerrufen', - 'invites.revokeTitle': 'Einladungscode widerrufen', - 'invites.revokeWarning': - 'Dieser Einladungscode ist danach ungültig und kann nicht mehr zum Beitritt zum Team verwendet werden.', - 'invites.failedGenerate': 'Einladung konnte nicht erstellt werden', - 'invites.failedRevoke': 'Einladung konnte nicht widerrufen werden', - 'invites.expiresOn': 'Läuft am {date} ab', - 'invites.usedUp': 'Aufgebraucht', - 'settings.ai.disconnectProvider': 'Trennen {label}', - 'settings.ai.connectProviderLabel': 'Verbinden {label}', - 'settings.ai.defaultLocalEndpoint': 'http://localhost:11434/v1', - 'settings.ai.endpointUrlLabel': 'Endpunkt URL', - 'settings.ai.localRuntimeHelper': - 'Where {label} is reachable. Default is localhost; point this at a remote host (for example, http://10.0.0.4:11434/v1) to use a shared instance.', - 'settings.ai.endpointUrlRequired': 'Endpunkt URL ist erforderlich.', - 'settings.ai.endpointProtocolRequired': 'Endpunkt muss mit http:// oder https://. beginnen.', - 'settings.ai.connectProviderDialog': 'Verbinden Sie {label}', - 'settings.ai.or': 'Oder', - 'settings.ai.openRouterOauthDescription': - 'Sign in with OpenRouter and import a user-controlled API key using PKCE.', - 'settings.ai.connecting': 'Verbindung wird hergestellt...', - 'settings.ai.backgroundLoops': 'Hintergrundschleifen', - 'settings.ai.backgroundLoopsDesc': - 'See what runs without a chat message, pause heartbeat work, and inspect recent credit ledger rows.', - 'settings.ai.heartbeatControls': 'Heartbeat-Kontrollen', - 'settings.ai.heartbeatControlsDesc': - 'Defaults off. Enabling starts the loop; disabling aborts the running task.', - 'settings.ai.heartbeatLoop': 'Heartbeat-Schleife', - 'settings.ai.heartbeatLoopDesc': - 'Master scheduler for planner + optional subconscious inference.', - 'settings.ai.subconsciousInference': 'Unterbewusste Inferenz', - 'settings.ai.subconsciousInferenceDesc': - 'Runs model-backed task/reflection evaluation on heartbeat ticks.', - 'settings.ai.calendarMeetingChecks': 'Kalenderbesprechungsprüfungen', - 'settings.ai.calendarMeetingChecksDesc': - 'Calls calendar event list for active Google Calendar connections.', - 'settings.ai.calendarCap': 'Kalenderobergrenze', - 'settings.ai.connectionsPerTick': '{count} conn/tick', - 'settings.ai.meetingLookahead': 'Besprechungsvorausschau', - 'settings.ai.minutesShort': '{count} Min.', - 'settings.ai.reminderLookahead': 'Erinnerungsvorschau', - 'settings.ai.cronReminderChecks': 'Cron-Erinnerungsprüfungen', - 'settings.ai.cronReminderChecksDesc': 'Scans enabled cron jobs for reminder-like upcoming items.', - 'settings.ai.relevantNotificationChecks': 'Relevante Benachrichtigungsprüfungen', - 'settings.ai.relevantNotificationChecksDesc': - 'Promotes urgent local notifications into proactive alerts.', - 'settings.ai.externalDelivery': 'Externe Zustellung', - 'settings.ai.externalDeliveryDesc': - 'Lets heartbeat alerts send proactive messages to external channels.', - 'settings.ai.interval': 'Intervall', - 'settings.ai.running': 'Läuft...', - 'settings.ai.plannerTickNow': 'Planer tickt jetzt', - 'settings.ai.loadingHeartbeatControls': 'Heartbeat-Steuerelemente werden geladen...', - 'settings.ai.heartbeatControlsUnavailable': 'Heartbeat-Steuerelemente nicht verfügbar.', - 'settings.ai.loopMap': 'Schleifenzuordnung', - 'settings.ai.on': 'ein', - 'settings.ai.off': 'aus', - 'settings.ai.recentUsageLedger': 'Ledger der letzten Nutzung', - 'settings.ai.recentUsageLedgerDesc': - 'Backend rows expose action/time today; source tags need backend support.', - 'settings.ai.openhumanDefault': 'OpenHuman (Standard)', - 'settings.ai.localModelResolved': 'Ollama · {model}', - 'settings.ai.customRoutingForWorkload': 'Benutzerdefiniertes Routing für {label}', - 'settings.ai.loadingModels': 'Modelle werden geladen...', - 'settings.ai.enterModelIdManually': 'oder Modell-ID manuell eingeben:', - 'settings.ai.modelIdPlaceholderForProvider': '{slug} Modell-ID', - 'settings.ai.modelIdPlaceholder': 'model-id', - 'settings.ai.selectModel': 'Wählen Sie ein Modell...', - 'settings.ai.temperatureOverride': 'Temperatur-Override', - 'settings.ai.temperatureOverrideSlider': 'Temperatur-Override (Schieberegler)', - 'settings.ai.temperatureOverrideValue': 'Temperatur-Override (Wert)', - 'settings.ai.temperatureOverrideDesc': - 'Lower = more deterministic. Leave unchecked to use the provider default.', - 'settings.ai.testFailed': 'Test fehlgeschlagen.', - 'settings.ai.testingModel': 'Modell wird getestet...', - 'settings.ai.modelResponse': 'Modellantwort', - 'settings.ai.providerWithValue': 'Anbieter: {value}', - 'settings.ai.noneDash': '—', - 'settings.ai.promptHelloWorld': 'Eingabeaufforderung: Hallo Welt', - 'settings.ai.startedAt': 'Gestartet: {value}', - 'settings.ai.waitingForModelResponse': 'Warten auf Antwort vom ausgewählten Modell ...', - 'settings.ai.response': 'Antwort', - 'settings.ai.testing': 'Testen...', - 'settings.ai.test': 'Testen', - 'settings.ai.slugMissingError': 'Geben Sie einen Anbieternamen ein, um einen Slug zu generieren.', - 'settings.ai.slugInUseError': 'Dieser Anbietername wird bereits verwendet.', - 'settings.ai.slugReservedError': 'Wählen Sie einen anderen Anbieternamen.', - 'settings.ai.providerNamePlaceholder': 'Mein Anbieter', - 'settings.ai.slugLabel': 'Slug:', - 'settings.ai.openAiUrlLabel': 'OpenAI URL', - 'settings.ai.openAiUrlPlaceholder': 'https://api.openai.com/v1', - 'settings.ai.keepExistingKeyPlaceholder': 'Leer lassen, um vorhandenen Schlüssel beizubehalten', - 'settings.ai.reindexingMemory': 'Speicher neu indizieren', - 'settings.ai.reindexingMemoryMessage': - 'Embeddings are being reprocessed. {pending} memory item(s) are being re-embedded under the current model — semantic recall is reduced until this finishes. Keyword search keeps working, and re-embedding continues in the background if you close this.', - 'settings.ai.signInWithOpenRouter': 'Anmelden mit OpenRouter', - 'settings.ai.weekBudget': 'Wochenbudget', - 'settings.ai.cycleRemaining': 'Verbleibender Zyklus', - 'settings.ai.cycleTotalSpend': 'Gesamtausgaben für den Zyklus', - 'settings.ai.avgSpendRow': 'Zeile mit durchschnittlichen Ausgaben', - 'settings.ai.backgroundApiReads': 'Bg API liest', - 'settings.ai.backgroundWakeups': 'Bg wakeups', - 'settings.ai.budgetMath': 'Budgetberechnung', - 'settings.ai.rowsLeft': 'Verbleibende Zeilen', - 'settings.ai.rowsPerFullWeekBudget': 'Zeilen pro vollem Wochenbudget', - 'settings.ai.sampleBurnRate': 'Sample-Brennrate', - 'settings.ai.projectedEmpty': 'Projiziert leer', - 'settings.ai.apiReadsPerDollarRemaining': 'API Lesevorgänge pro verbleibendem $', - 'settings.ai.loopCallBudget': 'Schleifenaufrufbudget', - 'settings.ai.heartbeatTicks': 'Heartbeat-Ticks', - 'settings.ai.calendarPlannerCalls': 'Kalenderplaner ruft auf', - 'settings.ai.calendarFanoutCap': 'Kalender-Fanout-Obergrenze', - 'settings.ai.subconsciousModelCalls': 'Unterbewusste Modellaufrufe', - 'settings.ai.composioSyncScans': 'Composio Synchronisierungsscans', - 'settings.ai.totalBackgroundApiReadBudget': 'Gesamtbg API Lesebudget', - 'settings.ai.memoryWorkerPolls': 'Speicher-Worker-Umfragen', - 'settings.ai.defaultProviderName': 'OpenHuman', - 'settings.ai.routing.managed': 'Verwaltet', - 'settings.ai.routing.managedDesc': - 'OpenHuman will run all inference in the cloud, choose the best model for the task, optimize for cost, and keep the safest routing defaults.', - 'settings.ai.routing.managedMsg': - 'OpenHuman will handle all inference for every workload and automatically choose the best route for cost, quality, and security.', - 'settings.ai.routing.useYourOwn': 'Verwenden Sie Ihre eigenen Modelle', - 'settings.ai.routing.useYourOwnDesc': - 'Choose one provider + model and route every workload through it. This is simple, but it can be inefficient because lightweight and heavyweight inference all share the same route.', - 'settings.ai.routing.advanced': 'Erweitert', - 'settings.ai.routing.advancedDesc': - 'Pick different models for different tasks. This is the best option for tight cost optimization and the most control.', - 'settings.ai.routing.customDesc': - 'Fine-grained routing gives you the best cost optimization and the most control. Use the rows below to decide which workloads stay Managed, which use your shared default, and which pin to a specific model.', - 'settings.ai.routing.chatAndConversations': 'Chat und Gespräche', - 'settings.ai.routing.chatDesc': - 'Models used during direct user interaction, replies, reasoning, agent loops, and coding help.', - 'settings.ai.routing.backgroundTasks': 'Hintergrundaufgaben', - 'settings.ai.routing.bgTasksDesc': - 'Models used outside the main conversation flow for summarization, heartbeat, learning, and subconscious evaluation.', - 'settings.ai.routing.addCustomProvider': 'Benutzerdefinierten Anbieter hinzufügen', - 'settings.ai.globalModel.title': 'Wählen Sie ein Modell für alles', - 'settings.ai.globalModel.desc': - 'This routes all inference through one model. It is simpler, but it can be inefficient for cost and quality because lightweight and heavy tasks will all use the same route.', - 'settings.ai.globalModel.noProviders': - 'Add or connect a provider first. Then you can route every workload through one model here.', - 'settings.ai.globalModel.provider': 'Anbieter', - 'settings.ai.globalModel.model': 'Modell', - 'settings.ai.globalModel.loadingModels': 'Modelle werden geladen…', - 'settings.ai.globalModel.enterModelId': 'Modell-ID eingeben', - 'settings.ai.globalModel.appliesToAll': - 'Applies the same provider + model to chat, reasoning, coding, memory, heartbeat, learning, and subconscious. Embeddings are configured separately. Changes save when you click save.', - 'settings.ai.globalModel.saving': 'Speichern…', - 'settings.ai.globalModel.saved': 'Gespeichert', - 'settings.ai.workload.noModel': 'Kein Modell ausgewählt', - 'settings.ai.workload.changeModel': 'Modell ändern', - 'settings.ai.workload.chooseModel': 'Modell auswählen', - 'settings.ai.provider.ollama': 'Ollama', - 'kbd.ariaLabel': 'Tastenkombination: {shortcut}', - 'chat.modelPlaceholder': 'gpt-4o', - 'iosPair.title': 'Mit Ihrem Desktop koppeln', - 'iosPair.instructions': - 'Open OpenHuman on your desktop, go to Settings > Devices, and tap "Pair phone" to show the QR code.', - 'iosPair.scanQrCode': 'Scannen QR code', - 'iosPair.scannerOpening': 'Scanner wird geöffnet...', - 'iosPair.connecting': 'Verbindung zum Desktop wird hergestellt...', - 'iosPair.connectedLoading': 'Verbunden! Wird geladen...', - 'iosPair.expired': 'QR code abgelaufen. Bitten Sie den Desktop, den Code neu zu generieren.', - 'iosPair.desktopLabel': 'Desktop', - 'iosPair.retryScan': 'Scan erneut versuchen', - 'iosPair.step.openDesktop': 'OpenHuman auf dem Desktop öffnen', - 'iosPair.step.openSettings': 'Gehen Sie zu Einstellungen > Geräte', - 'iosPair.step.showQr': 'Tippen Sie auf „Telefon koppeln“, um QR anzuzeigen', - 'iosPair.error.camera': 'Camera scan failed. Check camera permissions and try again.', - 'iosPair.error.invalidQr': - 'Invalid QR code. Make sure you are scanning an OpenHuman pairing code.', - 'iosPair.error.unreachableDesktop': - 'Could not reach the desktop. Make sure both devices are online and try again.', - 'iosPair.error.connectionFailed': - 'Connection failed. Make sure the desktop app is running and try again.', - 'iosMascot.defaultPairedLabel': 'Desktop', - 'iosMascot.connectedTo': 'Verbunden mit', - 'iosMascot.disconnect': 'Trennen', - 'iosMascot.pushToTalk': 'Push-to-talk', - 'iosMascot.thinking': 'Denken...', - 'iosMascot.typeMessage': 'Geben Sie a ein Nachricht...', - 'iosMascot.sendMessage': 'Nachricht senden', - 'iosMascot.error.generic': 'Etwas ist schief gelaufen. Bitte versuchen Sie es erneut.', - 'iosMascot.error.sendFailed': 'Senden fehlgeschlagen. Überprüfen Sie Ihre Verbindung.', - 'settings.companion.title': 'Desktop Companion', - 'settings.companion.session': 'Sitzung', - 'settings.companion.activeLabel': 'Aktiv', - 'settings.companion.inactiveStatus': 'Inaktiv', - 'settings.companion.stopping': 'Wird gestoppt…', - 'settings.companion.stopSession': 'Sitzung beenden', - 'settings.companion.starting': 'Wird gestartet…', - 'settings.companion.startSession': 'Sitzung starten', - 'settings.companion.sessionId': 'Sitzungs-ID', - 'settings.companion.turns': 'Turns', - 'settings.companion.remaining': 'Verbleibende', - 'settings.companion.configuration': 'Konfiguration', - 'settings.companion.hotkey': 'Hotkey', - 'settings.companion.activationMode': 'Aktivierungsmodus', - 'settings.companion.sessionTtl': 'Sitzungs-TTL', - 'settings.companion.screenCapture': 'Bildschirmaufnahme', - 'settings.companion.appContext': 'App-Kontext', - 'settings.composio.title': 'Composio', - 'settings.composio.apiKeyExamplePlaceholder': 'ck_live_xxxxxxxxxxxxxxx', - 'composio.integrationSlugsHelp': 'Durch Kommas getrennte Integrations-Slugs, z.B.', - 'composio.integrationSlugsExample': 'Gmail, Slack', - 'composio.integrationSlugsCaseInsensitive': 'Groß- und Kleinschreibung wird nicht beachtet.', - 'composio.integrationSlugsPlaceholder': 'Gmail, Slack, ...', - 'team.members': 'Mitglieder', - 'team.membersDesc': 'Teammitglieder und Rollen verwalten', - 'team.invites': 'Einladungen', - 'team.invitesDesc': 'Einladungscodes generieren und verwalten', - 'team.settings': 'Teameinstellungen', - 'team.settingsDesc': 'Teamnamen und -einstellungen bearbeiten', - 'team.editSettings': 'Teameinstellungen bearbeiten', - 'team.enterName': 'Teamnamen eingeben', - 'team.saving': 'Speichern...', - 'team.saveChanges': 'Speichern Änderungen', - 'team.delete': 'Team löschen', - 'team.deleteDesc': 'Dieses Team dauerhaft löschen', - 'team.deleting': 'Löschen...', - 'team.failedToUpdate': 'Team konnte nicht aktualisiert werden', - 'team.failedToDelete': 'Team konnte nicht gelöscht werden', - 'team.manageTitle': '{name} verwalten', - 'team.planCreated': '{plan} Plan • Erstellt {date}', - 'team.confirmDelete': 'Sind Sie sicher, dass Sie {name} löschen möchten?', - 'team.deleteWarning': 'This action cannot be undone. All team data will be permanently removed.', - 'welcome.clearingAppData': 'App-Daten löschen...', - 'welcome.clearAppDataAndRestart': 'App-Daten löschen und neu starten', - 'welcome.clearAppDataWarning': - 'This wipes locally stored secrets and accounts on this device. Your cloud account is unaffected - you can sign in again right after.', - 'welcome.resetErrorFallback': - 'Could not clear app data. Please quit and reopen OpenHuman, then try again.', - 'welcome.signingIn': 'Ich melde mich an...', - 'welcome.termsIntro': 'Indem Sie fortfahren, stimmen Sie den', - 'welcome.termsOfUse': 'Bedingungen', - 'welcome.termsJoiner': 'und der', - 'welcome.privacyPolicy': 'Datenschutzrichtlinie zu', - 'welcome.termsOutro': '.', - 'chat.addReaction': 'Reaktion hinzufügen', - 'chat.agentProfile.create': 'Agentenprofil erstellen', - 'chat.agentProfile.createFailed': 'Agentenprofil konnte nicht erstellt werden.', - 'chat.agentProfile.customDescription': 'Benutzerdefiniertes Agentenprofil', - 'chat.agentProfile.defaultAgentLabel': 'Orchestrator', - 'chat.agentProfile.exists': 'Agentenprofil „{name}“ ist bereits vorhanden.', - 'chat.agentProfile.label': 'Agentenprofil', - 'chat.agentProfile.namePlaceholder': 'Profilname', - 'chat.agentProfile.promptStylePlaceholder': 'Eingabeaufforderungsstil', - 'chat.agentProfile.allowedToolsPlaceholder': 'Zulässige Tools', - 'chat.backToThread': 'zurück zu {title}', - 'chat.parentThread': 'übergeordneter Thread', - 'chat.removeReaction': 'Entfernen {emoji}', - 'invites.copyCodeAria': 'Einladungscode kopieren', - 'invites.revokeAria': 'Einladung widerrufen', - 'invites.uses': 'Verwendung: {current}{max}', - 'invites.revokePromptPrefix': 'Sind Sie sicher, dass Sie den Einladungscode widerrufen möchten?', - 'invites.revoking': 'Widerrufen...', - 'team.refreshingMembers': 'Mitglieder werden aktualisiert...', - 'team.loadingMembers': 'Mitglieder werden geladen...', - 'team.memberCount': '{count} Mitglied', - 'team.memberCountPlural': '{count} Mitglieder', - 'team.you': '(Sie)', - 'team.removeAria': '{name} entfernen', - 'team.noMembers': 'Keine Mitglieder gefunden', - 'team.removeTitle': 'Teammitglied entfernen', - 'team.removePromptPrefix': 'Sind Sie sicher, dass Sie entfernen möchten?', - 'team.removePromptSuffix': 'aus dem Team?', - 'team.removeWarning': 'Sie verlieren den Zugriff auf das Team und alle Teamressourcen.', - 'team.removing': 'Entfernen...', - 'team.removeAction': 'Mitglied entfernen', - 'team.changeRoleTitle': 'Mitgliedsrolle ändern', - 'team.changeRolePrompt': "Change {name}'s role from {oldRole} to {newRole}?", - 'team.changeRoleAdminGrant': - 'This will grant them full admin permissions including the ability to manage team members.', - 'team.changeRoleAdminRemove': - 'This will remove their admin permissions and they will no longer be able to manage the team.', - 'team.changing': 'Ändern...', - 'team.changeRoleAction': 'Rolle ändern', - 'team.failedChangeRole': 'Rolle konnte nicht geändert werden.', - 'team.failedRemoveMember': 'Mitglied konnte nicht entfernt werden.', - 'voice.failedToLoadSettings': 'Spracheinstellungen konnten nicht geladen werden', - 'voice.failedToSaveSettings': 'Spracheinstellungen konnten nicht gespeichert werden.', - 'voice.failedToStartServer': 'Sprachserver konnte nicht gestartet werden.', - 'voice.failedToStopServer': 'Sprachserver konnte nicht gestoppt werden.', - 'voice.sttDisabledPrefix': - 'Voice dictation is disabled until the local STT model is downloaded. Use the', - 'voice.sttDisabledSuffix': 'oben, um Whisper zu installieren.', - 'voice.debug.failedToLoadVoiceDebugData': 'Sprach-Debug-Daten konnten nicht geladen werden.', - 'voice.debug.settingsSaved': 'Debug-Einstellungen gespeichert.', - 'voice.debug.failedToSaveSettings': 'Spracheinstellungen konnten nicht gespeichert werden.', - 'voice.debug.runtimeStatus': 'Laufzeitstatus', - 'voice.debug.runtimeStatusDesc': - 'Live diagnostics for the voice server and speech-to-text engine.', - 'voice.debug.server': 'Server', - 'voice.debug.unavailable': 'Nicht verfügbar', - 'voice.debug.ready': 'Bereit', - 'voice.debug.notReady': 'Nicht bereit', - 'voice.debug.hotkey': 'Hotkey', - 'voice.debug.notAvailable': 'n/a', - 'voice.debug.mode': 'Modus', - 'voice.debug.transcriptions': 'Transkriptionen', - 'voice.debug.serverError': 'Serverfehler', - 'voice.debug.advancedSettings': 'Erweiterte Einstellungen', - 'voice.debug.advancedSettingsDesc': - 'Low-level tuning parameters for recording and silence detection.', - 'voice.debug.minimumRecordingSeconds': 'Mindestaufzeichnungssekunden', - 'voice.debug.silenceThreshold': 'Ruheschwelle (RMS)', - 'voice.debug.silenceThresholdDesc': - 'Recordings with energy below this are treated as silence and skipped. Lower = more sensitive.', - 'voice.providers.saved': 'Sprachanbieter gespeichert.', - 'voice.providers.failedToSave': 'Sprachanbieter konnten nicht gespeichert werden.', - 'voice.providers.ellipsis': '…', - 'voice.providers.installing': 'Installiere', - 'voice.providers.installingBusy': 'Installiere…', - 'voice.providers.reinstallLocally': 'Lokal neu installieren', - 'voice.providers.repair': 'Reparieren', - 'voice.providers.retryLocally': 'Lokal erneut versuchen', - 'voice.providers.installLocally': 'Lokal installieren', - 'voice.providers.whisperReady': 'Whisper ist bereit.', - 'voice.providers.whisperInstallStarted': 'Whisper-Installation gestartet', - 'voice.providers.queued': 'in der Warteschlange', - 'voice.providers.failedToInstallWhisper': 'Installation von Whisper fehlgeschlagen', - 'voice.providers.piperReady': 'Piper ist bereit.', - 'voice.providers.piperInstallStarted': 'Piper-Installation gestartet', - 'voice.providers.failedToInstallPiper': 'Installation von Piper fehlgeschlagen', - 'voice.providers.title': 'Sprachanbieter', - 'voice.providers.desc': - 'Choose where transcription and synthesis run. Use the Install locally buttons to download the binaries and models into your workspace. Local providers can be saved before the install finishes — no manual WHISPER_BIN or PIPER_BIN setup required.', - 'voice.providers.sttProvider': 'Speech-to-Text-Anbieter', - 'voice.providers.sttProviderAria': 'STT-Anbieter', - 'voice.providers.cloudWhisperProxy': 'Cloud (Whisper-Proxy)', - 'voice.providers.localWhisper': 'Local Whisper', - 'voice.providers.installRequired': '(Installation erforderlich)', - 'voice.providers.whisperInstalledTitle': 'Whisper is installed. Click to reinstall.', - 'voice.providers.whisperDownloadTitle': - 'Download whisper.cpp and the GGML model into your workspace.', - 'voice.providers.installed': 'Installiert', - 'voice.providers.installFailed': 'Installation fehlgeschlagen', - 'voice.providers.notInstalled': 'Nicht installiert', - 'voice.providers.whisperModel': 'Whisper-Modell', - 'voice.providers.whisperModelAria': 'Whisper-Modell', - 'voice.providers.whisperModelTiny': 'Tiny (39 MB, am schnellsten)', - 'voice.providers.whisperModelBase': 'Basis (74 MB)', - 'voice.providers.whisperModelSmall': 'Klein (244 MB)', - 'voice.providers.whisperModelMedium': 'Mittel (769 MB, empfohlen)', - 'voice.providers.whisperModelLargeTurbo': 'Groß v3 Turbo (1,5 GB, beste Genauigkeit)', - 'voice.providers.ttsProvider': 'Text-to-Speech-Anbieter', - 'voice.providers.ttsProviderAria': 'TTS-Anbieter', - 'voice.providers.cloudElevenLabsProxy': 'Cloud (ElevenLabs-Proxy)', - 'voice.providers.localPiper': 'Lokaler Piper', - 'voice.providers.piperInstalledTitle': 'Piper is installed. Click to reinstall.', - 'voice.providers.piperDownloadTitle': - 'Download Piper and the bundled en_US-lessac-medium voice into your workspace.', - 'voice.providers.piperVoice': 'Piper Voice', - 'voice.providers.piperVoiceAria': 'Piper Voice', - 'voice.providers.customVoiceOption': 'Andere (unten eingeben)…', - 'voice.providers.customVoiceAria': 'Piper Voice-ID (benutzerdefiniert)', - 'voice.providers.customVoicePlaceholder': 'en_US-lessac-medium', - 'voice.providers.piperVoicesDesc': - 'Voices come from huggingface.co/rhasspy/piper-voices. Switching voices may require an Install/Reinstall click to download the new .onnx.', - 'voice.providers.mascotVoice': 'Maskottchen-Stimme', - 'voice.providers.mascotVoiceDescPrefix': - 'The ElevenLabs voice the mascot uses for spoken replies is configured under', - 'voice.providers.mascotSettings': 'Maskottchen-Einstellungen konfiguriert', - 'voice.providers.mascotVoiceDescSuffix': '.', - 'voice.providers.hotkeyPlaceholder': 'Fn', - 'voice.providers.piperPreset.lessacMedium': 'USA · Lessac (neutral, empfohlen)', - 'voice.providers.piperPreset.lessacHigh': 'USA · Lessac (höhere Qualität, größer)', - 'voice.providers.piperPreset.ryanMedium': 'USA · Ryan (männlich)', - 'voice.providers.piperPreset.amyMedium': 'USA · Amy (weiblich)', - 'voice.providers.piperPreset.librittsHigh': 'USA · LibriTTS (mehrere Sprecher)', - 'voice.providers.piperPreset.alanMedium': 'GB · Alan (männlich)', - 'voice.providers.piperPreset.jennyDiocoMedium': 'GB · Jenny Dioco (weiblich)', - 'voice.providers.piperPreset.northernEnglishMaleMedium': 'GB · Nordenglisch (männlich)', - 'voice.providers.chip.cloud': 'OpenHuman (Managed)', - 'voice.providers.chip.cloudAria': 'OpenHuman managed provider is always enabled', - 'voice.providers.chip.whisper': 'Whisper (Local)', - 'voice.providers.chip.enableWhisper': 'Enable local Whisper STT', - 'voice.providers.chip.disableWhisper': 'Disable local Whisper STT', - 'voice.providers.chip.piper': 'Piper (Local)', - 'voice.providers.chip.enablePiper': 'Enable local Piper TTS', - 'voice.providers.chip.disablePiper': 'Disable local Piper TTS', - 'voice.providers.chip.enableProvider': 'Enable', - 'voice.providers.chip.disableProvider': 'Disable', - 'voice.providers.chip.apiKeyLabel': 'API Key', - 'voice.providers.chip.apiKeyPlaceholder': 'sk-…', - 'voice.providers.chip.comingSoon': 'coming soon', - 'voice.modal.title': 'Configure', - 'voice.modal.desc': - 'Enter your API key to enable this provider. You can test the connection before saving.', - 'voice.modal.testKey': 'Test Key', - 'voice.modal.testing': 'Testing…', - 'voice.modal.saveAndEnable': 'Save & Enable', - 'voice.modal.enable': 'Enable', - 'voice.modal.whisperDesc': - 'Choose a model size and install the Whisper binary and GGML model into your workspace. Larger models are more accurate but slower.', - 'voice.modal.piperDesc': - 'Choose a voice and install the Piper binary and ONNX model into your workspace. Piper runs fully offline with low latency.', - 'voice.routing.title': 'Voice Routing', - 'voice.routing.desc': 'Choose which enabled providers handle speech-to-text and text-to-speech.', - 'voice.routing.save': 'Save', - 'voice.routing.testStt': 'Test STT', - 'voice.routing.testTts': 'Test TTS', - 'voice.routing.elevenlabsVoice': 'ElevenLabs Voice', - 'voice.routing.elevenlabsVoiceAria': 'ElevenLabs voice selection', - 'voice.routing.elevenlabsVoiceIdAria': 'ElevenLabs voice ID (custom)', - 'voice.routing.elevenlabsVoiceDesc': - 'Pick a curated voice or paste a custom voice ID from your ElevenLabs dashboard.', - 'voice.externalProviders.title': 'External Voice Providers', - 'voice.externalProviders.desc': - 'Connect third-party STT/TTS APIs like Deepgram, ElevenLabs, or OpenAI directly.', - 'voice.externalProviders.keySet': 'Key set', - 'voice.externalProviders.noKey': 'No API key', - 'voice.externalProviders.test': 'Test', - 'voice.externalProviders.testing': 'Testing…', - 'voice.externalProviders.remove': 'Remove', - 'voice.externalProviders.provider': 'Provider', - 'voice.externalProviders.selectProvider': 'Select a provider…', - 'voice.externalProviders.apiKey': 'API Key', - 'voice.externalProviders.apiKeyPlaceholder': 'sk-…', - 'voice.externalProviders.add': 'Add', - 'screenAwareness.debug.debugAndDiagnostics': 'Debug & Diagnose', - 'screenAwareness.debug.collapse': 'Reduzieren', - 'screenAwareness.debug.expand': 'Erweitern', - 'screenAwareness.debug.failedToSave': 'Bildschirmintelligenz konnte nicht gespeichert werden.', - 'screenAwareness.debug.policyTitle': 'Bildschirmintelligenzrichtlinie', - 'screenAwareness.debug.baselineFps': 'Basis-FPS', - 'screenAwareness.debug.useVisionModel': 'Vision-Modell verwenden', - 'screenAwareness.debug.useVisionModelDesc': - 'Send screenshots to a vision LLM for richer context. When off, only OCR text is used with a text LLM — faster and no vision model required.', - 'screenAwareness.debug.keepScreenshots': 'Screenshots behalten', - 'screenAwareness.debug.keepScreenshotsDesc': - 'Save captured screenshots to the workspace instead of deleting after processing', - 'screenAwareness.debug.allowlist': 'Zulassungsliste (eine Regel pro Zeile)', - 'screenAwareness.debug.denylist': 'Sperrliste (eine Regel pro Zeile)', - 'screenAwareness.debug.saveSettings': 'Bildschirmintelligenzeinstellungen speichern', - 'screenAwareness.debug.sessionStats': 'Sitzungsstatistiken', - 'screenAwareness.debug.framesEphemeral': 'Frames (flüchtig)', - 'screenAwareness.debug.panicStop': 'Panikstopp', - 'screenAwareness.debug.defaultPanicHotkey': 'Befehl+Umschalt+.', - 'screenAwareness.debug.vision': 'Vision', - 'screenAwareness.debug.idle': 'inaktiv', - 'screenAwareness.debug.visionQueue': 'Vision-Warteschlange', - 'screenAwareness.debug.lastVision': 'Letzte Vision', - 'screenAwareness.debug.notAvailable': 'n/a', - 'screenAwareness.debug.visionSummaries': 'Vision-Zusammenfassungen', - 'screenAwareness.debug.refreshing': 'Erfrischend…', - 'screenAwareness.debug.noSummaries': 'Noch keine Zusammenfassungen.', - 'screenAwareness.debug.unknownApp': 'Unbekannte App', - 'screenAwareness.debug.macosOnly': 'Screen Intelligence V1 is currently supported on macOS only.', - 'memory.debugTitle': 'Speicher-Debug', - 'memory.documents': 'Dokumente', - 'memory.filterByNamespace': 'Nach Namespace filtern...', - 'memory.refresh': 'Aktualisieren', - 'memory.noDocumentsFound': 'Keine Dokumente gefunden.', - 'memory.delete': 'Löschen', - 'memory.rawResponse': 'Rohantwort', - 'memory.namespaces': 'Namespaces', - 'memory.noNamespacesFound': 'Keine Namespaces gefunden.', - 'memory.queryRecall': 'Abfrage und Rückruf', - 'memory.namespace': 'Namespace', - 'memory.queryText': 'Abfragetext...', - 'memory.defaultMaxChunks': '10', - 'memory.maxChunks': 'max. Chunks', - 'memory.query': 'Abfrage', - 'memory.recall': 'Rückruf', - 'memory.queryLabel': 'Abfrage', - 'memory.recallLabel': 'Rückruf', - 'memory.queryResult': 'Abfrageergebnis', - 'memory.recallResult': 'Rückrufergebnis', - 'memory.clearNamespace': 'Namespace löschen', - 'memory.clearNamespaceDescription': 'Permanently delete all documents within a namespace.', - 'memory.selectNamespace': 'Namensraum auswählen...', - 'memory.exampleNamespace': 'z.B. skills:gmail:user@example.com', - 'memory.clear': 'Löschen', - 'memory.deleteConfirm': 'Dokument „{documentId}“ im Namespace „{namespace}“ löschen?', - 'memory.clearNamespaceConfirm': - 'This will permanently delete ALL documents in namespace "{namespace}". Continue?', - 'memory.clearNamespaceSuccess': 'Namespace „{namespace}“ gelöscht.', - 'memory.clearNamespaceEmpty': 'In „{namespace}“ gibt es nichts zu löschen.', - 'webhooks.debugTitle': 'Webhooks-Debug', - 'webhooks.failedToLoadDebugData': 'Webhook-Debug-Daten konnten nicht geladen werden.', - 'webhooks.clearLogsConfirm': 'Alle erfassten Webhook-Debug-Protokolle löschen?', - 'webhooks.failedToClearLogs': 'Webhook-Protokolle konnten nicht gelöscht werden.', - 'webhooks.loading': 'Laden...', - 'webhooks.refresh': 'Aktualisieren', - 'webhooks.clearing': 'Löschen...', - 'webhooks.clearLogs': 'Protokolle löschen', - 'webhooks.registered': 'registriert', - 'webhooks.captured': 'erfasst', - 'webhooks.live': 'live', - 'webhooks.disconnected': 'getrennt', - 'webhooks.lastEvent': 'Letztes Ereignis', - 'webhooks.at': 'um', - 'webhooks.registeredWebhooks': 'Registrierte Webhooks', - 'webhooks.noActiveRegistrations': 'Keine aktiven Registrierungen.', - 'webhooks.resolvingBackendUrl': 'Backend wird aufgelöst URL…', - 'webhooks.capturedRequests': 'Erfasste Anfragen', - 'webhooks.noRequestsCaptured': 'Es wurden noch keine Webhook-Anfragen erfasst.', - 'webhooks.unrouted': 'nicht weitergeleitet', - 'webhooks.pending': 'ausstehend', - 'webhooks.requestHeaders': 'Anforderungsheader', - 'webhooks.queryParams': 'Abfrageparameter', - 'webhooks.requestBody': 'Anforderungstext', - 'webhooks.responseHeaders': 'Antwortheader', - 'webhooks.responseBody': 'Antworttext', - 'webhooks.rawPayload': 'Rohnutzlast', - 'webhooks.empty': '[leer]', - 'providerSetup.error.defaultDetails': 'Anbietereinrichtung fehlgeschlagen.', - 'providerSetup.error.providerFallback': 'Der Anbieter', - 'providerSetup.error.credentialsRejected': - '{provider} rejected the credentials. Check the API key and try again.', - 'providerSetup.error.endpointNotRecognized': - '{provider} did not recognize the endpoint. Check the base URL and try again.', - 'providerSetup.error.providerUnavailable': - '{provider} is unavailable right now. Try again or check the provider status.', - 'providerSetup.error.unreachable': - 'Could not reach {provider}. Check the endpoint URL and network connection, then try again.', - 'providerSetup.error.couldNotReachWithMessage': 'Could not reach {provider}: {message}', - 'providerSetup.error.technicalDetails': 'Technische Details', - 'devices.emptyState': 'Scan a QR code on your iPhone to connect it to this OpenHuman session.', - 'devices.devicePairedTitle': 'Gerät gekoppelt.', - 'devices.devicePairedMessage': 'iPhone erfolgreich verbunden.', - 'devices.deviceRevokedTitle': 'Gerät widerrufen', - 'devices.deviceRevokedMessage': '{label} entfernt.', - 'devices.revokeFailedTitle': 'Widerruf fehlgeschlagen', - 'devices.lastSeenNever': 'Nie', - 'devices.lastSeenNow': 'Gerade jetzt', - 'devices.lastSeenMinutes': 'vor {count}m', - 'devices.lastSeenHours': 'vor {count}h', - 'devices.lastSeenDays': 'vor {count}d', - 'devices.revokeAria': '{label} widerrufen', - 'devices.pairModal.expiresIn': 'Code läuft in ~{count} Minute ab', - 'devices.pairModal.expiresInPlural': 'Code läuft in ~{count} Minuten ab', - 'devices.pairModal.showDetails': 'Details anzeigen', - 'devices.pairModal.hideDetails': 'Details ausblenden', - 'devices.pairModal.channelId': 'Kanal-ID', - 'devices.pairModal.pairingUrl': 'Kopplung URL', - 'devices.pairModal.errorPrefix': 'Kopplung konnte nicht erstellt werden: {message}', - 'mcp.catalog.searchAria': 'Smithery-Katalog durchsuchen', - 'mcp.catalog.searchPlaceholder': 'Smithery-Katalog durchsuchen...', - 'mcp.catalog.loadFailed': 'Katalog konnte nicht geladen werden', - 'mcp.catalog.noResults': 'Keine Server gefunden.', - 'mcp.catalog.noResultsFor': 'Keine Server für „{query}“ gefunden.', - 'mcp.catalog.loadMore': 'Mehr laden', - 'mcp.configAssistant.title': 'Konfigurationsassistent', - 'mcp.configAssistant.empty': 'Ask about configuration, required env vars, or setup steps.', - 'mcp.configAssistant.suggestedValues': 'Vorgeschlagene Werte:', - 'mcp.configAssistant.valueHidden': '(Wert ausgeblendet)', - 'mcp.configAssistant.applySuggested': 'Vorgeschlagene Werte anwenden', - 'mcp.configAssistant.reinstallHint': 'Neuinstallation mit diesen Werten, um sie anzuwenden.', - 'mcp.configAssistant.thinking': 'Nachdenken...', - 'mcp.configAssistant.inputPlaceholder': 'Ask a question (Enter to send, Shift+Enter for newline)', - 'mcp.configAssistant.send': 'Senden', - 'mcp.configAssistant.failedResponse': 'Es konnte keine Antwort erhalten werden', - 'mcp.toolList.availableSingular': '{count} Tool verfügbar', - 'mcp.toolList.availablePlural': '{count} Tools verfügbar', - 'mcp.toolList.tryTool': 'Try', - 'mcp.toolList.tryToolAria': 'Open execution playground for {name}', - 'mcp.playground.title': 'Run {name}', - 'mcp.playground.close': 'Close playground', - 'mcp.playground.inputSchema': 'Input schema', - 'mcp.playground.argsLabel': 'Arguments (JSON)', - 'mcp.playground.argsHelp': 'Type JSON matching the input schema. Empty input is treated as {}.', - 'mcp.playground.runShortcut': '⌘/Ctrl + Enter to run', - 'mcp.playground.format': 'Format', - 'mcp.playground.invalidJson': 'Invalid JSON', - 'mcp.playground.run': 'Run tool', - 'mcp.playground.running': 'Running…', - 'mcp.playground.result': 'Result', - 'mcp.playground.resultError': 'Tool returned an error', - 'mcp.playground.copyResult': 'Copy result', - 'mcp.playground.copied': 'Copied', - 'mcp.playground.history': 'History', - 'mcp.playground.historyEmpty': 'No invocations yet in this session.', - 'mcp.playground.historyLoad': 'Load', - 'mcp.playground.unexpectedError': 'Unexpected error invoking tool.', - 'mcp.catalog.deployed': 'Bereitgestellt', - 'mcp.catalog.installCount': '{count} installiert', - 'app.update.dismissNotification': 'Update-Benachrichtigung verwerfen', - 'bootCheck.rpcAuthSuffix': 'bei jedem RPC.', - 'mcp.installed.title': 'Installiert', - 'mcp.installed.browseCatalog': 'Katalog durchsuchen', - 'mcp.installed.empty': 'Noch keine MCP-Server installiert.', - 'mcp.installed.toolSingular': '{count}-Tool', - 'mcp.installed.toolPlural': '{count}-Tools', - 'mcp.health.title': 'Health', - 'mcp.health.summaryAria': 'MCP connection health summary', - 'mcp.health.connectedCount': '{count} connected', - 'mcp.health.connectingCount': '{count} connecting', - 'mcp.health.errorCount': '{count} error', - 'mcp.health.disconnectedCount': '{count} idle', - 'mcp.health.retryAll': 'Retry all ({count})', - 'mcp.health.retryAllAria': 'Retry all {count} errored MCP servers', - 'mcp.health.disconnectAll': 'Disconnect all ({count})', - 'mcp.health.disconnectAllAria': 'Disconnect all {count} connected MCP servers', - 'mcp.health.disconnectConfirm.title': 'Disconnect all MCP servers?', - 'mcp.health.disconnectConfirm.body': - 'This will disconnect {count} currently-connected MCP servers. Installed configurations and secrets are kept; you can reconnect any server later.', - 'mcp.health.disconnectConfirm.cancel': 'Cancel', - 'mcp.health.disconnectConfirm.confirm': 'Disconnect all', - 'mcp.health.opErrorGeneric': 'Bulk operation failed. See logs.', - 'mcp.health.bulkPartialFailure': '{failed} of {total} servers failed. See logs.', - 'mcp.installed.search.landmarkAria': 'Search installed MCP servers', - 'mcp.installed.search.inputAria': 'Filter installed MCP servers by name', - 'mcp.installed.search.placeholder': 'Filter servers…', - 'mcp.installed.search.clearAria': 'Clear filter', - 'mcp.installed.search.countMatches': '{shown} of {total} servers', - 'mcp.installed.search.noMatches': 'No servers match "{query}".', - 'mcp.inventory.openButton': 'Inventory', - 'mcp.inventory.openAria': 'Open the sharable MCP inventory panel', - 'mcp.inventory.title': 'Sharable MCP Inventory', - 'mcp.inventory.subtitle': - 'Export your installed MCP servers as a portable, secret-free manifest, or import one from a teammate. Secret env values are never included or imported.', - 'mcp.inventory.close': 'Close inventory panel', - 'mcp.inventory.tablistAria': 'Inventory sections', - 'mcp.inventory.tab.export': 'Export', - 'mcp.inventory.tab.import': 'Import', - 'mcp.inventory.export.empty': - 'No MCP servers installed yet — nothing to export. Install one from the catalog first.', - 'mcp.inventory.export.privacyTitle': 'What is in this manifest', - 'mcp.inventory.export.privacyBody': - 'Server names, qualified names, env-variable KEY NAMES, and non-secret config only. Secret values, your machine identifiers, and per-install timestamps are intentionally stripped.', - 'mcp.inventory.export.serverCount': '{count} servers in this manifest', - 'mcp.inventory.export.copy': 'Copy', - 'mcp.inventory.export.copied': 'Copied', - 'mcp.inventory.export.copyAria': 'Copy the manifest JSON to the clipboard', - 'mcp.inventory.export.download': 'Download', - 'mcp.inventory.export.downloadAria': 'Download the manifest as a JSON file', - 'mcp.inventory.import.trustTitle': 'Treat imported manifests as untrusted code', - 'mcp.inventory.import.trustBody': - 'An MCP server is a tool you grant your agent. Only import manifests from sources you trust. Each install requires your explicit click; nothing is auto-installed.', - 'mcp.inventory.import.pasteLabel': 'Paste manifest JSON', - 'mcp.inventory.import.pastePlaceholder': 'Paste a manifest here, or upload a .json file below.', - 'mcp.inventory.import.preview': 'Preview', - 'mcp.inventory.import.clear': 'Clear', - 'mcp.inventory.import.uploadFile': 'or upload a .json file', - 'mcp.inventory.import.uploadFileAria': 'Upload a manifest .json file', - 'mcp.inventory.import.fileTooLarge': 'File is too large (over 1 MB). Refusing to load.', - 'mcp.inventory.import.fileReadFailed': 'Could not read file.', - 'mcp.inventory.import.parseErrorPrefix': 'Could not parse manifest:', - 'mcp.inventory.import.previewHeading': 'Preview', - 'mcp.inventory.import.previewCounts': - '{total} servers — {newly} new, {already} already installed', - 'mcp.inventory.import.previewEmpty': 'Manifest contains no servers.', - 'mcp.inventory.import.exportedFrom': 'Exported from {exporter}', - 'mcp.inventory.import.exportedAt': 'at {when}', - 'mcp.inventory.import.statusNew': 'New', - 'mcp.inventory.import.statusAlreadyInstalled': 'Already installed', - 'mcp.inventory.import.envKeysLabel': 'Env keys', - 'mcp.inventory.import.install': 'Install', - 'mcp.inventory.import.installAria': 'Install {name} from this manifest', - 'mcp.inventory.import.skipped': 'skipped', - 'mcp.inventory.parseError.empty': 'Manifest is empty.', - 'mcp.inventory.parseError.invalidJson': 'Invalid JSON.', - 'mcp.inventory.parseError.rootNotObject': 'Manifest must be a JSON object at the root.', - 'mcp.inventory.parseError.unsupportedSchema': - 'Unsupported manifest schema — this file was not produced by a compatible exporter.', - 'mcp.inventory.parseError.missingExportedAt': 'Missing or invalid `exported_at` field.', - 'mcp.inventory.parseError.missingExportedBy': 'Missing or invalid `exported_by` field.', - 'mcp.inventory.parseError.invalidServers': 'Missing or invalid `servers` array.', - 'mcp.inventory.parseError.serverNotObject': 'A server entry is not an object.', - 'mcp.inventory.parseError.serverMissingQualifiedName': - 'A server entry is missing its qualified_name.', - 'mcp.inventory.parseError.serverMissingDisplayName': - 'A server entry is missing its display_name.', - 'mcp.inventory.parseError.serverEnvKeysNotArray': - 'A server entry has an env_keys field that is not an array of strings.', - 'mcp.inventory.parseError.serverContainsEnv': - 'A server entry contains an `env` value map. Refusing to import — manifests must only carry env_keys (names), never secret values.', - 'mcp.inventory.parseError.duplicateQualifiedName': - 'Duplicate qualified_name found in manifest. Each server must appear at most once.', - 'mcp.tab.loading': 'MCP-Server werden geladen...', - 'mcp.tab.emptyDetail': 'Wählen Sie einen Server aus oder durchsuchen Sie den Katalog.', - 'mcp.install.loadingDetail': 'Serverdetails werden geladen...', - 'mcp.install.back': 'Zurück', - 'mcp.install.title': 'Install {name}', - 'mcp.install.requiredEnv': 'Erforderliche Umgebungsvariablen', - 'mcp.install.enterValue': 'Enter {key}', - 'mcp.install.show': 'Show', - 'mcp.install.hide': 'Ausblenden', - 'mcp.install.configLabel': 'Config (optionales JSON)', - 'mcp.install.configPlaceholder': '{"key": "value"}', - 'mcp.install.missingRequired': '„{key}“ ist erforderlich', - 'mcp.install.invalidJson': 'Konfigurations-JSON ist ungültig. JSON', - 'mcp.install.failedDetail': 'Fehler beim Laden der Serverdetails', - 'mcp.install.failedInstall': 'Installation fehlgeschlagen', - 'mcp.install.button': 'Installation', - 'mcp.install.installing': 'Installation...', - 'mcp.detail.suggestedEnvReady': 'Vorgeschlagene Umgebungswerte bereit', - 'mcp.detail.suggestedEnvBody': - 'Re-install this server with the suggested values to apply them: {keys}', - 'mcp.detail.connect': 'Verbinden', - 'mcp.detail.connecting': 'Verbinden ...', - 'mcp.detail.disconnect': 'Trennen', - 'mcp.detail.hideAssistant': 'Ausblenden Assistent', - 'mcp.detail.helpConfigure': 'Helfen Sie mir bei der Konfiguration', - 'mcp.detail.confirmUninstall': 'Deinstallation bestätigen?', - 'mcp.detail.confirmUninstallAction': 'Ja, deinstallieren', - 'mcp.detail.uninstall': 'Deinstallieren', - 'mcp.detail.envVars': 'Umgebungsvariablen', - 'mcp.detail.tools': 'Tools', - 'onboarding.skipForNow': 'Vorerst überspringen', - 'onboarding.localAI.continueWithCloud': 'Fahren Sie mit der Cloud fort.', - 'onboarding.localAI.useLocalAnyway': 'Use local AI anyway (not recommended for your device)', - 'onboarding.localAI.useLocalInstead': 'Use local AI instead (connect Ollama now)', - 'onboarding.localAI.setupIssue': 'Beim Einrichten der lokalen KI ist ein Problem aufgetreten.', - 'notifications.routingTitle': 'Benachrichtigungsweiterleitung', - 'notifications.routing.pipelineStats': 'Pipeline-Statistiken', - 'notifications.routing.total': 'Gesamt', - 'notifications.routing.unread': 'Ungelesen', - 'notifications.routing.unscored': 'Nicht bewertet', - 'notifications.routing.intelligenceTitle': 'Notification Intelligence', - 'notifications.routing.intelligenceDesc': - 'Every notification from your connected accounts is scored by a local AI model. High-importance notifications are automatically routed to your orchestrator agent so nothing critical slips through.', - 'notifications.routing.howItWorks': 'So funktioniert es', - 'notifications.routing.level.drop': 'Verwerfen', - 'notifications.routing.level.dropDesc': 'Lärm/Spam – gespeichert, aber nicht angezeigt', - 'notifications.routing.level.acknowledge': 'Bestätigen', - 'notifications.routing.level.acknowledgeDesc': 'Low-priority — shown in notification center', - 'notifications.routing.level.react': 'Reagieren', - 'notifications.routing.level.reactDesc': 'Medium-priority — triggers a focused agent response', - 'notifications.routing.level.escalate': 'Eskalieren', - 'notifications.routing.level.escalateDesc': 'High-priority — forwarded to orchestrator agent', - 'notifications.routing.perProvider': 'Routing pro Anbieter', - 'notifications.routing.threshold': 'Schwellenwert', - 'notifications.routing.routeToOrchestrator': 'Route zum Orchestrator', - 'notifications.routing.loadSettingsError': 'Failed to load settings. Reopen this panel to retry.', - 'settings.billing.inferenceBudget.title': 'Inference Budget', - 'settings.billing.inferenceBudget.noRecurringPlanBudget': 'Kein wiederkehrendes Planbudget', - 'settings.billing.inferenceBudget.noRecurringWeeklyDesc': - 'Your current plan does not include a recurring weekly inference budget. Usage is paid from available credits instead.', - 'settings.billing.inferenceBudget.remainingSummary': '{remaining} / {budget} verbleibend', - 'settings.billing.inferenceBudget.spentThisCycle': '{amount} in diesem Zyklus ausgegeben', - 'settings.billing.inferenceBudget.cycleEndsOn': 'Zyklus endet {date}', - 'settings.billing.inferenceBudget.exhaustedDesc': - 'Included subscription usage is exhausted. Top up credits to keep using AI without waiting for the next cycle.', - 'settings.billing.inferenceBudget.discountVsPayg': '{pct}% cheaper per call than pay-as-you-go.', - 'settings.billing.inferenceBudget.cycleSpend': 'Zyklusausgaben', - 'settings.billing.inferenceBudget.totalAmount': '{amount} Gesamt', - 'settings.billing.inferenceBudget.inference': 'Inferenz', - 'settings.billing.inferenceBudget.integrations': 'Integrationen', - 'settings.billing.inferenceBudget.calls': '{count} Aufrufe', - 'settings.billing.inferenceBudget.dailySpend': 'Tägliche Ausgaben', - 'settings.billing.inferenceBudget.dailySpendPoint': '{date}: {amount}', - 'settings.billing.inferenceBudget.topModels': 'Topmodelle', - 'settings.billing.inferenceBudget.noInferenceUsage': 'Keine Inferenznutzung in diesem Zyklus.', - 'settings.billing.inferenceBudget.topIntegrations': 'Top-Integrationen', - 'settings.billing.inferenceBudget.noIntegrationUsage': 'No integration usage this cycle.', - 'settings.billing.inferenceBudget.unableToLoad': 'Nutzungsdaten können nicht geladen werden.', - 'settings.billing.inferenceBudget.notAvailable': 'n/a', - 'memory.sourceFilterAria': 'Nach Quelle filtern', - 'calls.comingSoonDescription': 'KI-unterstützte Anrufe folgen in Kürze. Bleiben Sie dran.', - 'vault.title': 'Wissensdepots', - 'vault.description': 'Point at a local folder; files are chunked and mirrored into memory.', - 'vault.add': 'Tresor hinzufügen', - 'vault.added': 'Tresor hinzugefügt', - 'vault.createdMessage': 'Erstellt „{name}“. Klicken Sie zum Aufnehmen auf {sync}.', - 'vault.couldNotAdd': 'Tresor konnte nicht hinzugefügt werden', - 'vault.syncFailed': 'Synchronisierung fehlgeschlagen', - 'vault.syncFailedFor': 'Synchronisierung für „{name}“ fehlgeschlagen', - 'vault.syncFailedFiles': '{count}-Datei(en) fehlgeschlagen', - 'vault.syncedTitle': 'Synchronisierung „{name}“ fehlgeschlagen', - 'vault.syncSummary': 'Aufgenommen {ingested}, unverändert {unchanged}, entfernt {removed}', - 'vault.syncSummaryFailed': ', fehlgeschlagen {count}', - 'vault.syncSummarySkipped': ', übersprungen {count}', - 'vault.syncSummaryDuration': '· {seconds}s', - 'vault.confirmRemovePurge': - 'Remove vault "{name}"?\n\nClick OK to also purge its memory (delete all {count} ingested document(s)).\nClick Cancel to keep the documents in memory.', - 'vault.confirmRemove': 'Tresor „{name}“ wirklich entfernen?', - 'vault.removed': 'Tresor entfernt', - 'vault.removedPurgedMessage': '„{name}“ entfernt und seinen Speicher geleert.', - 'vault.removedKeptMessage': '„{name}“ entfernt. Dokumente im Gedächtnis behalten.', - 'vault.couldNotRemove': 'Tresor konnte nicht entfernt werden.', - 'vault.name': 'Name', - 'vault.namePlaceholder': 'Meine Forschungsnotizen', - 'vault.folderPath': 'Ordnerpfad (absolut)', - 'vault.folderPathPlaceholder': '/Benutzer/Sie/Dokumente/Notizen', - 'vault.excludes': 'Schließt aus (durch Kommas getrennte Teilzeichenfolgen, optional)', - 'vault.excludesPlaceholder': 'drafts/, .secret', - 'vault.creating': 'Wird erstellt…', - 'vault.create': 'Tresor erstellen', - 'vault.loading': 'Wird geladen Tresore…', - 'vault.failedToLoad': 'Tresore konnten nicht geladen werden: {error}', - 'vault.empty': 'No vaults yet. Add one above to start ingesting a folder.', - 'vault.fileCount': '{count} Datei(en)', - 'vault.syncedRelative': 'synchronisiert {time}', - 'vault.neverSynced': 'nie synchronisiert', - 'vault.syncingProgress': 'Synchronisierung… {ingested}/{total}', - 'vault.removing': 'Entfernen…', - 'vault.relative.sec': 'vor {count}s', - 'vault.relative.min': 'vor {count}m', - 'vault.relative.hr': 'vor {count}h', - 'vault.relative.day': 'vor {count}d', - 'whatsapp.title': 'WhatsApp', - 'subconscious.interval.fiveMinutes': '5 Min.', - 'subconscious.interval.tenMinutes': '10 Min.', - 'subconscious.interval.fifteenMinutes': '15 Min.', - 'subconscious.interval.thirtyMinutes': '30 Min.', - 'subconscious.interval.oneHour': '1 Stunde', - 'subconscious.interval.sixHours': '6 Stunden', - 'subconscious.interval.twelveHours': '12 Stunden', - 'subconscious.interval.oneDay': '1 Tag', - 'subconscious.priority.critical': 'kritisch', - 'subconscious.priority.important': 'wichtig', - 'subconscious.priority.normal': 'normal', - 'subconscious.durationSeconds': '{seconds}s', - 'subconscious.durationMilliseconds': '{milliseconds}ms', - 'settings.search.allowedSitesLabel': 'Allowed websites', - 'settings.search.allowedSitesHint': - 'Websites the assistant may open and read while researching (one host per line, e.g. reuters.com). A host also covers its subdomains. Leave empty to block all web access.', - 'settings.search.allowedSitesAllOn': - 'The assistant can open any public website. Local and private addresses stay blocked.', - 'settings.search.allowedSitesPlaceholder': 'reuters.com\napnews.com\ngithub.com', - 'settings.search.allowedSitesSave': 'Save websites', - 'settings.search.accessModeAria': 'Web access mode', - 'settings.search.accessAllowAll': 'Allow all', - 'settings.search.accessCustom': 'Custom', - 'settings.search.accessBlockAll': 'Block all', - 'settings.search.accessBlockAllHint': - 'All web access is blocked — the assistant cannot open or read any website.', - 'memory.tab.centrality': 'Centrality', - 'graphCentrality.title': 'Knowledge Graph Centrality', - 'graphCentrality.intro': - 'PageRank over your memory graph surfaces the load-bearing hubs — and the connector entities that link otherwise-separate clusters, which a raw frequency count cannot reveal.', - 'graphCentrality.loading': 'Computing centrality…', - 'graphCentrality.errorPrefix': 'Could not load the graph:', - 'graphCentrality.retry': 'Retry', - 'graphCentrality.empty': 'No knowledge graph yet.', - 'graphCentrality.emptyHint': - 'As the assistant records facts about you, the most connected entities will surface here.', - 'graphCentrality.namespaceLabel': 'Namespace', - 'graphCentrality.namespaceAll': 'All namespaces', - 'graphCentrality.metricEntities': 'Entities', - 'graphCentrality.metricConnections': 'Connections', - 'graphCentrality.metricClusters': 'Clusters', - 'graphCentrality.clustersCaption': '{components} clusters · largest holds {largest}', - 'graphCentrality.approximateBadge': 'approximate', - 'graphCentrality.approximateTitle': 'Stopped at the iteration cap before fully converging', - 'graphCentrality.rankedHeading': 'Top entities by influence', - 'graphCentrality.colRank': '#', - 'graphCentrality.colEntity': 'Entity', - 'graphCentrality.colInfluence': 'Influence', - 'graphCentrality.colLinks': 'Links', - 'graphCentrality.bridgeBadge': 'connector', - 'graphCentrality.bridgeTitle': 'Connector — more influential than its link count suggests', - 'graphCentrality.degreeTitle': '{in} in · {out} out', - 'settings.search.engineDisabledLabel': 'Disabled', - 'settings.search.engineDisabledDesc': - 'Remove search tools from the agent context and available tool list.', -}; - -export default de1; diff --git a/app/src/lib/i18n/chunks/de-2.ts b/app/src/lib/i18n/chunks/de-2.ts deleted file mode 100644 index 5bb6c57f3..000000000 --- a/app/src/lib/i18n/chunks/de-2.ts +++ /dev/null @@ -1,510 +0,0 @@ -import type { TranslationMap } from '../types'; - -// German (Deutsch) translations. Each chunk maps to chunks/en-2.ts. -const de2: TranslationMap = { - 'settings.ai.configStatus': 'Konfigurationsstatus', - 'settings.ai.fallbackMode': 'Fallback-Modus', - 'settings.ai.loadedFromRuntime': 'Aus Runtime geladen', - 'settings.ai.loadingDuration': 'Ladedauer', - 'settings.ai.localRuntime': 'Lokale Modelllaufzeit', - 'settings.ai.openManager': 'Öffne den Manager', - 'settings.ai.retryDownload': 'Versuche den Download erneut', - 'settings.ai.state': 'Staat', - 'settings.ai.targetModel': 'Zielmodell', - 'settings.ai.download': 'Herunterladen', - 'settings.ai.localModelUnavailable': 'Lokaler Modellstatus nicht verfügbar.', - 'settings.ai.soulConfig': 'SOUL Persona-Konfiguration', - 'settings.ai.refreshing': 'Erfrischend...', - 'settings.ai.refreshSoul': 'SOUL aktualisieren', - 'settings.ai.loadingSoul': 'SOUL-Konfiguration wird geladen...', - 'settings.ai.identity': 'Identität', - 'settings.ai.personality': 'Persönlichkeit', - 'settings.ai.safetyRules': 'Sicherheitsregeln', - 'settings.ai.source': 'Quelle', - 'settings.ai.loaded': 'Geladen', - 'settings.ai.toolsConfig': 'TOOLS Konfiguration', - 'settings.ai.refreshTools': 'TOOLS aktualisieren', - 'settings.ai.toolsAvailable': 'Verfügbare Werkzeuge', - 'settings.ai.tools': 'Werkzeuge', - 'settings.ai.activeSkills': 'Aktive Fähigkeiten', - 'settings.ai.skills': 'Fähigkeiten', - 'settings.ai.skillsOverview': 'Überblick über die Fähigkeiten', - 'settings.ai.refreshingAll': 'Alles erfrischen...', - 'settings.ai.refreshAll': 'Aktualisiere alle AI-Konfigurationen', - 'settings.notifications.suppressAll': 'Alle Benachrichtigungen unterdrücken', - 'settings.notifications.suppressAllDesc': - 'Blockiere alle Betriebssystem-Benachrichtigungs-Toasts von eingebetteten Apps, unabhängig vom Fokusstatus.', - 'settings.notifications.toggleDnd': 'Schalte „Bitte nicht stören“ um', - 'settings.notifications.categories': 'Kategorien', - 'settings.notifications.categoryFooter': - 'Durch das Deaktivieren einer Kategorie wird verhindert, dass neue Benachrichtigungen dieses Typs im Benachrichtigungscenter angezeigt werden. Vorhandene Benachrichtigungen bleiben bestehen, bis sie gelöscht werden.', - 'settings.billing.movedToWeb': 'Die Abrechnung wurde ins Internet verlagert', - 'settings.billing.openDashboard': 'Abrechnungs-Dashboard öffnen', - 'settings.billing.movedToWebDesc': - 'Abonnementänderungen, Zahlungsmethoden, Gutschriften und Rechnungen werden jetzt bei TinyHumans im Internet verwaltet.', - 'settings.billing.backToSettings': 'Zurück zu den Einstellungen', - 'settings.billing.openingBrowser': 'Öffne deinen Browser...', - 'settings.billing.browserNotOpen': - 'Wenn dein Browser nicht geöffnet wurde, verwende die Schaltfläche oben.', - 'settings.billing.browserOpenFailed': - 'Der Browser konnte nicht automatisch geöffnet werden. Nutze den Button oben.', - 'settings.tools.chooseCapabilities': - 'Wähle aus, welche Funktionen OpenHuman in deinem Namen nutzen kann.', - 'settings.tools.saveChanges': 'Änderungen speichern', - 'settings.tools.preferencesSaved': 'Einstellungen gespeichert', - 'settings.tools.saveFailed': - 'Einstellungen konnten nicht gespeichert werden. Versuche es erneut.', - 'settings.screenAwareness.mode': 'Modus', - 'settings.screenAwareness.allExceptBlacklist': 'Alle außer Blacklist', - 'settings.screenAwareness.whitelistOnly': 'Nur Whitelist', - 'settings.screenAwareness.screenMonitoring': 'Bildschirmüberwachung', - 'settings.screenAwareness.saveSettings': 'Einstellungen speichern', - 'settings.screenAwareness.session': 'Sitzung', - 'settings.screenAwareness.status': 'Status', - 'settings.screenAwareness.active': 'Aktiv', - 'settings.screenAwareness.stopped': 'Angehalten', - 'settings.screenAwareness.remaining': 'Übrig', - 'settings.screenAwareness.startSession': 'Sitzung starten', - 'settings.screenAwareness.stopSession': 'Sitzung beenden', - 'settings.screenAwareness.analyzeNow': 'Jetzt analysieren', - 'settings.screenAwareness.macosOnly': - 'Die Desktop-Erfassung und Berechtigungssteuerung von Screen Awareness wird derzeit nur auf macOS unterstützt.', - 'connections.comingSoon': 'Kommt bald', - 'connections.setUp': 'Einrichten', - 'connections.configured': 'Konfiguriert', - 'connections.unavailable': 'Nicht verfügbar', - 'connections.checking': 'Überprüfen…', - 'connections.walletConfigured': - 'Lokale EVM-, BTC-, Solana- und Tron-Identitäten werden anhand deiner Wiederherstellungsphrase konfiguriert.', - 'connections.walletReady': - 'Richte lokale EVM-, BTC-, Solana- und Tron-Identitäten aus einer Wiederherstellungsphrase ein.', - 'connections.walletError': - 'Der Wallet-Status konnte nicht überprüft werden. Tippe im Bedienfeld „Wiederherstellungsphrase“ auf , um es noch einmal zu versuchen.', - 'connections.walletChecking': 'Wallet-Status wird überprüft...', - 'connections.walletIdentities': 'Wallet-Identitäten', - 'connections.walletDerived': - 'Wird lokal von deiner Wiederherstellungsphrase abgeleitet und nur als sichere Metadaten gespeichert.', - 'connections.privacySecurity': 'Datenschutz und Sicherheit', - 'connections.privacySecurityDesc': - 'Alle Daten und Anmeldeinformationen werden lokal mit einer Null-Datenaufbewahrungsrichtlinie gespeichert. Deine Daten werden verschlüsselt und niemals an Dritte weitergegeben.', - 'channels.status.connecting': 'Verbinden', - 'channels.status.notConfigured': 'Nicht konfiguriert', - 'channels.noActiveRoute': 'Keine aktive Route', - 'channels.activeRoute': 'Aktive Route', - 'channels.loadingDefinitions': 'Kanaldefinitionen werden geladen...', - 'channels.channelConnections': 'Kanalverbindungen', - 'channels.configureAuthModes': 'Konfiguriere Authentifizierungsmodi für jeden Nachrichtenkanal.', - 'channels.configNotAvailable': 'Konfiguration für', - 'channels.channel': 'Kanal', - 'devOptions.coreModeNotSet': 'Kernmodus: nicht eingestellt', - 'devOptions.coreModeNotSetDesc': - 'Der Boot-Check-Picker wurde noch nicht bestätigt. Verwende den Umschaltmodus in der Auswahl, um „Lokal“ oder „Cloud“ auszuwählen.', - 'devOptions.local': 'Lokal', - 'devOptions.embeddedCoreSidecar': 'Eingebetteter Core-Sidecar', - 'devOptions.sidecarSpawned': 'Wird prozessintern von der Tauri-Shell beim App-Start erzeugt.', - 'devOptions.cloud': 'Wolke', - 'devOptions.remoteCoreRpc': 'Remote-Kern RPC', - 'devOptions.token': 'Token', - 'devOptions.tokenNotSet': 'nicht gesetzt – RPC wird 401', - 'devOptions.triggerSentryTest': 'Trigger Sentry Test (Staging)', - 'devOptions.triggerSentryTestDesc': - 'Löst einen getaggten Fehler aus, um die Sentry-Pipeline zu überprüfen. Problem Nr. 1072 – nach Überprüfung entfernen.', - 'devOptions.sendTestEvent': 'Testereignis senden', - 'devOptions.sending': 'Senden…', - 'devOptions.eventSent': 'Ereignis gesendet', - 'devOptions.failed': 'Fehlgeschlagen', - 'devOptions.appLogs': 'App-Protokolle', - 'devOptions.appLogsDesc': - 'Öffne den Ordner mit den fortlaufenden täglichen Protokolldateien. Hänge die aktuellste Datei an, wenn du ein Problem meldest.', - 'devOptions.openLogsFolder': 'Öffne den Protokollordner', - 'mnemonic.phraseSaved': 'Wiederherstellungsphrase gespeichert', - 'mnemonic.walletReady': - 'Multi-Chain-Wallet-Identitäten sind bereit. Zurück zu den Einstellungen...', - 'mnemonic.writeDownWords': 'Schreibe diese auf', - 'mnemonic.wordsInOrder': - 'Sortiere die Wörter in der richtigen Reihenfolge und bewahre sie an einem sicheren Ort auf. Dieser Satz sichert deinen lokalen Verschlüsselungsschlüssel und deine EVM-, BTC-, Solana- und Tron-Wallet-Identitäten.', - 'mnemonic.cannotRecover': - 'Dieser Satz kann bei Verlust niemals wiederhergestellt werden und sollte vollständig lokal auf deinem Gerät bleiben.', - 'mnemonic.copyToClipboard': 'In die Zwischenablage kopieren', - 'mnemonic.alreadyHavePhrase': 'Ich habe bereits einen Wiederherstellungssatz', - 'mnemonic.consentSaved': - 'Ich habe diesen Satz gespeichert und bin damit einverstanden, ihn für die lokale Wallet-Einrichtung zu verwenden', - 'mnemonic.enterPhraseToRestore': - 'Gib unten deine Wiederherstellungsphrase ein, um deine lokalen Wallet-Identitäten wiederherzustellen, oder füge die vollständige Phrase in ein beliebiges Feld ein (12 Wörter für neue Backups; 24-Wort-Phrasen aus älteren Versionen funktionieren weiterhin).', - 'mnemonic.words': 'Worte', - 'mnemonic.validPhrase': 'Gültige Wiederherstellungsphrase', - 'mnemonic.generateNewPhrase': 'Generiere stattdessen eine neue Wiederherstellungsphrase', - 'mnemonic.securingData': 'Sicherung deiner Daten...', - 'mnemonic.saveRecoveryPhrase': 'Speichere die Wiederherstellungsphrase', - 'mnemonic.userNotLoaded': - 'Benutzer nicht geladen. Bitte melde dich erneut an oder aktualisiere die Seite.', - 'mnemonic.invalidPhrase': - 'Ungültige Wiederherstellungsphrase. Bitte prüfe deine Wörter und versuche es erneut.', - 'mnemonic.somethingWentWrong': 'Etwas ist schief gelaufen. Bitte versuche es erneut.', - 'team.failedToCreate': 'Team konnte nicht erstellt werden', - 'team.invalidInviteCode': 'Ungültiger oder abgelaufener Einladungscode', - 'team.failedToSwitch': 'Teamwechsel fehlgeschlagen', - 'team.failedToLeave': 'Das Team konnte nicht verlassen werden', - 'team.role.owner': 'Besitzer', - 'team.role.admin': 'Admin', - 'team.role.billingManager': 'Rechnungsmanager', - 'team.role.member': 'Mitglied', - 'team.active': 'Aktiv', - 'team.personalTeam': 'Persönliches Team', - 'team.manageTeam': 'Team verwalten', - 'team.switching': 'Wechsel...', - 'team.switch': 'Wechseln', - 'team.leaving': 'Verlassen...', - 'team.leave': 'Geh', - 'team.yourTeams': 'Deine Teams', - 'team.createNewTeam': 'Neues Team erstellen', - 'team.teamName': 'Teamname', - 'team.creating': 'Erstellen...', - 'team.joinExistingTeam': 'Tritt einem bestehenden Team bei', - 'team.inviteCode': 'Einladungscode', - 'team.joining': 'Beitritt...', - 'team.join': 'Mach mit', - 'team.leaveTeam': 'Verlasse das Team', - 'team.confirmLeave': 'Bist du sicher, dass du gehen möchtest?', - 'team.leaveWarning': - 'Du verlierst den Zugriff auf das Team und alle Teamressourcen. Du brauchst eine neue Einladung, um wieder beizutreten.', - 'team.management': 'Teammanagement', - 'team.notFound': 'Team nicht gefunden', - 'team.accessDenied': 'Zugriff verweigert', - 'team.members': 'Mitglieder', - 'voice.title': 'Sprachdiktat', - 'voice.settings': 'Spracheinstellungen', - 'voice.settingsDesc': - 'Halte den Hotkey gedrückt, um zu diktieren und Text in das aktive Feld einzufügen.', - 'voice.hotkey': 'Hotkey', - 'voice.activationMode': 'Aktivierungsmodus', - 'voice.tapToToggle': 'Zum Umschalten tippen', - 'voice.writingStyle': 'Schreibstil', - 'voice.verbatimTranscription': 'Wörtliche Transkription', - 'voice.naturalCleanup': 'Natürliche Reinigung', - 'voice.autoStart': 'Sprachserver automatisch mit dem Core starten', - 'voice.customDictionary': 'Benutzerdefiniertes Wörterbuch', - 'voice.customDictionaryDesc': - 'Füge Namen, Fachbegriffe und Domänenwörter hinzu, um die Erkennungsgenauigkeit zu verbessern.', - 'voice.addWord': 'Füge ein Wort hinzu...', - 'voice.sttDisabled': - 'Das Sprachdiktieren ist deaktiviert, bis das lokale STT-Modell heruntergeladen und bereit ist.', - 'voice.openLocalAiModel': 'Öffne das lokale KI-Modell', - 'voice.serverRestarted': 'Der Sprachserver wurde mit den neuen Einstellungen neu gestartet.', - 'voice.settingsSaved': 'Spracheinstellungen gespeichert.', - 'voice.serverStarted': 'Sprachserver gestartet.', - 'voice.serverStopped': 'Sprachserver gestoppt.', - 'voice.saveVoiceSettings': 'Spracheinstellungen speichern', - 'voice.startVoiceServer': 'Starte den Sprachserver', - 'voice.stopVoiceServer': 'Sprachserver stoppen', - 'voice.debugTitle': 'Sprach-Debug', - 'autocomplete.title': 'Automatische Vervollständigung', - 'autocomplete.settings': 'Einstellungen', - 'autocomplete.acceptWithTab': 'Mit Tab akzeptieren', - 'autocomplete.stylePreset': 'Stilvoreinstellung', - 'autocomplete.style.balanced': 'Ausgewogen', - 'autocomplete.style.concise': 'Prägnant', - 'autocomplete.style.formal': 'Formell', - 'autocomplete.style.casual': 'Lässig', - 'autocomplete.style.custom': 'Benutzerdefiniert', - 'autocomplete.disabledApps': 'Deaktivierte Apps (ein Bundle/App-Token pro Zeile)', - 'autocomplete.saveSettings': 'Einstellungen speichern', - 'autocomplete.saving': 'Sparen…', - 'autocomplete.runtime': 'Laufzeit', - 'autocomplete.running': 'Laufen', - 'autocomplete.start': 'Starten', - 'autocomplete.stop': 'Stopp', - 'autocomplete.settingsSaved': 'Autovervollständigungseinstellungen gespeichert.', - 'autocomplete.started': 'Die automatische Vervollständigung wurde gestartet.', - 'autocomplete.didNotStart': - 'Die automatische Vervollständigung wurde nicht gestartet. Prüfe, ob es aktiviert ist.', - 'autocomplete.stopped': 'Die automatische Vervollständigung wurde gestoppt.', - 'autocomplete.advancedSettings': 'Erweiterte Einstellungen', - 'autocomplete.debugTitle': 'Autocomplete-Debug', - 'chat.agentChat': 'Agenten-Chat', - 'chat.overrides': 'Überschreibt', - 'chat.model': 'Modell', - 'chat.temperature': 'Temperatur', - 'chat.conversation': 'Gespräch', - 'chat.startAgentConversation': 'Beginne ein Gespräch mit dem Agenten.', - 'chat.you': 'Du', - 'chat.agent': 'Agent', - 'chat.askAgent': 'Frag den Agenten etwas ...', - 'chat.sendMessage': 'Nachricht senden', - 'composio.triageTitle': 'Integrationsauslöser', - 'composio.triageDesc': - 'Wenn er aktiv ist, durchläuft jeder eingehende Composio-Auslöser einen KI-Triage-Schritt, der das Ereignis klassifiziert und möglicherweise automatisierte Aktionen auslöst – eine lokale LLM-Runde pro Auslöser. Deaktiviere die Option global oder pro Integration, wenn du eine manuelle Überprüfung bevorzugst. Wenn die Umgebungsvariable', - 'composio.disableAllTriage': 'Deaktiviere die KI-Triage für alle Auslöser', - 'composio.triggersStillRecorded': - 'Auslöser werden weiterhin im Verlauf aufgezeichnet – es wird kein LLM-Turn ausgeführt.', - 'composio.disableSpecificIntegrations': 'Deaktiviere die KI-Triage für bestimmte Integrationen', - 'composio.settingsSaved': 'Einstellungen gespeichert', - 'composio.saveFailed': 'Speichern fehlgeschlagen. Versuche es erneut.', - 'cron.title': 'Cron-Jobs', - 'cron.scheduledJobs': 'Geplante Jobs', - 'cron.manageCronJobs': 'Verwalte Cron-Jobs über den Kernplaner.', - 'cron.refreshCronJobs': 'Cron-Jobs aktualisieren', - 'localModel.modelStatus': 'Modellstatus', - 'localModel.downloadModels': 'Modelle herunterladen', - 'localModel.usage': 'Nutzung', - 'localModel.usageDesc': - 'Wähle aus, welche Subsysteme auf dem lokalen Modell ausgeführt werden. Alles, was nicht funktioniert, nutzt die Cloud.', - 'localModel.enableRuntime': 'Aktiviere die lokale AI-Laufzeit', - 'localModel.enableRuntimeDesc': - 'Hauptschalter. Standardmäßig deaktiviert – Ollama bleibt inaktiv. Wenn diese Option aktiviert ist, verwenden die Baumzusammenfassung, die Bildschirmintelligenz und die automatische Vervollständigung immer das lokale Modell.', - 'localModel.advancedSettings': 'Erweiterte Einstellungen', - 'localModel.debugTitle': 'Lokales Modell-Debug', - 'localModel.ollamaServer.helperText': 'Beispiel: http://192.168.1.5:11434', - 'localModel.ollamaServer.label': 'Ollama Server URL', - 'localModel.ollamaServer.modelCount': 'Modelle', - 'localModel.ollamaServer.placeholder': 'http://localhost:11434', - 'localModel.ollamaServer.reachable': 'Erreichbar', - 'localModel.ollamaServer.resetButton': 'Auf Standard zurücksetzen', - 'localModel.ollamaServer.saveButton': 'Speichern', - 'localModel.ollamaServer.testButton': 'Testverbindung', - 'localModel.ollamaServer.unreachable': 'Unerreichbar', - 'localModel.ollamaServer.validationError': 'Muss ein gültiges http:// oder https:// sein URL', - 'screenAwareness.debugTitle': 'Debuggen der Bildschirmerkennung', - 'memory.debugTitle': 'Speicher-Debug', - 'webhooks.debugTitle': 'Webhooks-Debug', - 'notifications.routingTitle': 'Benachrichtigungsweiterleitung', - 'common.reload': 'Neu laden', - 'common.skip': 'Überspringen', - 'common.disable': 'Deaktivieren', - 'common.enable': 'Aktivieren', - 'chat.safetyTimeout': - 'Keine Antwort vom Agenten nach 2 Minuten. Versuche es erneut oder prüfe deine Verbindung.', - 'chat.filter.all': 'Alle', - 'chat.filter.work': 'Arbeit', - 'chat.filter.briefing': 'Briefing', - 'chat.filter.notification': 'Benachrichtigung', - 'chat.filter.workers': 'Arbeiter', - 'chat.selectThread': 'Wähle einen Thread aus', - 'chat.threads': 'Themen', - 'chat.noThreads': 'Noch keine Threads', - 'chat.noLabelThreads': 'Keine „{label}“-Threads', - 'chat.noWorkerThreads': 'Noch keine Arbeitsthreads', - 'chat.deleteThread': 'Thread löschen', - 'chat.deleteThreadConfirm': 'Bist du sicher, dass du „{title}“ löschen möchtest?', - 'chat.untitledThread': 'Thread ohne Titel', - 'chat.editThreadTitle': 'Edit thread title', - 'chat.hideSidebar': 'Seitenleiste ausblenden', - 'chat.showSidebar': 'Seitenleiste anzeigen', - 'chat.newThreadShortcut': 'Neuer Thread (/new)', - 'chat.new': 'Neu', - 'chat.failedToLoadMessages': 'Nachrichten konnten nicht geladen werden', - 'chat.thinkingIteration': 'Denken... ({n})', - 'chat.thinkingDots': 'Denken...', - 'chat.approachingLimit': 'Das Nutzungslimit nähert sich', - 'chat.approachingLimitMsg': 'Du hast {pct} % deines verfügbaren Kontingents verwendet.', - 'chat.upgrade': 'Upgrade', - 'chat.weeklyLimitHit': 'Du hast dein enthaltenes Zyklusbudget aufgebraucht.', - 'chat.resets': 'Zurücksetzen', - 'chat.topUpToContinue': 'Lade Guthaben auf, um fortzufahren.', - 'chat.budgetComplete': - 'Dein enthaltenes Budget ist aufgebraucht. Füge Credits hinzu oder führe ein Upgrade durch, um fortzufahren.', - 'chat.topUp': 'Aufladen', - 'chat.cycle': 'Zyklus', - 'chat.cycleSpent': 'Habe diesen Zyklus verbracht', - 'chat.cycleRemaining': 'Übrig', - 'chat.left': 'links', - 'chat.setup': 'Einrichten', - 'chat.switchToText': 'Wechsle zu Text', - 'chat.transcribing': 'Transkribieren...', - 'chat.stopAndSend': 'Stoppen und senden', - 'chat.startTalking': 'Sprich los', - 'chat.playingVoiceReply': 'Sprachantwort wird abgespielt', - 'chat.voiceHint': 'Nutze das Mikrofon zum Sprechen', - 'chat.micUnavailable': 'Mikrofon nicht verfügbar', - 'chat.turn': 'drehen', - 'chat.turns': 'dreht sich', - 'chat.openWorkerThread': 'Arbeitsthread öffnen', - 'chat.attachment.attach': 'Bild anhängen', - 'chat.attachment.remove': '{name} entfernen', - 'chat.attachment.tooMany': 'Maximal {max} Bilder pro Nachricht', - 'chat.attachment.tooLarge': 'Bild überschreitet die Größenbeschränkung von {max}', - 'chat.attachment.unsupportedType': - 'Nicht unterstützter Dateityp. Verwenden Sie PNG, JPEG, WebP, GIF oder BMP.', - 'chat.attachment.readFailed': 'Datei konnte nicht gelesen werden', - 'memory.searchAria': 'Speicher durchsuchen', - 'memory.searchPlaceholder': 'Speichereinträge durchsuchen...', - 'memory.sourceFilter.all': 'Alle Quellen', - 'memory.sourceFilter.email': 'E-Mail', - 'memory.sourceFilter.calendar': 'Kalender', - 'memory.sourceFilter.telegram': 'Telegram', - 'memory.sourceFilter.aiInsight': 'KI-Einblick', - 'memory.sourceFilter.system': 'System', - 'memory.sourceFilter.trading': 'Handel', - 'memory.sourceFilter.security': 'Sicherheit', - 'memory.ingestionActivity': 'Einnahmeaktivität', - 'memory.events': 'Ereignisse', - 'memory.event': 'Ereignis', - 'memory.overTheLast': 'im letzten', - 'memory.months': 'Monate', - 'memory.peak': 'Höhepunkt', - 'memory.perDay': '/Tag', - 'memory.less': 'Weniger', - 'memory.more': 'Mehr', - 'memory.on': 'auf', - 'memory.loading': 'Speicher wird geladen', - 'memory.fetching': 'Deine Speichereinträge werden abgerufen...', - 'memory.analyzing': 'Gedächtnis analysieren', - 'memory.analyzingHint': 'Verarbeite deine Erinnerungen, um Erkenntnisse zu gewinnen ...', - 'memory.noMatches': 'Keine Übereinstimmungen gefunden', - 'memory.noMatchesHint': 'Versuche, deine Suchbegriffe oder Filter zu ändern.', - 'memory.allCaughtUp': 'Alles aufgeholt', - 'memory.allCaughtUpHint': 'Es müssen keine neuen Speichereinträge verarbeitet werden.', - 'memory.noAnalysis': 'Noch keine Analyse', - 'memory.noAnalysisHint': - 'Führe eine Analyse durch, um Muster in deinen Erinnerungen zu entdecken.', - 'memory.emptyHint': 'Beginne mit der Interaktion, um deine ersten Erinnerungen zu schaffen.', - 'mic.unavailable': 'Mikrofon ist nicht verfügbar', - 'mic.permissionDenied': 'Mikrofonberechtigung verweigert', - 'mic.failedToStartRecorder': 'Der Rekorder konnte nicht gestartet werden', - 'mic.transcribing': 'Transkribieren...', - 'mic.tapToSend': 'Zum Senden tippen', - 'mic.waitingForAgent': 'Warten auf Agent...', - 'mic.tapAndSpeak': 'Tippen und sprechen', - 'mic.stopRecording': 'Aufnahme stoppen und senden', - 'mic.startRecording': 'Starte die Aufnahme', - 'token.usageLimitReached': 'Nutzungslimit erreicht', - 'token.approachingLimit': 'Annäherung an die Grenze', - 'token.planClickForDetails': 'Plan – klicke für Details', - 'token.sessionTokens': 'In: {in} | Aus: {out} | Turns: {turns}', - 'token.limit': 'Limit erreicht', - 'catalog.noCapabilityBinding': 'Keine Fähigkeitsbindung', - 'catalog.downloadFailed': 'Der Download ist fehlgeschlagen', - 'catalog.active': 'Aktiv', - 'catalog.installed': 'Installiert', - 'catalog.notDownloaded': 'Nicht heruntergeladen', - 'catalog.inUse': 'Im Einsatz', - 'catalog.use': 'Benutzen', - 'catalog.deleteModel': 'Modell löschen', - 'catalog.download': 'Herunterladen', - 'navigator.recent': 'Neu', - 'navigator.today': 'Heute', - 'navigator.thisWeek': 'Diese Woche', - 'navigator.sources': 'Quellen', - 'navigator.email': 'E-Mail', - 'navigator.slack': 'Slack', - 'navigator.chat': 'Chatten', - 'navigator.documents': 'Dokumente', - 'navigator.people': 'Menschen', - 'navigator.topics': 'Themen', - 'dreams.description': - 'Träume sind KI-generierte Reflexionen, die Muster aus deinen Erinnerungen synthetisieren.', - 'dreams.comingSoon': 'Kommt bald', - 'assignment.memoryLlm': 'Speicher LLM', - 'assignment.memoryLlmAria': 'Auswahl des Speichers LLM', - 'assignment.embedder': 'Einbetter', - 'assignment.loaded': 'Geladen', - 'assignment.notDownloaded': 'Nicht heruntergeladen', - 'assignment.usedForExtractSummarise': 'Wird zur Extraktion und Zusammenfassung verwendet', - 'insights.knownFacts': 'Bekannte Fakten', - 'insights.preferences': 'Präferenzen', - 'insights.relationships': 'Beziehungen', - 'insights.skills': 'Fähigkeiten', - 'insights.opinions': 'Meinungen', - 'devOptions.menuAi': 'KI-Konfiguration', - 'devOptions.menuAiDesc': 'Cloud-Anbieter, lokale Ollama-Modelle und Routing pro Workload', - 'devOptions.menuScreenAware': 'Bildschirmbewusstsein', - 'devOptions.menuScreenAwareDesc': - 'Bildschirmaufnahmeberechtigungen, Überwachungsrichtlinien und Sitzungskontrollen', - 'devOptions.menuMessaging': 'Messaging-Kanäle', - 'devOptions.menuMessagingDesc': - 'Konfiguriere die Authentifizierungsmodi Telegram/Discord und das Standardkanalrouting', - 'devOptions.menuTools': 'Werkzeuge', - 'devOptions.menuToolsDesc': - 'Aktiviere oder deaktiviere Funktionen, die OpenHuman in deinem Namen nutzen kann', - 'devOptions.menuAgentChat': 'Agenten-Chat', - 'devOptions.menuAgentChatDesc': - 'Test-Agent-Konversation mit Modell- und Temperaturüberschreibungen', - 'devOptions.menuCronJobs': 'Cron-Jobs', - 'devOptions.menuCronJobsDesc': - 'Zeige geplante Jobs für Laufzeitfähigkeiten an und konfiguriere sie', - 'devOptions.menuLocalModelDebug': 'Lokales Modell-Debug', - 'devOptions.menuLocalModelDebugDesc': - 'Ollama-Konfiguration, Asset-Downloads, Modelltests und Diagnose', - 'devOptions.menuWebhooksDebug': 'Webhooks', - 'devOptions.menuWebhooksDebugDesc': - 'Prüfe Laufzeit-Webhook-Registrierungen und erfasste Anforderungsprotokolle', - 'devOptions.menuIntelligence': 'Intelligenz', - 'devOptions.menuIntelligenceDesc': - 'Gedächtnisarbeitsbereich, Unterbewusstseinsmotor, Träume und Einstellungen', - 'devOptions.menuNotificationRouting': 'Benachrichtigungsweiterleitung', - 'devOptions.menuNotificationRoutingDesc': - 'KI-Wichtigkeitsbewertung und Orchestrator-Eskalation für Integrationswarnungen', - 'devOptions.menuComposeIOTriggers': 'ComposeIO Auslöser', - 'devOptions.menuComposeIOTriggersDesc': 'Sieh dir den ComposeIO-Triggerverlauf und das Archiv an', - 'devOptions.menuComposioRouting': 'Composio Routing (Direktmodus)', - 'devOptions.menuComposioRoutingDesc': - 'Bring deinen eigenen Composio API-Schlüssel mit und leite Anrufe direkt an backend.composio.dev weiter', - 'devOptions.menuComposioTriggers': 'Integrationsauslöser', - 'devOptions.menuComposioTriggersDesc': - 'Konfiguriere KI-Triage-Einstellungen für Composio-Integrationsauslöser', - 'mic.deviceSelector': 'Mikrofongerät', - 'mic.tapToSendCountdown': 'Zum Senden tippen ({seconds}s)', - 'settings.agents.title': 'Agents', - 'settings.agents.subtitle': - 'Manage the agents available for delegation — built-in defaults and your own custom agents.', - 'settings.agents.menuDesc': 'Manage built-in and custom agents', - 'settings.agents.newAgent': 'New agent', - 'settings.agents.loadError': "Couldn't load agents", - 'settings.agents.empty': 'No agents yet', - 'settings.agents.sourceDefault': 'Built-in', - 'settings.agents.sourceCustom': 'Custom', - 'settings.agents.enable': 'Enable agent', - 'settings.agents.disable': 'Disable agent', - 'settings.agents.edit': 'Edit', - 'settings.agents.delete': 'Delete', - 'settings.agents.reset': 'Reset to default', - 'settings.agents.modelLabel': 'Model', - 'settings.agents.toolsLabel': 'Tools', - 'settings.agents.toolsAll': 'All tools', - 'settings.agents.toolsCount': '{count} tools', - 'settings.agents.actionFailed': "Couldn't update the agent", - 'settings.agents.orchestratorLocked': 'The orchestrator is always enabled.', - 'settings.agents.editor.createTitle': 'New agent', - 'settings.agents.editor.editTitle': 'Edit agent', - 'settings.agents.editor.id': 'ID', - 'settings.agents.editor.idHint': 'Lowercase letters, numbers, _ and - only.', - 'settings.agents.editor.name': 'Name', - 'settings.agents.editor.description': 'Description', - 'settings.agents.editor.model': 'Model (optional)', - 'settings.agents.editor.modelPlaceholder': 'e.g. inherit, hint:fast, or a model id', - 'settings.agents.editor.systemPrompt': 'System prompt (optional)', - 'settings.agents.editor.tools': 'Allowed tools', - 'settings.agents.editor.toolsHint': 'One tool name per line. Use * for all tools.', - 'settings.agents.editor.defaultsNote': - 'Editing a built-in agent saves an override you can reset later.', - 'settings.agents.editor.save': 'Save', - 'settings.agents.editor.create': 'Create agent', - 'settings.agents.editor.saving': 'Saving…', - 'settings.agentsSection.title': 'Agents', - 'settings.agentsSection.description': - 'Manage your agents, their autonomy, and what they can access on this computer.', - 'settings.agentsSection.menuDesc': 'Registry, autonomy & OS access', - 'settings.agents.editor.notFound': 'Agent not found.', - 'settings.agents.editor.modelInherit': 'Inherit (platform default)', - 'settings.agents.editor.modelHints': 'Route hints', - 'settings.agents.editor.modelTiers': 'Model tiers', - 'settings.agents.editor.modelCustom': 'Custom model id…', - 'settings.agents.editor.modelCustomPlaceholder': 'e.g. anthropic/claude-sonnet-4', - 'settings.agents.editor.selectTools': 'Add tools', - 'settings.agents.editor.toolsAllSelected': 'All tools', - 'settings.agents.editor.toolsNoneSelected': 'No tools selected', - 'settings.agents.editor.removeToolAria': 'Remove {tool}', - 'settings.agents.editor.toolsModalTitle': 'Allowed tools', - 'settings.agents.editor.toolsSelectedCount': '{count} selected', - 'settings.agents.editor.toolsSearchPlaceholder': 'Search tools…', - 'settings.agents.editor.toolsAllowAll': 'Allow all tools (*)', - 'settings.agents.editor.toolsAllowAllHint': 'This agent can use every available tool.', - 'settings.agents.editor.toolsLoading': 'Loading tools…', - 'settings.agents.editor.toolsLoadError': 'Couldn’t load tools', - 'settings.agents.editor.toolsEmpty': 'No tools match your search.', - 'settings.agents.editor.toolsDone': 'Done', - 'settings.agents.editor.builtInReadonly': - 'Built-in agents can’t be edited. You can enable, disable, or reset them from the agents list.', -}; - -export default de2; diff --git a/app/src/lib/i18n/chunks/de-3.ts b/app/src/lib/i18n/chunks/de-3.ts deleted file mode 100644 index e70573bc9..000000000 --- a/app/src/lib/i18n/chunks/de-3.ts +++ /dev/null @@ -1,514 +0,0 @@ -import type { TranslationMap } from '../types'; - -// German (Deutsch) translations. Each chunk maps to chunks/en-3.ts. -const de3: TranslationMap = { - 'insights.other': 'Andere', - 'insights.title': 'Einblicke', - 'insights.empty': - 'Noch keine Erkenntnisse. Erkenntnisse werden generiert, wenn dein Gedächtnis wächst.', - 'insights.description': 'Basierend auf {count} Beziehungen in deinem Speicherdiagramm.', - 'insights.items': 'Artikel', - 'insights.more': 'mehr', - 'calls.joiningCall': 'Beitrittsgespräch', - 'calls.meetWindowOpening': 'Das Meet-Fenster wird geöffnet...', - 'calls.failedToStart': 'Der Meet-Anruf konnte nicht gestartet werden', - 'calls.couldNotStart': 'Anruf konnte nicht gestartet werden', - 'calls.failedToClose': 'Anruf konnte nicht geschlossen werden', - 'calls.couldNotClose': 'Anruf konnte nicht geschlossen werden', - 'calls.joinMeet': 'Nimm an einem Google Meet-Anruf teil', - 'calls.joinMeetDescription': 'Gib einen Google Meet-Link ein, um beizutreten.', - 'calls.meetLink': 'Meet-Link', - 'calls.displayName': 'Anzeigename', - 'calls.openingMeet': 'Meet wird geöffnet...', - 'calls.joinCall': 'Nimm am Anruf teil', - 'calls.activeCalls': 'Aktive Anrufe', - 'calls.leave': 'Verlassen', - 'workspace.wipeConfirm': - 'Bist du sicher, dass du den gesamten Speicher löschen möchtest? Dies kann nicht rückgängig gemacht werden.', - 'workspace.resetTreeConfirm': 'Bist du sicher, dass du den Speicherbaum neu erstellen möchtest?', - 'workspace.wipeTitle': 'Speicher löschen', - 'workspace.resetting': 'Zurücksetzen...', - 'workspace.resetMemory': 'Speicher zurücksetzen', - 'workspace.resetTreeTitle': 'Speicherbaum neu erstellen', - 'workspace.rebuilding': 'Wiederaufbau...', - 'workspace.resetMemoryTree': 'Speicherbaum zurücksetzen', - 'workspace.building': 'Wird erstellt...', - 'workspace.buildSummaryTrees': 'Erstelle Zusammenfassungsbäume', - 'workspace.viewVault': 'Vault anzeigen', - 'workspace.openingVaultTitle': 'Vault in Obsidian öffnen', - 'workspace.openingVaultMessage': - 'Falls Obsidian nicht geöffnet wird, installiere es von obsidian.md oder nutze „Ordner anzeigen“. Vault-Pfad:', - 'workspace.openVaultFailedTitle': 'Vault konnte nicht in Obsidian geöffnet werden', - 'workspace.openVaultFailedMessage': - 'Nutze „Ordner anzeigen“, um das Vault-Verzeichnis direkt zu öffnen. Vault-Pfad:', - 'workspace.revealVaultFailed': 'Vault-Ordner konnte nicht angezeigt werden', - 'workspace.revealFolder': 'Ordner anzeigen', - 'workspace.checkingVault': 'Checking…', - 'workspace.vaultNotRegisteredHelp': - 'Obsidian only opens folders you\'ve added as a vault. In Obsidian, choose "Open folder as vault" and pick the folder below — you only need to do this once. Then click View Vault again.', - 'workspace.obsidianNotFoundHelp': - "We couldn't find Obsidian on this device. Install it, or — if it's installed somewhere non-standard — set its config folder under Advanced.", - 'workspace.openAnyway': 'Open in Obsidian anyway', - 'workspace.installObsidian': 'Install Obsidian', - 'workspace.obsidianAdvanced': 'Obsidian installed elsewhere?', - 'workspace.obsidianConfigDirLabel': 'Obsidian config folder', - 'workspace.obsidianConfigDirHint': - 'Path to the folder containing obsidian.json (e.g. ~/.config/obsidian). Leave blank to auto-detect.', - 'workspace.obsidianConfigDirPlaceholder': '~/.config/obsidian', - 'workspace.graphLoadFailed': 'Speicherdiagramm konnte nicht geladen werden', - 'workspace.loadingGraph': 'Speicherdiagramm wird geladen...', - 'workspace.graphViewMode': 'Speicherdiagramm-Ansichtsmodus', - 'workspace.trees': 'Bäume', - 'workspace.contacts': 'Kontakte', - 'graph.noContactMentions': 'Keine Kontakterwähnungen', - 'graph.noMemory': 'Keine Erinnerung', - 'graph.source': 'Quelle', - 'graph.topic': 'Thema', - 'graph.global': 'Global', - 'graph.document': 'Dokument', - 'graph.contact': 'Kontakt', - 'graph.nodes': 'Knoten', - 'graph.parentChild': 'Eltern-Kind', - 'graph.documentContact': 'Dokumentenkontakt', - 'graph.link': 'Link', - 'graph.links': 'Links', - 'graph.children': 'Kinder', - 'graph.clickToOpenObsidian': 'Klicke hier, um in Obsidian zu öffnen', - 'graph.person': 'Person', - 'modal.dontShowAgain': 'Ähnliche Vorschläge nicht anzeigen', - 'reflections.loading': 'Reflexionen werden geladen...', - 'reflections.empty': 'Noch keine Überlegungen', - 'reflections.title': 'Reflexionen', - 'reflections.proposedAction': 'Vorgeschlagene Aktion', - 'reflections.act': 'Handeln', - 'reflections.dismiss': 'Entlassen', - 'whatsapp.chatsSynced': 'Chats synchronisiert', - 'whatsapp.chatSynced': 'Chat synchronisiert', - 'sync.active': 'Aktiv', - 'sync.recent': 'Neu', - 'sync.idle': 'Leerlauf', - 'sync.memorySources': 'Speicherquellen', - 'sync.noConnectedSources': 'Keine angeschlossenen Quellen', - 'sync.chunks': 'Brocken', - 'sync.lastChunk': 'Letzter Teil:', - 'sync.pending': 'ausstehend', - 'sync.processed': 'verarbeitet', - 'sync.syncing': 'Synchronisierung…', - 'sync.sync': 'Synchronisieren', - 'sync.failedToLoad': 'Der Synchronisierungsstatus konnte nicht geladen werden', - 'sync.noContent': - 'Es wurden noch keine Inhalte in den Speicher synchronisiert. Verbinde eine Integration, um zu beginnen.', - 'memorySources.title': 'Memory Sources', - 'memorySources.empty': 'No memory sources yet. Add one to start feeding memory.', - 'memorySources.loadingConnections': 'Loading connections…', - 'memorySources.noConnections': - 'No active Composio connections found. Connect an integration first.', - 'memorySources.pickConnection': 'Pick a connection', - 'memorySources.selectConnection': '— Select a connection —', - 'memorySources.composioListFailed': 'Failed to load Composio connections.', - 'memorySources.browse': 'Browse…', - 'memorySources.folderPathPlaceholder': '/Users/you/notes', - 'memorySources.globPatternPlaceholder': '**/*.md', - 'memorySources.repoUrlPlaceholder': 'https://github.com/org/repo', - 'memorySources.branchPlaceholder': 'main', - 'memorySources.feedUrlPlaceholder': 'https://example.com/feed.xml', - 'memorySources.pageUrlPlaceholder': 'https://example.com/article', - 'memorySources.cssSelectorPlaceholder': 'article', - 'memorySources.searchQueryPlaceholder': 'from:user AI safety', - 'memorySources.kind.composio': 'Integration', - 'memorySources.kind.folder': 'Local Folder', - 'memorySources.kind.github_repo': 'GitHub Repo', - 'memorySources.kind.twitter_query': 'Twitter Search', - 'memorySources.kind.rss_feed': 'RSS Feed', - 'memorySources.kind.web_page': 'Web Page', - 'memorySources.sync.successTitle': 'Syncing', - 'memorySources.sync.successMessage': 'Progress will appear shortly.', - 'memorySources.sync.failedTitle': 'Sync failed:', - 'time.justNow': 'just now', - 'time.secondsAgoSuffix': 's ago', - 'time.minutesAgoSuffix': 'm ago', - 'time.hoursAgoSuffix': 'h ago', - 'time.daysAgoSuffix': 'd ago', - 'memorySources.customSources': 'Custom Sources', - 'memorySources.addSource': 'Add Source', - 'memorySources.noCustomSources': - 'No custom sources yet. Add a folder, GitHub repo, RSS feed, or web page to start.', - 'memorySources.pickKind': 'What kind of source do you want to add?', - 'memorySources.backToKinds': 'Back to source types', - 'memorySources.label': 'Label', - 'memorySources.labelPlaceholder': 'My research notes', - 'memorySources.add': 'Add', - 'memorySources.adding': 'Adding…', - 'memorySources.added': 'Source added', - 'memorySources.removed': 'Source removed', - 'memorySources.remove': 'Remove', - 'memorySources.enable': 'Enable', - 'memorySources.disable': 'Disable', - 'memorySources.toggleFailed': 'Toggle failed', - 'memorySources.removeFailed': 'Remove failed', - 'memorySources.folderPath': 'Folder path', - 'memorySources.globPattern': 'Glob pattern', - 'memorySources.repoUrl': 'Repository URL', - 'memorySources.branch': 'Branch', - 'memorySources.feedUrl': 'Feed URL', - 'memorySources.pageUrl': 'Page URL', - 'memorySources.cssSelector': 'CSS selector (optional)', - 'memorySources.searchQuery': 'Search query', - 'backend.aiBackend': 'KI-Backend', - 'backend.cloud': 'Wolke', - 'backend.recommended': 'Empfohlen', - 'backend.cloudDescription': - 'Schnelle, leistungsstarke Modelle, die auf unseren Servern gehostet werden. Sofort einsatzbereit.', - 'backend.privacyNote': - 'Es werden niemals personenbezogene Daten, Nachrichten oder Schlüssel an unsere Server gesendet.', - 'backend.local': 'Lokal', - 'backend.advanced': 'Fortgeschritten', - 'backend.localDescription': - 'Führe Modelle auf deinem eigenen Computer mit Ollama aus. Vollständige Privatsphäre, erfordert eine Einrichtung.', - 'backend.ramRecommended': '16 GB+ RAM empfohlen', - 'subconscious.tasks': 'Aufgaben', - 'subconscious.ticks': 'Zecken', - 'subconscious.last': 'Zuletzt', - 'subconscious.failed': 'gescheitert', - 'subconscious.tickInterval': 'Tick-Intervall', - 'subconscious.runNow': 'Jetzt ausführen', - 'subconscious.providerUnavailableTitle': 'Unterbewusstsein ist pausiert', - 'subconscious.providerSettings': 'KI-Einstellungen', - 'subconscious.approvalNeeded': 'Genehmigung erforderlich', - 'subconscious.requiresApproval': 'Erfordert eine Genehmigung', - 'subconscious.fixInConnections': 'Fix in Verbindungen', - 'subconscious.goAhead': 'Mach weiter', - 'subconscious.activeTasks': 'Aktive Aufgaben', - 'subconscious.noActiveTasks': 'Keine aktiven Aufgaben', - 'subconscious.default': 'Standard', - 'subconscious.addTaskPlaceholder': 'Eine neue Aufgabe hinzufügen...', - 'subconscious.activityLog': 'Aktivitätsprotokoll', - 'subconscious.noActivity': 'Noch keine Aktivität', - 'subconscious.decision.nothingNew': 'Nichts Neues', - 'subconscious.decision.completed': 'Abgeschlossen', - 'subconscious.decision.evaluating': 'Bewerten', - 'subconscious.decision.waitingApproval': 'Warten auf Genehmigung', - 'subconscious.decision.failed': 'Fehlgeschlagen', - 'subconscious.decision.cancelled': 'Abgesagt', - 'subconscious.decision.skipped': 'Übersprungen', - 'actionable.complete': 'Komplett', - 'actionable.dismiss': 'Entlassen', - 'actionable.snooze': 'Schlummern', - 'actionable.new': 'Neu', - 'stats.storage': 'Lagerung', - 'stats.files': 'Dateien', - 'stats.documents': 'Dokumente', - 'stats.today': 'heute', - 'stats.namespaces': 'Namensräume', - 'stats.relations': 'Beziehungen', - 'stats.firstMemory': 'Erste Erinnerung', - 'stats.latest': 'Neueste', - 'stats.sessions': 'Sitzungen', - 'stats.tokens': 'Token', - 'bootCheck.invalidUrl': 'Bitte gib eine Laufzeit URL ein.', - 'bootCheck.urlMustStartWith': 'Der URL muss mit http:// oder https:// beginnen.', - 'bootCheck.validUrlRequired': - 'Das sieht nicht nach einem gültigen URL aus (versuche es mit https://core.example.com/rpc)', - 'bootCheck.tokenRequired': 'Für die Verbindung benötigen wir ein Authentifizierungstoken.', - 'bootCheck.chooseCoreMode': 'Wähle eine Laufzeit aus', - 'bootCheck.connectToCore': 'Stelle eine Verbindung zu deiner Laufzeit her', - 'bootCheck.desktopDescription': - 'OpenHuman benötigt eine Laufzeit zum Nachdenken. Wähle, wo es leben soll.', - 'bootCheck.webDescription': - 'Im Web stellt OpenHuman eine Verbindung zu einer von dir gesteuerten Laufzeit her. Gib unten den URL und das Authentifizierungstoken ein oder greife auf die Desktop-App zu, um eine direkt auf deinem Computer auszuführen.', - 'bootCheck.preferDesktop': 'Möchtest du lieber alles auf deinem eigenen Gerät behalten?', - 'bootCheck.downloadDesktop': 'Hol dir die Desktop-App', - 'bootCheck.localRecommended': 'Lokal ausführen (empfohlen)', - 'bootCheck.localDescription': - 'Läuft direkt hier auf deinem Computer. Am schnellsten, völlig privat, nichts einzurichten.', - 'bootCheck.cloudMode': 'In der Cloud ausführen (komplex)', - 'bootCheck.cloudDescription': - 'Stelle eine Verbindung zu einer Laufzeit her, die du woanders hostest. Die Laufzeit bleibt rund um die Uhr online, sodass du dieses Gerät nicht laufen lassen musst.', - 'bootCheck.coreRpcUrl': 'Laufzeit URL', - 'bootCheck.rpcUrlPlaceholder': 'https://core.example.com/rpc', - 'bootCheck.authToken': 'Authentifizierungstoken', - 'bootCheck.bearerTokenPlaceholder': 'Das Bearer-Token von deiner Remote-Laufzeit', - 'bootCheck.storedLocally': 'Wird nur auf diesem Gerät gespeichert. Gesendet als ', - 'bootCheck.testing': 'Testen…', - 'bootCheck.testConnection': 'Testverbindung', - 'bootCheck.connectedOk': 'Verbunden. Es kann losgehen.', - 'bootCheck.authFailed': - 'Dieser Token hat nicht funktioniert. Prüfe ihn noch einmal und versuche es erneut.', - 'bootCheck.unreachablePrefix': 'Konnte es nicht erreichen:', - 'bootCheck.checkingCore': 'Deine Laufzeit wird aufgeweckt ...', - 'bootCheck.cannotReach': 'Die Laufzeit kann nicht erreicht werden', - 'bootCheck.cannotReachDesc': - 'Wir konnten keine Verbindung zu deiner Laufzeit herstellen. Möchtest du etwas anderes ausprobieren?', - 'bootCheck.switchMode': 'Wähle eine andere Laufzeit', - 'bootCheck.quit': 'Beenden', - 'bootCheck.legacyDetected': 'Legacy-Hintergrundlaufzeit erkannt', - 'bootCheck.legacyDescription': - 'Auf diesem Gerät läuft bereits ein separat installierter OpenHuman-Daemon. Wir müssen es bereinigen, bevor die integrierte Laufzeit übernehmen kann.', - 'bootCheck.removing': 'Entfernen…', - 'bootCheck.removeContinue': 'Entfernen und fortfahren', - 'bootCheck.localNeedsRestart': 'Die lokale Laufzeit erfordert einen Neustart', - 'bootCheck.localNeedsRestartDesc': - 'Deine lokale Laufzeit hat eine andere Version als diese App. Durch einen schnellen Neustart werden sie wieder synchronisiert.', - 'bootCheck.restarting': 'Neustart...', - 'bootCheck.restartCore': 'Starte die Runtime neu', - 'bootCheck.cloudNeedsUpdate': 'Cloud Runtime benötigt ein Update', - 'bootCheck.cloudNeedsUpdateDesc': - 'Deine Cloud-Laufzeitumgebung hat eine andere Version als diese App. Führe den Updater aus, um sie wieder zu synchronisieren.', - 'bootCheck.updating': 'Aktualisierung…', - 'bootCheck.updateCloudCore': 'Aktualisiere Cloud Runtime', - 'bootCheck.versionCheckFailed': 'Laufzeitversionsprüfung fehlgeschlagen', - 'bootCheck.versionCheckFailedDesc': - 'Deine Laufzeit ist aktiv, meldet jedoch nicht ihre Version. Möglicherweise ist es veraltet. Starte es neu oder aktualisiere es, um fortzufahren.', - 'bootCheck.working': 'Arbeiten…', - 'bootCheck.restartUpdateCore': 'Runtime neu starten/aktualisieren', - 'bootCheck.unexpectedError': 'Unerwarteter Boot-Check-Fehler', - 'bootCheck.actionFailed': 'Etwas ist schief gelaufen. Bitte versuche es erneut.', - 'bootCheck.portConflictTitle': 'App-Engine konnte nicht gestartet werden', - 'bootCheck.portConflictBody': - 'Ein anderer Prozess nutzt den Netzwerkport, den OpenHuman benötigt. Wir versuchen, das automatisch zu beheben.', - 'bootCheck.portConflictFixButton': 'Automatisch beheben', - 'bootCheck.portConflictFixing': 'Wird behoben…', - 'bootCheck.portConflictFixFailed': - 'Automatische Behebung fehlgeschlagen. Bitte starten Sie Ihren Computer neu und versuchen Sie es erneut.', - 'notifications.justNow': 'gerade jetzt', - 'notifications.minAgo': 'Vor {n}m', - 'notifications.hrAgo': 'Vor {n}h', - 'notifications.dayAgo': 'Vor {n}d', - 'notifications.category.messages': 'Nachrichten', - 'notifications.category.agents': 'Agenten', - 'notifications.category.skills': 'Fähigkeiten', - 'notifications.category.system': 'System', - 'notifications.category.meetings': 'Treffen', - 'notifications.category.reminders': 'Erinnerungen', - 'notifications.category.important': 'Wichtig', - 'about.update.status.checking': 'Überprüfen...', - 'about.update.status.available': 'v{version} verfügbar', - 'about.update.status.availableNoVersion': 'Update verfügbar', - 'about.update.status.downloading': 'Herunterladen...', - 'about.update.status.readyToInstall': 'v{version} bereit zur Installation', - 'about.update.status.readyToInstallNoVersion': - 'Eine neue Version ist heruntergeladen und bereit. Starte neu, um das Update anzuwenden.', - 'about.update.status.installing': 'Installieren...', - 'about.update.status.restarting': 'Neustart...', - 'about.update.status.upToDate': 'Du verwendest die neueste Version.', - 'about.update.status.error': 'Die Aktualisierungsprüfung ist fehlgeschlagen', - 'about.update.status.default': 'Nach Updates suchen', - 'welcome.connectionFailed': 'Verbindung fehlgeschlagen: {status} {statusText}', - 'welcome.connectionFailedMsg': 'Verbindung fehlgeschlagen: {message}', - 'chat.agentChatDesc': 'Öffne eine direkte Chat-Sitzung mit dem Agenten.', - 'channels.activeRouteValue': '{channel} über {authMode}', - 'privacy.dataKind.messages': 'Nachrichten', - 'privacy.dataKind.agents': 'Agenten', - 'privacy.dataKind.skills': 'Fähigkeiten', - 'privacy.dataKind.system': 'System', - 'privacy.dataKind.meetings': 'Treffen', - 'privacy.dataKind.reminders': 'Erinnerungen', - 'privacy.dataKind.important': 'Wichtig', - 'onboarding.enableLocalAI': 'Aktiviere lokale KI', - 'onboarding.skills.status.available': 'Verfügbar', - 'onboarding.skills.status.connected': 'Verbunden', - 'onboarding.skills.status.connecting': 'Verbinden', - 'onboarding.skills.status.error': 'Fehler', - 'onboarding.skills.status.unavailable': 'Nicht verfügbar', - 'composio.statusUnavailable': 'Status nicht verfügbar', - 'composio.envVarOverrides': 'festgelegt ist, überschreibt es diese Einstellung.', - 'memory.day.sun': 'Sonne', - 'memory.day.mon': 'Mo', - 'memory.day.tue': 'Di', - 'memory.day.wed': 'Mi', - 'memory.day.thu': 'Do', - 'memory.day.fri': 'Fr', - 'memory.day.sat': 'Sa', - 'memory.ingesting': 'Einnahme', - 'memory.ingestionQueued': 'In der Warteschlange', - 'memory.ingestingTitle': 'Einnahme von {title}', - 'mic.noAudioCaptured': 'Kein Ton aufgenommen', - 'mic.noSpeechDetected': 'Keine Sprache erkannt', - 'mic.lowConfidenceResult': 'Audio konnte nicht klar verstanden werden — bitte erneut versuchen', - 'mic.failedToStopRecording': 'Aufzeichnung konnte nicht gestoppt werden: {message}', - 'mic.transcriptionFailed': 'Transkription fehlgeschlagen: {message}', - 'reflections.kind.retrospective': 'Retrospektive', - 'reflections.kind.derivedFact': 'Abgeleitete Tatsache', - 'reflections.kind.moodInsight': 'Stimmungseinsicht', - 'reflections.kind.relationshipInsight': 'Beziehungseinblick', - 'graph.tooltip.summary': 'Zusammenfassung', - 'graph.tooltip.contact': 'Kontakt', - 'localModel.usage.never': 'Niemals', - 'localModel.usage.mediumLoad': 'Mittlere Belastung', - 'localModel.usage.lowLoad': 'Geringe Belastung', - 'localModel.usage.idleMode': 'Leerlaufmodus', - 'localModel.rebootstrapComplete': 'Modell-Re-Bootstrap abgeschlossen.', - 'localModel.modelsVerified': 'Lokale Modelle verifiziert.', - 'accounts.addModal.allConnected': 'Alles verbunden', - 'accounts.addModal.title': 'Konto hinzufügen', - 'accounts.respondQueue.empty': 'Leer', - 'accounts.respondQueue.hide': 'Antwortwarteschlange ausblenden', - 'accounts.respondQueue.loadFailed': 'Antwortwarteschlange konnte nicht geladen werden', - 'accounts.respondQueue.loading': 'Warteschlange wird geladen…', - 'accounts.respondQueue.pending': 'Ausstehend', - 'accounts.respondQueue.show': 'Antwortwarteschlange anzeigen', - 'accounts.respondQueue.title': 'Antwortwarteschlange', - 'accounts.webviewHost.almostReady': 'Fast fertig...', - 'accounts.webviewHost.loadTimeout': 'Zeitüberschreitung beim Laden der Webansicht', - 'accounts.webviewHost.loading': 'Laden {providerName}...', - 'accounts.webviewHost.loadingAccount': 'Konto wird geladen', - 'accounts.webviewHost.restoringSession': 'Sitzung wird wiederhergestellt...', - 'accounts.webviewHost.retryLoading': 'Versuche den Ladevorgang erneut', - 'accounts.webviewHost.takingLonger': '{providerName} dauert länger als erwartet.', - 'accounts.webviewHost.timeoutHint': 'Timeout-Hinweis', - 'app.connectionBadge.composio': 'Composio', - 'app.connectionBadge.messaging': 'Nachrichten', - 'app.connectionIndicator.connected': 'Verbunden mit OpenHuman AI 🚀', - 'app.connectionIndicator.connecting': 'Verbinden', - 'app.connectionIndicator.coreOffline': 'Kern offline', - 'app.connectionIndicator.disconnected': 'Nicht verbunden', - 'app.connectionIndicator.offline': 'Offline', - 'app.connectionIndicator.reconnecting': 'Wieder verbinden…', - 'app.errorFallback.componentStack': 'Komponentenstapel', - 'app.errorFallback.downloadLatest': 'Neueste herunterladen', - 'app.errorFallback.heading': 'Überschrift', - 'app.errorFallback.hint': 'Hinweis', - 'app.errorFallback.reloadApp': 'App neu laden', - 'app.errorFallback.subheading': 'Unterüberschrift', - 'app.errorFallback.tryRecover': 'Versuche es mit einer Wiederherstellung', - 'app.localAiDownload.installing': 'Installieren...', - 'app.localAiDownload.preparing': 'Vorbereiten...', - 'app.openhumanLink.accounts.continueWith': 'Fahre mit der Anmeldung bei {label} fort', - 'app.openhumanLink.accounts.done': 'Fertig', - 'app.openhumanLink.accounts.intro': 'Einführung', - 'app.openhumanLink.accounts.webviewNote': 'Webview-Hinweis', - 'app.openhumanLink.billing.openDashboard': 'Dashboard öffnen', - 'app.openhumanLink.billing.stayOnTrial': 'In der Testversion bleiben', - 'app.openhumanLink.billing.trialCredit': 'Probeguthaben', - 'app.openhumanLink.billing.trialDesc': 'Testbeschreibung', - 'app.openhumanLink.defaultBody': - 'Im Popup noch nicht fertig. Öffne bei Bedarf die vollständige Einstellungsseite.', - 'app.openhumanLink.discord.intro': 'Einführung', - 'app.openhumanLink.discord.openInvite': 'Einladung öffnen', - 'app.openhumanLink.discord.perk1': 'Vorteil1', - 'app.openhumanLink.discord.perk2': 'Vorteil2', - 'app.openhumanLink.discord.perk3': 'Vorteil3', - 'app.openhumanLink.discord.perk4': 'Vorteil4', - 'app.openhumanLink.done': 'Fertig', - 'app.openhumanLink.loadingChannelSetup': 'Kanal-Setup wird geladen', - 'app.openhumanLink.maybeLater': 'Vielleicht später', - 'app.openhumanLink.notifications.asking': 'Frag dein Betriebssystem ...', - 'app.openhumanLink.notifications.blocked': 'Blockiert', - 'app.openhumanLink.notifications.blockedStep1': 'Schritt 1 blockiert', - 'app.openhumanLink.notifications.blockedStep2': 'Schritt 2 blockiert', - 'app.openhumanLink.notifications.blockedStep3': 'Schritt 3 blockiert', - 'app.openhumanLink.notifications.intro': 'Einführung', - 'app.openhumanLink.notifications.promptHint': 'Prompter Hinweis', - 'app.openhumanLink.notifications.retry': 'Benachrichtigung zum erneuten Testversuch', - 'app.openhumanLink.notifications.send': 'Testbenachrichtigung senden', - 'app.openhumanLink.notifications.sendFailed': 'Konnte nicht gesendet werden: {error}', - 'app.openhumanLink.notifications.sent': - 'Testbenachrichtigung gesendet. Wenn du sie nicht erhalten hast, gehe zu Systemeinstellungen → Benachrichtigungen → OpenHuman, aktiviere „Benachrichtigungen zulassen“ und stelle den Bannerstil auf „Persistent“ ein.', - 'app.openhumanLink.skipForNow': 'Erstmal überspringen', - 'app.openhumanLink.telegramUnavailable': 'Telegram nicht verfügbar', - 'app.openhumanLink.title.accounts': 'Verbinde deine Apps', - 'app.openhumanLink.title.billing': 'Abrechnung und Gutschriften', - 'app.openhumanLink.title.discord': 'Tritt der Community bei', - 'app.openhumanLink.title.messaging': 'Verbinde einen Chat-Kanal', - 'app.openhumanLink.title.notifications': 'Benachrichtigungen zulassen', - 'app.persistRehydration.body': 'Körper', - 'app.persistRehydration.heading': 'Überschrift', - 'app.persistRehydration.resetCta': 'Zurücksetzen…', - 'app.persistRehydration.resetting': 'Zurücksetzen…', - 'app.routeLoading.initializing': 'OpenHuman wird initialisiert...', - 'app.update.currentlyOn': '{version}', - 'app.update.errorFallback': 'Beim Update ist ein Fehler aufgetreten.', - 'app.update.header.default': 'Aktualisieren', - 'app.update.header.error': 'Update fehlgeschlagen', - 'app.update.header.installing': 'Update installieren', - 'app.update.header.readyToInstall': 'Update zur Installation bereit', - 'app.update.header.restarting': 'Neustart...', - 'app.update.later': 'Später', - 'app.update.newVersionReady': 'Eine neue Version ist zur Installation bereit.', - 'app.update.progress.downloaded': '{amount} heruntergeladen', - 'app.update.progress.installing': 'Installation der neuen Version…', - 'app.update.progress.restarting': 'Neustart der App…', - 'app.update.progress.working': '{percent}%', - 'app.update.restartNote': 'Hinweis zum Neustart', - 'app.update.restartNow': 'Starte jetzt neu', - 'app.update.versionReady': 'Version {newVersion} ist zur Installation bereit.', - 'channels.discord.accountLinked': 'Konto verknüpft', - 'channels.discord.connect': 'Verbinden', - 'channels.discord.linkTokenExpired': 'Link-Token abgelaufen. Bitte versuche es erneut.', - 'channels.discord.linkTokenInstruction': '{token}', - 'channels.discord.linkTokenLabel': 'Link-Token-Label', - 'channels.discord.linkTokenOnce': 'Link-Token einmal', - 'channels.discord.picker.allPermissionsOk': - 'Bot verfügt über alle erforderlichen Berechtigungen in diesem Kanal.', - 'channels.discord.picker.botNotInServers': 'Bot nicht auf Servern', - 'channels.discord.picker.category': 'Kategorie', - 'channels.discord.picker.channel': 'Kanal', - 'channels.discord.picker.checkingPermissions': 'Berechtigungen prüfen', - 'channels.discord.picker.loadingChannels': 'Lade Kanäle...', - 'channels.discord.picker.loadingServers': 'Server werden geladen...', - 'channels.discord.picker.missingPermissions': 'Fehlende Berechtigungen', - 'channels.discord.picker.noChannels': 'Keine Textkanäle gefunden', - 'channels.discord.picker.noServers': 'Keine Server gefunden', - 'channels.discord.picker.selectChannel': 'Wähle einen Kanal aus', - 'channels.discord.picker.selectServer': 'Wähle einen Server aus', - 'channels.discord.picker.server': 'Server', - 'channels.discord.picker.serverChannelSelection': 'Server- und Kanalauswahl', - 'channels.discord.savedRestartRequired': - 'Kanal gespeichert. Starte die App neu, um sie zu aktivieren.', - 'channels.telegram.connect': 'Verbinden', - 'channels.telegram.managedDmConnecting': 'Verwaltete DM-Verbindung', - 'channels.telegram.managedDmTimeout': 'DM-Timeout verwaltet', - 'channels.telegram.reconnect': 'Wieder verbinden', - 'channels.telegram.savedRestartRequired': - 'Kanal gespeichert. Starte die App neu, um sie zu aktivieren.', - 'channels.web.alwaysAvailable': 'Immer verfügbar', - 'channels.discord.displayName': 'Discord', - 'channels.discord.description': 'Sende und empfange Nachrichten über Discord.', - 'channels.discord.authMode.bot_token.description': 'Gib deinen eigenen Discord-Bot-Token an.', - 'channels.discord.authMode.oauth.description': - 'Installiere den OpenHuman-Bot über OAuth auf deinem Discord-Server.', - 'channels.discord.authMode.managed_dm.description': - 'Verknüpfe dein persönliches Discord-Konto mit dem OpenHuman-Bot.', - 'channels.discord.fields.bot_token.label': 'Bot-Token', - 'channels.discord.fields.bot_token.placeholder': 'Dein Discord-Bot-Token', - 'channels.discord.fields.guild_id.label': 'Server- (Guild-) ID', - 'channels.discord.fields.guild_id.placeholder': - 'Optional: Auf einen bestimmten Server beschränken', - 'channels.telegram.displayName': 'Telegram', - 'channels.telegram.description': 'Sende und empfange Nachrichten über Telegram.', - 'channels.telegram.authMode.managed_dm.description': - 'Schreibe dem OpenHuman-Telegram-Bot direkt.', - 'channels.telegram.authMode.bot_token.description': - 'Gib deinen eigenen Telegram-Bot-Token von @BotFather an.', - 'channels.telegram.fields.bot_token.label': 'Bot-Token', - 'channels.telegram.fields.bot_token.placeholder': '123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11', - 'channels.telegram.fields.allowed_users.label': 'Erlaubte Benutzer', - 'channels.telegram.fields.allowed_users.placeholder': - 'Durch Kommas getrennte Telegram-Benutzernamen', - 'channels.web.displayName': 'Web', - 'channels.web.description': 'Chatte über die integrierte Web-Oberfläche.', - 'channels.web.authMode.managed_dm.description': - 'Nutze den eingebetteten Web-Chat — keine Einrichtung erforderlich.', - 'welcome.continueLocally': 'Lokal fortfahren', - 'welcome.continueLocallyExperimental': 'Lokal fortfahren (experimentell)', - 'welcome.localSessionStarting': 'Lokal starten Sitzung...', - 'welcome.localSessionDesc': - 'Verwendet ein lokales Offline-Profil und überspringt TinyHumans OAuth.', - 'channels.yuanbao.connect': 'Connect', - 'channels.yuanbao.connecting': 'Connecting…', - 'channels.yuanbao.fieldRequired': '{field} is required', - 'channels.yuanbao.reconnect': 'Reconnect', - 'channels.yuanbao.savedRestartRequired': 'Channel saved. Restart the app to activate it.', - 'channels.yuanbao.unexpectedStatus': 'Unexpected connection status: {status}', - 'chat.approval.approve': 'Approve', - 'chat.approval.alwaysAllow': 'Always allow', - 'chat.approval.alwaysAllowHint': 'Stop asking for this tool — add it to your Always-allow list', - 'chat.approval.deciding': 'Working…', - 'chat.approval.deny': 'Deny', - 'chat.approval.error': 'Could not record your decision — try again.', - 'chat.approval.fallback': 'The agent wants to run an action that needs your approval.', - 'chat.approval.title': 'Approval needed', - 'chat.approval.tool': 'Tool:', -}; - -export default de3; diff --git a/app/src/lib/i18n/chunks/de-4.ts b/app/src/lib/i18n/chunks/de-4.ts deleted file mode 100644 index 781cdfa61..000000000 --- a/app/src/lib/i18n/chunks/de-4.ts +++ /dev/null @@ -1,494 +0,0 @@ -import type { TranslationMap } from '../types'; - -// German (Deutsch) translations. Each chunk maps to chunks/en-4.ts. -const de4: TranslationMap = { - 'chat.unsubscribeApproval.approve': 'Genehmigen und abbestellen', - 'chat.unsubscribeApproval.approved': '✓ Erfolgreich abgemeldet.', - 'chat.unsubscribeApproval.denied': '✕Anfrage abgelehnt.', - 'chat.unsubscribeApproval.deny': 'Leugnen', - 'chat.unsubscribeApproval.processing': 'Verarbeitung...', - 'chat.unsubscribeApproval.title': 'Abmeldeanfrage', - 'commandPalette.ariaLabel': 'Befehlspalette', - 'commandPalette.description': 'Beschreibung', - 'commandPalette.label': 'Befehle', - 'commandPalette.noResults': 'Keine Ergebnisse', - 'commandPalette.placeholder': 'Gib einen Befehl ein oder suche ...', - 'commandPalette.searchAria': 'Suchbefehle', - 'commandPalette.shortcutHint': 'Drücke ? für alle Verknüpfungen', - 'commandPalette.title': 'Befehlspalette', - 'composio.connect.additionalConfigRequired': 'Zusätzliche Konfiguration erforderlich', - 'composio.connect.atlassianSubdomainHint': 'acme', - 'composio.connect.atlassianSubdomainLabel': 'Atlassian-Subdomain-Label', - 'composio.connect.connect': 'Verbinden', - 'composio.connect.connectionFailed': 'Verbindung fehlgeschlagen (Status: {status}).', - 'composio.connect.disconnectFailed': 'Verbindungstrennung fehlgeschlagen: {msg}', - 'composio.connect.disconnecting': 'Verbindung trennen…', - 'composio.connect.idleDescription': 'Verbinde deine', - 'composio.connect.idleDescriptionSuffix': - 'Konto. Wir öffnen ein Browserfenster, du genehmigst dort den Zugriff und diese App erkennt die Verbindung automatisch.', - 'composio.connect.isConnected': 'verbunden ist.', - 'composio.connect.manage': 'Verwalten', - 'composio.connect.needsSubdomain': 'Zum Verbinden', - 'composio.connect.needsSubdomainSuffix': - 'Gib deine Atlassian-Subdomain ein (z. B. acme für acme.atlassian.net) und versuche es erneut.', - 'composio.connect.oauthComplete': 'OAuth zum Abschließen…', - 'composio.connect.oauthTimeout': 'OAuth-Zeitüberschreitung', - 'composio.connect.permissions': 'Berechtigungen', - 'composio.connect.permissionsDefault': 'Lesen + Schreiben ist standardmäßig aktiviert', - 'composio.connect.permissionsNote': 'entlarven kann', - 'composio.connect.permissionsNoteSuffix': - 'Die eigenen Agentenberechtigungen von OpenHuman werden unten als Lese-, Schreib- und Admin-Umschaltung gesteuert.', - 'composio.connect.reopenBrowser': 'Browser erneut öffnen', - 'composio.connect.requestingUrl': 'Verbindung wird angefordert URL…', - 'composio.connect.retryConnection': 'Verbindung erneut versuchen', - 'composio.connect.scopeLoadError': 'Bereichseinstellungen konnten nicht geladen werden: {msg}', - 'composio.connect.scopeSaveError': 'Der Bereich {key} konnte nicht gespeichert werden: {msg}', - 'composio.connect.subdomainInvalid': - 'Gib nur die kurze Subdomain ein (z. B. „acme“), nicht die vollständige URL. Es sollte nur Buchstaben, Zahlen und Bindestriche enthalten.', - 'composio.connect.subdomainRequired': 'Bitte gib deine Atlassian-Subdomain ein, um fortzufahren.', - 'composio.connect.dynamicsOrgNameLabel': 'Name der Dynamics 365-Organisation', - 'composio.connect.dynamicsOrgNameHint': - 'Beispiel: „myorg“ für myorg.crm.dynamics.com. Gib nur den kurzen Organisationsnamen ein, nicht den vollständigen URL.', - 'composio.connect.needsFieldsPrefix': 'Zum Verbinden', - 'composio.connect.needsFieldsSuffix': - 'Wir brauchen ein bisschen mehr Informationen. Fülle die fehlenden Felder unten aus und versuche es erneut.', - 'composio.connect.requiredFieldEmpty': 'Dieses Feld ist erforderlich.', - 'composio.connect.wabaIdHint': - 'Finde es über GET /me/businesses und dann GET /{business_id}/owned_whatsapp_business_accounts mit deinem Meta-Zugriffstoken.', - 'composio.connect.wabaIdLabel': 'Waba-ID-Etikett', - 'composio.connect.wabaIdRequired': - 'Bitte gib deine WhatsApp Geschäftskonto-ID (WABA ID) ein, um fortzufahren.', - 'composio.connect.waitingFor': 'Warten auf', - 'composio.connect.waitingHint': 'Wartender Hinweis', - 'composio.triggers.heading': 'Auslöser', - 'composio.triggers.listenFrom': 'Auf Ereignisse hören von', - 'composio.triggers.loadError': 'Trigger konnten nicht geladen werden', - 'composio.triggers.needsConfiguration': 'Muss konfiguriert werden', - 'composio.triggers.noneAvailable': 'Derzeit sind keine Auslöser verfügbar für', - 'conversations.taskKanban.moveLeft': 'Bewege dich nach links', - 'conversations.taskKanban.moveRight': 'Bewege dich nach rechts', - 'conversations.taskKanban.title': 'Aufgaben', - 'conversations.toolTimeline.turn': 'drehen', - 'conversations.toolTimeline.workerThread': 'Worker-Thread', - 'daemon.serviceBlockingGate.body': 'Körper', - 'daemon.serviceBlockingGate.downloadHint': 'Hinweis herunterladen', - 'daemon.serviceBlockingGate.downloadLatest': 'Lade die neueste Version herunter', - 'daemon.serviceBlockingGate.retryCore': 'Core erneut versuchen', - 'daemon.serviceBlockingGate.retryFailed': - 'Wiederholungsversuch fehlgeschlagen. Lade den neuesten App-Build herunter und versuche es erneut.', - 'daemon.serviceBlockingGate.retrying': 'Erneuter Versuch...', - 'daemon.serviceBlockingGate.title': 'OpenHuman Kern ist nicht verfügbar', - 'home.banners.discordSubtitle': 'Discord Untertitel', - 'home.banners.discordTitle': 'Tritt unserem Discord bei', - 'home.banners.earlyBirdDismiss': 'Frühbucherbanner schließen', - 'home.banners.earlyBirdFirstSub': 'erstes Abonnement.', - 'home.banners.earlyBirdOn': 'Frühaufsteher', - 'home.banners.earlyBirdTitle': 'Die ersten 1.000 Nutzer erhalten 60 % Rabatt.', - 'home.banners.earlyBirdUseCode': 'Frühbucher-Nutzungscode', - 'home.banners.getSubscription': 'Hol dir ein Abonnement', - 'home.banners.promoCreditsBody': 'Probiere OpenHuman aus und wenn du Lust auf mehr hast,', - 'home.banners.promoCreditsTitle': 'Du hast {amount} Werbeguthaben.', - 'home.banners.promoCreditsUsage': 'und erhalte 10x mehr Nutzung.', - 'intelligence.memoryChunk.detail.chunk': 'Brocken', - 'intelligence.memoryChunk.detail.copyChunkId': 'Chunk-ID kopieren', - 'intelligence.memoryChunk.detail.embeddingInfo': 'bge-m3 1024dim', - 'intelligence.memoryChunk.detail.noEmbedding': 'Keine Einbettung', - 'intelligence.memoryChunk.letterhead.from': 'von', - 'intelligence.memoryChunk.letterhead.to': 'zu', - 'intelligence.memoryChunk.mentioned.chunkOne': '1 Stück', - 'intelligence.memoryChunk.mentioned.chunkOther': '{count} Stücke', - 'intelligence.memoryChunk.mentioned.heading': 'm e n t i o n e d', - 'intelligence.memoryChunk.scoreBars.ariaScore': '{name} erzielen einen Wert von {pct} Prozent', - 'intelligence.memoryChunk.scoreBars.atThreshold': 'um {threshold}', - 'intelligence.memoryChunk.scoreBars.dropped': 'fallen gelassen', - 'intelligence.memoryChunk.scoreBars.heading': 'Warum hast du es behalten?', - 'intelligence.memoryChunk.scoreBars.kept': 'gehalten', - 'intelligence.diagram.title': 'Architecture Diagram', - 'intelligence.diagram.description': - 'Latest local architecture output from the configured diagram endpoint.', - 'intelligence.diagram.refresh': 'Refresh', - 'intelligence.diagram.refreshAria': 'Refresh diagram', - 'intelligence.diagram.emptyTitle': 'No diagram available yet', - 'intelligence.diagram.emptyDescription': - 'Generate an architecture diagram from the orchestrator and this panel will refresh from the configured local endpoint.', - 'intelligence.diagram.skillInstallCommand': 'npx skills add yizhiyanhua-ai/fireworks-tech-graph', - 'intelligence.diagram.promptExample': - 'Generate an architecture diagram of the current swarm in dark terminal style', - 'intelligence.diagram.imageAlt': 'Latest generated OpenHuman architecture diagram', - 'intelligence.diagram.refreshesEvery': 'Refreshes every {seconds}s', - 'intelligence.memoryText.entityTypePrefix': 'Entitätstyp', - 'intelligence.screenDebug.active': 'Aktiv', - 'intelligence.screenDebug.app': 'App', - 'intelligence.screenDebug.bounds': 'Grenzen', - 'intelligence.screenDebug.captureAlt': 'Testergebnis erfassen', - 'intelligence.screenDebug.captureFailed': 'Fehlgeschlagen', - 'intelligence.screenDebug.captureSuccess': 'Erfolg', - 'intelligence.screenDebug.captureTest': 'Capture-Test', - 'intelligence.screenDebug.capturing': 'Erfassen', - 'intelligence.screenDebug.frames': 'Rahmen', - 'intelligence.screenDebug.idle': 'Leerlauf', - 'intelligence.screenDebug.lastApp': 'Letzte App', - 'intelligence.screenDebug.mode': 'Modus', - 'intelligence.screenDebug.permAccessibility': 'Zugänglichkeit aufrechterhalten', - 'intelligence.screenDebug.permInput': 'Perm-Eingabe', - 'intelligence.screenDebug.permScreen': 'Barrierefreiheit', - 'intelligence.screenDebug.permissions': 'Berechtigungen', - 'intelligence.screenDebug.platformNotSupported': 'Plattform nicht unterstützt', - 'intelligence.screenDebug.recentVisionSummaries': 'Aktuelle Visionszusammenfassungen', - 'intelligence.screenDebug.session': 'Sitzung', - 'intelligence.screenDebug.size': 'Größe', - 'intelligence.screenDebug.status': 'Status', - 'intelligence.screenDebug.testCapture': 'Testaufnahme', - 'intelligence.screenDebug.time': 'Zeit', - 'intelligence.screenDebug.title': 'Titel', - 'intelligence.screenDebug.unknown': 'Unbekannt', - 'intelligence.screenDebug.visionQueue': 'Vision-Warteschlange', - 'intelligence.screenDebug.visionState': 'Visionszustand', - 'intelligence.tasks.activeBoardOne': '1 aktives Forum für alle Gespräche', - 'intelligence.tasks.activeBoardOther': '{count} aktive Boards in allen Gesprächen', - 'intelligence.tasks.empty': 'Noch keine Agenten-Taskboards', - 'intelligence.tasks.emptyHint': 'Leerer Hinweis', - 'intelligence.tasks.failedToLoad': 'Laden fehlgeschlagen', - 'intelligence.tasks.live': 'leben', - 'intelligence.tasks.loadingBoards': 'Taskboards werden geladen…', - 'intelligence.tasks.threadPrefix': 'Thread {thread}', - 'intelligence.tasks.subtitle': 'Your tasks and agent task boards across the workspace.', - 'intelligence.tasks.newTask': 'New task', - 'intelligence.tasks.personalBoardTitle': 'Agent Tasks', - 'intelligence.tasks.personalEmpty': 'No personal tasks yet', - 'intelligence.tasks.composer.title': 'New task', - 'intelligence.tasks.composer.titleLabel': 'Title', - 'intelligence.tasks.composer.titlePlaceholder': 'What needs to be done?', - 'intelligence.tasks.composer.statusLabel': 'Status', - 'intelligence.tasks.composer.attachLabel': 'Attach to conversation', - 'intelligence.tasks.composer.attachNone': 'Personal (no conversation)', - 'intelligence.tasks.composer.objectiveLabel': 'Objective', - 'intelligence.tasks.composer.objectivePlaceholder': 'Optional — the desired outcome', - 'intelligence.tasks.composer.notesLabel': 'Notes', - 'intelligence.tasks.composer.notesPlaceholder': 'Optional notes', - 'intelligence.tasks.composer.create': 'Create task', - 'intelligence.tasks.composer.creating': 'Creating…', - 'intelligence.tasks.composer.createFailed': "Couldn't create the task", - 'notifications.card.dismiss': 'Benachrichtigung verwerfen', - 'notifications.card.importanceTitle': 'Wichtigkeit: {pct}%', - 'notifications.center.empty': 'Noch keine Benachrichtigungen', - 'notifications.center.emptyHint': 'Leerer Hinweis', - 'notifications.center.filterAll': 'Alles filtern', - 'notifications.center.markAllRead': 'Alles als gelesen markieren', - 'notifications.center.title': 'Benachrichtigungen', - 'oauth.button.loopbackTimeout': - 'Anmeldung abgelaufen — der Browser hat die OAuth-Weiterleitung nicht abgeschlossen. Bitte versuche es erneut.', - 'oauth.button.connecting': 'Verbinden...', - 'oauth.login.continueWith': 'Weiter mit', - 'onboarding.contextGathering.buildingDesc': 'Gebäudebeschreibung', - 'onboarding.contextGathering.buildingProfile': 'Erstelle dein Profil...', - 'onboarding.contextGathering.continueToChat': 'Weiter chatten', - 'onboarding.contextGathering.errorDesc': - 'Dein Chat ist fertig. Wir erstellen im Hintergrund weiterhin dein vollständiges Profil, sodass du jetzt fortfahren und es im Laufe der Zeit verfeinern kannst.', - 'onboarding.contextGathering.coreAlive': - 'Der Kern ist erreichbar – der erste Start kann eine Minute dauern.', - 'onboarding.contextGathering.coreAliveProbing': 'Kernverbindung prüfen…', - 'onboarding.contextGathering.coreUnreachable': - 'Der Kern reagiert nicht. Du kannst fortfahren und es später noch einmal versuchen.', - 'onboarding.contextGathering.stillWorkingDesc': - 'Der erste Start kann 30–60 Sekunden dauern, während wir dein lokales Modell und deine Tools aufwärmen. Du kannst jederzeit weiter chatten – die Profilerstellung läuft im Hintergrund weiter.', - 'onboarding.contextGathering.stillWorkingTitle': 'Ich arbeite immer noch an deinem Profil…', - 'onboarding.contextGathering.title': 'Kontexterfassung', - 'openhuman.team_list_teams': 'Teamlisten-Teams', - 'overlay.ariaAttention': 'Achtung-Nachricht', - 'overlay.ariaCompanion': 'Begleiter aktiv', - 'overlay.ariaOrb': 'OpenHuman-Overlay', - 'overlay.ariaVoiceActive': 'Spracheingabe aktiv', - 'overlay.companion.error': 'Fehler', - 'overlay.companion.listening': 'Zuhören…', - 'overlay.companion.pointing': 'Zeigen…', - 'overlay.companion.speaking': 'Apropos…', - 'overlay.companion.thinking': 'Denken…', - 'overlay.orbTitle': 'Zum Verschieben ziehen · Doppelklicken, um die Position zurückzusetzen', - 'pages.settings.account.connections': 'Verbindungen', - 'pages.settings.account.connectionsDesc': 'Überprüfe und verwalte verknüpfte Kontoverbindungen', - 'pages.settings.account.privacy': 'Privatsphäre', - 'pages.settings.account.privacyDesc': - 'Verwalte die Datenfreigabe und anonymisierte Nutzungspräferenzen', - 'pages.settings.account.recoveryPhrase': 'Wiederherstellungssatz', - 'pages.settings.account.recoveryPhraseDesc': - 'Verwalte deine BIP39-Wiederherstellungsphrase für Verschlüsselung und Wallet-Zugriff', - 'pages.settings.account.team': 'Team', - 'pages.settings.account.teamDesc': 'Verwalte dein Team, deine Mitglieder und Einladungen', - 'pages.settings.account.migration': 'Von einem anderen Assistenten importieren', - 'pages.settings.account.migrationDesc': - 'Migriere Speicher und Notizen von OpenClaw (oder bald Hermes) in diesen Arbeitsbereich.', - 'pages.settings.accountSection.description': - 'Wiederherstellungsphrase, Team, Verbindungen und Datenschutzeinstellungen.', - 'pages.settings.accountSection.title': 'Konto', - 'pages.settings.ai.llm': 'Llm', - 'pages.settings.ai.llmDesc': 'Llm absch', - 'pages.settings.ai.voice': 'Stimme', - 'pages.settings.ai.voiceDesc': 'Sprachbeschreibung', - 'pages.settings.ai.embeddings': 'Einbettungen', - 'pages.settings.ai.embeddingsDesc': 'Vektorkodierungsmodell für den Speicherabruf', - 'pages.settings.aiSection.description': - 'Sprachmodellanbieter, lokal Ollama und Sprache (STT / TTS).', - 'pages.settings.aiSection.title': 'AI', - 'pages.settings.features.desktopCompanion': 'Desktop-Begleiter', - 'pages.settings.features.desktopCompanionDesc': - 'Sprachassistent mit Bildschirmerkennung – hört zu, sieht, spricht, zeigt', - 'pages.settings.features.messagingChannels': 'Messaging-Kanäle', - 'pages.settings.features.messagingChannelsDesc': 'Nachrichtenkanäle, Abschn', - 'pages.settings.features.notifications': 'Benachrichtigungen', - 'pages.settings.features.notificationsDesc': 'Benachrichtigungen absch', - 'pages.settings.features.screenAwareness': 'Bildschirmbewusstsein', - 'pages.settings.features.screenAwarenessDesc': 'Abschn. Bildschirmwahrnehmung', - 'pages.settings.features.tools': 'Werkzeuge', - 'pages.settings.features.toolsDesc': 'Werkzeugbeschr', - 'pages.settings.featuresSection.description': 'Bildschirmbewusstsein, Nachrichten und Tools.', - 'pages.settings.featuresSection.title': 'Funktionen', - 'privacy.dataKind.credentials': 'Anmeldeinformationen', - 'privacy.dataKind.derived': 'Abgeleitet', - 'privacy.dataKind.diagnostics': 'Diagnose', - 'privacy.dataKind.metadata': 'MetaDaten', - 'privacy.dataKind.raw': 'Roh', - 'privacy.whatLeaves.link.label': 'Was verlässt meinen Computer?', - 'rewards.community.achievementsUnlocked': '{unlocked} von {total} Erfolgen freigeschaltet', - 'rewards.community.connectDiscord': 'Verbinde Discord', - 'rewards.community.cumulativeTokens': 'Kumulierte Token', - 'rewards.community.currentStreak': 'Aktuelle Serie', - 'rewards.community.discordLinkedNotInGuild': 'Verlinkt, aber nicht auf dem Server', - 'rewards.community.discordMember': 'Dem Server beigetreten', - 'rewards.community.discordNotLinked': 'Nicht verlinkt', - 'rewards.community.discordServer': 'Discord Server', - 'rewards.community.discordStatusUnavailable': 'Mitgliedschaftsstatus nicht verfügbar', - 'rewards.community.discordWaiting': 'Warten auf Backend-Synchronisierung', - 'rewards.community.heroSubtitle': - 'Schalte exklusive Kanäle, Unterstützerabzeichen und Backend-synchronisierte Belohnungen frei, indem du dein Discord-Konto verknüpfst.', - 'rewards.community.heroTitle': 'Verdiene Belohnungen und Discord Rollen', - 'rewards.community.joinDiscord': 'Tritt Discord bei', - 'rewards.community.loadingRewards': 'Prämien werden geladen…', - 'rewards.community.locked': 'Gesperrt', - 'rewards.community.retrying': 'Erneuter Versuch…', - 'rewards.community.rolesAndRewards': 'Rollen und Belohnungen', - 'rewards.community.streakDays': '{n} Tage', - 'rewards.community.syncPending': 'Synchronisierung der Prämien steht aus', - 'rewards.community.syncPendingDesc': 'Synchronisierung ausstehend', - 'rewards.community.syncUnavailable': 'Synchronisierung nicht verfügbar', - 'rewards.community.tryAgain': 'Erneuter Versuch…', - 'rewards.community.unknown': 'Unbekannt', - 'rewards.community.unlocked': 'Entsperrt', - 'rewards.community.yourProgress': 'Dein Fortschritt', - 'rewards.coupon.colCode': 'Code', - 'rewards.coupon.colRedeemed': 'Eingelöst', - 'rewards.coupon.colReward': 'Belohnung', - 'rewards.coupon.colStatus': 'Status', - 'rewards.coupon.loadingHistory': 'Prämienverlauf wird geladen…', - 'rewards.coupon.noCodes': 'Es wurden noch keine Prämiencodes eingelöst.', - 'rewards.coupon.pending': 'Ausstehend', - 'rewards.coupon.placeholder': 'Gutscheincode', - 'rewards.coupon.promoCredits': 'Promo-Credits', - 'rewards.coupon.recentRedemptions': 'Aktuelle Einlösungen', - 'rewards.coupon.redeemAccepted': - '{code} akzeptiert. {amount} wird entsperrt, nachdem die erforderliche Aktion abgeschlossen ist.', - 'rewards.coupon.redeemButton': 'Code einlösen', - 'rewards.coupon.redeemSuccess': '{code} eingelöst. {amount} wurde zu deinen Credits hinzugefügt.', - 'rewards.coupon.redeemedCodes': 'Eingelöste Codes', - 'rewards.coupon.redeeming': 'Einlösen...', - 'rewards.coupon.statusApplied': 'Angewendet', - 'rewards.coupon.statusPendingAction': 'Ausstehende Maßnahmen', - 'rewards.coupon.statusRedeemed': 'Eingelöst', - 'rewards.coupon.subtitle': 'Untertitel', - 'rewards.coupon.title': 'Gutscheincode einlösen', - 'rewards.referralSection.activity': 'Empfehlungsaktivität', - 'rewards.referralSection.apply': 'Bewerben…', - 'rewards.referralSection.applying': 'Bewerben…', - 'rewards.referralSection.colReferredUser': 'Empfohlener Benutzer', - 'rewards.referralSection.colReward': 'Belohnung', - 'rewards.referralSection.colStatus': 'Status', - 'rewards.referralSection.colUpdated': 'Aktualisiert', - 'rewards.referralSection.completed': 'Abgeschlossen', - 'rewards.referralSection.copyCode': 'Code kopieren', - 'rewards.referralSection.copyFailed': 'Der Kopiervorgang ist fehlgeschlagen', - 'rewards.referralSection.haveCode': 'Hast du einen Empfehlungscode?', - 'rewards.referralSection.haveCodeDesc': 'Habe Codebeschreibung', - 'rewards.referralSection.linked': 'Verlinkt', - 'rewards.referralSection.linkedCode': '(Code {code})', - 'rewards.referralSection.loading': 'Empfehlungsprogramm wird geladen…', - 'rewards.referralSection.noReferrals': 'Keine Empfehlungen', - 'rewards.referralSection.pendingReferrals': 'Ausstehende Empfehlungen', - 'rewards.referralSection.placeholder': 'Empfehlungscode', - 'rewards.referralSection.share': 'Teilen', - 'rewards.referralSection.statusCompleted': 'Status abgeschlossen', - 'rewards.referralSection.statusExpired': 'Status abgelaufen', - 'rewards.referralSection.statusJoined': 'Status beigetreten', - 'rewards.referralSection.subtitle': 'Untertitel', - 'rewards.referralSection.title': 'Freunde einladen, Credits verdienen', - 'rewards.referralSection.totalEarned': 'Insgesamt verdient', - 'rewards.referralSection.yourCode': 'Dein Code', - 'settings.ai.addCloudProvider': 'Cloud-Anbieter hinzufügen', - 'settings.ai.addProvider': 'Sparen…', - 'settings.ai.apiKeyFieldLabel': 'Bezeichnung des API-Schlüsselfelds', - 'settings.ai.apiKeyRequired': 'Bitte füge deinen API-Schlüssel ein, um fortzufahren.', - 'settings.ai.apiKeyStoredEncrypted': 'API-Schlüssel verschlüsselt gespeichert', - 'settings.ai.apiKeysEncrypted': 'auth-profiles.json', - 'settings.ai.clearStoredKey': 'Gespeicherten Schlüssel löschen', - 'settings.ai.connectProvider': 'Anbieter verbinden', - 'settings.ai.customRouting': 'Benutzerdefiniertes Routing', - 'settings.ai.defaultResolvesTo': 'Standard wird aufgelöst zu', - 'settings.ai.discard': 'Verwerfen', - 'settings.ai.editProvider': 'Anbieter bearbeiten', - 'settings.ai.llmProviders': 'LLM Anbieter', - 'settings.ai.llmProvidersDesc': 'LLM-Anbieter absch', - 'settings.ai.localOllama': 'Lokal (Ollama)', - 'settings.ai.modelLabel': 'Modell', - 'settings.ai.noCustomProviders': 'Keine benutzerdefinierten Anbieter', - 'settings.ai.openAiCompat.authHeaderExample': 'Autorisierung: Bearer ', - 'settings.ai.openAiCompat.authHeaderLabel': 'Auth-Header', - 'settings.ai.openAiCompat.baseUrlLabel': 'Basis URL', - 'settings.ai.openAiCompat.baseUrlUnavailable': 'Nicht verfügbar', - 'settings.ai.openAiCompat.clearKey': 'Schlüssel löschen', - 'settings.ai.openAiCompat.description': - "Point local harnesses at this /v1 server to route through the providers configured below. Authentication uses a stable key you set here, not the app's internal core bearer.", - 'settings.ai.openAiCompat.keyConfigured': 'Schlüssel konfiguriert', - 'settings.ai.openAiCompat.keyRequired': 'Schlüssel erforderlich', - 'settings.ai.openAiCompat.rotateKey': 'Schlüssel drehen', - 'settings.ai.openAiCompat.setKey': 'Schlüssel einstellen', - 'settings.ai.openAiCompat.title': 'OpenAI-kompatibler Endpunkt', - 'settings.ai.providerLabel': 'Anbieter', - 'settings.ai.routing': 'Routenführung', - 'settings.ai.routingCustom': 'Routing benutzerdefiniert', - 'settings.ai.routingDefault': 'Standard', - 'settings.ai.routingDesc': 'Routing-Beschreibung', - 'settings.ai.saveChanges': 'Sparen…', - 'settings.ai.saving': 'Sparen…', - 'settings.ai.unsavedChange': 'nicht gespeicherte Änderung', - 'settings.ai.unsavedChanges': 'nicht gespeicherte Änderungen', - 'settings.ai.workloadGroupBackground': 'Hintergrund der Arbeitslastgruppe', - 'settings.ai.workloadGroupChat': 'Workload-Gruppenchat', - 'settings.autocomplete.appFilter.acceptSuggestion': 'Vorschlag annehmen', - 'settings.autocomplete.appFilter.contextOverride': 'Kontextüberschreibung (optional)', - 'settings.autocomplete.appFilter.debugFocus': 'Debug-Fokus', - 'settings.autocomplete.appFilter.getSuggestion': 'Hol dir einen Vorschlag', - 'settings.autocomplete.appFilter.liveLogs': 'Live-Protokolle', - 'settings.autocomplete.appFilter.noLogs': ') :', - 'settings.autocomplete.appFilter.refreshStatus': 'Erfrischend…', - 'settings.autocomplete.appFilter.refreshing': 'Erfrischend…', - 'settings.autocomplete.appFilter.runtime': 'Laufzeit', - 'settings.autocomplete.appFilter.test': 'Testen', - 'settings.autocomplete.completionStyle.acceptedCompletion': - '{count} akzeptierter Abschluss gespeichert – wird zur Personalisierung zukünftiger Vorschläge verwendet.', - 'settings.autocomplete.completionStyle.acceptedCompletions': - '{count} akzeptierte Vervollständigungen werden gespeichert – werden zur Personalisierung zukünftiger Vorschläge verwendet.', - 'settings.autocomplete.completionStyle.clearHistory': 'Löschen…', - 'settings.autocomplete.completionStyle.clearing': 'Löschen…', - 'settings.autocomplete.completionStyle.debounce': 'Entprellung (ms)', - 'settings.autocomplete.completionStyle.enabled': 'Aktiviert', - 'settings.autocomplete.completionStyle.maxChars': 'Max. Zeichen', - 'settings.autocomplete.completionStyle.noHistory': - 'Noch keine akzeptierten Abschlüsse. Akzeptiere Vorschläge mit der Tabulatortaste, um mit der Personalisierung zu beginnen.', - 'settings.autocomplete.completionStyle.overlayTtl': 'Overlay-TTL (ms)', - 'settings.autocomplete.completionStyle.personalizationHistory': 'Personalisierungsverlauf', - 'settings.autocomplete.completionStyle.styleExamples': 'Stilbeispiele (eines pro Zeile)', - 'settings.autocomplete.completionStyle.styleInstructions': 'Stilanweisungen', - 'settings.billing.autoRecharge.addAmount': 'Füge diesen Betrag hinzu', - 'settings.billing.autoRecharge.addCard': 'Karte hinzufügen', - 'settings.billing.autoRecharge.amountHint': 'Betragshinweis', - 'settings.billing.autoRecharge.defaultCard': 'Standardkarte', - 'settings.billing.autoRecharge.lastRechargeFailed': 'Das letzte Aufladen ist fehlgeschlagen', - 'settings.billing.autoRecharge.lastRecharged': 'Zuletzt aufgeladen', - 'settings.billing.autoRecharge.noCards': 'Keine Karten', - 'settings.billing.autoRecharge.paymentMethods': 'Zahlungsmethoden', - 'settings.billing.autoRecharge.rechargeInProgress': 'Aufladen läuft', - 'settings.billing.autoRecharge.rechargeWhen': 'Aufladen, wenn der Saldo darunter fällt', - 'settings.billing.autoRecharge.saveSettings': 'Sparen…', - 'settings.billing.autoRecharge.saving': 'Sparen…', - 'settings.billing.autoRecharge.setDefault': ':', - 'settings.billing.autoRecharge.subtitle': 'Untertitel', - 'settings.billing.autoRecharge.title': 'Aktiviere die automatische Aufladung', - 'settings.billing.autoRecharge.toggleAriaLabel': 'Automatisches Aufladen umschalten', - 'settings.billing.autoRecharge.weeklyLimit': 'Wöchentliches Ausgabenlimit', - 'settings.billing.history.desc': 'Beschr', - 'settings.billing.history.empty': 'Leer', - 'settings.billing.history.openPortal': 'Portal öffnen', - 'settings.billing.history.posted': 'Gepostet', - 'settings.billing.history.title': 'Titel', - 'settings.billing.inferenceBudget.cycleEnds': 'Der Zyklus endet', - 'settings.billing.inferenceBudget.exhausted': 'Erschöpft', - 'settings.billing.inferenceBudget.loadError': 'Ladefehler', - 'settings.billing.inferenceBudget.noBudgetDesc': 'Kein Budgetabzug', - 'settings.billing.inferenceBudget.noRecurringBudget': 'Kein wiederkehrendes Budget', - 'settings.billing.inferenceBudget.remaining': 'Übrig', - 'settings.billing.inferenceBudget.tenHourCap': 'Zehn-Stunden-Kappe', - 'settings.billing.inferenceBudget.title': 'Titel', - 'settings.billing.payAsYouGo.available': 'Verfügbar', - 'settings.billing.payAsYouGo.chargeCustomAmount': 'Wird geöffnet…', - 'settings.billing.payAsYouGo.chooseTopUpDesc': 'Wähle „Aufladepreis“.', - 'settings.billing.payAsYouGo.chooseTopUpTitle': 'Wähle den Aufladetitel', - 'settings.billing.payAsYouGo.creditBalanceDesc': 'Guthabenbez', - 'settings.billing.payAsYouGo.creditBalanceTitle': 'Guthabentitel', - 'settings.billing.payAsYouGo.customAmount': 'Benutzerdefinierter Betrag', - 'settings.billing.payAsYouGo.enterAmount': 'Betrag eingeben', - 'settings.billing.payAsYouGo.opening': '{amount}', - 'settings.billing.payAsYouGo.promotionalCredits': 'Werbegutschriften', - 'settings.billing.payAsYouGo.topUpBalance': 'Aufladeguthaben', - 'settings.billing.payAsYouGo.topUpCredits': 'Guthaben aufladen', - 'settings.billing.payAsYouGo.unableToLoad': 'Der Ladeausgleich kann nicht durchgeführt werden.', - 'settings.billing.subscription.annual': 'Jährlich', - 'settings.billing.subscription.billedAnnually': 'Jährliche Abrechnung', - 'settings.billing.subscription.chooseSubtitle': 'Untertitel wählen', - 'settings.billing.subscription.chooseTitle': 'Titel wählen', - 'settings.billing.subscription.cryptoDesc': 'Krypto-Beschreibung', - 'settings.billing.subscription.cryptoQuestion': 'Krypto-Frage', - 'settings.billing.subscription.current': 'Aktuell', - 'settings.billing.subscription.currentPlan': 'Aktueller Plan', - 'settings.billing.subscription.monthly': 'Monatlich', - 'settings.billing.subscription.paymentConfirmed': 'Zahlung bestätigt', - 'settings.billing.subscription.perMonth': 'Pro Monat', - 'settings.billing.subscription.popular': 'Beliebt', - 'composio.connect.scope.read': 'Lesen', - 'composio.connect.scope.readHint': - 'Ermöglichen Sie dem Agenten, Daten von dieser Verbindung zu lesen.', - 'composio.connect.scope.write': 'Schreiben', - 'composio.connect.scope.writeHint': - 'Erlauben Sie dem Agenten, Daten über diese Verbindung zu erstellen oder zu ändern.', - 'composio.connect.scope.admin': 'Admin', - 'composio.connect.scope.adminHint': - 'Erlauben Sie dem Agenten, Einstellungen, Berechtigungen oder destruktive Aktionen zu verwalten.', - 'pages.settings.composioSection.title': 'Composio', - 'pages.settings.composioSection.description': - 'Routing, Trigger und Verlauf für Integrationen, die von Composio unterstützt werden.', - 'pages.settings.account.walletBalances': 'Wallet Balances', - 'pages.settings.account.walletBalancesDesc': 'View multi-chain balances for your local wallet', - 'walletBalances.title': 'Wallet Balances', - 'walletBalances.refresh': 'Refresh', - 'walletBalances.loading': 'Loading balances…', - 'walletBalances.retry': 'Retry', - 'walletBalances.emptyState': 'No wallet accounts yet — set up a wallet in Recovery Phrase.', - 'walletBalances.copyAddress': 'Copy address', - 'walletBalances.providerMissing': 'provider unavailable', - 'walletBalances.rawBalance': 'Raw: {raw}', - 'walletBalances.errorGeneric': - 'Unable to load wallet balances. Set up your wallet in Recovery Phrase and try again.', - 'conversations.taskKanban.approval.default': 'Default', - 'conversations.taskKanban.approval.notRequired': 'Not required', - 'conversations.taskKanban.approval.notRequiredBadge': 'no approval', - 'conversations.taskKanban.approval.required': 'Required', - 'conversations.taskKanban.approval.requiredBadge': 'approval', - 'conversations.taskKanban.approval.requiredBeforeExecution': 'Required before execution', - 'conversations.taskKanban.briefButton': 'Task brief', - 'conversations.taskKanban.briefTitle': 'Task brief', - 'conversations.taskKanban.closeBrief': 'Close task brief', - 'conversations.taskKanban.field.acceptanceCriteria': 'Acceptance criteria', - 'conversations.taskKanban.field.allowedTools': 'Allowed tools', - 'conversations.taskKanban.field.approval': 'Approval', - 'conversations.taskKanban.field.assignedAgent': 'Assigned agent', - 'conversations.taskKanban.field.blocker': 'Blocker', - 'conversations.taskKanban.field.evidence': 'Evidence', - 'conversations.taskKanban.field.notes': 'Notes', - 'conversations.taskKanban.field.objective': 'Objective', - 'conversations.taskKanban.field.plan': 'Plan', - 'conversations.taskKanban.field.status': 'Status', - 'conversations.taskKanban.field.title': 'Title', - 'conversations.taskKanban.saveChanges': 'Save changes', - 'conversations.taskKanban.deleteCard': 'Delete', - 'conversations.taskKanban.updateFailed': 'Could not update task; changes were not saved.', -}; - -export default de4; diff --git a/app/src/lib/i18n/chunks/de-5.ts b/app/src/lib/i18n/chunks/de-5.ts deleted file mode 100644 index 6f815afe3..000000000 --- a/app/src/lib/i18n/chunks/de-5.ts +++ /dev/null @@ -1,1046 +0,0 @@ -import type { TranslationMap } from '../types'; - -// German (Deutsch) translations. Each chunk maps to chunks/en-5.ts. -const de5: TranslationMap = { - 'settings.billing.subscription.save': '{pct}', - 'settings.billing.subscription.upgrade': 'Upgrade', - 'settings.billing.subscription.waiting': 'Warten', - 'settings.billing.subscription.waitingPayment': 'Warten auf Zahlung', - 'settings.composio.apiKeyDesc': - 'Auf diesem Gerät ist derzeit ein Schlüssel vom Typ Composio API gespeichert.', - 'settings.composio.apiKeyLabel': 'Composio API Schlüssel', - 'settings.composio.apiKeyStored': 'API Schlüssel gespeichert', - 'settings.composio.apiKeyStoredPlaceholder': '•·•······················', - 'settings.composio.clearedToBackend': 'In den Backend-Modus gewechselt', - 'settings.composio.confirmItem1': 'Ein Konto bei app.composio.dev mit einem API-Schlüssel', - 'settings.composio.confirmItem2': - 'Um jede Integration über dein persönliches Composio-Konto erneut zu verknüpfen', - 'settings.composio.confirmItem3': - 'Hinweis: Composio-Trigger (Echtzeit-Webhooks) werden noch nicht im Direktmodus ausgelöst, sondern nur bei synchronen Toolaufrufen', - 'settings.composio.confirmNeedItems': 'Du brauchst:', - 'settings.composio.confirmSwitch': 'Ich verstehe, zu Direct wechseln', - 'settings.composio.confirmTitle': '⚠️ Wechsel in den Direktmodus', - 'settings.composio.confirmWarning': - 'Deine vorhandenen Integrationen (Gmail, Slack, GitHub usw., die über OpenHuman verknüpft sind) sind nicht sichtbar – sie befinden sich im von OpenHuman verwalteten Composio-Mandanten.', - 'settings.composio.intro': - 'Composio integriert mehr als 250 externe Apps als Tools, die dein Agent aufrufen kann. Wähle aus, wie diese Werkzeugaufrufe weitergeleitet werden.', - 'settings.composio.modeDirect': 'Direkt (bring deinen eigenen API-Schlüssel mit)', - 'settings.composio.modeDirectDesc': - 'Anrufe gehen direkt an backend.composio.dev. Souverän / offlinefreundlich. Die Werkzeugausführung erfolgt synchron; Echtzeit-Trigger-Webhooks werden noch nicht im Direktmodus weitergeleitet (Folgeproblem).', - 'settings.composio.modeManaged': 'Verwaltet (OpenHuman erledigt das für dich)', - 'settings.composio.modeManagedDesc': - 'OpenHuman leitet Tool-Aufrufe über unser Backend weiter (empfohlen). Auth wird vermittelt; du fügst niemals einen Composio API-Schlüssel ein. Webhooks werden vollständig weitergeleitet.', - 'settings.composio.routingMode': 'Routing-Modus', - 'settings.composio.saveErrorNoKey': - 'Speichern fehlgeschlagen. Der Direktmodus erfordert einen nicht leeren Schlüssel API.', - 'settings.composio.saving': 'Sparen…', - 'settings.composio.switching': 'Wechseln…', - 'settings.cron.jobs.desc': 'Beschr', - 'settings.cron.jobs.empty': 'Keine zentralen Cron-Jobs gefunden.', - 'settings.cron.jobs.lastStatus': 'Letzter Stand', - 'settings.cron.jobs.loading': 'Cron-Jobs werden geladen...', - 'settings.cron.jobs.loadingRuns': 'Ladeläufe', - 'settings.cron.jobs.nextRun': 'Nächster Lauf', - 'settings.cron.jobs.pause': 'Pause', - 'settings.cron.jobs.paused': 'Pausiert', - 'settings.cron.jobs.recentRuns': 'Aktuelle Läufe', - 'settings.cron.jobs.removing': 'Entfernen', - 'settings.cron.jobs.resume': 'Lebenslauf', - 'settings.cron.jobs.runningNow': 'Läuft jetzt', - 'settings.cron.jobs.saving': 'Sparen…', - 'settings.cron.jobs.schedule': 'Zeitplan', - 'settings.cron.jobs.title': 'Kern-Cron-Jobs', - 'settings.cron.jobs.viewRuns': 'Läufe ansehen', - 'settings.localModel.deviceCapability.active': 'Aktiv', - 'settings.localModel.deviceCapability.appliedTier': 'Angewandte Stufe', - 'settings.localModel.deviceCapability.applying': 'Bewerben', - 'settings.localModel.deviceCapability.cores': '{count}', - 'settings.localModel.deviceCapability.couldNotLoadPresets': - 'Voreinstellungen konnten nicht geladen werden', - 'settings.localModel.deviceCapability.cpu': 'CPU', - 'settings.localModel.deviceCapability.customModelIds': 'Benutzerdefinierte Modell-IDs', - 'settings.localModel.deviceCapability.detected': 'Erkannt', - 'settings.localModel.deviceCapability.disabled': 'Deaktiviert', - 'settings.localModel.deviceCapability.disabledDesc': - 'Lokale KI ist deaktiviert. Alle Inferenzanfragen laufen über die Cloud.', - 'settings.localModel.deviceCapability.downloadingModels': '(Modelle herunterladen)', - 'settings.localModel.deviceCapability.downloadingSetupDesc': - 'Lade das OllamaSetup-Installationsprogramm (~2 GB) herunter und entpacke es. Dies kann bei der ersten Installation eine Minute dauern.', - 'settings.localModel.deviceCapability.failedToApplyPreset': - 'Voreinstellung konnte nicht angewendet werden', - 'settings.localModel.deviceCapability.gpu': 'GPU', - 'settings.localModel.deviceCapability.installFailed': 'Ollama Installation fehlgeschlagen', - 'settings.localModel.deviceCapability.installFailedDesc': - 'Das Installationsprogramm wurde beendet, bevor Ollama verwendbar war. Klicke auf „Wiederholen“, um es noch einmal zu versuchen, oder installiere es manuell von ollama.com.', - 'settings.localModel.deviceCapability.installFirst': 'Führe zuerst Ollama aus.', - 'settings.localModel.deviceCapability.installFirstDesc': - 'Lokale Ebenen hängen von einem extern verwalteten Ollama-Endpunkt ab. Starte es selbst, rufe die gewünschten Modelle ab und verwende weiterhin „Deaktiviert (Cloud-Fallback)“, bis die Laufzeit erreichbar ist.', - 'settings.localModel.deviceCapability.installOllamaFirst': - 'Führe zuerst Ollama aus, um diese Stufe zu verwenden', - 'settings.localModel.deviceCapability.installingOllama': 'Ollama installieren', - 'settings.localModel.deviceCapability.loadingDeviceInfo': 'Geräteinformationen werden geladen', - 'settings.localModel.deviceCapability.localAiDisabled': - 'Lokale KI deaktiviert – Cloud-Fallback wird verwendet.', - 'settings.localModel.deviceCapability.modelTier': 'Modellebene', - 'settings.localModel.deviceCapability.needsOllama': 'Braucht Ollama', - 'settings.localModel.deviceCapability.notDetected': 'Nicht erkannt', - 'settings.localModel.deviceCapability.ram': 'RAM', - 'settings.localModel.deviceCapability.recommended': 'Empfohlen', - 'settings.localModel.deviceCapability.retryInstall': 'Erneuter Versuch…', - 'settings.localModel.deviceCapability.retrying': 'Erneuter Versuch…', - 'settings.localModel.deviceCapability.starting': 'Beginnend mit …', - 'settings.localModel.download.audioPathPlaceholder': 'Absoluter Pfad zur Audiodatei', - 'settings.localModel.download.capabilityAssets': 'Fähigkeitsressourcen', - 'settings.localModel.download.downloading': 'Herunterladen...', - 'settings.localModel.download.embeddingPlaceholder': 'Eine Eingabezeichenfolge pro Zeile...', - 'settings.localModel.download.noThinkMode': 'Kein Denkmodus', - 'settings.localModel.download.promptPlaceholder': - 'Gib eine beliebige Eingabeaufforderung ein und führe sie für das lokale Modell aus ...', - 'settings.localModel.download.quantizationPref': 'Quantisierungspräferenz', - 'settings.localModel.download.runEmbeddingTest': 'Laufen...', - 'settings.localModel.download.runPromptTest': 'Führe den Prompt-Test durch', - 'settings.localModel.download.runSummaryTest': 'Führe einen Zusammenfassungstest durch', - 'settings.localModel.download.runTranscriptionTest': 'Laufen...', - 'settings.localModel.download.runTtsTest': 'Laufen...', - 'settings.localModel.download.runVisionTest': 'Laufen...', - 'settings.localModel.download.running': 'Laufen...', - 'settings.localModel.download.runningPrompt': 'Laufaufforderung', - 'settings.localModel.download.summarizePlaceholder': - 'Füge Text ein, um ihn mit dem lokalen Modell zusammenzufassen ...', - 'settings.localModel.download.testCustomPrompt': - 'Teste die benutzerdefinierte Eingabeaufforderung', - 'settings.localModel.download.testEmbeddings': 'Einbettungen testen', - 'settings.localModel.download.testSummarization': 'Testzusammenfassung', - 'settings.localModel.download.testVisionPrompt': 'Test-Sehaufforderung', - 'settings.localModel.download.testVoiceInput': 'Spracheingabe testen (STT)', - 'settings.localModel.download.testVoiceOutput': 'Sprachausgabe testen (TTS)', - 'settings.localModel.download.ttsOutputPlaceholder': 'Optionaler Ausgabepfad WAV', - 'settings.localModel.download.ttsPlaceholder': 'Gib den zu synthetisierenden Text ein...', - 'settings.localModel.download.visionImagePlaceholder': - 'Eine Bildreferenz pro Zeile (Daten URI, URL oder lokale Pfadmarkierung)', - 'settings.localModel.download.visionPromptPlaceholder': - 'Gib eine Eingabeaufforderung für das Vision-Modell ein...', - 'settings.localModel.status.allChecksPassed': 'Alle Prüfungen bestanden', - 'settings.localModel.status.artifact': 'Artefakt', - 'settings.localModel.status.backend': 'Backend', - 'settings.localModel.status.binary': 'Binär', - 'settings.localModel.status.bootstrapResume': 'Bootstrap / Fortsetzen', - 'settings.localModel.status.checking': 'Überprüfen...', - 'settings.localModel.status.checkingOllama': 'Ollama wird überprüft', - 'settings.localModel.status.customLocation': 'Benutzerdefinierter Standort', - 'settings.localModel.status.customLocationDesc': 'Benutzerdefinierte Standortbeschreibung', - 'settings.localModel.status.diagnosticsHint': - 'Klicke auf „Diagnose ausführen“, um zu überprüfen, ob Ollama ausgeführt wird und Modelle installiert sind.', - 'settings.localModel.status.downloadingUnknown': 'Wird heruntergeladen (Größe unbekannt)', - 'settings.localModel.status.eta': 'Eta', - 'settings.localModel.status.expectedModels': 'Erwartete Modelle', - 'settings.localModel.status.forceRebootstrap': 'Neustart erzwingen', - 'settings.localModel.status.generationTps': 'Generation TPS', - 'settings.localModel.status.hideErrorDetails': 'Fehlerdetails ausblenden', - 'settings.localModel.status.installManually': 'Manuell installieren', - 'settings.localModel.status.installManuallyFrom': 'Manuell installieren von', - 'settings.localModel.status.installOllama': 'Beginnend mit …', - 'settings.localModel.status.installedModels': 'Installierte Modelle', - 'settings.localModel.status.installing': 'Installieren...', - 'settings.localModel.status.installingOllama': 'Ollama-Laufzeit wird installiert...', - 'settings.localModel.status.issues': 'Probleme', - 'settings.localModel.status.issuesFound': '{count} Problem(e) gefunden', - 'settings.localModel.status.lastLatency': 'Letzte Latenz', - 'settings.localModel.status.model': 'Modell', - 'settings.localModel.status.notFound': 'Nicht gefunden', - 'settings.localModel.status.notRunning': 'Läuft nicht', - 'settings.localModel.status.ollamaBinaryPath': 'Ollama Binärpfad', - 'settings.localModel.status.ollamaDiagnostics': 'Ollama Diagnose', - 'settings.localModel.status.ollamaNotInstalled': 'Ollama Laufzeit nicht verfügbar', - 'settings.localModel.status.ollamaNotInstalledDesc': - 'OpenHuman behandelt jetzt Ollama als externe Inferenzlaufzeit. Starte deinen eigenen Ollama-Server, rufe die gewünschten Modelle ab und richte das Workload-Routing darauf aus.', - 'settings.localModel.status.progress': 'Fortschritt', - 'settings.localModel.status.provider': 'Anbieter', - 'settings.localModel.status.retryBootstrap': 'Versuche Bootstrap erneut', - 'settings.localModel.status.runDiagnostics': 'Überprüfen...', - 'settings.localModel.status.running': 'Laufen', - 'settings.localModel.status.runningExternalProcess': - 'Wird über einen externen Prozess ausgeführt', - 'settings.localModel.status.runtimeStatus': 'Laufzeitstatus', - 'settings.localModel.status.server': 'Server', - 'settings.localModel.status.setPath': 'Einstellung...', - 'settings.localModel.status.setting': 'Einstellung...', - 'settings.localModel.status.showErrorDetails': 'Fehlerdetails ausblenden', - 'settings.localModel.status.showInstallErrorDetails': 'Fehlerdetails ausblenden', - 'settings.localModel.status.suggestedFixes': 'Vorgeschlagene Korrekturen', - 'settings.localModel.status.thenSetPath': 'Dann lege den Pfad fest', - 'settings.localModel.status.triggering': 'Auslösen...', - 'settings.localModel.status.unavailable': 'Nicht verfügbar', - 'settings.localModel.status.working': 'Arbeiten...', - 'settings.developerMenu.ai.title': 'KI-Konfiguration', - 'settings.developerMenu.ai.desc': - 'Cloud-Anbieter, lokale Ollama-Modelle und Routing pro Workload', - 'settings.developerMenu.screenAwareness.title': 'Bildschirmbewusstsein', - 'settings.developerMenu.screenAwareness.desc': - 'Bildschirmaufnahmeberechtigungen, Überwachungsrichtlinien und Sitzungskontrollen', - 'settings.developerMenu.messagingChannels.title': 'Messaging-Kanäle', - 'settings.developerMenu.messagingChannels.desc': - 'Konfiguriere die Authentifizierungsmodi Telegram/Discord und das Standardkanalrouting', - 'settings.developerMenu.tools.title': 'Werkzeuge', - 'settings.developerMenu.tools.desc': - 'Aktiviere oder deaktiviere Funktionen, die OpenHuman in deinem Namen nutzen kann', - 'settings.developerMenu.agentChat.title': 'Agenten-Chat', - 'settings.developerMenu.agentChat.desc': - 'Test-Agent-Konversation mit Modell- und Temperaturüberschreibungen', - 'settings.developerMenu.devWorkflow.title': 'Dev Workflow', - 'settings.developerMenu.devWorkflow.desc': - 'Autonomous agent that picks your GitHub issues and raises PRs on a schedule', - 'settings.developerMenu.devWorkflow.panelDesc': - 'Configure an autonomous developer agent that picks GitHub issues assigned to you and raises pull requests automatically on a schedule.', - 'settings.devWorkflow.githubRepository': 'GitHub Repository', - 'settings.devWorkflow.loadingRepositories': 'Loading repositories...', - 'settings.devWorkflow.selectRepository': 'Select a repository', - 'settings.devWorkflow.privateTag': '(private)', - 'settings.devWorkflow.detectingForkInfo': 'Detecting fork info...', - 'settings.devWorkflow.forkDetected': 'Fork detected', - 'settings.devWorkflow.upstream': 'Upstream:', - 'settings.devWorkflow.forkPrNote': 'PRs will be raised against the upstream repository.', - 'settings.devWorkflow.notForkNote': - 'Not a fork. PRs will be raised against this repository directly.', - 'settings.devWorkflow.targetBranch': 'Target Branch', - 'settings.devWorkflow.targetBranchNote': 'PRs will be raised against this branch', - 'settings.devWorkflow.loadingBranches': 'Loading branches...', - 'settings.devWorkflow.runFrequency': 'Run Frequency', - 'settings.devWorkflow.runFrequencyNote': - 'How often the agent should check for issues and raise PRs.', - 'settings.devWorkflow.updateConfiguration': 'Update Configuration', - 'settings.devWorkflow.saveConfiguration': 'Save Configuration', - 'settings.devWorkflow.remove': 'Remove', - 'settings.devWorkflow.saved': 'Saved', - 'settings.devWorkflow.activeConfiguration': 'Active Configuration', - 'settings.devWorkflow.activeConfigRepository': 'Repository:', - 'settings.devWorkflow.activeConfigUpstream': 'Upstream:', - 'settings.devWorkflow.activeConfigTargetBranch': 'Target branch:', - 'settings.devWorkflow.activeConfigSchedule': 'Schedule:', - 'settings.devWorkflow.enabled': 'Enabled', - 'settings.devWorkflow.paused': 'Paused', - 'settings.skillsRunner.scheduleEnabled': 'Enabled', - 'settings.skillsRunner.scheduleDisabled': 'Paused', - 'settings.skillsRunner.scheduleToggleAria': 'Toggle schedule enabled', - 'settings.skillsRunner.schedule.history': 'History', - 'settings.skillsRunner.schedule.historyLoading': 'Loading history\u2026', - 'settings.skillsRunner.schedule.historyEmpty': 'No runs yet for this schedule.', - 'settings.skillsRunner.schedule.historyNoOutput': 'No output captured.', - 'settings.skillsRunner.schedule.active': 'Active', - 'settings.skillsRunner.schedule.lastRunLabel': 'last:', - 'settings.devWorkflow.nextRun': 'Next run', - 'settings.devWorkflow.lastRun': 'Last run', - 'settings.devWorkflow.runNow': 'Run now', - 'settings.devWorkflow.running': 'Running…', - 'settings.devWorkflow.recentRuns': 'Recent runs', - 'settings.devWorkflow.cronSaveError': 'Failed to save configuration', - 'settings.devWorkflow.lastOutput': 'Last output', - 'settings.devWorkflow.noOutput': 'No output captured', - 'settings.devWorkflow.runningStatus': - 'Agent is running — picking an issue and working on a fix...', - 'settings.devWorkflow.errorNotConnected': - 'GitHub is not connected. Please connect GitHub via Settings > Advanced > Composio first.', - 'settings.devWorkflow.errorToolNotEnabled': - 'GITHUB_LIST_REPOSITORIES_FOR_THE_AUTHENTICATED_USER tool is not enabled on this backend. Please ask your admin to enable it in the Composio integration (backend#842).', - 'settings.devWorkflow.errorNotAuthenticated': 'Not authenticated. Please sign in first.', - 'settings.devWorkflow.errorNoRepositories': 'No repositories found for this GitHub account.', - 'settings.devWorkflow.schedule.every30min': 'Every 30 minutes', - 'settings.devWorkflow.schedule.everyHour': 'Every hour', - 'settings.devWorkflow.schedule.every2hours': 'Every 2 hours', - 'settings.devWorkflow.schedule.every6hours': 'Every 6 hours', - 'settings.devWorkflow.schedule.onceDaily': 'Once daily (9 AM)', - 'settings.developerMenu.cronJobs.title': 'Cron-Jobs', - 'settings.developerMenu.cronJobs.desc': - 'Zeige geplante Jobs für Laufzeitfähigkeiten an und konfiguriere sie', - 'settings.developerMenu.localModelDebug.title': 'Lokales Modell-Debug', - 'settings.developerMenu.localModelDebug.desc': - 'Ollama-Konfiguration, Asset-Downloads, Modelltests und Diagnose', - 'settings.developerMenu.webhooks.title': 'Webhooks', - 'settings.developerMenu.webhooks.desc': - 'Prüfe Laufzeit-Webhook-Registrierungen und erfasste Anforderungsprotokolle', - 'settings.developerMenu.eventLog.title': 'Event Log', - 'settings.developerMenu.eventLog.desc': - 'Live colour-coded stream of all agent, tool, and system events', - 'settings.developerMenu.eventLog.allTypes': 'All types', - 'settings.developerMenu.eventLog.filterAgent': 'Filter...', - 'settings.developerMenu.eventLog.download': 'Download', - 'settings.developerMenu.eventLog.events': 'events', - 'settings.developerMenu.eventLog.live': 'Live', - 'settings.developerMenu.eventLog.disconnected': 'Disconnected', - 'settings.developerMenu.eventLog.waiting': 'Waiting for events...', - 'settings.developerMenu.eventLog.notConnected': 'Not connected to core', - 'settings.developerMenu.eventLog.jumpToLatest': 'Jump to latest', - 'settings.developerMenu.eventLog.badge.tool': 'TOOL', - 'settings.developerMenu.eventLog.badge.agent': 'AGENT', - 'settings.developerMenu.eventLog.badge.info': 'INFO', - 'settings.developerMenu.eventLog.badge.mem': 'MEM', - 'settings.developerMenu.eventLog.badge.chan': 'CHAN', - 'settings.developerMenu.eventLog.badge.cron': 'CRON', - 'settings.developerMenu.eventLog.badge.hook': 'HOOK', - 'settings.developerMenu.eventLog.badge.warn': 'WARN', - 'settings.developerMenu.eventLog.badge.skill': 'SKILL', - 'settings.developerMenu.eventLog.badge.comp': 'COMP', - 'settings.developerMenu.eventLog.badge.mcp': 'MCP', - 'settings.developerMenu.intelligence.title': 'Intelligenz', - 'settings.developerMenu.intelligence.desc': - 'Gedächtnisarbeitsbereich, Unterbewusstseinsmotor, Träume und Einstellungen', - 'settings.developerMenu.notificationRouting.title': 'Benachrichtigungsweiterleitung', - 'settings.developerMenu.notificationRouting.desc': - 'KI-Wichtigkeitsbewertung und Orchestrator-Eskalation für Integrationswarnungen', - 'settings.developerMenu.composeioTriggers.title': 'ComposeIO Auslöser', - 'settings.developerMenu.composeioTriggers.desc': - 'Sieh dir den ComposeIO-Triggerverlauf und das Archiv an', - 'settings.developerMenu.composioRouting.title': 'Composio Routing (Direktmodus)', - 'settings.developerMenu.composioRouting.desc': - 'Bring deinen eigenen Composio API-Schlüssel mit und leite Anrufe direkt an backend.composio.dev weiter', - 'settings.developerMenu.mcpServer.title': 'MCP Server', - 'settings.developerMenu.mcpServer.desc': - 'Konfiguriere externe MCP-Clients für die Verbindung mit OpenHuman', - 'settings.developerMenu.autonomy.title': 'Agent-Autonomie', - 'settings.developerMenu.autonomy.desc': - 'Aktionsraten-Limits und Sicherheitsschwellen für Werkzeuge', - 'settings.developerMenu.integrationTriggers.title': 'Integrationsauslöser', - 'settings.developerMenu.integrationTriggers.desc': - 'Konfiguriere KI-Triage-Einstellungen für Composio-Integrationsauslöser', - 'settings.appearance.menuDesc': 'Wähle hell, dunkel oder passend zu deinem Systemthema', - 'settings.mascot.active': 'Aktiv', - 'settings.mascot.characterDesc': 'Charakterbeschreibung', - 'settings.mascot.characterHeading': 'Zeichenüberschrift', - 'settings.mascot.customGifError': - 'GIF konnte nicht geladen werden. Bitte überprüfe die URL und versuche es erneut.', - 'settings.mascot.customGifHeading': 'Benutzerdefinierter GIF-Avatar', - 'settings.mascot.customGifLabel': 'URL für benutzerdefinierten GIF-Avatar', - 'settings.mascot.colorDesc': 'Farbbeschreibung', - 'settings.mascot.colorHeading': 'Farbüberschrift', - 'settings.mascot.loadingLibrary': 'OpenHuman-Bibliothek wird geladen…', - 'settings.mascot.localDefault': 'Lokal OpenHuman (Standard)', - 'settings.mascot.menuTitle': 'Maskottchen', - 'settings.mascot.menuDesc': - 'Wähle die Maskottchenfarbe aus, die in der gesamten App verwendet wird', - 'settings.mascot.noCharacters': 'Es sind noch keine OpenHuman Zeichen verfügbar', - 'settings.mascot.noColorVariants': 'Keine Farbvarianten', - 'settings.mascot.voice.current': 'aktuell', - 'settings.mascot.voice.customDesc': - 'Sprach-IDs findest du unter api.elevenlabs.io/v1/voices oder in deinem ElevenLabs-Dashboard. Es wird nur die ID gespeichert – dein API-Schlüssel bleibt im Backend.', - 'settings.mascot.voice.customHeading': 'Benutzerdefinierte Sprach-ID', - 'settings.mascot.voice.customOption': 'Andere (Sprach-ID einfügen)…', - 'settings.mascot.voice.desc': - 'Wähle die ElevenLabs-Stimme aus, die das Maskottchen für gesprochene Antworten verwendet. Filtere nach Geschlecht, wähle aus der kuratierten Liste aus, füge eine benutzerdefinierte ID ein oder lass die App eine Stimme auswählen, die deiner Benutzeroberflächensprache entspricht.', - 'settings.mascot.voice.genderFemale': 'Weiblich', - 'settings.mascot.voice.genderHeading': 'Stimmgeschlecht', - 'settings.mascot.voice.genderMale': 'Männlich', - 'settings.mascot.voice.heading': 'Stimme', - 'settings.mascot.voice.preset': 'Sprachvoreinstellung', - 'settings.mascot.voice.presetHeading': 'Sprachvoreinstellung', - 'settings.mascot.voice.preview': 'Vorschau der Stimme', - 'settings.mascot.voice.previewError': 'Die Sprachvorschau ist fehlgeschlagen', - 'settings.mascot.voice.previewing': 'Vorschau...', - 'settings.mascot.voice.reset': 'Auf Standard zurücksetzen', - 'settings.mascot.voice.useLocaleDefault': 'Passe die App-Sprache an', - 'settings.mascot.voice.useLocaleDefaultDesc': - 'Wähle automatisch eine Stimme für die aktuelle Schnittstellensprache aus.', - 'settings.memoryWindow.balanced.badge': 'Empfohlen', - 'settings.memoryWindow.balanced.hint': - 'Sinnvolle Standardeinstellung – gute Kontinuität, ohne bei jedem Lauf zusätzliche Token zu verbrennen.', - 'settings.memoryWindow.balanced.label': 'Ausgewogen', - 'settings.memoryWindow.description': - 'Wie viel gespeicherter Kontext OpenHuman in jede neue Agentenausführung eingefügt wird. Bei größeren Fenstern ist man sich früherer Gespräche besser bewusst, verbraucht aber bei jedem Durchlauf mehr Token – und kostet mehr.', - 'settings.memoryWindow.extended.badge': 'Mehr Kontext', - 'settings.memoryWindow.extended.hint': - 'Bei jedem Lauf wird mehr Langzeitgedächtnis injiziert. Höhere Token-Kosten pro Spielzug.', - 'settings.memoryWindow.extended.label': 'Erweitert', - 'settings.memoryWindow.maximum.badge': 'Höchste Kosten', - 'settings.memoryWindow.maximum.hint': - 'Das größte sichere Fenster. Beste Kontinuität, deutlich höhere Token-Rechnung bei jedem Lauf.', - 'settings.memoryWindow.maximum.label': 'Maximal', - 'settings.memoryWindow.minimal.badge': 'Günstigstes', - 'settings.memoryWindow.minimal.hint': - 'Kleinstes Speicherfenster. Günstigstes, schnellstes, geringste Kontinuität zwischen den Läufen.', - 'settings.memoryWindow.minimal.label': 'Minimal', - 'settings.memoryWindow.title': 'Langzeitgedächtnisfenster', - 'settings.screenIntel.permissions.accessibility': 'Barrierefreiheit', - 'settings.screenIntel.permissions.grantHint': 'Grant-Hinweis', - 'settings.screenIntel.permissions.inputMonitoring': 'Eingabeüberwachung', - 'settings.screenIntel.permissions.macosAppliesPrivacy': - 'macOS verwaltet diese Berechtigungen unter Systemeinstellungen → Datenschutz & Sicherheit.', - 'settings.screenIntel.permissions.openInputMonitoring': 'Bitte um …', - 'settings.screenIntel.permissions.refreshStatus': 'Erfrischend…', - 'settings.screenIntel.permissions.refreshing': 'Erfrischend…', - 'settings.screenIntel.permissions.requestAccessibility': 'Bitte um …', - 'settings.screenIntel.permissions.requestScreenRecording': 'Bitte um …', - 'settings.screenIntel.permissions.requesting': 'Bitte um …', - 'settings.screenIntel.permissions.restartRefresh': 'Kern wird neu gestartet...', - 'settings.screenIntel.permissions.restartingCore': 'Kern wird neu gestartet...', - 'settings.screenIntel.permissions.screenRecording': 'Bildschirmaufzeichnung', - 'settings.screenIntel.permissions.title': 'Berechtigungen', - 'skills.card.moreActions': 'Weitere Aktionen', - 'skills.create.allowedTools': 'Erlaubte Werkzeuge', - 'skills.create.author': 'Autor', - 'skills.create.authorPlaceholder': 'Dein Name', - 'skills.create.commaSeparated': '(durch Kommas getrennt)', - 'skills.create.createBtn': 'Fertigkeit schaffen', - 'skills.create.createError': 'Fertigkeit konnte nicht erstellt werden', - 'skills.create.creating': 'Erstellen…', - 'skills.create.description': 'Beschreibung', - 'skills.create.descriptionPlaceholder': 'Was bewirkt diese Fähigkeit?', - 'skills.create.optional': '(optional)', - 'skills.create.inputs.heading': 'Inputs', - 'skills.create.inputs.help': - 'Declare parameters the skill needs. The Skills Runner will render a form for these at run time.', - 'skills.create.inputs.add': 'Add input', - 'skills.create.inputs.row.name': 'Input name', - 'skills.create.inputs.row.namePlaceholder': 'e.g. repo', - 'skills.create.inputs.row.nameError': - 'Letters, digits, underscores, and dashes only; must start with a letter.', - 'skills.create.inputs.row.description': 'Input description', - 'skills.create.inputs.row.descriptionPlaceholder': 'What goes in this field?', - 'skills.create.inputs.row.type': 'Type', - 'skills.create.inputs.row.required': 'Required', - 'skills.create.inputs.row.remove': 'Remove input', - 'skills.create.inputs.type.string': 'Text', - 'skills.create.inputs.type.integer': 'Number', - 'skills.create.inputs.type.boolean': 'Yes / No', - 'skills.create.license': 'Lizenz', - 'skills.create.name': 'Name', - 'skills.create.namePlaceholder': 'z.B. Fachzeitschrift', - 'skills.create.scope': 'Umfang', - 'skills.create.scopeProjectHint': '/.openhuman/skills/', - 'skills.create.scopeUserHint': - 'Geschrieben an ~/.openhuman/skills//SKILL.md – verfügbar in allen Arbeitsbereichen.', - 'skills.create.slugLabel': 'Schneckenetikett', - 'skills.create.subtitle': 'SKILL.md', - 'skills.create.tags': 'Schlagworte', - 'skills.create.title': 'Neue Fähigkeit', - 'skills.detail.allowedTools': 'Erlaubte Werkzeuge', - 'skills.detail.author': 'Autor', - 'skills.detail.bundledResources': 'Gebündelte Ressourcen', - 'skills.detail.closeAriaLabel': 'Fertigkeitsdetails schließen', - 'skills.detail.location': 'Standort', - 'skills.detail.noBundledResources': 'Keine gebündelten Ressourcen.', - 'skills.detail.tags': 'Schlagworte', - 'skills.detail.warnings': 'Warnungen', - 'skills.install.fetchLog': 'Protokoll abrufen', - 'skills.install.installBtn': 'Installieren…', - 'skills.install.installComplete': 'Installation abgeschlossen', - 'skills.install.installing': 'Installieren…', - 'skills.install.parseWarnings': 'Warnungen analysieren', - 'skills.install.rawError': 'Roher Fehler', - 'skills.install.timeoutHint': '(Sekunden, optional)', - 'skills.install.timeoutLabel': 'Timeout-Label', - 'skills.install.title': 'Skill von URL installieren', - 'skills.install.urlLabel': 'Fähigkeit URL', - 'skills.meetingBots.bannerDesc': - 'Lege einen Google Meet-Link ab und OpenHuman tritt als Gast bei, spricht, hört zu und winkt zurück.', - 'skills.meetingBots.bannerTitle': 'Sende OpenHuman an eine Besprechung', - 'skills.meetingBots.busyTitle': 'OpenHuman ist beschäftigt', - 'skills.meetingBots.comingSoon': 'Kommt bald', - 'skills.meetingBots.couldNotStartTitle': 'OpenHuman konnte nicht gestartet werden', - 'skills.meetingBots.displayName': 'Anzeigename', - 'skills.meetingBots.failedToStart': 'OpenHuman konnte nicht gestartet werden.', - 'skills.meetingBots.joiningMessage': 'Es sollte in wenigen Sekunden als Teilnehmer erscheinen.', - 'skills.meetingBots.joiningTitle': 'OpenHuman nimmt an der Besprechung teil', - 'skills.meetingBots.meetingLink': 'Link zum Treffen', - 'skills.meetingBots.modalAriaLabel': 'Sende OpenHuman an eine Besprechung', - 'skills.meetingBots.modalDesc': - 'OpenHuman tritt als anonymer Gast bei, streamt sein Video in den Anruf und antwortet über den Agenten.', - 'skills.meetingBots.modalTitle': 'Sende OpenHuman an eine Besprechung', - 'skills.meetingBots.newBadge': 'Neu', - 'skills.meetingBots.sendTo': 'Senden an', - 'skills.meetingBots.starting': 'Beginnend mit …', - 'skills.resource.preview.closeAriaLabel': 'Vorschau schließen', - 'skills.resource.preview.failed': 'Vorschau fehlgeschlagen', - 'skills.resource.preview.loading': 'Vorschau wird geladen…', - 'skills.resource.tree.empty': 'Keine gebündelten Ressourcen.', - 'skills.search.placeholder': 'Platzhalter', - 'skills.setup.autocomplete.acceptKey': 'Schlüssel akzeptieren', - 'skills.setup.autocomplete.activeDesc': 'Inline-Vervollständigungen laufen und sind bereit.', - 'skills.setup.autocomplete.activeTitle': 'Die automatische Vervollständigung ist aktiv', - 'skills.setup.autocomplete.customizeSettings': 'Passe die Einstellungen an', - 'skills.setup.autocomplete.debounce': 'Entprellen', - 'skills.setup.autocomplete.description': 'Beschreibung', - 'skills.setup.autocomplete.enableBtn': 'Aktivieren...', - 'skills.setup.autocomplete.enableError': - 'Die automatische Vervollständigung konnte nicht aktiviert werden', - 'skills.setup.autocomplete.enabling': 'Aktivieren...', - 'skills.setup.autocomplete.notSupported': 'Nicht unterstützt', - 'skills.setup.autocomplete.stepEnable': 'Aktiviere Inline-Vervollständigungen', - 'skills.setup.autocomplete.stepSuccess': 'Bereit zu gehen', - 'skills.setup.autocomplete.stylePreset': 'Stilvoreinstellung', - 'skills.setup.autocomplete.stylePresetValue': 'Ausgewogen (später konfigurierbar)', - 'skills.setup.autocomplete.title': 'Automatische Textvervollständigung', - 'skills.setup.screenIntel.activeDesc': - 'Screen Intelligence läuft und liest dein aktives Fenster.', - 'skills.setup.screenIntel.activeTitle': 'Bildschirmintelligenz ist aktiviert', - 'skills.setup.screenIntel.advancedSettings': 'Erweiterte Einstellungen', - 'skills.setup.screenIntel.allGranted': 'Alle Berechtigungen erteilt', - 'skills.setup.screenIntel.captureMode': 'Aufnahmemodus', - 'skills.setup.screenIntel.captureModeValue': 'Alle Fenster (später konfigurierbar)', - 'skills.setup.screenIntel.deniedHint': - 'Nachdem du in den Systemeinstellungen Berechtigungen erteilt hast, klicke unten, um neu zu starten und die Änderungen zu übernehmen.', - 'skills.setup.screenIntel.enableBtn': 'Aktivieren...', - 'skills.setup.screenIntel.enableDesc': - 'Liest, was auf deinem Bildschirm ist, und gibt deinem Agenten nützlichen Kontext.', - 'skills.setup.screenIntel.enableError': 'Screen Intelligence konnte nicht aktiviert werden', - 'skills.setup.screenIntel.enabling': 'Aktivieren...', - 'skills.setup.screenIntel.grant': 'Öffnen...', - 'skills.setup.screenIntel.granted': 'Erteilt', - 'skills.setup.screenIntel.macosOnly': 'Nur macOS', - 'skills.setup.screenIntel.opening': 'Öffnen...', - 'skills.setup.screenIntel.panicHotkey': 'Panik-Hotkey', - 'skills.setup.screenIntel.permAccessibility': 'Barrierefreiheit', - 'skills.setup.screenIntel.permInputMonitoring': 'Eingabeüberwachung', - 'skills.setup.screenIntel.permScreenRecording': 'Bildschirmaufzeichnung', - 'skills.setup.screenIntel.permissionsDesc': - 'Screen Intelligence benötigt Berechtigungen für Bedienungshilfen, Eingabeüberwachung und Bildschirmaufnahme.', - 'skills.setup.screenIntel.refreshStatus': 'Status aktualisieren', - 'skills.setup.screenIntel.restartRefresh': 'Neustart...', - 'skills.setup.screenIntel.restarting': 'Neustart...', - 'skills.setup.screenIntel.stepEnable': 'Aktiviere den Skill', - 'skills.setup.screenIntel.stepPermissions': 'Berechtigungen erteilen', - 'skills.setup.screenIntel.stepSuccess': 'Bereit zu gehen', - 'skills.setup.screenIntel.title': 'Bildschirmintelligenz', - 'skills.setup.screenIntel.visionModel': 'Vision-Modell', - 'skills.setup.voice.activation': 'Aktivierung', - 'skills.setup.voice.activeDescPrefix': 'Fn', - 'skills.setup.voice.activeDescSuffix': 'Fn', - 'skills.setup.voice.activeTitle': 'Sprachintelligenz ist aktiv', - 'skills.setup.voice.customizeSettings': 'Passe die Einstellungen an', - 'skills.setup.voice.downloadSttBtn': 'STT-Modell herunterladen', - 'skills.setup.voice.enableDesc': 'Diktiere Text freihändig über dein Mikrofon.', - 'skills.setup.voice.hotkey': 'Hotkey', - 'skills.setup.voice.startBtn': 'Starten...', - 'skills.setup.voice.startError': 'Der Sprachserver konnte nicht gestartet werden', - 'skills.setup.voice.starting': 'Startet...', - 'skills.setup.voice.stepEnable': 'Sprachserver starten', - 'skills.setup.voice.stepSetup': 'Modell-Download erforderlich', - 'skills.setup.voice.stepSuccess': 'Bereit zu gehen', - 'skills.setup.voice.sttNotReady': 'Speech-to-Text-Modell nicht bereit', - 'skills.setup.voice.sttNotReadyDesc': - 'Voice Intelligence erfordert für die Transkription ein lokales Whisper-Modell. Lade es aus den lokalen Modelleinstellungen herunter.', - 'skills.setup.voice.sttReady': 'Bereit für das Speech-to-Text-Modell', - 'skills.setup.voice.sttReturnHint': 'Stt-Rückgabehinweis', - 'skills.setup.voice.title': 'Sprachintelligenz', - 'skills.uninstall.couldNotUninstall': 'Konnte nicht deinstalliert werden', - 'skills.uninstall.description': - 'Dadurch werden das Skill-Verzeichnis und alle darin enthaltenen Ressourcen dauerhaft gelöscht. Der Agent wird es in der nächsten Runde nicht mehr sehen.', - 'skills.uninstall.title': 'Deinstallieren', - 'skills.uninstall.uninstallBtn': 'Deinstallieren', - 'skills.uninstall.uninstalling': 'Deinstallation…', - 'upsell.global.limitMessage': 'Aktualisiere deinen Plan oder lade Guthaben auf, um fortzufahren', - 'upsell.global.limitTitle': 'Du', - 'upsell.global.nearLimitMessage': - 'Du hast {pct} % deines Nutzungslimits verwendet. Upgrade für höhere Limits.', - 'upsell.global.nearLimitTitle': 'Das Nutzungslimit nähert sich', - 'upsell.usageLimit.bodyBudget': - 'Du hast dein wöchentliches Limit erreicht.{reset} Aktualisiere deinen Plan oder lade Guthaben auf, um Limits zu vermeiden.', - 'upsell.usageLimit.bodyRate': - 'Du hast dein 10-Stunden-Inferenzratenlimit erreicht.{reset} Führe ein Upgrade durch, um höhere Limits zu erhalten.', - 'upsell.usageLimit.heading': 'Nutzungslimit erreicht', - 'upsell.usageLimit.notNow': 'Nicht jetzt', - 'upsell.usageLimit.perWindow': '{amount}', - 'upsell.usageLimit.planIncludes': '{plan}', - 'upsell.usageLimit.resetsIn': 'Es setzt {time} zurück.', - 'upsell.usageLimit.upgradePlan': 'Upgrade-Plan', - 'upsell.usageLimit.weeklyInference': '{amount}', - 'walkthrough.tooltip.letsGo': 'Lass uns gehen!', - 'walkthrough.tooltip.next': 'Weiter →', - 'walkthrough.tooltip.skip': 'Tour überspringen', - 'walkthrough.tooltip.stepCounter': '{n} von {total}', - 'webhooks.activity.empty': 'Leer', - 'webhooks.activity.title': 'Letzte Aktivität', - 'webhooks.composioHistory.empty': 'Leer', - 'webhooks.composioHistory.metadataId': 'MetaDaten-ID', - 'webhooks.composioHistory.metadataUuid': 'Metadaten-UUID', - 'webhooks.composioHistory.payload': 'Nutzlast', - 'webhooks.composioHistory.title': 'ComposeIO Trigger-Verlauf', - 'webhooks.tunnels.active': 'Aktiv', - 'webhooks.tunnels.createFailed': 'Tunnel konnte nicht erstellt werden', - 'webhooks.tunnels.creating': 'Erstellen...', - 'webhooks.tunnels.deleteFailed': 'Tunnel konnte nicht gelöscht werden', - 'webhooks.tunnels.descriptionPlaceholder': 'Beschreibung (optional)', - 'webhooks.tunnels.echo': 'Echo', - 'webhooks.tunnels.empty': 'Leer', - 'webhooks.tunnels.enableEcho': 'Echo aktivieren', - 'webhooks.tunnels.inactive': 'Inaktiv', - 'webhooks.tunnels.namePlaceholder': 'Tunnelname (z. B. Telegram-Bot)', - 'webhooks.tunnels.newTunnel': 'Neuer Tunnel', - 'webhooks.tunnels.removeEcho': 'Echo entfernen', - 'webhooks.tunnels.title': 'Webhook-Tunnel', - 'webhooks.tunnels.toggleFailed': 'Echo konnte nicht umgeschaltet werden', - 'composio.authExpired': 'Authentifizierung abgelaufen', - 'composio.reconnect': 'Wieder verbinden', - 'composio.previewBadge': 'Vorschau', - 'composio.previewTooltip': - 'Agent-Integration folgt bald – Sie können eine Verbindung herstellen, aber der Agent kann dieses Toolkit noch nicht verwenden.', - 'composio.directModeRequiresKey': - 'Speichern fehlgeschlagen. Der Direktmodus erfordert einen nicht leeren Schlüssel API.', - 'composio.notYetRouted': 'noch nicht geroutet', - 'composio.triggers.loading': 'Laden…', - 'conversations.taskKanban.todo': 'Zu tun', - 'settings.composio.loading': 'Laden…', - 'settings.mascot.noCharactersAvailable': 'Es sind noch keine OpenHuman Zeichen verfügbar', - 'skills.uninstall.confirmTitle': '{name} deinstallieren?', - 'conversations.taskKanban.blocked': 'Blockiert', - 'conversations.taskKanban.done': 'Fertig', - 'conversations.taskKanban.pending': 'Pending', - 'conversations.taskKanban.working': 'Working', - 'conversations.taskKanban.awaitingApproval': 'Awaiting approval', - 'conversations.taskKanban.ready': 'Ready', - 'conversations.taskKanban.rejected': 'Rejected', - 'conversations.taskKanban.inProgress': 'In Bearbeitung', - 'intelligence.memoryChunk.detail.copiedHint': 'kopiert', - 'settings.composio.notYetRouted': 'noch nicht geroutet', - 'settings.localModel.download.manageExternal': - 'Verwalte dieses Modell in deiner externen Laufzeit.', - 'settings.localModel.status.manageOllamaExternal': - 'Verwalte den Ollama-Prozess und die Modell-Pulls außerhalb von OpenHuman, und führe dann die Diagnose erneut aus.', - 'settings.localModel.status.ollamaDocs': 'Ollama Dokumente', - 'settings.localModel.status.thenRetry': - 'für Setup-Anweisungen, dann versuche es erneut, sobald deine Laufzeit erreichbar ist.', - 'settings.appearance.title': 'Aussehen', - 'settings.appearance.themeHeading': 'Thema', - 'settings.appearance.themeAria': 'Thema', - 'settings.appearance.modeLight': 'Licht', - 'settings.appearance.modeLightDesc': 'Helle Flächen, dunkler Text.', - 'settings.appearance.modeDark': 'Dunkel', - 'settings.appearance.modeDarkDesc': - 'Dunkle Oberflächen, nach Einbruch der Dunkelheit angenehmer für die Augen.', - 'settings.appearance.modeSystem': 'Match-System', - 'settings.appearance.modeSystemDesc': - 'Folgt den Einstellungen für das Erscheinungsbild deines Betriebssystems.', - 'settings.appearance.helperText': - 'Der Dunkelmodus schaltet die gesamte App – Chat, Einstellungen, Bedienfelder – auf eine dunkle Palette um. „Match System“ verfolgt das Erscheinungsbild deines Betriebssystems und aktualisiert es live.', - 'settings.mascot.characterPreview': 'Vorschau', - 'settings.mascot.characterStates': 'Staaten', - 'settings.mascot.characterVisemes': 'Mundbilder', - 'settings.mascot.colorAria': 'OpenHuman Farbe', - 'settings.mascot.colorBlack': 'Schwarz', - 'settings.mascot.colorBurgundy': 'Burgund', - 'settings.mascot.colorCustom': 'Custom', - 'settings.mascot.colorNavy': 'Marine', - 'settings.mascot.primaryColor': 'Primary color', - 'settings.mascot.secondaryColor': 'Secondary color', - 'settings.mascot.colorYellow': 'Gelb', - 'settings.mascot.libraryUnavailable': 'OpenHuman Bibliothek nicht verfügbar', - 'settings.mascot.title': 'OpenHuman', - 'settings.persona.title': 'Persona', - 'settings.persona.menuTitle': 'Persona', - 'settings.persona.menuDesc': - 'Name, personality, avatar, and voice — your assistant as one identity', - 'settings.persona.identityHeading': 'Identity', - 'settings.persona.identityDesc': - 'A display name and short description for your assistant. Shown in the app; does not change how the assistant reasons.', - 'settings.persona.displayNameLabel': 'Display name', - 'settings.persona.displayNamePlaceholder': 'e.g. Nova', - 'settings.persona.descriptionLabel': 'Description', - 'settings.persona.descriptionPlaceholder': 'e.g. A calm, concise assistant for my team.', - 'settings.persona.soul.heading': 'Personality (SOUL.md)', - 'settings.persona.soul.desc': - 'The personality prompt the assistant follows in every conversation. Edits are saved to your workspace and take effect on the next reply.', - 'settings.persona.soul.editorLabel': 'SOUL.md contents', - 'settings.persona.soul.reset': 'Reset to default', - 'settings.persona.soul.usingDefault': 'Using the bundled default', - 'settings.persona.soul.loadError': 'Could not load SOUL.md', - 'settings.persona.soul.saveError': 'Could not save SOUL.md', - 'settings.persona.soul.resetError': 'Could not reset SOUL.md', - 'settings.persona.appearanceHeading': 'Avatar & Voice', - 'settings.persona.appearanceDesc': - 'Mascot color, custom GIF avatar, and reply voice are configured in Mascot settings.', - 'settings.persona.openMascotSettings': 'Open Mascot settings', - 'settings.developerMenu.composio.title': 'Composio', - 'settings.developerMenu.composio.desc': - 'Routing-Modus, Integrations-Trigger und Trigger-Verlaufsarchiv.', - 'settings.appearance.tabBarHeading': 'Untere Tab-Leiste', - 'settings.appearance.tabBarAlwaysShowLabels': 'Beschriftungen immer anzeigen', - 'settings.appearance.tabBarAlwaysShowLabelsDesc': - 'Wenn diese Option deaktiviert ist, werden Beschriftungen nur beim Hover oder für die aktive Registerkarte angezeigt.', - 'settings.mcpServer.title': 'MCP Server', - 'settings.mcpServer.toolsSectionTitle': 'Verfügbare Werkzeuge', - 'settings.mcpServer.toolsSectionDesc': - 'Werkzeuge, die über den MCP-stdio-Server bereitgestellt werden, wenn openhuman-core mcp ausgeführt wird', - 'settings.mcpServer.configSectionTitle': 'Client-Konfiguration', - 'settings.mcpServer.configSectionDesc': - 'Wähle deinen MCP-Client aus, um den passenden Konfigurationsausschnitt zu erzeugen', - 'settings.mcpServer.copySnippet': 'In die Zwischenablage kopieren', - 'settings.mcpServer.copied': 'Kopiert!', - 'settings.mcpServer.openConfigFile': 'Konfigurationsdatei öffnen', - 'settings.mcpServer.binaryPathNotFound': - 'OpenHuman-Binärdatei nicht gefunden. Wenn du aus dem Quellcode arbeitest, baue sie mit: cargo build --bin openhuman-core', - 'settings.mcpServer.openConfigError': 'Konfigurationsdatei konnte nicht geöffnet werden', - 'settings.mcpServer.clientClaudeDesktop': 'Claude Desktop', - 'settings.mcpServer.clientCursor': 'Cursor', - 'settings.mcpServer.clientCodex': 'Codex', - 'settings.mcpServer.clientZed': 'Zed', - 'settings.mcpServer.configFilePath': 'Konfigurationsdatei', - 'settings.mcpServer.clientSelectorAriaLabel': 'MCP-Client-Auswahl', - - 'common.breadcrumb': 'Breadcrumb', - 'settings.betaBuild': 'Beta-Build – v{version}', - 'migration.vendor.openclaw': 'OpenClaw', - 'migration.vendor.hermes': 'Hermes Agent', - 'onboarding.apiKeys.openaiOauthHint': - 'Verwenden Sie ChatGPT Plus/Pro (Abonnement) oder einen OpenAI API-Schlüssel – nicht beides erforderlich.', - 'onboarding.apiKeys.openaiOauthOpening': 'Anmeldung öffnen…', - 'onboarding.apiKeys.finishSignIn': 'ChatGPT-Anmeldung abschließen', - 'onboarding.apiKeys.orApiKey': 'oder API-Taste', - 'app.localAiDownload.expandAria': 'Download-Fortschritt erweitern', - 'app.localAiDownload.collapseAria': 'Download-Fortschritt reduzieren', - 'app.localAiDownload.dismissAria': 'Download-Benachrichtigung verwerfen', - 'mobile.nav.ariaLabel': 'Mobile Navigation', - 'progress.stepsAria': 'Fortschrittsschritte', - 'progress.stepAria': 'Schritt {current} von {total}', - 'workspace.vaultsTitle': 'Wissensdepots', - 'workspace.vaultsDesc': - 'Zeigen Sie auf einen lokalen Ordner; Dateien werden aufgeteilt und in den Speicher gespiegelt.', - 'calls.title': 'Anrufe', - 'calls.comingSoonBody': 'KI-gestützte Anrufe folgen bald. Bleiben Sie dran.', - 'art.rotatingTetrahedronAria': 'Rotierendes umgekehrtes Tetraeder-Raumschiff', - 'devOptions.sentryDisabled': '(keine ID – Sentry in diesem Build deaktiviert)', - 'composio.expiredAuthorization': '{name}-Autorisierung abgelaufen', - 'composio.expiredDescription': - 'Stellen Sie die Verbindung erneut her, um {name}-Tools erneut zu aktivieren. OpenHuman sorgt dafür, dass diese Integration nicht verfügbar bleibt, bis Sie den OAuth-Zugriff aktualisieren.', - 'channels.telegram.remoteControlTitle': 'Fernsteuerung (Telegram)', - 'channels.telegram.remoteControlBody': - 'Senden Sie von einem zulässigen Telegram-Chat aus /status, /sessions, /new oder /help. Das Modellrouting verwendet weiterhin /model und /models.', - 'rewards.referralSection.retry': 'Wiederholen', - 'settings.ai.plannerSummary': - 'Planer: {sourceEvents} Quellereignisse, {sent} gesendet, {deduped} dedupliziert.', - 'settings.ai.routeLabel': 'Route: {route}', - 'settings.ai.latestSpend': 'Letzte Ausgaben: {amount} um {time} ({action})', - 'settings.ai.topActions': 'Top-Aktionen', - 'settings.ai.noSpendRows': 'Keine Ausgabenzeilen geladen.', - 'settings.ai.topHours': 'Top-Stunden', - 'settings.ai.noHourlySpend': 'Noch keine stündlichen Ausgaben.', - 'settings.autocomplete.appFilter.app': 'App', - 'settings.autocomplete.appFilter.currentSuggestion': 'Aktueller Vorschlag', - 'settings.autocomplete.appFilter.debounce': 'Entprellen', - 'settings.autocomplete.appFilter.enabled': 'Aktiviert', - 'settings.autocomplete.appFilter.lastError': 'Letzter Fehler', - 'settings.autocomplete.appFilter.model': 'Modell', - 'settings.autocomplete.appFilter.phase': 'Phase', - 'settings.autocomplete.appFilter.platformSupported': 'Unterstützte Plattform', - 'settings.autocomplete.appFilter.running': 'Wird ausgeführt', - 'settings.autocomplete.debug.acceptedPrefix': 'Akzeptiert: {value}', - 'settings.autocomplete.debug.acceptFailed': 'Vorschlag konnte nicht angenommen werden', - 'settings.autocomplete.debug.alreadyRunning': 'Autocomplete läuft bereits.', - 'settings.autocomplete.debug.clearHistoryFailed': 'Der Verlauf konnte nicht gelöscht werden.', - 'settings.autocomplete.debug.didNotStart': - 'Die automatische Vervollständigung wurde nicht gestartet.', - 'settings.autocomplete.debug.disabledInSettings': - 'Die automatische Vervollständigung ist in den Einstellungen deaktiviert. Aktivieren Sie es und speichern Sie es zunächst.', - 'settings.autocomplete.debug.fetchSuggestionFailed': - 'Der aktuelle Vorschlag konnte nicht abgerufen werden.', - 'settings.autocomplete.debug.inspectFocusedElementFailed': - 'Das fokussierte Element konnte nicht überprüft werden.', - 'settings.autocomplete.debug.loadSettingsFailed': - 'Die Einstellungen für die automatische Vervollständigung konnten nicht geladen werden.', - 'settings.autocomplete.debug.noSuggestionApplied': 'Es wurde kein Vorschlag angewendet.', - 'settings.autocomplete.debug.noSuggestionReturned': 'Kein Vorschlag zurückgegeben.', - 'settings.autocomplete.debug.refreshStatusFailed': - 'Der Status der automatischen Vervollständigung konnte nicht aktualisiert werden.', - 'settings.autocomplete.debug.saveAdvancedSettingsFailed': - 'Die erweiterten Einstellungen konnten nicht gespeichert werden.', - 'settings.autocomplete.debug.startFailed': - 'Die automatische Vervollständigung konnte nicht gestartet werden.', - 'settings.autocomplete.debug.stopFailed': - 'Die automatische Vervollständigung konnte nicht gestoppt werden.', - 'settings.autocomplete.debug.suggestionPrefix': 'Vorschlag: {value}', - 'settings.autocomplete.shared.none': 'Keine', - 'settings.autocomplete.shared.notApplicable': 'n/a', - 'settings.autocomplete.shared.unknown': 'Unbekannt', - 'settings.billing.autoRecharge.expires': 'Läuft ab {date}', - 'settings.billing.autoRecharge.spentThisWeek': '${spent} von ${limit} diese Woche verwendet', - 'settings.localModel.deviceCapability.disabledLowercase': 'deaktiviert', - 'settings.localModel.deviceCapability.presetDetails': - 'Chat: {chatModel} · Vision: {visionModel} · Ziel-RAM: {targetRamGb} GB', - 'settings.localModel.download.capabilityChat': 'Chat', - 'settings.localModel.download.capabilityEmbedding': 'Einbettung', - 'settings.localModel.download.capabilityStt': 'STT', - 'settings.localModel.download.capabilityTts': 'TTS', - 'settings.localModel.download.capabilityVision': 'Vision', - 'settings.localModel.download.embeddingDimensions': 'Abmessungen: {dimensions}', - 'settings.localModel.download.embeddingModel': 'Modell: {modelId}', - 'settings.localModel.download.embeddingVectors': 'Vektoren: {count}', - 'settings.localModel.download.notAvailable': 'n/a', - 'settings.localModel.download.summaryHelper': - 'Ruft „openhuman.inference_summarize“ über den Rust-Kern auf', - 'settings.localModel.download.transcript': 'Transkript:', - 'settings.localModel.download.ttsOutput': 'Ausgabe: {outputPath}', - 'settings.localModel.download.ttsVoice': 'Stimme: {voiceId}', - 'settings.localModel.status.contextBelowMinimumBadge': - '{contextLength} ctx – unter {required} min', - 'settings.localModel.status.contextBelowMinimumTitle': - 'Abgelehnt: Kontextfenster-{contextLength}-Token liegen unter dem {required}-Token-Mindestwert, den die Speicherschicht erfordert. Der Rückruf würde durch stilles Abschneiden beschädigt werden.', - 'settings.localModel.status.contextOkBadge': '{contextLength} ctx ✓', - 'settings.localModel.status.contextOkTitle': - 'Kontextfenster {contextLength}-Tokens erfüllen das Minimum an {required}-Tokens auf der Speicherebene.', - 'settings.localModel.status.contextUnknownBadge': 'ctx unbekannt', - 'settings.localModel.status.contextUnknownTitle': - 'Kontextfenster unbekannt; Es konnte nicht bestätigt werden, dass das {required}-Token-Memory-Layer-Mindestniveau erreicht wird.', - 'settings.localModel.status.expectedChat': 'Chat: {model}', - 'settings.localModel.status.expectedEmbedding': 'Einbettung: {model}', - 'settings.localModel.status.expectedVision': 'Vision: {model}', - 'settings.localModel.status.externalProcess': 'Externer Prozess', - 'settings.localModel.status.notAvailable': 'n/a', - 'settings.mascot.customGifPlaceholder': 'https://example.com/avatar.gif', - 'settings.mascot.loadDetailError': 'Maskottchen konnte nicht geladen werden.', - 'settings.mascot.loadLibraryError': 'Maskottchenbibliothek konnte nicht geladen werden.', - 'settings.mascot.voice.customPlaceholder': 'z.B. 21m00Tcm4TlvDq8ikWAM', - 'settings.mascot.voice.previewText': "Hi, I'm your assistant. This is a voice preview.", - 'skills.channelIcon.discord': 'Discord', - 'skills.channelIcon.imessage': 'iMessage', - 'skills.channelIcon.telegram': 'Telegram', - 'skills.channelIcon.web': 'Web', - 'skills.channelIcon.yuanbao': 'Yuanbao', - 'skills.composio.poweredBy': 'Unterstützt von Composio', - 'skills.composio.staleStatusTitle': 'Verbindungen zeigen den veralteten Status an', - 'skills.create.allowedToolsHelp': 'Im SKILL.md-Frontmatter gerendert als', - 'skills.create.allowedToolsPlaceholder': 'node_exec, fetch', - 'skills.create.licensePlaceholder': 'MIT', - 'skills.create.tagsPlaceholder': 'Handel, Forschung', - 'skills.install.errors.alreadyInstalledHint': - 'Ein Skill mit diesem Slug ist bereits im Arbeitsbereich vorhanden. Entfernen Sie es zuerst oder ändern Sie die Frontmatter „metadata.id“ / „name“.', - 'skills.install.errors.alreadyInstalledTitle': 'Skill bereits installiert', - 'skills.install.errors.fetchFailedHint': - 'Die Anfrage wurde nicht erfolgreich abgeschlossen. Überprüfen Sie, ob URL auf eine erreichbare öffentliche Datei verweist und ob der Host eine 2xx-Antwort zurückgegeben hat.', - 'skills.install.errors.fetchFailedTitle': 'Abruf fehlgeschlagen', - 'skills.install.errors.fetchTimedOutHint': - 'Der Remote-Host hat nicht rechtzeitig geantwortet. Versuchen Sie es erneut oder erhöhen Sie das Timeout (1–600 s).', - 'skills.install.errors.fetchTimedOutTitle': 'Zeitüberschreitung beim Abruf', - 'skills.install.errors.fetchTooLargeHint': - 'Die Datei SKILL.md muss unter 1 MiB liegen. Teilen Sie gebündelte Ressourcen in „references/“- oder „scripts/“-Dateien auf, anstatt sie einzubinden.', - 'skills.install.errors.fetchTooLargeTitle': 'SKILL.md zu groß', - 'skills.install.errors.genericHint': - 'Das Backend hat einen Fehler zurückgegeben. Die Rohnachricht wird unten angezeigt.', - 'skills.install.errors.genericTitle': 'Skill konnte nicht installiert werden', - 'skills.install.errors.invalidSkillHint': - 'Der Frontmatter muss gültiges YAML mit nicht leeren Feldern „Name“ und „Beschreibung“ sein, abgeschlossen durch „---“.', - 'skills.install.errors.invalidSkillTitle': 'SKILL.md hat nicht geparst', - 'skills.install.errors.invalidUrlHint': - 'Nur öffentliche HTTPS URLs sind zulässig. Private, Loopback- und Metadaten-Hosts werden blockiert.', - 'skills.install.errors.invalidUrlTitle': 'URL abgelehnt', - 'skills.install.errors.unsupportedUrlHint': - 'Nur direkte „.md“-Links funktionieren. Für GitHub: Link zu einer Datei (github.com/owner/repo/blob/.../SKILL.md) – Baum- und Repo-Roots sind nicht installiert.', - 'skills.install.errors.unsupportedUrlTitle': 'URL-Formular nicht unterstützt', - 'skills.install.errors.writeFailedHint': - 'Das Workspace-Skills-Verzeichnis war nicht beschreibbar. Überprüfen Sie die Dateisystemberechtigungen für „/.openhuman/skills/“.', - 'skills.install.errors.writeFailedTitle': 'SKILL.md konnte nicht geschrieben werden.', - 'skills.install.fetchingPrefix': 'Das Abrufen von', - 'skills.install.fetchingSuffix': 'kann bis zu dem von Ihnen konfigurierten Timeout dauern.', - 'skills.install.subtitleMiddle': 'über HTTPS und installiert es unter', - 'skills.install.subtitlePrefix': 'Ruft nur einen einzelnen', - 'skills.install.subtitleSuffix': 'HTTPS ab; Private und Loopback-Hosts werden blockiert.', - 'skills.install.successDiscovered': '{count} neue Fähigkeiten entdeckt.', - 'skills.install.successNoNewIds': - 'Skill installiert, aber keine neuen Skill-IDs erschienen – der Katalog enthält möglicherweise bereits einen Skill mit demselben Slug.', - 'skills.install.timeoutHelp': - 'Standardmäßig 60 Sekunden. Werte außerhalb von 1-600 werden serverseitig begrenzt.', - 'skills.install.timeoutInvalid': 'Muss eine Ganzzahl zwischen 1 und 600 sein.', - 'skills.install.timeoutPlaceholder': '60', - 'skills.install.urlHelpMiddle': 'Datei.', - 'skills.install.urlHelpPrefix': 'Direkter Link zu einem', - 'skills.install.urlHelpSuffix': 'URLs, zu dem automatisch umgeschrieben wird', - 'skills.install.urlInvalidPrefix': 'URL muss wohlgeformt sein', - 'skills.install.urlInvalidSuffix': 'Link.', - 'skills.install.urlPlaceholder': 'https://raw.githubusercontent.com/owner/repo/main/SKILL.md', - 'skills.meetingBots.platformComingSoon': '{label}-Unterstützung ist bald verfügbar.', - 'skills.meetingBots.platformHints.gmeet': 'meet.google.com/abc-defg-hij', - 'skills.meetingBots.platformHints.teams': 'teams.microsoft.com/...', - 'skills.meetingBots.platformHints.zoom': 'zoom.us/j/...', - 'skills.meetingBots.platforms.gmeet': 'Google Treffen Sie', - 'skills.meetingBots.platforms.teams': 'Microsoft Teams', - 'skills.meetingBots.platforms.zoom': 'Zoom', - 'skills.meetingBots.soonSuffix': 'bald', - 'skills.setup.screenIntel.permissionPathLabel': 'macOS wendet Datenschutz an:', - 'settings.agentAccess.title': 'Agent OS access', - 'settings.agentAccess.menuDesc': - 'Control where the agent can read/write and whether it can use the shell.', - 'settings.agentAccess.loadError': 'Failed to load access settings', - 'settings.agentAccess.saveError': 'Failed to save access settings', - 'settings.agentAccess.saved': 'Saved — applies on your next message.', - 'settings.agentAccess.desktopOnly': 'Access settings are only available in the desktop app.', - 'settings.agentAccess.loading': 'Loading…', - 'settings.agentAccess.accessMode': 'Access mode', - 'settings.agentAccess.tier.readonly.title': 'Read-only', - 'settings.agentAccess.tier.readonly.desc': - 'Reads files and runs read-only commands to explore — but never writes, edits, or runs anything that changes state.', - 'settings.agentAccess.tier.supervised.title': 'Ask before edit', - 'settings.agentAccess.tier.supervised.desc': - 'Creates new files freely, but asks for your approval before editing an existing file, running a command, reaching the network, or installing anything.', - 'settings.agentAccess.tier.full.title': 'Full access', - 'settings.agentAccess.tier.full.desc': - 'Runs commands with your full user account access — it can read/write anywhere allowed, except credential and system stores. Destructive commands, network access, and installs still ask for approval.', - 'settings.agentAccess.defaultTag': '(default)', - 'settings.agentAccess.fullWarning': - '⚠ Full access runs commands with your full account access and is not sandboxed. Only enable it when you trust the agent with this machine. Credential and system directories stay blocked, and destructive, network, and install actions still ask for approval.', - 'settings.agentAccess.confine.label': 'Confine to workspace', - 'settings.agentAccess.confine.desc': - 'Restrict the agent to the workspace directory (plus any granted folders), whichever access mode is selected. When off, it can reach anywhere your user can — except the always-blocked credential and system directories.', - 'settings.agentAccess.grantedFolders': 'Granted folders', - 'settings.agentAccess.alwaysAllow': 'Always-allowed tools', - 'settings.agentAccess.alwaysAllowDesc': - 'Tools you marked "Always allow" in chat run without asking. Remove one to be prompted again.', - 'settings.agentAccess.alwaysAllowNone': 'No always-allowed tools yet.', - 'settings.agentAccess.grantedDesc': - 'Folders the agent may read and write, in addition to the workspace. Credential stores (~/.ssh, ~/.gnupg, ~/.aws, keychains) and system directories (/etc, /System, C:\\Windows, …) are always blocked, even inside a granted folder.', - 'settings.agentAccess.noneGranted': 'No folders granted.', - 'settings.agentAccess.readWrite': 'read + write', - 'settings.agentAccess.readOnly': 'read-only', - 'settings.agentAccess.remove': 'Remove', - 'settings.agentAccess.pathPlaceholder': 'Absoluter Ordnerpfad', - 'settings.agentAccess.accessLevelLabel': 'Access level', - 'settings.agentAccess.add': 'Add', - 'settings.agentAccess.saving': 'Saving…', - 'settings.agentAccess.changesApply': 'Changes apply on your next message.', - 'skills.tabs.runners': 'Runners', - 'settings.developerMenu.skillsRunner.title': 'Skills Runner', - 'settings.developerMenu.skillsRunner.desc': - 'Run any bundled skill ad-hoc — fill its inputs and fire a background autonomous run', - 'settings.developerMenu.skillsRunner.panelDesc': - 'Pick a bundled skill, fill in its declared inputs, and fire a fire-and-forget background run. Use Dev Workflow instead if you want a cron-scheduled recurring job.', - 'settings.skillsRunner.skill': 'Skill', - 'settings.skillsRunner.selectSkill': 'Select a skill…', - 'settings.skillsRunner.loadingSkills': 'Loading skills…', - 'settings.skillsRunner.loadingDescription': 'Loading skill inputs…', - 'settings.skillsRunner.noInputs': 'This skill declares no inputs.', - 'settings.skillsRunner.placeholder.required': 'required', - 'settings.skillsRunner.runNow': 'Run now', - 'settings.skillsRunner.starting': 'Starting…', - 'settings.skillsRunner.started': 'Started — run id:', - 'settings.skillsRunner.logPath': 'Log:', - 'settings.skillsRunner.error.listSkills': 'Failed to load skills:', - 'settings.skillsRunner.error.describe': 'Failed to load inputs:', - 'settings.skillsRunner.error.missingRequired': 'Missing required input(s):', - 'settings.skillsRunner.error.run': 'Run failed to start:', - 'settings.skillsRunner.error.preflightGate': 'Preflight gate failed', - 'settings.skillsRunner.schedule.heading': 'Schedule (recurring)', - 'settings.skillsRunner.schedule.help': - 'Save this skill + inputs as a recurring cron job. The agent will call run_skill at each tick.', - 'settings.skillsRunner.schedule.frequency': 'Frequency', - 'settings.skillsRunner.schedule.every30min': 'Every 30 minutes', - 'settings.skillsRunner.schedule.everyHour': 'Every hour', - 'settings.skillsRunner.schedule.every2hours': 'Every 2 hours', - 'settings.skillsRunner.schedule.every6hours': 'Every 6 hours', - 'settings.skillsRunner.schedule.onceDaily': 'Once daily (9:00)', - 'settings.skillsRunner.schedule.save': 'Save schedule', - 'settings.skillsRunner.schedule.saving': 'Saving…', - 'settings.skillsRunner.schedule.saved': 'Schedule saved.', - 'settings.skillsRunner.schedule.error': 'Schedule save failed:', - 'settings.skillsRunner.schedule.loadingJobs': 'Loading existing schedules…', - 'settings.skillsRunner.schedule.noJobs': 'No schedules saved for this skill yet.', - 'settings.skillsRunner.schedule.existing': 'Scheduled jobs for this skill:', - 'settings.skillsRunner.schedule.runNow': 'Run', - 'settings.skillsRunner.schedule.remove': 'Remove', - 'settings.skillsRunner.recentRuns.headingForSkill': 'Recent runs for this skill', - 'settings.skillsRunner.recentRuns.headingAll': 'Recent skill runs (all)', - 'settings.skillsRunner.recentRuns.refresh': 'Refresh', - 'settings.skillsRunner.recentRuns.loading': 'Loading recent runs…', - 'settings.skillsRunner.recentRuns.empty': 'No recent runs.', - 'settings.skillsRunner.viewer.loading': 'Loading log…', - 'settings.skillsRunner.viewer.tailing': 'Live tailing', - 'settings.skillsRunner.viewer.fetching': 'fetching', - 'settings.skillsRunner.viewer.error': 'Log read failed:', - 'settings.skillsRunner.repoPicker.loading': 'Loading repositories…', - 'settings.skillsRunner.repoPicker.select': 'Select a repository…', - 'settings.skillsRunner.repoPicker.empty': - 'No repositories returned. Connect GitHub via Composio to populate this list.', - 'settings.skillsRunner.repoPicker.notConnected': - 'GitHub isn’t connected via Composio. Connect it under Skills → Composio first.', - 'settings.skillsRunner.repoPicker.privateTag': '(private)', - 'settings.skillsRunner.branchPicker.needRepo': 'Pick a repo first…', - 'settings.skillsRunner.branchPicker.loading': 'Loading branches…', - 'settings.skillsRunner.branchPicker.select': 'Select a branch…', - 'settings.modelHealth.title': 'Model Health', - 'settings.modelHealth.desc': - 'Per-model quality, hallucination rate, and cost comparison across active models', - 'settings.modelHealth.allStatuses': 'All statuses', - 'settings.modelHealth.models': 'models', - 'settings.modelHealth.loading': 'Loading model data...', - 'settings.modelHealth.empty': 'No models registered', - 'settings.modelHealth.col.model': 'Model', - 'settings.modelHealth.col.quality': 'Quality', - 'settings.modelHealth.col.halluc': 'Halluc. Rate', - 'settings.modelHealth.col.cost': 'Cost / 1M out', - 'settings.modelHealth.col.agents': 'Agents', - 'settings.modelHealth.col.status': 'Status', - 'settings.modelHealth.badge.keep': 'Keep', - 'settings.modelHealth.badge.replace': 'Replace', - 'settings.modelHealth.badge.staging': 'Staging test', - 'settings.modelHealth.badge.vision': 'Vision only', - 'settings.modelHealth.swap': 'Swap?', - 'settings.modelHealth.modal.title': 'Replace Model?', - 'settings.modelHealth.modal.hallucRate': 'Hallucination rate', - 'settings.modelHealth.modal.cancel': 'Cancel', - 'settings.modelHealth.modal.apply': 'Apply Replacement', - 'settings.modelHealth.tag.cheaper': 'CHEAPER', - 'settings.modelHealth.tag.better': 'BETTER', - // Task sources (#task-sources) - 'settings.taskSources.title': 'Task Sources', - 'settings.taskSources.subtitle': 'Pull tasks from your tools onto the agent todo board', - 'settings.taskSources.description': - 'Collect work items from GitHub, Notion, Linear, and ClickUp, enrich them, and route them onto the agent todo board.', - 'settings.taskSources.connectHint': - 'Task sources use your connected accounts. Connect them under Integrations first.', - 'settings.taskSources.disabledBanner': - 'Task sources are disabled in settings. Enable them to poll automatically.', - 'settings.taskSources.loadError': 'Failed to load task sources', - 'settings.taskSources.addTitle': 'Add a task source', - 'settings.taskSources.provider': 'Provider', - 'settings.taskSources.name': 'Name (optional)', - 'settings.taskSources.namePlaceholder': 'e.g. My open issues', - 'settings.taskSources.github.repo': 'Repository (owner/name, optional)', - 'settings.taskSources.github.labels': 'Labels (comma-separated)', - 'settings.taskSources.notion.database': 'Database (board) ID', - 'settings.taskSources.linear.team': 'Team ID (optional)', - 'settings.taskSources.clickup.team': 'Workspace (team) ID (optional)', - 'settings.taskSources.assignedToMe': 'Only items assigned to me', - 'settings.taskSources.add': 'Add source', - 'settings.taskSources.adding': 'Adding…', - 'settings.taskSources.preview': 'Preview', - 'settings.taskSources.previewResult': '{count} task(s) match this filter', - 'settings.taskSources.fetchNow': 'Fetch now', - 'settings.taskSources.fetching': 'Fetching…', - 'settings.taskSources.fetchResult': 'Routed {routed} of {fetched} task(s)', - 'settings.taskSources.configured': 'Configured sources', - 'settings.taskSources.empty': 'No task sources configured yet.', - 'settings.taskSources.proactive': 'Proactive', - 'settings.taskSources.lastFetch': 'Last fetch', - 'settings.taskSources.never': 'Never', - 'settings.taskSources.statusEnabled': 'Enabled', - 'settings.taskSources.statusDisabled': 'Disabled', - 'settings.taskSources.enable': 'Enable', - 'settings.taskSources.disable': 'Disable', - 'settings.taskSources.remove': 'Remove', - 'settings.taskSources.removeConfirm': - 'Remove this task source? All ingested task history will be deleted and cannot be undone.', - - 'settings.taskSources.refresh': 'Refresh', - // Task sources provider labels (#task-sources) - 'settings.taskSources.providers.github': 'GitHub', - 'settings.taskSources.providers.notion': 'Notion', - 'settings.taskSources.providers.linear': 'Linear', - 'settings.taskSources.providers.clickup': 'ClickUp', - - // /skills IA restructure (Phase 2/3) — dashboard + new-skill page. - 'skills.dashboard.title': 'Skills', - 'skills.dashboard.scheduledHeading': 'Scheduled skills', - 'skills.dashboard.emptyTitle': 'No scheduled skills', - 'skills.dashboard.emptyBody': - 'Run a bundled skill once or save a recurring schedule to see it here.', - 'skills.dashboard.create': 'Create a Skill', - 'skills.dashboard.run': 'Run a Skill', - 'skills.dashboard.enable': 'Enable scheduled skill', - 'skills.dashboard.disable': 'Disable scheduled skill', - 'skills.dashboard.lastRun': 'Last run', - 'skills.dashboard.nextRun': 'Next run', - 'skills.dashboard.cardOpenRunner': 'Open in runner', - 'skills.dashboard.loadError': 'Failed to load scheduled skills', - 'skills.new.title': 'Create a skill', - 'skills.new.placeholderBody': - 'Authoring form arrives soon. For now, use the “New skill” button on the runner page.', - 'settings.agentAccess.requireTaskPlanApproval.label': 'Require task plan approval', - 'settings.agentAccess.requireTaskPlanApproval.desc': - 'Pause before an assigned agent executes an agent-authored task brief.', -}; - -export default de5; diff --git a/app/src/lib/i18n/chunks/en-1.ts b/app/src/lib/i18n/chunks/en-1.ts deleted file mode 100644 index 797f6f7e5..000000000 --- a/app/src/lib/i18n/chunks/en-1.ts +++ /dev/null @@ -1,1609 +0,0 @@ -import type { TranslationMap } from '../types'; - -// English chunk 1/5. Source of truth for translators. -const en1: TranslationMap = { - 'nav.home': 'Home', - 'nav.human': 'Human', - 'nav.chat': 'Chat', - 'nav.connections': 'Connections', - 'nav.memory': 'Intelligence', - 'nav.alerts': 'Alerts', - 'nav.rewards': 'Rewards', - 'nav.settings': 'Settings', - 'common.cancel': 'Cancel', - 'common.save': 'Save', - 'common.confirm': 'Confirm', - 'common.delete': 'Delete', - 'common.edit': 'Edit', - 'common.create': 'Create', - 'common.search': 'Search', - 'common.loading': 'loading…', - 'common.error': 'Error', - 'common.success': 'Success', - 'common.back': 'Back', - 'common.next': 'Next', - 'common.finish': 'Finish', - 'common.close': 'Close', - 'common.enabled': 'Enabled', - 'common.disabled': 'Disabled', - 'common.on': 'On', - 'common.off': 'Off', - 'common.yes': 'Yes', - 'common.no': 'No', - 'common.ok': 'Got it', - 'common.name': 'Name', - 'common.retry': 'Try again', - 'common.copy': 'Copy', - 'common.copied': 'Copied', - 'common.learnMore': 'Learn more', - 'common.seeAll': 'View', - 'common.dismiss': 'Dismiss', - 'common.clear': 'Clear', - 'common.reset': 'Reset', - 'common.refresh': 'Refresh', - 'common.export': 'Export', - 'common.import': 'Import', - 'common.upload': 'Upload', - 'common.download': 'Download', - 'common.add': 'Add', - 'common.remove': 'Remove', - 'common.showMore': 'Show more', - 'common.showLess': 'Show less', - 'common.submit': 'Submit', - 'common.continue': 'Continue', - 'common.comingSoon': 'Coming Soon', - 'settings.ai.disconnectProvider': 'Disconnect {label}', - 'settings.ai.connectProviderLabel': 'Connect {label}', - 'settings.ai.defaultLocalEndpoint': 'http://localhost:11434/v1', - 'settings.ai.endpointUrlLabel': 'Endpoint URL', - 'settings.ai.localRuntimeHelper': - 'Where {label} is reachable. Default is localhost; point this at a remote host (for example, http://10.0.0.4:11434/v1) to use a shared instance.', - 'settings.ai.endpointUrlRequired': 'Endpoint URL is required.', - 'settings.ai.endpointProtocolRequired': 'Endpoint must start with http:// or https://.', - 'settings.ai.connectProviderDialog': 'Connect {label}', - 'settings.ai.or': 'Or', - 'settings.ai.openRouterOauthDescription': - 'Sign in with OpenRouter and import a user-controlled API key using PKCE.', - 'settings.ai.connecting': 'Connecting...', - 'settings.ai.backgroundLoops': 'Background loops', - 'settings.ai.backgroundLoopsDesc': - 'See what runs without a chat message, pause heartbeat work, and inspect recent credit ledger rows.', - 'settings.ai.heartbeatControls': 'Heartbeat controls', - 'settings.ai.heartbeatControlsDesc': - 'Defaults off. Enabling starts the loop; disabling aborts the running task.', - 'settings.ai.heartbeatLoop': 'Heartbeat loop', - 'settings.ai.heartbeatLoopDesc': - 'Master scheduler for planner + optional subconscious inference.', - 'settings.ai.subconsciousInference': 'Subconscious inference', - 'settings.ai.subconsciousInferenceDesc': - 'Runs model-backed task/reflection evaluation on heartbeat ticks.', - 'settings.ai.calendarMeetingChecks': 'Calendar meeting checks', - 'settings.ai.calendarMeetingChecksDesc': - 'Calls calendar event list for active Google Calendar connections.', - 'settings.ai.calendarCap': 'Calendar cap', - 'settings.ai.connectionsPerTick': '{count} conn/tick', - 'settings.ai.meetingLookahead': 'Meeting lookahead', - 'settings.ai.minutesShort': '{count} min', - 'settings.ai.reminderLookahead': 'Reminder lookahead', - 'settings.ai.cronReminderChecks': 'Cron reminder checks', - 'settings.ai.cronReminderChecksDesc': 'Scans enabled cron jobs for reminder-like upcoming items.', - 'settings.ai.relevantNotificationChecks': 'Relevant notification checks', - 'settings.ai.relevantNotificationChecksDesc': - 'Promotes urgent local notifications into proactive alerts.', - 'settings.ai.externalDelivery': 'External delivery', - 'settings.ai.externalDeliveryDesc': - 'Lets heartbeat alerts send proactive messages to external channels.', - 'settings.ai.interval': 'Interval', - 'settings.ai.running': 'Running...', - 'settings.ai.plannerTickNow': 'Planner tick now', - 'settings.ai.loadingHeartbeatControls': 'Loading heartbeat controls...', - 'settings.ai.heartbeatControlsUnavailable': 'Heartbeat controls unavailable.', - 'settings.ai.loopMap': 'Loop map', - 'settings.ai.on': 'on', - 'settings.ai.off': 'off', - 'settings.ai.recentUsageLedger': 'Recent usage ledger', - 'settings.ai.recentUsageLedgerDesc': - 'Backend rows expose action/time today; source tags need backend support.', - 'settings.ai.openhumanDefault': 'OpenHuman (default)', - 'settings.ai.localModelResolved': 'Ollama · {model}', - 'settings.ai.customRoutingForWorkload': 'Custom routing for {label}', - 'settings.ai.loadingModels': 'Loading models...', - 'settings.ai.enterModelIdManually': 'or enter model id manually:', - 'settings.ai.modelIdPlaceholderForProvider': '{slug} model id', - 'settings.ai.modelIdPlaceholder': 'model-id', - 'settings.ai.selectModel': 'Select a model...', - 'settings.ai.temperatureOverride': 'Temperature override', - 'settings.ai.temperatureOverrideSlider': 'Temperature override (slider)', - 'settings.ai.temperatureOverrideValue': 'Temperature override (value)', - 'settings.ai.temperatureOverrideDesc': - 'Lower = more deterministic. Leave unchecked to use the provider default.', - 'settings.ai.testFailed': 'Test failed', - 'settings.ai.testingModel': 'Testing model...', - 'settings.ai.modelResponse': 'Model response', - 'settings.ai.providerWithValue': 'Provider: {value}', - 'settings.ai.noneDash': '—', - 'settings.ai.promptHelloWorld': 'Prompt: Hello world', - 'settings.ai.startedAt': 'Started: {value}', - 'settings.ai.waitingForModelResponse': 'Waiting for response from the selected model...', - 'settings.ai.response': 'Response', - 'settings.ai.testing': 'Testing...', - 'settings.ai.test': 'Test', - 'settings.ai.slugMissingError': 'Enter a provider name to generate a slug.', - 'settings.ai.slugInUseError': 'That provider name is already in use.', - 'settings.ai.slugReservedError': 'Choose a different provider name.', - 'settings.ai.providerNamePlaceholder': 'My Provider', - 'settings.ai.slugLabel': 'Slug:', - 'settings.ai.openAiUrlLabel': 'OpenAI URL', - 'settings.ai.openAiUrlPlaceholder': 'https://api.openai.com/v1', - 'settings.ai.keepExistingKeyPlaceholder': 'Leave blank to keep existing key', - 'settings.ai.reindexingMemory': 'Re-indexing memory', - 'settings.ai.reindexingMemoryMessage': - 'Embeddings are being reprocessed. {pending} memory item(s) are being re-embedded under the current model — semantic recall is reduced until this finishes. Keyword search keeps working, and re-embedding continues in the background if you close this.', - 'settings.ai.signInWithOpenRouter': 'Sign in with OpenRouter', - 'settings.ai.weekBudget': 'Week budget', - 'settings.ai.cycleRemaining': 'Cycle remaining', - 'settings.ai.cycleTotalSpend': 'Cycle total spend', - 'settings.ai.avgSpendRow': 'Avg spend row', - 'settings.ai.backgroundApiReads': 'Bg API reads', - 'settings.ai.backgroundWakeups': 'Bg wakeups', - 'settings.ai.budgetMath': 'Budget math', - 'settings.ai.rowsLeft': 'Rows left', - 'settings.ai.rowsPerFullWeekBudget': 'Rows per full week budget', - 'settings.ai.sampleBurnRate': 'Sample burn rate', - 'settings.ai.projectedEmpty': 'Projected empty', - 'settings.ai.apiReadsPerDollarRemaining': 'API reads per $ remaining', - 'settings.ai.loopCallBudget': 'Loop call budget', - 'settings.ai.heartbeatTicks': 'Heartbeat ticks', - 'settings.ai.calendarPlannerCalls': 'Calendar planner calls', - 'settings.ai.calendarFanoutCap': 'Calendar fanout cap', - 'settings.ai.subconsciousModelCalls': 'Subconscious model calls', - 'settings.ai.composioSyncScans': 'Composio sync scans', - 'settings.ai.totalBackgroundApiReadBudget': 'Total bg API read budget', - 'settings.ai.memoryWorkerPolls': 'Memory worker polls', - 'settings.ai.defaultProviderName': 'OpenHuman', - 'settings.ai.routing.managed': 'Managed', - 'settings.ai.routing.managedDesc': - 'OpenHuman will run all inference in the cloud, choose the best model for the task, optimize for cost, and keep the safest routing defaults.', - 'settings.ai.routing.managedMsg': - 'OpenHuman will handle all inference for every workload and automatically choose the best route for cost, quality, and security.', - 'settings.ai.routing.useYourOwn': 'Use Your Own Models', - 'settings.ai.routing.useYourOwnDesc': - 'Choose one provider + model and route every workload through it. This is simple, but it can be inefficient because lightweight and heavyweight inference all share the same route.', - 'settings.ai.routing.advanced': 'Advanced', - 'settings.ai.routing.advancedDesc': - 'Pick different models for different tasks. This is the best option for tight cost optimization and the most control.', - 'settings.ai.routing.customDesc': - 'Fine-grained routing gives you the best cost optimization and the most control. Use the rows below to decide which workloads stay Managed, which use your shared default, and which pin to a specific model.', - 'settings.ai.routing.chatAndConversations': 'Chat and Conversations', - 'settings.ai.routing.chatDesc': - 'Models used during direct user interaction, replies, reasoning, agent loops, and coding help.', - 'settings.ai.routing.backgroundTasks': 'Background Tasks', - 'settings.ai.routing.bgTasksDesc': - 'Models used outside the main conversation flow for summarization, heartbeat, learning, and subconscious evaluation.', - 'settings.ai.routing.addCustomProvider': 'Add Custom Provider', - 'settings.ai.globalModel.title': 'Choose one model for everything', - 'settings.ai.globalModel.desc': - 'This routes all inference through one model. It is simpler, but it can be inefficient for cost and quality because lightweight and heavy tasks will all use the same route.', - 'settings.ai.globalModel.noProviders': - 'Add or connect a provider first. Then you can route every workload through one model here.', - 'settings.ai.globalModel.provider': 'Provider', - 'settings.ai.globalModel.model': 'Model', - 'settings.ai.globalModel.loadingModels': 'Loading models…', - 'settings.ai.globalModel.enterModelId': 'Enter model id', - 'settings.ai.globalModel.appliesToAll': - 'Applies the same provider + model to chat, reasoning, coding, memory, heartbeat, learning, and subconscious. Embeddings are configured separately. Changes save when you click save.', - 'settings.ai.globalModel.saving': 'Saving…', - 'settings.ai.globalModel.saved': 'Saved', - 'settings.ai.workload.noModel': 'No model selected', - 'settings.ai.workload.changeModel': 'Change Model', - 'settings.ai.workload.chooseModel': 'Choose Model', - 'settings.ai.provider.ollama': 'Ollama', - 'kbd.ariaLabel': 'Keyboard shortcut: {shortcut}', - 'chat.modelPlaceholder': 'gpt-4o', - 'iosPair.title': 'Pair with your desktop', - 'iosPair.instructions': - 'Open OpenHuman on your desktop, go to Settings > Devices, and tap "Pair phone" to show the QR code.', - 'iosPair.scanQrCode': 'Scan QR code', - 'iosPair.scannerOpening': 'Scanner opening...', - 'iosPair.connecting': 'Connecting to desktop...', - 'iosPair.connectedLoading': 'Connected! Loading...', - 'iosPair.expired': 'QR code expired. Ask the desktop to regenerate the code.', - 'iosPair.desktopLabel': 'Desktop', - 'iosPair.retryScan': 'Retry scan', - 'iosPair.step.openDesktop': 'Open OpenHuman on desktop', - 'iosPair.step.openSettings': 'Go to Settings > Devices', - 'iosPair.step.showQr': 'Tap "Pair phone" to show QR', - 'iosPair.error.camera': 'Camera scan failed. Check camera permissions and try again.', - 'iosPair.error.invalidQr': - 'Invalid QR code. Make sure you are scanning an OpenHuman pairing code.', - 'iosPair.error.unreachableDesktop': - 'Could not reach the desktop. Make sure both devices are online and try again.', - 'iosPair.error.connectionFailed': - 'Connection failed. Make sure the desktop app is running and try again.', - 'iosMascot.defaultPairedLabel': 'Desktop', - 'iosMascot.connectedTo': 'Connected to', - 'iosMascot.disconnect': 'Disconnect', - 'iosMascot.pushToTalk': 'Push to talk', - 'iosMascot.thinking': 'Thinking...', - 'iosMascot.typeMessage': 'Type a message...', - 'iosMascot.sendMessage': 'Send message', - 'iosMascot.error.generic': 'Something went wrong. Please try again.', - 'iosMascot.error.sendFailed': 'Failed to send. Check your connection.', - 'settings.general': 'General', - 'settings.featuresAndAI': 'Features & AI', - 'settings.billingAndRewards': 'Billing & Rewards', - 'settings.support': 'Support', - 'settings.advanced': 'Advanced', - 'settings.dangerZone': 'Danger Zone', - 'settings.account': 'Account', - 'settings.accountDesc': 'Recovery phrase, team, connections, and privacy', - 'settings.notifications': 'Notifications', - 'settings.notificationsDesc': 'Do Not Disturb and per-account notification controls', - 'settings.notifications.tabs.preferences': 'Preferences', - 'settings.notifications.tabs.routing': 'Routing', - 'settings.features': 'Features', - 'settings.featuresDesc': 'Screen awareness, messaging, and tools', - 'settings.aiModels': 'AI & Models', - 'settings.aiModelsDesc': 'Local AI model setup, downloads, and LLM provider', - 'settings.ai': 'AI Configuration', - 'settings.aiDesc': 'Cloud providers, local Ollama models, and per-workload routing', - 'settings.billingUsage': 'Billing & Usage', - 'settings.billingUsageDesc': 'Subscription plan, credits, and payment methods', - 'settings.rewards': 'Rewards', - 'settings.rewardsDesc': 'Referrals, coupons, and earned credits', - 'settings.restartTour': 'Restart Tour', - 'settings.restartTourDesc': 'Replay the product walkthrough from the beginning', - 'settings.about': 'About', - 'settings.aboutDesc': 'App version and software updates', - 'settings.companion.title': 'Desktop Companion', - 'settings.companion.session': 'Session', - 'settings.companion.activeLabel': 'Active', - 'settings.companion.inactiveStatus': 'Inactive', - 'settings.companion.stopping': 'Stopping…', - 'settings.companion.stopSession': 'Stop Session', - 'settings.companion.starting': 'Starting…', - 'settings.companion.startSession': 'Start Session', - 'settings.companion.sessionId': 'Session ID', - 'settings.companion.turns': 'Turns', - 'settings.companion.remaining': 'Remaining', - 'settings.companion.configuration': 'Configuration', - 'settings.companion.hotkey': 'Hotkey', - 'settings.companion.activationMode': 'Activation Mode', - 'settings.companion.sessionTtl': 'Session TTL', - 'settings.companion.screenCapture': 'Screen Capture', - 'settings.companion.appContext': 'App Context', - 'settings.composio.title': 'Composio', - 'settings.composio.apiKeyExamplePlaceholder': 'ck_live_xxxxxxxxxxxxxxxx', - 'composio.integrationSlugsHelp': 'Comma-separated integration slugs, e.g.', - 'composio.integrationSlugsExample': 'gmail, slack', - 'composio.integrationSlugsCaseInsensitive': 'Case-insensitive.', - 'composio.integrationSlugsPlaceholder': 'gmail, slack, ...', - 'settings.developerOptions': 'Advanced', - 'settings.developerOptionsDesc': - 'AI configuration, messaging channels, tools, diagnostics, and debug panels', - 'settings.clearAppData': 'Clear App Data', - 'settings.clearAppDataDesc': 'Sign out and permanently clear all local app data', - 'settings.logOut': 'Log out', - 'settings.logOutDesc': 'Sign out of your account', - 'settings.exitLocalSession': 'Exit local session', - 'settings.exitLocalSessionDesc': 'Return to the sign-in screen', - 'settings.language': 'Language', - 'settings.languageDesc': 'Display language for the app interface', - 'settings.alerts': 'Alerts', - 'settings.alertsDesc': 'View recent alerts and activity in your inbox', - 'settings.account.recoveryPhrase': 'Recovery Phrase', - 'settings.account.recoveryPhraseDesc': 'View and back up your account recovery phrase', - 'settings.account.team': 'Team', - 'settings.account.teamDesc': 'Manage team members and permissions', - 'team.members': 'Members', - 'team.membersDesc': 'Manage team members and roles', - 'team.invites': 'Invites', - 'team.invitesDesc': 'Generate and manage invite codes', - 'team.settings': 'Team Settings', - 'team.settingsDesc': 'Edit team name and settings', - 'team.editSettings': 'Edit Team Settings', - 'team.enterName': 'Enter team name', - 'team.saving': 'Saving...', - 'team.saveChanges': 'Save Changes', - 'team.delete': 'Delete Team', - 'team.deleteDesc': 'Permanently delete this team', - 'team.deleting': 'Deleting...', - 'team.failedToUpdate': 'Failed to update team', - 'team.failedToDelete': 'Failed to delete team', - 'team.manageTitle': 'Manage {name}', - 'team.planCreated': '{plan} Plan • Created {date}', - 'team.confirmDelete': 'Are you sure you want to delete {name}?', - 'team.deleteWarning': 'This action cannot be undone. All team data will be permanently removed.', - 'settings.account.connections': 'Connections', - 'settings.account.connectionsDesc': 'Manage linked accounts and services', - 'settings.account.privacy': 'Privacy', - 'settings.account.privacyDesc': 'Control what data leaves your computer', - 'migration.title': 'Import from another assistant', - 'migration.description': - 'Migrate memory and notes from another local assistant into this workspace. Start with a Preview to see exactly what would change, then Apply to copy the data over. Your current memory is backed up first.', - 'migration.vendorLabel': 'Source vendor', - 'migration.sourceLabel': 'Source workspace path (optional)', - 'migration.sourcePlaceholder': 'Leave blank to auto-detect (e.g. ~/.openclaw/workspace)', - 'migration.sourcePlaceholderHermes': 'Leave blank to auto-detect (e.g. ~/.hermes)', - 'migration.sourceHint': - "Defaults to the vendor's standard location when blank. Set an explicit path if you've moved the workspace elsewhere.", - 'migration.previewAction': 'Preview', - 'migration.previewRunning': 'Previewing…', - 'migration.applyAction': 'Apply import', - 'migration.applyRunning': 'Importing…', - 'migration.applyDisclaimer': - 'Apply is unlocked after a successful Preview of the same source. Existing memory is backed up before any import.', - 'migration.reportTitlePreview': 'Preview — nothing imported yet', - 'migration.reportTitleApplied': 'Import complete', - 'migration.report.source': 'Source workspace', - 'migration.report.target': 'Target workspace', - 'migration.report.fromSqlite': 'From SQLite (brain.db)', - 'migration.report.fromMarkdown': 'From Markdown', - 'migration.report.imported': 'Imported', - 'migration.report.skippedUnchanged': 'Skipped (unchanged)', - 'migration.report.renamedConflicts': 'Renamed on conflict', - 'migration.report.warnings': 'Warnings', - 'migration.report.previewHint': - 'No data has been imported yet. Click Apply import to copy it over.', - 'migration.report.appliedHint': - 'Imported entries are now in your memory. Re-run Preview if you want to compare again.', - 'migration.confirmImport.singular': - 'Import {count} entry into the current workspace?\n\nSource: {source}\nTarget: {target}\n\nExisting memory will be backed up before the import runs.', - 'migration.confirmImport.plural': - 'Import {count} entries into the current workspace?\n\nSource: {source}\nTarget: {target}\n\nExisting memory will be backed up before the import runs.', - 'settings.notifications.doNotDisturb': 'Do Not Disturb', - 'settings.notifications.doNotDisturbDesc': 'Pause all notifications for a set period', - 'settings.notifications.channelControls': 'Per-Channel Controls', - 'settings.notifications.channelControlsDesc': - 'Configure notification preferences for each channel', - 'settings.features.screenAwareness': 'Screen Awareness', - 'settings.features.screenAwarenessDesc': 'Let the assistant see your active window', - 'settings.features.messaging': 'Messaging', - 'settings.features.messagingDesc': 'Channel and messaging integration settings', - 'settings.features.tools': 'Tools', - 'settings.features.toolsDesc': 'Manage connected tools and integrations', - 'settings.ai.localSetup': 'Local AI Setup', - 'settings.ai.localSetupDesc': 'Download and configure local AI models', - 'settings.ai.llmProvider': 'LLM Provider', - 'settings.ai.llmProviderDesc': 'Choose and configure your AI provider', - 'clearData.title': 'Clear App Data', - 'clearData.warning': 'This will sign you out and permanently delete local app data including:', - 'clearData.bulletSettings': 'App settings and conversations', - 'clearData.bulletCache': 'All local integration cache data', - 'clearData.bulletWorkspace': 'Workspace data', - 'clearData.bulletOther': 'All other local data', - 'clearData.irreversible': 'This action cannot be undone.', - 'clearData.clearing': 'Clearing App Data...', - 'clearData.failed': 'Failed to clear data and logout. Please try again.', - 'clearData.failedLogout': 'Failed to log out. Please try again.', - 'clearData.failedPersist': 'Failed to clear persisted app state. Please try again.', - 'welcome.title': 'Welcome to OpenHuman', - 'welcome.subtitle': - 'Your personal AI super intelligence. Private, simple and extremely powerful.', - 'welcome.connectPrompt': 'Configure RPC URL (Advanced)', - 'welcome.selectRuntime': 'Select a Runtime', - 'welcome.clearingAppData': 'Clearing app data...', - 'welcome.clearAppDataAndRestart': 'Clear app data & restart', - 'welcome.clearAppDataWarning': - 'This wipes locally stored secrets and accounts on this device. Your cloud account is unaffected - you can sign in again right after.', - 'welcome.resetErrorFallback': - 'Could not clear app data. Please quit and reopen OpenHuman, then try again.', - 'welcome.signingIn': 'Signing you in...', - 'welcome.termsIntro': 'By continuing, you agree to the', - 'welcome.termsOfUse': 'Terms', - 'welcome.termsJoiner': 'and', - 'welcome.privacyPolicy': 'Privacy Policy', - 'welcome.termsOutro': '.', - 'welcome.urlPlaceholder': 'http://localhost:8089', - 'welcome.invalidUrl': 'Please enter a valid HTTP or HTTPS URL', - 'welcome.connecting': 'Testing', - 'welcome.connect': 'Test', - 'home.greeting': 'Good morning', - 'home.greetingAfternoon': 'Good afternoon', - 'home.greetingEvening': 'Good evening', - 'home.askAssistant': 'Ask your assistant anything...', - 'home.statusOk': - 'Your device is connected. Keep the app running to keep the connection alive. Message your agent with the button below.', - 'home.statusBackendOnly': 'Reconnecting to backend… your agent will be available again shortly.', - 'home.statusCoreUnreachable': - "Local core sidecar isn't responding. The OpenHuman background process may have crashed or failed to start.", - 'home.statusInternetOffline': - 'Your device is offline right now. Check your network or restart the app to reconnect.', - 'home.restartCore': 'Restart Core', - 'home.restartingCore': 'Restarting core…', - 'home.themeToggle.toLight': 'Switch to light mode', - 'home.themeToggle.toDark': 'Switch to dark mode', - 'home.usageExhaustedTitle': "You've exhausted your usage", - 'home.usageExhaustedBody': - "You're out of included usage for now. Start a subscription to unlock more ongoing capacity.", - 'home.usageExhaustedCta': 'Get a subscription', - 'home.routinesCard': 'Your Routines', - 'home.routinesActive': '{count} active', - 'routines.title': 'Your Routines', - 'routines.subtitle': 'Things your assistant does automatically', - 'routines.loading': 'Loading routines…', - 'routines.empty': 'No routines yet', - 'routines.emptyHint': - 'Your assistant can run tasks on a schedule — like morning briefings or daily summaries.', - 'routines.refresh': 'Refresh', - 'routines.nextRun': 'Next run', - 'routines.lastRunSuccess': 'Last run succeeded', - 'routines.lastRunFailed': 'Last run failed', - 'routines.notRunYet': 'Not run yet', - 'routines.runNow': 'Run Now', - 'routines.running': 'Running…', - 'routines.viewHistory': 'View history', - 'routines.loadingHistory': 'Loading…', - 'routines.noHistory': 'No run history yet.', - 'routines.statusSuccess': 'Success', - 'routines.statusError': 'Error', - 'routines.showOutput': 'Show output', - 'routines.hideOutput': 'Hide output', - 'routines.toggleEnabled': 'Enable or disable this routine', - 'routines.typeAgent': 'Agent', - 'routines.typeCommand': 'Command', - 'nav.routines': 'Routines', - 'chat.newThread': 'New thread', - 'chat.typeMessage': 'Type a message...', - 'chat.send': 'Send message', - 'chat.thinking': 'Thinking...', - 'chat.noMessages': 'No messages yet', - 'chat.startConversation': 'Start a conversation', - 'chat.regenerate': 'Regenerate', - 'chat.copyResponse': 'Copy response', - 'chat.citations': 'Citations', - 'chat.toolUsed': 'Tool used', - 'scope.legacy': 'Legacy', - 'scope.user': 'User', - 'scope.project': 'Project', - 'skills.title': 'Connections', - 'skills.search': 'Search connections...', - 'skills.noResults': 'No connections found', - 'skills.connect': 'Connect', - 'skills.disconnect': 'Disconnect', - 'skills.configure': 'Manage', - 'skills.connected': 'Connected', - 'skills.available': 'Available', - 'skills.addAccount': 'Add Account', - 'skills.channels': 'Channels', - 'skills.integrations': 'Composio Integrations', - 'skills.integrationsSubtitle': - 'Cloud-based OAuth connections — sign in with your account and Composio brokers the tokens so agents can read and act on your behalf. No API keys to manage.', - 'skills.composio.noApiKeyTitle': 'No Composio API Key Configured', - 'skills.composio.noApiKeyDescription': - 'Local mode uses your own Composio API key. Open Settings → Advanced → Composio to add one before connecting integrations here.', - 'skills.composio.noApiKeyCta': 'Open in Settings', - 'skills.tabs.composio': 'Composio', - 'skills.tabs.channels': 'Channels', - 'skills.tabs.mcp': 'MCP Servers', - 'skills.mcpComingSoon.title': 'MCP Servers', - 'skills.mcpComingSoon.description': - 'MCP server management is coming soon. This tab will be the home for discovering, connecting, and monitoring your MCP server integrations.', - 'memory.title': 'Memory', - 'memory.search': 'Search memories...', - 'memory.noResults': 'No memories found', - 'memory.empty': 'No memories yet. Memories are created automatically as you interact.', - 'memory.tab.memory': 'Memory', - 'memory.tab.tasks': 'Agent Tasks', - 'memory.tab.tasksDescription': - 'Create and track tasks — your own to-dos plus the boards your agents build across conversations.', - 'memory.tab.subconscious': 'Subconscious', - 'memory.tab.dreams': 'Dreams', - 'memory.tab.calls': 'Calls', - 'memory.tab.diagram': 'Diagram', - 'memory.tab.centrality': 'Centrality', - 'memory.tab.settings': 'Settings', - 'memory.analyzeNow': 'Analyze Now', - 'graphCentrality.title': 'Knowledge Graph Centrality', - 'graphCentrality.intro': - 'PageRank over your memory graph surfaces the load-bearing hubs — and the connector entities that link otherwise-separate clusters, which a raw frequency count cannot reveal.', - 'graphCentrality.loading': 'Computing centrality…', - 'graphCentrality.errorPrefix': 'Could not load the graph:', - 'graphCentrality.retry': 'Retry', - 'graphCentrality.empty': 'No knowledge graph yet.', - 'graphCentrality.emptyHint': - 'As the assistant records facts about you, the most connected entities will surface here.', - 'graphCentrality.namespaceLabel': 'Namespace', - 'graphCentrality.namespaceAll': 'All namespaces', - 'graphCentrality.metricEntities': 'Entities', - 'graphCentrality.metricConnections': 'Connections', - 'graphCentrality.metricClusters': 'Clusters', - 'graphCentrality.clustersCaption': '{components} clusters · largest holds {largest}', - 'graphCentrality.approximateBadge': 'approximate', - 'graphCentrality.approximateTitle': 'Stopped at the iteration cap before fully converging', - 'graphCentrality.rankedHeading': 'Top entities by influence', - 'graphCentrality.colRank': '#', - 'graphCentrality.colEntity': 'Entity', - 'graphCentrality.colInfluence': 'Influence', - 'graphCentrality.colLinks': 'Links', - 'graphCentrality.bridgeBadge': 'connector', - 'graphCentrality.bridgeTitle': 'Connector — more influential than its link count suggests', - 'graphCentrality.degreeTitle': '{in} in · {out} out', - 'memoryTree.status.title': 'Memory Tree', - 'memoryTree.status.autoSyncLabel': 'Auto-sync', - 'memoryTree.status.autoSyncDescription': - 'Pause to stop new ingestion. Existing wiki stays queryable.', - 'memoryTree.status.statusTile': 'Status', - 'memoryTree.status.lastSyncTile': 'Last sync', - 'memoryTree.status.totalChunksTile': 'Total chunks', - 'memoryTree.status.wikiSizeTile': 'Wiki size', - 'memoryTree.status.statusRunning': 'Running', - 'memoryTree.status.statusPaused': 'Paused', - 'memoryTree.status.statusSyncing': 'Syncing', - 'memoryTree.status.statusError': 'Error', - 'memoryTree.status.statusIdle': 'Idle', - 'memoryTree.status.never': 'Never', - 'memoryTree.status.fetchError': "Couldn't fetch Memory Tree status", - 'memoryTree.status.retry': 'Retry', - 'memoryTree.status.toggleFailed': "Couldn't toggle auto-sync", - 'memoryTree.status.justNow': 'just now', - 'memoryTree.status.secondsAgo': '{count}s ago', - 'memoryTree.status.minuteAgo': '1 min ago', - 'memoryTree.status.minutesAgo': '{count} min ago', - 'memoryTree.status.hourAgo': '1 hr ago', - 'memoryTree.status.hoursAgo': '{count} hr ago', - 'memoryTree.status.dayAgo': '1 day ago', - 'memoryTree.status.daysAgo': '{count} days ago', - 'alerts.title': 'Alerts', - 'alerts.empty': 'No alerts yet', - 'alerts.markAllRead': 'Mark all as read', - 'alerts.unread': 'unread', - 'rewards.title': 'Rewards', - 'rewards.referrals': 'Referrals', - 'rewards.coupons': 'Redeem', - 'rewards.localUnavailable': - 'Local login does not earn rewards, coupons, or referral credit. To earn rewards, log out and continue by signing in with an OpenHuman account.', - 'rewards.localUnavailableCta': 'Open Account Settings', - 'rewards.credits': 'Credits', - 'rewards.referralCode': 'Your referral code', - 'rewards.copyCode': 'Copy code', - 'rewards.share': 'Share', - 'onboarding.welcome': "Hi. I'm OpenHuman.", - 'onboarding.welcomeDesc': - 'Your super-intelligent AI assistant that runs on your computer. Private, simple, and extremely powerful.', - 'onboarding.context': 'Context Gathering', - 'onboarding.contextDesc': 'Connect the tools and services you use every day.', - 'onboarding.localAI': 'Local AI', - 'onboarding.localAIDesc': 'Set up a local AI model that runs on your machine.', - 'onboarding.chatProvider': 'Chat Provider', - 'onboarding.chatProviderDesc': 'Choose how you want to interact with your assistant.', - 'onboarding.referral': 'Referral', - 'onboarding.referralDesc': 'Apply a referral code if you have one.', - 'onboarding.finish': 'Finish Setup', - 'onboarding.finishDesc': "You're all set! Start using OpenHuman.", - 'onboarding.skip': 'Skip', - 'onboarding.getStarted': 'Get Started', - 'onboarding.runtimeChoice.title': 'How would you like to run OpenHuman?', - 'onboarding.runtimeChoice.subtitle': - 'Pick how much OpenHuman manages for you. You can change this later in Settings.', - 'onboarding.runtimeChoice.cloud.title': 'Simple', - 'onboarding.runtimeChoice.cloud.tagline': - 'Use OpenHuman-hosted sign-in, model routing, search, and managed integrations.', - 'onboarding.runtimeChoice.cloud.f1': 'Backend-brokered OAuth and model routing', - 'onboarding.runtimeChoice.cloud.f2': 'Token compression to stretch your usage further', - 'onboarding.runtimeChoice.cloud.f3': 'One subscription, every model included', - 'onboarding.runtimeChoice.cloud.f4': 'No model, search, or Composio keys to manage', - 'onboarding.runtimeChoice.cloud.f5': 'Local Memory Tree, managed network services', - 'onboarding.runtimeChoice.custom.title': 'Run Custom', - 'onboarding.runtimeChoice.custom.tagline': - 'Bring your own keys. Choose which services OpenHuman should call.', - 'onboarding.runtimeChoice.custom.f1': "You'll need API keys for almost everything", - 'onboarding.runtimeChoice.custom.f2': 'Reuses services you already pay for', - 'onboarding.runtimeChoice.custom.f3': 'Keep supported workloads on your machine', - 'onboarding.runtimeChoice.custom.f4': 'More setup, more knobs', - 'onboarding.runtimeChoice.custom.f5': 'Best for power users and developers', - 'onboarding.runtimeChoice.cloud.creditHighlight': '$1 free credit to try it out', - 'onboarding.runtimeChoice.continueCloud': 'Continue with Simple', - 'onboarding.runtimeChoice.continueCustom': 'Continue with Custom', - 'onboarding.runtimeChoice.recommended': 'Recommended', - 'onboarding.apiKeys.title': "Let's Add Your API Keys", - 'onboarding.apiKeys.subtitle': - 'You can paste them now or skip and add them later in Settings › AI. Keys are stored on this device, encrypted at rest.', - 'onboarding.apiKeys.openaiLabel': 'OpenAI API key', - 'onboarding.apiKeys.openaiPlaceholder': 'sk-...', - 'onboarding.apiKeys.anthropicLabel': 'Anthropic API key', - 'onboarding.apiKeys.anthropicPlaceholder': 'sk-ant-...', - 'onboarding.apiKeys.saveError': "Couldn't save that key. Please double-check it and try again.", - 'onboarding.apiKeys.skipForNow': 'Skip for now', - 'onboarding.apiKeys.continue': 'Save and continue', - 'onboarding.apiKeys.saving': 'Saving…', - 'onboarding.custom.stepperInference': 'Inference', - 'onboarding.custom.stepperVoice': 'Voice', - 'onboarding.custom.stepperOAuth': 'OAuth', - 'onboarding.custom.stepperSearch': 'Search', - 'onboarding.custom.stepperEmbeddings': 'Embeddings', - 'onboarding.custom.stepperMemory': 'Memory', - 'onboarding.custom.stepCounter': 'Step {n} of {total}', - 'onboarding.custom.defaultTitle': 'Default', - 'onboarding.custom.defaultSubtitle': 'Let OpenHuman manage it for you.', - 'onboarding.custom.configureTitle': 'Configure', - 'onboarding.custom.configureSubtitle': "I'll pick what to use.", - 'onboarding.custom.progressAriaLabel': 'Onboarding progress', - 'onboarding.custom.continue': 'Continue', - 'onboarding.custom.back': 'Back', - 'onboarding.custom.finish': 'Finish Setup', - 'onboarding.custom.configureLater': - "You can finish wiring this up after onboarding. We'll drop you on the matching Settings page once you're done.", - 'onboarding.custom.openSettings': 'Open in Settings', - 'onboarding.custom.inference.title': 'Inference (Text)', - 'onboarding.custom.inference.subtitle': - 'Which language model should answer your questions and run your agents?', - 'onboarding.custom.inference.defaultDesc': - 'OpenHuman routes workloads through its managed backend by default. No keys, no setup.', - 'onboarding.custom.inference.configureDesc': - 'Bring your own OpenAI or Anthropic key. We use it for every text-based workload.', - 'onboarding.custom.voice.title': 'Voice', - 'onboarding.custom.voice.subtitle': 'Speech-to-text and text-to-speech for voice mode.', - 'onboarding.custom.voice.defaultDesc': - 'OpenHuman ships with managed STT/TTS providers that may send audio/text to hosted services.', - 'onboarding.custom.voice.configureDesc': - 'Use your own ElevenLabs / OpenAI Whisper / etc. Configure in Settings › Voice.', - 'onboarding.custom.oauth.title': 'Connections (OAuth)', - 'onboarding.custom.oauth.subtitle': - 'Gmail, Slack, Notion, and other connected services that need OAuth.', - 'onboarding.custom.oauth.defaultDesc': - 'OpenHuman brokers OAuth and tool calls through a managed Composio workspace.', - 'onboarding.custom.oauth.configureDesc': - 'Bring your own Composio account / API key. Configure in Settings › Connections.', - 'onboarding.custom.search.title': 'Web Search', - 'onboarding.custom.search.subtitle': 'How OpenHuman searches the web on your behalf.', - 'onboarding.custom.search.defaultDesc': - 'OpenHuman uses a managed search proxy by default. No search API key needed.', - 'onboarding.custom.search.configureDesc': - 'Bring your own search provider key (Tavily, Brave, etc.). Configure in Settings › Tools.', - 'onboarding.custom.embeddings.title': 'Embeddings', - 'onboarding.custom.embeddings.subtitle': - 'How OpenHuman generates vector embeddings for semantic memory search.', - 'onboarding.custom.embeddings.defaultDesc': - 'OpenHuman uses a managed embedding service. No API key needed.', - 'onboarding.custom.embeddings.configureDesc': - 'Bring your own embedding provider (OpenAI, Voyage, Ollama, etc.).', - 'onboarding.custom.memory.title': 'Memory', - 'onboarding.custom.memory.subtitle': - 'How OpenHuman remembers your context, preferences, and prior conversations.', - 'onboarding.custom.memory.defaultDesc': - 'OpenHuman manages memory storage and retrieval automatically. Nothing to set up.', - 'onboarding.custom.memory.configureDesc': - 'Inspect, export, or wipe memory yourself. Configure in Settings › Memory.', - 'chat.addReaction': 'Add reaction', - 'chat.agentProfile.create': 'Create agent profile', - 'chat.agentProfile.createFailed': 'Could not create agent profile.', - 'chat.agentProfile.customDescription': 'Custom agent profile', - 'chat.agentProfile.defaultAgentLabel': 'Orchestrator', - 'chat.agentProfile.exists': 'Agent profile "{name}" already exists.', - 'chat.agentProfile.label': 'Agent profile', - 'chat.agentProfile.namePlaceholder': 'Profile name', - 'chat.agentProfile.promptStylePlaceholder': 'Prompt style', - 'chat.agentProfile.allowedToolsPlaceholder': 'Allowed tools', - 'chat.backToThread': 'back to {title}', - 'chat.parentThread': 'parent thread', - 'chat.removeReaction': 'Remove {emoji}', - 'accounts.addAccount': 'Add Account', - 'accounts.manageAccounts': 'Manage Accounts', - 'accounts.noAccounts': 'No accounts connected', - 'accounts.connectAccount': 'Connect an account to get started', - 'accounts.agent': 'Agent', - 'accounts.respondQueue': 'Respond Queue', - 'accounts.disconnect': 'Disconnect', - 'accounts.disconnectConfirm': 'Are you sure you want to disconnect this account?', - 'accounts.disconnectClearMemory': 'Also delete memory from this source', - 'accounts.disconnectClearMemoryHint': - 'Permanently removes local memory chunks linked to this connection.', - 'accounts.searchAccounts': 'Search accounts...', - 'channels.title': 'Channels', - 'channels.configure': 'Configure Channel', - 'channels.setup': 'Setup', - 'channels.noChannels': 'No channels configured', - 'channels.localManagedUnavailable': 'Managed channels are not available for local users.', - 'channels.addChannel': 'Add Channel', - 'channels.status.connected': 'Connected', - 'channels.status.disconnected': 'Disconnected', - 'channels.status.error': 'Error', - 'channels.status.configuring': 'Configuring', - 'channels.defaultMessaging': 'Default Messaging Channel', - 'webhooks.title': 'Webhooks', - 'webhooks.create': 'Create Webhook', - 'webhooks.noWebhooks': 'No webhooks configured', - 'webhooks.url': 'URL', - 'webhooks.secret': 'Secret', - 'webhooks.events': 'Events', - 'webhooks.archiveDirectory': 'Archive Directory', - 'webhooks.todayFile': "Today's File", - 'invites.title': 'Invites', - 'invites.create': 'Create Invite', - 'invites.noInvites': 'No pending invites', - 'invites.code': 'Invite Code', - 'invites.copyLink': 'Copy Link', - 'invites.generate': 'Generate Invite', - 'invites.generating': 'Generating...', - 'invites.refreshing': 'Refreshing invites...', - 'invites.loading': 'Loading invites...', - 'invites.copyCodeAria': 'Copy invite code', - 'invites.revokeAria': 'Revoke invite', - 'invites.usedUp': 'Used Up', - 'invites.uses': 'Uses: {current}{max}', - 'invites.expiresOn': 'Expires {date}', - 'invites.empty': 'No invites yet', - 'invites.emptyHint': 'Generate an invite code to share with others', - 'invites.revokeTitle': 'Revoke Invite Code', - 'invites.revokePromptPrefix': 'Are you sure you want to revoke the invite code', - 'invites.revokeWarning': - 'This invite code will no longer be valid and cannot be used to join the team.', - 'invites.revoking': 'Revoking...', - 'invites.revokeAction': 'Revoke Invite', - 'invites.failedGenerate': 'Failed to generate invite', - 'invites.failedRevoke': 'Failed to revoke invite', - 'team.refreshingMembers': 'Refreshing members...', - 'team.loadingMembers': 'Loading members...', - 'team.memberCount': '{count} member', - 'team.memberCountPlural': '{count} members', - 'team.you': '(You)', - 'team.removeAria': 'Remove {name}', - 'team.noMembers': 'No members found', - 'team.removeTitle': 'Remove Team Member', - 'team.removePromptPrefix': 'Are you sure you want to remove', - 'team.removePromptSuffix': 'from the team?', - 'team.removeWarning': 'They will lose access to the team and all team resources.', - 'team.removing': 'Removing...', - 'team.removeAction': 'Remove Member', - 'team.changeRoleTitle': 'Change Member Role', - 'team.changeRolePrompt': "Change {name}'s role from {oldRole} to {newRole}?", - 'team.changeRoleAdminGrant': - 'This will grant them full admin permissions including the ability to manage team members.', - 'team.changeRoleAdminRemove': - 'This will remove their admin permissions and they will no longer be able to manage the team.', - 'team.changing': 'Changing...', - 'team.changeRoleAction': 'Change Role', - 'team.failedChangeRole': 'Failed to change role', - 'team.failedRemoveMember': 'Failed to remove member', - 'devOptions.title': 'Advanced', - 'devOptions.diagnostics': 'Diagnostics', - 'devOptions.diagnosticsDesc': 'System health, logs, and performance metrics', - 'devOptions.toolPolicyDiagnosticsDesc': - 'Tool inventory, policy posture, MCP allowlists, and recent blocks', - 'devOptions.toolPolicyDiagnostics.loading': 'Loading…', - 'devOptions.toolPolicyDiagnostics.unavailable': 'Diagnostics unavailable', - 'devOptions.toolPolicyDiagnostics.posture.title': 'Policy posture', - 'devOptions.toolPolicyDiagnostics.posture.autonomy': 'Autonomy:', - 'devOptions.toolPolicyDiagnostics.posture.workspaceOnly': 'Workspace only:', - 'devOptions.toolPolicyDiagnostics.posture.maxActionsPerHour': 'Max actions/hr:', - 'devOptions.toolPolicyDiagnostics.posture.approvalMediumRisk': 'Approval (medium risk):', - 'devOptions.toolPolicyDiagnostics.posture.blockHighRisk': 'Block high risk:', - 'devOptions.toolPolicyDiagnostics.inventory.title': 'Inventory', - 'devOptions.toolPolicyDiagnostics.inventory.totalTools': 'Total tools', - 'devOptions.toolPolicyDiagnostics.inventory.enabledTools': 'Enabled tools', - 'devOptions.toolPolicyDiagnostics.inventory.mcpStdioTools': 'MCP stdio tools', - 'devOptions.toolPolicyDiagnostics.inventory.jsonRpcTools': 'JSON-RPC tools', - 'devOptions.toolPolicyDiagnostics.mcpAllowlists.title': 'MCP allowlists', - 'devOptions.toolPolicyDiagnostics.mcpAllowlists.summary': - 'Enabled: {enabled} · Servers: {enabledCount}/{totalCount}', - 'devOptions.toolPolicyDiagnostics.mcpAllowlists.unnamed': '', - 'devOptions.toolPolicyDiagnostics.mcpAllowlists.allowDeny': 'allow={allowCount} deny={denyCount}', - 'devOptions.toolPolicyDiagnostics.mcpWriteAudit.title': 'MCP write audit', - 'devOptions.toolPolicyDiagnostics.mcpWriteAudit.summary': - 'Enabled: {enabled} · Recent (24h): {recentRows}', - 'devOptions.toolPolicyDiagnostics.recentBlocked.title': 'Recent blocked calls', - 'devOptions.toolPolicyDiagnostics.recentBlocked.empty': 'No blocked calls recorded.', - 'devOptions.toolPolicyDiagnostics.redactedSurfaces.title': 'Redacted surfaces', - 'devOptions.toolPolicyDiagnostics.redactedSurfaces.summary': - 'Write-capable: {writeCount} · Policy surfaces: {policyCount}', - 'devOptions.debugPanels': 'Debug Panels', - 'devOptions.debugPanelsDesc': 'Feature flags, state inspection, and debugging tools', - 'devOptions.webhooks': 'Webhooks', - 'devOptions.webhooksDesc': 'Configure and test webhook integrations', - 'devOptions.memoryInspection': 'Memory Inspection', - 'devOptions.memoryInspectionDesc': 'Browse, query, and manage memory entries', - 'voice.pushToTalk': 'Push to Talk', - 'voice.recording': 'Recording...', - 'voice.processing': 'Processing...', - 'voice.languageHint': 'Language', - 'voice.failedToLoadSettings': 'Failed to load voice settings', - 'voice.failedToSaveSettings': 'Failed to save voice settings', - 'voice.failedToStartServer': 'Failed to start voice server', - 'voice.failedToStopServer': 'Failed to stop voice server', - 'voice.sttDisabledPrefix': - 'Voice dictation is disabled until the local STT model is downloaded. Use the', - 'voice.sttDisabledSuffix': 'section above to install Whisper.', - 'voice.debug.failedToLoadVoiceDebugData': 'Failed to load voice debug data', - 'voice.debug.settingsSaved': 'Debug settings saved.', - 'voice.debug.failedToSaveSettings': 'Failed to save voice settings', - 'voice.debug.runtimeStatus': 'Runtime Status', - 'voice.debug.runtimeStatusDesc': - 'Live diagnostics for the voice server and speech-to-text engine.', - 'voice.debug.server': 'Server', - 'voice.debug.unavailable': 'Unavailable', - 'voice.debug.ready': 'Ready', - 'voice.debug.notReady': 'Not ready', - 'voice.debug.hotkey': 'Hotkey', - 'voice.debug.notAvailable': 'n/a', - 'voice.debug.mode': 'Mode', - 'voice.debug.transcriptions': 'Transcriptions', - 'voice.debug.serverError': 'Server Error', - 'voice.debug.advancedSettings': 'Advanced Settings', - 'voice.debug.advancedSettingsDesc': - 'Low-level tuning parameters for recording and silence detection.', - 'voice.debug.minimumRecordingSeconds': 'Minimum Recording Seconds', - 'voice.debug.silenceThreshold': 'Silence Threshold (RMS)', - 'voice.debug.silenceThresholdDesc': - 'Recordings with energy below this are treated as silence and skipped. Lower = more sensitive.', - 'voice.providers.saved': 'Voice providers saved.', - 'voice.providers.failedToSave': 'Failed to save voice providers', - 'voice.providers.ellipsis': '…', - 'voice.providers.installing': 'Installing', - 'voice.providers.installingBusy': 'Installing…', - 'voice.providers.reinstallLocally': 'Reinstall locally', - 'voice.providers.repair': 'Repair', - 'voice.providers.retryLocally': 'Retry locally', - 'voice.providers.installLocally': 'Install locally', - 'voice.providers.whisperReady': 'Whisper is ready.', - 'voice.providers.whisperInstallStarted': 'Whisper install started', - 'voice.providers.queued': 'queued', - 'voice.providers.failedToInstallWhisper': 'Failed to install Whisper', - 'voice.providers.piperReady': 'Piper is ready.', - 'voice.providers.piperInstallStarted': 'Piper install started', - 'voice.providers.failedToInstallPiper': 'Failed to install Piper', - 'voice.providers.title': 'Voice Providers', - 'voice.providers.desc': - 'Choose where transcription and synthesis run. Use the Install locally buttons to download the binaries and models into your workspace. Local providers can be saved before the install finishes — no manual WHISPER_BIN or PIPER_BIN setup required.', - 'voice.providers.sttProvider': 'Speech-to-Text Provider', - 'voice.providers.sttProviderAria': 'STT provider', - 'voice.providers.cloudWhisperProxy': 'Cloud (Whisper proxy)', - 'voice.providers.localWhisper': 'Local Whisper', - 'voice.providers.installRequired': ' (install required)', - 'voice.providers.whisperInstalledTitle': 'Whisper is installed. Click to reinstall.', - 'voice.providers.whisperDownloadTitle': - 'Download whisper.cpp and the GGML model into your workspace.', - 'voice.providers.installed': 'Installed', - 'voice.providers.installFailed': 'Install failed', - 'voice.providers.notInstalled': 'Not installed', - 'voice.providers.whisperModel': 'Whisper Model', - 'voice.providers.whisperModelAria': 'Whisper model', - 'voice.providers.whisperModelTiny': 'Tiny (39 MB, fastest)', - 'voice.providers.whisperModelBase': 'Base (74 MB)', - 'voice.providers.whisperModelSmall': 'Small (244 MB)', - 'voice.providers.whisperModelMedium': 'Medium (769 MB, recommended)', - 'voice.providers.whisperModelLargeTurbo': 'Large v3 Turbo (1.5 GB, best accuracy)', - 'voice.providers.ttsProvider': 'Text-to-Speech Provider', - 'voice.providers.ttsProviderAria': 'TTS provider', - 'voice.providers.cloudElevenLabsProxy': 'Cloud (ElevenLabs proxy)', - 'voice.providers.localPiper': 'Local Piper', - 'voice.providers.piperInstalledTitle': 'Piper is installed. Click to reinstall.', - 'voice.providers.piperDownloadTitle': - 'Download Piper and the bundled en_US-lessac-medium voice into your workspace.', - 'voice.providers.piperVoice': 'Piper Voice', - 'voice.providers.piperVoiceAria': 'Piper voice', - 'voice.providers.customVoiceOption': 'Other (type below)…', - 'voice.providers.customVoiceAria': 'Piper voice id (custom)', - 'voice.providers.customVoicePlaceholder': 'en_US-lessac-medium', - 'voice.providers.piperVoicesDesc': - 'Voices come from huggingface.co/rhasspy/piper-voices. Switching voices may require an Install/Reinstall click to download the new .onnx.', - 'voice.providers.mascotVoice': 'Mascot Voice', - 'voice.providers.mascotVoiceDescPrefix': - 'The ElevenLabs voice the mascot uses for spoken replies is configured under', - 'voice.providers.mascotSettings': 'Mascot settings', - 'voice.providers.mascotVoiceDescSuffix': '.', - 'voice.providers.hotkeyPlaceholder': 'Fn', - 'voice.providers.piperPreset.lessacMedium': 'US · Lessac (neutral, recommended)', - 'voice.providers.piperPreset.lessacHigh': 'US · Lessac (higher quality, larger)', - 'voice.providers.piperPreset.ryanMedium': 'US · Ryan (male)', - 'voice.providers.piperPreset.amyMedium': 'US · Amy (female)', - 'voice.providers.piperPreset.librittsHigh': 'US · LibriTTS (multi-speaker)', - 'voice.providers.piperPreset.alanMedium': 'GB · Alan (male)', - 'voice.providers.piperPreset.jennyDiocoMedium': 'GB · Jenny Dioco (female)', - 'voice.providers.piperPreset.northernEnglishMaleMedium': 'GB · Northern English (male)', - 'voice.providers.chip.cloud': 'OpenHuman (Managed)', - 'voice.providers.chip.cloudAria': 'OpenHuman managed provider is always enabled', - 'voice.providers.chip.whisper': 'Whisper (Local)', - 'voice.providers.chip.enableWhisper': 'Enable local Whisper STT', - 'voice.providers.chip.disableWhisper': 'Disable local Whisper STT', - 'voice.providers.chip.piper': 'Piper (Local)', - 'voice.providers.chip.enablePiper': 'Enable local Piper TTS', - 'voice.providers.chip.disablePiper': 'Disable local Piper TTS', - 'voice.providers.chip.enableProvider': 'Enable', - 'voice.providers.chip.disableProvider': 'Disable', - 'voice.providers.chip.apiKeyLabel': 'API Key', - 'voice.providers.chip.apiKeyPlaceholder': 'sk-…', - 'voice.providers.chip.comingSoon': 'coming soon', - 'voice.modal.title': 'Configure', - 'voice.modal.desc': - 'Enter your API key to enable this provider. You can test the connection before saving.', - 'voice.modal.testKey': 'Test Key', - 'voice.modal.testing': 'Testing…', - 'voice.modal.saveAndEnable': 'Save & Enable', - 'voice.modal.enable': 'Enable', - 'voice.modal.whisperDesc': - 'Choose a model size and install the Whisper binary and GGML model into your workspace. Larger models are more accurate but slower.', - 'voice.modal.piperDesc': - 'Choose a voice and install the Piper binary and ONNX model into your workspace. Piper runs fully offline with low latency.', - 'voice.routing.title': 'Voice Routing', - 'voice.routing.desc': 'Choose which enabled providers handle speech-to-text and text-to-speech.', - 'voice.routing.save': 'Save', - 'voice.routing.testStt': 'Test STT', - 'voice.routing.testTts': 'Test TTS', - 'voice.routing.elevenlabsVoice': 'ElevenLabs Voice', - 'voice.routing.elevenlabsVoiceAria': 'ElevenLabs voice selection', - 'voice.routing.elevenlabsVoiceIdAria': 'ElevenLabs voice ID (custom)', - 'voice.routing.elevenlabsVoiceDesc': - 'Pick a curated voice or paste a custom voice ID from your ElevenLabs dashboard.', - 'voice.externalProviders.title': 'External Voice Providers', - 'voice.externalProviders.desc': - 'Connect third-party STT/TTS APIs like Deepgram, ElevenLabs, or OpenAI directly.', - 'voice.externalProviders.keySet': 'Key set', - 'voice.externalProviders.noKey': 'No API key', - 'voice.externalProviders.test': 'Test', - 'voice.externalProviders.testing': 'Testing…', - 'voice.externalProviders.remove': 'Remove', - 'voice.externalProviders.provider': 'Provider', - 'voice.externalProviders.selectProvider': 'Select a provider…', - 'voice.externalProviders.apiKey': 'API Key', - 'voice.externalProviders.apiKeyPlaceholder': 'sk-…', - 'voice.externalProviders.add': 'Add', - 'screenAwareness.debug.debugAndDiagnostics': 'Debug & Diagnostics', - 'screenAwareness.debug.collapse': 'Collapse', - 'screenAwareness.debug.expand': 'Expand', - 'screenAwareness.debug.failedToSave': 'Failed to save screen intelligence', - 'screenAwareness.debug.policyTitle': 'Screen Intelligence Policy', - 'screenAwareness.debug.baselineFps': 'Baseline FPS', - 'screenAwareness.debug.useVisionModel': 'Use Vision Model', - 'screenAwareness.debug.useVisionModelDesc': - 'Send screenshots to a vision LLM for richer context. When off, only OCR text is used with a text LLM — faster and no vision model required.', - 'screenAwareness.debug.keepScreenshots': 'Keep Screenshots', - 'screenAwareness.debug.keepScreenshotsDesc': - 'Save captured screenshots to the workspace instead of deleting after processing', - 'screenAwareness.debug.allowlist': 'Allowlist (one rule per line)', - 'screenAwareness.debug.denylist': 'Denylist (one rule per line)', - 'screenAwareness.debug.saveSettings': 'Save Screen Intelligence Settings', - 'screenAwareness.debug.sessionStats': 'Session Stats', - 'screenAwareness.debug.framesEphemeral': 'Frames (ephemeral)', - 'screenAwareness.debug.panicStop': 'Panic stop', - 'screenAwareness.debug.defaultPanicHotkey': 'Cmd+Shift+.', - 'screenAwareness.debug.vision': 'Vision', - 'screenAwareness.debug.idle': 'idle', - 'screenAwareness.debug.visionQueue': 'Vision queue', - 'screenAwareness.debug.lastVision': 'Last vision', - 'screenAwareness.debug.notAvailable': 'n/a', - 'screenAwareness.debug.visionSummaries': 'Vision Summaries', - 'screenAwareness.debug.refreshing': 'Refreshing…', - 'screenAwareness.debug.noSummaries': 'No summaries yet.', - 'screenAwareness.debug.unknownApp': 'Unknown App', - 'screenAwareness.debug.macosOnly': 'Screen Intelligence V1 is currently supported on macOS only.', - 'misc.rehydrating': 'Loading your data...', - 'misc.checkingServices': 'Checking services...', - 'misc.serviceUnavailable': 'Service Unavailable', - 'misc.somethingWentWrong': 'Something went wrong', - 'misc.tryAgainLater': 'Please try again later.', - 'misc.restartApp': 'Restart App', - 'misc.updateAvailable': 'Update Available', - 'misc.updateNow': 'Update Now', - 'misc.updateLater': 'Later', - 'misc.downloading': 'Downloading...', - 'misc.installing': 'Installing...', - 'misc.beta': - 'OpenHuman is in early beta. Feel free to share feedback or report any bugs you run into — every report helps us ship faster.', - 'misc.betaFeedback': 'Send feedback', - 'mnemonic.title': 'Recovery Phrase', - 'mnemonic.warning': 'Write down these words in order and store them somewhere safe.', - 'mnemonic.copyWarning': - 'Never share your recovery phrase. Anyone with these words can access your account.', - 'mnemonic.copied': 'Recovery phrase copied to clipboard', - 'mnemonic.reveal': 'Reveal phrase', - 'mnemonic.revealPhrase': 'Reveal recovery phrase', - 'mnemonic.hidden': 'Recovery phrase is hidden', - 'privacy.title': 'Privacy & Security', - 'privacy.description': 'Transparency report of data sent to external services.', - 'privacy.empty': 'No external data transfers detected.', - 'privacy.whatLeavesComputer': 'What leaves your computer', - 'privacy.loading': 'Loading privacy details...', - 'privacy.loadError': 'Could not load the live privacy list. Analytics controls below still work.', - 'privacy.noCapabilities': 'No capabilities currently disclose data movement.', - 'privacy.sentTo': 'Sent to', - 'privacy.leavesDevice': 'Leaves device', - 'privacy.staysLocal': 'Stays local', - 'privacy.anonymizedAnalytics': 'Anonymized Analytics', - 'privacy.shareAnonymizedData': 'Share Anonymized Usage Data', - 'privacy.shareAnonymizedDataDesc': - 'Help improve OpenHuman by sharing anonymous crash reports and usage analytics. All data is fully anonymized — no personal data, messages, wallet keys, or session information is ever collected.', - 'privacy.meetingFollowUps': 'Meeting follow-ups', - 'privacy.autoHandoffMeet': 'Auto-handoff Google Meet transcripts to the orchestrator', - 'privacy.autoHandoffMeetDesc': - "When a Google Meet call ends, OpenHuman's orchestrator can read the transcript and may take actions like drafting messages, scheduling follow-ups, or posting summaries to your connected Slack workspace. Off by default.", - 'privacy.analyticsDisclaimer': - 'All analytics and bug reports are fully anonymized. When enabled, we collect crash information and device type (via Sentry), plus anonymous usage analytics such as page views and feature engagement (via Google Analytics). We never access your messages, session data, wallet keys, API keys, or any personally identifiable information. You can change this setting at any time.', - 'memory.debugTitle': 'Memory Debug', - 'memory.documents': 'Documents', - 'memory.filterByNamespace': 'Filter by namespace...', - 'memory.refresh': 'Refresh', - 'memory.noDocumentsFound': 'No documents found.', - 'memory.delete': 'Delete', - 'memory.rawResponse': 'Raw response', - 'memory.namespaces': 'Namespaces', - 'memory.noNamespacesFound': 'No namespaces found.', - 'memory.queryRecall': 'Query & Recall', - 'memory.namespace': 'Namespace', - 'memory.queryText': 'Query text...', - 'memory.defaultMaxChunks': '10', - 'memory.maxChunks': 'max chunks', - 'memory.query': 'Query', - 'memory.recall': 'Recall', - 'memory.queryLabel': 'Query', - 'memory.recallLabel': 'Recall', - 'memory.queryResult': 'Query result', - 'memory.recallResult': 'Recall result', - 'memory.clearNamespace': 'Clear Namespace', - 'memory.clearNamespaceDescription': 'Permanently delete all documents within a namespace.', - 'memory.selectNamespace': 'Select namespace...', - 'memory.exampleNamespace': 'e.g. skill:gmail:user@example.com', - 'memory.clear': 'Clear', - 'memory.deleteConfirm': 'Delete document "{documentId}" in namespace "{namespace}"?', - 'memory.clearNamespaceConfirm': - 'This will permanently delete ALL documents in namespace "{namespace}". Continue?', - 'memory.clearNamespaceSuccess': 'Namespace "{namespace}" cleared.', - 'memory.clearNamespaceEmpty': 'Nothing to clear in "{namespace}".', - 'webhooks.debugTitle': 'Webhooks Debug', - 'webhooks.failedToLoadDebugData': 'Failed to load webhook debug data', - 'webhooks.clearLogsConfirm': 'Clear all captured webhook debug logs?', - 'webhooks.failedToClearLogs': 'Failed to clear webhook logs', - 'webhooks.loading': 'Loading...', - 'webhooks.refresh': 'Refresh', - 'webhooks.clearing': 'Clearing...', - 'webhooks.clearLogs': 'Clear Logs', - 'webhooks.registered': 'registered', - 'webhooks.captured': 'captured', - 'webhooks.live': 'live', - 'webhooks.disconnected': 'disconnected', - 'webhooks.lastEvent': 'Last event', - 'webhooks.at': 'at', - 'webhooks.registeredWebhooks': 'Registered Webhooks', - 'webhooks.noActiveRegistrations': 'No active registrations.', - 'webhooks.resolvingBackendUrl': 'Resolving backend URL…', - 'webhooks.capturedRequests': 'Captured Requests', - 'webhooks.noRequestsCaptured': 'No webhook requests captured yet.', - 'webhooks.unrouted': 'unrouted', - 'webhooks.pending': 'pending', - 'webhooks.requestHeaders': 'Request Headers', - 'webhooks.queryParams': 'Query Params', - 'webhooks.requestBody': 'Request Body', - 'webhooks.responseHeaders': 'Response Headers', - 'webhooks.responseBody': 'Response Body', - 'webhooks.rawPayload': 'Raw Payload', - 'webhooks.empty': '[empty]', - 'providerSetup.error.defaultDetails': 'Provider setup failed.', - 'providerSetup.error.providerFallback': 'The provider', - 'providerSetup.error.credentialsRejected': - '{provider} rejected the credentials. Check the API key and try again.', - 'providerSetup.error.endpointNotRecognized': - '{provider} did not recognize the endpoint. Check the base URL and try again.', - 'providerSetup.error.providerUnavailable': - '{provider} is unavailable right now. Try again or check the provider status.', - 'providerSetup.error.unreachable': - 'Could not reach {provider}. Check the endpoint URL and network connection, then try again.', - 'providerSetup.error.couldNotReachWithMessage': 'Could not reach {provider}: {message}', - 'providerSetup.error.technicalDetails': 'Technical details', - 'settings.about.version': 'Version', - 'settings.about.updateAvailable': 'is available', - 'settings.about.softwareUpdates': 'Software updates', - 'settings.about.lastChecked': 'Last checked', - 'settings.about.checking': 'Checking...', - 'settings.about.checkForUpdates': 'Check for updates', - 'settings.about.releases': 'Releases', - 'settings.about.releasesDesc': 'Browse release notes and earlier builds on GitHub.', - 'settings.about.openReleases': 'Open GitHub releases', - 'settings.about.connection': 'Connection', - 'settings.about.connectionMode': 'Mode', - 'settings.about.connectionModeLocal': 'Local', - 'settings.about.connectionModeCloud': 'Cloud', - 'settings.about.connectionModeUnset': 'Not selected', - 'settings.about.serverUrl': 'Server URL', - 'settings.about.serverUrlUnavailable': 'Unavailable', - 'settings.about.connectionHelperLocal': - 'Spawned in-process by the Tauri shell on app launch. The port is chosen at startup, so this URL changes between launches.', - 'settings.about.connectionHelperCloud': - 'Connected to a remote core. Change this in BootCheck or the cloud mode picker.', - 'settings.heartbeat.title': 'Heartbeat & loops', - 'settings.heartbeat.desc': 'Control background scheduling cadences and inspect the loop map.', - 'settings.ledgerUsage.title': 'Usage ledger', - 'settings.ledgerUsage.desc': 'Recent credit spend, budget math, and background API read budget.', - 'settings.costDashboard.title': 'Cost dashboard', - 'settings.costDashboard.desc': - '7-day spend and token burn across the swarm, with budget pace and per-model breakdown.', - 'settings.costDashboard.sevenDayCost': '7-day daily cost', - 'settings.costDashboard.sevenDayTokens': '7-day token usage', - 'settings.costDashboard.totalSpend': '7-day total', - 'settings.costDashboard.monthlyPace': 'Monthly pace', - 'settings.costDashboard.budgetLimit': 'Budget limit', - 'settings.costDashboard.utilization': 'Utilisation', - 'settings.costDashboard.modelBreakdown': 'Per-model breakdown', - 'settings.costDashboard.model': 'Model', - 'settings.costDashboard.provider': 'Provider', - 'settings.costDashboard.cost': 'Cost', - 'settings.costDashboard.tokens': 'Tokens', - 'settings.costDashboard.requests': 'Requests', - 'settings.costDashboard.percentOfTotal': '% of total', - 'settings.costDashboard.inputTokens': 'Input', - 'settings.costDashboard.outputTokens': 'Output', - 'settings.costDashboard.budgetNormal': 'On track', - 'settings.costDashboard.budgetWarning': 'Warning', - 'settings.costDashboard.budgetExceeded': 'Over budget', - 'settings.costDashboard.noBudget': 'No limit set', - 'settings.costDashboard.noData': 'No cost recorded yet for the last 7 days.', - 'settings.costDashboard.noModels': 'No model activity in the last 7 days.', - 'settings.costDashboard.loading': 'Loading cost dashboard…', - 'settings.costDashboard.disabledHint': - 'Cost dashboard is disabled in config. Set [cost.dashboard] enabled = true in config.toml to re-enable.', - 'settings.costDashboard.subtitle': - 'Live spend and token burn across the swarm. Bars auto-refresh every few seconds — no page reload needed.', - 'settings.costDashboard.summaryAriaLabel': 'Cost summary metrics', - 'settings.costDashboard.lastSevenDays': 'last 7 days', - 'settings.costDashboard.utilizationOf': 'of', - 'settings.costDashboard.thisMonth': 'this month', - 'settings.costDashboard.monthlyPaceHint': - 'Projected monthly spend at the current daily run-rate (avg × 30).', - 'settings.costDashboard.budgetLimitHint': - 'Monthly budget read from cost.monthly_limit_usd in config.toml.', - 'settings.costDashboard.dailyTarget': 'Daily target', - 'settings.costDashboard.today': 'Today', - 'settings.costDashboard.todayBadge': 'TODAY', - 'settings.costDashboard.unknownProvider': '—', - 'settings.costDashboard.justNow': 'Just now', - 'settings.costDashboard.secondsAgo': '{value}s ago', - 'settings.costDashboard.minutesAgo': '{value}m ago', - 'settings.costDashboard.hoursAgo': '{value}h ago', - 'settings.costDashboard.daysAgo': '{value}d ago', - 'settings.costDashboard.updated': 'Updated', - 'settings.costDashboard.refresh': 'Refresh', - 'settings.costDashboard.utcNote': 'Days bucketed in UTC', - 'settings.costDashboard.stackedNote': 'Input + output stacked', - 'settings.costDashboard.modelBreakdownHint': 'Aggregated across the last 7 days.', - 'settings.costDashboard.noDataHint': - 'Send an agent message — token usage from the next provider call will populate the chart within ~10 seconds.', - 'settings.search.title': 'Search engine', - 'settings.search.menuDesc': - 'Default to OpenHuman-managed search or wire up your own provider with an API key.', - 'settings.search.description': - 'Pick the search engine the agent uses, or disable search tools entirely. Managed uses OpenHuman’s backend (no setup). Parallel, Brave, and Querit run direct from your machine using your API key.', - 'settings.search.engineAria': 'Search engine', - 'settings.search.engineDisabledLabel': 'Disabled', - 'settings.search.engineDisabledDesc': - 'Remove search tools from the agent context and available tool list.', - 'settings.search.engineManagedLabel': 'OpenHuman Managed', - 'settings.search.engineManagedDesc': - 'Default. Routed through the OpenHuman backend — no API key required.', - 'settings.search.localManagedUnavailable': - 'OpenHuman Managed search is not available for local users. Add your own Parallel, Brave, or Querit API key to enable web search.', - 'settings.search.engineParallelLabel': 'Parallel', - 'settings.search.engineParallelDesc': - 'Direct Parallel API: search, extract, chat, research, enrich, dataset tools.', - 'settings.search.engineBraveLabel': 'Brave Search', - 'settings.search.engineBraveDesc': 'Direct Brave Search API: web, news, image, and video tools.', - 'settings.search.engineQueritLabel': 'Querit', - 'settings.search.engineQueritDesc': - 'Direct Querit API: web search with site, time range, country, and language filters.', - 'settings.search.statusConfigured': 'Configured', - 'settings.search.statusNeedsKey': 'Needs API key', - 'settings.search.fallbackToManaged': - 'No key configured — search will fall back to Managed until a key is saved.', - 'settings.search.getApiKey': 'Get API key', - 'settings.search.save': 'Save', - 'settings.search.clear': 'Clear', - 'settings.search.show': 'Show', - 'settings.search.hide': 'Hide', - 'settings.search.statusSaving': 'Saving…', - 'settings.search.statusSaved': 'Saved.', - 'settings.search.statusError': 'Failed', - 'settings.search.parallelKeyLabel': 'Parallel API key', - 'settings.search.braveKeyLabel': 'Brave Search API key', - 'settings.search.queritKeyLabel': 'Querit API key', - 'settings.search.placeholderStored': '•••••••• (stored)', - 'settings.search.placeholderParallel': 'pk_...', - 'settings.search.placeholderBrave': 'BSA...', - 'settings.search.placeholderQuerit': 'Querit API key', - 'settings.search.allowedSitesLabel': 'Allowed websites', - 'settings.search.allowedSitesHint': - 'Hosts the assistant may open and read — via web fetch and the browser tool — one per line, e.g. reuters.com. A host also covers its subdomains. Web search itself is not restricted by this list.', - 'settings.search.allowedSitesAllOn': - 'The assistant can open any public website. Local and private addresses stay blocked.', - 'settings.search.allowedSitesPlaceholder': 'reuters.com\napnews.com\ngithub.com', - 'settings.search.allowedSitesSave': 'Save websites', - 'settings.search.accessModeAria': 'Web access mode', - 'settings.search.accessAllowAll': 'Allow all', - 'settings.search.accessCustom': 'Custom', - 'settings.search.accessBlockAll': 'Block all', - 'settings.search.accessBlockAllHint': - 'All web access is blocked — the assistant cannot open or read any website.', - 'settings.embeddings.title': 'Embeddings', - 'settings.embeddings.description': - 'Choose which embedding provider converts memory into vectors for semantic search. Changing the provider, model, or dimensions invalidates stored vectors and requires a full memory reset.', - 'settings.embeddings.providerAria': 'Embedding provider', - 'settings.embeddings.statusConfigured': 'Configured', - 'settings.embeddings.statusNeedsKey': 'Needs API key', - 'settings.embeddings.apiKeyLabel': '{provider} API key', - 'settings.embeddings.placeholderStored': '•••••••• (stored)', - 'settings.embeddings.placeholderKey': 'Paste your API key…', - 'settings.embeddings.keyStoredEncrypted': 'Your API key is stored encrypted on this device.', - 'settings.embeddings.show': 'Show', - 'settings.embeddings.hide': 'Hide', - 'settings.embeddings.save': 'Save', - 'settings.embeddings.clear': 'Clear', - 'settings.embeddings.model': 'Model', - 'settings.embeddings.dimensions': 'Dimensions', - 'settings.embeddings.customEndpoint': 'Custom endpoint', - 'settings.embeddings.customModelPlaceholder': 'Model name', - 'settings.embeddings.customDimsPlaceholder': 'Dims', - 'settings.embeddings.applyCustom': 'Apply', - 'settings.embeddings.testConnection': 'Test connection', - 'settings.embeddings.testing': 'Testing…', - 'settings.embeddings.testSuccess': 'Connected — {dims} dimensions', - 'settings.embeddings.testFailed': 'Failed: {error}', - 'settings.embeddings.saving': 'Saving…', - 'settings.embeddings.saved': 'Saved.', - 'settings.embeddings.errorPrefix': 'Failed', - 'settings.embeddings.wipeTitle': 'Reset memory vectors?', - 'settings.embeddings.wipeBody': - 'Switching embedding provider, model, or dimensions will erase all stored memory vectors. Memory must be rebuilt before recall works again. This cannot be undone.', - 'settings.embeddings.cancel': 'Cancel', - 'settings.embeddings.confirmWipe': 'Wipe & apply', - 'settings.embeddings.setupTitle': 'Set up {provider}', - 'settings.embeddings.saveAndSwitch': 'Save & switch', - 'settings.embeddings.optional': 'optional', - 'settings.embeddings.vectorSearchDisabled': - 'Vector search is disabled. Memory recall will use keyword matching and recency only — no semantic ranking.', - 'settings.embeddings.clearKey': 'Clear API key', - 'mcp.alphaBadge': 'Alpha', - 'mcp.alphaBannerText': - 'MCP server support is in early alpha. The Smithery registry, install flow, and tool wiring may misbehave or change shape between releases.', - 'mcp.toolList.noTools': 'No tools available.', - 'mcp.setup.secretDialog.title': 'MCP Setup — Enter Secret', - 'mcp.setup.secretDialog.bodyPrefix': 'The MCP setup agent needs', - 'mcp.setup.secretDialog.bodySuffix': - '. Your value is sent directly to the core process and never enters the AI conversation.', - 'mcp.setup.secretDialog.inputLabel': 'Value', - 'mcp.setup.secretDialog.inputPlaceholder': 'Paste here', - 'mcp.setup.secretDialog.show': 'Show', - 'mcp.setup.secretDialog.hide': 'Hide', - 'mcp.setup.secretDialog.submit': 'Submit', - 'mcp.setup.secretDialog.cancel': 'Cancel', - 'mcp.setup.secretDialog.submitting': 'Submitting…', - 'mcp.setup.secretDialog.errorPrefix': 'Failed to submit:', - 'mcp.setup.secretDialog.privacyNote': - 'Stored encrypted in the local MCP secrets table. Never logged or sent to a model.', - 'devices.betaBadge': 'Beta', - 'devices.betaText': - 'This feature is currently in beta. Pair iOS phones with this OpenHuman to use them as a remote client.', - 'devices.comingSoonDescription': - 'Device pairing is coming soon. This page will be the home for pairing iPhones and managing connected devices.', - 'devices.title': 'Devices', - 'devices.pairIphone': 'Pair iPhone', - 'devices.noPaired': 'No paired devices', - 'devices.emptyState': 'Scan a QR code on your iPhone to connect it to this OpenHuman session.', - 'devices.devicePairedTitle': 'Device paired', - 'devices.devicePairedMessage': 'iPhone connected successfully.', - 'devices.deviceRevokedTitle': 'Device revoked', - 'devices.deviceRevokedMessage': '{label} removed.', - 'devices.revokeFailedTitle': 'Revoke failed', - 'devices.online': 'Online', - 'devices.offline': 'Offline', - 'devices.lastSeenNever': 'Never', - 'devices.lastSeenNow': 'Just now', - 'devices.lastSeenMinutes': '{count}m ago', - 'devices.lastSeenHours': '{count}h ago', - 'devices.lastSeenDays': '{count}d ago', - 'devices.revoke': 'Revoke', - 'devices.revokeAria': 'Revoke {label}', - 'devices.confirmRevokeTitle': 'Revoke device?', - 'devices.confirmRevokeBody': '{label} will no longer be able to connect. This cannot be undone.', - 'devices.loadFailed': 'Failed to load devices: {message}', - 'devices.pairModal.title': 'Pair iPhone', - 'devices.pairModal.loading': 'Generating pairing code…', - 'devices.pairModal.instructions': 'Open the OpenHuman app on your iPhone and scan this code.', - 'devices.pairModal.expiresIn': 'Code expires in ~{count} minute', - 'devices.pairModal.expiresInPlural': 'Code expires in ~{count} minutes', - 'devices.pairModal.showDetails': 'Show details', - 'devices.pairModal.hideDetails': 'Hide details', - 'devices.pairModal.channelId': 'Channel ID', - 'devices.pairModal.pairingUrl': 'Pairing URL', - 'devices.pairModal.expiredTitle': 'QR code expired', - 'devices.pairModal.expiredBody': 'Generate a new code to continue pairing.', - 'devices.pairModal.generateNewCode': 'Generate new code', - 'devices.pairModal.successTitle': 'Paired with iPhone', - 'devices.pairModal.autoClose': 'Closing automatically…', - 'devices.pairModal.errorPrefix': 'Failed to create pairing: {message}', - 'devices.pairModal.errorTitle': 'Something went wrong', - 'devices.pairModal.copyUrl': 'Copy', - 'mcp.catalog.searchAria': 'Search Smithery catalog', - 'mcp.catalog.searchPlaceholder': 'Search Smithery catalog...', - 'mcp.catalog.loadFailed': 'Failed to load catalog', - 'mcp.catalog.noResults': 'No servers found.', - 'mcp.catalog.noResultsFor': 'No servers found for "{query}".', - 'mcp.catalog.loadMore': 'Load more', - 'mcp.configAssistant.title': 'Configuration assistant', - 'mcp.configAssistant.empty': 'Ask about configuration, required env vars, or setup steps.', - 'mcp.configAssistant.suggestedValues': 'Suggested values:', - 'mcp.configAssistant.valueHidden': '(value hidden)', - 'mcp.configAssistant.applySuggested': 'Apply suggested values', - 'mcp.configAssistant.reinstallHint': 'Re-install with these values to apply them.', - 'mcp.configAssistant.thinking': 'Thinking...', - 'mcp.configAssistant.inputPlaceholder': 'Ask a question (Enter to send, Shift+Enter for newline)', - 'mcp.configAssistant.send': 'Send', - 'mcp.configAssistant.failedResponse': 'Failed to get response', - 'mcp.toolList.availableSingular': '{count} tool available', - 'mcp.toolList.availablePlural': '{count} tools available', - 'mcp.toolList.tryTool': 'Try', - 'mcp.toolList.tryToolAria': 'Open execution playground for {name}', - 'mcp.playground.title': 'Run {name}', - 'mcp.playground.close': 'Close playground', - 'mcp.playground.inputSchema': 'Input schema', - 'mcp.playground.argsLabel': 'Arguments (JSON)', - 'mcp.playground.argsHelp': 'Type JSON matching the input schema. Empty input is treated as {}.', - 'mcp.playground.runShortcut': '⌘/Ctrl + Enter to run', - 'mcp.playground.format': 'Format', - 'mcp.playground.invalidJson': 'Invalid JSON', - 'mcp.playground.run': 'Run tool', - 'mcp.playground.running': 'Running…', - 'mcp.playground.result': 'Result', - 'mcp.playground.resultError': 'Tool returned an error', - 'mcp.playground.copyResult': 'Copy result', - 'mcp.playground.copied': 'Copied', - 'mcp.playground.history': 'History', - 'mcp.playground.historyEmpty': 'No invocations yet in this session.', - 'mcp.playground.historyLoad': 'Load', - 'mcp.playground.unexpectedError': 'Unexpected error invoking tool.', - 'mcp.catalog.deployed': 'Deployed', - 'mcp.catalog.installCount': '{count} installs', - 'app.update.dismissNotification': 'Dismiss update notification', - 'bootCheck.rpcAuthSuffix': 'on every RPC.', - 'mcp.installed.title': 'Installed', - 'mcp.installed.browseCatalog': 'Browse catalog', - 'mcp.installed.empty': 'No MCP servers installed yet.', - 'mcp.installed.toolSingular': '{count} tool', - 'mcp.installed.toolPlural': '{count} tools', - 'mcp.health.title': 'Health', - 'mcp.health.summaryAria': 'MCP connection health summary', - 'mcp.health.connectedCount': '{count} connected', - 'mcp.health.connectingCount': '{count} connecting', - 'mcp.health.errorCount': '{count} error', - 'mcp.health.disconnectedCount': '{count} idle', - 'mcp.health.retryAll': 'Retry all ({count})', - 'mcp.health.retryAllAria': 'Retry all {count} errored MCP servers', - 'mcp.health.disconnectAll': 'Disconnect all ({count})', - 'mcp.health.disconnectAllAria': 'Disconnect all {count} connected MCP servers', - 'mcp.health.disconnectConfirm.title': 'Disconnect all MCP servers?', - 'mcp.health.disconnectConfirm.body': - 'This will disconnect {count} currently-connected MCP servers. Installed configurations and secrets are kept; you can reconnect any server later.', - 'mcp.health.disconnectConfirm.cancel': 'Cancel', - 'mcp.health.disconnectConfirm.confirm': 'Disconnect all', - 'mcp.health.opErrorGeneric': 'Bulk operation failed. See logs.', - 'mcp.health.bulkPartialFailure': '{failed} of {total} servers failed. See logs.', - 'mcp.installed.search.landmarkAria': 'Search installed MCP servers', - 'mcp.installed.search.inputAria': 'Filter installed MCP servers by name', - 'mcp.installed.search.placeholder': 'Filter servers…', - 'mcp.installed.search.clearAria': 'Clear filter', - 'mcp.installed.search.countMatches': '{shown} of {total} servers', - 'mcp.installed.search.noMatches': 'No servers match "{query}".', - 'mcp.inventory.openButton': 'Inventory', - 'mcp.inventory.openAria': 'Open the sharable MCP inventory panel', - 'mcp.inventory.title': 'Sharable MCP Inventory', - 'mcp.inventory.subtitle': - 'Export your installed MCP servers as a portable, secret-free manifest, or import one from a teammate. Secret env values are never included or imported.', - 'mcp.inventory.close': 'Close inventory panel', - 'mcp.inventory.tablistAria': 'Inventory sections', - 'mcp.inventory.tab.export': 'Export', - 'mcp.inventory.tab.import': 'Import', - 'mcp.inventory.export.empty': - 'No MCP servers installed yet — nothing to export. Install one from the catalog first.', - 'mcp.inventory.export.privacyTitle': 'What is in this manifest', - 'mcp.inventory.export.privacyBody': - 'Server names, qualified names, env-variable KEY NAMES, and non-secret config only. Secret values, your machine identifiers, and per-install timestamps are intentionally stripped.', - 'mcp.inventory.export.serverCount': '{count} servers in this manifest', - 'mcp.inventory.export.copy': 'Copy', - 'mcp.inventory.export.copied': 'Copied', - 'mcp.inventory.export.copyAria': 'Copy the manifest JSON to the clipboard', - 'mcp.inventory.export.download': 'Download', - 'mcp.inventory.export.downloadAria': 'Download the manifest as a JSON file', - 'mcp.inventory.import.trustTitle': 'Treat imported manifests as untrusted code', - 'mcp.inventory.import.trustBody': - 'An MCP server is a tool you grant your agent. Only import manifests from sources you trust. Each install requires your explicit click; nothing is auto-installed.', - 'mcp.inventory.import.pasteLabel': 'Paste manifest JSON', - 'mcp.inventory.import.pastePlaceholder': 'Paste a manifest here, or upload a .json file below.', - 'mcp.inventory.import.preview': 'Preview', - 'mcp.inventory.import.clear': 'Clear', - 'mcp.inventory.import.uploadFile': 'or upload a .json file', - 'mcp.inventory.import.uploadFileAria': 'Upload a manifest .json file', - 'mcp.inventory.import.fileTooLarge': 'File is too large (over 1 MB). Refusing to load.', - 'mcp.inventory.import.fileReadFailed': 'Could not read file.', - 'mcp.inventory.import.parseErrorPrefix': 'Could not parse manifest:', - 'mcp.inventory.import.previewHeading': 'Preview', - 'mcp.inventory.import.previewCounts': - '{total} servers — {newly} new, {already} already installed', - 'mcp.inventory.import.previewEmpty': 'Manifest contains no servers.', - 'mcp.inventory.import.exportedFrom': 'Exported from {exporter}', - 'mcp.inventory.import.exportedAt': 'at {when}', - 'mcp.inventory.import.statusNew': 'New', - 'mcp.inventory.import.statusAlreadyInstalled': 'Already installed', - 'mcp.inventory.import.envKeysLabel': 'Env keys', - 'mcp.inventory.import.install': 'Install', - 'mcp.inventory.import.installAria': 'Install {name} from this manifest', - 'mcp.inventory.import.skipped': 'skipped', - 'mcp.inventory.parseError.empty': 'Manifest is empty.', - 'mcp.inventory.parseError.invalidJson': 'Invalid JSON.', - 'mcp.inventory.parseError.rootNotObject': 'Manifest must be a JSON object at the root.', - 'mcp.inventory.parseError.unsupportedSchema': - 'Unsupported manifest schema — this file was not produced by a compatible exporter.', - 'mcp.inventory.parseError.missingExportedAt': 'Missing or invalid `exported_at` field.', - 'mcp.inventory.parseError.missingExportedBy': 'Missing or invalid `exported_by` field.', - 'mcp.inventory.parseError.invalidServers': 'Missing or invalid `servers` array.', - 'mcp.inventory.parseError.serverNotObject': 'A server entry is not an object.', - 'mcp.inventory.parseError.serverMissingQualifiedName': - 'A server entry is missing its qualified_name.', - 'mcp.inventory.parseError.serverMissingDisplayName': - 'A server entry is missing its display_name.', - 'mcp.inventory.parseError.serverEnvKeysNotArray': - 'A server entry has an env_keys field that is not an array of strings.', - 'mcp.inventory.parseError.serverContainsEnv': - 'A server entry contains an `env` value map. Refusing to import — manifests must only carry env_keys (names), never secret values.', - 'mcp.inventory.parseError.duplicateQualifiedName': - 'Duplicate qualified_name found in manifest. Each server must appear at most once.', - 'mcp.tab.loading': 'Loading MCP servers...', - 'mcp.tab.emptyDetail': 'Select a server or browse the catalog.', - 'mcp.install.loadingDetail': 'Loading server details...', - 'mcp.install.back': 'Go back', - 'mcp.install.title': 'Install {name}', - 'mcp.install.requiredEnv': 'Required environment variables', - 'mcp.install.enterValue': 'Enter {key}', - 'mcp.install.show': 'Show', - 'mcp.install.hide': 'Hide', - 'mcp.install.configLabel': 'Config (optional JSON)', - 'mcp.install.configPlaceholder': '{"key": "value"}', - 'mcp.install.missingRequired': '"{key}" is required', - 'mcp.install.invalidJson': 'Config JSON is not valid JSON', - 'mcp.install.failedDetail': 'Failed to load server details', - 'mcp.install.failedInstall': 'Install failed', - 'mcp.install.button': 'Install', - 'mcp.install.installing': 'Installing...', - 'mcp.detail.suggestedEnvReady': 'Suggested environment values ready', - 'mcp.detail.suggestedEnvBody': - 'Re-install this server with the suggested values to apply them: {keys}', - 'mcp.detail.connect': 'Connect', - 'mcp.detail.connecting': 'Connecting...', - 'mcp.detail.disconnect': 'Disconnect', - 'mcp.detail.hideAssistant': 'Hide assistant', - 'mcp.detail.helpConfigure': 'Help me configure', - 'mcp.detail.confirmUninstall': 'Confirm uninstall?', - 'mcp.detail.confirmUninstallAction': 'Yes, uninstall', - 'mcp.detail.uninstall': 'Uninstall', - 'mcp.detail.envVars': 'Environment variables', - 'mcp.detail.tools': 'Tools', - 'onboarding.skipForNow': 'Skip for Now', - 'onboarding.localAI.continueWithCloud': 'Continue with Cloud', - 'onboarding.localAI.useLocalAnyway': 'Use local AI anyway (not recommended for your device)', - 'onboarding.localAI.useLocalInstead': 'Use local AI instead (connect Ollama now)', - 'onboarding.localAI.setupIssue': 'Local AI setup encountered an issue', - 'autonomy.title': 'Agent autonomy', - 'autonomy.maxActionsLabel': 'Max actions per hour', - 'autonomy.maxActionsHelp': - 'Maximum tool actions an agent can run per rolling hour. New value applies to your next chat. Cron jobs and channel listeners keep their current limit until you restart OpenHuman.', - 'autonomy.statusSaving': 'Saving…', - 'autonomy.statusSaved': 'Saved.', - 'autonomy.statusFailed': 'Failed', - 'autonomy.unlimitedNote': 'Unlimited — rate limiting disabled.', - 'autonomy.invalidIntegerMsg': - 'Must be a positive integer (use the Unlimited preset for no limit).', - 'autonomy.presetUnlimited': 'Unlimited (default)', - 'triggers.toggleFailed': '{action} failed for {trigger}: {message}', - 'settings.ai.overview': 'AI System Overview', - // Settings menu: Appearance + Mascot (#2225) - 'settings.appearance': 'Appearance', - 'settings.appearanceDesc': 'Pick light, dark, or match your system theme', - 'settings.mascot': 'Mascot', - 'settings.mascotDesc': 'Pick the mascot color used across the app', - 'channels.authMode.managed_dm': 'Login with OpenHuman', - 'channels.authMode.oauth': 'OAuth Sign-in', - 'channels.authMode.bot_token': 'Use your own Bot Token', - 'channels.authMode.api_key': 'Use your own API Key', - 'channels.fieldRequired': '{field} is required', - 'channels.mcp.title': 'MCP Servers', - 'channels.mcp.description': - 'Browse and manage Model Context Protocol servers that extend the AI with new tools.', - 'notifications.routingTitle': 'Notification Routing', - 'notifications.routing.pipelineStats': 'Pipeline stats', - 'notifications.routing.total': 'Total', - 'notifications.routing.unread': 'Unread', - 'notifications.routing.unscored': 'Unscored', - 'notifications.routing.intelligenceTitle': 'Notification Intelligence', - 'notifications.routing.intelligenceDesc': - 'Every notification from your connected accounts is scored by a local AI model. High-importance notifications are automatically routed to your orchestrator agent so nothing critical slips through.', - 'notifications.routing.howItWorks': 'How it works', - 'notifications.routing.level.drop': 'Drop', - 'notifications.routing.level.dropDesc': 'Noise / spam — stored but not surfaced', - 'notifications.routing.level.acknowledge': 'Acknowledge', - 'notifications.routing.level.acknowledgeDesc': 'Low-priority — shown in notification center', - 'notifications.routing.level.react': 'React', - 'notifications.routing.level.reactDesc': 'Medium-priority — triggers a focused agent response', - 'notifications.routing.level.escalate': 'Escalate', - 'notifications.routing.level.escalateDesc': 'High-priority — forwarded to orchestrator agent', - 'notifications.routing.perProvider': 'Per-provider routing', - 'notifications.routing.threshold': 'Threshold', - 'notifications.routing.routeToOrchestrator': 'Route to orchestrator', - 'notifications.routing.loadSettingsError': 'Failed to load settings. Reopen this panel to retry.', - 'settings.billing.inferenceBudget.title': 'Inference Budget', - 'settings.billing.inferenceBudget.noRecurringPlanBudget': 'No recurring plan budget', - 'settings.billing.inferenceBudget.noRecurringWeeklyDesc': - 'Your current plan does not include a recurring weekly inference budget. Usage is paid from available credits instead.', - 'settings.billing.inferenceBudget.remainingSummary': '{remaining} / {budget} remaining', - 'settings.billing.inferenceBudget.spentThisCycle': 'Spent {amount} this cycle', - 'settings.billing.inferenceBudget.cycleEndsOn': 'Cycle ends {date}', - 'settings.billing.inferenceBudget.exhaustedDesc': - 'Included subscription usage is exhausted. Top up credits to keep using AI without waiting for the next cycle.', - 'settings.billing.inferenceBudget.discountVsPayg': '{pct}% cheaper per call than pay-as-you-go.', - 'settings.billing.inferenceBudget.cycleSpend': 'Cycle spend', - 'settings.billing.inferenceBudget.totalAmount': '{amount} total', - 'settings.billing.inferenceBudget.inference': 'Inference', - 'settings.billing.inferenceBudget.integrations': 'Integrations', - 'settings.billing.inferenceBudget.calls': '{count} calls', - 'settings.billing.inferenceBudget.dailySpend': 'Daily spend', - 'settings.billing.inferenceBudget.dailySpendPoint': '{date}: {amount}', - 'settings.billing.inferenceBudget.topModels': 'Top models', - 'settings.billing.inferenceBudget.noInferenceUsage': 'No inference usage this cycle.', - 'settings.billing.inferenceBudget.topIntegrations': 'Top integrations', - 'settings.billing.inferenceBudget.noIntegrationUsage': 'No integration usage this cycle.', - 'settings.billing.inferenceBudget.unableToLoad': 'Unable to load usage data', - 'settings.billing.inferenceBudget.notAvailable': 'n/a', - 'memory.sourceFilterAria': 'Filter by source', - 'calls.comingSoonDescription': 'AI-assisted calls are coming soon. Stay tuned.', - 'vault.title': 'Knowledge vaults (Experimental)', - 'vault.description': 'Point at a local folder; files are chunked and mirrored into memory.', - 'vault.add': 'Add vault', - 'vault.added': 'Vault added', - 'vault.createdMessage': 'Created "{name}". Click {sync} to ingest.', - 'vault.couldNotAdd': 'Could not add vault', - 'vault.syncFailed': 'Sync failed', - 'vault.syncFailedFor': 'Sync failed for "{name}"', - 'vault.syncFailedFiles': 'Failed {count} file(s)', - 'vault.syncedTitle': 'Synced "{name}"', - 'vault.syncSummary': 'Ingested {ingested}, unchanged {unchanged}, removed {removed}', - 'vault.syncSummaryFailed': ', failed {count}', - 'vault.syncSummarySkipped': ', skipped {count}', - 'vault.syncSummaryDuration': ' · {seconds}s', - 'vault.confirmRemovePurge': - 'Remove vault "{name}"?\n\nClick OK to also purge its memory (delete all {count} ingested document(s)).\nClick Cancel to keep the documents in memory.', - 'vault.confirmRemove': 'Really remove vault "{name}"?', - 'vault.removed': 'Vault removed', - 'vault.removedPurgedMessage': 'Removed "{name}" and purged its memory.', - 'vault.removedKeptMessage': 'Removed "{name}". Documents kept in memory.', - 'vault.couldNotRemove': 'Could not remove vault', - 'vault.name': 'Name', - 'vault.namePlaceholder': 'My research notes', - 'vault.folderPath': 'Folder path (absolute)', - 'vault.folderPathPlaceholder': '/Users/you/Documents/notes', - 'vault.excludes': 'Excludes (comma-separated substrings, optional)', - 'vault.excludesPlaceholder': 'drafts/, .secret', - 'vault.creating': 'Creating…', - 'vault.create': 'Create vault', - 'vault.loading': 'Loading vaults…', - 'vault.failedToLoad': 'Failed to load vaults: {error}', - 'vault.empty': 'No vaults yet. Add one above to start ingesting a folder.', - 'vault.fileCount': '{count} file(s)', - 'vault.syncedRelative': 'synced {time}', - 'vault.neverSynced': 'never synced', - 'vault.syncingProgress': 'Syncing… {ingested}/{total}', - 'vault.removing': 'Removing…', - 'vault.relative.sec': '{count}s ago', - 'vault.relative.min': '{count}m ago', - 'vault.relative.hr': '{count}h ago', - 'vault.relative.day': '{count}d ago', - 'whatsapp.title': 'WhatsApp', - 'subconscious.interval.fiveMinutes': '5 min', - 'subconscious.interval.tenMinutes': '10 min', - 'subconscious.interval.fifteenMinutes': '15 min', - 'subconscious.interval.thirtyMinutes': '30 min', - 'subconscious.interval.oneHour': '1 hour', - 'subconscious.interval.sixHours': '6 hours', - 'subconscious.interval.twelveHours': '12 hours', - 'subconscious.interval.oneDay': '1 day', - 'subconscious.priority.critical': 'critical', - 'subconscious.priority.important': 'important', - 'subconscious.priority.normal': 'normal', - 'subconscious.durationSeconds': '{seconds}s', - 'subconscious.durationMilliseconds': '{milliseconds}ms', -}; - -export default en1; diff --git a/app/src/lib/i18n/chunks/en-2.ts b/app/src/lib/i18n/chunks/en-2.ts deleted file mode 100644 index a94353c9c..000000000 --- a/app/src/lib/i18n/chunks/en-2.ts +++ /dev/null @@ -1,495 +0,0 @@ -import type { TranslationMap } from '../types'; - -// English chunk 2/5. Source of truth for translators. -const en2: TranslationMap = { - 'settings.ai.configStatus': 'Configuration Status', - 'settings.ai.fallbackMode': 'Fallback Mode', - 'settings.ai.loadedFromRuntime': 'Loaded from Runtime', - 'settings.ai.loadingDuration': 'Loading Duration', - 'settings.ai.localRuntime': 'Local Model Runtime', - 'settings.ai.openManager': 'Open Manager', - 'settings.ai.retryDownload': 'Retry Download', - 'settings.ai.state': 'State', - 'settings.ai.targetModel': 'Target Model', - 'settings.ai.download': 'Download', - 'settings.ai.localModelUnavailable': 'Local model status unavailable.', - 'settings.ai.soulConfig': 'SOUL Persona Configuration', - 'settings.ai.refreshing': 'Refreshing...', - 'settings.ai.refreshSoul': 'Refresh SOUL', - 'settings.ai.loadingSoul': 'Loading SOUL configuration...', - 'settings.ai.identity': 'Identity', - 'settings.ai.personality': 'Personality', - 'settings.ai.safetyRules': 'Safety Rules', - 'settings.ai.source': 'Source', - 'settings.ai.loaded': 'Loaded', - 'settings.ai.toolsConfig': 'TOOLS Configuration', - 'settings.ai.refreshTools': 'Refresh TOOLS', - 'settings.ai.toolsAvailable': 'Tools Available', - 'settings.ai.tools': 'tools', - 'settings.ai.activeSkills': 'Active Skills', - 'settings.ai.skills': 'skills', - 'settings.ai.skillsOverview': 'Skills Overview', - 'settings.ai.refreshingAll': 'Refreshing All...', - 'settings.ai.refreshAll': 'Refresh All AI Configuration', - 'settings.notifications.suppressAll': 'Suppress all notifications', - 'settings.notifications.suppressAllDesc': - 'Block all OS notification toasts from embedded apps regardless of focus state.', - 'settings.notifications.toggleDnd': 'Toggle Do Not Disturb', - 'settings.notifications.categories': 'Categories', - 'settings.notifications.categoryFooter': - 'Disabling a category stops new notifications of that type from appearing in the notification center. Existing notifications remain until cleared.', - 'settings.billing.movedToWeb': 'Billing moved to the web', - 'settings.billing.openDashboard': 'Open billing dashboard', - 'settings.billing.movedToWebDesc': - 'Subscription changes, payment methods, credits, and invoices are now managed at TinyHumans on the web.', - 'settings.billing.backToSettings': 'Back to settings', - 'settings.billing.openingBrowser': 'Opening your browser...', - 'settings.billing.browserNotOpen': 'If your browser did not open, use the button above.', - 'settings.billing.browserOpenFailed': - 'The browser could not be opened automatically. Use the button above.', - 'settings.tools.chooseCapabilities': - 'Choose which capabilities OpenHuman can use on your behalf.', - 'settings.tools.saveChanges': 'Save Changes', - 'settings.tools.preferencesSaved': 'Preferences saved', - 'settings.tools.saveFailed': 'Failed to save preferences. Try again.', - 'settings.screenAwareness.mode': 'Mode', - 'settings.screenAwareness.allExceptBlacklist': 'All Except Blacklist', - 'settings.screenAwareness.whitelistOnly': 'Whitelist Only', - 'settings.screenAwareness.screenMonitoring': 'Screen Monitoring', - 'settings.screenAwareness.saveSettings': 'Save Settings', - 'settings.screenAwareness.session': 'Session', - 'settings.screenAwareness.status': 'Status', - 'settings.screenAwareness.active': 'Active', - 'settings.screenAwareness.stopped': 'Stopped', - 'settings.screenAwareness.remaining': 'Remaining', - 'settings.screenAwareness.startSession': 'Start Session', - 'settings.screenAwareness.stopSession': 'Stop Session', - 'settings.screenAwareness.analyzeNow': 'Analyze Now', - 'settings.screenAwareness.macosOnly': - 'Screen Awareness desktop capture and permission controls are currently supported on macOS only.', - 'connections.comingSoon': 'Coming soon', - 'connections.setUp': 'Set up', - 'connections.configured': 'Configured', - 'connections.unavailable': 'Unavailable', - 'connections.checking': 'Checking…', - 'connections.walletConfigured': - 'Local EVM, BTC, Solana, and Tron identities are configured from your recovery phrase.', - 'connections.walletReady': - 'Set up local EVM, BTC, Solana, and Tron identities from one recovery phrase.', - 'connections.walletError': - 'Could not check wallet status. Tap to retry from the Recovery Phrase panel.', - 'connections.walletChecking': 'Checking wallet status...', - 'connections.walletIdentities': 'Wallet identities', - 'connections.walletDerived': - 'Derived locally from your recovery phrase and stored as safe metadata only.', - 'connections.privacySecurity': 'Privacy & Security', - 'connections.privacySecurityDesc': - 'All data and credentials are stored locally with zero-data retention policy. Your information is encrypted and never shared with third parties.', - 'channels.status.connecting': 'Connecting', - 'channels.status.notConfigured': 'Not configured', - 'channels.noActiveRoute': 'No active route', - 'channels.activeRoute': 'Active route', - 'channels.loadingDefinitions': 'Loading channel definitions...', - 'channels.channelConnections': 'Channel Connections', - 'channels.configureAuthModes': 'Configure auth modes for each messaging channel.', - 'channels.configNotAvailable': 'Configuration for', - 'channels.channel': 'channel', - 'devOptions.coreModeNotSet': 'Core mode: not set', - 'devOptions.coreModeNotSetDesc': - "The boot-check picker hasn't been confirmed yet. Use Switch mode on the picker to choose Local or Cloud.", - 'devOptions.local': 'Local', - 'devOptions.embeddedCoreSidecar': 'Embedded core sidecar', - 'devOptions.sidecarSpawned': 'Spawned in-process by the Tauri shell on app launch.', - 'devOptions.cloud': 'Cloud', - 'devOptions.remoteCoreRpc': 'Remote core RPC', - 'devOptions.token': 'Token', - 'devOptions.tokenNotSet': 'not set — RPC will 401', - 'devOptions.triggerSentryTest': 'Trigger Sentry Test (staging)', - 'devOptions.triggerSentryTestDesc': - 'Fires a tagged error to verify the Sentry pipeline. Issue #1072 — remove after verification.', - 'devOptions.sendTestEvent': 'Send test event', - 'devOptions.sending': 'Sending…', - 'devOptions.eventSent': 'Event sent', - 'devOptions.failed': 'Failed', - 'devOptions.appLogs': 'App logs', - 'devOptions.appLogsDesc': - 'Open the folder containing rolling daily log files. Attach the most recent file when reporting an issue.', - 'devOptions.openLogsFolder': 'Open logs folder', - 'mnemonic.phraseSaved': 'Recovery phrase saved', - 'mnemonic.walletReady': 'Multi-chain wallet identities are ready. Returning to settings...', - 'mnemonic.writeDownWords': 'Write down these', - 'mnemonic.wordsInOrder': - 'words in order and store them somewhere safe. This phrase secures your local encryption key and your EVM, BTC, Solana, and Tron wallet identities.', - 'mnemonic.cannotRecover': - 'This phrase can never be recovered if lost and should stay fully local to your device.', - 'mnemonic.copyToClipboard': 'Copy to Clipboard', - 'mnemonic.alreadyHavePhrase': 'I already have a recovery phrase', - 'mnemonic.consentSaved': 'I saved this phrase and consent to using it for local wallet setup', - 'mnemonic.enterPhraseToRestore': - 'Enter your recovery phrase below to restore your local wallet identities, or paste the full phrase into any field (12 words for new backups; 24-word phrases from older versions still work).', - 'mnemonic.words': 'Words', - 'mnemonic.validPhrase': 'Valid recovery phrase', - 'mnemonic.generateNewPhrase': 'Generate a new recovery phrase instead', - 'mnemonic.securingData': 'Securing Your Data...', - 'mnemonic.saveRecoveryPhrase': 'Save Recovery Phrase', - 'mnemonic.userNotLoaded': 'User not loaded. Please sign in again or refresh the page.', - 'mnemonic.invalidPhrase': 'Invalid recovery phrase. Please check your words and try again.', - 'mnemonic.somethingWentWrong': 'Something went wrong. Please try again.', - 'team.failedToCreate': 'Failed to create team', - 'team.invalidInviteCode': 'Invalid or expired invite code', - 'team.failedToSwitch': 'Failed to switch team', - 'team.failedToLeave': 'Failed to leave team', - 'team.role.owner': 'Owner', - 'team.role.admin': 'Admin', - 'team.role.billingManager': 'Billing Manager', - 'team.role.member': 'Member', - 'team.active': 'Active', - 'team.personalTeam': 'Personal team', - 'team.manageTeam': 'Manage Team', - 'team.switching': 'Switching...', - 'team.switch': 'Switch', - 'team.leaving': 'Leaving...', - 'team.leave': 'Leave', - 'team.yourTeams': 'Your Teams', - 'team.createNewTeam': 'Create New Team', - 'team.teamName': 'Team name', - 'team.creating': 'Creating...', - 'team.joinExistingTeam': 'Join Existing Team', - 'team.inviteCode': 'Invite code', - 'team.joining': 'Joining...', - 'team.join': 'Join', - 'team.leaveTeam': 'Leave Team', - 'team.confirmLeave': 'Are you sure you want to leave', - 'team.leaveWarning': - "You will lose access to the team and all team resources. You'll need a new invite to rejoin.", - 'team.management': 'Team Management', - 'team.notFound': 'Team not found', - 'team.accessDenied': 'Access denied', - 'team.members': 'Members', - 'voice.title': 'Voice Dictation', - 'voice.settings': 'Voice Settings', - 'voice.settingsDesc': 'Hold the hotkey to dictate and insert text into the active field.', - 'voice.hotkey': 'Hotkey', - 'voice.activationMode': 'Activation Mode', - 'voice.tapToToggle': 'Tap to toggle', - 'voice.writingStyle': 'Writing Style', - 'voice.verbatimTranscription': 'Verbatim transcription', - 'voice.naturalCleanup': 'Natural cleanup', - 'voice.autoStart': 'Start voice server automatically with the core', - 'voice.customDictionary': 'Custom Dictionary', - 'voice.customDictionaryDesc': - 'Add names, technical terms, and domain words to improve recognition accuracy.', - 'voice.addWord': 'Add a word...', - 'voice.sttDisabled': - 'Voice dictation is disabled until the local STT model is downloaded and ready.', - 'voice.openLocalAiModel': 'Open Local AI Model', - 'voice.serverRestarted': 'Voice server restarted with the new settings.', - 'voice.settingsSaved': 'Voice settings saved.', - 'voice.serverStarted': 'Voice server started.', - 'voice.serverStopped': 'Voice server stopped.', - 'voice.saveVoiceSettings': 'Save Voice Settings', - 'voice.startVoiceServer': 'Start Voice Server', - 'voice.stopVoiceServer': 'Stop Voice Server', - 'voice.debugTitle': 'Voice Debug', - 'autocomplete.title': 'Autocomplete', - 'autocomplete.settings': 'Settings', - 'autocomplete.acceptWithTab': 'Accept With Tab', - 'autocomplete.stylePreset': 'Style Preset', - 'autocomplete.style.balanced': 'Balanced', - 'autocomplete.style.concise': 'Concise', - 'autocomplete.style.formal': 'Formal', - 'autocomplete.style.casual': 'Casual', - 'autocomplete.style.custom': 'Custom', - 'autocomplete.disabledApps': 'Disabled Apps (one bundle/app token per line)', - 'autocomplete.saveSettings': 'Save Settings', - 'autocomplete.saving': 'Saving…', - 'autocomplete.runtime': 'Runtime', - 'autocomplete.running': 'Running', - 'autocomplete.start': 'Start', - 'autocomplete.stop': 'Stop', - 'autocomplete.settingsSaved': 'Autocomplete settings saved.', - 'autocomplete.started': 'Autocomplete started.', - 'autocomplete.didNotStart': 'Autocomplete did not start. Check if it is enabled.', - 'autocomplete.stopped': 'Autocomplete stopped.', - 'autocomplete.advancedSettings': 'Advanced settings', - 'autocomplete.debugTitle': 'Autocomplete Debug', - 'chat.agentChat': 'Agent Chat', - 'chat.overrides': 'Overrides', - 'chat.model': 'Model', - 'chat.temperature': 'Temperature', - 'chat.conversation': 'Conversation', - 'chat.startAgentConversation': 'Start a conversation with the agent.', - 'chat.you': 'You', - 'chat.agent': 'Agent', - 'chat.askAgent': 'Ask the agent anything...', - 'chat.sendMessage': 'Send Message', - 'composio.triageTitle': 'Integration Triggers', - 'composio.triageDesc': - 'When active, each incoming Composio trigger runs through an AI triage step that classifies the event and may kick off automated actions — one local LLM turn per trigger. Disable globally or per integration if you prefer manual review. If the environment variable', - 'composio.disableAllTriage': 'Disable AI triage for all triggers', - 'composio.triggersStillRecorded': 'Triggers are still recorded to history — no LLM turn is run.', - 'composio.disableSpecificIntegrations': 'Disable AI triage for specific integrations', - 'composio.settingsSaved': 'Settings saved', - 'composio.saveFailed': 'Failed to save. Try again.', - 'cron.title': 'Cron Jobs', - 'cron.scheduledJobs': 'Scheduled Jobs', - 'cron.manageCronJobs': 'Manage cron jobs from the core scheduler.', - 'cron.refreshCronJobs': 'Refresh Cron Jobs', - 'localModel.modelStatus': 'Model Status', - 'localModel.downloadModels': 'Download Models', - 'localModel.usage': 'Usage', - 'localModel.usageDesc': - 'Choose which subsystems run on the local model. Anything off uses the cloud.', - 'localModel.enableRuntime': 'Enable local AI runtime', - 'localModel.enableRuntimeDesc': - 'Master switch. Off by default — Ollama stays idle. When on, the tree summarizer, screen intelligence, and autocomplete always use the local model.', - 'localModel.advancedSettings': 'Advanced settings', - 'localModel.debugTitle': 'Local Model Debug', - 'localModel.ollamaServer.helperText': 'Example: http://192.168.1.5:11434', - 'localModel.ollamaServer.label': 'Ollama Server URL', - 'localModel.ollamaServer.modelCount': 'models', - 'localModel.ollamaServer.placeholder': 'http://localhost:11434', - 'localModel.ollamaServer.reachable': 'Reachable', - 'localModel.ollamaServer.resetButton': 'Reset to default', - 'localModel.ollamaServer.saveButton': 'Save', - 'localModel.ollamaServer.testButton': 'Test Connection', - 'localModel.ollamaServer.unreachable': 'Unreachable', - 'localModel.ollamaServer.validationError': 'Must be a valid http:// or https:// URL', - 'screenAwareness.debugTitle': 'Screen Awareness Debug', - 'memory.debugTitle': 'Memory Debug', - 'webhooks.debugTitle': 'Webhooks Debug', - 'notifications.routingTitle': 'Notification Routing', - 'common.reload': 'Reload', - 'common.skip': 'Skip', - 'common.disable': 'Disable', - 'common.enable': 'Enable', - 'chat.safetyTimeout': - 'No response from the agent after 2 minutes. Try again or check your connection.', - 'chat.filter.all': 'All', - 'chat.filter.work': 'Work', - 'chat.filter.briefing': 'Briefing', - 'chat.filter.notification': 'Notification', - 'chat.filter.workers': 'Workers', - 'chat.selectThread': 'Select a thread', - 'chat.threads': 'Threads', - 'chat.noThreads': 'No threads yet', - 'chat.noLabelThreads': 'No "{label}" threads', - 'chat.noWorkerThreads': 'No worker threads yet', - 'chat.deleteThread': 'Delete thread', - 'chat.deleteThreadConfirm': 'Are you sure you want to delete "{title}"?', - 'chat.untitledThread': 'Untitled thread', - 'chat.editThreadTitle': 'Edit thread title', - 'chat.hideSidebar': 'Hide sidebar', - 'chat.showSidebar': 'Show sidebar', - 'chat.newThreadShortcut': 'New thread (/new)', - 'chat.new': 'New', - 'chat.failedToLoadMessages': 'Failed to load messages', - 'chat.thinkingIteration': 'Thinking... ({n})', - 'chat.thinkingDots': 'Thinking...', - 'chat.approachingLimit': 'Approaching usage limit', - 'chat.approachingLimitMsg': 'You have used {pct}% of your available quota.', - 'chat.upgrade': 'Upgrade', - 'chat.weeklyLimitHit': "You've used your included cycle budget.", - 'chat.resets': 'Resets', - 'chat.topUpToContinue': 'Top up to continue.', - 'chat.budgetComplete': 'Your included budget is complete. Add credits or upgrade to continue.', - 'chat.topUp': 'Top Up', - 'chat.cycle': 'Cycle', - 'chat.cycleSpent': 'Spent this cycle', - 'chat.cycleRemaining': 'Remaining', - 'chat.left': 'left', - 'chat.setup': 'Set up', - 'chat.switchToText': 'Switch to text', - 'chat.transcribing': 'Transcribing...', - 'chat.stopAndSend': 'Stop and send', - 'chat.startTalking': 'Start talking', - 'chat.playingVoiceReply': 'Playing voice reply', - 'chat.voiceHint': 'Use the mic to speak', - 'chat.micUnavailable': 'Microphone unavailable', - 'chat.turn': 'turn', - 'chat.turns': 'turns', - 'chat.openWorkerThread': 'Open worker thread', - 'chat.attachment.attach': 'Attach image', - 'chat.attachment.remove': 'Remove {name}', - 'chat.attachment.tooMany': 'Maximum {max} images per message', - 'chat.attachment.tooLarge': 'Image exceeds {max} size limit', - 'chat.attachment.unsupportedType': 'Unsupported file type. Use PNG, JPEG, WebP, GIF, or BMP.', - 'chat.attachment.readFailed': 'Could not read file', - 'memory.searchAria': 'Search memory', - 'memory.searchPlaceholder': 'Search memory entries...', - 'memory.sourceFilter.all': 'All sources', - 'memory.sourceFilter.email': 'Email', - 'memory.sourceFilter.calendar': 'Calendar', - 'memory.sourceFilter.telegram': 'Telegram', - 'memory.sourceFilter.aiInsight': 'AI Insight', - 'memory.sourceFilter.system': 'System', - 'memory.sourceFilter.trading': 'Trading', - 'memory.sourceFilter.security': 'Security', - 'memory.ingestionActivity': 'Ingestion Activity', - 'memory.events': 'events', - 'memory.event': 'event', - 'memory.overTheLast': 'over the last', - 'memory.months': 'months', - 'memory.peak': 'Peak', - 'memory.perDay': '/day', - 'memory.less': 'Less', - 'memory.more': 'More', - 'memory.on': 'on', - 'memory.loading': 'Loading Memory', - 'memory.fetching': 'Fetching your memory entries...', - 'memory.analyzing': 'Analyzing Memory', - 'memory.analyzingHint': 'Processing your memories to extract insights...', - 'memory.noMatches': 'No Matches Found', - 'memory.noMatchesHint': 'Try changing your search terms or filters.', - 'memory.allCaughtUp': 'All Caught Up', - 'memory.allCaughtUpHint': 'No new memory entries to process.', - 'memory.noAnalysis': 'No Analysis Yet', - 'memory.noAnalysisHint': 'Run an analysis to discover patterns in your memories.', - 'memory.emptyHint': 'Start interacting to create your first memories.', - 'mic.unavailable': 'Microphone is not available', - 'mic.permissionDenied': 'Microphone permission denied', - 'mic.failedToStartRecorder': 'Failed to start recorder', - 'mic.transcribing': 'Transcribing...', - 'mic.tapToSend': 'Tap to send', - 'mic.waitingForAgent': 'Waiting for agent...', - 'mic.tapAndSpeak': 'Tap and speak', - 'mic.stopRecording': 'Stop recording and send', - 'mic.startRecording': 'Start recording', - 'mic.deviceSelector': 'Microphone device', - 'mic.tapToSendCountdown': 'Tap to send ({seconds}s)', - 'token.usageLimitReached': 'Usage limit reached', - 'token.approachingLimit': 'Approaching limit', - 'token.planClickForDetails': 'plan - click for details', - 'token.sessionTokens': 'In: {in} | Out: {out} | Turns: {turns}', - 'token.limit': 'Limit Reached', - 'catalog.noCapabilityBinding': 'No capability binding', - 'catalog.downloadFailed': 'Download failed', - 'catalog.active': 'Active', - 'catalog.installed': 'Installed', - 'catalog.notDownloaded': 'Not downloaded', - 'catalog.inUse': 'In Use', - 'catalog.use': 'Use', - 'catalog.deleteModel': 'Delete model', - 'catalog.download': 'Download', - 'navigator.recent': 'Recent', - 'navigator.today': 'Today', - 'navigator.thisWeek': 'This Week', - 'navigator.sources': 'Sources', - 'navigator.email': 'Email', - 'navigator.slack': 'Slack', - 'navigator.chat': 'Chat', - 'navigator.documents': 'Documents', - 'navigator.people': 'People', - 'navigator.topics': 'Topics', - 'dreams.description': - 'Dreams are AI-generated reflections that synthesize patterns from your memories.', - 'dreams.comingSoon': 'Coming soon', - 'assignment.memoryLlm': 'Memory LLM', - 'assignment.memoryLlmAria': 'Memory LLM selection', - 'assignment.embedder': 'Embedder', - 'assignment.loaded': 'Loaded', - 'assignment.notDownloaded': 'Not downloaded', - 'assignment.usedForExtractSummarise': 'Used for extraction and summarization', - 'insights.knownFacts': 'Known Facts', - 'insights.preferences': 'Preferences', - 'insights.relationships': 'Relationships', - 'insights.skills': 'Skills', - 'insights.opinions': 'Opinions', - // Developer options menu items (#2225) - 'devOptions.menuAi': 'AI Configuration', - 'devOptions.menuAiDesc': 'Cloud providers, local Ollama models, and per-workload routing', - 'devOptions.menuScreenAware': 'Screen Awareness', - 'devOptions.menuScreenAwareDesc': - 'Screen capture permissions, monitoring policy, and session controls', - 'devOptions.menuMessaging': 'Messaging Channels', - 'devOptions.menuMessagingDesc': - 'Configure Telegram/Discord auth modes and default channel routing', - 'devOptions.menuTools': 'Tools', - 'devOptions.menuToolsDesc': 'Enable or disable capabilities OpenHuman can use on your behalf', - 'devOptions.menuAgentChat': 'Agent Chat', - 'devOptions.menuAgentChatDesc': 'Test agent conversation with model and temperature overrides', - 'devOptions.menuCronJobs': 'Cron Jobs', - 'devOptions.menuCronJobsDesc': 'View and configure scheduled jobs for runtime skills', - 'devOptions.menuLocalModelDebug': 'Local Model Debug', - 'devOptions.menuLocalModelDebugDesc': - 'Ollama config, asset downloads, model tests, and diagnostics', - 'devOptions.menuWebhooksDebug': 'Webhooks', - 'devOptions.menuWebhooksDebugDesc': - 'Inspect runtime webhook registrations and captured request logs', - 'devOptions.menuIntelligence': 'Intelligence', - 'devOptions.menuIntelligenceDesc': 'Memory workspace, subconscious engine, dreams, and settings', - 'devOptions.menuNotificationRouting': 'Notification Routing', - 'devOptions.menuNotificationRoutingDesc': - 'AI importance scoring and orchestrator escalation for integration alerts', - 'devOptions.menuComposeIOTriggers': 'ComposeIO Triggers', - 'devOptions.menuComposeIOTriggersDesc': 'View ComposeIO trigger history and archive', - 'devOptions.menuComposioRouting': 'Composio Routing (Direct Mode)', - 'devOptions.menuComposioRoutingDesc': - 'Bring your own Composio API key and route calls directly to backend.composio.dev', - 'devOptions.menuComposioTriggers': 'Integration Triggers', - 'devOptions.menuComposioTriggersDesc': - 'Configure AI triage settings for Composio integration triggers', - 'settings.agents.title': 'Agents', - 'settings.agents.subtitle': - 'Manage the agents available for delegation — built-in defaults and your own custom agents.', - 'settings.agents.menuDesc': 'Manage built-in and custom agents', - 'settings.agents.newAgent': 'New agent', - 'settings.agents.loadError': "Couldn't load agents", - 'settings.agents.empty': 'No agents yet', - 'settings.agents.sourceDefault': 'Built-in', - 'settings.agents.sourceCustom': 'Custom', - 'settings.agents.enable': 'Enable agent', - 'settings.agents.disable': 'Disable agent', - 'settings.agents.edit': 'Edit', - 'settings.agents.delete': 'Delete', - 'settings.agents.reset': 'Reset to default', - 'settings.agents.modelLabel': 'Model', - 'settings.agents.toolsLabel': 'Tools', - 'settings.agents.toolsAll': 'All tools', - 'settings.agents.toolsCount': '{count} tools', - 'settings.agents.actionFailed': "Couldn't update the agent", - 'settings.agents.orchestratorLocked': 'The orchestrator is always enabled.', - 'settings.agents.editor.createTitle': 'New agent', - 'settings.agents.editor.editTitle': 'Edit agent', - 'settings.agents.editor.id': 'ID', - 'settings.agents.editor.idHint': 'Lowercase letters, numbers, _ and - only.', - 'settings.agents.editor.name': 'Name', - 'settings.agents.editor.description': 'Description', - 'settings.agents.editor.model': 'Model (optional)', - 'settings.agents.editor.modelPlaceholder': 'e.g. inherit, hint:fast, or a model id', - 'settings.agents.editor.systemPrompt': 'System prompt (optional)', - 'settings.agents.editor.tools': 'Allowed tools', - 'settings.agents.editor.toolsHint': 'One tool name per line. Use * for all tools.', - 'settings.agents.editor.defaultsNote': - 'Editing a built-in agent saves an override you can reset later.', - 'settings.agents.editor.save': 'Save', - 'settings.agents.editor.create': 'Create agent', - 'settings.agents.editor.saving': 'Saving…', - 'settings.agentsSection.title': 'Agents', - 'settings.agentsSection.description': - 'Manage your agents, their autonomy, and what they can access on this computer.', - 'settings.agentsSection.menuDesc': 'Registry, autonomy & OS access', - 'settings.agents.editor.notFound': 'Agent not found.', - 'settings.agents.editor.modelInherit': 'Inherit (platform default)', - 'settings.agents.editor.modelHints': 'Route hints', - 'settings.agents.editor.modelTiers': 'Model tiers', - 'settings.agents.editor.modelCustom': 'Custom model id…', - 'settings.agents.editor.modelCustomPlaceholder': 'e.g. anthropic/claude-sonnet-4', - 'settings.agents.editor.selectTools': 'Add tools', - 'settings.agents.editor.toolsAllSelected': 'All tools', - 'settings.agents.editor.toolsNoneSelected': 'No tools selected', - 'settings.agents.editor.removeToolAria': 'Remove {tool}', - 'settings.agents.editor.toolsModalTitle': 'Allowed tools', - 'settings.agents.editor.toolsSelectedCount': '{count} selected', - 'settings.agents.editor.toolsSearchPlaceholder': 'Search tools…', - 'settings.agents.editor.toolsAllowAll': 'Allow all tools (*)', - 'settings.agents.editor.toolsAllowAllHint': 'This agent can use every available tool.', - 'settings.agents.editor.toolsLoading': 'Loading tools…', - 'settings.agents.editor.toolsLoadError': 'Couldn’t load tools', - 'settings.agents.editor.toolsEmpty': 'No tools match your search.', - 'settings.agents.editor.toolsDone': 'Done', - 'settings.agents.editor.builtInReadonly': - 'Built-in agents can’t be edited. You can enable, disable, or reset them from the agents list.', -}; - -export default en2; diff --git a/app/src/lib/i18n/chunks/en-3.ts b/app/src/lib/i18n/chunks/en-3.ts deleted file mode 100644 index 95a56e6da..000000000 --- a/app/src/lib/i18n/chunks/en-3.ts +++ /dev/null @@ -1,501 +0,0 @@ -import type { TranslationMap } from '../types'; - -// English chunk 3/5. Source of truth for translators. -const en3: TranslationMap = { - 'insights.other': 'Other', - 'insights.title': 'Insights', - 'insights.empty': 'No insights yet. Insights are generated as your memory grows.', - 'insights.description': 'Based on {count} relations in your memory graph.', - 'insights.items': 'items', - 'insights.more': 'more', - 'calls.joiningCall': 'Joining call', - 'calls.meetWindowOpening': 'The Meet window is opening...', - 'calls.failedToStart': 'Failed to start Meet call', - 'calls.couldNotStart': 'Could not start call', - 'calls.failedToClose': 'Failed to close call', - 'calls.couldNotClose': 'Could not close call', - 'calls.joinMeet': 'Join a Google Meet call', - 'calls.joinMeetDescription': 'Enter a Google Meet link to join.', - 'calls.meetLink': 'Meet Link', - 'calls.displayName': 'Display Name', - 'calls.openingMeet': 'Opening Meet...', - 'calls.joinCall': 'Join Call', - 'calls.activeCalls': 'Active Calls', - 'calls.leave': 'Leave', - 'workspace.wipeConfirm': 'Are you sure you want to wipe all memory? This cannot be undone.', - 'workspace.resetTreeConfirm': 'Are you sure you want to rebuild the memory tree?', - 'workspace.wipeTitle': 'Wipe Memory', - 'workspace.resetting': 'Resetting...', - 'workspace.resetMemory': 'Reset Memory', - 'workspace.resetTreeTitle': 'Rebuild Memory Tree', - 'workspace.rebuilding': 'Rebuilding...', - 'workspace.resetMemoryTree': 'Reset Memory Tree', - 'workspace.building': 'Building...', - 'workspace.buildSummaryTrees': 'Build Summary Trees', - 'workspace.viewVault': 'View Vault', - 'workspace.openingVaultTitle': 'Opening vault in Obsidian', - 'workspace.openingVaultMessage': - "If Obsidian doesn't open, install it from obsidian.md or use Reveal Folder. Vault path:", - 'workspace.openVaultFailedTitle': "Couldn't open vault in Obsidian", - 'workspace.openVaultFailedMessage': - 'Use Reveal Folder to open the vault directory directly. Vault path:', - 'workspace.revealVaultFailed': "Couldn't reveal vault folder", - 'workspace.revealFolder': 'Reveal Folder', - 'workspace.checkingVault': 'Checking…', - 'workspace.vaultNotRegisteredHelp': - 'Obsidian only opens folders you\'ve added as a vault. In Obsidian, choose "Open folder as vault" and pick the folder below — you only need to do this once. Then click View Vault again.', - 'workspace.obsidianNotFoundHelp': - "We couldn't find Obsidian on this device. Install it, or — if it's installed somewhere non-standard — set its config folder under Advanced.", - 'workspace.openAnyway': 'Open in Obsidian anyway', - 'workspace.installObsidian': 'Install Obsidian', - 'workspace.obsidianAdvanced': 'Obsidian installed elsewhere?', - 'workspace.obsidianConfigDirLabel': 'Obsidian config folder', - 'workspace.obsidianConfigDirHint': - 'Path to the folder containing obsidian.json (e.g. ~/.config/obsidian). Leave blank to auto-detect.', - 'workspace.obsidianConfigDirPlaceholder': '~/.config/obsidian', - 'workspace.graphLoadFailed': 'Failed to load memory graph', - 'workspace.loadingGraph': 'Loading memory graph...', - 'workspace.graphViewMode': 'Memory graph view mode', - 'workspace.trees': 'Trees', - 'workspace.contacts': 'Contacts', - 'graph.noContactMentions': 'No contact mentions', - 'graph.noMemory': 'No memory', - 'graph.source': 'Source', - 'graph.topic': 'Topic', - 'graph.global': 'Global', - 'graph.document': 'Document', - 'graph.contact': 'Contact', - 'graph.nodes': 'nodes', - 'graph.parentChild': 'parent-child', - 'graph.documentContact': 'document-contact', - 'graph.link': 'link', - 'graph.links': 'links', - 'graph.children': 'children', - 'graph.clickToOpenObsidian': 'Click to open in Obsidian', - 'graph.person': 'Person', - 'modal.dontShowAgain': "Don't show similar suggestions", - 'reflections.loading': 'Loading reflections...', - 'reflections.empty': 'No reflections yet', - 'reflections.title': 'Reflections', - 'reflections.proposedAction': 'Proposed Action', - 'reflections.act': 'Act', - 'reflections.dismiss': 'Dismiss', - 'whatsapp.chatsSynced': 'chats synced', - 'whatsapp.chatSynced': 'chat synced', - 'sync.active': 'Active', - 'sync.recent': 'Recent', - 'sync.idle': 'Idle', - 'sync.memorySources': 'Memory Sources', - 'sync.noConnectedSources': 'No connected sources', - 'sync.chunks': 'chunks', - 'sync.lastChunk': 'Last chunk:', - 'sync.pending': 'pending', - 'sync.processed': 'processed', - 'sync.syncing': 'Syncing…', - 'sync.sync': 'Sync', - 'sync.failedToLoad': 'Failed to load sync status', - 'sync.noContent': 'No content has been synced into memory yet. Connect an integration to start.', - 'memorySources.title': 'Memory Sources', - 'memorySources.empty': 'No memory sources yet. Add one to start feeding memory.', - 'memorySources.loadingConnections': 'Loading connections…', - 'memorySources.noConnections': - 'No active Composio connections found. Connect an integration first.', - 'memorySources.pickConnection': 'Pick a connection', - 'memorySources.selectConnection': '— Select a connection —', - 'memorySources.composioListFailed': 'Failed to load Composio connections.', - 'memorySources.browse': 'Browse…', - 'memorySources.folderPathPlaceholder': '/Users/you/notes', - 'memorySources.globPatternPlaceholder': '**/*.md', - 'memorySources.repoUrlPlaceholder': 'https://github.com/org/repo', - 'memorySources.branchPlaceholder': 'main', - 'memorySources.feedUrlPlaceholder': 'https://example.com/feed.xml', - 'memorySources.pageUrlPlaceholder': 'https://example.com/article', - 'memorySources.cssSelectorPlaceholder': 'article', - 'memorySources.searchQueryPlaceholder': 'from:user AI safety', - 'memorySources.kind.composio': 'Integration', - 'memorySources.kind.folder': 'Local Folder', - 'memorySources.kind.github_repo': 'GitHub Repo', - 'memorySources.kind.twitter_query': 'Twitter Search', - 'memorySources.kind.rss_feed': 'RSS Feed', - 'memorySources.kind.web_page': 'Web Page', - 'memorySources.sync.successTitle': 'Syncing', - 'memorySources.sync.successMessage': 'Progress will appear shortly.', - 'memorySources.sync.failedTitle': 'Sync failed:', - 'time.justNow': 'just now', - 'time.secondsAgoSuffix': 's ago', - 'time.minutesAgoSuffix': 'm ago', - 'time.hoursAgoSuffix': 'h ago', - 'time.daysAgoSuffix': 'd ago', - 'memorySources.customSources': 'Custom Sources', - 'memorySources.addSource': 'Add Source', - 'memorySources.noCustomSources': - 'No custom sources yet. Add a folder, GitHub repo, RSS feed, or web page to start.', - 'memorySources.pickKind': 'What kind of source do you want to add?', - 'memorySources.backToKinds': 'Back to source types', - 'memorySources.label': 'Label', - 'memorySources.labelPlaceholder': 'My research notes', - 'memorySources.add': 'Add', - 'memorySources.adding': 'Adding…', - 'memorySources.added': 'Source added', - 'memorySources.removed': 'Source removed', - 'memorySources.remove': 'Remove', - 'memorySources.enable': 'Enable', - 'memorySources.disable': 'Disable', - 'memorySources.toggleFailed': 'Toggle failed', - 'memorySources.removeFailed': 'Remove failed', - 'memorySources.folderPath': 'Folder path', - 'memorySources.globPattern': 'Glob pattern', - 'memorySources.repoUrl': 'Repository URL', - 'memorySources.branch': 'Branch', - 'memorySources.feedUrl': 'Feed URL', - 'memorySources.pageUrl': 'Page URL', - 'memorySources.cssSelector': 'CSS selector (optional)', - 'memorySources.searchQuery': 'Search query', - 'backend.aiBackend': 'AI Backend', - 'backend.cloud': 'Cloud', - 'backend.recommended': 'Recommended', - 'backend.cloudDescription': - 'Fast, powerful models routed through the OpenHuman backend. Ready to use immediately.', - 'backend.privacyNote': - 'Prompts and selected context may be sent to the configured backend/provider. Use local mode for supported on-device workloads.', - 'backend.local': 'Local', - 'backend.advanced': 'Advanced', - 'backend.localDescription': - 'Run models on your own machine using Ollama. Full privacy, requires setup.', - 'backend.ramRecommended': '16GB+ RAM recommended', - 'subconscious.tasks': 'tasks', - 'subconscious.ticks': 'ticks', - 'subconscious.last': 'Last', - 'subconscious.failed': 'failed', - 'subconscious.tickInterval': 'Tick Interval', - 'subconscious.runNow': 'Run Now', - 'subconscious.providerUnavailableTitle': 'Subconscious is paused', - 'subconscious.providerSettings': 'AI settings', - 'subconscious.approvalNeeded': 'Approval Needed', - 'subconscious.requiresApproval': 'Requires approval', - 'subconscious.fixInConnections': 'Fix in Connections', - 'subconscious.goAhead': 'Go Ahead', - 'subconscious.activeTasks': 'Active Tasks', - 'subconscious.noActiveTasks': 'No active tasks', - 'subconscious.default': 'Default', - 'subconscious.addTaskPlaceholder': 'Add a new task...', - 'subconscious.activityLog': 'Activity Log', - 'subconscious.noActivity': 'No activity yet', - 'subconscious.decision.nothingNew': 'Nothing new', - 'subconscious.decision.completed': 'Completed', - 'subconscious.decision.evaluating': 'Evaluating', - 'subconscious.decision.waitingApproval': 'Waiting for approval', - 'subconscious.decision.failed': 'Failed', - 'subconscious.decision.cancelled': 'Cancelled', - 'subconscious.decision.skipped': 'Skipped', - 'actionable.complete': 'Complete', - 'actionable.dismiss': 'Dismiss', - 'actionable.snooze': 'Snooze', - 'actionable.new': 'New', - 'stats.storage': 'Storage', - 'stats.files': 'files', - 'stats.documents': 'Documents', - 'stats.today': 'today', - 'stats.namespaces': 'Namespaces', - 'stats.relations': 'Relations', - 'stats.firstMemory': 'First Memory', - 'stats.latest': 'Latest', - 'stats.sessions': 'Sessions', - 'stats.tokens': 'tokens', - 'bootCheck.invalidUrl': 'Please enter a runtime URL.', - 'bootCheck.urlMustStartWith': 'The URL needs to start with http:// or https://', - 'bootCheck.validUrlRequired': - "That doesn't look like a valid URL (try https://core.example.com/rpc)", - 'bootCheck.tokenRequired': "We'll need an auth token to connect.", - 'bootCheck.chooseCoreMode': 'Select a Runtime', - 'bootCheck.connectToCore': 'Connect to Your Runtime', - 'bootCheck.desktopDescription': 'OpenHuman needs a runtime to think. Pick where it should live.', - 'bootCheck.webDescription': - 'On the web, OpenHuman connects to a runtime you control. Drop in its URL and auth token below, or grab the desktop app to run one right on your machine.', - 'bootCheck.preferDesktop': 'Rather keep everything on your own device?', - 'bootCheck.downloadDesktop': 'Get the Desktop App', - 'bootCheck.localRecommended': 'Run Locally (Recommended)', - 'bootCheck.localDescription': - 'Runs right here on your computer. Fastest, fully private, nothing to set up.', - 'bootCheck.cloudMode': 'Run on the Cloud (Complex)', - 'bootCheck.cloudDescription': - "Connect to a runtime you're hosting elsewhere. Stays online 24×7 so you don't need to keep this device running.", - 'bootCheck.coreRpcUrl': 'Runtime URL', - 'bootCheck.rpcUrlPlaceholder': 'https://core.example.com/rpc', - 'bootCheck.authToken': 'Auth Token', - 'bootCheck.bearerTokenPlaceholder': 'The bearer token from your remote runtime', - 'bootCheck.storedLocally': 'Kept on this device only. Sent as ', - 'bootCheck.testing': 'Testing…', - 'bootCheck.testConnection': 'Test Connection', - 'bootCheck.connectedOk': "Connected. You're good to go.", - 'bootCheck.authFailed': "That token didn't work. Double-check it and try again.", - 'bootCheck.unreachablePrefix': "Couldn't reach it:", - 'bootCheck.checkingCore': 'Waking up your runtime…', - 'bootCheck.cannotReach': "Can't Reach the Runtime", - 'bootCheck.cannotReachDesc': "We couldn't connect to your runtime. Want to try a different one?", - 'bootCheck.switchMode': 'Pick a Different Runtime', - 'bootCheck.quit': 'Quit', - 'bootCheck.legacyDetected': 'Legacy Background Runtime Detected', - 'bootCheck.legacyDescription': - 'A separately-installed OpenHuman daemon is already running on this device. We need to clear it out before the built-in runtime can take over.', - 'bootCheck.removing': 'Removing…', - 'bootCheck.removeContinue': 'Remove and Continue', - 'bootCheck.localNeedsRestart': 'Local Runtime Needs a Restart', - 'bootCheck.localNeedsRestartDesc': - 'Your local runtime is on a different version than this app. A quick restart will get them back in sync.', - 'bootCheck.restarting': 'Restarting…', - 'bootCheck.restartCore': 'Restart Runtime', - 'bootCheck.cloudNeedsUpdate': 'Cloud Runtime Needs an Update', - 'bootCheck.cloudNeedsUpdateDesc': - 'Your cloud runtime is on a different version than this app. Run the updater to bring them back in sync.', - 'bootCheck.updating': 'Updating…', - 'bootCheck.updateCloudCore': 'Update Cloud Runtime', - 'bootCheck.versionCheckFailed': 'Runtime Version Check Failed', - 'bootCheck.versionCheckFailedDesc': - "Your runtime is up but isn't reporting its version. It may be outdated. Restart or update it to continue.", - 'bootCheck.working': 'Working…', - 'bootCheck.restartUpdateCore': 'Restart / Update Runtime', - 'bootCheck.unexpectedError': 'Unexpected Boot-Check Error', - 'bootCheck.actionFailed': 'Something went wrong. Please try again.', - 'bootCheck.portConflictTitle': "Couldn't Start the App Engine", - 'bootCheck.portConflictBody': - "Another process is using the network port OpenHuman needs. We'll try to fix this automatically.", - 'bootCheck.portConflictFixButton': 'Fix Automatically', - 'bootCheck.portConflictFixing': 'Fixing…', - 'bootCheck.portConflictFixFailed': - "Automatic fix didn't work. Please restart your computer and try again.", - 'notifications.justNow': 'just now', - 'notifications.minAgo': '{n}m ago', - 'notifications.hrAgo': '{n}h ago', - 'notifications.dayAgo': '{n}d ago', - 'notifications.category.messages': 'Messages', - 'notifications.category.agents': 'Agents', - 'notifications.category.skills': 'Skills', - 'notifications.category.system': 'System', - 'notifications.category.meetings': 'Meetings', - 'notifications.category.reminders': 'Reminders', - 'notifications.category.important': 'Important', - 'about.update.status.checking': 'Checking...', - 'about.update.status.available': 'v{version} available', - 'about.update.status.availableNoVersion': 'Update available', - 'about.update.status.downloading': 'Downloading...', - 'about.update.status.readyToInstall': 'v{version} ready to install', - 'about.update.status.readyToInstallNoVersion': - 'A new version is downloaded and ready. Restart to apply.', - 'about.update.status.installing': 'Installing...', - 'about.update.status.restarting': 'Restarting...', - 'about.update.status.upToDate': 'You are running the latest version.', - 'about.update.status.error': 'Update check failed', - 'about.update.status.default': 'Check for updates', - 'welcome.connectionFailed': 'Connection failed: {status} {statusText}', - 'welcome.connectionFailedMsg': 'Connection failed: {message}', - 'welcome.continueLocally': 'Continue locally', - 'welcome.continueLocallyExperimental': 'Continue Locally (Experimental)', - 'welcome.localSessionStarting': 'Starting local session...', - 'welcome.localSessionDesc': 'Uses an offline local profile and skips TinyHumans OAuth.', - 'chat.agentChatDesc': 'Open a direct chat session with the agent.', - 'channels.activeRouteValue': '{channel} via {authMode}', - 'privacy.dataKind.messages': 'Messages', - 'privacy.dataKind.agents': 'Agents', - 'privacy.dataKind.skills': 'Skills', - 'privacy.dataKind.system': 'System', - 'privacy.dataKind.meetings': 'Meetings', - 'privacy.dataKind.reminders': 'Reminders', - 'privacy.dataKind.important': 'Important', - 'onboarding.enableLocalAI': 'Enable Local AI', - 'onboarding.skills.status.available': 'Available', - 'onboarding.skills.status.connected': 'Connected', - 'onboarding.skills.status.connecting': 'Connecting', - 'onboarding.skills.status.error': 'Error', - 'onboarding.skills.status.unavailable': 'Unavailable', - 'composio.statusUnavailable': 'Status unavailable', - 'composio.envVarOverrides': 'is set, it overrides this setting.', - 'memory.day.sun': 'Sun', - 'memory.day.mon': 'Mon', - 'memory.day.tue': 'Tue', - 'memory.day.wed': 'Wed', - 'memory.day.thu': 'Thu', - 'memory.day.fri': 'Fri', - 'memory.day.sat': 'Sat', - 'memory.ingesting': 'Ingesting', - 'memory.ingestionQueued': 'Queued', - 'memory.ingestingTitle': 'Ingesting {title}', - 'mic.noAudioCaptured': 'No audio captured', - 'mic.noSpeechDetected': 'No speech detected', - 'mic.lowConfidenceResult': 'Could not understand the audio clearly — please try again', - 'mic.failedToStopRecording': 'Failed to stop recording: {message}', - 'mic.transcriptionFailed': 'Transcription failed: {message}', - 'reflections.kind.retrospective': 'Retrospective', - 'reflections.kind.derivedFact': 'Derived Fact', - 'reflections.kind.moodInsight': 'Mood Insight', - 'reflections.kind.relationshipInsight': 'Relationship Insight', - 'graph.tooltip.summary': 'Summary', - 'graph.tooltip.contact': 'Contact', - 'localModel.usage.never': 'Never', - 'localModel.usage.mediumLoad': 'Medium load', - 'localModel.usage.lowLoad': 'Low load', - 'localModel.usage.idleMode': 'Idle mode', - 'localModel.rebootstrapComplete': 'Model re-bootstrap complete.', - 'localModel.modelsVerified': 'Local models verified.', - 'accounts.addModal.allConnected': 'All connected', - 'accounts.addModal.title': 'Add account', - 'accounts.respondQueue.empty': 'Empty', - 'accounts.respondQueue.hide': 'Hide respond queue', - 'accounts.respondQueue.loadFailed': 'Failed to load respond queue', - 'accounts.respondQueue.loading': 'Loading queue…', - 'accounts.respondQueue.pending': 'Pending', - 'accounts.respondQueue.show': 'Show respond queue', - 'accounts.respondQueue.title': 'Respond queue', - 'accounts.webviewHost.almostReady': 'Almost ready...', - 'accounts.webviewHost.loadTimeout': 'Webview load timeout', - 'accounts.webviewHost.loading': 'Loading {providerName}...', - 'accounts.webviewHost.loadingAccount': 'Loading account', - 'accounts.webviewHost.restoringSession': 'Restoring session...', - 'accounts.webviewHost.retryLoading': 'Retry loading', - 'accounts.webviewHost.takingLonger': '{providerName} is taking longer than expected.', - 'accounts.webviewHost.timeoutHint': 'Timeout hint', - 'app.connectionBadge.composio': 'Composio', - 'app.connectionBadge.messaging': 'Messaging', - 'app.connectionIndicator.connected': 'Connected to OpenHuman AI 🚀', - 'app.connectionIndicator.connecting': 'Connecting', - 'app.connectionIndicator.coreOffline': 'Core offline', - 'app.connectionIndicator.disconnected': 'Disconnected', - 'app.connectionIndicator.offline': 'Offline', - 'app.connectionIndicator.reconnecting': 'Reconnecting…', - 'app.errorFallback.componentStack': 'Component stack', - 'app.errorFallback.downloadLatest': 'Download latest', - 'app.errorFallback.heading': 'Heading', - 'app.errorFallback.hint': 'Hint', - 'app.errorFallback.reloadApp': 'Reload app', - 'app.errorFallback.subheading': 'Subheading', - 'app.errorFallback.tryRecover': 'Try recover', - 'app.localAiDownload.installing': 'Installing...', - 'app.localAiDownload.preparing': 'Preparing...', - 'app.openhumanLink.accounts.continueWith': 'Continue with {label} sign-in', - 'app.openhumanLink.accounts.done': 'Done', - 'app.openhumanLink.accounts.intro': 'Intro', - 'app.openhumanLink.accounts.webviewNote': 'Webview note', - 'app.openhumanLink.billing.openDashboard': 'Open dashboard', - 'app.openhumanLink.billing.stayOnTrial': 'Stay on trial', - 'app.openhumanLink.billing.trialCredit': 'Trial credit', - 'app.openhumanLink.billing.trialDesc': 'Trial desc', - 'app.openhumanLink.defaultBody': - 'Not ready in the popup yet. Open the full settings page when you need it.', - 'app.openhumanLink.discord.intro': 'Intro', - 'app.openhumanLink.discord.openInvite': 'Open invite', - 'app.openhumanLink.discord.perk1': 'Perk1', - 'app.openhumanLink.discord.perk2': 'Perk2', - 'app.openhumanLink.discord.perk3': 'Perk3', - 'app.openhumanLink.discord.perk4': 'Perk4', - 'app.openhumanLink.done': 'Done', - 'app.openhumanLink.loadingChannelSetup': 'Loading channel setup', - 'app.openhumanLink.maybeLater': 'Maybe later', - 'app.openhumanLink.notifications.asking': 'Asking your OS…', - 'app.openhumanLink.notifications.blocked': 'Blocked', - 'app.openhumanLink.notifications.blockedStep1': 'Blocked step1', - 'app.openhumanLink.notifications.blockedStep2': 'Blocked step2', - 'app.openhumanLink.notifications.blockedStep3': 'Blocked step3', - 'app.openhumanLink.notifications.intro': 'Intro', - 'app.openhumanLink.notifications.promptHint': 'Prompt hint', - 'app.openhumanLink.notifications.retry': 'Retry test notification', - 'app.openhumanLink.notifications.send': 'Send test notification', - 'app.openhumanLink.notifications.sendFailed': "Couldn't send: {error}", - 'app.openhumanLink.notifications.sent': - 'Test notification sent. If you didn’t receive it, go to System Settings → Notifications → OpenHuman, turn on Allow Notifications, and set Banner Style to Persistent.', - 'app.openhumanLink.skipForNow': 'Skip for now', - 'app.openhumanLink.telegramUnavailable': 'Telegram unavailable', - 'app.openhumanLink.title.accounts': 'Connect your apps', - 'app.openhumanLink.title.billing': 'Billing & credits', - 'app.openhumanLink.title.discord': 'Join the community', - 'app.openhumanLink.title.messaging': 'Connect a chat channel', - 'app.openhumanLink.title.notifications': 'Allow notifications', - 'app.persistRehydration.body': 'Body', - 'app.persistRehydration.heading': 'Heading', - 'app.persistRehydration.resetCta': 'Resetting…', - 'app.persistRehydration.resetting': 'Resetting…', - 'app.routeLoading.initializing': 'Initializing OpenHuman...', - 'app.update.currentlyOn': '{version}', - 'app.update.errorFallback': 'Something went wrong while updating.', - 'app.update.header.default': 'Update', - 'app.update.header.error': 'Update failed', - 'app.update.header.installing': 'Installing update', - 'app.update.header.readyToInstall': 'Update ready to install', - 'app.update.header.restarting': 'Restarting…', - 'app.update.later': 'Later', - 'app.update.newVersionReady': 'A new version is ready to install.', - 'app.update.progress.downloaded': '{amount} downloaded', - 'app.update.progress.installing': 'Installing the new version…', - 'app.update.progress.restarting': 'Relaunching the app…', - 'app.update.progress.working': '{percent}%', - 'app.update.restartNote': 'Restart note', - 'app.update.restartNow': 'Restart now', - 'app.update.versionReady': 'Version {newVersion} is ready to install.', - 'channels.discord.accountLinked': 'Account linked', - 'channels.discord.connect': 'Connect', - 'channels.discord.linkTokenExpired': 'Link token expired. Please try again.', - 'channels.discord.linkTokenInstruction': '{token}', - 'channels.discord.linkTokenLabel': 'Link token label', - 'channels.discord.linkTokenOnce': 'Link token once', - 'channels.discord.picker.allPermissionsOk': 'Bot has all required permissions in this channel.', - 'channels.discord.picker.botNotInServers': 'Bot not in servers', - 'channels.discord.picker.category': 'Category', - 'channels.discord.picker.channel': 'Channel', - 'channels.discord.picker.checkingPermissions': 'Checking permissions', - 'channels.discord.picker.loadingChannels': 'Loading channels...', - 'channels.discord.picker.loadingServers': 'Loading servers...', - 'channels.discord.picker.missingPermissions': 'Missing permissions', - 'channels.discord.picker.noChannels': 'No text channels found', - 'channels.discord.picker.noServers': 'No servers found', - 'channels.discord.picker.selectChannel': 'Select a channel', - 'channels.discord.picker.selectServer': 'Select a server', - 'channels.discord.picker.server': 'Server', - 'channels.discord.picker.serverChannelSelection': 'Server & Channel Selection', - 'channels.discord.savedRestartRequired': 'Channel saved. Restart the app to activate it.', - 'channels.telegram.connect': 'Connect', - 'channels.telegram.managedDmConnecting': 'Managed dm connecting', - 'channels.telegram.managedDmTimeout': 'Managed dm timeout', - 'channels.telegram.reconnect': 'Reconnect', - 'channels.telegram.savedRestartRequired': 'Channel saved. Restart the app to activate it.', - 'channels.web.alwaysAvailable': 'Always available', - 'chat.approval.approve': 'Approve', - 'chat.approval.alwaysAllow': 'Always allow', - 'chat.approval.alwaysAllowHint': 'Stop asking for this tool — add it to your Always-allow list', - 'chat.approval.deciding': 'Working…', - 'chat.approval.deny': 'Deny', - 'chat.approval.error': 'Could not record your decision — try again.', - 'chat.approval.fallback': 'The agent wants to run an action that needs your approval.', - 'chat.approval.title': 'Approval needed', - 'chat.approval.tool': 'Tool:', - 'channels.discord.displayName': 'Discord', - 'channels.discord.description': 'Send and receive messages via Discord.', - 'channels.discord.authMode.bot_token.description': 'Provide your own Discord bot token.', - 'channels.discord.authMode.oauth.description': - 'Install the OpenHuman bot to your Discord server via OAuth.', - 'channels.discord.authMode.managed_dm.description': - 'Link your personal Discord account to the OpenHuman bot.', - 'channels.discord.fields.bot_token.label': 'Bot Token', - 'channels.discord.fields.bot_token.placeholder': 'Your Discord bot token', - 'channels.discord.fields.guild_id.label': 'Server (Guild) ID', - 'channels.discord.fields.guild_id.placeholder': 'Optional: restrict to a specific server', - 'channels.telegram.displayName': 'Telegram', - 'channels.telegram.description': 'Send and receive messages via Telegram.', - 'channels.telegram.authMode.managed_dm.description': - 'Message the OpenHuman Telegram bot directly.', - 'channels.telegram.authMode.bot_token.description': - 'Provide your own Telegram Bot token from @BotFather.', - 'channels.telegram.fields.bot_token.label': 'Bot Token', - 'channels.telegram.fields.bot_token.placeholder': '123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11', - 'channels.telegram.fields.allowed_users.label': 'Allowed Users', - 'channels.telegram.fields.allowed_users.placeholder': 'Comma-separated Telegram usernames', - 'channels.web.displayName': 'Web', - 'channels.web.description': 'Chat via the built-in web UI.', - 'channels.web.authMode.managed_dm.description': 'Use the embedded web chat — no setup required.', - 'channels.yuanbao.connect': 'Connect', - 'channels.yuanbao.connecting': 'Connecting…', - 'channels.yuanbao.fieldRequired': '{field} is required', - 'channels.yuanbao.reconnect': 'Reconnect', - 'channels.yuanbao.savedRestartRequired': 'Channel saved. Restart the app to activate it.', - 'channels.yuanbao.unexpectedStatus': 'Unexpected connection status: {status}', -}; - -export default en3; diff --git a/app/src/lib/i18n/chunks/en-4.ts b/app/src/lib/i18n/chunks/en-4.ts deleted file mode 100644 index 6139ab021..000000000 --- a/app/src/lib/i18n/chunks/en-4.ts +++ /dev/null @@ -1,492 +0,0 @@ -import type { TranslationMap } from '../types'; - -// English chunk 4/5. Source of truth for translators. -const en4: TranslationMap = { - 'chat.unsubscribeApproval.approve': 'Approve & Unsubscribe', - 'chat.unsubscribeApproval.approved': '✓ Successfully unsubscribed.', - 'chat.unsubscribeApproval.denied': '✕ Request denied.', - 'chat.unsubscribeApproval.deny': 'Deny', - 'chat.unsubscribeApproval.processing': 'Processing...', - 'chat.unsubscribeApproval.title': 'Unsubscribe Request', - 'commandPalette.ariaLabel': 'Command palette', - 'commandPalette.description': 'Description', - 'commandPalette.label': 'Commands', - 'commandPalette.noResults': 'No results', - 'commandPalette.placeholder': 'Type a command or search…', - 'commandPalette.searchAria': 'Search commands', - 'commandPalette.shortcutHint': 'Press ? for all shortcuts', - 'commandPalette.title': 'Command palette', - 'composio.connect.additionalConfigRequired': 'Additional config required', - 'composio.connect.atlassianSubdomainHint': 'acme', - 'composio.connect.atlassianSubdomainLabel': 'Atlassian subdomain label', - 'composio.connect.connect': 'Connect', - 'composio.connect.connectionFailed': 'Connection failed (status: {status}).', - 'composio.connect.disconnectFailed': 'Disconnect failed: {msg}', - 'composio.connect.disconnecting': 'Disconnecting…', - 'composio.connect.idleDescription': 'Connect your', - 'composio.connect.idleDescriptionSuffix': - "account. We'll open a browser window, you approve access there, and this app will detect the connection automatically.", - 'composio.connect.isConnected': 'is connected.', - 'composio.connect.manage': 'Manage', - 'composio.connect.needsSubdomain': 'To connect', - 'composio.connect.needsSubdomainSuffix': - 'enter your Atlassian subdomain (e.g. acme for acme.atlassian.net) and try again.', - 'composio.connect.oauthComplete': 'OAuth to complete…', - 'composio.connect.oauthTimeout': 'Oauth timeout', - 'composio.connect.permissions': 'Permissions', - 'composio.connect.permissionsDefault': 'Read + Write enabled by default', - 'composio.connect.permissionsNote': 'can expose', - 'composio.connect.permissionsNoteSuffix': - "OpenHuman's own agent permissions are controlled below as read, write, and admin toggles.", - 'composio.connect.reopenBrowser': 'Reopen browser', - 'composio.connect.requestingUrl': 'Requesting connect URL…', - 'composio.connect.retryConnection': 'Retry connection', - 'composio.connect.scopeLoadError': "Couldn't load scope preferences: {msg}", - 'composio.connect.scopeSaveError': "Couldn't save {key} scope: {msg}", - 'composio.connect.scope.read': 'Read', - 'composio.connect.scope.readHint': 'Allow the agent to read data from this connection.', - 'composio.connect.scope.write': 'Write', - 'composio.connect.scope.writeHint': - 'Allow the agent to create or modify data through this connection.', - 'composio.connect.scope.admin': 'Admin', - 'composio.connect.scope.adminHint': - 'Allow the agent to manage settings, permissions, or destructive actions.', - 'composio.connect.subdomainInvalid': - 'Enter the short subdomain only (e.g. "acme"), not the full URL. It should contain only letters, numbers, and hyphens.', - 'composio.connect.subdomainRequired': 'Please enter your Atlassian subdomain to continue.', - 'composio.connect.dynamicsOrgNameLabel': 'Dynamics 365 Organization Name', - 'composio.connect.dynamicsOrgNameHint': - 'For example, "myorg" for myorg.crm.dynamics.com. Enter the short org name only, not the full URL.', - 'composio.connect.needsFieldsPrefix': 'To connect', - 'composio.connect.needsFieldsSuffix': - 'we need a bit more information. Fill in the missing fields below and try again.', - 'composio.connect.requiredFieldEmpty': 'This field is required.', - 'composio.connect.wabaIdHint': - 'Find it via GET /me/businesses then GET /{business_id}/owned_whatsapp_business_accounts using your Meta access token.', - 'composio.connect.wabaIdLabel': 'Waba id label', - 'composio.connect.wabaIdRequired': - 'Please enter your WhatsApp Business Account ID (WABA ID) to continue.', - 'composio.connect.waitingFor': 'Waiting for', - 'composio.connect.waitingHint': 'Waiting hint', - 'composio.triggers.heading': 'Triggers', - 'composio.triggers.listenFrom': 'Listen for events from', - 'composio.triggers.loadError': "Couldn't load triggers", - 'composio.triggers.needsConfiguration': 'Needs configuration', - 'composio.triggers.noneAvailable': 'No triggers are currently available for', - 'conversations.taskKanban.moveLeft': 'Move left', - 'conversations.taskKanban.moveRight': 'Move right', - 'conversations.taskKanban.title': 'Tasks', - 'conversations.taskKanban.approval.default': 'Default', - 'conversations.taskKanban.approval.notRequired': 'Not required', - 'conversations.taskKanban.approval.notRequiredBadge': 'no approval', - 'conversations.taskKanban.approval.required': 'Required', - 'conversations.taskKanban.approval.requiredBadge': 'approval', - 'conversations.taskKanban.approval.requiredBeforeExecution': 'Required before execution', - 'conversations.taskKanban.briefButton': 'Task brief', - 'conversations.taskKanban.briefTitle': 'Task brief', - 'conversations.taskKanban.closeBrief': 'Close task brief', - 'conversations.taskKanban.field.acceptanceCriteria': 'Acceptance criteria', - 'conversations.taskKanban.field.allowedTools': 'Allowed tools', - 'conversations.taskKanban.field.approval': 'Approval', - 'conversations.taskKanban.field.assignedAgent': 'Assigned agent', - 'conversations.taskKanban.field.blocker': 'Blocker', - 'conversations.taskKanban.field.evidence': 'Evidence', - 'conversations.taskKanban.field.notes': 'Notes', - 'conversations.taskKanban.field.objective': 'Objective', - 'conversations.taskKanban.field.plan': 'Plan', - 'conversations.taskKanban.field.status': 'Status', - 'conversations.taskKanban.field.title': 'Title', - 'conversations.taskKanban.saveChanges': 'Save changes', - 'conversations.taskKanban.deleteCard': 'Delete', - 'conversations.taskKanban.updateFailed': 'Could not update task; changes were not saved.', - 'conversations.toolTimeline.turn': 'turn', - 'conversations.toolTimeline.workerThread': 'worker thread', - 'daemon.serviceBlockingGate.body': 'Body', - 'daemon.serviceBlockingGate.downloadHint': 'Download hint', - 'daemon.serviceBlockingGate.downloadLatest': 'Download Latest Version', - 'daemon.serviceBlockingGate.retryCore': 'Retry Core', - 'daemon.serviceBlockingGate.retryFailed': - 'Retry failed. Download the latest app build and try again.', - 'daemon.serviceBlockingGate.retrying': 'Retrying...', - 'daemon.serviceBlockingGate.title': 'OpenHuman core is unavailable', - 'home.banners.discordSubtitle': 'Discord subtitle', - 'home.banners.discordTitle': 'Join Our Discord', - 'home.banners.earlyBirdDismiss': 'Dismiss early bird banner', - 'home.banners.earlyBirdFirstSub': 'first subscription.', - 'home.banners.earlyBirdOn': 'Early bird on', - 'home.banners.earlyBirdTitle': 'The first 1,000 users get 60% off.', - 'home.banners.earlyBirdUseCode': 'Early bird use code', - 'home.banners.getSubscription': 'get a subscription', - 'home.banners.promoCreditsBody': "Give OpenHuman a spin, and when you're ready for more,", - 'home.banners.promoCreditsTitle': 'You have {amount} of promotional credits.', - 'home.banners.promoCreditsUsage': 'and get 10x more usage.', - 'intelligence.memoryChunk.detail.chunk': 'Chunk', - 'intelligence.memoryChunk.detail.copyChunkId': 'Copy chunk id', - 'intelligence.memoryChunk.detail.embeddingInfo': 'bge-m3 1024dim', - 'intelligence.memoryChunk.detail.noEmbedding': 'No embedding', - 'intelligence.memoryChunk.letterhead.from': 'from', - 'intelligence.memoryChunk.letterhead.to': 'to', - 'intelligence.memoryChunk.mentioned.chunkOne': '1 chunk', - 'intelligence.memoryChunk.mentioned.chunkOther': '{count} chunks', - 'intelligence.memoryChunk.mentioned.heading': 'm e n t i o n e d', - 'intelligence.memoryChunk.scoreBars.ariaScore': '{name} score {pct} percent', - 'intelligence.memoryChunk.scoreBars.atThreshold': 'at {threshold}', - 'intelligence.memoryChunk.scoreBars.dropped': 'dropped', - 'intelligence.memoryChunk.scoreBars.heading': 'w h y k e p t', - 'intelligence.memoryChunk.scoreBars.kept': 'kept', - 'intelligence.diagram.title': 'Architecture Diagram', - 'intelligence.diagram.description': - 'Latest local architecture output from the configured diagram endpoint.', - 'intelligence.diagram.refresh': 'Refresh', - 'intelligence.diagram.refreshAria': 'Refresh diagram', - 'intelligence.diagram.emptyTitle': 'No diagram available yet', - 'intelligence.diagram.emptyDescription': - 'Generate an architecture diagram from the orchestrator and this panel will refresh from the configured local endpoint.', - 'intelligence.diagram.skillInstallCommand': 'npx skills add yizhiyanhua-ai/fireworks-tech-graph', - 'intelligence.diagram.promptExample': - 'Generate an architecture diagram of the current swarm in dark terminal style', - 'intelligence.diagram.imageAlt': 'Latest generated OpenHuman architecture diagram', - 'intelligence.diagram.refreshesEvery': 'Refreshes every {seconds}s', - 'intelligence.memoryText.entityTypePrefix': 'Entity type', - 'intelligence.screenDebug.active': 'Active', - 'intelligence.screenDebug.app': 'App', - 'intelligence.screenDebug.bounds': 'Bounds', - 'intelligence.screenDebug.captureAlt': 'Capture test result', - 'intelligence.screenDebug.captureFailed': 'Failed', - 'intelligence.screenDebug.captureSuccess': 'Success', - 'intelligence.screenDebug.captureTest': 'Capture test', - 'intelligence.screenDebug.capturing': 'Capturing', - 'intelligence.screenDebug.frames': 'Frames', - 'intelligence.screenDebug.idle': 'Idle', - 'intelligence.screenDebug.lastApp': 'Last App', - 'intelligence.screenDebug.mode': 'Mode', - 'intelligence.screenDebug.permAccessibility': 'Perm accessibility', - 'intelligence.screenDebug.permInput': 'Perm input', - 'intelligence.screenDebug.permScreen': 'Accessibility', - 'intelligence.screenDebug.permissions': 'Permissions', - 'intelligence.screenDebug.platformNotSupported': 'Platform not supported', - 'intelligence.screenDebug.recentVisionSummaries': 'Recent vision summaries', - 'intelligence.screenDebug.session': 'Session', - 'intelligence.screenDebug.size': 'Size', - 'intelligence.screenDebug.status': 'Status', - 'intelligence.screenDebug.testCapture': 'Test capture', - 'intelligence.screenDebug.time': 'Time', - 'intelligence.screenDebug.title': 'Title', - 'intelligence.screenDebug.unknown': 'Unknown', - 'intelligence.screenDebug.visionQueue': 'Vision Queue', - 'intelligence.screenDebug.visionState': 'Vision State', - 'intelligence.tasks.activeBoardOne': '1 active board across conversations', - 'intelligence.tasks.activeBoardOther': '{count} active boards across conversations', - 'intelligence.tasks.empty': 'No agent task boards yet', - 'intelligence.tasks.emptyHint': 'Empty hint', - 'intelligence.tasks.failedToLoad': 'Failed to load', - 'intelligence.tasks.live': 'live', - 'intelligence.tasks.loadingBoards': 'Loading task boards…', - 'intelligence.tasks.threadPrefix': 'Thread {thread}', - 'intelligence.tasks.subtitle': 'Your tasks and agent task boards across the workspace.', - 'intelligence.tasks.newTask': 'New task', - 'intelligence.tasks.personalBoardTitle': 'Agent Tasks', - 'intelligence.tasks.personalEmpty': 'No personal tasks yet', - 'intelligence.tasks.composer.title': 'New task', - 'intelligence.tasks.composer.titleLabel': 'Title', - 'intelligence.tasks.composer.titlePlaceholder': 'What needs to be done?', - 'intelligence.tasks.composer.statusLabel': 'Status', - 'intelligence.tasks.composer.attachLabel': 'Attach to conversation', - 'intelligence.tasks.composer.attachNone': 'Personal (no conversation)', - 'intelligence.tasks.composer.objectiveLabel': 'Objective', - 'intelligence.tasks.composer.objectivePlaceholder': 'Optional — the desired outcome', - 'intelligence.tasks.composer.notesLabel': 'Notes', - 'intelligence.tasks.composer.notesPlaceholder': 'Optional notes', - 'intelligence.tasks.composer.create': 'Create task', - 'intelligence.tasks.composer.creating': 'Creating…', - 'intelligence.tasks.composer.createFailed': "Couldn't create the task", - 'notifications.card.dismiss': 'Dismiss notification', - 'notifications.card.importanceTitle': 'Importance: {pct}%', - 'notifications.center.empty': 'No notifications yet', - 'notifications.center.emptyHint': 'Empty hint', - 'notifications.center.filterAll': 'Filter all', - 'notifications.center.markAllRead': 'Mark all read', - 'notifications.center.title': 'Notifications', - 'oauth.button.loopbackTimeout': - 'Sign-in timed out — the browser did not complete the OAuth redirect. Please try again.', - 'oauth.button.connecting': 'Connecting...', - 'oauth.login.continueWith': 'Continue with', - 'onboarding.contextGathering.buildingDesc': 'Building desc', - 'onboarding.contextGathering.buildingProfile': 'Building your profile...', - 'onboarding.contextGathering.continueToChat': 'Continue to chat', - 'onboarding.contextGathering.errorDesc': - "Your chat is ready. We'll keep building your full profile in the background, so you can continue now and refine it over time.", - 'onboarding.contextGathering.coreAlive': 'Core is reachable — first launch can take a minute.', - 'onboarding.contextGathering.coreAliveProbing': 'Checking core connection…', - 'onboarding.contextGathering.coreUnreachable': - 'Core is not responding. You can continue and try again later.', - 'onboarding.contextGathering.stillWorkingDesc': - 'First launch can take 30–60 seconds while we warm up your local model and tools. You can continue to chat at any time — profile build keeps running in the background.', - 'onboarding.contextGathering.stillWorkingTitle': 'Still working on your profile…', - 'onboarding.contextGathering.title': 'Context Gathering', - 'openhuman.team_list_teams': 'Team list teams', - 'overlay.ariaAttention': 'Attention message', - 'overlay.ariaCompanion': 'Companion active', - 'overlay.ariaOrb': 'OpenHuman overlay', - 'overlay.ariaVoiceActive': 'Voice input active', - 'overlay.companion.error': 'Error', - 'overlay.companion.listening': 'Listening…', - 'overlay.companion.pointing': 'Pointing…', - 'overlay.companion.speaking': 'Speaking…', - 'overlay.companion.thinking': 'Thinking…', - 'overlay.orbTitle': 'Drag to move · Double-click to reset position', - 'pages.settings.account.connections': 'Connections', - 'pages.settings.account.connectionsDesc': 'Review and manage linked account connections', - 'pages.settings.account.privacy': 'Privacy', - 'pages.settings.account.privacyDesc': 'Manage data sharing and anonymized usage preferences', - 'pages.settings.account.recoveryPhrase': 'Recovery Phrase', - 'pages.settings.account.recoveryPhraseDesc': - 'Manage your BIP39 recovery phrase for encryption and wallet access', - 'pages.settings.account.team': 'Team', - 'pages.settings.account.teamDesc': 'Manage your team, members, and invites', - 'pages.settings.account.migration': 'Import from another assistant', - 'pages.settings.account.migrationDesc': - 'Migrate memory and notes from OpenClaw (or, soon, Hermes) into this workspace.', - 'pages.settings.account.walletBalances': 'Wallet Balances', - 'pages.settings.account.walletBalancesDesc': 'View multi-chain balances for your local wallet', - 'pages.settings.accountSection.description': - 'Recovery phrase, team, connections, and privacy settings.', - 'pages.settings.accountSection.title': 'Account', - // WalletBalancesPanel strings - 'walletBalances.title': 'Wallet Balances', - 'walletBalances.refresh': 'Refresh', - 'walletBalances.loading': 'Loading balances…', - 'walletBalances.retry': 'Retry', - 'walletBalances.emptyState': 'No wallet accounts yet — set up a wallet in Recovery Phrase.', - 'walletBalances.copyAddress': 'Copy address', - 'walletBalances.providerMissing': 'provider unavailable', - 'walletBalances.rawBalance': 'Raw: {raw}', - 'walletBalances.errorGeneric': - 'Unable to load wallet balances. Set up your wallet in Recovery Phrase and try again.', - 'pages.settings.ai.llm': 'Llm', - 'pages.settings.ai.llmDesc': 'Llm desc', - 'pages.settings.ai.voice': 'Voice', - 'pages.settings.ai.voiceDesc': 'Voice desc', - 'pages.settings.ai.embeddings': 'Embeddings', - 'pages.settings.ai.embeddingsDesc': 'Vector encoding model for memory retrieval', - 'pages.settings.aiSection.description': - 'Language model providers, local Ollama, and voice (STT / TTS).', - 'pages.settings.aiSection.title': 'AI', - 'pages.settings.composioSection.title': 'Composio', - 'pages.settings.composioSection.description': - 'Routing, triggers, and history for integrations powered by Composio.', - 'pages.settings.features.desktopCompanion': 'Desktop Companion', - 'pages.settings.features.desktopCompanionDesc': - 'Voice assistant with screen awareness — listens, sees, speaks, points', - 'pages.settings.features.messagingChannels': 'Messaging channels', - 'pages.settings.features.messagingChannelsDesc': 'Messaging channels desc', - 'pages.settings.features.notifications': 'Notifications', - 'pages.settings.features.notificationsDesc': 'Notifications desc', - 'pages.settings.features.screenAwareness': 'Screen awareness', - 'pages.settings.features.screenAwarenessDesc': 'Screen awareness desc', - 'pages.settings.features.tools': 'Tools', - 'pages.settings.features.toolsDesc': 'Tools desc', - 'pages.settings.featuresSection.description': 'Screen awareness, messaging, and tools.', - 'pages.settings.featuresSection.title': 'Features', - 'privacy.dataKind.credentials': 'Credentials', - 'privacy.dataKind.derived': 'Derived', - 'privacy.dataKind.diagnostics': 'Diagnostics', - 'privacy.dataKind.metadata': 'Metadata', - 'privacy.dataKind.raw': 'Raw', - 'privacy.whatLeaves.link.label': 'What leaves my computer?', - 'rewards.community.achievementsUnlocked': '{unlocked} of {total} achievements unlocked', - 'rewards.community.connectDiscord': 'Connect Discord', - 'rewards.community.cumulativeTokens': 'Cumulative tokens', - 'rewards.community.currentStreak': 'Current streak', - 'rewards.community.discordLinkedNotInGuild': 'Linked, but not in server', - 'rewards.community.discordMember': 'Joined the server', - 'rewards.community.discordNotLinked': 'Not linked', - 'rewards.community.discordServer': 'Discord server', - 'rewards.community.discordStatusUnavailable': 'Membership status unavailable', - 'rewards.community.discordWaiting': 'Waiting for backend sync', - 'rewards.community.heroSubtitle': - 'Unlock exclusive channels, supporter badges, and backend-synced rewards by connecting your Discord account.', - 'rewards.community.heroTitle': 'Earn Rewards & Discord Roles', - 'rewards.community.joinDiscord': 'Join Discord', - 'rewards.community.loadingRewards': 'Loading rewards…', - 'rewards.community.locked': 'Locked', - 'rewards.community.retrying': 'Retrying…', - 'rewards.community.rolesAndRewards': 'Roles & Rewards', - 'rewards.community.streakDays': '{n} days', - 'rewards.community.syncPending': 'Rewards sync pending', - 'rewards.community.syncPendingDesc': 'Sync pending desc', - 'rewards.community.syncUnavailable': 'Sync unavailable', - 'rewards.community.tryAgain': 'Retrying…', - 'rewards.community.unknown': 'Unknown', - 'rewards.community.unlocked': 'Unlocked', - 'rewards.community.yourProgress': 'Your Progress', - 'rewards.coupon.colCode': 'Code', - 'rewards.coupon.colRedeemed': 'Redeemed', - 'rewards.coupon.colReward': 'Reward', - 'rewards.coupon.colStatus': 'Status', - 'rewards.coupon.loadingHistory': 'Loading reward history…', - 'rewards.coupon.noCodes': 'No reward codes redeemed yet.', - 'rewards.coupon.pending': 'Pending', - 'rewards.coupon.placeholder': 'Coupon code', - 'rewards.coupon.promoCredits': 'Promo credits', - 'rewards.coupon.recentRedemptions': 'Recent redemptions', - 'rewards.coupon.redeemAccepted': - '{code} accepted. {amount} will unlock after the required action is completed.', - 'rewards.coupon.redeemButton': 'Redeem Code', - 'rewards.coupon.redeemSuccess': '{code} redeemed. {amount} was added to your credits.', - 'rewards.coupon.redeemedCodes': 'Redeemed codes', - 'rewards.coupon.redeeming': 'Redeeming...', - 'rewards.coupon.statusApplied': 'Applied', - 'rewards.coupon.statusPendingAction': 'Pending action', - 'rewards.coupon.statusRedeemed': 'Redeemed', - 'rewards.coupon.subtitle': 'Subtitle', - 'rewards.coupon.title': 'Redeem a coupon code', - 'rewards.referralSection.activity': 'Referral activity', - 'rewards.referralSection.apply': 'Applying…', - 'rewards.referralSection.applying': 'Applying…', - 'rewards.referralSection.colReferredUser': 'Referred user', - 'rewards.referralSection.colReward': 'Reward', - 'rewards.referralSection.colStatus': 'Status', - 'rewards.referralSection.colUpdated': 'Updated', - 'rewards.referralSection.completed': 'Completed', - 'rewards.referralSection.copyCode': 'Copy code', - 'rewards.referralSection.copyFailed': 'Copy failed', - 'rewards.referralSection.haveCode': 'Have a referral code?', - 'rewards.referralSection.haveCodeDesc': 'Have code desc', - 'rewards.referralSection.linked': 'Linked', - 'rewards.referralSection.linkedCode': '(code {code})', - 'rewards.referralSection.loading': 'Loading referral program…', - 'rewards.referralSection.noReferrals': 'No referrals', - 'rewards.referralSection.pendingReferrals': 'Pending referrals', - 'rewards.referralSection.placeholder': 'Referral code', - 'rewards.referralSection.share': 'Share', - 'rewards.referralSection.statusCompleted': 'Status completed', - 'rewards.referralSection.statusExpired': 'Status expired', - 'rewards.referralSection.statusJoined': 'Status joined', - 'rewards.referralSection.subtitle': 'Subtitle', - 'rewards.referralSection.title': 'Invite friends, earn credits', - 'rewards.referralSection.totalEarned': 'Total earned', - 'rewards.referralSection.yourCode': 'Your code', - 'settings.ai.addCloudProvider': 'Add cloud provider', - 'settings.ai.addProvider': 'Saving…', - 'settings.ai.apiKeyFieldLabel': 'Api key field label', - 'settings.ai.apiKeyRequired': 'Please paste your API key to continue.', - 'settings.ai.apiKeyStoredEncrypted': 'Api key stored encrypted', - 'settings.ai.apiKeysEncrypted': 'auth-profiles.json', - 'settings.ai.clearStoredKey': 'Clear stored key', - 'settings.ai.connectProvider': 'Connect provider', - 'settings.ai.customRouting': 'Custom routing', - 'settings.ai.defaultResolvesTo': 'Default resolves to', - 'settings.ai.discard': 'Discard', - 'settings.ai.editProvider': 'Edit provider', - 'settings.ai.llmProviders': 'LLM Providers', - 'settings.ai.llmProvidersDesc': 'Llm providers desc', - 'settings.ai.localOllama': 'Local (Ollama)', - 'settings.ai.modelLabel': 'Model', - 'settings.ai.noCustomProviders': 'No custom providers', - 'settings.ai.openAiCompat.authHeaderExample': 'Authorization: Bearer ', - 'settings.ai.openAiCompat.authHeaderLabel': 'Auth header', - 'settings.ai.openAiCompat.baseUrlLabel': 'Base URL', - 'settings.ai.openAiCompat.baseUrlUnavailable': 'Unavailable', - 'settings.ai.openAiCompat.clearKey': 'Clear key', - 'settings.ai.openAiCompat.description': - "Point local harnesses at this /v1 server to route through the providers configured below. Authentication uses a stable key you set here, not the app's internal core bearer.", - 'settings.ai.openAiCompat.keyConfigured': 'Key configured', - 'settings.ai.openAiCompat.keyRequired': 'Key required', - 'settings.ai.openAiCompat.rotateKey': 'Rotate key', - 'settings.ai.openAiCompat.setKey': 'Set key', - 'settings.ai.openAiCompat.title': 'OpenAI-compatible endpoint', - 'settings.ai.providerLabel': 'Provider', - 'settings.ai.routing': 'Routing', - 'settings.ai.routingCustom': 'Routing custom', - 'settings.ai.routingDefault': 'Default', - 'settings.ai.routingDesc': 'Routing desc', - 'settings.ai.saveChanges': 'Saving…', - 'settings.ai.saving': 'Saving…', - 'settings.ai.unsavedChange': 'unsaved change', - 'settings.ai.unsavedChanges': 'unsaved changes', - 'settings.ai.workloadGroupBackground': 'Workload group background', - 'settings.ai.workloadGroupChat': 'Workload group chat', - 'settings.autocomplete.appFilter.acceptSuggestion': 'Accept suggestion', - 'settings.autocomplete.appFilter.contextOverride': 'Context Override (optional)', - 'settings.autocomplete.appFilter.debugFocus': 'Debug focus', - 'settings.autocomplete.appFilter.getSuggestion': 'Get suggestion', - 'settings.autocomplete.appFilter.liveLogs': 'Live Logs', - 'settings.autocomplete.appFilter.noLogs': ') :', - 'settings.autocomplete.appFilter.refreshStatus': 'Refreshing…', - 'settings.autocomplete.appFilter.refreshing': 'Refreshing…', - 'settings.autocomplete.appFilter.runtime': 'Runtime', - 'settings.autocomplete.appFilter.test': 'Test', - 'settings.autocomplete.completionStyle.acceptedCompletion': - '{count} accepted completion stored — used to personalise future suggestions.', - 'settings.autocomplete.completionStyle.acceptedCompletions': - '{count} accepted completions stored — used to personalise future suggestions.', - 'settings.autocomplete.completionStyle.clearHistory': 'Clearing…', - 'settings.autocomplete.completionStyle.clearing': 'Clearing…', - 'settings.autocomplete.completionStyle.debounce': 'Debounce (ms)', - 'settings.autocomplete.completionStyle.enabled': 'Enabled', - 'settings.autocomplete.completionStyle.maxChars': 'Max Chars', - 'settings.autocomplete.completionStyle.noHistory': - 'No accepted completions yet. Accept suggestions with Tab to start personalising.', - 'settings.autocomplete.completionStyle.overlayTtl': 'Overlay TTL (ms)', - 'settings.autocomplete.completionStyle.personalizationHistory': 'Personalization History', - 'settings.autocomplete.completionStyle.styleExamples': 'Style Examples (one per line)', - 'settings.autocomplete.completionStyle.styleInstructions': 'Style Instructions', - 'settings.billing.autoRecharge.addAmount': 'Add this amount', - 'settings.billing.autoRecharge.addCard': 'Add card', - 'settings.billing.autoRecharge.amountHint': 'Amount hint', - 'settings.billing.autoRecharge.defaultCard': 'Default card', - 'settings.billing.autoRecharge.lastRechargeFailed': 'Last recharge failed', - 'settings.billing.autoRecharge.lastRecharged': 'Last recharged', - 'settings.billing.autoRecharge.noCards': 'No cards', - 'settings.billing.autoRecharge.paymentMethods': 'Payment Methods', - 'settings.billing.autoRecharge.rechargeInProgress': 'Recharge in progress', - 'settings.billing.autoRecharge.rechargeWhen': 'Recharge when balance drops below', - 'settings.billing.autoRecharge.saveSettings': 'Saving…', - 'settings.billing.autoRecharge.saving': 'Saving…', - 'settings.billing.autoRecharge.setDefault': ':', - 'settings.billing.autoRecharge.subtitle': 'Subtitle', - 'settings.billing.autoRecharge.title': 'Enable Auto-Recharge', - 'settings.billing.autoRecharge.toggleAriaLabel': 'Toggle auto-recharge', - 'settings.billing.autoRecharge.weeklyLimit': 'Weekly spending limit', - 'settings.billing.history.desc': 'Desc', - 'settings.billing.history.empty': 'Empty', - 'settings.billing.history.openPortal': 'Open portal', - 'settings.billing.history.posted': 'Posted', - 'settings.billing.history.title': 'Title', - 'settings.billing.inferenceBudget.cycleEnds': 'Cycle ends', - 'settings.billing.inferenceBudget.exhausted': 'Exhausted', - 'settings.billing.inferenceBudget.loadError': 'Load error', - 'settings.billing.inferenceBudget.noBudgetDesc': 'No budget desc', - 'settings.billing.inferenceBudget.noRecurringBudget': 'No recurring budget', - 'settings.billing.inferenceBudget.remaining': 'Remaining', - 'settings.billing.inferenceBudget.tenHourCap': 'Ten hour cap', - 'settings.billing.inferenceBudget.title': 'Title', - 'settings.billing.payAsYouGo.available': 'Available', - 'settings.billing.payAsYouGo.chargeCustomAmount': 'Opening…', - 'settings.billing.payAsYouGo.chooseTopUpDesc': 'Choose top up desc', - 'settings.billing.payAsYouGo.chooseTopUpTitle': 'Choose top up title', - 'settings.billing.payAsYouGo.creditBalanceDesc': 'Credit balance desc', - 'settings.billing.payAsYouGo.creditBalanceTitle': 'Credit balance title', - 'settings.billing.payAsYouGo.customAmount': 'Custom amount', - 'settings.billing.payAsYouGo.enterAmount': 'Enter amount', - 'settings.billing.payAsYouGo.opening': 'Opening', - 'settings.billing.payAsYouGo.promotionalCredits': 'Promotional Credits', - 'settings.billing.payAsYouGo.topUpBalance': 'Top-up Balance', - 'settings.billing.payAsYouGo.topUpCredits': 'Top Up Credits', - 'settings.billing.payAsYouGo.unableToLoad': 'Unable to load balance.', - 'settings.billing.subscription.annual': 'Annual', - 'settings.billing.subscription.billedAnnually': 'Billed annually', - 'settings.billing.subscription.chooseSubtitle': 'Choose subtitle', - 'settings.billing.subscription.chooseTitle': 'Choose title', - 'settings.billing.subscription.cryptoDesc': 'Crypto desc', - 'settings.billing.subscription.cryptoQuestion': 'Crypto question', - 'settings.billing.subscription.current': 'Current', - 'settings.billing.subscription.currentPlan': 'Current plan', - 'settings.billing.subscription.monthly': 'Monthly', - 'settings.billing.subscription.paymentConfirmed': 'Payment confirmed', - 'settings.billing.subscription.perMonth': 'Per month', - 'settings.billing.subscription.popular': 'Popular', -}; - -export default en4; diff --git a/app/src/lib/i18n/chunks/en-5.ts b/app/src/lib/i18n/chunks/en-5.ts deleted file mode 100644 index 80fc5e42b..000000000 --- a/app/src/lib/i18n/chunks/en-5.ts +++ /dev/null @@ -1,1012 +0,0 @@ -import type { TranslationMap } from '../types'; - -// English chunk 5/5. Source of truth for translators. -const en5: TranslationMap = { - 'settings.billing.subscription.save': '{pct}', - 'settings.billing.subscription.upgrade': 'Upgrade', - 'settings.billing.subscription.waiting': 'Waiting', - 'settings.billing.subscription.waitingPayment': 'Waiting payment', - 'settings.composio.apiKeyDesc': 'A Composio API key is currently stored on this device.', - 'settings.composio.apiKeyLabel': 'Composio API key', - 'settings.composio.apiKeyStored': 'API key stored', - 'settings.composio.apiKeyStoredPlaceholder': '••••••••••••••••', - 'settings.composio.clearedToBackend': 'Switched to Backend mode', - 'settings.composio.confirmItem1': 'An account at app.composio.dev with an API key', - 'settings.composio.confirmItem2': - 'To re-link each integration through your personal Composio account', - 'settings.composio.confirmItem3': - "Note: Composio triggers (real-time webhooks) don't fire in Direct mode yet — only synchronous tool calls", - 'settings.composio.confirmNeedItems': "You'll need:", - 'settings.composio.confirmSwitch': 'I understand, switch to Direct', - 'settings.composio.confirmTitle': '⚠️ Switching to Direct mode', - 'settings.composio.confirmWarning': - "Your existing integrations (Gmail, Slack, GitHub, etc. linked through OpenHuman) won't be visible — they live in the OpenHuman-managed Composio tenant.", - 'settings.composio.intro': - 'Composio integrates 250+ external apps as tools your agent can call. Choose how those tool calls are routed.', - 'settings.composio.modeDirect': 'Direct (bring your own API key)', - 'settings.composio.modeDirectDesc': - 'Calls go to backend.composio.dev directly. Sovereign / offline-friendly. Tool execution works synchronously; real-time trigger webhooks are not yet routed in direct mode (follow-up issue).', - 'settings.composio.modeManaged': 'Managed (OpenHuman handles it for you)', - 'settings.composio.modeManagedDesc': - 'OpenHuman proxies tool calls through our backend (recommended). Auth is brokered; you never paste a Composio API key. Webhooks are fully routed.', - 'settings.composio.routingMode': 'Routing mode', - 'settings.composio.saveErrorNoKey': 'Failed to save. Direct mode requires a non-empty API key.', - 'settings.composio.saving': 'Saving…', - 'settings.composio.switching': 'Switching…', - 'settings.cron.jobs.desc': 'Desc', - 'settings.cron.jobs.empty': 'No core cron jobs found.', - 'settings.cron.jobs.lastStatus': 'Last status', - 'settings.cron.jobs.loading': 'Loading cron jobs...', - 'settings.cron.jobs.loadingRuns': 'Loading runs', - 'settings.cron.jobs.nextRun': 'Next run', - 'settings.cron.jobs.pause': 'Pause', - 'settings.cron.jobs.paused': 'Paused', - 'settings.cron.jobs.recentRuns': 'Recent runs', - 'settings.cron.jobs.removing': 'Removing', - 'settings.cron.jobs.resume': 'Resume', - 'settings.cron.jobs.runningNow': 'Running now', - 'settings.cron.jobs.saving': 'Saving…', - 'settings.cron.jobs.schedule': 'Schedule', - 'settings.cron.jobs.title': 'Core Cron Jobs', - 'settings.cron.jobs.viewRuns': 'View runs', - 'settings.localModel.deviceCapability.active': 'Active', - 'settings.localModel.deviceCapability.appliedTier': 'Applied tier', - 'settings.localModel.deviceCapability.applying': 'Applying', - 'settings.localModel.deviceCapability.cores': '{count}', - 'settings.localModel.deviceCapability.couldNotLoadPresets': 'Could not load presets', - 'settings.localModel.deviceCapability.cpu': 'CPU', - 'settings.localModel.deviceCapability.customModelIds': 'Custom model ids', - 'settings.localModel.deviceCapability.detected': 'Detected', - 'settings.localModel.deviceCapability.disabled': 'Disabled', - 'settings.localModel.deviceCapability.disabledDesc': 'Disabled desc', - 'settings.localModel.deviceCapability.downloadingModels': '(downloading models)', - 'settings.localModel.deviceCapability.downloadingSetupDesc': - 'Downloading the OllamaSetup installer (~2 GB) and unpacking it. This can take a minute on first install.', - 'settings.localModel.deviceCapability.failedToApplyPreset': 'Failed to apply preset', - 'settings.localModel.deviceCapability.gpu': 'GPU', - 'settings.localModel.deviceCapability.installFailed': 'Ollama install failed', - 'settings.localModel.deviceCapability.installFailedDesc': - 'The installer exited before Ollama was usable. Click retry to try again, or install manually from ollama.com.', - 'settings.localModel.deviceCapability.installFirst': 'Run Ollama first.', - 'settings.localModel.deviceCapability.installFirstDesc': - 'Local tiers depend on an externally managed Ollama endpoint. Start it yourself, pull the models you want, and keep using "Disabled (cloud fallback)" until the runtime is reachable.', - 'settings.localModel.deviceCapability.installOllamaFirst': 'Run Ollama first to use this tier', - 'settings.localModel.deviceCapability.installingOllama': 'Installing ollama', - 'settings.localModel.deviceCapability.loadingDeviceInfo': 'Loading device info', - 'settings.localModel.deviceCapability.localAiDisabled': - 'Local AI disabled — using cloud fallback.', - 'settings.localModel.deviceCapability.modelTier': 'Model Tier', - 'settings.localModel.deviceCapability.needsOllama': 'Needs ollama', - 'settings.localModel.deviceCapability.notDetected': 'Not detected', - 'settings.localModel.deviceCapability.ram': 'RAM', - 'settings.localModel.deviceCapability.recommended': 'Recommended', - 'settings.localModel.deviceCapability.retryInstall': 'Retrying…', - 'settings.localModel.deviceCapability.retrying': 'Retrying…', - 'settings.localModel.deviceCapability.starting': 'Starting…', - 'settings.localModel.download.audioPathPlaceholder': 'Absolute path to audio file', - 'settings.localModel.download.capabilityAssets': 'Capability Assets', - 'settings.localModel.download.downloading': 'Downloading...', - 'settings.localModel.download.embeddingPlaceholder': 'One input string per line...', - 'settings.localModel.download.noThinkMode': 'No think mode', - 'settings.localModel.download.promptPlaceholder': - 'Type any prompt and run it against the local model...', - 'settings.localModel.download.quantizationPref': 'Quantization pref', - 'settings.localModel.download.runEmbeddingTest': 'Running...', - 'settings.localModel.download.runPromptTest': 'Run Prompt Test', - 'settings.localModel.download.runSummaryTest': 'Run Summary Test', - 'settings.localModel.download.runTranscriptionTest': 'Running...', - 'settings.localModel.download.runTtsTest': 'Running...', - 'settings.localModel.download.runVisionTest': 'Running...', - 'settings.localModel.download.running': 'Running...', - 'settings.localModel.download.runningPrompt': 'Running prompt', - 'settings.localModel.download.summarizePlaceholder': - 'Paste text to summarize with the local model...', - 'settings.localModel.download.testCustomPrompt': 'Test Custom Prompt', - 'settings.localModel.download.testEmbeddings': 'Test Embeddings', - 'settings.localModel.download.testSummarization': 'Test Summarization', - 'settings.localModel.download.testVisionPrompt': 'Test Vision Prompt', - 'settings.localModel.download.testVoiceInput': 'Test Voice Input (STT)', - 'settings.localModel.download.testVoiceOutput': 'Test Voice Output (TTS)', - 'settings.localModel.download.ttsOutputPlaceholder': 'Optional output WAV path', - 'settings.localModel.download.ttsPlaceholder': 'Enter text to synthesize...', - 'settings.localModel.download.visionImagePlaceholder': - 'One image reference per line (data URI, URL, or local path marker)', - 'settings.localModel.download.visionPromptPlaceholder': 'Enter a prompt for the vision model...', - 'settings.localModel.status.allChecksPassed': 'All checks passed', - 'settings.localModel.status.artifact': 'Artifact', - 'settings.localModel.status.backend': 'Backend', - 'settings.localModel.status.binary': 'Binary', - 'settings.localModel.status.bootstrapResume': 'Bootstrap / Resume', - 'settings.localModel.status.checking': 'Checking...', - 'settings.localModel.status.checkingOllama': 'Checking ollama', - 'settings.localModel.status.customLocation': 'Custom location', - 'settings.localModel.status.customLocationDesc': 'Custom location desc', - 'settings.localModel.status.diagnosticsHint': - 'Click "Run Diagnostics" to verify Ollama is running and models are installed.', - 'settings.localModel.status.downloadingUnknown': 'Downloading (size unknown)', - 'settings.localModel.status.eta': 'Eta', - 'settings.localModel.status.expectedModels': 'Expected models', - 'settings.localModel.status.forceRebootstrap': 'Force Re-bootstrap', - 'settings.localModel.status.generationTps': 'Generation TPS', - 'settings.localModel.status.hideErrorDetails': 'Hide error details', - 'settings.localModel.status.installManually': 'Install manually', - 'settings.localModel.status.installManuallyFrom': 'Install manually from', - 'settings.localModel.status.installOllama': 'Starting…', - 'settings.localModel.status.installedModels': 'Installed models', - 'settings.localModel.status.installing': 'Installing...', - 'settings.localModel.status.installingOllama': 'Installing Ollama runtime...', - 'settings.localModel.status.issues': 'Issues', - 'settings.localModel.status.issuesFound': '{count} issue(s) found', - 'settings.localModel.status.lastLatency': 'Last Latency', - 'settings.localModel.status.model': 'Model', - 'settings.localModel.status.notFound': 'Not found', - 'settings.localModel.status.notRunning': 'Not running', - 'settings.localModel.status.ollamaBinaryPath': 'Ollama binary path', - 'settings.localModel.status.ollamaDiagnostics': 'Ollama Diagnostics', - 'settings.localModel.status.ollamaNotInstalled': 'Ollama runtime unavailable', - 'settings.localModel.status.ollamaNotInstalledDesc': - 'OpenHuman now treats Ollama as an external inference runtime. Start your own Ollama server, pull the models you want, and point workload routing at it.', - 'settings.localModel.status.progress': 'Progress', - 'settings.localModel.status.provider': 'Provider', - 'settings.localModel.status.retryBootstrap': 'Retry Bootstrap', - 'settings.localModel.status.runDiagnostics': 'Checking...', - 'settings.localModel.status.running': 'Running', - 'settings.localModel.status.runningExternalProcess': 'Running via external process', - 'settings.localModel.status.runtimeStatus': 'Runtime Status', - 'settings.localModel.status.server': 'Server', - 'settings.localModel.status.setPath': 'Setting...', - 'settings.localModel.status.setting': 'Setting...', - 'settings.localModel.status.showErrorDetails': 'Hide error details', - 'settings.localModel.status.showInstallErrorDetails': 'Hide error details', - 'settings.localModel.status.suggestedFixes': 'Suggested fixes', - 'settings.localModel.status.thenSetPath': 'Then set path', - 'settings.localModel.status.triggering': 'Triggering...', - 'settings.localModel.status.unavailable': 'Unavailable', - 'settings.localModel.status.working': 'Working...', - 'settings.developerMenu.ai.title': 'AI Configuration', - 'settings.developerMenu.ai.desc': - 'Cloud providers, local Ollama models, and per-workload routing', - 'settings.developerMenu.screenAwareness.title': 'Screen Awareness', - 'settings.developerMenu.screenAwareness.desc': - 'Screen capture permissions, monitoring policy, and session controls', - 'settings.developerMenu.messagingChannels.title': 'Messaging Channels', - 'settings.developerMenu.messagingChannels.desc': - 'Configure Telegram/Discord auth modes and default channel routing', - 'settings.developerMenu.tools.title': 'Tools', - 'settings.developerMenu.tools.desc': - 'Enable or disable capabilities OpenHuman can use on your behalf', - 'settings.developerMenu.agentChat.title': 'Agent Chat', - 'settings.developerMenu.agentChat.desc': - 'Test agent conversation with model and temperature overrides', - 'settings.developerMenu.devWorkflow.title': 'Dev Workflow', - 'settings.developerMenu.devWorkflow.desc': - 'Autonomous agent that picks your GitHub issues and raises PRs on a schedule', - 'settings.developerMenu.devWorkflow.panelDesc': - 'Configure an autonomous developer agent that picks GitHub issues assigned to you and raises pull requests automatically on a schedule.', - 'settings.devWorkflow.githubRepository': 'GitHub Repository', - 'settings.devWorkflow.loadingRepositories': 'Loading repositories...', - 'settings.devWorkflow.selectRepository': 'Select a repository', - 'settings.devWorkflow.privateTag': '(private)', - 'settings.devWorkflow.detectingForkInfo': 'Detecting fork info...', - 'settings.devWorkflow.forkDetected': 'Fork detected', - 'settings.devWorkflow.upstream': 'Upstream:', - 'settings.devWorkflow.forkPrNote': 'PRs will be raised against the upstream repository.', - 'settings.devWorkflow.notForkNote': - 'Not a fork. PRs will be raised against this repository directly.', - 'settings.devWorkflow.targetBranch': 'Target Branch', - 'settings.devWorkflow.targetBranchNote': 'PRs will be raised against this branch', - 'settings.devWorkflow.loadingBranches': 'Loading branches...', - 'settings.devWorkflow.runFrequency': 'Run Frequency', - 'settings.devWorkflow.runFrequencyNote': - 'How often the agent should check for issues and raise PRs.', - 'settings.devWorkflow.updateConfiguration': 'Update Configuration', - 'settings.devWorkflow.saveConfiguration': 'Save Configuration', - 'settings.devWorkflow.remove': 'Remove', - 'settings.devWorkflow.saved': 'Saved', - 'settings.devWorkflow.activeConfiguration': 'Active Configuration', - 'settings.devWorkflow.activeConfigRepository': 'Repository:', - 'settings.devWorkflow.activeConfigUpstream': 'Upstream:', - 'settings.devWorkflow.activeConfigTargetBranch': 'Target branch:', - 'settings.devWorkflow.activeConfigSchedule': 'Schedule:', - 'settings.devWorkflow.enabled': 'Enabled', - 'settings.devWorkflow.paused': 'Paused', - 'settings.skillsRunner.scheduleEnabled': 'Enabled', - 'settings.skillsRunner.scheduleDisabled': 'Paused', - 'settings.skillsRunner.scheduleToggleAria': 'Toggle schedule enabled', - 'settings.skillsRunner.schedule.history': 'History', - 'settings.skillsRunner.schedule.historyLoading': 'Loading history\u2026', - 'settings.skillsRunner.schedule.historyEmpty': 'No runs yet for this schedule.', - 'settings.skillsRunner.schedule.historyNoOutput': 'No output captured.', - 'settings.skillsRunner.schedule.active': 'Active', - 'settings.skillsRunner.schedule.lastRunLabel': 'last:', - 'settings.devWorkflow.nextRun': 'Next run', - 'settings.devWorkflow.lastRun': 'Last run', - 'settings.devWorkflow.runNow': 'Run now', - 'settings.devWorkflow.running': 'Running\u2026', - 'settings.devWorkflow.recentRuns': 'Recent runs', - 'settings.devWorkflow.cronSaveError': 'Failed to save configuration', - 'settings.devWorkflow.lastOutput': 'Last output', - 'settings.devWorkflow.noOutput': 'No output captured', - 'settings.devWorkflow.runningStatus': - 'Agent is running — picking an issue and working on a fix...', - 'settings.devWorkflow.errorNotConnected': - 'GitHub is not connected. Please connect GitHub via Settings > Advanced > Composio first.', - 'settings.devWorkflow.errorToolNotEnabled': - 'GITHUB_LIST_REPOSITORIES_FOR_THE_AUTHENTICATED_USER tool is not enabled on this backend. Please ask your admin to enable it in the Composio integration (backend#842).', - 'settings.devWorkflow.errorNotAuthenticated': 'Not authenticated. Please sign in first.', - 'settings.devWorkflow.errorNoRepositories': 'No repositories found for this GitHub account.', - 'settings.devWorkflow.schedule.every30min': 'Every 30 minutes', - 'settings.devWorkflow.schedule.everyHour': 'Every hour', - 'settings.devWorkflow.schedule.every2hours': 'Every 2 hours', - 'settings.devWorkflow.schedule.every6hours': 'Every 6 hours', - 'settings.devWorkflow.schedule.onceDaily': 'Once daily (9 AM)', - 'settings.developerMenu.cronJobs.title': 'Cron Jobs', - 'settings.developerMenu.cronJobs.desc': 'View and configure scheduled jobs for runtime skills', - 'settings.developerMenu.localModelDebug.title': 'Local Model Debug', - 'settings.developerMenu.localModelDebug.desc': - 'Ollama config, asset downloads, model tests, and diagnostics', - 'settings.developerMenu.composio.title': 'Composio', - 'settings.developerMenu.composio.desc': - 'Routing mode, integration triggers, and trigger history archive.', - 'settings.developerMenu.webhooks.title': 'Webhooks', - 'settings.developerMenu.webhooks.desc': - 'Inspect runtime webhook registrations and captured request logs', - 'settings.developerMenu.eventLog.title': 'Event Log', - 'settings.developerMenu.eventLog.desc': - 'Live colour-coded stream of all agent, tool, and system events', - 'settings.developerMenu.eventLog.allTypes': 'All types', - 'settings.developerMenu.eventLog.filterAgent': 'Filter...', - 'settings.developerMenu.eventLog.download': 'Download', - 'settings.developerMenu.eventLog.events': 'events', - 'settings.developerMenu.eventLog.live': 'Live', - 'settings.developerMenu.eventLog.disconnected': 'Disconnected', - 'settings.developerMenu.eventLog.waiting': 'Waiting for events...', - 'settings.developerMenu.eventLog.notConnected': 'Not connected to core', - 'settings.developerMenu.eventLog.jumpToLatest': 'Jump to latest', - 'settings.developerMenu.eventLog.badge.tool': 'TOOL', - 'settings.developerMenu.eventLog.badge.agent': 'AGENT', - 'settings.developerMenu.eventLog.badge.info': 'INFO', - 'settings.developerMenu.eventLog.badge.mem': 'MEM', - 'settings.developerMenu.eventLog.badge.chan': 'CHAN', - 'settings.developerMenu.eventLog.badge.cron': 'CRON', - 'settings.developerMenu.eventLog.badge.hook': 'HOOK', - 'settings.developerMenu.eventLog.badge.warn': 'WARN', - 'settings.developerMenu.eventLog.badge.skill': 'SKILL', - 'settings.developerMenu.eventLog.badge.comp': 'COMP', - 'settings.developerMenu.eventLog.badge.mcp': 'MCP', - 'settings.developerMenu.intelligence.title': 'Intelligence', - 'settings.developerMenu.intelligence.desc': - 'Memory workspace, subconscious engine, dreams, and settings', - 'settings.developerMenu.notificationRouting.title': 'Notification Routing', - 'settings.developerMenu.notificationRouting.desc': - 'AI importance scoring and orchestrator escalation for integration alerts', - 'settings.developerMenu.composeioTriggers.title': 'ComposeIO Triggers', - 'settings.developerMenu.composeioTriggers.desc': 'View ComposeIO trigger history and archive', - 'settings.developerMenu.composioRouting.title': 'Composio Routing (Direct Mode)', - 'settings.developerMenu.composioRouting.desc': - 'Bring your own Composio API key and route calls directly to backend.composio.dev', - 'settings.developerMenu.integrationTriggers.title': 'Integration Triggers', - 'settings.developerMenu.integrationTriggers.desc': - 'Configure AI triage settings for Composio integration triggers', - 'settings.appearance.menuDesc': 'Pick light, dark, or match your system theme', - 'settings.agentAccess.title': 'Agent OS access', - 'settings.agentAccess.menuDesc': - 'Control where the agent can read/write and whether it can use the shell.', - 'settings.agentAccess.loadError': 'Failed to load access settings', - 'settings.agentAccess.saveError': 'Failed to save access settings', - 'settings.agentAccess.saved': 'Saved — applies on your next message.', - 'settings.agentAccess.desktopOnly': 'Access settings are only available in the desktop app.', - 'settings.agentAccess.loading': 'Loading…', - 'settings.agentAccess.accessMode': 'Access mode', - 'settings.agentAccess.tier.readonly.title': 'Read-only', - 'settings.agentAccess.tier.readonly.desc': - 'Reads files and runs read-only commands to explore — but never writes, edits, or runs anything that changes state.', - 'settings.agentAccess.tier.supervised.title': 'Ask before edit', - 'settings.agentAccess.tier.supervised.desc': - 'Creates new files freely, but asks for your approval before editing an existing file, running a command, reaching the network, or installing anything.', - 'settings.agentAccess.tier.full.title': 'Full access', - 'settings.agentAccess.tier.full.desc': - 'Runs commands with your full user account access — it can read/write anywhere allowed, except credential and system stores. Destructive commands, network access, and installs still ask for approval.', - 'settings.agentAccess.defaultTag': '(default)', - 'settings.agentAccess.fullWarning': - '⚠ Full access runs commands with your full account access and is not sandboxed. Only enable it when you trust the agent with this machine. Credential and system directories stay blocked, and destructive, network, and install actions still ask for approval.', - 'settings.agentAccess.confine.label': 'Confine to workspace', - 'settings.agentAccess.confine.desc': - 'Restrict the agent to the workspace directory (plus any granted folders), whichever access mode is selected. When off, it can reach anywhere your user can — except the always-blocked credential and system directories.', - 'settings.agentAccess.requireTaskPlanApproval.label': 'Require task plan approval', - 'settings.agentAccess.requireTaskPlanApproval.desc': - 'Pause before an assigned agent executes an agent-authored task brief.', - 'settings.agentAccess.grantedFolders': 'Granted folders', - 'settings.agentAccess.alwaysAllow': 'Always-allowed tools', - 'settings.agentAccess.alwaysAllowDesc': - 'Tools you marked "Always allow" in chat run without asking. Remove one to be prompted again.', - 'settings.agentAccess.alwaysAllowNone': 'No always-allowed tools yet.', - 'settings.agentAccess.grantedDesc': - 'Folders the agent may read and write, in addition to the workspace. Credential stores (~/.ssh, ~/.gnupg, ~/.aws, keychains) and system directories (/etc, /System, C:\\Windows, …) are always blocked, even inside a granted folder.', - 'settings.agentAccess.noneGranted': 'No folders granted.', - 'settings.agentAccess.readWrite': 'read + write', - 'settings.agentAccess.readOnly': 'read-only', - 'settings.agentAccess.remove': 'Remove', - 'settings.agentAccess.pathPlaceholder': 'Absolute folder path', - 'settings.agentAccess.accessLevelLabel': 'Access level', - 'settings.agentAccess.add': 'Add', - 'settings.agentAccess.saving': 'Saving…', - 'settings.agentAccess.changesApply': 'Changes apply on your next message.', - 'settings.mascot.active': 'Active', - 'settings.mascot.characterDesc': 'Character desc', - 'settings.mascot.characterHeading': 'Character heading', - 'settings.mascot.customGifError': - 'Enter an HTTPS .gif URL, loopback HTTP .gif URL, file:// .gif URL, or local .gif path.', - 'settings.mascot.customGifHeading': 'Custom GIF avatar', - 'settings.mascot.customGifLabel': 'Custom GIF avatar URL', - 'settings.mascot.colorDesc': 'Color desc', - 'settings.mascot.colorHeading': 'Color heading', - 'settings.mascot.loadingLibrary': 'Loading OpenHuman library…', - 'settings.mascot.localDefault': 'Local OpenHuman (default)', - 'settings.mascot.menuTitle': 'Mascot', - 'settings.mascot.menuDesc': 'Pick the mascot color used across the app', - 'settings.mascot.noCharacters': 'No OpenHuman characters are available yet', - 'settings.mascot.noColorVariants': 'No color variants', - 'settings.mascot.voice.current': 'current', - 'settings.mascot.voice.customDesc': - 'Find voice ids at api.elevenlabs.io/v1/voices or your ElevenLabs dashboard. Only the id is stored — your API key stays on the backend.', - 'settings.mascot.voice.customHeading': 'Custom voice id', - 'settings.mascot.voice.customOption': 'Other (paste voice id)…', - 'settings.mascot.voice.desc': - 'Pick the ElevenLabs voice the mascot uses for spoken replies. Filter by gender, pick from the curated list, paste a custom id, or let the app pick a voice that matches your interface language.', - 'settings.mascot.voice.genderFemale': 'Female', - 'settings.mascot.voice.genderHeading': 'Voice gender', - 'settings.mascot.voice.genderMale': 'Male', - 'settings.mascot.voice.heading': 'Voice', - 'settings.mascot.voice.preset': 'Voice preset', - 'settings.mascot.voice.presetHeading': 'Voice preset', - 'settings.mascot.voice.preview': 'Preview voice', - 'settings.mascot.voice.previewError': 'Voice preview failed', - 'settings.mascot.voice.previewing': 'Previewing…', - 'settings.mascot.voice.reset': 'Reset to default', - 'settings.mascot.voice.useLocaleDefault': 'Match the app language', - 'settings.mascot.voice.useLocaleDefaultDesc': - 'Auto-pick a voice for the current interface language.', - 'settings.memoryWindow.balanced.badge': 'Recommended', - 'settings.memoryWindow.balanced.hint': - 'Sensible default — good continuity without burning extra tokens on every run.', - 'settings.memoryWindow.balanced.label': 'Balanced', - 'settings.memoryWindow.description': - 'How much remembered context OpenHuman injects into every new agent run. Larger windows feel more aware of past conversations but use more tokens — and cost more — on every run.', - 'settings.memoryWindow.extended.badge': 'More context', - 'settings.memoryWindow.extended.hint': - 'More long-term memory injected into each run. Higher token cost per turn.', - 'settings.memoryWindow.extended.label': 'Extended', - 'settings.memoryWindow.maximum.badge': 'Highest cost', - 'settings.memoryWindow.maximum.hint': - 'The largest safe window. Best continuity, meaningfully higher token bill on every run.', - 'settings.memoryWindow.maximum.label': 'Maximum', - 'settings.memoryWindow.minimal.badge': 'Cheapest', - 'settings.memoryWindow.minimal.hint': - 'Smallest memory window. Cheapest, fastest, least continuity between runs.', - 'settings.memoryWindow.minimal.label': 'Minimal', - 'settings.memoryWindow.title': 'Long-term memory window', - 'settings.screenIntel.permissions.accessibility': 'Accessibility', - 'settings.screenIntel.permissions.grantHint': 'Grant hint', - 'settings.screenIntel.permissions.inputMonitoring': 'Input Monitoring', - 'settings.screenIntel.permissions.macosAppliesPrivacy': 'Macos applies privacy', - 'settings.screenIntel.permissions.openInputMonitoring': 'Requesting…', - 'settings.screenIntel.permissions.refreshStatus': 'Refreshing…', - 'settings.screenIntel.permissions.refreshing': 'Refreshing…', - 'settings.screenIntel.permissions.requestAccessibility': 'Requesting…', - 'settings.screenIntel.permissions.requestScreenRecording': 'Requesting…', - 'settings.screenIntel.permissions.requesting': 'Requesting…', - 'settings.screenIntel.permissions.restartRefresh': 'Restarting core…', - 'settings.screenIntel.permissions.restartingCore': 'Restarting core…', - 'settings.screenIntel.permissions.screenRecording': 'Screen Recording', - 'settings.screenIntel.permissions.title': 'Permissions', - 'skills.card.moreActions': 'More actions', - 'skills.create.allowedTools': 'Allowed tools', - 'skills.create.author': 'Author', - 'skills.create.authorPlaceholder': 'Your name', - 'skills.create.commaSeparated': '(comma-separated)', - 'skills.create.createBtn': 'Create skill', - 'skills.create.createError': 'Could not create skill', - 'skills.create.creating': 'Creating…', - 'skills.create.description': 'Description', - 'skills.create.descriptionPlaceholder': 'What does this skill do?', - 'skills.create.optional': '(optional)', - 'skills.create.inputs.heading': 'Inputs', - 'skills.create.inputs.help': - 'Declare parameters the skill needs. The Skills Runner will render a form for these at run time.', - 'skills.create.inputs.add': 'Add input', - 'skills.create.inputs.row.name': 'Input name', - 'skills.create.inputs.row.namePlaceholder': 'e.g. repo', - 'skills.create.inputs.row.nameError': - 'Letters, digits, underscores, and dashes only; must start with a letter.', - 'skills.create.inputs.row.description': 'Input description', - 'skills.create.inputs.row.descriptionPlaceholder': 'What goes in this field?', - 'skills.create.inputs.row.type': 'Type', - 'skills.create.inputs.row.required': 'Required', - 'skills.create.inputs.row.remove': 'Remove input', - 'skills.create.inputs.type.string': 'Text', - 'skills.create.inputs.type.integer': 'Number', - 'skills.create.inputs.type.boolean': 'Yes / No', - 'skills.create.license': 'License', - 'skills.create.name': 'Name', - 'skills.create.namePlaceholder': 'e.g. Trade Journal', - 'skills.create.scope': 'Scope', - 'skills.create.scopeProjectHint': '/.openhuman/skills/', - 'skills.create.scopeUserHint': - 'Written to ~/.openhuman/skills//SKILL.md — available across all workspaces.', - 'skills.create.slugLabel': 'Slug label', - 'skills.create.subtitle': 'SKILL.md', - 'skills.create.tags': 'Tags', - 'skills.create.title': 'New skill', - 'skills.detail.allowedTools': 'Allowed tools', - 'skills.detail.author': 'Author', - 'skills.detail.bundledResources': 'Bundled resources', - 'skills.detail.closeAriaLabel': 'Close skill details', - 'skills.detail.location': 'Location', - 'skills.detail.noBundledResources': 'No bundled resources.', - 'skills.detail.tags': 'Tags', - 'skills.detail.warnings': 'Warnings', - 'skills.install.fetchLog': 'Fetch log', - 'skills.install.installBtn': 'Installing…', - 'skills.install.installComplete': 'Install complete', - 'skills.install.installing': 'Installing…', - 'skills.install.parseWarnings': 'Parse warnings', - 'skills.install.rawError': 'Raw error', - 'skills.install.timeoutHint': '(seconds, optional)', - 'skills.install.timeoutLabel': 'Timeout label', - 'skills.install.title': 'Install skill from URL', - 'skills.install.urlLabel': 'Skill URL', - 'skills.meetingBots.bannerDesc': - 'Drop a Google Meet link and OpenHuman joins as a guest, talks, listens, and waves back.', - 'skills.meetingBots.bannerTitle': 'Send OpenHuman to a meeting', - 'skills.meetingBots.busyTitle': 'OpenHuman is busy', - 'skills.meetingBots.comingSoon': 'Coming soon', - 'skills.meetingBots.couldNotStartTitle': 'Could not start OpenHuman', - 'skills.meetingBots.displayName': 'Display name', - 'skills.meetingBots.failedToStart': 'Failed to start OpenHuman.', - 'skills.meetingBots.joiningMessage': 'It should appear as a participant in a few seconds.', - 'skills.meetingBots.joiningTitle': 'OpenHuman is joining the meeting', - 'skills.meetingBots.meetingLink': 'Meeting link', - 'skills.meetingBots.modalAriaLabel': 'Send OpenHuman to a meeting', - 'skills.meetingBots.modalDesc': - 'OpenHuman joins as an anonymous guest, streams its video into the call, and replies via the agent.', - 'skills.meetingBots.modalTitle': 'Send OpenHuman to a meeting', - 'skills.meetingBots.newBadge': 'New', - 'skills.meetingBots.sendTo': 'Send to {label}', - 'skills.meetingBots.starting': 'Starting…', - 'skills.resource.preview.closeAriaLabel': 'Close preview', - 'skills.resource.preview.failed': 'Preview failed', - 'skills.resource.preview.loading': 'Loading preview…', - 'skills.resource.tree.empty': 'No bundled resources.', - 'skills.search.placeholder': 'Placeholder', - 'skills.setup.autocomplete.acceptKey': 'Accept key', - 'skills.setup.autocomplete.activeDesc': 'Active desc', - 'skills.setup.autocomplete.activeTitle': 'Auto-Complete is Active', - 'skills.setup.autocomplete.customizeSettings': 'Customize settings', - 'skills.setup.autocomplete.debounce': 'Debounce', - 'skills.setup.autocomplete.description': 'Description', - 'skills.setup.autocomplete.enableBtn': 'Enabling...', - 'skills.setup.autocomplete.enableError': 'Failed to enable autocomplete', - 'skills.setup.autocomplete.enabling': 'Enabling...', - 'skills.setup.autocomplete.notSupported': 'Not supported', - 'skills.setup.autocomplete.stepEnable': 'Enable inline completions', - 'skills.setup.autocomplete.stepSuccess': 'Ready to go', - 'skills.setup.autocomplete.stylePreset': 'Style preset', - 'skills.setup.autocomplete.stylePresetValue': 'Balanced (configurable later)', - 'skills.setup.autocomplete.title': 'Text Auto-Complete', - 'skills.setup.screenIntel.activeDesc': 'Active desc', - 'skills.setup.screenIntel.activeTitle': 'Screen Intelligence is Enabled', - 'skills.setup.screenIntel.advancedSettings': 'Advanced settings', - 'skills.setup.screenIntel.allGranted': 'All permissions granted', - 'skills.setup.screenIntel.captureMode': 'Capture mode', - 'skills.setup.screenIntel.captureModeValue': 'All windows (configurable later)', - 'skills.setup.screenIntel.deniedHint': - 'After granting permissions in System Settings, click below to restart and pick up the changes.', - 'skills.setup.screenIntel.enableBtn': 'Enabling...', - 'skills.setup.screenIntel.enableDesc': 's on your screen and feed useful context into your agent', - 'skills.setup.screenIntel.enableError': 'Failed to enable Screen Intelligence', - 'skills.setup.screenIntel.enabling': 'Enabling...', - 'skills.setup.screenIntel.grant': 'Opening...', - 'skills.setup.screenIntel.granted': 'Granted', - 'skills.setup.screenIntel.macosOnly': 'Macos only', - 'skills.setup.screenIntel.opening': 'Opening...', - 'skills.setup.screenIntel.panicHotkey': 'Panic hotkey', - 'skills.setup.screenIntel.permAccessibility': 'Accessibility', - 'skills.setup.screenIntel.permInputMonitoring': 'Input Monitoring', - 'skills.setup.screenIntel.permScreenRecording': 'Screen Recording', - 'skills.setup.screenIntel.permissionsDesc': 'Permissions desc', - 'skills.setup.screenIntel.refreshStatus': 'Refresh status', - 'skills.setup.screenIntel.restartRefresh': 'Restarting...', - 'skills.setup.screenIntel.restarting': 'Restarting...', - 'skills.setup.screenIntel.stepEnable': 'Enable the skill', - 'skills.setup.screenIntel.stepPermissions': 'Grant permissions', - 'skills.setup.screenIntel.stepSuccess': 'Ready to go', - 'skills.setup.screenIntel.title': 'Screen Intelligence', - 'skills.setup.screenIntel.visionModel': 'Vision model', - 'skills.setup.voice.activation': 'Activation', - 'skills.setup.voice.activeDescPrefix': 'Fn', - 'skills.setup.voice.activeDescSuffix': 'Fn', - 'skills.setup.voice.activeTitle': 'Voice Intelligence is Active', - 'skills.setup.voice.customizeSettings': 'Customize settings', - 'skills.setup.voice.downloadSttBtn': 'Download stt btn', - 'skills.setup.voice.enableDesc': 'Enable desc', - 'skills.setup.voice.hotkey': 'Hotkey', - 'skills.setup.voice.startBtn': 'Starting...', - 'skills.setup.voice.startError': 'Failed to start voice server', - 'skills.setup.voice.starting': 'Starting...', - 'skills.setup.voice.stepEnable': 'Start voice server', - 'skills.setup.voice.stepSetup': 'Model download required', - 'skills.setup.voice.stepSuccess': 'Ready to go', - 'skills.setup.voice.sttNotReady': 'Speech-to-text model not ready', - 'skills.setup.voice.sttNotReadyDesc': - 'Voice Intelligence requires a local Whisper model for transcription. Download it from the Local Model settings.', - 'skills.setup.voice.sttReady': 'Speech-to-text model ready', - 'skills.setup.voice.sttReturnHint': 'Stt return hint', - 'skills.setup.voice.title': 'Voice Intelligence', - 'skills.uninstall.couldNotUninstall': 'Could not uninstall', - 'skills.uninstall.description': - 'This permanently deletes the skill directory and all its bundled resources. The agent will stop seeing it at the next turn.', - 'skills.uninstall.title': 'Uninstall', - 'skills.uninstall.uninstallBtn': 'Uninstall', - 'skills.uninstall.uninstalling': 'Uninstalling…', - 'upsell.global.limitMessage': 'Upgrade your plan or top up credits to continue', - 'upsell.global.limitTitle': 'You', - 'upsell.global.nearLimitMessage': - "You've used {pct}% of your usage limit. Upgrade for higher limits.", - 'upsell.global.nearLimitTitle': 'Approaching usage limit', - 'upsell.usageLimit.bodyBudget': - "You've hit your weekly limit.{reset} Upgrade your plan or top up credits to avoid limits.", - 'upsell.usageLimit.bodyRate': - "You've hit your 10-hour inference rate limit.{reset} Upgrade for higher limits.", - 'upsell.usageLimit.heading': 'Usage Limit Reached', - 'upsell.usageLimit.notNow': 'Not now', - 'upsell.usageLimit.perWindow': '{amount}', - 'upsell.usageLimit.planIncludes': '{plan}', - 'upsell.usageLimit.resetsIn': 'It resets {time}.', - 'upsell.usageLimit.upgradePlan': 'Upgrade plan', - 'upsell.usageLimit.weeklyInference': '{amount}', - 'walkthrough.tooltip.letsGo': "Let's go!", - 'walkthrough.tooltip.next': 'Next →', - 'walkthrough.tooltip.skip': 'Skip tour', - 'walkthrough.tooltip.stepCounter': '{n} of {total}', - 'webhooks.activity.empty': 'Empty', - 'webhooks.activity.title': 'Recent Activity', - 'webhooks.composioHistory.empty': 'Empty', - 'webhooks.composioHistory.metadataId': 'Metadata ID', - 'webhooks.composioHistory.metadataUuid': 'Metadata UUID', - 'webhooks.composioHistory.payload': 'Payload', - 'webhooks.composioHistory.title': 'ComposeIO Trigger History', - 'webhooks.tunnels.active': 'Active', - 'webhooks.tunnels.createFailed': 'Failed to create tunnel', - 'webhooks.tunnels.creating': 'Creating...', - 'webhooks.tunnels.deleteFailed': 'Failed to delete tunnel', - 'webhooks.tunnels.descriptionPlaceholder': 'Description (optional)', - 'webhooks.tunnels.echo': 'Echo', - 'webhooks.tunnels.empty': 'Empty', - 'webhooks.tunnels.enableEcho': 'Enable Echo', - 'webhooks.tunnels.inactive': 'Inactive', - 'webhooks.tunnels.namePlaceholder': 'Tunnel name (e.g. telegram-bot)', - 'webhooks.tunnels.newTunnel': 'New tunnel', - 'webhooks.tunnels.removeEcho': 'Remove Echo', - 'webhooks.tunnels.title': 'Webhook Tunnels', - 'webhooks.tunnels.toggleFailed': 'Failed to toggle echo', - 'composio.authExpired': 'Auth expired', - 'composio.reconnect': 'Reconnect', - 'composio.previewBadge': 'Preview', - 'composio.previewTooltip': - 'Agent integration coming soon — you can connect, but the agent can’t use this toolkit yet.', - 'composio.directModeRequiresKey': 'Failed to save. Direct mode requires a non-empty API key.', - 'composio.notYetRouted': 'not yet routed', - 'composio.triggers.loading': 'Loading…', - 'conversations.taskKanban.todo': 'To do', - 'settings.composio.loading': 'Loading…', - 'settings.mascot.noCharactersAvailable': 'No OpenHuman characters are available yet', - 'skills.uninstall.confirmTitle': 'Uninstall {name}?', - 'conversations.taskKanban.blocked': 'Blocked', - 'conversations.taskKanban.done': 'Done', - 'conversations.taskKanban.pending': 'Pending', - 'conversations.taskKanban.working': 'Working', - 'conversations.taskKanban.awaitingApproval': 'Awaiting approval', - 'conversations.taskKanban.ready': 'Ready', - 'conversations.taskKanban.rejected': 'Rejected', - 'conversations.taskKanban.inProgress': 'In progress', - 'intelligence.memoryChunk.detail.copiedHint': 'copied', - 'settings.composio.notYetRouted': 'not yet routed', - 'settings.localModel.download.manageExternal': 'Manage this model in your external runtime.', - 'settings.localModel.status.manageOllamaExternal': - 'Manage the Ollama process and model pulls outside OpenHuman, then rerun diagnostics.', - 'settings.localModel.status.ollamaDocs': 'Ollama docs', - 'settings.localModel.status.thenRetry': - 'for setup instructions, then retry after your runtime is reachable.', - 'settings.appearance.title': 'Appearance', - 'settings.appearance.themeHeading': 'Theme', - 'settings.appearance.themeAria': 'Theme', - 'settings.appearance.modeLight': 'Light', - 'settings.appearance.modeLightDesc': 'Bright surfaces, dark text.', - 'settings.appearance.modeDark': 'Dark', - 'settings.appearance.modeDarkDesc': 'Dim surfaces, easier on the eyes after dusk.', - 'settings.appearance.modeSystem': 'Match system', - 'settings.appearance.modeSystemDesc': 'Follow your OS appearance setting.', - 'settings.appearance.helperText': - 'Dark mode switches the entire app — chat, settings, panels — to a dim palette. "Match system" follows your OS appearance and updates live.', - 'settings.appearance.tabBarHeading': 'Bottom tab bar', - 'settings.appearance.tabBarAlwaysShowLabels': 'Always show labels', - 'settings.appearance.tabBarAlwaysShowLabelsDesc': - 'When off, labels only appear on hover or for the active tab.', - 'settings.mascot.characterPreview': 'Preview', - 'settings.mascot.characterStates': 'states', - 'settings.mascot.characterVisemes': 'visemes', - 'settings.mascot.colorAria': 'OpenHuman color', - 'settings.mascot.colorBlack': 'Black', - 'settings.mascot.colorBurgundy': 'Burgundy', - 'settings.mascot.colorCustom': 'Custom', - 'settings.mascot.colorNavy': 'Navy', - 'settings.mascot.primaryColor': 'Primary color', - 'settings.mascot.secondaryColor': 'Secondary color', - 'settings.mascot.colorYellow': 'Yellow', - 'settings.mascot.libraryUnavailable': 'OpenHuman library unavailable', - 'settings.mascot.title': 'OpenHuman', - 'settings.developerMenu.mcpServer.title': 'MCP Server', - 'settings.developerMenu.mcpServer.desc': 'Configure external MCP clients to connect to OpenHuman', - 'settings.developerMenu.autonomy.title': 'Agent autonomy', - 'settings.developerMenu.autonomy.desc': 'Tool action rate limits and safety thresholds', - 'settings.mcpServer.title': 'MCP Server', - 'settings.mcpServer.toolsSectionTitle': 'Available Tools', - 'settings.mcpServer.toolsSectionDesc': - 'Tools exposed via the MCP stdio server when running openhuman-core mcp', - 'settings.mcpServer.configSectionTitle': 'Client Configuration', - 'settings.mcpServer.configSectionDesc': - 'Select your MCP client to generate the correct configuration snippet', - 'settings.mcpServer.copySnippet': 'Copy to Clipboard', - 'settings.mcpServer.copied': 'Copied!', - 'settings.mcpServer.openConfigFile': 'Open Config File', - 'settings.mcpServer.binaryPathNotFound': - 'OpenHuman binary not found. If running from source, build with: cargo build --bin openhuman-core', - 'settings.mcpServer.openConfigError': 'Failed to open config file', - 'settings.mcpServer.clientClaudeDesktop': 'Claude Desktop', - 'settings.mcpServer.clientCursor': 'Cursor', - 'settings.mcpServer.clientCodex': 'Codex', - 'settings.mcpServer.clientZed': 'Zed', - 'settings.mcpServer.configFilePath': 'Config file', - 'settings.mcpServer.clientSelectorAriaLabel': 'MCP client selector', - 'settings.persona.title': 'Persona', - 'settings.persona.menuTitle': 'Persona', - 'settings.persona.menuDesc': - 'Name, personality, avatar, and voice — your assistant as one identity', - 'settings.persona.identityHeading': 'Identity', - 'settings.persona.identityDesc': - 'A display name and short description for your assistant. Shown in the app; does not change how the assistant reasons.', - 'settings.persona.displayNameLabel': 'Display name', - 'settings.persona.displayNamePlaceholder': 'e.g. Nova', - 'settings.persona.descriptionLabel': 'Description', - 'settings.persona.descriptionPlaceholder': 'e.g. A calm, concise assistant for my team.', - 'settings.persona.soul.heading': 'Personality (SOUL.md)', - 'settings.persona.soul.desc': - 'The personality prompt the assistant follows in every conversation. Edits are saved to your workspace and take effect on the next reply.', - 'settings.persona.soul.editorLabel': 'SOUL.md contents', - 'settings.persona.soul.reset': 'Reset to default', - 'settings.persona.soul.usingDefault': 'Using the bundled default', - 'settings.persona.soul.loadError': 'Could not load SOUL.md', - 'settings.persona.soul.saveError': 'Could not save SOUL.md', - 'settings.persona.soul.resetError': 'Could not reset SOUL.md', - 'settings.persona.appearanceHeading': 'Avatar & Voice', - 'settings.persona.appearanceDesc': - 'Mascot color, custom GIF avatar, and reply voice are configured in Mascot settings.', - 'settings.persona.openMascotSettings': 'Open Mascot settings', - 'common.breadcrumb': 'Breadcrumb', - 'settings.betaBuild': 'Beta build - v{version}', - 'migration.vendor.openclaw': 'OpenClaw', - 'migration.vendor.hermes': 'Hermes Agent', - 'onboarding.apiKeys.openaiOauthHint': - 'Use ChatGPT Plus/Pro (subscription) or an OpenAI API key — not both required.', - 'onboarding.apiKeys.openaiOauthOpening': 'Opening sign-in…', - 'onboarding.apiKeys.finishSignIn': 'Finish ChatGPT sign-in', - 'onboarding.apiKeys.orApiKey': 'or API key', - 'app.localAiDownload.expandAria': 'Expand download progress', - 'app.localAiDownload.collapseAria': 'Collapse download progress', - 'app.localAiDownload.dismissAria': 'Dismiss download notification', - 'mobile.nav.ariaLabel': 'Mobile navigation', - 'progress.stepsAria': 'Progress steps', - 'progress.stepAria': 'Step {current} of {total}', - 'workspace.vaultsTitle': 'Knowledge vaults', - 'workspace.vaultsDesc': 'Point at a local folder; files are chunked and mirrored into memory.', - 'calls.title': 'Calls', - 'calls.comingSoonBody': 'AI-assisted calls are coming soon. Stay tuned.', - 'art.rotatingTetrahedronAria': 'Rotating inverted tetrahedron spacecraft', - 'devOptions.sentryDisabled': '(no id — Sentry disabled in this build)', - 'composio.expiredAuthorization': '{name} authorization expired', - 'composio.expiredDescription': - 'Reconnect to re-enable {name} tools. OpenHuman will keep this integration unavailable until you refresh OAuth access.', - 'channels.telegram.remoteControlTitle': 'Remote control (Telegram)', - 'channels.telegram.remoteControlBody': - 'From an allowed Telegram chat, send /status, /sessions, /new, or /help. Model routing still uses /model and /models.', - 'rewards.referralSection.retry': 'Retry', - 'settings.ai.plannerSummary': - 'Planner: {sourceEvents} source events, {sent} sent, {deduped} deduped.', - 'settings.ai.routeLabel': 'route: {route}', - 'settings.ai.latestSpend': 'Latest spend: {amount} at {time} ({action})', - 'settings.ai.topActions': 'Top actions', - 'settings.ai.noSpendRows': 'No spend rows loaded.', - 'settings.ai.topHours': 'Top hours', - 'settings.ai.noHourlySpend': 'No hourly spend yet.', - 'settings.autocomplete.appFilter.app': 'App', - 'settings.autocomplete.appFilter.currentSuggestion': 'Current suggestion', - 'settings.autocomplete.appFilter.debounce': 'Debounce', - 'settings.autocomplete.appFilter.enabled': 'Enabled', - 'settings.autocomplete.appFilter.lastError': 'Last error', - 'settings.autocomplete.appFilter.model': 'Model', - 'settings.autocomplete.appFilter.phase': 'Phase', - 'settings.autocomplete.appFilter.platformSupported': 'Platform supported', - 'settings.autocomplete.appFilter.running': 'Running', - 'settings.autocomplete.debug.acceptedPrefix': 'Accepted: {value}', - 'settings.autocomplete.debug.acceptFailed': 'Failed to accept suggestion', - 'settings.autocomplete.debug.alreadyRunning': 'Autocomplete is already running.', - 'settings.autocomplete.debug.clearHistoryFailed': 'Failed to clear history', - 'settings.autocomplete.debug.didNotStart': 'Autocomplete did not start.', - 'settings.autocomplete.debug.disabledInSettings': - 'Autocomplete is disabled in settings. Enable it and save first.', - 'settings.autocomplete.debug.fetchSuggestionFailed': 'Failed to fetch current suggestion', - 'settings.autocomplete.debug.inspectFocusedElementFailed': 'Failed to inspect focused element', - 'settings.autocomplete.debug.loadSettingsFailed': 'Failed to load autocomplete settings', - 'settings.autocomplete.debug.noSuggestionApplied': 'No suggestion was applied.', - 'settings.autocomplete.debug.noSuggestionReturned': 'No suggestion returned.', - 'settings.autocomplete.debug.refreshStatusFailed': 'Failed to refresh autocomplete status', - 'settings.autocomplete.debug.saveAdvancedSettingsFailed': 'Failed to save advanced settings', - 'settings.autocomplete.debug.startFailed': 'Failed to start autocomplete', - 'settings.autocomplete.debug.stopFailed': 'Failed to stop autocomplete', - 'settings.autocomplete.debug.suggestionPrefix': 'Suggestion: {value}', - 'settings.autocomplete.shared.none': 'None', - 'settings.autocomplete.shared.notApplicable': 'n/a', - 'settings.autocomplete.shared.unknown': 'Unknown', - 'settings.billing.autoRecharge.expires': 'Expires {date}', - 'settings.billing.autoRecharge.spentThisWeek': '${spent} of ${limit} used this week', - 'settings.localModel.deviceCapability.disabledLowercase': 'disabled', - 'settings.localModel.deviceCapability.presetDetails': - 'Chat: {chatModel} · Vision: {visionModel} · Target RAM: {targetRamGb} GB', - 'settings.localModel.download.capabilityChat': 'Chat', - 'settings.localModel.download.capabilityEmbedding': 'Embedding', - 'settings.localModel.download.capabilityStt': 'STT', - 'settings.localModel.download.capabilityTts': 'TTS', - 'settings.localModel.download.capabilityVision': 'Vision', - 'settings.localModel.download.embeddingDimensions': 'Dimensions: {dimensions}', - 'settings.localModel.download.embeddingModel': 'Model: {modelId}', - 'settings.localModel.download.embeddingVectors': 'Vectors: {count}', - 'settings.localModel.download.notAvailable': 'n/a', - 'settings.localModel.download.summaryHelper': - 'Calls `openhuman.inference_summarize` via Rust core', - 'settings.localModel.download.transcript': 'Transcript:', - 'settings.localModel.download.ttsOutput': 'Output: {outputPath}', - 'settings.localModel.download.ttsVoice': 'Voice: {voiceId}', - 'settings.localModel.status.contextBelowMinimumBadge': - '{contextLength} ctx - below {required} min', - 'settings.localModel.status.contextBelowMinimumTitle': - 'Rejected: context window {contextLength} tokens is below the {required}-token minimum the memory layer requires. Recall would be corrupted by silent truncation.', - 'settings.localModel.status.contextOkBadge': '{contextLength} ctx ✓', - 'settings.localModel.status.contextOkTitle': - 'Context window {contextLength} tokens meets the memory-layer minimum of {required} tokens.', - 'settings.localModel.status.contextUnknownBadge': 'ctx unknown', - 'settings.localModel.status.contextUnknownTitle': - 'Context window unknown; could not confirm it meets the {required}-token memory-layer minimum.', - 'settings.localModel.status.expectedChat': 'Chat: {model}', - 'settings.localModel.status.expectedEmbedding': 'Embedding: {model}', - 'settings.localModel.status.expectedVision': 'Vision: {model}', - 'settings.localModel.status.externalProcess': 'External process', - 'settings.localModel.status.notAvailable': 'n/a', - 'settings.mascot.customGifPlaceholder': 'https://example.com/avatar.gif', - 'settings.mascot.loadDetailError': 'Could not load mascot.', - 'settings.mascot.loadLibraryError': 'Could not load mascot library.', - 'settings.mascot.voice.customPlaceholder': 'e.g. 21m00Tcm4TlvDq8ikWAM', - 'settings.mascot.voice.previewText': "Hi, I'm your assistant. This is a voice preview.", - 'skills.channelIcon.discord': 'Discord', - 'skills.channelIcon.imessage': 'iMessage', - 'skills.channelIcon.telegram': 'Telegram', - 'skills.channelIcon.web': 'Web', - 'skills.channelIcon.yuanbao': 'Yuanbao', - 'skills.composio.poweredBy': 'Powered by Composio', - 'skills.composio.staleStatusTitle': 'Connections are showing stale status', - 'skills.create.allowedToolsHelp': 'Rendered into the SKILL.md frontmatter as', - 'skills.create.allowedToolsPlaceholder': 'node_exec, fetch', - 'skills.create.licensePlaceholder': 'MIT', - 'skills.create.tagsPlaceholder': 'trading, research', - 'skills.install.errors.alreadyInstalledHint': - 'A skill with this slug already exists in the workspace. Remove it first or change the frontmatter `metadata.id` / `name`.', - 'skills.install.errors.alreadyInstalledTitle': 'Skill already installed', - 'skills.install.errors.fetchFailedHint': - 'The request did not complete successfully. Check the URL points at a reachable public file, and that the host returned a 2xx response.', - 'skills.install.errors.fetchFailedTitle': 'Fetch failed', - 'skills.install.errors.fetchTimedOutHint': - 'The remote host did not respond in time. Try again or raise the timeout (1-600 s).', - 'skills.install.errors.fetchTimedOutTitle': 'Fetch timed out', - 'skills.install.errors.fetchTooLargeHint': - 'The SKILL.md must be under 1 MiB. Split bundled resources into `references/` or `scripts/` files instead of inlining them.', - 'skills.install.errors.fetchTooLargeTitle': 'SKILL.md too large', - 'skills.install.errors.genericHint': - 'The backend returned an error. The raw message is shown below.', - 'skills.install.errors.genericTitle': 'Could not install skill', - 'skills.install.errors.invalidSkillHint': - 'The frontmatter must be valid YAML with non-empty `name` and `description` fields, terminated by `---`.', - 'skills.install.errors.invalidSkillTitle': 'SKILL.md did not parse', - 'skills.install.errors.invalidUrlHint': - 'Only public HTTPS URLs are allowed. Private, loopback, and metadata hosts are blocked.', - 'skills.install.errors.invalidUrlTitle': 'URL rejected', - 'skills.install.errors.unsupportedUrlHint': - 'Only direct `.md` links work. For GitHub, link to a file (github.com/owner/repo/blob/.../SKILL.md) - tree and repo roots are not installed.', - 'skills.install.errors.unsupportedUrlTitle': 'URL form not supported', - 'skills.install.errors.writeFailedHint': - 'The workspace skills directory was not writable. Check filesystem permissions for `/.openhuman/skills/`.', - 'skills.install.errors.writeFailedTitle': 'Could not write SKILL.md', - 'skills.install.fetchingPrefix': 'Fetching', - 'skills.install.fetchingSuffix': 'this can take up to the timeout you configured.', - 'skills.install.subtitleMiddle': 'over HTTPS and installs it under', - 'skills.install.subtitlePrefix': 'Fetches a single', - 'skills.install.subtitleSuffix': 'HTTPS only; private and loopback hosts are blocked.', - 'skills.install.successDiscovered': 'Discovered {count} new skill(s).', - 'skills.install.successNoNewIds': - 'Skill installed, but no new skill ids appeared - the catalog may already contain a skill with the same slug.', - 'skills.install.timeoutHelp': - 'Defaults to 60 seconds. Values outside 1-600 are clamped server-side.', - 'skills.install.timeoutInvalid': 'Must be an integer between 1 and 600.', - 'skills.install.timeoutPlaceholder': '60', - 'skills.install.urlHelpMiddle': 'file.', - 'skills.install.urlHelpPrefix': 'Direct link to a', - 'skills.install.urlHelpSuffix': 'URLs auto-rewrite to', - 'skills.install.urlInvalidPrefix': 'URL must be a well-formed', - 'skills.install.urlInvalidSuffix': 'link.', - 'skills.install.urlPlaceholder': 'https://raw.githubusercontent.com/owner/repo/main/SKILL.md', - 'skills.meetingBots.platformComingSoon': '{label} support is coming soon.', - 'skills.meetingBots.platformHints.gmeet': 'meet.google.com/abc-defg-hij', - 'skills.meetingBots.platformHints.teams': 'teams.microsoft.com/...', - 'skills.meetingBots.platformHints.zoom': 'zoom.us/j/...', - 'skills.meetingBots.platforms.gmeet': 'Google Meet', - 'skills.meetingBots.platforms.teams': 'Microsoft Teams', - 'skills.meetingBots.platforms.zoom': 'Zoom', - 'skills.meetingBots.soonSuffix': 'soon', - 'skills.setup.screenIntel.permissionPathLabel': 'macOS applies privacy to:', - 'skills.tabs.runners': 'Runners', - 'settings.developerMenu.skillsRunner.title': 'Skills Runner', - 'settings.developerMenu.skillsRunner.desc': - 'Run any bundled skill ad-hoc — fill its inputs and fire a background autonomous run', - 'settings.developerMenu.skillsRunner.panelDesc': - 'Pick a bundled skill, fill in its declared inputs, and fire a fire-and-forget background run. Use Dev Workflow instead if you want a cron-scheduled recurring job.', - 'settings.skillsRunner.skill': 'Skill', - 'settings.skillsRunner.selectSkill': 'Select a skill…', - 'settings.skillsRunner.loadingSkills': 'Loading skills…', - 'settings.skillsRunner.loadingDescription': 'Loading skill inputs…', - 'settings.skillsRunner.noInputs': 'This skill declares no inputs.', - 'settings.skillsRunner.placeholder.required': 'required', - 'settings.skillsRunner.runNow': 'Run now', - 'settings.skillsRunner.starting': 'Starting…', - 'settings.skillsRunner.started': 'Started — run id:', - 'settings.skillsRunner.logPath': 'Log:', - 'settings.skillsRunner.error.listSkills': 'Failed to load skills:', - 'settings.skillsRunner.error.describe': 'Failed to load inputs:', - 'settings.skillsRunner.error.missingRequired': 'Missing required input(s):', - 'settings.skillsRunner.error.run': 'Run failed to start:', - 'settings.skillsRunner.error.preflightGate': 'Preflight gate failed', - 'settings.skillsRunner.schedule.heading': 'Schedule (recurring)', - 'settings.skillsRunner.schedule.help': - 'Save this skill + inputs as a recurring cron job. The agent will call run_skill at each tick.', - 'settings.skillsRunner.schedule.frequency': 'Frequency', - 'settings.skillsRunner.schedule.every30min': 'Every 30 minutes', - 'settings.skillsRunner.schedule.everyHour': 'Every hour', - 'settings.skillsRunner.schedule.every2hours': 'Every 2 hours', - 'settings.skillsRunner.schedule.every6hours': 'Every 6 hours', - 'settings.skillsRunner.schedule.onceDaily': 'Once daily (9:00)', - 'settings.skillsRunner.schedule.save': 'Save schedule', - 'settings.skillsRunner.schedule.saving': 'Saving…', - 'settings.skillsRunner.schedule.saved': 'Schedule saved.', - 'settings.skillsRunner.schedule.error': 'Schedule save failed:', - 'settings.skillsRunner.schedule.loadingJobs': 'Loading existing schedules…', - 'settings.skillsRunner.schedule.noJobs': 'No schedules saved for this skill yet.', - 'settings.skillsRunner.schedule.existing': 'Scheduled jobs for this skill:', - 'settings.skillsRunner.schedule.runNow': 'Run', - 'settings.skillsRunner.schedule.remove': 'Remove', - 'settings.skillsRunner.recentRuns.headingForSkill': 'Recent runs for this skill', - 'settings.skillsRunner.recentRuns.headingAll': 'Recent skill runs (all)', - 'settings.skillsRunner.recentRuns.refresh': 'Refresh', - 'settings.skillsRunner.recentRuns.loading': 'Loading recent runs…', - 'settings.skillsRunner.recentRuns.empty': 'No recent runs.', - 'settings.skillsRunner.viewer.loading': 'Loading log…', - 'settings.skillsRunner.viewer.tailing': 'Live tailing', - 'settings.skillsRunner.viewer.fetching': 'fetching', - 'settings.skillsRunner.viewer.error': 'Log read failed:', - 'settings.skillsRunner.repoPicker.loading': 'Loading repositories…', - 'settings.skillsRunner.repoPicker.select': 'Select a repository…', - 'settings.skillsRunner.repoPicker.empty': - 'No repositories returned. Connect GitHub via Composio to populate this list.', - 'settings.skillsRunner.repoPicker.notConnected': - 'GitHub isn’t connected via Composio. Connect it under Skills → Composio first.', - 'settings.skillsRunner.repoPicker.privateTag': '(private)', - 'settings.skillsRunner.branchPicker.needRepo': 'Pick a repo first…', - 'settings.skillsRunner.branchPicker.loading': 'Loading branches…', - 'settings.skillsRunner.branchPicker.select': 'Select a branch…', - 'settings.modelHealth.title': 'Model Health', - 'settings.modelHealth.desc': - 'Per-model quality, hallucination rate, and cost comparison across active models', - 'settings.modelHealth.allStatuses': 'All statuses', - 'settings.modelHealth.models': 'models', - 'settings.modelHealth.loading': 'Loading model data...', - 'settings.modelHealth.empty': 'No models registered', - 'settings.modelHealth.col.model': 'Model', - 'settings.modelHealth.col.quality': 'Quality', - 'settings.modelHealth.col.halluc': 'Halluc. Rate', - 'settings.modelHealth.col.cost': 'Cost / 1M out', - 'settings.modelHealth.col.agents': 'Agents', - 'settings.modelHealth.col.status': 'Status', - 'settings.modelHealth.badge.keep': 'Keep', - 'settings.modelHealth.badge.replace': 'Replace', - 'settings.modelHealth.badge.staging': 'Staging test', - 'settings.modelHealth.badge.vision': 'Vision only', - 'settings.modelHealth.swap': 'Swap?', - 'settings.modelHealth.modal.title': 'Replace Model?', - 'settings.modelHealth.modal.hallucRate': 'Hallucination rate', - 'settings.modelHealth.modal.cancel': 'Cancel', - 'settings.modelHealth.modal.apply': 'Apply Replacement', - 'settings.modelHealth.tag.cheaper': 'CHEAPER', - 'settings.modelHealth.tag.better': 'BETTER', - // Task sources (#task-sources) - 'settings.taskSources.title': 'Task Sources', - 'settings.taskSources.subtitle': 'Pull tasks from your tools onto the agent todo board', - 'settings.taskSources.description': - 'Collect work items from GitHub, Notion, Linear, and ClickUp, enrich them, and route them onto the agent todo board.', - 'settings.taskSources.connectHint': - 'Task sources use your connected accounts. Connect them under Integrations first.', - 'settings.taskSources.disabledBanner': - 'Task sources are disabled in settings. Enable them to poll automatically.', - 'settings.taskSources.loadError': 'Failed to load task sources', - 'settings.taskSources.addTitle': 'Add a task source', - 'settings.taskSources.provider': 'Provider', - 'settings.taskSources.name': 'Name (optional)', - 'settings.taskSources.namePlaceholder': 'e.g. My open issues', - 'settings.taskSources.github.repo': 'Repository (owner/name, optional)', - 'settings.taskSources.github.labels': 'Labels (comma-separated)', - 'settings.taskSources.notion.database': 'Database (board) ID', - 'settings.taskSources.linear.team': 'Team ID (optional)', - 'settings.taskSources.clickup.team': 'Workspace (team) ID (optional)', - 'settings.taskSources.assignedToMe': 'Only items assigned to me', - 'settings.taskSources.add': 'Add source', - 'settings.taskSources.adding': 'Adding…', - 'settings.taskSources.preview': 'Preview', - 'settings.taskSources.previewResult': '{count} task(s) match this filter', - 'settings.taskSources.fetchNow': 'Fetch now', - 'settings.taskSources.fetching': 'Fetching…', - 'settings.taskSources.fetchResult': 'Routed {routed} of {fetched} task(s)', - 'settings.taskSources.configured': 'Configured sources', - 'settings.taskSources.empty': 'No task sources configured yet.', - 'settings.taskSources.proactive': 'Proactive', - 'settings.taskSources.lastFetch': 'Last fetch', - 'settings.taskSources.never': 'Never', - 'settings.taskSources.statusEnabled': 'Enabled', - 'settings.taskSources.statusDisabled': 'Disabled', - 'settings.taskSources.enable': 'Enable', - 'settings.taskSources.disable': 'Disable', - 'settings.taskSources.remove': 'Remove', - 'settings.taskSources.removeConfirm': - 'Remove this task source? All ingested task history will be deleted and cannot be undone.', - 'settings.taskSources.refresh': 'Refresh', - // Task sources provider labels (#task-sources) - 'settings.taskSources.providers.github': 'GitHub', - 'settings.taskSources.providers.notion': 'Notion', - 'settings.taskSources.providers.linear': 'Linear', - 'settings.taskSources.providers.clickup': 'ClickUp', - - // /skills IA restructure (Phase 2/3) — dashboard + new-skill page. - 'skills.dashboard.title': 'Skills', - 'skills.dashboard.scheduledHeading': 'Scheduled skills', - 'skills.dashboard.emptyTitle': 'No scheduled skills', - 'skills.dashboard.emptyBody': - 'Run a bundled skill once or save a recurring schedule to see it here.', - 'skills.dashboard.create': 'Create a Skill', - 'skills.dashboard.run': 'Run a Skill', - 'skills.dashboard.enable': 'Enable scheduled skill', - 'skills.dashboard.disable': 'Disable scheduled skill', - 'skills.dashboard.lastRun': 'Last run', - 'skills.dashboard.nextRun': 'Next run', - 'skills.dashboard.cardOpenRunner': 'Open in runner', - 'skills.dashboard.loadError': 'Failed to load scheduled skills', - 'skills.new.title': 'Create a skill', - 'skills.new.placeholderBody': - 'Authoring form arrives soon. For now, use the “New skill” button on the runner page.', -}; - -export default en5; diff --git a/app/src/lib/i18n/chunks/es-1.ts b/app/src/lib/i18n/chunks/es-1.ts deleted file mode 100644 index 8c7177c86..000000000 --- a/app/src/lib/i18n/chunks/es-1.ts +++ /dev/null @@ -1,1635 +0,0 @@ -import type { TranslationMap } from '../types'; - -// Spanish (Español) chunk 1/5. Translated from chunks/en-1.ts. -const es1: TranslationMap = { - 'nav.home': 'Inicio', - 'nav.human': 'Humano', - 'nav.chat': 'Charla', - 'nav.connections': 'Conexiones', - 'nav.memory': 'Inteligencia', - 'nav.alerts': 'Alertas', - 'nav.rewards': 'Recompensas', - 'nav.settings': 'Configuración', - 'common.cancel': 'Cancelar', - 'common.save': 'Guardar', - 'common.confirm': 'Confirmar', - 'common.delete': 'Eliminar', - 'common.edit': 'Editar', - 'common.create': 'Crear', - 'common.search': 'Buscar', - 'common.loading': 'cargando…', - 'common.error': 'error', - 'common.success': 'Éxito', - 'common.back': 'Atrás', - 'common.next': 'Siguiente', - 'common.finish': 'Finalizar', - 'common.close': 'Cerrar', - 'common.enabled': 'Activado', - 'common.disabled': 'Desactivado', - 'common.on': 'Activado', - 'common.off': 'Desactivado', - 'common.yes': 'Sí', - 'common.no': 'No', - 'common.ok': 'Entendido', - 'common.retry': 'Reintentar', - 'common.copy': 'Copiar', - 'common.copied': 'Copiado', - 'common.learnMore': 'Más información', - 'common.seeAll': 'Ver', - 'common.dismiss': 'Descartar', - 'common.clear': 'Limpiar', - 'common.reset': 'Restablecer', - 'common.refresh': 'Actualizar', - 'common.export': 'Exportar', - 'common.import': 'Importar', - 'common.upload': 'Subir', - 'common.download': 'Descargar', - 'common.add': 'Agregar', - 'common.remove': 'Eliminar', - 'common.showMore': 'Ver más', - 'common.showLess': 'Ver menos', - 'common.submit': 'Enviar', - 'common.continue': 'Continuar', - 'common.comingSoon': 'Próximamente', - 'settings.general': 'generales', - 'settings.featuresAndAI': 'Funciones e IA', - 'settings.billingAndRewards': 'Facturación y recompensas', - 'settings.support': 'Soporte', - 'settings.advanced': 'Avanzado', - 'settings.dangerZone': 'Zona de peligro', - 'settings.account': 'Cuenta', - 'settings.accountDesc': 'Frase de recuperación, equipo, conexiones y privacidad', - 'settings.notifications': 'Notificaciones', - 'settings.notificationsDesc': 'No molestar y controles de notificación por cuenta', - 'settings.notifications.tabs.preferences': 'Preferencias', - 'settings.notifications.tabs.routing': 'Enrutamiento', - 'settings.features': 'Funciones', - 'settings.featuresDesc': 'Conciencia de pantalla, mensajería y herramientas', - 'settings.aiModels': 'IA y modelos', - 'settings.aiModelsDesc': 'Configuración de modelos de IA locales, descargas y proveedor LLM', - 'settings.ai': 'Configuración de IA', - 'settings.aiDesc': - 'Proveedores en la nube, modelos locales de Ollama y enrutamiento por carga de trabajo', - 'settings.billingUsage': 'Facturación y uso', - 'settings.billingUsageDesc': 'Plan de suscripción, créditos y métodos de pago', - 'settings.rewards': 'Recompensas', - 'settings.rewardsDesc': 'Referidos, cupones y créditos ganados', - 'settings.restartTour': 'Reiniciar tour', - 'settings.restartTourDesc': 'Reproduce el recorrido del producto desde el principio', - 'settings.about': 'Acerca de', - 'settings.aboutDesc': 'Versión de la app y actualizaciones de software', - 'settings.developerOptions': 'Avanzado', - 'settings.developerOptionsDesc': - 'Configuración de IA, canales de mensajería, herramientas, diagnósticos y paneles de depuración', - 'settings.clearAppData': 'Borrar datos de la app', - 'settings.clearAppDataDesc': - 'Cerrar sesión y eliminar permanentemente todos los datos locales de la app', - 'settings.logOut': 'Cerrar sesión', - 'settings.logOutDesc': 'Salir de tu cuenta', - 'settings.exitLocalSession': 'Salir de la sesión local', - 'settings.exitLocalSessionDesc': 'Volver a la pantalla de inicio de sesión', - 'settings.language': 'Idioma', - 'settings.languageDesc': 'Idioma de visualización de la interfaz de la app', - 'settings.alerts': 'Alertas', - 'settings.alertsDesc': 'Ver alertas recientes y actividad en tu bandeja', - 'settings.account.recoveryPhrase': 'Frase de recuperación', - 'settings.account.recoveryPhraseDesc': 'Ver y respaldar tu frase de recuperación de cuenta', - 'settings.account.team': 'Equipo', - 'settings.account.teamDesc': 'Administrar miembros del equipo y permisos', - 'settings.account.connections': 'Conexiones', - 'settings.account.connectionsDesc': 'Administrar cuentas y servicios vinculados', - 'settings.account.privacy': 'Privacidad', - 'settings.account.privacyDesc': 'Controla qué datos salen de tu computadora', - 'settings.notifications.doNotDisturb': 'No molestar', - 'settings.notifications.doNotDisturbDesc': - 'Pausar todas las notificaciones por un período determinado', - 'settings.notifications.channelControls': 'Controles por canal', - 'settings.notifications.channelControlsDesc': - 'Configura las preferencias de notificación para cada canal', - 'settings.features.screenAwareness': 'Conciencia de pantalla', - 'settings.features.screenAwarenessDesc': 'Permite que el asistente vea tu ventana activa', - 'settings.features.messaging': 'Mensajería', - 'settings.features.messagingDesc': 'Configuración de integración de canales y mensajería', - 'settings.features.tools': 'Herramientas', - 'settings.features.toolsDesc': 'Administrar herramientas e integraciones conectadas', - 'settings.ai.localSetup': 'Configuración de IA local', - 'settings.ai.localSetupDesc': 'Descargar y configurar modelos de IA locales', - 'settings.ai.llmProvider': 'Proveedor LLM', - 'settings.ai.llmProviderDesc': 'Elegir y configurar tu proveedor de IA', - 'clearData.title': 'Borrar datos de la app', - 'clearData.warning': - 'Esto cerrará tu sesión y eliminará permanentemente los datos locales de la app, incluyendo:', - 'clearData.bulletSettings': 'Configuración de la app y conversaciones', - 'clearData.bulletCache': 'Todos los datos de caché de integraciones locales', - 'clearData.bulletWorkspace': 'Datos del espacio de trabajo', - 'clearData.bulletOther': 'Todos los demás datos locales', - 'clearData.irreversible': 'Esta acción no se puede deshacer.', - 'clearData.clearing': 'Borrando datos de la app...', - 'clearData.failed': 'No se pudieron borrar los datos ni cerrar sesión. Inténtalo de nuevo.', - 'clearData.failedLogout': 'No se pudo cerrar sesión. Inténtalo de nuevo.', - 'clearData.failedPersist': - 'No se pudo borrar el estado persistido de la app. Inténtalo de nuevo.', - 'welcome.title': 'Bienvenido a OpenHuman', - 'welcome.subtitle': - 'Tu super inteligencia artificial personal. Privada, simple y extremadamente poderosa.', - 'welcome.connectPrompt': 'Configurar URL de RPC (Avanzado)', - 'welcome.selectRuntime': 'Seleccionar un runtime', - 'welcome.urlPlaceholder': 'http://localhost:8089', - 'welcome.invalidUrl': 'Ingresa una URL HTTP o HTTPS válida', - 'welcome.connecting': 'Probando', - 'welcome.connect': 'Probar', - 'home.greeting': 'Buenos días', - 'home.greetingAfternoon': 'Buenas tardes', - 'home.greetingEvening': 'Buenas noches', - 'home.askAssistant': 'Pregúntale lo que quieras a tu asistente...', - 'home.statusOk': - 'Tu dispositivo está conectado. Mantén la app abierta para conservar la conexión. Envíale un mensaje a tu agente con el botón de abajo.', - 'home.statusBackendOnly': - 'Reconectando al backend… tu agente estará disponible nuevamente en breve.', - 'home.statusCoreUnreachable': - 'El proceso en segundo plano de OpenHuman no responde. Es posible que haya fallado o no haya podido iniciarse.', - 'home.statusInternetOffline': - 'Tu dispositivo está sin conexión. Verifica tu red o reinicia la app para reconectar.', - 'home.restartCore': 'Reiniciar core', - 'home.restartingCore': 'Reiniciando core…', - 'home.themeToggle.toLight': 'Cambiar a modo claro', - 'home.themeToggle.toDark': 'Cambiar a modo oscuro', - 'chat.newThread': 'Nuevo hilo', - 'chat.typeMessage': 'Escribe un mensaje...', - 'chat.send': 'Enviar mensaje', - 'chat.thinking': 'Pensando...', - 'chat.noMessages': 'Sin mensajes aún', - 'chat.startConversation': 'Inicia una conversación', - 'chat.regenerate': 'Regenerar', - 'chat.copyResponse': 'Copiar respuesta', - 'chat.citations': 'Citas', - 'chat.toolUsed': 'Herramienta usada', - 'scope.legacy': 'Legado', - 'scope.user': 'Usuario', - 'scope.project': 'Proyecto', - 'skills.title': 'Conexiones', - 'skills.search': 'Buscar conexiones...', - 'skills.noResults': 'No se encontraron conexiones', - 'skills.connect': 'Conectar', - 'skills.disconnect': 'Desconectar', - 'skills.configure': 'Administrar', - 'skills.connected': 'Conectado', - 'skills.available': 'Disponible', - 'skills.addAccount': 'Agregar cuenta', - 'skills.channels': 'Canales', - 'skills.integrations': 'Integraciones', - 'memory.title': 'Memoria', - 'memory.search': 'Buscar recuerdos...', - 'memory.noResults': 'No se encontraron recuerdos', - 'memory.empty': 'Sin recuerdos aún. Los recuerdos se crean automáticamente mientras interactúas.', - 'memory.tab.memory': 'Memoria', - 'memory.tab.tasks': 'Agent Tasks', - 'memory.tab.tasksDescription': - 'Create and track tasks — your own to-dos plus the boards your agents build across conversations.', - 'memory.tab.subconscious': 'Subconsciente', - 'memory.tab.dreams': 'Sueños', - 'memory.tab.calls': 'Llamadas', - 'memory.tab.diagram': 'Diagram', - 'memory.tab.settings': 'Configuración', - 'memory.analyzeNow': 'Analizar ahora', - 'memoryTree.status.title': 'Memory Tree', - 'memoryTree.status.autoSyncLabel': 'Auto-sync', - 'memoryTree.status.autoSyncDescription': - 'Pause to stop new ingestion. Existing wiki stays queryable.', - 'memoryTree.status.statusTile': 'Status', - 'memoryTree.status.lastSyncTile': 'Last sync', - 'memoryTree.status.totalChunksTile': 'Total chunks', - 'memoryTree.status.wikiSizeTile': 'Wiki size', - 'memoryTree.status.statusRunning': 'Running', - 'memoryTree.status.statusPaused': 'Paused', - 'memoryTree.status.statusSyncing': 'Syncing', - 'memoryTree.status.statusError': 'Error', - 'memoryTree.status.statusIdle': 'Idle', - 'memoryTree.status.never': 'Never', - 'memoryTree.status.fetchError': "Couldn't fetch Memory Tree status", - 'memoryTree.status.retry': 'Retry', - 'memoryTree.status.toggleFailed': "Couldn't toggle auto-sync", - 'memoryTree.status.justNow': 'just now', - 'memoryTree.status.secondsAgo': '{count}s ago', - 'memoryTree.status.minuteAgo': '1 min ago', - 'memoryTree.status.minutesAgo': '{count} min ago', - 'memoryTree.status.hourAgo': '1 hr ago', - 'memoryTree.status.hoursAgo': '{count} hr ago', - 'memoryTree.status.dayAgo': '1 day ago', - 'memoryTree.status.daysAgo': '{count} days ago', - 'alerts.title': 'Alertas', - 'alerts.empty': 'Sin alertas aún', - 'alerts.markAllRead': 'Marcar todo como leído', - 'alerts.unread': 'sin leer', - 'rewards.title': 'Recompensas', - 'rewards.referrals': 'Referidos', - 'rewards.coupons': 'Canjear', - 'rewards.credits': 'Créditos', - 'rewards.referralCode': 'Tu código de referido', - 'rewards.copyCode': 'Copiar código', - 'rewards.share': 'Compartir', - 'onboarding.welcome': 'Hola. Soy OpenHuman.', - 'onboarding.welcomeDesc': - 'Tu asistente de IA superinteligente que corre en tu computadora. Privado, simple y extremadamente poderoso.', - 'onboarding.context': 'Recopilación de contexto', - 'onboarding.contextDesc': 'Conecta las herramientas y servicios que usas todos los días.', - 'onboarding.localAI': 'IA local', - 'onboarding.localAIDesc': 'Configura un modelo de IA local que corra en tu máquina.', - 'onboarding.chatProvider': 'Proveedor de chat', - 'onboarding.chatProviderDesc': 'Elige cómo quieres interactuar con tu asistente.', - 'onboarding.referral': 'Referido', - 'onboarding.referralDesc': 'Ingresa un código de referido si tienes uno.', - 'onboarding.finish': 'Finalizar configuración', - 'onboarding.finishDesc': '¡Todo listo! Empieza a usar OpenHuman.', - 'onboarding.skip': 'Omitir', - 'onboarding.getStarted': 'Empezar', - 'onboarding.runtimeChoice.title': '¿Cómo quieres ejecutar OpenHuman?', - 'onboarding.runtimeChoice.subtitle': - 'Elige la configuración que mejor se adapte a ti. Puedes cambiarlo más tarde en Configuración.', - 'onboarding.runtimeChoice.cloud.title': 'Sencillo', - 'onboarding.runtimeChoice.cloud.tagline': 'Deja que OpenHuman lo gestione todo por ti.', - 'onboarding.runtimeChoice.cloud.f1': 'Seguridad integrada', - 'onboarding.runtimeChoice.cloud.f2': 'Compresión de tokens para aprovechar más tu uso', - 'onboarding.runtimeChoice.cloud.f3': 'Una suscripción, todos los modelos incluidos', - 'onboarding.runtimeChoice.cloud.f4': 'Sin claves API que gestionar', - 'onboarding.runtimeChoice.cloud.f5': 'Fácil de configurar', - 'onboarding.runtimeChoice.custom.title': 'Personalizado', - 'onboarding.runtimeChoice.custom.tagline': - 'Usa tus propias claves. Control total sobre lo que usas.', - 'onboarding.runtimeChoice.custom.f1': 'Necesitarás claves API para casi todo', - 'onboarding.runtimeChoice.custom.f2': 'Reutiliza servicios por los que ya pagas', - 'onboarding.runtimeChoice.custom.f3': 'Puede ser gratuito si ejecutas todo localmente', - 'onboarding.runtimeChoice.custom.f4': 'Más configuración, más opciones', - 'onboarding.runtimeChoice.custom.f5': 'Ideal para usuarios avanzados y desarrolladores', - 'onboarding.runtimeChoice.cloud.creditHighlight': '$1 de crédito gratis para probarlo', - 'onboarding.runtimeChoice.continueCloud': 'Continuar con Simple', - 'onboarding.runtimeChoice.continueCustom': 'Continuar con Personalizado', - 'onboarding.runtimeChoice.recommended': 'Recomendado', - 'onboarding.apiKeys.title': 'Agreguemos tus claves API', - 'onboarding.apiKeys.subtitle': - 'Puedes pegarlas ahora u omitir y agregarlas luego en Configuración › IA. Las claves se guardan en este dispositivo, cifradas en reposo.', - 'onboarding.apiKeys.openaiLabel': 'Clave API de OpenAI', - 'onboarding.apiKeys.openaiPlaceholder': 'sk-...', - 'onboarding.apiKeys.anthropicLabel': 'Clave API de Anthropic', - 'onboarding.apiKeys.anthropicPlaceholder': 'sk-ant-...', - 'onboarding.apiKeys.saveError': 'No se pudo guardar esa clave. Verifícala y vuelve a intentarlo.', - 'onboarding.apiKeys.skipForNow': 'Omitir por ahora', - 'onboarding.apiKeys.continue': 'Guardar y continuar', - 'onboarding.apiKeys.saving': 'Guardando…', - 'onboarding.custom.stepperInference': 'Inferencia', - 'onboarding.custom.stepperVoice': 'Voz', - 'onboarding.custom.stepperOAuth': 'OAuth', - 'onboarding.custom.stepperSearch': 'Búsqueda', - 'onboarding.custom.stepperEmbeddings': 'Embeddings', - 'onboarding.custom.stepperMemory': 'Memoria', - 'onboarding.custom.stepCounter': 'Paso {n} de {total}', - 'onboarding.custom.defaultTitle': 'Por defecto', - 'onboarding.custom.defaultSubtitle': 'Deja que OpenHuman lo gestione por ti.', - 'onboarding.custom.configureTitle': 'Configurar', - 'onboarding.custom.configureSubtitle': 'Yo elijo qué usar.', - 'onboarding.custom.progressAriaLabel': 'Progreso del onboarding', - 'onboarding.custom.continue': 'Continuar', - 'onboarding.custom.back': 'Atrás', - 'onboarding.custom.finish': 'Finalizar configuración', - 'onboarding.custom.configureLater': - 'Puedes terminar de configurar esto después del onboarding. Te llevaremos a la página de configuración correspondiente cuando termines.', - 'onboarding.custom.openSettings': 'Abrir en Configuración', - 'onboarding.custom.inference.title': 'Inferencia (Texto)', - 'onboarding.custom.inference.subtitle': - '¿Qué modelo de lenguaje debe responder tus preguntas y ejecutar tus agentes?', - 'onboarding.custom.inference.defaultDesc': - 'OpenHuman dirige cada carga de trabajo a un modelo predeterminado adecuado. Sin claves, sin configuración.', - 'onboarding.custom.inference.configureDesc': - 'Usa tu propia clave de OpenAI o Anthropic. La usamos para todas las cargas de trabajo basadas en texto.', - 'onboarding.custom.voice.title': 'Voz', - 'onboarding.custom.voice.subtitle': 'Texto a voz y voz a texto para el modo de voz.', - 'onboarding.custom.voice.defaultDesc': - 'OpenHuman incluye STT/TTS gestionado que funciona de inmediato. Sin nada que configurar.', - 'onboarding.custom.voice.configureDesc': - 'Usa tu propio ElevenLabs / OpenAI Whisper / etc. Configura en Configuración › Voz.', - 'onboarding.custom.oauth.title': 'Conexiones (OAuth)', - 'onboarding.custom.oauth.subtitle': - 'Gmail, Slack, Notion y otros servicios conectados que necesitan OAuth.', - 'onboarding.custom.oauth.defaultDesc': - 'OpenHuman ejecuta un espacio de trabajo de Composio gestionado. Un clic para conectar cada servicio más tarde.', - 'onboarding.custom.oauth.configureDesc': - 'Usa tu propia cuenta / clave API de Composio. Configura en Configuración › Conexiones.', - 'onboarding.custom.search.title': 'Búsqueda web', - 'onboarding.custom.search.subtitle': 'Cómo OpenHuman busca en la web en tu nombre.', - 'onboarding.custom.search.defaultDesc': - 'OpenHuman usa un backend de búsqueda gestionado. Sin claves necesarias.', - 'onboarding.custom.search.configureDesc': - 'Usa tu propia clave de proveedor de búsqueda (Tavily, Brave, etc.). Configura en Configuración › Herramientas.', - 'onboarding.custom.embeddings.title': 'Embeddings', - 'onboarding.custom.embeddings.subtitle': - 'How OpenHuman generates vector embeddings for semantic memory search.', - 'onboarding.custom.embeddings.defaultDesc': - 'OpenHuman uses a managed embedding service. No API key needed.', - 'onboarding.custom.embeddings.configureDesc': - 'Bring your own embedding provider (OpenAI, Voyage, Ollama, etc.).', - 'onboarding.custom.memory.title': 'Memoria', - 'onboarding.custom.memory.subtitle': - 'Cómo OpenHuman recuerda tu contexto, preferencias y conversaciones anteriores.', - 'onboarding.custom.memory.defaultDesc': - 'OpenHuman gestiona el almacenamiento y la recuperación de memoria automáticamente. Sin nada que configurar.', - 'onboarding.custom.memory.configureDesc': - 'Inspecciona, exporta o borra la memoria tú mismo. Configura en Configuración › Memoria.', - 'accounts.addAccount': 'Agregar cuenta', - 'accounts.manageAccounts': 'Administrar cuentas', - 'accounts.noAccounts': 'Sin cuentas conectadas', - 'accounts.connectAccount': 'Conecta una cuenta para empezar', - 'accounts.agent': 'Agente', - 'accounts.respondQueue': 'Cola de respuestas', - 'accounts.disconnect': 'Desconectar', - 'accounts.disconnectConfirm': '¿Seguro que quieres desconectar esta cuenta?', - 'accounts.disconnectClearMemory': 'Also delete memory from this source', - 'accounts.disconnectClearMemoryHint': - 'Permanently removes local memory chunks linked to this connection.', - 'accounts.searchAccounts': 'Buscar cuentas...', - 'channels.title': 'Canales', - 'channels.configure': 'Configurar canal', - 'channels.setup': 'Configurar', - 'channels.noChannels': 'Sin canales configurados', - 'channels.addChannel': 'Agregar canal', - 'channels.status.connected': 'Conectado', - 'channels.status.disconnected': 'Desconectado', - 'channels.status.error': 'error', - 'channels.status.configuring': 'Configurando', - 'channels.defaultMessaging': 'Canal de mensajería predeterminado', - 'webhooks.title': 'Ganchos web', - 'webhooks.create': 'Crear webhook', - 'webhooks.noWebhooks': 'Sin webhooks configurados', - 'webhooks.url': 'URL', - 'webhooks.secret': 'Secreto', - 'webhooks.events': 'Eventos', - 'webhooks.archiveDirectory': 'Directorio de archivo', - 'webhooks.todayFile': 'Archivo de hoy', - 'invites.title': 'Invitaciones', - 'invites.create': 'Crear invitación', - 'invites.noInvites': 'Sin invitaciones pendientes', - 'invites.code': 'Código de invitación', - 'invites.copyLink': 'Copiar enlace', - 'devOptions.title': 'Avanzado', - 'devOptions.diagnostics': 'Diagnósticos', - 'devOptions.diagnosticsDesc': 'Estado del sistema, registros y métricas de rendimiento', - 'devOptions.toolPolicyDiagnosticsDesc': - 'Tool inventory, policy posture, MCP allowlists, and recent blocks', - 'devOptions.toolPolicyDiagnostics.loading': 'Loading…', - 'devOptions.toolPolicyDiagnostics.unavailable': 'Diagnostics unavailable', - 'devOptions.toolPolicyDiagnostics.posture.title': 'Policy posture', - 'devOptions.toolPolicyDiagnostics.posture.autonomy': 'Autonomy:', - 'devOptions.toolPolicyDiagnostics.posture.workspaceOnly': 'Workspace only:', - 'devOptions.toolPolicyDiagnostics.posture.maxActionsPerHour': 'Max actions/hr:', - 'devOptions.toolPolicyDiagnostics.posture.approvalMediumRisk': 'Approval (medium risk):', - 'devOptions.toolPolicyDiagnostics.posture.blockHighRisk': 'Block high risk:', - 'devOptions.toolPolicyDiagnostics.inventory.title': 'Inventory', - 'devOptions.toolPolicyDiagnostics.inventory.totalTools': 'Total tools', - 'devOptions.toolPolicyDiagnostics.inventory.enabledTools': 'Enabled tools', - 'devOptions.toolPolicyDiagnostics.inventory.mcpStdioTools': 'MCP stdio tools', - 'devOptions.toolPolicyDiagnostics.inventory.jsonRpcTools': 'JSON-RPC tools', - 'devOptions.toolPolicyDiagnostics.mcpAllowlists.title': 'MCP allowlists', - 'devOptions.toolPolicyDiagnostics.mcpAllowlists.summary': - 'Enabled: {enabled} · Servers: {enabledCount}/{totalCount}', - 'devOptions.toolPolicyDiagnostics.mcpAllowlists.unnamed': '', - 'devOptions.toolPolicyDiagnostics.mcpAllowlists.allowDeny': 'allow={allowCount} deny={denyCount}', - 'devOptions.toolPolicyDiagnostics.mcpWriteAudit.title': 'MCP write audit', - 'devOptions.toolPolicyDiagnostics.mcpWriteAudit.summary': - 'Enabled: {enabled} · Recent (24h): {recentRows}', - 'devOptions.toolPolicyDiagnostics.recentBlocked.title': 'Recent blocked calls', - 'devOptions.toolPolicyDiagnostics.recentBlocked.empty': 'No blocked calls recorded.', - 'devOptions.toolPolicyDiagnostics.redactedSurfaces.title': 'Redacted surfaces', - 'devOptions.toolPolicyDiagnostics.redactedSurfaces.summary': - 'Write-capable: {writeCount} · Policy surfaces: {policyCount}', - 'devOptions.debugPanels': 'Paneles de depuración', - 'devOptions.debugPanelsDesc': - 'Banderas de funciones, inspección de estado y herramientas de depuración', - 'devOptions.webhooks': 'Ganchos web', - 'devOptions.webhooksDesc': 'Configurar y probar integraciones de webhook', - 'devOptions.memoryInspection': 'Inspección de memoria', - 'devOptions.memoryInspectionDesc': 'Explorar, consultar y administrar entradas de memoria', - 'voice.pushToTalk': 'Pulsar para hablar', - 'voice.recording': 'Grabando...', - 'voice.processing': 'Procesando...', - 'voice.languageHint': 'Idioma', - 'misc.rehydrating': 'Cargando tus datos...', - 'misc.checkingServices': 'Verificando servicios...', - 'misc.serviceUnavailable': 'Servicio no disponible', - 'misc.somethingWentWrong': 'Algo salió mal', - 'misc.tryAgainLater': 'Por favor, inténtalo más tarde.', - 'misc.restartApp': 'Reiniciar app', - 'misc.updateAvailable': 'Actualización disponible', - 'misc.updateNow': 'Actualizar ahora', - 'misc.updateLater': 'Después', - 'misc.downloading': 'Descargando...', - 'misc.installing': 'Instalando...', - 'misc.beta': - 'OpenHuman está en beta temprana. No dudes en compartir comentarios o reportar cualquier error que encuentres — cada reporte nos ayuda a mejorar más rápido.', - 'misc.betaFeedback': 'Enviar comentarios', - 'mnemonic.title': 'Frase de recuperación', - 'mnemonic.warning': 'Escribe estas palabras en orden y guárdalas en un lugar seguro.', - 'mnemonic.copyWarning': - 'Nunca compartas tu frase de recuperación. Cualquiera con estas palabras puede acceder a tu cuenta.', - 'mnemonic.copied': 'Frase de recuperación copiada al portapapeles', - 'mnemonic.reveal': 'Mostrar frase', - 'mnemonic.revealPhrase': 'Reveal recovery phrase', - 'mnemonic.hidden': 'La frase de recuperación está oculta', - 'privacy.title': 'Privacidad y seguridad', - 'privacy.description': 'Informe de transparencia de datos enviados a servicios externos.', - 'privacy.empty': 'No se detectaron transferencias de datos externas.', - 'privacy.whatLeavesComputer': 'Qué sale de tu computadora', - 'privacy.loading': 'Cargando detalles de privacidad...', - 'privacy.loadError': - 'No se pudo cargar la lista de privacidad en vivo. Los controles de análisis a continuación aún funcionan.', - 'privacy.noCapabilities': 'Ninguna capacidad divulga movimiento de datos actualmente.', - 'privacy.sentTo': 'Enviado a', - 'privacy.leavesDevice': 'Sale del dispositivo', - 'privacy.staysLocal': 'Se queda local', - 'privacy.anonymizedAnalytics': 'Análisis anonimizado', - 'privacy.shareAnonymizedData': 'Compartir datos de uso anonimizados', - 'privacy.shareAnonymizedDataDesc': - 'Ayuda a mejorar OpenHuman compartiendo informes de errores anónimos y análisis de uso. Todos los datos son completamente anonimizados — nunca se recopilan datos personales, mensajes, claves de billetera ni información de sesión.', - 'privacy.meetingFollowUps': 'Seguimientos de reuniones', - 'privacy.autoHandoffMeet': - 'Transferencia automática de transcripciones de Google Meet al orquestador', - 'privacy.autoHandoffMeetDesc': - 'Cuando termina una llamada de Google Meet, el orquestador de OpenHuman puede leer la transcripción y tomar acciones como redactar mensajes, programar seguimientos o publicar resúmenes en tu espacio de Slack conectado. Desactivado por defecto.', - 'privacy.analyticsDisclaimer': - 'Todos los análisis e informes de errores son completamente anonimizados. Cuando está activado, recopilamos solo información de errores, tipo de dispositivo y la ubicación del archivo de los errores. Nunca accedemos a tus mensajes, datos de sesión, claves de billetera, claves API ni ninguna información de identificación personal. Puedes cambiar esta configuración en cualquier momento.', - 'settings.about.version': 'Versión', - 'settings.about.updateAvailable': 'está disponible', - 'settings.about.softwareUpdates': 'Actualizaciones de software', - 'settings.about.lastChecked': 'Última verificación', - 'settings.about.checking': 'Verificando...', - 'settings.about.checkForUpdates': 'Buscar actualizaciones', - 'settings.about.releases': 'Versiones', - 'settings.about.releasesDesc': - 'Explora las notas de versión y compilaciones anteriores en GitHub.', - 'settings.about.openReleases': 'Abrir versiones en GitHub', - 'settings.ai.overview': 'Resumen del sistema de IA', - 'migration.title': 'Importar desde otro asistente', - 'migration.description': - 'Migra la memoria y las notas de otro asistente local a este espacio de trabajo. Empieza con una Vista previa para ver exactamente qué cambiará y luego pulsa Aplicar para copiar los datos. Tu memoria actual se respalda primero.', - 'migration.vendorLabel': 'Proveedor de origen', - 'migration.sourceLabel': 'Ruta del espacio de trabajo de origen (opcional)', - 'migration.sourcePlaceholder': - 'Déjalo en blanco para detectar automáticamente (p. ej. ~/.openclaw/workspace)', - 'migration.sourcePlaceholderHermes': 'Leave blank to auto-detect (e.g. ~/.hermes)', - 'migration.sourceHint': - 'Si está vacío, se usa la ubicación predeterminada del proveedor. Indica una ruta explícita si moviste el espacio de trabajo a otro sitio.', - 'migration.previewAction': 'Vista previa', - 'migration.previewRunning': 'Previsualizando…', - 'migration.applyAction': 'Aplicar importación', - 'migration.applyRunning': 'Importando…', - 'migration.applyDisclaimer': - 'Aplicar se desbloquea tras una Vista previa exitosa del mismo origen. La memoria actual se respalda antes de cualquier importación.', - 'migration.reportTitlePreview': 'Vista previa — aún no se importó nada', - 'migration.reportTitleApplied': 'Importación completa', - 'migration.report.source': 'Espacio de trabajo de origen', - 'migration.report.target': 'Espacio de trabajo de destino', - 'migration.report.fromSqlite': 'Desde SQLite (brain.db)', - 'migration.report.fromMarkdown': 'Desde Markdown', - 'migration.report.imported': 'Importado', - 'migration.report.skippedUnchanged': 'Omitido (sin cambios)', - 'migration.report.renamedConflicts': 'Renombrado por conflicto', - 'migration.report.warnings': 'Advertencias', - 'migration.report.previewHint': - 'Todavía no se importó ningún dato. Pulsa Aplicar importación para copiarlo.', - 'migration.report.appliedHint': - 'Las entradas importadas ya están en tu memoria. Vuelve a ejecutar Vista previa si quieres comparar de nuevo.', - 'migration.confirmImport.singular': - '¿Importar {count} entrada al espacio de trabajo actual?\n\nOrigen: {source}\nDestino: {target}\n\nLa memoria existente se respaldará antes de la importación.', - 'migration.confirmImport.plural': - '¿Importar {count} entradas al espacio de trabajo actual?\n\nOrigen: {source}\nDestino: {target}\n\nLa memoria existente se respaldará antes de la importación.', - // Settings menu: Appearance + Mascot (#2225) — English stubs; native translations welcome - 'settings.appearance': 'Apariencia', - 'settings.appearanceDesc': 'Elija claro, oscuro o combine el tema de su sistema', - 'settings.mascot': 'mascota', - 'settings.mascotDesc': 'Elija el color de mascota utilizado en la aplicación', - 'channels.authMode.managed_dm': 'Iniciar sesión con OpenHuman', - 'channels.authMode.oauth': 'OAuth Iniciar sesión', - 'channels.authMode.bot_token': 'Utilice su propio token de bot', - 'channels.authMode.api_key': 'Utilice su propia clave API', - 'channels.fieldRequired': '{field} es requerido', - 'channels.mcp.title': 'MCP Servidores', - 'channels.mcp.description': - 'Browse and manage Model Context Protocol servers that extend the AI with new tools.', - 'skills.integrationsSubtitle': - 'Cloud-based OAuth connections — sign in with your account and Composio brokers the tokens so agents can read and act on your behalf. No API keys to manage.', - 'skills.tabs.composio': 'Composio', - 'skills.tabs.channels': 'Canales', - 'skills.tabs.mcp': 'MCP Servidores', - 'skills.mcpComingSoon.title': 'MCP Servidores', - 'skills.mcpComingSoon.description': - 'MCP server management is coming soon. This tab will be the home for discovering, connecting, and monitoring your MCP server integrations.', - 'settings.about.connection': 'Conexión', - 'settings.about.connectionMode': 'Modo', - 'settings.about.connectionModeLocal': 'locales', - 'settings.about.connectionModeCloud': 'nube', - 'settings.about.connectionModeUnset': 'No seleccionado', - 'settings.about.serverUrl': 'Servidor URL', - 'settings.about.serverUrlUnavailable': 'No disponible', - 'settings.about.connectionHelperLocal': - 'Spawned in-process by the Tauri shell on app launch. The port is chosen at startup, so this URL changes between launches.', - 'settings.about.connectionHelperCloud': - 'Connected to a remote core. Change this in BootCheck or the cloud mode picker.', - 'settings.heartbeat.title': 'Latidos y bucles', - 'settings.heartbeat.desc': 'Control background scheduling cadences and inspect the loop map.', - 'settings.ledgerUsage.title': 'Libro mayor de uso', - 'settings.ledgerUsage.desc': 'Recent credit spend, budget math, and background API read budget.', - 'settings.costDashboard.title': 'Cost dashboard', - 'settings.costDashboard.desc': - '7-day spend and token burn across the swarm, with budget pace and per-model breakdown.', - 'settings.costDashboard.sevenDayCost': '7-day daily cost', - 'settings.costDashboard.sevenDayTokens': '7-day token usage', - 'settings.costDashboard.totalSpend': '7-day total', - 'settings.costDashboard.monthlyPace': 'Monthly pace', - 'settings.costDashboard.budgetLimit': 'Budget limit', - 'settings.costDashboard.utilization': 'Utilisation', - 'settings.costDashboard.modelBreakdown': 'Per-model breakdown', - 'settings.costDashboard.model': 'Model', - 'settings.costDashboard.provider': 'Provider', - 'settings.costDashboard.cost': 'Cost', - 'settings.costDashboard.tokens': 'Tokens', - 'settings.costDashboard.requests': 'Requests', - 'settings.costDashboard.percentOfTotal': '% of total', - 'settings.costDashboard.inputTokens': 'Input', - 'settings.costDashboard.outputTokens': 'Output', - 'settings.costDashboard.budgetNormal': 'On track', - 'settings.costDashboard.budgetWarning': 'Warning', - 'settings.costDashboard.budgetExceeded': 'Over budget', - 'settings.costDashboard.noBudget': 'No limit set', - 'settings.costDashboard.noData': 'No cost recorded yet for the last 7 days.', - 'settings.costDashboard.noModels': 'No model activity in the last 7 days.', - 'settings.costDashboard.loading': 'Loading cost dashboard…', - 'settings.costDashboard.disabledHint': - 'Cost dashboard is disabled in config. Set [cost.dashboard] enabled = true in config.toml to re-enable.', - 'settings.costDashboard.subtitle': - 'Live spend and token burn across the swarm. Bars auto-refresh every few seconds — no page reload needed.', - 'settings.costDashboard.summaryAriaLabel': 'Cost summary metrics', - 'settings.costDashboard.lastSevenDays': 'last 7 days', - 'settings.costDashboard.utilizationOf': 'of', - 'settings.costDashboard.thisMonth': 'this month', - 'settings.costDashboard.monthlyPaceHint': - 'Projected monthly spend at the current daily run-rate (avg × 30).', - 'settings.costDashboard.budgetLimitHint': - 'Monthly budget read from cost.monthly_limit_usd in config.toml.', - 'settings.costDashboard.dailyTarget': 'Daily target', - 'settings.costDashboard.today': 'Today', - 'settings.costDashboard.todayBadge': 'TODAY', - 'settings.costDashboard.unknownProvider': '—', - 'settings.costDashboard.justNow': 'Just now', - 'settings.costDashboard.secondsAgo': '{value}s ago', - 'settings.costDashboard.minutesAgo': '{value}m ago', - 'settings.costDashboard.hoursAgo': '{value}h ago', - 'settings.costDashboard.daysAgo': '{value}d ago', - 'settings.costDashboard.updated': 'Updated', - 'settings.costDashboard.refresh': 'Refresh', - 'settings.costDashboard.utcNote': 'Days bucketed in UTC', - 'settings.costDashboard.stackedNote': 'Input + output stacked', - 'settings.costDashboard.modelBreakdownHint': 'Aggregated across the last 7 days.', - 'settings.costDashboard.noDataHint': - 'Send an agent message — token usage from the next provider call will populate the chart within ~10 seconds.', - 'settings.search.title': 'motor de búsqueda', - 'settings.search.menuDesc': - 'Default to OpenHuman-managed search or wire up your own provider with an API key.', - 'settings.search.description': - 'Pick the search engine the agent uses. Managed uses OpenHuman’s backend (no setup). Parallel and Brave run direct from your machine using your API key.', - 'settings.search.engineAria': 'motor de búsqueda', - 'settings.search.engineManagedLabel': 'OpenHuman Gestionado', - 'settings.search.engineManagedDesc': - 'Default. Routed through the OpenHuman backend — no API key required.', - 'settings.search.engineParallelLabel': 'Parallel', - 'settings.search.engineParallelDesc': - 'Direct Parallel API: search, extract, chat, research, enrich, dataset tools.', - 'settings.search.engineBraveLabel': 'Brave Buscar', - 'settings.search.engineBraveDesc': 'Direct Brave Search API: web, news, image, and video tools.', - 'settings.search.engineQueritLabel': 'Querit', - 'settings.search.engineQueritDesc': - 'Direct Querit API: web search with site, time range, country, and language filters.', - 'settings.search.statusConfigured': 'Configurado', - 'settings.search.statusNeedsKey': 'Necesita la clave API', - 'settings.search.fallbackToManaged': - 'No key configured — search will fall back to Managed until a key is saved.', - 'settings.search.getApiKey': 'Obtener la clave API', - 'settings.search.save': 'Guardar', - 'settings.search.clear': 'Borrar', - 'settings.search.show': 'Mostrar', - 'settings.search.hide': 'Ocultar', - 'settings.search.statusSaving': 'Guardando…', - 'settings.search.statusSaved': 'Guardado.', - 'settings.search.statusError': 'Fallido', - 'settings.search.parallelKeyLabel': 'Parallel API clave', - 'settings.search.braveKeyLabel': 'Brave Buscar clave API', - 'settings.search.queritKeyLabel': 'Querit API key', - 'settings.search.placeholderStored': '•••••••• (almacenado)', - 'settings.search.placeholderParallel': 'pk_...', - 'settings.search.placeholderBrave': 'BSA...', - 'settings.search.placeholderQuerit': 'Querit API key', - 'settings.embeddings.title': 'Incrustaciones', - 'settings.embeddings.description': - 'Elige qué proveedor de embeddings convierte la memoria en vectores para la búsqueda semántica. Cambiar el proveedor, modelo o dimensiones invalida los vectores almacenados y requiere un reinicio completo de la memoria.', - 'settings.embeddings.providerAria': 'Proveedor de embeddings', - 'settings.embeddings.statusConfigured': 'Configurado', - 'settings.embeddings.statusNeedsKey': 'Necesita clave API', - 'settings.embeddings.apiKeyLabel': 'Clave API de {provider}', - 'settings.embeddings.placeholderStored': '•••••••• (almacenado)', - 'settings.embeddings.placeholderKey': 'Pega tu clave API…', - 'settings.embeddings.keyStoredEncrypted': 'Tu clave API se almacena cifrada en este dispositivo.', - 'settings.embeddings.show': 'Mostrar', - 'settings.embeddings.hide': 'Ocultar', - 'settings.embeddings.save': 'Guardar', - 'settings.embeddings.clear': 'Borrar', - 'settings.embeddings.model': 'Modelo', - 'settings.embeddings.dimensions': 'Dimensiones', - 'settings.embeddings.customEndpoint': 'Endpoint personalizado', - 'settings.embeddings.customModelPlaceholder': 'Nombre del modelo', - 'settings.embeddings.customDimsPlaceholder': 'Se atenúa', - 'settings.embeddings.applyCustom': 'Aplicar', - 'settings.embeddings.testConnection': 'Probar conexión', - 'settings.embeddings.testing': 'Probando…', - 'settings.embeddings.testSuccess': 'Conectado — {dims} dimensiones', - 'settings.embeddings.testFailed': 'Fallido: {error}', - 'settings.embeddings.saving': 'Guardando…', - 'settings.embeddings.saved': 'Guardado.', - 'settings.embeddings.errorPrefix': 'Fallido', - 'settings.embeddings.wipeTitle': '¿Reiniciar vectores de memoria?', - 'settings.embeddings.wipeBody': - 'Cambiar el proveedor de embeddings, modelo o dimensiones borrará todos los vectores de memoria almacenados. La memoria debe reconstruirse antes de que la recuperación funcione de nuevo. Esto no se puede deshacer.', - 'settings.embeddings.cancel': 'Cancelar', - 'settings.embeddings.confirmWipe': 'Borrar y aplicar', - 'settings.embeddings.setupTitle': 'Configurar {provider}', - 'settings.embeddings.saveAndSwitch': 'Guardar y cambiar', - 'settings.embeddings.optional': 'opcional', - 'settings.embeddings.vectorSearchDisabled': - 'Vector search is disabled. Memory recall will use keyword matching and recency only — no semantic ranking.', - 'settings.embeddings.clearKey': 'Borrar clave API', - 'mcp.alphaBadge': 'Alfa', - 'mcp.alphaBannerText': - 'MCP server support is in early alpha. The Smithery registry, install flow, and tool wiring may misbehave or change shape between releases.', - 'mcp.toolList.noTools': 'No hay herramientas disponibles.', - 'mcp.setup.secretDialog.title': 'Configuración MCP: ingresar secreto', - 'mcp.setup.secretDialog.bodyPrefix': 'El agente de configuración MCP necesita', - 'mcp.setup.secretDialog.bodySuffix': - '. Your value is sent directly to the core process and never enters the AI conversation.', - 'mcp.setup.secretDialog.inputLabel': 'Valor', - 'mcp.setup.secretDialog.inputPlaceholder': 'Pegar aquí', - 'mcp.setup.secretDialog.show': 'Mostrar', - 'mcp.setup.secretDialog.hide': 'Ocultar', - 'mcp.setup.secretDialog.submit': 'Enviar', - 'mcp.setup.secretDialog.cancel': 'Cancelar', - 'mcp.setup.secretDialog.submitting': 'Enviando…', - 'mcp.setup.secretDialog.errorPrefix': 'No se pudo enviar:', - 'mcp.setup.secretDialog.privacyNote': - 'Stored encrypted in the local MCP secrets table. Never logged or sent to a model.', - 'devices.betaBadge': 'Beta', - 'devices.betaText': - 'This feature is currently in beta. Pair iOS phones with this OpenHuman to use them as a remote client.', - 'autonomy.title': 'Autonomía del agente', - 'autonomy.maxActionsLabel': 'Acciones máximas por hora', - 'autonomy.maxActionsHelp': - 'Maximum tool actions an agent can run per rolling hour. New value applies to your next chat. Cron jobs and channel listeners keep their current limit until you restart OpenHuman.', - 'autonomy.statusSaving': 'Guardando…', - 'autonomy.statusSaved': 'Guardado.', - 'autonomy.statusFailed': 'Fallido', - 'autonomy.unlimitedNote': 'Ilimitado: limitación de velocidad deshabilitada.', - 'autonomy.invalidIntegerMsg': - 'Must be a positive integer (use the Unlimited preset for no limit).', - 'autonomy.presetUnlimited': 'Ilimitado (predeterminado)', - 'triggers.toggleFailed': '{action} falló para {trigger}: {message}', - 'skills.composio.noApiKeyTitle': 'No Composio API Clave configurada', - 'skills.composio.noApiKeyDescription': - 'Local mode uses your own Composio API key. Open Settings → Advanced → Composio to add one before connecting integrations here.', - 'skills.composio.noApiKeyCta': 'Abrir en Configuración', - 'rewards.localUnavailable': - 'Local login does not earn rewards, coupons, or referral credit. To earn rewards, log out and continue by signing in with an OpenHuman account.', - 'rewards.localUnavailableCta': 'Abrir configuración de cuenta', - 'channels.localManagedUnavailable': 'Managed channels are not available for local users.', - 'settings.search.localManagedUnavailable': - 'OpenHuman Managed search is not available for local users. Add your own Parallel, Brave, or Querit API key to enable web search.', - 'devices.comingSoonDescription': - 'Device pairing is coming soon. This page will be the home for pairing iPhones and managing connected devices.', - 'common.breadcrumb': 'Ruta de navegación', - 'settings.betaBuild': 'Compilación beta - v{version}', - 'migration.vendor.openclaw': 'OpenClaw', - 'migration.vendor.hermes': 'Hermes Agent', - 'onboarding.apiKeys.openaiOauthHint': - 'Usa ChatGPT Plus/Pro (suscripción) o una clave de API de OpenAI; no necesitas ambas.', - 'onboarding.apiKeys.openaiOauthOpening': 'Abriendo inicio de sesión…', - 'onboarding.apiKeys.finishSignIn': 'Finalizar inicio de sesión de ChatGPT', - 'onboarding.apiKeys.orApiKey': 'o clave API', - 'calls.title': 'Llamadas', - 'calls.comingSoonBody': 'Las llamadas asistidas por IA llegarán pronto. Mantente al tanto.', - 'rewards.referralSection.retry': 'Reintentar', - 'devOptions.sentryDisabled': '(sin ID; Sentry está deshabilitado en esta compilación)', - 'home.usageExhaustedTitle': 'Has agotado tu uso', - 'home.usageExhaustedBody': - 'Ya no te queda uso incluido por ahora. Inicia una suscripción para desbloquear más capacidad continua.', - 'home.usageExhaustedCta': 'Obtener una suscripción', - 'home.routinesCard': 'Your Routines', - 'home.routinesActive': '{count} active', - 'routines.title': 'Your Routines', - 'routines.subtitle': 'Things your assistant does automatically', - 'routines.loading': 'Loading routines…', - 'routines.empty': 'No routines yet', - 'routines.emptyHint': - 'Your assistant can run tasks on a schedule — like morning briefings or daily summaries.', - 'routines.refresh': 'Refresh', - 'routines.nextRun': 'Next run', - 'routines.lastRunSuccess': 'Last run succeeded', - 'routines.lastRunFailed': 'Last run failed', - 'routines.notRunYet': 'Not run yet', - 'routines.runNow': 'Run Now', - 'routines.running': 'Running…', - 'routines.viewHistory': 'View history', - 'routines.loadingHistory': 'Loading…', - 'routines.noHistory': 'No run history yet.', - 'routines.statusSuccess': 'Success', - 'routines.statusError': 'Error', - 'routines.showOutput': 'Show output', - 'routines.hideOutput': 'Hide output', - 'routines.toggleEnabled': 'Enable or disable this routine', - 'routines.typeAgent': 'Agent', - 'routines.typeCommand': 'Command', - 'nav.routines': 'Routines', - 'channels.telegram.remoteControlTitle': 'Control remoto (Telegram)', - 'channels.telegram.remoteControlBody': - 'Desde un chat de Telegram permitido, envía /status, /sessions, /new o /help. El enrutamiento del modelo sigue usando /model y /models.', - 'common.name': 'Nombre', - 'devices.title': 'Dispositivos', - 'devices.pairIphone': 'Emparejar iPhone', - 'devices.noPaired': 'No hay dispositivos emparejados', - 'devices.online': 'En línea', - 'devices.offline': 'Sin conexión', - 'devices.revoke': 'Revocar', - 'devices.confirmRevokeTitle': '¿Revocar dispositivo?', - 'devices.confirmRevokeBody': '{label} ya no podrá conectarse. Esta acción no se puede deshacer.', - 'devices.loadFailed': 'Error al cargar los dispositivos: {message}', - 'devices.pairModal.title': 'Emparejar iPhone', - 'devices.pairModal.loading': 'Generando código de emparejamiento…', - 'devices.pairModal.instructions': 'Abre la app de OpenHuman en tu iPhone y escanea este código.', - 'devices.pairModal.expiredTitle': 'El código QR expiró', - 'devices.pairModal.expiredBody': 'Genera un código nuevo para continuar con el emparejamiento.', - 'devices.pairModal.generateNewCode': 'Generar nuevo código', - 'devices.pairModal.successTitle': 'iPhone emparejado', - 'devices.pairModal.autoClose': 'Cerrando automáticamente…', - 'devices.pairModal.errorTitle': 'Algo salió mal', - 'devices.pairModal.copyUrl': 'Copiar', - 'invites.generate': 'Generar invitación', - 'invites.generating': 'Generando...', - 'invites.loading': 'Cargando invitaciones...', - 'invites.refreshing': 'Actualizando invitaciones...', - 'invites.empty': 'Aún no hay invitaciones', - 'invites.emptyHint': 'Genera un código de invitación para compartir con otras personas', - 'invites.revokeAction': 'Revocar invitación', - 'invites.revokeTitle': 'Revocar código de invitación', - 'invites.revokeWarning': - 'Este código de invitación dejará de ser válido y no podrá usarse para unirse al equipo.', - 'invites.failedGenerate': 'No se pudo generar la invitación', - 'invites.failedRevoke': 'No se pudo revocar la invitación', - 'invites.expiresOn': 'Expira el {date}', - 'invites.usedUp': 'Agotado', - 'settings.ai.disconnectProvider': 'Desconectar {label}', - 'settings.ai.connectProviderLabel': 'Conectar {label}', - 'settings.ai.defaultLocalEndpoint': 'http://localhost:11434/v1', - 'settings.ai.endpointUrlLabel': 'Punto final URL', - 'settings.ai.localRuntimeHelper': - 'Where {label} is reachable. Default is localhost; point this at a remote host (for example, http://10.0.0.4:11434/v1) to use a shared instance.', - 'settings.ai.endpointUrlRequired': 'Se requiere el punto final URL.', - 'settings.ai.endpointProtocolRequired': 'El punto final debe comenzar con http:// o https://.', - 'settings.ai.connectProviderDialog': 'Conectar {label}', - 'settings.ai.or': 'O', - 'settings.ai.openRouterOauthDescription': - 'Sign in with OpenRouter and import a user-controlled API key using PKCE.', - 'settings.ai.connecting': 'Conectando...', - 'settings.ai.backgroundLoops': 'Bucles de fondo', - 'settings.ai.backgroundLoopsDesc': - 'See what runs without a chat message, pause heartbeat work, and inspect recent credit ledger rows.', - 'settings.ai.heartbeatControls': 'Controles de latidos del corazón', - 'settings.ai.heartbeatControlsDesc': - 'Defaults off. Enabling starts the loop; disabling aborts the running task.', - 'settings.ai.heartbeatLoop': 'Bucle de latidos del corazón', - 'settings.ai.heartbeatLoopDesc': - 'Master scheduler for planner + optional subconscious inference.', - 'settings.ai.subconsciousInference': 'inferencia subconsciente', - 'settings.ai.subconsciousInferenceDesc': - 'Runs model-backed task/reflection evaluation on heartbeat ticks.', - 'settings.ai.calendarMeetingChecks': 'Verificaciones de reuniones del calendario', - 'settings.ai.calendarMeetingChecksDesc': - 'Calls calendar event list for active Google Calendar connections.', - 'settings.ai.calendarCap': 'tapa del calendario', - 'settings.ai.connectionsPerTick': '{count} conexión/tick', - 'settings.ai.meetingLookahead': 'Reunión anticipada', - 'settings.ai.minutesShort': '{count} min', - 'settings.ai.reminderLookahead': 'Recordatorio anticipado', - 'settings.ai.cronReminderChecks': 'Comprobaciones de recordatorio cron', - 'settings.ai.cronReminderChecksDesc': 'Scans enabled cron jobs for reminder-like upcoming items.', - 'settings.ai.relevantNotificationChecks': 'Comprobaciones de notificaciones relevantes', - 'settings.ai.relevantNotificationChecksDesc': - 'Promotes urgent local notifications into proactive alerts.', - 'settings.ai.externalDelivery': 'Entrega externa', - 'settings.ai.externalDeliveryDesc': - 'Lets heartbeat alerts send proactive messages to external channels.', - 'settings.ai.interval': 'Intervalo', - 'settings.ai.running': 'Corriendo...', - 'settings.ai.plannerTickNow': 'Planificador marca ahora', - 'settings.ai.loadingHeartbeatControls': 'Cargando controles de latidos...', - 'settings.ai.heartbeatControlsUnavailable': 'Los controles de latidos no están disponibles.', - 'settings.ai.loopMap': 'Mapa de bucle', - 'settings.ai.on': 'en', - 'settings.ai.off': 'apagado', - 'settings.ai.recentUsageLedger': 'Libro mayor de uso reciente', - 'settings.ai.recentUsageLedgerDesc': - 'Backend rows expose action/time today; source tags need backend support.', - 'settings.ai.openhumanDefault': 'OpenHuman (predeterminado)', - 'settings.ai.localModelResolved': 'Ollama · {model}', - 'settings.ai.customRoutingForWorkload': 'Ruta personalizada para {label}', - 'settings.ai.loadingModels': 'Cargando modelos...', - 'settings.ai.enterModelIdManually': 'o ingrese la identificación del modelo manualmente:', - 'settings.ai.modelIdPlaceholderForProvider': '{slug} identificación del modelo', - 'settings.ai.modelIdPlaceholder': 'model-id', - 'settings.ai.selectModel': 'Seleccione un modelo...', - 'settings.ai.temperatureOverride': 'Anulación de temperatura', - 'settings.ai.temperatureOverrideSlider': 'Anulación de temperatura (control deslizante)', - 'settings.ai.temperatureOverrideValue': 'Anulación de temperatura (valor)', - 'settings.ai.temperatureOverrideDesc': - 'Lower = more deterministic. Leave unchecked to use the provider default.', - 'settings.ai.testFailed': 'Prueba fallida', - 'settings.ai.testingModel': 'Modelo de prueba...', - 'settings.ai.modelResponse': 'Respuesta modelo', - 'settings.ai.providerWithValue': 'Proveedor: {value}', - 'settings.ai.noneDash': '—', - 'settings.ai.promptHelloWorld': 'Mensaje: Hola mundo', - 'settings.ai.startedAt': 'Iniciado: {value}', - 'settings.ai.waitingForModelResponse': 'Esperando respuesta del modelo seleccionado...', - 'settings.ai.response': 'Respuesta', - 'settings.ai.testing': 'Probando...', - 'settings.ai.test': 'prueba', - 'settings.ai.slugMissingError': 'Ingrese el nombre de un proveedor para generar un slug.', - 'settings.ai.slugInUseError': 'Ese nombre de proveedor ya está en uso.', - 'settings.ai.slugReservedError': 'Elija un nombre de proveedor diferente.', - 'settings.ai.providerNamePlaceholder': 'Mi proveedor', - 'settings.ai.slugLabel': 'Babosa:', - 'settings.ai.openAiUrlLabel': 'OpenAI URL', - 'settings.ai.openAiUrlPlaceholder': 'https://api.openai.com/v1', - 'settings.ai.keepExistingKeyPlaceholder': 'Déjelo en blanco para conservar la clave existente', - 'settings.ai.reindexingMemory': 'Memoria de reindexación', - 'settings.ai.reindexingMemoryMessage': - 'Embeddings are being reprocessed. {pending} memory item(s) are being re-embedded under the current model — semantic recall is reduced until this finishes. Keyword search keeps working, and re-embedding continues in the background if you close this.', - 'settings.ai.signInWithOpenRouter': 'Iniciar sesión con OpenRouter', - 'settings.ai.weekBudget': 'Presupuesto semanal', - 'settings.ai.cycleRemaining': 'Ciclo restante', - 'settings.ai.cycleTotalSpend': 'Gasto total del ciclo', - 'settings.ai.avgSpendRow': 'Fila de gasto medio', - 'settings.ai.backgroundApiReads': 'Bg API lee', - 'settings.ai.backgroundWakeups': 'Bg despertares', - 'settings.ai.budgetMath': 'Matemáticas presupuestarias', - 'settings.ai.rowsLeft': 'Filas restantes', - 'settings.ai.rowsPerFullWeekBudget': 'Presupuesto de filas por semana completa', - 'settings.ai.sampleBurnRate': 'Tasa de grabación de muestras', - 'settings.ai.projectedEmpty': 'vacío proyectado', - 'settings.ai.apiReadsPerDollarRemaining': 'API lecturas por $ restantes', - 'settings.ai.loopCallBudget': 'Presupuesto de llamadas en bucle', - 'settings.ai.heartbeatTicks': 'Latidos del corazón', - 'settings.ai.calendarPlannerCalls': 'Llamadas del planificador de calendario', - 'settings.ai.calendarFanoutCap': 'Tapa de distribución del calendario', - 'settings.ai.subconsciousModelCalls': 'Llamadas del modelo subconsciente', - 'settings.ai.composioSyncScans': 'Composio escaneos de sincronización', - 'settings.ai.totalBackgroundApiReadBudget': 'Total bg API leer presupuesto', - 'settings.ai.memoryWorkerPolls': 'Encuestas de trabajadores de la memoria', - 'settings.ai.defaultProviderName': 'OpenHuman', - 'settings.ai.routing.managed': 'Gestionado', - 'settings.ai.routing.managedDesc': - 'OpenHuman will run all inference in the cloud, choose the best model for the task, optimize for cost, and keep the safest routing defaults.', - 'settings.ai.routing.managedMsg': - 'OpenHuman will handle all inference for every workload and automatically choose the best route for cost, quality, and security.', - 'settings.ai.routing.useYourOwn': 'Utilice sus propios modelos', - 'settings.ai.routing.useYourOwnDesc': - 'Choose one provider + model and route every workload through it. This is simple, but it can be inefficient because lightweight and heavyweight inference all share the same route.', - 'settings.ai.routing.advanced': 'Avanzado', - 'settings.ai.routing.advancedDesc': - 'Pick different models for different tasks. This is the best option for tight cost optimization and the most control.', - 'settings.ai.routing.customDesc': - 'Fine-grained routing gives you the best cost optimization and the most control. Use the rows below to decide which workloads stay Managed, which use your shared default, and which pin to a specific model.', - 'settings.ai.routing.chatAndConversations': 'Chat y conversaciones', - 'settings.ai.routing.chatDesc': - 'Models used during direct user interaction, replies, reasoning, agent loops, and coding help.', - 'settings.ai.routing.backgroundTasks': 'Tareas en segundo plano', - 'settings.ai.routing.bgTasksDesc': - 'Models used outside the main conversation flow for summarization, heartbeat, learning, and subconscious evaluation.', - 'settings.ai.routing.addCustomProvider': 'Agregar proveedor personalizado', - 'settings.ai.globalModel.title': 'Elige un modelo para todo', - 'settings.ai.globalModel.desc': - 'This routes all inference through one model. It is simpler, but it can be inefficient for cost and quality because lightweight and heavy tasks will all use the same route.', - 'settings.ai.globalModel.noProviders': - 'Add or connect a provider first. Then you can route every workload through one model here.', - 'settings.ai.globalModel.provider': 'Proveedor', - 'settings.ai.globalModel.model': 'modelo', - 'settings.ai.globalModel.loadingModels': 'Cargando modelos…', - 'settings.ai.globalModel.enterModelId': 'Ingrese la identificación del modelo', - 'settings.ai.globalModel.appliesToAll': - 'Applies the same provider + model to chat, reasoning, coding, memory, heartbeat, learning, and subconscious. Embeddings are configured separately. Changes save when you click save.', - 'settings.ai.globalModel.saving': 'Guardando…', - 'settings.ai.globalModel.saved': 'Guardado', - 'settings.ai.workload.noModel': 'Ningún modelo seleccionado', - 'settings.ai.workload.changeModel': 'Cambiar modelo', - 'settings.ai.workload.chooseModel': 'Elige modelo', - 'settings.ai.provider.ollama': 'Ollama', - 'kbd.ariaLabel': 'Atajo de teclado: {shortcut}', - 'chat.modelPlaceholder': 'gpt-4o', - 'iosPair.title': 'Emparéjalo con tu escritorio', - 'iosPair.instructions': - 'Open OpenHuman on your desktop, go to Settings > Devices, and tap "Pair phone" to show the QR code.', - 'iosPair.scanQrCode': 'Escanear QR code', - 'iosPair.scannerOpening': 'Apertura del escáner...', - 'iosPair.connecting': 'Conectándose al escritorio...', - 'iosPair.connectedLoading': '¡Conectado! Cargando...', - 'iosPair.expired': 'QR code expiró. Pídale al escritorio que regenere el código.', - 'iosPair.desktopLabel': 'Escritorio', - 'iosPair.retryScan': 'Reintentar escaneo', - 'iosPair.step.openDesktop': 'Abra OpenHuman en el escritorio', - 'iosPair.step.openSettings': 'Vaya a Configuración > Dispositivos', - 'iosPair.step.showQr': 'Toca "Emparejar teléfono" para mostrar QR', - 'iosPair.error.camera': 'Camera scan failed. Check camera permissions and try again.', - 'iosPair.error.invalidQr': - 'Invalid QR code. Make sure you are scanning an OpenHuman pairing code.', - 'iosPair.error.unreachableDesktop': - 'Could not reach the desktop. Make sure both devices are online and try again.', - 'iosPair.error.connectionFailed': - 'Connection failed. Make sure the desktop app is running and try again.', - 'iosMascot.defaultPairedLabel': 'Escritorio', - 'iosMascot.connectedTo': 'Conectado a', - 'iosMascot.disconnect': 'Desconectar', - 'iosMascot.pushToTalk': 'Empuja para hablar', - 'iosMascot.thinking': 'Pensando...', - 'iosMascot.typeMessage': 'Escribe un mensaje...', - 'iosMascot.sendMessage': 'enviar mensaje', - 'iosMascot.error.generic': 'Algo salió mal. Por favor inténtalo de nuevo.', - 'iosMascot.error.sendFailed': 'No se pudo enviar. Comprueba tu conexión.', - 'settings.companion.title': 'Compañero de escritorio', - 'settings.companion.session': 'Sesión', - 'settings.companion.activeLabel': 'Activo', - 'settings.companion.inactiveStatus': 'Inactivo', - 'settings.companion.stopping': 'Parando…', - 'settings.companion.stopSession': 'Detener sesión', - 'settings.companion.starting': 'Empezando…', - 'settings.companion.startSession': 'Iniciar sesión', - 'settings.companion.sessionId': 'ID de sesión', - 'settings.companion.turns': 'vueltas', - 'settings.companion.remaining': 'restante', - 'settings.companion.configuration': 'Configuración', - 'settings.companion.hotkey': 'tecla de acceso rápido', - 'settings.companion.activationMode': 'Modo de activación', - 'settings.companion.sessionTtl': 'TTL de sesión', - 'settings.companion.screenCapture': 'Captura de pantalla', - 'settings.companion.appContext': 'Contexto de la aplicación', - 'settings.composio.title': 'Composio', - 'settings.composio.apiKeyExamplePlaceholder': 'ck_live_xxxxxxxxxxxxxxxx', - 'composio.integrationSlugsHelp': 'Slugs de integración separados por comas, p.', - 'composio.integrationSlugsExample': 'gmail, flojo', - 'composio.integrationSlugsCaseInsensitive': 'No distingue entre mayúsculas y minúsculas.', - 'composio.integrationSlugsPlaceholder': 'gmail, holgura, ...', - 'team.members': 'Miembros', - 'team.membersDesc': 'Administrar los miembros y roles del equipo', - 'team.invites': 'invita', - 'team.invitesDesc': 'Generar y administrar códigos de invitación', - 'team.settings': 'Configuración del equipo', - 'team.settingsDesc': 'Editar el nombre y la configuración del equipo', - 'team.editSettings': 'Editar configuración del equipo', - 'team.enterName': 'Introduce el nombre del equipo', - 'team.saving': 'Guardando...', - 'team.saveChanges': 'Guardar cambios', - 'team.delete': 'Eliminar equipo', - 'team.deleteDesc': 'Eliminar permanentemente este equipo', - 'team.deleting': 'Eliminando...', - 'team.failedToUpdate': 'No se pudo actualizar el equipo', - 'team.failedToDelete': 'No se pudo eliminar el equipo', - 'team.manageTitle': 'Administrar {name}', - 'team.planCreated': 'Plan {plan} • Creado {date}', - 'team.confirmDelete': '¿Está seguro de que desea eliminar {name}?', - 'team.deleteWarning': 'This action cannot be undone. All team data will be permanently removed.', - 'welcome.clearingAppData': 'Borrando datos de la aplicación...', - 'welcome.clearAppDataAndRestart': 'Borrar datos de la aplicación y reiniciar', - 'welcome.clearAppDataWarning': - 'This wipes locally stored secrets and accounts on this device. Your cloud account is unaffected - you can sign in again right after.', - 'welcome.resetErrorFallback': - 'Could not clear app data. Please quit and reopen OpenHuman, then try again.', - 'welcome.signingIn': 'Registrándote...', - 'welcome.termsIntro': 'Al continuar, aceptas las', - 'welcome.termsOfUse': 'Términos', - 'welcome.termsJoiner': 'y', - 'welcome.privacyPolicy': 'Política de privacidad', - 'welcome.termsOutro': '.', - 'chat.addReaction': 'Añadir reacción', - 'chat.agentProfile.create': 'Crear perfil de agente', - 'chat.agentProfile.createFailed': 'No se pudo crear el perfil del agente.', - 'chat.agentProfile.customDescription': 'Perfil de agente personalizado', - 'chat.agentProfile.defaultAgentLabel': 'orquestador', - 'chat.agentProfile.exists': 'El perfil del agente "{name}" ya existe.', - 'chat.agentProfile.label': 'Perfil del agente', - 'chat.agentProfile.namePlaceholder': 'Nombre del perfil', - 'chat.agentProfile.promptStylePlaceholder': 'estilo rápido', - 'chat.agentProfile.allowedToolsPlaceholder': 'Herramientas permitidas', - 'chat.backToThread': 'volver a {title}', - 'chat.parentThread': 'hilo principal', - 'chat.removeReaction': 'Quitar {emoji}', - 'invites.copyCodeAria': 'Copiar código de invitación', - 'invites.revokeAria': 'Revocar invitación', - 'invites.uses': 'Usos: {current}{max}', - 'invites.revokePromptPrefix': '¿Estás seguro de que quieres revocar el código de invitación?', - 'invites.revoking': 'Revocando...', - 'team.refreshingMembers': 'Miembros refrescantes...', - 'team.loadingMembers': 'Cargando miembros...', - 'team.memberCount': '{count} miembro', - 'team.memberCountPlural': '{count} miembros', - 'team.you': '(tú)', - 'team.removeAria': 'Quitar {name}', - 'team.noMembers': 'No se encontraron miembros', - 'team.removeTitle': 'Eliminar miembro del equipo', - 'team.removePromptPrefix': '¿Estás seguro de que quieres eliminar?', - 'team.removePromptSuffix': 'del equipo?', - 'team.removeWarning': 'Perderán el acceso al equipo y a todos los recursos del equipo.', - 'team.removing': 'Eliminando...', - 'team.removeAction': 'Eliminar miembro', - 'team.changeRoleTitle': 'Cambiar rol de miembro', - 'team.changeRolePrompt': "Change {name}'s role from {oldRole} to {newRole}?", - 'team.changeRoleAdminGrant': - 'This will grant them full admin permissions including the ability to manage team members.', - 'team.changeRoleAdminRemove': - 'This will remove their admin permissions and they will no longer be able to manage the team.', - 'team.changing': 'Cambiando...', - 'team.changeRoleAction': 'Cambiar rol', - 'team.failedChangeRole': 'No se pudo cambiar el rol', - 'team.failedRemoveMember': 'No se pudo eliminar el miembro', - 'voice.failedToLoadSettings': 'No se pudo cargar la configuración de voz', - 'voice.failedToSaveSettings': 'No se pudo guardar la configuración de voz', - 'voice.failedToStartServer': 'No se pudo iniciar el servidor de voz', - 'voice.failedToStopServer': 'No se pudo detener el servidor de voz', - 'voice.sttDisabledPrefix': - 'Voice dictation is disabled until the local STT model is downloaded. Use the', - 'voice.sttDisabledSuffix': 'sección anterior para instalar Whisper.', - 'voice.debug.failedToLoadVoiceDebugData': 'No se pudieron cargar los datos de depuración de voz', - 'voice.debug.settingsSaved': 'Configuración de depuración guardada.', - 'voice.debug.failedToSaveSettings': 'No se pudo guardar la configuración de voz', - 'voice.debug.runtimeStatus': 'Estado de tiempo de ejecución', - 'voice.debug.runtimeStatusDesc': - 'Live diagnostics for the voice server and speech-to-text engine.', - 'voice.debug.server': 'Servidor', - 'voice.debug.unavailable': 'No disponible', - 'voice.debug.ready': 'Listo', - 'voice.debug.notReady': 'No listo', - 'voice.debug.hotkey': 'tecla de acceso rápido', - 'voice.debug.notAvailable': 'n/a', - 'voice.debug.mode': 'Modo', - 'voice.debug.transcriptions': 'Transcripciones', - 'voice.debug.serverError': 'Error del servidor', - 'voice.debug.advancedSettings': 'Configuración avanzada', - 'voice.debug.advancedSettingsDesc': - 'Low-level tuning parameters for recording and silence detection.', - 'voice.debug.minimumRecordingSeconds': 'Segundos mínimos de grabación', - 'voice.debug.silenceThreshold': 'Umbral de silencio (RMS)', - 'voice.debug.silenceThresholdDesc': - 'Recordings with energy below this are treated as silence and skipped. Lower = more sensitive.', - 'voice.providers.saved': 'Proveedores de voz guardados.', - 'voice.providers.failedToSave': 'No se pudieron guardar los proveedores de voz', - 'voice.providers.ellipsis': '…', - 'voice.providers.installing': 'Instalación', - 'voice.providers.installingBusy': 'Instalando…', - 'voice.providers.reinstallLocally': 'Reinstalar localmente', - 'voice.providers.repair': 'Reparación', - 'voice.providers.retryLocally': 'Reintentar localmente', - 'voice.providers.installLocally': 'Instalar localmente', - 'voice.providers.whisperReady': 'El susurro está listo.', - 'voice.providers.whisperInstallStarted': 'Se inició la instalación de Whisper', - 'voice.providers.queued': 'en cola', - 'voice.providers.failedToInstallWhisper': 'No se pudo instalar Whisper', - 'voice.providers.piperReady': 'Piper está listo.', - 'voice.providers.piperInstallStarted': 'Instalación de Piper iniciada', - 'voice.providers.failedToInstallPiper': 'No se pudo instalar Piper', - 'voice.providers.title': 'Proveedores de voz', - 'voice.providers.desc': - 'Choose where transcription and synthesis run. Use the Install locally buttons to download the binaries and models into your workspace. Local providers can be saved before the install finishes — no manual WHISPER_BIN or PIPER_BIN setup required.', - 'voice.providers.sttProvider': 'Proveedor de voz a texto', - 'voice.providers.sttProviderAria': 'proveedor STT', - 'voice.providers.cloudWhisperProxy': 'Nube (proxy de susurro)', - 'voice.providers.localWhisper': 'Susurro local', - 'voice.providers.installRequired': ' (se requiere instalación)', - 'voice.providers.whisperInstalledTitle': 'Susurro está instalado. Haga clic para reinstalar.', - 'voice.providers.whisperDownloadTitle': - 'Download whisper.cpp and the GGML model into your workspace.', - 'voice.providers.installed': 'Instalado', - 'voice.providers.installFailed': 'La instalación falló', - 'voice.providers.notInstalled': 'No instalado', - 'voice.providers.whisperModel': 'Modelo susurro', - 'voice.providers.whisperModelAria': 'modelo susurro', - 'voice.providers.whisperModelTiny': 'Pequeño (39 MB, más rápido)', - 'voice.providers.whisperModelBase': 'Base (74 MB)', - 'voice.providers.whisperModelSmall': 'Pequeño (244 MB)', - 'voice.providers.whisperModelMedium': 'Mediano (769 MB, recomendado)', - 'voice.providers.whisperModelLargeTurbo': 'Turbo v3 grande (1,5 GB, mejor precisión)', - 'voice.providers.ttsProvider': 'Proveedor de texto a voz', - 'voice.providers.ttsProviderAria': 'Proveedor de TTS', - 'voice.providers.cloudElevenLabsProxy': 'Nube (proxy de ElevenLabs)', - 'voice.providers.localPiper': 'flautista local', - 'voice.providers.piperInstalledTitle': 'Piper está instalado. Haga clic para reinstalar.', - 'voice.providers.piperDownloadTitle': - 'Download Piper and the bundled en_US-lessac-medium voice into your workspace.', - 'voice.providers.piperVoice': 'voz de gaitero', - 'voice.providers.piperVoiceAria': 'voz de gaitero', - 'voice.providers.customVoiceOption': 'Otro (escriba a continuación)…', - 'voice.providers.customVoiceAria': 'Identificación de voz de Piper (personalizada)', - 'voice.providers.customVoicePlaceholder': 'es_US-lessac-medium', - 'voice.providers.piperVoicesDesc': - 'Voices come from huggingface.co/rhasspy/piper-voices. Switching voices may require an Install/Reinstall click to download the new .onnx.', - 'voice.providers.mascotVoice': 'Voz de mascota', - 'voice.providers.mascotVoiceDescPrefix': - 'The ElevenLabs voice the mascot uses for spoken replies is configured under', - 'voice.providers.mascotSettings': 'Configuración de mascota', - 'voice.providers.mascotVoiceDescSuffix': '.', - 'voice.providers.hotkeyPlaceholder': 'fn', - 'voice.providers.piperPreset.lessacMedium': 'Estados Unidos · Lessac (neutral, recomendado)', - 'voice.providers.piperPreset.lessacHigh': 'EE.UU. · Lessac (mayor calidad, más grande)', - 'voice.providers.piperPreset.ryanMedium': 'Estados Unidos · Ryan (masculino)', - 'voice.providers.piperPreset.amyMedium': 'Estados Unidos · Amy (mujer)', - 'voice.providers.piperPreset.librittsHigh': 'Estados Unidos · LibriTTS (varios altavoces)', - 'voice.providers.piperPreset.alanMedium': 'ES · Alan (masculino)', - 'voice.providers.piperPreset.jennyDiocoMedium': 'GB · Jenny Dioco (mujer)', - 'voice.providers.piperPreset.northernEnglishMaleMedium': 'GB · Inglés del Norte (masculino)', - 'voice.providers.chip.cloud': 'OpenHuman (Managed)', - 'voice.providers.chip.cloudAria': 'OpenHuman managed provider is always enabled', - 'voice.providers.chip.whisper': 'Whisper (Local)', - 'voice.providers.chip.enableWhisper': 'Enable local Whisper STT', - 'voice.providers.chip.disableWhisper': 'Disable local Whisper STT', - 'voice.providers.chip.piper': 'Piper (Local)', - 'voice.providers.chip.enablePiper': 'Enable local Piper TTS', - 'voice.providers.chip.disablePiper': 'Disable local Piper TTS', - 'voice.providers.chip.enableProvider': 'Enable', - 'voice.providers.chip.disableProvider': 'Disable', - 'voice.providers.chip.apiKeyLabel': 'API Key', - 'voice.providers.chip.apiKeyPlaceholder': 'sk-…', - 'voice.providers.chip.comingSoon': 'coming soon', - 'voice.modal.title': 'Configure', - 'voice.modal.desc': - 'Enter your API key to enable this provider. You can test the connection before saving.', - 'voice.modal.testKey': 'Test Key', - 'voice.modal.testing': 'Testing…', - 'voice.modal.saveAndEnable': 'Save & Enable', - 'voice.modal.enable': 'Enable', - 'voice.modal.whisperDesc': - 'Choose a model size and install the Whisper binary and GGML model into your workspace. Larger models are more accurate but slower.', - 'voice.modal.piperDesc': - 'Choose a voice and install the Piper binary and ONNX model into your workspace. Piper runs fully offline with low latency.', - 'voice.routing.title': 'Voice Routing', - 'voice.routing.desc': 'Choose which enabled providers handle speech-to-text and text-to-speech.', - 'voice.routing.save': 'Save', - 'voice.routing.testStt': 'Test STT', - 'voice.routing.testTts': 'Test TTS', - 'voice.routing.elevenlabsVoice': 'ElevenLabs Voice', - 'voice.routing.elevenlabsVoiceAria': 'ElevenLabs voice selection', - 'voice.routing.elevenlabsVoiceIdAria': 'ElevenLabs voice ID (custom)', - 'voice.routing.elevenlabsVoiceDesc': - 'Pick a curated voice or paste a custom voice ID from your ElevenLabs dashboard.', - 'voice.externalProviders.title': 'External Voice Providers', - 'voice.externalProviders.desc': - 'Connect third-party STT/TTS APIs like Deepgram, ElevenLabs, or OpenAI directly.', - 'voice.externalProviders.keySet': 'Key set', - 'voice.externalProviders.noKey': 'No API key', - 'voice.externalProviders.test': 'Test', - 'voice.externalProviders.testing': 'Testing…', - 'voice.externalProviders.remove': 'Remove', - 'voice.externalProviders.provider': 'Provider', - 'voice.externalProviders.selectProvider': 'Select a provider…', - 'voice.externalProviders.apiKey': 'API Key', - 'voice.externalProviders.apiKeyPlaceholder': 'sk-…', - 'voice.externalProviders.add': 'Add', - 'screenAwareness.debug.debugAndDiagnostics': 'Depuración y diagnóstico', - 'screenAwareness.debug.collapse': 'Colapso', - 'screenAwareness.debug.expand': 'Expandir', - 'screenAwareness.debug.failedToSave': 'No se pudo guardar la inteligencia de pantalla', - 'screenAwareness.debug.policyTitle': 'Política de inteligencia de pantalla', - 'screenAwareness.debug.baselineFps': 'FPS de referencia', - 'screenAwareness.debug.useVisionModel': 'Usar modelo de visión', - 'screenAwareness.debug.useVisionModelDesc': - 'Send screenshots to a vision LLM for richer context. When off, only OCR text is used with a text LLM — faster and no vision model required.', - 'screenAwareness.debug.keepScreenshots': 'Mantener capturas de pantalla', - 'screenAwareness.debug.keepScreenshotsDesc': - 'Save captured screenshots to the workspace instead of deleting after processing', - 'screenAwareness.debug.allowlist': 'Lista de permitidos (una regla por línea)', - 'screenAwareness.debug.denylist': 'Lista de rechazados (una regla por línea)', - 'screenAwareness.debug.saveSettings': 'Guardar configuración de inteligencia de pantalla', - 'screenAwareness.debug.sessionStats': 'Estadísticas de sesión', - 'screenAwareness.debug.framesEphemeral': 'Marcos (efímeros)', - 'screenAwareness.debug.panicStop': 'parada de pánico', - 'screenAwareness.debug.defaultPanicHotkey': 'Cmd+Mayús+.', - 'screenAwareness.debug.vision': 'Visión', - 'screenAwareness.debug.idle': 'inactivo', - 'screenAwareness.debug.visionQueue': 'Cola de visión', - 'screenAwareness.debug.lastVision': 'ultima vision', - 'screenAwareness.debug.notAvailable': 'n/a', - 'screenAwareness.debug.visionSummaries': 'Resúmenes de visión', - 'screenAwareness.debug.refreshing': 'Refrescante…', - 'screenAwareness.debug.noSummaries': 'Aún no hay resúmenes.', - 'screenAwareness.debug.unknownApp': 'Aplicación desconocida', - 'screenAwareness.debug.macosOnly': 'Screen Intelligence V1 is currently supported on macOS only.', - 'memory.debugTitle': 'Depuración de memoria', - 'memory.documents': 'Documentos', - 'memory.filterByNamespace': 'Filtrar por espacio de nombres...', - 'memory.refresh': 'Actualizar', - 'memory.noDocumentsFound': 'No se encontraron documentos.', - 'memory.delete': 'Eliminar', - 'memory.rawResponse': 'Respuesta cruda', - 'memory.namespaces': 'Espacios de nombres', - 'memory.noNamespacesFound': 'No se encontraron espacios de nombres.', - 'memory.queryRecall': 'Consulta y recuperación', - 'memory.namespace': 'Espacio de nombres', - 'memory.queryText': 'Texto de consulta...', - 'memory.defaultMaxChunks': '10', - 'memory.maxChunks': 'trozos máximos', - 'memory.query': 'Consulta', - 'memory.recall': 'recordar', - 'memory.queryLabel': 'Consulta', - 'memory.recallLabel': 'recordar', - 'memory.queryResult': 'Resultado de la consulta', - 'memory.recallResult': 'Recuperar resultado', - 'memory.clearNamespace': 'Borrar espacio de nombres', - 'memory.clearNamespaceDescription': 'Permanently delete all documents within a namespace.', - 'memory.selectNamespace': 'Seleccionar espacio de nombres...', - 'memory.exampleNamespace': 'por ej. habilidad:gmail:usuario@ejemplo.com', - 'memory.clear': 'Borrar', - 'memory.deleteConfirm': 'Delete document "{documentId}" in namespace "{namespace}"?', - 'memory.clearNamespaceConfirm': - 'This will permanently delete ALL documents in namespace "{namespace}". Continue?', - 'memory.clearNamespaceSuccess': 'Se borró el espacio de nombres "{namespace}".', - 'memory.clearNamespaceEmpty': 'No hay nada que borrar en "{namespace}".', - 'webhooks.debugTitle': 'Depuración de webhooks', - 'webhooks.failedToLoadDebugData': 'No se pudieron cargar los datos de depuración del webhook', - 'webhooks.clearLogsConfirm': '¿Borrar todos los registros de depuración de webhooks capturados?', - 'webhooks.failedToClearLogs': 'No se pudieron borrar los registros de webhook', - 'webhooks.loading': 'Cargando...', - 'webhooks.refresh': 'Actualizar', - 'webhooks.clearing': 'Limpiando...', - 'webhooks.clearLogs': 'Borrar registros', - 'webhooks.registered': 'registrado', - 'webhooks.captured': 'capturado', - 'webhooks.live': 'vivir', - 'webhooks.disconnected': 'desconectado', - 'webhooks.lastEvent': 'último evento', - 'webhooks.at': 'en', - 'webhooks.registeredWebhooks': 'Webhooks registrados', - 'webhooks.noActiveRegistrations': 'No hay registros activos.', - 'webhooks.resolvingBackendUrl': 'Resolviendo el servidor URL…', - 'webhooks.capturedRequests': 'Solicitudes capturadas', - 'webhooks.noRequestsCaptured': 'Aún no se han capturado solicitudes de webhook.', - 'webhooks.unrouted': 'sin ruta', - 'webhooks.pending': 'pendiente', - 'webhooks.requestHeaders': 'Encabezados de solicitud', - 'webhooks.queryParams': 'Parámetros de consulta', - 'webhooks.requestBody': 'Cuerpo de solicitud', - 'webhooks.responseHeaders': 'Encabezados de respuesta', - 'webhooks.responseBody': 'Cuerpo de respuesta', - 'webhooks.rawPayload': 'Carga útil sin procesar', - 'webhooks.empty': '[vacío]', - 'providerSetup.error.defaultDetails': 'Error en la configuración del proveedor.', - 'providerSetup.error.providerFallback': 'el proveedor', - 'providerSetup.error.credentialsRejected': - '{provider} rejected the credentials. Check the API key and try again.', - 'providerSetup.error.endpointNotRecognized': - '{provider} did not recognize the endpoint. Check the base URL and try again.', - 'providerSetup.error.providerUnavailable': - '{provider} is unavailable right now. Try again or check the provider status.', - 'providerSetup.error.unreachable': - 'Could not reach {provider}. Check the endpoint URL and network connection, then try again.', - 'providerSetup.error.couldNotReachWithMessage': 'No se pudo comunicar con {provider}: {message}', - 'providerSetup.error.technicalDetails': 'Detalles técnicos', - 'devices.emptyState': 'Escanee un QR code en su iPhone para conectarlo a esta sesión OpenHuman.', - 'devices.devicePairedTitle': 'Dispositivo emparejado', - 'devices.devicePairedMessage': 'iPhone conectado correctamente.', - 'devices.deviceRevokedTitle': 'Dispositivo revocado', - 'devices.deviceRevokedMessage': '{label} eliminado.', - 'devices.revokeFailedTitle': 'Revocar falló', - 'devices.lastSeenNever': 'nunca', - 'devices.lastSeenNow': 'Justo ahora', - 'devices.lastSeenMinutes': 'Hace {count}m', - 'devices.lastSeenHours': 'Hace {count}h', - 'devices.lastSeenDays': 'Hace {count}d', - 'devices.revokeAria': 'Revocar {label}', - 'devices.pairModal.expiresIn': 'El código caduca en ~{count} minuto', - 'devices.pairModal.expiresInPlural': 'El código caduca en ~{count} minutos', - 'devices.pairModal.showDetails': 'Mostrar detalles', - 'devices.pairModal.hideDetails': 'Ocultar detalles', - 'devices.pairModal.channelId': 'ID de canal', - 'devices.pairModal.pairingUrl': 'Emparejamiento URL', - 'devices.pairModal.errorPrefix': 'No se pudo crear el emparejamiento: {message}', - 'mcp.catalog.searchAria': 'Buscar catálogo de herrería', - 'mcp.catalog.searchPlaceholder': 'Buscar en el catálogo de Herrería...', - 'mcp.catalog.loadFailed': 'No se pudo cargar el catálogo', - 'mcp.catalog.noResults': 'No se encontraron servidores.', - 'mcp.catalog.noResultsFor': 'No se encontraron servidores para "{query}".', - 'mcp.catalog.loadMore': 'Cargar más', - 'mcp.configAssistant.title': 'Asistente de configuración', - 'mcp.configAssistant.empty': 'Ask about configuration, required env vars, or setup steps.', - 'mcp.configAssistant.suggestedValues': 'Valores sugeridos:', - 'mcp.configAssistant.valueHidden': '(valor oculto)', - 'mcp.configAssistant.applySuggested': 'Aplicar valores sugeridos', - 'mcp.configAssistant.reinstallHint': 'Vuelva a instalar con estos valores para aplicarlos.', - 'mcp.configAssistant.thinking': 'Pensando...', - 'mcp.configAssistant.inputPlaceholder': 'Ask a question (Enter to send, Shift+Enter for newline)', - 'mcp.configAssistant.send': 'enviar', - 'mcp.configAssistant.failedResponse': 'No se pudo obtener respuesta', - 'mcp.toolList.availableSingular': '{count} herramienta disponible', - 'mcp.toolList.availablePlural': '{count} herramientas disponibles', - 'mcp.toolList.tryTool': 'Try', - 'mcp.toolList.tryToolAria': 'Open execution playground for {name}', - 'mcp.playground.title': 'Run {name}', - 'mcp.playground.close': 'Close playground', - 'mcp.playground.inputSchema': 'Input schema', - 'mcp.playground.argsLabel': 'Arguments (JSON)', - 'mcp.playground.argsHelp': 'Type JSON matching the input schema. Empty input is treated as {}.', - 'mcp.playground.runShortcut': '⌘/Ctrl + Enter to run', - 'mcp.playground.format': 'Format', - 'mcp.playground.invalidJson': 'Invalid JSON', - 'mcp.playground.run': 'Run tool', - 'mcp.playground.running': 'Running…', - 'mcp.playground.result': 'Result', - 'mcp.playground.resultError': 'Tool returned an error', - 'mcp.playground.copyResult': 'Copy result', - 'mcp.playground.copied': 'Copied', - 'mcp.playground.history': 'History', - 'mcp.playground.historyEmpty': 'No invocations yet in this session.', - 'mcp.playground.historyLoad': 'Load', - 'mcp.playground.unexpectedError': 'Unexpected error invoking tool.', - 'mcp.catalog.deployed': 'Implementado', - 'mcp.catalog.installCount': '{count} instala', - 'app.update.dismissNotification': 'Descartar notificación de actualización', - 'bootCheck.rpcAuthSuffix': 'en cada RPC.', - 'mcp.installed.title': 'Instalado', - 'mcp.installed.browseCatalog': 'Explorar catálogo', - 'mcp.installed.empty': 'Aún no hay servidores MCP instalados.', - 'mcp.installed.toolSingular': 'herramienta {count}', - 'mcp.installed.toolPlural': '{count} herramientas', - 'mcp.health.title': 'Health', - 'mcp.health.summaryAria': 'MCP connection health summary', - 'mcp.health.connectedCount': '{count} connected', - 'mcp.health.connectingCount': '{count} connecting', - 'mcp.health.errorCount': '{count} error', - 'mcp.health.disconnectedCount': '{count} idle', - 'mcp.health.retryAll': 'Retry all ({count})', - 'mcp.health.retryAllAria': 'Retry all {count} errored MCP servers', - 'mcp.health.disconnectAll': 'Disconnect all ({count})', - 'mcp.health.disconnectAllAria': 'Disconnect all {count} connected MCP servers', - 'mcp.health.disconnectConfirm.title': 'Disconnect all MCP servers?', - 'mcp.health.disconnectConfirm.body': - 'This will disconnect {count} currently-connected MCP servers. Installed configurations and secrets are kept; you can reconnect any server later.', - 'mcp.health.disconnectConfirm.cancel': 'Cancel', - 'mcp.health.disconnectConfirm.confirm': 'Disconnect all', - 'mcp.health.opErrorGeneric': 'Bulk operation failed. See logs.', - 'mcp.health.bulkPartialFailure': '{failed} of {total} servers failed. See logs.', - 'mcp.installed.search.landmarkAria': 'Search installed MCP servers', - 'mcp.installed.search.inputAria': 'Filter installed MCP servers by name', - 'mcp.installed.search.placeholder': 'Filter servers…', - 'mcp.installed.search.clearAria': 'Clear filter', - 'mcp.installed.search.countMatches': '{shown} of {total} servers', - 'mcp.installed.search.noMatches': 'No servers match "{query}".', - 'mcp.inventory.openButton': 'Inventory', - 'mcp.inventory.openAria': 'Open the sharable MCP inventory panel', - 'mcp.inventory.title': 'Sharable MCP Inventory', - 'mcp.inventory.subtitle': - 'Export your installed MCP servers as a portable, secret-free manifest, or import one from a teammate. Secret env values are never included or imported.', - 'mcp.inventory.close': 'Close inventory panel', - 'mcp.inventory.tablistAria': 'Inventory sections', - 'mcp.inventory.tab.export': 'Export', - 'mcp.inventory.tab.import': 'Import', - 'mcp.inventory.export.empty': - 'No MCP servers installed yet — nothing to export. Install one from the catalog first.', - 'mcp.inventory.export.privacyTitle': 'What is in this manifest', - 'mcp.inventory.export.privacyBody': - 'Server names, qualified names, env-variable KEY NAMES, and non-secret config only. Secret values, your machine identifiers, and per-install timestamps are intentionally stripped.', - 'mcp.inventory.export.serverCount': '{count} servers in this manifest', - 'mcp.inventory.export.copy': 'Copy', - 'mcp.inventory.export.copied': 'Copied', - 'mcp.inventory.export.copyAria': 'Copy the manifest JSON to the clipboard', - 'mcp.inventory.export.download': 'Download', - 'mcp.inventory.export.downloadAria': 'Download the manifest as a JSON file', - 'mcp.inventory.import.trustTitle': 'Treat imported manifests as untrusted code', - 'mcp.inventory.import.trustBody': - 'An MCP server is a tool you grant your agent. Only import manifests from sources you trust. Each install requires your explicit click; nothing is auto-installed.', - 'mcp.inventory.import.pasteLabel': 'Paste manifest JSON', - 'mcp.inventory.import.pastePlaceholder': 'Paste a manifest here, or upload a .json file below.', - 'mcp.inventory.import.preview': 'Preview', - 'mcp.inventory.import.clear': 'Clear', - 'mcp.inventory.import.uploadFile': 'or upload a .json file', - 'mcp.inventory.import.uploadFileAria': 'Upload a manifest .json file', - 'mcp.inventory.import.fileTooLarge': 'File is too large (over 1 MB). Refusing to load.', - 'mcp.inventory.import.fileReadFailed': 'Could not read file.', - 'mcp.inventory.import.parseErrorPrefix': 'Could not parse manifest:', - 'mcp.inventory.import.previewHeading': 'Preview', - 'mcp.inventory.import.previewCounts': - '{total} servers — {newly} new, {already} already installed', - 'mcp.inventory.import.previewEmpty': 'Manifest contains no servers.', - 'mcp.inventory.import.exportedFrom': 'Exported from {exporter}', - 'mcp.inventory.import.exportedAt': 'at {when}', - 'mcp.inventory.import.statusNew': 'New', - 'mcp.inventory.import.statusAlreadyInstalled': 'Already installed', - 'mcp.inventory.import.envKeysLabel': 'Env keys', - 'mcp.inventory.import.install': 'Install', - 'mcp.inventory.import.installAria': 'Install {name} from this manifest', - 'mcp.inventory.import.skipped': 'skipped', - 'mcp.inventory.parseError.empty': 'Manifest is empty.', - 'mcp.inventory.parseError.invalidJson': 'Invalid JSON.', - 'mcp.inventory.parseError.rootNotObject': 'Manifest must be a JSON object at the root.', - 'mcp.inventory.parseError.unsupportedSchema': - 'Unsupported manifest schema — this file was not produced by a compatible exporter.', - 'mcp.inventory.parseError.missingExportedAt': 'Missing or invalid `exported_at` field.', - 'mcp.inventory.parseError.missingExportedBy': 'Missing or invalid `exported_by` field.', - 'mcp.inventory.parseError.invalidServers': 'Missing or invalid `servers` array.', - 'mcp.inventory.parseError.serverNotObject': 'A server entry is not an object.', - 'mcp.inventory.parseError.serverMissingQualifiedName': - 'A server entry is missing its qualified_name.', - 'mcp.inventory.parseError.serverMissingDisplayName': - 'A server entry is missing its display_name.', - 'mcp.inventory.parseError.serverEnvKeysNotArray': - 'A server entry has an env_keys field that is not an array of strings.', - 'mcp.inventory.parseError.serverContainsEnv': - 'A server entry contains an `env` value map. Refusing to import — manifests must only carry env_keys (names), never secret values.', - 'mcp.inventory.parseError.duplicateQualifiedName': - 'Duplicate qualified_name found in manifest. Each server must appear at most once.', - 'mcp.tab.loading': 'Cargando servidores MCP...', - 'mcp.tab.emptyDetail': 'Seleccione un servidor o explore el catálogo.', - 'mcp.install.loadingDetail': 'Cargando detalles del servidor...', - 'mcp.install.back': 'volver', - 'mcp.install.title': 'Instalar {name}', - 'mcp.install.requiredEnv': 'Variables de entorno requeridas', - 'mcp.install.enterValue': 'Ingrese {key}', - 'mcp.install.show': 'Mostrar', - 'mcp.install.hide': 'Ocultar', - 'mcp.install.configLabel': 'Configuración (JSON opcional)', - 'mcp.install.configPlaceholder': '{"key": "value"}', - 'mcp.install.missingRequired': 'Se requiere "{key}"', - 'mcp.install.invalidJson': 'La configuración JSON no es JSON válida', - 'mcp.install.failedDetail': 'No se pudieron cargar los detalles del servidor', - 'mcp.install.failedInstall': 'La instalación falló', - 'mcp.install.button': 'Instalar', - 'mcp.install.installing': 'Instalando...', - 'mcp.detail.suggestedEnvReady': 'Valores ambientales sugeridos listos', - 'mcp.detail.suggestedEnvBody': - 'Re-install this server with the suggested values to apply them: {keys}', - 'mcp.detail.connect': 'Conectar', - 'mcp.detail.connecting': 'Conectando...', - 'mcp.detail.disconnect': 'Desconectar', - 'mcp.detail.hideAssistant': 'Ocultar asistente', - 'mcp.detail.helpConfigure': 'Ayúdame a configurar', - 'mcp.detail.confirmUninstall': '¿Confirmar la desinstalación?', - 'mcp.detail.confirmUninstallAction': 'Sí, desinstalar', - 'mcp.detail.uninstall': 'Desinstalar', - 'mcp.detail.envVars': 'Variables ambientales', - 'mcp.detail.tools': 'Herramientas', - 'onboarding.skipForNow': 'Saltar por ahora', - 'onboarding.localAI.continueWithCloud': 'Continuar con la nube', - 'onboarding.localAI.useLocalAnyway': 'Use local AI anyway (not recommended for your device)', - 'onboarding.localAI.useLocalInstead': 'Utilice IA local en su lugar (conecte Ollama ahora)', - 'onboarding.localAI.setupIssue': 'La configuración local de la IA encontró un problema', - 'notifications.routingTitle': 'Enrutamiento de notificaciones', - 'notifications.routing.pipelineStats': 'Estadísticas de canalización', - 'notifications.routing.total': 'totales', - 'notifications.routing.unread': 'No leído', - 'notifications.routing.unscored': 'Sin puntuación', - 'notifications.routing.intelligenceTitle': 'Inteligencia de notificaciones', - 'notifications.routing.intelligenceDesc': - 'Every notification from your connected accounts is scored by a local AI model. High-importance notifications are automatically routed to your orchestrator agent so nothing critical slips through.', - 'notifications.routing.howItWorks': 'como funciona', - 'notifications.routing.level.drop': 'soltar', - 'notifications.routing.level.dropDesc': 'Ruido/spam: almacenado pero no revelado', - 'notifications.routing.level.acknowledge': 'Reconocer', - 'notifications.routing.level.acknowledgeDesc': 'Low-priority — shown in notification center', - 'notifications.routing.level.react': 'reaccionar', - 'notifications.routing.level.reactDesc': 'Medium-priority — triggers a focused agent response', - 'notifications.routing.level.escalate': 'escalar', - 'notifications.routing.level.escalateDesc': 'Prioridad alta: reenviado al agente orquestador', - 'notifications.routing.perProvider': 'Enrutamiento por proveedor', - 'notifications.routing.threshold': 'umbral', - 'notifications.routing.routeToOrchestrator': 'Ruta al orquestador', - 'notifications.routing.loadSettingsError': 'Failed to load settings. Reopen this panel to retry.', - 'settings.billing.inferenceBudget.title': 'Inference Budget', - 'settings.billing.inferenceBudget.noRecurringPlanBudget': 'Sin presupuesto de plan recurrente', - 'settings.billing.inferenceBudget.noRecurringWeeklyDesc': - 'Your current plan does not include a recurring weekly inference budget. Usage is paid from available credits instead.', - 'settings.billing.inferenceBudget.remainingSummary': '{remaining} / {budget} restante', - 'settings.billing.inferenceBudget.spentThisCycle': 'Pasé {amount} este ciclo', - 'settings.billing.inferenceBudget.cycleEndsOn': 'El ciclo termina {date}', - 'settings.billing.inferenceBudget.exhaustedDesc': - 'Included subscription usage is exhausted. Top up credits to keep using AI without waiting for the next cycle.', - 'settings.billing.inferenceBudget.discountVsPayg': '{pct}% cheaper per call than pay-as-you-go.', - 'settings.billing.inferenceBudget.cycleSpend': 'Gasto en ciclo', - 'settings.billing.inferenceBudget.totalAmount': '{amount} total', - 'settings.billing.inferenceBudget.inference': 'Inferencia', - 'settings.billing.inferenceBudget.integrations': 'Integraciones', - 'settings.billing.inferenceBudget.calls': '{count} llamadas', - 'settings.billing.inferenceBudget.dailySpend': 'Gasto diario', - 'settings.billing.inferenceBudget.dailySpendPoint': '{date}: {amount}', - 'settings.billing.inferenceBudget.topModels': 'Mejores modelos', - 'settings.billing.inferenceBudget.noInferenceUsage': 'No se utilizan inferencias en este ciclo.', - 'settings.billing.inferenceBudget.topIntegrations': 'Principales integraciones', - 'settings.billing.inferenceBudget.noIntegrationUsage': 'No hay uso de integración en este ciclo.', - 'settings.billing.inferenceBudget.unableToLoad': 'No se pueden cargar datos de uso', - 'settings.billing.inferenceBudget.notAvailable': 'n/a', - 'memory.sourceFilterAria': 'Filtrar por fuente', - 'calls.comingSoonDescription': 'AI-assisted calls are coming soon. Stay tuned.', - 'vault.title': 'Bóvedas de conocimiento', - 'vault.description': 'Point at a local folder; files are chunked and mirrored into memory.', - 'vault.add': 'Agregar bóveda', - 'vault.added': 'Bóveda agregada', - 'vault.createdMessage': 'Creado "{name}". Haga clic en {sync} para ingerir.', - 'vault.couldNotAdd': 'No se pudo agregar la bóveda', - 'vault.syncFailed': 'Error de sincronización', - 'vault.syncFailedFor': 'Error de sincronización para "{name}"', - 'vault.syncFailedFiles': 'Archivo(s) {count} fallidos', - 'vault.syncedTitle': 'Sincronizado "{name}"', - 'vault.syncSummary': 'Ingerido {ingested}, sin cambios {unchanged}, eliminado {removed}', - 'vault.syncSummaryFailed': ', falló {count}', - 'vault.syncSummarySkipped': ', omitido {count}', - 'vault.syncSummaryDuration': ' · {seconds}s', - 'vault.confirmRemovePurge': - 'Remove vault "{name}"?\n\nClick OK to also purge its memory (delete all {count} ingested document(s)).\nClick Cancel to keep the documents in memory.', - 'vault.confirmRemove': '¿Realmente eliminar la bóveda "{name}"?', - 'vault.removed': 'Bóveda eliminada', - 'vault.removedPurgedMessage': 'Se eliminó "{name}" y se borró la memoria.', - 'vault.removedKeptMessage': 'Se eliminó "{name}". Documentos guardados en la memoria.', - 'vault.couldNotRemove': 'No se pudo eliminar la bóveda', - 'vault.name': 'Nombre', - 'vault.namePlaceholder': 'mis notas de investigacion', - 'vault.folderPath': 'Ruta de la carpeta (absoluta)', - 'vault.folderPathPlaceholder': '/Usuarios/usted/Documentos/notas', - 'vault.excludes': 'Excluye (subcadenas separadas por comas, opcional)', - 'vault.excludesPlaceholder': 'borradores/, .secreto', - 'vault.creating': 'Creando…', - 'vault.create': 'Crear bóveda', - 'vault.loading': 'Cargando bóvedas…', - 'vault.failedToLoad': 'No se pudieron cargar las bóvedas: {error}', - 'vault.empty': 'Aún no hay bóvedas. Agregue uno arriba para comenzar a ingerir una carpeta.', - 'vault.fileCount': '{count} archivo(s)', - 'vault.syncedRelative': 'sincronizado {time}', - 'vault.neverSynced': 'nunca sincronizado', - 'vault.syncingProgress': 'Sincronizando... {ingested}/{total}', - 'vault.removing': 'Eliminando…', - 'vault.relative.sec': 'Hace {count}s', - 'vault.relative.min': 'Hace {count}m', - 'vault.relative.hr': 'Hace {count}h', - 'vault.relative.day': 'Hace {count}d', - 'whatsapp.title': 'WhatsApp', - 'subconscious.interval.fiveMinutes': '5 minutos', - 'subconscious.interval.tenMinutes': '10 minutos', - 'subconscious.interval.fifteenMinutes': '15 minutos', - 'subconscious.interval.thirtyMinutes': '30 minutos', - 'subconscious.interval.oneHour': '1 hora', - 'subconscious.interval.sixHours': '6 horas', - 'subconscious.interval.twelveHours': '12 horas', - 'subconscious.interval.oneDay': '1 dia', - 'subconscious.priority.critical': 'crítico', - 'subconscious.priority.important': 'importante', - 'subconscious.priority.normal': 'normales', - 'subconscious.durationSeconds': '{seconds}s', - 'subconscious.durationMilliseconds': '{milliseconds}ms', - 'settings.search.allowedSitesLabel': 'Allowed websites', - 'settings.search.allowedSitesHint': - 'Websites the assistant may open and read while researching (one host per line, e.g. reuters.com). A host also covers its subdomains. Leave empty to block all web access.', - 'settings.search.allowedSitesAllOn': - 'The assistant can open any public website. Local and private addresses stay blocked.', - 'settings.search.allowedSitesPlaceholder': 'reuters.com\napnews.com\ngithub.com', - 'settings.search.allowedSitesSave': 'Save websites', - 'settings.search.accessModeAria': 'Web access mode', - 'settings.search.accessAllowAll': 'Allow all', - 'settings.search.accessCustom': 'Custom', - 'settings.search.accessBlockAll': 'Block all', - 'settings.search.accessBlockAllHint': - 'All web access is blocked — the assistant cannot open or read any website.', - 'memory.tab.centrality': 'Centrality', - 'graphCentrality.title': 'Knowledge Graph Centrality', - 'graphCentrality.intro': - 'PageRank over your memory graph surfaces the load-bearing hubs — and the connector entities that link otherwise-separate clusters, which a raw frequency count cannot reveal.', - 'graphCentrality.loading': 'Computing centrality…', - 'graphCentrality.errorPrefix': 'Could not load the graph:', - 'graphCentrality.retry': 'Retry', - 'graphCentrality.empty': 'No knowledge graph yet.', - 'graphCentrality.emptyHint': - 'As the assistant records facts about you, the most connected entities will surface here.', - 'graphCentrality.namespaceLabel': 'Namespace', - 'graphCentrality.namespaceAll': 'All namespaces', - 'graphCentrality.metricEntities': 'Entities', - 'graphCentrality.metricConnections': 'Connections', - 'graphCentrality.metricClusters': 'Clusters', - 'graphCentrality.clustersCaption': '{components} clusters · largest holds {largest}', - 'graphCentrality.approximateBadge': 'approximate', - 'graphCentrality.approximateTitle': 'Stopped at the iteration cap before fully converging', - 'graphCentrality.rankedHeading': 'Top entities by influence', - 'graphCentrality.colRank': '#', - 'graphCentrality.colEntity': 'Entity', - 'graphCentrality.colInfluence': 'Influence', - 'graphCentrality.colLinks': 'Links', - 'graphCentrality.bridgeBadge': 'connector', - 'graphCentrality.bridgeTitle': 'Connector — more influential than its link count suggests', - 'graphCentrality.degreeTitle': '{in} in · {out} out', - 'settings.search.engineDisabledLabel': 'Disabled', - 'settings.search.engineDisabledDesc': - 'Remove search tools from the agent context and available tool list.', -}; - -export default es1; diff --git a/app/src/lib/i18n/chunks/es-2.ts b/app/src/lib/i18n/chunks/es-2.ts deleted file mode 100644 index e386ddf12..000000000 --- a/app/src/lib/i18n/chunks/es-2.ts +++ /dev/null @@ -1,509 +0,0 @@ -import type { TranslationMap } from '../types'; - -// Spanish (Español) chunk 2/5. Translated from chunks/en-2.ts. -const es2: TranslationMap = { - 'settings.ai.configStatus': 'Estado de configuración', - 'settings.ai.fallbackMode': 'Modo de respaldo', - 'settings.ai.loadedFromRuntime': 'Cargado desde el runtime', - 'settings.ai.loadingDuration': 'Duración de carga', - 'settings.ai.localRuntime': 'Runtime de modelo local', - 'settings.ai.openManager': 'Abrir gestor', - 'settings.ai.retryDownload': 'Reintentar descarga', - 'settings.ai.state': 'Estado', - 'settings.ai.targetModel': 'Modelo objetivo', - 'settings.ai.download': 'Descargar', - 'settings.ai.localModelUnavailable': 'Estado del modelo local no disponible.', - 'settings.ai.soulConfig': 'Configuración de persona SOUL', - 'settings.ai.refreshing': 'Actualizando...', - 'settings.ai.refreshSoul': 'Actualizar SOUL', - 'settings.ai.loadingSoul': 'Cargando configuración de SOUL...', - 'settings.ai.identity': 'Identidad', - 'settings.ai.personality': 'Personalidad', - 'settings.ai.safetyRules': 'Reglas de seguridad', - 'settings.ai.source': 'Fuente', - 'settings.ai.loaded': 'Cargado', - 'settings.ai.toolsConfig': 'Configuración de TOOLS', - 'settings.ai.refreshTools': 'Actualizar TOOLS', - 'settings.ai.toolsAvailable': 'Herramientas disponibles', - 'settings.ai.tools': 'herramientas', - 'settings.ai.activeSkills': 'Skills activos', - 'settings.ai.skills': 'habilidades', - 'settings.ai.skillsOverview': 'Resumen de skills', - 'settings.ai.refreshingAll': 'Actualizando todo...', - 'settings.ai.refreshAll': 'Actualizar toda la configuración de IA', - 'settings.notifications.suppressAll': 'Suprimir todas las notificaciones', - 'settings.notifications.suppressAllDesc': - 'Bloquear todas las notificaciones del sistema de las apps integradas, independientemente del estado de foco.', - 'settings.notifications.toggleDnd': 'Activar/desactivar No molestar', - 'settings.notifications.categories': 'Categorías', - 'settings.notifications.categoryFooter': - 'Deshabilitar una categoría impide que aparezcan nuevas notificaciones de ese tipo en el centro de notificaciones. Las notificaciones existentes permanecen hasta que se eliminan.', - 'settings.billing.movedToWeb': 'La facturación se trasladó a la web', - 'settings.billing.openDashboard': 'Abrir panel de facturación', - 'settings.billing.movedToWebDesc': - 'Los cambios de suscripción, métodos de pago, créditos y facturas ahora se gestionan en TinyHumans en la web.', - 'settings.billing.backToSettings': 'Volver a configuración', - 'settings.billing.openingBrowser': 'Abriendo tu navegador...', - 'settings.billing.browserNotOpen': 'Si tu navegador no se abrió, usa el botón de arriba.', - 'settings.billing.browserOpenFailed': - 'No se pudo abrir el navegador automáticamente. Usa el botón de arriba.', - 'settings.tools.chooseCapabilities': 'Elige qué capacidades puede usar OpenHuman en tu nombre.', - 'settings.tools.saveChanges': 'Guardar cambios', - 'settings.tools.preferencesSaved': 'Preferencias guardadas', - 'settings.tools.saveFailed': 'No se pudieron guardar las preferencias. Inténtalo de nuevo.', - 'settings.screenAwareness.mode': 'Modo', - 'settings.screenAwareness.allExceptBlacklist': 'Todo excepto lista negra', - 'settings.screenAwareness.whitelistOnly': 'Solo lista blanca', - 'settings.screenAwareness.screenMonitoring': 'Monitoreo de pantalla', - 'settings.screenAwareness.saveSettings': 'Guardar configuración', - 'settings.screenAwareness.session': 'Sesión', - 'settings.screenAwareness.status': 'Estado', - 'settings.screenAwareness.active': 'Activo', - 'settings.screenAwareness.stopped': 'Detenido', - 'settings.screenAwareness.remaining': 'Restante', - 'settings.screenAwareness.startSession': 'Iniciar sesión', - 'settings.screenAwareness.stopSession': 'Detener sesión', - 'settings.screenAwareness.analyzeNow': 'Analizar ahora', - 'settings.screenAwareness.macosOnly': - 'La captura de pantalla y los controles de permisos de Conciencia de pantalla actualmente solo son compatibles con macOS.', - 'connections.comingSoon': 'Próximamente', - 'connections.setUp': 'Configurar', - 'connections.configured': 'Configurado', - 'connections.unavailable': 'No disponible', - 'connections.checking': 'Verificando…', - 'connections.walletConfigured': - 'Las identidades locales de EVM, BTC, Solana y Tron están configuradas desde tu frase de recuperación.', - 'connections.walletReady': - 'Configura identidades locales de EVM, BTC, Solana y Tron desde una sola frase de recuperación.', - 'connections.walletError': - 'No se pudo verificar el estado de la billetera. Toca para reintentar desde el panel de Frase de recuperación.', - 'connections.walletChecking': 'Verificando estado de la billetera...', - 'connections.walletIdentities': 'Identidades de billetera', - 'connections.walletDerived': - 'Derivadas localmente desde tu frase de recuperación y almacenadas solo como metadatos seguros.', - 'connections.privacySecurity': 'Privacidad y seguridad', - 'connections.privacySecurityDesc': - 'Todos los datos y credenciales se almacenan localmente con política de cero retención de datos. Tu información está cifrada y nunca se comparte con terceros.', - 'channels.status.connecting': 'Conectando', - 'channels.status.notConfigured': 'No configurado', - 'channels.noActiveRoute': 'Sin ruta activa', - 'channels.activeRoute': 'Ruta activa', - 'channels.loadingDefinitions': 'Cargando definiciones de canales...', - 'channels.channelConnections': 'Conexiones de canales', - 'channels.configureAuthModes': - 'Configura los modos de autenticación para cada canal de mensajería.', - 'channels.configNotAvailable': 'Configuración para', - 'channels.channel': 'canal', - 'devOptions.coreModeNotSet': 'Modo core: no establecido', - 'devOptions.coreModeNotSetDesc': - 'El selector de verificación de arranque aún no se ha confirmado. Usa Cambiar modo en el selector para elegir Local o Cloud.', - 'devOptions.local': 'locales', - 'devOptions.embeddedCoreSidecar': 'Core sidecar integrado', - 'devOptions.sidecarSpawned': 'Iniciado en proceso por el shell de Tauri al arrancar la app.', - 'devOptions.cloud': 'Nube', - 'devOptions.remoteCoreRpc': 'RPC de core remoto', - 'devOptions.token': 'ficha', - 'devOptions.tokenNotSet': 'no establecido — RPC devolverá 401', - 'devOptions.triggerSentryTest': 'Activar prueba de Sentry (staging)', - 'devOptions.triggerSentryTestDesc': - 'Dispara un error etiquetado para verificar el pipeline de Sentry. Issue #1072 — eliminar después de la verificación.', - 'devOptions.sendTestEvent': 'Enviar evento de prueba', - 'devOptions.sending': 'Enviando…', - 'devOptions.eventSent': 'Evento enviado', - 'devOptions.failed': 'Fallido', - 'devOptions.appLogs': 'Registros de la app', - 'devOptions.appLogsDesc': - 'Abre la carpeta que contiene los archivos de registro diarios. Adjunta el archivo más reciente al reportar un problema.', - 'devOptions.openLogsFolder': 'Abrir carpeta de registros', - 'mnemonic.phraseSaved': 'Frase de recuperación guardada', - 'mnemonic.walletReady': - 'Las identidades de billetera multicadena están listas. Volviendo a configuración...', - 'mnemonic.writeDownWords': 'Anota estas', - 'mnemonic.wordsInOrder': - 'palabras en orden y guárdalas en un lugar seguro. Esta frase protege tu clave de cifrado local y tus identidades de billetera EVM, BTC, Solana y Tron.', - 'mnemonic.cannotRecover': - 'Esta frase no puede recuperarse si se pierde y debe permanecer completamente local en tu dispositivo.', - 'mnemonic.copyToClipboard': 'Copiar al portapapeles', - 'mnemonic.alreadyHavePhrase': 'Ya tengo una frase de recuperación', - 'mnemonic.consentSaved': - 'Guardé esta frase y consiento usarla para la configuración de billetera local', - 'mnemonic.enterPhraseToRestore': - 'Ingresa tu frase de recuperación a continuación para restaurar tus identidades de billetera local, o pega la frase completa en cualquier campo (12 palabras para respaldos nuevos; las frases de 24 palabras de versiones anteriores aún funcionan).', - 'mnemonic.words': 'Palabras', - 'mnemonic.validPhrase': 'Frase de recuperación válida', - 'mnemonic.generateNewPhrase': 'Generar una nueva frase de recuperación', - 'mnemonic.securingData': 'Protegiendo tus datos...', - 'mnemonic.saveRecoveryPhrase': 'Guardar frase de recuperación', - 'mnemonic.userNotLoaded': 'Usuario no cargado. Inicia sesión de nuevo o recarga la página.', - 'mnemonic.invalidPhrase': - 'Frase de recuperación inválida. Revisa las palabras e inténtalo de nuevo.', - 'mnemonic.somethingWentWrong': 'Algo salió mal. Inténtalo de nuevo.', - 'team.failedToCreate': 'No se pudo crear el equipo', - 'team.invalidInviteCode': 'Código de invitación inválido o expirado', - 'team.failedToSwitch': 'No se pudo cambiar de equipo', - 'team.failedToLeave': 'No se pudo salir del equipo', - 'team.role.owner': 'Propietario', - 'team.role.admin': 'Administrador', - 'team.role.billingManager': 'Gestor de facturación', - 'team.role.member': 'Miembro', - 'team.active': 'Activo', - 'team.personalTeam': 'Equipo personal', - 'team.manageTeam': 'Administrar equipo', - 'team.switching': 'Cambiando...', - 'team.switch': 'Cambiar', - 'team.leaving': 'Saliendo...', - 'team.leave': 'Salir', - 'team.yourTeams': 'Tus equipos', - 'team.createNewTeam': 'Crear nuevo equipo', - 'team.teamName': 'Nombre del equipo', - 'team.creating': 'Creando...', - 'team.joinExistingTeam': 'Unirse a un equipo existente', - 'team.inviteCode': 'Código de invitación', - 'team.joining': 'Uniéndose...', - 'team.join': 'Unirse', - 'team.leaveTeam': 'Salir del equipo', - 'team.confirmLeave': '¿Seguro que quieres salir de', - 'team.leaveWarning': - 'Perderás el acceso al equipo y todos sus recursos. Necesitarás una nueva invitación para volver a unirte.', - 'team.management': 'Gestión de equipo', - 'team.notFound': 'Equipo no encontrado', - 'team.accessDenied': 'Acceso denegado', - 'team.members': 'Miembros', - 'voice.title': 'Dictado de voz', - 'voice.settings': 'Configuración de voz', - 'voice.settingsDesc': - 'Mantén presionada la tecla de acceso rápido para dictar e insertar texto en el campo activo.', - 'voice.hotkey': 'Tecla de acceso rápido', - 'voice.activationMode': 'Modo de activación', - 'voice.tapToToggle': 'Toca para alternar', - 'voice.writingStyle': 'Estilo de escritura', - 'voice.verbatimTranscription': 'Transcripción literal', - 'voice.naturalCleanup': 'Limpieza natural', - 'voice.autoStart': 'Iniciar servidor de voz automáticamente con el core', - 'voice.customDictionary': 'Diccionario personalizado', - 'voice.customDictionaryDesc': - 'Agrega nombres, términos técnicos y palabras de dominio para mejorar la precisión del reconocimiento.', - 'voice.addWord': 'Agregar una palabra...', - 'voice.sttDisabled': - 'El dictado de voz está desactivado hasta que el modelo STT local se descargue y esté listo.', - 'voice.openLocalAiModel': 'Abrir modelo de IA local', - 'voice.serverRestarted': 'Servidor de voz reiniciado con la nueva configuración.', - 'voice.settingsSaved': 'Configuración de voz guardada.', - 'voice.serverStarted': 'Servidor de voz iniciado.', - 'voice.serverStopped': 'Servidor de voz detenido.', - 'voice.saveVoiceSettings': 'Guardar configuración de voz', - 'voice.startVoiceServer': 'Iniciar servidor de voz', - 'voice.stopVoiceServer': 'Detener servidor de voz', - 'voice.debugTitle': 'Depuración de voz', - 'autocomplete.title': 'Autocompletado', - 'autocomplete.settings': 'Configuración', - 'autocomplete.acceptWithTab': 'Aceptar con Tab', - 'autocomplete.stylePreset': 'Estilo predeterminado', - 'autocomplete.style.balanced': 'Equilibrado', - 'autocomplete.style.concise': 'Conciso', - 'autocomplete.style.formal': 'formales', - 'autocomplete.style.casual': 'Informal', - 'autocomplete.style.custom': 'Personalizado', - 'autocomplete.disabledApps': 'Apps desactivadas (un bundle/token de app por línea)', - 'autocomplete.saveSettings': 'Guardar configuración', - 'autocomplete.saving': 'Guardando…', - 'autocomplete.runtime': 'Tiempo de ejecución', - 'autocomplete.running': 'Ejecutándose', - 'autocomplete.start': 'Iniciar', - 'autocomplete.stop': 'Detener', - 'autocomplete.settingsSaved': 'Configuración de autocompletado guardada.', - 'autocomplete.started': 'Autocompletado iniciado.', - 'autocomplete.didNotStart': 'El autocompletado no inició. Verifica si está habilitado.', - 'autocomplete.stopped': 'Autocompletado detenido.', - 'autocomplete.advancedSettings': 'Configuración avanzada', - 'autocomplete.debugTitle': 'Depuración de autocompletado', - 'chat.agentChat': 'Chat con agente', - 'chat.overrides': 'Anulaciones', - 'chat.model': 'Modelo', - 'chat.temperature': 'Temperatura', - 'chat.conversation': 'Conversación', - 'chat.startAgentConversation': 'Inicia una conversación con el agente.', - 'chat.you': 'Tú', - 'chat.agent': 'Agente', - 'chat.askAgent': 'Pregúntale lo que quieras al agente...', - 'chat.sendMessage': 'Enviar mensaje', - 'composio.triageTitle': 'Disparadores de integración', - 'composio.triageDesc': - 'Cuando está activo, cada disparador de Composio entrante pasa por un paso de clasificación con IA que clasifica el evento y puede iniciar acciones automatizadas — un turno de LLM local por disparador. Desactívalo globalmente o por integración si prefieres revisión manual. Si la variable de entorno', - 'composio.disableAllTriage': 'Desactivar clasificación de IA para todos los disparadores', - 'composio.triggersStillRecorded': - 'Los disparadores siguen registrándose en el historial — no se ejecuta ningún turno de LLM.', - 'composio.disableSpecificIntegrations': - 'Desactivar clasificación de IA para integraciones específicas', - 'composio.settingsSaved': 'Ajustes guardados', - 'composio.saveFailed': 'No se pudo guardar. Inténtalo de nuevo.', - 'cron.title': 'Tareas cron', - 'cron.scheduledJobs': 'Trabajos programados', - 'cron.manageCronJobs': 'Gestiona las tareas cron desde el programador del core.', - 'cron.refreshCronJobs': 'Actualizar tareas cron', - 'localModel.modelStatus': 'Estado del modelo', - 'localModel.downloadModels': 'Descargar modelos', - 'localModel.usage': 'Uso', - 'localModel.usageDesc': - 'Elige qué subsistemas corren en el modelo local. Todo lo que esté desactivado usa la nube.', - 'localModel.enableRuntime': 'Activar runtime de IA local', - 'localModel.enableRuntimeDesc': - 'Interruptor principal. Desactivado por defecto — Ollama permanece inactivo. Cuando está activado, el resumidor de árbol, la inteligencia de pantalla y el autocompletado siempre usan el modelo local.', - 'localModel.advancedSettings': 'Configuración avanzada', - 'localModel.debugTitle': 'Depuración de modelo local', - 'localModel.ollamaServer.helperText': 'Ejemplo: http://192.168.1.5:11434', - 'localModel.ollamaServer.label': 'URL del servidor Ollama', - 'localModel.ollamaServer.modelCount': 'modelos', - 'localModel.ollamaServer.placeholder': 'http://localhost:11434', - 'localModel.ollamaServer.reachable': 'Accesible', - 'localModel.ollamaServer.resetButton': 'Restablecer al valor predeterminado', - 'localModel.ollamaServer.saveButton': 'Guardar', - 'localModel.ollamaServer.testButton': 'Probar conexión', - 'localModel.ollamaServer.unreachable': 'No accesible', - 'localModel.ollamaServer.validationError': 'Debe ser una URL http:// o https:// válida', - 'screenAwareness.debugTitle': 'Depuración de Conciencia de pantalla', - 'memory.debugTitle': 'Depuración de memoria', - 'webhooks.debugTitle': 'Depuración de webhooks', - 'notifications.routingTitle': 'Enrutamiento de notificaciones', - 'common.reload': 'Recargar', - 'common.skip': 'Omitir', - 'common.disable': 'Desactivar', - 'common.enable': 'Activar', - 'chat.safetyTimeout': - 'Sin respuesta del agente después de 2 minutos. Intenta de nuevo o verifica tu conexión.', - 'chat.filter.all': 'Todos', - 'chat.filter.work': 'Trabajo', - 'chat.filter.briefing': 'Resumen', - 'chat.filter.notification': 'Notificación', - 'chat.filter.workers': 'Trabajadores', - 'chat.selectThread': 'Selecciona un hilo', - 'chat.threads': 'Hilos', - 'chat.noThreads': 'Sin hilos aún', - 'chat.noLabelThreads': 'Sin hilos "{label}"', - 'chat.noWorkerThreads': 'Sin hilos de worker aún', - 'chat.deleteThread': 'Eliminar hilo', - 'chat.deleteThreadConfirm': '¿Seguro que quieres eliminar "{title}"?', - 'chat.untitledThread': 'Hilo sin título', - 'chat.editThreadTitle': 'Edit thread title', - 'chat.hideSidebar': 'Ocultar barra lateral', - 'chat.showSidebar': 'Mostrar barra lateral', - 'chat.newThreadShortcut': 'Nuevo hilo (/new)', - 'chat.new': 'Nuevo', - 'chat.failedToLoadMessages': 'No se pudieron cargar los mensajes', - 'chat.thinkingIteration': 'Pensando... ({n})', - 'chat.thinkingDots': 'Pensando...', - 'chat.approachingLimit': 'Acercándote al límite de uso', - 'chat.approachingLimitMsg': 'Has usado el {pct}% de tu cuota disponible.', - 'chat.upgrade': 'Mejorar plan', - 'chat.weeklyLimitHit': 'Alcanzaste tu límite semanal.', - 'chat.resets': 'Se restablece', - 'chat.topUpToContinue': 'Recarga para continuar.', - 'chat.budgetComplete': - 'Tu presupuesto incluido se agotó. Agrega créditos o mejora tu plan para continuar.', - 'chat.topUp': 'Recargar', - 'chat.cycle': 'Ciclo', - 'chat.cycleSpent': 'Gastado este ciclo', - 'chat.cycleRemaining': 'Restante', - 'chat.left': 'restante', - 'chat.setup': 'Configurar', - 'chat.switchToText': 'Cambiar a texto', - 'chat.transcribing': 'Transcribiendo...', - 'chat.stopAndSend': 'Detener y enviar', - 'chat.startTalking': 'Empieza a hablar', - 'chat.playingVoiceReply': 'Reproduciendo respuesta de voz', - 'chat.voiceHint': 'Usa el micrófono para hablar', - 'chat.micUnavailable': 'Micrófono no disponible', - 'chat.turn': 'turno', - 'chat.turns': 'turnos', - 'chat.openWorkerThread': 'Abrir hilo de worker', - 'chat.attachment.attach': 'Adjuntar imagen', - 'chat.attachment.remove': 'Eliminar {name}', - 'chat.attachment.tooMany': 'Máximo {max} imágenes por mensaje', - 'chat.attachment.tooLarge': 'La imagen supera el límite de tamaño de {max}', - 'chat.attachment.unsupportedType': - 'Tipo de archivo no compatible. Use PNG, JPEG, WebP, GIF o BMP.', - 'chat.attachment.readFailed': 'No se pudo leer el archivo', - 'memory.searchAria': 'Buscar en memoria', - 'memory.searchPlaceholder': 'Buscar entradas de memoria...', - 'memory.sourceFilter.all': 'Todas las fuentes', - 'memory.sourceFilter.email': 'Correo', - 'memory.sourceFilter.calendar': 'Calendario', - 'memory.sourceFilter.telegram': 'Telegram', - 'memory.sourceFilter.aiInsight': 'Insight de IA', - 'memory.sourceFilter.system': 'Sistema', - 'memory.sourceFilter.trading': 'Comercio', - 'memory.sourceFilter.security': 'Seguridad', - 'memory.ingestionActivity': 'Actividad de ingesta', - 'memory.events': 'eventos', - 'memory.event': 'evento', - 'memory.overTheLast': 'en los últimos', - 'memory.months': 'meses', - 'memory.peak': 'Pico', - 'memory.perDay': '/día', - 'memory.less': 'Menos', - 'memory.more': 'Más', - 'memory.on': 'el', - 'memory.loading': 'Cargando memoria', - 'memory.fetching': 'Obteniendo tus entradas de memoria...', - 'memory.analyzing': 'Analizando memoria', - 'memory.analyzingHint': 'Procesando tus recuerdos para extraer insights...', - 'memory.noMatches': 'Sin resultados', - 'memory.noMatchesHint': 'Prueba cambiar los términos de búsqueda o los filtros.', - 'memory.allCaughtUp': 'Todo al día', - 'memory.allCaughtUpHint': 'No hay nuevas entradas de memoria para procesar.', - 'memory.noAnalysis': 'Sin análisis aún', - 'memory.noAnalysisHint': 'Ejecuta un análisis para descubrir patrones en tus recuerdos.', - 'memory.emptyHint': 'Empieza a interactuar para crear tus primeros recuerdos.', - 'mic.unavailable': 'Micrófono no disponible', - 'mic.permissionDenied': 'Permiso de micrófono denegado', - 'mic.failedToStartRecorder': 'No se pudo iniciar la grabadora', - 'mic.transcribing': 'Transcribiendo...', - 'mic.tapToSend': 'Toca para enviar', - 'mic.waitingForAgent': 'Esperando al agente...', - 'mic.tapAndSpeak': 'Toca y habla', - 'mic.stopRecording': 'Detener grabación y enviar', - 'mic.startRecording': 'Iniciar grabación', - 'token.usageLimitReached': 'Límite de uso alcanzado', - 'token.approachingLimit': 'Acercándote al límite', - 'token.planClickForDetails': 'plan - toca para ver detalles', - 'token.sessionTokens': 'Ent: {in} | Sal: {out} | Turnos: {turns}', - 'token.limit': 'Límite alcanzado', - 'catalog.noCapabilityBinding': 'Sin vinculación de capacidad', - 'catalog.downloadFailed': 'Descarga fallida', - 'catalog.active': 'Activo', - 'catalog.installed': 'Instalado', - 'catalog.notDownloaded': 'No descargado', - 'catalog.inUse': 'En uso', - 'catalog.use': 'Usar', - 'catalog.deleteModel': 'Eliminar modelo', - 'catalog.download': 'Descargar', - 'navigator.recent': 'Reciente', - 'navigator.today': 'Hoy', - 'navigator.thisWeek': 'Esta semana', - 'navigator.sources': 'Fuentes', - 'navigator.email': 'Correo', - 'navigator.slack': 'Slack', - 'navigator.chat': 'Charla', - 'navigator.documents': 'Documentos', - 'navigator.people': 'Personas', - 'navigator.topics': 'Temas', - 'dreams.description': - 'Los sueños son reflexiones generadas por IA que sintetizan patrones de tus recuerdos.', - 'dreams.comingSoon': 'Próximamente', - 'assignment.memoryLlm': 'LLM de memoria', - 'assignment.memoryLlmAria': 'Selección de LLM de memoria', - 'assignment.embedder': 'Incrustador', - 'assignment.loaded': 'Cargado', - 'assignment.notDownloaded': 'No descargado', - 'assignment.usedForExtractSummarise': 'Usado para extracción y resumen', - 'insights.knownFacts': 'Hechos conocidos', - 'insights.preferences': 'Preferencias', - 'insights.relationships': 'Relaciones', - 'insights.skills': 'Habilidades', - 'insights.opinions': 'Opiniones', - // Developer options menu items (#2225) — English stubs; native translations welcome - 'devOptions.menuAi': 'Configuración de IA', - 'devOptions.menuAiDesc': - 'Proveedores de nube, modelos Ollama locales y enrutamiento por carga de trabajo', - 'devOptions.menuScreenAware': 'Conciencia de pantalla', - 'devOptions.menuScreenAwareDesc': - 'Permisos de captura de pantalla, política de monitoreo y controles de sesión', - 'devOptions.menuMessaging': 'Canales de mensajería', - 'devOptions.menuMessagingDesc': - 'Configurar los modos de autenticación Telegram/Discord y el enrutamiento de canales predeterminado', - 'devOptions.menuTools': 'Herramientas', - 'devOptions.menuToolsDesc': - 'Habilitar o deshabilitar capacidades que OpenHuman puede usar en su nombre', - 'devOptions.menuAgentChat': 'Chat de agente', - 'devOptions.menuAgentChatDesc': - 'Conversación del agente de prueba con anulaciones de modelo y temperatura', - 'devOptions.menuCronJobs': 'Trabajos cronificados', - 'devOptions.menuCronJobsDesc': - 'Ver y configurar trabajos programados para habilidades en tiempo de ejecución', - 'devOptions.menuLocalModelDebug': 'Depuración del modelo local', - 'devOptions.menuLocalModelDebugDesc': - 'Ollama configuración, descargas de activos, pruebas de modelos y diagnósticos', - 'devOptions.menuWebhooksDebug': 'Ganchos web', - 'devOptions.menuWebhooksDebugDesc': - 'Inspeccionar los registros de webhooks en tiempo de ejecución y los registros de solicitudes capturados', - 'devOptions.menuIntelligence': 'Inteligencia', - 'devOptions.menuIntelligenceDesc': - 'Espacio de trabajo de la memoria, motor subconsciente, sueños y escenarios.', - 'devOptions.menuNotificationRouting': 'Enrutamiento de notificaciones', - 'devOptions.menuNotificationRoutingDesc': - 'Puntuación de importancia de la IA y escalamiento del orquestador para alertas de integración', - 'devOptions.menuComposeIOTriggers': 'Activadores de ComposeIO', - 'devOptions.menuComposeIOTriggersDesc': - 'Ver el historial y el archivo de activadores de ComposeIO', - 'devOptions.menuComposioRouting': 'Composio Enrutamiento (modo directo)', - 'devOptions.menuComposioRoutingDesc': - 'Traiga su propia clave Composio API y enrute las llamadas directamente a backend.composio.dev', - 'devOptions.menuComposioTriggers': 'Desencadenantes de integración', - 'devOptions.menuComposioTriggersDesc': - 'Configurar los ajustes de clasificación de IA para los activadores de integración Composio', - 'mic.deviceSelector': 'Dispositivo de micrófono', - 'mic.tapToSendCountdown': 'Toca para enviar ({seconds}s)', - 'settings.agents.title': 'Agents', - 'settings.agents.subtitle': - 'Manage the agents available for delegation — built-in defaults and your own custom agents.', - 'settings.agents.menuDesc': 'Manage built-in and custom agents', - 'settings.agents.newAgent': 'New agent', - 'settings.agents.loadError': "Couldn't load agents", - 'settings.agents.empty': 'No agents yet', - 'settings.agents.sourceDefault': 'Built-in', - 'settings.agents.sourceCustom': 'Custom', - 'settings.agents.enable': 'Enable agent', - 'settings.agents.disable': 'Disable agent', - 'settings.agents.edit': 'Edit', - 'settings.agents.delete': 'Delete', - 'settings.agents.reset': 'Reset to default', - 'settings.agents.modelLabel': 'Model', - 'settings.agents.toolsLabel': 'Tools', - 'settings.agents.toolsAll': 'All tools', - 'settings.agents.toolsCount': '{count} tools', - 'settings.agents.actionFailed': "Couldn't update the agent", - 'settings.agents.orchestratorLocked': 'The orchestrator is always enabled.', - 'settings.agents.editor.createTitle': 'New agent', - 'settings.agents.editor.editTitle': 'Edit agent', - 'settings.agents.editor.id': 'ID', - 'settings.agents.editor.idHint': 'Lowercase letters, numbers, _ and - only.', - 'settings.agents.editor.name': 'Name', - 'settings.agents.editor.description': 'Description', - 'settings.agents.editor.model': 'Model (optional)', - 'settings.agents.editor.modelPlaceholder': 'e.g. inherit, hint:fast, or a model id', - 'settings.agents.editor.systemPrompt': 'System prompt (optional)', - 'settings.agents.editor.tools': 'Allowed tools', - 'settings.agents.editor.toolsHint': 'One tool name per line. Use * for all tools.', - 'settings.agents.editor.defaultsNote': - 'Editing a built-in agent saves an override you can reset later.', - 'settings.agents.editor.save': 'Save', - 'settings.agents.editor.create': 'Create agent', - 'settings.agents.editor.saving': 'Saving…', - 'settings.agentsSection.title': 'Agents', - 'settings.agentsSection.description': - 'Manage your agents, their autonomy, and what they can access on this computer.', - 'settings.agentsSection.menuDesc': 'Registry, autonomy & OS access', - 'settings.agents.editor.notFound': 'Agent not found.', - 'settings.agents.editor.modelInherit': 'Inherit (platform default)', - 'settings.agents.editor.modelHints': 'Route hints', - 'settings.agents.editor.modelTiers': 'Model tiers', - 'settings.agents.editor.modelCustom': 'Custom model id…', - 'settings.agents.editor.modelCustomPlaceholder': 'e.g. anthropic/claude-sonnet-4', - 'settings.agents.editor.selectTools': 'Add tools', - 'settings.agents.editor.toolsAllSelected': 'All tools', - 'settings.agents.editor.toolsNoneSelected': 'No tools selected', - 'settings.agents.editor.removeToolAria': 'Remove {tool}', - 'settings.agents.editor.toolsModalTitle': 'Allowed tools', - 'settings.agents.editor.toolsSelectedCount': '{count} selected', - 'settings.agents.editor.toolsSearchPlaceholder': 'Search tools…', - 'settings.agents.editor.toolsAllowAll': 'Allow all tools (*)', - 'settings.agents.editor.toolsAllowAllHint': 'This agent can use every available tool.', - 'settings.agents.editor.toolsLoading': 'Loading tools…', - 'settings.agents.editor.toolsLoadError': 'Couldn’t load tools', - 'settings.agents.editor.toolsEmpty': 'No tools match your search.', - 'settings.agents.editor.toolsDone': 'Done', - 'settings.agents.editor.builtInReadonly': - 'Built-in agents can’t be edited. You can enable, disable, or reset them from the agents list.', -}; - -export default es2; diff --git a/app/src/lib/i18n/chunks/es-3.ts b/app/src/lib/i18n/chunks/es-3.ts deleted file mode 100644 index ca0888cc6..000000000 --- a/app/src/lib/i18n/chunks/es-3.ts +++ /dev/null @@ -1,508 +0,0 @@ -import type { TranslationMap } from '../types'; - -// Spanish (Español) chunk 3/5. Translated from chunks/en-3.ts. -const es3: TranslationMap = { - 'insights.other': 'Otro', - 'insights.title': 'Perspectivas', - 'insights.empty': 'Sin insights aún. Los insights se generan a medida que crece tu memoria.', - 'insights.description': 'Basado en {count} relaciones en tu grafo de memoria.', - 'insights.items': 'elementos', - 'insights.more': 'más', - 'calls.joiningCall': 'Uniéndose a la llamada', - 'calls.meetWindowOpening': 'La ventana de Meet se está abriendo...', - 'calls.failedToStart': 'No se pudo iniciar la llamada de Google Meet', - 'calls.couldNotStart': 'No se pudo iniciar la llamada', - 'calls.failedToClose': 'No se pudo cerrar la llamada', - 'calls.couldNotClose': 'No se pudo cerrar la llamada', - 'calls.joinMeet': 'Unirse a una llamada de Google Meet', - 'calls.joinMeetDescription': 'Ingresa un enlace de Google Meet para unirte.', - 'calls.meetLink': 'Enlace de Meet', - 'calls.displayName': 'Nombre de visualización', - 'calls.openingMeet': 'Abriendo Meet...', - 'calls.joinCall': 'Unirse a la llamada', - 'calls.activeCalls': 'Llamadas activas', - 'calls.leave': 'Salir', - 'workspace.wipeConfirm': - '¿Seguro que quieres borrar toda la memoria? Esta acción no se puede deshacer.', - 'workspace.resetTreeConfirm': '¿Seguro que quieres reconstruir el árbol de memoria?', - 'workspace.wipeTitle': 'Borrar memoria', - 'workspace.resetting': 'Restableciendo...', - 'workspace.resetMemory': 'Restablecer memoria', - 'workspace.resetTreeTitle': 'Reconstruir árbol de memoria', - 'workspace.rebuilding': 'Reconstruyendo...', - 'workspace.resetMemoryTree': 'Restablecer árbol de memoria', - 'workspace.building': 'Construyendo...', - 'workspace.buildSummaryTrees': 'Construir árboles de resumen', - 'workspace.viewVault': 'Ver bóveda', - 'workspace.openingVaultTitle': 'Apertura de bóveda en obsidiana', - 'workspace.openingVaultMessage': - "If Obsidian doesn't open, install it from obsidian.md or use Reveal Folder. Vault path:", - 'workspace.openVaultFailedTitle': "Couldn't open vault in Obsidian", - 'workspace.openVaultFailedMessage': - 'Utilice Revelar carpeta para abrir el directorio del almacén directamente. Ruta de la bóveda:', - 'workspace.revealVaultFailed': "Couldn't reveal vault folder", - 'workspace.revealFolder': 'Revelar carpeta', - 'workspace.checkingVault': 'Checking…', - 'workspace.vaultNotRegisteredHelp': - 'Obsidian only opens folders you\'ve added as a vault. In Obsidian, choose "Open folder as vault" and pick the folder below — you only need to do this once. Then click View Vault again.', - 'workspace.obsidianNotFoundHelp': - "We couldn't find Obsidian on this device. Install it, or — if it's installed somewhere non-standard — set its config folder under Advanced.", - 'workspace.openAnyway': 'Open in Obsidian anyway', - 'workspace.installObsidian': 'Install Obsidian', - 'workspace.obsidianAdvanced': 'Obsidian installed elsewhere?', - 'workspace.obsidianConfigDirLabel': 'Obsidian config folder', - 'workspace.obsidianConfigDirHint': - 'Path to the folder containing obsidian.json (e.g. ~/.config/obsidian). Leave blank to auto-detect.', - 'workspace.obsidianConfigDirPlaceholder': '~/.config/obsidian', - 'workspace.graphLoadFailed': 'No se pudo cargar el grafo de memoria', - 'workspace.loadingGraph': 'Cargando grafo de memoria...', - 'workspace.graphViewMode': 'Modo de vista del grafo de memoria', - 'workspace.trees': 'Árboles', - 'workspace.contacts': 'Contactos', - 'graph.noContactMentions': 'Sin menciones de contacto', - 'graph.noMemory': 'Sin memoria', - 'graph.source': 'Fuente', - 'graph.topic': 'Tema', - 'graph.global': 'Mundial', - 'graph.document': 'Documento', - 'graph.contact': 'Contacto', - 'graph.nodes': 'nodos', - 'graph.parentChild': 'padre-hijo', - 'graph.documentContact': 'documento-contacto', - 'graph.link': 'enlace', - 'graph.links': 'enlaces', - 'graph.children': 'hijos', - 'graph.clickToOpenObsidian': 'Clic para abrir en Obsidian', - 'graph.person': 'Persona', - 'modal.dontShowAgain': 'No mostrar sugerencias similares', - 'reflections.loading': 'Cargando reflexiones...', - 'reflections.empty': 'Sin reflexiones aún', - 'reflections.title': 'Reflexiones', - 'reflections.proposedAction': 'Acción propuesta', - 'reflections.act': 'Actuar', - 'reflections.dismiss': 'Descartar', - 'whatsapp.chatsSynced': 'chats sincronizados', - 'whatsapp.chatSynced': 'chat sincronizado', - 'sync.active': 'Activo', - 'sync.recent': 'Reciente', - 'sync.idle': 'Inactivo', - 'sync.memorySources': 'Fuentes de memoria', - 'sync.noConnectedSources': 'Sin fuentes conectadas', - 'sync.chunks': 'fragmentos', - 'sync.lastChunk': 'Último fragmento:', - 'sync.pending': 'pendiente', - 'sync.processed': 'procesado', - 'sync.syncing': 'Sincronizando…', - 'sync.sync': 'Sincronizar', - 'sync.failedToLoad': 'No se pudo cargar el estado de sincronización', - 'sync.noContent': - 'Aún no se ha sincronizado contenido en la memoria. Conecta una integración para empezar.', - 'memorySources.title': 'Memory Sources', - 'memorySources.empty': 'No memory sources yet. Add one to start feeding memory.', - 'memorySources.loadingConnections': 'Loading connections…', - 'memorySources.noConnections': - 'No active Composio connections found. Connect an integration first.', - 'memorySources.pickConnection': 'Pick a connection', - 'memorySources.selectConnection': '— Select a connection —', - 'memorySources.composioListFailed': 'Failed to load Composio connections.', - 'memorySources.browse': 'Browse…', - 'memorySources.folderPathPlaceholder': '/Users/you/notes', - 'memorySources.globPatternPlaceholder': '**/*.md', - 'memorySources.repoUrlPlaceholder': 'https://github.com/org/repo', - 'memorySources.branchPlaceholder': 'main', - 'memorySources.feedUrlPlaceholder': 'https://example.com/feed.xml', - 'memorySources.pageUrlPlaceholder': 'https://example.com/article', - 'memorySources.cssSelectorPlaceholder': 'article', - 'memorySources.searchQueryPlaceholder': 'from:user AI safety', - 'memorySources.kind.composio': 'Integration', - 'memorySources.kind.folder': 'Local Folder', - 'memorySources.kind.github_repo': 'GitHub Repo', - 'memorySources.kind.twitter_query': 'Twitter Search', - 'memorySources.kind.rss_feed': 'RSS Feed', - 'memorySources.kind.web_page': 'Web Page', - 'memorySources.sync.successTitle': 'Syncing', - 'memorySources.sync.successMessage': 'Progress will appear shortly.', - 'memorySources.sync.failedTitle': 'Sync failed:', - 'time.justNow': 'just now', - 'time.secondsAgoSuffix': 's ago', - 'time.minutesAgoSuffix': 'm ago', - 'time.hoursAgoSuffix': 'h ago', - 'time.daysAgoSuffix': 'd ago', - 'memorySources.customSources': 'Custom Sources', - 'memorySources.addSource': 'Add Source', - 'memorySources.noCustomSources': - 'No custom sources yet. Add a folder, GitHub repo, RSS feed, or web page to start.', - 'memorySources.pickKind': 'What kind of source do you want to add?', - 'memorySources.backToKinds': 'Back to source types', - 'memorySources.label': 'Label', - 'memorySources.labelPlaceholder': 'My research notes', - 'memorySources.add': 'Add', - 'memorySources.adding': 'Adding…', - 'memorySources.added': 'Source added', - 'memorySources.removed': 'Source removed', - 'memorySources.remove': 'Remove', - 'memorySources.enable': 'Enable', - 'memorySources.disable': 'Disable', - 'memorySources.toggleFailed': 'Toggle failed', - 'memorySources.removeFailed': 'Remove failed', - 'memorySources.folderPath': 'Folder path', - 'memorySources.globPattern': 'Glob pattern', - 'memorySources.repoUrl': 'Repository URL', - 'memorySources.branch': 'Branch', - 'memorySources.feedUrl': 'Feed URL', - 'memorySources.pageUrl': 'Page URL', - 'memorySources.cssSelector': 'CSS selector (optional)', - 'memorySources.searchQuery': 'Search query', - 'backend.aiBackend': 'Backend de IA', - 'backend.cloud': 'Nube', - 'backend.recommended': 'Recomendado', - 'backend.cloudDescription': - 'Modelos rápidos y potentes alojados en nuestros servidores. Listos para usar de inmediato.', - 'backend.privacyNote': - 'Nunca enviamos datos personales, mensajes ni claves a nuestros servidores.', - 'backend.local': 'locales', - 'backend.advanced': 'Avanzado', - 'backend.localDescription': - 'Ejecuta modelos en tu propia máquina usando Ollama. Privacidad total, requiere configuración.', - 'backend.ramRecommended': 'Se recomienda 16 GB+ de RAM', - 'subconscious.tasks': 'tareas', - 'subconscious.ticks': 'garrapatas', - 'subconscious.last': 'Último', - 'subconscious.failed': 'fallido', - 'subconscious.tickInterval': 'Intervalo de tick', - 'subconscious.runNow': 'Ejecutar ahora', - 'subconscious.providerUnavailableTitle': 'Subconsciente en pausa', - 'subconscious.providerSettings': 'Ajustes de IA', - 'subconscious.approvalNeeded': 'Se necesita aprobación', - 'subconscious.requiresApproval': 'Requiere aprobación', - 'subconscious.fixInConnections': 'Corregir en Conexiones', - 'subconscious.goAhead': 'Adelante', - 'subconscious.activeTasks': 'Tareas activas', - 'subconscious.noActiveTasks': 'Sin tareas activas', - 'subconscious.default': 'Predeterminado', - 'subconscious.addTaskPlaceholder': 'Agregar una nueva tarea...', - 'subconscious.activityLog': 'Registro de actividad', - 'subconscious.noActivity': 'Sin actividad aún', - 'subconscious.decision.nothingNew': 'Sin novedades', - 'subconscious.decision.completed': 'Completado', - 'subconscious.decision.evaluating': 'Evaluando', - 'subconscious.decision.waitingApproval': 'Esperando aprobación', - 'subconscious.decision.failed': 'Fallido', - 'subconscious.decision.cancelled': 'Cancelado', - 'subconscious.decision.skipped': 'Omitido', - 'actionable.complete': 'Completar', - 'actionable.dismiss': 'Descartar', - 'actionable.snooze': 'Posponer', - 'actionable.new': 'Nuevo', - 'stats.storage': 'Almacenamiento', - 'stats.files': 'archivos', - 'stats.documents': 'Documentos', - 'stats.today': 'hoy', - 'stats.namespaces': 'Espacios de nombres', - 'stats.relations': 'Relaciones', - 'stats.firstMemory': 'Primer recuerdo', - 'stats.latest': 'Más reciente', - 'stats.sessions': 'Sesiones', - 'stats.tokens': 'fichas', - 'bootCheck.invalidUrl': 'Ingresa una URL de runtime.', - 'bootCheck.urlMustStartWith': 'La URL debe comenzar con http:// o https://', - 'bootCheck.validUrlRequired': - 'Eso no parece una URL válida (prueba con https://core.example.com/rpc)', - 'bootCheck.tokenRequired': 'Necesitaremos un token de autenticación para conectarnos.', - 'bootCheck.chooseCoreMode': 'Seleccionar un runtime', - 'bootCheck.connectToCore': 'Conectar a tu runtime', - 'bootCheck.desktopDescription': - 'OpenHuman necesita un runtime para funcionar. Elige dónde debe vivir.', - 'bootCheck.webDescription': - 'En la web, OpenHuman se conecta a un runtime que tú controlas. Ingresa su URL y token de autenticación abajo, o descarga la app de escritorio para ejecutar uno en tu máquina.', - 'bootCheck.preferDesktop': '¿Prefieres tener todo en tu propio dispositivo?', - 'bootCheck.downloadDesktop': 'Obtener la app de escritorio', - 'bootCheck.localRecommended': 'Ejecutar localmente (Recomendado)', - 'bootCheck.localDescription': - 'Corre directamente en tu computadora. El más rápido, completamente privado, sin nada que configurar.', - 'bootCheck.cloudMode': 'Ejecutar en la nube (Complejo)', - 'bootCheck.cloudDescription': - 'Conéctate a un runtime que estás alojando en otro lugar. Permanece en línea 24×7 para que no necesites mantener este dispositivo encendido.', - 'bootCheck.coreRpcUrl': 'URL del runtime', - 'bootCheck.rpcUrlPlaceholder': 'https://core.example.com/rpc', - 'bootCheck.authToken': 'Token de autenticación', - 'bootCheck.bearerTokenPlaceholder': 'El bearer token de tu runtime remoto', - 'bootCheck.storedLocally': 'Solo guardado en este dispositivo. Enviado como ', - 'bootCheck.testing': 'Probando…', - 'bootCheck.testConnection': 'Probar conexión', - 'bootCheck.connectedOk': 'Conectado. Todo listo.', - 'bootCheck.authFailed': 'Ese token no funcionó. Verifícalo e inténtalo de nuevo.', - 'bootCheck.unreachablePrefix': 'No se pudo alcanzar:', - 'bootCheck.checkingCore': 'Activando tu runtime…', - 'bootCheck.cannotReach': 'No se puede alcanzar el runtime', - 'bootCheck.cannotReachDesc': - 'No pudimos conectarnos a tu runtime. ¿Quieres probar con uno diferente?', - 'bootCheck.switchMode': 'Elegir un runtime diferente', - 'bootCheck.quit': 'Salir', - 'bootCheck.legacyDetected': 'Runtime en segundo plano legacy detectado', - 'bootCheck.legacyDescription': - 'Un daemon de OpenHuman instalado por separado ya está corriendo en este dispositivo. Necesitamos eliminarlo antes de que el runtime integrado pueda tomar el control.', - 'bootCheck.removing': 'Eliminando…', - 'bootCheck.removeContinue': 'Eliminar y continuar', - 'bootCheck.localNeedsRestart': 'El runtime local necesita reiniciarse', - 'bootCheck.localNeedsRestartDesc': - 'Tu runtime local tiene una versión diferente a la de esta app. Un reinicio rápido los sincronizará.', - 'bootCheck.restarting': 'Reiniciando…', - 'bootCheck.restartCore': 'Reiniciar runtime', - 'bootCheck.cloudNeedsUpdate': 'El runtime en la nube necesita actualizarse', - 'bootCheck.cloudNeedsUpdateDesc': - 'Tu runtime en la nube tiene una versión diferente a la de esta app. Ejecuta el actualizador para sincronizarlos.', - 'bootCheck.updating': 'Actualizando…', - 'bootCheck.updateCloudCore': 'Actualizar runtime en la nube', - 'bootCheck.versionCheckFailed': 'Verificación de versión del runtime fallida', - 'bootCheck.versionCheckFailedDesc': - 'Tu runtime está activo pero no reporta su versión. Puede estar desactualizado. Reinícialo o actualízalo para continuar.', - 'bootCheck.working': 'Trabajando…', - 'bootCheck.restartUpdateCore': 'Reiniciar / Actualizar runtime', - 'bootCheck.unexpectedError': 'Error inesperado en verificación de arranque', - 'bootCheck.actionFailed': 'Algo salió mal. Inténtalo de nuevo.', - 'bootCheck.portConflictTitle': 'No se pudo iniciar el motor de la aplicación', - 'bootCheck.portConflictBody': - 'Otro proceso está usando el puerto de red que OpenHuman necesita. Intentaremos solucionarlo automáticamente.', - 'bootCheck.portConflictFixButton': 'Corregir automáticamente', - 'bootCheck.portConflictFixing': 'Corrigiendo…', - 'bootCheck.portConflictFixFailed': - 'La corrección automática no funcionó. Reinicia tu equipo e inténtalo de nuevo.', - 'notifications.justNow': 'justo ahora', - 'notifications.minAgo': 'hace {n}m', - 'notifications.hrAgo': 'hace {n}h', - 'notifications.dayAgo': 'hace {n}d', - 'notifications.category.messages': 'Mensajes', - 'notifications.category.agents': 'Agentes', - 'notifications.category.skills': 'Habilidades', - 'notifications.category.system': 'Sistema', - 'notifications.category.meetings': 'Reuniones', - 'notifications.category.reminders': 'Recordatorios', - 'notifications.category.important': 'Importante', - 'about.update.status.checking': 'Verificando...', - 'about.update.status.available': 'v{version} disponible', - 'about.update.status.availableNoVersion': 'Actualización disponible', - 'about.update.status.downloading': 'Descargando...', - 'about.update.status.readyToInstall': 'v{version} lista para instalar', - 'about.update.status.readyToInstallNoVersion': - 'Una nueva versión se descargó y está lista. Reinicia para aplicarla.', - 'about.update.status.installing': 'Instalando...', - 'about.update.status.restarting': 'Reiniciando...', - 'about.update.status.upToDate': 'Estás usando la versión más reciente.', - 'about.update.status.error': 'Error al verificar actualizaciones', - 'about.update.status.default': 'Buscar actualizaciones', - 'welcome.connectionFailed': 'Conexión fallida: {status} {statusText}', - 'welcome.connectionFailedMsg': 'Conexión fallida: {message}', - 'welcome.continueLocally': 'Continuar localmente', - 'welcome.localSessionStarting': 'Iniciando sesión local...', - 'welcome.localSessionDesc': 'Utiliza un perfil local sin conexión y omite TinyHumans OAuth.', - 'chat.agentChatDesc': 'Abre una sesión de chat directo con el agente.', - 'channels.activeRouteValue': '{channel} vía {authMode}', - 'privacy.dataKind.messages': 'Mensajes', - 'privacy.dataKind.agents': 'Agentes', - 'privacy.dataKind.skills': 'Habilidades', - 'privacy.dataKind.system': 'Sistema', - 'privacy.dataKind.meetings': 'Reuniones', - 'privacy.dataKind.reminders': 'Recordatorios', - 'privacy.dataKind.important': 'Importante', - 'onboarding.enableLocalAI': 'Activar IA local', - 'onboarding.skills.status.available': 'Disponible', - 'onboarding.skills.status.connected': 'Conectado', - 'onboarding.skills.status.connecting': 'Conectando', - 'onboarding.skills.status.error': 'error', - 'onboarding.skills.status.unavailable': 'No disponible', - 'composio.statusUnavailable': 'Estado no disponible', - 'composio.envVarOverrides': 'está configurada, reemplaza esta configuración.', - 'memory.day.sun': 'Dom', - 'memory.day.mon': 'Lun', - 'memory.day.tue': 'Mar', - 'memory.day.wed': 'Mié', - 'memory.day.thu': 'Jue', - 'memory.day.fri': 'Vie', - 'memory.day.sat': 'Sáb', - 'memory.ingesting': 'Ingiriendo', - 'memory.ingestionQueued': 'En cola', - 'memory.ingestingTitle': 'Ingiriendo {title}', - 'mic.noAudioCaptured': 'No se capturó audio', - 'mic.noSpeechDetected': 'No se detectó habla', - 'mic.lowConfidenceResult': 'No se pudo entender el audio con claridad — intenta de nuevo', - 'mic.failedToStopRecording': 'No se pudo detener la grabación: {message}', - 'mic.transcriptionFailed': 'Transcripción fallida: {message}', - 'reflections.kind.retrospective': 'Retrospectiva', - 'reflections.kind.derivedFact': 'Hecho derivado', - 'reflections.kind.moodInsight': 'Insight de ánimo', - 'reflections.kind.relationshipInsight': 'Insight de relación', - 'graph.tooltip.summary': 'Resumen', - 'graph.tooltip.contact': 'Contacto', - 'localModel.usage.never': 'Nunca', - 'localModel.usage.mediumLoad': 'Carga media', - 'localModel.usage.lowLoad': 'Carga baja', - 'localModel.usage.idleMode': 'Modo inactivo', - 'localModel.rebootstrapComplete': 'Re-bootstrap del modelo completado.', - 'localModel.modelsVerified': 'Modelos locales verificados.', - 'accounts.addModal.allConnected': 'Todo conectado', - 'accounts.addModal.title': 'Agregar cuenta', - 'accounts.respondQueue.empty': 'Vacío', - 'accounts.respondQueue.hide': 'Ocultar cola de respuestas', - 'accounts.respondQueue.loadFailed': 'No se pudo cargar la cola de respuestas', - 'accounts.respondQueue.loading': 'Cargando cola…', - 'accounts.respondQueue.pending': 'Pendiente', - 'accounts.respondQueue.show': 'Mostrar cola de respuestas', - 'accounts.respondQueue.title': 'Cola de respuestas', - 'accounts.webviewHost.almostReady': 'Casi listo...', - 'accounts.webviewHost.loadTimeout': 'Tiempo de carga agotado', - 'accounts.webviewHost.loading': 'Cargando {providerName}...', - 'accounts.webviewHost.loadingAccount': 'Cargando cuenta', - 'accounts.webviewHost.restoringSession': 'Restaurando sesión...', - 'accounts.webviewHost.retryLoading': 'Reintentar carga', - 'accounts.webviewHost.takingLonger': '{providerName} está tardando más de lo esperado.', - 'accounts.webviewHost.timeoutHint': 'Pista de tiempo agotado', - 'app.connectionBadge.composio': 'Composio', - 'app.connectionBadge.messaging': 'Mensajería', - 'app.connectionIndicator.connected': 'Conectado a OpenHuman AI 🚀', - 'app.connectionIndicator.connecting': 'Conectando', - 'app.connectionIndicator.coreOffline': 'Core sin conexión', - 'app.connectionIndicator.disconnected': 'Desconectado', - 'app.connectionIndicator.offline': 'Sin conexión', - 'app.connectionIndicator.reconnecting': 'Reconectando…', - 'app.errorFallback.componentStack': 'Pila de componentes', - 'app.errorFallback.downloadLatest': 'Descargar la última versión', - 'app.errorFallback.heading': 'Encabezado', - 'app.errorFallback.hint': 'Sugerencia', - 'app.errorFallback.reloadApp': 'Recargar app', - 'app.errorFallback.subheading': 'Subtítulo', - 'app.errorFallback.tryRecover': 'Intentar recuperar', - 'app.localAiDownload.installing': 'Instalando...', - 'app.localAiDownload.preparing': 'Preparando...', - 'app.openhumanLink.accounts.continueWith': 'Continuar con inicio de sesión de {label}', - 'app.openhumanLink.accounts.done': 'Listo', - 'app.openhumanLink.accounts.intro': 'Introducción', - 'app.openhumanLink.accounts.webviewNote': 'Nota de webview', - 'app.openhumanLink.billing.openDashboard': 'Abrir panel', - 'app.openhumanLink.billing.stayOnTrial': 'Continuar con prueba', - 'app.openhumanLink.billing.trialCredit': 'Crédito de prueba', - 'app.openhumanLink.billing.trialDesc': 'Descripción de prueba', - 'app.openhumanLink.defaultBody': - 'Aún no está listo en el menú emergente. Abre la página completa de ajustes cuando la necesites.', - 'app.openhumanLink.discord.intro': 'Introducción', - 'app.openhumanLink.discord.openInvite': 'Abrir invitación', - 'app.openhumanLink.discord.perk1': 'Ventaja 1', - 'app.openhumanLink.discord.perk2': 'Ventaja 2', - 'app.openhumanLink.discord.perk3': 'Ventaja 3', - 'app.openhumanLink.discord.perk4': 'Ventaja 4', - 'app.openhumanLink.done': 'Listo', - 'app.openhumanLink.loadingChannelSetup': 'Cargando configuración de canal', - 'app.openhumanLink.maybeLater': 'Quizás después', - 'app.openhumanLink.notifications.asking': 'Consultando tu sistema operativo…', - 'app.openhumanLink.notifications.blocked': 'Bloqueado', - 'app.openhumanLink.notifications.blockedStep1': 'Paso bloqueado 1', - 'app.openhumanLink.notifications.blockedStep2': 'Paso bloqueado 2', - 'app.openhumanLink.notifications.blockedStep3': 'Paso bloqueado 3', - 'app.openhumanLink.notifications.intro': 'Introducción', - 'app.openhumanLink.notifications.promptHint': 'Sugerencia de permiso', - 'app.openhumanLink.notifications.retry': 'Reintentar notificación de prueba', - 'app.openhumanLink.notifications.send': 'Enviar notificación de prueba', - 'app.openhumanLink.notifications.sendFailed': 'No se pudo enviar: {error}', - 'app.openhumanLink.notifications.sent': - 'Notificación de prueba enviada. Si no la recibiste, ve a Ajustes del sistema → Notificaciones → OpenHuman, activa Permitir notificaciones y configura el estilo de banner como Persistente.', - 'app.openhumanLink.skipForNow': 'Omitir por ahora', - 'app.openhumanLink.telegramUnavailable': 'Telegram no disponible', - 'app.openhumanLink.title.accounts': 'Conecta tus apps', - 'app.openhumanLink.title.billing': 'Facturación y créditos', - 'app.openhumanLink.title.discord': 'Únete a la comunidad', - 'app.openhumanLink.title.messaging': 'Conecta un canal de chat', - 'app.openhumanLink.title.notifications': 'Permitir notificaciones', - 'app.persistRehydration.body': 'Cuerpo', - 'app.persistRehydration.heading': 'Encabezado', - 'app.persistRehydration.resetCta': 'Restableciendo…', - 'app.persistRehydration.resetting': 'Restableciendo…', - 'app.routeLoading.initializing': 'Inicializando OpenHuman...', - 'app.update.currentlyOn': '{version}', - 'app.update.errorFallback': 'Algo salió mal durante la actualización.', - 'app.update.header.default': 'Actualización', - 'app.update.header.error': 'Actualización fallida', - 'app.update.header.installing': 'Instalando actualización', - 'app.update.header.readyToInstall': 'Actualización lista para instalar', - 'app.update.header.restarting': 'Reiniciando…', - 'app.update.later': 'Después', - 'app.update.newVersionReady': 'Una nueva versión está lista para instalar.', - 'app.update.progress.downloaded': '{amount} descargado', - 'app.update.progress.installing': 'Instalando la nueva versión…', - 'app.update.progress.restarting': 'Relanzando la app…', - 'app.update.progress.working': '{percent}%', - 'app.update.restartNote': 'Nota de reinicio', - 'app.update.restartNow': 'Reiniciar ahora', - 'app.update.versionReady': 'La versión {newVersion} está lista para instalar.', - 'channels.discord.accountLinked': 'Cuenta vinculada', - 'channels.discord.connect': 'Conectar', - 'channels.discord.linkTokenExpired': 'El token de enlace expiró. Inténtalo de nuevo.', - 'channels.discord.linkTokenInstruction': '{token}', - 'channels.discord.linkTokenLabel': 'Etiqueta de token de enlace', - 'channels.discord.linkTokenOnce': 'Token de enlace de un solo uso', - 'channels.discord.picker.allPermissionsOk': - 'El bot tiene todos los permisos requeridos en este canal.', - 'channels.discord.picker.botNotInServers': 'Bot no está en servidores', - 'channels.discord.picker.category': 'Categoría', - 'channels.discord.picker.channel': 'Canal', - 'channels.discord.picker.checkingPermissions': 'Verificando permisos', - 'channels.discord.picker.loadingChannels': 'Cargando canales...', - 'channels.discord.picker.loadingServers': 'Cargando servidores...', - 'channels.discord.picker.missingPermissions': 'Permisos faltantes', - 'channels.discord.picker.noChannels': 'No se encontraron canales de texto', - 'channels.discord.picker.noServers': 'No se encontraron servidores', - 'channels.discord.picker.selectChannel': 'Selecciona un canal', - 'channels.discord.picker.selectServer': 'Selecciona un servidor', - 'channels.discord.picker.server': 'Servidor', - 'channels.discord.picker.serverChannelSelection': 'Selección de servidor y canal', - 'channels.discord.savedRestartRequired': 'Canal guardado. Reinicia la app para activarlo.', - 'channels.telegram.connect': 'Conectar', - 'channels.telegram.managedDmConnecting': 'Conectando DM gestionado', - 'channels.telegram.managedDmTimeout': 'Tiempo de DM gestionado agotado', - 'channels.telegram.reconnect': 'Reconectar', - 'channels.telegram.savedRestartRequired': 'Canal guardado. Reinicia la app para activarlo.', - 'channels.web.alwaysAvailable': 'Siempre disponible', - 'channels.discord.displayName': 'Discord', - 'channels.discord.description': 'Enviar y recibir mensajes a través de Discord.', - 'channels.discord.authMode.bot_token.description': 'Proporcione su propio token de bot Discord.', - 'channels.discord.authMode.oauth.description': - 'Instale el bot OpenHuman en su servidor Discord a través de OAuth.', - 'channels.discord.authMode.managed_dm.description': - 'Vincula tu cuenta personal Discord al bot OpenHuman.', - 'channels.discord.fields.bot_token.label': 'Ficha de robot', - 'channels.discord.fields.bot_token.placeholder': 'Tu token de bot Discord', - 'channels.discord.fields.guild_id.label': 'ID del servidor (gremio)', - 'channels.discord.fields.guild_id.placeholder': 'Opcional: restringir a un servidor específico', - 'channels.telegram.displayName': 'Telegram', - 'channels.telegram.description': 'Enviar y recibir mensajes a través de Telegram.', - 'channels.telegram.authMode.managed_dm.description': - 'Envíe un mensaje al bot OpenHuman Telegram directamente.', - 'channels.telegram.authMode.bot_token.description': - 'Proporcione su propio token de Bot Telegram de @BotFather.', - 'channels.telegram.fields.bot_token.label': 'Ficha de robot', - 'channels.telegram.fields.bot_token.placeholder': '123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11', - 'channels.telegram.fields.allowed_users.label': 'Usuarios permitidos', - 'channels.telegram.fields.allowed_users.placeholder': - 'Nombres de usuario Telegram separados por comas', - 'channels.web.displayName': 'Web', - 'channels.web.description': 'Chatea a través de la interfaz de usuario web incorporada.', - 'channels.web.authMode.managed_dm.description': - 'Utilice el chat web integrado: no requiere configuración.', - 'welcome.continueLocallyExperimental': 'Continuar localmente (experimental)', - 'channels.yuanbao.connect': 'Connect', - 'channels.yuanbao.connecting': 'Connecting…', - 'channels.yuanbao.fieldRequired': '{field} is required', - 'channels.yuanbao.reconnect': 'Reconnect', - 'channels.yuanbao.savedRestartRequired': 'Channel saved. Restart the app to activate it.', - 'channels.yuanbao.unexpectedStatus': 'Unexpected connection status: {status}', - 'chat.approval.approve': 'Approve', - 'chat.approval.alwaysAllow': 'Always allow', - 'chat.approval.alwaysAllowHint': 'Stop asking for this tool — add it to your Always-allow list', - 'chat.approval.deciding': 'Working…', - 'chat.approval.deny': 'Deny', - 'chat.approval.error': 'Could not record your decision — try again.', - 'chat.approval.fallback': 'The agent wants to run an action that needs your approval.', - 'chat.approval.title': 'Approval needed', - 'chat.approval.tool': 'Tool:', -}; - -export default es3; diff --git a/app/src/lib/i18n/chunks/es-4.ts b/app/src/lib/i18n/chunks/es-4.ts deleted file mode 100644 index 33339967e..000000000 --- a/app/src/lib/i18n/chunks/es-4.ts +++ /dev/null @@ -1,492 +0,0 @@ -import type { TranslationMap } from '../types'; - -// Spanish (Español) chunk 4/5. Translated from chunks/en-4.ts. -const es4: TranslationMap = { - 'chat.unsubscribeApproval.approve': 'Aprobar y darse de baja', - 'chat.unsubscribeApproval.approved': '✓ Baja realizada con éxito.', - 'chat.unsubscribeApproval.denied': '✕ Solicitud denegada.', - 'chat.unsubscribeApproval.deny': 'Denegar', - 'chat.unsubscribeApproval.processing': 'Procesando...', - 'chat.unsubscribeApproval.title': 'Solicitud de baja', - 'commandPalette.ariaLabel': 'Paleta de comandos', - 'commandPalette.description': 'Descripción', - 'commandPalette.label': 'Comandos', - 'commandPalette.noResults': 'Sin resultados', - 'commandPalette.placeholder': 'Escribe un comando o busca…', - 'commandPalette.searchAria': 'Buscar comandos', - 'commandPalette.shortcutHint': 'Pulsa ? para ver todos los atajos', - 'commandPalette.title': 'Paleta de comandos', - 'composio.connect.additionalConfigRequired': 'Configuración adicional requerida', - 'composio.connect.atlassianSubdomainHint': 'cumbre', - 'composio.connect.atlassianSubdomainLabel': 'Etiqueta de subdominio de Atlassian', - 'composio.connect.connect': 'Conectar', - 'composio.connect.connectionFailed': 'Falló la conexión (estado: {status}).', - 'composio.connect.disconnectFailed': 'Desconexión fallida: {msg}', - 'composio.connect.disconnecting': 'Desconectando…', - 'composio.connect.idleDescription': 'Conecta tu', - 'composio.connect.idleDescriptionSuffix': - 'cuenta. Abriremos una ventana del navegador, apruebas el acceso allí, y esta app detectará la conexión automáticamente.', - 'composio.connect.isConnected': 'está conectado.', - 'composio.connect.manage': 'Gestionar', - 'composio.connect.needsSubdomain': 'Para conectar', - 'composio.connect.needsSubdomainSuffix': - 'introduce tu subdominio de Atlassian (p. ej. acme para acme.atlassian.net) e inténtalo de nuevo.', - 'composio.connect.oauthComplete': 'OAuth por completar…', - 'composio.connect.oauthTimeout': 'Tiempo de OAuth agotado', - 'composio.connect.permissions': 'Permisos', - 'composio.connect.permissionsDefault': 'Lectura + Escritura habilitados por defecto', - 'composio.connect.permissionsNote': 'puede exponer', - 'composio.connect.permissionsNoteSuffix': - 'los propios permisos del agente de OpenHuman se controlan abajo con conmutadores de lectura, escritura y administración.', - 'composio.connect.reopenBrowser': 'Reabrir navegador', - 'composio.connect.requestingUrl': 'Solicitando URL de conexión…', - 'composio.connect.retryConnection': 'Reintentar conexión', - 'composio.connect.scopeLoadError': 'No se pudieron cargar las preferencias de alcance: {msg}', - 'composio.connect.scopeSaveError': 'No se pudo guardar el alcance {key}: {msg}', - 'composio.connect.subdomainInvalid': - 'Introduce solo el subdominio corto (p. ej. "acme"), no la URL completa. Debe contener solo letras, números y guiones.', - 'composio.connect.subdomainRequired': 'Ingresa tu subdominio de Atlassian para continuar.', - 'composio.connect.dynamicsOrgNameLabel': 'Nombre de la organización de Dynamics 365', - 'composio.connect.dynamicsOrgNameHint': - 'Por ejemplo, "myorg" para myorg.crm.dynamics.com. Introduce solo el nombre corto de la organización, no la URL completa.', - 'composio.connect.needsFieldsPrefix': 'Para conectar', - 'composio.connect.needsFieldsSuffix': - 'necesitamos un poco más de información. Completa los campos que faltan abajo y vuelve a intentarlo.', - 'composio.connect.requiredFieldEmpty': 'Este campo es obligatorio.', - 'composio.connect.wabaIdHint': - 'Encuéntralo mediante GET /me/businesses y luego GET /{business_id}/owned_whatsapp_business_accounts usando tu token de acceso de Meta.', - 'composio.connect.wabaIdLabel': 'Etiqueta de ID de WABA', - 'composio.connect.wabaIdRequired': - 'Ingresa tu ID de cuenta de WhatsApp Business (WABA ID) para continuar.', - 'composio.connect.waitingFor': 'Esperando a', - 'composio.connect.waitingHint': 'Sugerencia de espera', - 'composio.triggers.heading': 'Disparadores', - 'composio.triggers.listenFrom': 'Escuchar eventos de', - 'composio.triggers.loadError': 'No se pudieron cargar los triggers', - 'composio.triggers.needsConfiguration': 'Necesita configuración', - 'composio.triggers.noneAvailable': 'Actualmente no hay triggers disponibles para', - 'conversations.taskKanban.moveLeft': 'Mover a la izquierda', - 'conversations.taskKanban.moveRight': 'Mover a la derecha', - 'conversations.taskKanban.title': 'Tareas', - 'conversations.toolTimeline.turn': 'turno', - 'conversations.toolTimeline.workerThread': 'hilo de worker', - 'daemon.serviceBlockingGate.body': 'Cuerpo', - 'daemon.serviceBlockingGate.downloadHint': 'Sugerencia de descarga', - 'daemon.serviceBlockingGate.downloadLatest': 'Descargar la última versión', - 'daemon.serviceBlockingGate.retryCore': 'Reintentar Core', - 'daemon.serviceBlockingGate.retryFailed': - 'Reintento fallido. Descarga la última versión de la app e inténtalo de nuevo.', - 'daemon.serviceBlockingGate.retrying': 'Reintentando...', - 'daemon.serviceBlockingGate.title': 'El core de OpenHuman no está disponible', - 'home.banners.discordSubtitle': 'Subtítulo de Discord', - 'home.banners.discordTitle': 'Únete a nuestro Discord', - 'home.banners.earlyBirdDismiss': 'Descartar banner de early bird', - 'home.banners.earlyBirdFirstSub': 'primera suscripción.', - 'home.banners.earlyBirdOn': 'Early bird activo', - 'home.banners.earlyBirdTitle': 'Los primeros 1.000 usuarios obtienen un 60% de descuento.', - 'home.banners.earlyBirdUseCode': 'Usar código early bird', - 'home.banners.getSubscription': 'obtener una suscripción', - 'home.banners.promoCreditsBody': 'Cuerpo de créditos promocionales', - 'home.banners.promoCreditsTitle': '{amount}', - 'home.banners.promoCreditsUsage': 'Uso de créditos promocionales', - 'intelligence.memoryChunk.detail.chunk': 'Fragmento', - 'intelligence.memoryChunk.detail.copyChunkId': 'Copiar ID de fragmento', - 'intelligence.memoryChunk.detail.embeddingInfo': 'bge-m3 1024dim', - 'intelligence.memoryChunk.detail.noEmbedding': 'Sin embedding', - 'intelligence.memoryChunk.letterhead.from': 'de', - 'intelligence.memoryChunk.letterhead.to': 'a', - 'intelligence.memoryChunk.mentioned.chunkOne': '1 fragmento', - 'intelligence.memoryChunk.mentioned.chunkOther': '{count} fragmentos', - 'intelligence.memoryChunk.mentioned.heading': 'm e n c i o n a d o', - 'intelligence.memoryChunk.scoreBars.ariaScore': '{name} puntuación {pct} por ciento', - 'intelligence.memoryChunk.scoreBars.atThreshold': 'en {threshold}', - 'intelligence.memoryChunk.scoreBars.dropped': 'descartado', - 'intelligence.memoryChunk.scoreBars.heading': 'p o r q u é s e c o n s e r v ó', - 'intelligence.memoryChunk.scoreBars.kept': 'conservado', - 'intelligence.diagram.title': 'Architecture Diagram', - 'intelligence.diagram.description': - 'Latest local architecture output from the configured diagram endpoint.', - 'intelligence.diagram.refresh': 'Refresh', - 'intelligence.diagram.refreshAria': 'Refresh diagram', - 'intelligence.diagram.emptyTitle': 'No diagram available yet', - 'intelligence.diagram.emptyDescription': - 'Generate an architecture diagram from the orchestrator and this panel will refresh from the configured local endpoint.', - 'intelligence.diagram.skillInstallCommand': 'npx skills add yizhiyanhua-ai/fireworks-tech-graph', - 'intelligence.diagram.promptExample': - 'Generate an architecture diagram of the current swarm in dark terminal style', - 'intelligence.diagram.imageAlt': 'Latest generated OpenHuman architecture diagram', - 'intelligence.diagram.refreshesEvery': 'Refreshes every {seconds}s', - 'intelligence.memoryText.entityTypePrefix': 'Tipo de entidad', - 'intelligence.screenDebug.active': 'Activo', - 'intelligence.screenDebug.app': 'Aplicación', - 'intelligence.screenDebug.bounds': 'Límites', - 'intelligence.screenDebug.captureAlt': 'Resultado de prueba de captura', - 'intelligence.screenDebug.captureFailed': 'Falló', - 'intelligence.screenDebug.captureSuccess': 'Éxito', - 'intelligence.screenDebug.captureTest': 'Prueba de captura', - 'intelligence.screenDebug.capturing': 'Capturando', - 'intelligence.screenDebug.frames': 'Fotogramas', - 'intelligence.screenDebug.idle': 'Inactivo', - 'intelligence.screenDebug.lastApp': 'Última app', - 'intelligence.screenDebug.mode': 'Modo', - 'intelligence.screenDebug.permAccessibility': 'Permiso de accesibilidad', - 'intelligence.screenDebug.permInput': 'Permiso de entrada', - 'intelligence.screenDebug.permScreen': 'Accesibilidad', - 'intelligence.screenDebug.permissions': 'Permisos', - 'intelligence.screenDebug.platformNotSupported': 'Plataforma no compatible', - 'intelligence.screenDebug.recentVisionSummaries': 'Resúmenes de visión recientes', - 'intelligence.screenDebug.session': 'Sesión', - 'intelligence.screenDebug.size': 'Tamaño', - 'intelligence.screenDebug.status': 'Estado', - 'intelligence.screenDebug.testCapture': 'Prueba de captura', - 'intelligence.screenDebug.time': 'Tiempo', - 'intelligence.screenDebug.title': 'Título', - 'intelligence.screenDebug.unknown': 'Desconocido', - 'intelligence.screenDebug.visionQueue': 'Cola de visión', - 'intelligence.screenDebug.visionState': 'Estado de visión', - 'intelligence.tasks.activeBoardOne': '1 tablero activo entre conversaciones', - 'intelligence.tasks.activeBoardOther': '{count} tableros activos entre conversaciones', - 'intelligence.tasks.empty': 'Sin tableros de tareas de agente aún', - 'intelligence.tasks.emptyHint': 'Sugerencia de vacío', - 'intelligence.tasks.failedToLoad': 'No se pudo cargar', - 'intelligence.tasks.live': 'en vivo', - 'intelligence.tasks.loadingBoards': 'Cargando tableros de tareas…', - 'intelligence.tasks.threadPrefix': 'Hilo {thread}', - 'intelligence.tasks.subtitle': 'Your tasks and agent task boards across the workspace.', - 'intelligence.tasks.newTask': 'New task', - 'intelligence.tasks.personalBoardTitle': 'Agent Tasks', - 'intelligence.tasks.personalEmpty': 'No personal tasks yet', - 'intelligence.tasks.composer.title': 'New task', - 'intelligence.tasks.composer.titleLabel': 'Title', - 'intelligence.tasks.composer.titlePlaceholder': 'What needs to be done?', - 'intelligence.tasks.composer.statusLabel': 'Status', - 'intelligence.tasks.composer.attachLabel': 'Attach to conversation', - 'intelligence.tasks.composer.attachNone': 'Personal (no conversation)', - 'intelligence.tasks.composer.objectiveLabel': 'Objective', - 'intelligence.tasks.composer.objectivePlaceholder': 'Optional — the desired outcome', - 'intelligence.tasks.composer.notesLabel': 'Notes', - 'intelligence.tasks.composer.notesPlaceholder': 'Optional notes', - 'intelligence.tasks.composer.create': 'Create task', - 'intelligence.tasks.composer.creating': 'Creating…', - 'intelligence.tasks.composer.createFailed': "Couldn't create the task", - 'notifications.card.dismiss': 'Descartar notificación', - 'notifications.card.importanceTitle': 'Importancia: {pct}%', - 'notifications.center.empty': 'Sin notificaciones aún', - 'notifications.center.emptyHint': 'Sugerencia de vacío', - 'notifications.center.filterAll': 'Filtrar todo', - 'notifications.center.markAllRead': 'Marcar todo como leído', - 'notifications.center.title': 'Notificaciones', - 'oauth.button.loopbackTimeout': - 'El inicio de sesión expiró — el navegador no completó la redirección OAuth. Por favor, inténtalo de nuevo.', - 'oauth.button.connecting': 'Conectando...', - 'oauth.login.continueWith': 'Continuar con', - 'onboarding.contextGathering.buildingDesc': 'Descripción de construcción', - 'onboarding.contextGathering.buildingProfile': 'Construyendo tu perfil...', - 'onboarding.contextGathering.continueToChat': 'Continuar al chat', - 'onboarding.contextGathering.errorDesc': - 'No pudimos construir tu perfil completo ahora mismo, pero no pasa nada — puedes continuar y tu perfil se construirá con el tiempo.', - 'onboarding.contextGathering.coreAlive': - 'El núcleo está disponible — el primer arranque puede tardar un minuto.', - 'onboarding.contextGathering.coreAliveProbing': 'Comprobando la conexión con el núcleo…', - 'onboarding.contextGathering.coreUnreachable': - 'El núcleo no responde. Puedes continuar e intentarlo más tarde.', - 'onboarding.contextGathering.stillWorkingDesc': - 'El primer arranque puede tardar 30–60 segundos mientras preparamos tu modelo local y tus herramientas. Puedes continuar al chat en cualquier momento — la construcción del perfil sigue en segundo plano.', - 'onboarding.contextGathering.stillWorkingTitle': 'Seguimos trabajando en tu perfil…', - 'onboarding.contextGathering.title': 'Recopilación de contexto', - 'openhuman.team_list_teams': 'Lista de equipos', - 'overlay.ariaAttention': 'Mensaje de atención', - 'overlay.ariaCompanion': 'Acompañante activo', - 'overlay.ariaOrb': 'Overlay de OpenHuman', - 'overlay.ariaVoiceActive': 'Entrada de voz activa', - 'overlay.companion.error': 'error', - 'overlay.companion.listening': 'Escuchando…', - 'overlay.companion.pointing': 'Señalando…', - 'overlay.companion.speaking': 'Hablando…', - 'overlay.companion.thinking': 'Pensando…', - 'overlay.orbTitle': 'Arrastra para mover · Doble clic para restablecer posición', - 'pages.settings.account.connections': 'Conexiones', - 'pages.settings.account.connectionsDesc': 'Descripción de conexiones', - 'pages.settings.account.privacy': 'Privacidad', - 'pages.settings.account.privacyDesc': 'Descripción de privacidad', - 'pages.settings.account.recoveryPhrase': 'Frase de recuperación', - 'pages.settings.account.recoveryPhraseDesc': 'Descripción de frase de recuperación', - 'pages.settings.account.team': 'Equipo', - 'pages.settings.account.teamDesc': 'Descripción de equipo', - 'pages.settings.accountSection.description': - 'Frase de recuperación, equipo, conexiones y configuración de privacidad.', - 'pages.settings.accountSection.title': 'Cuenta', - 'pages.settings.ai.llm': 'LLM', - 'pages.settings.ai.llmDesc': 'Descripción de LLM', - 'pages.settings.ai.voice': 'Voz', - 'pages.settings.ai.voiceDesc': 'Descripción de voz', - 'pages.settings.ai.embeddings': 'Incrustaciones', - 'pages.settings.ai.embeddingsDesc': - 'Modelo de codificación vectorial para recuperación de memoria', - 'pages.settings.aiSection.description': - 'Proveedores de modelos de lenguaje, Ollama local y voz (STT / TTS).', - 'pages.settings.aiSection.title': 'IA', - 'pages.settings.features.desktopCompanion': 'Acompañante de escritorio', - 'pages.settings.features.desktopCompanionDesc': - 'Asistente de voz con conciencia de pantalla — escucha, ve, habla, señala', - 'pages.settings.features.messagingChannels': 'Canales de mensajería', - 'pages.settings.features.messagingChannelsDesc': 'Descripción de canales de mensajería', - 'pages.settings.features.notifications': 'Notificaciones', - 'pages.settings.features.notificationsDesc': 'Descripción de notificaciones', - 'pages.settings.features.screenAwareness': 'Conciencia de pantalla', - 'pages.settings.features.screenAwarenessDesc': 'Descripción de conciencia de pantalla', - 'pages.settings.features.tools': 'Herramientas', - 'pages.settings.features.toolsDesc': 'Descripción de herramientas', - 'pages.settings.featuresSection.description': - 'Conciencia de pantalla, mensajería y herramientas.', - 'pages.settings.featuresSection.title': 'Funciones', - 'privacy.dataKind.credentials': 'Credenciales', - 'privacy.dataKind.derived': 'Derivado', - 'privacy.dataKind.diagnostics': 'Diagnósticos', - 'privacy.dataKind.metadata': 'Metadatos', - 'privacy.dataKind.raw': 'Sin procesar', - 'privacy.whatLeaves.link.label': '¿Qué sale de mi ordenador?', - 'rewards.community.achievementsUnlocked': '{unlocked} de {total} logros desbloqueados', - 'rewards.community.connectDiscord': 'Conectar Discord', - 'rewards.community.cumulativeTokens': 'Tokens acumulados', - 'rewards.community.currentStreak': 'Racha actual', - 'rewards.community.discordLinkedNotInGuild': 'Discord vinculado pero no en el servidor', - 'rewards.community.discordMember': 'Te uniste al servidor', - 'rewards.community.discordNotLinked': 'Discord no vinculado', - 'rewards.community.discordServer': 'Servidor de Discord', - 'rewards.community.discordStatusUnavailable': 'Estado de Discord no disponible', - 'rewards.community.discordWaiting': 'Esperando en Discord', - 'rewards.community.heroSubtitle': 'Subtítulo hero', - 'rewards.community.heroTitle': 'Título hero', - 'rewards.community.joinDiscord': 'Unirse a Discord', - 'rewards.community.loadingRewards': 'Cargando recompensas…', - 'rewards.community.locked': 'Desbloqueado', - 'rewards.community.retrying': 'Reintentando…', - 'rewards.community.rolesAndRewards': 'Roles y recompensas', - 'rewards.community.streakDays': '{n}', - 'rewards.community.syncPending': 'Sincronización de recompensas pendiente', - 'rewards.community.syncPendingDesc': 'Descripción de sincronización pendiente', - 'rewards.community.syncUnavailable': 'Sincronización no disponible', - 'rewards.community.tryAgain': 'Reintentando…', - 'rewards.community.unknown': 'Desconocido', - 'rewards.community.unlocked': 'Desbloqueado', - 'rewards.community.yourProgress': 'Tu progreso', - 'rewards.coupon.colCode': 'Código', - 'rewards.coupon.colRedeemed': 'Canjeado', - 'rewards.coupon.colReward': 'Recompensa', - 'rewards.coupon.colStatus': 'Estado', - 'rewards.coupon.loadingHistory': 'Cargando historial de recompensas…', - 'rewards.coupon.noCodes': 'Aún no se han canjeado códigos de recompensa.', - 'rewards.coupon.pending': 'Pendiente', - 'rewards.coupon.placeholder': 'Código de cupón', - 'rewards.coupon.promoCredits': 'Créditos promocionales', - 'rewards.coupon.recentRedemptions': 'Canjes recientes', - 'rewards.coupon.redeemAccepted': - '{code} aceptado. {amount} se desbloqueará cuando se complete la acción requerida.', - 'rewards.coupon.redeemButton': 'Canjear código', - 'rewards.coupon.redeemSuccess': '{code} canjeado. Se añadieron {amount} a tus créditos.', - 'rewards.coupon.redeemedCodes': 'Códigos canjeados', - 'rewards.coupon.redeeming': 'Canjeando...', - 'rewards.coupon.statusApplied': 'Aplicado', - 'rewards.coupon.statusPendingAction': 'Acción pendiente', - 'rewards.coupon.statusRedeemed': 'Canjeado', - 'rewards.coupon.subtitle': 'Subtítulo', - 'rewards.coupon.title': 'Canjear un código de cupón', - 'rewards.referralSection.activity': 'Actividad de referidos', - 'rewards.referralSection.apply': 'Aplicando…', - 'rewards.referralSection.applying': 'Aplicando…', - 'rewards.referralSection.colReferredUser': 'Usuario referido', - 'rewards.referralSection.colReward': 'Recompensa', - 'rewards.referralSection.colStatus': 'Estado', - 'rewards.referralSection.colUpdated': 'Actualizado', - 'rewards.referralSection.completed': 'Completado', - 'rewards.referralSection.copyCode': 'Copiar código', - 'rewards.referralSection.copyFailed': 'Error al copiar', - 'rewards.referralSection.haveCode': '¿Tienes un código de referido?', - 'rewards.referralSection.haveCodeDesc': 'Descripción de código disponible', - 'rewards.referralSection.linked': 'Vinculado', - 'rewards.referralSection.linkedCode': '(código {code})', - 'rewards.referralSection.loading': 'Cargando programa de referidos…', - 'rewards.referralSection.noReferrals': 'Sin referidos', - 'rewards.referralSection.pendingReferrals': 'Referidos pendientes', - 'rewards.referralSection.placeholder': 'Código de referido', - 'rewards.referralSection.share': 'Compartir', - 'rewards.referralSection.statusCompleted': 'Estado: completado', - 'rewards.referralSection.statusExpired': 'Estado: expirado', - 'rewards.referralSection.statusJoined': 'Estado: unido', - 'rewards.referralSection.subtitle': 'Subtítulo', - 'rewards.referralSection.title': 'Invita amigos, gana créditos', - 'rewards.referralSection.totalEarned': 'Total ganado', - 'rewards.referralSection.yourCode': 'Tu código', - 'settings.ai.addCloudProvider': 'Añadir proveedor en la nube', - 'settings.ai.addProvider': 'Guardando…', - 'settings.ai.apiKeyFieldLabel': 'Etiqueta de campo de clave API', - 'settings.ai.apiKeyRequired': 'Pega tu clave API para continuar.', - 'settings.ai.apiKeyStoredEncrypted': 'Clave API almacenada cifrada', - 'settings.ai.apiKeysEncrypted': 'perfiles-de-autenticación.json', - 'settings.ai.clearStoredKey': 'Borrar clave almacenada', - 'settings.ai.connectProvider': 'Conectar proveedor', - 'settings.ai.customRouting': 'Enrutamiento personalizado', - 'settings.ai.defaultResolvesTo': 'El valor predeterminado se resuelve a', - 'settings.ai.discard': 'Descartar', - 'settings.ai.editProvider': 'Editar proveedor', - 'settings.ai.llmProviders': 'Proveedores LLM', - 'settings.ai.llmProvidersDesc': 'Descripción de proveedores LLM', - 'settings.ai.localOllama': 'Local (Ollama)', - 'settings.ai.modelLabel': 'Modelo', - 'settings.ai.noCustomProviders': 'Sin proveedores personalizados', - 'settings.ai.openAiCompat.authHeaderExample': 'Autorización: Portador ', - 'settings.ai.openAiCompat.authHeaderLabel': 'encabezado de autenticación', - 'settings.ai.openAiCompat.baseUrlLabel': 'Base URL', - 'settings.ai.openAiCompat.baseUrlUnavailable': 'No disponible', - 'settings.ai.openAiCompat.clearKey': 'Borrar clave', - 'settings.ai.openAiCompat.description': - "Point local harnesses at this /v1 server to route through the providers configured below. Authentication uses a stable key you set here, not the app's internal core bearer.", - 'settings.ai.openAiCompat.keyConfigured': 'Clave configurada', - 'settings.ai.openAiCompat.keyRequired': 'Se requiere clave', - 'settings.ai.openAiCompat.rotateKey': 'Girar clave', - 'settings.ai.openAiCompat.setKey': 'Establecer clave', - 'settings.ai.openAiCompat.title': 'Punto final compatible con OpenAI', - 'settings.ai.providerLabel': 'Proveedor', - 'settings.ai.routing': 'Enrutamiento', - 'settings.ai.routingCustom': 'Enrutamiento personalizado', - 'settings.ai.routingDefault': 'Predeterminado', - 'settings.ai.routingDesc': 'Descripción de enrutamiento', - 'settings.ai.saveChanges': 'Guardando…', - 'settings.ai.saving': 'Guardando…', - 'settings.ai.unsavedChange': 'cambio sin guardar', - 'settings.ai.unsavedChanges': 'cambios sin guardar', - 'settings.ai.workloadGroupBackground': 'Grupo de carga de trabajo en segundo plano', - 'settings.ai.workloadGroupChat': 'Grupo de carga de trabajo de chat', - 'settings.autocomplete.appFilter.acceptSuggestion': 'Aceptar sugerencia', - 'settings.autocomplete.appFilter.contextOverride': 'Anulación de contexto (opcional)', - 'settings.autocomplete.appFilter.debugFocus': 'Foco de depuración', - 'settings.autocomplete.appFilter.getSuggestion': 'Obtener sugerencia', - 'settings.autocomplete.appFilter.liveLogs': 'Registros en vivo', - 'settings.autocomplete.appFilter.noLogs': ') :', - 'settings.autocomplete.appFilter.refreshStatus': 'Actualizando…', - 'settings.autocomplete.appFilter.refreshing': 'Actualizando…', - 'settings.autocomplete.appFilter.runtime': 'Tiempo de ejecución', - 'settings.autocomplete.appFilter.test': 'Probar', - 'settings.autocomplete.completionStyle.acceptedCompletion': - '{count} completado aceptado almacenado — se usa para personalizar futuras sugerencias.', - 'settings.autocomplete.completionStyle.acceptedCompletions': - '{count} completados aceptados almacenados — se usan para personalizar futuras sugerencias.', - 'settings.autocomplete.completionStyle.clearHistory': 'Limpiando…', - 'settings.autocomplete.completionStyle.clearing': 'Limpiando…', - 'settings.autocomplete.completionStyle.debounce': 'Rebote (ms)', - 'settings.autocomplete.completionStyle.enabled': 'Activado', - 'settings.autocomplete.completionStyle.maxChars': 'Máx. caracteres', - 'settings.autocomplete.completionStyle.noHistory': - 'Sin completados aceptados aún. Acepta sugerencias con Tab para empezar a personalizar.', - 'settings.autocomplete.completionStyle.overlayTtl': 'TTL de overlay (ms)', - 'settings.autocomplete.completionStyle.personalizationHistory': 'Historial de personalización', - 'settings.autocomplete.completionStyle.styleExamples': 'Ejemplos de estilo (uno por línea)', - 'settings.autocomplete.completionStyle.styleInstructions': 'Instrucciones de estilo', - 'settings.billing.autoRecharge.addAmount': 'Agregar esta cantidad', - 'settings.billing.autoRecharge.addCard': 'Agregar tarjeta', - 'settings.billing.autoRecharge.amountHint': 'Sugerencia de cantidad', - 'settings.billing.autoRecharge.defaultCard': 'Tarjeta predeterminada', - 'settings.billing.autoRecharge.lastRechargeFailed': 'Última recarga fallida', - 'settings.billing.autoRecharge.lastRecharged': 'Última recarga', - 'settings.billing.autoRecharge.noCards': 'Sin tarjetas', - 'settings.billing.autoRecharge.paymentMethods': 'Métodos de pago', - 'settings.billing.autoRecharge.rechargeInProgress': 'Recarga en progreso', - 'settings.billing.autoRecharge.rechargeWhen': 'Recargar cuando el saldo caiga por debajo de', - 'settings.billing.autoRecharge.saveSettings': 'Guardando…', - 'settings.billing.autoRecharge.saving': 'Guardando…', - 'settings.billing.autoRecharge.setDefault': ':', - 'settings.billing.autoRecharge.subtitle': 'Subtítulo', - 'settings.billing.autoRecharge.title': 'Activar recarga automática', - 'settings.billing.autoRecharge.toggleAriaLabel': 'Activar/desactivar recarga automática', - 'settings.billing.autoRecharge.weeklyLimit': 'Límite de gasto semanal', - 'settings.billing.history.desc': 'Descripción', - 'settings.billing.history.empty': 'Vacío', - 'settings.billing.history.openPortal': 'Abrir portal', - 'settings.billing.history.posted': 'Publicado', - 'settings.billing.history.title': 'Título', - 'settings.billing.inferenceBudget.cycleEnds': 'El ciclo termina', - 'settings.billing.inferenceBudget.exhausted': 'Agotado', - 'settings.billing.inferenceBudget.loadError': 'Error de carga', - 'settings.billing.inferenceBudget.noBudgetDesc': 'Sin descripción de presupuesto', - 'settings.billing.inferenceBudget.noRecurringBudget': 'Sin presupuesto recurrente', - 'settings.billing.inferenceBudget.remaining': 'Restante', - 'settings.billing.inferenceBudget.tenHourCap': 'Límite de diez horas', - 'settings.billing.inferenceBudget.title': 'Título', - 'settings.billing.payAsYouGo.available': 'Disponible', - 'settings.billing.payAsYouGo.chargeCustomAmount': 'Abriendo…', - 'settings.billing.payAsYouGo.chooseTopUpDesc': 'Descripción de recarga', - 'settings.billing.payAsYouGo.chooseTopUpTitle': 'Título de recarga', - 'settings.billing.payAsYouGo.creditBalanceDesc': 'Descripción de saldo de crédito', - 'settings.billing.payAsYouGo.creditBalanceTitle': 'Título de saldo de crédito', - 'settings.billing.payAsYouGo.customAmount': 'Cantidad personalizada', - 'settings.billing.payAsYouGo.enterAmount': 'Ingresar cantidad', - 'settings.billing.payAsYouGo.opening': 'Abriendo', - 'settings.billing.payAsYouGo.promotionalCredits': 'Créditos promocionales', - 'settings.billing.payAsYouGo.topUpBalance': 'Recargar saldo', - 'settings.billing.payAsYouGo.topUpCredits': 'Recargar créditos', - 'settings.billing.payAsYouGo.unableToLoad': 'No se pudo cargar el saldo.', - 'settings.billing.subscription.annual': 'Anual', - 'settings.billing.subscription.billedAnnually': 'Facturado anualmente', - 'settings.billing.subscription.chooseSubtitle': 'Elegir subtítulo', - 'settings.billing.subscription.chooseTitle': 'Elegir título', - 'settings.billing.subscription.cryptoDesc': 'Descripción de cripto', - 'settings.billing.subscription.cryptoQuestion': 'Pregunta de cripto', - 'settings.billing.subscription.current': 'Actual', - 'settings.billing.subscription.currentPlan': 'Plan actual', - 'settings.billing.subscription.monthly': 'Mensual', - 'settings.billing.subscription.paymentConfirmed': 'Pago confirmado', - 'settings.billing.subscription.perMonth': 'Por mes', - 'settings.billing.subscription.popular': 'populares', - 'pages.settings.account.migration': 'Importar desde otro asistente', - 'pages.settings.account.migrationDesc': - 'Migra memoria y notas desde OpenClaw (y pronto Hermes) a este espacio de trabajo.', - 'composio.connect.scope.read': 'leer', - 'composio.connect.scope.readHint': 'Permita que el agente lea datos de esta conexión.', - 'composio.connect.scope.write': 'escribir', - 'composio.connect.scope.writeHint': - 'Permita que el agente cree o modifique datos a través de esta conexión.', - 'composio.connect.scope.admin': 'administrador', - 'composio.connect.scope.adminHint': - 'Permitir que el agente administre configuraciones, permisos o acciones destructivas.', - 'pages.settings.composioSection.title': 'Composio', - 'pages.settings.composioSection.description': - 'Enrutamiento, activadores e historial para integraciones impulsadas por Composio.', - 'pages.settings.account.walletBalances': 'Wallet Balances', - 'pages.settings.account.walletBalancesDesc': 'View multi-chain balances for your local wallet', - 'walletBalances.title': 'Wallet Balances', - 'walletBalances.refresh': 'Refresh', - 'walletBalances.loading': 'Loading balances…', - 'walletBalances.retry': 'Retry', - 'walletBalances.emptyState': 'No wallet accounts yet — set up a wallet in Recovery Phrase.', - 'walletBalances.copyAddress': 'Copy address', - 'walletBalances.providerMissing': 'provider unavailable', - 'walletBalances.rawBalance': 'Raw: {raw}', - 'walletBalances.errorGeneric': - 'Unable to load wallet balances. Set up your wallet in Recovery Phrase and try again.', - 'conversations.taskKanban.approval.default': 'Default', - 'conversations.taskKanban.approval.notRequired': 'Not required', - 'conversations.taskKanban.approval.notRequiredBadge': 'no approval', - 'conversations.taskKanban.approval.required': 'Required', - 'conversations.taskKanban.approval.requiredBadge': 'approval', - 'conversations.taskKanban.approval.requiredBeforeExecution': 'Required before execution', - 'conversations.taskKanban.briefButton': 'Task brief', - 'conversations.taskKanban.briefTitle': 'Task brief', - 'conversations.taskKanban.closeBrief': 'Close task brief', - 'conversations.taskKanban.field.acceptanceCriteria': 'Acceptance criteria', - 'conversations.taskKanban.field.allowedTools': 'Allowed tools', - 'conversations.taskKanban.field.approval': 'Approval', - 'conversations.taskKanban.field.assignedAgent': 'Assigned agent', - 'conversations.taskKanban.field.blocker': 'Blocker', - 'conversations.taskKanban.field.evidence': 'Evidence', - 'conversations.taskKanban.field.notes': 'Notes', - 'conversations.taskKanban.field.objective': 'Objective', - 'conversations.taskKanban.field.plan': 'Plan', - 'conversations.taskKanban.field.status': 'Status', - 'conversations.taskKanban.field.title': 'Title', - 'conversations.taskKanban.saveChanges': 'Save changes', - 'conversations.taskKanban.deleteCard': 'Delete', - 'conversations.taskKanban.updateFailed': 'Could not update task; changes were not saved.', -}; - -export default es4; diff --git a/app/src/lib/i18n/chunks/es-5.ts b/app/src/lib/i18n/chunks/es-5.ts deleted file mode 100644 index b06442b78..000000000 --- a/app/src/lib/i18n/chunks/es-5.ts +++ /dev/null @@ -1,1032 +0,0 @@ -import type { TranslationMap } from '../types'; - -// Spanish (Español) chunk 5/5. Translated from chunks/en-5.ts. -const es5: TranslationMap = { - 'settings.billing.subscription.save': '{pct}', - 'settings.billing.subscription.upgrade': 'Mejorar plan', - 'settings.billing.subscription.waiting': 'Esperando', - 'settings.billing.subscription.waitingPayment': 'Esperando pago', - 'settings.composio.apiKeyDesc': - 'Actualmente hay una clave API de Composio almacenada en este dispositivo.', - 'settings.composio.apiKeyLabel': 'Clave API de Composio', - 'settings.composio.apiKeyStored': 'Clave API almacenada', - 'settings.composio.apiKeyStoredPlaceholder': '••••••••••••••••', - 'settings.composio.clearedToBackend': 'Cambiado al modo Backend', - 'settings.composio.confirmItem1': 'Una cuenta en app.composio.dev con una clave API', - 'settings.composio.confirmItem2': - 'Vuelve a vincular cada integración a través de tu cuenta personal de Composio', - 'settings.composio.confirmItem3': - 'Nota: los triggers de Composio (webhooks en tiempo real) aún no funcionan en modo Directo — solo las llamadas de herramientas síncronas', - 'settings.composio.confirmNeedItems': 'Necesitarás:', - 'settings.composio.confirmSwitch': 'Entiendo, cambiar a Directo', - 'settings.composio.confirmTitle': '⚠️ Cambiando a modo Directo', - 'settings.composio.confirmWarning': - 'Tus integraciones existentes (Gmail, Slack, GitHub, etc. vinculadas a través de OpenHuman) no serán visibles — viven en el inquilino de Composio gestionado por OpenHuman.', - 'settings.composio.intro': - 'Composio integra más de 250 aplicaciones externas como herramientas que tu agente puede invocar. Elige cómo se enrutan esas llamadas.', - 'settings.composio.modeDirect': 'Directo (usa tu propia clave API)', - 'settings.composio.modeDirectDesc': - 'Las llamadas van directamente a backend.composio.dev. Soberano / amigable con uso sin conexión. La ejecución de herramientas funciona de forma síncrona; los webhooks de triggers en tiempo real aún no están enrutados en modo directo (incidencia pendiente).', - 'settings.composio.modeManaged': 'Gestionado (OpenHuman lo maneja por ti)', - 'settings.composio.modeManagedDesc': - 'OpenHuman canaliza las llamadas de herramientas a través de nuestro backend (recomendado). La autenticación se intermedia; nunca pegas una clave API de Composio. Los webhooks están totalmente enrutados.', - 'settings.composio.routingMode': 'Modo de enrutamiento', - 'settings.composio.saveErrorNoKey': - 'Error al guardar. El modo Directo requiere una clave API no vacía.', - 'settings.composio.saving': 'Guardando…', - 'settings.composio.switching': 'Cambiando…', - 'settings.cron.jobs.desc': 'Descripción', - 'settings.cron.jobs.empty': 'No se encontraron tareas cron del core.', - 'settings.cron.jobs.lastStatus': 'Último estado', - 'settings.cron.jobs.loading': 'Cargando tareas cron...', - 'settings.cron.jobs.loadingRuns': 'Cargando ejecuciones', - 'settings.cron.jobs.nextRun': 'Próxima ejecución', - 'settings.cron.jobs.pause': 'Pausar', - 'settings.cron.jobs.paused': 'Pausado', - 'settings.cron.jobs.recentRuns': 'Ejecuciones recientes', - 'settings.cron.jobs.removing': 'Eliminando', - 'settings.cron.jobs.resume': 'Reanudar', - 'settings.cron.jobs.runningNow': 'Ejecutando ahora', - 'settings.cron.jobs.saving': 'Guardando…', - 'settings.cron.jobs.schedule': 'Programación', - 'settings.cron.jobs.title': 'Tareas cron del core', - 'settings.cron.jobs.viewRuns': 'Ver ejecuciones', - 'settings.localModel.deviceCapability.active': 'Activo', - 'settings.localModel.deviceCapability.appliedTier': 'Nivel aplicado', - 'settings.localModel.deviceCapability.applying': 'Aplicando', - 'settings.localModel.deviceCapability.cores': '{count}', - 'settings.localModel.deviceCapability.couldNotLoadPresets': 'No se pudieron cargar los presets', - 'settings.localModel.deviceCapability.cpu': 'CPU', - 'settings.localModel.deviceCapability.customModelIds': 'IDs de modelos personalizados', - 'settings.localModel.deviceCapability.detected': 'Detectado', - 'settings.localModel.deviceCapability.disabled': 'Desactivado', - 'settings.localModel.deviceCapability.disabledDesc': 'Descripción de desactivado', - 'settings.localModel.deviceCapability.downloadingModels': '(descargando modelos)', - 'settings.localModel.deviceCapability.downloadingSetupDesc': - 'Descargando el instalador de OllamaSetup (~2 GB) y descomprimiéndolo. Esto puede tardar un minuto en la primera instalación.', - 'settings.localModel.deviceCapability.failedToApplyPreset': 'No se pudo aplicar el preset', - 'settings.localModel.deviceCapability.gpu': 'GPU', - 'settings.localModel.deviceCapability.installFailed': 'Instalación de Ollama fallida', - 'settings.localModel.deviceCapability.installFailedDesc': - 'El instalador terminó antes de que Ollama estuviera disponible. Haz clic en reintentar o instálalo manualmente desde ollama.com.', - 'settings.localModel.deviceCapability.installFirst': 'Ejecuta Ollama primero.', - 'settings.localModel.deviceCapability.installFirstDesc': - 'Los niveles locales dependen de un endpoint de Ollama gestionado externamente. Inícialo tú mismo, descarga los modelos que quieras y sigue usando "Desactivado (respaldo en la nube)" hasta que el runtime sea accesible.', - 'settings.localModel.deviceCapability.installOllamaFirst': - 'Ejecuta Ollama primero para usar este nivel', - 'settings.localModel.deviceCapability.installingOllama': 'Instalando Ollama', - 'settings.localModel.deviceCapability.loadingDeviceInfo': 'Cargando info del dispositivo', - 'settings.localModel.deviceCapability.localAiDisabled': - 'IA local desactivada — usando respaldo en la nube.', - 'settings.localModel.deviceCapability.modelTier': 'Nivel de modelo', - 'settings.localModel.deviceCapability.needsOllama': 'Necesita Ollama', - 'settings.localModel.deviceCapability.notDetected': 'No detectado', - 'settings.localModel.deviceCapability.ram': 'RAM', - 'settings.localModel.deviceCapability.recommended': 'Recomendado', - 'settings.localModel.deviceCapability.retryInstall': 'Reintentando…', - 'settings.localModel.deviceCapability.retrying': 'Reintentando…', - 'settings.localModel.deviceCapability.starting': 'Iniciando…', - 'settings.localModel.download.audioPathPlaceholder': 'Ruta absoluta al archivo de audio', - 'settings.localModel.download.capabilityAssets': 'Activos de capacidad', - 'settings.localModel.download.downloading': 'Descargando...', - 'settings.localModel.download.embeddingPlaceholder': 'Una cadena de entrada por línea...', - 'settings.localModel.download.noThinkMode': 'Sin modo de pensamiento', - 'settings.localModel.download.promptPlaceholder': - 'Escribe cualquier prompt y ejecútalo en el modelo local...', - 'settings.localModel.download.quantizationPref': 'Preferencia de cuantización', - 'settings.localModel.download.runEmbeddingTest': 'Ejecutando...', - 'settings.localModel.download.runPromptTest': 'Ejecutar prueba de prompt', - 'settings.localModel.download.runSummaryTest': 'Ejecutar prueba de resumen', - 'settings.localModel.download.runTranscriptionTest': 'Ejecutando...', - 'settings.localModel.download.runTtsTest': 'Ejecutando...', - 'settings.localModel.download.runVisionTest': 'Ejecutando...', - 'settings.localModel.download.running': 'Ejecutando...', - 'settings.localModel.download.runningPrompt': 'Ejecutando prompt', - 'settings.localModel.download.summarizePlaceholder': - 'Pega texto para resumir con el modelo local...', - 'settings.localModel.download.testCustomPrompt': 'Probar prompt personalizado', - 'settings.localModel.download.testEmbeddings': 'Probar embeddings', - 'settings.localModel.download.testSummarization': 'Probar resumen', - 'settings.localModel.download.testVisionPrompt': 'Probar prompt de visión', - 'settings.localModel.download.testVoiceInput': 'Probar entrada de voz (STT)', - 'settings.localModel.download.testVoiceOutput': 'Probar salida de voz (TTS)', - 'settings.localModel.download.ttsOutputPlaceholder': 'Ruta WAV de salida opcional', - 'settings.localModel.download.ttsPlaceholder': 'Ingresa texto para sintetizar...', - 'settings.localModel.download.visionImagePlaceholder': - 'Una referencia de imagen por línea (data URI, URL o marcador de ruta local)', - 'settings.localModel.download.visionPromptPlaceholder': - 'Ingresa un prompt para el modelo de visión...', - 'settings.localModel.status.allChecksPassed': 'Todas las verificaciones pasaron', - 'settings.localModel.status.artifact': 'Artefacto', - 'settings.localModel.status.backend': 'backend', - 'settings.localModel.status.binary': 'Binario', - 'settings.localModel.status.bootstrapResume': 'Bootstrap / Reanudar', - 'settings.localModel.status.checking': 'Verificando...', - 'settings.localModel.status.checkingOllama': 'Verificando Ollama', - 'settings.localModel.status.customLocation': 'Ubicación personalizada', - 'settings.localModel.status.customLocationDesc': 'Descripción de ubicación personalizada', - 'settings.localModel.status.diagnosticsHint': - 'Haz clic en "Ejecutar diagnósticos" para verificar que Ollama está en ejecución y los modelos están instalados.', - 'settings.localModel.status.downloadingUnknown': 'Descargando (tamaño desconocido)', - 'settings.localModel.status.eta': 'ETA', - 'settings.localModel.status.expectedModels': 'Modelos esperados', - 'settings.localModel.status.forceRebootstrap': 'Forzar re-bootstrap', - 'settings.localModel.status.generationTps': 'TPS de generación', - 'settings.localModel.status.hideErrorDetails': 'Ocultar detalles del error', - 'settings.localModel.status.installManually': 'Instalar manualmente', - 'settings.localModel.status.installManuallyFrom': 'Instalar manualmente desde', - 'settings.localModel.status.installOllama': 'Iniciando…', - 'settings.localModel.status.installedModels': 'Modelos instalados', - 'settings.localModel.status.installing': 'Instalando...', - 'settings.localModel.status.installingOllama': 'Instalando runtime de Ollama...', - 'settings.localModel.status.issues': 'Problemas', - 'settings.localModel.status.issuesFound': 'Se encontraron {count} problema(s)', - 'settings.localModel.status.lastLatency': 'Última latencia', - 'settings.localModel.status.model': 'Modelo', - 'settings.localModel.status.notFound': 'No encontrado', - 'settings.localModel.status.notRunning': 'No en ejecución', - 'settings.localModel.status.ollamaBinaryPath': 'Ruta del binario de Ollama', - 'settings.localModel.status.ollamaDiagnostics': 'Diagnósticos de Ollama', - 'settings.localModel.status.ollamaNotInstalled': 'Runtime de Ollama no disponible', - 'settings.localModel.status.ollamaNotInstalledDesc': - 'OpenHuman ahora trata Ollama como un runtime de inferencia externo. Inicia tu propio servidor Ollama, descarga los modelos que quieras y apunta el enrutado de cargas hacia él.', - 'settings.localModel.status.progress': 'Progreso', - 'settings.localModel.status.provider': 'Proveedor', - 'settings.localModel.status.retryBootstrap': 'Reintentar bootstrap', - 'settings.localModel.status.runDiagnostics': 'Verificando...', - 'settings.localModel.status.running': 'Ejecutándose', - 'settings.localModel.status.runningExternalProcess': 'Ejecutándose como proceso externo', - 'settings.localModel.status.runtimeStatus': 'Estado del runtime', - 'settings.localModel.status.server': 'Servidor', - 'settings.localModel.status.setPath': 'Configurando...', - 'settings.localModel.status.setting': 'Configurando...', - 'settings.localModel.status.showErrorDetails': 'Ocultar detalles del error', - 'settings.localModel.status.showInstallErrorDetails': 'Ocultar detalles del error', - 'settings.localModel.status.suggestedFixes': 'Correcciones sugeridas', - 'settings.localModel.status.thenSetPath': 'Luego configura la ruta', - 'settings.localModel.status.triggering': 'Activando...', - 'settings.localModel.status.unavailable': 'No disponible', - 'settings.localModel.status.working': 'Trabajando...', - 'settings.developerMenu.ai.title': 'Configuración de IA', - 'settings.developerMenu.ai.desc': - 'Proveedores en la nube, modelos locales de Ollama y enrutamiento por carga de trabajo', - 'settings.developerMenu.screenAwareness.title': 'Conciencia de pantalla', - 'settings.developerMenu.screenAwareness.desc': - 'Permisos de captura de pantalla, política de supervisión y controles de sesión', - 'settings.developerMenu.messagingChannels.title': 'Canales de mensajería', - 'settings.developerMenu.messagingChannels.desc': - 'Configura los modos de autenticación de Telegram/Discord y el enrutamiento de canal predeterminado', - 'settings.developerMenu.tools.title': 'Herramientas', - 'settings.developerMenu.tools.desc': - 'Activa o desactiva las capacidades que OpenHuman puede usar en tu nombre', - 'settings.developerMenu.agentChat.title': 'Chat del agente', - 'settings.developerMenu.agentChat.desc': - 'Prueba conversaciones del agente con ajustes de modelo y temperatura', - 'settings.developerMenu.devWorkflow.title': 'Dev Workflow', - 'settings.developerMenu.devWorkflow.desc': - 'Autonomous agent that picks your GitHub issues and raises PRs on a schedule', - 'settings.developerMenu.devWorkflow.panelDesc': - 'Configure an autonomous developer agent that picks GitHub issues assigned to you and raises pull requests automatically on a schedule.', - 'settings.devWorkflow.githubRepository': 'GitHub Repository', - 'settings.devWorkflow.loadingRepositories': 'Loading repositories...', - 'settings.devWorkflow.selectRepository': 'Select a repository', - 'settings.devWorkflow.privateTag': '(private)', - 'settings.devWorkflow.detectingForkInfo': 'Detecting fork info...', - 'settings.devWorkflow.forkDetected': 'Fork detected', - 'settings.devWorkflow.upstream': 'Upstream:', - 'settings.devWorkflow.forkPrNote': 'PRs will be raised against the upstream repository.', - 'settings.devWorkflow.notForkNote': - 'Not a fork. PRs will be raised against this repository directly.', - 'settings.devWorkflow.targetBranch': 'Target Branch', - 'settings.devWorkflow.targetBranchNote': 'PRs will be raised against this branch', - 'settings.devWorkflow.loadingBranches': 'Loading branches...', - 'settings.devWorkflow.runFrequency': 'Run Frequency', - 'settings.devWorkflow.runFrequencyNote': - 'How often the agent should check for issues and raise PRs.', - 'settings.devWorkflow.updateConfiguration': 'Update Configuration', - 'settings.devWorkflow.saveConfiguration': 'Save Configuration', - 'settings.devWorkflow.remove': 'Remove', - 'settings.devWorkflow.saved': 'Saved', - 'settings.devWorkflow.activeConfiguration': 'Active Configuration', - 'settings.devWorkflow.activeConfigRepository': 'Repository:', - 'settings.devWorkflow.activeConfigUpstream': 'Upstream:', - 'settings.devWorkflow.activeConfigTargetBranch': 'Target branch:', - 'settings.devWorkflow.activeConfigSchedule': 'Schedule:', - 'settings.devWorkflow.enabled': 'Enabled', - 'settings.devWorkflow.paused': 'Paused', - 'settings.skillsRunner.scheduleEnabled': 'Enabled', - 'settings.skillsRunner.scheduleDisabled': 'Paused', - 'settings.skillsRunner.scheduleToggleAria': 'Toggle schedule enabled', - 'settings.skillsRunner.schedule.history': 'History', - 'settings.skillsRunner.schedule.historyLoading': 'Loading history\u2026', - 'settings.skillsRunner.schedule.historyEmpty': 'No runs yet for this schedule.', - 'settings.skillsRunner.schedule.historyNoOutput': 'No output captured.', - 'settings.skillsRunner.schedule.active': 'Active', - 'settings.skillsRunner.schedule.lastRunLabel': 'last:', - 'settings.devWorkflow.nextRun': 'Next run', - 'settings.devWorkflow.lastRun': 'Last run', - 'settings.devWorkflow.runNow': 'Run now', - 'settings.devWorkflow.running': 'Running…', - 'settings.devWorkflow.recentRuns': 'Recent runs', - 'settings.devWorkflow.cronSaveError': 'Failed to save configuration', - 'settings.devWorkflow.lastOutput': 'Last output', - 'settings.devWorkflow.noOutput': 'No output captured', - 'settings.devWorkflow.runningStatus': - 'Agent is running — picking an issue and working on a fix...', - 'settings.devWorkflow.errorNotConnected': - 'GitHub is not connected. Please connect GitHub via Settings > Advanced > Composio first.', - 'settings.devWorkflow.errorToolNotEnabled': - 'GITHUB_LIST_REPOSITORIES_FOR_THE_AUTHENTICATED_USER tool is not enabled on this backend. Please ask your admin to enable it in the Composio integration (backend#842).', - 'settings.devWorkflow.errorNotAuthenticated': 'Not authenticated. Please sign in first.', - 'settings.devWorkflow.errorNoRepositories': 'No repositories found for this GitHub account.', - 'settings.devWorkflow.schedule.every30min': 'Every 30 minutes', - 'settings.devWorkflow.schedule.everyHour': 'Every hour', - 'settings.devWorkflow.schedule.every2hours': 'Every 2 hours', - 'settings.devWorkflow.schedule.every6hours': 'Every 6 hours', - 'settings.devWorkflow.schedule.onceDaily': 'Once daily (9 AM)', - 'settings.developerMenu.cronJobs.title': 'Tareas cron', - 'settings.developerMenu.cronJobs.desc': - 'Ver y configurar tareas programadas para habilidades en tiempo de ejecución', - 'settings.developerMenu.localModelDebug.title': 'Depuración del modelo local', - 'settings.developerMenu.localModelDebug.desc': - 'Configuración de Ollama, descargas de recursos, pruebas de modelo y diagnósticos', - 'settings.developerMenu.webhooks.title': 'Ganchos web', - 'settings.developerMenu.webhooks.desc': - 'Inspecciona registros de webhooks en tiempo de ejecución y solicitudes capturadas', - 'settings.developerMenu.eventLog.title': 'Event Log', - 'settings.developerMenu.eventLog.desc': - 'Live colour-coded stream of all agent, tool, and system events', - 'settings.developerMenu.eventLog.allTypes': 'All types', - 'settings.developerMenu.eventLog.filterAgent': 'Filter...', - 'settings.developerMenu.eventLog.download': 'Download', - 'settings.developerMenu.eventLog.events': 'events', - 'settings.developerMenu.eventLog.live': 'Live', - 'settings.developerMenu.eventLog.disconnected': 'Disconnected', - 'settings.developerMenu.eventLog.waiting': 'Waiting for events...', - 'settings.developerMenu.eventLog.notConnected': 'Not connected to core', - 'settings.developerMenu.eventLog.jumpToLatest': 'Jump to latest', - 'settings.developerMenu.eventLog.badge.tool': 'TOOL', - 'settings.developerMenu.eventLog.badge.agent': 'AGENT', - 'settings.developerMenu.eventLog.badge.info': 'INFO', - 'settings.developerMenu.eventLog.badge.mem': 'MEM', - 'settings.developerMenu.eventLog.badge.chan': 'CHAN', - 'settings.developerMenu.eventLog.badge.cron': 'CRON', - 'settings.developerMenu.eventLog.badge.hook': 'HOOK', - 'settings.developerMenu.eventLog.badge.warn': 'WARN', - 'settings.developerMenu.eventLog.badge.skill': 'SKILL', - 'settings.developerMenu.eventLog.badge.comp': 'COMP', - 'settings.developerMenu.eventLog.badge.mcp': 'MCP', - 'settings.developerMenu.intelligence.title': 'Inteligencia', - 'settings.developerMenu.intelligence.desc': - 'Espacio de trabajo de memoria, motor subconsciente, sueños y ajustes', - 'settings.developerMenu.notificationRouting.title': 'Enrutamiento de notificaciones', - 'settings.developerMenu.notificationRouting.desc': - 'Puntuación de importancia con IA y escalado al orquestador para alertas de integración', - 'settings.developerMenu.composeioTriggers.title': 'Disparadores de ComposeIO', - 'settings.developerMenu.composeioTriggers.desc': - 'Ver historial y archivo de disparadores de ComposeIO', - 'settings.developerMenu.composioRouting.title': 'Enrutamiento de Composio (modo directo)', - 'settings.developerMenu.composioRouting.desc': - 'Usa tu propia clave API de Composio y enruta llamadas directamente a backend.composio.dev', - 'settings.developerMenu.integrationTriggers.title': 'Disparadores de integración', - 'settings.developerMenu.integrationTriggers.desc': - 'Configura los ajustes de triaje de IA para disparadores de integración de Composio', - 'settings.appearance.menuDesc': 'Elige claro, oscuro o igualar el tema del sistema', - 'settings.mascot.active': 'Activo', - 'settings.mascot.characterDesc': 'Descripción del personaje', - 'settings.mascot.characterHeading': 'Encabezado del personaje', - // TODO: translate custom GIF mascot strings. - 'settings.mascot.customGifError': - 'Introduzca una ruta HTTPS .gif URL, loopback HTTP .gif URL, file:// .gif URL o ruta .gif local.', - 'settings.mascot.customGifHeading': 'Avatar GIF personalizado', - 'settings.mascot.customGifLabel': 'Avatar GIF personalizado URL', - 'settings.mascot.colorDesc': 'Descripción del color', - 'settings.mascot.colorHeading': 'Encabezado del color', - 'settings.mascot.loadingLibrary': 'Cargando biblioteca de OpenHuman…', - 'settings.mascot.localDefault': 'OpenHuman local (predeterminado)', - 'settings.mascot.menuTitle': 'Mascota', - 'settings.mascot.menuDesc': 'Elige el color de la mascota usado en toda la app', - 'settings.mascot.noCharacters': 'Aún no hay personajes de OpenHuman disponibles', - 'settings.mascot.noColorVariants': 'Sin variantes de color', - 'settings.mascot.voice.current': 'actual', - 'settings.mascot.voice.customDesc': - 'Encuentra los ID de voz en api.elevenlabs.io/v1/voices o en tu panel de ElevenLabs. Solo se almacena el ID — tu clave de API permanece en el backend.', - 'settings.mascot.voice.customHeading': 'ID de voz personalizado', - 'settings.mascot.voice.customOption': 'Otro (pegar ID de voz)…', - 'settings.mascot.voice.desc': - 'Elige la voz de ElevenLabs que la mascota usa para las respuestas habladas. Filtra por género, elige de la lista curada, pega un ID personalizado, o deja que la app elija una voz que coincida con el idioma de la interfaz.', - 'settings.mascot.voice.genderFemale': 'Femenino', - 'settings.mascot.voice.genderHeading': 'Género de la voz', - 'settings.mascot.voice.genderMale': 'Masculino', - 'settings.mascot.voice.heading': 'Voz', - 'settings.mascot.voice.preset': 'Preajuste de voz', - 'settings.mascot.voice.presetHeading': 'Preajuste de voz', - 'settings.mascot.voice.preview': 'Vista previa de voz', - 'settings.mascot.voice.previewError': 'Falló la vista previa de voz', - 'settings.mascot.voice.previewing': 'Reproduciendo vista previa…', - 'settings.mascot.voice.reset': 'Restablecer al predeterminado', - 'settings.mascot.voice.useLocaleDefault': 'Coincidir con el idioma de la app', - 'settings.mascot.voice.useLocaleDefaultDesc': - 'Elegir automáticamente una voz para el idioma de la interfaz actual.', - 'settings.memoryWindow.balanced.badge': 'Recomendado', - 'settings.memoryWindow.balanced.hint': - 'Predeterminado sensato — buena continuidad sin quemar tokens extra en cada ejecución.', - 'settings.memoryWindow.balanced.label': 'Equilibrado', - 'settings.memoryWindow.description': - 'Cuánto contexto recordado inyecta OpenHuman en cada nueva ejecución del agente. Ventanas más grandes parecen más conscientes de conversaciones pasadas, pero usan más tokens — y cuestan más — en cada ejecución.', - 'settings.memoryWindow.extended.badge': 'Más contexto', - 'settings.memoryWindow.extended.hint': - 'Más memoria a largo plazo inyectada en cada ejecución. Mayor coste de tokens por turno.', - 'settings.memoryWindow.extended.label': 'Extendido', - 'settings.memoryWindow.maximum.badge': 'Mayor coste', - 'settings.memoryWindow.maximum.hint': - 'La ventana segura más grande. Mejor continuidad, factura de tokens significativamente mayor en cada ejecución.', - 'settings.memoryWindow.maximum.label': 'Máximo', - 'settings.memoryWindow.minimal.badge': 'Más barato', - 'settings.memoryWindow.minimal.hint': - 'Ventana de memoria más pequeña. La más barata, rápida y con menor continuidad entre ejecuciones.', - 'settings.memoryWindow.minimal.label': 'Mínimo', - 'settings.memoryWindow.title': 'Ventana de memoria a largo plazo', - 'settings.screenIntel.permissions.accessibility': 'Accesibilidad', - 'settings.screenIntel.permissions.grantHint': 'Sugerencia de permiso', - 'settings.screenIntel.permissions.inputMonitoring': 'Monitoreo de entrada', - 'settings.screenIntel.permissions.macosAppliesPrivacy': 'macOS aplica privacidad', - 'settings.screenIntel.permissions.openInputMonitoring': 'Solicitando…', - 'settings.screenIntel.permissions.refreshStatus': 'Actualizando…', - 'settings.screenIntel.permissions.refreshing': 'Actualizando…', - 'settings.screenIntel.permissions.requestAccessibility': 'Solicitando…', - 'settings.screenIntel.permissions.requestScreenRecording': 'Solicitando…', - 'settings.screenIntel.permissions.requesting': 'Solicitando…', - 'settings.screenIntel.permissions.restartRefresh': 'Reiniciando core…', - 'settings.screenIntel.permissions.restartingCore': 'Reiniciando core…', - 'settings.screenIntel.permissions.screenRecording': 'Grabación de pantalla', - 'settings.screenIntel.permissions.title': 'Permisos', - 'skills.card.moreActions': 'Más acciones', - 'skills.create.allowedTools': 'Herramientas permitidas', - 'skills.create.author': 'Autor', - 'skills.create.authorPlaceholder': 'Tu nombre', - 'skills.create.commaSeparated': '(separado por comas)', - 'skills.create.createBtn': 'Crear habilidad', - 'skills.create.createError': 'No se pudo crear el skill', - 'skills.create.creating': 'Creando…', - 'skills.create.description': 'Descripción', - 'skills.create.descriptionPlaceholder': '¿Qué hace este skill?', - 'skills.create.optional': '(optional)', - 'skills.create.inputs.heading': 'Inputs', - 'skills.create.inputs.help': - 'Declare parameters the skill needs. The Skills Runner will render a form for these at run time.', - 'skills.create.inputs.add': 'Add input', - 'skills.create.inputs.row.name': 'Input name', - 'skills.create.inputs.row.namePlaceholder': 'e.g. repo', - 'skills.create.inputs.row.nameError': - 'Letters, digits, underscores, and dashes only; must start with a letter.', - 'skills.create.inputs.row.description': 'Input description', - 'skills.create.inputs.row.descriptionPlaceholder': 'What goes in this field?', - 'skills.create.inputs.row.type': 'Type', - 'skills.create.inputs.row.required': 'Required', - 'skills.create.inputs.row.remove': 'Remove input', - 'skills.create.inputs.type.string': 'Text', - 'skills.create.inputs.type.integer': 'Number', - 'skills.create.inputs.type.boolean': 'Yes / No', - 'skills.create.license': 'Licencia', - 'skills.create.name': 'Nombre', - 'skills.create.namePlaceholder': 'p. ej. Trade Journal', - 'skills.create.scope': 'Alcance', - 'skills.create.scopeProjectHint': '/.openhuman/habilidades/', - 'skills.create.scopeUserHint': - 'Se escribe en ~/.openhuman/skills//SKILL.md — disponible en todos los espacios de trabajo.', - 'skills.create.slugLabel': 'Etiqueta de slug', - 'skills.create.subtitle': 'HABILIDAD.md', - 'skills.create.tags': 'Etiquetas', - 'skills.create.title': 'Nueva habilidad', - 'skills.detail.allowedTools': 'Herramientas permitidas', - 'skills.detail.author': 'Autor', - 'skills.detail.bundledResources': 'Recursos incluidos', - 'skills.detail.closeAriaLabel': 'Cerrar detalles del skill', - 'skills.detail.location': 'Ubicación', - 'skills.detail.noBundledResources': 'Sin recursos incluidos.', - 'skills.detail.tags': 'Etiquetas', - 'skills.detail.warnings': 'Advertencias', - 'skills.install.fetchLog': 'Obtener registro', - 'skills.install.installBtn': 'Instalando…', - 'skills.install.installComplete': 'Instalación completa', - 'skills.install.installing': 'Instalando…', - 'skills.install.parseWarnings': 'Advertencias de análisis', - 'skills.install.rawError': 'Error sin procesar', - 'skills.install.timeoutHint': '(segundos, opcional)', - 'skills.install.timeoutLabel': 'Etiqueta de tiempo límite', - 'skills.install.title': 'Instalar habilidad desde URL', - 'skills.install.urlLabel': 'URL de la habilidad', - 'skills.meetingBots.bannerDesc': 'Descripción del banner', - 'skills.meetingBots.bannerTitle': 'Título del banner', - 'skills.meetingBots.busyTitle': 'OpenHuman está ocupado', - 'skills.meetingBots.comingSoon': 'Próximamente', - 'skills.meetingBots.couldNotStartTitle': 'No se pudo iniciar OpenHuman', - 'skills.meetingBots.displayName': 'Nombre de visualización', - 'skills.meetingBots.failedToStart': 'No se pudo iniciar OpenHuman.', - 'skills.meetingBots.joiningMessage': 'Debería aparecer como participante en unos segundos.', - 'skills.meetingBots.joiningTitle': 'OpenHuman se está uniendo a la reunión', - 'skills.meetingBots.meetingLink': 'Enlace de la reunión', - 'skills.meetingBots.modalAriaLabel': 'Enviar OpenHuman a una reunión', - 'skills.meetingBots.modalDesc': 'Descripción del modal', - 'skills.meetingBots.modalTitle': 'Enviar OpenHuman a una reunión', - 'skills.meetingBots.newBadge': 'Nuevo', - 'skills.meetingBots.sendTo': 'Enviar a', - 'skills.meetingBots.starting': 'Iniciando…', - 'skills.resource.preview.closeAriaLabel': 'Cerrar vista previa', - 'skills.resource.preview.failed': 'Vista previa fallida', - 'skills.resource.preview.loading': 'Cargando vista previa…', - 'skills.resource.tree.empty': 'Sin recursos incluidos.', - 'skills.search.placeholder': 'Marcador de posición', - 'skills.setup.autocomplete.acceptKey': 'Tecla de aceptación', - 'skills.setup.autocomplete.activeDesc': 'Descripción activa', - 'skills.setup.autocomplete.activeTitle': 'Autocompletado está activo', - 'skills.setup.autocomplete.customizeSettings': 'Personalizar configuración', - 'skills.setup.autocomplete.debounce': 'rebote', - 'skills.setup.autocomplete.description': 'Descripción', - 'skills.setup.autocomplete.enableBtn': 'Activando...', - 'skills.setup.autocomplete.enableError': 'No se pudo activar el autocompletado', - 'skills.setup.autocomplete.enabling': 'Activando...', - 'skills.setup.autocomplete.notSupported': 'No compatible', - 'skills.setup.autocomplete.stepEnable': 'Activar completados en línea', - 'skills.setup.autocomplete.stepSuccess': 'Listo para usar', - 'skills.setup.autocomplete.stylePreset': 'Estilo predeterminado', - 'skills.setup.autocomplete.stylePresetValue': 'Equilibrado (configurable después)', - 'skills.setup.autocomplete.title': 'Autocompletado de texto', - 'skills.setup.screenIntel.activeDesc': 'Descripción activa', - 'skills.setup.screenIntel.activeTitle': 'Inteligencia de pantalla está activada', - 'skills.setup.screenIntel.advancedSettings': 'Configuración avanzada', - 'skills.setup.screenIntel.allGranted': 'Todos los permisos otorgados', - 'skills.setup.screenIntel.captureMode': 'Modo de captura', - 'skills.setup.screenIntel.captureModeValue': 'Todas las ventanas (configurable después)', - 'skills.setup.screenIntel.deniedHint': - 'Después de otorgar permisos en Configuración del sistema, haz clic abajo para reiniciar y aplicar los cambios.', - 'skills.setup.screenIntel.enableBtn': 'Activando...', - 'skills.setup.screenIntel.enableDesc': 's en tu pantalla y añade contexto útil a tu agente', - 'skills.setup.screenIntel.enableError': 'No se pudo activar la Inteligencia de pantalla', - 'skills.setup.screenIntel.enabling': 'Activando...', - 'skills.setup.screenIntel.grant': 'Abriendo...', - 'skills.setup.screenIntel.granted': 'Otorgado', - 'skills.setup.screenIntel.macosOnly': 'Solo macOS', - 'skills.setup.screenIntel.opening': 'Abriendo...', - 'skills.setup.screenIntel.panicHotkey': 'Tecla de pánico', - 'skills.setup.screenIntel.permAccessibility': 'Accesibilidad', - 'skills.setup.screenIntel.permInputMonitoring': 'Monitoreo de entrada', - 'skills.setup.screenIntel.permScreenRecording': 'Grabación de pantalla', - 'skills.setup.screenIntel.permissionsDesc': 'Descripción de permisos', - 'skills.setup.screenIntel.refreshStatus': 'Actualizar estado', - 'skills.setup.screenIntel.restartRefresh': 'Reiniciando...', - 'skills.setup.screenIntel.restarting': 'Reiniciando...', - 'skills.setup.screenIntel.stepEnable': 'Activar el skill', - 'skills.setup.screenIntel.stepPermissions': 'Otorgar permisos', - 'skills.setup.screenIntel.stepSuccess': 'Listo para usar', - 'skills.setup.screenIntel.title': 'Inteligencia de pantalla', - 'skills.setup.screenIntel.visionModel': 'Modelo de visión', - 'skills.setup.voice.activation': 'Activación', - 'skills.setup.voice.activeDescPrefix': 'fn', - 'skills.setup.voice.activeDescSuffix': 'fn', - 'skills.setup.voice.activeTitle': 'Inteligencia de voz está activa', - 'skills.setup.voice.customizeSettings': 'Personalizar configuración', - 'skills.setup.voice.downloadSttBtn': 'Descargar modelo STT', - 'skills.setup.voice.enableDesc': 'Descripción de activación', - 'skills.setup.voice.hotkey': 'Tecla de acceso rápido', - 'skills.setup.voice.startBtn': 'Iniciando...', - 'skills.setup.voice.startError': 'No se pudo iniciar el servidor de voz', - 'skills.setup.voice.starting': 'Iniciando...', - 'skills.setup.voice.stepEnable': 'Iniciar servidor de voz', - 'skills.setup.voice.stepSetup': 'Se requiere descarga del modelo', - 'skills.setup.voice.stepSuccess': 'Listo para usar', - 'skills.setup.voice.sttNotReady': 'Modelo de voz a texto no listo', - 'skills.setup.voice.sttNotReadyDesc': - 'La Inteligencia de voz requiere un modelo local de Whisper para transcripción. Descárgalo desde la configuración de Modelo local.', - 'skills.setup.voice.sttReady': 'Modelo de voz a texto listo', - 'skills.setup.voice.sttReturnHint': 'Sugerencia de retorno STT', - 'skills.setup.voice.title': 'Inteligencia de voz', - 'skills.uninstall.couldNotUninstall': 'No se pudo desinstalar', - 'skills.uninstall.description': - 'Esto elimina permanentemente el directorio de la habilidad y todos sus recursos incluidos. El agente dejará de verlo en el próximo turno.', - 'skills.uninstall.title': 'Desinstalar', - 'skills.uninstall.uninstallBtn': 'Desinstalar', - 'skills.uninstall.uninstalling': 'Desinstalando…', - 'upsell.global.limitMessage': 'Mejora tu plan o recarga créditos para continuar', - 'upsell.global.limitTitle': 'Tú', - 'upsell.global.nearLimitMessage': - 'Has usado el {pct}% de tu límite de uso. Mejora el plan para límites más altos.', - 'upsell.global.nearLimitTitle': 'Acercándote al límite de uso', - 'upsell.usageLimit.bodyBudget': - 'Has alcanzado tu límite semanal.{reset} Mejora tu plan o recarga créditos para evitar límites.', - 'upsell.usageLimit.bodyRate': - 'Has alcanzado tu límite de inferencia de 10 horas.{reset} Mejora para obtener límites más altos.', - 'upsell.usageLimit.heading': 'Límite de uso alcanzado', - 'upsell.usageLimit.notNow': 'Ahora no', - 'upsell.usageLimit.perWindow': '{amount}', - 'upsell.usageLimit.planIncludes': '{plan}', - 'upsell.usageLimit.resetsIn': 'Se restablece {time}.', - 'upsell.usageLimit.upgradePlan': 'Mejorar plan', - 'upsell.usageLimit.weeklyInference': '{amount}', - 'walkthrough.tooltip.letsGo': '¡Vamos!', - 'walkthrough.tooltip.next': 'Siguiente →', - 'walkthrough.tooltip.skip': 'Omitir tour', - 'walkthrough.tooltip.stepCounter': '{n} de {total}', - 'webhooks.activity.empty': 'Vacío', - 'webhooks.activity.title': 'Actividad reciente', - 'webhooks.composioHistory.empty': 'Vacío', - 'webhooks.composioHistory.metadataId': 'ID de metadatos', - 'webhooks.composioHistory.metadataUuid': 'UUID de metadatos', - 'webhooks.composioHistory.payload': 'Carga útil', - 'webhooks.composioHistory.title': 'Historial de disparadores de Composio', - 'webhooks.tunnels.active': 'Activo', - 'webhooks.tunnels.createFailed': 'No se pudo crear el túnel', - 'webhooks.tunnels.creating': 'Creando...', - 'webhooks.tunnels.deleteFailed': 'No se pudo eliminar el túnel', - 'webhooks.tunnels.descriptionPlaceholder': 'Descripción (opcional)', - 'webhooks.tunnels.echo': 'eco', - 'webhooks.tunnels.empty': 'Vacío', - 'webhooks.tunnels.enableEcho': 'Activar echo', - 'webhooks.tunnels.inactive': 'Inactivo', - 'webhooks.tunnels.namePlaceholder': 'Nombre del túnel (p. ej. telegram-bot)', - 'webhooks.tunnels.newTunnel': 'Nuevo túnel', - 'webhooks.tunnels.removeEcho': 'Eliminar echo', - 'webhooks.tunnels.title': 'Túneles de webhook', - 'webhooks.tunnels.toggleFailed': 'No se pudo alternar el echo', - 'composio.authExpired': 'Autenticación caducada', - 'composio.reconnect': 'Reconectar', - 'composio.previewBadge': 'Vista previa', - 'composio.previewTooltip': - 'La integración del agente estará disponible próximamente: puede conectarse, pero el agente aún no puede usar este kit de herramientas.', - 'composio.directModeRequiresKey': - 'Error al guardar. El modo Directo requiere una clave API no vacía.', - 'composio.notYetRouted': 'aún sin enrutar', - 'composio.triggers.loading': 'Cargando…', - 'conversations.taskKanban.todo': 'Pendiente', - 'settings.composio.loading': 'Cargando…', - 'settings.mascot.noCharactersAvailable': 'Aún no hay personajes de OpenHuman disponibles', - 'skills.uninstall.confirmTitle': '¿Desinstalar {name}?', - 'conversations.taskKanban.blocked': 'Bloqueado', - 'conversations.taskKanban.done': 'Completado', - 'conversations.taskKanban.pending': 'Pending', - 'conversations.taskKanban.working': 'Working', - 'conversations.taskKanban.awaitingApproval': 'Awaiting approval', - 'conversations.taskKanban.ready': 'Ready', - 'conversations.taskKanban.rejected': 'Rejected', - 'conversations.taskKanban.inProgress': 'En progreso', - 'intelligence.memoryChunk.detail.copiedHint': 'copiado', - 'settings.composio.notYetRouted': 'aún sin enrutar', - 'settings.localModel.download.manageExternal': 'Gestiona este modelo en tu runtime externo.', - 'settings.localModel.status.manageOllamaExternal': - 'Gestiona el proceso de Ollama y las descargas de modelos fuera de OpenHuman, luego vuelve a ejecutar los diagnósticos.', - 'settings.localModel.status.ollamaDocs': 'Documentación de Ollama', - 'settings.localModel.status.thenRetry': - 'para instrucciones de configuración, luego reintenta cuando tu runtime sea accesible.', - 'settings.appearance.title': 'Apariencia', - 'settings.appearance.themeHeading': 'Tema', - 'settings.appearance.themeAria': 'Tema', - 'settings.appearance.modeLight': 'Luz', - 'settings.appearance.modeLightDesc': 'Superficies brillantes, texto oscuro.', - 'settings.appearance.modeDark': 'oscuro', - 'settings.appearance.modeDarkDesc': - 'Las superficies oscuras son más agradables a la vista después del anochecer.', - 'settings.appearance.modeSystem': 'Sistema de partidos', - 'settings.appearance.modeSystemDesc': - 'Siga la configuración de apariencia de su sistema operativo.', - 'settings.appearance.helperText': - 'El modo oscuro cambia toda la aplicación (chat, configuración, paneles) a una paleta tenue. El "sistema de coincidencias" sigue la apariencia de su sistema operativo y se actualiza en vivo.', - 'settings.mascot.characterPreview': 'Vista previa', - 'settings.mascot.characterStates': 'estados', - 'settings.mascot.characterVisemes': 'visemas', - 'settings.mascot.colorAria': 'OpenHuman color', - 'settings.mascot.colorBlack': 'negro', - 'settings.mascot.colorBurgundy': 'Borgoña', - 'settings.mascot.colorCustom': 'Custom', - 'settings.mascot.colorNavy': 'Marina', - 'settings.mascot.primaryColor': 'Primary color', - 'settings.mascot.secondaryColor': 'Secondary color', - 'settings.mascot.colorYellow': 'amarillo', - 'settings.mascot.libraryUnavailable': 'Biblioteca OpenHuman no disponible', - 'settings.mascot.title': 'OpenHuman', - 'settings.developerMenu.mcpServer.title': 'MCP Servidor', - 'settings.developerMenu.mcpServer.desc': - 'Configure clientes MCP externos para conectarse a OpenHuman', - 'settings.developerMenu.autonomy.title': 'Autonomía del agente', - 'settings.developerMenu.autonomy.desc': - 'Límites de frecuencia de acciones de herramientas y umbrales de seguridad', - 'settings.mcpServer.title': 'MCP Servidor', - 'settings.mcpServer.toolsSectionTitle': 'Herramientas disponibles', - 'settings.mcpServer.toolsSectionDesc': - 'Herramientas expuestas a través del servidor stdio MCP cuando se ejecuta openhuman-core mcp', - 'settings.mcpServer.configSectionTitle': 'Configuración del cliente', - 'settings.mcpServer.configSectionDesc': - 'Seleccione su cliente MCP para generar el fragmento de configuración correcto', - 'settings.mcpServer.copySnippet': 'Copiar al portapapeles', - 'settings.mcpServer.copied': '¡Copiado!', - 'settings.mcpServer.openConfigFile': 'Abrir archivo de configuración', - 'settings.mcpServer.binaryPathNotFound': - 'OpenHuman binario no encontrado. Si se ejecuta desde el código fuente, compila con: cargo build --bin openhuman-core', - 'settings.mcpServer.openConfigError': 'No se pudo abrir el archivo de configuración', - 'settings.mcpServer.clientClaudeDesktop': 'Escritorio Claude', - 'settings.mcpServer.clientCursor': 'Cursor', - 'settings.mcpServer.clientCodex': 'Códice', - 'settings.mcpServer.clientZed': 'Zed', - 'settings.mcpServer.configFilePath': 'Archivo de configuración', - 'settings.mcpServer.clientSelectorAriaLabel': 'MCP selector de cliente', - 'settings.persona.title': 'Persona', - 'settings.persona.menuTitle': 'Persona', - 'settings.persona.menuDesc': - 'Name, personality, avatar, and voice — your assistant as one identity', - 'settings.persona.identityHeading': 'Identity', - 'settings.persona.identityDesc': - 'A display name and short description for your assistant. Shown in the app; does not change how the assistant reasons.', - 'settings.persona.displayNameLabel': 'Display name', - 'settings.persona.displayNamePlaceholder': 'e.g. Nova', - 'settings.persona.descriptionLabel': 'Description', - 'settings.persona.descriptionPlaceholder': 'e.g. A calm, concise assistant for my team.', - 'settings.persona.soul.heading': 'Personality (SOUL.md)', - 'settings.persona.soul.desc': - 'The personality prompt the assistant follows in every conversation. Edits are saved to your workspace and take effect on the next reply.', - 'settings.persona.soul.editorLabel': 'SOUL.md contents', - 'settings.persona.soul.reset': 'Reset to default', - 'settings.persona.soul.usingDefault': 'Using the bundled default', - 'settings.persona.soul.loadError': 'Could not load SOUL.md', - 'settings.persona.soul.saveError': 'Could not save SOUL.md', - 'settings.persona.soul.resetError': 'Could not reset SOUL.md', - 'settings.persona.appearanceHeading': 'Avatar & Voice', - 'settings.persona.appearanceDesc': - 'Mascot color, custom GIF avatar, and reply voice are configured in Mascot settings.', - 'settings.persona.openMascotSettings': 'Open Mascot settings', - 'settings.developerMenu.composio.title': 'Composio', - 'settings.developerMenu.composio.desc': - 'Modo de enrutamiento, activadores de integración y archivo de historial de activadores.', - 'settings.appearance.tabBarHeading': 'Barra de pestañas inferior', - 'settings.appearance.tabBarAlwaysShowLabels': 'Mostrar siempre etiquetas', - 'settings.appearance.tabBarAlwaysShowLabelsDesc': - 'Cuando está desactivado, las etiquetas solo aparecen al pasar el mouse o para la pestaña activa.', - 'common.breadcrumb': 'Miga de pan', - 'settings.betaBuild': 'Compilación beta: v{version}', - 'migration.vendor.openclaw': 'OpenClaw', - 'migration.vendor.hermes': 'Hermes Agent', - 'onboarding.apiKeys.openaiOauthHint': - 'Utilice ChatGPT Plus/Pro (suscripción) o una clave OpenAI API; no se requieren ambas.', - 'onboarding.apiKeys.openaiOauthOpening': 'Abriendo inicio de sesión…', - 'onboarding.apiKeys.finishSignIn': 'Finalizar el inicio de sesión en ChatGPT', - 'onboarding.apiKeys.orApiKey': 'o tecla API', - 'app.localAiDownload.expandAria': 'Ampliar el progreso de la descarga', - 'app.localAiDownload.collapseAria': 'Contraer el progreso de la descarga', - 'app.localAiDownload.dismissAria': 'Descartar notificación de descarga', - 'mobile.nav.ariaLabel': 'Navegación móvil', - 'progress.stepsAria': 'Pasos de progreso', - 'progress.stepAria': 'Paso {current} de {total}', - 'workspace.vaultsTitle': 'Bóvedas de conocimiento', - 'workspace.vaultsDesc': - 'Apunte a una carpeta local; Los archivos se fragmentan y reflejan en la memoria.', - 'calls.title': 'llamadas', - 'calls.comingSoonBody': - 'Próximamente llegarán las llamadas asistidas por IA. Manténganse al tanto.', - 'art.rotatingTetrahedronAria': 'Nave espacial giratoria de tetraedro invertido', - 'devOptions.sentryDisabled': '(sin identificación: Sentry deshabilitado en esta compilación)', - 'composio.expiredAuthorization': '{name} autorización vencida', - 'composio.expiredDescription': - 'Vuelva a conectarse para volver a habilitar las herramientas {name}. OpenHuman mantendrá esta integración no disponible hasta que actualice el acceso de OAuth.', - 'channels.telegram.remoteControlTitle': 'Control remoto (Telegram)', - 'channels.telegram.remoteControlBody': - 'Desde un chat Telegram permitido, envíe /status, /sessions, /new o /help. El enrutamiento de modelos todavía usa /model y /models.', - 'rewards.referralSection.retry': 'Reintentar', - 'settings.ai.plannerSummary': - 'Planificador: {sourceEvents} eventos de origen, {sent} enviados, {deduped} deduplicados.', - 'settings.ai.routeLabel': 'ruta: {route}', - 'settings.ai.latestSpend': 'Último gasto: {amount} en {time} ({action})', - 'settings.ai.topActions': 'Acciones principales', - 'settings.ai.noSpendRows': 'No se han cargado filas de gastos.', - 'settings.ai.topHours': 'Horas principales', - 'settings.ai.noHourlySpend': 'Aún no hay gasto por horas.', - 'settings.autocomplete.appFilter.app': 'Aplicación', - 'settings.autocomplete.appFilter.currentSuggestion': 'Sugerencia actual', - 'settings.autocomplete.appFilter.debounce': 'rebote', - 'settings.autocomplete.appFilter.enabled': 'Habilitado', - 'settings.autocomplete.appFilter.lastError': 'último error', - 'settings.autocomplete.appFilter.model': 'modelo', - 'settings.autocomplete.appFilter.phase': 'Fase', - 'settings.autocomplete.appFilter.platformSupported': 'Plataforma compatible', - 'settings.autocomplete.appFilter.running': 'corriendo', - 'settings.autocomplete.debug.acceptedPrefix': 'Aceptado: {value}', - 'settings.autocomplete.debug.acceptFailed': 'No se pudo aceptar la sugerencia', - 'settings.autocomplete.debug.alreadyRunning': - 'La función de autocompletar ya se está ejecutando.', - 'settings.autocomplete.debug.clearHistoryFailed': 'No se pudo borrar el historial', - 'settings.autocomplete.debug.didNotStart': 'La función de autocompletar no se inició.', - 'settings.autocomplete.debug.disabledInSettings': - 'Autocompletar está deshabilitado en la configuración. Habilítelo y guarde primero.', - 'settings.autocomplete.debug.fetchSuggestionFailed': 'No se pudo recuperar la sugerencia actual', - 'settings.autocomplete.debug.inspectFocusedElementFailed': - 'No se pudo inspeccionar el elemento enfocado', - 'settings.autocomplete.debug.loadSettingsFailed': - 'No se pudo cargar la configuración de autocompletar', - 'settings.autocomplete.debug.noSuggestionApplied': 'No se aplicó ninguna sugerencia.', - 'settings.autocomplete.debug.noSuggestionReturned': 'No se devolvió ninguna sugerencia.', - 'settings.autocomplete.debug.refreshStatusFailed': - 'No se pudo actualizar el estado de autocompletar', - 'settings.autocomplete.debug.saveAdvancedSettingsFailed': - 'No se pudo guardar la configuración avanzada', - 'settings.autocomplete.debug.startFailed': 'No se pudo iniciar el autocompletado', - 'settings.autocomplete.debug.stopFailed': 'No se pudo detener el autocompletado', - 'settings.autocomplete.debug.suggestionPrefix': 'Sugerencia: {value}', - 'settings.autocomplete.shared.none': 'Ninguno', - 'settings.autocomplete.shared.notApplicable': 'n/a', - 'settings.autocomplete.shared.unknown': 'Desconocido', - 'settings.billing.autoRecharge.expires': 'Vence {date}', - 'settings.billing.autoRecharge.spentThisWeek': '${spent} de ${limit} usados esta semana', - 'settings.localModel.deviceCapability.disabledLowercase': 'discapacitado', - 'settings.localModel.deviceCapability.presetDetails': - 'Chat: {chatModel} · Visión: {visionModel} · RAM objetivo: {targetRamGb} GB', - 'settings.localModel.download.capabilityChat': 'Charla', - 'settings.localModel.download.capabilityEmbedding': 'Incrustar', - 'settings.localModel.download.capabilityStt': 'STT', - 'settings.localModel.download.capabilityTts': 'TTS', - 'settings.localModel.download.capabilityVision': 'Visión', - 'settings.localModel.download.embeddingDimensions': 'Dimensiones: {dimensions}', - 'settings.localModel.download.embeddingModel': 'Modelo: {modelId}', - 'settings.localModel.download.embeddingVectors': 'Vectores: {count}', - 'settings.localModel.download.notAvailable': 'n/a', - 'settings.localModel.download.summaryHelper': - 'Llama a `openhuman.inference_summarize` a través del núcleo de Rust', - 'settings.localModel.download.transcript': 'Transcripción:', - 'settings.localModel.download.ttsOutput': 'Salida: {outputPath}', - 'settings.localModel.download.ttsVoice': 'Voz: {voiceId}', - 'settings.localModel.status.contextBelowMinimumBadge': - '{contextLength} ctx - debajo de {required} min', - 'settings.localModel.status.contextBelowMinimumTitle': - 'Rechazado: los tokens {contextLength} de la ventana de contexto están por debajo del mínimo de tokens {required} que requiere la capa de memoria. El truncamiento silencioso corrompería la recuperación.', - 'settings.localModel.status.contextOkBadge': '{contextLength}ctx ✓', - 'settings.localModel.status.contextOkTitle': - 'Los tokens {contextLength} de la ventana de contexto cumplen con el mínimo de la capa de memoria de tokens {required}.', - 'settings.localModel.status.contextUnknownBadge': 'ctx desconocido', - 'settings.localModel.status.contextUnknownTitle': - 'Ventana de contexto desconocida; No se pudo confirmar que cumpla con el mínimo de capa de memoria del token {required}.', - 'settings.localModel.status.expectedChat': 'Charla: {model}', - 'settings.localModel.status.expectedEmbedding': 'Incrustación: {model}', - 'settings.localModel.status.expectedVision': 'Visión: {model}', - 'settings.localModel.status.externalProcess': 'Proceso externo', - 'settings.localModel.status.notAvailable': 'n/a', - 'settings.mascot.customGifPlaceholder': 'https://example.com/avatar.gif', - 'settings.mascot.loadDetailError': 'No se pudo cargar la mascota.', - 'settings.mascot.loadLibraryError': 'No se pudo cargar la biblioteca de mascotas.', - 'settings.mascot.voice.customPlaceholder': 'por ej. 21m00Tcm4TlvDq8ikWAM', - 'settings.mascot.voice.previewText': "Hi, I'm your assistant. This is a voice preview.", - 'skills.channelIcon.discord': 'Discord', - 'skills.channelIcon.imessage': 'iMessage', - 'skills.channelIcon.telegram': 'Telegram', - 'skills.channelIcon.web': 'Web', - 'skills.channelIcon.yuanbao': 'Yuanbao', - 'skills.composio.poweredBy': 'Desarrollado por Composio', - 'skills.composio.staleStatusTitle': 'Las conexiones muestran un estado obsoleto', - 'skills.create.allowedToolsHelp': 'Representado en el frontmatter de SKILL.md como', - 'skills.create.allowedToolsPlaceholder': 'node_exec, buscar', - 'skills.create.licensePlaceholder': 'MIT', - 'skills.create.tagsPlaceholder': 'comercio, investigación', - 'skills.install.errors.alreadyInstalledHint': - 'Ya existe una habilidad con esta babosa en el espacio de trabajo. Elimínelo primero o cambie el frontmatter `metadata.id`/`name`.', - 'skills.install.errors.alreadyInstalledTitle': 'Habilidad ya instalada', - 'skills.install.errors.fetchFailedHint': - 'La solicitud no se completó correctamente. Verifique que URL apunte a un archivo público accesible y que el host haya devuelto una respuesta 2xx.', - 'skills.install.errors.fetchFailedTitle': 'Error de recuperación', - 'skills.install.errors.fetchTimedOutHint': - 'El host remoto no respondió a tiempo. Inténtelo de nuevo o aumente el tiempo de espera (1-600 s).', - 'skills.install.errors.fetchTimedOutTitle': 'Se agotó el tiempo de recuperación', - 'skills.install.errors.fetchTooLargeHint': - 'SKILL.md debe tener menos de 1 MiB. Divida los recursos empaquetados en archivos `references/` o `scripts/` en lugar de insertarlos.', - 'skills.install.errors.fetchTooLargeTitle': 'SKILL.md demasiado grande', - 'skills.install.errors.genericHint': - 'El servidor devolvió un error. El mensaje sin formato se muestra a continuación.', - 'skills.install.errors.genericTitle': 'No se pudo instalar la habilidad', - 'skills.install.errors.invalidSkillHint': - 'El frontmatter debe ser YAML válido con campos `nombre` y `descripción` no vacíos, terminados en `---`.', - 'skills.install.errors.invalidSkillTitle': 'SKILL.md no analizó', - 'skills.install.errors.invalidUrlHint': - 'Solo se permiten HTTPS URLs públicos. Los hosts privados, de bucle invertido y de metadatos están bloqueados.', - 'skills.install.errors.invalidUrlTitle': 'URL rechazado', - 'skills.install.errors.unsupportedUrlHint': - 'Sólo funcionan los enlaces directos `.md`. Para GitHub, enlace a un archivo (github.com/owner/repo/blob/.../SKILL.md): las raíces del árbol y del repositorio no están instaladas.', - 'skills.install.errors.unsupportedUrlTitle': 'Formulario URL no compatible', - 'skills.install.errors.writeFailedHint': - 'No se podía escribir en el directorio de habilidades del espacio de trabajo. Verifique los permisos del sistema de archivos para `/.openhuman/skills/`.', - 'skills.install.errors.writeFailedTitle': 'No se pudo escribir SKILL.md', - 'skills.install.fetchingPrefix': 'buscando', - 'skills.install.fetchingSuffix': - 'esto puede tardar hasta el tiempo de espera que haya configurado.', - 'skills.install.subtitleMiddle': 'sobre HTTPS y lo instala bajo', - 'skills.install.subtitlePrefix': 'Obtiene un solo', - 'skills.install.subtitleSuffix': - 'HTTPS solamente; Los hosts privados y de loopback están bloqueados.', - 'skills.install.successDiscovered': 'Descubrí {count} nuevas habilidades.', - 'skills.install.successNoNewIds': - 'Habilidad instalada, pero no aparecieron nuevos identificadores de habilidad; es posible que el catálogo ya contenga una habilidad con el mismo slug.', - 'skills.install.timeoutHelp': - 'El valor predeterminado es 60 segundos. Los valores fuera de 1-600 se bloquean en el lado del servidor.', - 'skills.install.timeoutInvalid': 'Debe ser un número entero entre 1 y 600.', - 'skills.install.timeoutPlaceholder': '60', - 'skills.install.urlHelpMiddle': 'archivo.', - 'skills.install.urlHelpPrefix': 'Enlace directo a un', - 'skills.install.urlHelpSuffix': 'URLs reescritura automática a', - 'skills.install.urlInvalidPrefix': 'URL debe ser un bien formado', - 'skills.install.urlInvalidSuffix': 'enlace.', - 'skills.install.urlPlaceholder': 'https://raw.githubusercontent.com/owner/repo/main/SKILL.md', - 'skills.meetingBots.platformComingSoon': 'El soporte de {label} llegará pronto.', - 'skills.meetingBots.platformHints.gmeet': 'meet.google.com/abc-defg-hij', - 'skills.meetingBots.platformHints.teams': 'equipos.microsoft.com/...', - 'skills.meetingBots.platformHints.zoom': 'zoom.us/j/...', - 'skills.meetingBots.platforms.gmeet': 'Google Conocer', - 'skills.meetingBots.platforms.teams': 'Equipos de Microsoft', - 'skills.meetingBots.platforms.zoom': 'Ampliar', - 'skills.meetingBots.soonSuffix': 'pronto', - 'skills.setup.screenIntel.permissionPathLabel': 'macOS aplica la privacidad a:', - 'settings.agentAccess.title': 'Agent OS access', - 'settings.agentAccess.menuDesc': - 'Control where the agent can read/write and whether it can use the shell.', - 'settings.agentAccess.loadError': 'Failed to load access settings', - 'settings.agentAccess.saveError': 'Failed to save access settings', - 'settings.agentAccess.saved': 'Saved — applies on your next message.', - 'settings.agentAccess.desktopOnly': 'Access settings are only available in the desktop app.', - 'settings.agentAccess.loading': 'Loading…', - 'settings.agentAccess.accessMode': 'Access mode', - 'settings.agentAccess.tier.readonly.title': 'Read-only', - 'settings.agentAccess.tier.readonly.desc': - 'Reads files and runs read-only commands to explore — but never writes, edits, or runs anything that changes state.', - 'settings.agentAccess.tier.supervised.title': 'Ask before edit', - 'settings.agentAccess.tier.supervised.desc': - 'Creates new files freely, but asks for your approval before editing an existing file, running a command, reaching the network, or installing anything.', - 'settings.agentAccess.tier.full.title': 'Full access', - 'settings.agentAccess.tier.full.desc': - 'Runs commands with your full user account access — it can read/write anywhere allowed, except credential and system stores. Destructive commands, network access, and installs still ask for approval.', - 'settings.agentAccess.defaultTag': '(default)', - 'settings.agentAccess.fullWarning': - '⚠ Full access runs commands with your full account access and is not sandboxed. Only enable it when you trust the agent with this machine. Credential and system directories stay blocked, and destructive, network, and install actions still ask for approval.', - 'settings.agentAccess.confine.label': 'Confine to workspace', - 'settings.agentAccess.confine.desc': - 'Restrict the agent to the workspace directory (plus any granted folders), whichever access mode is selected. When off, it can reach anywhere your user can — except the always-blocked credential and system directories.', - 'settings.agentAccess.grantedFolders': 'Granted folders', - 'settings.agentAccess.alwaysAllow': 'Always-allowed tools', - 'settings.agentAccess.alwaysAllowDesc': - 'Tools you marked "Always allow" in chat run without asking. Remove one to be prompted again.', - 'settings.agentAccess.alwaysAllowNone': 'No always-allowed tools yet.', - 'settings.agentAccess.grantedDesc': - 'Folders the agent may read and write, in addition to the workspace. Credential stores (~/.ssh, ~/.gnupg, ~/.aws, keychains) and system directories (/etc, /System, C:\\Windows, …) are always blocked, even inside a granted folder.', - 'settings.agentAccess.noneGranted': 'No folders granted.', - 'settings.agentAccess.readWrite': 'read + write', - 'settings.agentAccess.readOnly': 'read-only', - 'settings.agentAccess.remove': 'Remove', - 'settings.agentAccess.pathPlaceholder': 'Ruta absoluta de la carpeta', - 'settings.agentAccess.accessLevelLabel': 'Access level', - 'settings.agentAccess.add': 'Add', - 'settings.agentAccess.saving': 'Saving…', - 'settings.agentAccess.changesApply': 'Changes apply on your next message.', - 'skills.tabs.runners': 'Runners', - 'settings.developerMenu.skillsRunner.title': 'Skills Runner', - 'settings.developerMenu.skillsRunner.desc': - 'Run any bundled skill ad-hoc — fill its inputs and fire a background autonomous run', - 'settings.developerMenu.skillsRunner.panelDesc': - 'Pick a bundled skill, fill in its declared inputs, and fire a fire-and-forget background run. Use Dev Workflow instead if you want a cron-scheduled recurring job.', - 'settings.skillsRunner.skill': 'Skill', - 'settings.skillsRunner.selectSkill': 'Select a skill…', - 'settings.skillsRunner.loadingSkills': 'Loading skills…', - 'settings.skillsRunner.loadingDescription': 'Loading skill inputs…', - 'settings.skillsRunner.noInputs': 'This skill declares no inputs.', - 'settings.skillsRunner.placeholder.required': 'required', - 'settings.skillsRunner.runNow': 'Run now', - 'settings.skillsRunner.starting': 'Starting…', - 'settings.skillsRunner.started': 'Started — run id:', - 'settings.skillsRunner.logPath': 'Log:', - 'settings.skillsRunner.error.listSkills': 'Failed to load skills:', - 'settings.skillsRunner.error.describe': 'Failed to load inputs:', - 'settings.skillsRunner.error.missingRequired': 'Missing required input(s):', - 'settings.skillsRunner.error.run': 'Run failed to start:', - 'settings.skillsRunner.error.preflightGate': 'Preflight gate failed', - 'settings.skillsRunner.schedule.heading': 'Schedule (recurring)', - 'settings.skillsRunner.schedule.help': - 'Save this skill + inputs as a recurring cron job. The agent will call run_skill at each tick.', - 'settings.skillsRunner.schedule.frequency': 'Frequency', - 'settings.skillsRunner.schedule.every30min': 'Every 30 minutes', - 'settings.skillsRunner.schedule.everyHour': 'Every hour', - 'settings.skillsRunner.schedule.every2hours': 'Every 2 hours', - 'settings.skillsRunner.schedule.every6hours': 'Every 6 hours', - 'settings.skillsRunner.schedule.onceDaily': 'Once daily (9:00)', - 'settings.skillsRunner.schedule.save': 'Save schedule', - 'settings.skillsRunner.schedule.saving': 'Saving…', - 'settings.skillsRunner.schedule.saved': 'Schedule saved.', - 'settings.skillsRunner.schedule.error': 'Schedule save failed:', - 'settings.skillsRunner.schedule.loadingJobs': 'Loading existing schedules…', - 'settings.skillsRunner.schedule.noJobs': 'No schedules saved for this skill yet.', - 'settings.skillsRunner.schedule.existing': 'Scheduled jobs for this skill:', - 'settings.skillsRunner.schedule.runNow': 'Run', - 'settings.skillsRunner.schedule.remove': 'Remove', - 'settings.skillsRunner.recentRuns.headingForSkill': 'Recent runs for this skill', - 'settings.skillsRunner.recentRuns.headingAll': 'Recent skill runs (all)', - 'settings.skillsRunner.recentRuns.refresh': 'Refresh', - 'settings.skillsRunner.recentRuns.loading': 'Loading recent runs…', - 'settings.skillsRunner.recentRuns.empty': 'No recent runs.', - 'settings.skillsRunner.viewer.loading': 'Loading log…', - 'settings.skillsRunner.viewer.tailing': 'Live tailing', - 'settings.skillsRunner.viewer.fetching': 'fetching', - 'settings.skillsRunner.viewer.error': 'Log read failed:', - 'settings.skillsRunner.repoPicker.loading': 'Loading repositories…', - 'settings.skillsRunner.repoPicker.select': 'Select a repository…', - 'settings.skillsRunner.repoPicker.empty': - 'No repositories returned. Connect GitHub via Composio to populate this list.', - 'settings.skillsRunner.repoPicker.notConnected': - 'GitHub isn’t connected via Composio. Connect it under Skills → Composio first.', - 'settings.skillsRunner.repoPicker.privateTag': '(private)', - 'settings.skillsRunner.branchPicker.needRepo': 'Pick a repo first…', - 'settings.skillsRunner.branchPicker.loading': 'Loading branches…', - 'settings.skillsRunner.branchPicker.select': 'Select a branch…', - 'settings.modelHealth.title': 'Model Health', - 'settings.modelHealth.desc': - 'Per-model quality, hallucination rate, and cost comparison across active models', - 'settings.modelHealth.allStatuses': 'All statuses', - 'settings.modelHealth.models': 'models', - 'settings.modelHealth.loading': 'Loading model data...', - 'settings.modelHealth.empty': 'No models registered', - 'settings.modelHealth.col.model': 'Model', - 'settings.modelHealth.col.quality': 'Quality', - 'settings.modelHealth.col.halluc': 'Halluc. Rate', - 'settings.modelHealth.col.cost': 'Cost / 1M out', - 'settings.modelHealth.col.agents': 'Agents', - 'settings.modelHealth.col.status': 'Status', - 'settings.modelHealth.badge.keep': 'Keep', - 'settings.modelHealth.badge.replace': 'Replace', - 'settings.modelHealth.badge.staging': 'Staging test', - 'settings.modelHealth.badge.vision': 'Vision only', - 'settings.modelHealth.swap': 'Swap?', - 'settings.modelHealth.modal.title': 'Replace Model?', - 'settings.modelHealth.modal.hallucRate': 'Hallucination rate', - 'settings.modelHealth.modal.cancel': 'Cancel', - 'settings.modelHealth.modal.apply': 'Apply Replacement', - 'settings.modelHealth.tag.cheaper': 'CHEAPER', - 'settings.modelHealth.tag.better': 'BETTER', - // Task sources (#task-sources) - 'settings.taskSources.title': 'Task Sources', - 'settings.taskSources.subtitle': 'Pull tasks from your tools onto the agent todo board', - 'settings.taskSources.description': - 'Collect work items from GitHub, Notion, Linear, and ClickUp, enrich them, and route them onto the agent todo board.', - 'settings.taskSources.connectHint': - 'Task sources use your connected accounts. Connect them under Integrations first.', - 'settings.taskSources.disabledBanner': - 'Task sources are disabled in settings. Enable them to poll automatically.', - 'settings.taskSources.loadError': 'Failed to load task sources', - 'settings.taskSources.addTitle': 'Add a task source', - 'settings.taskSources.provider': 'Provider', - 'settings.taskSources.name': 'Name (optional)', - 'settings.taskSources.namePlaceholder': 'e.g. My open issues', - 'settings.taskSources.github.repo': 'Repository (owner/name, optional)', - 'settings.taskSources.github.labels': 'Labels (comma-separated)', - 'settings.taskSources.notion.database': 'Database (board) ID', - 'settings.taskSources.linear.team': 'Team ID (optional)', - 'settings.taskSources.clickup.team': 'Workspace (team) ID (optional)', - 'settings.taskSources.assignedToMe': 'Only items assigned to me', - 'settings.taskSources.add': 'Add source', - 'settings.taskSources.adding': 'Adding…', - 'settings.taskSources.preview': 'Preview', - 'settings.taskSources.previewResult': '{count} task(s) match this filter', - 'settings.taskSources.fetchNow': 'Fetch now', - 'settings.taskSources.fetching': 'Fetching…', - 'settings.taskSources.fetchResult': 'Routed {routed} of {fetched} task(s)', - 'settings.taskSources.configured': 'Configured sources', - 'settings.taskSources.empty': 'No task sources configured yet.', - 'settings.taskSources.proactive': 'Proactive', - 'settings.taskSources.lastFetch': 'Last fetch', - 'settings.taskSources.never': 'Never', - 'settings.taskSources.statusEnabled': 'Enabled', - 'settings.taskSources.statusDisabled': 'Disabled', - 'settings.taskSources.enable': 'Enable', - 'settings.taskSources.disable': 'Disable', - 'settings.taskSources.remove': 'Remove', - 'settings.taskSources.removeConfirm': - 'Remove this task source? All ingested task history will be deleted and cannot be undone.', - - 'settings.taskSources.refresh': 'Refresh', - // Task sources provider labels (#task-sources) - 'settings.taskSources.providers.github': 'GitHub', - 'settings.taskSources.providers.notion': 'Notion', - 'settings.taskSources.providers.linear': 'Linear', - 'settings.taskSources.providers.clickup': 'ClickUp', - - // /skills IA restructure (Phase 2/3) — dashboard + new-skill page. - 'skills.dashboard.title': 'Skills', - 'skills.dashboard.scheduledHeading': 'Scheduled skills', - 'skills.dashboard.emptyTitle': 'No scheduled skills', - 'skills.dashboard.emptyBody': - 'Run a bundled skill once or save a recurring schedule to see it here.', - 'skills.dashboard.create': 'Create a Skill', - 'skills.dashboard.run': 'Run a Skill', - 'skills.dashboard.enable': 'Enable scheduled skill', - 'skills.dashboard.disable': 'Disable scheduled skill', - 'skills.dashboard.lastRun': 'Last run', - 'skills.dashboard.nextRun': 'Next run', - 'skills.dashboard.cardOpenRunner': 'Open in runner', - 'skills.dashboard.loadError': 'Failed to load scheduled skills', - 'skills.new.title': 'Create a skill', - 'skills.new.placeholderBody': - 'Authoring form arrives soon. For now, use the “New skill” button on the runner page.', - 'settings.agentAccess.requireTaskPlanApproval.label': 'Require task plan approval', - 'settings.agentAccess.requireTaskPlanApproval.desc': - 'Pause before an assigned agent executes an agent-authored task brief.', -}; - -export default es5; diff --git a/app/src/lib/i18n/chunks/fr-1.ts b/app/src/lib/i18n/chunks/fr-1.ts deleted file mode 100644 index 311b2fd2c..000000000 --- a/app/src/lib/i18n/chunks/fr-1.ts +++ /dev/null @@ -1,1640 +0,0 @@ -import type { TranslationMap } from '../types'; - -// French (Français) chunk 1/5. Translated from chunks/en-1.ts. -const fr1: TranslationMap = { - 'nav.home': 'Accueil', - 'nav.human': 'Humain', - 'nav.chat': 'Chat', - 'nav.connections': 'Connexions', - 'nav.memory': 'Intelligence', - 'nav.alerts': 'Alertes', - 'nav.rewards': 'Récompenses', - 'nav.settings': 'Paramètres', - 'common.cancel': 'Annuler', - 'common.save': 'Enregistrer', - 'common.confirm': 'Confirmer', - 'common.delete': 'Supprimer', - 'common.edit': 'Modifier', - 'common.create': 'Créer', - 'common.search': 'Rechercher', - 'common.loading': 'chargement…', - 'common.error': 'Erreur', - 'common.success': 'Succès', - 'common.back': 'Retour', - 'common.next': 'Suivant', - 'common.finish': 'Terminer', - 'common.close': 'Fermer', - 'common.enabled': 'Activé', - 'common.disabled': 'Désactivé', - 'common.on': 'Activé', - 'common.off': 'Désactivé', - 'common.yes': 'Oui', - 'common.no': 'Non', - 'common.ok': 'Compris', - 'common.retry': 'Réessayer', - 'common.copy': 'Copier', - 'common.copied': 'Copié', - 'common.learnMore': 'En savoir plus', - 'common.seeAll': 'Voir', - 'common.dismiss': 'Ignorer', - 'common.clear': 'Effacer', - 'common.reset': 'Réinitialiser', - 'common.refresh': 'Actualiser', - 'common.export': 'Exporter', - 'common.import': 'Importer', - 'common.upload': 'Envoyer', - 'common.download': 'Télécharger', - 'common.add': 'Ajouter', - 'common.remove': 'Supprimer', - 'common.showMore': 'Afficher plus', - 'common.showLess': 'Afficher moins', - 'common.submit': 'Envoyer', - 'common.continue': 'Continuer', - 'common.comingSoon': 'Bientôt disponible', - 'settings.general': 'Général', - 'settings.featuresAndAI': 'Fonctionnalités & IA', - 'settings.billingAndRewards': 'Facturation & Récompenses', - 'settings.support': 'Assistance', - 'settings.advanced': 'Avancé', - 'settings.dangerZone': 'Zone de danger', - 'settings.account': 'Compte', - 'settings.accountDesc': 'Phrase de récupération, équipe, connexions et confidentialité', - 'settings.notifications': 'Notifications', - 'settings.notificationsDesc': 'Ne pas déranger et contrôles de notifications par compte', - 'settings.notifications.tabs.preferences': 'Préférences', - 'settings.notifications.tabs.routing': 'Routage', - 'settings.features': 'Fonctionnalités', - 'settings.featuresDesc': "Surveillance de l'écran, messagerie et outils", - 'settings.aiModels': 'IA & Modèles', - 'settings.aiModelsDesc': - 'Configuration des modèles IA locaux, téléchargements et fournisseur LLM', - 'settings.ai': 'Configuration IA', - 'settings.aiDesc': 'Fournisseurs cloud, modèles Ollama locaux et routage par charge de travail', - 'settings.billingUsage': 'Facturation & Utilisation', - 'settings.billingUsageDesc': "Plan d'abonnement, crédits et méthodes de paiement", - 'settings.rewards': 'Récompenses', - 'settings.rewardsDesc': 'Parrainages, coupons et crédits gagnés', - 'settings.restartTour': 'Relancer la visite', - 'settings.restartTourDesc': 'Rejouer la présentation du produit depuis le début', - 'settings.about': 'À propos', - 'settings.aboutDesc': "Version de l'application et mises à jour logicielles", - 'settings.developerOptions': 'Avancé', - 'settings.developerOptionsDesc': - 'Configuration IA, canaux de messagerie, outils, diagnostics et panneaux de débogage', - 'settings.clearAppData': "Effacer les données de l'app", - 'settings.clearAppDataDesc': - 'Se déconnecter et supprimer définitivement toutes les données locales', - 'settings.logOut': 'Se déconnecter', - 'settings.logOutDesc': 'Se déconnecter de ton compte', - 'settings.exitLocalSession': 'Quitter le local session', - 'settings.exitLocalSessionDesc': 'Return to the sign-in screen', - 'settings.language': 'Langue', - 'settings.languageDesc': "Langue d'affichage de l'interface", - 'settings.alerts': 'Alertes', - 'settings.alertsDesc': "Voir les alertes récentes et l'activité dans ta boîte de réception", - 'settings.account.recoveryPhrase': 'Phrase de récupération', - 'settings.account.recoveryPhraseDesc': 'Voir et sauvegarder ta phrase de récupération', - 'settings.account.team': 'Équipe', - 'settings.account.teamDesc': "Gérer les membres et les permissions de l'équipe", - 'settings.account.connections': 'Connexions', - 'settings.account.connectionsDesc': 'Gérer les comptes et services liés', - 'settings.account.privacy': 'Confidentialité', - 'settings.account.privacyDesc': 'Contrôler quelles données quittent ton ordinateur', - 'settings.notifications.doNotDisturb': 'Ne pas déranger', - 'settings.notifications.doNotDisturbDesc': - 'Mettre en pause toutes les notifications pendant une durée définie', - 'settings.notifications.channelControls': 'Contrôles par canal', - 'settings.notifications.channelControlsDesc': - 'Configurer les préférences de notifications pour chaque canal', - 'settings.features.screenAwareness': "Surveillance de l'écran", - 'settings.features.screenAwarenessDesc': "Permettre à l'assistant de voir ta fenêtre active", - 'settings.features.messaging': 'Messagerie', - 'settings.features.messagingDesc': "Paramètres d'intégration des canaux et de la messagerie", - 'settings.features.tools': 'Outils', - 'settings.features.toolsDesc': 'Gérer les outils et intégrations connectés', - 'settings.ai.localSetup': 'Configuration IA locale', - 'settings.ai.localSetupDesc': 'Télécharger et configurer les modèles IA locaux', - 'settings.ai.llmProvider': 'Fournisseur LLM', - 'settings.ai.llmProviderDesc': 'Choisir et configurer ton fournisseur IA', - 'clearData.title': "Effacer les données de l'app", - 'clearData.warning': - 'Cela va te déconnecter et supprimer définitivement les données locales, notamment :', - 'clearData.bulletSettings': "Paramètres de l'app et conversations", - 'clearData.bulletCache': "Toutes les données de cache d'intégration locales", - 'clearData.bulletWorkspace': "Données de l'espace de travail", - 'clearData.bulletOther': 'Toutes les autres données locales', - 'clearData.irreversible': 'Cette action est irréversible.', - 'clearData.clearing': 'Effacement des données…', - 'clearData.failed': "Échec de l'effacement des données et de la déconnexion. Réessaie.", - 'clearData.failedLogout': 'Échec de la déconnexion. Réessaie.', - 'clearData.failedPersist': "Échec de l'effacement de l'état persisté. Réessaie.", - 'welcome.title': 'Bienvenue sur OpenHuman', - 'welcome.subtitle': - 'Ton assistant IA personnel super-intelligent. Privé, simple et extrêmement puissant.', - 'welcome.connectPrompt': "Configurer l'URL RPC (Avancé)", - 'welcome.selectRuntime': 'Sélectionner un runtime', - 'welcome.urlPlaceholder': 'http://localhost:8089', - 'welcome.invalidUrl': 'Saisis une URL HTTP ou HTTPS valide', - 'welcome.connecting': 'Test en cours', - 'welcome.connect': 'Tester', - 'home.greeting': 'Bonjour', - 'home.greetingAfternoon': 'Bon après-midi', - 'home.greetingEvening': 'Bonsoir', - 'home.askAssistant': "Pose n'importe quelle question à ton assistant…", - 'home.statusOk': - "Ton appareil est connecté. Garde l'app ouverte pour maintenir la connexion. Envoie un message à ton agent avec le bouton ci-dessous.", - 'home.statusBackendOnly': - 'Reconnexion au backend… ton agent sera de nouveau disponible dans quelques instants.', - 'home.statusCoreUnreachable': - "Le processus local OpenHuman ne répond pas. Il a peut-être planté ou n'a pas démarré correctement.", - 'home.statusInternetOffline': - "Ton appareil est hors ligne. Vérifie ta connexion ou redémarre l'app.", - 'home.restartCore': 'Redémarrer le core', - 'home.restartingCore': 'Redémarrage du core…', - 'home.themeToggle.toLight': 'Passer en mode clair', - 'home.themeToggle.toDark': 'Passer en mode sombre', - 'chat.newThread': 'Nouveau fil', - 'chat.typeMessage': 'Écris un message…', - 'chat.send': 'Envoyer le message', - 'chat.thinking': 'En train de réfléchir…', - 'chat.noMessages': "Aucun message pour l'instant", - 'chat.startConversation': 'Démarre une conversation', - 'chat.regenerate': 'Régénérer', - 'chat.copyResponse': 'Copier la réponse', - 'chat.citations': 'Citations', - 'chat.toolUsed': 'Outil utilisé', - 'scope.legacy': 'Hérité', - 'scope.user': 'Utilisateur', - 'scope.project': 'Projet', - 'skills.title': 'Connexions', - 'skills.search': 'Rechercher des connexions…', - 'skills.noResults': 'Aucune connexion trouvée', - 'skills.connect': 'Connecter', - 'skills.disconnect': 'Déconnecter', - 'skills.configure': 'Gérer', - 'skills.connected': 'Connecté', - 'skills.available': 'Disponible', - 'skills.addAccount': 'Ajouter un compte', - 'skills.channels': 'Canaux', - 'skills.integrations': 'Intégrations', - 'memory.title': 'Mémoire', - 'memory.search': 'Rechercher dans la mémoire…', - 'memory.noResults': 'Aucun souvenir trouvé', - 'memory.empty': - "Aucun souvenir pour l'instant. Les souvenirs sont créés automatiquement au fil de tes interactions.", - 'memory.tab.memory': 'Mémoire', - 'memory.tab.tasks': 'Agent Tasks', - 'memory.tab.tasksDescription': - 'Create and track tasks — your own to-dos plus the boards your agents build across conversations.', - 'memory.tab.subconscious': 'Subconscient', - 'memory.tab.dreams': 'Rêves', - 'memory.tab.calls': 'Appels', - 'memory.tab.diagram': 'Diagram', - 'memory.tab.settings': 'Paramètres', - 'memory.analyzeNow': 'Analyser maintenant', - 'memoryTree.status.title': 'Memory Tree', - 'memoryTree.status.autoSyncLabel': 'Auto-sync', - 'memoryTree.status.autoSyncDescription': - 'Pause to stop new ingestion. Existing wiki stays queryable.', - 'memoryTree.status.statusTile': 'Status', - 'memoryTree.status.lastSyncTile': 'Last sync', - 'memoryTree.status.totalChunksTile': 'Total chunks', - 'memoryTree.status.wikiSizeTile': 'Wiki size', - 'memoryTree.status.statusRunning': 'Running', - 'memoryTree.status.statusPaused': 'Paused', - 'memoryTree.status.statusSyncing': 'Syncing', - 'memoryTree.status.statusError': 'Error', - 'memoryTree.status.statusIdle': 'Idle', - 'memoryTree.status.never': 'Never', - 'memoryTree.status.fetchError': "Couldn't fetch Memory Tree status", - 'memoryTree.status.retry': 'Retry', - 'memoryTree.status.toggleFailed': "Couldn't toggle auto-sync", - 'memoryTree.status.justNow': 'just now', - 'memoryTree.status.secondsAgo': '{count}s ago', - 'memoryTree.status.minuteAgo': '1 min ago', - 'memoryTree.status.minutesAgo': '{count} min ago', - 'memoryTree.status.hourAgo': '1 hr ago', - 'memoryTree.status.hoursAgo': '{count} hr ago', - 'memoryTree.status.dayAgo': '1 day ago', - 'memoryTree.status.daysAgo': '{count} days ago', - 'alerts.title': 'Alertes', - 'alerts.empty': "Aucune alerte pour l'instant", - 'alerts.markAllRead': 'Tout marquer comme lu', - 'alerts.unread': 'non lu', - 'rewards.title': 'Récompenses', - 'rewards.referrals': 'Parrainages', - 'rewards.coupons': 'Échanger', - 'rewards.credits': 'Crédits', - 'rewards.referralCode': 'Ton code de parrainage', - 'rewards.copyCode': 'Copier le code', - 'rewards.share': 'Partager', - 'onboarding.welcome': 'Salut. Je suis OpenHuman.', - 'onboarding.welcomeDesc': - 'Ton assistant IA super-intelligent qui tourne sur ton ordinateur. Privé, simple et extrêmement puissant.', - 'onboarding.context': 'Collecte de contexte', - 'onboarding.contextDesc': 'Connecte les outils et services que tu utilises tous les jours.', - 'onboarding.localAI': 'IA locale', - 'onboarding.localAIDesc': 'Configure un modèle IA local qui tourne sur ta machine.', - 'onboarding.chatProvider': 'Fournisseur de chat', - 'onboarding.chatProviderDesc': 'Choisis comment tu veux interagir avec ton assistant.', - 'onboarding.referral': 'Parrainage', - 'onboarding.referralDesc': 'Applique un code de parrainage si tu en as un.', - 'onboarding.finish': 'Terminer la configuration', - 'onboarding.finishDesc': 'Tout est prêt ! Commence à utiliser OpenHuman.', - 'onboarding.skip': 'Passer', - 'onboarding.getStarted': 'Démarrer', - 'onboarding.runtimeChoice.title': 'Comment veux-tu utiliser OpenHuman ?', - 'onboarding.runtimeChoice.subtitle': - 'Choisis la configuration qui te convient. Tu pourras la modifier plus tard dans les Paramètres.', - 'onboarding.runtimeChoice.cloud.title': 'Simple', - 'onboarding.runtimeChoice.cloud.tagline': 'Laisse OpenHuman tout gérer pour toi.', - 'onboarding.runtimeChoice.cloud.f1': 'Sécurité intégrée', - 'onboarding.runtimeChoice.cloud.f2': 'Compression de tokens pour aller plus loin', - 'onboarding.runtimeChoice.cloud.f3': 'Un abonnement, tous les modèles inclus', - 'onboarding.runtimeChoice.cloud.f4': 'Aucune clé API à gérer', - 'onboarding.runtimeChoice.cloud.f5': 'Facile à configurer', - 'onboarding.runtimeChoice.custom.title': 'Personnalisé', - 'onboarding.runtimeChoice.custom.tagline': - 'Utilise tes propres clés. Contrôle total sur ce que tu utilises.', - 'onboarding.runtimeChoice.custom.f1': 'Tu auras besoin de clés API pour presque tout', - 'onboarding.runtimeChoice.custom.f2': 'Réutilise les services que tu paies déjà', - 'onboarding.runtimeChoice.custom.f3': 'Peut être gratuit si tu fais tout tourner localement', - 'onboarding.runtimeChoice.custom.f4': "Plus de configuration, plus d'options", - 'onboarding.runtimeChoice.custom.f5': 'Idéal pour les utilisateurs avancés et les développeurs', - 'onboarding.runtimeChoice.cloud.creditHighlight': '$1 de crédit offert pour essayer', - 'onboarding.runtimeChoice.continueCloud': 'Continuer avec Simple', - 'onboarding.runtimeChoice.continueCustom': 'Continuer avec Personnalisé', - 'onboarding.runtimeChoice.recommended': 'Recommandé', - 'onboarding.apiKeys.title': 'Ajoutons tes clés API', - 'onboarding.apiKeys.subtitle': - 'Tu peux les coller maintenant ou passer et les ajouter plus tard dans Paramètres › IA. Les clés sont stockées sur cet appareil, chiffrées au repos.', - 'onboarding.apiKeys.openaiLabel': 'Clé API OpenAI', - 'onboarding.apiKeys.openaiPlaceholder': 'sk-...', - 'onboarding.apiKeys.anthropicLabel': 'Clé API Anthropic', - 'onboarding.apiKeys.anthropicPlaceholder': 'sk-ant-...', - 'onboarding.apiKeys.saveError': "Impossible d'enregistrer cette clé. Vérifie-la et réessaie.", - 'onboarding.apiKeys.skipForNow': "Passer pour l'instant", - 'onboarding.apiKeys.continue': 'Enregistrer et continuer', - 'onboarding.apiKeys.saving': 'Enregistrement…', - 'onboarding.custom.stepperInference': 'Inférence', - 'onboarding.custom.stepperVoice': 'Voix', - 'onboarding.custom.stepperOAuth': 'OAuth', - 'onboarding.custom.stepperSearch': 'Recherche', - 'onboarding.custom.stepperEmbeddings': 'Embeddings', - 'onboarding.custom.stepperMemory': 'Mémoire', - 'onboarding.custom.stepCounter': 'Étape {n} sur {total}', - 'onboarding.custom.defaultTitle': 'Par défaut', - 'onboarding.custom.defaultSubtitle': 'Laisse OpenHuman gérer ça pour toi.', - 'onboarding.custom.configureTitle': 'Configurer', - 'onboarding.custom.configureSubtitle': "Je choisis ce que j'utilise.", - 'onboarding.custom.progressAriaLabel': 'Progression de la configuration', - 'onboarding.custom.continue': 'Continuer', - 'onboarding.custom.back': 'Retour', - 'onboarding.custom.finish': 'Terminer la configuration', - 'onboarding.custom.configureLater': - "Tu peux finaliser cette configuration après l'initialisation. On t'amènera sur la page Paramètres correspondante une fois que tu auras terminé.", - 'onboarding.custom.openSettings': 'Ouvrir dans les Paramètres', - 'onboarding.custom.inference.title': 'Inférence (texte)', - 'onboarding.custom.inference.subtitle': - 'Quel modèle de langage doit répondre à tes questions et faire tourner tes agents ?', - 'onboarding.custom.inference.defaultDesc': - 'OpenHuman dirige chaque charge de travail vers un modèle par défaut adapté. Aucune clé, aucune configuration.', - 'onboarding.custom.inference.configureDesc': - "Utilise ta propre clé OpenAI ou Anthropic. On l'utilise pour toutes les tâches textuelles.", - 'onboarding.custom.voice.title': 'Voix', - 'onboarding.custom.voice.subtitle': 'Reconnaissance vocale et synthèse pour le mode voix.', - 'onboarding.custom.voice.defaultDesc': - 'OpenHuman inclut un STT/TTS géré qui fonctionne directement. Rien à configurer.', - 'onboarding.custom.voice.configureDesc': - 'Utilise ton propre ElevenLabs / OpenAI Whisper / etc. À configurer dans Paramètres › Voix.', - 'onboarding.custom.oauth.title': 'Connexions (OAuth)', - 'onboarding.custom.oauth.subtitle': - 'Gmail, Slack, Notion et autres services connectés nécessitant OAuth.', - 'onboarding.custom.oauth.defaultDesc': - 'OpenHuman gère un espace de travail Composio. Un clic pour connecter chaque service plus tard.', - 'onboarding.custom.oauth.configureDesc': - 'Utilise ton propre compte Composio / clé API. À configurer dans Paramètres › Connexions.', - 'onboarding.custom.search.title': 'Recherche web', - 'onboarding.custom.search.subtitle': - 'Comment OpenHuman effectue des recherches sur le web en ton nom.', - 'onboarding.custom.search.defaultDesc': - 'OpenHuman utilise un backend de recherche géré. Aucune clé nécessaire.', - 'onboarding.custom.search.configureDesc': - 'Utilise ta propre clé de fournisseur de recherche (Tavily, Brave, etc.). À configurer dans Paramètres › Outils.', - 'onboarding.custom.embeddings.title': 'Embeddings', - 'onboarding.custom.embeddings.subtitle': - 'How OpenHuman generates vector embeddings for semantic memory search.', - 'onboarding.custom.embeddings.defaultDesc': - 'OpenHuman uses a managed embedding service. No API key needed.', - 'onboarding.custom.embeddings.configureDesc': - 'Bring your own embedding provider (OpenAI, Voyage, Ollama, etc.).', - 'onboarding.custom.memory.title': 'Mémoire', - 'onboarding.custom.memory.subtitle': - 'Comment OpenHuman mémorise ton contexte, tes préférences et tes conversations passées.', - 'onboarding.custom.memory.defaultDesc': - 'OpenHuman gère automatiquement le stockage et la récupération en mémoire. Rien à configurer.', - 'onboarding.custom.memory.configureDesc': - 'Inspecte, exporte ou efface la mémoire toi-même. À configurer dans Paramètres › Mémoire.', - 'accounts.addAccount': 'Ajouter un compte', - 'accounts.manageAccounts': 'Gérer les comptes', - 'accounts.noAccounts': 'Aucun compte connecté', - 'accounts.connectAccount': 'Connecte un compte pour démarrer', - 'accounts.agent': 'Agent', - 'accounts.respondQueue': 'File de réponses', - 'accounts.disconnect': 'Déconnecter', - 'accounts.disconnectConfirm': 'Es-tu sûr de vouloir déconnecter ce compte ?', - 'accounts.disconnectClearMemory': 'Also delete memory from this source', - 'accounts.disconnectClearMemoryHint': - 'Permanently removes local memory chunks linked to this connection.', - 'accounts.searchAccounts': 'Rechercher des comptes…', - 'channels.title': 'Canaux', - 'channels.configure': 'Configurer le canal', - 'channels.setup': 'Configuration', - 'channels.noChannels': 'Aucun canal configuré', - 'channels.addChannel': 'Ajouter un canal', - 'channels.status.connected': 'Connecté', - 'channels.status.disconnected': 'Déconnecté', - 'channels.status.error': 'Erreur', - 'channels.status.configuring': 'Configuration en cours', - 'channels.defaultMessaging': 'Canal de messagerie par défaut', - 'webhooks.title': 'Webhooks', - 'webhooks.create': 'Créer un webhook', - 'webhooks.noWebhooks': 'Aucun webhook configuré', - 'webhooks.url': 'URL', - 'webhooks.secret': 'Secret', - 'webhooks.events': 'Événements', - 'webhooks.archiveDirectory': "Répertoire d'archive", - 'webhooks.todayFile': 'Fichier du jour', - 'invites.title': 'Invitations', - 'invites.create': 'Créer une invitation', - 'invites.noInvites': 'Aucune invitation en attente', - 'invites.code': "Code d'invitation", - 'invites.copyLink': 'Copier le lien', - 'devOptions.title': 'Avancé', - 'devOptions.diagnostics': 'Diagnostics', - 'devOptions.diagnosticsDesc': 'Santé du système, journaux et métriques de performance', - 'devOptions.toolPolicyDiagnosticsDesc': - 'Tool inventory, policy posture, MCP allowlists, and recent blocks', - 'devOptions.toolPolicyDiagnostics.loading': 'Loading…', - 'devOptions.toolPolicyDiagnostics.unavailable': 'Diagnostics unavailable', - 'devOptions.toolPolicyDiagnostics.posture.title': 'Policy posture', - 'devOptions.toolPolicyDiagnostics.posture.autonomy': 'Autonomy:', - 'devOptions.toolPolicyDiagnostics.posture.workspaceOnly': 'Workspace only:', - 'devOptions.toolPolicyDiagnostics.posture.maxActionsPerHour': 'Max actions/hr:', - 'devOptions.toolPolicyDiagnostics.posture.approvalMediumRisk': 'Approval (medium risk):', - 'devOptions.toolPolicyDiagnostics.posture.blockHighRisk': 'Block high risk:', - 'devOptions.toolPolicyDiagnostics.inventory.title': 'Inventory', - 'devOptions.toolPolicyDiagnostics.inventory.totalTools': 'Total tools', - 'devOptions.toolPolicyDiagnostics.inventory.enabledTools': 'Enabled tools', - 'devOptions.toolPolicyDiagnostics.inventory.mcpStdioTools': 'MCP stdio tools', - 'devOptions.toolPolicyDiagnostics.inventory.jsonRpcTools': 'JSON-RPC tools', - 'devOptions.toolPolicyDiagnostics.mcpAllowlists.title': 'MCP allowlists', - 'devOptions.toolPolicyDiagnostics.mcpAllowlists.summary': - 'Enabled: {enabled} · Servers: {enabledCount}/{totalCount}', - 'devOptions.toolPolicyDiagnostics.mcpAllowlists.unnamed': '', - 'devOptions.toolPolicyDiagnostics.mcpAllowlists.allowDeny': 'allow={allowCount} deny={denyCount}', - 'devOptions.toolPolicyDiagnostics.mcpWriteAudit.title': 'MCP write audit', - 'devOptions.toolPolicyDiagnostics.mcpWriteAudit.summary': - 'Enabled: {enabled} · Recent (24h): {recentRows}', - 'devOptions.toolPolicyDiagnostics.recentBlocked.title': 'Recent blocked calls', - 'devOptions.toolPolicyDiagnostics.recentBlocked.empty': 'No blocked calls recorded.', - 'devOptions.toolPolicyDiagnostics.redactedSurfaces.title': 'Redacted surfaces', - 'devOptions.toolPolicyDiagnostics.redactedSurfaces.summary': - 'Write-capable: {writeCount} · Policy surfaces: {policyCount}', - 'devOptions.debugPanels': 'Panneaux de débogage', - 'devOptions.debugPanelsDesc': - "Indicateurs de fonctionnalités, inspection de l'état et outils de débogage", - 'devOptions.webhooks': 'Webhooks', - 'devOptions.webhooksDesc': 'Configurer et tester les intégrations webhook', - 'devOptions.memoryInspection': 'Inspection de la mémoire', - 'devOptions.memoryInspectionDesc': 'Parcourir, interroger et gérer les entrées de mémoire', - 'voice.pushToTalk': 'Appuyer pour parler', - 'voice.recording': 'Enregistrement…', - 'voice.processing': 'Traitement…', - 'voice.languageHint': 'Langue', - 'misc.rehydrating': 'Chargement de tes données…', - 'misc.checkingServices': 'Vérification des services…', - 'misc.serviceUnavailable': 'Service indisponible', - 'misc.somethingWentWrong': "Une erreur s'est produite", - 'misc.tryAgainLater': 'Réessaie plus tard.', - 'misc.restartApp': "Redémarrer l'app", - 'misc.updateAvailable': 'Mise à jour disponible', - 'misc.updateNow': 'Mettre à jour maintenant', - 'misc.updateLater': 'Plus tard', - 'misc.downloading': 'Téléchargement…', - 'misc.installing': 'Installation…', - 'misc.beta': - "OpenHuman est en bêta anticipée. N'hésite pas à partager tes retours ou signaler des bugs — chaque rapport nous aide à avancer plus vite.", - 'misc.betaFeedback': 'Envoyer un retour', - 'mnemonic.title': 'Phrase de récupération', - 'mnemonic.warning': "Note ces mots dans l'ordre et conserve-les en lieu sûr.", - 'mnemonic.copyWarning': - 'Ne partage jamais ta phrase de récupération. Toute personne disposant de ces mots peut accéder à ton compte.', - 'mnemonic.copied': 'Phrase de récupération copiée dans le presse-papiers', - 'mnemonic.reveal': 'Afficher la phrase', - 'mnemonic.revealPhrase': 'Reveal recovery phrase', - 'mnemonic.hidden': 'La phrase de récupération est masquée', - 'privacy.title': 'Confidentialité & Sécurité', - 'privacy.description': 'Rapport de transparence sur les données envoyées aux services externes.', - 'privacy.empty': 'Aucun transfert de données externe détecté.', - 'privacy.whatLeavesComputer': 'Ce qui quitte ton ordinateur', - 'privacy.loading': 'Chargement des détails de confidentialité…', - 'privacy.loadError': - "Impossible de charger la liste de confidentialité en direct. Les contrôles d'analyse ci-dessous fonctionnent toujours.", - 'privacy.noCapabilities': - 'Aucune fonctionnalité ne divulgue actuellement de mouvement de données.', - 'privacy.sentTo': 'Envoyé à', - 'privacy.leavesDevice': "Quitte l'appareil", - 'privacy.staysLocal': 'Reste local', - 'privacy.anonymizedAnalytics': 'Analyses anonymisées', - 'privacy.shareAnonymizedData': "Partager les données d'utilisation anonymisées", - 'privacy.shareAnonymizedDataDesc': - "Aide à améliorer OpenHuman en partageant des rapports de plantage et des analyses d'utilisation anonymes. Toutes les données sont entièrement anonymisées — aucune donnée personnelle, message, clé de portefeuille ou information de session n'est jamais collectée.", - 'privacy.meetingFollowUps': 'Suivis de réunion', - 'privacy.autoHandoffMeet': - "Transmettre automatiquement les transcriptions Google Meet à l'orchestrateur", - 'privacy.autoHandoffMeetDesc': - "Quand un appel Google Meet se termine, l'orchestrateur d'OpenHuman peut lire la transcription et effectuer des actions comme rédiger des messages, planifier des suivis ou publier des résumés sur ton espace Slack connecté. Désactivé par défaut.", - 'privacy.analyticsDisclaimer': - "Toutes les analyses et rapports de bugs sont entièrement anonymisés. Quand activé, on collecte uniquement les informations de plantage, le type d'appareil et l'emplacement des erreurs. On n'accède jamais à tes messages, données de session, clés de portefeuille, clés API ou toute information personnelle identifiable. Tu peux modifier ce paramètre à tout moment.", - 'settings.about.version': 'Version', - 'settings.about.updateAvailable': 'disponible', - 'settings.about.softwareUpdates': 'Mises à jour logicielles', - 'settings.about.lastChecked': 'Dernière vérification', - 'settings.about.checking': 'Vérification…', - 'settings.about.checkForUpdates': 'Rechercher des mises à jour', - 'settings.about.releases': 'Versions', - 'settings.about.releasesDesc': - 'Parcourir les notes de version et les builds précédentes sur GitHub.', - 'settings.about.openReleases': 'Ouvrir les versions GitHub', - 'settings.ai.overview': "Vue d'ensemble du système IA", - 'migration.title': 'Importer depuis un autre assistant', - 'migration.description': - "Migrez la mémoire et les notes d'un autre assistant local vers cet espace de travail. Commencez par un Aperçu pour voir précisément ce qui changera, puis cliquez sur Appliquer pour copier les données. Votre mémoire actuelle est sauvegardée au préalable.", - 'migration.vendorLabel': 'Source', - 'migration.sourceLabel': "Chemin de l'espace de travail source (facultatif)", - 'migration.sourcePlaceholder': - 'Laisser vide pour détection automatique (p. ex. ~/.openclaw/workspace)', - 'migration.sourcePlaceholderHermes': 'Leave blank to auto-detect (e.g. ~/.hermes)', - 'migration.sourceHint': - "Utilise l'emplacement par défaut du fournisseur si vide. Indiquez un chemin explicite si vous avez déplacé l'espace de travail.", - 'migration.previewAction': 'Aperçu', - 'migration.previewRunning': 'Aperçu en cours…', - 'migration.applyAction': "Appliquer l'import", - 'migration.applyRunning': 'Importation…', - 'migration.applyDisclaimer': - 'Appliquer est débloqué après un Aperçu réussi de la même source. La mémoire existante est sauvegardée avant tout import.', - 'migration.reportTitlePreview': "Aperçu — rien d'importé pour l'instant", - 'migration.reportTitleApplied': 'Importation terminée', - 'migration.report.source': 'Espace de travail source', - 'migration.report.target': 'Espace de travail cible', - 'migration.report.fromSqlite': 'Depuis SQLite (brain.db)', - 'migration.report.fromMarkdown': 'Depuis Markdown', - 'migration.report.imported': 'Importés', - 'migration.report.skippedUnchanged': 'Ignorés (inchangés)', - 'migration.report.renamedConflicts': 'Renommés en cas de conflit', - 'migration.report.warnings': 'Avertissements', - 'migration.report.previewHint': - "Aucune donnée n'a encore été importée. Cliquez sur Appliquer l'import pour la copier.", - 'migration.report.appliedHint': - 'Les entrées importées sont maintenant dans votre mémoire. Relancez Aperçu pour comparer à nouveau.', - 'migration.confirmImport.singular': - "Importer {count} entrée dans l'espace de travail actuel ?\n\nSource : {source}\nCible : {target}\n\nLa mémoire existante sera sauvegardée avant l'import.", - 'migration.confirmImport.plural': - "Importer {count} entrées dans l'espace de travail actuel ?\n\nSource : {source}\nCible : {target}\n\nLa mémoire existante sera sauvegardée avant l'import.", - // Settings menu: Appearance + Mascot (#2225) — English stubs; native translations welcome - 'settings.appearance': 'Apparence', - 'settings.appearanceDesc': 'Pick light, dark, or match your system theme', - 'settings.mascot': 'Mascotte', - 'settings.mascotDesc': 'Pick the mascot color used across the app', - 'channels.authMode.managed_dm': 'Connectez-vous avec OpenHuman', - 'channels.authMode.oauth': 'OAuth Connectez-vous', - 'channels.authMode.bot_token': 'Utiliser votre propre jeton de robot', - 'channels.authMode.api_key': 'Utilisez votre propre clé API', - 'channels.fieldRequired': '{field} est requis', - 'channels.mcp.title': 'Serveurs MCP', - 'channels.mcp.description': - 'Browse and manage Model Context Protocol servers that extend the AI with new tools.', - 'skills.integrationsSubtitle': - 'Cloud-based OAuth connections — sign in with your account and Composio brokers the tokens so agents can read and act on your behalf. No API keys to manage.', - 'skills.tabs.composio': 'Composio', - 'skills.tabs.channels': 'Canaux', - 'skills.tabs.mcp': 'MCP Serveurs', - 'skills.mcpComingSoon.title': 'MCP Serveurs', - 'skills.mcpComingSoon.description': - 'MCP server management is coming soon. This tab will be the home for discovering, connecting, and monitoring your MCP server integrations.', - 'settings.about.connection': 'Connexion', - 'settings.about.connectionMode': 'Mode', - 'settings.about.connectionModeLocal': 'Local', - 'settings.about.connectionModeCloud': 'Cloud', - 'settings.about.connectionModeUnset': 'Non sélectionné', - 'settings.about.serverUrl': 'Serveur URL', - 'settings.about.serverUrlUnavailable': 'Indisponible', - 'settings.about.connectionHelperLocal': - 'Spawned in-process by the Tauri shell on app launch. The port is chosen at startup, so this URL changes between launches.', - 'settings.about.connectionHelperCloud': - 'Connected to a remote core. Change this in BootCheck or the cloud mode picker.', - 'settings.heartbeat.title': 'Battement de coeur et boucles', - 'settings.heartbeat.desc': 'Control background scheduling cadences and inspect the loop map.', - 'settings.ledgerUsage.title': 'Usage ledger', - 'settings.ledgerUsage.desc': 'Recent credit spend, budget math, and background API read budget.', - 'settings.costDashboard.title': 'Cost dashboard', - 'settings.costDashboard.desc': - '7-day spend and token burn across the swarm, with budget pace and per-model breakdown.', - 'settings.costDashboard.sevenDayCost': '7-day daily cost', - 'settings.costDashboard.sevenDayTokens': '7-day token usage', - 'settings.costDashboard.totalSpend': '7-day total', - 'settings.costDashboard.monthlyPace': 'Monthly pace', - 'settings.costDashboard.budgetLimit': 'Budget limit', - 'settings.costDashboard.utilization': 'Utilisation', - 'settings.costDashboard.modelBreakdown': 'Per-model breakdown', - 'settings.costDashboard.model': 'Model', - 'settings.costDashboard.provider': 'Provider', - 'settings.costDashboard.cost': 'Cost', - 'settings.costDashboard.tokens': 'Tokens', - 'settings.costDashboard.requests': 'Requests', - 'settings.costDashboard.percentOfTotal': '% of total', - 'settings.costDashboard.inputTokens': 'Input', - 'settings.costDashboard.outputTokens': 'Output', - 'settings.costDashboard.budgetNormal': 'On track', - 'settings.costDashboard.budgetWarning': 'Warning', - 'settings.costDashboard.budgetExceeded': 'Over budget', - 'settings.costDashboard.noBudget': 'No limit set', - 'settings.costDashboard.noData': 'No cost recorded yet for the last 7 days.', - 'settings.costDashboard.noModels': 'No model activity in the last 7 days.', - 'settings.costDashboard.loading': 'Loading cost dashboard…', - 'settings.costDashboard.disabledHint': - 'Cost dashboard is disabled in config. Set [cost.dashboard] enabled = true in config.toml to re-enable.', - 'settings.costDashboard.subtitle': - 'Live spend and token burn across the swarm. Bars auto-refresh every few seconds — no page reload needed.', - 'settings.costDashboard.summaryAriaLabel': 'Cost summary metrics', - 'settings.costDashboard.lastSevenDays': 'last 7 days', - 'settings.costDashboard.utilizationOf': 'of', - 'settings.costDashboard.thisMonth': 'this month', - 'settings.costDashboard.monthlyPaceHint': - 'Projected monthly spend at the current daily run-rate (avg × 30).', - 'settings.costDashboard.budgetLimitHint': - 'Monthly budget read from cost.monthly_limit_usd in config.toml.', - 'settings.costDashboard.dailyTarget': 'Daily target', - 'settings.costDashboard.today': 'Today', - 'settings.costDashboard.todayBadge': 'TODAY', - 'settings.costDashboard.unknownProvider': '—', - 'settings.costDashboard.justNow': 'Just now', - 'settings.costDashboard.secondsAgo': '{value}s ago', - 'settings.costDashboard.minutesAgo': '{value}m ago', - 'settings.costDashboard.hoursAgo': '{value}h ago', - 'settings.costDashboard.daysAgo': '{value}d ago', - 'settings.costDashboard.updated': 'Updated', - 'settings.costDashboard.refresh': 'Refresh', - 'settings.costDashboard.utcNote': 'Days bucketed in UTC', - 'settings.costDashboard.stackedNote': 'Input + output stacked', - 'settings.costDashboard.modelBreakdownHint': 'Aggregated across the last 7 days.', - 'settings.costDashboard.noDataHint': - 'Send an agent message — token usage from the next provider call will populate the chart within ~10 seconds.', - 'settings.search.title': 'Moteur de recherche', - 'settings.search.menuDesc': - 'Default to OpenHuman-managed search or wire up your own provider with an API key.', - 'settings.search.description': - 'Pick the search engine the agent uses. Managed uses OpenHuman’s backend (no setup). Parallel and Brave run direct from your machine using your API key.', - 'settings.search.engineAria': 'Moteur de recherche', - 'settings.search.engineManagedLabel': 'OpenHuman Géré', - 'settings.search.engineManagedDesc': - 'Default. Routed through the OpenHuman backend — no API key required.', - 'settings.search.engineParallelLabel': 'Parallel', - 'settings.search.engineParallelDesc': - 'Direct Parallel API: search, extract, chat, research, enrich, dataset tools.', - 'settings.search.engineBraveLabel': 'Brave Recherche', - 'settings.search.engineBraveDesc': 'Direct Brave Search API: web, news, image, and video tools.', - 'settings.search.engineQueritLabel': 'Querit', - 'settings.search.engineQueritDesc': - 'Direct Querit API: web search with site, time range, country, and language filters.', - 'settings.search.statusConfigured': 'Configuré', - 'settings.search.statusNeedsKey': 'Nécessite la clé API', - 'settings.search.fallbackToManaged': - 'No key configured — search will fall back to Managed until a key is saved.', - 'settings.search.getApiKey': 'Obtenir la clé API', - 'settings.search.save': 'Enregistrer', - 'settings.search.clear': 'Effacer', - 'settings.search.show': 'Afficher', - 'settings.search.hide': 'Masquer', - 'settings.search.statusSaving': 'Enregistrement…', - 'settings.search.statusSaved': 'Enregistré.', - 'settings.search.statusError': 'Échec', - 'settings.search.parallelKeyLabel': 'Parallel API clé', - 'settings.search.braveKeyLabel': 'Brave Recherche API clé', - 'settings.search.queritKeyLabel': 'Querit API key', - 'settings.search.placeholderStored': '•••••••• (stocké)', - 'settings.search.placeholderParallel': 'pk_...', - 'settings.search.placeholderBrave': 'BSA...', - 'settings.search.placeholderQuerit': 'Querit API key', - 'settings.embeddings.title': 'Encastrements', - 'settings.embeddings.description': - "Choisissez le fournisseur d'embeddings qui convertit la mémoire en vecteurs pour la recherche sémantique. Changer le fournisseur, le modèle ou les dimensions invalide les vecteurs stockés et nécessite une réinitialisation complète de la mémoire.", - 'settings.embeddings.providerAria': "Fournisseur d'embeddings", - 'settings.embeddings.statusConfigured': 'Configuré', - 'settings.embeddings.statusNeedsKey': 'Clé API requise', - 'settings.embeddings.apiKeyLabel': 'Clé API {provider}', - 'settings.embeddings.placeholderStored': '•••••••• (stocké)', - 'settings.embeddings.placeholderKey': 'Collez votre clé API…', - 'settings.embeddings.keyStoredEncrypted': - 'Votre clé API est stockée de manière chiffrée sur cet appareil.', - 'settings.embeddings.show': 'Afficher', - 'settings.embeddings.hide': 'Masquer', - 'settings.embeddings.save': 'Enregistrer', - 'settings.embeddings.clear': 'Effacer', - 'settings.embeddings.model': 'Modèle', - 'settings.embeddings.dimensions': 'Dimensions', - 'settings.embeddings.customEndpoint': 'Point de terminaison personnalisé', - 'settings.embeddings.customModelPlaceholder': 'Nom du modèle', - 'settings.embeddings.customDimsPlaceholder': 'Dims La prise en charge du serveur', - 'settings.embeddings.applyCustom': 'Appliquer', - 'settings.embeddings.testConnection': 'Tester la connexion', - 'settings.embeddings.testing': 'Test en cours…', - 'settings.embeddings.testSuccess': 'Connecté — {dims} dimensions', - 'settings.embeddings.testFailed': 'Échec : {error}', - 'settings.embeddings.saving': 'Enregistrement…', - 'settings.embeddings.saved': 'Enregistré.', - 'settings.embeddings.errorPrefix': 'Échec', - 'settings.embeddings.wipeTitle': 'Réinitialiser les vecteurs mémoire ?', - 'settings.embeddings.wipeBody': - "Changer le fournisseur d'embeddings, le modèle ou les dimensions effacera tous les vecteurs mémoire stockés. La mémoire doit être reconstruite avant que la récupération ne fonctionne à nouveau. Cette action est irréversible.", - 'settings.embeddings.cancel': 'Annuler', - 'settings.embeddings.confirmWipe': 'Effacer et appliquer', - 'settings.embeddings.setupTitle': 'Configurer {provider}', - 'settings.embeddings.saveAndSwitch': 'Enregistrer et changer', - 'settings.embeddings.optional': 'optionnel', - 'settings.embeddings.vectorSearchDisabled': - 'Vector search is disabled. Memory recall will use keyword matching and recency only — no semantic ranking.', - 'settings.embeddings.clearKey': 'Effacer la clé API', - 'mcp.alphaBadge': 'Alpha', - 'mcp.alphaBannerText': - 'MCP server support is in early alpha. The Smithery registry, install flow, and tool wiring may misbehave or change shape between releases.', - 'mcp.toolList.noTools': 'Aucun outil disponible.', - 'mcp.setup.secretDialog.title': 'Installation MCP — Entrez le secret', - 'mcp.setup.secretDialog.bodyPrefix': 'The MCP setup agent needs', - 'mcp.setup.secretDialog.bodySuffix': - '. Your value is sent directly to the core process and never enters the AI conversation.', - 'mcp.setup.secretDialog.inputLabel': 'Valeur', - 'mcp.setup.secretDialog.inputPlaceholder': 'Coller ici', - 'mcp.setup.secretDialog.show': 'Afficher', - 'mcp.setup.secretDialog.hide': 'Masquer', - 'mcp.setup.secretDialog.submit': 'Soumettre', - 'mcp.setup.secretDialog.cancel': 'Annuler', - 'mcp.setup.secretDialog.submitting': 'Soumission…', - 'mcp.setup.secretDialog.errorPrefix': 'Échec de la soumission :', - 'mcp.setup.secretDialog.privacyNote': - 'Stored encrypted in the local MCP secrets table. Never logged or sent to a model.', - 'devices.betaBadge': 'Bêta', - 'devices.betaText': - 'This feature is currently in beta. Pair iOS phones with this OpenHuman to use them as a remote client.', - 'autonomy.title': 'Agent autonomy', - 'autonomy.maxActionsLabel': 'Actions maximales par heure', - 'autonomy.maxActionsHelp': - 'Maximum tool actions an agent can run per rolling hour. New value applies to your next chat. Cron jobs and channel listeners keep their current limit until you restart OpenHuman.', - 'autonomy.statusSaving': 'Enregistrement…', - 'autonomy.statusSaved': 'Enregistré.', - 'autonomy.statusFailed': 'Échec', - 'autonomy.unlimitedNote': 'Illimité — limitation de débit désactivée.', - 'autonomy.invalidIntegerMsg': - 'Must be a positive integer (use the Unlimited preset for no limit).', - 'autonomy.presetUnlimited': 'Illimité (par défaut)', - 'triggers.toggleFailed': 'Échec de {action} pour {trigger} : {message}', - 'skills.composio.noApiKeyTitle': 'Non Composio API Clé configurée', - 'skills.composio.noApiKeyDescription': - 'Local mode uses your own Composio API key. Open Settings → Advanced → Composio to add one before connecting integrations here.', - 'skills.composio.noApiKeyCta': 'Ouvrir dans les paramètres', - 'rewards.localUnavailable': - 'Local login does not earn rewards, coupons, or referral credit. To earn rewards, log out and continue by signing in with an OpenHuman account.', - 'rewards.localUnavailableCta': 'Ouvrir les paramètres du compte', - 'channels.localManagedUnavailable': 'Managed channels are not available for local users.', - 'settings.search.localManagedUnavailable': - 'OpenHuman Managed search is not available for local users. Add your own Parallel, Brave, or Querit API key to enable web search.', - 'devices.comingSoonDescription': - 'Device pairing is coming soon. This page will be the home for pairing iPhones and managing connected devices.', - 'common.breadcrumb': 'Fil d’Ariane', - 'settings.betaBuild': 'Build bêta - v{version}', - 'migration.vendor.openclaw': 'OpenClaw', - 'migration.vendor.hermes': 'Hermes Agent', - 'onboarding.apiKeys.openaiOauthHint': - 'Utilisez ChatGPT Plus/Pro (abonnement) ou une clé API OpenAI — les deux ne sont pas nécessaires.', - 'onboarding.apiKeys.openaiOauthOpening': 'Ouverture de la connexion…', - 'onboarding.apiKeys.finishSignIn': 'Terminer la connexion à ChatGPT', - 'onboarding.apiKeys.orApiKey': 'ou clé API', - 'calls.title': 'Appels', - 'calls.comingSoonBody': 'Les appels assistés par IA arrivent bientôt. Restez à l’écoute.', - 'rewards.referralSection.retry': 'Réessayer', - 'devOptions.sentryDisabled': '(aucun identifiant — Sentry est désactivé dans cette build)', - 'home.usageExhaustedTitle': 'Vous avez épuisé votre utilisation', - 'home.usageExhaustedBody': - 'Vous n’avez plus d’utilisation incluse pour le moment. Démarrez un abonnement pour débloquer davantage de capacité continue.', - 'home.usageExhaustedCta': 'Prendre un abonnement', - 'home.routinesCard': 'Your Routines', - 'home.routinesActive': '{count} active', - 'routines.title': 'Your Routines', - 'routines.subtitle': 'Things your assistant does automatically', - 'routines.loading': 'Loading routines…', - 'routines.empty': 'No routines yet', - 'routines.emptyHint': - 'Your assistant can run tasks on a schedule — like morning briefings or daily summaries.', - 'routines.refresh': 'Refresh', - 'routines.nextRun': 'Next run', - 'routines.lastRunSuccess': 'Last run succeeded', - 'routines.lastRunFailed': 'Last run failed', - 'routines.notRunYet': 'Not run yet', - 'routines.runNow': 'Run Now', - 'routines.running': 'Running…', - 'routines.viewHistory': 'View history', - 'routines.loadingHistory': 'Loading…', - 'routines.noHistory': 'No run history yet.', - 'routines.statusSuccess': 'Success', - 'routines.statusError': 'Error', - 'routines.showOutput': 'Show output', - 'routines.hideOutput': 'Hide output', - 'routines.toggleEnabled': 'Enable or disable this routine', - 'routines.typeAgent': 'Agent', - 'routines.typeCommand': 'Command', - 'nav.routines': 'Routines', - 'channels.telegram.remoteControlTitle': 'Télécommande (Telegram)', - 'channels.telegram.remoteControlBody': - 'Depuis un chat Telegram autorisé, envoyez /status, /sessions, /new ou /help. Le routage du modèle utilise toujours /model et /models.', - 'common.name': 'Nom', - 'devices.title': 'Appareils', - 'devices.pairIphone': 'Jumeler l’iPhone', - 'devices.noPaired': 'Aucun appareil jumelé', - 'devices.online': 'En ligne', - 'devices.offline': 'Hors ligne', - 'devices.revoke': 'Révoquer', - 'devices.confirmRevokeTitle': 'Révoquer l’appareil ?', - 'devices.confirmRevokeBody': - '{label} ne pourra plus se connecter. Cette action est irréversible.', - 'devices.loadFailed': 'Échec du chargement des appareils : {message}', - 'devices.pairModal.title': 'Jumeler l’iPhone', - 'devices.pairModal.loading': 'Génération du code de jumelage…', - 'devices.pairModal.instructions': - 'Ouvrez l’application OpenHuman sur votre iPhone et scannez ce code.', - 'devices.pairModal.expiredTitle': 'Le code QR a expiré', - 'devices.pairModal.expiredBody': 'Générez un nouveau code pour poursuivre le jumelage.', - 'devices.pairModal.generateNewCode': 'Générer un nouveau code', - 'devices.pairModal.successTitle': 'iPhone jumelé', - 'devices.pairModal.autoClose': 'Fermeture automatique…', - 'devices.pairModal.errorTitle': 'Un problème est survenu', - 'devices.pairModal.copyUrl': 'Copier', - 'invites.generate': 'Générer une invitation', - 'invites.generating': 'Génération…', - 'invites.loading': 'Chargement des invitations…', - 'invites.refreshing': 'Actualisation des invitations…', - 'invites.empty': 'Aucune invitation pour le moment', - 'invites.emptyHint': 'Générez un code d’invitation à partager', - 'invites.revokeAction': 'Révoquer l’invitation', - 'invites.revokeTitle': 'Révoquer le code d’invitation', - 'invites.revokeWarning': - 'Ce code d’invitation ne sera plus valide et ne pourra plus être utilisé pour rejoindre l’équipe.', - 'invites.failedGenerate': 'Échec de la génération de l’invitation', - 'invites.failedRevoke': 'Échec de la révocation de l’invitation', - 'invites.expiresOn': 'Expire le {date}', - 'invites.usedUp': 'Épuisée', - 'settings.ai.disconnectProvider': 'Déconnecter {label}', - 'settings.ai.connectProviderLabel': 'Connecter {label}', - 'settings.ai.defaultLocalEndpoint': 'http://localhost:11434/v1', - 'settings.ai.endpointUrlLabel': 'Point de terminaison URL', - 'settings.ai.localRuntimeHelper': - 'Where {label} is reachable. Default is localhost; point this at a remote host (for example, http://10.0.0.4:11434/v1) to use a shared instance.', - 'settings.ai.endpointUrlRequired': 'Le point de terminaison URL est requis.', - 'settings.ai.endpointProtocolRequired': 'Endpoint must start with http:// or https://.', - 'settings.ai.connectProviderDialog': 'Connectez-vous {label}', - 'settings.ai.or': 'Ou', - 'settings.ai.openRouterOauthDescription': - 'Sign in with OpenRouter and import a user-controlled API key using PKCE.', - 'settings.ai.connecting': 'Connexion...', - 'settings.ai.backgroundLoops': 'Background loops', - 'settings.ai.backgroundLoopsDesc': - 'See what runs without a chat message, pause heartbeat work, and inspect recent credit ledger rows.', - 'settings.ai.heartbeatControls': 'Contrôles de battement de coeur', - 'settings.ai.heartbeatControlsDesc': - 'Defaults off. Enabling starts the loop; disabling aborts the running task.', - 'settings.ai.heartbeatLoop': 'Boucle de battement de coeur', - 'settings.ai.heartbeatLoopDesc': - 'Master scheduler for planner + optional subconscious inference.', - 'settings.ai.subconsciousInference': 'Inférence subconsciente', - 'settings.ai.subconsciousInferenceDesc': - 'Runs model-backed task/reflection evaluation on heartbeat ticks.', - 'settings.ai.calendarMeetingChecks': 'Les réunions du calendrier vérifient', - 'settings.ai.calendarMeetingChecksDesc': - 'Calls calendar event list for active Google Calendar connections.', - 'settings.ai.calendarCap': 'Limite du calendrier', - 'settings.ai.connectionsPerTick': '{count} conn/tick', - 'settings.ai.meetingLookahead': 'Anticipation de la réunion', - 'settings.ai.minutesShort': '{count} min', - 'settings.ai.reminderLookahead': 'Anticipation de rappel', - 'settings.ai.cronReminderChecks': 'Vérifications de rappel Cron', - 'settings.ai.cronReminderChecksDesc': 'Scans enabled cron jobs for reminder-like upcoming items.', - 'settings.ai.relevantNotificationChecks': 'Vérifications de notifications pertinentes', - 'settings.ai.relevantNotificationChecksDesc': - 'Promotes urgent local notifications into proactive alerts.', - 'settings.ai.externalDelivery': 'Diffusion externe', - 'settings.ai.externalDeliveryDesc': - 'Lets heartbeat alerts send proactive messages to external channels.', - 'settings.ai.interval': 'Intervalle', - 'settings.ai.running': 'Running...', - 'settings.ai.plannerTickNow': 'Planificateur tick maintenant', - 'settings.ai.loadingHeartbeatControls': 'Chargement des contrôles de rythme cardiaque...', - 'settings.ai.heartbeatControlsUnavailable': 'Contrôles de rythme cardiaque indisponibles.', - 'settings.ai.loopMap': 'Carte de boucle', - 'settings.ai.on': 'activée', - 'settings.ai.off': 'désactivée', - 'settings.ai.recentUsageLedger': 'Recent usage ledger', - 'settings.ai.recentUsageLedgerDesc': - 'Backend rows expose action/time today; source tags need backend support.', - 'settings.ai.openhumanDefault': 'OpenHuman (par défaut)', - 'settings.ai.localModelResolved': 'Ollama · {model}', - 'settings.ai.customRoutingForWorkload': 'Routage personnalisé pour {label}', - 'settings.ai.loadingModels': 'Chargement des modèles...', - 'settings.ai.enterModelIdManually': 'or enter model id manually:', - 'settings.ai.modelIdPlaceholderForProvider': '{slug} identifiant du modèle', - 'settings.ai.modelIdPlaceholder': 'model-id', - 'settings.ai.selectModel': 'Sélectionnez un modèle...', - 'settings.ai.temperatureOverride': 'Température override', - 'settings.ai.temperatureOverrideSlider': 'Override de température (curseur)', - 'settings.ai.temperatureOverrideValue': 'Override de température (valeur)', - 'settings.ai.temperatureOverrideDesc': - 'Lower = more deterministic. Leave unchecked to use the provider default.', - 'settings.ai.testFailed': 'Test échoué', - 'settings.ai.testingModel': 'Modèle de test...', - 'settings.ai.modelResponse': 'Réponse du modèle', - 'settings.ai.providerWithValue': 'Fournisseur : {value}', - 'settings.ai.noneDash': '—', - 'settings.ai.promptHelloWorld': 'Invite : Bonjour tout le monde', - 'settings.ai.startedAt': 'Démarré : {value}', - 'settings.ai.waitingForModelResponse': 'En attente de réponse du modèle sélectionné...', - 'settings.ai.response': 'Réponse', - 'settings.ai.testing': 'Test...', - 'settings.ai.test': 'Test', - 'settings.ai.slugMissingError': 'Saisissez un nom de fournisseur pour générer un slug.', - 'settings.ai.slugInUseError': 'Ce nom de fournisseur est déjà utilisé.', - 'settings.ai.slugReservedError': 'Choisissez un autre nom de fournisseur.', - 'settings.ai.providerNamePlaceholder': 'Mon fournisseur', - 'settings.ai.slugLabel': 'Slug :', - 'settings.ai.openAiUrlLabel': 'OpenAI URL', - 'settings.ai.openAiUrlPlaceholder': 'https://api.openai.com/v1', - 'settings.ai.keepExistingKeyPlaceholder': 'Laisser vide pour conserver la clé existante', - 'settings.ai.reindexingMemory': 'Réindexation de la mémoire', - 'settings.ai.reindexingMemoryMessage': - 'Embeddings are being reprocessed. {pending} memory item(s) are being re-embedded under the current model — semantic recall is reduced until this finishes. Keyword search keeps working, and re-embedding continues in the background if you close this.', - 'settings.ai.signInWithOpenRouter': 'Connectez-vous avec OpenRouter', - 'settings.ai.weekBudget': 'Budget hebdomadaire', - 'settings.ai.cycleRemaining': 'Cycle restant', - 'settings.ai.cycleTotalSpend': 'Dépenses totales du cycle', - 'settings.ai.avgSpendRow': 'Ligne de dépenses moyennes', - 'settings.ai.backgroundApiReads': 'Bg API lit', - 'settings.ai.backgroundWakeups': 'Bg réveils', - 'settings.ai.budgetMath': 'Calcul du budget', - 'settings.ai.rowsLeft': 'Lignes restantes', - 'settings.ai.rowsPerFullWeekBudget': 'Rows per full week budget', - 'settings.ai.sampleBurnRate': 'Sample burn rate', - 'settings.ai.projectedEmpty': 'Vide projeté', - 'settings.ai.apiReadsPerDollarRemaining': 'API lectures par $ restant', - 'settings.ai.loopCallBudget': 'Loop call budget', - 'settings.ai.heartbeatTicks': 'Ticks de battement de coeur', - 'settings.ai.calendarPlannerCalls': 'Appels du planificateur de calendrier', - 'settings.ai.calendarFanoutCap': 'Capuchon de diffusion du calendrier', - 'settings.ai.subconsciousModelCalls': 'Appels du modèle subconscient', - 'settings.ai.composioSyncScans': 'Composio analyses de synchronisation', - 'settings.ai.totalBackgroundApiReadBudget': 'Budget total de lecture API', - 'settings.ai.memoryWorkerPolls': 'Sondages de mémoire', - 'settings.ai.defaultProviderName': 'OpenHuman', - 'settings.ai.routing.managed': 'Géré', - 'settings.ai.routing.managedDesc': - 'OpenHuman will run all inference in the cloud, choose the best model for the task, optimize for cost, and keep the safest routing defaults.', - 'settings.ai.routing.managedMsg': - 'OpenHuman will handle all inference for every workload and automatically choose the best route for cost, quality, and security.', - 'settings.ai.routing.useYourOwn': 'Utilisez vos propres modèles', - 'settings.ai.routing.useYourOwnDesc': - 'Choose one provider + model and route every workload through it. This is simple, but it can be inefficient because lightweight and heavyweight inference all share the same route.', - 'settings.ai.routing.advanced': 'Avancé', - 'settings.ai.routing.advancedDesc': - 'Pick different models for different tasks. This is the best option for tight cost optimization and the most control.', - 'settings.ai.routing.customDesc': - 'Fine-grained routing gives you the best cost optimization and the most control. Use the rows below to decide which workloads stay Managed, which use your shared default, and which pin to a specific model.', - 'settings.ai.routing.chatAndConversations': 'Chat et conversations', - 'settings.ai.routing.chatDesc': - 'Models used during direct user interaction, replies, reasoning, agent loops, and coding help.', - 'settings.ai.routing.backgroundTasks': 'Tâches en arrière-plan', - 'settings.ai.routing.bgTasksDesc': - 'Models used outside the main conversation flow for summarization, heartbeat, learning, and subconscious evaluation.', - 'settings.ai.routing.addCustomProvider': 'Ajouter un fournisseur personnalisé', - 'settings.ai.globalModel.title': 'Choisissez un modèle pour tout', - 'settings.ai.globalModel.desc': - 'This routes all inference through one model. It is simpler, but it can be inefficient for cost and quality because lightweight and heavy tasks will all use the same route.', - 'settings.ai.globalModel.noProviders': - 'Add or connect a provider first. Then you can route every workload through one model here.', - 'settings.ai.globalModel.provider': 'Fournisseur', - 'settings.ai.globalModel.model': 'Modèle', - 'settings.ai.globalModel.loadingModels': 'Chargement des modèles…', - 'settings.ai.globalModel.enterModelId': 'Enter model id', - 'settings.ai.globalModel.appliesToAll': - 'Applies the same provider + model to chat, reasoning, coding, memory, heartbeat, learning, and subconscious. Embeddings are configured separately. Changes save when you click save.', - 'settings.ai.globalModel.saving': 'Enregistrement…', - 'settings.ai.globalModel.saved': 'Enregistré', - 'settings.ai.workload.noModel': 'Aucun modèle sélectionné', - 'settings.ai.workload.changeModel': 'Changer de modèle', - 'settings.ai.workload.chooseModel': 'Choisir un modèle', - 'settings.ai.provider.ollama': 'Ollama', - 'kbd.ariaLabel': 'Raccourci clavier : {shortcut}', - 'chat.modelPlaceholder': 'gpt-4o', - 'iosPair.title': 'Associer avec votre bureau', - 'iosPair.instructions': - 'Open OpenHuman on your desktop, go to Settings > Devices, and tap "Pair phone" to show the QR code.', - 'iosPair.scanQrCode': 'Numérisation QR code', - 'iosPair.scannerOpening': 'Ouverture du scanner...', - 'iosPair.connecting': 'Connexion au bureau...', - 'iosPair.connectedLoading': 'Connecté ! Chargement...', - 'iosPair.expired': 'QR code a expiré. Demandez au bureau de régénérer le code.', - 'iosPair.desktopLabel': 'Bureau', - 'iosPair.retryScan': 'Retry scan', - 'iosPair.step.openDesktop': 'Ouvrez OpenHuman sur le bureau', - 'iosPair.step.openSettings': 'Accédez à Paramètres > Appareils', - 'iosPair.step.showQr': 'Appuyez sur « Associer le téléphone » pour afficher QR', - 'iosPair.error.camera': 'Camera scan failed. Check camera permissions and try again.', - 'iosPair.error.invalidQr': - 'Invalid QR code. Make sure you are scanning an OpenHuman pairing code.', - 'iosPair.error.unreachableDesktop': - 'Could not reach the desktop. Make sure both devices are online and try again.', - 'iosPair.error.connectionFailed': - 'Connection failed. Make sure the desktop app is running and try again.', - 'iosMascot.defaultPairedLabel': 'Bureau', - 'iosMascot.connectedTo': 'Connecté à', - 'iosMascot.disconnect': 'Déconnecter', - 'iosMascot.pushToTalk': 'Push-to-talk', - 'iosMascot.thinking': 'En réflexion...', - 'iosMascot.typeMessage': 'Tapez un message...', - 'iosMascot.sendMessage': 'Envoyer un message', - 'iosMascot.error.generic': 'Something went wrong. Please try again.', - 'iosMascot.error.sendFailed': 'Failed to send. Check your connection.', - 'settings.companion.title': 'Desktop Companion', - 'settings.companion.session': 'Session', - 'settings.companion.activeLabel': 'Actif', - 'settings.companion.inactiveStatus': 'Inactif', - 'settings.companion.stopping': 'Arrêt…', - 'settings.companion.stopSession': 'Arrêter la session', - 'settings.companion.starting': 'Démarrage…', - 'settings.companion.startSession': 'Démarrer la session', - 'settings.companion.sessionId': 'ID de session', - 'settings.companion.turns': 'Tours', - 'settings.companion.remaining': 'Configuration', - 'settings.companion.configuration': 'restante', - 'settings.companion.hotkey': 'Raccourci clavier', - 'settings.companion.activationMode': 'Activation Mode', - 'settings.companion.sessionTtl': 'Durée de vie de la session', - 'settings.companion.screenCapture': 'Screen Capture', - 'settings.companion.appContext': 'App Context', - 'settings.composio.title': 'Composio', - 'settings.composio.apiKeyExamplePlaceholder': 'ck_live_xxxxxxxxxxxxxxxx', - 'composio.integrationSlugsHelp': 'Comma-separated integration slugs, e.g.', - 'composio.integrationSlugsExample': 'gmail, slack', - 'composio.integrationSlugsCaseInsensitive': 'Insensible à la casse.', - 'composio.integrationSlugsPlaceholder': 'gmail, slack, ...', - 'team.members': 'Membres', - 'team.membersDesc': 'Manage team members and roles', - 'team.invites': 'Invites', - 'team.invitesDesc': 'Generate and manage invite codes', - 'team.settings': 'Team Settings', - 'team.settingsDesc': 'Edit team name and settings', - 'team.editSettings': 'Edit Team Settings', - 'team.enterName': 'Enter team name', - 'team.saving': 'Enregistrement...', - 'team.saveChanges': 'Enregistrer les modifications', - 'team.delete': 'Delete Team', - 'team.deleteDesc': 'Supprimer définitivement cette équipe', - 'team.deleting': 'Suppression...', - 'team.failedToUpdate': 'Failed to update team', - 'team.failedToDelete': 'Failed to delete team', - 'team.manageTitle': 'Gérer {name}', - 'team.planCreated': '{plan} Plan • Créé {date}', - 'team.confirmDelete': 'Êtes-vous sûr de vouloir supprimer {name} ?', - 'team.deleteWarning': 'This action cannot be undone. All team data will be permanently removed.', - 'welcome.clearingAppData': 'Clearing app data...', - 'welcome.clearAppDataAndRestart': 'Clear app data & restart', - 'welcome.clearAppDataWarning': - 'This wipes locally stored secrets and accounts on this device. Your cloud account is unaffected - you can sign in again right after.', - 'welcome.resetErrorFallback': - 'Could not clear app data. Please quit and reopen OpenHuman, then try again.', - 'welcome.signingIn': 'Vous connecter...', - 'welcome.termsIntro': 'En continuant, vous acceptez les', - 'welcome.termsOfUse': 'Terms', - 'welcome.termsJoiner': 'et la', - 'welcome.privacyPolicy': 'Politique de confidentialité', - 'welcome.termsOutro': '.', - 'chat.addReaction': 'Ajouter une réaction', - 'chat.agentProfile.create': 'Create agent profile', - 'chat.agentProfile.createFailed': 'Could not create agent profile.', - 'chat.agentProfile.customDescription': 'Custom agent profile', - 'chat.agentProfile.defaultAgentLabel': 'Orchestrator', - 'chat.agentProfile.exists': 'Agent profile "{name}" already exists.', - 'chat.agentProfile.label': 'Agent profile', - 'chat.agentProfile.namePlaceholder': 'Nom du profil', - 'chat.agentProfile.promptStylePlaceholder': 'Prompt style', - 'chat.agentProfile.allowedToolsPlaceholder': 'Outils autorisés', - 'chat.backToThread': 'retour à {title}', - 'chat.parentThread': 'fil parent', - 'chat.removeReaction': 'Supprimer {emoji}', - 'invites.copyCodeAria': 'Copy invite code', - 'invites.revokeAria': 'Revoke invite', - 'invites.uses': 'Utilise : {current}{max}', - 'invites.revokePromptPrefix': 'Are you sure you want to revoke the invite code', - 'invites.revoking': 'Révocation...', - 'team.refreshingMembers': 'Actualisation des membres...', - 'team.loadingMembers': 'Chargement des membres...', - 'team.memberCount': '{count} membre', - 'team.memberCountPlural': 'Membres {count}', - 'team.you': '(Vous)', - 'team.removeAria': 'Supprimer {name}', - 'team.noMembers': 'Aucun membre trouvé', - 'team.removeTitle': 'Remove Team Member', - 'team.removePromptPrefix': 'Êtes-vous sûr de vouloir supprimer', - 'team.removePromptSuffix': 'from the team?', - 'team.removeWarning': 'They will lose access to the team and all team resources.', - 'team.removing': 'Suppression...', - 'team.removeAction': 'Supprimer un membre', - 'team.changeRoleTitle': 'Modifier le rôle du membre', - 'team.changeRolePrompt': "Change {name}'s role from {oldRole} to {newRole}?", - 'team.changeRoleAdminGrant': - 'This will grant them full admin permissions including the ability to manage team members.', - 'team.changeRoleAdminRemove': - 'This will remove their admin permissions and they will no longer be able to manage the team.', - 'team.changing': 'Modification...', - 'team.changeRoleAction': 'Modifier le rôle', - 'team.failedChangeRole': 'Échec du changement de rôle', - 'team.failedRemoveMember': 'Échec de la suppression du membre', - 'voice.failedToLoadSettings': 'Échec du chargement des paramètres vocaux', - 'voice.failedToSaveSettings': 'Failed to save voice settings', - 'voice.failedToStartServer': 'Échec du démarrage du serveur vocal', - 'voice.failedToStopServer': 'Failed to stop voice server', - 'voice.sttDisabledPrefix': - 'Voice dictation is disabled until the local STT model is downloaded. Use the', - 'voice.sttDisabledSuffix': 'ci-dessus pour installer Whisper.', - 'voice.debug.failedToLoadVoiceDebugData': 'Échec du chargement des données de débogage vocal.', - 'voice.debug.settingsSaved': 'Paramètres de débogage enregistrés.', - 'voice.debug.failedToSaveSettings': 'Failed to save voice settings', - 'voice.debug.runtimeStatus': 'Runtime Status', - 'voice.debug.runtimeStatusDesc': - 'Live diagnostics for the voice server and speech-to-text engine.', - 'voice.debug.server': 'Serveur', - 'voice.debug.unavailable': 'Indisponible', - 'voice.debug.ready': 'Prêt', - 'voice.debug.notReady': 'Non prêt', - 'voice.debug.hotkey': 'Raccourci', - 'voice.debug.notAvailable': 'n/a', - 'voice.debug.mode': 'Mode', - 'voice.debug.transcriptions': 'Transcriptions', - 'voice.debug.serverError': 'Erreur du serveur', - 'voice.debug.advancedSettings': 'Paramètres avancés', - 'voice.debug.advancedSettingsDesc': - 'Low-level tuning parameters for recording and silence detection.', - 'voice.debug.minimumRecordingSeconds': 'Minimum Recording Seconds', - 'voice.debug.silenceThreshold': 'Seuil de silence (RMS)', - 'voice.debug.silenceThresholdDesc': - 'Recordings with energy below this are treated as silence and skipped. Lower = more sensitive.', - 'voice.providers.saved': 'Fournisseurs de voix enregistrés.', - 'voice.providers.failedToSave': 'Failed to save voice providers', - 'voice.providers.ellipsis': '…', - 'voice.providers.installing': 'Installation de', - 'voice.providers.installingBusy': 'Installation…', - 'voice.providers.reinstallLocally': 'Réinstaller localement', - 'voice.providers.repair': 'Réparer', - 'voice.providers.retryLocally': 'Réessayez localement', - 'voice.providers.installLocally': 'Installez localement', - 'voice.providers.whisperReady': 'Whisper est prêt.', - 'voice.providers.whisperInstallStarted': 'Whisper install started', - 'voice.providers.queued': 'queued', - 'voice.providers.failedToInstallWhisper': 'Failed to install Whisper', - 'voice.providers.piperReady': 'Piper est prêt.', - 'voice.providers.piperInstallStarted': 'Piper install started', - 'voice.providers.failedToInstallPiper': 'Failed to install Piper', - 'voice.providers.title': 'Fournisseurs de voix', - 'voice.providers.desc': - 'Choose where transcription and synthesis run. Use the Install locally buttons to download the binaries and models into your workspace. Local providers can be saved before the install finishes — no manual WHISPER_BIN or PIPER_BIN setup required.', - 'voice.providers.sttProvider': 'Fournisseur de synthèse vocale', - 'voice.providers.sttProviderAria': 'Fournisseur STT', - 'voice.providers.cloudWhisperProxy': 'Cloud (proxy Whisper)', - 'voice.providers.localWhisper': 'Whisper local', - 'voice.providers.installRequired': '(installation requise)', - 'voice.providers.whisperInstalledTitle': 'Whisper est installé. Cliquez pour réinstaller.', - 'voice.providers.whisperDownloadTitle': - 'Download whisper.cpp and the GGML model into your workspace.', - 'voice.providers.installed': 'Installé', - 'voice.providers.installFailed': 'Install failed', - 'voice.providers.notInstalled': 'Non installé', - 'voice.providers.whisperModel': 'Modèle Whisper', - 'voice.providers.whisperModelAria': 'Modèle Whisper', - 'voice.providers.whisperModelTiny': 'Petit (39 Mo, le plus rapide)', - 'voice.providers.whisperModelBase': 'Base (74 Mo)', - 'voice.providers.whisperModelSmall': 'Petit (244 Mo)', - 'voice.providers.whisperModelMedium': 'Moyen (769 Mo, recommandé)', - 'voice.providers.whisperModelLargeTurbo': 'Grand v3 Turbo (1,5 Go, meilleure précision)', - 'voice.providers.ttsProvider': 'Fournisseur de synthèse vocale', - 'voice.providers.ttsProviderAria': 'Fournisseur TTS', - 'voice.providers.cloudElevenLabsProxy': 'Cloud (proxy ElevenLabs)', - 'voice.providers.localPiper': 'Piper local', - 'voice.providers.piperInstalledTitle': 'Piper est installé. Cliquez pour réinstaller.', - 'voice.providers.piperDownloadTitle': - 'Download Piper and the bundled en_US-lessac-medium voice into your workspace.', - 'voice.providers.piperVoice': 'Piper Voice', - 'voice.providers.piperVoiceAria': 'Piper voice', - 'voice.providers.customVoiceOption': 'Autre (tapez ci-dessous)…', - 'voice.providers.customVoiceAria': 'Piper voice id (personnalisé)', - 'voice.providers.customVoicePlaceholder': 'en_US-lessac-medium', - 'voice.providers.piperVoicesDesc': - 'Voices come from huggingface.co/rhasspy/piper-voices. Switching voices may require an Install/Reinstall click to download the new .onnx.', - 'voice.providers.mascotVoice': 'Voix de la mascotte', - 'voice.providers.mascotVoiceDescPrefix': - 'The ElevenLabs voice the mascot uses for spoken replies is configured under', - 'voice.providers.mascotSettings': 'Paramètres de la mascotte', - 'voice.providers.mascotVoiceDescSuffix': '.', - 'voice.providers.hotkeyPlaceholder': 'Fn', - 'voice.providers.piperPreset.lessacMedium': 'US · Lessac (neutre, recommandé)', - 'voice.providers.piperPreset.lessacHigh': 'États-Unis · Lessac (qualité supérieure, plus grand)', - 'voice.providers.piperPreset.ryanMedium': 'États-Unis · Ryan (homme)', - 'voice.providers.piperPreset.amyMedium': 'États-Unis · Amy (femme)', - 'voice.providers.piperPreset.librittsHigh': 'États-Unis · LibriTTS (multi-haut-parleurs)', - 'voice.providers.piperPreset.alanMedium': 'GB · Alan (homme)', - 'voice.providers.piperPreset.jennyDiocoMedium': 'GB · Jenny Dioco (femme)', - 'voice.providers.piperPreset.northernEnglishMaleMedium': 'GB · Anglais du Nord (homme)', - 'voice.providers.chip.cloud': 'OpenHuman (Managed)', - 'voice.providers.chip.cloudAria': 'OpenHuman managed provider is always enabled', - 'voice.providers.chip.whisper': 'Whisper (Local)', - 'voice.providers.chip.enableWhisper': 'Enable local Whisper STT', - 'voice.providers.chip.disableWhisper': 'Disable local Whisper STT', - 'voice.providers.chip.piper': 'Piper (Local)', - 'voice.providers.chip.enablePiper': 'Enable local Piper TTS', - 'voice.providers.chip.disablePiper': 'Disable local Piper TTS', - 'voice.providers.chip.enableProvider': 'Enable', - 'voice.providers.chip.disableProvider': 'Disable', - 'voice.providers.chip.apiKeyLabel': 'API Key', - 'voice.providers.chip.apiKeyPlaceholder': 'sk-…', - 'voice.providers.chip.comingSoon': 'coming soon', - 'voice.modal.title': 'Configure', - 'voice.modal.desc': - 'Enter your API key to enable this provider. You can test the connection before saving.', - 'voice.modal.testKey': 'Test Key', - 'voice.modal.testing': 'Testing…', - 'voice.modal.saveAndEnable': 'Save & Enable', - 'voice.modal.enable': 'Enable', - 'voice.modal.whisperDesc': - 'Choose a model size and install the Whisper binary and GGML model into your workspace. Larger models are more accurate but slower.', - 'voice.modal.piperDesc': - 'Choose a voice and install the Piper binary and ONNX model into your workspace. Piper runs fully offline with low latency.', - 'voice.routing.title': 'Voice Routing', - 'voice.routing.desc': 'Choose which enabled providers handle speech-to-text and text-to-speech.', - 'voice.routing.save': 'Save', - 'voice.routing.testStt': 'Test STT', - 'voice.routing.testTts': 'Test TTS', - 'voice.routing.elevenlabsVoice': 'ElevenLabs Voice', - 'voice.routing.elevenlabsVoiceAria': 'ElevenLabs voice selection', - 'voice.routing.elevenlabsVoiceIdAria': 'ElevenLabs voice ID (custom)', - 'voice.routing.elevenlabsVoiceDesc': - 'Pick a curated voice or paste a custom voice ID from your ElevenLabs dashboard.', - 'voice.externalProviders.title': 'External Voice Providers', - 'voice.externalProviders.desc': - 'Connect third-party STT/TTS APIs like Deepgram, ElevenLabs, or OpenAI directly.', - 'voice.externalProviders.keySet': 'Key set', - 'voice.externalProviders.noKey': 'No API key', - 'voice.externalProviders.test': 'Test', - 'voice.externalProviders.testing': 'Testing…', - 'voice.externalProviders.remove': 'Remove', - 'voice.externalProviders.provider': 'Provider', - 'voice.externalProviders.selectProvider': 'Select a provider…', - 'voice.externalProviders.apiKey': 'API Key', - 'voice.externalProviders.apiKeyPlaceholder': 'sk-…', - 'voice.externalProviders.add': 'Add', - 'screenAwareness.debug.debugAndDiagnostics': 'Débogage et diagnostics', - 'screenAwareness.debug.collapse': 'Réduire', - 'screenAwareness.debug.expand': 'Développer', - 'screenAwareness.debug.failedToSave': 'Failed to save screen intelligence', - 'screenAwareness.debug.policyTitle': 'Screen Intelligence Policy', - 'screenAwareness.debug.baselineFps': 'FPS de référence', - 'screenAwareness.debug.useVisionModel': 'Utiliser le modèle de vision', - 'screenAwareness.debug.useVisionModelDesc': - 'Send screenshots to a vision LLM for richer context. When off, only OCR text is used with a text LLM — faster and no vision model required.', - 'screenAwareness.debug.keepScreenshots': 'Keep Screenshots', - 'screenAwareness.debug.keepScreenshotsDesc': - 'Save captured screenshots to the workspace instead of deleting after processing', - 'screenAwareness.debug.allowlist': 'Allowlist (one rule per line)', - 'screenAwareness.debug.denylist': 'Liste de refus (une règle par ligne)', - 'screenAwareness.debug.saveSettings': 'Save Screen Intelligence Settings', - 'screenAwareness.debug.sessionStats': 'Statistiques de session', - 'screenAwareness.debug.framesEphemeral': 'Trames (éphémères)', - 'screenAwareness.debug.panicStop': 'Arrêt de panique', - 'screenAwareness.debug.defaultPanicHotkey': 'Cmd+Shift+.', - 'screenAwareness.debug.vision': 'Vision', - 'screenAwareness.debug.idle': 'inactif', - 'screenAwareness.debug.visionQueue': 'Vision queue', - 'screenAwareness.debug.lastVision': 'Dernière vision', - 'screenAwareness.debug.notAvailable': 'n/a', - 'screenAwareness.debug.visionSummaries': 'Résumés de vision', - 'screenAwareness.debug.refreshing': 'Actualisation…', - 'screenAwareness.debug.noSummaries': 'No summaries yet.', - 'screenAwareness.debug.unknownApp': 'Application inconnue', - 'screenAwareness.debug.macosOnly': 'Screen Intelligence V1 is currently supported on macOS only.', - 'memory.debugTitle': 'Débogage de la mémoire', - 'memory.documents': 'Documents', - 'memory.filterByNamespace': 'Filtrer par espace de noms...', - 'memory.refresh': 'Actualiser', - 'memory.noDocumentsFound': 'Aucun document trouvé.', - 'memory.delete': 'Supprimer', - 'memory.rawResponse': 'Réponse brute', - 'memory.namespaces': 'Espaces de noms', - 'memory.noNamespacesFound': 'Aucun espace de noms trouvé.', - 'memory.queryRecall': 'Requête et rappel', - 'memory.namespace': 'Espace de noms', - 'memory.queryText': 'Texte de requête...', - 'memory.defaultMaxChunks': '10', - 'memory.maxChunks': 'morceaux maximum', - 'memory.query': 'Requête', - 'memory.recall': 'Rappel', - 'memory.queryLabel': 'Requête', - 'memory.recallLabel': 'Rappel', - 'memory.queryResult': 'Résultat de la requête', - 'memory.recallResult': 'Rappel du résultat', - 'memory.clearNamespace': 'Clear Namespace', - 'memory.clearNamespaceDescription': 'Permanently delete all documents within a namespace.', - 'memory.selectNamespace': 'Select namespace...', - 'memory.exampleNamespace': 'par ex. skills:gmail:user@example.com', - 'memory.clear': 'Effacer', - 'memory.deleteConfirm': 'Delete document "{documentId}" in namespace "{namespace}"?', - 'memory.clearNamespaceConfirm': - 'This will permanently delete ALL documents in namespace "{namespace}". Continue?', - 'memory.clearNamespaceSuccess': 'Espace de noms « {namespace} » effacé.', - 'memory.clearNamespaceEmpty': 'Rien à effacer dans "{namespace}".', - 'webhooks.debugTitle': 'Débogage des webhooks', - 'webhooks.failedToLoadDebugData': 'Échec du chargement des données de débogage du webhook', - 'webhooks.clearLogsConfirm': 'Effacer tous les journaux de débogage des webhooks capturés ?', - 'webhooks.failedToClearLogs': 'Failed to clear webhook logs', - 'webhooks.loading': 'Chargement...', - 'webhooks.refresh': 'Actualiser', - 'webhooks.clearing': 'Effacement...', - 'webhooks.clearLogs': 'Effacer les journaux', - 'webhooks.registered': 'enregistré', - 'webhooks.captured': 'capturé', - 'webhooks.live': 'en direct', - 'webhooks.disconnected': 'déconnecté', - 'webhooks.lastEvent': 'Dernier événement', - 'webhooks.at': 'à', - 'webhooks.registeredWebhooks': 'Webhooks enregistrés', - 'webhooks.noActiveRegistrations': 'Aucune inscription active.', - 'webhooks.resolvingBackendUrl': 'Résolution du backend URL…', - 'webhooks.capturedRequests': 'Requêtes capturées', - 'webhooks.noRequestsCaptured': 'Aucune demande de webhook capturée pour le moment.', - 'webhooks.unrouted': 'non acheminé', - 'webhooks.pending': 'en attente', - 'webhooks.requestHeaders': 'En-têtes de requête', - 'webhooks.queryParams': 'Paramètres de requête', - 'webhooks.requestBody': 'Corps de la requête', - 'webhooks.responseHeaders': 'En-têtes de réponse', - 'webhooks.responseBody': 'Corps de réponse', - 'webhooks.rawPayload': 'Charge utile brute', - 'webhooks.empty': '[vide]', - 'providerSetup.error.defaultDetails': 'La configuration du fournisseur a échoué.', - 'providerSetup.error.providerFallback': 'Le fournisseur', - 'providerSetup.error.credentialsRejected': - '{provider} rejected the credentials. Check the API key and try again.', - 'providerSetup.error.endpointNotRecognized': - '{provider} did not recognize the endpoint. Check the base URL and try again.', - 'providerSetup.error.providerUnavailable': - '{provider} is unavailable right now. Try again or check the provider status.', - 'providerSetup.error.unreachable': - 'Could not reach {provider}. Check the endpoint URL and network connection, then try again.', - 'providerSetup.error.couldNotReachWithMessage': 'Could not reach {provider}: {message}', - 'providerSetup.error.technicalDetails': 'Détails techniques', - 'devices.emptyState': 'Scan a QR code on your iPhone to connect it to this OpenHuman session.', - 'devices.devicePairedTitle': 'Appareil couplé', - 'devices.devicePairedMessage': 'iPhone connecté avec succès.', - 'devices.deviceRevokedTitle': 'Appareil révoqué', - 'devices.deviceRevokedMessage': '{label} supprimé.', - 'devices.revokeFailedTitle': 'Échec de la révocation', - 'devices.lastSeenNever': 'Jamais', - 'devices.lastSeenNow': 'Just now', - 'devices.lastSeenMinutes': 'Il y a {count}m', - 'devices.lastSeenHours': 'Il y a {count}h', - 'devices.lastSeenDays': '{count}d il y a', - 'devices.revokeAria': 'Révoquer {label}', - 'devices.pairModal.expiresIn': 'Le code expire dans ~{count} minute', - 'devices.pairModal.expiresInPlural': 'Le code expire dans ~{count} minutes', - 'devices.pairModal.showDetails': 'Afficher les détails', - 'devices.pairModal.hideDetails': 'Masquer les détails', - 'devices.pairModal.channelId': 'ID de chaîne', - 'devices.pairModal.pairingUrl': 'Couplage URL', - 'devices.pairModal.errorPrefix': 'Échec de la création du couplage : {message}', - 'mcp.catalog.searchAria': 'Rechercher dans le catalogue Smithery', - 'mcp.catalog.searchPlaceholder': 'Rechercher dans le catalogue Smithery...', - 'mcp.catalog.loadFailed': 'Échec du chargement du catalogue', - 'mcp.catalog.noResults': 'Aucun serveur trouvé.', - 'mcp.catalog.noResultsFor': 'Aucun serveur trouvé pour "{query}".', - 'mcp.catalog.loadMore': 'Charger plus', - 'mcp.configAssistant.title': 'Assistant de configuration', - 'mcp.configAssistant.empty': 'Ask about configuration, required env vars, or setup steps.', - 'mcp.configAssistant.suggestedValues': 'Valeurs suggérées :', - 'mcp.configAssistant.valueHidden': '(valeur masquée)', - 'mcp.configAssistant.applySuggested': 'Appliquer les valeurs suggérées', - 'mcp.configAssistant.reinstallHint': 'Réinstallez avec ces valeurs pour les appliquer.', - 'mcp.configAssistant.thinking': 'Je réfléchis...', - 'mcp.configAssistant.inputPlaceholder': 'Ask a question (Enter to send, Shift+Enter for newline)', - 'mcp.configAssistant.send': 'Envoyer', - 'mcp.configAssistant.failedResponse': 'Failed to get response', - 'mcp.toolList.availableSingular': '{count} outil disponible', - 'mcp.toolList.availablePlural': '{count} outils disponibles', - 'mcp.toolList.tryTool': 'Try', - 'mcp.toolList.tryToolAria': 'Open execution playground for {name}', - 'mcp.playground.title': 'Run {name}', - 'mcp.playground.close': 'Close playground', - 'mcp.playground.inputSchema': 'Input schema', - 'mcp.playground.argsLabel': 'Arguments (JSON)', - 'mcp.playground.argsHelp': 'Type JSON matching the input schema. Empty input is treated as {}.', - 'mcp.playground.runShortcut': '⌘/Ctrl + Enter to run', - 'mcp.playground.format': 'Format', - 'mcp.playground.invalidJson': 'Invalid JSON', - 'mcp.playground.run': 'Run tool', - 'mcp.playground.running': 'Running…', - 'mcp.playground.result': 'Result', - 'mcp.playground.resultError': 'Tool returned an error', - 'mcp.playground.copyResult': 'Copy result', - 'mcp.playground.copied': 'Copied', - 'mcp.playground.history': 'History', - 'mcp.playground.historyEmpty': 'No invocations yet in this session.', - 'mcp.playground.historyLoad': 'Load', - 'mcp.playground.unexpectedError': 'Unexpected error invoking tool.', - 'mcp.catalog.deployed': 'Déployé', - 'mcp.catalog.installCount': '{count} installe', - 'app.update.dismissNotification': 'Ignorer la notification de mise à jour', - 'bootCheck.rpcAuthSuffix': 'tous les RPC.', - 'mcp.installed.title': 'Installé', - 'mcp.installed.browseCatalog': 'Parcourir le catalogue', - 'mcp.installed.empty': 'No MCP servers installed yet.', - 'mcp.installed.toolSingular': 'Outil {count}', - 'mcp.installed.toolPlural': 'Outils {count}', - 'mcp.health.title': 'Health', - 'mcp.health.summaryAria': 'MCP connection health summary', - 'mcp.health.connectedCount': '{count} connected', - 'mcp.health.connectingCount': '{count} connecting', - 'mcp.health.errorCount': '{count} error', - 'mcp.health.disconnectedCount': '{count} idle', - 'mcp.health.retryAll': 'Retry all ({count})', - 'mcp.health.retryAllAria': 'Retry all {count} errored MCP servers', - 'mcp.health.disconnectAll': 'Disconnect all ({count})', - 'mcp.health.disconnectAllAria': 'Disconnect all {count} connected MCP servers', - 'mcp.health.disconnectConfirm.title': 'Disconnect all MCP servers?', - 'mcp.health.disconnectConfirm.body': - 'This will disconnect {count} currently-connected MCP servers. Installed configurations and secrets are kept; you can reconnect any server later.', - 'mcp.health.disconnectConfirm.cancel': 'Cancel', - 'mcp.health.disconnectConfirm.confirm': 'Disconnect all', - 'mcp.health.opErrorGeneric': 'Bulk operation failed. See logs.', - 'mcp.health.bulkPartialFailure': '{failed} of {total} servers failed. See logs.', - 'mcp.installed.search.landmarkAria': 'Search installed MCP servers', - 'mcp.installed.search.inputAria': 'Filter installed MCP servers by name', - 'mcp.installed.search.placeholder': 'Filter servers…', - 'mcp.installed.search.clearAria': 'Clear filter', - 'mcp.installed.search.countMatches': '{shown} of {total} servers', - 'mcp.installed.search.noMatches': 'No servers match "{query}".', - 'mcp.inventory.openButton': 'Inventory', - 'mcp.inventory.openAria': 'Open the sharable MCP inventory panel', - 'mcp.inventory.title': 'Sharable MCP Inventory', - 'mcp.inventory.subtitle': - 'Export your installed MCP servers as a portable, secret-free manifest, or import one from a teammate. Secret env values are never included or imported.', - 'mcp.inventory.close': 'Close inventory panel', - 'mcp.inventory.tablistAria': 'Inventory sections', - 'mcp.inventory.tab.export': 'Export', - 'mcp.inventory.tab.import': 'Import', - 'mcp.inventory.export.empty': - 'No MCP servers installed yet — nothing to export. Install one from the catalog first.', - 'mcp.inventory.export.privacyTitle': 'What is in this manifest', - 'mcp.inventory.export.privacyBody': - 'Server names, qualified names, env-variable KEY NAMES, and non-secret config only. Secret values, your machine identifiers, and per-install timestamps are intentionally stripped.', - 'mcp.inventory.export.serverCount': '{count} servers in this manifest', - 'mcp.inventory.export.copy': 'Copy', - 'mcp.inventory.export.copied': 'Copied', - 'mcp.inventory.export.copyAria': 'Copy the manifest JSON to the clipboard', - 'mcp.inventory.export.download': 'Download', - 'mcp.inventory.export.downloadAria': 'Download the manifest as a JSON file', - 'mcp.inventory.import.trustTitle': 'Treat imported manifests as untrusted code', - 'mcp.inventory.import.trustBody': - 'An MCP server is a tool you grant your agent. Only import manifests from sources you trust. Each install requires your explicit click; nothing is auto-installed.', - 'mcp.inventory.import.pasteLabel': 'Paste manifest JSON', - 'mcp.inventory.import.pastePlaceholder': 'Paste a manifest here, or upload a .json file below.', - 'mcp.inventory.import.preview': 'Preview', - 'mcp.inventory.import.clear': 'Clear', - 'mcp.inventory.import.uploadFile': 'or upload a .json file', - 'mcp.inventory.import.uploadFileAria': 'Upload a manifest .json file', - 'mcp.inventory.import.fileTooLarge': 'File is too large (over 1 MB). Refusing to load.', - 'mcp.inventory.import.fileReadFailed': 'Could not read file.', - 'mcp.inventory.import.parseErrorPrefix': 'Could not parse manifest:', - 'mcp.inventory.import.previewHeading': 'Preview', - 'mcp.inventory.import.previewCounts': - '{total} servers — {newly} new, {already} already installed', - 'mcp.inventory.import.previewEmpty': 'Manifest contains no servers.', - 'mcp.inventory.import.exportedFrom': 'Exported from {exporter}', - 'mcp.inventory.import.exportedAt': 'at {when}', - 'mcp.inventory.import.statusNew': 'New', - 'mcp.inventory.import.statusAlreadyInstalled': 'Already installed', - 'mcp.inventory.import.envKeysLabel': 'Env keys', - 'mcp.inventory.import.install': 'Install', - 'mcp.inventory.import.installAria': 'Install {name} from this manifest', - 'mcp.inventory.import.skipped': 'skipped', - 'mcp.inventory.parseError.empty': 'Manifest is empty.', - 'mcp.inventory.parseError.invalidJson': 'Invalid JSON.', - 'mcp.inventory.parseError.rootNotObject': 'Manifest must be a JSON object at the root.', - 'mcp.inventory.parseError.unsupportedSchema': - 'Unsupported manifest schema — this file was not produced by a compatible exporter.', - 'mcp.inventory.parseError.missingExportedAt': 'Missing or invalid `exported_at` field.', - 'mcp.inventory.parseError.missingExportedBy': 'Missing or invalid `exported_by` field.', - 'mcp.inventory.parseError.invalidServers': 'Missing or invalid `servers` array.', - 'mcp.inventory.parseError.serverNotObject': 'A server entry is not an object.', - 'mcp.inventory.parseError.serverMissingQualifiedName': - 'A server entry is missing its qualified_name.', - 'mcp.inventory.parseError.serverMissingDisplayName': - 'A server entry is missing its display_name.', - 'mcp.inventory.parseError.serverEnvKeysNotArray': - 'A server entry has an env_keys field that is not an array of strings.', - 'mcp.inventory.parseError.serverContainsEnv': - 'A server entry contains an `env` value map. Refusing to import — manifests must only carry env_keys (names), never secret values.', - 'mcp.inventory.parseError.duplicateQualifiedName': - 'Duplicate qualified_name found in manifest. Each server must appear at most once.', - 'mcp.tab.loading': 'Chargement des serveurs MCP...', - 'mcp.tab.emptyDetail': 'Sélectionnez un serveur ou parcourez le catalogue.', - 'mcp.install.loadingDetail': 'Chargement des détails du serveur...', - 'mcp.install.back': 'Retourner', - 'mcp.install.title': 'Installer {name}', - 'mcp.install.requiredEnv': 'Required environment variables', - 'mcp.install.enterValue': 'Saisissez {key}', - 'mcp.install.show': 'Afficher', - 'mcp.install.hide': 'Masquer', - 'mcp.install.configLabel': 'Config (JSON facultatif)', - 'mcp.install.configPlaceholder': '{"key": "value"}', - 'mcp.install.missingRequired': '"{key}" est requis', - 'mcp.install.invalidJson': 'Config JSON is not valid JSON', - 'mcp.install.failedDetail': 'Échec du chargement des détails du serveur', - 'mcp.install.failedInstall': 'Install failed', - 'mcp.install.button': 'Installation', - 'mcp.install.installing': 'Installation...', - 'mcp.detail.suggestedEnvReady': 'Suggested environment values ready', - 'mcp.detail.suggestedEnvBody': - 'Re-install this server with the suggested values to apply them: {keys}', - 'mcp.detail.connect': 'Connecter', - 'mcp.detail.connecting': 'Connexion...', - 'mcp.detail.disconnect': 'Déconnecter', - 'mcp.detail.hideAssistant': 'Hide assistant', - 'mcp.detail.helpConfigure': 'Aidez-moi à configurer', - 'mcp.detail.confirmUninstall': 'Confirmer la désinstallation ?', - 'mcp.detail.confirmUninstallAction': 'Oui, désinstaller', - 'mcp.detail.uninstall': 'Désinstaller', - 'mcp.detail.envVars': 'Environment variables', - 'mcp.detail.tools': 'Outils', - 'onboarding.skipForNow': 'Skip for Now', - 'onboarding.localAI.continueWithCloud': 'Continuer avec Cloud', - 'onboarding.localAI.useLocalAnyway': 'Use local AI anyway (not recommended for your device)', - 'onboarding.localAI.useLocalInstead': 'Use local AI instead (connect Ollama now)', - 'onboarding.localAI.setupIssue': 'Local AI setup encountered an issue', - 'notifications.routingTitle': 'Routage des notifications', - 'notifications.routing.pipelineStats': 'Statistiques du pipeline', - 'notifications.routing.total': 'Total', - 'notifications.routing.unread': 'Non lu', - 'notifications.routing.unscored': 'Non noté', - 'notifications.routing.intelligenceTitle': 'Notification Intelligence', - 'notifications.routing.intelligenceDesc': - 'Every notification from your connected accounts is scored by a local AI model. High-importance notifications are automatically routed to your orchestrator agent so nothing critical slips through.', - 'notifications.routing.howItWorks': 'Comment ça marche', - 'notifications.routing.level.drop': 'Déposer', - 'notifications.routing.level.dropDesc': 'Bruit/spam — stockés mais non visibles', - 'notifications.routing.level.acknowledge': 'Acquitter', - 'notifications.routing.level.acknowledgeDesc': 'Low-priority — shown in notification center', - 'notifications.routing.level.react': 'Réagir', - 'notifications.routing.level.reactDesc': 'Medium-priority — triggers a focused agent response', - 'notifications.routing.level.escalate': 'Escalader', - 'notifications.routing.level.escalateDesc': 'High-priority — forwarded to orchestrator agent', - 'notifications.routing.perProvider': 'Routage par fournisseur', - 'notifications.routing.threshold': 'Seuil', - 'notifications.routing.routeToOrchestrator': 'Route to orchestrator', - 'notifications.routing.loadSettingsError': 'Failed to load settings. Reopen this panel to retry.', - 'settings.billing.inferenceBudget.title': 'Inference Budget', - 'settings.billing.inferenceBudget.noRecurringPlanBudget': 'Aucun budget de plan récurrent', - 'settings.billing.inferenceBudget.noRecurringWeeklyDesc': - 'Your current plan does not include a recurring weekly inference budget. Usage is paid from available credits instead.', - 'settings.billing.inferenceBudget.remainingSummary': '{remaining} / {budget} restants', - 'settings.billing.inferenceBudget.spentThisCycle': 'Dépensé {amount} ce cycle', - 'settings.billing.inferenceBudget.cycleEndsOn': 'Le cycle se termine {date}', - 'settings.billing.inferenceBudget.exhaustedDesc': - 'Included subscription usage is exhausted. Top up credits to keep using AI without waiting for the next cycle.', - 'settings.billing.inferenceBudget.discountVsPayg': '{pct}% cheaper per call than pay-as-you-go.', - 'settings.billing.inferenceBudget.cycleSpend': 'Dépenses de cycle', - 'settings.billing.inferenceBudget.totalAmount': '{amount} total', - 'settings.billing.inferenceBudget.inference': 'Inférence', - 'settings.billing.inferenceBudget.integrations': 'Intégrations', - 'settings.billing.inferenceBudget.calls': '{count} appels', - 'settings.billing.inferenceBudget.dailySpend': 'Dépenses quotidiennes', - 'settings.billing.inferenceBudget.dailySpendPoint': '{date}: {amount}', - 'settings.billing.inferenceBudget.topModels': 'Top modèles', - 'settings.billing.inferenceBudget.noInferenceUsage': 'No inference usage this cycle.', - 'settings.billing.inferenceBudget.topIntegrations': 'Principales intégrations', - 'settings.billing.inferenceBudget.noIntegrationUsage': 'No integration usage this cycle.', - 'settings.billing.inferenceBudget.unableToLoad': 'Unable to load usage data', - 'settings.billing.inferenceBudget.notAvailable': 'n/a', - 'memory.sourceFilterAria': 'Filtrer par source', - 'calls.comingSoonDescription': 'AI-assisted calls are coming soon. Stay tuned.', - 'vault.title': 'Coffres de connaissances', - 'vault.description': 'Point at a local folder; files are chunked and mirrored into memory.', - 'vault.add': 'Ajouter un coffre-fort', - 'vault.added': 'Coffre-fort ajouté', - 'vault.createdMessage': 'Création de "{name}". Cliquez sur {sync} pour ingérer.', - 'vault.couldNotAdd': 'Could not add vault', - 'vault.syncFailed': 'Échec de la synchronisation', - 'vault.syncFailedFor': 'Échec de la synchronisation pour « {name} »', - 'vault.syncFailedFiles': 'Échec de {count} fichier(s)', - 'vault.syncedTitle': '"{name}" synchronisé', - 'vault.syncSummary': '{ingested} ingéré, {unchanged} inchangé, supprimé {removed}', - 'vault.syncSummaryFailed': ', échec {count}', - 'vault.syncSummarySkipped': ', ignoré {count}', - 'vault.syncSummaryDuration': '· {seconds}s', - 'vault.confirmRemovePurge': - 'Remove vault "{name}"?\n\nClick OK to also purge its memory (delete all {count} ingested document(s)).\nClick Cancel to keep the documents in memory.', - 'vault.confirmRemove': 'Voulez-vous vraiment supprimer le coffre-fort « {name} » ?', - 'vault.removed': 'Vault supprimé', - 'vault.removedPurgedMessage': 'Supprimé "{name}" et purgé sa mémoire.', - 'vault.removedKeptMessage': 'Suppression de "{name}". Documents conservés en mémoire.', - 'vault.couldNotRemove': 'Impossible de supprimer le coffre-fort', - 'vault.name': 'Nom', - 'vault.namePlaceholder': 'Mes notes de recherche', - 'vault.folderPath': 'Chemin du dossier (absolu)', - 'vault.folderPathPlaceholder': '/Utilisateurs/vous/Documents/notes', - 'vault.excludes': 'Exclut (sous-chaînes séparées par des virgules, facultatif)', - 'vault.excludesPlaceholder': 'drafts/, .secret', - 'vault.creating': 'Création…', - 'vault.create': 'Créer un coffre-fort', - 'vault.loading': 'Chargement coffres-forts…', - 'vault.failedToLoad': 'Échec du chargement des coffres-forts : {error}', - 'vault.empty': 'No vaults yet. Add one above to start ingesting a folder.', - 'vault.fileCount': '{count} fichier(s)', - 'vault.syncedRelative': 'synchronisés {time}', - 'vault.neverSynced': 'jamais synchronisés', - 'vault.syncingProgress': 'Synchronisation… {ingested}/{total}', - 'vault.removing': 'Suppression…', - 'vault.relative.sec': 'il y a {count}s', - 'vault.relative.min': 'il y a {count}m', - 'vault.relative.hr': 'il y a {count}h', - 'vault.relative.day': '{count}d', - 'whatsapp.title': 'WhatsApp', - 'subconscious.interval.fiveMinutes': '5 min', - 'subconscious.interval.tenMinutes': '10 min', - 'subconscious.interval.fifteenMinutes': '15 min', - 'subconscious.interval.thirtyMinutes': '30 min', - 'subconscious.interval.oneHour': '1 heure', - 'subconscious.interval.sixHours': '6 heures', - 'subconscious.interval.twelveHours': '12 heures', - 'subconscious.interval.oneDay': '1 jour', - 'subconscious.priority.critical': 'critique', - 'subconscious.priority.important': 'important', - 'subconscious.priority.normal': 'normal', - 'subconscious.durationSeconds': '{seconds}s', - 'subconscious.durationMilliseconds': '{milliseconds}ms', - 'settings.search.allowedSitesLabel': 'Allowed websites', - 'settings.search.allowedSitesHint': - 'Websites the assistant may open and read while researching (one host per line, e.g. reuters.com). A host also covers its subdomains. Leave empty to block all web access.', - 'settings.search.allowedSitesAllOn': - 'The assistant can open any public website. Local and private addresses stay blocked.', - 'settings.search.allowedSitesPlaceholder': 'reuters.com\napnews.com\ngithub.com', - 'settings.search.allowedSitesSave': 'Save websites', - 'settings.search.accessModeAria': 'Web access mode', - 'settings.search.accessAllowAll': 'Allow all', - 'settings.search.accessCustom': 'Custom', - 'settings.search.accessBlockAll': 'Block all', - 'settings.search.accessBlockAllHint': - 'All web access is blocked — the assistant cannot open or read any website.', - 'memory.tab.centrality': 'Centrality', - 'graphCentrality.title': 'Knowledge Graph Centrality', - 'graphCentrality.intro': - 'PageRank over your memory graph surfaces the load-bearing hubs — and the connector entities that link otherwise-separate clusters, which a raw frequency count cannot reveal.', - 'graphCentrality.loading': 'Computing centrality…', - 'graphCentrality.errorPrefix': 'Could not load the graph:', - 'graphCentrality.retry': 'Retry', - 'graphCentrality.empty': 'No knowledge graph yet.', - 'graphCentrality.emptyHint': - 'As the assistant records facts about you, the most connected entities will surface here.', - 'graphCentrality.namespaceLabel': 'Namespace', - 'graphCentrality.namespaceAll': 'All namespaces', - 'graphCentrality.metricEntities': 'Entities', - 'graphCentrality.metricConnections': 'Connections', - 'graphCentrality.metricClusters': 'Clusters', - 'graphCentrality.clustersCaption': '{components} clusters · largest holds {largest}', - 'graphCentrality.approximateBadge': 'approximate', - 'graphCentrality.approximateTitle': 'Stopped at the iteration cap before fully converging', - 'graphCentrality.rankedHeading': 'Top entities by influence', - 'graphCentrality.colRank': '#', - 'graphCentrality.colEntity': 'Entity', - 'graphCentrality.colInfluence': 'Influence', - 'graphCentrality.colLinks': 'Links', - 'graphCentrality.bridgeBadge': 'connector', - 'graphCentrality.bridgeTitle': 'Connector — more influential than its link count suggests', - 'graphCentrality.degreeTitle': '{in} in · {out} out', - 'settings.search.engineDisabledLabel': 'Disabled', - 'settings.search.engineDisabledDesc': - 'Remove search tools from the agent context and available tool list.', -}; - -export default fr1; diff --git a/app/src/lib/i18n/chunks/fr-2.ts b/app/src/lib/i18n/chunks/fr-2.ts deleted file mode 100644 index 9343754d9..000000000 --- a/app/src/lib/i18n/chunks/fr-2.ts +++ /dev/null @@ -1,511 +0,0 @@ -import type { TranslationMap } from '../types'; - -// French (Français) chunk 2/5. Translated from chunks/en-2.ts. -const fr2: TranslationMap = { - 'settings.ai.configStatus': 'État de la configuration', - 'settings.ai.fallbackMode': 'Mode de secours', - 'settings.ai.loadedFromRuntime': 'Chargé depuis le runtime', - 'settings.ai.loadingDuration': 'Durée de chargement', - 'settings.ai.localRuntime': 'Runtime de modèle local', - 'settings.ai.openManager': 'Ouvrir le gestionnaire', - 'settings.ai.retryDownload': 'Relancer le téléchargement', - 'settings.ai.state': 'État', - 'settings.ai.targetModel': 'Modèle cible', - 'settings.ai.download': 'Télécharger', - 'settings.ai.localModelUnavailable': 'État du modèle local indisponible.', - 'settings.ai.soulConfig': 'Configuration de la persona SOUL', - 'settings.ai.refreshing': 'Actualisation…', - 'settings.ai.refreshSoul': 'Actualiser SOUL', - 'settings.ai.loadingSoul': 'Chargement de la configuration SOUL…', - 'settings.ai.identity': 'Identité', - 'settings.ai.personality': 'Personnalité', - 'settings.ai.safetyRules': 'Règles de sécurité', - 'settings.ai.source': 'Source', - 'settings.ai.loaded': 'Chargé', - 'settings.ai.toolsConfig': 'Configuration TOOLS', - 'settings.ai.refreshTools': 'Actualiser TOOLS', - 'settings.ai.toolsAvailable': 'Outils disponibles', - 'settings.ai.tools': 'outils', - 'settings.ai.activeSkills': 'Compétences actives', - 'settings.ai.skills': 'compétences', - 'settings.ai.skillsOverview': "Vue d'ensemble des compétences", - 'settings.ai.refreshingAll': 'Tout actualiser…', - 'settings.ai.refreshAll': 'Actualiser toute la configuration IA', - 'settings.notifications.suppressAll': 'Supprimer toutes les notifications', - 'settings.notifications.suppressAllDesc': - "Bloquer toutes les notifications OS des apps intégrées, quel que soit l'état de mise au premier plan.", - 'settings.notifications.toggleDnd': 'Activer/désactiver Ne pas déranger', - 'settings.notifications.categories': 'Catégories', - 'settings.notifications.categoryFooter': - "Désactiver une catégorie empêche les nouvelles notifications de ce type d'apparaître dans le centre de notifications. Les notifications existantes restent jusqu'à ce qu'elles soient effacées.", - 'settings.billing.movedToWeb': 'La facturation est maintenant sur le web', - 'settings.billing.openDashboard': 'Ouvrir le tableau de bord de facturation', - 'settings.billing.movedToWebDesc': - "Les changements d'abonnement, méthodes de paiement, crédits et factures sont désormais gérés sur TinyHumans en ligne.", - 'settings.billing.backToSettings': 'Retour aux paramètres', - 'settings.billing.openingBrowser': 'Ouverture du navigateur…', - 'settings.billing.browserNotOpen': - "Si ton navigateur ne s'est pas ouvert, utilise le bouton ci-dessus.", - 'settings.billing.browserOpenFailed': - "Le navigateur n'a pas pu s'ouvrir automatiquement. Utilise le bouton ci-dessus.", - 'settings.tools.chooseCapabilities': - "Choisis les fonctionnalités qu'OpenHuman peut utiliser en ton nom.", - 'settings.tools.saveChanges': 'Enregistrer les modifications', - 'settings.tools.preferencesSaved': 'Préférences enregistrées', - 'settings.tools.saveFailed': "Échec de l'enregistrement des préférences. Réessaie.", - 'settings.screenAwareness.mode': 'Mode', - 'settings.screenAwareness.allExceptBlacklist': 'Tout sauf la liste noire', - 'settings.screenAwareness.whitelistOnly': 'Liste blanche uniquement', - 'settings.screenAwareness.screenMonitoring': "Surveillance de l'écran", - 'settings.screenAwareness.saveSettings': 'Enregistrer les paramètres', - 'settings.screenAwareness.session': 'Session', - 'settings.screenAwareness.status': 'État', - 'settings.screenAwareness.active': 'Actif', - 'settings.screenAwareness.stopped': 'Arrêté', - 'settings.screenAwareness.remaining': 'Restant', - 'settings.screenAwareness.startSession': 'Démarrer la session', - 'settings.screenAwareness.stopSession': 'Arrêter la session', - 'settings.screenAwareness.analyzeNow': 'Analyser maintenant', - 'settings.screenAwareness.macosOnly': - "La capture d'écran et les contrôles d'autorisation de la surveillance de l'écran sont actuellement pris en charge sur macOS uniquement.", - 'connections.comingSoon': 'Bientôt disponible', - 'connections.setUp': 'Configurer', - 'connections.configured': 'Configuré', - 'connections.unavailable': 'Indisponible', - 'connections.checking': 'Vérification…', - 'connections.walletConfigured': - 'Les identités locales EVM, BTC, Solana et Tron sont configurées depuis ta phrase de récupération.', - 'connections.walletReady': - 'Configure les identités locales EVM, BTC, Solana et Tron depuis une seule phrase de récupération.', - 'connections.walletError': - "Impossible de vérifier l'état du portefeuille. Appuie pour réessayer depuis le panneau de phrase de récupération.", - 'connections.walletChecking': "Vérification de l'état du portefeuille…", - 'connections.walletIdentities': 'Identités de portefeuille', - 'connections.walletDerived': - 'Dérivé localement depuis ta phrase de récupération et stocké comme métadonnées sécurisées uniquement.', - 'connections.privacySecurity': 'Confidentialité & Sécurité', - 'connections.privacySecurityDesc': - "Toutes les données et informations d'identification sont stockées localement avec une politique de zéro rétention de données. Tes informations sont chiffrées et ne sont jamais partagées avec des tiers.", - 'channels.status.connecting': 'Connexion en cours', - 'channels.status.notConfigured': 'Non configuré', - 'channels.noActiveRoute': 'Aucune route active', - 'channels.activeRoute': 'Route active', - 'channels.loadingDefinitions': 'Chargement des définitions de canaux…', - 'channels.channelConnections': 'Connexions de canaux', - 'channels.configureAuthModes': - "Configurer les modes d'authentification pour chaque canal de messagerie.", - 'channels.configNotAvailable': 'Configuration pour', - 'channels.channel': 'canal', - 'devOptions.coreModeNotSet': 'Mode core : non défini', - 'devOptions.coreModeNotSetDesc': - "Le sélecteur de vérification au démarrage n'a pas encore été confirmé. Utilise Changer de mode dans le sélecteur pour choisir Local ou Cloud.", - 'devOptions.local': 'Local', - 'devOptions.embeddedCoreSidecar': 'Sidecar core intégré', - 'devOptions.sidecarSpawned': - "Lancé en processus interne par le shell Tauri au démarrage de l'app.", - 'devOptions.cloud': 'Cloud', - 'devOptions.remoteCoreRpc': 'RPC core distant', - 'devOptions.token': 'Jeton', - 'devOptions.tokenNotSet': 'non défini — le RPC renverra 401', - 'devOptions.triggerSentryTest': 'Déclencher un test Sentry (staging)', - 'devOptions.triggerSentryTestDesc': - 'Envoie une erreur balisée pour vérifier le pipeline Sentry. Issue #1072 — à supprimer après vérification.', - 'devOptions.sendTestEvent': 'Envoyer un événement de test', - 'devOptions.sending': 'Envoi…', - 'devOptions.eventSent': 'Événement envoyé', - 'devOptions.failed': 'Échec', - 'devOptions.appLogs': "Journaux de l'app", - 'devOptions.appLogsDesc': - 'Ouvrir le dossier contenant les fichiers journaux quotidiens. Joins le fichier le plus récent quand tu signales un problème.', - 'devOptions.openLogsFolder': 'Ouvrir le dossier des journaux', - 'mnemonic.phraseSaved': 'Phrase de récupération enregistrée', - 'mnemonic.walletReady': - 'Les identités de portefeuille multi-chaîne sont prêtes. Retour aux paramètres…', - 'mnemonic.writeDownWords': 'Note ces', - 'mnemonic.wordsInOrder': - "mots dans l'ordre et conserve-les en lieu sûr. Cette phrase sécurise ta clé de chiffrement locale et tes identités de portefeuille EVM, BTC, Solana et Tron.", - 'mnemonic.cannotRecover': - 'Cette phrase ne peut jamais être récupérée si elle est perdue et doit rester entièrement locale sur ton appareil.', - 'mnemonic.copyToClipboard': 'Copier dans le presse-papiers', - 'mnemonic.alreadyHavePhrase': "J'ai déjà une phrase de récupération", - 'mnemonic.consentSaved': - "J'ai sauvegardé cette phrase et j'accepte de l'utiliser pour la configuration du portefeuille local", - 'mnemonic.enterPhraseToRestore': - "Saisis ta phrase de récupération ci-dessous pour restaurer tes identités de portefeuille locales, ou colle la phrase complète dans n'importe quel champ (12 mots pour les nouvelles sauvegardes ; les phrases de 24 mots des versions antérieures fonctionnent toujours).", - 'mnemonic.words': 'Mots', - 'mnemonic.validPhrase': 'Phrase de récupération valide', - 'mnemonic.generateNewPhrase': 'Générer une nouvelle phrase de récupération à la place', - 'mnemonic.securingData': 'Sécurisation de tes données…', - 'mnemonic.saveRecoveryPhrase': 'Enregistrer la phrase de récupération', - 'mnemonic.userNotLoaded': 'Utilisateur non chargé. Reconnecte-toi ou actualise la page.', - 'mnemonic.invalidPhrase': 'Phrase de récupération invalide. Vérifie tes mots et réessaie.', - 'mnemonic.somethingWentWrong': "Une erreur s'est produite. Réessaie.", - 'team.failedToCreate': "Échec de la création de l'équipe", - 'team.invalidInviteCode': "Code d'invitation invalide ou expiré", - 'team.failedToSwitch': "Échec du changement d'équipe", - 'team.failedToLeave': "Échec de la sortie de l'équipe", - 'team.role.owner': 'Propriétaire', - 'team.role.admin': 'Administrateur', - 'team.role.billingManager': 'Gestionnaire de facturation', - 'team.role.member': 'Membre', - 'team.active': 'Actif', - 'team.personalTeam': 'Équipe personnelle', - 'team.manageTeam': "Gérer l'équipe", - 'team.switching': 'Changement…', - 'team.switch': 'Changer', - 'team.leaving': 'Départ…', - 'team.leave': 'Quitter', - 'team.yourTeams': 'Tes équipes', - 'team.createNewTeam': 'Créer une nouvelle équipe', - 'team.teamName': "Nom de l'équipe", - 'team.creating': 'Création…', - 'team.joinExistingTeam': 'Rejoindre une équipe existante', - 'team.inviteCode': "Code d'invitation", - 'team.joining': 'Adhésion…', - 'team.join': 'Rejoindre', - 'team.leaveTeam': "Quitter l'équipe", - 'team.confirmLeave': 'Es-tu sûr de vouloir quitter', - 'team.leaveWarning': - "Tu perdras l'accès à l'équipe et à toutes ses ressources. Tu auras besoin d'une nouvelle invitation pour la rejoindre.", - 'team.management': "Gestion de l'équipe", - 'team.notFound': 'Équipe introuvable', - 'team.accessDenied': 'Accès refusé', - 'team.members': 'Membres', - 'voice.title': 'Dictée vocale', - 'voice.settings': 'Paramètres vocaux', - 'voice.settingsDesc': - 'Maintiens le raccourci pour dicter et insérer du texte dans le champ actif.', - 'voice.hotkey': 'Raccourci', - 'voice.activationMode': "Mode d'activation", - 'voice.tapToToggle': 'Appuyer pour activer/désactiver', - 'voice.writingStyle': "Style d'écriture", - 'voice.verbatimTranscription': 'Transcription verbatim', - 'voice.naturalCleanup': 'Nettoyage naturel', - 'voice.autoStart': 'Démarrer le serveur vocal automatiquement avec le core', - 'voice.customDictionary': 'Dictionnaire personnalisé', - 'voice.customDictionaryDesc': - 'Ajoute des noms, termes techniques et mots du domaine pour améliorer la précision de la reconnaissance.', - 'voice.addWord': 'Ajouter un mot…', - 'voice.sttDisabled': - "La dictée vocale est désactivée jusqu'à ce que le modèle STT local soit téléchargé et prêt.", - 'voice.openLocalAiModel': 'Ouvrir le modèle IA local', - 'voice.serverRestarted': 'Serveur vocal redémarré avec les nouveaux paramètres.', - 'voice.settingsSaved': 'Paramètres vocaux enregistrés.', - 'voice.serverStarted': 'Serveur vocal démarré.', - 'voice.serverStopped': 'Serveur vocal arrêté.', - 'voice.saveVoiceSettings': 'Enregistrer les paramètres vocaux', - 'voice.startVoiceServer': 'Démarrer le serveur vocal', - 'voice.stopVoiceServer': 'Arrêter le serveur vocal', - 'voice.debugTitle': 'Débogage vocal', - 'autocomplete.title': 'Autocomplétion', - 'autocomplete.settings': 'Paramètres', - 'autocomplete.acceptWithTab': 'Accepter avec Tab', - 'autocomplete.stylePreset': 'Préréglage de style', - 'autocomplete.style.balanced': 'Équilibré', - 'autocomplete.style.concise': 'Concis', - 'autocomplete.style.formal': 'Formel', - 'autocomplete.style.casual': 'Décontracté', - 'autocomplete.style.custom': 'Personnalisé', - 'autocomplete.disabledApps': "Apps désactivées (un identifiant d'app par ligne)", - 'autocomplete.saveSettings': 'Enregistrer les paramètres', - 'autocomplete.saving': 'Enregistrement…', - 'autocomplete.runtime': 'Runtime', - 'autocomplete.running': 'En cours', - 'autocomplete.start': 'Démarrer', - 'autocomplete.stop': 'Arrêter', - 'autocomplete.settingsSaved': "Paramètres d'autocomplétion enregistrés.", - 'autocomplete.started': 'Autocomplétion démarrée.', - 'autocomplete.didNotStart': "L'autocomplétion n'a pas démarré. Vérifie qu'elle est activée.", - 'autocomplete.stopped': 'Autocomplétion arrêtée.', - 'autocomplete.advancedSettings': 'Paramètres avancés', - 'autocomplete.debugTitle': "Débogage de l'autocomplétion", - 'chat.agentChat': "Chat avec l'agent", - 'chat.overrides': 'Remplacements', - 'chat.model': 'Modèle', - 'chat.temperature': 'Température', - 'chat.conversation': 'Conversation', - 'chat.startAgentConversation': "Démarre une conversation avec l'agent.", - 'chat.you': 'Toi', - 'chat.agent': 'Agent', - 'chat.askAgent': "Pose n'importe quelle question à l'agent…", - 'chat.sendMessage': 'Envoyer le message', - 'composio.triageTitle': "Déclencheurs d'intégration", - 'composio.triageDesc': - "Quand activé, chaque déclencheur Composio entrant passe par une étape de triage IA qui classe l'événement et peut lancer des actions automatisées — un tour LLM local par déclencheur. Désactive globalement ou par intégration si tu préfères une revue manuelle. Si la variable d'environnement", - 'composio.disableAllTriage': 'Désactiver le triage IA pour tous les déclencheurs', - 'composio.triggersStillRecorded': - "Les déclencheurs sont toujours enregistrés dans l'historique — aucun tour LLM n'est exécuté.", - 'composio.disableSpecificIntegrations': - 'Désactiver le triage IA pour des intégrations spécifiques', - 'composio.settingsSaved': 'Paramètres enregistrés', - 'composio.saveFailed': "Échec de l'enregistrement. Réessaie.", - 'cron.title': 'Tâches cron', - 'cron.scheduledJobs': 'Tâches planifiées', - 'cron.manageCronJobs': 'Gérer les tâches cron depuis le planificateur core.', - 'cron.refreshCronJobs': 'Actualiser les tâches cron', - 'localModel.modelStatus': 'État du modèle', - 'localModel.downloadModels': 'Télécharger les modèles', - 'localModel.usage': 'Utilisation', - 'localModel.usageDesc': - 'Choisis quels sous-systèmes tournent sur le modèle local. Tout ce qui est désactivé utilise le cloud.', - 'localModel.enableRuntime': 'Activer le runtime IA local', - 'localModel.enableRuntimeDesc': - "Interrupteur principal. Désactivé par défaut — Ollama reste en veille. Quand activé, le résumeur d'arbre, l'intelligence d'écran et l'autocomplétion utilisent toujours le modèle local.", - 'localModel.advancedSettings': 'Paramètres avancés', - 'localModel.debugTitle': 'Débogage du modèle local', - 'localModel.ollamaServer.helperText': 'Exemple : http://192.168.1.5:11434', - 'localModel.ollamaServer.label': 'URL du serveur Ollama', - 'localModel.ollamaServer.modelCount': 'modèles', - 'localModel.ollamaServer.placeholder': 'http://localhost:11434', - 'localModel.ollamaServer.reachable': 'Accessible', - 'localModel.ollamaServer.resetButton': 'Réinitialiser par défaut', - 'localModel.ollamaServer.saveButton': 'Enregistrer', - 'localModel.ollamaServer.testButton': 'Tester la connexion', - 'localModel.ollamaServer.unreachable': 'Inaccessible', - 'localModel.ollamaServer.validationError': 'Doit être une URL http:// ou https:// valide', - 'screenAwareness.debugTitle': "Débogage de la surveillance de l'écran", - 'memory.debugTitle': 'Débogage de la mémoire', - 'webhooks.debugTitle': 'Débogage des webhooks', - 'notifications.routingTitle': 'Routage des notifications', - 'common.reload': 'Recharger', - 'common.skip': 'Passer', - 'common.disable': 'Désactiver', - 'common.enable': 'Activer', - 'chat.safetyTimeout': - "Aucune réponse de l'agent après 2 minutes. Réessaie ou vérifie ta connexion.", - 'chat.filter.all': 'Tous', - 'chat.filter.work': 'Travail', - 'chat.filter.briefing': 'Briefing', - 'chat.filter.notification': 'Notification', - 'chat.filter.workers': 'Travailleurs', - 'chat.selectThread': 'Sélectionne un fil', - 'chat.threads': 'Fils', - 'chat.noThreads': "Aucun fil pour l'instant", - 'chat.noLabelThreads': 'Aucun fil « {label} »', - 'chat.noWorkerThreads': "Aucun fil worker pour l'instant", - 'chat.deleteThread': 'Supprimer le fil', - 'chat.deleteThreadConfirm': 'Es-tu sûr de vouloir supprimer « {title} » ?', - 'chat.untitledThread': 'Fil sans titre', - 'chat.editThreadTitle': 'Edit thread title', - 'chat.hideSidebar': 'Masquer la barre latérale', - 'chat.showSidebar': 'Afficher la barre latérale', - 'chat.newThreadShortcut': 'Nouveau fil (/new)', - 'chat.new': 'Nouveau', - 'chat.failedToLoadMessages': 'Échec du chargement des messages', - 'chat.thinkingIteration': 'Réflexion… ({n})', - 'chat.thinkingDots': 'Réflexion…', - 'chat.approachingLimit': "Limite d'utilisation proche", - 'chat.approachingLimitMsg': 'Tu as utilisé {pct}% de ton quota disponible.', - 'chat.upgrade': 'Passer à la version supérieure', - 'chat.weeklyLimitHit': 'Tu as atteint ta limite hebdomadaire.', - 'chat.resets': 'Réinitialisation', - 'chat.topUpToContinue': 'Recharge pour continuer.', - 'chat.budgetComplete': - 'Ton budget inclus est épuisé. Ajoute des crédits ou passe à la version supérieure pour continuer.', - 'chat.topUp': 'Recharger', - 'chat.cycle': 'Cycle', - 'chat.cycleSpent': 'Dépensé ce cycle', - 'chat.cycleRemaining': 'Restant', - 'chat.left': 'restant', - 'chat.setup': 'Configurer', - 'chat.switchToText': 'Passer au texte', - 'chat.transcribing': 'Transcription…', - 'chat.stopAndSend': 'Arrêter et envoyer', - 'chat.startTalking': 'Commence à parler', - 'chat.playingVoiceReply': 'Lecture de la réponse vocale', - 'chat.voiceHint': 'Utilise le micro pour parler', - 'chat.micUnavailable': 'Microphone indisponible', - 'chat.turn': 'tour', - 'chat.turns': 'tours', - 'chat.openWorkerThread': 'Ouvrir le fil worker', - 'chat.attachment.attach': 'Joindre une image', - 'chat.attachment.remove': 'Supprimer {name}', - 'chat.attachment.tooMany': 'Maximum {max} images par message', - 'chat.attachment.tooLarge': "L'image dépasse la taille limite de {max}", - 'chat.attachment.unsupportedType': - 'Type de fichier non pris en charge. Utilisez PNG, JPEG, WebP, GIF ou BMP.', - 'chat.attachment.readFailed': 'Impossible de lire le fichier', - 'memory.searchAria': 'Rechercher dans la mémoire', - 'memory.searchPlaceholder': 'Rechercher des entrées de mémoire…', - 'memory.sourceFilter.all': 'Toutes les sources', - 'memory.sourceFilter.email': 'E-mail', - 'memory.sourceFilter.calendar': 'Calendrier', - 'memory.sourceFilter.telegram': 'Telegram', - 'memory.sourceFilter.aiInsight': 'Insight IA', - 'memory.sourceFilter.system': 'Système', - 'memory.sourceFilter.trading': 'Trading', - 'memory.sourceFilter.security': 'Sécurité', - 'memory.ingestionActivity': "Activité d'ingestion", - 'memory.events': 'événements', - 'memory.event': 'événement', - 'memory.overTheLast': 'au cours des derniers', - 'memory.months': 'mois', - 'memory.peak': 'Pic', - 'memory.perDay': '/jour', - 'memory.less': 'Moins', - 'memory.more': 'Plus', - 'memory.on': 'le', - 'memory.loading': 'Chargement de la mémoire', - 'memory.fetching': 'Récupération de tes entrées de mémoire…', - 'memory.analyzing': 'Analyse de la mémoire', - 'memory.analyzingHint': 'Traitement de tes souvenirs pour en extraire des insights…', - 'memory.noMatches': 'Aucun résultat trouvé', - 'memory.noMatchesHint': 'Essaie de modifier tes termes de recherche ou tes filtres.', - 'memory.allCaughtUp': 'Tout est à jour', - 'memory.allCaughtUpHint': 'Aucune nouvelle entrée de mémoire à traiter.', - 'memory.noAnalysis': "Pas encore d'analyse", - 'memory.noAnalysisHint': 'Lance une analyse pour découvrir des tendances dans tes souvenirs.', - 'memory.emptyHint': 'Commence à interagir pour créer tes premiers souvenirs.', - 'mic.unavailable': "Le microphone n'est pas disponible", - 'mic.permissionDenied': 'Permission microphone refusée', - 'mic.failedToStartRecorder': "Échec du démarrage de l'enregistreur", - 'mic.transcribing': 'Transcription…', - 'mic.tapToSend': 'Appuie pour envoyer', - 'mic.waitingForAgent': "En attente de l'agent…", - 'mic.tapAndSpeak': 'Appuie et parle', - 'mic.stopRecording': "Arrêter l'enregistrement et envoyer", - 'mic.startRecording': "Démarrer l'enregistrement", - 'token.usageLimitReached': "Limite d'utilisation atteinte", - 'token.approachingLimit': 'Limite proche', - 'token.planClickForDetails': 'plan - clique pour les détails', - 'token.sessionTokens': 'Entrée : {in} | Sortie : {out} | Tours : {turns}', - 'token.limit': 'Limite atteinte', - 'catalog.noCapabilityBinding': 'Aucune liaison de fonctionnalité', - 'catalog.downloadFailed': 'Échec du téléchargement', - 'catalog.active': 'Actif', - 'catalog.installed': 'Installé', - 'catalog.notDownloaded': 'Non téléchargé', - 'catalog.inUse': "En cours d'utilisation", - 'catalog.use': 'Utiliser', - 'catalog.deleteModel': 'Supprimer le modèle', - 'catalog.download': 'Télécharger', - 'navigator.recent': 'Récent', - 'navigator.today': "Aujourd'hui", - 'navigator.thisWeek': 'Cette semaine', - 'navigator.sources': 'Sources', - 'navigator.email': 'E-mail', - 'navigator.slack': 'Slack', - 'navigator.chat': 'Chat', - 'navigator.documents': 'Documents', - 'navigator.people': 'Personnes', - 'navigator.topics': 'Sujets', - 'dreams.description': - 'Les rêves sont des réflexions générées par IA qui synthétisent des tendances de ta mémoire.', - 'dreams.comingSoon': 'Bientôt disponible', - 'assignment.memoryLlm': 'LLM de mémoire', - 'assignment.memoryLlmAria': 'Sélection du LLM de mémoire', - 'assignment.embedder': 'Intégrateur', - 'assignment.loaded': 'Chargé', - 'assignment.notDownloaded': 'Non téléchargé', - 'assignment.usedForExtractSummarise': "Utilisé pour l'extraction et la synthèse", - 'insights.knownFacts': 'Faits connus', - 'insights.preferences': 'Préférences', - 'insights.relationships': 'Relations', - 'insights.skills': 'Compétences', - 'insights.opinions': 'Opinions', - // Developer options menu items (#2225) — English stubs; native translations welcome - 'devOptions.menuAi': "Configuration de l'IA", - 'devOptions.menuAiDesc': - 'Fournisseurs de cloud, modèles Ollama locaux et routage par charge de travail', - 'devOptions.menuScreenAware': "Connaissance de l'écran", - 'devOptions.menuScreenAwareDesc': - "Autorisations de capture d'écran, stratégie de surveillance et contrôles de session", - 'devOptions.menuMessaging': 'Canaux de messagerie', - 'devOptions.menuMessagingDesc': - "Configurer les modes d'authentification Telegram/Discord et le routage des canaux par défaut", - 'devOptions.menuTools': 'Outils', - 'devOptions.menuToolsDesc': - 'Activer ou désactiver les fonctionnalités que OpenHuman peut utiliser en votre nom', - 'devOptions.menuAgentChat': "Chat d'agent", - 'devOptions.menuAgentChatDesc': - "Conversation de l'agent de test avec remplacements de modèle et de température", - 'devOptions.menuCronJobs': 'Tâches Cron', - 'devOptions.menuCronJobsDesc': - "Afficher et configurer les tâches planifiées pour les compétences d'exécution", - 'devOptions.menuLocalModelDebug': 'Débogage du modèle local', - 'devOptions.menuLocalModelDebugDesc': - "Ollama configuration, téléchargements d'actifs, tests de modèles et diagnostics", - 'devOptions.menuWebhooksDebug': 'Webhooks', - 'devOptions.menuWebhooksDebugDesc': - "Inspecter les enregistrements de webhooks d'exécution et les journaux de requêtes capturés", - 'devOptions.menuIntelligence': 'Intelligence', - 'devOptions.menuIntelligenceDesc': - 'Espace de travail mémoire, moteur subconscient, rêves et paramètres', - 'devOptions.menuNotificationRouting': 'Routage des notifications', - 'devOptions.menuNotificationRoutingDesc': - "Score d'importance de l'IA et escalade de l'orchestrateur pour les alertes d'intégration", - 'devOptions.menuComposeIOTriggers': 'Déclencheurs ComposeIO', - 'devOptions.menuComposeIOTriggersDesc': - "Afficher l'historique et les archives des déclencheurs ComposeIO", - 'devOptions.menuComposioRouting': 'Routage Composio (mode direct)', - 'devOptions.menuComposioRoutingDesc': - 'Apportez votre propre clé Composio API et acheminez les appels directement vers backend.composio.dev', - 'devOptions.menuComposioTriggers': "Déclencheurs d'intégration", - 'devOptions.menuComposioTriggersDesc': - "Configurez les paramètres de triage IA pour les déclencheurs d'intégration Composio", - 'mic.deviceSelector': 'Dispositif de microphone', - 'mic.tapToSendCountdown': 'Appuie pour envoyer ({seconds}s)', - 'settings.agents.title': 'Agents', - 'settings.agents.subtitle': - 'Manage the agents available for delegation — built-in defaults and your own custom agents.', - 'settings.agents.menuDesc': 'Manage built-in and custom agents', - 'settings.agents.newAgent': 'New agent', - 'settings.agents.loadError': "Couldn't load agents", - 'settings.agents.empty': 'No agents yet', - 'settings.agents.sourceDefault': 'Built-in', - 'settings.agents.sourceCustom': 'Custom', - 'settings.agents.enable': 'Enable agent', - 'settings.agents.disable': 'Disable agent', - 'settings.agents.edit': 'Edit', - 'settings.agents.delete': 'Delete', - 'settings.agents.reset': 'Reset to default', - 'settings.agents.modelLabel': 'Model', - 'settings.agents.toolsLabel': 'Tools', - 'settings.agents.toolsAll': 'All tools', - 'settings.agents.toolsCount': '{count} tools', - 'settings.agents.actionFailed': "Couldn't update the agent", - 'settings.agents.orchestratorLocked': 'The orchestrator is always enabled.', - 'settings.agents.editor.createTitle': 'New agent', - 'settings.agents.editor.editTitle': 'Edit agent', - 'settings.agents.editor.id': 'ID', - 'settings.agents.editor.idHint': 'Lowercase letters, numbers, _ and - only.', - 'settings.agents.editor.name': 'Name', - 'settings.agents.editor.description': 'Description', - 'settings.agents.editor.model': 'Model (optional)', - 'settings.agents.editor.modelPlaceholder': 'e.g. inherit, hint:fast, or a model id', - 'settings.agents.editor.systemPrompt': 'System prompt (optional)', - 'settings.agents.editor.tools': 'Allowed tools', - 'settings.agents.editor.toolsHint': 'One tool name per line. Use * for all tools.', - 'settings.agents.editor.defaultsNote': - 'Editing a built-in agent saves an override you can reset later.', - 'settings.agents.editor.save': 'Save', - 'settings.agents.editor.create': 'Create agent', - 'settings.agents.editor.saving': 'Saving…', - 'settings.agentsSection.title': 'Agents', - 'settings.agentsSection.description': - 'Manage your agents, their autonomy, and what they can access on this computer.', - 'settings.agentsSection.menuDesc': 'Registry, autonomy & OS access', - 'settings.agents.editor.notFound': 'Agent not found.', - 'settings.agents.editor.modelInherit': 'Inherit (platform default)', - 'settings.agents.editor.modelHints': 'Route hints', - 'settings.agents.editor.modelTiers': 'Model tiers', - 'settings.agents.editor.modelCustom': 'Custom model id…', - 'settings.agents.editor.modelCustomPlaceholder': 'e.g. anthropic/claude-sonnet-4', - 'settings.agents.editor.selectTools': 'Add tools', - 'settings.agents.editor.toolsAllSelected': 'All tools', - 'settings.agents.editor.toolsNoneSelected': 'No tools selected', - 'settings.agents.editor.removeToolAria': 'Remove {tool}', - 'settings.agents.editor.toolsModalTitle': 'Allowed tools', - 'settings.agents.editor.toolsSelectedCount': '{count} selected', - 'settings.agents.editor.toolsSearchPlaceholder': 'Search tools…', - 'settings.agents.editor.toolsAllowAll': 'Allow all tools (*)', - 'settings.agents.editor.toolsAllowAllHint': 'This agent can use every available tool.', - 'settings.agents.editor.toolsLoading': 'Loading tools…', - 'settings.agents.editor.toolsLoadError': 'Couldn’t load tools', - 'settings.agents.editor.toolsEmpty': 'No tools match your search.', - 'settings.agents.editor.toolsDone': 'Done', - 'settings.agents.editor.builtInReadonly': - 'Built-in agents can’t be edited. You can enable, disable, or reset them from the agents list.', -}; - -export default fr2; diff --git a/app/src/lib/i18n/chunks/fr-3.ts b/app/src/lib/i18n/chunks/fr-3.ts deleted file mode 100644 index 190346234..000000000 --- a/app/src/lib/i18n/chunks/fr-3.ts +++ /dev/null @@ -1,511 +0,0 @@ -import type { TranslationMap } from '../types'; - -// French (Français) chunk 3/5. Translated from chunks/en-3.ts. -const fr3: TranslationMap = { - 'insights.other': 'Autre', - 'insights.title': 'Insights', - 'insights.empty': - "Pas encore d'insights. Les insights sont générés au fur et à mesure que ta mémoire grandit.", - 'insights.description': 'Basé sur {count} relations dans ton graphe de mémoire.', - 'insights.items': 'éléments', - 'insights.more': 'de plus', - 'calls.joiningCall': "Connexion à l'appel", - 'calls.meetWindowOpening': "La fenêtre Meet s'ouvre…", - 'calls.failedToStart': "Échec du démarrage de l'appel Google Meet", - 'calls.couldNotStart': "Impossible de démarrer l'appel", - 'calls.failedToClose': "Échec de la fermeture de l'appel", - 'calls.couldNotClose': "Impossible de fermer l'appel", - 'calls.joinMeet': 'Rejoindre un appel Google Meet', - 'calls.joinMeetDescription': 'Saisis un lien Google Meet pour rejoindre.', - 'calls.meetLink': 'Lien Meet', - 'calls.displayName': "Nom d'affichage", - 'calls.openingMeet': 'Ouverture de Meet…', - 'calls.joinCall': "Rejoindre l'appel", - 'calls.activeCalls': 'Appels actifs', - 'calls.leave': 'Quitter', - 'workspace.wipeConfirm': - 'Es-tu sûr de vouloir effacer toute la mémoire ? Cette action est irréversible.', - 'workspace.resetTreeConfirm': "Es-tu sûr de vouloir reconstruire l'arbre de mémoire ?", - 'workspace.wipeTitle': 'Effacer la mémoire', - 'workspace.resetting': 'Réinitialisation…', - 'workspace.resetMemory': 'Réinitialiser la mémoire', - 'workspace.resetTreeTitle': "Reconstruire l'arbre de mémoire", - 'workspace.rebuilding': 'Reconstruction…', - 'workspace.resetMemoryTree': "Réinitialiser l'arbre de mémoire", - 'workspace.building': 'Construction…', - 'workspace.buildSummaryTrees': 'Construire les arbres de résumé', - 'workspace.viewVault': 'Voir le coffre', - 'workspace.openingVaultTitle': 'Ouverture du coffre-fort dans Obsidian', - 'workspace.openingVaultMessage': - "If Obsidian doesn't open, install it from obsidian.md or use Reveal Folder. Vault path:", - 'workspace.openVaultFailedTitle': "Couldn't open vault in Obsidian", - 'workspace.openVaultFailedMessage': - 'Utilisez Reveal Folder pour ouvrir directement le répertoire du coffre-fort. Chemin du coffre-fort :', - 'workspace.revealVaultFailed': "Couldn't reveal vault folder", - 'workspace.revealFolder': 'Révéler le dossier', - 'workspace.checkingVault': 'Checking…', - 'workspace.vaultNotRegisteredHelp': - 'Obsidian only opens folders you\'ve added as a vault. In Obsidian, choose "Open folder as vault" and pick the folder below — you only need to do this once. Then click View Vault again.', - 'workspace.obsidianNotFoundHelp': - "We couldn't find Obsidian on this device. Install it, or — if it's installed somewhere non-standard — set its config folder under Advanced.", - 'workspace.openAnyway': 'Open in Obsidian anyway', - 'workspace.installObsidian': 'Install Obsidian', - 'workspace.obsidianAdvanced': 'Obsidian installed elsewhere?', - 'workspace.obsidianConfigDirLabel': 'Obsidian config folder', - 'workspace.obsidianConfigDirHint': - 'Path to the folder containing obsidian.json (e.g. ~/.config/obsidian). Leave blank to auto-detect.', - 'workspace.obsidianConfigDirPlaceholder': '~/.config/obsidian', - 'workspace.graphLoadFailed': 'Échec du chargement du graphe de mémoire', - 'workspace.loadingGraph': 'Chargement du graphe de mémoire…', - 'workspace.graphViewMode': 'Mode de vue du graphe de mémoire', - 'workspace.trees': 'Arbres', - 'workspace.contacts': 'Contacts', - 'graph.noContactMentions': 'Aucune mention de contact', - 'graph.noMemory': 'Aucune mémoire', - 'graph.source': 'Source', - 'graph.topic': 'Sujet', - 'graph.global': 'Global', - 'graph.document': 'Document', - 'graph.contact': 'Contact', - 'graph.nodes': 'nœuds', - 'graph.parentChild': 'parent-enfant', - 'graph.documentContact': 'document-contact', - 'graph.link': 'lien', - 'graph.links': 'liens', - 'graph.children': 'enfants', - 'graph.clickToOpenObsidian': 'Clique pour ouvrir dans Obsidian', - 'graph.person': 'Personne', - 'modal.dontShowAgain': 'Ne plus afficher de suggestions similaires', - 'reflections.loading': 'Chargement des réflexions…', - 'reflections.empty': 'Pas encore de réflexions', - 'reflections.title': 'Réflexions', - 'reflections.proposedAction': 'Action proposée', - 'reflections.act': 'Agir', - 'reflections.dismiss': 'Ignorer', - 'whatsapp.chatsSynced': 'conversations synchronisées', - 'whatsapp.chatSynced': 'conversation synchronisée', - 'sync.active': 'Actif', - 'sync.recent': 'Récent', - 'sync.idle': 'En veille', - 'sync.memorySources': 'Sources de mémoire', - 'sync.noConnectedSources': 'Aucune source connectée', - 'sync.chunks': 'segments', - 'sync.lastChunk': 'Dernier segment :', - 'sync.pending': 'en attente', - 'sync.processed': 'traité', - 'sync.syncing': 'Synchronisation…', - 'sync.sync': 'Synchroniser', - 'sync.failedToLoad': "Échec du chargement de l'état de synchronisation", - 'sync.noContent': - "Aucun contenu n'a encore été synchronisé dans la mémoire. Connecte une intégration pour commencer.", - 'memorySources.title': 'Memory Sources', - 'memorySources.empty': 'No memory sources yet. Add one to start feeding memory.', - 'memorySources.loadingConnections': 'Loading connections…', - 'memorySources.noConnections': - 'No active Composio connections found. Connect an integration first.', - 'memorySources.pickConnection': 'Pick a connection', - 'memorySources.selectConnection': '— Select a connection —', - 'memorySources.composioListFailed': 'Failed to load Composio connections.', - 'memorySources.browse': 'Browse…', - 'memorySources.folderPathPlaceholder': '/Users/you/notes', - 'memorySources.globPatternPlaceholder': '**/*.md', - 'memorySources.repoUrlPlaceholder': 'https://github.com/org/repo', - 'memorySources.branchPlaceholder': 'main', - 'memorySources.feedUrlPlaceholder': 'https://example.com/feed.xml', - 'memorySources.pageUrlPlaceholder': 'https://example.com/article', - 'memorySources.cssSelectorPlaceholder': 'article', - 'memorySources.searchQueryPlaceholder': 'from:user AI safety', - 'memorySources.kind.composio': 'Integration', - 'memorySources.kind.folder': 'Local Folder', - 'memorySources.kind.github_repo': 'GitHub Repo', - 'memorySources.kind.twitter_query': 'Twitter Search', - 'memorySources.kind.rss_feed': 'RSS Feed', - 'memorySources.kind.web_page': 'Web Page', - 'memorySources.sync.successTitle': 'Syncing', - 'memorySources.sync.successMessage': 'Progress will appear shortly.', - 'memorySources.sync.failedTitle': 'Sync failed:', - 'time.justNow': 'just now', - 'time.secondsAgoSuffix': 's ago', - 'time.minutesAgoSuffix': 'm ago', - 'time.hoursAgoSuffix': 'h ago', - 'time.daysAgoSuffix': 'd ago', - 'memorySources.customSources': 'Custom Sources', - 'memorySources.addSource': 'Add Source', - 'memorySources.noCustomSources': - 'No custom sources yet. Add a folder, GitHub repo, RSS feed, or web page to start.', - 'memorySources.pickKind': 'What kind of source do you want to add?', - 'memorySources.backToKinds': 'Back to source types', - 'memorySources.label': 'Label', - 'memorySources.labelPlaceholder': 'My research notes', - 'memorySources.add': 'Add', - 'memorySources.adding': 'Adding…', - 'memorySources.added': 'Source added', - 'memorySources.removed': 'Source removed', - 'memorySources.remove': 'Remove', - 'memorySources.enable': 'Enable', - 'memorySources.disable': 'Disable', - 'memorySources.toggleFailed': 'Toggle failed', - 'memorySources.removeFailed': 'Remove failed', - 'memorySources.folderPath': 'Folder path', - 'memorySources.globPattern': 'Glob pattern', - 'memorySources.repoUrl': 'Repository URL', - 'memorySources.branch': 'Branch', - 'memorySources.feedUrl': 'Feed URL', - 'memorySources.pageUrl': 'Page URL', - 'memorySources.cssSelector': 'CSS selector (optional)', - 'memorySources.searchQuery': 'Search query', - 'backend.aiBackend': 'Backend IA', - 'backend.cloud': 'Cloud', - 'backend.recommended': 'Recommandé', - 'backend.cloudDescription': - "Modèles rapides et puissants hébergés sur nos serveurs. Prêt à l'emploi immédiatement.", - 'backend.privacyNote': - "Aucune donnée personnelle, message ou clé n'est jamais envoyé à nos serveurs.", - 'backend.local': 'Local', - 'backend.advanced': 'Avancé', - 'backend.localDescription': - 'Fais tourner les modèles sur ta propre machine avec Ollama. Confidentialité totale, configuration requise.', - 'backend.ramRecommended': '16 Go+ de RAM recommandés', - 'subconscious.tasks': 'tâches', - 'subconscious.ticks': 'ticks', - 'subconscious.last': 'Dernier', - 'subconscious.failed': 'échoué', - 'subconscious.tickInterval': 'Intervalle de tick', - 'subconscious.runNow': 'Exécuter maintenant', - 'subconscious.providerUnavailableTitle': 'Subconscient en pause', - 'subconscious.providerSettings': 'Paramètres IA', - 'subconscious.approvalNeeded': 'Approbation requise', - 'subconscious.requiresApproval': 'Nécessite une approbation', - 'subconscious.fixInConnections': 'Corriger dans Connexions', - 'subconscious.goAhead': "Aller de l'avant", - 'subconscious.activeTasks': 'Tâches actives', - 'subconscious.noActiveTasks': 'Aucune tâche active', - 'subconscious.default': 'Par défaut', - 'subconscious.addTaskPlaceholder': 'Ajouter une nouvelle tâche…', - 'subconscious.activityLog': "Journal d'activité", - 'subconscious.noActivity': "Aucune activité pour l'instant", - 'subconscious.decision.nothingNew': 'Rien de nouveau', - 'subconscious.decision.completed': 'Terminé', - 'subconscious.decision.evaluating': 'Évaluation en cours', - 'subconscious.decision.waitingApproval': "En attente d'approbation", - 'subconscious.decision.failed': 'Échoué', - 'subconscious.decision.cancelled': 'Annulé', - 'subconscious.decision.skipped': 'Ignoré', - 'actionable.complete': 'Terminer', - 'actionable.dismiss': 'Ignorer', - 'actionable.snooze': 'Reporter', - 'actionable.new': 'Nouveau', - 'stats.storage': 'Stockage', - 'stats.files': 'fichiers', - 'stats.documents': 'Documents', - 'stats.today': "aujourd'hui", - 'stats.namespaces': 'Espaces de noms', - 'stats.relations': 'Relations', - 'stats.firstMemory': 'Premier souvenir', - 'stats.latest': 'Dernier', - 'stats.sessions': 'Sessions', - 'stats.tokens': 'jetons', - 'bootCheck.invalidUrl': 'Saisis une URL de runtime.', - 'bootCheck.urlMustStartWith': "L'URL doit commencer par http:// ou https://", - 'bootCheck.validUrlRequired': - 'Ça ne ressemble pas à une URL valide (essaie https://core.example.com/rpc)', - 'bootCheck.tokenRequired': "On aura besoin d'un token d'authentification pour se connecter.", - 'bootCheck.chooseCoreMode': 'Sélectionner un runtime', - 'bootCheck.connectToCore': 'Connecte-toi à ton runtime', - 'bootCheck.desktopDescription': - "OpenHuman a besoin d'un runtime pour fonctionner. Choisis où il doit être hébergé.", - 'bootCheck.webDescription': - "Sur le web, OpenHuman se connecte à un runtime que tu contrôles. Renseigne son URL et son token d'authentification ci-dessous, ou télécharge l'app desktop pour en faire tourner un directement sur ta machine.", - 'bootCheck.preferDesktop': 'Tu préfères tout garder sur ton propre appareil ?', - 'bootCheck.downloadDesktop': "Télécharger l'app desktop", - 'bootCheck.localRecommended': 'Exécuter localement (Recommandé)', - 'bootCheck.localDescription': - 'Tourne directement sur ton ordinateur. Le plus rapide, entièrement privé, rien à configurer.', - 'bootCheck.cloudMode': 'Exécuter dans le cloud (Complexe)', - 'bootCheck.cloudDescription': - "Connecte-toi à un runtime que tu héberges ailleurs. Reste en ligne 24h/24 et 7j/7 — tu n'as pas besoin de garder cet appareil allumé.", - 'bootCheck.coreRpcUrl': 'URL du runtime', - 'bootCheck.rpcUrlPlaceholder': 'https://core.example.com/rpc', - 'bootCheck.authToken': "Token d'authentification", - 'bootCheck.bearerTokenPlaceholder': 'Le token bearer de ton runtime distant', - 'bootCheck.storedLocally': 'Conservé sur cet appareil uniquement. Envoyé en tant que ', - 'bootCheck.testing': 'Test en cours…', - 'bootCheck.testConnection': 'Tester la connexion', - 'bootCheck.connectedOk': 'Connecté. Tu es prêt.', - 'bootCheck.authFailed': "Ce token n'a pas fonctionné. Vérifie-le et réessaie.", - 'bootCheck.unreachablePrefix': "Impossible de l'atteindre :", - 'bootCheck.checkingCore': 'Réveil de ton runtime…', - 'bootCheck.cannotReach': "Impossible d'atteindre le runtime", - 'bootCheck.cannotReachDesc': - "On n'a pas pu se connecter à ton runtime. Tu veux en essayer un autre ?", - 'bootCheck.switchMode': 'Choisir un autre runtime', - 'bootCheck.quit': 'Quitter', - 'bootCheck.legacyDetected': 'Runtime de fond hérité détecté', - 'bootCheck.legacyDescription': - "Un daemon OpenHuman installé séparément est déjà en cours d'exécution sur cet appareil. On doit le supprimer avant que le runtime intégré puisse prendre le relais.", - 'bootCheck.removing': 'Suppression…', - 'bootCheck.removeContinue': 'Supprimer et continuer', - 'bootCheck.localNeedsRestart': 'Le runtime local doit être redémarré', - 'bootCheck.localNeedsRestartDesc': - 'Ton runtime local est sur une version différente de cette app. Un redémarrage rapide les remettra en synchronisation.', - 'bootCheck.restarting': 'Redémarrage…', - 'bootCheck.restartCore': 'Redémarrer le runtime', - 'bootCheck.cloudNeedsUpdate': 'Le runtime cloud doit être mis à jour', - 'bootCheck.cloudNeedsUpdateDesc': - 'Ton runtime cloud est sur une version différente de cette app. Lance la mise à jour pour les remettre en synchronisation.', - 'bootCheck.updating': 'Mise à jour…', - 'bootCheck.updateCloudCore': 'Mettre à jour le runtime cloud', - 'bootCheck.versionCheckFailed': 'Échec de la vérification de la version du runtime', - 'bootCheck.versionCheckFailedDesc': - 'Ton runtime est actif mais ne rapporte pas sa version. Il est peut-être obsolète. Redémarre-le ou mets-le à jour pour continuer.', - 'bootCheck.working': 'En cours…', - 'bootCheck.restartUpdateCore': 'Redémarrer / Mettre à jour le runtime', - 'bootCheck.unexpectedError': 'Erreur inattendue lors de la vérification au démarrage', - 'bootCheck.actionFailed': "Une erreur s'est produite. Réessaie.", - 'bootCheck.portConflictTitle': "Impossible de démarrer le moteur de l'application", - 'bootCheck.portConflictBody': - 'Un autre processus utilise le port réseau dont OpenHuman a besoin. Nous allons tenter de corriger cela automatiquement.', - 'bootCheck.portConflictFixButton': 'Corriger automatiquement', - 'bootCheck.portConflictFixing': 'Correction en cours…', - 'bootCheck.portConflictFixFailed': - "La correction automatique n'a pas fonctionné. Veuillez redémarrer votre ordinateur et réessayer.", - 'notifications.justNow': "à l'instant", - 'notifications.minAgo': 'il y a {n} min', - 'notifications.hrAgo': 'il y a {n} h', - 'notifications.dayAgo': 'il y a {n} j', - 'notifications.category.messages': 'Messages', - 'notifications.category.agents': 'Agents', - 'notifications.category.skills': 'Compétences', - 'notifications.category.system': 'Système', - 'notifications.category.meetings': 'Réunions', - 'notifications.category.reminders': 'Rappels', - 'notifications.category.important': 'Important', - 'about.update.status.checking': 'Vérification…', - 'about.update.status.available': 'v{version} disponible', - 'about.update.status.availableNoVersion': 'Mise à jour disponible', - 'about.update.status.downloading': 'Téléchargement…', - 'about.update.status.readyToInstall': 'v{version} prête à installer', - 'about.update.status.readyToInstallNoVersion': - "Une nouvelle version est téléchargée et prête. Redémarre pour l'appliquer.", - 'about.update.status.installing': 'Installation…', - 'about.update.status.restarting': 'Redémarrage…', - 'about.update.status.upToDate': 'Tu utilises la dernière version.', - 'about.update.status.error': 'Échec de la vérification des mises à jour', - 'about.update.status.default': 'Rechercher des mises à jour', - 'welcome.connectionFailed': 'Connexion échouée : {status} {statusText}', - 'welcome.connectionFailedMsg': 'Connexion échouée : {message}', - 'welcome.continueLocally': 'Continuer localement', - 'welcome.localSessionStarting': 'Démarrage de la session locale...', - 'welcome.localSessionDesc': 'Utilise un profil local hors ligne et ignore TinyHumans OAuth.', - 'chat.agentChatDesc': "Ouvrir une session de chat direct avec l'agent.", - 'channels.activeRouteValue': '{channel} via {authMode}', - 'privacy.dataKind.messages': 'Messages', - 'privacy.dataKind.agents': 'Agents', - 'privacy.dataKind.skills': 'Compétences', - 'privacy.dataKind.system': 'Système', - 'privacy.dataKind.meetings': 'Réunions', - 'privacy.dataKind.reminders': 'Rappels', - 'privacy.dataKind.important': 'Important', - 'onboarding.enableLocalAI': "Activer l'IA locale", - 'onboarding.skills.status.available': 'Disponible', - 'onboarding.skills.status.connected': 'Connecté', - 'onboarding.skills.status.connecting': 'Connexion en cours', - 'onboarding.skills.status.error': 'Erreur', - 'onboarding.skills.status.unavailable': 'Indisponible', - 'composio.statusUnavailable': 'État indisponible', - 'composio.envVarOverrides': 'est définie, elle remplace ce paramètre.', - 'memory.day.sun': 'Dim', - 'memory.day.mon': 'Lun', - 'memory.day.tue': 'Mar', - 'memory.day.wed': 'Mer', - 'memory.day.thu': 'Jeu', - 'memory.day.fri': 'Ven', - 'memory.day.sat': 'Sam', - 'memory.ingesting': 'Ingestion', - 'memory.ingestionQueued': "En file d'attente", - 'memory.ingestingTitle': 'Ingestion de {title}', - 'mic.noAudioCaptured': 'Aucun audio capturé', - 'mic.noSpeechDetected': 'Aucune parole détectée', - 'mic.lowConfidenceResult': "Impossible de comprendre l'audio clairement — réessaie", - 'mic.failedToStopRecording': "Échec de l'arrêt de l'enregistrement : {message}", - 'mic.transcriptionFailed': 'Échec de la transcription : {message}', - 'reflections.kind.retrospective': 'Rétrospective', - 'reflections.kind.derivedFact': 'Fait dérivé', - 'reflections.kind.moodInsight': 'Insight émotionnel', - 'reflections.kind.relationshipInsight': 'Insight relationnel', - 'graph.tooltip.summary': 'Résumé', - 'graph.tooltip.contact': 'Contact', - 'localModel.usage.never': 'Jamais', - 'localModel.usage.mediumLoad': 'Charge moyenne', - 'localModel.usage.lowLoad': 'Faible charge', - 'localModel.usage.idleMode': 'Mode veille', - 'localModel.rebootstrapComplete': 'Re-bootstrap du modèle terminé.', - 'localModel.modelsVerified': 'Modèles locaux vérifiés.', - 'accounts.addModal.allConnected': 'Tout est connecté', - 'accounts.addModal.title': 'Ajouter un compte', - 'accounts.respondQueue.empty': 'Vide', - 'accounts.respondQueue.hide': 'Masquer la file de réponses', - 'accounts.respondQueue.loadFailed': 'Échec du chargement de la file de réponses', - 'accounts.respondQueue.loading': 'Chargement de la file…', - 'accounts.respondQueue.pending': 'En attente', - 'accounts.respondQueue.show': 'Afficher la file de réponses', - 'accounts.respondQueue.title': 'File de réponses', - 'accounts.webviewHost.almostReady': 'Presque prêt…', - 'accounts.webviewHost.loadTimeout': 'Délai de chargement de la webview dépassé', - 'accounts.webviewHost.loading': 'Chargement de {providerName}…', - 'accounts.webviewHost.loadingAccount': 'Chargement du compte', - 'accounts.webviewHost.restoringSession': 'Restauration de la session…', - 'accounts.webviewHost.retryLoading': 'Réessayer le chargement', - 'accounts.webviewHost.takingLonger': '{providerName} prend plus de temps que prévu.', - 'accounts.webviewHost.timeoutHint': "Indice de délai d'attente", - 'app.connectionBadge.composio': 'Composio', - 'app.connectionBadge.messaging': 'Messagerie', - 'app.connectionIndicator.connected': 'Connecté à OpenHuman AI 🚀', - 'app.connectionIndicator.connecting': 'Connexion en cours', - 'app.connectionIndicator.coreOffline': 'Core hors ligne', - 'app.connectionIndicator.disconnected': 'Déconnecté', - 'app.connectionIndicator.offline': 'Hors ligne', - 'app.connectionIndicator.reconnecting': 'Reconnexion…', - 'app.errorFallback.componentStack': 'Pile de composants', - 'app.errorFallback.downloadLatest': 'Télécharger la dernière version', - 'app.errorFallback.heading': 'Titre', - 'app.errorFallback.hint': 'Indice', - 'app.errorFallback.reloadApp': "Recharger l'app", - 'app.errorFallback.subheading': 'Sous-titre', - 'app.errorFallback.tryRecover': 'Essayer de récupérer', - 'app.localAiDownload.installing': 'Installation…', - 'app.localAiDownload.preparing': 'Préparation…', - 'app.openhumanLink.accounts.continueWith': 'Continuer avec la connexion {label}', - 'app.openhumanLink.accounts.done': 'Terminé', - 'app.openhumanLink.accounts.intro': 'Intro', - 'app.openhumanLink.accounts.webviewNote': 'Note webview', - 'app.openhumanLink.billing.openDashboard': 'Ouvrir le tableau de bord', - 'app.openhumanLink.billing.stayOnTrial': "Rester en période d'essai", - 'app.openhumanLink.billing.trialCredit': "Crédit d'essai", - 'app.openhumanLink.billing.trialDesc': "Description de l'essai", - 'app.openhumanLink.defaultBody': - 'Pas encore disponible dans la fenêtre contextuelle. Ouvrez la page des paramètres complète si nécessaire.', - 'app.openhumanLink.discord.intro': 'Intro', - 'app.openhumanLink.discord.openInvite': "Ouvrir l'invitation", - 'app.openhumanLink.discord.perk1': 'Avantage 1', - 'app.openhumanLink.discord.perk2': 'Avantage 2', - 'app.openhumanLink.discord.perk3': 'Avantage 3', - 'app.openhumanLink.discord.perk4': 'Avantage 4', - 'app.openhumanLink.done': 'Terminé', - 'app.openhumanLink.loadingChannelSetup': 'Chargement de la configuration du canal', - 'app.openhumanLink.maybeLater': 'Peut-être plus tard', - 'app.openhumanLink.notifications.asking': 'Demande à ton OS…', - 'app.openhumanLink.notifications.blocked': 'Bloqué', - 'app.openhumanLink.notifications.blockedStep1': 'Étape 1 bloquée', - 'app.openhumanLink.notifications.blockedStep2': 'Étape 2 bloquée', - 'app.openhumanLink.notifications.blockedStep3': 'Étape 3 bloquée', - 'app.openhumanLink.notifications.intro': 'Intro', - 'app.openhumanLink.notifications.promptHint': "Indice d'invite", - 'app.openhumanLink.notifications.retry': 'Renvoyer une notification de test', - 'app.openhumanLink.notifications.send': 'Envoyer une notification de test', - 'app.openhumanLink.notifications.sendFailed': "Impossible d'envoyer : {error}", - 'app.openhumanLink.notifications.sent': - "Notification de test envoyée. Si vous ne l'avez pas reçue, allez dans Réglages Système → Notifications → OpenHuman, activez Autoriser les notifications, et définissez le style de bannière sur Persistant.", - 'app.openhumanLink.skipForNow': "Passer pour l'instant", - 'app.openhumanLink.telegramUnavailable': 'Telegram indisponible', - 'app.openhumanLink.title.accounts': 'Connecte tes apps', - 'app.openhumanLink.title.billing': 'Facturation & crédits', - 'app.openhumanLink.title.discord': 'Rejoins la communauté', - 'app.openhumanLink.title.messaging': 'Connecter un canal de chat', - 'app.openhumanLink.title.notifications': 'Autoriser les notifications', - 'app.persistRehydration.body': 'Corps', - 'app.persistRehydration.heading': 'Titre', - 'app.persistRehydration.resetCta': 'Réinitialisation…', - 'app.persistRehydration.resetting': 'Réinitialisation…', - 'app.routeLoading.initializing': "Initialisation d'OpenHuman...", - 'app.update.currentlyOn': '{version}', - 'app.update.errorFallback': "Une erreur s'est produite lors de la mise à jour.", - 'app.update.header.default': 'Mise à jour', - 'app.update.header.error': 'Mise à jour échouée', - 'app.update.header.installing': 'Installation de la mise à jour', - 'app.update.header.readyToInstall': 'Mise à jour prête à installer', - 'app.update.header.restarting': 'Redémarrage…', - 'app.update.later': 'Plus tard', - 'app.update.newVersionReady': 'Une nouvelle version est prête à installer.', - 'app.update.progress.downloaded': '{amount} téléchargé', - 'app.update.progress.installing': 'Installation de la nouvelle version…', - 'app.update.progress.restarting': "Relancement de l'app…", - 'app.update.progress.working': '{percent} %', - 'app.update.restartNote': 'Note de redémarrage', - 'app.update.restartNow': 'Redémarrer maintenant', - 'app.update.versionReady': 'La version {newVersion} est prête à installer.', - 'channels.discord.accountLinked': 'Compte lié', - 'channels.discord.connect': 'Connecter', - 'channels.discord.linkTokenExpired': 'Token de liaison expiré. Réessaie.', - 'channels.discord.linkTokenInstruction': '{token}', - 'channels.discord.linkTokenLabel': 'Libellé du token de liaison', - 'channels.discord.linkTokenOnce': 'Token de liaison unique', - 'channels.discord.picker.allPermissionsOk': - 'Le bot dispose de toutes les permissions requises dans ce canal.', - 'channels.discord.picker.botNotInServers': 'Bot absent des serveurs', - 'channels.discord.picker.category': 'Catégorie', - 'channels.discord.picker.channel': 'Canal', - 'channels.discord.picker.checkingPermissions': 'Vérification des permissions', - 'channels.discord.picker.loadingChannels': 'Chargement des canaux…', - 'channels.discord.picker.loadingServers': 'Chargement des serveurs…', - 'channels.discord.picker.missingPermissions': 'Permissions manquantes', - 'channels.discord.picker.noChannels': 'Aucun canal texte trouvé', - 'channels.discord.picker.noServers': 'Aucun serveur trouvé', - 'channels.discord.picker.selectChannel': 'Sélectionner un canal', - 'channels.discord.picker.selectServer': 'Sélectionner un serveur', - 'channels.discord.picker.server': 'Serveur', - 'channels.discord.picker.serverChannelSelection': 'Sélection du serveur et du canal', - 'channels.discord.savedRestartRequired': "Canal enregistré. Redémarre l'app pour l'activer.", - 'channels.telegram.connect': 'Connecter', - 'channels.telegram.managedDmConnecting': 'Connexion du DM géré', - 'channels.telegram.managedDmTimeout': 'Délai du DM géré dépassé', - 'channels.telegram.reconnect': 'Reconnecter', - 'channels.telegram.savedRestartRequired': "Canal enregistré. Redémarre l'app pour l'activer.", - 'channels.web.alwaysAvailable': 'Toujours disponible', - 'channels.discord.displayName': 'Discord', - 'channels.discord.description': 'Envoyer et recevoir des messages via Discord.', - 'channels.discord.authMode.bot_token.description': - 'Fournissez votre propre jeton de bot Discord.', - 'channels.discord.authMode.oauth.description': - 'Installez le bot OpenHuman sur votre serveur Discord via OAuth.', - 'channels.discord.authMode.managed_dm.description': - 'Liez votre compte personnel Discord au bot OpenHuman.', - 'channels.discord.fields.bot_token.label': 'Jeton de bot', - 'channels.discord.fields.bot_token.placeholder': 'Votre jeton de bot Discord', - 'channels.discord.fields.guild_id.label': 'ID de serveur (guilde)', - 'channels.discord.fields.guild_id.placeholder': - 'Facultatif : restreindre à un serveur spécifique', - 'channels.telegram.displayName': 'Telegram', - 'channels.telegram.description': 'Envoyer et recevoir des messages via Telegram.', - 'channels.telegram.authMode.managed_dm.description': - 'Envoyez un message directement au robot OpenHuman Telegram.', - 'channels.telegram.authMode.bot_token.description': - 'Fournissez votre propre jeton Bot Telegram de @BotFather.', - 'channels.telegram.fields.bot_token.label': 'Jeton de robot', - 'channels.telegram.fields.bot_token.placeholder': '123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11', - 'channels.telegram.fields.allowed_users.label': 'Utilisateurs autorisés', - 'channels.telegram.fields.allowed_users.placeholder': - "Noms d'utilisateur Telegram séparés par des virgules", - 'channels.web.displayName': 'Web', - 'channels.web.description': "Discutez via l'interface utilisateur Web intégrée.", - 'channels.web.authMode.managed_dm.description': - 'Utilisez le chat Web intégré – aucune configuration requise.', - 'welcome.continueLocallyExperimental': 'Continuer localement (expérimental)', - 'channels.yuanbao.connect': 'Connect', - 'channels.yuanbao.connecting': 'Connecting…', - 'channels.yuanbao.fieldRequired': '{field} is required', - 'channels.yuanbao.reconnect': 'Reconnect', - 'channels.yuanbao.savedRestartRequired': 'Channel saved. Restart the app to activate it.', - 'channels.yuanbao.unexpectedStatus': 'Unexpected connection status: {status}', - 'chat.approval.approve': 'Approve', - 'chat.approval.alwaysAllow': 'Always allow', - 'chat.approval.alwaysAllowHint': 'Stop asking for this tool — add it to your Always-allow list', - 'chat.approval.deciding': 'Working…', - 'chat.approval.deny': 'Deny', - 'chat.approval.error': 'Could not record your decision — try again.', - 'chat.approval.fallback': 'The agent wants to run an action that needs your approval.', - 'chat.approval.title': 'Approval needed', - 'chat.approval.tool': 'Tool:', -}; - -export default fr3; diff --git a/app/src/lib/i18n/chunks/fr-4.ts b/app/src/lib/i18n/chunks/fr-4.ts deleted file mode 100644 index fc322f328..000000000 --- a/app/src/lib/i18n/chunks/fr-4.ts +++ /dev/null @@ -1,491 +0,0 @@ -import type { TranslationMap } from '../types'; - -// French (Français) chunk 4/5. Translated from chunks/en-4.ts. -const fr4: TranslationMap = { - 'chat.unsubscribeApproval.approve': 'Approuver et se désabonner', - 'chat.unsubscribeApproval.approved': '✓ Désabonnement réussi.', - 'chat.unsubscribeApproval.denied': '✕ Demande refusée.', - 'chat.unsubscribeApproval.deny': 'Refuser', - 'chat.unsubscribeApproval.processing': 'Traitement…', - 'chat.unsubscribeApproval.title': 'Demande de désabonnement', - 'commandPalette.ariaLabel': 'Palette de commandes', - 'commandPalette.description': 'Description', - 'commandPalette.label': 'Commandes', - 'commandPalette.noResults': 'Aucun résultat', - 'commandPalette.placeholder': 'Tape une commande ou recherche…', - 'commandPalette.searchAria': 'Rechercher des commandes', - 'commandPalette.shortcutHint': 'Appuyez sur ? pour tous les raccourcis', - 'commandPalette.title': 'Palette de commandes', - 'composio.connect.additionalConfigRequired': 'Configuration supplémentaire requise', - 'composio.connect.atlassianSubdomainHint': 'acme', - 'composio.connect.atlassianSubdomainLabel': 'Libellé du sous-domaine Atlassian', - 'composio.connect.connect': 'Connecter', - 'composio.connect.connectionFailed': 'Échec de la connexion (statut : {status}).', - 'composio.connect.disconnectFailed': 'Déconnexion échouée : {msg}', - 'composio.connect.disconnecting': 'Déconnexion…', - 'composio.connect.idleDescription': 'Connectez votre', - 'composio.connect.idleDescriptionSuffix': - "compte. Nous ouvrirons une fenêtre du navigateur, vous y approuvez l'accès, et cette application détectera la connexion automatiquement.", - 'composio.connect.isConnected': 'est connecté.', - 'composio.connect.manage': 'Gérer', - 'composio.connect.needsSubdomain': 'Pour connecter', - 'composio.connect.needsSubdomainSuffix': - 'saisissez votre sous-domaine Atlassian (par ex. acme pour acme.atlassian.net) et réessayez.', - 'composio.connect.oauthComplete': 'OAuth à compléter…', - 'composio.connect.oauthTimeout': 'Délai OAuth dépassé', - 'composio.connect.permissions': 'Autorisations', - 'composio.connect.permissionsDefault': 'Lecture + Écriture activées par défaut', - 'composio.connect.permissionsNote': 'peut exposer', - 'composio.connect.permissionsNoteSuffix': - "Les autorisations de l'agent OpenHuman sont contrôlées ci-dessous par des bascules lecture, écriture et admin.", - 'composio.connect.reopenBrowser': 'Rouvrir le navigateur', - 'composio.connect.requestingUrl': "Demande de l'URL de connexion…", - 'composio.connect.retryConnection': 'Réessayer la connexion', - 'composio.connect.scopeLoadError': 'Impossible de charger les préférences de portée : {msg}', - 'composio.connect.scopeSaveError': "Impossible d'enregistrer la portée {key} : {msg}", - 'composio.connect.subdomainInvalid': - 'Saisissez uniquement le sous-domaine court (par ex. "acme"), pas l\'URL complète. Il doit contenir uniquement des lettres, chiffres et tirets.', - 'composio.connect.subdomainRequired': 'Saisis ton sous-domaine Atlassian pour continuer.', - 'composio.connect.dynamicsOrgNameLabel': "Nom de l'organisation Dynamics 365", - 'composio.connect.dynamicsOrgNameHint': - 'Par exemple, "myorg" pour myorg.crm.dynamics.com. Saisis uniquement le nom court de l\'organisation, pas l\'URL complète.', - 'composio.connect.needsFieldsPrefix': 'Pour connecter', - 'composio.connect.needsFieldsSuffix': - "nous avons besoin d'un peu plus d'informations. Remplis les champs manquants ci-dessous et réessaie.", - 'composio.connect.requiredFieldEmpty': 'Ce champ est obligatoire.', - 'composio.connect.wabaIdHint': - "Trouve-le via GET /me/businesses puis GET /{business_id}/owned_whatsapp_business_accounts en utilisant ton jeton d'accès Meta.", - 'composio.connect.wabaIdLabel': "Libellé de l'identifiant WABA", - 'composio.connect.wabaIdRequired': - 'Saisis ton identifiant WhatsApp Business Account (WABA ID) pour continuer.', - 'composio.connect.waitingFor': 'En attente de', - 'composio.connect.waitingHint': "Indice d'attente", - 'composio.triggers.heading': 'Déclencheurs', - 'composio.triggers.listenFrom': 'Écouter les événements de', - 'composio.triggers.loadError': 'Impossible de charger les déclencheurs', - 'composio.triggers.needsConfiguration': 'Configuration requise', - 'composio.triggers.noneAvailable': "Aucun déclencheur n'est actuellement disponible pour", - 'conversations.taskKanban.moveLeft': 'Déplacer à gauche', - 'conversations.taskKanban.moveRight': 'Déplacer à droite', - 'conversations.taskKanban.title': 'Tâches', - 'conversations.toolTimeline.turn': 'tour', - 'conversations.toolTimeline.workerThread': 'fil worker', - 'daemon.serviceBlockingGate.body': 'Corps', - 'daemon.serviceBlockingGate.downloadHint': 'Indice de téléchargement', - 'daemon.serviceBlockingGate.downloadLatest': 'Télécharger la dernière version', - 'daemon.serviceBlockingGate.retryCore': 'Réessayer le Core', - 'daemon.serviceBlockingGate.retryFailed': - "Nouvelle tentative échouée. Télécharge la dernière version de l'app et réessaie.", - 'daemon.serviceBlockingGate.retrying': 'Nouvelle tentative…', - 'daemon.serviceBlockingGate.title': 'Le core OpenHuman est indisponible', - 'home.banners.discordSubtitle': 'Sous-titre Discord', - 'home.banners.discordTitle': 'Rejoins notre Discord', - 'home.banners.earlyBirdDismiss': 'Ignorer la bannière early bird', - 'home.banners.earlyBirdFirstSub': 'premier abonnement.', - 'home.banners.earlyBirdOn': 'Early bird activé', - 'home.banners.earlyBirdTitle': 'Les 1 000 premiers utilisateurs bénéficient de 60 % de remise.', - 'home.banners.earlyBirdUseCode': 'Utiliser le code early bird', - 'home.banners.getSubscription': 'obtenir un abonnement', - 'home.banners.promoCreditsBody': 'Corps des crédits promo', - 'home.banners.promoCreditsTitle': '{amount}', - 'home.banners.promoCreditsUsage': 'Utilisation des crédits promo', - 'intelligence.memoryChunk.detail.chunk': 'Segment', - 'intelligence.memoryChunk.detail.copyChunkId': "Copier l'identifiant du segment", - 'intelligence.memoryChunk.detail.embeddingInfo': 'bge-m3 1024dim', - 'intelligence.memoryChunk.detail.noEmbedding': "Pas d'embedding", - 'intelligence.memoryChunk.letterhead.from': 'de', - 'intelligence.memoryChunk.letterhead.to': 'à', - 'intelligence.memoryChunk.mentioned.chunkOne': '1 fragment', - 'intelligence.memoryChunk.mentioned.chunkOther': '{count} fragments', - 'intelligence.memoryChunk.mentioned.heading': 'm e n t i o n n é', - 'intelligence.memoryChunk.scoreBars.ariaScore': '{name} score {pct} pour cent', - 'intelligence.memoryChunk.scoreBars.atThreshold': 'à {threshold}', - 'intelligence.memoryChunk.scoreBars.dropped': 'abandonné', - 'intelligence.memoryChunk.scoreBars.heading': 'p o u r q u o i c o n s e r v é', - 'intelligence.memoryChunk.scoreBars.kept': 'conservé', - 'intelligence.diagram.title': 'Architecture Diagram', - 'intelligence.diagram.description': - 'Latest local architecture output from the configured diagram endpoint.', - 'intelligence.diagram.refresh': 'Refresh', - 'intelligence.diagram.refreshAria': 'Refresh diagram', - 'intelligence.diagram.emptyTitle': 'No diagram available yet', - 'intelligence.diagram.emptyDescription': - 'Generate an architecture diagram from the orchestrator and this panel will refresh from the configured local endpoint.', - 'intelligence.diagram.skillInstallCommand': 'npx skills add yizhiyanhua-ai/fireworks-tech-graph', - 'intelligence.diagram.promptExample': - 'Generate an architecture diagram of the current swarm in dark terminal style', - 'intelligence.diagram.imageAlt': 'Latest generated OpenHuman architecture diagram', - 'intelligence.diagram.refreshesEvery': 'Refreshes every {seconds}s', - 'intelligence.memoryText.entityTypePrefix': "Type d'entité", - 'intelligence.screenDebug.active': 'Actif', - 'intelligence.screenDebug.app': 'Application', - 'intelligence.screenDebug.bounds': 'Limites', - 'intelligence.screenDebug.captureAlt': 'Résultat du test de capture', - 'intelligence.screenDebug.captureFailed': 'Échec', - 'intelligence.screenDebug.captureSuccess': 'Succès', - 'intelligence.screenDebug.captureTest': 'Test de capture', - 'intelligence.screenDebug.capturing': 'Capture en cours', - 'intelligence.screenDebug.frames': 'Images', - 'intelligence.screenDebug.idle': 'En veille', - 'intelligence.screenDebug.lastApp': 'Dernière app', - 'intelligence.screenDebug.mode': 'Mode', - 'intelligence.screenDebug.permAccessibility': 'Permission accessibilité', - 'intelligence.screenDebug.permInput': 'Permission saisie', - 'intelligence.screenDebug.permScreen': 'Accessibilité', - 'intelligence.screenDebug.permissions': 'Autorisations', - 'intelligence.screenDebug.platformNotSupported': 'Plateforme non prise en charge', - 'intelligence.screenDebug.recentVisionSummaries': 'Résumés de vision récents', - 'intelligence.screenDebug.session': 'Session', - 'intelligence.screenDebug.size': 'Taille', - 'intelligence.screenDebug.status': 'État', - 'intelligence.screenDebug.testCapture': 'Test de capture', - 'intelligence.screenDebug.time': 'Temps', - 'intelligence.screenDebug.title': 'Titre', - 'intelligence.screenDebug.unknown': 'Inconnu', - 'intelligence.screenDebug.visionQueue': 'File de vision', - 'intelligence.screenDebug.visionState': 'État de la vision', - 'intelligence.tasks.activeBoardOne': '1 tableau actif dans les conversations', - 'intelligence.tasks.activeBoardOther': '{count} tableaux actifs dans les conversations', - 'intelligence.tasks.empty': "Aucun tableau de tâches agent pour l'instant", - 'intelligence.tasks.emptyHint': 'Indice vide', - 'intelligence.tasks.failedToLoad': 'Échec du chargement', - 'intelligence.tasks.live': 'en direct', - 'intelligence.tasks.loadingBoards': 'Chargement des tableaux de tâches…', - 'intelligence.tasks.threadPrefix': 'Fil {thread}', - 'intelligence.tasks.subtitle': 'Your tasks and agent task boards across the workspace.', - 'intelligence.tasks.newTask': 'New task', - 'intelligence.tasks.personalBoardTitle': 'Agent Tasks', - 'intelligence.tasks.personalEmpty': 'No personal tasks yet', - 'intelligence.tasks.composer.title': 'New task', - 'intelligence.tasks.composer.titleLabel': 'Title', - 'intelligence.tasks.composer.titlePlaceholder': 'What needs to be done?', - 'intelligence.tasks.composer.statusLabel': 'Status', - 'intelligence.tasks.composer.attachLabel': 'Attach to conversation', - 'intelligence.tasks.composer.attachNone': 'Personal (no conversation)', - 'intelligence.tasks.composer.objectiveLabel': 'Objective', - 'intelligence.tasks.composer.objectivePlaceholder': 'Optional — the desired outcome', - 'intelligence.tasks.composer.notesLabel': 'Notes', - 'intelligence.tasks.composer.notesPlaceholder': 'Optional notes', - 'intelligence.tasks.composer.create': 'Create task', - 'intelligence.tasks.composer.creating': 'Creating…', - 'intelligence.tasks.composer.createFailed': "Couldn't create the task", - 'notifications.card.dismiss': 'Ignorer la notification', - 'notifications.card.importanceTitle': 'Importance : {pct} %', - 'notifications.center.empty': "Aucune notification pour l'instant", - 'notifications.center.emptyHint': 'Indice vide', - 'notifications.center.filterAll': 'Tout filtrer', - 'notifications.center.markAllRead': 'Tout marquer comme lu', - 'notifications.center.title': 'Notifications', - 'oauth.button.loopbackTimeout': - "La connexion a expiré — le navigateur n'a pas complété la redirection OAuth. Veuillez réessayer.", - 'oauth.button.connecting': 'Connexion en cours…', - 'oauth.login.continueWith': 'Continuer avec', - 'onboarding.contextGathering.buildingDesc': 'Description de la construction', - 'onboarding.contextGathering.buildingProfile': 'Construction de ton profil…', - 'onboarding.contextGathering.continueToChat': 'Accéder au chat', - 'onboarding.contextGathering.errorDesc': - "Nous n'avons pas pu créer votre profil complet pour l'instant, mais ce n'est pas grave — vous pouvez continuer et votre profil se construira au fil du temps.", - 'onboarding.contextGathering.coreAlive': - 'Le cœur est accessible — le premier lancement peut prendre une minute.', - 'onboarding.contextGathering.coreAliveProbing': 'Vérification de la connexion au cœur…', - 'onboarding.contextGathering.coreUnreachable': - 'Le cœur ne répond pas. Tu peux continuer et réessayer plus tard.', - 'onboarding.contextGathering.stillWorkingDesc': - 'Le premier lancement peut prendre 30 à 60 secondes pendant que nous préparons ton modèle local et tes outils. Tu peux accéder au chat à tout moment — la construction du profil continue en arrière-plan.', - 'onboarding.contextGathering.stillWorkingTitle': 'Construction de ton profil en cours…', - 'onboarding.contextGathering.title': 'Collecte de contexte', - 'openhuman.team_list_teams': 'Liste des équipes', - 'overlay.ariaAttention': "Message d'attention", - 'overlay.ariaCompanion': 'Compagnon actif', - 'overlay.ariaOrb': 'Overlay OpenHuman', - 'overlay.ariaVoiceActive': 'Saisie vocale active', - 'overlay.companion.error': 'Erreur', - 'overlay.companion.listening': 'À l’écoute…', - 'overlay.companion.pointing': 'En train de pointer…', - 'overlay.companion.speaking': 'En train de parler…', - 'overlay.companion.thinking': 'Réflexion…', - 'overlay.orbTitle': 'Glisse pour déplacer · Double-clique pour réinitialiser la position', - 'pages.settings.account.connections': 'Connexions', - 'pages.settings.account.connectionsDesc': 'Description des connexions', - 'pages.settings.account.privacy': 'Confidentialité', - 'pages.settings.account.privacyDesc': 'Description de la confidentialité', - 'pages.settings.account.recoveryPhrase': 'Phrase de récupération', - 'pages.settings.account.recoveryPhraseDesc': 'Description de la phrase de récupération', - 'pages.settings.account.team': 'Équipe', - 'pages.settings.account.teamDesc': "Description de l'équipe", - 'pages.settings.accountSection.description': - 'Phrase de récupération, équipe, connexions et paramètres de confidentialité.', - 'pages.settings.accountSection.title': 'Compte', - 'pages.settings.ai.llm': 'LLM', - 'pages.settings.ai.llmDesc': 'Description du LLM', - 'pages.settings.ai.voice': 'Voix', - 'pages.settings.ai.voiceDesc': 'Description de la voix', - 'pages.settings.ai.embeddings': 'Intégrations', - 'pages.settings.ai.embeddingsDesc': - "Modèle d'encodage vectoriel pour la récupération de la mémoire", - 'pages.settings.aiSection.description': - 'Fournisseurs de modèles de langage, Ollama local et voix (STT / TTS).', - 'pages.settings.aiSection.title': 'IA', - 'pages.settings.features.desktopCompanion': 'Compagnon de bureau', - 'pages.settings.features.desktopCompanionDesc': - "Assistant vocal avec conscience de l'écran — écoute, voit, parle, pointe", - 'pages.settings.features.messagingChannels': 'Canaux de messagerie', - 'pages.settings.features.messagingChannelsDesc': 'Description des canaux de messagerie', - 'pages.settings.features.notifications': 'Notifications', - 'pages.settings.features.notificationsDesc': 'Description des notifications', - 'pages.settings.features.screenAwareness': "Surveillance de l'écran", - 'pages.settings.features.screenAwarenessDesc': "Description de la surveillance de l'écran", - 'pages.settings.features.tools': 'Outils', - 'pages.settings.features.toolsDesc': 'Description des outils', - 'pages.settings.featuresSection.description': "Surveillance de l'écran, messagerie et outils.", - 'pages.settings.featuresSection.title': 'Fonctionnalités', - 'privacy.dataKind.credentials': 'Identifiants', - 'privacy.dataKind.derived': 'Dérivé', - 'privacy.dataKind.diagnostics': 'Diagnostics', - 'privacy.dataKind.metadata': 'Métadonnées', - 'privacy.dataKind.raw': 'Brut', - 'privacy.whatLeaves.link.label': "Qu'est-ce qui quitte mon ordinateur ?", - 'rewards.community.achievementsUnlocked': '{unlocked} sur {total} succès débloqués', - 'rewards.community.connectDiscord': 'Connecter Discord', - 'rewards.community.cumulativeTokens': 'Tokens cumulés', - 'rewards.community.currentStreak': 'Série actuelle', - 'rewards.community.discordLinkedNotInGuild': 'Discord lié mais pas dans la guilde', - 'rewards.community.discordMember': 'A rejoint le serveur', - 'rewards.community.discordNotLinked': 'Discord non lié', - 'rewards.community.discordServer': 'Serveur Discord', - 'rewards.community.discordStatusUnavailable': 'État Discord indisponible', - 'rewards.community.discordWaiting': 'En attente de Discord', - 'rewards.community.heroSubtitle': 'Sous-titre principal', - 'rewards.community.heroTitle': 'Titre principal', - 'rewards.community.joinDiscord': 'Rejoindre Discord', - 'rewards.community.loadingRewards': 'Chargement des récompenses…', - 'rewards.community.locked': 'Débloqué', - 'rewards.community.retrying': 'Nouvelle tentative…', - 'rewards.community.rolesAndRewards': 'Rôles & Récompenses', - 'rewards.community.streakDays': '{n}', - 'rewards.community.syncPending': 'Synchronisation des récompenses en attente', - 'rewards.community.syncPendingDesc': 'Description de la synchronisation en attente', - 'rewards.community.syncUnavailable': 'Synchronisation indisponible', - 'rewards.community.tryAgain': 'Nouvelle tentative…', - 'rewards.community.unknown': 'Inconnu', - 'rewards.community.unlocked': 'Débloqué', - 'rewards.community.yourProgress': 'Ta progression', - 'rewards.coupon.colCode': 'Code', - 'rewards.coupon.colRedeemed': 'Échangé', - 'rewards.coupon.colReward': 'Récompense', - 'rewards.coupon.colStatus': 'Statut', - 'rewards.coupon.loadingHistory': "Chargement de l'historique des récompenses…", - 'rewards.coupon.noCodes': "Aucun code de récompense utilisé pour l'instant.", - 'rewards.coupon.pending': 'En attente', - 'rewards.coupon.placeholder': 'Code de coupon', - 'rewards.coupon.promoCredits': 'Crédits promo', - 'rewards.coupon.recentRedemptions': 'Échanges récents', - 'rewards.coupon.redeemAccepted': - "{code} accepté. {amount} sera débloqué après que l'action requise sera effectuée.", - 'rewards.coupon.redeemButton': 'Utiliser le code', - 'rewards.coupon.redeemSuccess': '{code} utilisé. {amount} a été ajouté à vos crédits.', - 'rewards.coupon.redeemedCodes': 'Codes échangés', - 'rewards.coupon.redeeming': 'Échange en cours…', - 'rewards.coupon.statusApplied': 'Appliqué', - 'rewards.coupon.statusPendingAction': 'Action en attente', - 'rewards.coupon.statusRedeemed': 'Utilisé', - 'rewards.coupon.subtitle': 'Sous-titre', - 'rewards.coupon.title': 'Échanger un code de coupon', - 'rewards.referralSection.activity': 'Activité de parrainage', - 'rewards.referralSection.apply': 'Application…', - 'rewards.referralSection.applying': 'Application…', - 'rewards.referralSection.colReferredUser': 'Utilisateur parrainé', - 'rewards.referralSection.colReward': 'Récompense', - 'rewards.referralSection.colStatus': 'Statut', - 'rewards.referralSection.colUpdated': 'Mis à jour', - 'rewards.referralSection.completed': 'Terminé', - 'rewards.referralSection.copyCode': 'Copier le code', - 'rewards.referralSection.copyFailed': 'Copie échouée', - 'rewards.referralSection.haveCode': 'Tu as un code de parrainage ?', - 'rewards.referralSection.haveCodeDesc': "Description d'un code disponible", - 'rewards.referralSection.linked': 'Lié', - 'rewards.referralSection.linkedCode': '(code {code})', - 'rewards.referralSection.loading': 'Chargement du programme de parrainage…', - 'rewards.referralSection.noReferrals': 'Aucun parrainage', - 'rewards.referralSection.pendingReferrals': 'Parrainages en attente', - 'rewards.referralSection.placeholder': 'Code de parrainage', - 'rewards.referralSection.share': 'Partager', - 'rewards.referralSection.statusCompleted': 'Statut terminé', - 'rewards.referralSection.statusExpired': 'Statut expiré', - 'rewards.referralSection.statusJoined': 'Statut rejoint', - 'rewards.referralSection.subtitle': 'Sous-titre', - 'rewards.referralSection.title': 'Invite des amis, gagne des crédits', - 'rewards.referralSection.totalEarned': 'Total gagné', - 'rewards.referralSection.yourCode': 'Ton code', - 'settings.ai.addCloudProvider': 'Ajouter un fournisseur cloud', - 'settings.ai.addProvider': 'Enregistrement…', - 'settings.ai.apiKeyFieldLabel': 'Libellé du champ clé API', - 'settings.ai.apiKeyRequired': 'Colle ta clé API pour continuer.', - 'settings.ai.apiKeyStoredEncrypted': 'Clé API stockée chiffrée', - 'settings.ai.apiKeysEncrypted': 'auth-profiles.json', - 'settings.ai.clearStoredKey': 'Effacer la clé stockée', - 'settings.ai.connectProvider': 'Connecter un fournisseur', - 'settings.ai.customRouting': 'Routage personnalisé', - 'settings.ai.defaultResolvesTo': 'Par défaut résolu en', - 'settings.ai.discard': 'Annuler', - 'settings.ai.editProvider': 'Modifier le fournisseur', - 'settings.ai.llmProviders': 'Fournisseurs LLM', - 'settings.ai.llmProvidersDesc': 'Description des fournisseurs LLM', - 'settings.ai.localOllama': 'Local (Ollama)', - 'settings.ai.modelLabel': 'Modèle', - 'settings.ai.noCustomProviders': 'Aucun fournisseur personnalisé', - 'settings.ai.openAiCompat.authHeaderExample': 'Autorisation : Porteur ', - 'settings.ai.openAiCompat.authHeaderLabel': "En-tête d'authentification", - 'settings.ai.openAiCompat.baseUrlLabel': 'Base URL', - 'settings.ai.openAiCompat.baseUrlUnavailable': 'Indisponible', - 'settings.ai.openAiCompat.clearKey': 'Effacer la clé', - 'settings.ai.openAiCompat.description': - "Point local harnesses at this /v1 server to route through the providers configured below. Authentication uses a stable key you set here, not the app's internal core bearer.", - 'settings.ai.openAiCompat.keyConfigured': 'Clé configurée', - 'settings.ai.openAiCompat.keyRequired': 'Clé requise', - 'settings.ai.openAiCompat.rotateKey': 'Rotation key', - 'settings.ai.openAiCompat.setKey': 'Définir la clé', - 'settings.ai.openAiCompat.title': 'Point de terminaison compatible OpenAI', - 'settings.ai.providerLabel': 'Fournisseur', - 'settings.ai.routing': 'Routage', - 'settings.ai.routingCustom': 'Routage personnalisé', - 'settings.ai.routingDefault': 'Par défaut', - 'settings.ai.routingDesc': 'Description du routage', - 'settings.ai.saveChanges': 'Enregistrement…', - 'settings.ai.saving': 'Enregistrement…', - 'settings.ai.unsavedChange': 'modification non enregistrée', - 'settings.ai.unsavedChanges': 'modifications non enregistrées', - 'settings.ai.workloadGroupBackground': 'Groupe de charge de fond', - 'settings.ai.workloadGroupChat': 'Groupe de charge chat', - 'settings.autocomplete.appFilter.acceptSuggestion': 'Accepter la suggestion', - 'settings.autocomplete.appFilter.contextOverride': 'Remplacement du contexte (optionnel)', - 'settings.autocomplete.appFilter.debugFocus': 'Focus de débogage', - 'settings.autocomplete.appFilter.getSuggestion': 'Obtenir une suggestion', - 'settings.autocomplete.appFilter.liveLogs': 'Journaux en direct', - 'settings.autocomplete.appFilter.noLogs': ') :', - 'settings.autocomplete.appFilter.refreshStatus': 'Actualisation…', - 'settings.autocomplete.appFilter.refreshing': 'Actualisation…', - 'settings.autocomplete.appFilter.runtime': 'Runtime', - 'settings.autocomplete.appFilter.test': 'Tester', - 'settings.autocomplete.completionStyle.acceptedCompletion': - '{count} complétion acceptée stockée — utilisée pour personnaliser les suggestions futures.', - 'settings.autocomplete.completionStyle.acceptedCompletions': - '{count} complétions acceptées stockées — utilisées pour personnaliser les suggestions futures.', - 'settings.autocomplete.completionStyle.clearHistory': 'Effacement…', - 'settings.autocomplete.completionStyle.clearing': 'Effacement…', - 'settings.autocomplete.completionStyle.debounce': 'Délai anti-rebond (ms)', - 'settings.autocomplete.completionStyle.enabled': 'Activé', - 'settings.autocomplete.completionStyle.maxChars': 'Nombre max de caractères', - 'settings.autocomplete.completionStyle.noHistory': - 'Pas encore de complétions acceptées. Accepte des suggestions avec Tab pour commencer à personnaliser.', - 'settings.autocomplete.completionStyle.overlayTtl': "Durée de vie de l'overlay (ms)", - 'settings.autocomplete.completionStyle.personalizationHistory': 'Historique de personnalisation', - 'settings.autocomplete.completionStyle.styleExamples': 'Exemples de style (un par ligne)', - 'settings.autocomplete.completionStyle.styleInstructions': 'Instructions de style', - 'settings.billing.autoRecharge.addAmount': 'Ajouter ce montant', - 'settings.billing.autoRecharge.addCard': 'Ajouter une carte', - 'settings.billing.autoRecharge.amountHint': 'Indice de montant', - 'settings.billing.autoRecharge.defaultCard': 'Carte par défaut', - 'settings.billing.autoRecharge.lastRechargeFailed': 'Dernière recharge échouée', - 'settings.billing.autoRecharge.lastRecharged': 'Dernière recharge', - 'settings.billing.autoRecharge.noCards': 'Aucune carte', - 'settings.billing.autoRecharge.paymentMethods': 'Méthodes de paiement', - 'settings.billing.autoRecharge.rechargeInProgress': 'Recharge en cours', - 'settings.billing.autoRecharge.rechargeWhen': 'Recharger quand le solde passe en dessous de', - 'settings.billing.autoRecharge.saveSettings': 'Enregistrement…', - 'settings.billing.autoRecharge.saving': 'Enregistrement…', - 'settings.billing.autoRecharge.setDefault': ':', - 'settings.billing.autoRecharge.subtitle': 'Sous-titre', - 'settings.billing.autoRecharge.title': 'Activer la recharge automatique', - 'settings.billing.autoRecharge.toggleAriaLabel': 'Activer/désactiver la recharge automatique', - 'settings.billing.autoRecharge.weeklyLimit': 'Limite de dépenses hebdomadaire', - 'settings.billing.history.desc': 'Description', - 'settings.billing.history.empty': 'Vide', - 'settings.billing.history.openPortal': 'Ouvrir le portail', - 'settings.billing.history.posted': 'Publié', - 'settings.billing.history.title': 'Titre', - 'settings.billing.inferenceBudget.cycleEnds': 'Fin du cycle', - 'settings.billing.inferenceBudget.exhausted': 'Épuisé', - 'settings.billing.inferenceBudget.loadError': 'Erreur de chargement', - 'settings.billing.inferenceBudget.noBudgetDesc': 'Description sans budget', - 'settings.billing.inferenceBudget.noRecurringBudget': 'Aucun budget récurrent', - 'settings.billing.inferenceBudget.remaining': 'Restant', - 'settings.billing.inferenceBudget.tenHourCap': 'Plafond de dix heures', - 'settings.billing.inferenceBudget.title': 'Titre', - 'settings.billing.payAsYouGo.available': 'Disponible', - 'settings.billing.payAsYouGo.chargeCustomAmount': 'Ouverture…', - 'settings.billing.payAsYouGo.chooseTopUpDesc': 'Description du choix de recharge', - 'settings.billing.payAsYouGo.chooseTopUpTitle': 'Titre du choix de recharge', - 'settings.billing.payAsYouGo.creditBalanceDesc': 'Description du solde de crédits', - 'settings.billing.payAsYouGo.creditBalanceTitle': 'Titre du solde de crédits', - 'settings.billing.payAsYouGo.customAmount': 'Montant personnalisé', - 'settings.billing.payAsYouGo.enterAmount': 'Saisir un montant', - 'settings.billing.payAsYouGo.opening': 'Ouverture', - 'settings.billing.payAsYouGo.promotionalCredits': 'Crédits promotionnels', - 'settings.billing.payAsYouGo.topUpBalance': 'Recharger le solde', - 'settings.billing.payAsYouGo.topUpCredits': 'Recharger les crédits', - 'settings.billing.payAsYouGo.unableToLoad': 'Impossible de charger le solde.', - 'settings.billing.subscription.annual': 'Annuel', - 'settings.billing.subscription.billedAnnually': 'Facturé annuellement', - 'settings.billing.subscription.chooseSubtitle': 'Sous-titre du choix', - 'settings.billing.subscription.chooseTitle': 'Titre du choix', - 'settings.billing.subscription.cryptoDesc': 'Description crypto', - 'settings.billing.subscription.cryptoQuestion': 'Question crypto', - 'settings.billing.subscription.current': 'Actuel', - 'settings.billing.subscription.currentPlan': 'Plan actuel', - 'settings.billing.subscription.monthly': 'Mensuel', - 'settings.billing.subscription.paymentConfirmed': 'Paiement confirmé', - 'settings.billing.subscription.perMonth': 'Par mois', - 'settings.billing.subscription.popular': 'Populaire', - 'pages.settings.account.migration': 'Importer depuis un autre assistant', - 'pages.settings.account.migrationDesc': - 'Migrez la mémoire et les notes depuis OpenClaw (et bientôt Hermes) vers cet espace de travail.', - 'composio.connect.scope.read': 'Lire', - 'composio.connect.scope.readHint': "Autoriser l'agent à lire les données de cette connexion.", - 'composio.connect.scope.write': 'Ecriture', - 'composio.connect.scope.writeHint': - "Autoriser l'agent à créer ou modifier des données via cette connexion.", - 'composio.connect.scope.admin': 'Administrateur', - 'composio.connect.scope.adminHint': - "Autoriser l'agent à gérer les paramètres, les autorisations ou les actions destructrices.", - 'pages.settings.composioSection.title': 'Composio', - 'pages.settings.composioSection.description': - 'Routage, déclencheurs et historique pour les intégrations optimisées par Composio.', - 'pages.settings.account.walletBalances': 'Wallet Balances', - 'pages.settings.account.walletBalancesDesc': 'View multi-chain balances for your local wallet', - 'walletBalances.title': 'Wallet Balances', - 'walletBalances.refresh': 'Refresh', - 'walletBalances.loading': 'Loading balances…', - 'walletBalances.retry': 'Retry', - 'walletBalances.emptyState': 'No wallet accounts yet — set up a wallet in Recovery Phrase.', - 'walletBalances.copyAddress': 'Copy address', - 'walletBalances.providerMissing': 'provider unavailable', - 'walletBalances.rawBalance': 'Raw: {raw}', - 'walletBalances.errorGeneric': - 'Unable to load wallet balances. Set up your wallet in Recovery Phrase and try again.', - 'conversations.taskKanban.approval.default': 'Default', - 'conversations.taskKanban.approval.notRequired': 'Not required', - 'conversations.taskKanban.approval.notRequiredBadge': 'no approval', - 'conversations.taskKanban.approval.required': 'Required', - 'conversations.taskKanban.approval.requiredBadge': 'approval', - 'conversations.taskKanban.approval.requiredBeforeExecution': 'Required before execution', - 'conversations.taskKanban.briefButton': 'Task brief', - 'conversations.taskKanban.briefTitle': 'Task brief', - 'conversations.taskKanban.closeBrief': 'Close task brief', - 'conversations.taskKanban.field.acceptanceCriteria': 'Acceptance criteria', - 'conversations.taskKanban.field.allowedTools': 'Allowed tools', - 'conversations.taskKanban.field.approval': 'Approval', - 'conversations.taskKanban.field.assignedAgent': 'Assigned agent', - 'conversations.taskKanban.field.blocker': 'Blocker', - 'conversations.taskKanban.field.evidence': 'Evidence', - 'conversations.taskKanban.field.notes': 'Notes', - 'conversations.taskKanban.field.objective': 'Objective', - 'conversations.taskKanban.field.plan': 'Plan', - 'conversations.taskKanban.field.status': 'Status', - 'conversations.taskKanban.field.title': 'Title', - 'conversations.taskKanban.saveChanges': 'Save changes', - 'conversations.taskKanban.deleteCard': 'Delete', - 'conversations.taskKanban.updateFailed': 'Could not update task; changes were not saved.', -}; - -export default fr4; diff --git a/app/src/lib/i18n/chunks/fr-5.ts b/app/src/lib/i18n/chunks/fr-5.ts deleted file mode 100644 index 76b8c3fea..000000000 --- a/app/src/lib/i18n/chunks/fr-5.ts +++ /dev/null @@ -1,1036 +0,0 @@ -import type { TranslationMap } from '../types'; - -// French (Français) chunk 5/5. Translated from chunks/en-5.ts. -const fr5: TranslationMap = { - 'settings.billing.subscription.save': '{pct}', - 'settings.billing.subscription.upgrade': 'Passer à la version supérieure', - 'settings.billing.subscription.waiting': 'En attente', - 'settings.billing.subscription.waitingPayment': 'En attente de paiement', - 'settings.composio.apiKeyDesc': 'Une clé API Composio est actuellement stockée sur cet appareil.', - 'settings.composio.apiKeyLabel': 'Clé API Composio', - 'settings.composio.apiKeyStored': 'Clé API stockée', - 'settings.composio.apiKeyStoredPlaceholder': '••••••••••••••••', - 'settings.composio.clearedToBackend': 'Basculé en mode Backend', - 'settings.composio.confirmItem1': 'Un compte sur app.composio.dev avec une clé API', - 'settings.composio.confirmItem2': - 'Re-lier chaque intégration via votre compte Composio personnel', - 'settings.composio.confirmItem3': - "Remarque : les déclencheurs Composio (webhooks en temps réel) ne se déclenchent pas encore en mode Direct — uniquement les appels d'outils synchrones", - 'settings.composio.confirmNeedItems': 'Vous aurez besoin de :', - 'settings.composio.confirmSwitch': 'Je comprends, passer en Direct', - 'settings.composio.confirmTitle': '⚠️ Passage au mode Direct', - 'settings.composio.confirmWarning': - 'Vos intégrations existantes (Gmail, Slack, GitHub, etc. liées via OpenHuman) ne seront pas visibles — elles vivent dans le tenant Composio géré par OpenHuman.', - 'settings.composio.intro': - "Composio intègre plus de 250 applications externes en tant qu'outils que votre agent peut appeler. Choisissez comment ces appels d'outils sont routés.", - 'settings.composio.modeDirect': 'Direct (apporte ta propre clé API)', - 'settings.composio.modeDirectDesc': - "Les appels vont directement à backend.composio.dev. Souverain / compatible hors ligne. L'exécution des outils fonctionne de manière synchrone ; les webhooks de déclencheurs en temps réel ne sont pas encore routés en mode direct (problème de suivi).", - 'settings.composio.modeManaged': "Géré (OpenHuman s'en occupe pour toi)", - 'settings.composio.modeManagedDesc': - "OpenHuman relaie les appels d'outils via notre backend (recommandé). L'authentification est négociée ; vous ne collez jamais de clé API Composio. Les webhooks sont entièrement routés.", - 'settings.composio.routingMode': 'Mode de routage', - 'settings.composio.saveErrorNoKey': - "Échec de l'enregistrement. Le mode Direct nécessite une clé API non vide.", - 'settings.composio.saving': 'Enregistrement…', - 'settings.composio.switching': 'Bascule en cours…', - 'settings.cron.jobs.desc': 'Description', - 'settings.cron.jobs.empty': 'Aucune tâche cron core trouvée.', - 'settings.cron.jobs.lastStatus': 'Dernier statut', - 'settings.cron.jobs.loading': 'Chargement des tâches cron…', - 'settings.cron.jobs.loadingRuns': 'Chargement des exécutions', - 'settings.cron.jobs.nextRun': 'Prochaine exécution', - 'settings.cron.jobs.pause': 'Mettre en pause', - 'settings.cron.jobs.paused': 'En pause', - 'settings.cron.jobs.recentRuns': 'Exécutions récentes', - 'settings.cron.jobs.removing': 'Suppression', - 'settings.cron.jobs.resume': 'Reprendre', - 'settings.cron.jobs.runningNow': "En cours d'exécution", - 'settings.cron.jobs.saving': 'Enregistrement…', - 'settings.cron.jobs.schedule': 'Planification', - 'settings.cron.jobs.title': 'Tâches cron du core', - 'settings.cron.jobs.viewRuns': 'Voir les exécutions', - 'settings.localModel.deviceCapability.active': 'Actif', - 'settings.localModel.deviceCapability.appliedTier': 'Niveau appliqué', - 'settings.localModel.deviceCapability.applying': 'Application en cours', - 'settings.localModel.deviceCapability.cores': '{count}', - 'settings.localModel.deviceCapability.couldNotLoadPresets': - 'Impossible de charger les préréglages', - 'settings.localModel.deviceCapability.cpu': 'CPU', - 'settings.localModel.deviceCapability.customModelIds': 'Identifiants de modèles personnalisés', - 'settings.localModel.deviceCapability.detected': 'Détecté', - 'settings.localModel.deviceCapability.disabled': 'Désactivé', - 'settings.localModel.deviceCapability.disabledDesc': 'Description désactivé', - 'settings.localModel.deviceCapability.downloadingModels': '(téléchargement des modèles)', - 'settings.localModel.deviceCapability.downloadingSetupDesc': - "Téléchargement de l'installateur OllamaSetup (~2 Go) et décompression. Cela peut prendre une minute lors de la première installation.", - 'settings.localModel.deviceCapability.failedToApplyPreset': - "Échec de l'application du préréglage", - 'settings.localModel.deviceCapability.gpu': 'GPU', - 'settings.localModel.deviceCapability.installFailed': "Échec de l'installation d'Ollama", - 'settings.localModel.deviceCapability.installFailedDesc': - "L'installateur s'est terminé avant qu'Ollama soit utilisable. Clique sur Réessayer pour recommencer, ou installe manuellement depuis ollama.com.", - 'settings.localModel.deviceCapability.installFirst': "Lancez Ollama d'abord.", - 'settings.localModel.deviceCapability.installFirstDesc': - 'Les niveaux locaux dépendent d\'un point de terminaison Ollama géré en externe. Lancez-le vous-même, téléchargez les modèles souhaités, et continuez à utiliser "Désactivé (repli cloud)" jusqu\'à ce que le runtime soit accessible.', - 'settings.localModel.deviceCapability.installOllamaFirst': - "Lancez Ollama d'abord pour utiliser ce niveau", - 'settings.localModel.deviceCapability.installingOllama': "Installation d'Ollama", - 'settings.localModel.deviceCapability.loadingDeviceInfo': - "Chargement des informations de l'appareil", - 'settings.localModel.deviceCapability.localAiDisabled': - 'IA locale désactivée — utilisation du fallback cloud.', - 'settings.localModel.deviceCapability.modelTier': 'Niveau de modèle', - 'settings.localModel.deviceCapability.needsOllama': 'Ollama requis', - 'settings.localModel.deviceCapability.notDetected': 'Non détecté', - 'settings.localModel.deviceCapability.ram': 'RAM', - 'settings.localModel.deviceCapability.recommended': 'Recommandé', - 'settings.localModel.deviceCapability.retryInstall': 'Nouvelle tentative…', - 'settings.localModel.deviceCapability.retrying': 'Nouvelle tentative…', - 'settings.localModel.deviceCapability.starting': 'Démarrage…', - 'settings.localModel.download.audioPathPlaceholder': 'Chemin absolu vers le fichier audio', - 'settings.localModel.download.capabilityAssets': 'Ressources de fonctionnalité', - 'settings.localModel.download.downloading': 'Téléchargement…', - 'settings.localModel.download.embeddingPlaceholder': "Une chaîne d'entrée par ligne…", - 'settings.localModel.download.noThinkMode': 'Mode sans réflexion', - 'settings.localModel.download.promptPlaceholder': - "Tape n'importe quelle invite et exécute-la sur le modèle local…", - 'settings.localModel.download.quantizationPref': 'Préférence de quantification', - 'settings.localModel.download.runEmbeddingTest': 'En cours…', - 'settings.localModel.download.runPromptTest': "Lancer le test d'invite", - 'settings.localModel.download.runSummaryTest': 'Lancer le test de résumé', - 'settings.localModel.download.runTranscriptionTest': 'En cours…', - 'settings.localModel.download.runTtsTest': 'En cours…', - 'settings.localModel.download.runVisionTest': 'En cours…', - 'settings.localModel.download.running': 'En cours…', - 'settings.localModel.download.runningPrompt': "Exécution de l'invite", - 'settings.localModel.download.summarizePlaceholder': - 'Colle du texte à résumer avec le modèle local…', - 'settings.localModel.download.testCustomPrompt': 'Tester une invite personnalisée', - 'settings.localModel.download.testEmbeddings': 'Tester les embeddings', - 'settings.localModel.download.testSummarization': 'Tester la synthèse', - 'settings.localModel.download.testVisionPrompt': 'Tester une invite de vision', - 'settings.localModel.download.testVoiceInput': "Tester l'entrée vocale (STT)", - 'settings.localModel.download.testVoiceOutput': 'Tester la sortie vocale (TTS)', - 'settings.localModel.download.ttsOutputPlaceholder': 'Chemin WAV de sortie optionnel', - 'settings.localModel.download.ttsPlaceholder': 'Saisis du texte à synthétiser…', - 'settings.localModel.download.visionImagePlaceholder': - "Une référence d'image par ligne (URI data, URL ou marqueur de chemin local)", - 'settings.localModel.download.visionPromptPlaceholder': - 'Saisis une invite pour le modèle de vision…', - 'settings.localModel.status.allChecksPassed': 'Toutes les vérifications réussies', - 'settings.localModel.status.artifact': 'Artefact', - 'settings.localModel.status.backend': 'Backend', - 'settings.localModel.status.binary': 'Binaire', - 'settings.localModel.status.bootstrapResume': 'Bootstrap / Reprendre', - 'settings.localModel.status.checking': 'Vérification…', - 'settings.localModel.status.checkingOllama': "Vérification d'Ollama", - 'settings.localModel.status.customLocation': 'Emplacement personnalisé', - 'settings.localModel.status.customLocationDesc': "Description de l'emplacement personnalisé", - 'settings.localModel.status.diagnosticsHint': - 'Cliquez sur "Lancer les diagnostics" pour vérifier qu\'Ollama fonctionne et que les modèles sont installés.', - 'settings.localModel.status.downloadingUnknown': 'Téléchargement (taille inconnue)', - 'settings.localModel.status.eta': 'ETA', - 'settings.localModel.status.expectedModels': 'Modèles attendus', - 'settings.localModel.status.forceRebootstrap': 'Forcer le ré-amorçage', - 'settings.localModel.status.generationTps': 'TPS de génération', - 'settings.localModel.status.hideErrorDetails': "Masquer les détails de l'erreur", - 'settings.localModel.status.installManually': 'Installer manuellement', - 'settings.localModel.status.installManuallyFrom': 'Installer manuellement depuis', - 'settings.localModel.status.installOllama': 'Démarrage…', - 'settings.localModel.status.installedModels': 'Modèles installés', - 'settings.localModel.status.installing': 'Installation…', - 'settings.localModel.status.installingOllama': 'Installation du runtime Ollama…', - 'settings.localModel.status.issues': 'Problèmes', - 'settings.localModel.status.issuesFound': '{count} problème(s) trouvé(s)', - 'settings.localModel.status.lastLatency': 'Dernière latence', - 'settings.localModel.status.model': 'Modèle', - 'settings.localModel.status.notFound': 'Introuvable', - 'settings.localModel.status.notRunning': "Non en cours d'exécution", - 'settings.localModel.status.ollamaBinaryPath': 'Chemin du binaire Ollama', - 'settings.localModel.status.ollamaDiagnostics': 'Diagnostics Ollama', - 'settings.localModel.status.ollamaNotInstalled': 'Runtime Ollama indisponible', - 'settings.localModel.status.ollamaNotInstalledDesc': - "OpenHuman traite désormais Ollama comme un runtime d'inférence externe. Lancez votre propre serveur Ollama, téléchargez les modèles souhaités, et dirigez le routage des charges de travail vers celui-ci.", - 'settings.localModel.status.progress': 'Progression', - 'settings.localModel.status.provider': 'Fournisseur', - 'settings.localModel.status.retryBootstrap': 'Réessayer le bootstrap', - 'settings.localModel.status.runDiagnostics': 'Vérification…', - 'settings.localModel.status.running': 'En cours', - 'settings.localModel.status.runningExternalProcess': 'En cours via processus externe', - 'settings.localModel.status.runtimeStatus': 'État du runtime', - 'settings.localModel.status.server': 'Serveur', - 'settings.localModel.status.setPath': 'Configuration…', - 'settings.localModel.status.setting': 'Configuration…', - 'settings.localModel.status.showErrorDetails': "Masquer les détails de l'erreur", - 'settings.localModel.status.showInstallErrorDetails': "Masquer les détails de l'erreur", - 'settings.localModel.status.suggestedFixes': 'Corrections suggérées', - 'settings.localModel.status.thenSetPath': 'Ensuite définir le chemin', - 'settings.localModel.status.triggering': 'Déclenchement…', - 'settings.localModel.status.unavailable': 'Indisponible', - 'settings.localModel.status.working': 'En cours…', - 'settings.developerMenu.ai.title': 'Configuration IA', - 'settings.developerMenu.ai.desc': - 'Fournisseurs cloud, modèles Ollama locaux et routage par charge de travail', - 'settings.developerMenu.screenAwareness.title': "Conscience de l'écran", - 'settings.developerMenu.screenAwareness.desc': - "Autorisations de capture d'écran, politique de surveillance et contrôles de session", - 'settings.developerMenu.messagingChannels.title': 'Canaux de messagerie', - 'settings.developerMenu.messagingChannels.desc': - "Configure les modes d'authentification Telegram/Discord et le routage de canal par défaut", - 'settings.developerMenu.tools.title': 'Outils', - 'settings.developerMenu.tools.desc': - "Active ou désactive les capacités qu'OpenHuman peut utiliser en ton nom", - 'settings.developerMenu.agentChat.title': 'Chat agent', - 'settings.developerMenu.agentChat.desc': - 'Teste une conversation agent avec des remplacements de modèle et de température', - 'settings.developerMenu.devWorkflow.title': 'Dev Workflow', - 'settings.developerMenu.devWorkflow.desc': - 'Autonomous agent that picks your GitHub issues and raises PRs on a schedule', - 'settings.developerMenu.devWorkflow.panelDesc': - 'Configure an autonomous developer agent that picks GitHub issues assigned to you and raises pull requests automatically on a schedule.', - 'settings.devWorkflow.githubRepository': 'GitHub Repository', - 'settings.devWorkflow.loadingRepositories': 'Loading repositories...', - 'settings.devWorkflow.selectRepository': 'Select a repository', - 'settings.devWorkflow.privateTag': '(private)', - 'settings.devWorkflow.detectingForkInfo': 'Detecting fork info...', - 'settings.devWorkflow.forkDetected': 'Fork detected', - 'settings.devWorkflow.upstream': 'Upstream:', - 'settings.devWorkflow.forkPrNote': 'PRs will be raised against the upstream repository.', - 'settings.devWorkflow.notForkNote': - 'Not a fork. PRs will be raised against this repository directly.', - 'settings.devWorkflow.targetBranch': 'Target Branch', - 'settings.devWorkflow.targetBranchNote': 'PRs will be raised against this branch', - 'settings.devWorkflow.loadingBranches': 'Loading branches...', - 'settings.devWorkflow.runFrequency': 'Run Frequency', - 'settings.devWorkflow.runFrequencyNote': - 'How often the agent should check for issues and raise PRs.', - 'settings.devWorkflow.updateConfiguration': 'Update Configuration', - 'settings.devWorkflow.saveConfiguration': 'Save Configuration', - 'settings.devWorkflow.remove': 'Remove', - 'settings.devWorkflow.saved': 'Saved', - 'settings.devWorkflow.activeConfiguration': 'Active Configuration', - 'settings.devWorkflow.activeConfigRepository': 'Repository:', - 'settings.devWorkflow.activeConfigUpstream': 'Upstream:', - 'settings.devWorkflow.activeConfigTargetBranch': 'Target branch:', - 'settings.devWorkflow.activeConfigSchedule': 'Schedule:', - 'settings.devWorkflow.enabled': 'Enabled', - 'settings.devWorkflow.paused': 'Paused', - 'settings.skillsRunner.scheduleEnabled': 'Enabled', - 'settings.skillsRunner.scheduleDisabled': 'Paused', - 'settings.skillsRunner.scheduleToggleAria': 'Toggle schedule enabled', - 'settings.skillsRunner.schedule.history': 'History', - 'settings.skillsRunner.schedule.historyLoading': 'Loading history\u2026', - 'settings.skillsRunner.schedule.historyEmpty': 'No runs yet for this schedule.', - 'settings.skillsRunner.schedule.historyNoOutput': 'No output captured.', - 'settings.skillsRunner.schedule.active': 'Active', - 'settings.skillsRunner.schedule.lastRunLabel': 'last:', - 'settings.devWorkflow.nextRun': 'Next run', - 'settings.devWorkflow.lastRun': 'Last run', - 'settings.devWorkflow.runNow': 'Run now', - 'settings.devWorkflow.running': 'Running…', - 'settings.devWorkflow.recentRuns': 'Recent runs', - 'settings.devWorkflow.cronSaveError': 'Failed to save configuration', - 'settings.devWorkflow.lastOutput': 'Last output', - 'settings.devWorkflow.noOutput': 'No output captured', - 'settings.devWorkflow.runningStatus': - 'Agent is running — picking an issue and working on a fix...', - 'settings.devWorkflow.errorNotConnected': - 'GitHub is not connected. Please connect GitHub via Settings > Advanced > Composio first.', - 'settings.devWorkflow.errorToolNotEnabled': - 'GITHUB_LIST_REPOSITORIES_FOR_THE_AUTHENTICATED_USER tool is not enabled on this backend. Please ask your admin to enable it in the Composio integration (backend#842).', - 'settings.devWorkflow.errorNotAuthenticated': 'Not authenticated. Please sign in first.', - 'settings.devWorkflow.errorNoRepositories': 'No repositories found for this GitHub account.', - 'settings.devWorkflow.schedule.every30min': 'Every 30 minutes', - 'settings.devWorkflow.schedule.everyHour': 'Every hour', - 'settings.devWorkflow.schedule.every2hours': 'Every 2 hours', - 'settings.devWorkflow.schedule.every6hours': 'Every 6 hours', - 'settings.devWorkflow.schedule.onceDaily': 'Once daily (9 AM)', - 'settings.developerMenu.cronJobs.title': 'Tâches cron', - 'settings.developerMenu.cronJobs.desc': - "Afficher et configurer les tâches planifiées des compétences d'exécution", - 'settings.developerMenu.localModelDebug.title': 'Débogage du modèle local', - 'settings.developerMenu.localModelDebug.desc': - "Configuration Ollama, téléchargements d'assets, tests de modèle et diagnostics", - 'settings.developerMenu.webhooks.title': 'Webhooks', - 'settings.developerMenu.webhooks.desc': - "Inspecter les enregistrements de webhooks d'exécution et les journaux de requêtes capturés", - 'settings.developerMenu.eventLog.title': 'Event Log', - 'settings.developerMenu.eventLog.desc': - 'Live colour-coded stream of all agent, tool, and system events', - 'settings.developerMenu.eventLog.allTypes': 'All types', - 'settings.developerMenu.eventLog.filterAgent': 'Filter...', - 'settings.developerMenu.eventLog.download': 'Download', - 'settings.developerMenu.eventLog.events': 'events', - 'settings.developerMenu.eventLog.live': 'Live', - 'settings.developerMenu.eventLog.disconnected': 'Disconnected', - 'settings.developerMenu.eventLog.waiting': 'Waiting for events...', - 'settings.developerMenu.eventLog.notConnected': 'Not connected to core', - 'settings.developerMenu.eventLog.jumpToLatest': 'Jump to latest', - 'settings.developerMenu.eventLog.badge.tool': 'TOOL', - 'settings.developerMenu.eventLog.badge.agent': 'AGENT', - 'settings.developerMenu.eventLog.badge.info': 'INFO', - 'settings.developerMenu.eventLog.badge.mem': 'MEM', - 'settings.developerMenu.eventLog.badge.chan': 'CHAN', - 'settings.developerMenu.eventLog.badge.cron': 'CRON', - 'settings.developerMenu.eventLog.badge.hook': 'HOOK', - 'settings.developerMenu.eventLog.badge.warn': 'WARN', - 'settings.developerMenu.eventLog.badge.skill': 'SKILL', - 'settings.developerMenu.eventLog.badge.comp': 'COMP', - 'settings.developerMenu.eventLog.badge.mcp': 'MCP', - 'settings.developerMenu.intelligence.title': 'Intelligence', - 'settings.developerMenu.intelligence.desc': - 'Espace mémoire, moteur subconscient, rêves et paramètres', - 'settings.developerMenu.notificationRouting.title': 'Routage des notifications', - 'settings.developerMenu.notificationRouting.desc': - "Score d'importance par IA et escalade de l'orchestrateur pour les alertes d'intégration", - 'settings.developerMenu.composeioTriggers.title': 'Déclencheurs ComposeIO', - 'settings.developerMenu.composeioTriggers.desc': - "Afficher l'historique et les archives des déclencheurs ComposeIO", - 'settings.developerMenu.composioRouting.title': 'Routage Composio (mode direct)', - 'settings.developerMenu.composioRouting.desc': - 'Utilise ta propre clé API Composio et route les appels directement vers backend.composio.dev', - 'settings.developerMenu.integrationTriggers.title': "Déclencheurs d'intégration", - 'settings.developerMenu.integrationTriggers.desc': - "Configurer les paramètres de triage IA pour les déclencheurs d'intégration Composio", - 'settings.appearance.menuDesc': 'Choisis clair, sombre ou le thème du système', - 'settings.mascot.active': 'Actif', - 'settings.mascot.characterDesc': 'Description du personnage', - 'settings.mascot.characterHeading': 'Titre du personnage', - // TODO: translate custom GIF mascot strings. - 'settings.mascot.customGifError': - 'Entrez un HTTPS .gif URL, un bouclage HTTP .gif URL, un fichier:// .gif URL ou un chemin local .gif.', - 'settings.mascot.customGifHeading': 'Avatar GIF personnalisé', - 'settings.mascot.customGifLabel': 'Avatar GIF personnalisé URL', - 'settings.mascot.colorDesc': 'Description de la couleur', - 'settings.mascot.colorHeading': 'Titre de la couleur', - 'settings.mascot.loadingLibrary': 'Chargement de la bibliothèque OpenHuman…', - 'settings.mascot.localDefault': 'OpenHuman local (par défaut)', - 'settings.mascot.menuTitle': 'Mascotte', - 'settings.mascot.menuDesc': "Choisis la couleur de la mascotte utilisée dans toute l'application", - 'settings.mascot.noCharacters': "Aucun personnage OpenHuman n'est encore disponible", - 'settings.mascot.noColorVariants': 'Aucune variante de couleur', - 'settings.mascot.voice.current': 'actuel', - 'settings.mascot.voice.customDesc': - "Trouvez les identifiants vocaux sur api.elevenlabs.io/v1/voices ou dans votre tableau de bord ElevenLabs. Seul l'identifiant est stocké — votre clé API reste sur le backend.", - 'settings.mascot.voice.customHeading': 'Identifiant vocal personnalisé', - 'settings.mascot.voice.customOption': "Autre (coller l'identifiant vocal)…", - 'settings.mascot.voice.desc': - "Choisissez la voix ElevenLabs utilisée par la mascotte pour les réponses parlées. Filtrez par genre, choisissez dans la liste sélectionnée, collez un identifiant personnalisé, ou laissez l'application choisir une voix qui correspond à la langue de l'interface.", - 'settings.mascot.voice.genderFemale': 'Féminin', - 'settings.mascot.voice.genderHeading': 'Genre de la voix', - 'settings.mascot.voice.genderMale': 'Masculin', - 'settings.mascot.voice.heading': 'Voix', - 'settings.mascot.voice.preset': 'Préréglage vocal', - 'settings.mascot.voice.presetHeading': 'Préréglage vocal', - 'settings.mascot.voice.preview': 'Aperçu de la voix', - 'settings.mascot.voice.previewError': "Échec de l'aperçu de la voix", - 'settings.mascot.voice.previewing': 'Aperçu en cours…', - 'settings.mascot.voice.reset': 'Réinitialiser à la valeur par défaut', - 'settings.mascot.voice.useLocaleDefault': "Faire correspondre à la langue de l'application", - 'settings.mascot.voice.useLocaleDefaultDesc': - "Choisir automatiquement une voix pour la langue de l'interface actuelle.", - 'settings.memoryWindow.balanced.badge': 'Recommandé', - 'settings.memoryWindow.balanced.hint': - 'Valeur par défaut raisonnable — bonne continuité sans consommer de jetons supplémentaires à chaque exécution.', - 'settings.memoryWindow.balanced.label': 'Équilibré', - 'settings.memoryWindow.description': - "Quelle quantité de contexte mémorisé OpenHuman injecte dans chaque nouvelle exécution d'agent. Des fenêtres plus larges semblent plus conscientes des conversations passées mais consomment plus de jetons — et coûtent plus cher — à chaque exécution.", - 'settings.memoryWindow.extended.badge': 'Plus de contexte', - 'settings.memoryWindow.extended.hint': - 'Plus de mémoire à long terme injectée à chaque exécution. Coût en jetons plus élevé par tour.', - 'settings.memoryWindow.extended.label': 'Étendu', - 'settings.memoryWindow.maximum.badge': 'Coût maximum', - 'settings.memoryWindow.maximum.hint': - 'La plus grande fenêtre sûre. Meilleure continuité, facture de jetons nettement plus élevée à chaque exécution.', - 'settings.memoryWindow.maximum.label': 'Maximum', - 'settings.memoryWindow.minimal.badge': 'Le moins cher', - 'settings.memoryWindow.minimal.hint': - 'Plus petite fenêtre de mémoire. Le moins cher, le plus rapide, le moins de continuité entre les exécutions.', - 'settings.memoryWindow.minimal.label': 'Minimal', - 'settings.memoryWindow.title': 'Fenêtre de mémoire à long terme', - 'settings.screenIntel.permissions.accessibility': 'Accessibilité', - 'settings.screenIntel.permissions.grantHint': "Indice d'autorisation", - 'settings.screenIntel.permissions.inputMonitoring': 'Surveillance des entrées', - 'settings.screenIntel.permissions.macosAppliesPrivacy': 'macOS applique la confidentialité', - 'settings.screenIntel.permissions.openInputMonitoring': 'Demande en cours…', - 'settings.screenIntel.permissions.refreshStatus': 'Actualisation…', - 'settings.screenIntel.permissions.refreshing': 'Actualisation…', - 'settings.screenIntel.permissions.requestAccessibility': 'Demande en cours…', - 'settings.screenIntel.permissions.requestScreenRecording': 'Demande en cours…', - 'settings.screenIntel.permissions.requesting': 'Demande en cours…', - 'settings.screenIntel.permissions.restartRefresh': 'Redémarrage du core…', - 'settings.screenIntel.permissions.restartingCore': 'Redémarrage du core…', - 'settings.screenIntel.permissions.screenRecording': "Enregistrement d'écran", - 'settings.screenIntel.permissions.title': 'Autorisations', - 'skills.card.moreActions': "Plus d'actions", - 'skills.create.allowedTools': 'Outils autorisés', - 'skills.create.author': 'Auteur', - 'skills.create.authorPlaceholder': 'Ton nom', - 'skills.create.commaSeparated': '(séparés par des virgules)', - 'skills.create.createBtn': 'Créer la compétence', - 'skills.create.createError': 'Impossible de créer la compétence', - 'skills.create.creating': 'Création…', - 'skills.create.description': 'Description', - 'skills.create.descriptionPlaceholder': 'Que fait cette compétence ?', - 'skills.create.optional': '(optional)', - 'skills.create.inputs.heading': 'Inputs', - 'skills.create.inputs.help': - 'Declare parameters the skill needs. The Skills Runner will render a form for these at run time.', - 'skills.create.inputs.add': 'Add input', - 'skills.create.inputs.row.name': 'Input name', - 'skills.create.inputs.row.namePlaceholder': 'e.g. repo', - 'skills.create.inputs.row.nameError': - 'Letters, digits, underscores, and dashes only; must start with a letter.', - 'skills.create.inputs.row.description': 'Input description', - 'skills.create.inputs.row.descriptionPlaceholder': 'What goes in this field?', - 'skills.create.inputs.row.type': 'Type', - 'skills.create.inputs.row.required': 'Required', - 'skills.create.inputs.row.remove': 'Remove input', - 'skills.create.inputs.type.string': 'Text', - 'skills.create.inputs.type.integer': 'Number', - 'skills.create.inputs.type.boolean': 'Yes / No', - 'skills.create.license': 'Licence', - 'skills.create.name': 'Nom', - 'skills.create.namePlaceholder': 'ex. Journal de trading', - 'skills.create.scope': 'Portée', - 'skills.create.scopeProjectHint': '/.openhuman/skills/', - 'skills.create.scopeUserHint': - 'Écrit dans ~/.openhuman/skills//SKILL.md — disponible dans tous les espaces de travail.', - 'skills.create.slugLabel': 'Libellé du slug', - 'skills.create.subtitle': 'SKILL.md', - 'skills.create.tags': 'Étiquettes', - 'skills.create.title': 'Nouvelle compétence', - 'skills.detail.allowedTools': 'Outils autorisés', - 'skills.detail.author': 'Auteur', - 'skills.detail.bundledResources': 'Ressources groupées', - 'skills.detail.closeAriaLabel': 'Fermer les détails de la compétence', - 'skills.detail.location': 'Emplacement', - 'skills.detail.noBundledResources': 'Aucune ressource groupée.', - 'skills.detail.tags': 'Étiquettes', - 'skills.detail.warnings': 'Avertissements', - 'skills.install.fetchLog': 'Récupérer le journal', - 'skills.install.installBtn': 'Installation…', - 'skills.install.installComplete': 'Installation terminée', - 'skills.install.installing': 'Installation…', - 'skills.install.parseWarnings': "Avertissements d'analyse", - 'skills.install.rawError': 'Erreur brute', - 'skills.install.timeoutHint': '(secondes, optionnel)', - 'skills.install.timeoutLabel': "Libellé du délai d'attente", - 'skills.install.title': 'Installer une compétence depuis une URL', - 'skills.install.urlLabel': 'URL de la compétence', - 'skills.meetingBots.bannerDesc': 'Description de la bannière', - 'skills.meetingBots.bannerTitle': 'Titre de la bannière', - 'skills.meetingBots.busyTitle': 'OpenHuman est occupé', - 'skills.meetingBots.comingSoon': 'Bientôt disponible', - 'skills.meetingBots.couldNotStartTitle': 'Impossible de démarrer OpenHuman', - 'skills.meetingBots.displayName': "Nom d'affichage", - 'skills.meetingBots.failedToStart': "Échec du démarrage d'OpenHuman.", - 'skills.meetingBots.joiningMessage': - 'Il devrait apparaître comme participant dans quelques secondes.', - 'skills.meetingBots.joiningTitle': 'OpenHuman rejoint la réunion', - 'skills.meetingBots.meetingLink': 'Lien de réunion', - 'skills.meetingBots.modalAriaLabel': 'Envoyer OpenHuman à une réunion', - 'skills.meetingBots.modalDesc': 'Description de la modal', - 'skills.meetingBots.modalTitle': 'Envoyer OpenHuman à une réunion', - 'skills.meetingBots.newBadge': 'Nouveau badge', - 'skills.meetingBots.sendTo': 'Envoyer à', - 'skills.meetingBots.starting': 'Démarrage…', - 'skills.resource.preview.closeAriaLabel': "Fermer l'aperçu", - 'skills.resource.preview.failed': "Échec de l'aperçu", - 'skills.resource.preview.loading': "Chargement de l'aperçu…", - 'skills.resource.tree.empty': 'Aucune ressource groupée.', - 'skills.search.placeholder': 'Espace réservé', - 'skills.setup.autocomplete.acceptKey': "Touche d'acceptation", - 'skills.setup.autocomplete.activeDesc': 'Description active', - 'skills.setup.autocomplete.activeTitle': "L'autocomplétion est active", - 'skills.setup.autocomplete.customizeSettings': 'Personnaliser les paramètres', - 'skills.setup.autocomplete.debounce': 'Anti-rebond', - 'skills.setup.autocomplete.description': 'Description', - 'skills.setup.autocomplete.enableBtn': 'Activation…', - 'skills.setup.autocomplete.enableError': "Échec de l'activation de l'autocomplétion", - 'skills.setup.autocomplete.enabling': 'Activation…', - 'skills.setup.autocomplete.notSupported': 'Non pris en charge', - 'skills.setup.autocomplete.stepEnable': 'Activer les complétions en ligne', - 'skills.setup.autocomplete.stepSuccess': "Prêt à l'emploi", - 'skills.setup.autocomplete.stylePreset': 'Préréglage de style', - 'skills.setup.autocomplete.stylePresetValue': 'Équilibré (configurable plus tard)', - 'skills.setup.autocomplete.title': 'Autocomplétion de texte', - 'skills.setup.screenIntel.activeDesc': 'Description active', - 'skills.setup.screenIntel.activeTitle': "L'intelligence d'écran est activée", - 'skills.setup.screenIntel.advancedSettings': 'Paramètres avancés', - 'skills.setup.screenIntel.allGranted': 'Toutes les permissions accordées', - 'skills.setup.screenIntel.captureMode': 'Mode de capture', - 'skills.setup.screenIntel.captureModeValue': 'Toutes les fenêtres (configurable plus tard)', - 'skills.setup.screenIntel.deniedHint': - 'Après avoir accordé les permissions dans les Paramètres système, clique ci-dessous pour redémarrer et prendre en compte les modifications.', - 'skills.setup.screenIntel.enableBtn': 'Activation…', - 'skills.setup.screenIntel.enableDesc': - 's sur ton écran et injecte du contexte utile dans ton agent', - 'skills.setup.screenIntel.enableError': "Échec de l'activation de l'intelligence d'écran", - 'skills.setup.screenIntel.enabling': 'Activation…', - 'skills.setup.screenIntel.grant': 'Ouverture…', - 'skills.setup.screenIntel.granted': 'Accordé', - 'skills.setup.screenIntel.macosOnly': 'macOS uniquement', - 'skills.setup.screenIntel.opening': 'Ouverture…', - 'skills.setup.screenIntel.panicHotkey': 'Raccourci de panique', - 'skills.setup.screenIntel.permAccessibility': 'Accessibilité', - 'skills.setup.screenIntel.permInputMonitoring': 'Surveillance des entrées', - 'skills.setup.screenIntel.permScreenRecording': "Enregistrement d'écran", - 'skills.setup.screenIntel.permissionsDesc': 'Description des permissions', - 'skills.setup.screenIntel.refreshStatus': 'Actualiser le statut', - 'skills.setup.screenIntel.restartRefresh': 'Redémarrage…', - 'skills.setup.screenIntel.restarting': 'Redémarrage…', - 'skills.setup.screenIntel.stepEnable': 'Activer la compétence', - 'skills.setup.screenIntel.stepPermissions': 'Accorder les permissions', - 'skills.setup.screenIntel.stepSuccess': "Prêt à l'emploi", - 'skills.setup.screenIntel.title': "Intelligence d'écran", - 'skills.setup.screenIntel.visionModel': 'Modèle de vision', - 'skills.setup.voice.activation': 'Activation', - 'skills.setup.voice.activeDescPrefix': 'Fn', - 'skills.setup.voice.activeDescSuffix': 'Fn', - 'skills.setup.voice.activeTitle': "L'intelligence vocale est active", - 'skills.setup.voice.customizeSettings': 'Personnaliser les paramètres', - 'skills.setup.voice.downloadSttBtn': 'Télécharger le modèle STT', - 'skills.setup.voice.enableDesc': "Description d'activation", - 'skills.setup.voice.hotkey': 'Raccourci', - 'skills.setup.voice.startBtn': 'Démarrage…', - 'skills.setup.voice.startError': 'Échec du démarrage du serveur vocal', - 'skills.setup.voice.starting': 'Démarrage…', - 'skills.setup.voice.stepEnable': 'Démarrer le serveur vocal', - 'skills.setup.voice.stepSetup': 'Téléchargement du modèle requis', - 'skills.setup.voice.stepSuccess': "Prêt à l'emploi", - 'skills.setup.voice.sttNotReady': 'Modèle speech-to-text non prêt', - 'skills.setup.voice.sttNotReadyDesc': - "L'intelligence vocale nécessite un modèle Whisper local pour la transcription. Télécharge-le depuis les paramètres du modèle local.", - 'skills.setup.voice.sttReady': 'Modèle speech-to-text prêt', - 'skills.setup.voice.sttReturnHint': 'Indice de retour STT', - 'skills.setup.voice.title': 'Intelligence vocale', - 'skills.uninstall.couldNotUninstall': 'Impossible de désinstaller', - 'skills.uninstall.description': - "Cela supprime définitivement le répertoire de la compétence et toutes ses ressources fournies. L'agent cessera de la voir au prochain tour.", - 'skills.uninstall.title': 'Désinstaller', - 'skills.uninstall.uninstallBtn': 'Désinstaller', - 'skills.uninstall.uninstalling': 'Désinstallation…', - 'upsell.global.limitMessage': 'Mets à niveau ton plan ou recharge des crédits pour continuer', - 'upsell.global.limitTitle': 'Toi', - 'upsell.global.nearLimitMessage': - "Tu as utilisé {pct}% de ta limite d'utilisation. Mets à niveau pour des limites plus élevées.", - 'upsell.global.nearLimitTitle': "Limite d'utilisation proche", - 'upsell.usageLimit.bodyBudget': - 'Vous avez atteint votre limite hebdomadaire.{reset} Améliorez votre forfait ou rechargez des crédits pour éviter les limites.', - 'upsell.usageLimit.bodyRate': - "Vous avez atteint votre limite de taux d'inférence sur 10 heures.{reset} Améliorez pour des limites plus élevées.", - 'upsell.usageLimit.heading': "Limite d'utilisation atteinte", - 'upsell.usageLimit.notNow': 'Pas maintenant', - 'upsell.usageLimit.perWindow': '{amount}', - 'upsell.usageLimit.planIncludes': '{plan}', - 'upsell.usageLimit.resetsIn': 'Réinitialisation {time}.', - 'upsell.usageLimit.upgradePlan': 'Mettre à niveau le plan', - 'upsell.usageLimit.weeklyInference': '{amount}', - 'walkthrough.tooltip.letsGo': "C'est parti !", - 'walkthrough.tooltip.next': 'Suivant →', - 'walkthrough.tooltip.skip': 'Passer la visite', - 'walkthrough.tooltip.stepCounter': '{n} sur {total}', - 'webhooks.activity.empty': 'Vide', - 'webhooks.activity.title': 'Activité récente', - 'webhooks.composioHistory.empty': 'Vide', - 'webhooks.composioHistory.metadataId': 'ID de métadonnées', - 'webhooks.composioHistory.metadataUuid': 'UUID de métadonnées', - 'webhooks.composioHistory.payload': 'Charge utile', - 'webhooks.composioHistory.title': 'Historique des déclencheurs ComposeIO', - 'webhooks.tunnels.active': 'Actif', - 'webhooks.tunnels.createFailed': 'Échec de la création du tunnel', - 'webhooks.tunnels.creating': 'Création…', - 'webhooks.tunnels.deleteFailed': 'Échec de la suppression du tunnel', - 'webhooks.tunnels.descriptionPlaceholder': 'Description (optionnel)', - 'webhooks.tunnels.echo': 'Écho', - 'webhooks.tunnels.empty': 'Vide', - 'webhooks.tunnels.enableEcho': "Activer l'écho", - 'webhooks.tunnels.inactive': 'Inactif', - 'webhooks.tunnels.namePlaceholder': 'Nom du tunnel (ex. telegram-bot)', - 'webhooks.tunnels.newTunnel': 'Nouveau tunnel', - 'webhooks.tunnels.removeEcho': "Supprimer l'écho", - 'webhooks.tunnels.title': 'Tunnels webhook', - 'webhooks.tunnels.toggleFailed': "Échec de la bascule de l'écho", - 'composio.authExpired': 'Authentification expirée', - 'composio.reconnect': 'Reconnecter', - 'composio.previewBadge': 'Aperçu', - 'composio.previewTooltip': - "Intégration de l'agent bientôt disponible : vous pouvez vous connecter, mais l'agent ne peut pas encore utiliser cette boîte à outils.", - 'composio.directModeRequiresKey': - "Échec de l'enregistrement. Le mode Direct nécessite une clé API non vide.", - 'composio.notYetRouted': 'pas encore routé', - 'composio.triggers.loading': 'Chargement…', - 'conversations.taskKanban.todo': 'À faire', - 'settings.composio.loading': 'Chargement…', - 'settings.mascot.noCharactersAvailable': "Aucun personnage OpenHuman n'est encore disponible", - 'skills.uninstall.confirmTitle': 'Désinstaller {name} ?', - 'conversations.taskKanban.blocked': 'Bloqué', - 'conversations.taskKanban.done': 'Terminé', - 'conversations.taskKanban.pending': 'Pending', - 'conversations.taskKanban.working': 'Working', - 'conversations.taskKanban.awaitingApproval': 'Awaiting approval', - 'conversations.taskKanban.ready': 'Ready', - 'conversations.taskKanban.rejected': 'Rejected', - 'conversations.taskKanban.inProgress': 'En cours', - 'intelligence.memoryChunk.detail.copiedHint': 'copié', - 'settings.composio.notYetRouted': 'pas encore routé', - 'settings.localModel.download.manageExternal': 'Gérez ce modèle dans votre runtime externe.', - 'settings.localModel.status.manageOllamaExternal': - "Gérez le processus Ollama et les téléchargements de modèles en dehors d'OpenHuman, puis relancez les diagnostics.", - 'settings.localModel.status.ollamaDocs': 'Documentation Ollama', - 'settings.localModel.status.thenRetry': - 'pour les instructions de configuration, puis réessayez une fois votre runtime accessible.', - 'settings.appearance.title': 'Apparence', - 'settings.appearance.themeHeading': 'Thème', - 'settings.appearance.themeAria': 'Thème', - 'settings.appearance.modeLight': 'Clair', - 'settings.appearance.modeLightDesc': 'Surfaces claires, texte sombre.', - 'settings.appearance.modeDark': 'Sombre', - 'settings.appearance.modeDarkDesc': - 'Surfaces sombres, plus agréables pour les yeux après le crépuscule.', - 'settings.appearance.modeSystem': 'Système de correspondance', - 'settings.appearance.modeSystemDesc': - "Suivez les paramètres d'apparence de votre système d'exploitation.", - 'settings.appearance.helperText': - "Le mode sombre fait basculer l'ensemble de l'application (chat, paramètres, panneaux) vers une palette sombre. \"Match system\" suit l'apparence de votre système d'exploitation et se met à jour en direct.", - 'settings.mascot.characterPreview': 'Aperçu', - 'settings.mascot.characterStates': 'états', - 'settings.mascot.characterVisemes': 'visèmes', - 'settings.mascot.colorAria': 'OpenHuman couleur', - 'settings.mascot.colorBlack': 'Noir', - 'settings.mascot.colorBurgundy': 'Bordeaux', - 'settings.mascot.colorCustom': 'Custom', - 'settings.mascot.colorNavy': 'Marine', - 'settings.mascot.primaryColor': 'Primary color', - 'settings.mascot.secondaryColor': 'Secondary color', - 'settings.mascot.colorYellow': 'Jaune', - 'settings.mascot.libraryUnavailable': 'OpenHuman bibliothèque indisponible', - 'settings.mascot.title': 'OpenHuman', - 'settings.developerMenu.mcpServer.title': 'MCP Serveur', - 'settings.developerMenu.mcpServer.desc': - 'Configurer les clients MCP externes pour se connecter à OpenHuman', - 'settings.developerMenu.autonomy.title': 'Autonomie de l’agent', - 'settings.developerMenu.autonomy.desc': - 'Limites de fréquence des actions des outils et seuils de sécurité', - 'settings.mcpServer.title': 'Serveur MCP', - 'settings.mcpServer.toolsSectionTitle': 'Outils disponibles', - 'settings.mcpServer.toolsSectionDesc': - "Outils exposés via le serveur stdio MCP lors de l'exécution d'openhuman-core mcp", - 'settings.mcpServer.configSectionTitle': 'Configuration du client', - 'settings.mcpServer.configSectionDesc': - "Sélectionnez votre client MCP pour générer l'extrait de configuration correct", - 'settings.mcpServer.copySnippet': 'Copier dans le presse-papiers', - 'settings.mcpServer.copied': 'Copié !', - 'settings.mcpServer.openConfigFile': 'Ouvrir le fichier de configuration', - 'settings.mcpServer.binaryPathNotFound': - 'Binaire OpenHuman introuvable. Si vous exécutez à partir des sources, compilez avec : cargo build --bin openhuman-core', - 'settings.mcpServer.openConfigError': "Échec de l'ouverture du fichier de configuration", - 'settings.mcpServer.clientClaudeDesktop': 'Claude Desktop', - 'settings.mcpServer.clientCursor': 'Curseur', - 'settings.mcpServer.clientCodex': 'Codex', - 'settings.mcpServer.clientZed': 'Zed', - 'settings.mcpServer.configFilePath': 'Fichier de configuration', - 'settings.mcpServer.clientSelectorAriaLabel': 'MCP sélecteur de client', - 'settings.persona.title': 'Persona', - 'settings.persona.menuTitle': 'Persona', - 'settings.persona.menuDesc': - 'Name, personality, avatar, and voice — your assistant as one identity', - 'settings.persona.identityHeading': 'Identity', - 'settings.persona.identityDesc': - 'A display name and short description for your assistant. Shown in the app; does not change how the assistant reasons.', - 'settings.persona.displayNameLabel': 'Display name', - 'settings.persona.displayNamePlaceholder': 'e.g. Nova', - 'settings.persona.descriptionLabel': 'Description', - 'settings.persona.descriptionPlaceholder': 'e.g. A calm, concise assistant for my team.', - 'settings.persona.soul.heading': 'Personality (SOUL.md)', - 'settings.persona.soul.desc': - 'The personality prompt the assistant follows in every conversation. Edits are saved to your workspace and take effect on the next reply.', - 'settings.persona.soul.editorLabel': 'SOUL.md contents', - 'settings.persona.soul.reset': 'Reset to default', - 'settings.persona.soul.usingDefault': 'Using the bundled default', - 'settings.persona.soul.loadError': 'Could not load SOUL.md', - 'settings.persona.soul.saveError': 'Could not save SOUL.md', - 'settings.persona.soul.resetError': 'Could not reset SOUL.md', - 'settings.persona.appearanceHeading': 'Avatar & Voice', - 'settings.persona.appearanceDesc': - 'Mascot color, custom GIF avatar, and reply voice are configured in Mascot settings.', - 'settings.persona.openMascotSettings': 'Open Mascot settings', - 'settings.developerMenu.composio.title': 'Composio', - 'settings.developerMenu.composio.desc': - "Mode de routage, déclencheurs d'intégration et archive de l'historique des déclencheurs.", - 'settings.appearance.tabBarHeading': "Barre d'onglets inférieure", - 'settings.appearance.tabBarAlwaysShowLabels': 'Toujours afficher les étiquettes', - 'settings.appearance.tabBarAlwaysShowLabelsDesc': - "Lorsqu'elle est désactivée, les étiquettes n'apparaissent qu'au survol ou pour l'onglet actif.", - 'common.breadcrumb': "Fil d'Ariane", - 'settings.betaBuild': 'Version bêta - v{version}', - 'migration.vendor.openclaw': 'OpenClaw', - 'migration.vendor.hermes': 'Hermes Agent', - 'onboarding.apiKeys.openaiOauthHint': - 'Utilisez ChatGPT Plus/Pro (abonnement) ou une clé OpenAI API — les deux ne sont pas requis.', - 'onboarding.apiKeys.openaiOauthOpening': 'Ouverture de la connexion…', - 'onboarding.apiKeys.finishSignIn': 'Terminer la connexion à ChatGPT', - 'onboarding.apiKeys.orApiKey': 'ou clé API', - 'app.localAiDownload.expandAria': 'Développer la progression du téléchargement', - 'app.localAiDownload.collapseAria': 'Réduire la progression du téléchargement', - 'app.localAiDownload.dismissAria': 'Ignorer la notification de téléchargement', - 'mobile.nav.ariaLabel': 'Navigation mobile', - 'progress.stepsAria': 'Étapes de progression', - 'progress.stepAria': 'Étape {current} de {total}', - 'workspace.vaultsTitle': 'Coffres de connaissances', - 'workspace.vaultsDesc': - 'Pointez sur un dossier local ; les fichiers sont fragmentés et mis en miroir dans la mémoire.', - 'calls.title': 'Appels', - 'calls.comingSoonBody': "Les appels assistés par l'IA arriveront bientôt. Restez à l'écoute.", - 'art.rotatingTetrahedronAria': 'Vaisseau spatial à tétraèdre inversé rotatif', - 'devOptions.sentryDisabled': '(aucun identifiant - Sentry désactivé dans cette version)', - 'composio.expiredAuthorization': "L'autorisation {name} a expiré", - 'composio.expiredDescription': - "Reconnectez-vous pour réactiver les outils {name}. OpenHuman gardera cette intégration indisponible jusqu'à ce que vous actualisiez l'accès OAuth.", - 'channels.telegram.remoteControlTitle': 'Télécommande (Telegram)', - 'channels.telegram.remoteControlBody': - "À partir d'un chat Telegram autorisé, envoyez /status, /sessions, /new ou /help. Le routage de modèles utilise toujours /model et /models.", - 'rewards.referralSection.retry': 'Réessayez', - 'settings.ai.plannerSummary': - 'Planificateur : événements sources {sourceEvents}, {sent} envoyés, {deduped} dédupliqués.', - 'settings.ai.routeLabel': 'itinéraire : {route}', - 'settings.ai.latestSpend': 'Dernière dépense : {amount} à {time} ({action})', - 'settings.ai.topActions': 'Principales actions', - 'settings.ai.noSpendRows': 'Aucune ligne de dépenses chargée.', - 'settings.ai.topHours': 'Heures principales', - 'settings.ai.noHourlySpend': "Aucune dépense horaire pour l'instant.", - 'settings.autocomplete.appFilter.app': 'Application', - 'settings.autocomplete.appFilter.currentSuggestion': 'Suggestion actuelle', - 'settings.autocomplete.appFilter.debounce': 'Anti-rebond', - 'settings.autocomplete.appFilter.enabled': 'Activé', - 'settings.autocomplete.appFilter.lastError': 'Dernière erreur', - 'settings.autocomplete.appFilter.model': 'Modèle', - 'settings.autocomplete.appFilter.phase': 'Phase', - 'settings.autocomplete.appFilter.platformSupported': 'Plateforme prise en charge', - 'settings.autocomplete.appFilter.running': "En cours d'exécution", - 'settings.autocomplete.debug.acceptedPrefix': 'Acceptée : {value}', - 'settings.autocomplete.debug.acceptFailed': "Échec de l'acceptation de la suggestion", - 'settings.autocomplete.debug.alreadyRunning': - "La saisie semi-automatique est déjà en cours d'exécution.", - 'settings.autocomplete.debug.clearHistoryFailed': "Échec de l'effacement de l'historique.", - 'settings.autocomplete.debug.didNotStart': "La saisie semi-automatique n'a pas démarré.", - 'settings.autocomplete.debug.disabledInSettings': - "La saisie semi-automatique est désactivée dans les paramètres. Activez-le et enregistrez d'abord.", - 'settings.autocomplete.debug.fetchSuggestionFailed': - 'Échec de la récupération de la suggestion actuelle', - 'settings.autocomplete.debug.inspectFocusedElementFailed': - "Échec de l'inspection de l'élément ciblé", - 'settings.autocomplete.debug.loadSettingsFailed': - 'Échec du chargement des paramètres de saisie semi-automatique', - 'settings.autocomplete.debug.noSuggestionApplied': "Aucune suggestion n'a été appliquée.", - 'settings.autocomplete.debug.noSuggestionReturned': 'Aucune suggestion renvoyée.', - 'settings.autocomplete.debug.refreshStatusFailed': - "Échec de l'actualisation de l'état de la saisie semi-automatique", - 'settings.autocomplete.debug.saveAdvancedSettingsFailed': - "Échec de l'enregistrement des paramètres avancés", - 'settings.autocomplete.debug.startFailed': 'Échec du démarrage de la saisie semi-automatique', - 'settings.autocomplete.debug.stopFailed': "Échec de l'arrêt de la saisie semi-automatique", - 'settings.autocomplete.debug.suggestionPrefix': 'Suggestion : {value}', - 'settings.autocomplete.shared.none': 'Aucune', - 'settings.autocomplete.shared.notApplicable': 'n/a', - 'settings.autocomplete.shared.unknown': 'Inconnu', - 'settings.billing.autoRecharge.expires': 'Expire {date}', - 'settings.billing.autoRecharge.spentThisWeek': '${spent} de ${limit} utilisé cette semaine', - 'settings.localModel.deviceCapability.disabledLowercase': 'désactivé', - 'settings.localModel.deviceCapability.presetDetails': - 'Chat : {chatModel} · Vision : {visionModel} · RAM cible : {targetRamGb} Go', - 'settings.localModel.download.capabilityChat': 'Chat', - 'settings.localModel.download.capabilityEmbedding': 'Intégration', - 'settings.localModel.download.capabilityStt': 'STT', - 'settings.localModel.download.capabilityTts': 'TTS', - 'settings.localModel.download.capabilityVision': 'Vision', - 'settings.localModel.download.embeddingDimensions': 'Dimensions : {dimensions}', - 'settings.localModel.download.embeddingModel': 'Modèle : {modelId}', - 'settings.localModel.download.embeddingVectors': 'Vecteurs : {count}', - 'settings.localModel.download.notAvailable': 'n/a', - 'settings.localModel.download.summaryHelper': - 'Appelle `openhuman.inference_summarize` via le noyau Rust', - 'settings.localModel.download.transcript': 'Transcription :', - 'settings.localModel.download.ttsOutput': 'Sortie : {outputPath}', - 'settings.localModel.download.ttsVoice': 'Voix : {voiceId}', - 'settings.localModel.status.contextBelowMinimumBadge': - '{contextLength} ctx - inférieur à {required} min', - 'settings.localModel.status.contextBelowMinimumTitle': - 'Rejeté : la fenêtre contextuelle des jetons {contextLength} est inférieure au minimum de jetons {required} requis par la couche mémoire. Le rappel serait corrompu par une troncature silencieuse.', - 'settings.localModel.status.contextOkBadge': '{contextLength} ctx ✓', - 'settings.localModel.status.contextOkTitle': - 'Les jetons {contextLength} de la fenêtre contextuelle répondent au minimum de la couche mémoire de jetons {required}.', - 'settings.localModel.status.contextUnknownBadge': 'ctx inconnu', - 'settings.localModel.status.contextUnknownTitle': - "Fenêtre contextuelle inconnue ; n'a pas pu confirmer qu'il répond au minimum de couche mémoire du jeton {required}.", - 'settings.localModel.status.expectedChat': 'Chat : {model}', - 'settings.localModel.status.expectedEmbedding': 'Intégration : {model}', - 'settings.localModel.status.expectedVision': 'Vision : {model}', - 'settings.localModel.status.externalProcess': 'Processus externe', - 'settings.localModel.status.notAvailable': 'n/a', - 'settings.mascot.customGifPlaceholder': 'https://example.com/avatar.gif', - 'settings.mascot.loadDetailError': 'Impossible de charger la mascotte.', - 'settings.mascot.loadLibraryError': 'Impossible de charger la bibliothèque de mascottes.', - 'settings.mascot.voice.customPlaceholder': 'par ex. 21m00Tcm4TlvDq8ikWAM', - 'settings.mascot.voice.previewText': "Hi, I'm your assistant. This is a voice preview.", - 'skills.channelIcon.discord': 'Discord', - 'skills.channelIcon.imessage': 'iMessage', - 'skills.channelIcon.telegram': 'Telegram', - 'skills.channelIcon.web': 'Web', - 'skills.channelIcon.yuanbao': 'Yuanbao', - 'skills.composio.poweredBy': 'Propulsé par Composio', - 'skills.composio.staleStatusTitle': 'Les connexions affichent un état obsolète', - 'skills.create.allowedToolsHelp': 'Rendu dans le frontmatter SKILL.md comme', - 'skills.create.allowedToolsPlaceholder': 'node_exec, récupérer', - 'skills.create.licensePlaceholder': 'MIT', - 'skills.create.tagsPlaceholder': 'trading, recherche', - 'skills.install.errors.alreadyInstalledHint': - "Une compétence avec ce slug existe déjà dans l'espace de travail. Supprimez-le d'abord ou modifiez le frontmatter `metadata.id` / `name`.", - 'skills.install.errors.alreadyInstalledTitle': 'Compétence déjà installée', - 'skills.install.errors.fetchFailedHint': - "La demande n'a pas abouti. Vérifiez les points URL sur un fichier public accessible et que l'hôte a renvoyé une réponse 2xx.", - 'skills.install.errors.fetchFailedTitle': 'Échec de la récupération', - 'skills.install.errors.fetchTimedOutHint': - "L'hôte distant n'a pas répondu à temps. Réessayez ou augmentez le délai d'attente (1 à 600 s).", - 'skills.install.errors.fetchTimedOutTitle': 'Le délai de récupération a expiré.', - 'skills.install.errors.fetchTooLargeHint': - 'Le fichier SKILL.md doit être inférieur à 1 Mo. Divisez les ressources groupées en fichiers « références/ » ou « scripts/ » au lieu de les intégrer.', - 'skills.install.errors.fetchTooLargeTitle': 'SKILL.md trop volumineux', - 'skills.install.errors.genericHint': - 'Le backend a renvoyé une erreur. Le message brut est présenté ci-dessous.', - 'skills.install.errors.genericTitle': "Impossible d'installer la compétence", - 'skills.install.errors.invalidSkillHint': - 'Le frontmatter doit être un YAML valide avec des champs `name` et `description` non vides, terminés par `---`.', - 'skills.install.errors.invalidSkillTitle': "SKILL.md n'a pas analysé", - 'skills.install.errors.invalidUrlHint': - 'Seuls les HTTPS URL publics sont autorisés. Les hôtes privés, de bouclage et de métadonnées sont bloqués.', - 'skills.install.errors.invalidUrlTitle': 'URL rejeté', - 'skills.install.errors.unsupportedUrlHint': - "Seuls les liens directs `.md` fonctionnent. Pour GitHub, créez un lien vers un fichier (github.com/owner/repo/blob/.../SKILL.md) - les racines de l'arborescence et du dépôt ne sont pas installées.", - 'skills.install.errors.unsupportedUrlTitle': 'Formulaire URL non pris en charge.', - 'skills.install.errors.writeFailedHint': - "Le répertoire des compétences de l'espace de travail n'était pas accessible en écriture. Vérifiez les autorisations du système de fichiers pour `/.openhuman/skills/`.", - 'skills.install.errors.writeFailedTitle': "Impossible d'écrire SKILL.md", - 'skills.install.fetchingPrefix': 'Récupération', - 'skills.install.fetchingSuffix': - "cela peut prendre jusqu'au délai d'attente que vous avez configuré.", - 'skills.install.subtitleMiddle': "sur HTTPS et l'installe sous", - 'skills.install.subtitlePrefix': 'Récupère un seul', - 'skills.install.subtitleSuffix': - 'HTTPS uniquement ; les hôtes privés et de bouclage sont bloqués.', - 'skills.install.successDiscovered': 'Vous avez découvert {count} nouvelle(s) compétence(s).', - 'skills.install.successNoNewIds': - "Compétence installée, mais aucun nouvel identifiant de compétence n'est apparu - le catalogue contient peut-être déjà une compétence avec le même slug.", - 'skills.install.timeoutHelp': - 'La valeur par défaut est 60 secondes. Les valeurs en dehors de 1-600 sont limitées côté serveur.', - 'skills.install.timeoutInvalid': 'Doit être un entier compris entre 1 et 600.', - 'skills.install.timeoutPlaceholder': '60', - 'skills.install.urlHelpMiddle': 'déposer.', - 'skills.install.urlHelpPrefix': 'Lien direct vers une réécriture automatique de', - 'skills.install.urlHelpSuffix': 'URLs vers', - 'skills.install.urlInvalidPrefix': 'URL doit être un lien', - 'skills.install.urlInvalidSuffix': 'bien formé. Le support de', - 'skills.install.urlPlaceholder': 'https://raw.githubusercontent.com/owner/repo/main/SKILL.md', - 'skills.meetingBots.platformComingSoon': '{label} sera bientôt disponible.', - 'skills.meetingBots.platformHints.gmeet': 'meet.google.com/abc-defg-hij', - 'skills.meetingBots.platformHints.teams': 'teams.microsoft.com/...', - 'skills.meetingBots.platformHints.zoom': 'zoom.us/j/...', - 'skills.meetingBots.platforms.gmeet': 'Google Meet', - 'skills.meetingBots.platforms.teams': 'Microsoft Teams', - 'skills.meetingBots.platforms.zoom': 'Zoom', - 'skills.meetingBots.soonSuffix': 'bientôt', - 'skills.setup.screenIntel.permissionPathLabel': 'macOS applique la confidentialité à :', - 'settings.agentAccess.title': 'Agent OS access', - 'settings.agentAccess.menuDesc': - 'Control where the agent can read/write and whether it can use the shell.', - 'settings.agentAccess.loadError': 'Failed to load access settings', - 'settings.agentAccess.saveError': 'Failed to save access settings', - 'settings.agentAccess.saved': 'Saved — applies on your next message.', - 'settings.agentAccess.desktopOnly': 'Access settings are only available in the desktop app.', - 'settings.agentAccess.loading': 'Loading…', - 'settings.agentAccess.accessMode': 'Access mode', - 'settings.agentAccess.tier.readonly.title': 'Read-only', - 'settings.agentAccess.tier.readonly.desc': - 'Reads files and runs read-only commands to explore — but never writes, edits, or runs anything that changes state.', - 'settings.agentAccess.tier.supervised.title': 'Ask before edit', - 'settings.agentAccess.tier.supervised.desc': - 'Creates new files freely, but asks for your approval before editing an existing file, running a command, reaching the network, or installing anything.', - 'settings.agentAccess.tier.full.title': 'Full access', - 'settings.agentAccess.tier.full.desc': - 'Runs commands with your full user account access — it can read/write anywhere allowed, except credential and system stores. Destructive commands, network access, and installs still ask for approval.', - 'settings.agentAccess.defaultTag': '(default)', - 'settings.agentAccess.fullWarning': - '⚠ Full access runs commands with your full account access and is not sandboxed. Only enable it when you trust the agent with this machine. Credential and system directories stay blocked, and destructive, network, and install actions still ask for approval.', - 'settings.agentAccess.confine.label': 'Confine to workspace', - 'settings.agentAccess.confine.desc': - 'Restrict the agent to the workspace directory (plus any granted folders), whichever access mode is selected. When off, it can reach anywhere your user can — except the always-blocked credential and system directories.', - 'settings.agentAccess.grantedFolders': 'Granted folders', - 'settings.agentAccess.alwaysAllow': 'Always-allowed tools', - 'settings.agentAccess.alwaysAllowDesc': - 'Tools you marked "Always allow" in chat run without asking. Remove one to be prompted again.', - 'settings.agentAccess.alwaysAllowNone': 'No always-allowed tools yet.', - 'settings.agentAccess.grantedDesc': - 'Folders the agent may read and write, in addition to the workspace. Credential stores (~/.ssh, ~/.gnupg, ~/.aws, keychains) and system directories (/etc, /System, C:\\Windows, …) are always blocked, even inside a granted folder.', - 'settings.agentAccess.noneGranted': 'No folders granted.', - 'settings.agentAccess.readWrite': 'read + write', - 'settings.agentAccess.readOnly': 'read-only', - 'settings.agentAccess.remove': 'Remove', - 'settings.agentAccess.pathPlaceholder': 'Chemin absolu du dossier', - 'settings.agentAccess.accessLevelLabel': 'Access level', - 'settings.agentAccess.add': 'Add', - 'settings.agentAccess.saving': 'Saving…', - 'settings.agentAccess.changesApply': 'Changes apply on your next message.', - 'skills.tabs.runners': 'Runners', - 'settings.developerMenu.skillsRunner.title': 'Skills Runner', - 'settings.developerMenu.skillsRunner.desc': - 'Run any bundled skill ad-hoc — fill its inputs and fire a background autonomous run', - 'settings.developerMenu.skillsRunner.panelDesc': - 'Pick a bundled skill, fill in its declared inputs, and fire a fire-and-forget background run. Use Dev Workflow instead if you want a cron-scheduled recurring job.', - 'settings.skillsRunner.skill': 'Skill', - 'settings.skillsRunner.selectSkill': 'Select a skill…', - 'settings.skillsRunner.loadingSkills': 'Loading skills…', - 'settings.skillsRunner.loadingDescription': 'Loading skill inputs…', - 'settings.skillsRunner.noInputs': 'This skill declares no inputs.', - 'settings.skillsRunner.placeholder.required': 'required', - 'settings.skillsRunner.runNow': 'Run now', - 'settings.skillsRunner.starting': 'Starting…', - 'settings.skillsRunner.started': 'Started — run id:', - 'settings.skillsRunner.logPath': 'Log:', - 'settings.skillsRunner.error.listSkills': 'Failed to load skills:', - 'settings.skillsRunner.error.describe': 'Failed to load inputs:', - 'settings.skillsRunner.error.missingRequired': 'Missing required input(s):', - 'settings.skillsRunner.error.run': 'Run failed to start:', - 'settings.skillsRunner.error.preflightGate': 'Preflight gate failed', - 'settings.skillsRunner.schedule.heading': 'Schedule (recurring)', - 'settings.skillsRunner.schedule.help': - 'Save this skill + inputs as a recurring cron job. The agent will call run_skill at each tick.', - 'settings.skillsRunner.schedule.frequency': 'Frequency', - 'settings.skillsRunner.schedule.every30min': 'Every 30 minutes', - 'settings.skillsRunner.schedule.everyHour': 'Every hour', - 'settings.skillsRunner.schedule.every2hours': 'Every 2 hours', - 'settings.skillsRunner.schedule.every6hours': 'Every 6 hours', - 'settings.skillsRunner.schedule.onceDaily': 'Once daily (9:00)', - 'settings.skillsRunner.schedule.save': 'Save schedule', - 'settings.skillsRunner.schedule.saving': 'Saving…', - 'settings.skillsRunner.schedule.saved': 'Schedule saved.', - 'settings.skillsRunner.schedule.error': 'Schedule save failed:', - 'settings.skillsRunner.schedule.loadingJobs': 'Loading existing schedules…', - 'settings.skillsRunner.schedule.noJobs': 'No schedules saved for this skill yet.', - 'settings.skillsRunner.schedule.existing': 'Scheduled jobs for this skill:', - 'settings.skillsRunner.schedule.runNow': 'Run', - 'settings.skillsRunner.schedule.remove': 'Remove', - 'settings.skillsRunner.recentRuns.headingForSkill': 'Recent runs for this skill', - 'settings.skillsRunner.recentRuns.headingAll': 'Recent skill runs (all)', - 'settings.skillsRunner.recentRuns.refresh': 'Refresh', - 'settings.skillsRunner.recentRuns.loading': 'Loading recent runs…', - 'settings.skillsRunner.recentRuns.empty': 'No recent runs.', - 'settings.skillsRunner.viewer.loading': 'Loading log…', - 'settings.skillsRunner.viewer.tailing': 'Live tailing', - 'settings.skillsRunner.viewer.fetching': 'fetching', - 'settings.skillsRunner.viewer.error': 'Log read failed:', - 'settings.skillsRunner.repoPicker.loading': 'Loading repositories…', - 'settings.skillsRunner.repoPicker.select': 'Select a repository…', - 'settings.skillsRunner.repoPicker.empty': - 'No repositories returned. Connect GitHub via Composio to populate this list.', - 'settings.skillsRunner.repoPicker.notConnected': - 'GitHub isn’t connected via Composio. Connect it under Skills → Composio first.', - 'settings.skillsRunner.repoPicker.privateTag': '(private)', - 'settings.skillsRunner.branchPicker.needRepo': 'Pick a repo first…', - 'settings.skillsRunner.branchPicker.loading': 'Loading branches…', - 'settings.skillsRunner.branchPicker.select': 'Select a branch…', - 'settings.modelHealth.title': 'Model Health', - 'settings.modelHealth.desc': - 'Per-model quality, hallucination rate, and cost comparison across active models', - 'settings.modelHealth.allStatuses': 'All statuses', - 'settings.modelHealth.models': 'models', - 'settings.modelHealth.loading': 'Loading model data...', - 'settings.modelHealth.empty': 'No models registered', - 'settings.modelHealth.col.model': 'Model', - 'settings.modelHealth.col.quality': 'Quality', - 'settings.modelHealth.col.halluc': 'Halluc. Rate', - 'settings.modelHealth.col.cost': 'Cost / 1M out', - 'settings.modelHealth.col.agents': 'Agents', - 'settings.modelHealth.col.status': 'Status', - 'settings.modelHealth.badge.keep': 'Keep', - 'settings.modelHealth.badge.replace': 'Replace', - 'settings.modelHealth.badge.staging': 'Staging test', - 'settings.modelHealth.badge.vision': 'Vision only', - 'settings.modelHealth.swap': 'Swap?', - 'settings.modelHealth.modal.title': 'Replace Model?', - 'settings.modelHealth.modal.hallucRate': 'Hallucination rate', - 'settings.modelHealth.modal.cancel': 'Cancel', - 'settings.modelHealth.modal.apply': 'Apply Replacement', - 'settings.modelHealth.tag.cheaper': 'CHEAPER', - 'settings.modelHealth.tag.better': 'BETTER', - // Task sources (#task-sources) - 'settings.taskSources.title': 'Task Sources', - 'settings.taskSources.subtitle': 'Pull tasks from your tools onto the agent todo board', - 'settings.taskSources.description': - 'Collect work items from GitHub, Notion, Linear, and ClickUp, enrich them, and route them onto the agent todo board.', - 'settings.taskSources.connectHint': - 'Task sources use your connected accounts. Connect them under Integrations first.', - 'settings.taskSources.disabledBanner': - 'Task sources are disabled in settings. Enable them to poll automatically.', - 'settings.taskSources.loadError': 'Failed to load task sources', - 'settings.taskSources.addTitle': 'Add a task source', - 'settings.taskSources.provider': 'Provider', - 'settings.taskSources.name': 'Name (optional)', - 'settings.taskSources.namePlaceholder': 'e.g. My open issues', - 'settings.taskSources.github.repo': 'Repository (owner/name, optional)', - 'settings.taskSources.github.labels': 'Labels (comma-separated)', - 'settings.taskSources.notion.database': 'Database (board) ID', - 'settings.taskSources.linear.team': 'Team ID (optional)', - 'settings.taskSources.clickup.team': 'Workspace (team) ID (optional)', - 'settings.taskSources.assignedToMe': 'Only items assigned to me', - 'settings.taskSources.add': 'Add source', - 'settings.taskSources.adding': 'Adding…', - 'settings.taskSources.preview': 'Preview', - 'settings.taskSources.previewResult': '{count} task(s) match this filter', - 'settings.taskSources.fetchNow': 'Fetch now', - 'settings.taskSources.fetching': 'Fetching…', - 'settings.taskSources.fetchResult': 'Routed {routed} of {fetched} task(s)', - 'settings.taskSources.configured': 'Configured sources', - 'settings.taskSources.empty': 'No task sources configured yet.', - 'settings.taskSources.proactive': 'Proactive', - 'settings.taskSources.lastFetch': 'Last fetch', - 'settings.taskSources.never': 'Never', - 'settings.taskSources.statusEnabled': 'Enabled', - 'settings.taskSources.statusDisabled': 'Disabled', - 'settings.taskSources.enable': 'Enable', - 'settings.taskSources.disable': 'Disable', - 'settings.taskSources.remove': 'Remove', - 'settings.taskSources.removeConfirm': - 'Remove this task source? All ingested task history will be deleted and cannot be undone.', - - 'settings.taskSources.refresh': 'Refresh', - // Task sources provider labels (#task-sources) - 'settings.taskSources.providers.github': 'GitHub', - 'settings.taskSources.providers.notion': 'Notion', - 'settings.taskSources.providers.linear': 'Linear', - 'settings.taskSources.providers.clickup': 'ClickUp', - - // /skills IA restructure (Phase 2/3) — dashboard + new-skill page. - 'skills.dashboard.title': 'Skills', - 'skills.dashboard.scheduledHeading': 'Scheduled skills', - 'skills.dashboard.emptyTitle': 'No scheduled skills', - 'skills.dashboard.emptyBody': - 'Run a bundled skill once or save a recurring schedule to see it here.', - 'skills.dashboard.create': 'Create a Skill', - 'skills.dashboard.run': 'Run a Skill', - 'skills.dashboard.enable': 'Enable scheduled skill', - 'skills.dashboard.disable': 'Disable scheduled skill', - 'skills.dashboard.lastRun': 'Last run', - 'skills.dashboard.nextRun': 'Next run', - 'skills.dashboard.cardOpenRunner': 'Open in runner', - 'skills.dashboard.loadError': 'Failed to load scheduled skills', - 'skills.new.title': 'Create a skill', - 'skills.new.placeholderBody': - 'Authoring form arrives soon. For now, use the “New skill” button on the runner page.', - 'settings.agentAccess.requireTaskPlanApproval.label': 'Require task plan approval', - 'settings.agentAccess.requireTaskPlanApproval.desc': - 'Pause before an assigned agent executes an agent-authored task brief.', -}; - -export default fr5; diff --git a/app/src/lib/i18n/chunks/hi-1.ts b/app/src/lib/i18n/chunks/hi-1.ts deleted file mode 100644 index 74fb9b9e1..000000000 --- a/app/src/lib/i18n/chunks/hi-1.ts +++ /dev/null @@ -1,1619 +0,0 @@ -import type { TranslationMap } from '../types'; - -// Hindi (हिन्दी) chunk 1/5. Translated from chunks/en-1.ts. -const hi1: TranslationMap = { - 'nav.home': 'होम', - 'nav.human': 'मानव', - 'nav.chat': 'चैट', - 'nav.connections': 'कनेक्शन', - 'nav.memory': 'इंटेलिजेंस', - 'nav.alerts': 'अलर्ट', - 'nav.rewards': 'रिवॉर्ड', - 'nav.settings': 'सेटिंग्स', - 'common.cancel': 'रद्द करें', - 'common.save': 'सेव करें', - 'common.confirm': 'कन्फर्म करें', - 'common.delete': 'डिलीट करें', - 'common.edit': 'एडिट करें', - 'common.create': 'बनाएं', - 'common.search': 'सर्च करें', - 'common.loading': 'लोड हो रहा है…', - 'common.error': 'एरर', - 'common.success': 'सफल', - 'common.back': 'वापस', - 'common.next': 'आगे', - 'common.finish': 'पूरा करें', - 'common.close': 'बंद करें', - 'common.enabled': 'चालू है', - 'common.disabled': 'बंद है', - 'common.on': 'चालू', - 'common.off': 'बंद', - 'common.yes': 'हाँ', - 'common.no': 'नहीं', - 'common.ok': 'ठीक है', - 'common.retry': 'पुनः प्रयास करें', - 'common.copy': 'कॉपी करें', - 'common.copied': 'कॉपी हो गया', - 'common.learnMore': 'और जानें', - 'common.seeAll': 'देखें', - 'common.dismiss': 'हटाएं', - 'common.clear': 'क्लियर करें', - 'common.reset': 'रीसेट करें', - 'common.refresh': 'रिफ्रेश करें', - 'common.export': 'एक्सपोर्ट करें', - 'common.import': 'इम्पोर्ट करें', - 'common.upload': 'अपलोड करें', - 'common.download': 'डाउनलोड करें', - 'common.add': 'जोड़ें', - 'common.remove': 'हटाएं', - 'common.showMore': 'और दिखाएं', - 'common.showLess': 'कम दिखाएं', - 'common.submit': 'सबमिट करें', - 'common.continue': 'जारी रखें', - 'common.comingSoon': 'जल्द आ रहा है', - 'settings.general': 'सामान्य', - 'settings.featuresAndAI': 'फीचर्स और AI', - 'settings.billingAndRewards': 'बिलिंग और रिवॉर्ड', - 'settings.support': 'सपोर्ट', - 'settings.advanced': 'एडवांस्ड', - 'settings.dangerZone': 'डेंजर ज़ोन', - 'settings.account': 'अकाउंट', - 'settings.accountDesc': 'रिकवरी फ्रेज़, टीम, कनेक्शन और प्राइवेसी', - 'settings.notifications': 'नोटिफिकेशन', - 'settings.notificationsDesc': 'डू नॉट डिस्टर्ब और हर अकाउंट के नोटिफिकेशन कंट्रोल', - 'settings.notifications.tabs.preferences': 'प्राथमिकताएँ', - 'settings.notifications.tabs.routing': 'रूटिंग', - 'settings.features': 'फीचर्स', - 'settings.featuresDesc': 'स्क्रीन अवेयरनेस, मैसेजिंग और टूल्स', - 'settings.aiModels': 'AI और मॉडल्स', - 'settings.aiModelsDesc': 'लोकल AI मॉडल सेटअप, डाउनलोड और LLM प्रोवाइडर', - 'settings.ai': 'AI कॉन्फिगरेशन', - 'settings.aiDesc': 'क्लाउड प्रोवाइडर, लोकल Ollama मॉडल और वर्कलोड रूटिंग', - 'settings.billingUsage': 'बिलिंग और उपयोग', - 'settings.billingUsageDesc': 'सब्सक्रिप्शन प्लान, क्रेडिट और पेमेंट तरीके', - 'settings.rewards': 'रिवॉर्ड', - 'settings.rewardsDesc': 'रेफरल, कूपन और कमाए हुए क्रेडिट', - 'settings.restartTour': 'टूर फिर से शुरू करें', - 'settings.restartTourDesc': 'प्रोडक्ट वॉकथ्रू शुरू से देखें', - 'settings.about': 'के बारे में', - 'settings.aboutDesc': 'ऐप वर्जन और सॉफ्टवेयर अपडेट', - 'settings.developerOptions': 'एडवांस्ड', - 'settings.developerOptionsDesc': 'AI कॉन्फिग, मैसेजिंग चैनल, टूल्स, डायग्नोस्टिक्स और डिबग पैनल', - 'settings.clearAppData': 'ऐप डेटा क्लियर करें', - 'settings.clearAppDataDesc': 'साइन आउट करें और सारा लोकल ऐप डेटा हमेशा के लिए मिटाएं', - 'settings.logOut': 'लॉग आउट', - 'settings.logOutDesc': 'अपने अकाउंट से साइन आउट करें', - 'settings.exitLocalSession': 'स्थानीय सत्र से बाहर निकलें', - 'settings.exitLocalSessionDesc': 'साइन-इन स्क्रीन पर वापस लौटें', - 'settings.language': 'भाषा', - 'settings.languageDesc': 'ऐप इंटरफेस की डिस्प्ले भाषा', - 'settings.alerts': 'अलर्ट', - 'settings.alertsDesc': 'हाल के अलर्ट और इनबॉक्स एक्टिविटी देखें', - 'settings.account.recoveryPhrase': 'रिकवरी फ्रेज़', - 'settings.account.recoveryPhraseDesc': 'अपना अकाउंट रिकवरी फ्रेज़ देखें और बैकअप लें', - 'settings.account.team': 'टीम', - 'settings.account.teamDesc': 'टीम मेंबर्स और परमिशन मैनेज करें', - 'settings.account.connections': 'कनेक्शन', - 'settings.account.connectionsDesc': 'लिंक्ड अकाउंट और सर्विसेज़ मैनेज करें', - 'settings.account.privacy': 'प्राइवेसी', - 'settings.account.privacyDesc': 'कंट्रोल करें कि आपके कंप्यूटर से क्या डेटा जाता है', - 'settings.notifications.doNotDisturb': 'डू नॉट डिस्टर्ब', - 'settings.notifications.doNotDisturbDesc': 'तय समय के लिए सभी नोटिफिकेशन रोकें', - 'settings.notifications.channelControls': 'चैनल-वाइज़ कंट्रोल', - 'settings.notifications.channelControlsDesc': 'हर चैनल के लिए नोटिफिकेशन प्रेफरेंस सेट करें', - 'settings.features.screenAwareness': 'स्क्रीन अवेयरनेस', - 'settings.features.screenAwarenessDesc': 'असिस्टेंट को आपकी एक्टिव विंडो देखने दें', - 'settings.features.messaging': 'मैसेजिंग', - 'settings.features.messagingDesc': 'चैनल और मैसेजिंग इंटीग्रेशन सेटिंग्स', - 'settings.features.tools': 'टूल्स', - 'settings.features.toolsDesc': 'कनेक्टेड टूल्स और इंटीग्रेशन मैनेज करें', - 'settings.ai.localSetup': 'लोकल AI सेटअप', - 'settings.ai.localSetupDesc': 'लोकल AI मॉडल डाउनलोड और कॉन्फिगर करें', - 'settings.ai.llmProvider': 'LLM प्रोवाइडर', - 'settings.ai.llmProviderDesc': 'अपना AI प्रोवाइडर चुनें और कॉन्फिगर करें', - 'clearData.title': 'ऐप डेटा क्लियर करें', - 'clearData.warning': - 'इससे आप साइन आउट हो जाएंगे और नीचे दिया गया लोकल डेटा हमेशा के लिए मिट जाएगा:', - 'clearData.bulletSettings': 'ऐप सेटिंग्स और बातचीत', - 'clearData.bulletCache': 'सभी लोकल इंटीग्रेशन कैश डेटा', - 'clearData.bulletWorkspace': 'वर्कस्पेस डेटा', - 'clearData.bulletOther': 'बाकी सभी लोकल डेटा', - 'clearData.irreversible': 'यह कार्रवाई वापस नहीं हो सकती।', - 'clearData.clearing': 'ऐप डेटा क्लियर हो रहा है...', - 'clearData.failed': 'डेटा क्लियर करने और लॉगआउट में दिक्कत आई। दोबारा कोशिश करें।', - 'clearData.failedLogout': 'लॉग आउट नहीं हो पाया। दोबारा कोशिश करें।', - 'clearData.failedPersist': 'सेव्ड ऐप स्टेट क्लियर नहीं हो पाई। दोबारा कोशिश करें।', - 'welcome.title': 'OpenHuman में आपका स्वागत है', - 'welcome.subtitle': 'आपकी पर्सनल AI सुपर इंटेलिजेंस। प्राइवेट, सिंपल और बेहद पावरफुल।', - 'welcome.connectPrompt': 'RPC URL कॉन्फिगर करें (एडवांस्ड)', - 'welcome.selectRuntime': 'एक रनटाइम चुनें', - 'welcome.urlPlaceholder': 'http://localhost:8089', - 'welcome.invalidUrl': 'कृपया एक सही HTTP या HTTPS URL डालें', - 'welcome.connecting': 'टेस्टिंग', - 'welcome.connect': 'टेस्ट करें', - 'home.greeting': 'सुप्रभात', - 'home.greetingAfternoon': 'नमस्ते', - 'home.greetingEvening': 'शुभ संध्या', - 'home.askAssistant': 'असिस्टेंट से कुछ भी पूछें...', - 'home.statusOk': - 'आपका डिवाइस कनेक्टेड है। कनेक्शन बनाए रखने के लिए ऐप चलाते रहें। नीचे बटन से अपने एजेंट को मैसेज करें।', - 'home.statusBackendOnly': 'बैकएंड से फिर से जुड़ रहे हैं… आपका एजेंट जल्द ही उपलब्ध होगा।', - 'home.statusCoreUnreachable': - 'लोकल कोर साइडकार रिस्पॉन्ड नहीं कर रहा। OpenHuman का बैकग्राउंड प्रोसेस क्रैश हो गया होगा या शुरू नहीं हो पाया।', - 'home.statusInternetOffline': - 'आपका डिवाइस अभी ऑफलाइन है। अपना नेटवर्क चेक करें या दोबारा कनेक्ट करने के लिए ऐप रीस्टार्ट करें।', - 'home.restartCore': 'कोर रीस्टार्ट करें', - 'home.restartingCore': 'कोर रीस्टार्ट हो रहा है…', - 'home.themeToggle.toLight': 'लाइट मोड पर स्विच करें', - 'home.themeToggle.toDark': 'डार्क मोड पर स्विच करें', - 'chat.newThread': 'नई थ्रेड', - 'chat.typeMessage': 'मैसेज टाइप करें...', - 'chat.send': 'मैसेज भेजें', - 'chat.thinking': 'सोच रहा है...', - 'chat.noMessages': 'अभी कोई मैसेज नहीं', - 'chat.startConversation': 'बातचीत शुरू करें', - 'chat.regenerate': 'फिर से बनाएं', - 'chat.copyResponse': 'जवाब कॉपी करें', - 'chat.citations': 'सोर्स', - 'chat.toolUsed': 'टूल इस्तेमाल हुआ', - 'scope.legacy': 'लीगेसी', - 'scope.user': 'यूज़र', - 'scope.project': 'प्रोजेक्ट', - 'skills.title': 'कनेक्शन', - 'skills.search': 'कनेक्शन सर्च करें...', - 'skills.noResults': 'कोई कनेक्शन नहीं मिला', - 'skills.connect': 'कनेक्ट करें', - 'skills.disconnect': 'डिसकनेक्ट करें', - 'skills.configure': 'मैनेज करें', - 'skills.connected': 'कनेक्टेड', - 'skills.available': 'उपलब्ध', - 'skills.addAccount': 'अकाउंट जोड़ें', - 'skills.channels': 'चैनल', - 'skills.integrations': 'इंटीग्रेशन', - 'memory.title': 'मेमोरी', - 'memory.search': 'मेमोरी सर्च करें...', - 'memory.noResults': 'कोई मेमोरी नहीं मिली', - 'memory.empty': 'अभी कोई मेमोरी नहीं है। बातचीत के दौरान मेमोरी अपने आप बनती है।', - 'memory.tab.memory': 'मेमोरी', - 'memory.tab.tasks': 'Agent Tasks', - 'memory.tab.tasksDescription': - 'Create and track tasks — your own to-dos plus the boards your agents build across conversations.', - 'memory.tab.subconscious': 'सबकॉन्शस', - 'memory.tab.dreams': 'ड्रीम्स', - 'memory.tab.calls': 'कॉल्स', - 'memory.tab.diagram': 'Diagram', - 'memory.tab.settings': 'सेटिंग्स', - 'memory.analyzeNow': 'अभी एनालाइज़ करें', - 'memoryTree.status.title': 'Memory Tree', - 'memoryTree.status.autoSyncLabel': 'Auto-sync', - 'memoryTree.status.autoSyncDescription': - 'Pause to stop new ingestion. Existing wiki stays queryable.', - 'memoryTree.status.statusTile': 'Status', - 'memoryTree.status.lastSyncTile': 'Last sync', - 'memoryTree.status.totalChunksTile': 'Total chunks', - 'memoryTree.status.wikiSizeTile': 'Wiki size', - 'memoryTree.status.statusRunning': 'Running', - 'memoryTree.status.statusPaused': 'Paused', - 'memoryTree.status.statusSyncing': 'Syncing', - 'memoryTree.status.statusError': 'Error', - 'memoryTree.status.statusIdle': 'Idle', - 'memoryTree.status.never': 'Never', - 'memoryTree.status.fetchError': "Couldn't fetch Memory Tree status", - 'memoryTree.status.retry': 'Retry', - 'memoryTree.status.toggleFailed': "Couldn't toggle auto-sync", - 'memoryTree.status.justNow': 'just now', - 'memoryTree.status.secondsAgo': '{count}s ago', - 'memoryTree.status.minuteAgo': '1 min ago', - 'memoryTree.status.minutesAgo': '{count} min ago', - 'memoryTree.status.hourAgo': '1 hr ago', - 'memoryTree.status.hoursAgo': '{count} hr ago', - 'memoryTree.status.dayAgo': '1 day ago', - 'memoryTree.status.daysAgo': '{count} days ago', - 'alerts.title': 'अलर्ट', - 'alerts.empty': 'अभी कोई अलर्ट नहीं', - 'alerts.markAllRead': 'सभी पढ़ा हुआ मार्क करें', - 'alerts.unread': 'अनरीड', - 'rewards.title': 'रिवॉर्ड', - 'rewards.referrals': 'रेफरल', - 'rewards.coupons': 'रिडीम करें', - 'rewards.credits': 'क्रेडिट', - 'rewards.referralCode': 'आपका रेफरल कोड', - 'rewards.copyCode': 'कोड कॉपी करें', - 'rewards.share': 'शेयर करें', - 'onboarding.welcome': 'नमस्ते। मैं OpenHuman हूँ।', - 'onboarding.welcomeDesc': - 'आपका सुपर-इंटेलिजेंट AI असिस्टेंट जो आपके कंप्यूटर पर चलता है। प्राइवेट, सिंपल और बेहद पावरफुल।', - 'onboarding.context': 'कॉन्टेक्स्ट गैदरिंग', - 'onboarding.contextDesc': 'अपने रोज़ इस्तेमाल के टूल्स और सर्विसेज़ कनेक्ट करें।', - 'onboarding.localAI': 'लोकल AI', - 'onboarding.localAIDesc': 'अपनी मशीन पर चलने वाला लोकल AI मॉडल सेट करें।', - 'onboarding.chatProvider': 'चैट प्रोवाइडर', - 'onboarding.chatProviderDesc': 'चुनें कि असिस्टेंट से कैसे बात करनी है।', - 'onboarding.referral': 'रेफरल', - 'onboarding.referralDesc': 'अगर आपके पास रेफरल कोड है तो लगाएं।', - 'onboarding.finish': 'सेटअप पूरा करें', - 'onboarding.finishDesc': 'सब तैयार है! OpenHuman इस्तेमाल शुरू करें।', - 'onboarding.skip': 'स्किप करें', - 'onboarding.getStarted': 'शुरू करें', - 'onboarding.runtimeChoice.title': 'OpenHuman कैसे चलाना चाहते हैं?', - 'onboarding.runtimeChoice.subtitle': - 'अपने लिए सही सेटअप चुनें। बाद में Settings में बदल सकते हैं।', - 'onboarding.runtimeChoice.cloud.title': 'सिंपल', - 'onboarding.runtimeChoice.cloud.tagline': 'OpenHuman सब कुछ मैनेज करेगा।', - 'onboarding.runtimeChoice.cloud.f1': 'बिल्ट-इन सिक्योरिटी', - 'onboarding.runtimeChoice.cloud.f2': 'ज़्यादा उपयोग के लिए टोकन कम्प्रेशन', - 'onboarding.runtimeChoice.cloud.f3': 'एक सब्सक्रिप्शन, हर मॉडल शामिल', - 'onboarding.runtimeChoice.cloud.f4': 'कोई API keys मैनेज नहीं करनी', - 'onboarding.runtimeChoice.cloud.f5': 'सेटअप बेहद आसान', - 'onboarding.runtimeChoice.custom.title': 'कस्टम रन करें', - 'onboarding.runtimeChoice.custom.tagline': 'अपनी keys लाएं। पूरा कंट्रोल आपके हाथ में।', - 'onboarding.runtimeChoice.custom.f1': 'लगभग हर चीज़ के लिए API keys चाहिए होंगी', - 'onboarding.runtimeChoice.custom.f2': 'जो सर्विसेज़ आप पहले से पे करते हैं उन्हें रियूज़ करता है', - 'onboarding.runtimeChoice.custom.f3': 'सब लोकल चलाएं तो फ्री हो सकता है', - 'onboarding.runtimeChoice.custom.f4': 'ज़्यादा सेटअप, ज़्यादा कंट्रोल', - 'onboarding.runtimeChoice.custom.f5': 'पावर यूज़र्स और डेवलपर्स के लिए बेस्ट', - 'onboarding.runtimeChoice.cloud.creditHighlight': 'ट्राई करने के लिए $1 मुफ्त क्रेडिट', - 'onboarding.runtimeChoice.continueCloud': 'सिंपल के साथ जारी रखें', - 'onboarding.runtimeChoice.continueCustom': 'कस्टम के साथ जारी रखें', - 'onboarding.runtimeChoice.recommended': 'सुझावित', - 'onboarding.apiKeys.title': 'अपनी API Keys जोड़ें', - 'onboarding.apiKeys.subtitle': - 'अभी पेस्ट करें या बाद में Settings › AI में जोड़ें। Keys इस डिवाइस पर एन्क्रिप्टेड रहती हैं।', - 'onboarding.apiKeys.openaiLabel': 'OpenAI API कुंजी', - 'onboarding.apiKeys.openaiPlaceholder': 'sk-...', - 'onboarding.apiKeys.anthropicLabel': 'Anthropic API कुंजी', - 'onboarding.apiKeys.anthropicPlaceholder': 'sk-ant-...', - 'onboarding.apiKeys.saveError': 'वह key सेव नहीं हो पाई। दोबारा चेक करके कोशिश करें।', - 'onboarding.apiKeys.skipForNow': 'अभी के लिए स्किप करें', - 'onboarding.apiKeys.continue': 'सेव करें और जारी रखें', - 'onboarding.apiKeys.saving': 'सेव हो रहा है…', - 'onboarding.custom.stepperInference': 'इनफरेंस', - 'onboarding.custom.stepperVoice': 'वॉइस', - 'onboarding.custom.stepperOAuth': 'OAuth', - 'onboarding.custom.stepperSearch': 'सर्च', - 'onboarding.custom.stepperEmbeddings': 'Embeddings', - 'onboarding.custom.stepperMemory': 'मेमोरी', - 'onboarding.custom.stepCounter': 'स्टेप {n} / {total}', - 'onboarding.custom.defaultTitle': 'डिफ़ॉल्ट', - 'onboarding.custom.defaultSubtitle': 'OpenHuman खुद मैनेज करेगा।', - 'onboarding.custom.configureTitle': 'कॉन्फिगर करें', - 'onboarding.custom.configureSubtitle': 'मैं खुद चुनूँगा।', - 'onboarding.custom.progressAriaLabel': 'ऑनबोर्डिंग प्रोग्रेस', - 'onboarding.custom.continue': 'जारी रखें', - 'onboarding.custom.back': 'वापस', - 'onboarding.custom.finish': 'सेटअप पूरा करें', - 'onboarding.custom.configureLater': - 'ऑनबोर्डिंग के बाद यह सेट कर सकते हैं। हो जाने पर आपको सही Settings पेज पर ले जाएंगे।', - 'onboarding.custom.openSettings': 'Settings में खोलें', - 'onboarding.custom.inference.title': 'इनफरेंस (टेक्स्ट)', - 'onboarding.custom.inference.subtitle': - 'कौन सा लैंग्वेज मॉडल आपके सवाल जवाब देगा और एजेंट चलाएगा?', - 'onboarding.custom.inference.defaultDesc': - 'OpenHuman हर वर्कलोड के लिए खुद सही मॉडल चुनता है। कोई key नहीं, कोई सेटअप नहीं।', - 'onboarding.custom.inference.configureDesc': - 'अपनी OpenAI या Anthropic key लाएं। हर टेक्स्ट वर्कलोड के लिए इस्तेमाल होगी।', - 'onboarding.custom.voice.title': 'वॉइस', - 'onboarding.custom.voice.subtitle': 'वॉइस मोड के लिए स्पीच-टू-टेक्स्ट और टेक्स्ट-टू-स्पीच।', - 'onboarding.custom.voice.defaultDesc': - 'OpenHuman में मैनेज्ड STT/TTS है जो बस काम करता है। कुछ सेट नहीं करना।', - 'onboarding.custom.voice.configureDesc': - 'अपना ElevenLabs / OpenAI Whisper / आदि इस्तेमाल करें। Settings › Voice में कॉन्फिगर करें।', - 'onboarding.custom.oauth.title': 'कनेक्शन (OAuth)', - 'onboarding.custom.oauth.subtitle': 'Gmail, Slack, Notion और OAuth ज़रूरी सर्विसेज़।', - 'onboarding.custom.oauth.defaultDesc': - 'OpenHuman मैनेज्ड Composio वर्कस्पेस चलाता है। हर सर्विस एक क्लिक में कनेक्ट होती है।', - 'onboarding.custom.oauth.configureDesc': - 'अपना Composio अकाउंट / API key लाएं। Settings › Connections में कॉन्फिगर करें।', - 'onboarding.custom.search.title': 'वेब सर्च', - 'onboarding.custom.search.subtitle': 'OpenHuman आपकी तरफ से वेब कैसे सर्च करता है।', - 'onboarding.custom.search.defaultDesc': - 'OpenHuman मैनेज्ड सर्च बैकएंड इस्तेमाल करता है। कोई key नहीं चाहिए।', - 'onboarding.custom.search.configureDesc': - 'अपनी सर्च प्रोवाइडर key लाएं (Tavily, Brave, आदि)। Settings › Tools में कॉन्फिगर करें।', - 'onboarding.custom.embeddings.title': 'Embeddings', - 'onboarding.custom.embeddings.subtitle': - 'How OpenHuman generates vector embeddings for semantic memory search.', - 'onboarding.custom.embeddings.defaultDesc': - 'OpenHuman uses a managed embedding service. No API key needed.', - 'onboarding.custom.embeddings.configureDesc': - 'Bring your own embedding provider (OpenAI, Voyage, Ollama, etc.).', - 'onboarding.custom.memory.title': 'मेमोरी', - 'onboarding.custom.memory.subtitle': - 'OpenHuman आपका कॉन्टेक्स्ट, पसंद और पुरानी बातें कैसे याद रखता है।', - 'onboarding.custom.memory.defaultDesc': - 'OpenHuman मेमोरी स्टोरेज और रिट्रीवल अपने आप मैनेज करता है। कुछ सेट नहीं करना।', - 'onboarding.custom.memory.configureDesc': - 'मेमोरी खुद देखें, एक्सपोर्ट करें या मिटाएं। Settings › Memory में कॉन्फिगर करें।', - 'accounts.addAccount': 'अकाउंट जोड़ें', - 'accounts.manageAccounts': 'अकाउंट मैनेज करें', - 'accounts.noAccounts': 'कोई अकाउंट कनेक्ट नहीं है', - 'accounts.connectAccount': 'शुरू करने के लिए एक अकाउंट कनेक्ट करें', - 'accounts.agent': 'एजेंट', - 'accounts.respondQueue': 'रिस्पॉन्ड क्यू', - 'accounts.disconnect': 'डिसकनेक्ट करें', - 'accounts.disconnectConfirm': 'क्या आप वाकई इस अकाउंट को डिसकनेक्ट करना चाहते हैं?', - 'accounts.disconnectClearMemory': 'Also delete memory from this source', - 'accounts.disconnectClearMemoryHint': - 'Permanently removes local memory chunks linked to this connection.', - 'accounts.searchAccounts': 'अकाउंट सर्च करें...', - 'channels.title': 'चैनल', - 'channels.configure': 'चैनल कॉन्फिगर करें', - 'channels.setup': 'सेटअप', - 'channels.noChannels': 'कोई चैनल कॉन्फिगर नहीं है', - 'channels.addChannel': 'चैनल जोड़ें', - 'channels.status.connected': 'कनेक्टेड', - 'channels.status.disconnected': 'डिसकनेक्टेड', - 'channels.status.error': 'एरर', - 'channels.status.configuring': 'कॉन्फिगर हो रहा है', - 'channels.defaultMessaging': 'डिफ़ॉल्ट मैसेजिंग चैनल', - 'webhooks.title': 'वेबहुक्स', - 'webhooks.create': 'Webhook बनाएं', - 'webhooks.noWebhooks': 'कोई webhook कॉन्फिगर नहीं है', - 'webhooks.url': 'URL', - 'webhooks.secret': 'सीक्रेट', - 'webhooks.events': 'इवेंट्स', - 'webhooks.archiveDirectory': 'आर्काइव डायरेक्टरी', - 'webhooks.todayFile': 'आज की फाइल', - 'invites.title': 'इनवाइट्स', - 'invites.create': 'इनवाइट बनाएं', - 'invites.noInvites': 'कोई पेंडिंग इनवाइट नहीं', - 'invites.code': 'इनवाइट कोड', - 'invites.copyLink': 'लिंक कॉपी करें', - 'devOptions.title': 'एडवांस्ड', - 'devOptions.diagnostics': 'डायग्नोस्टिक्स', - 'devOptions.diagnosticsDesc': 'सिस्टम हेल्थ, लॉग्स और परफॉर्मेंस मेट्रिक्स', - 'devOptions.toolPolicyDiagnosticsDesc': - 'Tool inventory, policy posture, MCP allowlists, and recent blocks', - 'devOptions.toolPolicyDiagnostics.loading': 'Loading…', - 'devOptions.toolPolicyDiagnostics.unavailable': 'Diagnostics unavailable', - 'devOptions.toolPolicyDiagnostics.posture.title': 'Policy posture', - 'devOptions.toolPolicyDiagnostics.posture.autonomy': 'Autonomy:', - 'devOptions.toolPolicyDiagnostics.posture.workspaceOnly': 'Workspace only:', - 'devOptions.toolPolicyDiagnostics.posture.maxActionsPerHour': 'Max actions/hr:', - 'devOptions.toolPolicyDiagnostics.posture.approvalMediumRisk': 'Approval (medium risk):', - 'devOptions.toolPolicyDiagnostics.posture.blockHighRisk': 'Block high risk:', - 'devOptions.toolPolicyDiagnostics.inventory.title': 'Inventory', - 'devOptions.toolPolicyDiagnostics.inventory.totalTools': 'Total tools', - 'devOptions.toolPolicyDiagnostics.inventory.enabledTools': 'Enabled tools', - 'devOptions.toolPolicyDiagnostics.inventory.mcpStdioTools': 'MCP stdio tools', - 'devOptions.toolPolicyDiagnostics.inventory.jsonRpcTools': 'JSON-RPC tools', - 'devOptions.toolPolicyDiagnostics.mcpAllowlists.title': 'MCP allowlists', - 'devOptions.toolPolicyDiagnostics.mcpAllowlists.summary': - 'Enabled: {enabled} · Servers: {enabledCount}/{totalCount}', - 'devOptions.toolPolicyDiagnostics.mcpAllowlists.unnamed': '', - 'devOptions.toolPolicyDiagnostics.mcpAllowlists.allowDeny': 'allow={allowCount} deny={denyCount}', - 'devOptions.toolPolicyDiagnostics.mcpWriteAudit.title': 'MCP write audit', - 'devOptions.toolPolicyDiagnostics.mcpWriteAudit.summary': - 'Enabled: {enabled} · Recent (24h): {recentRows}', - 'devOptions.toolPolicyDiagnostics.recentBlocked.title': 'Recent blocked calls', - 'devOptions.toolPolicyDiagnostics.recentBlocked.empty': 'No blocked calls recorded.', - 'devOptions.toolPolicyDiagnostics.redactedSurfaces.title': 'Redacted surfaces', - 'devOptions.toolPolicyDiagnostics.redactedSurfaces.summary': - 'Write-capable: {writeCount} · Policy surfaces: {policyCount}', - 'devOptions.debugPanels': 'डिबग पैनल', - 'devOptions.debugPanelsDesc': 'फीचर फ्लैग्स, स्टेट इंस्पेक्शन और डिबगिंग टूल्स', - 'devOptions.webhooks': 'वेबहुक्स', - 'devOptions.webhooksDesc': 'Webhook इंटीग्रेशन कॉन्फिगर और टेस्ट करें', - 'devOptions.memoryInspection': 'मेमोरी इंस्पेक्शन', - 'devOptions.memoryInspectionDesc': 'मेमोरी एंट्रीज़ ब्राउज़, क्वेरी और मैनेज करें', - 'voice.pushToTalk': 'पुश टू टॉक', - 'voice.recording': 'रिकॉर्डिंग हो रही है...', - 'voice.processing': 'प्रोसेस हो रहा है...', - 'voice.languageHint': 'भाषा', - 'misc.rehydrating': 'आपका डेटा लोड हो रहा है...', - 'misc.checkingServices': 'सर्विसेज़ चेक हो रही हैं...', - 'misc.serviceUnavailable': 'सर्विस उपलब्ध नहीं है', - 'misc.somethingWentWrong': 'कुछ गड़बड़ हो गई', - 'misc.tryAgainLater': 'कृपया बाद में कोशिश करें।', - 'misc.restartApp': 'ऐप रीस्टार्ट करें', - 'misc.updateAvailable': 'अपडेट उपलब्ध है', - 'misc.updateNow': 'अभी अपडेट करें', - 'misc.updateLater': 'बाद में', - 'misc.downloading': 'डाउनलोड हो रहा है...', - 'misc.installing': 'इन्स्टॉल हो रहा है...', - 'misc.beta': - 'OpenHuman अभी अर्ली बीटा में है। फीडबैक शेयर करें या कोई बग मिले तो रिपोर्ट करें — हर रिपोर्ट हमें तेज़ी से काम करने में मदद करती है।', - 'misc.betaFeedback': 'फीडबैक भेजें', - 'mnemonic.title': 'रिकवरी फ्रेज़', - 'mnemonic.warning': 'इन शब्दों को क्रम में लिखें और किसी सुरक्षित जगह रखें।', - 'mnemonic.copyWarning': - 'रिकवरी फ्रेज़ कभी किसी से शेयर न करें। इन शब्दों से कोई भी आपका अकाउंट एक्सेस कर सकता है।', - 'mnemonic.copied': 'रिकवरी फ्रेज़ क्लिपबोर्ड पर कॉपी हो गया', - 'mnemonic.reveal': 'फ्रेज़ दिखाएं', - 'mnemonic.revealPhrase': 'Reveal recovery phrase', - 'mnemonic.hidden': 'रिकवरी फ्रेज़ छुपी हुई है', - 'privacy.title': 'प्राइवेसी और सिक्योरिटी', - 'privacy.description': 'बाहरी सर्विसेज़ को भेजे गए डेटा की ट्रांसपेरेंसी रिपोर्ट।', - 'privacy.empty': 'कोई बाहरी डेटा ट्रांसफर नहीं मिला।', - 'privacy.whatLeavesComputer': 'आपके कंप्यूटर से क्या जाता है', - 'privacy.loading': 'प्राइवेसी डिटेल्स लोड हो रही हैं...', - 'privacy.loadError': - 'लाइव प्राइवेसी लिस्ट लोड नहीं हो पाई। नीचे के एनालिटिक्स कंट्रोल अभी भी काम करते हैं।', - 'privacy.noCapabilities': 'अभी कोई कैपेबिलिटी डेटा मूवमेंट नहीं दिखा रही।', - 'privacy.sentTo': 'भेजा गया', - 'privacy.leavesDevice': 'डिवाइस से बाहर जाता है', - 'privacy.staysLocal': 'लोकल रहता है', - 'privacy.anonymizedAnalytics': 'अनॉनिमाइज़्ड एनालिटिक्स', - 'privacy.shareAnonymizedData': 'अनॉनिमाइज़्ड यूसेज डेटा शेयर करें', - 'privacy.shareAnonymizedDataDesc': - 'अनॉनिमस क्रैश रिपोर्ट और यूसेज एनालिटिक्स शेयर करके OpenHuman को बेहतर बनाने में मदद करें। सभी डेटा पूरी तरह अनॉनिमाइज़्ड है — कोई पर्सनल डेटा, मैसेज, वॉलेट keys या सेशन जानकारी कभी कलेक्ट नहीं होती।', - 'privacy.meetingFollowUps': 'मीटिंग फॉलो-अप', - 'privacy.autoHandoffMeet': 'Google Meet ट्रांसक्रिप्ट ऑटो-हैंडऑफ ऑर्केस्ट्रेटर को करें', - 'privacy.autoHandoffMeetDesc': - 'Google Meet कॉल खत्म होने पर, OpenHuman का ऑर्केस्ट्रेटर ट्रांसक्रिप्ट पढ़ सकता है और मैसेज ड्राफ्ट करना, फॉलो-अप शेड्यूल करना या Slack पर सारांश पोस्ट करना जैसे काम कर सकता है। डिफ़ॉल्ट रूप से बंद है।', - 'privacy.analyticsDisclaimer': - 'सभी एनालिटिक्स और बग रिपोर्ट पूरी तरह अनॉनिमाइज़्ड हैं। चालू होने पर, हम केवल क्रैश जानकारी, डिवाइस टाइप और एरर फाइल लोकेशन कलेक्ट करते हैं। हम कभी आपके मैसेज, सेशन डेटा, वॉलेट keys, API keys या कोई भी पर्सनल जानकारी एक्सेस नहीं करते। यह सेटिंग कभी भी बदल सकते हैं।', - 'settings.about.version': 'वर्जन', - 'settings.about.updateAvailable': 'उपलब्ध है', - 'settings.about.softwareUpdates': 'सॉफ्टवेयर अपडेट', - 'settings.about.lastChecked': 'आखिरी बार चेक किया', - 'settings.about.checking': 'चेक हो रहा है...', - 'settings.about.checkForUpdates': 'अपडेट चेक करें', - 'settings.about.releases': 'रिलीज़', - 'settings.about.releasesDesc': 'GitHub पर रिलीज़ नोट्स और पुराने बिल्ड देखें।', - 'settings.about.openReleases': 'GitHub रिलीज़ खोलें', - 'settings.ai.overview': 'AI सिस्टम ओवरव्यू', - 'migration.title': 'किसी अन्य असिस्टेंट से इम्पोर्ट करें', - 'migration.description': - 'किसी अन्य लोकल असिस्टेंट से मेमोरी और नोट्स को इस वर्कस्पेस में माइग्रेट करें। पहले Preview से देखें कि क्या बदलेगा, फिर Apply से डेटा कॉपी करें। आपकी मौजूदा मेमोरी पहले बैकअप कर ली जाती है।', - 'migration.vendorLabel': 'सोर्स वेंडर', - 'migration.sourceLabel': 'सोर्स वर्कस्पेस पाथ (वैकल्पिक)', - 'migration.sourcePlaceholder': 'ऑटो-डिटेक्ट के लिए खाली छोड़ें (जैसे ~/.openclaw/workspace)', - 'migration.sourcePlaceholderHermes': 'Leave blank to auto-detect (e.g. ~/.hermes)', - 'migration.sourceHint': - 'खाली होने पर वेंडर के डिफ़ॉल्ट लोकेशन का उपयोग होता है। अगर आपने वर्कस्पेस हटाया है तो स्पष्ट पाथ दें।', - 'migration.previewAction': 'प्रीव्यू', - 'migration.previewRunning': 'प्रीव्यू हो रहा है…', - 'migration.applyAction': 'इम्पोर्ट लागू करें', - 'migration.applyRunning': 'इम्पोर्ट हो रहा है…', - 'migration.applyDisclaimer': - 'उसी सोर्स के सफल Preview के बाद ही Apply अनलॉक होता है। किसी भी इम्पोर्ट से पहले मौजूदा मेमोरी का बैकअप लिया जाता है।', - 'migration.reportTitlePreview': 'प्रीव्यू — अभी कुछ इम्पोर्ट नहीं हुआ', - 'migration.reportTitleApplied': 'इम्पोर्ट पूरा', - 'migration.report.source': 'सोर्स वर्कस्पेस', - 'migration.report.target': 'टार्गेट वर्कस्पेस', - 'migration.report.fromSqlite': 'SQLite (brain.db) से', - 'migration.report.fromMarkdown': 'Markdown से', - 'migration.report.imported': 'इम्पोर्ट हुए', - 'migration.report.skippedUnchanged': 'छोड़े गए (अपरिवर्तित)', - 'migration.report.renamedConflicts': 'टकराव पर नाम बदला', - 'migration.report.warnings': 'चेतावनी', - 'migration.report.previewHint': - 'अभी तक कोई डेटा इम्पोर्ट नहीं हुआ है। कॉपी करने के लिए Apply पर क्लिक करें।', - 'migration.report.appliedHint': - 'इम्पोर्ट की गई एंट्रीज़ अब आपकी मेमोरी में हैं। दोबारा तुलना के लिए Preview फिर से चलाएँ।', - 'migration.confirmImport.singular': - '{count} एंट्री को मौजूदा वर्कस्पेस में इम्पोर्ट करें?\n\nसोर्स: {source}\nटार्गेट: {target}\n\nइम्पोर्ट से पहले मौजूदा मेमोरी का बैकअप लिया जाएगा।', - 'migration.confirmImport.plural': - '{count} एंट्रीज़ को मौजूदा वर्कस्पेस में इम्पोर्ट करें?\n\nसोर्स: {source}\nटार्गेट: {target}\n\nइम्पोर्ट से पहले मौजूदा मेमोरी का बैकअप लिया जाएगा।', - // Settings menu: Appearance + Mascot (#2225) — English stubs; native translations welcome - 'settings.appearance': 'दिखावट', - 'settings.appearanceDesc': 'प्रकाश, अंधेरा, या अपने सिस्टम थीम से मेल चुनें', - 'settings.mascot': 'शुभंकर', - 'settings.mascotDesc': 'ऐप में उपयोग किया जाने वाला शुभंकर रंग चुनें', - 'channels.authMode.managed_dm': 'OpenHuman से लॉगिन करें', - 'channels.authMode.oauth': 'OAuth साइन-इन करें', - 'channels.authMode.bot_token': 'अपने स्वयं के बॉट टोकन का उपयोग करें', - 'channels.authMode.api_key': 'अपनी स्वयं की API कुंजी का उपयोग करें', - 'channels.fieldRequired': '{field} आवश्यक है', - 'channels.mcp.title': 'MCP सर्वर', - 'channels.mcp.description': - 'Browse and manage Model Context Protocol servers that extend the AI with new tools.', - 'skills.integrationsSubtitle': - 'Cloud-based OAuth connections — sign in with your account and Composio brokers the tokens so agents can read and act on your behalf. No API keys to manage.', - 'skills.tabs.composio': 'Composio', - 'skills.tabs.channels': 'चैनल', - 'skills.tabs.mcp': 'MCP सर्वर', - 'skills.mcpComingSoon.title': 'MCP सर्वर', - 'skills.mcpComingSoon.description': - 'MCP server management is coming soon. This tab will be the home for discovering, connecting, and monitoring your MCP server integrations.', - 'settings.about.connection': 'कनेक्शन', - 'settings.about.connectionMode': 'मोड', - 'settings.about.connectionModeLocal': 'स्थानीय', - 'settings.about.connectionModeCloud': 'बादल', - 'settings.about.connectionModeUnset': 'चयनित नहीं', - 'settings.about.serverUrl': 'सर्वर URL', - 'settings.about.serverUrlUnavailable': 'अनुपलब्ध', - 'settings.about.connectionHelperLocal': - 'Spawned in-process by the Tauri shell on app launch. The port is chosen at startup, so this URL changes between launches.', - 'settings.about.connectionHelperCloud': - 'Connected to a remote core. Change this in BootCheck or the cloud mode picker.', - 'settings.heartbeat.title': 'दिल की धड़कन और लूप', - 'settings.heartbeat.desc': 'Control background scheduling cadences and inspect the loop map.', - 'settings.ledgerUsage.title': 'उपयोग बही', - 'settings.ledgerUsage.desc': 'हाल का क्रेडिट खर्च, बजट गणित, और पृष्ठभूमि API बजट पढ़ें।', - 'settings.costDashboard.title': 'Cost dashboard', - 'settings.costDashboard.desc': - '7-day spend and token burn across the swarm, with budget pace and per-model breakdown.', - 'settings.costDashboard.sevenDayCost': '7-day daily cost', - 'settings.costDashboard.sevenDayTokens': '7-day token usage', - 'settings.costDashboard.totalSpend': '7-day total', - 'settings.costDashboard.monthlyPace': 'Monthly pace', - 'settings.costDashboard.budgetLimit': 'Budget limit', - 'settings.costDashboard.utilization': 'Utilisation', - 'settings.costDashboard.modelBreakdown': 'Per-model breakdown', - 'settings.costDashboard.model': 'Model', - 'settings.costDashboard.provider': 'Provider', - 'settings.costDashboard.cost': 'Cost', - 'settings.costDashboard.tokens': 'Tokens', - 'settings.costDashboard.requests': 'Requests', - 'settings.costDashboard.percentOfTotal': '% of total', - 'settings.costDashboard.inputTokens': 'Input', - 'settings.costDashboard.outputTokens': 'Output', - 'settings.costDashboard.budgetNormal': 'On track', - 'settings.costDashboard.budgetWarning': 'Warning', - 'settings.costDashboard.budgetExceeded': 'Over budget', - 'settings.costDashboard.noBudget': 'No limit set', - 'settings.costDashboard.noData': 'No cost recorded yet for the last 7 days.', - 'settings.costDashboard.noModels': 'No model activity in the last 7 days.', - 'settings.costDashboard.loading': 'Loading cost dashboard…', - 'settings.costDashboard.disabledHint': - 'Cost dashboard is disabled in config. Set [cost.dashboard] enabled = true in config.toml to re-enable.', - 'settings.costDashboard.subtitle': - 'Live spend and token burn across the swarm. Bars auto-refresh every few seconds — no page reload needed.', - 'settings.costDashboard.summaryAriaLabel': 'Cost summary metrics', - 'settings.costDashboard.lastSevenDays': 'last 7 days', - 'settings.costDashboard.utilizationOf': 'of', - 'settings.costDashboard.thisMonth': 'this month', - 'settings.costDashboard.monthlyPaceHint': - 'Projected monthly spend at the current daily run-rate (avg × 30).', - 'settings.costDashboard.budgetLimitHint': - 'Monthly budget read from cost.monthly_limit_usd in config.toml.', - 'settings.costDashboard.dailyTarget': 'Daily target', - 'settings.costDashboard.today': 'Today', - 'settings.costDashboard.todayBadge': 'TODAY', - 'settings.costDashboard.unknownProvider': '—', - 'settings.costDashboard.justNow': 'Just now', - 'settings.costDashboard.secondsAgo': '{value}s ago', - 'settings.costDashboard.minutesAgo': '{value}m ago', - 'settings.costDashboard.hoursAgo': '{value}h ago', - 'settings.costDashboard.daysAgo': '{value}d ago', - 'settings.costDashboard.updated': 'Updated', - 'settings.costDashboard.refresh': 'Refresh', - 'settings.costDashboard.utcNote': 'Days bucketed in UTC', - 'settings.costDashboard.stackedNote': 'Input + output stacked', - 'settings.costDashboard.modelBreakdownHint': 'Aggregated across the last 7 days.', - 'settings.costDashboard.noDataHint': - 'Send an agent message — token usage from the next provider call will populate the chart within ~10 seconds.', - 'settings.search.title': 'खोज इंजन', - 'settings.search.menuDesc': - 'Default to OpenHuman-managed search or wire up your own provider with an API key.', - 'settings.search.description': - 'Pick the search engine the agent uses. Managed uses OpenHuman’s backend (no setup). Parallel and Brave run direct from your machine using your API key.', - 'settings.search.engineAria': 'खोज इंजन', - 'settings.search.engineManagedLabel': 'OpenHuman प्रबंधित', - 'settings.search.engineManagedDesc': - 'Default. Routed through the OpenHuman backend — no API key required.', - 'settings.search.engineParallelLabel': 'Parallel', - 'settings.search.engineParallelDesc': - 'Direct Parallel API: search, extract, chat, research, enrich, dataset tools.', - 'settings.search.engineBraveLabel': 'Brave खोजें', - 'settings.search.engineBraveDesc': 'प्रत्यक्ष Brave खोजें API: वेब, समाचार, छवि और वीडियो उपकरण।', - 'settings.search.engineQueritLabel': 'Querit', - 'settings.search.engineQueritDesc': - 'Direct Querit API: web search with site, time range, country, and language filters.', - 'settings.search.statusConfigured': 'विन्यस्त', - 'settings.search.statusNeedsKey': 'API कुंजी की आवश्यकता है', - 'settings.search.fallbackToManaged': - 'No key configured — search will fall back to Managed until a key is saved.', - 'settings.search.getApiKey': 'API कुंजी प्राप्त करें', - 'settings.search.save': 'सहेजें', - 'settings.search.clear': 'स्पष्ट', - 'settings.search.show': 'दिखाओ', - 'settings.search.hide': 'छिपाओ', - 'settings.search.statusSaving': 'सहेजा जा रहा है...', - 'settings.search.statusSaved': 'सहेजा गया.', - 'settings.search.statusError': 'असफल', - 'settings.search.parallelKeyLabel': 'Parallel API कुंजी', - 'settings.search.braveKeyLabel': 'Brave API कुंजी खोजें', - 'settings.search.queritKeyLabel': 'Querit API key', - 'settings.search.placeholderStored': '•••••••• (संग्रहीत)', - 'settings.search.placeholderParallel': 'पीके_...', - 'settings.search.placeholderBrave': 'BSA...', - 'settings.search.placeholderQuerit': 'Querit API key', - 'settings.embeddings.title': 'एम्बेडिंग्स', - 'settings.embeddings.description': - 'चुनें कि कौन सा एम्बेडिंग प्रदाता मेमोरी को सिमेंटिक सर्च के लिए वेक्टर में बदलता है। प्रदाता, मॉडल या आयाम बदलने से संग्रहीत वेक्टर अमान्य हो जाते हैं और पूर्ण मेमरी रीसेट की आवश्यकता होती है।', - 'settings.embeddings.providerAria': 'एम्बेडिंग प्रदाता', - 'settings.embeddings.statusConfigured': 'कॉन्फ़िगर किया गया', - 'settings.embeddings.statusNeedsKey': 'API कुंजी चाहिए', - 'settings.embeddings.apiKeyLabel': '{provider} API कुंजी', - 'settings.embeddings.placeholderStored': '•••••••• (संग्रहीत)', - 'settings.embeddings.placeholderKey': 'अपनी API कुंजी पेस्ट करें…', - 'settings.embeddings.keyStoredEncrypted': - 'आपकी API कुंजी इस डिवाइस पर एन्क्रिप्टेड स्टोर की गई है।', - 'settings.embeddings.show': 'दिखाएँ', - 'settings.embeddings.hide': 'छिपाएँ', - 'settings.embeddings.save': 'सहेजें', - 'settings.embeddings.clear': 'साफ़ करें', - 'settings.embeddings.model': 'मॉडल', - 'settings.embeddings.dimensions': 'आयाम', - 'settings.embeddings.customEndpoint': 'कस्टम एंडपॉइंट', - 'settings.embeddings.customModelPlaceholder': 'मॉडल का नाम', - 'settings.embeddings.customDimsPlaceholder': 'आयाम', - 'settings.embeddings.applyCustom': 'लागू करें', - 'settings.embeddings.testConnection': 'कनेक्शन परीक्षण', - 'settings.embeddings.testing': 'परीक्षण हो रहा है…', - 'settings.embeddings.testSuccess': 'कनेक्ट — {dims} आयाम', - 'settings.embeddings.testFailed': 'विफल: {error}', - 'settings.embeddings.saving': 'सहेजा जा रहा है…', - 'settings.embeddings.saved': 'सहेजा गया।', - 'settings.embeddings.errorPrefix': 'विफल', - 'settings.embeddings.wipeTitle': 'मेमोरी वेक्टर रीसेट करें?', - 'settings.embeddings.wipeBody': - 'एम्बेडिंग प्रदाता, मॉडल या आयाम बदलने से सभी संग्रहीत मेमोरी वेक्टर मिट जाएंगे। पुनर्प्राप्ति फिर से काम करने से पहले मेमोरी को फिर से बनाना होगा। यह पूर्ववत नहीं किया जा सकता।', - 'settings.embeddings.cancel': 'रद्द करें', - 'settings.embeddings.confirmWipe': 'मिटाएँ और लागू करें', - 'settings.embeddings.setupTitle': '{provider} सेटअप', - 'settings.embeddings.saveAndSwitch': 'सहेजें और बदलें', - 'settings.embeddings.optional': 'वैकल्पिक', - 'settings.embeddings.vectorSearchDisabled': - 'Vector search is disabled. Memory recall will use keyword matching and recency only — no semantic ranking.', - 'settings.embeddings.clearKey': 'API कुंजी साफ़ करें', - 'mcp.alphaBadge': 'अल्फ़ा', - 'mcp.alphaBannerText': - 'MCP server support is in early alpha. The Smithery registry, install flow, and tool wiring may misbehave or change shape between releases.', - 'mcp.toolList.noTools': 'कोई उपकरण उपलब्ध नहीं.', - 'mcp.setup.secretDialog.title': 'MCP सेटअप - गुप्त दर्ज करें', - 'mcp.setup.secretDialog.bodyPrefix': 'MCP सेटअप एजेंट की आवश्यकता है', - 'mcp.setup.secretDialog.bodySuffix': - '. Your value is sent directly to the core process and never enters the AI conversation.', - 'mcp.setup.secretDialog.inputLabel': 'मूल्य', - 'mcp.setup.secretDialog.inputPlaceholder': 'यहाँ चिपकाएँ', - 'mcp.setup.secretDialog.show': 'दिखाओ', - 'mcp.setup.secretDialog.hide': 'छिपाओ', - 'mcp.setup.secretDialog.submit': 'सबमिट करें', - 'mcp.setup.secretDialog.cancel': 'रद्द करें', - 'mcp.setup.secretDialog.submitting': 'सबमिट किया जा रहा है...', - 'mcp.setup.secretDialog.errorPrefix': 'सबमिट करने में विफल:', - 'mcp.setup.secretDialog.privacyNote': - 'Stored encrypted in the local MCP secrets table. Never logged or sent to a model.', - 'devices.betaBadge': 'बीटा', - 'devices.betaText': - 'This feature is currently in beta. Pair iOS phones with this OpenHuman to use them as a remote client.', - 'autonomy.title': 'एजेंट की स्वायत्तता', - 'autonomy.maxActionsLabel': 'प्रति घंटे अधिकतम क्रियाएं', - 'autonomy.maxActionsHelp': - 'Maximum tool actions an agent can run per rolling hour. New value applies to your next chat. Cron jobs and channel listeners keep their current limit until you restart OpenHuman.', - 'autonomy.statusSaving': 'सहेजा जा रहा है...', - 'autonomy.statusSaved': 'सहेजा गया.', - 'autonomy.statusFailed': 'असफल', - 'autonomy.unlimitedNote': 'असीमित - दर सीमित करना अक्षम।', - 'autonomy.invalidIntegerMsg': - 'Must be a positive integer (use the Unlimited preset for no limit).', - 'autonomy.presetUnlimited': 'असीमित (डिफ़ॉल्ट)', - 'triggers.toggleFailed': '{action} {trigger} के लिए विफल: {message}', - 'skills.composio.noApiKeyTitle': 'कोई Composio API कुंजी कॉन्फ़िगर नहीं की गई', - 'skills.composio.noApiKeyDescription': - 'Local mode uses your own Composio API key. Open Settings → Advanced → Composio to add one before connecting integrations here.', - 'skills.composio.noApiKeyCta': 'सेटिंग्स में खोलें', - 'rewards.localUnavailable': - 'Local login does not earn rewards, coupons, or referral credit. To earn rewards, log out and continue by signing in with an OpenHuman account.', - 'rewards.localUnavailableCta': 'खाता सेटिंग खोलें', - 'channels.localManagedUnavailable': 'प्रबंधित चैनल स्थानीय उपयोगकर्ताओं के लिए उपलब्ध नहीं हैं.', - 'settings.search.localManagedUnavailable': - 'OpenHuman Managed search is not available for local users. Add your own Parallel, Brave, or Querit API key to enable web search.', - 'devices.comingSoonDescription': - 'Device pairing is coming soon. This page will be the home for pairing iPhones and managing connected devices.', - 'common.breadcrumb': 'ब्रेडक्रंब नेविगेशन', - 'settings.betaBuild': 'बीटा बिल्ड - v{version}', - 'migration.vendor.openclaw': 'OpenClaw', - 'migration.vendor.hermes': 'Hermes Agent', - 'onboarding.apiKeys.openaiOauthHint': - 'आप ChatGPT Plus/Pro सदस्यता या OpenAI API कुंजी में से किसी एक का उपयोग कर सकते हैं — दोनों आवश्यक नहीं हैं।', - 'onboarding.apiKeys.openaiOauthOpening': 'साइन-इन खोल रहा है…', - 'onboarding.apiKeys.finishSignIn': 'ChatGPT साइन-इन पूरा करें', - 'onboarding.apiKeys.orApiKey': 'या API कुंजी', - 'calls.title': 'कॉल', - 'calls.comingSoonBody': 'AI-सहायित कॉल जल्द आ रही हैं। जुड़े रहें।', - 'rewards.referralSection.retry': 'पुनः प्रयास करें', - 'devOptions.sentryDisabled': '(कोई ID नहीं — इस बिल्ड में Sentry अक्षम है)', - 'home.usageExhaustedTitle': 'आपका उपयोग समाप्त हो गया है', - 'home.usageExhaustedBody': - 'आपकी शामिल उपयोग सीमा अभी समाप्त हो चुकी है। अधिक निरंतर क्षमता अनलॉक करने के लिए सदस्यता शुरू करें।', - 'home.usageExhaustedCta': 'सदस्यता शुरू करें', - 'home.routinesCard': 'Your Routines', - 'home.routinesActive': '{count} active', - 'routines.title': 'Your Routines', - 'routines.subtitle': 'Things your assistant does automatically', - 'routines.loading': 'Loading routines…', - 'routines.empty': 'No routines yet', - 'routines.emptyHint': - 'Your assistant can run tasks on a schedule — like morning briefings or daily summaries.', - 'routines.refresh': 'Refresh', - 'routines.nextRun': 'Next run', - 'routines.lastRunSuccess': 'Last run succeeded', - 'routines.lastRunFailed': 'Last run failed', - 'routines.notRunYet': 'Not run yet', - 'routines.runNow': 'Run Now', - 'routines.running': 'Running…', - 'routines.viewHistory': 'View history', - 'routines.loadingHistory': 'Loading…', - 'routines.noHistory': 'No run history yet.', - 'routines.statusSuccess': 'Success', - 'routines.statusError': 'Error', - 'routines.showOutput': 'Show output', - 'routines.hideOutput': 'Hide output', - 'routines.toggleEnabled': 'Enable or disable this routine', - 'routines.typeAgent': 'Agent', - 'routines.typeCommand': 'Command', - 'nav.routines': 'Routines', - 'common.name': 'नाम', - 'settings.ai.disconnectProvider': 'डिस्कनेक्ट करें {label}', - 'settings.ai.connectProviderLabel': 'कनेक्ट करें {label}', - 'settings.ai.defaultLocalEndpoint': 'http://localhost:11434/v1', - 'settings.ai.endpointUrlLabel': 'समापन बिंदु URL', - 'settings.ai.localRuntimeHelper': - 'Where {label} is reachable. Default is localhost; point this at a remote host (for example, http://10.0.0.4:11434/v1) to use a shared instance.', - 'settings.ai.endpointUrlRequired': 'समापन बिंदु URL आवश्यक है.', - 'settings.ai.endpointProtocolRequired': 'समापन बिंदु http:// या https://. से शुरू होना चाहिए', - 'settings.ai.connectProviderDialog': 'कनेक्ट करें {label}', - 'settings.ai.or': 'या', - 'settings.ai.openRouterOauthDescription': - 'Sign in with OpenRouter and import a user-controlled API key using PKCE.', - 'settings.ai.connecting': 'कनेक्ट हो रहा है...', - 'settings.ai.backgroundLoops': 'पृष्ठभूमि लूप', - 'settings.ai.backgroundLoopsDesc': - 'See what runs without a chat message, pause heartbeat work, and inspect recent credit ledger rows.', - 'settings.ai.heartbeatControls': 'दिल की धड़कन नियंत्रित होती है', - 'settings.ai.heartbeatControlsDesc': - 'Defaults off. Enabling starts the loop; disabling aborts the running task.', - 'settings.ai.heartbeatLoop': 'दिल की धड़कन का लूप', - 'settings.ai.heartbeatLoopDesc': - 'Master scheduler for planner + optional subconscious inference.', - 'settings.ai.subconsciousInference': 'अवचेतन अनुमान', - 'settings.ai.subconsciousInferenceDesc': - 'Runs model-backed task/reflection evaluation on heartbeat ticks.', - 'settings.ai.calendarMeetingChecks': 'कैलेंडर मीटिंग की जाँच', - 'settings.ai.calendarMeetingChecksDesc': - 'Calls calendar event list for active Google Calendar connections.', - 'settings.ai.calendarCap': 'कैलेंडर कैप', - 'settings.ai.connectionsPerTick': '{count} कॉन/टिक', - 'settings.ai.meetingLookahead': 'बैठक आगे की ओर देख रही है', - 'settings.ai.minutesShort': '{count} मि', - 'settings.ai.reminderLookahead': 'आगे देखने का अनुस्मारक', - 'settings.ai.cronReminderChecks': 'क्रॉन अनुस्मारक जाँच करता है', - 'settings.ai.cronReminderChecksDesc': 'Scans enabled cron jobs for reminder-like upcoming items.', - 'settings.ai.relevantNotificationChecks': 'प्रासंगिक अधिसूचना जाँच', - 'settings.ai.relevantNotificationChecksDesc': - 'Promotes urgent local notifications into proactive alerts.', - 'settings.ai.externalDelivery': 'बाह्य वितरण', - 'settings.ai.externalDeliveryDesc': - 'Lets heartbeat alerts send proactive messages to external channels.', - 'settings.ai.interval': 'अंतराल', - 'settings.ai.running': 'चल रहा है...', - 'settings.ai.plannerTickNow': 'प्लानर अभी टिक करें', - 'settings.ai.loadingHeartbeatControls': 'दिल की धड़कन नियंत्रण लोड हो रहा है...', - 'settings.ai.heartbeatControlsUnavailable': 'दिल की धड़कन नियंत्रण अनुपलब्ध है.', - 'settings.ai.loopMap': 'लूप मानचित्र', - 'settings.ai.on': 'पर', - 'settings.ai.off': 'बंद', - 'settings.ai.recentUsageLedger': 'हालिया उपयोग खाता बही', - 'settings.ai.recentUsageLedgerDesc': - 'Backend rows expose action/time today; source tags need backend support.', - 'settings.ai.openhumanDefault': 'OpenHuman (डिफ़ॉल्ट)', - 'settings.ai.localModelResolved': 'Ollama · {model}', - 'settings.ai.customRoutingForWorkload': '{label} के लिए कस्टम रूटिंग', - 'settings.ai.loadingModels': 'मॉडल लोड हो रहे हैं...', - 'settings.ai.enterModelIdManually': 'या मैन्युअल रूप से मॉडल आईडी दर्ज करें:', - 'settings.ai.modelIdPlaceholderForProvider': '{slug} मॉडल आईडी', - 'settings.ai.modelIdPlaceholder': 'model-id', - 'settings.ai.selectModel': 'एक मॉडल चुनें...', - 'settings.ai.temperatureOverride': 'तापमान ओवरराइड', - 'settings.ai.temperatureOverrideSlider': 'तापमान ओवरराइड (स्लाइडर)', - 'settings.ai.temperatureOverrideValue': 'तापमान ओवरराइड (मान)', - 'settings.ai.temperatureOverrideDesc': - 'Lower = more deterministic. Leave unchecked to use the provider default.', - 'settings.ai.testFailed': 'परीक्षण विफल रहा', - 'settings.ai.testingModel': 'परीक्षण मॉडल...', - 'settings.ai.modelResponse': 'मॉडल प्रतिक्रिया', - 'settings.ai.providerWithValue': 'प्रदाता: {value}', - 'settings.ai.noneDash': '—', - 'settings.ai.promptHelloWorld': 'संकेत: नमस्ते विश्व', - 'settings.ai.startedAt': 'प्रारंभ: {value}', - 'settings.ai.waitingForModelResponse': 'चयनित मॉडल से प्रतिक्रिया की प्रतीक्षा है...', - 'settings.ai.response': 'प्रतिक्रिया', - 'settings.ai.testing': 'परीक्षण...', - 'settings.ai.test': 'परीक्षण', - 'settings.ai.slugMissingError': 'स्लग उत्पन्न करने के लिए प्रदाता का नाम दर्ज करें।', - 'settings.ai.slugInUseError': 'वह प्रदाता नाम पहले से ही उपयोग में है.', - 'settings.ai.slugReservedError': 'कोई भिन्न प्रदाता नाम चुनें.', - 'settings.ai.providerNamePlaceholder': 'मेरा प्रदाता', - 'settings.ai.slugLabel': 'स्लग:', - 'settings.ai.openAiUrlLabel': 'OpenAI URL', - 'settings.ai.openAiUrlPlaceholder': 'https://api.openai.com/v1', - 'settings.ai.keepExistingKeyPlaceholder': 'मौजूदा कुंजी रखने के लिए खाली छोड़ दें', - 'settings.ai.reindexingMemory': 'स्मृति को पुनः अनुक्रमित करना', - 'settings.ai.reindexingMemoryMessage': - 'Embeddings are being reprocessed. {pending} memory item(s) are being re-embedded under the current model — semantic recall is reduced until this finishes. Keyword search keeps working, and re-embedding continues in the background if you close this.', - 'settings.ai.signInWithOpenRouter': 'OpenRouter से साइन इन करें', - 'settings.ai.weekBudget': 'सप्ताह का बजट', - 'settings.ai.cycleRemaining': 'चक्र शेष है', - 'settings.ai.cycleTotalSpend': 'चक्र कुल खर्च', - 'settings.ai.avgSpendRow': 'औसत व्यय पंक्ति', - 'settings.ai.backgroundApiReads': 'बीजी API पढ़ता है', - 'settings.ai.backgroundWakeups': 'बीजी वेकअप', - 'settings.ai.budgetMath': 'बजट गणित', - 'settings.ai.rowsLeft': 'पंक्तियाँ शेष हैं', - 'settings.ai.rowsPerFullWeekBudget': 'पूरे सप्ताह के बजट के अनुसार पंक्तियाँ', - 'settings.ai.sampleBurnRate': 'नमूना जलने की दर', - 'settings.ai.projectedEmpty': 'खाली प्रक्षेपित किया गया', - 'settings.ai.apiReadsPerDollarRemaining': 'API प्रति $ शेष पढ़ता है', - 'settings.ai.loopCallBudget': 'लूप कॉल बजट', - 'settings.ai.heartbeatTicks': 'दिल की धड़कन टिक-टिक करती है', - 'settings.ai.calendarPlannerCalls': 'कैलेंडर योजनाकार कॉल करता है', - 'settings.ai.calendarFanoutCap': 'कैलेंडर फैनआउट कैप', - 'settings.ai.subconsciousModelCalls': 'अवचेतन मॉडल कॉल', - 'settings.ai.composioSyncScans': 'Composio सिंक स्कैन', - 'settings.ai.totalBackgroundApiReadBudget': 'कुल बीजी API बजट पढ़ें', - 'settings.ai.memoryWorkerPolls': 'स्मृति कार्यकर्ता सर्वेक्षण', - 'settings.ai.defaultProviderName': 'OpenHuman', - 'settings.ai.routing.managed': 'प्रबंधित', - 'settings.ai.routing.managedDesc': - 'OpenHuman will run all inference in the cloud, choose the best model for the task, optimize for cost, and keep the safest routing defaults.', - 'settings.ai.routing.managedMsg': - 'OpenHuman will handle all inference for every workload and automatically choose the best route for cost, quality, and security.', - 'settings.ai.routing.useYourOwn': 'अपने खुद के मॉडल का प्रयोग करें', - 'settings.ai.routing.useYourOwnDesc': - 'Choose one provider + model and route every workload through it. This is simple, but it can be inefficient because lightweight and heavyweight inference all share the same route.', - 'settings.ai.routing.advanced': 'उन्नत', - 'settings.ai.routing.advancedDesc': - 'Pick different models for different tasks. This is the best option for tight cost optimization and the most control.', - 'settings.ai.routing.customDesc': - 'Fine-grained routing gives you the best cost optimization and the most control. Use the rows below to decide which workloads stay Managed, which use your shared default, and which pin to a specific model.', - 'settings.ai.routing.chatAndConversations': 'चैट और बातचीत', - 'settings.ai.routing.chatDesc': - 'Models used during direct user interaction, replies, reasoning, agent loops, and coding help.', - 'settings.ai.routing.backgroundTasks': 'पृष्ठभूमि कार्य', - 'settings.ai.routing.bgTasksDesc': - 'Models used outside the main conversation flow for summarization, heartbeat, learning, and subconscious evaluation.', - 'settings.ai.routing.addCustomProvider': 'कस्टम प्रदाता जोड़ें', - 'settings.ai.globalModel.title': 'हर चीज़ के लिए एक मॉडल चुनें', - 'settings.ai.globalModel.desc': - 'This routes all inference through one model. It is simpler, but it can be inefficient for cost and quality because lightweight and heavy tasks will all use the same route.', - 'settings.ai.globalModel.noProviders': - 'Add or connect a provider first. Then you can route every workload through one model here.', - 'settings.ai.globalModel.provider': 'प्रदाता', - 'settings.ai.globalModel.model': 'मॉडल', - 'settings.ai.globalModel.loadingModels': 'मॉडल लोड हो रहे हैं…', - 'settings.ai.globalModel.enterModelId': 'मॉडल आईडी दर्ज करें', - 'settings.ai.globalModel.appliesToAll': - 'Applies the same provider + model to chat, reasoning, coding, memory, heartbeat, learning, and subconscious. Embeddings are configured separately. Changes save when you click save.', - 'settings.ai.globalModel.saving': 'सहेजा जा रहा है...', - 'settings.ai.globalModel.saved': 'सहेजा गया', - 'settings.ai.workload.noModel': 'कोई मॉडल चयनित नहीं', - 'settings.ai.workload.changeModel': 'मॉडल बदलें', - 'settings.ai.workload.chooseModel': 'मॉडल चुनें', - 'settings.ai.provider.ollama': 'Ollama', - 'kbd.ariaLabel': 'कीबोर्ड शॉर्टकट: {shortcut}', - 'chat.modelPlaceholder': 'gpt-4o', - 'iosPair.title': 'अपने डेस्कटॉप के साथ युग्मित करें', - 'iosPair.instructions': - 'Open OpenHuman on your desktop, go to Settings > Devices, and tap "Pair phone" to show the QR code.', - 'iosPair.scanQrCode': 'स्कैन QR code', - 'iosPair.scannerOpening': 'स्कैनर खुल रहा है...', - 'iosPair.connecting': 'डेस्कटॉप से कनेक्ट हो रहा है...', - 'iosPair.connectedLoading': 'जुड़ा हुआ! लोड हो रहा है...', - 'iosPair.expired': 'QR code समाप्त हो गया. डेस्कटॉप से ​​कोड पुनः जनरेट करने के लिए कहें।', - 'iosPair.desktopLabel': 'डेस्कटॉप', - 'iosPair.retryScan': 'पुनः स्कैन करने का प्रयास करें', - 'iosPair.step.openDesktop': 'डेस्कटॉप पर OpenHuman खोलें', - 'iosPair.step.openSettings': 'सेटिंग्स > डिवाइसेस पर जाएँ', - 'iosPair.step.showQr': 'QR दिखाने के लिए "फ़ोन जोड़ें" पर टैप करें', - 'iosPair.error.camera': 'कैमरा स्कैन विफल रहा. कैमरा अनुमतियाँ जाँचें और पुनः प्रयास करें।', - 'iosPair.error.invalidQr': - 'Invalid QR code. Make sure you are scanning an OpenHuman pairing code.', - 'iosPair.error.unreachableDesktop': - 'Could not reach the desktop. Make sure both devices are online and try again.', - 'iosPair.error.connectionFailed': - 'Connection failed. Make sure the desktop app is running and try again.', - 'iosMascot.defaultPairedLabel': 'डेस्कटॉप', - 'iosMascot.connectedTo': 'से जुड़ा हुआ है', - 'iosMascot.disconnect': 'डिस्कनेक्ट करें', - 'iosMascot.pushToTalk': 'बात करने के लिए दबाव डालें', - 'iosMascot.thinking': 'सोच रहा हूँ...', - 'iosMascot.typeMessage': 'एक संदेश टाइप करें...', - 'iosMascot.sendMessage': 'संदेश भेजें', - 'iosMascot.error.generic': 'कुछ ग़लत हो गया. कृपया पुन: प्रयास करें।', - 'iosMascot.error.sendFailed': 'भेजने में विफल. अपना कनेक्शन जांचें.', - 'settings.companion.title': 'डेस्कटॉप साथी', - 'settings.companion.session': 'सत्र', - 'settings.companion.activeLabel': 'सक्रिय', - 'settings.companion.inactiveStatus': 'निष्क्रिय', - 'settings.companion.stopping': 'रुक रहा हूँ...', - 'settings.companion.stopSession': 'सत्र रोकें', - 'settings.companion.starting': 'शुरू हो रहा है...', - 'settings.companion.startSession': 'सत्र प्रारंभ करें', - 'settings.companion.sessionId': 'सत्र आईडी', - 'settings.companion.turns': 'बदल जाता है', - 'settings.companion.remaining': 'शेष', - 'settings.companion.configuration': 'विन्यास', - 'settings.companion.hotkey': 'हॉटकी', - 'settings.companion.activationMode': 'सक्रियण मोड', - 'settings.companion.sessionTtl': 'सत्र टीटीएल', - 'settings.companion.screenCapture': 'स्क्रीन कैप्चर', - 'settings.companion.appContext': 'ऐप संदर्भ', - 'settings.composio.title': 'Composio', - 'settings.composio.apiKeyExamplePlaceholder': 'ck_live_xxxxxxxxxxxxxxxx', - 'composio.integrationSlugsHelp': 'अल्पविराम से अलग किए गए एकीकरण स्लग, उदा.', - 'composio.integrationSlugsExample': 'जीमेल, सुस्त', - 'composio.integrationSlugsCaseInsensitive': 'केस-असंवेदनशील.', - 'composio.integrationSlugsPlaceholder': 'जीमेल, स्लैक, ...', - 'team.members': 'सदस्य', - 'team.membersDesc': 'टीम के सदस्यों और भूमिकाओं को प्रबंधित करें', - 'team.invites': 'आमंत्रित करता है', - 'team.invitesDesc': 'आमंत्रण कोड बनाएं और प्रबंधित करें', - 'team.settings': 'टीम सेटिंग्स', - 'team.settingsDesc': 'टीम का नाम और सेटिंग संपादित करें', - 'team.editSettings': 'टीम सेटिंग संपादित करें', - 'team.enterName': 'टीम का नाम दर्ज करें', - 'team.saving': 'सहेजा जा रहा है...', - 'team.saveChanges': 'परिवर्तन सहेजें', - 'team.delete': 'टीम हटाएँ', - 'team.deleteDesc': 'इस टीम को स्थायी रूप से हटा दें', - 'team.deleting': 'हटाया जा रहा है...', - 'team.failedToUpdate': 'टीम को अद्यतन करने में विफल', - 'team.failedToDelete': 'टीम को हटाने में विफल', - 'team.manageTitle': '{name} प्रबंधित करें', - 'team.planCreated': '{plan} योजना • बनाई गई {date}', - 'team.confirmDelete': 'क्या आप वाकई {name} को हटाना चाहते हैं?', - 'team.deleteWarning': 'This action cannot be undone. All team data will be permanently removed.', - 'welcome.clearingAppData': 'ऐप डेटा साफ़ किया जा रहा है...', - 'welcome.clearAppDataAndRestart': 'ऐप डेटा साफ़ करें और पुनरारंभ करें', - 'welcome.clearAppDataWarning': - 'This wipes locally stored secrets and accounts on this device. Your cloud account is unaffected - you can sign in again right after.', - 'welcome.resetErrorFallback': - 'Could not clear app data. Please quit and reopen OpenHuman, then try again.', - 'welcome.signingIn': 'आपको साइन इन किया जा रहा है...', - 'welcome.termsIntro': 'जारी रखकर, आप इससे सहमत हैं', - 'welcome.termsOfUse': 'शर्तें', - 'welcome.termsJoiner': 'और', - 'welcome.privacyPolicy': 'गोपनीयता नीति', - 'welcome.termsOutro': '.', - 'chat.addReaction': 'प्रतिक्रिया जोड़ें', - 'chat.agentProfile.create': 'एजेंट प्रोफ़ाइल बनाएं', - 'chat.agentProfile.createFailed': 'एजेंट प्रोफ़ाइल नहीं बनाई जा सकी.', - 'chat.agentProfile.customDescription': 'कस्टम एजेंट प्रोफ़ाइल', - 'chat.agentProfile.defaultAgentLabel': 'ऑर्केस्ट्रेटर', - 'chat.agentProfile.exists': 'एजेंट प्रोफ़ाइल "{name}" पहले से मौजूद है।', - 'chat.agentProfile.label': 'एजेंट प्रोफ़ाइल', - 'chat.agentProfile.namePlaceholder': 'प्रोफ़ाइल नाम', - 'chat.agentProfile.promptStylePlaceholder': 'शीघ्र शैली', - 'chat.agentProfile.allowedToolsPlaceholder': 'अनुमत उपकरण', - 'chat.backToThread': '{title} पर वापस', - 'chat.parentThread': 'मूल सूत्र', - 'chat.removeReaction': '{emoji} हटाएं', - 'invites.generate': 'आमंत्रण जनरेट करें', - 'invites.generating': 'उत्पन्न हो रहा है...', - 'invites.refreshing': 'ताज़ा आमंत्रण...', - 'invites.loading': 'आमंत्रण लोड हो रहे हैं...', - 'invites.copyCodeAria': 'आमंत्रण कोड कॉपी करें', - 'invites.revokeAria': 'आमंत्रण रद्द करें', - 'invites.usedUp': 'उपयोग किया गया', - 'invites.uses': 'उपयोग: {current}{max}', - 'invites.expiresOn': 'समाप्त {date}', - 'invites.empty': 'अभी तक कोई निमंत्रण नहीं', - 'invites.emptyHint': 'दूसरों के साथ साझा करने के लिए एक आमंत्रण कोड जनरेट करें', - 'invites.revokeTitle': 'आमंत्रण कोड निरस्त करें', - 'invites.revokePromptPrefix': 'क्या आप वाकई आमंत्रण कोड रद्द करना चाहते हैं?', - 'invites.revokeWarning': - 'This invite code will no longer be valid and cannot be used to join the team.', - 'invites.revoking': 'निरस्त किया जा रहा है...', - 'invites.revokeAction': 'आमंत्रण निरस्त करें', - 'invites.failedGenerate': 'आमंत्रण जनरेट करने में विफल', - 'invites.failedRevoke': 'आमंत्रण रद्द करने में विफल', - 'team.refreshingMembers': 'सदस्यों को ताज़ा किया जा रहा है...', - 'team.loadingMembers': 'सदस्य लोड हो रहे हैं...', - 'team.memberCount': '{count} सदस्य', - 'team.memberCountPlural': '{count} सदस्य', - 'team.you': '(आप)', - 'team.removeAria': '{name} हटाएं', - 'team.noMembers': 'कोई सदस्य नहीं मिला', - 'team.removeTitle': 'टीम सदस्य को हटाएँ', - 'team.removePromptPrefix': 'क्या आप वाकई हटाना चाहते हैं', - 'team.removePromptSuffix': 'टीम से?', - 'team.removeWarning': 'वे टीम और सभी टीम संसाधनों तक पहुंच खो देंगे।', - 'team.removing': 'हटाया जा रहा है...', - 'team.removeAction': 'सदस्य हटाएँ', - 'team.changeRoleTitle': 'सदस्य भूमिका बदलें', - 'team.changeRolePrompt': "Change {name}'s role from {oldRole} to {newRole}?", - 'team.changeRoleAdminGrant': - 'This will grant them full admin permissions including the ability to manage team members.', - 'team.changeRoleAdminRemove': - 'This will remove their admin permissions and they will no longer be able to manage the team.', - 'team.changing': 'बदल रहा है...', - 'team.changeRoleAction': 'भूमिका बदलें', - 'team.failedChangeRole': 'भूमिका बदलने में विफल', - 'team.failedRemoveMember': 'सदस्य को हटाने में विफल', - 'voice.failedToLoadSettings': 'ध्वनि सेटिंग लोड करने में विफल', - 'voice.failedToSaveSettings': 'ध्वनि सेटिंग सहेजने में विफल', - 'voice.failedToStartServer': 'वॉइस सर्वर प्रारंभ करने में विफल', - 'voice.failedToStopServer': 'वॉइस सर्वर को रोकने में विफल', - 'voice.sttDisabledPrefix': - 'Voice dictation is disabled until the local STT model is downloaded. Use the', - 'voice.sttDisabledSuffix': 'व्हिस्पर स्थापित करने के लिए उपरोक्त अनुभाग।', - 'voice.debug.failedToLoadVoiceDebugData': 'ध्वनि डिबग डेटा लोड करने में विफल', - 'voice.debug.settingsSaved': 'डीबग सेटिंग सहेजी गईं.', - 'voice.debug.failedToSaveSettings': 'ध्वनि सेटिंग सहेजने में विफल', - 'voice.debug.runtimeStatus': 'रनटाइम स्थिति', - 'voice.debug.runtimeStatusDesc': - 'Live diagnostics for the voice server and speech-to-text engine.', - 'voice.debug.server': 'सर्वर', - 'voice.debug.unavailable': 'अनुपलब्ध', - 'voice.debug.ready': 'तैयार', - 'voice.debug.notReady': 'तैयार नहीं', - 'voice.debug.hotkey': 'हॉटकी', - 'voice.debug.notAvailable': 'एन/ए', - 'voice.debug.mode': 'मोड', - 'voice.debug.transcriptions': 'प्रतिलेखन', - 'voice.debug.serverError': 'सर्वर त्रुटि', - 'voice.debug.advancedSettings': 'उन्नत सेटिंग्स', - 'voice.debug.advancedSettingsDesc': - 'Low-level tuning parameters for recording and silence detection.', - 'voice.debug.minimumRecordingSeconds': 'न्यूनतम रिकॉर्डिंग सेकंड', - 'voice.debug.silenceThreshold': 'साइलेंस थ्रेशोल्ड (आरएमएस)', - 'voice.debug.silenceThresholdDesc': - 'Recordings with energy below this are treated as silence and skipped. Lower = more sensitive.', - 'voice.providers.saved': 'ध्वनि प्रदाता सहेजे गए.', - 'voice.providers.failedToSave': 'ध्वनि प्रदाताओं को सहेजने में विफल', - 'voice.providers.ellipsis': '…', - 'voice.providers.installing': 'स्थापित करना', - 'voice.providers.installingBusy': 'इंस्टाल किया जा रहा है...', - 'voice.providers.reinstallLocally': 'स्थानीय रूप से पुनः स्थापित करें', - 'voice.providers.repair': 'मरम्मत', - 'voice.providers.retryLocally': 'स्थानीय स्तर पर पुनः प्रयास करें', - 'voice.providers.installLocally': 'स्थानीय रूप से स्थापित करें', - 'voice.providers.whisperReady': 'व्हिस्पर तैयार है.', - 'voice.providers.whisperInstallStarted': 'व्हिस्पर इंस्टॉल प्रारंभ हुआ', - 'voice.providers.queued': 'पंक्तिबद्ध', - 'voice.providers.failedToInstallWhisper': 'व्हिस्पर स्थापित करने में विफल', - 'voice.providers.piperReady': 'पाइपर तैयार है.', - 'voice.providers.piperInstallStarted': 'पाइपर स्थापित करना प्रारंभ हो गया', - 'voice.providers.failedToInstallPiper': 'पाइपर स्थापित करने में विफल', - 'voice.providers.title': 'आवाज प्रदाता', - 'voice.providers.desc': - 'Choose where transcription and synthesis run. Use the Install locally buttons to download the binaries and models into your workspace. Local providers can be saved before the install finishes — no manual WHISPER_BIN or PIPER_BIN setup required.', - 'voice.providers.sttProvider': 'वाक्-से-पाठ प्रदाता', - 'voice.providers.sttProviderAria': 'एसटीटी प्रदाता', - 'voice.providers.cloudWhisperProxy': 'बादल (कानाफूसी प्रॉक्सी)', - 'voice.providers.localWhisper': 'स्थानीय कानाफूसी', - 'voice.providers.installRequired': ' (इंस्टॉल आवश्यक)', - 'voice.providers.whisperInstalledTitle': 'Whisper is installed. Click to reinstall.', - 'voice.providers.whisperDownloadTitle': - 'Download whisper.cpp and the GGML model into your workspace.', - 'voice.providers.installed': 'स्थापित', - 'voice.providers.installFailed': 'इंस्टॉल विफल', - 'voice.providers.notInstalled': 'स्थापित नहीं', - 'voice.providers.whisperModel': 'व्हिस्पर मॉडल', - 'voice.providers.whisperModelAria': 'कानाफूसी मॉडल', - 'voice.providers.whisperModelTiny': 'छोटा (39 एमबी, सबसे तेज़)', - 'voice.providers.whisperModelBase': 'आधार (74 एमबी)', - 'voice.providers.whisperModelSmall': 'छोटा (244 एमबी)', - 'voice.providers.whisperModelMedium': 'मध्यम (769 एमबी, अनुशंसित)', - 'voice.providers.whisperModelLargeTurbo': 'बड़ा v3 टर्बो (1.5 जीबी, सर्वोत्तम सटीकता)', - 'voice.providers.ttsProvider': 'पाठ से वाक् प्रदाता', - 'voice.providers.ttsProviderAria': 'टीटीएस प्रदाता', - 'voice.providers.cloudElevenLabsProxy': 'क्लाउड (इलेवनलैब्स प्रॉक्सी)', - 'voice.providers.localPiper': 'स्थानीय पाइपर', - 'voice.providers.piperInstalledTitle': 'पाइपर लगा हुआ है. पुनः स्थापित करने के लिए क्लिक करें.', - 'voice.providers.piperDownloadTitle': - 'Download Piper and the bundled en_US-lessac-medium voice into your workspace.', - 'voice.providers.piperVoice': 'पाइपर आवाज', - 'voice.providers.piperVoiceAria': 'पाइपर आवाज', - 'voice.providers.customVoiceOption': 'अन्य (नीचे टाइप करें)…', - 'voice.providers.customVoiceAria': 'पाइपर वॉयस आईडी (कस्टम)', - 'voice.providers.customVoicePlaceholder': 'en_US-lessac-मध्यम', - 'voice.providers.piperVoicesDesc': - 'Voices come from huggingface.co/rhasspy/piper-voices. Switching voices may require an Install/Reinstall click to download the new .onnx.', - 'voice.providers.mascotVoice': 'शुभंकर आवाज', - 'voice.providers.mascotVoiceDescPrefix': - 'The ElevenLabs voice the mascot uses for spoken replies is configured under', - 'voice.providers.mascotSettings': 'शुभंकर सेटिंग', - 'voice.providers.mascotVoiceDescSuffix': '.', - 'voice.providers.hotkeyPlaceholder': 'एफ.एन', - 'voice.providers.piperPreset.lessacMedium': 'यूएस · लेसैक (तटस्थ, अनुशंसित)', - 'voice.providers.piperPreset.lessacHigh': 'यूएस · लेसैक (उच्च गुणवत्ता, बड़ा)', - 'voice.providers.piperPreset.ryanMedium': 'यूएस · रयान (पुरुष)', - 'voice.providers.piperPreset.amyMedium': 'यूएस · एमी (महिला)', - 'voice.providers.piperPreset.librittsHigh': 'यूएस · लिब्रिटीटीएस (मल्टी-स्पीकर)', - 'voice.providers.piperPreset.alanMedium': 'जीबी · एलन (पुरुष)', - 'voice.providers.piperPreset.jennyDiocoMedium': 'जीबी · जेनी डिओको (महिला)', - 'voice.providers.piperPreset.northernEnglishMaleMedium': 'जीबी · उत्तरी अंग्रेजी (पुरुष)', - 'voice.providers.chip.cloud': 'OpenHuman (Managed)', - 'voice.providers.chip.cloudAria': 'OpenHuman managed provider is always enabled', - 'voice.providers.chip.whisper': 'Whisper (Local)', - 'voice.providers.chip.enableWhisper': 'Enable local Whisper STT', - 'voice.providers.chip.disableWhisper': 'Disable local Whisper STT', - 'voice.providers.chip.piper': 'Piper (Local)', - 'voice.providers.chip.enablePiper': 'Enable local Piper TTS', - 'voice.providers.chip.disablePiper': 'Disable local Piper TTS', - 'voice.providers.chip.enableProvider': 'Enable', - 'voice.providers.chip.disableProvider': 'Disable', - 'voice.providers.chip.apiKeyLabel': 'API Key', - 'voice.providers.chip.apiKeyPlaceholder': 'sk-…', - 'voice.providers.chip.comingSoon': 'coming soon', - 'voice.modal.title': 'Configure', - 'voice.modal.desc': - 'Enter your API key to enable this provider. You can test the connection before saving.', - 'voice.modal.testKey': 'Test Key', - 'voice.modal.testing': 'Testing…', - 'voice.modal.saveAndEnable': 'Save & Enable', - 'voice.modal.enable': 'Enable', - 'voice.modal.whisperDesc': - 'Choose a model size and install the Whisper binary and GGML model into your workspace. Larger models are more accurate but slower.', - 'voice.modal.piperDesc': - 'Choose a voice and install the Piper binary and ONNX model into your workspace. Piper runs fully offline with low latency.', - 'voice.routing.title': 'Voice Routing', - 'voice.routing.desc': 'Choose which enabled providers handle speech-to-text and text-to-speech.', - 'voice.routing.save': 'Save', - 'voice.routing.testStt': 'Test STT', - 'voice.routing.testTts': 'Test TTS', - 'voice.routing.elevenlabsVoice': 'ElevenLabs Voice', - 'voice.routing.elevenlabsVoiceAria': 'ElevenLabs voice selection', - 'voice.routing.elevenlabsVoiceIdAria': 'ElevenLabs voice ID (custom)', - 'voice.routing.elevenlabsVoiceDesc': - 'Pick a curated voice or paste a custom voice ID from your ElevenLabs dashboard.', - 'voice.externalProviders.title': 'External Voice Providers', - 'voice.externalProviders.desc': - 'Connect third-party STT/TTS APIs like Deepgram, ElevenLabs, or OpenAI directly.', - 'voice.externalProviders.keySet': 'Key set', - 'voice.externalProviders.noKey': 'No API key', - 'voice.externalProviders.test': 'Test', - 'voice.externalProviders.testing': 'Testing…', - 'voice.externalProviders.remove': 'Remove', - 'voice.externalProviders.provider': 'Provider', - 'voice.externalProviders.selectProvider': 'Select a provider…', - 'voice.externalProviders.apiKey': 'API Key', - 'voice.externalProviders.apiKeyPlaceholder': 'sk-…', - 'voice.externalProviders.add': 'Add', - 'screenAwareness.debug.debugAndDiagnostics': 'डिबग और डायग्नोस्टिक्स', - 'screenAwareness.debug.collapse': 'पतन', - 'screenAwareness.debug.expand': 'विस्तार करें', - 'screenAwareness.debug.failedToSave': 'स्क्रीन इंटेलिजेंस सहेजने में विफल', - 'screenAwareness.debug.policyTitle': 'स्क्रीन इंटेलिजेंस नीति', - 'screenAwareness.debug.baselineFps': 'बेसलाइन एफपीएस', - 'screenAwareness.debug.useVisionModel': 'विज़न मॉडल का उपयोग करें', - 'screenAwareness.debug.useVisionModelDesc': - 'Send screenshots to a vision LLM for richer context. When off, only OCR text is used with a text LLM — faster and no vision model required.', - 'screenAwareness.debug.keepScreenshots': 'स्क्रीनशॉट रखें', - 'screenAwareness.debug.keepScreenshotsDesc': - 'Save captured screenshots to the workspace instead of deleting after processing', - 'screenAwareness.debug.allowlist': 'अनुमति सूची (प्रति पंक्ति एक नियम)', - 'screenAwareness.debug.denylist': 'अस्वीकृत सूची (प्रति पंक्ति एक नियम)', - 'screenAwareness.debug.saveSettings': 'स्क्रीन इंटेलिजेंस सेटिंग्स सहेजें', - 'screenAwareness.debug.sessionStats': 'सत्र आँकड़े', - 'screenAwareness.debug.framesEphemeral': 'फ़्रेम (क्षणिक)', - 'screenAwareness.debug.panicStop': 'घबराना बंद करो', - 'screenAwareness.debug.defaultPanicHotkey': 'सीएमडी+शिफ्ट+.', - 'screenAwareness.debug.vision': 'दृष्टि', - 'screenAwareness.debug.idle': 'निष्क्रिय', - 'screenAwareness.debug.visionQueue': 'दृष्टि कतार', - 'screenAwareness.debug.lastVision': 'अंतिम दर्शन', - 'screenAwareness.debug.notAvailable': 'एन/ए', - 'screenAwareness.debug.visionSummaries': 'दृष्टि सारांश', - 'screenAwareness.debug.refreshing': 'ताज़ा...', - 'screenAwareness.debug.noSummaries': 'अभी तक कोई सारांश नहीं.', - 'screenAwareness.debug.unknownApp': 'अज्ञात ऐप', - 'screenAwareness.debug.macosOnly': 'स्क्रीन इंटेलिजेंस V1 वर्तमान में केवल macOS पर समर्थित है।', - 'memory.debugTitle': 'मेमोरी डीबग', - 'memory.documents': 'दस्तावेज़', - 'memory.filterByNamespace': 'नामस्थान के अनुसार फ़िल्टर करें...', - 'memory.refresh': 'ताज़ा करें', - 'memory.noDocumentsFound': 'कोई दस्तावेज़ नहीं मिला.', - 'memory.delete': 'हटाएँ', - 'memory.rawResponse': 'कच्ची प्रतिक्रिया', - 'memory.namespaces': 'नामस्थान', - 'memory.noNamespacesFound': 'कोई नामस्थान नहीं मिला.', - 'memory.queryRecall': 'प्रश्न और स्मरण', - 'memory.namespace': 'नामस्थान', - 'memory.queryText': 'क्वेरी पाठ...', - 'memory.defaultMaxChunks': '10', - 'memory.maxChunks': 'अधिकतम टुकड़े', - 'memory.query': 'प्रश्न', - 'memory.recall': 'स्मरण करो', - 'memory.queryLabel': 'प्रश्न', - 'memory.recallLabel': 'स्मरण करो', - 'memory.queryResult': 'क्वेरी परिणाम', - 'memory.recallResult': 'परिणाम याद करें', - 'memory.clearNamespace': 'नामस्थान साफ़ करें', - 'memory.clearNamespaceDescription': 'Permanently delete all documents within a namespace.', - 'memory.selectNamespace': 'नामस्थान चुनें...', - 'memory.exampleNamespace': 'जैसे कौशल:gmail:user@example.com', - 'memory.clear': 'स्पष्ट', - 'memory.deleteConfirm': 'नामस्थान "{namespace}" में दस्तावेज़ "{documentId}" हटाएं?', - 'memory.clearNamespaceConfirm': - 'This will permanently delete ALL documents in namespace "{namespace}". Continue?', - 'memory.clearNamespaceSuccess': 'नेमस्पेस "{namespace}" साफ़ किया गया।', - 'memory.clearNamespaceEmpty': '"{namespace}" में साफ़ करने के लिए कुछ भी नहीं है।', - 'webhooks.debugTitle': 'वेबहुक डिबग', - 'webhooks.failedToLoadDebugData': 'वेबहुक डिबग डेटा लोड करने में विफल', - 'webhooks.clearLogsConfirm': 'सभी कैप्चर किए गए वेबहुक डीबग लॉग साफ़ करें?', - 'webhooks.failedToClearLogs': 'वेबहुक लॉग साफ़ करने में विफल', - 'webhooks.loading': 'लोड हो रहा है...', - 'webhooks.refresh': 'ताज़ा करें', - 'webhooks.clearing': 'समाशोधन...', - 'webhooks.clearLogs': 'लॉग साफ़ करें', - 'webhooks.registered': 'पंजीकृत', - 'webhooks.captured': 'कब्जा कर लिया', - 'webhooks.live': 'जीना', - 'webhooks.disconnected': 'विच्छेदित', - 'webhooks.lastEvent': 'आखिरी घटना', - 'webhooks.at': 'पर', - 'webhooks.registeredWebhooks': 'पंजीकृत वेबहुक', - 'webhooks.noActiveRegistrations': 'कोई सक्रिय पंजीकरण नहीं.', - 'webhooks.resolvingBackendUrl': 'बैकएंड का समाधान URL…', - 'webhooks.capturedRequests': 'कैप्चर किए गए अनुरोध', - 'webhooks.noRequestsCaptured': 'अभी तक कोई वेबहुक अनुरोध कैप्चर नहीं किया गया।', - 'webhooks.unrouted': 'अनियंत्रित', - 'webhooks.pending': 'लंबित', - 'webhooks.requestHeaders': 'शीर्षलेखों का अनुरोध करें', - 'webhooks.queryParams': 'क्वेरी पैरामीटर', - 'webhooks.requestBody': 'अनुरोध निकाय', - 'webhooks.responseHeaders': 'प्रतिक्रिया शीर्षलेख', - 'webhooks.responseBody': 'प्रतिक्रिया निकाय', - 'webhooks.rawPayload': 'कच्चा पेलोड', - 'webhooks.empty': '[खाली]', - 'providerSetup.error.defaultDetails': 'प्रदाता सेटअप विफल रहा.', - 'providerSetup.error.providerFallback': 'प्रदाता', - 'providerSetup.error.credentialsRejected': - '{provider} rejected the credentials. Check the API key and try again.', - 'providerSetup.error.endpointNotRecognized': - '{provider} did not recognize the endpoint. Check the base URL and try again.', - 'providerSetup.error.providerUnavailable': - '{provider} is unavailable right now. Try again or check the provider status.', - 'providerSetup.error.unreachable': - 'Could not reach {provider}. Check the endpoint URL and network connection, then try again.', - 'providerSetup.error.couldNotReachWithMessage': '{provider} तक नहीं पहुंच सका: {message}', - 'providerSetup.error.technicalDetails': 'तकनीकी विवरण', - 'devices.title': 'उपकरण', - 'devices.pairIphone': 'iPhone युग्मित करें', - 'devices.noPaired': 'कोई युग्मित डिवाइस नहीं', - 'devices.emptyState': 'Scan a QR code on your iPhone to connect it to this OpenHuman session.', - 'devices.devicePairedTitle': 'डिवाइस युग्मित', - 'devices.devicePairedMessage': 'iPhone सफलतापूर्वक कनेक्ट हुआ.', - 'devices.deviceRevokedTitle': 'डिवाइस निरस्त कर दिया गया', - 'devices.deviceRevokedMessage': '{label} हटा दिया गया.', - 'devices.revokeFailedTitle': 'निरस्त करना विफल रहा', - 'devices.online': 'ऑनलाइन', - 'devices.offline': 'ऑफ़लाइन', - 'devices.lastSeenNever': 'कभी नहीं', - 'devices.lastSeenNow': 'अभी अभी', - 'devices.lastSeenMinutes': '{count}m पहले', - 'devices.lastSeenHours': '{count}h पहले', - 'devices.lastSeenDays': '{count}d पहले', - 'devices.revoke': 'निरस्त करें', - 'devices.revokeAria': 'निरस्त करें{label}', - 'devices.confirmRevokeTitle': 'डिवाइस निरस्त करें?', - 'devices.confirmRevokeBody': '{label} will no longer be able to connect. This cannot be undone.', - 'devices.loadFailed': 'डिवाइस लोड करने में विफल: {message}', - 'devices.pairModal.title': 'iPhone युग्मित करें', - 'devices.pairModal.loading': 'युग्मन कोड जनरेट किया जा रहा है...', - 'devices.pairModal.instructions': 'अपने iPhone पर OpenHuman ऐप खोलें और इस कोड को स्कैन करें।', - 'devices.pairModal.expiresIn': 'कोड ~{count} मिनट में समाप्त हो जाता है', - 'devices.pairModal.expiresInPlural': 'कोड ~{count} मिनट में समाप्त हो जाता है', - 'devices.pairModal.showDetails': 'विवरण दिखाएँ', - 'devices.pairModal.hideDetails': 'विवरण छिपाएँ', - 'devices.pairModal.channelId': 'चैनल आईडी', - 'devices.pairModal.pairingUrl': 'जोड़ना URL', - 'devices.pairModal.expiredTitle': 'QR code समाप्त हो गया', - 'devices.pairModal.expiredBody': 'युग्मन जारी रखने के लिए एक नया कोड जनरेट करें.', - 'devices.pairModal.generateNewCode': 'नया कोड जनरेट करें', - 'devices.pairModal.successTitle': 'iPhone के साथ युग्मित', - 'devices.pairModal.autoClose': 'स्वचालित रूप से बंद हो रहा है...', - 'devices.pairModal.errorPrefix': 'युग्मन बनाने में विफल: {message}', - 'devices.pairModal.errorTitle': 'कुछ ग़लत हो गया', - 'devices.pairModal.copyUrl': 'प्रतिलिपि', - 'mcp.catalog.searchAria': 'स्मिथेरी कैटलॉग खोजें', - 'mcp.catalog.searchPlaceholder': 'स्मिथरी कैटलॉग खोजें...', - 'mcp.catalog.loadFailed': 'कैटलॉग लोड करने में विफल', - 'mcp.catalog.noResults': 'कोई सर्वर नहीं मिला.', - 'mcp.catalog.noResultsFor': '"{query}" के लिए कोई सर्वर नहीं मिला।', - 'mcp.catalog.loadMore': 'और अधिक लोड करें', - 'mcp.configAssistant.title': 'कॉन्फ़िगरेशन सहायक', - 'mcp.configAssistant.empty': 'कॉन्फ़िगरेशन, आवश्यक एनवी वर्र्स या सेटअप चरणों के बारे में पूछें।', - 'mcp.configAssistant.suggestedValues': 'सुझाए गए मान:', - 'mcp.configAssistant.valueHidden': '(मूल्य छिपा हुआ)', - 'mcp.configAssistant.applySuggested': 'सुझाए गए मान लागू करें', - 'mcp.configAssistant.reinstallHint': 'इन्हें लागू करने के लिए इन मानों के साथ पुनः स्थापित करें।', - 'mcp.configAssistant.thinking': 'सोच रहा हूँ...', - 'mcp.configAssistant.inputPlaceholder': 'Ask a question (Enter to send, Shift+Enter for newline)', - 'mcp.configAssistant.send': 'भेजें', - 'mcp.configAssistant.failedResponse': 'प्रतिक्रिया प्राप्त करने में विफल', - 'mcp.toolList.availableSingular': '{count} उपकरण उपलब्ध है', - 'mcp.toolList.availablePlural': '{count} उपकरण उपलब्ध हैं', - 'mcp.toolList.tryTool': 'Try', - 'mcp.toolList.tryToolAria': 'Open execution playground for {name}', - 'mcp.playground.title': 'Run {name}', - 'mcp.playground.close': 'Close playground', - 'mcp.playground.inputSchema': 'Input schema', - 'mcp.playground.argsLabel': 'Arguments (JSON)', - 'mcp.playground.argsHelp': 'Type JSON matching the input schema. Empty input is treated as {}.', - 'mcp.playground.runShortcut': '⌘/Ctrl + Enter to run', - 'mcp.playground.format': 'Format', - 'mcp.playground.invalidJson': 'Invalid JSON', - 'mcp.playground.run': 'Run tool', - 'mcp.playground.running': 'Running…', - 'mcp.playground.result': 'Result', - 'mcp.playground.resultError': 'Tool returned an error', - 'mcp.playground.copyResult': 'Copy result', - 'mcp.playground.copied': 'Copied', - 'mcp.playground.history': 'History', - 'mcp.playground.historyEmpty': 'No invocations yet in this session.', - 'mcp.playground.historyLoad': 'Load', - 'mcp.playground.unexpectedError': 'Unexpected error invoking tool.', - 'mcp.catalog.deployed': 'तैनात', - 'mcp.catalog.installCount': '{count} इंस्टॉल होता है', - 'app.update.dismissNotification': 'अद्यतन अधिसूचना ख़ारिज करें', - 'bootCheck.rpcAuthSuffix': 'प्रत्येक RPC पर।', - 'mcp.installed.title': 'स्थापित', - 'mcp.installed.browseCatalog': 'कैटलॉग ब्राउज़ करें', - 'mcp.installed.empty': 'अभी तक कोई MCP सर्वर स्थापित नहीं है।', - 'mcp.installed.toolSingular': '{count} उपकरण', - 'mcp.installed.toolPlural': '{count} उपकरण', - 'mcp.health.title': 'Health', - 'mcp.health.summaryAria': 'MCP connection health summary', - 'mcp.health.connectedCount': '{count} connected', - 'mcp.health.connectingCount': '{count} connecting', - 'mcp.health.errorCount': '{count} error', - 'mcp.health.disconnectedCount': '{count} idle', - 'mcp.health.retryAll': 'Retry all ({count})', - 'mcp.health.retryAllAria': 'Retry all {count} errored MCP servers', - 'mcp.health.disconnectAll': 'Disconnect all ({count})', - 'mcp.health.disconnectAllAria': 'Disconnect all {count} connected MCP servers', - 'mcp.health.disconnectConfirm.title': 'Disconnect all MCP servers?', - 'mcp.health.disconnectConfirm.body': - 'This will disconnect {count} currently-connected MCP servers. Installed configurations and secrets are kept; you can reconnect any server later.', - 'mcp.health.disconnectConfirm.cancel': 'Cancel', - 'mcp.health.disconnectConfirm.confirm': 'Disconnect all', - 'mcp.health.opErrorGeneric': 'Bulk operation failed. See logs.', - 'mcp.health.bulkPartialFailure': '{failed} of {total} servers failed. See logs.', - 'mcp.installed.search.landmarkAria': 'Search installed MCP servers', - 'mcp.installed.search.inputAria': 'Filter installed MCP servers by name', - 'mcp.installed.search.placeholder': 'Filter servers…', - 'mcp.installed.search.clearAria': 'Clear filter', - 'mcp.installed.search.countMatches': '{shown} of {total} servers', - 'mcp.installed.search.noMatches': 'No servers match "{query}".', - 'mcp.inventory.openButton': 'Inventory', - 'mcp.inventory.openAria': 'Open the sharable MCP inventory panel', - 'mcp.inventory.title': 'Sharable MCP Inventory', - 'mcp.inventory.subtitle': - 'Export your installed MCP servers as a portable, secret-free manifest, or import one from a teammate. Secret env values are never included or imported.', - 'mcp.inventory.close': 'Close inventory panel', - 'mcp.inventory.tablistAria': 'Inventory sections', - 'mcp.inventory.tab.export': 'Export', - 'mcp.inventory.tab.import': 'Import', - 'mcp.inventory.export.empty': - 'No MCP servers installed yet — nothing to export. Install one from the catalog first.', - 'mcp.inventory.export.privacyTitle': 'What is in this manifest', - 'mcp.inventory.export.privacyBody': - 'Server names, qualified names, env-variable KEY NAMES, and non-secret config only. Secret values, your machine identifiers, and per-install timestamps are intentionally stripped.', - 'mcp.inventory.export.serverCount': '{count} servers in this manifest', - 'mcp.inventory.export.copy': 'Copy', - 'mcp.inventory.export.copied': 'Copied', - 'mcp.inventory.export.copyAria': 'Copy the manifest JSON to the clipboard', - 'mcp.inventory.export.download': 'Download', - 'mcp.inventory.export.downloadAria': 'Download the manifest as a JSON file', - 'mcp.inventory.import.trustTitle': 'Treat imported manifests as untrusted code', - 'mcp.inventory.import.trustBody': - 'An MCP server is a tool you grant your agent. Only import manifests from sources you trust. Each install requires your explicit click; nothing is auto-installed.', - 'mcp.inventory.import.pasteLabel': 'Paste manifest JSON', - 'mcp.inventory.import.pastePlaceholder': 'Paste a manifest here, or upload a .json file below.', - 'mcp.inventory.import.preview': 'Preview', - 'mcp.inventory.import.clear': 'Clear', - 'mcp.inventory.import.uploadFile': 'or upload a .json file', - 'mcp.inventory.import.uploadFileAria': 'Upload a manifest .json file', - 'mcp.inventory.import.fileTooLarge': 'File is too large (over 1 MB). Refusing to load.', - 'mcp.inventory.import.fileReadFailed': 'Could not read file.', - 'mcp.inventory.import.parseErrorPrefix': 'Could not parse manifest:', - 'mcp.inventory.import.previewHeading': 'Preview', - 'mcp.inventory.import.previewCounts': - '{total} servers — {newly} new, {already} already installed', - 'mcp.inventory.import.previewEmpty': 'Manifest contains no servers.', - 'mcp.inventory.import.exportedFrom': 'Exported from {exporter}', - 'mcp.inventory.import.exportedAt': 'at {when}', - 'mcp.inventory.import.statusNew': 'New', - 'mcp.inventory.import.statusAlreadyInstalled': 'Already installed', - 'mcp.inventory.import.envKeysLabel': 'Env keys', - 'mcp.inventory.import.install': 'Install', - 'mcp.inventory.import.installAria': 'Install {name} from this manifest', - 'mcp.inventory.import.skipped': 'skipped', - 'mcp.inventory.parseError.empty': 'Manifest is empty.', - 'mcp.inventory.parseError.invalidJson': 'Invalid JSON.', - 'mcp.inventory.parseError.rootNotObject': 'Manifest must be a JSON object at the root.', - 'mcp.inventory.parseError.unsupportedSchema': - 'Unsupported manifest schema — this file was not produced by a compatible exporter.', - 'mcp.inventory.parseError.missingExportedAt': 'Missing or invalid `exported_at` field.', - 'mcp.inventory.parseError.missingExportedBy': 'Missing or invalid `exported_by` field.', - 'mcp.inventory.parseError.invalidServers': 'Missing or invalid `servers` array.', - 'mcp.inventory.parseError.serverNotObject': 'A server entry is not an object.', - 'mcp.inventory.parseError.serverMissingQualifiedName': - 'A server entry is missing its qualified_name.', - 'mcp.inventory.parseError.serverMissingDisplayName': - 'A server entry is missing its display_name.', - 'mcp.inventory.parseError.serverEnvKeysNotArray': - 'A server entry has an env_keys field that is not an array of strings.', - 'mcp.inventory.parseError.serverContainsEnv': - 'A server entry contains an `env` value map. Refusing to import — manifests must only carry env_keys (names), never secret values.', - 'mcp.inventory.parseError.duplicateQualifiedName': - 'Duplicate qualified_name found in manifest. Each server must appear at most once.', - 'mcp.tab.loading': 'MCP सर्वर लोड हो रहा है...', - 'mcp.tab.emptyDetail': 'एक सर्वर चुनें या कैटलॉग ब्राउज़ करें।', - 'mcp.install.loadingDetail': 'सर्वर विवरण लोड हो रहा है...', - 'mcp.install.back': 'वापस जाओ', - 'mcp.install.title': '{name} स्थापित करें', - 'mcp.install.requiredEnv': 'आवश्यक पर्यावरण चर', - 'mcp.install.enterValue': '{key} दर्ज करें', - 'mcp.install.show': 'दिखाओ', - 'mcp.install.hide': 'छिपाओ', - 'mcp.install.configLabel': 'कॉन्फ़िगरेशन (वैकल्पिक JSON)', - 'mcp.install.configPlaceholder': '{"key": "value"}', - 'mcp.install.missingRequired': '"{key}" आवश्यक है', - 'mcp.install.invalidJson': 'कॉन्फ़िग JSON मान्य JSON नहीं है', - 'mcp.install.failedDetail': 'सर्वर विवरण लोड करने में विफल', - 'mcp.install.failedInstall': 'इंस्टॉल विफल', - 'mcp.install.button': 'स्थापित करें', - 'mcp.install.installing': 'स्थापित किया जा रहा है...', - 'mcp.detail.suggestedEnvReady': 'सुझाए गए पर्यावरण मूल्य तैयार हैं', - 'mcp.detail.suggestedEnvBody': - 'Re-install this server with the suggested values to apply them: {keys}', - 'mcp.detail.connect': 'कनेक्ट करें', - 'mcp.detail.connecting': 'कनेक्ट हो रहा है...', - 'mcp.detail.disconnect': 'डिस्कनेक्ट करें', - 'mcp.detail.hideAssistant': 'सहायक छिपाएँ', - 'mcp.detail.helpConfigure': 'कॉन्फ़िगर करने में मेरी सहायता करें', - 'mcp.detail.confirmUninstall': 'अनइंस्टॉल की पुष्टि करें?', - 'mcp.detail.confirmUninstallAction': 'हाँ, अनइंस्टॉल करें', - 'mcp.detail.uninstall': 'अनइंस्टॉल करें', - 'mcp.detail.envVars': 'पर्यावरण चर', - 'mcp.detail.tools': 'उपकरण', - 'onboarding.skipForNow': 'अभी के लिए छोड़ें', - 'onboarding.localAI.continueWithCloud': 'बादल के साथ जारी रखें', - 'onboarding.localAI.useLocalAnyway': 'Use local AI anyway (not recommended for your device)', - 'onboarding.localAI.useLocalInstead': 'Use local AI instead (connect Ollama now)', - 'onboarding.localAI.setupIssue': 'स्थानीय AI सेटअप में एक समस्या आई', - 'notifications.routingTitle': 'अधिसूचना रूटिंग', - 'notifications.routing.pipelineStats': 'पाइपलाइन आँकड़े', - 'notifications.routing.total': 'कुल', - 'notifications.routing.unread': 'अपठित', - 'notifications.routing.unscored': 'अंकरहित', - 'notifications.routing.intelligenceTitle': 'अधिसूचना खुफिया', - 'notifications.routing.intelligenceDesc': - 'Every notification from your connected accounts is scored by a local AI model. High-importance notifications are automatically routed to your orchestrator agent so nothing critical slips through.', - 'notifications.routing.howItWorks': 'यह कैसे काम करता है', - 'notifications.routing.level.drop': 'गिराओ', - 'notifications.routing.level.dropDesc': 'शोर / स्पैम - संग्रहीत लेकिन सामने नहीं आया', - 'notifications.routing.level.acknowledge': 'स्वीकार करें', - 'notifications.routing.level.acknowledgeDesc': 'Low-priority — shown in notification center', - 'notifications.routing.level.react': 'प्रतिक्रिया', - 'notifications.routing.level.reactDesc': 'Medium-priority — triggers a focused agent response', - 'notifications.routing.level.escalate': 'आगे बढ़ें', - 'notifications.routing.level.escalateDesc': 'High-priority — forwarded to orchestrator agent', - 'notifications.routing.perProvider': 'प्रति-प्रदाता रूटिंग', - 'notifications.routing.threshold': 'देहली', - 'notifications.routing.routeToOrchestrator': 'ऑर्केस्ट्रेटर के लिए मार्ग', - 'notifications.routing.loadSettingsError': 'Failed to load settings. Reopen this panel to retry.', - 'settings.billing.inferenceBudget.title': 'Inference Budget', - 'settings.billing.inferenceBudget.noRecurringPlanBudget': 'कोई आवर्ती योजना बजट नहीं', - 'settings.billing.inferenceBudget.noRecurringWeeklyDesc': - 'Your current plan does not include a recurring weekly inference budget. Usage is paid from available credits instead.', - 'settings.billing.inferenceBudget.remainingSummary': '{remaining} / {budget} शेष', - 'settings.billing.inferenceBudget.spentThisCycle': 'इस चक्र में {amount} खर्च हुआ', - 'settings.billing.inferenceBudget.cycleEndsOn': 'चक्र समाप्त होता है {date}', - 'settings.billing.inferenceBudget.exhaustedDesc': - 'Included subscription usage is exhausted. Top up credits to keep using AI without waiting for the next cycle.', - 'settings.billing.inferenceBudget.discountVsPayg': '{pct}% cheaper per call than pay-as-you-go.', - 'settings.billing.inferenceBudget.cycleSpend': 'साइकिल खर्च', - 'settings.billing.inferenceBudget.totalAmount': '{amount} कुल', - 'settings.billing.inferenceBudget.inference': 'अनुमान', - 'settings.billing.inferenceBudget.integrations': 'एकीकरण', - 'settings.billing.inferenceBudget.calls': '{count} कॉल', - 'settings.billing.inferenceBudget.dailySpend': 'दैनिक खर्च', - 'settings.billing.inferenceBudget.dailySpendPoint': '{date}: {amount}', - 'settings.billing.inferenceBudget.topModels': 'शीर्ष मॉडल', - 'settings.billing.inferenceBudget.noInferenceUsage': 'इस चक्र का कोई अनुमान उपयोग नहीं।', - 'settings.billing.inferenceBudget.topIntegrations': 'शीर्ष एकीकरण', - 'settings.billing.inferenceBudget.noIntegrationUsage': 'इस चक्र में कोई एकीकरण उपयोग नहीं।', - 'settings.billing.inferenceBudget.unableToLoad': 'उपयोग डेटा लोड करने में असमर्थ', - 'settings.billing.inferenceBudget.notAvailable': 'एन/ए', - 'memory.sourceFilterAria': 'स्रोत के अनुसार फ़िल्टर करें', - 'calls.comingSoonDescription': 'एआई-सहायक कॉल जल्द ही आ रही हैं। बने रहें।', - 'vault.title': 'ज्ञान भंडार', - 'vault.description': 'Point at a local folder; files are chunked and mirrored into memory.', - 'vault.add': 'तिजोरी जोड़ें', - 'vault.added': 'तिजोरी जोड़ी गई', - 'vault.createdMessage': '"{name}" बनाया गया। निगलने के लिए {sync} पर क्लिक करें।', - 'vault.couldNotAdd': 'वॉल्ट नहीं जोड़ा जा सका', - 'vault.syncFailed': 'समन्वयन विफल', - 'vault.syncFailedFor': '"{name}" के लिए समन्वयन विफल', - 'vault.syncFailedFiles': 'विफल {count} फ़ाइल(फ़ाइलें)', - 'vault.syncedTitle': 'समन्वयित "{name}"', - 'vault.syncSummary': 'अंतर्ग्रहण {ingested}, अपरिवर्तित {unchanged}, हटाया गया {removed}', - 'vault.syncSummaryFailed': ', विफल {count}', - 'vault.syncSummarySkipped': ', छोड़ दिया गया {count}', - 'vault.syncSummaryDuration': ' · {seconds}s', - 'vault.confirmRemovePurge': - 'Remove vault "{name}"?\n\nClick OK to also purge its memory (delete all {count} ingested document(s)).\nClick Cancel to keep the documents in memory.', - 'vault.confirmRemove': 'वास्तव में वॉल्ट "{name}" को हटा दें?', - 'vault.removed': 'तिजोरी हटा दी गई', - 'vault.removedPurgedMessage': '"{name}" को हटा दिया गया और इसकी मेमोरी को शुद्ध कर दिया गया।', - 'vault.removedKeptMessage': '"{name}" हटा दिया गया। दस्तावेज़ स्मृति में रखे गए.', - 'vault.couldNotRemove': 'तिजोरी नहीं निकाली जा सकी', - 'vault.name': 'नाम', - 'vault.namePlaceholder': 'मेरे शोध नोट्स', - 'vault.folderPath': 'फ़ोल्डर पथ (पूर्ण)', - 'vault.folderPathPlaceholder': '/उपयोगकर्ता/आप/दस्तावेज़/नोट्स', - 'vault.excludes': 'बहिष्कृत (अल्पविराम से अलग किए गए सबस्ट्रिंग, वैकल्पिक)', - 'vault.excludesPlaceholder': 'ड्राफ्ट/, .गुप्त', - 'vault.creating': 'बनाया जा रहा है...', - 'vault.create': 'तिजोरी बनाएं', - 'vault.loading': 'तिजोरी लोड हो रही है...', - 'vault.failedToLoad': 'वॉल्ट लोड करने में विफल: {error}', - 'vault.empty': 'No vaults yet. Add one above to start ingesting a folder.', - 'vault.fileCount': '{count}फ़ाइलें', - 'vault.syncedRelative': 'समन्वयित {time}', - 'vault.neverSynced': 'कभी समन्वयित नहीं किया गया', - 'vault.syncingProgress': 'सिंक हो रहा है... {ingested}/{total}', - 'vault.removing': 'हटाया जा रहा है...', - 'vault.relative.sec': '{count}s पहले', - 'vault.relative.min': '{count}m पहले', - 'vault.relative.hr': '{count}h पहले', - 'vault.relative.day': '{count}d पहले', - 'whatsapp.title': 'WhatsApp', - 'subconscious.interval.fiveMinutes': '5 मिनट', - 'subconscious.interval.tenMinutes': '10 मिनट', - 'subconscious.interval.fifteenMinutes': '15 मि', - 'subconscious.interval.thirtyMinutes': '30 मि', - 'subconscious.interval.oneHour': '1 घंटा', - 'subconscious.interval.sixHours': '6 घंटे', - 'subconscious.interval.twelveHours': '12 घंटे', - 'subconscious.interval.oneDay': '1 दिन', - 'subconscious.priority.critical': 'आलोचनात्मक', - 'subconscious.priority.important': 'महत्वपूर्ण', - 'subconscious.priority.normal': 'सामान्य', - 'subconscious.durationSeconds': '{seconds}s', - 'subconscious.durationMilliseconds': '{milliseconds}ms', - 'settings.search.allowedSitesLabel': 'Allowed websites', - 'settings.search.allowedSitesHint': - 'Websites the assistant may open and read while researching (one host per line, e.g. reuters.com). A host also covers its subdomains. Leave empty to block all web access.', - 'settings.search.allowedSitesAllOn': - 'The assistant can open any public website. Local and private addresses stay blocked.', - 'settings.search.allowedSitesPlaceholder': 'reuters.com\napnews.com\ngithub.com', - 'settings.search.allowedSitesSave': 'Save websites', - 'settings.search.accessModeAria': 'Web access mode', - 'settings.search.accessAllowAll': 'Allow all', - 'settings.search.accessCustom': 'Custom', - 'settings.search.accessBlockAll': 'Block all', - 'settings.search.accessBlockAllHint': - 'All web access is blocked — the assistant cannot open or read any website.', - 'memory.tab.centrality': 'Centrality', - 'graphCentrality.title': 'Knowledge Graph Centrality', - 'graphCentrality.intro': - 'PageRank over your memory graph surfaces the load-bearing hubs — and the connector entities that link otherwise-separate clusters, which a raw frequency count cannot reveal.', - 'graphCentrality.loading': 'Computing centrality…', - 'graphCentrality.errorPrefix': 'Could not load the graph:', - 'graphCentrality.retry': 'Retry', - 'graphCentrality.empty': 'No knowledge graph yet.', - 'graphCentrality.emptyHint': - 'As the assistant records facts about you, the most connected entities will surface here.', - 'graphCentrality.namespaceLabel': 'Namespace', - 'graphCentrality.namespaceAll': 'All namespaces', - 'graphCentrality.metricEntities': 'Entities', - 'graphCentrality.metricConnections': 'Connections', - 'graphCentrality.metricClusters': 'Clusters', - 'graphCentrality.clustersCaption': '{components} clusters · largest holds {largest}', - 'graphCentrality.approximateBadge': 'approximate', - 'graphCentrality.approximateTitle': 'Stopped at the iteration cap before fully converging', - 'graphCentrality.rankedHeading': 'Top entities by influence', - 'graphCentrality.colRank': '#', - 'graphCentrality.colEntity': 'Entity', - 'graphCentrality.colInfluence': 'Influence', - 'graphCentrality.colLinks': 'Links', - 'graphCentrality.bridgeBadge': 'connector', - 'graphCentrality.bridgeTitle': 'Connector — more influential than its link count suggests', - 'graphCentrality.degreeTitle': '{in} in · {out} out', - 'settings.search.engineDisabledLabel': 'Disabled', - 'settings.search.engineDisabledDesc': - 'Remove search tools from the agent context and available tool list.', -}; - -export default hi1; diff --git a/app/src/lib/i18n/chunks/hi-2.ts b/app/src/lib/i18n/chunks/hi-2.ts deleted file mode 100644 index b67688c35..000000000 --- a/app/src/lib/i18n/chunks/hi-2.ts +++ /dev/null @@ -1,497 +0,0 @@ -import type { TranslationMap } from '../types'; - -// Hindi (हिन्दी) chunk 2/5. Translated from chunks/en-2.ts. -const hi2: TranslationMap = { - 'settings.ai.configStatus': 'कॉन्फिगरेशन स्टेटस', - 'settings.ai.fallbackMode': 'फ़ॉलबैक मोड', - 'settings.ai.loadedFromRuntime': 'रनटाइम से लोड हुआ', - 'settings.ai.loadingDuration': 'लोडिंग में लगा समय', - 'settings.ai.localRuntime': 'लोकल मॉडल रनटाइम', - 'settings.ai.openManager': 'मैनेजर खोलें', - 'settings.ai.retryDownload': 'डाउनलोड फिर से करें', - 'settings.ai.state': 'स्टेट', - 'settings.ai.targetModel': 'टार्गेट मॉडल', - 'settings.ai.download': 'डाउनलोड करें', - 'settings.ai.localModelUnavailable': 'लोकल मॉडल स्टेटस उपलब्ध नहीं।', - 'settings.ai.soulConfig': 'SOUL पर्सोना कॉन्फिगरेशन', - 'settings.ai.refreshing': 'रिफ्रेश हो रहा है...', - 'settings.ai.refreshSoul': 'SOUL रिफ्रेश करें', - 'settings.ai.loadingSoul': 'SOUL कॉन्फिगरेशन लोड हो रही है...', - 'settings.ai.identity': 'आइडेंटिटी', - 'settings.ai.personality': 'पर्सनैलिटी', - 'settings.ai.safetyRules': 'सेफ्टी रूल्स', - 'settings.ai.source': 'सोर्स', - 'settings.ai.loaded': 'लोड हुआ', - 'settings.ai.toolsConfig': 'TOOLS कॉन्फिगरेशन', - 'settings.ai.refreshTools': 'TOOLS रिफ्रेश करें', - 'settings.ai.toolsAvailable': 'उपलब्ध टूल्स', - 'settings.ai.tools': 'टूल्स', - 'settings.ai.activeSkills': 'एक्टिव स्किल्स', - 'settings.ai.skills': 'स्किल्स', - 'settings.ai.skillsOverview': 'स्किल्स ओवरव्यू', - 'settings.ai.refreshingAll': 'सभी रिफ्रेश हो रहे हैं...', - 'settings.ai.refreshAll': 'सभी AI कॉन्फिगरेशन रिफ्रेश करें', - 'settings.notifications.suppressAll': 'सभी नोटिफिकेशन बंद करें', - 'settings.notifications.suppressAllDesc': - 'फोकस स्टेट चाहे कुछ भी हो, एम्बेडेड ऐप्स के सभी OS नोटिफिकेशन टोस्ट ब्लॉक करें।', - 'settings.notifications.toggleDnd': 'डू नॉट डिस्टर्ब टॉगल करें', - 'settings.notifications.categories': 'कैटेगरीज़', - 'settings.notifications.categoryFooter': - 'किसी कैटेगरी को डिसेबल करने से उस टाइप के नए नोटिफिकेशन नोटिफिकेशन सेंटर में नहीं आएंगे। पुराने नोटिफिकेशन तब तक रहेंगे जब तक क्लियर न हों।', - 'settings.billing.movedToWeb': 'बिलिंग वेब पर चली गई है', - 'settings.billing.openDashboard': 'बिलिंग डैशबोर्ड खोलें', - 'settings.billing.movedToWebDesc': - 'सब्सक्रिप्शन बदलाव, पेमेंट तरीके, क्रेडिट और इनवॉयस अब वेब पर TinyHumans में मैनेज होते हैं।', - 'settings.billing.backToSettings': 'Settings पर वापस', - 'settings.billing.openingBrowser': 'ब्राउज़र खुल रहा है...', - 'settings.billing.browserNotOpen': 'अगर ब्राउज़र नहीं खुला तो ऊपर वाला बटन इस्तेमाल करें।', - 'settings.billing.browserOpenFailed': - 'ब्राउज़र ऑटोमेटिकली नहीं खुल पाया। ऊपर वाला बटन इस्तेमाल करें।', - 'settings.tools.chooseCapabilities': - 'चुनें कि OpenHuman आपकी तरफ से कौन सी कैपेबिलिटीज़ इस्तेमाल कर सकता है।', - 'settings.tools.saveChanges': 'बदलाव सेव करें', - 'settings.tools.preferencesSaved': 'प्रेफरेंस सेव हो गई', - 'settings.tools.saveFailed': 'प्रेफरेंस सेव नहीं हो पाई। दोबारा कोशिश करें।', - 'settings.screenAwareness.mode': 'मोड', - 'settings.screenAwareness.allExceptBlacklist': 'ब्लैकलिस्ट छोड़कर सब', - 'settings.screenAwareness.whitelistOnly': 'केवल व्हाइटलिस्ट', - 'settings.screenAwareness.screenMonitoring': 'स्क्रीन मॉनिटरिंग', - 'settings.screenAwareness.saveSettings': 'सेटिंग्स सेव करें', - 'settings.screenAwareness.session': 'सेशन', - 'settings.screenAwareness.status': 'स्टेटस', - 'settings.screenAwareness.active': 'एक्टिव', - 'settings.screenAwareness.stopped': 'रुका हुआ', - 'settings.screenAwareness.remaining': 'बचा हुआ', - 'settings.screenAwareness.startSession': 'सेशन शुरू करें', - 'settings.screenAwareness.stopSession': 'सेशन रोकें', - 'settings.screenAwareness.analyzeNow': 'अभी एनालाइज़ करें', - 'settings.screenAwareness.macosOnly': - 'स्क्रीन अवेयरनेस डेस्कटॉप कैप्चर और परमिशन कंट्रोल अभी केवल macOS पर सपोर्ट हैं।', - 'connections.comingSoon': 'जल्द आ रहा है', - 'connections.setUp': 'सेट अप करें', - 'connections.configured': 'कॉन्फिगर हो गया', - 'connections.unavailable': 'उपलब्ध नहीं', - 'connections.checking': 'चेक हो रहा है…', - 'connections.walletConfigured': - 'रिकवरी फ्रेज़ से लोकल EVM, BTC, Solana और Tron आइडेंटिटी कॉन्फिगर हो गई हैं।', - 'connections.walletReady': - 'एक रिकवरी फ्रेज़ से लोकल EVM, BTC, Solana और Tron आइडेंटिटी सेट करें।', - 'connections.walletError': - 'वॉलेट स्टेटस चेक नहीं हो पाई। रिकवरी फ्रेज़ पैनल से फिर से कोशिश करें।', - 'connections.walletChecking': 'वॉलेट स्टेटस चेक हो रही है...', - 'connections.walletIdentities': 'वॉलेट आइडेंटिटी', - 'connections.walletDerived': - 'रिकवरी फ्रेज़ से लोकल रूप से डिराइव हुई और केवल सेफ मेटाडेटा के रूप में स्टोर।', - 'connections.privacySecurity': 'प्राइवेसी और सिक्योरिटी', - 'connections.privacySecurityDesc': - 'सभी डेटा और क्रेडेंशियल ज़ीरो-डेटा रिटेंशन पॉलिसी के साथ लोकल रूप से स्टोर हैं। आपकी जानकारी एन्क्रिप्टेड है और तीसरे पक्ष से कभी शेयर नहीं होती।', - 'channels.status.connecting': 'कनेक्ट हो रहा है', - 'channels.status.notConfigured': 'कॉन्फिगर नहीं हुआ', - 'channels.noActiveRoute': 'कोई एक्टिव रूट नहीं', - 'channels.activeRoute': 'एक्टिव रूट', - 'channels.loadingDefinitions': 'चैनल डेफिनिशन लोड हो रही हैं...', - 'channels.channelConnections': 'चैनल कनेक्शन', - 'channels.configureAuthModes': 'हर मैसेजिंग चैनल के लिए auth modes कॉन्फिगर करें।', - 'channels.configNotAvailable': 'कॉन्फिगरेशन उपलब्ध नहीं है', - 'channels.channel': 'चैनल', - 'devOptions.coreModeNotSet': 'कोर मोड: सेट नहीं है', - 'devOptions.coreModeNotSetDesc': - 'बूट-चेक पिकर अभी कन्फर्म नहीं हुआ। Local या Cloud चुनने के लिए पिकर पर Switch mode इस्तेमाल करें।', - 'devOptions.local': 'लोकल', - 'devOptions.embeddedCoreSidecar': 'एम्बेडेड कोर साइडकार', - 'devOptions.sidecarSpawned': 'ऐप लॉन्च पर Tauri shell द्वारा इन-प्रोसेस स्पॉन किया गया।', - 'devOptions.cloud': 'क्लाउड', - 'devOptions.remoteCoreRpc': 'रिमोट कोर RPC', - 'devOptions.token': 'टोकन', - 'devOptions.tokenNotSet': 'सेट नहीं — RPC 401 देगा', - 'devOptions.triggerSentryTest': 'Sentry टेस्ट ट्रिगर करें (staging)', - 'devOptions.triggerSentryTestDesc': - 'Sentry पाइपलाइन वेरिफाई करने के लिए टैग्ड एरर फायर करता है। Issue #1072 — वेरिफिकेशन के बाद हटाएं।', - 'devOptions.sendTestEvent': 'टेस्ट इवेंट भेजें', - 'devOptions.sending': 'भेज रहे हैं…', - 'devOptions.eventSent': 'इवेंट भेज दिया गया', - 'devOptions.failed': 'विफल', - 'devOptions.appLogs': 'ऐप लॉग्स', - 'devOptions.appLogsDesc': - 'रोज़ाना के रोलिंग लॉग फाइल्स वाला फोल्डर खोलें। इश्यू रिपोर्ट करते समय सबसे नई फाइल अटैच करें।', - 'devOptions.openLogsFolder': 'लॉग्स फोल्डर खोलें', - 'mnemonic.phraseSaved': 'रिकवरी फ्रेज़ सेव हो गया', - 'mnemonic.walletReady': 'मल्टी-चेन वॉलेट आइडेंटिटी तैयार हैं। Settings पर वापस जा रहे हैं...', - 'mnemonic.writeDownWords': 'ये', - 'mnemonic.wordsInOrder': - 'शब्द क्रम में लिखें और किसी सुरक्षित जगह रखें। यह फ्रेज़ आपकी लोकल एन्क्रिप्शन key और EVM, BTC, Solana तथा Tron वॉलेट आइडेंटिटी सुरक्षित रखता है।', - 'mnemonic.cannotRecover': - 'यह फ्रेज़ खो जाए तो कभी रिकवर नहीं हो सकता — इसे पूरी तरह अपने डिवाइस पर ही रखें।', - 'mnemonic.copyToClipboard': 'क्लिपबोर्ड पर कॉपी करें', - 'mnemonic.alreadyHavePhrase': 'मेरे पास पहले से रिकवरी फ्रेज़ है', - 'mnemonic.consentSaved': - 'मैंने यह फ्रेज़ सेव कर लिया है और लोकल वॉलेट सेटअप के लिए इसे इस्तेमाल करने की अनुमति देता हूँ', - 'mnemonic.enterPhraseToRestore': - 'अपना लोकल वॉलेट रिस्टोर करने के लिए नीचे रिकवरी फ्रेज़ डालें, या पूरा फ्रेज़ किसी भी फील्ड में पेस्ट करें (नए बैकअप के लिए 12 शब्द; पुराने वर्जन के 24 शब्द भी काम करते हैं)।', - 'mnemonic.words': 'शब्द', - 'mnemonic.validPhrase': 'सही रिकवरी फ्रेज़', - 'mnemonic.generateNewPhrase': 'नया रिकवरी फ्रेज़ जनरेट करें', - 'mnemonic.securingData': 'आपका डेटा सुरक्षित हो रहा है...', - 'mnemonic.saveRecoveryPhrase': 'रिकवरी फ्रेज़ सेव करें', - 'mnemonic.userNotLoaded': 'यूज़र लोड नहीं हुआ। दोबारा साइन इन करें या पेज रिफ्रेश करें।', - 'mnemonic.invalidPhrase': 'गलत रिकवरी फ्रेज़। अपने शब्द चेक करके दोबारा कोशिश करें।', - 'mnemonic.somethingWentWrong': 'कुछ गड़बड़ हो गई। दोबारा कोशिश करें।', - 'team.failedToCreate': 'टीम नहीं बन पाई', - 'team.invalidInviteCode': 'गलत या एक्सपायर्ड इनवाइट कोड', - 'team.failedToSwitch': 'टीम स्विच नहीं हो पाई', - 'team.failedToLeave': 'टीम छोड़ने में दिक्कत आई', - 'team.role.owner': 'ओनर', - 'team.role.admin': 'एडमिन', - 'team.role.billingManager': 'बिलिंग मैनेजर', - 'team.role.member': 'मेंबर', - 'team.active': 'एक्टिव', - 'team.personalTeam': 'पर्सनल टीम', - 'team.manageTeam': 'टीम मैनेज करें', - 'team.switching': 'स्विच हो रहा है...', - 'team.switch': 'स्विच करें', - 'team.leaving': 'छोड़ रहे हैं...', - 'team.leave': 'छोड़ें', - 'team.yourTeams': 'आपकी टीम्स', - 'team.createNewTeam': 'नई टीम बनाएं', - 'team.teamName': 'टीम का नाम', - 'team.creating': 'बन रही है...', - 'team.joinExistingTeam': 'मौजूदा टीम जॉइन करें', - 'team.inviteCode': 'इनवाइट कोड', - 'team.joining': 'जॉइन हो रहे हैं...', - 'team.join': 'जॉइन करें', - 'team.leaveTeam': 'टीम छोड़ें', - 'team.confirmLeave': 'क्या आप वाकई छोड़ना चाहते हैं', - 'team.leaveWarning': - 'आप टीम और सभी टीम रिसोर्स का एक्सेस खो देंगे। दोबारा जॉइन करने के लिए नया इनवाइट चाहिए होगा।', - 'team.management': 'टीम मैनेजमेंट', - 'team.notFound': 'टीम नहीं मिली', - 'team.accessDenied': 'एक्सेस नहीं मिला', - 'team.members': 'मेंबर्स', - 'voice.title': 'वॉइस डिक्टेशन', - 'voice.settings': 'वॉइस सेटिंग्स', - 'voice.settingsDesc': 'डिक्टेट करने और एक्टिव फील्ड में टेक्स्ट डालने के लिए hotkey दबाकर रखें।', - 'voice.hotkey': 'हॉटकी', - 'voice.activationMode': 'एक्टिवेशन मोड', - 'voice.tapToToggle': 'टॉगल के लिए टैप करें', - 'voice.writingStyle': 'राइटिंग स्टाइल', - 'voice.verbatimTranscription': 'जैसा बोला वैसा ट्रांसक्रिप्शन', - 'voice.naturalCleanup': 'नैचुरल क्लीनअप', - 'voice.autoStart': 'कोर के साथ वॉइस सर्वर ऑटोमेटिकली शुरू करें', - 'voice.customDictionary': 'कस्टम डिक्शनरी', - 'voice.customDictionaryDesc': - 'रिकग्निशन एक्युरेसी बढ़ाने के लिए नाम, टेक्निकल टर्म और डोमेन शब्द जोड़ें।', - 'voice.addWord': 'एक शब्द जोड़ें...', - 'voice.sttDisabled': 'लोकल STT मॉडल डाउनलोड और तैयार होने तक वॉइस डिक्टेशन बंद है।', - 'voice.openLocalAiModel': 'लोकल AI मॉडल खोलें', - 'voice.serverRestarted': 'नई सेटिंग्स के साथ वॉइस सर्वर रीस्टार्ट हो गया।', - 'voice.settingsSaved': 'वॉइस सेटिंग्स सेव हो गईं।', - 'voice.serverStarted': 'वॉइस सर्वर शुरू हो गया।', - 'voice.serverStopped': 'वॉइस सर्वर बंद हो गया।', - 'voice.saveVoiceSettings': 'वॉइस सेटिंग्स सेव करें', - 'voice.startVoiceServer': 'वॉइस सर्वर शुरू करें', - 'voice.stopVoiceServer': 'वॉइस सर्वर बंद करें', - 'voice.debugTitle': 'वॉइस डिबग', - 'autocomplete.title': 'ऑटोकम्पलीट', - 'autocomplete.settings': 'सेटिंग्स', - 'autocomplete.acceptWithTab': 'Tab से एक्सेप्ट करें', - 'autocomplete.stylePreset': 'स्टाइल प्रीसेट', - 'autocomplete.style.balanced': 'बैलेंस्ड', - 'autocomplete.style.concise': 'संक्षिप्त', - 'autocomplete.style.formal': 'फॉर्मल', - 'autocomplete.style.casual': 'कैज़ुअल', - 'autocomplete.style.custom': 'कस्टम', - 'autocomplete.disabledApps': 'डिसेबल ऐप्स (एक बंडल/ऐप टोकन प्रति लाइन)', - 'autocomplete.saveSettings': 'सेटिंग्स सेव करें', - 'autocomplete.saving': 'सेव हो रहा है…', - 'autocomplete.runtime': 'रनटाइम', - 'autocomplete.running': 'चल रहा है', - 'autocomplete.start': 'शुरू करें', - 'autocomplete.stop': 'रोकें', - 'autocomplete.settingsSaved': 'ऑटोकम्पलीट सेटिंग्स सेव हो गईं।', - 'autocomplete.started': 'ऑटोकम्पलीट शुरू हो गया।', - 'autocomplete.didNotStart': 'ऑटोकम्पलीट शुरू नहीं हुआ। चेक करें कि यह चालू है।', - 'autocomplete.stopped': 'ऑटोकम्पलीट रुक गया।', - 'autocomplete.advancedSettings': 'एडवांस्ड सेटिंग्स', - 'autocomplete.debugTitle': 'ऑटोकम्पलीट डिबग', - 'chat.agentChat': 'एजेंट चैट', - 'chat.overrides': 'ओवरराइड्स', - 'chat.model': 'मॉडल', - 'chat.temperature': 'टेम्परेचर', - 'chat.conversation': 'बातचीत', - 'chat.startAgentConversation': 'एजेंट से बातचीत शुरू करें।', - 'chat.you': 'आप', - 'chat.agent': 'एजेंट', - 'chat.askAgent': 'एजेंट से कुछ भी पूछें...', - 'chat.sendMessage': 'मैसेज भेजें', - 'composio.triageTitle': 'इंटीग्रेशन ट्रिगर', - 'composio.triageDesc': - 'एक्टिव होने पर, हर आने वाला Composio ट्रिगर AI triage स्टेप से गुज़रता है जो इवेंट क्लासीफाई करता है और ऑटोमेटेड एक्शन शुरू कर सकता है — प्रति ट्रिगर एक लोकल LLM टर्न। मैन्युअल रिव्यू पसंद हो तो ग्लोबली या per-integration डिसेबल करें। अगर एनवायरनमेंट वेरिएबल', - 'composio.disableAllTriage': 'सभी ट्रिगर के लिए AI triage बंद करें', - 'composio.triggersStillRecorded': - 'ट्रिगर हिस्ट्री में रिकॉर्ड होते रहते हैं — कोई LLM टर्न नहीं चलता।', - 'composio.disableSpecificIntegrations': 'खास इंटीग्रेशन के लिए AI triage बंद करें', - 'composio.settingsSaved': 'सेटिंग्स सहेजी गईं', - 'composio.saveFailed': 'सेव नहीं हो पाया। दोबारा कोशिश करें।', - 'cron.title': 'क्रॉन जॉब्स', - 'cron.scheduledJobs': 'शेड्यूल्ड जॉब्स', - 'cron.manageCronJobs': 'कोर शेड्यूलर से cron jobs मैनेज करें।', - 'cron.refreshCronJobs': 'Cron Jobs रिफ्रेश करें', - 'localModel.modelStatus': 'मॉडल स्टेटस', - 'localModel.downloadModels': 'मॉडल डाउनलोड करें', - 'localModel.usage': 'उपयोग', - 'localModel.usageDesc': - 'चुनें कि कौन से सबसिस्टम लोकल मॉडल पर चलें। बंद होने पर क्लाउड इस्तेमाल होगा।', - 'localModel.enableRuntime': 'लोकल AI रनटाइम चालू करें', - 'localModel.enableRuntimeDesc': - 'मास्टर स्विच। डिफ़ॉल्ट रूप से बंद — Ollama आइडल रहता है। चालू होने पर tree summarizer, screen intelligence और autocomplete हमेशा लोकल मॉडल इस्तेमाल करते हैं।', - 'localModel.advancedSettings': 'एडवांस्ड सेटिंग्स', - 'localModel.debugTitle': 'लोकल मॉडल डिबग', - 'localModel.ollamaServer.helperText': 'उदाहरण: http://192.168.1.5:11434', - 'localModel.ollamaServer.label': 'Ollama सर्वर URL', - 'localModel.ollamaServer.modelCount': 'मॉडल', - 'localModel.ollamaServer.placeholder': 'http://localhost:11434', - 'localModel.ollamaServer.reachable': 'पहुंचने योग्य', - 'localModel.ollamaServer.resetButton': 'डिफ़ॉल्ट पर रीसेट करें', - 'localModel.ollamaServer.saveButton': 'सहेजें', - 'localModel.ollamaServer.testButton': 'कनेक्शन जांचें', - 'localModel.ollamaServer.unreachable': 'पहुंचने योग्य नहीं', - 'localModel.ollamaServer.validationError': 'एक मान्य http:// या https:// URL होना चाहिए', - 'screenAwareness.debugTitle': 'स्क्रीन अवेयरनेस डिबग', - 'memory.debugTitle': 'मेमोरी डिबग', - 'webhooks.debugTitle': 'Webhooks डिबग', - 'notifications.routingTitle': 'नोटिफिकेशन रूटिंग', - 'common.reload': 'रिलोड करें', - 'common.skip': 'स्किप करें', - 'common.disable': 'बंद करें', - 'common.enable': 'चालू करें', - 'chat.safetyTimeout': - '2 मिनट बाद भी एजेंट से कोई जवाब नहीं मिला। दोबारा कोशिश करें या अपना कनेक्शन चेक करें।', - 'chat.filter.all': 'सभी', - 'chat.filter.work': 'वर्क', - 'chat.filter.briefing': 'ब्रीफिंग', - 'chat.filter.notification': 'नोटिफिकेशन', - 'chat.filter.workers': 'वर्कर्स', - 'chat.selectThread': 'एक थ्रेड चुनें', - 'chat.threads': 'थ्रेड्स', - 'chat.noThreads': 'अभी कोई थ्रेड नहीं', - 'chat.noLabelThreads': 'कोई "{label}" थ्रेड नहीं', - 'chat.noWorkerThreads': 'अभी कोई वर्कर थ्रेड नहीं', - 'chat.deleteThread': 'थ्रेड डिलीट करें', - 'chat.deleteThreadConfirm': 'क्या आप वाकई "{title}" डिलीट करना चाहते हैं?', - 'chat.untitledThread': 'बिना शीर्षक की थ्रेड', - 'chat.editThreadTitle': 'Edit thread title', - 'chat.hideSidebar': 'साइडबार छुपाएं', - 'chat.showSidebar': 'साइडबार दिखाएं', - 'chat.newThreadShortcut': 'नई थ्रेड (/new)', - 'chat.new': 'नई', - 'chat.failedToLoadMessages': 'मैसेज लोड नहीं हो पाए', - 'chat.thinkingIteration': 'सोच रहा है... ({n})', - 'chat.thinkingDots': 'सोच रहा है...', - 'chat.approachingLimit': 'उपयोग सीमा के करीब', - 'chat.approachingLimitMsg': 'आपने अपने उपलब्ध कोटे का {pct}% इस्तेमाल कर लिया है।', - 'chat.upgrade': 'अपग्रेड करें', - 'chat.weeklyLimitHit': 'आपकी साप्ताहिक सीमा पूरी हो गई।', - 'chat.resets': 'रीसेट होता है', - 'chat.topUpToContinue': 'जारी रखने के लिए टॉप अप करें।', - 'chat.budgetComplete': 'आपका बजट पूरा हो गया। जारी रखने के लिए क्रेडिट जोड़ें या अपग्रेड करें।', - 'chat.topUp': 'टॉप अप करें', - 'chat.cycle': 'चक्र', - 'chat.cycleSpent': 'इस चक्र में खर्च', - 'chat.cycleRemaining': 'शेष', - 'chat.left': 'बचा हुआ', - 'chat.setup': 'सेट अप करें', - 'chat.switchToText': 'टेक्स्ट पर स्विच करें', - 'chat.transcribing': 'ट्रांसक्राइब हो रहा है...', - 'chat.stopAndSend': 'रोकें और भेजें', - 'chat.startTalking': 'बोलना शुरू करें', - 'chat.playingVoiceReply': 'वॉइस रिप्लाई चल रहा है', - 'chat.voiceHint': 'बोलने के लिए माइक इस्तेमाल करें', - 'chat.micUnavailable': 'माइक्रोफोन उपलब्ध नहीं', - 'chat.turn': 'टर्न', - 'chat.turns': 'टर्न्स', - 'chat.openWorkerThread': 'वर्कर थ्रेड खोलें', - 'chat.attachment.attach': 'छवि संलग्न करें', - 'chat.attachment.remove': '{name} हटाएं', - 'chat.attachment.tooMany': 'प्रति संदेश अधिकतम {max} छवियां', - 'chat.attachment.tooLarge': 'छवि {max} आकार सीमा से अधिक है', - 'chat.attachment.unsupportedType': - 'असमर्थित फ़ाइल प्रकार। PNG, JPEG, WebP, GIF, या BMP का उपयोग करें।', - 'chat.attachment.readFailed': 'फ़ाइल पढ़ नहीं सकी', - 'memory.searchAria': 'मेमोरी सर्च करें', - 'memory.searchPlaceholder': 'मेमोरी एंट्रीज़ सर्च करें...', - 'memory.sourceFilter.all': 'सभी सोर्स', - 'memory.sourceFilter.email': 'ईमेल', - 'memory.sourceFilter.calendar': 'कैलेंडर', - 'memory.sourceFilter.telegram': 'Telegram', - 'memory.sourceFilter.aiInsight': 'AI इनसाइट', - 'memory.sourceFilter.system': 'सिस्टम', - 'memory.sourceFilter.trading': 'ट्रेडिंग', - 'memory.sourceFilter.security': 'सिक्योरिटी', - 'memory.ingestionActivity': 'इन्जेशन एक्टिविटी', - 'memory.events': 'इवेंट्स', - 'memory.event': 'इवेंट', - 'memory.overTheLast': 'पिछले', - 'memory.months': 'महीने', - 'memory.peak': 'पीक', - 'memory.perDay': '/दिन', - 'memory.less': 'कम', - 'memory.more': 'ज़्यादा', - 'memory.on': 'पर', - 'memory.loading': 'मेमोरी लोड हो रही है', - 'memory.fetching': 'आपकी मेमोरी एंट्रीज़ फेच हो रही हैं...', - 'memory.analyzing': 'मेमोरी एनालाइज़ हो रही है', - 'memory.analyzingHint': 'इनसाइट निकालने के लिए मेमोरी प्रोसेस हो रही है...', - 'memory.noMatches': 'कोई मिलान नहीं मिला', - 'memory.noMatchesHint': 'सर्च टर्म या फिल्टर बदलकर देखें।', - 'memory.allCaughtUp': 'सब अप-टू-डेट है', - 'memory.allCaughtUpHint': 'कोई नई मेमोरी एंट्री प्रोसेस करने के लिए नहीं।', - 'memory.noAnalysis': 'अभी कोई एनालिसिस नहीं', - 'memory.noAnalysisHint': 'अपनी मेमोरी में पैटर्न देखने के लिए एनालिसिस चलाएं।', - 'memory.emptyHint': 'अपनी पहली मेमोरी बनाने के लिए बातचीत शुरू करें।', - 'mic.unavailable': 'माइक्रोफोन उपलब्ध नहीं है', - 'mic.permissionDenied': 'माइक्रोफोन की अनुमति नहीं मिली', - 'mic.failedToStartRecorder': 'रिकॉर्डर शुरू नहीं हो पाया', - 'mic.transcribing': 'ट्रांसक्राइब हो रहा है...', - 'mic.tapToSend': 'भेजने के लिए टैप करें', - 'mic.waitingForAgent': 'एजेंट का इंतज़ार है...', - 'mic.tapAndSpeak': 'टैप करें और बोलें', - 'mic.stopRecording': 'रिकॉर्डिंग रोकें और भेजें', - 'mic.startRecording': 'रिकॉर्डिंग शुरू करें', - 'token.usageLimitReached': 'उपयोग सीमा पहुँच गई', - 'token.approachingLimit': 'सीमा के करीब', - 'token.planClickForDetails': 'प्लान - डिटेल्स के लिए क्लिक करें', - 'token.sessionTokens': 'इन: {in} | आउट: {out} | टर्न: {turns}', - 'token.limit': 'सीमा पहुँच गई', - 'catalog.noCapabilityBinding': 'कोई कैपेबिलिटी बाइंडिंग नहीं', - 'catalog.downloadFailed': 'डाउनलोड विफल', - 'catalog.active': 'एक्टिव', - 'catalog.installed': 'इन्स्टॉल्ड', - 'catalog.notDownloaded': 'डाउनलोड नहीं हुआ', - 'catalog.inUse': 'इस्तेमाल हो रहा है', - 'catalog.use': 'इस्तेमाल करें', - 'catalog.deleteModel': 'मॉडल डिलीट करें', - 'catalog.download': 'डाउनलोड करें', - 'navigator.recent': 'हाल का', - 'navigator.today': 'आज', - 'navigator.thisWeek': 'इस हफ्ते', - 'navigator.sources': 'सोर्स', - 'navigator.email': 'ईमेल', - 'navigator.slack': 'Slack', - 'navigator.chat': 'चैट', - 'navigator.documents': 'दस्तावेज़', - 'navigator.people': 'लोग', - 'navigator.topics': 'विषय', - 'dreams.description': - 'ड्रीम्स AI-जेनरेटेड रिफ्लेक्शन हैं जो आपकी मेमोरी के पैटर्न को सिंथेसाइज़ करते हैं।', - 'dreams.comingSoon': 'जल्द आ रहा है', - 'assignment.memoryLlm': 'मेमोरी LLM', - 'assignment.memoryLlmAria': 'मेमोरी LLM सिलेक्शन', - 'assignment.embedder': 'एम्बेडर', - 'assignment.loaded': 'लोड हुआ', - 'assignment.notDownloaded': 'डाउनलोड नहीं हुआ', - 'assignment.usedForExtractSummarise': 'एक्सट्रैक्शन और समरीज़ेशन के लिए इस्तेमाल', - 'insights.knownFacts': 'जानी-मानी बातें', - 'insights.preferences': 'पसंद', - 'insights.relationships': 'रिश्ते', - 'insights.skills': 'स्किल्स', - 'insights.opinions': 'राय', - // Developer options menu items (#2225) — English stubs; native translations welcome - 'devOptions.menuAi': 'एआई कॉन्फ़िगरेशन', - 'devOptions.menuAiDesc': 'क्लाउड प्रदाता, स्थानीय Ollama मॉडल, और प्रति-वर्कलोड रूटिंग', - 'devOptions.menuScreenAware': 'स्क्रीन जागरूकता', - 'devOptions.menuScreenAwareDesc': 'स्क्रीन कैप्चर अनुमतियाँ, निगरानी नीति और सत्र नियंत्रण', - 'devOptions.menuMessaging': 'मैसेजिंग चैनल', - 'devOptions.menuMessagingDesc': - 'Telegram/Discord प्रमाणीकरण मोड और डिफ़ॉल्ट चैनल रूटिंग कॉन्फ़िगर करें', - 'devOptions.menuTools': 'उपकरण', - 'devOptions.menuToolsDesc': - 'क्षमताओं को सक्षम या अक्षम करें OpenHuman आपकी ओर से उपयोग कर सकते हैं', - 'devOptions.menuAgentChat': 'एजेंट चैट', - 'devOptions.menuAgentChatDesc': 'मॉडल और तापमान ओवरराइड के साथ परीक्षण एजेंट की बातचीत', - 'devOptions.menuCronJobs': 'क्रॉन जॉब्स', - 'devOptions.menuCronJobsDesc': 'रनटाइम कौशल के लिए निर्धारित कार्य देखें और कॉन्फ़िगर करें', - 'devOptions.menuLocalModelDebug': 'स्थानीय मॉडल डीबग', - 'devOptions.menuLocalModelDebugDesc': - 'Ollama कॉन्फ़िगरेशन, एसेट डाउनलोड, मॉडल परीक्षण और डायग्नोस्टिक्स', - 'devOptions.menuWebhooksDebug': 'वेबहुक', - 'devOptions.menuWebhooksDebugDesc': - 'रनटाइम वेबहुक पंजीकरण और कैप्चर किए गए अनुरोध लॉग का निरीक्षण करें', - 'devOptions.menuIntelligence': 'बुद्धि', - 'devOptions.menuIntelligenceDesc': 'मेमोरी कार्यक्षेत्र, अवचेतन इंजन, सपने और सेटिंग्स', - 'devOptions.menuNotificationRouting': 'अधिसूचना रूटिंग', - 'devOptions.menuNotificationRoutingDesc': - 'एकीकरण अलर्ट के लिए एआई महत्व स्कोरिंग और ऑर्केस्ट्रेटर एस्केलेशन', - 'devOptions.menuComposeIOTriggers': 'कंपोज़आईओ ट्रिगर्स', - 'devOptions.menuComposeIOTriggersDesc': 'ComposeIO ट्रिगर इतिहास और संग्रह देखें', - 'devOptions.menuComposioRouting': 'Composio रूटिंग (डायरेक्ट मोड)', - 'devOptions.menuComposioRoutingDesc': - 'अपनी स्वयं की Composio API कुंजी लाएँ और कॉल को सीधे Backend.composio.dev पर रूट करें', - 'devOptions.menuComposioTriggers': 'एकीकरण ट्रिगर', - 'devOptions.menuComposioTriggersDesc': - 'Composio एकीकरण ट्रिगर के लिए AI ट्राइएज सेटिंग्स कॉन्फ़िगर करें', - 'mic.deviceSelector': 'माइक्रोफोन डिवाइस', - 'mic.tapToSendCountdown': 'भेजने के लिए टैप करें ({seconds}स)', - 'settings.agents.title': 'Agents', - 'settings.agents.subtitle': - 'Manage the agents available for delegation — built-in defaults and your own custom agents.', - 'settings.agents.menuDesc': 'Manage built-in and custom agents', - 'settings.agents.newAgent': 'New agent', - 'settings.agents.loadError': "Couldn't load agents", - 'settings.agents.empty': 'No agents yet', - 'settings.agents.sourceDefault': 'Built-in', - 'settings.agents.sourceCustom': 'Custom', - 'settings.agents.enable': 'Enable agent', - 'settings.agents.disable': 'Disable agent', - 'settings.agents.edit': 'Edit', - 'settings.agents.delete': 'Delete', - 'settings.agents.reset': 'Reset to default', - 'settings.agents.modelLabel': 'Model', - 'settings.agents.toolsLabel': 'Tools', - 'settings.agents.toolsAll': 'All tools', - 'settings.agents.toolsCount': '{count} tools', - 'settings.agents.actionFailed': "Couldn't update the agent", - 'settings.agents.orchestratorLocked': 'The orchestrator is always enabled.', - 'settings.agents.editor.createTitle': 'New agent', - 'settings.agents.editor.editTitle': 'Edit agent', - 'settings.agents.editor.id': 'ID', - 'settings.agents.editor.idHint': 'Lowercase letters, numbers, _ and - only.', - 'settings.agents.editor.name': 'Name', - 'settings.agents.editor.description': 'Description', - 'settings.agents.editor.model': 'Model (optional)', - 'settings.agents.editor.modelPlaceholder': 'e.g. inherit, hint:fast, or a model id', - 'settings.agents.editor.systemPrompt': 'System prompt (optional)', - 'settings.agents.editor.tools': 'Allowed tools', - 'settings.agents.editor.toolsHint': 'One tool name per line. Use * for all tools.', - 'settings.agents.editor.defaultsNote': - 'Editing a built-in agent saves an override you can reset later.', - 'settings.agents.editor.save': 'Save', - 'settings.agents.editor.create': 'Create agent', - 'settings.agents.editor.saving': 'Saving…', - 'settings.agentsSection.title': 'Agents', - 'settings.agentsSection.description': - 'Manage your agents, their autonomy, and what they can access on this computer.', - 'settings.agentsSection.menuDesc': 'Registry, autonomy & OS access', - 'settings.agents.editor.notFound': 'Agent not found.', - 'settings.agents.editor.modelInherit': 'Inherit (platform default)', - 'settings.agents.editor.modelHints': 'Route hints', - 'settings.agents.editor.modelTiers': 'Model tiers', - 'settings.agents.editor.modelCustom': 'Custom model id…', - 'settings.agents.editor.modelCustomPlaceholder': 'e.g. anthropic/claude-sonnet-4', - 'settings.agents.editor.selectTools': 'Add tools', - 'settings.agents.editor.toolsAllSelected': 'All tools', - 'settings.agents.editor.toolsNoneSelected': 'No tools selected', - 'settings.agents.editor.removeToolAria': 'Remove {tool}', - 'settings.agents.editor.toolsModalTitle': 'Allowed tools', - 'settings.agents.editor.toolsSelectedCount': '{count} selected', - 'settings.agents.editor.toolsSearchPlaceholder': 'Search tools…', - 'settings.agents.editor.toolsAllowAll': 'Allow all tools (*)', - 'settings.agents.editor.toolsAllowAllHint': 'This agent can use every available tool.', - 'settings.agents.editor.toolsLoading': 'Loading tools…', - 'settings.agents.editor.toolsLoadError': 'Couldn’t load tools', - 'settings.agents.editor.toolsEmpty': 'No tools match your search.', - 'settings.agents.editor.toolsDone': 'Done', - 'settings.agents.editor.builtInReadonly': - 'Built-in agents can’t be edited. You can enable, disable, or reset them from the agents list.', -}; - -export default hi2; diff --git a/app/src/lib/i18n/chunks/hi-3.ts b/app/src/lib/i18n/chunks/hi-3.ts deleted file mode 100644 index 5704eaff1..000000000 --- a/app/src/lib/i18n/chunks/hi-3.ts +++ /dev/null @@ -1,506 +0,0 @@ -import type { TranslationMap } from '../types'; - -// Hindi (हिन्दी) chunk 3/5. Translated from chunks/en-3.ts. -const hi3: TranslationMap = { - 'insights.other': 'अन्य', - 'insights.title': 'इनसाइट्स', - 'insights.empty': 'अभी कोई इनसाइट नहीं। मेमोरी बढ़ने पर इनसाइट्स बनती हैं।', - 'insights.description': 'आपके मेमोरी ग्राफ में {count} रिलेशन के आधार पर।', - 'insights.items': 'आइटम्स', - 'insights.more': 'और', - 'calls.joiningCall': 'कॉल जॉइन हो रही है', - 'calls.meetWindowOpening': 'Meet विंडो खुल रही है...', - 'calls.failedToStart': 'Meet कॉल शुरू नहीं हो पाई', - 'calls.couldNotStart': 'कॉल शुरू नहीं हो पाई', - 'calls.failedToClose': 'कॉल बंद नहीं हो पाई', - 'calls.couldNotClose': 'कॉल बंद नहीं हो पाई', - 'calls.joinMeet': 'Google Meet कॉल जॉइन करें', - 'calls.joinMeetDescription': 'जॉइन करने के लिए Google Meet लिंक डालें।', - 'calls.meetLink': 'Meet लिंक', - 'calls.displayName': 'डिस्प्ले नाम', - 'calls.openingMeet': 'Meet खुल रहा है...', - 'calls.joinCall': 'कॉल जॉइन करें', - 'calls.activeCalls': 'एक्टिव कॉल्स', - 'calls.leave': 'छोड़ें', - 'workspace.wipeConfirm': 'क्या आप वाकई सारी मेमोरी मिटाना चाहते हैं? यह वापस नहीं होगा।', - 'workspace.resetTreeConfirm': 'क्या आप वाकई मेमोरी ट्री रीबिल्ड करना चाहते हैं?', - 'workspace.wipeTitle': 'मेमोरी मिटाएं', - 'workspace.resetting': 'रीसेट हो रहा है...', - 'workspace.resetMemory': 'मेमोरी रीसेट करें', - 'workspace.resetTreeTitle': 'मेमोरी ट्री रीबिल्ड करें', - 'workspace.rebuilding': 'रीबिल्ड हो रहा है...', - 'workspace.resetMemoryTree': 'मेमोरी ट्री रीसेट करें', - 'workspace.building': 'बन रहा है...', - 'workspace.buildSummaryTrees': 'समरी ट्री बनाएं', - 'workspace.viewVault': 'वॉल्ट देखें', - 'workspace.openingVaultTitle': 'ओब्सीडियन में तिजोरी खोलना', - 'workspace.openingVaultMessage': - "If Obsidian doesn't open, install it from obsidian.md or use Reveal Folder. Vault path:", - 'workspace.openVaultFailedTitle': "Couldn't open vault in Obsidian", - 'workspace.openVaultFailedMessage': - 'वॉल्ट निर्देशिका को सीधे खोलने के लिए रिवील फोल्डर का उपयोग करें। तिजोरी पथ:', - 'workspace.revealVaultFailed': "Couldn't reveal vault folder", - 'workspace.revealFolder': 'फ़ोल्डर प्रकट करें', - 'workspace.checkingVault': 'Checking…', - 'workspace.vaultNotRegisteredHelp': - 'Obsidian only opens folders you\'ve added as a vault. In Obsidian, choose "Open folder as vault" and pick the folder below — you only need to do this once. Then click View Vault again.', - 'workspace.obsidianNotFoundHelp': - "We couldn't find Obsidian on this device. Install it, or — if it's installed somewhere non-standard — set its config folder under Advanced.", - 'workspace.openAnyway': 'Open in Obsidian anyway', - 'workspace.installObsidian': 'Install Obsidian', - 'workspace.obsidianAdvanced': 'Obsidian installed elsewhere?', - 'workspace.obsidianConfigDirLabel': 'Obsidian config folder', - 'workspace.obsidianConfigDirHint': - 'Path to the folder containing obsidian.json (e.g. ~/.config/obsidian). Leave blank to auto-detect.', - 'workspace.obsidianConfigDirPlaceholder': '~/.config/obsidian', - 'workspace.graphLoadFailed': 'मेमोरी ग्राफ लोड नहीं हो पाया', - 'workspace.loadingGraph': 'मेमोरी ग्राफ लोड हो रहा है...', - 'workspace.graphViewMode': 'मेमोरी ग्राफ व्यू मोड', - 'workspace.trees': 'ट्रीज़', - 'workspace.contacts': 'कॉन्टैक्ट्स', - 'graph.noContactMentions': 'कोई कॉन्टैक्ट मेंशन नहीं', - 'graph.noMemory': 'कोई मेमोरी नहीं', - 'graph.source': 'सोर्स', - 'graph.topic': 'विषय', - 'graph.global': 'ग्लोबल', - 'graph.document': 'दस्तावेज़', - 'graph.contact': 'कॉन्टैक्ट', - 'graph.nodes': 'नोड्स', - 'graph.parentChild': 'पेरेंट-चाइल्ड', - 'graph.documentContact': 'दस्तावेज़-कॉन्टैक्ट', - 'graph.link': 'लिंक', - 'graph.links': 'लिंक्स', - 'graph.children': 'चाइल्ड', - 'graph.clickToOpenObsidian': 'Obsidian में खोलने के लिए क्लिक करें', - 'graph.person': 'व्यक्ति', - 'modal.dontShowAgain': 'ऐसे सुझाव फिर न दिखाएं', - 'reflections.loading': 'रिफ्लेक्शन लोड हो रहे हैं...', - 'reflections.empty': 'अभी कोई रिफ्लेक्शन नहीं', - 'reflections.title': 'रिफ्लेक्शन', - 'reflections.proposedAction': 'प्रस्तावित एक्शन', - 'reflections.act': 'करें', - 'reflections.dismiss': 'हटाएं', - 'whatsapp.chatsSynced': 'चैट्स सिंक हुईं', - 'whatsapp.chatSynced': 'चैट सिंक हुई', - 'sync.active': 'एक्टिव', - 'sync.recent': 'हाल का', - 'sync.idle': 'आइडल', - 'sync.memorySources': 'मेमोरी सोर्स', - 'sync.noConnectedSources': 'कोई कनेक्टेड सोर्स नहीं', - 'sync.chunks': 'चंक्स', - 'sync.lastChunk': 'आखिरी चंक:', - 'sync.pending': 'पेंडिंग', - 'sync.processed': 'प्रोसेस्ड', - 'sync.syncing': 'सिंक हो रहा है…', - 'sync.sync': 'सिंक करें', - 'sync.failedToLoad': 'सिंक स्टेटस लोड नहीं हो पाई', - 'sync.noContent': - 'अभी कोई कॉन्टेंट मेमोरी में सिंक नहीं हुआ। शुरू करने के लिए कोई इंटीग्रेशन कनेक्ट करें।', - 'memorySources.title': 'Memory Sources', - 'memorySources.empty': 'No memory sources yet. Add one to start feeding memory.', - 'memorySources.loadingConnections': 'Loading connections…', - 'memorySources.noConnections': - 'No active Composio connections found. Connect an integration first.', - 'memorySources.pickConnection': 'Pick a connection', - 'memorySources.selectConnection': '— Select a connection —', - 'memorySources.composioListFailed': 'Failed to load Composio connections.', - 'memorySources.browse': 'Browse…', - 'memorySources.folderPathPlaceholder': '/Users/you/notes', - 'memorySources.globPatternPlaceholder': '**/*.md', - 'memorySources.repoUrlPlaceholder': 'https://github.com/org/repo', - 'memorySources.branchPlaceholder': 'main', - 'memorySources.feedUrlPlaceholder': 'https://example.com/feed.xml', - 'memorySources.pageUrlPlaceholder': 'https://example.com/article', - 'memorySources.cssSelectorPlaceholder': 'article', - 'memorySources.searchQueryPlaceholder': 'from:user AI safety', - 'memorySources.kind.composio': 'Integration', - 'memorySources.kind.folder': 'Local Folder', - 'memorySources.kind.github_repo': 'GitHub Repo', - 'memorySources.kind.twitter_query': 'Twitter Search', - 'memorySources.kind.rss_feed': 'RSS Feed', - 'memorySources.kind.web_page': 'Web Page', - 'memorySources.sync.successTitle': 'Syncing', - 'memorySources.sync.successMessage': 'Progress will appear shortly.', - 'memorySources.sync.failedTitle': 'Sync failed:', - 'time.justNow': 'just now', - 'time.secondsAgoSuffix': 's ago', - 'time.minutesAgoSuffix': 'm ago', - 'time.hoursAgoSuffix': 'h ago', - 'time.daysAgoSuffix': 'd ago', - 'memorySources.customSources': 'Custom Sources', - 'memorySources.addSource': 'Add Source', - 'memorySources.noCustomSources': - 'No custom sources yet. Add a folder, GitHub repo, RSS feed, or web page to start.', - 'memorySources.pickKind': 'What kind of source do you want to add?', - 'memorySources.backToKinds': 'Back to source types', - 'memorySources.label': 'Label', - 'memorySources.labelPlaceholder': 'My research notes', - 'memorySources.add': 'Add', - 'memorySources.adding': 'Adding…', - 'memorySources.added': 'Source added', - 'memorySources.removed': 'Source removed', - 'memorySources.remove': 'Remove', - 'memorySources.enable': 'Enable', - 'memorySources.disable': 'Disable', - 'memorySources.toggleFailed': 'Toggle failed', - 'memorySources.removeFailed': 'Remove failed', - 'memorySources.folderPath': 'Folder path', - 'memorySources.globPattern': 'Glob pattern', - 'memorySources.repoUrl': 'Repository URL', - 'memorySources.branch': 'Branch', - 'memorySources.feedUrl': 'Feed URL', - 'memorySources.pageUrl': 'Page URL', - 'memorySources.cssSelector': 'CSS selector (optional)', - 'memorySources.searchQuery': 'Search query', - 'backend.aiBackend': 'AI बैकएंड', - 'backend.cloud': 'क्लाउड', - 'backend.recommended': 'सुझावित', - 'backend.cloudDescription': 'हमारे सर्वर पर तेज़ और पावरफुल मॉडल। तुरंत इस्तेमाल के लिए तैयार।', - 'backend.privacyNote': 'कोई पर्सनल डेटा, मैसेज या keys हमारे सर्वर पर कभी नहीं जाते।', - 'backend.local': 'लोकल', - 'backend.advanced': 'एडवांस्ड', - 'backend.localDescription': - 'Ollama का इस्तेमाल करके अपनी मशीन पर मॉडल चलाएं। पूरी प्राइवेसी, सेटअप ज़रूरी।', - 'backend.ramRecommended': '16GB+ RAM सुझावित', - 'subconscious.tasks': 'टास्क', - 'subconscious.ticks': 'टिक्स', - 'subconscious.last': 'आखिरी', - 'subconscious.failed': 'विफल', - 'subconscious.tickInterval': 'टिक इंटरवल', - 'subconscious.runNow': 'अभी चलाएं', - 'subconscious.providerUnavailableTitle': 'Subconscious रुका हुआ है', - 'subconscious.providerSettings': 'AI सेटिंग्स', - 'subconscious.approvalNeeded': 'अनुमति चाहिए', - 'subconscious.requiresApproval': 'अनुमति ज़रूरी है', - 'subconscious.fixInConnections': 'Connections में ठीक करें', - 'subconscious.goAhead': 'आगे बढ़ें', - 'subconscious.activeTasks': 'एक्टिव टास्क', - 'subconscious.noActiveTasks': 'कोई एक्टिव टास्क नहीं', - 'subconscious.default': 'डिफ़ॉल्ट', - 'subconscious.addTaskPlaceholder': 'नया टास्क जोड़ें...', - 'subconscious.activityLog': 'एक्टिविटी लॉग', - 'subconscious.noActivity': 'अभी कोई एक्टिविटी नहीं', - 'subconscious.decision.nothingNew': 'कुछ नया नहीं', - 'subconscious.decision.completed': 'पूरा हुआ', - 'subconscious.decision.evaluating': 'एवैल्यूएट हो रहा है', - 'subconscious.decision.waitingApproval': 'अनुमति का इंतज़ार है', - 'subconscious.decision.failed': 'विफल', - 'subconscious.decision.cancelled': 'रद्द हुआ', - 'subconscious.decision.skipped': 'स्किप हुआ', - 'actionable.complete': 'पूरा करें', - 'actionable.dismiss': 'हटाएं', - 'actionable.snooze': 'स्नूज़ करें', - 'actionable.new': 'नया', - 'stats.storage': 'स्टोरेज', - 'stats.files': 'फाइल्स', - 'stats.documents': 'दस्तावेज़', - 'stats.today': 'आज', - 'stats.namespaces': 'नेमस्पेस', - 'stats.relations': 'रिलेशन', - 'stats.firstMemory': 'पहली मेमोरी', - 'stats.latest': 'सबसे नया', - 'stats.sessions': 'सेशन', - 'stats.tokens': 'टोकन', - 'bootCheck.invalidUrl': 'कृपया एक रनटाइम URL डालें।', - 'bootCheck.urlMustStartWith': 'URL को http:// या https:// से शुरू होना चाहिए', - 'bootCheck.validUrlRequired': 'यह सही URL नहीं लगता (कोशिश करें https://core.example.com/rpc)', - 'bootCheck.tokenRequired': 'कनेक्ट करने के लिए एक auth टोकन चाहिए।', - 'bootCheck.chooseCoreMode': 'रनटाइम चुनें', - 'bootCheck.connectToCore': 'अपने रनटाइम से कनेक्ट करें', - 'bootCheck.desktopDescription': - 'OpenHuman को सोचने के लिए एक रनटाइम चाहिए। चुनें कि यह कहाँ रहे।', - 'bootCheck.webDescription': - 'वेब पर, OpenHuman आपके कंट्रोल के रनटाइम से कनेक्ट होता है। नीचे URL और auth टोकन डालें, या अपनी मशीन पर चलाने के लिए डेस्कटॉप ऐप लें।', - 'bootCheck.preferDesktop': 'सब अपने डिवाइस पर रखना चाहते हैं?', - 'bootCheck.downloadDesktop': 'डेस्कटॉप ऐप पाएं', - 'bootCheck.localRecommended': 'लोकल रन करें (सुझावित)', - 'bootCheck.localDescription': - 'आपके कंप्यूटर पर ही चलता है। सबसे तेज़, पूरी तरह प्राइवेट, कुछ सेट नहीं करना।', - 'bootCheck.cloudMode': 'क्लाउड पर चलाएं (जटिल)', - 'bootCheck.cloudDescription': - 'कहीं और होस्ट किए रनटाइम से कनेक्ट करें। 24×7 ऑनलाइन रहता है, डिवाइस चलाते रहने की ज़रूरत नहीं।', - 'bootCheck.coreRpcUrl': 'रनटाइम URL', - 'bootCheck.rpcUrlPlaceholder': 'https://core.example.com/rpc', - 'bootCheck.authToken': 'Auth टोकन', - 'bootCheck.bearerTokenPlaceholder': 'आपके रिमोट रनटाइम का bearer टोकन', - 'bootCheck.storedLocally': 'केवल इस डिवाइस पर रखा जाता है। भेजा जाता है ', - 'bootCheck.testing': 'टेस्ट हो रहा है…', - 'bootCheck.testConnection': 'कनेक्शन टेस्ट करें', - 'bootCheck.connectedOk': 'कनेक्ट हो गया। आप तैयार हैं।', - 'bootCheck.authFailed': 'वह टोकन काम नहीं किया। दोबारा चेक करके कोशिश करें।', - 'bootCheck.unreachablePrefix': 'नहीं पहुँच पाए:', - 'bootCheck.checkingCore': 'आपका रनटाइम जगा रहे हैं…', - 'bootCheck.cannotReach': 'रनटाइम तक नहीं पहुँच पाए', - 'bootCheck.cannotReachDesc': - 'आपके रनटाइम से कनेक्ट नहीं हो पाया। कोई और रनटाइम ट्राई करना चाहते हैं?', - 'bootCheck.switchMode': 'कोई और रनटाइम चुनें', - 'bootCheck.quit': 'बंद करें', - 'bootCheck.legacyDetected': 'पुराना बैकग्राउंड रनटाइम मिला', - 'bootCheck.legacyDescription': - 'इस डिवाइस पर अलग से इन्स्टॉल किया OpenHuman daemon पहले से चल रहा है। बिल्ट-इन रनटाइम शुरू होने से पहले इसे हटाना होगा।', - 'bootCheck.removing': 'हटाया जा रहा है…', - 'bootCheck.removeContinue': 'हटाएं और जारी रखें', - 'bootCheck.localNeedsRestart': 'लोकल रनटाइम को रीस्टार्ट चाहिए', - 'bootCheck.localNeedsRestartDesc': - 'आपका लोकल रनटाइम इस ऐप से अलग वर्जन पर है। एक जल्दी रीस्टार्ट से दोनों सिंक हो जाएंगे।', - 'bootCheck.restarting': 'रीस्टार्ट हो रहा है…', - 'bootCheck.restartCore': 'रनटाइम रीस्टार्ट करें', - 'bootCheck.cloudNeedsUpdate': 'क्लाउड रनटाइम को अपडेट चाहिए', - 'bootCheck.cloudNeedsUpdateDesc': - 'आपका क्लाउड रनटाइम इस ऐप से अलग वर्जन पर है। अपडेटर चलाएं ताकि दोनों सिंक हो जाएं।', - 'bootCheck.updating': 'अपडेट हो रहा है…', - 'bootCheck.updateCloudCore': 'क्लाउड रनटाइम अपडेट करें', - 'bootCheck.versionCheckFailed': 'रनटाइम वर्जन चेक विफल', - 'bootCheck.versionCheckFailedDesc': - 'आपका रनटाइम चल रहा है लेकिन वर्जन रिपोर्ट नहीं कर रहा। शायद पुराना हो। जारी रखने के लिए रीस्टार्ट या अपडेट करें।', - 'bootCheck.working': 'काम हो रहा है…', - 'bootCheck.restartUpdateCore': 'रनटाइम रीस्टार्ट / अपडेट करें', - 'bootCheck.unexpectedError': 'अनपेक्षित बूट-चेक एरर', - 'bootCheck.actionFailed': 'कुछ गड़बड़ हो गई। दोबारा कोशिश करें।', - 'bootCheck.portConflictTitle': 'ऐप इंजन शुरू नहीं हो सका', - 'bootCheck.portConflictBody': - 'कोई अन्य प्रक्रिया उस नेटवर्क पोर्ट का उपयोग कर रही है जो OpenHuman को चाहिए। हम इसे स्वचालित रूप से ठीक करने का प्रयास करेंगे।', - 'bootCheck.portConflictFixButton': 'स्वचालित रूप से ठीक करें', - 'bootCheck.portConflictFixing': 'ठीक हो रहा है…', - 'bootCheck.portConflictFixFailed': - 'स्वचालित सुधार काम नहीं आया। कृपया अपना कंप्यूटर पुनः आरंभ करें और पुनः प्रयास करें।', - 'notifications.justNow': 'अभी-अभी', - 'notifications.minAgo': '{n}मि. पहले', - 'notifications.hrAgo': '{n}घं. पहले', - 'notifications.dayAgo': '{n}दि. पहले', - 'notifications.category.messages': 'मैसेज', - 'notifications.category.agents': 'एजेंट', - 'notifications.category.skills': 'स्किल्स', - 'notifications.category.system': 'सिस्टम', - 'notifications.category.meetings': 'मीटिंग', - 'notifications.category.reminders': 'रिमाइंडर', - 'notifications.category.important': 'महत्वपूर्ण', - 'about.update.status.checking': 'चेक हो रहा है...', - 'about.update.status.available': 'v{version} उपलब्ध है', - 'about.update.status.availableNoVersion': 'अपडेट उपलब्ध है', - 'about.update.status.downloading': 'डाउनलोड हो रहा है...', - 'about.update.status.readyToInstall': 'v{version} इन्स्टॉल के लिए तैयार', - 'about.update.status.readyToInstallNoVersion': - 'नया वर्जन डाउनलोड हो गया और तैयार है। लागू करने के लिए रीस्टार्ट करें।', - 'about.update.status.installing': 'इन्स्टॉल हो रहा है...', - 'about.update.status.restarting': 'रीस्टार्ट हो रहा है...', - 'about.update.status.upToDate': 'आप लेटेस्ट वर्जन चला रहे हैं।', - 'about.update.status.error': 'अपडेट चेक विफल', - 'about.update.status.default': 'अपडेट चेक करें', - 'welcome.connectionFailed': 'कनेक्शन विफल: {status} {statusText}', - 'welcome.connectionFailedMsg': 'कनेक्शन विफल: {message}', - 'welcome.continueLocally': 'स्थानीय स्तर पर जारी रखें', - 'welcome.localSessionStarting': 'स्थानीय सत्र प्रारंभ हो रहा है...', - 'welcome.localSessionDesc': - 'ऑफ़लाइन स्थानीय प्रोफ़ाइल का उपयोग करता है और TinyHumans OAuth को छोड़ देता है।', - 'chat.agentChatDesc': 'एजेंट के साथ डायरेक्ट चैट सेशन खोलें।', - 'channels.activeRouteValue': '{channel} द्वारा {authMode}', - 'privacy.dataKind.messages': 'मैसेज', - 'privacy.dataKind.agents': 'एजेंट', - 'privacy.dataKind.skills': 'स्किल्स', - 'privacy.dataKind.system': 'सिस्टम', - 'privacy.dataKind.meetings': 'मीटिंग', - 'privacy.dataKind.reminders': 'रिमाइंडर', - 'privacy.dataKind.important': 'महत्वपूर्ण', - 'onboarding.enableLocalAI': 'लोकल AI चालू करें', - 'onboarding.skills.status.available': 'उपलब्ध', - 'onboarding.skills.status.connected': 'कनेक्टेड', - 'onboarding.skills.status.connecting': 'कनेक्ट हो रहा है', - 'onboarding.skills.status.error': 'एरर', - 'onboarding.skills.status.unavailable': 'उपलब्ध नहीं', - 'composio.statusUnavailable': 'स्टेटस उपलब्ध नहीं', - 'composio.envVarOverrides': 'सेट है तो यह सेटिंग ओवरराइड होती है।', - 'memory.day.sun': 'रवि', - 'memory.day.mon': 'सोम', - 'memory.day.tue': 'मंगल', - 'memory.day.wed': 'बुध', - 'memory.day.thu': 'गुरु', - 'memory.day.fri': 'शुक्र', - 'memory.day.sat': 'शनि', - 'memory.ingesting': 'इन्जेस्ट हो रहा है', - 'memory.ingestionQueued': 'क्यू में है', - 'memory.ingestingTitle': '{title} इन्जेस्ट हो रहा है', - 'mic.noAudioCaptured': 'कोई ऑडियो कैप्चर नहीं हुआ', - 'mic.noSpeechDetected': 'कोई बोलना नहीं मिला', - 'mic.lowConfidenceResult': 'ऑडियो स्पष्ट रूप से समझ नहीं आया — कृपया पुनः प्रयास करें', - 'mic.failedToStopRecording': 'रिकॉर्डिंग रोकने में दिक्कत: {message}', - 'mic.transcriptionFailed': 'ट्रांसक्रिप्शन विफल: {message}', - 'reflections.kind.retrospective': 'रेट्रोस्पेक्टिव', - 'reflections.kind.derivedFact': 'डिराइव्ड फैक्ट', - 'reflections.kind.moodInsight': 'मूड इनसाइट', - 'reflections.kind.relationshipInsight': 'रिलेशनशिप इनसाइट', - 'graph.tooltip.summary': 'सारांश', - 'graph.tooltip.contact': 'कॉन्टैक्ट', - 'localModel.usage.never': 'कभी नहीं', - 'localModel.usage.mediumLoad': 'मीडियम लोड', - 'localModel.usage.lowLoad': 'लो लोड', - 'localModel.usage.idleMode': 'आइडल मोड', - 'localModel.rebootstrapComplete': 'मॉडल री-बूटस्ट्रैप पूरा हुआ।', - 'localModel.modelsVerified': 'लोकल मॉडल वेरिफाई हो गए।', - 'accounts.addModal.allConnected': 'सब कनेक्टेड', - 'accounts.addModal.title': 'अकाउंट जोड़ें', - 'accounts.respondQueue.empty': 'खाली है', - 'accounts.respondQueue.hide': 'उत्तर कतार छिपाएँ', - 'accounts.respondQueue.loadFailed': 'रिस्पॉन्ड क्यू लोड नहीं हो पाई', - 'accounts.respondQueue.loading': 'क्यू लोड हो रही है…', - 'accounts.respondQueue.pending': 'पेंडिंग', - 'accounts.respondQueue.show': 'उत्तर कतार दिखाएँ', - 'accounts.respondQueue.title': 'रिस्पॉन्ड क्यू', - 'accounts.webviewHost.almostReady': 'लगभग तैयार है...', - 'accounts.webviewHost.loadTimeout': 'Webview लोड टाइमआउट', - 'accounts.webviewHost.loading': '{providerName} लोड हो रहा है...', - 'accounts.webviewHost.loadingAccount': 'अकाउंट लोड हो रहा है', - 'accounts.webviewHost.restoringSession': 'सेशन रिस्टोर हो रहा है...', - 'accounts.webviewHost.retryLoading': 'दोबारा लोड करें', - 'accounts.webviewHost.takingLonger': '{providerName} उम्मीद से ज़्यादा समय ले रहा है।', - 'accounts.webviewHost.timeoutHint': 'टाइमआउट हिंट', - 'app.connectionBadge.composio': 'Composio', - 'app.connectionBadge.messaging': 'मैसेजिंग', - 'app.connectionIndicator.connected': 'OpenHuman AI से कनेक्टेड 🚀', - 'app.connectionIndicator.connecting': 'कनेक्ट हो रहा है', - 'app.connectionIndicator.coreOffline': 'कोर ऑफलाइन', - 'app.connectionIndicator.disconnected': 'डिसकनेक्टेड', - 'app.connectionIndicator.offline': 'ऑफलाइन', - 'app.connectionIndicator.reconnecting': 'पुनः कनेक्ट हो रहा है…', - 'app.errorFallback.componentStack': 'कम्पोनेंट स्टैक', - 'app.errorFallback.downloadLatest': 'लेटेस्ट डाउनलोड करें', - 'app.errorFallback.heading': 'शीर्षक', - 'app.errorFallback.hint': 'संकेत', - 'app.errorFallback.reloadApp': 'ऐप रिलोड करें', - 'app.errorFallback.subheading': 'उपशीर्षक', - 'app.errorFallback.tryRecover': 'रिकवर करने की कोशिश करें', - 'app.localAiDownload.installing': 'इन्स्टॉल हो रहा है...', - 'app.localAiDownload.preparing': 'तैयार हो रहा है...', - 'app.openhumanLink.accounts.continueWith': '{label} साइन-इन के साथ जारी रखें', - 'app.openhumanLink.accounts.done': 'हो गया', - 'app.openhumanLink.accounts.intro': 'परिचय', - 'app.openhumanLink.accounts.webviewNote': 'वेबव्यू नोट', - 'app.openhumanLink.billing.openDashboard': 'डैशबोर्ड खोलें', - 'app.openhumanLink.billing.stayOnTrial': 'ट्रायल पर रहें', - 'app.openhumanLink.billing.trialCredit': 'ट्रायल क्रेडिट', - 'app.openhumanLink.billing.trialDesc': 'ट्रायल विवरण', - 'app.openhumanLink.defaultBody': - 'पॉपअप में अभी तैयार नहीं है। जब आवश्यकता हो तो पूर्ण सेटिंग्स पृष्ठ खोलें।', - 'app.openhumanLink.discord.intro': 'परिचय', - 'app.openhumanLink.discord.openInvite': 'इनवाइट खोलें', - 'app.openhumanLink.discord.perk1': 'लाभ 1', - 'app.openhumanLink.discord.perk2': 'लाभ 2', - 'app.openhumanLink.discord.perk3': 'लाभ 3', - 'app.openhumanLink.discord.perk4': 'लाभ 4', - 'app.openhumanLink.done': 'हो गया', - 'app.openhumanLink.loadingChannelSetup': 'चैनल सेटअप लोड हो रहा है', - 'app.openhumanLink.maybeLater': 'शायद बाद में', - 'app.openhumanLink.notifications.asking': 'OS से पूछ रहे हैं…', - 'app.openhumanLink.notifications.blocked': 'ब्लॉक्ड', - 'app.openhumanLink.notifications.blockedStep1': 'ब्लॉक्ड चरण 1', - 'app.openhumanLink.notifications.blockedStep2': 'ब्लॉक्ड चरण 2', - 'app.openhumanLink.notifications.blockedStep3': 'ब्लॉक्ड चरण 3', - 'app.openhumanLink.notifications.intro': 'परिचय', - 'app.openhumanLink.notifications.promptHint': 'प्रॉम्प्ट संकेत', - 'app.openhumanLink.notifications.retry': 'टेस्ट नोटिफिकेशन फिर भेजें', - 'app.openhumanLink.notifications.send': 'टेस्ट नोटिफिकेशन भेजें', - 'app.openhumanLink.notifications.sendFailed': 'भेजा नहीं जा सका: {error}', - 'app.openhumanLink.notifications.sent': - 'टेस्ट नोटिफ़िकेशन भेज दिया गया। यदि आपको प्राप्त नहीं हुआ, तो System Settings → Notifications → OpenHuman पर जाएँ, Allow Notifications चालू करें, और Banner Style को Persistent पर सेट करें।', - 'app.openhumanLink.skipForNow': 'अभी के लिए स्किप करें', - 'app.openhumanLink.telegramUnavailable': 'Telegram उपलब्ध नहीं', - 'app.openhumanLink.title.accounts': 'अपने ऐप्स कनेक्ट करें', - 'app.openhumanLink.title.billing': 'बिलिंग और क्रेडिट', - 'app.openhumanLink.title.discord': 'कम्युनिटी जॉइन करें', - 'app.openhumanLink.title.messaging': 'चैट चैनल कनेक्ट करें', - 'app.openhumanLink.title.notifications': 'नोटिफिकेशन की अनुमति दें', - 'app.persistRehydration.body': 'विवरण', - 'app.persistRehydration.heading': 'शीर्षक', - 'app.persistRehydration.resetCta': 'रीसेट हो रहा है…', - 'app.persistRehydration.resetting': 'रीसेट हो रहा है…', - 'app.routeLoading.initializing': 'OpenHuman आरंभ हो रहा है...', - 'app.update.currentlyOn': '{version}', - 'app.update.errorFallback': 'अपडेट के दौरान कुछ गड़बड़ हो गई।', - 'app.update.header.default': 'अपडेट', - 'app.update.header.error': 'अपडेट विफल', - 'app.update.header.installing': 'अपडेट इन्स्टॉल हो रहा है', - 'app.update.header.readyToInstall': 'अपडेट इन्स्टॉल के लिए तैयार', - 'app.update.header.restarting': 'रीस्टार्ट हो रहा है…', - 'app.update.later': 'बाद में', - 'app.update.newVersionReady': 'नया वर्जन इन्स्टॉल के लिए तैयार है।', - 'app.update.progress.downloaded': '{amount} डाउनलोड हुआ', - 'app.update.progress.installing': 'नया वर्जन इन्स्टॉल हो रहा है…', - 'app.update.progress.restarting': 'ऐप फिर से लॉन्च हो रहा है…', - 'app.update.progress.working': '{percent}%', - 'app.update.restartNote': 'पुनः आरंभ नोट', - 'app.update.restartNow': 'अभी रीस्टार्ट करें', - 'app.update.versionReady': 'वर्जन {newVersion} इन्स्टॉल के लिए तैयार है।', - 'channels.discord.accountLinked': 'अकाउंट लिंक हो गया', - 'channels.discord.connect': 'कनेक्ट करें', - 'channels.discord.linkTokenExpired': 'लिंक टोकन एक्सपायर हो गया। दोबारा कोशिश करें।', - 'channels.discord.linkTokenInstruction': '{token}', - 'channels.discord.linkTokenLabel': 'लिंक टोकन लेबल', - 'channels.discord.linkTokenOnce': 'लिंक टोकन एक बार', - 'channels.discord.picker.allPermissionsOk': 'बॉट के पास इस चैनल में सभी ज़रूरी परमिशन हैं।', - 'channels.discord.picker.botNotInServers': 'बॉट किसी सर्वर में नहीं है', - 'channels.discord.picker.category': 'श्रेणी', - 'channels.discord.picker.channel': 'चैनल', - 'channels.discord.picker.checkingPermissions': 'परमिशन चेक हो रही हैं', - 'channels.discord.picker.loadingChannels': 'चैनल लोड हो रहे हैं...', - 'channels.discord.picker.loadingServers': 'सर्वर लोड हो रहे हैं...', - 'channels.discord.picker.missingPermissions': 'परमिशन नहीं हैं', - 'channels.discord.picker.noChannels': 'कोई टेक्स्ट चैनल नहीं मिला', - 'channels.discord.picker.noServers': 'कोई सर्वर नहीं मिला', - 'channels.discord.picker.selectChannel': 'एक चैनल चुनें', - 'channels.discord.picker.selectServer': 'एक सर्वर चुनें', - 'channels.discord.picker.server': 'सर्वर', - 'channels.discord.picker.serverChannelSelection': 'सर्वर और चैनल चयन', - 'channels.discord.savedRestartRequired': - 'चैनल सेव हो गया। एक्टिवेट करने के लिए ऐप रीस्टार्ट करें।', - 'channels.telegram.connect': 'कनेक्ट करें', - 'channels.telegram.managedDmConnecting': 'मैनेज्ड DM कनेक्ट हो रहा है', - 'channels.telegram.managedDmTimeout': 'मैनेज्ड DM टाइमआउट', - 'channels.telegram.reconnect': 'फिर से कनेक्ट करें', - 'channels.telegram.savedRestartRequired': - 'चैनल सेव हो गया। एक्टिवेट करने के लिए ऐप रीस्टार्ट करें।', - 'channels.web.alwaysAvailable': 'हमेशा उपलब्ध', - 'channels.discord.displayName': 'Discord', - 'channels.discord.description': 'Discord के माध्यम से संदेश भेजें और प्राप्त करें।', - 'channels.discord.authMode.bot_token.description': 'अपना स्वयं का Discord बॉट टोकन प्रदान करें।', - 'channels.discord.authMode.oauth.description': - 'OpenHuman बॉट को OAuth के माध्यम से अपने Discord सर्वर पर स्थापित करें।', - 'channels.discord.authMode.managed_dm.description': - 'अपने व्यक्तिगत Discord खाते को OpenHuman बॉट से लिंक करें।', - 'channels.discord.fields.bot_token.label': 'बॉट टोकन', - 'channels.discord.fields.bot_token.placeholder': 'आपका Discord बॉट टोकन', - 'channels.discord.fields.guild_id.label': 'सर्वर (गिल्ड) आईडी', - 'channels.discord.fields.guild_id.placeholder': 'वैकल्पिक: एक विशिष्ट सर्वर तक सीमित रखें', - 'channels.telegram.displayName': 'Telegram', - 'channels.telegram.description': 'Telegram के माध्यम से संदेश भेजें और प्राप्त करें।', - 'channels.telegram.authMode.managed_dm.description': - 'OpenHuman Telegram बॉट को सीधे संदेश भेजें।', - 'channels.telegram.authMode.bot_token.description': - '@BotFather से अपना स्वयं का Telegram बॉट टोकन प्रदान करें।', - 'channels.telegram.fields.bot_token.label': 'बॉट टोकन', - 'channels.telegram.fields.bot_token.placeholder': '123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11', - 'channels.telegram.fields.allowed_users.label': 'अनुमत उपयोगकर्ता', - 'channels.telegram.fields.allowed_users.placeholder': - 'अल्पविराम से अलग किए गए Telegram उपयोक्तानाम', - 'channels.web.displayName': 'वेब', - 'channels.web.description': 'अंतर्निहित वेब यूआई के माध्यम से चैट करें।', - 'channels.web.authMode.managed_dm.description': - 'एम्बेडेड वेब चैट का उपयोग करें - किसी सेटअप की आवश्यकता नहीं है।', - 'welcome.continueLocallyExperimental': 'स्थानीय रूप से जारी रखें (प्रायोगिक)', - 'channels.yuanbao.connect': 'Connect', - 'channels.yuanbao.connecting': 'Connecting…', - 'channels.yuanbao.fieldRequired': '{field} is required', - 'channels.yuanbao.reconnect': 'Reconnect', - 'channels.yuanbao.savedRestartRequired': 'Channel saved. Restart the app to activate it.', - 'channels.yuanbao.unexpectedStatus': 'Unexpected connection status: {status}', - 'chat.approval.approve': 'Approve', - 'chat.approval.alwaysAllow': 'Always allow', - 'chat.approval.alwaysAllowHint': 'Stop asking for this tool — add it to your Always-allow list', - 'chat.approval.deciding': 'Working…', - 'chat.approval.deny': 'Deny', - 'chat.approval.error': 'Could not record your decision — try again.', - 'chat.approval.fallback': 'The agent wants to run an action that needs your approval.', - 'chat.approval.title': 'Approval needed', - 'chat.approval.tool': 'Tool:', -}; - -export default hi3; diff --git a/app/src/lib/i18n/chunks/hi-4.ts b/app/src/lib/i18n/chunks/hi-4.ts deleted file mode 100644 index 7f75e501d..000000000 --- a/app/src/lib/i18n/chunks/hi-4.ts +++ /dev/null @@ -1,489 +0,0 @@ -import type { TranslationMap } from '../types'; - -// Hindi (हिन्दी) chunk 4/5. Translated from chunks/en-4.ts. -const hi4: TranslationMap = { - 'chat.unsubscribeApproval.approve': 'स्वीकृत करें और सदस्यता समाप्त करें', - 'chat.unsubscribeApproval.approved': '✓ सफलतापूर्वक सदस्यता समाप्त की गई।', - 'chat.unsubscribeApproval.denied': '✕ रिक्वेस्ट नामंज़ूर।', - 'chat.unsubscribeApproval.deny': 'नामंज़ूर करें', - 'chat.unsubscribeApproval.processing': 'प्रोसेस हो रहा है...', - 'chat.unsubscribeApproval.title': 'सदस्यता समाप्ति अनुरोध', - 'commandPalette.ariaLabel': 'कमांड पैलेट', - 'commandPalette.description': 'विवरण', - 'commandPalette.label': 'कमांड', - 'commandPalette.noResults': 'कोई रिज़ल्ट नहीं', - 'commandPalette.placeholder': 'कोई कमांड टाइप करें या सर्च करें…', - 'commandPalette.searchAria': 'कमांड सर्च करें', - 'commandPalette.shortcutHint': 'सभी शॉर्टकट के लिए ? दबाएँ', - 'commandPalette.title': 'कमांड पैलेट', - 'composio.connect.additionalConfigRequired': 'अतिरिक्त कॉन्फिग ज़रूरी है', - 'composio.connect.atlassianSubdomainHint': 'एक्मे', - 'composio.connect.atlassianSubdomainLabel': 'Atlassian सबडोमेन लेबल', - 'composio.connect.connect': 'कनेक्ट करें', - 'composio.connect.connectionFailed': 'कनेक्शन विफल (स्थिति: {status})।', - 'composio.connect.disconnectFailed': 'डिसकनेक्ट विफल: {msg}', - 'composio.connect.disconnecting': 'डिसकनेक्ट हो रहा है…', - 'composio.connect.idleDescription': 'अपना कनेक्ट करें', - 'composio.connect.idleDescriptionSuffix': - 'खाता। हम एक ब्राउज़र विंडो खोलेंगे, आप वहाँ एक्सेस स्वीकृत करते हैं, और यह ऐप कनेक्शन को स्वचालित रूप से पहचान लेगा।', - 'composio.connect.isConnected': 'कनेक्ट है।', - 'composio.connect.manage': 'प्रबंधित करें', - 'composio.connect.needsSubdomain': 'कनेक्ट करने के लिए', - 'composio.connect.needsSubdomainSuffix': - 'अपना Atlassian सबडोमेन दर्ज करें (जैसे acme.atlassian.net के लिए acme) और पुनः प्रयास करें।', - 'composio.connect.oauthComplete': 'OAuth पूरा करने के लिए…', - 'composio.connect.oauthTimeout': 'OAuth टाइमआउट', - 'composio.connect.permissions': 'परमिशन', - 'composio.connect.permissionsDefault': 'Read + Write डिफ़ॉल्ट रूप से चालू', - 'composio.connect.permissionsNote': 'उजागर कर सकता है', - 'composio.connect.permissionsNoteSuffix': - 'OpenHuman की अपनी एजेंट अनुमतियाँ नीचे पढ़ें, लिखें और एडमिन टॉगल के रूप में नियंत्रित होती हैं।', - 'composio.connect.reopenBrowser': 'ब्राउज़र फिर से खोलें', - 'composio.connect.requestingUrl': 'कनेक्ट URL माँगा जा रहा है…', - 'composio.connect.retryConnection': 'कनेक्शन फिर से करें', - 'composio.connect.scopeLoadError': 'स्कोप प्रेफरेंस लोड नहीं हो पाई: {msg}', - 'composio.connect.scopeSaveError': '{key} स्कोप सेव नहीं हो पाया: {msg}', - 'composio.connect.subdomainInvalid': - 'केवल छोटा सबडोमेन दर्ज करें (जैसे "acme"), पूर्ण URL नहीं। इसमें केवल अक्षर, संख्याएँ और हाइफ़न होने चाहिए।', - 'composio.connect.subdomainRequired': 'जारी रखने के लिए अपना Atlassian subdomain डालें।', - 'composio.connect.dynamicsOrgNameLabel': 'Dynamics 365 संगठन का नाम', - 'composio.connect.dynamicsOrgNameHint': - 'उदाहरण के लिए, myorg.crm.dynamics.com के लिए "myorg"। केवल छोटा संगठन नाम दर्ज करें, पूरा URL नहीं।', - 'composio.connect.needsFieldsPrefix': 'कनेक्ट करने के लिए', - 'composio.connect.needsFieldsSuffix': - 'हमें कुछ अतिरिक्त जानकारी चाहिए। नीचे लापता फ़ील्ड भरें और फिर से प्रयास करें।', - 'composio.connect.requiredFieldEmpty': 'यह फ़ील्ड आवश्यक है।', - 'composio.connect.wabaIdHint': - 'अपने Meta एक्सेस टोकन का उपयोग करके GET /me/businesses फिर GET /{business_id}/owned_whatsapp_business_accounts के माध्यम से इसे प्राप्त करें।', - 'composio.connect.wabaIdLabel': 'Waba आईडी लेबल', - 'composio.connect.wabaIdRequired': - 'जारी रखने के लिए अपना WhatsApp Business Account ID (WABA ID) डालें।', - 'composio.connect.waitingFor': 'प्रतीक्षा कर रहा है', - 'composio.connect.waitingHint': 'प्रतीक्षा संकेत', - 'composio.triggers.heading': 'ट्रिगर', - 'composio.triggers.listenFrom': 'से इवेंट्स सुनें', - 'composio.triggers.loadError': 'ट्रिगर्स लोड नहीं हो सके', - 'composio.triggers.needsConfiguration': 'कॉन्फिगरेशन ज़रूरी है', - 'composio.triggers.noneAvailable': 'वर्तमान में कोई ट्रिगर उपलब्ध नहीं है', - 'conversations.taskKanban.moveLeft': 'बाएं ले जाएं', - 'conversations.taskKanban.moveRight': 'दाएं ले जाएं', - 'conversations.taskKanban.title': 'टास्क', - 'conversations.toolTimeline.turn': 'टर्न', - 'conversations.toolTimeline.workerThread': 'वर्कर थ्रेड', - 'daemon.serviceBlockingGate.body': 'विवरण', - 'daemon.serviceBlockingGate.downloadHint': 'डाउनलोड संकेत', - 'daemon.serviceBlockingGate.downloadLatest': 'नवीनतम संस्करण डाउनलोड करें', - 'daemon.serviceBlockingGate.retryCore': 'कोर पुनः प्रयास करें', - 'daemon.serviceBlockingGate.retryFailed': - 'फिर से कोशिश विफल। लेटेस्ट ऐप बिल्ड डाउनलोड करके दोबारा कोशिश करें।', - 'daemon.serviceBlockingGate.retrying': 'फिर से कोशिश हो रही है...', - 'daemon.serviceBlockingGate.title': 'OpenHuman कोर उपलब्ध नहीं है', - 'home.banners.discordSubtitle': 'Discord उपशीर्षक', - 'home.banners.discordTitle': 'हमारा Discord जॉइन करें', - 'home.banners.earlyBirdDismiss': 'अर्ली बर्ड बैनर हटाएं', - 'home.banners.earlyBirdFirstSub': 'पहली सदस्यता।', - 'home.banners.earlyBirdOn': 'अर्ली बर्ड चालू', - 'home.banners.earlyBirdTitle': 'पहले 1,000 उपयोगकर्ताओं को 60% की छूट मिलती है।', - 'home.banners.earlyBirdUseCode': 'अर्ली बर्ड कोड का उपयोग करें', - 'home.banners.getSubscription': 'सदस्यता लें', - 'home.banners.promoCreditsBody': 'प्रोमो क्रेडिट विवरण', - 'home.banners.promoCreditsTitle': '{amount}', - 'home.banners.promoCreditsUsage': 'प्रोमो क्रेडिट उपयोग', - 'intelligence.memoryChunk.detail.chunk': 'चंक', - 'intelligence.memoryChunk.detail.copyChunkId': 'Chunk ID कॉपी करें', - 'intelligence.memoryChunk.detail.embeddingInfo': 'बीजीई-एम3 1024डिम', - 'intelligence.memoryChunk.detail.noEmbedding': 'कोई एम्बेडिंग नहीं', - 'intelligence.memoryChunk.letterhead.from': 'से', - 'intelligence.memoryChunk.letterhead.to': 'को', - 'intelligence.memoryChunk.mentioned.chunkOne': '1 चंक', - 'intelligence.memoryChunk.mentioned.chunkOther': '{count} चंक', - 'intelligence.memoryChunk.mentioned.heading': 'उल्लेखित', - 'intelligence.memoryChunk.scoreBars.ariaScore': '{name} स्कोर {pct} प्रतिशत', - 'intelligence.memoryChunk.scoreBars.atThreshold': '{threshold} पर', - 'intelligence.memoryChunk.scoreBars.dropped': 'हटाया गया', - 'intelligence.memoryChunk.scoreBars.heading': 'क्यों रखा', - 'intelligence.memoryChunk.scoreBars.kept': 'रखा गया', - 'intelligence.diagram.title': 'Architecture Diagram', - 'intelligence.diagram.description': - 'Latest local architecture output from the configured diagram endpoint.', - 'intelligence.diagram.refresh': 'Refresh', - 'intelligence.diagram.refreshAria': 'Refresh diagram', - 'intelligence.diagram.emptyTitle': 'No diagram available yet', - 'intelligence.diagram.emptyDescription': - 'Generate an architecture diagram from the orchestrator and this panel will refresh from the configured local endpoint.', - 'intelligence.diagram.skillInstallCommand': 'npx skills add yizhiyanhua-ai/fireworks-tech-graph', - 'intelligence.diagram.promptExample': - 'Generate an architecture diagram of the current swarm in dark terminal style', - 'intelligence.diagram.imageAlt': 'Latest generated OpenHuman architecture diagram', - 'intelligence.diagram.refreshesEvery': 'Refreshes every {seconds}s', - 'intelligence.memoryText.entityTypePrefix': 'इकाई प्रकार', - 'intelligence.screenDebug.active': 'एक्टिव', - 'intelligence.screenDebug.app': 'ऐप', - 'intelligence.screenDebug.bounds': 'बाउंड्स', - 'intelligence.screenDebug.captureAlt': 'कैप्चर टेस्ट रिज़ल्ट', - 'intelligence.screenDebug.captureFailed': 'विफल', - 'intelligence.screenDebug.captureSuccess': 'सफल', - 'intelligence.screenDebug.captureTest': 'कैप्चर टेस्ट', - 'intelligence.screenDebug.capturing': 'कैप्चर हो रहा है', - 'intelligence.screenDebug.frames': 'फ्रेम', - 'intelligence.screenDebug.idle': 'आइडल', - 'intelligence.screenDebug.lastApp': 'आखिरी ऐप', - 'intelligence.screenDebug.mode': 'मोड', - 'intelligence.screenDebug.permAccessibility': 'Accessibility परमिशन', - 'intelligence.screenDebug.permInput': 'इनपुट परमिशन', - 'intelligence.screenDebug.permScreen': 'स्क्रीन रिकॉर्डिंग अनुमति', - 'intelligence.screenDebug.permissions': 'परमिशन', - 'intelligence.screenDebug.platformNotSupported': 'प्लेटफॉर्म सपोर्टेड नहीं', - 'intelligence.screenDebug.recentVisionSummaries': 'हाल के विज़न समरीज़', - 'intelligence.screenDebug.session': 'सेशन', - 'intelligence.screenDebug.size': 'साइज़', - 'intelligence.screenDebug.status': 'स्टेटस', - 'intelligence.screenDebug.testCapture': 'टेस्ट कैप्चर', - 'intelligence.screenDebug.time': 'समय', - 'intelligence.screenDebug.title': 'टाइटल', - 'intelligence.screenDebug.unknown': 'अज्ञात', - 'intelligence.screenDebug.visionQueue': 'विज़न क्यू', - 'intelligence.screenDebug.visionState': 'विज़न स्टेट', - 'intelligence.tasks.activeBoardOne': 'बातचीतों में 1 सक्रिय बोर्ड', - 'intelligence.tasks.activeBoardOther': 'बातचीतों में {count} सक्रिय बोर्ड', - 'intelligence.tasks.empty': 'अभी कोई एजेंट टास्क बोर्ड नहीं', - 'intelligence.tasks.emptyHint': 'खाली संकेत', - 'intelligence.tasks.failedToLoad': 'लोड नहीं हो पाया', - 'intelligence.tasks.live': 'लाइव', - 'intelligence.tasks.loadingBoards': 'टास्क बोर्ड लोड हो रहे हैं…', - 'intelligence.tasks.threadPrefix': 'थ्रेड {thread}', - 'intelligence.tasks.subtitle': 'Your tasks and agent task boards across the workspace.', - 'intelligence.tasks.newTask': 'New task', - 'intelligence.tasks.personalBoardTitle': 'Agent Tasks', - 'intelligence.tasks.personalEmpty': 'No personal tasks yet', - 'intelligence.tasks.composer.title': 'New task', - 'intelligence.tasks.composer.titleLabel': 'Title', - 'intelligence.tasks.composer.titlePlaceholder': 'What needs to be done?', - 'intelligence.tasks.composer.statusLabel': 'Status', - 'intelligence.tasks.composer.attachLabel': 'Attach to conversation', - 'intelligence.tasks.composer.attachNone': 'Personal (no conversation)', - 'intelligence.tasks.composer.objectiveLabel': 'Objective', - 'intelligence.tasks.composer.objectivePlaceholder': 'Optional — the desired outcome', - 'intelligence.tasks.composer.notesLabel': 'Notes', - 'intelligence.tasks.composer.notesPlaceholder': 'Optional notes', - 'intelligence.tasks.composer.create': 'Create task', - 'intelligence.tasks.composer.creating': 'Creating…', - 'intelligence.tasks.composer.createFailed': "Couldn't create the task", - 'notifications.card.dismiss': 'नोटिफिकेशन हटाएं', - 'notifications.card.importanceTitle': 'महत्व: {pct}%', - 'notifications.center.empty': 'अभी कोई नोटिफिकेशन नहीं', - 'notifications.center.emptyHint': 'खाली संकेत', - 'notifications.center.filterAll': 'सभी फिल्टर', - 'notifications.center.markAllRead': 'सभी पढ़ा हुआ मार्क करें', - 'notifications.center.title': 'नोटिफिकेशन', - 'oauth.button.loopbackTimeout': - 'साइन-इन का समय समाप्त हो गया — ब्राउज़र ने OAuth पुनर्निर्देशन पूरा नहीं किया। कृपया पुनः प्रयास करें।', - 'oauth.button.connecting': 'कनेक्ट हो रहा है...', - 'oauth.login.continueWith': 'के साथ जारी रखें', - 'onboarding.contextGathering.buildingDesc': 'बिल्डिंग विवरण', - 'onboarding.contextGathering.buildingProfile': 'आपकी प्रोफ़ाइल बन रही है...', - 'onboarding.contextGathering.continueToChat': 'चैट पर जाएं', - 'onboarding.contextGathering.errorDesc': - 'हम अभी आपकी पूरी प्रोफ़ाइल नहीं बना सके, लेकिन कोई बात नहीं — आप जारी रख सकते हैं और आपकी प्रोफ़ाइल समय के साथ बनती जाएगी।', - 'onboarding.contextGathering.coreAlive': - 'कोर पहुँच योग्य है — पहली बार लॉन्च करने में एक मिनट लग सकता है।', - 'onboarding.contextGathering.coreAliveProbing': 'कोर कनेक्शन की जाँच की जा रही है…', - 'onboarding.contextGathering.coreUnreachable': - 'कोर प्रतिक्रिया नहीं दे रहा है। आप जारी रख सकते हैं और बाद में पुनः प्रयास कर सकते हैं।', - 'onboarding.contextGathering.stillWorkingDesc': - 'हम आपके स्थानीय मॉडल और टूल्स को तैयार कर रहे हैं, पहली बार लॉन्च करने में 30–60 सेकंड लग सकते हैं। आप कभी भी चैट पर जा सकते हैं — प्रोफ़ाइल पृष्ठभूमि में बनती रहेगी।', - 'onboarding.contextGathering.stillWorkingTitle': 'आपकी प्रोफ़ाइल पर अब भी काम चल रहा है…', - 'onboarding.contextGathering.title': 'कॉन्टेक्स्ट गैदरिंग', - 'openhuman.team_list_teams': 'टीम सूची टीमें', - 'overlay.ariaAttention': 'ध्यान संदेश', - 'overlay.ariaCompanion': 'कंपैनियन सक्रिय', - 'overlay.ariaOrb': 'OpenHuman ओवरले', - 'overlay.ariaVoiceActive': 'वॉइस इनपुट एक्टिव', - 'overlay.companion.error': 'त्रुटि', - 'overlay.companion.listening': 'सुन रहा है…', - 'overlay.companion.pointing': 'इशारा कर रहा है…', - 'overlay.companion.speaking': 'बोल रहा है…', - 'overlay.companion.thinking': 'सोच रहा है…', - 'overlay.orbTitle': 'मूव करने के लिए खींचें · पोज़िशन रीसेट के लिए डबल-क्लिक करें', - 'pages.settings.account.connections': 'कनेक्शन', - 'pages.settings.account.connectionsDesc': 'कनेक्शन विवरण', - 'pages.settings.account.privacy': 'प्राइवेसी', - 'pages.settings.account.privacyDesc': 'गोपनीयता विवरण', - 'pages.settings.account.recoveryPhrase': 'रिकवरी फ्रेज़', - 'pages.settings.account.recoveryPhraseDesc': 'रिकवरी फ़्रेज़ विवरण', - 'pages.settings.account.team': 'टीम', - 'pages.settings.account.teamDesc': 'टीम विवरण', - 'pages.settings.accountSection.description': 'रिकवरी फ्रेज़, टीम, कनेक्शन और प्राइवेसी सेटिंग्स।', - 'pages.settings.accountSection.title': 'अकाउंट', - 'pages.settings.ai.llm': 'LLM', - 'pages.settings.ai.llmDesc': 'LLM विवरण', - 'pages.settings.ai.voice': 'वॉइस', - 'pages.settings.ai.voiceDesc': 'वॉइस विवरण', - 'pages.settings.ai.embeddings': 'एम्बेडिंग्स', - 'pages.settings.ai.embeddingsDesc': 'मेमोरी पुनर्प्राप्ति के लिए वेक्टर एन्कोडिंग मॉडल', - 'pages.settings.aiSection.description': - 'लैंग्वेज मॉडल प्रोवाइडर, लोकल Ollama और वॉइस (STT / TTS)।', - 'pages.settings.aiSection.title': 'AI', - 'pages.settings.features.desktopCompanion': 'डेस्कटॉप कंपैनियन', - 'pages.settings.features.desktopCompanionDesc': - 'स्क्रीन जागरूकता के साथ वॉयस सहायक — सुनता है, देखता है, बोलता है, इशारा करता है', - 'pages.settings.features.messagingChannels': 'मैसेजिंग चैनल', - 'pages.settings.features.messagingChannelsDesc': 'मैसेजिंग चैनल विवरण', - 'pages.settings.features.notifications': 'नोटिफिकेशन', - 'pages.settings.features.notificationsDesc': 'नोटिफ़िकेशन विवरण', - 'pages.settings.features.screenAwareness': 'स्क्रीन अवेयरनेस', - 'pages.settings.features.screenAwarenessDesc': 'स्क्रीन अवेयरनेस विवरण', - 'pages.settings.features.tools': 'टूल्स', - 'pages.settings.features.toolsDesc': 'टूल्स विवरण', - 'pages.settings.featuresSection.description': 'स्क्रीन अवेयरनेस, मैसेजिंग और टूल्स।', - 'pages.settings.featuresSection.title': 'फीचर्स', - 'privacy.dataKind.credentials': 'क्रेडेंशियल', - 'privacy.dataKind.derived': 'डिराइव्ड', - 'privacy.dataKind.diagnostics': 'डायग्नोस्टिक्स', - 'privacy.dataKind.metadata': 'मेटाडेटा', - 'privacy.dataKind.raw': 'रॉ', - 'privacy.whatLeaves.link.label': 'मेरे कंप्यूटर से क्या जाता है?', - 'rewards.community.achievementsUnlocked': '{total} में से {unlocked} उपलब्धियाँ अनलॉक हुईं', - 'rewards.community.connectDiscord': 'Discord कनेक्ट करें', - 'rewards.community.cumulativeTokens': 'कुल टोकन', - 'rewards.community.currentStreak': 'मौजूदा स्ट्रीक', - 'rewards.community.discordLinkedNotInGuild': 'Discord लिंक्ड, Guild में नहीं', - 'rewards.community.discordMember': 'सर्वर में शामिल हुए', - 'rewards.community.discordNotLinked': 'Discord लिंक्ड नहीं', - 'rewards.community.discordServer': 'Discord सर्वर', - 'rewards.community.discordStatusUnavailable': 'Discord स्टेटस उपलब्ध नहीं', - 'rewards.community.discordWaiting': 'Discord का इंतज़ार', - 'rewards.community.heroSubtitle': 'हीरो उपशीर्षक', - 'rewards.community.heroTitle': 'हीरो शीर्षक', - 'rewards.community.joinDiscord': 'Discord से जुड़ें', - 'rewards.community.loadingRewards': 'रिवॉर्ड लोड हो रहे हैं…', - 'rewards.community.locked': 'अनलॉक्ड', - 'rewards.community.retrying': 'फिर से कोशिश हो रही है…', - 'rewards.community.rolesAndRewards': 'रोल्स और रिवॉर्ड', - 'rewards.community.streakDays': '{n}', - 'rewards.community.syncPending': 'रिवॉर्ड सिंक पेंडिंग', - 'rewards.community.syncPendingDesc': 'सिंक लंबित विवरण', - 'rewards.community.syncUnavailable': 'सिंक उपलब्ध नहीं', - 'rewards.community.tryAgain': 'फिर से कोशिश हो रही है…', - 'rewards.community.unknown': 'अज्ञात', - 'rewards.community.unlocked': 'अनलॉक्ड', - 'rewards.community.yourProgress': 'आपकी प्रगति', - 'rewards.coupon.colCode': 'कोड', - 'rewards.coupon.colRedeemed': 'रिडीम हुआ', - 'rewards.coupon.colReward': 'रिवॉर्ड', - 'rewards.coupon.colStatus': 'स्टेटस', - 'rewards.coupon.loadingHistory': 'रिवॉर्ड हिस्ट्री लोड हो रही है…', - 'rewards.coupon.noCodes': 'अभी तक कोई रिवॉर्ड कोड रिडीम नहीं किया गया।', - 'rewards.coupon.pending': 'पेंडिंग', - 'rewards.coupon.placeholder': 'कूपन कोड', - 'rewards.coupon.promoCredits': 'प्रोमो क्रेडिट', - 'rewards.coupon.recentRedemptions': 'हाल के रिडेम्प्शन', - 'rewards.coupon.redeemAccepted': - '{code} स्वीकृत। आवश्यक कार्रवाई पूरी होने के बाद {amount} अनलॉक होगा।', - 'rewards.coupon.redeemButton': 'कोड रिडीम करें', - 'rewards.coupon.redeemSuccess': '{code} रिडीम किया गया। {amount} आपके क्रेडिट में जोड़ा गया।', - 'rewards.coupon.redeemedCodes': 'रिडीम हुए कोड', - 'rewards.coupon.redeeming': 'रिडीम हो रहा है...', - 'rewards.coupon.statusApplied': 'लागू', - 'rewards.coupon.statusPendingAction': 'कार्रवाई लंबित', - 'rewards.coupon.statusRedeemed': 'रिडीम किया गया', - 'rewards.coupon.subtitle': 'उपशीर्षक', - 'rewards.coupon.title': 'कूपन कोड रिडीम करें', - 'rewards.referralSection.activity': 'रेफरल एक्टिविटी', - 'rewards.referralSection.apply': 'लागू हो रहा है…', - 'rewards.referralSection.applying': 'लागू हो रहा है…', - 'rewards.referralSection.colReferredUser': 'रेफर किया यूज़र', - 'rewards.referralSection.colReward': 'रिवॉर्ड', - 'rewards.referralSection.colStatus': 'स्टेटस', - 'rewards.referralSection.colUpdated': 'अपडेट हुआ', - 'rewards.referralSection.completed': 'पूरा हुआ', - 'rewards.referralSection.copyCode': 'कोड कॉपी करें', - 'rewards.referralSection.copyFailed': 'कॉपी विफल', - 'rewards.referralSection.haveCode': 'रेफरल कोड है?', - 'rewards.referralSection.haveCodeDesc': 'कोड है विवरण', - 'rewards.referralSection.linked': 'लिंक्ड', - 'rewards.referralSection.linkedCode': '(कोड {code})', - 'rewards.referralSection.loading': 'रेफरल प्रोग्राम लोड हो रहा है…', - 'rewards.referralSection.noReferrals': 'कोई रेफरल नहीं', - 'rewards.referralSection.pendingReferrals': 'पेंडिंग रेफरल', - 'rewards.referralSection.placeholder': 'रेफरल कोड', - 'rewards.referralSection.share': 'शेयर करें', - 'rewards.referralSection.statusCompleted': 'पूरा हुआ', - 'rewards.referralSection.statusExpired': 'एक्सपायर हो गया', - 'rewards.referralSection.statusJoined': 'जॉइन हुआ', - 'rewards.referralSection.subtitle': 'उपशीर्षक', - 'rewards.referralSection.title': 'दोस्तों को इनवाइट करें, क्रेडिट कमाएं', - 'rewards.referralSection.totalEarned': 'कुल कमाया', - 'rewards.referralSection.yourCode': 'आपका कोड', - 'settings.ai.addCloudProvider': 'क्लाउड प्रदाता जोड़ें', - 'settings.ai.addProvider': 'सेव हो रहा है…', - 'settings.ai.apiKeyFieldLabel': 'API key फील्ड लेबल', - 'settings.ai.apiKeyRequired': 'जारी रखने के लिए अपनी API key पेस्ट करें।', - 'settings.ai.apiKeyStoredEncrypted': 'API key एन्क्रिप्टेड रूप में स्टोर है', - 'settings.ai.apiKeysEncrypted': 'auth-profiles.json', - 'settings.ai.clearStoredKey': 'स्टोर्ड key क्लियर करें', - 'settings.ai.connectProvider': 'प्रदाता कनेक्ट करें', - 'settings.ai.customRouting': 'कस्टम रूटिंग', - 'settings.ai.defaultResolvesTo': 'डिफ़ॉल्ट इसमें हल होता है', - 'settings.ai.discard': 'रद्द करें', - 'settings.ai.editProvider': 'प्रदाता संपादित करें', - 'settings.ai.llmProviders': 'LLM प्रोवाइडर', - 'settings.ai.llmProvidersDesc': 'LLM providers desc', - 'settings.ai.localOllama': 'लोकल (Ollama)', - 'settings.ai.modelLabel': 'मॉडल', - 'settings.ai.noCustomProviders': 'कोई कस्टम प्रोवाइडर नहीं', - 'settings.ai.openAiCompat.authHeaderExample': 'Authorization: Bearer <आपकी कुंजी>', - 'settings.ai.openAiCompat.authHeaderLabel': 'प्रामाणिक शीर्षलेख', - 'settings.ai.openAiCompat.baseUrlLabel': 'आधार URL', - 'settings.ai.openAiCompat.baseUrlUnavailable': 'अनुपलब्ध', - 'settings.ai.openAiCompat.clearKey': 'साफ़ कुंजी', - 'settings.ai.openAiCompat.description': - "Point local harnesses at this /v1 server to route through the providers configured below. Authentication uses a stable key you set here, not the app's internal core bearer.", - 'settings.ai.openAiCompat.keyConfigured': 'कुंजी कॉन्फ़िगर की गई', - 'settings.ai.openAiCompat.keyRequired': 'कुंजी आवश्यक है', - 'settings.ai.openAiCompat.rotateKey': 'कुंजी घुमाएँ', - 'settings.ai.openAiCompat.setKey': 'कुंजी सेट करें', - 'settings.ai.openAiCompat.title': 'OpenAI-संगत समापन बिंदु', - 'settings.ai.providerLabel': 'प्रोवाइडर', - 'settings.ai.routing': 'रूटिंग', - 'settings.ai.routingCustom': 'कस्टम रूटिंग', - 'settings.ai.routingDefault': 'डिफ़ॉल्ट', - 'settings.ai.routingDesc': 'रूटिंग विवरण', - 'settings.ai.saveChanges': 'सेव हो रहा है…', - 'settings.ai.saving': 'सेव हो रहा है…', - 'settings.ai.unsavedChange': 'असहेजा परिवर्तन', - 'settings.ai.unsavedChanges': 'असहेजे परिवर्तन', - 'settings.ai.workloadGroupBackground': 'बैकग्राउंड वर्कलोड ग्रुप', - 'settings.ai.workloadGroupChat': 'चैट वर्कलोड ग्रुप', - 'settings.autocomplete.appFilter.acceptSuggestion': 'सुझाव एक्सेप्ट करें', - 'settings.autocomplete.appFilter.contextOverride': 'कॉन्टेक्स्ट ओवरराइड (वैकल्पिक)', - 'settings.autocomplete.appFilter.debugFocus': 'डिबग फोकस', - 'settings.autocomplete.appFilter.getSuggestion': 'सुझाव पाएं', - 'settings.autocomplete.appFilter.liveLogs': 'लाइव लॉग्स', - 'settings.autocomplete.appFilter.noLogs': ') :', - 'settings.autocomplete.appFilter.refreshStatus': 'रिफ्रेश हो रहा है…', - 'settings.autocomplete.appFilter.refreshing': 'रिफ्रेश हो रहा है…', - 'settings.autocomplete.appFilter.runtime': 'रनटाइम', - 'settings.autocomplete.appFilter.test': 'टेस्ट', - 'settings.autocomplete.completionStyle.acceptedCompletion': - '{count} स्वीकृत कम्प्लीशन संग्रहीत — भविष्य के सुझावों को निजीकृत करने के लिए उपयोग किया गया।', - 'settings.autocomplete.completionStyle.acceptedCompletions': - '{count} स्वीकृत कम्प्लीशन संग्रहीत — भविष्य के सुझावों को निजीकृत करने के लिए उपयोग किया गया।', - 'settings.autocomplete.completionStyle.clearHistory': 'क्लियर हो रहा है…', - 'settings.autocomplete.completionStyle.clearing': 'क्लियर हो रहा है…', - 'settings.autocomplete.completionStyle.debounce': 'डिबाउंस (ms)', - 'settings.autocomplete.completionStyle.enabled': 'चालू है', - 'settings.autocomplete.completionStyle.maxChars': 'मैक्स कैरेक्टर', - 'settings.autocomplete.completionStyle.noHistory': - 'अभी कोई एक्सेप्टेड कम्पलीशन नहीं। पर्सनलाइज़ेशन शुरू करने के लिए Tab से सुझाव एक्सेप्ट करें।', - 'settings.autocomplete.completionStyle.overlayTtl': 'ओवरले TTL (ms)', - 'settings.autocomplete.completionStyle.personalizationHistory': 'पर्सनलाइज़ेशन हिस्ट्री', - 'settings.autocomplete.completionStyle.styleExamples': 'स्टाइल उदाहरण (एक प्रति लाइन)', - 'settings.autocomplete.completionStyle.styleInstructions': 'स्टाइल इंस्ट्रक्शन', - 'settings.billing.autoRecharge.addAmount': 'यह राशि जोड़ें', - 'settings.billing.autoRecharge.addCard': 'कार्ड जोड़ें', - 'settings.billing.autoRecharge.amountHint': 'राशि संकेत', - 'settings.billing.autoRecharge.defaultCard': 'डिफ़ॉल्ट कार्ड', - 'settings.billing.autoRecharge.lastRechargeFailed': 'आखिरी रिचार्ज विफल', - 'settings.billing.autoRecharge.lastRecharged': 'आखिरी रिचार्ज', - 'settings.billing.autoRecharge.noCards': 'कोई कार्ड नहीं', - 'settings.billing.autoRecharge.paymentMethods': 'पेमेंट तरीके', - 'settings.billing.autoRecharge.rechargeInProgress': 'रिचार्ज हो रहा है', - 'settings.billing.autoRecharge.rechargeWhen': 'बैलेंस इससे कम होने पर रिचार्ज करें', - 'settings.billing.autoRecharge.saveSettings': 'सेव हो रहा है…', - 'settings.billing.autoRecharge.saving': 'सेव हो रहा है…', - 'settings.billing.autoRecharge.setDefault': ':', - 'settings.billing.autoRecharge.subtitle': 'उपशीर्षक', - 'settings.billing.autoRecharge.title': 'ऑटो-रिचार्ज चालू करें', - 'settings.billing.autoRecharge.toggleAriaLabel': 'ऑटो-रिचार्ज टॉगल करें', - 'settings.billing.autoRecharge.weeklyLimit': 'साप्ताहिक खर्च सीमा', - 'settings.billing.history.desc': 'विवरण', - 'settings.billing.history.empty': 'खाली है', - 'settings.billing.history.openPortal': 'पोर्टल खोलें', - 'settings.billing.history.posted': 'पोस्ट हुआ', - 'settings.billing.history.title': 'शीर्षक', - 'settings.billing.inferenceBudget.cycleEnds': 'साइकल खत्म होती है', - 'settings.billing.inferenceBudget.exhausted': 'खत्म हो गया', - 'settings.billing.inferenceBudget.loadError': 'लोड एरर', - 'settings.billing.inferenceBudget.noBudgetDesc': 'कोई बजट विवरण नहीं', - 'settings.billing.inferenceBudget.noRecurringBudget': 'कोई रेकरिंग बजट नहीं', - 'settings.billing.inferenceBudget.remaining': 'बचा हुआ', - 'settings.billing.inferenceBudget.tenHourCap': 'दस घंटे की सीमा', - 'settings.billing.inferenceBudget.title': 'शीर्षक', - 'settings.billing.payAsYouGo.available': 'उपलब्ध', - 'settings.billing.payAsYouGo.chargeCustomAmount': 'खुल रहा है…', - 'settings.billing.payAsYouGo.chooseTopUpDesc': 'टॉप अप चुनें विवरण', - 'settings.billing.payAsYouGo.chooseTopUpTitle': 'टॉप अप चुनें शीर्षक', - 'settings.billing.payAsYouGo.creditBalanceDesc': 'क्रेडिट बैलेंस विवरण', - 'settings.billing.payAsYouGo.creditBalanceTitle': 'क्रेडिट बैलेंस शीर्षक', - 'settings.billing.payAsYouGo.customAmount': 'कस्टम राशि', - 'settings.billing.payAsYouGo.enterAmount': 'राशि डालें', - 'settings.billing.payAsYouGo.opening': 'खोला जा रहा है', - 'settings.billing.payAsYouGo.promotionalCredits': 'प्रमोशनल क्रेडिट', - 'settings.billing.payAsYouGo.topUpBalance': 'बैलेंस टॉप-अप', - 'settings.billing.payAsYouGo.topUpCredits': 'क्रेडिट टॉप अप करें', - 'settings.billing.payAsYouGo.unableToLoad': 'बैलेंस लोड नहीं हो पाया।', - 'settings.billing.subscription.annual': 'वार्षिक', - 'settings.billing.subscription.billedAnnually': 'सालाना बिल होता है', - 'settings.billing.subscription.chooseSubtitle': 'उपशीर्षक चुनें', - 'settings.billing.subscription.chooseTitle': 'शीर्षक चुनें', - 'settings.billing.subscription.cryptoDesc': 'क्रिप्टो विवरण', - 'settings.billing.subscription.cryptoQuestion': 'क्रिप्टो प्रश्न', - 'settings.billing.subscription.current': 'मौजूदा', - 'settings.billing.subscription.currentPlan': 'मौजूदा प्लान', - 'settings.billing.subscription.monthly': 'मासिक', - 'settings.billing.subscription.paymentConfirmed': 'पेमेंट कन्फर्म हुई', - 'settings.billing.subscription.perMonth': 'प्रति माह', - 'settings.billing.subscription.popular': 'लोकप्रिय', - 'pages.settings.account.migration': 'किसी अन्य असिस्टेंट से इम्पोर्ट करें', - 'pages.settings.account.migrationDesc': - 'OpenClaw (और जल्द ही Hermes) से मेमोरी और नोट्स इस वर्कस्पेस में माइग्रेट करें।', - 'composio.connect.scope.read': 'पढ़ें', - 'composio.connect.scope.readHint': 'एजेंट को इस कनेक्शन से डेटा पढ़ने की अनुमति दें।', - 'composio.connect.scope.write': 'लिखो', - 'composio.connect.scope.writeHint': - 'एजेंट को इस कनेक्शन के माध्यम से डेटा बनाने या संशोधित करने की अनुमति दें।', - 'composio.connect.scope.admin': 'व्यवस्थापक', - 'composio.connect.scope.adminHint': - 'एजेंट को सेटिंग्स, अनुमतियाँ, या विनाशकारी कार्रवाइयां प्रबंधित करने की अनुमति दें।', - 'pages.settings.composioSection.title': 'Composio', - 'pages.settings.composioSection.description': - 'Composio द्वारा संचालित एकीकरण के लिए रूटिंग, ट्रिगर और इतिहास।', - 'pages.settings.account.walletBalances': 'Wallet Balances', - 'pages.settings.account.walletBalancesDesc': 'View multi-chain balances for your local wallet', - 'walletBalances.title': 'Wallet Balances', - 'walletBalances.refresh': 'Refresh', - 'walletBalances.loading': 'Loading balances…', - 'walletBalances.retry': 'Retry', - 'walletBalances.emptyState': 'No wallet accounts yet — set up a wallet in Recovery Phrase.', - 'walletBalances.copyAddress': 'Copy address', - 'walletBalances.providerMissing': 'provider unavailable', - 'walletBalances.rawBalance': 'Raw: {raw}', - 'walletBalances.errorGeneric': - 'Unable to load wallet balances. Set up your wallet in Recovery Phrase and try again.', - 'conversations.taskKanban.approval.default': 'Default', - 'conversations.taskKanban.approval.notRequired': 'Not required', - 'conversations.taskKanban.approval.notRequiredBadge': 'no approval', - 'conversations.taskKanban.approval.required': 'Required', - 'conversations.taskKanban.approval.requiredBadge': 'approval', - 'conversations.taskKanban.approval.requiredBeforeExecution': 'Required before execution', - 'conversations.taskKanban.briefButton': 'Task brief', - 'conversations.taskKanban.briefTitle': 'Task brief', - 'conversations.taskKanban.closeBrief': 'Close task brief', - 'conversations.taskKanban.field.acceptanceCriteria': 'Acceptance criteria', - 'conversations.taskKanban.field.allowedTools': 'Allowed tools', - 'conversations.taskKanban.field.approval': 'Approval', - 'conversations.taskKanban.field.assignedAgent': 'Assigned agent', - 'conversations.taskKanban.field.blocker': 'Blocker', - 'conversations.taskKanban.field.evidence': 'Evidence', - 'conversations.taskKanban.field.notes': 'Notes', - 'conversations.taskKanban.field.objective': 'Objective', - 'conversations.taskKanban.field.plan': 'Plan', - 'conversations.taskKanban.field.status': 'Status', - 'conversations.taskKanban.field.title': 'Title', - 'conversations.taskKanban.saveChanges': 'Save changes', - 'conversations.taskKanban.deleteCard': 'Delete', - 'conversations.taskKanban.updateFailed': 'Could not update task; changes were not saved.', -}; - -export default hi4; diff --git a/app/src/lib/i18n/chunks/hi-5.ts b/app/src/lib/i18n/chunks/hi-5.ts deleted file mode 100644 index 39f837f28..000000000 --- a/app/src/lib/i18n/chunks/hi-5.ts +++ /dev/null @@ -1,1019 +0,0 @@ -import type { TranslationMap } from '../types'; - -// Hindi (हिन्दी) chunk 5/5. Translated from chunks/en-5.ts. -const hi5: TranslationMap = { - 'settings.billing.subscription.save': '{pct}', - 'settings.billing.subscription.upgrade': 'अपग्रेड करें', - 'settings.billing.subscription.waiting': 'इंतज़ार हो रहा है', - 'settings.billing.subscription.waitingPayment': 'पेमेंट का इंतज़ार', - 'settings.composio.apiKeyDesc': 'इस डिवाइस पर वर्तमान में एक Composio API कुंजी संग्रहीत है।', - 'settings.composio.apiKeyLabel': 'Composio API कुंजी', - 'settings.composio.apiKeyStored': 'API कुंजी संग्रहीत', - 'settings.composio.apiKeyStoredPlaceholder': '••••••••••••••••', - 'settings.composio.clearedToBackend': 'Backend मोड पर स्विच हुआ', - 'settings.composio.confirmItem1': 'app.composio.dev पर API कुंजी के साथ एक खाता', - 'settings.composio.confirmItem2': - 'अपने व्यक्तिगत Composio खाते के माध्यम से प्रत्येक एकीकरण को फिर से लिंक करना', - 'settings.composio.confirmItem3': - 'नोट: Composio ट्रिगर्स (रीयल-टाइम वेबहुक्स) डायरेक्ट मोड में अभी फायर नहीं होते — केवल सिंक्रोनस टूल कॉल्स', - 'settings.composio.confirmNeedItems': 'आपको चाहिए:', - 'settings.composio.confirmSwitch': 'मैं समझ गया, डायरेक्ट पर स्विच करें', - 'settings.composio.confirmTitle': '⚠️ डायरेक्ट मोड पर स्विच कर रहे हैं', - 'settings.composio.confirmWarning': - 'आपके मौजूदा एकीकरण (Gmail, Slack, GitHub, आदि OpenHuman के माध्यम से लिंक किए गए) दिखाई नहीं देंगे — वे OpenHuman-प्रबंधित Composio टेनेंट में रहते हैं।', - 'settings.composio.intro': - 'Composio 250+ बाहरी ऐप्स को टूल्स के रूप में एकीकृत करता है जिन्हें आपका एजेंट कॉल कर सकता है। चुनें कि वे टूल कॉल कैसे रूट किए जाएँ।', - 'settings.composio.modeDirect': 'डायरेक्ट (अपनी API key लाएं)', - 'settings.composio.modeDirectDesc': - 'कॉल सीधे backend.composio.dev पर जाती हैं। संप्रभु / ऑफ़लाइन-अनुकूल। टूल निष्पादन सिंक्रोनस रूप से कार्य करता है; रीयल-टाइम ट्रिगर वेबहुक्स अभी डायरेक्ट मोड में रूट नहीं हैं (फॉलो-अप मुद्दा)।', - 'settings.composio.modeManaged': 'मैनेज्ड (OpenHuman मैनेज करेगा)', - 'settings.composio.modeManagedDesc': - 'OpenHuman हमारे बैकएंड के माध्यम से टूल कॉल्स को प्रॉक्सी करता है (अनुशंसित)। प्रमाणीकरण ब्रोकर किया जाता है; आप कभी भी Composio API कुंजी पेस्ट नहीं करते। वेबहुक्स पूरी तरह से रूट किए जाते हैं।', - 'settings.composio.routingMode': 'रूटिंग मोड', - 'settings.composio.saveErrorNoKey': - 'सहेजने में विफल। डायरेक्ट मोड के लिए गैर-रिक्त API कुंजी आवश्यक है।', - 'settings.composio.saving': 'सेव हो रहा है…', - 'settings.composio.switching': 'स्विच हो रहा है…', - 'settings.cron.jobs.desc': 'विवरण', - 'settings.cron.jobs.empty': 'कोई कोर cron job नहीं मिला।', - 'settings.cron.jobs.lastStatus': 'आखिरी स्टेटस', - 'settings.cron.jobs.loading': 'Cron jobs लोड हो रही हैं...', - 'settings.cron.jobs.loadingRuns': 'रन लोड हो रहे हैं', - 'settings.cron.jobs.nextRun': 'अगला रन', - 'settings.cron.jobs.pause': 'रोकें', - 'settings.cron.jobs.paused': 'रोका गया', - 'settings.cron.jobs.recentRuns': 'हाल के रन', - 'settings.cron.jobs.removing': 'हटाया जा रहा है', - 'settings.cron.jobs.resume': 'फिर शुरू करें', - 'settings.cron.jobs.runningNow': 'अभी चल रहा है', - 'settings.cron.jobs.saving': 'सेव हो रहा है…', - 'settings.cron.jobs.schedule': 'शेड्यूल', - 'settings.cron.jobs.title': 'कोर Cron Jobs', - 'settings.cron.jobs.viewRuns': 'रन देखें', - 'settings.localModel.deviceCapability.active': 'एक्टिव', - 'settings.localModel.deviceCapability.appliedTier': 'लागू टियर', - 'settings.localModel.deviceCapability.applying': 'लागू हो रहा है', - 'settings.localModel.deviceCapability.cores': '{count}', - 'settings.localModel.deviceCapability.couldNotLoadPresets': 'प्रीसेट लोड नहीं हो पाई', - 'settings.localModel.deviceCapability.cpu': 'CPU', - 'settings.localModel.deviceCapability.customModelIds': 'कस्टम मॉडल IDs', - 'settings.localModel.deviceCapability.detected': 'डिटेक्ट हुआ', - 'settings.localModel.deviceCapability.disabled': 'बंद है', - 'settings.localModel.deviceCapability.disabledDesc': 'अक्षम विवरण', - 'settings.localModel.deviceCapability.downloadingModels': '(मॉडल डाउनलोड हो रहे हैं)', - 'settings.localModel.deviceCapability.downloadingSetupDesc': - 'OllamaSetup इन्स्टॉलर (~2 GB) डाउनलोड और अनपैक हो रहा है। पहली इन्स्टॉल पर एक मिनट लग सकता है।', - 'settings.localModel.deviceCapability.failedToApplyPreset': 'प्रीसेट लागू नहीं हो पाई', - 'settings.localModel.deviceCapability.gpu': 'GPU', - 'settings.localModel.deviceCapability.installFailed': 'Ollama इन्स्टॉल विफल', - 'settings.localModel.deviceCapability.installFailedDesc': - 'Ollama यूज़ेबल होने से पहले इन्स्टॉलर बंद हो गया। दोबारा कोशिश करें या ollama.com से मैन्युअली इन्स्टॉल करें।', - 'settings.localModel.deviceCapability.installFirst': 'पहले Ollama चलाएँ।', - 'settings.localModel.deviceCapability.installFirstDesc': - 'स्थानीय टियर बाहरी रूप से प्रबंधित Ollama एंडपॉइंट पर निर्भर हैं। इसे स्वयं प्रारंभ करें, अपने इच्छित मॉडल खींचें, और जब तक रनटाइम पहुँच योग्य न हो तब तक "Disabled (cloud fallback)" का उपयोग करते रहें।', - 'settings.localModel.deviceCapability.installOllamaFirst': - 'इस टियर का उपयोग करने के लिए पहले Ollama चलाएँ', - 'settings.localModel.deviceCapability.installingOllama': 'Ollama इन्स्टॉल हो रहा है', - 'settings.localModel.deviceCapability.loadingDeviceInfo': 'डिवाइस जानकारी लोड हो रही है', - 'settings.localModel.deviceCapability.localAiDisabled': - 'लोकल AI बंद है — क्लाउड फ़ॉलबैक इस्तेमाल हो रहा है।', - 'settings.localModel.deviceCapability.modelTier': 'मॉडल टियर', - 'settings.localModel.deviceCapability.needsOllama': 'Ollama ज़रूरी है', - 'settings.localModel.deviceCapability.notDetected': 'डिटेक्ट नहीं हुआ', - 'settings.localModel.deviceCapability.ram': 'RAM', - 'settings.localModel.deviceCapability.recommended': 'सुझावित', - 'settings.localModel.deviceCapability.retryInstall': 'फिर से कोशिश हो रही है…', - 'settings.localModel.deviceCapability.retrying': 'फिर से कोशिश हो रही है…', - 'settings.localModel.deviceCapability.starting': 'शुरू हो रहा है…', - 'settings.localModel.download.audioPathPlaceholder': 'ऑडियो फाइल का Absolute path', - 'settings.localModel.download.capabilityAssets': 'कैपेबिलिटी असेट्स', - 'settings.localModel.download.downloading': 'डाउनलोड हो रहा है...', - 'settings.localModel.download.embeddingPlaceholder': 'एक इनपुट स्ट्रिंग प्रति लाइन...', - 'settings.localModel.download.noThinkMode': 'नो थिंक मोड', - 'settings.localModel.download.promptPlaceholder': - 'कोई भी prompt टाइप करें और लोकल मॉडल पर चलाएं...', - 'settings.localModel.download.quantizationPref': 'क्वांटाइज़ेशन प्राथमिकता', - 'settings.localModel.download.runEmbeddingTest': 'चल रहा है...', - 'settings.localModel.download.runPromptTest': 'प्रॉम्प्ट टेस्ट चलाएँ', - 'settings.localModel.download.runSummaryTest': 'सारांश टेस्ट चलाएँ', - 'settings.localModel.download.runTranscriptionTest': 'चल रहा है...', - 'settings.localModel.download.runTtsTest': 'चल रहा है...', - 'settings.localModel.download.runVisionTest': 'चल रहा है...', - 'settings.localModel.download.running': 'चल रहा है...', - 'settings.localModel.download.runningPrompt': 'Prompt चल रहा है', - 'settings.localModel.download.summarizePlaceholder': - 'लोकल मॉडल से समराइज़ करने के लिए टेक्स्ट पेस्ट करें...', - 'settings.localModel.download.testCustomPrompt': 'कस्टम Prompt टेस्ट करें', - 'settings.localModel.download.testEmbeddings': 'एम्बेडिंग टेस्ट करें', - 'settings.localModel.download.testSummarization': 'समराइज़ेशन टेस्ट करें', - 'settings.localModel.download.testVisionPrompt': 'विज़न Prompt टेस्ट करें', - 'settings.localModel.download.testVoiceInput': 'वॉइस इनपुट टेस्ट करें (STT)', - 'settings.localModel.download.testVoiceOutput': 'वॉइस आउटपुट टेस्ट करें (TTS)', - 'settings.localModel.download.ttsOutputPlaceholder': 'वैकल्पिक आउटपुट WAV path', - 'settings.localModel.download.ttsPlaceholder': 'सिंथेसाइज़ करने के लिए टेक्स्ट डालें...', - 'settings.localModel.download.visionImagePlaceholder': - 'एक इमेज रेफरेंस प्रति लाइन (data URI, URL, या लोकल path मार्कर)', - 'settings.localModel.download.visionPromptPlaceholder': 'विज़न मॉडल के लिए prompt डालें...', - 'settings.localModel.status.allChecksPassed': 'सभी चेक पास हुए', - 'settings.localModel.status.artifact': 'आर्टिफैक्ट', - 'settings.localModel.status.backend': 'बैकएंड', - 'settings.localModel.status.binary': 'बाइनरी', - 'settings.localModel.status.bootstrapResume': 'बूटस्ट्रैप / फिर से शुरू', - 'settings.localModel.status.checking': 'चेक हो रहा है...', - 'settings.localModel.status.checkingOllama': 'Ollama चेक हो रहा है', - 'settings.localModel.status.customLocation': 'कस्टम लोकेशन', - 'settings.localModel.status.customLocationDesc': 'कस्टम स्थान विवरण', - 'settings.localModel.status.diagnosticsHint': - 'यह सत्यापित करने के लिए "Run Diagnostics" पर क्लिक करें कि Ollama चल रहा है और मॉडल इंस्टॉल हैं।', - 'settings.localModel.status.downloadingUnknown': 'डाउनलोड हो रहा है (साइज़ अज्ञात)', - 'settings.localModel.status.eta': 'ETA', - 'settings.localModel.status.expectedModels': 'एक्सपेक्टेड मॉडल', - 'settings.localModel.status.forceRebootstrap': 'बल पुनः बूटस्ट्रैप', - 'settings.localModel.status.generationTps': 'जनरेशन TPS', - 'settings.localModel.status.hideErrorDetails': 'एरर डिटेल्स छुपाएं', - 'settings.localModel.status.installManually': 'मैन्युअली इन्स्टॉल करें', - 'settings.localModel.status.installManuallyFrom': 'यहाँ से मैन्युअली इन्स्टॉल करें', - 'settings.localModel.status.installOllama': 'शुरू हो रहा है…', - 'settings.localModel.status.installedModels': 'इन्स्टॉल्ड मॉडल', - 'settings.localModel.status.installing': 'इन्स्टॉल हो रहा है...', - 'settings.localModel.status.installingOllama': 'Ollama रनटाइम इन्स्टॉल हो रहा है...', - 'settings.localModel.status.issues': 'समस्याएं', - 'settings.localModel.status.issuesFound': '{count} समस्या(एँ) मिलीं', - 'settings.localModel.status.lastLatency': 'आखिरी लेटेंसी', - 'settings.localModel.status.model': 'मॉडल', - 'settings.localModel.status.notFound': 'नहीं मिला', - 'settings.localModel.status.notRunning': 'नहीं चल रहा', - 'settings.localModel.status.ollamaBinaryPath': 'Ollama बाइनरी पथ', - 'settings.localModel.status.ollamaDiagnostics': 'Ollama डायग्नोस्टिक्स', - 'settings.localModel.status.ollamaNotInstalled': 'Ollama रनटाइम अनुपलब्ध', - 'settings.localModel.status.ollamaNotInstalledDesc': - 'OpenHuman अब Ollama को एक बाहरी इन्फ़रेंस रनटाइम के रूप में मानता है। अपना खुद का Ollama सर्वर शुरू करें, अपने इच्छित मॉडल खींचें, और वर्कलोड रूटिंग को इसकी ओर इंगित करें।', - 'settings.localModel.status.progress': 'प्रगति', - 'settings.localModel.status.provider': 'प्रोवाइडर', - 'settings.localModel.status.retryBootstrap': 'Bootstrap फिर से करें', - 'settings.localModel.status.runDiagnostics': 'चेक हो रहा है...', - 'settings.localModel.status.running': 'चल रहा है', - 'settings.localModel.status.runningExternalProcess': 'एक्सटर्नल प्रोसेस से चल रहा है', - 'settings.localModel.status.runtimeStatus': 'रनटाइम स्टेटस', - 'settings.localModel.status.server': 'सर्वर', - 'settings.localModel.status.setPath': 'सेट हो रहा है...', - 'settings.localModel.status.setting': 'सेट हो रहा है...', - 'settings.localModel.status.showErrorDetails': 'एरर डिटेल्स छुपाएं', - 'settings.localModel.status.showInstallErrorDetails': 'एरर डिटेल्स छुपाएं', - 'settings.localModel.status.suggestedFixes': 'सुझाए गए समाधान', - 'settings.localModel.status.thenSetPath': 'फिर path सेट करें', - 'settings.localModel.status.triggering': 'ट्रिगर हो रहा है...', - 'settings.localModel.status.unavailable': 'उपलब्ध नहीं', - 'settings.localModel.status.working': 'काम हो रहा है...', - 'settings.developerMenu.ai.title': 'AI कॉन्फ़िगरेशन', - 'settings.developerMenu.ai.desc': 'क्लाउड प्रदाता, स्थानीय Ollama मॉडल, और प्रति-वर्कलोड रूटिंग', - 'settings.developerMenu.screenAwareness.title': 'स्क्रीन अवेयरनेस', - 'settings.developerMenu.screenAwareness.desc': - 'स्क्रीन कैप्चर अनुमतियां, मॉनिटरिंग नीति, और सत्र नियंत्रण', - 'settings.developerMenu.messagingChannels.title': 'मैसेजिंग चैनल', - 'settings.developerMenu.messagingChannels.desc': - 'Telegram/Discord प्रमाणीकरण मोड और डिफ़ॉल्ट चैनल रूटिंग कॉन्फ़िगर करें', - 'settings.developerMenu.tools.title': 'टूल्स', - 'settings.developerMenu.tools.desc': - 'OpenHuman आपकी ओर से जिन क्षमताओं का उपयोग कर सकता है, उन्हें सक्षम या अक्षम करें', - 'settings.developerMenu.agentChat.title': 'एजेंट चैट', - 'settings.developerMenu.agentChat.desc': - 'मॉडल और तापमान ओवरराइड के साथ एजेंट वार्तालाप का परीक्षण करें', - 'settings.developerMenu.devWorkflow.title': 'Dev Workflow', - 'settings.developerMenu.devWorkflow.desc': - 'Autonomous agent that picks your GitHub issues and raises PRs on a schedule', - 'settings.developerMenu.devWorkflow.panelDesc': - 'Configure an autonomous developer agent that picks GitHub issues assigned to you and raises pull requests automatically on a schedule.', - 'settings.devWorkflow.githubRepository': 'GitHub Repository', - 'settings.devWorkflow.loadingRepositories': 'Loading repositories...', - 'settings.devWorkflow.selectRepository': 'Select a repository', - 'settings.devWorkflow.privateTag': '(private)', - 'settings.devWorkflow.detectingForkInfo': 'Detecting fork info...', - 'settings.devWorkflow.forkDetected': 'Fork detected', - 'settings.devWorkflow.upstream': 'Upstream:', - 'settings.devWorkflow.forkPrNote': 'PRs will be raised against the upstream repository.', - 'settings.devWorkflow.notForkNote': - 'Not a fork. PRs will be raised against this repository directly.', - 'settings.devWorkflow.targetBranch': 'Target Branch', - 'settings.devWorkflow.targetBranchNote': 'PRs will be raised against this branch', - 'settings.devWorkflow.loadingBranches': 'Loading branches...', - 'settings.devWorkflow.runFrequency': 'Run Frequency', - 'settings.devWorkflow.runFrequencyNote': - 'How often the agent should check for issues and raise PRs.', - 'settings.devWorkflow.updateConfiguration': 'Update Configuration', - 'settings.devWorkflow.saveConfiguration': 'Save Configuration', - 'settings.devWorkflow.remove': 'Remove', - 'settings.devWorkflow.saved': 'Saved', - 'settings.devWorkflow.activeConfiguration': 'Active Configuration', - 'settings.devWorkflow.activeConfigRepository': 'Repository:', - 'settings.devWorkflow.activeConfigUpstream': 'Upstream:', - 'settings.devWorkflow.activeConfigTargetBranch': 'Target branch:', - 'settings.devWorkflow.activeConfigSchedule': 'Schedule:', - 'settings.devWorkflow.enabled': 'Enabled', - 'settings.devWorkflow.paused': 'Paused', - 'settings.skillsRunner.scheduleEnabled': 'Enabled', - 'settings.skillsRunner.scheduleDisabled': 'Paused', - 'settings.skillsRunner.scheduleToggleAria': 'Toggle schedule enabled', - 'settings.skillsRunner.schedule.history': 'History', - 'settings.skillsRunner.schedule.historyLoading': 'Loading history\u2026', - 'settings.skillsRunner.schedule.historyEmpty': 'No runs yet for this schedule.', - 'settings.skillsRunner.schedule.historyNoOutput': 'No output captured.', - 'settings.skillsRunner.schedule.active': 'Active', - 'settings.skillsRunner.schedule.lastRunLabel': 'last:', - 'settings.devWorkflow.nextRun': 'Next run', - 'settings.devWorkflow.lastRun': 'Last run', - 'settings.devWorkflow.runNow': 'Run now', - 'settings.devWorkflow.running': 'Running…', - 'settings.devWorkflow.recentRuns': 'Recent runs', - 'settings.devWorkflow.cronSaveError': 'Failed to save configuration', - 'settings.devWorkflow.lastOutput': 'Last output', - 'settings.devWorkflow.noOutput': 'No output captured', - 'settings.devWorkflow.runningStatus': - 'Agent is running — picking an issue and working on a fix...', - 'settings.devWorkflow.errorNotConnected': - 'GitHub is not connected. Please connect GitHub via Settings > Advanced > Composio first.', - 'settings.devWorkflow.errorToolNotEnabled': - 'GITHUB_LIST_REPOSITORIES_FOR_THE_AUTHENTICATED_USER tool is not enabled on this backend. Please ask your admin to enable it in the Composio integration (backend#842).', - 'settings.devWorkflow.errorNotAuthenticated': 'Not authenticated. Please sign in first.', - 'settings.devWorkflow.errorNoRepositories': 'No repositories found for this GitHub account.', - 'settings.devWorkflow.schedule.every30min': 'Every 30 minutes', - 'settings.devWorkflow.schedule.everyHour': 'Every hour', - 'settings.devWorkflow.schedule.every2hours': 'Every 2 hours', - 'settings.devWorkflow.schedule.every6hours': 'Every 6 hours', - 'settings.devWorkflow.schedule.onceDaily': 'Once daily (9 AM)', - 'settings.developerMenu.cronJobs.title': 'Cron जॉब्स', - 'settings.developerMenu.cronJobs.desc': - 'रनटाइम स्किल्स के लिए शेड्यूल किए गए जॉब देखें और कॉन्फ़िगर करें', - 'settings.developerMenu.localModelDebug.title': 'लोकल मॉडल डिबग', - 'settings.developerMenu.localModelDebug.desc': - 'Ollama कॉन्फ़िगरेशन, एसेट डाउनलोड, मॉडल टेस्ट, और डायग्नोस्टिक्स', - 'settings.developerMenu.webhooks.title': 'वेबहुक्स', - 'settings.developerMenu.webhooks.desc': - 'रनटाइम वेबहुक रजिस्ट्रेशन और कैप्चर किए गए अनुरोध लॉग देखें', - 'settings.developerMenu.eventLog.title': 'Event Log', - 'settings.developerMenu.eventLog.desc': - 'Live colour-coded stream of all agent, tool, and system events', - 'settings.developerMenu.eventLog.allTypes': 'All types', - 'settings.developerMenu.eventLog.filterAgent': 'Filter...', - 'settings.developerMenu.eventLog.download': 'Download', - 'settings.developerMenu.eventLog.events': 'events', - 'settings.developerMenu.eventLog.live': 'Live', - 'settings.developerMenu.eventLog.disconnected': 'Disconnected', - 'settings.developerMenu.eventLog.waiting': 'Waiting for events...', - 'settings.developerMenu.eventLog.notConnected': 'Not connected to core', - 'settings.developerMenu.eventLog.jumpToLatest': 'Jump to latest', - 'settings.developerMenu.eventLog.badge.tool': 'TOOL', - 'settings.developerMenu.eventLog.badge.agent': 'AGENT', - 'settings.developerMenu.eventLog.badge.info': 'INFO', - 'settings.developerMenu.eventLog.badge.mem': 'MEM', - 'settings.developerMenu.eventLog.badge.chan': 'CHAN', - 'settings.developerMenu.eventLog.badge.cron': 'CRON', - 'settings.developerMenu.eventLog.badge.hook': 'HOOK', - 'settings.developerMenu.eventLog.badge.warn': 'WARN', - 'settings.developerMenu.eventLog.badge.skill': 'SKILL', - 'settings.developerMenu.eventLog.badge.comp': 'COMP', - 'settings.developerMenu.eventLog.badge.mcp': 'MCP', - 'settings.developerMenu.intelligence.title': 'इंटेलिजेंस', - 'settings.developerMenu.intelligence.desc': - 'मेमोरी वर्कस्पेस, सबकॉन्शस इंजन, ड्रीम्स, और सेटिंग्स', - 'settings.developerMenu.notificationRouting.title': 'नोटिफ़िकेशन रूटिंग', - 'settings.developerMenu.notificationRouting.desc': - 'AI महत्व स्कोरिंग और इंटीग्रेशन अलर्ट के लिए ऑर्केस्ट्रेटर एस्केलेशन', - 'settings.developerMenu.composeioTriggers.title': 'ComposeIO ट्रिगर्स', - 'settings.developerMenu.composeioTriggers.desc': 'ComposeIO ट्रिगर इतिहास और आर्काइव देखें', - 'settings.developerMenu.composioRouting.title': 'Composio रूटिंग (डायरेक्ट मोड)', - 'settings.developerMenu.composioRouting.desc': - 'अपनी Composio API कुंजी लाएं और कॉल सीधे backend.composio.dev पर रूट करें', - 'settings.developerMenu.integrationTriggers.title': 'इंटीग्रेशन ट्रिगर्स', - 'settings.developerMenu.integrationTriggers.desc': - 'Composio इंटीग्रेशन ट्रिगर्स के लिए AI ट्रायेज सेटिंग्स कॉन्फ़िगर करें', - 'settings.appearance.menuDesc': 'लाइट, डार्क, या सिस्टम थीम से मिलान चुनें', - 'settings.mascot.active': 'एक्टिव', - 'settings.mascot.characterDesc': 'कैरेक्टर विवरण', - 'settings.mascot.characterHeading': 'कैरेक्टर शीर्षक', - // TODO: translate custom GIF mascot strings. - 'settings.mascot.customGifError': - 'एक HTTPS .gif URL, लूपबैक HTTP .gif URL, फ़ाइल:// .gif URL, या स्थानीय .gif पथ दर्ज करें।', - 'settings.mascot.customGifHeading': 'कस्टम GIF अवतार', - 'settings.mascot.customGifLabel': 'कस्टम GIF अवतार URL', - 'settings.mascot.colorDesc': 'रंग विवरण', - 'settings.mascot.colorHeading': 'रंग शीर्षक', - 'settings.mascot.loadingLibrary': 'OpenHuman लाइब्रेरी लोड हो रही है…', - 'settings.mascot.localDefault': 'लोकल OpenHuman (डिफ़ॉल्ट)', - 'settings.mascot.menuTitle': 'मास्कॉट', - 'settings.mascot.menuDesc': 'ऐप में उपयोग होने वाला मास्कॉट रंग चुनें', - 'settings.mascot.noCharacters': 'अभी तक कोई OpenHuman कैरेक्टर उपलब्ध नहीं है', - 'settings.mascot.noColorVariants': 'कोई कलर वेरिएंट नहीं', - 'settings.mascot.voice.current': 'वर्तमान', - 'settings.mascot.voice.customDesc': - 'वॉइस आईडी api.elevenlabs.io/v1/voices या अपने ElevenLabs डैशबोर्ड पर खोजें। केवल आईडी संग्रहीत होती है — आपकी API कुंजी बैकएंड पर रहती है।', - 'settings.mascot.voice.customHeading': 'कस्टम वॉइस आईडी', - 'settings.mascot.voice.customOption': 'अन्य (वॉइस आईडी पेस्ट करें)…', - 'settings.mascot.voice.desc': - 'बोले गए उत्तरों के लिए मैस्कॉट जो ElevenLabs वॉइस उपयोग करता है उसे चुनें। लिंग के अनुसार फ़िल्टर करें, क्यूरेटेड सूची से चुनें, कस्टम आईडी पेस्ट करें, या ऐप को इंटरफ़ेस भाषा से मेल खाने वाली आवाज़ चुनने दें।', - 'settings.mascot.voice.genderFemale': 'स्त्री', - 'settings.mascot.voice.genderHeading': 'वॉइस लिंग', - 'settings.mascot.voice.genderMale': 'पुरुष', - 'settings.mascot.voice.heading': 'वॉइस', - 'settings.mascot.voice.preset': 'वॉइस प्रीसेट', - 'settings.mascot.voice.presetHeading': 'वॉइस प्रीसेट', - 'settings.mascot.voice.preview': 'वॉइस पूर्वावलोकन', - 'settings.mascot.voice.previewError': 'वॉइस पूर्वावलोकन विफल हुआ', - 'settings.mascot.voice.previewing': 'पूर्वावलोकन हो रहा है…', - 'settings.mascot.voice.reset': 'डिफ़ॉल्ट पर रीसेट करें', - 'settings.mascot.voice.useLocaleDefault': 'ऐप भाषा से मिलाएँ', - 'settings.mascot.voice.useLocaleDefaultDesc': - 'वर्तमान इंटरफ़ेस भाषा के लिए स्वचालित रूप से एक आवाज़ चुनें।', - 'settings.memoryWindow.balanced.badge': 'अनुशंसित', - 'settings.memoryWindow.balanced.hint': - 'समझदारी भरा डिफ़ॉल्ट — हर रन पर अतिरिक्त टोकन खर्च किए बिना अच्छी निरंतरता।', - 'settings.memoryWindow.balanced.label': 'संतुलित', - 'settings.memoryWindow.description': - 'OpenHuman हर नए एजेंट रन में कितना याद किया गया संदर्भ इंजेक्ट करता है। बड़ी विंडोज़ पिछली बातचीत के बारे में अधिक जागरूक लगती हैं लेकिन हर रन पर अधिक टोकन का उपयोग करती हैं — और अधिक लागत आती है।', - 'settings.memoryWindow.extended.badge': 'अधिक संदर्भ', - 'settings.memoryWindow.extended.hint': - 'प्रत्येक रन में अधिक दीर्घकालिक मेमोरी इंजेक्ट होती है। प्रति टर्न उच्च टोकन लागत।', - 'settings.memoryWindow.extended.label': 'विस्तारित', - 'settings.memoryWindow.maximum.badge': 'सर्वोच्च लागत', - 'settings.memoryWindow.maximum.hint': - 'सबसे बड़ी सुरक्षित विंडो। सर्वोत्तम निरंतरता, हर रन पर काफी अधिक टोकन बिल।', - 'settings.memoryWindow.maximum.label': 'अधिकतम', - 'settings.memoryWindow.minimal.badge': 'सबसे सस्ता', - 'settings.memoryWindow.minimal.hint': - 'सबसे छोटी मेमोरी विंडो। सबसे सस्ता, सबसे तेज़, रनों के बीच कम से कम निरंतरता।', - 'settings.memoryWindow.minimal.label': 'न्यूनतम', - 'settings.memoryWindow.title': 'लॉन्ग-टर्म मेमोरी विंडो', - 'settings.screenIntel.permissions.accessibility': 'एक्सेसिबिलिटी', - 'settings.screenIntel.permissions.grantHint': 'स्वीकृति संकेत', - 'settings.screenIntel.permissions.inputMonitoring': 'इनपुट मॉनिटरिंग', - 'settings.screenIntel.permissions.macosAppliesPrivacy': 'macOS गोपनीयता लागू करता है', - 'settings.screenIntel.permissions.openInputMonitoring': 'रिक्वेस्ट हो रही है…', - 'settings.screenIntel.permissions.refreshStatus': 'रिफ्रेश हो रहा है…', - 'settings.screenIntel.permissions.refreshing': 'रिफ्रेश हो रहा है…', - 'settings.screenIntel.permissions.requestAccessibility': 'रिक्वेस्ट हो रही है…', - 'settings.screenIntel.permissions.requestScreenRecording': 'रिक्वेस्ट हो रही है…', - 'settings.screenIntel.permissions.requesting': 'रिक्वेस्ट हो रही है…', - 'settings.screenIntel.permissions.restartRefresh': 'कोर रीस्टार्ट हो रहा है…', - 'settings.screenIntel.permissions.restartingCore': 'कोर रीस्टार्ट हो रहा है…', - 'settings.screenIntel.permissions.screenRecording': 'स्क्रीन रिकॉर्डिंग', - 'settings.screenIntel.permissions.title': 'परमिशन', - 'skills.card.moreActions': 'और एक्शन', - 'skills.create.allowedTools': 'अनुमत टूल्स', - 'skills.create.author': 'लेखक', - 'skills.create.authorPlaceholder': 'आपका नाम', - 'skills.create.commaSeparated': '(कॉमा से अलग करें)', - 'skills.create.createBtn': 'स्किल बनाएँ', - 'skills.create.createError': 'स्किल नहीं बन पाई', - 'skills.create.creating': 'बन रहा है…', - 'skills.create.description': 'विवरण', - 'skills.create.descriptionPlaceholder': 'यह स्किल क्या करती है?', - 'skills.create.optional': '(optional)', - 'skills.create.inputs.heading': 'Inputs', - 'skills.create.inputs.help': - 'Declare parameters the skill needs. The Skills Runner will render a form for these at run time.', - 'skills.create.inputs.add': 'Add input', - 'skills.create.inputs.row.name': 'Input name', - 'skills.create.inputs.row.namePlaceholder': 'e.g. repo', - 'skills.create.inputs.row.nameError': - 'Letters, digits, underscores, and dashes only; must start with a letter.', - 'skills.create.inputs.row.description': 'Input description', - 'skills.create.inputs.row.descriptionPlaceholder': 'What goes in this field?', - 'skills.create.inputs.row.type': 'Type', - 'skills.create.inputs.row.required': 'Required', - 'skills.create.inputs.row.remove': 'Remove input', - 'skills.create.inputs.type.string': 'Text', - 'skills.create.inputs.type.integer': 'Number', - 'skills.create.inputs.type.boolean': 'Yes / No', - 'skills.create.license': 'लाइसेंस', - 'skills.create.name': 'नाम', - 'skills.create.namePlaceholder': 'जैसे Trade Journal', - 'skills.create.scope': 'स्कोप', - 'skills.create.scopeProjectHint': '/.openhuman/skills/', - 'skills.create.scopeUserHint': - '~/.openhuman/skills//SKILL.md में लिखा जाता है — सभी वर्कस्पेस में उपलब्ध।', - 'skills.create.slugLabel': 'स्लग लेबल', - 'skills.create.subtitle': 'SKILL.md', - 'skills.create.tags': 'टैग्स', - 'skills.create.title': 'नया स्किल', - 'skills.detail.allowedTools': 'अनुमत टूल्स', - 'skills.detail.author': 'लेखक', - 'skills.detail.bundledResources': 'बंडल्ड रिसोर्सेज़', - 'skills.detail.closeAriaLabel': 'स्किल डिटेल्स बंद करें', - 'skills.detail.location': 'लोकेशन', - 'skills.detail.noBundledResources': 'कोई बंडल्ड रिसोर्स नहीं।', - 'skills.detail.tags': 'टैग्स', - 'skills.detail.warnings': 'चेतावनियाँ', - 'skills.install.fetchLog': 'फ़ेच लॉग', - 'skills.install.installBtn': 'इन्स्टॉल हो रहा है…', - 'skills.install.installComplete': 'इन्स्टॉल पूरा हुआ', - 'skills.install.installing': 'इन्स्टॉल हो रहा है…', - 'skills.install.parseWarnings': 'Parse चेतावनियाँ', - 'skills.install.rawError': 'रॉ एरर', - 'skills.install.timeoutHint': '(सेकंड, वैकल्पिक)', - 'skills.install.timeoutLabel': 'टाइमआउट लेबल', - 'skills.install.title': 'URL से स्किल इंस्टॉल करें', - 'skills.install.urlLabel': 'स्किल URL', - 'skills.meetingBots.bannerDesc': 'बैनर विवरण', - 'skills.meetingBots.bannerTitle': 'बैनर शीर्षक', - 'skills.meetingBots.busyTitle': 'OpenHuman व्यस्त है', - 'skills.meetingBots.comingSoon': 'जल्द आ रहा है', - 'skills.meetingBots.couldNotStartTitle': 'OpenHuman प्रारंभ नहीं हो सका', - 'skills.meetingBots.displayName': 'डिस्प्ले नाम', - 'skills.meetingBots.failedToStart': 'OpenHuman शुरू नहीं हो पाया।', - 'skills.meetingBots.joiningMessage': - 'कुछ सेकंड में यह मीटिंग में पार्टिसिपेंट के रूप में दिखेगा।', - 'skills.meetingBots.joiningTitle': 'OpenHuman मीटिंग जॉइन कर रहा है', - 'skills.meetingBots.meetingLink': 'मीटिंग लिंक', - 'skills.meetingBots.modalAriaLabel': 'OpenHuman को मीटिंग में भेजें', - 'skills.meetingBots.modalDesc': 'मोडल विवरण', - 'skills.meetingBots.modalTitle': 'OpenHuman को मीटिंग में भेजें', - 'skills.meetingBots.newBadge': 'नया', - 'skills.meetingBots.sendTo': 'भेजें', - 'skills.meetingBots.starting': 'शुरू हो रहा है…', - 'skills.resource.preview.closeAriaLabel': 'प्रीव्यू बंद करें', - 'skills.resource.preview.failed': 'पूर्वावलोकन विफल', - 'skills.resource.preview.loading': 'प्रीव्यू लोड हो रहा है…', - 'skills.resource.tree.empty': 'कोई बंडल्ड रिसोर्स नहीं।', - 'skills.search.placeholder': 'प्लेसहोल्डर', - 'skills.setup.autocomplete.acceptKey': 'स्वीकार कुंजी', - 'skills.setup.autocomplete.activeDesc': 'सक्रिय विवरण', - 'skills.setup.autocomplete.activeTitle': 'Auto-Complete एक्टिव है', - 'skills.setup.autocomplete.customizeSettings': 'सेटिंग्स कस्टमाइज़ करें', - 'skills.setup.autocomplete.debounce': 'डिबाउंस', - 'skills.setup.autocomplete.description': 'विवरण', - 'skills.setup.autocomplete.enableBtn': 'चालू हो रहा है...', - 'skills.setup.autocomplete.enableError': 'ऑटोकम्पलीट चालू नहीं हो पाया', - 'skills.setup.autocomplete.enabling': 'चालू हो रहा है...', - 'skills.setup.autocomplete.notSupported': 'सपोर्टेड नहीं', - 'skills.setup.autocomplete.stepEnable': 'इनलाइन कम्पलीशन चालू करें', - 'skills.setup.autocomplete.stepSuccess': 'तैयार है', - 'skills.setup.autocomplete.stylePreset': 'स्टाइल प्रीसेट', - 'skills.setup.autocomplete.stylePresetValue': 'Balanced (बाद में बदल सकते हैं)', - 'skills.setup.autocomplete.title': 'टेक्स्ट Auto-Complete', - 'skills.setup.screenIntel.activeDesc': 'सक्रिय विवरण', - 'skills.setup.screenIntel.activeTitle': 'Screen Intelligence चालू है', - 'skills.setup.screenIntel.advancedSettings': 'एडवांस्ड सेटिंग्स', - 'skills.setup.screenIntel.allGranted': 'सभी परमिशन मिल गईं', - 'skills.setup.screenIntel.captureMode': 'कैप्चर मोड', - 'skills.setup.screenIntel.captureModeValue': 'सभी विंडो (बाद में बदल सकते हैं)', - 'skills.setup.screenIntel.deniedHint': - 'System Settings में परमिशन देने के बाद, बदलाव लागू करने के लिए नीचे क्लिक करके रीस्टार्ट करें।', - 'skills.setup.screenIntel.enableBtn': 'चालू हो रहा है...', - 'skills.setup.screenIntel.enableDesc': 'आपकी स्क्रीन पर और एजेंट को उपयोगी कॉन्टेक्स्ट दें', - 'skills.setup.screenIntel.enableError': 'Screen Intelligence चालू नहीं हो पाई', - 'skills.setup.screenIntel.enabling': 'चालू हो रहा है...', - 'skills.setup.screenIntel.grant': 'खुल रहा है...', - 'skills.setup.screenIntel.granted': 'मिल गई', - 'skills.setup.screenIntel.macosOnly': 'केवल macOS', - 'skills.setup.screenIntel.opening': 'खुल रहा है...', - 'skills.setup.screenIntel.panicHotkey': 'पैनिक हॉटकी', - 'skills.setup.screenIntel.permAccessibility': 'एक्सेसिबिलिटी', - 'skills.setup.screenIntel.permInputMonitoring': 'इनपुट मॉनिटरिंग', - 'skills.setup.screenIntel.permScreenRecording': 'स्क्रीन रिकॉर्डिंग', - 'skills.setup.screenIntel.permissionsDesc': 'अनुमतियाँ विवरण', - 'skills.setup.screenIntel.refreshStatus': 'स्टेटस रिफ्रेश करें', - 'skills.setup.screenIntel.restartRefresh': 'रीस्टार्ट हो रहा है...', - 'skills.setup.screenIntel.restarting': 'रीस्टार्ट हो रहा है...', - 'skills.setup.screenIntel.stepEnable': 'स्किल चालू करें', - 'skills.setup.screenIntel.stepPermissions': 'परमिशन दें', - 'skills.setup.screenIntel.stepSuccess': 'तैयार है', - 'skills.setup.screenIntel.title': 'स्क्रीन इंटेलिजेंस', - 'skills.setup.screenIntel.visionModel': 'विज़न मॉडल', - 'skills.setup.voice.activation': 'एक्टिवेशन', - 'skills.setup.voice.activeDescPrefix': 'एफ.एन', - 'skills.setup.voice.activeDescSuffix': 'एफ.एन', - 'skills.setup.voice.activeTitle': 'Voice Intelligence एक्टिव है', - 'skills.setup.voice.customizeSettings': 'सेटिंग्स कस्टमाइज़ करें', - 'skills.setup.voice.downloadSttBtn': 'STT डाउनलोड करें', - 'skills.setup.voice.enableDesc': 'सक्षम विवरण', - 'skills.setup.voice.hotkey': 'हॉटकी', - 'skills.setup.voice.startBtn': 'शुरू हो रहा है...', - 'skills.setup.voice.startError': 'वॉइस सर्वर शुरू नहीं हो पाया', - 'skills.setup.voice.starting': 'शुरू हो रहा है...', - 'skills.setup.voice.stepEnable': 'वॉइस सर्वर शुरू करें', - 'skills.setup.voice.stepSetup': 'मॉडल डाउनलोड ज़रूरी है', - 'skills.setup.voice.stepSuccess': 'तैयार है', - 'skills.setup.voice.sttNotReady': 'Speech-to-text मॉडल तैयार नहीं है', - 'skills.setup.voice.sttNotReadyDesc': - 'Voice Intelligence को ट्रांसक्रिप्शन के लिए लोकल Whisper मॉडल चाहिए। इसे Local Model सेटिंग्स से डाउनलोड करें।', - 'skills.setup.voice.sttReady': 'Speech-to-text मॉडल तैयार है', - 'skills.setup.voice.sttReturnHint': 'STT रिटर्न संकेत', - 'skills.setup.voice.title': 'वॉइस इंटेलिजेंस', - 'skills.uninstall.couldNotUninstall': 'अनइंस्टॉल नहीं हो सका', - 'skills.uninstall.description': - 'यह स्किल डायरेक्टरी और उसके सभी बंडल किए गए संसाधनों को स्थायी रूप से हटा देता है। एजेंट अगले टर्न पर इसे देखना बंद कर देगा।', - 'skills.uninstall.title': 'अनइंस्टॉल', - 'skills.uninstall.uninstallBtn': 'अनइंस्टॉल', - 'skills.uninstall.uninstalling': 'अनइंस्टॉल हो रहा है…', - 'upsell.global.limitMessage': 'जारी रखने के लिए अपना प्लान अपग्रेड करें या क्रेडिट टॉप अप करें', - 'upsell.global.limitTitle': 'आप', - 'upsell.global.nearLimitMessage': - 'आपने अपनी उपयोग सीमा का {pct}% इस्तेमाल कर लिया है। ज़्यादा सीमा के लिए अपग्रेड करें।', - 'upsell.global.nearLimitTitle': 'उपयोग सीमा के करीब', - 'upsell.usageLimit.bodyBudget': - 'आपने अपनी साप्ताहिक सीमा प्राप्त कर ली है।{reset} सीमाओं से बचने के लिए अपनी योजना अपग्रेड करें या क्रेडिट टॉप अप करें।', - 'upsell.usageLimit.bodyRate': - 'आपने अपनी 10-घंटे की इन्फ़रेंस दर सीमा प्राप्त कर ली है।{reset} उच्च सीमा के लिए अपग्रेड करें।', - 'upsell.usageLimit.heading': 'उपयोग सीमा पहुँच गई', - 'upsell.usageLimit.notNow': 'अभी नहीं', - 'upsell.usageLimit.perWindow': '{amount}', - 'upsell.usageLimit.planIncludes': '{plan}', - 'upsell.usageLimit.resetsIn': 'यह {time} रीसेट होती है।', - 'upsell.usageLimit.upgradePlan': 'प्लान अपग्रेड करें', - 'upsell.usageLimit.weeklyInference': '{amount}', - 'walkthrough.tooltip.letsGo': 'चलिए शुरू करें!', - 'walkthrough.tooltip.next': 'अगला →', - 'walkthrough.tooltip.skip': 'टूर छोड़ें', - 'walkthrough.tooltip.stepCounter': '{total} में से {n}', - 'webhooks.activity.empty': 'खाली है', - 'webhooks.activity.title': 'हाल की एक्टिविटी', - 'webhooks.composioHistory.empty': 'खाली है', - 'webhooks.composioHistory.metadataId': 'मेटाडेटा ID', - 'webhooks.composioHistory.metadataUuid': 'मेटाडेटा UUID', - 'webhooks.composioHistory.payload': 'पेलोड', - 'webhooks.composioHistory.title': 'ComposeIO ट्रिगर हिस्ट्री', - 'webhooks.tunnels.active': 'एक्टिव', - 'webhooks.tunnels.createFailed': 'टनल बनाने में दिक्कत', - 'webhooks.tunnels.creating': 'बन रहा है...', - 'webhooks.tunnels.deleteFailed': 'टनल डिलीट करने में दिक्कत', - 'webhooks.tunnels.descriptionPlaceholder': 'विवरण (वैकल्पिक)', - 'webhooks.tunnels.echo': 'इको', - 'webhooks.tunnels.empty': 'खाली है', - 'webhooks.tunnels.enableEcho': 'Echo चालू करें', - 'webhooks.tunnels.inactive': 'निष्क्रिय', - 'webhooks.tunnels.namePlaceholder': 'टनल का नाम (जैसे telegram-bot)', - 'webhooks.tunnels.newTunnel': 'नया टनल', - 'webhooks.tunnels.removeEcho': 'Echo हटाएं', - 'webhooks.tunnels.title': 'Webhook टनल', - 'webhooks.tunnels.toggleFailed': 'Echo टॉगल करने में दिक्कत', - 'composio.authExpired': 'प्रमाणीकरण समाप्त', - 'composio.reconnect': 'पुनः कनेक्ट करें', - 'composio.previewBadge': 'पूर्वावलोकन', - 'composio.previewTooltip': - 'एजेंट एकीकरण जल्द ही आ रहा है - आप कनेक्ट कर सकते हैं, लेकिन एजेंट अभी तक इस टूलकिट का उपयोग नहीं कर सकता है।', - 'composio.directModeRequiresKey': - 'सहेजने में विफल। डायरेक्ट मोड के लिए गैर-रिक्त API कुंजी आवश्यक है।', - 'composio.notYetRouted': 'अभी तक रूट नहीं हुआ', - 'composio.triggers.loading': 'लोड हो रहा है…', - 'conversations.taskKanban.todo': 'करना है', - 'settings.composio.loading': 'लोड हो रहा है…', - 'settings.mascot.noCharactersAvailable': 'अभी तक कोई OpenHuman कैरेक्टर उपलब्ध नहीं है', - 'skills.uninstall.confirmTitle': '{name} अनइंस्टॉल करें?', - 'conversations.taskKanban.blocked': 'अवरुद्ध', - 'conversations.taskKanban.done': 'पूर्ण', - 'conversations.taskKanban.pending': 'Pending', - 'conversations.taskKanban.working': 'Working', - 'conversations.taskKanban.awaitingApproval': 'Awaiting approval', - 'conversations.taskKanban.ready': 'Ready', - 'conversations.taskKanban.rejected': 'Rejected', - 'conversations.taskKanban.inProgress': 'प्रगति पर', - 'intelligence.memoryChunk.detail.copiedHint': 'कॉपी हो गया', - 'settings.composio.notYetRouted': 'अभी तक रूट नहीं हुआ', - 'settings.localModel.download.manageExternal': 'इस मॉडल को अपने बाहरी रनटाइम में प्रबंधित करें।', - 'settings.localModel.status.manageOllamaExternal': - 'OpenHuman के बाहर Ollama प्रक्रिया और मॉडल पुल प्रबंधित करें, फिर डायग्नोस्टिक्स पुनः चलाएँ।', - 'settings.localModel.status.ollamaDocs': 'Ollama दस्तावेज़', - 'settings.localModel.status.thenRetry': - 'सेटअप निर्देशों के लिए, फिर आपका रनटाइम पहुँच योग्य होने के बाद पुनः प्रयास करें।', - 'settings.appearance.title': 'दिखावट', - 'settings.appearance.themeHeading': 'थीम', - 'settings.appearance.themeAria': 'थीम', - 'settings.appearance.modeLight': 'रोशनी', - 'settings.appearance.modeLightDesc': 'चमकदार सतहें, गहरा पाठ।', - 'settings.appearance.modeDark': 'अंधेरा', - 'settings.appearance.modeDarkDesc': 'धुंधली सतह, शाम के बाद आंखों पर आसान।', - 'settings.appearance.modeSystem': 'मिलान प्रणाली', - 'settings.appearance.modeSystemDesc': 'अपने OS उपस्थिति सेटिंग का पालन करें.', - 'settings.appearance.helperText': - 'डार्क मोड पूरे ऐप - चैट, सेटिंग्स, पैनल - को एक मंद पैलेट में बदल देता है। "मैच सिस्टम" आपके ओएस की उपस्थिति और अपडेट का लाइव अनुसरण करता है।', - 'settings.mascot.characterPreview': 'पूर्वावलोकन', - 'settings.mascot.characterStates': 'राज्य', - 'settings.mascot.characterVisemes': 'visemes', - 'settings.mascot.colorAria': 'OpenHuman रंग', - 'settings.mascot.colorBlack': 'काला', - 'settings.mascot.colorBurgundy': 'बरगंडी', - 'settings.mascot.colorCustom': 'Custom', - 'settings.mascot.colorNavy': 'नौसेना', - 'settings.mascot.primaryColor': 'Primary color', - 'settings.mascot.secondaryColor': 'Secondary color', - 'settings.mascot.colorYellow': 'पीला', - 'settings.mascot.libraryUnavailable': 'OpenHuman लाइब्रेरी अनुपलब्ध है', - 'settings.mascot.title': 'OpenHuman', - 'settings.developerMenu.mcpServer.title': 'MCP सर्वर', - 'settings.developerMenu.mcpServer.desc': - 'OpenHuman से कनेक्ट करने के लिए बाहरी MCP क्लाइंट को कॉन्फ़िगर करें', - 'settings.developerMenu.autonomy.title': 'एजेंट स्वायत्तता', - 'settings.developerMenu.autonomy.desc': 'टूल क्रिया दर सीमाएँ और सुरक्षा सीमाएँ', - 'settings.mcpServer.title': 'MCP सर्वर', - 'settings.mcpServer.toolsSectionTitle': 'उपलब्ध उपकरण', - 'settings.mcpServer.toolsSectionDesc': - 'ओपनह्यूमन-कोर एमसीपी चलाने पर उपकरण MCP stdio सर्वर के माध्यम से उजागर होते हैं', - 'settings.mcpServer.configSectionTitle': 'क्लाइंट कॉन्फ़िगरेशन', - 'settings.mcpServer.configSectionDesc': - 'सही कॉन्फ़िगरेशन स्निपेट जनरेट करने के लिए अपना MCP क्लाइंट चुनें', - 'settings.mcpServer.copySnippet': 'क्लिपबोर्ड पर कॉपी करें', - 'settings.mcpServer.copied': 'नकल की गई!', - 'settings.mcpServer.openConfigFile': 'कॉन्फ़िग फ़ाइल खोलें', - 'settings.mcpServer.binaryPathNotFound': - 'OpenHuman बाइनरी नहीं मिली. यदि स्रोत से चल रहा है, तो इसके साथ निर्माण करें: cargo build --bin openhuman-core', - 'settings.mcpServer.openConfigError': 'कॉन्फ़िग फ़ाइल खोलने में विफल', - 'settings.mcpServer.clientClaudeDesktop': 'क्लाउड डेस्कटॉप', - 'settings.mcpServer.clientCursor': 'कर्सर', - 'settings.mcpServer.clientCodex': 'कोडेक्स', - 'settings.mcpServer.clientZed': 'जेड', - 'settings.mcpServer.configFilePath': 'कॉन्फ़िग फ़ाइल', - 'settings.mcpServer.clientSelectorAriaLabel': 'MCP ग्राहक चयनकर्ता', - 'settings.persona.title': 'Persona', - 'settings.persona.menuTitle': 'Persona', - 'settings.persona.menuDesc': - 'Name, personality, avatar, and voice — your assistant as one identity', - 'settings.persona.identityHeading': 'Identity', - 'settings.persona.identityDesc': - 'A display name and short description for your assistant. Shown in the app; does not change how the assistant reasons.', - 'settings.persona.displayNameLabel': 'Display name', - 'settings.persona.displayNamePlaceholder': 'e.g. Nova', - 'settings.persona.descriptionLabel': 'Description', - 'settings.persona.descriptionPlaceholder': 'e.g. A calm, concise assistant for my team.', - 'settings.persona.soul.heading': 'Personality (SOUL.md)', - 'settings.persona.soul.desc': - 'The personality prompt the assistant follows in every conversation. Edits are saved to your workspace and take effect on the next reply.', - 'settings.persona.soul.editorLabel': 'SOUL.md contents', - 'settings.persona.soul.reset': 'Reset to default', - 'settings.persona.soul.usingDefault': 'Using the bundled default', - 'settings.persona.soul.loadError': 'Could not load SOUL.md', - 'settings.persona.soul.saveError': 'Could not save SOUL.md', - 'settings.persona.soul.resetError': 'Could not reset SOUL.md', - 'settings.persona.appearanceHeading': 'Avatar & Voice', - 'settings.persona.appearanceDesc': - 'Mascot color, custom GIF avatar, and reply voice are configured in Mascot settings.', - 'settings.persona.openMascotSettings': 'Open Mascot settings', - 'settings.developerMenu.composio.title': 'Composio', - 'settings.developerMenu.composio.desc': 'रूटिंग मोड, एकीकरण ट्रिगर, और ट्रिगर इतिहास संग्रह।', - 'settings.appearance.tabBarHeading': 'निचला टैब बार', - 'settings.appearance.tabBarAlwaysShowLabels': 'हमेशा लेबल दिखाएं', - 'settings.appearance.tabBarAlwaysShowLabelsDesc': - 'बंद होने पर, लेबल केवल होवर पर या सक्रिय टैब के लिए दिखाई देते हैं।', - 'common.breadcrumb': 'ब्रेडक्रंब', - 'settings.betaBuild': 'बीटा बिल्ड - v{version}', - 'migration.vendor.openclaw': 'OpenClaw', - 'migration.vendor.hermes': 'Hermes Agent', - 'onboarding.apiKeys.openaiOauthHint': - 'चैटजीपीटी प्लस/प्रो (सदस्यता) या OpenAI API कुंजी का उपयोग करें - दोनों की आवश्यकता नहीं है।', - 'onboarding.apiKeys.openaiOauthOpening': 'साइन-इन खुल रहा है...', - 'onboarding.apiKeys.finishSignIn': 'चैटजीपीटी साइन-इन समाप्त करें', - 'onboarding.apiKeys.orApiKey': 'या API कुंजी', - 'app.localAiDownload.expandAria': 'डाउनलोड प्रगति का विस्तार करें', - 'app.localAiDownload.collapseAria': 'डाउनलोड प्रगति को संक्षिप्त करें', - 'app.localAiDownload.dismissAria': 'डाउनलोड अधिसूचना ख़ारिज करें', - 'mobile.nav.ariaLabel': 'मोबाइल नेविगेशन', - 'progress.stepsAria': 'प्रगति के चरण', - 'progress.stepAria': '{total} का चरण {current}', - 'workspace.vaultsTitle': 'ज्ञान भंडार', - 'workspace.vaultsDesc': - 'किसी स्थानीय फ़ोल्डर पर इंगित करें; फ़ाइलें खंडित हो जाती हैं और स्मृति में प्रतिबिंबित हो जाती हैं।', - 'calls.title': 'कॉल', - 'calls.comingSoonBody': 'एआई-सहायक कॉल जल्द ही आ रही हैं। बने रहें।', - 'art.rotatingTetrahedronAria': 'घूमता हुआ उलटा टेट्राहेड्रोन अंतरिक्ष यान', - 'devOptions.sentryDisabled': '(कोई आईडी नहीं - इस बिल्ड में संतरी अक्षम है)', - 'composio.expiredAuthorization': '{name} प्राधिकरण समाप्त हो गया', - 'composio.expiredDescription': - '{name} टूल को पुनः सक्षम करने के लिए पुनः कनेक्ट करें। OpenHuman इस एकीकरण को तब तक अनुपलब्ध रखेगा जब तक आप OAuth पहुंच को ताज़ा नहीं करते।', - 'channels.telegram.remoteControlTitle': 'रिमोट कंट्रोल (Telegram)', - 'channels.telegram.remoteControlBody': - 'अनुमत Telegram चैट से, /स्थिति, /सत्र, /नया, या /सहायता भेजें। मॉडल रूटिंग अभी भी /मॉडल और /मॉडल का उपयोग करती है।', - 'rewards.referralSection.retry': 'पुनः प्रयास करें', - 'settings.ai.plannerSummary': - 'योजनाकार: {sourceEvents} स्रोत घटनाएँ, {sent} भेजा गया, {deduped} काटा गया।', - 'settings.ai.routeLabel': 'मार्ग: {route}', - 'settings.ai.latestSpend': 'नवीनतम खर्च: {amount} पर {time} ({action})', - 'settings.ai.topActions': 'शीर्ष क्रियाएं', - 'settings.ai.noSpendRows': 'कोई व्यय पंक्तियाँ लोड नहीं की गईं.', - 'settings.ai.topHours': 'शीर्ष घंटे', - 'settings.ai.noHourlySpend': 'अभी तक कोई प्रति घंटा खर्च नहीं.', - 'settings.autocomplete.appFilter.app': 'ऐप', - 'settings.autocomplete.appFilter.currentSuggestion': 'वर्तमान सुझाव', - 'settings.autocomplete.appFilter.debounce': 'बहस', - 'settings.autocomplete.appFilter.enabled': 'सक्षम', - 'settings.autocomplete.appFilter.lastError': 'अंतिम त्रुटि', - 'settings.autocomplete.appFilter.model': 'मॉडल', - 'settings.autocomplete.appFilter.phase': 'चरण', - 'settings.autocomplete.appFilter.platformSupported': 'मंच समर्थित', - 'settings.autocomplete.appFilter.running': 'चल रहा है', - 'settings.autocomplete.debug.acceptedPrefix': 'स्वीकृत: {value}', - 'settings.autocomplete.debug.acceptFailed': 'सुझाव स्वीकार करने में विफल', - 'settings.autocomplete.debug.alreadyRunning': 'स्वत: पूर्ण पहले से ही चल रहा है.', - 'settings.autocomplete.debug.clearHistoryFailed': 'इतिहास साफ़ करने में विफल', - 'settings.autocomplete.debug.didNotStart': 'स्वत: पूर्ण प्रारंभ नहीं हुआ.', - 'settings.autocomplete.debug.disabledInSettings': - 'सेटिंग्स में स्वत: पूर्ण अक्षम है. इसे इनेबल करें और पहले सेव करें।', - 'settings.autocomplete.debug.fetchSuggestionFailed': 'वर्तमान सुझाव लाने में विफल', - 'settings.autocomplete.debug.inspectFocusedElementFailed': - 'केंद्रित तत्व का निरीक्षण करने में विफल', - 'settings.autocomplete.debug.loadSettingsFailed': 'स्वतः पूर्ण सेटिंग लोड करने में विफल', - 'settings.autocomplete.debug.noSuggestionApplied': 'कोई सुझाव लागू नहीं किया गया.', - 'settings.autocomplete.debug.noSuggestionReturned': 'कोई सुझाव वापस नहीं आया.', - 'settings.autocomplete.debug.refreshStatusFailed': 'स्वतः पूर्ण स्थिति ताज़ा करने में विफल', - 'settings.autocomplete.debug.saveAdvancedSettingsFailed': 'उन्नत सेटिंग्स सहेजने में विफल', - 'settings.autocomplete.debug.startFailed': 'स्वतः पूर्ण प्रारंभ करने में विफल', - 'settings.autocomplete.debug.stopFailed': 'स्वतः पूर्णता रोकने में विफल', - 'settings.autocomplete.debug.suggestionPrefix': 'सुझाव: {value}', - 'settings.autocomplete.shared.none': 'कोई नहीं', - 'settings.autocomplete.shared.notApplicable': 'एन/ए', - 'settings.autocomplete.shared.unknown': 'अज्ञात', - 'settings.billing.autoRecharge.expires': 'समाप्त {date}', - 'settings.billing.autoRecharge.spentThisWeek': - 'इस सप्ताह ${limit} में से ${spent} का उपयोग किया गया', - 'settings.localModel.deviceCapability.disabledLowercase': 'अक्षम', - 'settings.localModel.deviceCapability.presetDetails': - 'चैट: {chatModel} · दृष्टि: {visionModel} · लक्ष्य रैम: {targetRamGb} जीबी', - 'settings.localModel.download.capabilityChat': 'बातचीत', - 'settings.localModel.download.capabilityEmbedding': 'एंबेडिंग', - 'settings.localModel.download.capabilityStt': 'STT', - 'settings.localModel.download.capabilityTts': 'TTS', - 'settings.localModel.download.capabilityVision': 'दृष्टि', - 'settings.localModel.download.embeddingDimensions': 'आयाम: {dimensions}', - 'settings.localModel.download.embeddingModel': 'मॉडल: {modelId}', - 'settings.localModel.download.embeddingVectors': 'वेक्टर: {count}', - 'settings.localModel.download.notAvailable': 'एन/ए', - 'settings.localModel.download.summaryHelper': - 'रस्ट कोर के माध्यम से `openhuman.inference_summarize` को कॉल करता है', - 'settings.localModel.download.transcript': 'प्रतिलेख:', - 'settings.localModel.download.ttsOutput': 'आउटपुट: {outputPath}', - 'settings.localModel.download.ttsVoice': 'आवाज़: {voiceId}', - 'settings.localModel.status.contextBelowMinimumBadge': - '{contextLength} ctx - {required} मिनट से नीचे', - 'settings.localModel.status.contextBelowMinimumTitle': - 'अस्वीकृत: संदर्भ विंडो {contextLength} टोकन मेमोरी परत के लिए आवश्यक न्यूनतम {required}-टोकन से नीचे है। मौन काट-छाँट से स्मरण भ्रष्ट हो जाएगा।', - 'settings.localModel.status.contextOkBadge': '{contextLength} ctx ✓', - 'settings.localModel.status.contextOkTitle': - 'संदर्भ विंडो {contextLength} टोकन न्यूनतम {required} टोकन की मेमोरी-लेयर को पूरा करती है।', - 'settings.localModel.status.contextUnknownBadge': 'सीटीएक्स अज्ञात', - 'settings.localModel.status.contextUnknownTitle': - 'प्रसंग विंडो अज्ञात; इसकी पुष्टि नहीं हो सकी कि यह न्यूनतम {required}-टोकन मेमोरी-लेयर को पूरा करता है।', - 'settings.localModel.status.expectedChat': 'चैट: {model}', - 'settings.localModel.status.expectedEmbedding': 'एम्बेडिंग: {model}', - 'settings.localModel.status.expectedVision': 'दृष्टि: {model}', - 'settings.localModel.status.externalProcess': 'बाह्य प्रक्रिया', - 'settings.localModel.status.notAvailable': 'एन/ए', - 'settings.mascot.customGifPlaceholder': 'https://example.com/avatar.gif', - 'settings.mascot.loadDetailError': 'शुभंकर लोड नहीं किया जा सका.', - 'settings.mascot.loadLibraryError': 'शुभंकर लाइब्रेरी लोड नहीं की जा सकी.', - 'settings.mascot.voice.customPlaceholder': 'जैसे 21m00Tcm4TlvDq8ikWAM', - 'settings.mascot.voice.previewText': "Hi, I'm your assistant. This is a voice preview.", - 'skills.channelIcon.discord': 'Discord', - 'skills.channelIcon.imessage': 'iMessage', - 'skills.channelIcon.telegram': 'Telegram', - 'skills.channelIcon.web': 'वेब', - 'skills.channelIcon.yuanbao': 'Yuanbao', - 'skills.composio.poweredBy': 'Composio द्वारा संचालित', - 'skills.composio.staleStatusTitle': 'कनेक्शन पुरानी स्थिति दिखा रहे हैं', - 'skills.create.allowedToolsHelp': 'SKILL.md फ्रंटमैटर में प्रस्तुत किया गया', - 'skills.create.allowedToolsPlaceholder': 'नोड_एक्सईसी, प्राप्त करें', - 'skills.create.licensePlaceholder': 'MIT', - 'skills.create.tagsPlaceholder': 'व्यापार, अनुसंधान', - 'skills.install.errors.alreadyInstalledHint': - 'इस स्लग के साथ एक कौशल कार्यक्षेत्र में पहले से ही मौजूद है। पहले इसे हटाएँ या फ्रंटमैटर `metadata.id` / `name` बदलें।', - 'skills.install.errors.alreadyInstalledTitle': 'कौशल पहले से ही स्थापित है', - 'skills.install.errors.fetchFailedHint': - 'अनुरोध सफलतापूर्वक पूरा नहीं हुआ. पहुंच योग्य सार्वजनिक फ़ाइल पर URL बिंदुओं की जांच करें, और होस्ट ने 2xx प्रतिक्रिया लौटाई है।', - 'skills.install.errors.fetchFailedTitle': 'फ़ेच विफल रहा', - 'skills.install.errors.fetchTimedOutHint': - 'दूरस्थ होस्ट ने समय पर उत्तर नहीं दिया. पुनः प्रयास करें या समयबाह्य बढ़ाएँ (1-600 सेकंड)।', - 'skills.install.errors.fetchTimedOutTitle': 'लाने का समय समाप्त हो गया', - 'skills.install.errors.fetchTooLargeHint': - 'SKILL.md 1 MiB से कम होना चाहिए। बंडल किए गए संसाधनों को इनलाइन करने के बजाय `संदर्भ/` या `स्क्रिप्ट/` फ़ाइलों में विभाजित करें।', - 'skills.install.errors.fetchTooLargeTitle': 'SKILL.md बहुत बड़ा है', - 'skills.install.errors.genericHint': 'बैकएंड ने एक त्रुटि लौटाई. कच्चा संदेश नीचे दिखाया गया है।', - 'skills.install.errors.genericTitle': 'कौशल स्थापित नहीं किया जा सका', - 'skills.install.errors.invalidSkillHint': - 'फ्रंटमैटर गैर-रिक्त `नाम` और `विवरण` फ़ील्ड के साथ वैध YAML होना चाहिए, जो `---` द्वारा समाप्त हो।', - 'skills.install.errors.invalidSkillTitle': 'SKILL.md ने पार्स नहीं किया', - 'skills.install.errors.invalidUrlHint': - 'केवल सार्वजनिक HTTPS URLs की अनुमति है। निजी, लूपबैक और मेटाडेटा होस्ट अवरुद्ध हैं।', - 'skills.install.errors.invalidUrlTitle': 'URL अस्वीकृत', - 'skills.install.errors.unsupportedUrlHint': - 'केवल सीधे `.md` लिंक काम करते हैं। GitHub के लिए, एक फ़ाइल से लिंक करें (github.com/owner/repo/blob/.../SKILL.md) - ट्री और रेपो रूट स्थापित नहीं हैं।', - 'skills.install.errors.unsupportedUrlTitle': 'URL फॉर्म समर्थित नहीं है', - 'skills.install.errors.writeFailedHint': - 'कार्यक्षेत्र कौशल निर्देशिका लिखने योग्य नहीं थी. `/.openhuman/skills/` के लिए फ़ाइल सिस्टम अनुमतियाँ जाँचें।', - 'skills.install.errors.writeFailedTitle': 'SKILL.md नहीं लिख सका', - 'skills.install.fetchingPrefix': 'ला रहा है', - 'skills.install.fetchingSuffix': - 'इसमें आपके द्वारा कॉन्फ़िगर किया गया टाइमआउट तक का समय लग सकता है।', - 'skills.install.subtitleMiddle': 'HTTPS के ऊपर और इसे नीचे स्थापित करता है', - 'skills.install.subtitlePrefix': 'एक सिंगल लाता है', - 'skills.install.subtitleSuffix': 'केवल HTTPS; निजी और लूपबैक होस्ट अवरुद्ध हैं।', - 'skills.install.successDiscovered': '{count} नए कौशल की खोज की।', - 'skills.install.successNoNewIds': - 'कौशल स्थापित किया गया, लेकिन कोई नई कौशल आईडी दिखाई नहीं दी - कैटलॉग में पहले से ही उसी स्लग वाला कौशल शामिल हो सकता है।', - 'skills.install.timeoutHelp': - 'डिफ़ॉल्ट 60 सेकंड. 1-600 के बाहर के मान सर्वर-साइड पर क्लैंप किए गए हैं।', - 'skills.install.timeoutInvalid': '1 और 600 के बीच एक पूर्णांक होना चाहिए.', - 'skills.install.timeoutPlaceholder': '60', - 'skills.install.urlHelpMiddle': 'फ़ाइल.', - 'skills.install.urlHelpPrefix': 'ए से सीधा लिंक', - 'skills.install.urlHelpSuffix': 'URLs स्वतः पुनः लिखें', - 'skills.install.urlInvalidPrefix': 'URL एक सुगठित होना चाहिए', - 'skills.install.urlInvalidSuffix': 'लिंक.', - 'skills.install.urlPlaceholder': 'https://raw.githubusercontent.com/owner/repo/main/SKILL.md', - 'skills.meetingBots.platformComingSoon': '{label} समर्थन जल्द ही आ रहा है।', - 'skills.meetingBots.platformHints.gmeet': 'meet.google.com/abc-defg-hij', - 'skills.meetingBots.platformHints.teams': 'Teams.microsoft.com/...', - 'skills.meetingBots.platformHints.zoom': 'Zoom.us/j/...', - 'skills.meetingBots.platforms.gmeet': 'Google मिलें', - 'skills.meetingBots.platforms.teams': 'माइक्रोसॉफ्ट टीमें', - 'skills.meetingBots.platforms.zoom': 'ज़ूम करें', - 'skills.meetingBots.soonSuffix': 'जल्द ही', - 'skills.setup.screenIntel.permissionPathLabel': 'macOS निम्नलिखित पर गोपनीयता लागू करता है:', - 'settings.agentAccess.title': 'Agent OS access', - 'settings.agentAccess.menuDesc': - 'Control where the agent can read/write and whether it can use the shell.', - 'settings.agentAccess.loadError': 'Failed to load access settings', - 'settings.agentAccess.saveError': 'Failed to save access settings', - 'settings.agentAccess.saved': 'Saved — applies on your next message.', - 'settings.agentAccess.desktopOnly': 'Access settings are only available in the desktop app.', - 'settings.agentAccess.loading': 'Loading…', - 'settings.agentAccess.accessMode': 'Access mode', - 'settings.agentAccess.tier.readonly.title': 'Read-only', - 'settings.agentAccess.tier.readonly.desc': - 'Reads files and runs read-only commands to explore — but never writes, edits, or runs anything that changes state.', - 'settings.agentAccess.tier.supervised.title': 'Ask before edit', - 'settings.agentAccess.tier.supervised.desc': - 'Creates new files freely, but asks for your approval before editing an existing file, running a command, reaching the network, or installing anything.', - 'settings.agentAccess.tier.full.title': 'Full access', - 'settings.agentAccess.tier.full.desc': - 'Runs commands with your full user account access — it can read/write anywhere allowed, except credential and system stores. Destructive commands, network access, and installs still ask for approval.', - 'settings.agentAccess.defaultTag': '(default)', - 'settings.agentAccess.fullWarning': - '⚠ Full access runs commands with your full account access and is not sandboxed. Only enable it when you trust the agent with this machine. Credential and system directories stay blocked, and destructive, network, and install actions still ask for approval.', - 'settings.agentAccess.confine.label': 'Confine to workspace', - 'settings.agentAccess.confine.desc': - 'Restrict the agent to the workspace directory (plus any granted folders), whichever access mode is selected. When off, it can reach anywhere your user can — except the always-blocked credential and system directories.', - 'settings.agentAccess.grantedFolders': 'Granted folders', - 'settings.agentAccess.alwaysAllow': 'Always-allowed tools', - 'settings.agentAccess.alwaysAllowDesc': - 'Tools you marked "Always allow" in chat run without asking. Remove one to be prompted again.', - 'settings.agentAccess.alwaysAllowNone': 'No always-allowed tools yet.', - 'settings.agentAccess.grantedDesc': - 'Folders the agent may read and write, in addition to the workspace. Credential stores (~/.ssh, ~/.gnupg, ~/.aws, keychains) and system directories (/etc, /System, C:\\Windows, …) are always blocked, even inside a granted folder.', - 'settings.agentAccess.noneGranted': 'No folders granted.', - 'settings.agentAccess.readWrite': 'read + write', - 'settings.agentAccess.readOnly': 'read-only', - 'settings.agentAccess.remove': 'Remove', - 'settings.agentAccess.pathPlaceholder': 'फ़ोल्डर का पूर्ण पथ', - 'settings.agentAccess.accessLevelLabel': 'Access level', - 'settings.agentAccess.add': 'Add', - 'settings.agentAccess.saving': 'Saving…', - 'settings.agentAccess.changesApply': 'Changes apply on your next message.', - 'skills.tabs.runners': 'Runners', - 'settings.developerMenu.skillsRunner.title': 'Skills Runner', - 'settings.developerMenu.skillsRunner.desc': - 'Run any bundled skill ad-hoc — fill its inputs and fire a background autonomous run', - 'settings.developerMenu.skillsRunner.panelDesc': - 'Pick a bundled skill, fill in its declared inputs, and fire a fire-and-forget background run. Use Dev Workflow instead if you want a cron-scheduled recurring job.', - 'settings.skillsRunner.skill': 'Skill', - 'settings.skillsRunner.selectSkill': 'Select a skill…', - 'settings.skillsRunner.loadingSkills': 'Loading skills…', - 'settings.skillsRunner.loadingDescription': 'Loading skill inputs…', - 'settings.skillsRunner.noInputs': 'This skill declares no inputs.', - 'settings.skillsRunner.placeholder.required': 'required', - 'settings.skillsRunner.runNow': 'Run now', - 'settings.skillsRunner.starting': 'Starting…', - 'settings.skillsRunner.started': 'Started — run id:', - 'settings.skillsRunner.logPath': 'Log:', - 'settings.skillsRunner.error.listSkills': 'Failed to load skills:', - 'settings.skillsRunner.error.describe': 'Failed to load inputs:', - 'settings.skillsRunner.error.missingRequired': 'Missing required input(s):', - 'settings.skillsRunner.error.run': 'Run failed to start:', - 'settings.skillsRunner.error.preflightGate': 'Preflight gate failed', - 'settings.skillsRunner.schedule.heading': 'Schedule (recurring)', - 'settings.skillsRunner.schedule.help': - 'Save this skill + inputs as a recurring cron job. The agent will call run_skill at each tick.', - 'settings.skillsRunner.schedule.frequency': 'Frequency', - 'settings.skillsRunner.schedule.every30min': 'Every 30 minutes', - 'settings.skillsRunner.schedule.everyHour': 'Every hour', - 'settings.skillsRunner.schedule.every2hours': 'Every 2 hours', - 'settings.skillsRunner.schedule.every6hours': 'Every 6 hours', - 'settings.skillsRunner.schedule.onceDaily': 'Once daily (9:00)', - 'settings.skillsRunner.schedule.save': 'Save schedule', - 'settings.skillsRunner.schedule.saving': 'Saving…', - 'settings.skillsRunner.schedule.saved': 'Schedule saved.', - 'settings.skillsRunner.schedule.error': 'Schedule save failed:', - 'settings.skillsRunner.schedule.loadingJobs': 'Loading existing schedules…', - 'settings.skillsRunner.schedule.noJobs': 'No schedules saved for this skill yet.', - 'settings.skillsRunner.schedule.existing': 'Scheduled jobs for this skill:', - 'settings.skillsRunner.schedule.runNow': 'Run', - 'settings.skillsRunner.schedule.remove': 'Remove', - 'settings.skillsRunner.recentRuns.headingForSkill': 'Recent runs for this skill', - 'settings.skillsRunner.recentRuns.headingAll': 'Recent skill runs (all)', - 'settings.skillsRunner.recentRuns.refresh': 'Refresh', - 'settings.skillsRunner.recentRuns.loading': 'Loading recent runs…', - 'settings.skillsRunner.recentRuns.empty': 'No recent runs.', - 'settings.skillsRunner.viewer.loading': 'Loading log…', - 'settings.skillsRunner.viewer.tailing': 'Live tailing', - 'settings.skillsRunner.viewer.fetching': 'fetching', - 'settings.skillsRunner.viewer.error': 'Log read failed:', - 'settings.skillsRunner.repoPicker.loading': 'Loading repositories…', - 'settings.skillsRunner.repoPicker.select': 'Select a repository…', - 'settings.skillsRunner.repoPicker.empty': - 'No repositories returned. Connect GitHub via Composio to populate this list.', - 'settings.skillsRunner.repoPicker.notConnected': - 'GitHub isn’t connected via Composio. Connect it under Skills → Composio first.', - 'settings.skillsRunner.repoPicker.privateTag': '(private)', - 'settings.skillsRunner.branchPicker.needRepo': 'Pick a repo first…', - 'settings.skillsRunner.branchPicker.loading': 'Loading branches…', - 'settings.skillsRunner.branchPicker.select': 'Select a branch…', - 'settings.modelHealth.title': 'Model Health', - 'settings.modelHealth.desc': - 'Per-model quality, hallucination rate, and cost comparison across active models', - 'settings.modelHealth.allStatuses': 'All statuses', - 'settings.modelHealth.models': 'models', - 'settings.modelHealth.loading': 'Loading model data...', - 'settings.modelHealth.empty': 'No models registered', - 'settings.modelHealth.col.model': 'Model', - 'settings.modelHealth.col.quality': 'Quality', - 'settings.modelHealth.col.halluc': 'Halluc. Rate', - 'settings.modelHealth.col.cost': 'Cost / 1M out', - 'settings.modelHealth.col.agents': 'Agents', - 'settings.modelHealth.col.status': 'Status', - 'settings.modelHealth.badge.keep': 'Keep', - 'settings.modelHealth.badge.replace': 'Replace', - 'settings.modelHealth.badge.staging': 'Staging test', - 'settings.modelHealth.badge.vision': 'Vision only', - 'settings.modelHealth.swap': 'Swap?', - 'settings.modelHealth.modal.title': 'Replace Model?', - 'settings.modelHealth.modal.hallucRate': 'Hallucination rate', - 'settings.modelHealth.modal.cancel': 'Cancel', - 'settings.modelHealth.modal.apply': 'Apply Replacement', - 'settings.modelHealth.tag.cheaper': 'CHEAPER', - 'settings.modelHealth.tag.better': 'BETTER', - // Task sources (#task-sources) - 'settings.taskSources.title': 'Task Sources', - 'settings.taskSources.subtitle': 'Pull tasks from your tools onto the agent todo board', - 'settings.taskSources.description': - 'Collect work items from GitHub, Notion, Linear, and ClickUp, enrich them, and route them onto the agent todo board.', - 'settings.taskSources.connectHint': - 'Task sources use your connected accounts. Connect them under Integrations first.', - 'settings.taskSources.disabledBanner': - 'Task sources are disabled in settings. Enable them to poll automatically.', - 'settings.taskSources.loadError': 'Failed to load task sources', - 'settings.taskSources.addTitle': 'Add a task source', - 'settings.taskSources.provider': 'Provider', - 'settings.taskSources.name': 'Name (optional)', - 'settings.taskSources.namePlaceholder': 'e.g. My open issues', - 'settings.taskSources.github.repo': 'Repository (owner/name, optional)', - 'settings.taskSources.github.labels': 'Labels (comma-separated)', - 'settings.taskSources.notion.database': 'Database (board) ID', - 'settings.taskSources.linear.team': 'Team ID (optional)', - 'settings.taskSources.clickup.team': 'Workspace (team) ID (optional)', - 'settings.taskSources.assignedToMe': 'Only items assigned to me', - 'settings.taskSources.add': 'Add source', - 'settings.taskSources.adding': 'Adding…', - 'settings.taskSources.preview': 'Preview', - 'settings.taskSources.previewResult': '{count} task(s) match this filter', - 'settings.taskSources.fetchNow': 'Fetch now', - 'settings.taskSources.fetching': 'Fetching…', - 'settings.taskSources.fetchResult': 'Routed {routed} of {fetched} task(s)', - 'settings.taskSources.configured': 'Configured sources', - 'settings.taskSources.empty': 'No task sources configured yet.', - 'settings.taskSources.proactive': 'Proactive', - 'settings.taskSources.lastFetch': 'Last fetch', - 'settings.taskSources.never': 'Never', - 'settings.taskSources.statusEnabled': 'Enabled', - 'settings.taskSources.statusDisabled': 'Disabled', - 'settings.taskSources.enable': 'Enable', - 'settings.taskSources.disable': 'Disable', - 'settings.taskSources.remove': 'Remove', - 'settings.taskSources.removeConfirm': - 'Remove this task source? All ingested task history will be deleted and cannot be undone.', - - 'settings.taskSources.refresh': 'Refresh', - // Task sources provider labels (#task-sources) - 'settings.taskSources.providers.github': 'GitHub', - 'settings.taskSources.providers.notion': 'Notion', - 'settings.taskSources.providers.linear': 'Linear', - 'settings.taskSources.providers.clickup': 'ClickUp', - - // /skills IA restructure (Phase 2/3) — dashboard + new-skill page. - 'skills.dashboard.title': 'Skills', - 'skills.dashboard.scheduledHeading': 'Scheduled skills', - 'skills.dashboard.emptyTitle': 'No scheduled skills', - 'skills.dashboard.emptyBody': - 'Run a bundled skill once or save a recurring schedule to see it here.', - 'skills.dashboard.create': 'Create a Skill', - 'skills.dashboard.run': 'Run a Skill', - 'skills.dashboard.enable': 'Enable scheduled skill', - 'skills.dashboard.disable': 'Disable scheduled skill', - 'skills.dashboard.lastRun': 'Last run', - 'skills.dashboard.nextRun': 'Next run', - 'skills.dashboard.cardOpenRunner': 'Open in runner', - 'skills.dashboard.loadError': 'Failed to load scheduled skills', - 'skills.new.title': 'Create a skill', - 'skills.new.placeholderBody': - 'Authoring form arrives soon. For now, use the “New skill” button on the runner page.', - 'settings.agentAccess.requireTaskPlanApproval.label': 'Require task plan approval', - 'settings.agentAccess.requireTaskPlanApproval.desc': - 'Pause before an assigned agent executes an agent-authored task brief.', -}; - -export default hi5; diff --git a/app/src/lib/i18n/chunks/id-1.ts b/app/src/lib/i18n/chunks/id-1.ts deleted file mode 100644 index fd6f1edbc..000000000 --- a/app/src/lib/i18n/chunks/id-1.ts +++ /dev/null @@ -1,1623 +0,0 @@ -import type { TranslationMap } from '../types'; - -// Indonesian (Bahasa Indonesia) chunk 1/5. Translated from chunks/en-1.ts. -const id1: TranslationMap = { - 'nav.home': 'Beranda', - 'nav.human': 'Manusia', - 'nav.chat': 'Obrolan', - 'nav.connections': 'Koneksi', - 'nav.memory': 'Memori', - 'nav.alerts': 'Peringatan', - 'nav.rewards': 'Hadiah', - 'nav.settings': 'Pengaturan', - 'common.cancel': 'Batal', - 'common.save': 'Simpan', - 'common.confirm': 'Konfirmasi', - 'common.delete': 'Hapus', - 'common.edit': 'Ubah', - 'common.create': 'Buat', - 'common.search': 'Cari', - 'common.loading': 'memuat…', - 'common.error': 'Kesalahan', - 'common.success': 'Berhasil', - 'common.back': 'Kembali', - 'common.next': 'Berikutnya', - 'common.finish': 'Selesai', - 'common.close': 'Tutup', - 'common.enabled': 'Aktif', - 'common.disabled': 'Nonaktif', - 'common.on': 'Nyala', - 'common.off': 'Mati', - 'common.yes': 'Ya', - 'common.no': 'Tidak', - 'common.ok': 'Mengerti', - 'common.retry': 'Coba lagi', - 'common.copy': 'Salin', - 'common.copied': 'Disalin', - 'common.learnMore': 'Pelajari lagi', - 'common.seeAll': 'Lihat', - 'common.dismiss': 'Abaikan', - 'common.clear': 'Bersihkan', - 'common.reset': 'Atur ulang', - 'common.refresh': 'Segarkan', - 'common.export': 'Ekspor', - 'common.import': 'Impor', - 'common.upload': 'Unggah', - 'common.download': 'Unduh', - 'common.add': 'Tambah', - 'common.remove': 'Hapus', - 'common.showMore': 'Tampilkan lagi', - 'common.showLess': 'Tampilkan sedikit', - 'common.submit': 'Kirim', - 'common.continue': 'Lanjutkan', - 'common.comingSoon': 'Segera Hadir', - 'settings.general': 'Umum', - 'settings.featuresAndAI': 'Fitur & AI', - 'settings.billingAndRewards': 'Tagihan & Hadiah', - 'settings.support': 'Dukungan', - 'settings.advanced': 'Lanjutan', - 'settings.dangerZone': 'Zona Berbahaya', - 'settings.account': 'Akun', - 'settings.accountDesc': 'Frasa pemulihan, tim, koneksi, dan privasi', - 'settings.notifications': 'Notifikasi', - 'settings.notificationsDesc': 'Jangan Ganggu dan kontrol notifikasi per akun', - 'settings.notifications.tabs.preferences': 'Preferensi', - 'settings.notifications.tabs.routing': 'Perutean', - 'settings.features': 'Fitur', - 'settings.featuresDesc': 'Kesadaran layar, pesan, dan alat', - 'settings.aiModels': 'AI & Model', - 'settings.aiModelsDesc': 'Pengaturan model AI lokal, unduhan, dan penyedia LLM', - 'settings.ai': 'AI', - 'settings.aiDesc': 'Penyedia cloud, model Ollama lokal, dan routing per beban kerja', - 'settings.billingUsage': 'Tagihan & Pemakaian', - 'settings.billingUsageDesc': 'Paket langganan, kredit, dan metode pembayaran', - 'settings.rewards': 'Hadiah', - 'settings.rewardsDesc': 'Referral, kupon, dan kredit yang diperoleh', - 'settings.restartTour': 'Ulangi Tur', - 'settings.restartTourDesc': 'Putar ulang panduan produk dari awal', - 'settings.about': 'Tentang', - 'settings.aboutDesc': 'Versi aplikasi dan pembaruan perangkat lunak', - 'settings.developerOptions': 'Opsi Developer', - 'settings.developerOptionsDesc': 'Diagnostik, panel debug, webhook, dan inspeksi memori', - 'settings.clearAppData': 'Bersihkan Data Aplikasi', - 'settings.clearAppDataDesc': 'Keluar dan hapus permanen semua data aplikasi lokal', - 'settings.logOut': 'Keluar', - 'settings.logOutDesc': 'Keluar dari akun Anda', - 'settings.exitLocalSession': 'Keluar dari sesi lokal', - 'settings.exitLocalSessionDesc': 'Kembali ke layar masuk', - 'settings.language': 'Bahasa', - 'settings.languageDesc': 'Bahasa tampilan untuk antarmuka aplikasi', - 'settings.alerts': 'Peringatan', - 'settings.alertsDesc': 'Lihat peringatan terbaru dan aktivitas di kotak masuk Anda', - 'settings.account.recoveryPhrase': 'Frasa Pemulihan', - 'settings.account.recoveryPhraseDesc': 'Lihat dan cadangkan frasa pemulihan akun Anda', - 'settings.account.team': 'Tim', - 'settings.account.teamDesc': 'Kelola anggota tim dan izin', - 'settings.account.connections': 'Koneksi', - 'settings.account.connectionsDesc': 'Kelola akun dan layanan yang terhubung', - 'settings.account.privacy': 'Privasi', - 'settings.account.privacyDesc': 'Kontrol data apa saja yang keluar dari komputer Anda', - 'settings.notifications.doNotDisturb': 'Jangan Ganggu', - 'settings.notifications.doNotDisturbDesc': 'Jeda semua notifikasi selama periode tertentu', - 'settings.notifications.channelControls': 'Kontrol Per Kanal', - 'settings.notifications.channelControlsDesc': 'Atur preferensi notifikasi untuk setiap kanal', - 'settings.features.screenAwareness': 'Kesadaran Layar', - 'settings.features.screenAwarenessDesc': 'Izinkan asisten melihat jendela aktif Anda', - 'settings.features.messaging': 'Pesan', - 'settings.features.messagingDesc': 'Pengaturan kanal dan integrasi pesan', - 'settings.features.tools': 'Alat', - 'settings.features.toolsDesc': 'Kelola alat dan integrasi yang terhubung', - 'settings.ai.localSetup': 'Pengaturan AI Lokal', - 'settings.ai.localSetupDesc': 'Unduh dan konfigurasikan model AI lokal', - 'settings.ai.llmProvider': 'Penyedia LLM', - 'settings.ai.llmProviderDesc': 'Pilih dan konfigurasikan penyedia AI Anda', - 'clearData.title': 'Bersihkan Data Aplikasi', - 'clearData.warning': - 'Ini akan mengeluarkan Anda dan menghapus permanen data aplikasi lokal termasuk:', - 'clearData.bulletSettings': 'Pengaturan aplikasi dan percakapan', - 'clearData.bulletCache': 'Semua data cache integrasi lokal', - 'clearData.bulletWorkspace': 'Data workspace', - 'clearData.bulletOther': 'Semua data lokal lainnya', - 'clearData.irreversible': 'Tindakan ini tidak dapat dibatalkan.', - 'clearData.clearing': 'Membersihkan Data Aplikasi...', - 'clearData.failed': 'Gagal membersihkan data dan keluar. Silakan coba lagi.', - 'clearData.failedLogout': 'Gagal keluar. Silakan coba lagi.', - 'clearData.failedPersist': 'Gagal membersihkan status aplikasi tersimpan. Silakan coba lagi.', - 'welcome.title': 'Selamat datang di OpenHuman', - 'welcome.subtitle': 'Asisten AI Anda untuk komunitas', - 'welcome.connectPrompt': 'Konfigurasikan RPC URL (Lanjutan)', - 'welcome.selectRuntime': 'Pilih Runtime', - 'welcome.urlPlaceholder': 'http://localhost:8089', - 'welcome.invalidUrl': 'Masukkan URL HTTP atau HTTPS yang valid', - 'welcome.connecting': 'Menguji', - 'welcome.connect': 'Uji', - 'home.greeting': 'Selamat pagi', - 'home.greetingAfternoon': 'Selamat siang', - 'home.greetingEvening': 'Selamat malam', - 'home.askAssistant': 'Tanyakan apa saja ke asisten Anda...', - 'home.statusOk': - 'Perangkat Anda terhubung. Biarkan aplikasi tetap berjalan agar koneksi tetap aktif. Kirim pesan ke agen Anda dengan tombol di bawah.', - 'home.statusBackendOnly': - 'Menghubungkan ulang ke backend... agen Anda akan segera tersedia lagi.', - 'home.statusCoreUnreachable': - 'Core sidecar lokal tidak merespons. Proses latar OpenHuman mungkin crash atau gagal dimulai.', - 'home.statusInternetOffline': - 'Perangkat Anda sedang offline. Periksa jaringan atau mulai ulang aplikasi untuk menyambung lagi.', - 'home.restartCore': 'Mulai Ulang Core', - 'home.restartingCore': 'Memulai ulang core...', - 'home.themeToggle.toLight': 'Beralih ke mode terang', - 'home.themeToggle.toDark': 'Beralih ke mode gelap', - 'chat.newThread': 'Thread baru', - 'chat.typeMessage': 'Ketik pesan...', - 'chat.send': 'Kirim pesan', - 'chat.thinking': 'Berpikir...', - 'chat.noMessages': 'Belum ada pesan', - 'chat.startConversation': 'Mulai percakapan', - 'chat.regenerate': 'Buat ulang', - 'chat.copyResponse': 'Salin respons', - 'chat.citations': 'Sitasi', - 'chat.toolUsed': 'Alat yang digunakan', - 'scope.legacy': 'Lama', - 'scope.user': 'Pengguna', - 'scope.project': 'Proyek', - 'skills.title': 'Koneksi', - 'skills.search': 'Cari koneksi...', - 'skills.noResults': 'Koneksi tidak ditemukan', - 'skills.connect': 'Hubungkan', - 'skills.disconnect': 'Putuskan', - 'skills.configure': 'Kelola', - 'skills.connected': 'Terhubung', - 'skills.available': 'Tersedia', - 'skills.addAccount': 'Tambah Akun', - 'skills.channels': 'Kanal', - 'skills.integrations': 'Integrasi', - 'memory.title': 'Memori', - 'memory.search': 'Cari memori...', - 'memory.noResults': 'Memori tidak ditemukan', - 'memory.empty': 'Belum ada memori. Memori dibuat otomatis saat Anda berinteraksi.', - 'memory.tab.memory': 'Memori', - 'memory.tab.tasks': 'Agent Tasks', - 'memory.tab.tasksDescription': - 'Create and track tasks — your own to-dos plus the boards your agents build across conversations.', - 'memory.tab.subconscious': 'Bawah sadar', - 'memory.tab.dreams': 'Mimpi', - 'memory.tab.calls': 'Panggilan', - 'memory.tab.diagram': 'Diagram', - 'memory.tab.settings': 'Pengaturan', - 'memory.analyzeNow': 'Analisis Sekarang', - 'memoryTree.status.title': 'Memory Tree', - 'memoryTree.status.autoSyncLabel': 'Auto-sync', - 'memoryTree.status.autoSyncDescription': - 'Pause to stop new ingestion. Existing wiki stays queryable.', - 'memoryTree.status.statusTile': 'Status', - 'memoryTree.status.lastSyncTile': 'Last sync', - 'memoryTree.status.totalChunksTile': 'Total chunks', - 'memoryTree.status.wikiSizeTile': 'Wiki size', - 'memoryTree.status.statusRunning': 'Running', - 'memoryTree.status.statusPaused': 'Paused', - 'memoryTree.status.statusSyncing': 'Syncing', - 'memoryTree.status.statusError': 'Error', - 'memoryTree.status.statusIdle': 'Idle', - 'memoryTree.status.never': 'Never', - 'memoryTree.status.fetchError': "Couldn't fetch Memory Tree status", - 'memoryTree.status.retry': 'Retry', - 'memoryTree.status.toggleFailed': "Couldn't toggle auto-sync", - 'memoryTree.status.justNow': 'just now', - 'memoryTree.status.secondsAgo': '{count}s ago', - 'memoryTree.status.minuteAgo': '1 min ago', - 'memoryTree.status.minutesAgo': '{count} min ago', - 'memoryTree.status.hourAgo': '1 hr ago', - 'memoryTree.status.hoursAgo': '{count} hr ago', - 'memoryTree.status.dayAgo': '1 day ago', - 'memoryTree.status.daysAgo': '{count} days ago', - 'alerts.title': 'Peringatan', - 'alerts.empty': 'Belum ada peringatan', - 'alerts.markAllRead': 'Tandai semua sudah dibaca', - 'alerts.unread': 'belum dibaca', - 'rewards.title': 'Hadiah', - 'rewards.referrals': 'Referral', - 'rewards.coupons': 'Tukarkan', - 'rewards.credits': 'Kredit', - 'rewards.referralCode': 'Kode referral Anda', - 'rewards.copyCode': 'Salin kode', - 'rewards.share': 'Bagikan', - 'onboarding.welcome': 'Hai. Saya OpenHuman.', - 'onboarding.welcomeDesc': - 'Asisten AI super cerdas yang berjalan di komputer Anda. Privat, sederhana, dan sangat kuat.', - 'onboarding.context': 'Pengumpulan Konteks', - 'onboarding.contextDesc': 'Hubungkan alat dan layanan yang Anda gunakan setiap hari.', - 'onboarding.localAI': 'AI Lokal', - 'onboarding.localAIDesc': 'Siapkan model AI lokal yang berjalan di mesin Anda.', - 'onboarding.chatProvider': 'Penyedia Chat', - 'onboarding.chatProviderDesc': 'Pilih cara Anda ingin berinteraksi dengan asisten.', - 'onboarding.referral': 'Rujukan', - 'onboarding.referralDesc': 'Gunakan kode referral jika Anda memilikinya.', - 'onboarding.finish': 'Selesaikan Pengaturan', - 'onboarding.finishDesc': 'Semua siap! Mulai gunakan OpenHuman.', - 'onboarding.skip': 'Lewati', - 'onboarding.getStarted': 'Mulai', - 'onboarding.runtimeChoice.title': 'Bagaimana Anda ingin menjalankan OpenHuman?', - 'onboarding.runtimeChoice.subtitle': - 'Pilih pengaturan yang paling sesuai untuk Anda. Anda dapat mengubahnya nanti di Pengaturan.', - 'onboarding.runtimeChoice.cloud.title': 'Sederhana', - 'onboarding.runtimeChoice.cloud.tagline': 'Biarkan OpenHuman mengelola segalanya untuk Anda.', - 'onboarding.runtimeChoice.cloud.f1': 'Keamanan bawaan', - 'onboarding.runtimeChoice.cloud.f2': 'Kompresi token untuk memaksimalkan penggunaan Anda', - 'onboarding.runtimeChoice.cloud.f3': 'Satu langganan, semua model sudah termasuk', - 'onboarding.runtimeChoice.cloud.f4': 'Tidak perlu mengelola API key', - 'onboarding.runtimeChoice.cloud.f5': 'Mudah diatur', - 'onboarding.runtimeChoice.custom.title': 'Jalankan Kustom', - 'onboarding.runtimeChoice.custom.tagline': - 'Bawa key Anda sendiri. Kontrol penuh atas apa yang Anda gunakan.', - 'onboarding.runtimeChoice.custom.f1': 'Anda memerlukan API key untuk hampir semuanya', - 'onboarding.runtimeChoice.custom.f2': 'Memanfaatkan ulang layanan yang sudah Anda bayar', - 'onboarding.runtimeChoice.custom.f3': 'Bisa gratis jika Anda menjalankan semuanya secara lokal', - 'onboarding.runtimeChoice.custom.f4': 'Lebih banyak pengaturan, lebih banyak kontrol', - 'onboarding.runtimeChoice.custom.f5': 'Terbaik untuk pengguna power dan developer', - 'onboarding.runtimeChoice.cloud.creditHighlight': '$1 kredit gratis untuk dicoba', - 'onboarding.runtimeChoice.continueCloud': 'Lanjutkan dengan Sederhana', - 'onboarding.runtimeChoice.continueCustom': 'Lanjutkan dengan Kustom', - 'onboarding.runtimeChoice.recommended': 'Direkomendasikan', - 'onboarding.apiKeys.title': 'Mari Tambahkan API Key Anda', - 'onboarding.apiKeys.subtitle': - 'Anda dapat menempelkannya sekarang atau lewati dan tambahkan nanti di Pengaturan › AI. Key disimpan di perangkat ini, dienkripsi saat penyimpanan.', - 'onboarding.apiKeys.openaiLabel': 'API key OpenAI', - 'onboarding.apiKeys.openaiPlaceholder': 'sk-...', - 'onboarding.apiKeys.anthropicLabel': 'API key Anthropic', - 'onboarding.apiKeys.anthropicPlaceholder': 'sk-ant-...', - 'onboarding.apiKeys.saveError': - 'Tidak dapat menyimpan key tersebut. Periksa kembali dan coba lagi.', - 'onboarding.apiKeys.skipForNow': 'Lewati untuk sekarang', - 'onboarding.apiKeys.continue': 'Simpan dan lanjutkan', - 'onboarding.apiKeys.saving': 'Menyimpan...', - 'onboarding.custom.stepperInference': 'Inferensi', - 'onboarding.custom.stepperVoice': 'Suara', - 'onboarding.custom.stepperOAuth': 'OAuth', - 'onboarding.custom.stepperSearch': 'Pencarian', - 'onboarding.custom.stepperEmbeddings': 'Embeddings', - 'onboarding.custom.stepperMemory': 'Memori', - 'onboarding.custom.stepCounter': 'Langkah {n} dari {total}', - 'onboarding.custom.defaultTitle': 'Bawaan', - 'onboarding.custom.defaultSubtitle': 'Biarkan OpenHuman mengelolanya untuk Anda.', - 'onboarding.custom.configureTitle': 'Konfigurasi', - 'onboarding.custom.configureSubtitle': 'Saya akan memilih apa yang digunakan.', - 'onboarding.custom.progressAriaLabel': 'Progres orientasi', - 'onboarding.custom.continue': 'Lanjutkan', - 'onboarding.custom.back': 'Kembali', - 'onboarding.custom.finish': 'Selesaikan Pengaturan', - 'onboarding.custom.configureLater': - 'Anda dapat menyelesaikan pengaturan ini setelah orientasi. Kami akan mengarahkan Anda ke halaman Pengaturan yang sesuai setelah selesai.', - 'onboarding.custom.openSettings': 'Buka di Pengaturan', - 'onboarding.custom.inference.title': 'Inferensi (Teks)', - 'onboarding.custom.inference.subtitle': - 'Model bahasa mana yang harus menjawab pertanyaan dan menjalankan agen Anda?', - 'onboarding.custom.inference.defaultDesc': - 'OpenHuman mengarahkan setiap beban kerja ke model default yang masuk akal. Tidak perlu key, tidak perlu pengaturan.', - 'onboarding.custom.inference.configureDesc': - 'Bawa key OpenAI atau Anthropic Anda sendiri. Kami menggunakannya untuk setiap beban kerja berbasis teks.', - 'onboarding.custom.voice.title': 'Suara', - 'onboarding.custom.voice.subtitle': 'Speech-to-text dan text-to-speech untuk mode suara.', - 'onboarding.custom.voice.defaultDesc': - 'OpenHuman dilengkapi dengan STT/TTS terkelola yang langsung berfungsi. Tidak ada yang perlu dikonfigurasi.', - 'onboarding.custom.voice.configureDesc': - 'Gunakan ElevenLabs / OpenAI Whisper / dll. milik Anda sendiri. Konfigurasi di Pengaturan › Suara.', - 'onboarding.custom.oauth.title': 'Koneksi (OAuth)', - 'onboarding.custom.oauth.subtitle': - 'Gmail, Slack, Notion, dan layanan terhubung lainnya yang memerlukan OAuth.', - 'onboarding.custom.oauth.defaultDesc': - 'OpenHuman menjalankan workspace Composio terkelola. Satu klik untuk menghubungkan setiap layanan nanti.', - 'onboarding.custom.oauth.configureDesc': - 'Bawa akun Composio / API key Anda sendiri. Konfigurasi di Pengaturan › Koneksi.', - 'onboarding.custom.search.title': 'Pencarian Web', - 'onboarding.custom.search.subtitle': 'Cara OpenHuman mencari web atas nama Anda.', - 'onboarding.custom.search.defaultDesc': - 'OpenHuman menggunakan backend pencarian terkelola. Tidak perlu key.', - 'onboarding.custom.search.configureDesc': - 'Bawa key penyedia pencarian Anda sendiri (Tavily, Brave, dll.). Konfigurasi di Pengaturan › Alat.', - 'onboarding.custom.embeddings.title': 'Embeddings', - 'onboarding.custom.embeddings.subtitle': - 'How OpenHuman generates vector embeddings for semantic memory search.', - 'onboarding.custom.embeddings.defaultDesc': - 'OpenHuman uses a managed embedding service. No API key needed.', - 'onboarding.custom.embeddings.configureDesc': - 'Bring your own embedding provider (OpenAI, Voyage, Ollama, etc.).', - 'onboarding.custom.memory.title': 'Memori', - 'onboarding.custom.memory.subtitle': - 'Cara OpenHuman mengingat konteks, preferensi, dan percakapan sebelumnya.', - 'onboarding.custom.memory.defaultDesc': - 'OpenHuman mengelola penyimpanan dan pengambilan memori secara otomatis. Tidak ada yang perlu diatur.', - 'onboarding.custom.memory.configureDesc': - 'Periksa, ekspor, atau hapus memori sendiri. Konfigurasi di Pengaturan › Memori.', - 'accounts.addAccount': 'Tambah Akun', - 'accounts.manageAccounts': 'Kelola Akun', - 'accounts.noAccounts': 'Belum ada akun terhubung', - 'accounts.connectAccount': 'Hubungkan akun untuk memulai', - 'accounts.agent': 'Agen', - 'accounts.respondQueue': 'Antrean Respons', - 'accounts.disconnect': 'Putuskan', - 'accounts.disconnectConfirm': 'Yakin ingin memutuskan akun ini?', - 'accounts.disconnectClearMemory': 'Also delete memory from this source', - 'accounts.disconnectClearMemoryHint': - 'Permanently removes local memory chunks linked to this connection.', - 'accounts.searchAccounts': 'Cari akun...', - 'channels.title': 'Kanal', - 'channels.configure': 'Konfigurasi Kanal', - 'channels.setup': 'Pengaturan', - 'channels.noChannels': 'Belum ada kanal yang dikonfigurasi', - 'channels.addChannel': 'Tambah Kanal', - 'channels.status.connected': 'Terhubung', - 'channels.status.disconnected': 'Terputus', - 'channels.status.error': 'Kesalahan', - 'channels.status.configuring': 'Mengonfigurasi', - 'channels.defaultMessaging': 'Kanal Pesan Default', - 'webhooks.title': 'Webhook', - 'webhooks.create': 'Buat Webhook', - 'webhooks.noWebhooks': 'Belum ada webhook yang dikonfigurasi', - 'webhooks.url': 'URL', - 'webhooks.secret': 'Rahasia', - 'webhooks.events': 'Event', - 'webhooks.archiveDirectory': 'Direktori Arsip', - 'webhooks.todayFile': 'File Hari Ini', - 'invites.title': 'Undangan', - 'invites.create': 'Buat Undangan', - 'invites.noInvites': 'Tidak ada undangan tertunda', - 'invites.code': 'Kode Undangan', - 'invites.copyLink': 'Salin Link', - 'devOptions.title': 'Opsi Developer', - 'devOptions.diagnostics': 'Diagnostik', - 'devOptions.diagnosticsDesc': 'Kesehatan sistem, log, dan metrik performa', - 'devOptions.toolPolicyDiagnosticsDesc': - 'Tool inventory, policy posture, MCP allowlists, and recent blocks', - 'devOptions.toolPolicyDiagnostics.loading': 'Loading…', - 'devOptions.toolPolicyDiagnostics.unavailable': 'Diagnostics unavailable', - 'devOptions.toolPolicyDiagnostics.posture.title': 'Policy posture', - 'devOptions.toolPolicyDiagnostics.posture.autonomy': 'Autonomy:', - 'devOptions.toolPolicyDiagnostics.posture.workspaceOnly': 'Workspace only:', - 'devOptions.toolPolicyDiagnostics.posture.maxActionsPerHour': 'Max actions/hr:', - 'devOptions.toolPolicyDiagnostics.posture.approvalMediumRisk': 'Approval (medium risk):', - 'devOptions.toolPolicyDiagnostics.posture.blockHighRisk': 'Block high risk:', - 'devOptions.toolPolicyDiagnostics.inventory.title': 'Inventory', - 'devOptions.toolPolicyDiagnostics.inventory.totalTools': 'Total tools', - 'devOptions.toolPolicyDiagnostics.inventory.enabledTools': 'Enabled tools', - 'devOptions.toolPolicyDiagnostics.inventory.mcpStdioTools': 'MCP stdio tools', - 'devOptions.toolPolicyDiagnostics.inventory.jsonRpcTools': 'JSON-RPC tools', - 'devOptions.toolPolicyDiagnostics.mcpAllowlists.title': 'MCP allowlists', - 'devOptions.toolPolicyDiagnostics.mcpAllowlists.summary': - 'Enabled: {enabled} · Servers: {enabledCount}/{totalCount}', - 'devOptions.toolPolicyDiagnostics.mcpAllowlists.unnamed': '', - 'devOptions.toolPolicyDiagnostics.mcpAllowlists.allowDeny': 'allow={allowCount} deny={denyCount}', - 'devOptions.toolPolicyDiagnostics.mcpWriteAudit.title': 'MCP write audit', - 'devOptions.toolPolicyDiagnostics.mcpWriteAudit.summary': - 'Enabled: {enabled} · Recent (24h): {recentRows}', - 'devOptions.toolPolicyDiagnostics.recentBlocked.title': 'Recent blocked calls', - 'devOptions.toolPolicyDiagnostics.recentBlocked.empty': 'No blocked calls recorded.', - 'devOptions.toolPolicyDiagnostics.redactedSurfaces.title': 'Redacted surfaces', - 'devOptions.toolPolicyDiagnostics.redactedSurfaces.summary': - 'Write-capable: {writeCount} · Policy surfaces: {policyCount}', - 'devOptions.debugPanels': 'Panel Debug', - 'devOptions.debugPanelsDesc': 'Feature flag, inspeksi status, dan alat debugging', - 'devOptions.webhooks': 'Webhook', - 'devOptions.webhooksDesc': 'Konfigurasi dan uji integrasi webhook', - 'devOptions.memoryInspection': 'Inspeksi Memori', - 'devOptions.memoryInspectionDesc': 'Jelajahi, kueri, dan kelola entri memori', - 'voice.pushToTalk': 'Tekan untuk Bicara', - 'voice.recording': 'Merekam...', - 'voice.processing': 'Memproses...', - 'voice.languageHint': 'Bahasa', - 'misc.rehydrating': 'Memuat data Anda...', - 'misc.checkingServices': 'Memeriksa layanan...', - 'misc.serviceUnavailable': 'Layanan Tidak Tersedia', - 'misc.somethingWentWrong': 'Terjadi kesalahan', - 'misc.tryAgainLater': 'Silakan coba lagi nanti.', - 'misc.restartApp': 'Mulai Ulang Aplikasi', - 'misc.updateAvailable': 'Pembaruan Tersedia', - 'misc.updateNow': 'Perbarui Sekarang', - 'misc.updateLater': 'Nanti', - 'misc.downloading': 'Mengunduh...', - 'misc.installing': 'Menginstal...', - 'misc.beta': 'Beta', - 'misc.betaFeedback': 'Kirim masukan', - 'mnemonic.title': 'Frasa Pemulihan', - 'mnemonic.warning': 'Tulis kata-kata ini berurutan dan simpan di tempat aman.', - 'mnemonic.copyWarning': - 'Jangan pernah membagikan frasa pemulihan. Siapa pun yang memiliki kata-kata ini dapat mengakses akun Anda.', - 'mnemonic.copied': 'Frasa pemulihan disalin ke clipboard', - 'mnemonic.reveal': 'Tampilkan frasa', - 'mnemonic.revealPhrase': 'Reveal recovery phrase', - 'mnemonic.hidden': 'Frasa pemulihan disembunyikan', - 'privacy.title': 'Privasi & Keamanan', - 'privacy.description': 'Laporan transparansi data yang dikirim ke layanan eksternal.', - 'privacy.empty': 'Tidak ada transfer data eksternal terdeteksi.', - 'privacy.whatLeavesComputer': 'Data yang keluar dari komputer Anda', - 'privacy.loading': 'Memuat detail privasi...', - 'privacy.loadError': - 'Tidak dapat memuat daftar privasi live. Kontrol analitik di bawah tetap berfungsi.', - 'privacy.noCapabilities': 'Belum ada kemampuan yang mengungkap pergerakan data.', - 'privacy.sentTo': 'Dikirim ke', - 'privacy.leavesDevice': 'Keluar dari perangkat', - 'privacy.staysLocal': 'Tetap lokal', - 'privacy.anonymizedAnalytics': 'Analitik Anonim', - 'privacy.shareAnonymizedData': 'Bagikan Data Penggunaan Anonim', - 'privacy.shareAnonymizedDataDesc': - 'Bantu meningkatkan OpenHuman dengan membagikan laporan crash dan analitik penggunaan anonim. Semua data sepenuhnya anonim; tidak ada data pribadi, pesan, kunci dompet, atau informasi sesi yang dikumpulkan.', - 'privacy.meetingFollowUps': 'Tindak lanjut rapat', - 'privacy.autoHandoffMeet': 'Serahkan transkrip Google Meet otomatis ke orchestrator', - 'privacy.autoHandoffMeetDesc': - 'Saat panggilan Google Meet berakhir, orchestrator OpenHuman dapat membaca transkrip dan mengambil tindakan seperti menyusun pesan, menjadwalkan tindak lanjut, atau memposting ringkasan ke workspace Slack yang terhubung. Nonaktif secara default.', - 'privacy.analyticsDisclaimer': - 'Semua analitik dan laporan bug sepenuhnya anonim. Saat aktif, kami hanya mengumpulkan informasi crash, jenis perangkat, dan lokasi file error. Kami tidak pernah mengakses pesan, data sesi, kunci dompet, API key, atau informasi pribadi Anda. Pengaturan ini bisa diubah kapan saja.', - 'settings.about.version': 'Versi', - 'settings.about.updateAvailable': 'tersedia', - 'settings.about.softwareUpdates': 'Pembaruan perangkat lunak', - 'settings.about.lastChecked': 'Terakhir diperiksa', - 'settings.about.checking': 'Memeriksa...', - 'settings.about.checkForUpdates': 'Periksa pembaruan', - 'settings.about.releases': 'Rilis', - 'settings.about.releasesDesc': 'Telusuri catatan rilis dan build sebelumnya di GitHub.', - 'settings.about.openReleases': 'Buka rilis GitHub', - 'settings.ai.overview': 'Ringkasan Sistem AI', - 'migration.title': 'Impor dari asisten lain', - 'migration.description': - 'Migrasikan memori dan catatan dari asisten lokal lain ke ruang kerja ini. Mulai dengan Pratinjau untuk melihat persis apa yang akan berubah, lalu klik Terapkan untuk menyalin datanya. Memori Anda saat ini dicadangkan terlebih dahulu.', - 'migration.vendorLabel': 'Sumber', - 'migration.sourceLabel': 'Path ruang kerja sumber (opsional)', - 'migration.sourcePlaceholder': - 'Biarkan kosong untuk deteksi otomatis (misalnya ~/.openclaw/workspace)', - 'migration.sourcePlaceholderHermes': 'Leave blank to auto-detect (e.g. ~/.hermes)', - 'migration.sourceHint': - 'Kosong berarti memakai lokasi default sumber. Isi path eksplisit jika ruang kerja sudah dipindahkan.', - 'migration.previewAction': 'Pratinjau', - 'migration.previewRunning': 'Memuat pratinjau…', - 'migration.applyAction': 'Terapkan impor', - 'migration.applyRunning': 'Mengimpor…', - 'migration.applyDisclaimer': - 'Terapkan terbuka setelah Pratinjau berhasil untuk sumber yang sama. Memori yang ada dicadangkan sebelum impor apa pun.', - 'migration.reportTitlePreview': 'Pratinjau — belum ada yang diimpor', - 'migration.reportTitleApplied': 'Impor selesai', - 'migration.report.source': 'Ruang kerja sumber', - 'migration.report.target': 'Ruang kerja tujuan', - 'migration.report.fromSqlite': 'Dari SQLite (brain.db)', - 'migration.report.fromMarkdown': 'Dari Markdown', - 'migration.report.imported': 'Diimpor', - 'migration.report.skippedUnchanged': 'Dilewati (tidak berubah)', - 'migration.report.renamedConflicts': 'Diganti nama saat konflik', - 'migration.report.warnings': 'Peringatan', - 'migration.report.previewHint': - 'Belum ada data yang diimpor. Klik Terapkan impor untuk menyalinnya.', - 'migration.report.appliedHint': - 'Entri yang diimpor kini ada di memori Anda. Jalankan Pratinjau lagi untuk membandingkan.', - 'migration.confirmImport.singular': - 'Impor {count} entri ke ruang kerja saat ini?\n\nSumber: {source}\nTujuan: {target}\n\nMemori yang ada akan dicadangkan sebelum impor dimulai.', - 'migration.confirmImport.plural': - 'Impor {count} entri ke ruang kerja saat ini?\n\nSumber: {source}\nTujuan: {target}\n\nMemori yang ada akan dicadangkan sebelum impor dimulai.', - // Settings menu: Appearance + Mascot (#2225) - 'settings.appearance': 'Tampilan', - 'settings.appearanceDesc': 'Pilih terang, gelap, atau ikuti tema sistem Anda', - 'settings.mascot': 'Maskot', - 'settings.mascotDesc': 'Pilih warna maskot yang digunakan di seluruh aplikasi', - // channels.* keys — English stubs; native translations welcome - 'channels.authMode.managed_dm': 'Masuk dengan OpenHuman', - 'channels.authMode.oauth': 'OAuth Masuk', - 'channels.authMode.bot_token': 'Gunakan Token Bot Anda sendiri', - 'channels.authMode.api_key': 'Gunakan Kunci API Anda sendiri', - 'channels.fieldRequired': '{field} diperlukan', - 'channels.mcp.title': 'MCP Server', - 'channels.mcp.description': - 'Browse and manage Model Context Protocol servers that extend the AI with new tools.', - 'skills.integrationsSubtitle': - 'Cloud-based OAuth connections — sign in with your account and Composio brokers the tokens so agents can read and act on your behalf. No API keys to manage.', - 'skills.tabs.composio': 'Composio', - 'skills.tabs.channels': 'Saluran', - 'skills.tabs.mcp': 'MCP Server', - 'skills.mcpComingSoon.title': 'MCP Server', - 'skills.mcpComingSoon.description': - 'MCP server management is coming soon. This tab will be the home for discovering, connecting, and monitoring your MCP server integrations.', - 'settings.about.connection': 'Koneksi', - 'settings.about.connectionMode': 'Mode', - 'settings.about.connectionModeLocal': 'Lokal', - 'settings.about.connectionModeCloud': 'Awan', - 'settings.about.connectionModeUnset': 'Tidak dipilih', - 'settings.about.serverUrl': 'Server URL', - 'settings.about.serverUrlUnavailable': 'Tidak tersedia', - 'settings.about.connectionHelperLocal': - 'Spawned in-process by the Tauri shell on app launch. The port is chosen at startup, so this URL changes between launches.', - 'settings.about.connectionHelperCloud': - 'Connected to a remote core. Change this in BootCheck or the cloud mode picker.', - 'settings.heartbeat.title': 'Detak jantung & loop', - 'settings.heartbeat.desc': 'Kontrol irama penjadwalan latar belakang dan periksa peta loop.', - 'settings.ledgerUsage.title': 'Buku besar penggunaan', - 'settings.ledgerUsage.desc': 'Recent credit spend, budget math, and background API read budget.', - 'settings.costDashboard.title': 'Cost dashboard', - 'settings.costDashboard.desc': - '7-day spend and token burn across the swarm, with budget pace and per-model breakdown.', - 'settings.costDashboard.sevenDayCost': '7-day daily cost', - 'settings.costDashboard.sevenDayTokens': '7-day token usage', - 'settings.costDashboard.totalSpend': '7-day total', - 'settings.costDashboard.monthlyPace': 'Monthly pace', - 'settings.costDashboard.budgetLimit': 'Budget limit', - 'settings.costDashboard.utilization': 'Utilisation', - 'settings.costDashboard.modelBreakdown': 'Per-model breakdown', - 'settings.costDashboard.model': 'Model', - 'settings.costDashboard.provider': 'Provider', - 'settings.costDashboard.cost': 'Cost', - 'settings.costDashboard.tokens': 'Tokens', - 'settings.costDashboard.requests': 'Requests', - 'settings.costDashboard.percentOfTotal': '% of total', - 'settings.costDashboard.inputTokens': 'Input', - 'settings.costDashboard.outputTokens': 'Output', - 'settings.costDashboard.budgetNormal': 'On track', - 'settings.costDashboard.budgetWarning': 'Warning', - 'settings.costDashboard.budgetExceeded': 'Over budget', - 'settings.costDashboard.noBudget': 'No limit set', - 'settings.costDashboard.noData': 'No cost recorded yet for the last 7 days.', - 'settings.costDashboard.noModels': 'No model activity in the last 7 days.', - 'settings.costDashboard.loading': 'Loading cost dashboard…', - 'settings.costDashboard.disabledHint': - 'Cost dashboard is disabled in config. Set [cost.dashboard] enabled = true in config.toml to re-enable.', - 'settings.costDashboard.subtitle': - 'Live spend and token burn across the swarm. Bars auto-refresh every few seconds — no page reload needed.', - 'settings.costDashboard.summaryAriaLabel': 'Cost summary metrics', - 'settings.costDashboard.lastSevenDays': 'last 7 days', - 'settings.costDashboard.utilizationOf': 'of', - 'settings.costDashboard.thisMonth': 'this month', - 'settings.costDashboard.monthlyPaceHint': - 'Projected monthly spend at the current daily run-rate (avg × 30).', - 'settings.costDashboard.budgetLimitHint': - 'Monthly budget read from cost.monthly_limit_usd in config.toml.', - 'settings.costDashboard.dailyTarget': 'Daily target', - 'settings.costDashboard.today': 'Today', - 'settings.costDashboard.todayBadge': 'TODAY', - 'settings.costDashboard.unknownProvider': '—', - 'settings.costDashboard.justNow': 'Just now', - 'settings.costDashboard.secondsAgo': '{value}s ago', - 'settings.costDashboard.minutesAgo': '{value}m ago', - 'settings.costDashboard.hoursAgo': '{value}h ago', - 'settings.costDashboard.daysAgo': '{value}d ago', - 'settings.costDashboard.updated': 'Updated', - 'settings.costDashboard.refresh': 'Refresh', - 'settings.costDashboard.utcNote': 'Days bucketed in UTC', - 'settings.costDashboard.stackedNote': 'Input + output stacked', - 'settings.costDashboard.modelBreakdownHint': 'Aggregated across the last 7 days.', - 'settings.costDashboard.noDataHint': - 'Send an agent message — token usage from the next provider call will populate the chart within ~10 seconds.', - 'settings.search.title': 'Mesin pencari', - 'settings.search.menuDesc': - 'Default to OpenHuman-managed search or wire up your own provider with an API key.', - 'settings.search.description': - 'Pick the search engine the agent uses. Managed uses OpenHuman’s backend (no setup). Parallel and Brave run direct from your machine using your API key.', - 'settings.search.engineAria': 'Mesin pencari', - 'settings.search.engineManagedLabel': 'OpenHuman Dikelola', - 'settings.search.engineManagedDesc': - 'Default. Routed through the OpenHuman backend — no API key required.', - 'settings.search.engineParallelLabel': 'Parallel', - 'settings.search.engineParallelDesc': - 'Direct Parallel API: search, extract, chat, research, enrich, dataset tools.', - 'settings.search.engineBraveLabel': 'Brave Penelusuran', - 'settings.search.engineBraveDesc': 'Direct Brave Search API: web, news, image, and video tools.', - 'settings.search.engineQueritLabel': 'Querit', - 'settings.search.engineQueritDesc': - 'Direct Querit API: web search with site, time range, country, and language filters.', - 'settings.search.statusConfigured': 'Dikonfigurasi', - 'settings.search.statusNeedsKey': 'Memerlukan kunci API', - 'settings.search.fallbackToManaged': - 'No key configured — search will fall back to Managed until a key is saved.', - 'settings.search.getApiKey': 'Dapatkan kunci API', - 'settings.search.save': 'Simpan', - 'settings.search.clear': 'Hapus', - 'settings.search.show': 'Tampilkan', - 'settings.search.hide': 'Sembunyikan', - 'settings.search.statusSaving': 'Menyimpan…', - 'settings.search.statusSaved': 'Tersimpan.', - 'settings.search.statusError': 'Gagal', - 'settings.search.parallelKeyLabel': 'Parallel API kunci', - 'settings.search.braveKeyLabel': 'Brave Penelusuran API kunci', - 'settings.search.queritKeyLabel': 'Querit API key', - 'settings.search.placeholderStored': '•••••••• (disimpan)', - 'settings.search.placeholderParallel': 'pk_...', - 'settings.search.placeholderBrave': 'BSA...', - 'settings.search.placeholderQuerit': 'Querit API key', - 'settings.embeddings.title': 'Sematan', - 'settings.embeddings.description': - 'Pilih penyedia embedding yang mengubah memori menjadi vektor untuk pencarian semantik. Mengubah penyedia, model, atau dimensi membatalkan vektor yang tersimpan dan memerlukan reset memori penuh.', - 'settings.embeddings.providerAria': 'Penyedia embedding', - 'settings.embeddings.statusConfigured': 'Dikonfigurasi', - 'settings.embeddings.statusNeedsKey': 'Perlu kunci API', - 'settings.embeddings.apiKeyLabel': 'Kunci API {provider}', - 'settings.embeddings.placeholderStored': '•••••••• (disimpan)', - 'settings.embeddings.placeholderKey': 'Tempel kunci API Anda…', - 'settings.embeddings.keyStoredEncrypted': 'Kunci API Anda disimpan terenkripsi di perangkat ini.', - 'settings.embeddings.show': 'Tampilkan', - 'settings.embeddings.hide': 'Sembunyikan', - 'settings.embeddings.save': 'Simpan', - 'settings.embeddings.clear': 'Hapus', - 'settings.embeddings.model': 'Model', - 'settings.embeddings.dimensions': 'Dimensi', - 'settings.embeddings.customEndpoint': 'Endpoint kustom', - 'settings.embeddings.customModelPlaceholder': 'Nama model', - 'settings.embeddings.customDimsPlaceholder': 'Meredupkan', - 'settings.embeddings.applyCustom': 'Terapkan', - 'settings.embeddings.testConnection': 'Uji koneksi', - 'settings.embeddings.testing': 'Menguji…', - 'settings.embeddings.testSuccess': 'Terhubung — {dims} dimensi', - 'settings.embeddings.testFailed': 'Gagal: {error}', - 'settings.embeddings.saving': 'Menyimpan…', - 'settings.embeddings.saved': 'Tersimpan.', - 'settings.embeddings.errorPrefix': 'Gagal', - 'settings.embeddings.wipeTitle': 'Reset vektor memori?', - 'settings.embeddings.wipeBody': - 'Mengubah penyedia embedding, model, atau dimensi akan menghapus semua vektor memori yang tersimpan. Memori harus dibangun ulang sebelum pencarian berfungsi kembali. Ini tidak dapat dibatalkan.', - 'settings.embeddings.cancel': 'Batal', - 'settings.embeddings.confirmWipe': 'Hapus & terapkan', - 'settings.embeddings.setupTitle': 'Siapkan {provider}', - 'settings.embeddings.saveAndSwitch': 'Simpan & ganti', - 'settings.embeddings.optional': 'opsional', - 'settings.embeddings.vectorSearchDisabled': - 'Vector search is disabled. Memory recall will use keyword matching and recency only — no semantic ranking.', - 'settings.embeddings.clearKey': 'Hapus kunci API', - 'mcp.alphaBadge': 'Alfa', - 'mcp.alphaBannerText': - 'MCP server support is in early alpha. The Smithery registry, install flow, and tool wiring may misbehave or change shape between releases.', - 'mcp.toolList.noTools': 'Tidak ada alat yang tersedia.', - 'mcp.setup.secretDialog.title': 'MCP Penyiapan — Masukkan Rahasia', - 'mcp.setup.secretDialog.bodyPrefix': 'Agen penyiapan MCP memerlukan', - 'mcp.setup.secretDialog.bodySuffix': - '. Your value is sent directly to the core process and never enters the AI conversation.', - 'mcp.setup.secretDialog.inputLabel': 'Nilai', - 'mcp.setup.secretDialog.inputPlaceholder': 'Tempel di sini', - 'mcp.setup.secretDialog.show': 'Tampilkan', - 'mcp.setup.secretDialog.hide': 'Sembunyikan', - 'mcp.setup.secretDialog.submit': 'Kirim', - 'mcp.setup.secretDialog.cancel': 'Batal', - 'mcp.setup.secretDialog.submitting': 'Mengirimkan…', - 'mcp.setup.secretDialog.errorPrefix': 'Gagal mengirimkan:', - 'mcp.setup.secretDialog.privacyNote': - 'Stored encrypted in the local MCP secrets table. Never logged or sent to a model.', - 'devices.betaBadge': 'Beta', - 'devices.betaText': - 'This feature is currently in beta. Pair iOS phones with this OpenHuman to use them as a remote client.', - 'autonomy.title': 'Otonomi agen', - 'autonomy.maxActionsLabel': 'Tindakan maksimal per jam', - 'autonomy.maxActionsHelp': - 'Maximum tool actions an agent can run per rolling hour. New value applies to your next chat. Cron jobs and channel listeners keep their current limit until you restart OpenHuman.', - 'autonomy.statusSaving': 'Menyimpan…', - 'autonomy.statusSaved': 'Tersimpan.', - 'autonomy.statusFailed': 'Gagal', - 'autonomy.unlimitedNote': 'Tidak terbatas — pembatasan tarif dinonaktifkan.', - 'autonomy.invalidIntegerMsg': - 'Must be a positive integer (use the Unlimited preset for no limit).', - 'autonomy.presetUnlimited': 'Tidak terbatas (default)', - 'triggers.toggleFailed': '{action} gagal untuk {trigger}: {message}', - 'skills.composio.noApiKeyTitle': 'Tidak ada Composio API Kunci Dikonfigurasi', - 'skills.composio.noApiKeyDescription': - 'Local mode uses your own Composio API key. Open Settings → Advanced → Composio to add one before connecting integrations here.', - 'skills.composio.noApiKeyCta': 'Buka di Pengaturan', - 'rewards.localUnavailable': - 'Local login does not earn rewards, coupons, or referral credit. To earn rewards, log out and continue by signing in with an OpenHuman account.', - 'rewards.localUnavailableCta': 'Buka Pengaturan Akun', - 'channels.localManagedUnavailable': 'Saluran yang dikelola tidak tersedia untuk pengguna lokal.', - 'settings.search.localManagedUnavailable': - 'OpenHuman Managed search is not available for local users. Add your own Parallel, Brave, or Querit API key to enable web search.', - 'devices.comingSoonDescription': - 'Device pairing is coming soon. This page will be the home for pairing iPhones and managing connected devices.', - 'common.breadcrumb': 'Jejak navigasi', - 'settings.betaBuild': 'Build beta - v{version}', - 'migration.vendor.openclaw': 'OpenClaw', - 'migration.vendor.hermes': 'Hermes Agent', - 'onboarding.apiKeys.openaiOauthHint': - 'Gunakan ChatGPT Plus/Pro (langganan) atau kunci API OpenAI — tidak perlu keduanya.', - 'onboarding.apiKeys.openaiOauthOpening': 'Membuka masuk…', - 'onboarding.apiKeys.finishSignIn': 'Selesaikan masuk ChatGPT', - 'onboarding.apiKeys.orApiKey': 'atau kunci API', - 'calls.title': 'Panggilan', - 'calls.comingSoonBody': 'Panggilan berbantuan AI akan segera hadir. Nantikan.', - 'rewards.referralSection.retry': 'Coba lagi', - 'devOptions.sentryDisabled': '(tanpa ID — Sentry dinonaktifkan pada build ini)', - 'home.usageExhaustedTitle': 'Jatah penggunaan Anda telah habis', - 'home.usageExhaustedBody': - 'Kuota penggunaan yang termasuk saat ini sudah habis. Mulai langganan untuk membuka kapasitas berkelanjutan yang lebih besar.', - 'home.usageExhaustedCta': 'Mulai berlangganan', - 'home.routinesCard': 'Your Routines', - 'home.routinesActive': '{count} active', - 'routines.title': 'Your Routines', - 'routines.subtitle': 'Things your assistant does automatically', - 'routines.loading': 'Loading routines…', - 'routines.empty': 'No routines yet', - 'routines.emptyHint': - 'Your assistant can run tasks on a schedule — like morning briefings or daily summaries.', - 'routines.refresh': 'Refresh', - 'routines.nextRun': 'Next run', - 'routines.lastRunSuccess': 'Last run succeeded', - 'routines.lastRunFailed': 'Last run failed', - 'routines.notRunYet': 'Not run yet', - 'routines.runNow': 'Run Now', - 'routines.running': 'Running…', - 'routines.viewHistory': 'View history', - 'routines.loadingHistory': 'Loading…', - 'routines.noHistory': 'No run history yet.', - 'routines.statusSuccess': 'Success', - 'routines.statusError': 'Error', - 'routines.showOutput': 'Show output', - 'routines.hideOutput': 'Hide output', - 'routines.toggleEnabled': 'Enable or disable this routine', - 'routines.typeAgent': 'Agent', - 'routines.typeCommand': 'Command', - 'nav.routines': 'Routines', - 'common.name': 'Nama', - 'settings.ai.disconnectProvider': 'Putuskan sambungan {label}', - 'settings.ai.connectProviderLabel': 'Sambungkan {label}', - 'settings.ai.defaultLocalEndpoint': 'http://localhost:11434/v1', - 'settings.ai.endpointUrlLabel': 'Titik Akhir URL', - 'settings.ai.localRuntimeHelper': - 'Where {label} is reachable. Default is localhost; point this at a remote host (for example, http://10.0.0.4:11434/v1) to use a shared instance.', - 'settings.ai.endpointUrlRequired': 'Titik akhir URL diperlukan.', - 'settings.ai.endpointProtocolRequired': 'Titik akhir harus dimulai dengan http:// atau https://.', - 'settings.ai.connectProviderDialog': 'Hubungkan {label}', - 'settings.ai.or': 'Atau', - 'settings.ai.openRouterOauthDescription': - 'Sign in with OpenRouter and import a user-controlled API key using PKCE.', - 'settings.ai.connecting': 'Menghubungkan...', - 'settings.ai.backgroundLoops': 'Perulangan latar belakang', - 'settings.ai.backgroundLoopsDesc': - 'See what runs without a chat message, pause heartbeat work, and inspect recent credit ledger rows.', - 'settings.ai.heartbeatControls': 'Kontrol detak jantung', - 'settings.ai.heartbeatControlsDesc': - 'Defaults off. Enabling starts the loop; disabling aborts the running task.', - 'settings.ai.heartbeatLoop': 'Putaran detak jantung', - 'settings.ai.heartbeatLoopDesc': - 'Master scheduler for planner + optional subconscious inference.', - 'settings.ai.subconsciousInference': 'Inferensi bawah sadar', - 'settings.ai.subconsciousInferenceDesc': - 'Runs model-backed task/reflection evaluation on heartbeat ticks.', - 'settings.ai.calendarMeetingChecks': 'Pemeriksaan rapat kalender', - 'settings.ai.calendarMeetingChecksDesc': - 'Calls calendar event list for active Google Calendar connections.', - 'settings.ai.calendarCap': 'Batas kalender', - 'settings.ai.connectionsPerTick': '{count} samb/centang', - 'settings.ai.meetingLookahead': 'Pertemuan ke depan', - 'settings.ai.minutesShort': '{count} mnt', - 'settings.ai.reminderLookahead': 'Pengingat ke depan', - 'settings.ai.cronReminderChecks': 'Pemeriksaan pengingat cron', - 'settings.ai.cronReminderChecksDesc': 'Scans enabled cron jobs for reminder-like upcoming items.', - 'settings.ai.relevantNotificationChecks': 'Pemeriksaan notifikasi yang relevan', - 'settings.ai.relevantNotificationChecksDesc': - 'Promotes urgent local notifications into proactive alerts.', - 'settings.ai.externalDelivery': 'Pengiriman eksternal', - 'settings.ai.externalDeliveryDesc': - 'Lets heartbeat alerts send proactive messages to external channels.', - 'settings.ai.interval': 'Interval', - 'settings.ai.running': 'Berjalan...', - 'settings.ai.plannerTickNow': 'Perencana centang sekarang', - 'settings.ai.loadingHeartbeatControls': 'Memuat kontrol detak jantung...', - 'settings.ai.heartbeatControlsUnavailable': 'Kontrol detak jantung tidak tersedia.', - 'settings.ai.loopMap': 'Peta loop', - 'settings.ai.on': 'aktif', - 'settings.ai.off': 'nonaktif', - 'settings.ai.recentUsageLedger': 'Buku besar penggunaan terkini', - 'settings.ai.recentUsageLedgerDesc': - 'Backend rows expose action/time today; source tags need backend support.', - 'settings.ai.openhumanDefault': 'OpenHuman (default)', - 'settings.ai.localModelResolved': 'Ollama · {model}', - 'settings.ai.customRoutingForWorkload': 'Perutean khusus untuk {label}', - 'settings.ai.loadingModels': 'Memuat model...', - 'settings.ai.enterModelIdManually': 'atau masukkan id model secara manual:', - 'settings.ai.modelIdPlaceholderForProvider': '{slug} ID model', - 'settings.ai.modelIdPlaceholder': 'model-id', - 'settings.ai.selectModel': 'Pilih model...', - 'settings.ai.temperatureOverride': 'Penggantian suhu', - 'settings.ai.temperatureOverrideSlider': 'Penggantian suhu (slider)', - 'settings.ai.temperatureOverrideValue': 'Penggantian suhu (nilai)', - 'settings.ai.temperatureOverrideDesc': - 'Lower = more deterministic. Leave unchecked to use the provider default.', - 'settings.ai.testFailed': 'Pengujian gagal', - 'settings.ai.testingModel': 'Pengujian model...', - 'settings.ai.modelResponse': 'Respons model', - 'settings.ai.providerWithValue': 'Penyedia: {value}', - 'settings.ai.noneDash': '—', - 'settings.ai.promptHelloWorld': 'Perintah: Halo dunia', - 'settings.ai.startedAt': 'Dimulai: {value}', - 'settings.ai.waitingForModelResponse': 'Menunggu respon dari model yang dipilih...', - 'settings.ai.response': 'Respon', - 'settings.ai.testing': 'Pengujian...', - 'settings.ai.test': 'Pengujian', - 'settings.ai.slugMissingError': 'Masukkan nama penyedia untuk menghasilkan siput.', - 'settings.ai.slugInUseError': 'Nama penyedia tersebut sudah digunakan.', - 'settings.ai.slugReservedError': 'Pilih nama penyedia yang berbeda.', - 'settings.ai.providerNamePlaceholder': 'Penyedia Saya', - 'settings.ai.slugLabel': 'Siput:', - 'settings.ai.openAiUrlLabel': 'OpenAI URL', - 'settings.ai.openAiUrlPlaceholder': 'https://api.openai.com/v1', - 'settings.ai.keepExistingKeyPlaceholder': 'Biarkan kosong untuk mempertahankan kunci yang ada', - 'settings.ai.reindexingMemory': 'Mengindeks ulang memori', - 'settings.ai.reindexingMemoryMessage': - 'Embeddings are being reprocessed. {pending} memory item(s) are being re-embedded under the current model — semantic recall is reduced until this finishes. Keyword search keeps working, and re-embedding continues in the background if you close this.', - 'settings.ai.signInWithOpenRouter': 'Masuk dengan OpenRouter', - 'settings.ai.weekBudget': 'Anggaran minggu', - 'settings.ai.cycleRemaining': 'Sisa siklus', - 'settings.ai.cycleTotalSpend': 'Total pembelanjaan siklus', - 'settings.ai.avgSpendRow': 'Baris pembelanjaan rata-rata', - 'settings.ai.backgroundApiReads': 'Bg API dibaca', - 'settings.ai.backgroundWakeups': 'Bg bangun', - 'settings.ai.budgetMath': 'Perhitungan anggaran', - 'settings.ai.rowsLeft': 'Baris tersisa', - 'settings.ai.rowsPerFullWeekBudget': 'Baris anggaran per minggu penuh', - 'settings.ai.sampleBurnRate': 'Laju pembakaran sampel', - 'settings.ai.projectedEmpty': 'Proyeksi kosong', - 'settings.ai.apiReadsPerDollarRemaining': 'API pembacaan per $ yang tersisa', - 'settings.ai.loopCallBudget': 'Anggaran panggilan berulang', - 'settings.ai.heartbeatTicks': 'Detak jantung berdetak', - 'settings.ai.calendarPlannerCalls': 'Panggilan perencana kalender', - 'settings.ai.calendarFanoutCap': 'Batas fanout kalender', - 'settings.ai.subconsciousModelCalls': 'Panggilan model bawah sadar', - 'settings.ai.composioSyncScans': 'Composio pemindaian sinkronisasi', - 'settings.ai.totalBackgroundApiReadBudget': 'Total bg API anggaran baca', - 'settings.ai.memoryWorkerPolls': 'Jajak pendapat pekerja memori', - 'settings.ai.defaultProviderName': 'OpenHuman', - 'settings.ai.routing.managed': 'Terkelola', - 'settings.ai.routing.managedDesc': - 'OpenHuman will run all inference in the cloud, choose the best model for the task, optimize for cost, and keep the safest routing defaults.', - 'settings.ai.routing.managedMsg': - 'OpenHuman will handle all inference for every workload and automatically choose the best route for cost, quality, and security.', - 'settings.ai.routing.useYourOwn': 'Gunakan Model Anda Sendiri', - 'settings.ai.routing.useYourOwnDesc': - 'Choose one provider + model and route every workload through it. This is simple, but it can be inefficient because lightweight and heavyweight inference all share the same route.', - 'settings.ai.routing.advanced': 'Tingkat Lanjut', - 'settings.ai.routing.advancedDesc': - 'Pick different models for different tasks. This is the best option for tight cost optimization and the most control.', - 'settings.ai.routing.customDesc': - 'Fine-grained routing gives you the best cost optimization and the most control. Use the rows below to decide which workloads stay Managed, which use your shared default, and which pin to a specific model.', - 'settings.ai.routing.chatAndConversations': 'Obrolan dan Percakapan', - 'settings.ai.routing.chatDesc': - 'Models used during direct user interaction, replies, reasoning, agent loops, and coding help.', - 'settings.ai.routing.backgroundTasks': 'Tugas Latar Belakang', - 'settings.ai.routing.bgTasksDesc': - 'Models used outside the main conversation flow for summarization, heartbeat, learning, and subconscious evaluation.', - 'settings.ai.routing.addCustomProvider': 'Tambahkan Penyedia Khusus', - 'settings.ai.globalModel.title': 'Pilih satu model untuk semuanya', - 'settings.ai.globalModel.desc': - 'This routes all inference through one model. It is simpler, but it can be inefficient for cost and quality because lightweight and heavy tasks will all use the same route.', - 'settings.ai.globalModel.noProviders': - 'Add or connect a provider first. Then you can route every workload through one model here.', - 'settings.ai.globalModel.provider': 'Penyedia', - 'settings.ai.globalModel.model': 'Model', - 'settings.ai.globalModel.loadingModels': 'Memuat model…', - 'settings.ai.globalModel.enterModelId': 'Masukkan id model', - 'settings.ai.globalModel.appliesToAll': - 'Applies the same provider + model to chat, reasoning, coding, memory, heartbeat, learning, and subconscious. Embeddings are configured separately. Changes save when you click save.', - 'settings.ai.globalModel.saving': 'Menyimpan…', - 'settings.ai.globalModel.saved': 'Tersimpan', - 'settings.ai.workload.noModel': 'Tidak ada model yang dipilih', - 'settings.ai.workload.changeModel': 'Ubah Model', - 'settings.ai.workload.chooseModel': 'Pilih Model', - 'settings.ai.provider.ollama': 'Ollama', - 'kbd.ariaLabel': 'Pintasan keyboard: {shortcut}', - 'chat.modelPlaceholder': 'gpt-4o', - 'iosPair.title': 'Pasangkan dengan desktop Anda', - 'iosPair.instructions': - 'Open OpenHuman on your desktop, go to Settings > Devices, and tap "Pair phone" to show the QR code.', - 'iosPair.scanQrCode': 'Pindai QR code', - 'iosPair.scannerOpening': 'Pemindai terbuka...', - 'iosPair.connecting': 'Menyambungkan ke desktop...', - 'iosPair.connectedLoading': 'Tersambung! Memuat...', - 'iosPair.expired': 'QR code kedaluwarsa. Minta desktop untuk membuat ulang kode.', - 'iosPair.desktopLabel': 'Desktop', - 'iosPair.retryScan': 'Coba pindai lagi', - 'iosPair.step.openDesktop': 'Buka OpenHuman di desktop', - 'iosPair.step.openSettings': 'Buka Pengaturan > Perangkat', - 'iosPair.step.showQr': 'Ketuk "Pasangkan ponsel" untuk menampilkan QR', - 'iosPair.error.camera': 'Pemindaian kamera gagal. Periksa izin kamera dan coba lagi.', - 'iosPair.error.invalidQr': - 'Invalid QR code. Make sure you are scanning an OpenHuman pairing code.', - 'iosPair.error.unreachableDesktop': - 'Could not reach the desktop. Make sure both devices are online and try again.', - 'iosPair.error.connectionFailed': - 'Connection failed. Make sure the desktop app is running and try again.', - 'iosMascot.defaultPairedLabel': 'Desktop', - 'iosMascot.connectedTo': 'Tersambung ke', - 'iosMascot.disconnect': 'Putuskan sambungan', - 'iosMascot.pushToTalk': 'Push to talk', - 'iosMascot.thinking': 'Berpikir...', - 'iosMascot.typeMessage': 'Ketik a pesan...', - 'iosMascot.sendMessage': 'Kirim pesan', - 'iosMascot.error.generic': 'Ada yang tidak beres. Silakan coba lagi.', - 'iosMascot.error.sendFailed': 'Gagal mengirim. Periksa koneksi Anda.', - 'settings.companion.title': 'Desktop Companion', - 'settings.companion.session': 'Sesi', - 'settings.companion.activeLabel': 'Aktif', - 'settings.companion.inactiveStatus': 'Tidak aktif', - 'settings.companion.stopping': 'Berhenti…', - 'settings.companion.stopSession': 'Hentikan Sesi', - 'settings.companion.starting': 'Mulai…', - 'settings.companion.startSession': 'Mulai Sesi', - 'settings.companion.sessionId': 'ID Sesi', - 'settings.companion.turns': 'Putaran', - 'settings.companion.remaining': 'Tersisa', - 'settings.companion.configuration': 'Konfigurasi', - 'settings.companion.hotkey': 'Tombol Pintas', - 'settings.companion.activationMode': 'Mode Aktivasi', - 'settings.companion.sessionTtl': 'Sesi TTL', - 'settings.companion.screenCapture': 'Tangkapan Layar', - 'settings.companion.appContext': 'Konteks Aplikasi', - 'settings.composio.title': 'Composio', - 'settings.composio.apiKeyExamplePlaceholder': 'ck_live_xxxxxxxxxxxxxxxx', - 'composio.integrationSlugsHelp': 'Siput integrasi yang dipisahkan koma, mis.', - 'composio.integrationSlugsExample': 'gmail, slack', - 'composio.integrationSlugsCaseInsensitive': 'Tidak peka huruf besar-kecil.', - 'composio.integrationSlugsPlaceholder': 'gmail, slack, ...', - 'team.members': 'Anggota', - 'team.membersDesc': 'Mengelola anggota tim dan peran', - 'team.invites': 'Undangan', - 'team.invitesDesc': 'Membuat dan mengelola kode undangan', - 'team.settings': 'Pengaturan Tim', - 'team.settingsDesc': 'Edit nama dan pengaturan tim', - 'team.editSettings': 'Edit Pengaturan Tim', - 'team.enterName': 'Masukkan nama tim', - 'team.saving': 'Menyimpan...', - 'team.saveChanges': 'Simpan Perubahan', - 'team.delete': 'Hapus Tim', - 'team.deleteDesc': 'Hapus tim ini secara permanen', - 'team.deleting': 'Menghapus...', - 'team.failedToUpdate': 'Gagal memperbarui tim', - 'team.failedToDelete': 'Gagal menghapus tim', - 'team.manageTitle': 'Kelola {name}', - 'team.planCreated': '{plan} Rencana • Dibuat {date}', - 'team.confirmDelete': 'Apakah Anda yakin ingin menghapus {name}?', - 'team.deleteWarning': 'This action cannot be undone. All team data will be permanently removed.', - 'welcome.clearingAppData': 'Menghapus data aplikasi...', - 'welcome.clearAppDataAndRestart': 'Hapus data aplikasi & memulai ulang', - 'welcome.clearAppDataWarning': - 'This wipes locally stored secrets and accounts on this device. Your cloud account is unaffected - you can sign in again right after.', - 'welcome.resetErrorFallback': - 'Could not clear app data. Please quit and reopen OpenHuman, then try again.', - 'welcome.signingIn': 'Memasukkan Anda...', - 'welcome.termsIntro': 'Dengan melanjutkan, Anda menyetujui', - 'welcome.termsOfUse': 'Persyaratan', - 'welcome.termsJoiner': 'dan', - 'welcome.privacyPolicy': 'Kebijakan Privasi', - 'welcome.termsOutro': '.', - 'chat.addReaction': 'Tambahkan reaksi', - 'chat.agentProfile.create': 'Buat profil agen', - 'chat.agentProfile.createFailed': 'Tidak dapat membuat profil agen.', - 'chat.agentProfile.customDescription': 'Profil agen khusus', - 'chat.agentProfile.defaultAgentLabel': 'Orchestrator', - 'chat.agentProfile.exists': 'Profil agen "{name}" sudah ada.', - 'chat.agentProfile.label': 'Profil agen', - 'chat.agentProfile.namePlaceholder': 'Nama profil', - 'chat.agentProfile.promptStylePlaceholder': 'Gaya perintah', - 'chat.agentProfile.allowedToolsPlaceholder': 'Alat yang diizinkan', - 'chat.backToThread': 'kembali ke {title}', - 'chat.parentThread': 'thread induk', - 'chat.removeReaction': 'Hapus {emoji}', - 'invites.generate': 'Hasilkan Undangan', - 'invites.generating': 'Menghasilkan...', - 'invites.refreshing': 'Menyegarkan undangan...', - 'invites.loading': 'Memuat undangan...', - 'invites.copyCodeAria': 'Salin kode undangan', - 'invites.revokeAria': 'Cabut undangan', - 'invites.usedUp': 'Habis', - 'invites.uses': 'Kegunaan: {current}{max}', - 'invites.expiresOn': 'Kedaluwarsa {date}', - 'invites.empty': 'Belum ada undangan', - 'invites.emptyHint': 'Buat kode undangan untuk dibagikan dengan orang lain', - 'invites.revokeTitle': 'Cabut Kode Undangan', - 'invites.revokePromptPrefix': 'Apakah Anda yakin ingin mencabut kode undangan', - 'invites.revokeWarning': - 'This invite code will no longer be valid and cannot be used to join the team.', - 'invites.revoking': 'Mencabut...', - 'invites.revokeAction': 'Mencabut Undangan', - 'invites.failedGenerate': 'Gagal membuat undangan', - 'invites.failedRevoke': 'Gagal mencabut undangan', - 'team.refreshingMembers': 'Menyegarkan anggota...', - 'team.loadingMembers': 'Memuat anggota...', - 'team.memberCount': '{count} anggota', - 'team.memberCountPlural': '{count} anggota', - 'team.you': '(Anda)', - 'team.removeAria': 'Hapus {name}', - 'team.noMembers': 'Tidak ada anggota yang ditemukan', - 'team.removeTitle': 'Hapus Anggota Tim', - 'team.removePromptPrefix': 'Apakah Anda yakin ingin menghapus', - 'team.removePromptSuffix': 'dari tim?', - 'team.removeWarning': 'Mereka akan kehilangan akses ke tim dan semua sumber daya tim.', - 'team.removing': 'Menghapus...', - 'team.removeAction': 'Hapus Anggota', - 'team.changeRoleTitle': 'Ubah Peran Anggota', - 'team.changeRolePrompt': "Change {name}'s role from {oldRole} to {newRole}?", - 'team.changeRoleAdminGrant': - 'This will grant them full admin permissions including the ability to manage team members.', - 'team.changeRoleAdminRemove': - 'This will remove their admin permissions and they will no longer be able to manage the team.', - 'team.changing': 'Mengubah...', - 'team.changeRoleAction': 'Mengubah Peran', - 'team.failedChangeRole': 'Gagal mengubah peran', - 'team.failedRemoveMember': 'Gagal menghapus anggota', - 'voice.failedToLoadSettings': 'Gagal memuat pengaturan suara', - 'voice.failedToSaveSettings': 'Gagal menyimpan pengaturan suara', - 'voice.failedToStartServer': 'Gagal memulai server suara', - 'voice.failedToStopServer': 'Gagal menghentikan server suara', - 'voice.sttDisabledPrefix': - 'Voice dictation is disabled until the local STT model is downloaded. Use the', - 'voice.sttDisabledSuffix': 'di atas untuk menginstal Whisper.', - 'voice.debug.failedToLoadVoiceDebugData': 'Gagal memuat data debug suara', - 'voice.debug.settingsSaved': 'Pengaturan debug disimpan.', - 'voice.debug.failedToSaveSettings': 'Gagal menyimpan pengaturan suara', - 'voice.debug.runtimeStatus': 'Status Runtime', - 'voice.debug.runtimeStatusDesc': - 'Live diagnostics for the voice server and speech-to-text engine.', - 'voice.debug.server': 'Server', - 'voice.debug.unavailable': 'Tidak tersedia', - 'voice.debug.ready': 'Siap', - 'voice.debug.notReady': 'Belum siap', - 'voice.debug.hotkey': 'Hotkey', - 'voice.debug.notAvailable': 't/a', - 'voice.debug.mode': 'Mode', - 'voice.debug.transcriptions': 'Transkripsi', - 'voice.debug.serverError': 'Kesalahan Server', - 'voice.debug.advancedSettings': 'Pengaturan Lanjutan', - 'voice.debug.advancedSettingsDesc': - 'Low-level tuning parameters for recording and silence detection.', - 'voice.debug.minimumRecordingSeconds': 'Detik Perekaman Minimum', - 'voice.debug.silenceThreshold': 'Ambang Batas Senyap (RMS)', - 'voice.debug.silenceThresholdDesc': - 'Recordings with energy below this are treated as silence and skipped. Lower = more sensitive.', - 'voice.providers.saved': 'Penyedia suara disimpan.', - 'voice.providers.failedToSave': 'Gagal menyimpan penyedia suara', - 'voice.providers.ellipsis': '…', - 'voice.providers.installing': 'Menginstal', - 'voice.providers.installingBusy': 'Menginstal…', - 'voice.providers.reinstallLocally': 'Instal ulang secara lokal', - 'voice.providers.repair': 'Perbaikan', - 'voice.providers.retryLocally': 'Coba lagi secara lokal', - 'voice.providers.installLocally': 'Instal secara lokal', - 'voice.providers.whisperReady': 'Whisper sudah siap.', - 'voice.providers.whisperInstallStarted': 'Penginstalan Whisper dimulai', - 'voice.providers.queued': 'antri', - 'voice.providers.failedToInstallWhisper': 'Gagal menginstal Whisper', - 'voice.providers.piperReady': 'Piper sudah siap.', - 'voice.providers.piperInstallStarted': 'Penginstalan Piper dimulai', - 'voice.providers.failedToInstallPiper': 'Gagal menginstal Piper', - 'voice.providers.title': 'Penyedia Suara', - 'voice.providers.desc': - 'Choose where transcription and synthesis run. Use the Install locally buttons to download the binaries and models into your workspace. Local providers can be saved before the install finishes — no manual WHISPER_BIN or PIPER_BIN setup required.', - 'voice.providers.sttProvider': 'Penyedia Ucapan-ke-Teks', - 'voice.providers.sttProviderAria': 'Penyedia STT', - 'voice.providers.cloudWhisperProxy': 'Cloud (Proksi Bisikan)', - 'voice.providers.localWhisper': 'Bisikan Lokal', - 'voice.providers.installRequired': '(perlu instalasi)', - 'voice.providers.whisperInstalledTitle': 'Bisikan dipasang. Klik untuk menginstal ulang.', - 'voice.providers.whisperDownloadTitle': - 'Download whisper.cpp and the GGML model into your workspace.', - 'voice.providers.installed': 'Terpasang', - 'voice.providers.installFailed': 'Penginstalan gagal', - 'voice.providers.notInstalled': 'Tidak terinstal', - 'voice.providers.whisperModel': 'Model Bisikan', - 'voice.providers.whisperModelAria': 'Model Bisikan', - 'voice.providers.whisperModelTiny': 'Kecil (39 MB, tercepat)', - 'voice.providers.whisperModelBase': 'Dasar (74 MB)', - 'voice.providers.whisperModelSmall': 'Kecil (244 MB)', - 'voice.providers.whisperModelMedium': 'Sedang (769 MB, disarankan)', - 'voice.providers.whisperModelLargeTurbo': 'Besar v3 Turbo (1,5 GB, akurasi terbaik)', - 'voice.providers.ttsProvider': 'Penyedia Text-to-Speech', - 'voice.providers.ttsProviderAria': 'Penyedia TTS', - 'voice.providers.cloudElevenLabsProxy': 'Cloud (proksi ElevenLabs)', - 'voice.providers.localPiper': 'Piper Lokal', - 'voice.providers.piperInstalledTitle': 'Piper sudah terpasang. Klik untuk menginstal ulang.', - 'voice.providers.piperDownloadTitle': - 'Download Piper and the bundled en_US-lessac-medium voice into your workspace.', - 'voice.providers.piperVoice': 'Suara Piper', - 'voice.providers.piperVoiceAria': 'Suara Piper', - 'voice.providers.customVoiceOption': 'Lainnya (ketik di bawah)…', - 'voice.providers.customVoiceAria': 'Piper voice id (khusus)', - 'voice.providers.customVoicePlaceholder': 'en_US-lessac-medium', - 'voice.providers.piperVoicesDesc': - 'Voices come from huggingface.co/rhasspy/piper-voices. Switching voices may require an Install/Reinstall click to download the new .onnx.', - 'voice.providers.mascotVoice': 'Suara Maskot', - 'voice.providers.mascotVoiceDescPrefix': - 'The ElevenLabs voice the mascot uses for spoken replies is configured under', - 'voice.providers.mascotSettings': 'Pengaturan Maskot', - 'voice.providers.mascotVoiceDescSuffix': '.', - 'voice.providers.hotkeyPlaceholder': 'Fn', - 'voice.providers.piperPreset.lessacMedium': 'AS · Lessac (netral, disarankan)', - 'voice.providers.piperPreset.lessacHigh': 'AS · Lessac (kualitas lebih tinggi, lebih besar)', - 'voice.providers.piperPreset.ryanMedium': 'AS · Ryan (pria)', - 'voice.providers.piperPreset.amyMedium': 'AS · Amy (wanita)', - 'voice.providers.piperPreset.librittsHigh': 'AS · LibriTTS (multi-speaker)', - 'voice.providers.piperPreset.alanMedium': 'GB · Alan (pria)', - 'voice.providers.piperPreset.jennyDiocoMedium': 'GB · Jenny Dioco (wanita)', - 'voice.providers.piperPreset.northernEnglishMaleMedium': 'GB · Bahasa Inggris Utara (pria)', - 'voice.providers.chip.cloud': 'OpenHuman (Managed)', - 'voice.providers.chip.cloudAria': 'OpenHuman managed provider is always enabled', - 'voice.providers.chip.whisper': 'Whisper (Local)', - 'voice.providers.chip.enableWhisper': 'Enable local Whisper STT', - 'voice.providers.chip.disableWhisper': 'Disable local Whisper STT', - 'voice.providers.chip.piper': 'Piper (Local)', - 'voice.providers.chip.enablePiper': 'Enable local Piper TTS', - 'voice.providers.chip.disablePiper': 'Disable local Piper TTS', - 'voice.providers.chip.enableProvider': 'Enable', - 'voice.providers.chip.disableProvider': 'Disable', - 'voice.providers.chip.apiKeyLabel': 'API Key', - 'voice.providers.chip.apiKeyPlaceholder': 'sk-…', - 'voice.providers.chip.comingSoon': 'coming soon', - 'voice.modal.title': 'Configure', - 'voice.modal.desc': - 'Enter your API key to enable this provider. You can test the connection before saving.', - 'voice.modal.testKey': 'Test Key', - 'voice.modal.testing': 'Testing…', - 'voice.modal.saveAndEnable': 'Save & Enable', - 'voice.modal.enable': 'Enable', - 'voice.modal.whisperDesc': - 'Choose a model size and install the Whisper binary and GGML model into your workspace. Larger models are more accurate but slower.', - 'voice.modal.piperDesc': - 'Choose a voice and install the Piper binary and ONNX model into your workspace. Piper runs fully offline with low latency.', - 'voice.routing.title': 'Voice Routing', - 'voice.routing.desc': 'Choose which enabled providers handle speech-to-text and text-to-speech.', - 'voice.routing.save': 'Save', - 'voice.routing.testStt': 'Test STT', - 'voice.routing.testTts': 'Test TTS', - 'voice.routing.elevenlabsVoice': 'ElevenLabs Voice', - 'voice.routing.elevenlabsVoiceAria': 'ElevenLabs voice selection', - 'voice.routing.elevenlabsVoiceIdAria': 'ElevenLabs voice ID (custom)', - 'voice.routing.elevenlabsVoiceDesc': - 'Pick a curated voice or paste a custom voice ID from your ElevenLabs dashboard.', - 'voice.externalProviders.title': 'External Voice Providers', - 'voice.externalProviders.desc': - 'Connect third-party STT/TTS APIs like Deepgram, ElevenLabs, or OpenAI directly.', - 'voice.externalProviders.keySet': 'Key set', - 'voice.externalProviders.noKey': 'No API key', - 'voice.externalProviders.test': 'Test', - 'voice.externalProviders.testing': 'Testing…', - 'voice.externalProviders.remove': 'Remove', - 'voice.externalProviders.provider': 'Provider', - 'voice.externalProviders.selectProvider': 'Select a provider…', - 'voice.externalProviders.apiKey': 'API Key', - 'voice.externalProviders.apiKeyPlaceholder': 'sk-…', - 'voice.externalProviders.add': 'Add', - 'screenAwareness.debug.debugAndDiagnostics': 'Debug & Diagnostik', - 'screenAwareness.debug.collapse': 'Ciutkan', - 'screenAwareness.debug.expand': 'Perluas', - 'screenAwareness.debug.failedToSave': 'Gagal menyimpan kecerdasan layar', - 'screenAwareness.debug.policyTitle': 'Kebijakan Intelijen Layar', - 'screenAwareness.debug.baselineFps': 'FPS Dasar', - 'screenAwareness.debug.useVisionModel': 'Gunakan Model Visi', - 'screenAwareness.debug.useVisionModelDesc': - 'Send screenshots to a vision LLM for richer context. When off, only OCR text is used with a text LLM — faster and no vision model required.', - 'screenAwareness.debug.keepScreenshots': 'Simpan Tangkapan Layar', - 'screenAwareness.debug.keepScreenshotsDesc': - 'Save captured screenshots to the workspace instead of deleting after processing', - 'screenAwareness.debug.allowlist': 'Daftar yang diizinkan (satu aturan per baris)', - 'screenAwareness.debug.denylist': 'Daftar Tolak (satu aturan per baris)', - 'screenAwareness.debug.saveSettings': 'Simpan Pengaturan Kecerdasan Layar', - 'screenAwareness.debug.sessionStats': 'Statistik Sesi', - 'screenAwareness.debug.framesEphemeral': 'Bingkai (sementara)', - 'screenAwareness.debug.panicStop': 'Berhenti panik', - 'screenAwareness.debug.defaultPanicHotkey': 'Cmd+Shift+.', - 'screenAwareness.debug.vision': 'Vision', - 'screenAwareness.debug.idle': 'idle', - 'screenAwareness.debug.visionQueue': 'Antrean vision', - 'screenAwareness.debug.lastVision': 'Vision terakhir', - 'screenAwareness.debug.notAvailable': 'n/a', - 'screenAwareness.debug.visionSummaries': 'Ringkasan Vision', - 'screenAwareness.debug.refreshing': 'Menyegarkan…', - 'screenAwareness.debug.noSummaries': 'Belum ada ringkasan.', - 'screenAwareness.debug.unknownApp': 'Aplikasi Tidak Dikenal', - 'screenAwareness.debug.macosOnly': 'Screen Intelligence V1 saat ini hanya didukung di macOS.', - 'memory.debugTitle': 'Debug Memori', - 'memory.documents': 'Dokumen', - 'memory.filterByNamespace': 'Filter berdasarkan namespace...', - 'memory.refresh': 'Segarkan', - 'memory.noDocumentsFound': 'Tidak ada dokumen yang ditemukan.', - 'memory.delete': 'Hapus', - 'memory.rawResponse': 'Respons mentah', - 'memory.namespaces': 'Namespace', - 'memory.noNamespacesFound': 'Tidak ada namespace yang ditemukan.', - 'memory.queryRecall': 'Kueri & Penarikan Kembali', - 'memory.namespace': 'Namespace', - 'memory.queryText': 'Teks kueri...', - 'memory.defaultMaxChunks': '10', - 'memory.maxChunks': 'potongan maksimal', - 'memory.query': 'Kueri', - 'memory.recall': 'Penarikan kembali', - 'memory.queryLabel': 'Kueri', - 'memory.recallLabel': 'Penarikan kembali', - 'memory.queryResult': 'Hasil kueri', - 'memory.recallResult': 'Hasil penarikan', - 'memory.clearNamespace': 'Hapus Namespace', - 'memory.clearNamespaceDescription': 'Hapus secara permanen semua dokumen dalam namespace.', - 'memory.selectNamespace': 'Pilih namespace...', - 'memory.exampleNamespace': 'mis. skill:gmail:user@example.com', - 'memory.clear': 'Hapus', - 'memory.deleteConfirm': 'Hapus dokumen "{documentId}" di namespace "{namespace}"?', - 'memory.clearNamespaceConfirm': - 'This will permanently delete ALL documents in namespace "{namespace}". Continue?', - 'memory.clearNamespaceSuccess': 'Namespace "{namespace}" dihapus.', - 'memory.clearNamespaceEmpty': 'Tidak ada yang perlu dihapus di "{namespace}".', - 'webhooks.debugTitle': 'Debug Webhook', - 'webhooks.failedToLoadDebugData': 'Gagal memuat data debug webhook', - 'webhooks.clearLogsConfirm': 'Hapus semua log debug webhook yang diambil?', - 'webhooks.failedToClearLogs': 'Gagal menghapus log webhook', - 'webhooks.loading': 'Memuat...', - 'webhooks.refresh': 'Segarkan', - 'webhooks.clearing': 'Menghapus...', - 'webhooks.clearLogs': 'Hapus Log', - 'webhooks.registered': 'terdaftar', - 'webhooks.captured': 'direkam', - 'webhooks.live': 'langsung', - 'webhooks.disconnected': 'terputus', - 'webhooks.lastEvent': 'Acara terakhir', - 'webhooks.at': 'pukul', - 'webhooks.registeredWebhooks': 'Webhook Terdaftar', - 'webhooks.noActiveRegistrations': 'Tidak ada registrasi aktif.', - 'webhooks.resolvingBackendUrl': 'Menyelesaikan backend URL…', - 'webhooks.capturedRequests': 'Permintaan yang Diambil', - 'webhooks.noRequestsCaptured': 'Belum ada permintaan webhook yang ditangkap.', - 'webhooks.unrouted': 'tidak dirutekan', - 'webhooks.pending': 'tertunda', - 'webhooks.requestHeaders': 'Header Permintaan', - 'webhooks.queryParams': 'Param Kueri', - 'webhooks.requestBody': 'Isi Permintaan', - 'webhooks.responseHeaders': 'Header Respons', - 'webhooks.responseBody': 'Isi Respons', - 'webhooks.rawPayload': 'Payload Mentah', - 'webhooks.empty': '[kosong]', - 'providerSetup.error.defaultDetails': 'Penyiapan penyedia gagal.', - 'providerSetup.error.providerFallback': 'Penyedia', - 'providerSetup.error.credentialsRejected': - '{provider} rejected the credentials. Check the API key and try again.', - 'providerSetup.error.endpointNotRecognized': - '{provider} did not recognize the endpoint. Check the base URL and try again.', - 'providerSetup.error.providerUnavailable': - '{provider} is unavailable right now. Try again or check the provider status.', - 'providerSetup.error.unreachable': - 'Could not reach {provider}. Check the endpoint URL and network connection, then try again.', - 'providerSetup.error.couldNotReachWithMessage': 'Tidak dapat menjangkau {provider}: {message}', - 'providerSetup.error.technicalDetails': 'Detail teknis', - 'devices.title': 'Perangkat', - 'devices.pairIphone': 'Pasangkan iPhone', - 'devices.noPaired': 'Tidak ada perangkat yang dipasangkan', - 'devices.emptyState': 'Scan a QR code on your iPhone to connect it to this OpenHuman session.', - 'devices.devicePairedTitle': 'Perangkat yang dipasangkan', - 'devices.devicePairedMessage': 'iPhone berhasil tersambung.', - 'devices.deviceRevokedTitle': 'Perangkat dicabut', - 'devices.deviceRevokedMessage': '{label} dihapus.', - 'devices.revokeFailedTitle': 'Pencabutan gagal', - 'devices.online': 'Online', - 'devices.offline': 'Offline', - 'devices.lastSeenNever': 'Tidak pernah', - 'devices.lastSeenNow': 'Baru saja', - 'devices.lastSeenMinutes': '{count}m lalu', - 'devices.lastSeenHours': '{count}h lalu', - 'devices.lastSeenDays': '{count}d lalu', - 'devices.revoke': 'Cabut', - 'devices.revokeAria': 'Cabut {label}', - 'devices.confirmRevokeTitle': 'Cabut perangkat?', - 'devices.confirmRevokeBody': '{label} will no longer be able to connect. This cannot be undone.', - 'devices.loadFailed': 'Gagal memuat perangkat: {message}', - 'devices.pairModal.title': 'Pasangkan iPhone', - 'devices.pairModal.loading': 'Membuat kode penyandingan…', - 'devices.pairModal.instructions': 'Buka aplikasi OpenHuman di iPhone Anda dan pindai kode ini.', - 'devices.pairModal.expiresIn': 'Masa berlaku kode akan habis dalam ~{count} menit', - 'devices.pairModal.expiresInPlural': 'Masa berlaku kode akan habis dalam ~{count} menit', - 'devices.pairModal.showDetails': 'Tampilkan detailnya', - 'devices.pairModal.hideDetails': 'Sembunyikan detailnya', - 'devices.pairModal.channelId': 'ID Saluran', - 'devices.pairModal.pairingUrl': 'Penyandingan URL', - 'devices.pairModal.expiredTitle': 'QR code kedaluwarsa', - 'devices.pairModal.expiredBody': 'Buat kode baru untuk melanjutkan penyandingan.', - 'devices.pairModal.generateNewCode': 'Buat kode baru', - 'devices.pairModal.successTitle': 'Dipasangkan dengan iPhone', - 'devices.pairModal.autoClose': 'Menutup secara otomatis…', - 'devices.pairModal.errorPrefix': 'Gagal membuat penyandingan: {message}', - 'devices.pairModal.errorTitle': 'Ada yang tidak beres', - 'devices.pairModal.copyUrl': 'Salin', - 'mcp.catalog.searchAria': 'Cari katalog Smithery', - 'mcp.catalog.searchPlaceholder': 'Cari katalog Smithery...', - 'mcp.catalog.loadFailed': 'Gagal memuat katalog', - 'mcp.catalog.noResults': 'Tidak ada server yang ditemukan.', - 'mcp.catalog.noResultsFor': 'Tidak ditemukan server untuk "{query}".', - 'mcp.catalog.loadMore': 'Muat selengkapnya', - 'mcp.configAssistant.title': 'Asisten konfigurasi', - 'mcp.configAssistant.empty': 'Ask about configuration, required env vars, or setup steps.', - 'mcp.configAssistant.suggestedValues': 'Nilai yang disarankan:', - 'mcp.configAssistant.valueHidden': '(nilai tersembunyi)', - 'mcp.configAssistant.applySuggested': 'Terapkan nilai yang disarankan', - 'mcp.configAssistant.reinstallHint': 'Instal ulang dengan nilai ini untuk menerapkannya.', - 'mcp.configAssistant.thinking': 'Berpikir...', - 'mcp.configAssistant.inputPlaceholder': 'Ask a question (Enter to send, Shift+Enter for newline)', - 'mcp.configAssistant.send': 'Kirim', - 'mcp.configAssistant.failedResponse': 'Gagal mendapat respons', - 'mcp.toolList.availableSingular': '{count} alat tersedia', - 'mcp.toolList.availablePlural': '{count} alat tersedia', - 'mcp.toolList.tryTool': 'Try', - 'mcp.toolList.tryToolAria': 'Open execution playground for {name}', - 'mcp.playground.title': 'Run {name}', - 'mcp.playground.close': 'Close playground', - 'mcp.playground.inputSchema': 'Input schema', - 'mcp.playground.argsLabel': 'Arguments (JSON)', - 'mcp.playground.argsHelp': 'Type JSON matching the input schema. Empty input is treated as {}.', - 'mcp.playground.runShortcut': '⌘/Ctrl + Enter to run', - 'mcp.playground.format': 'Format', - 'mcp.playground.invalidJson': 'Invalid JSON', - 'mcp.playground.run': 'Run tool', - 'mcp.playground.running': 'Running…', - 'mcp.playground.result': 'Result', - 'mcp.playground.resultError': 'Tool returned an error', - 'mcp.playground.copyResult': 'Copy result', - 'mcp.playground.copied': 'Copied', - 'mcp.playground.history': 'History', - 'mcp.playground.historyEmpty': 'No invocations yet in this session.', - 'mcp.playground.historyLoad': 'Load', - 'mcp.playground.unexpectedError': 'Unexpected error invoking tool.', - 'mcp.catalog.deployed': 'Dikerahkan', - 'mcp.catalog.installCount': '{count} diinstal', - 'app.update.dismissNotification': 'Tutup pemberitahuan pembaruan', - 'bootCheck.rpcAuthSuffix': 'di setiap RPC.', - 'mcp.installed.title': 'Terpasang', - 'mcp.installed.browseCatalog': 'Jelajahi katalog', - 'mcp.installed.empty': 'Belum ada server MCP yang terinstal.', - 'mcp.installed.toolSingular': '{count} alat', - 'mcp.installed.toolPlural': '{count} alat', - 'mcp.health.title': 'Health', - 'mcp.health.summaryAria': 'MCP connection health summary', - 'mcp.health.connectedCount': '{count} connected', - 'mcp.health.connectingCount': '{count} connecting', - 'mcp.health.errorCount': '{count} error', - 'mcp.health.disconnectedCount': '{count} idle', - 'mcp.health.retryAll': 'Retry all ({count})', - 'mcp.health.retryAllAria': 'Retry all {count} errored MCP servers', - 'mcp.health.disconnectAll': 'Disconnect all ({count})', - 'mcp.health.disconnectAllAria': 'Disconnect all {count} connected MCP servers', - 'mcp.health.disconnectConfirm.title': 'Disconnect all MCP servers?', - 'mcp.health.disconnectConfirm.body': - 'This will disconnect {count} currently-connected MCP servers. Installed configurations and secrets are kept; you can reconnect any server later.', - 'mcp.health.disconnectConfirm.cancel': 'Cancel', - 'mcp.health.disconnectConfirm.confirm': 'Disconnect all', - 'mcp.health.opErrorGeneric': 'Bulk operation failed. See logs.', - 'mcp.health.bulkPartialFailure': '{failed} of {total} servers failed. See logs.', - 'mcp.installed.search.landmarkAria': 'Search installed MCP servers', - 'mcp.installed.search.inputAria': 'Filter installed MCP servers by name', - 'mcp.installed.search.placeholder': 'Filter servers…', - 'mcp.installed.search.clearAria': 'Clear filter', - 'mcp.installed.search.countMatches': '{shown} of {total} servers', - 'mcp.installed.search.noMatches': 'No servers match "{query}".', - 'mcp.inventory.openButton': 'Inventory', - 'mcp.inventory.openAria': 'Open the sharable MCP inventory panel', - 'mcp.inventory.title': 'Sharable MCP Inventory', - 'mcp.inventory.subtitle': - 'Export your installed MCP servers as a portable, secret-free manifest, or import one from a teammate. Secret env values are never included or imported.', - 'mcp.inventory.close': 'Close inventory panel', - 'mcp.inventory.tablistAria': 'Inventory sections', - 'mcp.inventory.tab.export': 'Export', - 'mcp.inventory.tab.import': 'Import', - 'mcp.inventory.export.empty': - 'No MCP servers installed yet — nothing to export. Install one from the catalog first.', - 'mcp.inventory.export.privacyTitle': 'What is in this manifest', - 'mcp.inventory.export.privacyBody': - 'Server names, qualified names, env-variable KEY NAMES, and non-secret config only. Secret values, your machine identifiers, and per-install timestamps are intentionally stripped.', - 'mcp.inventory.export.serverCount': '{count} servers in this manifest', - 'mcp.inventory.export.copy': 'Copy', - 'mcp.inventory.export.copied': 'Copied', - 'mcp.inventory.export.copyAria': 'Copy the manifest JSON to the clipboard', - 'mcp.inventory.export.download': 'Download', - 'mcp.inventory.export.downloadAria': 'Download the manifest as a JSON file', - 'mcp.inventory.import.trustTitle': 'Treat imported manifests as untrusted code', - 'mcp.inventory.import.trustBody': - 'An MCP server is a tool you grant your agent. Only import manifests from sources you trust. Each install requires your explicit click; nothing is auto-installed.', - 'mcp.inventory.import.pasteLabel': 'Paste manifest JSON', - 'mcp.inventory.import.pastePlaceholder': 'Paste a manifest here, or upload a .json file below.', - 'mcp.inventory.import.preview': 'Preview', - 'mcp.inventory.import.clear': 'Clear', - 'mcp.inventory.import.uploadFile': 'or upload a .json file', - 'mcp.inventory.import.uploadFileAria': 'Upload a manifest .json file', - 'mcp.inventory.import.fileTooLarge': 'File is too large (over 1 MB). Refusing to load.', - 'mcp.inventory.import.fileReadFailed': 'Could not read file.', - 'mcp.inventory.import.parseErrorPrefix': 'Could not parse manifest:', - 'mcp.inventory.import.previewHeading': 'Preview', - 'mcp.inventory.import.previewCounts': - '{total} servers — {newly} new, {already} already installed', - 'mcp.inventory.import.previewEmpty': 'Manifest contains no servers.', - 'mcp.inventory.import.exportedFrom': 'Exported from {exporter}', - 'mcp.inventory.import.exportedAt': 'at {when}', - 'mcp.inventory.import.statusNew': 'New', - 'mcp.inventory.import.statusAlreadyInstalled': 'Already installed', - 'mcp.inventory.import.envKeysLabel': 'Env keys', - 'mcp.inventory.import.install': 'Install', - 'mcp.inventory.import.installAria': 'Install {name} from this manifest', - 'mcp.inventory.import.skipped': 'skipped', - 'mcp.inventory.parseError.empty': 'Manifest is empty.', - 'mcp.inventory.parseError.invalidJson': 'Invalid JSON.', - 'mcp.inventory.parseError.rootNotObject': 'Manifest must be a JSON object at the root.', - 'mcp.inventory.parseError.unsupportedSchema': - 'Unsupported manifest schema — this file was not produced by a compatible exporter.', - 'mcp.inventory.parseError.missingExportedAt': 'Missing or invalid `exported_at` field.', - 'mcp.inventory.parseError.missingExportedBy': 'Missing or invalid `exported_by` field.', - 'mcp.inventory.parseError.invalidServers': 'Missing or invalid `servers` array.', - 'mcp.inventory.parseError.serverNotObject': 'A server entry is not an object.', - 'mcp.inventory.parseError.serverMissingQualifiedName': - 'A server entry is missing its qualified_name.', - 'mcp.inventory.parseError.serverMissingDisplayName': - 'A server entry is missing its display_name.', - 'mcp.inventory.parseError.serverEnvKeysNotArray': - 'A server entry has an env_keys field that is not an array of strings.', - 'mcp.inventory.parseError.serverContainsEnv': - 'A server entry contains an `env` value map. Refusing to import — manifests must only carry env_keys (names), never secret values.', - 'mcp.inventory.parseError.duplicateQualifiedName': - 'Duplicate qualified_name found in manifest. Each server must appear at most once.', - 'mcp.tab.loading': 'Memuat MCP server...', - 'mcp.tab.emptyDetail': 'Pilih server atau telusuri katalog.', - 'mcp.install.loadingDetail': 'Memuat detail server...', - 'mcp.install.back': 'Kembali', - 'mcp.install.title': 'Instal {name}', - 'mcp.install.requiredEnv': 'Variabel lingkungan yang diperlukan', - 'mcp.install.enterValue': 'Masukkan {key}', - 'mcp.install.show': 'Tampilkan', - 'mcp.install.hide': 'Sembunyikan', - 'mcp.install.configLabel': 'Konfigurasi (JSON opsional)', - 'mcp.install.configPlaceholder': '{"key": "value"}', - 'mcp.install.missingRequired': '"{key}" diperlukan', - 'mcp.install.invalidJson': 'Konfigurasi JSON bukan JSON yang valid', - 'mcp.install.failedDetail': 'Gagal memuat detail server', - 'mcp.install.failedInstall': 'Penginstalan gagal', - 'mcp.install.button': 'Penginstalan', - 'mcp.install.installing': 'Penginstalan...', - 'mcp.detail.suggestedEnvReady': 'Nilai lingkungan yang disarankan sudah siap', - 'mcp.detail.suggestedEnvBody': - 'Re-install this server with the suggested values to apply them: {keys}', - 'mcp.detail.connect': 'Sambungkan', - 'mcp.detail.connecting': 'Sambungan...', - 'mcp.detail.disconnect': 'Putuskan sambungan', - 'mcp.detail.hideAssistant': 'Sembunyikan asisten', - 'mcp.detail.helpConfigure': 'Bantu saya mengonfigurasi', - 'mcp.detail.confirmUninstall': 'Konfirmasi uninstall?', - 'mcp.detail.confirmUninstallAction': 'Ya, hapus instalan', - 'mcp.detail.uninstall': 'Hapus instalan', - 'mcp.detail.envVars': 'Variabel lingkungan', - 'mcp.detail.tools': 'Alat', - 'onboarding.skipForNow': 'Lewati Sekarang', - 'onboarding.localAI.continueWithCloud': 'Lanjutkan dengan Cloud', - 'onboarding.localAI.useLocalAnyway': 'Use local AI anyway (not recommended for your device)', - 'onboarding.localAI.useLocalInstead': 'Gunakan AI lokal saja (hubungkan Ollama sekarang)', - 'onboarding.localAI.setupIssue': 'Penyiapan AI lokal mengalami masalah', - 'notifications.routingTitle': 'Perutean Notifikasi', - 'notifications.routing.pipelineStats': 'Statistik saluran', - 'notifications.routing.total': 'Total', - 'notifications.routing.unread': 'Belum Dibaca', - 'notifications.routing.unscored': 'Belum diberi skor', - 'notifications.routing.intelligenceTitle': 'Intelijen Notifikasi', - 'notifications.routing.intelligenceDesc': - 'Every notification from your connected accounts is scored by a local AI model. High-importance notifications are automatically routed to your orchestrator agent so nothing critical slips through.', - 'notifications.routing.howItWorks': 'Cara kerjanya', - 'notifications.routing.level.drop': 'Hapus', - 'notifications.routing.level.dropDesc': 'Kebisingan / spam — disimpan tetapi tidak muncul', - 'notifications.routing.level.acknowledge': 'Akui', - 'notifications.routing.level.acknowledgeDesc': 'Low-priority — shown in notification center', - 'notifications.routing.level.react': 'Bereaksi', - 'notifications.routing.level.reactDesc': 'Prioritas sedang — memicu respons agen terfokus', - 'notifications.routing.level.escalate': 'Eskalasi', - 'notifications.routing.level.escalateDesc': 'Prioritas tinggi — diteruskan ke agen orkestra', - 'notifications.routing.perProvider': 'Per penyedia perutean', - 'notifications.routing.threshold': 'Ambang batas', - 'notifications.routing.routeToOrchestrator': 'Rute ke orkestrator', - 'notifications.routing.loadSettingsError': 'Failed to load settings. Reopen this panel to retry.', - 'settings.billing.inferenceBudget.title': 'Inference Budget', - 'settings.billing.inferenceBudget.noRecurringPlanBudget': 'Tidak ada anggaran paket berulang', - 'settings.billing.inferenceBudget.noRecurringWeeklyDesc': - 'Your current plan does not include a recurring weekly inference budget. Usage is paid from available credits instead.', - 'settings.billing.inferenceBudget.remainingSummary': '{remaining} / {budget} tersisa', - 'settings.billing.inferenceBudget.spentThisCycle': 'Menghabiskan {amount} siklus ini', - 'settings.billing.inferenceBudget.cycleEndsOn': 'Siklus berakhir {date}', - 'settings.billing.inferenceBudget.exhaustedDesc': - 'Included subscription usage is exhausted. Top up credits to keep using AI without waiting for the next cycle.', - 'settings.billing.inferenceBudget.discountVsPayg': '{pct}% cheaper per call than pay-as-you-go.', - 'settings.billing.inferenceBudget.cycleSpend': 'Pembelanjaan siklus', - 'settings.billing.inferenceBudget.totalAmount': '{amount} total', - 'settings.billing.inferenceBudget.inference': 'Inferensi', - 'settings.billing.inferenceBudget.integrations': 'Integrasi', - 'settings.billing.inferenceBudget.calls': '{count} panggilan', - 'settings.billing.inferenceBudget.dailySpend': 'Pembelanjaan harian', - 'settings.billing.inferenceBudget.dailySpendPoint': '{date}: {amount}', - 'settings.billing.inferenceBudget.topModels': 'Model teratas', - 'settings.billing.inferenceBudget.noInferenceUsage': 'No inference usage this cycle.', - 'settings.billing.inferenceBudget.topIntegrations': 'Integrasi teratas', - 'settings.billing.inferenceBudget.noIntegrationUsage': 'No integration usage this cycle.', - 'settings.billing.inferenceBudget.unableToLoad': 'Tidak dapat memuat data penggunaan', - 'settings.billing.inferenceBudget.notAvailable': 'n/a', - 'memory.sourceFilterAria': 'Filter berdasarkan sumber', - 'calls.comingSoonDescription': 'Panggilan dengan bantuan AI akan segera hadir. Pantau terus.', - 'vault.title': 'Gudang pengetahuan', - 'vault.description': 'Arahkan ke folder lokal; file dipotong dan dicerminkan ke dalam memori.', - 'vault.add': 'Tambahkan brankas', - 'vault.added': 'Vault ditambahkan', - 'vault.createdMessage': 'Membuat "{name}". Klik {sync} untuk menyerap.', - 'vault.couldNotAdd': 'Tidak dapat menambahkan vault', - 'vault.syncFailed': 'Sinkronisasi gagal', - 'vault.syncFailedFor': 'Sinkronisasi gagal untuk "{name}"', - 'vault.syncFailedFiles': 'Gagal {count} file', - 'vault.syncedTitle': 'Disinkronkan "{name}"', - 'vault.syncSummary': 'Diserap {ingested}, tidak diubah {unchanged}, dihapus {removed}', - 'vault.syncSummaryFailed': ', gagal {count}', - 'vault.syncSummarySkipped': ', dilewati {count}', - 'vault.syncSummaryDuration': '· {seconds}s', - 'vault.confirmRemovePurge': - 'Remove vault "{name}"?\n\nClick OK to also purge its memory (delete all {count} ingested document(s)).\nClick Cancel to keep the documents in memory.', - 'vault.confirmRemove': 'Benar-benar menghapus brankas "{name}"?', - 'vault.removed': 'Vault dihapus', - 'vault.removedPurgedMessage': 'Menghapus "{name}" dan menghapus memorinya.', - 'vault.removedKeptMessage': 'Menghapus "{name}". Dokumen disimpan dalam memori.', - 'vault.couldNotRemove': 'Tidak dapat menghapus vault', - 'vault.name': 'Nama', - 'vault.namePlaceholder': 'Catatan penelitian saya', - 'vault.folderPath': 'Jalur folder (mutlak)', - 'vault.folderPathPlaceholder': '/Pengguna/Anda/Dokumen/catatan', - 'vault.excludes': 'Tidak termasuk (substring yang dipisahkan koma, opsional)', - 'vault.excludesPlaceholder': 'draft/, .secret', - 'vault.creating': 'Membuat…', - 'vault.create': 'Membuat vault', - 'vault.loading': 'Memuat vault…', - 'vault.failedToLoad': 'Gagal memuat brankas: {error}', - 'vault.empty': 'Belum ada brankas. Tambahkan satu di atas untuk mulai menyerap folder.', - 'vault.fileCount': '{count} file', - 'vault.syncedRelative': 'disinkronkan {time}', - 'vault.neverSynced': 'tidak pernah disinkronkan', - 'vault.syncingProgress': 'Menyinkronkan… {ingested}/{total}', - 'vault.removing': 'Menghapus…', - 'vault.relative.sec': '{count}s yang lalu', - 'vault.relative.min': '{count}m yang lalu', - 'vault.relative.hr': '{count}h yang lalu', - 'vault.relative.day': '{count}d yang lalu', - 'whatsapp.title': 'WhatsApp', - 'subconscious.interval.fiveMinutes': '5 menit', - 'subconscious.interval.tenMinutes': '10 menit', - 'subconscious.interval.fifteenMinutes': '15 menit', - 'subconscious.interval.thirtyMinutes': '30 menit', - 'subconscious.interval.oneHour': '1 jam', - 'subconscious.interval.sixHours': '6 jam', - 'subconscious.interval.twelveHours': '12 jam', - 'subconscious.interval.oneDay': '1 hari', - 'subconscious.priority.critical': 'kritis', - 'subconscious.priority.important': 'penting', - 'subconscious.priority.normal': 'normal', - 'subconscious.durationSeconds': '{seconds}s', - 'subconscious.durationMilliseconds': '{milliseconds}ms', - 'settings.search.allowedSitesLabel': 'Allowed websites', - 'settings.search.allowedSitesHint': - 'Websites the assistant may open and read while researching (one host per line, e.g. reuters.com). A host also covers its subdomains. Leave empty to block all web access.', - 'settings.search.allowedSitesAllOn': - 'The assistant can open any public website. Local and private addresses stay blocked.', - 'settings.search.allowedSitesPlaceholder': 'reuters.com\napnews.com\ngithub.com', - 'settings.search.allowedSitesSave': 'Save websites', - 'settings.search.accessModeAria': 'Web access mode', - 'settings.search.accessAllowAll': 'Allow all', - 'settings.search.accessCustom': 'Custom', - 'settings.search.accessBlockAll': 'Block all', - 'settings.search.accessBlockAllHint': - 'All web access is blocked — the assistant cannot open or read any website.', - 'memory.tab.centrality': 'Centrality', - 'graphCentrality.title': 'Knowledge Graph Centrality', - 'graphCentrality.intro': - 'PageRank over your memory graph surfaces the load-bearing hubs — and the connector entities that link otherwise-separate clusters, which a raw frequency count cannot reveal.', - 'graphCentrality.loading': 'Computing centrality…', - 'graphCentrality.errorPrefix': 'Could not load the graph:', - 'graphCentrality.retry': 'Retry', - 'graphCentrality.empty': 'No knowledge graph yet.', - 'graphCentrality.emptyHint': - 'As the assistant records facts about you, the most connected entities will surface here.', - 'graphCentrality.namespaceLabel': 'Namespace', - 'graphCentrality.namespaceAll': 'All namespaces', - 'graphCentrality.metricEntities': 'Entities', - 'graphCentrality.metricConnections': 'Connections', - 'graphCentrality.metricClusters': 'Clusters', - 'graphCentrality.clustersCaption': '{components} clusters · largest holds {largest}', - 'graphCentrality.approximateBadge': 'approximate', - 'graphCentrality.approximateTitle': 'Stopped at the iteration cap before fully converging', - 'graphCentrality.rankedHeading': 'Top entities by influence', - 'graphCentrality.colRank': '#', - 'graphCentrality.colEntity': 'Entity', - 'graphCentrality.colInfluence': 'Influence', - 'graphCentrality.colLinks': 'Links', - 'graphCentrality.bridgeBadge': 'connector', - 'graphCentrality.bridgeTitle': 'Connector — more influential than its link count suggests', - 'graphCentrality.degreeTitle': '{in} in · {out} out', - 'settings.search.engineDisabledLabel': 'Disabled', - 'settings.search.engineDisabledDesc': - 'Remove search tools from the agent context and available tool list.', -}; - -export default id1; diff --git a/app/src/lib/i18n/chunks/id-2.ts b/app/src/lib/i18n/chunks/id-2.ts deleted file mode 100644 index fc677bb95..000000000 --- a/app/src/lib/i18n/chunks/id-2.ts +++ /dev/null @@ -1,497 +0,0 @@ -import type { TranslationMap } from '../types'; - -// Indonesian (Bahasa Indonesia) chunk 2/5. Translated from chunks/en-2.ts. -const id2: TranslationMap = { - 'settings.ai.configStatus': 'Status Konfigurasi', - 'settings.ai.fallbackMode': 'Mode Fallback', - 'settings.ai.loadedFromRuntime': 'Dimuat dari Runtime', - 'settings.ai.loadingDuration': 'Durasi Muat', - 'settings.ai.localRuntime': 'Runtime Model Lokal', - 'settings.ai.openManager': 'Buka Pengelola', - 'settings.ai.retryDownload': 'Coba Unduh Lagi', - 'settings.ai.state': 'Status', - 'settings.ai.targetModel': 'Model Target', - 'settings.ai.download': 'Unduh', - 'settings.ai.localModelUnavailable': 'Status model lokal tidak tersedia.', - 'settings.ai.soulConfig': 'Konfigurasi Persona SOUL', - 'settings.ai.refreshing': 'Menyegarkan...', - 'settings.ai.refreshSoul': 'Segarkan SOUL', - 'settings.ai.loadingSoul': 'Memuat konfigurasi SOUL...', - 'settings.ai.identity': 'Identitas', - 'settings.ai.personality': 'Kepribadian', - 'settings.ai.safetyRules': 'Aturan Keamanan', - 'settings.ai.source': 'Sumber', - 'settings.ai.loaded': 'Dimuat', - 'settings.ai.toolsConfig': 'Konfigurasi TOOLS', - 'settings.ai.refreshTools': 'Segarkan TOOLS', - 'settings.ai.toolsAvailable': 'Alat Tersedia', - 'settings.ai.tools': 'alat', - 'settings.ai.activeSkills': 'Skill Aktif', - 'settings.ai.skills': 'skill', - 'settings.ai.skillsOverview': 'Ringkasan Skill', - 'settings.ai.refreshingAll': 'Menyegarkan Semua...', - 'settings.ai.refreshAll': 'Segarkan Semua Konfigurasi AI', - 'settings.notifications.suppressAll': 'Tahan semua notifikasi', - 'settings.notifications.suppressAllDesc': - 'Blokir semua toast notifikasi OS dari aplikasi tertanam terlepas dari status fokus.', - 'settings.notifications.toggleDnd': 'Alihkan Jangan Ganggu', - 'settings.notifications.categories': 'Kategori', - 'settings.notifications.categoryFooter': - 'Menonaktifkan kategori menghentikan notifikasi baru jenis tersebut muncul di pusat notifikasi. Notifikasi yang sudah ada tetap tersimpan sampai dibersihkan.', - 'settings.billing.movedToWeb': 'Tagihan dipindahkan ke web', - 'settings.billing.openDashboard': 'Buka dashboard tagihan', - 'settings.billing.movedToWebDesc': - 'Perubahan langganan, metode pembayaran, kredit, dan invoice kini dikelola di web TinyHumans.', - 'settings.billing.backToSettings': 'Kembali ke pengaturan', - 'settings.billing.openingBrowser': 'Membuka browser Anda...', - 'settings.billing.browserNotOpen': 'Jika browser tidak terbuka, gunakan tombol di atas.', - 'settings.billing.browserOpenFailed': - 'Browser tidak dapat dibuka otomatis. Gunakan tombol di atas.', - 'settings.tools.chooseCapabilities': - 'Pilih kemampuan yang dapat digunakan OpenHuman atas nama Anda.', - 'settings.tools.saveChanges': 'Simpan Perubahan', - 'settings.tools.preferencesSaved': 'Preferensi tersimpan', - 'settings.tools.saveFailed': 'Gagal menyimpan preferensi. Coba lagi.', - 'settings.screenAwareness.mode': 'Mode', - 'settings.screenAwareness.allExceptBlacklist': 'Semua Kecuali Blacklist', - 'settings.screenAwareness.whitelistOnly': 'Whitelist Saja', - 'settings.screenAwareness.screenMonitoring': 'Pemantauan Layar', - 'settings.screenAwareness.saveSettings': 'Simpan Pengaturan', - 'settings.screenAwareness.session': 'Sesi', - 'settings.screenAwareness.status': 'Status', - 'settings.screenAwareness.active': 'Aktif', - 'settings.screenAwareness.stopped': 'Berhenti', - 'settings.screenAwareness.remaining': 'Tersisa', - 'settings.screenAwareness.startSession': 'Mulai Sesi', - 'settings.screenAwareness.stopSession': 'Hentikan Sesi', - 'settings.screenAwareness.analyzeNow': 'Analisis Sekarang', - 'settings.screenAwareness.macosOnly': - 'Tangkapan layar desktop dan kontrol izin Screen Awareness saat ini hanya didukung di macOS.', - 'connections.comingSoon': 'Segera hadir', - 'connections.setUp': 'Atur', - 'connections.configured': 'Dikonfigurasi', - 'connections.unavailable': 'Tidak tersedia', - 'connections.checking': 'Memeriksa...', - 'connections.walletConfigured': - 'Identitas EVM, BTC, Solana, dan Tron lokal dikonfigurasi dari frasa pemulihan Anda.', - 'connections.walletReady': - 'Siapkan identitas EVM, BTC, Solana, dan Tron lokal dari satu frasa pemulihan.', - 'connections.walletError': - 'Tidak dapat memeriksa status dompet. Ketuk untuk mencoba lagi dari panel Frasa Pemulihan.', - 'connections.walletChecking': 'Memeriksa status dompet...', - 'connections.walletIdentities': 'Identitas dompet', - 'connections.walletDerived': - 'Diturunkan secara lokal dari frasa pemulihan Anda dan hanya disimpan sebagai metadata aman.', - 'connections.privacySecurity': 'Privasi & Keamanan', - 'connections.privacySecurityDesc': - 'Semua data dan kredensial disimpan lokal dengan kebijakan zero-data retention. Informasi Anda dienkripsi dan tidak pernah dibagikan ke pihak ketiga.', - 'channels.status.connecting': 'Menghubungkan', - 'channels.status.notConfigured': 'Belum dikonfigurasi', - 'channels.noActiveRoute': 'Tidak ada rute aktif', - 'channels.activeRoute': 'Rute aktif', - 'channels.loadingDefinitions': 'Memuat definisi kanal...', - 'channels.channelConnections': 'Koneksi Kanal', - 'channels.configureAuthModes': 'Konfigurasi mode autentikasi untuk setiap kanal pesan.', - 'channels.configNotAvailable': 'Konfigurasi untuk', - 'channels.channel': 'kanal', - 'devOptions.coreModeNotSet': 'Mode core: belum diatur', - 'devOptions.coreModeNotSetDesc': - 'Pemilih boot-check belum dikonfirmasi. Gunakan Ganti mode di pemilih untuk memilih Lokal atau Cloud.', - 'devOptions.local': 'Lokal', - 'devOptions.embeddedCoreSidecar': 'Core sidecar tertanam', - 'devOptions.sidecarSpawned': - 'Dijalankan dalam proses oleh shell Tauri saat aplikasi diluncurkan.', - 'devOptions.cloud': 'Cloud', - 'devOptions.remoteCoreRpc': 'RPC core jarak jauh', - 'devOptions.token': 'Token', - 'devOptions.tokenNotSet': 'belum diatur — RPC akan 401', - 'devOptions.triggerSentryTest': 'Picu Tes Sentry (staging)', - 'devOptions.triggerSentryTestDesc': - 'Mengirim error bertag untuk memverifikasi pipeline Sentry. Issue #1072 — hapus setelah verifikasi.', - 'devOptions.sendTestEvent': 'Kirim event tes', - 'devOptions.sending': 'Mengirim...', - 'devOptions.eventSent': 'Event terkirim', - 'devOptions.failed': 'Gagal', - 'devOptions.appLogs': 'Log aplikasi', - 'devOptions.appLogsDesc': - 'Buka folder berisi file log harian bergulir. Lampirkan file terbaru saat melaporkan masalah.', - 'devOptions.openLogsFolder': 'Buka folder log', - 'mnemonic.phraseSaved': 'Frasa pemulihan tersimpan', - 'mnemonic.walletReady': 'Identitas dompet multi-chain siap. Kembali ke pengaturan...', - 'mnemonic.writeDownWords': 'Tulis', - 'mnemonic.wordsInOrder': - 'kata ini secara berurutan dan simpan di tempat aman. Frasa ini mengamankan kunci enkripsi lokal dan identitas dompet EVM, BTC, Solana, dan Tron Anda.', - 'mnemonic.cannotRecover': - 'Frasa ini tidak dapat dipulihkan jika hilang dan harus tetap sepenuhnya lokal di perangkat Anda.', - 'mnemonic.copyToClipboard': 'Salin ke Clipboard', - 'mnemonic.alreadyHavePhrase': 'Saya sudah memiliki frasa pemulihan', - 'mnemonic.consentSaved': - 'Saya menyimpan frasa ini dan menyetujui penggunaannya untuk pengaturan dompet lokal', - 'mnemonic.enterPhraseToRestore': - 'Masukkan frasa pemulihan Anda di bawah untuk memulihkan identitas dompet lokal, atau tempel frasa lengkap ke kolom mana saja (12 kata untuk cadangan baru; frasa 24 kata dari versi lama tetap berfungsi).', - 'mnemonic.words': 'Kata', - 'mnemonic.validPhrase': 'Frasa pemulihan valid', - 'mnemonic.generateNewPhrase': 'Buat frasa pemulihan baru', - 'mnemonic.securingData': 'Mengamankan Data Anda...', - 'mnemonic.saveRecoveryPhrase': 'Simpan Frasa Pemulihan', - 'mnemonic.userNotLoaded': 'Pengguna belum dimuat. Silakan masuk lagi atau segarkan halaman.', - 'mnemonic.invalidPhrase': 'Frasa pemulihan tidak valid. Periksa kata-kata Anda dan coba lagi.', - 'mnemonic.somethingWentWrong': 'Terjadi kesalahan. Silakan coba lagi.', - 'team.failedToCreate': 'Gagal membuat tim', - 'team.invalidInviteCode': 'Kode undangan tidak valid atau sudah kedaluwarsa', - 'team.failedToSwitch': 'Gagal berpindah tim', - 'team.failedToLeave': 'Gagal meninggalkan tim', - 'team.role.owner': 'Pemilik', - 'team.role.admin': 'Administrator', - 'team.role.billingManager': 'Manajer Tagihan', - 'team.role.member': 'Anggota', - 'team.active': 'Aktif', - 'team.personalTeam': 'Tim pribadi', - 'team.manageTeam': 'Kelola Tim', - 'team.switching': 'Berpindah...', - 'team.switch': 'Pindah', - 'team.leaving': 'Keluar...', - 'team.leave': 'Keluar', - 'team.yourTeams': 'Tim Anda', - 'team.createNewTeam': 'Buat Tim Baru', - 'team.teamName': 'Nama tim', - 'team.creating': 'Membuat...', - 'team.joinExistingTeam': 'Bergabung dengan Tim yang Ada', - 'team.inviteCode': 'Kode undangan', - 'team.joining': 'Bergabung...', - 'team.join': 'Bergabung', - 'team.leaveTeam': 'Tinggalkan Tim', - 'team.confirmLeave': 'Yakin ingin meninggalkan', - 'team.leaveWarning': - 'Anda akan kehilangan akses ke tim dan semua sumber daya tim. Anda memerlukan undangan baru untuk bergabung kembali.', - 'team.management': 'Manajemen Tim', - 'team.notFound': 'Tim tidak ditemukan', - 'team.accessDenied': 'Akses ditolak', - 'team.members': 'Anggota', - 'voice.title': 'Dikte Suara', - 'voice.settings': 'Pengaturan Suara', - 'voice.settingsDesc': 'Tahan hotkey untuk mendiktekan dan memasukkan teks ke kolom aktif.', - 'voice.hotkey': 'Pintasan', - 'voice.activationMode': 'Mode Aktivasi', - 'voice.tapToToggle': 'Ketuk untuk mengalihkan', - 'voice.writingStyle': 'Gaya Penulisan', - 'voice.verbatimTranscription': 'Transkripsi kata per kata', - 'voice.naturalCleanup': 'Pembersihan natural', - 'voice.autoStart': 'Mulai server suara otomatis dengan core', - 'voice.customDictionary': 'Kamus Kustom', - 'voice.customDictionaryDesc': - 'Tambahkan nama, istilah teknis, dan kata domain untuk meningkatkan akurasi pengenalan.', - 'voice.addWord': 'Tambahkan kata...', - 'voice.sttDisabled': 'Dikte suara dinonaktifkan sampai model STT lokal diunduh dan siap.', - 'voice.openLocalAiModel': 'Buka Model AI Lokal', - 'voice.serverRestarted': 'Server suara dimulai ulang dengan pengaturan baru.', - 'voice.settingsSaved': 'Pengaturan suara tersimpan.', - 'voice.serverStarted': 'Server suara dimulai.', - 'voice.serverStopped': 'Server suara dihentikan.', - 'voice.saveVoiceSettings': 'Simpan Pengaturan Suara', - 'voice.startVoiceServer': 'Mulai Server Suara', - 'voice.stopVoiceServer': 'Hentikan Server Suara', - 'voice.debugTitle': 'Debug Suara', - 'autocomplete.title': 'Pelengkap Otomatis', - 'autocomplete.settings': 'Pengaturan', - 'autocomplete.acceptWithTab': 'Terima dengan Tab', - 'autocomplete.stylePreset': 'Preset Gaya', - 'autocomplete.style.balanced': 'Seimbang', - 'autocomplete.style.concise': 'Ringkas', - 'autocomplete.style.formal': 'Resmi', - 'autocomplete.style.casual': 'Santai', - 'autocomplete.style.custom': 'Kustom', - 'autocomplete.disabledApps': 'Aplikasi yang Dinonaktifkan (satu bundle/token aplikasi per baris)', - 'autocomplete.saveSettings': 'Simpan Pengaturan', - 'autocomplete.saving': 'Menyimpan...', - 'autocomplete.runtime': 'Waktu Proses', - 'autocomplete.running': 'Berjalan', - 'autocomplete.start': 'Mulai', - 'autocomplete.stop': 'Hentikan', - 'autocomplete.settingsSaved': 'Pengaturan pelengkap otomatis tersimpan.', - 'autocomplete.started': 'Pelengkap otomatis dimulai.', - 'autocomplete.didNotStart': 'Pelengkap otomatis tidak dimulai. Periksa apakah sudah diaktifkan.', - 'autocomplete.stopped': 'Pelengkap otomatis dihentikan.', - 'autocomplete.advancedSettings': 'Pengaturan lanjutan', - 'autocomplete.debugTitle': 'Debug Pelengkap Otomatis', - 'chat.agentChat': 'Chat Agen', - 'chat.overrides': 'Penggantian', - 'chat.model': 'Model', - 'chat.temperature': 'Temperatur', - 'chat.conversation': 'Percakapan', - 'chat.startAgentConversation': 'Mulai percakapan dengan agen.', - 'chat.you': 'Anda', - 'chat.agent': 'Agen', - 'chat.askAgent': 'Tanyakan apa saja ke agen...', - 'chat.sendMessage': 'Kirim Pesan', - 'composio.triageTitle': 'Pemicu Integrasi', - 'composio.triageDesc': - 'Saat aktif, setiap pemicu Composio yang masuk menjalani langkah triase AI yang mengklasifikasikan event dan mungkin memulai tindakan otomatis — satu giliran LLM lokal per pemicu. Nonaktifkan secara global atau per integrasi jika Anda lebih suka tinjauan manual. Jika variabel lingkungan', - 'composio.disableAllTriage': 'Nonaktifkan triase AI untuk semua pemicu', - 'composio.triggersStillRecorded': - 'Pemicu tetap dicatat ke riwayat — tidak ada giliran LLM yang dijalankan.', - 'composio.disableSpecificIntegrations': 'Nonaktifkan triase AI untuk integrasi tertentu', - 'composio.settingsSaved': 'Pengaturan disimpan', - 'composio.saveFailed': 'Gagal menyimpan. Coba lagi.', - 'cron.title': 'Cron Job', - 'cron.scheduledJobs': 'Job Terjadwal', - 'cron.manageCronJobs': 'Kelola cron job dari penjadwal core.', - 'cron.refreshCronJobs': 'Segarkan Cron Job', - 'localModel.modelStatus': 'Status Model', - 'localModel.downloadModels': 'Unduh Model', - 'localModel.usage': 'Pemakaian', - 'localModel.usageDesc': - 'Pilih subsistem mana yang berjalan di model lokal. Yang nonaktif memakai cloud.', - 'localModel.enableRuntime': 'Aktifkan runtime AI lokal', - 'localModel.enableRuntimeDesc': - 'Sakelar utama. Nonaktif secara default; Ollama tetap idle. Saat aktif, peringkas tree, kecerdasan layar, dan autocomplete selalu memakai model lokal.', - 'localModel.advancedSettings': 'Pengaturan lanjutan', - 'localModel.debugTitle': 'Debug Model Lokal', - 'localModel.ollamaServer.helperText': 'Contoh: http://192.168.1.5:11434', - 'localModel.ollamaServer.label': 'URL Server Ollama', - 'localModel.ollamaServer.modelCount': 'model', - 'localModel.ollamaServer.placeholder': 'http://localhost:11434', - 'localModel.ollamaServer.reachable': 'Dapat Dijangkau', - 'localModel.ollamaServer.resetButton': 'Setel Ulang ke Default', - 'localModel.ollamaServer.saveButton': 'Simpan', - 'localModel.ollamaServer.testButton': 'Uji Koneksi', - 'localModel.ollamaServer.unreachable': 'Tidak Dapat Dijangkau', - 'localModel.ollamaServer.validationError': 'Harus berupa URL http:// atau https:// yang valid', - 'screenAwareness.debugTitle': 'Debug Kesadaran Layar', - 'memory.debugTitle': 'Debug Memori', - 'webhooks.debugTitle': 'Debug Webhook', - 'notifications.routingTitle': 'Perutean Notifikasi', - 'common.reload': 'Muat ulang', - 'common.skip': 'Lewati', - 'common.disable': 'Nonaktifkan', - 'common.enable': 'Aktifkan', - 'chat.safetyTimeout': 'Tidak ada respons dari agen setelah 2 menit. Coba lagi atau cek koneksi.', - 'chat.filter.all': 'Semua', - 'chat.filter.work': 'Kerja', - 'chat.filter.briefing': 'Ringkasan', - 'chat.filter.notification': 'Notifikasi', - 'chat.filter.workers': 'Worker', - 'chat.selectThread': 'Pilih thread', - 'chat.threads': 'Thread', - 'chat.noThreads': 'Belum ada thread', - 'chat.noLabelThreads': 'Tidak ada thread "{label}"', - 'chat.noWorkerThreads': 'Belum ada thread worker', - 'chat.deleteThread': 'Hapus thread', - 'chat.deleteThreadConfirm': 'Yakin ingin menghapus "{title}"?', - 'chat.untitledThread': 'Thread tanpa judul', - 'chat.editThreadTitle': 'Edit thread title', - 'chat.hideSidebar': 'Sembunyikan sidebar', - 'chat.showSidebar': 'Tampilkan sidebar', - 'chat.newThreadShortcut': 'Thread baru (/new)', - 'chat.new': 'Baru', - 'chat.failedToLoadMessages': 'Gagal memuat pesan', - 'chat.thinkingIteration': 'Berpikir... ({n})', - 'chat.thinkingDots': 'Berpikir...', - 'chat.approachingLimit': 'Mendekati batas pemakaian', - 'chat.approachingLimitMsg': 'Anda telah memakai {pct}% dari kuota yang tersedia.', - 'chat.upgrade': 'Tingkatkan', - 'chat.weeklyLimitHit': 'Anda telah mencapai batas mingguan.', - 'chat.resets': 'Reset', - 'chat.topUpToContinue': 'Isi ulang untuk melanjutkan.', - 'chat.budgetComplete': 'Budget bawaan Anda sudah habis. Tambah kredit atau upgrade untuk lanjut.', - 'chat.topUp': 'Isi Ulang', - 'chat.cycle': 'Siklus', - 'chat.cycleSpent': 'Terpakai siklus ini', - 'chat.cycleRemaining': 'Sisa', - 'chat.left': 'tersisa', - 'chat.setup': 'Atur', - 'chat.switchToText': 'Beralih ke teks', - 'chat.transcribing': 'Mentranskripsi...', - 'chat.stopAndSend': 'Berhenti dan kirim', - 'chat.startTalking': 'Mulai bicara', - 'chat.playingVoiceReply': 'Memutar balasan suara', - 'chat.voiceHint': 'Gunakan mikrofon untuk bicara', - 'chat.micUnavailable': 'Mikrofon tidak tersedia', - 'chat.turn': 'giliran', - 'chat.turns': 'giliran', - 'chat.openWorkerThread': 'Buka thread worker', - 'chat.attachment.attach': 'Lampirkan gambar', - 'chat.attachment.remove': 'Hapus {name}', - 'chat.attachment.tooMany': 'Maksimal {max} gambar per pesan', - 'chat.attachment.tooLarge': 'Gambar melebihi batas ukuran {max}', - 'chat.attachment.unsupportedType': - 'Jenis file tidak didukung. Gunakan PNG, JPEG, WebP, GIF, atau BMP.', - 'chat.attachment.readFailed': 'Tidak dapat membaca file', - 'memory.searchAria': 'Cari memori', - 'memory.searchPlaceholder': 'Cari entri memori...', - 'memory.sourceFilter.all': 'Semua sumber', - 'memory.sourceFilter.email': 'Email', - 'memory.sourceFilter.calendar': 'Kalender', - 'memory.sourceFilter.telegram': 'Telegram', - 'memory.sourceFilter.aiInsight': 'Insight AI', - 'memory.sourceFilter.system': 'Sistem', - 'memory.sourceFilter.trading': 'Perdagangan', - 'memory.sourceFilter.security': 'Keamanan', - 'memory.ingestionActivity': 'Aktivitas Ingesti', - 'memory.events': 'peristiwa', - 'memory.event': 'peristiwa', - 'memory.overTheLast': 'selama', - 'memory.months': 'bulan', - 'memory.peak': 'Puncak', - 'memory.perDay': '/hari', - 'memory.less': 'Lebih sedikit', - 'memory.more': 'Lebih banyak', - 'memory.on': 'pada', - 'memory.loading': 'Memuat Memori', - 'memory.fetching': 'Mengambil entri memori Anda...', - 'memory.analyzing': 'Menganalisis Memori', - 'memory.analyzingHint': 'Memproses memori Anda untuk mengekstrak insight...', - 'memory.noMatches': 'Tidak Ada Hasil', - 'memory.noMatchesHint': 'Coba ubah kata kunci atau filter.', - 'memory.allCaughtUp': 'Semua Sudah Selesai', - 'memory.allCaughtUpHint': 'Tidak ada entri memori baru untuk diproses.', - 'memory.noAnalysis': 'Belum Ada Analisis', - 'memory.noAnalysisHint': 'Jalankan analisis untuk menemukan pola dalam memori Anda.', - 'memory.emptyHint': 'Mulai berinteraksi untuk membuat memori pertama Anda.', - 'mic.unavailable': 'Mikrofon tidak tersedia', - 'mic.permissionDenied': 'Izin mikrofon ditolak', - 'mic.failedToStartRecorder': 'Gagal memulai perekam', - 'mic.transcribing': 'Mentranskripsi...', - 'mic.tapToSend': 'Ketuk untuk mengirim', - 'mic.waitingForAgent': 'Menunggu agen...', - 'mic.tapAndSpeak': 'Ketuk dan bicara', - 'mic.stopRecording': 'Hentikan perekaman dan kirim', - 'mic.startRecording': 'Mulai merekam', - 'token.usageLimitReached': 'Batas pemakaian tercapai', - 'token.approachingLimit': 'Mendekati batas', - 'token.planClickForDetails': 'paket - klik untuk detail', - 'token.sessionTokens': 'Masuk: {in} | Keluar: {out} | Giliran: {turns}', - 'token.limit': 'Batas Tercapai', - 'catalog.noCapabilityBinding': 'Tidak ada binding kemampuan', - 'catalog.downloadFailed': 'Unduhan gagal', - 'catalog.active': 'Aktif', - 'catalog.installed': 'Terinstal', - 'catalog.notDownloaded': 'Belum diunduh', - 'catalog.inUse': 'Sedang Dipakai', - 'catalog.use': 'Gunakan', - 'catalog.deleteModel': 'Hapus model', - 'catalog.download': 'Unduh', - 'navigator.recent': 'Terbaru', - 'navigator.today': 'Hari Ini', - 'navigator.thisWeek': 'Minggu Ini', - 'navigator.sources': 'Sumber', - 'navigator.email': 'Email', - 'navigator.slack': 'Slack', - 'navigator.chat': 'Obrolan', - 'navigator.documents': 'Dokumen', - 'navigator.people': 'Orang', - 'navigator.topics': 'Topik', - 'dreams.description': - 'Mimpi adalah refleksi yang dibuat AI yang mensintesis pola dari memori Anda.', - 'dreams.comingSoon': 'Segera hadir', - 'assignment.memoryLlm': 'LLM Memori', - 'assignment.memoryLlmAria': 'Pemilihan LLM Memori', - 'assignment.embedder': 'Penyemat', - 'assignment.loaded': 'Dimuat', - 'assignment.notDownloaded': 'Belum diunduh', - 'assignment.usedForExtractSummarise': 'Digunakan untuk ekstraksi dan ringkasan', - 'insights.knownFacts': 'Fakta yang Diketahui', - 'insights.preferences': 'Preferensi', - 'insights.relationships': 'Hubungan', - 'insights.skills': 'Skill', - 'insights.opinions': 'Pendapat', - // Developer options menu items (#2225) - 'devOptions.menuAi': 'Konfigurasi AI', - 'devOptions.menuAiDesc': 'Penyedia cloud, model Ollama lokal, dan routing per beban kerja', - 'devOptions.menuScreenAware': 'Kesadaran Layar', - 'devOptions.menuScreenAwareDesc': 'Izin tangkapan layar, kebijakan pemantauan, dan kontrol sesi', - 'devOptions.menuMessaging': 'Channel Pesan', - 'devOptions.menuMessagingDesc': - 'Konfigurasikan mode autentikasi Telegram/Discord dan routing channel bawaan', - 'devOptions.menuTools': 'Alat', - 'devOptions.menuToolsDesc': - 'Aktifkan atau nonaktifkan kemampuan yang dapat digunakan OpenHuman atas nama Anda', - 'devOptions.menuAgentChat': 'Obrolan Agen', - 'devOptions.menuAgentChatDesc': 'Uji percakapan agen dengan override model dan suhu', - 'devOptions.menuCronJobs': 'Pekerjaan Cron', - 'devOptions.menuCronJobsDesc': 'Lihat dan konfigurasikan pekerjaan terjadwal untuk skill runtime', - 'devOptions.menuLocalModelDebug': 'Debug Model Lokal', - 'devOptions.menuLocalModelDebugDesc': - 'Konfigurasi Ollama, unduhan aset, pengujian model, dan diagnostik', - 'devOptions.menuWebhooksDebug': 'Webhook', - 'devOptions.menuWebhooksDebugDesc': - 'Periksa pendaftaran webhook runtime dan log permintaan yang ditangkap', - 'devOptions.menuIntelligence': 'Kecerdasan', - 'devOptions.menuIntelligenceDesc': 'Workspace memori, mesin subconscious, mimpi, dan pengaturan', - 'devOptions.menuNotificationRouting': 'Routing Notifikasi', - 'devOptions.menuNotificationRoutingDesc': - 'Skor kepentingan AI dan eskalasi orkestrator untuk alert integrasi', - 'devOptions.menuComposeIOTriggers': 'Pemicu ComposeIO', - 'devOptions.menuComposeIOTriggersDesc': 'Lihat riwayat dan arsip pemicu ComposeIO', - 'devOptions.menuComposioRouting': 'Routing Composio (Mode Direct)', - 'devOptions.menuComposioRoutingDesc': - 'Gunakan API key Composio milik Anda sendiri dan rutekan panggilan langsung ke backend.composio.dev', - 'devOptions.menuComposioTriggers': 'Pemicu Integrasi', - 'devOptions.menuComposioTriggersDesc': - 'Konfigurasikan pengaturan triase AI untuk pemicu integrasi Composio', - 'mic.deviceSelector': 'Perangkat mikrofon', - 'mic.tapToSendCountdown': 'Ketuk untuk mengirim ({seconds}d)', - 'settings.agents.title': 'Agents', - 'settings.agents.subtitle': - 'Manage the agents available for delegation — built-in defaults and your own custom agents.', - 'settings.agents.menuDesc': 'Manage built-in and custom agents', - 'settings.agents.newAgent': 'New agent', - 'settings.agents.loadError': "Couldn't load agents", - 'settings.agents.empty': 'No agents yet', - 'settings.agents.sourceDefault': 'Built-in', - 'settings.agents.sourceCustom': 'Custom', - 'settings.agents.enable': 'Enable agent', - 'settings.agents.disable': 'Disable agent', - 'settings.agents.edit': 'Edit', - 'settings.agents.delete': 'Delete', - 'settings.agents.reset': 'Reset to default', - 'settings.agents.modelLabel': 'Model', - 'settings.agents.toolsLabel': 'Tools', - 'settings.agents.toolsAll': 'All tools', - 'settings.agents.toolsCount': '{count} tools', - 'settings.agents.actionFailed': "Couldn't update the agent", - 'settings.agents.orchestratorLocked': 'The orchestrator is always enabled.', - 'settings.agents.editor.createTitle': 'New agent', - 'settings.agents.editor.editTitle': 'Edit agent', - 'settings.agents.editor.id': 'ID', - 'settings.agents.editor.idHint': 'Lowercase letters, numbers, _ and - only.', - 'settings.agents.editor.name': 'Name', - 'settings.agents.editor.description': 'Description', - 'settings.agents.editor.model': 'Model (optional)', - 'settings.agents.editor.modelPlaceholder': 'e.g. inherit, hint:fast, or a model id', - 'settings.agents.editor.systemPrompt': 'System prompt (optional)', - 'settings.agents.editor.tools': 'Allowed tools', - 'settings.agents.editor.toolsHint': 'One tool name per line. Use * for all tools.', - 'settings.agents.editor.defaultsNote': - 'Editing a built-in agent saves an override you can reset later.', - 'settings.agents.editor.save': 'Save', - 'settings.agents.editor.create': 'Create agent', - 'settings.agents.editor.saving': 'Saving…', - 'settings.agentsSection.title': 'Agents', - 'settings.agentsSection.description': - 'Manage your agents, their autonomy, and what they can access on this computer.', - 'settings.agentsSection.menuDesc': 'Registry, autonomy & OS access', - 'settings.agents.editor.notFound': 'Agent not found.', - 'settings.agents.editor.modelInherit': 'Inherit (platform default)', - 'settings.agents.editor.modelHints': 'Route hints', - 'settings.agents.editor.modelTiers': 'Model tiers', - 'settings.agents.editor.modelCustom': 'Custom model id…', - 'settings.agents.editor.modelCustomPlaceholder': 'e.g. anthropic/claude-sonnet-4', - 'settings.agents.editor.selectTools': 'Add tools', - 'settings.agents.editor.toolsAllSelected': 'All tools', - 'settings.agents.editor.toolsNoneSelected': 'No tools selected', - 'settings.agents.editor.removeToolAria': 'Remove {tool}', - 'settings.agents.editor.toolsModalTitle': 'Allowed tools', - 'settings.agents.editor.toolsSelectedCount': '{count} selected', - 'settings.agents.editor.toolsSearchPlaceholder': 'Search tools…', - 'settings.agents.editor.toolsAllowAll': 'Allow all tools (*)', - 'settings.agents.editor.toolsAllowAllHint': 'This agent can use every available tool.', - 'settings.agents.editor.toolsLoading': 'Loading tools…', - 'settings.agents.editor.toolsLoadError': 'Couldn’t load tools', - 'settings.agents.editor.toolsEmpty': 'No tools match your search.', - 'settings.agents.editor.toolsDone': 'Done', - 'settings.agents.editor.builtInReadonly': - 'Built-in agents can’t be edited. You can enable, disable, or reset them from the agents list.', -}; - -export default id2; diff --git a/app/src/lib/i18n/chunks/id-3.ts b/app/src/lib/i18n/chunks/id-3.ts deleted file mode 100644 index dd5d301cd..000000000 --- a/app/src/lib/i18n/chunks/id-3.ts +++ /dev/null @@ -1,507 +0,0 @@ -import type { TranslationMap } from '../types'; - -// Indonesian (Bahasa Indonesia) chunk 3/5. Translated from chunks/en-3.ts. -const id3: TranslationMap = { - 'insights.other': 'Lainnya', - 'insights.title': 'Wawasan', - 'insights.empty': 'Belum ada wawasan. Wawasan dibuat seiring bertambahnya memori Anda.', - 'insights.description': 'Berdasarkan {count} relasi di grafik memori Anda.', - 'insights.items': 'item', - 'insights.more': 'lagi', - 'calls.joiningCall': 'Bergabung ke panggilan', - 'calls.meetWindowOpening': 'Jendela Meet sedang dibuka...', - 'calls.failedToStart': 'Gagal memulai panggilan Meet', - 'calls.couldNotStart': 'Tidak dapat memulai panggilan', - 'calls.failedToClose': 'Gagal menutup panggilan', - 'calls.couldNotClose': 'Tidak dapat menutup panggilan', - 'calls.joinMeet': 'Bergabung ke panggilan Google Meet', - 'calls.joinMeetDescription': 'Masukkan tautan Google Meet untuk bergabung.', - 'calls.meetLink': 'Tautan Meet', - 'calls.displayName': 'Nama Tampilan', - 'calls.openingMeet': 'Membuka Meet...', - 'calls.joinCall': 'Bergabung ke Panggilan', - 'calls.activeCalls': 'Panggilan Aktif', - 'calls.leave': 'Keluar', - 'workspace.wipeConfirm': - 'Yakin ingin menghapus semua memori? Tindakan ini tidak dapat dibatalkan.', - 'workspace.resetTreeConfirm': 'Yakin ingin membangun ulang pohon memori?', - 'workspace.wipeTitle': 'Hapus Memori', - 'workspace.resetting': 'Mereset...', - 'workspace.resetMemory': 'Reset Memori', - 'workspace.resetTreeTitle': 'Bangun Ulang Pohon Memori', - 'workspace.rebuilding': 'Membangun ulang...', - 'workspace.resetMemoryTree': 'Reset Pohon Memori', - 'workspace.building': 'Membangun...', - 'workspace.buildSummaryTrees': 'Bangun Pohon Ringkasan', - 'workspace.viewVault': 'Lihat Vault', - 'workspace.openingVaultTitle': 'Membuka vault di Obsidian', - 'workspace.openingVaultMessage': - 'Jika Obsidian tidak terbuka, instal dari obsidian.md atau gunakan Tampilkan Folder. Path vault:', - 'workspace.openVaultFailedTitle': 'Tidak dapat membuka vault di Obsidian', - 'workspace.openVaultFailedMessage': - 'Gunakan Tampilkan Folder untuk membuka direktori vault secara langsung. Path vault:', - 'workspace.revealVaultFailed': 'Tidak dapat menampilkan folder vault', - 'workspace.revealFolder': 'Tampilkan Folder', - 'workspace.checkingVault': 'Checking…', - 'workspace.vaultNotRegisteredHelp': - 'Obsidian only opens folders you\'ve added as a vault. In Obsidian, choose "Open folder as vault" and pick the folder below — you only need to do this once. Then click View Vault again.', - 'workspace.obsidianNotFoundHelp': - "We couldn't find Obsidian on this device. Install it, or — if it's installed somewhere non-standard — set its config folder under Advanced.", - 'workspace.openAnyway': 'Open in Obsidian anyway', - 'workspace.installObsidian': 'Install Obsidian', - 'workspace.obsidianAdvanced': 'Obsidian installed elsewhere?', - 'workspace.obsidianConfigDirLabel': 'Obsidian config folder', - 'workspace.obsidianConfigDirHint': - 'Path to the folder containing obsidian.json (e.g. ~/.config/obsidian). Leave blank to auto-detect.', - 'workspace.obsidianConfigDirPlaceholder': '~/.config/obsidian', - 'workspace.graphLoadFailed': 'Gagal memuat grafik memori', - 'workspace.loadingGraph': 'Memuat grafik memori...', - 'workspace.graphViewMode': 'Mode tampilan grafik memori', - 'workspace.trees': 'Pohon', - 'workspace.contacts': 'Kontak', - 'graph.noContactMentions': 'Tidak ada sebutan kontak', - 'graph.noMemory': 'Tidak ada memori', - 'graph.source': 'Sumber', - 'graph.topic': 'Topik', - 'graph.global': 'Keseluruhan', - 'graph.document': 'Dokumen', - 'graph.contact': 'Kontak', - 'graph.nodes': 'node', - 'graph.parentChild': 'induk-anak', - 'graph.documentContact': 'dokumen-kontak', - 'graph.link': 'tautan', - 'graph.links': 'tautan', - 'graph.children': 'anak', - 'graph.clickToOpenObsidian': 'Klik untuk membuka di Obsidian', - 'graph.person': 'Orang', - 'modal.dontShowAgain': 'Jangan tampilkan saran serupa', - 'reflections.loading': 'Memuat refleksi...', - 'reflections.empty': 'Belum ada refleksi', - 'reflections.title': 'Refleksi', - 'reflections.proposedAction': 'Tindakan yang Diusulkan', - 'reflections.act': 'Tindakan', - 'reflections.dismiss': 'Abaikan', - 'whatsapp.chatsSynced': 'obrolan disinkronkan', - 'whatsapp.chatSynced': 'obrolan disinkronkan', - 'sync.active': 'Aktif', - 'sync.recent': 'Terbaru', - 'sync.idle': 'Siaga', - 'sync.memorySources': 'Sumber Memori', - 'sync.noConnectedSources': 'Tidak ada sumber terhubung', - 'sync.chunks': 'chunk', - 'sync.lastChunk': 'Chunk terakhir:', - 'sync.pending': 'tertunda', - 'sync.processed': 'diproses', - 'sync.syncing': 'Menyinkronkan...', - 'sync.sync': 'Sinkronkan', - 'sync.failedToLoad': 'Gagal memuat status sinkronisasi', - 'sync.noContent': - 'Belum ada konten yang disinkronkan ke memori. Hubungkan integrasi untuk memulai.', - 'memorySources.title': 'Memory Sources', - 'memorySources.empty': 'No memory sources yet. Add one to start feeding memory.', - 'memorySources.loadingConnections': 'Loading connections…', - 'memorySources.noConnections': - 'No active Composio connections found. Connect an integration first.', - 'memorySources.pickConnection': 'Pick a connection', - 'memorySources.selectConnection': '— Select a connection —', - 'memorySources.composioListFailed': 'Failed to load Composio connections.', - 'memorySources.browse': 'Browse…', - 'memorySources.folderPathPlaceholder': '/Users/you/notes', - 'memorySources.globPatternPlaceholder': '**/*.md', - 'memorySources.repoUrlPlaceholder': 'https://github.com/org/repo', - 'memorySources.branchPlaceholder': 'main', - 'memorySources.feedUrlPlaceholder': 'https://example.com/feed.xml', - 'memorySources.pageUrlPlaceholder': 'https://example.com/article', - 'memorySources.cssSelectorPlaceholder': 'article', - 'memorySources.searchQueryPlaceholder': 'from:user AI safety', - 'memorySources.kind.composio': 'Integration', - 'memorySources.kind.folder': 'Local Folder', - 'memorySources.kind.github_repo': 'GitHub Repo', - 'memorySources.kind.twitter_query': 'Twitter Search', - 'memorySources.kind.rss_feed': 'RSS Feed', - 'memorySources.kind.web_page': 'Web Page', - 'memorySources.sync.successTitle': 'Syncing', - 'memorySources.sync.successMessage': 'Progress will appear shortly.', - 'memorySources.sync.failedTitle': 'Sync failed:', - 'time.justNow': 'just now', - 'time.secondsAgoSuffix': 's ago', - 'time.minutesAgoSuffix': 'm ago', - 'time.hoursAgoSuffix': 'h ago', - 'time.daysAgoSuffix': 'd ago', - 'memorySources.customSources': 'Custom Sources', - 'memorySources.addSource': 'Add Source', - 'memorySources.noCustomSources': - 'No custom sources yet. Add a folder, GitHub repo, RSS feed, or web page to start.', - 'memorySources.pickKind': 'What kind of source do you want to add?', - 'memorySources.backToKinds': 'Back to source types', - 'memorySources.label': 'Label', - 'memorySources.labelPlaceholder': 'My research notes', - 'memorySources.add': 'Add', - 'memorySources.adding': 'Adding…', - 'memorySources.added': 'Source added', - 'memorySources.removed': 'Source removed', - 'memorySources.remove': 'Remove', - 'memorySources.enable': 'Enable', - 'memorySources.disable': 'Disable', - 'memorySources.toggleFailed': 'Toggle failed', - 'memorySources.removeFailed': 'Remove failed', - 'memorySources.folderPath': 'Folder path', - 'memorySources.globPattern': 'Glob pattern', - 'memorySources.repoUrl': 'Repository URL', - 'memorySources.branch': 'Branch', - 'memorySources.feedUrl': 'Feed URL', - 'memorySources.pageUrl': 'Page URL', - 'memorySources.cssSelector': 'CSS selector (optional)', - 'memorySources.searchQuery': 'Search query', - 'backend.aiBackend': 'Backend AI', - 'backend.cloud': 'Awan', - 'backend.recommended': 'Direkomendasikan', - 'backend.cloudDescription': 'Model cepat dan kuat yang dihosting di server kami. Siap dipakai.', - 'backend.privacyNote': 'Data pribadi, pesan, atau kunci tidak pernah dikirim ke server kami.', - 'backend.local': 'Lokal', - 'backend.advanced': 'Lanjutan', - 'backend.localDescription': - 'Jalankan model di mesin Anda sendiri menggunakan Ollama. Privasi penuh, perlu pengaturan.', - 'backend.ramRecommended': 'RAM 16GB+ direkomendasikan', - 'subconscious.tasks': 'tugas', - 'subconscious.ticks': 'tick', - 'subconscious.last': 'Terakhir', - 'subconscious.failed': 'gagal', - 'subconscious.tickInterval': 'Interval Tick', - 'subconscious.runNow': 'Jalankan Sekarang', - 'subconscious.providerUnavailableTitle': 'Subconscious dijeda', - 'subconscious.providerSettings': 'Pengaturan AI', - 'subconscious.approvalNeeded': 'Persetujuan Diperlukan', - 'subconscious.requiresApproval': 'Memerlukan persetujuan', - 'subconscious.fixInConnections': 'Perbaiki di Koneksi', - 'subconscious.goAhead': 'Lanjutkan', - 'subconscious.activeTasks': 'Tugas Aktif', - 'subconscious.noActiveTasks': 'Tidak ada tugas aktif', - 'subconscious.default': 'Bawaan', - 'subconscious.addTaskPlaceholder': 'Tambahkan tugas baru...', - 'subconscious.activityLog': 'Log Aktivitas', - 'subconscious.noActivity': 'Belum ada aktivitas', - 'subconscious.decision.nothingNew': 'Tidak ada yang baru', - 'subconscious.decision.completed': 'Selesai', - 'subconscious.decision.evaluating': 'Mengevaluasi', - 'subconscious.decision.waitingApproval': 'Menunggu persetujuan', - 'subconscious.decision.failed': 'Gagal', - 'subconscious.decision.cancelled': 'Dibatalkan', - 'subconscious.decision.skipped': 'Dilewati', - 'actionable.complete': 'Selesai', - 'actionable.dismiss': 'Abaikan', - 'actionable.snooze': 'Tunda', - 'actionable.new': 'Baru', - 'stats.storage': 'Penyimpanan', - 'stats.files': 'file', - 'stats.documents': 'Dokumen', - 'stats.today': 'hari ini', - 'stats.namespaces': 'Namespace', - 'stats.relations': 'Relasi', - 'stats.firstMemory': 'Memori Pertama', - 'stats.latest': 'Terbaru', - 'stats.sessions': 'Sesi', - 'stats.tokens': 'token', - 'bootCheck.invalidUrl': 'Masukkan URL runtime.', - 'bootCheck.urlMustStartWith': 'URL harus diawali dengan http:// atau https://', - 'bootCheck.validUrlRequired': 'Itu bukan URL yang valid (coba https://core.example.com/rpc)', - 'bootCheck.tokenRequired': 'Kami memerlukan token autentikasi untuk terhubung.', - 'bootCheck.chooseCoreMode': 'Pilih Runtime', - 'bootCheck.connectToCore': 'Hubungkan ke Runtime Anda', - 'bootCheck.desktopDescription': - 'OpenHuman memerlukan runtime untuk berpikir. Pilih di mana runtime harus berada.', - 'bootCheck.webDescription': - 'Di web, OpenHuman terhubung ke runtime yang Anda kendalikan. Masukkan URL dan token autentikasi di bawah, atau ambil aplikasi desktop untuk menjalankannya langsung di mesin Anda.', - 'bootCheck.preferDesktop': 'Lebih suka menyimpan semuanya di perangkat Anda sendiri?', - 'bootCheck.downloadDesktop': 'Dapatkan Aplikasi Desktop', - 'bootCheck.localRecommended': 'Jalankan Secara Lokal (Direkomendasikan)', - 'bootCheck.localDescription': - 'Berjalan langsung di komputer Anda. Tercepat, sepenuhnya privat, tidak perlu pengaturan.', - 'bootCheck.cloudMode': 'Jalankan di Cloud (Kompleks)', - 'bootCheck.cloudDescription': - 'Hubungkan ke runtime yang Anda hosting di tempat lain. Tetap online 24×7 sehingga Anda tidak perlu terus menjalankan perangkat ini.', - 'bootCheck.coreRpcUrl': 'URL Runtime', - 'bootCheck.rpcUrlPlaceholder': 'https://core.example.com/rpc', - 'bootCheck.authToken': 'Token Autentikasi', - 'bootCheck.bearerTokenPlaceholder': 'Token bearer dari runtime jarak jauh Anda', - 'bootCheck.storedLocally': 'Hanya disimpan di perangkat ini. Dikirim sebagai ', - 'bootCheck.testing': 'Menguji...', - 'bootCheck.testConnection': 'Uji Koneksi', - 'bootCheck.connectedOk': 'Terhubung. Anda siap melanjutkan.', - 'bootCheck.authFailed': 'Token tersebut tidak berfungsi. Periksa kembali dan coba lagi.', - 'bootCheck.unreachablePrefix': 'Tidak dapat mencapainya:', - 'bootCheck.checkingCore': 'Membangunkan runtime Anda...', - 'bootCheck.cannotReach': 'Tidak Dapat Menjangkau Runtime', - 'bootCheck.cannotReachDesc': - 'Kami tidak dapat terhubung ke runtime Anda. Ingin mencoba yang berbeda?', - 'bootCheck.switchMode': 'Pilih Runtime Berbeda', - 'bootCheck.quit': 'Keluar', - 'bootCheck.legacyDetected': 'Runtime Latar Belakang Lama Terdeteksi', - 'bootCheck.legacyDescription': - 'Daemon OpenHuman yang diinstal terpisah sudah berjalan di perangkat ini. Kami perlu membersihkannya sebelum runtime bawaan dapat mengambil alih.', - 'bootCheck.removing': 'Menghapus...', - 'bootCheck.removeContinue': 'Hapus dan Lanjutkan', - 'bootCheck.localNeedsRestart': 'Runtime Lokal Perlu Dimulai Ulang', - 'bootCheck.localNeedsRestartDesc': - 'Runtime lokal Anda menggunakan versi berbeda dari aplikasi ini. Mulai ulang cepat akan menyinkronkannya kembali.', - 'bootCheck.restarting': 'Memulai ulang...', - 'bootCheck.restartCore': 'Mulai Ulang Runtime', - 'bootCheck.cloudNeedsUpdate': 'Runtime Cloud Perlu Diperbarui', - 'bootCheck.cloudNeedsUpdateDesc': - 'Runtime cloud Anda menggunakan versi berbeda dari aplikasi ini. Jalankan pembaruan untuk menyinkronkannya kembali.', - 'bootCheck.updating': 'Memperbarui...', - 'bootCheck.updateCloudCore': 'Perbarui Runtime Cloud', - 'bootCheck.versionCheckFailed': 'Pemeriksaan Versi Runtime Gagal', - 'bootCheck.versionCheckFailedDesc': - 'Runtime Anda aktif tetapi tidak melaporkan versinya. Mungkin sudah usang. Mulai ulang atau perbarui untuk melanjutkan.', - 'bootCheck.working': 'Memproses...', - 'bootCheck.restartUpdateCore': 'Mulai Ulang / Perbarui Runtime', - 'bootCheck.unexpectedError': 'Kesalahan Boot-Check Tak Terduga', - 'bootCheck.actionFailed': 'Terjadi kesalahan. Silakan coba lagi.', - 'bootCheck.portConflictTitle': 'Tidak dapat memulai mesin aplikasi', - 'bootCheck.portConflictBody': - 'Proses lain sedang menggunakan port jaringan yang dibutuhkan OpenHuman. Kami akan mencoba memperbaikinya secara otomatis.', - 'bootCheck.portConflictFixButton': 'Perbaiki Otomatis', - 'bootCheck.portConflictFixing': 'Memperbaiki…', - 'bootCheck.portConflictFixFailed': - 'Perbaikan otomatis tidak berhasil. Silakan restart komputer Anda dan coba lagi.', - 'notifications.justNow': 'baru saja', - 'notifications.minAgo': '{n}m lalu', - 'notifications.hrAgo': '{n}j lalu', - 'notifications.dayAgo': '{n}h lalu', - 'notifications.category.messages': 'Pesan', - 'notifications.category.agents': 'Agen', - 'notifications.category.skills': 'Skill', - 'notifications.category.system': 'Sistem', - 'notifications.category.meetings': 'Rapat', - 'notifications.category.reminders': 'Pengingat', - 'notifications.category.important': 'Penting', - 'about.update.status.checking': 'Memeriksa...', - 'about.update.status.available': 'v{version} tersedia', - 'about.update.status.availableNoVersion': 'Pembaruan tersedia', - 'about.update.status.downloading': 'Mengunduh...', - 'about.update.status.readyToInstall': 'v{version} siap diinstal', - 'about.update.status.readyToInstallNoVersion': - 'Versi baru sudah diunduh dan siap. Mulai ulang untuk menerapkan.', - 'about.update.status.installing': 'Menginstal...', - 'about.update.status.restarting': 'Memulai ulang...', - 'about.update.status.upToDate': 'Anda memakai versi terbaru.', - 'about.update.status.error': 'Pemeriksaan pembaruan gagal', - 'about.update.status.default': 'Periksa pembaruan', - 'welcome.connectionFailed': 'Koneksi gagal: {status} {statusText}', - 'welcome.connectionFailedMsg': 'Koneksi gagal: {message}', - 'welcome.continueLocally': 'Lanjutkan secara lokal', - 'welcome.localSessionStarting': 'Memulai sesi lokal...', - 'welcome.localSessionDesc': 'Menggunakan profil lokal offline dan melewati TinyHumans OAuth.', - 'chat.agentChatDesc': 'Buka sesi chat langsung dengan agen.', - 'channels.activeRouteValue': '{channel} lewat {authMode}', - 'privacy.dataKind.messages': 'Pesan', - 'privacy.dataKind.agents': 'Agen', - 'privacy.dataKind.skills': 'Skill', - 'privacy.dataKind.system': 'Sistem', - 'privacy.dataKind.meetings': 'Rapat', - 'privacy.dataKind.reminders': 'Pengingat', - 'privacy.dataKind.important': 'Penting', - 'onboarding.enableLocalAI': 'Aktifkan AI Lokal', - 'onboarding.skills.status.available': 'Tersedia', - 'onboarding.skills.status.connected': 'Terhubung', - 'onboarding.skills.status.connecting': 'Menghubungkan', - 'onboarding.skills.status.error': 'Kesalahan', - 'onboarding.skills.status.unavailable': 'Tidak tersedia', - 'composio.statusUnavailable': 'Status tidak tersedia', - 'composio.envVarOverrides': 'diatur, itu menggantikan pengaturan ini.', - 'memory.day.sun': 'Min', - 'memory.day.mon': 'Sen', - 'memory.day.tue': 'Sel', - 'memory.day.wed': 'Rab', - 'memory.day.thu': 'Kam', - 'memory.day.fri': 'Jum', - 'memory.day.sat': 'Sab', - 'memory.ingesting': 'Mengingesti', - 'memory.ingestionQueued': 'Dalam antrean', - 'memory.ingestingTitle': 'Mengingesti {title}', - 'mic.noAudioCaptured': 'Tidak ada audio tertangkap', - 'mic.noSpeechDetected': 'Tidak ada suara terdeteksi', - 'mic.lowConfidenceResult': 'Tidak dapat memahami audio dengan jelas — silakan coba lagi', - 'mic.failedToStopRecording': 'Gagal menghentikan perekaman: {message}', - 'mic.transcriptionFailed': 'Transkripsi gagal: {message}', - 'reflections.kind.retrospective': 'Retrospektif', - 'reflections.kind.derivedFact': 'Fakta Turunan', - 'reflections.kind.moodInsight': 'Wawasan Suasana Hati', - 'reflections.kind.relationshipInsight': 'Wawasan Hubungan', - 'graph.tooltip.summary': 'Ringkasan', - 'graph.tooltip.contact': 'Kontak', - 'localModel.usage.never': 'Tidak pernah', - 'localModel.usage.mediumLoad': 'Beban sedang', - 'localModel.usage.lowLoad': 'Beban rendah', - 'localModel.usage.idleMode': 'Mode idle', - 'localModel.rebootstrapComplete': 'Bootstrap ulang model selesai.', - 'localModel.modelsVerified': 'Model lokal diverifikasi.', - 'accounts.addModal.allConnected': 'Semua terhubung', - 'accounts.addModal.title': 'Tambah akun', - 'accounts.respondQueue.empty': 'Kosong', - 'accounts.respondQueue.hide': 'Sembunyikan antrean balasan', - 'accounts.respondQueue.loadFailed': 'Gagal memuat antrean respons', - 'accounts.respondQueue.loading': 'Memuat antrean...', - 'accounts.respondQueue.pending': 'Tertunda', - 'accounts.respondQueue.show': 'Tampilkan antrean balasan', - 'accounts.respondQueue.title': 'Antrean respons', - 'accounts.webviewHost.almostReady': 'Hampir siap...', - 'accounts.webviewHost.loadTimeout': 'Waktu muat webview habis', - 'accounts.webviewHost.loading': 'Memuat {providerName}...', - 'accounts.webviewHost.loadingAccount': 'Memuat akun', - 'accounts.webviewHost.restoringSession': 'Memulihkan sesi...', - 'accounts.webviewHost.retryLoading': 'Coba muat ulang', - 'accounts.webviewHost.takingLonger': - '{providerName} memakan waktu lebih lama dari yang diharapkan.', - 'accounts.webviewHost.timeoutHint': 'Petunjuk waktu habis', - 'app.connectionBadge.composio': 'Composio', - 'app.connectionBadge.messaging': 'Pesan', - 'app.connectionIndicator.connected': 'Terhubung ke OpenHuman AI 🚀', - 'app.connectionIndicator.connecting': 'Menghubungkan', - 'app.connectionIndicator.coreOffline': 'Core tidak online', - 'app.connectionIndicator.disconnected': 'Terputus', - 'app.connectionIndicator.offline': 'Tidak online', - 'app.connectionIndicator.reconnecting': 'Menyambung ulang…', - 'app.errorFallback.componentStack': 'Stack komponen', - 'app.errorFallback.downloadLatest': 'Unduh terbaru', - 'app.errorFallback.heading': 'Judul', - 'app.errorFallback.hint': 'Petunjuk', - 'app.errorFallback.reloadApp': 'Muat ulang aplikasi', - 'app.errorFallback.subheading': 'Subjudul', - 'app.errorFallback.tryRecover': 'Coba pulihkan', - 'app.localAiDownload.installing': 'Menginstal...', - 'app.localAiDownload.preparing': 'Mempersiapkan...', - 'app.openhumanLink.accounts.continueWith': 'Lanjutkan dengan masuk {label}', - 'app.openhumanLink.accounts.done': 'Selesai', - 'app.openhumanLink.accounts.intro': 'Pengantar', - 'app.openhumanLink.accounts.webviewNote': 'Catatan webview', - 'app.openhumanLink.billing.openDashboard': 'Buka dashboard', - 'app.openhumanLink.billing.stayOnTrial': 'Tetap di trial', - 'app.openhumanLink.billing.trialCredit': 'Kredit trial', - 'app.openhumanLink.billing.trialDesc': 'Deskripsi trial', - 'app.openhumanLink.defaultBody': - 't siap di popup belum. Buka halaman pengaturan lengkap jika Anda', - 'app.openhumanLink.discord.intro': 'Pengantar', - 'app.openhumanLink.discord.openInvite': 'Buka undangan', - 'app.openhumanLink.discord.perk1': 'Keuntungan 1', - 'app.openhumanLink.discord.perk2': 'Keuntungan 2', - 'app.openhumanLink.discord.perk3': 'Keuntungan 3', - 'app.openhumanLink.discord.perk4': 'Keuntungan 4', - 'app.openhumanLink.done': 'Selesai', - 'app.openhumanLink.loadingChannelSetup': 'Memuat pengaturan kanal', - 'app.openhumanLink.maybeLater': 'Mungkin nanti', - 'app.openhumanLink.notifications.asking': 'Menanyakan ke OS Anda...', - 'app.openhumanLink.notifications.blocked': 'Diblokir', - 'app.openhumanLink.notifications.blockedStep1': 'Langkah 1 diblokir', - 'app.openhumanLink.notifications.blockedStep2': 'Langkah 2 diblokir', - 'app.openhumanLink.notifications.blockedStep3': 'Langkah 3 diblokir', - 'app.openhumanLink.notifications.intro': 'Pengantar', - 'app.openhumanLink.notifications.promptHint': 'Petunjuk prompt', - 'app.openhumanLink.notifications.retry': 'Coba ulang notifikasi tes', - 'app.openhumanLink.notifications.send': 'Kirim notifikasi tes', - 'app.openhumanLink.notifications.sendFailed': 'Tidak bisa mengirim: {error}', - 'app.openhumanLink.notifications.sent': - 'Notifikasi uji telah dikirim. Jika Anda tidak menerimanya, buka System Settings → Notifications → OpenHuman, aktifkan Allow Notifications, dan atur Banner Style ke Persistent.', - 'app.openhumanLink.skipForNow': 'Lewati untuk sekarang', - 'app.openhumanLink.telegramUnavailable': 'Telegram tidak tersedia', - 'app.openhumanLink.title.accounts': 'Hubungkan aplikasi Anda', - 'app.openhumanLink.title.billing': 'Tagihan & kredit', - 'app.openhumanLink.title.discord': 'Bergabung ke komunitas', - 'app.openhumanLink.title.messaging': 'Hubungkan kanal chat', - 'app.openhumanLink.title.notifications': 'Izinkan notifikasi', - 'app.persistRehydration.body': 'Isi', - 'app.persistRehydration.heading': 'Judul', - 'app.persistRehydration.resetCta': 'Mereset...', - 'app.persistRehydration.resetting': 'Mereset...', - 'app.routeLoading.initializing': 'Menginisialisasi OpenHuman...', - 'app.update.currentlyOn': '{version}', - 'app.update.errorFallback': 'Terjadi kesalahan saat memperbarui.', - 'app.update.header.default': 'Perbarui', - 'app.update.header.error': 'Pembaruan gagal', - 'app.update.header.installing': 'Menginstal pembaruan', - 'app.update.header.readyToInstall': 'Pembaruan siap diinstal', - 'app.update.header.restarting': 'Memulai ulang...', - 'app.update.later': 'Nanti', - 'app.update.newVersionReady': 'Versi baru siap diinstal.', - 'app.update.progress.downloaded': '{amount} diunduh', - 'app.update.progress.installing': 'Menginstal versi baru...', - 'app.update.progress.restarting': 'Meluncurkan ulang aplikasi...', - 'app.update.progress.working': '{percent}%', - 'app.update.restartNote': 'Catatan mulai ulang', - 'app.update.restartNow': 'Mulai ulang sekarang', - 'app.update.versionReady': 'Versi {newVersion} siap diinstal.', - 'channels.discord.accountLinked': 'Akun terhubung', - 'channels.discord.connect': 'Hubungkan', - 'channels.discord.linkTokenExpired': 'Token tautan kedaluwarsa. Silakan coba lagi.', - 'channels.discord.linkTokenInstruction': '{token}', - 'channels.discord.linkTokenLabel': 'Label token tautan', - 'channels.discord.linkTokenOnce': 'Token tautan sekali pakai', - 'channels.discord.picker.allPermissionsOk': - 'Bot memiliki semua izin yang diperlukan di kanal ini.', - 'channels.discord.picker.botNotInServers': 'Bot tidak ada di server', - 'channels.discord.picker.category': 'Kategori', - 'channels.discord.picker.channel': 'Kanal', - 'channels.discord.picker.checkingPermissions': 'Memeriksa izin', - 'channels.discord.picker.loadingChannels': 'Memuat kanal...', - 'channels.discord.picker.loadingServers': 'Memuat server...', - 'channels.discord.picker.missingPermissions': 'Izin tidak lengkap', - 'channels.discord.picker.noChannels': 'Tidak ada kanal teks ditemukan', - 'channels.discord.picker.noServers': 'Tidak ada server ditemukan', - 'channels.discord.picker.selectChannel': 'Pilih kanal', - 'channels.discord.picker.selectServer': 'Pilih server', - 'channels.discord.picker.server': 'Server', - 'channels.discord.picker.serverChannelSelection': 'Pemilihan Server & Channel', - 'channels.discord.savedRestartRequired': - 'Kanal tersimpan. Mulai ulang aplikasi untuk mengaktifkannya.', - 'channels.telegram.connect': 'Hubungkan', - 'channels.telegram.managedDmConnecting': 'DM terkelola menghubungkan', - 'channels.telegram.managedDmTimeout': 'Waktu DM terkelola habis', - 'channels.telegram.reconnect': 'Hubungkan ulang', - 'channels.telegram.savedRestartRequired': - 'Kanal tersimpan. Mulai ulang aplikasi untuk mengaktifkannya.', - 'channels.web.alwaysAvailable': 'Selalu tersedia', - 'channels.discord.displayName': 'Discord', - 'channels.discord.description': 'Mengirim dan menerima pesan melalui Discord.', - 'channels.discord.authMode.bot_token.description': 'Berikan token bot Discord Anda sendiri.', - 'channels.discord.authMode.oauth.description': - 'Instal bot OpenHuman ke server Discord Anda melalui OAuth.', - 'channels.discord.authMode.managed_dm.description': - 'Tautkan akun Discord pribadi Anda ke bot OpenHuman.', - 'channels.discord.fields.bot_token.label': 'Token Bot', - 'channels.discord.fields.bot_token.placeholder': 'Token bot Discord Anda', - 'channels.discord.fields.guild_id.label': 'ID Server (Guild)', - 'channels.discord.fields.guild_id.placeholder': 'Opsional: membatasi ke server tertentu', - 'channels.telegram.displayName': 'Telegram', - 'channels.telegram.description': 'Mengirim dan menerima pesan melalui Telegram.', - 'channels.telegram.authMode.managed_dm.description': - 'Kirim pesan langsung ke bot OpenHuman Telegram.', - 'channels.telegram.authMode.bot_token.description': - 'Berikan token Bot Telegram Anda sendiri dari @Botfather.', - 'channels.telegram.fields.bot_token.label': 'Token Bot', - 'channels.telegram.fields.bot_token.placeholder': '123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11', - 'channels.telegram.fields.allowed_users.label': 'Pengguna yang Diizinkan', - 'channels.telegram.fields.allowed_users.placeholder': 'dipisahkan koma Telegram nama pengguna', - 'channels.web.displayName': 'Web', - 'channels.web.description': 'Mengobrol melalui UI web bawaan.', - 'channels.web.authMode.managed_dm.description': - 'Gunakan obrolan web tertanam — tidak perlu penyiapan.', - 'welcome.continueLocallyExperimental': 'Lanjutkan Secara Lokal (Eksperimental)', - 'channels.yuanbao.connect': 'Connect', - 'channels.yuanbao.connecting': 'Connecting…', - 'channels.yuanbao.fieldRequired': '{field} is required', - 'channels.yuanbao.reconnect': 'Reconnect', - 'channels.yuanbao.savedRestartRequired': 'Channel saved. Restart the app to activate it.', - 'channels.yuanbao.unexpectedStatus': 'Unexpected connection status: {status}', - 'chat.approval.approve': 'Approve', - 'chat.approval.alwaysAllow': 'Always allow', - 'chat.approval.alwaysAllowHint': 'Stop asking for this tool — add it to your Always-allow list', - 'chat.approval.deciding': 'Working…', - 'chat.approval.deny': 'Deny', - 'chat.approval.error': 'Could not record your decision — try again.', - 'chat.approval.fallback': 'The agent wants to run an action that needs your approval.', - 'chat.approval.title': 'Approval needed', - 'chat.approval.tool': 'Tool:', -}; - -export default id3; diff --git a/app/src/lib/i18n/chunks/id-4.ts b/app/src/lib/i18n/chunks/id-4.ts deleted file mode 100644 index dbcd21955..000000000 --- a/app/src/lib/i18n/chunks/id-4.ts +++ /dev/null @@ -1,490 +0,0 @@ -import type { TranslationMap } from '../types'; - -// Indonesian (Bahasa Indonesia) chunk 4/5. Translated from chunks/en-4.ts. -const id4: TranslationMap = { - 'chat.unsubscribeApproval.approve': 'Setujui & Berhenti Berlangganan', - 'chat.unsubscribeApproval.approved': '✓ Berhasil berhenti berlangganan.', - 'chat.unsubscribeApproval.denied': '✕ Permintaan ditolak.', - 'chat.unsubscribeApproval.deny': 'Tolak', - 'chat.unsubscribeApproval.processing': 'Memproses...', - 'chat.unsubscribeApproval.title': 'Permintaan Berhenti Berlangganan', - 'commandPalette.ariaLabel': 'Palet perintah', - 'commandPalette.description': 'Deskripsi', - 'commandPalette.label': 'Perintah', - 'commandPalette.noResults': 'Tidak ada hasil', - 'commandPalette.placeholder': 'Ketik perintah atau cari...', - 'commandPalette.searchAria': 'Cari perintah', - 'commandPalette.shortcutHint': 'Tekan ? untuk semua pintasan', - 'commandPalette.title': 'Palet perintah', - 'composio.connect.additionalConfigRequired': 'Konfigurasi tambahan diperlukan', - 'composio.connect.atlassianSubdomainHint': 'acme', - 'composio.connect.atlassianSubdomainLabel': 'Label subdomain Atlassian', - 'composio.connect.connect': 'Hubungkan', - 'composio.connect.connectionFailed': 'Koneksi gagal (status: {status}).', - 'composio.connect.disconnectFailed': 'Putus koneksi gagal: {msg}', - 'composio.connect.disconnecting': 'Memutus koneksi...', - 'composio.connect.idleDescription': 'Hubungkan', - 'composio.connect.idleDescriptionSuffix': - 'akun Anda. Kami akan membuka jendela browser, Anda menyetujui akses di sana, dan aplikasi ini akan mendeteksi koneksi secara otomatis.', - 'composio.connect.isConnected': 'terhubung.', - 'composio.connect.manage': 'Kelola', - 'composio.connect.needsSubdomain': 'Untuk menghubungkan', - 'composio.connect.needsSubdomainSuffix': - 'masukkan subdomain Atlassian Anda (mis. acme untuk acme.atlassian.net) lalu coba lagi.', - 'composio.connect.oauthComplete': 'OAuth untuk diselesaikan…', - 'composio.connect.oauthTimeout': 'Waktu OAuth habis', - 'composio.connect.permissions': 'Izin', - 'composio.connect.permissionsDefault': 'Baca + Tulis diaktifkan secara default', - 'composio.connect.permissionsNote': 'dapat mengekspos', - 'composio.connect.permissionsNoteSuffix': - 'Izin agen milik OpenHuman dikendalikan di bawah sebagai sakelar read, write, dan admin.', - 'composio.connect.reopenBrowser': 'Buka ulang browser', - 'composio.connect.requestingUrl': 'Meminta URL koneksi...', - 'composio.connect.retryConnection': 'Coba koneksi lagi', - 'composio.connect.scopeLoadError': 'Tidak dapat memuat preferensi scope: {msg}', - 'composio.connect.scopeSaveError': 'Tidak dapat menyimpan scope {key}: {msg}', - 'composio.connect.subdomainInvalid': - 'Masukkan hanya subdomain pendek (mis. "acme"), bukan URL lengkap. Hanya boleh berisi huruf, angka, dan tanda hubung.', - 'composio.connect.subdomainRequired': 'Masukkan subdomain Atlassian Anda untuk melanjutkan.', - 'composio.connect.dynamicsOrgNameLabel': 'Nama Organisasi Dynamics 365', - 'composio.connect.dynamicsOrgNameHint': - 'Misalnya, "myorg" untuk myorg.crm.dynamics.com. Masukkan nama organisasi pendek saja, bukan URL lengkap.', - 'composio.connect.needsFieldsPrefix': 'Untuk menghubungkan', - 'composio.connect.needsFieldsSuffix': - 'kami memerlukan informasi tambahan. Isi bidang yang hilang di bawah dan coba lagi.', - 'composio.connect.requiredFieldEmpty': 'Bidang ini wajib diisi.', - 'composio.connect.wabaIdHint': - 'Temukan melalui GET /me/businesses lalu GET /{business_id}/owned_whatsapp_business_accounts menggunakan token akses Meta Anda.', - 'composio.connect.wabaIdLabel': 'Label ID WABA', - 'composio.connect.wabaIdRequired': - 'Masukkan ID Akun Bisnis WhatsApp (WABA ID) Anda untuk melanjutkan.', - 'composio.connect.waitingFor': 'Menunggu', - 'composio.connect.waitingHint': 'Petunjuk menunggu', - 'composio.triggers.heading': 'Pemicu', - 'composio.triggers.listenFrom': 'Dengarkan event dari', - 'composio.triggers.loadError': 'Tidak bisa memuat trigger', - 'composio.triggers.needsConfiguration': 'Perlu konfigurasi', - 'composio.triggers.noneAvailable': 'Tidak ada trigger yang tersedia saat ini untuk', - 'conversations.taskKanban.moveLeft': 'Pindah ke kiri', - 'conversations.taskKanban.moveRight': 'Pindah ke kanan', - 'conversations.taskKanban.title': 'Tugas', - 'conversations.toolTimeline.turn': 'giliran', - 'conversations.toolTimeline.workerThread': 'thread worker', - 'daemon.serviceBlockingGate.body': 'Isi', - 'daemon.serviceBlockingGate.downloadHint': 'Petunjuk unduhan', - 'daemon.serviceBlockingGate.downloadLatest': 'Unduh Versi Terbaru', - 'daemon.serviceBlockingGate.retryCore': 'Coba Ulang Core', - 'daemon.serviceBlockingGate.retryFailed': - 'Coba ulang gagal. Unduh build aplikasi terbaru dan coba lagi.', - 'daemon.serviceBlockingGate.retrying': 'Mencoba ulang...', - 'daemon.serviceBlockingGate.title': 'Core OpenHuman tidak tersedia', - 'home.banners.discordSubtitle': 'Subtitle Discord', - 'home.banners.discordTitle': 'Bergabung ke Discord Kami', - 'home.banners.earlyBirdDismiss': 'Abaikan banner early bird', - 'home.banners.earlyBirdFirstSub': 'langganan pertama.', - 'home.banners.earlyBirdOn': 'Early bird aktif', - 'home.banners.earlyBirdTitle': '1.000 pengguna pertama dapat diskon 60%.', - 'home.banners.earlyBirdUseCode': 'Gunakan kode early bird', - 'home.banners.getSubscription': 'dapatkan langganan', - 'home.banners.promoCreditsBody': 'Isi kredit promo', - 'home.banners.promoCreditsTitle': '{amount}', - 'home.banners.promoCreditsUsage': 'Penggunaan kredit promo', - 'intelligence.memoryChunk.detail.chunk': 'Potongan', - 'intelligence.memoryChunk.detail.copyChunkId': 'Salin ID chunk', - 'intelligence.memoryChunk.detail.embeddingInfo': 'bge-m3 1024dim', - 'intelligence.memoryChunk.detail.noEmbedding': 'Tidak ada embedding', - 'intelligence.memoryChunk.letterhead.from': 'dari', - 'intelligence.memoryChunk.letterhead.to': 'ke', - 'intelligence.memoryChunk.mentioned.chunkOne': '1 potongan', - 'intelligence.memoryChunk.mentioned.chunkOther': '{count} chunk', - 'intelligence.memoryChunk.mentioned.heading': 'd i s e b u t k a n', - 'intelligence.memoryChunk.scoreBars.ariaScore': '{name} skor {pct} persen', - 'intelligence.memoryChunk.scoreBars.atThreshold': 'pada {threshold}', - 'intelligence.memoryChunk.scoreBars.dropped': 'dibuang', - 'intelligence.memoryChunk.scoreBars.heading': 'm e n g a p a d i s i m p a n', - 'intelligence.memoryChunk.scoreBars.kept': 'dipertahankan', - 'intelligence.diagram.title': 'Architecture Diagram', - 'intelligence.diagram.description': - 'Latest local architecture output from the configured diagram endpoint.', - 'intelligence.diagram.refresh': 'Refresh', - 'intelligence.diagram.refreshAria': 'Refresh diagram', - 'intelligence.diagram.emptyTitle': 'No diagram available yet', - 'intelligence.diagram.emptyDescription': - 'Generate an architecture diagram from the orchestrator and this panel will refresh from the configured local endpoint.', - 'intelligence.diagram.skillInstallCommand': 'npx skills add yizhiyanhua-ai/fireworks-tech-graph', - 'intelligence.diagram.promptExample': - 'Generate an architecture diagram of the current swarm in dark terminal style', - 'intelligence.diagram.imageAlt': 'Latest generated OpenHuman architecture diagram', - 'intelligence.diagram.refreshesEvery': 'Refreshes every {seconds}s', - 'intelligence.memoryText.entityTypePrefix': 'Tipe entitas', - 'intelligence.screenDebug.active': 'Aktif', - 'intelligence.screenDebug.app': 'Aplikasi', - 'intelligence.screenDebug.bounds': 'Batas', - 'intelligence.screenDebug.captureAlt': 'Hasil tes tangkapan', - 'intelligence.screenDebug.captureFailed': 'Gagal', - 'intelligence.screenDebug.captureSuccess': 'Berhasil', - 'intelligence.screenDebug.captureTest': 'Tes tangkapan', - 'intelligence.screenDebug.capturing': 'Menangkap', - 'intelligence.screenDebug.frames': 'Frame', - 'intelligence.screenDebug.idle': 'Siaga', - 'intelligence.screenDebug.lastApp': 'Aplikasi Terakhir', - 'intelligence.screenDebug.mode': 'Mode', - 'intelligence.screenDebug.permAccessibility': 'Izin aksesibilitas', - 'intelligence.screenDebug.permInput': 'Izin input', - 'intelligence.screenDebug.permScreen': 'Aksesibilitas', - 'intelligence.screenDebug.permissions': 'Izin', - 'intelligence.screenDebug.platformNotSupported': 'Platform tidak didukung', - 'intelligence.screenDebug.recentVisionSummaries': 'Ringkasan visi terbaru', - 'intelligence.screenDebug.session': 'Sesi', - 'intelligence.screenDebug.size': 'Ukuran', - 'intelligence.screenDebug.status': 'Status', - 'intelligence.screenDebug.testCapture': 'Tes tangkapan', - 'intelligence.screenDebug.time': 'Waktu', - 'intelligence.screenDebug.title': 'Judul', - 'intelligence.screenDebug.unknown': 'Tidak diketahui', - 'intelligence.screenDebug.visionQueue': 'Antrean Visi', - 'intelligence.screenDebug.visionState': 'Status Visi', - 'intelligence.tasks.activeBoardOne': '1 board aktif di seluruh percakapan', - 'intelligence.tasks.activeBoardOther': '{count} board aktif di seluruh percakapan', - 'intelligence.tasks.empty': 'Belum ada papan tugas agen', - 'intelligence.tasks.emptyHint': 'Petunjuk kosong', - 'intelligence.tasks.failedToLoad': 'Gagal memuat', - 'intelligence.tasks.live': 'langsung', - 'intelligence.tasks.loadingBoards': 'Memuat papan tugas...', - 'intelligence.tasks.threadPrefix': 'Utas {thread}', - 'intelligence.tasks.subtitle': 'Your tasks and agent task boards across the workspace.', - 'intelligence.tasks.newTask': 'New task', - 'intelligence.tasks.personalBoardTitle': 'Agent Tasks', - 'intelligence.tasks.personalEmpty': 'No personal tasks yet', - 'intelligence.tasks.composer.title': 'New task', - 'intelligence.tasks.composer.titleLabel': 'Title', - 'intelligence.tasks.composer.titlePlaceholder': 'What needs to be done?', - 'intelligence.tasks.composer.statusLabel': 'Status', - 'intelligence.tasks.composer.attachLabel': 'Attach to conversation', - 'intelligence.tasks.composer.attachNone': 'Personal (no conversation)', - 'intelligence.tasks.composer.objectiveLabel': 'Objective', - 'intelligence.tasks.composer.objectivePlaceholder': 'Optional — the desired outcome', - 'intelligence.tasks.composer.notesLabel': 'Notes', - 'intelligence.tasks.composer.notesPlaceholder': 'Optional notes', - 'intelligence.tasks.composer.create': 'Create task', - 'intelligence.tasks.composer.creating': 'Creating…', - 'intelligence.tasks.composer.createFailed': "Couldn't create the task", - 'notifications.card.dismiss': 'Abaikan notifikasi', - 'notifications.card.importanceTitle': 'Tingkat penting: {pct}%', - 'notifications.center.empty': 'Belum ada notifikasi', - 'notifications.center.emptyHint': 'Petunjuk kosong', - 'notifications.center.filterAll': 'Filter semua', - 'notifications.center.markAllRead': 'Tandai semua sudah dibaca', - 'notifications.center.title': 'Notifikasi', - 'oauth.button.loopbackTimeout': - 'Masuk habis waktu — browser tidak menyelesaikan pengalihan OAuth. Silakan coba lagi.', - 'oauth.button.connecting': 'Menghubungkan...', - 'oauth.login.continueWith': 'Lanjutkan dengan', - 'onboarding.contextGathering.buildingDesc': 'Deskripsi pembangunan', - 'onboarding.contextGathering.buildingProfile': 'Membangun profil Anda...', - 'onboarding.contextGathering.continueToChat': 'Lanjutkan ke chat', - 'onboarding.contextGathering.errorDesc': - 'Kami tidak bisa membangun profil lengkap Anda sekarang, tapi tidak apa-apa — Anda bisa lanjut dan profil Anda akan terbentuk seiring waktu.', - 'onboarding.contextGathering.coreAlive': - 'Core dapat diakses — peluncuran pertama bisa memakan waktu satu menit.', - 'onboarding.contextGathering.coreAliveProbing': 'Memeriksa koneksi core…', - 'onboarding.contextGathering.coreUnreachable': - 'Core tidak merespons. Anda bisa melanjutkan dan coba lagi nanti.', - 'onboarding.contextGathering.stillWorkingDesc': - 'Peluncuran pertama bisa memakan waktu 30–60 detik sementara kami menyiapkan model dan alat lokal Anda. Anda bisa melanjutkan ke chat kapan saja — pembuatan profil tetap berjalan di latar belakang.', - 'onboarding.contextGathering.stillWorkingTitle': 'Masih membangun profil Anda…', - 'onboarding.contextGathering.title': 'Pengumpulan Konteks', - 'openhuman.team_list_teams': 'Daftar tim', - 'overlay.ariaAttention': 'Pesan perhatian', - 'overlay.ariaCompanion': 'Pendamping aktif', - 'overlay.ariaOrb': 'Overlay OpenHuman', - 'overlay.ariaVoiceActive': 'Input suara aktif', - 'overlay.companion.error': 'Kesalahan', - 'overlay.companion.listening': 'Mendengarkan…', - 'overlay.companion.pointing': 'Menunjuk…', - 'overlay.companion.speaking': 'Berbicara…', - 'overlay.companion.thinking': 'Berpikir…', - 'overlay.orbTitle': 'Seret untuk memindahkan · Klik dua kali untuk mereset posisi', - 'pages.settings.account.connections': 'Koneksi', - 'pages.settings.account.connectionsDesc': 'Deskripsi koneksi', - 'pages.settings.account.privacy': 'Privasi', - 'pages.settings.account.privacyDesc': 'Deskripsi privasi', - 'pages.settings.account.recoveryPhrase': 'Frasa pemulihan', - 'pages.settings.account.recoveryPhraseDesc': 'Deskripsi frasa pemulihan', - 'pages.settings.account.team': 'Tim', - 'pages.settings.account.teamDesc': 'Deskripsi tim', - 'pages.settings.accountSection.description': - 'Frasa pemulihan, tim, koneksi, dan pengaturan privasi.', - 'pages.settings.accountSection.title': 'Akun', - 'pages.settings.ai.llm': 'LLM', - 'pages.settings.ai.llmDesc': 'Deskripsi LLM', - 'pages.settings.ai.voice': 'Suara', - 'pages.settings.ai.voiceDesc': 'Deskripsi suara', - 'pages.settings.ai.embeddings': 'Penyematan', - 'pages.settings.ai.embeddingsDesc': 'Model encoding vektor untuk pengambilan memori', - 'pages.settings.aiSection.description': - 'Penyedia model bahasa, Ollama lokal, dan suara (STT / TTS).', - 'pages.settings.aiSection.title': 'AI', - 'pages.settings.features.desktopCompanion': 'Pendamping Desktop', - 'pages.settings.features.desktopCompanionDesc': - 'Asisten suara dengan kesadaran layar — mendengar, melihat, berbicara, menunjuk', - 'pages.settings.features.messagingChannels': 'Kanal pesan', - 'pages.settings.features.messagingChannelsDesc': 'Deskripsi kanal pesan', - 'pages.settings.features.notifications': 'Notifikasi', - 'pages.settings.features.notificationsDesc': 'Deskripsi notifikasi', - 'pages.settings.features.screenAwareness': 'Kesadaran layar', - 'pages.settings.features.screenAwarenessDesc': 'Deskripsi kesadaran layar', - 'pages.settings.features.tools': 'Alat', - 'pages.settings.features.toolsDesc': 'Deskripsi alat', - 'pages.settings.featuresSection.description': 'Kesadaran layar, pesan, dan alat.', - 'pages.settings.featuresSection.title': 'Fitur', - 'privacy.dataKind.credentials': 'Kredensial', - 'privacy.dataKind.derived': 'Turunan', - 'privacy.dataKind.diagnostics': 'Diagnostik', - 'privacy.dataKind.metadata': 'Metadata', - 'privacy.dataKind.raw': 'Mentah', - 'privacy.whatLeaves.link.label': 'Apa yang keluar dari komputer saya?', - 'rewards.community.achievementsUnlocked': '{unlocked} dari {total} pencapaian terbuka', - 'rewards.community.connectDiscord': 'Hubungkan Discord', - 'rewards.community.cumulativeTokens': 'Token kumulatif', - 'rewards.community.currentStreak': 'Streak saat ini', - 'rewards.community.discordLinkedNotInGuild': 'Discord terhubung tidak ada di guild', - 'rewards.community.discordMember': 'Bergabung ke server', - 'rewards.community.discordNotLinked': 'Discord belum terhubung', - 'rewards.community.discordServer': 'Server Discord', - 'rewards.community.discordStatusUnavailable': 'Status Discord tidak tersedia', - 'rewards.community.discordWaiting': 'Menunggu Discord', - 'rewards.community.heroSubtitle': 'Subtitle hero', - 'rewards.community.heroTitle': 'Judul hero', - 'rewards.community.joinDiscord': 'Gabung Discord', - 'rewards.community.loadingRewards': 'Memuat hadiah...', - 'rewards.community.locked': 'Terbuka', - 'rewards.community.retrying': 'Mencoba ulang...', - 'rewards.community.rolesAndRewards': 'Peran & Hadiah', - 'rewards.community.streakDays': '{n}', - 'rewards.community.syncPending': 'Sinkronisasi hadiah tertunda', - 'rewards.community.syncPendingDesc': 'Deskripsi tertunda sinkronisasi', - 'rewards.community.syncUnavailable': 'Sinkronisasi tidak tersedia', - 'rewards.community.tryAgain': 'Mencoba ulang...', - 'rewards.community.unknown': 'Tidak diketahui', - 'rewards.community.unlocked': 'Terbuka', - 'rewards.community.yourProgress': 'Progres Anda', - 'rewards.coupon.colCode': 'Kode', - 'rewards.coupon.colRedeemed': 'Ditukarkan', - 'rewards.coupon.colReward': 'Hadiah', - 'rewards.coupon.colStatus': 'Status', - 'rewards.coupon.loadingHistory': 'Memuat riwayat hadiah...', - 'rewards.coupon.noCodes': 'Belum ada kode hadiah yang ditukarkan.', - 'rewards.coupon.pending': 'Tertunda', - 'rewards.coupon.placeholder': 'Kode kupon', - 'rewards.coupon.promoCredits': 'Kredit promo', - 'rewards.coupon.recentRedemptions': 'Penukaran terbaru', - 'rewards.coupon.redeemAccepted': - '{code} diterima. {amount} akan terbuka setelah tindakan yang diperlukan diselesaikan.', - 'rewards.coupon.redeemButton': 'Tukarkan Kode', - 'rewards.coupon.redeemSuccess': '{code} ditukarkan. {amount} telah ditambahkan ke kredit Anda.', - 'rewards.coupon.redeemedCodes': 'Kode yang ditukarkan', - 'rewards.coupon.redeeming': 'Menukarkan...', - 'rewards.coupon.statusApplied': 'Diterapkan', - 'rewards.coupon.statusPendingAction': 'Menunggu tindakan', - 'rewards.coupon.statusRedeemed': 'Ditukarkan', - 'rewards.coupon.subtitle': 'Subjudul', - 'rewards.coupon.title': 'Tukarkan kode kupon', - 'rewards.referralSection.activity': 'Aktivitas referral', - 'rewards.referralSection.apply': 'Menerapkan...', - 'rewards.referralSection.applying': 'Menerapkan...', - 'rewards.referralSection.colReferredUser': 'Pengguna yang direferensikan', - 'rewards.referralSection.colReward': 'Hadiah', - 'rewards.referralSection.colStatus': 'Status', - 'rewards.referralSection.colUpdated': 'Diperbarui', - 'rewards.referralSection.completed': 'Selesai', - 'rewards.referralSection.copyCode': 'Salin kode', - 'rewards.referralSection.copyFailed': 'Salin gagal', - 'rewards.referralSection.haveCode': 'Punya kode referral?', - 'rewards.referralSection.haveCodeDesc': 'Deskripsi punya kode', - 'rewards.referralSection.linked': 'Terhubung', - 'rewards.referralSection.linkedCode': '(kode {code})', - 'rewards.referralSection.loading': 'Memuat program referral...', - 'rewards.referralSection.noReferrals': 'Tidak ada referral', - 'rewards.referralSection.pendingReferrals': 'Referral tertunda', - 'rewards.referralSection.placeholder': 'Kode referral', - 'rewards.referralSection.share': 'Bagikan', - 'rewards.referralSection.statusCompleted': 'Status selesai', - 'rewards.referralSection.statusExpired': 'Status kedaluwarsa', - 'rewards.referralSection.statusJoined': 'Status bergabung', - 'rewards.referralSection.subtitle': 'Subjudul', - 'rewards.referralSection.title': 'Undang teman, dapatkan kredit', - 'rewards.referralSection.totalEarned': 'Total diperoleh', - 'rewards.referralSection.yourCode': 'Kode Anda', - 'settings.ai.addCloudProvider': 'Tambah penyedia cloud', - 'settings.ai.addProvider': 'Menyimpan...', - 'settings.ai.apiKeyFieldLabel': 'Label kolom API key', - 'settings.ai.apiKeyRequired': 'Tempelkan API key Anda untuk melanjutkan.', - 'settings.ai.apiKeyStoredEncrypted': 'API key disimpan terenkripsi', - 'settings.ai.apiKeysEncrypted': 'auth-profiles.json', - 'settings.ai.clearStoredKey': 'Hapus key tersimpan', - 'settings.ai.connectProvider': 'Hubungkan penyedia', - 'settings.ai.customRouting': 'Routing kustom', - 'settings.ai.defaultResolvesTo': 'Default diarahkan ke', - 'settings.ai.discard': 'Buang', - 'settings.ai.editProvider': 'Edit penyedia', - 'settings.ai.llmProviders': 'Penyedia LLM', - 'settings.ai.llmProvidersDesc': 'Deskripsi penyedia LLM', - 'settings.ai.localOllama': 'Lokal (Ollama)', - 'settings.ai.modelLabel': 'Model', - 'settings.ai.noCustomProviders': 'Tidak ada penyedia kustom', - 'settings.ai.openAiCompat.authHeaderExample': 'Otorisasi: Pembawa ', - 'settings.ai.openAiCompat.authHeaderLabel': 'Header autentikasi', - 'settings.ai.openAiCompat.baseUrlLabel': 'Basis URL', - 'settings.ai.openAiCompat.baseUrlUnavailable': 'Tidak tersedia', - 'settings.ai.openAiCompat.clearKey': 'Hapus kunci', - 'settings.ai.openAiCompat.description': - "Point local harnesses at this /v1 server to route through the providers configured below. Authentication uses a stable key you set here, not the app's internal core bearer.", - 'settings.ai.openAiCompat.keyConfigured': 'Kunci dikonfigurasi', - 'settings.ai.openAiCompat.keyRequired': 'Kunci diperlukan', - 'settings.ai.openAiCompat.rotateKey': 'Tombol putar', - 'settings.ai.openAiCompat.setKey': 'Setel kunci', - 'settings.ai.openAiCompat.title': 'Titik akhir yang kompatibel dengan OpenAI', - 'settings.ai.providerLabel': 'Penyedia', - 'settings.ai.routing': 'Perutean', - 'settings.ai.routingCustom': 'Routing kustom', - 'settings.ai.routingDefault': 'Bawaan', - 'settings.ai.routingDesc': 'Deskripsi routing', - 'settings.ai.saveChanges': 'Menyimpan...', - 'settings.ai.saving': 'Menyimpan...', - 'settings.ai.unsavedChange': 'perubahan belum disimpan', - 'settings.ai.unsavedChanges': 'perubahan belum disimpan', - 'settings.ai.workloadGroupBackground': 'Grup beban kerja latar', - 'settings.ai.workloadGroupChat': 'Grup beban kerja chat', - 'settings.autocomplete.appFilter.acceptSuggestion': 'Terima saran', - 'settings.autocomplete.appFilter.contextOverride': 'Penggantian Konteks (opsional)', - 'settings.autocomplete.appFilter.debugFocus': 'Debug fokus', - 'settings.autocomplete.appFilter.getSuggestion': 'Dapatkan saran', - 'settings.autocomplete.appFilter.liveLogs': 'Log Langsung', - 'settings.autocomplete.appFilter.noLogs': ') :', - 'settings.autocomplete.appFilter.refreshStatus': 'Menyegarkan...', - 'settings.autocomplete.appFilter.refreshing': 'Menyegarkan...', - 'settings.autocomplete.appFilter.runtime': 'Waktu proses', - 'settings.autocomplete.appFilter.test': 'Tes', - 'settings.autocomplete.completionStyle.acceptedCompletion': - '{count} pelengkapan diterima tersimpan — digunakan untuk mempersonalisasi saran berikutnya.', - 'settings.autocomplete.completionStyle.acceptedCompletions': - '{count} pelengkapan diterima tersimpan — digunakan untuk mempersonalisasi saran berikutnya.', - 'settings.autocomplete.completionStyle.clearHistory': 'Membersihkan...', - 'settings.autocomplete.completionStyle.clearing': 'Membersihkan...', - 'settings.autocomplete.completionStyle.debounce': 'Tunda input (ms)', - 'settings.autocomplete.completionStyle.enabled': 'Diaktifkan', - 'settings.autocomplete.completionStyle.maxChars': 'Maks Karakter', - 'settings.autocomplete.completionStyle.noHistory': - 'Belum ada pelengkapan yang diterima. Terima saran dengan Tab untuk mulai mempersonalisasi.', - 'settings.autocomplete.completionStyle.overlayTtl': 'TTL Overlay (ms)', - 'settings.autocomplete.completionStyle.personalizationHistory': 'Riwayat Personalisasi', - 'settings.autocomplete.completionStyle.styleExamples': 'Contoh Gaya (satu per baris)', - 'settings.autocomplete.completionStyle.styleInstructions': 'Instruksi Gaya', - 'settings.billing.autoRecharge.addAmount': 'Tambahkan jumlah ini', - 'settings.billing.autoRecharge.addCard': 'Tambah kartu', - 'settings.billing.autoRecharge.amountHint': 'Petunjuk jumlah', - 'settings.billing.autoRecharge.defaultCard': 'Kartu default', - 'settings.billing.autoRecharge.lastRechargeFailed': 'Isi ulang terakhir gagal', - 'settings.billing.autoRecharge.lastRecharged': 'Terakhir diisi ulang', - 'settings.billing.autoRecharge.noCards': 'Tidak ada kartu', - 'settings.billing.autoRecharge.paymentMethods': 'Metode Pembayaran', - 'settings.billing.autoRecharge.rechargeInProgress': 'Isi ulang sedang berlangsung', - 'settings.billing.autoRecharge.rechargeWhen': 'Isi ulang saat saldo turun di bawah', - 'settings.billing.autoRecharge.saveSettings': 'Menyimpan...', - 'settings.billing.autoRecharge.saving': 'Menyimpan...', - 'settings.billing.autoRecharge.setDefault': ':', - 'settings.billing.autoRecharge.subtitle': 'Subjudul', - 'settings.billing.autoRecharge.title': 'Aktifkan Isi Ulang Otomatis', - 'settings.billing.autoRecharge.toggleAriaLabel': 'Alihkan isi ulang otomatis', - 'settings.billing.autoRecharge.weeklyLimit': 'Batas pengeluaran mingguan', - 'settings.billing.history.desc': 'Deskripsi', - 'settings.billing.history.empty': 'Kosong', - 'settings.billing.history.openPortal': 'Buka portal', - 'settings.billing.history.posted': 'Diposting', - 'settings.billing.history.title': 'Judul', - 'settings.billing.inferenceBudget.cycleEnds': 'Siklus berakhir', - 'settings.billing.inferenceBudget.exhausted': 'Habis', - 'settings.billing.inferenceBudget.loadError': 'Error memuat', - 'settings.billing.inferenceBudget.noBudgetDesc': 'Deskripsi tidak ada budget', - 'settings.billing.inferenceBudget.noRecurringBudget': 'Tidak ada budget berulang', - 'settings.billing.inferenceBudget.remaining': 'Tersisa', - 'settings.billing.inferenceBudget.tenHourCap': 'Batas sepuluh jam', - 'settings.billing.inferenceBudget.title': 'Judul', - 'settings.billing.payAsYouGo.available': 'Tersedia', - 'settings.billing.payAsYouGo.chargeCustomAmount': 'Membuka...', - 'settings.billing.payAsYouGo.chooseTopUpDesc': 'Deskripsi pilih isi ulang', - 'settings.billing.payAsYouGo.chooseTopUpTitle': 'Judul pilih isi ulang', - 'settings.billing.payAsYouGo.creditBalanceDesc': 'Deskripsi saldo kredit', - 'settings.billing.payAsYouGo.creditBalanceTitle': 'Judul saldo kredit', - 'settings.billing.payAsYouGo.customAmount': 'Jumlah kustom', - 'settings.billing.payAsYouGo.enterAmount': 'Masukkan jumlah', - 'settings.billing.payAsYouGo.opening': 'Membuka', - 'settings.billing.payAsYouGo.promotionalCredits': 'Kredit Promosi', - 'settings.billing.payAsYouGo.topUpBalance': 'Isi Ulang Saldo', - 'settings.billing.payAsYouGo.topUpCredits': 'Isi Ulang Kredit', - 'settings.billing.payAsYouGo.unableToLoad': 'Tidak dapat memuat saldo.', - 'settings.billing.subscription.annual': 'Tahunan', - 'settings.billing.subscription.billedAnnually': 'Ditagih tahunan', - 'settings.billing.subscription.chooseSubtitle': 'Subtitle pilih', - 'settings.billing.subscription.chooseTitle': 'Judul pilih', - 'settings.billing.subscription.cryptoDesc': 'Deskripsi crypto', - 'settings.billing.subscription.cryptoQuestion': 'Pertanyaan crypto', - 'settings.billing.subscription.current': 'Saat ini', - 'settings.billing.subscription.currentPlan': 'Paket saat ini', - 'settings.billing.subscription.monthly': 'Bulanan', - 'settings.billing.subscription.paymentConfirmed': 'Pembayaran dikonfirmasi', - 'settings.billing.subscription.perMonth': 'Per bulan', - 'settings.billing.subscription.popular': 'Populer', - 'pages.settings.account.migration': 'Impor dari asisten lain', - 'pages.settings.account.migrationDesc': - 'Migrasikan memori dan catatan dari OpenClaw (dan, segera, Hermes) ke ruang kerja ini.', - 'composio.connect.scope.read': 'Baca', - 'composio.connect.scope.readHint': 'Izinkan agen membaca data dari koneksi ini.', - 'composio.connect.scope.write': 'Tulis', - 'composio.connect.scope.writeHint': - 'Izinkan agen membuat atau mengubah data melalui koneksi ini.', - 'composio.connect.scope.admin': 'Admin', - 'composio.connect.scope.adminHint': - 'Mengizinkan agen mengelola pengaturan, izin, atau tindakan destruktif.', - 'pages.settings.composioSection.title': 'Composio', - 'pages.settings.composioSection.description': - 'Perutean, pemicu, dan riwayat untuk integrasi yang didukung oleh Composio.', - 'pages.settings.account.walletBalances': 'Wallet Balances', - 'pages.settings.account.walletBalancesDesc': 'View multi-chain balances for your local wallet', - 'walletBalances.title': 'Wallet Balances', - 'walletBalances.refresh': 'Refresh', - 'walletBalances.loading': 'Loading balances…', - 'walletBalances.retry': 'Retry', - 'walletBalances.emptyState': 'No wallet accounts yet — set up a wallet in Recovery Phrase.', - 'walletBalances.copyAddress': 'Copy address', - 'walletBalances.providerMissing': 'provider unavailable', - 'walletBalances.rawBalance': 'Raw: {raw}', - 'walletBalances.errorGeneric': - 'Unable to load wallet balances. Set up your wallet in Recovery Phrase and try again.', - 'conversations.taskKanban.approval.default': 'Default', - 'conversations.taskKanban.approval.notRequired': 'Not required', - 'conversations.taskKanban.approval.notRequiredBadge': 'no approval', - 'conversations.taskKanban.approval.required': 'Required', - 'conversations.taskKanban.approval.requiredBadge': 'approval', - 'conversations.taskKanban.approval.requiredBeforeExecution': 'Required before execution', - 'conversations.taskKanban.briefButton': 'Task brief', - 'conversations.taskKanban.briefTitle': 'Task brief', - 'conversations.taskKanban.closeBrief': 'Close task brief', - 'conversations.taskKanban.field.acceptanceCriteria': 'Acceptance criteria', - 'conversations.taskKanban.field.allowedTools': 'Allowed tools', - 'conversations.taskKanban.field.approval': 'Approval', - 'conversations.taskKanban.field.assignedAgent': 'Assigned agent', - 'conversations.taskKanban.field.blocker': 'Blocker', - 'conversations.taskKanban.field.evidence': 'Evidence', - 'conversations.taskKanban.field.notes': 'Notes', - 'conversations.taskKanban.field.objective': 'Objective', - 'conversations.taskKanban.field.plan': 'Plan', - 'conversations.taskKanban.field.status': 'Status', - 'conversations.taskKanban.field.title': 'Title', - 'conversations.taskKanban.saveChanges': 'Save changes', - 'conversations.taskKanban.deleteCard': 'Delete', - 'conversations.taskKanban.updateFailed': 'Could not update task; changes were not saved.', -}; - -export default id4; diff --git a/app/src/lib/i18n/chunks/id-5.ts b/app/src/lib/i18n/chunks/id-5.ts deleted file mode 100644 index 64c145f5b..000000000 --- a/app/src/lib/i18n/chunks/id-5.ts +++ /dev/null @@ -1,1019 +0,0 @@ -import type { TranslationMap } from '../types'; - -// Indonesian (Bahasa Indonesia) chunk 5/5. Translated from chunks/en-5.ts. -const id5: TranslationMap = { - 'settings.billing.subscription.save': '{pct}', - 'settings.billing.subscription.upgrade': 'Tingkatkan', - 'settings.billing.subscription.waiting': 'Menunggu', - 'settings.billing.subscription.waitingPayment': 'Menunggu pembayaran', - 'settings.composio.apiKeyDesc': 'API key Composio saat ini tersimpan di perangkat ini.', - 'settings.composio.apiKeyLabel': 'API key Composio', - 'settings.composio.apiKeyStored': 'API key tersimpan', - 'settings.composio.apiKeyStoredPlaceholder': '••••••••••••••••', - 'settings.composio.clearedToBackend': 'Beralih ke mode Backend', - 'settings.composio.confirmItem1': 'Akun di app.composio.dev dengan API key', - 'settings.composio.confirmItem2': - 'Menghubungkan ulang setiap integrasi melalui akun Composio pribadi Anda', - 'settings.composio.confirmItem3': - 'Catatan: trigger Composio (webhook real-time) belum berjalan di mode Direct — hanya pemanggilan tool sinkron', - 'settings.composio.confirmNeedItems': 'Anda akan butuh:', - 'settings.composio.confirmSwitch': 'Saya mengerti, beralih ke Direct', - 'settings.composio.confirmTitle': '⚠️ Beralih ke mode Direct', - 'settings.composio.confirmWarning': - 'Integrasi Anda yang sudah ada (Gmail, Slack, GitHub, dll. yang terhubung melalui OpenHuman) tidak akan terlihat — mereka berada di tenant Composio yang dikelola OpenHuman.', - 'settings.composio.intro': - 'Composio mengintegrasikan 250+ aplikasi eksternal sebagai tool yang dapat dipanggil agen Anda. Pilih cara pemanggilan tool tersebut dirutekan.', - 'settings.composio.modeDirect': 'Langsung (bawa API key Anda sendiri)', - 'settings.composio.modeDirectDesc': - 'Panggilan langsung ke backend.composio.dev. Berdaulat / ramah offline. Eksekusi tool berjalan sinkron; webhook trigger real-time belum dirutekan dalam mode direct (isu lanjutan).', - 'settings.composio.modeManaged': 'Terkelola (OpenHuman menanganinya untuk Anda)', - 'settings.composio.modeManagedDesc': - 'OpenHuman mem-proxy pemanggilan tool melalui backend kami (disarankan). Autentikasi dibrokerkan; Anda tidak perlu menempel API key Composio. Webhook dirutekan sepenuhnya.', - 'settings.composio.routingMode': 'Mode routing', - 'settings.composio.saveErrorNoKey': - 'Gagal menyimpan. Mode Direct memerlukan API key yang tidak kosong.', - 'settings.composio.saving': 'Menyimpan...', - 'settings.composio.switching': 'Mengalihkan…', - 'settings.cron.jobs.desc': 'Deskripsi', - 'settings.cron.jobs.empty': 'Tidak ada cron job core ditemukan.', - 'settings.cron.jobs.lastStatus': 'Status terakhir', - 'settings.cron.jobs.loading': 'Memuat cron job...', - 'settings.cron.jobs.loadingRuns': 'Memuat run', - 'settings.cron.jobs.nextRun': 'Jalan berikutnya', - 'settings.cron.jobs.pause': 'Jeda', - 'settings.cron.jobs.paused': 'Dijeda', - 'settings.cron.jobs.recentRuns': 'Jalan terbaru', - 'settings.cron.jobs.removing': 'Menghapus', - 'settings.cron.jobs.resume': 'Lanjutkan', - 'settings.cron.jobs.runningNow': 'Sedang berjalan', - 'settings.cron.jobs.saving': 'Menyimpan...', - 'settings.cron.jobs.schedule': 'Jadwal', - 'settings.cron.jobs.title': 'Cron Job Core', - 'settings.cron.jobs.viewRuns': 'Lihat run', - 'settings.localModel.deviceCapability.active': 'Aktif', - 'settings.localModel.deviceCapability.appliedTier': 'Tingkat yang diterapkan', - 'settings.localModel.deviceCapability.applying': 'Menerapkan', - 'settings.localModel.deviceCapability.cores': '{count}', - 'settings.localModel.deviceCapability.couldNotLoadPresets': 'Tidak dapat memuat preset', - 'settings.localModel.deviceCapability.cpu': 'CPU', - 'settings.localModel.deviceCapability.customModelIds': 'ID model kustom', - 'settings.localModel.deviceCapability.detected': 'Terdeteksi', - 'settings.localModel.deviceCapability.disabled': 'Dinonaktifkan', - 'settings.localModel.deviceCapability.disabledDesc': 'Deskripsi dinonaktifkan', - 'settings.localModel.deviceCapability.downloadingModels': '(mengunduh model)', - 'settings.localModel.deviceCapability.downloadingSetupDesc': - 'Mengunduh penginstal OllamaSetup (~2 GB) dan membongkarnya. Ini mungkin memerlukan beberapa waktu pada pemasangan pertama.', - 'settings.localModel.deviceCapability.failedToApplyPreset': 'Gagal menerapkan preset', - 'settings.localModel.deviceCapability.gpu': 'GPU', - 'settings.localModel.deviceCapability.installFailed': 'Instalasi Ollama gagal', - 'settings.localModel.deviceCapability.installFailedDesc': - 'Penginstal keluar sebelum Ollama dapat digunakan. Klik coba ulang, atau instal manual dari ollama.com.', - 'settings.localModel.deviceCapability.installFirst': 'Jalankan Ollama terlebih dahulu.', - 'settings.localModel.deviceCapability.installFirstDesc': - 'Tier lokal bergantung pada endpoint Ollama yang dikelola eksternal. Jalankan sendiri, tarik model yang Anda inginkan, dan tetap gunakan "Disabled (cloud fallback)" hingga runtime dapat dijangkau.', - 'settings.localModel.deviceCapability.installOllamaFirst': - 'Jalankan Ollama terlebih dahulu untuk menggunakan tier ini', - 'settings.localModel.deviceCapability.installingOllama': 'Menginstal Ollama', - 'settings.localModel.deviceCapability.loadingDeviceInfo': 'Memuat info perangkat', - 'settings.localModel.deviceCapability.localAiDisabled': - 'AI lokal dinonaktifkan — menggunakan fallback cloud.', - 'settings.localModel.deviceCapability.modelTier': 'Tingkat Model', - 'settings.localModel.deviceCapability.needsOllama': 'Memerlukan Ollama', - 'settings.localModel.deviceCapability.notDetected': 'Tidak terdeteksi', - 'settings.localModel.deviceCapability.ram': 'RAM', - 'settings.localModel.deviceCapability.recommended': 'Direkomendasikan', - 'settings.localModel.deviceCapability.retryInstall': 'Mencoba ulang...', - 'settings.localModel.deviceCapability.retrying': 'Mencoba ulang...', - 'settings.localModel.deviceCapability.starting': 'Memulai...', - 'settings.localModel.download.audioPathPlaceholder': 'Path absolut ke file audio', - 'settings.localModel.download.capabilityAssets': 'Aset Kemampuan', - 'settings.localModel.download.downloading': 'Mengunduh...', - 'settings.localModel.download.embeddingPlaceholder': 'Satu string input per baris...', - 'settings.localModel.download.noThinkMode': 'Mode tanpa berpikir', - 'settings.localModel.download.promptPlaceholder': - 'Ketik prompt apa saja dan jalankan terhadap model lokal...', - 'settings.localModel.download.quantizationPref': 'Preferensi kuantisasi', - 'settings.localModel.download.runEmbeddingTest': 'Menjalankan...', - 'settings.localModel.download.runPromptTest': 'Jalankan Uji Prompt', - 'settings.localModel.download.runSummaryTest': 'Jalankan Uji Ringkasan', - 'settings.localModel.download.runTranscriptionTest': 'Menjalankan...', - 'settings.localModel.download.runTtsTest': 'Menjalankan...', - 'settings.localModel.download.runVisionTest': 'Menjalankan...', - 'settings.localModel.download.running': 'Menjalankan...', - 'settings.localModel.download.runningPrompt': 'Menjalankan prompt', - 'settings.localModel.download.summarizePlaceholder': - 'Tempel teks untuk diringkas dengan model lokal...', - 'settings.localModel.download.testCustomPrompt': 'Tes Prompt Kustom', - 'settings.localModel.download.testEmbeddings': 'Tes Embedding', - 'settings.localModel.download.testSummarization': 'Tes Ringkasan', - 'settings.localModel.download.testVisionPrompt': 'Tes Prompt Visi', - 'settings.localModel.download.testVoiceInput': 'Tes Input Suara (STT)', - 'settings.localModel.download.testVoiceOutput': 'Tes Output Suara (TTS)', - 'settings.localModel.download.ttsOutputPlaceholder': 'Path WAV output opsional', - 'settings.localModel.download.ttsPlaceholder': 'Masukkan teks untuk disintesis...', - 'settings.localModel.download.visionImagePlaceholder': - 'Satu referensi gambar per baris (data URI, URL, atau penanda path lokal)', - 'settings.localModel.download.visionPromptPlaceholder': 'Masukkan prompt untuk model visi...', - 'settings.localModel.status.allChecksPassed': 'Semua pemeriksaan berhasil', - 'settings.localModel.status.artifact': 'Artefak', - 'settings.localModel.status.backend': 'Bagian Belakang', - 'settings.localModel.status.binary': 'Biner', - 'settings.localModel.status.bootstrapResume': 'Bootstrap / Lanjutkan', - 'settings.localModel.status.checking': 'Memeriksa...', - 'settings.localModel.status.checkingOllama': 'Memeriksa Ollama', - 'settings.localModel.status.customLocation': 'Lokasi kustom', - 'settings.localModel.status.customLocationDesc': 'Deskripsi lokasi kustom', - 'settings.localModel.status.diagnosticsHint': - 'Klik "Run Diagnostics" untuk memverifikasi Ollama berjalan dan model telah terinstal.', - 'settings.localModel.status.downloadingUnknown': 'Mengunduh (ukuran tidak diketahui)', - 'settings.localModel.status.eta': 'ETA', - 'settings.localModel.status.expectedModels': 'Model yang diharapkan', - 'settings.localModel.status.forceRebootstrap': 'Paksa Re-bootstrap', - 'settings.localModel.status.generationTps': 'TPS Generasi', - 'settings.localModel.status.hideErrorDetails': 'Sembunyikan detail error', - 'settings.localModel.status.installManually': 'Instal manual', - 'settings.localModel.status.installManuallyFrom': 'Instal manual dari', - 'settings.localModel.status.installOllama': 'Memulai...', - 'settings.localModel.status.installedModels': 'Model terinstal', - 'settings.localModel.status.installing': 'Menginstal...', - 'settings.localModel.status.installingOllama': 'Menginstal runtime Ollama...', - 'settings.localModel.status.issues': 'Masalah', - 'settings.localModel.status.issuesFound': '{count} masalah ditemukan', - 'settings.localModel.status.lastLatency': 'Latensi Terakhir', - 'settings.localModel.status.model': 'Model', - 'settings.localModel.status.notFound': 'Tidak ditemukan', - 'settings.localModel.status.notRunning': 'Tidak berjalan', - 'settings.localModel.status.ollamaBinaryPath': 'Path biner Ollama', - 'settings.localModel.status.ollamaDiagnostics': 'Diagnostik Ollama', - 'settings.localModel.status.ollamaNotInstalled': 'Runtime Ollama tidak tersedia', - 'settings.localModel.status.ollamaNotInstalledDesc': - 'OpenHuman kini memperlakukan Ollama sebagai runtime inferensi eksternal. Jalankan server Ollama Anda sendiri, tarik model yang diinginkan, lalu arahkan routing workload ke sana.', - 'settings.localModel.status.progress': 'Progres', - 'settings.localModel.status.provider': 'Penyedia', - 'settings.localModel.status.retryBootstrap': 'Coba Ulang Bootstrap', - 'settings.localModel.status.runDiagnostics': 'Memeriksa...', - 'settings.localModel.status.running': 'Berjalan', - 'settings.localModel.status.runningExternalProcess': 'Berjalan via proses eksternal', - 'settings.localModel.status.runtimeStatus': 'Status Runtime', - 'settings.localModel.status.server': 'Server', - 'settings.localModel.status.setPath': 'Mengatur...', - 'settings.localModel.status.setting': 'Mengatur...', - 'settings.localModel.status.showErrorDetails': 'Sembunyikan detail error', - 'settings.localModel.status.showInstallErrorDetails': 'Sembunyikan detail error', - 'settings.localModel.status.suggestedFixes': 'Perbaikan yang disarankan', - 'settings.localModel.status.thenSetPath': 'Lalu atur path', - 'settings.localModel.status.triggering': 'Memicu...', - 'settings.localModel.status.unavailable': 'Tidak tersedia', - 'settings.localModel.status.working': 'Memproses...', - 'settings.developerMenu.ai.title': 'Konfigurasi AI', - 'settings.developerMenu.ai.desc': - 'Penyedia cloud, model Ollama lokal, dan routing per beban kerja', - 'settings.developerMenu.screenAwareness.title': 'Kesadaran Layar', - 'settings.developerMenu.screenAwareness.desc': - 'Izin tangkapan layar, kebijakan pemantauan, dan kontrol sesi', - 'settings.developerMenu.messagingChannels.title': 'Kanal Pesan', - 'settings.developerMenu.messagingChannels.desc': - 'Atur mode autentikasi Telegram/Discord dan routing kanal default', - 'settings.developerMenu.tools.title': 'Alat', - 'settings.developerMenu.tools.desc': - 'Aktifkan atau nonaktifkan kemampuan yang bisa digunakan OpenHuman atas nama Anda', - 'settings.developerMenu.agentChat.title': 'Chat Agen', - 'settings.developerMenu.agentChat.desc': - 'Uji percakapan agen dengan override model dan temperatur', - 'settings.developerMenu.devWorkflow.title': 'Dev Workflow', - 'settings.developerMenu.devWorkflow.desc': - 'Autonomous agent that picks your GitHub issues and raises PRs on a schedule', - 'settings.developerMenu.devWorkflow.panelDesc': - 'Configure an autonomous developer agent that picks GitHub issues assigned to you and raises pull requests automatically on a schedule.', - 'settings.devWorkflow.githubRepository': 'GitHub Repository', - 'settings.devWorkflow.loadingRepositories': 'Loading repositories...', - 'settings.devWorkflow.selectRepository': 'Select a repository', - 'settings.devWorkflow.privateTag': '(private)', - 'settings.devWorkflow.detectingForkInfo': 'Detecting fork info...', - 'settings.devWorkflow.forkDetected': 'Fork detected', - 'settings.devWorkflow.upstream': 'Upstream:', - 'settings.devWorkflow.forkPrNote': 'PRs will be raised against the upstream repository.', - 'settings.devWorkflow.notForkNote': - 'Not a fork. PRs will be raised against this repository directly.', - 'settings.devWorkflow.targetBranch': 'Target Branch', - 'settings.devWorkflow.targetBranchNote': 'PRs will be raised against this branch', - 'settings.devWorkflow.loadingBranches': 'Loading branches...', - 'settings.devWorkflow.runFrequency': 'Run Frequency', - 'settings.devWorkflow.runFrequencyNote': - 'How often the agent should check for issues and raise PRs.', - 'settings.devWorkflow.updateConfiguration': 'Update Configuration', - 'settings.devWorkflow.saveConfiguration': 'Save Configuration', - 'settings.devWorkflow.remove': 'Remove', - 'settings.devWorkflow.saved': 'Saved', - 'settings.devWorkflow.activeConfiguration': 'Active Configuration', - 'settings.devWorkflow.activeConfigRepository': 'Repository:', - 'settings.devWorkflow.activeConfigUpstream': 'Upstream:', - 'settings.devWorkflow.activeConfigTargetBranch': 'Target branch:', - 'settings.devWorkflow.activeConfigSchedule': 'Schedule:', - 'settings.devWorkflow.enabled': 'Enabled', - 'settings.devWorkflow.paused': 'Paused', - 'settings.skillsRunner.scheduleEnabled': 'Enabled', - 'settings.skillsRunner.scheduleDisabled': 'Paused', - 'settings.skillsRunner.scheduleToggleAria': 'Toggle schedule enabled', - 'settings.skillsRunner.schedule.history': 'History', - 'settings.skillsRunner.schedule.historyLoading': 'Loading history\u2026', - 'settings.skillsRunner.schedule.historyEmpty': 'No runs yet for this schedule.', - 'settings.skillsRunner.schedule.historyNoOutput': 'No output captured.', - 'settings.skillsRunner.schedule.active': 'Active', - 'settings.skillsRunner.schedule.lastRunLabel': 'last:', - 'settings.devWorkflow.nextRun': 'Next run', - 'settings.devWorkflow.lastRun': 'Last run', - 'settings.devWorkflow.runNow': 'Run now', - 'settings.devWorkflow.running': 'Running…', - 'settings.devWorkflow.recentRuns': 'Recent runs', - 'settings.devWorkflow.cronSaveError': 'Failed to save configuration', - 'settings.devWorkflow.lastOutput': 'Last output', - 'settings.devWorkflow.noOutput': 'No output captured', - 'settings.devWorkflow.runningStatus': - 'Agent is running — picking an issue and working on a fix...', - 'settings.devWorkflow.errorNotConnected': - 'GitHub is not connected. Please connect GitHub via Settings > Advanced > Composio first.', - 'settings.devWorkflow.errorToolNotEnabled': - 'GITHUB_LIST_REPOSITORIES_FOR_THE_AUTHENTICATED_USER tool is not enabled on this backend. Please ask your admin to enable it in the Composio integration (backend#842).', - 'settings.devWorkflow.errorNotAuthenticated': 'Not authenticated. Please sign in first.', - 'settings.devWorkflow.errorNoRepositories': 'No repositories found for this GitHub account.', - 'settings.devWorkflow.schedule.every30min': 'Every 30 minutes', - 'settings.devWorkflow.schedule.everyHour': 'Every hour', - 'settings.devWorkflow.schedule.every2hours': 'Every 2 hours', - 'settings.devWorkflow.schedule.every6hours': 'Every 6 hours', - 'settings.devWorkflow.schedule.onceDaily': 'Once daily (9 AM)', - 'settings.developerMenu.cronJobs.title': 'Pekerjaan Cron', - 'settings.developerMenu.cronJobs.desc': 'Lihat dan atur pekerjaan terjadwal untuk skill runtime', - 'settings.developerMenu.localModelDebug.title': 'Debug Model Lokal', - 'settings.developerMenu.localModelDebug.desc': - 'Konfigurasi Ollama, unduhan aset, pengujian model, dan diagnostik', - 'settings.developerMenu.webhooks.title': 'Webhook', - 'settings.developerMenu.webhooks.desc': - 'Periksa pendaftaran webhook runtime dan log permintaan yang tertangkap', - 'settings.developerMenu.eventLog.title': 'Event Log', - 'settings.developerMenu.eventLog.desc': - 'Live colour-coded stream of all agent, tool, and system events', - 'settings.developerMenu.eventLog.allTypes': 'All types', - 'settings.developerMenu.eventLog.filterAgent': 'Filter...', - 'settings.developerMenu.eventLog.download': 'Download', - 'settings.developerMenu.eventLog.events': 'events', - 'settings.developerMenu.eventLog.live': 'Live', - 'settings.developerMenu.eventLog.disconnected': 'Disconnected', - 'settings.developerMenu.eventLog.waiting': 'Waiting for events...', - 'settings.developerMenu.eventLog.notConnected': 'Not connected to core', - 'settings.developerMenu.eventLog.jumpToLatest': 'Jump to latest', - 'settings.developerMenu.eventLog.badge.tool': 'TOOL', - 'settings.developerMenu.eventLog.badge.agent': 'AGENT', - 'settings.developerMenu.eventLog.badge.info': 'INFO', - 'settings.developerMenu.eventLog.badge.mem': 'MEM', - 'settings.developerMenu.eventLog.badge.chan': 'CHAN', - 'settings.developerMenu.eventLog.badge.cron': 'CRON', - 'settings.developerMenu.eventLog.badge.hook': 'HOOK', - 'settings.developerMenu.eventLog.badge.warn': 'WARN', - 'settings.developerMenu.eventLog.badge.skill': 'SKILL', - 'settings.developerMenu.eventLog.badge.comp': 'COMP', - 'settings.developerMenu.eventLog.badge.mcp': 'MCP', - 'settings.developerMenu.intelligence.title': 'Kecerdasan', - 'settings.developerMenu.intelligence.desc': - 'Ruang kerja memori, mesin bawah sadar, mimpi, dan pengaturan', - 'settings.developerMenu.notificationRouting.title': 'Routing Notifikasi', - 'settings.developerMenu.notificationRouting.desc': - 'Penilaian kepentingan AI dan eskalasi orkestrator untuk peringatan integrasi', - 'settings.developerMenu.composeioTriggers.title': 'Pemicu ComposeIO', - 'settings.developerMenu.composeioTriggers.desc': 'Lihat riwayat pemicu ComposeIO dan arsip', - 'settings.developerMenu.composioRouting.title': 'Routing Composio (Mode Langsung)', - 'settings.developerMenu.composioRouting.desc': - 'Gunakan kunci API Composio Anda sendiri dan rutekan panggilan langsung ke backend.composio.dev', - 'settings.developerMenu.integrationTriggers.title': 'Pemicu Integrasi', - 'settings.developerMenu.integrationTriggers.desc': - 'Atur pengaturan triase AI untuk pemicu integrasi Composio', - 'settings.appearance.menuDesc': 'Pilih terang, gelap, atau ikuti tema sistem', - 'settings.mascot.active': 'Aktif', - 'settings.mascot.characterDesc': 'Deskripsi karakter', - 'settings.mascot.characterHeading': 'Judul karakter', - // TODO: translate custom GIF mascot strings. - 'settings.mascot.customGifError': - 'Masukkan HTTPS .gif URL, loopback HTTP .gif URL, file:// .gif URL, atau jalur .gif lokal.', - 'settings.mascot.customGifHeading': 'Avatar GIF khusus', - 'settings.mascot.customGifLabel': 'Avatar GIF khusus URL', - 'settings.mascot.colorDesc': 'Deskripsi warna', - 'settings.mascot.colorHeading': 'Judul warna', - 'settings.mascot.loadingLibrary': 'Memuat perpustakaan OpenHuman...', - 'settings.mascot.localDefault': 'OpenHuman Lokal (default)', - 'settings.mascot.menuTitle': 'Maskot', - 'settings.mascot.menuDesc': 'Pilih warna maskot yang digunakan di seluruh aplikasi', - 'settings.mascot.noCharacters': 'Belum ada karakter OpenHuman yang tersedia', - 'settings.mascot.noColorVariants': 'Tidak ada varian warna', - 'settings.mascot.voice.current': 'saat ini', - 'settings.mascot.voice.customDesc': - 'Temukan ID suara di api.elevenlabs.io/v1/voices atau dasbor ElevenLabs Anda. Hanya ID yang disimpan — kunci API Anda tetap di backend.', - 'settings.mascot.voice.customHeading': 'ID suara kustom', - 'settings.mascot.voice.customOption': 'Lainnya (tempel ID suara)…', - 'settings.mascot.voice.desc': - 'Pilih suara ElevenLabs yang digunakan maskot untuk balasan lisan. Filter berdasarkan jenis kelamin, pilih dari daftar pilihan, tempel ID kustom, atau biarkan aplikasi memilih suara yang sesuai dengan bahasa antarmuka.', - 'settings.mascot.voice.genderFemale': 'Wanita', - 'settings.mascot.voice.genderHeading': 'Jenis kelamin suara', - 'settings.mascot.voice.genderMale': 'Pria', - 'settings.mascot.voice.heading': 'Suara', - 'settings.mascot.voice.preset': 'Pratinjau suara', - 'settings.mascot.voice.presetHeading': 'Pratinjau suara', - 'settings.mascot.voice.preview': 'Pratinjau suara', - 'settings.mascot.voice.previewError': 'Pratinjau suara gagal', - 'settings.mascot.voice.previewing': 'Memuat pratinjau…', - 'settings.mascot.voice.reset': 'Atur ulang ke default', - 'settings.mascot.voice.useLocaleDefault': 'Cocokkan bahasa aplikasi', - 'settings.mascot.voice.useLocaleDefaultDesc': - 'Pilih otomatis suara untuk bahasa antarmuka saat ini.', - 'settings.memoryWindow.balanced.badge': 'Direkomendasikan', - 'settings.memoryWindow.balanced.hint': - 'Default yang masuk akal — kontinuitas yang baik tanpa membakar token tambahan di setiap run.', - 'settings.memoryWindow.balanced.label': 'Seimbang', - 'settings.memoryWindow.description': - 'Seberapa banyak konteks yang diingat OpenHuman dimasukkan ke setiap run agen baru. Jendela yang lebih besar terasa lebih sadar akan percakapan sebelumnya, tetapi menggunakan lebih banyak token — dan biaya lebih mahal — di setiap run.', - 'settings.memoryWindow.extended.badge': 'Lebih banyak konteks', - 'settings.memoryWindow.extended.hint': - 'Lebih banyak memori jangka panjang yang dimasukkan ke setiap run. Biaya token per giliran lebih tinggi.', - 'settings.memoryWindow.extended.label': 'Diperluas', - 'settings.memoryWindow.maximum.badge': 'Biaya tertinggi', - 'settings.memoryWindow.maximum.hint': - 'Jendela teraman terbesar. Kontinuitas terbaik, tagihan token per run jauh lebih tinggi.', - 'settings.memoryWindow.maximum.label': 'Maksimum', - 'settings.memoryWindow.minimal.badge': 'Termurah', - 'settings.memoryWindow.minimal.hint': - 'Jendela memori terkecil. Termurah, tercepat, kontinuitas paling sedikit antar run.', - 'settings.memoryWindow.minimal.label': 'Ringkas', - 'settings.memoryWindow.title': 'Jendela memori jangka panjang', - 'settings.screenIntel.permissions.accessibility': 'Aksesibilitas', - 'settings.screenIntel.permissions.grantHint': 'Petunjuk izin', - 'settings.screenIntel.permissions.inputMonitoring': 'Pemantauan Input', - 'settings.screenIntel.permissions.macosAppliesPrivacy': 'macOS menerapkan privasi', - 'settings.screenIntel.permissions.openInputMonitoring': 'Meminta...', - 'settings.screenIntel.permissions.refreshStatus': 'Menyegarkan...', - 'settings.screenIntel.permissions.refreshing': 'Menyegarkan...', - 'settings.screenIntel.permissions.requestAccessibility': 'Meminta...', - 'settings.screenIntel.permissions.requestScreenRecording': 'Meminta...', - 'settings.screenIntel.permissions.requesting': 'Meminta...', - 'settings.screenIntel.permissions.restartRefresh': 'Memulai ulang core...', - 'settings.screenIntel.permissions.restartingCore': 'Memulai ulang core...', - 'settings.screenIntel.permissions.screenRecording': 'Perekaman Layar', - 'settings.screenIntel.permissions.title': 'Izin', - 'skills.card.moreActions': 'Tindakan lainnya', - 'skills.create.allowedTools': 'Tool yang diizinkan', - 'skills.create.author': 'Penulis', - 'skills.create.authorPlaceholder': 'Nama Anda', - 'skills.create.commaSeparated': '(dipisahkan koma)', - 'skills.create.createBtn': 'Buat skill', - 'skills.create.createError': 'Tidak dapat membuat skill', - 'skills.create.creating': 'Membuat...', - 'skills.create.description': 'Deskripsi', - 'skills.create.descriptionPlaceholder': 'Apa fungsi skill ini?', - 'skills.create.optional': '(optional)', - 'skills.create.inputs.heading': 'Inputs', - 'skills.create.inputs.help': - 'Declare parameters the skill needs. The Skills Runner will render a form for these at run time.', - 'skills.create.inputs.add': 'Add input', - 'skills.create.inputs.row.name': 'Input name', - 'skills.create.inputs.row.namePlaceholder': 'e.g. repo', - 'skills.create.inputs.row.nameError': - 'Letters, digits, underscores, and dashes only; must start with a letter.', - 'skills.create.inputs.row.description': 'Input description', - 'skills.create.inputs.row.descriptionPlaceholder': 'What goes in this field?', - 'skills.create.inputs.row.type': 'Type', - 'skills.create.inputs.row.required': 'Required', - 'skills.create.inputs.row.remove': 'Remove input', - 'skills.create.inputs.type.string': 'Text', - 'skills.create.inputs.type.integer': 'Number', - 'skills.create.inputs.type.boolean': 'Yes / No', - 'skills.create.license': 'Lisensi', - 'skills.create.name': 'Nama', - 'skills.create.namePlaceholder': 'mis. Jurnal Trading', - 'skills.create.scope': 'Cakupan', - 'skills.create.scopeProjectHint': '/.openhuman/skills/', - 'skills.create.scopeUserHint': - 'Ditulis ke ~/.openhuman/skills//SKILL.md — tersedia di semua workspace.', - 'skills.create.slugLabel': 'Label slug', - 'skills.create.subtitle': 'SKILL.md', - 'skills.create.tags': 'Tag', - 'skills.create.title': 'Skill baru', - 'skills.detail.allowedTools': 'Alat yang diizinkan', - 'skills.detail.author': 'Penulis', - 'skills.detail.bundledResources': 'Sumber daya bundel', - 'skills.detail.closeAriaLabel': 'Tutup detail skill', - 'skills.detail.location': 'Lokasi', - 'skills.detail.noBundledResources': 'Tidak ada sumber daya bundel.', - 'skills.detail.tags': 'Tag', - 'skills.detail.warnings': 'Peringatan', - 'skills.install.fetchLog': 'Ambil log', - 'skills.install.installBtn': 'Menginstal...', - 'skills.install.installComplete': 'Instalasi selesai', - 'skills.install.installing': 'Menginstal...', - 'skills.install.parseWarnings': 'Peringatan parse', - 'skills.install.rawError': 'Error mentah', - 'skills.install.timeoutHint': '(detik, opsional)', - 'skills.install.timeoutLabel': 'Label waktu habis', - 'skills.install.title': 'Pasang skill dari URL', - 'skills.install.urlLabel': 'URL skill', - 'skills.meetingBots.bannerDesc': 'Deskripsi banner', - 'skills.meetingBots.bannerTitle': 'Judul banner', - 'skills.meetingBots.busyTitle': 'OpenHuman sedang sibuk', - 'skills.meetingBots.comingSoon': 'Segera hadir', - 'skills.meetingBots.couldNotStartTitle': 'Tidak bisa memulai OpenHuman', - 'skills.meetingBots.displayName': 'Nama tampilan', - 'skills.meetingBots.failedToStart': 'Gagal memulai OpenHuman.', - 'skills.meetingBots.joiningMessage': 'Seharusnya muncul sebagai peserta dalam beberapa detik.', - 'skills.meetingBots.joiningTitle': 'OpenHuman bergabung ke rapat', - 'skills.meetingBots.meetingLink': 'Tautan rapat', - 'skills.meetingBots.modalAriaLabel': 'Kirim OpenHuman ke rapat', - 'skills.meetingBots.modalDesc': 'Deskripsi modal', - 'skills.meetingBots.modalTitle': 'Kirim OpenHuman ke rapat', - 'skills.meetingBots.newBadge': 'Lencana baru', - 'skills.meetingBots.sendTo': 'Kirim ke', - 'skills.meetingBots.starting': 'Memulai...', - 'skills.resource.preview.closeAriaLabel': 'Tutup pratinjau', - 'skills.resource.preview.failed': 'Pratinjau gagal', - 'skills.resource.preview.loading': 'Memuat pratinjau...', - 'skills.resource.tree.empty': 'Tidak ada sumber daya bundel.', - 'skills.search.placeholder': 'Teks placeholder', - 'skills.setup.autocomplete.acceptKey': 'Kunci terima', - 'skills.setup.autocomplete.activeDesc': 'Deskripsi aktif', - 'skills.setup.autocomplete.activeTitle': 'Auto-Complete Aktif', - 'skills.setup.autocomplete.customizeSettings': 'Sesuaikan pengaturan', - 'skills.setup.autocomplete.debounce': 'Tunda input', - 'skills.setup.autocomplete.description': 'Deskripsi', - 'skills.setup.autocomplete.enableBtn': 'Mengaktifkan...', - 'skills.setup.autocomplete.enableError': 'Gagal mengaktifkan pelengkap otomatis', - 'skills.setup.autocomplete.enabling': 'Mengaktifkan...', - 'skills.setup.autocomplete.notSupported': 'Tidak didukung', - 'skills.setup.autocomplete.stepEnable': 'Aktifkan pelengkap otomatis', - 'skills.setup.autocomplete.stepSuccess': 'Siap digunakan', - 'skills.setup.autocomplete.stylePreset': 'Preset gaya', - 'skills.setup.autocomplete.stylePresetValue': 'Seimbang (dapat dikonfigurasi nanti)', - 'skills.setup.autocomplete.title': 'Auto-Complete Teks', - 'skills.setup.screenIntel.activeDesc': 'Deskripsi aktif', - 'skills.setup.screenIntel.activeTitle': 'Kecerdasan Layar Diaktifkan', - 'skills.setup.screenIntel.advancedSettings': 'Pengaturan lanjutan', - 'skills.setup.screenIntel.allGranted': 'Semua izin diberikan', - 'skills.setup.screenIntel.captureMode': 'Mode tangkap', - 'skills.setup.screenIntel.captureModeValue': 'Semua jendela (dapat dikonfigurasi nanti)', - 'skills.setup.screenIntel.deniedHint': - 'Setelah memberikan izin di Pengaturan Sistem, klik di bawah untuk memulai ulang dan mengambil perubahan.', - 'skills.setup.screenIntel.enableBtn': 'Mengaktifkan...', - 'skills.setup.screenIntel.enableDesc': - 's di layar Anda dan memberikan konteks berguna ke agen Anda', - 'skills.setup.screenIntel.enableError': 'Gagal mengaktifkan Kecerdasan Layar', - 'skills.setup.screenIntel.enabling': 'Mengaktifkan...', - 'skills.setup.screenIntel.grant': 'Membuka...', - 'skills.setup.screenIntel.granted': 'Diberikan', - 'skills.setup.screenIntel.macosOnly': 'Hanya macOS', - 'skills.setup.screenIntel.opening': 'Membuka...', - 'skills.setup.screenIntel.panicHotkey': 'Hotkey panik', - 'skills.setup.screenIntel.permAccessibility': 'Aksesibilitas', - 'skills.setup.screenIntel.permInputMonitoring': 'Pemantauan Input', - 'skills.setup.screenIntel.permScreenRecording': 'Perekaman Layar', - 'skills.setup.screenIntel.permissionsDesc': 'Deskripsi izin', - 'skills.setup.screenIntel.refreshStatus': 'Segarkan status', - 'skills.setup.screenIntel.restartRefresh': 'Memulai ulang...', - 'skills.setup.screenIntel.restarting': 'Memulai ulang...', - 'skills.setup.screenIntel.stepEnable': 'Aktifkan skill', - 'skills.setup.screenIntel.stepPermissions': 'Berikan izin', - 'skills.setup.screenIntel.stepSuccess': 'Siap digunakan', - 'skills.setup.screenIntel.title': 'Kecerdasan Layar', - 'skills.setup.screenIntel.visionModel': 'Model visi', - 'skills.setup.voice.activation': 'Aktivasi', - 'skills.setup.voice.activeDescPrefix': 'Fn', - 'skills.setup.voice.activeDescSuffix': 'Fn', - 'skills.setup.voice.activeTitle': 'Kecerdasan Suara Aktif', - 'skills.setup.voice.customizeSettings': 'Sesuaikan pengaturan', - 'skills.setup.voice.downloadSttBtn': 'Unduh tombol STT', - 'skills.setup.voice.enableDesc': 'Deskripsi aktifkan', - 'skills.setup.voice.hotkey': 'Pintasan', - 'skills.setup.voice.startBtn': 'Memulai...', - 'skills.setup.voice.startError': 'Gagal memulai server suara', - 'skills.setup.voice.starting': 'Memulai...', - 'skills.setup.voice.stepEnable': 'Mulai server suara', - 'skills.setup.voice.stepSetup': 'Unduhan model diperlukan', - 'skills.setup.voice.stepSuccess': 'Siap digunakan', - 'skills.setup.voice.sttNotReady': 'Model speech-to-text belum siap', - 'skills.setup.voice.sttNotReadyDesc': - 'Kecerdasan Suara memerlukan model Whisper lokal untuk transkripsi. Unduh dari pengaturan Model Lokal.', - 'skills.setup.voice.sttReady': 'Model speech-to-text siap', - 'skills.setup.voice.sttReturnHint': 'Petunjuk kembali STT', - 'skills.setup.voice.title': 'Kecerdasan Suara', - 'skills.uninstall.couldNotUninstall': 'Tidak bisa mencopot', - 'skills.uninstall.description': - 'Ini akan menghapus permanen direktori skill dan semua resource yang dibundel. Agen akan berhenti melihatnya pada giliran berikutnya.', - 'skills.uninstall.title': 'Copot', - 'skills.uninstall.uninstallBtn': 'Copot', - 'skills.uninstall.uninstalling': 'Mencopot…', - 'upsell.global.limitMessage': 'Upgrade paket atau isi ulang kredit untuk melanjutkan', - 'upsell.global.limitTitle': 'Anda', - 'upsell.global.nearLimitMessage': - 'Anda telah menggunakan {pct}% dari batas pemakaian. Upgrade untuk batas lebih tinggi.', - 'upsell.global.nearLimitTitle': 'Mendekati batas pemakaian', - 'upsell.usageLimit.bodyBudget': - 'Anda telah mencapai batas mingguan.{reset} Tingkatkan paket Anda atau isi ulang kredit untuk menghindari batas.', - 'upsell.usageLimit.bodyRate': - 'Anda telah mencapai batas laju inferensi 10 jam.{reset} Tingkatkan untuk batas yang lebih tinggi.', - 'upsell.usageLimit.heading': 'Batas Pemakaian Tercapai', - 'upsell.usageLimit.notNow': 'Tidak sekarang', - 'upsell.usageLimit.perWindow': '{amount}', - 'upsell.usageLimit.planIncludes': '{plan}', - 'upsell.usageLimit.resetsIn': 'Akan direset {time}.', - 'upsell.usageLimit.upgradePlan': 'Upgrade paket', - 'upsell.usageLimit.weeklyInference': '{amount}', - 'walkthrough.tooltip.letsGo': 'Ayo mulai!', - 'walkthrough.tooltip.next': 'Berikutnya →', - 'walkthrough.tooltip.skip': 'Lewati tur', - 'walkthrough.tooltip.stepCounter': '{n} dari {total}', - 'webhooks.activity.empty': 'Kosong', - 'webhooks.activity.title': 'Aktivitas Terbaru', - 'webhooks.composioHistory.empty': 'Kosong', - 'webhooks.composioHistory.metadataId': 'ID Metadata', - 'webhooks.composioHistory.metadataUuid': 'UUID Metadata', - 'webhooks.composioHistory.payload': 'Muatan', - 'webhooks.composioHistory.title': 'Riwayat Pemicu ComposeIO', - 'webhooks.tunnels.active': 'Aktif', - 'webhooks.tunnels.createFailed': 'Gagal membuat tunnel', - 'webhooks.tunnels.creating': 'Membuat...', - 'webhooks.tunnels.deleteFailed': 'Gagal menghapus tunnel', - 'webhooks.tunnels.descriptionPlaceholder': 'Deskripsi (opsional)', - 'webhooks.tunnels.echo': 'Echo', - 'webhooks.tunnels.empty': 'Kosong', - 'webhooks.tunnels.enableEcho': 'Aktifkan Echo', - 'webhooks.tunnels.inactive': 'Tidak aktif', - 'webhooks.tunnels.namePlaceholder': 'Nama tunnel (mis. telegram-bot)', - 'webhooks.tunnels.newTunnel': 'Tunnel baru', - 'webhooks.tunnels.removeEcho': 'Hapus Echo', - 'webhooks.tunnels.title': 'Tunnel Webhook', - 'webhooks.tunnels.toggleFailed': 'Gagal mengalihkan echo', - 'composio.authExpired': 'Autentikasi kedaluwarsa', - 'composio.reconnect': 'Hubungkan ulang', - 'composio.previewBadge': 'Pratinjau', - 'composio.previewTooltip': - 'Integrasi agen segera hadir — Anda dapat terhubung, tetapi agen belum dapat menggunakan perangkat ini.', - 'composio.directModeRequiresKey': - 'Gagal menyimpan. Mode Direct memerlukan API key yang tidak kosong.', - 'composio.notYetRouted': 'belum dirutekan', - 'composio.triggers.loading': 'Memuat…', - 'conversations.taskKanban.todo': 'Akan dikerjakan', - 'settings.composio.loading': 'Memuat…', - 'settings.mascot.noCharactersAvailable': 'Belum ada karakter OpenHuman yang tersedia', - 'skills.uninstall.confirmTitle': 'Copot {name}?', - 'conversations.taskKanban.blocked': 'Terhambat', - 'conversations.taskKanban.done': 'Selesai', - 'conversations.taskKanban.pending': 'Pending', - 'conversations.taskKanban.working': 'Working', - 'conversations.taskKanban.awaitingApproval': 'Awaiting approval', - 'conversations.taskKanban.ready': 'Ready', - 'conversations.taskKanban.rejected': 'Rejected', - 'conversations.taskKanban.inProgress': 'Sedang berjalan', - 'intelligence.memoryChunk.detail.copiedHint': 'disalin', - 'settings.composio.notYetRouted': 'belum dirutekan', - 'settings.localModel.download.manageExternal': 'Kelola model ini di runtime eksternal Anda.', - 'settings.localModel.status.manageOllamaExternal': - 'Kelola proses Ollama dan unduhan model di luar OpenHuman, lalu jalankan ulang diagnostik.', - 'settings.localModel.status.ollamaDocs': 'Dokumentasi Ollama', - 'settings.localModel.status.thenRetry': - 'untuk instruksi pengaturan, lalu coba lagi setelah runtime Anda dapat dijangkau.', - 'settings.appearance.title': 'Tampilan', - 'settings.appearance.themeHeading': 'Tema', - 'settings.appearance.themeAria': 'Tema', - 'settings.appearance.modeLight': 'Terang', - 'settings.appearance.modeLightDesc': 'Permukaan terang, teks gelap.', - 'settings.appearance.modeDark': 'Gelap', - 'settings.appearance.modeDarkDesc': 'Permukaan redup, lebih nyaman untuk malam hari.', - 'settings.appearance.modeSystem': 'Ikuti sistem', - 'settings.appearance.modeSystemDesc': 'Ikuti pengaturan tampilan OS Anda.', - 'settings.appearance.helperText': - 'Mode gelap mengubah seluruh aplikasi - obrolan, pengaturan, dan panel - ke palet redup. "Ikuti sistem" mengikuti tampilan OS Anda dan diperbarui otomatis.', - 'settings.mascot.characterPreview': 'Pratinjau', - 'settings.mascot.characterStates': 'status', - 'settings.mascot.characterVisemes': 'visem', - 'settings.mascot.colorAria': 'Warna OpenHuman', - 'settings.mascot.colorBlack': 'Hitam', - 'settings.mascot.colorBurgundy': 'Burgundi', - 'settings.mascot.colorCustom': 'Custom', - 'settings.mascot.colorNavy': 'Biru tua', - 'settings.mascot.primaryColor': 'Primary color', - 'settings.mascot.secondaryColor': 'Secondary color', - 'settings.mascot.colorYellow': 'Kuning', - 'settings.mascot.libraryUnavailable': 'Library OpenHuman tidak tersedia', - 'settings.mascot.title': 'OpenHuman', - 'settings.developerMenu.mcpServer.title': 'Server MCP', - 'settings.developerMenu.mcpServer.desc': - 'Konfigurasikan klien MCP eksternal untuk terhubung ke OpenHuman', - 'settings.developerMenu.autonomy.title': 'Otonomi agen', - 'settings.developerMenu.autonomy.desc': 'Batas laju aksi alat dan ambang keamanan', - 'settings.mcpServer.title': 'Server MCP', - 'settings.mcpServer.toolsSectionTitle': 'Alat yang tersedia', - 'settings.mcpServer.toolsSectionDesc': - 'Alat yang diekspos melalui server stdio MCP saat menjalankan openhuman-core mcp', - 'settings.mcpServer.configSectionTitle': 'Konfigurasi Klien', - 'settings.mcpServer.configSectionDesc': - 'Pilih klien MCP Anda untuk membuat cuplikan konfigurasi yang tepat', - 'settings.mcpServer.copySnippet': 'Salin ke Clipboard', - 'settings.mcpServer.copied': 'Tersalin!', - 'settings.mcpServer.openConfigFile': 'Buka File Konfigurasi', - 'settings.mcpServer.binaryPathNotFound': - 'Binary OpenHuman tidak ditemukan. Jika menjalankan dari source, build dengan: cargo build --bin openhuman-core', - 'settings.mcpServer.openConfigError': 'Gagal membuka file konfigurasi', - 'settings.mcpServer.clientClaudeDesktop': 'Claude Desktop', - 'settings.mcpServer.clientCursor': 'Kursor', - 'settings.mcpServer.clientCodex': 'Codex', - 'settings.mcpServer.clientZed': 'Zed', - 'settings.mcpServer.configFilePath': 'File konfigurasi', - 'settings.mcpServer.clientSelectorAriaLabel': 'Pemilih klien MCP', - 'settings.persona.title': 'Persona', - 'settings.persona.menuTitle': 'Persona', - 'settings.persona.menuDesc': - 'Name, personality, avatar, and voice — your assistant as one identity', - 'settings.persona.identityHeading': 'Identity', - 'settings.persona.identityDesc': - 'A display name and short description for your assistant. Shown in the app; does not change how the assistant reasons.', - 'settings.persona.displayNameLabel': 'Display name', - 'settings.persona.displayNamePlaceholder': 'e.g. Nova', - 'settings.persona.descriptionLabel': 'Description', - 'settings.persona.descriptionPlaceholder': 'e.g. A calm, concise assistant for my team.', - 'settings.persona.soul.heading': 'Personality (SOUL.md)', - 'settings.persona.soul.desc': - 'The personality prompt the assistant follows in every conversation. Edits are saved to your workspace and take effect on the next reply.', - 'settings.persona.soul.editorLabel': 'SOUL.md contents', - 'settings.persona.soul.reset': 'Reset to default', - 'settings.persona.soul.usingDefault': 'Using the bundled default', - 'settings.persona.soul.loadError': 'Could not load SOUL.md', - 'settings.persona.soul.saveError': 'Could not save SOUL.md', - 'settings.persona.soul.resetError': 'Could not reset SOUL.md', - 'settings.persona.appearanceHeading': 'Avatar & Voice', - 'settings.persona.appearanceDesc': - 'Mascot color, custom GIF avatar, and reply voice are configured in Mascot settings.', - 'settings.persona.openMascotSettings': 'Open Mascot settings', - 'settings.developerMenu.composio.title': 'Composio', - 'settings.developerMenu.composio.desc': - 'Mode perutean, pemicu integrasi, dan arsip riwayat pemicu.', - 'settings.appearance.tabBarHeading': 'Bilah tab bawah', - 'settings.appearance.tabBarAlwaysShowLabels': 'Selalu tampilkan label', - 'settings.appearance.tabBarAlwaysShowLabelsDesc': - 'Saat nonaktif, label hanya muncul saat diarahkan atau untuk tab yang aktif.', - 'common.breadcrumb': 'Breadcrumb', - 'settings.betaBuild': 'Versi beta - v{version}', - 'migration.vendor.openclaw': 'OpenClaw', - 'migration.vendor.hermes': 'Hermes Agent', - 'onboarding.apiKeys.openaiOauthHint': - 'Gunakan ChatGPT Plus/Pro (berlangganan) atau kunci OpenAI API — keduanya tidak diperlukan.', - 'onboarding.apiKeys.openaiOauthOpening': 'Membuka proses masuk…', - 'onboarding.apiKeys.finishSignIn': 'Selesaikan proses masuk ChatGPT', - 'onboarding.apiKeys.orApiKey': 'atau kunci API', - 'app.localAiDownload.expandAria': 'Perluas kemajuan pengunduhan', - 'app.localAiDownload.collapseAria': 'Ciutkan kemajuan pengunduhan', - 'app.localAiDownload.dismissAria': 'Tutup pemberitahuan unduhan', - 'mobile.nav.ariaLabel': 'Navigasi seluler', - 'progress.stepsAria': 'Langkah kemajuan', - 'progress.stepAria': 'Langkah {current} dari {total}', - 'workspace.vaultsTitle': 'Gudang pengetahuan', - 'workspace.vaultsDesc': 'Arahkan ke folder lokal; file dipotong dan dicerminkan ke dalam memori.', - 'calls.title': 'Panggilan', - 'calls.comingSoonBody': 'Panggilan dengan bantuan AI akan segera hadir. Pantau terus.', - 'art.rotatingTetrahedronAria': 'Pesawat ruang angkasa tetrahedron terbalik yang berputar', - 'devOptions.sentryDisabled': '(tidak ada id — Penjaga dinonaktifkan dalam build ini)', - 'composio.expiredAuthorization': '{name} otorisasi kedaluwarsa', - 'composio.expiredDescription': - 'Sambungkan kembali untuk mengaktifkan kembali alat {name}. OpenHuman akan membuat integrasi ini tidak tersedia sampai Anda menyegarkan akses OAuth.', - 'channels.telegram.remoteControlTitle': 'Kendali jarak jauh (Telegram)', - 'channels.telegram.remoteControlBody': - 'Dari obrolan Telegram yang diizinkan, kirim /status, /sessions, /new, atau /help. Perutean model masih menggunakan /model dan /models.', - 'rewards.referralSection.retry': 'Coba lagi', - 'settings.ai.plannerSummary': - 'Perencana: {sourceEvents} peristiwa sumber, {sent} terkirim, {deduped} dihapuskan.', - 'settings.ai.routeLabel': 'rute: {route}', - 'settings.ai.latestSpend': 'Pembelanjaan terbaru: {amount} pada {time} ({action})', - 'settings.ai.topActions': 'Tindakan teratas', - 'settings.ai.noSpendRows': 'Tidak ada baris pembelanjaan yang dimuat.', - 'settings.ai.topHours': 'Jam sibuk', - 'settings.ai.noHourlySpend': 'Belum ada pembelanjaan per jam.', - 'settings.autocomplete.appFilter.app': 'Aplikasi', - 'settings.autocomplete.appFilter.currentSuggestion': 'Saran saat ini', - 'settings.autocomplete.appFilter.debounce': 'Debounce', - 'settings.autocomplete.appFilter.enabled': 'Diaktifkan', - 'settings.autocomplete.appFilter.lastError': 'Kesalahan terakhir', - 'settings.autocomplete.appFilter.model': 'Model', - 'settings.autocomplete.appFilter.phase': 'Fase', - 'settings.autocomplete.appFilter.platformSupported': 'Platform didukung', - 'settings.autocomplete.appFilter.running': 'Berjalan', - 'settings.autocomplete.debug.acceptedPrefix': 'Diterima: {value}', - 'settings.autocomplete.debug.acceptFailed': 'Gagal menerima saran', - 'settings.autocomplete.debug.alreadyRunning': 'Pelengkapan otomatis sudah berjalan.', - 'settings.autocomplete.debug.clearHistoryFailed': 'Gagal menghapus riwayat', - 'settings.autocomplete.debug.didNotStart': 'Pelengkapan otomatis tidak dimulai.', - 'settings.autocomplete.debug.disabledInSettings': - 'Pelengkapan otomatis dinonaktifkan di pengaturan. Aktifkan dan simpan terlebih dahulu.', - 'settings.autocomplete.debug.fetchSuggestionFailed': 'Gagal mengambil saran saat ini', - 'settings.autocomplete.debug.inspectFocusedElementFailed': 'Gagal memeriksa elemen fokus', - 'settings.autocomplete.debug.loadSettingsFailed': 'Gagal memuat pengaturan pelengkapan otomatis', - 'settings.autocomplete.debug.noSuggestionApplied': 'Tidak ada saran yang diterapkan.', - 'settings.autocomplete.debug.noSuggestionReturned': 'Tidak ada saran yang dikembalikan.', - 'settings.autocomplete.debug.refreshStatusFailed': - 'Gagal menyegarkan status pelengkapan otomatis', - 'settings.autocomplete.debug.saveAdvancedSettingsFailed': 'Gagal menyimpan pengaturan lanjutan', - 'settings.autocomplete.debug.startFailed': 'Gagal memulai pelengkapan otomatis', - 'settings.autocomplete.debug.stopFailed': 'Gagal menghentikan pelengkapan otomatis', - 'settings.autocomplete.debug.suggestionPrefix': 'Saran: {value}', - 'settings.autocomplete.shared.none': 'Tidak ada', - 'settings.autocomplete.shared.notApplicable': 'n/a', - 'settings.autocomplete.shared.unknown': 'Tidak diketahui', - 'settings.billing.autoRecharge.expires': 'Kedaluwarsa {date}', - 'settings.billing.autoRecharge.spentThisWeek': '${spent} dari ${limit} digunakan minggu ini', - 'settings.localModel.deviceCapability.disabledLowercase': 'dinonaktifkan', - 'settings.localModel.deviceCapability.presetDetails': - 'Obrolan: {chatModel} · Penglihatan: {visionModel} · Target RAM: {targetRamGb} GB', - 'settings.localModel.download.capabilityChat': 'Obrolan', - 'settings.localModel.download.capabilityEmbedding': 'Penyematan', - 'settings.localModel.download.capabilityStt': 'STT', - 'settings.localModel.download.capabilityTts': 'TTS', - 'settings.localModel.download.capabilityVision': 'Penglihatan', - 'settings.localModel.download.embeddingDimensions': 'Dimensi: {dimensions}', - 'settings.localModel.download.embeddingModel': 'Model: {modelId}', - 'settings.localModel.download.embeddingVectors': 'Vektor: {count}', - 'settings.localModel.download.notAvailable': 't/a', - 'settings.localModel.download.summaryHelper': - 'Panggilan `openhuman.inference_summarize` melalui Rust core', - 'settings.localModel.download.transcript': 'Transkrip:', - 'settings.localModel.download.ttsOutput': 'Keluaran: {outputPath}', - 'settings.localModel.download.ttsVoice': 'Suara: {voiceId}', - 'settings.localModel.status.contextBelowMinimumBadge': - '{contextLength} ctx - di bawah {required} mnt', - 'settings.localModel.status.contextBelowMinimumTitle': - 'Ditolak: jendela konteks {contextLength} token berada di bawah minimum {required}-token yang diperlukan lapisan memori. Penarikan kembali akan dirusak oleh pemotongan diam-diam.', - 'settings.localModel.status.contextOkBadge': '{contextLength} ctx ✓', - 'settings.localModel.status.contextOkTitle': - 'Jendela konteks {contextLength} token memenuhi minimum lapisan memori {required} token.', - 'settings.localModel.status.contextUnknownBadge': 'ctx tidak diketahui', - 'settings.localModel.status.contextUnknownTitle': - 'Jendela konteks tidak diketahui; tidak dapat mengonfirmasi bahwa itu memenuhi minimum lapisan memori {required}-token.', - 'settings.localModel.status.expectedChat': 'Obrolan: {model}', - 'settings.localModel.status.expectedEmbedding': 'Penyematan: {model}', - 'settings.localModel.status.expectedVision': 'Visi: {model}', - 'settings.localModel.status.externalProcess': 'Proses eksternal', - 'settings.localModel.status.notAvailable': 't/a', - 'settings.mascot.customGifPlaceholder': 'https://example.com/avatar.gif', - 'settings.mascot.loadDetailError': 'Tidak dapat memuat maskot.', - 'settings.mascot.loadLibraryError': 'Tidak dapat memuat perpustakaan maskot.', - 'settings.mascot.voice.customPlaceholder': 'mis. 21m00Tcm4TlvDq8ikWAM', - 'settings.mascot.voice.previewText': "Hi, I'm your assistant. This is a voice preview.", - 'skills.channelIcon.discord': 'Discord', - 'skills.channelIcon.imessage': 'iMessage', - 'skills.channelIcon.telegram': 'Telegram', - 'skills.channelIcon.web': 'Web', - 'skills.channelIcon.yuanbao': 'Yuanbao', - 'skills.composio.poweredBy': 'Didukung oleh Composio', - 'skills.composio.staleStatusTitle': 'Koneksi menunjukkan status basi', - 'skills.create.allowedToolsHelp': 'Dirender ke frontmatter SKILL.md sebagai', - 'skills.create.allowedToolsPlaceholder': 'node_exec, ambil', - 'skills.create.licensePlaceholder': 'MIT', - 'skills.create.tagsPlaceholder': 'perdagangan, penelitian', - 'skills.install.errors.alreadyInstalledHint': - 'Keterampilan dengan siput ini sudah ada di ruang kerja. Hapus dulu atau ubah frontmatter `metadata.id` / `name`.', - 'skills.install.errors.alreadyInstalledTitle': 'Keterampilan sudah terpasang', - 'skills.install.errors.fetchFailedHint': - 'Permintaan tidak berhasil diselesaikan. Periksa poin URL pada file publik yang dapat dijangkau, dan host mengembalikan respons 2xx.', - 'skills.install.errors.fetchFailedTitle': 'Pengambilan gagal', - 'skills.install.errors.fetchTimedOutHint': - 'Host jarak jauh tidak merespons tepat waktu. Coba lagi atau tambah batas waktu (1-600 detik).', - 'skills.install.errors.fetchTimedOutTitle': 'Waktu pengambilan habis', - 'skills.install.errors.fetchTooLargeHint': - 'SKILL.md harus di bawah 1 MiB. Pisahkan sumber daya yang dibundel menjadi file `referensi/` atau `skrip/` alih-alih menyatukannya.', - 'skills.install.errors.fetchTooLargeTitle': 'SKILL.md terlalu besar', - 'skills.install.errors.genericHint': - 'Backend menghasilkan kesalahan. Pesan mentahnya ditunjukkan di bawah ini.', - 'skills.install.errors.genericTitle': 'Tidak dapat menginstal keterampilan', - 'skills.install.errors.invalidSkillHint': - 'Materi depan harus berupa YAML yang valid dengan kolom `nama` dan `deskripsi` yang tidak kosong, diakhiri dengan `---`.', - 'skills.install.errors.invalidSkillTitle': 'SKILL.md tidak diurai', - 'skills.install.errors.invalidUrlHint': - 'Hanya HTTPS URL publik yang diperbolehkan. Host pribadi, loopback, dan metadata diblokir.', - 'skills.install.errors.invalidUrlTitle': 'URL ditolak', - 'skills.install.errors.unsupportedUrlHint': - 'Hanya tautan `.md` langsung yang berfungsi. Untuk GitHub, tautan ke file (github.com/owner/repo/blob/.../SKILL.md) - akar pohon dan repo tidak diinstal.', - 'skills.install.errors.unsupportedUrlTitle': 'formulir URL tidak didukung', - 'skills.install.errors.writeFailedHint': - 'Direktori keterampilan ruang kerja tidak dapat ditulis. Periksa izin sistem file untuk `/.openhuman/skills/`.', - 'skills.install.errors.writeFailedTitle': 'Tidak dapat menulis SKILL.md', - 'skills.install.fetchingPrefix': 'Mengambil', - 'skills.install.fetchingSuffix': - 'ini dapat memakan waktu hingga batas waktu yang Anda konfigurasikan.', - 'skills.install.subtitleMiddle': 'di atas HTTPS dan menginstalnya di bawah', - 'skills.install.subtitlePrefix': 'Hanya mengambil satu', - 'skills.install.subtitleSuffix': 'HTTPS; host pribadi dan loopback diblokir.', - 'skills.install.successDiscovered': 'Menemukan {count} keterampilan baru.', - 'skills.install.successNoNewIds': - 'Skill terpasang, tetapi tidak ada ID skill baru yang muncul - katalog mungkin sudah berisi skill dengan slug yang sama.', - 'skills.install.timeoutHelp': - 'Defaultnya adalah 60 detik. Nilai di luar 1-600 dijepit di sisi server.', - 'skills.install.timeoutInvalid': 'Harus berupa bilangan bulat antara 1 dan 600.', - 'skills.install.timeoutPlaceholder': '60', - 'skills.install.urlHelpMiddle': 'berkas.', - 'skills.install.urlHelpPrefix': 'Tautan langsung ke', - 'skills.install.urlHelpSuffix': 'URLs penulisan ulang otomatis ke', - 'skills.install.urlInvalidPrefix': 'URL harus berupa tautan', - 'skills.install.urlInvalidSuffix': 'yang dibuat dengan baik.', - 'skills.install.urlPlaceholder': 'https://raw.githubusercontent.com/owner/repo/main/SKILL.md', - 'skills.meetingBots.platformComingSoon': '{label} dukungan akan segera hadir.', - 'skills.meetingBots.platformHints.gmeet': 'meet.google.com/abc-defg-hij', - 'skills.meetingBots.platformHints.teams': 'team.microsoft.com/...', - 'skills.meetingBots.platformHints.zoom': 'zoom.us/j/...', - 'skills.meetingBots.platforms.gmeet': 'Google Temui', - 'skills.meetingBots.platforms.teams': 'Microsoft Teams', - 'skills.meetingBots.platforms.zoom': 'Zoom', - 'skills.meetingBots.soonSuffix': 'segera', - 'skills.setup.screenIntel.permissionPathLabel': 'macOS menerapkan privasi ke:', - 'settings.agentAccess.title': 'Agent OS access', - 'settings.agentAccess.menuDesc': - 'Control where the agent can read/write and whether it can use the shell.', - 'settings.agentAccess.loadError': 'Failed to load access settings', - 'settings.agentAccess.saveError': 'Failed to save access settings', - 'settings.agentAccess.saved': 'Saved — applies on your next message.', - 'settings.agentAccess.desktopOnly': 'Access settings are only available in the desktop app.', - 'settings.agentAccess.loading': 'Loading…', - 'settings.agentAccess.accessMode': 'Access mode', - 'settings.agentAccess.tier.readonly.title': 'Read-only', - 'settings.agentAccess.tier.readonly.desc': - 'Reads files and runs read-only commands to explore — but never writes, edits, or runs anything that changes state.', - 'settings.agentAccess.tier.supervised.title': 'Ask before edit', - 'settings.agentAccess.tier.supervised.desc': - 'Creates new files freely, but asks for your approval before editing an existing file, running a command, reaching the network, or installing anything.', - 'settings.agentAccess.tier.full.title': 'Full access', - 'settings.agentAccess.tier.full.desc': - 'Runs commands with your full user account access — it can read/write anywhere allowed, except credential and system stores. Destructive commands, network access, and installs still ask for approval.', - 'settings.agentAccess.defaultTag': '(default)', - 'settings.agentAccess.fullWarning': - '⚠ Full access runs commands with your full account access and is not sandboxed. Only enable it when you trust the agent with this machine. Credential and system directories stay blocked, and destructive, network, and install actions still ask for approval.', - 'settings.agentAccess.confine.label': 'Confine to workspace', - 'settings.agentAccess.confine.desc': - 'Restrict the agent to the workspace directory (plus any granted folders), whichever access mode is selected. When off, it can reach anywhere your user can — except the always-blocked credential and system directories.', - 'settings.agentAccess.grantedFolders': 'Granted folders', - 'settings.agentAccess.alwaysAllow': 'Always-allowed tools', - 'settings.agentAccess.alwaysAllowDesc': - 'Tools you marked "Always allow" in chat run without asking. Remove one to be prompted again.', - 'settings.agentAccess.alwaysAllowNone': 'No always-allowed tools yet.', - 'settings.agentAccess.grantedDesc': - 'Folders the agent may read and write, in addition to the workspace. Credential stores (~/.ssh, ~/.gnupg, ~/.aws, keychains) and system directories (/etc, /System, C:\\Windows, …) are always blocked, even inside a granted folder.', - 'settings.agentAccess.noneGranted': 'No folders granted.', - 'settings.agentAccess.readWrite': 'read + write', - 'settings.agentAccess.readOnly': 'read-only', - 'settings.agentAccess.remove': 'Remove', - 'settings.agentAccess.pathPlaceholder': 'Jalur folder absolut', - 'settings.agentAccess.accessLevelLabel': 'Access level', - 'settings.agentAccess.add': 'Add', - 'settings.agentAccess.saving': 'Saving…', - 'settings.agentAccess.changesApply': 'Changes apply on your next message.', - 'skills.tabs.runners': 'Runners', - 'settings.developerMenu.skillsRunner.title': 'Skills Runner', - 'settings.developerMenu.skillsRunner.desc': - 'Run any bundled skill ad-hoc — fill its inputs and fire a background autonomous run', - 'settings.developerMenu.skillsRunner.panelDesc': - 'Pick a bundled skill, fill in its declared inputs, and fire a fire-and-forget background run. Use Dev Workflow instead if you want a cron-scheduled recurring job.', - 'settings.skillsRunner.skill': 'Skill', - 'settings.skillsRunner.selectSkill': 'Select a skill…', - 'settings.skillsRunner.loadingSkills': 'Loading skills…', - 'settings.skillsRunner.loadingDescription': 'Loading skill inputs…', - 'settings.skillsRunner.noInputs': 'This skill declares no inputs.', - 'settings.skillsRunner.placeholder.required': 'required', - 'settings.skillsRunner.runNow': 'Run now', - 'settings.skillsRunner.starting': 'Starting…', - 'settings.skillsRunner.started': 'Started — run id:', - 'settings.skillsRunner.logPath': 'Log:', - 'settings.skillsRunner.error.listSkills': 'Failed to load skills:', - 'settings.skillsRunner.error.describe': 'Failed to load inputs:', - 'settings.skillsRunner.error.missingRequired': 'Missing required input(s):', - 'settings.skillsRunner.error.run': 'Run failed to start:', - 'settings.skillsRunner.error.preflightGate': 'Preflight gate failed', - 'settings.skillsRunner.schedule.heading': 'Schedule (recurring)', - 'settings.skillsRunner.schedule.help': - 'Save this skill + inputs as a recurring cron job. The agent will call run_skill at each tick.', - 'settings.skillsRunner.schedule.frequency': 'Frequency', - 'settings.skillsRunner.schedule.every30min': 'Every 30 minutes', - 'settings.skillsRunner.schedule.everyHour': 'Every hour', - 'settings.skillsRunner.schedule.every2hours': 'Every 2 hours', - 'settings.skillsRunner.schedule.every6hours': 'Every 6 hours', - 'settings.skillsRunner.schedule.onceDaily': 'Once daily (9:00)', - 'settings.skillsRunner.schedule.save': 'Save schedule', - 'settings.skillsRunner.schedule.saving': 'Saving…', - 'settings.skillsRunner.schedule.saved': 'Schedule saved.', - 'settings.skillsRunner.schedule.error': 'Schedule save failed:', - 'settings.skillsRunner.schedule.loadingJobs': 'Loading existing schedules…', - 'settings.skillsRunner.schedule.noJobs': 'No schedules saved for this skill yet.', - 'settings.skillsRunner.schedule.existing': 'Scheduled jobs for this skill:', - 'settings.skillsRunner.schedule.runNow': 'Run', - 'settings.skillsRunner.schedule.remove': 'Remove', - 'settings.skillsRunner.recentRuns.headingForSkill': 'Recent runs for this skill', - 'settings.skillsRunner.recentRuns.headingAll': 'Recent skill runs (all)', - 'settings.skillsRunner.recentRuns.refresh': 'Refresh', - 'settings.skillsRunner.recentRuns.loading': 'Loading recent runs…', - 'settings.skillsRunner.recentRuns.empty': 'No recent runs.', - 'settings.skillsRunner.viewer.loading': 'Loading log…', - 'settings.skillsRunner.viewer.tailing': 'Live tailing', - 'settings.skillsRunner.viewer.fetching': 'fetching', - 'settings.skillsRunner.viewer.error': 'Log read failed:', - 'settings.skillsRunner.repoPicker.loading': 'Loading repositories…', - 'settings.skillsRunner.repoPicker.select': 'Select a repository…', - 'settings.skillsRunner.repoPicker.empty': - 'No repositories returned. Connect GitHub via Composio to populate this list.', - 'settings.skillsRunner.repoPicker.notConnected': - 'GitHub isn’t connected via Composio. Connect it under Skills → Composio first.', - 'settings.skillsRunner.repoPicker.privateTag': '(private)', - 'settings.skillsRunner.branchPicker.needRepo': 'Pick a repo first…', - 'settings.skillsRunner.branchPicker.loading': 'Loading branches…', - 'settings.skillsRunner.branchPicker.select': 'Select a branch…', - 'settings.modelHealth.title': 'Model Health', - 'settings.modelHealth.desc': - 'Per-model quality, hallucination rate, and cost comparison across active models', - 'settings.modelHealth.allStatuses': 'All statuses', - 'settings.modelHealth.models': 'models', - 'settings.modelHealth.loading': 'Loading model data...', - 'settings.modelHealth.empty': 'No models registered', - 'settings.modelHealth.col.model': 'Model', - 'settings.modelHealth.col.quality': 'Quality', - 'settings.modelHealth.col.halluc': 'Halluc. Rate', - 'settings.modelHealth.col.cost': 'Cost / 1M out', - 'settings.modelHealth.col.agents': 'Agents', - 'settings.modelHealth.col.status': 'Status', - 'settings.modelHealth.badge.keep': 'Keep', - 'settings.modelHealth.badge.replace': 'Replace', - 'settings.modelHealth.badge.staging': 'Staging test', - 'settings.modelHealth.badge.vision': 'Vision only', - 'settings.modelHealth.swap': 'Swap?', - 'settings.modelHealth.modal.title': 'Replace Model?', - 'settings.modelHealth.modal.hallucRate': 'Hallucination rate', - 'settings.modelHealth.modal.cancel': 'Cancel', - 'settings.modelHealth.modal.apply': 'Apply Replacement', - 'settings.modelHealth.tag.cheaper': 'CHEAPER', - 'settings.modelHealth.tag.better': 'BETTER', - // Task sources (#task-sources) - 'settings.taskSources.title': 'Task Sources', - 'settings.taskSources.subtitle': 'Pull tasks from your tools onto the agent todo board', - 'settings.taskSources.description': - 'Collect work items from GitHub, Notion, Linear, and ClickUp, enrich them, and route them onto the agent todo board.', - 'settings.taskSources.connectHint': - 'Task sources use your connected accounts. Connect them under Integrations first.', - 'settings.taskSources.disabledBanner': - 'Task sources are disabled in settings. Enable them to poll automatically.', - 'settings.taskSources.loadError': 'Failed to load task sources', - 'settings.taskSources.addTitle': 'Add a task source', - 'settings.taskSources.provider': 'Provider', - 'settings.taskSources.name': 'Name (optional)', - 'settings.taskSources.namePlaceholder': 'e.g. My open issues', - 'settings.taskSources.github.repo': 'Repository (owner/name, optional)', - 'settings.taskSources.github.labels': 'Labels (comma-separated)', - 'settings.taskSources.notion.database': 'Database (board) ID', - 'settings.taskSources.linear.team': 'Team ID (optional)', - 'settings.taskSources.clickup.team': 'Workspace (team) ID (optional)', - 'settings.taskSources.assignedToMe': 'Only items assigned to me', - 'settings.taskSources.add': 'Add source', - 'settings.taskSources.adding': 'Adding…', - 'settings.taskSources.preview': 'Preview', - 'settings.taskSources.previewResult': '{count} task(s) match this filter', - 'settings.taskSources.fetchNow': 'Fetch now', - 'settings.taskSources.fetching': 'Fetching…', - 'settings.taskSources.fetchResult': 'Routed {routed} of {fetched} task(s)', - 'settings.taskSources.configured': 'Configured sources', - 'settings.taskSources.empty': 'No task sources configured yet.', - 'settings.taskSources.proactive': 'Proactive', - 'settings.taskSources.lastFetch': 'Last fetch', - 'settings.taskSources.never': 'Never', - 'settings.taskSources.statusEnabled': 'Enabled', - 'settings.taskSources.statusDisabled': 'Disabled', - 'settings.taskSources.enable': 'Enable', - 'settings.taskSources.disable': 'Disable', - 'settings.taskSources.remove': 'Remove', - 'settings.taskSources.removeConfirm': - 'Remove this task source? All ingested task history will be deleted and cannot be undone.', - - 'settings.taskSources.refresh': 'Refresh', - // Task sources provider labels (#task-sources) - 'settings.taskSources.providers.github': 'GitHub', - 'settings.taskSources.providers.notion': 'Notion', - 'settings.taskSources.providers.linear': 'Linear', - 'settings.taskSources.providers.clickup': 'ClickUp', - - // /skills IA restructure (Phase 2/3) — dashboard + new-skill page. - 'skills.dashboard.title': 'Skills', - 'skills.dashboard.scheduledHeading': 'Scheduled skills', - 'skills.dashboard.emptyTitle': 'No scheduled skills', - 'skills.dashboard.emptyBody': - 'Run a bundled skill once or save a recurring schedule to see it here.', - 'skills.dashboard.create': 'Create a Skill', - 'skills.dashboard.run': 'Run a Skill', - 'skills.dashboard.enable': 'Enable scheduled skill', - 'skills.dashboard.disable': 'Disable scheduled skill', - 'skills.dashboard.lastRun': 'Last run', - 'skills.dashboard.nextRun': 'Next run', - 'skills.dashboard.cardOpenRunner': 'Open in runner', - 'skills.dashboard.loadError': 'Failed to load scheduled skills', - 'skills.new.title': 'Create a skill', - 'skills.new.placeholderBody': - 'Authoring form arrives soon. For now, use the “New skill” button on the runner page.', - 'settings.agentAccess.requireTaskPlanApproval.label': 'Require task plan approval', - 'settings.agentAccess.requireTaskPlanApproval.desc': - 'Pause before an assigned agent executes an agent-authored task brief.', -}; - -export default id5; diff --git a/app/src/lib/i18n/chunks/it-1.ts b/app/src/lib/i18n/chunks/it-1.ts deleted file mode 100644 index e7126c98d..000000000 --- a/app/src/lib/i18n/chunks/it-1.ts +++ /dev/null @@ -1,1628 +0,0 @@ -import type { TranslationMap } from '../types'; - -// Italian (Italiano) chunk 1/5. Translated from chunks/en-1.ts. -const it1: TranslationMap = { - 'nav.home': 'Home', - 'nav.human': 'Umano', - 'nav.chat': 'Chat', - 'nav.connections': 'Connessioni', - 'nav.memory': 'Intelligenza', - 'nav.alerts': 'Avvisi', - 'nav.rewards': 'Premi', - 'nav.settings': 'Impostazioni', - 'common.cancel': 'Annulla', - 'common.save': 'Salva', - 'common.confirm': 'Conferma', - 'common.delete': 'Elimina', - 'common.edit': 'Modifica', - 'common.create': 'Crea', - 'common.search': 'Cerca', - 'common.loading': 'caricamento…', - 'common.error': 'Errore', - 'common.success': 'Successo', - 'common.back': 'Indietro', - 'common.next': 'Avanti', - 'common.finish': 'Fine', - 'common.close': 'Chiudi', - 'common.enabled': 'Abilitato', - 'common.disabled': 'Disabilitato', - 'common.on': 'Attivo', - 'common.off': 'Disattivo', - 'common.yes': 'Sì', - 'common.no': 'No', - 'common.ok': 'Ok', - 'common.retry': 'Riprova', - 'common.copy': 'Copia', - 'common.copied': 'Copiato', - 'common.learnMore': 'Scopri di più', - 'common.seeAll': 'Visualizza', - 'common.dismiss': 'Ignora', - 'common.clear': 'Cancella', - 'common.reset': 'Ripristina', - 'common.refresh': 'Aggiorna', - 'common.export': 'Esporta', - 'common.import': 'Importa', - 'common.upload': 'Carica', - 'common.download': 'Scarica', - 'common.add': 'Aggiungi', - 'common.remove': 'Rimuovi', - 'common.showMore': 'Mostra di più', - 'common.showLess': 'Mostra meno', - 'common.submit': 'Invia', - 'common.continue': 'Continua', - 'common.comingSoon': 'Prossimamente', - 'settings.general': 'Generale', - 'settings.featuresAndAI': 'Funzionalità e AI', - 'settings.billingAndRewards': 'Fatturazione e premi', - 'settings.support': 'Supporto', - 'settings.advanced': 'Avanzate', - 'settings.dangerZone': 'Zona pericolosa', - 'settings.account': 'Account', - 'settings.accountDesc': 'Frase di recupero, team, connessioni e privacy', - 'settings.notifications': 'Notifiche', - 'settings.notificationsDesc': 'Non disturbare e controlli notifiche per account', - 'settings.notifications.tabs.preferences': 'Preferenze', - 'settings.notifications.tabs.routing': 'Routing', - 'settings.features': 'Funzionalità', - 'settings.featuresDesc': 'Consapevolezza schermo, messaggistica e strumenti', - 'settings.aiModels': 'AI e modelli', - 'settings.aiModelsDesc': 'Configurazione modello AI locale, download e provider LLM', - 'settings.ai': 'Configurazione AI', - 'settings.aiDesc': 'Provider cloud, modelli Ollama locali e instradamento per carico di lavoro', - 'settings.billingUsage': 'Fatturazione e utilizzo', - 'settings.billingUsageDesc': 'Piano di abbonamento, crediti e metodi di pagamento', - 'settings.rewards': 'Premi', - 'settings.rewardsDesc': 'Referral, coupon e crediti guadagnati', - 'settings.restartTour': 'Riavvia tour', - 'settings.restartTourDesc': "Riproduci la presentazione del prodotto dall'inizio", - 'settings.about': 'Informazioni', - 'settings.aboutDesc': 'Versione app e aggiornamenti software', - 'settings.developerOptions': 'Avanzate', - 'settings.developerOptionsDesc': - 'Configurazione AI, canali di messaggistica, strumenti, diagnostica e pannelli di debug', - 'settings.clearAppData': 'Cancella dati app', - 'settings.clearAppDataDesc': - "Disconnetti e cancella permanentemente tutti i dati locali dell'app", - 'settings.logOut': 'Disconnetti', - 'settings.logOutDesc': 'Disconnetti dal tuo account', - 'settings.exitLocalSession': 'Esci dalla sessione locale', - 'settings.exitLocalSessionDesc': 'Ritorna alla schermata di accesso', - 'settings.language': 'Lingua', - 'settings.languageDesc': "Lingua di visualizzazione dell'interfaccia dell'app", - 'settings.alerts': 'Avvisi', - 'settings.alertsDesc': 'Visualizza avvisi recenti e attività nella tua posta', - 'settings.account.recoveryPhrase': 'Frase di recupero', - 'settings.account.recoveryPhraseDesc': 'Visualizza e fai il backup della frase di recupero', - 'settings.account.team': 'Team', - 'settings.account.teamDesc': 'Gestisci membri del team e autorizzazioni', - 'settings.account.connections': 'Connessioni', - 'settings.account.connectionsDesc': 'Gestisci account e servizi collegati', - 'settings.account.privacy': 'Privacy', - 'settings.account.privacyDesc': 'Controlla quali dati escono dal tuo computer', - 'settings.notifications.doNotDisturb': 'Non disturbare', - 'settings.notifications.doNotDisturbDesc': - 'Metti in pausa tutte le notifiche per un periodo prefissato', - 'settings.notifications.channelControls': 'Controlli per canale', - 'settings.notifications.channelControlsDesc': - 'Configura le preferenze di notifica per ogni canale', - 'settings.features.screenAwareness': 'Consapevolezza schermo', - 'settings.features.screenAwarenessDesc': "Consenti all'assistente di vedere la finestra attiva", - 'settings.features.messaging': 'Messaggistica', - 'settings.features.messagingDesc': 'Impostazioni canale e integrazione messaggistica', - 'settings.features.tools': 'Strumenti', - 'settings.features.toolsDesc': 'Gestisci strumenti e integrazioni connessi', - 'settings.ai.localSetup': 'Configurazione AI locale', - 'settings.ai.localSetupDesc': 'Scarica e configura modelli AI locali', - 'settings.ai.llmProvider': 'Provider LLM', - 'settings.ai.llmProviderDesc': 'Scegli e configura il tuo provider AI', - 'clearData.title': 'Cancella dati app', - 'clearData.warning': - "Verrai disconnesso e i dati locali dell'app verranno eliminati permanentemente, compresi:", - 'clearData.bulletSettings': "Impostazioni e conversazioni dell'app", - 'clearData.bulletCache': 'Tutti i dati di cache delle integrazioni locali', - 'clearData.bulletWorkspace': 'Dati del workspace', - 'clearData.bulletOther': 'Tutti gli altri dati locali', - 'clearData.irreversible': 'Questa azione non può essere annullata.', - 'clearData.clearing': 'Cancellazione dati app...', - 'clearData.failed': 'Impossibile cancellare i dati ed effettuare il logout. Riprova.', - 'clearData.failedLogout': 'Impossibile effettuare il logout. Riprova.', - 'clearData.failedPersist': "Impossibile cancellare lo stato persistente dell'app. Riprova.", - 'welcome.title': 'Benvenuto in OpenHuman', - 'welcome.subtitle': - 'La tua super intelligenza AI personale. Privata, semplice ed estremamente potente.', - 'welcome.connectPrompt': 'Configura URL RPC (Avanzato)', - 'welcome.selectRuntime': 'Seleziona un runtime', - 'welcome.urlPlaceholder': 'http://localhost:8089', - 'welcome.invalidUrl': 'Inserisci un URL HTTP o HTTPS valido', - 'welcome.connecting': 'Test', - 'welcome.connect': 'Test', - 'home.greeting': 'Buongiorno', - 'home.greetingAfternoon': 'Buon pomeriggio', - 'home.greetingEvening': 'Buonasera', - 'home.askAssistant': 'Chiedi qualsiasi cosa al tuo assistente...', - 'home.statusOk': - "Il tuo dispositivo è connesso. Tieni l'app in esecuzione per mantenere la connessione attiva. Scrivi al tuo agente con il pulsante sotto.", - 'home.statusBackendOnly': 'Riconnessione al backend… il tuo agente sarà disponibile a breve.', - 'home.statusCoreUnreachable': - 'Il sidecar core locale non risponde. Il processo in background di OpenHuman potrebbe essersi bloccato o non essere partito.', - 'home.statusInternetOffline': - "Il tuo dispositivo è offline. Controlla la rete o riavvia l'app per riconnetterti.", - 'home.restartCore': 'Riavvia core', - 'home.restartingCore': 'Riavvio core…', - 'home.themeToggle.toLight': 'Passa al tema chiaro', - 'home.themeToggle.toDark': 'Passa al tema scuro', - 'chat.newThread': 'Nuovo thread', - 'chat.typeMessage': 'Scrivi un messaggio...', - 'chat.send': 'Invia messaggio', - 'chat.thinking': 'Sto pensando...', - 'chat.noMessages': 'Nessun messaggio', - 'chat.startConversation': 'Inizia una conversazione', - 'chat.regenerate': 'Rigenera', - 'chat.copyResponse': 'Copia risposta', - 'chat.citations': 'Citazioni', - 'chat.toolUsed': 'Strumento usato', - 'scope.legacy': 'Legacy', - 'scope.user': 'Utente', - 'scope.project': 'Progetto', - 'skills.title': 'Connessioni', - 'skills.search': 'Cerca connessioni...', - 'skills.noResults': 'Nessuna connessione trovata', - 'skills.connect': 'Connetti', - 'skills.disconnect': 'Disconnetti', - 'skills.configure': 'Gestisci', - 'skills.connected': 'Connesso', - 'skills.available': 'Disponibile', - 'skills.addAccount': 'Aggiungi account', - 'skills.channels': 'Canali', - 'skills.integrations': 'Integrazioni', - 'memory.title': 'Memoria', - 'memory.search': 'Cerca memorie...', - 'memory.noResults': 'Nessuna memoria trovata', - 'memory.empty': - 'Nessuna memoria ancora. Le memorie vengono create automaticamente mentre interagisci.', - 'memory.tab.memory': 'Memoria', - 'memory.tab.tasks': 'Agent Tasks', - 'memory.tab.tasksDescription': - 'Create and track tasks — your own to-dos plus the boards your agents build across conversations.', - 'memory.tab.subconscious': 'Subconscio', - 'memory.tab.dreams': 'Sogni', - 'memory.tab.calls': 'Chiamate', - 'memory.tab.diagram': 'Diagram', - 'memory.tab.settings': 'Impostazioni', - 'memory.analyzeNow': 'Analizza ora', - 'memoryTree.status.title': 'Memory Tree', - 'memoryTree.status.autoSyncLabel': 'Auto-sync', - 'memoryTree.status.autoSyncDescription': - 'Pause to stop new ingestion. Existing wiki stays queryable.', - 'memoryTree.status.statusTile': 'Status', - 'memoryTree.status.lastSyncTile': 'Last sync', - 'memoryTree.status.totalChunksTile': 'Total chunks', - 'memoryTree.status.wikiSizeTile': 'Wiki size', - 'memoryTree.status.statusRunning': 'Running', - 'memoryTree.status.statusPaused': 'Paused', - 'memoryTree.status.statusSyncing': 'Syncing', - 'memoryTree.status.statusError': 'Error', - 'memoryTree.status.statusIdle': 'Idle', - 'memoryTree.status.never': 'Never', - 'memoryTree.status.fetchError': "Couldn't fetch Memory Tree status", - 'memoryTree.status.retry': 'Retry', - 'memoryTree.status.toggleFailed': "Couldn't toggle auto-sync", - 'memoryTree.status.justNow': 'just now', - 'memoryTree.status.secondsAgo': '{count}s ago', - 'memoryTree.status.minuteAgo': '1 min ago', - 'memoryTree.status.minutesAgo': '{count} min ago', - 'memoryTree.status.hourAgo': '1 hr ago', - 'memoryTree.status.hoursAgo': '{count} hr ago', - 'memoryTree.status.dayAgo': '1 day ago', - 'memoryTree.status.daysAgo': '{count} days ago', - 'alerts.title': 'Avvisi', - 'alerts.empty': 'Nessun avviso', - 'alerts.markAllRead': 'Segna tutti come letti', - 'alerts.unread': 'non letti', - 'rewards.title': 'Premi', - 'rewards.referrals': 'Referral', - 'rewards.coupons': 'Riscatta', - 'rewards.credits': 'Crediti', - 'rewards.referralCode': 'Il tuo codice referral', - 'rewards.copyCode': 'Copia codice', - 'rewards.share': 'Condividi', - 'onboarding.welcome': 'Ciao. Sono OpenHuman.', - 'onboarding.welcomeDesc': - 'Il tuo assistente AI super intelligente che gira sul tuo computer. Privato, semplice ed estremamente potente.', - 'onboarding.context': 'Raccolta del contesto', - 'onboarding.contextDesc': 'Connetti gli strumenti e i servizi che usi ogni giorno.', - 'onboarding.localAI': 'AI locale', - 'onboarding.localAIDesc': 'Configura un modello AI locale che gira sulla tua macchina.', - 'onboarding.chatProvider': 'Provider chat', - 'onboarding.chatProviderDesc': 'Scegli come vuoi interagire con il tuo assistente.', - 'onboarding.referral': 'Codice referral', - 'onboarding.referralDesc': 'Applica un codice referral se ne hai uno.', - 'onboarding.finish': 'Termina configurazione', - 'onboarding.finishDesc': 'Tutto pronto! Inizia a usare OpenHuman.', - 'onboarding.skip': 'Salta', - 'onboarding.getStarted': 'Inizia', - 'onboarding.runtimeChoice.title': 'Come vuoi eseguire OpenHuman?', - 'onboarding.runtimeChoice.subtitle': - 'Scegli la configurazione che fa per te. Puoi cambiarla in seguito nelle Impostazioni.', - 'onboarding.runtimeChoice.cloud.title': 'Semplice', - 'onboarding.runtimeChoice.cloud.tagline': 'Lascia che OpenHuman gestisca tutto per te.', - 'onboarding.runtimeChoice.cloud.f1': 'Sicurezza integrata', - 'onboarding.runtimeChoice.cloud.f2': 'Compressione token per allungare il tuo utilizzo', - 'onboarding.runtimeChoice.cloud.f3': 'Un solo abbonamento, tutti i modelli inclusi', - 'onboarding.runtimeChoice.cloud.f4': 'Nessuna chiave API da gestire', - 'onboarding.runtimeChoice.cloud.f5': 'Configurazione semplice', - 'onboarding.runtimeChoice.custom.title': 'Esegui personalizzato', - 'onboarding.runtimeChoice.custom.tagline': 'Porta le tue chiavi. Pieno controllo di ciò che usi.', - 'onboarding.runtimeChoice.custom.f1': 'Avrai bisogno di chiavi API per quasi tutto', - 'onboarding.runtimeChoice.custom.f2': 'Riutilizza servizi che già paghi', - 'onboarding.runtimeChoice.custom.f3': 'Può essere gratis se esegui tutto localmente', - 'onboarding.runtimeChoice.custom.f4': 'Più configurazione, più parametri', - 'onboarding.runtimeChoice.custom.f5': 'Ideale per power user e sviluppatori', - 'onboarding.runtimeChoice.cloud.creditHighlight': '1$ di credito gratuito per provarlo', - 'onboarding.runtimeChoice.continueCloud': 'Continua con Semplice', - 'onboarding.runtimeChoice.continueCustom': 'Continua con Personalizzato', - 'onboarding.runtimeChoice.recommended': 'Consigliato', - 'onboarding.apiKeys.title': 'Aggiungiamo le tue chiavi API', - 'onboarding.apiKeys.subtitle': - 'Puoi incollarle ora o saltare e aggiungerle dopo in Impostazioni › AI. Le chiavi sono memorizzate su questo dispositivo, crittografate a riposo.', - 'onboarding.apiKeys.openaiLabel': 'Chiave API OpenAI', - 'onboarding.apiKeys.openaiPlaceholder': 'sk-...', - 'onboarding.apiKeys.anthropicLabel': 'Chiave API Anthropic', - 'onboarding.apiKeys.anthropicPlaceholder': 'sk-ant-...', - 'onboarding.apiKeys.saveError': 'Impossibile salvare la chiave. Controllala e riprova.', - 'onboarding.apiKeys.skipForNow': 'Salta per ora', - 'onboarding.apiKeys.continue': 'Salva e continua', - 'onboarding.apiKeys.saving': 'Salvataggio…', - 'onboarding.custom.stepperInference': 'Inferenza', - 'onboarding.custom.stepperVoice': 'Voce', - 'onboarding.custom.stepperOAuth': 'OAuth', - 'onboarding.custom.stepperSearch': 'Ricerca', - 'onboarding.custom.stepperEmbeddings': 'Embeddings', - 'onboarding.custom.stepperMemory': 'Memoria', - 'onboarding.custom.stepCounter': 'Passo {n} di {total}', - 'onboarding.custom.defaultTitle': 'Predefinito', - 'onboarding.custom.defaultSubtitle': 'Lascia che OpenHuman lo gestisca per te.', - 'onboarding.custom.configureTitle': 'Configura', - 'onboarding.custom.configureSubtitle': 'Scelgo io cosa usare.', - 'onboarding.custom.progressAriaLabel': 'Avanzamento onboarding', - 'onboarding.custom.continue': 'Continua', - 'onboarding.custom.back': 'Indietro', - 'onboarding.custom.finish': 'Termina configurazione', - 'onboarding.custom.configureLater': - "Puoi finire di configurare dopo l'onboarding. Ti porteremo alla pagina Impostazioni corrispondente al termine.", - 'onboarding.custom.openSettings': 'Apri in Impostazioni', - 'onboarding.custom.inference.title': 'Inferenza (testo)', - 'onboarding.custom.inference.subtitle': - 'Quale modello linguistico dovrebbe rispondere alle tue domande ed eseguire i tuoi agenti?', - 'onboarding.custom.inference.defaultDesc': - 'OpenHuman instrada ogni carico di lavoro a un modello predefinito sensato. Niente chiavi, niente configurazione.', - 'onboarding.custom.inference.configureDesc': - 'Porta la tua chiave OpenAI o Anthropic. La useremo per ogni carico di lavoro testuale.', - 'onboarding.custom.voice.title': 'Voce', - 'onboarding.custom.voice.subtitle': 'Speech-to-text e text-to-speech per la modalità vocale.', - 'onboarding.custom.voice.defaultDesc': - 'OpenHuman include STT/TTS gestiti che funzionano subito. Niente da configurare.', - 'onboarding.custom.voice.configureDesc': - 'Usa il tuo ElevenLabs / OpenAI Whisper / ecc. Configura in Impostazioni › Voce.', - 'onboarding.custom.oauth.title': 'Connessioni (OAuth)', - 'onboarding.custom.oauth.subtitle': - 'Gmail, Slack, Notion e altri servizi connessi che richiedono OAuth.', - 'onboarding.custom.oauth.defaultDesc': - 'OpenHuman gestisce un workspace Composio gestito. Un clic per connettere ogni servizio in seguito.', - 'onboarding.custom.oauth.configureDesc': - 'Porta il tuo account Composio / chiave API. Configura in Impostazioni › Connessioni.', - 'onboarding.custom.search.title': 'Ricerca web', - 'onboarding.custom.search.subtitle': 'Come OpenHuman cerca sul web per tuo conto.', - 'onboarding.custom.search.defaultDesc': - 'OpenHuman usa un backend di ricerca gestito. Nessuna chiave necessaria.', - 'onboarding.custom.search.configureDesc': - 'Porta la tua chiave di provider di ricerca (Tavily, Brave, ecc.). Configura in Impostazioni › Strumenti.', - 'onboarding.custom.embeddings.title': 'Embeddings', - 'onboarding.custom.embeddings.subtitle': - 'How OpenHuman generates vector embeddings for semantic memory search.', - 'onboarding.custom.embeddings.defaultDesc': - 'OpenHuman uses a managed embedding service. No API key needed.', - 'onboarding.custom.embeddings.configureDesc': - 'Bring your own embedding provider (OpenAI, Voyage, Ollama, etc.).', - 'onboarding.custom.memory.title': 'Memoria', - 'onboarding.custom.memory.subtitle': - 'Come OpenHuman ricorda il tuo contesto, le preferenze e le conversazioni precedenti.', - 'onboarding.custom.memory.defaultDesc': - "OpenHuman gestisce automaticamente l'archiviazione e il recupero della memoria. Niente da configurare.", - 'onboarding.custom.memory.configureDesc': - 'Ispeziona, esporta o cancella la memoria da solo. Configura in Impostazioni › Memoria.', - 'accounts.addAccount': 'Aggiungi account', - 'accounts.manageAccounts': 'Gestisci account', - 'accounts.noAccounts': 'Nessun account connesso', - 'accounts.connectAccount': 'Connetti un account per iniziare', - 'accounts.agent': 'Agente', - 'accounts.respondQueue': 'Coda di risposta', - 'accounts.disconnect': 'Disconnetti', - 'accounts.disconnectConfirm': 'Sei sicuro di voler disconnettere questo account?', - 'accounts.disconnectClearMemory': 'Also delete memory from this source', - 'accounts.disconnectClearMemoryHint': - 'Permanently removes local memory chunks linked to this connection.', - 'accounts.searchAccounts': 'Cerca account...', - 'channels.title': 'Canali', - 'channels.configure': 'Configura canale', - 'channels.setup': 'Configura', - 'channels.noChannels': 'Nessun canale configurato', - 'channels.addChannel': 'Aggiungi canale', - 'channels.status.connected': 'Connesso', - 'channels.status.disconnected': 'Disconnesso', - 'channels.status.error': 'Errore', - 'channels.status.configuring': 'Configurazione', - 'channels.defaultMessaging': 'Canale di messaggistica predefinito', - 'webhooks.title': 'Webhook', - 'webhooks.create': 'Crea webhook', - 'webhooks.noWebhooks': 'Nessun webhook configurato', - 'webhooks.url': 'URL', - 'webhooks.secret': 'Segreto', - 'webhooks.events': 'Eventi', - 'webhooks.archiveDirectory': 'Directory di archivio', - 'webhooks.todayFile': 'File di oggi', - 'invites.title': 'Inviti', - 'invites.create': 'Crea invito', - 'invites.noInvites': 'Nessun invito in sospeso', - 'invites.code': 'Codice invito', - 'invites.copyLink': 'Copia link', - 'devOptions.title': 'Avanzate', - 'devOptions.diagnostics': 'Diagnostica', - 'devOptions.diagnosticsDesc': 'Stato del sistema, log e metriche di performance', - 'devOptions.toolPolicyDiagnosticsDesc': - 'Tool inventory, policy posture, MCP allowlists, and recent blocks', - 'devOptions.toolPolicyDiagnostics.loading': 'Loading…', - 'devOptions.toolPolicyDiagnostics.unavailable': 'Diagnostics unavailable', - 'devOptions.toolPolicyDiagnostics.posture.title': 'Policy posture', - 'devOptions.toolPolicyDiagnostics.posture.autonomy': 'Autonomy:', - 'devOptions.toolPolicyDiagnostics.posture.workspaceOnly': 'Workspace only:', - 'devOptions.toolPolicyDiagnostics.posture.maxActionsPerHour': 'Max actions/hr:', - 'devOptions.toolPolicyDiagnostics.posture.approvalMediumRisk': 'Approval (medium risk):', - 'devOptions.toolPolicyDiagnostics.posture.blockHighRisk': 'Block high risk:', - 'devOptions.toolPolicyDiagnostics.inventory.title': 'Inventory', - 'devOptions.toolPolicyDiagnostics.inventory.totalTools': 'Total tools', - 'devOptions.toolPolicyDiagnostics.inventory.enabledTools': 'Enabled tools', - 'devOptions.toolPolicyDiagnostics.inventory.mcpStdioTools': 'MCP stdio tools', - 'devOptions.toolPolicyDiagnostics.inventory.jsonRpcTools': 'JSON-RPC tools', - 'devOptions.toolPolicyDiagnostics.mcpAllowlists.title': 'MCP allowlists', - 'devOptions.toolPolicyDiagnostics.mcpAllowlists.summary': - 'Enabled: {enabled} · Servers: {enabledCount}/{totalCount}', - 'devOptions.toolPolicyDiagnostics.mcpAllowlists.unnamed': '', - 'devOptions.toolPolicyDiagnostics.mcpAllowlists.allowDeny': 'allow={allowCount} deny={denyCount}', - 'devOptions.toolPolicyDiagnostics.mcpWriteAudit.title': 'MCP write audit', - 'devOptions.toolPolicyDiagnostics.mcpWriteAudit.summary': - 'Enabled: {enabled} · Recent (24h): {recentRows}', - 'devOptions.toolPolicyDiagnostics.recentBlocked.title': 'Recent blocked calls', - 'devOptions.toolPolicyDiagnostics.recentBlocked.empty': 'No blocked calls recorded.', - 'devOptions.toolPolicyDiagnostics.redactedSurfaces.title': 'Redacted surfaces', - 'devOptions.toolPolicyDiagnostics.redactedSurfaces.summary': - 'Write-capable: {writeCount} · Policy surfaces: {policyCount}', - 'devOptions.debugPanels': 'Pannelli di debug', - 'devOptions.debugPanelsDesc': 'Feature flag, ispezione dello stato e strumenti di debug', - 'devOptions.webhooks': 'Webhook', - 'devOptions.webhooksDesc': 'Configura e testa le integrazioni webhook', - 'devOptions.memoryInspection': 'Ispezione memoria', - 'devOptions.memoryInspectionDesc': 'Esplora, interroga e gestisci le voci di memoria', - 'voice.pushToTalk': 'Push to talk', - 'voice.recording': 'Registrazione...', - 'voice.processing': 'Elaborazione...', - 'voice.languageHint': 'Lingua', - 'misc.rehydrating': 'Caricamento dei tuoi dati...', - 'misc.checkingServices': 'Verifica servizi...', - 'misc.serviceUnavailable': 'Servizio non disponibile', - 'misc.somethingWentWrong': 'Qualcosa è andato storto', - 'misc.tryAgainLater': 'Riprova più tardi.', - 'misc.restartApp': 'Riavvia app', - 'misc.updateAvailable': 'Aggiornamento disponibile', - 'misc.updateNow': 'Aggiorna ora', - 'misc.updateLater': 'Più tardi', - 'misc.downloading': 'Download in corso...', - 'misc.installing': 'Installazione...', - 'misc.beta': - 'OpenHuman è in beta iniziale. Sentiti libero di condividere feedback o segnalare bug che incontri — ogni segnalazione ci aiuta a rilasciare più velocemente.', - 'misc.betaFeedback': 'Invia feedback', - 'mnemonic.title': 'Frase di recupero', - 'mnemonic.warning': 'Scrivi queste parole in ordine e conservale in un luogo sicuro.', - 'mnemonic.copyWarning': - 'Non condividere mai la tua frase di recupero. Chiunque abbia queste parole può accedere al tuo account.', - 'mnemonic.copied': 'Frase di recupero copiata negli appunti', - 'mnemonic.reveal': 'Mostra frase', - 'mnemonic.revealPhrase': 'Reveal recovery phrase', - 'mnemonic.hidden': 'La frase di recupero è nascosta', - 'privacy.title': 'Privacy e sicurezza', - 'privacy.description': 'Report di trasparenza sui dati inviati a servizi esterni.', - 'privacy.empty': 'Nessun trasferimento di dati esterno rilevato.', - 'privacy.whatLeavesComputer': 'Cosa esce dal tuo computer', - 'privacy.loading': 'Caricamento dettagli privacy...', - 'privacy.loadError': - "Impossibile caricare l'elenco privacy in tempo reale. I controlli analytics sottostanti funzionano comunque.", - 'privacy.noCapabilities': 'Nessuna capacità attualmente divulga movimenti di dati.', - 'privacy.sentTo': 'Inviato a', - 'privacy.leavesDevice': 'Esce dal dispositivo', - 'privacy.staysLocal': 'Rimane locale', - 'privacy.anonymizedAnalytics': 'Analisi anonimizzate', - 'privacy.shareAnonymizedData': 'Condividi dati di utilizzo anonimizzati', - 'privacy.shareAnonymizedDataDesc': - 'Aiuta a migliorare OpenHuman condividendo report di crash anonimi e analisi di utilizzo. Tutti i dati sono completamente anonimizzati — nessun dato personale, messaggio, chiave wallet o informazione di sessione viene mai raccolto.', - 'privacy.meetingFollowUps': 'Follow-up delle riunioni', - 'privacy.autoHandoffMeet': - "Trasferimento automatico delle trascrizioni Google Meet all'orchestratore", - 'privacy.autoHandoffMeetDesc': - "Quando termina una chiamata Google Meet, l'orchestratore di OpenHuman può leggere la trascrizione e svolgere azioni come redigere messaggi, pianificare follow-up o pubblicare riassunti nel tuo workspace Slack connesso. Disattivato di default.", - 'privacy.analyticsDisclaimer': - 'Tutti i report analitici e bug sono completamente anonimi. Quando abilitati, raccogliamo solo informazioni sui crash, tipo di dispositivo e percorso file degli errori. Non accediamo mai ai tuoi messaggi, dati di sessione, chiavi del wallet, chiavi API o informazioni personali identificabili. Puoi cambiare questa impostazione in qualsiasi momento.', - 'settings.about.version': 'Versione', - 'settings.about.updateAvailable': 'è disponibile', - 'settings.about.softwareUpdates': 'Aggiornamenti software', - 'settings.about.lastChecked': 'Ultima verifica', - 'settings.about.checking': 'Verifica in corso...', - 'settings.about.checkForUpdates': 'Verifica aggiornamenti', - 'settings.about.releases': 'Release', - 'settings.about.releasesDesc': 'Sfoglia le note di rilascio e le build precedenti su GitHub.', - 'settings.about.openReleases': 'Apri release GitHub', - 'settings.ai.overview': 'Panoramica sistema AI', - 'migration.title': 'Importa da un altro assistente', - 'migration.description': - 'Migra memoria e note da un altro assistente locale in questo spazio di lavoro. Inizia con Anteprima per vedere esattamente cosa cambierebbe, poi premi Applica per copiare i dati. La memoria attuale viene salvata in backup per prima.', - 'migration.vendorLabel': 'Provider di origine', - 'migration.sourceLabel': 'Percorso dello spazio di lavoro di origine (facoltativo)', - 'migration.sourcePlaceholder': - 'Lascia vuoto per rilevamento automatico (es. ~/.openclaw/workspace)', - 'migration.sourcePlaceholderHermes': 'Leave blank to auto-detect (e.g. ~/.hermes)', - 'migration.sourceHint': - 'Vuoto usa la posizione predefinita del provider. Inserisci un percorso esplicito se hai spostato lo spazio di lavoro.', - 'migration.previewAction': 'Anteprima', - 'migration.previewRunning': 'Anteprima in corso…', - 'migration.applyAction': "Applica l'import", - 'migration.applyRunning': 'Importazione in corso…', - 'migration.applyDisclaimer': - "Applica si sblocca dopo un'Anteprima riuscita della stessa origine. La memoria esistente viene salvata in backup prima di qualsiasi import.", - 'migration.reportTitlePreview': 'Anteprima — nessun import effettuato', - 'migration.reportTitleApplied': 'Importazione completata', - 'migration.report.source': 'Spazio di lavoro di origine', - 'migration.report.target': 'Spazio di lavoro di destinazione', - 'migration.report.fromSqlite': 'Da SQLite (brain.db)', - 'migration.report.fromMarkdown': 'Da Markdown', - 'migration.report.imported': 'Importati', - 'migration.report.skippedUnchanged': 'Saltati (non modificati)', - 'migration.report.renamedConflicts': 'Rinominati in caso di conflitto', - 'migration.report.warnings': 'Avvisi', - 'migration.report.previewHint': - "Nessun dato è ancora stato importato. Premi Applica l'import per copiarlo.", - 'migration.report.appliedHint': - 'Le voci importate sono ora nella tua memoria. Riesegui Anteprima per confrontare di nuovo.', - 'migration.confirmImport.singular': - "Importare {count} voce nello spazio di lavoro attuale?\n\nOrigine: {source}\nDestinazione: {target}\n\nLa memoria esistente verrà salvata in backup prima dell'import.", - 'migration.confirmImport.plural': - "Importare {count} voci nello spazio di lavoro attuale?\n\nOrigine: {source}\nDestinazione: {target}\n\nLa memoria esistente verrà salvata in backup prima dell'import.", - // Settings menu: Appearance + Mascot (#2225) — English stubs; native translations welcome - 'settings.appearance': 'Aspetto', - 'settings.appearanceDesc': 'Scegli la luce, scuro o abbina il tema del tuo sistema', - 'settings.mascot': 'Mascotte', - 'settings.mascotDesc': 'Pick the mascot color used across the app', - 'channels.authMode.managed_dm': 'Accedi con OpenHuman', - 'channels.authMode.oauth': 'OAuth Accedi', - 'channels.authMode.bot_token': 'Usa il tuo token Bot', - 'channels.authMode.api_key': 'Usa la tua chiave API', - 'channels.fieldRequired': '{field} è richiesto', - 'channels.mcp.title': 'MCP Server', - 'channels.mcp.description': - 'Browse and manage Model Context Protocol servers that extend the AI with new tools.', - 'skills.integrationsSubtitle': - 'Cloud-based OAuth connections — sign in with your account and Composio brokers the tokens so agents can read and act on your behalf. No API keys to manage.', - 'skills.tabs.composio': 'Composio', - 'skills.tabs.channels': 'Canali', - 'skills.tabs.mcp': 'MCP Server', - 'skills.mcpComingSoon.title': 'MCP Server', - 'skills.mcpComingSoon.description': - 'MCP server management is coming soon. This tab will be the home for discovering, connecting, and monitoring your MCP server integrations.', - 'settings.about.connection': 'Connessione', - 'settings.about.connectionMode': 'Modalità', - 'settings.about.connectionModeLocal': 'Locale', - 'settings.about.connectionModeCloud': 'Cloud', - 'settings.about.connectionModeUnset': 'Non selezionato', - 'settings.about.serverUrl': 'Server URL', - 'settings.about.serverUrlUnavailable': 'Non disponibile', - 'settings.about.connectionHelperLocal': - 'Spawned in-process by the Tauri shell on app launch. The port is chosen at startup, so this URL changes between launches.', - 'settings.about.connectionHelperCloud': - 'Connected to a remote core. Change this in BootCheck or the cloud mode picker.', - 'settings.heartbeat.title': 'Heartbeat e loop', - 'settings.heartbeat.desc': 'Control background scheduling cadences and inspect the loop map.', - 'settings.ledgerUsage.title': 'Registro di utilizzo', - 'settings.ledgerUsage.desc': 'Recent credit spend, budget math, and background API read budget.', - 'settings.costDashboard.title': 'Cost dashboard', - 'settings.costDashboard.desc': - '7-day spend and token burn across the swarm, with budget pace and per-model breakdown.', - 'settings.costDashboard.sevenDayCost': '7-day daily cost', - 'settings.costDashboard.sevenDayTokens': '7-day token usage', - 'settings.costDashboard.totalSpend': '7-day total', - 'settings.costDashboard.monthlyPace': 'Monthly pace', - 'settings.costDashboard.budgetLimit': 'Budget limit', - 'settings.costDashboard.utilization': 'Utilisation', - 'settings.costDashboard.modelBreakdown': 'Per-model breakdown', - 'settings.costDashboard.model': 'Model', - 'settings.costDashboard.provider': 'Provider', - 'settings.costDashboard.cost': 'Cost', - 'settings.costDashboard.tokens': 'Tokens', - 'settings.costDashboard.requests': 'Requests', - 'settings.costDashboard.percentOfTotal': '% of total', - 'settings.costDashboard.inputTokens': 'Input', - 'settings.costDashboard.outputTokens': 'Output', - 'settings.costDashboard.budgetNormal': 'On track', - 'settings.costDashboard.budgetWarning': 'Warning', - 'settings.costDashboard.budgetExceeded': 'Over budget', - 'settings.costDashboard.noBudget': 'No limit set', - 'settings.costDashboard.noData': 'No cost recorded yet for the last 7 days.', - 'settings.costDashboard.noModels': 'No model activity in the last 7 days.', - 'settings.costDashboard.loading': 'Loading cost dashboard…', - 'settings.costDashboard.disabledHint': - 'Cost dashboard is disabled in config. Set [cost.dashboard] enabled = true in config.toml to re-enable.', - 'settings.costDashboard.subtitle': - 'Live spend and token burn across the swarm. Bars auto-refresh every few seconds — no page reload needed.', - 'settings.costDashboard.summaryAriaLabel': 'Cost summary metrics', - 'settings.costDashboard.lastSevenDays': 'last 7 days', - 'settings.costDashboard.utilizationOf': 'of', - 'settings.costDashboard.thisMonth': 'this month', - 'settings.costDashboard.monthlyPaceHint': - 'Projected monthly spend at the current daily run-rate (avg × 30).', - 'settings.costDashboard.budgetLimitHint': - 'Monthly budget read from cost.monthly_limit_usd in config.toml.', - 'settings.costDashboard.dailyTarget': 'Daily target', - 'settings.costDashboard.today': 'Today', - 'settings.costDashboard.todayBadge': 'TODAY', - 'settings.costDashboard.unknownProvider': '—', - 'settings.costDashboard.justNow': 'Just now', - 'settings.costDashboard.secondsAgo': '{value}s ago', - 'settings.costDashboard.minutesAgo': '{value}m ago', - 'settings.costDashboard.hoursAgo': '{value}h ago', - 'settings.costDashboard.daysAgo': '{value}d ago', - 'settings.costDashboard.updated': 'Updated', - 'settings.costDashboard.refresh': 'Refresh', - 'settings.costDashboard.utcNote': 'Days bucketed in UTC', - 'settings.costDashboard.stackedNote': 'Input + output stacked', - 'settings.costDashboard.modelBreakdownHint': 'Aggregated across the last 7 days.', - 'settings.costDashboard.noDataHint': - 'Send an agent message — token usage from the next provider call will populate the chart within ~10 seconds.', - 'settings.search.title': 'Motore di ricerca', - 'settings.search.menuDesc': - 'Default to OpenHuman-managed search or wire up your own provider with an API key.', - 'settings.search.description': - 'Pick the search engine the agent uses. Managed uses OpenHuman’s backend (no setup). Parallel and Brave run direct from your machine using your API key.', - 'settings.search.engineAria': 'Motore di ricerca', - 'settings.search.engineManagedLabel': 'OpenHuman Gestito', - 'settings.search.engineManagedDesc': - 'Default. Routed through the OpenHuman backend — no API key required.', - 'settings.search.engineParallelLabel': 'Parallel', - 'settings.search.engineParallelDesc': - 'Direct Parallel API: search, extract, chat, research, enrich, dataset tools.', - 'settings.search.engineBraveLabel': 'Brave Cerca', - 'settings.search.engineBraveDesc': 'Direct Brave Search API: web, news, image, and video tools.', - 'settings.search.engineQueritLabel': 'Querit', - 'settings.search.engineQueritDesc': - 'Direct Querit API: web search with site, time range, country, and language filters.', - 'settings.search.statusConfigured': 'Configurato', - 'settings.search.statusNeedsKey': 'Richiede la chiave API', - 'settings.search.fallbackToManaged': - 'No key configured — search will fall back to Managed until a key is saved.', - 'settings.search.getApiKey': 'Ottieni chiave API', - 'settings.search.save': 'Salva', - 'settings.search.clear': 'Cancella', - 'settings.search.show': 'Mostra', - 'settings.search.hide': 'Nascondi', - 'settings.search.statusSaving': 'Salvataggio...', - 'settings.search.statusSaved': 'Salvato.', - 'settings.search.statusError': 'Non riuscito', - 'settings.search.parallelKeyLabel': 'Parallel API chiave', - 'settings.search.braveKeyLabel': 'Brave Cerca chiave API', - 'settings.search.queritKeyLabel': 'Querit API key', - 'settings.search.placeholderStored': '•••••••• (memorizzato)', - 'settings.search.placeholderParallel': 'pk_...', - 'settings.search.placeholderBrave': 'BSA...', - 'settings.search.placeholderQuerit': 'Querit API key', - 'settings.embeddings.title': 'Incorporamenti', - 'settings.embeddings.description': - 'Scegli il fornitore di embeddings che converte la memoria in vettori per la ricerca semantica. Cambiare fornitore, modello o dimensioni invalida i vettori memorizzati e richiede un reset completo della memoria.', - 'settings.embeddings.providerAria': 'Fornitore di embeddings', - 'settings.embeddings.statusConfigured': 'Configurato', - 'settings.embeddings.statusNeedsKey': 'Chiave API necessaria', - 'settings.embeddings.apiKeyLabel': 'Chiave API {provider}', - 'settings.embeddings.placeholderStored': '•••••••• (memorizzato)', - 'settings.embeddings.placeholderKey': 'Incolla la tua chiave API…', - 'settings.embeddings.keyStoredEncrypted': - 'La tua chiave API è memorizzata crittografata su questo dispositivo.', - 'settings.embeddings.show': 'Mostra', - 'settings.embeddings.hide': 'Nascondi', - 'settings.embeddings.save': 'Salva', - 'settings.embeddings.clear': 'Cancella', - 'settings.embeddings.model': 'Modello', - 'settings.embeddings.dimensions': 'Dimensioni', - 'settings.embeddings.customEndpoint': 'Endpoint personalizzato', - 'settings.embeddings.customModelPlaceholder': 'Nome modello', - 'settings.embeddings.customDimsPlaceholder': 'Dim', - 'settings.embeddings.applyCustom': 'Applica', - 'settings.embeddings.testConnection': 'Testa connessione', - 'settings.embeddings.testing': 'Test in corso…', - 'settings.embeddings.testSuccess': 'Connesso — {dims} dimensioni', - 'settings.embeddings.testFailed': 'Fallito: {error}', - 'settings.embeddings.saving': 'Salvataggio…', - 'settings.embeddings.saved': 'Salvato.', - 'settings.embeddings.errorPrefix': 'Fallito', - 'settings.embeddings.wipeTitle': 'Resettare i vettori della memoria?', - 'settings.embeddings.wipeBody': - 'Cambiare il fornitore di embeddings, il modello o le dimensioni cancellerà tutti i vettori della memoria. La memoria deve essere ricostruita prima che il recupero funzioni di nuovo. Questa operazione non può essere annullata.', - 'settings.embeddings.cancel': 'Annulla', - 'settings.embeddings.confirmWipe': 'Cancella e applica', - 'settings.embeddings.setupTitle': 'Configura {provider}', - 'settings.embeddings.saveAndSwitch': 'Salva e cambia', - 'settings.embeddings.optional': 'opzionale', - 'settings.embeddings.vectorSearchDisabled': - 'Vector search is disabled. Memory recall will use keyword matching and recency only — no semantic ranking.', - 'settings.embeddings.clearKey': 'Cancella chiave API', - 'mcp.alphaBadge': 'Alfa', - 'mcp.alphaBannerText': - 'MCP server support is in early alpha. The Smithery registry, install flow, and tool wiring may misbehave or change shape between releases.', - 'mcp.toolList.noTools': 'Nessuno strumento disponibile.', - 'mcp.setup.secretDialog.title': 'MCP Configurazione: inserisci il segreto', - 'mcp.setup.secretDialog.bodyPrefix': 'The MCP setup agent needs', - 'mcp.setup.secretDialog.bodySuffix': - '. Your value is sent directly to the core process and never enters the AI conversation.', - 'mcp.setup.secretDialog.inputLabel': 'Valore', - 'mcp.setup.secretDialog.inputPlaceholder': 'Incolla qui', - 'mcp.setup.secretDialog.show': 'Mostra', - 'mcp.setup.secretDialog.hide': 'Nascondi', - 'mcp.setup.secretDialog.submit': 'Invia', - 'mcp.setup.secretDialog.cancel': 'Annulla', - 'mcp.setup.secretDialog.submitting': 'Invio in corso...', - 'mcp.setup.secretDialog.errorPrefix': 'Impossibile inviare:', - 'mcp.setup.secretDialog.privacyNote': - 'Stored encrypted in the local MCP secrets table. Never logged or sent to a model.', - 'devices.betaBadge': 'Beta', - 'devices.betaText': - 'This feature is currently in beta. Pair iOS phones with this OpenHuman to use them as a remote client.', - 'autonomy.title': 'Agent autonomy', - 'autonomy.maxActionsLabel': 'Max actions per hour', - 'autonomy.maxActionsHelp': - 'Maximum tool actions an agent can run per rolling hour. New value applies to your next chat. Cron jobs and channel listeners keep their current limit until you restart OpenHuman.', - 'autonomy.statusSaving': 'Salvataggio…', - 'autonomy.statusSaved': 'Salvato.', - 'autonomy.statusFailed': 'Non riuscito', - 'autonomy.unlimitedNote': 'Illimitato: limitazione della velocità disabilitata.', - 'autonomy.invalidIntegerMsg': - 'Must be a positive integer (use the Unlimited preset for no limit).', - 'autonomy.presetUnlimited': 'Illimitato (predefinito)', - 'triggers.toggleFailed': '{action} non riuscito per {trigger}: {message}', - 'skills.composio.noApiKeyTitle': 'Nessuna chiave Composio API configurata', - 'skills.composio.noApiKeyDescription': - 'Local mode uses your own Composio API key. Open Settings → Advanced → Composio to add one before connecting integrations here.', - 'skills.composio.noApiKeyCta': 'Apri in Impostazioni', - 'rewards.localUnavailable': - 'Local login does not earn rewards, coupons, or referral credit. To earn rewards, log out and continue by signing in with an OpenHuman account.', - 'rewards.localUnavailableCta': 'Apri impostazioni account', - 'channels.localManagedUnavailable': 'Managed channels are not available for local users.', - 'settings.search.localManagedUnavailable': - 'OpenHuman Managed search is not available for local users. Add your own Parallel, Brave, or Querit API key to enable web search.', - 'devices.comingSoonDescription': - 'Device pairing is coming soon. This page will be the home for pairing iPhones and managing connected devices.', - 'common.breadcrumb': 'Percorso di navigazione', - 'settings.betaBuild': 'Build beta - v{version}', - 'migration.vendor.openclaw': 'OpenClaw', - 'migration.vendor.hermes': 'Hermes Agent', - 'onboarding.apiKeys.openaiOauthHint': - 'Usa ChatGPT Plus/Pro (abbonamento) oppure una chiave API OpenAI: non servono entrambi.', - 'onboarding.apiKeys.openaiOauthOpening': 'Apertura accesso…', - 'onboarding.apiKeys.finishSignIn': "Completa l'accesso a ChatGPT", - 'onboarding.apiKeys.orApiKey': 'oppure chiave API', - 'calls.title': 'Chiamate', - 'calls.comingSoonBody': 'Le chiamate assistite dall’IA arriveranno presto. Resta sintonizzato.', - 'rewards.referralSection.retry': 'Riprova', - 'devOptions.sentryDisabled': '(nessun ID — Sentry è disabilitato in questa build)', - 'home.usageExhaustedTitle': 'Hai esaurito il tuo utilizzo', - 'home.usageExhaustedBody': - 'Hai esaurito per ora l’utilizzo incluso. Avvia un abbonamento per sbloccare più capacità continuativa.', - 'home.usageExhaustedCta': 'Attiva un abbonamento', - 'home.routinesCard': 'Your Routines', - 'home.routinesActive': '{count} active', - 'routines.title': 'Your Routines', - 'routines.subtitle': 'Things your assistant does automatically', - 'routines.loading': 'Loading routines…', - 'routines.empty': 'No routines yet', - 'routines.emptyHint': - 'Your assistant can run tasks on a schedule — like morning briefings or daily summaries.', - 'routines.refresh': 'Refresh', - 'routines.nextRun': 'Next run', - 'routines.lastRunSuccess': 'Last run succeeded', - 'routines.lastRunFailed': 'Last run failed', - 'routines.notRunYet': 'Not run yet', - 'routines.runNow': 'Run Now', - 'routines.running': 'Running…', - 'routines.viewHistory': 'View history', - 'routines.loadingHistory': 'Loading…', - 'routines.noHistory': 'No run history yet.', - 'routines.statusSuccess': 'Success', - 'routines.statusError': 'Error', - 'routines.showOutput': 'Show output', - 'routines.hideOutput': 'Hide output', - 'routines.toggleEnabled': 'Enable or disable this routine', - 'routines.typeAgent': 'Agent', - 'routines.typeCommand': 'Command', - 'nav.routines': 'Routines', - 'common.name': 'Nome', - 'settings.ai.disconnectProvider': 'Disconnetti {label}', - 'settings.ai.connectProviderLabel': 'Connetti {label}', - 'settings.ai.defaultLocalEndpoint': 'http://localhost:11434/v1', - 'settings.ai.endpointUrlLabel': 'Endpoint URL', - 'settings.ai.localRuntimeHelper': - 'Where {label} is reachable. Default is localhost; point this at a remote host (for example, http://10.0.0.4:11434/v1) to use a shared instance.', - 'settings.ai.endpointUrlRequired': 'Endpoint URL is required.', - 'settings.ai.endpointProtocolRequired': 'Endpoint must start with http:// or https://.', - 'settings.ai.connectProviderDialog': 'Connetti {label}', - 'settings.ai.or': 'Oppure', - 'settings.ai.openRouterOauthDescription': - 'Sign in with OpenRouter and import a user-controlled API key using PKCE.', - 'settings.ai.connecting': 'Connessione in corso...', - 'settings.ai.backgroundLoops': 'Loop in background', - 'settings.ai.backgroundLoopsDesc': - 'See what runs without a chat message, pause heartbeat work, and inspect recent credit ledger rows.', - 'settings.ai.heartbeatControls': 'Controlli del battito cardiaco', - 'settings.ai.heartbeatControlsDesc': - 'Defaults off. Enabling starts the loop; disabling aborts the running task.', - 'settings.ai.heartbeatLoop': 'Heartbeat loop', - 'settings.ai.heartbeatLoopDesc': - 'Master scheduler for planner + optional subconscious inference.', - 'settings.ai.subconsciousInference': 'Inferenza subconscia', - 'settings.ai.subconsciousInferenceDesc': - 'Runs model-backed task/reflection evaluation on heartbeat ticks.', - 'settings.ai.calendarMeetingChecks': 'Controlli delle riunioni del calendario', - 'settings.ai.calendarMeetingChecksDesc': - 'Calls calendar event list for active Google Calendar connections.', - 'settings.ai.calendarCap': 'Limite calendario', - 'settings.ai.connectionsPerTick': '{count} conn/tick', - 'settings.ai.meetingLookahead': 'Previsione riunione', - 'settings.ai.minutesShort': '{count} min', - 'settings.ai.reminderLookahead': 'Previsione promemoria', - 'settings.ai.cronReminderChecks': 'Controlli del promemoria cron', - 'settings.ai.cronReminderChecksDesc': 'Scans enabled cron jobs for reminder-like upcoming items.', - 'settings.ai.relevantNotificationChecks': 'Controlli delle notifiche pertinenti', - 'settings.ai.relevantNotificationChecksDesc': - 'Promotes urgent local notifications into proactive alerts.', - 'settings.ai.externalDelivery': 'Consegna esterna', - 'settings.ai.externalDeliveryDesc': - 'Lets heartbeat alerts send proactive messages to external channels.', - 'settings.ai.interval': 'Intervallo', - 'settings.ai.running': 'In esecuzione...', - 'settings.ai.plannerTickNow': 'Pianificatore seleziona ora', - 'settings.ai.loadingHeartbeatControls': 'Caricamento controlli heartbeat...', - 'settings.ai.heartbeatControlsUnavailable': 'Controlli heartbeat non disponibili.', - 'settings.ai.loopMap': 'Mappa del ciclo', - 'settings.ai.on': 'on', - 'settings.ai.off': 'off', - 'settings.ai.recentUsageLedger': 'Registro utilizzo recente', - 'settings.ai.recentUsageLedgerDesc': - 'Backend rows expose action/time today; source tags need backend support.', - 'settings.ai.openhumanDefault': 'OpenHuman (predefinito)', - 'settings.ai.localModelResolved': 'Ollama · {model}', - 'settings.ai.customRoutingForWorkload': 'Routing personalizzato per {label}', - 'settings.ai.loadingModels': 'Caricamento modelli...', - 'settings.ai.enterModelIdManually': 'or enter model id manually:', - 'settings.ai.modelIdPlaceholderForProvider': '{slug} ID modello', - 'settings.ai.modelIdPlaceholder': 'model-id', - 'settings.ai.selectModel': 'Seleziona un modello...', - 'settings.ai.temperatureOverride': 'Ignora temperatura', - 'settings.ai.temperatureOverrideSlider': 'Ignora temperatura (cursore)', - 'settings.ai.temperatureOverrideValue': 'Ignora temperatura (valore)', - 'settings.ai.temperatureOverrideDesc': - 'Lower = more deterministic. Leave unchecked to use the provider default.', - 'settings.ai.testFailed': 'Test non riuscito', - 'settings.ai.testingModel': 'Test del modello...', - 'settings.ai.modelResponse': 'Risposta del modello', - 'settings.ai.providerWithValue': 'Fornitore: {value}', - 'settings.ai.noneDash': '—', - 'settings.ai.promptHelloWorld': 'Prompt: Ciao mondo', - 'settings.ai.startedAt': 'Avviato: {value}', - 'settings.ai.waitingForModelResponse': 'In attesa di risposta dal modello selezionato...', - 'settings.ai.response': 'Risposta', - 'settings.ai.testing': 'Test...', - 'settings.ai.test': 'Test', - 'settings.ai.slugMissingError': 'Immettere il nome di un provider per generare uno slug.', - 'settings.ai.slugInUseError': 'Il nome del provider è già in uso.', - 'settings.ai.slugReservedError': 'Scegli un nome provider diverso.', - 'settings.ai.providerNamePlaceholder': 'Il mio provider', - 'settings.ai.slugLabel': 'Slug:', - 'settings.ai.openAiUrlLabel': 'OpenAI URL', - 'settings.ai.openAiUrlPlaceholder': 'https://api.openai.com/v1', - 'settings.ai.keepExistingKeyPlaceholder': 'Lascia vuoto per mantenere la chiave esistente', - 'settings.ai.reindexingMemory': 'Reindicizzazione della memoria', - 'settings.ai.reindexingMemoryMessage': - 'Embeddings are being reprocessed. {pending} memory item(s) are being re-embedded under the current model — semantic recall is reduced until this finishes. Keyword search keeps working, and re-embedding continues in the background if you close this.', - 'settings.ai.signInWithOpenRouter': 'Accedi con OpenRouter', - 'settings.ai.weekBudget': 'Budget settimanale', - 'settings.ai.cycleRemaining': 'Ciclo rimanente', - 'settings.ai.cycleTotalSpend': 'Ciclo di spesa totale', - 'settings.ai.avgSpendRow': 'Riga di spesa media', - 'settings.ai.backgroundApiReads': 'Bg API letture', - 'settings.ai.backgroundWakeups': 'Risvegli Bg', - 'settings.ai.budgetMath': 'Matematica del budget', - 'settings.ai.rowsLeft': 'Righe rimaste', - 'settings.ai.rowsPerFullWeekBudget': 'Righe per budget settimanale intero', - 'settings.ai.sampleBurnRate': 'Velocità di combustione del campione', - 'settings.ai.projectedEmpty': 'Vuoto previsto', - 'settings.ai.apiReadsPerDollarRemaining': 'API letture per $ rimanenti', - 'settings.ai.loopCallBudget': 'Budget delle chiamate in loop', - 'settings.ai.heartbeatTicks': 'Tick del battito cardiaco', - 'settings.ai.calendarPlannerCalls': 'Chiamate del pianificatore del calendario', - 'settings.ai.calendarFanoutCap': 'Limite fanout del calendario', - 'settings.ai.subconsciousModelCalls': 'Chiamate del modello subconscio', - 'settings.ai.composioSyncScans': 'Composio scansioni di sincronizzazione', - 'settings.ai.totalBackgroundApiReadBudget': 'Totale bg API budget letto', - 'settings.ai.memoryWorkerPolls': 'Sondaggi del Memory Worker', - 'settings.ai.defaultProviderName': 'OpenHuman', - 'settings.ai.routing.managed': 'Gestiti', - 'settings.ai.routing.managedDesc': - 'OpenHuman will run all inference in the cloud, choose the best model for the task, optimize for cost, and keep the safest routing defaults.', - 'settings.ai.routing.managedMsg': - 'OpenHuman will handle all inference for every workload and automatically choose the best route for cost, quality, and security.', - 'settings.ai.routing.useYourOwn': 'Utilizza i tuoi modelli', - 'settings.ai.routing.useYourOwnDesc': - 'Choose one provider + model and route every workload through it. This is simple, but it can be inefficient because lightweight and heavyweight inference all share the same route.', - 'settings.ai.routing.advanced': 'Avanzato', - 'settings.ai.routing.advancedDesc': - 'Pick different models for different tasks. This is the best option for tight cost optimization and the most control.', - 'settings.ai.routing.customDesc': - 'Fine-grained routing gives you the best cost optimization and the most control. Use the rows below to decide which workloads stay Managed, which use your shared default, and which pin to a specific model.', - 'settings.ai.routing.chatAndConversations': 'Chat e conversazioni', - 'settings.ai.routing.chatDesc': - 'Models used during direct user interaction, replies, reasoning, agent loops, and coding help.', - 'settings.ai.routing.backgroundTasks': 'Attività in background', - 'settings.ai.routing.bgTasksDesc': - 'Models used outside the main conversation flow for summarization, heartbeat, learning, and subconscious evaluation.', - 'settings.ai.routing.addCustomProvider': 'Aggiungi provider personalizzato', - 'settings.ai.globalModel.title': 'Scegli un modello per tutto', - 'settings.ai.globalModel.desc': - 'This routes all inference through one model. It is simpler, but it can be inefficient for cost and quality because lightweight and heavy tasks will all use the same route.', - 'settings.ai.globalModel.noProviders': - 'Add or connect a provider first. Then you can route every workload through one model here.', - 'settings.ai.globalModel.provider': 'Provider', - 'settings.ai.globalModel.model': 'Modello', - 'settings.ai.globalModel.loadingModels': 'Caricamento modelli…', - 'settings.ai.globalModel.enterModelId': 'Inserisci ID modello', - 'settings.ai.globalModel.appliesToAll': - 'Applies the same provider + model to chat, reasoning, coding, memory, heartbeat, learning, and subconscious. Embeddings are configured separately. Changes save when you click save.', - 'settings.ai.globalModel.saving': 'Salvataggio…', - 'settings.ai.globalModel.saved': 'Salvato', - 'settings.ai.workload.noModel': 'Nessun modello selezionato', - 'settings.ai.workload.changeModel': 'Cambia modello', - 'settings.ai.workload.chooseModel': 'Scegli modello', - 'settings.ai.provider.ollama': 'Ollama', - 'kbd.ariaLabel': 'Scorciatoia da tastiera: {shortcut}', - 'chat.modelPlaceholder': 'gpt-4o', - 'iosPair.title': 'Accoppia con il tuo desktop', - 'iosPair.instructions': - 'Open OpenHuman on your desktop, go to Settings > Devices, and tap "Pair phone" to show the QR code.', - 'iosPair.scanQrCode': 'Scansione QR code', - 'iosPair.scannerOpening': 'Apertura scanner...', - 'iosPair.connecting': 'Connessione al desktop...', - 'iosPair.connectedLoading': 'Connesso! Caricamento...', - 'iosPair.expired': 'QR code scaduto. Chiedi al desktop di rigenerare il codice.', - 'iosPair.desktopLabel': 'Desktop', - 'iosPair.retryScan': 'Riprova la scansione', - 'iosPair.step.openDesktop': 'Apri OpenHuman sul desktop', - 'iosPair.step.openSettings': 'Vai a Impostazioni > Dispositivi', - 'iosPair.step.showQr': 'Tocca "Accoppia telefono" per visualizzare QR', - 'iosPair.error.camera': 'Camera scan failed. Check camera permissions and try again.', - 'iosPair.error.invalidQr': - 'Invalid QR code. Make sure you are scanning an OpenHuman pairing code.', - 'iosPair.error.unreachableDesktop': - 'Could not reach the desktop. Make sure both devices are online and try again.', - 'iosPair.error.connectionFailed': - 'Connection failed. Make sure the desktop app is running and try again.', - 'iosMascot.defaultPairedLabel': 'Desktop', - 'iosMascot.connectedTo': 'Connesso a', - 'iosMascot.disconnect': 'Disconnetti', - 'iosMascot.pushToTalk': 'Push-to-talk', - 'iosMascot.thinking': 'In pensiero...', - 'iosMascot.typeMessage': 'Digita un messaggio...', - 'iosMascot.sendMessage': 'Invia messaggio', - 'iosMascot.error.generic': 'Qualcosa è andato storto. Per favore riprova.', - 'iosMascot.error.sendFailed': 'Impossibile inviare. Controlla la tua connessione.', - 'settings.companion.title': 'Desktop Companion', - 'settings.companion.session': 'Sessione', - 'settings.companion.activeLabel': 'Attivo', - 'settings.companion.inactiveStatus': 'Inattivo', - 'settings.companion.stopping': 'Arresto…', - 'settings.companion.stopSession': 'Interrompi sessione', - 'settings.companion.starting': 'Avvio…', - 'settings.companion.startSession': 'Avvia sessione', - 'settings.companion.sessionId': 'ID sessione', - 'settings.companion.turns': 'Turni', - 'settings.companion.remaining': 'Rimanenti', - 'settings.companion.configuration': 'Configurazione', - 'settings.companion.hotkey': 'Tasto di scelta rapida', - 'settings.companion.activationMode': 'Modalità di attivazione', - 'settings.companion.sessionTtl': 'Sessione TTL', - 'settings.companion.screenCapture': 'Acquisizione schermata', - 'settings.companion.appContext': 'Contesto app', - 'settings.composio.title': 'Composio', - 'settings.composio.apiKeyExamplePlaceholder': 'ck_live_xxxxxxxxxxxxxxxxx', - 'composio.integrationSlugsHelp': 'Slug di integrazione separati da virgole, ad es.', - 'composio.integrationSlugsExample': 'Gmail, slack', - 'composio.integrationSlugsCaseInsensitive': 'Senza distinzione tra maiuscole e minuscole.', - 'composio.integrationSlugsPlaceholder': 'gmail, slack, ...', - 'team.members': 'Membri', - 'team.membersDesc': 'Gestisci i membri e i ruoli del team', - 'team.invites': 'Inviti', - 'team.invitesDesc': 'Genera e gestisci i codici di invito', - 'team.settings': 'Impostazioni squadra', - 'team.settingsDesc': 'Modifica il nome e le impostazioni della squadra', - 'team.editSettings': 'Modifica impostazioni squadra', - 'team.enterName': 'Inserisci il nome della squadra', - 'team.saving': 'Salvataggio...', - 'team.saveChanges': 'Salva Modifiche', - 'team.delete': 'Elimina team', - 'team.deleteDesc': 'Elimina definitivamente questo team', - 'team.deleting': 'Eliminazione in corso...', - 'team.failedToUpdate': 'Impossibile aggiornare il team', - 'team.failedToDelete': 'Impossibile eliminare il team', - 'team.manageTitle': 'Gestisci {name}', - 'team.planCreated': '{plan} Piano • Creato {date}', - 'team.confirmDelete': 'Sei sicuro di voler eliminare {name}?', - 'team.deleteWarning': 'This action cannot be undone. All team data will be permanently removed.', - 'welcome.clearingAppData': 'Clearing app data...', - 'welcome.clearAppDataAndRestart': 'Clear app data & restart', - 'welcome.clearAppDataWarning': - 'This wipes locally stored secrets and accounts on this device. Your cloud account is unaffected - you can sign in again right after.', - 'welcome.resetErrorFallback': - 'Could not clear app data. Please quit and reopen OpenHuman, then try again.', - 'welcome.signingIn': 'Accesso in corso...', - 'welcome.termsIntro': 'Continuando, accetti i', - 'welcome.termsOfUse': 'Termini', - 'welcome.termsJoiner': 'e', - 'welcome.privacyPolicy': 'Informativa sulla privacy', - 'welcome.termsOutro': '.', - 'chat.addReaction': 'Aggiungi reazione', - 'chat.agentProfile.create': 'Crea profilo agente', - 'chat.agentProfile.createFailed': 'Impossibile creare il profilo agente.', - 'chat.agentProfile.customDescription': 'Profilo agente personalizzato', - 'chat.agentProfile.defaultAgentLabel': 'Orchestrator', - 'chat.agentProfile.exists': 'Il profilo agente "{name}" esiste già.', - 'chat.agentProfile.label': 'Profilo agente', - 'chat.agentProfile.namePlaceholder': 'Nome profilo', - 'chat.agentProfile.promptStylePlaceholder': 'Stile prompt', - 'chat.agentProfile.allowedToolsPlaceholder': 'Strumenti consentiti', - 'chat.backToThread': 'torna a {title}', - 'chat.parentThread': 'thread principale', - 'chat.removeReaction': 'Rimuovi {emoji}', - 'invites.generate': 'Genera invito', - 'invites.generating': 'Generazione in corso...', - 'invites.refreshing': 'Aggiornamento inviti in corso...', - 'invites.loading': 'Caricamento inviti...', - 'invites.copyCodeAria': 'Copia codice invito', - 'invites.revokeAria': 'Revoca invito', - 'invites.usedUp': 'Esaurito', - 'invites.uses': 'Utilizza: {current}{max}', - 'invites.expiresOn': 'Scadenza {date}', - 'invites.empty': 'Ancora nessun invito', - 'invites.emptyHint': 'Genera un codice di invito da condividere con altri', - 'invites.revokeTitle': 'Revoca codice di invito', - 'invites.revokePromptPrefix': 'Sei sicuro vuoi revocare il codice di invito', - 'invites.revokeWarning': - 'This invite code will no longer be valid and cannot be used to join the team.', - 'invites.revoking': 'Revoca in corso...', - 'invites.revokeAction': 'Revoca invito', - 'invites.failedGenerate': 'Failed to generate invite', - 'invites.failedRevoke': 'Failed to revoke invite', - 'team.refreshingMembers': 'Aggiornamento membri...', - 'team.loadingMembers': 'Caricamento membri...', - 'team.memberCount': '{count} membro', - 'team.memberCountPlural': '{count} membri', - 'team.you': '(Tu)', - 'team.removeAria': 'Rimuovi {name}', - 'team.noMembers': 'Nessun membro trovato', - 'team.removeTitle': 'Rimuovi membro del team', - 'team.removePromptPrefix': 'Sei sicuro di voler rimuovere', - 'team.removePromptSuffix': 'dal team?', - 'team.removeWarning': 'They will lose access to the team and all team resources.', - 'team.removing': 'Rimozione in corso...', - 'team.removeAction': 'Rimuovi membro', - 'team.changeRoleTitle': 'Modifica ruolo membro', - 'team.changeRolePrompt': "Change {name}'s role from {oldRole} to {newRole}?", - 'team.changeRoleAdminGrant': - 'This will grant them full admin permissions including the ability to manage team members.', - 'team.changeRoleAdminRemove': - 'This will remove their admin permissions and they will no longer be able to manage the team.', - 'team.changing': 'Modifica...', - 'team.changeRoleAction': 'Modifica ruolo', - 'team.failedChangeRole': 'Impossibile modificare il ruolo', - 'team.failedRemoveMember': 'Impossibile rimuovere il membro', - 'voice.failedToLoadSettings': 'Impossibile caricare le impostazioni vocali', - 'voice.failedToSaveSettings': 'Impossibile salvare le impostazioni vocali', - 'voice.failedToStartServer': 'Impossibile avviare il server vocale', - 'voice.failedToStopServer': 'Impossibile arrestare server vocale', - 'voice.sttDisabledPrefix': - 'Voice dictation is disabled until the local STT model is downloaded. Use the', - 'voice.sttDisabledSuffix': 'qui sopra per installare Whisper.', - 'voice.debug.failedToLoadVoiceDebugData': 'Impossibile caricare i dati di debug vocale.', - 'voice.debug.settingsSaved': 'Impostazioni di debug salvate.', - 'voice.debug.failedToSaveSettings': 'Impossibile salvare le impostazioni vocali', - 'voice.debug.runtimeStatus': 'Stato runtime', - 'voice.debug.runtimeStatusDesc': - 'Live diagnostics for the voice server and speech-to-text engine.', - 'voice.debug.server': 'Server', - 'voice.debug.unavailable': 'Non disponibile', - 'voice.debug.ready': 'Pronto', - 'voice.debug.notReady': 'Non pronto', - 'voice.debug.hotkey': 'Tasto di scelta rapida', - 'voice.debug.notAvailable': 'n/d', - 'voice.debug.mode': 'Modalità', - 'voice.debug.transcriptions': 'Trascrizioni', - 'voice.debug.serverError': 'Errore server', - 'voice.debug.advancedSettings': 'Impostazioni avanzate', - 'voice.debug.advancedSettingsDesc': - 'Low-level tuning parameters for recording and silence detection.', - 'voice.debug.minimumRecordingSeconds': 'Secondi minimi di registrazione', - 'voice.debug.silenceThreshold': 'Soglia di silenzio (RMS)', - 'voice.debug.silenceThresholdDesc': - 'Recordings with energy below this are treated as silence and skipped. Lower = more sensitive.', - 'voice.providers.saved': 'Fornitori di servizi vocali salvati.', - 'voice.providers.failedToSave': 'Impossibile salvare i provider vocali', - 'voice.providers.ellipsis': '…', - 'voice.providers.installing': 'Installazione', - 'voice.providers.installingBusy': 'Installazione…', - 'voice.providers.reinstallLocally': 'Reinstalla localmente', - 'voice.providers.repair': 'Ripara', - 'voice.providers.retryLocally': 'Riprova localmente', - 'voice.providers.installLocally': 'Installa localmente', - 'voice.providers.whisperReady': 'Whisper è pronto.', - 'voice.providers.whisperInstallStarted': 'Installazione di Whisper avviata', - 'voice.providers.queued': 'in coda', - 'voice.providers.failedToInstallWhisper': 'Impossibile installare Whisper', - 'voice.providers.piperReady': 'Piper è pronto.', - 'voice.providers.piperInstallStarted': 'Installazione di Piper avviata', - 'voice.providers.failedToInstallPiper': 'Impossibile installare Piper', - 'voice.providers.title': 'Provider vocali', - 'voice.providers.desc': - 'Choose where transcription and synthesis run. Use the Install locally buttons to download the binaries and models into your workspace. Local providers can be saved before the install finishes — no manual WHISPER_BIN or PIPER_BIN setup required.', - 'voice.providers.sttProvider': 'Provider di sintesi vocale', - 'voice.providers.sttProviderAria': 'Provider STT', - 'voice.providers.cloudWhisperProxy': 'Cloud (proxy Whisper)', - 'voice.providers.localWhisper': 'Whisper locale', - 'voice.providers.installRequired': '(installazione richiesta)', - 'voice.providers.whisperInstalledTitle': 'Whisper è installato. Fare clic per reinstallare.', - 'voice.providers.whisperDownloadTitle': - 'Download whisper.cpp and the GGML model into your workspace.', - 'voice.providers.installed': 'Installato', - 'voice.providers.installFailed': 'Installazione non riuscita', - 'voice.providers.notInstalled': 'Non installato', - 'voice.providers.whisperModel': 'Modello Whisper', - 'voice.providers.whisperModelAria': 'Modello Whisper', - 'voice.providers.whisperModelTiny': 'Piccolo (39 MB, più veloce)', - 'voice.providers.whisperModelBase': 'Base (74 MB)', - 'voice.providers.whisperModelSmall': 'Piccolo (244 MB)', - 'voice.providers.whisperModelMedium': 'Medio (769 MB, consigliato)', - 'voice.providers.whisperModelLargeTurbo': 'Grande v3 Turbo (1,5 GB, massima precisione)', - 'voice.providers.ttsProvider': 'Provider di sintesi vocale', - 'voice.providers.ttsProviderAria': 'Provider di sintesi vocale', - 'voice.providers.cloudElevenLabsProxy': 'Cloud (proxy ElevenLabs)', - 'voice.providers.localPiper': 'Piper locale', - 'voice.providers.piperInstalledTitle': 'Piper è installato. Fare clic per reinstallare.', - 'voice.providers.piperDownloadTitle': - 'Download Piper and the bundled en_US-lessac-medium voice into your workspace.', - 'voice.providers.piperVoice': 'Voce Piper', - 'voice.providers.piperVoiceAria': 'Voce Piper', - 'voice.providers.customVoiceOption': 'Altro (digitare di seguito)…', - 'voice.providers.customVoiceAria': 'ID voce Piper (personalizzato)', - 'voice.providers.customVoicePlaceholder': 'it_US-lessac-medium', - 'voice.providers.piperVoicesDesc': - 'Voices come from huggingface.co/rhasspy/piper-voices. Switching voices may require an Install/Reinstall click to download the new .onnx.', - 'voice.providers.mascotVoice': 'Voce della mascotte', - 'voice.providers.mascotVoiceDescPrefix': - 'The ElevenLabs voice the mascot uses for spoken replies is configured under', - 'voice.providers.mascotSettings': 'Impostazioni della mascotte', - 'voice.providers.mascotVoiceDescSuffix': '.', - 'voice.providers.hotkeyPlaceholder': 'Fn', - 'voice.providers.piperPreset.lessacMedium': 'US · Lessac (neutro, consigliato)', - 'voice.providers.piperPreset.lessacHigh': 'Stati Uniti · Lessac (qualità superiore, più grande)', - 'voice.providers.piperPreset.ryanMedium': 'Stati Uniti · Ryan (uomo)', - 'voice.providers.piperPreset.amyMedium': 'Stati Uniti · Amy (donna)', - 'voice.providers.piperPreset.librittsHigh': 'Stati Uniti · LibriTTS (multi-altoparlante)', - 'voice.providers.piperPreset.alanMedium': 'GB · Alan (maschio)', - 'voice.providers.piperPreset.jennyDiocoMedium': 'GB · Jenny Dioco (femmina)', - 'voice.providers.piperPreset.northernEnglishMaleMedium': 'GB · Inglese settentrionale (maschio)', - 'voice.providers.chip.cloud': 'OpenHuman (Managed)', - 'voice.providers.chip.cloudAria': 'OpenHuman managed provider is always enabled', - 'voice.providers.chip.whisper': 'Whisper (Local)', - 'voice.providers.chip.enableWhisper': 'Enable local Whisper STT', - 'voice.providers.chip.disableWhisper': 'Disable local Whisper STT', - 'voice.providers.chip.piper': 'Piper (Local)', - 'voice.providers.chip.enablePiper': 'Enable local Piper TTS', - 'voice.providers.chip.disablePiper': 'Disable local Piper TTS', - 'voice.providers.chip.enableProvider': 'Enable', - 'voice.providers.chip.disableProvider': 'Disable', - 'voice.providers.chip.apiKeyLabel': 'API Key', - 'voice.providers.chip.apiKeyPlaceholder': 'sk-…', - 'voice.providers.chip.comingSoon': 'coming soon', - 'voice.modal.title': 'Configure', - 'voice.modal.desc': - 'Enter your API key to enable this provider. You can test the connection before saving.', - 'voice.modal.testKey': 'Test Key', - 'voice.modal.testing': 'Testing…', - 'voice.modal.saveAndEnable': 'Save & Enable', - 'voice.modal.enable': 'Enable', - 'voice.modal.whisperDesc': - 'Choose a model size and install the Whisper binary and GGML model into your workspace. Larger models are more accurate but slower.', - 'voice.modal.piperDesc': - 'Choose a voice and install the Piper binary and ONNX model into your workspace. Piper runs fully offline with low latency.', - 'voice.routing.title': 'Voice Routing', - 'voice.routing.desc': 'Choose which enabled providers handle speech-to-text and text-to-speech.', - 'voice.routing.save': 'Save', - 'voice.routing.testStt': 'Test STT', - 'voice.routing.testTts': 'Test TTS', - 'voice.routing.elevenlabsVoice': 'ElevenLabs Voice', - 'voice.routing.elevenlabsVoiceAria': 'ElevenLabs voice selection', - 'voice.routing.elevenlabsVoiceIdAria': 'ElevenLabs voice ID (custom)', - 'voice.routing.elevenlabsVoiceDesc': - 'Pick a curated voice or paste a custom voice ID from your ElevenLabs dashboard.', - 'voice.externalProviders.title': 'External Voice Providers', - 'voice.externalProviders.desc': - 'Connect third-party STT/TTS APIs like Deepgram, ElevenLabs, or OpenAI directly.', - 'voice.externalProviders.keySet': 'Key set', - 'voice.externalProviders.noKey': 'No API key', - 'voice.externalProviders.test': 'Test', - 'voice.externalProviders.testing': 'Testing…', - 'voice.externalProviders.remove': 'Remove', - 'voice.externalProviders.provider': 'Provider', - 'voice.externalProviders.selectProvider': 'Select a provider…', - 'voice.externalProviders.apiKey': 'API Key', - 'voice.externalProviders.apiKeyPlaceholder': 'sk-…', - 'voice.externalProviders.add': 'Add', - 'screenAwareness.debug.debugAndDiagnostics': 'Debug e diagnostica', - 'screenAwareness.debug.collapse': 'Comprimi', - 'screenAwareness.debug.expand': 'Espandi', - 'screenAwareness.debug.failedToSave': 'Failed to save screen intelligence', - 'screenAwareness.debug.policyTitle': 'Screen Intelligence Policy', - 'screenAwareness.debug.baselineFps': 'FPS di base', - 'screenAwareness.debug.useVisionModel': 'Utilizza modello di visione', - 'screenAwareness.debug.useVisionModelDesc': - 'Send screenshots to a vision LLM for richer context. When off, only OCR text is used with a text LLM — faster and no vision model required.', - 'screenAwareness.debug.keepScreenshots': 'Conserva screenshot', - 'screenAwareness.debug.keepScreenshotsDesc': - 'Save captured screenshots to the workspace instead of deleting after processing', - 'screenAwareness.debug.allowlist': 'Lista consentita (una regola per riga)', - 'screenAwareness.debug.denylist': 'Lista vietata (una regola per riga)', - 'screenAwareness.debug.saveSettings': 'Salva impostazioni di Screen Intelligence', - 'screenAwareness.debug.sessionStats': 'Statistiche sessione', - 'screenAwareness.debug.framesEphemeral': 'Frame (effimeri)', - 'screenAwareness.debug.panicStop': 'Arresto antipanico', - 'screenAwareness.debug.defaultPanicHotkey': 'Cmd+Maiusc+.', - 'screenAwareness.debug.vision': 'Visione', - 'screenAwareness.debug.idle': 'inattiva', - 'screenAwareness.debug.visionQueue': 'Coda visioni', - 'screenAwareness.debug.lastVision': 'Ultima visione', - 'screenAwareness.debug.notAvailable': 'n/a', - 'screenAwareness.debug.visionSummaries': 'Riepiloghi visione', - 'screenAwareness.debug.refreshing': 'Aggiornamento in corso…', - 'screenAwareness.debug.noSummaries': 'Ancora nessun riepilogo.', - 'screenAwareness.debug.unknownApp': 'App sconosciuta', - 'screenAwareness.debug.macosOnly': 'Screen Intelligence V1 is currently supported on macOS only.', - 'memory.debugTitle': 'Debug memoria', - 'memory.documents': 'Documenti', - 'memory.filterByNamespace': 'Filtra per spazio dei nomi...', - 'memory.refresh': 'Aggiorna', - 'memory.noDocumentsFound': 'Nessun documento trovato.', - 'memory.delete': 'Elimina', - 'memory.rawResponse': 'Risposta non elaborata', - 'memory.namespaces': 'Spazi dei nomi', - 'memory.noNamespacesFound': 'Nessuno spazio dei nomi trovato.', - 'memory.queryRecall': 'Query e richiamo', - 'memory.namespace': 'Spazio dei nomi', - 'memory.queryText': 'Query testo...', - 'memory.defaultMaxChunks': '10', - 'memory.maxChunks': 'blocchi massimi', - 'memory.query': 'Query', - 'memory.recall': 'Richiama', - 'memory.queryLabel': 'Query', - 'memory.recallLabel': 'Richiama', - 'memory.queryResult': 'Risultato della query', - 'memory.recallResult': 'Richiama risultato', - 'memory.clearNamespace': 'Cancella spazio dei nomi', - 'memory.clearNamespaceDescription': 'Permanently delete all documents within a namespace.', - 'memory.selectNamespace': 'Seleziona lo spazio dei nomi...', - 'memory.exampleNamespace': 'ad es. skill:gmail:user@example.com', - 'memory.clear': 'Cancella', - 'memory.deleteConfirm': 'Delete document "{documentId}" in namespace "{namespace}"?', - 'memory.clearNamespaceConfirm': - 'This will permanently delete ALL documents in namespace "{namespace}". Continue?', - 'memory.clearNamespaceSuccess': 'Spazio dei nomi "{namespace}" cancellato.', - 'memory.clearNamespaceEmpty': 'Niente da cancellare in "{namespace}".', - 'webhooks.debugTitle': 'Debug webhook', - 'webhooks.failedToLoadDebugData': 'Impossibile caricare i dati di debug del webhook', - 'webhooks.clearLogsConfirm': 'Cancellare tutti i registri di debug del webhook acquisiti?', - 'webhooks.failedToClearLogs': 'Impossibile cancellare i registri del webhook', - 'webhooks.loading': 'Caricamento...', - 'webhooks.refresh': 'Aggiorna', - 'webhooks.clearing': 'Cancellazione...', - 'webhooks.clearLogs': 'Cancella registri', - 'webhooks.registered': 'registrato', - 'webhooks.captured': 'catturato', - 'webhooks.live': 'live', - 'webhooks.disconnected': 'disconnesso', - 'webhooks.lastEvent': 'Ultimo evento', - 'webhooks.at': 'alle', - 'webhooks.registeredWebhooks': 'Webhook registrati', - 'webhooks.noActiveRegistrations': 'Nessuna registrazione attiva.', - 'webhooks.resolvingBackendUrl': 'Risoluzione del backend URL…', - 'webhooks.capturedRequests': 'Richieste catturate', - 'webhooks.noRequestsCaptured': 'Nessuna richiesta webhook ancora catturata.', - 'webhooks.unrouted': 'non indirizzato', - 'webhooks.pending': 'in sospeso', - 'webhooks.requestHeaders': 'Intestazioni della richiesta', - 'webhooks.queryParams': 'Parametri della query', - 'webhooks.requestBody': 'Corpo della richiesta', - 'webhooks.responseHeaders': 'Risposta Intestazioni', - 'webhooks.responseBody': 'Corpo della risposta', - 'webhooks.rawPayload': 'Payload non elaborato', - 'webhooks.empty': '[vuoto]', - 'providerSetup.error.defaultDetails': 'Configurazione del provider non riuscita.', - 'providerSetup.error.providerFallback': 'Il provider', - 'providerSetup.error.credentialsRejected': - '{provider} rejected the credentials. Check the API key and try again.', - 'providerSetup.error.endpointNotRecognized': - '{provider} did not recognize the endpoint. Check the base URL and try again.', - 'providerSetup.error.providerUnavailable': - '{provider} is unavailable right now. Try again or check the provider status.', - 'providerSetup.error.unreachable': - 'Could not reach {provider}. Check the endpoint URL and network connection, then try again.', - 'providerSetup.error.couldNotReachWithMessage': 'Impossibile raggiungere {provider}: {message}', - 'providerSetup.error.technicalDetails': 'Dettagli tecnici', - 'devices.title': 'Dispositivi', - 'devices.pairIphone': 'Associa iPhone', - 'devices.noPaired': 'Nessun dispositivo associato', - 'devices.emptyState': 'Scan a QR code on your iPhone to connect it to this OpenHuman session.', - 'devices.devicePairedTitle': 'Dispositivo accoppiato.', - 'devices.devicePairedMessage': 'iPhone connesso correttamente.', - 'devices.deviceRevokedTitle': 'Dispositivo revocato', - 'devices.deviceRevokedMessage': '{label} rimosso.', - 'devices.revokeFailedTitle': 'Revoca non riuscita', - 'devices.online': 'Online', - 'devices.offline': 'Offline', - 'devices.lastSeenNever': 'Mai', - 'devices.lastSeenNow': 'Proprio ora', - 'devices.lastSeenMinutes': '{count}m fa', - 'devices.lastSeenHours': '{count}h fa', - 'devices.lastSeenDays': '{count}d fa', - 'devices.revoke': 'Revoca', - 'devices.revokeAria': 'Revoca {label}', - 'devices.confirmRevokeTitle': 'Revoca dispositivo?', - 'devices.confirmRevokeBody': '{label} will no longer be able to connect. This cannot be undone.', - 'devices.loadFailed': 'Impossibile caricare i dispositivi: {message}', - 'devices.pairModal.title': 'Accoppia iPhone', - 'devices.pairModal.loading': 'Generazione del codice di accoppiamento…', - 'devices.pairModal.instructions': 'Open the OpenHuman app on your iPhone and scan this code.', - 'devices.pairModal.expiresIn': 'Il codice scade tra ~{count} minuto', - 'devices.pairModal.expiresInPlural': 'Il codice scade tra ~{count} minuti', - 'devices.pairModal.showDetails': 'Mostra dettagli', - 'devices.pairModal.hideDetails': 'Nascondi dettagli', - 'devices.pairModal.channelId': 'ID canale', - 'devices.pairModal.pairingUrl': 'Associazione URL', - 'devices.pairModal.expiredTitle': 'QR code scaduto', - 'devices.pairModal.expiredBody': 'Generate a new code to continue pairing.', - 'devices.pairModal.generateNewCode': 'Genera nuovo codice', - 'devices.pairModal.successTitle': 'Accoppiato con iPhone', - 'devices.pairModal.autoClose': 'Chiusura automatica…', - 'devices.pairModal.errorPrefix': 'Failed to create pairing: {message}', - 'devices.pairModal.errorTitle': 'Qualcosa è andato storto', - 'devices.pairModal.copyUrl': 'Copia', - 'mcp.catalog.searchAria': 'Cerca nel catalogo della fucina', - 'mcp.catalog.searchPlaceholder': 'Cerca nel catalogo della fucina...', - 'mcp.catalog.loadFailed': 'Impossibile caricare il catalogo', - 'mcp.catalog.noResults': 'Nessun server trovato.', - 'mcp.catalog.noResultsFor': 'Nessun server trovato per "{query}".', - 'mcp.catalog.loadMore': 'Carica altro', - 'mcp.configAssistant.title': 'Assistente di configurazione', - 'mcp.configAssistant.empty': 'Ask about configuration, required env vars, or setup steps.', - 'mcp.configAssistant.suggestedValues': 'Valori suggeriti:', - 'mcp.configAssistant.valueHidden': '(valore nascosto)', - 'mcp.configAssistant.applySuggested': 'Applica i valori suggeriti', - 'mcp.configAssistant.reinstallHint': 'Reinstallare con questi valori per applicarli.', - 'mcp.configAssistant.thinking': 'Pensavo...', - 'mcp.configAssistant.inputPlaceholder': 'Ask a question (Enter to send, Shift+Enter for newline)', - 'mcp.configAssistant.send': 'Invia', - 'mcp.configAssistant.failedResponse': 'Impossibile ottenere risposta', - 'mcp.toolList.availableSingular': '{count} strumento disponibile', - 'mcp.toolList.availablePlural': '{count} strumenti disponibili', - 'mcp.toolList.tryTool': 'Try', - 'mcp.toolList.tryToolAria': 'Open execution playground for {name}', - 'mcp.playground.title': 'Run {name}', - 'mcp.playground.close': 'Close playground', - 'mcp.playground.inputSchema': 'Input schema', - 'mcp.playground.argsLabel': 'Arguments (JSON)', - 'mcp.playground.argsHelp': 'Type JSON matching the input schema. Empty input is treated as {}.', - 'mcp.playground.runShortcut': '⌘/Ctrl + Enter to run', - 'mcp.playground.format': 'Format', - 'mcp.playground.invalidJson': 'Invalid JSON', - 'mcp.playground.run': 'Run tool', - 'mcp.playground.running': 'Running…', - 'mcp.playground.result': 'Result', - 'mcp.playground.resultError': 'Tool returned an error', - 'mcp.playground.copyResult': 'Copy result', - 'mcp.playground.copied': 'Copied', - 'mcp.playground.history': 'History', - 'mcp.playground.historyEmpty': 'No invocations yet in this session.', - 'mcp.playground.historyLoad': 'Load', - 'mcp.playground.unexpectedError': 'Unexpected error invoking tool.', - 'mcp.catalog.deployed': 'Distribuito', - 'mcp.catalog.installCount': '{count} installa', - 'app.update.dismissNotification': 'Ignora notifica di aggiornamento', - 'bootCheck.rpcAuthSuffix': 'su ogni RPC.', - 'mcp.installed.title': 'Installato', - 'mcp.installed.browseCatalog': 'Sfoglia il catalogo', - 'mcp.installed.empty': 'Nessun server MCP ancora installato.', - 'mcp.installed.toolSingular': '{count} strumento', - 'mcp.installed.toolPlural': '{count} strumenti', - 'mcp.health.title': 'Health', - 'mcp.health.summaryAria': 'MCP connection health summary', - 'mcp.health.connectedCount': '{count} connected', - 'mcp.health.connectingCount': '{count} connecting', - 'mcp.health.errorCount': '{count} error', - 'mcp.health.disconnectedCount': '{count} idle', - 'mcp.health.retryAll': 'Retry all ({count})', - 'mcp.health.retryAllAria': 'Retry all {count} errored MCP servers', - 'mcp.health.disconnectAll': 'Disconnect all ({count})', - 'mcp.health.disconnectAllAria': 'Disconnect all {count} connected MCP servers', - 'mcp.health.disconnectConfirm.title': 'Disconnect all MCP servers?', - 'mcp.health.disconnectConfirm.body': - 'This will disconnect {count} currently-connected MCP servers. Installed configurations and secrets are kept; you can reconnect any server later.', - 'mcp.health.disconnectConfirm.cancel': 'Cancel', - 'mcp.health.disconnectConfirm.confirm': 'Disconnect all', - 'mcp.health.opErrorGeneric': 'Bulk operation failed. See logs.', - 'mcp.health.bulkPartialFailure': '{failed} of {total} servers failed. See logs.', - 'mcp.installed.search.landmarkAria': 'Search installed MCP servers', - 'mcp.installed.search.inputAria': 'Filter installed MCP servers by name', - 'mcp.installed.search.placeholder': 'Filter servers…', - 'mcp.installed.search.clearAria': 'Clear filter', - 'mcp.installed.search.countMatches': '{shown} of {total} servers', - 'mcp.installed.search.noMatches': 'No servers match "{query}".', - 'mcp.inventory.openButton': 'Inventory', - 'mcp.inventory.openAria': 'Open the sharable MCP inventory panel', - 'mcp.inventory.title': 'Sharable MCP Inventory', - 'mcp.inventory.subtitle': - 'Export your installed MCP servers as a portable, secret-free manifest, or import one from a teammate. Secret env values are never included or imported.', - 'mcp.inventory.close': 'Close inventory panel', - 'mcp.inventory.tablistAria': 'Inventory sections', - 'mcp.inventory.tab.export': 'Export', - 'mcp.inventory.tab.import': 'Import', - 'mcp.inventory.export.empty': - 'No MCP servers installed yet — nothing to export. Install one from the catalog first.', - 'mcp.inventory.export.privacyTitle': 'What is in this manifest', - 'mcp.inventory.export.privacyBody': - 'Server names, qualified names, env-variable KEY NAMES, and non-secret config only. Secret values, your machine identifiers, and per-install timestamps are intentionally stripped.', - 'mcp.inventory.export.serverCount': '{count} servers in this manifest', - 'mcp.inventory.export.copy': 'Copy', - 'mcp.inventory.export.copied': 'Copied', - 'mcp.inventory.export.copyAria': 'Copy the manifest JSON to the clipboard', - 'mcp.inventory.export.download': 'Download', - 'mcp.inventory.export.downloadAria': 'Download the manifest as a JSON file', - 'mcp.inventory.import.trustTitle': 'Treat imported manifests as untrusted code', - 'mcp.inventory.import.trustBody': - 'An MCP server is a tool you grant your agent. Only import manifests from sources you trust. Each install requires your explicit click; nothing is auto-installed.', - 'mcp.inventory.import.pasteLabel': 'Paste manifest JSON', - 'mcp.inventory.import.pastePlaceholder': 'Paste a manifest here, or upload a .json file below.', - 'mcp.inventory.import.preview': 'Preview', - 'mcp.inventory.import.clear': 'Clear', - 'mcp.inventory.import.uploadFile': 'or upload a .json file', - 'mcp.inventory.import.uploadFileAria': 'Upload a manifest .json file', - 'mcp.inventory.import.fileTooLarge': 'File is too large (over 1 MB). Refusing to load.', - 'mcp.inventory.import.fileReadFailed': 'Could not read file.', - 'mcp.inventory.import.parseErrorPrefix': 'Could not parse manifest:', - 'mcp.inventory.import.previewHeading': 'Preview', - 'mcp.inventory.import.previewCounts': - '{total} servers — {newly} new, {already} already installed', - 'mcp.inventory.import.previewEmpty': 'Manifest contains no servers.', - 'mcp.inventory.import.exportedFrom': 'Exported from {exporter}', - 'mcp.inventory.import.exportedAt': 'at {when}', - 'mcp.inventory.import.statusNew': 'New', - 'mcp.inventory.import.statusAlreadyInstalled': 'Already installed', - 'mcp.inventory.import.envKeysLabel': 'Env keys', - 'mcp.inventory.import.install': 'Install', - 'mcp.inventory.import.installAria': 'Install {name} from this manifest', - 'mcp.inventory.import.skipped': 'skipped', - 'mcp.inventory.parseError.empty': 'Manifest is empty.', - 'mcp.inventory.parseError.invalidJson': 'Invalid JSON.', - 'mcp.inventory.parseError.rootNotObject': 'Manifest must be a JSON object at the root.', - 'mcp.inventory.parseError.unsupportedSchema': - 'Unsupported manifest schema — this file was not produced by a compatible exporter.', - 'mcp.inventory.parseError.missingExportedAt': 'Missing or invalid `exported_at` field.', - 'mcp.inventory.parseError.missingExportedBy': 'Missing or invalid `exported_by` field.', - 'mcp.inventory.parseError.invalidServers': 'Missing or invalid `servers` array.', - 'mcp.inventory.parseError.serverNotObject': 'A server entry is not an object.', - 'mcp.inventory.parseError.serverMissingQualifiedName': - 'A server entry is missing its qualified_name.', - 'mcp.inventory.parseError.serverMissingDisplayName': - 'A server entry is missing its display_name.', - 'mcp.inventory.parseError.serverEnvKeysNotArray': - 'A server entry has an env_keys field that is not an array of strings.', - 'mcp.inventory.parseError.serverContainsEnv': - 'A server entry contains an `env` value map. Refusing to import — manifests must only carry env_keys (names), never secret values.', - 'mcp.inventory.parseError.duplicateQualifiedName': - 'Duplicate qualified_name found in manifest. Each server must appear at most once.', - 'mcp.tab.loading': 'Caricamento MCP server...', - 'mcp.tab.emptyDetail': 'Selezionare un server o sfogliare il catalogo.', - 'mcp.install.loadingDetail': 'Caricamento dettagli server...', - 'mcp.install.back': 'Torna indietro', - 'mcp.install.title': 'Installa {name}', - 'mcp.install.requiredEnv': 'Variabili di ambiente richieste', - 'mcp.install.enterValue': 'Inserisci {key}', - 'mcp.install.show': 'Mostra', - 'mcp.install.hide': 'Nascondi', - 'mcp.install.configLabel': 'Configurazione (JSON opzionale)', - 'mcp.install.configPlaceholder': '{"key": "value"}', - 'mcp.install.missingRequired': '"{key}" è richiesto', - 'mcp.install.invalidJson': 'Configurazione JSON non è valida JSON', - 'mcp.install.failedDetail': 'Impossibile caricare i dettagli del server', - 'mcp.install.failedInstall': 'Installazione non riuscita', - 'mcp.install.button': 'Installa', - 'mcp.install.installing': 'Installazione...', - 'mcp.detail.suggestedEnvReady': 'Valori di ambiente suggeriti pronti', - 'mcp.detail.suggestedEnvBody': - 'Re-install this server with the suggested values to apply them: {keys}', - 'mcp.detail.connect': 'Connetti', - 'mcp.detail.connecting': 'Connessione in corso...', - 'mcp.detail.disconnect': 'Disconnetti', - 'mcp.detail.hideAssistant': 'Nascondi assistente', - 'mcp.detail.helpConfigure': 'Aiutami a configurare', - 'mcp.detail.confirmUninstall': 'Confermi la disinstallazione?', - 'mcp.detail.confirmUninstallAction': 'Sì, disinstalla', - 'mcp.detail.uninstall': 'Disinstalla', - 'mcp.detail.envVars': 'Variabili di ambiente', - 'mcp.detail.tools': 'Strumenti', - 'onboarding.skipForNow': 'Salta per ora', - 'onboarding.localAI.continueWithCloud': 'Continua con Cloud', - 'onboarding.localAI.useLocalAnyway': 'Use local AI anyway (not recommended for your device)', - 'onboarding.localAI.useLocalInstead': 'Use local AI instead (connect Ollama now)', - 'onboarding.localAI.setupIssue': 'Local AI setup encountered an issue', - 'notifications.routingTitle': 'Routing delle notifiche', - 'notifications.routing.pipelineStats': 'Statistiche pipeline', - 'notifications.routing.total': 'Totale', - 'notifications.routing.unread': 'Non letti', - 'notifications.routing.unscored': 'Senza punteggio', - 'notifications.routing.intelligenceTitle': 'Intelligence di notifica', - 'notifications.routing.intelligenceDesc': - 'Every notification from your connected accounts is scored by a local AI model. High-importance notifications are automatically routed to your orchestrator agent so nothing critical slips through.', - 'notifications.routing.howItWorks': 'Come funziona', - 'notifications.routing.level.drop': 'Elimina', - 'notifications.routing.level.dropDesc': 'Rumore/spam: archiviato ma non emerso', - 'notifications.routing.level.acknowledge': 'Riconosci', - 'notifications.routing.level.acknowledgeDesc': 'Bassa priorità: mostrato nel centro notifiche', - 'notifications.routing.level.react': 'Reagisci', - 'notifications.routing.level.reactDesc': 'Medium-priority — triggers a focused agent response', - 'notifications.routing.level.escalate': 'Escalation', - 'notifications.routing.level.escalateDesc': 'High-priority — forwarded to orchestrator agent', - 'notifications.routing.perProvider': 'Routing per provider', - 'notifications.routing.threshold': 'Soglia', - 'notifications.routing.routeToOrchestrator': 'Route to orchestrator', - 'notifications.routing.loadSettingsError': 'Failed to load settings. Reopen this panel to retry.', - 'settings.billing.inferenceBudget.title': 'Inference Budget', - 'settings.billing.inferenceBudget.noRecurringPlanBudget': 'Nessun budget del piano ricorrente', - 'settings.billing.inferenceBudget.noRecurringWeeklyDesc': - 'Your current plan does not include a recurring weekly inference budget. Usage is paid from available credits instead.', - 'settings.billing.inferenceBudget.remainingSummary': '{remaining} / {budget} rimanente', - 'settings.billing.inferenceBudget.spentThisCycle': 'Speso {amount} in questo ciclo', - 'settings.billing.inferenceBudget.cycleEndsOn': 'Il ciclo termina {date}', - 'settings.billing.inferenceBudget.exhaustedDesc': - 'Included subscription usage is exhausted. Top up credits to keep using AI without waiting for the next cycle.', - 'settings.billing.inferenceBudget.discountVsPayg': '{pct}% cheaper per call than pay-as-you-go.', - 'settings.billing.inferenceBudget.cycleSpend': 'Ciclo di spesa', - 'settings.billing.inferenceBudget.totalAmount': '{amount} totale', - 'settings.billing.inferenceBudget.inference': 'Inferenza', - 'settings.billing.inferenceBudget.integrations': 'Integrazioni', - 'settings.billing.inferenceBudget.calls': '{count} chiamate', - 'settings.billing.inferenceBudget.dailySpend': 'Spesa giornaliera', - 'settings.billing.inferenceBudget.dailySpendPoint': '{date}: {amount}', - 'settings.billing.inferenceBudget.topModels': 'Modelli principali', - 'settings.billing.inferenceBudget.noInferenceUsage': 'No inference usage this cycle.', - 'settings.billing.inferenceBudget.topIntegrations': 'Integrazioni principali', - 'settings.billing.inferenceBudget.noIntegrationUsage': 'No integration usage this cycle.', - 'settings.billing.inferenceBudget.unableToLoad': 'Unable to load usage data', - 'settings.billing.inferenceBudget.notAvailable': 'n/a', - 'memory.sourceFilterAria': 'Filtra per origine', - 'calls.comingSoonDescription': 'AI-assisted calls are coming soon. Stay tuned.', - 'vault.title': 'Depositi di conoscenza', - 'vault.description': 'Point at a local folder; files are chunked and mirrored into memory.', - 'vault.add': 'Aggiungi deposito', - 'vault.added': 'Deposito aggiunto', - 'vault.createdMessage': 'Creato "{name}". Fai clic su {sync} per importare.', - 'vault.couldNotAdd': 'Impossibile aggiungere il deposito', - 'vault.syncFailed': 'Sincronizzazione non riuscita', - 'vault.syncFailedFor': 'Sincronizzazione non riuscita per "{name}"', - 'vault.syncFailedFiles': 'Impossibile {count} file', - 'vault.syncedTitle': 'Sincronizzato "{name}"', - 'vault.syncSummary': 'Importato {ingested}, invariato {unchanged}, rimosso {removed}', - 'vault.syncSummaryFailed': ', non riuscito {count}', - 'vault.syncSummarySkipped': ', saltato {count}', - 'vault.syncSummaryDuration': '· {seconds}s', - 'vault.confirmRemovePurge': - 'Remove vault "{name}"?\n\nClick OK to also purge its memory (delete all {count} ingested document(s)).\nClick Cancel to keep the documents in memory.', - 'vault.confirmRemove': 'Rimuovere davvero il vault "{name}"?', - 'vault.removed': 'Vault rimosso', - 'vault.removedPurgedMessage': 'Rimosso "{name}" e cancellata la sua memoria.', - 'vault.removedKeptMessage': 'Rimosso "{name}". Documenti conservati in memoria.', - 'vault.couldNotRemove': 'Impossibile rimuovere il deposito', - 'vault.name': 'Nome', - 'vault.namePlaceholder': 'Le mie note di ricerca', - 'vault.folderPath': 'Percorso della cartella (assoluto)', - 'vault.folderPathPlaceholder': '/Utenti/tu/Documenti/note', - 'vault.excludes': 'Esclude (sottostringhe separate da virgole, facoltativo)', - 'vault.excludesPlaceholder': 'bozze/, .secret', - 'vault.creating': 'Creazione…', - 'vault.create': 'Crea deposito', - 'vault.loading': 'Caricamento depositi…', - 'vault.failedToLoad': 'Impossibile caricare i depositi: {error}', - 'vault.empty': 'No vaults yet. Add one above to start ingesting a folder.', - 'vault.fileCount': '{count} file', - 'vault.syncedRelative': 'sincronizzato {time}', - 'vault.neverSynced': 'mai sincronizzato', - 'vault.syncingProgress': 'Sincronizzazione… {ingested}/{total}', - 'vault.removing': 'Rimozione in corso…', - 'vault.relative.sec': '{count}s fa', - 'vault.relative.min': '{count}m fa', - 'vault.relative.hr': '{count}h fa', - 'vault.relative.day': '{count}d fa', - 'whatsapp.title': 'WhatsApp', - 'subconscious.interval.fiveMinutes': '5 minuti', - 'subconscious.interval.tenMinutes': '10 minuti', - 'subconscious.interval.fifteenMinutes': '15 minuti', - 'subconscious.interval.thirtyMinutes': '30 minuti', - 'subconscious.interval.oneHour': '1 ora', - 'subconscious.interval.sixHours': '6 ore', - 'subconscious.interval.twelveHours': '12 ore', - 'subconscious.interval.oneDay': '1 giorno', - 'subconscious.priority.critical': 'critico', - 'subconscious.priority.important': 'importante', - 'subconscious.priority.normal': 'normale', - 'subconscious.durationSeconds': '{seconds}s', - 'subconscious.durationMilliseconds': '{milliseconds}ms', - 'settings.search.allowedSitesLabel': 'Allowed websites', - 'settings.search.allowedSitesHint': - 'Websites the assistant may open and read while researching (one host per line, e.g. reuters.com). A host also covers its subdomains. Leave empty to block all web access.', - 'settings.search.allowedSitesAllOn': - 'The assistant can open any public website. Local and private addresses stay blocked.', - 'settings.search.allowedSitesPlaceholder': 'reuters.com\napnews.com\ngithub.com', - 'settings.search.allowedSitesSave': 'Save websites', - 'settings.search.accessModeAria': 'Web access mode', - 'settings.search.accessAllowAll': 'Allow all', - 'settings.search.accessCustom': 'Custom', - 'settings.search.accessBlockAll': 'Block all', - 'settings.search.accessBlockAllHint': - 'All web access is blocked — the assistant cannot open or read any website.', - 'memory.tab.centrality': 'Centrality', - 'graphCentrality.title': 'Knowledge Graph Centrality', - 'graphCentrality.intro': - 'PageRank over your memory graph surfaces the load-bearing hubs — and the connector entities that link otherwise-separate clusters, which a raw frequency count cannot reveal.', - 'graphCentrality.loading': 'Computing centrality…', - 'graphCentrality.errorPrefix': 'Could not load the graph:', - 'graphCentrality.retry': 'Retry', - 'graphCentrality.empty': 'No knowledge graph yet.', - 'graphCentrality.emptyHint': - 'As the assistant records facts about you, the most connected entities will surface here.', - 'graphCentrality.namespaceLabel': 'Namespace', - 'graphCentrality.namespaceAll': 'All namespaces', - 'graphCentrality.metricEntities': 'Entities', - 'graphCentrality.metricConnections': 'Connections', - 'graphCentrality.metricClusters': 'Clusters', - 'graphCentrality.clustersCaption': '{components} clusters · largest holds {largest}', - 'graphCentrality.approximateBadge': 'approximate', - 'graphCentrality.approximateTitle': 'Stopped at the iteration cap before fully converging', - 'graphCentrality.rankedHeading': 'Top entities by influence', - 'graphCentrality.colRank': '#', - 'graphCentrality.colEntity': 'Entity', - 'graphCentrality.colInfluence': 'Influence', - 'graphCentrality.colLinks': 'Links', - 'graphCentrality.bridgeBadge': 'connector', - 'graphCentrality.bridgeTitle': 'Connector — more influential than its link count suggests', - 'graphCentrality.degreeTitle': '{in} in · {out} out', - 'settings.search.engineDisabledLabel': 'Disabled', - 'settings.search.engineDisabledDesc': - 'Remove search tools from the agent context and available tool list.', -}; - -export default it1; diff --git a/app/src/lib/i18n/chunks/it-2.ts b/app/src/lib/i18n/chunks/it-2.ts deleted file mode 100644 index 9f1320fa3..000000000 --- a/app/src/lib/i18n/chunks/it-2.ts +++ /dev/null @@ -1,504 +0,0 @@ -import type { TranslationMap } from '../types'; - -// Italian (Italiano) chunk 2/5. Translated from chunks/en-2.ts. -const it2: TranslationMap = { - 'settings.ai.configStatus': 'Stato configurazione', - 'settings.ai.fallbackMode': 'Modalità di fallback', - 'settings.ai.loadedFromRuntime': 'Caricato dal runtime', - 'settings.ai.loadingDuration': 'Durata caricamento', - 'settings.ai.localRuntime': 'Runtime modello locale', - 'settings.ai.openManager': 'Apri manager', - 'settings.ai.retryDownload': 'Riprova download', - 'settings.ai.state': 'Stato', - 'settings.ai.targetModel': 'Modello target', - 'settings.ai.download': 'Scarica', - 'settings.ai.localModelUnavailable': 'Stato modello locale non disponibile.', - 'settings.ai.soulConfig': 'Configurazione persona SOUL', - 'settings.ai.refreshing': 'Aggiornamento...', - 'settings.ai.refreshSoul': 'Aggiorna SOUL', - 'settings.ai.loadingSoul': 'Caricamento configurazione SOUL...', - 'settings.ai.identity': 'Identità', - 'settings.ai.personality': 'Personalità', - 'settings.ai.safetyRules': 'Regole di sicurezza', - 'settings.ai.source': 'Origine', - 'settings.ai.loaded': 'Caricato', - 'settings.ai.toolsConfig': 'Configurazione TOOLS', - 'settings.ai.refreshTools': 'Aggiorna TOOLS', - 'settings.ai.toolsAvailable': 'Strumenti disponibili', - 'settings.ai.tools': 'strumenti', - 'settings.ai.activeSkills': 'Skill attive', - 'settings.ai.skills': 'skill', - 'settings.ai.skillsOverview': 'Panoramica skill', - 'settings.ai.refreshingAll': 'Aggiornamento totale...', - 'settings.ai.refreshAll': 'Aggiorna tutta la configurazione AI', - 'settings.notifications.suppressAll': 'Sopprimi tutte le notifiche', - 'settings.notifications.suppressAllDesc': - "Blocca tutti i toast di notifica dell'OS dalle app integrate indipendentemente dallo stato di focus.", - 'settings.notifications.toggleDnd': 'Attiva/disattiva Non disturbare', - 'settings.notifications.categories': 'Categorie', - 'settings.notifications.categoryFooter': - 'Disabilitare una categoria impedisce alle nuove notifiche di quel tipo di apparire nel centro notifiche. Le notifiche esistenti rimangono finché non vengono cancellate.', - 'settings.billing.movedToWeb': 'La fatturazione è stata spostata sul web', - 'settings.billing.openDashboard': 'Apri dashboard fatturazione', - 'settings.billing.movedToWebDesc': - "Le modifiche all'abbonamento, i metodi di pagamento, i crediti e le fatture sono ora gestiti su TinyHumans sul web.", - 'settings.billing.backToSettings': 'Torna alle impostazioni', - 'settings.billing.openingBrowser': 'Apertura del browser...', - 'settings.billing.browserNotOpen': 'Se il browser non si è aperto, usa il pulsante sopra.', - 'settings.billing.browserOpenFailed': - 'Impossibile aprire automaticamente il browser. Usa il pulsante sopra.', - 'settings.tools.chooseCapabilities': 'Scegli quali capacità OpenHuman può usare per tuo conto.', - 'settings.tools.saveChanges': 'Salva modifiche', - 'settings.tools.preferencesSaved': 'Preferenze salvate', - 'settings.tools.saveFailed': 'Salvataggio preferenze fallito. Riprova.', - 'settings.screenAwareness.mode': 'Modalità', - 'settings.screenAwareness.allExceptBlacklist': 'Tutti tranne blacklist', - 'settings.screenAwareness.whitelistOnly': 'Solo whitelist', - 'settings.screenAwareness.screenMonitoring': 'Monitoraggio schermo', - 'settings.screenAwareness.saveSettings': 'Salva impostazioni', - 'settings.screenAwareness.session': 'Sessione', - 'settings.screenAwareness.status': 'Stato', - 'settings.screenAwareness.active': 'Attivo', - 'settings.screenAwareness.stopped': 'Fermato', - 'settings.screenAwareness.remaining': 'Rimanente', - 'settings.screenAwareness.startSession': 'Avvia sessione', - 'settings.screenAwareness.stopSession': 'Ferma sessione', - 'settings.screenAwareness.analyzeNow': 'Analizza ora', - 'settings.screenAwareness.macosOnly': - 'La cattura desktop di Consapevolezza schermo e i controlli dei permessi sono attualmente supportati solo su macOS.', - 'connections.comingSoon': 'In arrivo', - 'connections.setUp': 'Configura', - 'connections.configured': 'Configurato', - 'connections.unavailable': 'Non disponibile', - 'connections.checking': 'Verifica…', - 'connections.walletConfigured': - 'Le identità locali EVM, BTC, Solana e Tron sono configurate dalla tua frase di recupero.', - 'connections.walletReady': - "Configura identità locali EVM, BTC, Solana e Tron da un'unica frase di recupero.", - 'connections.walletError': - 'Impossibile verificare lo stato del wallet. Tocca per riprovare dal pannello Frase di recupero.', - 'connections.walletChecking': 'Verifica stato wallet...', - 'connections.walletIdentities': 'Identità wallet', - 'connections.walletDerived': - 'Derivato localmente dalla tua frase di recupero e memorizzato solo come metadato sicuro.', - 'connections.privacySecurity': 'Privacy e sicurezza', - 'connections.privacySecurityDesc': - 'Tutti i dati e le credenziali sono memorizzati localmente con una politica di zero conservazione. Le tue informazioni sono crittografate e mai condivise con terze parti.', - 'channels.status.connecting': 'Connessione', - 'channels.status.notConfigured': 'Non configurato', - 'channels.noActiveRoute': 'Nessuna route attiva', - 'channels.activeRoute': 'Route attiva', - 'channels.loadingDefinitions': 'Caricamento definizioni canali...', - 'channels.channelConnections': 'Connessioni dei canali', - 'channels.configureAuthModes': - 'Configura le modalità di autenticazione per ciascun canale di messaggistica.', - 'channels.configNotAvailable': 'Configurazione per', - 'channels.channel': 'canale', - 'devOptions.coreModeNotSet': 'Modalità core: non impostata', - 'devOptions.coreModeNotSetDesc': - 'Il selettore del controllo di avvio non è stato ancora confermato. Usa Cambia modalità sul selettore per scegliere Locale o Cloud.', - 'devOptions.local': 'Locale', - 'devOptions.embeddedCoreSidecar': 'Sidecar core integrato', - 'devOptions.sidecarSpawned': "Avviato in-process dalla shell Tauri all'avvio dell'app.", - 'devOptions.cloud': 'Cloud', - 'devOptions.remoteCoreRpc': 'RPC core remoto', - 'devOptions.token': 'Token', - 'devOptions.tokenNotSet': 'non impostato — RPC restituirà 401', - 'devOptions.triggerSentryTest': 'Attiva test Sentry (staging)', - 'devOptions.triggerSentryTestDesc': - 'Genera un errore taggato per verificare la pipeline Sentry. Issue #1072 — rimuovere dopo la verifica.', - 'devOptions.sendTestEvent': 'Invia evento di test', - 'devOptions.sending': 'Invio…', - 'devOptions.eventSent': 'Evento inviato', - 'devOptions.failed': 'Fallito', - 'devOptions.appLogs': "Log dell'app", - 'devOptions.appLogsDesc': - 'Apri la cartella che contiene i file di log giornalieri. Allega il file più recente quando segnali un problema.', - 'devOptions.openLogsFolder': 'Apri cartella log', - 'mnemonic.phraseSaved': 'Frase di recupero salvata', - 'mnemonic.walletReady': - 'Le identità wallet multi-chain sono pronte. Ritorno alle impostazioni...', - 'mnemonic.writeDownWords': 'Scrivi queste', - 'mnemonic.wordsInOrder': - 'parole in ordine e conservale in un luogo sicuro. Questa frase protegge la tua chiave di crittografia locale e le identità wallet EVM, BTC, Solana e Tron.', - 'mnemonic.cannotRecover': - 'Questa frase non può mai essere recuperata se persa e dovrebbe rimanere completamente locale sul tuo dispositivo.', - 'mnemonic.copyToClipboard': 'Copia negli appunti', - 'mnemonic.alreadyHavePhrase': 'Ho già una frase di recupero', - 'mnemonic.consentSaved': - 'Ho salvato questa frase e acconsento ad usarla per la configurazione del wallet locale', - 'mnemonic.enterPhraseToRestore': - 'Inserisci la tua frase di recupero qui sotto per ripristinare le identità del wallet locale, oppure incolla la frase completa in qualsiasi campo (12 parole per i nuovi backup; le frasi a 24 parole delle versioni precedenti funzionano ancora).', - 'mnemonic.words': 'Parole', - 'mnemonic.validPhrase': 'Frase di recupero valida', - 'mnemonic.generateNewPhrase': 'Genera invece una nuova frase di recupero', - 'mnemonic.securingData': 'Protezione dei tuoi dati...', - 'mnemonic.saveRecoveryPhrase': 'Salva frase di recupero', - 'mnemonic.userNotLoaded': 'Utente non caricato. Accedi di nuovo o ricarica la pagina.', - 'mnemonic.invalidPhrase': 'Frase di recupero non valida. Controlla le parole e riprova.', - 'mnemonic.somethingWentWrong': 'Qualcosa è andato storto. Riprova.', - 'team.failedToCreate': 'Creazione team fallita', - 'team.invalidInviteCode': 'Codice invito non valido o scaduto', - 'team.failedToSwitch': 'Cambio team fallito', - 'team.failedToLeave': 'Uscita dal team fallita', - 'team.role.owner': 'Proprietario', - 'team.role.admin': 'Amministratore', - 'team.role.billingManager': 'Responsabile fatturazione', - 'team.role.member': 'Membro', - 'team.active': 'Attivo', - 'team.personalTeam': 'Team personale', - 'team.manageTeam': 'Gestisci team', - 'team.switching': 'Cambio...', - 'team.switch': 'Cambia', - 'team.leaving': 'Uscita...', - 'team.leave': 'Lascia', - 'team.yourTeams': 'I tuoi team', - 'team.createNewTeam': 'Crea nuovo team', - 'team.teamName': 'Nome team', - 'team.creating': 'Creazione...', - 'team.joinExistingTeam': 'Unisciti a un team esistente', - 'team.inviteCode': 'Codice invito', - 'team.joining': 'Adesione...', - 'team.join': 'Unisciti', - 'team.leaveTeam': 'Lascia team', - 'team.confirmLeave': 'Sei sicuro di voler lasciare', - 'team.leaveWarning': - "Perderai l'accesso al team e a tutte le sue risorse. Servirà un nuovo invito per rientrare.", - 'team.management': 'Gestione team', - 'team.notFound': 'Team non trovato', - 'team.accessDenied': 'Accesso negato', - 'team.members': 'Membri', - 'voice.title': 'Dettatura vocale', - 'voice.settings': 'Impostazioni voce', - 'voice.settingsDesc': "Tieni premuta l'hotkey per dettare e inserire testo nel campo attivo.", - 'voice.hotkey': 'Tasto di scelta rapida', - 'voice.activationMode': 'Modalità di attivazione', - 'voice.tapToToggle': 'Tocca per attivare/disattivare', - 'voice.writingStyle': 'Stile di scrittura', - 'voice.verbatimTranscription': 'Trascrizione letterale', - 'voice.naturalCleanup': 'Pulizia naturale', - 'voice.autoStart': 'Avvia il server vocale automaticamente con il core', - 'voice.customDictionary': 'Dizionario personalizzato', - 'voice.customDictionaryDesc': - "Aggiungi nomi, termini tecnici e parole di dominio per migliorare l'accuratezza del riconoscimento.", - 'voice.addWord': 'Aggiungi una parola...', - 'voice.sttDisabled': - 'La dettatura vocale è disabilitata finché il modello STT locale non è scaricato e pronto.', - 'voice.openLocalAiModel': 'Apri modello AI locale', - 'voice.serverRestarted': 'Server vocale riavviato con le nuove impostazioni.', - 'voice.settingsSaved': 'Impostazioni vocali salvate.', - 'voice.serverStarted': 'Server vocale avviato.', - 'voice.serverStopped': 'Server vocale fermato.', - 'voice.saveVoiceSettings': 'Salva impostazioni vocali', - 'voice.startVoiceServer': 'Avvia server vocale', - 'voice.stopVoiceServer': 'Ferma server vocale', - 'voice.debugTitle': 'Debug voce', - 'autocomplete.title': 'Autocompletamento', - 'autocomplete.settings': 'Impostazioni', - 'autocomplete.acceptWithTab': 'Accetta con Tab', - 'autocomplete.stylePreset': 'Preset di stile', - 'autocomplete.style.balanced': 'Bilanciato', - 'autocomplete.style.concise': 'Conciso', - 'autocomplete.style.formal': 'Formale', - 'autocomplete.style.casual': 'Informale', - 'autocomplete.style.custom': 'Personalizzato', - 'autocomplete.disabledApps': 'App disabilitate (un bundle/app token per riga)', - 'autocomplete.saveSettings': 'Salva impostazioni', - 'autocomplete.saving': 'Salvataggio…', - 'autocomplete.runtime': 'Runtime', - 'autocomplete.running': 'In esecuzione', - 'autocomplete.start': 'Avvia', - 'autocomplete.stop': 'Ferma', - 'autocomplete.settingsSaved': 'Impostazioni di autocompletamento salvate.', - 'autocomplete.started': 'Autocompletamento avviato.', - 'autocomplete.didNotStart': 'Autocompletamento non avviato. Verifica che sia abilitato.', - 'autocomplete.stopped': 'Autocompletamento fermato.', - 'autocomplete.advancedSettings': 'Impostazioni avanzate', - 'autocomplete.debugTitle': 'Debug autocompletamento', - 'chat.agentChat': 'Chat agente', - 'chat.overrides': 'Override', - 'chat.model': 'Modello', - 'chat.temperature': 'Temperatura', - 'chat.conversation': 'Conversazione', - 'chat.startAgentConversation': "Inizia una conversazione con l'agente.", - 'chat.you': 'Tu', - 'chat.agent': 'Agente', - 'chat.askAgent': "Chiedi qualsiasi cosa all'agente...", - 'chat.sendMessage': 'Invia messaggio', - 'composio.triageTitle': 'Trigger delle integrazioni', - 'composio.triageDesc': - "Quando attivo, ogni trigger Composio in arrivo passa per uno step di triage AI che classifica l'evento e può avviare azioni automatiche — un turno LLM locale per trigger. Disabilita globalmente o per singola integrazione se preferisci la revisione manuale. Se la variabile d'ambiente", - 'composio.disableAllTriage': 'Disabilita il triage AI per tutti i trigger', - 'composio.triggersStillRecorded': - 'I trigger vengono comunque registrati nella cronologia — nessun turno LLM viene eseguito.', - 'composio.disableSpecificIntegrations': 'Disabilita il triage AI per integrazioni specifiche', - 'composio.settingsSaved': 'Impostazioni salvate', - 'composio.saveFailed': 'Salvataggio fallito. Riprova.', - 'cron.title': 'Cron Job', - 'cron.scheduledJobs': 'Job pianificati', - 'cron.manageCronJobs': 'Gestisci i cron job dal core scheduler.', - 'cron.refreshCronJobs': 'Aggiorna cron job', - 'localModel.modelStatus': 'Stato del modello', - 'localModel.downloadModels': 'Scarica modelli', - 'localModel.usage': 'Utilizzo', - 'localModel.usageDesc': - 'Scegli quali sottosistemi girano sul modello locale. Quelli disattivati usano il cloud.', - 'localModel.enableRuntime': 'Abilita runtime AI locale', - 'localModel.enableRuntimeDesc': - "Interruttore principale. Disattivato di default — Ollama resta inattivo. Quando attivo, il tree summarizer, lo screen intelligence e l'autocompletamento usano sempre il modello locale.", - 'localModel.advancedSettings': 'Impostazioni avanzate', - 'localModel.debugTitle': 'Debug modello locale', - 'localModel.ollamaServer.helperText': 'Esempio: http://192.168.1.5:11434', - 'localModel.ollamaServer.label': 'URL del server Ollama', - 'localModel.ollamaServer.modelCount': 'modelli', - 'localModel.ollamaServer.placeholder': 'http://localhost:11434', - 'localModel.ollamaServer.reachable': 'Raggiungibile', - 'localModel.ollamaServer.resetButton': 'Ripristina predefinito', - 'localModel.ollamaServer.saveButton': 'Salva', - 'localModel.ollamaServer.testButton': 'Testa connessione', - 'localModel.ollamaServer.unreachable': 'Non raggiungibile', - 'localModel.ollamaServer.validationError': 'Deve essere un URL http:// o https:// valido', - 'screenAwareness.debugTitle': 'Debug consapevolezza schermo', - 'memory.debugTitle': 'Debug memoria', - 'webhooks.debugTitle': 'Debug webhook', - 'notifications.routingTitle': 'Instradamento notifiche', - 'common.reload': 'Ricarica', - 'common.skip': 'Salta', - 'common.disable': 'Disabilita', - 'common.enable': 'Abilita', - 'chat.safetyTimeout': - "Nessuna risposta dall'agente dopo 2 minuti. Riprova o controlla la connessione.", - 'chat.filter.all': 'Tutti', - 'chat.filter.work': 'Lavoro', - 'chat.filter.briefing': 'Briefing', - 'chat.filter.notification': 'Notifica', - 'chat.filter.workers': 'Worker', - 'chat.selectThread': 'Seleziona un thread', - 'chat.threads': 'Thread', - 'chat.noThreads': 'Nessun thread', - 'chat.noLabelThreads': 'Nessun thread "{label}"', - 'chat.noWorkerThreads': 'Nessun thread worker', - 'chat.deleteThread': 'Elimina thread', - 'chat.deleteThreadConfirm': 'Sei sicuro di voler eliminare "{title}"?', - 'chat.untitledThread': 'Thread senza titolo', - 'chat.editThreadTitle': 'Edit thread title', - 'chat.hideSidebar': 'Nascondi barra laterale', - 'chat.showSidebar': 'Mostra barra laterale', - 'chat.newThreadShortcut': 'Nuovo thread (/new)', - 'chat.new': 'Nuovo', - 'chat.failedToLoadMessages': 'Impossibile caricare i messaggi', - 'chat.thinkingIteration': 'Sto pensando... ({n})', - 'chat.thinkingDots': 'Sto pensando...', - 'chat.approachingLimit': 'Limite di utilizzo in avvicinamento', - 'chat.approachingLimitMsg': 'Hai usato il {pct}% della tua quota disponibile.', - 'chat.upgrade': 'Aggiorna', - 'chat.weeklyLimitHit': 'Hai raggiunto il limite settimanale.', - 'chat.resets': 'Reset', - 'chat.topUpToContinue': 'Ricarica per continuare.', - 'chat.budgetComplete': - 'Il tuo budget incluso è esaurito. Aggiungi crediti o passa a un piano superiore per continuare.', - 'chat.topUp': 'Ricarica', - 'chat.cycle': 'Ciclo', - 'chat.cycleSpent': 'Speso in questo ciclo', - 'chat.cycleRemaining': 'Rimanente', - 'chat.left': 'rimasti', - 'chat.setup': 'Configura', - 'chat.switchToText': 'Passa al testo', - 'chat.transcribing': 'Trascrizione...', - 'chat.stopAndSend': 'Ferma e invia', - 'chat.startTalking': 'Inizia a parlare', - 'chat.playingVoiceReply': 'Riproduzione risposta vocale', - 'chat.voiceHint': 'Usa il microfono per parlare', - 'chat.micUnavailable': 'Microfono non disponibile', - 'chat.turn': 'turno', - 'chat.turns': 'turni', - 'chat.openWorkerThread': 'Apri thread worker', - 'chat.attachment.attach': 'Allega immagine', - 'chat.attachment.remove': 'Rimuovi {name}', - 'chat.attachment.tooMany': 'Massimo {max} immagini per messaggio', - 'chat.attachment.tooLarge': "L'immagine supera il limite di dimensione di {max}", - 'chat.attachment.unsupportedType': 'Tipo di file non supportato. Usa PNG, JPEG, WebP, GIF o BMP.', - 'chat.attachment.readFailed': 'Impossibile leggere il file', - 'memory.searchAria': 'Cerca memoria', - 'memory.searchPlaceholder': 'Cerca voci di memoria...', - 'memory.sourceFilter.all': 'Tutte le origini', - 'memory.sourceFilter.email': 'E-mail', - 'memory.sourceFilter.calendar': 'Calendario', - 'memory.sourceFilter.telegram': 'Telegram', - 'memory.sourceFilter.aiInsight': 'AI Insight', - 'memory.sourceFilter.system': 'Sistema', - 'memory.sourceFilter.trading': 'Trading', - 'memory.sourceFilter.security': 'Sicurezza', - 'memory.ingestionActivity': 'Attività di ingestione', - 'memory.events': 'eventi', - 'memory.event': 'evento', - 'memory.overTheLast': 'negli ultimi', - 'memory.months': 'mesi', - 'memory.peak': 'Picco', - 'memory.perDay': '/giorno', - 'memory.less': 'Meno', - 'memory.more': 'Più', - 'memory.on': 'il', - 'memory.loading': 'Caricamento memoria', - 'memory.fetching': 'Recupero delle tue voci di memoria...', - 'memory.analyzing': 'Analisi della memoria', - 'memory.analyzingHint': 'Elaborazione delle tue memorie per estrarre insight...', - 'memory.noMatches': 'Nessuna corrispondenza trovata', - 'memory.noMatchesHint': 'Prova a cambiare i termini di ricerca o i filtri.', - 'memory.allCaughtUp': 'Tutto aggiornato', - 'memory.allCaughtUpHint': 'Nessuna nuova voce di memoria da elaborare.', - 'memory.noAnalysis': 'Nessuna analisi', - 'memory.noAnalysisHint': "Esegui un'analisi per scoprire pattern nelle tue memorie.", - 'memory.emptyHint': 'Inizia a interagire per creare le tue prime memorie.', - 'mic.unavailable': 'Microfono non disponibile', - 'mic.permissionDenied': 'Permesso microfono negato', - 'mic.failedToStartRecorder': 'Avvio del registratore fallito', - 'mic.transcribing': 'Trascrizione...', - 'mic.tapToSend': 'Tocca per inviare', - 'mic.waitingForAgent': "In attesa dell'agente...", - 'mic.tapAndSpeak': 'Tocca e parla', - 'mic.stopRecording': 'Ferma registrazione e invia', - 'mic.startRecording': 'Avvia registrazione', - 'token.usageLimitReached': 'Limite di utilizzo raggiunto', - 'token.approachingLimit': 'Limite in avvicinamento', - 'token.planClickForDetails': 'piano - clicca per dettagli', - 'token.sessionTokens': 'Ingresso: {in} | Uscita: {out} | Turni: {turns}', - 'token.limit': 'Limite raggiunto', - 'catalog.noCapabilityBinding': 'Nessun binding di capacità', - 'catalog.downloadFailed': 'Download fallito', - 'catalog.active': 'Attivo', - 'catalog.installed': 'Installato', - 'catalog.notDownloaded': 'Non scaricato', - 'catalog.inUse': 'In uso', - 'catalog.use': 'Usa', - 'catalog.deleteModel': 'Elimina modello', - 'catalog.download': 'Scarica', - 'navigator.recent': 'Recenti', - 'navigator.today': 'Oggi', - 'navigator.thisWeek': 'Questa settimana', - 'navigator.sources': 'Origini', - 'navigator.email': 'Email', - 'navigator.slack': 'Slack', - 'navigator.chat': 'Chat', - 'navigator.documents': 'Documenti', - 'navigator.people': 'Persone', - 'navigator.topics': 'Argomenti', - 'dreams.description': - "I sogni sono riflessioni generate dall'AI che sintetizzano i pattern dalle tue memorie.", - 'dreams.comingSoon': 'In arrivo', - 'assignment.memoryLlm': 'LLM memoria', - 'assignment.memoryLlmAria': 'Selezione LLM memoria', - 'assignment.embedder': 'Incorpora', - 'assignment.loaded': 'Caricato', - 'assignment.notDownloaded': 'Non scaricato', - 'assignment.usedForExtractSummarise': 'Usato per estrazione e riassunto', - 'insights.knownFacts': 'Fatti noti', - 'insights.preferences': 'Preferenze', - 'insights.relationships': 'Relazioni', - 'insights.skills': 'Competenze', - 'insights.opinions': 'Opinioni', - // Developer options menu items (#2225) — English stubs; native translations welcome - 'devOptions.menuAi': 'Configurazione AI', - 'devOptions.menuAiDesc': 'Provider cloud, modelli Ollama locali e routing per carico di lavoro', - 'devOptions.menuScreenAware': 'Riconoscimento schermo', - 'devOptions.menuScreenAwareDesc': - "Autorizzazioni per l'acquisizione dello schermo, policy di monitoraggio e controlli della sessione", - 'devOptions.menuMessaging': 'Canali di messaggistica', - 'devOptions.menuMessagingDesc': - 'Configura le modalità di autenticazione Telegram/Discord e il routing del canale predefinito', - 'devOptions.menuTools': 'Strumenti', - 'devOptions.menuToolsDesc': - 'Abilita o disabilita le funzionalità che OpenHuman può utilizzare per tuo conto', - 'devOptions.menuAgentChat': "Chat dell'agente", - 'devOptions.menuAgentChatDesc': - "Conversazione dell'agente di test con override di modello e temperatura", - 'devOptions.menuCronJobs': 'Cron Jobs', - 'devOptions.menuCronJobsDesc': - 'Visualizza e configura processi pianificati per le competenze di runtime', - 'devOptions.menuLocalModelDebug': 'Debug modello locale', - 'devOptions.menuLocalModelDebugDesc': - 'Ollama configurazione, download di risorse, test del modello e diagnostica', - 'devOptions.menuWebhooksDebug': 'Webhook', - 'devOptions.menuWebhooksDebugDesc': - 'Esamina le registrazioni dei webhook di runtime e i registri delle richieste acquisite', - 'devOptions.menuIntelligence': 'Intelligenza', - 'devOptions.menuIntelligenceDesc': - 'Spazio di lavoro della memoria, motore subconscio, sogni e impostazioni', - 'devOptions.menuNotificationRouting': 'Routing delle notifiche', - 'devOptions.menuNotificationRoutingDesc': - "Punteggio di importanza AI ed escalation dell'agente di orchestrazione per gli avvisi di integrazione", - 'devOptions.menuComposeIOTriggers': 'Trigger ComposeIO', - 'devOptions.menuComposeIOTriggersDesc': - "Visualizza la cronologia e l'archivio dei trigger ComposeIO", - 'devOptions.menuComposioRouting': 'Composio Routing (modalità diretta)', - 'devOptions.menuComposioRoutingDesc': - 'Porta la tua chiave Composio API e instrada le chiamate direttamente a backend.composio.dev', - 'devOptions.menuComposioTriggers': 'Trigger di integrazione', - 'devOptions.menuComposioTriggersDesc': - 'Configura le impostazioni di triage AI per i trigger di integrazione Composio', - 'mic.deviceSelector': 'Dispositivo microfono', - 'mic.tapToSendCountdown': 'Tocca per inviare ({seconds}s)', - 'settings.agents.title': 'Agents', - 'settings.agents.subtitle': - 'Manage the agents available for delegation — built-in defaults and your own custom agents.', - 'settings.agents.menuDesc': 'Manage built-in and custom agents', - 'settings.agents.newAgent': 'New agent', - 'settings.agents.loadError': "Couldn't load agents", - 'settings.agents.empty': 'No agents yet', - 'settings.agents.sourceDefault': 'Built-in', - 'settings.agents.sourceCustom': 'Custom', - 'settings.agents.enable': 'Enable agent', - 'settings.agents.disable': 'Disable agent', - 'settings.agents.edit': 'Edit', - 'settings.agents.delete': 'Delete', - 'settings.agents.reset': 'Reset to default', - 'settings.agents.modelLabel': 'Model', - 'settings.agents.toolsLabel': 'Tools', - 'settings.agents.toolsAll': 'All tools', - 'settings.agents.toolsCount': '{count} tools', - 'settings.agents.actionFailed': "Couldn't update the agent", - 'settings.agents.orchestratorLocked': 'The orchestrator is always enabled.', - 'settings.agents.editor.createTitle': 'New agent', - 'settings.agents.editor.editTitle': 'Edit agent', - 'settings.agents.editor.id': 'ID', - 'settings.agents.editor.idHint': 'Lowercase letters, numbers, _ and - only.', - 'settings.agents.editor.name': 'Name', - 'settings.agents.editor.description': 'Description', - 'settings.agents.editor.model': 'Model (optional)', - 'settings.agents.editor.modelPlaceholder': 'e.g. inherit, hint:fast, or a model id', - 'settings.agents.editor.systemPrompt': 'System prompt (optional)', - 'settings.agents.editor.tools': 'Allowed tools', - 'settings.agents.editor.toolsHint': 'One tool name per line. Use * for all tools.', - 'settings.agents.editor.defaultsNote': - 'Editing a built-in agent saves an override you can reset later.', - 'settings.agents.editor.save': 'Save', - 'settings.agents.editor.create': 'Create agent', - 'settings.agents.editor.saving': 'Saving…', - 'settings.agentsSection.title': 'Agents', - 'settings.agentsSection.description': - 'Manage your agents, their autonomy, and what they can access on this computer.', - 'settings.agentsSection.menuDesc': 'Registry, autonomy & OS access', - 'settings.agents.editor.notFound': 'Agent not found.', - 'settings.agents.editor.modelInherit': 'Inherit (platform default)', - 'settings.agents.editor.modelHints': 'Route hints', - 'settings.agents.editor.modelTiers': 'Model tiers', - 'settings.agents.editor.modelCustom': 'Custom model id…', - 'settings.agents.editor.modelCustomPlaceholder': 'e.g. anthropic/claude-sonnet-4', - 'settings.agents.editor.selectTools': 'Add tools', - 'settings.agents.editor.toolsAllSelected': 'All tools', - 'settings.agents.editor.toolsNoneSelected': 'No tools selected', - 'settings.agents.editor.removeToolAria': 'Remove {tool}', - 'settings.agents.editor.toolsModalTitle': 'Allowed tools', - 'settings.agents.editor.toolsSelectedCount': '{count} selected', - 'settings.agents.editor.toolsSearchPlaceholder': 'Search tools…', - 'settings.agents.editor.toolsAllowAll': 'Allow all tools (*)', - 'settings.agents.editor.toolsAllowAllHint': 'This agent can use every available tool.', - 'settings.agents.editor.toolsLoading': 'Loading tools…', - 'settings.agents.editor.toolsLoadError': 'Couldn’t load tools', - 'settings.agents.editor.toolsEmpty': 'No tools match your search.', - 'settings.agents.editor.toolsDone': 'Done', - 'settings.agents.editor.builtInReadonly': - 'Built-in agents can’t be edited. You can enable, disable, or reset them from the agents list.', -}; - -export default it2; diff --git a/app/src/lib/i18n/chunks/it-3.ts b/app/src/lib/i18n/chunks/it-3.ts deleted file mode 100644 index 4964c4ea3..000000000 --- a/app/src/lib/i18n/chunks/it-3.ts +++ /dev/null @@ -1,507 +0,0 @@ -import type { TranslationMap } from '../types'; - -// Italian (Italiano) chunk 3/5. Translated from chunks/en-3.ts. -const it3: TranslationMap = { - 'insights.other': 'Altro', - 'insights.title': 'Insight', - 'insights.empty': - 'Nessuna insight. Le insight vengono generate man mano che la tua memoria cresce.', - 'insights.description': 'Basato su {count} relazioni nel tuo grafo di memoria.', - 'insights.items': 'elementi', - 'insights.more': 'altri', - 'calls.joiningCall': 'Accesso alla chiamata in corso', - 'calls.meetWindowOpening': 'La finestra di Meet si sta aprendo...', - 'calls.failedToStart': 'Avvio della chiamata Meet fallito', - 'calls.couldNotStart': 'Impossibile avviare la chiamata', - 'calls.failedToClose': 'Chiusura chiamata fallita', - 'calls.couldNotClose': 'Impossibile chiudere la chiamata', - 'calls.joinMeet': 'Unisciti a una chiamata Google Meet', - 'calls.joinMeetDescription': 'Inserisci un link Google Meet per unirti.', - 'calls.meetLink': 'Link Meet', - 'calls.displayName': 'Nome visualizzato', - 'calls.openingMeet': 'Apertura di Meet...', - 'calls.joinCall': 'Unisciti alla chiamata', - 'calls.activeCalls': 'Chiamate attive', - 'calls.leave': 'Esci', - 'workspace.wipeConfirm': - 'Sei sicuro di voler cancellare tutta la memoria? Questa azione non può essere annullata.', - 'workspace.resetTreeConfirm': "Sei sicuro di voler ricostruire l'albero di memoria?", - 'workspace.wipeTitle': 'Cancella memoria', - 'workspace.resetting': 'Ripristino...', - 'workspace.resetMemory': 'Ripristina memoria', - 'workspace.resetTreeTitle': 'Ricostruisci albero di memoria', - 'workspace.rebuilding': 'Ricostruzione...', - 'workspace.resetMemoryTree': 'Ripristina albero di memoria', - 'workspace.building': 'Costruzione...', - 'workspace.buildSummaryTrees': 'Costruisci alberi di riassunto', - 'workspace.viewVault': 'Visualizza vault', - 'workspace.openingVaultTitle': 'Apertura del vault in Obsidian', - 'workspace.openingVaultMessage': - "If Obsidian doesn't open, install it from obsidian.md or use Reveal Folder. Vault path:", - 'workspace.openVaultFailedTitle': "Couldn't open vault in Obsidian", - 'workspace.openVaultFailedMessage': - 'Utilizzare Reveal Folder per aprire direttamente la directory del vault. Percorso del vault:', - 'workspace.revealVaultFailed': "Couldn't reveal vault folder", - 'workspace.revealFolder': 'Rivela cartella', - 'workspace.checkingVault': 'Checking…', - 'workspace.vaultNotRegisteredHelp': - 'Obsidian only opens folders you\'ve added as a vault. In Obsidian, choose "Open folder as vault" and pick the folder below — you only need to do this once. Then click View Vault again.', - 'workspace.obsidianNotFoundHelp': - "We couldn't find Obsidian on this device. Install it, or — if it's installed somewhere non-standard — set its config folder under Advanced.", - 'workspace.openAnyway': 'Open in Obsidian anyway', - 'workspace.installObsidian': 'Install Obsidian', - 'workspace.obsidianAdvanced': 'Obsidian installed elsewhere?', - 'workspace.obsidianConfigDirLabel': 'Obsidian config folder', - 'workspace.obsidianConfigDirHint': - 'Path to the folder containing obsidian.json (e.g. ~/.config/obsidian). Leave blank to auto-detect.', - 'workspace.obsidianConfigDirPlaceholder': '~/.config/obsidian', - 'workspace.graphLoadFailed': 'Impossibile caricare il grafo di memoria', - 'workspace.loadingGraph': 'Caricamento grafo di memoria...', - 'workspace.graphViewMode': 'Modalità di visualizzazione grafo di memoria', - 'workspace.trees': 'Alberi', - 'workspace.contacts': 'Contatti', - 'graph.noContactMentions': 'Nessuna menzione di contatto', - 'graph.noMemory': 'Nessuna memoria', - 'graph.source': 'Origine', - 'graph.topic': 'Argomento', - 'graph.global': 'Globale', - 'graph.document': 'Documento', - 'graph.contact': 'Contatto', - 'graph.nodes': 'nodi', - 'graph.parentChild': 'genitore-figlio', - 'graph.documentContact': 'documento-contatto', - 'graph.link': 'collegamento', - 'graph.links': 'collegamenti', - 'graph.children': 'figli', - 'graph.clickToOpenObsidian': 'Clic per aprire in Obsidian', - 'graph.person': 'Persona', - 'modal.dontShowAgain': 'Non mostrare suggerimenti simili', - 'reflections.loading': 'Caricamento riflessioni...', - 'reflections.empty': 'Nessuna riflessione', - 'reflections.title': 'Riflessioni', - 'reflections.proposedAction': 'Azione proposta', - 'reflections.act': 'Agisci', - 'reflections.dismiss': 'Ignora', - 'whatsapp.chatsSynced': 'chat sincronizzate', - 'whatsapp.chatSynced': 'chat sincronizzata', - 'sync.active': 'Attivo', - 'sync.recent': 'Recenti', - 'sync.idle': 'Inattivo', - 'sync.memorySources': 'Origini di memoria', - 'sync.noConnectedSources': 'Nessuna origine connessa', - 'sync.chunks': 'chunk', - 'sync.lastChunk': 'Ultimo chunk:', - 'sync.pending': 'in attesa', - 'sync.processed': 'elaborati', - 'sync.syncing': 'Sincronizzazione…', - 'sync.sync': 'Sincronizza', - 'sync.failedToLoad': 'Impossibile caricare lo stato di sincronizzazione', - 'sync.noContent': - "Nessun contenuto è stato sincronizzato nella memoria. Connetti un'integrazione per iniziare.", - 'memorySources.title': 'Memory Sources', - 'memorySources.empty': 'No memory sources yet. Add one to start feeding memory.', - 'memorySources.loadingConnections': 'Loading connections…', - 'memorySources.noConnections': - 'No active Composio connections found. Connect an integration first.', - 'memorySources.pickConnection': 'Pick a connection', - 'memorySources.selectConnection': '— Select a connection —', - 'memorySources.composioListFailed': 'Failed to load Composio connections.', - 'memorySources.browse': 'Browse…', - 'memorySources.folderPathPlaceholder': '/Users/you/notes', - 'memorySources.globPatternPlaceholder': '**/*.md', - 'memorySources.repoUrlPlaceholder': 'https://github.com/org/repo', - 'memorySources.branchPlaceholder': 'main', - 'memorySources.feedUrlPlaceholder': 'https://example.com/feed.xml', - 'memorySources.pageUrlPlaceholder': 'https://example.com/article', - 'memorySources.cssSelectorPlaceholder': 'article', - 'memorySources.searchQueryPlaceholder': 'from:user AI safety', - 'memorySources.kind.composio': 'Integration', - 'memorySources.kind.folder': 'Local Folder', - 'memorySources.kind.github_repo': 'GitHub Repo', - 'memorySources.kind.twitter_query': 'Twitter Search', - 'memorySources.kind.rss_feed': 'RSS Feed', - 'memorySources.kind.web_page': 'Web Page', - 'memorySources.sync.successTitle': 'Syncing', - 'memorySources.sync.successMessage': 'Progress will appear shortly.', - 'memorySources.sync.failedTitle': 'Sync failed:', - 'time.justNow': 'just now', - 'time.secondsAgoSuffix': 's ago', - 'time.minutesAgoSuffix': 'm ago', - 'time.hoursAgoSuffix': 'h ago', - 'time.daysAgoSuffix': 'd ago', - 'memorySources.customSources': 'Custom Sources', - 'memorySources.addSource': 'Add Source', - 'memorySources.noCustomSources': - 'No custom sources yet. Add a folder, GitHub repo, RSS feed, or web page to start.', - 'memorySources.pickKind': 'What kind of source do you want to add?', - 'memorySources.backToKinds': 'Back to source types', - 'memorySources.label': 'Label', - 'memorySources.labelPlaceholder': 'My research notes', - 'memorySources.add': 'Add', - 'memorySources.adding': 'Adding…', - 'memorySources.added': 'Source added', - 'memorySources.removed': 'Source removed', - 'memorySources.remove': 'Remove', - 'memorySources.enable': 'Enable', - 'memorySources.disable': 'Disable', - 'memorySources.toggleFailed': 'Toggle failed', - 'memorySources.removeFailed': 'Remove failed', - 'memorySources.folderPath': 'Folder path', - 'memorySources.globPattern': 'Glob pattern', - 'memorySources.repoUrl': 'Repository URL', - 'memorySources.branch': 'Branch', - 'memorySources.feedUrl': 'Feed URL', - 'memorySources.pageUrl': 'Page URL', - 'memorySources.cssSelector': 'CSS selector (optional)', - 'memorySources.searchQuery': 'Search query', - 'backend.aiBackend': 'Backend AI', - 'backend.cloud': 'Cloud', - 'backend.recommended': 'Consigliato', - 'backend.cloudDescription': - "Modelli veloci e potenti ospitati sui nostri server. Pronti all'uso immediatamente.", - 'backend.privacyNote': - 'Nessun dato personale, messaggio o chiave viene mai inviato ai nostri server.', - 'backend.local': 'Locale', - 'backend.advanced': 'Avanzato', - 'backend.localDescription': - 'Esegui i modelli sulla tua macchina con Ollama. Privacy totale, richiede configurazione.', - 'backend.ramRecommended': '16GB+ di RAM consigliati', - 'subconscious.tasks': 'attività', - 'subconscious.ticks': 'tick', - 'subconscious.last': 'Ultimo', - 'subconscious.failed': 'fallito', - 'subconscious.tickInterval': 'Intervallo di tick', - 'subconscious.runNow': 'Esegui ora', - 'subconscious.providerUnavailableTitle': 'Subconscio in pausa', - 'subconscious.providerSettings': 'Impostazioni IA', - 'subconscious.approvalNeeded': 'Approvazione necessaria', - 'subconscious.requiresApproval': 'Richiede approvazione', - 'subconscious.fixInConnections': 'Correggi in Connessioni', - 'subconscious.goAhead': 'Procedi', - 'subconscious.activeTasks': 'Attività attive', - 'subconscious.noActiveTasks': 'Nessuna attività attiva', - 'subconscious.default': 'Predefinito', - 'subconscious.addTaskPlaceholder': 'Aggiungi una nuova attività...', - 'subconscious.activityLog': 'Log attività', - 'subconscious.noActivity': 'Nessuna attività', - 'subconscious.decision.nothingNew': 'Niente di nuovo', - 'subconscious.decision.completed': 'Completato', - 'subconscious.decision.evaluating': 'Valutazione', - 'subconscious.decision.waitingApproval': 'In attesa di approvazione', - 'subconscious.decision.failed': 'Fallito', - 'subconscious.decision.cancelled': 'Annullato', - 'subconscious.decision.skipped': 'Saltato', - 'actionable.complete': 'Completa', - 'actionable.dismiss': 'Ignora', - 'actionable.snooze': 'Posticipa', - 'actionable.new': 'Nuovo', - 'stats.storage': 'Archiviazione', - 'stats.files': 'file', - 'stats.documents': 'Documenti', - 'stats.today': 'oggi', - 'stats.namespaces': 'Namespace', - 'stats.relations': 'Relazioni', - 'stats.firstMemory': 'Prima memoria', - 'stats.latest': 'Ultime', - 'stats.sessions': 'Sessioni', - 'stats.tokens': 'token', - 'bootCheck.invalidUrl': 'Inserisci un URL di runtime.', - 'bootCheck.urlMustStartWith': "L'URL deve iniziare con http:// o https://", - 'bootCheck.validUrlRequired': 'Non sembra un URL valido (prova https://core.example.com/rpc)', - 'bootCheck.tokenRequired': 'Servirà un token di autenticazione per connettersi.', - 'bootCheck.chooseCoreMode': 'Seleziona un runtime', - 'bootCheck.connectToCore': 'Connetti al tuo runtime', - 'bootCheck.desktopDescription': - 'OpenHuman ha bisogno di un runtime per pensare. Scegli dove farlo girare.', - 'bootCheck.webDescription': - "Sul web, OpenHuman si connette a un runtime che controlli tu. Inserisci sotto URL e token di autenticazione, oppure scarica l'app desktop per farne girare uno direttamente sulla tua macchina.", - 'bootCheck.preferDesktop': 'Preferisci tenere tutto sul tuo dispositivo?', - 'bootCheck.downloadDesktop': "Scarica l'app desktop", - 'bootCheck.localRecommended': 'Esegui localmente (consigliato)', - 'bootCheck.localDescription': - 'Gira direttamente sul tuo computer. Più veloce, completamente privato, niente da configurare.', - 'bootCheck.cloudMode': 'Esegui sul cloud (complesso)', - 'bootCheck.cloudDescription': - 'Connettiti a un runtime che stai ospitando altrove. Resta online 24×7 così non devi tenere acceso questo dispositivo.', - 'bootCheck.coreRpcUrl': 'URL runtime', - 'bootCheck.rpcUrlPlaceholder': 'https://core.example.com/rpc', - 'bootCheck.authToken': 'Token di autenticazione', - 'bootCheck.bearerTokenPlaceholder': 'Il bearer token del tuo runtime remoto', - 'bootCheck.storedLocally': 'Conservato solo su questo dispositivo. Inviato come ', - 'bootCheck.testing': 'Test in corso…', - 'bootCheck.testConnection': 'Prova connessione', - 'bootCheck.connectedOk': 'Connesso. Tutto a posto.', - 'bootCheck.authFailed': 'Token non valido. Controllalo e riprova.', - 'bootCheck.unreachablePrefix': 'Impossibile raggiungerlo:', - 'bootCheck.checkingCore': 'Attivazione del runtime…', - 'bootCheck.cannotReach': 'Impossibile raggiungere il runtime', - 'bootCheck.cannotReachDesc': - 'Non siamo riusciti a connetterci al tuo runtime. Vuoi provarne uno diverso?', - 'bootCheck.switchMode': 'Scegli un runtime diverso', - 'bootCheck.quit': 'Esci', - 'bootCheck.legacyDetected': 'Runtime in background legacy rilevato', - 'bootCheck.legacyDescription': - 'Un daemon OpenHuman installato separatamente è già in esecuzione su questo dispositivo. Dobbiamo rimuoverlo prima che il runtime integrato possa subentrare.', - 'bootCheck.removing': 'Rimozione…', - 'bootCheck.removeContinue': 'Rimuovi e continua', - 'bootCheck.localNeedsRestart': 'Il runtime locale necessita di un riavvio', - 'bootCheck.localNeedsRestartDesc': - "Il tuo runtime locale ha una versione diversa da quella dell'app. Un riavvio rapido li riallineerà.", - 'bootCheck.restarting': 'Riavvio…', - 'bootCheck.restartCore': 'Riavvia runtime', - 'bootCheck.cloudNeedsUpdate': 'Il runtime cloud necessita di un aggiornamento', - 'bootCheck.cloudNeedsUpdateDesc': - "Il tuo runtime cloud ha una versione diversa da quella dell'app. Esegui l'updater per riallinearli.", - 'bootCheck.updating': 'Aggiornamento…', - 'bootCheck.updateCloudCore': 'Aggiorna runtime cloud', - 'bootCheck.versionCheckFailed': 'Verifica versione runtime fallita', - 'bootCheck.versionCheckFailedDesc': - 'Il runtime è attivo ma non comunica la sua versione. Potrebbe essere obsoleto. Riavvialo o aggiornalo per continuare.', - 'bootCheck.working': 'Elaborazione…', - 'bootCheck.restartUpdateCore': 'Riavvia / aggiorna runtime', - 'bootCheck.unexpectedError': 'Errore inatteso del controllo di avvio', - 'bootCheck.actionFailed': 'Qualcosa è andato storto. Riprova.', - 'bootCheck.portConflictTitle': "Impossibile avviare il motore dell'app", - 'bootCheck.portConflictBody': - 'Un altro processo sta usando la porta di rete necessaria a OpenHuman. Tenteremo di risolvere il problema automaticamente.', - 'bootCheck.portConflictFixButton': 'Correzione automatica', - 'bootCheck.portConflictFixing': 'Correzione in corso…', - 'bootCheck.portConflictFixFailed': - 'La correzione automatica non ha funzionato. Riavvia il computer e riprova.', - 'notifications.justNow': 'adesso', - 'notifications.minAgo': '{n}m fa', - 'notifications.hrAgo': '{n}h fa', - 'notifications.dayAgo': '{n}g fa', - 'notifications.category.messages': 'Messaggi', - 'notifications.category.agents': 'Agenti', - 'notifications.category.skills': 'Skill', - 'notifications.category.system': 'Sistema', - 'notifications.category.meetings': 'Riunioni', - 'notifications.category.reminders': 'Promemoria', - 'notifications.category.important': 'Importanti', - 'about.update.status.checking': 'Verifica in corso...', - 'about.update.status.available': 'v{version} disponibile', - 'about.update.status.availableNoVersion': 'Aggiornamento disponibile', - 'about.update.status.downloading': 'Download in corso...', - 'about.update.status.readyToInstall': "v{version} pronta per l'installazione", - 'about.update.status.readyToInstallNoVersion': - 'Una nuova versione è stata scaricata ed è pronta. Riavvia per applicare.', - 'about.update.status.installing': 'Installazione...', - 'about.update.status.restarting': 'Riavvio in corso...', - 'about.update.status.upToDate': "Stai utilizzando l'ultima versione.", - 'about.update.status.error': 'Verifica aggiornamento fallita', - 'about.update.status.default': 'Verifica aggiornamenti', - 'welcome.connectionFailed': 'Connessione fallita: {status} {statusText}', - 'welcome.connectionFailedMsg': 'Connessione fallita: {message}', - 'welcome.continueLocally': 'Continua localmente', - 'welcome.localSessionStarting': 'Avvio sessione locale...', - 'welcome.localSessionDesc': 'Utilizza un profilo locale offline e salta TinyHumans OAuth.', - 'chat.agentChatDesc': "Apri una sessione di chat diretta con l'agente.", - 'channels.activeRouteValue': '{channel} tramite {authMode}', - 'privacy.dataKind.messages': 'Messaggi', - 'privacy.dataKind.agents': 'Agenti', - 'privacy.dataKind.skills': 'Skill', - 'privacy.dataKind.system': 'Sistema', - 'privacy.dataKind.meetings': 'Riunioni', - 'privacy.dataKind.reminders': 'Promemoria', - 'privacy.dataKind.important': 'Importante', - 'onboarding.enableLocalAI': 'Abilita AI locale', - 'onboarding.skills.status.available': 'Disponibile', - 'onboarding.skills.status.connected': 'Connesso', - 'onboarding.skills.status.connecting': 'Connessione', - 'onboarding.skills.status.error': 'Errore', - 'onboarding.skills.status.unavailable': 'Non disponibile', - 'composio.statusUnavailable': 'Stato non disponibile', - 'composio.envVarOverrides': 'è impostata, sovrascrive questa impostazione.', - 'memory.day.sun': 'Dom', - 'memory.day.mon': 'Lun', - 'memory.day.tue': 'Mar', - 'memory.day.wed': 'Mer', - 'memory.day.thu': 'Gio', - 'memory.day.fri': 'Ven', - 'memory.day.sat': 'Sab', - 'memory.ingesting': 'Ingestione', - 'memory.ingestionQueued': 'In coda', - 'memory.ingestingTitle': 'Ingestione di {title}', - 'mic.noAudioCaptured': 'Nessun audio catturato', - 'mic.noSpeechDetected': 'Nessun parlato rilevato', - 'mic.lowConfidenceResult': "Impossibile comprendere l'audio chiaramente — riprova", - 'mic.failedToStopRecording': 'Impossibile fermare la registrazione: {message}', - 'mic.transcriptionFailed': 'Trascrizione fallita: {message}', - 'reflections.kind.retrospective': 'Retrospettiva', - 'reflections.kind.derivedFact': 'Fatto derivato', - 'reflections.kind.moodInsight': "Insight sull'umore", - 'reflections.kind.relationshipInsight': 'Insight relazionale', - 'graph.tooltip.summary': 'Riassunto', - 'graph.tooltip.contact': 'Contatto', - 'localModel.usage.never': 'Mai', - 'localModel.usage.mediumLoad': 'Carico medio', - 'localModel.usage.lowLoad': 'Carico basso', - 'localModel.usage.idleMode': 'Modalità inattiva', - 'localModel.rebootstrapComplete': 'Re-bootstrap del modello completato.', - 'localModel.modelsVerified': 'Modelli locali verificati.', - 'accounts.addModal.allConnected': 'Tutti connessi', - 'accounts.addModal.title': 'Aggiungi account', - 'accounts.respondQueue.empty': 'Vuota', - 'accounts.respondQueue.hide': 'Nascondi coda di risposta', - 'accounts.respondQueue.loadFailed': 'Impossibile caricare la coda di risposta', - 'accounts.respondQueue.loading': 'Caricamento coda…', - 'accounts.respondQueue.pending': 'In attesa', - 'accounts.respondQueue.show': 'Mostra coda di risposta', - 'accounts.respondQueue.title': 'Coda di risposta', - 'accounts.webviewHost.almostReady': 'Quasi pronto...', - 'accounts.webviewHost.loadTimeout': 'Timeout caricamento webview', - 'accounts.webviewHost.loading': 'Caricamento di {providerName}...', - 'accounts.webviewHost.loadingAccount': 'Caricamento account', - 'accounts.webviewHost.restoringSession': 'Ripristino sessione...', - 'accounts.webviewHost.retryLoading': 'Riprova caricamento', - 'accounts.webviewHost.takingLonger': '{providerName} sta impiegando più tempo del previsto.', - 'accounts.webviewHost.timeoutHint': 'Suggerimento timeout', - 'app.connectionBadge.composio': 'Composio', - 'app.connectionBadge.messaging': 'Messaggistica', - 'app.connectionIndicator.connected': 'Connesso a OpenHuman AI 🚀', - 'app.connectionIndicator.connecting': 'Connessione', - 'app.connectionIndicator.coreOffline': 'Core offline', - 'app.connectionIndicator.disconnected': 'Disconnesso', - 'app.connectionIndicator.offline': 'Offline', - 'app.connectionIndicator.reconnecting': 'Riconnessione…', - 'app.errorFallback.componentStack': 'Stack del componente', - 'app.errorFallback.downloadLatest': "Scarica l'ultima versione", - 'app.errorFallback.heading': 'Intestazione', - 'app.errorFallback.hint': 'Suggerimento', - 'app.errorFallback.reloadApp': 'Ricarica app', - 'app.errorFallback.subheading': 'Sottotitolo', - 'app.errorFallback.tryRecover': 'Prova a ripristinare', - 'app.localAiDownload.installing': 'Installazione...', - 'app.localAiDownload.preparing': 'Preparazione...', - 'app.openhumanLink.accounts.continueWith': 'Continua con accesso {label}', - 'app.openhumanLink.accounts.done': 'Fatto', - 'app.openhumanLink.accounts.intro': 'Introduzione', - 'app.openhumanLink.accounts.webviewNote': 'Nota webview', - 'app.openhumanLink.billing.openDashboard': 'Apri dashboard', - 'app.openhumanLink.billing.stayOnTrial': 'Rimani in prova', - 'app.openhumanLink.billing.trialCredit': 'Credito di prova', - 'app.openhumanLink.billing.trialDesc': 'Descrizione prova', - 'app.openhumanLink.defaultBody': - 'Non ancora pronto nel popup. Apri la pagina completa delle impostazioni quando ti serve.', - 'app.openhumanLink.discord.intro': 'Introduzione', - 'app.openhumanLink.discord.openInvite': 'Apri invito', - 'app.openhumanLink.discord.perk1': 'Vantaggio 1', - 'app.openhumanLink.discord.perk2': 'Vantaggio 2', - 'app.openhumanLink.discord.perk3': 'Vantaggio 3', - 'app.openhumanLink.discord.perk4': 'Vantaggio 4', - 'app.openhumanLink.done': 'Fatto', - 'app.openhumanLink.loadingChannelSetup': 'Caricamento configurazione canale', - 'app.openhumanLink.maybeLater': 'Forse più tardi', - 'app.openhumanLink.notifications.asking': 'Richiesta al tuo OS…', - 'app.openhumanLink.notifications.blocked': 'Bloccato', - 'app.openhumanLink.notifications.blockedStep1': 'Passo 1 bloccato', - 'app.openhumanLink.notifications.blockedStep2': 'Passo 2 bloccato', - 'app.openhumanLink.notifications.blockedStep3': 'Passo 3 bloccato', - 'app.openhumanLink.notifications.intro': 'Introduzione', - 'app.openhumanLink.notifications.promptHint': 'Suggerimento prompt', - 'app.openhumanLink.notifications.retry': 'Riprova notifica di test', - 'app.openhumanLink.notifications.send': 'Invia notifica di test', - 'app.openhumanLink.notifications.sendFailed': 'Impossibile inviare: {error}', - 'app.openhumanLink.notifications.sent': - "Notifica di test inviata. Se non l'hai ricevuta, vai in Impostazioni di Sistema → Notifiche → OpenHuman, attiva Consenti notifiche e imposta lo Stile banner su Persistente.", - 'app.openhumanLink.skipForNow': 'Salta per ora', - 'app.openhumanLink.telegramUnavailable': 'Telegram non disponibile', - 'app.openhumanLink.title.accounts': 'Connetti le tue app', - 'app.openhumanLink.title.billing': 'Fatturazione e crediti', - 'app.openhumanLink.title.discord': 'Unisciti alla community', - 'app.openhumanLink.title.messaging': 'Connetti un canale di chat', - 'app.openhumanLink.title.notifications': 'Consenti notifiche', - 'app.persistRehydration.body': 'Corpo', - 'app.persistRehydration.heading': 'Intestazione', - 'app.persistRehydration.resetCta': 'Ripristino…', - 'app.persistRehydration.resetting': 'Ripristino…', - 'app.routeLoading.initializing': 'Inizializzazione di OpenHuman...', - 'app.update.currentlyOn': '{version}', - 'app.update.errorFallback': "Si è verificato un errore durante l'aggiornamento.", - 'app.update.header.default': 'Aggiornamento', - 'app.update.header.error': 'Aggiornamento fallito', - 'app.update.header.installing': 'Installazione aggiornamento', - 'app.update.header.readyToInstall': "Aggiornamento pronto per l'installazione", - 'app.update.header.restarting': 'Riavvio…', - 'app.update.later': 'Più tardi', - 'app.update.newVersionReady': "Una nuova versione è pronta per l'installazione.", - 'app.update.progress.downloaded': '{amount} scaricati', - 'app.update.progress.installing': 'Installazione della nuova versione…', - 'app.update.progress.restarting': "Riavvio dell'app…", - 'app.update.progress.working': '{percent}%', - 'app.update.restartNote': 'Nota sul riavvio', - 'app.update.restartNow': 'Riavvia ora', - 'app.update.versionReady': "La versione {newVersion} è pronta per l'installazione.", - 'channels.discord.accountLinked': 'Account collegato', - 'channels.discord.connect': 'Connetti', - 'channels.discord.linkTokenExpired': 'Token di collegamento scaduto. Riprova.', - 'channels.discord.linkTokenInstruction': '{token}', - 'channels.discord.linkTokenLabel': 'Etichetta token di collegamento', - 'channels.discord.linkTokenOnce': 'Token di collegamento monouso', - 'channels.discord.picker.allPermissionsOk': - 'Il bot ha tutte le autorizzazioni richieste in questo canale.', - 'channels.discord.picker.botNotInServers': 'Bot non presente nei server', - 'channels.discord.picker.category': 'Categoria', - 'channels.discord.picker.channel': 'Canale', - 'channels.discord.picker.checkingPermissions': 'Verifica autorizzazioni', - 'channels.discord.picker.loadingChannels': 'Caricamento canali...', - 'channels.discord.picker.loadingServers': 'Caricamento server...', - 'channels.discord.picker.missingPermissions': 'Autorizzazioni mancanti', - 'channels.discord.picker.noChannels': 'Nessun canale di testo trovato', - 'channels.discord.picker.noServers': 'Nessun server trovato', - 'channels.discord.picker.selectChannel': 'Seleziona un canale', - 'channels.discord.picker.selectServer': 'Seleziona un server', - 'channels.discord.picker.server': 'Server', - 'channels.discord.picker.serverChannelSelection': 'Selezione server e canale', - 'channels.discord.savedRestartRequired': "Canale salvato. Riavvia l'app per attivarlo.", - 'channels.telegram.connect': 'Connetti', - 'channels.telegram.managedDmConnecting': 'Connessione DM gestiti', - 'channels.telegram.managedDmTimeout': 'Timeout DM gestiti', - 'channels.telegram.reconnect': 'Riconnetti', - 'channels.telegram.savedRestartRequired': "Canale salvato. Riavvia l'app per attivarlo.", - 'channels.web.alwaysAvailable': 'Sempre disponibile', - 'channels.discord.displayName': 'Discord', - 'channels.discord.description': 'Invia e ricevi messaggi tramite Discord.', - 'channels.discord.authMode.bot_token.description': 'Fornisci il tuo token bot Discord.', - 'channels.discord.authMode.oauth.description': - 'Installa il bot OpenHuman sul tuo server Discord tramite OAuth.', - 'channels.discord.authMode.managed_dm.description': - 'Collega il tuo account personale Discord al bot OpenHuman.', - 'channels.discord.fields.bot_token.label': 'Token bot', - 'channels.discord.fields.bot_token.placeholder': 'Il tuo token bot Discord', - 'channels.discord.fields.guild_id.label': 'ID server (gilda)', - 'channels.discord.fields.guild_id.placeholder': 'Opzionale: limitare a un server specifico', - 'channels.telegram.displayName': 'Telegram', - 'channels.telegram.description': 'Invia e ricevi messaggi tramite Telegram.', - 'channels.telegram.authMode.managed_dm.description': - 'Invia un messaggio direttamente al bot OpenHuman Telegram.', - 'channels.telegram.authMode.bot_token.description': - 'Fornisci il tuo token Bot Telegram da @BotFather.', - 'channels.telegram.fields.bot_token.label': 'Token bot', - 'channels.telegram.fields.bot_token.placeholder': '123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11', - 'channels.telegram.fields.allowed_users.label': 'Utenti consentiti', - 'channels.telegram.fields.allowed_users.placeholder': 'Separati da virgole Telegram nomi utente', - 'channels.web.displayName': 'Web', - 'channels.web.description': "Chatta tramite l'interfaccia utente Web integrata.", - 'channels.web.authMode.managed_dm.description': - 'Utilizza la chat web incorporata: non è richiesta alcuna configurazione.', - 'welcome.continueLocallyExperimental': 'Continua localmente (sperimentale)', - 'channels.yuanbao.connect': 'Connect', - 'channels.yuanbao.connecting': 'Connecting…', - 'channels.yuanbao.fieldRequired': '{field} is required', - 'channels.yuanbao.reconnect': 'Reconnect', - 'channels.yuanbao.savedRestartRequired': 'Channel saved. Restart the app to activate it.', - 'channels.yuanbao.unexpectedStatus': 'Unexpected connection status: {status}', - 'chat.approval.approve': 'Approve', - 'chat.approval.alwaysAllow': 'Always allow', - 'chat.approval.alwaysAllowHint': 'Stop asking for this tool — add it to your Always-allow list', - 'chat.approval.deciding': 'Working…', - 'chat.approval.deny': 'Deny', - 'chat.approval.error': 'Could not record your decision — try again.', - 'chat.approval.fallback': 'The agent wants to run an action that needs your approval.', - 'chat.approval.title': 'Approval needed', - 'chat.approval.tool': 'Tool:', -}; - -export default it3; diff --git a/app/src/lib/i18n/chunks/it-4.ts b/app/src/lib/i18n/chunks/it-4.ts deleted file mode 100644 index 3647bbf96..000000000 --- a/app/src/lib/i18n/chunks/it-4.ts +++ /dev/null @@ -1,493 +0,0 @@ -import type { TranslationMap } from '../types'; - -// Italian (Italiano) chunk 4/5. Translated from chunks/en-4.ts. -const it4: TranslationMap = { - 'chat.unsubscribeApproval.approve': 'Approva e annulla iscrizione', - 'chat.unsubscribeApproval.approved': '✓ Iscrizione annullata con successo.', - 'chat.unsubscribeApproval.denied': '✕ Richiesta rifiutata.', - 'chat.unsubscribeApproval.deny': 'Rifiuta', - 'chat.unsubscribeApproval.processing': 'Elaborazione...', - 'chat.unsubscribeApproval.title': 'Richiesta di annullamento iscrizione', - 'commandPalette.ariaLabel': 'Palette dei comandi', - 'commandPalette.description': 'Descrizione', - 'commandPalette.label': 'Comandi', - 'commandPalette.noResults': 'Nessun risultato', - 'commandPalette.placeholder': 'Digita un comando o cerca…', - 'commandPalette.searchAria': 'Cerca comandi', - 'commandPalette.shortcutHint': 'Premi ? per tutte le scorciatoie', - 'commandPalette.title': 'Palette dei comandi', - 'composio.connect.additionalConfigRequired': 'Configurazione aggiuntiva richiesta', - 'composio.connect.atlassianSubdomainHint': 'acme', - 'composio.connect.atlassianSubdomainLabel': 'Etichetta sottodominio Atlassian', - 'composio.connect.connect': 'Connetti', - 'composio.connect.connectionFailed': 'Connessione fallita (stato: {status}).', - 'composio.connect.disconnectFailed': 'Disconnessione fallita: {msg}', - 'composio.connect.disconnecting': 'Disconnessione…', - 'composio.connect.idleDescription': 'Connetti il tuo', - 'composio.connect.idleDescriptionSuffix': - "account. Apriremo una finestra del browser, autorizzerai l'accesso lì, e l'app rileverà automaticamente la connessione.", - 'composio.connect.isConnected': 'è connesso.', - 'composio.connect.manage': 'Gestisci', - 'composio.connect.needsSubdomain': 'Per connettere', - 'composio.connect.needsSubdomainSuffix': - 'inserisci il tuo sottodominio Atlassian (es. acme per acme.atlassian.net) e riprova.', - 'composio.connect.oauthComplete': 'OAuth da completare…', - 'composio.connect.oauthTimeout': 'Timeout OAuth', - 'composio.connect.permissions': 'Autorizzazioni', - 'composio.connect.permissionsDefault': 'Lettura + scrittura abilitate di default', - 'composio.connect.permissionsNote': 'può esporre', - 'composio.connect.permissionsNoteSuffix': - "Le autorizzazioni proprie dell'agente OpenHuman sono controllate sotto come toggle di lettura, scrittura e admin.", - 'composio.connect.reopenBrowser': 'Riapri browser', - 'composio.connect.requestingUrl': 'Richiesta URL di connessione…', - 'composio.connect.retryConnection': 'Riprova connessione', - 'composio.connect.scopeLoadError': 'Impossibile caricare preferenze degli scope: {msg}', - 'composio.connect.scopeSaveError': 'Impossibile salvare lo scope {key}: {msg}', - 'composio.connect.subdomainInvalid': - 'Inserisci solo il sottodominio breve (es. "acme"), non l\'URL completo. Deve contenere solo lettere, numeri e trattini.', - 'composio.connect.subdomainRequired': 'Inserisci il tuo sottodominio Atlassian per continuare.', - 'composio.connect.dynamicsOrgNameLabel': "Nome dell'organizzazione Dynamics 365", - 'composio.connect.dynamicsOrgNameHint': - 'Per esempio, "myorg" per myorg.crm.dynamics.com. Inserisci solo il nome breve dell\'organizzazione, non l\'URL completo.', - 'composio.connect.needsFieldsPrefix': 'Per connettere', - 'composio.connect.needsFieldsSuffix': - 'ci servono altre informazioni. Compila i campi mancanti qui sotto e riprova.', - 'composio.connect.requiredFieldEmpty': 'Questo campo è obbligatorio.', - 'composio.connect.wabaIdHint': - 'Trovalo tramite GET /me/businesses poi GET /{business_id}/owned_whatsapp_business_accounts usando il tuo token di accesso Meta.', - 'composio.connect.wabaIdLabel': 'Etichetta WABA ID', - 'composio.connect.wabaIdRequired': - 'Inserisci il tuo ID WhatsApp Business Account (WABA ID) per continuare.', - 'composio.connect.waitingFor': 'In attesa di', - 'composio.connect.waitingHint': 'Suggerimento di attesa', - 'composio.triggers.heading': 'Trigger', - 'composio.triggers.listenFrom': 'Ascolta eventi da', - 'composio.triggers.loadError': 'Impossibile caricare i trigger', - 'composio.triggers.needsConfiguration': 'Richiede configurazione', - 'composio.triggers.noneAvailable': 'Nessun trigger attualmente disponibile per', - 'conversations.taskKanban.moveLeft': 'Sposta a sinistra', - 'conversations.taskKanban.moveRight': 'Sposta a destra', - 'conversations.taskKanban.title': 'Attività', - 'conversations.toolTimeline.turn': 'turno', - 'conversations.toolTimeline.workerThread': 'thread worker', - 'daemon.serviceBlockingGate.body': 'Corpo', - 'daemon.serviceBlockingGate.downloadHint': 'Suggerimento di download', - 'daemon.serviceBlockingGate.downloadLatest': "Scarica l'ultima versione", - 'daemon.serviceBlockingGate.retryCore': 'Riprova core', - 'daemon.serviceBlockingGate.retryFailed': - "Tentativo fallito. Scarica l'ultima build dell'app e riprova.", - 'daemon.serviceBlockingGate.retrying': 'Nuovo tentativo...', - 'daemon.serviceBlockingGate.title': 'Il core di OpenHuman non è disponibile', - 'home.banners.discordSubtitle': 'Sottotitolo Discord', - 'home.banners.discordTitle': 'Unisciti al nostro Discord', - 'home.banners.earlyBirdDismiss': 'Ignora banner early bird', - 'home.banners.earlyBirdFirstSub': 'primo abbonamento.', - 'home.banners.earlyBirdOn': 'Early bird attivo', - 'home.banners.earlyBirdTitle': 'I primi 1.000 utenti ottengono il 60% di sconto.', - 'home.banners.earlyBirdUseCode': 'Codice early bird', - 'home.banners.getSubscription': 'ottieni un abbonamento', - 'home.banners.promoCreditsBody': 'Corpo crediti promozionali', - 'home.banners.promoCreditsTitle': '{amount}', - 'home.banners.promoCreditsUsage': 'Uso crediti promozionali', - 'intelligence.memoryChunk.detail.chunk': 'Pezzo', - 'intelligence.memoryChunk.detail.copyChunkId': 'Copia ID chunk', - 'intelligence.memoryChunk.detail.embeddingInfo': 'bge-m3 1024dim', - 'intelligence.memoryChunk.detail.noEmbedding': 'Nessun embedding', - 'intelligence.memoryChunk.letterhead.from': 'da', - 'intelligence.memoryChunk.letterhead.to': 'a', - 'intelligence.memoryChunk.mentioned.chunkOne': '1 pezzo', - 'intelligence.memoryChunk.mentioned.chunkOther': '{count} chunk', - 'intelligence.memoryChunk.mentioned.heading': 'm e n z i o n a t i', - 'intelligence.memoryChunk.scoreBars.ariaScore': 'punteggio {name} {pct} percento', - 'intelligence.memoryChunk.scoreBars.atThreshold': 'a {threshold}', - 'intelligence.memoryChunk.scoreBars.dropped': 'scartati', - 'intelligence.memoryChunk.scoreBars.heading': 'p e r c h é t e n u t i', - 'intelligence.memoryChunk.scoreBars.kept': 'tenuti', - 'intelligence.diagram.title': 'Architecture Diagram', - 'intelligence.diagram.description': - 'Latest local architecture output from the configured diagram endpoint.', - 'intelligence.diagram.refresh': 'Refresh', - 'intelligence.diagram.refreshAria': 'Refresh diagram', - 'intelligence.diagram.emptyTitle': 'No diagram available yet', - 'intelligence.diagram.emptyDescription': - 'Generate an architecture diagram from the orchestrator and this panel will refresh from the configured local endpoint.', - 'intelligence.diagram.skillInstallCommand': 'npx skills add yizhiyanhua-ai/fireworks-tech-graph', - 'intelligence.diagram.promptExample': - 'Generate an architecture diagram of the current swarm in dark terminal style', - 'intelligence.diagram.imageAlt': 'Latest generated OpenHuman architecture diagram', - 'intelligence.diagram.refreshesEvery': 'Refreshes every {seconds}s', - 'intelligence.memoryText.entityTypePrefix': 'Tipo di entità', - 'intelligence.screenDebug.active': 'Attivo', - 'intelligence.screenDebug.app': 'App', - 'intelligence.screenDebug.bounds': 'Limiti', - 'intelligence.screenDebug.captureAlt': 'Risultato test di cattura', - 'intelligence.screenDebug.captureFailed': 'Fallito', - 'intelligence.screenDebug.captureSuccess': 'Successo', - 'intelligence.screenDebug.captureTest': 'Test di cattura', - 'intelligence.screenDebug.capturing': 'Cattura in corso', - 'intelligence.screenDebug.frames': 'Frame', - 'intelligence.screenDebug.idle': 'Inattivo', - 'intelligence.screenDebug.lastApp': 'Ultima app', - 'intelligence.screenDebug.mode': 'Modalità', - 'intelligence.screenDebug.permAccessibility': 'Permesso accessibilità', - 'intelligence.screenDebug.permInput': 'Permesso input', - 'intelligence.screenDebug.permScreen': 'Accessibilità', - 'intelligence.screenDebug.permissions': 'Permessi', - 'intelligence.screenDebug.platformNotSupported': 'Piattaforma non supportata', - 'intelligence.screenDebug.recentVisionSummaries': 'Riassunti vision recenti', - 'intelligence.screenDebug.session': 'Sessione', - 'intelligence.screenDebug.size': 'Dimensione', - 'intelligence.screenDebug.status': 'Stato', - 'intelligence.screenDebug.testCapture': 'Test cattura', - 'intelligence.screenDebug.time': 'Ora', - 'intelligence.screenDebug.title': 'Titolo', - 'intelligence.screenDebug.unknown': 'Sconosciuto', - 'intelligence.screenDebug.visionQueue': 'Coda vision', - 'intelligence.screenDebug.visionState': 'Stato vision', - 'intelligence.tasks.activeBoardOne': '1 board attiva tra le conversazioni', - 'intelligence.tasks.activeBoardOther': '{count} board attive tra le conversazioni', - 'intelligence.tasks.empty': "Nessuna board di attività dell'agente", - 'intelligence.tasks.emptyHint': 'Suggerimento vuoto', - 'intelligence.tasks.failedToLoad': 'Caricamento fallito', - 'intelligence.tasks.live': 'live', - 'intelligence.tasks.loadingBoards': 'Caricamento board attività…', - 'intelligence.tasks.threadPrefix': 'Discussione {thread}', - 'intelligence.tasks.subtitle': 'Your tasks and agent task boards across the workspace.', - 'intelligence.tasks.newTask': 'New task', - 'intelligence.tasks.personalBoardTitle': 'Agent Tasks', - 'intelligence.tasks.personalEmpty': 'No personal tasks yet', - 'intelligence.tasks.composer.title': 'New task', - 'intelligence.tasks.composer.titleLabel': 'Title', - 'intelligence.tasks.composer.titlePlaceholder': 'What needs to be done?', - 'intelligence.tasks.composer.statusLabel': 'Status', - 'intelligence.tasks.composer.attachLabel': 'Attach to conversation', - 'intelligence.tasks.composer.attachNone': 'Personal (no conversation)', - 'intelligence.tasks.composer.objectiveLabel': 'Objective', - 'intelligence.tasks.composer.objectivePlaceholder': 'Optional — the desired outcome', - 'intelligence.tasks.composer.notesLabel': 'Notes', - 'intelligence.tasks.composer.notesPlaceholder': 'Optional notes', - 'intelligence.tasks.composer.create': 'Create task', - 'intelligence.tasks.composer.creating': 'Creating…', - 'intelligence.tasks.composer.createFailed': "Couldn't create the task", - 'notifications.card.dismiss': 'Ignora notifica', - 'notifications.card.importanceTitle': 'Importanza: {pct}%', - 'notifications.center.empty': 'Nessuna notifica', - 'notifications.center.emptyHint': 'Suggerimento vuoto', - 'notifications.center.filterAll': 'Filtra tutte', - 'notifications.center.markAllRead': 'Segna tutte come lette', - 'notifications.center.title': 'Notifiche', - 'oauth.button.loopbackTimeout': - 'Accesso scaduto — il browser non ha completato il reindirizzamento OAuth. Riprova.', - 'oauth.button.connecting': 'Connessione...', - 'oauth.login.continueWith': 'Continua con', - 'onboarding.contextGathering.buildingDesc': 'Descrizione costruzione', - 'onboarding.contextGathering.buildingProfile': 'Costruzione del tuo profilo...', - 'onboarding.contextGathering.continueToChat': 'Continua alla chat', - 'onboarding.contextGathering.errorDesc': - 'Non siamo riusciti a costruire il tuo profilo completo ora, ma va bene — puoi continuare e il tuo profilo si svilupperà nel tempo.', - 'onboarding.contextGathering.coreAlive': - 'Il core è raggiungibile — il primo avvio può richiedere un minuto.', - 'onboarding.contextGathering.coreAliveProbing': 'Verifica della connessione al core…', - 'onboarding.contextGathering.coreUnreachable': - 'Il core non risponde. Puoi continuare e riprovare più tardi.', - 'onboarding.contextGathering.stillWorkingDesc': - 'Il primo avvio può richiedere 30–60 secondi mentre prepariamo il tuo modello locale e gli strumenti. Puoi continuare la chat in qualsiasi momento — la costruzione del profilo continua in background.', - 'onboarding.contextGathering.stillWorkingTitle': 'Stiamo ancora preparando il tuo profilo…', - 'onboarding.contextGathering.title': 'Raccolta del contesto', - 'openhuman.team_list_teams': 'Elenco team', - 'overlay.ariaAttention': 'Messaggio di attenzione', - 'overlay.ariaCompanion': 'Companion attivo', - 'overlay.ariaOrb': 'Overlay OpenHuman', - 'overlay.ariaVoiceActive': 'Input vocale attivo', - 'overlay.companion.error': 'Errore', - 'overlay.companion.listening': 'In ascolto…', - 'overlay.companion.pointing': 'Sta puntando…', - 'overlay.companion.speaking': 'Sta parlando…', - 'overlay.companion.thinking': 'Sta pensando…', - 'overlay.orbTitle': 'Trascina per spostare · Doppio clic per ripristinare la posizione', - 'pages.settings.account.connections': 'Connessioni', - 'pages.settings.account.connectionsDesc': 'Descrizione connessioni', - 'pages.settings.account.privacy': 'Privacy', - 'pages.settings.account.privacyDesc': 'Descrizione privacy', - 'pages.settings.account.recoveryPhrase': 'Frase di recupero', - 'pages.settings.account.recoveryPhraseDesc': 'Descrizione frase di recupero', - 'pages.settings.account.team': 'Team', - 'pages.settings.account.teamDesc': 'Descrizione team', - 'pages.settings.accountSection.description': - 'Frase di recupero, team, connessioni e impostazioni privacy.', - 'pages.settings.accountSection.title': 'Account', - 'pages.settings.ai.llm': 'LLM', - 'pages.settings.ai.llmDesc': 'Descrizione LLM', - 'pages.settings.ai.voice': 'Voce', - 'pages.settings.ai.voiceDesc': 'Descrizione voce', - 'pages.settings.ai.embeddings': 'Incorporamenti', - 'pages.settings.ai.embeddingsDesc': - 'Modello di codifica vettoriale per il recupero della memoria', - 'pages.settings.aiSection.description': - 'Provider di modelli linguistici, Ollama locale e voce (STT / TTS).', - 'pages.settings.aiSection.title': 'AI', - 'pages.settings.features.desktopCompanion': 'Companion Desktop', - 'pages.settings.features.desktopCompanionDesc': - 'Assistente vocale con consapevolezza dello schermo — ascolta, vede, parla, indica', - 'pages.settings.features.messagingChannels': 'Canali di messaggistica', - 'pages.settings.features.messagingChannelsDesc': 'Descrizione canali di messaggistica', - 'pages.settings.features.notifications': 'Notifiche', - 'pages.settings.features.notificationsDesc': 'Descrizione notifiche', - 'pages.settings.features.screenAwareness': 'Consapevolezza schermo', - 'pages.settings.features.screenAwarenessDesc': 'Descrizione consapevolezza schermo', - 'pages.settings.features.tools': 'Strumenti', - 'pages.settings.features.toolsDesc': 'Descrizione strumenti', - 'pages.settings.featuresSection.description': - 'Consapevolezza schermo, messaggistica e strumenti.', - 'pages.settings.featuresSection.title': 'Funzionalità', - 'privacy.dataKind.credentials': 'Credenziali', - 'privacy.dataKind.derived': 'Derivati', - 'privacy.dataKind.diagnostics': 'Diagnostica', - 'privacy.dataKind.metadata': 'Metadati', - 'privacy.dataKind.raw': 'Grezzi', - 'privacy.whatLeaves.link.label': 'Cosa esce dal mio computer?', - 'rewards.community.achievementsUnlocked': '{unlocked} di {total} obiettivi sbloccati', - 'rewards.community.connectDiscord': 'Connetti Discord', - 'rewards.community.cumulativeTokens': 'Token cumulativi', - 'rewards.community.currentStreak': 'Streak attuale', - 'rewards.community.discordLinkedNotInGuild': 'Discord collegato ma non nella gilda', - 'rewards.community.discordMember': 'Sei entrato nel server', - 'rewards.community.discordNotLinked': 'Discord non collegato', - 'rewards.community.discordServer': 'Server Discord', - 'rewards.community.discordStatusUnavailable': 'Stato Discord non disponibile', - 'rewards.community.discordWaiting': 'Attesa Discord', - 'rewards.community.heroSubtitle': 'Sottotitolo hero', - 'rewards.community.heroTitle': 'Titolo hero', - 'rewards.community.joinDiscord': 'Unisciti a Discord', - 'rewards.community.loadingRewards': 'Caricamento premi…', - 'rewards.community.locked': 'Bloccato', - 'rewards.community.retrying': 'Nuovo tentativo…', - 'rewards.community.rolesAndRewards': 'Ruoli e premi', - 'rewards.community.streakDays': '{n}', - 'rewards.community.syncPending': 'Sincronizzazione premi in attesa', - 'rewards.community.syncPendingDesc': 'Descrizione sincronizzazione in attesa', - 'rewards.community.syncUnavailable': 'Sincronizzazione non disponibile', - 'rewards.community.tryAgain': 'Nuovo tentativo…', - 'rewards.community.unknown': 'Sconosciuto', - 'rewards.community.unlocked': 'Sbloccato', - 'rewards.community.yourProgress': 'Il tuo progresso', - 'rewards.coupon.colCode': 'Codice', - 'rewards.coupon.colRedeemed': 'Riscattato', - 'rewards.coupon.colReward': 'Premio', - 'rewards.coupon.colStatus': 'Stato', - 'rewards.coupon.loadingHistory': 'Caricamento cronologia premi…', - 'rewards.coupon.noCodes': 'Nessun codice premio riscattato.', - 'rewards.coupon.pending': 'In attesa', - 'rewards.coupon.placeholder': 'Codice coupon', - 'rewards.coupon.promoCredits': 'Crediti promozionali', - 'rewards.coupon.recentRedemptions': 'Riscatti recenti', - 'rewards.coupon.redeemAccepted': - "{code} accettato. {amount} verrà sbloccato dopo il completamento dell'azione richiesta.", - 'rewards.coupon.redeemButton': 'Riscatta codice', - 'rewards.coupon.redeemSuccess': '{code} riscattato. {amount} è stato aggiunto ai tuoi crediti.', - 'rewards.coupon.redeemedCodes': 'Codici riscattati', - 'rewards.coupon.redeeming': 'Riscatto in corso...', - 'rewards.coupon.statusApplied': 'Applicato', - 'rewards.coupon.statusPendingAction': 'Azione in attesa', - 'rewards.coupon.statusRedeemed': 'Riscattato', - 'rewards.coupon.subtitle': 'Sottotitolo', - 'rewards.coupon.title': 'Riscatta un codice coupon', - 'rewards.referralSection.activity': 'Attività referral', - 'rewards.referralSection.apply': 'Applicazione…', - 'rewards.referralSection.applying': 'Applicazione…', - 'rewards.referralSection.colReferredUser': 'Utente referenziato', - 'rewards.referralSection.colReward': 'Premio', - 'rewards.referralSection.colStatus': 'Stato', - 'rewards.referralSection.colUpdated': 'Aggiornato', - 'rewards.referralSection.completed': 'Completato', - 'rewards.referralSection.copyCode': 'Copia codice', - 'rewards.referralSection.copyFailed': 'Copia fallita', - 'rewards.referralSection.haveCode': 'Hai un codice referral?', - 'rewards.referralSection.haveCodeDesc': 'Descrizione codice', - 'rewards.referralSection.linked': 'Collegato', - 'rewards.referralSection.linkedCode': '(codice {code})', - 'rewards.referralSection.loading': 'Caricamento programma referral…', - 'rewards.referralSection.noReferrals': 'Nessun referral', - 'rewards.referralSection.pendingReferrals': 'Referral in attesa', - 'rewards.referralSection.placeholder': 'Codice referral', - 'rewards.referralSection.share': 'Condividi', - 'rewards.referralSection.statusCompleted': 'Stato completato', - 'rewards.referralSection.statusExpired': 'Stato scaduto', - 'rewards.referralSection.statusJoined': 'Stato iscritto', - 'rewards.referralSection.subtitle': 'Sottotitolo', - 'rewards.referralSection.title': 'Invita amici, guadagna crediti', - 'rewards.referralSection.totalEarned': 'Totale guadagnato', - 'rewards.referralSection.yourCode': 'Il tuo codice', - 'settings.ai.addCloudProvider': 'Aggiungi provider cloud', - 'settings.ai.addProvider': 'Salvataggio…', - 'settings.ai.apiKeyFieldLabel': 'Etichetta campo chiave API', - 'settings.ai.apiKeyRequired': 'Incolla la tua chiave API per continuare.', - 'settings.ai.apiKeyStoredEncrypted': 'Chiave API memorizzata crittografata', - 'settings.ai.apiKeysEncrypted': 'auth-profiles.json', - 'settings.ai.clearStoredKey': 'Cancella chiave memorizzata', - 'settings.ai.connectProvider': 'Connetti provider', - 'settings.ai.customRouting': 'Instradamento personalizzato', - 'settings.ai.defaultResolvesTo': 'Il valore predefinito si risolve in', - 'settings.ai.discard': 'Scarta', - 'settings.ai.editProvider': 'Modifica provider', - 'settings.ai.llmProviders': 'Provider LLM', - 'settings.ai.llmProvidersDesc': 'Descrizione provider LLM', - 'settings.ai.localOllama': 'Locale (Ollama)', - 'settings.ai.modelLabel': 'Modello', - 'settings.ai.noCustomProviders': 'Nessun provider personalizzato', - 'settings.ai.openAiCompat.authHeaderExample': 'Authorization: Bearer ', - 'settings.ai.openAiCompat.authHeaderLabel': 'Intestazione autenticazione', - 'settings.ai.openAiCompat.baseUrlLabel': 'Base URL', - 'settings.ai.openAiCompat.baseUrlUnavailable': 'Non disponibile', - 'settings.ai.openAiCompat.clearKey': 'Cancella chiave', - 'settings.ai.openAiCompat.description': - "Point local harnesses at this /v1 server to route through the providers configured below. Authentication uses a stable key you set here, not the app's internal core bearer.", - 'settings.ai.openAiCompat.keyConfigured': 'Chiave configurata', - 'settings.ai.openAiCompat.keyRequired': 'Chiave richiesta', - 'settings.ai.openAiCompat.rotateKey': 'Ruota chiave', - 'settings.ai.openAiCompat.setKey': 'Imposta chiave', - 'settings.ai.openAiCompat.title': 'Endpoint compatibile con OpenAI', - 'settings.ai.providerLabel': 'Provider', - 'settings.ai.routing': 'Instradamento', - 'settings.ai.routingCustom': 'Instradamento personalizzato', - 'settings.ai.routingDefault': 'Predefinito', - 'settings.ai.routingDesc': 'Descrizione instradamento', - 'settings.ai.saveChanges': 'Salvataggio…', - 'settings.ai.saving': 'Salvataggio…', - 'settings.ai.unsavedChange': 'modifica non salvata', - 'settings.ai.unsavedChanges': 'modifiche non salvate', - 'settings.ai.workloadGroupBackground': 'Gruppo carico di lavoro background', - 'settings.ai.workloadGroupChat': 'Gruppo carico di lavoro chat', - 'settings.autocomplete.appFilter.acceptSuggestion': 'Accetta suggerimento', - 'settings.autocomplete.appFilter.contextOverride': 'Override contesto (opzionale)', - 'settings.autocomplete.appFilter.debugFocus': 'Focus debug', - 'settings.autocomplete.appFilter.getSuggestion': 'Ottieni suggerimento', - 'settings.autocomplete.appFilter.liveLogs': 'Log live', - 'settings.autocomplete.appFilter.noLogs': 'Nessun log', - 'settings.autocomplete.appFilter.refreshStatus': 'Aggiornamento…', - 'settings.autocomplete.appFilter.refreshing': 'Aggiornamento…', - 'settings.autocomplete.appFilter.runtime': 'Runtime', - 'settings.autocomplete.appFilter.test': 'Test', - 'settings.autocomplete.completionStyle.acceptedCompletion': - '{count} completamento accettato memorizzato — usato per personalizzare i futuri suggerimenti.', - 'settings.autocomplete.completionStyle.acceptedCompletions': - '{count} completamenti accettati memorizzati — usati per personalizzare i futuri suggerimenti.', - 'settings.autocomplete.completionStyle.clearHistory': 'Cancellazione…', - 'settings.autocomplete.completionStyle.clearing': 'Cancellazione…', - 'settings.autocomplete.completionStyle.debounce': 'Debounce (ms)', - 'settings.autocomplete.completionStyle.enabled': 'Abilitato', - 'settings.autocomplete.completionStyle.maxChars': 'Caratteri max', - 'settings.autocomplete.completionStyle.noHistory': - 'Nessun completamento accettato. Accetta i suggerimenti con Tab per iniziare a personalizzare.', - 'settings.autocomplete.completionStyle.overlayTtl': 'TTL overlay (ms)', - 'settings.autocomplete.completionStyle.personalizationHistory': 'Cronologia personalizzazione', - 'settings.autocomplete.completionStyle.styleExamples': 'Esempi di stile (uno per riga)', - 'settings.autocomplete.completionStyle.styleInstructions': 'Istruzioni di stile', - 'settings.billing.autoRecharge.addAmount': 'Aggiungi questo importo', - 'settings.billing.autoRecharge.addCard': 'Aggiungi carta', - 'settings.billing.autoRecharge.amountHint': 'Suggerimento importo', - 'settings.billing.autoRecharge.defaultCard': 'Carta predefinita', - 'settings.billing.autoRecharge.lastRechargeFailed': 'Ultima ricarica fallita', - 'settings.billing.autoRecharge.lastRecharged': 'Ultima ricarica', - 'settings.billing.autoRecharge.noCards': 'Nessuna carta', - 'settings.billing.autoRecharge.paymentMethods': 'Metodi di pagamento', - 'settings.billing.autoRecharge.rechargeInProgress': 'Ricarica in corso', - 'settings.billing.autoRecharge.rechargeWhen': 'Ricarica quando il saldo scende sotto', - 'settings.billing.autoRecharge.saveSettings': 'Salvataggio…', - 'settings.billing.autoRecharge.saving': 'Salvataggio…', - 'settings.billing.autoRecharge.setDefault': 'Imposta come predefinita', - 'settings.billing.autoRecharge.subtitle': 'Sottotitolo', - 'settings.billing.autoRecharge.title': 'Abilita ricarica automatica', - 'settings.billing.autoRecharge.toggleAriaLabel': 'Attiva/disattiva ricarica automatica', - 'settings.billing.autoRecharge.weeklyLimit': 'Limite di spesa settimanale', - 'settings.billing.history.desc': 'Descrizione', - 'settings.billing.history.empty': 'Vuoto', - 'settings.billing.history.openPortal': 'Apri portale', - 'settings.billing.history.posted': 'Registrato', - 'settings.billing.history.title': 'Titolo', - 'settings.billing.inferenceBudget.cycleEnds': 'Fine ciclo', - 'settings.billing.inferenceBudget.exhausted': 'Esaurito', - 'settings.billing.inferenceBudget.loadError': 'Errore di caricamento', - 'settings.billing.inferenceBudget.noBudgetDesc': 'Nessuna descrizione budget', - 'settings.billing.inferenceBudget.noRecurringBudget': 'Nessun budget ricorrente', - 'settings.billing.inferenceBudget.remaining': 'Rimanente', - 'settings.billing.inferenceBudget.tenHourCap': 'Limite di 10 ore', - 'settings.billing.inferenceBudget.title': 'Titolo', - 'settings.billing.payAsYouGo.available': 'Disponibile', - 'settings.billing.payAsYouGo.chargeCustomAmount': 'Apertura…', - 'settings.billing.payAsYouGo.chooseTopUpDesc': 'Descrizione scelta ricarica', - 'settings.billing.payAsYouGo.chooseTopUpTitle': 'Titolo scelta ricarica', - 'settings.billing.payAsYouGo.creditBalanceDesc': 'Descrizione saldo crediti', - 'settings.billing.payAsYouGo.creditBalanceTitle': 'Titolo saldo crediti', - 'settings.billing.payAsYouGo.customAmount': 'Importo personalizzato', - 'settings.billing.payAsYouGo.enterAmount': 'Inserisci importo', - 'settings.billing.payAsYouGo.opening': 'Apertura', - 'settings.billing.payAsYouGo.promotionalCredits': 'Crediti promozionali', - 'settings.billing.payAsYouGo.topUpBalance': 'Saldo ricarica', - 'settings.billing.payAsYouGo.topUpCredits': 'Ricarica crediti', - 'settings.billing.payAsYouGo.unableToLoad': 'Impossibile caricare il saldo.', - 'settings.billing.subscription.annual': 'Annuale', - 'settings.billing.subscription.billedAnnually': 'Fatturato annualmente', - 'settings.billing.subscription.chooseSubtitle': 'Sottotitolo scelta', - 'settings.billing.subscription.chooseTitle': 'Titolo scelta', - 'settings.billing.subscription.cryptoDesc': 'Descrizione crypto', - 'settings.billing.subscription.cryptoQuestion': 'Domanda crypto', - 'settings.billing.subscription.current': 'Attuale', - 'settings.billing.subscription.currentPlan': 'Piano attuale', - 'settings.billing.subscription.monthly': 'Mensile', - 'settings.billing.subscription.paymentConfirmed': 'Pagamento confermato', - 'settings.billing.subscription.perMonth': 'Al mese', - 'settings.billing.subscription.popular': 'Popolare', - 'pages.settings.account.migration': 'Importa da un altro assistente', - 'pages.settings.account.migrationDesc': - 'Migra memoria e note da OpenClaw (e presto Hermes) in questo spazio di lavoro.', - 'composio.connect.scope.read': 'Lettura', - 'composio.connect.scope.readHint': - "Consenti all'agente di leggere i dati da questo collegamento.", - 'composio.connect.scope.write': 'Scrivi', - 'composio.connect.scope.writeHint': - "Consenti all'agente di creare o modificare i dati tramite questa connessione.", - 'composio.connect.scope.admin': 'Amministratore', - 'composio.connect.scope.adminHint': - "Consenti all'agente di gestire impostazioni, autorizzazioni o azioni distruttive.", - 'pages.settings.composioSection.title': 'Composio', - 'pages.settings.composioSection.description': - 'Routing, trigger e cronologia per le integrazioni fornite da Composio.', - 'pages.settings.account.walletBalances': 'Wallet Balances', - 'pages.settings.account.walletBalancesDesc': 'View multi-chain balances for your local wallet', - 'walletBalances.title': 'Wallet Balances', - 'walletBalances.refresh': 'Refresh', - 'walletBalances.loading': 'Loading balances…', - 'walletBalances.retry': 'Retry', - 'walletBalances.emptyState': 'No wallet accounts yet — set up a wallet in Recovery Phrase.', - 'walletBalances.copyAddress': 'Copy address', - 'walletBalances.providerMissing': 'provider unavailable', - 'walletBalances.rawBalance': 'Raw: {raw}', - 'walletBalances.errorGeneric': - 'Unable to load wallet balances. Set up your wallet in Recovery Phrase and try again.', - 'conversations.taskKanban.approval.default': 'Default', - 'conversations.taskKanban.approval.notRequired': 'Not required', - 'conversations.taskKanban.approval.notRequiredBadge': 'no approval', - 'conversations.taskKanban.approval.required': 'Required', - 'conversations.taskKanban.approval.requiredBadge': 'approval', - 'conversations.taskKanban.approval.requiredBeforeExecution': 'Required before execution', - 'conversations.taskKanban.briefButton': 'Task brief', - 'conversations.taskKanban.briefTitle': 'Task brief', - 'conversations.taskKanban.closeBrief': 'Close task brief', - 'conversations.taskKanban.field.acceptanceCriteria': 'Acceptance criteria', - 'conversations.taskKanban.field.allowedTools': 'Allowed tools', - 'conversations.taskKanban.field.approval': 'Approval', - 'conversations.taskKanban.field.assignedAgent': 'Assigned agent', - 'conversations.taskKanban.field.blocker': 'Blocker', - 'conversations.taskKanban.field.evidence': 'Evidence', - 'conversations.taskKanban.field.notes': 'Notes', - 'conversations.taskKanban.field.objective': 'Objective', - 'conversations.taskKanban.field.plan': 'Plan', - 'conversations.taskKanban.field.status': 'Status', - 'conversations.taskKanban.field.title': 'Title', - 'conversations.taskKanban.saveChanges': 'Save changes', - 'conversations.taskKanban.deleteCard': 'Delete', - 'conversations.taskKanban.updateFailed': 'Could not update task; changes were not saved.', -}; - -export default it4; diff --git a/app/src/lib/i18n/chunks/it-5.ts b/app/src/lib/i18n/chunks/it-5.ts deleted file mode 100644 index 6d0a35a72..000000000 --- a/app/src/lib/i18n/chunks/it-5.ts +++ /dev/null @@ -1,1030 +0,0 @@ -import type { TranslationMap } from '../types'; - -// Italian (Italiano) chunk 5/5. Translated from chunks/en-5.ts. -const it5: TranslationMap = { - 'settings.billing.subscription.save': '{pct}', - 'settings.billing.subscription.upgrade': 'Aggiorna', - 'settings.billing.subscription.waiting': 'In attesa', - 'settings.billing.subscription.waitingPayment': 'In attesa di pagamento', - 'settings.composio.apiKeyDesc': - 'Una chiave API Composio è attualmente memorizzata su questo dispositivo.', - 'settings.composio.apiKeyLabel': 'Chiave API Composio', - 'settings.composio.apiKeyStored': 'Chiave API memorizzata', - 'settings.composio.apiKeyStoredPlaceholder': '••••••••••••••••', - 'settings.composio.clearedToBackend': 'Passato alla modalità Backend', - 'settings.composio.confirmItem1': 'Un account su app.composio.dev con una chiave API', - 'settings.composio.confirmItem2': - 'Per ricollegare ogni integrazione tramite il tuo account Composio personale', - 'settings.composio.confirmItem3': - 'Nota: i trigger Composio (webhook in tempo reale) non funzionano ancora in modalità Diretta — solo le chiamate sincrone agli strumenti', - 'settings.composio.confirmNeedItems': 'Ti serviranno:', - 'settings.composio.confirmSwitch': 'Ho capito, passa a Diretta', - 'settings.composio.confirmTitle': '⚠️ Passaggio alla modalità Diretta', - 'settings.composio.confirmWarning': - 'Le tue integrazioni esistenti (Gmail, Slack, GitHub, ecc. collegate tramite OpenHuman) non saranno visibili — risiedono nel tenant Composio gestito da OpenHuman.', - 'settings.composio.intro': - 'Composio integra oltre 250 app esterne come strumenti che il tuo agente può chiamare. Scegli come instradare queste chiamate.', - 'settings.composio.modeDirect': 'Diretta (usa la tua chiave API)', - 'settings.composio.modeDirectDesc': - "Le chiamate vanno direttamente a backend.composio.dev. Sovrana / offline-friendly. L'esecuzione degli strumenti funziona in modo sincrono; i webhook dei trigger in tempo reale non sono ancora instradati in modalità diretta (issue di follow-up).", - 'settings.composio.modeManaged': 'Gestita (OpenHuman lo gestisce per te)', - 'settings.composio.modeManagedDesc': - "OpenHuman fa da proxy per le chiamate degli strumenti tramite il nostro backend (consigliato). L'autenticazione è mediata; non incolli mai una chiave API Composio. I webhook sono completamente instradati.", - 'settings.composio.routingMode': 'Modalità di instradamento', - 'settings.composio.saveErrorNoKey': - 'Salvataggio fallito. La modalità Diretta richiede una chiave API non vuota.', - 'settings.composio.saving': 'Salvataggio…', - 'settings.composio.switching': 'Passaggio…', - 'settings.cron.jobs.desc': 'Descrizione', - 'settings.cron.jobs.empty': 'Nessun cron job core trovato.', - 'settings.cron.jobs.lastStatus': 'Ultimo stato', - 'settings.cron.jobs.loading': 'Caricamento cron job...', - 'settings.cron.jobs.loadingRuns': 'Caricamento esecuzioni', - 'settings.cron.jobs.nextRun': 'Prossima esecuzione', - 'settings.cron.jobs.pause': 'Pausa', - 'settings.cron.jobs.paused': 'In pausa', - 'settings.cron.jobs.recentRuns': 'Esecuzioni recenti', - 'settings.cron.jobs.removing': 'Rimozione', - 'settings.cron.jobs.resume': 'Riprendi', - 'settings.cron.jobs.runningNow': 'In esecuzione ora', - 'settings.cron.jobs.saving': 'Salvataggio…', - 'settings.cron.jobs.schedule': 'Pianificazione', - 'settings.cron.jobs.title': 'Cron Job core', - 'settings.cron.jobs.viewRuns': 'Visualizza esecuzioni', - 'settings.localModel.deviceCapability.active': 'Attivo', - 'settings.localModel.deviceCapability.appliedTier': 'Tier applicato', - 'settings.localModel.deviceCapability.applying': 'Applicazione', - 'settings.localModel.deviceCapability.cores': '{count}', - 'settings.localModel.deviceCapability.couldNotLoadPresets': 'Impossibile caricare i preset', - 'settings.localModel.deviceCapability.cpu': 'CPU', - 'settings.localModel.deviceCapability.customModelIds': 'ID modello personalizzati', - 'settings.localModel.deviceCapability.detected': 'Rilevato', - 'settings.localModel.deviceCapability.disabled': 'Disabilitato', - 'settings.localModel.deviceCapability.disabledDesc': 'Descrizione disabilitato', - 'settings.localModel.deviceCapability.downloadingModels': '(download modelli)', - 'settings.localModel.deviceCapability.downloadingSetupDesc': - "Download dell'installer OllamaSetup (~2 GB) e scompattazione. Al primo avvio può richiedere un minuto.", - 'settings.localModel.deviceCapability.failedToApplyPreset': 'Impossibile applicare il preset', - 'settings.localModel.deviceCapability.gpu': 'GPU', - 'settings.localModel.deviceCapability.installFailed': 'Installazione Ollama fallita', - 'settings.localModel.deviceCapability.installFailedDesc': - "L'installer è uscito prima che Ollama fosse utilizzabile. Clicca riprova oppure installa manualmente da ollama.com.", - 'settings.localModel.deviceCapability.installFirst': 'Esegui prima Ollama.', - 'settings.localModel.deviceCapability.installFirstDesc': - 'I tier locali dipendono da un endpoint Ollama gestito esternamente. Avvialo tu, scarica i modelli che vuoi e continua a usare "Disabilitato (fallback cloud)" finché il runtime non è raggiungibile.', - 'settings.localModel.deviceCapability.installOllamaFirst': - 'Esegui prima Ollama per usare questo tier', - 'settings.localModel.deviceCapability.installingOllama': 'Installazione Ollama', - 'settings.localModel.deviceCapability.loadingDeviceInfo': 'Caricamento info dispositivo', - 'settings.localModel.deviceCapability.localAiDisabled': - 'AI locale disabilitata — uso il fallback cloud.', - 'settings.localModel.deviceCapability.modelTier': 'Tier del modello', - 'settings.localModel.deviceCapability.needsOllama': 'Richiede Ollama', - 'settings.localModel.deviceCapability.notDetected': 'Non rilevato', - 'settings.localModel.deviceCapability.ram': 'RAM', - 'settings.localModel.deviceCapability.recommended': 'Consigliato', - 'settings.localModel.deviceCapability.retryInstall': 'Nuovo tentativo…', - 'settings.localModel.deviceCapability.retrying': 'Nuovo tentativo…', - 'settings.localModel.deviceCapability.starting': 'Avvio…', - 'settings.localModel.download.audioPathPlaceholder': 'Percorso assoluto al file audio', - 'settings.localModel.download.capabilityAssets': 'Asset di capacità', - 'settings.localModel.download.downloading': 'Download in corso...', - 'settings.localModel.download.embeddingPlaceholder': 'Una stringa di input per riga...', - 'settings.localModel.download.noThinkMode': 'Modalità no-think', - 'settings.localModel.download.promptPlaceholder': - 'Scrivi un prompt qualsiasi ed eseguilo sul modello locale...', - 'settings.localModel.download.quantizationPref': 'Preferenza quantizzazione', - 'settings.localModel.download.runEmbeddingTest': 'Esecuzione...', - 'settings.localModel.download.runPromptTest': 'Esegui test prompt', - 'settings.localModel.download.runSummaryTest': 'Esegui test riassunto', - 'settings.localModel.download.runTranscriptionTest': 'Esecuzione...', - 'settings.localModel.download.runTtsTest': 'Esecuzione...', - 'settings.localModel.download.runVisionTest': 'Esecuzione...', - 'settings.localModel.download.running': 'Esecuzione...', - 'settings.localModel.download.runningPrompt': 'Esecuzione prompt', - 'settings.localModel.download.summarizePlaceholder': - 'Incolla il testo da riassumere con il modello locale...', - 'settings.localModel.download.testCustomPrompt': 'Test prompt personalizzato', - 'settings.localModel.download.testEmbeddings': 'Test embedding', - 'settings.localModel.download.testSummarization': 'Test riassunto', - 'settings.localModel.download.testVisionPrompt': 'Test prompt vision', - 'settings.localModel.download.testVoiceInput': 'Test input vocale (STT)', - 'settings.localModel.download.testVoiceOutput': 'Test output vocale (TTS)', - 'settings.localModel.download.ttsOutputPlaceholder': 'Percorso WAV di output opzionale', - 'settings.localModel.download.ttsPlaceholder': 'Inserisci il testo da sintetizzare...', - 'settings.localModel.download.visionImagePlaceholder': - 'Un riferimento immagine per riga (data URI, URL o marcatore di percorso locale)', - 'settings.localModel.download.visionPromptPlaceholder': - 'Inserisci un prompt per il modello vision...', - 'settings.localModel.status.allChecksPassed': 'Tutti i controlli superati', - 'settings.localModel.status.artifact': 'Artefatto', - 'settings.localModel.status.backend': 'Backend', - 'settings.localModel.status.binary': 'Binario', - 'settings.localModel.status.bootstrapResume': 'Bootstrap / ripresa', - 'settings.localModel.status.checking': 'Verifica in corso...', - 'settings.localModel.status.checkingOllama': 'Verifica Ollama', - 'settings.localModel.status.customLocation': 'Posizione personalizzata', - 'settings.localModel.status.customLocationDesc': 'Descrizione posizione personalizzata', - 'settings.localModel.status.diagnosticsHint': - 'Clicca "Esegui diagnostica" per verificare che Ollama sia in esecuzione e i modelli installati.', - 'settings.localModel.status.downloadingUnknown': 'Download (dimensione sconosciuta)', - 'settings.localModel.status.eta': 'ETA', - 'settings.localModel.status.expectedModels': 'Modelli attesi', - 'settings.localModel.status.forceRebootstrap': 'Forza re-bootstrap', - 'settings.localModel.status.generationTps': 'TPS di generazione', - 'settings.localModel.status.hideErrorDetails': 'Nascondi dettagli errore', - 'settings.localModel.status.installManually': 'Installa manualmente', - 'settings.localModel.status.installManuallyFrom': 'Installa manualmente da', - 'settings.localModel.status.installOllama': 'Avvio…', - 'settings.localModel.status.installedModels': 'Modelli installati', - 'settings.localModel.status.installing': 'Installazione...', - 'settings.localModel.status.installingOllama': 'Installazione runtime Ollama...', - 'settings.localModel.status.issues': 'Problemi', - 'settings.localModel.status.issuesFound': '{count} problema/i trovato/i', - 'settings.localModel.status.lastLatency': 'Ultima latenza', - 'settings.localModel.status.model': 'Modello', - 'settings.localModel.status.notFound': 'Non trovato', - 'settings.localModel.status.notRunning': 'Non in esecuzione', - 'settings.localModel.status.ollamaBinaryPath': 'Percorso binario Ollama', - 'settings.localModel.status.ollamaDiagnostics': 'Diagnostica Ollama', - 'settings.localModel.status.ollamaNotInstalled': 'Runtime Ollama non disponibile', - 'settings.localModel.status.ollamaNotInstalledDesc': - "OpenHuman ora tratta Ollama come un runtime di inferenza esterno. Avvia il tuo server Ollama, scarica i modelli che vuoi e punta l'instradamento dei carichi di lavoro su di esso.", - 'settings.localModel.status.progress': 'Progresso', - 'settings.localModel.status.provider': 'Provider', - 'settings.localModel.status.retryBootstrap': 'Riprova bootstrap', - 'settings.localModel.status.runDiagnostics': 'Verifica in corso...', - 'settings.localModel.status.running': 'In esecuzione', - 'settings.localModel.status.runningExternalProcess': 'In esecuzione tramite processo esterno', - 'settings.localModel.status.runtimeStatus': 'Stato runtime', - 'settings.localModel.status.server': 'Server', - 'settings.localModel.status.setPath': 'Impostazione...', - 'settings.localModel.status.setting': 'Impostazione...', - 'settings.localModel.status.showErrorDetails': 'Mostra dettagli errore', - 'settings.localModel.status.showInstallErrorDetails': 'Mostra dettagli errore di installazione', - 'settings.localModel.status.suggestedFixes': 'Soluzioni suggerite', - 'settings.localModel.status.thenSetPath': 'Poi imposta il percorso', - 'settings.localModel.status.triggering': 'Attivazione...', - 'settings.localModel.status.unavailable': 'Non disponibile', - 'settings.localModel.status.working': 'Elaborazione...', - 'settings.developerMenu.ai.title': 'Configurazione IA', - 'settings.developerMenu.ai.desc': - 'Provider cloud, modelli Ollama locali e routing per carico di lavoro', - 'settings.developerMenu.screenAwareness.title': 'Consapevolezza schermo', - 'settings.developerMenu.screenAwareness.desc': - 'Permessi di cattura schermo, criteri di monitoraggio e controlli di sessione', - 'settings.developerMenu.messagingChannels.title': 'Canali di messaggistica', - 'settings.developerMenu.messagingChannels.desc': - 'Configura le modalità di autenticazione Telegram/Discord e il routing predefinito del canale', - 'settings.developerMenu.tools.title': 'Strumenti', - 'settings.developerMenu.tools.desc': - 'Abilita o disabilita le capacità che OpenHuman può usare per tuo conto', - 'settings.developerMenu.agentChat.title': 'Chat agente', - 'settings.developerMenu.agentChat.desc': - "Testa conversazioni dell'agente con override di modello e temperatura", - 'settings.developerMenu.devWorkflow.title': 'Dev Workflow', - 'settings.developerMenu.devWorkflow.desc': - 'Autonomous agent that picks your GitHub issues and raises PRs on a schedule', - 'settings.developerMenu.devWorkflow.panelDesc': - 'Configure an autonomous developer agent that picks GitHub issues assigned to you and raises pull requests automatically on a schedule.', - 'settings.devWorkflow.githubRepository': 'GitHub Repository', - 'settings.devWorkflow.loadingRepositories': 'Loading repositories...', - 'settings.devWorkflow.selectRepository': 'Select a repository', - 'settings.devWorkflow.privateTag': '(private)', - 'settings.devWorkflow.detectingForkInfo': 'Detecting fork info...', - 'settings.devWorkflow.forkDetected': 'Fork detected', - 'settings.devWorkflow.upstream': 'Upstream:', - 'settings.devWorkflow.forkPrNote': 'PRs will be raised against the upstream repository.', - 'settings.devWorkflow.notForkNote': - 'Not a fork. PRs will be raised against this repository directly.', - 'settings.devWorkflow.targetBranch': 'Target Branch', - 'settings.devWorkflow.targetBranchNote': 'PRs will be raised against this branch', - 'settings.devWorkflow.loadingBranches': 'Loading branches...', - 'settings.devWorkflow.runFrequency': 'Run Frequency', - 'settings.devWorkflow.runFrequencyNote': - 'How often the agent should check for issues and raise PRs.', - 'settings.devWorkflow.updateConfiguration': 'Update Configuration', - 'settings.devWorkflow.saveConfiguration': 'Save Configuration', - 'settings.devWorkflow.remove': 'Remove', - 'settings.devWorkflow.saved': 'Saved', - 'settings.devWorkflow.activeConfiguration': 'Active Configuration', - 'settings.devWorkflow.activeConfigRepository': 'Repository:', - 'settings.devWorkflow.activeConfigUpstream': 'Upstream:', - 'settings.devWorkflow.activeConfigTargetBranch': 'Target branch:', - 'settings.devWorkflow.activeConfigSchedule': 'Schedule:', - 'settings.devWorkflow.enabled': 'Enabled', - 'settings.devWorkflow.paused': 'Paused', - 'settings.skillsRunner.scheduleEnabled': 'Enabled', - 'settings.skillsRunner.scheduleDisabled': 'Paused', - 'settings.skillsRunner.scheduleToggleAria': 'Toggle schedule enabled', - 'settings.skillsRunner.schedule.history': 'History', - 'settings.skillsRunner.schedule.historyLoading': 'Loading history\u2026', - 'settings.skillsRunner.schedule.historyEmpty': 'No runs yet for this schedule.', - 'settings.skillsRunner.schedule.historyNoOutput': 'No output captured.', - 'settings.skillsRunner.schedule.active': 'Active', - 'settings.skillsRunner.schedule.lastRunLabel': 'last:', - 'settings.devWorkflow.nextRun': 'Next run', - 'settings.devWorkflow.lastRun': 'Last run', - 'settings.devWorkflow.runNow': 'Run now', - 'settings.devWorkflow.running': 'Running…', - 'settings.devWorkflow.recentRuns': 'Recent runs', - 'settings.devWorkflow.cronSaveError': 'Failed to save configuration', - 'settings.devWorkflow.lastOutput': 'Last output', - 'settings.devWorkflow.noOutput': 'No output captured', - 'settings.devWorkflow.runningStatus': - 'Agent is running — picking an issue and working on a fix...', - 'settings.devWorkflow.errorNotConnected': - 'GitHub is not connected. Please connect GitHub via Settings > Advanced > Composio first.', - 'settings.devWorkflow.errorToolNotEnabled': - 'GITHUB_LIST_REPOSITORIES_FOR_THE_AUTHENTICATED_USER tool is not enabled on this backend. Please ask your admin to enable it in the Composio integration (backend#842).', - 'settings.devWorkflow.errorNotAuthenticated': 'Not authenticated. Please sign in first.', - 'settings.devWorkflow.errorNoRepositories': 'No repositories found for this GitHub account.', - 'settings.devWorkflow.schedule.every30min': 'Every 30 minutes', - 'settings.devWorkflow.schedule.everyHour': 'Every hour', - 'settings.devWorkflow.schedule.every2hours': 'Every 2 hours', - 'settings.devWorkflow.schedule.every6hours': 'Every 6 hours', - 'settings.devWorkflow.schedule.onceDaily': 'Once daily (9 AM)', - 'settings.developerMenu.cronJobs.title': 'Processi cron', - 'settings.developerMenu.cronJobs.desc': - 'Visualizza e configura processi pianificati per le skill di runtime', - 'settings.developerMenu.localModelDebug.title': 'Debug modello locale', - 'settings.developerMenu.localModelDebug.desc': - 'Configurazione Ollama, download asset, test del modello e diagnostica', - 'settings.developerMenu.webhooks.title': 'Webhook', - 'settings.developerMenu.webhooks.desc': - 'Ispeziona registrazioni webhook di runtime e log delle richieste catturate', - 'settings.developerMenu.eventLog.title': 'Event Log', - 'settings.developerMenu.eventLog.desc': - 'Live colour-coded stream of all agent, tool, and system events', - 'settings.developerMenu.eventLog.allTypes': 'All types', - 'settings.developerMenu.eventLog.filterAgent': 'Filter...', - 'settings.developerMenu.eventLog.download': 'Download', - 'settings.developerMenu.eventLog.events': 'events', - 'settings.developerMenu.eventLog.live': 'Live', - 'settings.developerMenu.eventLog.disconnected': 'Disconnected', - 'settings.developerMenu.eventLog.waiting': 'Waiting for events...', - 'settings.developerMenu.eventLog.notConnected': 'Not connected to core', - 'settings.developerMenu.eventLog.jumpToLatest': 'Jump to latest', - 'settings.developerMenu.eventLog.badge.tool': 'TOOL', - 'settings.developerMenu.eventLog.badge.agent': 'AGENT', - 'settings.developerMenu.eventLog.badge.info': 'INFO', - 'settings.developerMenu.eventLog.badge.mem': 'MEM', - 'settings.developerMenu.eventLog.badge.chan': 'CHAN', - 'settings.developerMenu.eventLog.badge.cron': 'CRON', - 'settings.developerMenu.eventLog.badge.hook': 'HOOK', - 'settings.developerMenu.eventLog.badge.warn': 'WARN', - 'settings.developerMenu.eventLog.badge.skill': 'SKILL', - 'settings.developerMenu.eventLog.badge.comp': 'COMP', - 'settings.developerMenu.eventLog.badge.mcp': 'MCP', - 'settings.developerMenu.intelligence.title': 'Intelligenza', - 'settings.developerMenu.intelligence.desc': - 'Area di lavoro memoria, motore subconscio, sogni e impostazioni', - 'settings.developerMenu.notificationRouting.title': 'Routing notifiche', - 'settings.developerMenu.notificationRouting.desc': - "Punteggio di importanza IA ed escalation dell'orchestratore per avvisi di integrazione", - 'settings.developerMenu.composeioTriggers.title': 'Trigger ComposeIO', - 'settings.developerMenu.composeioTriggers.desc': - 'Visualizza cronologia e archivio dei trigger ComposeIO', - 'settings.developerMenu.composioRouting.title': 'Routing Composio (modalità diretta)', - 'settings.developerMenu.composioRouting.desc': - 'Usa la tua chiave API Composio e instrada le chiamate direttamente a backend.composio.dev', - 'settings.developerMenu.integrationTriggers.title': 'Trigger di integrazione', - 'settings.developerMenu.integrationTriggers.desc': - 'Configura le impostazioni di triage IA per i trigger di integrazione Composio', - 'settings.appearance.menuDesc': 'Scegli chiaro, scuro o il tema del sistema', - 'settings.mascot.active': 'Attivo', - 'settings.mascot.characterDesc': 'Descrizione personaggio', - 'settings.mascot.characterHeading': 'Intestazione personaggio', - // TODO: translate custom GIF mascot strings. - 'settings.mascot.customGifError': - 'Immettere un HTTPS .gif URL, loopback HTTP .gif URL, file:// .gif URL o un percorso .gif locale.', - 'settings.mascot.customGifHeading': 'Avatar GIF personalizzato', - 'settings.mascot.customGifLabel': 'Avatar GIF personalizzato URL', - 'settings.mascot.colorDesc': 'Descrizione colore', - 'settings.mascot.colorHeading': 'Intestazione colore', - 'settings.mascot.loadingLibrary': 'Caricamento libreria OpenHuman…', - 'settings.mascot.localDefault': 'OpenHuman locale (predefinito)', - 'settings.mascot.menuTitle': 'Mascotte', - 'settings.mascot.menuDesc': "Scegli il colore della mascotte usato in tutta l'app", - 'settings.mascot.noCharacters': 'Nessun personaggio OpenHuman disponibile', - 'settings.mascot.noColorVariants': 'Nessuna variante di colore', - 'settings.mascot.voice.current': 'attuale', - 'settings.mascot.voice.customDesc': - "Trova gli ID vocali su api.elevenlabs.io/v1/voices o nel tuo dashboard ElevenLabs. Viene salvato solo l'ID — la tua chiave API rimane sul backend.", - 'settings.mascot.voice.customHeading': 'ID vocale personalizzato', - 'settings.mascot.voice.customOption': 'Altro (incolla ID vocale)…', - 'settings.mascot.voice.desc': - "Scegli la voce ElevenLabs che la mascotte usa per le risposte parlate. Filtra per genere, scegli dall'elenco curato, incolla un ID personalizzato, oppure lascia che l'app scelga una voce che corrisponda alla lingua dell'interfaccia.", - 'settings.mascot.voice.genderFemale': 'Femminile', - 'settings.mascot.voice.genderHeading': 'Genere della voce', - 'settings.mascot.voice.genderMale': 'Maschile', - 'settings.mascot.voice.heading': 'Voce', - 'settings.mascot.voice.preset': 'Preimpostazione voce', - 'settings.mascot.voice.presetHeading': 'Preimpostazione voce', - 'settings.mascot.voice.preview': 'Anteprima voce', - 'settings.mascot.voice.previewError': 'Anteprima voce non riuscita', - 'settings.mascot.voice.previewing': 'Anteprima in corso…', - 'settings.mascot.voice.reset': 'Ripristina ai valori predefiniti', - 'settings.mascot.voice.useLocaleDefault': "Abbina la lingua dell'app", - 'settings.mascot.voice.useLocaleDefaultDesc': - "Scegli automaticamente una voce per la lingua dell'interfaccia corrente.", - 'settings.memoryWindow.balanced.badge': 'Consigliato', - 'settings.memoryWindow.balanced.hint': - 'Predefinito sensato — buona continuità senza bruciare token extra a ogni esecuzione.', - 'settings.memoryWindow.balanced.label': 'Bilanciato', - 'settings.memoryWindow.description': - "Quanto contesto ricordato OpenHuman inietta in ogni nuova esecuzione dell'agente. Finestre più grandi fanno sentire l'agente più consapevole delle conversazioni passate ma usano più token — e costano di più — a ogni esecuzione.", - 'settings.memoryWindow.extended.badge': 'Più contesto', - 'settings.memoryWindow.extended.hint': - 'Più memoria a lungo termine iniettata in ogni esecuzione. Costo token più alto per turno.', - 'settings.memoryWindow.extended.label': 'Esteso', - 'settings.memoryWindow.maximum.badge': 'Costo più alto', - 'settings.memoryWindow.maximum.hint': - 'La più grande finestra sicura. Migliore continuità, bolletta token significativamente più alta a ogni esecuzione.', - 'settings.memoryWindow.maximum.label': 'Massimo', - 'settings.memoryWindow.minimal.badge': 'Più economico', - 'settings.memoryWindow.minimal.hint': - 'Finestra di memoria minima. Più economico, più veloce, minore continuità tra esecuzioni.', - 'settings.memoryWindow.minimal.label': 'Minimo', - 'settings.memoryWindow.title': 'Finestra di memoria a lungo termine', - 'settings.screenIntel.permissions.accessibility': 'Accessibilità', - 'settings.screenIntel.permissions.grantHint': 'Suggerimento concessione', - 'settings.screenIntel.permissions.inputMonitoring': 'Monitoraggio input', - 'settings.screenIntel.permissions.macosAppliesPrivacy': 'macOS applica privacy', - 'settings.screenIntel.permissions.openInputMonitoring': 'Richiesta…', - 'settings.screenIntel.permissions.refreshStatus': 'Aggiornamento…', - 'settings.screenIntel.permissions.refreshing': 'Aggiornamento…', - 'settings.screenIntel.permissions.requestAccessibility': 'Richiesta…', - 'settings.screenIntel.permissions.requestScreenRecording': 'Richiesta…', - 'settings.screenIntel.permissions.requesting': 'Richiesta…', - 'settings.screenIntel.permissions.restartRefresh': 'Riavvio core…', - 'settings.screenIntel.permissions.restartingCore': 'Riavvio core…', - 'settings.screenIntel.permissions.screenRecording': 'Registrazione schermo', - 'settings.screenIntel.permissions.title': 'Permessi', - 'skills.card.moreActions': 'Altre azioni', - 'skills.create.allowedTools': 'Strumenti consentiti', - 'skills.create.author': 'Autore', - 'skills.create.authorPlaceholder': 'Il tuo nome', - 'skills.create.commaSeparated': '(separati da virgole)', - 'skills.create.createBtn': 'Crea skill', - 'skills.create.createError': 'Impossibile creare la skill', - 'skills.create.creating': 'Creazione…', - 'skills.create.description': 'Descrizione', - 'skills.create.descriptionPlaceholder': 'Cosa fa questa skill?', - 'skills.create.optional': '(optional)', - 'skills.create.inputs.heading': 'Inputs', - 'skills.create.inputs.help': - 'Declare parameters the skill needs. The Skills Runner will render a form for these at run time.', - 'skills.create.inputs.add': 'Add input', - 'skills.create.inputs.row.name': 'Input name', - 'skills.create.inputs.row.namePlaceholder': 'e.g. repo', - 'skills.create.inputs.row.nameError': - 'Letters, digits, underscores, and dashes only; must start with a letter.', - 'skills.create.inputs.row.description': 'Input description', - 'skills.create.inputs.row.descriptionPlaceholder': 'What goes in this field?', - 'skills.create.inputs.row.type': 'Type', - 'skills.create.inputs.row.required': 'Required', - 'skills.create.inputs.row.remove': 'Remove input', - 'skills.create.inputs.type.string': 'Text', - 'skills.create.inputs.type.integer': 'Number', - 'skills.create.inputs.type.boolean': 'Yes / No', - 'skills.create.license': 'Licenza', - 'skills.create.name': 'Nome', - 'skills.create.namePlaceholder': 'es. Trade Journal', - 'skills.create.scope': 'Ambito', - 'skills.create.scopeProjectHint': '/.openhuman/skills/', - 'skills.create.scopeUserHint': - 'Scritto in ~/.openhuman/skills//SKILL.md — disponibile in tutti i workspace.', - 'skills.create.slugLabel': 'Etichetta slug', - 'skills.create.subtitle': 'SKILL.md', - 'skills.create.tags': 'Tag', - 'skills.create.title': 'Nuova skill', - 'skills.detail.allowedTools': 'Strumenti consentiti', - 'skills.detail.author': 'Autore', - 'skills.detail.bundledResources': 'Risorse incluse', - 'skills.detail.closeAriaLabel': 'Chiudi dettagli skill', - 'skills.detail.location': 'Posizione', - 'skills.detail.noBundledResources': 'Nessuna risorsa inclusa.', - 'skills.detail.tags': 'Tag', - 'skills.detail.warnings': 'Avvertenze', - 'skills.install.fetchLog': 'Log di fetch', - 'skills.install.installBtn': 'Installazione…', - 'skills.install.installComplete': 'Installazione completata', - 'skills.install.installing': 'Installazione…', - 'skills.install.parseWarnings': 'Avvertenze di parsing', - 'skills.install.rawError': 'Errore grezzo', - 'skills.install.timeoutHint': '(secondi, opzionale)', - 'skills.install.timeoutLabel': 'Etichetta timeout', - 'skills.install.title': 'Installa skill da URL', - 'skills.install.urlLabel': 'URL skill', - 'skills.meetingBots.bannerDesc': 'Descrizione banner', - 'skills.meetingBots.bannerTitle': 'Titolo banner', - 'skills.meetingBots.busyTitle': 'OpenHuman è occupato', - 'skills.meetingBots.comingSoon': 'In arrivo', - 'skills.meetingBots.couldNotStartTitle': 'Impossibile avviare OpenHuman', - 'skills.meetingBots.displayName': 'Nome visualizzato', - 'skills.meetingBots.failedToStart': 'Avvio di OpenHuman fallito.', - 'skills.meetingBots.joiningMessage': 'Apparirà come partecipante tra qualche secondo.', - 'skills.meetingBots.joiningTitle': 'OpenHuman si sta unendo alla riunione', - 'skills.meetingBots.meetingLink': 'Link della riunione', - 'skills.meetingBots.modalAriaLabel': 'Invia OpenHuman a una riunione', - 'skills.meetingBots.modalDesc': 'Descrizione modale', - 'skills.meetingBots.modalTitle': 'Invia OpenHuman a una riunione', - 'skills.meetingBots.newBadge': 'Nuovo', - 'skills.meetingBots.sendTo': 'Invia a', - 'skills.meetingBots.starting': 'Avvio…', - 'skills.resource.preview.closeAriaLabel': 'Chiudi anteprima', - 'skills.resource.preview.failed': 'Anteprima fallita', - 'skills.resource.preview.loading': 'Caricamento anteprima…', - 'skills.resource.tree.empty': 'Nessuna risorsa inclusa.', - 'skills.search.placeholder': 'Segnaposto', - 'skills.setup.autocomplete.acceptKey': 'Tasto di accettazione', - 'skills.setup.autocomplete.activeDesc': 'Descrizione attivo', - 'skills.setup.autocomplete.activeTitle': 'Autocompletamento attivo', - 'skills.setup.autocomplete.customizeSettings': 'Personalizza impostazioni', - 'skills.setup.autocomplete.debounce': 'Antirimbalzo', - 'skills.setup.autocomplete.description': 'Descrizione', - 'skills.setup.autocomplete.enableBtn': 'Abilitazione...', - 'skills.setup.autocomplete.enableError': 'Abilitazione autocompletamento fallita', - 'skills.setup.autocomplete.enabling': 'Abilitazione...', - 'skills.setup.autocomplete.notSupported': 'Non supportato', - 'skills.setup.autocomplete.stepEnable': 'Abilita completamenti inline', - 'skills.setup.autocomplete.stepSuccess': 'Pronto', - 'skills.setup.autocomplete.stylePreset': 'Preset di stile', - 'skills.setup.autocomplete.stylePresetValue': 'Bilanciato (configurabile in seguito)', - 'skills.setup.autocomplete.title': 'Autocompletamento testo', - 'skills.setup.screenIntel.activeDesc': 'Descrizione attivo', - 'skills.setup.screenIntel.activeTitle': 'Screen Intelligence abilitato', - 'skills.setup.screenIntel.advancedSettings': 'Impostazioni avanzate', - 'skills.setup.screenIntel.allGranted': 'Tutti i permessi concessi', - 'skills.setup.screenIntel.captureMode': 'Modalità di cattura', - 'skills.setup.screenIntel.captureModeValue': 'Tutte le finestre (configurabile in seguito)', - 'skills.setup.screenIntel.deniedHint': - 'Dopo aver concesso i permessi in Impostazioni di sistema, clicca sotto per riavviare e raccogliere le modifiche.', - 'skills.setup.screenIntel.enableBtn': 'Abilitazione...', - 'skills.setup.screenIntel.enableDesc': - 's sul tuo schermo e fornisce contesto utile al tuo agente', - 'skills.setup.screenIntel.enableError': 'Abilitazione Screen Intelligence fallita', - 'skills.setup.screenIntel.enabling': 'Abilitazione...', - 'skills.setup.screenIntel.grant': 'Apertura...', - 'skills.setup.screenIntel.granted': 'Concesso', - 'skills.setup.screenIntel.macosOnly': 'Solo macOS', - 'skills.setup.screenIntel.opening': 'Apertura...', - 'skills.setup.screenIntel.panicHotkey': 'Hotkey panico', - 'skills.setup.screenIntel.permAccessibility': 'Accessibilità', - 'skills.setup.screenIntel.permInputMonitoring': 'Monitoraggio input', - 'skills.setup.screenIntel.permScreenRecording': 'Registrazione schermo', - 'skills.setup.screenIntel.permissionsDesc': 'Descrizione permessi', - 'skills.setup.screenIntel.refreshStatus': 'Aggiorna stato', - 'skills.setup.screenIntel.restartRefresh': 'Riavvio...', - 'skills.setup.screenIntel.restarting': 'Riavvio...', - 'skills.setup.screenIntel.stepEnable': 'Abilita la skill', - 'skills.setup.screenIntel.stepPermissions': 'Concedi permessi', - 'skills.setup.screenIntel.stepSuccess': 'Pronto', - 'skills.setup.screenIntel.title': 'Screen Intelligence', - 'skills.setup.screenIntel.visionModel': 'Modello vision', - 'skills.setup.voice.activation': 'Attivazione', - 'skills.setup.voice.activeDescPrefix': 'Fn', - 'skills.setup.voice.activeDescSuffix': 'Fn', - 'skills.setup.voice.activeTitle': 'Voice Intelligence attivo', - 'skills.setup.voice.customizeSettings': 'Personalizza impostazioni', - 'skills.setup.voice.downloadSttBtn': 'Scarica STT', - 'skills.setup.voice.enableDesc': 'Descrizione abilitazione', - 'skills.setup.voice.hotkey': 'Tasto di scelta rapida', - 'skills.setup.voice.startBtn': 'Avvio...', - 'skills.setup.voice.startError': 'Avvio del server vocale fallito', - 'skills.setup.voice.starting': 'Avvio...', - 'skills.setup.voice.stepEnable': 'Avvia il server vocale', - 'skills.setup.voice.stepSetup': 'Download modello richiesto', - 'skills.setup.voice.stepSuccess': 'Pronto', - 'skills.setup.voice.sttNotReady': 'Modello speech-to-text non pronto', - 'skills.setup.voice.sttNotReadyDesc': - 'Voice Intelligence richiede un modello Whisper locale per la trascrizione. Scaricalo dalle impostazioni Modello locale.', - 'skills.setup.voice.sttReady': 'Modello speech-to-text pronto', - 'skills.setup.voice.sttReturnHint': 'Suggerimento ritorno STT', - 'skills.setup.voice.title': 'Voice Intelligence', - 'skills.uninstall.couldNotUninstall': 'Impossibile disinstallare', - 'skills.uninstall.description': - "Questa operazione elimina permanentemente la directory della skill e tutte le sue risorse incluse. L'agente smetterà di vederla al turno successivo.", - 'skills.uninstall.title': 'Disinstalla', - 'skills.uninstall.uninstallBtn': 'Disinstalla', - 'skills.uninstall.uninstalling': 'Disinstallazione…', - 'upsell.global.limitMessage': 'Aggiorna il tuo piano o ricarica i crediti per continuare', - 'upsell.global.limitTitle': 'Tu', - 'upsell.global.nearLimitMessage': - 'Hai usato il {pct}% del tuo limite di utilizzo. Aggiorna per limiti più alti.', - 'upsell.global.nearLimitTitle': 'Limite di utilizzo in avvicinamento', - 'upsell.usageLimit.bodyBudget': - 'Hai raggiunto il limite settimanale.{reset} Aggiorna il piano o ricarica crediti per evitare i limiti.', - 'upsell.usageLimit.bodyRate': - 'Hai raggiunto il limite di velocità di inferenza di 10 ore.{reset} Aggiorna per limiti più alti.', - 'upsell.usageLimit.heading': 'Limite di utilizzo raggiunto', - 'upsell.usageLimit.notNow': 'Non ora', - 'upsell.usageLimit.perWindow': '{amount}', - 'upsell.usageLimit.planIncludes': '{plan}', - 'upsell.usageLimit.resetsIn': 'Si resetta {time}.', - 'upsell.usageLimit.upgradePlan': 'Aggiorna piano', - 'upsell.usageLimit.weeklyInference': '{amount}', - 'walkthrough.tooltip.letsGo': 'Andiamo!', - 'walkthrough.tooltip.next': 'Avanti →', - 'walkthrough.tooltip.skip': 'Salta tour', - 'walkthrough.tooltip.stepCounter': '{n} di {total}', - 'webhooks.activity.empty': 'Vuoto', - 'webhooks.activity.title': 'Attività recente', - 'webhooks.composioHistory.empty': 'Vuoto', - 'webhooks.composioHistory.metadataId': 'ID metadati', - 'webhooks.composioHistory.metadataUuid': 'UUID metadati', - 'webhooks.composioHistory.payload': 'Payload', - 'webhooks.composioHistory.title': 'Cronologia trigger Composio', - 'webhooks.tunnels.active': 'Attivo', - 'webhooks.tunnels.createFailed': 'Creazione tunnel fallita', - 'webhooks.tunnels.creating': 'Creazione...', - 'webhooks.tunnels.deleteFailed': 'Eliminazione tunnel fallita', - 'webhooks.tunnels.descriptionPlaceholder': 'Descrizione (opzionale)', - 'webhooks.tunnels.echo': 'Echo', - 'webhooks.tunnels.empty': 'Vuoto', - 'webhooks.tunnels.enableEcho': 'Abilita echo', - 'webhooks.tunnels.inactive': 'Inattivo', - 'webhooks.tunnels.namePlaceholder': 'Nome tunnel (es. telegram-bot)', - 'webhooks.tunnels.newTunnel': 'Nuovo tunnel', - 'webhooks.tunnels.removeEcho': 'Rimuovi echo', - 'webhooks.tunnels.title': 'Tunnel webhook', - 'webhooks.tunnels.toggleFailed': 'Attivazione echo fallita', - 'composio.authExpired': 'Autenticazione scaduta', - 'composio.reconnect': 'Riconnetti', - 'composio.previewBadge': 'Anteprima', - 'composio.previewTooltip': - "Integrazione dell'agente disponibile a breve: puoi connetterti, ma l'agente non può ancora utilizzare questo toolkit.", - 'composio.directModeRequiresKey': - 'Salvataggio fallito. La modalità Diretta richiede una chiave API non vuota.', - 'composio.notYetRouted': 'non ancora instradato', - 'composio.triggers.loading': 'Caricamento…', - 'conversations.taskKanban.todo': 'Da fare', - 'settings.composio.loading': 'Caricamento…', - 'settings.mascot.noCharactersAvailable': 'Nessun personaggio OpenHuman disponibile', - 'skills.uninstall.confirmTitle': 'Disinstallare {name}?', - 'conversations.taskKanban.blocked': 'Bloccato', - 'conversations.taskKanban.done': 'Fatto', - 'conversations.taskKanban.pending': 'Pending', - 'conversations.taskKanban.working': 'Working', - 'conversations.taskKanban.awaitingApproval': 'Awaiting approval', - 'conversations.taskKanban.ready': 'Ready', - 'conversations.taskKanban.rejected': 'Rejected', - 'conversations.taskKanban.inProgress': 'In corso', - 'intelligence.memoryChunk.detail.copiedHint': 'copiato', - 'settings.composio.notYetRouted': 'non ancora instradato', - 'settings.localModel.download.manageExternal': 'Gestisci questo modello nel tuo runtime esterno.', - 'settings.localModel.status.manageOllamaExternal': - 'Gestisci il processo Ollama e i pull dei modelli al di fuori di OpenHuman, poi riesegui la diagnostica.', - 'settings.localModel.status.ollamaDocs': 'Documentazione Ollama', - 'settings.localModel.status.thenRetry': - 'per le istruzioni di configurazione, poi riprova quando il runtime è raggiungibile.', - 'settings.appearance.title': 'Aspetto', - 'settings.appearance.themeHeading': 'Tema', - 'settings.appearance.themeAria': 'Tema', - 'settings.appearance.modeLight': 'Luce', - 'settings.appearance.modeLightDesc': 'Superfici luminose, testo scuro.', - 'settings.appearance.modeDark': 'Scuro', - 'settings.appearance.modeDarkDesc': 'Superfici scure, più facili per gli occhi dopo il tramonto.', - 'settings.appearance.modeSystem': 'Sistema di corrispondenza', - 'settings.appearance.modeSystemDesc': - "Segui l'impostazione dell'aspetto del tuo sistema operativo.", - 'settings.appearance.helperText': - 'La modalità oscura trasforma l\'intera app (chat, impostazioni, pannelli) in una tavolozza scura. Il "sistema di corrispondenza" segue l\'aspetto del tuo sistema operativo e si aggiorna in tempo reale.', - 'settings.mascot.characterPreview': 'Anteprima', - 'settings.mascot.characterStates': 'stati', - 'settings.mascot.characterVisemes': 'visemi', - 'settings.mascot.colorAria': 'OpenHuman colore', - 'settings.mascot.colorBlack': 'Nero', - 'settings.mascot.colorBurgundy': 'Borgogna', - 'settings.mascot.colorCustom': 'Custom', - 'settings.mascot.colorNavy': 'Blu marino', - 'settings.mascot.primaryColor': 'Primary color', - 'settings.mascot.secondaryColor': 'Secondary color', - 'settings.mascot.colorYellow': 'Giallo', - 'settings.mascot.libraryUnavailable': 'OpenHuman libreria non disponibile', - 'settings.mascot.title': 'OpenHuman', - 'settings.developerMenu.mcpServer.title': 'MCP Server', - 'settings.developerMenu.mcpServer.desc': - 'Configura i client MCP esterni per connettersi a OpenHuman', - 'settings.developerMenu.autonomy.title': 'Autonomia agente', - 'settings.developerMenu.autonomy.desc': - 'Limiti di frequenza delle azioni degli strumenti e soglie di sicurezza', - 'settings.mcpServer.title': 'MCP Server', - 'settings.mcpServer.toolsSectionTitle': 'Strumenti disponibili', - 'settings.mcpServer.toolsSectionDesc': - "Strumenti esposti tramite il server MCP stdio durante l'esecuzione di openhuman-core mcp", - 'settings.mcpServer.configSectionTitle': 'Configurazione client', - 'settings.mcpServer.configSectionDesc': - 'Seleziona il tuo client MCP per generare lo snippet di configurazione corretto', - 'settings.mcpServer.copySnippet': 'Copia negli appunti', - 'settings.mcpServer.copied': 'Copiato!', - 'settings.mcpServer.openConfigFile': 'Apri file di configurazione', - 'settings.mcpServer.binaryPathNotFound': - 'OpenHuman binario non trovato. Se esegui dal sorgente, compila con: cargo build --bin openhuman-core', - 'settings.mcpServer.openConfigError': 'Impossibile aprire il file di configurazione', - 'settings.mcpServer.clientClaudeDesktop': 'Claude Desktop', - 'settings.mcpServer.clientCursor': 'Cursore', - 'settings.mcpServer.clientCodex': 'Codex', - 'settings.mcpServer.clientZed': 'Zed', - 'settings.mcpServer.configFilePath': 'File di configurazione', - 'settings.mcpServer.clientSelectorAriaLabel': 'MCP selettore client', - 'settings.persona.title': 'Persona', - 'settings.persona.menuTitle': 'Persona', - 'settings.persona.menuDesc': - 'Name, personality, avatar, and voice — your assistant as one identity', - 'settings.persona.identityHeading': 'Identity', - 'settings.persona.identityDesc': - 'A display name and short description for your assistant. Shown in the app; does not change how the assistant reasons.', - 'settings.persona.displayNameLabel': 'Display name', - 'settings.persona.displayNamePlaceholder': 'e.g. Nova', - 'settings.persona.descriptionLabel': 'Description', - 'settings.persona.descriptionPlaceholder': 'e.g. A calm, concise assistant for my team.', - 'settings.persona.soul.heading': 'Personality (SOUL.md)', - 'settings.persona.soul.desc': - 'The personality prompt the assistant follows in every conversation. Edits are saved to your workspace and take effect on the next reply.', - 'settings.persona.soul.editorLabel': 'SOUL.md contents', - 'settings.persona.soul.reset': 'Reset to default', - 'settings.persona.soul.usingDefault': 'Using the bundled default', - 'settings.persona.soul.loadError': 'Could not load SOUL.md', - 'settings.persona.soul.saveError': 'Could not save SOUL.md', - 'settings.persona.soul.resetError': 'Could not reset SOUL.md', - 'settings.persona.appearanceHeading': 'Avatar & Voice', - 'settings.persona.appearanceDesc': - 'Mascot color, custom GIF avatar, and reply voice are configured in Mascot settings.', - 'settings.persona.openMascotSettings': 'Open Mascot settings', - 'settings.developerMenu.composio.title': 'Composio', - 'settings.developerMenu.composio.desc': - 'Modalità di routing, trigger di integrazione e archivio cronologico dei trigger.', - 'settings.appearance.tabBarHeading': 'Barra delle schede inferiore', - 'settings.appearance.tabBarAlwaysShowLabels': 'Mostra sempre le etichette', - 'settings.appearance.tabBarAlwaysShowLabelsDesc': - 'Quando disattivata, le etichette vengono visualizzate solo al passaggio del mouse o per la scheda attiva.', - 'common.breadcrumb': 'breadcrumb', - 'settings.betaBuild': 'Build beta - v{version}', - 'migration.vendor.openclaw': 'OpenClaw', - 'migration.vendor.hermes': 'Hermes Agent', - 'onboarding.apiKeys.openaiOauthHint': - 'Utilizza ChatGPT Plus/Pro (abbonamento) o una chiave OpenAI API: non entrambi richiesti.', - 'onboarding.apiKeys.openaiOauthOpening': "Apertura dell'accesso…", - 'onboarding.apiKeys.finishSignIn': "Termina l'accesso a ChatGPT", - 'onboarding.apiKeys.orApiKey': 'o il tasto API', - 'app.localAiDownload.expandAria': "Espandi l'avanzamento del download", - 'app.localAiDownload.collapseAria': "Comprimi l'avanzamento del download", - 'app.localAiDownload.dismissAria': 'Ignora notifica di download', - 'mobile.nav.ariaLabel': 'Navigazione mobile', - 'progress.stepsAria': 'Passaggi di avanzamento', - 'progress.stepAria': 'Passaggio {current} di {total}', - 'workspace.vaultsTitle': 'Depositi di conoscenza', - 'workspace.vaultsDesc': - 'Punta a una cartella locale; i file vengono suddivisi in blocchi e sottoposti a mirroring nella memoria.', - 'calls.title': 'Chiamate', - 'calls.comingSoonBody': - "Le chiamate assistite dall'intelligenza artificiale saranno presto disponibili. Rimani sintonizzato.", - 'art.rotatingTetrahedronAria': 'Veicolo spaziale a tetraedro invertito rotante', - 'devOptions.sentryDisabled': '(nessun ID: sentinella disabilitata in questa build)', - 'composio.expiredAuthorization': '{name} autorizzazione scaduta', - 'composio.expiredDescription': - "Riconnettiti per riattivare gli strumenti {name}. OpenHuman manterrà questa integrazione non disponibile finché non aggiornerai l'accesso a OAuth.", - 'channels.telegram.remoteControlTitle': 'Controllo remoto (Telegram)', - 'channels.telegram.remoteControlBody': - 'Da una chat Telegram consentita, inviare /status, /sessions, /new o /help. Il routing del modello utilizza ancora /model e /models.', - 'rewards.referralSection.retry': 'Riprova', - 'settings.ai.plannerSummary': - 'Pianificatore: {sourceEvents} eventi origine, {sent} inviati, {deduped} deduplicato.', - 'settings.ai.routeLabel': 'percorso: {route}', - 'settings.ai.latestSpend': 'Ultima spesa: {amount} alle {time} ({action})', - 'settings.ai.topActions': 'Azioni principali', - 'settings.ai.noSpendRows': 'Nessuna riga di spesa caricata.', - 'settings.ai.topHours': 'Ore principali', - 'settings.ai.noHourlySpend': 'Ancora nessuna spesa oraria.', - 'settings.autocomplete.appFilter.app': 'App', - 'settings.autocomplete.appFilter.currentSuggestion': 'Suggerimento corrente', - 'settings.autocomplete.appFilter.debounce': 'Antirimbalzo', - 'settings.autocomplete.appFilter.enabled': 'Abilitato', - 'settings.autocomplete.appFilter.lastError': 'Ultimo errore', - 'settings.autocomplete.appFilter.model': 'Modello', - 'settings.autocomplete.appFilter.phase': 'Fase', - 'settings.autocomplete.appFilter.platformSupported': 'Piattaforma supportata', - 'settings.autocomplete.appFilter.running': 'In esecuzione', - 'settings.autocomplete.debug.acceptedPrefix': 'Accettato: {value}', - 'settings.autocomplete.debug.acceptFailed': 'Impossibile accettare il suggerimento', - 'settings.autocomplete.debug.alreadyRunning': 'Il completamento automatico è già in esecuzione.', - 'settings.autocomplete.debug.clearHistoryFailed': 'Impossibile cancellare la cronologia.', - 'settings.autocomplete.debug.didNotStart': 'Il completamento automatico non è stato avviato.', - 'settings.autocomplete.debug.disabledInSettings': - 'Il completamento automatico è disabilitato nelle impostazioni. Abilitalo e salva prima.', - 'settings.autocomplete.debug.fetchSuggestionFailed': - 'Impossibile recuperare il suggerimento corrente', - 'settings.autocomplete.debug.inspectFocusedElementFailed': - "Impossibile controllare l'elemento selezionato", - 'settings.autocomplete.debug.loadSettingsFailed': - 'Impossibile caricare le impostazioni di completamento automatico', - 'settings.autocomplete.debug.noSuggestionApplied': 'Nessun suggerimento è stato applicato.', - 'settings.autocomplete.debug.noSuggestionReturned': 'Nessun suggerimento restituito.', - 'settings.autocomplete.debug.refreshStatusFailed': - 'Impossibile aggiornare lo stato del completamento automatico', - 'settings.autocomplete.debug.saveAdvancedSettingsFailed': - 'Impossibile salvare le impostazioni avanzate', - 'settings.autocomplete.debug.startFailed': 'Impossibile avviare il completamento automatico', - 'settings.autocomplete.debug.stopFailed': 'Impossibile arrestare il completamento automatico', - 'settings.autocomplete.debug.suggestionPrefix': 'Suggerimento: {value}', - 'settings.autocomplete.shared.none': 'Nessuno', - 'settings.autocomplete.shared.notApplicable': 'n/a', - 'settings.autocomplete.shared.unknown': 'Sconosciuto', - 'settings.billing.autoRecharge.expires': 'Scadenza {date}', - 'settings.billing.autoRecharge.spentThisWeek': '${spent} di ${limit} utilizzato questa settimana', - 'settings.localModel.deviceCapability.disabledLowercase': 'disabilitato', - 'settings.localModel.deviceCapability.presetDetails': - 'Chat: {chatModel} · Visione: {visionModel} · RAM di destinazione: {targetRamGb} GB', - 'settings.localModel.download.capabilityChat': 'Chat', - 'settings.localModel.download.capabilityEmbedding': 'Incorporamento', - 'settings.localModel.download.capabilityStt': 'STT', - 'settings.localModel.download.capabilityTts': 'TTS', - 'settings.localModel.download.capabilityVision': 'Visione', - 'settings.localModel.download.embeddingDimensions': 'Dimensioni: {dimensions}', - 'settings.localModel.download.embeddingModel': 'Modello: {modelId}', - 'settings.localModel.download.embeddingVectors': 'Vettori: {count}', - 'settings.localModel.download.notAvailable': 'n/a', - 'settings.localModel.download.summaryHelper': - 'Chiama `openhuman.inference_summarize` tramite Rust core', - 'settings.localModel.download.transcript': 'Trascrizione:', - 'settings.localModel.download.ttsOutput': 'Output: {outputPath}', - 'settings.localModel.download.ttsVoice': 'Voce: {voiceId}', - 'settings.localModel.status.contextBelowMinimumBadge': - '{contextLength} ctx - inferiore a {required} min', - 'settings.localModel.status.contextBelowMinimumTitle': - 'Rifiutato: i token {contextLength} della finestra di contesto sono al di sotto del minimo {required}-token richiesto dal livello di memoria. Il richiamo verrebbe danneggiato dal troncamento silenzioso.', - 'settings.localModel.status.contextOkBadge': '{contextLength} ctx ✓', - 'settings.localModel.status.contextOkTitle': - 'I token {contextLength} della finestra di contesto soddisfano il livello minimo di memoria di token {required}.', - 'settings.localModel.status.contextUnknownBadge': 'ctx sconosciuto', - 'settings.localModel.status.contextUnknownTitle': - 'Finestra di contesto sconosciuta; non è stato possibile confermare che soddisfi il livello minimo di memoria {required}-token.', - 'settings.localModel.status.expectedChat': 'Chat: {model}', - 'settings.localModel.status.expectedEmbedding': 'Incorporamento: {model}', - 'settings.localModel.status.expectedVision': 'Visione: {model}', - 'settings.localModel.status.externalProcess': 'Processo esterno', - 'settings.localModel.status.notAvailable': 'n/a', - 'settings.mascot.customGifPlaceholder': 'https://example.com/avatar.gif', - 'settings.mascot.loadDetailError': 'Impossibile caricare la mascotte.', - 'settings.mascot.loadLibraryError': 'Impossibile caricare la libreria delle mascotte.', - 'settings.mascot.voice.customPlaceholder': 'ad es. 21m00Tcm4TlvDq8ikWAM', - 'settings.mascot.voice.previewText': "Hi, I'm your assistant. This is a voice preview.", - 'skills.channelIcon.discord': 'Discord', - 'skills.channelIcon.imessage': 'iMessage', - 'skills.channelIcon.telegram': 'Telegram', - 'skills.channelIcon.web': 'Web', - 'skills.channelIcon.yuanbao': 'Yuanbao', - 'skills.composio.poweredBy': 'Offerto da Composio', - 'skills.composio.staleStatusTitle': 'Le connessioni mostrano uno stato obsoleto', - 'skills.create.allowedToolsHelp': 'Resi nel frontmatter SKILL.md come', - 'skills.create.allowedToolsPlaceholder': 'node_exec, fetch', - 'skills.create.licensePlaceholder': 'MIT', - 'skills.create.tagsPlaceholder': 'trading, ricerca', - 'skills.install.errors.alreadyInstalledHint': - "Una skill con questo slug esiste già nell'area di lavoro. Rimuovilo prima o modifica il frontmatter `metadata.id` / `name`.", - 'skills.install.errors.alreadyInstalledTitle': 'Competenza già installata', - 'skills.install.errors.fetchFailedHint': - "La richiesta non è stata completata correttamente. Controlla che URL punti a un file pubblico raggiungibile e che l'host abbia restituito una risposta 2xx.", - 'skills.install.errors.fetchFailedTitle': 'Recupero non riuscito', - 'skills.install.errors.fetchTimedOutHint': - "L'host remoto non ha risposto in tempo. Riprovare o aumentare il timeout (1-600 s).", - 'skills.install.errors.fetchTimedOutTitle': 'Recupero scaduto', - 'skills.install.errors.fetchTooLargeHint': - 'SKILL.md deve essere inferiore a 1 MiB. Dividi le risorse raggruppate in file "riferimenti/" o "script/" invece di incorporarle.', - 'skills.install.errors.fetchTooLargeTitle': 'SKILL.md troppo grande', - 'skills.install.errors.genericHint': - 'Il backend ha restituito un errore. Il messaggio grezzo è mostrato di seguito.', - 'skills.install.errors.genericTitle': 'Impossibile installare la competenza', - 'skills.install.errors.invalidSkillHint': - 'Il frontmatter deve essere YAML valido con campi `nome` e `descrizione` non vuoti, terminati da `---`.', - 'skills.install.errors.invalidSkillTitle': 'SKILL.md non ha analizzato', - 'skills.install.errors.invalidUrlHint': - 'Sono consentiti solo HTTPS URL pubblici. Gli host privati, di loopback e di metadati sono bloccati.', - 'skills.install.errors.invalidUrlTitle': 'URL rifiutato', - 'skills.install.errors.unsupportedUrlHint': - "Funzionano solo i collegamenti diretti `.md`. Per GitHub, collegamento a un file (github.com/owner/repo/blob/.../SKILL.md): l'albero e le radici del repository non sono installati.", - 'skills.install.errors.unsupportedUrlTitle': 'URL modulo non supportato', - 'skills.install.errors.writeFailedHint': - "La directory delle competenze dell'area di lavoro non era scrivibile. Controlla i permessi del filesystem per `/.openhuman/skills/`.", - 'skills.install.errors.writeFailedTitle': 'Impossibile scrivere SKILL.md', - 'skills.install.fetchingPrefix': 'Recupero di', - 'skills.install.fetchingSuffix': 'ciò può richiedere fino al timeout configurato.', - 'skills.install.subtitleMiddle': 'su HTTPS e lo installa in', - 'skills.install.subtitlePrefix': 'Recupera un singolo', - 'skills.install.subtitleSuffix': 'solo HTTPS; gli host privati ​​e di loopback sono bloccati.', - 'skills.install.successDiscovered': 'Scoperto {count} nuove abilità.', - 'skills.install.successNoNewIds': - "Abilità installata, ma non sono apparsi nuovi ID abilità: il catalogo potrebbe già contenere un'abilità con lo stesso slug.", - 'skills.install.timeoutHelp': - 'Il valore predefinito è 60 secondi. I valori esterni a 1-600 sono bloccati sul lato server.', - 'skills.install.timeoutInvalid': 'Deve essere un numero intero compreso tra 1 e 600.', - 'skills.install.timeoutPlaceholder': '60', - 'skills.install.urlHelpMiddle': 'file.', - 'skills.install.urlHelpPrefix': 'Collegamento diretto a un', - 'skills.install.urlHelpSuffix': 'URLs riscrittura automatica in', - 'skills.install.urlInvalidPrefix': 'URL deve essere un collegamento', - 'skills.install.urlInvalidSuffix': 'ben formato.', - 'skills.install.urlPlaceholder': 'https://raw.githubusercontent.com/owner/repo/main/SKILL.md', - 'skills.meetingBots.platformComingSoon': 'Il supporto {label} sarà presto disponibile.', - 'skills.meetingBots.platformHints.gmeet': 'meet.google.com/abc-defg-hij', - 'skills.meetingBots.platformHints.teams': 'teams.microsoft.com/...', - 'skills.meetingBots.platformHints.zoom': 'zoom.us/j/...', - 'skills.meetingBots.platforms.gmeet': 'Google Incontra', - 'skills.meetingBots.platforms.teams': 'Microsoft Teams', - 'skills.meetingBots.platforms.zoom': 'Zoom', - 'skills.meetingBots.soonSuffix': 'presto', - 'skills.setup.screenIntel.permissionPathLabel': 'macOS applica la privacy a:', - 'settings.agentAccess.title': 'Agent OS access', - 'settings.agentAccess.menuDesc': - 'Control where the agent can read/write and whether it can use the shell.', - 'settings.agentAccess.loadError': 'Failed to load access settings', - 'settings.agentAccess.saveError': 'Failed to save access settings', - 'settings.agentAccess.saved': 'Saved — applies on your next message.', - 'settings.agentAccess.desktopOnly': 'Access settings are only available in the desktop app.', - 'settings.agentAccess.loading': 'Loading…', - 'settings.agentAccess.accessMode': 'Access mode', - 'settings.agentAccess.tier.readonly.title': 'Read-only', - 'settings.agentAccess.tier.readonly.desc': - 'Reads files and runs read-only commands to explore — but never writes, edits, or runs anything that changes state.', - 'settings.agentAccess.tier.supervised.title': 'Ask before edit', - 'settings.agentAccess.tier.supervised.desc': - 'Creates new files freely, but asks for your approval before editing an existing file, running a command, reaching the network, or installing anything.', - 'settings.agentAccess.tier.full.title': 'Full access', - 'settings.agentAccess.tier.full.desc': - 'Runs commands with your full user account access — it can read/write anywhere allowed, except credential and system stores. Destructive commands, network access, and installs still ask for approval.', - 'settings.agentAccess.defaultTag': '(default)', - 'settings.agentAccess.fullWarning': - '⚠ Full access runs commands with your full account access and is not sandboxed. Only enable it when you trust the agent with this machine. Credential and system directories stay blocked, and destructive, network, and install actions still ask for approval.', - 'settings.agentAccess.confine.label': 'Confine to workspace', - 'settings.agentAccess.confine.desc': - 'Restrict the agent to the workspace directory (plus any granted folders), whichever access mode is selected. When off, it can reach anywhere your user can — except the always-blocked credential and system directories.', - 'settings.agentAccess.grantedFolders': 'Granted folders', - 'settings.agentAccess.alwaysAllow': 'Always-allowed tools', - 'settings.agentAccess.alwaysAllowDesc': - 'Tools you marked "Always allow" in chat run without asking. Remove one to be prompted again.', - 'settings.agentAccess.alwaysAllowNone': 'No always-allowed tools yet.', - 'settings.agentAccess.grantedDesc': - 'Folders the agent may read and write, in addition to the workspace. Credential stores (~/.ssh, ~/.gnupg, ~/.aws, keychains) and system directories (/etc, /System, C:\\Windows, …) are always blocked, even inside a granted folder.', - 'settings.agentAccess.noneGranted': 'No folders granted.', - 'settings.agentAccess.readWrite': 'read + write', - 'settings.agentAccess.readOnly': 'read-only', - 'settings.agentAccess.remove': 'Remove', - 'settings.agentAccess.pathPlaceholder': 'Percorso assoluto della cartella', - 'settings.agentAccess.accessLevelLabel': 'Access level', - 'settings.agentAccess.add': 'Add', - 'settings.agentAccess.saving': 'Saving…', - 'settings.agentAccess.changesApply': 'Changes apply on your next message.', - 'skills.tabs.runners': 'Runners', - 'settings.developerMenu.skillsRunner.title': 'Skills Runner', - 'settings.developerMenu.skillsRunner.desc': - 'Run any bundled skill ad-hoc — fill its inputs and fire a background autonomous run', - 'settings.developerMenu.skillsRunner.panelDesc': - 'Pick a bundled skill, fill in its declared inputs, and fire a fire-and-forget background run. Use Dev Workflow instead if you want a cron-scheduled recurring job.', - 'settings.skillsRunner.skill': 'Skill', - 'settings.skillsRunner.selectSkill': 'Select a skill…', - 'settings.skillsRunner.loadingSkills': 'Loading skills…', - 'settings.skillsRunner.loadingDescription': 'Loading skill inputs…', - 'settings.skillsRunner.noInputs': 'This skill declares no inputs.', - 'settings.skillsRunner.placeholder.required': 'required', - 'settings.skillsRunner.runNow': 'Run now', - 'settings.skillsRunner.starting': 'Starting…', - 'settings.skillsRunner.started': 'Started — run id:', - 'settings.skillsRunner.logPath': 'Log:', - 'settings.skillsRunner.error.listSkills': 'Failed to load skills:', - 'settings.skillsRunner.error.describe': 'Failed to load inputs:', - 'settings.skillsRunner.error.missingRequired': 'Missing required input(s):', - 'settings.skillsRunner.error.run': 'Run failed to start:', - 'settings.skillsRunner.error.preflightGate': 'Preflight gate failed', - 'settings.skillsRunner.schedule.heading': 'Schedule (recurring)', - 'settings.skillsRunner.schedule.help': - 'Save this skill + inputs as a recurring cron job. The agent will call run_skill at each tick.', - 'settings.skillsRunner.schedule.frequency': 'Frequency', - 'settings.skillsRunner.schedule.every30min': 'Every 30 minutes', - 'settings.skillsRunner.schedule.everyHour': 'Every hour', - 'settings.skillsRunner.schedule.every2hours': 'Every 2 hours', - 'settings.skillsRunner.schedule.every6hours': 'Every 6 hours', - 'settings.skillsRunner.schedule.onceDaily': 'Once daily (9:00)', - 'settings.skillsRunner.schedule.save': 'Save schedule', - 'settings.skillsRunner.schedule.saving': 'Saving…', - 'settings.skillsRunner.schedule.saved': 'Schedule saved.', - 'settings.skillsRunner.schedule.error': 'Schedule save failed:', - 'settings.skillsRunner.schedule.loadingJobs': 'Loading existing schedules…', - 'settings.skillsRunner.schedule.noJobs': 'No schedules saved for this skill yet.', - 'settings.skillsRunner.schedule.existing': 'Scheduled jobs for this skill:', - 'settings.skillsRunner.schedule.runNow': 'Run', - 'settings.skillsRunner.schedule.remove': 'Remove', - 'settings.skillsRunner.recentRuns.headingForSkill': 'Recent runs for this skill', - 'settings.skillsRunner.recentRuns.headingAll': 'Recent skill runs (all)', - 'settings.skillsRunner.recentRuns.refresh': 'Refresh', - 'settings.skillsRunner.recentRuns.loading': 'Loading recent runs…', - 'settings.skillsRunner.recentRuns.empty': 'No recent runs.', - 'settings.skillsRunner.viewer.loading': 'Loading log…', - 'settings.skillsRunner.viewer.tailing': 'Live tailing', - 'settings.skillsRunner.viewer.fetching': 'fetching', - 'settings.skillsRunner.viewer.error': 'Log read failed:', - 'settings.skillsRunner.repoPicker.loading': 'Loading repositories…', - 'settings.skillsRunner.repoPicker.select': 'Select a repository…', - 'settings.skillsRunner.repoPicker.empty': - 'No repositories returned. Connect GitHub via Composio to populate this list.', - 'settings.skillsRunner.repoPicker.notConnected': - 'GitHub isn’t connected via Composio. Connect it under Skills → Composio first.', - 'settings.skillsRunner.repoPicker.privateTag': '(private)', - 'settings.skillsRunner.branchPicker.needRepo': 'Pick a repo first…', - 'settings.skillsRunner.branchPicker.loading': 'Loading branches…', - 'settings.skillsRunner.branchPicker.select': 'Select a branch…', - 'settings.modelHealth.title': 'Model Health', - 'settings.modelHealth.desc': - 'Per-model quality, hallucination rate, and cost comparison across active models', - 'settings.modelHealth.allStatuses': 'All statuses', - 'settings.modelHealth.models': 'models', - 'settings.modelHealth.loading': 'Loading model data...', - 'settings.modelHealth.empty': 'No models registered', - 'settings.modelHealth.col.model': 'Model', - 'settings.modelHealth.col.quality': 'Quality', - 'settings.modelHealth.col.halluc': 'Halluc. Rate', - 'settings.modelHealth.col.cost': 'Cost / 1M out', - 'settings.modelHealth.col.agents': 'Agents', - 'settings.modelHealth.col.status': 'Status', - 'settings.modelHealth.badge.keep': 'Keep', - 'settings.modelHealth.badge.replace': 'Replace', - 'settings.modelHealth.badge.staging': 'Staging test', - 'settings.modelHealth.badge.vision': 'Vision only', - 'settings.modelHealth.swap': 'Swap?', - 'settings.modelHealth.modal.title': 'Replace Model?', - 'settings.modelHealth.modal.hallucRate': 'Hallucination rate', - 'settings.modelHealth.modal.cancel': 'Cancel', - 'settings.modelHealth.modal.apply': 'Apply Replacement', - 'settings.modelHealth.tag.cheaper': 'CHEAPER', - 'settings.modelHealth.tag.better': 'BETTER', - // Task sources (#task-sources) - 'settings.taskSources.title': 'Task Sources', - 'settings.taskSources.subtitle': 'Pull tasks from your tools onto the agent todo board', - 'settings.taskSources.description': - 'Collect work items from GitHub, Notion, Linear, and ClickUp, enrich them, and route them onto the agent todo board.', - 'settings.taskSources.connectHint': - 'Task sources use your connected accounts. Connect them under Integrations first.', - 'settings.taskSources.disabledBanner': - 'Task sources are disabled in settings. Enable them to poll automatically.', - 'settings.taskSources.loadError': 'Failed to load task sources', - 'settings.taskSources.addTitle': 'Add a task source', - 'settings.taskSources.provider': 'Provider', - 'settings.taskSources.name': 'Name (optional)', - 'settings.taskSources.namePlaceholder': 'e.g. My open issues', - 'settings.taskSources.github.repo': 'Repository (owner/name, optional)', - 'settings.taskSources.github.labels': 'Labels (comma-separated)', - 'settings.taskSources.notion.database': 'Database (board) ID', - 'settings.taskSources.linear.team': 'Team ID (optional)', - 'settings.taskSources.clickup.team': 'Workspace (team) ID (optional)', - 'settings.taskSources.assignedToMe': 'Only items assigned to me', - 'settings.taskSources.add': 'Add source', - 'settings.taskSources.adding': 'Adding…', - 'settings.taskSources.preview': 'Preview', - 'settings.taskSources.previewResult': '{count} task(s) match this filter', - 'settings.taskSources.fetchNow': 'Fetch now', - 'settings.taskSources.fetching': 'Fetching…', - 'settings.taskSources.fetchResult': 'Routed {routed} of {fetched} task(s)', - 'settings.taskSources.configured': 'Configured sources', - 'settings.taskSources.empty': 'No task sources configured yet.', - 'settings.taskSources.proactive': 'Proactive', - 'settings.taskSources.lastFetch': 'Last fetch', - 'settings.taskSources.never': 'Never', - 'settings.taskSources.statusEnabled': 'Enabled', - 'settings.taskSources.statusDisabled': 'Disabled', - 'settings.taskSources.enable': 'Enable', - 'settings.taskSources.disable': 'Disable', - 'settings.taskSources.remove': 'Remove', - 'settings.taskSources.removeConfirm': - 'Remove this task source? All ingested task history will be deleted and cannot be undone.', - - 'settings.taskSources.refresh': 'Refresh', - // Task sources provider labels (#task-sources) - 'settings.taskSources.providers.github': 'GitHub', - 'settings.taskSources.providers.notion': 'Notion', - 'settings.taskSources.providers.linear': 'Linear', - 'settings.taskSources.providers.clickup': 'ClickUp', - - // /skills IA restructure (Phase 2/3) — dashboard + new-skill page. - 'skills.dashboard.title': 'Skills', - 'skills.dashboard.scheduledHeading': 'Scheduled skills', - 'skills.dashboard.emptyTitle': 'No scheduled skills', - 'skills.dashboard.emptyBody': - 'Run a bundled skill once or save a recurring schedule to see it here.', - 'skills.dashboard.create': 'Create a Skill', - 'skills.dashboard.run': 'Run a Skill', - 'skills.dashboard.enable': 'Enable scheduled skill', - 'skills.dashboard.disable': 'Disable scheduled skill', - 'skills.dashboard.lastRun': 'Last run', - 'skills.dashboard.nextRun': 'Next run', - 'skills.dashboard.cardOpenRunner': 'Open in runner', - 'skills.dashboard.loadError': 'Failed to load scheduled skills', - 'skills.new.title': 'Create a skill', - 'skills.new.placeholderBody': - 'Authoring form arrives soon. For now, use the “New skill” button on the runner page.', - 'settings.agentAccess.requireTaskPlanApproval.label': 'Require task plan approval', - 'settings.agentAccess.requireTaskPlanApproval.desc': - 'Pause before an assigned agent executes an agent-authored task brief.', -}; - -export default it5; diff --git a/app/src/lib/i18n/chunks/ko-1.ts b/app/src/lib/i18n/chunks/ko-1.ts deleted file mode 100644 index a58e097a5..000000000 --- a/app/src/lib/i18n/chunks/ko-1.ts +++ /dev/null @@ -1,1619 +0,0 @@ -import type { TranslationMap } from '../types'; - -// Korean chunk 1/5. Source of truth for translators. -const ko1: TranslationMap = { - 'nav.home': '홈', - 'nav.human': '휴먼', - 'nav.chat': '채팅', - 'nav.connections': '연결', - 'nav.memory': '인텔리전스', - 'nav.alerts': '알림', - 'nav.rewards': '보상', - 'nav.settings': '설정', - 'common.cancel': '취소', - 'common.save': '저장', - 'common.confirm': '확인', - 'common.delete': '삭제', - 'common.edit': '편집', - 'common.create': '생성', - 'common.search': '검색', - 'common.loading': '로딩 중…', - 'common.error': '오류', - 'common.success': '성공', - 'common.back': '뒤로', - 'common.next': '다음', - 'common.finish': '완료', - 'common.close': '닫기', - 'common.enabled': '활성화됨', - 'common.disabled': '비활성화됨', - 'common.on': '켜짐', - 'common.off': '꺼짐', - 'common.yes': '예', - 'common.no': '아니요', - 'common.ok': '확인했습니다', - 'common.retry': '다시 시도', - 'common.copy': '복사', - 'common.copied': '복사됨', - 'common.learnMore': '자세히 알아보기', - 'common.seeAll': '보기', - 'common.dismiss': '닫기', - 'common.clear': '지우기', - 'common.reset': '초기화', - 'common.refresh': '새로고침', - 'common.export': '내보내기', - 'common.import': '가져오기', - 'common.upload': '업로드', - 'common.download': '다운로드', - 'common.add': '추가', - 'common.remove': '제거', - 'common.showMore': '더 보기', - 'common.showLess': '간단히 보기', - 'common.submit': '제출', - 'common.continue': '계속', - 'common.comingSoon': '출시 예정', - 'settings.general': '일반', - 'settings.featuresAndAI': '기능 및 AI', - 'settings.billingAndRewards': '결제 및 보상', - 'settings.support': '지원', - 'settings.advanced': '고급', - 'settings.dangerZone': '위험 영역', - 'settings.account': '계정', - 'settings.accountDesc': '복구 문구, 팀, 연결 및 개인정보', - 'settings.notifications': '알림', - 'settings.notificationsDesc': '방해 금지 및 계정별 알림 설정', - 'settings.notifications.tabs.preferences': '기본 설정', - 'settings.notifications.tabs.routing': '라우팅', - 'settings.features': '기능', - 'settings.featuresDesc': '화면 인식, 메시징 및 도구', - 'settings.aiModels': 'AI 및 모델', - 'settings.aiModelsDesc': '로컬 AI 모델 설정, 다운로드 및 LLM 제공업체', - 'settings.ai': 'AI 구성', - 'settings.aiDesc': '클라우드 제공업체, 로컬 Ollama 모델 및 작업별 라우팅', - 'settings.billingUsage': '결제 및 사용량', - 'settings.billingUsageDesc': '구독 플랜, 크레딧 및 결제 수단', - 'settings.rewards': '보상', - 'settings.rewardsDesc': '추천, 쿠폰 및 적립 크레딧', - 'settings.restartTour': '투어 다시 시작', - 'settings.restartTourDesc': '제품 안내를 처음부터 다시 보기', - 'settings.about': '정보', - 'settings.aboutDesc': '앱 버전 및 소프트웨어 업데이트', - 'settings.developerOptions': '고급', - 'settings.developerOptionsDesc': 'AI 구성, 메시징 채널, 도구, 진단 및 디버그 패널', - 'settings.clearAppData': '앱 데이터 삭제', - 'settings.clearAppDataDesc': '로그아웃하고 모든 로컬 앱 데이터를 영구적으로 삭제', - 'settings.logOut': '로그아웃', - 'settings.logOutDesc': '계정에서 로그아웃', - 'settings.exitLocalSession': '로컬 세션 종료', - 'settings.exitLocalSessionDesc': '로그인 화면으로 돌아가기', - 'settings.language': '언어', - 'settings.languageDesc': '앱 인터페이스 표시 언어', - 'settings.alerts': '알림', - 'settings.alertsDesc': '받은 편지함에서 최근 알림 및 활동 보기', - 'settings.account.recoveryPhrase': '복구 문구', - 'settings.account.recoveryPhraseDesc': '계정 복구 문구를 확인하고 백업합니다', - 'settings.account.team': '팀', - 'settings.account.teamDesc': '팀 구성원과 권한을 관리합니다', - 'settings.account.connections': '연결', - 'settings.account.connectionsDesc': '연결된 계정과 서비스를 관리합니다', - 'settings.account.privacy': '개인정보 보호', - 'settings.account.privacyDesc': '컴퓨터 밖으로 나가는 데이터를 제어합니다', - 'settings.notifications.doNotDisturb': '방해 금지', - 'settings.notifications.doNotDisturbDesc': '정해진 시간 동안 모든 알림을 일시 중지합니다', - 'settings.notifications.channelControls': '채널별 설정', - 'settings.notifications.channelControlsDesc': '각 채널의 알림 기본 설정을 구성합니다', - 'settings.features.screenAwareness': '화면 인식', - 'settings.features.screenAwarenessDesc': '어시스턴트가 현재 활성 창을 볼 수 있게 합니다', - 'settings.features.messaging': '메시징', - 'settings.features.messagingDesc': '채널 및 메시징 통합 설정', - 'settings.features.tools': '도구', - 'settings.features.toolsDesc': '연결된 도구와 통합을 관리합니다', - 'settings.ai.localSetup': '로컬 AI 설정', - 'settings.ai.localSetupDesc': '로컬 AI 모델을 다운로드하고 구성합니다', - 'settings.ai.llmProvider': 'LLM 제공업체', - 'settings.ai.llmProviderDesc': 'AI 제공업체를 선택하고 구성합니다', - 'clearData.title': '앱 데이터 삭제', - 'clearData.warning': '이 작업은 로그아웃하고 다음 로컬 앱 데이터를 영구적으로 삭제합니다:', - 'clearData.bulletSettings': '앱 설정 및 대화', - 'clearData.bulletCache': '모든 로컬 통합 캐시 데이터', - 'clearData.bulletWorkspace': '워크스페이스 데이터', - 'clearData.bulletOther': '기타 모든 로컬 데이터', - 'clearData.irreversible': '이 작업은 되돌릴 수 없습니다.', - 'clearData.clearing': '앱 데이터를 삭제하는 중...', - 'clearData.failed': '데이터 삭제 및 로그아웃에 실패했습니다. 다시 시도해 주세요.', - 'clearData.failedLogout': '로그아웃에 실패했습니다. 다시 시도해 주세요.', - 'clearData.failedPersist': '저장된 앱 상태를 삭제하지 못했습니다. 다시 시도해 주세요.', - 'welcome.title': 'OpenHuman에 오신 것을 환영합니다', - 'welcome.subtitle': '개인용 AI 슈퍼 인텔리전스입니다. 비공개이며, 간단하고, 매우 강력합니다.', - 'welcome.connectPrompt': 'RPC URL 구성(고급)', - 'welcome.selectRuntime': '런타임 선택', - 'welcome.urlPlaceholder': 'http://localhost:8089', - 'welcome.invalidUrl': '올바른 HTTP 또는 HTTPS URL을 입력해 주세요', - 'welcome.connecting': '테스트 중', - 'welcome.connect': '테스트', - 'home.greeting': '좋은 아침입니다', - 'home.greetingAfternoon': '좋은 오후입니다', - 'home.greetingEvening': '좋은 저녁입니다', - 'home.askAssistant': '어시스턴트에게 무엇이든 물어보세요...', - 'home.statusOk': - '기기가 연결되었습니다. 연결을 유지하려면 앱을 계속 실행해 주세요. 아래 버튼으로 에이전트에게 메시지를 보내세요.', - 'home.statusBackendOnly': - '백엔드에 다시 연결하는 중입니다… 곧 에이전트를 다시 사용할 수 있습니다.', - 'home.statusCoreUnreachable': - '로컬 코어 사이드카가 응답하지 않습니다. OpenHuman 백그라운드 프로세스가 중단되었거나 시작하지 못했을 수 있습니다.', - 'home.statusInternetOffline': - '현재 기기가 오프라인 상태입니다. 네트워크를 확인하거나 앱을 다시 시작하여 다시 연결하세요.', - 'home.restartCore': '코어 다시 시작', - 'home.restartingCore': '코어를 다시 시작하는 중…', - 'home.themeToggle.toLight': '라이트 모드로 전환', - 'home.themeToggle.toDark': '다크 모드로 전환', - 'chat.newThread': '새 스레드', - 'chat.typeMessage': '메시지를 입력하세요...', - 'chat.send': '메시지 보내기', - 'chat.thinking': '생각 중...', - 'chat.noMessages': '아직 메시지가 없습니다', - 'chat.startConversation': '대화 시작', - 'chat.regenerate': '다시 생성', - 'chat.copyResponse': '응답 복사', - 'chat.citations': '인용', - 'chat.toolUsed': '사용된 도구', - 'scope.legacy': '레거시', - 'scope.user': '사용자', - 'scope.project': '프로젝트', - 'skills.title': '연결', - 'skills.search': '연결 검색...', - 'skills.noResults': '연결을 찾을 수 없습니다', - 'skills.connect': '연결', - 'skills.disconnect': '연결 해제', - 'skills.configure': '관리', - 'skills.connected': '연결됨', - 'skills.available': '사용 가능', - 'skills.addAccount': '계정 추가', - 'skills.channels': '채널', - 'skills.integrations': '통합', - 'memory.title': '메모리', - 'memory.search': '메모리 검색...', - 'memory.noResults': '메모리를 찾을 수 없습니다', - 'memory.empty': '아직 메모리가 없습니다. 메모리는 상호작용하면서 자동으로 생성됩니다.', - 'memory.tab.memory': '메모리', - 'memory.tab.tasks': 'Agent Tasks', - 'memory.tab.tasksDescription': - 'Create and track tasks — your own to-dos plus the boards your agents build across conversations.', - 'memory.tab.subconscious': '잠재의식', - 'memory.tab.dreams': '꿈', - 'memory.tab.calls': '통화', - 'memory.tab.diagram': 'Diagram', - 'memory.tab.settings': '설정', - 'memory.analyzeNow': '지금 분석', - 'memoryTree.status.title': 'Memory Tree', - 'memoryTree.status.autoSyncLabel': 'Auto-sync', - 'memoryTree.status.autoSyncDescription': - 'Pause to stop new ingestion. Existing wiki stays queryable.', - 'memoryTree.status.statusTile': 'Status', - 'memoryTree.status.lastSyncTile': 'Last sync', - 'memoryTree.status.totalChunksTile': 'Total chunks', - 'memoryTree.status.wikiSizeTile': 'Wiki size', - 'memoryTree.status.statusRunning': 'Running', - 'memoryTree.status.statusPaused': 'Paused', - 'memoryTree.status.statusSyncing': 'Syncing', - 'memoryTree.status.statusError': 'Error', - 'memoryTree.status.statusIdle': 'Idle', - 'memoryTree.status.never': 'Never', - 'memoryTree.status.fetchError': "Couldn't fetch Memory Tree status", - 'memoryTree.status.retry': 'Retry', - 'memoryTree.status.toggleFailed': "Couldn't toggle auto-sync", - 'memoryTree.status.justNow': 'just now', - 'memoryTree.status.secondsAgo': '{count}s ago', - 'memoryTree.status.minuteAgo': '1 min ago', - 'memoryTree.status.minutesAgo': '{count} min ago', - 'memoryTree.status.hourAgo': '1 hr ago', - 'memoryTree.status.hoursAgo': '{count} hr ago', - 'memoryTree.status.dayAgo': '1 day ago', - 'memoryTree.status.daysAgo': '{count} days ago', - 'alerts.title': '알림', - 'alerts.empty': '아직 알림이 없습니다', - 'alerts.markAllRead': '모두 읽음으로 표시', - 'alerts.unread': '읽지 않음', - 'rewards.title': '보상', - 'rewards.referrals': '추천', - 'rewards.coupons': '교환', - 'rewards.credits': '크레딧', - 'rewards.referralCode': '내 추천 코드', - 'rewards.copyCode': '코드 복사', - 'rewards.share': '공유', - 'onboarding.welcome': '안녕하세요. 저는 OpenHuman입니다.', - 'onboarding.welcomeDesc': - '컴퓨터에서 실행되는 초지능 AI 어시스턴트입니다. 비공개이며, 간단하고, 매우 강력합니다.', - 'onboarding.context': '컨텍스트 수집', - 'onboarding.contextDesc': '매일 사용하는 도구와 서비스를 연결하세요.', - 'onboarding.localAI': '로컬 AI', - 'onboarding.localAIDesc': '기기에서 실행되는 로컬 AI 모델을 설정하세요.', - 'onboarding.chatProvider': '채팅 제공업체', - 'onboarding.chatProviderDesc': '어시스턴트와 상호작용할 방법을 선택하세요.', - 'onboarding.referral': '추천', - 'onboarding.referralDesc': '추천 코드가 있다면 적용하세요.', - 'onboarding.finish': '설정 완료', - 'onboarding.finishDesc': '모든 준비가 끝났습니다! OpenHuman을 사용해 보세요.', - 'onboarding.skip': '건너뛰기', - 'onboarding.getStarted': '시작하기', - 'onboarding.runtimeChoice.title': 'OpenHuman을 어떻게 실행하시겠습니까?', - 'onboarding.runtimeChoice.subtitle': - '가장 잘 맞는 설정을 선택하세요. 나중에 설정에서 변경할 수 있습니다.', - 'onboarding.runtimeChoice.cloud.title': '간단 모드', - 'onboarding.runtimeChoice.cloud.tagline': 'OpenHuman이 모든 것을 대신 관리하도록 합니다.', - 'onboarding.runtimeChoice.cloud.f1': '내장 보안', - 'onboarding.runtimeChoice.cloud.f2': '사용량을 더 오래 쓰기 위한 토큰 압축', - 'onboarding.runtimeChoice.cloud.f3': '하나의 구독으로 모든 모델 포함', - 'onboarding.runtimeChoice.cloud.f4': '관리할 API 키 없음', - 'onboarding.runtimeChoice.cloud.f5': '간단한 설정', - 'onboarding.runtimeChoice.custom.title': '사용자 지정 실행', - 'onboarding.runtimeChoice.custom.tagline': '직접 키를 가져와 사용 중인 항목을 완전히 제어합니다.', - 'onboarding.runtimeChoice.custom.f1': '거의 모든 기능에 API 키가 필요합니다', - 'onboarding.runtimeChoice.custom.f2': '이미 결제 중인 서비스를 다시 사용합니다', - 'onboarding.runtimeChoice.custom.f3': '모든 것을 로컬에서 실행하면 무료일 수 있습니다', - 'onboarding.runtimeChoice.custom.f4': '더 많은 설정과 더 많은 옵션', - 'onboarding.runtimeChoice.custom.f5': '고급 사용자와 개발자에게 가장 적합', - 'onboarding.runtimeChoice.cloud.creditHighlight': '체험용 $1 무료 크레딧', - 'onboarding.runtimeChoice.continueCloud': '간단 모드로 계속', - 'onboarding.runtimeChoice.continueCustom': '사용자 지정으로 계속', - 'onboarding.runtimeChoice.recommended': '추천', - 'onboarding.apiKeys.title': 'API 키를 추가해 봅시다', - 'onboarding.apiKeys.subtitle': - '지금 붙여넣거나 건너뛰고 나중에 설정 › AI에서 추가할 수 있습니다. 키는 이 기기에 저장되며 저장 시 암호화됩니다.', - 'onboarding.apiKeys.openaiLabel': 'OpenAI API 키', - 'onboarding.apiKeys.openaiPlaceholder': 'sk-...', - 'onboarding.apiKeys.anthropicLabel': 'Anthropic API 키', - 'onboarding.apiKeys.anthropicPlaceholder': 'sk-ant-...', - 'onboarding.apiKeys.saveError': - '해당 키를 저장할 수 없습니다. 다시 확인한 후 다시 시도해 주세요.', - 'onboarding.apiKeys.skipForNow': '지금은 건너뛰기', - 'onboarding.apiKeys.continue': '저장하고 계속', - 'onboarding.apiKeys.saving': '저장 중…', - 'onboarding.custom.stepperInference': '추론', - 'onboarding.custom.stepperVoice': '음성', - 'onboarding.custom.stepperOAuth': 'OAuth', - 'onboarding.custom.stepperSearch': '검색', - 'onboarding.custom.stepperEmbeddings': 'Embeddings', - 'onboarding.custom.stepperMemory': '메모리', - 'onboarding.custom.stepCounter': '{total}단계 중 {n}단계', - 'onboarding.custom.defaultTitle': '기본값', - 'onboarding.custom.defaultSubtitle': 'OpenHuman이 대신 관리하도록 합니다.', - 'onboarding.custom.configureTitle': '구성', - 'onboarding.custom.configureSubtitle': '사용할 항목을 직접 선택합니다.', - 'onboarding.custom.progressAriaLabel': '온보딩 진행 상황', - 'onboarding.custom.continue': '계속', - 'onboarding.custom.back': '뒤로', - 'onboarding.custom.finish': '설정 완료', - 'onboarding.custom.configureLater': - '온보딩 후에 이 설정을 마칠 수 있습니다. 완료되면 해당 설정 페이지로 이동합니다.', - 'onboarding.custom.openSettings': '설정에서 열기', - 'onboarding.custom.inference.title': '추론(텍스트)', - 'onboarding.custom.inference.subtitle': - '어떤 언어 모델이 질문에 답하고 에이전트를 실행해야 하나요?', - 'onboarding.custom.inference.defaultDesc': - 'OpenHuman은 모든 작업을 적절한 기본 모델로 라우팅합니다. 키도 필요 없고 설정도 필요 없습니다.', - 'onboarding.custom.inference.configureDesc': - '직접 OpenAI 또는 Anthropic 키를 가져오세요. 모든 텍스트 기반 작업에 이 키를 사용합니다.', - 'onboarding.custom.voice.title': '음성', - 'onboarding.custom.voice.subtitle': - '음성 모드를 위한 음성-텍스트 변환 및 텍스트-음성 변환입니다.', - 'onboarding.custom.voice.defaultDesc': - 'OpenHuman에는 바로 사용할 수 있는 관리형 STT/TTS가 포함되어 있습니다. 별도로 연결할 필요가 없습니다.', - 'onboarding.custom.voice.configureDesc': - '직접 ElevenLabs / OpenAI Whisper 등을 사용하세요. 설정 › 음성에서 구성할 수 있습니다.', - 'onboarding.custom.oauth.title': '연결(OAuth)', - 'onboarding.custom.oauth.subtitle': - 'OAuth가 필요한 Gmail, Slack, Notion 및 기타 연결 서비스입니다.', - 'onboarding.custom.oauth.defaultDesc': - 'OpenHuman은 관리형 Composio 워크스페이스를 실행합니다. 나중에 각 서비스를 한 번의 클릭으로 연결할 수 있습니다.', - 'onboarding.custom.oauth.configureDesc': - '직접 Composio 계정 또는 API 키를 가져오세요. 설정 › 연결에서 구성할 수 있습니다.', - 'onboarding.custom.search.title': '웹 검색', - 'onboarding.custom.search.subtitle': 'OpenHuman이 사용자를 대신해 웹을 검색하는 방식입니다.', - 'onboarding.custom.search.defaultDesc': - 'OpenHuman은 관리형 검색 백엔드를 사용합니다. 키가 필요 없습니다.', - 'onboarding.custom.search.configureDesc': - '직접 검색 제공업체 키(Tavily, Brave 등)를 가져오세요. 설정 › 도구에서 구성할 수 있습니다.', - 'onboarding.custom.embeddings.title': 'Embeddings', - 'onboarding.custom.embeddings.subtitle': - 'How OpenHuman generates vector embeddings for semantic memory search.', - 'onboarding.custom.embeddings.defaultDesc': - 'OpenHuman uses a managed embedding service. No API key needed.', - 'onboarding.custom.embeddings.configureDesc': - 'Bring your own embedding provider (OpenAI, Voyage, Ollama, etc.).', - 'onboarding.custom.memory.title': '메모리', - 'onboarding.custom.memory.subtitle': - 'OpenHuman이 사용자의 컨텍스트, 선호도, 이전 대화를 기억하는 방식입니다.', - 'onboarding.custom.memory.defaultDesc': - 'OpenHuman은 메모리 저장과 검색을 자동으로 관리합니다. 설정할 것이 없습니다.', - 'onboarding.custom.memory.configureDesc': - '메모리를 직접 검사, 내보내기 또는 삭제할 수 있습니다. 설정 › 메모리에서 구성할 수 있습니다.', - 'accounts.addAccount': '계정 추가', - 'accounts.manageAccounts': '계정 관리', - 'accounts.noAccounts': '연결된 계정이 없습니다', - 'accounts.connectAccount': '시작하려면 계정을 연결하세요', - 'accounts.agent': '에이전트', - 'accounts.respondQueue': '응답 대기열', - 'accounts.disconnect': '연결 해제', - 'accounts.disconnectConfirm': '이 계정의 연결을 해제하시겠습니까?', - 'accounts.disconnectClearMemory': '이 소스의 메모리도 삭제', - 'accounts.disconnectClearMemoryHint': - '이 연결과 연관된 로컬 메모리 조각을 영구적으로 삭제합니다.', - 'accounts.searchAccounts': '계정 검색...', - 'channels.title': '채널', - 'channels.configure': '채널 구성', - 'channels.setup': '설정', - 'channels.noChannels': '구성된 채널이 없습니다', - 'channels.addChannel': '채널 추가', - 'channels.status.connected': '연결됨', - 'channels.status.disconnected': '연결 해제됨', - 'channels.status.error': '오류', - 'channels.status.configuring': '구성 중', - 'channels.defaultMessaging': '기본 메시징 채널', - 'webhooks.title': '웹훅', - 'webhooks.create': '웹훅 생성', - 'webhooks.noWebhooks': '구성된 웹훅이 없습니다', - 'webhooks.url': 'URL', - 'webhooks.secret': '시크릿', - 'webhooks.events': '이벤트', - 'webhooks.archiveDirectory': '보관 디렉터리', - 'webhooks.todayFile': '오늘의 파일', - 'invites.title': '초대', - 'invites.create': '초대 생성', - 'invites.noInvites': '대기 중인 초대가 없습니다', - 'invites.code': '초대 코드', - 'invites.copyLink': '링크 복사', - 'devOptions.title': '고급', - 'devOptions.diagnostics': '진단', - 'devOptions.diagnosticsDesc': '시스템 상태, 로그 및 성능 지표', - 'devOptions.toolPolicyDiagnosticsDesc': - 'Tool inventory, policy posture, MCP allowlists, and recent blocks', - 'devOptions.toolPolicyDiagnostics.loading': 'Loading…', - 'devOptions.toolPolicyDiagnostics.unavailable': 'Diagnostics unavailable', - 'devOptions.toolPolicyDiagnostics.posture.title': 'Policy posture', - 'devOptions.toolPolicyDiagnostics.posture.autonomy': 'Autonomy:', - 'devOptions.toolPolicyDiagnostics.posture.workspaceOnly': 'Workspace only:', - 'devOptions.toolPolicyDiagnostics.posture.maxActionsPerHour': 'Max actions/hr:', - 'devOptions.toolPolicyDiagnostics.posture.approvalMediumRisk': 'Approval (medium risk):', - 'devOptions.toolPolicyDiagnostics.posture.blockHighRisk': 'Block high risk:', - 'devOptions.toolPolicyDiagnostics.inventory.title': 'Inventory', - 'devOptions.toolPolicyDiagnostics.inventory.totalTools': 'Total tools', - 'devOptions.toolPolicyDiagnostics.inventory.enabledTools': 'Enabled tools', - 'devOptions.toolPolicyDiagnostics.inventory.mcpStdioTools': 'MCP stdio tools', - 'devOptions.toolPolicyDiagnostics.inventory.jsonRpcTools': 'JSON-RPC tools', - 'devOptions.toolPolicyDiagnostics.mcpAllowlists.title': 'MCP allowlists', - 'devOptions.toolPolicyDiagnostics.mcpAllowlists.summary': - 'Enabled: {enabled} · Servers: {enabledCount}/{totalCount}', - 'devOptions.toolPolicyDiagnostics.mcpAllowlists.unnamed': '', - 'devOptions.toolPolicyDiagnostics.mcpAllowlists.allowDeny': 'allow={allowCount} deny={denyCount}', - 'devOptions.toolPolicyDiagnostics.mcpWriteAudit.title': 'MCP write audit', - 'devOptions.toolPolicyDiagnostics.mcpWriteAudit.summary': - 'Enabled: {enabled} · Recent (24h): {recentRows}', - 'devOptions.toolPolicyDiagnostics.recentBlocked.title': 'Recent blocked calls', - 'devOptions.toolPolicyDiagnostics.recentBlocked.empty': 'No blocked calls recorded.', - 'devOptions.toolPolicyDiagnostics.redactedSurfaces.title': 'Redacted surfaces', - 'devOptions.toolPolicyDiagnostics.redactedSurfaces.summary': - 'Write-capable: {writeCount} · Policy surfaces: {policyCount}', - 'devOptions.debugPanels': '디버그 패널', - 'devOptions.debugPanelsDesc': '기능 플래그, 상태 검사 및 디버깅 도구', - 'devOptions.webhooks': '웹훅', - 'devOptions.webhooksDesc': '웹훅 통합을 구성하고 테스트합니다', - 'devOptions.memoryInspection': '메모리 검사', - 'devOptions.memoryInspectionDesc': '메모리 항목을 탐색, 쿼리 및 관리합니다', - 'voice.pushToTalk': '눌러서 말하기', - 'voice.recording': '녹음 중...', - 'voice.processing': '처리 중...', - 'voice.languageHint': '언어', - 'misc.rehydrating': '데이터를 불러오는 중...', - 'misc.checkingServices': '서비스 확인 중...', - 'misc.serviceUnavailable': '서비스를 사용할 수 없음', - 'misc.somethingWentWrong': '문제가 발생했습니다', - 'misc.tryAgainLater': '나중에 다시 시도해 주세요.', - 'misc.restartApp': '앱 다시 시작', - 'misc.updateAvailable': '업데이트 사용 가능', - 'misc.updateNow': '지금 업데이트', - 'misc.updateLater': '나중에', - 'misc.downloading': '다운로드 중...', - 'misc.installing': '설치 중...', - 'misc.beta': - 'OpenHuman은 초기 베타 버전입니다. 피드백을 공유하거나 발견한 버그를 신고해 주세요 — 모든 신고는 더 빠른 출시를 돕습니다.', - 'misc.betaFeedback': '피드백 보내기', - 'mnemonic.title': '복구 문구', - 'mnemonic.warning': '이 단어들을 순서대로 적어 안전한 곳에 보관하세요.', - 'mnemonic.copyWarning': - '복구 문구를 절대 공유하지 마세요. 이 단어를 가진 사람은 누구나 계정에 접근할 수 있습니다.', - 'mnemonic.copied': '복구 문구가 클립보드에 복사되었습니다', - 'mnemonic.reveal': '문구 보기', - 'mnemonic.revealPhrase': 'Reveal recovery phrase', - 'mnemonic.hidden': '복구 문구가 숨겨져 있습니다', - 'privacy.title': '개인정보 및 보안', - 'privacy.description': '외부 서비스로 전송되는 데이터에 대한 투명성 보고서입니다.', - 'privacy.empty': '감지된 외부 데이터 전송이 없습니다.', - 'privacy.whatLeavesComputer': '내 컴퓨터를 떠나는 데이터', - 'privacy.loading': '개인정보 세부 정보를 불러오는 중...', - 'privacy.loadError': - '실시간 개인정보 목록을 불러올 수 없습니다. 아래의 분석 제어 기능은 계속 작동합니다.', - 'privacy.noCapabilities': '현재 데이터 이동을 공개하는 기능이 없습니다.', - 'privacy.sentTo': '전송 대상', - 'privacy.leavesDevice': '기기를 떠남', - 'privacy.staysLocal': '로컬에 유지됨', - 'privacy.anonymizedAnalytics': '익명화된 분석', - 'privacy.shareAnonymizedData': '익명화된 사용 데이터 공유', - 'privacy.shareAnonymizedDataDesc': - '익명 충돌 보고서와 사용 분석을 공유하여 OpenHuman 개선을 도와주세요. 모든 데이터는 완전히 익명화되며, 개인 데이터, 메시지, 지갑 키 또는 세션 정보는 절대 수집되지 않습니다.', - 'privacy.meetingFollowUps': '회의 후속 조치', - 'privacy.autoHandoffMeet': 'Google Meet transcript를 오케스트레이터에 자동 전달', - 'privacy.autoHandoffMeetDesc': - 'Google Meet 통화가 끝나면 OpenHuman의 오케스트레이터가 transcript를 읽고 메시지 초안 작성, 후속 일정 예약, 연결된 Slack 워크스페이스에 요약 게시 같은 작업을 수행할 수 있습니다. 기본값은 꺼짐입니다.', - 'privacy.analyticsDisclaimer': - '모든 분석 및 버그 보고서는 완전히 익명화됩니다. 활성화하면 충돌 정보, 기기 유형, 오류 파일 위치만 수집합니다. 메시지, 세션 데이터, 지갑 키, API 키 또는 개인 식별 정보에는 절대 접근하지 않습니다. 이 설정은 언제든지 변경할 수 있습니다.', - 'settings.about.version': '버전', - 'settings.about.updateAvailable': '사용 가능', - 'settings.about.softwareUpdates': '소프트웨어 업데이트', - 'settings.about.lastChecked': '마지막 확인', - 'settings.about.checking': '확인 중...', - 'settings.about.checkForUpdates': '업데이트 확인', - 'settings.about.releases': '릴리스', - 'settings.about.releasesDesc': 'GitHub에서 릴리스 노트와 이전 빌드를 찾아보세요.', - 'settings.about.openReleases': 'GitHub 릴리스 열기', - 'settings.ai.overview': 'AI 시스템 개요', - 'migration.title': '다른 어시스턴트에서 가져오기', - 'migration.description': - 'Migrate memory and notes from another local assistant into this workspace. Start with a Preview to see exactly what would change, then Apply to copy the data over. Your current memory is backed up first.', - 'migration.vendorLabel': '소스 공급업체', - 'migration.sourceLabel': '소스 작업공간 경로(선택 사항)', - 'migration.sourcePlaceholder': '자동 감지하려면 비워 두세요(예: ~/.openclaw/workspace)', - 'migration.sourcePlaceholderHermes': 'Leave blank to auto-detect (e.g. ~/.hermes)', - 'migration.sourceHint': - "Defaults to the vendor's standard location when blank. Set an explicit path if you've moved the workspace elsewhere.", - 'migration.previewAction': '미리 보기', - 'migration.previewRunning': '미리보기 중…', - 'migration.applyAction': '가져오기 적용', - 'migration.applyRunning': '가져오는 중…', - 'migration.applyDisclaimer': - 'Apply is unlocked after a successful Preview of the same source. Existing memory is backed up before any import.', - 'migration.reportTitlePreview': '미리 보기 — 아직 가져온 항목 없음', - 'migration.reportTitleApplied': '가져오기 완료', - 'migration.report.source': '소스 작업 영역', - 'migration.report.target': '대상 작업 영역', - 'migration.report.fromSqlite': 'SQLite(brain.db)에서', - 'migration.report.fromMarkdown': '마크다운에서', - 'migration.report.imported': '가져옴', - 'migration.report.skippedUnchanged': '건너뛰었습니다(변경되지 않음)', - 'migration.report.renamedConflicts': '충돌 시 이름이 변경됨', - 'migration.report.warnings': '경고', - 'migration.report.previewHint': - 'No data has been imported yet. Click Apply import to copy it over.', - 'migration.report.appliedHint': - 'Imported entries are now in your memory. Re-run Preview if you want to compare again.', - 'migration.confirmImport.singular': - 'Import {count} entry into the current workspace?\n\nSource: {source}\nTarget: {target}\n\nExisting memory will be backed up before the import runs.', - 'migration.confirmImport.plural': - 'Import {count} entries into the current workspace?\n\nSource: {source}\nTarget: {target}\n\nExisting memory will be backed up before the import runs.', - 'skills.integrationsSubtitle': - 'Cloud-based OAuth connections — sign in with your account and Composio brokers the tokens so agents can read and act on your behalf. No API keys to manage.', - 'skills.tabs.composio': 'Composio', - 'skills.tabs.channels': '채널', - 'skills.tabs.mcp': 'MCP 서버', - 'skills.mcpComingSoon.title': 'MCP 서버', - 'skills.mcpComingSoon.description': - 'MCP server management is coming soon. This tab will be the home for discovering, connecting, and monitoring your MCP server integrations.', - 'settings.about.connection': '연결', - 'settings.about.connectionMode': '모드', - 'settings.about.connectionModeLocal': '로컬', - 'settings.about.connectionModeCloud': '클라우드', - 'settings.about.connectionModeUnset': '선택되지 않음', - 'settings.about.serverUrl': '서버 URL', - 'settings.about.serverUrlUnavailable': '사용할 수 없음', - 'settings.about.connectionHelperLocal': - 'Spawned in-process by the Tauri shell on app launch. The port is chosen at startup, so this URL changes between launches.', - 'settings.about.connectionHelperCloud': - 'Connected to a remote core. Change this in BootCheck or the cloud mode picker.', - 'settings.heartbeat.title': '하트비트 및 루프', - 'settings.heartbeat.desc': '백그라운드 예약 흐름을 제어하고 루프 맵을 검사합니다.', - 'settings.ledgerUsage.title': '사용량 원장', - 'settings.ledgerUsage.desc': '최근 크레딧 지출, 예산 계산 및 배경 API 읽기 예산.', - 'settings.costDashboard.title': 'Cost dashboard', - 'settings.costDashboard.desc': - '7-day spend and token burn across the swarm, with budget pace and per-model breakdown.', - 'settings.costDashboard.sevenDayCost': '7-day daily cost', - 'settings.costDashboard.sevenDayTokens': '7-day token usage', - 'settings.costDashboard.totalSpend': '7-day total', - 'settings.costDashboard.monthlyPace': 'Monthly pace', - 'settings.costDashboard.budgetLimit': 'Budget limit', - 'settings.costDashboard.utilization': 'Utilisation', - 'settings.costDashboard.modelBreakdown': 'Per-model breakdown', - 'settings.costDashboard.model': 'Model', - 'settings.costDashboard.provider': 'Provider', - 'settings.costDashboard.cost': 'Cost', - 'settings.costDashboard.tokens': 'Tokens', - 'settings.costDashboard.requests': 'Requests', - 'settings.costDashboard.percentOfTotal': '% of total', - 'settings.costDashboard.inputTokens': 'Input', - 'settings.costDashboard.outputTokens': 'Output', - 'settings.costDashboard.budgetNormal': 'On track', - 'settings.costDashboard.budgetWarning': 'Warning', - 'settings.costDashboard.budgetExceeded': 'Over budget', - 'settings.costDashboard.noBudget': 'No limit set', - 'settings.costDashboard.noData': 'No cost recorded yet for the last 7 days.', - 'settings.costDashboard.noModels': 'No model activity in the last 7 days.', - 'settings.costDashboard.loading': 'Loading cost dashboard…', - 'settings.costDashboard.disabledHint': - 'Cost dashboard is disabled in config. Set [cost.dashboard] enabled = true in config.toml to re-enable.', - 'settings.costDashboard.subtitle': - 'Live spend and token burn across the swarm. Bars auto-refresh every few seconds — no page reload needed.', - 'settings.costDashboard.summaryAriaLabel': 'Cost summary metrics', - 'settings.costDashboard.lastSevenDays': 'last 7 days', - 'settings.costDashboard.utilizationOf': 'of', - 'settings.costDashboard.thisMonth': 'this month', - 'settings.costDashboard.monthlyPaceHint': - 'Projected monthly spend at the current daily run-rate (avg × 30).', - 'settings.costDashboard.budgetLimitHint': - 'Monthly budget read from cost.monthly_limit_usd in config.toml.', - 'settings.costDashboard.dailyTarget': 'Daily target', - 'settings.costDashboard.today': 'Today', - 'settings.costDashboard.todayBadge': 'TODAY', - 'settings.costDashboard.unknownProvider': '—', - 'settings.costDashboard.justNow': 'Just now', - 'settings.costDashboard.secondsAgo': '{value}s ago', - 'settings.costDashboard.minutesAgo': '{value}m ago', - 'settings.costDashboard.hoursAgo': '{value}h ago', - 'settings.costDashboard.daysAgo': '{value}d ago', - 'settings.costDashboard.updated': 'Updated', - 'settings.costDashboard.refresh': 'Refresh', - 'settings.costDashboard.utcNote': 'Days bucketed in UTC', - 'settings.costDashboard.stackedNote': 'Input + output stacked', - 'settings.costDashboard.modelBreakdownHint': 'Aggregated across the last 7 days.', - 'settings.costDashboard.noDataHint': - 'Send an agent message — token usage from the next provider call will populate the chart within ~10 seconds.', - 'settings.search.title': '검색 엔진', - 'settings.search.menuDesc': - 'Default to OpenHuman-managed search or wire up your own provider with an API key.', - 'settings.search.description': - 'Pick the search engine the agent uses. Managed uses OpenHuman’s backend (no setup). Parallel and Brave run direct from your machine using your API key.', - 'settings.search.engineAria': '검색 엔진', - 'settings.search.engineManagedLabel': 'OpenHuman 관리됨', - 'settings.search.engineManagedDesc': - 'Default. Routed through the OpenHuman backend — no API key required.', - 'settings.search.engineParallelLabel': 'Parallel', - 'settings.search.engineParallelDesc': - 'Direct Parallel API: search, extract, chat, research, enrich, dataset tools.', - 'settings.search.engineBraveLabel': 'Brave 검색', - 'settings.search.engineBraveDesc': '직접 Brave 검색 API: 웹, 뉴스, 이미지 및 비디오 도구.', - 'settings.search.engineQueritLabel': 'Querit', - 'settings.search.engineQueritDesc': - 'Direct Querit API: web search with site, time range, country, and language filters.', - 'settings.search.statusConfigured': '구성됨', - 'settings.search.statusNeedsKey': 'API 키 필요', - 'settings.search.fallbackToManaged': - 'No key configured — search will fall back to Managed until a key is saved.', - 'settings.search.getApiKey': 'API 키 가져오기', - 'settings.search.save': '저장', - 'settings.search.clear': '지우기', - 'settings.search.show': '표시', - 'settings.search.hide': '숨기기', - 'settings.search.statusSaving': '저장…', - 'settings.search.statusSaved': '저장되었습니다.', - 'settings.search.statusError': '실패', - 'settings.appearance': '모양', - 'settings.appearanceDesc': '밝은 색, 어두운 색 선택 또는 시스템 테마와 일치', - 'settings.mascot': '마스코트', - 'settings.mascotDesc': '앱 전체에서 사용되는 마스코트 색상 선택', - 'channels.authMode.managed_dm': 'OpenHuman로 로그인', - 'channels.authMode.oauth': 'OAuth 로그인', - 'channels.authMode.bot_token': '자체 봇 토큰 사용', - 'channels.authMode.api_key': '자체 API 키 사용', - 'channels.fieldRequired': '{field}이 필요합니다.', - 'channels.mcp.title': 'MCP 서버', - 'channels.mcp.description': - 'Browse and manage Model Context Protocol servers that extend the AI with new tools.', - 'settings.search.parallelKeyLabel': 'Parallel API 키', - 'settings.search.braveKeyLabel': 'Brave 검색 API 키', - 'settings.search.queritKeyLabel': 'Querit API key', - 'settings.search.placeholderStored': '•••••••(저장됨)', - 'settings.search.placeholderParallel': 'pk_...', - 'settings.search.placeholderBrave': 'BSA...', - 'settings.search.placeholderQuerit': 'Querit API key', - 'settings.embeddings.title': '임베딩', - 'settings.embeddings.description': - '시맨틱 검색을 위해 메모리를 벡터로 변환할 임베딩 제공자를 선택하세요. 제공자, 모델 또는 차원을 변경하면 저장된 벡터가 무효화되며 전체 메모리 초기화가 필요합니다.', - 'settings.embeddings.providerAria': '임베딩 제공자', - 'settings.embeddings.statusConfigured': '구성됨', - 'settings.embeddings.statusNeedsKey': 'API 키 필요', - 'settings.embeddings.apiKeyLabel': '{provider} API 키', - 'settings.embeddings.placeholderStored': '•••••••(저장됨)', - 'settings.embeddings.placeholderKey': 'API 키를 붙여넣으세요…', - 'settings.embeddings.keyStoredEncrypted': 'API 키는 이 기기에 암호화되어 저장됩니다.', - 'settings.embeddings.show': '표시', - 'settings.embeddings.hide': '숨기기', - 'settings.embeddings.save': '저장', - 'settings.embeddings.clear': '지우기', - 'settings.embeddings.model': '모델', - 'settings.embeddings.dimensions': '차원', - 'settings.embeddings.customEndpoint': '사용자 정의 엔드포인트', - 'settings.embeddings.customModelPlaceholder': '모델 이름', - 'settings.embeddings.customDimsPlaceholder': '차원', - 'settings.embeddings.applyCustom': '적용', - 'settings.embeddings.testConnection': '연결 테스트', - 'settings.embeddings.testing': '테스트 중…', - 'settings.embeddings.testSuccess': '연결됨 — {dims} 차원', - 'settings.embeddings.testFailed': '실패: {error}', - 'settings.embeddings.saving': '저장 중…', - 'settings.embeddings.saved': '저장됨.', - 'settings.embeddings.errorPrefix': '실패', - 'settings.embeddings.wipeTitle': '메모리 벡터를 초기화하시겠습니까?', - 'settings.embeddings.wipeBody': - '임베딩 제공자, 모델 또는 차원을 변경하면 저장된 모든 메모리 벡터가 삭제됩니다. 검색이 다시 작동하려면 메모리를 재구축해야 합니다. 이 작업은 취소할 수 없습니다.', - 'settings.embeddings.cancel': '취소', - 'settings.embeddings.confirmWipe': '삭제 및 적용', - 'settings.embeddings.setupTitle': '{provider} 설정', - 'settings.embeddings.saveAndSwitch': '저장 및 전환', - 'settings.embeddings.optional': '선택사항', - 'settings.embeddings.vectorSearchDisabled': - 'Vector search is disabled. Memory recall will use keyword matching and recency only — no semantic ranking.', - 'settings.embeddings.clearKey': 'API 키 삭제', - 'mcp.alphaBadge': '알파', - 'mcp.alphaBannerText': - 'MCP server support is in early alpha. The Smithery registry, install flow, and tool wiring may misbehave or change shape between releases.', - 'mcp.toolList.noTools': '사용 가능한 도구가 없습니다.', - 'mcp.setup.secretDialog.title': 'MCP 설정 - 비밀번호 입력', - 'mcp.setup.secretDialog.bodyPrefix': 'MCP 설정 에이전트에는 다음이 필요합니다.', - 'mcp.setup.secretDialog.bodySuffix': - '. Your value is sent directly to the core process and never enters the AI conversation.', - 'mcp.setup.secretDialog.inputLabel': '값', - 'mcp.setup.secretDialog.inputPlaceholder': '여기에 붙여넣으세요.', - 'mcp.setup.secretDialog.show': '보여주다', - 'mcp.setup.secretDialog.hide': '숨다', - 'mcp.setup.secretDialog.submit': '제출하다', - 'mcp.setup.secretDialog.cancel': '취소', - 'mcp.setup.secretDialog.submitting': '제출 중…', - 'mcp.setup.secretDialog.errorPrefix': '제출 실패:', - 'mcp.setup.secretDialog.privacyNote': - 'Stored encrypted in the local MCP secrets table. Never logged or sent to a model.', - 'devices.betaBadge': '베타', - 'devices.betaText': - 'This feature is currently in beta. Pair iOS phones with this OpenHuman to use them as a remote client.', - 'autonomy.title': '에이전트 자율성', - 'autonomy.maxActionsLabel': '시간당 최대 작업', - 'autonomy.maxActionsHelp': - 'Maximum tool actions an agent can run per rolling hour. New value applies to your next chat. Cron jobs and channel listeners keep their current limit until you restart OpenHuman.', - 'autonomy.statusSaving': '저장 중…', - 'autonomy.statusSaved': '저장되었습니다.', - 'autonomy.statusFailed': '실패', - 'autonomy.unlimitedNote': '무제한 — 속도 제한이 비활성화되었습니다.', - 'autonomy.invalidIntegerMsg': - 'Must be a positive integer (use the Unlimited preset for no limit).', - 'autonomy.presetUnlimited': '무제한(기본값)', - 'triggers.toggleFailed': '{trigger}에 대해 {action} 실패: {message}', - 'skills.composio.noApiKeyTitle': '아니요 Composio API 키가 구성됨', - 'skills.composio.noApiKeyDescription': - 'Local mode uses your own Composio API key. Open Settings → Advanced → Composio to add one before connecting integrations here.', - 'skills.composio.noApiKeyCta': '설정에서 열기', - 'rewards.localUnavailable': - 'Local login does not earn rewards, coupons, or referral credit. To earn rewards, log out and continue by signing in with an OpenHuman account.', - 'rewards.localUnavailableCta': '계정 설정 열기', - 'channels.localManagedUnavailable': '로컬 사용자는 관리 채널을 사용할 수 없습니다.', - 'settings.search.localManagedUnavailable': - 'OpenHuman Managed search is not available for local users. Add your own Parallel, Brave, or Querit API key to enable web search.', - 'devices.comingSoonDescription': - 'Device pairing is coming soon. This page will be the home for pairing iPhones and managing connected devices.', - 'common.breadcrumb': '이동 경로', - 'settings.betaBuild': '베타 빌드 - v{version}', - 'migration.vendor.openclaw': 'OpenClaw', - 'migration.vendor.hermes': 'Hermes Agent', - 'onboarding.apiKeys.openaiOauthHint': - 'ChatGPT Plus/Pro 구독 또는 OpenAI API 키를 사용할 수 있으며, 둘 다 필요하지는 않습니다.', - 'onboarding.apiKeys.openaiOauthOpening': '로그인 여는 중…', - 'onboarding.apiKeys.finishSignIn': 'ChatGPT 로그인 완료', - 'onboarding.apiKeys.orApiKey': '또는 API 키', - 'calls.title': '통화', - 'calls.comingSoonBody': 'AI 지원 통화가 곧 제공됩니다. 기대해 주세요.', - 'rewards.referralSection.retry': '다시 시도', - 'devOptions.sentryDisabled': '(ID 없음 — 이 빌드에서는 Sentry가 비활성화됨)', - 'home.usageExhaustedTitle': '사용 한도를 모두 소진했습니다', - 'home.usageExhaustedBody': - '현재 포함된 사용량을 모두 소진했습니다. 더 많은 지속 용량을 사용하려면 구독을 시작하세요.', - 'home.usageExhaustedCta': '구독 시작', - 'home.routinesCard': 'Your Routines', - 'home.routinesActive': '{count} active', - 'routines.title': 'Your Routines', - 'routines.subtitle': 'Things your assistant does automatically', - 'routines.loading': 'Loading routines…', - 'routines.empty': 'No routines yet', - 'routines.emptyHint': - 'Your assistant can run tasks on a schedule — like morning briefings or daily summaries.', - 'routines.refresh': 'Refresh', - 'routines.nextRun': 'Next run', - 'routines.lastRunSuccess': 'Last run succeeded', - 'routines.lastRunFailed': 'Last run failed', - 'routines.notRunYet': 'Not run yet', - 'routines.runNow': 'Run Now', - 'routines.running': 'Running…', - 'routines.viewHistory': 'View history', - 'routines.loadingHistory': 'Loading…', - 'routines.noHistory': 'No run history yet.', - 'routines.statusSuccess': 'Success', - 'routines.statusError': 'Error', - 'routines.showOutput': 'Show output', - 'routines.hideOutput': 'Hide output', - 'routines.toggleEnabled': 'Enable or disable this routine', - 'routines.typeAgent': 'Agent', - 'routines.typeCommand': 'Command', - 'nav.routines': 'Routines', - 'common.name': '이름', - 'settings.ai.disconnectProvider': '{label} 연결 끊기', - 'settings.ai.connectProviderLabel': '{label} 연결', - 'settings.ai.defaultLocalEndpoint': 'http://localhost:11434/v1', - 'settings.ai.endpointUrlLabel': '끝점 URL', - 'settings.ai.localRuntimeHelper': - 'Where {label} is reachable. Default is localhost; point this at a remote host (for example, http://10.0.0.4:11434/v1) to use a shared instance.', - 'settings.ai.endpointUrlRequired': '엔드포인트 URL이(가) 필요합니다.', - 'settings.ai.endpointProtocolRequired': 'Endpoint must start with http:// or https://.', - 'settings.ai.connectProviderDialog': '{label}에 연결', - 'settings.ai.or': '또는', - 'settings.ai.openRouterOauthDescription': - 'Sign in with OpenRouter and import a user-controlled API key using PKCE.', - 'settings.ai.connecting': '연결 중...', - 'settings.ai.backgroundLoops': '백그라운드 루프', - 'settings.ai.backgroundLoopsDesc': - 'See what runs without a chat message, pause heartbeat work, and inspect recent credit ledger rows.', - 'settings.ai.heartbeatControls': '하트비트 제어', - 'settings.ai.heartbeatControlsDesc': - 'Defaults off. Enabling starts the loop; disabling aborts the running task.', - 'settings.ai.heartbeatLoop': '하트비트 루프', - 'settings.ai.heartbeatLoopDesc': - 'Master scheduler for planner + optional subconscious inference.', - 'settings.ai.subconsciousInference': '잠재의식 추론', - 'settings.ai.subconsciousInferenceDesc': - 'Runs model-backed task/reflection evaluation on heartbeat ticks.', - 'settings.ai.calendarMeetingChecks': '캘린더 회의 확인', - 'settings.ai.calendarMeetingChecksDesc': - 'Calls calendar event list for active Google Calendar connections.', - 'settings.ai.calendarCap': '캘린더 캡', - 'settings.ai.connectionsPerTick': '{count} conn/tick', - 'settings.ai.meetingLookahead': '회의 미리보기', - 'settings.ai.minutesShort': '{count}분', - 'settings.ai.reminderLookahead': '알림 미리보기', - 'settings.ai.cronReminderChecks': '크론 알림 확인', - 'settings.ai.cronReminderChecksDesc': 'Scans enabled cron jobs for reminder-like upcoming items.', - 'settings.ai.relevantNotificationChecks': '관련 알림 확인', - 'settings.ai.relevantNotificationChecksDesc': - 'Promotes urgent local notifications into proactive alerts.', - 'settings.ai.externalDelivery': '외부 전달', - 'settings.ai.externalDeliveryDesc': - 'Lets heartbeat alerts send proactive messages to external channels.', - 'settings.ai.interval': '간격', - 'settings.ai.running': '실행 중...', - 'settings.ai.plannerTickNow': '지금 플래너 체크', - 'settings.ai.loadingHeartbeatControls': '하트비트 제어 로드 중...', - 'settings.ai.heartbeatControlsUnavailable': '하트비트 제어를 사용할 수 없습니다.', - 'settings.ai.loopMap': '루프 맵', - 'settings.ai.on': 'on', - 'settings.ai.off': 'off', - 'settings.ai.recentUsageLedger': '최근 사용량 원장', - 'settings.ai.recentUsageLedgerDesc': - 'Backend rows expose action/time today; source tags need backend support.', - 'settings.ai.openhumanDefault': 'OpenHuman(기본값)', - 'settings.ai.localModelResolved': 'Ollama · {model}', - 'settings.ai.customRoutingForWorkload': '{label}에 대한 사용자 정의 라우팅', - 'settings.ai.loadingModels': '모델 로드 중...', - 'settings.ai.enterModelIdManually': '또는 모델 ID를 수동으로 입력:', - 'settings.ai.modelIdPlaceholderForProvider': '{slug} 모델 ID', - 'settings.ai.modelIdPlaceholder': 'model-id', - 'settings.ai.selectModel': '모델 선택...', - 'settings.ai.temperatureOverride': '온도 재정의', - 'settings.ai.temperatureOverrideSlider': '온도 재정의(슬라이더)', - 'settings.ai.temperatureOverrideValue': '온도 재정의(값)', - 'settings.ai.temperatureOverrideDesc': - 'Lower = more deterministic. Leave unchecked to use the provider default.', - 'settings.ai.testFailed': '테스트 실패', - 'settings.ai.testingModel': '모델 테스트 중...', - 'settings.ai.modelResponse': '모델 응답', - 'settings.ai.providerWithValue': '공급자: {value}', - 'settings.ai.noneDash': '—', - 'settings.ai.promptHelloWorld': '프롬프트: Hello world', - 'settings.ai.startedAt': '시작됨: {value}', - 'settings.ai.waitingForModelResponse': '선택한 모델의 응답을 기다리는 중...', - 'settings.ai.response': '응답', - 'settings.ai.testing': '테스트 중...', - 'settings.ai.test': '테스트', - 'settings.ai.slugMissingError': '슬러그를 생성하려면 공급자 이름을 입력하세요.', - 'settings.ai.slugInUseError': '해당 공급자 이름이 이미 사용 중입니다.', - 'settings.ai.slugReservedError': '다른 공급자 이름을 선택하세요.', - 'settings.ai.providerNamePlaceholder': '내 공급자', - 'settings.ai.slugLabel': '슬러그:', - 'settings.ai.openAiUrlLabel': 'OpenAI URL', - 'settings.ai.openAiUrlPlaceholder': 'https://api.openai.com/v1', - 'settings.ai.keepExistingKeyPlaceholder': '기존 키를 유지하려면 비워 두세요.', - 'settings.ai.reindexingMemory': '메모리 재색인 중', - 'settings.ai.reindexingMemoryMessage': - 'Embeddings are being reprocessed. {pending} memory item(s) are being re-embedded under the current model — semantic recall is reduced until this finishes. Keyword search keeps working, and re-embedding continues in the background if you close this.', - 'settings.ai.signInWithOpenRouter': 'OpenRouter로 로그인', - 'settings.ai.weekBudget': '주 예산', - 'settings.ai.cycleRemaining': '남은 주기', - 'settings.ai.cycleTotalSpend': '주기 총 지출', - 'settings.ai.avgSpendRow': '평균 지출 행', - 'settings.ai.backgroundApiReads': 'Bg API 읽기', - 'settings.ai.backgroundWakeups': 'Bg wakeups', - 'settings.ai.budgetMath': '예산 계산', - 'settings.ai.rowsLeft': '남은 행', - 'settings.ai.rowsPerFullWeekBudget': '전체 주 예산당 행', - 'settings.ai.sampleBurnRate': '샘플 소모율', - 'settings.ai.projectedEmpty': '비어 있을 것으로 예상됨', - 'settings.ai.apiReadsPerDollarRemaining': '남은 $당 API 읽기', - 'settings.ai.loopCallBudget': '루프 호출 예산', - 'settings.ai.heartbeatTicks': '하트비트 틱', - 'settings.ai.calendarPlannerCalls': '캘린더 플래너 호출', - 'settings.ai.calendarFanoutCap': '달력 팬아웃 한도', - 'settings.ai.subconsciousModelCalls': '잠재 의식 모델 호출', - 'settings.ai.composioSyncScans': 'Composio 동기화 검색', - 'settings.ai.totalBackgroundApiReadBudget': '총 bg API 읽기 예산', - 'settings.ai.memoryWorkerPolls': '메모리 작업자 설문 조사', - 'settings.ai.defaultProviderName': 'OpenHuman', - 'settings.ai.routing.managed': '관리됨', - 'settings.ai.routing.managedDesc': - 'OpenHuman will run all inference in the cloud, choose the best model for the task, optimize for cost, and keep the safest routing defaults.', - 'settings.ai.routing.managedMsg': - 'OpenHuman will handle all inference for every workload and automatically choose the best route for cost, quality, and security.', - 'settings.ai.routing.useYourOwn': '자체 모델 사용', - 'settings.ai.routing.useYourOwnDesc': - 'Choose one provider + model and route every workload through it. This is simple, but it can be inefficient because lightweight and heavyweight inference all share the same route.', - 'settings.ai.routing.advanced': '고급', - 'settings.ai.routing.advancedDesc': - 'Pick different models for different tasks. This is the best option for tight cost optimization and the most control.', - 'settings.ai.routing.customDesc': - 'Fine-grained routing gives you the best cost optimization and the most control. Use the rows below to decide which workloads stay Managed, which use your shared default, and which pin to a specific model.', - 'settings.ai.routing.chatAndConversations': '채팅 및 대화', - 'settings.ai.routing.chatDesc': - 'Models used during direct user interaction, replies, reasoning, agent loops, and coding help.', - 'settings.ai.routing.backgroundTasks': '백그라운드 작업', - 'settings.ai.routing.bgTasksDesc': - 'Models used outside the main conversation flow for summarization, heartbeat, learning, and subconscious evaluation.', - 'settings.ai.routing.addCustomProvider': '사용자 정의 공급자 추가', - 'settings.ai.globalModel.title': '모든 것에 대해 하나의 모델을 선택합니다.', - 'settings.ai.globalModel.desc': - 'This routes all inference through one model. It is simpler, but it can be inefficient for cost and quality because lightweight and heavy tasks will all use the same route.', - 'settings.ai.globalModel.noProviders': - 'Add or connect a provider first. Then you can route every workload through one model here.', - 'settings.ai.globalModel.provider': '공급자', - 'settings.ai.globalModel.model': '모델', - 'settings.ai.globalModel.loadingModels': '모델 로드 중…', - 'settings.ai.globalModel.enterModelId': '모델 ID 입력', - 'settings.ai.globalModel.appliesToAll': - 'Applies the same provider + model to chat, reasoning, coding, memory, heartbeat, learning, and subconscious. Embeddings are configured separately. Changes save when you click save.', - 'settings.ai.globalModel.saving': '저장 중…', - 'settings.ai.globalModel.saved': '저장됨', - 'settings.ai.workload.noModel': '선택된 모델 없음', - 'settings.ai.workload.changeModel': '모델 변경', - 'settings.ai.workload.chooseModel': '모델 선택', - 'settings.ai.provider.ollama': 'Ollama', - 'kbd.ariaLabel': '키보드 단축키: {shortcut}', - 'chat.modelPlaceholder': 'gpt-4o', - 'iosPair.title': '데스크톱과 페어링', - 'iosPair.instructions': - 'Open OpenHuman on your desktop, go to Settings > Devices, and tap "Pair phone" to show the QR code.', - 'iosPair.scanQrCode': '스캔 QR code', - 'iosPair.scannerOpening': '스캐너 여는 중...', - 'iosPair.connecting': '데스크톱에 연결하는 중...', - 'iosPair.connectedLoading': '연결되었습니다! 로드 중...', - 'iosPair.expired': 'QR code이 만료되었습니다. 데스크탑에 코드 재생성을 요청하십시오.', - 'iosPair.desktopLabel': '데스크톱', - 'iosPair.retryScan': '스캔 재시도', - 'iosPair.step.openDesktop': '데스크톱에서 OpenHuman 열기', - 'iosPair.step.openSettings': '설정 > 장치로 이동', - 'iosPair.step.showQr': 'Tap "Pair phone" to show QR', - 'iosPair.error.camera': '카메라 스캔에 실패했습니다. 카메라 권한을 확인하고 다시 시도하세요.', - 'iosPair.error.invalidQr': - 'Invalid QR code. Make sure you are scanning an OpenHuman pairing code.', - 'iosPair.error.unreachableDesktop': - 'Could not reach the desktop. Make sure both devices are online and try again.', - 'iosPair.error.connectionFailed': - 'Connection failed. Make sure the desktop app is running and try again.', - 'iosMascot.defaultPairedLabel': '데스크탑', - 'iosMascot.connectedTo': '연결됨', - 'iosMascot.disconnect': '연결 끊기', - 'iosMascot.pushToTalk': '푸시하여 말하기', - 'iosMascot.thinking': '생각 중...', - 'iosMascot.typeMessage': '메시지 입력...', - 'iosMascot.sendMessage': '메시지 보내기', - 'iosMascot.error.generic': '문제가 발생했습니다. 다시 시도해 주세요.', - 'iosMascot.error.sendFailed': '전송하지 못했습니다. 연결을 확인하세요.', - 'settings.companion.title': '데스크톱 컴패니언', - 'settings.companion.session': '세션', - 'settings.companion.activeLabel': '활성', - 'settings.companion.inactiveStatus': '비활성', - 'settings.companion.stopping': '중지 중…', - 'settings.companion.stopSession': '중지 세션', - 'settings.companion.starting': '시작 중…', - 'settings.companion.startSession': '세션 시작', - 'settings.companion.sessionId': '세션 ID', - 'settings.companion.turns': '회전', - 'settings.companion.remaining': '남음', - 'settings.companion.configuration': '구성', - 'settings.companion.hotkey': '단축키', - 'settings.companion.activationMode': '활성화 모드', - 'settings.companion.sessionTtl': '세션 TTL', - 'settings.companion.screenCapture': '화면 캡처', - 'settings.companion.appContext': '앱 컨텍스트', - 'settings.composio.title': 'Composio', - 'settings.composio.apiKeyExamplePlaceholder': 'ck_live_xxxxxxxxxxxxxxxx', - 'composio.integrationSlugsHelp': '쉼표로 구분된 통합 슬러그, 예:', - 'composio.integrationSlugsExample': 'gmail, slack', - 'composio.integrationSlugsCaseInsensitive': '대소문자를 구분하지 않습니다.', - 'composio.integrationSlugsPlaceholder': 'gmail, slack, ...', - 'team.members': '구성원', - 'team.membersDesc': '팀 구성원 및 역할 관리', - 'team.invites': '초대', - 'team.invitesDesc': '초대 코드 생성 및 관리', - 'team.settings': '팀 설정', - 'team.settingsDesc': '팀 이름 및 설정 편집', - 'team.editSettings': '팀 설정 편집', - 'team.enterName': '팀 이름 입력', - 'team.saving': '저장 중...', - 'team.saveChanges': '저장 변경 사항', - 'team.delete': '팀 삭제', - 'team.deleteDesc': '이 팀을 영구적으로 삭제합니다.', - 'team.deleting': '삭제 중...', - 'team.failedToUpdate': '팀 업데이트 실패', - 'team.failedToDelete': '팀 삭제 실패', - 'team.manageTitle': '{name} 관리', - 'team.planCreated': '{plan} 계획 • {date} 생성됨', - 'team.confirmDelete': '{name}을(를) 삭제하시겠습니까?', - 'team.deleteWarning': '이 작업은 취소할 수 없습니다. 모든 팀 데이터가 영구적으로 제거됩니다.', - 'welcome.clearingAppData': '앱 데이터 삭제 중...', - 'welcome.clearAppDataAndRestart': '앱 데이터 삭제 및 다시 시작', - 'welcome.clearAppDataWarning': - 'This wipes locally stored secrets and accounts on this device. Your cloud account is unaffected - you can sign in again right after.', - 'welcome.resetErrorFallback': - 'Could not clear app data. Please quit and reopen OpenHuman, then try again.', - 'welcome.signingIn': '로그인 중...', - 'welcome.termsIntro': '계속 진행하면', - 'welcome.termsOfUse': '약관', - 'welcome.termsJoiner': '및', - 'welcome.privacyPolicy': '개인정보 보호정책에 동의하게 됩니다.', - 'welcome.termsOutro': '.', - 'chat.addReaction': '반응 추가', - 'chat.agentProfile.create': '에이전트 프로필 생성', - 'chat.agentProfile.createFailed': '에이전트 프로필을 생성할 수 없습니다.', - 'chat.agentProfile.customDescription': '사용자 지정 에이전트 프로필', - 'chat.agentProfile.defaultAgentLabel': 'Orchestrator', - 'chat.agentProfile.exists': '에이전트 프로필 "{name}"이(가) 이미 존재합니다.', - 'chat.agentProfile.label': '에이전트 프로필', - 'chat.agentProfile.namePlaceholder': '프로필 이름', - 'chat.agentProfile.promptStylePlaceholder': '프롬프트 스타일', - 'chat.agentProfile.allowedToolsPlaceholder': '허용된 도구', - 'chat.backToThread': '{title}로 돌아가기', - 'chat.parentThread': '상위 스레드', - 'chat.removeReaction': '{emoji} 제거', - 'invites.generate': '초대 생성', - 'invites.generating': '생성 중...', - 'invites.refreshing': '초대 새로 고치는 중...', - 'invites.loading': '초대 로드 중...', - 'invites.copyCodeAria': '초대 코드 복사', - 'invites.revokeAria': '초대 취소', - 'invites.usedUp': '소진됨', - 'invites.uses': '용도: {current}{max}', - 'invites.expiresOn': '{date} 만료', - 'invites.empty': '아직 초대가 없습니다.', - 'invites.emptyHint': '다른 사람과 공유할 초대 코드를 생성하세요.', - 'invites.revokeTitle': '초대 코드 취소', - 'invites.revokePromptPrefix': '정말 하시겠습니까? 초대 코드 취소', - 'invites.revokeWarning': - 'This invite code will no longer be valid and cannot be used to join the team.', - 'invites.revoking': '취소 중...', - 'invites.revokeAction': '초대 취소', - 'invites.failedGenerate': '초대 생성 실패', - 'invites.failedRevoke': '초대 취소 실패', - 'team.refreshingMembers': '멤버 새로 고치는 중...', - 'team.loadingMembers': '구성원 로드 중...', - 'team.memberCount': '{count} 구성원', - 'team.memberCountPlural': '{count} 구성원', - 'team.you': '(귀하)', - 'team.removeAria': '{name} 제거', - 'team.noMembers': '구성원을 찾을 수 없습니다.', - 'team.removeTitle': '팀 구성원 제거', - 'team.removePromptPrefix': '제거하시겠습니까?', - 'team.removePromptSuffix': '팀에서?', - 'team.removeWarning': '팀 및 모든 팀 리소스에 대한 액세스 권한을 잃게 됩니다.', - 'team.removing': '제거 중...', - 'team.removeAction': '구성원 제거', - 'team.changeRoleTitle': '구성원 역할 변경', - 'team.changeRolePrompt': "Change {name}'s role from {oldRole} to {newRole}?", - 'team.changeRoleAdminGrant': - 'This will grant them full admin permissions including the ability to manage team members.', - 'team.changeRoleAdminRemove': - 'This will remove their admin permissions and they will no longer be able to manage the team.', - 'team.changing': '변경 중...', - 'team.changeRoleAction': '역할 변경', - 'team.failedChangeRole': '역할 변경 실패', - 'team.failedRemoveMember': '구성원 제거 실패', - 'voice.failedToLoadSettings': '음성 설정 로드 실패', - 'voice.failedToSaveSettings': '음성 설정 저장 실패', - 'voice.failedToStartServer': '음성 서버 시작 실패', - 'voice.failedToStopServer': '음성 서버를 중지하지 못했습니다.', - 'voice.sttDisabledPrefix': - 'Voice dictation is disabled until the local STT model is downloaded. Use the', - 'voice.sttDisabledSuffix': '섹션을 사용하세요.', - 'voice.debug.failedToLoadVoiceDebugData': '음성 디버그 데이터를 로드하지 못했습니다.', - 'voice.debug.settingsSaved': '디버그 설정이 저장되었습니다.', - 'voice.debug.failedToSaveSettings': '음성 설정을 저장하지 못했습니다.', - 'voice.debug.runtimeStatus': '런타임 상태', - 'voice.debug.runtimeStatusDesc': - 'Live diagnostics for the voice server and speech-to-text engine.', - 'voice.debug.server': '서버', - 'voice.debug.unavailable': '사용할 수 없음', - 'voice.debug.ready': '준비됨', - 'voice.debug.notReady': '준비되지 않음', - 'voice.debug.hotkey': '단축키', - 'voice.debug.notAvailable': '해당 없음', - 'voice.debug.mode': '모드', - 'voice.debug.transcriptions': '기록', - 'voice.debug.serverError': '서버 오류', - 'voice.debug.advancedSettings': '고급 설정', - 'voice.debug.advancedSettingsDesc': - 'Low-level tuning parameters for recording and silence detection.', - 'voice.debug.minimumRecordingSeconds': '최소 녹음 시간(초)', - 'voice.debug.silenceThreshold': '무음 임계값(RMS)', - 'voice.debug.silenceThresholdDesc': - 'Recordings with energy below this are treated as silence and skipped. Lower = more sensitive.', - 'voice.providers.saved': '음성 제공업체가 저장되었습니다.', - 'voice.providers.failedToSave': '음성 제공자를 저장하지 못했습니다.', - 'voice.providers.ellipsis': '…', - 'voice.providers.installing': '설치 중', - 'voice.providers.installingBusy': '설치 중...', - 'voice.providers.reinstallLocally': '로컬로 다시 설치', - 'voice.providers.repair': '복구', - 'voice.providers.retryLocally': '로컬로 다시 시도', - 'voice.providers.installLocally': '로컬로 설치', - 'voice.providers.whisperReady': '속삭임이 준비되었습니다.', - 'voice.providers.whisperInstallStarted': 'Whisper 설치가 시작되었습니다.', - 'voice.providers.queued': '대기 중입니다.', - 'voice.providers.failedToInstallWhisper': 'Whisper를 설치하지 못했습니다.', - 'voice.providers.piperReady': 'Piper가 준비되었습니다.', - 'voice.providers.piperInstallStarted': 'Piper 설치가 시작되었습니다.', - 'voice.providers.failedToInstallPiper': 'Piper를 설치하지 못했습니다.', - 'voice.providers.title': '음성 공급자', - 'voice.providers.desc': - 'Choose where transcription and synthesis run. Use the Install locally buttons to download the binaries and models into your workspace. Local providers can be saved before the install finishes — no manual WHISPER_BIN or PIPER_BIN setup required.', - 'voice.providers.sttProvider': '음성-텍스트 공급자', - 'voice.providers.sttProviderAria': 'STT 공급자', - 'voice.providers.cloudWhisperProxy': '클라우드(속삭임 프록시)', - 'voice.providers.localWhisper': '로컬 속삭임', - 'voice.providers.installRequired': '(설치 필요)', - 'voice.providers.whisperInstalledTitle': '위스퍼가 설치되었습니다. 다시 설치하려면 클릭하세요.', - 'voice.providers.whisperDownloadTitle': - 'Download whisper.cpp and the GGML model into your workspace.', - 'voice.providers.installed': '설치됨', - 'voice.providers.installFailed': '설치 실패', - 'voice.providers.notInstalled': '설치되지 않음', - 'voice.providers.whisperModel': '귓속말 모델', - 'voice.providers.whisperModelAria': '귓속말 모델', - 'voice.providers.whisperModelTiny': '소형(39MB, 가장 빠름)', - 'voice.providers.whisperModelBase': '기본(74MB)', - 'voice.providers.whisperModelSmall': '소형(244MB)', - 'voice.providers.whisperModelMedium': '중형(769MB, 권장)', - 'voice.providers.whisperModelLargeTurbo': '대형 v3 터보(1.5GB, 최고 정확도)', - 'voice.providers.ttsProvider': '텍스트 음성 변환 제공자', - 'voice.providers.ttsProviderAria': 'TTS 제공자', - 'voice.providers.cloudElevenLabsProxy': '클라우드(ElevenLabs 프록시)', - 'voice.providers.localPiper': '로컬 Piper', - 'voice.providers.piperInstalledTitle': 'Piper가 설치되었습니다. 다시 설치하려면 클릭하세요.', - 'voice.providers.piperDownloadTitle': - 'Download Piper and the bundled en_US-lessac-medium voice into your workspace.', - 'voice.providers.piperVoice': '파이퍼 목소리', - 'voice.providers.piperVoiceAria': '파이퍼 목소리', - 'voice.providers.customVoiceOption': '기타(아래 입력)…', - 'voice.providers.customVoiceAria': '파이퍼 음성 ID(사용자 정의)', - 'voice.providers.customVoicePlaceholder': 'en_US-lessac-medium', - 'voice.providers.piperVoicesDesc': - 'Voices come from huggingface.co/rhasspy/piper-voices. Switching voices may require an Install/Reinstall click to download the new .onnx.', - 'voice.providers.mascotVoice': '마스코트 음성', - 'voice.providers.mascotVoiceDescPrefix': - 'The ElevenLabs voice the mascot uses for spoken replies is configured under', - 'voice.providers.mascotSettings': '마스코트 설정', - 'voice.providers.mascotVoiceDescSuffix': '.', - 'voice.providers.hotkeyPlaceholder': 'Fn', - 'voice.providers.piperPreset.lessacMedium': 'US · Lessac (중립, 권장)', - 'voice.providers.piperPreset.lessacHigh': 'US · Lessac (고품질, 대형)', - 'voice.providers.piperPreset.ryanMedium': 'US · Ryan (남성)', - 'voice.providers.piperPreset.amyMedium': 'US · Amy (여)', - 'voice.providers.piperPreset.librittsHigh': 'US · LibriTTS (멀티 스피커)', - 'voice.providers.piperPreset.alanMedium': 'GB · Alan (남)', - 'voice.providers.piperPreset.jennyDiocoMedium': 'GB · Jenny Dioco (여)', - 'voice.providers.piperPreset.northernEnglishMaleMedium': 'GB · 북부 영어(남성)', - 'voice.providers.chip.cloud': 'OpenHuman (Managed)', - 'voice.providers.chip.cloudAria': 'OpenHuman managed provider is always enabled', - 'voice.providers.chip.whisper': 'Whisper (Local)', - 'voice.providers.chip.enableWhisper': 'Enable local Whisper STT', - 'voice.providers.chip.disableWhisper': 'Disable local Whisper STT', - 'voice.providers.chip.piper': 'Piper (Local)', - 'voice.providers.chip.enablePiper': 'Enable local Piper TTS', - 'voice.providers.chip.disablePiper': 'Disable local Piper TTS', - 'voice.providers.chip.enableProvider': 'Enable', - 'voice.providers.chip.disableProvider': 'Disable', - 'voice.providers.chip.apiKeyLabel': 'API Key', - 'voice.providers.chip.apiKeyPlaceholder': 'sk-…', - 'voice.providers.chip.comingSoon': 'coming soon', - 'voice.modal.title': 'Configure', - 'voice.modal.desc': - 'Enter your API key to enable this provider. You can test the connection before saving.', - 'voice.modal.testKey': 'Test Key', - 'voice.modal.testing': 'Testing…', - 'voice.modal.saveAndEnable': 'Save & Enable', - 'voice.modal.enable': 'Enable', - 'voice.modal.whisperDesc': - 'Choose a model size and install the Whisper binary and GGML model into your workspace. Larger models are more accurate but slower.', - 'voice.modal.piperDesc': - 'Choose a voice and install the Piper binary and ONNX model into your workspace. Piper runs fully offline with low latency.', - 'voice.routing.title': 'Voice Routing', - 'voice.routing.desc': 'Choose which enabled providers handle speech-to-text and text-to-speech.', - 'voice.routing.save': 'Save', - 'voice.routing.testStt': 'Test STT', - 'voice.routing.testTts': 'Test TTS', - 'voice.routing.elevenlabsVoice': 'ElevenLabs Voice', - 'voice.routing.elevenlabsVoiceAria': 'ElevenLabs voice selection', - 'voice.routing.elevenlabsVoiceIdAria': 'ElevenLabs voice ID (custom)', - 'voice.routing.elevenlabsVoiceDesc': - 'Pick a curated voice or paste a custom voice ID from your ElevenLabs dashboard.', - 'voice.externalProviders.title': 'External Voice Providers', - 'voice.externalProviders.desc': - 'Connect third-party STT/TTS APIs like Deepgram, ElevenLabs, or OpenAI directly.', - 'voice.externalProviders.keySet': 'Key set', - 'voice.externalProviders.noKey': 'No API key', - 'voice.externalProviders.test': 'Test', - 'voice.externalProviders.testing': 'Testing…', - 'voice.externalProviders.remove': 'Remove', - 'voice.externalProviders.provider': 'Provider', - 'voice.externalProviders.selectProvider': 'Select a provider…', - 'voice.externalProviders.apiKey': 'API Key', - 'voice.externalProviders.apiKeyPlaceholder': 'sk-…', - 'voice.externalProviders.add': 'Add', - 'screenAwareness.debug.debugAndDiagnostics': '디버그 및 진단', - 'screenAwareness.debug.collapse': '축소', - 'screenAwareness.debug.expand': '확장', - 'screenAwareness.debug.failedToSave': '화면 인텔리전스 저장 실패', - 'screenAwareness.debug.policyTitle': '화면 인텔리전스 정책', - 'screenAwareness.debug.baselineFps': '기준 FPS', - 'screenAwareness.debug.useVisionModel': '비전 모델 사용', - 'screenAwareness.debug.useVisionModelDesc': - 'Send screenshots to a vision LLM for richer context. When off, only OCR text is used with a text LLM — faster and no vision model required.', - 'screenAwareness.debug.keepScreenshots': '스크린샷 유지', - 'screenAwareness.debug.keepScreenshotsDesc': - 'Save captured screenshots to the workspace instead of deleting after processing', - 'screenAwareness.debug.allowlist': '허용 목록(한 줄에 하나의 규칙)', - 'screenAwareness.debug.denylist': '차단 목록(한 줄에 하나의 규칙)', - 'screenAwareness.debug.saveSettings': '화면 인텔리전스 설정 저장', - 'screenAwareness.debug.sessionStats': '세션 통계', - 'screenAwareness.debug.framesEphemeral': '프레임(임시)', - 'screenAwareness.debug.panicStop': '패닉 중지', - 'screenAwareness.debug.defaultPanicHotkey': 'Cmd+Shift+.', - 'screenAwareness.debug.vision': '비전', - 'screenAwareness.debug.idle': '유휴', - 'screenAwareness.debug.visionQueue': '비전 대기열', - 'screenAwareness.debug.lastVision': '마지막 비전', - 'screenAwareness.debug.notAvailable': '해당 없음', - 'screenAwareness.debug.visionSummaries': '비전 요약', - 'screenAwareness.debug.refreshing': '새로 고침…', - 'screenAwareness.debug.noSummaries': '아직 요약이 없습니다.', - 'screenAwareness.debug.unknownApp': '알 수 없는 앱', - 'screenAwareness.debug.macosOnly': 'Screen Intelligence V1은 현재 macOS에서만 지원됩니다.', - 'memory.debugTitle': '메모리 디버그', - 'memory.documents': '문서', - 'memory.filterByNamespace': '네임스페이스로 필터링...', - 'memory.refresh': '새로고침', - 'memory.noDocumentsFound': '문서를 찾을 수 없습니다.', - 'memory.delete': '삭제', - 'memory.rawResponse': '원시 응답', - 'memory.namespaces': '네임스페이스', - 'memory.noNamespacesFound': '네임스페이스를 찾을 수 없습니다.', - 'memory.queryRecall': '쿼리 및 회수', - 'memory.namespace': '네임스페이스', - 'memory.queryText': '쿼리 텍스트...', - 'memory.defaultMaxChunks': '10', - 'memory.maxChunks': '최대 청크', - 'memory.query': '쿼리', - 'memory.recall': '리콜', - 'memory.queryLabel': '쿼리', - 'memory.recallLabel': '리콜', - 'memory.queryResult': '쿼리 결과', - 'memory.recallResult': '리콜 결과', - 'memory.clearNamespace': '네임스페이스 지우기', - 'memory.clearNamespaceDescription': '네임스페이스 내의 모든 문서를 영구적으로 삭제합니다.', - 'memory.selectNamespace': '네임스페이스 선택...', - 'memory.exampleNamespace': '예를 들어 스킬:gmail:user@example.com', - 'memory.clear': '지우기', - 'memory.deleteConfirm': '"{namespace}" 네임스페이스에서 "{documentId}" 문서를 삭제하시겠습니까?', - 'memory.clearNamespaceConfirm': - 'This will permanently delete ALL documents in namespace "{namespace}". Continue?', - 'memory.clearNamespaceSuccess': '네임스페이스 "{namespace}"이 삭제되었습니다.', - 'memory.clearNamespaceEmpty': '"{namespace}"에서 지울 항목이 없습니다.', - 'webhooks.debugTitle': '웹훅 디버그', - 'webhooks.failedToLoadDebugData': '웹훅 디버그 데이터를 로드하지 못했습니다.', - 'webhooks.clearLogsConfirm': '캡처된 웹훅 디버그 로그를 모두 삭제하시겠습니까?', - 'webhooks.failedToClearLogs': '웹훅 로그를 지우지 못했습니다.', - 'webhooks.loading': '로드 중...', - 'webhooks.refresh': '새로 고침', - 'webhooks.clearing': '지우는 중...', - 'webhooks.clearLogs': '로그 지우기', - 'webhooks.registered': '등록됨', - 'webhooks.captured': '캡처됨', - 'webhooks.live': 'live', - 'webhooks.disconnected': '연결 끊김', - 'webhooks.lastEvent': '마지막 이벤트', - 'webhooks.at': 'at', - 'webhooks.registeredWebhooks': '등록된 웹훅', - 'webhooks.noActiveRegistrations': '활성 등록이 없습니다.', - 'webhooks.resolvingBackendUrl': '백엔드 URL 해결 중…', - 'webhooks.capturedRequests': '캡처된 요청', - 'webhooks.noRequestsCaptured': '아직 캡처된 웹훅 요청이 없습니다.', - 'webhooks.unrouted': '라우팅 해제됨', - 'webhooks.pending': '보류 중', - 'webhooks.requestHeaders': '요청 헤더', - 'webhooks.queryParams': '쿼리 매개변수', - 'webhooks.requestBody': '요청 본문', - 'webhooks.responseHeaders': '응답 헤더', - 'webhooks.responseBody': '응답 본문', - 'webhooks.rawPayload': '원시 페이로드', - 'webhooks.empty': '[비어 있음]', - 'providerSetup.error.defaultDetails': '공급자 설정에 실패했습니다.', - 'providerSetup.error.providerFallback': '공급자', - 'providerSetup.error.credentialsRejected': - '{provider} rejected the credentials. Check the API key and try again.', - 'providerSetup.error.endpointNotRecognized': - '{provider} did not recognize the endpoint. Check the base URL and try again.', - 'providerSetup.error.providerUnavailable': - '{provider} is unavailable right now. Try again or check the provider status.', - 'providerSetup.error.unreachable': - 'Could not reach {provider}. Check the endpoint URL and network connection, then try again.', - 'providerSetup.error.couldNotReachWithMessage': '{provider}에 연결할 수 없습니다: {message}', - 'providerSetup.error.technicalDetails': '기술 세부 정보', - 'devices.title': '장치', - 'devices.pairIphone': 'iPhone 페어링', - 'devices.noPaired': '페어링된 장치가 없습니다.', - 'devices.emptyState': 'iPhone에서 QR code을 스캔하여 이 OpenHuman 세션에 연결하세요.', - 'devices.devicePairedTitle': '기기 페어링됨', - 'devices.devicePairedMessage': 'iPhone이 성공적으로 연결되었습니다.', - 'devices.deviceRevokedTitle': '장치가 취소되었습니다.', - 'devices.deviceRevokedMessage': '{label}이(가) 제거되었습니다.', - 'devices.revokeFailedTitle': '취소 실패', - 'devices.online': '온라인', - 'devices.offline': '오프라인', - 'devices.lastSeenNever': '없음', - 'devices.lastSeenNow': '방금', - 'devices.lastSeenMinutes': '{count}분 전', - 'devices.lastSeenHours': '{count}시간 전', - 'devices.lastSeenDays': '{count}일 전', - 'devices.revoke': '취소', - 'devices.revokeAria': '{label} 취소', - 'devices.confirmRevokeTitle': '장치를 취소하시겠습니까?', - 'devices.confirmRevokeBody': '{label} will no longer be able to connect. This cannot be undone.', - 'devices.loadFailed': '장치를 로드하지 못했습니다: {message}', - 'devices.pairModal.title': 'iPhone 페어링', - 'devices.pairModal.loading': '페어링 코드 생성 중…', - 'devices.pairModal.instructions': 'iPhone에서 OpenHuman 앱을 열고 이 코드를 스캔하세요.', - 'devices.pairModal.expiresIn': '코드는 ~{count}분 후에 만료됩니다.', - 'devices.pairModal.expiresInPlural': '코드는 ~{count}분 후에 만료됩니다.', - 'devices.pairModal.showDetails': '세부 정보 표시', - 'devices.pairModal.hideDetails': '세부 정보 숨기기', - 'devices.pairModal.channelId': '채널 ID', - 'devices.pairModal.pairingUrl': '페어링 URL', - 'devices.pairModal.expiredTitle': 'QR code 만료', - 'devices.pairModal.expiredBody': '페어링을 계속하려면 새 코드를 생성하세요.', - 'devices.pairModal.generateNewCode': '새 코드 생성', - 'devices.pairModal.successTitle': 'iPhone과 페어링됨', - 'devices.pairModal.autoClose': '자동으로 종료 중…', - 'devices.pairModal.errorPrefix': '페어링 생성 실패: {message}', - 'devices.pairModal.errorTitle': '문제가 발생했습니다.', - 'devices.pairModal.copyUrl': '복사', - 'mcp.catalog.searchAria': 'Smithery 카탈로그 검색', - 'mcp.catalog.searchPlaceholder': 'Smithery 카탈로그 검색...', - 'mcp.catalog.loadFailed': '카탈로그를 로드하지 못했습니다.', - 'mcp.catalog.noResults': '서버를 찾을 수 없습니다.', - 'mcp.catalog.noResultsFor': '"{query}"에 대한 서버를 찾을 수 없습니다.', - 'mcp.catalog.loadMore': '추가 로드', - 'mcp.configAssistant.title': '구성 도우미', - 'mcp.configAssistant.empty': '구성, 필수 환경 변수 또는 설정 단계에 대해 문의하세요.', - 'mcp.configAssistant.suggestedValues': '제안 값:', - 'mcp.configAssistant.valueHidden': '(값 숨김)', - 'mcp.configAssistant.applySuggested': '제안 값 적용', - 'mcp.configAssistant.reinstallHint': '해당 값을 적용하려면 해당 값을 다시 설치하세요.', - 'mcp.configAssistant.thinking': '생각 중...', - 'mcp.configAssistant.inputPlaceholder': '질문하기(보내려면 Enter, 줄 바꿈하려면 Shift+Enter)', - 'mcp.configAssistant.send': '보내기', - 'mcp.configAssistant.failedResponse': '응답을 받지 못했습니다.', - 'mcp.toolList.availableSingular': '{count} 도구 사용 가능', - 'mcp.toolList.availablePlural': '{count} 도구 사용 가능', - 'mcp.toolList.tryTool': 'Try', - 'mcp.toolList.tryToolAria': 'Open execution playground for {name}', - 'mcp.playground.title': 'Run {name}', - 'mcp.playground.close': 'Close playground', - 'mcp.playground.inputSchema': 'Input schema', - 'mcp.playground.argsLabel': 'Arguments (JSON)', - 'mcp.playground.argsHelp': 'Type JSON matching the input schema. Empty input is treated as {}.', - 'mcp.playground.runShortcut': '⌘/Ctrl + Enter to run', - 'mcp.playground.format': 'Format', - 'mcp.playground.invalidJson': 'Invalid JSON', - 'mcp.playground.run': 'Run tool', - 'mcp.playground.running': 'Running…', - 'mcp.playground.result': 'Result', - 'mcp.playground.resultError': 'Tool returned an error', - 'mcp.playground.copyResult': 'Copy result', - 'mcp.playground.copied': 'Copied', - 'mcp.playground.history': 'History', - 'mcp.playground.historyEmpty': 'No invocations yet in this session.', - 'mcp.playground.historyLoad': 'Load', - 'mcp.playground.unexpectedError': 'Unexpected error invoking tool.', - 'mcp.catalog.deployed': '배포됨', - 'mcp.catalog.installCount': '{count} 설치', - 'app.update.dismissNotification': '업데이트 알림 닫기', - 'bootCheck.rpcAuthSuffix': 'RPC마다.', - 'mcp.installed.title': '설치됨', - 'mcp.installed.browseCatalog': '카탈로그 찾아보기', - 'mcp.installed.empty': '아직 MCP 서버가 설치되지 않았습니다.', - 'mcp.installed.toolSingular': '{count} 도구', - 'mcp.installed.toolPlural': '{count} 도구', - 'mcp.health.title': 'Health', - 'mcp.health.summaryAria': 'MCP connection health summary', - 'mcp.health.connectedCount': '{count} connected', - 'mcp.health.connectingCount': '{count} connecting', - 'mcp.health.errorCount': '{count} error', - 'mcp.health.disconnectedCount': '{count} idle', - 'mcp.health.retryAll': 'Retry all ({count})', - 'mcp.health.retryAllAria': 'Retry all {count} errored MCP servers', - 'mcp.health.disconnectAll': 'Disconnect all ({count})', - 'mcp.health.disconnectAllAria': 'Disconnect all {count} connected MCP servers', - 'mcp.health.disconnectConfirm.title': 'Disconnect all MCP servers?', - 'mcp.health.disconnectConfirm.body': - 'This will disconnect {count} currently-connected MCP servers. Installed configurations and secrets are kept; you can reconnect any server later.', - 'mcp.health.disconnectConfirm.cancel': 'Cancel', - 'mcp.health.disconnectConfirm.confirm': 'Disconnect all', - 'mcp.health.opErrorGeneric': 'Bulk operation failed. See logs.', - 'mcp.health.bulkPartialFailure': '{failed} of {total} servers failed. See logs.', - 'mcp.installed.search.landmarkAria': 'Search installed MCP servers', - 'mcp.installed.search.inputAria': 'Filter installed MCP servers by name', - 'mcp.installed.search.placeholder': 'Filter servers…', - 'mcp.installed.search.clearAria': 'Clear filter', - 'mcp.installed.search.countMatches': '{shown} of {total} servers', - 'mcp.installed.search.noMatches': 'No servers match "{query}".', - 'mcp.inventory.openButton': 'Inventory', - 'mcp.inventory.openAria': 'Open the sharable MCP inventory panel', - 'mcp.inventory.title': 'Sharable MCP Inventory', - 'mcp.inventory.subtitle': - 'Export your installed MCP servers as a portable, secret-free manifest, or import one from a teammate. Secret env values are never included or imported.', - 'mcp.inventory.close': 'Close inventory panel', - 'mcp.inventory.tablistAria': 'Inventory sections', - 'mcp.inventory.tab.export': 'Export', - 'mcp.inventory.tab.import': 'Import', - 'mcp.inventory.export.empty': - 'No MCP servers installed yet — nothing to export. Install one from the catalog first.', - 'mcp.inventory.export.privacyTitle': 'What is in this manifest', - 'mcp.inventory.export.privacyBody': - 'Server names, qualified names, env-variable KEY NAMES, and non-secret config only. Secret values, your machine identifiers, and per-install timestamps are intentionally stripped.', - 'mcp.inventory.export.serverCount': '{count} servers in this manifest', - 'mcp.inventory.export.copy': 'Copy', - 'mcp.inventory.export.copied': 'Copied', - 'mcp.inventory.export.copyAria': 'Copy the manifest JSON to the clipboard', - 'mcp.inventory.export.download': 'Download', - 'mcp.inventory.export.downloadAria': 'Download the manifest as a JSON file', - 'mcp.inventory.import.trustTitle': 'Treat imported manifests as untrusted code', - 'mcp.inventory.import.trustBody': - 'An MCP server is a tool you grant your agent. Only import manifests from sources you trust. Each install requires your explicit click; nothing is auto-installed.', - 'mcp.inventory.import.pasteLabel': 'Paste manifest JSON', - 'mcp.inventory.import.pastePlaceholder': 'Paste a manifest here, or upload a .json file below.', - 'mcp.inventory.import.preview': 'Preview', - 'mcp.inventory.import.clear': 'Clear', - 'mcp.inventory.import.uploadFile': 'or upload a .json file', - 'mcp.inventory.import.uploadFileAria': 'Upload a manifest .json file', - 'mcp.inventory.import.fileTooLarge': 'File is too large (over 1 MB). Refusing to load.', - 'mcp.inventory.import.fileReadFailed': 'Could not read file.', - 'mcp.inventory.import.parseErrorPrefix': 'Could not parse manifest:', - 'mcp.inventory.import.previewHeading': 'Preview', - 'mcp.inventory.import.previewCounts': - '{total} servers — {newly} new, {already} already installed', - 'mcp.inventory.import.previewEmpty': 'Manifest contains no servers.', - 'mcp.inventory.import.exportedFrom': 'Exported from {exporter}', - 'mcp.inventory.import.exportedAt': 'at {when}', - 'mcp.inventory.import.statusNew': 'New', - 'mcp.inventory.import.statusAlreadyInstalled': 'Already installed', - 'mcp.inventory.import.envKeysLabel': 'Env keys', - 'mcp.inventory.import.install': 'Install', - 'mcp.inventory.import.installAria': 'Install {name} from this manifest', - 'mcp.inventory.import.skipped': 'skipped', - 'mcp.inventory.parseError.empty': 'Manifest is empty.', - 'mcp.inventory.parseError.invalidJson': 'Invalid JSON.', - 'mcp.inventory.parseError.rootNotObject': 'Manifest must be a JSON object at the root.', - 'mcp.inventory.parseError.unsupportedSchema': - 'Unsupported manifest schema — this file was not produced by a compatible exporter.', - 'mcp.inventory.parseError.missingExportedAt': 'Missing or invalid `exported_at` field.', - 'mcp.inventory.parseError.missingExportedBy': 'Missing or invalid `exported_by` field.', - 'mcp.inventory.parseError.invalidServers': 'Missing or invalid `servers` array.', - 'mcp.inventory.parseError.serverNotObject': 'A server entry is not an object.', - 'mcp.inventory.parseError.serverMissingQualifiedName': - 'A server entry is missing its qualified_name.', - 'mcp.inventory.parseError.serverMissingDisplayName': - 'A server entry is missing its display_name.', - 'mcp.inventory.parseError.serverEnvKeysNotArray': - 'A server entry has an env_keys field that is not an array of strings.', - 'mcp.inventory.parseError.serverContainsEnv': - 'A server entry contains an `env` value map. Refusing to import — manifests must only carry env_keys (names), never secret values.', - 'mcp.inventory.parseError.duplicateQualifiedName': - 'Duplicate qualified_name found in manifest. Each server must appear at most once.', - 'mcp.tab.loading': 'MCP 서버 로드 중...', - 'mcp.tab.emptyDetail': '서버를 선택하거나 카탈로그를 찾아보세요.', - 'mcp.install.loadingDetail': '서버 세부정보 로드 중...', - 'mcp.install.back': '뒤로 가기', - 'mcp.install.title': '{name} 설치', - 'mcp.install.requiredEnv': '필수 환경 변수', - 'mcp.install.enterValue': '{key} 입력', - 'mcp.install.show': '표시', - 'mcp.install.hide': '숨기기', - 'mcp.install.configLabel': '구성(선택적 JSON)', - 'mcp.install.configPlaceholder': '{"key": "value"}', - 'mcp.install.missingRequired': '"{key}"이 필요합니다.', - 'mcp.install.invalidJson': '구성 JSON이 유효한 JSON이 아닙니다.', - 'mcp.install.failedDetail': '서버 세부 정보를 로드하지 못했습니다.', - 'mcp.install.failedInstall': '설치에 실패했습니다.', - 'mcp.install.button': '설치', - 'mcp.install.installing': '설치 중...', - 'mcp.detail.suggestedEnvReady': '제안된 환경 값이 준비되었습니다.', - 'mcp.detail.suggestedEnvBody': - 'Re-install this server with the suggested values to apply them: {keys}', - 'mcp.detail.connect': '연결', - 'mcp.detail.connecting': '연결 중...', - 'mcp.detail.disconnect': '연결 끊기', - 'mcp.detail.hideAssistant': '보조 숨기기', - 'mcp.detail.helpConfigure': '구성 도와주세요', - 'mcp.detail.confirmUninstall': '제거를 확인하시겠습니까?', - 'mcp.detail.confirmUninstallAction': '예, 제거합니다.', - 'mcp.detail.uninstall': '제거', - 'mcp.detail.envVars': '환경 변수', - 'mcp.detail.tools': '도구', - 'onboarding.skipForNow': '지금 건너뛰기', - 'onboarding.localAI.continueWithCloud': '클라우드 계속하기', - 'onboarding.localAI.useLocalAnyway': '어쨌든 로컬 AI 사용(기기에 권장되지 않음)', - 'onboarding.localAI.useLocalInstead': '대신 로컬 AI 사용(지금 Ollama 연결)', - 'onboarding.localAI.setupIssue': '로컬 AI 설정에 문제가 발생했습니다.', - 'notifications.routingTitle': '알림 라우팅', - 'notifications.routing.pipelineStats': '파이프라인 통계', - 'notifications.routing.total': '합계', - 'notifications.routing.unread': '읽지 않음', - 'notifications.routing.unscored': '점수가 매겨지지 않음', - 'notifications.routing.intelligenceTitle': '알림 인텔리전스', - 'notifications.routing.intelligenceDesc': - 'Every notification from your connected accounts is scored by a local AI model. High-importance notifications are automatically routed to your orchestrator agent so nothing critical slips through.', - 'notifications.routing.howItWorks': '작동 방식', - 'notifications.routing.level.drop': '삭제', - 'notifications.routing.level.dropDesc': '소음/스팸 — 저장되었지만 표시되지 않음', - 'notifications.routing.level.acknowledge': '승인', - 'notifications.routing.level.acknowledgeDesc': '낮은 우선 순위 — 알림 센터에 표시됨', - 'notifications.routing.level.react': '반응', - 'notifications.routing.level.reactDesc': '중간 우선순위 — 집중된 에이전트 응답을 트리거합니다.', - 'notifications.routing.level.escalate': '에스컬레이션', - 'notifications.routing.level.escalateDesc': '높은 우선 순위 - 오케스트레이터 에이전트로 전달됨', - 'notifications.routing.perProvider': '공급자별 라우팅', - 'notifications.routing.threshold': '임계값', - 'notifications.routing.routeToOrchestrator': '오케스트레이터로 라우팅', - 'notifications.routing.loadSettingsError': 'Failed to load settings. Reopen this panel to retry.', - 'settings.billing.inferenceBudget.title': 'Inference Budget', - 'settings.billing.inferenceBudget.noRecurringPlanBudget': '반복 계획 예산이 없습니다.', - 'settings.billing.inferenceBudget.noRecurringWeeklyDesc': - 'Your current plan does not include a recurring weekly inference budget. Usage is paid from available credits instead.', - 'settings.billing.inferenceBudget.remainingSummary': '{remaining} / {budget} 남음', - 'settings.billing.inferenceBudget.spentThisCycle': '이번 주기에 {amount} 소비', - 'settings.billing.inferenceBudget.cycleEndsOn': '주기 종료 {date}', - 'settings.billing.inferenceBudget.exhaustedDesc': - 'Included subscription usage is exhausted. Top up credits to keep using AI without waiting for the next cycle.', - 'settings.billing.inferenceBudget.discountVsPayg': '종량제보다 통화당 {pct}% 저렴합니다.', - 'settings.billing.inferenceBudget.cycleSpend': '주기 지출', - 'settings.billing.inferenceBudget.totalAmount': '{amount} 총계', - 'settings.billing.inferenceBudget.inference': '추론', - 'settings.billing.inferenceBudget.integrations': '통합', - 'settings.billing.inferenceBudget.calls': '{count} 호출', - 'settings.billing.inferenceBudget.dailySpend': '일일 지출', - 'settings.billing.inferenceBudget.dailySpendPoint': '{date}: {amount}', - 'settings.billing.inferenceBudget.topModels': '상위 모델', - 'settings.billing.inferenceBudget.noInferenceUsage': '이번 주기에는 추론 사용량이 없습니다.', - 'settings.billing.inferenceBudget.topIntegrations': '상위 통합', - 'settings.billing.inferenceBudget.noIntegrationUsage': '이번 주기에는 통합을 사용하지 않습니다.', - 'settings.billing.inferenceBudget.unableToLoad': '사용량 데이터를 로드할 수 없습니다.', - 'settings.billing.inferenceBudget.notAvailable': '해당 사항 없음', - 'memory.sourceFilterAria': '소스별 필터링', - 'calls.comingSoonDescription': 'AI-assisted calls are coming soon. Stay tuned.', - 'vault.title': '지식 보관소', - 'vault.description': '로컬 폴더를 가리킵니다. 파일은 청크로 분할되어 메모리에 미러링됩니다.', - 'vault.add': '저장소 추가', - 'vault.added': '저장소 추가', - 'vault.createdMessage': '"{name}"을(를) 생성했습니다. 수집하려면 {sync}을 클릭하세요.', - 'vault.couldNotAdd': '볼트를 추가할 수 없습니다.', - 'vault.syncFailed': '동기화 실패', - 'vault.syncFailedFor': '"{name}"에 대한 동기화 실패', - 'vault.syncFailedFiles': '{count} 파일 실패', - 'vault.syncedTitle': '동기화됨 "{name}"', - 'vault.syncSummary': '{ingested} 수집, {unchanged} 변경, {removed}', - 'vault.syncSummaryFailed': '제거, {count}', - 'vault.syncSummarySkipped': '실패, {count}', - 'vault.syncSummaryDuration': '건너뛰었습니다. {seconds}s', - 'vault.confirmRemovePurge': - 'Remove vault "{name}"?\n\nClick OK to also purge its memory (delete all {count} ingested document(s)).\nClick Cancel to keep the documents in memory.', - 'vault.confirmRemove': '"{name}" 볼트를 제거하시겠습니까?', - 'vault.removed': 'Vault가 제거되었습니다.', - 'vault.removedPurgedMessage': '"{name}"을(를) 제거하고 해당 메모리를 삭제했습니다.', - 'vault.removedKeptMessage': '"{name}"을(를) 제거했습니다. 문서는 메모리에 보관됩니다.', - 'vault.couldNotRemove': '볼트를 제거할 수 없습니다.', - 'vault.name': '이름', - 'vault.namePlaceholder': '내 연구 노트', - 'vault.folderPath': '폴더 경로(절대)', - 'vault.folderPathPlaceholder': '/사용자/당신/문서/메모', - 'vault.excludes': '제외(쉼표로 구분된 하위 문자열, 선택 사항)', - 'vault.excludesPlaceholder': '초안/, .secret', - 'vault.creating': '생성 중…', - 'vault.create': '볼트 생성', - 'vault.loading': '볼트 로드 중…', - 'vault.failedToLoad': '볼트 로드 실패: {error}', - 'vault.empty': '아직 Vault가 없습니다. 폴더 수집을 시작하려면 위에 하나를 추가하세요.', - 'vault.fileCount': '{count} 파일', - 'vault.syncedRelative': '동기화됨 {time}', - 'vault.neverSynced': '동기화되지 않음', - 'vault.syncingProgress': '동기화 중… {ingested}/{total}', - 'vault.removing': '제거 중…', - 'vault.relative.sec': '{count}초 전', - 'vault.relative.min': '{count}분 전', - 'vault.relative.hr': '{count}시간 전', - 'vault.relative.day': '{count}일 전', - 'whatsapp.title': 'WhatsApp', - 'subconscious.interval.fiveMinutes': '5분', - 'subconscious.interval.tenMinutes': '10분', - 'subconscious.interval.fifteenMinutes': '15분', - 'subconscious.interval.thirtyMinutes': '30분', - 'subconscious.interval.oneHour': '1시간', - 'subconscious.interval.sixHours': '6시간', - 'subconscious.interval.twelveHours': '12시간', - 'subconscious.interval.oneDay': '1일', - 'subconscious.priority.critical': '심각', - 'subconscious.priority.important': '중요', - 'subconscious.priority.normal': '정상', - 'subconscious.durationSeconds': '{seconds}s', - 'subconscious.durationMilliseconds': '{milliseconds}ms', - 'settings.search.allowedSitesLabel': 'Allowed websites', - 'settings.search.allowedSitesHint': - 'Websites the assistant may open and read while researching (one host per line, e.g. reuters.com). A host also covers its subdomains. Leave empty to block all web access.', - 'settings.search.allowedSitesAllOn': - 'The assistant can open any public website. Local and private addresses stay blocked.', - 'settings.search.allowedSitesPlaceholder': 'reuters.com\napnews.com\ngithub.com', - 'settings.search.allowedSitesSave': 'Save websites', - 'settings.search.accessModeAria': 'Web access mode', - 'settings.search.accessAllowAll': 'Allow all', - 'settings.search.accessCustom': 'Custom', - 'settings.search.accessBlockAll': 'Block all', - 'settings.search.accessBlockAllHint': - 'All web access is blocked — the assistant cannot open or read any website.', - 'memory.tab.centrality': 'Centrality', - 'graphCentrality.title': 'Knowledge Graph Centrality', - 'graphCentrality.intro': - 'PageRank over your memory graph surfaces the load-bearing hubs — and the connector entities that link otherwise-separate clusters, which a raw frequency count cannot reveal.', - 'graphCentrality.loading': 'Computing centrality…', - 'graphCentrality.errorPrefix': 'Could not load the graph:', - 'graphCentrality.retry': 'Retry', - 'graphCentrality.empty': 'No knowledge graph yet.', - 'graphCentrality.emptyHint': - 'As the assistant records facts about you, the most connected entities will surface here.', - 'graphCentrality.namespaceLabel': 'Namespace', - 'graphCentrality.namespaceAll': 'All namespaces', - 'graphCentrality.metricEntities': 'Entities', - 'graphCentrality.metricConnections': 'Connections', - 'graphCentrality.metricClusters': 'Clusters', - 'graphCentrality.clustersCaption': '{components} clusters · largest holds {largest}', - 'graphCentrality.approximateBadge': 'approximate', - 'graphCentrality.approximateTitle': 'Stopped at the iteration cap before fully converging', - 'graphCentrality.rankedHeading': 'Top entities by influence', - 'graphCentrality.colRank': '#', - 'graphCentrality.colEntity': 'Entity', - 'graphCentrality.colInfluence': 'Influence', - 'graphCentrality.colLinks': 'Links', - 'graphCentrality.bridgeBadge': 'connector', - 'graphCentrality.bridgeTitle': 'Connector — more influential than its link count suggests', - 'graphCentrality.degreeTitle': '{in} in · {out} out', - 'settings.search.engineDisabledLabel': 'Disabled', - 'settings.search.engineDisabledDesc': - 'Remove search tools from the agent context and available tool list.', -}; -export default ko1; diff --git a/app/src/lib/i18n/chunks/ko-2.ts b/app/src/lib/i18n/chunks/ko-2.ts deleted file mode 100644 index c752734b1..000000000 --- a/app/src/lib/i18n/chunks/ko-2.ts +++ /dev/null @@ -1,485 +0,0 @@ -import type { TranslationMap } from '../types'; - -// Korean chunk 2/5. Source of truth for translators. -const ko2: TranslationMap = { - 'settings.ai.configStatus': '구성 상태', - 'settings.ai.fallbackMode': '대체 모드', - 'settings.ai.loadedFromRuntime': '런타임에서 로드됨', - 'settings.ai.loadingDuration': '로드 시간', - 'settings.ai.localRuntime': '로컬 모델 런타임', - 'settings.ai.openManager': '관리자 열기', - 'settings.ai.retryDownload': '다운로드 다시 시도', - 'settings.ai.state': '상태', - 'settings.ai.targetModel': '대상 모델', - 'settings.ai.download': '다운로드', - 'settings.ai.localModelUnavailable': '로컬 모델 상태를 사용할 수 없습니다.', - 'settings.ai.soulConfig': 'SOUL 페르소나 구성', - 'settings.ai.refreshing': '새로고침 중...', - 'settings.ai.refreshSoul': 'SOUL 새로고침', - 'settings.ai.loadingSoul': 'SOUL 구성을 불러오는 중...', - 'settings.ai.identity': '정체성', - 'settings.ai.personality': '성격', - 'settings.ai.safetyRules': '안전 규칙', - 'settings.ai.source': '출처', - 'settings.ai.loaded': '로드됨', - 'settings.ai.toolsConfig': 'TOOLS 구성', - 'settings.ai.refreshTools': 'TOOLS 새로고침', - 'settings.ai.toolsAvailable': '사용 가능한 도구', - 'settings.ai.tools': '도구', - 'settings.ai.activeSkills': '활성 스킬', - 'settings.ai.skills': '스킬', - 'settings.ai.skillsOverview': '스킬 개요', - 'settings.ai.refreshingAll': '모두 새로고침 중...', - 'settings.ai.refreshAll': '모든 AI 구성 새로고침', - 'settings.notifications.suppressAll': '모든 알림 억제', - 'settings.notifications.suppressAllDesc': - '포커스 상태와 관계없이 내장 앱의 모든 OS 알림 토스트를 차단합니다.', - 'settings.notifications.toggleDnd': '방해 금지 전환', - 'settings.notifications.categories': '카테고리', - 'settings.notifications.categoryFooter': - '카테고리를 비활성화하면 해당 유형의 새 알림이 알림 센터에 표시되지 않습니다. 기존 알림은 삭제될 때까지 남아 있습니다.', - 'settings.billing.movedToWeb': '결제가 웹으로 이동됨', - 'settings.billing.openDashboard': '결제 대시보드 열기', - 'settings.billing.movedToWebDesc': - '구독 변경, 결제 수단, 크레딧 및 인보이스는 이제 웹의 TinyHumans에서 관리됩니다.', - 'settings.billing.backToSettings': '설정으로 돌아가기', - 'settings.billing.openingBrowser': '브라우저를 여는 중...', - 'settings.billing.browserNotOpen': '브라우저가 열리지 않았다면 위 버튼을 사용하세요.', - 'settings.billing.browserOpenFailed': '브라우저를 자동으로 열 수 없습니다. 위 버튼을 사용하세요.', - 'settings.tools.chooseCapabilities': - 'OpenHuman이 사용자를 대신해 사용할 수 있는 기능을 선택하세요.', - 'settings.tools.saveChanges': '변경 사항 저장', - 'settings.tools.preferencesSaved': '기본 설정이 저장되었습니다', - 'settings.tools.saveFailed': '기본 설정 저장에 실패했습니다. 다시 시도하세요.', - 'settings.screenAwareness.mode': '모드', - 'settings.screenAwareness.allExceptBlacklist': '블랙리스트 제외 모두', - 'settings.screenAwareness.whitelistOnly': '화이트리스트만', - 'settings.screenAwareness.screenMonitoring': '화면 모니터링', - 'settings.screenAwareness.saveSettings': '설정 저장', - 'settings.screenAwareness.session': '세션', - 'settings.screenAwareness.status': '상태', - 'settings.screenAwareness.active': '활성', - 'settings.screenAwareness.stopped': '중지됨', - 'settings.screenAwareness.remaining': '남은 시간', - 'settings.screenAwareness.startSession': '세션 시작', - 'settings.screenAwareness.stopSession': '세션 중지', - 'settings.screenAwareness.analyzeNow': '지금 분석', - 'settings.screenAwareness.macosOnly': - '화면 인식 데스크톱 캡처 및 권한 제어는 현재 macOS에서만 지원됩니다.', - 'connections.comingSoon': '곧 제공 예정', - 'connections.setUp': '설정', - 'connections.configured': '구성됨', - 'connections.unavailable': '사용할 수 없음', - 'connections.checking': '확인 중…', - 'connections.walletConfigured': - '로컬 EVM, BTC, Solana 및 Tron ID가 복구 문구에서 구성되었습니다.', - 'connections.walletReady': '하나의 복구 문구에서 로컬 EVM, BTC, Solana 및 Tron ID를 설정합니다.', - 'connections.walletError': '지갑 상태를 확인할 수 없습니다. 복구 문구 패널에서 다시 시도하세요.', - 'connections.walletChecking': '지갑 상태 확인 중...', - 'connections.walletIdentities': '지갑 ID', - 'connections.walletDerived': '복구 문구에서 로컬로 파생되며 안전한 메타데이터로만 저장됩니다.', - 'connections.privacySecurity': '개인정보 및 보안', - 'connections.privacySecurityDesc': - '모든 데이터와 자격 증명은 무데이터 보존 정책으로 로컬에 저장됩니다. 사용자의 정보는 암호화되며 제3자와 절대 공유되지 않습니다.', - 'channels.status.connecting': '연결 중', - 'channels.status.notConfigured': '구성되지 않음', - 'channels.noActiveRoute': '활성 경로 없음', - 'channels.activeRoute': '활성 경로', - 'channels.loadingDefinitions': '채널 정의를 불러오는 중...', - 'channels.channelConnections': '채널 연결', - 'channels.configureAuthModes': '각 메시징 채널의 인증 모드를 구성합니다.', - 'channels.configNotAvailable': '구성을 사용할 수 없음:', - 'channels.channel': '채널', - 'devOptions.coreModeNotSet': '코어 모드: 설정되지 않음', - 'devOptions.coreModeNotSetDesc': - '부트 체크 선택기가 아직 확인되지 않았습니다. 선택기에서 모드 전환을 사용하여 로컬 또는 클라우드를 선택하세요.', - 'devOptions.local': '로컬', - 'devOptions.embeddedCoreSidecar': '내장 코어 사이드카', - 'devOptions.sidecarSpawned': '앱 실행 시 Tauri 셸에 의해 프로세스 내부에서 생성됩니다.', - 'devOptions.cloud': '클라우드', - 'devOptions.remoteCoreRpc': '원격 코어 RPC', - 'devOptions.token': '토큰', - 'devOptions.tokenNotSet': '설정되지 않음 — RPC가 401을 반환합니다', - 'devOptions.triggerSentryTest': 'Sentry 테스트 트리거(스테이징)', - 'devOptions.triggerSentryTestDesc': - 'Sentry 파이프라인을 확인하기 위해 태그가 지정된 오류를 발생시킵니다. 이슈 #1072 — 확인 후 제거.', - 'devOptions.sendTestEvent': '테스트 이벤트 보내기', - 'devOptions.sending': '보내는 중…', - 'devOptions.eventSent': '이벤트 전송됨', - 'devOptions.failed': '실패', - 'devOptions.appLogs': '앱 로그', - 'devOptions.appLogsDesc': - '일별 롤링 로그 파일이 들어 있는 폴더를 엽니다. 문제를 보고할 때 가장 최근 파일을 첨부하세요.', - 'devOptions.openLogsFolder': '로그 폴더 열기', - 'mnemonic.phraseSaved': '복구 문구 저장됨', - 'mnemonic.walletReady': '멀티체인 지갑 ID가 준비되었습니다. 설정으로 돌아가는 중...', - 'mnemonic.writeDownWords': '다음 단어들을 적어 두세요', - 'mnemonic.wordsInOrder': - '단어를 순서대로 적어 안전한 곳에 보관하세요. 이 문구는 로컬 암호화 키와 EVM, BTC, Solana 및 Tron 지갑 ID를 보호합니다.', - 'mnemonic.cannotRecover': - '이 문구는 분실하면 복구할 수 없으며 기기에서만 완전히 로컬로 유지되어야 합니다.', - 'mnemonic.copyToClipboard': '클립보드에 복사', - 'mnemonic.alreadyHavePhrase': '이미 복구 문구가 있습니다', - 'mnemonic.consentSaved': '이 문구를 저장했으며 로컬 지갑 설정에 사용하는 데 동의합니다', - 'mnemonic.enterPhraseToRestore': - '로컬 지갑 ID를 복원하려면 아래에 복구 문구를 입력하거나 전체 문구를 아무 입력란에 붙여넣으세요(새 백업은 12단어, 이전 버전의 24단어 문구도 작동합니다).', - 'mnemonic.words': '단어', - 'mnemonic.validPhrase': '유효한 복구 문구', - 'mnemonic.generateNewPhrase': '대신 새 복구 문구 생성', - 'mnemonic.securingData': '데이터 보호 중...', - 'mnemonic.saveRecoveryPhrase': '복구 문구 저장', - 'mnemonic.userNotLoaded': - '사용자가 로드되지 않았습니다. 다시 로그인하거나 페이지를 새로고침하세요.', - 'mnemonic.invalidPhrase': '유효하지 않은 복구 문구입니다. 단어를 확인하고 다시 시도하세요.', - 'mnemonic.somethingWentWrong': '문제가 발생했습니다. 다시 시도해 주세요.', - 'team.failedToCreate': '팀 생성에 실패했습니다', - 'team.invalidInviteCode': '유효하지 않거나 만료된 초대 코드입니다', - 'team.failedToSwitch': '팀 전환에 실패했습니다', - 'team.failedToLeave': '팀 나가기에 실패했습니다', - 'team.role.owner': '소유자', - 'team.role.admin': '관리자', - 'team.role.billingManager': '결제 관리자', - 'team.role.member': '멤버', - 'team.active': '활성', - 'team.personalTeam': '개인 팀', - 'team.manageTeam': '팀 관리', - 'team.switching': '전환 중...', - 'team.switch': '전환', - 'team.leaving': '나가는 중...', - 'team.leave': '나가기', - 'team.yourTeams': '내 팀', - 'team.createNewTeam': '새 팀 생성', - 'team.teamName': '팀 이름', - 'team.creating': '생성 중...', - 'team.joinExistingTeam': '기존 팀 참가', - 'team.inviteCode': '초대 코드', - 'team.joining': '참가 중...', - 'team.join': '참가', - 'team.leaveTeam': '팀 나가기', - 'team.confirmLeave': '정말로 나가시겠습니까', - 'team.leaveWarning': - '팀과 모든 팀 리소스에 대한 접근 권한을 잃게 됩니다. 다시 참가하려면 새 초대가 필요합니다.', - 'team.management': '팀 관리', - 'team.notFound': '팀을 찾을 수 없습니다', - 'team.accessDenied': '접근이 거부되었습니다', - 'team.members': '멤버', - 'voice.title': '음성 받아쓰기', - 'voice.settings': '음성 설정', - 'voice.settingsDesc': '핫키를 길게 눌러 받아쓰기하고 활성 입력란에 텍스트를 삽입합니다.', - 'voice.hotkey': '핫키', - 'voice.activationMode': '활성화 모드', - 'voice.tapToToggle': '탭하여 전환', - 'voice.writingStyle': '작성 스타일', - 'voice.verbatimTranscription': '그대로 전사', - 'voice.naturalCleanup': '자연스럽게 정리', - 'voice.autoStart': '코어와 함께 음성 서버 자동 시작', - 'voice.customDictionary': '사용자 지정 사전', - 'voice.customDictionaryDesc': '이름, 기술 용어, 도메인 단어를 추가하여 인식 정확도를 향상합니다.', - 'voice.addWord': '단어 추가...', - 'voice.sttDisabled': '로컬 STT 모델이 다운로드되고 준비될 때까지 음성 받아쓰기가 비활성화됩니다.', - 'voice.openLocalAiModel': '로컬 AI 모델 열기', - 'voice.serverRestarted': '새 설정으로 음성 서버가 다시 시작되었습니다.', - 'voice.settingsSaved': '음성 설정이 저장되었습니다.', - 'voice.serverStarted': '음성 서버가 시작되었습니다.', - 'voice.serverStopped': '음성 서버가 중지되었습니다.', - 'voice.saveVoiceSettings': '음성 설정 저장', - 'voice.startVoiceServer': '음성 서버 시작', - 'voice.stopVoiceServer': '음성 서버 중지', - 'voice.debugTitle': '음성 디버그', - 'autocomplete.title': '자동 완성', - 'autocomplete.settings': '설정', - 'autocomplete.acceptWithTab': 'Tab으로 수락', - 'autocomplete.stylePreset': '스타일 프리셋', - 'autocomplete.style.balanced': '균형', - 'autocomplete.style.concise': '간결', - 'autocomplete.style.formal': '격식', - 'autocomplete.style.casual': '캐주얼', - 'autocomplete.style.custom': '사용자 지정', - 'autocomplete.disabledApps': '비활성화된 앱(줄마다 하나의 번들/앱 토큰)', - 'autocomplete.saveSettings': '설정 저장', - 'autocomplete.saving': '저장 중…', - 'autocomplete.runtime': '런타임', - 'autocomplete.running': '실행 중', - 'autocomplete.start': '시작', - 'autocomplete.stop': '중지', - 'autocomplete.settingsSaved': '자동 완성 설정이 저장되었습니다.', - 'autocomplete.started': '자동 완성이 시작되었습니다.', - 'autocomplete.didNotStart': '자동 완성이 시작되지 않았습니다. 활성화되어 있는지 확인하세요.', - 'autocomplete.stopped': '자동 완성이 중지되었습니다.', - 'autocomplete.advancedSettings': '고급 설정', - 'autocomplete.debugTitle': '자동 완성 디버그', - 'chat.agentChat': '에이전트 채팅', - 'chat.overrides': '재정의', - 'chat.model': '모델', - 'chat.temperature': '온도', - 'chat.conversation': '대화', - 'chat.startAgentConversation': '에이전트와 대화를 시작하세요.', - 'chat.you': '나', - 'chat.agent': '에이전트', - 'chat.askAgent': '에이전트에게 무엇이든 물어보세요...', - 'chat.sendMessage': '메시지 보내기', - 'composio.triageTitle': '통합 트리거', - 'composio.triageDesc': - '활성화되면 들어오는 각 Composio 트리거가 이벤트를 분류하고 자동 작업을 시작할 수 있는 AI 선별 단계를 거칩니다 — 트리거당 로컬 LLM 턴 하나가 사용됩니다. 수동 검토를 선호한다면 전체 또는 통합별로 비활성화하세요. 환경 변수가', - 'composio.disableAllTriage': '모든 트리거에 대한 AI 선별 비활성화', - 'composio.triggersStillRecorded': '트리거는 기록에 계속 저장됩니다 — LLM 턴은 실행되지 않습니다.', - 'composio.disableSpecificIntegrations': '특정 통합에 대한 AI 선별 비활성화', - 'composio.settingsSaved': '설정이 저장되었습니다', - 'composio.saveFailed': '저장에 실패했습니다. 다시 시도하세요.', - 'cron.title': 'Cron 작업', - 'cron.scheduledJobs': '예약된 작업', - 'cron.manageCronJobs': '코어 스케줄러에서 cron 작업을 관리합니다.', - 'cron.refreshCronJobs': 'Cron 작업 새로고침', - 'localModel.modelStatus': '모델 상태', - 'localModel.downloadModels': '모델 다운로드', - 'localModel.usage': '사용량', - 'localModel.usageDesc': - '로컬 모델에서 실행할 하위 시스템을 선택하세요. 꺼진 항목은 클라우드를 사용합니다.', - 'localModel.enableRuntime': '로컬 AI 런타임 활성화', - 'localModel.enableRuntimeDesc': - '마스터 스위치입니다. 기본값은 꺼짐이며 Ollama는 유휴 상태로 유지됩니다. 켜면 트리 요약기, 화면 인텔리전스, 자동 완성이 항상 로컬 모델을 사용합니다.', - 'localModel.advancedSettings': '고급 설정', - 'localModel.debugTitle': '로컬 모델 디버그', - 'screenAwareness.debugTitle': '화면 인식 디버그', - 'memory.debugTitle': '메모리 디버그', - 'webhooks.debugTitle': '웹훅 디버그', - 'notifications.routingTitle': '알림 라우팅', - 'common.reload': '다시 불러오기', - 'common.skip': '건너뛰기', - 'common.disable': '비활성화', - 'common.enable': '활성화', - 'chat.safetyTimeout': '2분 후에도 에이전트의 응답이 없습니다. 다시 시도하거나 연결을 확인하세요.', - 'chat.filter.all': '전체', - 'chat.filter.work': '업무', - 'chat.filter.briefing': '브리핑', - 'chat.filter.notification': '알림', - 'chat.filter.workers': '워커', - 'chat.selectThread': '스레드 선택', - 'chat.threads': '스레드', - 'chat.noThreads': '아직 스레드가 없습니다', - 'chat.noLabelThreads': '"{label}" 스레드가 없습니다', - 'chat.noWorkerThreads': '아직 워커 스레드가 없습니다', - 'chat.deleteThread': '스레드 삭제', - 'chat.deleteThreadConfirm': '"{title}" 스레드를 삭제하시겠습니까?', - 'chat.untitledThread': '제목 없는 스레드', - 'chat.editThreadTitle': 'Edit thread title', - 'chat.hideSidebar': '사이드바 숨기기', - 'chat.showSidebar': '사이드바 표시', - 'chat.newThreadShortcut': '새 스레드 (/new)', - 'chat.new': '새로 만들기', - 'chat.failedToLoadMessages': '메시지를 불러오지 못했습니다', - 'chat.thinkingIteration': '생각 중... ({n})', - 'chat.thinkingDots': '생각 중...', - 'chat.approachingLimit': '사용 한도에 가까워지고 있습니다', - 'chat.approachingLimitMsg': '사용 가능한 할당량의 {pct}%를 사용했습니다.', - 'chat.upgrade': '업그레이드', - 'chat.weeklyLimitHit': '포함된 주기 예산을 모두 사용했습니다.', - 'chat.resets': '초기화', - 'chat.topUpToContinue': '계속하려면 충전하세요.', - 'chat.budgetComplete': - '포함된 예산을 모두 사용했습니다. 계속하려면 크레딧을 추가하거나 업그레이드하세요.', - 'chat.topUp': '충전', - 'chat.cycle': '주기', - 'chat.cycleSpent': '이번 주기 사용량', - 'chat.cycleRemaining': '남은 양', - 'chat.left': '남음', - 'chat.setup': '설정', - 'chat.switchToText': '텍스트로 전환', - 'chat.transcribing': '전사 중...', - 'chat.stopAndSend': '중지하고 보내기', - 'chat.startTalking': '말하기 시작', - 'chat.playingVoiceReply': '음성 응답 재생 중', - 'chat.voiceHint': '마이크를 사용해 말하세요', - 'chat.micUnavailable': '마이크를 사용할 수 없습니다', - 'chat.turn': '턴', - 'chat.turns': '턴', - 'chat.openWorkerThread': '워커 스레드 열기', - 'chat.attachment.attach': '이미지 첨부', - 'chat.attachment.remove': '{name} 제거', - 'chat.attachment.tooMany': '메시지당 최대 {max}개 이미지', - 'chat.attachment.tooLarge': '이미지가 {max} 크기 제한을 초과합니다', - 'chat.attachment.unsupportedType': - '지원되지 않는 파일 형식입니다. PNG, JPEG, WebP, GIF 또는 BMP를 사용하세요.', - 'chat.attachment.readFailed': '파일을 읽을 수 없습니다', - 'memory.searchAria': '메모리 검색', - 'memory.searchPlaceholder': '메모리 항목 검색...', - 'memory.sourceFilter.all': '모든 소스', - 'memory.sourceFilter.email': '이메일', - 'memory.sourceFilter.calendar': '캘린더', - 'memory.sourceFilter.telegram': 'Telegram', - 'memory.sourceFilter.aiInsight': 'AI 인사이트', - 'memory.sourceFilter.system': '시스템', - 'memory.sourceFilter.trading': '거래', - 'memory.sourceFilter.security': '보안', - 'memory.ingestionActivity': '수집 활동', - 'memory.events': '이벤트', - 'memory.event': '이벤트', - 'memory.overTheLast': '지난 기간', - 'memory.months': '개월', - 'memory.peak': '최고치', - 'memory.perDay': '/일', - 'memory.less': '적음', - 'memory.more': '많음', - 'memory.on': '켜짐', - 'memory.loading': '메모리 불러오는 중', - 'memory.fetching': '메모리 항목을 가져오는 중...', - 'memory.analyzing': '메모리 분석 중', - 'memory.analyzingHint': '인사이트를 추출하기 위해 메모리를 처리하는 중...', - 'memory.noMatches': '일치하는 항목 없음', - 'memory.noMatchesHint': '검색어 또는 필터를 변경해 보세요.', - 'memory.allCaughtUp': '모두 완료됨', - 'memory.allCaughtUpHint': '처리할 새 메모리 항목이 없습니다.', - 'memory.noAnalysis': '아직 분석 없음', - 'memory.noAnalysisHint': '메모리에서 패턴을 발견하려면 분석을 실행하세요.', - 'memory.emptyHint': '첫 번째 메모리를 만들려면 상호작용을 시작하세요.', - 'mic.unavailable': '마이크를 사용할 수 없습니다', - 'mic.permissionDenied': '마이크 권한이 거부되었습니다', - 'mic.failedToStartRecorder': '녹음기를 시작하지 못했습니다', - 'mic.transcribing': '전사 중...', - 'mic.tapToSend': '탭하여 보내기', - 'mic.waitingForAgent': '에이전트를 기다리는 중...', - 'mic.tapAndSpeak': '탭하고 말하기', - 'mic.stopRecording': '녹음을 중지하고 보내기', - 'mic.startRecording': '녹음 시작', - 'token.usageLimitReached': '사용 한도에 도달했습니다', - 'token.approachingLimit': '한도에 가까워지고 있습니다', - 'token.planClickForDetails': '플랜 - 자세한 내용을 보려면 클릭', - 'token.sessionTokens': '입력: {in} | 출력: {out} | 턴: {turns}', - 'token.limit': '한도 도달', - 'catalog.noCapabilityBinding': '기능 바인딩 없음', - 'catalog.downloadFailed': '다운로드 실패', - 'catalog.active': '활성', - 'catalog.installed': '설치됨', - 'catalog.notDownloaded': '다운로드되지 않음', - 'catalog.inUse': '사용 중', - 'catalog.use': '사용', - 'catalog.deleteModel': '모델 삭제', - 'catalog.download': '다운로드', - 'navigator.recent': '최근', - 'navigator.today': '오늘', - 'navigator.thisWeek': '이번 주', - 'navigator.sources': '소스', - 'navigator.email': '이메일', - 'navigator.slack': 'Slack', - 'navigator.chat': '채팅', - 'navigator.documents': '문서', - 'navigator.people': '사람', - 'navigator.topics': '주제', - 'dreams.description': '꿈은 메모리의 패턴을 종합하는 AI 생성 반영입니다.', - 'dreams.comingSoon': '곧 제공 예정', - 'assignment.memoryLlm': '메모리 LLM', - 'assignment.memoryLlmAria': '메모리 LLM 선택', - 'assignment.embedder': '임베더', - 'assignment.loaded': '로드됨', - 'assignment.notDownloaded': '다운로드되지 않음', - 'assignment.usedForExtractSummarise': '추출 및 요약에 사용됨', - 'insights.knownFacts': '알려진 사실', - 'insights.preferences': '선호도', - 'insights.relationships': '관계', - 'insights.skills': '스킬', - 'insights.opinions': '의견', - 'localModel.ollamaServer.helperText': '예: http://192.168.1.5:11434', - 'localModel.ollamaServer.label': 'Ollama 서버 URL', - 'localModel.ollamaServer.modelCount': '모델', - 'localModel.ollamaServer.placeholder': 'http://localhost:11434', - 'localModel.ollamaServer.reachable': '연결 가능', - 'localModel.ollamaServer.resetButton': '기본값으로 재설정', - 'localModel.ollamaServer.saveButton': '저장', - 'localModel.ollamaServer.testButton': '테스트 연결', - 'localModel.ollamaServer.unreachable': '연결할 수 없음', - 'localModel.ollamaServer.validationError': '유효한 http:// 또는 https:// URL이어야 합니다.', - 'mic.deviceSelector': '마이크 장치', - 'mic.tapToSendCountdown': '탭하여 보내기 ({seconds}초)', - 'devOptions.menuAi': 'AI 구성', - 'devOptions.menuAiDesc': '클라우드 공급자, 로컬 Ollama 모델 및 워크로드별 라우팅', - 'devOptions.menuScreenAware': '화면 인식', - 'devOptions.menuScreenAwareDesc': '화면 캡처 권한, 모니터링 정책 및 세션 제어', - 'devOptions.menuMessaging': '메시징 채널', - 'devOptions.menuMessagingDesc': 'Telegram/Discord 인증 모드 및 기본 채널 라우팅 구성', - 'devOptions.menuTools': '도구', - 'devOptions.menuToolsDesc': - 'OpenHuman이(가) 사용자를 대신하여 사용할 수 있는 기능 활성화 또는 비활성화', - 'devOptions.menuAgentChat': '에이전트 채팅', - 'devOptions.menuAgentChatDesc': '모델 및 온도 재정의를 사용한 테스트 에이전트 대화', - 'devOptions.menuCronJobs': '크론 작업', - 'devOptions.menuCronJobsDesc': '런타임 기술에 대해 예약된 작업 보기 및 구성', - 'devOptions.menuLocalModelDebug': '로컬 모델 디버그', - 'devOptions.menuLocalModelDebugDesc': 'Ollama 구성, 자산 다운로드, 모델 테스트 및 진단', - 'devOptions.menuWebhooksDebug': '웹후크', - 'devOptions.menuWebhooksDebugDesc': '런타임 웹후크 등록 및 캡처된 요청 로그 검사', - 'devOptions.menuIntelligence': '인텔리전스', - 'devOptions.menuIntelligenceDesc': '메모리 작업 공간, 잠재의식 엔진, 드림 및 설정', - 'devOptions.menuNotificationRouting': '알림 라우팅', - 'devOptions.menuNotificationRoutingDesc': - '통합 경고에 대한 AI 중요도 점수 및 오케스트레이터 에스컬레이션', - 'devOptions.menuComposeIOTriggers': 'ComposeIO 트리거', - 'devOptions.menuComposeIOTriggersDesc': 'ComposeIO 트리거 기록 및 아카이브 보기', - 'devOptions.menuComposioRouting': 'Composio 라우팅(직접 모드)', - 'devOptions.menuComposioRoutingDesc': - '자체 Composio API 키를 가져와 호출을 backend.composio.dev로 직접 라우팅', - 'devOptions.menuComposioTriggers': '통합 트리거', - 'devOptions.menuComposioTriggersDesc': 'Composio 통합 트리거에 대한 AI 심사 설정 구성', - 'settings.agents.title': 'Agents', - 'settings.agents.subtitle': - 'Manage the agents available for delegation — built-in defaults and your own custom agents.', - 'settings.agents.menuDesc': 'Manage built-in and custom agents', - 'settings.agents.newAgent': 'New agent', - 'settings.agents.loadError': "Couldn't load agents", - 'settings.agents.empty': 'No agents yet', - 'settings.agents.sourceDefault': 'Built-in', - 'settings.agents.sourceCustom': 'Custom', - 'settings.agents.enable': 'Enable agent', - 'settings.agents.disable': 'Disable agent', - 'settings.agents.edit': 'Edit', - 'settings.agents.delete': 'Delete', - 'settings.agents.reset': 'Reset to default', - 'settings.agents.modelLabel': 'Model', - 'settings.agents.toolsLabel': 'Tools', - 'settings.agents.toolsAll': 'All tools', - 'settings.agents.toolsCount': '{count} tools', - 'settings.agents.actionFailed': "Couldn't update the agent", - 'settings.agents.orchestratorLocked': 'The orchestrator is always enabled.', - 'settings.agents.editor.createTitle': 'New agent', - 'settings.agents.editor.editTitle': 'Edit agent', - 'settings.agents.editor.id': 'ID', - 'settings.agents.editor.idHint': 'Lowercase letters, numbers, _ and - only.', - 'settings.agents.editor.name': 'Name', - 'settings.agents.editor.description': 'Description', - 'settings.agents.editor.model': 'Model (optional)', - 'settings.agents.editor.modelPlaceholder': 'e.g. inherit, hint:fast, or a model id', - 'settings.agents.editor.systemPrompt': 'System prompt (optional)', - 'settings.agents.editor.tools': 'Allowed tools', - 'settings.agents.editor.toolsHint': 'One tool name per line. Use * for all tools.', - 'settings.agents.editor.defaultsNote': - 'Editing a built-in agent saves an override you can reset later.', - 'settings.agents.editor.save': 'Save', - 'settings.agents.editor.create': 'Create agent', - 'settings.agents.editor.saving': 'Saving…', - 'settings.agentsSection.title': 'Agents', - 'settings.agentsSection.description': - 'Manage your agents, their autonomy, and what they can access on this computer.', - 'settings.agentsSection.menuDesc': 'Registry, autonomy & OS access', - 'settings.agents.editor.notFound': 'Agent not found.', - 'settings.agents.editor.modelInherit': 'Inherit (platform default)', - 'settings.agents.editor.modelHints': 'Route hints', - 'settings.agents.editor.modelTiers': 'Model tiers', - 'settings.agents.editor.modelCustom': 'Custom model id…', - 'settings.agents.editor.modelCustomPlaceholder': 'e.g. anthropic/claude-sonnet-4', - 'settings.agents.editor.selectTools': 'Add tools', - 'settings.agents.editor.toolsAllSelected': 'All tools', - 'settings.agents.editor.toolsNoneSelected': 'No tools selected', - 'settings.agents.editor.removeToolAria': 'Remove {tool}', - 'settings.agents.editor.toolsModalTitle': 'Allowed tools', - 'settings.agents.editor.toolsSelectedCount': '{count} selected', - 'settings.agents.editor.toolsSearchPlaceholder': 'Search tools…', - 'settings.agents.editor.toolsAllowAll': 'Allow all tools (*)', - 'settings.agents.editor.toolsAllowAllHint': 'This agent can use every available tool.', - 'settings.agents.editor.toolsLoading': 'Loading tools…', - 'settings.agents.editor.toolsLoadError': 'Couldn’t load tools', - 'settings.agents.editor.toolsEmpty': 'No tools match your search.', - 'settings.agents.editor.toolsDone': 'Done', - 'settings.agents.editor.builtInReadonly': - 'Built-in agents can’t be edited. You can enable, disable, or reset them from the agents list.', -}; - -export default ko2; diff --git a/app/src/lib/i18n/chunks/ko-3.ts b/app/src/lib/i18n/chunks/ko-3.ts deleted file mode 100644 index fc861d3e9..000000000 --- a/app/src/lib/i18n/chunks/ko-3.ts +++ /dev/null @@ -1,503 +0,0 @@ -import type { TranslationMap } from '../types'; - -// Korean chunk 3/5. Source of truth for translators. -const ko3: TranslationMap = { - 'insights.other': '기타', - 'insights.title': '인사이트', - 'insights.empty': '아직 인사이트가 없습니다. 메모리가 늘어나면 인사이트가 생성됩니다.', - 'insights.description': '메모리 그래프의 {count}개 관계를 기반으로 합니다.', - 'insights.items': '항목', - 'insights.more': '더 보기', - 'calls.joiningCall': '통화에 참여하는 중', - 'calls.meetWindowOpening': 'Meet 창이 열리는 중...', - 'calls.failedToStart': 'Meet 통화를 시작하지 못했습니다', - 'calls.couldNotStart': '통화를 시작할 수 없습니다', - 'calls.failedToClose': '통화를 닫지 못했습니다', - 'calls.couldNotClose': '통화를 닫을 수 없습니다', - 'calls.joinMeet': 'Google Meet 통화 참여', - 'calls.joinMeetDescription': '참여할 Google Meet 링크를 입력하세요.', - 'calls.meetLink': 'Meet 링크', - 'calls.displayName': '표시 이름', - 'calls.openingMeet': 'Meet 여는 중...', - 'calls.joinCall': '통화 참여', - 'calls.activeCalls': '활성 통화', - 'calls.leave': '나가기', - 'workspace.wipeConfirm': '모든 메모리를 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.', - 'workspace.resetTreeConfirm': '메모리 트리를 다시 빌드하시겠습니까?', - 'workspace.wipeTitle': '메모리 삭제', - 'workspace.resetting': '초기화 중...', - 'workspace.resetMemory': '메모리 초기화', - 'workspace.resetTreeTitle': '메모리 트리 다시 빌드', - 'workspace.rebuilding': '다시 빌드 중...', - 'workspace.resetMemoryTree': '메모리 트리 초기화', - 'workspace.building': '빌드 중...', - 'workspace.buildSummaryTrees': '요약 트리 빌드', - 'workspace.viewVault': '볼트 보기', - 'workspace.openingVaultTitle': 'Obsidian에서 볼트 열기', - 'workspace.openingVaultMessage': - "If Obsidian doesn't open, install it from obsidian.md or use Reveal Folder. Vault path:", - 'workspace.openVaultFailedTitle': "Couldn't open vault in Obsidian", - 'workspace.openVaultFailedMessage': - '폴더 표시를 사용하여 볼트 디렉터리를 직접 엽니다. 볼트 경로:', - 'workspace.revealVaultFailed': "Couldn't reveal vault folder", - 'workspace.revealFolder': '폴더 공개', - 'workspace.checkingVault': 'Checking…', - 'workspace.vaultNotRegisteredHelp': - 'Obsidian only opens folders you\'ve added as a vault. In Obsidian, choose "Open folder as vault" and pick the folder below — you only need to do this once. Then click View Vault again.', - 'workspace.obsidianNotFoundHelp': - "We couldn't find Obsidian on this device. Install it, or — if it's installed somewhere non-standard — set its config folder under Advanced.", - 'workspace.openAnyway': 'Open in Obsidian anyway', - 'workspace.installObsidian': 'Install Obsidian', - 'workspace.obsidianAdvanced': 'Obsidian installed elsewhere?', - 'workspace.obsidianConfigDirLabel': 'Obsidian config folder', - 'workspace.obsidianConfigDirHint': - 'Path to the folder containing obsidian.json (e.g. ~/.config/obsidian). Leave blank to auto-detect.', - 'workspace.obsidianConfigDirPlaceholder': '~/.config/obsidian', - 'workspace.graphLoadFailed': '메모리 그래프를 불러오지 못했습니다', - 'workspace.loadingGraph': '메모리 그래프를 불러오는 중...', - 'workspace.graphViewMode': '메모리 그래프 보기 모드', - 'workspace.trees': '트리', - 'workspace.contacts': '연락처', - 'graph.noContactMentions': '연락처 언급 없음', - 'graph.noMemory': '메모리 없음', - 'graph.source': '소스', - 'graph.topic': '주제', - 'graph.global': '전역', - 'graph.document': '문서', - 'graph.contact': '연락처', - 'graph.nodes': '노드', - 'graph.parentChild': '부모-자식', - 'graph.documentContact': '문서-연락처', - 'graph.link': '링크', - 'graph.links': '링크', - 'graph.children': '자식', - 'graph.clickToOpenObsidian': '클릭하여 Obsidian에서 열기', - 'graph.person': '사람', - 'modal.dontShowAgain': '비슷한 제안을 다시 표시하지 않기', - 'reflections.loading': '반영을 불러오는 중...', - 'reflections.empty': '아직 반영이 없습니다', - 'reflections.title': '반영', - 'reflections.proposedAction': '제안된 작업', - 'reflections.act': '실행', - 'reflections.dismiss': '닫기', - 'whatsapp.chatsSynced': '채팅 동기화됨', - 'whatsapp.chatSynced': '채팅 동기화됨', - 'sync.active': '활성', - 'sync.recent': '최근', - 'sync.idle': '유휴', - 'sync.memorySources': '메모리 소스', - 'sync.noConnectedSources': '연결된 소스 없음', - 'sync.chunks': '청크', - 'sync.lastChunk': '마지막 청크:', - 'sync.pending': '대기 중', - 'sync.processed': '처리됨', - 'sync.syncing': '동기화 중…', - 'sync.sync': '동기화', - 'sync.failedToLoad': '동기화 상태를 불러오지 못했습니다', - 'sync.noContent': '아직 메모리에 동기화된 콘텐츠가 없습니다. 시작하려면 통합을 연결하세요.', - 'memorySources.title': 'Memory Sources', - 'memorySources.empty': 'No memory sources yet. Add one to start feeding memory.', - 'memorySources.loadingConnections': 'Loading connections…', - 'memorySources.noConnections': - 'No active Composio connections found. Connect an integration first.', - 'memorySources.pickConnection': 'Pick a connection', - 'memorySources.selectConnection': '— Select a connection —', - 'memorySources.composioListFailed': 'Failed to load Composio connections.', - 'memorySources.browse': 'Browse…', - 'memorySources.folderPathPlaceholder': '/Users/you/notes', - 'memorySources.globPatternPlaceholder': '**/*.md', - 'memorySources.repoUrlPlaceholder': 'https://github.com/org/repo', - 'memorySources.branchPlaceholder': 'main', - 'memorySources.feedUrlPlaceholder': 'https://example.com/feed.xml', - 'memorySources.pageUrlPlaceholder': 'https://example.com/article', - 'memorySources.cssSelectorPlaceholder': 'article', - 'memorySources.searchQueryPlaceholder': 'from:user AI safety', - 'memorySources.kind.composio': 'Integration', - 'memorySources.kind.folder': 'Local Folder', - 'memorySources.kind.github_repo': 'GitHub Repo', - 'memorySources.kind.twitter_query': 'Twitter Search', - 'memorySources.kind.rss_feed': 'RSS Feed', - 'memorySources.kind.web_page': 'Web Page', - 'memorySources.sync.successTitle': 'Syncing', - 'memorySources.sync.successMessage': 'Progress will appear shortly.', - 'memorySources.sync.failedTitle': 'Sync failed:', - 'time.justNow': 'just now', - 'time.secondsAgoSuffix': 's ago', - 'time.minutesAgoSuffix': 'm ago', - 'time.hoursAgoSuffix': 'h ago', - 'time.daysAgoSuffix': 'd ago', - 'memorySources.customSources': 'Custom Sources', - 'memorySources.addSource': 'Add Source', - 'memorySources.noCustomSources': - 'No custom sources yet. Add a folder, GitHub repo, RSS feed, or web page to start.', - 'memorySources.pickKind': 'What kind of source do you want to add?', - 'memorySources.backToKinds': 'Back to source types', - 'memorySources.label': 'Label', - 'memorySources.labelPlaceholder': 'My research notes', - 'memorySources.add': 'Add', - 'memorySources.adding': 'Adding…', - 'memorySources.added': 'Source added', - 'memorySources.removed': 'Source removed', - 'memorySources.remove': 'Remove', - 'memorySources.enable': 'Enable', - 'memorySources.disable': 'Disable', - 'memorySources.toggleFailed': 'Toggle failed', - 'memorySources.removeFailed': 'Remove failed', - 'memorySources.folderPath': 'Folder path', - 'memorySources.globPattern': 'Glob pattern', - 'memorySources.repoUrl': 'Repository URL', - 'memorySources.branch': 'Branch', - 'memorySources.feedUrl': 'Feed URL', - 'memorySources.pageUrl': 'Page URL', - 'memorySources.cssSelector': 'CSS selector (optional)', - 'memorySources.searchQuery': 'Search query', - 'backend.aiBackend': 'AI 백엔드', - 'backend.cloud': '클라우드', - 'backend.recommended': '추천', - 'backend.cloudDescription': - '서버에서 호스팅되는 빠르고 강력한 모델입니다. 즉시 사용할 수 있습니다.', - 'backend.privacyNote': '개인 데이터, 메시지 또는 키는 서버로 전송되지 않습니다.', - 'backend.local': '로컬', - 'backend.advanced': '고급', - 'backend.localDescription': - 'Ollama를 사용하여 자신의 컴퓨터에서 모델을 실행합니다. 완전한 개인정보 보호를 제공하지만 설정이 필요합니다.', - 'backend.ramRecommended': '16GB 이상 RAM 권장', - 'subconscious.tasks': '작업', - 'subconscious.ticks': '틱', - 'subconscious.last': '마지막', - 'subconscious.failed': '실패', - 'subconscious.tickInterval': '틱 간격', - 'subconscious.runNow': '지금 실행', - 'subconscious.providerUnavailableTitle': 'Subconscious 일시 중지됨', - 'subconscious.providerSettings': 'AI 설정', - 'subconscious.approvalNeeded': '승인 필요', - 'subconscious.requiresApproval': '승인이 필요함', - 'subconscious.fixInConnections': '연결에서 수정', - 'subconscious.goAhead': '진행', - 'subconscious.activeTasks': '활성 작업', - 'subconscious.noActiveTasks': '활성 작업 없음', - 'subconscious.default': '기본값', - 'subconscious.addTaskPlaceholder': '새 작업 추가...', - 'subconscious.activityLog': '활동 로그', - 'subconscious.noActivity': '아직 활동이 없습니다', - 'subconscious.decision.nothingNew': '새로운 내용 없음', - 'subconscious.decision.completed': '완료됨', - 'subconscious.decision.evaluating': '평가 중', - 'subconscious.decision.waitingApproval': '승인 대기 중', - 'subconscious.decision.failed': '실패', - 'subconscious.decision.cancelled': '취소됨', - 'subconscious.decision.skipped': '건너뜀', - 'actionable.complete': '완료', - 'actionable.dismiss': '닫기', - 'actionable.snooze': '다시 알림', - 'actionable.new': '새 항목', - 'stats.storage': '저장소', - 'stats.files': '파일', - 'stats.documents': '문서', - 'stats.today': '오늘', - 'stats.namespaces': '네임스페이스', - 'stats.relations': '관계', - 'stats.firstMemory': '첫 번째 메모리', - 'stats.latest': '최신', - 'stats.sessions': '세션', - 'stats.tokens': '토큰', - 'bootCheck.invalidUrl': '런타임 URL을 입력해 주세요.', - 'bootCheck.urlMustStartWith': 'URL은 http:// 또는 https://로 시작해야 합니다', - 'bootCheck.validUrlRequired': '유효한 URL처럼 보이지 않습니다(예: https://core.example.com/rpc)', - 'bootCheck.tokenRequired': '연결하려면 인증 토큰이 필요합니다.', - 'bootCheck.chooseCoreMode': '런타임 선택', - 'bootCheck.connectToCore': '런타임에 연결', - 'bootCheck.desktopDescription': - 'OpenHuman은 생각하기 위한 런타임이 필요합니다. 어디에서 실행할지 선택하세요.', - 'bootCheck.webDescription': - '웹에서 OpenHuman은 사용자가 제어하는 런타임에 연결됩니다. 아래에 URL과 인증 토큰을 입력하거나, 데스크톱 앱을 받아 이 컴퓨터에서 바로 실행하세요.', - 'bootCheck.preferDesktop': '모든 것을 자신의 기기에 보관하고 싶으신가요?', - 'bootCheck.downloadDesktop': '데스크톱 앱 받기', - 'bootCheck.localRecommended': '로컬에서 실행(추천)', - 'bootCheck.localDescription': - '이 컴퓨터에서 바로 실행됩니다. 가장 빠르고, 완전히 비공개이며, 설정할 것이 없습니다.', - 'bootCheck.cloudMode': '클라우드에서 실행(복잡)', - 'bootCheck.cloudDescription': - '다른 곳에서 호스팅 중인 런타임에 연결합니다. 24×7 온라인 상태를 유지하므로 이 기기를 계속 켜둘 필요가 없습니다.', - 'bootCheck.coreRpcUrl': '런타임 URL', - 'bootCheck.rpcUrlPlaceholder': 'https://core.example.com/rpc', - 'bootCheck.authToken': '인증 토큰', - 'bootCheck.bearerTokenPlaceholder': '원격 런타임의 bearer 토큰', - 'bootCheck.storedLocally': '이 기기에만 보관됩니다. 다음으로 전송됨: ', - 'bootCheck.testing': '테스트 중…', - 'bootCheck.testConnection': '연결 테스트', - 'bootCheck.connectedOk': '연결되었습니다. 사용할 준비가 되었습니다.', - 'bootCheck.authFailed': '해당 토큰이 작동하지 않았습니다. 다시 확인하고 시도하세요.', - 'bootCheck.unreachablePrefix': '연결할 수 없습니다:', - 'bootCheck.checkingCore': '런타임을 깨우는 중…', - 'bootCheck.cannotReach': '런타임에 연결할 수 없습니다', - 'bootCheck.cannotReachDesc': '런타임에 연결할 수 없습니다. 다른 런타임을 시도하시겠습니까?', - 'bootCheck.switchMode': '다른 런타임 선택', - 'bootCheck.quit': '종료', - 'bootCheck.legacyDetected': '레거시 백그라운드 런타임 감지됨', - 'bootCheck.legacyDescription': - '별도로 설치된 OpenHuman 데몬이 이 기기에서 이미 실행 중입니다. 내장 런타임이 대신 실행되기 전에 이를 정리해야 합니다.', - 'bootCheck.removing': '제거 중…', - 'bootCheck.removeContinue': '제거하고 계속', - 'bootCheck.localNeedsRestart': '로컬 런타임을 다시 시작해야 함', - 'bootCheck.localNeedsRestartDesc': - '로컬 런타임의 버전이 이 앱과 다릅니다. 빠르게 다시 시작하면 다시 동기화됩니다.', - 'bootCheck.restarting': '다시 시작 중…', - 'bootCheck.restartCore': '런타임 다시 시작', - 'bootCheck.cloudNeedsUpdate': '클라우드 런타임 업데이트 필요', - 'bootCheck.cloudNeedsUpdateDesc': - '클라우드 런타임의 버전이 이 앱과 다릅니다. 업데이트 프로그램을 실행하여 다시 동기화하세요.', - 'bootCheck.updating': '업데이트 중…', - 'bootCheck.updateCloudCore': '클라우드 런타임 업데이트', - 'bootCheck.versionCheckFailed': '런타임 버전 확인 실패', - 'bootCheck.versionCheckFailedDesc': - '런타임이 실행 중이지만 버전을 보고하지 않습니다. 오래된 버전일 수 있습니다. 계속하려면 다시 시작하거나 업데이트하세요.', - 'bootCheck.working': '작업 중…', - 'bootCheck.restartUpdateCore': '런타임 다시 시작 / 업데이트', - 'bootCheck.unexpectedError': '예상치 못한 부트 체크 오류', - 'bootCheck.actionFailed': '문제가 발생했습니다. 다시 시도해 주세요.', - 'bootCheck.portConflictTitle': '앱 엔진을 시작할 수 없습니다', - 'bootCheck.portConflictBody': - '다른 프로세스가 OpenHuman에 필요한 네트워크 포트를 사용 중입니다. 자동으로 문제를 해결해 드리겠습니다.', - 'bootCheck.portConflictFixButton': '자동 수정', - 'bootCheck.portConflictFixing': '수정 중…', - 'bootCheck.portConflictFixFailed': - '자동 수정에 실패했습니다. 컴퓨터를 재시작한 후 다시 시도해 주세요.', - 'notifications.justNow': '방금 전', - 'notifications.minAgo': '{n}분 전', - 'notifications.hrAgo': '{n}시간 전', - 'notifications.dayAgo': '{n}일 전', - 'notifications.category.messages': '메시지', - 'notifications.category.agents': '에이전트', - 'notifications.category.skills': '스킬', - 'notifications.category.system': '시스템', - 'notifications.category.meetings': '회의', - 'notifications.category.reminders': '리마인더', - 'notifications.category.important': '중요', - 'about.update.status.checking': '확인 중...', - 'about.update.status.available': 'v{version} 사용 가능', - 'about.update.status.availableNoVersion': '업데이트 사용 가능', - 'about.update.status.downloading': '다운로드 중...', - 'about.update.status.readyToInstall': 'v{version} 설치 준비 완료', - 'about.update.status.readyToInstallNoVersion': - '새 버전이 다운로드되어 준비되었습니다. 적용하려면 다시 시작하세요.', - 'about.update.status.installing': '설치 중...', - 'about.update.status.restarting': '다시 시작 중...', - 'about.update.status.upToDate': '최신 버전을 실행 중입니다.', - 'about.update.status.error': '업데이트 확인 실패', - 'about.update.status.default': '업데이트 확인', - 'welcome.connectionFailed': '연결 실패: {status} {statusText}', - 'welcome.connectionFailedMsg': '연결 실패: {message}', - 'welcome.continueLocally': '로컬에서 계속', - 'welcome.localSessionStarting': '로컬 세션 시작 중...', - 'welcome.localSessionDesc': '오프라인 로컬 프로필을 사용하고 TinyHumans를 건너뜁니다. OAuth.', - 'chat.agentChatDesc': '에이전트와 직접 채팅 세션을 엽니다.', - 'channels.activeRouteValue': '{authMode}을(를) 통해 {channel}', - 'privacy.dataKind.messages': '메시지', - 'privacy.dataKind.agents': '에이전트', - 'privacy.dataKind.skills': '스킬', - 'privacy.dataKind.system': '시스템', - 'privacy.dataKind.meetings': '회의', - 'privacy.dataKind.reminders': '리마인더', - 'privacy.dataKind.important': '중요', - 'onboarding.enableLocalAI': '로컬 AI 활성화', - 'onboarding.skills.status.available': '사용 가능', - 'onboarding.skills.status.connected': '연결됨', - 'onboarding.skills.status.connecting': '연결 중', - 'onboarding.skills.status.error': '오류', - 'onboarding.skills.status.unavailable': '사용할 수 없음', - 'composio.statusUnavailable': '상태를 사용할 수 없음', - 'composio.envVarOverrides': '설정되어 있으며, 이 설정을 재정의합니다.', - 'memory.day.sun': '일', - 'memory.day.mon': '월', - 'memory.day.tue': '화', - 'memory.day.wed': '수', - 'memory.day.thu': '목', - 'memory.day.fri': '금', - 'memory.day.sat': '토', - 'memory.ingesting': '수집 중', - 'memory.ingestionQueued': '대기열에 추가됨', - 'memory.ingestingTitle': '{title} 수집 중', - 'mic.noAudioCaptured': '캡처된 오디오가 없습니다', - 'mic.noSpeechDetected': '음성이 감지되지 않았습니다', - 'mic.lowConfidenceResult': '오디오를 명확하게 이해할 수 없습니다 — 다시 시도해 주세요', - 'mic.failedToStopRecording': '녹음을 중지하지 못했습니다: {message}', - 'mic.transcriptionFailed': '전사에 실패했습니다: {message}', - 'reflections.kind.retrospective': '회고', - 'reflections.kind.derivedFact': '파생된 사실', - 'reflections.kind.moodInsight': '기분 인사이트', - 'reflections.kind.relationshipInsight': '관계 인사이트', - 'graph.tooltip.summary': '요약', - 'graph.tooltip.contact': '연락처', - 'localModel.usage.never': '사용 안 함', - 'localModel.usage.mediumLoad': '중간 부하', - 'localModel.usage.lowLoad': '낮은 부하', - 'localModel.usage.idleMode': '유휴 모드', - 'localModel.rebootstrapComplete': '모델 재부트스트랩 완료.', - 'localModel.modelsVerified': '로컬 모델 확인 완료.', - 'accounts.addModal.allConnected': '모두 연결됨', - 'accounts.addModal.title': '계정 추가', - 'accounts.respondQueue.empty': '비어 있음', - 'accounts.respondQueue.hide': '응답 대기열 숨기기', - 'accounts.respondQueue.loadFailed': '응답 대기열을 불러오지 못했습니다', - 'accounts.respondQueue.loading': '대기열 불러오는 중…', - 'accounts.respondQueue.pending': '대기 중', - 'accounts.respondQueue.show': '응답 대기열 표시', - 'accounts.respondQueue.title': '응답 대기열', - 'accounts.webviewHost.almostReady': '거의 준비됨...', - 'accounts.webviewHost.loadTimeout': 'Webview 로드 시간 초과', - 'accounts.webviewHost.loading': '{providerName} 불러오는 중...', - 'accounts.webviewHost.loadingAccount': '계정 불러오는 중', - 'accounts.webviewHost.restoringSession': '세션 복원 중...', - 'accounts.webviewHost.retryLoading': '다시 불러오기', - 'accounts.webviewHost.takingLonger': '{providerName}이 예상보다 오래 걸리고 있습니다.', - 'accounts.webviewHost.timeoutHint': '시간 초과 힌트', - 'app.connectionBadge.composio': 'Composio', - 'app.connectionBadge.messaging': '메시징', - 'app.connectionIndicator.connected': 'OpenHuman AI에 연결됨 🚀', - 'app.connectionIndicator.connecting': '연결 중', - 'app.connectionIndicator.coreOffline': '코어 오프라인', - 'app.connectionIndicator.disconnected': '연결 해제됨', - 'app.connectionIndicator.offline': '오프라인', - 'app.connectionIndicator.reconnecting': '다시 연결 중…', - 'app.errorFallback.componentStack': '컴포넌트 스택', - 'app.errorFallback.downloadLatest': '최신 버전 다운로드', - 'app.errorFallback.heading': '제목', - 'app.errorFallback.hint': '힌트', - 'app.errorFallback.reloadApp': '앱 다시 불러오기', - 'app.errorFallback.subheading': '부제목', - 'app.errorFallback.tryRecover': '복구 시도', - 'app.localAiDownload.installing': '설치 중...', - 'app.localAiDownload.preparing': '준비 중...', - 'app.openhumanLink.accounts.continueWith': '{label} 로그인으로 계속', - 'app.openhumanLink.accounts.done': '완료', - 'app.openhumanLink.accounts.intro': '소개', - 'app.openhumanLink.accounts.webviewNote': 'Webview 안내', - 'app.openhumanLink.billing.openDashboard': '대시보드 열기', - 'app.openhumanLink.billing.stayOnTrial': '체험판 유지', - 'app.openhumanLink.billing.trialCredit': '체험 크레딧', - 'app.openhumanLink.billing.trialDesc': '체험 설명', - 'app.openhumanLink.defaultBody': - '아직 팝업에서 준비되지 않았습니다. 필요하면 전체 설정 페이지를 여세요.', - 'app.openhumanLink.discord.intro': '소개', - 'app.openhumanLink.discord.openInvite': '초대 열기', - 'app.openhumanLink.discord.perk1': '혜택1', - 'app.openhumanLink.discord.perk2': '혜택2', - 'app.openhumanLink.discord.perk3': '혜택3', - 'app.openhumanLink.discord.perk4': '혜택4', - 'app.openhumanLink.done': '완료', - 'app.openhumanLink.loadingChannelSetup': '채널 설정 불러오는 중', - 'app.openhumanLink.maybeLater': '나중에', - 'app.openhumanLink.notifications.asking': 'OS에 요청 중…', - 'app.openhumanLink.notifications.blocked': '차단됨', - 'app.openhumanLink.notifications.blockedStep1': '차단 단계1', - 'app.openhumanLink.notifications.blockedStep2': '차단 단계2', - 'app.openhumanLink.notifications.blockedStep3': '차단 단계3', - 'app.openhumanLink.notifications.intro': '소개', - 'app.openhumanLink.notifications.promptHint': '프롬프트 힌트', - 'app.openhumanLink.notifications.retry': '테스트 알림 다시 시도', - 'app.openhumanLink.notifications.send': '테스트 알림 보내기', - 'app.openhumanLink.notifications.sendFailed': '보낼 수 없습니다: {error}', - 'app.openhumanLink.notifications.sent': - '테스트 알림이 전송되었습니다. 받지 못했다면 시스템 설정 → 알림 → OpenHuman으로 이동해 알림 허용을 켜고 배너 스타일을 지속으로 설정하세요.', - 'app.openhumanLink.skipForNow': '지금은 건너뛰기', - 'app.openhumanLink.telegramUnavailable': 'Telegram을 사용할 수 없음', - 'app.openhumanLink.title.accounts': '앱 연결', - 'app.openhumanLink.title.billing': '결제 및 크레딧', - 'app.openhumanLink.title.discord': '커뮤니티 참여', - 'app.openhumanLink.title.messaging': '채팅 채널 연결', - 'app.openhumanLink.title.notifications': '알림 허용', - 'app.persistRehydration.body': '본문', - 'app.persistRehydration.heading': '제목', - 'app.persistRehydration.resetCta': '초기화 중…', - 'app.persistRehydration.resetting': '초기화 중…', - 'app.routeLoading.initializing': 'OpenHuman 초기화 중...', - 'app.update.currentlyOn': '{version}', - 'app.update.errorFallback': '업데이트 중 문제가 발생했습니다.', - 'app.update.header.default': '업데이트', - 'app.update.header.error': '업데이트 실패', - 'app.update.header.installing': '업데이트 설치 중', - 'app.update.header.readyToInstall': '업데이트 설치 준비 완료', - 'app.update.header.restarting': '다시 시작 중…', - 'app.update.later': '나중에', - 'app.update.newVersionReady': '새 버전을 설치할 준비가 되었습니다.', - 'app.update.progress.downloaded': '{amount} 다운로드됨', - 'app.update.progress.installing': '새 버전 설치 중…', - 'app.update.progress.restarting': '앱 다시 실행 중…', - 'app.update.progress.working': '{percent}%', - 'app.update.restartNote': '다시 시작 안내', - 'app.update.restartNow': '지금 다시 시작', - 'app.update.versionReady': '버전 {newVersion} 설치 준비 완료.', - 'channels.discord.accountLinked': '계정 연결됨', - 'channels.discord.connect': '연결', - 'channels.discord.linkTokenExpired': '링크 토큰이 만료되었습니다. 다시 시도하세요.', - 'channels.discord.linkTokenInstruction': '{token}', - 'channels.discord.linkTokenLabel': '링크 토큰 라벨', - 'channels.discord.linkTokenOnce': '링크 토큰 1회 사용', - 'channels.discord.picker.allPermissionsOk': - '봇이 이 채널에서 필요한 모든 권한을 가지고 있습니다.', - 'channels.discord.picker.botNotInServers': '봇이 서버에 없습니다', - 'channels.discord.picker.category': '카테고리', - 'channels.discord.picker.channel': '채널', - 'channels.discord.picker.checkingPermissions': '권한 확인 중', - 'channels.discord.picker.loadingChannels': '채널 불러오는 중...', - 'channels.discord.picker.loadingServers': '서버 불러오는 중...', - 'channels.discord.picker.missingPermissions': '권한 누락', - 'channels.discord.picker.noChannels': '텍스트 채널을 찾을 수 없습니다', - 'channels.discord.picker.noServers': '서버를 찾을 수 없습니다', - 'channels.discord.picker.selectChannel': '채널 선택', - 'channels.discord.picker.selectServer': '서버 선택', - 'channels.discord.picker.server': '서버', - 'channels.discord.picker.serverChannelSelection': '서버 및 채널 선택', - 'channels.discord.savedRestartRequired': - '채널이 저장되었습니다. 활성화하려면 앱을 다시 시작하세요.', - 'channels.telegram.connect': '연결', - 'channels.telegram.managedDmConnecting': '관리형 DM 연결 중', - 'channels.telegram.managedDmTimeout': '관리형 DM 시간이 초과됨', - 'channels.telegram.reconnect': '다시 연결', - 'channels.telegram.savedRestartRequired': - '채널이 저장되었습니다. 활성화하려면 앱을 다시 시작하세요.', - 'channels.web.alwaysAvailable': '항상 사용 가능', - 'channels.discord.displayName': 'Discord', - 'channels.discord.description': 'Discord을(를) 통해 메시지를 보내고 받습니다.', - 'channels.discord.authMode.bot_token.description': '자신만의 Discord 봇 토큰을 제공하세요.', - 'channels.discord.authMode.oauth.description': - 'OAuth을 통해 OpenHuman 봇을 Discord 서버에 설치합니다.', - 'channels.discord.authMode.managed_dm.description': - '개인 Discord 계정을 OpenHuman 봇에 연결하세요.', - 'channels.discord.fields.bot_token.label': '봇 토큰', - 'channels.discord.fields.bot_token.placeholder': '귀하의 Discord 봇 토큰', - 'channels.discord.fields.guild_id.label': '서버(길드) ID', - 'channels.discord.fields.guild_id.placeholder': '선택 사항: 특정 서버로 제한', - 'channels.telegram.displayName': 'Telegram', - 'channels.telegram.description': '메시지 보내기 및 받기 Telegram.', - 'channels.telegram.authMode.managed_dm.description': - 'OpenHuman Telegram 봇에게 직접 메시지를 보냅니다.', - 'channels.telegram.authMode.bot_token.description': - '@BotFather에서 자신만의 Telegram 봇 토큰을 제공하세요.', - 'channels.telegram.fields.bot_token.label': '봇 토큰', - 'channels.telegram.fields.bot_token.placeholder': '123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11', - 'channels.telegram.fields.allowed_users.label': '허용된 사용자', - 'channels.telegram.fields.allowed_users.placeholder': '쉼표로 구분 Telegram 사용자 이름', - 'channels.web.displayName': '웹', - 'channels.web.description': '내장된 웹 UI를 통해 채팅합니다.', - 'channels.web.authMode.managed_dm.description': - '내장된 웹 채팅을 사용하세요. 설정이 필요하지 않습니다.', - 'welcome.continueLocallyExperimental': '로컬에서 계속(실험적)', - 'channels.yuanbao.connect': 'Connect', - 'channels.yuanbao.connecting': 'Connecting…', - 'channels.yuanbao.fieldRequired': '{field} is required', - 'channels.yuanbao.reconnect': 'Reconnect', - 'channels.yuanbao.savedRestartRequired': 'Channel saved. Restart the app to activate it.', - 'channels.yuanbao.unexpectedStatus': 'Unexpected connection status: {status}', - 'chat.approval.approve': 'Approve', - 'chat.approval.alwaysAllow': 'Always allow', - 'chat.approval.alwaysAllowHint': 'Stop asking for this tool — add it to your Always-allow list', - 'chat.approval.deciding': 'Working…', - 'chat.approval.deny': 'Deny', - 'chat.approval.error': 'Could not record your decision — try again.', - 'chat.approval.fallback': 'The agent wants to run an action that needs your approval.', - 'chat.approval.title': 'Approval needed', - 'chat.approval.tool': 'Tool:', -}; -export default ko3; diff --git a/app/src/lib/i18n/chunks/ko-4.ts b/app/src/lib/i18n/chunks/ko-4.ts deleted file mode 100644 index 35d62d391..000000000 --- a/app/src/lib/i18n/chunks/ko-4.ts +++ /dev/null @@ -1,491 +0,0 @@ -import type { TranslationMap } from '../types'; - -// Korean chunk 4/5. Source of truth for translators. -const ko4: TranslationMap = { - 'chat.unsubscribeApproval.approve': '승인 및 구독 취소', - 'chat.unsubscribeApproval.approved': '✓ 구독 취소가 완료되었습니다.', - 'chat.unsubscribeApproval.denied': '✕ 요청이 거부되었습니다.', - 'chat.unsubscribeApproval.deny': '거부', - 'chat.unsubscribeApproval.processing': '처리 중...', - 'chat.unsubscribeApproval.title': '구독 취소 요청', - 'commandPalette.ariaLabel': '명령 팔레트', - 'commandPalette.description': '설명', - 'commandPalette.label': '명령', - 'commandPalette.noResults': '결과 없음', - 'commandPalette.placeholder': '명령을 입력하거나 검색…', - 'commandPalette.searchAria': '명령 검색', - 'commandPalette.shortcutHint': '모든 단축키를 보려면 ?를 누르세요', - 'commandPalette.title': '명령 팔레트', - 'composio.connect.additionalConfigRequired': '추가 구성이 필요합니다', - 'composio.connect.atlassianSubdomainHint': 'acme', - 'composio.connect.atlassianSubdomainLabel': 'Atlassian 하위 도메인 라벨', - 'composio.connect.connect': '연결', - 'composio.connect.connectionFailed': '연결 실패(상태: {status}).', - 'composio.connect.disconnectFailed': '연결 해제 실패: {msg}', - 'composio.connect.disconnecting': '연결 해제 중…', - 'composio.connect.idleDescription': '다음을 연결하세요:', - 'composio.connect.idleDescriptionSuffix': - '계정. 브라우저 창을 열면 그곳에서 접근을 승인하고, 이 앱이 자동으로 연결을 감지합니다.', - 'composio.connect.isConnected': '연결되었습니다.', - 'composio.connect.manage': '관리', - 'composio.connect.needsSubdomain': '연결하려면', - 'composio.connect.needsSubdomainSuffix': - 'Atlassian 하위 도메인(예: acme.atlassian.net의 경우 acme)을 입력하고 다시 시도하세요.', - 'composio.connect.oauthComplete': 'OAuth 완료 대기 중…', - 'composio.connect.oauthTimeout': 'OAuth 시간이 초과되었습니다', - 'composio.connect.permissions': '권한', - 'composio.connect.permissionsDefault': '읽기 + 쓰기가 기본적으로 활성화됨', - 'composio.connect.permissionsNote': '노출할 수 있음', - 'composio.connect.permissionsNoteSuffix': - 'OpenHuman 자체 에이전트 권한은 아래에서 읽기, 쓰기, 관리자 토글로 제어됩니다.', - 'composio.connect.reopenBrowser': '브라우저 다시 열기', - 'composio.connect.requestingUrl': '연결 URL 요청 중…', - 'composio.connect.retryConnection': '연결 다시 시도', - 'composio.connect.scopeLoadError': '범위 기본 설정을 불러올 수 없습니다: {msg}', - 'composio.connect.scopeSaveError': '{key} 범위를 저장할 수 없습니다: {msg}', - 'composio.connect.subdomainInvalid': - '전체 URL이 아닌 짧은 하위 도메인만 입력하세요(예: "acme"). 문자, 숫자, 하이픈만 포함해야 합니다.', - 'composio.connect.subdomainRequired': '계속하려면 Atlassian 하위 도메인을 입력하세요.', - 'composio.connect.wabaIdLabel': 'WABA ID 라벨', - 'composio.connect.wabaIdRequired': - '계속하려면 WhatsApp Business Account ID (WABA ID)를 입력하세요.', - 'composio.connect.waitingFor': '대기 중:', - 'composio.connect.waitingHint': '방금 열린 브라우저 창에서 연결을 완료하세요.', - 'composio.triggers.heading': '트리거', - 'composio.triggers.listenFrom': '다음에서 이벤트 수신:', - 'composio.triggers.loadError': '트리거를 불러올 수 없습니다', - 'composio.triggers.needsConfiguration': '구성이 필요합니다', - 'composio.triggers.noneAvailable': '현재 사용할 수 있는 트리거가 없습니다:', - 'conversations.taskKanban.moveLeft': '왼쪽으로 이동', - 'conversations.taskKanban.moveRight': '오른쪽으로 이동', - 'conversations.taskKanban.title': '작업', - 'conversations.toolTimeline.turn': '턴', - 'conversations.toolTimeline.workerThread': '워커 스레드', - 'daemon.serviceBlockingGate.body': '본문', - 'daemon.serviceBlockingGate.downloadHint': '다운로드 안내', - 'daemon.serviceBlockingGate.downloadLatest': '최신 버전 다운로드', - 'daemon.serviceBlockingGate.retryCore': '코어 다시 시도', - 'daemon.serviceBlockingGate.retryFailed': - '다시 시도에 실패했습니다. 최신 앱 빌드를 다운로드하고 다시 시도하세요.', - 'daemon.serviceBlockingGate.retrying': '다시 시도 중...', - 'daemon.serviceBlockingGate.title': 'OpenHuman 코어를 사용할 수 없습니다', - 'home.banners.discordSubtitle': 'Discord 부제목', - 'home.banners.discordTitle': 'Discord 참여하기', - 'home.banners.earlyBirdDismiss': '얼리버드 배너 닫기', - 'home.banners.earlyBirdFirstSub': '첫 구독.', - 'home.banners.earlyBirdOn': '얼리버드 적용', - 'home.banners.earlyBirdTitle': '첫 1,000명의 사용자는 60% 할인을 받습니다.', - 'home.banners.earlyBirdUseCode': '얼리버드 코드 사용', - 'home.banners.getSubscription': '구독하기', - 'home.banners.promoCreditsBody': 'OpenHuman을 사용해 보고, 더 필요할 때', - 'home.banners.promoCreditsTitle': '{amount}의 프로모션 크레딧이 있습니다.', - 'home.banners.promoCreditsUsage': '10배 더 많은 사용량을 받으세요.', - 'intelligence.memoryChunk.detail.chunk': '청크', - 'intelligence.memoryChunk.detail.copyChunkId': '청크 ID 복사', - 'intelligence.memoryChunk.detail.embeddingInfo': 'bge-m3 1024dim', - 'intelligence.memoryChunk.detail.noEmbedding': '임베딩 없음', - 'intelligence.memoryChunk.letterhead.from': '보낸 사람', - 'intelligence.memoryChunk.letterhead.to': '받는 사람', - 'intelligence.memoryChunk.mentioned.chunkOne': '청크 1개', - 'intelligence.memoryChunk.mentioned.chunkOther': '청크 {count}개', - 'intelligence.memoryChunk.mentioned.heading': '언급됨', - 'intelligence.memoryChunk.scoreBars.ariaScore': '{name} 점수 {pct}퍼센트', - 'intelligence.memoryChunk.scoreBars.atThreshold': '{threshold} 기준', - 'intelligence.memoryChunk.scoreBars.dropped': '제외됨', - 'intelligence.memoryChunk.scoreBars.heading': '유지된 이유', - 'intelligence.memoryChunk.scoreBars.kept': '유지됨', - 'intelligence.diagram.title': 'Architecture Diagram', - 'intelligence.diagram.description': - 'Latest local architecture output from the configured diagram endpoint.', - 'intelligence.diagram.refresh': 'Refresh', - 'intelligence.diagram.refreshAria': 'Refresh diagram', - 'intelligence.diagram.emptyTitle': 'No diagram available yet', - 'intelligence.diagram.emptyDescription': - 'Generate an architecture diagram from the orchestrator and this panel will refresh from the configured local endpoint.', - 'intelligence.diagram.skillInstallCommand': 'npx skills add yizhiyanhua-ai/fireworks-tech-graph', - 'intelligence.diagram.promptExample': - 'Generate an architecture diagram of the current swarm in dark terminal style', - 'intelligence.diagram.imageAlt': 'Latest generated OpenHuman architecture diagram', - 'intelligence.diagram.refreshesEvery': 'Refreshes every {seconds}s', - 'intelligence.memoryText.entityTypePrefix': '엔터티 유형', - 'intelligence.screenDebug.active': '활성', - 'intelligence.screenDebug.app': '앱', - 'intelligence.screenDebug.bounds': '경계', - 'intelligence.screenDebug.captureAlt': '캡처 테스트 결과', - 'intelligence.screenDebug.captureFailed': '실패', - 'intelligence.screenDebug.captureSuccess': '성공', - 'intelligence.screenDebug.captureTest': '캡처 테스트', - 'intelligence.screenDebug.capturing': '캡처 중', - 'intelligence.screenDebug.frames': '프레임', - 'intelligence.screenDebug.idle': '유휴', - 'intelligence.screenDebug.lastApp': '마지막 앱', - 'intelligence.screenDebug.mode': '모드', - 'intelligence.screenDebug.permAccessibility': '접근성 권한', - 'intelligence.screenDebug.permInput': '입력 권한', - 'intelligence.screenDebug.permScreen': '접근성', - 'intelligence.screenDebug.permissions': '권한', - 'intelligence.screenDebug.platformNotSupported': '플랫폼이 지원되지 않음', - 'intelligence.screenDebug.recentVisionSummaries': '최근 비전 요약', - 'intelligence.screenDebug.session': '세션', - 'intelligence.screenDebug.size': '크기', - 'intelligence.screenDebug.status': '상태', - 'intelligence.screenDebug.testCapture': '테스트 캡처', - 'intelligence.screenDebug.time': '시간', - 'intelligence.screenDebug.title': '제목', - 'intelligence.screenDebug.unknown': '알 수 없음', - 'intelligence.screenDebug.visionQueue': '비전 대기열', - 'intelligence.screenDebug.visionState': '비전 상태', - 'intelligence.tasks.activeBoardOne': '대화 전반에 활성 보드 1개', - 'intelligence.tasks.activeBoardOther': '대화 전반에 활성 보드 {count}개', - 'intelligence.tasks.empty': '아직 에이전트 작업 보드가 없습니다', - 'intelligence.tasks.emptyHint': '빈 상태 안내', - 'intelligence.tasks.failedToLoad': '불러오지 못했습니다', - 'intelligence.tasks.live': '실시간', - 'intelligence.tasks.loadingBoards': '작업 보드 불러오는 중…', - 'intelligence.tasks.threadPrefix': '스레드 {thread}', - 'intelligence.tasks.subtitle': 'Your tasks and agent task boards across the workspace.', - 'intelligence.tasks.newTask': 'New task', - 'intelligence.tasks.personalBoardTitle': 'Agent Tasks', - 'intelligence.tasks.personalEmpty': 'No personal tasks yet', - 'intelligence.tasks.composer.title': 'New task', - 'intelligence.tasks.composer.titleLabel': 'Title', - 'intelligence.tasks.composer.titlePlaceholder': 'What needs to be done?', - 'intelligence.tasks.composer.statusLabel': 'Status', - 'intelligence.tasks.composer.attachLabel': 'Attach to conversation', - 'intelligence.tasks.composer.attachNone': 'Personal (no conversation)', - 'intelligence.tasks.composer.objectiveLabel': 'Objective', - 'intelligence.tasks.composer.objectivePlaceholder': 'Optional — the desired outcome', - 'intelligence.tasks.composer.notesLabel': 'Notes', - 'intelligence.tasks.composer.notesPlaceholder': 'Optional notes', - 'intelligence.tasks.composer.create': 'Create task', - 'intelligence.tasks.composer.creating': 'Creating…', - 'intelligence.tasks.composer.createFailed': "Couldn't create the task", - 'notifications.card.dismiss': '알림 닫기', - 'notifications.card.importanceTitle': '중요도: {pct}%', - 'notifications.center.empty': '아직 알림이 없습니다', - 'notifications.center.emptyHint': '빈 상태 안내', - 'notifications.center.filterAll': '전체 필터', - 'notifications.center.markAllRead': '모두 읽음으로 표시', - 'notifications.center.title': '알림', - 'oauth.button.loopbackTimeout': - '로그인 시간 초과 — 브라우저가 OAuth 리디렉션을 완료하지 못했습니다. 다시 시도해 주세요.', - 'oauth.button.connecting': '연결 중...', - 'oauth.login.continueWith': '다음으로 계속:', - 'onboarding.contextGathering.buildingDesc': '작성 설명', - 'onboarding.contextGathering.buildingProfile': '프로필을 만드는 중...', - 'onboarding.contextGathering.continueToChat': '채팅으로 계속', - 'onboarding.contextGathering.errorDesc': - '채팅이 준비되었습니다. 전체 프로필은 백그라운드에서 계속 만들 예정이므로 지금 계속하고 나중에 점진적으로 개선할 수 있습니다.', - 'onboarding.contextGathering.title': '컨텍스트 수집', - 'openhuman.team_list_teams': '팀 목록 팀', - 'overlay.ariaAttention': '주의 메시지', - 'overlay.ariaOrb': 'OpenHuman 오버레이', - 'overlay.ariaVoiceActive': '음성 입력 활성', - 'overlay.orbTitle': '드래그하여 이동 · 두 번 클릭하여 위치 초기화', - 'pages.settings.account.connections': '연결', - 'pages.settings.account.connectionsDesc': '연결된 계정 연결을 검토하고 관리합니다', - 'pages.settings.account.privacy': '개인정보 보호', - 'pages.settings.account.privacyDesc': '데이터 공유 및 익명화된 사용 기본 설정을 관리합니다', - 'pages.settings.account.recoveryPhrase': '복구 문구', - 'pages.settings.account.recoveryPhraseDesc': - '암호화 및 지갑 접근을 위한 BIP39 복구 문구를 관리합니다', - 'pages.settings.account.team': '팀', - 'pages.settings.account.teamDesc': '팀, 멤버 및 초대를 관리합니다', - 'pages.settings.accountSection.description': '복구 문구, 팀, 연결 및 개인정보 설정.', - 'pages.settings.accountSection.title': '계정', - 'pages.settings.ai.llm': 'LLM', - 'pages.settings.ai.llmDesc': 'LLM 설명', - 'pages.settings.ai.voice': '음성', - 'pages.settings.ai.voiceDesc': '음성 설명', - 'pages.settings.ai.embeddings': '임베딩', - 'pages.settings.ai.embeddingsDesc': '메모리 검색을 위한 벡터 인코딩 모델', - 'pages.settings.aiSection.description': '언어 모델 제공업체, 로컬 Ollama 및 음성(STT / TTS).', - 'pages.settings.aiSection.title': 'AI', - 'pages.settings.features.messagingChannels': '메시징 채널', - 'pages.settings.features.messagingChannelsDesc': '메시징 채널 설명', - 'pages.settings.features.notifications': '알림', - 'pages.settings.features.notificationsDesc': '알림 설명', - 'pages.settings.features.screenAwareness': '화면 인식', - 'pages.settings.features.screenAwarenessDesc': '화면 인식 설명', - 'pages.settings.features.tools': '도구', - 'pages.settings.features.toolsDesc': '도구 설명', - 'pages.settings.featuresSection.description': '화면 인식, 메시징 및 도구.', - 'pages.settings.featuresSection.title': '기능', - 'privacy.dataKind.credentials': '자격 증명', - 'privacy.dataKind.derived': '파생됨', - 'privacy.dataKind.diagnostics': '진단', - 'privacy.dataKind.metadata': '메타데이터', - 'privacy.dataKind.raw': '원본', - 'privacy.whatLeaves.link.label': '내 컴퓨터를 떠나는 데이터는 무엇인가요?', - 'rewards.community.achievementsUnlocked': '{total}개 중 {unlocked}개 업적 잠금 해제됨', - 'rewards.community.connectDiscord': 'Discord 연결', - 'rewards.community.cumulativeTokens': '누적 토큰', - 'rewards.community.currentStreak': '현재 연속 기록', - 'rewards.community.discordLinkedNotInGuild': '연결됨, 하지만 서버 멤버가 아님', - 'rewards.community.discordMember': '서버에 참여함', - 'rewards.community.discordNotLinked': '연결되지 않음', - 'rewards.community.discordServer': 'Discord 서버', - 'rewards.community.discordStatusUnavailable': '멤버십 상태를 사용할 수 없음', - 'rewards.community.discordWaiting': '백엔드 동기화 대기 중', - 'rewards.community.heroSubtitle': - 'Discord 계정을 연결하여 독점 채널, 후원자 배지 및 백엔드 동기화 보상을 잠금 해제하세요.', - 'rewards.community.heroTitle': '보상 및 Discord 역할 받기', - 'rewards.community.joinDiscord': 'Discord 참여', - 'rewards.community.loadingRewards': '보상 불러오는 중…', - 'rewards.community.locked': '잠김', - 'rewards.community.retrying': '다시 시도 중…', - 'rewards.community.rolesAndRewards': '역할 및 보상', - 'rewards.community.streakDays': '{n}일', - 'rewards.community.syncPending': '보상 동기화 대기 중', - 'rewards.community.syncPendingDesc': '동기화 대기 설명', - 'rewards.community.syncUnavailable': '동기화를 사용할 수 없음', - 'rewards.community.tryAgain': '다시 시도 중…', - 'rewards.community.unknown': '알 수 없음', - 'rewards.community.unlocked': '잠금 해제됨', - 'rewards.community.yourProgress': '내 진행 상황', - 'rewards.coupon.colCode': '코드', - 'rewards.coupon.colRedeemed': '교환됨', - 'rewards.coupon.colReward': '보상', - 'rewards.coupon.colStatus': '상태', - 'rewards.coupon.loadingHistory': '보상 기록 불러오는 중…', - 'rewards.coupon.noCodes': '아직 교환된 보상 코드가 없습니다.', - 'rewards.coupon.pending': '대기 중', - 'rewards.coupon.placeholder': '쿠폰 코드', - 'rewards.coupon.promoCredits': '프로모션 크레딧', - 'rewards.coupon.recentRedemptions': '최근 교환', - 'rewards.coupon.redeemAccepted': - '{code}이(가) 승인되었습니다. 필요한 작업이 완료되면 {amount}이(가) 잠금 해제됩니다.', - 'rewards.coupon.redeemButton': '코드 교환', - 'rewards.coupon.redeemSuccess': - '{code}이(가) 교환되었습니다. {amount}이(가) 크레딧에 추가되었습니다.', - 'rewards.coupon.redeemedCodes': '교환된 코드', - 'rewards.coupon.redeeming': '교환 중...', - 'rewards.coupon.statusApplied': '적용됨', - 'rewards.coupon.statusPendingAction': '작업 대기 중', - 'rewards.coupon.statusRedeemed': '교환됨', - 'rewards.coupon.subtitle': '부제목', - 'rewards.coupon.title': '쿠폰 코드 교환', - 'rewards.referralSection.activity': '추천 활동', - 'rewards.referralSection.apply': '적용 중…', - 'rewards.referralSection.applying': '적용 중…', - 'rewards.referralSection.colReferredUser': '추천된 사용자', - 'rewards.referralSection.colReward': '보상', - 'rewards.referralSection.colStatus': '상태', - 'rewards.referralSection.colUpdated': '업데이트됨', - 'rewards.referralSection.completed': '완료됨', - 'rewards.referralSection.copyCode': '코드 복사', - 'rewards.referralSection.copyFailed': '복사 실패', - 'rewards.referralSection.haveCode': '추천 코드가 있나요?', - 'rewards.referralSection.haveCodeDesc': '코드 있음 설명', - 'rewards.referralSection.linked': '연결됨', - 'rewards.referralSection.linkedCode': '(코드 {code})', - 'rewards.referralSection.loading': '추천 프로그램 불러오는 중…', - 'rewards.referralSection.noReferrals': '추천 없음', - 'rewards.referralSection.pendingReferrals': '대기 중인 추천', - 'rewards.referralSection.placeholder': '추천 코드', - 'rewards.referralSection.share': '공유', - 'rewards.referralSection.statusCompleted': '완료 상태', - 'rewards.referralSection.statusExpired': '만료 상태', - 'rewards.referralSection.statusJoined': '참여 상태', - 'rewards.referralSection.subtitle': '부제목', - 'rewards.referralSection.title': '친구를 초대하고 크레딧 받기', - 'rewards.referralSection.totalEarned': '총 적립', - 'rewards.referralSection.yourCode': '내 코드', - 'settings.ai.addCloudProvider': '클라우드 제공업체 추가', - 'settings.ai.addProvider': '저장 중…', - 'settings.ai.apiKeyFieldLabel': 'API 키 필드 라벨', - 'settings.ai.apiKeyRequired': '계속하려면 API 키를 붙여넣어 주세요.', - 'settings.ai.apiKeyStoredEncrypted': 'API 키가 암호화되어 저장됨', - 'settings.ai.apiKeysEncrypted': 'auth-profiles.json', - 'settings.ai.clearStoredKey': '저장된 키 지우기', - 'settings.ai.connectProvider': '제공업체 연결', - 'settings.ai.customRouting': '사용자 지정 라우팅', - 'settings.ai.defaultResolvesTo': '기본값은 다음으로 확인됨', - 'settings.ai.discard': '취소', - 'settings.ai.editProvider': '제공업체 편집', - 'settings.ai.llmProviders': 'LLM 제공업체', - 'settings.ai.llmProvidersDesc': 'LLM 제공업체 설명', - 'settings.ai.localOllama': '로컬(Ollama)', - 'settings.ai.modelLabel': '모델', - 'settings.ai.noCustomProviders': '사용자 지정 제공업체 없음', - 'settings.ai.providerLabel': '제공업체', - 'settings.ai.routing': '라우팅', - 'settings.ai.routingCustom': '사용자 지정 라우팅', - 'settings.ai.routingDefault': '기본값', - 'settings.ai.routingDesc': '라우팅 설명', - 'settings.ai.saveChanges': '저장 중…', - 'settings.ai.saving': '저장 중…', - 'settings.ai.unsavedChange': '저장되지 않은 변경 사항', - 'settings.ai.unsavedChanges': '저장되지 않은 변경 사항', - 'settings.ai.workloadGroupBackground': '백그라운드 작업 그룹', - 'settings.ai.workloadGroupChat': '채팅 작업 그룹', - 'settings.autocomplete.appFilter.acceptSuggestion': '제안 수락', - 'settings.autocomplete.appFilter.contextOverride': '컨텍스트 재정의(선택 사항)', - 'settings.autocomplete.appFilter.debugFocus': '포커스 디버그', - 'settings.autocomplete.appFilter.getSuggestion': '제안 받기', - 'settings.autocomplete.appFilter.liveLogs': '실시간 로그', - 'settings.autocomplete.appFilter.noLogs': ') :', - 'settings.autocomplete.appFilter.refreshStatus': '새로고침 중…', - 'settings.autocomplete.appFilter.refreshing': '새로고침 중…', - 'settings.autocomplete.appFilter.runtime': '런타임', - 'settings.autocomplete.appFilter.test': '테스트', - 'settings.autocomplete.completionStyle.acceptedCompletion': - '수락된 완성 {count}개가 저장됨 — 향후 제안을 개인화하는 데 사용됩니다.', - 'settings.autocomplete.completionStyle.acceptedCompletions': - '수락된 완성 {count}개가 저장됨 — 향후 제안을 개인화하는 데 사용됩니다.', - 'settings.autocomplete.completionStyle.clearHistory': '지우는 중…', - 'settings.autocomplete.completionStyle.clearing': '지우는 중…', - 'settings.autocomplete.completionStyle.debounce': '디바운스(ms)', - 'settings.autocomplete.completionStyle.enabled': '활성화됨', - 'settings.autocomplete.completionStyle.maxChars': '최대 문자 수', - 'settings.autocomplete.completionStyle.noHistory': - '아직 수락된 완성이 없습니다. Tab으로 제안을 수락하여 개인화를 시작하세요.', - 'settings.autocomplete.completionStyle.overlayTtl': '오버레이 TTL(ms)', - 'settings.autocomplete.completionStyle.personalizationHistory': '개인화 기록', - 'settings.autocomplete.completionStyle.styleExamples': '스타일 예시(줄마다 하나씩)', - 'settings.autocomplete.completionStyle.styleInstructions': '스타일 지침', - 'settings.billing.autoRecharge.addAmount': '이 금액 추가', - 'settings.billing.autoRecharge.addCard': '카드 추가', - 'settings.billing.autoRecharge.amountHint': '금액 안내', - 'settings.billing.autoRecharge.defaultCard': '기본 카드', - 'settings.billing.autoRecharge.lastRechargeFailed': '마지막 충전 실패', - 'settings.billing.autoRecharge.lastRecharged': '마지막 충전', - 'settings.billing.autoRecharge.noCards': '카드 없음', - 'settings.billing.autoRecharge.paymentMethods': '결제 수단', - 'settings.billing.autoRecharge.rechargeInProgress': '충전 진행 중', - 'settings.billing.autoRecharge.rechargeWhen': '잔액이 다음보다 낮아지면 충전', - 'settings.billing.autoRecharge.saveSettings': '저장 중…', - 'settings.billing.autoRecharge.saving': '저장 중…', - 'settings.billing.autoRecharge.setDefault': ':', - 'settings.billing.autoRecharge.subtitle': '부제목', - 'settings.billing.autoRecharge.title': '자동 충전 활성화', - 'settings.billing.autoRecharge.toggleAriaLabel': '자동 충전 전환', - 'settings.billing.autoRecharge.weeklyLimit': '주간 지출 한도', - 'settings.billing.history.desc': '설명', - 'settings.billing.history.empty': '비어 있음', - 'settings.billing.history.openPortal': '포털 열기', - 'settings.billing.history.posted': '게시됨', - 'settings.billing.history.title': '제목', - 'settings.billing.inferenceBudget.cycleEnds': '주기 종료', - 'settings.billing.inferenceBudget.exhausted': '소진됨', - 'settings.billing.inferenceBudget.loadError': '로드 오류', - 'settings.billing.inferenceBudget.noBudgetDesc': '예산 없음 설명', - 'settings.billing.inferenceBudget.noRecurringBudget': '반복 예산 없음', - 'settings.billing.inferenceBudget.remaining': '남음', - 'settings.billing.inferenceBudget.tenHourCap': '10시간 한도', - 'settings.billing.inferenceBudget.title': '제목', - 'settings.billing.payAsYouGo.available': '사용 가능', - 'settings.billing.payAsYouGo.chargeCustomAmount': '여는 중…', - 'settings.billing.payAsYouGo.chooseTopUpDesc': '충전 선택 설명', - 'settings.billing.payAsYouGo.chooseTopUpTitle': '충전 선택 제목', - 'settings.billing.payAsYouGo.creditBalanceDesc': '크레딧 잔액 설명', - 'settings.billing.payAsYouGo.creditBalanceTitle': '크레딧 잔액 제목', - 'settings.billing.payAsYouGo.customAmount': '사용자 지정 금액', - 'settings.billing.payAsYouGo.enterAmount': '금액 입력', - 'settings.billing.payAsYouGo.opening': '여는 중', - 'settings.billing.payAsYouGo.promotionalCredits': '프로모션 크레딧', - 'settings.billing.payAsYouGo.topUpBalance': '충전 잔액', - 'settings.billing.payAsYouGo.topUpCredits': '크레딧 충전', - 'settings.billing.payAsYouGo.unableToLoad': '잔액을 불러올 수 없습니다.', - 'settings.billing.subscription.annual': '연간', - 'settings.billing.subscription.billedAnnually': '연간 청구', - 'settings.billing.subscription.chooseSubtitle': '부제목 선택', - 'settings.billing.subscription.chooseTitle': '제목 선택', - 'settings.billing.subscription.cryptoDesc': '암호화폐 설명', - 'settings.billing.subscription.cryptoQuestion': '암호화폐 질문', - 'settings.billing.subscription.current': '현재', - 'settings.billing.subscription.currentPlan': '현재 플랜', - 'settings.billing.subscription.monthly': '월간', - 'settings.billing.subscription.paymentConfirmed': '결제 확인됨', - 'settings.billing.subscription.perMonth': '월별', - 'settings.billing.subscription.popular': '인기', - 'composio.connect.scope.read': '읽기', - 'composio.connect.scope.readHint': '에이전트가 이 연결에서 데이터를 읽을 수 있도록 허용합니다.', - 'composio.connect.scope.write': '쓰기', - 'composio.connect.scope.writeHint': - '에이전트가 이 연결을 통해 데이터를 생성하거나 수정할 수 있도록 허용합니다.', - 'composio.connect.scope.admin': '관리자', - 'composio.connect.scope.adminHint': - '에이전트가 설정, 권한 또는 파괴적인 작업을 관리하도록 허용합니다.', - 'composio.connect.dynamicsOrgNameLabel': 'Dynamics 365 조직 이름', - 'composio.connect.dynamicsOrgNameHint': - '예를 들어 myorg.crm.dynamics.com의 경우 "myorg"입니다. 전체 URL이 아닌 짧은 조직 이름만 입력하세요.', - 'composio.connect.needsFieldsPrefix': '연결하려면', - 'composio.connect.needsFieldsSuffix': - '좀 더 많은 정보가 필요합니다. 아래의 누락된 필드를 입력하고 다시 시도하세요.', - 'composio.connect.requiredFieldEmpty': '이 필드는 필수입니다.', - 'composio.connect.wabaIdHint': - 'GET /me/businesses를 통해 찾은 다음 Meta 액세스 토큰을 사용하여 /{business_id}/owned_whatsapp_business_accounts를 GET하세요.', - 'onboarding.contextGathering.coreAlive': - 'Core에 접근 가능합니다. 처음 실행하는 데 1분 정도 걸릴 수 있습니다.', - 'onboarding.contextGathering.coreAliveProbing': '코어 연결 확인 중…', - 'onboarding.contextGathering.coreUnreachable': - '코어가 응답하지 않습니다. 계속해서 나중에 다시 시도할 수 있습니다.', - 'onboarding.contextGathering.stillWorkingDesc': - '로컬 모델과 도구를 준비하는 동안 처음 실행하는 데 30~60초 정도 걸릴 수 있습니다. 언제든지 계속 채팅할 수 있습니다. 프로필 빌드는 백그라운드에서 계속 실행됩니다.', - 'onboarding.contextGathering.stillWorkingTitle': '아직 프로필 작업 중입니다…', - 'overlay.ariaCompanion': '컴패니언 활성', - 'overlay.companion.error': '오류', - 'overlay.companion.listening': '듣는 중…', - 'overlay.companion.pointing': '가리키는 중…', - 'overlay.companion.speaking': '말하는 중…', - 'overlay.companion.thinking': '생각 중...', - 'pages.settings.account.migration': '다른 어시스턴트에서 가져오기', - 'pages.settings.account.migrationDesc': - 'OpenClaw(또는 곧 Hermes)의 메모리와 메모를 이 작업 공간으로 마이그레이션합니다.', - 'pages.settings.composioSection.title': 'Composio', - 'pages.settings.composioSection.description': - 'Composio에서 제공하는 통합에 대한 라우팅, 트리거 및 기록입니다.', - 'pages.settings.features.desktopCompanion': '데스크탑 동반자', - 'pages.settings.features.desktopCompanionDesc': - '화면 인식 기능이 있는 음성 도우미 — 듣고, 보고, 말하고, 가리킵니다.', - 'settings.ai.openAiCompat.authHeaderExample': '권한 부여: Bearer ', - 'settings.ai.openAiCompat.authHeaderLabel': '인증 헤더', - 'settings.ai.openAiCompat.baseUrlLabel': 'Base URL', - 'settings.ai.openAiCompat.baseUrlUnavailable': '사용할 수 없음', - 'settings.ai.openAiCompat.clearKey': '키 지우기', - 'settings.ai.openAiCompat.description': - "Point local harnesses at this /v1 server to route through the providers configured below. Authentication uses a stable key you set here, not the app's internal core bearer.", - 'settings.ai.openAiCompat.keyConfigured': '키 구성됨', - 'settings.ai.openAiCompat.keyRequired': '키 필요', - 'settings.ai.openAiCompat.rotateKey': '키 회전', - 'settings.ai.openAiCompat.setKey': '키 설정', - 'settings.ai.openAiCompat.title': 'OpenAI 호환 엔드포인트', - 'pages.settings.account.walletBalances': 'Wallet Balances', - 'pages.settings.account.walletBalancesDesc': 'View multi-chain balances for your local wallet', - 'walletBalances.title': 'Wallet Balances', - 'walletBalances.refresh': 'Refresh', - 'walletBalances.loading': 'Loading balances…', - 'walletBalances.retry': 'Retry', - 'walletBalances.emptyState': 'No wallet accounts yet — set up a wallet in Recovery Phrase.', - 'walletBalances.copyAddress': 'Copy address', - 'walletBalances.providerMissing': 'provider unavailable', - 'walletBalances.rawBalance': 'Raw: {raw}', - 'walletBalances.errorGeneric': - 'Unable to load wallet balances. Set up your wallet in Recovery Phrase and try again.', - 'conversations.taskKanban.approval.default': 'Default', - 'conversations.taskKanban.approval.notRequired': 'Not required', - 'conversations.taskKanban.approval.notRequiredBadge': 'no approval', - 'conversations.taskKanban.approval.required': 'Required', - 'conversations.taskKanban.approval.requiredBadge': 'approval', - 'conversations.taskKanban.approval.requiredBeforeExecution': 'Required before execution', - 'conversations.taskKanban.briefButton': 'Task brief', - 'conversations.taskKanban.briefTitle': 'Task brief', - 'conversations.taskKanban.closeBrief': 'Close task brief', - 'conversations.taskKanban.field.acceptanceCriteria': 'Acceptance criteria', - 'conversations.taskKanban.field.allowedTools': 'Allowed tools', - 'conversations.taskKanban.field.approval': 'Approval', - 'conversations.taskKanban.field.assignedAgent': 'Assigned agent', - 'conversations.taskKanban.field.blocker': 'Blocker', - 'conversations.taskKanban.field.evidence': 'Evidence', - 'conversations.taskKanban.field.notes': 'Notes', - 'conversations.taskKanban.field.objective': 'Objective', - 'conversations.taskKanban.field.plan': 'Plan', - 'conversations.taskKanban.field.status': 'Status', - 'conversations.taskKanban.field.title': 'Title', - 'conversations.taskKanban.saveChanges': 'Save changes', - 'conversations.taskKanban.deleteCard': 'Delete', - 'conversations.taskKanban.updateFailed': 'Could not update task; changes were not saved.', -}; - -export default ko4; diff --git a/app/src/lib/i18n/chunks/ko-5.ts b/app/src/lib/i18n/chunks/ko-5.ts deleted file mode 100644 index acfa51468..000000000 --- a/app/src/lib/i18n/chunks/ko-5.ts +++ /dev/null @@ -1,1008 +0,0 @@ -import type { TranslationMap } from '../types'; - -// Korean chunk 5/5. Source of truth for translators. -const ko5: TranslationMap = { - 'settings.billing.subscription.save': '{pct}', - 'settings.billing.subscription.upgrade': '업그레이드', - 'settings.billing.subscription.waiting': '대기 중', - 'settings.billing.subscription.waitingPayment': '결제 대기 중', - 'settings.composio.apiKeyDesc': 'Composio API 키가 현재 이 기기에 저장되어 있습니다.', - 'settings.composio.apiKeyLabel': 'Composio API 키', - 'settings.composio.apiKeyStored': 'API 키 저장됨', - 'settings.composio.apiKeyStoredPlaceholder': '••••••••••••••••', - 'settings.composio.clearedToBackend': '백엔드 모드로 전환됨', - 'settings.composio.confirmItem1': 'API 키가 있는 app.composio.dev 계정', - 'settings.composio.confirmItem2': '개인 Composio 계정을 통해 각 통합을 다시 연결해야 합니다', - 'settings.composio.confirmItem3': - '참고: Composio 트리거(실시간 웹훅)는 아직 Direct 모드에서 실행되지 않습니다 — 동기식 도구 호출만 지원됩니다', - 'settings.composio.confirmNeedItems': '필요한 항목:', - 'settings.composio.confirmSwitch': '이해했습니다. Direct로 전환', - 'settings.composio.confirmTitle': '⚠️ Direct 모드로 전환', - 'settings.composio.confirmWarning': - '기존 통합(Gmail, Slack, GitHub 등 OpenHuman을 통해 연결된 통합)은 표시되지 않습니다 — OpenHuman 관리형 Composio 테넌트에 있습니다.', - 'settings.composio.intro': - 'Composio는 에이전트가 호출할 수 있는 도구로 250개 이상의 외부 앱을 통합합니다. 이러한 도구 호출이 라우팅되는 방식을 선택하세요.', - 'settings.composio.modeDirect': 'Direct(직접 API 키 사용)', - 'settings.composio.modeDirectDesc': - '호출이 backend.composio.dev로 직접 이동합니다. 독립적이고 오프라인 친화적입니다. 도구 실행은 동기식으로 작동하지만, 실시간 트리거 웹훅은 아직 Direct 모드에서 라우팅되지 않습니다(후속 이슈).', - 'settings.composio.modeManaged': '관리형(OpenHuman이 대신 처리)', - 'settings.composio.modeManagedDesc': - 'OpenHuman이 백엔드를 통해 도구 호출을 프록시합니다(권장). 인증은 중개되며, Composio API 키를 붙여넣을 필요가 없습니다. 웹훅은 완전히 라우팅됩니다.', - 'settings.composio.routingMode': '라우팅 모드', - 'settings.composio.saveErrorNoKey': - '저장에 실패했습니다. Direct 모드에는 비어 있지 않은 API 키가 필요합니다.', - 'settings.composio.saving': '저장 중…', - 'settings.composio.switching': '전환 중…', - 'settings.cron.jobs.desc': '설명', - 'settings.cron.jobs.empty': '코어 cron 작업을 찾을 수 없습니다.', - 'settings.cron.jobs.lastStatus': '마지막 상태', - 'settings.cron.jobs.loading': 'cron 작업 불러오는 중...', - 'settings.cron.jobs.loadingRuns': '실행 기록 불러오는 중', - 'settings.cron.jobs.nextRun': '다음 실행', - 'settings.cron.jobs.pause': '일시 중지', - 'settings.cron.jobs.paused': '일시 중지됨', - 'settings.cron.jobs.recentRuns': '최근 실행', - 'settings.cron.jobs.removing': '제거 중', - 'settings.cron.jobs.resume': '재개', - 'settings.cron.jobs.runningNow': '지금 실행 중', - 'settings.cron.jobs.saving': '저장 중…', - 'settings.cron.jobs.schedule': '일정', - 'settings.cron.jobs.title': '코어 Cron 작업', - 'settings.cron.jobs.viewRuns': '실행 기록 보기', - 'settings.localModel.deviceCapability.active': '활성', - 'settings.localModel.deviceCapability.appliedTier': '적용된 티어', - 'settings.localModel.deviceCapability.applying': '적용 중', - 'settings.localModel.deviceCapability.cores': '{count}', - 'settings.localModel.deviceCapability.couldNotLoadPresets': '프리셋을 불러올 수 없습니다', - 'settings.localModel.deviceCapability.cpu': 'CPU', - 'settings.localModel.deviceCapability.customModelIds': '사용자 지정 모델 ID', - 'settings.localModel.deviceCapability.detected': '감지됨', - 'settings.localModel.deviceCapability.disabled': '비활성화됨', - 'settings.localModel.deviceCapability.disabledDesc': '비활성화 설명', - 'settings.localModel.deviceCapability.downloadingModels': '(모델 다운로드 중)', - 'settings.localModel.deviceCapability.downloadingSetupDesc': - 'OllamaSetup 설치 프로그램(~2GB)을 다운로드하고 압축을 푸는 중입니다. 첫 설치 시 시간이 걸릴 수 있습니다.', - 'settings.localModel.deviceCapability.failedToApplyPreset': '프리셋 적용 실패', - 'settings.localModel.deviceCapability.gpu': 'GPU', - 'settings.localModel.deviceCapability.installFailed': 'Ollama 설치 실패', - 'settings.localModel.deviceCapability.installFailedDesc': - 'Ollama를 사용할 수 있기 전에 설치 프로그램이 종료되었습니다. 다시 시도하려면 재시도를 클릭하거나 ollama.com에서 수동으로 설치하세요.', - 'settings.localModel.deviceCapability.installFirst': '먼저 Ollama를 실행하세요.', - 'settings.localModel.deviceCapability.installFirstDesc': - '로컬 티어는 외부에서 관리되는 Ollama 엔드포인트에 의존합니다. 직접 시작하고 원하는 모델을 가져온 뒤, 런타임에 연결할 수 있을 때까지 "비활성화됨(클라우드 대체)"을 계속 사용하세요.', - 'settings.localModel.deviceCapability.installOllamaFirst': - '이 티어를 사용하려면 먼저 Ollama를 실행하세요', - 'settings.localModel.deviceCapability.installingOllama': 'Ollama 설치 중', - 'settings.localModel.deviceCapability.loadingDeviceInfo': '기기 정보 불러오는 중', - 'settings.localModel.deviceCapability.localAiDisabled': - '로컬 AI 비활성화됨 — 클라우드 대체 사용 중.', - 'settings.localModel.deviceCapability.modelTier': '모델 티어', - 'settings.localModel.deviceCapability.needsOllama': 'Ollama 필요', - 'settings.localModel.deviceCapability.notDetected': '감지되지 않음', - 'settings.localModel.deviceCapability.ram': 'RAM', - 'settings.localModel.deviceCapability.recommended': '권장', - 'settings.localModel.deviceCapability.retryInstall': '다시 시도 중…', - 'settings.localModel.deviceCapability.retrying': '다시 시도 중…', - 'settings.localModel.deviceCapability.starting': '시작 중…', - 'settings.localModel.download.audioPathPlaceholder': '오디오 파일의 절대 경로', - 'settings.localModel.download.capabilityAssets': '기능 자산', - 'settings.localModel.download.downloading': '다운로드 중...', - 'settings.localModel.download.embeddingPlaceholder': '줄마다 하나의 입력 문자열...', - 'settings.localModel.download.noThinkMode': '생각 없음 모드', - 'settings.localModel.download.promptPlaceholder': - '아무 프롬프트나 입력하고 로컬 모델에서 실행하세요...', - 'settings.localModel.download.quantizationPref': '양자화 기본 설정', - 'settings.localModel.download.runEmbeddingTest': '실행 중...', - 'settings.localModel.download.runPromptTest': '프롬프트 테스트 실행', - 'settings.localModel.download.runSummaryTest': '요약 테스트 실행', - 'settings.localModel.download.runTranscriptionTest': '실행 중...', - 'settings.localModel.download.runTtsTest': '실행 중...', - 'settings.localModel.download.runVisionTest': '실행 중...', - 'settings.localModel.download.running': '실행 중...', - 'settings.localModel.download.runningPrompt': '프롬프트 실행 중', - 'settings.localModel.download.summarizePlaceholder': - '로컬 모델로 요약할 텍스트를 붙여넣으세요...', - 'settings.localModel.download.testCustomPrompt': '사용자 지정 프롬프트 테스트', - 'settings.localModel.download.testEmbeddings': '임베딩 테스트', - 'settings.localModel.download.testSummarization': '요약 테스트', - 'settings.localModel.download.testVisionPrompt': '비전 프롬프트 테스트', - 'settings.localModel.download.testVoiceInput': '음성 입력 테스트(STT)', - 'settings.localModel.download.testVoiceOutput': '음성 출력 테스트(TTS)', - 'settings.localModel.download.ttsOutputPlaceholder': '선택적 출력 WAV 경로', - 'settings.localModel.download.ttsPlaceholder': '합성할 텍스트 입력...', - 'settings.localModel.download.visionImagePlaceholder': - '줄마다 하나의 이미지 참조(data URI, URL 또는 로컬 경로 표시)', - 'settings.localModel.download.visionPromptPlaceholder': '비전 모델용 프롬프트 입력...', - 'settings.localModel.status.allChecksPassed': '모든 확인 통과', - 'settings.localModel.status.artifact': '아티팩트', - 'settings.localModel.status.backend': '백엔드', - 'settings.localModel.status.binary': '바이너리', - 'settings.localModel.status.bootstrapResume': '부트스트랩 / 재개', - 'settings.localModel.status.checking': '확인 중...', - 'settings.localModel.status.checkingOllama': 'Ollama 확인 중', - 'settings.localModel.status.customLocation': '사용자 지정 위치', - 'settings.localModel.status.customLocationDesc': '사용자 지정 위치 설명', - 'settings.localModel.status.diagnosticsHint': - '"진단 실행"을 클릭하여 Ollama가 실행 중이고 모델이 설치되어 있는지 확인하세요.', - 'settings.localModel.status.downloadingUnknown': '다운로드 중(크기 알 수 없음)', - 'settings.localModel.status.eta': '예상 시간', - 'settings.localModel.status.expectedModels': '예상 모델', - 'settings.localModel.status.forceRebootstrap': '강제 재부트스트랩', - 'settings.localModel.status.generationTps': '생성 TPS', - 'settings.localModel.status.hideErrorDetails': '오류 세부 정보 숨기기', - 'settings.localModel.status.installManually': '수동 설치', - 'settings.localModel.status.installManuallyFrom': '다음에서 수동 설치', - 'settings.localModel.status.installOllama': '시작 중…', - 'settings.localModel.status.installedModels': '설치된 모델', - 'settings.localModel.status.installing': '설치 중...', - 'settings.localModel.status.installingOllama': 'Ollama 런타임 설치 중...', - 'settings.localModel.status.issues': '문제', - 'settings.localModel.status.issuesFound': '문제 {count}개 발견', - 'settings.localModel.status.lastLatency': '마지막 지연 시간', - 'settings.localModel.status.model': '모델', - 'settings.localModel.status.notFound': '찾을 수 없음', - 'settings.localModel.status.notRunning': '실행 중이 아님', - 'settings.localModel.status.ollamaBinaryPath': 'Ollama 바이너리 경로', - 'settings.localModel.status.ollamaDiagnostics': 'Ollama 진단', - 'settings.localModel.status.ollamaNotInstalled': 'Ollama 런타임을 사용할 수 없음', - 'settings.localModel.status.ollamaNotInstalledDesc': - 'OpenHuman은 이제 Ollama를 외부 추론 런타임으로 취급합니다. 직접 Ollama 서버를 시작하고 원하는 모델을 가져온 뒤 작업 라우팅을 해당 서버로 지정하세요.', - 'settings.localModel.status.progress': '진행률', - 'settings.localModel.status.provider': '제공업체', - 'settings.localModel.status.retryBootstrap': '부트스트랩 다시 시도', - 'settings.localModel.status.runDiagnostics': '확인 중...', - 'settings.localModel.status.running': '실행 중', - 'settings.localModel.status.runningExternalProcess': '외부 프로세스로 실행 중', - 'settings.localModel.status.runtimeStatus': '런타임 상태', - 'settings.localModel.status.server': '서버', - 'settings.localModel.status.setPath': '설정 중...', - 'settings.localModel.status.setting': '설정 중...', - 'settings.localModel.status.showErrorDetails': '오류 세부 정보 숨기기', - 'settings.localModel.status.showInstallErrorDetails': '오류 세부 정보 숨기기', - 'settings.localModel.status.suggestedFixes': '제안된 수정 사항', - 'settings.localModel.status.thenSetPath': '그런 다음 경로 설정', - 'settings.localModel.status.triggering': '트리거 중...', - 'settings.localModel.status.unavailable': '사용할 수 없음', - 'settings.localModel.status.working': '작업 중...', - 'settings.mascot.active': '활성', - 'settings.mascot.characterDesc': '캐릭터 설명', - 'settings.mascot.characterHeading': '캐릭터 제목', - 'settings.mascot.customGifError': - 'HTTPS .gif URL, loopback HTTP .gif URL, file:// .gif URL 또는 로컬 .gif 경로를 입력하세요.', - 'settings.mascot.customGifHeading': '사용자 지정 GIF 아바타', - 'settings.mascot.customGifLabel': '사용자 지정 GIF 아바타 URL', - 'settings.mascot.colorDesc': '색상 설명', - 'settings.mascot.colorHeading': '색상 제목', - 'settings.mascot.loadingLibrary': 'OpenHuman 라이브러리 불러오는 중…', - 'settings.mascot.localDefault': '로컬 OpenHuman(기본값)', - 'settings.mascot.noCharacters': '아직 사용할 수 있는 OpenHuman 캐릭터가 없습니다', - 'settings.mascot.noColorVariants': '색상 변형 없음', - 'settings.mascot.voice.current': '현재', - 'settings.mascot.voice.customDesc': - 'api.elevenlabs.io/v1/voices 또는 ElevenLabs 대시보드에서 음성 ID를 찾으세요. ID만 저장되며 API 키는 백엔드에 유지됩니다.', - 'settings.mascot.voice.customHeading': '사용자 지정 음성 ID', - 'settings.mascot.voice.customOption': '기타(음성 ID 붙여넣기)…', - 'settings.mascot.voice.desc': - '마스코트가 음성 응답에 사용할 ElevenLabs 음성을 선택하세요. 성별로 필터링하고, 선별된 목록에서 선택하거나, 사용자 지정 ID를 붙여넣거나, 앱이 인터페이스 언어에 맞는 음성을 선택하도록 할 수 있습니다.', - 'settings.mascot.voice.genderFemale': '여성', - 'settings.mascot.voice.genderHeading': '음성 성별', - 'settings.mascot.voice.genderMale': '남성', - 'settings.mascot.voice.heading': '음성', - 'settings.mascot.voice.preset': '음성 프리셋', - 'settings.mascot.voice.presetHeading': '음성 프리셋', - 'settings.mascot.voice.preview': '음성 미리듣기', - 'settings.mascot.voice.previewError': '음성 미리듣기 실패', - 'settings.mascot.voice.previewing': '미리듣는 중…', - 'settings.mascot.voice.reset': '기본값으로 초기화', - 'settings.mascot.voice.useLocaleDefault': '앱 언어와 일치', - 'settings.mascot.voice.useLocaleDefaultDesc': - '현재 인터페이스 언어에 맞는 음성을 자동으로 선택합니다.', - 'settings.memoryWindow.balanced.badge': '추천', - 'settings.memoryWindow.balanced.hint': - '합리적인 기본값 — 매번 추가 토큰을 많이 쓰지 않으면서 좋은 연속성을 제공합니다.', - 'settings.memoryWindow.balanced.label': '균형', - 'settings.memoryWindow.description': - 'OpenHuman이 새 에이전트 실행마다 주입하는 기억된 컨텍스트의 양입니다. 창이 클수록 과거 대화를 더 잘 인식하지만, 매 실행마다 더 많은 토큰을 사용하고 비용도 더 듭니다.', - 'settings.memoryWindow.extended.badge': '더 많은 컨텍스트', - 'settings.memoryWindow.extended.hint': - '각 실행에 더 많은 장기 메모리를 주입합니다. 턴당 토큰 비용이 더 높습니다.', - 'settings.memoryWindow.extended.label': '확장', - 'settings.memoryWindow.maximum.badge': '가장 높은 비용', - 'settings.memoryWindow.maximum.hint': - '가장 큰 안전 창입니다. 최고의 연속성을 제공하지만 매 실행마다 토큰 비용이 의미 있게 증가합니다.', - 'settings.memoryWindow.maximum.label': '최대', - 'settings.memoryWindow.minimal.badge': '가장 저렴함', - 'settings.memoryWindow.minimal.hint': - '가장 작은 메모리 창입니다. 가장 저렴하고 빠르지만 실행 간 연속성이 가장 낮습니다.', - 'settings.memoryWindow.minimal.label': '최소', - 'settings.memoryWindow.title': '장기 메모리 창', - 'settings.screenIntel.permissions.accessibility': '접근성', - 'settings.screenIntel.permissions.grantHint': '권한 허용 안내', - 'settings.screenIntel.permissions.inputMonitoring': '입력 모니터링', - 'settings.screenIntel.permissions.macosAppliesPrivacy': 'macOS 개인정보 보호 적용', - 'settings.screenIntel.permissions.openInputMonitoring': '요청 중…', - 'settings.screenIntel.permissions.refreshStatus': '새로고침 중…', - 'settings.screenIntel.permissions.refreshing': '새로고침 중…', - 'settings.screenIntel.permissions.requestAccessibility': '요청 중…', - 'settings.screenIntel.permissions.requestScreenRecording': '요청 중…', - 'settings.screenIntel.permissions.requesting': '요청 중…', - 'settings.screenIntel.permissions.restartRefresh': '코어 다시 시작 중…', - 'settings.screenIntel.permissions.restartingCore': '코어 다시 시작 중…', - 'settings.screenIntel.permissions.screenRecording': '화면 녹화', - 'settings.screenIntel.permissions.title': '권한', - 'skills.card.moreActions': '추가 작업', - 'skills.create.allowedTools': '허용된 도구', - 'skills.create.author': '작성자', - 'skills.create.authorPlaceholder': '이름', - 'skills.create.commaSeparated': '(쉼표로 구분)', - 'skills.create.createBtn': '스킬 생성', - 'skills.create.createError': '스킬을 생성할 수 없습니다', - 'skills.create.creating': '생성 중…', - 'skills.create.description': '설명', - 'skills.create.descriptionPlaceholder': '이 스킬은 무엇을 하나요?', - 'skills.create.optional': '(optional)', - 'skills.create.inputs.heading': 'Inputs', - 'skills.create.inputs.help': - 'Declare parameters the skill needs. The Skills Runner will render a form for these at run time.', - 'skills.create.inputs.add': 'Add input', - 'skills.create.inputs.row.name': 'Input name', - 'skills.create.inputs.row.namePlaceholder': 'e.g. repo', - 'skills.create.inputs.row.nameError': - 'Letters, digits, underscores, and dashes only; must start with a letter.', - 'skills.create.inputs.row.description': 'Input description', - 'skills.create.inputs.row.descriptionPlaceholder': 'What goes in this field?', - 'skills.create.inputs.row.type': 'Type', - 'skills.create.inputs.row.required': 'Required', - 'skills.create.inputs.row.remove': 'Remove input', - 'skills.create.inputs.type.string': 'Text', - 'skills.create.inputs.type.integer': 'Number', - 'skills.create.inputs.type.boolean': 'Yes / No', - 'skills.create.license': '라이선스', - 'skills.create.name': '이름', - 'skills.create.namePlaceholder': '예: Trade Journal', - 'skills.create.scope': '범위', - 'skills.create.scopeProjectHint': '/.openhuman/skills/', - 'skills.create.scopeUserHint': - '~/.openhuman/skills//SKILL.md에 작성됨 — 모든 워크스페이스에서 사용 가능.', - 'skills.create.slugLabel': '슬러그 라벨', - 'skills.create.subtitle': 'SKILL.md', - 'skills.create.tags': '태그', - 'skills.create.title': '새 스킬', - 'skills.detail.allowedTools': '허용된 도구', - 'skills.detail.author': '작성자', - 'skills.detail.bundledResources': '번들 리소스', - 'skills.detail.closeAriaLabel': '스킬 세부 정보 닫기', - 'skills.detail.location': '위치', - 'skills.detail.noBundledResources': '번들 리소스가 없습니다.', - 'skills.detail.tags': '태그', - 'skills.detail.warnings': '경고', - 'skills.install.fetchLog': '로그 가져오기', - 'skills.install.installBtn': '설치 중…', - 'skills.install.installComplete': '설치 완료', - 'skills.install.installing': '설치 중…', - 'skills.install.parseWarnings': '파싱 경고', - 'skills.install.rawError': '원시 오류', - 'skills.install.timeoutHint': '(초, 선택 사항)', - 'skills.install.timeoutLabel': '시간 초과 라벨', - 'skills.install.title': 'URL에서 스킬 설치', - 'skills.install.urlLabel': '스킬 URL', - 'skills.meetingBots.bannerDesc': - 'Google Meet 링크를 넣으면 OpenHuman이 게스트로 참여하여 말하고, 듣고, 반응합니다.', - 'skills.meetingBots.bannerTitle': 'OpenHuman을 회의에 보내기', - 'skills.meetingBots.busyTitle': 'OpenHuman이 바쁩니다', - 'skills.meetingBots.comingSoon': '곧 제공 예정', - 'skills.meetingBots.couldNotStartTitle': 'OpenHuman을 시작할 수 없습니다', - 'skills.meetingBots.displayName': '표시 이름', - 'skills.meetingBots.failedToStart': 'OpenHuman 시작에 실패했습니다.', - 'skills.meetingBots.joiningMessage': '몇 초 안에 참가자로 표시될 것입니다.', - 'skills.meetingBots.joiningTitle': 'OpenHuman이 회의에 참여하는 중', - 'skills.meetingBots.meetingLink': '회의 링크', - 'skills.meetingBots.modalAriaLabel': 'OpenHuman을 회의에 보내기', - 'skills.meetingBots.modalDesc': - 'OpenHuman이 익명 게스트로 참여하여 비디오를 통화에 스트리밍하고 에이전트를 통해 응답합니다.', - 'skills.meetingBots.modalTitle': 'OpenHuman을 회의에 보내기', - 'skills.meetingBots.newBadge': '새 항목', - 'skills.meetingBots.sendTo': '보내기', - 'skills.meetingBots.starting': '시작 중…', - 'skills.resource.preview.closeAriaLabel': '미리보기 닫기', - 'skills.resource.preview.failed': '미리보기 실패', - 'skills.resource.preview.loading': '미리보기 불러오는 중…', - 'skills.resource.tree.empty': '번들 리소스가 없습니다.', - 'skills.search.placeholder': '플레이스홀더', - 'skills.setup.autocomplete.acceptKey': '수락 키', - 'skills.setup.autocomplete.activeDesc': '활성 설명', - 'skills.setup.autocomplete.activeTitle': '자동 완성이 활성화됨', - 'skills.setup.autocomplete.customizeSettings': '설정 사용자 지정', - 'skills.setup.autocomplete.debounce': '디바운스', - 'skills.setup.autocomplete.description': '설명', - 'skills.setup.autocomplete.enableBtn': '활성화 중...', - 'skills.setup.autocomplete.enableError': '자동 완성을 활성화하지 못했습니다', - 'skills.setup.autocomplete.enabling': '활성화 중...', - 'skills.setup.autocomplete.notSupported': '지원되지 않음', - 'skills.setup.autocomplete.stepEnable': '인라인 완성 활성화', - 'skills.setup.autocomplete.stepSuccess': '사용 준비 완료', - 'skills.setup.autocomplete.stylePreset': '스타일 프리셋', - 'skills.setup.autocomplete.stylePresetValue': '균형(나중에 구성 가능)', - 'skills.setup.autocomplete.title': '텍스트 자동 완성', - 'skills.setup.screenIntel.activeDesc': '활성 설명', - 'skills.setup.screenIntel.activeTitle': '화면 인텔리전스가 활성화됨', - 'skills.setup.screenIntel.advancedSettings': '고급 설정', - 'skills.setup.screenIntel.allGranted': '모든 권한 허용됨', - 'skills.setup.screenIntel.captureMode': '캡처 모드', - 'skills.setup.screenIntel.captureModeValue': '모든 창(나중에 구성 가능)', - 'skills.setup.screenIntel.deniedHint': - '시스템 설정에서 권한을 허용한 후 아래를 클릭하여 다시 시작하고 변경 사항을 적용하세요.', - 'skills.setup.screenIntel.enableBtn': '활성화 중...', - 'skills.setup.screenIntel.enableDesc': - '화면의 내용을 읽고 유용한 컨텍스트를 에이전트에 제공합니다', - 'skills.setup.screenIntel.enableError': '화면 인텔리전스를 활성화하지 못했습니다', - 'skills.setup.screenIntel.enabling': '활성화 중...', - 'skills.setup.screenIntel.grant': '여는 중...', - 'skills.setup.screenIntel.granted': '허용됨', - 'skills.setup.screenIntel.macosOnly': 'macOS 전용', - 'skills.setup.screenIntel.opening': '여는 중...', - 'skills.setup.screenIntel.panicHotkey': '패닉 핫키', - 'skills.setup.screenIntel.permAccessibility': '접근성', - 'skills.setup.screenIntel.permInputMonitoring': '입력 모니터링', - 'skills.setup.screenIntel.permScreenRecording': '화면 녹화', - 'skills.setup.screenIntel.permissionsDesc': '권한 설명', - 'skills.setup.screenIntel.refreshStatus': '상태 새로고침', - 'skills.setup.screenIntel.restartRefresh': '다시 시작 중...', - 'skills.setup.screenIntel.restarting': '다시 시작 중...', - 'skills.setup.screenIntel.stepEnable': '스킬 활성화', - 'skills.setup.screenIntel.stepPermissions': '권한 허용', - 'skills.setup.screenIntel.stepSuccess': '사용 준비 완료', - 'skills.setup.screenIntel.title': '화면 인텔리전스', - 'skills.setup.screenIntel.visionModel': '비전 모델', - 'skills.setup.voice.activation': '활성화', - 'skills.setup.voice.activeDescPrefix': 'Fn', - 'skills.setup.voice.activeDescSuffix': 'Fn', - 'skills.setup.voice.activeTitle': '음성 인텔리전스가 활성화됨', - 'skills.setup.voice.customizeSettings': '설정 사용자 지정', - 'skills.setup.voice.downloadSttBtn': 'STT 다운로드 버튼', - 'skills.setup.voice.enableDesc': '활성화 설명', - 'skills.setup.voice.hotkey': '핫키', - 'skills.setup.voice.startBtn': '시작 중...', - 'skills.setup.voice.startError': '음성 서버를 시작하지 못했습니다', - 'skills.setup.voice.starting': '시작 중...', - 'skills.setup.voice.stepEnable': '음성 서버 시작', - 'skills.setup.voice.stepSetup': '모델 다운로드 필요', - 'skills.setup.voice.stepSuccess': '사용 준비 완료', - 'skills.setup.voice.sttNotReady': '음성-텍스트 모델이 준비되지 않음', - 'skills.setup.voice.sttNotReadyDesc': - '음성 인텔리전스에는 전사용 로컬 Whisper 모델이 필요합니다. 로컬 모델 설정에서 다운로드하세요.', - 'skills.setup.voice.sttReady': '음성-텍스트 모델 준비됨', - 'skills.setup.voice.sttReturnHint': 'STT 반환 안내', - 'skills.setup.voice.title': '음성 인텔리전스', - 'skills.uninstall.couldNotUninstall': '제거할 수 없습니다', - 'skills.uninstall.description': - '이 작업은 스킬 디렉터리와 모든 번들 리소스를 영구적으로 삭제합니다. 에이전트는 다음 턴부터 이를 더 이상 볼 수 없습니다.', - 'skills.uninstall.title': '제거', - 'skills.uninstall.uninstallBtn': '제거', - 'skills.uninstall.uninstalling': '제거 중…', - 'upsell.global.limitMessage': '계속하려면 플랜을 업그레이드하거나 크레딧을 충전하세요', - 'upsell.global.limitTitle': '사용자', - 'upsell.global.nearLimitMessage': - '사용 한도의 {pct}%를 사용했습니다. 더 높은 한도를 위해 업그레이드하세요.', - 'upsell.global.nearLimitTitle': '사용 한도에 가까워지고 있습니다', - 'upsell.usageLimit.bodyBudget': - '주간 한도에 도달했습니다.{reset} 한도를 피하려면 플랜을 업그레이드하거나 크레딧을 충전하세요.', - 'upsell.usageLimit.bodyRate': - '10시간 추론 속도 한도에 도달했습니다.{reset} 더 높은 한도를 위해 업그레이드하세요.', - 'upsell.usageLimit.heading': '사용 한도에 도달했습니다', - 'upsell.usageLimit.notNow': '지금은 아님', - 'upsell.usageLimit.perWindow': '{amount}', - 'upsell.usageLimit.planIncludes': '{plan}', - 'upsell.usageLimit.resetsIn': '{time}에 초기화됩니다.', - 'upsell.usageLimit.upgradePlan': '플랜 업그레이드', - 'upsell.usageLimit.weeklyInference': '{amount}', - 'walkthrough.tooltip.letsGo': '시작해 봅시다!', - 'walkthrough.tooltip.next': '다음 →', - 'walkthrough.tooltip.skip': '투어 건너뛰기', - 'walkthrough.tooltip.stepCounter': '{total}개 중 {n}개', - 'webhooks.activity.empty': '비어 있음', - 'webhooks.activity.title': '최근 활동', - 'webhooks.composioHistory.empty': '비어 있음', - 'webhooks.composioHistory.metadataId': '메타데이터 ID', - 'webhooks.composioHistory.metadataUuid': '메타데이터 UUID', - 'webhooks.composioHistory.payload': '페이로드', - 'webhooks.composioHistory.title': 'ComposeIO 트리거 기록', - 'webhooks.tunnels.active': '활성', - 'webhooks.tunnels.createFailed': '터널 생성 실패', - 'webhooks.tunnels.creating': '생성 중...', - 'webhooks.tunnels.deleteFailed': '터널 삭제 실패', - 'webhooks.tunnels.descriptionPlaceholder': '설명(선택 사항)', - 'webhooks.tunnels.echo': '에코', - 'webhooks.tunnels.empty': '비어 있음', - 'webhooks.tunnels.enableEcho': 'Echo 활성화', - 'webhooks.tunnels.inactive': '비활성', - 'webhooks.tunnels.namePlaceholder': '터널 이름(예: telegram-bot)', - 'webhooks.tunnels.newTunnel': '새 터널', - 'webhooks.tunnels.removeEcho': 'Echo 제거', - 'webhooks.tunnels.title': '웹훅 터널', - 'webhooks.tunnels.toggleFailed': 'Echo 전환 실패', - 'composio.authExpired': '인증이 만료됨', - 'composio.reconnect': '다시 연결', - 'composio.previewBadge': '미리보기', - 'composio.previewTooltip': - '에이전트 통합이 곧 제공됩니다. 연결할 수는 있지만 에이전트는 아직 이 툴킷을 사용할 수 없습니다.', - 'composio.directModeRequiresKey': - '저장에 실패했습니다. Direct 모드에는 비어 있지 않은 API 키가 필요합니다.', - 'composio.notYetRouted': '아직 라우팅되지 않음', - 'composio.triggers.loading': '불러오는 중…', - 'conversations.taskKanban.todo': '할 일', - 'settings.composio.loading': '불러오는 중…', - 'settings.mascot.noCharactersAvailable': '아직 사용할 수 있는 OpenHuman 캐릭터가 없습니다', - 'skills.uninstall.confirmTitle': '{name}을(를) 제거하시겠습니까?', - 'conversations.taskKanban.blocked': '차단됨', - 'conversations.taskKanban.done': '완료', - 'conversations.taskKanban.pending': 'Pending', - 'conversations.taskKanban.working': 'Working', - 'conversations.taskKanban.awaitingApproval': 'Awaiting approval', - 'conversations.taskKanban.ready': 'Ready', - 'conversations.taskKanban.rejected': 'Rejected', - 'conversations.taskKanban.inProgress': '진행 중', - 'intelligence.memoryChunk.detail.copiedHint': '복사됨', - 'settings.composio.notYetRouted': '아직 라우팅되지 않음', - 'settings.localModel.download.manageExternal': '외부 런타임에서 이 모델을 관리하세요.', - 'settings.localModel.status.manageOllamaExternal': - 'OpenHuman 외부에서 Ollama 프로세스와 모델 가져오기를 관리한 다음 진단을 다시 실행하세요.', - 'settings.localModel.status.ollamaDocs': 'Ollama 문서', - 'settings.localModel.status.thenRetry': - '설정 지침을 확인한 다음 런타임에 연결할 수 있게 되면 다시 시도하세요.', - 'settings.appearance.title': '외관', - 'settings.appearance.themeHeading': '테마', - 'settings.appearance.themeAria': '테마', - 'settings.appearance.modeLight': '라이트', - 'settings.appearance.modeLightDesc': '밝은 표면, 어두운 텍스트.', - 'settings.appearance.modeDark': '다크', - 'settings.appearance.modeDarkDesc': '어두운 표면, 해가 진 후 눈에 더 편안합니다.', - 'settings.appearance.modeSystem': '시스템과 일치', - 'settings.appearance.modeSystemDesc': 'OS 외관 설정을 따릅니다.', - 'settings.appearance.helperText': - '다크 모드는 전체 앱 — 채팅, 설정, 패널 — 을 어두운 팔레트로 전환합니다. "시스템과 일치"는 OS 외관을 따르며 실시간으로 업데이트됩니다.', - 'settings.mascot.characterPreview': '미리보기', - 'settings.mascot.characterStates': '상태', - 'settings.mascot.characterVisemes': '입 모양', - 'settings.mascot.colorAria': 'OpenHuman 색상', - 'settings.mascot.colorBlack': '검정', - 'settings.mascot.colorBurgundy': '버건디', - 'settings.mascot.colorCustom': 'Custom', - 'settings.mascot.colorNavy': '네이비', - 'settings.mascot.primaryColor': 'Primary color', - 'settings.mascot.secondaryColor': 'Secondary color', - 'settings.mascot.colorYellow': '노랑', - 'settings.mascot.libraryUnavailable': 'OpenHuman 라이브러리를 사용할 수 없음', - 'settings.mascot.title': 'OpenHuman', - 'settings.developerMenu.mcpServer.title': 'MCP 서버', - 'settings.developerMenu.mcpServer.desc': 'OpenHuman에 연결하도록 외부 MCP 클라이언트 구성', - 'settings.developerMenu.autonomy.title': '에이전트 자율성', - 'settings.developerMenu.autonomy.desc': '도구 작업 속도 제한 및 안전 임계값', - 'settings.mcpServer.title': 'MCP 서버', - 'settings.mcpServer.toolsSectionTitle': '사용 가능한 도구', - 'settings.mcpServer.toolsSectionDesc': - '도구 노출 openhuman-core mcp 실행 시 MCP stdio 서버를 통해', - 'settings.mcpServer.configSectionTitle': '클라이언트 구성', - 'settings.mcpServer.configSectionDesc': - '올바른 구성 조각을 생성하려면 MCP 클라이언트를 선택하세요.', - 'settings.mcpServer.copySnippet': '클립보드에 복사', - 'settings.mcpServer.copied': '복사되었습니다!', - 'settings.mcpServer.openConfigFile': '구성 파일 열기', - 'settings.mcpServer.binaryPathNotFound': - 'OpenHuman 바이너리를 찾을 수 없습니다. 소스에서 실행하는 경우 다음을 사용하여 빌드하세요: cargo build --bin openhuman-core', - 'settings.mcpServer.openConfigError': '구성 파일을 열지 못했습니다.', - 'settings.mcpServer.clientClaudeDesktop': 'Claude Desktop', - 'settings.mcpServer.clientCursor': '커서', - 'settings.mcpServer.clientCodex': 'Codex', - 'settings.mcpServer.clientZed': 'Zed', - 'settings.mcpServer.configFilePath': '구성 파일', - 'settings.mcpServer.clientSelectorAriaLabel': 'MCP 클라이언트 선택기', - 'settings.persona.title': 'Persona', - 'settings.persona.menuTitle': 'Persona', - 'settings.persona.menuDesc': - 'Name, personality, avatar, and voice — your assistant as one identity', - 'settings.persona.identityHeading': 'Identity', - 'settings.persona.identityDesc': - 'A display name and short description for your assistant. Shown in the app; does not change how the assistant reasons.', - 'settings.persona.displayNameLabel': 'Display name', - 'settings.persona.displayNamePlaceholder': 'e.g. Nova', - 'settings.persona.descriptionLabel': 'Description', - 'settings.persona.descriptionPlaceholder': 'e.g. A calm, concise assistant for my team.', - 'settings.persona.soul.heading': 'Personality (SOUL.md)', - 'settings.persona.soul.desc': - 'The personality prompt the assistant follows in every conversation. Edits are saved to your workspace and take effect on the next reply.', - 'settings.persona.soul.editorLabel': 'SOUL.md contents', - 'settings.persona.soul.reset': 'Reset to default', - 'settings.persona.soul.usingDefault': 'Using the bundled default', - 'settings.persona.soul.loadError': 'Could not load SOUL.md', - 'settings.persona.soul.saveError': 'Could not save SOUL.md', - 'settings.persona.soul.resetError': 'Could not reset SOUL.md', - 'settings.persona.appearanceHeading': 'Avatar & Voice', - 'settings.persona.appearanceDesc': - 'Mascot color, custom GIF avatar, and reply voice are configured in Mascot settings.', - 'settings.persona.openMascotSettings': 'Open Mascot settings', - 'settings.developerMenu.ai.title': 'AI 구성', - 'settings.developerMenu.ai.desc': '클라우드 공급자, 로컬 Ollama 모델 및 워크로드별 라우팅', - 'settings.developerMenu.screenAwareness.title': '화면 인식', - 'settings.developerMenu.screenAwareness.desc': '화면 캡처 권한, 모니터링 정책 및 세션 제어', - 'settings.developerMenu.messagingChannels.title': '메시징 채널', - 'settings.developerMenu.messagingChannels.desc': - 'Telegram/Discord 인증 모드 및 기본 채널 라우팅 구성', - 'settings.developerMenu.tools.title': '도구', - 'settings.developerMenu.tools.desc': - 'OpenHuman이 사용자를 대신하여 사용할 수 있는 기능 활성화 또는 비활성화', - 'settings.developerMenu.agentChat.title': '에이전트 채팅', - 'settings.developerMenu.agentChat.desc': '모델 및 온도 재정의를 통한 테스트 에이전트 대화', - 'settings.developerMenu.devWorkflow.title': 'Dev Workflow', - 'settings.developerMenu.devWorkflow.desc': - 'Autonomous agent that picks your GitHub issues and raises PRs on a schedule', - 'settings.developerMenu.devWorkflow.panelDesc': - 'Configure an autonomous developer agent that picks GitHub issues assigned to you and raises pull requests automatically on a schedule.', - 'settings.devWorkflow.githubRepository': 'GitHub Repository', - 'settings.devWorkflow.loadingRepositories': 'Loading repositories...', - 'settings.devWorkflow.selectRepository': 'Select a repository', - 'settings.devWorkflow.privateTag': '(private)', - 'settings.devWorkflow.detectingForkInfo': 'Detecting fork info...', - 'settings.devWorkflow.forkDetected': 'Fork detected', - 'settings.devWorkflow.upstream': 'Upstream:', - 'settings.devWorkflow.forkPrNote': 'PRs will be raised against the upstream repository.', - 'settings.devWorkflow.notForkNote': - 'Not a fork. PRs will be raised against this repository directly.', - 'settings.devWorkflow.targetBranch': 'Target Branch', - 'settings.devWorkflow.targetBranchNote': 'PRs will be raised against this branch', - 'settings.devWorkflow.loadingBranches': 'Loading branches...', - 'settings.devWorkflow.runFrequency': 'Run Frequency', - 'settings.devWorkflow.runFrequencyNote': - 'How often the agent should check for issues and raise PRs.', - 'settings.devWorkflow.updateConfiguration': 'Update Configuration', - 'settings.devWorkflow.saveConfiguration': 'Save Configuration', - 'settings.devWorkflow.remove': 'Remove', - 'settings.devWorkflow.saved': 'Saved', - 'settings.devWorkflow.activeConfiguration': 'Active Configuration', - 'settings.devWorkflow.activeConfigRepository': 'Repository:', - 'settings.devWorkflow.activeConfigUpstream': 'Upstream:', - 'settings.devWorkflow.activeConfigTargetBranch': 'Target branch:', - 'settings.devWorkflow.activeConfigSchedule': 'Schedule:', - 'settings.devWorkflow.enabled': 'Enabled', - 'settings.devWorkflow.paused': 'Paused', - 'settings.skillsRunner.scheduleEnabled': 'Enabled', - 'settings.skillsRunner.scheduleDisabled': 'Paused', - 'settings.skillsRunner.scheduleToggleAria': 'Toggle schedule enabled', - 'settings.skillsRunner.schedule.history': 'History', - 'settings.skillsRunner.schedule.historyLoading': 'Loading history\u2026', - 'settings.skillsRunner.schedule.historyEmpty': 'No runs yet for this schedule.', - 'settings.skillsRunner.schedule.historyNoOutput': 'No output captured.', - 'settings.skillsRunner.schedule.active': 'Active', - 'settings.skillsRunner.schedule.lastRunLabel': 'last:', - 'settings.devWorkflow.nextRun': 'Next run', - 'settings.devWorkflow.lastRun': 'Last run', - 'settings.devWorkflow.runNow': 'Run now', - 'settings.devWorkflow.running': 'Running…', - 'settings.devWorkflow.recentRuns': 'Recent runs', - 'settings.devWorkflow.cronSaveError': 'Failed to save configuration', - 'settings.devWorkflow.lastOutput': 'Last output', - 'settings.devWorkflow.noOutput': 'No output captured', - 'settings.devWorkflow.runningStatus': - 'Agent is running — picking an issue and working on a fix...', - 'settings.devWorkflow.errorNotConnected': - 'GitHub is not connected. Please connect GitHub via Settings > Advanced > Composio first.', - 'settings.devWorkflow.errorToolNotEnabled': - 'GITHUB_LIST_REPOSITORIES_FOR_THE_AUTHENTICATED_USER tool is not enabled on this backend. Please ask your admin to enable it in the Composio integration (backend#842).', - 'settings.devWorkflow.errorNotAuthenticated': 'Not authenticated. Please sign in first.', - 'settings.devWorkflow.errorNoRepositories': 'No repositories found for this GitHub account.', - 'settings.devWorkflow.schedule.every30min': 'Every 30 minutes', - 'settings.devWorkflow.schedule.everyHour': 'Every hour', - 'settings.devWorkflow.schedule.every2hours': 'Every 2 hours', - 'settings.devWorkflow.schedule.every6hours': 'Every 6 hours', - 'settings.devWorkflow.schedule.onceDaily': 'Once daily (9 AM)', - 'settings.developerMenu.cronJobs.title': '크론 작업', - 'settings.developerMenu.cronJobs.desc': '예약 보기 및 구성 런타임 기술용 작업', - 'settings.developerMenu.localModelDebug.title': '로컬 모델 디버그', - 'settings.developerMenu.localModelDebug.desc': 'Ollama 구성, 자산 다운로드, 모델 테스트 및 진단', - 'settings.developerMenu.composio.title': 'Composio', - 'settings.developerMenu.composio.desc': '라우팅 모드, 통합 트리거 및 트리거 기록 아카이브.', - 'settings.developerMenu.webhooks.title': '웹훅', - 'settings.developerMenu.webhooks.desc': '런타임 웹훅 등록 및 캡처된 요청 로그 검사', - 'settings.developerMenu.eventLog.title': 'Event Log', - 'settings.developerMenu.eventLog.desc': - 'Live colour-coded stream of all agent, tool, and system events', - 'settings.developerMenu.eventLog.allTypes': 'All types', - 'settings.developerMenu.eventLog.filterAgent': 'Filter...', - 'settings.developerMenu.eventLog.download': 'Download', - 'settings.developerMenu.eventLog.events': 'events', - 'settings.developerMenu.eventLog.live': 'Live', - 'settings.developerMenu.eventLog.disconnected': 'Disconnected', - 'settings.developerMenu.eventLog.waiting': 'Waiting for events...', - 'settings.developerMenu.eventLog.notConnected': 'Not connected to core', - 'settings.developerMenu.eventLog.jumpToLatest': 'Jump to latest', - 'settings.developerMenu.eventLog.badge.tool': 'TOOL', - 'settings.developerMenu.eventLog.badge.agent': 'AGENT', - 'settings.developerMenu.eventLog.badge.info': 'INFO', - 'settings.developerMenu.eventLog.badge.mem': 'MEM', - 'settings.developerMenu.eventLog.badge.chan': 'CHAN', - 'settings.developerMenu.eventLog.badge.cron': 'CRON', - 'settings.developerMenu.eventLog.badge.hook': 'HOOK', - 'settings.developerMenu.eventLog.badge.warn': 'WARN', - 'settings.developerMenu.eventLog.badge.skill': 'SKILL', - 'settings.developerMenu.eventLog.badge.comp': 'COMP', - 'settings.developerMenu.eventLog.badge.mcp': 'MCP', - 'settings.developerMenu.intelligence.title': '인텔리전스', - 'settings.developerMenu.intelligence.desc': '메모리 작업 공간, 잠재의식 엔진, 드림 및 설정', - 'settings.developerMenu.notificationRouting.title': '알림 라우팅', - 'settings.developerMenu.notificationRouting.desc': - '통합 경고에 대한 AI 중요도 점수 및 오케스트레이터 에스컬레이션', - 'settings.developerMenu.composeioTriggers.title': 'ComposeIO 트리거', - 'settings.developerMenu.composeioTriggers.desc': 'ComposeIO 트리거 기록 및 아카이브 보기', - 'settings.developerMenu.composioRouting.title': 'Composio 라우팅(직접 모드)', - 'settings.developerMenu.composioRouting.desc': - '자신만의 Composio API 키를 가져와 호출을 backend.composio.dev로 직접 라우팅하세요.', - 'settings.developerMenu.integrationTriggers.title': '통합 트리거', - 'settings.developerMenu.integrationTriggers.desc': - 'Composio 통합 트리거에 대한 AI 분류 설정 구성', - 'settings.appearance.menuDesc': '밝은 색, 어두운 색 선택 또는 시스템 테마와 일치', - 'settings.mascot.menuTitle': '마스코트', - 'settings.mascot.menuDesc': '앱 전체에서 사용되는 마스코트 색상 선택', - 'settings.appearance.tabBarHeading': '하단 탭 표시줄', - 'settings.appearance.tabBarAlwaysShowLabels': '항상 레이블 표시', - 'settings.appearance.tabBarAlwaysShowLabelsDesc': - '끄면 레이블은 마우스를 가져가거나 활성 탭에 대해서만 표시됩니다.', - 'common.breadcrumb': '탐색경로', - 'settings.betaBuild': '베타 빌드 - v{version}', - 'migration.vendor.openclaw': 'OpenClaw', - 'migration.vendor.hermes': 'Hermes Agent', - 'onboarding.apiKeys.openaiOauthHint': - 'ChatGPT Plus/Pro(구독) 또는 OpenAI API 키를 사용하세요. 둘 다 필수는 아닙니다.', - 'onboarding.apiKeys.openaiOauthOpening': '로그인 중…', - 'onboarding.apiKeys.finishSignIn': 'ChatGPT 로그인 완료', - 'onboarding.apiKeys.orApiKey': '또는 API 키', - 'app.localAiDownload.expandAria': '다운로드 진행률 확장', - 'app.localAiDownload.collapseAria': '다운로드 진행률 축소', - 'app.localAiDownload.dismissAria': '다운로드 알림 닫기', - 'mobile.nav.ariaLabel': '모바일 탐색', - 'progress.stepsAria': '진행 단계', - 'progress.stepAria': '{total}의 {current} 단계', - 'workspace.vaultsTitle': 'Knowledge Vault', - 'workspace.vaultsDesc': '로컬 폴더를 가리킵니다. 파일은 청크로 분할되어 메모리에 미러링됩니다.', - 'calls.title': '통화', - 'calls.comingSoonBody': 'AI 지원 통화가 곧 제공될 예정입니다. 계속 지켜봐 주시기 바랍니다.', - 'art.rotatingTetrahedronAria': '회전하는 역사면체 우주선', - 'devOptions.sentryDisabled': '(id 없음 — 이 빌드에서 센트리가 비활성화되었습니다.)', - 'composio.expiredAuthorization': '{name} 인증이 만료되었습니다.', - 'composio.expiredDescription': - '{name} 도구를 다시 활성화하려면 다시 연결하세요. OpenHuman은 OAuth 액세스를 새로 고칠 때까지 이 통합을 사용할 수 없는 상태로 유지합니다.', - 'channels.telegram.remoteControlTitle': '원격 제어(Telegram)', - 'channels.telegram.remoteControlBody': - '허용된 Telegram 채팅에서 /status, /sessions, /new 또는 /help를 보냅니다. 모델 라우팅은 여전히 ​​/model 및 /models를 사용합니다.', - 'rewards.referralSection.retry': '재시도', - 'settings.ai.plannerSummary': - '플래너: {sourceEvents} 소스 이벤트, {sent} 전송, {deduped} 중복 제거.', - 'settings.ai.routeLabel': '경로: {route}', - 'settings.ai.latestSpend': '최근 지출: {time}({action})의 {amount}', - 'settings.ai.topActions': '주요 작업', - 'settings.ai.noSpendRows': '로드된 지출 행이 없습니다.', - 'settings.ai.topHours': '상위 시간', - 'settings.ai.noHourlySpend': '아직 시간당 지출이 없습니다.', - 'settings.autocomplete.appFilter.app': '앱', - 'settings.autocomplete.appFilter.currentSuggestion': '현재 제안', - 'settings.autocomplete.appFilter.debounce': '디바운스', - 'settings.autocomplete.appFilter.enabled': '활성화됨', - 'settings.autocomplete.appFilter.lastError': '마지막 오류', - 'settings.autocomplete.appFilter.model': '모델', - 'settings.autocomplete.appFilter.phase': '단계', - 'settings.autocomplete.appFilter.platformSupported': '플랫폼 지원', - 'settings.autocomplete.appFilter.running': '실행 중', - 'settings.autocomplete.debug.acceptedPrefix': '수락됨: {value}', - 'settings.autocomplete.debug.acceptFailed': '제안을 수락하지 못했습니다.', - 'settings.autocomplete.debug.alreadyRunning': '자동 완성이 이미 실행 중입니다.', - 'settings.autocomplete.debug.clearHistoryFailed': '기록을 지우지 못했습니다.', - 'settings.autocomplete.debug.didNotStart': '자동 완성이 시작되지 않았습니다.', - 'settings.autocomplete.debug.disabledInSettings': - '설정에서 자동완성이 비활성화되어 있습니다. 활성화하고 먼저 저장하십시오.', - 'settings.autocomplete.debug.fetchSuggestionFailed': '현재 제안을 가져오지 못했습니다.', - 'settings.autocomplete.debug.inspectFocusedElementFailed': '중점 요소를 검사하지 못했습니다.', - 'settings.autocomplete.debug.loadSettingsFailed': '자동 완성 설정을 로드하지 못했습니다.', - 'settings.autocomplete.debug.noSuggestionApplied': '제안이 적용되지 않았습니다.', - 'settings.autocomplete.debug.noSuggestionReturned': '반환된 제안이 없습니다.', - 'settings.autocomplete.debug.refreshStatusFailed': '자동 완성 상태를 새로 고치지 못했습니다.', - 'settings.autocomplete.debug.saveAdvancedSettingsFailed': '고급 설정을 저장하지 못했습니다.', - 'settings.autocomplete.debug.startFailed': '자동 완성을 시작하지 못했습니다.', - 'settings.autocomplete.debug.stopFailed': '자동 완성을 중지하지 못했습니다.', - 'settings.autocomplete.debug.suggestionPrefix': '제안: {value}', - 'settings.autocomplete.shared.none': '없음', - 'settings.autocomplete.shared.notApplicable': '해당 없음', - 'settings.autocomplete.shared.unknown': '알 수 없음', - 'settings.billing.autoRecharge.expires': '{date}', - 'settings.billing.autoRecharge.spentThisWeek': '${spent} 만료 이번 주에 ${limit} 사용됨', - 'settings.localModel.deviceCapability.disabledLowercase': '비활성화됨', - 'settings.localModel.deviceCapability.presetDetails': - '채팅: {chatModel} · 비전: {visionModel} · 대상 RAM: {targetRamGb}GB', - 'settings.localModel.download.capabilityChat': '채팅', - 'settings.localModel.download.capabilityEmbedding': '삽입 중', - 'settings.localModel.download.capabilityStt': 'STT', - 'settings.localModel.download.capabilityTts': 'TTS', - 'settings.localModel.download.capabilityVision': '비전', - 'settings.localModel.download.embeddingDimensions': '치수: {dimensions}', - 'settings.localModel.download.embeddingModel': '모델: {modelId}', - 'settings.localModel.download.embeddingVectors': '벡터: {count}', - 'settings.localModel.download.notAvailable': '해당 사항 없음', - 'settings.localModel.download.summaryHelper': - 'Rust 코어를 통해 `openhuman.inference_summarize`를 호출합니다.', - 'settings.localModel.download.transcript': '내용:', - 'settings.localModel.download.ttsOutput': '출력: {outputPath}', - 'settings.localModel.download.ttsVoice': '음성: {voiceId}', - 'settings.localModel.status.contextBelowMinimumBadge': - '{contextLength} ctx - {required} min 미만', - 'settings.localModel.status.contextBelowMinimumTitle': - '거부됨: 컨텍스트 창 {contextLength} 토큰이 메모리 계층에 필요한 {required} 토큰 최소값보다 낮습니다. 자동 잘림으로 인해 재현율이 손상될 수 있습니다.', - 'settings.localModel.status.contextOkBadge': '{contextLength} ctx ✓', - 'settings.localModel.status.contextOkTitle': - '컨텍스트 창 {contextLength} 토큰은 메모리 계층 최소 {required} 토큰을 충족합니다.', - 'settings.localModel.status.contextUnknownBadge': 'ctx 알 수 없음', - 'settings.localModel.status.contextUnknownTitle': - '컨텍스트 창을 알 수 없습니다. {required} 토큰 메모리 계층 최소값을 충족하는지 확인할 수 없습니다.', - 'settings.localModel.status.expectedChat': '채팅: {model}', - 'settings.localModel.status.expectedEmbedding': '포함: {model}', - 'settings.localModel.status.expectedVision': '비전: {model}', - 'settings.localModel.status.externalProcess': '외부 프로세스', - 'settings.localModel.status.notAvailable': '해당 사항 없음', - 'settings.mascot.customGifPlaceholder': 'https://example.com/avatar.gif', - 'settings.mascot.loadDetailError': '마스코트를 로드할 수 없습니다.', - 'settings.mascot.loadLibraryError': '마스코트 라이브러리를 로드할 수 없습니다.', - 'settings.mascot.voice.customPlaceholder': '예: 21m00Tcm4TlvDq8ikWAM', - 'settings.mascot.voice.previewText': "Hi, I'm your assistant. This is a voice preview.", - 'skills.channelIcon.discord': 'Discord', - 'skills.channelIcon.imessage': 'iMessage', - 'skills.channelIcon.telegram': 'Telegram', - 'skills.channelIcon.web': '웹', - 'skills.channelIcon.yuanbao': 'Yuanbao', - 'skills.composio.poweredBy': 'Powered by Composio', - 'skills.composio.staleStatusTitle': '연결이 오래된 상태를 표시합니다.', - 'skills.create.allowedToolsHelp': 'SKILL.md 앞부분에 다음과 같이 렌더링됩니다.', - 'skills.create.allowedToolsPlaceholder': 'node_exec, 가져오기', - 'skills.create.licensePlaceholder': 'MIT', - 'skills.create.tagsPlaceholder': '거래, 연구', - 'skills.install.errors.alreadyInstalledHint': - '이 슬러그와 관련된 스킬이 이미 작업공간에 존재합니다. 먼저 제거하거나 `metadata.id` / `name` 머리말을 변경하세요.', - 'skills.install.errors.alreadyInstalledTitle': '스킬이 이미 설치되어 있습니다.', - 'skills.install.errors.fetchFailedHint': - '요청이 성공적으로 완료되지 않았습니다. 연결 가능한 공용 파일에서 URL 지점을 확인하고 호스트가 2xx 응답을 반환했는지 확인하세요.', - 'skills.install.errors.fetchFailedTitle': '가져오기 실패', - 'skills.install.errors.fetchTimedOutHint': - '원격 호스트가 제때 응답하지 않았습니다. 다시 시도하거나 제한 시간을 늘리세요(1~600초).', - 'skills.install.errors.fetchTimedOutTitle': '가져오기 시간이 초과되었습니다.', - 'skills.install.errors.fetchTooLargeHint': - 'SKILL.md는 1MiB 미만이어야 합니다. 번들 리소스를 인라인하는 대신 `references/` 또는 `scripts/` 파일로 분할하세요.', - 'skills.install.errors.fetchTooLargeTitle': 'SKILL.md가 너무 큽니다.', - 'skills.install.errors.genericHint': - '백엔드에서 오류를 반환했습니다. 원시 메시지는 아래와 같습니다.', - 'skills.install.errors.genericTitle': '기술을 설치할 수 없습니다.', - 'skills.install.errors.invalidSkillHint': - '머리말은 비어 있지 않은 `이름` 및 `설명` 필드가 있고 `---`로 끝나는 유효한 YAML이어야 합니다.', - 'skills.install.errors.invalidSkillTitle': 'SKILL.md가 구문 분석되지 않았습니다.', - 'skills.install.errors.invalidUrlHint': - '공개 HTTPS URL만 허용됩니다. 개인, 루프백 및 메타데이터 호스트가 차단됩니다.', - 'skills.install.errors.invalidUrlTitle': 'URL 거부됨', - 'skills.install.errors.unsupportedUrlHint': - '직접 `.md` 링크만 작동합니다. GitHub의 경우 파일 링크(github.com/owner/repo/blob/.../SKILL.md) - 트리 및 repo 루트는 설치되지 않습니다.', - 'skills.install.errors.unsupportedUrlTitle': 'URL 형식이 지원되지 않습니다.', - 'skills.install.errors.writeFailedHint': - '작업공간 기술 디렉터리에 쓸 수 없습니다. `/.openhuman/skills/`에 대한 파일 시스템 권한을 확인하세요.', - 'skills.install.errors.writeFailedTitle': 'SKILL.md를 쓸 수 없습니다.', - 'skills.install.fetchingPrefix': '가져오는 중', - 'skills.install.fetchingSuffix': '이는 구성한 시간 초과까지 걸릴 수 있습니다.', - 'skills.install.subtitleMiddle': 'HTTPS을 통해', - 'skills.install.subtitlePrefix': '아래에 설치합니다. 단일', - 'skills.install.subtitleSuffix': 'HTTPS만 가져옵니다. 개인 및 루프백 호스트는 차단됩니다.', - 'skills.install.successDiscovered': '{count} 새로운 스킬을 발견했습니다.', - 'skills.install.successNoNewIds': - '스킬이 설치되었지만 새 스킬 ID가 나타나지 않았습니다. 카탈로그에 이미 동일한 슬러그가 있는 스킬이 포함되어 있을 수 있습니다.', - 'skills.install.timeoutHelp': '기본값은 60초입니다. 1-600 이외의 값은 서버측에서 고정됩니다.', - 'skills.install.timeoutInvalid': '1~600 사이의 정수여야 합니다.', - 'skills.install.timeoutPlaceholder': '60', - 'skills.install.urlHelpMiddle': '파일.', - 'skills.install.urlHelpPrefix': '직접 링크', - 'skills.install.urlHelpSuffix': 'URLs 자동 재작성', - 'skills.install.urlInvalidPrefix': 'URL은 올바른 형식의', - 'skills.install.urlInvalidSuffix': '링크여야 합니다.', - 'skills.install.urlPlaceholder': 'https://raw.githubusercontent.com/owner/repo/main/SKILL.md', - 'skills.meetingBots.platformComingSoon': '{label} 지원이 곧 제공될 예정입니다.', - 'skills.meetingBots.platformHints.gmeet': 'Meet.google.com/abc-defg-hij', - 'skills.meetingBots.platformHints.teams': 'Teams.microsoft.com/...', - 'skills.meetingBots.platformHints.zoom': 'Zoom.us/j/...', - 'skills.meetingBots.platforms.gmeet': 'Google 모임', - 'skills.meetingBots.platforms.teams': 'Microsoft Teams', - 'skills.meetingBots.platforms.zoom': 'Zoom', - 'skills.meetingBots.soonSuffix': '곧', - 'skills.setup.screenIntel.permissionPathLabel': 'macOS는 다음에 개인 정보 보호를 적용합니다.', - 'settings.agentAccess.title': 'Agent OS access', - 'settings.agentAccess.menuDesc': - 'Control where the agent can read/write and whether it can use the shell.', - 'settings.agentAccess.loadError': 'Failed to load access settings', - 'settings.agentAccess.saveError': 'Failed to save access settings', - 'settings.agentAccess.saved': 'Saved — applies on your next message.', - 'settings.agentAccess.desktopOnly': 'Access settings are only available in the desktop app.', - 'settings.agentAccess.loading': 'Loading…', - 'settings.agentAccess.accessMode': 'Access mode', - 'settings.agentAccess.tier.readonly.title': 'Read-only', - 'settings.agentAccess.tier.readonly.desc': - 'Reads files and runs read-only commands to explore — but never writes, edits, or runs anything that changes state.', - 'settings.agentAccess.tier.supervised.title': 'Ask before edit', - 'settings.agentAccess.tier.supervised.desc': - 'Creates new files freely, but asks for your approval before editing an existing file, running a command, reaching the network, or installing anything.', - 'settings.agentAccess.tier.full.title': 'Full access', - 'settings.agentAccess.tier.full.desc': - 'Runs commands with your full user account access — it can read/write anywhere allowed, except credential and system stores. Destructive commands, network access, and installs still ask for approval.', - 'settings.agentAccess.defaultTag': '(default)', - 'settings.agentAccess.fullWarning': - '⚠ Full access runs commands with your full account access and is not sandboxed. Only enable it when you trust the agent with this machine. Credential and system directories stay blocked, and destructive, network, and install actions still ask for approval.', - 'settings.agentAccess.confine.label': 'Confine to workspace', - 'settings.agentAccess.confine.desc': - 'Restrict the agent to the workspace directory (plus any granted folders), whichever access mode is selected. When off, it can reach anywhere your user can — except the always-blocked credential and system directories.', - 'settings.agentAccess.grantedFolders': 'Granted folders', - 'settings.agentAccess.alwaysAllow': 'Always-allowed tools', - 'settings.agentAccess.alwaysAllowDesc': - 'Tools you marked "Always allow" in chat run without asking. Remove one to be prompted again.', - 'settings.agentAccess.alwaysAllowNone': 'No always-allowed tools yet.', - 'settings.agentAccess.grantedDesc': - 'Folders the agent may read and write, in addition to the workspace. Credential stores (~/.ssh, ~/.gnupg, ~/.aws, keychains) and system directories (/etc, /System, C:\\Windows, …) are always blocked, even inside a granted folder.', - 'settings.agentAccess.noneGranted': 'No folders granted.', - 'settings.agentAccess.readWrite': 'read + write', - 'settings.agentAccess.readOnly': 'read-only', - 'settings.agentAccess.remove': 'Remove', - 'settings.agentAccess.pathPlaceholder': '폴더의 절대 경로', - 'settings.agentAccess.accessLevelLabel': 'Access level', - 'settings.agentAccess.add': 'Add', - 'settings.agentAccess.saving': 'Saving…', - 'settings.agentAccess.changesApply': 'Changes apply on your next message.', - 'skills.tabs.runners': 'Runners', - 'settings.developerMenu.skillsRunner.title': 'Skills Runner', - 'settings.developerMenu.skillsRunner.desc': - 'Run any bundled skill ad-hoc — fill its inputs and fire a background autonomous run', - 'settings.developerMenu.skillsRunner.panelDesc': - 'Pick a bundled skill, fill in its declared inputs, and fire a fire-and-forget background run. Use Dev Workflow instead if you want a cron-scheduled recurring job.', - 'settings.skillsRunner.skill': 'Skill', - 'settings.skillsRunner.selectSkill': 'Select a skill…', - 'settings.skillsRunner.loadingSkills': 'Loading skills…', - 'settings.skillsRunner.loadingDescription': 'Loading skill inputs…', - 'settings.skillsRunner.noInputs': 'This skill declares no inputs.', - 'settings.skillsRunner.placeholder.required': 'required', - 'settings.skillsRunner.runNow': 'Run now', - 'settings.skillsRunner.starting': 'Starting…', - 'settings.skillsRunner.started': 'Started — run id:', - 'settings.skillsRunner.logPath': 'Log:', - 'settings.skillsRunner.error.listSkills': 'Failed to load skills:', - 'settings.skillsRunner.error.describe': 'Failed to load inputs:', - 'settings.skillsRunner.error.missingRequired': 'Missing required input(s):', - 'settings.skillsRunner.error.run': 'Run failed to start:', - 'settings.skillsRunner.error.preflightGate': 'Preflight gate failed', - 'settings.skillsRunner.schedule.heading': 'Schedule (recurring)', - 'settings.skillsRunner.schedule.help': - 'Save this skill + inputs as a recurring cron job. The agent will call run_skill at each tick.', - 'settings.skillsRunner.schedule.frequency': 'Frequency', - 'settings.skillsRunner.schedule.every30min': 'Every 30 minutes', - 'settings.skillsRunner.schedule.everyHour': 'Every hour', - 'settings.skillsRunner.schedule.every2hours': 'Every 2 hours', - 'settings.skillsRunner.schedule.every6hours': 'Every 6 hours', - 'settings.skillsRunner.schedule.onceDaily': 'Once daily (9:00)', - 'settings.skillsRunner.schedule.save': 'Save schedule', - 'settings.skillsRunner.schedule.saving': 'Saving…', - 'settings.skillsRunner.schedule.saved': 'Schedule saved.', - 'settings.skillsRunner.schedule.error': 'Schedule save failed:', - 'settings.skillsRunner.schedule.loadingJobs': 'Loading existing schedules…', - 'settings.skillsRunner.schedule.noJobs': 'No schedules saved for this skill yet.', - 'settings.skillsRunner.schedule.existing': 'Scheduled jobs for this skill:', - 'settings.skillsRunner.schedule.runNow': 'Run', - 'settings.skillsRunner.schedule.remove': 'Remove', - 'settings.skillsRunner.recentRuns.headingForSkill': 'Recent runs for this skill', - 'settings.skillsRunner.recentRuns.headingAll': 'Recent skill runs (all)', - 'settings.skillsRunner.recentRuns.refresh': 'Refresh', - 'settings.skillsRunner.recentRuns.loading': 'Loading recent runs…', - 'settings.skillsRunner.recentRuns.empty': 'No recent runs.', - 'settings.skillsRunner.viewer.loading': 'Loading log…', - 'settings.skillsRunner.viewer.tailing': 'Live tailing', - 'settings.skillsRunner.viewer.fetching': 'fetching', - 'settings.skillsRunner.viewer.error': 'Log read failed:', - 'settings.skillsRunner.repoPicker.loading': 'Loading repositories…', - 'settings.skillsRunner.repoPicker.select': 'Select a repository…', - 'settings.skillsRunner.repoPicker.empty': - 'No repositories returned. Connect GitHub via Composio to populate this list.', - 'settings.skillsRunner.repoPicker.notConnected': - 'GitHub isn’t connected via Composio. Connect it under Skills → Composio first.', - 'settings.skillsRunner.repoPicker.privateTag': '(private)', - 'settings.skillsRunner.branchPicker.needRepo': 'Pick a repo first…', - 'settings.skillsRunner.branchPicker.loading': 'Loading branches…', - 'settings.skillsRunner.branchPicker.select': 'Select a branch…', - 'settings.modelHealth.title': 'Model Health', - 'settings.modelHealth.desc': - 'Per-model quality, hallucination rate, and cost comparison across active models', - 'settings.modelHealth.allStatuses': 'All statuses', - 'settings.modelHealth.models': 'models', - 'settings.modelHealth.loading': 'Loading model data...', - 'settings.modelHealth.empty': 'No models registered', - 'settings.modelHealth.col.model': 'Model', - 'settings.modelHealth.col.quality': 'Quality', - 'settings.modelHealth.col.halluc': 'Halluc. Rate', - 'settings.modelHealth.col.cost': 'Cost / 1M out', - 'settings.modelHealth.col.agents': 'Agents', - 'settings.modelHealth.col.status': 'Status', - 'settings.modelHealth.badge.keep': 'Keep', - 'settings.modelHealth.badge.replace': 'Replace', - 'settings.modelHealth.badge.staging': 'Staging test', - 'settings.modelHealth.badge.vision': 'Vision only', - 'settings.modelHealth.swap': 'Swap?', - 'settings.modelHealth.modal.title': 'Replace Model?', - 'settings.modelHealth.modal.hallucRate': 'Hallucination rate', - 'settings.modelHealth.modal.cancel': 'Cancel', - 'settings.modelHealth.modal.apply': 'Apply Replacement', - 'settings.modelHealth.tag.cheaper': 'CHEAPER', - 'settings.modelHealth.tag.better': 'BETTER', - // Task sources (#task-sources) - 'settings.taskSources.title': 'Task Sources', - 'settings.taskSources.subtitle': 'Pull tasks from your tools onto the agent todo board', - 'settings.taskSources.description': - 'Collect work items from GitHub, Notion, Linear, and ClickUp, enrich them, and route them onto the agent todo board.', - 'settings.taskSources.connectHint': - 'Task sources use your connected accounts. Connect them under Integrations first.', - 'settings.taskSources.disabledBanner': - 'Task sources are disabled in settings. Enable them to poll automatically.', - 'settings.taskSources.loadError': 'Failed to load task sources', - 'settings.taskSources.addTitle': 'Add a task source', - 'settings.taskSources.provider': 'Provider', - 'settings.taskSources.name': 'Name (optional)', - 'settings.taskSources.namePlaceholder': 'e.g. My open issues', - 'settings.taskSources.github.repo': 'Repository (owner/name, optional)', - 'settings.taskSources.github.labels': 'Labels (comma-separated)', - 'settings.taskSources.notion.database': 'Database (board) ID', - 'settings.taskSources.linear.team': 'Team ID (optional)', - 'settings.taskSources.clickup.team': 'Workspace (team) ID (optional)', - 'settings.taskSources.assignedToMe': 'Only items assigned to me', - 'settings.taskSources.add': 'Add source', - 'settings.taskSources.adding': 'Adding…', - 'settings.taskSources.preview': 'Preview', - 'settings.taskSources.previewResult': '{count} task(s) match this filter', - 'settings.taskSources.fetchNow': 'Fetch now', - 'settings.taskSources.fetching': 'Fetching…', - 'settings.taskSources.fetchResult': 'Routed {routed} of {fetched} task(s)', - 'settings.taskSources.configured': 'Configured sources', - 'settings.taskSources.empty': 'No task sources configured yet.', - 'settings.taskSources.proactive': 'Proactive', - 'settings.taskSources.lastFetch': 'Last fetch', - 'settings.taskSources.never': 'Never', - 'settings.taskSources.statusEnabled': 'Enabled', - 'settings.taskSources.statusDisabled': 'Disabled', - 'settings.taskSources.enable': 'Enable', - 'settings.taskSources.disable': 'Disable', - 'settings.taskSources.remove': 'Remove', - 'settings.taskSources.removeConfirm': - 'Remove this task source? All ingested task history will be deleted and cannot be undone.', - - 'settings.taskSources.refresh': 'Refresh', - // Task sources provider labels (#task-sources) - 'settings.taskSources.providers.github': 'GitHub', - 'settings.taskSources.providers.notion': 'Notion', - 'settings.taskSources.providers.linear': 'Linear', - 'settings.taskSources.providers.clickup': 'ClickUp', - - // /skills IA restructure (Phase 2/3) — dashboard + new-skill page. - 'skills.dashboard.title': 'Skills', - 'skills.dashboard.scheduledHeading': 'Scheduled skills', - 'skills.dashboard.emptyTitle': 'No scheduled skills', - 'skills.dashboard.emptyBody': - 'Run a bundled skill once or save a recurring schedule to see it here.', - 'skills.dashboard.create': 'Create a Skill', - 'skills.dashboard.run': 'Run a Skill', - 'skills.dashboard.enable': 'Enable scheduled skill', - 'skills.dashboard.disable': 'Disable scheduled skill', - 'skills.dashboard.lastRun': 'Last run', - 'skills.dashboard.nextRun': 'Next run', - 'skills.dashboard.cardOpenRunner': 'Open in runner', - 'skills.dashboard.loadError': 'Failed to load scheduled skills', - 'skills.new.title': 'Create a skill', - 'skills.new.placeholderBody': - 'Authoring form arrives soon. For now, use the “New skill” button on the runner page.', - 'settings.agentAccess.requireTaskPlanApproval.label': 'Require task plan approval', - 'settings.agentAccess.requireTaskPlanApproval.desc': - 'Pause before an assigned agent executes an agent-authored task brief.', -}; - -export default ko5; diff --git a/app/src/lib/i18n/chunks/pl-1.ts b/app/src/lib/i18n/chunks/pl-1.ts deleted file mode 100644 index 9d6a45e87..000000000 --- a/app/src/lib/i18n/chunks/pl-1.ts +++ /dev/null @@ -1,1268 +0,0 @@ -import type { TranslationMap } from '../types'; -import en1 from './en-1'; - -// Polish chunk 1/5. Spreads the English source-of-truth chunk so every key is -// present (i18n parity gate); Polish values below override EN where translated. -// Missing/untranslated keys fall back to English via the spread. -const pl1: TranslationMap = { - ...en1, - // Navigation - 'nav.home': 'Start', - 'nav.human': 'Człowiek', - 'nav.chat': 'Czat', - 'nav.connections': 'Połączenia', - 'nav.memory': 'Inteligencja', - 'nav.alerts': 'Alerty', - 'nav.rewards': 'Nagrody', - 'nav.settings': 'Ustawienia', - // Common - 'common.cancel': 'Anuluj', - 'common.save': 'Zapisz', - 'common.confirm': 'Potwierdź', - 'common.delete': 'Usuń', - 'common.edit': 'Edytuj', - 'common.create': 'Utwórz', - 'common.search': 'Szukaj', - 'common.loading': 'ładowanie…', - 'common.error': 'Błąd', - 'common.success': 'Sukces', - 'common.back': 'Wstecz', - 'common.next': 'Dalej', - 'common.finish': 'Zakończ', - 'common.close': 'Zamknij', - 'common.enabled': 'Włączone', - 'common.disabled': 'Wyłączone', - 'common.on': 'Wł.', - 'common.off': 'Wył.', - 'common.yes': 'Tak', - 'common.no': 'Nie', - 'common.ok': 'OK', - 'common.name': 'Nazwa', - 'common.retry': 'Spróbuj ponownie', - 'common.copy': 'Kopiuj', - 'common.copied': 'Skopiowano', - 'common.learnMore': 'Dowiedz się więcej', - 'common.seeAll': 'Zobacz', - 'common.dismiss': 'Odrzuć', - 'common.clear': 'Wyczyść', - 'common.reset': 'Zresetuj', - 'common.refresh': 'Odśwież', - 'common.export': 'Eksportuj', - 'common.import': 'Importuj', - 'common.upload': 'Wgraj', - 'common.download': 'Pobierz', - 'common.add': 'Dodaj', - 'common.remove': 'Usuń', - 'common.showMore': 'Pokaż więcej', - 'common.showLess': 'Pokaż mniej', - 'common.submit': 'Wyślij', - 'common.continue': 'Kontynuuj', - 'common.comingSoon': 'Wkrótce', - // Welcome - 'welcome.title': 'Witaj w OpenHuman', - 'welcome.subtitle': 'Twoja osobista superinteligencja AI. Prywatna, prosta i niezwykle potężna.', - 'welcome.connectPrompt': 'Skonfiguruj URL RPC (zaawansowane)', - 'welcome.selectRuntime': 'Wybierz środowisko', - 'welcome.clearingAppData': 'Czyszczenie danych aplikacji...', - 'welcome.clearAppDataAndRestart': 'Wyczyść dane i uruchom ponownie', - 'welcome.signingIn': 'Logowanie...', - 'welcome.termsIntro': 'Kontynuując akceptujesz', - 'welcome.termsOfUse': 'Regulamin', - 'welcome.termsJoiner': 'oraz', - 'welcome.privacyPolicy': 'Politykę prywatności', - 'welcome.termsOutro': '.', - 'welcome.invalidUrl': 'Wpisz poprawny adres HTTP lub HTTPS', - 'welcome.connecting': 'Testowanie', - 'welcome.connect': 'Testuj', - // Home - 'home.greeting': 'Dzień dobry', - 'home.greetingAfternoon': 'Dobre popołudnie', - 'home.greetingEvening': 'Dobry wieczór', - 'home.askAssistant': 'Zapytaj asystenta o cokolwiek...', - 'home.restartCore': 'Uruchom ponownie rdzeń', - 'home.restartingCore': 'Restartowanie rdzenia…', - 'home.themeToggle.toLight': 'Przełącz na tryb jasny', - 'home.themeToggle.toDark': 'Przełącz na tryb ciemny', - 'home.usageExhaustedTitle': 'Wykorzystałeś swój limit', - 'home.usageExhaustedCta': 'Wykup subskrypcję', - 'home.routinesCard': 'Your Routines', - 'home.routinesActive': '{count} active', - 'routines.title': 'Your Routines', - 'routines.subtitle': 'Things your assistant does automatically', - 'routines.loading': 'Loading routines…', - 'routines.empty': 'No routines yet', - 'routines.emptyHint': - 'Your assistant can run tasks on a schedule — like morning briefings or daily summaries.', - 'routines.refresh': 'Refresh', - 'routines.nextRun': 'Next run', - 'routines.lastRunSuccess': 'Last run succeeded', - 'routines.lastRunFailed': 'Last run failed', - 'routines.notRunYet': 'Not run yet', - 'routines.runNow': 'Run Now', - 'routines.running': 'Running…', - 'routines.viewHistory': 'View history', - 'routines.loadingHistory': 'Loading…', - 'routines.noHistory': 'No run history yet.', - 'routines.statusSuccess': 'Success', - 'routines.statusError': 'Error', - 'routines.showOutput': 'Show output', - 'routines.hideOutput': 'Hide output', - 'routines.toggleEnabled': 'Enable or disable this routine', - 'routines.typeAgent': 'Agent', - 'routines.typeCommand': 'Command', - 'nav.routines': 'Routines', - // Chat - 'chat.newThread': 'Nowy wątek', - 'chat.typeMessage': 'Napisz wiadomość...', - 'chat.send': 'Wyślij wiadomość', - 'chat.thinking': 'Myślę...', - 'chat.noMessages': 'Brak wiadomości', - 'chat.startConversation': 'Rozpocznij rozmowę', - 'chat.regenerate': 'Wygeneruj ponownie', - 'chat.copyResponse': 'Skopiuj odpowiedź', - 'chat.citations': 'Cytowania', - 'chat.toolUsed': 'Użyte narzędzie', - 'chat.addReaction': 'Dodaj reakcję', - // Settings (top-level) - 'settings.general': 'Ogólne', - 'settings.featuresAndAI': 'Funkcje i AI', - 'settings.billingAndRewards': 'Rozliczenia i nagrody', - 'settings.support': 'Wsparcie', - 'settings.advanced': 'Zaawansowane', - 'settings.dangerZone': 'Strefa niebezpieczna', - 'settings.account': 'Konto', - 'settings.accountDesc': 'Fraza odzyskiwania, zespół, połączenia i prywatność', - 'settings.notifications': 'Powiadomienia', - 'settings.notificationsDesc': 'Tryb Nie przeszkadzać i ustawienia powiadomień dla każdego konta', - 'settings.features': 'Funkcje', - 'settings.featuresDesc': 'Świadomość ekranu, wiadomości i narzędzia', - 'settings.aiModels': 'AI i modele', - 'settings.aiModelsDesc': 'Konfiguracja lokalnych modeli AI, pobierania i dostawcy LLM', - 'settings.ai': 'Konfiguracja AI', - 'settings.aiDesc': 'Dostawcy chmurowi, modele Ollama lokalnie i routing per obciążenie', - 'settings.billingUsage': 'Rozliczenia i zużycie', - 'settings.billingUsageDesc': 'Plan subskrypcji, kredyty i metody płatności', - 'settings.rewards': 'Nagrody', - 'settings.rewardsDesc': 'Polecenia, kupony i zdobyte kredyty', - 'settings.restartTour': 'Uruchom przewodnik ponownie', - 'settings.restartTourDesc': 'Odtwórz wprowadzenie po produkcie od początku', - 'settings.about': 'O aplikacji', - 'settings.aboutDesc': 'Wersja aplikacji i aktualizacje oprogramowania', - 'settings.developerOptions': 'Zaawansowane', - 'settings.developerOptionsDesc': - 'Konfiguracja AI, kanały wiadomości, narzędzia, diagnostyka i panele debugowania', - 'settings.clearAppData': 'Wyczyść dane aplikacji', - 'settings.clearAppDataDesc': 'Wyloguj się i trwale wyczyść wszystkie lokalne dane aplikacji', - 'settings.logOut': 'Wyloguj się', - 'settings.logOutDesc': 'Wyloguj się ze swojego konta', - 'settings.exitLocalSession': 'Zakończ sesję lokalną', - 'settings.exitLocalSessionDesc': 'Wróć do ekranu logowania', - 'settings.language': 'Język', - 'settings.languageDesc': 'Język wyświetlania interfejsu aplikacji', - 'settings.alerts': 'Alerty', - 'settings.alertsDesc': 'Zobacz ostatnie alerty i aktywność w skrzynce odbiorczej', - 'settings.appearance': 'Wygląd', - 'settings.appearanceDesc': 'Wybierz tryb jasny, ciemny lub zgodny z systemem', - 'settings.mascot': 'Maskotka', - 'settings.mascotDesc': 'Wybierz kolor maskotki używany w aplikacji', - // Scope - 'scope.legacy': 'Legacy', - 'scope.user': 'Użytkownik', - 'scope.project': 'Projekt', - // Skills / Connections - 'skills.title': 'Połączenia', - 'skills.search': 'Szukaj połączeń...', - 'skills.noResults': 'Nie znaleziono połączeń', - 'skills.connect': 'Połącz', - 'skills.disconnect': 'Rozłącz', - 'skills.configure': 'Zarządzaj', - 'skills.connected': 'Połączone', - 'skills.available': 'Dostępne', - 'skills.addAccount': 'Dodaj konto', - 'skills.channels': 'Kanały', - 'skills.integrations': 'Integracje Composio', - 'skills.integrationsSubtitle': - 'Chmurowe połączenia OAuth — zaloguj się swoim kontem, a Composio pośredniczy w tokenach, dzięki czemu agenci mogą czytać i działać w Twoim imieniu. Bez kluczy API do utrzymywania.', - 'skills.composio.noApiKeyTitle': 'Brak skonfigurowanego klucza API Composio', - 'skills.composio.noApiKeyDescription': - 'W trybie lokalnym używany jest Twój własny klucz API Composio. Otwórz Ustawienia → Zaawansowane → Composio, aby dodać klucz przed podłączeniem tutaj integracji.', - 'skills.composio.noApiKeyCta': 'Otwórz ustawienia', - 'skills.tabs.composio': 'Composio', - 'skills.tabs.channels': 'Kanały', - 'skills.tabs.mcp': 'Serwery MCP', - 'skills.mcpComingSoon.title': 'Serwery MCP', - 'skills.mcpComingSoon.description': - 'Zarządzanie serwerami MCP pojawi się wkrótce. Ta zakładka będzie służyć do wyszukiwania, łączenia i monitorowania integracji z serwerami MCP.', - // Memory - 'memory.title': 'Pamięć', - 'memory.search': 'Szukaj w pamięci...', - 'memory.noResults': 'Nie znaleziono wspomnień', - 'memory.empty': - 'Brak wspomnień. Wspomnienia powstają automatycznie podczas korzystania z aplikacji.', - 'memory.tab.memory': 'Pamięć', - 'memory.tab.subconscious': 'Podświadomość', - 'memory.tab.dreams': 'Marzenia senne', - 'memory.tab.calls': 'Połączenia', - 'memory.tab.settings': 'Ustawienia', - 'memory.analyzeNow': 'Analizuj teraz', - // Alerts - 'alerts.title': 'Alerty', - 'alerts.empty': 'Brak alertów', - 'alerts.markAllRead': 'Oznacz wszystkie jako przeczytane', - 'alerts.unread': 'nieprzeczytane', - // Rewards - 'rewards.title': 'Nagrody', - 'rewards.referrals': 'Polecenia', - 'rewards.coupons': 'Wykorzystaj', - 'rewards.localUnavailable': - 'Logowanie lokalne nie zbiera nagród, kuponów ani środków z poleceń. Aby zdobywać nagrody, wyloguj się i kontynuuj logując się kontem OpenHuman.', - 'rewards.localUnavailableCta': 'Otwórz ustawienia konta', - 'rewards.credits': 'Kredyty', - 'rewards.referralCode': 'Twój kod polecający', - 'rewards.copyCode': 'Skopiuj kod', - 'rewards.share': 'Udostępnij', - // Accounts - 'accounts.addAccount': 'Dodaj konto', - 'accounts.manageAccounts': 'Zarządzaj kontami', - 'accounts.noAccounts': 'Brak podłączonych kont', - 'accounts.connectAccount': 'Podłącz konto, aby zacząć', - 'accounts.agent': 'Agent', - 'accounts.respondQueue': 'Kolejka odpowiedzi', - 'accounts.disconnect': 'Rozłącz', - 'accounts.disconnectConfirm': 'Czy na pewno rozłączyć to konto?', - 'accounts.disconnectClearMemory': 'Usuń też pamięć z tego źródła', - 'accounts.disconnectClearMemoryHint': - 'Trwale usuwa lokalne fragmenty pamięci powiązane z tym połączeniem.', - 'accounts.searchAccounts': 'Szukaj kont...', - // Channels - 'channels.title': 'Kanały', - 'channels.configure': 'Skonfiguruj kanał', - 'channels.setup': 'Konfiguracja', - 'channels.noChannels': 'Brak skonfigurowanych kanałów', - 'channels.localManagedUnavailable': - 'Kanały zarządzane są niedostępne dla użytkowników lokalnych.', - 'channels.addChannel': 'Dodaj kanał', - 'channels.status.connected': 'Połączony', - 'channels.status.disconnected': 'Rozłączony', - 'channels.status.error': 'Błąd', - 'channels.status.configuring': 'Konfigurowanie', - 'channels.defaultMessaging': 'Domyślny kanał wiadomości', - 'channels.fieldRequired': 'Pole {field} jest wymagane', - 'channels.authMode.managed_dm': 'Zaloguj się z OpenHuman', - 'channels.authMode.oauth': 'Logowanie OAuth', - 'channels.authMode.bot_token': 'Użyj własnego tokena bota', - 'channels.authMode.api_key': 'Użyj własnego klucza API', - 'channels.mcp.title': 'Serwery MCP', - 'channels.mcp.description': - 'Przeglądaj serwery Model Context Protocol i zarządzaj nimi, aby rozszerzyć AI o nowe narzędzia.', - // Webhooks - 'webhooks.title': 'Webhooki', - 'webhooks.create': 'Utwórz webhook', - 'webhooks.noWebhooks': 'Brak skonfigurowanych webhooków', - 'webhooks.url': 'URL', - 'webhooks.secret': 'Sekret', - 'webhooks.events': 'Zdarzenia', - 'webhooks.archiveDirectory': 'Katalog archiwum', - 'webhooks.todayFile': 'Dzisiejszy plik', - // Invites - 'invites.title': 'Zaproszenia', - 'invites.create': 'Utwórz zaproszenie', - 'invites.noInvites': 'Brak oczekujących zaproszeń', - 'invites.code': 'Kod zaproszenia', - 'invites.copyLink': 'Skopiuj link', - 'invites.generate': 'Wygeneruj zaproszenie', - 'invites.generating': 'Generowanie...', - 'invites.refreshing': 'Odświeżanie zaproszeń...', - 'invites.loading': 'Ładowanie zaproszeń...', - 'invites.copyCodeAria': 'Skopiuj kod zaproszenia', - 'invites.revokeAria': 'Unieważnij zaproszenie', - 'invites.usedUp': 'Wykorzystane', - 'invites.uses': 'Wykorzystania: {current}{max}', - 'invites.expiresOn': 'Wygasa {date}', - 'invites.empty': 'Brak zaproszeń', - 'invites.emptyHint': 'Wygeneruj kod zaproszenia, aby udostępnić go innym', - 'invites.revokeTitle': 'Unieważnij kod zaproszenia', - 'invites.revokePromptPrefix': 'Czy na pewno unieważnić kod zaproszenia', - 'invites.revokeWarning': - 'Ten kod nie będzie już ważny i nie można go będzie użyć, aby dołączyć do zespołu.', - 'invites.revoking': 'Unieważnianie...', - 'invites.revokeAction': 'Unieważnij zaproszenie', - 'invites.failedGenerate': 'Nie udało się wygenerować zaproszenia', - 'invites.failedRevoke': 'Nie udało się unieważnić zaproszenia', - // Team - 'team.members': 'Członkowie', - 'team.membersDesc': 'Zarządzaj członkami zespołu i ich rolami', - 'team.invites': 'Zaproszenia', - 'team.invitesDesc': 'Generuj kody zaproszeń i zarządzaj nimi', - 'team.settings': 'Ustawienia zespołu', - 'team.settingsDesc': 'Edytuj nazwę i ustawienia zespołu', - 'team.editSettings': 'Edytuj ustawienia zespołu', - 'team.enterName': 'Wpisz nazwę zespołu', - 'team.saving': 'Zapisywanie...', - 'team.saveChanges': 'Zapisz zmiany', - 'team.delete': 'Usuń zespół', - 'team.deleteDesc': 'Trwale usuń ten zespół', - 'team.deleting': 'Usuwanie...', - 'team.failedToUpdate': 'Nie udało się zaktualizować zespołu', - 'team.failedToDelete': 'Nie udało się usunąć zespołu', - 'team.manageTitle': 'Zarządzaj zespołem {name}', - 'team.planCreated': 'Plan {plan} • Utworzono {date}', - 'team.confirmDelete': 'Czy na pewno usunąć {name}?', - 'team.deleteWarning': - 'Tej operacji nie można cofnąć. Wszystkie dane zespołu zostaną trwale usunięte.', - 'team.refreshingMembers': 'Odświeżanie członków...', - 'team.loadingMembers': 'Ładowanie członków...', - 'team.memberCount': '{count} członek', - 'team.memberCountPlural': '{count} członków', - 'team.you': '(Ty)', - 'team.removeAria': 'Usuń {name}', - 'team.noMembers': 'Nie znaleziono członków', - 'team.removeTitle': 'Usuń członka zespołu', - 'team.removePromptPrefix': 'Czy na pewno usunąć', - 'team.removePromptSuffix': 'z zespołu?', - 'team.removeWarning': 'Utracą dostęp do zespołu i wszystkich jego zasobów.', - 'team.removing': 'Usuwanie...', - 'team.removeAction': 'Usuń członka', - 'team.changeRoleTitle': 'Zmień rolę członka', - 'team.changeRolePrompt': 'Zmienić rolę użytkownika {name} z {oldRole} na {newRole}?', - 'team.changeRoleAdminGrant': - 'Nadasz pełne uprawnienia administratora, w tym możliwość zarządzania członkami zespołu.', - 'team.changeRoleAdminRemove': - 'Odbierzesz uprawnienia administratora i osoba ta nie będzie mogła zarządzać zespołem.', - 'team.changing': 'Zmienianie...', - 'team.changeRoleAction': 'Zmień rolę', - 'team.failedChangeRole': 'Nie udało się zmienić roli', - 'team.failedRemoveMember': 'Nie udało się usunąć członka', - // Onboarding - 'onboarding.welcome': 'Cześć. Jestem OpenHuman.', - 'onboarding.welcomeDesc': - 'Twój superinteligentny asystent AI uruchomiony na Twoim komputerze. Prywatny, prosty i niezwykle potężny.', - 'onboarding.context': 'Zbieranie kontekstu', - 'onboarding.contextDesc': 'Połącz narzędzia i usługi, z których korzystasz na co dzień.', - 'onboarding.localAI': 'Lokalne AI', - 'onboarding.localAIDesc': 'Skonfiguruj lokalny model AI uruchomiony na Twoim komputerze.', - 'onboarding.chatProvider': 'Dostawca czatu', - 'onboarding.chatProviderDesc': 'Wybierz, jak chcesz wchodzić w interakcje z asystentem.', - 'onboarding.referral': 'Polecenie', - 'onboarding.referralDesc': 'Wpisz kod polecający, jeśli go masz.', - 'onboarding.finish': 'Zakończ konfigurację', - 'onboarding.finishDesc': 'Gotowe! Zacznij korzystać z OpenHuman.', - 'onboarding.skip': 'Pomiń', - 'onboarding.getStarted': 'Rozpocznij', - 'onboarding.runtimeChoice.title': 'Jak chcesz uruchomić OpenHuman?', - 'onboarding.runtimeChoice.subtitle': - 'Wybierz, jak dużą część OpenHuman ma obsłużyć za Ciebie. Możesz to zmienić później w Ustawieniach.', - 'onboarding.runtimeChoice.cloud.title': 'Prosto', - 'onboarding.runtimeChoice.cloud.tagline': - 'Korzystaj z logowania OpenHuman, routingu modeli, wyszukiwarki i zarządzanych integracji.', - 'onboarding.runtimeChoice.cloud.f1': 'OAuth i routing modeli pośredniczone przez backend', - 'onboarding.runtimeChoice.cloud.f2': 'Kompresja tokenów, aby wydłużyć Twój limit', - 'onboarding.runtimeChoice.cloud.f3': 'Jedna subskrypcja, każdy model w komplecie', - 'onboarding.runtimeChoice.cloud.f4': - 'Brak kluczy modeli, wyszukiwarki i Composio do utrzymywania', - 'onboarding.runtimeChoice.cloud.f5': 'Lokalne drzewo pamięci, zarządzane usługi sieciowe', - 'onboarding.runtimeChoice.custom.title': 'Niestandardowo', - 'onboarding.runtimeChoice.custom.tagline': - 'Przynieś własne klucze. Wybierz, które usługi OpenHuman ma wywoływać.', - 'onboarding.runtimeChoice.custom.f1': 'Będziesz potrzebować kluczy API do prawie wszystkiego', - 'onboarding.runtimeChoice.custom.f2': 'Korzysta z usług, za które już płacisz', - 'onboarding.runtimeChoice.custom.f3': 'Trzyma obsługiwane obciążenia na Twoim komputerze', - 'onboarding.runtimeChoice.custom.f4': 'Więcej konfiguracji, więcej pokręteł', - 'onboarding.runtimeChoice.custom.f5': 'Najlepsze dla zaawansowanych użytkowników i deweloperów', - 'onboarding.runtimeChoice.cloud.creditHighlight': '1 USD darmowych kredytów na start', - 'onboarding.runtimeChoice.continueCloud': 'Kontynuuj w trybie Prosto', - 'onboarding.runtimeChoice.continueCustom': 'Kontynuuj w trybie Niestandardowo', - 'onboarding.runtimeChoice.recommended': 'Polecane', - 'onboarding.apiKeys.title': 'Dodajmy Twoje klucze API', - 'onboarding.apiKeys.subtitle': - 'Możesz wkleić je teraz lub pominąć i dodać później w Ustawieniach › AI. Klucze są przechowywane na tym urządzeniu, zaszyfrowane w spoczynku.', - 'onboarding.apiKeys.openaiLabel': 'Klucz API OpenAI', - 'onboarding.apiKeys.openaiPlaceholder': 'sk-...', - 'onboarding.apiKeys.anthropicLabel': 'Klucz API Anthropic', - 'onboarding.apiKeys.anthropicPlaceholder': 'sk-ant-...', - 'onboarding.apiKeys.saveError': - 'Nie udało się zapisać tego klucza. Sprawdź go i spróbuj ponownie.', - 'onboarding.apiKeys.skipForNow': 'Pomiń na razie', - 'onboarding.apiKeys.continue': 'Zapisz i kontynuuj', - 'onboarding.apiKeys.saving': 'Zapisywanie…', - 'onboarding.custom.stepperInference': 'Inferencja', - 'onboarding.custom.stepperVoice': 'Głos', - 'onboarding.custom.stepperOAuth': 'OAuth', - 'onboarding.custom.stepperSearch': 'Wyszukiwarka', - 'onboarding.custom.stepperEmbeddings': 'Embeddings', - 'onboarding.custom.stepperMemory': 'Pamięć', - 'onboarding.custom.stepCounter': 'Krok {n} z {total}', - 'onboarding.custom.defaultTitle': 'Domyślnie', - 'onboarding.custom.defaultSubtitle': 'Niech OpenHuman zarządza tym za Ciebie.', - 'onboarding.custom.configureTitle': 'Skonfiguruj', - 'onboarding.custom.configureSubtitle': 'Wybiorę sam, co użyć.', - 'onboarding.custom.progressAriaLabel': 'Postęp konfiguracji', - 'onboarding.custom.continue': 'Kontynuuj', - 'onboarding.custom.back': 'Wstecz', - 'onboarding.custom.finish': 'Zakończ konfigurację', - 'onboarding.custom.configureLater': - 'Możesz dokończyć konfigurację po wprowadzeniu. Przeniesiemy Cię na odpowiednią stronę Ustawień, kiedy skończysz.', - 'onboarding.custom.openSettings': 'Otwórz w Ustawieniach', - 'onboarding.custom.inference.title': 'Inferencja (tekst)', - 'onboarding.custom.inference.subtitle': - 'Który model językowy ma odpowiadać na pytania i uruchamiać agentów?', - 'onboarding.custom.inference.defaultDesc': - 'OpenHuman domyślnie kieruje obciążenia przez zarządzany backend. Bez kluczy, bez konfiguracji.', - 'onboarding.custom.inference.configureDesc': - 'Przynieś własny klucz OpenAI lub Anthropic. Użyjemy go do każdego obciążenia tekstowego.', - 'onboarding.custom.voice.title': 'Głos', - 'onboarding.custom.voice.subtitle': 'Mowa na tekst i tekst na mowę dla trybu głosowego.', - 'onboarding.custom.voice.defaultDesc': - 'OpenHuman dostarcza zarządzanych dostawców STT/TTS, którzy mogą wysyłać audio/tekst do usług hostowanych.', - 'onboarding.custom.voice.configureDesc': - 'Użyj własnego ElevenLabs / OpenAI Whisper itp. Skonfiguruj w Ustawieniach › Głos.', - 'onboarding.custom.oauth.title': 'Połączenia (OAuth)', - 'onboarding.custom.oauth.subtitle': - 'Gmail, Slack, Notion i inne podłączone usługi, które wymagają OAuth.', - 'onboarding.custom.oauth.defaultDesc': - 'OpenHuman pośredniczy w OAuth i wywołaniach narzędzi przez zarządzaną przestrzeń Composio.', - 'onboarding.custom.oauth.configureDesc': - 'Przynieś własne konto / klucz API Composio. Skonfiguruj w Ustawieniach › Połączenia.', - 'onboarding.custom.search.title': 'Wyszukiwanie w sieci', - 'onboarding.custom.search.subtitle': 'Jak OpenHuman wyszukuje w sieci w Twoim imieniu.', - 'onboarding.custom.search.defaultDesc': - 'OpenHuman domyślnie używa zarządzanego proxy wyszukiwarki. Klucz API niepotrzebny.', - 'onboarding.custom.search.configureDesc': - 'Przynieś własny klucz dostawcy (Tavily, Brave itp.). Skonfiguruj w Ustawieniach › Narzędzia.', - 'onboarding.custom.embeddings.title': 'Embeddings', - 'onboarding.custom.embeddings.subtitle': - 'Jak OpenHuman generuje wektory embeddings na potrzeby wyszukiwania semantycznego.', - 'onboarding.custom.embeddings.defaultDesc': - 'OpenHuman używa zarządzanej usługi embeddings. Klucz API niepotrzebny.', - 'onboarding.custom.embeddings.configureDesc': - 'Przynieś własnego dostawcę embeddings (OpenAI, Voyage, Ollama itp.).', - 'onboarding.custom.memory.title': 'Pamięć', - 'onboarding.custom.memory.subtitle': - 'Jak OpenHuman zapamiętuje Twój kontekst, preferencje i wcześniejsze rozmowy.', - 'onboarding.custom.memory.defaultDesc': - 'OpenHuman zarządza pamięcią automatycznie. Nic do skonfigurowania.', - 'onboarding.custom.memory.configureDesc': - 'Przeglądaj, eksportuj lub czyść pamięć samodzielnie. Skonfiguruj w Ustawieniach › Pamięć.', - 'onboarding.skipForNow': 'Pomiń na razie', - 'onboarding.localAI.continueWithCloud': 'Kontynuuj z chmurą', - 'onboarding.localAI.useLocalAnyway': - 'Użyj lokalnego AI mimo to (niezalecane dla Twojego urządzenia)', - 'onboarding.localAI.useLocalInstead': 'Użyj lokalnego AI (połącz Ollama teraz)', - 'onboarding.localAI.setupIssue': 'Konfiguracja lokalnego AI napotkała problem', - // Clear data - 'clearData.title': 'Wyczyść dane aplikacji', - 'clearData.warning': 'To wyloguje Cię i trwale usunie lokalne dane aplikacji, w tym:', - 'clearData.bulletSettings': 'Ustawienia aplikacji i rozmowy', - 'clearData.bulletCache': 'Wszystkie lokalne dane cache integracji', - 'clearData.bulletWorkspace': 'Dane przestrzeni roboczej', - 'clearData.bulletOther': 'Wszystkie pozostałe dane lokalne', - 'clearData.irreversible': 'Tej operacji nie można cofnąć.', - 'clearData.clearing': 'Czyszczenie danych aplikacji...', - 'clearData.failed': 'Nie udało się wyczyścić danych i wylogować. Spróbuj ponownie.', - 'clearData.failedLogout': 'Nie udało się wylogować. Spróbuj ponownie.', - 'clearData.failedPersist': - 'Nie udało się wyczyścić utrwalonego stanu aplikacji. Spróbuj ponownie.', - // Mnemonic - 'mnemonic.title': 'Fraza odzyskiwania', - 'mnemonic.warning': 'Zapisz te słowa w kolejności i przechowuj je w bezpiecznym miejscu.', - 'mnemonic.copyWarning': - 'Nigdy nie udostępniaj swojej frazy odzyskiwania. Każdy, kto ma te słowa, może uzyskać dostęp do Twojego konta.', - 'mnemonic.copied': 'Fraza odzyskiwania skopiowana do schowka', - 'mnemonic.reveal': 'Pokaż frazę', - 'mnemonic.revealPhrase': 'Pokaż frazę odzyskiwania', - 'mnemonic.hidden': 'Fraza odzyskiwania jest ukryta', - // Privacy - 'privacy.title': 'Prywatność i bezpieczeństwo', - 'privacy.description': 'Raport o danych wysyłanych do usług zewnętrznych.', - 'privacy.empty': 'Nie wykryto żadnych zewnętrznych transferów danych.', - 'privacy.whatLeavesComputer': 'Co opuszcza Twój komputer', - 'privacy.loading': 'Ładowanie szczegółów prywatności...', - 'privacy.loadError': - 'Nie udało się załadować listy prywatności. Kontrolki analityki poniżej nadal działają.', - 'privacy.noCapabilities': 'Żadna funkcja obecnie nie ujawnia ruchu danych.', - 'privacy.sentTo': 'Wysłano do', - 'privacy.leavesDevice': 'Opuszcza urządzenie', - 'privacy.staysLocal': 'Zostaje lokalnie', - 'privacy.anonymizedAnalytics': 'Anonimowa analityka', - 'privacy.shareAnonymizedData': 'Udostępniaj anonimowe dane o użytkowaniu', - 'privacy.shareAnonymizedDataDesc': - 'Pomóż ulepszać OpenHuman, udostępniając anonimowe raporty awarii i analitykę użytkowania. Wszystkie dane są w pełni anonimowe — nigdy nie zbieramy danych osobowych, wiadomości, kluczy portfela ani informacji o sesji.', - 'privacy.meetingFollowUps': 'Działania po spotkaniach', - 'privacy.autoHandoffMeet': 'Automatycznie przekazuj transkrypcje Google Meet do orchestratora', - 'privacy.autoHandoffMeetDesc': - 'Gdy spotkanie Google Meet się kończy, orchestrator OpenHuman może odczytać transkrypcję i wykonać akcje, np. przygotować wiadomości, zaplanować działania lub opublikować podsumowanie w podłączonym workspace Slack. Domyślnie wyłączone.', - 'privacy.analyticsDisclaimer': - 'Wszystkie raporty analityczne i błędów są w pełni anonimowe. Po włączeniu zbieramy informacje o awariach i typie urządzenia (Sentry) oraz anonimową analitykę (Google Analytics — odsłony, używane funkcje). Nigdy nie uzyskujemy dostępu do Twoich wiadomości, danych sesji, kluczy portfela, kluczy API ani danych osobowych. Możesz zmienić to ustawienie w dowolnym momencie.', - // Misc - 'misc.rehydrating': 'Ładowanie danych...', - 'misc.checkingServices': 'Sprawdzanie usług...', - 'misc.serviceUnavailable': 'Usługa niedostępna', - 'misc.somethingWentWrong': 'Coś poszło nie tak', - 'misc.tryAgainLater': 'Spróbuj ponownie później.', - 'misc.restartApp': 'Uruchom ponownie aplikację', - 'misc.updateAvailable': 'Dostępna aktualizacja', - 'misc.updateNow': 'Aktualizuj teraz', - 'misc.updateLater': 'Później', - 'misc.downloading': 'Pobieranie...', - 'misc.installing': 'Instalowanie...', - 'misc.beta': - 'OpenHuman jest we wczesnej fazie beta. Chętnie poznamy Twoje uwagi — każdy zgłoszony błąd pomaga nam szybciej wydać poprawki.', - 'misc.betaFeedback': 'Wyślij uwagi', - // Dev options - 'devOptions.title': 'Zaawansowane', - 'devOptions.diagnostics': 'Diagnostyka', - 'devOptions.diagnosticsDesc': 'Zdrowie systemu, logi i metryki wydajności', - 'devOptions.toolPolicyDiagnosticsDesc': - 'Tool inventory, policy posture, MCP allowlists, and recent blocks', - 'devOptions.toolPolicyDiagnostics.loading': 'Loading…', - 'devOptions.toolPolicyDiagnostics.unavailable': 'Diagnostics unavailable', - 'devOptions.toolPolicyDiagnostics.posture.title': 'Policy posture', - 'devOptions.toolPolicyDiagnostics.posture.autonomy': 'Autonomy:', - 'devOptions.toolPolicyDiagnostics.posture.workspaceOnly': 'Workspace only:', - 'devOptions.toolPolicyDiagnostics.posture.maxActionsPerHour': 'Max actions/hr:', - 'devOptions.toolPolicyDiagnostics.posture.approvalMediumRisk': 'Approval (medium risk):', - 'devOptions.toolPolicyDiagnostics.posture.blockHighRisk': 'Block high risk:', - 'devOptions.toolPolicyDiagnostics.inventory.title': 'Inventory', - 'devOptions.toolPolicyDiagnostics.inventory.totalTools': 'Total tools', - 'devOptions.toolPolicyDiagnostics.inventory.enabledTools': 'Enabled tools', - 'devOptions.toolPolicyDiagnostics.inventory.mcpStdioTools': 'MCP stdio tools', - 'devOptions.toolPolicyDiagnostics.inventory.jsonRpcTools': 'JSON-RPC tools', - 'devOptions.toolPolicyDiagnostics.mcpAllowlists.title': 'MCP allowlists', - 'devOptions.toolPolicyDiagnostics.mcpAllowlists.summary': - 'Enabled: {enabled} · Servers: {enabledCount}/{totalCount}', - 'devOptions.toolPolicyDiagnostics.mcpAllowlists.unnamed': '', - 'devOptions.toolPolicyDiagnostics.mcpAllowlists.allowDeny': 'allow={allowCount} deny={denyCount}', - 'devOptions.toolPolicyDiagnostics.mcpWriteAudit.title': 'MCP write audit', - 'devOptions.toolPolicyDiagnostics.mcpWriteAudit.summary': - 'Enabled: {enabled} · Recent (24h): {recentRows}', - 'devOptions.toolPolicyDiagnostics.recentBlocked.title': 'Recent blocked calls', - 'devOptions.toolPolicyDiagnostics.recentBlocked.empty': 'No blocked calls recorded.', - 'devOptions.toolPolicyDiagnostics.redactedSurfaces.title': 'Redacted surfaces', - 'devOptions.toolPolicyDiagnostics.redactedSurfaces.summary': - 'Write-capable: {writeCount} · Policy surfaces: {policyCount}', - 'devOptions.debugPanels': 'Panele debugowania', - 'devOptions.debugPanelsDesc': 'Feature flagi, inspekcja stanu i narzędzia debugowania', - 'devOptions.webhooks': 'Webhooki', - 'devOptions.webhooksDesc': 'Konfiguruj i testuj integracje webhooków', - 'devOptions.memoryInspection': 'Inspekcja pamięci', - 'devOptions.memoryInspectionDesc': 'Przeglądaj, odpytuj i zarządzaj wpisami pamięci', - // Settings about - 'settings.about.version': 'Wersja', - 'settings.about.updateAvailable': 'jest dostępna', - 'settings.about.softwareUpdates': 'Aktualizacje oprogramowania', - 'settings.about.lastChecked': 'Ostatnio sprawdzone', - 'settings.about.checking': 'Sprawdzanie...', - 'settings.about.checkForUpdates': 'Sprawdź aktualizacje', - 'settings.about.releases': 'Wydania', - 'settings.about.releasesDesc': - 'Przeglądaj notatki o wydaniach i wcześniejsze buildy na GitHubie.', - 'settings.about.openReleases': 'Otwórz wydania na GitHubie', - 'settings.about.connection': 'Połączenie', - 'settings.about.connectionMode': 'Tryb', - 'settings.about.connectionModeLocal': 'Lokalny', - 'settings.about.connectionModeCloud': 'Chmura', - 'settings.about.connectionModeUnset': 'Nie wybrano', - 'settings.about.serverUrl': 'URL serwera', - 'settings.about.serverUrlUnavailable': 'Niedostępny', - 'settings.about.connectionHelperLocal': - 'Uruchomiony w procesie przez powłokę Tauri przy starcie aplikacji. Port wybierany jest przy każdym starcie, więc URL zmienia się między uruchomieniami.', - 'settings.about.connectionHelperCloud': - 'Połączono ze zdalnym rdzeniem. Zmień to w BootCheck lub w wyborze trybu chmury.', - // Devices - 'devices.betaBadge': 'Beta', - 'devices.betaText': - 'Ta funkcja jest obecnie w fazie beta. Sparuj iPhone z tą instalacją OpenHuman, aby używać go jako zdalnego klienta.', - 'devices.comingSoonDescription': - 'Parowanie urządzeń pojawi się wkrótce. Ta strona będzie służyć do parowania iPhone’ów i zarządzania połączonymi urządzeniami.', - 'devices.title': 'Urządzenia', - 'devices.pairIphone': 'Sparuj iPhone', - 'devices.noPaired': 'Brak sparowanych urządzeń', - 'devices.emptyState': 'Zeskanuj kod QR w aplikacji iPhone, aby połączyć go z tą sesją OpenHuman.', - 'devices.devicePairedTitle': 'Urządzenie sparowane', - 'devices.devicePairedMessage': 'iPhone został pomyślnie podłączony.', - 'devices.deviceRevokedTitle': 'Urządzenie unieważnione', - 'devices.deviceRevokedMessage': 'Usunięto {label}.', - 'devices.revokeFailedTitle': 'Nie udało się unieważnić', - 'devices.online': 'Online', - 'devices.offline': 'Offline', - 'devices.lastSeenNever': 'Nigdy', - 'devices.lastSeenNow': 'Przed chwilą', - 'devices.lastSeenMinutes': '{count} min temu', - 'devices.lastSeenHours': '{count} godz. temu', - 'devices.lastSeenDays': '{count} dni temu', - 'devices.revoke': 'Unieważnij', - 'devices.revokeAria': 'Unieważnij {label}', - 'devices.confirmRevokeTitle': 'Unieważnić urządzenie?', - 'devices.confirmRevokeBody': - '{label} nie będzie już mogło się łączyć. Tej operacji nie można cofnąć.', - 'devices.loadFailed': 'Nie udało się załadować urządzeń: {message}', - 'devices.pairModal.title': 'Sparuj iPhone', - 'devices.pairModal.loading': 'Generowanie kodu parowania…', - 'devices.pairModal.instructions': 'Otwórz aplikację OpenHuman na iPhone i zeskanuj ten kod.', - 'devices.pairModal.expiresIn': 'Kod wygasa za ~{count} minutę', - 'devices.pairModal.expiresInPlural': 'Kod wygasa za ~{count} minut', - 'devices.pairModal.showDetails': 'Pokaż szczegóły', - 'devices.pairModal.hideDetails': 'Ukryj szczegóły', - 'devices.pairModal.channelId': 'ID kanału', - 'devices.pairModal.pairingUrl': 'URL parowania', - 'devices.pairModal.expiredTitle': 'Kod QR wygasł', - 'devices.pairModal.expiredBody': 'Wygeneruj nowy kod, aby kontynuować parowanie.', - 'devices.pairModal.generateNewCode': 'Wygeneruj nowy kod', - 'devices.pairModal.successTitle': 'Sparowano z iPhone', - 'devices.pairModal.autoClose': 'Automatyczne zamykanie…', - 'devices.pairModal.errorPrefix': 'Nie udało się utworzyć parowania: {message}', - 'devices.pairModal.errorTitle': 'Coś poszło nie tak', - 'devices.pairModal.copyUrl': 'Skopiuj', - // Autonomy - 'autonomy.title': 'Autonomia agenta', - 'autonomy.maxActionsLabel': 'Maks. akcji na godzinę', - 'autonomy.maxActionsHelp': - 'Maksymalna liczba akcji narzędzi, którą agent może uruchomić w ciągu kolejnej godziny. Nowa wartość obowiązuje od następnego czatu. Zadania cron i nasłuchy kanałów zachowują dotychczasowy limit do restartu OpenHuman.', - 'autonomy.statusSaving': 'Zapisywanie…', - 'autonomy.statusSaved': 'Zapisano.', - 'autonomy.statusFailed': 'Niepowodzenie', - 'autonomy.unlimitedNote': 'Bez limitu — ograniczenia tempa wyłączone.', - 'autonomy.invalidIntegerMsg': - 'Musi być dodatnią liczbą całkowitą (użyj presetu Bez limitu, aby usunąć limit).', - 'autonomy.presetUnlimited': 'Bez limitu (domyślnie)', - // Triggers - 'triggers.toggleFailed': 'Nie udało się: {action} dla {trigger}: {message}', - // iOS Pair - 'iosPair.title': 'Sparuj z komputerem', - 'iosPair.instructions': - 'Otwórz OpenHuman na komputerze, przejdź do Ustawienia > Urządzenia i kliknij „Sparuj telefon”, aby pokazać kod QR.', - 'iosPair.scanQrCode': 'Zeskanuj kod QR', - 'iosPair.scannerOpening': 'Otwieranie skanera...', - 'iosPair.connecting': 'Łączenie z komputerem...', - 'iosPair.connectedLoading': 'Połączono! Ładowanie...', - 'iosPair.expired': 'Kod QR wygasł. Poproś komputer o wygenerowanie nowego.', - 'iosPair.desktopLabel': 'Komputer', - 'iosPair.retryScan': 'Skanuj ponownie', - 'iosPair.step.openDesktop': 'Otwórz OpenHuman na komputerze', - 'iosPair.step.openSettings': 'Przejdź do Ustawienia > Urządzenia', - 'iosPair.step.showQr': 'Kliknij „Sparuj telefon”, aby pokazać kod QR', - 'iosPair.error.camera': - 'Skanowanie kamerą nieudane. Sprawdź uprawnienia do kamery i spróbuj ponownie.', - 'iosPair.error.invalidQr': - 'Nieprawidłowy kod QR. Upewnij się, że skanujesz kod parowania OpenHuman.', - 'iosPair.error.unreachableDesktop': - 'Nie udało się dotrzeć do komputera. Upewnij się, że oba urządzenia są online i spróbuj ponownie.', - 'iosPair.error.connectionFailed': - 'Połączenie nieudane. Upewnij się, że aplikacja na komputerze działa i spróbuj ponownie.', - // iOS Mascot - 'iosMascot.defaultPairedLabel': 'Komputer', - 'iosMascot.connectedTo': 'Połączono z', - 'iosMascot.disconnect': 'Rozłącz', - 'iosMascot.pushToTalk': 'Naciśnij i mów', - 'iosMascot.thinking': 'Myślę...', - 'iosMascot.typeMessage': 'Napisz wiadomość...', - 'iosMascot.sendMessage': 'Wyślij wiadomość', - 'iosMascot.error.generic': 'Coś poszło nie tak. Spróbuj ponownie.', - 'iosMascot.error.sendFailed': 'Nie udało się wysłać. Sprawdź połączenie.', - // Voice - 'voice.pushToTalk': 'Naciśnij i mów', - 'voice.recording': 'Nagrywanie...', - 'voice.processing': 'Przetwarzanie...', - 'voice.languageHint': 'Język', - 'voice.failedToLoadSettings': 'Nie udało się załadować ustawień głosu', - 'voice.failedToSaveSettings': 'Nie udało się zapisać ustawień głosu', - 'voice.failedToStartServer': 'Nie udało się uruchomić serwera głosu', - 'voice.failedToStopServer': 'Nie udało się zatrzymać serwera głosu', - 'voice.sttDisabledPrefix': - 'Dyktowanie głosem jest wyłączone, dopóki nie zostanie pobrany lokalny model STT. Użyj sekcji', - 'voice.sttDisabledSuffix': 'powyżej, aby zainstalować Whisper.', - 'voice.providers.title': 'Dostawcy głosu', - 'voice.providers.desc': - 'Wybierz, gdzie ma działać transkrypcja i synteza. Użyj przycisków „Zainstaluj lokalnie”, aby pobrać binarki i modele do przestrzeni roboczej. Lokalnych dostawców można zapisać przed zakończeniem instalacji — bez ręcznego ustawiania WHISPER_BIN czy PIPER_BIN.', - 'voice.providers.sttProvider': 'Dostawca mowy na tekst', - 'voice.providers.cloudWhisperProxy': 'Chmura (proxy Whisper)', - 'voice.providers.localWhisper': 'Whisper lokalnie', - 'voice.providers.installRequired': ' (wymagana instalacja)', - 'voice.providers.whisperInstalledTitle': - 'Whisper jest zainstalowany. Kliknij, aby zainstalować ponownie.', - 'voice.providers.whisperDownloadTitle': - 'Pobierz whisper.cpp i model GGML do przestrzeni roboczej.', - 'voice.providers.installed': 'Zainstalowano', - 'voice.providers.installFailed': 'Instalacja nieudana', - 'voice.providers.notInstalled': 'Nie zainstalowano', - 'voice.providers.whisperModel': 'Model Whisper', - 'voice.providers.whisperModelTiny': 'Tiny (39 MB, najszybszy)', - 'voice.providers.whisperModelBase': 'Base (74 MB)', - 'voice.providers.whisperModelSmall': 'Small (244 MB)', - 'voice.providers.whisperModelMedium': 'Medium (769 MB, polecany)', - 'voice.providers.whisperModelLargeTurbo': 'Large v3 Turbo (1.5 GB, najlepsza dokładność)', - 'voice.providers.ttsProvider': 'Dostawca tekstu na mowę', - 'voice.providers.cloudElevenLabsProxy': 'Chmura (proxy ElevenLabs)', - 'voice.providers.localPiper': 'Piper lokalnie', - 'voice.providers.piperInstalledTitle': - 'Piper jest zainstalowany. Kliknij, aby zainstalować ponownie.', - 'voice.providers.piperDownloadTitle': - 'Pobierz Piper i głos en_US-lessac-medium do przestrzeni roboczej.', - 'voice.providers.piperVoice': 'Głos Piper', - 'voice.providers.customVoiceOption': 'Inny (wpisz poniżej)…', - 'voice.providers.customVoicePlaceholder': 'en_US-lessac-medium', - 'voice.providers.piperVoicesDesc': - 'Głosy pochodzą z huggingface.co/rhasspy/piper-voices. Zmiana głosu może wymagać kliknięcia Zainstaluj / Zainstaluj ponownie, aby pobrać nowy plik .onnx.', - 'voice.providers.mascotVoice': 'Głos maskotki', - 'voice.providers.mascotVoiceDescPrefix': - 'Głos ElevenLabs, którego maskotka używa do mówionych odpowiedzi, konfiguruje się w', - 'voice.providers.mascotSettings': 'Ustawienia maskotki', - 'voice.providers.mascotVoiceDescSuffix': '.', - 'voice.providers.installing': 'Instalowanie', - 'voice.providers.installingBusy': 'Instalowanie…', - 'voice.providers.reinstallLocally': 'Zainstaluj ponownie lokalnie', - 'voice.providers.repair': 'Napraw', - 'voice.providers.retryLocally': 'Spróbuj ponownie lokalnie', - 'voice.providers.installLocally': 'Zainstaluj lokalnie', - 'voice.providers.whisperReady': 'Whisper jest gotowy.', - 'voice.providers.whisperInstallStarted': 'Instalacja Whisper rozpoczęta', - 'voice.providers.queued': 'w kolejce', - 'voice.providers.failedToInstallWhisper': 'Nie udało się zainstalować Whisper', - 'voice.providers.piperReady': 'Piper jest gotowy.', - 'voice.providers.piperInstallStarted': 'Instalacja Piper rozpoczęta', - 'voice.providers.failedToInstallPiper': 'Nie udało się zainstalować Piper', - 'voice.providers.saved': 'Zapisano dostawców głosu.', - 'voice.providers.failedToSave': 'Nie udało się zapisać dostawców głosu', - 'voice.providers.chip.cloud': 'OpenHuman (zarządzany)', - 'voice.providers.chip.cloudAria': 'Zarządzany dostawca OpenHuman jest zawsze włączony', - 'voice.providers.chip.whisper': 'Whisper (lokalnie)', - 'voice.providers.chip.enableWhisper': 'Włącz lokalny Whisper STT', - 'voice.providers.chip.disableWhisper': 'Wyłącz lokalny Whisper STT', - 'voice.providers.chip.piper': 'Piper (lokalnie)', - 'voice.providers.chip.enablePiper': 'Włącz lokalny Piper TTS', - 'voice.providers.chip.disablePiper': 'Wyłącz lokalny Piper TTS', - 'voice.providers.chip.enableProvider': 'Włącz', - 'voice.providers.chip.disableProvider': 'Wyłącz', - 'voice.providers.chip.apiKeyLabel': 'Klucz API', - 'voice.providers.chip.comingSoon': 'wkrótce', - 'voice.modal.title': 'Skonfiguruj', - 'voice.modal.desc': - 'Wpisz swój klucz API, aby włączyć tego dostawcę. Możesz przetestować połączenie przed zapisem.', - 'voice.modal.testKey': 'Przetestuj klucz', - 'voice.modal.testing': 'Testowanie…', - 'voice.modal.saveAndEnable': 'Zapisz i włącz', - 'voice.modal.enable': 'Włącz', - 'voice.modal.whisperDesc': - 'Wybierz rozmiar modelu i zainstaluj binarkę Whisper oraz model GGML w przestrzeni roboczej. Większe modele są dokładniejsze, ale wolniejsze.', - 'voice.modal.piperDesc': - 'Wybierz głos i zainstaluj binarkę Piper oraz model ONNX w przestrzeni roboczej. Piper działa w pełni offline z niskim opóźnieniem.', - 'voice.routing.title': 'Routing głosu', - 'voice.routing.desc': 'Wybierz, którzy włączeni dostawcy obsługują STT i TTS.', - 'voice.routing.save': 'Zapisz', - 'voice.routing.testStt': 'Test STT', - 'voice.routing.testTts': 'Test TTS', - 'voice.routing.elevenlabsVoice': 'Głos ElevenLabs', - 'voice.routing.elevenlabsVoiceDesc': - 'Wybierz wybrany głos lub wklej własne ID głosu z panelu ElevenLabs.', - 'voice.externalProviders.title': 'Zewnętrzni dostawcy głosu', - 'voice.externalProviders.desc': - 'Podłącz API STT/TTS innych firm, np. Deepgram, ElevenLabs lub OpenAI, bezpośrednio.', - 'voice.externalProviders.keySet': 'Klucz ustawiony', - 'voice.externalProviders.noKey': 'Brak klucza API', - 'voice.externalProviders.test': 'Test', - 'voice.externalProviders.testing': 'Testowanie…', - 'voice.externalProviders.remove': 'Usuń', - 'voice.externalProviders.provider': 'Dostawca', - 'voice.externalProviders.selectProvider': 'Wybierz dostawcę…', - 'voice.externalProviders.apiKey': 'Klucz API', - 'voice.externalProviders.add': 'Dodaj', - // Screen Awareness debug - 'screenAwareness.debug.debugAndDiagnostics': 'Debug i diagnostyka', - 'screenAwareness.debug.collapse': 'Zwiń', - 'screenAwareness.debug.expand': 'Rozwiń', - 'screenAwareness.debug.failedToSave': 'Nie udało się zapisać świadomości ekranu', - 'screenAwareness.debug.policyTitle': 'Polityka świadomości ekranu', - 'screenAwareness.debug.baselineFps': 'Bazowe FPS', - 'screenAwareness.debug.useVisionModel': 'Użyj modelu wizji', - 'screenAwareness.debug.useVisionModelDesc': - 'Wysyłaj zrzuty ekranu do LLM wizyjnego po bogatszy kontekst. Gdy wyłączone, używany jest tylko tekst OCR z LLM tekstowym — szybciej i bez modelu wizji.', - 'screenAwareness.debug.keepScreenshots': 'Zachowuj zrzuty ekranu', - 'screenAwareness.debug.keepScreenshotsDesc': - 'Zapisuj zrzuty ekranu w przestrzeni roboczej zamiast usuwać po przetworzeniu', - 'screenAwareness.debug.allowlist': 'Lista dozwolonych (jedna reguła na linię)', - 'screenAwareness.debug.denylist': 'Lista blokowanych (jedna reguła na linię)', - 'screenAwareness.debug.saveSettings': 'Zapisz ustawienia świadomości ekranu', - 'screenAwareness.debug.sessionStats': 'Statystyki sesji', - 'screenAwareness.debug.framesEphemeral': 'Klatki (ulotne)', - 'screenAwareness.debug.panicStop': 'Awaryjne zatrzymanie', - 'screenAwareness.debug.vision': 'Wizja', - 'screenAwareness.debug.idle': 'bezczynne', - 'screenAwareness.debug.visionQueue': 'Kolejka wizji', - 'screenAwareness.debug.lastVision': 'Ostatnia wizja', - 'screenAwareness.debug.notAvailable': 'n/d', - 'screenAwareness.debug.visionSummaries': 'Podsumowania wizji', - 'screenAwareness.debug.refreshing': 'Odświeżanie…', - 'screenAwareness.debug.noSummaries': 'Brak podsumowań.', - 'screenAwareness.debug.unknownApp': 'Nieznana aplikacja', - 'screenAwareness.debug.macosOnly': - 'Świadomość ekranu V1 jest obecnie obsługiwana tylko na macOS.', - // MCP - 'mcp.alphaBadge': 'Alpha', - 'mcp.alphaBannerText': - 'Obsługa serwerów MCP jest we wczesnej fazie alpha. Rejestr Smithery, instalacja i podpinanie narzędzi mogą się zmieniać między wydaniami.', - 'mcp.toolList.noTools': 'Brak dostępnych narzędzi.', - 'mcp.toolList.availableSingular': 'Dostępne {count} narzędzie', - 'mcp.toolList.availablePlural': 'Dostępnych narzędzi: {count}', - 'mcp.catalog.searchPlaceholder': 'Szukaj w katalogu Smithery...', - 'mcp.catalog.loadFailed': 'Nie udało się załadować katalogu', - 'mcp.catalog.noResults': 'Nie znaleziono serwerów.', - 'mcp.catalog.noResultsFor': 'Nie znaleziono serwerów dla „{query}”.', - 'mcp.catalog.loadMore': 'Załaduj więcej', - 'mcp.catalog.deployed': 'Wdrożono', - 'mcp.catalog.installCount': 'Instalacji: {count}', - 'mcp.installed.title': 'Zainstalowane', - 'mcp.installed.browseCatalog': 'Przeglądaj katalog', - 'mcp.installed.empty': 'Brak zainstalowanych serwerów MCP.', - 'mcp.installed.toolSingular': '{count} narzędzie', - 'mcp.installed.toolPlural': 'Narzędzia: {count}', - 'mcp.tab.loading': 'Ładowanie serwerów MCP...', - 'mcp.tab.emptyDetail': 'Wybierz serwer lub przeglądaj katalog.', - 'mcp.install.loadingDetail': 'Ładowanie szczegółów serwera...', - 'mcp.install.back': 'Wstecz', - 'mcp.install.title': 'Zainstaluj {name}', - 'mcp.install.requiredEnv': 'Wymagane zmienne środowiskowe', - 'mcp.install.enterValue': 'Wpisz wartość dla {key}', - 'mcp.install.show': 'Pokaż', - 'mcp.install.hide': 'Ukryj', - 'mcp.install.configLabel': 'Konfiguracja (opcjonalny JSON)', - 'mcp.install.missingRequired': 'Pole „{key}” jest wymagane', - 'mcp.install.invalidJson': 'Konfiguracja nie jest poprawnym JSON-em', - 'mcp.install.failedDetail': 'Nie udało się załadować szczegółów serwera', - 'mcp.install.failedInstall': 'Instalacja nieudana', - 'mcp.install.button': 'Zainstaluj', - 'mcp.install.installing': 'Instalowanie...', - 'mcp.detail.suggestedEnvReady': 'Gotowe sugerowane wartości środowiska', - 'mcp.detail.connect': 'Połącz', - 'mcp.detail.connecting': 'Łączenie...', - 'mcp.detail.disconnect': 'Rozłącz', - 'mcp.detail.hideAssistant': 'Ukryj asystenta', - 'mcp.detail.helpConfigure': 'Pomóż skonfigurować', - 'mcp.detail.confirmUninstall': 'Potwierdzić odinstalowanie?', - 'mcp.detail.confirmUninstallAction': 'Tak, odinstaluj', - 'mcp.detail.uninstall': 'Odinstaluj', - 'mcp.detail.envVars': 'Zmienne środowiskowe', - 'mcp.detail.tools': 'Narzędzia', - 'mcp.configAssistant.title': 'Asystent konfiguracji', - 'mcp.configAssistant.empty': 'Zapytaj o konfigurację, wymagane zmienne lub kroki instalacji.', - 'mcp.configAssistant.suggestedValues': 'Sugerowane wartości:', - 'mcp.configAssistant.valueHidden': '(wartość ukryta)', - 'mcp.configAssistant.applySuggested': 'Zastosuj sugerowane wartości', - 'mcp.configAssistant.reinstallHint': 'Aby je zastosować, zainstaluj ponownie z tymi wartościami.', - 'mcp.configAssistant.thinking': 'Myślę...', - 'mcp.configAssistant.inputPlaceholder': - 'Zadaj pytanie (Enter aby wysłać, Shift+Enter nowa linia)', - 'mcp.configAssistant.send': 'Wyślij', - 'mcp.configAssistant.failedResponse': 'Nie udało się uzyskać odpowiedzi', - 'mcp.setup.secretDialog.title': 'Konfiguracja MCP — wpisz sekret', - 'mcp.setup.secretDialog.bodyPrefix': 'Asystent konfiguracji MCP potrzebuje', - 'mcp.setup.secretDialog.bodySuffix': - '. Wartość jest wysyłana bezpośrednio do procesu rdzenia i nigdy nie trafia do rozmowy AI.', - 'mcp.setup.secretDialog.inputLabel': 'Wartość', - 'mcp.setup.secretDialog.inputPlaceholder': 'Wklej tutaj', - 'mcp.setup.secretDialog.show': 'Pokaż', - 'mcp.setup.secretDialog.hide': 'Ukryj', - 'mcp.setup.secretDialog.submit': 'Wyślij', - 'mcp.setup.secretDialog.cancel': 'Anuluj', - 'mcp.setup.secretDialog.submitting': 'Wysyłanie…', - 'mcp.setup.secretDialog.errorPrefix': 'Nie udało się wysłać:', - 'mcp.setup.secretDialog.privacyNote': - 'Przechowywane zaszyfrowane w lokalnej tabeli sekretów MCP. Nigdy nie są logowane ani wysyłane do modelu.', - // Vault - 'vault.title': 'Skarbce wiedzy (Eksperymentalne)', - 'vault.description': - 'Wskaż lokalny folder; pliki zostaną podzielone i odzwierciedlone w pamięci.', - 'vault.add': 'Dodaj skarbiec', - 'vault.added': 'Skarbiec dodany', - 'vault.createdMessage': 'Utworzono „{name}”. Kliknij {sync}, aby zaindeksować.', - 'vault.couldNotAdd': 'Nie udało się dodać skarbca', - 'vault.syncFailed': 'Synchronizacja nieudana', - 'vault.syncFailedFor': 'Synchronizacja „{name}” nieudana', - 'vault.syncFailedFiles': 'Nieudane pliki: {count}', - 'vault.syncedTitle': 'Zsynchronizowano „{name}”', - 'vault.syncSummary': 'Zaindeksowano: {ingested}, bez zmian: {unchanged}, usunięto: {removed}', - 'vault.syncSummaryFailed': ', nieudane: {count}', - 'vault.syncSummarySkipped': ', pominięte: {count}', - 'vault.syncSummaryDuration': ' · {seconds} s', - 'vault.confirmRemovePurge': - 'Usunąć skarbiec „{name}”?\n\nKliknij OK, aby również wyczyścić jego pamięć (usunąć wszystkie {count} zaindeksowane dokumenty).\nKliknij Anuluj, aby zachować dokumenty w pamięci.', - 'vault.confirmRemove': 'Na pewno usunąć skarbiec „{name}”?', - 'vault.removed': 'Skarbiec usunięty', - 'vault.removedPurgedMessage': 'Usunięto „{name}” i wyczyszczono pamięć.', - 'vault.removedKeptMessage': 'Usunięto „{name}”. Dokumenty pozostają w pamięci.', - 'vault.couldNotRemove': 'Nie udało się usunąć skarbca', - 'vault.name': 'Nazwa', - 'vault.namePlaceholder': 'Moje notatki badawcze', - 'vault.folderPath': 'Ścieżka folderu (bezwzględna)', - 'vault.folderPathPlaceholder': '/Users/ty/Documents/notatki', - 'vault.excludes': 'Wykluczenia (po przecinku, opcjonalnie)', - 'vault.excludesPlaceholder': 'wersje robocze/, .sekret', - 'vault.creating': 'Tworzenie…', - 'vault.create': 'Utwórz skarbiec', - 'vault.loading': 'Ładowanie skarbców…', - 'vault.failedToLoad': 'Nie udało się załadować skarbców: {error}', - 'vault.empty': 'Brak skarbców. Dodaj jeden powyżej, aby zacząć indeksować folder.', - 'vault.fileCount': 'Plików: {count}', - 'vault.syncedRelative': 'zsynchronizowano {time}', - 'vault.neverSynced': 'nigdy nie synchronizowano', - 'vault.syncingProgress': 'Synchronizowanie… {ingested}/{total}', - 'vault.removing': 'Usuwanie…', - 'vault.relative.sec': '{count} s temu', - 'vault.relative.min': '{count} min temu', - 'vault.relative.hr': '{count} godz. temu', - 'vault.relative.day': '{count} dni temu', - // WhatsApp - 'whatsapp.title': 'WhatsApp', - // Subconscious - 'subconscious.interval.fiveMinutes': '5 min', - 'subconscious.interval.tenMinutes': '10 min', - 'subconscious.interval.fifteenMinutes': '15 min', - 'subconscious.interval.thirtyMinutes': '30 min', - 'subconscious.interval.oneHour': '1 godz.', - 'subconscious.interval.sixHours': '6 godz.', - 'subconscious.interval.twelveHours': '12 godz.', - 'subconscious.interval.oneDay': '1 dzień', - 'subconscious.priority.critical': 'krytyczne', - 'subconscious.priority.important': 'ważne', - 'subconscious.priority.normal': 'normalne', - 'subconscious.durationSeconds': '{seconds} s', - 'subconscious.durationMilliseconds': '{milliseconds} ms', - // Settings heartbeat / ledger / search / embeddings - 'settings.heartbeat.title': 'Heartbeat i pętle', - 'settings.heartbeat.desc': 'Steruj częstotliwością harmonogramu tła i podglądaj mapę pętli.', - 'settings.ledgerUsage.title': 'Księga zużycia', - 'settings.ledgerUsage.desc': - 'Ostatnie wydatki kredytów, matematyka budżetu i budżet odczytów API w tle.', - 'settings.search.title': 'Wyszukiwarka', - 'settings.search.menuDesc': - 'Użyj domyślnie wyszukiwarki zarządzanej przez OpenHuman lub podłącz własnego dostawcę z kluczem API.', - 'settings.search.description': - 'Wybierz wyszukiwarkę używaną przez agenta. Zarządzana korzysta z backendu OpenHuman (bez konfiguracji). Parallel i Brave działają bezpośrednio z Twojego urządzenia, używając Twojego klucza API.', - 'settings.search.engineManagedLabel': 'OpenHuman zarządzane', - 'settings.search.engineManagedDesc': 'Domyślnie. Przez backend OpenHuman — bez klucza API.', - 'settings.search.localManagedUnavailable': - 'Wyszukiwarka zarządzana przez OpenHuman jest niedostępna dla użytkowników lokalnych. Dodaj własny klucz API Parallel lub Brave, aby włączyć wyszukiwanie w sieci.', - 'settings.search.engineParallelLabel': 'Parallel', - 'settings.search.engineParallelDesc': - 'Bezpośrednie API Parallel: szukaj, wyciąg, czat, badania, wzbogacenie, narzędzia datasetowe.', - 'settings.search.engineBraveLabel': 'Brave Search', - 'settings.search.engineBraveDesc': - 'Bezpośrednie API Brave Search: web, wiadomości, obrazy i wideo.', - 'settings.search.statusConfigured': 'Skonfigurowano', - 'settings.search.statusNeedsKey': 'Wymaga klucza API', - 'settings.search.fallbackToManaged': - 'Brak klucza — do czasu jego zapisania wyszukiwarka przejdzie w tryb zarządzany.', - 'settings.search.getApiKey': 'Pobierz klucz API', - 'settings.search.save': 'Zapisz', - 'settings.search.clear': 'Wyczyść', - 'settings.search.show': 'Pokaż', - 'settings.search.hide': 'Ukryj', - 'settings.search.statusSaving': 'Zapisywanie…', - 'settings.search.statusSaved': 'Zapisano.', - 'settings.search.statusError': 'Niepowodzenie', - 'settings.search.parallelKeyLabel': 'Klucz API Parallel', - 'settings.search.braveKeyLabel': 'Klucz API Brave Search', - 'settings.search.placeholderStored': '•••••••• (zapisane)', - // Settings embeddings - 'settings.embeddings.title': 'Embeddings', - 'settings.embeddings.description': - 'Wybierz, który dostawca embeddings konwertuje pamięć na wektory do wyszukiwania semantycznego. Zmiana dostawcy, modelu lub wymiarów unieważnia zapisane wektory i wymaga pełnego resetu pamięci.', - 'settings.embeddings.statusConfigured': 'Skonfigurowano', - 'settings.embeddings.statusNeedsKey': 'Wymaga klucza API', - 'settings.embeddings.apiKeyLabel': 'Klucz API {provider}', - 'settings.embeddings.placeholderStored': '•••••••• (zapisane)', - 'settings.embeddings.placeholderKey': 'Wklej swój klucz API…', - 'settings.embeddings.keyStoredEncrypted': 'Twój klucz API jest zaszyfrowany na tym urządzeniu.', - 'settings.embeddings.show': 'Pokaż', - 'settings.embeddings.hide': 'Ukryj', - 'settings.embeddings.save': 'Zapisz', - 'settings.embeddings.clear': 'Wyczyść', - 'settings.embeddings.model': 'Model', - 'settings.embeddings.dimensions': 'Wymiary', - 'settings.embeddings.customEndpoint': 'Niestandardowy endpoint', - 'settings.embeddings.customModelPlaceholder': 'Nazwa modelu', - 'settings.embeddings.customDimsPlaceholder': 'Wymiary', - 'settings.embeddings.applyCustom': 'Zastosuj', - 'settings.embeddings.testConnection': 'Przetestuj połączenie', - 'settings.embeddings.testing': 'Testowanie…', - 'settings.embeddings.testSuccess': 'Połączono — wymiarów: {dims}', - 'settings.embeddings.testFailed': 'Niepowodzenie: {error}', - 'settings.embeddings.saving': 'Zapisywanie…', - 'settings.embeddings.saved': 'Zapisano.', - 'settings.embeddings.errorPrefix': 'Niepowodzenie', - 'settings.embeddings.wipeTitle': 'Zresetować wektory pamięci?', - 'settings.embeddings.wipeBody': - 'Zmiana dostawcy, modelu lub wymiarów embeddings usunie wszystkie zapisane wektory pamięci. Pamięć trzeba odbudować, zanim wyszukiwanie znów zadziała. Tej operacji nie można cofnąć.', - 'settings.embeddings.cancel': 'Anuluj', - 'settings.embeddings.confirmWipe': 'Wyczyść i zastosuj', - 'settings.embeddings.setupTitle': 'Skonfiguruj {provider}', - 'settings.embeddings.saveAndSwitch': 'Zapisz i przełącz', - 'settings.embeddings.optional': 'opcjonalne', - 'settings.embeddings.vectorSearchDisabled': - 'Wyszukiwanie wektorowe jest wyłączone. Pamięć będzie używać tylko dopasowania słów kluczowych i świeżości — bez rankingu semantycznego.', - 'settings.embeddings.clearKey': 'Wyczyść klucz API', - // Settings companion - 'settings.companion.title': 'Towarzysz komputerowy', - 'settings.companion.session': 'Sesja', - 'settings.companion.activeLabel': 'Aktywna', - 'settings.companion.inactiveStatus': 'Nieaktywna', - 'settings.companion.stopping': 'Zatrzymywanie…', - 'settings.companion.stopSession': 'Zatrzymaj sesję', - 'settings.companion.starting': 'Uruchamianie…', - 'settings.companion.startSession': 'Uruchom sesję', - 'settings.companion.sessionId': 'ID sesji', - 'settings.companion.turns': 'Tury', - 'settings.companion.remaining': 'Pozostało', - 'settings.companion.configuration': 'Konfiguracja', - 'settings.companion.hotkey': 'Skrót klawiszowy', - 'settings.companion.activationMode': 'Tryb aktywacji', - 'settings.companion.sessionTtl': 'TTL sesji', - 'settings.companion.screenCapture': 'Przechwytywanie ekranu', - 'settings.companion.appContext': 'Kontekst aplikacji', - // Settings composio - 'settings.composio.title': 'Composio', - 'composio.integrationSlugsHelp': 'Slugi integracji rozdzielone przecinkami, np.', - 'composio.integrationSlugsExample': 'gmail, slack', - 'composio.integrationSlugsCaseInsensitive': 'Bez rozróżniania wielkości liter.', - 'composio.integrationSlugsPlaceholder': 'gmail, slack, ...', - // Migration - 'migration.title': 'Importuj z innego asystenta', - 'migration.description': - 'Przenieś pamięć i notatki z innego lokalnego asystenta do tej przestrzeni roboczej. Zacznij od Podglądu, aby zobaczyć, co dokładnie się zmieni, potem Zastosuj, aby skopiować dane. Twoja obecna pamięć jest najpierw archiwizowana.', - 'migration.vendorLabel': 'Dostawca źródłowy', - 'migration.sourceLabel': 'Ścieżka źródłowej przestrzeni roboczej (opcjonalne)', - 'migration.sourcePlaceholder': - 'Zostaw puste, aby wykryć automatycznie (np. ~/.openclaw/workspace)', - 'migration.sourcePlaceholderHermes': 'Leave blank to auto-detect (e.g. ~/.hermes)', - 'migration.sourceHint': - 'Domyślnie używa standardowej lokalizacji dostawcy, gdy puste. Wpisz konkretną ścieżkę, jeśli przeniosłeś przestrzeń roboczą.', - 'migration.previewAction': 'Podgląd', - 'migration.previewRunning': 'Podgląd…', - 'migration.applyAction': 'Zastosuj import', - 'migration.applyRunning': 'Importowanie…', - 'migration.applyDisclaimer': - 'Zastosuj odblokowuje się po udanym Podglądzie tego samego źródła. Istniejąca pamięć jest archiwizowana przed importem.', - 'migration.reportTitlePreview': 'Podgląd — jeszcze nic nie zaimportowano', - 'migration.reportTitleApplied': 'Import ukończony', - 'migration.report.source': 'Źródłowa przestrzeń robocza', - 'migration.report.target': 'Docelowa przestrzeń robocza', - 'migration.report.fromSqlite': 'Ze SQLite (brain.db)', - 'migration.report.fromMarkdown': 'Z Markdown', - 'migration.report.imported': 'Zaimportowano', - 'migration.report.skippedUnchanged': 'Pominięto (bez zmian)', - 'migration.report.renamedConflicts': 'Zmieniono nazwę przy konflikcie', - 'migration.report.warnings': 'Ostrzeżenia', - 'migration.report.previewHint': - 'Jeszcze nic nie zostało zaimportowane. Kliknij Zastosuj import, aby skopiować.', - 'migration.report.appliedHint': - 'Zaimportowane wpisy są teraz w pamięci. Uruchom Podgląd ponownie, aby porównać.', - 'migration.confirmImport.singular': - 'Zaimportować {count} wpis do obecnej przestrzeni roboczej?\n\nŹródło: {source}\nCel: {target}\n\nIstniejąca pamięć zostanie zarchiwizowana przed uruchomieniem importu.', - 'migration.confirmImport.plural': - 'Zaimportować {count} wpisów do obecnej przestrzeni roboczej?\n\nŹródło: {source}\nCel: {target}\n\nIstniejąca pamięć zostanie zarchiwizowana przed uruchomieniem importu.', - // Settings notifications top - 'settings.notifications.doNotDisturb': 'Tryb Nie przeszkadzać', - 'settings.notifications.doNotDisturbDesc': 'Wstrzymaj wszystkie powiadomienia na określony czas', - 'settings.notifications.channelControls': 'Sterowanie per kanał', - 'settings.notifications.channelControlsDesc': - 'Skonfiguruj preferencje powiadomień dla każdego kanału', - 'settings.notifications.tabs.preferences': 'Preferencje', - 'settings.notifications.tabs.routing': 'Routing', - // Settings features - 'settings.features.screenAwareness': 'Świadomość ekranu', - 'settings.features.screenAwarenessDesc': 'Pozwól asystentowi widzieć Twoje aktywne okno', - 'settings.features.messaging': 'Wiadomości', - 'settings.features.messagingDesc': 'Ustawienia kanałów i integracji wiadomości', - 'settings.features.tools': 'Narzędzia', - 'settings.features.toolsDesc': 'Zarządzaj podłączonymi narzędziami i integracjami', - 'settings.ai.localSetup': 'Konfiguracja lokalnego AI', - 'settings.ai.localSetupDesc': 'Pobierz i skonfiguruj lokalne modele AI', - 'settings.ai.llmProvider': 'Dostawca LLM', - 'settings.ai.llmProviderDesc': 'Wybierz i skonfiguruj dostawcę AI', - // Settings account - 'settings.account.recoveryPhrase': 'Fraza odzyskiwania', - 'settings.account.recoveryPhraseDesc': 'Wyświetl i zabezpiecz swoją frazę odzyskiwania', - 'settings.account.team': 'Zespół', - 'settings.account.teamDesc': 'Zarządzaj członkami i uprawnieniami zespołu', - 'settings.account.connections': 'Połączenia', - 'settings.account.connectionsDesc': 'Zarządzaj połączonymi kontami i usługami', - 'settings.account.privacy': 'Prywatność', - 'settings.account.privacyDesc': 'Kontroluj, jakie dane opuszczają Twój komputer', - // Provider setup - 'providerSetup.error.defaultDetails': 'Konfiguracja dostawcy nieudana.', - 'providerSetup.error.providerFallback': 'Dostawca', - 'providerSetup.error.credentialsRejected': - 'Dostawca {provider} odrzucił dane logowania. Sprawdź klucz API i spróbuj ponownie.', - 'providerSetup.error.endpointNotRecognized': - 'Dostawca {provider} nie rozpoznał endpointu. Sprawdź URL bazowy i spróbuj ponownie.', - 'providerSetup.error.providerUnavailable': - 'Dostawca {provider} jest teraz niedostępny. Spróbuj ponownie lub sprawdź status dostawcy.', - 'providerSetup.error.unreachable': - 'Nie udało się połączyć z {provider}. Sprawdź URL endpointu i połączenie sieciowe, potem spróbuj ponownie.', - 'providerSetup.error.couldNotReachWithMessage': 'Nie udało się połączyć z {provider}: {message}', - 'providerSetup.error.technicalDetails': 'Szczegóły techniczne', - // Notifications routing - 'notifications.routingTitle': 'Routing powiadomień', - 'notifications.routing.pipelineStats': 'Statystyki pipeline', - 'notifications.routing.total': 'Razem', - 'notifications.routing.unread': 'Nieprzeczytane', - 'notifications.routing.unscored': 'Niezocenione', - 'notifications.routing.intelligenceTitle': 'Inteligencja powiadomień', - 'notifications.routing.intelligenceDesc': - 'Każde powiadomienie z Twoich podłączonych kont jest oceniane przez lokalny model AI. Powiadomienia o wysokiej wadze są automatycznie kierowane do agenta orchestratora, by nic ważnego nie umknęło.', - 'notifications.routing.howItWorks': 'Jak to działa', - 'notifications.routing.level.drop': 'Odrzuć', - 'notifications.routing.level.dropDesc': 'Szum / spam — zapisane, ale nie pokazywane', - 'notifications.routing.level.acknowledge': 'Potwierdź', - 'notifications.routing.level.acknowledgeDesc': 'Niski priorytet — widoczne w centrum powiadomień', - 'notifications.routing.level.react': 'Reaguj', - 'notifications.routing.level.reactDesc': - 'Średni priorytet — uruchamia ukierunkowaną odpowiedź agenta', - 'notifications.routing.level.escalate': 'Eskaluj', - 'notifications.routing.level.escalateDesc': 'Wysoki priorytet — przekierowane do orchestratora', - 'notifications.routing.perProvider': 'Routing per dostawca', - 'notifications.routing.threshold': 'Próg', - 'notifications.routing.routeToOrchestrator': 'Kieruj do orchestratora', - 'notifications.routing.loadSettingsError': - 'Nie udało się załadować ustawień. Otwórz panel ponownie.', - // Settings billing inference budget - 'settings.billing.inferenceBudget.title': 'Budżet inferencji', - 'settings.billing.inferenceBudget.noRecurringPlanBudget': 'Brak cyklicznego budżetu planu', - 'settings.billing.inferenceBudget.noRecurringWeeklyDesc': - 'Twój obecny plan nie zawiera cyklicznego tygodniowego budżetu inferencji. Zużycie jest opłacane z dostępnych kredytów.', - 'settings.billing.inferenceBudget.remainingSummary': 'Pozostało {remaining} / {budget}', - 'settings.billing.inferenceBudget.spentThisCycle': 'Wydano {amount} w tym cyklu', - 'settings.billing.inferenceBudget.cycleEndsOn': 'Cykl kończy się {date}', - 'settings.billing.inferenceBudget.exhaustedDesc': - 'Subskrypcyjne zużycie zostało wyczerpane. Doładuj kredyty, aby korzystać dalej bez czekania na nowy cykl.', - 'settings.billing.inferenceBudget.discountVsPayg': - 'O {pct}% taniej za wywołanie niż w pay-as-you-go.', - 'settings.billing.inferenceBudget.cycleSpend': 'Wydatki w cyklu', - 'settings.billing.inferenceBudget.totalAmount': '{amount} łącznie', - 'settings.billing.inferenceBudget.inference': 'Inferencja', - 'settings.billing.inferenceBudget.integrations': 'Integracje', - 'settings.billing.inferenceBudget.calls': '{count} wywołań', - 'settings.billing.inferenceBudget.dailySpend': 'Wydatki dzienne', - 'settings.billing.inferenceBudget.dailySpendPoint': '{date}: {amount}', - 'settings.billing.inferenceBudget.topModels': 'Najczęstsze modele', - 'settings.billing.inferenceBudget.noInferenceUsage': 'Brak zużycia inferencji w tym cyklu.', - 'settings.billing.inferenceBudget.topIntegrations': 'Najczęstsze integracje', - 'settings.billing.inferenceBudget.noIntegrationUsage': 'Brak zużycia integracji w tym cyklu.', - 'settings.billing.inferenceBudget.unableToLoad': 'Nie udało się załadować danych zużycia', - 'settings.billing.inferenceBudget.notAvailable': 'n/d', - // Memory debug + webhooks debug (high-level) - 'memory.sourceFilterAria': 'Filtruj po źródle', - 'calls.comingSoonDescription': 'Połączenia wspierane AI pojawią się wkrótce. Bądź na bieżąco.', - 'memory.debugTitle': 'Debug pamięci', - 'memory.documents': 'Dokumenty', - 'memory.filterByNamespace': 'Filtruj po przestrzeni nazw...', - 'memory.refresh': 'Odśwież', - 'memory.noDocumentsFound': 'Nie znaleziono dokumentów.', - 'memory.delete': 'Usuń', - 'memory.rawResponse': 'Surowa odpowiedź', - 'memory.namespaces': 'Przestrzenie nazw', - 'memory.noNamespacesFound': 'Nie znaleziono przestrzeni nazw.', - 'memory.queryRecall': 'Zapytanie i przywołanie', - 'memory.namespace': 'Przestrzeń nazw', - 'memory.queryText': 'Tekst zapytania...', - 'memory.maxChunks': 'maks. fragmentów', - 'memory.query': 'Zapytaj', - 'memory.recall': 'Przywołaj', - 'memory.queryLabel': 'Zapytanie', - 'memory.recallLabel': 'Przywołanie', - 'memory.queryResult': 'Wynik zapytania', - 'memory.recallResult': 'Wynik przywołania', - 'memory.clearNamespace': 'Wyczyść przestrzeń nazw', - 'memory.clearNamespaceDescription': 'Trwale usuń wszystkie dokumenty w przestrzeni nazw.', - 'memory.selectNamespace': 'Wybierz przestrzeń nazw...', - 'memory.exampleNamespace': 'np. skill:gmail:user@example.com', - 'memory.clear': 'Wyczyść', - 'memory.deleteConfirm': 'Usunąć dokument „{documentId}” w przestrzeni „{namespace}”?', - 'memory.clearNamespaceConfirm': - 'To trwale usunie WSZYSTKIE dokumenty w przestrzeni „{namespace}”. Kontynuować?', - 'memory.clearNamespaceSuccess': 'Wyczyszczono przestrzeń „{namespace}”.', - 'memory.clearNamespaceEmpty': 'Nic do wyczyszczenia w „{namespace}”.', - 'webhooks.debugTitle': 'Debug webhooków', - 'webhooks.failedToLoadDebugData': 'Nie udało się załadować danych debugowania webhooków', - 'webhooks.clearLogsConfirm': 'Wyczyścić wszystkie zebrane logi debugowania webhooków?', - 'webhooks.failedToClearLogs': 'Nie udało się wyczyścić logów webhooków', - 'webhooks.loading': 'Ładowanie...', - 'webhooks.refresh': 'Odśwież', - 'webhooks.clearing': 'Czyszczenie...', - 'webhooks.clearLogs': 'Wyczyść logi', - 'webhooks.registered': 'zarejestrowane', - 'webhooks.captured': 'przechwycone', - 'webhooks.live': 'na żywo', - 'webhooks.disconnected': 'rozłączone', - 'webhooks.lastEvent': 'Ostatnie zdarzenie', - 'webhooks.at': 'o', - 'webhooks.registeredWebhooks': 'Zarejestrowane webhooki', - 'webhooks.noActiveRegistrations': 'Brak aktywnych rejestracji.', - 'webhooks.resolvingBackendUrl': 'Rozpoznawanie URL backendu…', - 'webhooks.capturedRequests': 'Przechwycone żądania', - 'webhooks.noRequestsCaptured': 'Nie przechwycono jeszcze żądań webhooków.', - 'webhooks.unrouted': 'nierozesłane', - 'webhooks.pending': 'oczekujące', - 'webhooks.requestHeaders': 'Nagłówki żądania', - 'webhooks.queryParams': 'Parametry zapytania', - 'webhooks.requestBody': 'Treść żądania', - 'webhooks.responseHeaders': 'Nagłówki odpowiedzi', - 'webhooks.responseBody': 'Treść odpowiedzi', - 'webhooks.rawPayload': 'Surowy ładunek', - 'webhooks.empty': '[puste]', - // App update - 'app.update.dismissNotification': 'Odrzuć powiadomienie o aktualizacji', - 'bootCheck.rpcAuthSuffix': 'przy każdym RPC.', - // Chat agent profile / extras - 'chat.agentProfile.create': 'Utwórz profil agenta', - 'chat.agentProfile.createFailed': 'Nie udało się utworzyć profilu agenta.', - 'chat.agentProfile.customDescription': 'Niestandardowy profil agenta', - 'chat.agentProfile.defaultAgentLabel': 'Orchestrator', - 'chat.agentProfile.exists': 'Profil agenta „{name}” już istnieje.', - 'chat.agentProfile.label': 'Profil agenta', - 'chat.agentProfile.namePlaceholder': 'Nazwa profilu', - 'chat.agentProfile.promptStylePlaceholder': 'Styl promptu', - 'chat.agentProfile.allowedToolsPlaceholder': 'Dozwolone narzędzia', - 'chat.backToThread': 'wróć do {title}', - 'chat.parentThread': 'wątek nadrzędny', - 'chat.removeReaction': 'Usuń {emoji}', - 'kbd.ariaLabel': 'Skrót klawiszowy: {shortcut}', - // Settings ai (high-level) - 'settings.ai.overview': 'Przegląd systemu AI', - 'settings.ai.routing.managed': 'Zarządzane', - 'settings.ai.routing.useYourOwn': 'Użyj własnych modeli', - 'settings.ai.routing.advanced': 'Zaawansowane', - 'settings.ai.routing.chatAndConversations': 'Czat i rozmowy', - 'settings.ai.routing.backgroundTasks': 'Zadania w tle', - 'settings.ai.routing.addCustomProvider': 'Dodaj własnego dostawcę', - 'settings.ai.globalModel.title': 'Wybierz jeden model do wszystkiego', - 'settings.ai.globalModel.provider': 'Dostawca', - 'settings.ai.globalModel.model': 'Model', - 'settings.ai.globalModel.loadingModels': 'Ładowanie modeli…', - 'settings.ai.globalModel.enterModelId': 'Wpisz ID modelu', - 'settings.ai.globalModel.saving': 'Zapisywanie…', - 'settings.ai.globalModel.saved': 'Zapisano', - 'settings.ai.workload.noModel': 'Nie wybrano modelu', - 'settings.ai.workload.changeModel': 'Zmień model', - 'settings.ai.workload.chooseModel': 'Wybierz model', - 'settings.ai.provider.ollama': 'Ollama', - 'settings.ai.disconnectProvider': 'Rozłącz {label}', - 'settings.ai.connectProviderLabel': 'Połącz {label}', - 'settings.ai.endpointUrlLabel': 'URL endpointu', - 'settings.ai.endpointUrlRequired': 'URL endpointu jest wymagany.', - 'settings.ai.endpointProtocolRequired': 'Endpoint musi zaczynać się od http:// lub https://.', - 'settings.ai.connectProviderDialog': 'Połącz {label}', - 'settings.ai.or': 'lub', - 'settings.ai.connecting': 'Łączenie...', - 'settings.ai.test': 'Test', - 'settings.ai.testing': 'Testowanie...', - 'settings.ai.signInWithOpenRouter': 'Zaloguj się z OpenRouter', - 'settings.ai.openhumanDefault': 'OpenHuman (domyślny)', - 'settings.ai.selectModel': 'Wybierz model...', - 'settings.ai.loadingModels': 'Ładowanie modeli...', - 'settings.ai.defaultProviderName': 'OpenHuman', - 'settings.ai.on': 'wł.', - 'settings.ai.off': 'wył.', - 'settings.ai.running': 'Działa...', -}; - -export default pl1; diff --git a/app/src/lib/i18n/chunks/pl-2.ts b/app/src/lib/i18n/chunks/pl-2.ts deleted file mode 100644 index f47e61e9a..000000000 --- a/app/src/lib/i18n/chunks/pl-2.ts +++ /dev/null @@ -1,488 +0,0 @@ -import type { TranslationMap } from '../types'; -import en2 from './en-2'; - -// Polish chunk 2/5. Spreads the English source-of-truth chunk so every key is -// present (i18n parity gate); Polish values below override EN where translated. -const pl2: TranslationMap = { - ...en2, - // settings.ai (continued) - 'settings.ai.configStatus': 'Stan konfiguracji', - 'settings.ai.fallbackMode': 'Tryb awaryjny', - 'settings.ai.loadedFromRuntime': 'Wczytane ze środowiska', - 'settings.ai.loadingDuration': 'Czas wczytywania', - 'settings.ai.localRuntime': 'Lokalne środowisko modelu', - 'settings.ai.openManager': 'Otwórz menedżera', - 'settings.ai.retryDownload': 'Ponów pobieranie', - 'settings.ai.state': 'Stan', - 'settings.ai.targetModel': 'Model docelowy', - 'settings.ai.download': 'Pobierz', - 'settings.ai.localModelUnavailable': 'Stan modelu lokalnego niedostępny.', - 'settings.ai.soulConfig': 'Konfiguracja persony SOUL', - 'settings.ai.refreshing': 'Odświeżanie...', - 'settings.ai.refreshSoul': 'Odśwież SOUL', - 'settings.ai.loadingSoul': 'Wczytywanie konfiguracji SOUL...', - 'settings.ai.identity': 'Tożsamość', - 'settings.ai.personality': 'Osobowość', - 'settings.ai.safetyRules': 'Zasady bezpieczeństwa', - 'settings.ai.source': 'Źródło', - 'settings.ai.loaded': 'Wczytano', - 'settings.ai.toolsConfig': 'Konfiguracja TOOLS', - 'settings.ai.refreshTools': 'Odśwież TOOLS', - 'settings.ai.toolsAvailable': 'Dostępne narzędzia', - 'settings.ai.tools': 'narzędzia', - 'settings.ai.activeSkills': 'Aktywne umiejętności', - 'settings.ai.skills': 'umiejętności', - 'settings.ai.skillsOverview': 'Przegląd umiejętności', - 'settings.ai.refreshingAll': 'Odświeżanie wszystkiego...', - 'settings.ai.refreshAll': 'Odśwież całą konfigurację AI', - // settings.notifications - 'settings.notifications.suppressAll': 'Wycisz wszystkie powiadomienia', - 'settings.notifications.suppressAllDesc': - 'Blokuj wszystkie systemowe powiadomienia z osadzonych aplikacji niezależnie od fokusa.', - 'settings.notifications.toggleDnd': 'Przełącz tryb Nie przeszkadzać', - 'settings.notifications.categories': 'Kategorie', - 'settings.notifications.categoryFooter': - 'Wyłączenie kategorii zatrzymuje nowe powiadomienia tego typu w centrum powiadomień. Istniejące pozostają do czasu wyczyszczenia.', - // settings.billing - 'settings.billing.movedToWeb': 'Rozliczenia przeniesione do sieci', - 'settings.billing.openDashboard': 'Otwórz panel rozliczeń', - 'settings.billing.movedToWebDesc': - 'Zmiany subskrypcji, metody płatności, kredyty i faktury są teraz zarządzane w TinyHumans w sieci.', - 'settings.billing.backToSettings': 'Powrót do ustawień', - 'settings.billing.openingBrowser': 'Otwieranie przeglądarki...', - 'settings.billing.browserNotOpen': - 'Jeśli przeglądarka się nie otworzyła, użyj przycisku powyżej.', - 'settings.billing.browserOpenFailed': - 'Nie udało się otworzyć przeglądarki automatycznie. Użyj przycisku powyżej.', - // settings.tools - 'settings.tools.chooseCapabilities': - 'Wybierz, z jakich możliwości OpenHuman może korzystać w Twoim imieniu.', - 'settings.tools.saveChanges': 'Zapisz zmiany', - 'settings.tools.preferencesSaved': 'Preferencje zapisane', - 'settings.tools.saveFailed': 'Nie udało się zapisać preferencji. Spróbuj ponownie.', - // settings.screenAwareness - 'settings.screenAwareness.mode': 'Tryb', - 'settings.screenAwareness.allExceptBlacklist': 'Wszystko oprócz czarnej listy', - 'settings.screenAwareness.whitelistOnly': 'Tylko biała lista', - 'settings.screenAwareness.screenMonitoring': 'Monitorowanie ekranu', - 'settings.screenAwareness.saveSettings': 'Zapisz ustawienia', - 'settings.screenAwareness.session': 'Sesja', - 'settings.screenAwareness.status': 'Stan', - 'settings.screenAwareness.active': 'Aktywna', - 'settings.screenAwareness.stopped': 'Zatrzymana', - 'settings.screenAwareness.remaining': 'Pozostało', - 'settings.screenAwareness.startSession': 'Rozpocznij sesję', - 'settings.screenAwareness.stopSession': 'Zatrzymaj sesję', - 'settings.screenAwareness.analyzeNow': 'Analizuj teraz', - 'settings.screenAwareness.macosOnly': - 'Przechwytywanie ekranu i zarządzanie uprawnieniami są obecnie obsługiwane tylko na macOS.', - // connections - 'connections.comingSoon': 'Wkrótce', - 'connections.setUp': 'Skonfiguruj', - 'connections.configured': 'Skonfigurowano', - 'connections.unavailable': 'Niedostępne', - 'connections.checking': 'Sprawdzanie…', - 'connections.walletConfigured': - 'Lokalne tożsamości EVM, BTC, Solana i Tron są skonfigurowane z Twojej frazy odzyskiwania.', - 'connections.walletReady': - 'Skonfiguruj lokalne tożsamości EVM, BTC, Solana i Tron z jednej frazy odzyskiwania.', - 'connections.walletError': - 'Nie można sprawdzić stanu portfela. Dotknij, aby ponowić z panelu Frazy odzyskiwania.', - 'connections.walletChecking': 'Sprawdzanie stanu portfela...', - 'connections.walletIdentities': 'Tożsamości portfela', - 'connections.walletDerived': - 'Wyprowadzone lokalnie z Twojej frazy odzyskiwania i przechowywane tylko jako bezpieczne metadane.', - 'connections.privacySecurity': 'Prywatność i bezpieczeństwo', - 'connections.privacySecurityDesc': - 'Wszystkie dane i poświadczenia są przechowywane lokalnie z polityką zerowego retencji. Twoje informacje są szyfrowane i nigdy nie są udostępniane stronom trzecim.', - // channels - 'channels.status.connecting': 'Łączenie', - 'channels.status.notConfigured': 'Nieskonfigurowany', - 'channels.noActiveRoute': 'Brak aktywnej trasy', - 'channels.activeRoute': 'Aktywna trasa', - 'channels.loadingDefinitions': 'Wczytywanie definicji kanałów...', - 'channels.channelConnections': 'Połączenia kanałów', - 'channels.configureAuthModes': 'Skonfiguruj tryby uwierzytelniania dla każdego kanału.', - 'channels.configNotAvailable': 'Konfiguracja dla', - 'channels.channel': 'kanał', - // devOptions - 'devOptions.coreModeNotSet': 'Tryb rdzenia: nie ustawiony', - 'devOptions.coreModeNotSetDesc': - 'Wybór trybu uruchamiania nie został jeszcze potwierdzony. Użyj „Przełącz tryb”, aby wybrać Lokalny lub Chmurowy.', - 'devOptions.local': 'Lokalny', - 'devOptions.embeddedCoreSidecar': 'Wbudowany sidecar rdzenia', - 'devOptions.sidecarSpawned': 'Uruchamiany w procesie powłoki Tauri przy starcie aplikacji.', - 'devOptions.cloud': 'Chmura', - 'devOptions.remoteCoreRpc': 'Zdalne RPC rdzenia', - 'devOptions.token': 'Token', - 'devOptions.tokenNotSet': 'nie ustawiony — RPC zwróci 401', - 'devOptions.triggerSentryTest': 'Wyzwól test Sentry (staging)', - 'devOptions.triggerSentryTestDesc': - 'Wysyła oznaczony błąd, aby zweryfikować potok Sentry. Issue #1072 — usuń po weryfikacji.', - 'devOptions.sendTestEvent': 'Wyślij zdarzenie testowe', - 'devOptions.sending': 'Wysyłanie…', - 'devOptions.eventSent': 'Zdarzenie wysłane', - 'devOptions.failed': 'Niepowodzenie', - 'devOptions.appLogs': 'Dzienniki aplikacji', - 'devOptions.appLogsDesc': - 'Otwórz folder z rotacyjnymi dziennikami dziennymi. Dołącz najnowszy plik podczas zgłaszania błędu.', - 'devOptions.openLogsFolder': 'Otwórz folder dzienników', - // mnemonic - 'mnemonic.phraseSaved': 'Fraza odzyskiwania zapisana', - 'mnemonic.walletReady': 'Wielołańcuchowe tożsamości portfela są gotowe. Powrót do ustawień...', - 'mnemonic.writeDownWords': 'Zapisz te', - 'mnemonic.wordsInOrder': - 'słów w kolejności i przechowuj je w bezpiecznym miejscu. Ta fraza zabezpiecza Twój lokalny klucz szyfrowania oraz tożsamości portfeli EVM, BTC, Solana i Tron.', - 'mnemonic.cannotRecover': - 'Tej frazy nie da się odzyskać, jeśli ją utracisz, i powinna pozostać wyłącznie lokalna na Twoim urządzeniu.', - 'mnemonic.copyToClipboard': 'Skopiuj do schowka', - 'mnemonic.alreadyHavePhrase': 'Mam już frazę odzyskiwania', - 'mnemonic.consentSaved': - 'Zapisałem(am) tę frazę i wyrażam zgodę na jej użycie do konfiguracji lokalnego portfela', - 'mnemonic.enterPhraseToRestore': - 'Wprowadź swoją frazę odzyskiwania poniżej, aby przywrócić lokalne tożsamości portfela, lub wklej pełną frazę w dowolne pole (12 słów dla nowych kopii zapasowych; 24-słowne frazy ze starszych wersji nadal działają).', - 'mnemonic.words': 'Słowa', - 'mnemonic.validPhrase': 'Prawidłowa fraza odzyskiwania', - 'mnemonic.generateNewPhrase': 'Wygeneruj zamiast tego nową frazę odzyskiwania', - 'mnemonic.securingData': 'Zabezpieczanie Twoich danych...', - 'mnemonic.saveRecoveryPhrase': 'Zapisz frazę odzyskiwania', - 'mnemonic.userNotLoaded': 'Użytkownik nie wczytany. Zaloguj się ponownie lub odśwież stronę.', - 'mnemonic.invalidPhrase': 'Nieprawidłowa fraza odzyskiwania. Sprawdź słowa i spróbuj ponownie.', - 'mnemonic.somethingWentWrong': 'Coś poszło nie tak. Spróbuj ponownie.', - // team - 'team.failedToCreate': 'Nie udało się utworzyć zespołu', - 'team.invalidInviteCode': 'Nieprawidłowy lub wygasły kod zaproszenia', - 'team.failedToSwitch': 'Nie udało się przełączyć zespołu', - 'team.failedToLeave': 'Nie udało się opuścić zespołu', - 'team.role.owner': 'Właściciel', - 'team.role.admin': 'Administrator', - 'team.role.billingManager': 'Menedżer rozliczeń', - 'team.role.member': 'Członek', - 'team.active': 'Aktywny', - 'team.personalTeam': 'Zespół osobisty', - 'team.manageTeam': 'Zarządzaj zespołem', - 'team.switching': 'Przełączanie...', - 'team.switch': 'Przełącz', - 'team.leaving': 'Opuszczanie...', - 'team.leave': 'Opuść', - 'team.yourTeams': 'Twoje zespoły', - 'team.createNewTeam': 'Utwórz nowy zespół', - 'team.teamName': 'Nazwa zespołu', - 'team.creating': 'Tworzenie...', - 'team.joinExistingTeam': 'Dołącz do istniejącego zespołu', - 'team.inviteCode': 'Kod zaproszenia', - 'team.joining': 'Dołączanie...', - 'team.join': 'Dołącz', - 'team.leaveTeam': 'Opuść zespół', - 'team.confirmLeave': 'Czy na pewno chcesz opuścić', - 'team.leaveWarning': - 'Stracisz dostęp do zespołu i wszystkich jego zasobów. Aby wrócić, będziesz potrzebować nowego zaproszenia.', - 'team.management': 'Zarządzanie zespołem', - 'team.notFound': 'Nie znaleziono zespołu', - 'team.accessDenied': 'Brak dostępu', - 'team.members': 'Członkowie', - // voice - 'voice.title': 'Dyktowanie głosowe', - 'voice.settings': 'Ustawienia głosu', - 'voice.settingsDesc': 'Przytrzymaj skrót, aby dyktować i wstawiać tekst do aktywnego pola.', - 'voice.hotkey': 'Skrót klawiszowy', - 'voice.activationMode': 'Tryb aktywacji', - 'voice.tapToToggle': 'Dotknij, aby przełączyć', - 'voice.writingStyle': 'Styl pisania', - 'voice.verbatimTranscription': 'Transkrypcja dosłowna', - 'voice.naturalCleanup': 'Naturalne porządkowanie', - 'voice.autoStart': 'Uruchamiaj serwer głosowy automatycznie z rdzeniem', - 'voice.customDictionary': 'Słownik użytkownika', - 'voice.customDictionaryDesc': - 'Dodaj nazwy, terminy techniczne i słowa branżowe, aby poprawić dokładność rozpoznawania.', - 'voice.addWord': 'Dodaj słowo...', - 'voice.sttDisabled': - 'Dyktowanie głosowe jest wyłączone do czasu pobrania i przygotowania lokalnego modelu STT.', - 'voice.openLocalAiModel': 'Otwórz lokalny model AI', - 'voice.serverRestarted': 'Serwer głosowy uruchomiony ponownie z nowymi ustawieniami.', - 'voice.settingsSaved': 'Ustawienia głosu zapisane.', - 'voice.serverStarted': 'Serwer głosowy uruchomiony.', - 'voice.serverStopped': 'Serwer głosowy zatrzymany.', - 'voice.saveVoiceSettings': 'Zapisz ustawienia głosu', - 'voice.startVoiceServer': 'Uruchom serwer głosowy', - 'voice.stopVoiceServer': 'Zatrzymaj serwer głosowy', - 'voice.debugTitle': 'Debug głosu', - // autocomplete - 'autocomplete.title': 'Autouzupełnianie', - 'autocomplete.settings': 'Ustawienia', - 'autocomplete.acceptWithTab': 'Akceptuj Tabem', - 'autocomplete.stylePreset': 'Styl', - 'autocomplete.style.balanced': 'Zrównoważony', - 'autocomplete.style.concise': 'Zwięzły', - 'autocomplete.style.formal': 'Formalny', - 'autocomplete.style.casual': 'Swobodny', - 'autocomplete.style.custom': 'Własny', - 'autocomplete.disabledApps': - 'Wyłączone aplikacje (jeden identyfikator pakietu/aplikacji w wierszu)', - 'autocomplete.saveSettings': 'Zapisz ustawienia', - 'autocomplete.saving': 'Zapisywanie…', - 'autocomplete.runtime': 'Środowisko', - 'autocomplete.running': 'Działa', - 'autocomplete.start': 'Uruchom', - 'autocomplete.stop': 'Zatrzymaj', - 'autocomplete.settingsSaved': 'Ustawienia autouzupełniania zapisane.', - 'autocomplete.started': 'Autouzupełnianie uruchomione.', - 'autocomplete.didNotStart': 'Autouzupełnianie nie wystartowało. Sprawdź, czy jest włączone.', - 'autocomplete.stopped': 'Autouzupełnianie zatrzymane.', - 'autocomplete.advancedSettings': 'Ustawienia zaawansowane', - 'autocomplete.debugTitle': 'Debug autouzupełniania', - // chat (extras) - 'chat.agentChat': 'Czat z agentem', - 'chat.overrides': 'Nadpisania', - 'chat.model': 'Model', - 'chat.temperature': 'Temperatura', - 'chat.conversation': 'Rozmowa', - 'chat.startAgentConversation': 'Rozpocznij rozmowę z agentem.', - 'chat.you': 'Ty', - 'chat.agent': 'Agent', - 'chat.askAgent': 'Zapytaj agenta o cokolwiek...', - 'chat.sendMessage': 'Wyślij wiadomość', - // composio - 'composio.triageTitle': 'Wyzwalacze integracji', - 'composio.triageDesc': - 'Gdy włączone, każdy przychodzący wyzwalacz Composio przechodzi przez krok klasyfikacji AI — jedna tura lokalnego LLM na wyzwalacz. Wyłącz globalnie lub dla wybranych integracji, jeśli wolisz ręczny przegląd. Jeśli zmienna środowiskowa', - 'composio.disableAllTriage': 'Wyłącz klasyfikację AI dla wszystkich wyzwalaczy', - 'composio.triggersStillRecorded': - 'Wyzwalacze są nadal zapisywane do historii — żadna tura LLM nie jest uruchamiana.', - 'composio.disableSpecificIntegrations': 'Wyłącz klasyfikację AI dla konkretnych integracji', - 'composio.settingsSaved': 'Ustawienia zapisane', - 'composio.saveFailed': 'Nie udało się zapisać. Spróbuj ponownie.', - // cron - 'cron.title': 'Zadania cron', - 'cron.scheduledJobs': 'Zaplanowane zadania', - 'cron.manageCronJobs': 'Zarządzaj zadaniami cron z poziomu harmonogramu rdzenia.', - 'cron.refreshCronJobs': 'Odśwież zadania cron', - // localModel - 'localModel.modelStatus': 'Stan modelu', - 'localModel.downloadModels': 'Pobierz modele', - 'localModel.usage': 'Użycie', - 'localModel.usageDesc': - 'Wybierz, które podsystemy korzystają z modelu lokalnego. Wszystko wyłączone używa chmury.', - 'localModel.enableRuntime': 'Włącz lokalne środowisko AI', - 'localModel.enableRuntimeDesc': - 'Główny przełącznik. Domyślnie wyłączony — Ollama pozostaje bezczynna. Gdy włączony, podsumowywanie drzewa, inteligencja ekranu i autouzupełnianie zawsze korzystają z modelu lokalnego.', - 'localModel.advancedSettings': 'Ustawienia zaawansowane', - 'localModel.debugTitle': 'Debug modelu lokalnego', - 'localModel.ollamaServer.helperText': 'Przykład: http://192.168.1.5:11434', - 'localModel.ollamaServer.label': 'Adres URL serwera Ollama', - 'localModel.ollamaServer.modelCount': 'modele', - 'localModel.ollamaServer.placeholder': 'http://localhost:11434', - 'localModel.ollamaServer.reachable': 'Dostępny', - 'localModel.ollamaServer.resetButton': 'Przywróć domyślne', - 'localModel.ollamaServer.saveButton': 'Zapisz', - 'localModel.ollamaServer.testButton': 'Testuj połączenie', - 'localModel.ollamaServer.unreachable': 'Niedostępny', - 'localModel.ollamaServer.validationError': 'Musi być poprawnym adresem http:// lub https://', - // debug titles - 'screenAwareness.debugTitle': 'Debug świadomości ekranu', - 'memory.debugTitle': 'Debug pamięci', - 'webhooks.debugTitle': 'Debug webhooków', - 'notifications.routingTitle': 'Trasowanie powiadomień', - // common (extras) - 'common.reload': 'Odśwież', - 'common.skip': 'Pomiń', - 'common.disable': 'Wyłącz', - 'common.enable': 'Włącz', - // chat (more) - 'chat.safetyTimeout': - 'Brak odpowiedzi agenta po 2 minutach. Spróbuj ponownie lub sprawdź połączenie.', - 'chat.filter.all': 'Wszystkie', - 'chat.filter.work': 'Praca', - 'chat.filter.briefing': 'Briefing', - 'chat.filter.notification': 'Powiadomienia', - 'chat.filter.workers': 'Workery', - 'chat.selectThread': 'Wybierz wątek', - 'chat.threads': 'Wątki', - 'chat.noThreads': 'Brak wątków', - 'chat.noLabelThreads': 'Brak wątków „{label}”', - 'chat.noWorkerThreads': 'Brak wątków workerów', - 'chat.deleteThread': 'Usuń wątek', - 'chat.deleteThreadConfirm': 'Czy na pewno chcesz usunąć „{title}”?', - 'chat.untitledThread': 'Wątek bez tytułu', - 'chat.editThreadTitle': 'Edytuj tytuł wątku', - 'chat.hideSidebar': 'Ukryj panel boczny', - 'chat.showSidebar': 'Pokaż panel boczny', - 'chat.newThreadShortcut': 'Nowy wątek (/new)', - 'chat.new': 'Nowy', - 'chat.failedToLoadMessages': 'Nie udało się wczytać wiadomości', - 'chat.thinkingIteration': 'Myślę... ({n})', - 'chat.thinkingDots': 'Myślę...', - 'chat.approachingLimit': 'Zbliżasz się do limitu', - 'chat.approachingLimitMsg': 'Wykorzystano {pct}% dostępnego limitu.', - 'chat.upgrade': 'Podnieś plan', - 'chat.weeklyLimitHit': 'Wykorzystano przewidziany budżet cyklu.', - 'chat.resets': 'Reset', - 'chat.topUpToContinue': 'Doładuj, aby kontynuować.', - 'chat.budgetComplete': 'Twój budżet jest wyczerpany. Doładuj kredyty lub zmień plan.', - 'chat.topUp': 'Doładuj', - 'chat.cycle': 'Cykl', - 'chat.cycleSpent': 'Wydane w tym cyklu', - 'chat.cycleRemaining': 'Pozostało', - 'chat.left': 'pozostało', - 'chat.setup': 'Skonfiguruj', - 'chat.switchToText': 'Przełącz na tekst', - 'chat.transcribing': 'Transkrypcja...', - 'chat.stopAndSend': 'Zatrzymaj i wyślij', - 'chat.startTalking': 'Zacznij mówić', - 'chat.playingVoiceReply': 'Odtwarzanie odpowiedzi głosowej', - 'chat.voiceHint': 'Użyj mikrofonu, aby mówić', - 'chat.micUnavailable': 'Mikrofon niedostępny', - 'chat.turn': 'tura', - 'chat.turns': 'tury', - 'chat.openWorkerThread': 'Otwórz wątek workera', - // memory - 'memory.searchAria': 'Szukaj w pamięci', - 'memory.searchPlaceholder': 'Szukaj wpisów pamięci...', - 'memory.sourceFilter.all': 'Wszystkie źródła', - 'memory.sourceFilter.email': 'E-mail', - 'memory.sourceFilter.calendar': 'Kalendarz', - 'memory.sourceFilter.telegram': 'Telegram', - 'memory.sourceFilter.aiInsight': 'Wniosek AI', - 'memory.sourceFilter.system': 'System', - 'memory.sourceFilter.trading': 'Handel', - 'memory.sourceFilter.security': 'Bezpieczeństwo', - 'memory.ingestionActivity': 'Aktywność pobierania', - 'memory.events': 'zdarzenia', - 'memory.event': 'zdarzenie', - 'memory.overTheLast': 'w ciągu ostatnich', - 'memory.months': 'miesięcy', - 'memory.peak': 'Szczyt', - 'memory.perDay': '/dzień', - 'memory.less': 'Mniej', - 'memory.more': 'Więcej', - 'memory.on': 'w', - 'memory.loading': 'Wczytywanie pamięci', - 'memory.fetching': 'Pobieranie wpisów pamięci...', - 'memory.analyzing': 'Analiza pamięci', - 'memory.analyzingHint': 'Przetwarzanie wspomnień w celu wydobycia wniosków...', - 'memory.noMatches': 'Brak dopasowań', - 'memory.noMatchesHint': 'Spróbuj zmienić wyszukiwane słowa lub filtry.', - 'memory.allCaughtUp': 'Wszystko nadrobione', - 'memory.allCaughtUpHint': 'Brak nowych wpisów do przetworzenia.', - 'memory.noAnalysis': 'Brak analizy', - 'memory.noAnalysisHint': 'Uruchom analizę, aby odkryć wzorce w swoich wspomnieniach.', - 'memory.emptyHint': 'Zacznij używać aplikacji, aby utworzyć pierwsze wspomnienia.', - // mic - 'mic.unavailable': 'Mikrofon niedostępny', - 'mic.permissionDenied': 'Odmowa dostępu do mikrofonu', - 'mic.failedToStartRecorder': 'Nie udało się uruchomić rejestratora', - 'mic.transcribing': 'Transkrypcja...', - 'mic.tapToSend': 'Dotknij, aby wysłać', - 'mic.waitingForAgent': 'Czekam na agenta...', - 'mic.tapAndSpeak': 'Dotknij i mów', - 'mic.stopRecording': 'Zatrzymaj nagrywanie i wyślij', - 'mic.startRecording': 'Rozpocznij nagrywanie', - 'mic.deviceSelector': 'Urządzenie mikrofonowe', - // token - 'token.usageLimitReached': 'Osiągnięto limit użycia', - 'token.approachingLimit': 'Zbliżasz się do limitu', - 'token.planClickForDetails': 'plan — kliknij, aby zobaczyć szczegóły', - 'token.sessionTokens': 'Wej: {in} | Wyj: {out} | Tury: {turns}', - 'token.limit': 'Limit osiągnięty', - // catalog - 'catalog.noCapabilityBinding': 'Brak powiązanej możliwości', - 'catalog.downloadFailed': 'Pobieranie nie powiodło się', - 'catalog.active': 'Aktywny', - 'catalog.installed': 'Zainstalowany', - 'catalog.notDownloaded': 'Nie pobrany', - 'catalog.inUse': 'W użyciu', - 'catalog.use': 'Użyj', - 'catalog.deleteModel': 'Usuń model', - 'catalog.download': 'Pobierz', - // navigator - 'navigator.recent': 'Ostatnie', - 'navigator.today': 'Dziś', - 'navigator.thisWeek': 'Ten tydzień', - 'navigator.sources': 'Źródła', - 'navigator.email': 'E-mail', - 'navigator.slack': 'Slack', - 'navigator.chat': 'Czat', - 'navigator.documents': 'Dokumenty', - 'navigator.people': 'Ludzie', - 'navigator.topics': 'Tematy', - // dreams - 'dreams.description': - 'Sny to refleksje generowane przez AI, syntetyzujące wzorce z Twoich wspomnień.', - 'dreams.comingSoon': 'Wkrótce', - // assignment - 'assignment.memoryLlm': 'LLM pamięci', - 'assignment.memoryLlmAria': 'Wybór LLM pamięci', - 'assignment.embedder': 'Embedder', - 'assignment.loaded': 'Wczytano', - 'assignment.notDownloaded': 'Nie pobrano', - 'assignment.usedForExtractSummarise': 'Używany do ekstrakcji i podsumowywania', - // insights - 'insights.knownFacts': 'Znane fakty', - 'insights.preferences': 'Preferencje', - 'insights.relationships': 'Relacje', - 'insights.skills': 'Umiejętności', - 'insights.opinions': 'Opinie', - // devOptions menu (#2225) - 'devOptions.menuAi': 'Konfiguracja AI', - 'devOptions.menuAiDesc': 'Dostawcy chmurowi, lokalne modele Ollama i trasowanie per workload', - 'devOptions.menuScreenAware': 'Świadomość ekranu', - 'devOptions.menuScreenAwareDesc': - 'Uprawnienia do przechwytywania ekranu, polityka monitorowania i kontrola sesji', - 'devOptions.menuMessaging': 'Kanały komunikacji', - 'devOptions.menuMessagingDesc': - 'Konfiguruj tryby uwierzytelniania Telegram/Discord i domyślne trasowanie', - 'devOptions.menuTools': 'Narzędzia', - 'devOptions.menuToolsDesc': - 'Włącz lub wyłącz możliwości, z których OpenHuman może korzystać w Twoim imieniu', - 'devOptions.menuAgentChat': 'Czat z agentem', - 'devOptions.menuAgentChatDesc': 'Testuj rozmowę z agentem z nadpisaniem modelu i temperatury', - 'devOptions.menuCronJobs': 'Zadania cron', - 'devOptions.menuCronJobsDesc': - 'Przeglądaj i konfiguruj zaplanowane zadania dla umiejętności runtime', - 'devOptions.menuLocalModelDebug': 'Debug modelu lokalnego', - 'devOptions.menuLocalModelDebugDesc': - 'Konfiguracja Ollama, pobieranie zasobów, testy modeli i diagnostyka', - 'devOptions.menuWebhooksDebug': 'Webhooks', - 'devOptions.menuWebhooksDebugDesc': - 'Sprawdź rejestracje webhooków w runtime i logi przechwyconych żądań', - 'devOptions.menuIntelligence': 'Inteligencja', - 'devOptions.menuIntelligenceDesc': 'Przestrzeń pamięci, silnik podświadomości, sny i ustawienia', - 'devOptions.menuNotificationRouting': 'Trasowanie powiadomień', - 'devOptions.menuNotificationRoutingDesc': - 'Punktacja ważności AI i eskalacja przez orkiestrator dla alertów integracji', - 'devOptions.menuComposeIOTriggers': 'Wyzwalacze ComposeIO', - 'devOptions.menuComposeIOTriggersDesc': 'Przeglądaj historię i archiwum wyzwalaczy ComposeIO', - 'devOptions.menuComposioRouting': 'Trasowanie Composio (tryb bezpośredni)', - 'devOptions.menuComposioRoutingDesc': - 'Użyj własnego klucza API Composio i kieruj wywołania bezpośrednio do backend.composio.dev', - 'devOptions.menuComposioTriggers': 'Wyzwalacze integracji', - 'devOptions.menuComposioTriggersDesc': - 'Konfiguruj ustawienia klasyfikacji AI dla wyzwalaczy integracji Composio', - 'settings.agentsSection.title': 'Agents', - 'settings.agentsSection.description': - 'Manage your agents, their autonomy, and what they can access on this computer.', - 'settings.agentsSection.menuDesc': 'Registry, autonomy & OS access', - 'settings.agents.editor.notFound': 'Agent not found.', - 'settings.agents.editor.modelInherit': 'Inherit (platform default)', - 'settings.agents.editor.modelHints': 'Route hints', - 'settings.agents.editor.modelTiers': 'Model tiers', - 'settings.agents.editor.modelCustom': 'Custom model id…', - 'settings.agents.editor.modelCustomPlaceholder': 'e.g. anthropic/claude-sonnet-4', - 'settings.agents.editor.selectTools': 'Add tools', - 'settings.agents.editor.toolsAllSelected': 'All tools', - 'settings.agents.editor.toolsNoneSelected': 'No tools selected', - 'settings.agents.editor.removeToolAria': 'Remove {tool}', - 'settings.agents.editor.toolsModalTitle': 'Allowed tools', - 'settings.agents.editor.toolsSelectedCount': '{count} selected', - 'settings.agents.editor.toolsSearchPlaceholder': 'Search tools…', - 'settings.agents.editor.toolsAllowAll': 'Allow all tools (*)', - 'settings.agents.editor.toolsAllowAllHint': 'This agent can use every available tool.', - 'settings.agents.editor.toolsLoading': 'Loading tools…', - 'settings.agents.editor.toolsLoadError': 'Couldn’t load tools', - 'settings.agents.editor.toolsEmpty': 'No tools match your search.', - 'settings.agents.editor.toolsDone': 'Done', - 'settings.agents.editor.builtInReadonly': - 'Built-in agents can’t be edited. You can enable, disable, or reset them from the agents list.', -}; - -export default pl2; diff --git a/app/src/lib/i18n/chunks/pl-3.ts b/app/src/lib/i18n/chunks/pl-3.ts deleted file mode 100644 index 63850eee2..000000000 --- a/app/src/lib/i18n/chunks/pl-3.ts +++ /dev/null @@ -1,549 +0,0 @@ -import type { TranslationMap } from '../types'; -import en3 from './en-3'; - -// Polish chunk 3/5. Spreads the English source-of-truth chunk so every key is -// present (i18n parity gate); Polish values below override EN where translated. -const pl3: TranslationMap = { - ...en3, - // insights - 'insights.other': 'Inne', - 'insights.title': 'Wnioski', - 'insights.empty': 'Brak wniosków. Wnioski są generowane wraz ze wzrostem pamięci.', - 'insights.description': 'Na podstawie {count} relacji w Twoim grafie pamięci.', - 'insights.items': 'elementów', - 'insights.more': 'więcej', - // calls - 'calls.joiningCall': 'Dołączanie do rozmowy', - 'calls.meetWindowOpening': 'Otwieranie okna Meet...', - 'calls.failedToStart': 'Nie udało się uruchomić rozmowy Meet', - 'calls.couldNotStart': 'Nie można rozpocząć rozmowy', - 'calls.failedToClose': 'Nie udało się zakończyć rozmowy', - 'calls.couldNotClose': 'Nie można zamknąć rozmowy', - 'calls.joinMeet': 'Dołącz do rozmowy Google Meet', - 'calls.joinMeetDescription': 'Wprowadź link Google Meet, aby dołączyć.', - 'calls.meetLink': 'Link Meet', - 'calls.displayName': 'Wyświetlana nazwa', - 'calls.openingMeet': 'Otwieranie Meet...', - 'calls.joinCall': 'Dołącz do rozmowy', - 'calls.activeCalls': 'Aktywne rozmowy', - 'calls.leave': 'Opuść', - // workspace - 'workspace.wipeConfirm': - 'Czy na pewno chcesz wyczyścić całą pamięć? Tej operacji nie można cofnąć.', - 'workspace.resetTreeConfirm': 'Czy na pewno chcesz przebudować drzewo pamięci?', - 'workspace.wipeTitle': 'Wyczyść pamięć', - 'workspace.resetting': 'Resetowanie...', - 'workspace.resetMemory': 'Zresetuj pamięć', - 'workspace.resetTreeTitle': 'Przebuduj drzewo pamięci', - 'workspace.rebuilding': 'Przebudowa...', - 'workspace.resetMemoryTree': 'Zresetuj drzewo pamięci', - 'workspace.building': 'Budowanie...', - 'workspace.buildSummaryTrees': 'Zbuduj drzewa podsumowań', - 'workspace.viewVault': 'Pokaż sejf', - 'workspace.openingVaultTitle': 'Otwieranie sejfu w Obsidianie', - 'workspace.openingVaultMessage': - 'Jeśli Obsidian się nie otworzy, zainstaluj go z obsidian.md lub użyj „Pokaż folder”. Ścieżka sejfu:', - 'workspace.openVaultFailedTitle': 'Nie udało się otworzyć sejfu w Obsidianie', - 'workspace.openVaultFailedMessage': - 'Użyj „Pokaż folder”, aby otworzyć katalog sejfu bezpośrednio. Ścieżka sejfu:', - 'workspace.revealVaultFailed': 'Nie udało się pokazać folderu sejfu', - 'workspace.revealFolder': 'Pokaż folder', - 'workspace.checkingVault': 'Sprawdzanie…', - 'workspace.vaultNotRegisteredHelp': - 'Obsidian otwiera tylko foldery dodane jako sejf. W Obsidianie wybierz „Otwórz folder jako sejf” i wskaż folder poniżej — wystarczy to zrobić raz. Następnie ponownie kliknij Pokaż sejf.', - 'workspace.obsidianNotFoundHelp': - 'Nie znaleziono Obsidiana na tym urządzeniu. Zainstaluj go lub — jeśli jest zainstalowany w niestandardowym miejscu — ustaw jego folder konfiguracyjny w sekcji Zaawansowane.', - 'workspace.openAnyway': 'Otwórz w Obsidianie mimo to', - 'workspace.installObsidian': 'Zainstaluj Obsidiana', - 'workspace.obsidianAdvanced': 'Obsidian zainstalowany gdzie indziej?', - 'workspace.obsidianConfigDirLabel': 'Folder konfiguracji Obsidiana', - 'workspace.obsidianConfigDirHint': - 'Ścieżka do folderu zawierającego obsidian.json (np. ~/.config/obsidian). Zostaw puste, aby wykryć automatycznie.', - 'workspace.obsidianConfigDirPlaceholder': '~/.config/obsidian', - 'workspace.graphLoadFailed': 'Nie udało się wczytać grafu pamięci', - 'workspace.loadingGraph': 'Wczytywanie grafu pamięci...', - 'workspace.graphViewMode': 'Tryb widoku grafu pamięci', - 'workspace.trees': 'Drzewa', - 'workspace.contacts': 'Kontakty', - // graph - 'graph.noContactMentions': 'Brak wzmianek o kontakcie', - 'graph.noMemory': 'Brak pamięci', - 'graph.source': 'Źródło', - 'graph.topic': 'Temat', - 'graph.global': 'Globalne', - 'graph.document': 'Dokument', - 'graph.contact': 'Kontakt', - 'graph.nodes': 'węzły', - 'graph.parentChild': 'rodzic-dziecko', - 'graph.documentContact': 'dokument-kontakt', - 'graph.link': 'powiązanie', - 'graph.links': 'powiązania', - 'graph.children': 'dzieci', - 'graph.clickToOpenObsidian': 'Kliknij, aby otworzyć w Obsidianie', - 'graph.person': 'Osoba', - // modal - 'modal.dontShowAgain': 'Nie pokazuj podobnych sugestii', - // reflections - 'reflections.loading': 'Wczytywanie refleksji...', - 'reflections.empty': 'Brak refleksji', - 'reflections.title': 'Refleksje', - 'reflections.proposedAction': 'Proponowane działanie', - 'reflections.act': 'Wykonaj', - 'reflections.dismiss': 'Odrzuć', - // whatsapp - 'whatsapp.chatsSynced': 'rozmów zsynchronizowano', - 'whatsapp.chatSynced': 'rozmowa zsynchronizowana', - // sync - 'sync.active': 'Aktywna', - 'sync.recent': 'Ostatnia', - 'sync.idle': 'Bezczynna', - 'sync.memorySources': 'Źródła pamięci', - 'sync.noConnectedSources': 'Brak połączonych źródeł', - 'sync.chunks': 'fragmentów', - 'sync.lastChunk': 'Ostatni fragment:', - 'sync.pending': 'oczekujące', - 'sync.processed': 'przetworzone', - 'sync.syncing': 'Synchronizacja…', - 'sync.sync': 'Synchronizuj', - 'sync.failedToLoad': 'Nie udało się wczytać stanu synchronizacji', - 'sync.noContent': - 'Żadna treść nie została jeszcze zsynchronizowana do pamięci. Podłącz integrację, aby zacząć.', - // backend - 'memorySources.title': 'Memory Sources', - 'memorySources.empty': 'No memory sources yet. Add one to start feeding memory.', - 'memorySources.loadingConnections': 'Loading connections…', - 'memorySources.noConnections': - 'No active Composio connections found. Connect an integration first.', - 'memorySources.pickConnection': 'Pick a connection', - 'memorySources.selectConnection': '— Select a connection —', - 'memorySources.composioListFailed': 'Failed to load Composio connections.', - 'memorySources.browse': 'Browse…', - 'memorySources.folderPathPlaceholder': '/Users/you/notes', - 'memorySources.globPatternPlaceholder': '**/*.md', - 'memorySources.repoUrlPlaceholder': 'https://github.com/org/repo', - 'memorySources.branchPlaceholder': 'main', - 'memorySources.feedUrlPlaceholder': 'https://example.com/feed.xml', - 'memorySources.pageUrlPlaceholder': 'https://example.com/article', - 'memorySources.cssSelectorPlaceholder': 'article', - 'memorySources.searchQueryPlaceholder': 'from:user AI safety', - 'memorySources.kind.composio': 'Integration', - 'memorySources.kind.folder': 'Local Folder', - 'memorySources.kind.github_repo': 'GitHub Repo', - 'memorySources.kind.twitter_query': 'Twitter Search', - 'memorySources.kind.rss_feed': 'RSS Feed', - 'memorySources.kind.web_page': 'Web Page', - 'memorySources.sync.successTitle': 'Syncing', - 'memorySources.sync.successMessage': 'Progress will appear shortly.', - 'memorySources.sync.failedTitle': 'Sync failed:', - 'time.justNow': 'just now', - 'time.secondsAgoSuffix': 's ago', - 'time.minutesAgoSuffix': 'm ago', - 'time.hoursAgoSuffix': 'h ago', - 'time.daysAgoSuffix': 'd ago', - 'memorySources.customSources': 'Custom Sources', - 'memorySources.addSource': 'Add Source', - 'memorySources.noCustomSources': - 'No custom sources yet. Add a folder, GitHub repo, RSS feed, or web page to start.', - 'memorySources.pickKind': 'What kind of source do you want to add?', - 'memorySources.backToKinds': 'Back to source types', - 'memorySources.label': 'Label', - 'memorySources.labelPlaceholder': 'My research notes', - 'memorySources.add': 'Add', - 'memorySources.adding': 'Adding…', - 'memorySources.added': 'Source added', - 'memorySources.removed': 'Source removed', - 'memorySources.remove': 'Remove', - 'memorySources.enable': 'Enable', - 'memorySources.disable': 'Disable', - 'memorySources.toggleFailed': 'Toggle failed', - 'memorySources.removeFailed': 'Remove failed', - 'memorySources.folderPath': 'Folder path', - 'memorySources.globPattern': 'Glob pattern', - 'memorySources.repoUrl': 'Repository URL', - 'memorySources.branch': 'Branch', - 'memorySources.feedUrl': 'Feed URL', - 'memorySources.pageUrl': 'Page URL', - 'memorySources.cssSelector': 'CSS selector (optional)', - 'memorySources.searchQuery': 'Search query', - 'backend.aiBackend': 'Backend AI', - 'backend.cloud': 'Chmura', - 'backend.recommended': 'Zalecane', - 'backend.cloudDescription': - 'Szybkie, mocne modele kierowane przez backend OpenHuman. Gotowe do użycia od razu.', - 'backend.privacyNote': - 'Prompty i wybrany kontekst mogą być wysyłane do skonfigurowanego backendu/dostawcy. Użyj trybu lokalnego dla obsługiwanych workloadów na urządzeniu.', - 'backend.local': 'Lokalny', - 'backend.advanced': 'Zaawansowane', - 'backend.localDescription': - 'Uruchom modele na własnej maszynie z Ollamą. Pełna prywatność, wymaga konfiguracji.', - 'backend.ramRecommended': 'Zalecane 16 GB+ RAM', - // subconscious - 'subconscious.tasks': 'zadań', - 'subconscious.ticks': 'tików', - 'subconscious.last': 'Ostatnio', - 'subconscious.failed': 'nieudane', - 'subconscious.tickInterval': 'Interwał tików', - 'subconscious.runNow': 'Uruchom teraz', - 'subconscious.providerUnavailableTitle': 'Podświadomość wstrzymana', - 'subconscious.providerSettings': 'Ustawienia AI', - 'subconscious.approvalNeeded': 'Wymagana zgoda', - 'subconscious.requiresApproval': 'Wymaga zgody', - 'subconscious.fixInConnections': 'Napraw w Połączeniach', - 'subconscious.goAhead': 'Działaj', - 'subconscious.activeTasks': 'Aktywne zadania', - 'subconscious.noActiveTasks': 'Brak aktywnych zadań', - 'subconscious.default': 'Domyślne', - 'subconscious.addTaskPlaceholder': 'Dodaj nowe zadanie...', - 'subconscious.activityLog': 'Dziennik aktywności', - 'subconscious.noActivity': 'Brak aktywności', - 'subconscious.decision.nothingNew': 'Nic nowego', - 'subconscious.decision.completed': 'Ukończone', - 'subconscious.decision.evaluating': 'Ocena', - 'subconscious.decision.waitingApproval': 'Oczekiwanie na zgodę', - 'subconscious.decision.failed': 'Niepowodzenie', - 'subconscious.decision.cancelled': 'Anulowane', - 'subconscious.decision.skipped': 'Pominięte', - // actionable - 'actionable.complete': 'Zakończ', - 'actionable.dismiss': 'Odrzuć', - 'actionable.snooze': 'Odłóż', - 'actionable.new': 'Nowe', - // stats - 'stats.storage': 'Pamięć', - 'stats.files': 'plików', - 'stats.documents': 'Dokumenty', - 'stats.today': 'dziś', - 'stats.namespaces': 'Przestrzenie nazw', - 'stats.relations': 'Relacje', - 'stats.firstMemory': 'Pierwsze wspomnienie', - 'stats.latest': 'Ostatnie', - 'stats.sessions': 'Sesje', - 'stats.tokens': 'tokenów', - // bootCheck - 'bootCheck.invalidUrl': 'Wprowadź adres URL środowiska.', - 'bootCheck.urlMustStartWith': 'Adres musi zaczynać się od http:// lub https://', - 'bootCheck.validUrlRequired': - 'To nie wygląda na prawidłowy adres URL (spróbuj https://core.example.com/rpc)', - 'bootCheck.tokenRequired': 'Aby się połączyć, potrzebujemy tokenu uwierzytelniania.', - 'bootCheck.chooseCoreMode': 'Wybierz środowisko', - 'bootCheck.connectToCore': 'Połącz się ze swoim środowiskiem', - 'bootCheck.desktopDescription': - 'OpenHuman potrzebuje środowiska do działania. Wybierz, gdzie ma się znajdować.', - 'bootCheck.webDescription': - 'W przeglądarce OpenHuman łączy się ze środowiskiem, którym zarządzasz. Wpisz jego URL i token poniżej lub pobierz aplikację desktopową, aby uruchomić środowisko bezpośrednio na komputerze.', - 'bootCheck.preferDesktop': 'Wolisz wszystko trzymać na własnym urządzeniu?', - 'bootCheck.downloadDesktop': 'Pobierz aplikację desktopową', - 'bootCheck.localRecommended': 'Uruchom lokalnie (zalecane)', - 'bootCheck.localDescription': - 'Działa bezpośrednio na Twoim komputerze. Najszybsze, w pełni prywatne, bez konfiguracji.', - 'bootCheck.cloudMode': 'Uruchom w chmurze (zaawansowane)', - 'bootCheck.cloudDescription': - 'Połącz się ze środowiskiem hostowanym w innym miejscu. Działa 24×7, więc nie musisz trzymać tego urządzenia włączonego.', - 'bootCheck.coreRpcUrl': 'URL środowiska', - 'bootCheck.rpcUrlPlaceholder': 'https://core.example.com/rpc', - 'bootCheck.authToken': 'Token uwierzytelniania', - 'bootCheck.bearerTokenPlaceholder': 'Token bearer ze zdalnego środowiska', - 'bootCheck.storedLocally': 'Przechowywany wyłącznie na tym urządzeniu. Wysyłany jako ', - 'bootCheck.testing': 'Testowanie…', - 'bootCheck.testConnection': 'Testuj połączenie', - 'bootCheck.connectedOk': 'Połączono. Możesz działać.', - 'bootCheck.authFailed': 'Ten token nie zadziałał. Sprawdź go i spróbuj ponownie.', - 'bootCheck.unreachablePrefix': 'Nie udało się połączyć:', - 'bootCheck.checkingCore': 'Budzenie środowiska…', - 'bootCheck.cannotReach': 'Nie można połączyć się ze środowiskiem', - 'bootCheck.cannotReachDesc': 'Nie udało się połączyć z Twoim środowiskiem. Spróbować innego?', - 'bootCheck.switchMode': 'Wybierz inne środowisko', - 'bootCheck.quit': 'Zakończ', - 'bootCheck.legacyDetected': 'Wykryto starsze środowisko w tle', - 'bootCheck.legacyDescription': - 'Osobno zainstalowany daemon OpenHuman już działa na tym urządzeniu. Musimy go usunąć, zanim wbudowane środowisko przejmie kontrolę.', - 'bootCheck.removing': 'Usuwanie…', - 'bootCheck.removeContinue': 'Usuń i kontynuuj', - 'bootCheck.localNeedsRestart': 'Lokalne środowisko wymaga restartu', - 'bootCheck.localNeedsRestartDesc': - 'Twoje lokalne środowisko jest w innej wersji niż ta aplikacja. Szybki restart przywróci zgodność.', - 'bootCheck.restarting': 'Restartowanie…', - 'bootCheck.restartCore': 'Zrestartuj środowisko', - 'bootCheck.cloudNeedsUpdate': 'Środowisko chmurowe wymaga aktualizacji', - 'bootCheck.cloudNeedsUpdateDesc': - 'Twoje środowisko chmurowe jest w innej wersji niż ta aplikacja. Uruchom aktualizację, aby przywrócić zgodność.', - 'bootCheck.updating': 'Aktualizowanie…', - 'bootCheck.updateCloudCore': 'Zaktualizuj środowisko chmurowe', - 'bootCheck.versionCheckFailed': 'Sprawdzenie wersji środowiska nie powiodło się', - 'bootCheck.versionCheckFailedDesc': - 'Środowisko działa, ale nie raportuje wersji. Może być nieaktualne. Zrestartuj lub zaktualizuj, aby kontynuować.', - 'bootCheck.working': 'Pracuję…', - 'bootCheck.restartUpdateCore': 'Zrestartuj / zaktualizuj środowisko', - 'bootCheck.unexpectedError': 'Nieoczekiwany błąd sprawdzania uruchamiania', - 'bootCheck.actionFailed': 'Coś poszło nie tak. Spróbuj ponownie.', - 'bootCheck.portConflictTitle': 'Nie udało się uruchomić silnika aplikacji', - 'bootCheck.portConflictBody': - 'Inny proces używa portu sieciowego potrzebnego OpenHumanowi. Spróbujemy to naprawić automatycznie.', - 'bootCheck.portConflictFixButton': 'Napraw automatycznie', - 'bootCheck.portConflictFixing': 'Naprawianie…', - 'bootCheck.portConflictFixFailed': - 'Automatyczna naprawa się nie powiodła. Zrestartuj komputer i spróbuj ponownie.', - // notifications - 'notifications.justNow': 'przed chwilą', - 'notifications.minAgo': '{n} min temu', - 'notifications.hrAgo': '{n} godz. temu', - 'notifications.dayAgo': '{n} dni temu', - 'notifications.category.messages': 'Wiadomości', - 'notifications.category.agents': 'Agenci', - 'notifications.category.skills': 'Umiejętności', - 'notifications.category.system': 'System', - 'notifications.category.meetings': 'Spotkania', - 'notifications.category.reminders': 'Przypomnienia', - 'notifications.category.important': 'Ważne', - // about.update - 'about.update.status.checking': 'Sprawdzanie...', - 'about.update.status.available': 'Dostępna wersja {version}', - 'about.update.status.availableNoVersion': 'Dostępna aktualizacja', - 'about.update.status.downloading': 'Pobieranie...', - 'about.update.status.readyToInstall': 'Wersja {version} gotowa do instalacji', - 'about.update.status.readyToInstallNoVersion': - 'Nowa wersja została pobrana i jest gotowa. Zrestartuj, aby zastosować.', - 'about.update.status.installing': 'Instalowanie...', - 'about.update.status.restarting': 'Restartowanie...', - 'about.update.status.upToDate': 'Używasz najnowszej wersji.', - 'about.update.status.error': 'Sprawdzenie aktualizacji nie powiodło się', - 'about.update.status.default': 'Sprawdź aktualizacje', - // welcome - 'welcome.connectionFailed': 'Połączenie nie powiodło się: {status} {statusText}', - 'welcome.connectionFailedMsg': 'Połączenie nie powiodło się: {message}', - 'welcome.continueLocally': 'Kontynuuj lokalnie', - 'welcome.continueLocallyExperimental': 'Kontynuuj lokalnie (eksperymentalnie)', - 'welcome.localSessionStarting': 'Rozpoczynanie sesji lokalnej...', - 'welcome.localSessionDesc': - 'Używa lokalnego profilu offline i pomija logowanie OAuth TinyHumans.', - // chat (extras) - 'chat.agentChatDesc': 'Otwórz bezpośrednią sesję czatu z agentem.', - 'channels.activeRouteValue': '{channel} przez {authMode}', - // privacy - 'privacy.dataKind.messages': 'Wiadomości', - 'privacy.dataKind.agents': 'Agenci', - 'privacy.dataKind.skills': 'Umiejętności', - 'privacy.dataKind.system': 'System', - 'privacy.dataKind.meetings': 'Spotkania', - 'privacy.dataKind.reminders': 'Przypomnienia', - 'privacy.dataKind.important': 'Ważne', - // onboarding - 'onboarding.enableLocalAI': 'Włącz lokalne AI', - 'onboarding.skills.status.available': 'Dostępne', - 'onboarding.skills.status.connected': 'Połączone', - 'onboarding.skills.status.connecting': 'Łączenie', - 'onboarding.skills.status.error': 'Błąd', - 'onboarding.skills.status.unavailable': 'Niedostępne', - // composio - 'composio.statusUnavailable': 'Status niedostępny', - 'composio.envVarOverrides': 'jest ustawiona, nadpisuje to ustawienie.', - // memory.day - 'memory.day.sun': 'nd.', - 'memory.day.mon': 'pn.', - 'memory.day.tue': 'wt.', - 'memory.day.wed': 'śr.', - 'memory.day.thu': 'cz.', - 'memory.day.fri': 'pt.', - 'memory.day.sat': 'sb.', - 'memory.ingesting': 'Pobieranie', - 'memory.ingestionQueued': 'W kolejce', - 'memory.ingestingTitle': 'Pobieranie {title}', - // mic (extras) - 'mic.noAudioCaptured': 'Nie nagrano dźwięku', - 'mic.noSpeechDetected': 'Nie wykryto mowy', - 'mic.failedToStopRecording': 'Nie udało się zatrzymać nagrywania: {message}', - 'mic.transcriptionFailed': 'Transkrypcja nie powiodła się: {message}', - // reflections.kind - 'reflections.kind.retrospective': 'Retrospektywa', - 'reflections.kind.derivedFact': 'Wywiedziony fakt', - 'reflections.kind.moodInsight': 'Wnioski o nastroju', - 'reflections.kind.relationshipInsight': 'Wnioski o relacjach', - // graph.tooltip - 'graph.tooltip.summary': 'Podsumowanie', - 'graph.tooltip.contact': 'Kontakt', - // localModel.usage - 'localModel.usage.never': 'Nigdy', - 'localModel.usage.mediumLoad': 'Średnie obciążenie', - 'localModel.usage.lowLoad': 'Niskie obciążenie', - 'localModel.usage.idleMode': 'Tryb bezczynności', - 'localModel.rebootstrapComplete': 'Ponowna inicjalizacja modelu zakończona.', - 'localModel.modelsVerified': 'Modele lokalne zweryfikowane.', - // accounts - 'accounts.addModal.allConnected': 'Wszystkie połączone', - 'accounts.addModal.title': 'Dodaj konto', - 'accounts.respondQueue.empty': 'Pusto', - 'accounts.respondQueue.hide': 'Ukryj kolejkę odpowiedzi', - 'accounts.respondQueue.loadFailed': 'Nie udało się wczytać kolejki odpowiedzi', - 'accounts.respondQueue.loading': 'Wczytywanie kolejki…', - 'accounts.respondQueue.pending': 'Oczekujące', - 'accounts.respondQueue.show': 'Pokaż kolejkę odpowiedzi', - 'accounts.respondQueue.title': 'Kolejka odpowiedzi', - 'accounts.webviewHost.almostReady': 'Już prawie gotowe...', - 'accounts.webviewHost.loadTimeout': 'Limit czasu wczytywania webview', - 'accounts.webviewHost.loading': 'Wczytywanie {providerName}...', - 'accounts.webviewHost.loadingAccount': 'Wczytywanie konta', - 'accounts.webviewHost.restoringSession': 'Przywracanie sesji...', - 'accounts.webviewHost.retryLoading': 'Ponów wczytywanie', - 'accounts.webviewHost.takingLonger': '{providerName} trwa dłużej niż oczekiwano.', - 'accounts.webviewHost.timeoutHint': 'Wskazówka dot. limitu czasu', - // app - 'app.connectionBadge.composio': 'Composio', - 'app.connectionBadge.messaging': 'Wiadomości', - 'app.connectionIndicator.connected': 'Połączono z OpenHuman AI 🚀', - 'app.connectionIndicator.connecting': 'Łączenie', - 'app.connectionIndicator.coreOffline': 'Rdzeń offline', - 'app.connectionIndicator.disconnected': 'Rozłączono', - 'app.connectionIndicator.offline': 'Offline', - 'app.connectionIndicator.reconnecting': 'Ponowne łączenie…', - 'app.errorFallback.componentStack': 'Stos komponentów', - 'app.errorFallback.downloadLatest': 'Pobierz najnowszą wersję', - 'app.errorFallback.heading': 'Coś poszło nie tak', - 'app.errorFallback.hint': 'Wskazówka', - 'app.errorFallback.reloadApp': 'Przeładuj aplikację', - 'app.errorFallback.subheading': 'Spróbuj przeładować lub pobrać najnowszą wersję.', - 'app.errorFallback.tryRecover': 'Spróbuj odzyskać', - 'app.localAiDownload.installing': 'Instalowanie...', - 'app.localAiDownload.preparing': 'Przygotowanie...', - // app.openhumanLink - 'app.openhumanLink.accounts.continueWith': 'Kontynuuj z logowaniem {label}', - 'app.openhumanLink.accounts.done': 'Gotowe', - 'app.openhumanLink.accounts.intro': 'Podłącz konta, których używasz na co dzień.', - 'app.openhumanLink.accounts.webviewNote': 'Każde konto otwiera się we własnym oknie webview.', - 'app.openhumanLink.billing.openDashboard': 'Otwórz panel', - 'app.openhumanLink.billing.stayOnTrial': 'Zostań w wersji próbnej', - 'app.openhumanLink.billing.trialCredit': 'Kredyt próbny', - 'app.openhumanLink.billing.trialDesc': - 'Korzystasz z bezpłatnego okresu próbnego. Doładuj, aby kontynuować.', - 'app.openhumanLink.defaultBody': - 'Jeszcze nie gotowe w popupie. Otwórz pełną stronę ustawień, gdy będziesz potrzebować.', - 'app.openhumanLink.discord.intro': - 'Dołącz do społeczności, dziel się opiniami i bądź na bieżąco.', - 'app.openhumanLink.discord.openInvite': 'Otwórz zaproszenie', - 'app.openhumanLink.discord.perk1': 'Pomoc bezpośrednio od twórców', - 'app.openhumanLink.discord.perk2': 'Wczesny dostęp do nowych funkcji', - 'app.openhumanLink.discord.perk3': 'Wymiana skryptów i przepisów', - 'app.openhumanLink.discord.perk4': 'Możliwość wpływu na priorytety', - 'app.openhumanLink.done': 'Gotowe', - 'app.openhumanLink.loadingChannelSetup': 'Wczytywanie konfiguracji kanału', - 'app.openhumanLink.maybeLater': 'Może później', - 'app.openhumanLink.notifications.asking': 'Pytanie systemu operacyjnego…', - 'app.openhumanLink.notifications.blocked': 'Zablokowane', - 'app.openhumanLink.notifications.blockedStep1': 'Otwórz Ustawienia systemowe → Powiadomienia.', - 'app.openhumanLink.notifications.blockedStep2': 'Znajdź OpenHuman na liście aplikacji.', - 'app.openhumanLink.notifications.blockedStep3': 'Włącz „Zezwalaj na powiadomienia” i wróć tutaj.', - 'app.openhumanLink.notifications.intro': - 'Włącz powiadomienia, aby otrzymywać alerty od agenta i kanałów.', - 'app.openhumanLink.notifications.promptHint': 'Twój system zapyta o zgodę za chwilę.', - 'app.openhumanLink.notifications.retry': 'Ponów powiadomienie testowe', - 'app.openhumanLink.notifications.send': 'Wyślij powiadomienie testowe', - 'app.openhumanLink.notifications.sendFailed': 'Nie udało się wysłać: {error}', - 'app.openhumanLink.notifications.sent': - 'Wysłano powiadomienie testowe. Jeśli go nie otrzymałeś(aś), przejdź do Ustawienia systemowe → Powiadomienia → OpenHuman, włącz „Zezwalaj na powiadomienia” i ustaw styl banera na „Trwały”.', - 'app.openhumanLink.skipForNow': 'Pomiń na razie', - 'app.openhumanLink.telegramUnavailable': 'Telegram niedostępny', - 'app.openhumanLink.title.accounts': 'Podłącz swoje aplikacje', - 'app.openhumanLink.title.billing': 'Rozliczenia i kredyty', - 'app.openhumanLink.title.discord': 'Dołącz do społeczności', - 'app.openhumanLink.title.messaging': 'Podłącz kanał komunikacji', - 'app.openhumanLink.title.notifications': 'Zezwól na powiadomienia', - // app.persistRehydration - 'app.persistRehydration.body': - 'Trwa odzyskiwanie stanu. Jeśli widzisz ten ekran zbyt długo, zresetuj aplikację.', - 'app.persistRehydration.heading': 'Przywracanie sesji', - 'app.persistRehydration.resetCta': 'Resetowanie…', - 'app.persistRehydration.resetting': 'Resetowanie…', - // app.routeLoading - 'app.routeLoading.initializing': 'Inicjalizacja OpenHuman...', - // app.update - 'app.update.currentlyOn': '{version}', - 'app.update.errorFallback': 'Coś poszło nie tak podczas aktualizacji.', - 'app.update.header.default': 'Aktualizacja', - 'app.update.header.error': 'Aktualizacja nie powiodła się', - 'app.update.header.installing': 'Instalowanie aktualizacji', - 'app.update.header.readyToInstall': 'Aktualizacja gotowa do instalacji', - 'app.update.header.restarting': 'Restartowanie…', - 'app.update.later': 'Później', - 'app.update.newVersionReady': 'Nowa wersja jest gotowa do instalacji.', - 'app.update.progress.downloaded': 'pobrano {amount}', - 'app.update.progress.installing': 'Instalowanie nowej wersji…', - 'app.update.progress.restarting': 'Uruchamianie aplikacji ponownie…', - 'app.update.progress.working': '{percent}%', - 'app.update.restartNote': 'Restart zamknie wszystkie aktywne sesje czatu i wątki.', - 'app.update.restartNow': 'Zrestartuj teraz', - 'app.update.versionReady': 'Wersja {newVersion} jest gotowa do instalacji.', - // channels.discord - 'channels.discord.accountLinked': 'Konto powiązane', - 'channels.discord.connect': 'Połącz', - 'channels.discord.linkTokenExpired': 'Token powiązania wygasł. Spróbuj ponownie.', - 'channels.discord.linkTokenInstruction': '{token}', - 'channels.discord.linkTokenLabel': 'Etykieta tokenu powiązania', - 'channels.discord.linkTokenOnce': 'Token jednorazowego powiązania', - 'channels.discord.picker.allPermissionsOk': 'Bot ma wszystkie wymagane uprawnienia w tym kanale.', - 'channels.discord.picker.botNotInServers': 'Bot nie jest na serwerach', - 'channels.discord.picker.category': 'Kategoria', - 'channels.discord.picker.channel': 'Kanał', - 'channels.discord.picker.checkingPermissions': 'Sprawdzanie uprawnień', - 'channels.discord.picker.loadingChannels': 'Wczytywanie kanałów...', - 'channels.discord.picker.loadingServers': 'Wczytywanie serwerów...', - 'channels.discord.picker.missingPermissions': 'Brakujące uprawnienia', - 'channels.discord.picker.noChannels': 'Nie znaleziono kanałów tekstowych', - 'channels.discord.picker.noServers': 'Nie znaleziono serwerów', - 'channels.discord.picker.selectChannel': 'Wybierz kanał', - 'channels.discord.picker.selectServer': 'Wybierz serwer', - 'channels.discord.picker.server': 'Serwer', - 'channels.discord.picker.serverChannelSelection': 'Wybór serwera i kanału', - 'channels.discord.savedRestartRequired': - 'Kanał zapisany. Zrestartuj aplikację, aby go aktywować.', - // channels.telegram - 'channels.telegram.connect': 'Połącz', - 'channels.telegram.managedDmConnecting': 'Łączenie zarządzanego DM', - 'channels.telegram.managedDmTimeout': 'Limit czasu zarządzanego DM', - 'channels.telegram.reconnect': 'Połącz ponownie', - 'channels.telegram.savedRestartRequired': - 'Kanał zapisany. Zrestartuj aplikację, aby go aktywować.', - 'channels.web.alwaysAvailable': 'Zawsze dostępny', - // chat.approval - 'chat.approval.approve': 'Zatwierdź', - 'chat.approval.deciding': 'Przetwarzanie…', - 'chat.approval.deny': 'Odrzuć', - 'chat.approval.error': 'Nie udało się zapisać decyzji — spróbuj ponownie.', - 'chat.approval.fallback': 'Agent chce wykonać akcję wymagającą Twojej zgody.', - 'chat.approval.title': 'Wymagana zgoda', - 'chat.approval.tool': 'Narzędzie:', - // channel displayNames + descriptions - 'channels.discord.displayName': 'Discord', - 'channels.discord.description': 'Wysyłaj i odbieraj wiadomości przez Discord.', - 'channels.discord.authMode.bot_token.description': 'Podaj własny token bota Discord.', - 'channels.discord.authMode.oauth.description': - 'Zainstaluj bota OpenHuman na swoim serwerze Discord przez OAuth.', - 'channels.discord.authMode.managed_dm.description': - 'Powiąż swoje osobiste konto Discord z botem OpenHuman.', - 'channels.discord.fields.bot_token.label': 'Token bota', - 'channels.discord.fields.bot_token.placeholder': 'Twój token bota Discord', - 'channels.discord.fields.guild_id.label': 'ID serwera (gildii)', - 'channels.discord.fields.guild_id.placeholder': 'Opcjonalne: ogranicz do konkretnego serwera', - 'channels.telegram.displayName': 'Telegram', - 'channels.telegram.description': 'Wysyłaj i odbieraj wiadomości przez Telegram.', - 'channels.telegram.authMode.managed_dm.description': - 'Pisz bezpośrednio do bota OpenHuman na Telegramie.', - 'channels.telegram.authMode.bot_token.description': - 'Podaj własny token bota Telegram z @BotFather.', - 'channels.telegram.fields.bot_token.label': 'Token bota', - 'channels.telegram.fields.bot_token.placeholder': '123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11', - 'channels.telegram.fields.allowed_users.label': 'Dozwoleni użytkownicy', - 'channels.telegram.fields.allowed_users.placeholder': - 'Oddzielone przecinkami nazwy użytkowników Telegrama', - 'channels.web.displayName': 'Sieć', - 'channels.web.description': 'Czatuj przez wbudowany interfejs webowy.', - 'channels.web.authMode.managed_dm.description': - 'Użyj wbudowanego czatu webowego — bez konfiguracji.', - 'channels.yuanbao.connect': 'Połącz', - 'channels.yuanbao.connecting': 'Łączenie…', - 'channels.yuanbao.fieldRequired': '{field} jest wymagane', - 'channels.yuanbao.reconnect': 'Połącz ponownie', - 'channels.yuanbao.savedRestartRequired': - 'Kanał zapisany. Zrestartuj aplikację, aby go aktywować.', - 'channels.yuanbao.unexpectedStatus': 'Nieoczekiwany status połączenia: {status}', -}; - -export default pl3; diff --git a/app/src/lib/i18n/chunks/pl-4.ts b/app/src/lib/i18n/chunks/pl-4.ts deleted file mode 100644 index 24b12d608..000000000 --- a/app/src/lib/i18n/chunks/pl-4.ts +++ /dev/null @@ -1,468 +0,0 @@ -import type { TranslationMap } from '../types'; -import en4 from './en-4'; - -// Polish chunk 4/5. Spreads the English source-of-truth chunk so every key is -// present (i18n parity gate); Polish values below override EN where translated. -const pl4: TranslationMap = { - ...en4, - // chat.unsubscribeApproval - 'chat.unsubscribeApproval.approve': 'Zatwierdź i wypisz', - 'chat.unsubscribeApproval.approved': '✓ Pomyślnie wypisano.', - 'chat.unsubscribeApproval.denied': '✕ Żądanie odrzucone.', - 'chat.unsubscribeApproval.deny': 'Odrzuć', - 'chat.unsubscribeApproval.processing': 'Przetwarzanie...', - 'chat.unsubscribeApproval.title': 'Żądanie wypisania', - // commandPalette - 'commandPalette.ariaLabel': 'Paleta poleceń', - 'commandPalette.description': 'Opis', - 'commandPalette.label': 'Polecenia', - 'commandPalette.noResults': 'Brak wyników', - 'commandPalette.placeholder': 'Wpisz polecenie lub wyszukaj…', - 'commandPalette.searchAria': 'Szukaj poleceń', - 'commandPalette.shortcutHint': 'Wciśnij ?, aby zobaczyć wszystkie skróty', - 'commandPalette.title': 'Paleta poleceń', - // composio.connect - 'composio.connect.additionalConfigRequired': 'Wymagana dodatkowa konfiguracja', - 'composio.connect.atlassianSubdomainHint': 'acme', - 'composio.connect.atlassianSubdomainLabel': 'Subdomena Atlassian', - 'composio.connect.connect': 'Połącz', - 'composio.connect.connectionFailed': 'Połączenie nie powiodło się (status: {status}).', - 'composio.connect.disconnectFailed': 'Rozłączenie nie powiodło się: {msg}', - 'composio.connect.disconnecting': 'Rozłączanie…', - 'composio.connect.idleDescription': 'Połącz swoje konto', - 'composio.connect.idleDescriptionSuffix': - '. Otworzymy okno przeglądarki, tam zaakceptujesz dostęp, a ta aplikacja wykryje połączenie automatycznie.', - 'composio.connect.isConnected': 'jest połączone.', - 'composio.connect.manage': 'Zarządzaj', - 'composio.connect.needsSubdomain': 'Aby się połączyć', - 'composio.connect.needsSubdomainSuffix': - 'wprowadź swoją subdomenę Atlassian (np. acme dla acme.atlassian.net) i spróbuj ponownie.', - 'composio.connect.oauthComplete': 'Czekam na zakończenie OAuth…', - 'composio.connect.oauthTimeout': 'Przekroczono czas oczekiwania na OAuth', - 'composio.connect.permissions': 'Uprawnienia', - 'composio.connect.permissionsDefault': 'Odczyt + zapis włączone domyślnie', - 'composio.connect.permissionsNote': 'może wystawiać', - 'composio.connect.permissionsNoteSuffix': - 'uprawnienia agenta OpenHuman są kontrolowane poniżej przełącznikami odczytu, zapisu i administracji.', - 'composio.connect.reopenBrowser': 'Otwórz przeglądarkę ponownie', - 'composio.connect.requestingUrl': 'Żądanie URL połączenia…', - 'composio.connect.retryConnection': 'Ponów połączenie', - 'composio.connect.scopeLoadError': 'Nie udało się wczytać preferencji uprawnień: {msg}', - 'composio.connect.scopeSaveError': 'Nie udało się zapisać uprawnienia {key}: {msg}', - 'composio.connect.scope.read': 'Odczyt', - 'composio.connect.scope.readHint': 'Pozwól agentowi odczytywać dane z tego połączenia.', - 'composio.connect.scope.write': 'Zapis', - 'composio.connect.scope.writeHint': - 'Pozwól agentowi tworzyć lub modyfikować dane przez to połączenie.', - 'composio.connect.scope.admin': 'Administracja', - 'composio.connect.scope.adminHint': - 'Pozwól agentowi zarządzać ustawieniami, uprawnieniami lub akcjami destrukcyjnymi.', - 'composio.connect.subdomainInvalid': - 'Wprowadź tylko krótką subdomenę (np. „acme”), nie pełny URL. Powinna zawierać tylko litery, cyfry i myślniki.', - 'composio.connect.subdomainRequired': 'Wprowadź subdomenę Atlassian, aby kontynuować.', - 'composio.connect.dynamicsOrgNameLabel': 'Nazwa organizacji Dynamics 365', - 'composio.connect.dynamicsOrgNameHint': - 'Na przykład „myorg” dla myorg.crm.dynamics.com. Wprowadź tylko krótką nazwę organizacji, nie pełny URL.', - 'composio.connect.needsFieldsPrefix': 'Aby się połączyć', - 'composio.connect.needsFieldsSuffix': - 'potrzebujemy nieco więcej informacji. Uzupełnij brakujące pola poniżej i spróbuj ponownie.', - 'composio.connect.requiredFieldEmpty': 'To pole jest wymagane.', - 'composio.connect.wabaIdHint': - 'Znajdziesz je przez GET /me/businesses, a następnie GET /{business_id}/owned_whatsapp_business_accounts z tokenem dostępu Meta.', - 'composio.connect.wabaIdLabel': 'ID WhatsApp Business Account', - 'composio.connect.wabaIdRequired': - 'Wprowadź swoje ID WhatsApp Business Account (WABA ID), aby kontynuować.', - 'composio.connect.waitingFor': 'Oczekiwanie na', - 'composio.connect.waitingHint': 'Może to potrwać chwilę.', - // composio.triggers - 'composio.triggers.heading': 'Wyzwalacze', - 'composio.triggers.listenFrom': 'Nasłuchuj zdarzeń z', - 'composio.triggers.loadError': 'Nie udało się wczytać wyzwalaczy', - 'composio.triggers.needsConfiguration': 'Wymaga konfiguracji', - 'composio.triggers.noneAvailable': 'Brak dostępnych wyzwalaczy dla', - // conversations - 'conversations.taskKanban.moveLeft': 'Przesuń w lewo', - 'conversations.taskKanban.moveRight': 'Przesuń w prawo', - 'conversations.taskKanban.title': 'Zadania', - 'conversations.toolTimeline.turn': 'tura', - 'conversations.toolTimeline.workerThread': 'wątek workera', - // daemon - 'daemon.serviceBlockingGate.body': - 'Rdzeń OpenHuman nie odpowiada. Spróbuj ponownie lub pobierz najnowszą wersję aplikacji.', - 'daemon.serviceBlockingGate.downloadHint': - 'Jeśli problem się powtarza, pobierz najnowszą wersję.', - 'daemon.serviceBlockingGate.downloadLatest': 'Pobierz najnowszą wersję', - 'daemon.serviceBlockingGate.retryCore': 'Ponów rdzeń', - 'daemon.serviceBlockingGate.retryFailed': - 'Ponowna próba się nie powiodła. Pobierz najnowszą wersję aplikacji i spróbuj ponownie.', - 'daemon.serviceBlockingGate.retrying': 'Ponawianie...', - 'daemon.serviceBlockingGate.title': 'Rdzeń OpenHuman jest niedostępny', - // home.banners - 'home.banners.discordSubtitle': 'Pomoc, opinie i wczesny dostęp do funkcji.', - 'home.banners.discordTitle': 'Dołącz do naszego Discorda', - 'home.banners.earlyBirdDismiss': 'Odrzuć baner early bird', - 'home.banners.earlyBirdFirstSub': 'pierwszą subskrypcję.', - 'home.banners.earlyBirdOn': 'Early bird na', - 'home.banners.earlyBirdTitle': 'Pierwszych 1000 użytkowników otrzymuje 60% zniżki.', - 'home.banners.earlyBirdUseCode': 'Użyj kodu early bird', - 'home.banners.getSubscription': 'wykup subskrypcję', - 'home.banners.promoCreditsBody': 'Przetestuj OpenHuman, a gdy będziesz gotowy(a) na więcej,', - 'home.banners.promoCreditsTitle': 'Masz {amount} kredytów promocyjnych.', - 'home.banners.promoCreditsUsage': 'i uzyskaj 10x więcej użycia.', - // intelligence - 'intelligence.memoryChunk.detail.chunk': 'Fragment', - 'intelligence.memoryChunk.detail.copyChunkId': 'Skopiuj ID fragmentu', - 'intelligence.memoryChunk.detail.embeddingInfo': 'bge-m3 1024 wymiarów', - 'intelligence.memoryChunk.detail.noEmbedding': 'Brak embeddingu', - 'intelligence.memoryChunk.letterhead.from': 'od', - 'intelligence.memoryChunk.letterhead.to': 'do', - 'intelligence.memoryChunk.mentioned.chunkOne': '1 fragment', - 'intelligence.memoryChunk.mentioned.chunkOther': '{count} fragmentów', - 'intelligence.memoryChunk.mentioned.heading': 'w z m i a n k o w a n e', - 'intelligence.memoryChunk.scoreBars.ariaScore': '{name} wynik {pct} procent', - 'intelligence.memoryChunk.scoreBars.atThreshold': 'na progu {threshold}', - 'intelligence.memoryChunk.scoreBars.dropped': 'odrzucone', - 'intelligence.memoryChunk.scoreBars.heading': 'd l a c z e g o z a c h o w a n e', - 'intelligence.memoryChunk.scoreBars.kept': 'zachowane', - 'intelligence.memoryText.entityTypePrefix': 'Typ encji', - 'intelligence.screenDebug.active': 'Aktywne', - 'intelligence.screenDebug.app': 'Aplikacja', - 'intelligence.screenDebug.bounds': 'Granice', - 'intelligence.screenDebug.captureAlt': 'Wynik testu przechwytywania', - 'intelligence.screenDebug.captureFailed': 'Niepowodzenie', - 'intelligence.screenDebug.captureSuccess': 'Powodzenie', - 'intelligence.screenDebug.captureTest': 'Test przechwytywania', - 'intelligence.screenDebug.capturing': 'Przechwytywanie', - 'intelligence.screenDebug.frames': 'Klatki', - 'intelligence.screenDebug.idle': 'Bezczynne', - 'intelligence.screenDebug.lastApp': 'Ostatnia aplikacja', - 'intelligence.screenDebug.mode': 'Tryb', - 'intelligence.screenDebug.permAccessibility': 'Uprawnienie: dostępność', - 'intelligence.screenDebug.permInput': 'Uprawnienie: wejście', - 'intelligence.screenDebug.permScreen': 'Dostępność', - 'intelligence.screenDebug.permissions': 'Uprawnienia', - 'intelligence.screenDebug.platformNotSupported': 'Platforma nieobsługiwana', - 'intelligence.screenDebug.recentVisionSummaries': 'Ostatnie podsumowania wizji', - 'intelligence.screenDebug.session': 'Sesja', - 'intelligence.screenDebug.size': 'Rozmiar', - 'intelligence.screenDebug.status': 'Stan', - 'intelligence.screenDebug.testCapture': 'Testuj przechwytywanie', - 'intelligence.screenDebug.time': 'Czas', - 'intelligence.screenDebug.title': 'Tytuł', - 'intelligence.screenDebug.unknown': 'Nieznane', - 'intelligence.screenDebug.visionQueue': 'Kolejka wizji', - 'intelligence.screenDebug.visionState': 'Stan wizji', - 'intelligence.tasks.activeBoardOne': '1 aktywna tablica w rozmowach', - 'intelligence.tasks.activeBoardOther': '{count} aktywnych tablic w rozmowach', - 'intelligence.tasks.empty': 'Brak tablic zadań agenta', - 'intelligence.tasks.emptyHint': 'Tablice pojawią się tutaj po rozpoczęciu pracy z agentem.', - 'intelligence.tasks.failedToLoad': 'Nie udało się wczytać', - 'intelligence.tasks.live': 'na żywo', - 'intelligence.tasks.loadingBoards': 'Wczytywanie tablic zadań…', - 'intelligence.tasks.threadPrefix': 'Wątek {thread}', - // notifications card/center - 'notifications.card.dismiss': 'Odrzuć powiadomienie', - 'notifications.card.importanceTitle': 'Ważność: {pct}%', - 'notifications.center.empty': 'Brak powiadomień', - 'notifications.center.emptyHint': 'Nowe powiadomienia pojawią się tutaj.', - 'notifications.center.filterAll': 'Wszystkie', - 'notifications.center.markAllRead': 'Oznacz wszystkie jako przeczytane', - 'notifications.center.title': 'Powiadomienia', - // oauth - 'oauth.button.loopbackTimeout': - 'Logowanie przekroczyło limit czasu — przeglądarka nie ukończyła przekierowania OAuth. Spróbuj ponownie.', - 'oauth.button.connecting': 'Łączenie...', - 'oauth.login.continueWith': 'Kontynuuj z', - // onboarding.contextGathering - 'onboarding.contextGathering.buildingDesc': - 'Analizujemy Twój kontekst, aby spersonalizować pierwsze rozmowy.', - 'onboarding.contextGathering.buildingProfile': 'Budowanie Twojego profilu...', - 'onboarding.contextGathering.continueToChat': 'Przejdź do czatu', - 'onboarding.contextGathering.errorDesc': - 'Twój czat jest gotowy. Będziemy nadal budować pełny profil w tle, więc możesz już teraz kontynuować i dopracowywać go z czasem.', - 'onboarding.contextGathering.coreAlive': - 'Rdzeń jest osiągalny — pierwsze uruchomienie może potrwać minutę.', - 'onboarding.contextGathering.coreAliveProbing': 'Sprawdzanie połączenia z rdzeniem…', - 'onboarding.contextGathering.coreUnreachable': - 'Rdzeń nie odpowiada. Możesz kontynuować i spróbować ponownie później.', - 'onboarding.contextGathering.stillWorkingDesc': - 'Pierwsze uruchomienie może potrwać 30–60 sekund podczas rozgrzewania lokalnego modelu i narzędzi. Możesz przejść do czatu w każdej chwili — budowa profilu działa w tle.', - 'onboarding.contextGathering.stillWorkingTitle': 'Trwa praca nad Twoim profilem…', - 'onboarding.contextGathering.title': 'Zbieranie kontekstu', - // overlay - 'overlay.ariaAttention': 'Wiadomość uwagi', - 'overlay.ariaCompanion': 'Companion aktywny', - 'overlay.ariaOrb': 'Nakładka OpenHuman', - 'overlay.ariaVoiceActive': 'Wejście głosowe aktywne', - 'overlay.companion.error': 'Błąd', - 'overlay.companion.listening': 'Słucham…', - 'overlay.companion.pointing': 'Wskazuję…', - 'overlay.companion.speaking': 'Mówię…', - 'overlay.companion.thinking': 'Myślę…', - 'overlay.orbTitle': 'Przeciągnij, aby przesunąć · Kliknij dwukrotnie, aby zresetować pozycję', - // pages.settings.account - 'pages.settings.account.connections': 'Połączenia', - 'pages.settings.account.connectionsDesc': 'Przeglądaj i zarządzaj połączeniami kont', - 'pages.settings.account.privacy': 'Prywatność', - 'pages.settings.account.privacyDesc': - 'Zarządzaj udostępnianiem danych i anonimowymi preferencjami użycia', - 'pages.settings.account.recoveryPhrase': 'Fraza odzyskiwania', - 'pages.settings.account.recoveryPhraseDesc': - 'Zarządzaj swoją frazą odzyskiwania BIP39 do szyfrowania i dostępu do portfela', - 'pages.settings.account.team': 'Zespół', - 'pages.settings.account.teamDesc': 'Zarządzaj zespołem, członkami i zaproszeniami', - 'pages.settings.account.migration': 'Importuj z innego asystenta', - 'pages.settings.account.migrationDesc': - 'Przenieś pamięć i notatki z OpenClaw (a wkrótce również Hermes) do tej przestrzeni roboczej.', - 'pages.settings.accountSection.description': - 'Fraza odzyskiwania, zespół, połączenia i ustawienia prywatności.', - 'pages.settings.accountSection.title': 'Konto', - // pages.settings.ai - 'pages.settings.ai.llm': 'LLM', - 'pages.settings.ai.llmDesc': 'Dostawcy modeli językowych i trasowanie', - 'pages.settings.ai.voice': 'Głos', - 'pages.settings.ai.voiceDesc': 'Konfiguracja STT i TTS dla rozmów głosowych', - 'pages.settings.ai.embeddings': 'Embeddingi', - 'pages.settings.ai.embeddingsDesc': 'Model kodowania wektorowego do wyszukiwania w pamięci', - 'pages.settings.aiSection.description': - 'Dostawcy modeli językowych, lokalna Ollama i głos (STT / TTS).', - 'pages.settings.aiSection.title': 'AI', - 'pages.settings.composioSection.title': 'Composio', - 'pages.settings.composioSection.description': - 'Trasowanie, wyzwalacze i historia integracji obsługiwanych przez Composio.', - 'pages.settings.features.desktopCompanion': 'Desktop Companion', - 'pages.settings.features.desktopCompanionDesc': - 'Asystent głosowy ze świadomością ekranu — słucha, widzi, mówi, wskazuje', - 'pages.settings.features.messagingChannels': 'Kanały komunikacji', - 'pages.settings.features.messagingChannelsDesc': - 'Konfiguruj kanały takie jak Telegram, Discord i Slack', - 'pages.settings.features.notifications': 'Powiadomienia', - 'pages.settings.features.notificationsDesc': - 'Steruj alertami systemowymi i kategoriami powiadomień', - 'pages.settings.features.screenAwareness': 'Świadomość ekranu', - 'pages.settings.features.screenAwarenessDesc': - 'Uprawnienia, monitorowanie i sesje przechwytywania ekranu', - 'pages.settings.features.tools': 'Narzędzia', - 'pages.settings.features.toolsDesc': 'Wybierz, z jakich możliwości OpenHuman może korzystać', - 'pages.settings.featuresSection.description': 'Świadomość ekranu, komunikacja i narzędzia.', - 'pages.settings.featuresSection.title': 'Funkcje', - // privacy - 'privacy.dataKind.credentials': 'Poświadczenia', - 'privacy.dataKind.derived': 'Wyprowadzone', - 'privacy.dataKind.diagnostics': 'Diagnostyka', - 'privacy.dataKind.metadata': 'Metadane', - 'privacy.dataKind.raw': 'Surowe', - 'privacy.whatLeaves.link.label': 'Co opuszcza mój komputer?', - // rewards.community - 'rewards.community.achievementsUnlocked': 'Odblokowano {unlocked} z {total} osiągnięć', - 'rewards.community.connectDiscord': 'Połącz Discord', - 'rewards.community.cumulativeTokens': 'Łączna liczba tokenów', - 'rewards.community.currentStreak': 'Aktualna seria', - 'rewards.community.discordLinkedNotInGuild': 'Powiązane, ale nie na serwerze', - 'rewards.community.discordMember': 'Dołączono do serwera', - 'rewards.community.discordNotLinked': 'Nie powiązane', - 'rewards.community.discordServer': 'Serwer Discord', - 'rewards.community.discordStatusUnavailable': 'Status członkostwa niedostępny', - 'rewards.community.discordWaiting': 'Oczekiwanie na synchronizację z backendem', - 'rewards.community.heroSubtitle': - 'Odblokuj ekskluzywne kanały, odznaki wspierających i nagrody synchronizowane z backendem, łącząc swoje konto Discord.', - 'rewards.community.heroTitle': 'Zdobywaj nagrody i role na Discordzie', - 'rewards.community.joinDiscord': 'Dołącz do Discorda', - 'rewards.community.loadingRewards': 'Wczytywanie nagród…', - 'rewards.community.locked': 'Zablokowane', - 'rewards.community.retrying': 'Ponawianie…', - 'rewards.community.rolesAndRewards': 'Role i nagrody', - 'rewards.community.streakDays': '{n} dni', - 'rewards.community.syncPending': 'Synchronizacja nagród w toku', - 'rewards.community.syncPendingDesc': - 'Trwa synchronizacja Twoich nagród. Spróbuj ponownie za chwilę.', - 'rewards.community.syncUnavailable': 'Synchronizacja niedostępna', - 'rewards.community.tryAgain': 'Ponawianie…', - 'rewards.community.unknown': 'Nieznane', - 'rewards.community.unlocked': 'Odblokowane', - 'rewards.community.yourProgress': 'Twój postęp', - // rewards.coupon - 'rewards.coupon.colCode': 'Kod', - 'rewards.coupon.colRedeemed': 'Zrealizowano', - 'rewards.coupon.colReward': 'Nagroda', - 'rewards.coupon.colStatus': 'Status', - 'rewards.coupon.loadingHistory': 'Wczytywanie historii nagród…', - 'rewards.coupon.noCodes': 'Nie zrealizowano jeszcze żadnych kodów.', - 'rewards.coupon.pending': 'Oczekujące', - 'rewards.coupon.placeholder': 'Kod kuponu', - 'rewards.coupon.promoCredits': 'Kredyty promocyjne', - 'rewards.coupon.recentRedemptions': 'Ostatnie realizacje', - 'rewards.coupon.redeemAccepted': - '{code} zaakceptowany. {amount} zostanie odblokowane po wykonaniu wymaganej akcji.', - 'rewards.coupon.redeemButton': 'Zrealizuj kod', - 'rewards.coupon.redeemSuccess': '{code} zrealizowany. {amount} dodano do Twoich kredytów.', - 'rewards.coupon.redeemedCodes': 'Zrealizowane kody', - 'rewards.coupon.redeeming': 'Realizacja...', - 'rewards.coupon.statusApplied': 'Zastosowano', - 'rewards.coupon.statusPendingAction': 'Oczekuje na akcję', - 'rewards.coupon.statusRedeemed': 'Zrealizowano', - 'rewards.coupon.subtitle': 'Wprowadź kod, aby otrzymać kredyty promocyjne.', - 'rewards.coupon.title': 'Zrealizuj kod kuponu', - // rewards.referralSection - 'rewards.referralSection.activity': 'Aktywność poleceń', - 'rewards.referralSection.apply': 'Stosowanie…', - 'rewards.referralSection.applying': 'Stosowanie…', - 'rewards.referralSection.colReferredUser': 'Polecony użytkownik', - 'rewards.referralSection.colReward': 'Nagroda', - 'rewards.referralSection.colStatus': 'Status', - 'rewards.referralSection.colUpdated': 'Zaktualizowano', - 'rewards.referralSection.completed': 'Zakończone', - 'rewards.referralSection.copyCode': 'Kopiuj kod', - 'rewards.referralSection.copyFailed': 'Kopiowanie nie powiodło się', - 'rewards.referralSection.haveCode': 'Masz kod polecający?', - 'rewards.referralSection.haveCodeDesc': - 'Wprowadź kod, który otrzymałeś(aś) od znajomego, aby uzyskać bonus.', - 'rewards.referralSection.linked': 'Powiązane', - 'rewards.referralSection.linkedCode': '(kod {code})', - 'rewards.referralSection.loading': 'Wczytywanie programu poleceń…', - 'rewards.referralSection.noReferrals': 'Brak poleceń', - 'rewards.referralSection.pendingReferrals': 'Oczekujące polecenia', - 'rewards.referralSection.placeholder': 'Kod polecający', - 'rewards.referralSection.share': 'Udostępnij', - 'rewards.referralSection.statusCompleted': 'Zakończone', - 'rewards.referralSection.statusExpired': 'Wygasłe', - 'rewards.referralSection.statusJoined': 'Dołączył(a)', - 'rewards.referralSection.subtitle': 'Zaproś znajomych do OpenHuman i zarabiajcie kredyty razem.', - 'rewards.referralSection.title': 'Zapraszaj znajomych, zarabiaj kredyty', - 'rewards.referralSection.totalEarned': 'Łącznie zarobione', - 'rewards.referralSection.yourCode': 'Twój kod', - // settings.ai (extras) - 'settings.ai.addCloudProvider': 'Dodaj dostawcę chmurowego', - 'settings.ai.addProvider': 'Zapisywanie…', - 'settings.ai.apiKeyFieldLabel': 'Klucz API', - 'settings.ai.apiKeyRequired': 'Wklej swój klucz API, aby kontynuować.', - 'settings.ai.apiKeyStoredEncrypted': 'Klucz API przechowywany w postaci zaszyfrowanej', - 'settings.ai.apiKeysEncrypted': 'auth-profiles.json', - 'settings.ai.clearStoredKey': 'Wyczyść zapisany klucz', - 'settings.ai.connectProvider': 'Połącz dostawcę', - 'settings.ai.customRouting': 'Własne trasowanie', - 'settings.ai.defaultResolvesTo': 'OpenHuman', - 'settings.ai.discard': 'Odrzuć', - 'settings.ai.editProvider': 'Edytuj dostawcę', - 'settings.ai.llmProviders': 'Dostawcy LLM', - 'settings.ai.llmProvidersDesc': 'Skonfiguruj dostawców chmurowych i lokalnych modeli językowych.', - 'settings.ai.localOllama': 'Lokalny (Ollama)', - 'settings.ai.modelLabel': 'Model', - 'settings.ai.noCustomProviders': 'Brak własnych dostawców', - 'settings.ai.openAiCompat.authHeaderExample': 'Authorization: Bearer ', - 'settings.ai.openAiCompat.authHeaderLabel': 'Nagłówek uwierzytelniania', - 'settings.ai.openAiCompat.baseUrlLabel': 'Bazowy URL', - 'settings.ai.openAiCompat.baseUrlUnavailable': 'Niedostępny', - 'settings.ai.openAiCompat.clearKey': 'Wyczyść klucz', - 'settings.ai.openAiCompat.description': - 'Skieruj lokalne harnesy do tego serwera /v1, aby kierować ruch przez dostawców skonfigurowanych poniżej. Uwierzytelnianie używa stabilnego klucza ustawionego tutaj, nie wewnętrznego tokenu rdzenia aplikacji.', - 'settings.ai.openAiCompat.keyConfigured': 'Klucz skonfigurowany', - 'settings.ai.openAiCompat.keyRequired': 'Klucz wymagany', - 'settings.ai.openAiCompat.rotateKey': 'Rotuj klucz', - 'settings.ai.openAiCompat.setKey': 'Ustaw klucz', - 'settings.ai.openAiCompat.title': 'Endpoint kompatybilny z OpenAI', - 'settings.ai.providerLabel': 'Dostawca', - 'settings.ai.routing': 'Trasowanie', - 'settings.ai.routingCustom': 'Własne trasowanie', - 'settings.ai.routingDefault': 'Domyślne', - 'settings.ai.routingDesc': - 'Wybierz, którzy dostawcy obsługują które workloady (czat, tło, embeddingi).', - 'settings.ai.saveChanges': 'Zapisywanie…', - 'settings.ai.saving': 'Zapisywanie…', - 'settings.ai.unsavedChange': 'niezapisana zmiana', - 'settings.ai.unsavedChanges': 'niezapisane zmiany', - 'settings.ai.workloadGroupBackground': 'Grupa workloadów: tło', - 'settings.ai.workloadGroupChat': 'Grupa workloadów: czat', - // settings.autocomplete - 'settings.autocomplete.appFilter.acceptSuggestion': 'Akceptuj sugestię', - 'settings.autocomplete.appFilter.contextOverride': 'Nadpisanie kontekstu (opcjonalne)', - 'settings.autocomplete.appFilter.debugFocus': 'Debug fokusa', - 'settings.autocomplete.appFilter.getSuggestion': 'Pobierz sugestię', - 'settings.autocomplete.appFilter.liveLogs': 'Dziennik na żywo', - 'settings.autocomplete.appFilter.noLogs': ') :', - 'settings.autocomplete.appFilter.refreshStatus': 'Odświeżanie…', - 'settings.autocomplete.appFilter.refreshing': 'Odświeżanie…', - 'settings.autocomplete.appFilter.runtime': 'Środowisko', - 'settings.autocomplete.appFilter.test': 'Test', - 'settings.autocomplete.completionStyle.acceptedCompletion': - 'Zapisano {count} zaakceptowane uzupełnienie — używane do personalizacji przyszłych sugestii.', - 'settings.autocomplete.completionStyle.acceptedCompletions': - 'Zapisano {count} zaakceptowanych uzupełnień — używane do personalizacji przyszłych sugestii.', - 'settings.autocomplete.completionStyle.clearHistory': 'Czyszczenie…', - 'settings.autocomplete.completionStyle.clearing': 'Czyszczenie…', - 'settings.autocomplete.completionStyle.debounce': 'Debounce (ms)', - 'settings.autocomplete.completionStyle.enabled': 'Włączone', - 'settings.autocomplete.completionStyle.maxChars': 'Maks. znaków', - 'settings.autocomplete.completionStyle.noHistory': - 'Brak zaakceptowanych uzupełnień. Akceptuj sugestie Tabem, aby rozpocząć personalizację.', - 'settings.autocomplete.completionStyle.overlayTtl': 'TTL nakładki (ms)', - 'settings.autocomplete.completionStyle.personalizationHistory': 'Historia personalizacji', - 'settings.autocomplete.completionStyle.styleExamples': 'Przykłady stylu (jeden w wierszu)', - 'settings.autocomplete.completionStyle.styleInstructions': 'Instrukcje stylu', - // settings.billing.autoRecharge - 'settings.billing.autoRecharge.addAmount': 'Dodaj tę kwotę', - 'settings.billing.autoRecharge.addCard': 'Dodaj kartę', - 'settings.billing.autoRecharge.amountHint': 'Minimalna kwota doładowania to równowartość 5 USD.', - 'settings.billing.autoRecharge.defaultCard': 'Karta domyślna', - 'settings.billing.autoRecharge.lastRechargeFailed': 'Ostatnie doładowanie nie powiodło się', - 'settings.billing.autoRecharge.lastRecharged': 'Ostatnio doładowano', - 'settings.billing.autoRecharge.noCards': 'Brak kart', - 'settings.billing.autoRecharge.paymentMethods': 'Metody płatności', - 'settings.billing.autoRecharge.rechargeInProgress': 'Doładowanie w toku', - 'settings.billing.autoRecharge.rechargeWhen': 'Doładuj, gdy saldo spadnie poniżej', - 'settings.billing.autoRecharge.saveSettings': 'Zapisywanie…', - 'settings.billing.autoRecharge.saving': 'Zapisywanie…', - 'settings.billing.autoRecharge.setDefault': ':', - 'settings.billing.autoRecharge.subtitle': - 'Automatycznie doładowuj kredyty, gdy saldo spadnie poniżej progu.', - 'settings.billing.autoRecharge.title': 'Włącz automatyczne doładowanie', - 'settings.billing.autoRecharge.toggleAriaLabel': 'Przełącz automatyczne doładowanie', - 'settings.billing.autoRecharge.weeklyLimit': 'Tygodniowy limit wydatków', - // settings.billing.history - 'settings.billing.history.desc': 'Twoje ostatnie transakcje i rozliczenia.', - 'settings.billing.history.empty': 'Brak historii do wyświetlenia.', - 'settings.billing.history.openPortal': 'Otwórz portal', - 'settings.billing.history.posted': 'Zaksięgowano', - 'settings.billing.history.title': 'Historia rozliczeń', - // settings.billing.inferenceBudget - 'settings.billing.inferenceBudget.cycleEnds': 'Koniec cyklu', - 'settings.billing.inferenceBudget.exhausted': 'Wyczerpane', - 'settings.billing.inferenceBudget.loadError': 'Błąd wczytywania', - 'settings.billing.inferenceBudget.noBudgetDesc': - 'Brak aktywnego budżetu cyklicznego. Wykup plan, aby zacząć.', - 'settings.billing.inferenceBudget.noRecurringBudget': 'Brak budżetu cyklicznego', - 'settings.billing.inferenceBudget.remaining': 'Pozostało', - 'settings.billing.inferenceBudget.tenHourCap': 'Limit 10-godzinny', - 'settings.billing.inferenceBudget.title': 'Budżet inferencji', - // settings.billing.payAsYouGo - 'settings.billing.payAsYouGo.available': 'Dostępne', - 'settings.billing.payAsYouGo.chargeCustomAmount': 'Otwieranie…', - 'settings.billing.payAsYouGo.chooseTopUpDesc': 'Wybierz kwotę doładowania lub wprowadź własną.', - 'settings.billing.payAsYouGo.chooseTopUpTitle': 'Wybierz kwotę doładowania', - 'settings.billing.payAsYouGo.creditBalanceDesc': - 'Twoje aktualne saldo kredytów dostępne do użycia.', - 'settings.billing.payAsYouGo.creditBalanceTitle': 'Saldo kredytów', - 'settings.billing.payAsYouGo.customAmount': 'Własna kwota', - 'settings.billing.payAsYouGo.enterAmount': 'Wprowadź kwotę', - 'settings.billing.payAsYouGo.opening': 'Otwieranie', - 'settings.billing.payAsYouGo.promotionalCredits': 'Kredyty promocyjne', - 'settings.billing.payAsYouGo.topUpBalance': 'Doładuj saldo', - 'settings.billing.payAsYouGo.topUpCredits': 'Doładuj kredyty', - 'settings.billing.payAsYouGo.unableToLoad': 'Nie można wczytać salda.', - // settings.billing.subscription - 'settings.billing.subscription.annual': 'Roczna', - 'settings.billing.subscription.billedAnnually': 'Rozliczane rocznie', - 'settings.billing.subscription.chooseSubtitle': 'Wybierz plan dopasowany do Twoich potrzeb.', - 'settings.billing.subscription.chooseTitle': 'Wybierz plan', - 'settings.billing.subscription.cryptoDesc': - 'Możesz zapłacić również w kryptowalucie — skontaktuj się z nami.', - 'settings.billing.subscription.cryptoQuestion': 'Wolisz zapłacić kryptowalutą?', - 'settings.billing.subscription.current': 'Bieżący', - 'settings.billing.subscription.currentPlan': 'Bieżący plan', - 'settings.billing.subscription.monthly': 'Miesięczna', - 'settings.billing.subscription.paymentConfirmed': 'Płatność potwierdzona', - 'settings.billing.subscription.perMonth': 'miesięcznie', - 'settings.billing.subscription.popular': 'Popularne', -}; - -export default pl4; diff --git a/app/src/lib/i18n/chunks/pl-5.ts b/app/src/lib/i18n/chunks/pl-5.ts deleted file mode 100644 index 5485079cd..000000000 --- a/app/src/lib/i18n/chunks/pl-5.ts +++ /dev/null @@ -1,1023 +0,0 @@ -import type { TranslationMap } from '../types'; -import en5 from './en-5'; - -// Polish chunk 5/5. Spreads the English source-of-truth chunk so every key is -// present (i18n parity gate); Polish values below override EN where translated. -const pl5: TranslationMap = { - ...en5, - // settings.billing.subscription (extras) - 'settings.billing.subscription.save': '{pct}', - 'settings.billing.subscription.upgrade': 'Podnieś plan', - 'settings.billing.subscription.waiting': 'Oczekiwanie', - 'settings.billing.subscription.waitingPayment': 'Oczekiwanie na płatność', - // settings.composio - 'settings.composio.apiKeyDesc': - 'Klucz API Composio jest obecnie przechowywany na tym urządzeniu.', - 'settings.composio.apiKeyLabel': 'Klucz API Composio', - 'settings.composio.apiKeyStored': 'Klucz API zapisany', - 'settings.composio.apiKeyStoredPlaceholder': '••••••••••••••••', - 'settings.composio.clearedToBackend': 'Przełączono na tryb backendowy', - 'settings.composio.confirmItem1': 'Konto w app.composio.dev z kluczem API', - 'settings.composio.confirmItem2': - 'Ponowne powiązanie każdej integracji przez Twoje osobiste konto Composio', - 'settings.composio.confirmItem3': - 'Uwaga: wyzwalacze Composio (webhooks w czasie rzeczywistym) nie działają jeszcze w trybie bezpośrednim — tylko synchroniczne wywołania narzędzi', - 'settings.composio.confirmNeedItems': 'Będziesz potrzebować:', - 'settings.composio.confirmSwitch': 'Rozumiem, przełącz na tryb bezpośredni', - 'settings.composio.confirmTitle': '⚠️ Przełączanie na tryb bezpośredni', - 'settings.composio.confirmWarning': - 'Twoje istniejące integracje (Gmail, Slack, GitHub itp. połączone przez OpenHuman) nie będą widoczne — żyją w tenant Composio zarządzanym przez OpenHuman.', - 'settings.composio.intro': - 'Composio integruje 250+ zewnętrznych aplikacji jako narzędzia, z których może korzystać Twój agent. Wybierz, jak kierować te wywołania.', - 'settings.composio.modeDirect': 'Bezpośredni (przynieś własny klucz API)', - 'settings.composio.modeDirectDesc': - 'Wywołania trafiają bezpośrednio do backend.composio.dev. Suwerennie / przyjazne offline. Wywołania narzędzi działają synchronicznie; webhooks wyzwalaczy w czasie rzeczywistym nie są jeszcze trasowane w trybie bezpośrednim.', - 'settings.composio.modeManaged': 'Zarządzany (OpenHuman robi to za Ciebie)', - 'settings.composio.modeManagedDesc': - 'OpenHuman pośredniczy w wywołaniach narzędzi przez nasz backend (zalecane). Uwierzytelnianie jest pośredniczone; nie musisz wklejać klucza API Composio. Webhooks są w pełni trasowane.', - 'settings.composio.routingMode': 'Tryb trasowania', - 'settings.composio.saveErrorNoKey': - 'Nie udało się zapisać. Tryb bezpośredni wymaga niepustego klucza API.', - 'settings.composio.saving': 'Zapisywanie…', - 'settings.composio.switching': 'Przełączanie…', - // settings.cron - 'settings.cron.jobs.desc': 'Zadania cykliczne uruchamiane przez harmonogram rdzenia.', - 'settings.cron.jobs.empty': 'Nie znaleziono zadań cron rdzenia.', - 'settings.cron.jobs.lastStatus': 'Ostatni status', - 'settings.cron.jobs.loading': 'Wczytywanie zadań cron...', - 'settings.cron.jobs.loadingRuns': 'Wczytywanie uruchomień', - 'settings.cron.jobs.nextRun': 'Następne uruchomienie', - 'settings.cron.jobs.pause': 'Wstrzymaj', - 'settings.cron.jobs.paused': 'Wstrzymane', - 'settings.cron.jobs.recentRuns': 'Ostatnie uruchomienia', - 'settings.cron.jobs.removing': 'Usuwanie', - 'settings.cron.jobs.resume': 'Wznów', - 'settings.cron.jobs.runningNow': 'Uruchamiane teraz', - 'settings.cron.jobs.saving': 'Zapisywanie…', - 'settings.cron.jobs.schedule': 'Harmonogram', - 'settings.cron.jobs.title': 'Zadania cron rdzenia', - 'settings.cron.jobs.viewRuns': 'Zobacz uruchomienia', - // settings.localModel.deviceCapability - 'settings.localModel.deviceCapability.active': 'Aktywne', - 'settings.localModel.deviceCapability.appliedTier': 'Zastosowany poziom', - 'settings.localModel.deviceCapability.applying': 'Stosowanie', - 'settings.localModel.deviceCapability.cores': '{count}', - 'settings.localModel.deviceCapability.couldNotLoadPresets': 'Nie udało się wczytać presetów', - 'settings.localModel.deviceCapability.cpu': 'CPU', - 'settings.localModel.deviceCapability.customModelIds': 'Własne ID modeli', - 'settings.localModel.deviceCapability.detected': 'Wykryto', - 'settings.localModel.deviceCapability.disabled': 'Wyłączone', - 'settings.localModel.deviceCapability.disabledDesc': - 'Lokalne AI wyłączone — używana jest chmura jako rezerwa.', - 'settings.localModel.deviceCapability.downloadingModels': '(pobieranie modeli)', - 'settings.localModel.deviceCapability.downloadingSetupDesc': - 'Pobieranie instalatora OllamaSetup (~2 GB) i rozpakowywanie. Pierwsza instalacja może potrwać minutę.', - 'settings.localModel.deviceCapability.failedToApplyPreset': 'Nie udało się zastosować presetu', - 'settings.localModel.deviceCapability.gpu': 'GPU', - 'settings.localModel.deviceCapability.installFailed': 'Instalacja Ollama nie powiodła się', - 'settings.localModel.deviceCapability.installFailedDesc': - 'Instalator zakończył pracę, zanim Ollama była gotowa. Kliknij ponów, aby spróbować jeszcze raz, lub zainstaluj ręcznie z ollama.com.', - 'settings.localModel.deviceCapability.installFirst': 'Najpierw uruchom Ollamę.', - 'settings.localModel.deviceCapability.installFirstDesc': - 'Lokalne poziomy zależą od zewnętrznie zarządzanego endpointu Ollama. Uruchom go samodzielnie, pobierz potrzebne modele i pozostań przy „Wyłączone (rezerwa chmurowa)”, dopóki środowisko nie będzie osiągalne.', - 'settings.localModel.deviceCapability.installOllamaFirst': - 'Najpierw uruchom Ollamę, aby użyć tego poziomu', - 'settings.localModel.deviceCapability.installingOllama': 'Instalowanie Ollama', - 'settings.localModel.deviceCapability.loadingDeviceInfo': 'Wczytywanie informacji o urządzeniu', - 'settings.localModel.deviceCapability.localAiDisabled': - 'Lokalne AI wyłączone — używana jest rezerwa chmurowa.', - 'settings.localModel.deviceCapability.modelTier': 'Poziom modelu', - 'settings.localModel.deviceCapability.needsOllama': 'Wymaga Ollama', - 'settings.localModel.deviceCapability.notDetected': 'Nie wykryto', - 'settings.localModel.deviceCapability.ram': 'RAM', - 'settings.localModel.deviceCapability.recommended': 'Zalecane', - 'settings.localModel.deviceCapability.retryInstall': 'Ponawianie…', - 'settings.localModel.deviceCapability.retrying': 'Ponawianie…', - 'settings.localModel.deviceCapability.starting': 'Uruchamianie…', - // settings.localModel.download - 'settings.localModel.download.audioPathPlaceholder': 'Bezwzględna ścieżka do pliku audio', - 'settings.localModel.download.capabilityAssets': 'Zasoby możliwości', - 'settings.localModel.download.downloading': 'Pobieranie...', - 'settings.localModel.download.embeddingPlaceholder': 'Jeden ciąg wejściowy w wierszu...', - 'settings.localModel.download.noThinkMode': 'Tryb bez myślenia', - 'settings.localModel.download.promptPlaceholder': - 'Wpisz dowolny prompt i uruchom go na modelu lokalnym...', - 'settings.localModel.download.quantizationPref': 'Preferencja kwantyzacji', - 'settings.localModel.download.runEmbeddingTest': 'Uruchamianie...', - 'settings.localModel.download.runPromptTest': 'Uruchom test promptu', - 'settings.localModel.download.runSummaryTest': 'Uruchom test podsumowania', - 'settings.localModel.download.runTranscriptionTest': 'Uruchamianie...', - 'settings.localModel.download.runTtsTest': 'Uruchamianie...', - 'settings.localModel.download.runVisionTest': 'Uruchamianie...', - 'settings.localModel.download.running': 'Uruchamianie...', - 'settings.localModel.download.runningPrompt': 'Uruchamianie promptu', - 'settings.localModel.download.summarizePlaceholder': - 'Wklej tekst do podsumowania modelem lokalnym...', - 'settings.localModel.download.testCustomPrompt': 'Testuj własny prompt', - 'settings.localModel.download.testEmbeddings': 'Testuj embeddingi', - 'settings.localModel.download.testSummarization': 'Testuj podsumowywanie', - 'settings.localModel.download.testVisionPrompt': 'Testuj prompt wizji', - 'settings.localModel.download.testVoiceInput': 'Testuj wejście głosowe (STT)', - 'settings.localModel.download.testVoiceOutput': 'Testuj wyjście głosowe (TTS)', - 'settings.localModel.download.ttsOutputPlaceholder': 'Opcjonalna ścieżka wyjściowa WAV', - 'settings.localModel.download.ttsPlaceholder': 'Wprowadź tekst do syntezy...', - 'settings.localModel.download.visionImagePlaceholder': - 'Jedno odniesienie do obrazu w wierszu (data URI, URL lub marker lokalnej ścieżki)', - 'settings.localModel.download.visionPromptPlaceholder': 'Wprowadź prompt dla modelu wizji...', - // settings.localModel.status - 'settings.localModel.status.allChecksPassed': 'Wszystkie testy zaliczone', - 'settings.localModel.status.artifact': 'Artefakt', - 'settings.localModel.status.backend': 'Backend', - 'settings.localModel.status.binary': 'Plik binarny', - 'settings.localModel.status.bootstrapResume': 'Inicjalizacja / wznowienie', - 'settings.localModel.status.checking': 'Sprawdzanie...', - 'settings.localModel.status.checkingOllama': 'Sprawdzanie Ollama', - 'settings.localModel.status.customLocation': 'Własna lokalizacja', - 'settings.localModel.status.customLocationDesc': 'Wskaż ręcznie ścieżkę do binarki Ollama.', - 'settings.localModel.status.diagnosticsHint': - 'Kliknij „Uruchom diagnostykę”, aby zweryfikować, że Ollama działa i modele są zainstalowane.', - 'settings.localModel.status.downloadingUnknown': 'Pobieranie (rozmiar nieznany)', - 'settings.localModel.status.eta': 'Pozostały czas', - 'settings.localModel.status.expectedModels': 'Oczekiwane modele', - 'settings.localModel.status.forceRebootstrap': 'Wymuś ponowną inicjalizację', - 'settings.localModel.status.generationTps': 'TPS generowania', - 'settings.localModel.status.hideErrorDetails': 'Ukryj szczegóły błędu', - 'settings.localModel.status.installManually': 'Zainstaluj ręcznie', - 'settings.localModel.status.installManuallyFrom': 'Zainstaluj ręcznie z', - 'settings.localModel.status.installOllama': 'Uruchamianie…', - 'settings.localModel.status.installedModels': 'Zainstalowane modele', - 'settings.localModel.status.installing': 'Instalowanie...', - 'settings.localModel.status.installingOllama': 'Instalowanie środowiska Ollama...', - 'settings.localModel.status.issues': 'Problemy', - 'settings.localModel.status.issuesFound': 'Znaleziono {count} problemów', - 'settings.localModel.status.lastLatency': 'Ostatnie opóźnienie', - 'settings.localModel.status.model': 'Model', - 'settings.localModel.status.notFound': 'Nie znaleziono', - 'settings.localModel.status.notRunning': 'Nie działa', - 'settings.localModel.status.ollamaBinaryPath': 'Ścieżka binarki Ollama', - 'settings.localModel.status.ollamaDiagnostics': 'Diagnostyka Ollama', - 'settings.localModel.status.ollamaNotInstalled': 'Środowisko Ollama niedostępne', - 'settings.localModel.status.ollamaNotInstalledDesc': - 'OpenHuman traktuje teraz Ollamę jako zewnętrzne środowisko inferencji. Uruchom własny serwer Ollama, pobierz potrzebne modele i skieruj na niego trasowanie workloadów.', - 'settings.localModel.status.progress': 'Postęp', - 'settings.localModel.status.provider': 'Dostawca', - 'settings.localModel.status.retryBootstrap': 'Ponów inicjalizację', - 'settings.localModel.status.runDiagnostics': 'Sprawdzanie...', - 'settings.localModel.status.running': 'Działa', - 'settings.localModel.status.runningExternalProcess': 'Działa przez zewnętrzny proces', - 'settings.localModel.status.runtimeStatus': 'Stan środowiska', - 'settings.localModel.status.server': 'Serwer', - 'settings.localModel.status.setPath': 'Ustawianie...', - 'settings.localModel.status.setting': 'Ustawianie...', - 'settings.localModel.status.showErrorDetails': 'Ukryj szczegóły błędu', - 'settings.localModel.status.showInstallErrorDetails': 'Ukryj szczegóły błędu', - 'settings.localModel.status.suggestedFixes': 'Sugerowane poprawki', - 'settings.localModel.status.thenSetPath': 'Następnie ustaw ścieżkę', - 'settings.localModel.status.triggering': 'Uruchamianie...', - 'settings.localModel.status.unavailable': 'Niedostępne', - 'settings.localModel.status.working': 'Pracuję...', - // settings.developerMenu - 'settings.developerMenu.ai.title': 'Konfiguracja AI', - 'settings.developerMenu.ai.desc': - 'Dostawcy chmurowi, lokalne modele Ollama i trasowanie per workload', - 'settings.developerMenu.screenAwareness.title': 'Świadomość ekranu', - 'settings.developerMenu.screenAwareness.desc': - 'Uprawnienia do przechwytywania ekranu, polityka monitorowania i kontrola sesji', - 'settings.developerMenu.messagingChannels.title': 'Kanały komunikacji', - 'settings.developerMenu.messagingChannels.desc': - 'Konfiguruj tryby uwierzytelniania Telegram/Discord i domyślne trasowanie', - 'settings.developerMenu.tools.title': 'Narzędzia', - 'settings.developerMenu.tools.desc': - 'Włącz lub wyłącz możliwości, z których OpenHuman może korzystać w Twoim imieniu', - 'settings.developerMenu.agentChat.title': 'Czat z agentem', - 'settings.developerMenu.agentChat.desc': - 'Testuj rozmowę z agentem z nadpisaniami modelu i temperatury', - 'settings.developerMenu.devWorkflow.title': 'Dev Workflow', - 'settings.developerMenu.devWorkflow.desc': - 'Autonomous agent that picks your GitHub issues and raises PRs on a schedule', - 'settings.developerMenu.devWorkflow.panelDesc': - 'Configure an autonomous developer agent that picks GitHub issues assigned to you and raises pull requests automatically on a schedule.', - 'settings.devWorkflow.githubRepository': 'GitHub Repository', - 'settings.devWorkflow.loadingRepositories': 'Loading repositories...', - 'settings.devWorkflow.selectRepository': 'Select a repository', - 'settings.devWorkflow.privateTag': '(private)', - 'settings.devWorkflow.detectingForkInfo': 'Detecting fork info...', - 'settings.devWorkflow.forkDetected': 'Fork detected', - 'settings.devWorkflow.upstream': 'Upstream:', - 'settings.devWorkflow.forkPrNote': 'PRs will be raised against the upstream repository.', - 'settings.devWorkflow.notForkNote': - 'Not a fork. PRs will be raised against this repository directly.', - 'settings.devWorkflow.targetBranch': 'Target Branch', - 'settings.devWorkflow.targetBranchNote': 'PRs will be raised against this branch', - 'settings.devWorkflow.loadingBranches': 'Loading branches...', - 'settings.devWorkflow.runFrequency': 'Run Frequency', - 'settings.devWorkflow.runFrequencyNote': - 'How often the agent should check for issues and raise PRs.', - 'settings.devWorkflow.updateConfiguration': 'Update Configuration', - 'settings.devWorkflow.saveConfiguration': 'Save Configuration', - 'settings.devWorkflow.remove': 'Remove', - 'settings.devWorkflow.saved': 'Saved', - 'settings.devWorkflow.activeConfiguration': 'Active Configuration', - 'settings.devWorkflow.activeConfigRepository': 'Repository:', - 'settings.devWorkflow.activeConfigUpstream': 'Upstream:', - 'settings.devWorkflow.activeConfigTargetBranch': 'Target branch:', - 'settings.devWorkflow.activeConfigSchedule': 'Schedule:', - 'settings.devWorkflow.enabled': 'Enabled', - 'settings.devWorkflow.paused': 'Paused', - 'settings.skillsRunner.scheduleEnabled': 'Enabled', - 'settings.skillsRunner.scheduleDisabled': 'Paused', - 'settings.skillsRunner.scheduleToggleAria': 'Toggle schedule enabled', - 'settings.skillsRunner.schedule.history': 'History', - 'settings.skillsRunner.schedule.historyLoading': 'Loading history\u2026', - 'settings.skillsRunner.schedule.historyEmpty': 'No runs yet for this schedule.', - 'settings.skillsRunner.schedule.historyNoOutput': 'No output captured.', - 'settings.skillsRunner.schedule.active': 'Active', - 'settings.skillsRunner.schedule.lastRunLabel': 'last:', - 'settings.devWorkflow.nextRun': 'Next run', - 'settings.devWorkflow.lastRun': 'Last run', - 'settings.devWorkflow.runNow': 'Run now', - 'settings.devWorkflow.running': 'Running…', - 'settings.devWorkflow.recentRuns': 'Recent runs', - 'settings.devWorkflow.cronSaveError': 'Failed to save configuration', - 'settings.devWorkflow.lastOutput': 'Last output', - 'settings.devWorkflow.noOutput': 'No output captured', - 'settings.devWorkflow.runningStatus': - 'Agent is running — picking an issue and working on a fix...', - 'settings.devWorkflow.errorNotConnected': - 'GitHub is not connected. Please connect GitHub via Settings > Advanced > Composio first.', - 'settings.devWorkflow.errorToolNotEnabled': - 'GITHUB_LIST_REPOSITORIES_FOR_THE_AUTHENTICATED_USER tool is not enabled on this backend. Please ask your admin to enable it in the Composio integration (backend#842).', - 'settings.devWorkflow.errorNotAuthenticated': 'Not authenticated. Please sign in first.', - 'settings.devWorkflow.errorNoRepositories': 'No repositories found for this GitHub account.', - 'settings.devWorkflow.schedule.every30min': 'Every 30 minutes', - 'settings.devWorkflow.schedule.everyHour': 'Every hour', - 'settings.devWorkflow.schedule.every2hours': 'Every 2 hours', - 'settings.devWorkflow.schedule.every6hours': 'Every 6 hours', - 'settings.devWorkflow.schedule.onceDaily': 'Once daily (9 AM)', - 'settings.developerMenu.cronJobs.title': 'Zadania cron', - 'settings.developerMenu.cronJobs.desc': - 'Przeglądaj i konfiguruj zaplanowane zadania dla umiejętności runtime', - 'settings.developerMenu.localModelDebug.title': 'Debug modelu lokalnego', - 'settings.developerMenu.localModelDebug.desc': - 'Konfiguracja Ollama, pobieranie zasobów, testy modeli i diagnostyka', - 'settings.developerMenu.composio.title': 'Composio', - 'settings.developerMenu.composio.desc': - 'Tryb trasowania, wyzwalacze integracji i archiwum historii wyzwalaczy.', - 'settings.developerMenu.webhooks.title': 'Webhooks', - 'settings.developerMenu.webhooks.desc': - 'Sprawdź rejestracje webhooków w runtime i logi przechwyconych żądań', - 'settings.developerMenu.intelligence.title': 'Inteligencja', - 'settings.developerMenu.intelligence.desc': - 'Przestrzeń pamięci, silnik podświadomości, sny i ustawienia', - 'settings.developerMenu.notificationRouting.title': 'Trasowanie powiadomień', - 'settings.developerMenu.notificationRouting.desc': - 'Punktacja ważności AI i eskalacja orkiestratora dla alertów integracji', - 'settings.developerMenu.composeioTriggers.title': 'Wyzwalacze ComposeIO', - 'settings.developerMenu.composeioTriggers.desc': - 'Przeglądaj historię i archiwum wyzwalaczy ComposeIO', - 'settings.developerMenu.composioRouting.title': 'Trasowanie Composio (tryb bezpośredni)', - 'settings.developerMenu.composioRouting.desc': - 'Użyj własnego klucza API Composio i kieruj wywołania bezpośrednio do backend.composio.dev', - 'settings.developerMenu.integrationTriggers.title': 'Wyzwalacze integracji', - 'settings.developerMenu.integrationTriggers.desc': - 'Konfiguruj ustawienia klasyfikacji AI dla wyzwalaczy integracji Composio', - 'settings.appearance.menuDesc': 'Wybierz jasny, ciemny lub dopasowany do systemu motyw', - // settings.agentAccess - 'settings.agentAccess.title': 'Dostęp agenta do systemu', - 'settings.agentAccess.menuDesc': - 'Kontroluj, gdzie agent może czytać/pisać oraz czy może używać powłoki.', - 'settings.agentAccess.loadError': 'Nie udało się wczytać ustawień dostępu', - 'settings.agentAccess.saveError': 'Nie udało się zapisać ustawień dostępu', - 'settings.agentAccess.saved': 'Zapisano — zostanie zastosowane w następnej wiadomości.', - 'settings.agentAccess.desktopOnly': - 'Ustawienia dostępu są dostępne tylko w aplikacji desktopowej.', - 'settings.agentAccess.loading': 'Wczytywanie…', - 'settings.agentAccess.accessMode': 'Tryb dostępu', - 'settings.agentAccess.tier.readonly.title': 'Tylko do odczytu', - 'settings.agentAccess.tier.readonly.desc': - 'Czyta pliki i uruchamia polecenia tylko do odczytu, aby eksplorować — ale nigdy nie zapisuje, nie edytuje ani nie uruchamia niczego, co zmienia stan.', - 'settings.agentAccess.tier.supervised.title': 'Pytaj przed edycją', - 'settings.agentAccess.tier.supervised.desc': - 'Tworzy nowe pliki swobodnie, ale pyta o Twoją zgodę przed edycją istniejącego pliku, uruchomieniem polecenia, dostępem do sieci lub instalacją czegokolwiek.', - 'settings.agentAccess.tier.full.title': 'Pełny dostęp', - 'settings.agentAccess.tier.full.desc': - 'Uruchamia polecenia z pełnym dostępem Twojego konta — może czytać/pisać wszędzie, gdzie to dozwolone, oprócz magazynów poświadczeń i systemowych. Polecenia destrukcyjne, dostęp do sieci i instalacje nadal proszą o zgodę.', - 'settings.agentAccess.defaultTag': '(domyślny)', - 'settings.agentAccess.fullWarning': - '⚠ Pełny dostęp uruchamia polecenia z pełnymi uprawnieniami Twojego konta i nie jest sandboxowany. Włącz to tylko wtedy, gdy ufasz agentowi na tym komputerze. Katalogi poświadczeń i systemowe pozostają zablokowane, a akcje destrukcyjne, sieciowe i instalacyjne nadal proszą o zgodę.', - 'settings.agentAccess.confine.label': 'Ogranicz do przestrzeni roboczej', - 'settings.agentAccess.confine.desc': - 'Ogranicz agenta do katalogu przestrzeni roboczej (oraz dodanych folderów), niezależnie od wybranego trybu dostępu. Wyłączone — może sięgać wszędzie, gdzie Twój użytkownik, oprócz zawsze zablokowanych katalogów poświadczeń i systemowych.', - 'settings.agentAccess.grantedFolders': 'Przyznane foldery', - 'settings.agentAccess.grantedDesc': - 'Foldery, do których agent może czytać i pisać, oprócz przestrzeni roboczej. Magazyny poświadczeń (~/.ssh, ~/.gnupg, ~/.aws, keychains) i katalogi systemowe (/etc, /System, C:\\Windows, …) są zawsze zablokowane, nawet w przyznanym folderze.', - 'settings.agentAccess.noneGranted': 'Brak przyznanych folderów.', - 'settings.agentAccess.readWrite': 'odczyt + zapis', - 'settings.agentAccess.readOnly': 'tylko do odczytu', - 'settings.agentAccess.remove': 'Usuń', - 'settings.agentAccess.pathPlaceholder': 'Bezwzględna ścieżka folderu', - 'settings.agentAccess.accessLevelLabel': 'Poziom dostępu', - 'settings.agentAccess.add': 'Dodaj', - 'settings.agentAccess.saving': 'Zapisywanie…', - 'settings.agentAccess.changesApply': 'Zmiany zostaną zastosowane w następnej wiadomości.', - // settings.mascot - 'settings.mascot.active': 'Aktywny', - 'settings.mascot.characterDesc': 'Wybierz charakter maskotki OpenHuman.', - 'settings.mascot.characterHeading': 'Charakter', - 'settings.mascot.customGifError': - 'Wprowadź URL .gif HTTPS, URL .gif loopback HTTP, URL file:// .gif lub lokalną ścieżkę .gif.', - 'settings.mascot.customGifHeading': 'Własny awatar GIF', - 'settings.mascot.customGifLabel': 'URL własnego awatara GIF', - 'settings.mascot.colorDesc': 'Wybierz kolor maskotki używany w całej aplikacji.', - 'settings.mascot.colorHeading': 'Kolor', - 'settings.mascot.loadingLibrary': 'Wczytywanie biblioteki OpenHuman…', - 'settings.mascot.localDefault': 'Lokalny OpenHuman (domyślny)', - 'settings.mascot.menuTitle': 'Maskotka', - 'settings.mascot.menuDesc': 'Wybierz kolor maskotki używany w aplikacji', - 'settings.mascot.noCharacters': 'Nie ma jeszcze dostępnych postaci OpenHuman', - 'settings.mascot.noColorVariants': 'Brak wariantów kolorystycznych', - 'settings.mascot.voice.current': 'bieżący', - 'settings.mascot.voice.customDesc': - 'Znajdź ID głosów w api.elevenlabs.io/v1/voices lub w panelu ElevenLabs. Przechowywane jest tylko ID — Twój klucz API pozostaje na backendzie.', - 'settings.mascot.voice.customHeading': 'Własne ID głosu', - 'settings.mascot.voice.customOption': 'Inne (wklej ID głosu)…', - 'settings.mascot.voice.desc': - 'Wybierz głos ElevenLabs, którego maskotka używa do odpowiedzi głosowych. Filtruj po płci, wybierz z listy lub pozwól aplikacji dobrać głos pasujący do języka interfejsu.', - 'settings.mascot.voice.genderFemale': 'Kobiecy', - 'settings.mascot.voice.genderHeading': 'Płeć głosu', - 'settings.mascot.voice.genderMale': 'Męski', - 'settings.mascot.voice.heading': 'Głos', - 'settings.mascot.voice.preset': 'Preset głosu', - 'settings.mascot.voice.presetHeading': 'Preset głosu', - 'settings.mascot.voice.preview': 'Podgląd głosu', - 'settings.mascot.voice.previewError': 'Podgląd głosu nie powiódł się', - 'settings.mascot.voice.previewing': 'Odsłuchiwanie…', - 'settings.mascot.voice.reset': 'Przywróć domyślny', - 'settings.mascot.voice.useLocaleDefault': 'Dopasuj do języka aplikacji', - 'settings.mascot.voice.useLocaleDefaultDesc': - 'Automatyczny dobór głosu do bieżącego języka interfejsu.', - // settings.memoryWindow - 'settings.memoryWindow.balanced.badge': 'Zalecane', - 'settings.memoryWindow.balanced.hint': - 'Rozsądna wartość domyślna — dobra ciągłość bez nadmiernych tokenów na każde uruchomienie.', - 'settings.memoryWindow.balanced.label': 'Zrównoważone', - 'settings.memoryWindow.description': - 'Ile zapamiętanego kontekstu OpenHuman wstrzykuje do każdego nowego uruchomienia agenta. Większe okno daje większą świadomość poprzednich rozmów, ale używa więcej tokenów — i kosztuje więcej — przy każdym uruchomieniu.', - 'settings.memoryWindow.extended.badge': 'Więcej kontekstu', - 'settings.memoryWindow.extended.hint': - 'Więcej długoterminowej pamięci wstrzykiwanej do każdego uruchomienia. Wyższy koszt tokenów na turę.', - 'settings.memoryWindow.extended.label': 'Rozszerzone', - 'settings.memoryWindow.maximum.badge': 'Najwyższy koszt', - 'settings.memoryWindow.maximum.hint': - 'Największe bezpieczne okno. Najlepsza ciągłość, znacząco wyższy rachunek za tokeny przy każdym uruchomieniu.', - 'settings.memoryWindow.maximum.label': 'Maksymalne', - 'settings.memoryWindow.minimal.badge': 'Najtańsze', - 'settings.memoryWindow.minimal.hint': - 'Najmniejsze okno pamięci. Najtańsze, najszybsze, najmniejsza ciągłość między uruchomieniami.', - 'settings.memoryWindow.minimal.label': 'Minimalne', - 'settings.memoryWindow.title': 'Okno pamięci długoterminowej', - // settings.screenIntel - 'settings.screenIntel.permissions.accessibility': 'Dostępność', - 'settings.screenIntel.permissions.grantHint': 'System otworzy okno żądania uprawnień.', - 'settings.screenIntel.permissions.inputMonitoring': 'Monitorowanie wejścia', - 'settings.screenIntel.permissions.macosAppliesPrivacy': 'macOS stosuje politykę prywatności do:', - 'settings.screenIntel.permissions.openInputMonitoring': 'Żądanie…', - 'settings.screenIntel.permissions.refreshStatus': 'Odświeżanie…', - 'settings.screenIntel.permissions.refreshing': 'Odświeżanie…', - 'settings.screenIntel.permissions.requestAccessibility': 'Żądanie…', - 'settings.screenIntel.permissions.requestScreenRecording': 'Żądanie…', - 'settings.screenIntel.permissions.requesting': 'Żądanie…', - 'settings.screenIntel.permissions.restartRefresh': 'Restartowanie rdzenia…', - 'settings.screenIntel.permissions.restartingCore': 'Restartowanie rdzenia…', - 'settings.screenIntel.permissions.screenRecording': 'Nagrywanie ekranu', - 'settings.screenIntel.permissions.title': 'Uprawnienia', - // skills.card - 'skills.card.moreActions': 'Więcej akcji', - // skills.create - 'skills.create.allowedTools': 'Dozwolone narzędzia', - 'skills.create.author': 'Autor', - 'skills.create.authorPlaceholder': 'Twoje imię', - 'skills.create.commaSeparated': '(rozdzielone przecinkami)', - 'skills.create.createBtn': 'Utwórz umiejętność', - 'skills.create.createError': 'Nie udało się utworzyć umiejętności', - 'skills.create.creating': 'Tworzenie…', - 'skills.create.description': 'Opis', - 'skills.create.descriptionPlaceholder': 'Co robi ta umiejętność?', - 'skills.create.optional': '(optional)', - 'skills.create.inputs.heading': 'Inputs', - 'skills.create.inputs.help': - 'Declare parameters the skill needs. The Skills Runner will render a form for these at run time.', - 'skills.create.inputs.add': 'Add input', - 'skills.create.inputs.row.name': 'Input name', - 'skills.create.inputs.row.namePlaceholder': 'e.g. repo', - 'skills.create.inputs.row.nameError': - 'Letters, digits, underscores, and dashes only; must start with a letter.', - 'skills.create.inputs.row.description': 'Input description', - 'skills.create.inputs.row.descriptionPlaceholder': 'What goes in this field?', - 'skills.create.inputs.row.type': 'Type', - 'skills.create.inputs.row.required': 'Required', - 'skills.create.inputs.row.remove': 'Remove input', - 'skills.create.inputs.type.string': 'Text', - 'skills.create.inputs.type.integer': 'Number', - 'skills.create.inputs.type.boolean': 'Yes / No', - 'skills.create.license': 'Licencja', - 'skills.create.name': 'Nazwa', - 'skills.create.namePlaceholder': 'np. Dziennik transakcji', - 'skills.create.scope': 'Zakres', - 'skills.create.scopeProjectHint': '/.openhuman/skills/', - 'skills.create.scopeUserHint': - 'Zapisane do ~/.openhuman/skills//SKILL.md — dostępne we wszystkich przestrzeniach roboczych.', - 'skills.create.slugLabel': 'Etykieta slug', - 'skills.create.subtitle': 'SKILL.md', - 'skills.create.tags': 'Tagi', - 'skills.create.title': 'Nowa umiejętność', - // skills.detail - 'skills.detail.allowedTools': 'Dozwolone narzędzia', - 'skills.detail.author': 'Autor', - 'skills.detail.bundledResources': 'Dołączone zasoby', - 'skills.detail.closeAriaLabel': 'Zamknij szczegóły umiejętności', - 'skills.detail.location': 'Lokalizacja', - 'skills.detail.noBundledResources': 'Brak dołączonych zasobów.', - 'skills.detail.tags': 'Tagi', - 'skills.detail.warnings': 'Ostrzeżenia', - // skills.install - 'skills.install.fetchLog': 'Dziennik pobierania', - 'skills.install.installBtn': 'Instalowanie…', - 'skills.install.installComplete': 'Instalacja zakończona', - 'skills.install.installing': 'Instalowanie…', - 'skills.install.parseWarnings': 'Ostrzeżenia parsowania', - 'skills.install.rawError': 'Surowy błąd', - 'skills.install.timeoutHint': '(sekundy, opcjonalne)', - 'skills.install.timeoutLabel': 'Limit czasu', - 'skills.install.title': 'Zainstaluj umiejętność z URL', - 'skills.install.urlLabel': 'URL umiejętności', - // skills.meetingBots - 'skills.meetingBots.bannerDesc': - 'Wklej link Google Meet, a OpenHuman dołączy jako gość, mówi, słucha i odpowiada.', - 'skills.meetingBots.bannerTitle': 'Wyślij OpenHuman na spotkanie', - 'skills.meetingBots.busyTitle': 'OpenHuman jest zajęty', - 'skills.meetingBots.comingSoon': 'Wkrótce', - 'skills.meetingBots.couldNotStartTitle': 'Nie udało się uruchomić OpenHuman', - 'skills.meetingBots.displayName': 'Wyświetlana nazwa', - 'skills.meetingBots.failedToStart': 'Nie udało się uruchomić OpenHuman.', - 'skills.meetingBots.joiningMessage': 'Powinien pojawić się jako uczestnik w ciągu kilku sekund.', - 'skills.meetingBots.joiningTitle': 'OpenHuman dołącza do spotkania', - 'skills.meetingBots.meetingLink': 'Link spotkania', - 'skills.meetingBots.modalAriaLabel': 'Wyślij OpenHuman na spotkanie', - 'skills.meetingBots.modalDesc': - 'OpenHuman dołącza jako anonimowy gość, transmituje wideo do rozmowy i odpowiada przez agenta.', - 'skills.meetingBots.modalTitle': 'Wyślij OpenHuman na spotkanie', - 'skills.meetingBots.newBadge': 'Nowość', - 'skills.meetingBots.sendTo': 'Wyślij do', - 'skills.meetingBots.starting': 'Uruchamianie…', - // skills.resource - 'skills.resource.preview.closeAriaLabel': 'Zamknij podgląd', - 'skills.resource.preview.failed': 'Podgląd nie powiódł się', - 'skills.resource.preview.loading': 'Wczytywanie podglądu…', - 'skills.resource.tree.empty': 'Brak dołączonych zasobów.', - 'skills.search.placeholder': 'Szukaj umiejętności...', - // skills.setup.autocomplete - 'skills.setup.autocomplete.acceptKey': 'Klawisz akceptacji', - 'skills.setup.autocomplete.activeDesc': - 'Autouzupełnianie działa. Akceptuj sugestie klawiszem skrótu.', - 'skills.setup.autocomplete.activeTitle': 'Autouzupełnianie jest aktywne', - 'skills.setup.autocomplete.customizeSettings': 'Dostosuj ustawienia', - 'skills.setup.autocomplete.debounce': 'Debounce', - 'skills.setup.autocomplete.description': - 'Sugestie wierszowe podczas pisania w polach tekstowych.', - 'skills.setup.autocomplete.enableBtn': 'Włączanie...', - 'skills.setup.autocomplete.enableError': 'Nie udało się włączyć autouzupełniania', - 'skills.setup.autocomplete.enabling': 'Włączanie...', - 'skills.setup.autocomplete.notSupported': 'Nieobsługiwane', - 'skills.setup.autocomplete.stepEnable': 'Włącz uzupełnienia wierszowe', - 'skills.setup.autocomplete.stepSuccess': 'Gotowe', - 'skills.setup.autocomplete.stylePreset': 'Preset stylu', - 'skills.setup.autocomplete.stylePresetValue': 'Zrównoważony (konfigurowalny później)', - 'skills.setup.autocomplete.title': 'Autouzupełnianie tekstu', - // skills.setup.screenIntel - 'skills.setup.screenIntel.activeDesc': 'Inteligencja ekranu działa. Wybrane okna są obserwowane.', - 'skills.setup.screenIntel.activeTitle': 'Inteligencja ekranu jest włączona', - 'skills.setup.screenIntel.advancedSettings': 'Ustawienia zaawansowane', - 'skills.setup.screenIntel.allGranted': 'Wszystkie uprawnienia przyznane', - 'skills.setup.screenIntel.captureMode': 'Tryb przechwytywania', - 'skills.setup.screenIntel.captureModeValue': 'Wszystkie okna (konfigurowalne później)', - 'skills.setup.screenIntel.deniedHint': - 'Po przyznaniu uprawnień w Ustawieniach systemowych kliknij poniżej, aby zrestartować i odświeżyć zmiany.', - 'skills.setup.screenIntel.enableBtn': 'Włączanie...', - 'skills.setup.screenIntel.enableDesc': - 's na Twoim ekranie i dostarczają użytecznego kontekstu agentowi', - 'skills.setup.screenIntel.enableError': 'Nie udało się włączyć inteligencji ekranu', - 'skills.setup.screenIntel.enabling': 'Włączanie...', - 'skills.setup.screenIntel.grant': 'Otwieranie...', - 'skills.setup.screenIntel.granted': 'Przyznano', - 'skills.setup.screenIntel.macosOnly': 'Tylko macOS', - 'skills.setup.screenIntel.opening': 'Otwieranie...', - 'skills.setup.screenIntel.panicHotkey': 'Skrót awaryjny', - 'skills.setup.screenIntel.permAccessibility': 'Dostępność', - 'skills.setup.screenIntel.permInputMonitoring': 'Monitorowanie wejścia', - 'skills.setup.screenIntel.permScreenRecording': 'Nagrywanie ekranu', - 'skills.setup.screenIntel.permissionsDesc': 'Inteligencja ekranu wymaga uprawnień systemowych:', - 'skills.setup.screenIntel.refreshStatus': 'Odśwież status', - 'skills.setup.screenIntel.restartRefresh': 'Restartowanie...', - 'skills.setup.screenIntel.restarting': 'Restartowanie...', - 'skills.setup.screenIntel.stepEnable': 'Włącz umiejętność', - 'skills.setup.screenIntel.stepPermissions': 'Przyznaj uprawnienia', - 'skills.setup.screenIntel.stepSuccess': 'Gotowe', - 'skills.setup.screenIntel.title': 'Inteligencja ekranu', - 'skills.setup.screenIntel.visionModel': 'Model wizji', - // skills.setup.voice - 'skills.setup.voice.activation': 'Aktywacja', - 'skills.setup.voice.activeDescPrefix': 'Fn', - 'skills.setup.voice.activeDescSuffix': 'Fn', - 'skills.setup.voice.activeTitle': 'Inteligencja głosowa jest aktywna', - 'skills.setup.voice.customizeSettings': 'Dostosuj ustawienia', - 'skills.setup.voice.downloadSttBtn': 'Pobierz model STT', - 'skills.setup.voice.enableDesc': 'Włącz dyktowanie głosowe i odpowiedzi głosowe.', - 'skills.setup.voice.hotkey': 'Skrót klawiszowy', - 'skills.setup.voice.startBtn': 'Uruchamianie...', - 'skills.setup.voice.startError': 'Nie udało się uruchomić serwera głosowego', - 'skills.setup.voice.starting': 'Uruchamianie...', - 'skills.setup.voice.stepEnable': 'Uruchom serwer głosowy', - 'skills.setup.voice.stepSetup': 'Wymagane pobranie modelu', - 'skills.setup.voice.stepSuccess': 'Gotowe', - 'skills.setup.voice.sttNotReady': 'Model speech-to-text niegotowy', - 'skills.setup.voice.sttNotReadyDesc': - 'Inteligencja głosowa wymaga lokalnego modelu Whisper do transkrypcji. Pobierz go z ustawień modelu lokalnego.', - 'skills.setup.voice.sttReady': 'Model speech-to-text gotowy', - 'skills.setup.voice.sttReturnHint': 'Wróć tutaj po pobraniu modelu.', - 'skills.setup.voice.title': 'Inteligencja głosowa', - // skills.uninstall - 'skills.uninstall.couldNotUninstall': 'Nie udało się odinstalować', - 'skills.uninstall.description': - 'Permanentnie usuwa katalog umiejętności i wszystkie dołączone zasoby. Agent przestanie je widzieć w następnej turze.', - 'skills.uninstall.title': 'Odinstaluj', - 'skills.uninstall.uninstallBtn': 'Odinstaluj', - 'skills.uninstall.uninstalling': 'Odinstalowywanie…', - // upsell - 'upsell.global.limitMessage': 'Podnieś plan lub doładuj kredyty, aby kontynuować', - 'upsell.global.limitTitle': 'Ty', - 'upsell.global.nearLimitMessage': - 'Wykorzystano {pct}% limitu użycia. Podnieś plan, aby zwiększyć limity.', - 'upsell.global.nearLimitTitle': 'Zbliżasz się do limitu użycia', - 'upsell.usageLimit.bodyBudget': - 'Osiągnięto tygodniowy limit.{reset} Podnieś plan lub doładuj kredyty, aby uniknąć limitów.', - 'upsell.usageLimit.bodyRate': - 'Osiągnięto 10-godzinny limit szybkości inferencji.{reset} Podnieś plan, aby zwiększyć limity.', - 'upsell.usageLimit.heading': 'Osiągnięto limit użycia', - 'upsell.usageLimit.notNow': 'Nie teraz', - 'upsell.usageLimit.perWindow': '{amount}', - 'upsell.usageLimit.planIncludes': '{plan}', - 'upsell.usageLimit.resetsIn': 'Resetuje się {time}.', - 'upsell.usageLimit.upgradePlan': 'Podnieś plan', - 'upsell.usageLimit.weeklyInference': '{amount}', - // walkthrough - 'walkthrough.tooltip.letsGo': 'Zaczynamy!', - 'walkthrough.tooltip.next': 'Dalej →', - 'walkthrough.tooltip.skip': 'Pomiń przewodnik', - 'walkthrough.tooltip.stepCounter': '{n} z {total}', - // webhooks - 'webhooks.activity.empty': 'Brak aktywności.', - 'webhooks.activity.title': 'Ostatnia aktywność', - 'webhooks.composioHistory.empty': 'Brak historii.', - 'webhooks.composioHistory.metadataId': 'ID metadanych', - 'webhooks.composioHistory.metadataUuid': 'UUID metadanych', - 'webhooks.composioHistory.payload': 'Ładunek', - 'webhooks.composioHistory.title': 'Historia wyzwalaczy ComposeIO', - 'webhooks.tunnels.active': 'Aktywny', - 'webhooks.tunnels.createFailed': 'Nie udało się utworzyć tunelu', - 'webhooks.tunnels.creating': 'Tworzenie...', - 'webhooks.tunnels.deleteFailed': 'Nie udało się usunąć tunelu', - 'webhooks.tunnels.descriptionPlaceholder': 'Opis (opcjonalny)', - 'webhooks.tunnels.echo': 'Echo', - 'webhooks.tunnels.empty': 'Brak tuneli.', - 'webhooks.tunnels.enableEcho': 'Włącz Echo', - 'webhooks.tunnels.inactive': 'Nieaktywny', - 'webhooks.tunnels.namePlaceholder': 'Nazwa tunelu (np. telegram-bot)', - 'webhooks.tunnels.newTunnel': 'Nowy tunel', - 'webhooks.tunnels.removeEcho': 'Usuń Echo', - 'webhooks.tunnels.title': 'Tunele webhooków', - 'webhooks.tunnels.toggleFailed': 'Nie udało się przełączyć echa', - // composio (extras) - 'composio.authExpired': 'Autoryzacja wygasła', - 'composio.reconnect': 'Połącz ponownie', - 'composio.previewBadge': 'Podgląd', - 'composio.previewTooltip': - 'Integracja z agentem wkrótce — możesz się połączyć, ale agent nie może jeszcze użyć tego zestawu narzędzi.', - 'composio.directModeRequiresKey': - 'Nie udało się zapisać. Tryb bezpośredni wymaga niepustego klucza API.', - 'composio.notYetRouted': 'jeszcze nie trasowane', - 'composio.triggers.loading': 'Wczytywanie…', - 'conversations.taskKanban.todo': 'Do zrobienia', - 'settings.composio.loading': 'Wczytywanie…', - 'settings.mascot.noCharactersAvailable': 'Nie ma jeszcze dostępnych postaci OpenHuman', - 'skills.uninstall.confirmTitle': 'Odinstalować {name}?', - 'conversations.taskKanban.blocked': 'Zablokowane', - 'conversations.taskKanban.done': 'Zrobione', - 'conversations.taskKanban.awaitingApproval': 'Awaiting approval', - 'conversations.taskKanban.ready': 'Ready', - 'conversations.taskKanban.rejected': 'Rejected', - 'conversations.taskKanban.inProgress': 'W toku', - 'intelligence.memoryChunk.detail.copiedHint': 'skopiowano', - 'settings.composio.notYetRouted': 'jeszcze nie trasowane', - 'settings.localModel.download.manageExternal': - 'Zarządzaj tym modelem w swoim zewnętrznym środowisku.', - 'settings.localModel.status.manageOllamaExternal': - 'Zarządzaj procesem Ollama i pobraniami modeli poza OpenHumanem, a następnie uruchom ponownie diagnostykę.', - 'settings.localModel.status.ollamaDocs': 'Dokumentacja Ollama', - 'settings.localModel.status.thenRetry': - 'po instrukcje konfiguracji, a następnie spróbuj ponownie, gdy środowisko będzie osiągalne.', - // settings.appearance - 'settings.appearance.title': 'Wygląd', - 'settings.appearance.themeHeading': 'Motyw', - 'settings.appearance.themeAria': 'Motyw', - 'settings.appearance.modeLight': 'Jasny', - 'settings.appearance.modeLightDesc': 'Jasne powierzchnie, ciemny tekst.', - 'settings.appearance.modeDark': 'Ciemny', - 'settings.appearance.modeDarkDesc': 'Przyciemnione powierzchnie, łatwiejsze dla oczu po zmroku.', - 'settings.appearance.modeSystem': 'Dopasuj do systemu', - 'settings.appearance.modeSystemDesc': - 'Postępuj zgodnie z ustawieniem wyglądu Twojego systemu operacyjnego.', - 'settings.appearance.helperText': - 'Tryb ciemny przełącza całą aplikację — czat, ustawienia, panele — na przyciemnioną paletę. „Dopasuj do systemu” podąża za wyglądem systemu i aktualizuje się na żywo.', - 'settings.appearance.tabBarHeading': 'Dolny pasek zakładek', - 'settings.appearance.tabBarAlwaysShowLabels': 'Zawsze pokazuj etykiety', - 'settings.appearance.tabBarAlwaysShowLabelsDesc': - 'Wyłączone — etykiety pojawiają się tylko po najechaniu lub dla aktywnej zakładki.', - // settings.mascot (more) - 'settings.mascot.characterPreview': 'Podgląd', - 'settings.mascot.characterStates': 'stanów', - 'settings.mascot.characterVisemes': 'wizemów', - 'settings.mascot.colorAria': 'Kolor OpenHuman', - 'settings.mascot.colorBlack': 'Czarny', - 'settings.mascot.colorBurgundy': 'Burgundowy', - 'settings.mascot.colorCustom': 'Własny', - 'settings.mascot.colorNavy': 'Granatowy', - 'settings.mascot.primaryColor': 'Kolor podstawowy', - 'settings.mascot.secondaryColor': 'Kolor dodatkowy', - 'settings.mascot.colorYellow': 'Żółty', - 'settings.mascot.libraryUnavailable': 'Biblioteka OpenHuman niedostępna', - 'settings.mascot.title': 'OpenHuman', - // settings.developerMenu (more) - 'settings.developerMenu.mcpServer.title': 'Serwer MCP', - 'settings.developerMenu.mcpServer.desc': - 'Skonfiguruj zewnętrznych klientów MCP do połączenia z OpenHumanem', - 'settings.developerMenu.autonomy.title': 'Autonomia agenta', - 'settings.developerMenu.autonomy.desc': 'Limity szybkości akcji narzędzi i progi bezpieczeństwa', - // settings.mcpServer - 'settings.mcpServer.title': 'Serwer MCP', - 'settings.mcpServer.toolsSectionTitle': 'Dostępne narzędzia', - 'settings.mcpServer.toolsSectionDesc': - 'Narzędzia udostępniane przez serwer stdio MCP podczas uruchamiania openhuman-core mcp', - 'settings.mcpServer.configSectionTitle': 'Konfiguracja klienta', - 'settings.mcpServer.configSectionDesc': - 'Wybierz swojego klienta MCP, aby wygenerować poprawny fragment konfiguracji', - 'settings.mcpServer.copySnippet': 'Skopiuj do schowka', - 'settings.mcpServer.copied': 'Skopiowano!', - 'settings.mcpServer.openConfigFile': 'Otwórz plik konfiguracyjny', - 'settings.mcpServer.binaryPathNotFound': - 'Nie znaleziono pliku binarnego OpenHuman. Jeśli uruchamiasz ze źródeł, zbuduj: cargo build --bin openhuman-core', - 'settings.mcpServer.openConfigError': 'Nie udało się otworzyć pliku konfiguracyjnego', - 'settings.mcpServer.clientClaudeDesktop': 'Claude Desktop', - 'settings.mcpServer.clientCursor': 'Cursor', - 'settings.mcpServer.clientCodex': 'Codex', - 'settings.mcpServer.clientZed': 'Zed', - 'settings.mcpServer.configFilePath': 'Plik konfiguracyjny', - 'settings.mcpServer.clientSelectorAriaLabel': 'Selektor klienta MCP', - // settings.persona - 'settings.persona.title': 'Persona', - 'settings.persona.menuTitle': 'Persona', - 'settings.persona.menuDesc': - 'Imię, osobowość, awatar i głos — Twój asystent jako jedna tożsamość', - 'settings.persona.identityHeading': 'Tożsamość', - 'settings.persona.identityDesc': - 'Wyświetlana nazwa i krótki opis Twojego asystenta. Pokazane w aplikacji; nie zmienia sposobu rozumowania asystenta.', - 'settings.persona.displayNameLabel': 'Wyświetlana nazwa', - 'settings.persona.displayNamePlaceholder': 'np. Nova', - 'settings.persona.descriptionLabel': 'Opis', - 'settings.persona.descriptionPlaceholder': 'np. Spokojny, zwięzły asystent dla mojego zespołu.', - 'settings.persona.soul.heading': 'Osobowość (SOUL.md)', - 'settings.persona.soul.desc': - 'Prompt osobowości, którym asystent kieruje się w każdej rozmowie. Edycje są zapisywane w Twojej przestrzeni roboczej i wchodzą w życie w następnej odpowiedzi.', - 'settings.persona.soul.editorLabel': 'Zawartość SOUL.md', - 'settings.persona.soul.reset': 'Przywróć domyślne', - 'settings.persona.soul.usingDefault': 'Używam dołączonej wartości domyślnej', - 'settings.persona.soul.loadError': 'Nie udało się wczytać SOUL.md', - 'settings.persona.soul.saveError': 'Nie udało się zapisać SOUL.md', - 'settings.persona.soul.resetError': 'Nie udało się zresetować SOUL.md', - 'settings.persona.appearanceHeading': 'Awatar i głos', - 'settings.persona.appearanceDesc': - 'Kolor maskotki, własny awatar GIF i głos odpowiedzi są konfigurowane w ustawieniach Maskotki.', - 'settings.persona.openMascotSettings': 'Otwórz ustawienia Maskotki', - // common (extras) - 'common.breadcrumb': 'Ścieżka nawigacji', - 'settings.betaBuild': 'Wersja beta - v{version}', - // migration (extras) - 'migration.vendor.openclaw': 'OpenClaw', - 'migration.vendor.hermes': 'Hermes Agent', - // onboarding.apiKeys - 'onboarding.apiKeys.openaiOauthHint': - 'Użyj ChatGPT Plus/Pro (subskrypcja) lub klucza API OpenAI — nie potrzeba obu.', - 'onboarding.apiKeys.openaiOauthOpening': 'Otwieranie logowania…', - 'onboarding.apiKeys.finishSignIn': 'Dokończ logowanie ChatGPT', - 'onboarding.apiKeys.orApiKey': 'lub klucz API', - // app - 'app.localAiDownload.expandAria': 'Rozwiń postęp pobierania', - 'app.localAiDownload.collapseAria': 'Zwiń postęp pobierania', - 'app.localAiDownload.dismissAria': 'Odrzuć powiadomienie o pobieraniu', - // mobile / progress - 'mobile.nav.ariaLabel': 'Nawigacja mobilna', - 'progress.stepsAria': 'Kroki postępu', - 'progress.stepAria': 'Krok {current} z {total}', - // workspace.vaults - 'workspace.vaultsTitle': 'Sejfy wiedzy', - 'workspace.vaultsDesc': - 'Wskaż lokalny folder; pliki są dzielone na fragmenty i zwierciadłowo odzwierciedlane w pamięci.', - // calls (extras) - 'calls.title': 'Rozmowy', - 'calls.comingSoonBody': 'Rozmowy wspomagane przez AI są już wkrótce. Pozostań w kontakcie.', - // art / dev / composio expired - 'art.rotatingTetrahedronAria': 'Obracający się odwrócony statek tetraedryczny', - 'devOptions.sentryDisabled': '(brak ID — Sentry wyłączone w tej kompilacji)', - 'composio.expiredAuthorization': 'Autoryzacja {name} wygasła', - 'composio.expiredDescription': - 'Połącz ponownie, aby ponownie włączyć narzędzia {name}. OpenHuman utrzyma tę integrację jako niedostępną, dopóki nie odświeżysz dostępu OAuth.', - 'channels.telegram.remoteControlTitle': 'Sterowanie zdalne (Telegram)', - 'channels.telegram.remoteControlBody': - 'Z dozwolonego czatu Telegram wyślij /status, /sessions, /new lub /help. Trasowanie modelu nadal używa /model i /models.', - 'rewards.referralSection.retry': 'Ponów', - // settings.ai (more) - 'settings.ai.plannerSummary': - 'Planner: {sourceEvents} zdarzeń źródłowych, {sent} wysłanych, {deduped} zdeduplikowanych.', - 'settings.ai.routeLabel': 'trasa: {route}', - 'settings.ai.latestSpend': 'Ostatni wydatek: {amount} o {time} ({action})', - 'settings.ai.topActions': 'Najczęstsze akcje', - 'settings.ai.noSpendRows': 'Brak załadowanych wierszy wydatków.', - 'settings.ai.topHours': 'Najczęstsze godziny', - 'settings.ai.noHourlySpend': 'Brak wydatków godzinowych.', - // settings.autocomplete.appFilter (more) - 'settings.autocomplete.appFilter.app': 'Aplikacja', - 'settings.autocomplete.appFilter.currentSuggestion': 'Bieżąca sugestia', - 'settings.autocomplete.appFilter.debounce': 'Debounce', - 'settings.autocomplete.appFilter.enabled': 'Włączone', - 'settings.autocomplete.appFilter.lastError': 'Ostatni błąd', - 'settings.autocomplete.appFilter.model': 'Model', - 'settings.autocomplete.appFilter.phase': 'Faza', - 'settings.autocomplete.appFilter.platformSupported': 'Platforma obsługiwana', - 'settings.autocomplete.appFilter.running': 'Działa', - // settings.autocomplete.debug - 'settings.autocomplete.debug.acceptedPrefix': 'Zaakceptowano: {value}', - 'settings.autocomplete.debug.acceptFailed': 'Nie udało się zaakceptować sugestii', - 'settings.autocomplete.debug.alreadyRunning': 'Autouzupełnianie już działa.', - 'settings.autocomplete.debug.clearHistoryFailed': 'Nie udało się wyczyścić historii', - 'settings.autocomplete.debug.didNotStart': 'Autouzupełnianie nie wystartowało.', - 'settings.autocomplete.debug.disabledInSettings': - 'Autouzupełnianie jest wyłączone w ustawieniach. Włącz je i zapisz najpierw.', - 'settings.autocomplete.debug.fetchSuggestionFailed': 'Nie udało się pobrać bieżącej sugestii', - 'settings.autocomplete.debug.inspectFocusedElementFailed': - 'Nie udało się zbadać aktywnego elementu', - 'settings.autocomplete.debug.loadSettingsFailed': - 'Nie udało się wczytać ustawień autouzupełniania', - 'settings.autocomplete.debug.noSuggestionApplied': 'Nie zastosowano sugestii.', - 'settings.autocomplete.debug.noSuggestionReturned': 'Nie zwrócono sugestii.', - 'settings.autocomplete.debug.refreshStatusFailed': - 'Nie udało się odświeżyć statusu autouzupełniania', - 'settings.autocomplete.debug.saveAdvancedSettingsFailed': - 'Nie udało się zapisać ustawień zaawansowanych', - 'settings.autocomplete.debug.startFailed': 'Nie udało się uruchomić autouzupełniania', - 'settings.autocomplete.debug.stopFailed': 'Nie udało się zatrzymać autouzupełniania', - 'settings.autocomplete.debug.suggestionPrefix': 'Sugestia: {value}', - 'settings.autocomplete.shared.none': 'Brak', - 'settings.autocomplete.shared.notApplicable': 'nd.', - 'settings.autocomplete.shared.unknown': 'Nieznane', - // settings.billing.autoRecharge (more) - 'settings.billing.autoRecharge.expires': 'Wygasa {date}', - 'settings.billing.autoRecharge.spentThisWeek': 'Wykorzystano ${spent} z ${limit} w tym tygodniu', - // settings.localModel.deviceCapability (extras) - 'settings.localModel.deviceCapability.disabledLowercase': 'wyłączone', - 'settings.localModel.deviceCapability.presetDetails': - 'Czat: {chatModel} · Wizja: {visionModel} · Docelowy RAM: {targetRamGb} GB', - 'settings.localModel.download.capabilityChat': 'Czat', - 'settings.localModel.download.capabilityEmbedding': 'Embedding', - 'settings.localModel.download.capabilityStt': 'STT', - 'settings.localModel.download.capabilityTts': 'TTS', - 'settings.localModel.download.capabilityVision': 'Wizja', - 'settings.localModel.download.embeddingDimensions': 'Wymiary: {dimensions}', - 'settings.localModel.download.embeddingModel': 'Model: {modelId}', - 'settings.localModel.download.embeddingVectors': 'Wektory: {count}', - 'settings.localModel.download.notAvailable': 'nd.', - 'settings.localModel.download.summaryHelper': - 'Wywołuje `openhuman.inference_summarize` przez rdzeń Rust', - 'settings.localModel.download.transcript': 'Transkrypcja:', - 'settings.localModel.download.ttsOutput': 'Wyjście: {outputPath}', - 'settings.localModel.download.ttsVoice': 'Głos: {voiceId}', - // settings.localModel.status (extras) - 'settings.localModel.status.contextBelowMinimumBadge': - '{contextLength} ctx - poniżej minimum {required}', - 'settings.localModel.status.contextBelowMinimumTitle': - 'Odrzucone: okno kontekstu {contextLength} tokenów jest poniżej minimum {required} tokenów wymaganego przez warstwę pamięci. Cichy obcięcie kontekstu uszkodziłoby recall.', - 'settings.localModel.status.contextOkBadge': '{contextLength} ctx ✓', - 'settings.localModel.status.contextOkTitle': - 'Okno kontekstu {contextLength} tokenów spełnia minimum warstwy pamięci wynoszące {required} tokenów.', - 'settings.localModel.status.contextUnknownBadge': 'ctx nieznane', - 'settings.localModel.status.contextUnknownTitle': - 'Okno kontekstu nieznane; nie udało się potwierdzić, że spełnia minimum {required} tokenów warstwy pamięci.', - 'settings.localModel.status.expectedChat': 'Czat: {model}', - 'settings.localModel.status.expectedEmbedding': 'Embedding: {model}', - 'settings.localModel.status.expectedVision': 'Wizja: {model}', - 'settings.localModel.status.externalProcess': 'Zewnętrzny proces', - 'settings.localModel.status.notAvailable': 'nd.', - 'settings.mascot.customGifPlaceholder': 'https://example.com/avatar.gif', - 'settings.mascot.loadDetailError': 'Nie udało się wczytać maskotki.', - 'settings.mascot.loadLibraryError': 'Nie udało się wczytać biblioteki maskotek.', - 'settings.mascot.voice.customPlaceholder': 'np. 21m00Tcm4TlvDq8ikWAM', - 'settings.mascot.voice.previewText': 'Cześć, jestem Twoim asystentem. To jest podgląd głosu.', - // skills (channel icons / composio / create extras / install errors) - 'skills.channelIcon.discord': 'Discord', - 'skills.channelIcon.imessage': 'iMessage', - 'skills.channelIcon.telegram': 'Telegram', - 'skills.channelIcon.web': 'Sieć', - 'skills.channelIcon.yuanbao': 'Yuanbao', - 'skills.composio.poweredBy': 'Napędzane przez Composio', - 'skills.composio.staleStatusTitle': 'Połączenia pokazują nieaktualny status', - 'skills.create.allowedToolsHelp': 'Renderowane do nagłówka frontmatter SKILL.md jako', - 'skills.create.allowedToolsPlaceholder': 'node_exec, fetch', - 'skills.create.licensePlaceholder': 'MIT', - 'skills.create.tagsPlaceholder': 'handel, badania', - 'skills.install.errors.alreadyInstalledHint': - 'Umiejętność z tym slugiem już istnieje w przestrzeni roboczej. Usuń ją najpierw lub zmień `metadata.id` / `name` w frontmatter.', - 'skills.install.errors.alreadyInstalledTitle': 'Umiejętność już zainstalowana', - 'skills.install.errors.fetchFailedHint': - 'Żądanie nie zostało zrealizowane pomyślnie. Sprawdź, że URL wskazuje na osiągalny plik publiczny i że host zwrócił odpowiedź 2xx.', - 'skills.install.errors.fetchFailedTitle': 'Pobieranie nie powiodło się', - 'skills.install.errors.fetchTimedOutHint': - 'Zdalny host nie odpowiedział w czasie. Spróbuj ponownie lub zwiększ limit czasu (1-600 s).', - 'skills.install.errors.fetchTimedOutTitle': 'Przekroczono limit czasu pobierania', - 'skills.install.errors.fetchTooLargeHint': - 'SKILL.md musi mieć poniżej 1 MiB. Podziel dołączone zasoby na pliki `references/` lub `scripts/` zamiast wstawiać je inline.', - 'skills.install.errors.fetchTooLargeTitle': 'SKILL.md zbyt duży', - 'skills.install.errors.genericHint': 'Backend zwrócił błąd. Surowa wiadomość pokazana poniżej.', - 'skills.install.errors.genericTitle': 'Nie udało się zainstalować umiejętności', - 'skills.install.errors.invalidSkillHint': - 'Frontmatter musi być poprawnym YAML-em z niepustymi polami `name` i `description`, zakończonym `---`.', - 'skills.install.errors.invalidSkillTitle': 'SKILL.md nie został sparsowany', - 'skills.install.errors.invalidUrlHint': - 'Dozwolone są tylko publiczne adresy HTTPS. Prywatne, loopback i metadanowe hosty są zablokowane.', - 'skills.install.errors.invalidUrlTitle': 'URL odrzucony', - 'skills.install.errors.unsupportedUrlHint': - 'Działają tylko bezpośrednie linki `.md`. Dla GitHuba linkuj do pliku (github.com/owner/repo/blob/.../SKILL.md) — drzewa i korzenie repo nie są instalowane.', - 'skills.install.errors.unsupportedUrlTitle': 'Forma URL nieobsługiwana', - 'skills.install.errors.writeFailedHint': - 'Katalog umiejętności w przestrzeni roboczej nie był zapisywalny. Sprawdź uprawnienia systemu plików dla `/.openhuman/skills/`.', - 'skills.install.errors.writeFailedTitle': 'Nie udało się zapisać SKILL.md', - 'skills.install.fetchingPrefix': 'Pobieranie', - 'skills.install.fetchingSuffix': 'może to potrwać do skonfigurowanego limitu czasu.', - 'skills.install.subtitleMiddle': 'przez HTTPS i instaluje pod', - 'skills.install.subtitlePrefix': 'Pobiera pojedynczy', - 'skills.install.subtitleSuffix': 'tylko HTTPS; prywatne i loopback hosty są zablokowane.', - 'skills.install.successDiscovered': 'Odkryto {count} nowych umiejętności.', - 'skills.install.successNoNewIds': - 'Umiejętność zainstalowana, ale nie pojawiły się nowe ID — katalog może już zawierać umiejętność z tym samym slugiem.', - 'skills.install.timeoutHelp': - 'Domyślnie 60 sekund. Wartości spoza zakresu 1-600 są ograniczane po stronie serwera.', - 'skills.install.timeoutInvalid': 'Musi być liczbą całkowitą między 1 a 600.', - 'skills.install.timeoutPlaceholder': '60', - 'skills.install.urlHelpMiddle': 'plik.', - 'skills.install.urlHelpPrefix': 'Bezpośredni link do', - 'skills.install.urlHelpSuffix': 'URL-e przepisują się na', - 'skills.install.urlInvalidPrefix': 'URL musi być poprawnie sformułowanym', - 'skills.install.urlInvalidSuffix': 'linkiem.', - 'skills.install.urlPlaceholder': 'https://raw.githubusercontent.com/owner/repo/main/SKILL.md', - 'skills.meetingBots.platformComingSoon': 'Obsługa {label} jest już wkrótce.', - 'skills.meetingBots.platformHints.gmeet': 'meet.google.com/abc-defg-hij', - 'skills.meetingBots.platformHints.teams': 'teams.microsoft.com/...', - 'skills.meetingBots.platformHints.zoom': 'zoom.us/j/...', - 'skills.meetingBots.platforms.gmeet': 'Google Meet', - 'skills.meetingBots.platforms.teams': 'Microsoft Teams', - 'skills.meetingBots.platforms.zoom': 'Zoom', - 'skills.meetingBots.soonSuffix': 'wkrótce', - 'skills.setup.screenIntel.permissionPathLabel': 'macOS stosuje politykę prywatności do:', - // Task sources (#task-sources) - 'settings.taskSources.title': 'Task Sources', - 'settings.taskSources.subtitle': 'Pull tasks from your tools onto the agent todo board', - 'settings.taskSources.description': - 'Collect work items from GitHub, Notion, Linear, and ClickUp, enrich them, and route them onto the agent todo board.', - 'settings.taskSources.connectHint': - 'Task sources use your connected accounts. Connect them under Integrations first.', - 'settings.taskSources.disabledBanner': - 'Task sources are disabled in settings. Enable them to poll automatically.', - 'settings.taskSources.loadError': 'Failed to load task sources', - 'settings.taskSources.addTitle': 'Add a task source', - 'settings.taskSources.provider': 'Provider', - 'settings.taskSources.name': 'Name (optional)', - 'settings.taskSources.namePlaceholder': 'e.g. My open issues', - 'settings.taskSources.github.repo': 'Repository (owner/name, optional)', - 'settings.taskSources.github.labels': 'Labels (comma-separated)', - 'settings.taskSources.notion.database': 'Database (board) ID', - 'settings.taskSources.linear.team': 'Team ID (optional)', - 'settings.taskSources.clickup.team': 'Workspace (team) ID (optional)', - 'settings.taskSources.assignedToMe': 'Only items assigned to me', - 'settings.taskSources.add': 'Add source', - 'settings.taskSources.adding': 'Adding…', - 'settings.taskSources.preview': 'Preview', - 'settings.taskSources.previewResult': '{count} task(s) match this filter', - 'settings.taskSources.fetchNow': 'Fetch now', - 'settings.taskSources.fetching': 'Fetching…', - 'settings.taskSources.fetchResult': 'Routed {routed} of {fetched} task(s)', - 'settings.taskSources.configured': 'Configured sources', - 'settings.taskSources.empty': 'No task sources configured yet.', - 'settings.taskSources.proactive': 'Proactive', - 'settings.taskSources.lastFetch': 'Last fetch', - 'settings.taskSources.never': 'Never', - 'settings.taskSources.statusEnabled': 'Enabled', - 'settings.taskSources.statusDisabled': 'Disabled', - 'settings.taskSources.enable': 'Enable', - 'settings.taskSources.disable': 'Disable', - 'settings.taskSources.remove': 'Remove', - 'settings.taskSources.removeConfirm': - 'Remove this task source? All ingested task history will be deleted and cannot be undone.', - - 'settings.taskSources.refresh': 'Refresh', - // Task sources provider labels (#task-sources) - 'settings.taskSources.providers.github': 'GitHub', - 'settings.taskSources.providers.notion': 'Notion', - 'settings.taskSources.providers.linear': 'Linear', - 'settings.taskSources.providers.clickup': 'ClickUp', - 'skills.tabs.runners': 'Runners', - 'settings.developerMenu.skillsRunner.title': 'Skills Runner', - 'settings.developerMenu.skillsRunner.desc': - 'Run any bundled skill ad-hoc — fill its inputs and fire a background autonomous run', - 'settings.developerMenu.skillsRunner.panelDesc': - 'Pick a bundled skill, fill in its declared inputs, and fire a fire-and-forget background run. Use Dev Workflow instead if you want a cron-scheduled recurring job.', - 'settings.skillsRunner.skill': 'Skill', - 'settings.skillsRunner.selectSkill': 'Select a skill…', - 'settings.skillsRunner.loadingSkills': 'Loading skills…', - 'settings.skillsRunner.loadingDescription': 'Loading skill inputs…', - 'settings.skillsRunner.noInputs': 'This skill declares no inputs.', - 'settings.skillsRunner.placeholder.required': 'required', - 'settings.skillsRunner.runNow': 'Run now', - 'settings.skillsRunner.starting': 'Starting…', - 'settings.skillsRunner.started': 'Started — run id:', - 'settings.skillsRunner.logPath': 'Log:', - 'settings.skillsRunner.error.listSkills': 'Failed to load skills:', - 'settings.skillsRunner.error.describe': 'Failed to load inputs:', - 'settings.skillsRunner.error.missingRequired': 'Missing required input(s):', - 'settings.skillsRunner.error.run': 'Run failed to start:', - 'settings.skillsRunner.error.preflightGate': 'Preflight gate failed', - 'settings.skillsRunner.schedule.heading': 'Schedule (recurring)', - 'settings.skillsRunner.schedule.help': - 'Save this skill + inputs as a recurring cron job. The agent will call run_skill at each tick.', - 'settings.skillsRunner.schedule.frequency': 'Frequency', - 'settings.skillsRunner.schedule.every30min': 'Every 30 minutes', - 'settings.skillsRunner.schedule.everyHour': 'Every hour', - 'settings.skillsRunner.schedule.every2hours': 'Every 2 hours', - 'settings.skillsRunner.schedule.every6hours': 'Every 6 hours', - 'settings.skillsRunner.schedule.onceDaily': 'Once daily (9:00)', - 'settings.skillsRunner.schedule.save': 'Save schedule', - 'settings.skillsRunner.schedule.saving': 'Saving…', - 'settings.skillsRunner.schedule.saved': 'Schedule saved.', - 'settings.skillsRunner.schedule.error': 'Schedule save failed:', - 'settings.skillsRunner.schedule.loadingJobs': 'Loading existing schedules…', - 'settings.skillsRunner.schedule.noJobs': 'No schedules saved for this skill yet.', - 'settings.skillsRunner.schedule.existing': 'Scheduled jobs for this skill:', - 'settings.skillsRunner.schedule.runNow': 'Run', - 'settings.skillsRunner.schedule.remove': 'Remove', - 'settings.skillsRunner.recentRuns.headingForSkill': 'Recent runs for this skill', - 'settings.skillsRunner.recentRuns.headingAll': 'Recent skill runs (all)', - 'settings.skillsRunner.recentRuns.refresh': 'Refresh', - 'settings.skillsRunner.recentRuns.loading': 'Loading recent runs…', - 'settings.skillsRunner.recentRuns.empty': 'No recent runs.', - 'settings.skillsRunner.viewer.loading': 'Loading log…', - 'settings.skillsRunner.viewer.tailing': 'Live tailing', - 'settings.skillsRunner.viewer.fetching': 'fetching', - 'settings.skillsRunner.viewer.error': 'Log read failed:', - 'settings.skillsRunner.repoPicker.loading': 'Loading repositories…', - 'settings.skillsRunner.repoPicker.select': 'Select a repository…', - 'settings.skillsRunner.repoPicker.empty': - 'No repositories returned. Connect GitHub via Composio to populate this list.', - 'settings.skillsRunner.repoPicker.notConnected': - 'GitHub isn’t connected via Composio. Connect it under Skills → Composio first.', - 'settings.skillsRunner.repoPicker.privateTag': '(private)', - 'settings.skillsRunner.branchPicker.needRepo': 'Pick a repo first…', - 'settings.skillsRunner.branchPicker.loading': 'Loading branches…', - 'settings.skillsRunner.branchPicker.select': 'Select a branch…', - - // /skills IA restructure (Phase 2/3) — dashboard + new-skill page. - 'skills.dashboard.title': 'Skills', - 'skills.dashboard.scheduledHeading': 'Scheduled skills', - 'skills.dashboard.emptyTitle': 'No scheduled skills', - 'skills.dashboard.emptyBody': - 'Run a bundled skill once or save a recurring schedule to see it here.', - 'skills.dashboard.create': 'Create a Skill', - 'skills.dashboard.run': 'Run a Skill', - 'skills.dashboard.enable': 'Enable scheduled skill', - 'skills.dashboard.disable': 'Disable scheduled skill', - 'skills.dashboard.lastRun': 'Last run', - 'skills.dashboard.nextRun': 'Next run', - 'skills.dashboard.cardOpenRunner': 'Open in runner', - 'skills.dashboard.loadError': 'Failed to load scheduled skills', - 'skills.new.title': 'Create a skill', - 'skills.new.placeholderBody': - 'Authoring form arrives soon. For now, use the “New skill” button on the runner page.', -}; - -export default pl5; diff --git a/app/src/lib/i18n/chunks/pt-1.ts b/app/src/lib/i18n/chunks/pt-1.ts deleted file mode 100644 index 39365d709..000000000 --- a/app/src/lib/i18n/chunks/pt-1.ts +++ /dev/null @@ -1,1633 +0,0 @@ -import type { TranslationMap } from '../types'; - -// Portuguese (Português) chunk 1/5. Translated from chunks/en-1.ts. -const pt1: TranslationMap = { - 'nav.home': 'Início', - 'nav.human': 'Humano', - 'nav.chat': 'Bate-papo', - 'nav.connections': 'Conexões', - 'nav.memory': 'Inteligência', - 'nav.alerts': 'Alertas', - 'nav.rewards': 'Recompensas', - 'nav.settings': 'Configurações', - 'common.cancel': 'Cancelar', - 'common.save': 'Salvar', - 'common.confirm': 'Confirmar', - 'common.delete': 'Excluir', - 'common.edit': 'Editar', - 'common.create': 'Criar', - 'common.search': 'Pesquisar', - 'common.loading': 'carregando…', - 'common.error': 'Erro', - 'common.success': 'Sucesso', - 'common.back': 'Voltar', - 'common.next': 'Próximo', - 'common.finish': 'Concluir', - 'common.close': 'Fechar', - 'common.enabled': 'Ativado', - 'common.disabled': 'Desativado', - 'common.on': 'Ligado', - 'common.off': 'Desligado', - 'common.yes': 'Sim', - 'common.no': 'Não', - 'common.ok': 'Entendi', - 'common.retry': 'Tentar novamente', - 'common.copy': 'Copiar', - 'common.copied': 'Copiado', - 'common.learnMore': 'Saiba mais', - 'common.seeAll': 'Ver', - 'common.dismiss': 'Dispensar', - 'common.clear': 'Limpar', - 'common.reset': 'Redefinir', - 'common.refresh': 'Atualizar', - 'common.export': 'Exportar', - 'common.import': 'Importar', - 'common.upload': 'Enviar', - 'common.download': 'Baixar', - 'common.add': 'Adicionar', - 'common.remove': 'Remover', - 'common.showMore': 'Mostrar mais', - 'common.showLess': 'Mostrar menos', - 'common.submit': 'Enviar', - 'common.continue': 'Continuar', - 'common.comingSoon': 'Em breve', - 'settings.general': 'Geral', - 'settings.featuresAndAI': 'Recursos e IA', - 'settings.billingAndRewards': 'Cobrança e Recompensas', - 'settings.support': 'Suporte', - 'settings.advanced': 'Avançado', - 'settings.dangerZone': 'Zona de Perigo', - 'settings.account': 'Conta', - 'settings.accountDesc': 'Frase de recuperação, equipe, conexões e privacidade', - 'settings.notifications': 'Notificações', - 'settings.notificationsDesc': 'Não Perturbe e controles de notificação por conta', - 'settings.notifications.tabs.preferences': 'Preferências', - 'settings.notifications.tabs.routing': 'Roteamento', - 'settings.features': 'Recursos', - 'settings.featuresDesc': 'Reconhecimento de tela, mensagens e ferramentas', - 'settings.aiModels': 'IA e Modelos', - 'settings.aiModelsDesc': 'Configuração de modelos de IA local, downloads e provedor LLM', - 'settings.ai': 'Configuração de IA', - 'settings.aiDesc': - 'Provedores na nuvem, modelos Ollama locais e roteamento por carga de trabalho', - 'settings.billingUsage': 'Cobrança e Uso', - 'settings.billingUsageDesc': 'Plano de assinatura, créditos e métodos de pagamento', - 'settings.rewards': 'Recompensas', - 'settings.rewardsDesc': 'Indicações, cupons e créditos ganhos', - 'settings.restartTour': 'Reiniciar Tour', - 'settings.restartTourDesc': 'Reproduzir o tutorial do produto desde o início', - 'settings.about': 'Sobre', - 'settings.aboutDesc': 'Versão do app e atualizações de software', - 'settings.developerOptions': 'Avançado', - 'settings.developerOptionsDesc': - 'Configuração de IA, canais de mensagens, ferramentas, diagnósticos e painéis de depuração', - 'settings.clearAppData': 'Limpar Dados do App', - 'settings.clearAppDataDesc': 'Sair e excluir permanentemente todos os dados locais do app', - 'settings.logOut': 'Sair', - 'settings.logOutDesc': 'Sair da sua conta', - 'settings.exitLocalSession': 'Sair da sessão local', - 'settings.exitLocalSessionDesc': 'Retornar à tela de login', - 'settings.language': 'Idioma', - 'settings.languageDesc': 'Idioma de exibição da interface do app', - 'settings.alerts': 'Alertas', - 'settings.alertsDesc': 'Ver alertas recentes e atividades na sua caixa de entrada', - 'settings.account.recoveryPhrase': 'Frase de Recuperação', - 'settings.account.recoveryPhraseDesc': 'Ver e fazer backup da sua frase de recuperação de conta', - 'settings.account.team': 'Equipe', - 'settings.account.teamDesc': 'Gerenciar membros da equipe e permissões', - 'settings.account.connections': 'Conexões', - 'settings.account.connectionsDesc': 'Gerenciar contas e serviços vinculados', - 'settings.account.privacy': 'Privacidade', - 'settings.account.privacyDesc': 'Controlar quais dados saem do seu computador', - 'settings.notifications.doNotDisturb': 'Não Perturbe', - 'settings.notifications.doNotDisturbDesc': 'Pausar todas as notificações por um período definido', - 'settings.notifications.channelControls': 'Controles por Canal', - 'settings.notifications.channelControlsDesc': - 'Configurar preferências de notificação para cada canal', - 'settings.features.screenAwareness': 'Reconhecimento de Tela', - 'settings.features.screenAwarenessDesc': 'Deixar o assistente ver sua janela ativa', - 'settings.features.messaging': 'Mensagens', - 'settings.features.messagingDesc': 'Configurações de integração de canais e mensagens', - 'settings.features.tools': 'Ferramentas', - 'settings.features.toolsDesc': 'Gerenciar ferramentas e integrações conectadas', - 'settings.ai.localSetup': 'Configuração de IA Local', - 'settings.ai.localSetupDesc': 'Baixar e configurar modelos de IA local', - 'settings.ai.llmProvider': 'Provedor LLM', - 'settings.ai.llmProviderDesc': 'Escolher e configurar seu provedor de IA', - 'clearData.title': 'Limpar Dados do App', - 'clearData.warning': - 'Isso vai desconectar você e excluir permanentemente os dados locais do app, incluindo:', - 'clearData.bulletSettings': 'Configurações do app e conversas', - 'clearData.bulletCache': 'Todos os dados de cache de integração local', - 'clearData.bulletWorkspace': 'Dados do espaço de trabalho', - 'clearData.bulletOther': 'Todos os outros dados locais', - 'clearData.irreversible': 'Esta ação não pode ser desfeita.', - 'clearData.clearing': 'Limpando dados do app...', - 'clearData.failed': 'Falha ao limpar dados e sair. Por favor, tente novamente.', - 'clearData.failedLogout': 'Falha ao sair. Por favor, tente novamente.', - 'clearData.failedPersist': - 'Falha ao limpar o estado persistido do app. Por favor, tente novamente.', - 'welcome.title': 'Bem-vindo ao OpenHuman', - 'welcome.subtitle': - 'Sua super inteligência artificial pessoal. Privada, simples e extremamente poderosa.', - 'welcome.connectPrompt': 'Configurar URL de RPC (Avançado)', - 'welcome.selectRuntime': 'Selecionar um Runtime', - 'welcome.urlPlaceholder': 'http://localhost:8089', - 'welcome.invalidUrl': 'Por favor, insira uma URL HTTP ou HTTPS válida', - 'welcome.connecting': 'Testando', - 'welcome.connect': 'Testar', - 'home.greeting': 'Bom dia', - 'home.greetingAfternoon': 'Boa tarde', - 'home.greetingEvening': 'Boa noite', - 'home.askAssistant': 'Pergunte qualquer coisa ao seu assistente...', - 'home.statusOk': - 'Seu dispositivo está conectado. Mantenha o app aberto para manter a conexão ativa. Envie uma mensagem ao seu agente com o botão abaixo.', - 'home.statusBackendOnly': - 'Reconectando ao backend… seu agente estará disponível novamente em breve.', - 'home.statusCoreUnreachable': - 'O processo em segundo plano do OpenHuman não está respondendo. Ele pode ter travado ou falhado ao iniciar.', - 'home.statusInternetOffline': - 'Seu dispositivo está offline agora. Verifique sua rede ou reinicie o app para reconectar.', - 'home.restartCore': 'Reiniciar Core', - 'home.restartingCore': 'Reiniciando o core…', - 'home.themeToggle.toLight': 'Mudar para modo claro', - 'home.themeToggle.toDark': 'Mudar para modo escuro', - 'chat.newThread': 'Nova conversa', - 'chat.typeMessage': 'Digite uma mensagem...', - 'chat.send': 'Enviar mensagem', - 'chat.thinking': 'Pensando...', - 'chat.noMessages': 'Nenhuma mensagem ainda', - 'chat.startConversation': 'Inicie uma conversa', - 'chat.regenerate': 'Regenerar', - 'chat.copyResponse': 'Copiar resposta', - 'chat.citations': 'Citações', - 'chat.toolUsed': 'Ferramenta usada', - 'scope.legacy': 'Legado', - 'scope.user': 'Usuário', - 'scope.project': 'Projeto', - 'skills.title': 'Conexões', - 'skills.search': 'Pesquisar conexões...', - 'skills.noResults': 'Nenhuma conexão encontrada', - 'skills.connect': 'Conectar', - 'skills.disconnect': 'Desconectar', - 'skills.configure': 'Gerenciar', - 'skills.connected': 'Conectado', - 'skills.available': 'Disponível', - 'skills.addAccount': 'Adicionar Conta', - 'skills.channels': 'Canais', - 'skills.integrations': 'Integrações', - 'memory.title': 'Memória', - 'memory.search': 'Pesquisar memórias...', - 'memory.noResults': 'Nenhuma memória encontrada', - 'memory.empty': - 'Nenhuma memória ainda. As memórias são criadas automaticamente conforme você interage.', - 'memory.tab.memory': 'Memória', - 'memory.tab.tasks': 'Agent Tasks', - 'memory.tab.tasksDescription': - 'Create and track tasks — your own to-dos plus the boards your agents build across conversations.', - 'memory.tab.subconscious': 'Subconsciente', - 'memory.tab.dreams': 'Sonhos', - 'memory.tab.calls': 'Chamadas', - 'memory.tab.diagram': 'Diagram', - 'memory.tab.settings': 'Configurações', - 'memory.analyzeNow': 'Analisar Agora', - 'memoryTree.status.title': 'Memory Tree', - 'memoryTree.status.autoSyncLabel': 'Auto-sync', - 'memoryTree.status.autoSyncDescription': - 'Pause to stop new ingestion. Existing wiki stays queryable.', - 'memoryTree.status.statusTile': 'Status', - 'memoryTree.status.lastSyncTile': 'Last sync', - 'memoryTree.status.totalChunksTile': 'Total chunks', - 'memoryTree.status.wikiSizeTile': 'Wiki size', - 'memoryTree.status.statusRunning': 'Running', - 'memoryTree.status.statusPaused': 'Paused', - 'memoryTree.status.statusSyncing': 'Syncing', - 'memoryTree.status.statusError': 'Error', - 'memoryTree.status.statusIdle': 'Idle', - 'memoryTree.status.never': 'Never', - 'memoryTree.status.fetchError': "Couldn't fetch Memory Tree status", - 'memoryTree.status.retry': 'Retry', - 'memoryTree.status.toggleFailed': "Couldn't toggle auto-sync", - 'memoryTree.status.justNow': 'just now', - 'memoryTree.status.secondsAgo': '{count}s ago', - 'memoryTree.status.minuteAgo': '1 min ago', - 'memoryTree.status.minutesAgo': '{count} min ago', - 'memoryTree.status.hourAgo': '1 hr ago', - 'memoryTree.status.hoursAgo': '{count} hr ago', - 'memoryTree.status.dayAgo': '1 day ago', - 'memoryTree.status.daysAgo': '{count} days ago', - 'alerts.title': 'Alertas', - 'alerts.empty': 'Nenhum alerta ainda', - 'alerts.markAllRead': 'Marcar tudo como lido', - 'alerts.unread': 'não lido', - 'rewards.title': 'Recompensas', - 'rewards.referrals': 'Indicações', - 'rewards.coupons': 'Resgatar', - 'rewards.credits': 'Créditos', - 'rewards.referralCode': 'Seu código de indicação', - 'rewards.copyCode': 'Copiar código', - 'rewards.share': 'Compartilhar', - 'onboarding.welcome': 'Olá. Eu sou o OpenHuman.', - 'onboarding.welcomeDesc': - 'Seu assistente de IA superinteligente que roda no seu computador. Privado, simples e extremamente poderoso.', - 'onboarding.context': 'Coleta de Contexto', - 'onboarding.contextDesc': 'Conecte as ferramentas e serviços que você usa todos os dias.', - 'onboarding.localAI': 'IA Local', - 'onboarding.localAIDesc': 'Configure um modelo de IA local que roda na sua máquina.', - 'onboarding.chatProvider': 'Provedor de Chat', - 'onboarding.chatProviderDesc': 'Escolha como deseja interagir com seu assistente.', - 'onboarding.referral': 'Indicação', - 'onboarding.referralDesc': 'Aplique um código de indicação, se tiver um.', - 'onboarding.finish': 'Concluir Configuração', - 'onboarding.finishDesc': 'Tudo pronto! Comece a usar o OpenHuman.', - 'onboarding.skip': 'Pular', - 'onboarding.getStarted': 'Começar', - 'onboarding.runtimeChoice.title': 'Como você gostaria de rodar o OpenHuman?', - 'onboarding.runtimeChoice.subtitle': - 'Escolha a configuração que melhor se encaixa para você. Você pode alterar isso depois nas Configurações.', - 'onboarding.runtimeChoice.cloud.title': 'Simples', - 'onboarding.runtimeChoice.cloud.tagline': 'Deixe o OpenHuman gerenciar tudo para você.', - 'onboarding.runtimeChoice.cloud.f1': 'Segurança integrada', - 'onboarding.runtimeChoice.cloud.f2': 'Compressão de tokens para ampliar seu uso', - 'onboarding.runtimeChoice.cloud.f3': 'Uma assinatura, todos os modelos incluídos', - 'onboarding.runtimeChoice.cloud.f4': 'Sem chaves de API para gerenciar', - 'onboarding.runtimeChoice.cloud.f5': 'Simples de configurar', - 'onboarding.runtimeChoice.custom.title': 'Personalizado', - 'onboarding.runtimeChoice.custom.tagline': - 'Traga suas próprias chaves. Controle total do que está usando.', - 'onboarding.runtimeChoice.custom.f1': 'Você precisará de chaves de API para quase tudo', - 'onboarding.runtimeChoice.custom.f2': 'Reutiliza serviços que você já paga', - 'onboarding.runtimeChoice.custom.f3': 'Pode ser gratuito se você rodar tudo localmente', - 'onboarding.runtimeChoice.custom.f4': 'Mais configuração, mais controles', - 'onboarding.runtimeChoice.custom.f5': 'Ideal para usuários avançados e desenvolvedores', - 'onboarding.runtimeChoice.cloud.creditHighlight': '$1 de crédito grátis para experimentar', - 'onboarding.runtimeChoice.continueCloud': 'Continuar com Simples', - 'onboarding.runtimeChoice.continueCustom': 'Continuar com Personalizado', - 'onboarding.runtimeChoice.recommended': 'Recomendado', - 'onboarding.apiKeys.title': 'Vamos Adicionar Suas Chaves de API', - 'onboarding.apiKeys.subtitle': - 'Você pode colá-las agora ou pular e adicioná-las depois em Configurações › IA. As chaves são armazenadas neste dispositivo, criptografadas em repouso.', - 'onboarding.apiKeys.openaiLabel': 'Chave de API OpenAI', - 'onboarding.apiKeys.openaiPlaceholder': 'sk-...', - 'onboarding.apiKeys.anthropicLabel': 'Chave de API Anthropic', - 'onboarding.apiKeys.anthropicPlaceholder': 'sk-ant-...', - 'onboarding.apiKeys.saveError': - 'Não foi possível salvar essa chave. Verifique-a e tente novamente.', - 'onboarding.apiKeys.skipForNow': 'Pular por enquanto', - 'onboarding.apiKeys.continue': 'Salvar e continuar', - 'onboarding.apiKeys.saving': 'Salvando…', - 'onboarding.custom.stepperInference': 'Inferência', - 'onboarding.custom.stepperVoice': 'Voz', - 'onboarding.custom.stepperOAuth': 'OAuth', - 'onboarding.custom.stepperSearch': 'Pesquisa', - 'onboarding.custom.stepperEmbeddings': 'Embeddings', - 'onboarding.custom.stepperMemory': 'Memória', - 'onboarding.custom.stepCounter': 'Etapa {n} de {total}', - 'onboarding.custom.defaultTitle': 'Padrão', - 'onboarding.custom.defaultSubtitle': 'Deixe o OpenHuman gerenciar para você.', - 'onboarding.custom.configureTitle': 'Configurar', - 'onboarding.custom.configureSubtitle': 'Vou escolher o que usar.', - 'onboarding.custom.progressAriaLabel': 'Progresso do onboarding', - 'onboarding.custom.continue': 'Continuar', - 'onboarding.custom.back': 'Voltar', - 'onboarding.custom.finish': 'Concluir Configuração', - 'onboarding.custom.configureLater': - 'Você pode terminar de configurar isso após o onboarding. Vamos te levar à página de Configurações correspondente quando terminar.', - 'onboarding.custom.openSettings': 'Abrir nas Configurações', - 'onboarding.custom.inference.title': 'Inferência (Texto)', - 'onboarding.custom.inference.subtitle': - 'Qual modelo de linguagem deve responder suas perguntas e executar seus agentes?', - 'onboarding.custom.inference.defaultDesc': - 'O OpenHuman direciona cada carga de trabalho para um modelo padrão adequado. Sem chaves, sem configuração.', - 'onboarding.custom.inference.configureDesc': - 'Traga sua própria chave OpenAI ou Anthropic. Usamos para todas as cargas de trabalho baseadas em texto.', - 'onboarding.custom.voice.title': 'Voz', - 'onboarding.custom.voice.subtitle': 'Fala para texto e texto para fala no modo de voz.', - 'onboarding.custom.voice.defaultDesc': - 'O OpenHuman vem com STT/TTS gerenciado que funciona sem configuração.', - 'onboarding.custom.voice.configureDesc': - 'Use seu próprio ElevenLabs / OpenAI Whisper / etc. Configure em Configurações › Voz.', - 'onboarding.custom.oauth.title': 'Conexões (OAuth)', - 'onboarding.custom.oauth.subtitle': - 'Gmail, Slack, Notion e outros serviços conectados que precisam de OAuth.', - 'onboarding.custom.oauth.defaultDesc': - 'O OpenHuman usa um espaço de trabalho Composio gerenciado. Um clique para conectar cada serviço depois.', - 'onboarding.custom.oauth.configureDesc': - 'Traga sua própria conta Composio / chave de API. Configure em Configurações › Conexões.', - 'onboarding.custom.search.title': 'Pesquisa na Web', - 'onboarding.custom.search.subtitle': 'Como o OpenHuman pesquisa na web em seu nome.', - 'onboarding.custom.search.defaultDesc': - 'O OpenHuman usa um backend de pesquisa gerenciado. Sem chaves necessárias.', - 'onboarding.custom.search.configureDesc': - 'Traga sua própria chave de provedor de pesquisa (Tavily, Brave, etc.). Configure em Configurações › Ferramentas.', - 'onboarding.custom.embeddings.title': 'Embeddings', - 'onboarding.custom.embeddings.subtitle': - 'How OpenHuman generates vector embeddings for semantic memory search.', - 'onboarding.custom.embeddings.defaultDesc': - 'OpenHuman uses a managed embedding service. No API key needed.', - 'onboarding.custom.embeddings.configureDesc': - 'Bring your own embedding provider (OpenAI, Voyage, Ollama, etc.).', - 'onboarding.custom.memory.title': 'Memória', - 'onboarding.custom.memory.subtitle': - 'Como o OpenHuman se lembra do seu contexto, preferências e conversas anteriores.', - 'onboarding.custom.memory.defaultDesc': - 'O OpenHuman gerencia o armazenamento e a recuperação de memória automaticamente. Sem nada para configurar.', - 'onboarding.custom.memory.configureDesc': - 'Inspecione, exporte ou limpe a memória você mesmo. Configure em Configurações › Memória.', - 'accounts.addAccount': 'Adicionar Conta', - 'accounts.manageAccounts': 'Gerenciar Contas', - 'accounts.noAccounts': 'Nenhuma conta conectada', - 'accounts.connectAccount': 'Conecte uma conta para começar', - 'accounts.agent': 'Agente', - 'accounts.respondQueue': 'Fila de Respostas', - 'accounts.disconnect': 'Desconectar', - 'accounts.disconnectConfirm': 'Tem certeza de que deseja desconectar esta conta?', - 'accounts.disconnectClearMemory': 'Also delete memory from this source', - 'accounts.disconnectClearMemoryHint': - 'Permanently removes local memory chunks linked to this connection.', - 'accounts.searchAccounts': 'Pesquisar contas...', - 'channels.title': 'Canais', - 'channels.configure': 'Configurar Canal', - 'channels.setup': 'Configurar', - 'channels.noChannels': 'Nenhum canal configurado', - 'channels.addChannel': 'Adicionar Canal', - 'channels.status.connected': 'Conectado', - 'channels.status.disconnected': 'Desconectado', - 'channels.status.error': 'Erro', - 'channels.status.configuring': 'Configurando', - 'channels.defaultMessaging': 'Canal de Mensagens Padrão', - 'webhooks.title': 'Webhooks', - 'webhooks.create': 'Criar Webhook', - 'webhooks.noWebhooks': 'Nenhum webhook configurado', - 'webhooks.url': 'URL', - 'webhooks.secret': 'Segredo', - 'webhooks.events': 'Eventos', - 'webhooks.archiveDirectory': 'Diretório de Arquivo', - 'webhooks.todayFile': 'Arquivo de Hoje', - 'invites.title': 'Convites', - 'invites.create': 'Criar Convite', - 'invites.noInvites': 'Nenhum convite pendente', - 'invites.code': 'Código de Convite', - 'invites.copyLink': 'Copiar Link', - 'devOptions.title': 'Avançado', - 'devOptions.diagnostics': 'Diagnósticos', - 'devOptions.diagnosticsDesc': 'Saúde do sistema, logs e métricas de desempenho', - 'devOptions.toolPolicyDiagnosticsDesc': - 'Tool inventory, policy posture, MCP allowlists, and recent blocks', - 'devOptions.toolPolicyDiagnostics.loading': 'Loading…', - 'devOptions.toolPolicyDiagnostics.unavailable': 'Diagnostics unavailable', - 'devOptions.toolPolicyDiagnostics.posture.title': 'Policy posture', - 'devOptions.toolPolicyDiagnostics.posture.autonomy': 'Autonomy:', - 'devOptions.toolPolicyDiagnostics.posture.workspaceOnly': 'Workspace only:', - 'devOptions.toolPolicyDiagnostics.posture.maxActionsPerHour': 'Max actions/hr:', - 'devOptions.toolPolicyDiagnostics.posture.approvalMediumRisk': 'Approval (medium risk):', - 'devOptions.toolPolicyDiagnostics.posture.blockHighRisk': 'Block high risk:', - 'devOptions.toolPolicyDiagnostics.inventory.title': 'Inventory', - 'devOptions.toolPolicyDiagnostics.inventory.totalTools': 'Total tools', - 'devOptions.toolPolicyDiagnostics.inventory.enabledTools': 'Enabled tools', - 'devOptions.toolPolicyDiagnostics.inventory.mcpStdioTools': 'MCP stdio tools', - 'devOptions.toolPolicyDiagnostics.inventory.jsonRpcTools': 'JSON-RPC tools', - 'devOptions.toolPolicyDiagnostics.mcpAllowlists.title': 'MCP allowlists', - 'devOptions.toolPolicyDiagnostics.mcpAllowlists.summary': - 'Enabled: {enabled} · Servers: {enabledCount}/{totalCount}', - 'devOptions.toolPolicyDiagnostics.mcpAllowlists.unnamed': '', - 'devOptions.toolPolicyDiagnostics.mcpAllowlists.allowDeny': 'allow={allowCount} deny={denyCount}', - 'devOptions.toolPolicyDiagnostics.mcpWriteAudit.title': 'MCP write audit', - 'devOptions.toolPolicyDiagnostics.mcpWriteAudit.summary': - 'Enabled: {enabled} · Recent (24h): {recentRows}', - 'devOptions.toolPolicyDiagnostics.recentBlocked.title': 'Recent blocked calls', - 'devOptions.toolPolicyDiagnostics.recentBlocked.empty': 'No blocked calls recorded.', - 'devOptions.toolPolicyDiagnostics.redactedSurfaces.title': 'Redacted surfaces', - 'devOptions.toolPolicyDiagnostics.redactedSurfaces.summary': - 'Write-capable: {writeCount} · Policy surfaces: {policyCount}', - 'devOptions.debugPanels': 'Painéis de Depuração', - 'devOptions.debugPanelsDesc': - 'Flags de funcionalidades, inspeção de estado e ferramentas de depuração', - 'devOptions.webhooks': 'Webhooks', - 'devOptions.webhooksDesc': 'Configurar e testar integrações de webhook', - 'devOptions.memoryInspection': 'Inspeção de Memória', - 'devOptions.memoryInspectionDesc': 'Navegar, consultar e gerenciar entradas de memória', - 'voice.pushToTalk': 'Pressionar para Falar', - 'voice.recording': 'Gravando...', - 'voice.processing': 'Processando...', - 'voice.languageHint': 'Idioma', - 'misc.rehydrating': 'Carregando seus dados...', - 'misc.checkingServices': 'Verificando serviços...', - 'misc.serviceUnavailable': 'Serviço Indisponível', - 'misc.somethingWentWrong': 'Algo deu errado', - 'misc.tryAgainLater': 'Por favor, tente novamente mais tarde.', - 'misc.restartApp': 'Reiniciar App', - 'misc.updateAvailable': 'Atualização Disponível', - 'misc.updateNow': 'Atualizar Agora', - 'misc.updateLater': 'Depois', - 'misc.downloading': 'Baixando...', - 'misc.installing': 'Instalando...', - 'misc.beta': - 'O OpenHuman está em beta inicial. Sinta-se à vontade para compartilhar feedback ou reportar bugs que encontrar — cada relato nos ajuda a melhorar mais rápido.', - 'misc.betaFeedback': 'Enviar feedback', - 'mnemonic.title': 'Frase de Recuperação', - 'mnemonic.warning': 'Anote estas palavras em ordem e guarde-as em um lugar seguro.', - 'mnemonic.copyWarning': - 'Nunca compartilhe sua frase de recuperação. Qualquer pessoa com essas palavras pode acessar sua conta.', - 'mnemonic.copied': 'Frase de recuperação copiada para a área de transferência', - 'mnemonic.reveal': 'Revelar frase', - 'mnemonic.revealPhrase': 'Reveal recovery phrase', - 'mnemonic.hidden': 'Frase de recuperação está oculta', - 'privacy.title': 'Privacidade e Segurança', - 'privacy.description': 'Relatório de transparência de dados enviados a serviços externos.', - 'privacy.empty': 'Nenhuma transferência de dados externa detectada.', - 'privacy.whatLeavesComputer': 'O que sai do seu computador', - 'privacy.loading': 'Carregando detalhes de privacidade...', - 'privacy.loadError': - 'Não foi possível carregar a lista de privacidade em tempo real. Os controles de análise abaixo ainda funcionam.', - 'privacy.noCapabilities': 'Nenhuma funcionalidade divulga atualmente movimentação de dados.', - 'privacy.sentTo': 'Enviado para', - 'privacy.leavesDevice': 'Sai do dispositivo', - 'privacy.staysLocal': 'Fica local', - 'privacy.anonymizedAnalytics': 'Análises Anonimizadas', - 'privacy.shareAnonymizedData': 'Compartilhar Dados de Uso Anonimizados', - 'privacy.shareAnonymizedDataDesc': - 'Ajude a melhorar o OpenHuman compartilhando relatórios de falhas e análises de uso anônimas. Todos os dados são totalmente anonimizados — nenhum dado pessoal, mensagem, chave de carteira ou informação de sessão é coletado.', - 'privacy.meetingFollowUps': 'Acompanhamentos de reuniões', - 'privacy.autoHandoffMeet': - 'Transferência automática de transcrições do Google Meet para o orquestrador', - 'privacy.autoHandoffMeetDesc': - 'Quando uma chamada do Google Meet termina, o orquestrador do OpenHuman pode ler a transcrição e pode realizar ações como redigir mensagens, agendar acompanhamentos ou postar resumos no seu espaço de trabalho Slack conectado. Desativado por padrão.', - 'privacy.analyticsDisclaimer': - 'Todas as análises e relatórios de bugs são totalmente anonimizados. Quando ativado, coletamos apenas informações de falhas, tipo de dispositivo e localização do arquivo de erros. Nunca acessamos suas mensagens, dados de sessão, chaves de carteira, chaves de API ou qualquer informação de identificação pessoal. Você pode alterar essa configuração a qualquer momento.', - 'settings.about.version': 'Versão', - 'settings.about.updateAvailable': 'está disponível', - 'settings.about.softwareUpdates': 'Atualizações de software', - 'settings.about.lastChecked': 'Última verificação', - 'settings.about.checking': 'Verificando...', - 'settings.about.checkForUpdates': 'Verificar atualizações', - 'settings.about.releases': 'Versões', - 'settings.about.releasesDesc': - 'Navegar pelas notas de versão e compilações anteriores no GitHub.', - 'settings.about.openReleases': 'Abrir versões no GitHub', - 'settings.ai.overview': 'Visão Geral do Sistema de IA', - 'migration.title': 'Importar de outro assistente', - 'migration.description': - 'Migre memória e anotações de outro assistente local para este espaço de trabalho. Comece com uma Pré-visualização para ver exatamente o que mudaria, depois clique em Aplicar para copiar os dados. Sua memória atual é salva primeiro.', - 'migration.vendorLabel': 'Fornecedor de origem', - 'migration.sourceLabel': 'Caminho do espaço de trabalho de origem (opcional)', - 'migration.sourcePlaceholder': - 'Deixe em branco para detecção automática (ex.: ~/.openclaw/workspace)', - 'migration.sourcePlaceholderHermes': 'Leave blank to auto-detect (e.g. ~/.hermes)', - 'migration.sourceHint': - 'Em branco usa o local padrão do fornecedor. Informe um caminho explícito se você moveu o espaço de trabalho.', - 'migration.previewAction': 'Pré-visualizar', - 'migration.previewRunning': 'Pré-visualizando…', - 'migration.applyAction': 'Aplicar importação', - 'migration.applyRunning': 'Importando…', - 'migration.applyDisclaimer': - 'Aplicar é desbloqueado após uma Pré-visualização bem-sucedida da mesma origem. A memória existente é salva antes de qualquer importação.', - 'migration.reportTitlePreview': 'Pré-visualização — nada importado ainda', - 'migration.reportTitleApplied': 'Importação concluída', - 'migration.report.source': 'Espaço de trabalho de origem', - 'migration.report.target': 'Espaço de trabalho de destino', - 'migration.report.fromSqlite': 'Do SQLite (brain.db)', - 'migration.report.fromMarkdown': 'Do Markdown', - 'migration.report.imported': 'Importados', - 'migration.report.skippedUnchanged': 'Ignorados (sem alteração)', - 'migration.report.renamedConflicts': 'Renomeados em caso de conflito', - 'migration.report.warnings': 'Avisos', - 'migration.report.previewHint': - 'Nenhum dado foi importado ainda. Clique em Aplicar importação para copiar.', - 'migration.report.appliedHint': - 'As entradas importadas já estão na sua memória. Execute Pré-visualizar novamente para comparar.', - 'migration.confirmImport.singular': - 'Importar {count} entrada para o espaço de trabalho atual?\n\nOrigem: {source}\nDestino: {target}\n\nA memória existente será salva antes da importação.', - 'migration.confirmImport.plural': - 'Importar {count} entradas para o espaço de trabalho atual?\n\nOrigem: {source}\nDestino: {target}\n\nA memória existente será salva antes da importação.', - // Settings menu: Appearance + Mascot (#2225) — English stubs; native translations welcome - 'settings.appearance': 'Aparência', - 'settings.appearanceDesc': 'Escolha claro, escuro ou combine com o tema do seu sistema', - 'settings.mascot': 'Mascote', - 'settings.mascotDesc': 'Escolha a cor do mascote usada no aplicativo', - 'channels.authMode.managed_dm': 'Faça login com OpenHuman', - 'channels.authMode.oauth': 'OAuth Faça login', - 'channels.authMode.bot_token': 'Use seu próprio token de bot', - 'channels.authMode.api_key': 'Use o seu próprio Chave API', - 'channels.fieldRequired': '{field} é necessária', - 'channels.mcp.title': 'MCP Servidores', - 'channels.mcp.description': - 'Browse and manage Model Context Protocol servers that extend the AI with new tools.', - 'skills.integrationsSubtitle': - 'Cloud-based OAuth connections — sign in with your account and Composio brokers the tokens so agents can read and act on your behalf. No API keys to manage.', - 'skills.tabs.composio': 'Composio', - 'skills.tabs.channels': 'Canais', - 'skills.tabs.mcp': 'MCP Servidores', - 'skills.mcpComingSoon.title': 'MCP Servidores', - 'skills.mcpComingSoon.description': - 'MCP server management is coming soon. This tab will be the home for discovering, connecting, and monitoring your MCP server integrations.', - 'settings.about.connection': 'Conexão', - 'settings.about.connectionMode': 'Modo', - 'settings.about.connectionModeLocal': 'Local', - 'settings.about.connectionModeCloud': 'Nuvem', - 'settings.about.connectionModeUnset': 'Não selecionado', - 'settings.about.serverUrl': 'Servidor URL', - 'settings.about.serverUrlUnavailable': 'Indisponível', - 'settings.about.connectionHelperLocal': - 'Spawned in-process by the Tauri shell on app launch. The port is chosen at startup, so this URL changes between launches.', - 'settings.about.connectionHelperCloud': - 'Connected to a remote core. Change this in BootCheck or the cloud mode picker.', - 'settings.heartbeat.title': 'Heartbeat e loops', - 'settings.heartbeat.desc': 'Control background scheduling cadences and inspect the loop map.', - 'settings.ledgerUsage.title': 'Razão de uso', - 'settings.ledgerUsage.desc': 'Recent credit spend, budget math, and background API read budget.', - 'settings.costDashboard.title': 'Cost dashboard', - 'settings.costDashboard.desc': - '7-day spend and token burn across the swarm, with budget pace and per-model breakdown.', - 'settings.costDashboard.sevenDayCost': '7-day daily cost', - 'settings.costDashboard.sevenDayTokens': '7-day token usage', - 'settings.costDashboard.totalSpend': '7-day total', - 'settings.costDashboard.monthlyPace': 'Monthly pace', - 'settings.costDashboard.budgetLimit': 'Budget limit', - 'settings.costDashboard.utilization': 'Utilisation', - 'settings.costDashboard.modelBreakdown': 'Per-model breakdown', - 'settings.costDashboard.model': 'Model', - 'settings.costDashboard.provider': 'Provider', - 'settings.costDashboard.cost': 'Cost', - 'settings.costDashboard.tokens': 'Tokens', - 'settings.costDashboard.requests': 'Requests', - 'settings.costDashboard.percentOfTotal': '% of total', - 'settings.costDashboard.inputTokens': 'Input', - 'settings.costDashboard.outputTokens': 'Output', - 'settings.costDashboard.budgetNormal': 'On track', - 'settings.costDashboard.budgetWarning': 'Warning', - 'settings.costDashboard.budgetExceeded': 'Over budget', - 'settings.costDashboard.noBudget': 'No limit set', - 'settings.costDashboard.noData': 'No cost recorded yet for the last 7 days.', - 'settings.costDashboard.noModels': 'No model activity in the last 7 days.', - 'settings.costDashboard.loading': 'Loading cost dashboard…', - 'settings.costDashboard.disabledHint': - 'Cost dashboard is disabled in config. Set [cost.dashboard] enabled = true in config.toml to re-enable.', - 'settings.costDashboard.subtitle': - 'Live spend and token burn across the swarm. Bars auto-refresh every few seconds — no page reload needed.', - 'settings.costDashboard.summaryAriaLabel': 'Cost summary metrics', - 'settings.costDashboard.lastSevenDays': 'last 7 days', - 'settings.costDashboard.utilizationOf': 'of', - 'settings.costDashboard.thisMonth': 'this month', - 'settings.costDashboard.monthlyPaceHint': - 'Projected monthly spend at the current daily run-rate (avg × 30).', - 'settings.costDashboard.budgetLimitHint': - 'Monthly budget read from cost.monthly_limit_usd in config.toml.', - 'settings.costDashboard.dailyTarget': 'Daily target', - 'settings.costDashboard.today': 'Today', - 'settings.costDashboard.todayBadge': 'TODAY', - 'settings.costDashboard.unknownProvider': '—', - 'settings.costDashboard.justNow': 'Just now', - 'settings.costDashboard.secondsAgo': '{value}s ago', - 'settings.costDashboard.minutesAgo': '{value}m ago', - 'settings.costDashboard.hoursAgo': '{value}h ago', - 'settings.costDashboard.daysAgo': '{value}d ago', - 'settings.costDashboard.updated': 'Updated', - 'settings.costDashboard.refresh': 'Refresh', - 'settings.costDashboard.utcNote': 'Days bucketed in UTC', - 'settings.costDashboard.stackedNote': 'Input + output stacked', - 'settings.costDashboard.modelBreakdownHint': 'Aggregated across the last 7 days.', - 'settings.costDashboard.noDataHint': - 'Send an agent message — token usage from the next provider call will populate the chart within ~10 seconds.', - 'settings.search.title': 'Mecanismo de pesquisa', - 'settings.search.menuDesc': - 'Default to OpenHuman-managed search or wire up your own provider with an API key.', - 'settings.search.description': - 'Pick the search engine the agent uses. Managed uses OpenHuman’s backend (no setup). Parallel and Brave run direct from your machine using your API key.', - 'settings.search.engineAria': 'Mecanismo de pesquisa', - 'settings.search.engineManagedLabel': 'OpenHuman Gerenciado', - 'settings.search.engineManagedDesc': - 'Default. Routed through the OpenHuman backend — no API key required.', - 'settings.search.engineParallelLabel': 'Parallel', - 'settings.search.engineParallelDesc': - 'Direct Parallel API: search, extract, chat, research, enrich, dataset tools.', - 'settings.search.engineBraveLabel': 'Pesquisa Brave', - 'settings.search.engineBraveDesc': 'Direct Brave Search API: web, news, image, and video tools.', - 'settings.search.engineQueritLabel': 'Querit', - 'settings.search.engineQueritDesc': - 'Direct Querit API: web search with site, time range, country, and language filters.', - 'settings.search.statusConfigured': 'Configurado', - 'settings.search.statusNeedsKey': 'Precisa da chave API', - 'settings.search.fallbackToManaged': - 'No key configured — search will fall back to Managed until a key is saved.', - 'settings.search.getApiKey': 'Obtenha a chave API', - 'settings.search.save': 'Salvar', - 'settings.search.clear': 'Limpar', - 'settings.search.show': 'Mostrar', - 'settings.search.hide': 'Ocultar', - 'settings.search.statusSaving': 'Salvando…', - 'settings.search.statusSaved': 'Salvo.', - 'settings.search.statusError': 'Falha', - 'settings.search.parallelKeyLabel': 'Parallel API chave', - 'settings.search.braveKeyLabel': 'Brave Pesquisar chave API', - 'settings.search.queritKeyLabel': 'Querit API key', - 'settings.search.placeholderStored': '•••••••• (armazenado)', - 'settings.search.placeholderParallel': 'pk_...', - 'settings.search.placeholderBrave': 'BSA...', - 'settings.search.placeholderQuerit': 'Querit API key', - 'settings.embeddings.title': 'Embeddings', - 'settings.embeddings.description': - 'Escolha qual provedor de embeddings converte memória em vetores para busca semântica. Alterar o provedor, modelo ou dimensões invalida vetores armazenados e requer uma redefinição completa da memória.', - 'settings.embeddings.providerAria': 'Provedor de embeddings', - 'settings.embeddings.statusConfigured': 'Configurado', - 'settings.embeddings.statusNeedsKey': 'Precisa de chave API', - 'settings.embeddings.apiKeyLabel': 'Chave API {provider}', - 'settings.embeddings.placeholderStored': '•••••••• (armazenado)', - 'settings.embeddings.placeholderKey': 'Cole sua chave API…', - 'settings.embeddings.keyStoredEncrypted': - 'Sua chave API é armazenada criptografada neste dispositivo.', - 'settings.embeddings.show': 'Mostrar', - 'settings.embeddings.hide': 'Ocultar', - 'settings.embeddings.save': 'Salvar', - 'settings.embeddings.clear': 'Limpar', - 'settings.embeddings.model': 'Modelo', - 'settings.embeddings.dimensions': 'Dimensões', - 'settings.embeddings.customEndpoint': 'Endpoint personalizado', - 'settings.embeddings.customModelPlaceholder': 'Nome do modelo', - 'settings.embeddings.customDimsPlaceholder': 'Escurece', - 'settings.embeddings.applyCustom': 'Aplicar', - 'settings.embeddings.testConnection': 'Testar conexão', - 'settings.embeddings.testing': 'Testando…', - 'settings.embeddings.testSuccess': 'Conectado — {dims} dimensões', - 'settings.embeddings.testFailed': 'Falhou: {error}', - 'settings.embeddings.saving': 'Salvando…', - 'settings.embeddings.saved': 'Salvo.', - 'settings.embeddings.errorPrefix': 'Falhou', - 'settings.embeddings.wipeTitle': 'Redefinir vetores de memória?', - 'settings.embeddings.wipeBody': - 'Alterar o provedor de embeddings, modelo ou dimensões apagará todos os vetores de memória armazenados. A memória deve ser reconstruída antes que a recuperação funcione novamente. Isso não pode ser desfeito.', - 'settings.embeddings.cancel': 'Cancelar', - 'settings.embeddings.confirmWipe': 'Limpar e aplicar', - 'settings.embeddings.setupTitle': 'Configurar {provider}', - 'settings.embeddings.saveAndSwitch': 'Salvar e trocar', - 'settings.embeddings.optional': 'opcional', - 'settings.embeddings.vectorSearchDisabled': - 'Vector search is disabled. Memory recall will use keyword matching and recency only — no semantic ranking.', - 'settings.embeddings.clearKey': 'Limpar chave API', - 'mcp.alphaBadge': 'Alfa', - 'mcp.alphaBannerText': - 'MCP server support is in early alpha. The Smithery registry, install flow, and tool wiring may misbehave or change shape between releases.', - 'mcp.toolList.noTools': 'Nenhuma ferramenta disponível.', - 'mcp.setup.secretDialog.title': 'MCP Configuração - Insira o segredo', - 'mcp.setup.secretDialog.bodyPrefix': 'O agente de configuração MCP precisa de', - 'mcp.setup.secretDialog.bodySuffix': - '. Your value is sent directly to the core process and never enters the AI conversation.', - 'mcp.setup.secretDialog.inputLabel': 'Valor', - 'mcp.setup.secretDialog.inputPlaceholder': 'Cole aqui', - 'mcp.setup.secretDialog.show': 'Mostrar', - 'mcp.setup.secretDialog.hide': 'Ocultar', - 'mcp.setup.secretDialog.submit': 'Enviar', - 'mcp.setup.secretDialog.cancel': 'Cancelar', - 'mcp.setup.secretDialog.submitting': 'Enviando…', - 'mcp.setup.secretDialog.errorPrefix': 'Falha ao enviar:', - 'mcp.setup.secretDialog.privacyNote': - 'Stored encrypted in the local MCP secrets table. Never logged or sent to a model.', - 'devices.betaBadge': 'Beta', - 'devices.betaText': - 'This feature is currently in beta. Pair iOS phones with this OpenHuman to use them as a remote client.', - 'autonomy.title': 'Autonomia do agente', - 'autonomy.maxActionsLabel': 'Máximo de ações por hora', - 'autonomy.maxActionsHelp': - 'Maximum tool actions an agent can run per rolling hour. New value applies to your next chat. Cron jobs and channel listeners keep their current limit until you restart OpenHuman.', - 'autonomy.statusSaving': 'Salvando…', - 'autonomy.statusSaved': 'Salvo.', - 'autonomy.statusFailed': 'Falha', - 'autonomy.unlimitedNote': 'Ilimitado — limitação de taxa desativada.', - 'autonomy.invalidIntegerMsg': - 'Must be a positive integer (use the Unlimited preset for no limit).', - 'autonomy.presetUnlimited': 'Ilimitado (padrão)', - 'triggers.toggleFailed': '{action} falhou para {trigger}: {message}', - 'skills.composio.noApiKeyTitle': 'Não Composio API Chave configurada', - 'skills.composio.noApiKeyDescription': - 'Local mode uses your own Composio API key. Open Settings → Advanced → Composio to add one before connecting integrations here.', - 'skills.composio.noApiKeyCta': 'Abrir em Configurações', - 'rewards.localUnavailable': - 'Local login does not earn rewards, coupons, or referral credit. To earn rewards, log out and continue by signing in with an OpenHuman account.', - 'rewards.localUnavailableCta': 'Abrir configurações de conta', - 'channels.localManagedUnavailable': 'Managed channels are not available for local users.', - 'settings.search.localManagedUnavailable': - 'OpenHuman Managed search is not available for local users. Add your own Parallel, Brave, or Querit API key to enable web search.', - 'devices.comingSoonDescription': - 'Device pairing is coming soon. This page will be the home for pairing iPhones and managing connected devices.', - 'common.breadcrumb': 'Trilha de navegação', - 'settings.betaBuild': 'Build beta - v{version}', - 'migration.vendor.openclaw': 'OpenClaw', - 'migration.vendor.hermes': 'Hermes Agent', - 'onboarding.apiKeys.openaiOauthHint': - 'Use ChatGPT Plus/Pro (assinatura) ou uma chave de API da OpenAI — não são necessários os dois.', - 'onboarding.apiKeys.openaiOauthOpening': 'Abrindo login…', - 'onboarding.apiKeys.finishSignIn': 'Concluir login do ChatGPT', - 'onboarding.apiKeys.orApiKey': 'ou chave de API', - 'calls.title': 'Chamadas', - 'calls.comingSoonBody': 'As chamadas com IA chegarão em breve. Fique ligado.', - 'rewards.referralSection.retry': 'Tentar novamente', - 'devOptions.sentryDisabled': '(sem ID — o Sentry está desativado nesta build)', - 'home.usageExhaustedTitle': 'Você esgotou seu uso', - 'home.usageExhaustedBody': - 'Seu uso incluído acabou por enquanto. Inicie uma assinatura para desbloquear mais capacidade contínua.', - 'home.usageExhaustedCta': 'Assinar', - 'home.routinesCard': 'Your Routines', - 'home.routinesActive': '{count} active', - 'routines.title': 'Your Routines', - 'routines.subtitle': 'Things your assistant does automatically', - 'routines.loading': 'Loading routines…', - 'routines.empty': 'No routines yet', - 'routines.emptyHint': - 'Your assistant can run tasks on a schedule — like morning briefings or daily summaries.', - 'routines.refresh': 'Refresh', - 'routines.nextRun': 'Next run', - 'routines.lastRunSuccess': 'Last run succeeded', - 'routines.lastRunFailed': 'Last run failed', - 'routines.notRunYet': 'Not run yet', - 'routines.runNow': 'Run Now', - 'routines.running': 'Running…', - 'routines.viewHistory': 'View history', - 'routines.loadingHistory': 'Loading…', - 'routines.noHistory': 'No run history yet.', - 'routines.statusSuccess': 'Success', - 'routines.statusError': 'Error', - 'routines.showOutput': 'Show output', - 'routines.hideOutput': 'Hide output', - 'routines.toggleEnabled': 'Enable or disable this routine', - 'routines.typeAgent': 'Agent', - 'routines.typeCommand': 'Command', - 'nav.routines': 'Routines', - 'common.name': 'Nome', - 'settings.ai.disconnectProvider': 'Desconecte {label}', - 'settings.ai.connectProviderLabel': 'Conecte {label}', - 'settings.ai.defaultLocalEndpoint': 'http://localhost:11434/v1', - 'settings.ai.endpointUrlLabel': 'Endpoint URL', - 'settings.ai.localRuntimeHelper': - 'Where {label} is reachable. Default is localhost; point this at a remote host (for example, http://10.0.0.4:11434/v1) to use a shared instance.', - 'settings.ai.endpointUrlRequired': 'Endpoint URL é necessário.', - 'settings.ai.endpointProtocolRequired': 'Endpoint deve começar com http:// ou https://.', - 'settings.ai.connectProviderDialog': 'Conectar {label}', - 'settings.ai.or': 'Ou', - 'settings.ai.openRouterOauthDescription': - 'Sign in with OpenRouter and import a user-controlled API key using PKCE.', - 'settings.ai.connecting': 'Conectando...', - 'settings.ai.backgroundLoops': 'Loops de segundo plano.', - 'settings.ai.backgroundLoopsDesc': - 'See what runs without a chat message, pause heartbeat work, and inspect recent credit ledger rows.', - 'settings.ai.heartbeatControls': 'Controles de pulsação', - 'settings.ai.heartbeatControlsDesc': - 'Defaults off. Enabling starts the loop; disabling aborts the running task.', - 'settings.ai.heartbeatLoop': 'Loop de pulsação', - 'settings.ai.heartbeatLoopDesc': - 'Master scheduler for planner + optional subconscious inference.', - 'settings.ai.subconsciousInference': 'Inferência subconsciente', - 'settings.ai.subconsciousInferenceDesc': - 'Runs model-backed task/reflection evaluation on heartbeat ticks.', - 'settings.ai.calendarMeetingChecks': 'Verificações de reuniões do calendário', - 'settings.ai.calendarMeetingChecksDesc': - 'Calls calendar event list for active Google Calendar connections.', - 'settings.ai.calendarCap': 'Limite do calendário', - 'settings.ai.connectionsPerTick': '{count} conn/tick', - 'settings.ai.meetingLookahead': 'Antecipação da reunião', - 'settings.ai.minutesShort': '{count} min', - 'settings.ai.reminderLookahead': 'Antecipação do lembrete', - 'settings.ai.cronReminderChecks': 'Verificações de lembretes do Cron', - 'settings.ai.cronReminderChecksDesc': 'Scans enabled cron jobs for reminder-like upcoming items.', - 'settings.ai.relevantNotificationChecks': 'Verificações de notificações relevantes', - 'settings.ai.relevantNotificationChecksDesc': - 'Promotes urgent local notifications into proactive alerts.', - 'settings.ai.externalDelivery': 'Entrega externa', - 'settings.ai.externalDeliveryDesc': - 'Lets heartbeat alerts send proactive messages to external channels.', - 'settings.ai.interval': 'Intervalo', - 'settings.ai.running': 'Em execução...', - 'settings.ai.plannerTickNow': 'Marcação do planejador agora', - 'settings.ai.loadingHeartbeatControls': 'Carregando controles de pulsação...', - 'settings.ai.heartbeatControlsUnavailable': 'Controles de pulsação indisponíveis.', - 'settings.ai.loopMap': 'Mapa de loop', - 'settings.ai.on': 'ativado', - 'settings.ai.off': 'desativado', - 'settings.ai.recentUsageLedger': 'Razão de uso recente', - 'settings.ai.recentUsageLedgerDesc': - 'Backend rows expose action/time today; source tags need backend support.', - 'settings.ai.openhumanDefault': 'OpenHuman (padrão)', - 'settings.ai.localModelResolved': 'Ollama · {model}', - 'settings.ai.customRoutingForWorkload': 'Roteamento personalizado para {label}', - 'settings.ai.loadingModels': 'Carregando modelos...', - 'settings.ai.enterModelIdManually': 'ou insira o ID do modelo manualmente:', - 'settings.ai.modelIdPlaceholderForProvider': '{slug} ID do modelo', - 'settings.ai.modelIdPlaceholder': 'model-id', - 'settings.ai.selectModel': 'Selecione um modelo...', - 'settings.ai.temperatureOverride': 'Substituição de temperatura', - 'settings.ai.temperatureOverrideSlider': 'Substituição de temperatura (controle deslizante)', - 'settings.ai.temperatureOverrideValue': 'Substituição de temperatura (valor)', - 'settings.ai.temperatureOverrideDesc': - 'Lower = more deterministic. Leave unchecked to use the provider default.', - 'settings.ai.testFailed': 'Teste falhou', - 'settings.ai.testingModel': 'Modelo de teste...', - 'settings.ai.modelResponse': 'Resposta do modelo', - 'settings.ai.providerWithValue': 'Provedor: {value}', - 'settings.ai.noneDash': '—', - 'settings.ai.promptHelloWorld': 'Prompt: Olá, mundo', - 'settings.ai.startedAt': 'Iniciado: {value}', - 'settings.ai.waitingForModelResponse': 'Aguardando resposta do modelo selecionado...', - 'settings.ai.response': 'Resposta', - 'settings.ai.testing': 'Testando...', - 'settings.ai.test': 'Teste', - 'settings.ai.slugMissingError': 'Insira um nome de provedor para gerar um slug.', - 'settings.ai.slugInUseError': 'Esse nome de provedor já está em uso.', - 'settings.ai.slugReservedError': 'Escolha um nome de provedor diferente.', - 'settings.ai.providerNamePlaceholder': 'Meu provedor', - 'settings.ai.slugLabel': 'Slug:', - 'settings.ai.openAiUrlLabel': 'OpenAI URL', - 'settings.ai.openAiUrlPlaceholder': 'https://api.openai.com/v1', - 'settings.ai.keepExistingKeyPlaceholder': 'Deixe em branco para manter a chave existente', - 'settings.ai.reindexingMemory': 'Reindexando a memória', - 'settings.ai.reindexingMemoryMessage': - 'Embeddings are being reprocessed. {pending} memory item(s) are being re-embedded under the current model — semantic recall is reduced until this finishes. Keyword search keeps working, and re-embedding continues in the background if you close this.', - 'settings.ai.signInWithOpenRouter': 'Faça login com OpenRouter', - 'settings.ai.weekBudget': 'Orçamento semanal', - 'settings.ai.cycleRemaining': 'Ciclo restante', - 'settings.ai.cycleTotalSpend': 'Gasto total do ciclo', - 'settings.ai.avgSpendRow': 'Linha de gasto médio', - 'settings.ai.backgroundApiReads': 'Bg API lê', - 'settings.ai.backgroundWakeups': 'Ativações de Bg', - 'settings.ai.budgetMath': 'Matemática do orçamento', - 'settings.ai.rowsLeft': 'Linhas restantes', - 'settings.ai.rowsPerFullWeekBudget': 'Linhas por orçamento de semana inteira', - 'settings.ai.sampleBurnRate': 'Taxa de queima de amostra', - 'settings.ai.projectedEmpty': 'Vazio projetado', - 'settings.ai.apiReadsPerDollarRemaining': 'API leituras por $ restantes', - 'settings.ai.loopCallBudget': 'Orçamento de chamada de loop', - 'settings.ai.heartbeatTicks': 'Pulsações', - 'settings.ai.calendarPlannerCalls': 'Chamadas do planejador de calendário', - 'settings.ai.calendarFanoutCap': 'Limite de fanout do calendário', - 'settings.ai.subconsciousModelCalls': 'Chamadas de modelo subconsciente', - 'settings.ai.composioSyncScans': 'Composio varreduras de sincronização', - 'settings.ai.totalBackgroundApiReadBudget': 'Total bg API orçamento de leitura', - 'settings.ai.memoryWorkerPolls': 'Pesquisas de trabalho de memória', - 'settings.ai.defaultProviderName': 'OpenHuman', - 'settings.ai.routing.managed': 'Gerenciadas', - 'settings.ai.routing.managedDesc': - 'OpenHuman will run all inference in the cloud, choose the best model for the task, optimize for cost, and keep the safest routing defaults.', - 'settings.ai.routing.managedMsg': - 'OpenHuman will handle all inference for every workload and automatically choose the best route for cost, quality, and security.', - 'settings.ai.routing.useYourOwn': 'Use seus próprios modelos', - 'settings.ai.routing.useYourOwnDesc': - 'Choose one provider + model and route every workload through it. This is simple, but it can be inefficient because lightweight and heavyweight inference all share the same route.', - 'settings.ai.routing.advanced': 'Avançado', - 'settings.ai.routing.advancedDesc': - 'Pick different models for different tasks. This is the best option for tight cost optimization and the most control.', - 'settings.ai.routing.customDesc': - 'Fine-grained routing gives you the best cost optimization and the most control. Use the rows below to decide which workloads stay Managed, which use your shared default, and which pin to a specific model.', - 'settings.ai.routing.chatAndConversations': 'Bate-papo e conversas', - 'settings.ai.routing.chatDesc': - 'Models used during direct user interaction, replies, reasoning, agent loops, and coding help.', - 'settings.ai.routing.backgroundTasks': 'Tarefas de segundo plano', - 'settings.ai.routing.bgTasksDesc': - 'Models used outside the main conversation flow for summarization, heartbeat, learning, and subconscious evaluation.', - 'settings.ai.routing.addCustomProvider': 'Adicionar provedor personalizado', - 'settings.ai.globalModel.title': 'Escolha um modelo para tudo', - 'settings.ai.globalModel.desc': - 'This routes all inference through one model. It is simpler, but it can be inefficient for cost and quality because lightweight and heavy tasks will all use the same route.', - 'settings.ai.globalModel.noProviders': - 'Add or connect a provider first. Then you can route every workload through one model here.', - 'settings.ai.globalModel.provider': 'Provedor', - 'settings.ai.globalModel.model': 'Modelo', - 'settings.ai.globalModel.loadingModels': 'Carregando modelos…', - 'settings.ai.globalModel.enterModelId': 'Insira o ID do modelo', - 'settings.ai.globalModel.appliesToAll': - 'Applies the same provider + model to chat, reasoning, coding, memory, heartbeat, learning, and subconscious. Embeddings are configured separately. Changes save when you click save.', - 'settings.ai.globalModel.saving': 'Salvando…', - 'settings.ai.globalModel.saved': 'Salvo', - 'settings.ai.workload.noModel': 'Nenhum modelo selecionado', - 'settings.ai.workload.changeModel': 'Alterar modelo', - 'settings.ai.workload.chooseModel': 'Escolher modelo', - 'settings.ai.provider.ollama': 'Ollama', - 'kbd.ariaLabel': 'Atalho de teclado: {shortcut}', - 'chat.modelPlaceholder': 'gpt-4o', - 'iosPair.title': 'Emparelhe com seu desktop', - 'iosPair.instructions': - 'Open OpenHuman on your desktop, go to Settings > Devices, and tap "Pair phone" to show the QR code.', - 'iosPair.scanQrCode': 'Digitalizar QR code', - 'iosPair.scannerOpening': 'Scanner abrindo...', - 'iosPair.connecting': 'Conectando à área de trabalho...', - 'iosPair.connectedLoading': 'Conectado! Carregando...', - 'iosPair.expired': 'QR code expirou. Peça à área de trabalho para regenerar o código.', - 'iosPair.desktopLabel': 'Desktop', - 'iosPair.retryScan': 'Repetir verificação', - 'iosPair.step.openDesktop': 'Abra OpenHuman na área de trabalho', - 'iosPair.step.openSettings': 'Vá para Configurações > Dispositivos', - 'iosPair.step.showQr': 'Toque em "Parear telefone" para mostrar QR', - 'iosPair.error.camera': 'Camera scan failed. Check camera permissions and try again.', - 'iosPair.error.invalidQr': - 'Invalid QR code. Make sure you are scanning an OpenHuman pairing code.', - 'iosPair.error.unreachableDesktop': - 'Could not reach the desktop. Make sure both devices are online and try again.', - 'iosPair.error.connectionFailed': - 'Connection failed. Make sure the desktop app is running and try again.', - 'iosMascot.defaultPairedLabel': 'Desktop', - 'iosMascot.connectedTo': 'Conectado a', - 'iosMascot.disconnect': 'Desconectar', - 'iosMascot.pushToTalk': 'Push to talk', - 'iosMascot.thinking': 'Pensando...', - 'iosMascot.typeMessage': 'Digite um mensagem...', - 'iosMascot.sendMessage': 'Enviar mensagem', - 'iosMascot.error.generic': 'Algo deu errado. Por favor, tente novamente.', - 'iosMascot.error.sendFailed': 'Falha ao enviar. Verifique sua conexão.', - 'settings.companion.title': 'Desktop Companion', - 'settings.companion.session': 'Sessão', - 'settings.companion.activeLabel': 'Ativo', - 'settings.companion.inactiveStatus': 'Inativo', - 'settings.companion.stopping': 'Parando…', - 'settings.companion.stopSession': 'Interromper sessão', - 'settings.companion.starting': 'Iniciando…', - 'settings.companion.startSession': 'Iniciar sessão', - 'settings.companion.sessionId': 'ID da sessão', - 'settings.companion.turns': 'Turnos', - 'settings.companion.remaining': 'Restante', - 'settings.companion.configuration': 'Configuração', - 'settings.companion.hotkey': 'Tecla de atalho', - 'settings.companion.activationMode': 'Modo de ativação', - 'settings.companion.sessionTtl': 'Sessão TTL', - 'settings.companion.screenCapture': 'Captura de tela', - 'settings.companion.appContext': 'Contexto do aplicativo', - 'settings.composio.title': 'Composio', - 'settings.composio.apiKeyExamplePlaceholder': 'ck_live_xxxxxxxxxxxxxxx', - 'composio.integrationSlugsHelp': 'Slugs de integração separados por vírgula, por exemplo.', - 'composio.integrationSlugsExample': 'Gmail, folga', - 'composio.integrationSlugsCaseInsensitive': 'Não diferencia maiúsculas de minúsculas.', - 'composio.integrationSlugsPlaceholder': 'gmail, slack, ...', - 'team.members': 'Membros', - 'team.membersDesc': 'Gerenciar membros e funções da equipe', - 'team.invites': 'Convites', - 'team.invitesDesc': 'Gerar e gerenciar códigos de convite', - 'team.settings': 'Configurações da equipe', - 'team.settingsDesc': 'Editar nome e configurações da equipe', - 'team.editSettings': 'Editar configurações da equipe', - 'team.enterName': 'Insira o nome da equipe', - 'team.saving': 'Salvando...', - 'team.saveChanges': 'Salvar Alterações', - 'team.delete': 'Excluir equipe', - 'team.deleteDesc': 'Excluir permanentemente esta equipe', - 'team.deleting': 'Excluindo...', - 'team.failedToUpdate': 'Falha ao atualizar equipe', - 'team.failedToDelete': 'Falha ao excluir equipe', - 'team.manageTitle': 'Gerenciar {name}', - 'team.planCreated': 'Plano {plan} • Criado {date}', - 'team.confirmDelete': 'Tem certeza de que deseja excluir {name}?', - 'team.deleteWarning': 'This action cannot be undone. All team data will be permanently removed.', - 'welcome.clearingAppData': 'Limpando dados do aplicativo...', - 'welcome.clearAppDataAndRestart': 'Limpar dados do aplicativo e reinicie', - 'welcome.clearAppDataWarning': - 'This wipes locally stored secrets and accounts on this device. Your cloud account is unaffected - you can sign in again right after.', - 'welcome.resetErrorFallback': - 'Could not clear app data. Please quit and reopen OpenHuman, then try again.', - 'welcome.signingIn': 'Fazendo login...', - 'welcome.termsIntro': 'Ao continuar, você concorda com os', - 'welcome.termsOfUse': 'Termos', - 'welcome.termsJoiner': 'e', - 'welcome.privacyPolicy': 'Política de Privacidade', - 'welcome.termsOutro': '.', - 'chat.addReaction': 'Adicionar reação', - 'chat.agentProfile.create': 'Criar perfil de agente', - 'chat.agentProfile.createFailed': 'Não foi possível criar perfil de agente.', - 'chat.agentProfile.customDescription': 'Perfil de agente personalizado', - 'chat.agentProfile.defaultAgentLabel': 'Orquestrador', - 'chat.agentProfile.exists': 'O perfil de agente "{name}" já existe.', - 'chat.agentProfile.label': 'Perfil do agente', - 'chat.agentProfile.namePlaceholder': 'Nome do perfil', - 'chat.agentProfile.promptStylePlaceholder': 'Estilo de prompt', - 'chat.agentProfile.allowedToolsPlaceholder': 'Ferramentas permitidas', - 'chat.backToThread': 'voltar para {title}', - 'chat.parentThread': 'thread pai', - 'chat.removeReaction': 'Remover {emoji}', - 'invites.generate': 'Gerar convite', - 'invites.generating': 'Gerando...', - 'invites.refreshing': 'Atualizando convites...', - 'invites.loading': 'Carregando convites...', - 'invites.copyCodeAria': 'Copiar código de convite', - 'invites.revokeAria': 'Revogar convite', - 'invites.usedUp': 'Esgotado', - 'invites.uses': 'Usa: {current}{max}', - 'invites.expiresOn': 'Expira em {date}', - 'invites.empty': 'Nenhum convite ainda', - 'invites.emptyHint': 'Gere um código de convite para compartilhar com outras pessoas', - 'invites.revokeTitle': 'Revogar código de convite', - 'invites.revokePromptPrefix': 'Tem certeza de que deseja revogar o código de convite', - 'invites.revokeWarning': - 'This invite code will no longer be valid and cannot be used to join the team.', - 'invites.revoking': 'Revogando...', - 'invites.revokeAction': 'Revogar convite', - 'invites.failedGenerate': 'Falha ao gerar convite', - 'invites.failedRevoke': 'Falha ao revogar convite', - 'team.refreshingMembers': 'Atualizando membros...', - 'team.loadingMembers': 'Carregando membros...', - 'team.memberCount': '{count} membro', - 'team.memberCountPlural': '{count} membros', - 'team.you': '(Você)', - 'team.removeAria': 'Remover {name}', - 'team.noMembers': 'Nenhum membro encontrado', - 'team.removeTitle': 'Remover membro da equipe', - 'team.removePromptPrefix': 'Tem certeza de que deseja remover', - 'team.removePromptSuffix': 'da equipe?', - 'team.removeWarning': 'Eles perderão o acesso à equipe e a todos os recursos da equipe.', - 'team.removing': 'Removendo...', - 'team.removeAction': 'Remover membro', - 'team.changeRoleTitle': 'Alterar função de membro', - 'team.changeRolePrompt': "Change {name}'s role from {oldRole} to {newRole}?", - 'team.changeRoleAdminGrant': - 'This will grant them full admin permissions including the ability to manage team members.', - 'team.changeRoleAdminRemove': - 'This will remove their admin permissions and they will no longer be able to manage the team.', - 'team.changing': 'Alterando...', - 'team.changeRoleAction': 'Alterar função', - 'team.failedChangeRole': 'Falha ao alterar função', - 'team.failedRemoveMember': 'Falha ao remover membro', - 'voice.failedToLoadSettings': 'Falha ao carregar configurações de voz', - 'voice.failedToSaveSettings': 'Falha ao salvar as configurações de voz', - 'voice.failedToStartServer': 'Falha ao iniciar o servidor de voz', - 'voice.failedToStopServer': 'Falha ao parar o servidor de voz', - 'voice.sttDisabledPrefix': - 'Voice dictation is disabled until the local STT model is downloaded. Use the', - 'voice.sttDisabledSuffix': 'acima para instalar o Whisper.', - 'voice.debug.failedToLoadVoiceDebugData': 'Falha ao carregar dados de depuração de voz', - 'voice.debug.settingsSaved': 'Configurações de depuração salvas.', - 'voice.debug.failedToSaveSettings': 'Falha ao salvar as configurações de voz', - 'voice.debug.runtimeStatus': 'Status do tempo de execução', - 'voice.debug.runtimeStatusDesc': - 'Live diagnostics for the voice server and speech-to-text engine.', - 'voice.debug.server': 'Servidor', - 'voice.debug.unavailable': 'Indisponível', - 'voice.debug.ready': 'Pronto', - 'voice.debug.notReady': 'Não pronto', - 'voice.debug.hotkey': 'Tecla de atalho', - 'voice.debug.notAvailable': 'n/a', - 'voice.debug.mode': 'Modo', - 'voice.debug.transcriptions': 'Transcrições', - 'voice.debug.serverError': 'Erro de servidor', - 'voice.debug.advancedSettings': 'Configurações avançadas', - 'voice.debug.advancedSettingsDesc': - 'Low-level tuning parameters for recording and silence detection.', - 'voice.debug.minimumRecordingSeconds': 'Segundos Mínimos de Gravação', - 'voice.debug.silenceThreshold': 'Limite de Silêncio (RMS)', - 'voice.debug.silenceThresholdDesc': - 'Recordings with energy below this are treated as silence and skipped. Lower = more sensitive.', - 'voice.providers.saved': 'Provedores de voz salvos.', - 'voice.providers.failedToSave': 'Falha ao salvar provedores de voz', - 'voice.providers.ellipsis': '…', - 'voice.providers.installing': 'Instalando', - 'voice.providers.installingBusy': 'Instalando…', - 'voice.providers.reinstallLocally': 'Reinstale localmente', - 'voice.providers.repair': 'Reparar', - 'voice.providers.retryLocally': 'Tente novamente localmente', - 'voice.providers.installLocally': 'Instale localmente', - 'voice.providers.whisperReady': 'O Whisper está pronto.', - 'voice.providers.whisperInstallStarted': 'Instalação do Whisper iniciada', - 'voice.providers.queued': 'na fila', - 'voice.providers.failedToInstallWhisper': 'Falha ao instalar o Whisper', - 'voice.providers.piperReady': 'Piper está pronto.', - 'voice.providers.piperInstallStarted': 'Instalação do Piper iniciada', - 'voice.providers.failedToInstallPiper': 'Falha ao instalar o Piper', - 'voice.providers.title': 'Provedores de voz', - 'voice.providers.desc': - 'Choose where transcription and synthesis run. Use the Install locally buttons to download the binaries and models into your workspace. Local providers can be saved before the install finishes — no manual WHISPER_BIN or PIPER_BIN setup required.', - 'voice.providers.sttProvider': 'Provedor de fala para texto', - 'voice.providers.sttProviderAria': 'Provedor STT', - 'voice.providers.cloudWhisperProxy': 'Nuvem (proxy Whisper)', - 'voice.providers.localWhisper': 'Whisper local', - 'voice.providers.installRequired': '(instalação necessária)', - 'voice.providers.whisperInstalledTitle': 'O Whisper está instalado. Clique para reinstalar.', - 'voice.providers.whisperDownloadTitle': - 'Download whisper.cpp and the GGML model into your workspace.', - 'voice.providers.installed': 'Instalado', - 'voice.providers.installFailed': 'Falha na instalação', - 'voice.providers.notInstalled': 'Não instalado', - 'voice.providers.whisperModel': 'Modelo Whisper', - 'voice.providers.whisperModelAria': 'Modelo Whisper', - 'voice.providers.whisperModelTiny': 'Minúsculo (39 MB, mais rápido)', - 'voice.providers.whisperModelBase': 'Base (74 MB)', - 'voice.providers.whisperModelSmall': 'Pequeno (244 MB)', - 'voice.providers.whisperModelMedium': 'Médio (769 MB, recomendado)', - 'voice.providers.whisperModelLargeTurbo': 'Grande v3 Turbo (1,5 GB, melhor precisão)', - 'voice.providers.ttsProvider': 'Provedor de texto para fala', - 'voice.providers.ttsProviderAria': 'Provedor TTS', - 'voice.providers.cloudElevenLabsProxy': 'Nuvem (proxy ElevenLabs)', - 'voice.providers.localPiper': 'Piper local', - 'voice.providers.piperInstalledTitle': 'O Piper está instalado. Clique para reinstalar.', - 'voice.providers.piperDownloadTitle': - 'Download Piper and the bundled en_US-lessac-medium voice into your workspace.', - 'voice.providers.piperVoice': 'Piper Voice', - 'voice.providers.piperVoiceAria': 'Piper voice', - 'voice.providers.customVoiceOption': 'Outro (digite abaixo)…', - 'voice.providers.customVoiceAria': 'Piper voice id (personalizado)', - 'voice.providers.customVoicePlaceholder': 'en_US-lessac-medium', - 'voice.providers.piperVoicesDesc': - 'Voices come from huggingface.co/rhasspy/piper-voices. Switching voices may require an Install/Reinstall click to download the new .onnx.', - 'voice.providers.mascotVoice': 'Voz do mascote', - 'voice.providers.mascotVoiceDescPrefix': - 'The ElevenLabs voice the mascot uses for spoken replies is configured under', - 'voice.providers.mascotSettings': 'Configurações do mascote', - 'voice.providers.mascotVoiceDescSuffix': '.', - 'voice.providers.hotkeyPlaceholder': 'Fn', - 'voice.providers.piperPreset.lessacMedium': 'US · Lessac (neutro, recomendado)', - 'voice.providers.piperPreset.lessacHigh': 'EUA · Lessac (qualidade superior, maior)', - 'voice.providers.piperPreset.ryanMedium': 'EUA · Ryan (masculino)', - 'voice.providers.piperPreset.amyMedium': 'EUA · Amy (feminino)', - 'voice.providers.piperPreset.librittsHigh': 'EUA · LibriTTS (multialto-falante)', - 'voice.providers.piperPreset.alanMedium': 'GB · Alan (masculino)', - 'voice.providers.piperPreset.jennyDiocoMedium': 'GB · Jenny Dioco (feminino)', - 'voice.providers.piperPreset.northernEnglishMaleMedium': 'GB · Inglês do Norte (masculino)', - 'voice.providers.chip.cloud': 'OpenHuman (Managed)', - 'voice.providers.chip.cloudAria': 'OpenHuman managed provider is always enabled', - 'voice.providers.chip.whisper': 'Whisper (Local)', - 'voice.providers.chip.enableWhisper': 'Enable local Whisper STT', - 'voice.providers.chip.disableWhisper': 'Disable local Whisper STT', - 'voice.providers.chip.piper': 'Piper (Local)', - 'voice.providers.chip.enablePiper': 'Enable local Piper TTS', - 'voice.providers.chip.disablePiper': 'Disable local Piper TTS', - 'voice.providers.chip.enableProvider': 'Enable', - 'voice.providers.chip.disableProvider': 'Disable', - 'voice.providers.chip.apiKeyLabel': 'API Key', - 'voice.providers.chip.apiKeyPlaceholder': 'sk-…', - 'voice.providers.chip.comingSoon': 'coming soon', - 'voice.modal.title': 'Configure', - 'voice.modal.desc': - 'Enter your API key to enable this provider. You can test the connection before saving.', - 'voice.modal.testKey': 'Test Key', - 'voice.modal.testing': 'Testing…', - 'voice.modal.saveAndEnable': 'Save & Enable', - 'voice.modal.enable': 'Enable', - 'voice.modal.whisperDesc': - 'Choose a model size and install the Whisper binary and GGML model into your workspace. Larger models are more accurate but slower.', - 'voice.modal.piperDesc': - 'Choose a voice and install the Piper binary and ONNX model into your workspace. Piper runs fully offline with low latency.', - 'voice.routing.title': 'Voice Routing', - 'voice.routing.desc': 'Choose which enabled providers handle speech-to-text and text-to-speech.', - 'voice.routing.save': 'Save', - 'voice.routing.testStt': 'Test STT', - 'voice.routing.testTts': 'Test TTS', - 'voice.routing.elevenlabsVoice': 'ElevenLabs Voice', - 'voice.routing.elevenlabsVoiceAria': 'ElevenLabs voice selection', - 'voice.routing.elevenlabsVoiceIdAria': 'ElevenLabs voice ID (custom)', - 'voice.routing.elevenlabsVoiceDesc': - 'Pick a curated voice or paste a custom voice ID from your ElevenLabs dashboard.', - 'voice.externalProviders.title': 'External Voice Providers', - 'voice.externalProviders.desc': - 'Connect third-party STT/TTS APIs like Deepgram, ElevenLabs, or OpenAI directly.', - 'voice.externalProviders.keySet': 'Key set', - 'voice.externalProviders.noKey': 'No API key', - 'voice.externalProviders.test': 'Test', - 'voice.externalProviders.testing': 'Testing…', - 'voice.externalProviders.remove': 'Remove', - 'voice.externalProviders.provider': 'Provider', - 'voice.externalProviders.selectProvider': 'Select a provider…', - 'voice.externalProviders.apiKey': 'API Key', - 'voice.externalProviders.apiKeyPlaceholder': 'sk-…', - 'voice.externalProviders.add': 'Add', - 'screenAwareness.debug.debugAndDiagnostics': 'Depuração e diagnóstico', - 'screenAwareness.debug.collapse': 'Collapse', - 'screenAwareness.debug.expand': 'Expandir', - 'screenAwareness.debug.failedToSave': 'Falha ao salvar inteligência de tela', - 'screenAwareness.debug.policyTitle': 'Política de inteligência de tela', - 'screenAwareness.debug.baselineFps': 'FPS de linha de base', - 'screenAwareness.debug.useVisionModel': 'Usar modelo de visão', - 'screenAwareness.debug.useVisionModelDesc': - 'Send screenshots to a vision LLM for richer context. When off, only OCR text is used with a text LLM — faster and no vision model required.', - 'screenAwareness.debug.keepScreenshots': 'Manter capturas de tela', - 'screenAwareness.debug.keepScreenshotsDesc': - 'Save captured screenshots to the workspace instead of deleting after processing', - 'screenAwareness.debug.allowlist': 'Lista de permissões (uma regra por linha)', - 'screenAwareness.debug.denylist': 'Lista de bloqueios (uma regra por linha)', - 'screenAwareness.debug.saveSettings': 'Salvar configurações de inteligência de tela', - 'screenAwareness.debug.sessionStats': 'Estatísticas de sessão', - 'screenAwareness.debug.framesEphemeral': 'Quadros (efêmeros)', - 'screenAwareness.debug.panicStop': 'Parada de pânico', - 'screenAwareness.debug.defaultPanicHotkey': 'Cmd+Shift+.', - 'screenAwareness.debug.vision': 'Visão', - 'screenAwareness.debug.idle': 'inativa', - 'screenAwareness.debug.visionQueue': 'Fila de visão', - 'screenAwareness.debug.lastVision': 'Última visão', - 'screenAwareness.debug.notAvailable': 'n/a', - 'screenAwareness.debug.visionSummaries': 'Resumos de visão', - 'screenAwareness.debug.refreshing': 'Atualizando…', - 'screenAwareness.debug.noSummaries': 'Ainda não há resumos.', - 'screenAwareness.debug.unknownApp': 'Aplicativo desconhecido', - 'screenAwareness.debug.macosOnly': 'Screen Intelligence V1 is currently supported on macOS only.', - 'memory.debugTitle': 'Depuração de memória', - 'memory.documents': 'Documentos', - 'memory.filterByNamespace': 'Filtrar por namespace...', - 'memory.refresh': 'Atualizar', - 'memory.noDocumentsFound': 'Nenhum documento encontrado.', - 'memory.delete': 'Excluir', - 'memory.rawResponse': 'Resposta bruta', - 'memory.namespaces': 'Namespaces', - 'memory.noNamespacesFound': 'Nenhum namespace encontrado.', - 'memory.queryRecall': 'Consultar e recuperar', - 'memory.namespace': 'Namespace', - 'memory.queryText': 'Texto da consulta...', - 'memory.defaultMaxChunks': '10', - 'memory.maxChunks': 'máximo de pedaços', - 'memory.query': 'Consulta', - 'memory.recall': 'Recuperar', - 'memory.queryLabel': 'Consulta', - 'memory.recallLabel': 'Recuperar', - 'memory.queryResult': 'Resultado da consulta', - 'memory.recallResult': 'Resultado de recuperação', - 'memory.clearNamespace': 'Limpar Namespace', - 'memory.clearNamespaceDescription': 'Permanently delete all documents within a namespace.', - 'memory.selectNamespace': 'Selecione o namespace...', - 'memory.exampleNamespace': 'por exemplo. habilidade:gmail:user@example.com', - 'memory.clear': 'Limpar', - 'memory.deleteConfirm': 'Excluir documento "{documentId}" no namespace "{namespace}"?', - 'memory.clearNamespaceConfirm': - 'This will permanently delete ALL documents in namespace "{namespace}". Continue?', - 'memory.clearNamespaceSuccess': 'Namespace "{namespace}" limpo.', - 'memory.clearNamespaceEmpty': 'Nada a limpar em "{namespace}".', - 'webhooks.debugTitle': 'Depuração de webhooks', - 'webhooks.failedToLoadDebugData': 'Falha ao carregar dados de depuração de webhook', - 'webhooks.clearLogsConfirm': 'Limpar todos os logs de depuração de webhook capturados?', - 'webhooks.failedToClearLogs': 'Falha ao limpar logs de webhook', - 'webhooks.loading': 'Carregando...', - 'webhooks.refresh': 'Atualizar', - 'webhooks.clearing': 'Limpando...', - 'webhooks.clearLogs': 'Limpar logs', - 'webhooks.registered': 'registrou', - 'webhooks.captured': 'capturado', - 'webhooks.live': 'ao vivo', - 'webhooks.disconnected': 'desconectado', - 'webhooks.lastEvent': 'Último evento', - 'webhooks.at': 'em', - 'webhooks.registeredWebhooks': 'Webhooks registrados', - 'webhooks.noActiveRegistrations': 'Nenhum registro ativo.', - 'webhooks.resolvingBackendUrl': 'Resolvendo back-end URL…', - 'webhooks.capturedRequests': 'Solicitações capturadas', - 'webhooks.noRequestsCaptured': 'Nenhuma solicitação de webhook capturada ainda.', - 'webhooks.unrouted': 'não roteado', - 'webhooks.pending': 'pendente', - 'webhooks.requestHeaders': 'Cabeçalhos de solicitação', - 'webhooks.queryParams': 'Parâmetros de consulta', - 'webhooks.requestBody': 'Corpo da solicitação', - 'webhooks.responseHeaders': 'Cabeçalhos de resposta', - 'webhooks.responseBody': 'Corpo de resposta', - 'webhooks.rawPayload': 'Carga útil bruta', - 'webhooks.empty': '[vazio]', - 'providerSetup.error.defaultDetails': 'Falha na configuração do provedor.', - 'providerSetup.error.providerFallback': 'O provedor', - 'providerSetup.error.credentialsRejected': - '{provider} rejected the credentials. Check the API key and try again.', - 'providerSetup.error.endpointNotRecognized': - '{provider} did not recognize the endpoint. Check the base URL and try again.', - 'providerSetup.error.providerUnavailable': - '{provider} is unavailable right now. Try again or check the provider status.', - 'providerSetup.error.unreachable': - 'Could not reach {provider}. Check the endpoint URL and network connection, then try again.', - 'providerSetup.error.couldNotReachWithMessage': 'Não foi possível alcançar {provider}: {message}', - 'providerSetup.error.technicalDetails': 'Detalhes técnicos', - 'devices.title': 'Dispositivos', - 'devices.pairIphone': 'Emparelhar iPhone', - 'devices.noPaired': 'Nenhum dispositivo emparelhado', - 'devices.emptyState': 'Scan a QR code on your iPhone to connect it to this OpenHuman session.', - 'devices.devicePairedTitle': 'Dispositivo emparelhado', - 'devices.devicePairedMessage': 'iPhone conectado com sucesso.', - 'devices.deviceRevokedTitle': 'Dispositivo revogado', - 'devices.deviceRevokedMessage': '{label} removido.', - 'devices.revokeFailedTitle': 'Falha na revogação', - 'devices.online': 'On-line', - 'devices.offline': 'Off-line', - 'devices.lastSeenNever': 'Nunca', - 'devices.lastSeenNow': 'Agora mesmo', - 'devices.lastSeenMinutes': '{count}m atrás', - 'devices.lastSeenHours': '{count}h atrás', - 'devices.lastSeenDays': '{count}d atrás', - 'devices.revoke': 'Revogar', - 'devices.revokeAria': 'Revogar {label}', - 'devices.confirmRevokeTitle': 'Revogar dispositivo?', - 'devices.confirmRevokeBody': '{label} will no longer be able to connect. This cannot be undone.', - 'devices.loadFailed': 'Falha ao carregar dispositivos: {message}', - 'devices.pairModal.title': 'Emparelhar iPhone', - 'devices.pairModal.loading': 'Gerando código de emparelhamento…', - 'devices.pairModal.instructions': 'Open the OpenHuman app on your iPhone and scan this code.', - 'devices.pairModal.expiresIn': 'O código expira em ~{count} minuto', - 'devices.pairModal.expiresInPlural': 'O código expira em ~{count} minutos', - 'devices.pairModal.showDetails': 'Mostrar detalhes', - 'devices.pairModal.hideDetails': 'Ocultar detalhes', - 'devices.pairModal.channelId': 'ID do canal', - 'devices.pairModal.pairingUrl': 'Emparelhamento URL', - 'devices.pairModal.expiredTitle': 'QR code expirou', - 'devices.pairModal.expiredBody': 'Gere um novo código para continuar o emparelhamento.', - 'devices.pairModal.generateNewCode': 'Gerar novo código', - 'devices.pairModal.successTitle': 'Emparelhado com iPhone', - 'devices.pairModal.autoClose': 'Fechando automaticamente…', - 'devices.pairModal.errorPrefix': 'Falha ao criar emparelhamento: {message}', - 'devices.pairModal.errorTitle': 'Algo deu errado', - 'devices.pairModal.copyUrl': 'Copiar', - 'mcp.catalog.searchAria': 'Pesquise no catálogo da Smithery', - 'mcp.catalog.searchPlaceholder': 'Pesquisar catálogo da Smithery...', - 'mcp.catalog.loadFailed': 'Falha ao carregar o catálogo', - 'mcp.catalog.noResults': 'Nenhum servidor encontrado.', - 'mcp.catalog.noResultsFor': 'Nenhum servidor encontrado para "{query}".', - 'mcp.catalog.loadMore': 'Carregar mais', - 'mcp.configAssistant.title': 'Assistente de configuração', - 'mcp.configAssistant.empty': 'Ask about configuration, required env vars, or setup steps.', - 'mcp.configAssistant.suggestedValues': 'Valores sugeridos:', - 'mcp.configAssistant.valueHidden': '(valor oculto)', - 'mcp.configAssistant.applySuggested': 'Aplicar valores sugeridos', - 'mcp.configAssistant.reinstallHint': 'Reinstale com esses valores para aplicá-los.', - 'mcp.configAssistant.thinking': 'Pensando...', - 'mcp.configAssistant.inputPlaceholder': 'Ask a question (Enter to send, Shift+Enter for newline)', - 'mcp.configAssistant.send': 'Enviar', - 'mcp.configAssistant.failedResponse': 'Falha ao obter resposta', - 'mcp.toolList.availableSingular': '{count} ferramenta disponível', - 'mcp.toolList.availablePlural': '{count} ferramentas disponíveis', - 'mcp.toolList.tryTool': 'Try', - 'mcp.toolList.tryToolAria': 'Open execution playground for {name}', - 'mcp.playground.title': 'Run {name}', - 'mcp.playground.close': 'Close playground', - 'mcp.playground.inputSchema': 'Input schema', - 'mcp.playground.argsLabel': 'Arguments (JSON)', - 'mcp.playground.argsHelp': 'Type JSON matching the input schema. Empty input is treated as {}.', - 'mcp.playground.runShortcut': '⌘/Ctrl + Enter to run', - 'mcp.playground.format': 'Format', - 'mcp.playground.invalidJson': 'Invalid JSON', - 'mcp.playground.run': 'Run tool', - 'mcp.playground.running': 'Running…', - 'mcp.playground.result': 'Result', - 'mcp.playground.resultError': 'Tool returned an error', - 'mcp.playground.copyResult': 'Copy result', - 'mcp.playground.copied': 'Copied', - 'mcp.playground.history': 'History', - 'mcp.playground.historyEmpty': 'No invocations yet in this session.', - 'mcp.playground.historyLoad': 'Load', - 'mcp.playground.unexpectedError': 'Unexpected error invoking tool.', - 'mcp.catalog.deployed': 'Implantado', - 'mcp.catalog.installCount': '{count} instala', - 'app.update.dismissNotification': 'Ignorar notificação de atualização', - 'bootCheck.rpcAuthSuffix': 'em cada RPC.', - 'mcp.installed.title': 'Instalado', - 'mcp.installed.browseCatalog': 'Navegar no catálogo', - 'mcp.installed.empty': 'Nenhum servidor MCP instalado ainda.', - 'mcp.installed.toolSingular': 'Ferramenta {count}', - 'mcp.installed.toolPlural': 'Ferramentas {count}', - 'mcp.health.title': 'Health', - 'mcp.health.summaryAria': 'MCP connection health summary', - 'mcp.health.connectedCount': '{count} connected', - 'mcp.health.connectingCount': '{count} connecting', - 'mcp.health.errorCount': '{count} error', - 'mcp.health.disconnectedCount': '{count} idle', - 'mcp.health.retryAll': 'Retry all ({count})', - 'mcp.health.retryAllAria': 'Retry all {count} errored MCP servers', - 'mcp.health.disconnectAll': 'Disconnect all ({count})', - 'mcp.health.disconnectAllAria': 'Disconnect all {count} connected MCP servers', - 'mcp.health.disconnectConfirm.title': 'Disconnect all MCP servers?', - 'mcp.health.disconnectConfirm.body': - 'This will disconnect {count} currently-connected MCP servers. Installed configurations and secrets are kept; you can reconnect any server later.', - 'mcp.health.disconnectConfirm.cancel': 'Cancel', - 'mcp.health.disconnectConfirm.confirm': 'Disconnect all', - 'mcp.health.opErrorGeneric': 'Bulk operation failed. See logs.', - 'mcp.health.bulkPartialFailure': '{failed} of {total} servers failed. See logs.', - 'mcp.installed.search.landmarkAria': 'Search installed MCP servers', - 'mcp.installed.search.inputAria': 'Filter installed MCP servers by name', - 'mcp.installed.search.placeholder': 'Filter servers…', - 'mcp.installed.search.clearAria': 'Clear filter', - 'mcp.installed.search.countMatches': '{shown} of {total} servers', - 'mcp.installed.search.noMatches': 'No servers match "{query}".', - 'mcp.inventory.openButton': 'Inventory', - 'mcp.inventory.openAria': 'Open the sharable MCP inventory panel', - 'mcp.inventory.title': 'Sharable MCP Inventory', - 'mcp.inventory.subtitle': - 'Export your installed MCP servers as a portable, secret-free manifest, or import one from a teammate. Secret env values are never included or imported.', - 'mcp.inventory.close': 'Close inventory panel', - 'mcp.inventory.tablistAria': 'Inventory sections', - 'mcp.inventory.tab.export': 'Export', - 'mcp.inventory.tab.import': 'Import', - 'mcp.inventory.export.empty': - 'No MCP servers installed yet — nothing to export. Install one from the catalog first.', - 'mcp.inventory.export.privacyTitle': 'What is in this manifest', - 'mcp.inventory.export.privacyBody': - 'Server names, qualified names, env-variable KEY NAMES, and non-secret config only. Secret values, your machine identifiers, and per-install timestamps are intentionally stripped.', - 'mcp.inventory.export.serverCount': '{count} servers in this manifest', - 'mcp.inventory.export.copy': 'Copy', - 'mcp.inventory.export.copied': 'Copied', - 'mcp.inventory.export.copyAria': 'Copy the manifest JSON to the clipboard', - 'mcp.inventory.export.download': 'Download', - 'mcp.inventory.export.downloadAria': 'Download the manifest as a JSON file', - 'mcp.inventory.import.trustTitle': 'Treat imported manifests as untrusted code', - 'mcp.inventory.import.trustBody': - 'An MCP server is a tool you grant your agent. Only import manifests from sources you trust. Each install requires your explicit click; nothing is auto-installed.', - 'mcp.inventory.import.pasteLabel': 'Paste manifest JSON', - 'mcp.inventory.import.pastePlaceholder': 'Paste a manifest here, or upload a .json file below.', - 'mcp.inventory.import.preview': 'Preview', - 'mcp.inventory.import.clear': 'Clear', - 'mcp.inventory.import.uploadFile': 'or upload a .json file', - 'mcp.inventory.import.uploadFileAria': 'Upload a manifest .json file', - 'mcp.inventory.import.fileTooLarge': 'File is too large (over 1 MB). Refusing to load.', - 'mcp.inventory.import.fileReadFailed': 'Could not read file.', - 'mcp.inventory.import.parseErrorPrefix': 'Could not parse manifest:', - 'mcp.inventory.import.previewHeading': 'Preview', - 'mcp.inventory.import.previewCounts': - '{total} servers — {newly} new, {already} already installed', - 'mcp.inventory.import.previewEmpty': 'Manifest contains no servers.', - 'mcp.inventory.import.exportedFrom': 'Exported from {exporter}', - 'mcp.inventory.import.exportedAt': 'at {when}', - 'mcp.inventory.import.statusNew': 'New', - 'mcp.inventory.import.statusAlreadyInstalled': 'Already installed', - 'mcp.inventory.import.envKeysLabel': 'Env keys', - 'mcp.inventory.import.install': 'Install', - 'mcp.inventory.import.installAria': 'Install {name} from this manifest', - 'mcp.inventory.import.skipped': 'skipped', - 'mcp.inventory.parseError.empty': 'Manifest is empty.', - 'mcp.inventory.parseError.invalidJson': 'Invalid JSON.', - 'mcp.inventory.parseError.rootNotObject': 'Manifest must be a JSON object at the root.', - 'mcp.inventory.parseError.unsupportedSchema': - 'Unsupported manifest schema — this file was not produced by a compatible exporter.', - 'mcp.inventory.parseError.missingExportedAt': 'Missing or invalid `exported_at` field.', - 'mcp.inventory.parseError.missingExportedBy': 'Missing or invalid `exported_by` field.', - 'mcp.inventory.parseError.invalidServers': 'Missing or invalid `servers` array.', - 'mcp.inventory.parseError.serverNotObject': 'A server entry is not an object.', - 'mcp.inventory.parseError.serverMissingQualifiedName': - 'A server entry is missing its qualified_name.', - 'mcp.inventory.parseError.serverMissingDisplayName': - 'A server entry is missing its display_name.', - 'mcp.inventory.parseError.serverEnvKeysNotArray': - 'A server entry has an env_keys field that is not an array of strings.', - 'mcp.inventory.parseError.serverContainsEnv': - 'A server entry contains an `env` value map. Refusing to import — manifests must only carry env_keys (names), never secret values.', - 'mcp.inventory.parseError.duplicateQualifiedName': - 'Duplicate qualified_name found in manifest. Each server must appear at most once.', - 'mcp.tab.loading': 'Carregando servidores MCP...', - 'mcp.tab.emptyDetail': 'Selecione um servidor ou navegue no catálogo.', - 'mcp.install.loadingDetail': 'Carregando detalhes do servidor...', - 'mcp.install.back': 'Voltar', - 'mcp.install.title': 'Instalar {name}', - 'mcp.install.requiredEnv': 'Variáveis de ambiente necessárias', - 'mcp.install.enterValue': 'Digite {key}', - 'mcp.install.show': 'Mostrar', - 'mcp.install.hide': 'Ocultar', - 'mcp.install.configLabel': 'Configuração (JSON opcional)', - 'mcp.install.configPlaceholder': '{"key": "value"}', - 'mcp.install.missingRequired': '"{key}" é obrigatório', - 'mcp.install.invalidJson': 'JSON de configuração não é JSON válido', - 'mcp.install.failedDetail': 'Falha ao carregar detalhes do servidor', - 'mcp.install.failedInstall': 'Falha na instalação', - 'mcp.install.button': 'Instalação', - 'mcp.install.installing': 'Instalando...', - 'mcp.detail.suggestedEnvReady': 'Valores de ambiente sugeridos prontos', - 'mcp.detail.suggestedEnvBody': - 'Re-install this server with the suggested values to apply them: {keys}', - 'mcp.detail.connect': 'Conectar', - 'mcp.detail.connecting': 'Conectando...', - 'mcp.detail.disconnect': 'Desconectar', - 'mcp.detail.hideAssistant': 'Ocultar assistente', - 'mcp.detail.helpConfigure': 'Ajude-me a configurar', - 'mcp.detail.confirmUninstall': 'Confirmar desinstalação?', - 'mcp.detail.confirmUninstallAction': 'Sim, desinstalar', - 'mcp.detail.uninstall': 'Desinstalar', - 'mcp.detail.envVars': 'Variáveis de ambiente', - 'mcp.detail.tools': 'Ferramentas', - 'onboarding.skipForNow': 'Ignorar por agora', - 'onboarding.localAI.continueWithCloud': 'Continuar com a nuvem', - 'onboarding.localAI.useLocalAnyway': 'Use local AI anyway (not recommended for your device)', - 'onboarding.localAI.useLocalInstead': 'Use IA local (conecte Ollama agora)', - 'onboarding.localAI.setupIssue': 'A configuração de IA local encontrou um problema', - 'notifications.routingTitle': 'Roteamento de notificação', - 'notifications.routing.pipelineStats': 'Estatísticas de pipeline', - 'notifications.routing.total': 'Total', - 'notifications.routing.unread': 'Não lido', - 'notifications.routing.unscored': 'Sem pontuação', - 'notifications.routing.intelligenceTitle': 'Inteligência de notificação', - 'notifications.routing.intelligenceDesc': - 'Every notification from your connected accounts is scored by a local AI model. High-importance notifications are automatically routed to your orchestrator agent so nothing critical slips through.', - 'notifications.routing.howItWorks': 'Como funciona', - 'notifications.routing.level.drop': 'Eliminar', - 'notifications.routing.level.dropDesc': 'Ruído / spam - armazenado, mas não descoberto', - 'notifications.routing.level.acknowledge': 'Reconhecer', - 'notifications.routing.level.acknowledgeDesc': 'Low-priority — shown in notification center', - 'notifications.routing.level.react': 'React', - 'notifications.routing.level.reactDesc': 'Medium-priority — triggers a focused agent response', - 'notifications.routing.level.escalate': 'Escalar', - 'notifications.routing.level.escalateDesc': 'High-priority — forwarded to orchestrator agent', - 'notifications.routing.perProvider': 'Roteamento por provedor', - 'notifications.routing.threshold': 'Limite', - 'notifications.routing.routeToOrchestrator': 'Rota para o orquestrador', - 'notifications.routing.loadSettingsError': 'Failed to load settings. Reopen this panel to retry.', - 'settings.billing.inferenceBudget.title': 'Inference Budget', - 'settings.billing.inferenceBudget.noRecurringPlanBudget': 'Nenhum orçamento de plano recorrente', - 'settings.billing.inferenceBudget.noRecurringWeeklyDesc': - 'Your current plan does not include a recurring weekly inference budget. Usage is paid from available credits instead.', - 'settings.billing.inferenceBudget.remainingSummary': '{remaining} / {budget} restantes', - 'settings.billing.inferenceBudget.spentThisCycle': 'Gasto {amount} neste ciclo', - 'settings.billing.inferenceBudget.cycleEndsOn': 'O ciclo termina em {date}', - 'settings.billing.inferenceBudget.exhaustedDesc': - 'Included subscription usage is exhausted. Top up credits to keep using AI without waiting for the next cycle.', - 'settings.billing.inferenceBudget.discountVsPayg': '{pct}% cheaper per call than pay-as-you-go.', - 'settings.billing.inferenceBudget.cycleSpend': 'Gasto do ciclo', - 'settings.billing.inferenceBudget.totalAmount': '{amount} total', - 'settings.billing.inferenceBudget.inference': 'Inferência', - 'settings.billing.inferenceBudget.integrations': 'Integrações', - 'settings.billing.inferenceBudget.calls': '{count} chamadas', - 'settings.billing.inferenceBudget.dailySpend': 'Gasto diário', - 'settings.billing.inferenceBudget.dailySpendPoint': '{date}: {amount}', - 'settings.billing.inferenceBudget.topModels': 'Principais modelos', - 'settings.billing.inferenceBudget.noInferenceUsage': 'Nenhum uso de inferência neste ciclo.', - 'settings.billing.inferenceBudget.topIntegrations': 'Principais integrações', - 'settings.billing.inferenceBudget.noIntegrationUsage': 'Nenhum uso de integração neste ciclo.', - 'settings.billing.inferenceBudget.unableToLoad': 'Não foi possível carregar os dados de uso', - 'settings.billing.inferenceBudget.notAvailable': 'n/a', - 'memory.sourceFilterAria': 'Filtrar por origem', - 'calls.comingSoonDescription': 'AI-assisted calls are coming soon. Stay tuned.', - 'vault.title': 'Cofres de conhecimento', - 'vault.description': 'Point at a local folder; files are chunked and mirrored into memory.', - 'vault.add': 'Adicionar cofre', - 'vault.added': 'Cofre adicionado', - 'vault.createdMessage': 'Criado "{name}". Clique em {sync} para ingerir.', - 'vault.couldNotAdd': 'Não foi possível adicionar o cofre', - 'vault.syncFailed': 'Falha na sincronização', - 'vault.syncFailedFor': 'Falha na sincronização para "{name}"', - 'vault.syncFailedFiles': 'Falha em {count} arquivo(s)', - 'vault.syncedTitle': 'Sincronizado "{name}"', - 'vault.syncSummary': 'Ingerido {ingested}, inalterado {unchanged}, removido {removed}', - 'vault.syncSummaryFailed': ', falhou {count}', - 'vault.syncSummarySkipped': ', ignorado {count}', - 'vault.syncSummaryDuration': '· {seconds}s', - 'vault.confirmRemovePurge': - 'Remove vault "{name}"?\n\nClick OK to also purge its memory (delete all {count} ingested document(s)).\nClick Cancel to keep the documents in memory.', - 'vault.confirmRemove': 'Realmente remover o cofre "{name}"?', - 'vault.removed': 'Vault removido', - 'vault.removedPurgedMessage': 'Removido "{name}" e limpou sua memória.', - 'vault.removedKeptMessage': 'Removido "{name}". Documentos guardados na memória.', - 'vault.couldNotRemove': 'Não foi possível remover o cofre', - 'vault.name': 'Nome', - 'vault.namePlaceholder': 'Minhas notas de pesquisa', - 'vault.folderPath': 'Caminho da pasta (absoluto)', - 'vault.folderPathPlaceholder': '/Users/you/Documents/notes', - 'vault.excludes': 'Exclui (substrings separadas por vírgula, opcional)', - 'vault.excludesPlaceholder': 'rascunhos/, .secret', - 'vault.creating': 'Criando…', - 'vault.create': 'Criar cofre', - 'vault.loading': 'Carregando cofres…', - 'vault.failedToLoad': 'Falha ao carregar cofres: {error}', - 'vault.empty': 'Ainda não há cofres. Adicione um acima para começar a assimilar uma pasta.', - 'vault.fileCount': '{count} arquivo(s)', - 'vault.syncedRelative': 'sincronizado {time}', - 'vault.neverSynced': 'nunca sincronizado', - 'vault.syncingProgress': 'Sincronizando… {ingested}/{total}', - 'vault.removing': 'Removendo…', - 'vault.relative.sec': '{count}s atrás', - 'vault.relative.min': '{count}m atrás', - 'vault.relative.hr': '{count}h atrás', - 'vault.relative.day': '{count}d atrás', - 'whatsapp.title': 'WhatsApp', - 'subconscious.interval.fiveMinutes': '5 minutos', - 'subconscious.interval.tenMinutes': '10 minutos', - 'subconscious.interval.fifteenMinutes': '15 minutos', - 'subconscious.interval.thirtyMinutes': '30 minutos', - 'subconscious.interval.oneHour': '1 hora', - 'subconscious.interval.sixHours': '6 horas', - 'subconscious.interval.twelveHours': '12 horas', - 'subconscious.interval.oneDay': '1 dia', - 'subconscious.priority.critical': 'crítico', - 'subconscious.priority.important': 'importante', - 'subconscious.priority.normal': 'normal', - 'subconscious.durationSeconds': '{seconds}s', - 'subconscious.durationMilliseconds': '{milliseconds}ms', - 'settings.search.allowedSitesLabel': 'Allowed websites', - 'settings.search.allowedSitesHint': - 'Websites the assistant may open and read while researching (one host per line, e.g. reuters.com). A host also covers its subdomains. Leave empty to block all web access.', - 'settings.search.allowedSitesAllOn': - 'The assistant can open any public website. Local and private addresses stay blocked.', - 'settings.search.allowedSitesPlaceholder': 'reuters.com\napnews.com\ngithub.com', - 'settings.search.allowedSitesSave': 'Save websites', - 'settings.search.accessModeAria': 'Web access mode', - 'settings.search.accessAllowAll': 'Allow all', - 'settings.search.accessCustom': 'Custom', - 'settings.search.accessBlockAll': 'Block all', - 'settings.search.accessBlockAllHint': - 'All web access is blocked — the assistant cannot open or read any website.', - 'memory.tab.centrality': 'Centrality', - 'graphCentrality.title': 'Knowledge Graph Centrality', - 'graphCentrality.intro': - 'PageRank over your memory graph surfaces the load-bearing hubs — and the connector entities that link otherwise-separate clusters, which a raw frequency count cannot reveal.', - 'graphCentrality.loading': 'Computing centrality…', - 'graphCentrality.errorPrefix': 'Could not load the graph:', - 'graphCentrality.retry': 'Retry', - 'graphCentrality.empty': 'No knowledge graph yet.', - 'graphCentrality.emptyHint': - 'As the assistant records facts about you, the most connected entities will surface here.', - 'graphCentrality.namespaceLabel': 'Namespace', - 'graphCentrality.namespaceAll': 'All namespaces', - 'graphCentrality.metricEntities': 'Entities', - 'graphCentrality.metricConnections': 'Connections', - 'graphCentrality.metricClusters': 'Clusters', - 'graphCentrality.clustersCaption': '{components} clusters · largest holds {largest}', - 'graphCentrality.approximateBadge': 'approximate', - 'graphCentrality.approximateTitle': 'Stopped at the iteration cap before fully converging', - 'graphCentrality.rankedHeading': 'Top entities by influence', - 'graphCentrality.colRank': '#', - 'graphCentrality.colEntity': 'Entity', - 'graphCentrality.colInfluence': 'Influence', - 'graphCentrality.colLinks': 'Links', - 'graphCentrality.bridgeBadge': 'connector', - 'graphCentrality.bridgeTitle': 'Connector — more influential than its link count suggests', - 'graphCentrality.degreeTitle': '{in} in · {out} out', - 'settings.search.engineDisabledLabel': 'Disabled', - 'settings.search.engineDisabledDesc': - 'Remove search tools from the agent context and available tool list.', -}; - -export default pt1; diff --git a/app/src/lib/i18n/chunks/pt-2.ts b/app/src/lib/i18n/chunks/pt-2.ts deleted file mode 100644 index 05fc6aa31..000000000 --- a/app/src/lib/i18n/chunks/pt-2.ts +++ /dev/null @@ -1,509 +0,0 @@ -import type { TranslationMap } from '../types'; - -// Portuguese (Português) chunk 2/5. Translated from chunks/en-2.ts. -const pt2: TranslationMap = { - 'settings.ai.configStatus': 'Status da Configuração', - 'settings.ai.fallbackMode': 'Modo de Fallback', - 'settings.ai.loadedFromRuntime': 'Carregado do Runtime', - 'settings.ai.loadingDuration': 'Duração do Carregamento', - 'settings.ai.localRuntime': 'Runtime do Modelo Local', - 'settings.ai.openManager': 'Abrir Gerenciador', - 'settings.ai.retryDownload': 'Tentar Download Novamente', - 'settings.ai.state': 'Estado', - 'settings.ai.targetModel': 'Modelo Alvo', - 'settings.ai.download': 'Baixar', - 'settings.ai.localModelUnavailable': 'Status do modelo local indisponível.', - 'settings.ai.soulConfig': 'Configuração de Persona SOUL', - 'settings.ai.refreshing': 'Atualizando...', - 'settings.ai.refreshSoul': 'Atualizar SOUL', - 'settings.ai.loadingSoul': 'Carregando configuração SOUL...', - 'settings.ai.identity': 'Identidade', - 'settings.ai.personality': 'Personalidade', - 'settings.ai.safetyRules': 'Regras de Segurança', - 'settings.ai.source': 'Fonte', - 'settings.ai.loaded': 'Carregado', - 'settings.ai.toolsConfig': 'Configuração de FERRAMENTAS', - 'settings.ai.refreshTools': 'Atualizar FERRAMENTAS', - 'settings.ai.toolsAvailable': 'Ferramentas Disponíveis', - 'settings.ai.tools': 'ferramentas', - 'settings.ai.activeSkills': 'Habilidades Ativas', - 'settings.ai.skills': 'habilidades', - 'settings.ai.skillsOverview': 'Visão Geral das Habilidades', - 'settings.ai.refreshingAll': 'Atualizando Tudo...', - 'settings.ai.refreshAll': 'Atualizar Toda a Configuração de IA', - 'settings.notifications.suppressAll': 'Suprimir todas as notificações', - 'settings.notifications.suppressAllDesc': - 'Bloquear todos os avisos de notificação do SO de apps incorporados independentemente do estado de foco.', - 'settings.notifications.toggleDnd': 'Ativar/Desativar Não Perturbe', - 'settings.notifications.categories': 'Categorias', - 'settings.notifications.categoryFooter': - 'Desativar uma categoria impede que novas notificações desse tipo apareçam na central de notificações. As notificações existentes permanecem até serem limpas.', - 'settings.billing.movedToWeb': 'Cobrança movida para a web', - 'settings.billing.openDashboard': 'Abrir painel de cobrança', - 'settings.billing.movedToWebDesc': - 'Alterações de assinatura, métodos de pagamento, créditos e faturas agora são gerenciados no TinyHumans na web.', - 'settings.billing.backToSettings': 'Voltar às configurações', - 'settings.billing.openingBrowser': 'Abrindo seu navegador...', - 'settings.billing.browserNotOpen': 'Se seu navegador não abriu, use o botão acima.', - 'settings.billing.browserOpenFailed': - 'O navegador não pôde ser aberto automaticamente. Use o botão acima.', - 'settings.tools.chooseCapabilities': - 'Escolha quais funcionalidades o OpenHuman pode usar em seu nome.', - 'settings.tools.saveChanges': 'Salvar Alterações', - 'settings.tools.preferencesSaved': 'Preferências salvas', - 'settings.tools.saveFailed': 'Falha ao salvar preferências. Tente novamente.', - 'settings.screenAwareness.mode': 'Modo', - 'settings.screenAwareness.allExceptBlacklist': 'Todos Exceto Lista Negra', - 'settings.screenAwareness.whitelistOnly': 'Somente Lista Branca', - 'settings.screenAwareness.screenMonitoring': 'Monitoramento de Tela', - 'settings.screenAwareness.saveSettings': 'Salvar Configurações', - 'settings.screenAwareness.session': 'Sessão', - 'settings.screenAwareness.status': 'Status', - 'settings.screenAwareness.active': 'Ativo', - 'settings.screenAwareness.stopped': 'Parado', - 'settings.screenAwareness.remaining': 'Restante', - 'settings.screenAwareness.startSession': 'Iniciar Sessão', - 'settings.screenAwareness.stopSession': 'Encerrar Sessão', - 'settings.screenAwareness.analyzeNow': 'Analisar Agora', - 'settings.screenAwareness.macosOnly': - 'A captura de tela e os controles de permissão do Reconhecimento de Tela são suportados atualmente apenas no macOS.', - 'connections.comingSoon': 'Em breve', - 'connections.setUp': 'Configurar', - 'connections.configured': 'Configurado', - 'connections.unavailable': 'Indisponível', - 'connections.checking': 'Verificando…', - 'connections.walletConfigured': - 'Identidades locais de EVM, BTC, Solana e Tron estão configuradas a partir da sua frase de recuperação.', - 'connections.walletReady': - 'Configure identidades locais de EVM, BTC, Solana e Tron a partir de uma única frase de recuperação.', - 'connections.walletError': - 'Não foi possível verificar o status da carteira. Toque para tentar novamente no painel de Frase de Recuperação.', - 'connections.walletChecking': 'Verificando status da carteira...', - 'connections.walletIdentities': 'Identidades de carteira', - 'connections.walletDerived': - 'Derivado localmente da sua frase de recuperação e armazenado apenas como metadados seguros.', - 'connections.privacySecurity': 'Privacidade e Segurança', - 'connections.privacySecurityDesc': - 'Todos os dados e credenciais são armazenados localmente com política de retenção zero. Suas informações são criptografadas e nunca compartilhadas com terceiros.', - 'channels.status.connecting': 'Conectando', - 'channels.status.notConfigured': 'Não configurado', - 'channels.noActiveRoute': 'Nenhuma rota ativa', - 'channels.activeRoute': 'Rota ativa', - 'channels.loadingDefinitions': 'Carregando definições de canal...', - 'channels.channelConnections': 'Conexões de Canal', - 'channels.configureAuthModes': 'Configure modos de autenticação para cada canal de mensagens.', - 'channels.configNotAvailable': 'Configuração para', - 'channels.channel': 'canal', - 'devOptions.coreModeNotSet': 'Modo do core: não definido', - 'devOptions.coreModeNotSetDesc': - 'O seletor de verificação de inicialização ainda não foi confirmado. Use Trocar modo no seletor para escolher Local ou Cloud.', - 'devOptions.local': 'Local', - 'devOptions.embeddedCoreSidecar': 'Core sidecar incorporado', - 'devOptions.sidecarSpawned': 'Iniciado em processo pelo shell Tauri na abertura do app.', - 'devOptions.cloud': 'Nuvem', - 'devOptions.remoteCoreRpc': 'RPC do core remoto', - 'devOptions.token': 'Token', - 'devOptions.tokenNotSet': 'não definido — RPC retornará 401', - 'devOptions.triggerSentryTest': 'Disparar Teste do Sentry (staging)', - 'devOptions.triggerSentryTestDesc': - 'Envia um erro marcado para verificar o pipeline do Sentry. Issue #1072 — remover após verificação.', - 'devOptions.sendTestEvent': 'Enviar evento de teste', - 'devOptions.sending': 'Enviando…', - 'devOptions.eventSent': 'Evento enviado', - 'devOptions.failed': 'Falhou', - 'devOptions.appLogs': 'Logs do app', - 'devOptions.appLogsDesc': - 'Abrir a pasta com os arquivos de log diários rotativos. Anexe o arquivo mais recente ao reportar um problema.', - 'devOptions.openLogsFolder': 'Abrir pasta de logs', - 'mnemonic.phraseSaved': 'Frase de recuperação salva', - 'mnemonic.walletReady': - 'Identidades de carteira multi-chain estão prontas. Retornando às configurações...', - 'mnemonic.writeDownWords': 'Anote estas', - 'mnemonic.wordsInOrder': - 'palavras em ordem e guarde-as em um lugar seguro. Esta frase protege sua chave de criptografia local e suas identidades de carteira EVM, BTC, Solana e Tron.', - 'mnemonic.cannotRecover': - 'Esta frase nunca poderá ser recuperada se perdida e deve permanecer totalmente local no seu dispositivo.', - 'mnemonic.copyToClipboard': 'Copiar para Área de Transferência', - 'mnemonic.alreadyHavePhrase': 'Já tenho uma frase de recuperação', - 'mnemonic.consentSaved': - 'Salvei esta frase e concordo em usá-la para configuração da carteira local', - 'mnemonic.enterPhraseToRestore': - 'Insira sua frase de recuperação abaixo para restaurar suas identidades de carteira local, ou cole a frase completa em qualquer campo (12 palavras para novos backups; frases de 24 palavras de versões mais antigas ainda funcionam).', - 'mnemonic.words': 'Palavras', - 'mnemonic.validPhrase': 'Frase de recuperação válida', - 'mnemonic.generateNewPhrase': 'Gerar uma nova frase de recuperação', - 'mnemonic.securingData': 'Protegendo Seus Dados...', - 'mnemonic.saveRecoveryPhrase': 'Salvar Frase de Recuperação', - 'mnemonic.userNotLoaded': - 'Usuário não carregado. Por favor, faça login novamente ou atualize a página.', - 'mnemonic.invalidPhrase': - 'Frase de recuperação inválida. Verifique as palavras e tente novamente.', - 'mnemonic.somethingWentWrong': 'Algo deu errado. Por favor, tente novamente.', - 'team.failedToCreate': 'Falha ao criar equipe', - 'team.invalidInviteCode': 'Código de convite inválido ou expirado', - 'team.failedToSwitch': 'Falha ao trocar de equipe', - 'team.failedToLeave': 'Falha ao sair da equipe', - 'team.role.owner': 'Proprietário', - 'team.role.admin': 'Administrador', - 'team.role.billingManager': 'Gerente de Cobrança', - 'team.role.member': 'Membro', - 'team.active': 'Ativo', - 'team.personalTeam': 'Equipe pessoal', - 'team.manageTeam': 'Gerenciar Equipe', - 'team.switching': 'Trocando...', - 'team.switch': 'Trocar', - 'team.leaving': 'Saindo...', - 'team.leave': 'Sair', - 'team.yourTeams': 'Suas Equipes', - 'team.createNewTeam': 'Criar Nova Equipe', - 'team.teamName': 'Nome da equipe', - 'team.creating': 'Criando...', - 'team.joinExistingTeam': 'Entrar em Equipe Existente', - 'team.inviteCode': 'Código de convite', - 'team.joining': 'Entrando...', - 'team.join': 'Entrar', - 'team.leaveTeam': 'Sair da Equipe', - 'team.confirmLeave': 'Tem certeza de que deseja sair de', - 'team.leaveWarning': - 'Você perderá o acesso à equipe e a todos os recursos da equipe. Você precisará de um novo convite para reingressar.', - 'team.management': 'Gerenciamento de Equipe', - 'team.notFound': 'Equipe não encontrada', - 'team.accessDenied': 'Acesso negado', - 'team.members': 'Membros', - 'voice.title': 'Ditado por Voz', - 'voice.settings': 'Configurações de Voz', - 'voice.settingsDesc': - 'Mantenha a tecla de atalho pressionada para ditar e inserir texto no campo ativo.', - 'voice.hotkey': 'Tecla de Atalho', - 'voice.activationMode': 'Modo de Ativação', - 'voice.tapToToggle': 'Toque para alternar', - 'voice.writingStyle': 'Estilo de Escrita', - 'voice.verbatimTranscription': 'Transcrição literal', - 'voice.naturalCleanup': 'Limpeza natural', - 'voice.autoStart': 'Iniciar servidor de voz automaticamente com o core', - 'voice.customDictionary': 'Dicionário Personalizado', - 'voice.customDictionaryDesc': - 'Adicione nomes, termos técnicos e palavras do domínio para melhorar a precisão do reconhecimento.', - 'voice.addWord': 'Adicionar uma palavra...', - 'voice.sttDisabled': - 'O ditado por voz está desativado até que o modelo STT local seja baixado e esteja pronto.', - 'voice.openLocalAiModel': 'Abrir Modelo de IA Local', - 'voice.serverRestarted': 'Servidor de voz reiniciado com as novas configurações.', - 'voice.settingsSaved': 'Configurações de voz salvas.', - 'voice.serverStarted': 'Servidor de voz iniciado.', - 'voice.serverStopped': 'Servidor de voz parado.', - 'voice.saveVoiceSettings': 'Salvar Configurações de Voz', - 'voice.startVoiceServer': 'Iniciar Servidor de Voz', - 'voice.stopVoiceServer': 'Parar Servidor de Voz', - 'voice.debugTitle': 'Depuração de Voz', - 'autocomplete.title': 'Autocompletar', - 'autocomplete.settings': 'Configurações', - 'autocomplete.acceptWithTab': 'Aceitar com Tab', - 'autocomplete.stylePreset': 'Predefinição de Estilo', - 'autocomplete.style.balanced': 'Equilibrado', - 'autocomplete.style.concise': 'Conciso', - 'autocomplete.style.formal': 'Formal', - 'autocomplete.style.casual': 'Casual', - 'autocomplete.style.custom': 'Personalizado', - 'autocomplete.disabledApps': 'Apps Desativados (um bundle/token de app por linha)', - 'autocomplete.saveSettings': 'Salvar Configurações', - 'autocomplete.saving': 'Salvando…', - 'autocomplete.runtime': 'Tempo de execução', - 'autocomplete.running': 'Rodando', - 'autocomplete.start': 'Iniciar', - 'autocomplete.stop': 'Parar', - 'autocomplete.settingsSaved': 'Configurações de autocompletar salvas.', - 'autocomplete.started': 'Autocompletar iniciado.', - 'autocomplete.didNotStart': 'O autocompletar não iniciou. Verifique se está ativado.', - 'autocomplete.stopped': 'Autocompletar parado.', - 'autocomplete.advancedSettings': 'Configurações avançadas', - 'autocomplete.debugTitle': 'Depuração de Autocompletar', - 'chat.agentChat': 'Chat com Agente', - 'chat.overrides': 'Substituições', - 'chat.model': 'Modelo', - 'chat.temperature': 'Temperatura', - 'chat.conversation': 'Conversa', - 'chat.startAgentConversation': 'Inicie uma conversa com o agente.', - 'chat.you': 'Você', - 'chat.agent': 'Agente', - 'chat.askAgent': 'Pergunte qualquer coisa ao agente...', - 'chat.sendMessage': 'Enviar Mensagem', - 'composio.triageTitle': 'Gatilhos de Integração', - 'composio.triageDesc': - 'Quando ativo, cada gatilho Composio recebido passa por uma etapa de triagem de IA que classifica o evento e pode iniciar ações automatizadas — um turno de LLM local por gatilho. Desative globalmente ou por integração se preferir revisão manual. Se a variável de ambiente', - 'composio.disableAllTriage': 'Desativar triagem de IA para todos os gatilhos', - 'composio.triggersStillRecorded': - 'Os gatilhos ainda são registrados no histórico — nenhum turno de LLM é executado.', - 'composio.disableSpecificIntegrations': 'Desativar triagem de IA para integrações específicas', - 'composio.settingsSaved': 'Configurações salvas', - 'composio.saveFailed': 'Falha ao salvar. Tente novamente.', - 'cron.title': 'Tarefas Cron', - 'cron.scheduledJobs': 'Tarefas Agendadas', - 'cron.manageCronJobs': 'Gerenciar tarefas cron do agendador do core.', - 'cron.refreshCronJobs': 'Atualizar Tarefas Cron', - 'localModel.modelStatus': 'Status do Modelo', - 'localModel.downloadModels': 'Baixar Modelos', - 'localModel.usage': 'Uso', - 'localModel.usageDesc': - 'Escolha quais subsistemas rodam no modelo local. O que estiver desligado usa a nuvem.', - 'localModel.enableRuntime': 'Ativar runtime de IA local', - 'localModel.enableRuntimeDesc': - 'Chave mestre. Desligado por padrão — Ollama fica inativo. Quando ligado, o sumarizador de árvore, inteligência de tela e autocompletar sempre usam o modelo local.', - 'localModel.advancedSettings': 'Configurações avançadas', - 'localModel.debugTitle': 'Depuração de Modelo Local', - 'localModel.ollamaServer.helperText': 'Exemplo: http://192.168.1.5:11434', - 'localModel.ollamaServer.label': 'URL do servidor Ollama', - 'localModel.ollamaServer.modelCount': 'modelos', - 'localModel.ollamaServer.placeholder': 'http://localhost:11434', - 'localModel.ollamaServer.reachable': 'Acessível', - 'localModel.ollamaServer.resetButton': 'Redefinir para padrão', - 'localModel.ollamaServer.saveButton': 'Salvar', - 'localModel.ollamaServer.testButton': 'Testar conexão', - 'localModel.ollamaServer.unreachable': 'Inacessível', - 'localModel.ollamaServer.validationError': 'Deve ser uma URL http:// ou https:// válida', - 'screenAwareness.debugTitle': 'Depuração de Reconhecimento de Tela', - 'memory.debugTitle': 'Depuração de Memória', - 'webhooks.debugTitle': 'Depuração de Webhooks', - 'notifications.routingTitle': 'Roteamento de Notificações', - 'common.reload': 'Recarregar', - 'common.skip': 'Pular', - 'common.disable': 'Desativar', - 'common.enable': 'Ativar', - 'chat.safetyTimeout': - 'Nenhuma resposta do agente após 2 minutos. Tente novamente ou verifique sua conexão.', - 'chat.filter.all': 'Todos', - 'chat.filter.work': 'Trabalho', - 'chat.filter.briefing': 'Resumo', - 'chat.filter.notification': 'Notificação', - 'chat.filter.workers': 'Trabalhadores', - 'chat.selectThread': 'Selecione uma conversa', - 'chat.threads': 'Conversas', - 'chat.noThreads': 'Nenhuma conversa ainda', - 'chat.noLabelThreads': 'Nenhuma conversa "{label}"', - 'chat.noWorkerThreads': 'Nenhuma thread de worker ainda', - 'chat.deleteThread': 'Excluir conversa', - 'chat.deleteThreadConfirm': 'Tem certeza de que deseja excluir "{title}"?', - 'chat.untitledThread': 'Conversa sem título', - 'chat.editThreadTitle': 'Edit thread title', - 'chat.hideSidebar': 'Ocultar barra lateral', - 'chat.showSidebar': 'Mostrar barra lateral', - 'chat.newThreadShortcut': 'Nova conversa (/new)', - 'chat.new': 'Nova', - 'chat.failedToLoadMessages': 'Falha ao carregar mensagens', - 'chat.thinkingIteration': 'Pensando... ({n})', - 'chat.thinkingDots': 'Pensando...', - 'chat.approachingLimit': 'Aproximando-se do limite de uso', - 'chat.approachingLimitMsg': 'Você usou {pct}% da sua cota disponível.', - 'chat.upgrade': 'Fazer upgrade', - 'chat.weeklyLimitHit': 'Você atingiu seu limite semanal.', - 'chat.resets': 'Reinicia', - 'chat.topUpToContinue': 'Adicione créditos para continuar.', - 'chat.budgetComplete': - 'Seu orçamento incluído foi esgotado. Adicione créditos ou faça upgrade para continuar.', - 'chat.topUp': 'Adicionar Créditos', - 'chat.cycle': 'Ciclo', - 'chat.cycleSpent': 'Gasto neste ciclo', - 'chat.cycleRemaining': 'Restante', - 'chat.left': 'restante', - 'chat.setup': 'Configurar', - 'chat.switchToText': 'Mudar para texto', - 'chat.transcribing': 'Transcrevendo...', - 'chat.stopAndSend': 'Parar e enviar', - 'chat.startTalking': 'Comece a falar', - 'chat.playingVoiceReply': 'Reproduzindo resposta de voz', - 'chat.voiceHint': 'Use o microfone para falar', - 'chat.micUnavailable': 'Microfone indisponível', - 'chat.turn': 'turno', - 'chat.turns': 'turnos', - 'chat.openWorkerThread': 'Abrir thread de worker', - 'chat.attachment.attach': 'Anexar imagem', - 'chat.attachment.remove': 'Remover {name}', - 'chat.attachment.tooMany': 'Máximo de {max} imagens por mensagem', - 'chat.attachment.tooLarge': 'A imagem excede o limite de tamanho de {max}', - 'chat.attachment.unsupportedType': - 'Tipo de arquivo não suportado. Use PNG, JPEG, WebP, GIF ou BMP.', - 'chat.attachment.readFailed': 'Não foi possível ler o arquivo', - 'memory.searchAria': 'Pesquisar memória', - 'memory.searchPlaceholder': 'Pesquisar entradas de memória...', - 'memory.sourceFilter.all': 'Todas as fontes', - 'memory.sourceFilter.email': 'E-mail', - 'memory.sourceFilter.calendar': 'Calendário', - 'memory.sourceFilter.telegram': 'Telegram', - 'memory.sourceFilter.aiInsight': 'Insight de IA', - 'memory.sourceFilter.system': 'Sistema', - 'memory.sourceFilter.trading': 'Negociação', - 'memory.sourceFilter.security': 'Segurança', - 'memory.ingestionActivity': 'Atividade de Ingestão', - 'memory.events': 'eventos', - 'memory.event': 'evento', - 'memory.overTheLast': 'nos últimos', - 'memory.months': 'meses', - 'memory.peak': 'Pico', - 'memory.perDay': '/dia', - 'memory.less': 'Menos', - 'memory.more': 'Mais', - 'memory.on': 'em', - 'memory.loading': 'Carregando Memória', - 'memory.fetching': 'Buscando suas entradas de memória...', - 'memory.analyzing': 'Analisando Memória', - 'memory.analyzingHint': 'Processando suas memórias para extrair insights...', - 'memory.noMatches': 'Nenhum Resultado Encontrado', - 'memory.noMatchesHint': 'Tente alterar seus termos de pesquisa ou filtros.', - 'memory.allCaughtUp': 'Tudo em Dia', - 'memory.allCaughtUpHint': 'Nenhuma nova entrada de memória para processar.', - 'memory.noAnalysis': 'Nenhuma Análise Ainda', - 'memory.noAnalysisHint': 'Execute uma análise para descobrir padrões em suas memórias.', - 'memory.emptyHint': 'Comece a interagir para criar suas primeiras memórias.', - 'mic.unavailable': 'Microfone não disponível', - 'mic.permissionDenied': 'Permissão de microfone negada', - 'mic.failedToStartRecorder': 'Falha ao iniciar o gravador', - 'mic.transcribing': 'Transcrevendo...', - 'mic.tapToSend': 'Toque para enviar', - 'mic.waitingForAgent': 'Aguardando agente...', - 'mic.tapAndSpeak': 'Toque e fale', - 'mic.stopRecording': 'Parar gravação e enviar', - 'mic.startRecording': 'Iniciar gravação', - 'token.usageLimitReached': 'Limite de uso atingido', - 'token.approachingLimit': 'Aproximando-se do limite', - 'token.planClickForDetails': 'plano - clique para detalhes', - 'token.sessionTokens': 'Ent: {in} | Saí: {out} | Turnos: {turns}', - 'token.limit': 'Limite Atingido', - 'catalog.noCapabilityBinding': 'Sem vinculação de funcionalidade', - 'catalog.downloadFailed': 'Falha no download', - 'catalog.active': 'Ativo', - 'catalog.installed': 'Instalado', - 'catalog.notDownloaded': 'Não baixado', - 'catalog.inUse': 'Em Uso', - 'catalog.use': 'Usar', - 'catalog.deleteModel': 'Excluir modelo', - 'catalog.download': 'Baixar', - 'navigator.recent': 'Recente', - 'navigator.today': 'Hoje', - 'navigator.thisWeek': 'Esta Semana', - 'navigator.sources': 'Fontes', - 'navigator.email': 'E-mail', - 'navigator.slack': 'Slack', - 'navigator.chat': 'Bate-papo', - 'navigator.documents': 'Documentos', - 'navigator.people': 'Pessoas', - 'navigator.topics': 'Tópicos', - 'dreams.description': - 'Sonhos são reflexões geradas por IA que sintetizam padrões das suas memórias.', - 'dreams.comingSoon': 'Em breve', - 'assignment.memoryLlm': 'LLM de Memória', - 'assignment.memoryLlmAria': 'Seleção de LLM de memória', - 'assignment.embedder': 'Incorporador', - 'assignment.loaded': 'Carregado', - 'assignment.notDownloaded': 'Não baixado', - 'assignment.usedForExtractSummarise': 'Usado para extração e sumarização', - 'insights.knownFacts': 'Fatos Conhecidos', - 'insights.preferences': 'Preferências', - 'insights.relationships': 'Relacionamentos', - 'insights.skills': 'Habilidades', - 'insights.opinions': 'Opiniões', - // Developer options menu items (#2225) — English stubs; native translations welcome - 'devOptions.menuAi': 'Configuração de IA', - 'devOptions.menuAiDesc': - 'Provedores de nuvem, modelos Ollama locais e roteamento por carga de trabalho', - 'devOptions.menuScreenAware': 'Reconhecimento de tela', - 'devOptions.menuScreenAwareDesc': - 'Permissões de captura de tela, política de monitoramento e controles de sessão', - 'devOptions.menuMessaging': 'Canais de mensagens', - 'devOptions.menuMessagingDesc': - 'Configurar modos de autenticação Telegram/Discord e roteamento de canal padrão', - 'devOptions.menuTools': 'Ferramentas', - 'devOptions.menuToolsDesc': - 'Habilitar ou desabilitar recursos que OpenHuman pode usar em seu nome', - 'devOptions.menuAgentChat': 'Bate-papo do agente', - 'devOptions.menuAgentChatDesc': - 'Testar conversação do agente com substituições de modelo e temperatura', - 'devOptions.menuCronJobs': 'Cron Jobs', - 'devOptions.menuCronJobsDesc': - 'Visualizar e configurar trabalhos agendados para habilidades de tempo de execução', - 'devOptions.menuLocalModelDebug': 'Depuração de modelo local', - 'devOptions.menuLocalModelDebugDesc': - 'Configuração de Ollama, downloads de ativos, testes de modelo e diagnósticos', - 'devOptions.menuWebhooksDebug': 'Webhooks', - 'devOptions.menuWebhooksDebugDesc': - 'Inspecione registros de webhook em tempo de execução e logs de solicitação capturados', - 'devOptions.menuIntelligence': 'Inteligência', - 'devOptions.menuIntelligenceDesc': - 'Espaço de trabalho de memória, mecanismo subconsciente, sonhos e configurações', - 'devOptions.menuNotificationRouting': 'Roteamento de notificação', - 'devOptions.menuNotificationRoutingDesc': - 'AI pontuação de importância e escalonamento do orquestrador para alertas de integração', - 'devOptions.menuComposeIOTriggers': 'Acionadores do ComposeIO', - 'devOptions.menuComposeIOTriggersDesc': - 'Visualizar histórico e arquivo do acionador do ComposeIO', - 'devOptions.menuComposioRouting': 'Composio Roteamento (modo direto)', - 'devOptions.menuComposioRoutingDesc': - 'Traga sua própria chave Composio API e encaminhar chamadas diretamente para backend.composio.dev', - 'devOptions.menuComposioTriggers': 'Gatilhos de integração', - 'devOptions.menuComposioTriggersDesc': - 'Definir configurações de triagem de IA para gatilhos de integração Composio', - 'mic.deviceSelector': 'Dispositivo de microfone', - 'mic.tapToSendCountdown': 'Toque para enviar ({seconds}s)', - 'settings.agents.title': 'Agents', - 'settings.agents.subtitle': - 'Manage the agents available for delegation — built-in defaults and your own custom agents.', - 'settings.agents.menuDesc': 'Manage built-in and custom agents', - 'settings.agents.newAgent': 'New agent', - 'settings.agents.loadError': "Couldn't load agents", - 'settings.agents.empty': 'No agents yet', - 'settings.agents.sourceDefault': 'Built-in', - 'settings.agents.sourceCustom': 'Custom', - 'settings.agents.enable': 'Enable agent', - 'settings.agents.disable': 'Disable agent', - 'settings.agents.edit': 'Edit', - 'settings.agents.delete': 'Delete', - 'settings.agents.reset': 'Reset to default', - 'settings.agents.modelLabel': 'Model', - 'settings.agents.toolsLabel': 'Tools', - 'settings.agents.toolsAll': 'All tools', - 'settings.agents.toolsCount': '{count} tools', - 'settings.agents.actionFailed': "Couldn't update the agent", - 'settings.agents.orchestratorLocked': 'The orchestrator is always enabled.', - 'settings.agents.editor.createTitle': 'New agent', - 'settings.agents.editor.editTitle': 'Edit agent', - 'settings.agents.editor.id': 'ID', - 'settings.agents.editor.idHint': 'Lowercase letters, numbers, _ and - only.', - 'settings.agents.editor.name': 'Name', - 'settings.agents.editor.description': 'Description', - 'settings.agents.editor.model': 'Model (optional)', - 'settings.agents.editor.modelPlaceholder': 'e.g. inherit, hint:fast, or a model id', - 'settings.agents.editor.systemPrompt': 'System prompt (optional)', - 'settings.agents.editor.tools': 'Allowed tools', - 'settings.agents.editor.toolsHint': 'One tool name per line. Use * for all tools.', - 'settings.agents.editor.defaultsNote': - 'Editing a built-in agent saves an override you can reset later.', - 'settings.agents.editor.save': 'Save', - 'settings.agents.editor.create': 'Create agent', - 'settings.agents.editor.saving': 'Saving…', - 'settings.agentsSection.title': 'Agents', - 'settings.agentsSection.description': - 'Manage your agents, their autonomy, and what they can access on this computer.', - 'settings.agentsSection.menuDesc': 'Registry, autonomy & OS access', - 'settings.agents.editor.notFound': 'Agent not found.', - 'settings.agents.editor.modelInherit': 'Inherit (platform default)', - 'settings.agents.editor.modelHints': 'Route hints', - 'settings.agents.editor.modelTiers': 'Model tiers', - 'settings.agents.editor.modelCustom': 'Custom model id…', - 'settings.agents.editor.modelCustomPlaceholder': 'e.g. anthropic/claude-sonnet-4', - 'settings.agents.editor.selectTools': 'Add tools', - 'settings.agents.editor.toolsAllSelected': 'All tools', - 'settings.agents.editor.toolsNoneSelected': 'No tools selected', - 'settings.agents.editor.removeToolAria': 'Remove {tool}', - 'settings.agents.editor.toolsModalTitle': 'Allowed tools', - 'settings.agents.editor.toolsSelectedCount': '{count} selected', - 'settings.agents.editor.toolsSearchPlaceholder': 'Search tools…', - 'settings.agents.editor.toolsAllowAll': 'Allow all tools (*)', - 'settings.agents.editor.toolsAllowAllHint': 'This agent can use every available tool.', - 'settings.agents.editor.toolsLoading': 'Loading tools…', - 'settings.agents.editor.toolsLoadError': 'Couldn’t load tools', - 'settings.agents.editor.toolsEmpty': 'No tools match your search.', - 'settings.agents.editor.toolsDone': 'Done', - 'settings.agents.editor.builtInReadonly': - 'Built-in agents can’t be edited. You can enable, disable, or reset them from the agents list.', -}; - -export default pt2; diff --git a/app/src/lib/i18n/chunks/pt-3.ts b/app/src/lib/i18n/chunks/pt-3.ts deleted file mode 100644 index 530137533..000000000 --- a/app/src/lib/i18n/chunks/pt-3.ts +++ /dev/null @@ -1,507 +0,0 @@ -import type { TranslationMap } from '../types'; - -// Portuguese (Português) chunk 3/5. Translated from chunks/en-3.ts. -const pt3: TranslationMap = { - 'insights.other': 'Outros', - 'insights.title': 'Insights', - 'insights.empty': 'Nenhum insight ainda. Os insights são gerados conforme sua memória cresce.', - 'insights.description': 'Baseado em {count} relações no seu grafo de memória.', - 'insights.items': 'itens', - 'insights.more': 'mais', - 'calls.joiningCall': 'Entrando na chamada', - 'calls.meetWindowOpening': 'A janela do Meet está abrindo...', - 'calls.failedToStart': 'Falha ao iniciar chamada no Meet', - 'calls.couldNotStart': 'Não foi possível iniciar a chamada', - 'calls.failedToClose': 'Falha ao encerrar a chamada', - 'calls.couldNotClose': 'Não foi possível encerrar a chamada', - 'calls.joinMeet': 'Entrar em uma chamada do Google Meet', - 'calls.joinMeetDescription': 'Insira um link do Google Meet para entrar.', - 'calls.meetLink': 'Link do Meet', - 'calls.displayName': 'Nome de Exibição', - 'calls.openingMeet': 'Abrindo Meet...', - 'calls.joinCall': 'Entrar na Chamada', - 'calls.activeCalls': 'Chamadas Ativas', - 'calls.leave': 'Sair', - 'workspace.wipeConfirm': - 'Tem certeza de que deseja apagar toda a memória? Isso não pode ser desfeito.', - 'workspace.resetTreeConfirm': 'Tem certeza de que deseja reconstruir a árvore de memória?', - 'workspace.wipeTitle': 'Apagar Memória', - 'workspace.resetting': 'Redefinindo...', - 'workspace.resetMemory': 'Redefinir Memória', - 'workspace.resetTreeTitle': 'Reconstruir Árvore de Memória', - 'workspace.rebuilding': 'Reconstruindo...', - 'workspace.resetMemoryTree': 'Redefinir Árvore de Memória', - 'workspace.building': 'Construindo...', - 'workspace.buildSummaryTrees': 'Construir Árvores de Resumo', - 'workspace.viewVault': 'Ver Cofre', - 'workspace.openingVaultTitle': 'Abrindo o cofre no Obsidian', - 'workspace.openingVaultMessage': - "If Obsidian doesn't open, install it from obsidian.md or use Reveal Folder. Vault path:", - 'workspace.openVaultFailedTitle': "Couldn't open vault in Obsidian", - 'workspace.openVaultFailedMessage': - 'Use Reveal Folder para abrir o diretório do vault diretamente. Caminho do cofre:', - 'workspace.revealVaultFailed': "Couldn't reveal vault folder", - 'workspace.revealFolder': 'Revelar pasta', - 'workspace.checkingVault': 'Checking…', - 'workspace.vaultNotRegisteredHelp': - 'Obsidian only opens folders you\'ve added as a vault. In Obsidian, choose "Open folder as vault" and pick the folder below — you only need to do this once. Then click View Vault again.', - 'workspace.obsidianNotFoundHelp': - "We couldn't find Obsidian on this device. Install it, or — if it's installed somewhere non-standard — set its config folder under Advanced.", - 'workspace.openAnyway': 'Open in Obsidian anyway', - 'workspace.installObsidian': 'Install Obsidian', - 'workspace.obsidianAdvanced': 'Obsidian installed elsewhere?', - 'workspace.obsidianConfigDirLabel': 'Obsidian config folder', - 'workspace.obsidianConfigDirHint': - 'Path to the folder containing obsidian.json (e.g. ~/.config/obsidian). Leave blank to auto-detect.', - 'workspace.obsidianConfigDirPlaceholder': '~/.config/obsidian', - 'workspace.graphLoadFailed': 'Falha ao carregar grafo de memória', - 'workspace.loadingGraph': 'Carregando grafo de memória...', - 'workspace.graphViewMode': 'Modo de visualização do grafo de memória', - 'workspace.trees': 'Árvores', - 'workspace.contacts': 'Contatos', - 'graph.noContactMentions': 'Nenhuma menção de contato', - 'graph.noMemory': 'Sem memória', - 'graph.source': 'Fonte', - 'graph.topic': 'Tópico', - 'graph.global': 'Global', - 'graph.document': 'Documento', - 'graph.contact': 'Contato', - 'graph.nodes': 'nós', - 'graph.parentChild': 'pai-filho', - 'graph.documentContact': 'documento-contato', - 'graph.link': 'link', - 'graph.links': 'links', - 'graph.children': 'filhos', - 'graph.clickToOpenObsidian': 'Clique para abrir no Obsidian', - 'graph.person': 'Pessoa', - 'modal.dontShowAgain': 'Não mostrar sugestões semelhantes', - 'reflections.loading': 'Carregando reflexões...', - 'reflections.empty': 'Nenhuma reflexão ainda', - 'reflections.title': 'Reflexões', - 'reflections.proposedAction': 'Ação Proposta', - 'reflections.act': 'Agir', - 'reflections.dismiss': 'Dispensar', - 'whatsapp.chatsSynced': 'chats sincronizados', - 'whatsapp.chatSynced': 'chat sincronizado', - 'sync.active': 'Ativo', - 'sync.recent': 'Recente', - 'sync.idle': 'Inativo', - 'sync.memorySources': 'Fontes de Memória', - 'sync.noConnectedSources': 'Nenhuma fonte conectada', - 'sync.chunks': 'blocos', - 'sync.lastChunk': 'Último bloco:', - 'sync.pending': 'pendente', - 'sync.processed': 'processado', - 'sync.syncing': 'Sincronizando…', - 'sync.sync': 'Sincronizar', - 'sync.failedToLoad': 'Falha ao carregar status de sincronização', - 'sync.noContent': - 'Nenhum conteúdo foi sincronizado na memória ainda. Conecte uma integração para começar.', - 'memorySources.title': 'Memory Sources', - 'memorySources.empty': 'No memory sources yet. Add one to start feeding memory.', - 'memorySources.loadingConnections': 'Loading connections…', - 'memorySources.noConnections': - 'No active Composio connections found. Connect an integration first.', - 'memorySources.pickConnection': 'Pick a connection', - 'memorySources.selectConnection': '— Select a connection —', - 'memorySources.composioListFailed': 'Failed to load Composio connections.', - 'memorySources.browse': 'Browse…', - 'memorySources.folderPathPlaceholder': '/Users/you/notes', - 'memorySources.globPatternPlaceholder': '**/*.md', - 'memorySources.repoUrlPlaceholder': 'https://github.com/org/repo', - 'memorySources.branchPlaceholder': 'main', - 'memorySources.feedUrlPlaceholder': 'https://example.com/feed.xml', - 'memorySources.pageUrlPlaceholder': 'https://example.com/article', - 'memorySources.cssSelectorPlaceholder': 'article', - 'memorySources.searchQueryPlaceholder': 'from:user AI safety', - 'memorySources.kind.composio': 'Integration', - 'memorySources.kind.folder': 'Local Folder', - 'memorySources.kind.github_repo': 'GitHub Repo', - 'memorySources.kind.twitter_query': 'Twitter Search', - 'memorySources.kind.rss_feed': 'RSS Feed', - 'memorySources.kind.web_page': 'Web Page', - 'memorySources.sync.successTitle': 'Syncing', - 'memorySources.sync.successMessage': 'Progress will appear shortly.', - 'memorySources.sync.failedTitle': 'Sync failed:', - 'time.justNow': 'just now', - 'time.secondsAgoSuffix': 's ago', - 'time.minutesAgoSuffix': 'm ago', - 'time.hoursAgoSuffix': 'h ago', - 'time.daysAgoSuffix': 'd ago', - 'memorySources.customSources': 'Custom Sources', - 'memorySources.addSource': 'Add Source', - 'memorySources.noCustomSources': - 'No custom sources yet. Add a folder, GitHub repo, RSS feed, or web page to start.', - 'memorySources.pickKind': 'What kind of source do you want to add?', - 'memorySources.backToKinds': 'Back to source types', - 'memorySources.label': 'Label', - 'memorySources.labelPlaceholder': 'My research notes', - 'memorySources.add': 'Add', - 'memorySources.adding': 'Adding…', - 'memorySources.added': 'Source added', - 'memorySources.removed': 'Source removed', - 'memorySources.remove': 'Remove', - 'memorySources.enable': 'Enable', - 'memorySources.disable': 'Disable', - 'memorySources.toggleFailed': 'Toggle failed', - 'memorySources.removeFailed': 'Remove failed', - 'memorySources.folderPath': 'Folder path', - 'memorySources.globPattern': 'Glob pattern', - 'memorySources.repoUrl': 'Repository URL', - 'memorySources.branch': 'Branch', - 'memorySources.feedUrl': 'Feed URL', - 'memorySources.pageUrl': 'Page URL', - 'memorySources.cssSelector': 'CSS selector (optional)', - 'memorySources.searchQuery': 'Search query', - 'backend.aiBackend': 'Backend de IA', - 'backend.cloud': 'Nuvem', - 'backend.recommended': 'Recomendado', - 'backend.cloudDescription': - 'Modelos rápidos e poderosos hospedados em nossos servidores. Pronto para usar imediatamente.', - 'backend.privacyNote': 'Nenhum dado pessoal, mensagem ou chave é enviado aos nossos servidores.', - 'backend.local': 'Local', - 'backend.advanced': 'Avançado', - 'backend.localDescription': - 'Rode modelos na sua própria máquina usando Ollama. Total privacidade, requer configuração.', - 'backend.ramRecommended': '16GB+ de RAM recomendado', - 'subconscious.tasks': 'tarefas', - 'subconscious.ticks': 'ticks', - 'subconscious.last': 'Último', - 'subconscious.failed': 'falhou', - 'subconscious.tickInterval': 'Intervalo de Tick', - 'subconscious.runNow': 'Executar Agora', - 'subconscious.providerUnavailableTitle': 'Subconsciente pausado', - 'subconscious.providerSettings': 'Configurações de IA', - 'subconscious.approvalNeeded': 'Aprovação Necessária', - 'subconscious.requiresApproval': 'Requer aprovação', - 'subconscious.fixInConnections': 'Corrigir em Conexões', - 'subconscious.goAhead': 'Prosseguir', - 'subconscious.activeTasks': 'Tarefas Ativas', - 'subconscious.noActiveTasks': 'Nenhuma tarefa ativa', - 'subconscious.default': 'Padrão', - 'subconscious.addTaskPlaceholder': 'Adicionar uma nova tarefa...', - 'subconscious.activityLog': 'Registro de Atividades', - 'subconscious.noActivity': 'Nenhuma atividade ainda', - 'subconscious.decision.nothingNew': 'Nada novo', - 'subconscious.decision.completed': 'Concluído', - 'subconscious.decision.evaluating': 'Avaliando', - 'subconscious.decision.waitingApproval': 'Aguardando aprovação', - 'subconscious.decision.failed': 'Falhou', - 'subconscious.decision.cancelled': 'Cancelado', - 'subconscious.decision.skipped': 'Pulado', - 'actionable.complete': 'Concluir', - 'actionable.dismiss': 'Dispensar', - 'actionable.snooze': 'Adiar', - 'actionable.new': 'Novo', - 'stats.storage': 'Armazenamento', - 'stats.files': 'arquivos', - 'stats.documents': 'Documentos', - 'stats.today': 'hoje', - 'stats.namespaces': 'Namespaces', - 'stats.relations': 'Relações', - 'stats.firstMemory': 'Primeira Memória', - 'stats.latest': 'Mais Recente', - 'stats.sessions': 'Sessões', - 'stats.tokens': 'tokens', - 'bootCheck.invalidUrl': 'Por favor, insira uma URL de runtime.', - 'bootCheck.urlMustStartWith': 'A URL precisa começar com http:// ou https://', - 'bootCheck.validUrlRequired': - 'Isso não parece uma URL válida (tente https://core.example.com/rpc)', - 'bootCheck.tokenRequired': 'Vamos precisar de um token de autenticação para conectar.', - 'bootCheck.chooseCoreMode': 'Selecionar um Runtime', - 'bootCheck.connectToCore': 'Conectar ao Seu Runtime', - 'bootCheck.desktopDescription': - 'O OpenHuman precisa de um runtime para pensar. Escolha onde ele deve ficar.', - 'bootCheck.webDescription': - 'Na web, o OpenHuman conecta-se a um runtime que você controla. Insira o URL e o token de autenticação abaixo, ou baixe o app desktop para rodar um na sua máquina.', - 'bootCheck.preferDesktop': 'Prefere manter tudo no seu próprio dispositivo?', - 'bootCheck.downloadDesktop': 'Baixar o App Desktop', - 'bootCheck.localRecommended': 'Rodar Localmente (Recomendado)', - 'bootCheck.localDescription': - 'Roda aqui no seu computador. Mais rápido, totalmente privado, sem nada para configurar.', - 'bootCheck.cloudMode': 'Rodar na Nuvem (Complexo)', - 'bootCheck.cloudDescription': - 'Conecte a um runtime que você hospeda em outro lugar. Fica online 24×7 para que você não precise manter este dispositivo ligado.', - 'bootCheck.coreRpcUrl': 'URL do Runtime', - 'bootCheck.rpcUrlPlaceholder': 'https://core.example.com/rpc', - 'bootCheck.authToken': 'Token de Autenticação', - 'bootCheck.bearerTokenPlaceholder': 'O token bearer do seu runtime remoto', - 'bootCheck.storedLocally': 'Mantido apenas neste dispositivo. Enviado como ', - 'bootCheck.testing': 'Testando…', - 'bootCheck.testConnection': 'Testar Conexão', - 'bootCheck.connectedOk': 'Conectado. Tudo pronto.', - 'bootCheck.authFailed': 'Esse token não funcionou. Verifique-o e tente novamente.', - 'bootCheck.unreachablePrefix': 'Não foi possível alcançar:', - 'bootCheck.checkingCore': 'Ativando seu runtime…', - 'bootCheck.cannotReach': 'Não Consigo Alcançar o Runtime', - 'bootCheck.cannotReachDesc': - 'Não foi possível conectar ao seu runtime. Deseja tentar um diferente?', - 'bootCheck.switchMode': 'Escolher um Runtime Diferente', - 'bootCheck.quit': 'Sair', - 'bootCheck.legacyDetected': 'Runtime de Segundo Plano Legado Detectado', - 'bootCheck.legacyDescription': - 'Um daemon OpenHuman instalado separadamente já está rodando neste dispositivo. Precisamos removê-lo antes que o runtime integrado possa assumir.', - 'bootCheck.removing': 'Removendo…', - 'bootCheck.removeContinue': 'Remover e Continuar', - 'bootCheck.localNeedsRestart': 'O Runtime Local Precisa de uma Reinicialização', - 'bootCheck.localNeedsRestartDesc': - 'Seu runtime local está em uma versão diferente deste app. Uma reinicialização rápida vai sincronizá-los.', - 'bootCheck.restarting': 'Reiniciando…', - 'bootCheck.restartCore': 'Reiniciar Runtime', - 'bootCheck.cloudNeedsUpdate': 'O Runtime na Nuvem Precisa de uma Atualização', - 'bootCheck.cloudNeedsUpdateDesc': - 'Seu runtime na nuvem está em uma versão diferente deste app. Execute o atualizador para sincronizá-los.', - 'bootCheck.updating': 'Atualizando…', - 'bootCheck.updateCloudCore': 'Atualizar Runtime na Nuvem', - 'bootCheck.versionCheckFailed': 'Verificação de Versão do Runtime Falhou', - 'bootCheck.versionCheckFailedDesc': - 'Seu runtime está ativo, mas não está reportando sua versão. Pode estar desatualizado. Reinicie ou atualize-o para continuar.', - 'bootCheck.working': 'Trabalhando…', - 'bootCheck.restartUpdateCore': 'Reiniciar / Atualizar Runtime', - 'bootCheck.unexpectedError': 'Erro Inesperado na Verificação de Inicialização', - 'bootCheck.actionFailed': 'Algo deu errado. Por favor, tente novamente.', - 'bootCheck.portConflictTitle': 'Não foi possível iniciar o motor do aplicativo', - 'bootCheck.portConflictBody': - 'Outro processo está usando a porta de rede que o OpenHuman precisa. Tentaremos corrigir isso automaticamente.', - 'bootCheck.portConflictFixButton': 'Corrigir automaticamente', - 'bootCheck.portConflictFixing': 'Corrigindo…', - 'bootCheck.portConflictFixFailed': - 'A correção automática não funcionou. Reinicie o computador e tente novamente.', - 'notifications.justNow': 'agora mesmo', - 'notifications.minAgo': '{n}min atrás', - 'notifications.hrAgo': '{n}h atrás', - 'notifications.dayAgo': '{n}d atrás', - 'notifications.category.messages': 'Mensagens', - 'notifications.category.agents': 'Agentes', - 'notifications.category.skills': 'Habilidades', - 'notifications.category.system': 'Sistema', - 'notifications.category.meetings': 'Reuniões', - 'notifications.category.reminders': 'Lembretes', - 'notifications.category.important': 'Importante', - 'about.update.status.checking': 'Verificando...', - 'about.update.status.available': 'v{version} disponível', - 'about.update.status.availableNoVersion': 'Atualização disponível', - 'about.update.status.downloading': 'Baixando...', - 'about.update.status.readyToInstall': 'v{version} pronta para instalar', - 'about.update.status.readyToInstallNoVersion': - 'Uma nova versão foi baixada e está pronta. Reinicie para aplicar.', - 'about.update.status.installing': 'Instalando...', - 'about.update.status.restarting': 'Reiniciando...', - 'about.update.status.upToDate': 'Você está usando a versão mais recente.', - 'about.update.status.error': 'Falha na verificação de atualização', - 'about.update.status.default': 'Verificar atualizações', - 'welcome.connectionFailed': 'Falha na conexão: {status} {statusText}', - 'welcome.connectionFailedMsg': 'Falha na conexão: {message}', - 'welcome.continueLocally': 'Continuar localmente', - 'welcome.localSessionStarting': 'Iniciando sessão local...', - 'welcome.localSessionDesc': 'Usa um perfil local offline e ignora TinyHumans OAuth.', - 'chat.agentChatDesc': 'Abrir uma sessão de chat direto com o agente.', - 'channels.activeRouteValue': '{channel} via {authMode}', - 'privacy.dataKind.messages': 'Mensagens', - 'privacy.dataKind.agents': 'Agentes', - 'privacy.dataKind.skills': 'Habilidades', - 'privacy.dataKind.system': 'Sistema', - 'privacy.dataKind.meetings': 'Reuniões', - 'privacy.dataKind.reminders': 'Lembretes', - 'privacy.dataKind.important': 'Importante', - 'onboarding.enableLocalAI': 'Ativar IA Local', - 'onboarding.skills.status.available': 'Disponível', - 'onboarding.skills.status.connected': 'Conectado', - 'onboarding.skills.status.connecting': 'Conectando', - 'onboarding.skills.status.error': 'Erro', - 'onboarding.skills.status.unavailable': 'Indisponível', - 'composio.statusUnavailable': 'Status indisponível', - 'composio.envVarOverrides': 'está definida, ela substitui esta configuração.', - 'memory.day.sun': 'Dom', - 'memory.day.mon': 'Seg', - 'memory.day.tue': 'Ter', - 'memory.day.wed': 'Qua', - 'memory.day.thu': 'Qui', - 'memory.day.fri': 'Sex', - 'memory.day.sat': 'Sáb', - 'memory.ingesting': 'Ingerindo', - 'memory.ingestionQueued': 'Na fila', - 'memory.ingestingTitle': 'Ingerindo {title}', - 'mic.noAudioCaptured': 'Nenhum áudio capturado', - 'mic.noSpeechDetected': 'Nenhuma fala detectada', - 'mic.lowConfidenceResult': 'Não foi possível entender o áudio com clareza — tente novamente', - 'mic.failedToStopRecording': 'Falha ao parar a gravação: {message}', - 'mic.transcriptionFailed': 'Falha na transcrição: {message}', - 'reflections.kind.retrospective': 'Retrospectiva', - 'reflections.kind.derivedFact': 'Fato Derivado', - 'reflections.kind.moodInsight': 'Insight de Humor', - 'reflections.kind.relationshipInsight': 'Insight de Relacionamento', - 'graph.tooltip.summary': 'Resumo', - 'graph.tooltip.contact': 'Contato', - 'localModel.usage.never': 'Nunca', - 'localModel.usage.mediumLoad': 'Carga média', - 'localModel.usage.lowLoad': 'Carga baixa', - 'localModel.usage.idleMode': 'Modo inativo', - 'localModel.rebootstrapComplete': 'Re-bootstrap do modelo concluído.', - 'localModel.modelsVerified': 'Modelos locais verificados.', - 'accounts.addModal.allConnected': 'Todos conectados', - 'accounts.addModal.title': 'Adicionar conta', - 'accounts.respondQueue.empty': 'Vazio', - 'accounts.respondQueue.hide': 'Ocultar fila de respostas', - 'accounts.respondQueue.loadFailed': 'Falha ao carregar fila de respostas', - 'accounts.respondQueue.loading': 'Carregando fila…', - 'accounts.respondQueue.pending': 'Pendente', - 'accounts.respondQueue.show': 'Mostrar fila de respostas', - 'accounts.respondQueue.title': 'Fila de respostas', - 'accounts.webviewHost.almostReady': 'Quase pronto...', - 'accounts.webviewHost.loadTimeout': 'Tempo limite de carregamento do webview', - 'accounts.webviewHost.loading': 'Carregando {providerName}...', - 'accounts.webviewHost.loadingAccount': 'Carregando conta', - 'accounts.webviewHost.restoringSession': 'Restaurando sessão...', - 'accounts.webviewHost.retryLoading': 'Tentar carregar novamente', - 'accounts.webviewHost.takingLonger': '{providerName} está demorando mais do que o esperado.', - 'accounts.webviewHost.timeoutHint': 'Dica de timeout', - 'app.connectionBadge.composio': 'Composio', - 'app.connectionBadge.messaging': 'Mensagens', - 'app.connectionIndicator.connected': 'Conectado ao OpenHuman AI 🚀', - 'app.connectionIndicator.connecting': 'Conectando', - 'app.connectionIndicator.coreOffline': 'Core offline', - 'app.connectionIndicator.disconnected': 'Desconectado', - 'app.connectionIndicator.offline': 'Offline', - 'app.connectionIndicator.reconnecting': 'Reconectando…', - 'app.errorFallback.componentStack': 'Pilha de componentes', - 'app.errorFallback.downloadLatest': 'Baixar mais recente', - 'app.errorFallback.heading': 'Título', - 'app.errorFallback.hint': 'Dica', - 'app.errorFallback.reloadApp': 'Recarregar app', - 'app.errorFallback.subheading': 'Subtítulo', - 'app.errorFallback.tryRecover': 'Tentar recuperar', - 'app.localAiDownload.installing': 'Instalando...', - 'app.localAiDownload.preparing': 'Preparando...', - 'app.openhumanLink.accounts.continueWith': 'Continuar com login de {label}', - 'app.openhumanLink.accounts.done': 'Concluído', - 'app.openhumanLink.accounts.intro': 'Introdução', - 'app.openhumanLink.accounts.webviewNote': 'Nota do webview', - 'app.openhumanLink.billing.openDashboard': 'Abrir painel', - 'app.openhumanLink.billing.stayOnTrial': 'Ficar no período de teste', - 'app.openhumanLink.billing.trialCredit': 'Crédito de teste', - 'app.openhumanLink.billing.trialDesc': 'Descrição do teste', - 'app.openhumanLink.defaultBody': - 'Ainda não disponível no popup. Abra a página completa de configurações quando precisar.', - 'app.openhumanLink.discord.intro': 'Introdução', - 'app.openhumanLink.discord.openInvite': 'Abrir convite', - 'app.openhumanLink.discord.perk1': 'Benefício 1', - 'app.openhumanLink.discord.perk2': 'Benefício 2', - 'app.openhumanLink.discord.perk3': 'Benefício 3', - 'app.openhumanLink.discord.perk4': 'Benefício 4', - 'app.openhumanLink.done': 'Concluído', - 'app.openhumanLink.loadingChannelSetup': 'Carregando configuração do canal', - 'app.openhumanLink.maybeLater': 'Talvez depois', - 'app.openhumanLink.notifications.asking': 'Solicitando ao SO…', - 'app.openhumanLink.notifications.blocked': 'Bloqueado', - 'app.openhumanLink.notifications.blockedStep1': 'Passo 1 bloqueado', - 'app.openhumanLink.notifications.blockedStep2': 'Passo 2 bloqueado', - 'app.openhumanLink.notifications.blockedStep3': 'Passo 3 bloqueado', - 'app.openhumanLink.notifications.intro': 'Introdução', - 'app.openhumanLink.notifications.promptHint': 'Dica de solicitação', - 'app.openhumanLink.notifications.retry': 'Tentar notificação de teste novamente', - 'app.openhumanLink.notifications.send': 'Enviar notificação de teste', - 'app.openhumanLink.notifications.sendFailed': 'Não foi possível enviar: {error}', - 'app.openhumanLink.notifications.sent': - 'Notificação de teste enviada. Se você não a recebeu, vá em Configurações do Sistema → Notificações → OpenHuman, ative Permitir Notificações e defina o Estilo de Banner como Persistente.', - 'app.openhumanLink.skipForNow': 'Pular por enquanto', - 'app.openhumanLink.telegramUnavailable': 'Telegram indisponível', - 'app.openhumanLink.title.accounts': 'Conecte seus apps', - 'app.openhumanLink.title.billing': 'Cobrança e créditos', - 'app.openhumanLink.title.discord': 'Entrar na comunidade', - 'app.openhumanLink.title.messaging': 'Conectar um canal de chat', - 'app.openhumanLink.title.notifications': 'Permitir notificações', - 'app.persistRehydration.body': 'Corpo', - 'app.persistRehydration.heading': 'Título', - 'app.persistRehydration.resetCta': 'Redefinindo…', - 'app.persistRehydration.resetting': 'Redefinindo…', - 'app.routeLoading.initializing': 'Inicializando OpenHuman...', - 'app.update.currentlyOn': '{version}', - 'app.update.errorFallback': 'Algo deu errado durante a atualização.', - 'app.update.header.default': 'Atualizar', - 'app.update.header.error': 'Falha na atualização', - 'app.update.header.installing': 'Instalando atualização', - 'app.update.header.readyToInstall': 'Atualização pronta para instalar', - 'app.update.header.restarting': 'Reiniciando…', - 'app.update.later': 'Depois', - 'app.update.newVersionReady': 'Uma nova versão está pronta para instalar.', - 'app.update.progress.downloaded': '{amount} baixados', - 'app.update.progress.installing': 'Instalando a nova versão…', - 'app.update.progress.restarting': 'Relançando o app…', - 'app.update.progress.working': '{percent}%', - 'app.update.restartNote': 'Nota de reinicialização', - 'app.update.restartNow': 'Reiniciar agora', - 'app.update.versionReady': 'Versão {newVersion} está pronta para instalar.', - 'channels.discord.accountLinked': 'Conta vinculada', - 'channels.discord.connect': 'Conectar', - 'channels.discord.linkTokenExpired': 'Token de vinculação expirado. Por favor, tente novamente.', - 'channels.discord.linkTokenInstruction': '{token}', - 'channels.discord.linkTokenLabel': 'Rótulo do token de vinculação', - 'channels.discord.linkTokenOnce': 'Token de vinculação único', - 'channels.discord.picker.allPermissionsOk': - 'O bot tem todas as permissões necessárias neste canal.', - 'channels.discord.picker.botNotInServers': 'Bot não está nos servidores', - 'channels.discord.picker.category': 'Categoria', - 'channels.discord.picker.channel': 'Canal', - 'channels.discord.picker.checkingPermissions': 'Verificando permissões', - 'channels.discord.picker.loadingChannels': 'Carregando canais...', - 'channels.discord.picker.loadingServers': 'Carregando servidores...', - 'channels.discord.picker.missingPermissions': 'Permissões faltando', - 'channels.discord.picker.noChannels': 'Nenhum canal de texto encontrado', - 'channels.discord.picker.noServers': 'Nenhum servidor encontrado', - 'channels.discord.picker.selectChannel': 'Selecione um canal', - 'channels.discord.picker.selectServer': 'Selecione um servidor', - 'channels.discord.picker.server': 'Servidor', - 'channels.discord.picker.serverChannelSelection': 'Seleção de Servidor e Canal', - 'channels.discord.savedRestartRequired': 'Canal salvo. Reinicie o app para ativá-lo.', - 'channels.telegram.connect': 'Conectar', - 'channels.telegram.managedDmConnecting': 'DM gerenciado conectando', - 'channels.telegram.managedDmTimeout': 'Timeout de DM gerenciado', - 'channels.telegram.reconnect': 'Reconectar', - 'channels.telegram.savedRestartRequired': 'Canal salvo. Reinicie o app para ativá-lo.', - 'channels.web.alwaysAvailable': 'Sempre disponível', - 'channels.discord.displayName': 'Discord', - 'channels.discord.description': 'Envie e receba mensagens via Discord.', - 'channels.discord.authMode.bot_token.description': 'Forneça seu próprio token de bot Discord.', - 'channels.discord.authMode.oauth.description': - 'Instale o bot OpenHuman em seu servidor Discord via OAuth.', - 'channels.discord.authMode.managed_dm.description': - 'Vincule sua conta pessoal Discord ao bot OpenHuman.', - 'channels.discord.fields.bot_token.label': 'Token de bot', - 'channels.discord.fields.bot_token.placeholder': 'Seu token de bot Discord', - 'channels.discord.fields.guild_id.label': 'ID do servidor (guilda)', - 'channels.discord.fields.guild_id.placeholder': 'Opcional: restringir a um servidor específico', - 'channels.telegram.displayName': 'Telegram', - 'channels.telegram.description': 'Enviar e receber mensagens via Telegram.', - 'channels.telegram.authMode.managed_dm.description': - 'Envie uma mensagem diretamente para o bot OpenHuman Telegram.', - 'channels.telegram.authMode.bot_token.description': - 'Forneça seu próprio token de bot Telegram de @BotFather.', - 'channels.telegram.fields.bot_token.label': 'Token de bot', - 'channels.telegram.fields.bot_token.placeholder': '123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11', - 'channels.telegram.fields.allowed_users.label': 'Usuários permitidos', - 'channels.telegram.fields.allowed_users.placeholder': - 'Separados por vírgula Telegram nomes de usuário', - 'channels.web.displayName': 'Web', - 'channels.web.description': 'Bate-papo por meio da interface da web integrada.', - 'channels.web.authMode.managed_dm.description': - 'Use o chat da web incorporado – não é necessária nenhuma configuração.', - 'welcome.continueLocallyExperimental': 'Continuar localmente (experimental)', - 'channels.yuanbao.connect': 'Connect', - 'channels.yuanbao.connecting': 'Connecting…', - 'channels.yuanbao.fieldRequired': '{field} is required', - 'channels.yuanbao.reconnect': 'Reconnect', - 'channels.yuanbao.savedRestartRequired': 'Channel saved. Restart the app to activate it.', - 'channels.yuanbao.unexpectedStatus': 'Unexpected connection status: {status}', - 'chat.approval.approve': 'Approve', - 'chat.approval.alwaysAllow': 'Always allow', - 'chat.approval.alwaysAllowHint': 'Stop asking for this tool — add it to your Always-allow list', - 'chat.approval.deciding': 'Working…', - 'chat.approval.deny': 'Deny', - 'chat.approval.error': 'Could not record your decision — try again.', - 'chat.approval.fallback': 'The agent wants to run an action that needs your approval.', - 'chat.approval.title': 'Approval needed', - 'chat.approval.tool': 'Tool:', -}; - -export default pt3; diff --git a/app/src/lib/i18n/chunks/pt-4.ts b/app/src/lib/i18n/chunks/pt-4.ts deleted file mode 100644 index d404e51f3..000000000 --- a/app/src/lib/i18n/chunks/pt-4.ts +++ /dev/null @@ -1,491 +0,0 @@ -import type { TranslationMap } from '../types'; - -// Portuguese (Português) chunk 4/5. Translated from chunks/en-4.ts. -const pt4: TranslationMap = { - 'chat.unsubscribeApproval.approve': 'Aprovar e Cancelar Inscrição', - 'chat.unsubscribeApproval.approved': '✓ Inscrição cancelada com sucesso.', - 'chat.unsubscribeApproval.denied': '✕ Solicitação negada.', - 'chat.unsubscribeApproval.deny': 'Negar', - 'chat.unsubscribeApproval.processing': 'Processando...', - 'chat.unsubscribeApproval.title': 'Solicitação de Cancelamento', - 'commandPalette.ariaLabel': 'Paleta de comandos', - 'commandPalette.description': 'Descrição', - 'commandPalette.label': 'Comandos', - 'commandPalette.noResults': 'Sem resultados', - 'commandPalette.placeholder': 'Digite um comando ou pesquise…', - 'commandPalette.searchAria': 'Pesquisar comandos', - 'commandPalette.shortcutHint': 'Pressione ? para ver todos os atalhos', - 'commandPalette.title': 'Paleta de comandos', - 'composio.connect.additionalConfigRequired': 'Configuração adicional necessária', - 'composio.connect.atlassianSubdomainHint': 'acme', - 'composio.connect.atlassianSubdomainLabel': 'Rótulo de subdomínio Atlassian', - 'composio.connect.connect': 'Conectar', - 'composio.connect.connectionFailed': 'Falha na conexão (status: {status}).', - 'composio.connect.disconnectFailed': 'Falha ao desconectar: {msg}', - 'composio.connect.disconnecting': 'Desconectando…', - 'composio.connect.idleDescription': 'Conecte sua', - 'composio.connect.idleDescriptionSuffix': - 'conta. Abriremos uma janela do navegador, você aprova o acesso lá, e este app detectará a conexão automaticamente.', - 'composio.connect.isConnected': 'está conectado.', - 'composio.connect.manage': 'Gerenciar', - 'composio.connect.needsSubdomain': 'Para conectar', - 'composio.connect.needsSubdomainSuffix': - 'informe seu subdomínio Atlassian (ex.: acme para acme.atlassian.net) e tente novamente.', - 'composio.connect.oauthComplete': 'OAuth a concluir…', - 'composio.connect.oauthTimeout': 'Timeout de OAuth', - 'composio.connect.permissions': 'Permissões', - 'composio.connect.permissionsDefault': 'Leitura + Escrita ativadas por padrão', - 'composio.connect.permissionsNote': 'pode expor', - 'composio.connect.permissionsNoteSuffix': - 'As permissões do agente do OpenHuman são controladas abaixo como botões de leitura, escrita e admin.', - 'composio.connect.reopenBrowser': 'Reabrir navegador', - 'composio.connect.requestingUrl': 'Solicitando URL de conexão…', - 'composio.connect.retryConnection': 'Tentar conexão novamente', - 'composio.connect.scopeLoadError': 'Não foi possível carregar preferências de escopo: {msg}', - 'composio.connect.scopeSaveError': 'Não foi possível salvar escopo {key}: {msg}', - 'composio.connect.subdomainInvalid': - 'Informe apenas o subdomínio curto (ex.: "acme"), não a URL completa. Deve conter apenas letras, números e hífens.', - 'composio.connect.subdomainRequired': - 'Por favor, insira seu subdomínio Atlassian para continuar.', - 'composio.connect.dynamicsOrgNameLabel': 'Nome da organização do Dynamics 365', - 'composio.connect.dynamicsOrgNameHint': - 'Por exemplo, "myorg" para myorg.crm.dynamics.com. Insira apenas o nome curto da organização, não a URL completa.', - 'composio.connect.needsFieldsPrefix': 'Para conectar', - 'composio.connect.needsFieldsSuffix': - 'precisamos de mais algumas informações. Preencha os campos faltantes abaixo e tente novamente.', - 'composio.connect.requiredFieldEmpty': 'Este campo é obrigatório.', - 'composio.connect.wabaIdHint': - 'Encontre-o via GET /me/businesses depois GET /{business_id}/owned_whatsapp_business_accounts usando seu token de acesso do Meta.', - 'composio.connect.wabaIdLabel': 'Rótulo de ID WABA', - 'composio.connect.wabaIdRequired': - 'Por favor, insira seu ID de Conta Empresarial do WhatsApp (WABA ID) para continuar.', - 'composio.connect.waitingFor': 'Aguardando', - 'composio.connect.waitingHint': 'Dica de espera', - 'composio.triggers.heading': 'Gatilhos', - 'composio.triggers.listenFrom': 'Ouvir eventos de', - 'composio.triggers.loadError': 'Não foi possível carregar os gatilhos', - 'composio.triggers.needsConfiguration': 'Precisa de configuração', - 'composio.triggers.noneAvailable': 'Nenhum gatilho disponível no momento para', - 'conversations.taskKanban.moveLeft': 'Mover para esquerda', - 'conversations.taskKanban.moveRight': 'Mover para direita', - 'conversations.taskKanban.title': 'Tarefas', - 'conversations.toolTimeline.turn': 'turno', - 'conversations.toolTimeline.workerThread': 'thread de worker', - 'daemon.serviceBlockingGate.body': 'Corpo', - 'daemon.serviceBlockingGate.downloadHint': 'Dica de download', - 'daemon.serviceBlockingGate.downloadLatest': 'Baixar Versão Mais Recente', - 'daemon.serviceBlockingGate.retryCore': 'Tentar Core Novamente', - 'daemon.serviceBlockingGate.retryFailed': - 'Nova tentativa falhou. Baixe a versão mais recente do app e tente novamente.', - 'daemon.serviceBlockingGate.retrying': 'Tentando novamente...', - 'daemon.serviceBlockingGate.title': 'O core do OpenHuman está indisponível', - 'home.banners.discordSubtitle': 'Subtítulo do Discord', - 'home.banners.discordTitle': 'Entre no Nosso Discord', - 'home.banners.earlyBirdDismiss': 'Dispensar banner de early bird', - 'home.banners.earlyBirdFirstSub': 'primeira assinatura.', - 'home.banners.earlyBirdOn': 'Early bird ativo', - 'home.banners.earlyBirdTitle': 'Os primeiros 1.000 usuários ganham 60% de desconto.', - 'home.banners.earlyBirdUseCode': 'Usar código early bird', - 'home.banners.getSubscription': 'fazer uma assinatura', - 'home.banners.promoCreditsBody': 'Corpo dos créditos promocionais', - 'home.banners.promoCreditsTitle': '{amount}', - 'home.banners.promoCreditsUsage': 'Uso dos créditos promocionais', - 'intelligence.memoryChunk.detail.chunk': 'Bloco', - 'intelligence.memoryChunk.detail.copyChunkId': 'Copiar ID do bloco', - 'intelligence.memoryChunk.detail.embeddingInfo': 'bge-m3 1024dim', - 'intelligence.memoryChunk.detail.noEmbedding': 'Sem embedding', - 'intelligence.memoryChunk.letterhead.from': 'de', - 'intelligence.memoryChunk.letterhead.to': 'para', - 'intelligence.memoryChunk.mentioned.chunkOne': '1 pedaço', - 'intelligence.memoryChunk.mentioned.chunkOther': '{count} pedaços', - 'intelligence.memoryChunk.mentioned.heading': 'm e n c i o n a d o', - 'intelligence.memoryChunk.scoreBars.ariaScore': '{name} pontuação {pct} por cento', - 'intelligence.memoryChunk.scoreBars.atThreshold': 'em {threshold}', - 'intelligence.memoryChunk.scoreBars.dropped': 'descartado', - 'intelligence.memoryChunk.scoreBars.heading': 'p o r q u ê m a n t i d o', - 'intelligence.memoryChunk.scoreBars.kept': 'mantido', - 'intelligence.diagram.title': 'Architecture Diagram', - 'intelligence.diagram.description': - 'Latest local architecture output from the configured diagram endpoint.', - 'intelligence.diagram.refresh': 'Refresh', - 'intelligence.diagram.refreshAria': 'Refresh diagram', - 'intelligence.diagram.emptyTitle': 'No diagram available yet', - 'intelligence.diagram.emptyDescription': - 'Generate an architecture diagram from the orchestrator and this panel will refresh from the configured local endpoint.', - 'intelligence.diagram.skillInstallCommand': 'npx skills add yizhiyanhua-ai/fireworks-tech-graph', - 'intelligence.diagram.promptExample': - 'Generate an architecture diagram of the current swarm in dark terminal style', - 'intelligence.diagram.imageAlt': 'Latest generated OpenHuman architecture diagram', - 'intelligence.diagram.refreshesEvery': 'Refreshes every {seconds}s', - 'intelligence.memoryText.entityTypePrefix': 'Tipo de entidade', - 'intelligence.screenDebug.active': 'Ativo', - 'intelligence.screenDebug.app': 'Aplicativo', - 'intelligence.screenDebug.bounds': 'Limites', - 'intelligence.screenDebug.captureAlt': 'Resultado do teste de captura', - 'intelligence.screenDebug.captureFailed': 'Falhou', - 'intelligence.screenDebug.captureSuccess': 'Sucesso', - 'intelligence.screenDebug.captureTest': 'Teste de captura', - 'intelligence.screenDebug.capturing': 'Capturando', - 'intelligence.screenDebug.frames': 'Quadros', - 'intelligence.screenDebug.idle': 'Inativo', - 'intelligence.screenDebug.lastApp': 'Último App', - 'intelligence.screenDebug.mode': 'Modo', - 'intelligence.screenDebug.permAccessibility': 'Permissão de acessibilidade', - 'intelligence.screenDebug.permInput': 'Permissão de entrada', - 'intelligence.screenDebug.permScreen': 'Acessibilidade', - 'intelligence.screenDebug.permissions': 'Permissões', - 'intelligence.screenDebug.platformNotSupported': 'Plataforma não suportada', - 'intelligence.screenDebug.recentVisionSummaries': 'Resumos de visão recentes', - 'intelligence.screenDebug.session': 'Sessão', - 'intelligence.screenDebug.size': 'Tamanho', - 'intelligence.screenDebug.status': 'Status', - 'intelligence.screenDebug.testCapture': 'Testar captura', - 'intelligence.screenDebug.time': 'Tempo', - 'intelligence.screenDebug.title': 'Título', - 'intelligence.screenDebug.unknown': 'Desconhecido', - 'intelligence.screenDebug.visionQueue': 'Fila de Visão', - 'intelligence.screenDebug.visionState': 'Estado de Visão', - 'intelligence.tasks.activeBoardOne': '1 quadro ativo entre conversas', - 'intelligence.tasks.activeBoardOther': '{count} quadros ativos entre conversas', - 'intelligence.tasks.empty': 'Nenhum quadro de tarefas de agente ainda', - 'intelligence.tasks.emptyHint': 'Dica de vazio', - 'intelligence.tasks.failedToLoad': 'Falha ao carregar', - 'intelligence.tasks.live': 'ao vivo', - 'intelligence.tasks.loadingBoards': 'Carregando quadros de tarefas…', - 'intelligence.tasks.threadPrefix': 'Tópico {thread}', - 'intelligence.tasks.subtitle': 'Your tasks and agent task boards across the workspace.', - 'intelligence.tasks.newTask': 'New task', - 'intelligence.tasks.personalBoardTitle': 'Agent Tasks', - 'intelligence.tasks.personalEmpty': 'No personal tasks yet', - 'intelligence.tasks.composer.title': 'New task', - 'intelligence.tasks.composer.titleLabel': 'Title', - 'intelligence.tasks.composer.titlePlaceholder': 'What needs to be done?', - 'intelligence.tasks.composer.statusLabel': 'Status', - 'intelligence.tasks.composer.attachLabel': 'Attach to conversation', - 'intelligence.tasks.composer.attachNone': 'Personal (no conversation)', - 'intelligence.tasks.composer.objectiveLabel': 'Objective', - 'intelligence.tasks.composer.objectivePlaceholder': 'Optional — the desired outcome', - 'intelligence.tasks.composer.notesLabel': 'Notes', - 'intelligence.tasks.composer.notesPlaceholder': 'Optional notes', - 'intelligence.tasks.composer.create': 'Create task', - 'intelligence.tasks.composer.creating': 'Creating…', - 'intelligence.tasks.composer.createFailed': "Couldn't create the task", - 'notifications.card.dismiss': 'Dispensar notificação', - 'notifications.card.importanceTitle': 'Importância: {pct}%', - 'notifications.center.empty': 'Nenhuma notificação ainda', - 'notifications.center.emptyHint': 'Dica de vazio', - 'notifications.center.filterAll': 'Filtrar todos', - 'notifications.center.markAllRead': 'Marcar todos como lidos', - 'notifications.center.title': 'Notificações', - 'oauth.button.loopbackTimeout': - 'Login expirou — o navegador não concluiu o redirecionamento OAuth. Por favor, tente novamente.', - 'oauth.button.connecting': 'Conectando...', - 'oauth.login.continueWith': 'Continuar com', - 'onboarding.contextGathering.buildingDesc': 'Descrição de construção', - 'onboarding.contextGathering.buildingProfile': 'Construindo seu perfil...', - 'onboarding.contextGathering.continueToChat': 'Continuar para o chat', - 'onboarding.contextGathering.errorDesc': - 'Não conseguimos montar seu perfil completo agora, mas tudo bem — você pode continuar e seu perfil será construído ao longo do tempo.', - 'onboarding.contextGathering.coreAlive': - 'Núcleo acessível — a primeira inicialização pode demorar um minuto.', - 'onboarding.contextGathering.coreAliveProbing': 'Verificando a conexão com o núcleo…', - 'onboarding.contextGathering.coreUnreachable': - 'O núcleo não está respondendo. Você pode continuar e tentar novamente mais tarde.', - 'onboarding.contextGathering.stillWorkingDesc': - 'A primeira inicialização pode levar 30–60 segundos enquanto preparamos seu modelo local e ferramentas. Você pode continuar para o chat a qualquer momento — a construção do perfil continua em segundo plano.', - 'onboarding.contextGathering.stillWorkingTitle': 'Ainda construindo seu perfil…', - 'onboarding.contextGathering.title': 'Coleta de Contexto', - 'openhuman.team_list_teams': 'Listar equipes', - 'overlay.ariaAttention': 'Mensagem de atenção', - 'overlay.ariaCompanion': 'Companion ativo', - 'overlay.ariaOrb': 'Orb do OpenHuman', - 'overlay.ariaVoiceActive': 'Entrada de voz ativa', - 'overlay.companion.error': 'Erro', - 'overlay.companion.listening': 'Ouvindo…', - 'overlay.companion.pointing': 'Apontando…', - 'overlay.companion.speaking': 'Falando…', - 'overlay.companion.thinking': 'Pensando…', - 'overlay.orbTitle': 'Arraste para mover · Clique duplo para redefinir posição', - 'pages.settings.account.connections': 'Conexões', - 'pages.settings.account.connectionsDesc': 'Descrição de conexões', - 'pages.settings.account.privacy': 'Privacidade', - 'pages.settings.account.privacyDesc': 'Descrição de privacidade', - 'pages.settings.account.recoveryPhrase': 'Frase de recuperação', - 'pages.settings.account.recoveryPhraseDesc': 'Descrição da frase de recuperação', - 'pages.settings.account.team': 'Equipe', - 'pages.settings.account.teamDesc': 'Descrição de equipe', - 'pages.settings.accountSection.description': - 'Frase de recuperação, equipe, conexões e configurações de privacidade.', - 'pages.settings.accountSection.title': 'Conta', - 'pages.settings.ai.llm': 'LLM', - 'pages.settings.ai.llmDesc': 'Descrição do LLM', - 'pages.settings.ai.voice': 'Voz', - 'pages.settings.ai.voiceDesc': 'Descrição de voz', - 'pages.settings.ai.embeddings': 'Incorporações', - 'pages.settings.ai.embeddingsDesc': 'Modelo de codificação vetorial para recuperação de memória', - 'pages.settings.aiSection.description': - 'Provedores de modelos de linguagem, Ollama local e voz (STT / TTS).', - 'pages.settings.aiSection.title': 'IA', - 'pages.settings.features.desktopCompanion': 'Companion Desktop', - 'pages.settings.features.desktopCompanionDesc': - 'Assistente de voz com consciência da tela — escuta, vê, fala, aponta', - 'pages.settings.features.messagingChannels': 'Canais de mensagens', - 'pages.settings.features.messagingChannelsDesc': 'Descrição dos canais de mensagens', - 'pages.settings.features.notifications': 'Notificações', - 'pages.settings.features.notificationsDesc': 'Descrição de notificações', - 'pages.settings.features.screenAwareness': 'Reconhecimento de tela', - 'pages.settings.features.screenAwarenessDesc': 'Descrição do reconhecimento de tela', - 'pages.settings.features.tools': 'Ferramentas', - 'pages.settings.features.toolsDesc': 'Descrição de ferramentas', - 'pages.settings.featuresSection.description': 'Reconhecimento de tela, mensagens e ferramentas.', - 'pages.settings.featuresSection.title': 'Recursos', - 'privacy.dataKind.credentials': 'Credenciais', - 'privacy.dataKind.derived': 'Derivado', - 'privacy.dataKind.diagnostics': 'Diagnósticos', - 'privacy.dataKind.metadata': 'Metadados', - 'privacy.dataKind.raw': 'Bruto', - 'privacy.whatLeaves.link.label': 'O que sai do meu computador?', - 'rewards.community.achievementsUnlocked': '{unlocked} de {total} conquistas desbloqueadas', - 'rewards.community.connectDiscord': 'Conectar Discord', - 'rewards.community.cumulativeTokens': 'Tokens acumulados', - 'rewards.community.currentStreak': 'Sequência atual', - 'rewards.community.discordLinkedNotInGuild': 'Discord vinculado mas não no servidor', - 'rewards.community.discordMember': 'Entrou no servidor', - 'rewards.community.discordNotLinked': 'Discord não vinculado', - 'rewards.community.discordServer': 'Servidor do Discord', - 'rewards.community.discordStatusUnavailable': 'Status do Discord indisponível', - 'rewards.community.discordWaiting': 'Aguardando Discord', - 'rewards.community.heroSubtitle': 'Subtítulo do herói', - 'rewards.community.heroTitle': 'Título do herói', - 'rewards.community.joinDiscord': 'Entrar no Discord', - 'rewards.community.loadingRewards': 'Carregando recompensas…', - 'rewards.community.locked': 'Desbloqueado', - 'rewards.community.retrying': 'Tentando novamente…', - 'rewards.community.rolesAndRewards': 'Funções e Recompensas', - 'rewards.community.streakDays': '{n}', - 'rewards.community.syncPending': 'Sincronização de recompensas pendente', - 'rewards.community.syncPendingDesc': 'Descrição de sincronização pendente', - 'rewards.community.syncUnavailable': 'Sincronização indisponível', - 'rewards.community.tryAgain': 'Tentando novamente…', - 'rewards.community.unknown': 'Desconhecido', - 'rewards.community.unlocked': 'Desbloqueado', - 'rewards.community.yourProgress': 'Seu Progresso', - 'rewards.coupon.colCode': 'Código', - 'rewards.coupon.colRedeemed': 'Resgatado', - 'rewards.coupon.colReward': 'Recompensa', - 'rewards.coupon.colStatus': 'Status', - 'rewards.coupon.loadingHistory': 'Carregando histórico de recompensas…', - 'rewards.coupon.noCodes': 'Nenhum código de recompensa resgatado ainda.', - 'rewards.coupon.pending': 'Pendente', - 'rewards.coupon.placeholder': 'Código de cupom', - 'rewards.coupon.promoCredits': 'Créditos promocionais', - 'rewards.coupon.recentRedemptions': 'Resgates recentes', - 'rewards.coupon.redeemAccepted': - '{code} aceito. {amount} será desbloqueado após a ação necessária ser concluída.', - 'rewards.coupon.redeemButton': 'Resgatar Código', - 'rewards.coupon.redeemSuccess': '{code} resgatado. {amount} foi adicionado aos seus créditos.', - 'rewards.coupon.redeemedCodes': 'Códigos resgatados', - 'rewards.coupon.redeeming': 'Resgatando...', - 'rewards.coupon.statusApplied': 'Aplicado', - 'rewards.coupon.statusPendingAction': 'Ação pendente', - 'rewards.coupon.statusRedeemed': 'Resgatado', - 'rewards.coupon.subtitle': 'Subtítulo', - 'rewards.coupon.title': 'Resgatar um código de cupom', - 'rewards.referralSection.activity': 'Atividade de indicações', - 'rewards.referralSection.apply': 'Aplicando…', - 'rewards.referralSection.applying': 'Aplicando…', - 'rewards.referralSection.colReferredUser': 'Usuário indicado', - 'rewards.referralSection.colReward': 'Recompensa', - 'rewards.referralSection.colStatus': 'Status', - 'rewards.referralSection.colUpdated': 'Atualizado', - 'rewards.referralSection.completed': 'Concluído', - 'rewards.referralSection.copyCode': 'Copiar código', - 'rewards.referralSection.copyFailed': 'Falha ao copiar', - 'rewards.referralSection.haveCode': 'Tem um código de indicação?', - 'rewards.referralSection.haveCodeDesc': 'Descrição do código', - 'rewards.referralSection.linked': 'Vinculado', - 'rewards.referralSection.linkedCode': '(código {code})', - 'rewards.referralSection.loading': 'Carregando programa de indicações…', - 'rewards.referralSection.noReferrals': 'Sem indicações', - 'rewards.referralSection.pendingReferrals': 'Indicações pendentes', - 'rewards.referralSection.placeholder': 'Código de indicação', - 'rewards.referralSection.share': 'Compartilhar', - 'rewards.referralSection.statusCompleted': 'Status concluído', - 'rewards.referralSection.statusExpired': 'Status expirado', - 'rewards.referralSection.statusJoined': 'Status de ingresso', - 'rewards.referralSection.subtitle': 'Subtítulo', - 'rewards.referralSection.title': 'Convide amigos, ganhe créditos', - 'rewards.referralSection.totalEarned': 'Total ganho', - 'rewards.referralSection.yourCode': 'Seu código', - 'settings.ai.addCloudProvider': 'Adicionar provedor de nuvem', - 'settings.ai.addProvider': 'Salvando…', - 'settings.ai.apiKeyFieldLabel': 'Rótulo do campo de chave de API', - 'settings.ai.apiKeyRequired': 'Por favor, cole sua chave de API para continuar.', - 'settings.ai.apiKeyStoredEncrypted': 'Chave de API armazenada criptografada', - 'settings.ai.apiKeysEncrypted': 'auth-profiles.json', - 'settings.ai.clearStoredKey': 'Limpar chave armazenada', - 'settings.ai.connectProvider': 'Conectar provedor', - 'settings.ai.customRouting': 'Roteamento personalizado', - 'settings.ai.defaultResolvesTo': 'O padrão resolve para', - 'settings.ai.discard': 'Descartar', - 'settings.ai.editProvider': 'Editar provedor', - 'settings.ai.llmProviders': 'Provedores LLM', - 'settings.ai.llmProvidersDesc': 'Descrição dos provedores LLM', - 'settings.ai.localOllama': 'Local (Ollama)', - 'settings.ai.modelLabel': 'Modelo', - 'settings.ai.noCustomProviders': 'Sem provedores personalizados', - 'settings.ai.openAiCompat.authHeaderExample': 'Autorização: Portador ', - 'settings.ai.openAiCompat.authHeaderLabel': 'Cabeçalho de autenticação', - 'settings.ai.openAiCompat.baseUrlLabel': 'Base URL', - 'settings.ai.openAiCompat.baseUrlUnavailable': 'Indisponível', - 'settings.ai.openAiCompat.clearKey': 'Limpar chave', - 'settings.ai.openAiCompat.description': - "Point local harnesses at this /v1 server to route through the providers configured below. Authentication uses a stable key you set here, not the app's internal core bearer.", - 'settings.ai.openAiCompat.keyConfigured': 'Chave configurada', - 'settings.ai.openAiCompat.keyRequired': 'Chave necessária', - 'settings.ai.openAiCompat.rotateKey': 'Girar chave', - 'settings.ai.openAiCompat.setKey': 'Definir chave', - 'settings.ai.openAiCompat.title': 'Endpoint compatível com OpenAI', - 'settings.ai.providerLabel': 'Provedor', - 'settings.ai.routing': 'Roteamento', - 'settings.ai.routingCustom': 'Roteamento personalizado', - 'settings.ai.routingDefault': 'Padrão', - 'settings.ai.routingDesc': 'Descrição do roteamento', - 'settings.ai.saveChanges': 'Salvando…', - 'settings.ai.saving': 'Salvando…', - 'settings.ai.unsavedChange': 'alteração não salva', - 'settings.ai.unsavedChanges': 'alterações não salvas', - 'settings.ai.workloadGroupBackground': 'Grupo de carga de trabalho em segundo plano', - 'settings.ai.workloadGroupChat': 'Grupo de carga de trabalho de chat', - 'settings.autocomplete.appFilter.acceptSuggestion': 'Aceitar sugestão', - 'settings.autocomplete.appFilter.contextOverride': 'Substituição de Contexto (opcional)', - 'settings.autocomplete.appFilter.debugFocus': 'Foco de depuração', - 'settings.autocomplete.appFilter.getSuggestion': 'Obter sugestão', - 'settings.autocomplete.appFilter.liveLogs': 'Logs ao Vivo', - 'settings.autocomplete.appFilter.noLogs': ') :', - 'settings.autocomplete.appFilter.refreshStatus': 'Atualizando…', - 'settings.autocomplete.appFilter.refreshing': 'Atualizando…', - 'settings.autocomplete.appFilter.runtime': 'Tempo de execução', - 'settings.autocomplete.appFilter.test': 'Testar', - 'settings.autocomplete.completionStyle.acceptedCompletion': - '{count} complemento aceito armazenado — usado para personalizar sugestões futuras.', - 'settings.autocomplete.completionStyle.acceptedCompletions': - '{count} complementos aceitos armazenados — usados para personalizar sugestões futuras.', - 'settings.autocomplete.completionStyle.clearHistory': 'Limpando…', - 'settings.autocomplete.completionStyle.clearing': 'Limpando…', - 'settings.autocomplete.completionStyle.debounce': 'Debounce (ms)', - 'settings.autocomplete.completionStyle.enabled': 'Ativado', - 'settings.autocomplete.completionStyle.maxChars': 'Máx. de Caracteres', - 'settings.autocomplete.completionStyle.noHistory': - 'Nenhuma conclusão aceita ainda. Aceite sugestões com Tab para começar a personalizar.', - 'settings.autocomplete.completionStyle.overlayTtl': 'TTL do Overlay (ms)', - 'settings.autocomplete.completionStyle.personalizationHistory': 'Histórico de Personalização', - 'settings.autocomplete.completionStyle.styleExamples': 'Exemplos de Estilo (um por linha)', - 'settings.autocomplete.completionStyle.styleInstructions': 'Instruções de Estilo', - 'settings.billing.autoRecharge.addAmount': 'Adicionar este valor', - 'settings.billing.autoRecharge.addCard': 'Adicionar cartão', - 'settings.billing.autoRecharge.amountHint': 'Dica de valor', - 'settings.billing.autoRecharge.defaultCard': 'Cartão padrão', - 'settings.billing.autoRecharge.lastRechargeFailed': 'Última recarga falhou', - 'settings.billing.autoRecharge.lastRecharged': 'Última recarga', - 'settings.billing.autoRecharge.noCards': 'Sem cartões', - 'settings.billing.autoRecharge.paymentMethods': 'Métodos de Pagamento', - 'settings.billing.autoRecharge.rechargeInProgress': 'Recarga em andamento', - 'settings.billing.autoRecharge.rechargeWhen': 'Recarregar quando o saldo cair abaixo de', - 'settings.billing.autoRecharge.saveSettings': 'Salvando…', - 'settings.billing.autoRecharge.saving': 'Salvando…', - 'settings.billing.autoRecharge.setDefault': ':', - 'settings.billing.autoRecharge.subtitle': 'Subtítulo', - 'settings.billing.autoRecharge.title': 'Ativar Recarga Automática', - 'settings.billing.autoRecharge.toggleAriaLabel': 'Alternar recarga automática', - 'settings.billing.autoRecharge.weeklyLimit': 'Limite de gastos semanal', - 'settings.billing.history.desc': 'Descrição', - 'settings.billing.history.empty': 'Vazio', - 'settings.billing.history.openPortal': 'Abrir portal', - 'settings.billing.history.posted': 'Postado', - 'settings.billing.history.title': 'Título', - 'settings.billing.inferenceBudget.cycleEnds': 'Ciclo termina', - 'settings.billing.inferenceBudget.exhausted': 'Esgotado', - 'settings.billing.inferenceBudget.loadError': 'Erro de carregamento', - 'settings.billing.inferenceBudget.noBudgetDesc': 'Descrição sem orçamento', - 'settings.billing.inferenceBudget.noRecurringBudget': 'Sem orçamento recorrente', - 'settings.billing.inferenceBudget.remaining': 'Restante', - 'settings.billing.inferenceBudget.tenHourCap': 'Limite de dez horas', - 'settings.billing.inferenceBudget.title': 'Título', - 'settings.billing.payAsYouGo.available': 'Disponível', - 'settings.billing.payAsYouGo.chargeCustomAmount': 'Abrindo…', - 'settings.billing.payAsYouGo.chooseTopUpDesc': 'Descrição de recarga', - 'settings.billing.payAsYouGo.chooseTopUpTitle': 'Título de recarga', - 'settings.billing.payAsYouGo.creditBalanceDesc': 'Descrição do saldo de crédito', - 'settings.billing.payAsYouGo.creditBalanceTitle': 'Título do saldo de crédito', - 'settings.billing.payAsYouGo.customAmount': 'Valor personalizado', - 'settings.billing.payAsYouGo.enterAmount': 'Inserir valor', - 'settings.billing.payAsYouGo.opening': 'Abrindo', - 'settings.billing.payAsYouGo.promotionalCredits': 'Créditos Promocionais', - 'settings.billing.payAsYouGo.topUpBalance': 'Recarregar Saldo', - 'settings.billing.payAsYouGo.topUpCredits': 'Recarregar Créditos', - 'settings.billing.payAsYouGo.unableToLoad': 'Não foi possível carregar o saldo.', - 'settings.billing.subscription.annual': 'Anual', - 'settings.billing.subscription.billedAnnually': 'Cobrado anualmente', - 'settings.billing.subscription.chooseSubtitle': 'Subtítulo de escolha', - 'settings.billing.subscription.chooseTitle': 'Título de escolha', - 'settings.billing.subscription.cryptoDesc': 'Descrição de cripto', - 'settings.billing.subscription.cryptoQuestion': 'Pergunta sobre cripto', - 'settings.billing.subscription.current': 'Atual', - 'settings.billing.subscription.currentPlan': 'Plano atual', - 'settings.billing.subscription.monthly': 'Mensal', - 'settings.billing.subscription.paymentConfirmed': 'Pagamento confirmado', - 'settings.billing.subscription.perMonth': 'Por mês', - 'settings.billing.subscription.popular': 'Popular', - 'pages.settings.account.migration': 'Importar de outro assistente', - 'pages.settings.account.migrationDesc': - 'Migre memória e anotações do OpenClaw (e, em breve, do Hermes) para este espaço de trabalho.', - 'composio.connect.scope.read': 'Leitura', - 'composio.connect.scope.readHint': 'Permitir que o agente leia dados desta conexão.', - 'composio.connect.scope.write': 'Gravar', - 'composio.connect.scope.writeHint': - 'Permitir que o agente crie ou modifique dados por meio desta conexão.', - 'composio.connect.scope.admin': 'Administrador', - 'composio.connect.scope.adminHint': - 'Permitir que o agente gerencie configurações, permissões ou ações destrutivas.', - 'pages.settings.composioSection.title': 'Composio', - 'pages.settings.composioSection.description': - 'Roteamento, gatilhos e histórico para integrações desenvolvidas por Composio.', - 'pages.settings.account.walletBalances': 'Wallet Balances', - 'pages.settings.account.walletBalancesDesc': 'View multi-chain balances for your local wallet', - 'walletBalances.title': 'Wallet Balances', - 'walletBalances.refresh': 'Refresh', - 'walletBalances.loading': 'Loading balances…', - 'walletBalances.retry': 'Retry', - 'walletBalances.emptyState': 'No wallet accounts yet — set up a wallet in Recovery Phrase.', - 'walletBalances.copyAddress': 'Copy address', - 'walletBalances.providerMissing': 'provider unavailable', - 'walletBalances.rawBalance': 'Raw: {raw}', - 'walletBalances.errorGeneric': - 'Unable to load wallet balances. Set up your wallet in Recovery Phrase and try again.', - 'conversations.taskKanban.approval.default': 'Default', - 'conversations.taskKanban.approval.notRequired': 'Not required', - 'conversations.taskKanban.approval.notRequiredBadge': 'no approval', - 'conversations.taskKanban.approval.required': 'Required', - 'conversations.taskKanban.approval.requiredBadge': 'approval', - 'conversations.taskKanban.approval.requiredBeforeExecution': 'Required before execution', - 'conversations.taskKanban.briefButton': 'Task brief', - 'conversations.taskKanban.briefTitle': 'Task brief', - 'conversations.taskKanban.closeBrief': 'Close task brief', - 'conversations.taskKanban.field.acceptanceCriteria': 'Acceptance criteria', - 'conversations.taskKanban.field.allowedTools': 'Allowed tools', - 'conversations.taskKanban.field.approval': 'Approval', - 'conversations.taskKanban.field.assignedAgent': 'Assigned agent', - 'conversations.taskKanban.field.blocker': 'Blocker', - 'conversations.taskKanban.field.evidence': 'Evidence', - 'conversations.taskKanban.field.notes': 'Notes', - 'conversations.taskKanban.field.objective': 'Objective', - 'conversations.taskKanban.field.plan': 'Plan', - 'conversations.taskKanban.field.status': 'Status', - 'conversations.taskKanban.field.title': 'Title', - 'conversations.taskKanban.saveChanges': 'Save changes', - 'conversations.taskKanban.deleteCard': 'Delete', - 'conversations.taskKanban.updateFailed': 'Could not update task; changes were not saved.', -}; - -export default pt4; diff --git a/app/src/lib/i18n/chunks/pt-5.ts b/app/src/lib/i18n/chunks/pt-5.ts deleted file mode 100644 index d75d67601..000000000 --- a/app/src/lib/i18n/chunks/pt-5.ts +++ /dev/null @@ -1,1029 +0,0 @@ -import type { TranslationMap } from '../types'; - -// Portuguese (Português) chunk 5/5. Translated from chunks/en-5.ts. -const pt5: TranslationMap = { - 'settings.billing.subscription.save': '{pct}', - 'settings.billing.subscription.upgrade': 'Fazer upgrade', - 'settings.billing.subscription.waiting': 'Aguardando', - 'settings.billing.subscription.waitingPayment': 'Aguardando pagamento', - 'settings.composio.apiKeyDesc': - 'Uma chave de API do Composio está atualmente armazenada neste dispositivo.', - 'settings.composio.apiKeyLabel': 'Chave de API do Composio', - 'settings.composio.apiKeyStored': 'Chave de API armazenada', - 'settings.composio.apiKeyStoredPlaceholder': '••••••••••••••••', - 'settings.composio.clearedToBackend': 'Alternado para modo Backend', - 'settings.composio.confirmItem1': 'Uma conta em app.composio.dev com uma chave de API', - 'settings.composio.confirmItem2': - 'Religar cada integração através da sua conta pessoal do Composio', - 'settings.composio.confirmItem3': - 'Observação: gatilhos do Composio (webhooks em tempo real) ainda não funcionam no modo Direto — apenas chamadas síncronas de ferramentas', - 'settings.composio.confirmNeedItems': 'Você precisará de:', - 'settings.composio.confirmSwitch': 'Entendi, alternar para Direto', - 'settings.composio.confirmTitle': '⚠️ Alternando para o modo Direto', - 'settings.composio.confirmWarning': - 'Suas integrações existentes (Gmail, Slack, GitHub, etc. conectadas via OpenHuman) não ficarão visíveis — elas vivem no tenant do Composio gerenciado pelo OpenHuman.', - 'settings.composio.intro': - 'O Composio integra mais de 250 apps externos como ferramentas que seu agente pode chamar. Escolha como essas chamadas são roteadas.', - 'settings.composio.modeDirect': 'Direto (traga sua própria chave de API)', - 'settings.composio.modeDirectDesc': - 'As chamadas vão direto para backend.composio.dev. Soberano / amigável para offline. A execução de ferramentas funciona de forma síncrona; webhooks de gatilhos em tempo real ainda não são roteados no modo direto (issue de acompanhamento).', - 'settings.composio.modeManaged': 'Gerenciado (OpenHuman cuida para você)', - 'settings.composio.modeManagedDesc': - 'O OpenHuman faz proxy das chamadas de ferramentas pelo nosso backend (recomendado). A autenticação é intermediada; você nunca cola uma chave de API do Composio. Webhooks são totalmente roteados.', - 'settings.composio.routingMode': 'Modo de roteamento', - 'settings.composio.saveErrorNoKey': - 'Falha ao salvar. O modo Direto requer uma chave de API não vazia.', - 'settings.composio.saving': 'Salvando…', - 'settings.composio.switching': 'Alternando…', - 'settings.cron.jobs.desc': 'Descrição', - 'settings.cron.jobs.empty': 'Nenhuma tarefa cron do core encontrada.', - 'settings.cron.jobs.lastStatus': 'Último status', - 'settings.cron.jobs.loading': 'Carregando tarefas cron...', - 'settings.cron.jobs.loadingRuns': 'Carregando execuções', - 'settings.cron.jobs.nextRun': 'Próxima execução', - 'settings.cron.jobs.pause': 'Pausar', - 'settings.cron.jobs.paused': 'Pausado', - 'settings.cron.jobs.recentRuns': 'Execuções recentes', - 'settings.cron.jobs.removing': 'Removendo', - 'settings.cron.jobs.resume': 'Retomar', - 'settings.cron.jobs.runningNow': 'Executando agora', - 'settings.cron.jobs.saving': 'Salvando…', - 'settings.cron.jobs.schedule': 'Agendamento', - 'settings.cron.jobs.title': 'Tarefas Cron do Core', - 'settings.cron.jobs.viewRuns': 'Ver execuções', - 'settings.localModel.deviceCapability.active': 'Ativo', - 'settings.localModel.deviceCapability.appliedTier': 'Nível aplicado', - 'settings.localModel.deviceCapability.applying': 'Aplicando', - 'settings.localModel.deviceCapability.cores': '{count}', - 'settings.localModel.deviceCapability.couldNotLoadPresets': - 'Não foi possível carregar predefinições', - 'settings.localModel.deviceCapability.cpu': 'CPU', - 'settings.localModel.deviceCapability.customModelIds': 'IDs de modelos personalizados', - 'settings.localModel.deviceCapability.detected': 'Detectado', - 'settings.localModel.deviceCapability.disabled': 'Desativado', - 'settings.localModel.deviceCapability.disabledDesc': 'Descrição desativado', - 'settings.localModel.deviceCapability.downloadingModels': '(baixando modelos)', - 'settings.localModel.deviceCapability.downloadingSetupDesc': - 'Baixando o instalador OllamaSetup (~2 GB) e descompactando. Isso pode levar um minuto na primeira instalação.', - 'settings.localModel.deviceCapability.failedToApplyPreset': 'Falha ao aplicar predefinição', - 'settings.localModel.deviceCapability.gpu': 'GPU', - 'settings.localModel.deviceCapability.installFailed': 'Instalação do Ollama falhou', - 'settings.localModel.deviceCapability.installFailedDesc': - 'O instalador encerrou antes que o Ollama estivesse utilizável. Clique em tentar novamente ou instale manualmente em ollama.com.', - 'settings.localModel.deviceCapability.installFirst': 'Execute o Ollama primeiro.', - 'settings.localModel.deviceCapability.installFirstDesc': - 'Os níveis locais dependem de um endpoint Ollama gerenciado externamente. Inicie-o você mesmo, baixe os modelos desejados e continue usando "Desativado (fallback de nuvem)" até que o runtime esteja acessível.', - 'settings.localModel.deviceCapability.installOllamaFirst': - 'Execute o Ollama primeiro para usar este nível', - 'settings.localModel.deviceCapability.installingOllama': 'Instalando ollama', - 'settings.localModel.deviceCapability.loadingDeviceInfo': 'Carregando informações do dispositivo', - 'settings.localModel.deviceCapability.localAiDisabled': - 'IA local desativada — usando fallback na nuvem.', - 'settings.localModel.deviceCapability.modelTier': 'Nível do Modelo', - 'settings.localModel.deviceCapability.needsOllama': 'Precisa de ollama', - 'settings.localModel.deviceCapability.notDetected': 'Não detectado', - 'settings.localModel.deviceCapability.ram': 'RAM', - 'settings.localModel.deviceCapability.recommended': 'Recomendado', - 'settings.localModel.deviceCapability.retryInstall': 'Tentando novamente…', - 'settings.localModel.deviceCapability.retrying': 'Tentando novamente…', - 'settings.localModel.deviceCapability.starting': 'Iniciando…', - 'settings.localModel.download.audioPathPlaceholder': 'Caminho absoluto para arquivo de áudio', - 'settings.localModel.download.capabilityAssets': 'Assets de Funcionalidade', - 'settings.localModel.download.downloading': 'Baixando...', - 'settings.localModel.download.embeddingPlaceholder': 'Uma string de entrada por linha...', - 'settings.localModel.download.noThinkMode': 'Sem modo de pensamento', - 'settings.localModel.download.promptPlaceholder': - 'Digite qualquer prompt e execute-o no modelo local...', - 'settings.localModel.download.quantizationPref': 'Preferência de quantização', - 'settings.localModel.download.runEmbeddingTest': 'Executando...', - 'settings.localModel.download.runPromptTest': 'Executar Teste de Prompt', - 'settings.localModel.download.runSummaryTest': 'Executar Teste de Resumo', - 'settings.localModel.download.runTranscriptionTest': 'Executando...', - 'settings.localModel.download.runTtsTest': 'Executando...', - 'settings.localModel.download.runVisionTest': 'Executando...', - 'settings.localModel.download.running': 'Executando...', - 'settings.localModel.download.runningPrompt': 'Executando prompt', - 'settings.localModel.download.summarizePlaceholder': - 'Cole o texto para resumir com o modelo local...', - 'settings.localModel.download.testCustomPrompt': 'Testar Prompt Personalizado', - 'settings.localModel.download.testEmbeddings': 'Testar Embeddings', - 'settings.localModel.download.testSummarization': 'Testar Sumarização', - 'settings.localModel.download.testVisionPrompt': 'Testar Prompt de Visão', - 'settings.localModel.download.testVoiceInput': 'Testar Entrada de Voz (STT)', - 'settings.localModel.download.testVoiceOutput': 'Testar Saída de Voz (TTS)', - 'settings.localModel.download.ttsOutputPlaceholder': 'Caminho WAV de saída opcional', - 'settings.localModel.download.ttsPlaceholder': 'Insira o texto para sintetizar...', - 'settings.localModel.download.visionImagePlaceholder': - 'Uma referência de imagem por linha (URI de dados, URL ou marcador de caminho local)', - 'settings.localModel.download.visionPromptPlaceholder': - 'Insira um prompt para o modelo de visão...', - 'settings.localModel.status.allChecksPassed': 'Todas as verificações passaram', - 'settings.localModel.status.artifact': 'Artefato', - 'settings.localModel.status.backend': 'Back-end', - 'settings.localModel.status.binary': 'Binário', - 'settings.localModel.status.bootstrapResume': 'Bootstrap / Retomar', - 'settings.localModel.status.checking': 'Verificando...', - 'settings.localModel.status.checkingOllama': 'Verificando ollama', - 'settings.localModel.status.customLocation': 'Localização personalizada', - 'settings.localModel.status.customLocationDesc': 'Descrição de localização personalizada', - 'settings.localModel.status.diagnosticsHint': - 'Clique em "Executar Diagnóstico" para verificar se o Ollama está rodando e os modelos estão instalados.', - 'settings.localModel.status.downloadingUnknown': 'Baixando (tamanho desconhecido)', - 'settings.localModel.status.eta': 'ETA', - 'settings.localModel.status.expectedModels': 'Modelos esperados', - 'settings.localModel.status.forceRebootstrap': 'Forçar Re-bootstrap', - 'settings.localModel.status.generationTps': 'TPS de geração', - 'settings.localModel.status.hideErrorDetails': 'Ocultar detalhes do erro', - 'settings.localModel.status.installManually': 'Instalar manualmente', - 'settings.localModel.status.installManuallyFrom': 'Instalar manualmente em', - 'settings.localModel.status.installOllama': 'Iniciando…', - 'settings.localModel.status.installedModels': 'Modelos instalados', - 'settings.localModel.status.installing': 'Instalando...', - 'settings.localModel.status.installingOllama': 'Instalando runtime Ollama...', - 'settings.localModel.status.issues': 'Problemas', - 'settings.localModel.status.issuesFound': '{count} problema(s) encontrado(s)', - 'settings.localModel.status.lastLatency': 'Última Latência', - 'settings.localModel.status.model': 'Modelo', - 'settings.localModel.status.notFound': 'Não encontrado', - 'settings.localModel.status.notRunning': 'Não está em execução', - 'settings.localModel.status.ollamaBinaryPath': 'Caminho do binário Ollama', - 'settings.localModel.status.ollamaDiagnostics': 'Diagnósticos do Ollama', - 'settings.localModel.status.ollamaNotInstalled': 'Runtime do Ollama indisponível', - 'settings.localModel.status.ollamaNotInstalledDesc': - 'O OpenHuman agora trata o Ollama como um runtime de inferência externo. Inicie seu próprio servidor Ollama, baixe os modelos desejados e aponte o roteamento de carga para ele.', - 'settings.localModel.status.progress': 'Progresso', - 'settings.localModel.status.provider': 'Provedor', - 'settings.localModel.status.retryBootstrap': 'Tentar Bootstrap Novamente', - 'settings.localModel.status.runDiagnostics': 'Verificando...', - 'settings.localModel.status.running': 'Rodando', - 'settings.localModel.status.runningExternalProcess': 'Rodando via processo externo', - 'settings.localModel.status.runtimeStatus': 'Status do Runtime', - 'settings.localModel.status.server': 'Servidor', - 'settings.localModel.status.setPath': 'Definindo...', - 'settings.localModel.status.setting': 'Definindo...', - 'settings.localModel.status.showErrorDetails': 'Ocultar detalhes do erro', - 'settings.localModel.status.showInstallErrorDetails': 'Ocultar detalhes do erro', - 'settings.localModel.status.suggestedFixes': 'Correções sugeridas', - 'settings.localModel.status.thenSetPath': 'Então defina o caminho', - 'settings.localModel.status.triggering': 'Disparando...', - 'settings.localModel.status.unavailable': 'Indisponível', - 'settings.localModel.status.working': 'Trabalhando...', - 'settings.developerMenu.ai.title': 'Configuração de IA', - 'settings.developerMenu.ai.desc': - 'Provedores em nuvem, modelos Ollama locais e roteamento por carga de trabalho', - 'settings.developerMenu.screenAwareness.title': 'Consciência de tela', - 'settings.developerMenu.screenAwareness.desc': - 'Permissões de captura de tela, política de monitoramento e controles de sessão', - 'settings.developerMenu.messagingChannels.title': 'Canais de mensagens', - 'settings.developerMenu.messagingChannels.desc': - 'Configure modos de autenticação Telegram/Discord e o roteamento de canal padrão', - 'settings.developerMenu.tools.title': 'Ferramentas', - 'settings.developerMenu.tools.desc': - 'Ative ou desative capacidades que o OpenHuman pode usar em seu nome', - 'settings.developerMenu.agentChat.title': 'Chat do agente', - 'settings.developerMenu.agentChat.desc': - 'Teste conversas do agente com substituições de modelo e temperatura', - 'settings.developerMenu.devWorkflow.title': 'Dev Workflow', - 'settings.developerMenu.devWorkflow.desc': - 'Autonomous agent that picks your GitHub issues and raises PRs on a schedule', - 'settings.developerMenu.devWorkflow.panelDesc': - 'Configure an autonomous developer agent that picks GitHub issues assigned to you and raises pull requests automatically on a schedule.', - 'settings.devWorkflow.githubRepository': 'GitHub Repository', - 'settings.devWorkflow.loadingRepositories': 'Loading repositories...', - 'settings.devWorkflow.selectRepository': 'Select a repository', - 'settings.devWorkflow.privateTag': '(private)', - 'settings.devWorkflow.detectingForkInfo': 'Detecting fork info...', - 'settings.devWorkflow.forkDetected': 'Fork detected', - 'settings.devWorkflow.upstream': 'Upstream:', - 'settings.devWorkflow.forkPrNote': 'PRs will be raised against the upstream repository.', - 'settings.devWorkflow.notForkNote': - 'Not a fork. PRs will be raised against this repository directly.', - 'settings.devWorkflow.targetBranch': 'Target Branch', - 'settings.devWorkflow.targetBranchNote': 'PRs will be raised against this branch', - 'settings.devWorkflow.loadingBranches': 'Loading branches...', - 'settings.devWorkflow.runFrequency': 'Run Frequency', - 'settings.devWorkflow.runFrequencyNote': - 'How often the agent should check for issues and raise PRs.', - 'settings.devWorkflow.updateConfiguration': 'Update Configuration', - 'settings.devWorkflow.saveConfiguration': 'Save Configuration', - 'settings.devWorkflow.remove': 'Remove', - 'settings.devWorkflow.saved': 'Saved', - 'settings.devWorkflow.activeConfiguration': 'Active Configuration', - 'settings.devWorkflow.activeConfigRepository': 'Repository:', - 'settings.devWorkflow.activeConfigUpstream': 'Upstream:', - 'settings.devWorkflow.activeConfigTargetBranch': 'Target branch:', - 'settings.devWorkflow.activeConfigSchedule': 'Schedule:', - 'settings.devWorkflow.enabled': 'Enabled', - 'settings.devWorkflow.paused': 'Paused', - 'settings.skillsRunner.scheduleEnabled': 'Enabled', - 'settings.skillsRunner.scheduleDisabled': 'Paused', - 'settings.skillsRunner.scheduleToggleAria': 'Toggle schedule enabled', - 'settings.skillsRunner.schedule.history': 'History', - 'settings.skillsRunner.schedule.historyLoading': 'Loading history\u2026', - 'settings.skillsRunner.schedule.historyEmpty': 'No runs yet for this schedule.', - 'settings.skillsRunner.schedule.historyNoOutput': 'No output captured.', - 'settings.skillsRunner.schedule.active': 'Active', - 'settings.skillsRunner.schedule.lastRunLabel': 'last:', - 'settings.devWorkflow.nextRun': 'Next run', - 'settings.devWorkflow.lastRun': 'Last run', - 'settings.devWorkflow.runNow': 'Run now', - 'settings.devWorkflow.running': 'Running…', - 'settings.devWorkflow.recentRuns': 'Recent runs', - 'settings.devWorkflow.cronSaveError': 'Failed to save configuration', - 'settings.devWorkflow.lastOutput': 'Last output', - 'settings.devWorkflow.noOutput': 'No output captured', - 'settings.devWorkflow.runningStatus': - 'Agent is running — picking an issue and working on a fix...', - 'settings.devWorkflow.errorNotConnected': - 'GitHub is not connected. Please connect GitHub via Settings > Advanced > Composio first.', - 'settings.devWorkflow.errorToolNotEnabled': - 'GITHUB_LIST_REPOSITORIES_FOR_THE_AUTHENTICATED_USER tool is not enabled on this backend. Please ask your admin to enable it in the Composio integration (backend#842).', - 'settings.devWorkflow.errorNotAuthenticated': 'Not authenticated. Please sign in first.', - 'settings.devWorkflow.errorNoRepositories': 'No repositories found for this GitHub account.', - 'settings.devWorkflow.schedule.every30min': 'Every 30 minutes', - 'settings.devWorkflow.schedule.everyHour': 'Every hour', - 'settings.devWorkflow.schedule.every2hours': 'Every 2 hours', - 'settings.devWorkflow.schedule.every6hours': 'Every 6 hours', - 'settings.devWorkflow.schedule.onceDaily': 'Once daily (9 AM)', - 'settings.developerMenu.cronJobs.title': 'Tarefas cron', - 'settings.developerMenu.cronJobs.desc': - 'Veja e configure tarefas agendadas para habilidades em tempo de execução', - 'settings.developerMenu.localModelDebug.title': 'Depuração do modelo local', - 'settings.developerMenu.localModelDebug.desc': - 'Configuração do Ollama, downloads de recursos, testes de modelo e diagnósticos', - 'settings.developerMenu.webhooks.title': 'Webhooks', - 'settings.developerMenu.webhooks.desc': - 'Inspecione registros de webhooks em tempo de execução e logs de solicitações capturadas', - 'settings.developerMenu.eventLog.title': 'Event Log', - 'settings.developerMenu.eventLog.desc': - 'Live colour-coded stream of all agent, tool, and system events', - 'settings.developerMenu.eventLog.allTypes': 'All types', - 'settings.developerMenu.eventLog.filterAgent': 'Filter...', - 'settings.developerMenu.eventLog.download': 'Download', - 'settings.developerMenu.eventLog.events': 'events', - 'settings.developerMenu.eventLog.live': 'Live', - 'settings.developerMenu.eventLog.disconnected': 'Disconnected', - 'settings.developerMenu.eventLog.waiting': 'Waiting for events...', - 'settings.developerMenu.eventLog.notConnected': 'Not connected to core', - 'settings.developerMenu.eventLog.jumpToLatest': 'Jump to latest', - 'settings.developerMenu.eventLog.badge.tool': 'TOOL', - 'settings.developerMenu.eventLog.badge.agent': 'AGENT', - 'settings.developerMenu.eventLog.badge.info': 'INFO', - 'settings.developerMenu.eventLog.badge.mem': 'MEM', - 'settings.developerMenu.eventLog.badge.chan': 'CHAN', - 'settings.developerMenu.eventLog.badge.cron': 'CRON', - 'settings.developerMenu.eventLog.badge.hook': 'HOOK', - 'settings.developerMenu.eventLog.badge.warn': 'WARN', - 'settings.developerMenu.eventLog.badge.skill': 'SKILL', - 'settings.developerMenu.eventLog.badge.comp': 'COMP', - 'settings.developerMenu.eventLog.badge.mcp': 'MCP', - 'settings.developerMenu.intelligence.title': 'Inteligência', - 'settings.developerMenu.intelligence.desc': - 'Espaço de trabalho de memória, motor subconsciente, sonhos e configurações', - 'settings.developerMenu.notificationRouting.title': 'Roteamento de notificações', - 'settings.developerMenu.notificationRouting.desc': - 'Pontuação de importância por IA e escalonamento do orquestrador para alertas de integração', - 'settings.developerMenu.composeioTriggers.title': 'Gatilhos ComposeIO', - 'settings.developerMenu.composeioTriggers.desc': - 'Veja o histórico e o arquivo de gatilhos do ComposeIO', - 'settings.developerMenu.composioRouting.title': 'Roteamento Composio (modo direto)', - 'settings.developerMenu.composioRouting.desc': - 'Use sua própria chave de API da Composio e roteie chamadas diretamente para backend.composio.dev', - 'settings.developerMenu.integrationTriggers.title': 'Gatilhos de integração', - 'settings.developerMenu.integrationTriggers.desc': - 'Configure as opções de triagem por IA para gatilhos de integração Composio', - 'settings.appearance.menuDesc': 'Escolha claro, escuro ou o tema do sistema', - 'settings.mascot.active': 'Ativo', - 'settings.mascot.characterDesc': 'Descrição do personagem', - 'settings.mascot.characterHeading': 'Título do personagem', - // TODO: translate custom GIF mascot strings. - 'settings.mascot.customGifError': - 'Insira um caminho HTTPS .gif URL, loopback HTTP .gif URL, arquivo:// .gif URL ou .gif local.', - 'settings.mascot.customGifHeading': 'Avatar GIF personalizado', - 'settings.mascot.customGifLabel': 'Avatar GIF personalizado URL', - 'settings.mascot.colorDesc': 'Descrição de cor', - 'settings.mascot.colorHeading': 'Título de cor', - 'settings.mascot.loadingLibrary': 'Carregando biblioteca do OpenHuman…', - 'settings.mascot.localDefault': 'OpenHuman local (padrão)', - 'settings.mascot.menuTitle': 'Mascote', - 'settings.mascot.menuDesc': 'Escolha a cor do mascote usada em todo o app', - 'settings.mascot.noCharacters': 'Nenhum personagem do OpenHuman disponível ainda', - 'settings.mascot.noColorVariants': 'Sem variantes de cor', - 'settings.mascot.voice.current': 'atual', - 'settings.mascot.voice.customDesc': - 'Encontre IDs de voz em api.elevenlabs.io/v1/voices ou no seu painel da ElevenLabs. Apenas o ID é armazenado — sua chave de API permanece no backend.', - 'settings.mascot.voice.customHeading': 'ID de voz personalizado', - 'settings.mascot.voice.customOption': 'Outro (colar ID de voz)…', - 'settings.mascot.voice.desc': - 'Escolha a voz da ElevenLabs que o mascote usa para respostas faladas. Filtre por gênero, escolha na lista curada, cole um ID personalizado, ou deixe o app escolher uma voz que combine com o idioma da interface.', - 'settings.mascot.voice.genderFemale': 'Feminino', - 'settings.mascot.voice.genderHeading': 'Gênero da voz', - 'settings.mascot.voice.genderMale': 'Masculino', - 'settings.mascot.voice.heading': 'Voz', - 'settings.mascot.voice.preset': 'Predefinição de voz', - 'settings.mascot.voice.presetHeading': 'Predefinição de voz', - 'settings.mascot.voice.preview': 'Pré-visualização da voz', - 'settings.mascot.voice.previewError': 'Falha na pré-visualização da voz', - 'settings.mascot.voice.previewing': 'Pré-visualizando…', - 'settings.mascot.voice.reset': 'Redefinir para o padrão', - 'settings.mascot.voice.useLocaleDefault': 'Corresponder ao idioma do app', - 'settings.mascot.voice.useLocaleDefaultDesc': - 'Escolher automaticamente uma voz para o idioma atual da interface.', - 'settings.memoryWindow.balanced.badge': 'Recomendado', - 'settings.memoryWindow.balanced.hint': - 'Padrão sensato — boa continuidade sem queimar tokens extras em cada execução.', - 'settings.memoryWindow.balanced.label': 'Balanceado', - 'settings.memoryWindow.description': - 'Quanto contexto lembrado o OpenHuman injeta em cada nova execução do agente. Janelas maiores parecem mais cientes de conversas passadas, mas usam mais tokens — e custam mais — a cada execução.', - 'settings.memoryWindow.extended.badge': 'Mais contexto', - 'settings.memoryWindow.extended.hint': - 'Mais memória de longo prazo injetada em cada execução. Custo maior por turno.', - 'settings.memoryWindow.extended.label': 'Estendido', - 'settings.memoryWindow.maximum.badge': 'Maior custo', - 'settings.memoryWindow.maximum.hint': - 'A maior janela segura. Melhor continuidade, conta de tokens significativamente maior a cada execução.', - 'settings.memoryWindow.maximum.label': 'Máximo', - 'settings.memoryWindow.minimal.badge': 'Mais barato', - 'settings.memoryWindow.minimal.hint': - 'Menor janela de memória. Mais barato, mais rápido, menor continuidade entre execuções.', - 'settings.memoryWindow.minimal.label': 'Mínimo', - 'settings.memoryWindow.title': 'Janela de memória de longo prazo', - 'settings.screenIntel.permissions.accessibility': 'Acessibilidade', - 'settings.screenIntel.permissions.grantHint': 'Dica de concessão', - 'settings.screenIntel.permissions.inputMonitoring': 'Monitoramento de Entrada', - 'settings.screenIntel.permissions.macosAppliesPrivacy': 'macOS aplica privacidade', - 'settings.screenIntel.permissions.openInputMonitoring': 'Solicitando…', - 'settings.screenIntel.permissions.refreshStatus': 'Atualizando…', - 'settings.screenIntel.permissions.refreshing': 'Atualizando…', - 'settings.screenIntel.permissions.requestAccessibility': 'Solicitando…', - 'settings.screenIntel.permissions.requestScreenRecording': 'Solicitando…', - 'settings.screenIntel.permissions.requesting': 'Solicitando…', - 'settings.screenIntel.permissions.restartRefresh': 'Reiniciando o core…', - 'settings.screenIntel.permissions.restartingCore': 'Reiniciando o core…', - 'settings.screenIntel.permissions.screenRecording': 'Gravação de Tela', - 'settings.screenIntel.permissions.title': 'Permissões', - 'skills.card.moreActions': 'Mais ações', - 'skills.create.allowedTools': 'Ferramentas permitidas', - 'skills.create.author': 'Autor', - 'skills.create.authorPlaceholder': 'Seu nome', - 'skills.create.commaSeparated': '(separado por vírgulas)', - 'skills.create.createBtn': 'Criar skill', - 'skills.create.createError': 'Não foi possível criar habilidade', - 'skills.create.creating': 'Criando…', - 'skills.create.description': 'Descrição', - 'skills.create.descriptionPlaceholder': 'O que essa habilidade faz?', - 'skills.create.optional': '(optional)', - 'skills.create.inputs.heading': 'Inputs', - 'skills.create.inputs.help': - 'Declare parameters the skill needs. The Skills Runner will render a form for these at run time.', - 'skills.create.inputs.add': 'Add input', - 'skills.create.inputs.row.name': 'Input name', - 'skills.create.inputs.row.namePlaceholder': 'e.g. repo', - 'skills.create.inputs.row.nameError': - 'Letters, digits, underscores, and dashes only; must start with a letter.', - 'skills.create.inputs.row.description': 'Input description', - 'skills.create.inputs.row.descriptionPlaceholder': 'What goes in this field?', - 'skills.create.inputs.row.type': 'Type', - 'skills.create.inputs.row.required': 'Required', - 'skills.create.inputs.row.remove': 'Remove input', - 'skills.create.inputs.type.string': 'Text', - 'skills.create.inputs.type.integer': 'Number', - 'skills.create.inputs.type.boolean': 'Yes / No', - 'skills.create.license': 'Licença', - 'skills.create.name': 'Nome', - 'skills.create.namePlaceholder': 'ex.: Trade Journal', - 'skills.create.scope': 'Escopo', - 'skills.create.scopeProjectHint': '/.openhuman/skills/', - 'skills.create.scopeUserHint': - 'Escrito em ~/.openhuman/skills//SKILL.md — disponível em todos os espaços de trabalho.', - 'skills.create.slugLabel': 'Rótulo do slug', - 'skills.create.subtitle': 'SKILL.md', - 'skills.create.tags': 'Tags', - 'skills.create.title': 'Nova skill', - 'skills.detail.allowedTools': 'Ferramentas permitidas', - 'skills.detail.author': 'Autor', - 'skills.detail.bundledResources': 'Recursos incluídos', - 'skills.detail.closeAriaLabel': 'Fechar detalhes da habilidade', - 'skills.detail.location': 'Localização', - 'skills.detail.noBundledResources': 'Sem recursos incluídos.', - 'skills.detail.tags': 'Tags', - 'skills.detail.warnings': 'Avisos', - 'skills.install.fetchLog': 'Buscar log', - 'skills.install.installBtn': 'Instalando…', - 'skills.install.installComplete': 'Instalação concluída', - 'skills.install.installing': 'Instalando…', - 'skills.install.parseWarnings': 'Avisos de análise', - 'skills.install.rawError': 'Erro bruto', - 'skills.install.timeoutHint': '(segundos, opcional)', - 'skills.install.timeoutLabel': 'Rótulo de timeout', - 'skills.install.title': 'Instalar skill a partir de URL', - 'skills.install.urlLabel': 'URL da skill', - 'skills.meetingBots.bannerDesc': 'Descrição do banner', - 'skills.meetingBots.bannerTitle': 'Título do banner', - 'skills.meetingBots.busyTitle': 'OpenHuman está ocupado', - 'skills.meetingBots.comingSoon': 'Em breve', - 'skills.meetingBots.couldNotStartTitle': 'Não foi possível iniciar o OpenHuman', - 'skills.meetingBots.displayName': 'Nome de exibição', - 'skills.meetingBots.failedToStart': 'Falha ao iniciar o OpenHuman.', - 'skills.meetingBots.joiningMessage': 'Ele deve aparecer como participante em alguns segundos.', - 'skills.meetingBots.joiningTitle': 'OpenHuman está entrando na reunião', - 'skills.meetingBots.meetingLink': 'Link da reunião', - 'skills.meetingBots.modalAriaLabel': 'Enviar OpenHuman para uma reunião', - 'skills.meetingBots.modalDesc': 'Descrição do modal', - 'skills.meetingBots.modalTitle': 'Enviar OpenHuman para uma reunião', - 'skills.meetingBots.newBadge': 'Badge novo', - 'skills.meetingBots.sendTo': 'Enviar para', - 'skills.meetingBots.starting': 'Iniciando…', - 'skills.resource.preview.closeAriaLabel': 'Fechar visualização', - 'skills.resource.preview.failed': 'Falha na pré-visualização', - 'skills.resource.preview.loading': 'Carregando visualização…', - 'skills.resource.tree.empty': 'Sem recursos incluídos.', - 'skills.search.placeholder': 'Espaço reservado', - 'skills.setup.autocomplete.acceptKey': 'Tecla de aceitar', - 'skills.setup.autocomplete.activeDesc': 'Descrição ativo', - 'skills.setup.autocomplete.activeTitle': 'Auto-Complete está Ativo', - 'skills.setup.autocomplete.customizeSettings': 'Personalizar configurações', - 'skills.setup.autocomplete.debounce': 'Debounce', - 'skills.setup.autocomplete.description': 'Descrição', - 'skills.setup.autocomplete.enableBtn': 'Ativando...', - 'skills.setup.autocomplete.enableError': 'Falha ao ativar autocompletar', - 'skills.setup.autocomplete.enabling': 'Ativando...', - 'skills.setup.autocomplete.notSupported': 'Não suportado', - 'skills.setup.autocomplete.stepEnable': 'Ativar conclusões inline', - 'skills.setup.autocomplete.stepSuccess': 'Pronto para usar', - 'skills.setup.autocomplete.stylePreset': 'Predefinição de estilo', - 'skills.setup.autocomplete.stylePresetValue': 'Equilibrado (configurável depois)', - 'skills.setup.autocomplete.title': 'Auto-Complete de Texto', - 'skills.setup.screenIntel.activeDesc': 'Descrição ativo', - 'skills.setup.screenIntel.activeTitle': 'Inteligência de Tela está Ativada', - 'skills.setup.screenIntel.advancedSettings': 'Configurações avançadas', - 'skills.setup.screenIntel.allGranted': 'Todas as permissões concedidas', - 'skills.setup.screenIntel.captureMode': 'Modo de captura', - 'skills.setup.screenIntel.captureModeValue': 'Todas as janelas (configurável depois)', - 'skills.setup.screenIntel.deniedHint': - 'Após conceder permissões nas Configurações do Sistema, clique abaixo para reiniciar e aplicar as alterações.', - 'skills.setup.screenIntel.enableBtn': 'Ativando...', - 'skills.setup.screenIntel.enableDesc': 's na sua tela e alimentar contexto útil no seu agente', - 'skills.setup.screenIntel.enableError': 'Falha ao ativar Inteligência de Tela', - 'skills.setup.screenIntel.enabling': 'Ativando...', - 'skills.setup.screenIntel.grant': 'Abrindo...', - 'skills.setup.screenIntel.granted': 'Concedido', - 'skills.setup.screenIntel.macosOnly': 'Apenas macOS', - 'skills.setup.screenIntel.opening': 'Abrindo...', - 'skills.setup.screenIntel.panicHotkey': 'Tecla de pânico', - 'skills.setup.screenIntel.permAccessibility': 'Acessibilidade', - 'skills.setup.screenIntel.permInputMonitoring': 'Monitoramento de Entrada', - 'skills.setup.screenIntel.permScreenRecording': 'Gravação de Tela', - 'skills.setup.screenIntel.permissionsDesc': 'Descrição de permissões', - 'skills.setup.screenIntel.refreshStatus': 'Atualizar status', - 'skills.setup.screenIntel.restartRefresh': 'Reiniciando...', - 'skills.setup.screenIntel.restarting': 'Reiniciando...', - 'skills.setup.screenIntel.stepEnable': 'Ativar a habilidade', - 'skills.setup.screenIntel.stepPermissions': 'Conceder permissões', - 'skills.setup.screenIntel.stepSuccess': 'Pronto para usar', - 'skills.setup.screenIntel.title': 'Inteligência de Tela', - 'skills.setup.screenIntel.visionModel': 'Modelo de visão', - 'skills.setup.voice.activation': 'Ativação', - 'skills.setup.voice.activeDescPrefix': 'Fn', - 'skills.setup.voice.activeDescSuffix': 'Fn', - 'skills.setup.voice.activeTitle': 'Inteligência de Voz está Ativa', - 'skills.setup.voice.customizeSettings': 'Personalizar configurações', - 'skills.setup.voice.downloadSttBtn': 'Botão de download STT', - 'skills.setup.voice.enableDesc': 'Descrição de ativação', - 'skills.setup.voice.hotkey': 'Tecla de atalho', - 'skills.setup.voice.startBtn': 'Iniciando...', - 'skills.setup.voice.startError': 'Falha ao iniciar servidor de voz', - 'skills.setup.voice.starting': 'Iniciando...', - 'skills.setup.voice.stepEnable': 'Iniciar servidor de voz', - 'skills.setup.voice.stepSetup': 'Download de modelo necessário', - 'skills.setup.voice.stepSuccess': 'Pronto para usar', - 'skills.setup.voice.sttNotReady': 'Modelo de fala para texto não está pronto', - 'skills.setup.voice.sttNotReadyDesc': - 'A Inteligência de Voz requer um modelo Whisper local para transcrição. Baixe-o nas configurações de Modelo Local.', - 'skills.setup.voice.sttReady': 'Modelo de fala para texto pronto', - 'skills.setup.voice.sttReturnHint': 'Dica de retorno STT', - 'skills.setup.voice.title': 'Inteligência de Voz', - 'skills.uninstall.couldNotUninstall': 'Não foi possível desinstalar', - 'skills.uninstall.description': - 'Isso exclui permanentemente o diretório da skill e todos os recursos empacotados. O agente deixará de vê-la no próximo turno.', - 'skills.uninstall.title': 'Desinstalar', - 'skills.uninstall.uninstallBtn': 'Desinstalar', - 'skills.uninstall.uninstalling': 'Desinstalando…', - 'upsell.global.limitMessage': 'Faça upgrade do seu plano ou adicione créditos para continuar', - 'upsell.global.limitTitle': 'Você', - 'upsell.global.nearLimitMessage': - 'Você usou {pct}% do seu limite de uso. Faça upgrade para limites mais altos.', - 'upsell.global.nearLimitTitle': 'Aproximando-se do limite de uso', - 'upsell.usageLimit.bodyBudget': - 'Você atingiu seu limite semanal.{reset} Atualize seu plano ou recarregue créditos para evitar limites.', - 'upsell.usageLimit.bodyRate': - 'Você atingiu seu limite de taxa de inferência de 10 horas.{reset} Atualize para limites maiores.', - 'upsell.usageLimit.heading': 'Limite de Uso Atingido', - 'upsell.usageLimit.notNow': 'Agora não', - 'upsell.usageLimit.perWindow': '{amount}', - 'upsell.usageLimit.planIncludes': '{plan}', - 'upsell.usageLimit.resetsIn': 'Será redefinido {time}.', - 'upsell.usageLimit.upgradePlan': 'Fazer upgrade do plano', - 'upsell.usageLimit.weeklyInference': '{amount}', - 'walkthrough.tooltip.letsGo': 'Vamos lá!', - 'walkthrough.tooltip.next': 'Próximo →', - 'walkthrough.tooltip.skip': 'Pular tour', - 'walkthrough.tooltip.stepCounter': '{n} de {total}', - 'webhooks.activity.empty': 'Vazio', - 'webhooks.activity.title': 'Atividade Recente', - 'webhooks.composioHistory.empty': 'Vazio', - 'webhooks.composioHistory.metadataId': 'ID de Metadados', - 'webhooks.composioHistory.metadataUuid': 'UUID de Metadados', - 'webhooks.composioHistory.payload': 'Carga útil', - 'webhooks.composioHistory.title': 'Histórico de Gatilhos ComposeIO', - 'webhooks.tunnels.active': 'Ativo', - 'webhooks.tunnels.createFailed': 'Falha ao criar tunnel', - 'webhooks.tunnels.creating': 'Criando...', - 'webhooks.tunnels.deleteFailed': 'Falha ao excluir tunnel', - 'webhooks.tunnels.descriptionPlaceholder': 'Descrição (opcional)', - 'webhooks.tunnels.echo': 'Echo', - 'webhooks.tunnels.empty': 'Vazio', - 'webhooks.tunnels.enableEcho': 'Ativar Echo', - 'webhooks.tunnels.inactive': 'Inativo', - 'webhooks.tunnels.namePlaceholder': 'Nome do tunnel (ex.: telegram-bot)', - 'webhooks.tunnels.newTunnel': 'Novo tunnel', - 'webhooks.tunnels.removeEcho': 'Remover Echo', - 'webhooks.tunnels.title': 'Tunnels de Webhook', - 'webhooks.tunnels.toggleFailed': 'Falha ao alternar echo', - 'composio.authExpired': 'Autenticação expirada', - 'composio.reconnect': 'Reconectar', - 'composio.previewBadge': 'Visualização', - 'composio.previewTooltip': - 'Integração do agente em breve – você pode se conectar, mas o agente ainda não pode usar este kit de ferramentas.', - 'composio.directModeRequiresKey': - 'Falha ao salvar. O modo Direto requer uma chave de API não vazia.', - 'composio.notYetRouted': 'ainda não roteado', - 'composio.triggers.loading': 'Carregando…', - 'conversations.taskKanban.todo': 'A fazer', - 'settings.composio.loading': 'Carregando…', - 'settings.mascot.noCharactersAvailable': 'Nenhum personagem do OpenHuman disponível ainda', - 'skills.uninstall.confirmTitle': 'Desinstalar {name}?', - 'conversations.taskKanban.blocked': 'Bloqueado', - 'conversations.taskKanban.done': 'Concluído', - 'conversations.taskKanban.pending': 'Pending', - 'conversations.taskKanban.working': 'Working', - 'conversations.taskKanban.awaitingApproval': 'Awaiting approval', - 'conversations.taskKanban.ready': 'Ready', - 'conversations.taskKanban.rejected': 'Rejected', - 'conversations.taskKanban.inProgress': 'Em andamento', - 'intelligence.memoryChunk.detail.copiedHint': 'copiado', - 'settings.composio.notYetRouted': 'ainda não roteado', - 'settings.localModel.download.manageExternal': 'Gerencie este modelo no seu runtime externo.', - 'settings.localModel.status.manageOllamaExternal': - 'Gerencie o processo do Ollama e o download de modelos fora do OpenHuman e, em seguida, execute o diagnóstico novamente.', - 'settings.localModel.status.ollamaDocs': 'Documentação do Ollama', - 'settings.localModel.status.thenRetry': - 'para instruções de configuração, em seguida tente novamente depois que seu runtime estiver acessível.', - 'settings.appearance.title': 'Aparência', - 'settings.appearance.themeHeading': 'Tema', - 'settings.appearance.themeAria': 'Tema', - 'settings.appearance.modeLight': 'Claro', - 'settings.appearance.modeLightDesc': 'Superfícies brilhantes, texto escuro.', - 'settings.appearance.modeDark': 'Escuro', - 'settings.appearance.modeDarkDesc': - 'Superfícies escuras, mais agradáveis ​​aos olhos após o anoitecer.', - 'settings.appearance.modeSystem': 'Sistema de correspondência', - 'settings.appearance.modeSystemDesc': - 'Siga a configuração de aparência do seu sistema operacional.', - 'settings.appearance.helperText': - 'O modo escuro muda todo o aplicativo – bate-papo, configurações, painéis – para uma paleta escura. "Match system" segue a aparência do seu sistema operacional e atualiza ao vivo.', - 'settings.mascot.characterPreview': 'Visualização', - 'settings.mascot.characterStates': 'estados', - 'settings.mascot.characterVisemes': 'visemas', - 'settings.mascot.colorAria': 'OpenHuman cor', - 'settings.mascot.colorBlack': 'Preto', - 'settings.mascot.colorBurgundy': 'Borgonha', - 'settings.mascot.colorCustom': 'Custom', - 'settings.mascot.colorNavy': 'Marinho', - 'settings.mascot.primaryColor': 'Primary color', - 'settings.mascot.secondaryColor': 'Secondary color', - 'settings.mascot.colorYellow': 'Amarelo', - 'settings.mascot.libraryUnavailable': 'OpenHuman biblioteca indisponível', - 'settings.mascot.title': 'OpenHuman', - 'settings.developerMenu.mcpServer.title': 'MCP Servidor', - 'settings.developerMenu.mcpServer.desc': - 'Configurar clientes MCP externos para se conectarem a OpenHuman', - 'settings.developerMenu.autonomy.title': 'Autonomia do agente', - 'settings.developerMenu.autonomy.desc': - 'Limites de taxa de ações de ferramentas e limites de segurança', - 'settings.mcpServer.title': 'Servidor MCP', - 'settings.mcpServer.toolsSectionTitle': 'Ferramentas disponíveis', - 'settings.mcpServer.toolsSectionDesc': - 'Ferramentas expostas por meio do servidor MCP stdio ao executar openhuman-core mcp', - 'settings.mcpServer.configSectionTitle': 'Configuração do cliente', - 'settings.mcpServer.configSectionDesc': - 'Selecione seu cliente MCP para gerar o snippet de configuração correto', - 'settings.mcpServer.copySnippet': 'Copiar para a área de transferência', - 'settings.mcpServer.copied': 'Copiado!', - 'settings.mcpServer.openConfigFile': 'Abra o arquivo de configuração', - 'settings.mcpServer.binaryPathNotFound': - 'OpenHuman binário não encontrado. Se estiver executando a partir do código-fonte, crie com: cargo build --bin openhuman-core', - 'settings.mcpServer.openConfigError': 'Falha ao abrir o arquivo de configuração', - 'settings.mcpServer.clientClaudeDesktop': 'Claude Desktop', - 'settings.mcpServer.clientCursor': 'Cursor', - 'settings.mcpServer.clientCodex': 'Codex', - 'settings.mcpServer.clientZed': 'Zed', - 'settings.mcpServer.configFilePath': 'Arquivo de configuração', - 'settings.mcpServer.clientSelectorAriaLabel': 'MCP seletor de cliente', - 'settings.persona.title': 'Persona', - 'settings.persona.menuTitle': 'Persona', - 'settings.persona.menuDesc': - 'Name, personality, avatar, and voice — your assistant as one identity', - 'settings.persona.identityHeading': 'Identity', - 'settings.persona.identityDesc': - 'A display name and short description for your assistant. Shown in the app; does not change how the assistant reasons.', - 'settings.persona.displayNameLabel': 'Display name', - 'settings.persona.displayNamePlaceholder': 'e.g. Nova', - 'settings.persona.descriptionLabel': 'Description', - 'settings.persona.descriptionPlaceholder': 'e.g. A calm, concise assistant for my team.', - 'settings.persona.soul.heading': 'Personality (SOUL.md)', - 'settings.persona.soul.desc': - 'The personality prompt the assistant follows in every conversation. Edits are saved to your workspace and take effect on the next reply.', - 'settings.persona.soul.editorLabel': 'SOUL.md contents', - 'settings.persona.soul.reset': 'Reset to default', - 'settings.persona.soul.usingDefault': 'Using the bundled default', - 'settings.persona.soul.loadError': 'Could not load SOUL.md', - 'settings.persona.soul.saveError': 'Could not save SOUL.md', - 'settings.persona.soul.resetError': 'Could not reset SOUL.md', - 'settings.persona.appearanceHeading': 'Avatar & Voice', - 'settings.persona.appearanceDesc': - 'Mascot color, custom GIF avatar, and reply voice are configured in Mascot settings.', - 'settings.persona.openMascotSettings': 'Open Mascot settings', - 'settings.developerMenu.composio.title': 'Composio', - 'settings.developerMenu.composio.desc': - 'Modo de roteamento, gatilhos de integração e arquivo de histórico de gatilhos.', - 'settings.appearance.tabBarHeading': 'Barra inferior da guia', - 'settings.appearance.tabBarAlwaysShowLabels': 'Sempre mostrar rótulos', - 'settings.appearance.tabBarAlwaysShowLabelsDesc': - 'Quando desativado, os rótulos só aparecem ao passar o mouse ou para a guia ativa.', - 'common.breadcrumb': 'Breadcrumb', - 'settings.betaBuild': 'Versão beta - v{version}', - 'migration.vendor.openclaw': 'OpenClaw', - 'migration.vendor.hermes': 'Hermes Agent', - 'onboarding.apiKeys.openaiOauthHint': - 'Use ChatGPT Plus/Pro (assinatura) ou uma chave OpenAI API — ambos não são necessários.', - 'onboarding.apiKeys.openaiOauthOpening': 'Abrindo login…', - 'onboarding.apiKeys.finishSignIn': 'Concluir login no ChatGPT', - 'onboarding.apiKeys.orApiKey': 'ou tecla API', - 'app.localAiDownload.expandAria': 'Expandir o progresso do download', - 'app.localAiDownload.collapseAria': 'Recolher o progresso do download', - 'app.localAiDownload.dismissAria': 'Dispensar notificação de download', - 'mobile.nav.ariaLabel': 'Navegação móvel', - 'progress.stepsAria': 'Etapas de progresso', - 'progress.stepAria': 'Etapa {current} de {total}', - 'workspace.vaultsTitle': 'Cofres de conhecimento', - 'workspace.vaultsDesc': - 'Aponte para uma pasta local; os arquivos são fragmentados e espelhados na memória.', - 'calls.title': 'Chamadas', - 'calls.comingSoonBody': 'Chamadas assistidas por IA estarão disponíveis em breve. Fique atento.', - 'art.rotatingTetrahedronAria': 'Nave espacial rotativa de tetraedro invertido', - 'devOptions.sentryDisabled': '(sem id - Sentinela desabilitada nesta compilação)', - 'composio.expiredAuthorization': '{name} autorização expirou', - 'composio.expiredDescription': - 'Reconecte para reativar as ferramentas {name}. OpenHuman manterá esta integração indisponível até que você atualize o acesso de OAuth.', - 'channels.telegram.remoteControlTitle': 'Controle remoto (Telegram)', - 'channels.telegram.remoteControlBody': - 'Em um bate-papo Telegram permitido, envie /status, /sessions, /new ou /help. O roteamento de modelo ainda usa /model e /models.', - 'rewards.referralSection.retry': 'Tentar novamente', - 'settings.ai.plannerSummary': - 'Planejador: {sourceEvents} eventos de origem, {sent} enviados, {deduped} desduplicados.', - 'settings.ai.routeLabel': 'rota: {route}', - 'settings.ai.latestSpend': 'Último gasto: {amount} em {time} ({action})', - 'settings.ai.topActions': 'Principais ações', - 'settings.ai.noSpendRows': 'Nenhuma linha de gastos carregada.', - 'settings.ai.topHours': 'Principais horários', - 'settings.ai.noHourlySpend': 'Ainda não há gasto por hora.', - 'settings.autocomplete.appFilter.app': 'Aplicativo', - 'settings.autocomplete.appFilter.currentSuggestion': 'Sugestão atual', - 'settings.autocomplete.appFilter.debounce': 'Debounce', - 'settings.autocomplete.appFilter.enabled': 'Habilitado', - 'settings.autocomplete.appFilter.lastError': 'Último erro', - 'settings.autocomplete.appFilter.model': 'Modelo', - 'settings.autocomplete.appFilter.phase': 'Fase', - 'settings.autocomplete.appFilter.platformSupported': 'Plataforma suportada', - 'settings.autocomplete.appFilter.running': 'Em execução', - 'settings.autocomplete.debug.acceptedPrefix': 'Aceito: {value}', - 'settings.autocomplete.debug.acceptFailed': 'Falha ao aceitar sugestão', - 'settings.autocomplete.debug.alreadyRunning': 'O preenchimento automático já está em execução.', - 'settings.autocomplete.debug.clearHistoryFailed': 'Falha ao limpar o histórico', - 'settings.autocomplete.debug.didNotStart': 'O preenchimento automático não foi iniciado.', - 'settings.autocomplete.debug.disabledInSettings': - 'O preenchimento automático está desativado nas configurações. Habilite-o e salve primeiro.', - 'settings.autocomplete.debug.fetchSuggestionFailed': 'Falha ao buscar a sugestão atual', - 'settings.autocomplete.debug.inspectFocusedElementFailed': - 'Falha ao inspecionar o elemento em foco', - 'settings.autocomplete.debug.loadSettingsFailed': - 'Falha ao carregar as configurações de preenchimento automático', - 'settings.autocomplete.debug.noSuggestionApplied': 'Nenhuma sugestão foi aplicada.', - 'settings.autocomplete.debug.noSuggestionReturned': 'Nenhuma sugestão foi retornada.', - 'settings.autocomplete.debug.refreshStatusFailed': - 'Falha ao atualizar o status do preenchimento automático', - 'settings.autocomplete.debug.saveAdvancedSettingsFailed': - 'Falha ao salvar as configurações avançadas', - 'settings.autocomplete.debug.startFailed': 'Falha ao iniciar o preenchimento automático', - 'settings.autocomplete.debug.stopFailed': 'Falha ao interromper o preenchimento automático', - 'settings.autocomplete.debug.suggestionPrefix': 'Sugestão: {value}', - 'settings.autocomplete.shared.none': 'Nenhum', - 'settings.autocomplete.shared.notApplicable': 'n/a', - 'settings.autocomplete.shared.unknown': 'Desconhecido', - 'settings.billing.autoRecharge.expires': 'Expira {date}', - 'settings.billing.autoRecharge.spentThisWeek': '${spent} de ${limit} usado esta semana', - 'settings.localModel.deviceCapability.disabledLowercase': 'desativado', - 'settings.localModel.deviceCapability.presetDetails': - 'Bate-papo: {chatModel} · Visão: {visionModel} · RAM de destino: {targetRamGb} GB', - 'settings.localModel.download.capabilityChat': 'Bate-papo', - 'settings.localModel.download.capabilityEmbedding': 'Incorporação', - 'settings.localModel.download.capabilityStt': 'STT', - 'settings.localModel.download.capabilityTts': 'TTS', - 'settings.localModel.download.capabilityVision': 'Visão', - 'settings.localModel.download.embeddingDimensions': 'Dimensões: {dimensions}', - 'settings.localModel.download.embeddingModel': 'Modelo: {modelId}', - 'settings.localModel.download.embeddingVectors': 'Vetores: {count}', - 'settings.localModel.download.notAvailable': 'n/a', - 'settings.localModel.download.summaryHelper': - 'Chamadas `openhuman.inference_summarize` via Rust core', - 'settings.localModel.download.transcript': 'Transcrição:', - 'settings.localModel.download.ttsOutput': 'Saída: {outputPath}', - 'settings.localModel.download.ttsVoice': 'Voz: {voiceId}', - 'settings.localModel.status.contextBelowMinimumBadge': - '{contextLength} ctx - abaixo de {required} min', - 'settings.localModel.status.contextBelowMinimumTitle': - 'Rejeitado: os tokens {contextLength} da janela de contexto estão abaixo do mínimo de token {required} que a camada de memória exige. A recuperação seria corrompida pelo truncamento silencioso.', - 'settings.localModel.status.contextOkBadge': '{contextLength} ctx ✓', - 'settings.localModel.status.contextOkTitle': - 'Os tokens {contextLength} da janela de contexto atendem ao mínimo da camada de memória de {required} tokens.', - 'settings.localModel.status.contextUnknownBadge': 'ctx desconhecido', - 'settings.localModel.status.contextUnknownTitle': - 'Janela de contexto desconhecida; não foi possível confirmar se atende ao mínimo da camada de memória do token {required}.', - 'settings.localModel.status.expectedChat': 'Bate-papo: {model}', - 'settings.localModel.status.expectedEmbedding': 'Incorporação: {model}', - 'settings.localModel.status.expectedVision': 'Visão: {model}', - 'settings.localModel.status.externalProcess': 'Processo externo', - 'settings.localModel.status.notAvailable': 'n/a', - 'settings.mascot.customGifPlaceholder': 'https://example.com/avatar.gif', - 'settings.mascot.loadDetailError': 'Não foi possível carregar o mascote.', - 'settings.mascot.loadLibraryError': 'Não foi possível carregar a biblioteca de mascotes.', - 'settings.mascot.voice.customPlaceholder': 'por exemplo. 21m00Tcm4TlvDq8ikWAM', - 'settings.mascot.voice.previewText': "Hi, I'm your assistant. This is a voice preview.", - 'skills.channelIcon.discord': 'Discord', - 'skills.channelIcon.imessage': 'iMessage', - 'skills.channelIcon.telegram': 'Telegram', - 'skills.channelIcon.web': 'Web', - 'skills.channelIcon.yuanbao': 'Yuanbao', - 'skills.composio.poweredBy': 'Desenvolvido por Composio', - 'skills.composio.staleStatusTitle': 'As conexões estão mostrando status obsoleto', - 'skills.create.allowedToolsHelp': 'Renderizado no frontmatter SKILL.md como', - 'skills.create.allowedToolsPlaceholder': 'node_exec, fetch', - 'skills.create.licensePlaceholder': 'MIT', - 'skills.create.tagsPlaceholder': 'negociação, pesquisa', - 'skills.install.errors.alreadyInstalledHint': - 'Uma habilidade com este slug já existe no espaço de trabalho. Remova-o primeiro ou altere o frontmatter `metadata.id` / `name`.', - 'skills.install.errors.alreadyInstalledTitle': 'Habilidade já instalada', - 'skills.install.errors.fetchFailedHint': - 'A solicitação não foi concluída com êxito. Verifique os pontos URL em um arquivo público acessível e se o host retornou uma resposta 2xx.', - 'skills.install.errors.fetchFailedTitle': 'Falha na busca', - 'skills.install.errors.fetchTimedOutHint': - 'O host remoto não respondeu a tempo. Tente novamente ou aumente o tempo limite (1-600 s).', - 'skills.install.errors.fetchTimedOutTitle': 'Tempo limite de busca esgotado', - 'skills.install.errors.fetchTooLargeHint': - 'O SKILL.md deve ter menos de 1 MiB. Divida os recursos agrupados em arquivos `references/` ou `scripts/` em vez de inlinhá-los.', - 'skills.install.errors.fetchTooLargeTitle': 'SKILL.md muito grande', - 'skills.install.errors.genericHint': - 'O back-end retornou um erro. A mensagem bruta é mostrada abaixo.', - 'skills.install.errors.genericTitle': 'Não foi possível instalar a habilidade', - 'skills.install.errors.invalidSkillHint': - 'O frontmatter deve ser YAML válido com campos `name` e `description` não vazios, terminados por `---`.', - 'skills.install.errors.invalidSkillTitle': 'SKILL.md não analisou', - 'skills.install.errors.invalidUrlHint': - 'Somente HTTPS URLs públicos são permitidos. Hosts privados, de loopback e de metadados são bloqueados.', - 'skills.install.errors.invalidUrlTitle': 'URL rejeitado', - 'skills.install.errors.unsupportedUrlHint': - 'Somente links diretos `.md` funcionam. Para GitHub, link para um arquivo (github.com/owner/repo/blob/.../SKILL.md) - as raízes da árvore e do repositório não estão instaladas.', - 'skills.install.errors.unsupportedUrlTitle': 'Formulário URL não suportado', - 'skills.install.errors.writeFailedHint': - 'O diretório de habilidades do espaço de trabalho não era gravável. Verifique as permissões do sistema de arquivos para `/.openhuman/skills/`.', - 'skills.install.errors.writeFailedTitle': 'Não foi possível gravar SKILL.md', - 'skills.install.fetchingPrefix': 'Buscando', - 'skills.install.fetchingSuffix': 'isso pode levar até o tempo limite que você configurou.', - 'skills.install.subtitleMiddle': 'sobre HTTPS e instala-o em', - 'skills.install.subtitlePrefix': 'Busca apenas um único', - 'skills.install.subtitleSuffix': 'HTTPS; hosts privados e de loopback são bloqueados.', - 'skills.install.successDiscovered': 'Descobertas {count} novas habilidades.', - 'skills.install.successNoNewIds': - 'Habilidade instalada, mas nenhum novo ID de habilidade apareceu - o catálogo pode já conter uma habilidade com o mesmo slug.', - 'skills.install.timeoutHelp': - 'O padrão é 60 segundos. Valores fora de 1-600 são fixados no lado do servidor.', - 'skills.install.timeoutInvalid': 'Deve ser um número inteiro entre 1 e 600.', - 'skills.install.timeoutPlaceholder': '60', - 'skills.install.urlHelpMiddle': 'arquivo.', - 'skills.install.urlHelpPrefix': 'Link direto para uma reescrita automática de', - 'skills.install.urlHelpSuffix': 'URLs para', - 'skills.install.urlInvalidPrefix': 'URL deve ser um link', - 'skills.install.urlInvalidSuffix': 'bem formado.', - 'skills.install.urlPlaceholder': 'https://raw.githubusercontent.com/owner/repo/main/SKILL.md', - 'skills.meetingBots.platformComingSoon': 'O suporte {label} estará disponível em breve.', - 'skills.meetingBots.platformHints.gmeet': 'meet.google.com/abc-defg-hij', - 'skills.meetingBots.platformHints.teams': 'times.microsoft.com/...', - 'skills.meetingBots.platformHints.zoom': 'zoom.us/j/...', - 'skills.meetingBots.platforms.gmeet': 'Google Conheça', - 'skills.meetingBots.platforms.teams': 'Microsoft Teams', - 'skills.meetingBots.platforms.zoom': 'Zoom', - 'skills.meetingBots.soonSuffix': 'em breve', - 'skills.setup.screenIntel.permissionPathLabel': 'macOS aplica privacidade a:', - 'settings.agentAccess.title': 'Agent OS access', - 'settings.agentAccess.menuDesc': - 'Control where the agent can read/write and whether it can use the shell.', - 'settings.agentAccess.loadError': 'Failed to load access settings', - 'settings.agentAccess.saveError': 'Failed to save access settings', - 'settings.agentAccess.saved': 'Saved — applies on your next message.', - 'settings.agentAccess.desktopOnly': 'Access settings are only available in the desktop app.', - 'settings.agentAccess.loading': 'Loading…', - 'settings.agentAccess.accessMode': 'Access mode', - 'settings.agentAccess.tier.readonly.title': 'Read-only', - 'settings.agentAccess.tier.readonly.desc': - 'Reads files and runs read-only commands to explore — but never writes, edits, or runs anything that changes state.', - 'settings.agentAccess.tier.supervised.title': 'Ask before edit', - 'settings.agentAccess.tier.supervised.desc': - 'Creates new files freely, but asks for your approval before editing an existing file, running a command, reaching the network, or installing anything.', - 'settings.agentAccess.tier.full.title': 'Full access', - 'settings.agentAccess.tier.full.desc': - 'Runs commands with your full user account access — it can read/write anywhere allowed, except credential and system stores. Destructive commands, network access, and installs still ask for approval.', - 'settings.agentAccess.defaultTag': '(default)', - 'settings.agentAccess.fullWarning': - '⚠ Full access runs commands with your full account access and is not sandboxed. Only enable it when you trust the agent with this machine. Credential and system directories stay blocked, and destructive, network, and install actions still ask for approval.', - 'settings.agentAccess.confine.label': 'Confine to workspace', - 'settings.agentAccess.confine.desc': - 'Restrict the agent to the workspace directory (plus any granted folders), whichever access mode is selected. When off, it can reach anywhere your user can — except the always-blocked credential and system directories.', - 'settings.agentAccess.grantedFolders': 'Granted folders', - 'settings.agentAccess.alwaysAllow': 'Always-allowed tools', - 'settings.agentAccess.alwaysAllowDesc': - 'Tools you marked "Always allow" in chat run without asking. Remove one to be prompted again.', - 'settings.agentAccess.alwaysAllowNone': 'No always-allowed tools yet.', - 'settings.agentAccess.grantedDesc': - 'Folders the agent may read and write, in addition to the workspace. Credential stores (~/.ssh, ~/.gnupg, ~/.aws, keychains) and system directories (/etc, /System, C:\\Windows, …) are always blocked, even inside a granted folder.', - 'settings.agentAccess.noneGranted': 'No folders granted.', - 'settings.agentAccess.readWrite': 'read + write', - 'settings.agentAccess.readOnly': 'read-only', - 'settings.agentAccess.remove': 'Remove', - 'settings.agentAccess.pathPlaceholder': 'Caminho absoluto da pasta', - 'settings.agentAccess.accessLevelLabel': 'Access level', - 'settings.agentAccess.add': 'Add', - 'settings.agentAccess.saving': 'Saving…', - 'settings.agentAccess.changesApply': 'Changes apply on your next message.', - 'skills.tabs.runners': 'Runners', - 'settings.developerMenu.skillsRunner.title': 'Skills Runner', - 'settings.developerMenu.skillsRunner.desc': - 'Run any bundled skill ad-hoc — fill its inputs and fire a background autonomous run', - 'settings.developerMenu.skillsRunner.panelDesc': - 'Pick a bundled skill, fill in its declared inputs, and fire a fire-and-forget background run. Use Dev Workflow instead if you want a cron-scheduled recurring job.', - 'settings.skillsRunner.skill': 'Skill', - 'settings.skillsRunner.selectSkill': 'Select a skill…', - 'settings.skillsRunner.loadingSkills': 'Loading skills…', - 'settings.skillsRunner.loadingDescription': 'Loading skill inputs…', - 'settings.skillsRunner.noInputs': 'This skill declares no inputs.', - 'settings.skillsRunner.placeholder.required': 'required', - 'settings.skillsRunner.runNow': 'Run now', - 'settings.skillsRunner.starting': 'Starting…', - 'settings.skillsRunner.started': 'Started — run id:', - 'settings.skillsRunner.logPath': 'Log:', - 'settings.skillsRunner.error.listSkills': 'Failed to load skills:', - 'settings.skillsRunner.error.describe': 'Failed to load inputs:', - 'settings.skillsRunner.error.missingRequired': 'Missing required input(s):', - 'settings.skillsRunner.error.run': 'Run failed to start:', - 'settings.skillsRunner.error.preflightGate': 'Preflight gate failed', - 'settings.skillsRunner.schedule.heading': 'Schedule (recurring)', - 'settings.skillsRunner.schedule.help': - 'Save this skill + inputs as a recurring cron job. The agent will call run_skill at each tick.', - 'settings.skillsRunner.schedule.frequency': 'Frequency', - 'settings.skillsRunner.schedule.every30min': 'Every 30 minutes', - 'settings.skillsRunner.schedule.everyHour': 'Every hour', - 'settings.skillsRunner.schedule.every2hours': 'Every 2 hours', - 'settings.skillsRunner.schedule.every6hours': 'Every 6 hours', - 'settings.skillsRunner.schedule.onceDaily': 'Once daily (9:00)', - 'settings.skillsRunner.schedule.save': 'Save schedule', - 'settings.skillsRunner.schedule.saving': 'Saving…', - 'settings.skillsRunner.schedule.saved': 'Schedule saved.', - 'settings.skillsRunner.schedule.error': 'Schedule save failed:', - 'settings.skillsRunner.schedule.loadingJobs': 'Loading existing schedules…', - 'settings.skillsRunner.schedule.noJobs': 'No schedules saved for this skill yet.', - 'settings.skillsRunner.schedule.existing': 'Scheduled jobs for this skill:', - 'settings.skillsRunner.schedule.runNow': 'Run', - 'settings.skillsRunner.schedule.remove': 'Remove', - 'settings.skillsRunner.recentRuns.headingForSkill': 'Recent runs for this skill', - 'settings.skillsRunner.recentRuns.headingAll': 'Recent skill runs (all)', - 'settings.skillsRunner.recentRuns.refresh': 'Refresh', - 'settings.skillsRunner.recentRuns.loading': 'Loading recent runs…', - 'settings.skillsRunner.recentRuns.empty': 'No recent runs.', - 'settings.skillsRunner.viewer.loading': 'Loading log…', - 'settings.skillsRunner.viewer.tailing': 'Live tailing', - 'settings.skillsRunner.viewer.fetching': 'fetching', - 'settings.skillsRunner.viewer.error': 'Log read failed:', - 'settings.skillsRunner.repoPicker.loading': 'Loading repositories…', - 'settings.skillsRunner.repoPicker.select': 'Select a repository…', - 'settings.skillsRunner.repoPicker.empty': - 'No repositories returned. Connect GitHub via Composio to populate this list.', - 'settings.skillsRunner.repoPicker.notConnected': - 'GitHub isn’t connected via Composio. Connect it under Skills → Composio first.', - 'settings.skillsRunner.repoPicker.privateTag': '(private)', - 'settings.skillsRunner.branchPicker.needRepo': 'Pick a repo first…', - 'settings.skillsRunner.branchPicker.loading': 'Loading branches…', - 'settings.skillsRunner.branchPicker.select': 'Select a branch…', - 'settings.modelHealth.title': 'Model Health', - 'settings.modelHealth.desc': - 'Per-model quality, hallucination rate, and cost comparison across active models', - 'settings.modelHealth.allStatuses': 'All statuses', - 'settings.modelHealth.models': 'models', - 'settings.modelHealth.loading': 'Loading model data...', - 'settings.modelHealth.empty': 'No models registered', - 'settings.modelHealth.col.model': 'Model', - 'settings.modelHealth.col.quality': 'Quality', - 'settings.modelHealth.col.halluc': 'Halluc. Rate', - 'settings.modelHealth.col.cost': 'Cost / 1M out', - 'settings.modelHealth.col.agents': 'Agents', - 'settings.modelHealth.col.status': 'Status', - 'settings.modelHealth.badge.keep': 'Keep', - 'settings.modelHealth.badge.replace': 'Replace', - 'settings.modelHealth.badge.staging': 'Staging test', - 'settings.modelHealth.badge.vision': 'Vision only', - 'settings.modelHealth.swap': 'Swap?', - 'settings.modelHealth.modal.title': 'Replace Model?', - 'settings.modelHealth.modal.hallucRate': 'Hallucination rate', - 'settings.modelHealth.modal.cancel': 'Cancel', - 'settings.modelHealth.modal.apply': 'Apply Replacement', - 'settings.modelHealth.tag.cheaper': 'CHEAPER', - 'settings.modelHealth.tag.better': 'BETTER', - // Task sources (#task-sources) - 'settings.taskSources.title': 'Task Sources', - 'settings.taskSources.subtitle': 'Pull tasks from your tools onto the agent todo board', - 'settings.taskSources.description': - 'Collect work items from GitHub, Notion, Linear, and ClickUp, enrich them, and route them onto the agent todo board.', - 'settings.taskSources.connectHint': - 'Task sources use your connected accounts. Connect them under Integrations first.', - 'settings.taskSources.disabledBanner': - 'Task sources are disabled in settings. Enable them to poll automatically.', - 'settings.taskSources.loadError': 'Failed to load task sources', - 'settings.taskSources.addTitle': 'Add a task source', - 'settings.taskSources.provider': 'Provider', - 'settings.taskSources.name': 'Name (optional)', - 'settings.taskSources.namePlaceholder': 'e.g. My open issues', - 'settings.taskSources.github.repo': 'Repository (owner/name, optional)', - 'settings.taskSources.github.labels': 'Labels (comma-separated)', - 'settings.taskSources.notion.database': 'Database (board) ID', - 'settings.taskSources.linear.team': 'Team ID (optional)', - 'settings.taskSources.clickup.team': 'Workspace (team) ID (optional)', - 'settings.taskSources.assignedToMe': 'Only items assigned to me', - 'settings.taskSources.add': 'Add source', - 'settings.taskSources.adding': 'Adding…', - 'settings.taskSources.preview': 'Preview', - 'settings.taskSources.previewResult': '{count} task(s) match this filter', - 'settings.taskSources.fetchNow': 'Fetch now', - 'settings.taskSources.fetching': 'Fetching…', - 'settings.taskSources.fetchResult': 'Routed {routed} of {fetched} task(s)', - 'settings.taskSources.configured': 'Configured sources', - 'settings.taskSources.empty': 'No task sources configured yet.', - 'settings.taskSources.proactive': 'Proactive', - 'settings.taskSources.lastFetch': 'Last fetch', - 'settings.taskSources.never': 'Never', - 'settings.taskSources.statusEnabled': 'Enabled', - 'settings.taskSources.statusDisabled': 'Disabled', - 'settings.taskSources.enable': 'Enable', - 'settings.taskSources.disable': 'Disable', - 'settings.taskSources.remove': 'Remove', - 'settings.taskSources.removeConfirm': - 'Remove this task source? All ingested task history will be deleted and cannot be undone.', - - 'settings.taskSources.refresh': 'Refresh', - // Task sources provider labels (#task-sources) - 'settings.taskSources.providers.github': 'GitHub', - 'settings.taskSources.providers.notion': 'Notion', - 'settings.taskSources.providers.linear': 'Linear', - 'settings.taskSources.providers.clickup': 'ClickUp', - - // /skills IA restructure (Phase 2/3) — dashboard + new-skill page. - 'skills.dashboard.title': 'Skills', - 'skills.dashboard.scheduledHeading': 'Scheduled skills', - 'skills.dashboard.emptyTitle': 'No scheduled skills', - 'skills.dashboard.emptyBody': - 'Run a bundled skill once or save a recurring schedule to see it here.', - 'skills.dashboard.create': 'Create a Skill', - 'skills.dashboard.run': 'Run a Skill', - 'skills.dashboard.enable': 'Enable scheduled skill', - 'skills.dashboard.disable': 'Disable scheduled skill', - 'skills.dashboard.lastRun': 'Last run', - 'skills.dashboard.nextRun': 'Next run', - 'skills.dashboard.cardOpenRunner': 'Open in runner', - 'skills.dashboard.loadError': 'Failed to load scheduled skills', - 'skills.new.title': 'Create a skill', - 'skills.new.placeholderBody': - 'Authoring form arrives soon. For now, use the “New skill” button on the runner page.', - 'settings.agentAccess.requireTaskPlanApproval.label': 'Require task plan approval', - 'settings.agentAccess.requireTaskPlanApproval.desc': - 'Pause before an assigned agent executes an agent-authored task brief.', -}; - -export default pt5; diff --git a/app/src/lib/i18n/chunks/ru-1.ts b/app/src/lib/i18n/chunks/ru-1.ts deleted file mode 100644 index 45bf1cb43..000000000 --- a/app/src/lib/i18n/chunks/ru-1.ts +++ /dev/null @@ -1,1623 +0,0 @@ -import type { TranslationMap } from '../types'; - -// Russian (Русский) chunk 1/5. Translated from chunks/en-1.ts. -const ru1: TranslationMap = { - 'nav.home': 'Главная', - 'nav.human': 'Человек', - 'nav.chat': 'Чат', - 'nav.connections': 'Подключения', - 'nav.memory': 'Интеллект', - 'nav.alerts': 'Оповещения', - 'nav.rewards': 'Награды', - 'nav.settings': 'Настройки', - 'common.cancel': 'Отмена', - 'common.save': 'Сохранить', - 'common.confirm': 'Подтвердить', - 'common.delete': 'Удалить', - 'common.edit': 'Редактировать', - 'common.create': 'Создать', - 'common.search': 'Поиск', - 'common.loading': 'загрузка…', - 'common.error': 'Ошибка', - 'common.success': 'Готово', - 'common.back': 'Назад', - 'common.next': 'Далее', - 'common.finish': 'Завершить', - 'common.close': 'Закрыть', - 'common.enabled': 'Включено', - 'common.disabled': 'Отключено', - 'common.on': 'Вкл', - 'common.off': 'Выкл', - 'common.yes': 'Да', - 'common.no': 'Нет', - 'common.ok': 'Понятно', - 'common.retry': 'Повторить', - 'common.copy': 'Копировать', - 'common.copied': 'Скопировано', - 'common.learnMore': 'Узнать больше', - 'common.seeAll': 'Посмотреть', - 'common.dismiss': 'Закрыть', - 'common.clear': 'Очистить', - 'common.reset': 'Сбросить', - 'common.refresh': 'Обновить', - 'common.export': 'Экспорт', - 'common.import': 'Импорт', - 'common.upload': 'Загрузить', - 'common.download': 'Скачать', - 'common.add': 'Добавить', - 'common.remove': 'Убрать', - 'common.showMore': 'Показать больше', - 'common.showLess': 'Показать меньше', - 'common.submit': 'Отправить', - 'common.continue': 'Продолжить', - 'common.comingSoon': 'Скоро', - 'settings.general': 'Общие', - 'settings.featuresAndAI': 'Функции и AI', - 'settings.billingAndRewards': 'Оплата и награды', - 'settings.support': 'Поддержка', - 'settings.advanced': 'Дополнительно', - 'settings.dangerZone': 'Опасная зона', - 'settings.account': 'Аккаунт', - 'settings.accountDesc': 'Фраза восстановления, команда, подключения и конфиденциальность', - 'settings.notifications': 'Уведомления', - 'settings.notificationsDesc': - 'Режим «Не беспокоить» и настройки уведомлений для каждого аккаунта', - 'settings.notifications.tabs.preferences': 'Настройки', - 'settings.notifications.tabs.routing': 'Маршрутизация', - 'settings.features': 'Функции', - 'settings.featuresDesc': 'Слежение за экраном, мессенджеры и инструменты', - 'settings.aiModels': 'AI и модели', - 'settings.aiModelsDesc': 'Настройка локальных AI-моделей, загрузки и LLM-провайдер', - 'settings.ai': 'Настройки AI', - 'settings.aiDesc': 'Облачные провайдеры, локальные модели Ollama и маршрутизация по задачам', - 'settings.billingUsage': 'Оплата и использование', - 'settings.billingUsageDesc': 'Подписка, кредиты и способы оплаты', - 'settings.rewards': 'Награды', - 'settings.rewardsDesc': 'Рефералы, купоны и заработанные кредиты', - 'settings.restartTour': 'Повторить тур', - 'settings.restartTourDesc': 'Запустить обучение заново с самого начала', - 'settings.about': 'О приложении', - 'settings.aboutDesc': 'Версия приложения и обновления', - 'settings.developerOptions': 'Дополнительно', - 'settings.developerOptionsDesc': - 'Настройки AI, каналы связи, инструменты, диагностика и панели отладки', - 'settings.clearAppData': 'Очистить данные приложения', - 'settings.clearAppDataDesc': 'Выйти из аккаунта и удалить все локальные данные приложения', - 'settings.logOut': 'Выйти', - 'settings.logOutDesc': 'Выйти из своего аккаунта', - 'settings.exitLocalSession': 'Выход из локального сеанса', - 'settings.exitLocalSessionDesc': 'Возврат к экрану входа в систему', - 'settings.language': 'Язык', - 'settings.languageDesc': 'Язык отображения интерфейса', - 'settings.alerts': 'Оповещения', - 'settings.alertsDesc': 'Смотри последние оповещения и активность во входящих', - 'settings.account.recoveryPhrase': 'Фраза восстановления', - 'settings.account.recoveryPhraseDesc': 'Просмотр и резервное копирование фразы восстановления', - 'settings.account.team': 'Команда', - 'settings.account.teamDesc': 'Управление участниками команды и правами', - 'settings.account.connections': 'Подключения', - 'settings.account.connectionsDesc': 'Управление привязанными аккаунтами и сервисами', - 'settings.account.privacy': 'Конфиденциальность', - 'settings.account.privacyDesc': 'Контролируй, какие данные покидают твой компьютер', - 'settings.notifications.doNotDisturb': 'Не беспокоить', - 'settings.notifications.doNotDisturbDesc': 'Отключить все уведомления на заданный период', - 'settings.notifications.channelControls': 'По каналам', - 'settings.notifications.channelControlsDesc': 'Настройка уведомлений для каждого канала', - 'settings.features.screenAwareness': 'Слежение за экраном', - 'settings.features.screenAwarenessDesc': 'Разреши ассистенту видеть активное окно', - 'settings.features.messaging': 'Мессенджеры', - 'settings.features.messagingDesc': 'Настройки каналов и интеграции мессенджеров', - 'settings.features.tools': 'Инструменты', - 'settings.features.toolsDesc': 'Управление подключёнными инструментами и интеграциями', - 'settings.ai.localSetup': 'Настройка локального AI', - 'settings.ai.localSetupDesc': 'Загрузка и настройка локальных AI-моделей', - 'settings.ai.llmProvider': 'LLM-провайдер', - 'settings.ai.llmProviderDesc': 'Выбери и настрой своего AI-провайдера', - 'clearData.title': 'Очистить данные приложения', - 'clearData.warning': 'Это выйдет из аккаунта и навсегда удалит локальные данные, включая:', - 'clearData.bulletSettings': 'Настройки и переписки', - 'clearData.bulletCache': 'Все локальные кэши интеграций', - 'clearData.bulletWorkspace': 'Данные рабочего пространства', - 'clearData.bulletOther': 'Все прочие локальные данные', - 'clearData.irreversible': 'Это действие нельзя отменить.', - 'clearData.clearing': 'Очистка данных…', - 'clearData.failed': 'Не удалось очистить данные и выйти. Попробуй ещё раз.', - 'clearData.failedLogout': 'Не удалось выйти. Попробуй ещё раз.', - 'clearData.failedPersist': 'Не удалось сбросить состояние приложения. Попробуй ещё раз.', - 'welcome.title': 'Добро пожаловать в OpenHuman', - 'welcome.subtitle': 'Твой персональный суперинтеллект. Приватный, простой и невероятно мощный.', - 'welcome.connectPrompt': 'Настроить RPC URL (дополнительно)', - 'welcome.selectRuntime': 'Выбрать среду выполнения', - 'welcome.urlPlaceholder': 'http://localhost:8089', - 'welcome.invalidUrl': 'Введи корректный URL (http или https)', - 'welcome.connecting': 'Проверка', - 'welcome.connect': 'Проверить', - 'home.greeting': 'Доброе утро', - 'home.greetingAfternoon': 'Добрый день', - 'home.greetingEvening': 'Добрый вечер', - 'home.askAssistant': 'Спроси ассистента о чём угодно...', - 'home.statusOk': - 'Устройство подключено. Не закрывай приложение, чтобы поддерживать соединение. Отправь сообщение агенту с помощью кнопки ниже.', - 'home.statusBackendOnly': 'Переподключение к серверу… агент скоро снова будет доступен.', - 'home.statusCoreUnreachable': - 'Локальный процесс OpenHuman не отвечает. Возможно, он завис или не запустился.', - 'home.statusInternetOffline': - 'Нет подключения к интернету. Проверь сеть или перезапусти приложение.', - 'home.restartCore': 'Перезапустить ядро', - 'home.restartingCore': 'Перезапуск ядра…', - 'home.themeToggle.toLight': 'Переключить на светлую тему', - 'home.themeToggle.toDark': 'Переключить на тёмную тему', - 'chat.newThread': 'Новый чат', - 'chat.typeMessage': 'Введи сообщение...', - 'chat.send': 'Отправить сообщение', - 'chat.thinking': 'Думаю...', - 'chat.noMessages': 'Сообщений пока нет', - 'chat.startConversation': 'Начни разговор', - 'chat.regenerate': 'Сгенерировать снова', - 'chat.copyResponse': 'Скопировать ответ', - 'chat.citations': 'Источники', - 'chat.toolUsed': 'Использован инструмент', - 'scope.legacy': 'Устаревшее', - 'scope.user': 'Пользователь', - 'scope.project': 'Проект', - 'skills.title': 'Подключения', - 'skills.search': 'Поиск подключений...', - 'skills.noResults': 'Подключения не найдены', - 'skills.connect': 'Подключить', - 'skills.disconnect': 'Отключить', - 'skills.configure': 'Управление', - 'skills.connected': 'Подключено', - 'skills.available': 'Доступно', - 'skills.addAccount': 'Добавить аккаунт', - 'skills.channels': 'Каналы', - 'skills.integrations': 'Интеграции', - 'memory.title': 'Память', - 'memory.search': 'Поиск воспоминаний...', - 'memory.noResults': 'Воспоминания не найдены', - 'memory.empty': 'Воспоминаний пока нет. Они создаются автоматически в процессе общения.', - 'memory.tab.memory': 'Память', - 'memory.tab.tasks': 'Agent Tasks', - 'memory.tab.tasksDescription': - 'Create and track tasks — your own to-dos plus the boards your agents build across conversations.', - 'memory.tab.subconscious': 'Подсознание', - 'memory.tab.dreams': 'Сны', - 'memory.tab.calls': 'Звонки', - 'memory.tab.diagram': 'Diagram', - 'memory.tab.settings': 'Настройки', - 'memory.analyzeNow': 'Анализировать сейчас', - 'memoryTree.status.title': 'Memory Tree', - 'memoryTree.status.autoSyncLabel': 'Auto-sync', - 'memoryTree.status.autoSyncDescription': - 'Pause to stop new ingestion. Existing wiki stays queryable.', - 'memoryTree.status.statusTile': 'Status', - 'memoryTree.status.lastSyncTile': 'Last sync', - 'memoryTree.status.totalChunksTile': 'Total chunks', - 'memoryTree.status.wikiSizeTile': 'Wiki size', - 'memoryTree.status.statusRunning': 'Running', - 'memoryTree.status.statusPaused': 'Paused', - 'memoryTree.status.statusSyncing': 'Syncing', - 'memoryTree.status.statusError': 'Error', - 'memoryTree.status.statusIdle': 'Idle', - 'memoryTree.status.never': 'Never', - 'memoryTree.status.fetchError': "Couldn't fetch Memory Tree status", - 'memoryTree.status.retry': 'Retry', - 'memoryTree.status.toggleFailed': "Couldn't toggle auto-sync", - 'memoryTree.status.justNow': 'just now', - 'memoryTree.status.secondsAgo': '{count}s ago', - 'memoryTree.status.minuteAgo': '1 min ago', - 'memoryTree.status.minutesAgo': '{count} min ago', - 'memoryTree.status.hourAgo': '1 hr ago', - 'memoryTree.status.hoursAgo': '{count} hr ago', - 'memoryTree.status.dayAgo': '1 day ago', - 'memoryTree.status.daysAgo': '{count} days ago', - 'alerts.title': 'Оповещения', - 'alerts.empty': 'Оповещений пока нет', - 'alerts.markAllRead': 'Отметить всё прочитанным', - 'alerts.unread': 'непрочитано', - 'rewards.title': 'Награды', - 'rewards.referrals': 'Рефералы', - 'rewards.coupons': 'Активировать', - 'rewards.credits': 'Кредиты', - 'rewards.referralCode': 'Твой реферальный код', - 'rewards.copyCode': 'Скопировать код', - 'rewards.share': 'Поделиться', - 'onboarding.welcome': 'Привет. Я OpenHuman.', - 'onboarding.welcomeDesc': - 'Твой суперинтеллектуальный AI-ассистент, работающий прямо на твоём компьютере. Приватный, простой и невероятно мощный.', - 'onboarding.context': 'Сбор контекста', - 'onboarding.contextDesc': 'Подключи инструменты и сервисы, которыми пользуешься каждый день.', - 'onboarding.localAI': 'Локальный AI', - 'onboarding.localAIDesc': 'Настрой локальную AI-модель, работающую прямо на твоём устройстве.', - 'onboarding.chatProvider': 'Чат-провайдер', - 'onboarding.chatProviderDesc': 'Выбери, как хочешь общаться с ассистентом.', - 'onboarding.referral': 'Реферал', - 'onboarding.referralDesc': 'Введи реферальный код, если он у тебя есть.', - 'onboarding.finish': 'Завершить настройку', - 'onboarding.finishDesc': 'Всё готово! Начни пользоваться OpenHuman.', - 'onboarding.skip': 'Пропустить', - 'onboarding.getStarted': 'Начать', - 'onboarding.runtimeChoice.title': 'Как ты хочешь запустить OpenHuman?', - 'onboarding.runtimeChoice.subtitle': - 'Выбери подходящий вариант. Изменить можно позже в Настройках.', - 'onboarding.runtimeChoice.cloud.title': 'Просто', - 'onboarding.runtimeChoice.cloud.tagline': 'Пусть OpenHuman сам обо всём позаботится.', - 'onboarding.runtimeChoice.cloud.f1': 'Встроенная безопасность', - 'onboarding.runtimeChoice.cloud.f2': 'Сжатие токенов для экономии ресурсов', - 'onboarding.runtimeChoice.cloud.f3': 'Одна подписка — все модели включены', - 'onboarding.runtimeChoice.cloud.f4': 'Никаких API-ключей', - 'onboarding.runtimeChoice.cloud.f5': 'Простая настройка', - 'onboarding.runtimeChoice.custom.title': 'Свои настройки', - 'onboarding.runtimeChoice.custom.tagline': - 'Используй свои ключи. Полный контроль над тем, что используется.', - 'onboarding.runtimeChoice.custom.f1': 'Для большинства функций потребуются API-ключи', - 'onboarding.runtimeChoice.custom.f2': 'Переиспользует сервисы, за которые ты уже платишь', - 'onboarding.runtimeChoice.custom.f3': 'Может быть бесплатным, если всё запускать локально', - 'onboarding.runtimeChoice.custom.f4': 'Больше настроек и параметров', - 'onboarding.runtimeChoice.custom.f5': - 'Лучший выбор для продвинутых пользователей и разработчиков', - 'onboarding.runtimeChoice.cloud.creditHighlight': '$1 бесплатный кредит для знакомства', - 'onboarding.runtimeChoice.continueCloud': 'Продолжить с простым режимом', - 'onboarding.runtimeChoice.continueCustom': 'Продолжить со своими настройками', - 'onboarding.runtimeChoice.recommended': 'Рекомендуется', - 'onboarding.apiKeys.title': 'Добавь свои API-ключи', - 'onboarding.apiKeys.subtitle': - 'Вставь их сейчас или пропусти и добавь позже в Настройки › AI. Ключи хранятся на этом устройстве в зашифрованном виде.', - 'onboarding.apiKeys.openaiLabel': 'API-ключ OpenAI', - 'onboarding.apiKeys.openaiPlaceholder': 'sk-...', - 'onboarding.apiKeys.anthropicLabel': 'API-ключ Anthropic', - 'onboarding.apiKeys.anthropicPlaceholder': 'sk-ant-...', - 'onboarding.apiKeys.saveError': 'Не удалось сохранить ключ. Проверь его и попробуй снова.', - 'onboarding.apiKeys.skipForNow': 'Пропустить', - 'onboarding.apiKeys.continue': 'Сохранить и продолжить', - 'onboarding.apiKeys.saving': 'Сохранение…', - 'onboarding.custom.stepperInference': 'Инференс', - 'onboarding.custom.stepperVoice': 'Голос', - 'onboarding.custom.stepperOAuth': 'OAuth', - 'onboarding.custom.stepperSearch': 'Поиск', - 'onboarding.custom.stepperEmbeddings': 'Embeddings', - 'onboarding.custom.stepperMemory': 'Память', - 'onboarding.custom.stepCounter': 'Шаг {n} из {total}', - 'onboarding.custom.defaultTitle': 'По умолчанию', - 'onboarding.custom.defaultSubtitle': 'Пусть OpenHuman сам управляет этим.', - 'onboarding.custom.configureTitle': 'Настроить', - 'onboarding.custom.configureSubtitle': 'Я сам выберу, что использовать.', - 'onboarding.custom.progressAriaLabel': 'Прогресс настройки', - 'onboarding.custom.continue': 'Продолжить', - 'onboarding.custom.back': 'Назад', - 'onboarding.custom.finish': 'Завершить настройку', - 'onboarding.custom.configureLater': - 'Можно завершить настройку после онбординга. Мы откроем нужную страницу настроек.', - 'onboarding.custom.openSettings': 'Открыть в настройках', - 'onboarding.custom.inference.title': 'Инференс (текст)', - 'onboarding.custom.inference.subtitle': - 'Какая языковая модель будет отвечать на вопросы и запускать агентов?', - 'onboarding.custom.inference.defaultDesc': - 'OpenHuman автоматически выбирает подходящую модель. Без ключей и настроек.', - 'onboarding.custom.inference.configureDesc': - 'Используй свой ключ OpenAI или Anthropic для всех текстовых задач.', - 'onboarding.custom.voice.title': 'Голос', - 'onboarding.custom.voice.subtitle': 'Распознавание и синтез речи для голосового режима.', - 'onboarding.custom.voice.defaultDesc': - 'OpenHuman поставляется с управляемым STT/TTS, который работает сразу. Ничего настраивать не нужно.', - 'onboarding.custom.voice.configureDesc': - 'Используй свой ElevenLabs / OpenAI Whisper / другой сервис. Настрой в Настройки › Голос.', - 'onboarding.custom.oauth.title': 'Подключения (OAuth)', - 'onboarding.custom.oauth.subtitle': 'Gmail, Slack, Notion и другие сервисы, требующие OAuth.', - 'onboarding.custom.oauth.defaultDesc': - 'OpenHuman использует управляемое рабочее пространство Composio. Один клик для подключения каждого сервиса.', - 'onboarding.custom.oauth.configureDesc': - 'Используй свой аккаунт Composio / API-ключ. Настрой в Настройки › Подключения.', - 'onboarding.custom.search.title': 'Поиск в интернете', - 'onboarding.custom.search.subtitle': 'Как OpenHuman ищет информацию в интернете.', - 'onboarding.custom.search.defaultDesc': - 'OpenHuman использует управляемый поисковый бэкенд. Ключи не нужны.', - 'onboarding.custom.search.configureDesc': - 'Используй свой ключ поискового провайдера (Tavily, Brave и др.). Настрой в Настройки › Инструменты.', - 'onboarding.custom.embeddings.title': 'Embeddings', - 'onboarding.custom.embeddings.subtitle': - 'How OpenHuman generates vector embeddings for semantic memory search.', - 'onboarding.custom.embeddings.defaultDesc': - 'OpenHuman uses a managed embedding service. No API key needed.', - 'onboarding.custom.embeddings.configureDesc': - 'Bring your own embedding provider (OpenAI, Voyage, Ollama, etc.).', - 'onboarding.custom.memory.title': 'Память', - 'onboarding.custom.memory.subtitle': - 'Как OpenHuman запоминает контекст, предпочтения и предыдущие разговоры.', - 'onboarding.custom.memory.defaultDesc': - 'OpenHuman автоматически управляет хранением и извлечением воспоминаний. Ничего настраивать не нужно.', - 'onboarding.custom.memory.configureDesc': - 'Просматривай, экспортируй или очищай память самостоятельно. Настрой в Настройки › Память.', - 'accounts.addAccount': 'Добавить аккаунт', - 'accounts.manageAccounts': 'Управление аккаунтами', - 'accounts.noAccounts': 'Аккаунты не подключены', - 'accounts.connectAccount': 'Подключи аккаунт для начала работы', - 'accounts.agent': 'Агент', - 'accounts.respondQueue': 'Очередь ответов', - 'accounts.disconnect': 'Отключить', - 'accounts.disconnectConfirm': 'Ты уверен, что хочешь отключить этот аккаунт?', - 'accounts.disconnectClearMemory': 'Also delete memory from this source', - 'accounts.disconnectClearMemoryHint': - 'Permanently removes local memory chunks linked to this connection.', - 'accounts.searchAccounts': 'Поиск аккаунтов...', - 'channels.title': 'Каналы', - 'channels.configure': 'Настроить канал', - 'channels.setup': 'Настройка', - 'channels.noChannels': 'Каналы не настроены', - 'channels.addChannel': 'Добавить канал', - 'channels.status.connected': 'Подключено', - 'channels.status.disconnected': 'Отключено', - 'channels.status.error': 'Ошибка', - 'channels.status.configuring': 'Настройка', - 'channels.defaultMessaging': 'Канал по умолчанию', - 'webhooks.title': 'Вебхуки', - 'webhooks.create': 'Создать вебхук', - 'webhooks.noWebhooks': 'Вебхуки не настроены', - 'webhooks.url': 'URL', - 'webhooks.secret': 'Секрет', - 'webhooks.events': 'События', - 'webhooks.archiveDirectory': 'Директория архива', - 'webhooks.todayFile': 'Файл за сегодня', - 'invites.title': 'Приглашения', - 'invites.create': 'Создать приглашение', - 'invites.noInvites': 'Активных приглашений нет', - 'invites.code': 'Код приглашения', - 'invites.copyLink': 'Скопировать ссылку', - 'devOptions.title': 'Дополнительно', - 'devOptions.diagnostics': 'Диагностика', - 'devOptions.diagnosticsDesc': 'Состояние системы, логи и метрики производительности', - 'devOptions.toolPolicyDiagnosticsDesc': - 'Tool inventory, policy posture, MCP allowlists, and recent blocks', - 'devOptions.toolPolicyDiagnostics.loading': 'Loading…', - 'devOptions.toolPolicyDiagnostics.unavailable': 'Diagnostics unavailable', - 'devOptions.toolPolicyDiagnostics.posture.title': 'Policy posture', - 'devOptions.toolPolicyDiagnostics.posture.autonomy': 'Autonomy:', - 'devOptions.toolPolicyDiagnostics.posture.workspaceOnly': 'Workspace only:', - 'devOptions.toolPolicyDiagnostics.posture.maxActionsPerHour': 'Max actions/hr:', - 'devOptions.toolPolicyDiagnostics.posture.approvalMediumRisk': 'Approval (medium risk):', - 'devOptions.toolPolicyDiagnostics.posture.blockHighRisk': 'Block high risk:', - 'devOptions.toolPolicyDiagnostics.inventory.title': 'Inventory', - 'devOptions.toolPolicyDiagnostics.inventory.totalTools': 'Total tools', - 'devOptions.toolPolicyDiagnostics.inventory.enabledTools': 'Enabled tools', - 'devOptions.toolPolicyDiagnostics.inventory.mcpStdioTools': 'MCP stdio tools', - 'devOptions.toolPolicyDiagnostics.inventory.jsonRpcTools': 'JSON-RPC tools', - 'devOptions.toolPolicyDiagnostics.mcpAllowlists.title': 'MCP allowlists', - 'devOptions.toolPolicyDiagnostics.mcpAllowlists.summary': - 'Enabled: {enabled} · Servers: {enabledCount}/{totalCount}', - 'devOptions.toolPolicyDiagnostics.mcpAllowlists.unnamed': '', - 'devOptions.toolPolicyDiagnostics.mcpAllowlists.allowDeny': 'allow={allowCount} deny={denyCount}', - 'devOptions.toolPolicyDiagnostics.mcpWriteAudit.title': 'MCP write audit', - 'devOptions.toolPolicyDiagnostics.mcpWriteAudit.summary': - 'Enabled: {enabled} · Recent (24h): {recentRows}', - 'devOptions.toolPolicyDiagnostics.recentBlocked.title': 'Recent blocked calls', - 'devOptions.toolPolicyDiagnostics.recentBlocked.empty': 'No blocked calls recorded.', - 'devOptions.toolPolicyDiagnostics.redactedSurfaces.title': 'Redacted surfaces', - 'devOptions.toolPolicyDiagnostics.redactedSurfaces.summary': - 'Write-capable: {writeCount} · Policy surfaces: {policyCount}', - 'devOptions.debugPanels': 'Панели отладки', - 'devOptions.debugPanelsDesc': 'Флаги функций, инспекция состояния и инструменты отладки', - 'devOptions.webhooks': 'Вебхуки', - 'devOptions.webhooksDesc': 'Настройка и тестирование вебхуков', - 'devOptions.memoryInspection': 'Инспекция памяти', - 'devOptions.memoryInspectionDesc': 'Просмотр, запросы и управление записями памяти', - 'voice.pushToTalk': 'Нажми и говори', - 'voice.recording': 'Запись...', - 'voice.processing': 'Обработка...', - 'voice.languageHint': 'Язык', - 'misc.rehydrating': 'Загрузка данных...', - 'misc.checkingServices': 'Проверка сервисов...', - 'misc.serviceUnavailable': 'Сервис недоступен', - 'misc.somethingWentWrong': 'Что-то пошло не так', - 'misc.tryAgainLater': 'Попробуй позже.', - 'misc.restartApp': 'Перезапустить приложение', - 'misc.updateAvailable': 'Доступно обновление', - 'misc.updateNow': 'Обновить сейчас', - 'misc.updateLater': 'Позже', - 'misc.downloading': 'Загрузка...', - 'misc.installing': 'Установка...', - 'misc.beta': - 'OpenHuman находится в стадии раннего бета-тестирования. Делись отзывами и сообщай об ошибках — каждый репорт помогает нам двигаться быстрее.', - 'misc.betaFeedback': 'Отправить отзыв', - 'mnemonic.title': 'Фраза восстановления', - 'mnemonic.warning': 'Запиши эти слова по порядку и храни в надёжном месте.', - 'mnemonic.copyWarning': - 'Никогда не делись фразой восстановления. Любой, кто её знает, получит доступ к твоему аккаунту.', - 'mnemonic.copied': 'Фраза восстановления скопирована в буфер обмена', - 'mnemonic.reveal': 'Показать фразу', - 'mnemonic.revealPhrase': 'Reveal recovery phrase', - 'mnemonic.hidden': 'Фраза восстановления скрыта', - 'privacy.title': 'Конфиденциальность и безопасность', - 'privacy.description': 'Отчёт о данных, отправляемых во внешние сервисы.', - 'privacy.empty': 'Передачи данных во внешние сервисы не обнаружены.', - 'privacy.whatLeavesComputer': 'Что покидает твой компьютер', - 'privacy.loading': 'Загрузка данных о конфиденциальности...', - 'privacy.loadError': - 'Не удалось загрузить список. Настройки аналитики ниже по-прежнему работают.', - 'privacy.noCapabilities': 'Ни одна функция не передаёт данные.', - 'privacy.sentTo': 'Отправляется в', - 'privacy.leavesDevice': 'Покидает устройство', - 'privacy.staysLocal': 'Остаётся локально', - 'privacy.anonymizedAnalytics': 'Анонимная аналитика', - 'privacy.shareAnonymizedData': 'Делиться анонимными данными об использовании', - 'privacy.shareAnonymizedDataDesc': - 'Помоги улучшить OpenHuman, отправляя анонимные отчёты об ошибках и данные об использовании. Все данные полностью анонимизированы — личные данные, сообщения, ключи кошелька и информация о сессии никогда не собираются.', - 'privacy.meetingFollowUps': 'Действия после встреч', - 'privacy.autoHandoffMeet': 'Автоматически передавать транскрипты Google Meet оркестратору', - 'privacy.autoHandoffMeetDesc': - 'Когда звонок в Google Meet заканчивается, оркестратор OpenHuman может прочитать транскрипт и выполнить действия: составить сообщения, запланировать задачи или опубликовать итоги в Slack. По умолчанию выключено.', - 'privacy.analyticsDisclaimer': - 'Вся аналитика и отчёты об ошибках полностью анонимизированы. При включении мы собираем только информацию об ошибках, тип устройства и расположение файлов с ошибками. Мы никогда не получаем доступ к твоим сообщениям, данным сессии, ключам кошелька, API-ключам или любой личной информации. Ты можешь изменить этот параметр в любое время.', - 'settings.about.version': 'Версия', - 'settings.about.updateAvailable': 'доступна', - 'settings.about.softwareUpdates': 'Обновления ПО', - 'settings.about.lastChecked': 'Последняя проверка', - 'settings.about.checking': 'Проверка...', - 'settings.about.checkForUpdates': 'Проверить обновления', - 'settings.about.releases': 'Релизы', - 'settings.about.releasesDesc': 'Просмотр заметок к релизам и предыдущих сборок на GitHub.', - 'settings.about.openReleases': 'Открыть релизы на GitHub', - 'settings.ai.overview': 'Обзор AI-системы', - 'migration.title': 'Импорт из другого ассистента', - 'migration.description': - 'Перенесите память и заметки из другого локального ассистента в это рабочее пространство. Сначала запустите «Предпросмотр», чтобы увидеть, что изменится, затем нажмите «Применить», чтобы скопировать данные. Текущая память сохраняется в резервную копию первой.', - 'migration.vendorLabel': 'Источник', - 'migration.sourceLabel': 'Путь к исходному рабочему пространству (необязательно)', - 'migration.sourcePlaceholder': - 'Оставьте пустым для автоопределения (например, ~/.openclaw/workspace)', - 'migration.sourcePlaceholderHermes': 'Leave blank to auto-detect (e.g. ~/.hermes)', - 'migration.sourceHint': - 'Если пусто, используется стандартное расположение источника. Укажите явный путь, если вы перенесли рабочее пространство.', - 'migration.previewAction': 'Предпросмотр', - 'migration.previewRunning': 'Предпросмотр…', - 'migration.applyAction': 'Применить импорт', - 'migration.applyRunning': 'Импорт…', - 'migration.applyDisclaimer': - '«Применить» разблокируется только после успешного предпросмотра того же источника. Существующая память сохраняется перед любым импортом.', - 'migration.reportTitlePreview': 'Предпросмотр — ничего ещё не импортировано', - 'migration.reportTitleApplied': 'Импорт завершён', - 'migration.report.source': 'Исходное пространство', - 'migration.report.target': 'Целевое пространство', - 'migration.report.fromSqlite': 'Из SQLite (brain.db)', - 'migration.report.fromMarkdown': 'Из Markdown', - 'migration.report.imported': 'Импортировано', - 'migration.report.skippedUnchanged': 'Пропущено (без изменений)', - 'migration.report.renamedConflicts': 'Переименовано при конфликте', - 'migration.report.warnings': 'Предупреждения', - 'migration.report.previewHint': - 'Данные ещё не импортированы. Нажмите «Применить импорт», чтобы скопировать.', - 'migration.report.appliedHint': - 'Импортированные записи теперь в вашей памяти. Запустите «Предпросмотр» снова для сравнения.', - 'migration.confirmImport.singular': - 'Импортировать {count} запись в текущее рабочее пространство?\n\nИсточник: {source}\nЦель: {target}\n\nПеред импортом будет сохранена резервная копия памяти.', - 'migration.confirmImport.plural': - 'Импортировать {count} записей в текущее рабочее пространство?\n\nИсточник: {source}\nЦель: {target}\n\nПеред импортом будет сохранена резервная копия памяти.', - // Settings menu: Appearance + Mascot (#2225) — English stubs; native translations welcome - 'settings.appearance': 'Внешний вид', - 'settings.appearanceDesc': 'Выберите светлую, темную или соответствующую теме вашей системы.', - 'settings.mascot': 'Талисман', - 'settings.mascotDesc': 'Выберите цвет талисмана, используемый в приложении.', - 'channels.authMode.managed_dm': 'Войдите с помощью OpenHuman', - 'channels.authMode.oauth': 'OAuth Вход в систему', - 'channels.authMode.bot_token': 'Используйте свой собственный токен бота', - 'channels.authMode.api_key': 'Используйте свой собственный ключ API', - 'channels.fieldRequired': 'Требуется {field}', - 'channels.mcp.title': 'MCP Серверы', - 'channels.mcp.description': - 'Browse and manage Model Context Protocol servers that extend the AI with new tools.', - 'skills.integrationsSubtitle': - 'Cloud-based OAuth connections — sign in with your account and Composio brokers the tokens so agents can read and act on your behalf. No API keys to manage.', - 'skills.tabs.composio': 'Composio', - 'skills.tabs.channels': 'Каналы', - 'skills.tabs.mcp': 'MCP Серверы', - 'skills.mcpComingSoon.title': 'MCP Серверы', - 'skills.mcpComingSoon.description': - 'MCP server management is coming soon. This tab will be the home for discovering, connecting, and monitoring your MCP server integrations.', - 'settings.about.connection': 'Соединение', - 'settings.about.connectionMode': 'Режим', - 'settings.about.connectionModeLocal': 'Локальный', - 'settings.about.connectionModeCloud': 'Облачный', - 'settings.about.connectionModeUnset': 'Не выбран', - 'settings.about.serverUrl': 'Сервер URL', - 'settings.about.serverUrlUnavailable': 'Недоступно', - 'settings.about.connectionHelperLocal': - 'Spawned in-process by the Tauri shell on app launch. The port is chosen at startup, so this URL changes between launches.', - 'settings.about.connectionHelperCloud': - 'Connected to a remote core. Change this in BootCheck or the cloud mode picker.', - 'settings.heartbeat.title': 'Heartbeat и циклы', - 'settings.heartbeat.desc': 'Управляйте частотой фонового планирования и проверяйте карту циклов.', - 'settings.ledgerUsage.title': 'Журнал использования', - 'settings.ledgerUsage.desc': 'Recent credit spend, budget math, and background API read budget.', - 'settings.costDashboard.title': 'Cost dashboard', - 'settings.costDashboard.desc': - '7-day spend and token burn across the swarm, with budget pace and per-model breakdown.', - 'settings.costDashboard.sevenDayCost': '7-day daily cost', - 'settings.costDashboard.sevenDayTokens': '7-day token usage', - 'settings.costDashboard.totalSpend': '7-day total', - 'settings.costDashboard.monthlyPace': 'Monthly pace', - 'settings.costDashboard.budgetLimit': 'Budget limit', - 'settings.costDashboard.utilization': 'Utilisation', - 'settings.costDashboard.modelBreakdown': 'Per-model breakdown', - 'settings.costDashboard.model': 'Model', - 'settings.costDashboard.provider': 'Provider', - 'settings.costDashboard.cost': 'Cost', - 'settings.costDashboard.tokens': 'Tokens', - 'settings.costDashboard.requests': 'Requests', - 'settings.costDashboard.percentOfTotal': '% of total', - 'settings.costDashboard.inputTokens': 'Input', - 'settings.costDashboard.outputTokens': 'Output', - 'settings.costDashboard.budgetNormal': 'On track', - 'settings.costDashboard.budgetWarning': 'Warning', - 'settings.costDashboard.budgetExceeded': 'Over budget', - 'settings.costDashboard.noBudget': 'No limit set', - 'settings.costDashboard.noData': 'No cost recorded yet for the last 7 days.', - 'settings.costDashboard.noModels': 'No model activity in the last 7 days.', - 'settings.costDashboard.loading': 'Loading cost dashboard…', - 'settings.costDashboard.disabledHint': - 'Cost dashboard is disabled in config. Set [cost.dashboard] enabled = true in config.toml to re-enable.', - 'settings.costDashboard.subtitle': - 'Live spend and token burn across the swarm. Bars auto-refresh every few seconds — no page reload needed.', - 'settings.costDashboard.summaryAriaLabel': 'Cost summary metrics', - 'settings.costDashboard.lastSevenDays': 'last 7 days', - 'settings.costDashboard.utilizationOf': 'of', - 'settings.costDashboard.thisMonth': 'this month', - 'settings.costDashboard.monthlyPaceHint': - 'Projected monthly spend at the current daily run-rate (avg × 30).', - 'settings.costDashboard.budgetLimitHint': - 'Monthly budget read from cost.monthly_limit_usd in config.toml.', - 'settings.costDashboard.dailyTarget': 'Daily target', - 'settings.costDashboard.today': 'Today', - 'settings.costDashboard.todayBadge': 'TODAY', - 'settings.costDashboard.unknownProvider': '—', - 'settings.costDashboard.justNow': 'Just now', - 'settings.costDashboard.secondsAgo': '{value}s ago', - 'settings.costDashboard.minutesAgo': '{value}m ago', - 'settings.costDashboard.hoursAgo': '{value}h ago', - 'settings.costDashboard.daysAgo': '{value}d ago', - 'settings.costDashboard.updated': 'Updated', - 'settings.costDashboard.refresh': 'Refresh', - 'settings.costDashboard.utcNote': 'Days bucketed in UTC', - 'settings.costDashboard.stackedNote': 'Input + output stacked', - 'settings.costDashboard.modelBreakdownHint': 'Aggregated across the last 7 days.', - 'settings.costDashboard.noDataHint': - 'Send an agent message — token usage from the next provider call will populate the chart within ~10 seconds.', - 'settings.search.title': 'Поисковая система', - 'settings.search.menuDesc': - 'Default to OpenHuman-managed search or wire up your own provider with an API key.', - 'settings.search.description': - 'Pick the search engine the agent uses. Managed uses OpenHuman’s backend (no setup). Parallel and Brave run direct from your machine using your API key.', - 'settings.search.engineAria': 'Поисковая система', - 'settings.search.engineManagedLabel': 'OpenHuman Управляемый', - 'settings.search.engineManagedDesc': - 'Default. Routed through the OpenHuman backend — no API key required.', - 'settings.search.engineParallelLabel': 'Parallel', - 'settings.search.engineParallelDesc': - 'Direct Parallel API: search, extract, chat, research, enrich, dataset tools.', - 'settings.search.engineBraveLabel': 'Brave Поиск', - 'settings.search.engineBraveDesc': 'Direct Brave Search API: web, news, image, and video tools.', - 'settings.search.engineQueritLabel': 'Querit', - 'settings.search.engineQueritDesc': - 'Direct Querit API: web search with site, time range, country, and language filters.', - 'settings.search.statusConfigured': 'Настроено', - 'settings.search.statusNeedsKey': 'Требуется ключ API', - 'settings.search.fallbackToManaged': - 'No key configured — search will fall back to Managed until a key is saved.', - 'settings.search.getApiKey': 'Получите ключ API', - 'settings.search.save': 'Сохранить', - 'settings.search.clear': 'Очистить', - 'settings.search.show': 'Показать', - 'settings.search.hide': 'Скрыть', - 'settings.search.statusSaving': 'Сохранение…', - 'settings.search.statusSaved': 'Сохранено.', - 'settings.search.statusError': 'Ошибка', - 'settings.search.parallelKeyLabel': 'Parallel API ключ', - 'settings.search.braveKeyLabel': 'Brave Поиск API ключ', - 'settings.search.queritKeyLabel': 'Querit API key', - 'settings.search.placeholderStored': '•••••••• (сохранено)', - 'settings.search.placeholderParallel': 'pk_...', - 'settings.search.placeholderBrave': 'BSA...', - 'settings.search.placeholderQuerit': 'Querit API key', - 'settings.embeddings.title': 'Эмбеддинги', - 'settings.embeddings.description': - 'Выберите провайдера эмбеддингов, который преобразует память в векторы для семантического поиска. Изменение провайдера, модели или размерности делает сохранённые векторы недействительными и требует полного сброса памяти.', - 'settings.embeddings.providerAria': 'Провайдер эмбеддингов', - 'settings.embeddings.statusConfigured': 'Настроено', - 'settings.embeddings.statusNeedsKey': 'Нужен API-ключ', - 'settings.embeddings.apiKeyLabel': 'API-ключ {provider}', - 'settings.embeddings.placeholderStored': '•••••••• (сохранено)', - 'settings.embeddings.placeholderKey': 'Вставьте API-ключ…', - 'settings.embeddings.keyStoredEncrypted': - 'Ваш API-ключ хранится в зашифрованном виде на этом устройстве.', - 'settings.embeddings.show': 'Показать', - 'settings.embeddings.hide': 'Скрыть', - 'settings.embeddings.save': 'Сохранить', - 'settings.embeddings.clear': 'Очистить', - 'settings.embeddings.model': 'Модель', - 'settings.embeddings.dimensions': 'Размерность', - 'settings.embeddings.customEndpoint': 'Пользовательский эндпоинт', - 'settings.embeddings.customModelPlaceholder': 'Название модели', - 'settings.embeddings.customDimsPlaceholder': 'Разм.', - 'settings.embeddings.applyCustom': 'Применить', - 'settings.embeddings.testConnection': 'Проверить подключение', - 'settings.embeddings.testing': 'Проверка…', - 'settings.embeddings.testSuccess': 'Подключено — {dims} измерений', - 'settings.embeddings.testFailed': 'Ошибка: {error}', - 'settings.embeddings.saving': 'Сохранение…', - 'settings.embeddings.saved': 'Сохранено.', - 'settings.embeddings.errorPrefix': 'Ошибка', - 'settings.embeddings.wipeTitle': 'Сбросить векторы памяти?', - 'settings.embeddings.wipeBody': - 'Изменение провайдера эмбеддингов, модели или размерности удалит все сохранённые векторы памяти. Память должна быть перестроена, прежде чем поиск снова заработает. Это действие нельзя отменить.', - 'settings.embeddings.cancel': 'Отмена', - 'settings.embeddings.confirmWipe': 'Очистить и применить', - 'settings.embeddings.setupTitle': 'Настройка {provider}', - 'settings.embeddings.saveAndSwitch': 'Сохранить и переключить', - 'settings.embeddings.optional': 'необязательно', - 'settings.embeddings.vectorSearchDisabled': - 'Vector search is disabled. Memory recall will use keyword matching and recency only — no semantic ranking.', - 'settings.embeddings.clearKey': 'Удалить API-ключ', - 'mcp.alphaBadge': 'Альфа', - 'mcp.alphaBannerText': - 'MCP server support is in early alpha. The Smithery registry, install flow, and tool wiring may misbehave or change shape between releases.', - 'mcp.toolList.noTools': 'Инструменты недоступны.', - 'mcp.setup.secretDialog.title': 'MCP Настройка — введите секретный код', - 'mcp.setup.secretDialog.bodyPrefix': 'Агенту установки MCP требуется', - 'mcp.setup.secretDialog.bodySuffix': - '. Your value is sent directly to the core process and never enters the AI conversation.', - 'mcp.setup.secretDialog.inputLabel': 'Значение', - 'mcp.setup.secretDialog.inputPlaceholder': 'Вставить сюда', - 'mcp.setup.secretDialog.show': 'Показать', - 'mcp.setup.secretDialog.hide': 'Скрыть', - 'mcp.setup.secretDialog.submit': 'Отправить', - 'mcp.setup.secretDialog.cancel': 'Отмена', - 'mcp.setup.secretDialog.submitting': 'Отправка…', - 'mcp.setup.secretDialog.errorPrefix': 'Не удалось отправить:', - 'mcp.setup.secretDialog.privacyNote': - 'Stored encrypted in the local MCP secrets table. Never logged or sent to a model.', - 'devices.betaBadge': 'Бета-версия', - 'devices.betaText': - 'This feature is currently in beta. Pair iOS phones with this OpenHuman to use them as a remote client.', - 'autonomy.title': 'Автономия агента.', - 'autonomy.maxActionsLabel': 'Максимальное количество действий в час.', - 'autonomy.maxActionsHelp': - 'Maximum tool actions an agent can run per rolling hour. New value applies to your next chat. Cron jobs and channel listeners keep their current limit until you restart OpenHuman.', - 'autonomy.statusSaving': 'Сохранение…', - 'autonomy.statusSaved': 'Сохранено.', - 'autonomy.statusFailed': 'Ошибка', - 'autonomy.unlimitedNote': 'Unlimited — ограничение скорости отключено.', - 'autonomy.invalidIntegerMsg': - 'Must be a positive integer (use the Unlimited preset for no limit).', - 'autonomy.presetUnlimited': 'Неограниченно (по умолчанию)', - 'triggers.toggleFailed': '{action} не удалось для {trigger}: {message}', - 'skills.composio.noApiKeyTitle': 'Нет Composio API Ключ настроен', - 'skills.composio.noApiKeyDescription': - 'Local mode uses your own Composio API key. Open Settings → Advanced → Composio to add one before connecting integrations here.', - 'skills.composio.noApiKeyCta': 'Открыть в настройках', - 'rewards.localUnavailable': - 'Local login does not earn rewards, coupons, or referral credit. To earn rewards, log out and continue by signing in with an OpenHuman account.', - 'rewards.localUnavailableCta': 'Откройте настройки учетной записи.', - 'channels.localManagedUnavailable': 'Управляемые каналы недоступны для локальных пользователей.', - 'settings.search.localManagedUnavailable': - 'OpenHuman Managed search is not available for local users. Add your own Parallel, Brave, or Querit API key to enable web search.', - 'devices.comingSoonDescription': - 'Device pairing is coming soon. This page will be the home for pairing iPhones and managing connected devices.', - 'common.breadcrumb': 'Навигационная цепочка', - 'settings.betaBuild': 'Бета-сборка — v{version}', - 'migration.vendor.openclaw': 'OpenClaw', - 'migration.vendor.hermes': 'Hermes Agent', - 'onboarding.apiKeys.openaiOauthHint': - 'Используйте ChatGPT Plus/Pro (подписка) или ключ API OpenAI — оба варианта не требуются одновременно.', - 'onboarding.apiKeys.openaiOauthOpening': 'Открывается вход…', - 'onboarding.apiKeys.finishSignIn': 'Завершить вход в ChatGPT', - 'onboarding.apiKeys.orApiKey': 'или ключ API', - 'calls.title': 'Звонки', - 'calls.comingSoonBody': 'Звонки с поддержкой ИИ скоро появятся. Следите за обновлениями.', - 'rewards.referralSection.retry': 'Повторить', - 'devOptions.sentryDisabled': '(без идентификатора — Sentry отключён в этой сборке)', - 'home.usageExhaustedTitle': 'Вы исчерпали лимит использования', - 'home.usageExhaustedBody': - 'Включённый объём использования пока исчерпан. Оформите подписку, чтобы получить больше постоянной мощности.', - 'home.usageExhaustedCta': 'Оформить подписку', - 'home.routinesCard': 'Your Routines', - 'home.routinesActive': '{count} active', - 'routines.title': 'Your Routines', - 'routines.subtitle': 'Things your assistant does automatically', - 'routines.loading': 'Loading routines…', - 'routines.empty': 'No routines yet', - 'routines.emptyHint': - 'Your assistant can run tasks on a schedule — like morning briefings or daily summaries.', - 'routines.refresh': 'Refresh', - 'routines.nextRun': 'Next run', - 'routines.lastRunSuccess': 'Last run succeeded', - 'routines.lastRunFailed': 'Last run failed', - 'routines.notRunYet': 'Not run yet', - 'routines.runNow': 'Run Now', - 'routines.running': 'Running…', - 'routines.viewHistory': 'View history', - 'routines.loadingHistory': 'Loading…', - 'routines.noHistory': 'No run history yet.', - 'routines.statusSuccess': 'Success', - 'routines.statusError': 'Error', - 'routines.showOutput': 'Show output', - 'routines.hideOutput': 'Hide output', - 'routines.toggleEnabled': 'Enable or disable this routine', - 'routines.typeAgent': 'Agent', - 'routines.typeCommand': 'Command', - 'nav.routines': 'Routines', - 'common.name': 'Имя', - 'settings.ai.disconnectProvider': 'Отключить {label}', - 'settings.ai.connectProviderLabel': 'Подключить {label}', - 'settings.ai.defaultLocalEndpoint': 'http://localhost:11434/v1', - 'settings.ai.endpointUrlLabel': 'Конечная точка URL', - 'settings.ai.localRuntimeHelper': - 'Where {label} is reachable. Default is localhost; point this at a remote host (for example, http://10.0.0.4:11434/v1) to use a shared instance.', - 'settings.ai.endpointUrlRequired': 'Требуется конечная точка URL.', - 'settings.ai.endpointProtocolRequired': 'Endpoint must start with http:// or https://.', - 'settings.ai.connectProviderDialog': 'Подключиться {label}', - 'settings.ai.or': 'Или', - 'settings.ai.openRouterOauthDescription': - 'Sign in with OpenRouter and import a user-controlled API key using PKCE.', - 'settings.ai.connecting': 'Подключение...', - 'settings.ai.backgroundLoops': 'Фоновые циклы', - 'settings.ai.backgroundLoopsDesc': - 'See what runs without a chat message, pause heartbeat work, and inspect recent credit ledger rows.', - 'settings.ai.heartbeatControls': 'Управление пульсом.', - 'settings.ai.heartbeatControlsDesc': - 'Defaults off. Enabling starts the loop; disabling aborts the running task.', - 'settings.ai.heartbeatLoop': 'Цикл Heartbeat', - 'settings.ai.heartbeatLoopDesc': - 'Master scheduler for planner + optional subconscious inference.', - 'settings.ai.subconsciousInference': 'Подсознательный вывод.', - 'settings.ai.subconsciousInferenceDesc': - 'Runs model-backed task/reflection evaluation on heartbeat ticks.', - 'settings.ai.calendarMeetingChecks': 'Проверка собраний в календаре.', - 'settings.ai.calendarMeetingChecksDesc': - 'Calls calendar event list for active Google Calendar connections.', - 'settings.ai.calendarCap': 'Окончание календаря', - 'settings.ai.connectionsPerTick': '{count} conn/tick', - 'settings.ai.meetingLookahead': 'Предварительный просмотр собрания', - 'settings.ai.minutesShort': '{count} мин', - 'settings.ai.reminderLookahead': 'Предварительный просмотр напоминания', - 'settings.ai.cronReminderChecks': 'Проверка напоминаний Cron.', - 'settings.ai.cronReminderChecksDesc': 'Scans enabled cron jobs for reminder-like upcoming items.', - 'settings.ai.relevantNotificationChecks': 'Соответствующие проверки уведомлений.', - 'settings.ai.relevantNotificationChecksDesc': - 'Promotes urgent local notifications into proactive alerts.', - 'settings.ai.externalDelivery': 'Внешняя доставка.', - 'settings.ai.externalDeliveryDesc': - 'Lets heartbeat alerts send proactive messages to external channels.', - 'settings.ai.interval': 'Интервал', - 'settings.ai.running': 'Выполняется...', - 'settings.ai.plannerTickNow': 'Планировщик отметьте сейчас', - 'settings.ai.loadingHeartbeatControls': 'Загрузка элементов управления пульсом...', - 'settings.ai.heartbeatControlsUnavailable': 'Элементы управления пульсом недоступны.', - 'settings.ai.loopMap': 'Карта цикла', - 'settings.ai.on': 'на', - 'settings.ai.off': 'выкл.', - 'settings.ai.recentUsageLedger': 'Журнал недавнего использования', - 'settings.ai.recentUsageLedgerDesc': - 'Backend rows expose action/time today; source tags need backend support.', - 'settings.ai.openhumanDefault': 'OpenHuman (по умолчанию)', - 'settings.ai.localModelResolved': 'Ollama · {model}', - 'settings.ai.customRoutingForWorkload': 'Пользовательская маршрутизация для {label}', - 'settings.ai.loadingModels': 'Загрузка моделей...', - 'settings.ai.enterModelIdManually': 'или введите идентификатор модели вручную:', - 'settings.ai.modelIdPlaceholderForProvider': '{slug} идентификатор модели', - 'settings.ai.modelIdPlaceholder': 'model-id', - 'settings.ai.selectModel': 'Выберите модель...', - 'settings.ai.temperatureOverride': 'Переопределение температуры', - 'settings.ai.temperatureOverrideSlider': 'Переопределение температуры (ползунок)', - 'settings.ai.temperatureOverrideValue': 'Переопределение температуры (значение)', - 'settings.ai.temperatureOverrideDesc': - 'Lower = more deterministic. Leave unchecked to use the provider default.', - 'settings.ai.testFailed': 'Тест не пройден.', - 'settings.ai.testingModel': 'Модель тестирования...', - 'settings.ai.modelResponse': 'Ответ модели', - 'settings.ai.providerWithValue': 'Поставщик: {value}', - 'settings.ai.noneDash': '—', - 'settings.ai.promptHelloWorld': 'Подсказка: Привет, мир.', - 'settings.ai.startedAt': 'Начало: {value}', - 'settings.ai.waitingForModelResponse': 'Ожидание ответа от выбранной модели...', - 'settings.ai.response': 'Ответ', - 'settings.ai.testing': 'Тестирование...', - 'settings.ai.test': 'Тест', - 'settings.ai.slugMissingError': 'Введите имя провайдера для создания пула.', - 'settings.ai.slugInUseError': 'Это имя провайдера уже используется.', - 'settings.ai.slugReservedError': 'Выберите другое имя провайдера.', - 'settings.ai.providerNamePlaceholder': 'Мой провайдер', - 'settings.ai.slugLabel': 'Слаг:', - 'settings.ai.openAiUrlLabel': 'OpenAI URL', - 'settings.ai.openAiUrlPlaceholder': 'https://api.openai.com/v1', - 'settings.ai.keepExistingKeyPlaceholder': 'Leave blank to keep existing key', - 'settings.ai.reindexingMemory': 'Переиндексация памяти', - 'settings.ai.reindexingMemoryMessage': - 'Embeddings are being reprocessed. {pending} memory item(s) are being re-embedded under the current model — semantic recall is reduced until this finishes. Keyword search keeps working, and re-embedding continues in the background if you close this.', - 'settings.ai.signInWithOpenRouter': 'Войдите с помощью OpenRouter', - 'settings.ai.weekBudget': 'Недельный бюджет', - 'settings.ai.cycleRemaining': 'Оставшийся цикл', - 'settings.ai.cycleTotalSpend': 'Общие расходы за цикл', - 'settings.ai.avgSpendRow': 'Строка средних расходов', - 'settings.ai.backgroundApiReads': 'Bg API читает', - 'settings.ai.backgroundWakeups': 'Bg пробуждения', - 'settings.ai.budgetMath': 'Математические расчеты бюджета', - 'settings.ai.rowsLeft': 'Осталось строк', - 'settings.ai.rowsPerFullWeekBudget': 'Строков на полную неделю бюджета', - 'settings.ai.sampleBurnRate': 'Скорость записи выборки', - 'settings.ai.projectedEmpty': 'Прогнозируемая пустая', - 'settings.ai.apiReadsPerDollarRemaining': 'API операций чтения на каждый оставшийся доллар', - 'settings.ai.loopCallBudget': 'Бюджет циклических вызовов', - 'settings.ai.heartbeatTicks': 'Тактов контрольного сигнала', - 'settings.ai.calendarPlannerCalls': 'Звонки планировщика календаря', - 'settings.ai.calendarFanoutCap': 'Крышка разветвления календаря', - 'settings.ai.subconsciousModelCalls': 'Звонки модели подсознания', - 'settings.ai.composioSyncScans': 'Composio синхронизируют сканирование', - 'settings.ai.totalBackgroundApiReadBudget': 'Общий бюджет чтения API', - 'settings.ai.memoryWorkerPolls': 'Опросы работников памяти', - 'settings.ai.defaultProviderName': 'OpenHuman', - 'settings.ai.routing.managed': 'Управляемый', - 'settings.ai.routing.managedDesc': - 'OpenHuman will run all inference in the cloud, choose the best model for the task, optimize for cost, and keep the safest routing defaults.', - 'settings.ai.routing.managedMsg': - 'OpenHuman will handle all inference for every workload and automatically choose the best route for cost, quality, and security.', - 'settings.ai.routing.useYourOwn': 'Используйте свои собственные модели', - 'settings.ai.routing.useYourOwnDesc': - 'Choose one provider + model and route every workload through it. This is simple, but it can be inefficient because lightweight and heavyweight inference all share the same route.', - 'settings.ai.routing.advanced': 'Расширенный', - 'settings.ai.routing.advancedDesc': - 'Pick different models for different tasks. This is the best option for tight cost optimization and the most control.', - 'settings.ai.routing.customDesc': - 'Fine-grained routing gives you the best cost optimization and the most control. Use the rows below to decide which workloads stay Managed, which use your shared default, and which pin to a specific model.', - 'settings.ai.routing.chatAndConversations': 'Чат и беседы', - 'settings.ai.routing.chatDesc': - 'Models used during direct user interaction, replies, reasoning, agent loops, and coding help.', - 'settings.ai.routing.backgroundTasks': 'Фоновые задачи', - 'settings.ai.routing.bgTasksDesc': - 'Models used outside the main conversation flow for summarization, heartbeat, learning, and subconscious evaluation.', - 'settings.ai.routing.addCustomProvider': 'Добавить специального поставщика.', - 'settings.ai.globalModel.title': 'Выберите одну модель для всего.', - 'settings.ai.globalModel.desc': - 'This routes all inference through one model. It is simpler, but it can be inefficient for cost and quality because lightweight and heavy tasks will all use the same route.', - 'settings.ai.globalModel.noProviders': - 'Add or connect a provider first. Then you can route every workload through one model here.', - 'settings.ai.globalModel.provider': 'Поставщик', - 'settings.ai.globalModel.model': 'Модель', - 'settings.ai.globalModel.loadingModels': 'Загрузка моделей…', - 'settings.ai.globalModel.enterModelId': 'Введите идентификатор модели', - 'settings.ai.globalModel.appliesToAll': - 'Applies the same provider + model to chat, reasoning, coding, memory, heartbeat, learning, and subconscious. Embeddings are configured separately. Changes save when you click save.', - 'settings.ai.globalModel.saving': 'Сохранение…', - 'settings.ai.globalModel.saved': 'Сохранено', - 'settings.ai.workload.noModel': 'Модель не выбрана', - 'settings.ai.workload.changeModel': 'Изменить модель', - 'settings.ai.workload.chooseModel': 'Выберите модель', - 'settings.ai.provider.ollama': 'Ollama', - 'kbd.ariaLabel': 'Сочетание клавиш: {shortcut}', - 'chat.modelPlaceholder': 'gpt-4o', - 'iosPair.title': 'Сопряжение с рабочим столом', - 'iosPair.instructions': - 'Open OpenHuman on your desktop, go to Settings > Devices, and tap "Pair phone" to show the QR code.', - 'iosPair.scanQrCode': 'Сканирование QR code', - 'iosPair.scannerOpening': 'Открытие сканера...', - 'iosPair.connecting': 'Подключение к рабочему столу...', - 'iosPair.connectedLoading': 'Подключено! Загрузка... Срок действия', - 'iosPair.expired': 'QR code истек. Попросите рабочий стол повторно сгенерировать код.', - 'iosPair.desktopLabel': 'Рабочий стол', - 'iosPair.retryScan': 'Повторить сканирование', - 'iosPair.step.openDesktop': 'Откройте OpenHuman на рабочем столе', - 'iosPair.step.openSettings': 'Перейдите в «Настройки» > «Устройства»', - 'iosPair.step.showQr': 'Нажмите «Подключить телефон», чтобы отобразить QR', - 'iosPair.error.camera': 'Camera scan failed. Check camera permissions and try again.', - 'iosPair.error.invalidQr': - 'Invalid QR code. Make sure you are scanning an OpenHuman pairing code.', - 'iosPair.error.unreachableDesktop': - 'Could not reach the desktop. Make sure both devices are online and try again.', - 'iosPair.error.connectionFailed': - 'Connection failed. Make sure the desktop app is running and try again.', - 'iosMascot.defaultPairedLabel': 'Рабочий стол', - 'iosMascot.connectedTo': 'Подключен к', - 'iosMascot.disconnect': 'Отключиться', - 'iosMascot.pushToTalk': 'Нажми и говори', - 'iosMascot.thinking': 'Думаю...', - 'iosMascot.typeMessage': 'Введите a сообщение...', - 'iosMascot.sendMessage': 'Отправить сообщение', - 'iosMascot.error.generic': 'Что-то пошло не так. Пожалуйста, попробуйте еще раз.', - 'iosMascot.error.sendFailed': 'Не удалось отправить. Проверьте свое соединение.', - 'settings.companion.title': 'Desktop Companion', - 'settings.companion.session': 'Сеанс', - 'settings.companion.activeLabel': 'Активен', - 'settings.companion.inactiveStatus': 'Неактивен', - 'settings.companion.stopping': 'Остановка…', - 'settings.companion.stopSession': 'Остановить сеанс', - 'settings.companion.starting': 'Начало…', - 'settings.companion.startSession': 'Начало сеанса', - 'settings.companion.sessionId': 'Идентификатор сеанса', - 'settings.companion.turns': 'Выключает', - 'settings.companion.remaining': 'Оставшуюся', - 'settings.companion.configuration': 'конфигурацию', - 'settings.companion.hotkey': 'Горячая клавиша', - 'settings.companion.activationMode': 'Режим активации', - 'settings.companion.sessionTtl': 'TTL сеанса', - 'settings.companion.screenCapture': 'Снимок экрана', - 'settings.companion.appContext': 'Контекст приложения', - 'settings.composio.title': 'Composio', - 'settings.composio.apiKeyExamplePlaceholder': 'ck_live_xxxxxxxxxxxxxxxx', - 'composio.integrationSlugsHelp': 'Интеграция через запятую слизни, напр.', - 'composio.integrationSlugsExample': 'gmail, Slack', - 'composio.integrationSlugsCaseInsensitive': 'Регистронезависим.', - 'composio.integrationSlugsPlaceholder': 'gmail, slack, ...', - 'team.members': 'Участники', - 'team.membersDesc': 'Управление участниками и ролями команды', - 'team.invites': 'Приглашения', - 'team.invitesDesc': 'Создание кодов приглашения и управление ими', - 'team.settings': 'Настройки группы', - 'team.settingsDesc': 'Изменить название и настройки команды', - 'team.editSettings': 'Изменить настройки группы', - 'team.enterName': 'Введите название команды', - 'team.saving': 'Сохранение...', - 'team.saveChanges': 'Сохранить изменения', - 'team.delete': 'Удалить команду', - 'team.deleteDesc': 'Удалить эту команду навсегда', - 'team.deleting': 'Удаление...', - 'team.failedToUpdate': 'Не удалось обновить команду.', - 'team.failedToDelete': 'Не удалось удалить команду.', - 'team.manageTitle': 'Управление {name}', - 'team.planCreated': '{plan} План • Создано {date}', - 'team.confirmDelete': 'Вы уверены, что хотите удалить {name}?', - 'team.deleteWarning': 'This action cannot be undone. All team data will be permanently removed.', - 'welcome.clearingAppData': 'Очистка данных приложения...', - 'welcome.clearAppDataAndRestart': 'Очистка данных приложения и перезапуск', - 'welcome.clearAppDataWarning': - 'This wipes locally stored secrets and accounts on this device. Your cloud account is unaffected - you can sign in again right after.', - 'welcome.resetErrorFallback': - 'Could not clear app data. Please quit and reopen OpenHuman, then try again.', - 'welcome.signingIn': 'Выполняете вход...', - 'welcome.termsIntro': 'Продолжая, вы соглашаетесь с', - 'welcome.termsOfUse': 'Условиями', - 'welcome.termsJoiner': 'и', - 'welcome.privacyPolicy': 'Политикой конфиденциальности.', - 'welcome.termsOutro': '.', - 'chat.addReaction': 'Добавить реакцию', - 'chat.agentProfile.create': 'Создать профиль агента', - 'chat.agentProfile.createFailed': 'Не удалось создать профиль агента.', - 'chat.agentProfile.customDescription': 'Пользовательский профиль агента', - 'chat.agentProfile.defaultAgentLabel': 'Оркестратор', - 'chat.agentProfile.exists': 'Профиль агента «{name}» уже существует.', - 'chat.agentProfile.label': 'Профиль агента', - 'chat.agentProfile.namePlaceholder': 'Имя профиля', - 'chat.agentProfile.promptStylePlaceholder': 'Стиль подсказки', - 'chat.agentProfile.allowedToolsPlaceholder': 'Разрешенные инструменты', - 'chat.backToThread': 'вернуться к {title}', - 'chat.parentThread': 'родительский поток', - 'chat.removeReaction': 'Удалить {emoji}', - 'invites.generate': 'Создать приглашение', - 'invites.generating': 'Создание...', - 'invites.refreshing': 'Обновление приглашений...', - 'invites.loading': 'Загрузка приглашений...', - 'invites.copyCodeAria': 'Скопировать код приглашения', - 'invites.revokeAria': 'Отозвать приглашение', - 'invites.usedUp': 'Использовано', - 'invites.uses': 'Используется: {current}{max}', - 'invites.expiresOn': 'Срок действия истекает {date}', - 'invites.empty': 'Пока нет приглашений', - 'invites.emptyHint': 'Создайте код приглашения для обмена с другими', - 'invites.revokeTitle': 'Отозвать код приглашения', - 'invites.revokePromptPrefix': 'Вы уверены, что хотите отозвать код приглашения?', - 'invites.revokeWarning': - 'This invite code will no longer be valid and cannot be used to join the team.', - 'invites.revoking': 'Отзыв...', - 'invites.revokeAction': 'Отозвать приглашение', - 'invites.failedGenerate': 'Не удалось создать приглашение.', - 'invites.failedRevoke': 'Не удалось отозвать приглашение.', - 'team.refreshingMembers': 'Обновление участников...', - 'team.loadingMembers': 'Загрузка участников...', - 'team.memberCount': '{count} участник', - 'team.memberCountPlural': '{count} участников', - 'team.you': '(Вы)', - 'team.removeAria': 'Удалить {name}', - 'team.noMembers': 'Участники не найдены.', - 'team.removeTitle': 'Удалить участника команды', - 'team.removePromptPrefix': 'Вы уверены, что хотите удалить', - 'team.removePromptSuffix': 'из команды?', - 'team.removeWarning': 'Они потеряют доступ к команде и всем ее ресурсам.', - 'team.removing': 'Удаление...', - 'team.removeAction': 'Удалить участника', - 'team.changeRoleTitle': 'Изменить роль участника', - 'team.changeRolePrompt': "Change {name}'s role from {oldRole} to {newRole}?", - 'team.changeRoleAdminGrant': - 'This will grant them full admin permissions including the ability to manage team members.', - 'team.changeRoleAdminRemove': - 'This will remove their admin permissions and they will no longer be able to manage the team.', - 'team.changing': 'Изменение...', - 'team.changeRoleAction': 'Изменить роль', - 'team.failedChangeRole': 'Не удалось изменить роль.', - 'team.failedRemoveMember': 'Не удалось удалить участника.', - 'voice.failedToLoadSettings': 'Не удалось загрузить голосовые настройки.', - 'voice.failedToSaveSettings': 'Не удалось сохранить голосовые настройки.', - 'voice.failedToStartServer': 'Не удалось запустить голосовой сервер.', - 'voice.failedToStopServer': 'Не удалось остановить голосовой сервер.', - 'voice.sttDisabledPrefix': - 'Voice dictation is disabled until the local STT model is downloaded. Use the', - 'voice.sttDisabledSuffix': 'выше, чтобы установить Whisper.', - 'voice.debug.failedToLoadVoiceDebugData': 'Не удалось загрузить данные голосовой отладки.', - 'voice.debug.settingsSaved': 'Настройки отладки сохранены.', - 'voice.debug.failedToSaveSettings': 'Не удалось сохранить голосовые настройки.', - 'voice.debug.runtimeStatus': 'Статус выполнения.', - 'voice.debug.runtimeStatusDesc': - 'Live diagnostics for the voice server and speech-to-text engine.', - 'voice.debug.server': 'Сервер', - 'voice.debug.unavailable': 'Недоступно', - 'voice.debug.ready': 'Готов', - 'voice.debug.notReady': 'Не готов', - 'voice.debug.hotkey': 'Горячая клавиша', - 'voice.debug.notAvailable': 'н/д', - 'voice.debug.mode': 'Режим', - 'voice.debug.transcriptions': 'Транскрипции', - 'voice.debug.serverError': 'Ошибка сервера', - 'voice.debug.advancedSettings': 'Расширенные настройки', - 'voice.debug.advancedSettingsDesc': - 'Low-level tuning parameters for recording and silence detection.', - 'voice.debug.minimumRecordingSeconds': 'Минимальное количество секунд записи', - 'voice.debug.silenceThreshold': 'Порог тишины (RMS)', - 'voice.debug.silenceThresholdDesc': - 'Recordings with energy below this are treated as silence and skipped. Lower = more sensitive.', - 'voice.providers.saved': 'Поставщики голосовой связи сохранены.', - 'voice.providers.failedToSave': 'Не удалось сохранить поставщиков голосовой связи.', - 'voice.providers.ellipsis': '…', - 'voice.providers.installing': 'Установка', - 'voice.providers.installingBusy': 'Установка…', - 'voice.providers.reinstallLocally': 'Переустановить локально', - 'voice.providers.repair': 'Восстановить', - 'voice.providers.retryLocally': 'Повторить локально.', - 'voice.providers.installLocally': 'Установить локально.', - 'voice.providers.whisperReady': 'Whisper готов.', - 'voice.providers.whisperInstallStarted': 'Установка Whisper началась.', - 'voice.providers.queued': 'поставлен в очередь.', - 'voice.providers.failedToInstallWhisper': 'Не удалось установить Whisper.', - 'voice.providers.piperReady': 'Piper готов.', - 'voice.providers.piperInstallStarted': 'Началась установка Piper.', - 'voice.providers.failedToInstallPiper': 'Не удалось установить Piper.', - 'voice.providers.title': 'Поставщики голоса.', - 'voice.providers.desc': - 'Choose where transcription and synthesis run. Use the Install locally buttons to download the binaries and models into your workspace. Local providers can be saved before the install finishes — no manual WHISPER_BIN or PIPER_BIN setup required.', - 'voice.providers.sttProvider': 'Поставщик преобразования речи в текст', - 'voice.providers.sttProviderAria': 'Поставщик STT', - 'voice.providers.cloudWhisperProxy': 'Облако (прокси-сервер Whisper)', - 'voice.providers.localWhisper': 'Local Whisper', - 'voice.providers.installRequired': '(требуется установка)', - 'voice.providers.whisperInstalledTitle': 'Whisper установлен. Нажмите, чтобы переустановить.', - 'voice.providers.whisperDownloadTitle': - 'Download whisper.cpp and the GGML model into your workspace.', - 'voice.providers.installed': 'Установлено', - 'voice.providers.installFailed': 'Не удалось установить', - 'voice.providers.notInstalled': 'Не установлено', - 'voice.providers.whisperModel': 'Модель Whisper', - 'voice.providers.whisperModelAria': 'Модель Whisper', - 'voice.providers.whisperModelTiny': 'Tiny (39 МБ, самый быстрый)', - 'voice.providers.whisperModelBase': 'Базовый (74 МБ)', - 'voice.providers.whisperModelSmall': 'Маленький (244 МБ)', - 'voice.providers.whisperModelMedium': 'Средний (769 МБ, рекомендуется)', - 'voice.providers.whisperModelLargeTurbo': 'Large v3 Turbo (1.5 GB, best accuracy)', - 'voice.providers.ttsProvider': 'Поставщик преобразования текста в речь', - 'voice.providers.ttsProviderAria': 'Поставщик TTS', - 'voice.providers.cloudElevenLabsProxy': 'Облако (прокси-сервер ElevenLabs)', - 'voice.providers.localPiper': 'Локальный Piper', - 'voice.providers.piperInstalledTitle': 'Piper установлен. Нажмите, чтобы переустановить.', - 'voice.providers.piperDownloadTitle': - 'Download Piper and the bundled en_US-lessac-medium voice into your workspace.', - 'voice.providers.piperVoice': 'Голос Пайпера', - 'voice.providers.piperVoiceAria': 'Голос Пайпера', - 'voice.providers.customVoiceOption': 'Другое (введите ниже)…', - 'voice.providers.customVoiceAria': 'Идентификатор голоса Пайпера (пользовательский)', - 'voice.providers.customVoicePlaceholder': 'en_US-lessac-medium', - 'voice.providers.piperVoicesDesc': - 'Voices come from huggingface.co/rhasspy/piper-voices. Switching voices may require an Install/Reinstall click to download the new .onnx.', - 'voice.providers.mascotVoice': 'Голос талисмана', - 'voice.providers.mascotVoiceDescPrefix': - 'The ElevenLabs voice the mascot uses for spoken replies is configured under', - 'voice.providers.mascotSettings': 'Настройки талисмана', - 'voice.providers.mascotVoiceDescSuffix': '.', - 'voice.providers.hotkeyPlaceholder': 'Fn', - 'voice.providers.piperPreset.lessacMedium': 'US · Лессак (нейтральный, рекомендуется)', - 'voice.providers.piperPreset.lessacHigh': 'США · Лессак (более высокое качество, больше)', - 'voice.providers.piperPreset.ryanMedium': 'США · Райан (мужчина)', - 'voice.providers.piperPreset.amyMedium': 'США · Эми (женщина)', - 'voice.providers.piperPreset.librittsHigh': 'США · LibriTTS (мультидинамик)', - 'voice.providers.piperPreset.alanMedium': 'ГБ · Алан (мужчина)', - 'voice.providers.piperPreset.jennyDiocoMedium': 'ГБ · Дженни Диоко (женщина)', - 'voice.providers.piperPreset.northernEnglishMaleMedium': 'ГБ · Северный английский (мужчина)', - 'voice.providers.chip.cloud': 'OpenHuman (Managed)', - 'voice.providers.chip.cloudAria': 'OpenHuman managed provider is always enabled', - 'voice.providers.chip.whisper': 'Whisper (Local)', - 'voice.providers.chip.enableWhisper': 'Enable local Whisper STT', - 'voice.providers.chip.disableWhisper': 'Disable local Whisper STT', - 'voice.providers.chip.piper': 'Piper (Local)', - 'voice.providers.chip.enablePiper': 'Enable local Piper TTS', - 'voice.providers.chip.disablePiper': 'Disable local Piper TTS', - 'voice.providers.chip.enableProvider': 'Enable', - 'voice.providers.chip.disableProvider': 'Disable', - 'voice.providers.chip.apiKeyLabel': 'API Key', - 'voice.providers.chip.apiKeyPlaceholder': 'sk-…', - 'voice.providers.chip.comingSoon': 'coming soon', - 'voice.modal.title': 'Configure', - 'voice.modal.desc': - 'Enter your API key to enable this provider. You can test the connection before saving.', - 'voice.modal.testKey': 'Test Key', - 'voice.modal.testing': 'Testing…', - 'voice.modal.saveAndEnable': 'Save & Enable', - 'voice.modal.enable': 'Enable', - 'voice.modal.whisperDesc': - 'Choose a model size and install the Whisper binary and GGML model into your workspace. Larger models are more accurate but slower.', - 'voice.modal.piperDesc': - 'Choose a voice and install the Piper binary and ONNX model into your workspace. Piper runs fully offline with low latency.', - 'voice.routing.title': 'Voice Routing', - 'voice.routing.desc': 'Choose which enabled providers handle speech-to-text and text-to-speech.', - 'voice.routing.save': 'Save', - 'voice.routing.testStt': 'Test STT', - 'voice.routing.testTts': 'Test TTS', - 'voice.routing.elevenlabsVoice': 'ElevenLabs Voice', - 'voice.routing.elevenlabsVoiceAria': 'ElevenLabs voice selection', - 'voice.routing.elevenlabsVoiceIdAria': 'ElevenLabs voice ID (custom)', - 'voice.routing.elevenlabsVoiceDesc': - 'Pick a curated voice or paste a custom voice ID from your ElevenLabs dashboard.', - 'voice.externalProviders.title': 'External Voice Providers', - 'voice.externalProviders.desc': - 'Connect third-party STT/TTS APIs like Deepgram, ElevenLabs, or OpenAI directly.', - 'voice.externalProviders.keySet': 'Key set', - 'voice.externalProviders.noKey': 'No API key', - 'voice.externalProviders.test': 'Test', - 'voice.externalProviders.testing': 'Testing…', - 'voice.externalProviders.remove': 'Remove', - 'voice.externalProviders.provider': 'Provider', - 'voice.externalProviders.selectProvider': 'Select a provider…', - 'voice.externalProviders.apiKey': 'API Key', - 'voice.externalProviders.apiKeyPlaceholder': 'sk-…', - 'voice.externalProviders.add': 'Add', - 'screenAwareness.debug.debugAndDiagnostics': 'Отладка и диагностика', - 'screenAwareness.debug.collapse': 'Свернуть', - 'screenAwareness.debug.expand': 'Развернуть', - 'screenAwareness.debug.failedToSave': 'Не удалось сохранить интеллект экрана.', - 'screenAwareness.debug.policyTitle': 'Политика интеллекта экрана', - 'screenAwareness.debug.baselineFps': 'Базовый показатель FPS', - 'screenAwareness.debug.useVisionModel': 'Использовать модель концепции.', - 'screenAwareness.debug.useVisionModelDesc': - 'Send screenshots to a vision LLM for richer context. When off, only OCR text is used with a text LLM — faster and no vision model required.', - 'screenAwareness.debug.keepScreenshots': 'Сохранять снимки экрана.', - 'screenAwareness.debug.keepScreenshotsDesc': - 'Save captured screenshots to the workspace instead of deleting after processing', - 'screenAwareness.debug.allowlist': 'Список разрешенных (одно правило в строке)', - 'screenAwareness.debug.denylist': 'Список запрещенных (одно правило в строке)', - 'screenAwareness.debug.saveSettings': 'Сохранить настройки интеллекта экрана', - 'screenAwareness.debug.sessionStats': 'Статистика сеанса', - 'screenAwareness.debug.framesEphemeral': 'Кадры (эфемерные)', - 'screenAwareness.debug.panicStop': 'Паника-стоп', - 'screenAwareness.debug.defaultPanicHotkey': 'Cmd+Shift+.', - 'screenAwareness.debug.vision': 'Видение', - 'screenAwareness.debug.idle': 'бездействующее', - 'screenAwareness.debug.visionQueue': 'Очередь видений', - 'screenAwareness.debug.lastVision': 'Последнее видение', - 'screenAwareness.debug.notAvailable': 'н/д', - 'screenAwareness.debug.visionSummaries': 'Сводки видений', - 'screenAwareness.debug.refreshing': 'Обновление…', - 'screenAwareness.debug.noSummaries': 'Сводок пока нет.', - 'screenAwareness.debug.unknownApp': 'Неизвестное приложение.', - 'screenAwareness.debug.macosOnly': 'Screen Intelligence V1 is currently supported on macOS only.', - 'memory.debugTitle': 'Отладка памяти', - 'memory.documents': 'Документы', - 'memory.filterByNamespace': 'Фильтровать по пространству имен...', - 'memory.refresh': 'Обновить', - 'memory.noDocumentsFound': 'Документы не найдены.', - 'memory.delete': 'Удалить', - 'memory.rawResponse': 'Необработанный ответ', - 'memory.namespaces': 'Пространства имен', - 'memory.noNamespacesFound': 'Пространства имен не найдены.', - 'memory.queryRecall': 'Запрос и вызов', - 'memory.namespace': 'Пространство имен', - 'memory.queryText': 'Текст запроса...', - 'memory.defaultMaxChunks': '10', - 'memory.maxChunks': 'максимальное количество фрагментов', - 'memory.query': 'Запрос', - 'memory.recall': 'Вызов', - 'memory.queryLabel': 'Запрос', - 'memory.recallLabel': 'Вызов', - 'memory.queryResult': 'Результат запроса', - 'memory.recallResult': 'Результат вызова', - 'memory.clearNamespace': 'Очистить пространство имен', - 'memory.clearNamespaceDescription': 'Безвозвратно удалить все документы в пространстве имен.', - 'memory.selectNamespace': 'Выберите пространство имен...', - 'memory.exampleNamespace': 'например. навык:gmail:user@example.com', - 'memory.clear': 'Очистить', - 'memory.deleteConfirm': 'Удалить документ «{documentId}» в пространстве имен «{namespace}»?', - 'memory.clearNamespaceConfirm': - 'This will permanently delete ALL documents in namespace "{namespace}". Continue?', - 'memory.clearNamespaceSuccess': 'Пространство имен «{namespace}» очищено.', - 'memory.clearNamespaceEmpty': 'В «{namespace}» нечего очищать.', - 'webhooks.debugTitle': 'Отладка веб-перехватчиков.', - 'webhooks.failedToLoadDebugData': 'Не удалось загрузить данные отладки веб-перехватчика.', - 'webhooks.clearLogsConfirm': 'Очистить все записанные журналы отладки веб-перехватчиков?', - 'webhooks.failedToClearLogs': 'Не удалось очистить журналы веб-перехватчиков.', - 'webhooks.loading': 'Загрузка...', - 'webhooks.refresh': 'Обновить', - 'webhooks.clearing': 'Очистка...', - 'webhooks.clearLogs': 'Очистить журналы', - 'webhooks.registered': 'зарегистрирован', - 'webhooks.captured': 'захвачен', - 'webhooks.live': 'в прямом эфире', - 'webhooks.disconnected': 'отключен', - 'webhooks.lastEvent': 'Последнее событие', - 'webhooks.at': 'в', - 'webhooks.registeredWebhooks': 'Зарегистрированные вебхуки.', - 'webhooks.noActiveRegistrations': 'Активных регистраций нет.', - 'webhooks.resolvingBackendUrl': 'Разрешение серверной части URL…', - 'webhooks.capturedRequests': 'Захваченные запросы', - 'webhooks.noRequestsCaptured': 'Запросы веб-перехватчика еще не зафиксированы.', - 'webhooks.unrouted': 'не маршрутизировано', - 'webhooks.pending': 'в ожидании', - 'webhooks.requestHeaders': 'Заголовки запроса', - 'webhooks.queryParams': 'Параметры запроса', - 'webhooks.requestBody': 'Тело запроса', - 'webhooks.responseHeaders': 'Заголовки ответа', - 'webhooks.responseBody': 'Тело ответа', - 'webhooks.rawPayload': 'Необработанные полезные данные', - 'webhooks.empty': '[пусто]', - 'providerSetup.error.defaultDetails': 'Не удалось настроить поставщика.', - 'providerSetup.error.providerFallback': 'Поставщик', - 'providerSetup.error.credentialsRejected': - '{provider} rejected the credentials. Check the API key and try again.', - 'providerSetup.error.endpointNotRecognized': - '{provider} did not recognize the endpoint. Check the base URL and try again.', - 'providerSetup.error.providerUnavailable': - '{provider} is unavailable right now. Try again or check the provider status.', - 'providerSetup.error.unreachable': - 'Could not reach {provider}. Check the endpoint URL and network connection, then try again.', - 'providerSetup.error.couldNotReachWithMessage': 'Не удалось связаться с {provider}: {message}', - 'providerSetup.error.technicalDetails': 'Технические подробности', - 'devices.title': 'Устройства', - 'devices.pairIphone': 'Сопряжение с iPhone', - 'devices.noPaired': 'Нет сопряженных устройств', - 'devices.emptyState': 'Scan a QR code on your iPhone to connect it to this OpenHuman session.', - 'devices.devicePairedTitle': 'Устройство сопряжено.', - 'devices.devicePairedMessage': 'iPhone успешно подключен.', - 'devices.deviceRevokedTitle': 'Устройство отозвано.', - 'devices.deviceRevokedMessage': '{label} удалено.', - 'devices.revokeFailedTitle': 'Не удалось отозвать', - 'devices.online': 'В сети', - 'devices.offline': 'Не в сети', - 'devices.lastSeenNever': 'Никогда', - 'devices.lastSeenNow': 'Только сейчас', - 'devices.lastSeenMinutes': '{count}м назад', - 'devices.lastSeenHours': '{count}ч назад', - 'devices.lastSeenDays': '{count}д назад', - 'devices.revoke': 'Отозвать', - 'devices.revokeAria': 'Отозвать {label}', - 'devices.confirmRevokeTitle': 'Отозвать устройство?', - 'devices.confirmRevokeBody': '{label} больше не сможет подключиться. Это невозможно отменить.', - 'devices.loadFailed': 'Не удалось загрузить устройства: {message}', - 'devices.pairModal.title': 'Сопряжение с iPhone', - 'devices.pairModal.loading': 'Генерация кода сопряжения…', - 'devices.pairModal.instructions': 'Open the OpenHuman app on your iPhone and scan this code.', - 'devices.pairModal.expiresIn': 'Срок действия кода истекает через ~{count} минуту.', - 'devices.pairModal.expiresInPlural': 'Срок действия кода истекает через ~{count} минут.', - 'devices.pairModal.showDetails': 'Показать подробности', - 'devices.pairModal.hideDetails': 'Скрыть подробности', - 'devices.pairModal.channelId': 'Идентификатор канала', - 'devices.pairModal.pairingUrl': 'Сопряжение URL', - 'devices.pairModal.expiredTitle': 'Срок действия QR code истек', - 'devices.pairModal.expiredBody': 'Создайте новый код для продолжения сопряжения.', - 'devices.pairModal.generateNewCode': 'Создать новый код.', - 'devices.pairModal.successTitle': 'Соединение с iPhone.', - 'devices.pairModal.autoClose': 'Автоматическое закрытие…', - 'devices.pairModal.errorPrefix': 'Не удалось создать соединение: {message}', - 'devices.pairModal.errorTitle': 'Что-то пошло не так', - 'devices.pairModal.copyUrl': 'Копировать', - 'mcp.catalog.searchAria': 'Поиск в каталоге кузнечного дела', - 'mcp.catalog.searchPlaceholder': 'Поиск в каталоге кузнечного дела...', - 'mcp.catalog.loadFailed': 'Не удалось загрузить каталог.', - 'mcp.catalog.noResults': 'Серверы не найдены.', - 'mcp.catalog.noResultsFor': 'Серверы для «{query}» не найдены.', - 'mcp.catalog.loadMore': 'Загрузить больше', - 'mcp.configAssistant.title': 'Помощник по настройке', - 'mcp.configAssistant.empty': 'Ask about configuration, required env vars, or setup steps.', - 'mcp.configAssistant.suggestedValues': 'Рекомендуемые значения:', - 'mcp.configAssistant.valueHidden': '(значение скрыто)', - 'mcp.configAssistant.applySuggested': 'Примените предложенные значения.', - 'mcp.configAssistant.reinstallHint': 'Re-install with these values to apply them.', - 'mcp.configAssistant.thinking': 'Думаю...', - 'mcp.configAssistant.inputPlaceholder': 'Ask a question (Enter to send, Shift+Enter for newline)', - 'mcp.configAssistant.send': 'Отправить', - 'mcp.configAssistant.failedResponse': 'Не удалось получить ответ', - 'mcp.toolList.availableSingular': 'Доступен инструмент {count}', - 'mcp.toolList.availablePlural': 'Доступен инструмент {count}', - 'mcp.toolList.tryTool': 'Try', - 'mcp.toolList.tryToolAria': 'Open execution playground for {name}', - 'mcp.playground.title': 'Run {name}', - 'mcp.playground.close': 'Close playground', - 'mcp.playground.inputSchema': 'Input schema', - 'mcp.playground.argsLabel': 'Arguments (JSON)', - 'mcp.playground.argsHelp': 'Type JSON matching the input schema. Empty input is treated as {}.', - 'mcp.playground.runShortcut': '⌘/Ctrl + Enter to run', - 'mcp.playground.format': 'Format', - 'mcp.playground.invalidJson': 'Invalid JSON', - 'mcp.playground.run': 'Run tool', - 'mcp.playground.running': 'Running…', - 'mcp.playground.result': 'Result', - 'mcp.playground.resultError': 'Tool returned an error', - 'mcp.playground.copyResult': 'Copy result', - 'mcp.playground.copied': 'Copied', - 'mcp.playground.history': 'History', - 'mcp.playground.historyEmpty': 'No invocations yet in this session.', - 'mcp.playground.historyLoad': 'Load', - 'mcp.playground.unexpectedError': 'Unexpected error invoking tool.', - 'mcp.catalog.deployed': 'Развернуто', - 'mcp.catalog.installCount': '{count} устанавливает', - 'app.update.dismissNotification': 'Отклонить уведомление об обновлении', - 'bootCheck.rpcAuthSuffix': 'каждый раз RPC.', - 'mcp.installed.title': 'Установлен', - 'mcp.installed.browseCatalog': 'Просмотр каталога', - 'mcp.installed.empty': 'Серверы MCP пока не установлены.', - 'mcp.installed.toolSingular': '{count} инструмент', - 'mcp.installed.toolPlural': '{count} инструменты', - 'mcp.health.title': 'Health', - 'mcp.health.summaryAria': 'MCP connection health summary', - 'mcp.health.connectedCount': '{count} connected', - 'mcp.health.connectingCount': '{count} connecting', - 'mcp.health.errorCount': '{count} error', - 'mcp.health.disconnectedCount': '{count} idle', - 'mcp.health.retryAll': 'Retry all ({count})', - 'mcp.health.retryAllAria': 'Retry all {count} errored MCP servers', - 'mcp.health.disconnectAll': 'Disconnect all ({count})', - 'mcp.health.disconnectAllAria': 'Disconnect all {count} connected MCP servers', - 'mcp.health.disconnectConfirm.title': 'Disconnect all MCP servers?', - 'mcp.health.disconnectConfirm.body': - 'This will disconnect {count} currently-connected MCP servers. Installed configurations and secrets are kept; you can reconnect any server later.', - 'mcp.health.disconnectConfirm.cancel': 'Cancel', - 'mcp.health.disconnectConfirm.confirm': 'Disconnect all', - 'mcp.health.opErrorGeneric': 'Bulk operation failed. See logs.', - 'mcp.health.bulkPartialFailure': '{failed} of {total} servers failed. See logs.', - 'mcp.installed.search.landmarkAria': 'Search installed MCP servers', - 'mcp.installed.search.inputAria': 'Filter installed MCP servers by name', - 'mcp.installed.search.placeholder': 'Filter servers…', - 'mcp.installed.search.clearAria': 'Clear filter', - 'mcp.installed.search.countMatches': '{shown} of {total} servers', - 'mcp.installed.search.noMatches': 'No servers match "{query}".', - 'mcp.inventory.openButton': 'Inventory', - 'mcp.inventory.openAria': 'Open the sharable MCP inventory panel', - 'mcp.inventory.title': 'Sharable MCP Inventory', - 'mcp.inventory.subtitle': - 'Export your installed MCP servers as a portable, secret-free manifest, or import one from a teammate. Secret env values are never included or imported.', - 'mcp.inventory.close': 'Close inventory panel', - 'mcp.inventory.tablistAria': 'Inventory sections', - 'mcp.inventory.tab.export': 'Export', - 'mcp.inventory.tab.import': 'Import', - 'mcp.inventory.export.empty': - 'No MCP servers installed yet — nothing to export. Install one from the catalog first.', - 'mcp.inventory.export.privacyTitle': 'What is in this manifest', - 'mcp.inventory.export.privacyBody': - 'Server names, qualified names, env-variable KEY NAMES, and non-secret config only. Secret values, your machine identifiers, and per-install timestamps are intentionally stripped.', - 'mcp.inventory.export.serverCount': '{count} servers in this manifest', - 'mcp.inventory.export.copy': 'Copy', - 'mcp.inventory.export.copied': 'Copied', - 'mcp.inventory.export.copyAria': 'Copy the manifest JSON to the clipboard', - 'mcp.inventory.export.download': 'Download', - 'mcp.inventory.export.downloadAria': 'Download the manifest as a JSON file', - 'mcp.inventory.import.trustTitle': 'Treat imported manifests as untrusted code', - 'mcp.inventory.import.trustBody': - 'An MCP server is a tool you grant your agent. Only import manifests from sources you trust. Each install requires your explicit click; nothing is auto-installed.', - 'mcp.inventory.import.pasteLabel': 'Paste manifest JSON', - 'mcp.inventory.import.pastePlaceholder': 'Paste a manifest here, or upload a .json file below.', - 'mcp.inventory.import.preview': 'Preview', - 'mcp.inventory.import.clear': 'Clear', - 'mcp.inventory.import.uploadFile': 'or upload a .json file', - 'mcp.inventory.import.uploadFileAria': 'Upload a manifest .json file', - 'mcp.inventory.import.fileTooLarge': 'File is too large (over 1 MB). Refusing to load.', - 'mcp.inventory.import.fileReadFailed': 'Could not read file.', - 'mcp.inventory.import.parseErrorPrefix': 'Could not parse manifest:', - 'mcp.inventory.import.previewHeading': 'Preview', - 'mcp.inventory.import.previewCounts': - '{total} servers — {newly} new, {already} already installed', - 'mcp.inventory.import.previewEmpty': 'Manifest contains no servers.', - 'mcp.inventory.import.exportedFrom': 'Exported from {exporter}', - 'mcp.inventory.import.exportedAt': 'at {when}', - 'mcp.inventory.import.statusNew': 'New', - 'mcp.inventory.import.statusAlreadyInstalled': 'Already installed', - 'mcp.inventory.import.envKeysLabel': 'Env keys', - 'mcp.inventory.import.install': 'Install', - 'mcp.inventory.import.installAria': 'Install {name} from this manifest', - 'mcp.inventory.import.skipped': 'skipped', - 'mcp.inventory.parseError.empty': 'Manifest is empty.', - 'mcp.inventory.parseError.invalidJson': 'Invalid JSON.', - 'mcp.inventory.parseError.rootNotObject': 'Manifest must be a JSON object at the root.', - 'mcp.inventory.parseError.unsupportedSchema': - 'Unsupported manifest schema — this file was not produced by a compatible exporter.', - 'mcp.inventory.parseError.missingExportedAt': 'Missing or invalid `exported_at` field.', - 'mcp.inventory.parseError.missingExportedBy': 'Missing or invalid `exported_by` field.', - 'mcp.inventory.parseError.invalidServers': 'Missing or invalid `servers` array.', - 'mcp.inventory.parseError.serverNotObject': 'A server entry is not an object.', - 'mcp.inventory.parseError.serverMissingQualifiedName': - 'A server entry is missing its qualified_name.', - 'mcp.inventory.parseError.serverMissingDisplayName': - 'A server entry is missing its display_name.', - 'mcp.inventory.parseError.serverEnvKeysNotArray': - 'A server entry has an env_keys field that is not an array of strings.', - 'mcp.inventory.parseError.serverContainsEnv': - 'A server entry contains an `env` value map. Refusing to import — manifests must only carry env_keys (names), never secret values.', - 'mcp.inventory.parseError.duplicateQualifiedName': - 'Duplicate qualified_name found in manifest. Each server must appear at most once.', - 'mcp.tab.loading': 'Загрузка серверов MCP...', - 'mcp.tab.emptyDetail': 'Выберите сервер или просмотрите каталог.', - 'mcp.install.loadingDetail': 'Загрузка сведений о сервере...', - 'mcp.install.back': 'Вернитесь назад', - 'mcp.install.title': 'Установите {name}', - 'mcp.install.requiredEnv': 'Необходимые переменные среды', - 'mcp.install.enterValue': 'Введите {key}', - 'mcp.install.show': 'Показать', - 'mcp.install.hide': 'Скрыть', - 'mcp.install.configLabel': 'Конфигурация (необязательный JSON)', - 'mcp.install.configPlaceholder': '{"key": "value"}', - 'mcp.install.missingRequired': 'Требуется «{key}»', - 'mcp.install.invalidJson': 'Конфигурация JSON недействительна. JSON', - 'mcp.install.failedDetail': 'Не удалось загрузить сведения о сервере.', - 'mcp.install.failedInstall': 'Не удалось установить', - 'mcp.install.button': 'Установить', - 'mcp.install.installing': 'Установка...', - 'mcp.detail.suggestedEnvReady': 'Рекомендуемые значения среды готовы', - 'mcp.detail.suggestedEnvBody': - 'Re-install this server with the suggested values to apply them: {keys}', - 'mcp.detail.connect': 'Подключитесь', - 'mcp.detail.connecting': 'Подключение...', - 'mcp.detail.disconnect': 'Отключите', - 'mcp.detail.hideAssistant': 'Скрыть помощника', - 'mcp.detail.helpConfigure': 'Помогите мне настроить', - 'mcp.detail.confirmUninstall': 'Подтвердить удаление?', - 'mcp.detail.confirmUninstallAction': 'Да, удалить', - 'mcp.detail.uninstall': 'Удалить', - 'mcp.detail.envVars': 'Переменные среды', - 'mcp.detail.tools': 'Инструменты', - 'onboarding.skipForNow': 'Пропустить сейчас', - 'onboarding.localAI.continueWithCloud': 'Продолжить с Облако', - 'onboarding.localAI.useLocalAnyway': 'Use local AI anyway (not recommended for your device)', - 'onboarding.localAI.useLocalInstead': 'Use local AI instead (connect Ollama now)', - 'onboarding.localAI.setupIssue': 'При настройке локального AI возникла проблема', - 'notifications.routingTitle': 'Маршрутизация уведомлений', - 'notifications.routing.pipelineStats': 'Статистика конвейера', - 'notifications.routing.total': 'Всего', - 'notifications.routing.unread': 'Непрочитано', - 'notifications.routing.unscored': 'Без оценок', - 'notifications.routing.intelligenceTitle': 'Аналитика уведомлений', - 'notifications.routing.intelligenceDesc': - 'Every notification from your connected accounts is scored by a local AI model. High-importance notifications are automatically routed to your orchestrator agent so nothing critical slips through.', - 'notifications.routing.howItWorks': 'Как это работает', - 'notifications.routing.level.drop': 'Удаление', - 'notifications.routing.level.dropDesc': 'Шум/спам — сохраняется, но не отображается', - 'notifications.routing.level.acknowledge': 'Подтверждение', - 'notifications.routing.level.acknowledgeDesc': 'Low-priority — shown in notification center', - 'notifications.routing.level.react': 'Реагировать', - 'notifications.routing.level.reactDesc': 'Medium-priority — triggers a focused agent response', - 'notifications.routing.level.escalate': 'Эскалация', - 'notifications.routing.level.escalateDesc': 'High-priority — forwarded to orchestrator agent', - 'notifications.routing.perProvider': 'Маршрутизация для каждого поставщика', - 'notifications.routing.threshold': 'Порог', - 'notifications.routing.routeToOrchestrator': 'Маршрут к оркестратору', - 'notifications.routing.loadSettingsError': 'Failed to load settings. Reopen this panel to retry.', - 'settings.billing.inferenceBudget.title': 'Inference Budget', - 'settings.billing.inferenceBudget.noRecurringPlanBudget': 'Нет повторяющегося бюджета плана.', - 'settings.billing.inferenceBudget.noRecurringWeeklyDesc': - 'Your current plan does not include a recurring weekly inference budget. Usage is paid from available credits instead.', - 'settings.billing.inferenceBudget.remainingSummary': 'Осталось {remaining} / {budget}', - 'settings.billing.inferenceBudget.spentThisCycle': 'В этом цикле потрачено {amount}', - 'settings.billing.inferenceBudget.cycleEndsOn': 'Цикл заканчивается {date}', - 'settings.billing.inferenceBudget.exhaustedDesc': - 'Included subscription usage is exhausted. Top up credits to keep using AI without waiting for the next cycle.', - 'settings.billing.inferenceBudget.discountVsPayg': '{pct}% cheaper per call than pay-as-you-go.', - 'settings.billing.inferenceBudget.cycleSpend': 'Циклические расходы', - 'settings.billing.inferenceBudget.totalAmount': '{amount} всего', - 'settings.billing.inferenceBudget.inference': 'Вывод', - 'settings.billing.inferenceBudget.integrations': 'Интеграции', - 'settings.billing.inferenceBudget.calls': '{count} вызовы', - 'settings.billing.inferenceBudget.dailySpend': 'Ежедневные расходы', - 'settings.billing.inferenceBudget.dailySpendPoint': '{date}: {amount}', - 'settings.billing.inferenceBudget.topModels': 'Лучшие модели', - 'settings.billing.inferenceBudget.noInferenceUsage': 'В этом цикле не используются выводы.', - 'settings.billing.inferenceBudget.topIntegrations': 'Топ интеграций', - 'settings.billing.inferenceBudget.noIntegrationUsage': 'В этом цикле интеграция не используется.', - 'settings.billing.inferenceBudget.unableToLoad': 'Невозможно загрузить данные об использовании.', - 'settings.billing.inferenceBudget.notAvailable': 'н/д', - 'memory.sourceFilterAria': 'Фильтровать по источнику', - 'calls.comingSoonDescription': 'AI-assisted calls are coming soon. Stay tuned.', - 'vault.title': 'Хранилища знаний.', - 'vault.description': 'Point at a local folder; files are chunked and mirrored into memory.', - 'vault.add': 'Добавить хранилище.', - 'vault.added': 'Хранилище добавлено.', - 'vault.createdMessage': 'Создано «{name}». Нажмите {sync}, чтобы принять.', - 'vault.couldNotAdd': 'Не удалось добавить хранилище.', - 'vault.syncFailed': 'Не удалось синхронизировать', - 'vault.syncFailedFor': 'Не удалось синхронизировать «{name}»', - 'vault.syncFailedFiles': 'Не удалось {count} файлов', - 'vault.syncedTitle': 'Синхронизировано "{name}"', - 'vault.syncSummary': 'Загружен {ingested}, без изменений {unchanged}, удален {removed}', - 'vault.syncSummaryFailed': ', не удалось {count}', - 'vault.syncSummarySkipped': ', пропущен {count}', - 'vault.syncSummaryDuration': '· {seconds}s', - 'vault.confirmRemovePurge': - 'Remove vault "{name}"?\n\nClick OK to also purge its memory (delete all {count} ingested document(s)).\nClick Cancel to keep the documents in memory.', - 'vault.confirmRemove': 'Действительно удалить хранилище «{name}»?', - 'vault.removed': 'Хранилище удалено.', - 'vault.removedPurgedMessage': 'Удален «{name}» и очищена его память.', - 'vault.removedKeptMessage': 'Удален «{name}». Документы хранятся в памяти.', - 'vault.couldNotRemove': 'Не удалось удалить хранилище.', - 'vault.name': 'Имя', - 'vault.namePlaceholder': 'Мои исследовательские заметки', - 'vault.folderPath': 'Путь к папке (абсолютный)', - 'vault.folderPathPlaceholder': '/Пользователи/вы/Документы/заметки', - 'vault.excludes': 'Исключает (подстроки, разделенные запятыми, необязательно)', - 'vault.excludesPlaceholder': 'черновики/, .secret', - 'vault.creating': 'Создание…', - 'vault.create': 'Создать хранилище', - 'vault.loading': 'Загрузка хранилища…', - 'vault.failedToLoad': 'Не удалось загрузить хранилища: {error}', - 'vault.empty': 'No vaults yet. Add one above to start ingesting a folder.', - 'vault.fileCount': '{count} файлов', - 'vault.syncedRelative': 'синхронизировано {time}', - 'vault.neverSynced': 'никогда не синхронизировано', - 'vault.syncingProgress': 'Синхронизация… {ingested}/{total}', - 'vault.removing': 'Удаление…', - 'vault.relative.sec': '{count}s назад', - 'vault.relative.min': '{count}m назад', - 'vault.relative.hr': '{count}h назад', - 'vault.relative.day': '{count}d назад', - 'whatsapp.title': 'WhatsApp', - 'subconscious.interval.fiveMinutes': '5 минут', - 'subconscious.interval.tenMinutes': '10 минут', - 'subconscious.interval.fifteenMinutes': '15 минут', - 'subconscious.interval.thirtyMinutes': '30 минут', - 'subconscious.interval.oneHour': '1 час', - 'subconscious.interval.sixHours': '6 часов', - 'subconscious.interval.twelveHours': '12 часов', - 'subconscious.interval.oneDay': '1 день', - 'subconscious.priority.critical': 'критический', - 'subconscious.priority.important': 'важный', - 'subconscious.priority.normal': 'нормальный', - 'subconscious.durationSeconds': '{seconds}s', - 'subconscious.durationMilliseconds': '{milliseconds}ms', - 'settings.search.allowedSitesLabel': 'Allowed websites', - 'settings.search.allowedSitesHint': - 'Websites the assistant may open and read while researching (one host per line, e.g. reuters.com). A host also covers its subdomains. Leave empty to block all web access.', - 'settings.search.allowedSitesAllOn': - 'The assistant can open any public website. Local and private addresses stay blocked.', - 'settings.search.allowedSitesPlaceholder': 'reuters.com\napnews.com\ngithub.com', - 'settings.search.allowedSitesSave': 'Save websites', - 'settings.search.accessModeAria': 'Web access mode', - 'settings.search.accessAllowAll': 'Allow all', - 'settings.search.accessCustom': 'Custom', - 'settings.search.accessBlockAll': 'Block all', - 'settings.search.accessBlockAllHint': - 'All web access is blocked — the assistant cannot open or read any website.', - 'memory.tab.centrality': 'Centrality', - 'graphCentrality.title': 'Knowledge Graph Centrality', - 'graphCentrality.intro': - 'PageRank over your memory graph surfaces the load-bearing hubs — and the connector entities that link otherwise-separate clusters, which a raw frequency count cannot reveal.', - 'graphCentrality.loading': 'Computing centrality…', - 'graphCentrality.errorPrefix': 'Could not load the graph:', - 'graphCentrality.retry': 'Retry', - 'graphCentrality.empty': 'No knowledge graph yet.', - 'graphCentrality.emptyHint': - 'As the assistant records facts about you, the most connected entities will surface here.', - 'graphCentrality.namespaceLabel': 'Namespace', - 'graphCentrality.namespaceAll': 'All namespaces', - 'graphCentrality.metricEntities': 'Entities', - 'graphCentrality.metricConnections': 'Connections', - 'graphCentrality.metricClusters': 'Clusters', - 'graphCentrality.clustersCaption': '{components} clusters · largest holds {largest}', - 'graphCentrality.approximateBadge': 'approximate', - 'graphCentrality.approximateTitle': 'Stopped at the iteration cap before fully converging', - 'graphCentrality.rankedHeading': 'Top entities by influence', - 'graphCentrality.colRank': '#', - 'graphCentrality.colEntity': 'Entity', - 'graphCentrality.colInfluence': 'Influence', - 'graphCentrality.colLinks': 'Links', - 'graphCentrality.bridgeBadge': 'connector', - 'graphCentrality.bridgeTitle': 'Connector — more influential than its link count suggests', - 'graphCentrality.degreeTitle': '{in} in · {out} out', - 'settings.search.engineDisabledLabel': 'Disabled', - 'settings.search.engineDisabledDesc': - 'Remove search tools from the agent context and available tool list.', -}; - -export default ru1; diff --git a/app/src/lib/i18n/chunks/ru-2.ts b/app/src/lib/i18n/chunks/ru-2.ts deleted file mode 100644 index a24d1275e..000000000 --- a/app/src/lib/i18n/chunks/ru-2.ts +++ /dev/null @@ -1,504 +0,0 @@ -import type { TranslationMap } from '../types'; - -// Russian (Русский) chunk 2/5. Translated from chunks/en-2.ts. -const ru2: TranslationMap = { - 'settings.ai.configStatus': 'Статус конфигурации', - 'settings.ai.fallbackMode': 'Резервный режим', - 'settings.ai.loadedFromRuntime': 'Загружено из среды выполнения', - 'settings.ai.loadingDuration': 'Время загрузки', - 'settings.ai.localRuntime': 'Локальная среда выполнения модели', - 'settings.ai.openManager': 'Открыть менеджер', - 'settings.ai.retryDownload': 'Повторить загрузку', - 'settings.ai.state': 'Состояние', - 'settings.ai.targetModel': 'Целевая модель', - 'settings.ai.download': 'Скачать', - 'settings.ai.localModelUnavailable': 'Статус локальной модели недоступен.', - 'settings.ai.soulConfig': 'Конфигурация персоны SOUL', - 'settings.ai.refreshing': 'Обновление...', - 'settings.ai.refreshSoul': 'Обновить SOUL', - 'settings.ai.loadingSoul': 'Загрузка конфигурации SOUL...', - 'settings.ai.identity': 'Идентичность', - 'settings.ai.personality': 'Личность', - 'settings.ai.safetyRules': 'Правила безопасности', - 'settings.ai.source': 'Источник', - 'settings.ai.loaded': 'Загружено', - 'settings.ai.toolsConfig': 'Конфигурация TOOLS', - 'settings.ai.refreshTools': 'Обновить TOOLS', - 'settings.ai.toolsAvailable': 'Доступно инструментов', - 'settings.ai.tools': 'инструменты', - 'settings.ai.activeSkills': 'Активные навыки', - 'settings.ai.skills': 'навыки', - 'settings.ai.skillsOverview': 'Обзор навыков', - 'settings.ai.refreshingAll': 'Обновление всего...', - 'settings.ai.refreshAll': 'Обновить всю конфигурацию AI', - 'settings.notifications.suppressAll': 'Отключить все уведомления', - 'settings.notifications.suppressAllDesc': - 'Блокировать все всплывающие уведомления ОС из встроенных приложений независимо от фокуса.', - 'settings.notifications.toggleDnd': 'Включить/выключить «Не беспокоить»', - 'settings.notifications.categories': 'Категории', - 'settings.notifications.categoryFooter': - 'Отключение категории останавливает появление новых уведомлений этого типа в центре уведомлений. Существующие уведомления остаются до их очистки.', - 'settings.billing.movedToWeb': 'Оплата перенесена на сайт', - 'settings.billing.openDashboard': 'Открыть панель оплаты', - 'settings.billing.movedToWebDesc': - 'Изменение подписки, способы оплаты, кредиты и счета теперь управляются в TinyHumans на сайте.', - 'settings.billing.backToSettings': 'Назад к настройкам', - 'settings.billing.openingBrowser': 'Открытие браузера...', - 'settings.billing.browserNotOpen': 'Если браузер не открылся, используй кнопку выше.', - 'settings.billing.browserOpenFailed': 'Браузер не открылся автоматически. Используй кнопку выше.', - 'settings.tools.chooseCapabilities': - 'Выбери, какие возможности OpenHuman может использовать от твоего имени.', - 'settings.tools.saveChanges': 'Сохранить изменения', - 'settings.tools.preferencesSaved': 'Настройки сохранены', - 'settings.tools.saveFailed': 'Не удалось сохранить настройки. Попробуй ещё раз.', - 'settings.screenAwareness.mode': 'Режим', - 'settings.screenAwareness.allExceptBlacklist': 'Всё, кроме исключений', - 'settings.screenAwareness.whitelistOnly': 'Только разрешённые', - 'settings.screenAwareness.screenMonitoring': 'Мониторинг экрана', - 'settings.screenAwareness.saveSettings': 'Сохранить настройки', - 'settings.screenAwareness.session': 'Сессия', - 'settings.screenAwareness.status': 'Статус', - 'settings.screenAwareness.active': 'Активно', - 'settings.screenAwareness.stopped': 'Остановлено', - 'settings.screenAwareness.remaining': 'Осталось', - 'settings.screenAwareness.startSession': 'Начать сессию', - 'settings.screenAwareness.stopSession': 'Завершить сессию', - 'settings.screenAwareness.analyzeNow': 'Анализировать сейчас', - 'settings.screenAwareness.macosOnly': - 'Захват экрана и управление разрешениями поддерживаются только на macOS.', - 'connections.comingSoon': 'Скоро', - 'connections.setUp': 'Настроить', - 'connections.configured': 'Настроено', - 'connections.unavailable': 'Недоступно', - 'connections.checking': 'Проверка…', - 'connections.walletConfigured': - 'Локальные идентификаторы EVM, BTC, Solana и Tron настроены на основе твоей фразы восстановления.', - 'connections.walletReady': - 'Настрой локальные идентификаторы EVM, BTC, Solana и Tron из одной фразы восстановления.', - 'connections.walletError': - 'Не удалось проверить статус кошелька. Нажми, чтобы повторить в панели фразы восстановления.', - 'connections.walletChecking': 'Проверка статуса кошелька...', - 'connections.walletIdentities': 'Идентификаторы кошелька', - 'connections.walletDerived': - 'Вычислено локально из фразы восстановления и хранится только как безопасные метаданные.', - 'connections.privacySecurity': 'Конфиденциальность и безопасность', - 'connections.privacySecurityDesc': - 'Все данные и учётные данные хранятся локально по политике нулевого хранения. Информация зашифрована и никогда не передаётся третьим лицам.', - 'channels.status.connecting': 'Подключение', - 'channels.status.notConfigured': 'Не настроено', - 'channels.noActiveRoute': 'Нет активного маршрута', - 'channels.activeRoute': 'Активный маршрут', - 'channels.loadingDefinitions': 'Загрузка определений каналов...', - 'channels.channelConnections': 'Подключения каналов', - 'channels.configureAuthModes': 'Настрой режимы авторизации для каждого канала связи.', - 'channels.configNotAvailable': 'Конфигурация для', - 'channels.channel': 'канал', - 'devOptions.coreModeNotSet': 'Режим ядра: не задан', - 'devOptions.coreModeNotSetDesc': - 'Выбор в загрузочном экране ещё не подтверждён. Используй «Сменить режим» для выбора между «Локальный» и «Облако».', - 'devOptions.local': 'Локальный', - 'devOptions.embeddedCoreSidecar': 'Встроенный процесс ядра', - 'devOptions.sidecarSpawned': 'Запущен внутри процесса Tauri при старте приложения.', - 'devOptions.cloud': 'Облако', - 'devOptions.remoteCoreRpc': 'Удалённый RPC ядра', - 'devOptions.token': 'Токен', - 'devOptions.tokenNotSet': 'не задан — RPC вернёт 401', - 'devOptions.triggerSentryTest': 'Тест Sentry (staging)', - 'devOptions.triggerSentryTestDesc': - 'Отправляет тегированную ошибку для проверки пайплайна Sentry. Issue #1072 — удалить после проверки.', - 'devOptions.sendTestEvent': 'Отправить тестовое событие', - 'devOptions.sending': 'Отправка…', - 'devOptions.eventSent': 'Событие отправлено', - 'devOptions.failed': 'Ошибка', - 'devOptions.appLogs': 'Логи приложения', - 'devOptions.appLogsDesc': - 'Открыть папку с ежедневными лог-файлами. Прикрепляй последний файл при сообщении об ошибке.', - 'devOptions.openLogsFolder': 'Открыть папку с логами', - 'mnemonic.phraseSaved': 'Фраза восстановления сохранена', - 'mnemonic.walletReady': 'Мультичейн-идентификаторы готовы. Возврат к настройкам...', - 'mnemonic.writeDownWords': 'Запиши эти', - 'mnemonic.wordsInOrder': - 'слова по порядку и храни в надёжном месте. Эта фраза защищает твой локальный ключ шифрования и идентификаторы кошельков EVM, BTC, Solana и Tron.', - 'mnemonic.cannotRecover': - 'Эту фразу невозможно восстановить при потере — она должна оставаться только на твоём устройстве.', - 'mnemonic.copyToClipboard': 'Скопировать в буфер обмена', - 'mnemonic.alreadyHavePhrase': 'У меня уже есть фраза восстановления', - 'mnemonic.consentSaved': - 'Я сохранил эту фразу и соглашаюсь использовать её для настройки локального кошелька', - 'mnemonic.enterPhraseToRestore': - 'Введи фразу восстановления ниже для восстановления идентификаторов кошелька, или вставь полную фразу в любое поле (12 слов для новых бэкапов; фразы из 24 слов от старых версий тоже работают).', - 'mnemonic.words': 'Слова', - 'mnemonic.validPhrase': 'Верная фраза восстановления', - 'mnemonic.generateNewPhrase': 'Сгенерировать новую фразу восстановления', - 'mnemonic.securingData': 'Защита данных...', - 'mnemonic.saveRecoveryPhrase': 'Сохранить фразу восстановления', - 'mnemonic.userNotLoaded': 'Пользователь не загружен. Войди снова или обнови страницу.', - 'mnemonic.invalidPhrase': 'Неверная фраза восстановления. Проверь слова и попробуй снова.', - 'mnemonic.somethingWentWrong': 'Что-то пошло не так. Попробуй ещё раз.', - 'team.failedToCreate': 'Не удалось создать команду', - 'team.invalidInviteCode': 'Неверный или устаревший код приглашения', - 'team.failedToSwitch': 'Не удалось переключить команду', - 'team.failedToLeave': 'Не удалось покинуть команду', - 'team.role.owner': 'Владелец', - 'team.role.admin': 'Администратор', - 'team.role.billingManager': 'Менеджер по оплате', - 'team.role.member': 'Участник', - 'team.active': 'Активная', - 'team.personalTeam': 'Личная команда', - 'team.manageTeam': 'Управление командой', - 'team.switching': 'Переключение...', - 'team.switch': 'Переключить', - 'team.leaving': 'Выход...', - 'team.leave': 'Покинуть', - 'team.yourTeams': 'Твои команды', - 'team.createNewTeam': 'Создать новую команду', - 'team.teamName': 'Название команды', - 'team.creating': 'Создание...', - 'team.joinExistingTeam': 'Вступить в существующую команду', - 'team.inviteCode': 'Код приглашения', - 'team.joining': 'Вход...', - 'team.join': 'Вступить', - 'team.leaveTeam': 'Покинуть команду', - 'team.confirmLeave': 'Ты уверен, что хочешь покинуть', - 'team.leaveWarning': - 'Ты потеряешь доступ к команде и всем её ресурсам. Для повторного входа потребуется новое приглашение.', - 'team.management': 'Управление командой', - 'team.notFound': 'Команда не найдена', - 'team.accessDenied': 'Доступ запрещён', - 'team.members': 'Участники', - 'voice.title': 'Голосовой ввод', - 'voice.settings': 'Настройки голоса', - 'voice.settingsDesc': 'Удерживай горячую клавишу для диктовки и вставки текста в активное поле.', - 'voice.hotkey': 'Горячая клавиша', - 'voice.activationMode': 'Режим активации', - 'voice.tapToToggle': 'Нажать для переключения', - 'voice.writingStyle': 'Стиль письма', - 'voice.verbatimTranscription': 'Дословная транскрипция', - 'voice.naturalCleanup': 'Естественная обработка', - 'voice.autoStart': 'Запускать голосовой сервер автоматически вместе с ядром', - 'voice.customDictionary': 'Пользовательский словарь', - 'voice.customDictionaryDesc': - 'Добавляй имена, технические термины и специальные слова для улучшения точности распознавания.', - 'voice.addWord': 'Добавить слово...', - 'voice.sttDisabled': - 'Голосовой ввод отключён, пока локальная STT-модель не загружена и не готова.', - 'voice.openLocalAiModel': 'Открыть локальную AI-модель', - 'voice.serverRestarted': 'Голосовой сервер перезапущен с новыми настройками.', - 'voice.settingsSaved': 'Настройки голоса сохранены.', - 'voice.serverStarted': 'Голосовой сервер запущен.', - 'voice.serverStopped': 'Голосовой сервер остановлен.', - 'voice.saveVoiceSettings': 'Сохранить настройки голоса', - 'voice.startVoiceServer': 'Запустить голосовой сервер', - 'voice.stopVoiceServer': 'Остановить голосовой сервер', - 'voice.debugTitle': 'Отладка голоса', - 'autocomplete.title': 'Автодополнение', - 'autocomplete.settings': 'Настройки', - 'autocomplete.acceptWithTab': 'Принять с помощью Tab', - 'autocomplete.stylePreset': 'Стиль', - 'autocomplete.style.balanced': 'Сбалансированный', - 'autocomplete.style.concise': 'Краткий', - 'autocomplete.style.formal': 'Официальный', - 'autocomplete.style.casual': 'Неформальный', - 'autocomplete.style.custom': 'Пользовательский', - 'autocomplete.disabledApps': 'Отключённые приложения (по одному bundle/токену на строку)', - 'autocomplete.saveSettings': 'Сохранить настройки', - 'autocomplete.saving': 'Сохранение…', - 'autocomplete.runtime': 'Среда выполнения', - 'autocomplete.running': 'Работает', - 'autocomplete.start': 'Запустить', - 'autocomplete.stop': 'Остановить', - 'autocomplete.settingsSaved': 'Настройки автодополнения сохранены.', - 'autocomplete.started': 'Автодополнение запущено.', - 'autocomplete.didNotStart': 'Автодополнение не запустилось. Проверь, включено ли оно.', - 'autocomplete.stopped': 'Автодополнение остановлено.', - 'autocomplete.advancedSettings': 'Дополнительные настройки', - 'autocomplete.debugTitle': 'Отладка автодополнения', - 'chat.agentChat': 'Чат с агентом', - 'chat.overrides': 'Переопределения', - 'chat.model': 'Модель', - 'chat.temperature': 'Температура', - 'chat.conversation': 'Разговор', - 'chat.startAgentConversation': 'Начни разговор с агентом.', - 'chat.you': 'Ты', - 'chat.agent': 'Агент', - 'chat.askAgent': 'Спроси агента о чём угодно...', - 'chat.sendMessage': 'Отправить сообщение', - 'composio.triageTitle': 'Триггеры интеграций', - 'composio.triageDesc': - 'Когда активно, каждый входящий триггер Composio проходит через шаг AI-сортировки, который классифицирует событие и может запустить автоматические действия — один локальный LLM-запрос на триггер. Отключи глобально или для конкретных интеграций, если предпочитаешь ручной просмотр. Если переменная окружения', - 'composio.disableAllTriage': 'Отключить AI-сортировку для всех триггеров', - 'composio.triggersStillRecorded': - 'Триггеры по-прежнему записываются в историю — LLM-запросы не выполняются.', - 'composio.disableSpecificIntegrations': 'Отключить AI-сортировку для конкретных интеграций', - 'composio.settingsSaved': 'Настройки сохранены', - 'composio.saveFailed': 'Не удалось сохранить. Попробуй ещё раз.', - 'cron.title': 'Задания по расписанию', - 'cron.scheduledJobs': 'Запланированные задания', - 'cron.manageCronJobs': 'Управление заданиями из основного планировщика.', - 'cron.refreshCronJobs': 'Обновить задания', - 'localModel.modelStatus': 'Статус модели', - 'localModel.downloadModels': 'Скачать модели', - 'localModel.usage': 'Использование', - 'localModel.usageDesc': - 'Выбери, какие подсистемы используют локальную модель. Остальное использует облако.', - 'localModel.enableRuntime': 'Включить локальную AI-среду', - 'localModel.enableRuntimeDesc': - 'Главный переключатель. По умолчанию выключен — Ollama простаивает. При включении суммаризатор деревьев, интеллект экрана и автодополнение всегда используют локальную модель.', - 'localModel.advancedSettings': 'Дополнительные настройки', - 'localModel.debugTitle': 'Отладка локальной модели', - 'localModel.ollamaServer.helperText': 'Пример: http://192.168.1.5:11434', - 'localModel.ollamaServer.label': 'URL сервера Ollama', - 'localModel.ollamaServer.modelCount': 'моделей', - 'localModel.ollamaServer.placeholder': 'http://localhost:11434', - 'localModel.ollamaServer.reachable': 'Доступен', - 'localModel.ollamaServer.resetButton': 'Сбросить до значения по умолчанию', - 'localModel.ollamaServer.saveButton': 'Сохранить', - 'localModel.ollamaServer.testButton': 'Проверить соединение', - 'localModel.ollamaServer.unreachable': 'Недоступен', - 'localModel.ollamaServer.validationError': - 'Должен быть допустимым URL с протоколом http:// или https://', - 'screenAwareness.debugTitle': 'Отладка слежения за экраном', - 'memory.debugTitle': 'Отладка памяти', - 'webhooks.debugTitle': 'Отладка вебхуков', - 'notifications.routingTitle': 'Маршрутизация уведомлений', - 'common.reload': 'Перезагрузить', - 'common.skip': 'Пропустить', - 'common.disable': 'Отключить', - 'common.enable': 'Включить', - 'chat.safetyTimeout': - 'Агент не ответил в течение 2 минут. Попробуй снова или проверь соединение.', - 'chat.filter.all': 'Все', - 'chat.filter.work': 'Работа', - 'chat.filter.briefing': 'Брифинг', - 'chat.filter.notification': 'Уведомление', - 'chat.filter.workers': 'Воркеры', - 'chat.selectThread': 'Выбери чат', - 'chat.threads': 'Чаты', - 'chat.noThreads': 'Чатов пока нет', - 'chat.noLabelThreads': 'Нет чатов «{label}»', - 'chat.noWorkerThreads': 'Чатов воркеров пока нет', - 'chat.deleteThread': 'Удалить чат', - 'chat.deleteThreadConfirm': 'Удалить «{title}»?', - 'chat.untitledThread': 'Чат без названия', - 'chat.editThreadTitle': 'Edit thread title', - 'chat.hideSidebar': 'Скрыть боковую панель', - 'chat.showSidebar': 'Показать боковую панель', - 'chat.newThreadShortcut': 'Новый чат (/new)', - 'chat.new': 'Новый', - 'chat.failedToLoadMessages': 'Не удалось загрузить сообщения', - 'chat.thinkingIteration': 'Думаю... ({n})', - 'chat.thinkingDots': 'Думаю...', - 'chat.approachingLimit': 'Лимит использования близко', - 'chat.approachingLimitMsg': 'Ты использовал {pct}% доступной квоты.', - 'chat.upgrade': 'Улучшить', - 'chat.weeklyLimitHit': 'Ты достиг еженедельного лимита.', - 'chat.resets': 'Сбросится', - 'chat.topUpToContinue': 'Пополни баланс для продолжения.', - 'chat.budgetComplete': - 'Включённый бюджет исчерпан. Добавь кредиты или улучши план для продолжения.', - 'chat.topUp': 'Пополнить', - 'chat.cycle': 'Цикл', - 'chat.cycleSpent': 'Потрачено за цикл', - 'chat.cycleRemaining': 'Осталось', - 'chat.left': 'осталось', - 'chat.setup': 'Настроить', - 'chat.switchToText': 'Переключиться на текст', - 'chat.transcribing': 'Транскрипция...', - 'chat.stopAndSend': 'Остановить и отправить', - 'chat.startTalking': 'Начни говорить', - 'chat.playingVoiceReply': 'Воспроизведение голосового ответа', - 'chat.voiceHint': 'Используй микрофон для речи', - 'chat.micUnavailable': 'Микрофон недоступен', - 'chat.turn': 'ход', - 'chat.turns': 'ходов', - 'chat.openWorkerThread': 'Открыть чат воркера', - 'chat.attachment.attach': 'Прикрепить изображение', - 'chat.attachment.remove': 'Удалить {name}', - 'chat.attachment.tooMany': 'Максимум {max} изображений на сообщение', - 'chat.attachment.tooLarge': 'Изображение превышает ограничение размера {max}', - 'chat.attachment.unsupportedType': - 'Неподдерживаемый тип файла. Используйте PNG, JPEG, WebP, GIF или BMP.', - 'chat.attachment.readFailed': 'Не удалось прочитать файл', - 'memory.searchAria': 'Поиск в памяти', - 'memory.searchPlaceholder': 'Поиск записей памяти...', - 'memory.sourceFilter.all': 'Все источники', - 'memory.sourceFilter.email': 'Электронная почта', - 'memory.sourceFilter.calendar': 'Календарь', - 'memory.sourceFilter.telegram': 'Telegram', - 'memory.sourceFilter.aiInsight': 'AI-инсайт', - 'memory.sourceFilter.system': 'Система', - 'memory.sourceFilter.trading': 'Трейдинг', - 'memory.sourceFilter.security': 'Безопасность', - 'memory.ingestionActivity': 'Активность загрузки', - 'memory.events': 'событий', - 'memory.event': 'событие', - 'memory.overTheLast': 'за последние', - 'memory.months': 'месяцев', - 'memory.peak': 'Пик', - 'memory.perDay': '/день', - 'memory.less': 'Меньше', - 'memory.more': 'Больше', - 'memory.on': 'в', - 'memory.loading': 'Загрузка памяти', - 'memory.fetching': 'Получение записей памяти...', - 'memory.analyzing': 'Анализ памяти', - 'memory.analyzingHint': 'Обработка воспоминаний для извлечения инсайтов...', - 'memory.noMatches': 'Ничего не найдено', - 'memory.noMatchesHint': 'Попробуй изменить условия поиска или фильтры.', - 'memory.allCaughtUp': 'Всё просмотрено', - 'memory.allCaughtUpHint': 'Новых записей для обработки нет.', - 'memory.noAnalysis': 'Анализа ещё нет', - 'memory.noAnalysisHint': 'Запусти анализ, чтобы найти закономерности в воспоминаниях.', - 'memory.emptyHint': 'Начни общаться, чтобы создать первые воспоминания.', - 'mic.unavailable': 'Микрофон недоступен', - 'mic.permissionDenied': 'Доступ к микрофону запрещён', - 'mic.failedToStartRecorder': 'Не удалось запустить запись', - 'mic.transcribing': 'Транскрипция...', - 'mic.tapToSend': 'Нажми для отправки', - 'mic.waitingForAgent': 'Ожидание агента...', - 'mic.tapAndSpeak': 'Нажми и говори', - 'mic.stopRecording': 'Остановить запись и отправить', - 'mic.startRecording': 'Начать запись', - 'token.usageLimitReached': 'Лимит использования достигнут', - 'token.approachingLimit': 'Лимит близко', - 'token.planClickForDetails': 'план — нажми для подробностей', - 'token.sessionTokens': 'Вход: {in} | Выход: {out} | Ходов: {turns}', - 'token.limit': 'Лимит достигнут', - 'catalog.noCapabilityBinding': 'Нет привязки возможностей', - 'catalog.downloadFailed': 'Загрузка не удалась', - 'catalog.active': 'Активно', - 'catalog.installed': 'Установлено', - 'catalog.notDownloaded': 'Не загружено', - 'catalog.inUse': 'Используется', - 'catalog.use': 'Использовать', - 'catalog.deleteModel': 'Удалить модель', - 'catalog.download': 'Скачать', - 'navigator.recent': 'Недавние', - 'navigator.today': 'Сегодня', - 'navigator.thisWeek': 'На этой неделе', - 'navigator.sources': 'Источники', - 'navigator.email': 'Электронная почта', - 'navigator.slack': 'Slack', - 'navigator.chat': 'Чат', - 'navigator.documents': 'Документы', - 'navigator.people': 'Люди', - 'navigator.topics': 'Темы', - 'dreams.description': - 'Сны — это AI-отражения, которые синтезируют закономерности из твоих воспоминаний.', - 'dreams.comingSoon': 'Скоро', - 'assignment.memoryLlm': 'LLM памяти', - 'assignment.memoryLlmAria': 'Выбор Memory LLM', - 'assignment.embedder': 'Эмбеддер', - 'assignment.loaded': 'Загружено', - 'assignment.notDownloaded': 'Не загружено', - 'assignment.usedForExtractSummarise': 'Используется для извлечения и суммаризации', - 'insights.knownFacts': 'Известные факты', - 'insights.preferences': 'Предпочтения', - 'insights.relationships': 'Отношения', - 'insights.skills': 'Навыки', - 'insights.opinions': 'Мнения', - // Developer options menu items (#2225) — English stubs; native translations welcome - 'devOptions.menuAi': 'Конфигурация AI', - 'devOptions.menuAiDesc': - 'Облачные поставщики, локальные модели Ollama и маршрутизация для каждой рабочей нагрузки', - 'devOptions.menuScreenAware': 'Функция Screen Aware', - 'devOptions.menuScreenAwareDesc': - 'Разрешения на захват экрана, мониторинг политика и элементы управления сеансом', - 'devOptions.menuMessaging': 'Каналы обмена сообщениями', - 'devOptions.menuMessagingDesc': - 'Настройка режимов аутентификации Telegram/Discord и маршрутизации каналов по умолчанию', - 'devOptions.menuTools': 'Инструменты', - 'devOptions.menuToolsDesc': - 'Включение или отключение возможностей, которые OpenHuman может использовать от вашего имени', - 'devOptions.menuAgentChat': 'Чат агента', - 'devOptions.menuAgentChatDesc': - 'Диалог агента тестирования с переопределением модели и температуры', - 'devOptions.menuCronJobs': 'Задания Cron', - 'devOptions.menuCronJobsDesc': - 'Просмотр и настройка запланированных заданий для навыков выполнения', - 'devOptions.menuLocalModelDebug': 'Отладка локальной модели', - 'devOptions.menuLocalModelDebugDesc': - 'Конфигурация Ollama, загрузка ресурсов, тесты моделей и диагностика', - 'devOptions.menuWebhooksDebug': 'Веб-перехватчики', - 'devOptions.menuWebhooksDebugDesc': - 'Проверка регистрации веб-перехватчиков во время выполнения и записанные журналы запросов', - 'devOptions.menuIntelligence': 'Аналитика', - 'devOptions.menuIntelligenceDesc': - 'Рабочая область памяти, механизм подсознания, сны и настройки', - 'devOptions.menuNotificationRouting': 'Маршрутизация уведомлений', - 'devOptions.menuNotificationRoutingDesc': - 'Оценка важности ИИ и эскалация оркестратора для предупреждений интеграции', - 'devOptions.menuComposeIOTriggers': 'Триггеры ComposeIO', - 'devOptions.menuComposeIOTriggersDesc': 'Просмотр истории и архива триггеров ComposeIO.', - 'devOptions.menuComposioRouting': 'Composio Маршрутизация (прямой режим)', - 'devOptions.menuComposioRoutingDesc': - 'Используйте свой собственный ключ Composio API и направляйте вызовы непосредственно на backend.composio.dev', - 'devOptions.menuComposioTriggers': 'Интеграция Триггеры', - 'devOptions.menuComposioTriggersDesc': - 'Настройка параметров сортировки AI для триггеров интеграции Composio', - 'mic.deviceSelector': 'Микрофонное устройство', - 'mic.tapToSendCountdown': 'Нажми для отправки ({seconds}с)', - 'settings.agents.title': 'Agents', - 'settings.agents.subtitle': - 'Manage the agents available for delegation — built-in defaults and your own custom agents.', - 'settings.agents.menuDesc': 'Manage built-in and custom agents', - 'settings.agents.newAgent': 'New agent', - 'settings.agents.loadError': "Couldn't load agents", - 'settings.agents.empty': 'No agents yet', - 'settings.agents.sourceDefault': 'Built-in', - 'settings.agents.sourceCustom': 'Custom', - 'settings.agents.enable': 'Enable agent', - 'settings.agents.disable': 'Disable agent', - 'settings.agents.edit': 'Edit', - 'settings.agents.delete': 'Delete', - 'settings.agents.reset': 'Reset to default', - 'settings.agents.modelLabel': 'Model', - 'settings.agents.toolsLabel': 'Tools', - 'settings.agents.toolsAll': 'All tools', - 'settings.agents.toolsCount': '{count} tools', - 'settings.agents.actionFailed': "Couldn't update the agent", - 'settings.agents.orchestratorLocked': 'The orchestrator is always enabled.', - 'settings.agents.editor.createTitle': 'New agent', - 'settings.agents.editor.editTitle': 'Edit agent', - 'settings.agents.editor.id': 'ID', - 'settings.agents.editor.idHint': 'Lowercase letters, numbers, _ and - only.', - 'settings.agents.editor.name': 'Name', - 'settings.agents.editor.description': 'Description', - 'settings.agents.editor.model': 'Model (optional)', - 'settings.agents.editor.modelPlaceholder': 'e.g. inherit, hint:fast, or a model id', - 'settings.agents.editor.systemPrompt': 'System prompt (optional)', - 'settings.agents.editor.tools': 'Allowed tools', - 'settings.agents.editor.toolsHint': 'One tool name per line. Use * for all tools.', - 'settings.agents.editor.defaultsNote': - 'Editing a built-in agent saves an override you can reset later.', - 'settings.agents.editor.save': 'Save', - 'settings.agents.editor.create': 'Create agent', - 'settings.agents.editor.saving': 'Saving…', - 'settings.agentsSection.title': 'Agents', - 'settings.agentsSection.description': - 'Manage your agents, their autonomy, and what they can access on this computer.', - 'settings.agentsSection.menuDesc': 'Registry, autonomy & OS access', - 'settings.agents.editor.notFound': 'Agent not found.', - 'settings.agents.editor.modelInherit': 'Inherit (platform default)', - 'settings.agents.editor.modelHints': 'Route hints', - 'settings.agents.editor.modelTiers': 'Model tiers', - 'settings.agents.editor.modelCustom': 'Custom model id…', - 'settings.agents.editor.modelCustomPlaceholder': 'e.g. anthropic/claude-sonnet-4', - 'settings.agents.editor.selectTools': 'Add tools', - 'settings.agents.editor.toolsAllSelected': 'All tools', - 'settings.agents.editor.toolsNoneSelected': 'No tools selected', - 'settings.agents.editor.removeToolAria': 'Remove {tool}', - 'settings.agents.editor.toolsModalTitle': 'Allowed tools', - 'settings.agents.editor.toolsSelectedCount': '{count} selected', - 'settings.agents.editor.toolsSearchPlaceholder': 'Search tools…', - 'settings.agents.editor.toolsAllowAll': 'Allow all tools (*)', - 'settings.agents.editor.toolsAllowAllHint': 'This agent can use every available tool.', - 'settings.agents.editor.toolsLoading': 'Loading tools…', - 'settings.agents.editor.toolsLoadError': 'Couldn’t load tools', - 'settings.agents.editor.toolsEmpty': 'No tools match your search.', - 'settings.agents.editor.toolsDone': 'Done', - 'settings.agents.editor.builtInReadonly': - 'Built-in agents can’t be edited. You can enable, disable, or reset them from the agents list.', -}; - -export default ru2; diff --git a/app/src/lib/i18n/chunks/ru-3.ts b/app/src/lib/i18n/chunks/ru-3.ts deleted file mode 100644 index 53e6a4143..000000000 --- a/app/src/lib/i18n/chunks/ru-3.ts +++ /dev/null @@ -1,506 +0,0 @@ -import type { TranslationMap } from '../types'; - -// Russian (Русский) chunk 3/5. Translated from chunks/en-3.ts. -const ru3: TranslationMap = { - 'insights.other': 'Другое', - 'insights.title': 'Инсайты', - 'insights.empty': 'Инсайтов пока нет. Они появляются по мере роста памяти.', - 'insights.description': 'На основе {count} связей в твоём графе памяти.', - 'insights.items': 'элементов', - 'insights.more': 'ещё', - 'calls.joiningCall': 'Подключение к звонку', - 'calls.meetWindowOpening': 'Окно Meet открывается...', - 'calls.failedToStart': 'Не удалось начать звонок Meet', - 'calls.couldNotStart': 'Не удалось начать звонок', - 'calls.failedToClose': 'Не удалось завершить звонок', - 'calls.couldNotClose': 'Не удалось закрыть звонок', - 'calls.joinMeet': 'Подключиться к звонку Google Meet', - 'calls.joinMeetDescription': 'Введи ссылку Google Meet для подключения.', - 'calls.meetLink': 'Ссылка Meet', - 'calls.displayName': 'Отображаемое имя', - 'calls.openingMeet': 'Открытие Meet...', - 'calls.joinCall': 'Подключиться к звонку', - 'calls.activeCalls': 'Активные звонки', - 'calls.leave': 'Выйти', - 'workspace.wipeConfirm': 'Ты уверен, что хочешь очистить всю память? Это нельзя отменить.', - 'workspace.resetTreeConfirm': 'Ты уверен, что хочешь перестроить дерево памяти?', - 'workspace.wipeTitle': 'Очистить память', - 'workspace.resetting': 'Сброс...', - 'workspace.resetMemory': 'Сбросить память', - 'workspace.resetTreeTitle': 'Перестроить дерево памяти', - 'workspace.rebuilding': 'Перестройка...', - 'workspace.resetMemoryTree': 'Сбросить дерево памяти', - 'workspace.building': 'Построение...', - 'workspace.buildSummaryTrees': 'Построить деревья суммаризации', - 'workspace.viewVault': 'Открыть хранилище', - 'workspace.openingVaultTitle': 'Открытие хранилища в Obsidian', - 'workspace.openingVaultMessage': - "If Obsidian doesn't open, install it from obsidian.md or use Reveal Folder. Vault path:", - 'workspace.openVaultFailedTitle': "Couldn't open vault in Obsidian", - 'workspace.openVaultFailedMessage': - 'Используйте Reveal Folder, чтобы напрямую открыть каталог хранилища. Путь к хранилищу:', - 'workspace.revealVaultFailed': "Couldn't reveal vault folder", - 'workspace.revealFolder': 'Показать папку', - 'workspace.checkingVault': 'Checking…', - 'workspace.vaultNotRegisteredHelp': - 'Obsidian only opens folders you\'ve added as a vault. In Obsidian, choose "Open folder as vault" and pick the folder below — you only need to do this once. Then click View Vault again.', - 'workspace.obsidianNotFoundHelp': - "We couldn't find Obsidian on this device. Install it, or — if it's installed somewhere non-standard — set its config folder under Advanced.", - 'workspace.openAnyway': 'Open in Obsidian anyway', - 'workspace.installObsidian': 'Install Obsidian', - 'workspace.obsidianAdvanced': 'Obsidian installed elsewhere?', - 'workspace.obsidianConfigDirLabel': 'Obsidian config folder', - 'workspace.obsidianConfigDirHint': - 'Path to the folder containing obsidian.json (e.g. ~/.config/obsidian). Leave blank to auto-detect.', - 'workspace.obsidianConfigDirPlaceholder': '~/.config/obsidian', - 'workspace.graphLoadFailed': 'Не удалось загрузить граф памяти', - 'workspace.loadingGraph': 'Загрузка графа памяти...', - 'workspace.graphViewMode': 'Режим просмотра графа памяти', - 'workspace.trees': 'Деревья', - 'workspace.contacts': 'Контакты', - 'graph.noContactMentions': 'Нет упоминаний контактов', - 'graph.noMemory': 'Памяти нет', - 'graph.source': 'Источник', - 'graph.topic': 'Тема', - 'graph.global': 'Глобальное', - 'graph.document': 'Документ', - 'graph.contact': 'Контакт', - 'graph.nodes': 'узлов', - 'graph.parentChild': 'родитель-потомок', - 'graph.documentContact': 'документ-контакт', - 'graph.link': 'связь', - 'graph.links': 'связей', - 'graph.children': 'потомки', - 'graph.clickToOpenObsidian': 'Нажми, чтобы открыть в Obsidian', - 'graph.person': 'Человек', - 'modal.dontShowAgain': 'Не показывать похожие предложения', - 'reflections.loading': 'Загрузка рефлексий...', - 'reflections.empty': 'Рефлексий пока нет', - 'reflections.title': 'Рефлексии', - 'reflections.proposedAction': 'Предлагаемое действие', - 'reflections.act': 'Выполнить', - 'reflections.dismiss': 'Закрыть', - 'whatsapp.chatsSynced': 'чатов синхронизировано', - 'whatsapp.chatSynced': 'чат синхронизирован', - 'sync.active': 'Активно', - 'sync.recent': 'Недавние', - 'sync.idle': 'Ожидание', - 'sync.memorySources': 'Источники памяти', - 'sync.noConnectedSources': 'Нет подключённых источников', - 'sync.chunks': 'блоков', - 'sync.lastChunk': 'Последний блок:', - 'sync.pending': 'ожидает', - 'sync.processed': 'обработано', - 'sync.syncing': 'Синхронизация…', - 'sync.sync': 'Синхронизировать', - 'sync.failedToLoad': 'Не удалось загрузить статус синхронизации', - 'sync.noContent': 'Контент в память ещё не синхронизирован. Подключи интеграцию для начала.', - 'memorySources.title': 'Memory Sources', - 'memorySources.empty': 'No memory sources yet. Add one to start feeding memory.', - 'memorySources.loadingConnections': 'Loading connections…', - 'memorySources.noConnections': - 'No active Composio connections found. Connect an integration first.', - 'memorySources.pickConnection': 'Pick a connection', - 'memorySources.selectConnection': '— Select a connection —', - 'memorySources.composioListFailed': 'Failed to load Composio connections.', - 'memorySources.browse': 'Browse…', - 'memorySources.folderPathPlaceholder': '/Users/you/notes', - 'memorySources.globPatternPlaceholder': '**/*.md', - 'memorySources.repoUrlPlaceholder': 'https://github.com/org/repo', - 'memorySources.branchPlaceholder': 'main', - 'memorySources.feedUrlPlaceholder': 'https://example.com/feed.xml', - 'memorySources.pageUrlPlaceholder': 'https://example.com/article', - 'memorySources.cssSelectorPlaceholder': 'article', - 'memorySources.searchQueryPlaceholder': 'from:user AI safety', - 'memorySources.kind.composio': 'Integration', - 'memorySources.kind.folder': 'Local Folder', - 'memorySources.kind.github_repo': 'GitHub Repo', - 'memorySources.kind.twitter_query': 'Twitter Search', - 'memorySources.kind.rss_feed': 'RSS Feed', - 'memorySources.kind.web_page': 'Web Page', - 'memorySources.sync.successTitle': 'Syncing', - 'memorySources.sync.successMessage': 'Progress will appear shortly.', - 'memorySources.sync.failedTitle': 'Sync failed:', - 'time.justNow': 'just now', - 'time.secondsAgoSuffix': 's ago', - 'time.minutesAgoSuffix': 'm ago', - 'time.hoursAgoSuffix': 'h ago', - 'time.daysAgoSuffix': 'd ago', - 'memorySources.customSources': 'Custom Sources', - 'memorySources.addSource': 'Add Source', - 'memorySources.noCustomSources': - 'No custom sources yet. Add a folder, GitHub repo, RSS feed, or web page to start.', - 'memorySources.pickKind': 'What kind of source do you want to add?', - 'memorySources.backToKinds': 'Back to source types', - 'memorySources.label': 'Label', - 'memorySources.labelPlaceholder': 'My research notes', - 'memorySources.add': 'Add', - 'memorySources.adding': 'Adding…', - 'memorySources.added': 'Source added', - 'memorySources.removed': 'Source removed', - 'memorySources.remove': 'Remove', - 'memorySources.enable': 'Enable', - 'memorySources.disable': 'Disable', - 'memorySources.toggleFailed': 'Toggle failed', - 'memorySources.removeFailed': 'Remove failed', - 'memorySources.folderPath': 'Folder path', - 'memorySources.globPattern': 'Glob pattern', - 'memorySources.repoUrl': 'Repository URL', - 'memorySources.branch': 'Branch', - 'memorySources.feedUrl': 'Feed URL', - 'memorySources.pageUrl': 'Page URL', - 'memorySources.cssSelector': 'CSS selector (optional)', - 'memorySources.searchQuery': 'Search query', - 'backend.aiBackend': 'AI-бэкенд', - 'backend.cloud': 'Облако', - 'backend.recommended': 'Рекомендуется', - 'backend.cloudDescription': - 'Быстрые и мощные модели на наших серверах. Готовы к использованию сразу.', - 'backend.privacyNote': - 'Личные данные, сообщения и ключи никогда не отправляются на наши серверы.', - 'backend.local': 'Локально', - 'backend.advanced': 'Дополнительно', - 'backend.localDescription': - 'Запускай модели на своём устройстве с помощью Ollama. Полная приватность, требует настройки.', - 'backend.ramRecommended': 'Рекомендуется 16 ГБ+ RAM', - 'subconscious.tasks': 'задач', - 'subconscious.ticks': 'тиков', - 'subconscious.last': 'Последний', - 'subconscious.failed': 'ошибка', - 'subconscious.tickInterval': 'Интервал тика', - 'subconscious.runNow': 'Запустить сейчас', - 'subconscious.providerUnavailableTitle': 'Подсознание приостановлено', - 'subconscious.providerSettings': 'Настройки ИИ', - 'subconscious.approvalNeeded': 'Требуется подтверждение', - 'subconscious.requiresApproval': 'Требует подтверждения', - 'subconscious.fixInConnections': 'Исправить в подключениях', - 'subconscious.goAhead': 'Продолжить', - 'subconscious.activeTasks': 'Активные задачи', - 'subconscious.noActiveTasks': 'Активных задач нет', - 'subconscious.default': 'По умолчанию', - 'subconscious.addTaskPlaceholder': 'Добавить новую задачу...', - 'subconscious.activityLog': 'Журнал активности', - 'subconscious.noActivity': 'Активности пока нет', - 'subconscious.decision.nothingNew': 'Ничего нового', - 'subconscious.decision.completed': 'Завершено', - 'subconscious.decision.evaluating': 'Оценка', - 'subconscious.decision.waitingApproval': 'Ожидание подтверждения', - 'subconscious.decision.failed': 'Ошибка', - 'subconscious.decision.cancelled': 'Отменено', - 'subconscious.decision.skipped': 'Пропущено', - 'actionable.complete': 'Выполнить', - 'actionable.dismiss': 'Закрыть', - 'actionable.snooze': 'Отложить', - 'actionable.new': 'Новое', - 'stats.storage': 'Хранилище', - 'stats.files': 'файлов', - 'stats.documents': 'Документы', - 'stats.today': 'сегодня', - 'stats.namespaces': 'Пространства имён', - 'stats.relations': 'Связи', - 'stats.firstMemory': 'Первое воспоминание', - 'stats.latest': 'Последнее', - 'stats.sessions': 'Сессии', - 'stats.tokens': 'токенов', - 'bootCheck.invalidUrl': 'Введи URL среды выполнения.', - 'bootCheck.urlMustStartWith': 'URL должен начинаться с http:// или https://', - 'bootCheck.validUrlRequired': - 'Похоже, это не корректный URL (попробуй https://core.example.com/rpc)', - 'bootCheck.tokenRequired': 'Для подключения нужен токен авторизации.', - 'bootCheck.chooseCoreMode': 'Выбрать среду выполнения', - 'bootCheck.connectToCore': 'Подключиться к среде выполнения', - 'bootCheck.desktopDescription': - 'OpenHuman нужна среда выполнения для работы. Выбери, где она должна находиться.', - 'bootCheck.webDescription': - 'В браузере OpenHuman подключается к среде выполнения под твоим управлением. Введи URL и токен авторизации, или скачай настольное приложение для локального запуска.', - 'bootCheck.preferDesktop': 'Хочешь держать всё на своём устройстве?', - 'bootCheck.downloadDesktop': 'Скачать настольное приложение', - 'bootCheck.localRecommended': 'Запустить локально (рекомендуется)', - 'bootCheck.localDescription': - 'Работает прямо на твоём компьютере. Быстро, полностью приватно, ничего настраивать не нужно.', - 'bootCheck.cloudMode': 'Запустить в облаке (сложно)', - 'bootCheck.cloudDescription': - 'Подключись к среде выполнения, которую ты размещаешь в другом месте. Работает 24×7, не нужно держать это устройство включённым.', - 'bootCheck.coreRpcUrl': 'URL среды выполнения', - 'bootCheck.rpcUrlPlaceholder': 'https://core.example.com/rpc', - 'bootCheck.authToken': 'Токен авторизации', - 'bootCheck.bearerTokenPlaceholder': 'Bearer-токен от твоей удалённой среды выполнения', - 'bootCheck.storedLocally': 'Хранится только на этом устройстве. Отправляется как ', - 'bootCheck.testing': 'Проверка…', - 'bootCheck.testConnection': 'Проверить соединение', - 'bootCheck.connectedOk': 'Подключено. Всё готово.', - 'bootCheck.authFailed': 'Токен не подошёл. Проверь его и попробуй снова.', - 'bootCheck.unreachablePrefix': 'Не удалось достучаться:', - 'bootCheck.checkingCore': 'Пробуждение среды выполнения…', - 'bootCheck.cannotReach': 'Нет доступа к среде выполнения', - 'bootCheck.cannotReachDesc': 'Не удалось подключиться к среде выполнения. Попробовать другую?', - 'bootCheck.switchMode': 'Выбрать другую среду', - 'bootCheck.quit': 'Выйти', - 'bootCheck.legacyDetected': 'Обнаружена устаревшая фоновая среда', - 'bootCheck.legacyDescription': - 'На этом устройстве уже запущен отдельно установленный демон OpenHuman. Нужно его убрать, прежде чем встроенная среда сможет взять управление.', - 'bootCheck.removing': 'Удаление…', - 'bootCheck.removeContinue': 'Удалить и продолжить', - 'bootCheck.localNeedsRestart': 'Требуется перезапуск локальной среды', - 'bootCheck.localNeedsRestartDesc': - 'Локальная среда выполнения и приложение используют разные версии. Быстрый перезапуск синхронизирует их.', - 'bootCheck.restarting': 'Перезапуск…', - 'bootCheck.restartCore': 'Перезапустить среду', - 'bootCheck.cloudNeedsUpdate': 'Требуется обновление облачной среды', - 'bootCheck.cloudNeedsUpdateDesc': - 'Облачная среда и приложение используют разные версии. Запусти обновление для синхронизации.', - 'bootCheck.updating': 'Обновление…', - 'bootCheck.updateCloudCore': 'Обновить облачную среду', - 'bootCheck.versionCheckFailed': 'Проверка версии среды не удалась', - 'bootCheck.versionCheckFailedDesc': - 'Среда работает, но не сообщает свою версию. Возможно, она устарела. Перезапусти или обнови её для продолжения.', - 'bootCheck.working': 'Работаю…', - 'bootCheck.restartUpdateCore': 'Перезапустить / обновить среду', - 'bootCheck.unexpectedError': 'Неожиданная ошибка при загрузке', - 'bootCheck.actionFailed': 'Что-то пошло не так. Попробуй ещё раз.', - 'bootCheck.portConflictTitle': 'Не удалось запустить движок приложения', - 'bootCheck.portConflictBody': - 'Другой процесс использует сетевой порт, необходимый OpenHuman. Попробуем устранить это автоматически.', - 'bootCheck.portConflictFixButton': 'Исправить автоматически', - 'bootCheck.portConflictFixing': 'Исправление…', - 'bootCheck.portConflictFixFailed': - 'Автоматическое исправление не сработало. Перезагрузите компьютер и попробуйте снова.', - 'notifications.justNow': 'только что', - 'notifications.minAgo': '{n} мин назад', - 'notifications.hrAgo': '{n} ч назад', - 'notifications.dayAgo': '{n} д назад', - 'notifications.category.messages': 'Сообщения', - 'notifications.category.agents': 'Агенты', - 'notifications.category.skills': 'Навыки', - 'notifications.category.system': 'Система', - 'notifications.category.meetings': 'Встречи', - 'notifications.category.reminders': 'Напоминания', - 'notifications.category.important': 'Важное', - 'about.update.status.checking': 'Проверка...', - 'about.update.status.available': 'доступна v{version}', - 'about.update.status.availableNoVersion': 'Доступно обновление', - 'about.update.status.downloading': 'Загрузка...', - 'about.update.status.readyToInstall': 'v{version} готова к установке', - 'about.update.status.readyToInstallNoVersion': - 'Новая версия загружена и готова. Перезапусти для применения.', - 'about.update.status.installing': 'Установка...', - 'about.update.status.restarting': 'Перезапуск...', - 'about.update.status.upToDate': 'У тебя установлена последняя версия.', - 'about.update.status.error': 'Ошибка проверки обновлений', - 'about.update.status.default': 'Проверить обновления', - 'welcome.connectionFailed': 'Ошибка подключения: {status} {statusText}', - 'welcome.connectionFailedMsg': 'Ошибка подключения: {message}', - 'welcome.continueLocally': 'Продолжить локально', - 'welcome.localSessionStarting': 'Запуск локального сеанса...', - 'welcome.localSessionDesc': - 'Использует автономный локальный профиль и пропускает TinyHumans OAuth.', - 'chat.agentChatDesc': 'Открыть прямой чат с агентом.', - 'channels.activeRouteValue': '{channel} через {authMode}', - 'privacy.dataKind.messages': 'Сообщения', - 'privacy.dataKind.agents': 'Агенты', - 'privacy.dataKind.skills': 'Навыки', - 'privacy.dataKind.system': 'Система', - 'privacy.dataKind.meetings': 'Встречи', - 'privacy.dataKind.reminders': 'Напоминания', - 'privacy.dataKind.important': 'Важное', - 'onboarding.enableLocalAI': 'Включить локальный AI', - 'onboarding.skills.status.available': 'Доступно', - 'onboarding.skills.status.connected': 'Подключено', - 'onboarding.skills.status.connecting': 'Подключение', - 'onboarding.skills.status.error': 'Ошибка', - 'onboarding.skills.status.unavailable': 'Недоступно', - 'composio.statusUnavailable': 'Статус недоступен', - 'composio.envVarOverrides': 'задана, она переопределяет этот параметр.', - 'memory.day.sun': 'Вс', - 'memory.day.mon': 'Пн', - 'memory.day.tue': 'Вт', - 'memory.day.wed': 'Ср', - 'memory.day.thu': 'Чт', - 'memory.day.fri': 'Пт', - 'memory.day.sat': 'Сб', - 'memory.ingesting': 'Загрузка', - 'memory.ingestionQueued': 'В очереди', - 'memory.ingestingTitle': 'Загрузка {title}', - 'mic.noAudioCaptured': 'Аудио не захвачено', - 'mic.noSpeechDetected': 'Речь не обнаружена', - 'mic.lowConfidenceResult': 'Не удалось чётко распознать аудио — попробуйте ещё раз', - 'mic.failedToStopRecording': 'Не удалось остановить запись: {message}', - 'mic.transcriptionFailed': 'Ошибка транскрипции: {message}', - 'reflections.kind.retrospective': 'Ретроспектива', - 'reflections.kind.derivedFact': 'Выведенный факт', - 'reflections.kind.moodInsight': 'Инсайт о настроении', - 'reflections.kind.relationshipInsight': 'Инсайт об отношениях', - 'graph.tooltip.summary': 'Краткое содержание', - 'graph.tooltip.contact': 'Контакт', - 'localModel.usage.never': 'Никогда', - 'localModel.usage.mediumLoad': 'Средняя нагрузка', - 'localModel.usage.lowLoad': 'Низкая нагрузка', - 'localModel.usage.idleMode': 'Режим ожидания', - 'localModel.rebootstrapComplete': 'Повторная инициализация модели завершена.', - 'localModel.modelsVerified': 'Локальные модели проверены.', - 'accounts.addModal.allConnected': 'Все подключены', - 'accounts.addModal.title': 'Добавить аккаунт', - 'accounts.respondQueue.empty': 'Пусто', - 'accounts.respondQueue.hide': 'Скрыть очередь ответов', - 'accounts.respondQueue.loadFailed': 'Не удалось загрузить очередь ответов', - 'accounts.respondQueue.loading': 'Загрузка очереди…', - 'accounts.respondQueue.pending': 'Ожидает', - 'accounts.respondQueue.show': 'Показать очередь ответов', - 'accounts.respondQueue.title': 'Очередь ответов', - 'accounts.webviewHost.almostReady': 'Почти готово...', - 'accounts.webviewHost.loadTimeout': 'Таймаут загрузки', - 'accounts.webviewHost.loading': 'Загрузка {providerName}...', - 'accounts.webviewHost.loadingAccount': 'Загрузка аккаунта', - 'accounts.webviewHost.restoringSession': 'Восстановление сессии...', - 'accounts.webviewHost.retryLoading': 'Повторить загрузку', - 'accounts.webviewHost.takingLonger': '{providerName} загружается дольше обычного.', - 'accounts.webviewHost.timeoutHint': 'Подсказка по таймауту', - 'app.connectionBadge.composio': 'Composio', - 'app.connectionBadge.messaging': 'Мессенджеры', - 'app.connectionIndicator.connected': 'Подключено к OpenHuman AI 🚀', - 'app.connectionIndicator.connecting': 'Подключение', - 'app.connectionIndicator.coreOffline': 'Ядро офлайн', - 'app.connectionIndicator.disconnected': 'Отключено', - 'app.connectionIndicator.offline': 'Офлайн', - 'app.connectionIndicator.reconnecting': 'Переподключение…', - 'app.errorFallback.componentStack': 'Стек компонентов', - 'app.errorFallback.downloadLatest': 'Скачать последнюю версию', - 'app.errorFallback.heading': 'Заголовок', - 'app.errorFallback.hint': 'Подсказка', - 'app.errorFallback.reloadApp': 'Перезагрузить приложение', - 'app.errorFallback.subheading': 'Подзаголовок', - 'app.errorFallback.tryRecover': 'Попробовать восстановить', - 'app.localAiDownload.installing': 'Установка...', - 'app.localAiDownload.preparing': 'Подготовка...', - 'app.openhumanLink.accounts.continueWith': 'Продолжить со входом через {label}', - 'app.openhumanLink.accounts.done': 'Готово', - 'app.openhumanLink.accounts.intro': 'Введение', - 'app.openhumanLink.accounts.webviewNote': 'Примечание о Webview', - 'app.openhumanLink.billing.openDashboard': 'Открыть панель', - 'app.openhumanLink.billing.stayOnTrial': 'Остаться на пробном периоде', - 'app.openhumanLink.billing.trialCredit': 'Пробный кредит', - 'app.openhumanLink.billing.trialDesc': 'Описание пробного периода', - 'app.openhumanLink.defaultBody': - 'Ещё не готово во всплывающем окне. Откройте полную страницу настроек, когда понадобится.', - 'app.openhumanLink.discord.intro': 'Введение', - 'app.openhumanLink.discord.openInvite': 'Открыть приглашение', - 'app.openhumanLink.discord.perk1': 'Преимущество 1', - 'app.openhumanLink.discord.perk2': 'Преимущество 2', - 'app.openhumanLink.discord.perk3': 'Преимущество 3', - 'app.openhumanLink.discord.perk4': 'Преимущество 4', - 'app.openhumanLink.done': 'Готово', - 'app.openhumanLink.loadingChannelSetup': 'Загрузка настроек канала', - 'app.openhumanLink.maybeLater': 'Может, потом', - 'app.openhumanLink.notifications.asking': 'Запрос у ОС…', - 'app.openhumanLink.notifications.blocked': 'Заблокировано', - 'app.openhumanLink.notifications.blockedStep1': 'Заблокировано, шаг 1', - 'app.openhumanLink.notifications.blockedStep2': 'Заблокировано, шаг 2', - 'app.openhumanLink.notifications.blockedStep3': 'Заблокировано, шаг 3', - 'app.openhumanLink.notifications.intro': 'Введение', - 'app.openhumanLink.notifications.promptHint': 'Подсказка', - 'app.openhumanLink.notifications.retry': 'Повторить тестовое уведомление', - 'app.openhumanLink.notifications.send': 'Отправить тестовое уведомление', - 'app.openhumanLink.notifications.sendFailed': 'Не удалось отправить: {error}', - 'app.openhumanLink.notifications.sent': - 'Тестовое уведомление отправлено. Если вы его не получили, откройте «Системные настройки» → «Уведомления» → OpenHuman, включите «Разрешить уведомления» и установите стиль баннера «Постоянный».', - 'app.openhumanLink.skipForNow': 'Пропустить', - 'app.openhumanLink.telegramUnavailable': 'Telegram недоступен', - 'app.openhumanLink.title.accounts': 'Подключи свои приложения', - 'app.openhumanLink.title.billing': 'Оплата и кредиты', - 'app.openhumanLink.title.discord': 'Вступи в сообщество', - 'app.openhumanLink.title.messaging': 'Подключи канал связи', - 'app.openhumanLink.title.notifications': 'Разрешить уведомления', - 'app.persistRehydration.body': 'Текст', - 'app.persistRehydration.heading': 'Заголовок', - 'app.persistRehydration.resetCta': 'Сброс…', - 'app.persistRehydration.resetting': 'Сброс…', - 'app.routeLoading.initializing': 'Инициализация OpenHuman...', - 'app.update.currentlyOn': '{version}', - 'app.update.errorFallback': 'Что-то пошло не так при обновлении.', - 'app.update.header.default': 'Обновление', - 'app.update.header.error': 'Ошибка обновления', - 'app.update.header.installing': 'Установка обновления', - 'app.update.header.readyToInstall': 'Обновление готово к установке', - 'app.update.header.restarting': 'Перезапуск…', - 'app.update.later': 'Позже', - 'app.update.newVersionReady': 'Новая версия готова к установке.', - 'app.update.progress.downloaded': 'Загружено: {amount}', - 'app.update.progress.installing': 'Установка новой версии…', - 'app.update.progress.restarting': 'Перезапуск приложения…', - 'app.update.progress.working': '{percent}%', - 'app.update.restartNote': 'Примечание о перезапуске', - 'app.update.restartNow': 'Перезапустить сейчас', - 'app.update.versionReady': 'Версия {newVersion} готова к установке.', - 'channels.discord.accountLinked': 'Аккаунт привязан', - 'channels.discord.connect': 'Подключить', - 'channels.discord.linkTokenExpired': 'Токен привязки истёк. Попробуй ещё раз.', - 'channels.discord.linkTokenInstruction': '{token}', - 'channels.discord.linkTokenLabel': 'Метка токена привязки', - 'channels.discord.linkTokenOnce': 'Токен привязки (однократно)', - 'channels.discord.picker.allPermissionsOk': 'Бот имеет все необходимые права в этом канале.', - 'channels.discord.picker.botNotInServers': 'Бот не на серверах', - 'channels.discord.picker.category': 'Категория', - 'channels.discord.picker.channel': 'Канал', - 'channels.discord.picker.checkingPermissions': 'Проверка прав', - 'channels.discord.picker.loadingChannels': 'Загрузка каналов...', - 'channels.discord.picker.loadingServers': 'Загрузка серверов...', - 'channels.discord.picker.missingPermissions': 'Недостаточно прав', - 'channels.discord.picker.noChannels': 'Текстовые каналы не найдены', - 'channels.discord.picker.noServers': 'Серверы не найдены', - 'channels.discord.picker.selectChannel': 'Выбери канал', - 'channels.discord.picker.selectServer': 'Выбери сервер', - 'channels.discord.picker.server': 'Сервер', - 'channels.discord.picker.serverChannelSelection': 'Выбор сервера и канала', - 'channels.discord.savedRestartRequired': 'Канал сохранён. Перезапусти приложение для активации.', - 'channels.telegram.connect': 'Подключить', - 'channels.telegram.managedDmConnecting': 'Подключение управляемого DM', - 'channels.telegram.managedDmTimeout': 'Таймаут управляемого DM', - 'channels.telegram.reconnect': 'Переподключить', - 'channels.telegram.savedRestartRequired': 'Канал сохранён. Перезапусти приложение для активации.', - 'channels.web.alwaysAvailable': 'Всегда доступно', - 'channels.discord.displayName': 'Discord', - 'channels.discord.description': 'Отправляйте и получайте сообщения через Discord.', - 'channels.discord.authMode.bot_token.description': - 'Предоставьте свой собственный токен бота Discord.', - 'channels.discord.authMode.oauth.description': - 'Установите бот OpenHuman на свой сервер Discord через OAuth.', - 'channels.discord.authMode.managed_dm.description': - 'Свяжите свою личную учетную запись Discord с ботом OpenHuman.', - 'channels.discord.fields.bot_token.label': 'Токен бота', - 'channels.discord.fields.bot_token.placeholder': 'Ваш токен бота Discord', - 'channels.discord.fields.guild_id.label': 'Идентификатор сервера (гильдии)', - 'channels.discord.fields.guild_id.placeholder': 'Необязательно: ограничить конкретным сервером', - 'channels.telegram.displayName': 'Telegram', - 'channels.telegram.description': 'Отправка и получение сообщений через Telegram.', - 'channels.telegram.authMode.managed_dm.description': - 'Отправьте сообщение боту OpenHuman Telegram напрямую.', - 'channels.telegram.authMode.bot_token.description': - 'Предоставьте свой собственный токен бота Telegram от @BotFather.', - 'channels.telegram.fields.bot_token.label': 'Токен бота', - 'channels.telegram.fields.bot_token.placeholder': '123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11', - 'channels.telegram.fields.allowed_users.label': 'Разрешенные пользователи', - 'channels.telegram.fields.allowed_users.placeholder': - 'Имена пользователей Telegram, разделенные запятыми', - 'channels.web.displayName': 'Интернет', - 'channels.web.description': 'Общайтесь через встроенный веб-интерфейс.', - 'channels.web.authMode.managed_dm.description': - 'Используйте встроенный веб-чат — настройка не требуется.', - 'welcome.continueLocallyExperimental': 'Продолжить локально (экспериментально)', - 'channels.yuanbao.connect': 'Connect', - 'channels.yuanbao.connecting': 'Connecting…', - 'channels.yuanbao.fieldRequired': '{field} is required', - 'channels.yuanbao.reconnect': 'Reconnect', - 'channels.yuanbao.savedRestartRequired': 'Channel saved. Restart the app to activate it.', - 'channels.yuanbao.unexpectedStatus': 'Unexpected connection status: {status}', - 'chat.approval.approve': 'Approve', - 'chat.approval.alwaysAllow': 'Always allow', - 'chat.approval.alwaysAllowHint': 'Stop asking for this tool — add it to your Always-allow list', - 'chat.approval.deciding': 'Working…', - 'chat.approval.deny': 'Deny', - 'chat.approval.error': 'Could not record your decision — try again.', - 'chat.approval.fallback': 'The agent wants to run an action that needs your approval.', - 'chat.approval.title': 'Approval needed', - 'chat.approval.tool': 'Tool:', -}; - -export default ru3; diff --git a/app/src/lib/i18n/chunks/ru-4.ts b/app/src/lib/i18n/chunks/ru-4.ts deleted file mode 100644 index 360203c66..000000000 --- a/app/src/lib/i18n/chunks/ru-4.ts +++ /dev/null @@ -1,488 +0,0 @@ -import type { TranslationMap } from '../types'; - -// Russian (Русский) chunk 4/5. Translated from chunks/en-4.ts. -const ru4: TranslationMap = { - 'chat.unsubscribeApproval.approve': 'Подтвердить и отписаться', - 'chat.unsubscribeApproval.approved': '✓ Подписка успешно отменена.', - 'chat.unsubscribeApproval.denied': '✕ Запрос отклонён.', - 'chat.unsubscribeApproval.deny': 'Отклонить', - 'chat.unsubscribeApproval.processing': 'Обработка...', - 'chat.unsubscribeApproval.title': 'Запрос на отписку', - 'commandPalette.ariaLabel': 'Палитра команд', - 'commandPalette.description': 'Описание', - 'commandPalette.label': 'Команды', - 'commandPalette.noResults': 'Ничего не найдено', - 'commandPalette.placeholder': 'Введи команду или поиск…', - 'commandPalette.searchAria': 'Поиск команд', - 'commandPalette.shortcutHint': 'Нажмите ?, чтобы увидеть все сочетания', - 'commandPalette.title': 'Палитра команд', - 'composio.connect.additionalConfigRequired': 'Требуется дополнительная настройка', - 'composio.connect.atlassianSubdomainHint': 'acme', - 'composio.connect.atlassianSubdomainLabel': 'Поддомен Atlassian', - 'composio.connect.connect': 'Подключить', - 'composio.connect.connectionFailed': 'Не удалось подключиться (статус: {status}).', - 'composio.connect.disconnectFailed': 'Ошибка отключения: {msg}', - 'composio.connect.disconnecting': 'Отключение…', - 'composio.connect.idleDescription': 'Подключите свой', - 'composio.connect.idleDescriptionSuffix': - 'аккаунт. Мы откроем окно браузера, вы предоставите доступ там, и приложение автоматически обнаружит подключение.', - 'composio.connect.isConnected': 'подключён.', - 'composio.connect.manage': 'Управлять', - 'composio.connect.needsSubdomain': 'Чтобы подключить', - 'composio.connect.needsSubdomainSuffix': - 'введите ваш поддомен Atlassian (например, acme для acme.atlassian.net) и попробуйте снова.', - 'composio.connect.oauthComplete': 'Ожидание завершения OAuth…', - 'composio.connect.oauthTimeout': 'Таймаут OAuth', - 'composio.connect.permissions': 'Разрешения', - 'composio.connect.permissionsDefault': 'Чтение + запись включены по умолчанию', - 'composio.connect.permissionsNote': 'может раскрыть', - 'composio.connect.permissionsNoteSuffix': - 'Собственные права агента OpenHuman настраиваются ниже переключателями чтения, записи и администратора.', - 'composio.connect.reopenBrowser': 'Открыть браузер снова', - 'composio.connect.requestingUrl': 'Запрос URL подключения…', - 'composio.connect.retryConnection': 'Повторить подключение', - 'composio.connect.scopeLoadError': 'Не удалось загрузить настройки области: {msg}', - 'composio.connect.scopeSaveError': 'Не удалось сохранить область {key}: {msg}', - 'composio.connect.subdomainInvalid': - 'Введите только короткий поддомен (например, "acme"), а не полный URL. Допустимы только буквы, цифры и дефисы.', - 'composio.connect.subdomainRequired': 'Введи свой поддомен Atlassian для продолжения.', - 'composio.connect.dynamicsOrgNameLabel': 'Название организации Dynamics 365', - 'composio.connect.dynamicsOrgNameHint': - 'Например, "myorg" для myorg.crm.dynamics.com. Введите только короткое название организации, а не полный URL.', - 'composio.connect.needsFieldsPrefix': 'Чтобы подключить', - 'composio.connect.needsFieldsSuffix': - 'нам нужно немного больше информации. Заполните недостающие поля ниже и повторите попытку.', - 'composio.connect.requiredFieldEmpty': 'Это поле обязательно для заполнения.', - 'composio.connect.wabaIdHint': - 'Найдите его через GET /me/businesses, затем GET /{business_id}/owned_whatsapp_business_accounts, используя ваш токен доступа Meta.', - 'composio.connect.wabaIdLabel': 'ID аккаунта WhatsApp Business', - 'composio.connect.wabaIdRequired': - 'Введи ID аккаунта WhatsApp Business (WABA ID) для продолжения.', - 'composio.connect.waitingFor': 'Ожидание', - 'composio.connect.waitingHint': 'Подсказка ожидания', - 'composio.triggers.heading': 'Триггеры', - 'composio.triggers.listenFrom': 'Слушать события от', - 'composio.triggers.loadError': 'Не удалось загрузить триггеры', - 'composio.triggers.needsConfiguration': 'Требуется настройка', - 'composio.triggers.noneAvailable': 'Сейчас нет доступных триггеров для', - 'conversations.taskKanban.moveLeft': 'Переместить влево', - 'conversations.taskKanban.moveRight': 'Переместить вправо', - 'conversations.taskKanban.title': 'Задачи', - 'conversations.toolTimeline.turn': 'ход', - 'conversations.toolTimeline.workerThread': 'чат воркера', - 'daemon.serviceBlockingGate.body': 'Текст', - 'daemon.serviceBlockingGate.downloadHint': 'Подсказка по загрузке', - 'daemon.serviceBlockingGate.downloadLatest': 'Скачать последнюю версию', - 'daemon.serviceBlockingGate.retryCore': 'Повторить запуск Core', - 'daemon.serviceBlockingGate.retryFailed': - 'Повтор не удался. Скачай последнюю версию и попробуй снова.', - 'daemon.serviceBlockingGate.retrying': 'Повтор...', - 'daemon.serviceBlockingGate.title': 'Ядро OpenHuman недоступно', - 'home.banners.discordSubtitle': 'Подзаголовок Discord', - 'home.banners.discordTitle': 'Вступи в наш Discord', - 'home.banners.earlyBirdDismiss': 'Закрыть баннер', - 'home.banners.earlyBirdFirstSub': 'первую подписку.', - 'home.banners.earlyBirdOn': 'Скидка раннего доступа на', - 'home.banners.earlyBirdTitle': 'Первые 1 000 пользователей получают скидку 60%.', - 'home.banners.earlyBirdUseCode': 'Используйте промокод для раннего доступа', - 'home.banners.getSubscription': 'оформить подписку', - 'home.banners.promoCreditsBody': 'Описание промо-кредитов', - 'home.banners.promoCreditsTitle': '{amount}', - 'home.banners.promoCreditsUsage': 'Использование промо-кредитов', - 'intelligence.memoryChunk.detail.chunk': 'Блок', - 'intelligence.memoryChunk.detail.copyChunkId': 'Скопировать ID блока', - 'intelligence.memoryChunk.detail.embeddingInfo': 'bge-m3 1024dim', - 'intelligence.memoryChunk.detail.noEmbedding': 'Векторного вложения нет', - 'intelligence.memoryChunk.letterhead.from': 'от', - 'intelligence.memoryChunk.letterhead.to': 'кому', - 'intelligence.memoryChunk.mentioned.chunkOne': '1 фрагмент', - 'intelligence.memoryChunk.mentioned.chunkOther': '{count} фрагментов', - 'intelligence.memoryChunk.mentioned.heading': 'у п о м я н у т о', - 'intelligence.memoryChunk.scoreBars.ariaScore': '{name} оценка {pct} процентов', - 'intelligence.memoryChunk.scoreBars.atThreshold': 'при {threshold}', - 'intelligence.memoryChunk.scoreBars.dropped': 'отброшено', - 'intelligence.memoryChunk.scoreBars.heading': 'п о ч е м у с о х р а н е н о', - 'intelligence.memoryChunk.scoreBars.kept': 'сохранено', - 'intelligence.diagram.title': 'Architecture Diagram', - 'intelligence.diagram.description': - 'Latest local architecture output from the configured diagram endpoint.', - 'intelligence.diagram.refresh': 'Refresh', - 'intelligence.diagram.refreshAria': 'Refresh diagram', - 'intelligence.diagram.emptyTitle': 'No diagram available yet', - 'intelligence.diagram.emptyDescription': - 'Generate an architecture diagram from the orchestrator and this panel will refresh from the configured local endpoint.', - 'intelligence.diagram.skillInstallCommand': 'npx skills add yizhiyanhua-ai/fireworks-tech-graph', - 'intelligence.diagram.promptExample': - 'Generate an architecture diagram of the current swarm in dark terminal style', - 'intelligence.diagram.imageAlt': 'Latest generated OpenHuman architecture diagram', - 'intelligence.diagram.refreshesEvery': 'Refreshes every {seconds}s', - 'intelligence.memoryText.entityTypePrefix': 'Тип сущности', - 'intelligence.screenDebug.active': 'Активно', - 'intelligence.screenDebug.app': 'Приложение', - 'intelligence.screenDebug.bounds': 'Границы', - 'intelligence.screenDebug.captureAlt': 'Результат тестового захвата', - 'intelligence.screenDebug.captureFailed': 'Ошибка', - 'intelligence.screenDebug.captureSuccess': 'Успех', - 'intelligence.screenDebug.captureTest': 'Тест захвата', - 'intelligence.screenDebug.capturing': 'Захват', - 'intelligence.screenDebug.frames': 'Кадры', - 'intelligence.screenDebug.idle': 'Ожидание', - 'intelligence.screenDebug.lastApp': 'Последнее приложение', - 'intelligence.screenDebug.mode': 'Режим', - 'intelligence.screenDebug.permAccessibility': 'Доступность', - 'intelligence.screenDebug.permInput': 'Ввод', - 'intelligence.screenDebug.permScreen': 'Доступность', - 'intelligence.screenDebug.permissions': 'Разрешения', - 'intelligence.screenDebug.platformNotSupported': 'Платформа не поддерживается', - 'intelligence.screenDebug.recentVisionSummaries': 'Недавние визуальные резюме', - 'intelligence.screenDebug.session': 'Сессия', - 'intelligence.screenDebug.size': 'Размер', - 'intelligence.screenDebug.status': 'Статус', - 'intelligence.screenDebug.testCapture': 'Тестовый захват', - 'intelligence.screenDebug.time': 'Время', - 'intelligence.screenDebug.title': 'Заголовок', - 'intelligence.screenDebug.unknown': 'Неизвестно', - 'intelligence.screenDebug.visionQueue': 'Очередь обработки изображений', - 'intelligence.screenDebug.visionState': 'Состояние обработки изображений', - 'intelligence.tasks.activeBoardOne': '1 активная доска в разговорах', - 'intelligence.tasks.activeBoardOther': '{count} активных досок в разговорах', - 'intelligence.tasks.empty': 'Досок задач агента пока нет', - 'intelligence.tasks.emptyHint': 'Пусто', - 'intelligence.tasks.failedToLoad': 'Не удалось загрузить', - 'intelligence.tasks.live': 'в реальном времени', - 'intelligence.tasks.loadingBoards': 'Загрузка досок задач…', - 'intelligence.tasks.threadPrefix': 'Тред {thread}', - 'intelligence.tasks.subtitle': 'Your tasks and agent task boards across the workspace.', - 'intelligence.tasks.newTask': 'New task', - 'intelligence.tasks.personalBoardTitle': 'Agent Tasks', - 'intelligence.tasks.personalEmpty': 'No personal tasks yet', - 'intelligence.tasks.composer.title': 'New task', - 'intelligence.tasks.composer.titleLabel': 'Title', - 'intelligence.tasks.composer.titlePlaceholder': 'What needs to be done?', - 'intelligence.tasks.composer.statusLabel': 'Status', - 'intelligence.tasks.composer.attachLabel': 'Attach to conversation', - 'intelligence.tasks.composer.attachNone': 'Personal (no conversation)', - 'intelligence.tasks.composer.objectiveLabel': 'Objective', - 'intelligence.tasks.composer.objectivePlaceholder': 'Optional — the desired outcome', - 'intelligence.tasks.composer.notesLabel': 'Notes', - 'intelligence.tasks.composer.notesPlaceholder': 'Optional notes', - 'intelligence.tasks.composer.create': 'Create task', - 'intelligence.tasks.composer.creating': 'Creating…', - 'intelligence.tasks.composer.createFailed': "Couldn't create the task", - 'notifications.card.dismiss': 'Закрыть уведомление', - 'notifications.card.importanceTitle': 'Важность: {pct}%', - 'notifications.center.empty': 'Уведомлений пока нет', - 'notifications.center.emptyHint': 'Пусто', - 'notifications.center.filterAll': 'Все', - 'notifications.center.markAllRead': 'Отметить всё прочитанным', - 'notifications.center.title': 'Уведомления', - 'oauth.button.loopbackTimeout': - 'Время входа истекло — браузер не завершил перенаправление OAuth. Пожалуйста, попробуйте снова.', - 'oauth.button.connecting': 'Подключение...', - 'oauth.login.continueWith': 'Продолжить через', - 'onboarding.contextGathering.buildingDesc': 'Сборка профиля', - 'onboarding.contextGathering.buildingProfile': 'Составление профиля...', - 'onboarding.contextGathering.continueToChat': 'Перейти в чат', - 'onboarding.contextGathering.errorDesc': - 'Мы не смогли построить ваш полный профиль прямо сейчас, но это нормально — вы можете продолжить, и профиль будет дополняться со временем.', - 'onboarding.contextGathering.coreAlive': 'Ядро доступно — первый запуск может занять минуту.', - 'onboarding.contextGathering.coreAliveProbing': 'Проверка соединения с ядром…', - 'onboarding.contextGathering.coreUnreachable': - 'Ядро не отвечает. Можно продолжить и попробовать позже.', - 'onboarding.contextGathering.stillWorkingDesc': - 'Первый запуск может занять 30–60 секунд, пока мы прогреваем локальную модель и инструменты. Вы можете перейти в чат в любой момент — построение профиля продолжится в фоне.', - 'onboarding.contextGathering.stillWorkingTitle': 'Профиль ещё составляется…', - 'onboarding.contextGathering.title': 'Сбор контекста', - 'openhuman.team_list_teams': 'Список команд', - 'overlay.ariaAttention': 'Сообщение', - 'overlay.ariaCompanion': 'Спутник активен', - 'overlay.ariaOrb': 'Оверлей OpenHuman', - 'overlay.ariaVoiceActive': 'Голосовой ввод активен', - 'overlay.companion.error': 'Ошибка', - 'overlay.companion.listening': 'Слушает…', - 'overlay.companion.pointing': 'Указывает…', - 'overlay.companion.speaking': 'Говорит…', - 'overlay.companion.thinking': 'Думает…', - 'overlay.orbTitle': 'Перетащи для перемещения · Двойной клик для сброса позиции', - 'pages.settings.account.connections': 'Подключения', - 'pages.settings.account.connectionsDesc': 'Описание подключений', - 'pages.settings.account.privacy': 'Конфиденциальность', - 'pages.settings.account.privacyDesc': 'Описание конфиденциальности', - 'pages.settings.account.recoveryPhrase': 'Фраза восстановления', - 'pages.settings.account.recoveryPhraseDesc': 'Описание фразы восстановления', - 'pages.settings.account.team': 'Команда', - 'pages.settings.account.teamDesc': 'Описание команды', - 'pages.settings.accountSection.description': - 'Фраза восстановления, команда, подключения и настройки конфиденциальности.', - 'pages.settings.accountSection.title': 'Аккаунт', - 'pages.settings.ai.llm': 'LLM', - 'pages.settings.ai.llmDesc': 'Описание LLM', - 'pages.settings.ai.voice': 'Голос', - 'pages.settings.ai.voiceDesc': 'Описание голоса', - 'pages.settings.ai.embeddings': 'Эмбеддинги', - 'pages.settings.ai.embeddingsDesc': 'Модель векторного кодирования для извлечения из памяти', - 'pages.settings.aiSection.description': 'Языковые модели, локальный Ollama и голос (STT / TTS).', - 'pages.settings.aiSection.title': 'ИИ', - 'pages.settings.features.desktopCompanion': 'Десктоп-спутник', - 'pages.settings.features.desktopCompanionDesc': - 'Голосовой ассистент с распознаванием экрана — слушает, видит, говорит, указывает', - 'pages.settings.features.messagingChannels': 'Каналы мессенджеров', - 'pages.settings.features.messagingChannelsDesc': 'Описание каналов сообщений', - 'pages.settings.features.notifications': 'Уведомления', - 'pages.settings.features.notificationsDesc': 'Описание уведомлений', - 'pages.settings.features.screenAwareness': 'Слежение за экраном', - 'pages.settings.features.screenAwarenessDesc': 'Описание распознавания экрана', - 'pages.settings.features.tools': 'Инструменты', - 'pages.settings.features.toolsDesc': 'Описание инструментов', - 'pages.settings.featuresSection.description': 'Слежение за экраном, мессенджеры и инструменты.', - 'pages.settings.featuresSection.title': 'Функции', - 'privacy.dataKind.credentials': 'Учётные данные', - 'privacy.dataKind.derived': 'Производные данные', - 'privacy.dataKind.diagnostics': 'Диагностика', - 'privacy.dataKind.metadata': 'Метаданные', - 'privacy.dataKind.raw': 'Необработанные данные', - 'privacy.whatLeaves.link.label': 'Что покидает мой компьютер?', - 'rewards.community.achievementsUnlocked': 'Открыто достижений: {unlocked} из {total}', - 'rewards.community.connectDiscord': 'Подключить Discord', - 'rewards.community.cumulativeTokens': 'Токенов всего', - 'rewards.community.currentStreak': 'Текущая серия', - 'rewards.community.discordLinkedNotInGuild': 'Discord привязан, но не в сервере', - 'rewards.community.discordMember': 'Присоединился к серверу', - 'rewards.community.discordNotLinked': 'Discord не привязан', - 'rewards.community.discordServer': 'Сервер Discord', - 'rewards.community.discordStatusUnavailable': 'Статус Discord недоступен', - 'rewards.community.discordWaiting': 'Ожидание Discord', - 'rewards.community.heroSubtitle': 'Подзаголовок', - 'rewards.community.heroTitle': 'Заголовок', - 'rewards.community.joinDiscord': 'Присоединиться к Discord', - 'rewards.community.loadingRewards': 'Загрузка наград…', - 'rewards.community.locked': 'Разблокировано', - 'rewards.community.retrying': 'Повтор…', - 'rewards.community.rolesAndRewards': 'Роли и награды', - 'rewards.community.streakDays': '{n}', - 'rewards.community.syncPending': 'Синхронизация наград ожидает', - 'rewards.community.syncPendingDesc': 'Ожидание синхронизации', - 'rewards.community.syncUnavailable': 'Синхронизация недоступна', - 'rewards.community.tryAgain': 'Повтор…', - 'rewards.community.unknown': 'Неизвестно', - 'rewards.community.unlocked': 'Разблокировано', - 'rewards.community.yourProgress': 'Твой прогресс', - 'rewards.coupon.colCode': 'Код', - 'rewards.coupon.colRedeemed': 'Активирован', - 'rewards.coupon.colReward': 'Награда', - 'rewards.coupon.colStatus': 'Статус', - 'rewards.coupon.loadingHistory': 'Загрузка истории наград…', - 'rewards.coupon.noCodes': 'Промокоды ещё не использованы.', - 'rewards.coupon.pending': 'Ожидает', - 'rewards.coupon.placeholder': 'Промокод', - 'rewards.coupon.promoCredits': 'Промокредиты', - 'rewards.coupon.recentRedemptions': 'Недавние активации', - 'rewards.coupon.redeemAccepted': - '{code} принят. {amount} разблокируется после выполнения требуемого действия.', - 'rewards.coupon.redeemButton': 'Использовать код', - 'rewards.coupon.redeemSuccess': '{code} применён. {amount} добавлено к вашим кредитам.', - 'rewards.coupon.redeemedCodes': 'Активированные коды', - 'rewards.coupon.redeeming': 'Активация...', - 'rewards.coupon.statusApplied': 'Применён', - 'rewards.coupon.statusPendingAction': 'Ожидает действия', - 'rewards.coupon.statusRedeemed': 'Использован', - 'rewards.coupon.subtitle': 'Подзаголовок', - 'rewards.coupon.title': 'Активировать промокод', - 'rewards.referralSection.activity': 'Реферальная активность', - 'rewards.referralSection.apply': 'Применение…', - 'rewards.referralSection.applying': 'Применение…', - 'rewards.referralSection.colReferredUser': 'Приглашённый пользователь', - 'rewards.referralSection.colReward': 'Награда', - 'rewards.referralSection.colStatus': 'Статус', - 'rewards.referralSection.colUpdated': 'Обновлено', - 'rewards.referralSection.completed': 'Завершено', - 'rewards.referralSection.copyCode': 'Скопировать код', - 'rewards.referralSection.copyFailed': 'Не удалось скопировать', - 'rewards.referralSection.haveCode': 'Есть реферальный код?', - 'rewards.referralSection.haveCodeDesc': 'Есть код', - 'rewards.referralSection.linked': 'Привязан', - 'rewards.referralSection.linkedCode': '(код {code})', - 'rewards.referralSection.loading': 'Загрузка реферальной программы…', - 'rewards.referralSection.noReferrals': 'Рефералов нет', - 'rewards.referralSection.pendingReferrals': 'Ожидающие рефералы', - 'rewards.referralSection.placeholder': 'Реферальный код', - 'rewards.referralSection.share': 'Поделиться', - 'rewards.referralSection.statusCompleted': 'Завершено', - 'rewards.referralSection.statusExpired': 'Истёк срок', - 'rewards.referralSection.statusJoined': 'Вступил', - 'rewards.referralSection.subtitle': 'Подзаголовок', - 'rewards.referralSection.title': 'Приглашай друзей, зарабатывай кредиты', - 'rewards.referralSection.totalEarned': 'Заработано всего', - 'rewards.referralSection.yourCode': 'Твой код', - 'settings.ai.addCloudProvider': 'Добавить облачного провайдера', - 'settings.ai.addProvider': 'Сохранение…', - 'settings.ai.apiKeyFieldLabel': 'Поле API-ключа', - 'settings.ai.apiKeyRequired': 'Вставь свой API-ключ для продолжения.', - 'settings.ai.apiKeyStoredEncrypted': 'API-ключ хранится в зашифрованном виде', - 'settings.ai.apiKeysEncrypted': 'auth-profiles.json', - 'settings.ai.clearStoredKey': 'Очистить сохранённый ключ', - 'settings.ai.connectProvider': 'Подключить провайдера', - 'settings.ai.customRouting': 'Пользовательская маршрутизация', - 'settings.ai.defaultResolvesTo': 'По умолчанию используется', - 'settings.ai.discard': 'Отменить', - 'settings.ai.editProvider': 'Изменить провайдера', - 'settings.ai.llmProviders': 'LLM-провайдеры', - 'settings.ai.llmProvidersDesc': 'Описание провайдеров LLM', - 'settings.ai.localOllama': 'Локально (Ollama)', - 'settings.ai.modelLabel': 'Модель', - 'settings.ai.noCustomProviders': 'Нет пользовательских провайдеров', - 'settings.ai.openAiCompat.authHeaderExample': 'Авторизация: Носитель <ваш ключ>', - 'settings.ai.openAiCompat.authHeaderLabel': 'Заголовок аутентификации', - 'settings.ai.openAiCompat.baseUrlLabel': 'База URL', - 'settings.ai.openAiCompat.baseUrlUnavailable': 'Недоступно', - 'settings.ai.openAiCompat.clearKey': 'Очистить ключ', - 'settings.ai.openAiCompat.description': - "Point local harnesses at this /v1 server to route through the providers configured below. Authentication uses a stable key you set here, not the app's internal core bearer.", - 'settings.ai.openAiCompat.keyConfigured': 'Ключ настроен', - 'settings.ai.openAiCompat.keyRequired': 'Требуется ключ', - 'settings.ai.openAiCompat.rotateKey': 'Повернуть ключ', - 'settings.ai.openAiCompat.setKey': 'Установить ключ', - 'settings.ai.openAiCompat.title': 'OpenAI-совместимая конечная точка', - 'settings.ai.providerLabel': 'Провайдер', - 'settings.ai.routing': 'Маршрутизация', - 'settings.ai.routingCustom': 'Пользовательская маршрутизация', - 'settings.ai.routingDefault': 'По умолчанию', - 'settings.ai.routingDesc': 'Описание маршрутизации', - 'settings.ai.saveChanges': 'Сохранение…', - 'settings.ai.saving': 'Сохранение…', - 'settings.ai.unsavedChange': 'несохранённое изменение', - 'settings.ai.unsavedChanges': 'несохранённые изменения', - 'settings.ai.workloadGroupBackground': 'Фоновые задачи', - 'settings.ai.workloadGroupChat': 'Чат', - 'settings.autocomplete.appFilter.acceptSuggestion': 'Принять предложение', - 'settings.autocomplete.appFilter.contextOverride': 'Переопределение контекста (необязательно)', - 'settings.autocomplete.appFilter.debugFocus': 'Отладка фокуса', - 'settings.autocomplete.appFilter.getSuggestion': 'Получить предложение', - 'settings.autocomplete.appFilter.liveLogs': 'Логи в реальном времени', - 'settings.autocomplete.appFilter.noLogs': ') :', - 'settings.autocomplete.appFilter.refreshStatus': 'Обновление…', - 'settings.autocomplete.appFilter.refreshing': 'Обновление…', - 'settings.autocomplete.appFilter.runtime': 'Среда выполнения', - 'settings.autocomplete.appFilter.test': 'Тест', - 'settings.autocomplete.completionStyle.acceptedCompletion': - 'Сохранено {count} принятое автозаполнение — используется для персонализации будущих подсказок.', - 'settings.autocomplete.completionStyle.acceptedCompletions': - 'Сохранено {count} принятых автозаполнений — используется для персонализации будущих подсказок.', - 'settings.autocomplete.completionStyle.clearHistory': 'Очистка…', - 'settings.autocomplete.completionStyle.clearing': 'Очистка…', - 'settings.autocomplete.completionStyle.debounce': 'Задержка (ms)', - 'settings.autocomplete.completionStyle.enabled': 'Включено', - 'settings.autocomplete.completionStyle.maxChars': 'Макс. символов', - 'settings.autocomplete.completionStyle.noHistory': - 'Принятых предложений пока нет. Принимай предложения с помощью Tab, чтобы начать персонализацию.', - 'settings.autocomplete.completionStyle.overlayTtl': 'Время отображения (ms)', - 'settings.autocomplete.completionStyle.personalizationHistory': 'История персонализации', - 'settings.autocomplete.completionStyle.styleExamples': 'Примеры стиля (по одному на строку)', - 'settings.autocomplete.completionStyle.styleInstructions': 'Инструкции по стилю', - 'settings.billing.autoRecharge.addAmount': 'Добавить эту сумму', - 'settings.billing.autoRecharge.addCard': 'Добавить карту', - 'settings.billing.autoRecharge.amountHint': 'Подсказка по сумме', - 'settings.billing.autoRecharge.defaultCard': 'Карта по умолчанию', - 'settings.billing.autoRecharge.lastRechargeFailed': 'Последнее пополнение не удалось', - 'settings.billing.autoRecharge.lastRecharged': 'Последнее пополнение', - 'settings.billing.autoRecharge.noCards': 'Нет карт', - 'settings.billing.autoRecharge.paymentMethods': 'Способы оплаты', - 'settings.billing.autoRecharge.rechargeInProgress': 'Пополнение в процессе', - 'settings.billing.autoRecharge.rechargeWhen': 'Пополнять, когда баланс ниже', - 'settings.billing.autoRecharge.saveSettings': 'Сохранение…', - 'settings.billing.autoRecharge.saving': 'Сохранение…', - 'settings.billing.autoRecharge.setDefault': ':', - 'settings.billing.autoRecharge.subtitle': 'Подзаголовок', - 'settings.billing.autoRecharge.title': 'Включить автопополнение', - 'settings.billing.autoRecharge.toggleAriaLabel': 'Переключить автопополнение', - 'settings.billing.autoRecharge.weeklyLimit': 'Еженедельный лимит расходов', - 'settings.billing.history.desc': 'Описание', - 'settings.billing.history.empty': 'Пусто', - 'settings.billing.history.openPortal': 'Открыть портал', - 'settings.billing.history.posted': 'Проведено', - 'settings.billing.history.title': 'Заголовок', - 'settings.billing.inferenceBudget.cycleEnds': 'Цикл заканчивается', - 'settings.billing.inferenceBudget.exhausted': 'Исчерпан', - 'settings.billing.inferenceBudget.loadError': 'Ошибка загрузки', - 'settings.billing.inferenceBudget.noBudgetDesc': 'Бюджет не задан', - 'settings.billing.inferenceBudget.noRecurringBudget': 'Нет регулярного бюджета', - 'settings.billing.inferenceBudget.remaining': 'Осталось', - 'settings.billing.inferenceBudget.tenHourCap': 'Ограничение 10 часов', - 'settings.billing.inferenceBudget.title': 'Заголовок', - 'settings.billing.payAsYouGo.available': 'Доступно', - 'settings.billing.payAsYouGo.chargeCustomAmount': 'Открытие…', - 'settings.billing.payAsYouGo.chooseTopUpDesc': 'Описание выбора пополнения', - 'settings.billing.payAsYouGo.chooseTopUpTitle': 'Выберите сумму пополнения', - 'settings.billing.payAsYouGo.creditBalanceDesc': 'Описание баланса кредитов', - 'settings.billing.payAsYouGo.creditBalanceTitle': 'Баланс кредитов', - 'settings.billing.payAsYouGo.customAmount': 'Произвольная сумма', - 'settings.billing.payAsYouGo.enterAmount': 'Введи сумму', - 'settings.billing.payAsYouGo.opening': 'Открытие', - 'settings.billing.payAsYouGo.promotionalCredits': 'Промокредиты', - 'settings.billing.payAsYouGo.topUpBalance': 'Пополнение баланса', - 'settings.billing.payAsYouGo.topUpCredits': 'Пополнить кредиты', - 'settings.billing.payAsYouGo.unableToLoad': 'Не удалось загрузить баланс.', - 'settings.billing.subscription.annual': 'Годовая', - 'settings.billing.subscription.billedAnnually': 'Оплата раз в год', - 'settings.billing.subscription.chooseSubtitle': 'Подзаголовок выбора', - 'settings.billing.subscription.chooseTitle': 'Заголовок выбора', - 'settings.billing.subscription.cryptoDesc': 'Описание крипто', - 'settings.billing.subscription.cryptoQuestion': 'Вопрос о крипто', - 'settings.billing.subscription.current': 'Текущий', - 'settings.billing.subscription.currentPlan': 'Текущий план', - 'settings.billing.subscription.monthly': 'Ежемесячная', - 'settings.billing.subscription.paymentConfirmed': 'Оплата подтверждена', - 'settings.billing.subscription.perMonth': 'В месяц', - 'settings.billing.subscription.popular': 'Популярное', - 'pages.settings.account.migration': 'Импорт из другого ассистента', - 'pages.settings.account.migrationDesc': - 'Перенесите память и заметки из OpenClaw (а вскоре и Hermes) в это рабочее пространство.', - 'composio.connect.scope.read': 'Чтение', - 'composio.connect.scope.readHint': 'Разрешить агенту читать данные из этого соединения.', - 'composio.connect.scope.write': 'Запись', - 'composio.connect.scope.writeHint': - 'Разрешить агенту создавать или изменять данные через это соединение.', - 'composio.connect.scope.admin': 'Администратор', - 'composio.connect.scope.adminHint': - 'Разрешить агенту управлять настройками, разрешениями или деструктивными действиями.', - 'pages.settings.composioSection.title': 'Composio', - 'pages.settings.composioSection.description': - 'Маршрутизация, триггеры и история интеграций на базе Composio.', - 'pages.settings.account.walletBalances': 'Wallet Balances', - 'pages.settings.account.walletBalancesDesc': 'View multi-chain balances for your local wallet', - 'walletBalances.title': 'Wallet Balances', - 'walletBalances.refresh': 'Refresh', - 'walletBalances.loading': 'Loading balances…', - 'walletBalances.retry': 'Retry', - 'walletBalances.emptyState': 'No wallet accounts yet — set up a wallet in Recovery Phrase.', - 'walletBalances.copyAddress': 'Copy address', - 'walletBalances.providerMissing': 'provider unavailable', - 'walletBalances.rawBalance': 'Raw: {raw}', - 'walletBalances.errorGeneric': - 'Unable to load wallet balances. Set up your wallet in Recovery Phrase and try again.', - 'conversations.taskKanban.approval.default': 'Default', - 'conversations.taskKanban.approval.notRequired': 'Not required', - 'conversations.taskKanban.approval.notRequiredBadge': 'no approval', - 'conversations.taskKanban.approval.required': 'Required', - 'conversations.taskKanban.approval.requiredBadge': 'approval', - 'conversations.taskKanban.approval.requiredBeforeExecution': 'Required before execution', - 'conversations.taskKanban.briefButton': 'Task brief', - 'conversations.taskKanban.briefTitle': 'Task brief', - 'conversations.taskKanban.closeBrief': 'Close task brief', - 'conversations.taskKanban.field.acceptanceCriteria': 'Acceptance criteria', - 'conversations.taskKanban.field.allowedTools': 'Allowed tools', - 'conversations.taskKanban.field.approval': 'Approval', - 'conversations.taskKanban.field.assignedAgent': 'Assigned agent', - 'conversations.taskKanban.field.blocker': 'Blocker', - 'conversations.taskKanban.field.evidence': 'Evidence', - 'conversations.taskKanban.field.notes': 'Notes', - 'conversations.taskKanban.field.objective': 'Objective', - 'conversations.taskKanban.field.plan': 'Plan', - 'conversations.taskKanban.field.status': 'Status', - 'conversations.taskKanban.field.title': 'Title', - 'conversations.taskKanban.saveChanges': 'Save changes', - 'conversations.taskKanban.deleteCard': 'Delete', - 'conversations.taskKanban.updateFailed': 'Could not update task; changes were not saved.', -}; - -export default ru4; diff --git a/app/src/lib/i18n/chunks/ru-5.ts b/app/src/lib/i18n/chunks/ru-5.ts deleted file mode 100644 index 4871645a5..000000000 --- a/app/src/lib/i18n/chunks/ru-5.ts +++ /dev/null @@ -1,1025 +0,0 @@ -import type { TranslationMap } from '../types'; - -// Russian (Русский) chunk 5/5. Translated from chunks/en-5.ts. -const ru5: TranslationMap = { - 'settings.billing.subscription.save': '{pct}', - 'settings.billing.subscription.upgrade': 'Улучшить', - 'settings.billing.subscription.waiting': 'Ожидание', - 'settings.billing.subscription.waitingPayment': 'Ожидание оплаты', - 'settings.composio.apiKeyDesc': 'API-ключ Composio сейчас сохранён на этом устройстве.', - 'settings.composio.apiKeyLabel': 'API-ключ Composio', - 'settings.composio.apiKeyStored': 'API-ключ сохранён', - 'settings.composio.apiKeyStoredPlaceholder': '••••••••••••••••', - 'settings.composio.clearedToBackend': 'Переключено в режим Backend', - 'settings.composio.confirmItem1': 'Аккаунт на app.composio.dev с API-ключом', - 'settings.composio.confirmItem2': - 'Заново привязать каждую интеграцию через ваш личный аккаунт Composio', - 'settings.composio.confirmItem3': - 'Примечание: триггеры Composio (вебхуки в реальном времени) пока не работают в прямом режиме — только синхронные вызовы инструментов', - 'settings.composio.confirmNeedItems': 'Вам понадобится:', - 'settings.composio.confirmSwitch': 'Понятно, переключить на «Прямой»', - 'settings.composio.confirmTitle': '⚠️ Переключение на прямой режим', - 'settings.composio.confirmWarning': - 'Ваши существующие интеграции (Gmail, Slack, GitHub и т. д., привязанные через OpenHuman) не будут видны — они находятся в управляемом OpenHuman тенанте Composio.', - 'settings.composio.intro': - 'Composio интегрирует 250+ внешних приложений как инструменты, которые может вызывать ваш агент. Выберите способ маршрутизации этих вызовов.', - 'settings.composio.modeDirect': 'Прямой (собственный API-ключ)', - 'settings.composio.modeDirectDesc': - 'Вызовы идут напрямую на backend.composio.dev. Суверенно и подходит для офлайн. Выполнение инструментов работает синхронно; вебхуки триггеров в реальном времени пока не маршрутизируются в прямом режиме (см. отдельную задачу).', - 'settings.composio.modeManaged': 'Управляемый (OpenHuman управляет за тебя)', - 'settings.composio.modeManagedDesc': - 'OpenHuman проксирует вызовы инструментов через наш бэкенд (рекомендуется). Авторизация брокеруется; вам не нужно вставлять API-ключ Composio. Вебхуки полностью маршрутизируются.', - 'settings.composio.routingMode': 'Режим маршрутизации', - 'settings.composio.saveErrorNoKey': - 'Не удалось сохранить. Прямой режим требует непустой API-ключ.', - 'settings.composio.saving': 'Сохранение…', - 'settings.composio.switching': 'Переключение…', - 'settings.cron.jobs.desc': 'Описание', - 'settings.cron.jobs.empty': 'Заданий по расписанию не найдено.', - 'settings.cron.jobs.lastStatus': 'Последний статус', - 'settings.cron.jobs.loading': 'Загрузка заданий...', - 'settings.cron.jobs.loadingRuns': 'Загрузка запусков', - 'settings.cron.jobs.nextRun': 'Следующий запуск', - 'settings.cron.jobs.pause': 'Приостановить', - 'settings.cron.jobs.paused': 'Приостановлено', - 'settings.cron.jobs.recentRuns': 'Последние запуски', - 'settings.cron.jobs.removing': 'Удаление', - 'settings.cron.jobs.resume': 'Возобновить', - 'settings.cron.jobs.runningNow': 'Выполняется сейчас', - 'settings.cron.jobs.saving': 'Сохранение…', - 'settings.cron.jobs.schedule': 'Расписание', - 'settings.cron.jobs.title': 'Задания ядра по расписанию', - 'settings.cron.jobs.viewRuns': 'Посмотреть запуски', - 'settings.localModel.deviceCapability.active': 'Активно', - 'settings.localModel.deviceCapability.appliedTier': 'Применённый уровень', - 'settings.localModel.deviceCapability.applying': 'Применение', - 'settings.localModel.deviceCapability.cores': '{count}', - 'settings.localModel.deviceCapability.couldNotLoadPresets': 'Не удалось загрузить пресеты', - 'settings.localModel.deviceCapability.cpu': 'CPU', - 'settings.localModel.deviceCapability.customModelIds': 'Пользовательские ID моделей', - 'settings.localModel.deviceCapability.detected': 'Обнаружено', - 'settings.localModel.deviceCapability.disabled': 'Отключено', - 'settings.localModel.deviceCapability.disabledDesc': 'Отключено', - 'settings.localModel.deviceCapability.downloadingModels': '(загрузка моделей)', - 'settings.localModel.deviceCapability.downloadingSetupDesc': - 'Загрузка установщика OllamaSetup (~2 ГБ) и распаковка. При первой установке это может занять минуту.', - 'settings.localModel.deviceCapability.failedToApplyPreset': 'Не удалось применить пресет', - 'settings.localModel.deviceCapability.gpu': 'GPU', - 'settings.localModel.deviceCapability.installFailed': 'Установка Ollama не удалась', - 'settings.localModel.deviceCapability.installFailedDesc': - 'Установщик завершил работу до того, как Ollama стала готова к использованию. Нажми «Повторить» или установи вручную с ollama.com.', - 'settings.localModel.deviceCapability.installFirst': 'Сначала запустите Ollama.', - 'settings.localModel.deviceCapability.installFirstDesc': - 'Локальные уровни зависят от внешне управляемого эндпоинта Ollama. Запустите его самостоятельно, загрузите нужные модели и используйте «Отключено (облачный fallback)», пока среда выполнения недоступна.', - 'settings.localModel.deviceCapability.installOllamaFirst': - 'Сначала запустите Ollama, чтобы использовать этот уровень', - 'settings.localModel.deviceCapability.installingOllama': 'Установка Ollama', - 'settings.localModel.deviceCapability.loadingDeviceInfo': 'Загрузка информации об устройстве', - 'settings.localModel.deviceCapability.localAiDisabled': - 'Локальный AI отключён — используется облачный резерв.', - 'settings.localModel.deviceCapability.modelTier': 'Уровень модели', - 'settings.localModel.deviceCapability.needsOllama': 'Требуется Ollama', - 'settings.localModel.deviceCapability.notDetected': 'Не обнаружено', - 'settings.localModel.deviceCapability.ram': 'RAM', - 'settings.localModel.deviceCapability.recommended': 'Рекомендуется', - 'settings.localModel.deviceCapability.retryInstall': 'Повтор…', - 'settings.localModel.deviceCapability.retrying': 'Повтор…', - 'settings.localModel.deviceCapability.starting': 'Запуск…', - 'settings.localModel.download.audioPathPlaceholder': 'Абсолютный путь к аудиофайлу', - 'settings.localModel.download.capabilityAssets': 'Ресурсы возможностей', - 'settings.localModel.download.downloading': 'Загрузка...', - 'settings.localModel.download.embeddingPlaceholder': 'По одной строке на вход...', - 'settings.localModel.download.noThinkMode': 'Без режима обдумывания', - 'settings.localModel.download.promptPlaceholder': - 'Введи любой запрос для тестирования локальной модели...', - 'settings.localModel.download.quantizationPref': 'Предпочтения квантизации', - 'settings.localModel.download.runEmbeddingTest': 'Выполнение...', - 'settings.localModel.download.runPromptTest': 'Запустить тест промпта', - 'settings.localModel.download.runSummaryTest': 'Запустить тест сводки', - 'settings.localModel.download.runTranscriptionTest': 'Выполнение...', - 'settings.localModel.download.runTtsTest': 'Выполнение...', - 'settings.localModel.download.runVisionTest': 'Выполнение...', - 'settings.localModel.download.running': 'Выполнение...', - 'settings.localModel.download.runningPrompt': 'Выполнение запроса', - 'settings.localModel.download.summarizePlaceholder': - 'Вставь текст для суммаризации локальной моделью...', - 'settings.localModel.download.testCustomPrompt': 'Тест произвольного запроса', - 'settings.localModel.download.testEmbeddings': 'Тест векторных вложений', - 'settings.localModel.download.testSummarization': 'Тест суммаризации', - 'settings.localModel.download.testVisionPrompt': 'Тест визуального запроса', - 'settings.localModel.download.testVoiceInput': 'Тест голосового ввода (STT)', - 'settings.localModel.download.testVoiceOutput': 'Тест голосового вывода (TTS)', - 'settings.localModel.download.ttsOutputPlaceholder': 'Необязательный путь к выходному WAV-файлу', - 'settings.localModel.download.ttsPlaceholder': 'Введи текст для синтеза...', - 'settings.localModel.download.visionImagePlaceholder': - 'По одной ссылке на изображение на строку (data URI, URL или локальный маркер пути)', - 'settings.localModel.download.visionPromptPlaceholder': 'Введи запрос для визуальной модели...', - 'settings.localModel.status.allChecksPassed': 'Все проверки пройдены', - 'settings.localModel.status.artifact': 'Артефакт', - 'settings.localModel.status.backend': 'Бэкенд', - 'settings.localModel.status.binary': 'Бинарный файл', - 'settings.localModel.status.bootstrapResume': 'Инициализация / возобновление', - 'settings.localModel.status.checking': 'Проверка...', - 'settings.localModel.status.checkingOllama': 'Проверка Ollama', - 'settings.localModel.status.customLocation': 'Пользовательский путь', - 'settings.localModel.status.customLocationDesc': 'Описание пользовательского расположения', - 'settings.localModel.status.diagnosticsHint': - 'Нажмите «Запустить диагностику», чтобы убедиться, что Ollama запущен и модели установлены.', - 'settings.localModel.status.downloadingUnknown': 'Загрузка (размер неизвестен)', - 'settings.localModel.status.eta': 'ETA', - 'settings.localModel.status.expectedModels': 'Ожидаемые модели', - 'settings.localModel.status.forceRebootstrap': 'Принудительная переинициализация', - 'settings.localModel.status.generationTps': 'Скорость генерации (TPS)', - 'settings.localModel.status.hideErrorDetails': 'Скрыть детали ошибки', - 'settings.localModel.status.installManually': 'Установить вручную', - 'settings.localModel.status.installManuallyFrom': 'Установить вручную с', - 'settings.localModel.status.installOllama': 'Запуск…', - 'settings.localModel.status.installedModels': 'Установленные модели', - 'settings.localModel.status.installing': 'Установка...', - 'settings.localModel.status.installingOllama': 'Установка среды Ollama...', - 'settings.localModel.status.issues': 'Проблемы', - 'settings.localModel.status.issuesFound': 'Найдено проблем: {count}', - 'settings.localModel.status.lastLatency': 'Последняя задержка', - 'settings.localModel.status.model': 'Модель', - 'settings.localModel.status.notFound': 'Не найдено', - 'settings.localModel.status.notRunning': 'Не запущено', - 'settings.localModel.status.ollamaBinaryPath': 'Путь к бинарному файлу Ollama', - 'settings.localModel.status.ollamaDiagnostics': 'Диагностика Ollama', - 'settings.localModel.status.ollamaNotInstalled': 'Среда выполнения Ollama недоступна', - 'settings.localModel.status.ollamaNotInstalledDesc': - 'OpenHuman теперь рассматривает Ollama как внешнюю среду инференса. Запустите собственный сервер Ollama, загрузите нужные модели и направьте маршрутизацию нагрузки на него.', - 'settings.localModel.status.progress': 'Прогресс', - 'settings.localModel.status.provider': 'Провайдер', - 'settings.localModel.status.retryBootstrap': 'Повторить Bootstrap', - 'settings.localModel.status.runDiagnostics': 'Проверка...', - 'settings.localModel.status.running': 'Работает', - 'settings.localModel.status.runningExternalProcess': 'Запущено через внешний процесс', - 'settings.localModel.status.runtimeStatus': 'Статус среды выполнения', - 'settings.localModel.status.server': 'Сервер', - 'settings.localModel.status.setPath': 'Установка...', - 'settings.localModel.status.setting': 'Установка...', - 'settings.localModel.status.showErrorDetails': 'Скрыть детали ошибки', - 'settings.localModel.status.showInstallErrorDetails': 'Скрыть детали ошибки', - 'settings.localModel.status.suggestedFixes': 'Предлагаемые исправления', - 'settings.localModel.status.thenSetPath': 'Затем укажи путь', - 'settings.localModel.status.triggering': 'Запуск...', - 'settings.localModel.status.unavailable': 'Недоступно', - 'settings.localModel.status.working': 'Работаю...', - 'settings.developerMenu.ai.title': 'Конфигурация ИИ', - 'settings.developerMenu.ai.desc': - 'Облачные провайдеры, локальные модели Ollama и маршрутизация по типам нагрузки', - 'settings.developerMenu.screenAwareness.title': 'Осведомленность об экране', - 'settings.developerMenu.screenAwareness.desc': - 'Разрешения на захват экрана, политика мониторинга и управление сессиями', - 'settings.developerMenu.messagingChannels.title': 'Каналы сообщений', - 'settings.developerMenu.messagingChannels.desc': - 'Настройка режимов аутентификации Telegram/Discord и маршрутизации канала по умолчанию', - 'settings.developerMenu.tools.title': 'Инструменты', - 'settings.developerMenu.tools.desc': - 'Включайте или отключайте возможности, которые OpenHuman может использовать от вашего имени', - 'settings.developerMenu.agentChat.title': 'Чат агента', - 'settings.developerMenu.agentChat.desc': - 'Тестируйте разговор агента с переопределениями модели и температуры', - 'settings.developerMenu.devWorkflow.title': 'Dev Workflow', - 'settings.developerMenu.devWorkflow.desc': - 'Autonomous agent that picks your GitHub issues and raises PRs on a schedule', - 'settings.developerMenu.devWorkflow.panelDesc': - 'Configure an autonomous developer agent that picks GitHub issues assigned to you and raises pull requests automatically on a schedule.', - 'settings.devWorkflow.githubRepository': 'GitHub Repository', - 'settings.devWorkflow.loadingRepositories': 'Loading repositories...', - 'settings.devWorkflow.selectRepository': 'Select a repository', - 'settings.devWorkflow.privateTag': '(private)', - 'settings.devWorkflow.detectingForkInfo': 'Detecting fork info...', - 'settings.devWorkflow.forkDetected': 'Fork detected', - 'settings.devWorkflow.upstream': 'Upstream:', - 'settings.devWorkflow.forkPrNote': 'PRs will be raised against the upstream repository.', - 'settings.devWorkflow.notForkNote': - 'Not a fork. PRs will be raised against this repository directly.', - 'settings.devWorkflow.targetBranch': 'Target Branch', - 'settings.devWorkflow.targetBranchNote': 'PRs will be raised against this branch', - 'settings.devWorkflow.loadingBranches': 'Loading branches...', - 'settings.devWorkflow.runFrequency': 'Run Frequency', - 'settings.devWorkflow.runFrequencyNote': - 'How often the agent should check for issues and raise PRs.', - 'settings.devWorkflow.updateConfiguration': 'Update Configuration', - 'settings.devWorkflow.saveConfiguration': 'Save Configuration', - 'settings.devWorkflow.remove': 'Remove', - 'settings.devWorkflow.saved': 'Saved', - 'settings.devWorkflow.activeConfiguration': 'Active Configuration', - 'settings.devWorkflow.activeConfigRepository': 'Repository:', - 'settings.devWorkflow.activeConfigUpstream': 'Upstream:', - 'settings.devWorkflow.activeConfigTargetBranch': 'Target branch:', - 'settings.devWorkflow.activeConfigSchedule': 'Schedule:', - 'settings.devWorkflow.enabled': 'Enabled', - 'settings.devWorkflow.paused': 'Paused', - 'settings.skillsRunner.scheduleEnabled': 'Enabled', - 'settings.skillsRunner.scheduleDisabled': 'Paused', - 'settings.skillsRunner.scheduleToggleAria': 'Toggle schedule enabled', - 'settings.skillsRunner.schedule.history': 'History', - 'settings.skillsRunner.schedule.historyLoading': 'Loading history\u2026', - 'settings.skillsRunner.schedule.historyEmpty': 'No runs yet for this schedule.', - 'settings.skillsRunner.schedule.historyNoOutput': 'No output captured.', - 'settings.skillsRunner.schedule.active': 'Active', - 'settings.skillsRunner.schedule.lastRunLabel': 'last:', - 'settings.devWorkflow.nextRun': 'Next run', - 'settings.devWorkflow.lastRun': 'Last run', - 'settings.devWorkflow.runNow': 'Run now', - 'settings.devWorkflow.running': 'Running…', - 'settings.devWorkflow.recentRuns': 'Recent runs', - 'settings.devWorkflow.cronSaveError': 'Failed to save configuration', - 'settings.devWorkflow.lastOutput': 'Last output', - 'settings.devWorkflow.noOutput': 'No output captured', - 'settings.devWorkflow.runningStatus': - 'Agent is running — picking an issue and working on a fix...', - 'settings.devWorkflow.errorNotConnected': - 'GitHub is not connected. Please connect GitHub via Settings > Advanced > Composio first.', - 'settings.devWorkflow.errorToolNotEnabled': - 'GITHUB_LIST_REPOSITORIES_FOR_THE_AUTHENTICATED_USER tool is not enabled on this backend. Please ask your admin to enable it in the Composio integration (backend#842).', - 'settings.devWorkflow.errorNotAuthenticated': 'Not authenticated. Please sign in first.', - 'settings.devWorkflow.errorNoRepositories': 'No repositories found for this GitHub account.', - 'settings.devWorkflow.schedule.every30min': 'Every 30 minutes', - 'settings.devWorkflow.schedule.everyHour': 'Every hour', - 'settings.devWorkflow.schedule.every2hours': 'Every 2 hours', - 'settings.devWorkflow.schedule.every6hours': 'Every 6 hours', - 'settings.devWorkflow.schedule.onceDaily': 'Once daily (9 AM)', - 'settings.developerMenu.cronJobs.title': 'Задачи cron', - 'settings.developerMenu.cronJobs.desc': - 'Просмотр и настройка запланированных задач для runtime-навыков', - 'settings.developerMenu.localModelDebug.title': 'Отладка локальной модели', - 'settings.developerMenu.localModelDebug.desc': - 'Конфигурация Ollama, загрузка ресурсов, тесты модели и диагностика', - 'settings.developerMenu.webhooks.title': 'Вебхуки', - 'settings.developerMenu.webhooks.desc': - 'Проверяйте регистрации runtime-вебхуков и журналы захваченных запросов', - 'settings.developerMenu.eventLog.title': 'Event Log', - 'settings.developerMenu.eventLog.desc': - 'Live colour-coded stream of all agent, tool, and system events', - 'settings.developerMenu.eventLog.allTypes': 'All types', - 'settings.developerMenu.eventLog.filterAgent': 'Filter...', - 'settings.developerMenu.eventLog.download': 'Download', - 'settings.developerMenu.eventLog.events': 'events', - 'settings.developerMenu.eventLog.live': 'Live', - 'settings.developerMenu.eventLog.disconnected': 'Disconnected', - 'settings.developerMenu.eventLog.waiting': 'Waiting for events...', - 'settings.developerMenu.eventLog.notConnected': 'Not connected to core', - 'settings.developerMenu.eventLog.jumpToLatest': 'Jump to latest', - 'settings.developerMenu.eventLog.badge.tool': 'TOOL', - 'settings.developerMenu.eventLog.badge.agent': 'AGENT', - 'settings.developerMenu.eventLog.badge.info': 'INFO', - 'settings.developerMenu.eventLog.badge.mem': 'MEM', - 'settings.developerMenu.eventLog.badge.chan': 'CHAN', - 'settings.developerMenu.eventLog.badge.cron': 'CRON', - 'settings.developerMenu.eventLog.badge.hook': 'HOOK', - 'settings.developerMenu.eventLog.badge.warn': 'WARN', - 'settings.developerMenu.eventLog.badge.skill': 'SKILL', - 'settings.developerMenu.eventLog.badge.comp': 'COMP', - 'settings.developerMenu.eventLog.badge.mcp': 'MCP', - 'settings.developerMenu.intelligence.title': 'Интеллект', - 'settings.developerMenu.intelligence.desc': - 'Рабочая область памяти, подсознательный движок, сны и настройки', - 'settings.developerMenu.notificationRouting.title': 'Маршрутизация уведомлений', - 'settings.developerMenu.notificationRouting.desc': - 'Оценка важности ИИ и эскалация оркестратору для интеграционных оповещений', - 'settings.developerMenu.composeioTriggers.title': 'Триггеры ComposeIO', - 'settings.developerMenu.composeioTriggers.desc': 'Просмотр истории и архива триггеров ComposeIO', - 'settings.developerMenu.composioRouting.title': 'Маршрутизация Composio (прямой режим)', - 'settings.developerMenu.composioRouting.desc': - 'Используйте собственный API-ключ Composio и направляйте вызовы напрямую в backend.composio.dev', - 'settings.developerMenu.integrationTriggers.title': 'Триггеры интеграций', - 'settings.developerMenu.integrationTriggers.desc': - 'Настройка параметров AI-триажа для триггеров интеграций Composio', - 'settings.appearance.menuDesc': 'Выберите светлую, темную или системную тему', - 'settings.mascot.active': 'Активно', - 'settings.mascot.characterDesc': 'Описание персонажа', - 'settings.mascot.characterHeading': 'Персонаж', - // TODO: translate custom GIF mascot strings. - 'settings.mascot.customGifError': - 'Введите HTTPS .gif URL, петлевой путь HTTP .gif URL, file:// .gif URL или локальный путь .gif.', - 'settings.mascot.customGifHeading': 'Пользовательский аватар GIF', - 'settings.mascot.customGifLabel': 'Пользовательский аватар GIF URL', - 'settings.mascot.colorDesc': 'Описание цвета', - 'settings.mascot.colorHeading': 'Цвет', - 'settings.mascot.loadingLibrary': 'Загрузка библиотеки OpenHuman…', - 'settings.mascot.localDefault': 'Локальный OpenHuman (по умолчанию)', - 'settings.mascot.menuTitle': 'Маскот', - 'settings.mascot.menuDesc': 'Выберите цвет маскота, используемый во всем приложении', - 'settings.mascot.noCharacters': 'Персонажи OpenHuman пока недоступны', - 'settings.mascot.noColorVariants': 'Нет цветовых вариантов', - 'settings.mascot.voice.current': 'текущий', - 'settings.mascot.voice.customDesc': - 'Идентификаторы голосов можно найти на api.elevenlabs.io/v1/voices или в вашей панели ElevenLabs. Сохраняется только идентификатор — ваш API-ключ остаётся на бэкенде.', - 'settings.mascot.voice.customHeading': 'Пользовательский идентификатор голоса', - 'settings.mascot.voice.customOption': 'Другое (вставить идентификатор голоса)…', - 'settings.mascot.voice.desc': - 'Выберите голос ElevenLabs, который маскот использует для устных ответов. Фильтруйте по полу, выбирайте из подобранного списка, вставьте свой идентификатор или позвольте приложению выбрать голос, соответствующий языку интерфейса.', - 'settings.mascot.voice.genderFemale': 'Женский', - 'settings.mascot.voice.genderHeading': 'Пол голоса', - 'settings.mascot.voice.genderMale': 'Мужской', - 'settings.mascot.voice.heading': 'Голос', - 'settings.mascot.voice.preset': 'Предустановка голоса', - 'settings.mascot.voice.presetHeading': 'Предустановка голоса', - 'settings.mascot.voice.preview': 'Предпросмотр голоса', - 'settings.mascot.voice.previewError': 'Не удалось воспроизвести предпросмотр голоса', - 'settings.mascot.voice.previewing': 'Воспроизведение предпросмотра…', - 'settings.mascot.voice.reset': 'Сбросить к значениям по умолчанию', - 'settings.mascot.voice.useLocaleDefault': 'Соответствовать языку приложения', - 'settings.mascot.voice.useLocaleDefaultDesc': - 'Автоматически выбрать голос для текущего языка интерфейса.', - 'settings.memoryWindow.balanced.badge': 'Рекомендуется', - 'settings.memoryWindow.balanced.hint': - 'Разумное значение по умолчанию — хорошая непрерывность без лишних трат токенов на каждом запуске.', - 'settings.memoryWindow.balanced.label': 'Сбалансированный', - 'settings.memoryWindow.description': - 'Сколько запомненного контекста OpenHuman добавляет в каждый новый запуск агента. Более широкие окна дают ощущение лучшей памяти о прошлых разговорах, но используют больше токенов — и стоят дороже — на каждом запуске.', - 'settings.memoryWindow.extended.badge': 'Больше контекста', - 'settings.memoryWindow.extended.hint': - 'Больше долгосрочной памяти на каждый запуск. Выше расход токенов за ход.', - 'settings.memoryWindow.extended.label': 'Расширенный', - 'settings.memoryWindow.maximum.badge': 'Самый дорогой', - 'settings.memoryWindow.maximum.hint': - 'Самое большое безопасное окно. Лучшая непрерывность, заметно выше расход токенов на каждом запуске.', - 'settings.memoryWindow.maximum.label': 'Максимум', - 'settings.memoryWindow.minimal.badge': 'Самый дешёвый', - 'settings.memoryWindow.minimal.hint': - 'Самое маленькое окно памяти. Дешевле, быстрее, минимальная непрерывность между запусками.', - 'settings.memoryWindow.minimal.label': 'Минимальный', - 'settings.memoryWindow.title': 'Окно долгосрочной памяти', - 'settings.screenIntel.permissions.accessibility': 'Доступность', - 'settings.screenIntel.permissions.grantHint': 'Подсказка по предоставлению', - 'settings.screenIntel.permissions.inputMonitoring': 'Мониторинг ввода', - 'settings.screenIntel.permissions.macosAppliesPrivacy': 'macOS применяет конфиденциальность', - 'settings.screenIntel.permissions.openInputMonitoring': 'Запрос…', - 'settings.screenIntel.permissions.refreshStatus': 'Обновление…', - 'settings.screenIntel.permissions.refreshing': 'Обновление…', - 'settings.screenIntel.permissions.requestAccessibility': 'Запрос…', - 'settings.screenIntel.permissions.requestScreenRecording': 'Запрос…', - 'settings.screenIntel.permissions.requesting': 'Запрос…', - 'settings.screenIntel.permissions.restartRefresh': 'Перезапуск ядра…', - 'settings.screenIntel.permissions.restartingCore': 'Перезапуск ядра…', - 'settings.screenIntel.permissions.screenRecording': 'Запись экрана', - 'settings.screenIntel.permissions.title': 'Разрешения', - 'skills.card.moreActions': 'Ещё действия', - 'skills.create.allowedTools': 'Разрешённые инструменты', - 'skills.create.author': 'Автор', - 'skills.create.authorPlaceholder': 'Твоё имя', - 'skills.create.commaSeparated': '(через запятую)', - 'skills.create.createBtn': 'Создать навык', - 'skills.create.createError': 'Не удалось создать навык', - 'skills.create.creating': 'Создание…', - 'skills.create.description': 'Описание', - 'skills.create.descriptionPlaceholder': 'Что делает этот навык?', - 'skills.create.optional': '(optional)', - 'skills.create.inputs.heading': 'Inputs', - 'skills.create.inputs.help': - 'Declare parameters the skill needs. The Skills Runner will render a form for these at run time.', - 'skills.create.inputs.add': 'Add input', - 'skills.create.inputs.row.name': 'Input name', - 'skills.create.inputs.row.namePlaceholder': 'e.g. repo', - 'skills.create.inputs.row.nameError': - 'Letters, digits, underscores, and dashes only; must start with a letter.', - 'skills.create.inputs.row.description': 'Input description', - 'skills.create.inputs.row.descriptionPlaceholder': 'What goes in this field?', - 'skills.create.inputs.row.type': 'Type', - 'skills.create.inputs.row.required': 'Required', - 'skills.create.inputs.row.remove': 'Remove input', - 'skills.create.inputs.type.string': 'Text', - 'skills.create.inputs.type.integer': 'Number', - 'skills.create.inputs.type.boolean': 'Yes / No', - 'skills.create.license': 'Лицензия', - 'skills.create.name': 'Название', - 'skills.create.namePlaceholder': 'напр. Trade Journal', - 'skills.create.scope': 'Область', - 'skills.create.scopeProjectHint': '/.openhuman/skills/', - 'skills.create.scopeUserHint': - 'Записывается в ~/.openhuman/skills//SKILL.md — доступно во всех рабочих пространствах.', - 'skills.create.slugLabel': 'Slug', - 'skills.create.subtitle': 'SKILL.md', - 'skills.create.tags': 'Теги', - 'skills.create.title': 'Новый навык', - 'skills.detail.allowedTools': 'Разрешённые инструменты', - 'skills.detail.author': 'Автор', - 'skills.detail.bundledResources': 'Встроенные ресурсы', - 'skills.detail.closeAriaLabel': 'Закрыть детали навыка', - 'skills.detail.location': 'Расположение', - 'skills.detail.noBundledResources': 'Встроенных ресурсов нет.', - 'skills.detail.tags': 'Теги', - 'skills.detail.warnings': 'Предупреждения', - 'skills.install.fetchLog': 'Получить лог', - 'skills.install.installBtn': 'Установка…', - 'skills.install.installComplete': 'Установка завершена', - 'skills.install.installing': 'Установка…', - 'skills.install.parseWarnings': 'Предупреждения парсинга', - 'skills.install.rawError': 'Необработанная ошибка', - 'skills.install.timeoutHint': '(секунды, необязательно)', - 'skills.install.timeoutLabel': 'Таймаут', - 'skills.install.title': 'Установить навык по URL', - 'skills.install.urlLabel': 'URL навыка', - 'skills.meetingBots.bannerDesc': 'Описание баннера', - 'skills.meetingBots.bannerTitle': 'Заголовок баннера', - 'skills.meetingBots.busyTitle': 'OpenHuman занят', - 'skills.meetingBots.comingSoon': 'Скоро', - 'skills.meetingBots.couldNotStartTitle': 'Не удалось запустить OpenHuman', - 'skills.meetingBots.displayName': 'Отображаемое имя', - 'skills.meetingBots.failedToStart': 'Не удалось запустить OpenHuman.', - 'skills.meetingBots.joiningMessage': 'Он должен появиться как участник через несколько секунд.', - 'skills.meetingBots.joiningTitle': 'OpenHuman подключается к встрече', - 'skills.meetingBots.meetingLink': 'Ссылка на встречу', - 'skills.meetingBots.modalAriaLabel': 'Отправить OpenHuman на встречу', - 'skills.meetingBots.modalDesc': 'Описание окна', - 'skills.meetingBots.modalTitle': 'Отправить OpenHuman на встречу', - 'skills.meetingBots.newBadge': 'Новое', - 'skills.meetingBots.sendTo': 'Отправить', - 'skills.meetingBots.starting': 'Запуск…', - 'skills.resource.preview.closeAriaLabel': 'Закрыть предпросмотр', - 'skills.resource.preview.failed': 'Не удалось показать превью', - 'skills.resource.preview.loading': 'Загрузка предпросмотра…', - 'skills.resource.tree.empty': 'Встроенных ресурсов нет.', - 'skills.search.placeholder': 'Поиск', - 'skills.setup.autocomplete.acceptKey': 'Клавиша принятия', - 'skills.setup.autocomplete.activeDesc': 'Активно', - 'skills.setup.autocomplete.activeTitle': 'Автодополнение активно', - 'skills.setup.autocomplete.customizeSettings': 'Настроить параметры', - 'skills.setup.autocomplete.debounce': 'Задержка', - 'skills.setup.autocomplete.description': 'Описание', - 'skills.setup.autocomplete.enableBtn': 'Включение...', - 'skills.setup.autocomplete.enableError': 'Не удалось включить автодополнение', - 'skills.setup.autocomplete.enabling': 'Включение...', - 'skills.setup.autocomplete.notSupported': 'Не поддерживается', - 'skills.setup.autocomplete.stepEnable': 'Включить встроенные подсказки', - 'skills.setup.autocomplete.stepSuccess': 'Готово к работе', - 'skills.setup.autocomplete.stylePreset': 'Пресет стиля', - 'skills.setup.autocomplete.stylePresetValue': 'Сбалансированный (можно изменить позже)', - 'skills.setup.autocomplete.title': 'Автодополнение текста', - 'skills.setup.screenIntel.activeDesc': 'Активно', - 'skills.setup.screenIntel.activeTitle': 'Интеллект экрана включён', - 'skills.setup.screenIntel.advancedSettings': 'Дополнительные настройки', - 'skills.setup.screenIntel.allGranted': 'Все разрешения предоставлены', - 'skills.setup.screenIntel.captureMode': 'Режим захвата', - 'skills.setup.screenIntel.captureModeValue': 'Все окна (можно изменить позже)', - 'skills.setup.screenIntel.deniedHint': - 'После предоставления разрешений в Системных настройках нажми ниже для перезапуска и применения изменений.', - 'skills.setup.screenIntel.enableBtn': 'Включение...', - 'skills.setup.screenIntel.enableDesc': - 'Видеть, что происходит на вашем экране, и передавать полезный контекст вашему агенту', - 'skills.setup.screenIntel.enableError': 'Не удалось включить интеллект экрана', - 'skills.setup.screenIntel.enabling': 'Включение...', - 'skills.setup.screenIntel.grant': 'Открытие...', - 'skills.setup.screenIntel.granted': 'Предоставлено', - 'skills.setup.screenIntel.macosOnly': 'Только macOS', - 'skills.setup.screenIntel.opening': 'Открытие...', - 'skills.setup.screenIntel.panicHotkey': 'Экстренная горячая клавиша', - 'skills.setup.screenIntel.permAccessibility': 'Доступность', - 'skills.setup.screenIntel.permInputMonitoring': 'Мониторинг ввода', - 'skills.setup.screenIntel.permScreenRecording': 'Запись экрана', - 'skills.setup.screenIntel.permissionsDesc': 'Описание разрешений', - 'skills.setup.screenIntel.refreshStatus': 'Обновить статус', - 'skills.setup.screenIntel.restartRefresh': 'Перезапуск...', - 'skills.setup.screenIntel.restarting': 'Перезапуск...', - 'skills.setup.screenIntel.stepEnable': 'Включить навык', - 'skills.setup.screenIntel.stepPermissions': 'Предоставить разрешения', - 'skills.setup.screenIntel.stepSuccess': 'Готово к работе', - 'skills.setup.screenIntel.title': 'Интеллект экрана', - 'skills.setup.screenIntel.visionModel': 'Визуальная модель', - 'skills.setup.voice.activation': 'Активация', - 'skills.setup.voice.activeDescPrefix': 'Fn', - 'skills.setup.voice.activeDescSuffix': 'Fn', - 'skills.setup.voice.activeTitle': 'Голосовой интеллект активен', - 'skills.setup.voice.customizeSettings': 'Настроить параметры', - 'skills.setup.voice.downloadSttBtn': 'Скачать STT-модель', - 'skills.setup.voice.enableDesc': 'Включить', - 'skills.setup.voice.hotkey': 'Горячая клавиша', - 'skills.setup.voice.startBtn': 'Запуск...', - 'skills.setup.voice.startError': 'Не удалось запустить голосовой сервер', - 'skills.setup.voice.starting': 'Запуск...', - 'skills.setup.voice.stepEnable': 'Запустить голосовой сервер', - 'skills.setup.voice.stepSetup': 'Требуется загрузка модели', - 'skills.setup.voice.stepSuccess': 'Готово к работе', - 'skills.setup.voice.sttNotReady': 'Модель распознавания речи не готова', - 'skills.setup.voice.sttNotReadyDesc': - 'Голосовой интеллект требует локальной модели Whisper для транскрипции. Скачай её в настройках локальной модели.', - 'skills.setup.voice.sttReady': 'Модель распознавания речи готова', - 'skills.setup.voice.sttReturnHint': 'Подсказка возврата STT', - 'skills.setup.voice.title': 'Голосовой интеллект', - 'skills.uninstall.couldNotUninstall': 'Не удалось удалить', - 'skills.uninstall.description': - 'Это навсегда удалит каталог навыка и все его ресурсы. Агент перестанет видеть его на следующем ходу.', - 'skills.uninstall.title': 'Удалить', - 'skills.uninstall.uninstallBtn': 'Удалить', - 'skills.uninstall.uninstalling': 'Удаление…', - 'upsell.global.limitMessage': 'Улучши план или пополни кредиты для продолжения', - 'upsell.global.limitTitle': 'Ты', - 'upsell.global.nearLimitMessage': - 'Ты использовал {pct}% лимита. Улучши план для увеличения лимитов.', - 'upsell.global.nearLimitTitle': 'Лимит использования близко', - 'upsell.usageLimit.bodyBudget': - 'Вы достигли недельного лимита.{reset} Обновите план или пополните кредиты, чтобы избежать ограничений.', - 'upsell.usageLimit.bodyRate': - 'Вы достигли 10-часового лимита частоты инференса.{reset} Обновите план для более высоких лимитов.', - 'upsell.usageLimit.heading': 'Лимит использования достигнут', - 'upsell.usageLimit.notNow': 'Не сейчас', - 'upsell.usageLimit.perWindow': '{amount}', - 'upsell.usageLimit.planIncludes': '{plan}', - 'upsell.usageLimit.resetsIn': 'Сбросится {time}.', - 'upsell.usageLimit.upgradePlan': 'Улучшить план', - 'upsell.usageLimit.weeklyInference': '{amount}', - 'walkthrough.tooltip.letsGo': 'Поехали!', - 'walkthrough.tooltip.next': 'Далее →', - 'walkthrough.tooltip.skip': 'Пропустить тур', - 'walkthrough.tooltip.stepCounter': '{n} из {total}', - 'webhooks.activity.empty': 'Пусто', - 'webhooks.activity.title': 'Последняя активность', - 'webhooks.composioHistory.empty': 'Пусто', - 'webhooks.composioHistory.metadataId': 'ID метаданных', - 'webhooks.composioHistory.metadataUuid': 'UUID метаданных', - 'webhooks.composioHistory.payload': 'Полезная нагрузка', - 'webhooks.composioHistory.title': 'История триггеров ComposeIO', - 'webhooks.tunnels.active': 'Активно', - 'webhooks.tunnels.createFailed': 'Не удалось создать туннель', - 'webhooks.tunnels.creating': 'Создание...', - 'webhooks.tunnels.deleteFailed': 'Не удалось удалить туннель', - 'webhooks.tunnels.descriptionPlaceholder': 'Описание (необязательно)', - 'webhooks.tunnels.echo': 'Эхо', - 'webhooks.tunnels.empty': 'Пусто', - 'webhooks.tunnels.enableEcho': 'Включить эхо', - 'webhooks.tunnels.inactive': 'Неактивно', - 'webhooks.tunnels.namePlaceholder': 'Название туннеля (напр. telegram-bot)', - 'webhooks.tunnels.newTunnel': 'Новый туннель', - 'webhooks.tunnels.removeEcho': 'Убрать эхо', - 'webhooks.tunnels.title': 'Вебхук-туннели', - 'webhooks.tunnels.toggleFailed': 'Не удалось переключить эхо', - 'composio.authExpired': 'Срок авторизации истёк', - 'composio.reconnect': 'Переподключить', - 'composio.previewBadge': 'Предварительный просмотр', - 'composio.previewTooltip': - 'Скоро интеграция агента — вы можете подключиться, но агент пока не может использовать этот набор инструментов.', - 'composio.directModeRequiresKey': 'Не удалось сохранить. Прямой режим требует непустой API-ключ.', - 'composio.notYetRouted': 'пока не маршрутизируется', - 'composio.triggers.loading': 'Загрузка…', - 'conversations.taskKanban.todo': 'К выполнению', - 'settings.composio.loading': 'Загрузка…', - 'settings.mascot.noCharactersAvailable': 'Персонажи OpenHuman пока недоступны', - 'skills.uninstall.confirmTitle': 'Удалить {name}?', - 'conversations.taskKanban.blocked': 'Заблокировано', - 'conversations.taskKanban.done': 'Готово', - 'conversations.taskKanban.pending': 'Pending', - 'conversations.taskKanban.working': 'Working', - 'conversations.taskKanban.awaitingApproval': 'Awaiting approval', - 'conversations.taskKanban.ready': 'Ready', - 'conversations.taskKanban.rejected': 'Rejected', - 'conversations.taskKanban.inProgress': 'В работе', - 'intelligence.memoryChunk.detail.copiedHint': 'скопировано', - 'settings.composio.notYetRouted': 'пока не маршрутизируется', - 'settings.localModel.download.manageExternal': - 'Управляйте этой моделью во внешней среде выполнения.', - 'settings.localModel.status.manageOllamaExternal': - 'Управляйте процессом Ollama и загрузкой моделей вне OpenHuman, затем повторите диагностику.', - 'settings.localModel.status.ollamaDocs': 'Документация Ollama', - 'settings.localModel.status.thenRetry': - 'для инструкций по настройке, затем повторите, когда среда выполнения станет доступна.', - 'settings.appearance.title': 'Внешний вид', - 'settings.appearance.themeHeading': 'Тема', - 'settings.appearance.themeAria': 'Тема', - 'settings.appearance.modeLight': 'Светлая', - 'settings.appearance.modeLightDesc': 'Яркие поверхности, темный текст.', - 'settings.appearance.modeDark': 'Темный', - 'settings.appearance.modeDarkDesc': - 'Тусклые поверхности, меньше раздражают глаза после наступления сумерек.', - 'settings.appearance.modeSystem': 'Система соответствия', - 'settings.appearance.modeSystemDesc': 'Следуйте настройкам внешнего вида вашей ОС.', - 'settings.appearance.helperText': - 'Темный режим переключает все приложение — чат, настройки, панели — на тусклую палитру. «Система сопоставления» следит за внешним видом вашей ОС и обновляет ее в реальном времени.', - 'settings.mascot.characterPreview': 'Предварительный просмотр', - 'settings.mascot.characterStates': 'содержит', - 'settings.mascot.characterVisemes': 'виземы', - 'settings.mascot.colorAria': 'OpenHuman цвет', - 'settings.mascot.colorBlack': 'Черный', - 'settings.mascot.colorBurgundy': 'Бордовый', - 'settings.mascot.colorCustom': 'Custom', - 'settings.mascot.colorNavy': 'Темно-синий', - 'settings.mascot.primaryColor': 'Primary color', - 'settings.mascot.secondaryColor': 'Secondary color', - 'settings.mascot.colorYellow': 'Желтый', - 'settings.mascot.libraryUnavailable': 'OpenHuman библиотека недоступна', - 'settings.mascot.title': 'OpenHuman', - 'settings.developerMenu.mcpServer.title': 'MCP Сервер', - 'settings.developerMenu.mcpServer.desc': - 'Настройка внешних клиентов MCP для подключения к серверу OpenHuman', - 'settings.developerMenu.autonomy.title': 'Автономия агента', - 'settings.developerMenu.autonomy.desc': - 'Ограничения частоты действий инструментов и пороги безопасности', - 'settings.mcpServer.title': 'MCP', - 'settings.mcpServer.toolsSectionTitle': 'Доступные инструменты', - 'settings.mcpServer.toolsSectionDesc': - 'Инструменты, предоставляемые через сервер MCP stdio при запуске openhuman-core mcp', - 'settings.mcpServer.configSectionTitle': 'Конфигурация клиента', - 'settings.mcpServer.configSectionDesc': - 'Выберите клиент MCP для создания правильного фрагмента конфигурации.', - 'settings.mcpServer.copySnippet': 'Копировать в буфер обмена', - 'settings.mcpServer.copied': 'Скопировано!', - 'settings.mcpServer.openConfigFile': 'Открыть файл конфигурации.', - 'settings.mcpServer.binaryPathNotFound': - 'Двоичный файл OpenHuman не найден. При запуске из исходного кода выполните сборку с помощью: Cargo build --bin openhuman-core', - 'settings.mcpServer.openConfigError': 'Не удалось открыть файл конфигурации', - 'settings.mcpServer.clientClaudeDesktop': 'Claude Desktop', - 'settings.mcpServer.clientCursor': 'Курсор', - 'settings.mcpServer.clientCodex': 'Codex', - 'settings.mcpServer.clientZed': 'Zed', - 'settings.mcpServer.configFilePath': 'Файл конфигурации', - 'settings.mcpServer.clientSelectorAriaLabel': 'MCP селектор клиента', - 'settings.persona.title': 'Persona', - 'settings.persona.menuTitle': 'Persona', - 'settings.persona.menuDesc': - 'Name, personality, avatar, and voice — your assistant as one identity', - 'settings.persona.identityHeading': 'Identity', - 'settings.persona.identityDesc': - 'A display name and short description for your assistant. Shown in the app; does not change how the assistant reasons.', - 'settings.persona.displayNameLabel': 'Display name', - 'settings.persona.displayNamePlaceholder': 'e.g. Nova', - 'settings.persona.descriptionLabel': 'Description', - 'settings.persona.descriptionPlaceholder': 'e.g. A calm, concise assistant for my team.', - 'settings.persona.soul.heading': 'Personality (SOUL.md)', - 'settings.persona.soul.desc': - 'The personality prompt the assistant follows in every conversation. Edits are saved to your workspace and take effect on the next reply.', - 'settings.persona.soul.editorLabel': 'SOUL.md contents', - 'settings.persona.soul.reset': 'Reset to default', - 'settings.persona.soul.usingDefault': 'Using the bundled default', - 'settings.persona.soul.loadError': 'Could not load SOUL.md', - 'settings.persona.soul.saveError': 'Could not save SOUL.md', - 'settings.persona.soul.resetError': 'Could not reset SOUL.md', - 'settings.persona.appearanceHeading': 'Avatar & Voice', - 'settings.persona.appearanceDesc': - 'Mascot color, custom GIF avatar, and reply voice are configured in Mascot settings.', - 'settings.persona.openMascotSettings': 'Open Mascot settings', - 'settings.developerMenu.composio.title': 'Composio', - 'settings.developerMenu.composio.desc': - 'Режим маршрутизации, триггеры интеграции и архив истории триггеров.', - 'settings.appearance.tabBarHeading': 'Нижняя панель вкладок', - 'settings.appearance.tabBarAlwaysShowLabels': 'Всегда показывать метки', - 'settings.appearance.tabBarAlwaysShowLabelsDesc': - 'Если этот параметр отключен, метки отображаются только при наведении курсора мыши или на активной вкладке.', - 'common.breadcrumb': 'Breadcrumb', - 'settings.betaBuild': 'Бета-сборка — v{version}', - 'migration.vendor.openclaw': 'OpenClaw', - 'migration.vendor.hermes': 'Hermes Agent', - 'onboarding.apiKeys.openaiOauthHint': - 'Используйте ChatGPT Plus/Pro (подписка) или ключ OpenAI API — не оба обязательны.', - 'onboarding.apiKeys.openaiOauthOpening': 'Открытие входа…', - 'onboarding.apiKeys.finishSignIn': 'Завершите вход в ChatGPT', - 'onboarding.apiKeys.orApiKey': 'или ключ API', - 'app.localAiDownload.expandAria': 'Развернуть ход загрузки', - 'app.localAiDownload.collapseAria': 'Свернуть ход загрузки', - 'app.localAiDownload.dismissAria': 'Закрыть уведомление о загрузке.', - 'mobile.nav.ariaLabel': 'Мобильная навигация', - 'progress.stepsAria': 'Шаги выполнения', - 'progress.stepAria': 'Шаг {current} из {total}', - 'workspace.vaultsTitle': 'Хранилища знаний', - 'workspace.vaultsDesc': - 'Укажите локальную папку; файлы разбиваются на части и зеркально отображаются в памяти.', - 'calls.title': 'Звонки', - 'calls.comingSoonBody': 'Скоро появятся звонки с помощью ИИ. Следите за обновлениями.', - 'art.rotatingTetrahedronAria': 'Вращающийся космический корабль в виде перевернутого тетраэдра', - 'devOptions.sentryDisabled': '(идентификатор отсутствует — охрана отключена в этой сборке)', - 'composio.expiredAuthorization': 'Срок действия авторизации {name} истек', - 'composio.expiredDescription': - 'Повторно подключитесь, чтобы повторно включить инструменты {name}. OpenHuman будет держать эту интеграцию недоступной, пока вы не обновите доступ к OAuth.', - 'channels.telegram.remoteControlTitle': 'Удаленное управление (Telegram)', - 'channels.telegram.remoteControlBody': - 'Из разрешенного чата Telegram отправьте /status, /sessions, /new или /help. В маршрутизации моделей по-прежнему используются /model и /models.', - 'rewards.referralSection.retry': 'Повторить', - 'settings.ai.plannerSummary': - 'Планировщик: исходные события {sourceEvents}, отправлено {sent}, дедуплицировано {deduped}.', - 'settings.ai.routeLabel': 'маршрут: {route}', - 'settings.ai.latestSpend': 'Последние расходы: {amount} в {time} ({action})', - 'settings.ai.topActions': 'Популярные действия', - 'settings.ai.noSpendRows': 'Строки расходов не загружены.', - 'settings.ai.topHours': 'Максимальное количество часов', - 'settings.ai.noHourlySpend': 'Почасовых затрат пока нет.', - 'settings.autocomplete.appFilter.app': 'Приложение', - 'settings.autocomplete.appFilter.currentSuggestion': 'Текущее предложение', - 'settings.autocomplete.appFilter.debounce': 'Отладка', - 'settings.autocomplete.appFilter.enabled': 'Включено', - 'settings.autocomplete.appFilter.lastError': 'Последняя ошибка', - 'settings.autocomplete.appFilter.model': 'Модель', - 'settings.autocomplete.appFilter.phase': 'Фаза', - 'settings.autocomplete.appFilter.platformSupported': 'Платформа поддерживается', - 'settings.autocomplete.appFilter.running': 'Выполняется', - 'settings.autocomplete.debug.acceptedPrefix': 'Принято: {value}', - 'settings.autocomplete.debug.acceptFailed': 'Не удалось принять предложение', - 'settings.autocomplete.debug.alreadyRunning': 'Автозаполнение уже запущено.', - 'settings.autocomplete.debug.clearHistoryFailed': 'Не удалось очистить историю.', - 'settings.autocomplete.debug.didNotStart': 'Автозаполнение не запустилось.', - 'settings.autocomplete.debug.disabledInSettings': - 'Автозаполнение отключено в настройках. Включите его и сначала сохраните.', - 'settings.autocomplete.debug.fetchSuggestionFailed': 'Не удалось получить текущее предложение.', - 'settings.autocomplete.debug.inspectFocusedElementFailed': - 'Не удалось проверить элемент в фокусе.', - 'settings.autocomplete.debug.loadSettingsFailed': - 'Не удалось загрузить настройки автозаполнения.', - 'settings.autocomplete.debug.noSuggestionApplied': 'Предложение не было применено.', - 'settings.autocomplete.debug.noSuggestionReturned': 'Ни одно предложение не вернулось.', - 'settings.autocomplete.debug.refreshStatusFailed': 'Не удалось обновить статус автозаполнения.', - 'settings.autocomplete.debug.saveAdvancedSettingsFailed': - 'Не удалось сохранить дополнительные настройки.', - 'settings.autocomplete.debug.startFailed': 'Не удалось запустить автозаполнение.', - 'settings.autocomplete.debug.stopFailed': 'Не удалось остановить автозаполнение.', - 'settings.autocomplete.debug.suggestionPrefix': 'Предложение: {value}', - 'settings.autocomplete.shared.none': 'Нет', - 'settings.autocomplete.shared.notApplicable': 'н/д', - 'settings.autocomplete.shared.unknown': 'Неизвестно', - 'settings.billing.autoRecharge.expires': 'Срок действия истекает {date}', - 'settings.billing.autoRecharge.spentThisWeek': - '${spent} из ${limit}, использовано на этой неделе', - 'settings.localModel.deviceCapability.disabledLowercase': 'отключен', - 'settings.localModel.deviceCapability.presetDetails': - 'Чат: {chatModel} · Vision: {visionModel} · Целевая оперативная память: {targetRamGb} ГБ', - 'settings.localModel.download.capabilityChat': 'Чат', - 'settings.localModel.download.capabilityEmbedding': 'Встраивание', - 'settings.localModel.download.capabilityStt': 'STT', - 'settings.localModel.download.capabilityTts': 'TTS', - 'settings.localModel.download.capabilityVision': 'Vision', - 'settings.localModel.download.embeddingDimensions': 'Размеры: {dimensions}', - 'settings.localModel.download.embeddingModel': 'Модель: {modelId}', - 'settings.localModel.download.embeddingVectors': 'Векторы: {count}', - 'settings.localModel.download.notAvailable': 'н/д', - 'settings.localModel.download.summaryHelper': - 'Вызовы `openhuman.inference_summarize` через ядро Rust', - 'settings.localModel.download.transcript': 'Расшифровка:', - 'settings.localModel.download.ttsOutput': 'Выход: {outputPath}', - 'settings.localModel.download.ttsVoice': 'Голос: {voiceId}', - 'settings.localModel.status.contextBelowMinimumBadge': - '{contextLength} ctx - ниже {required} мин.', - 'settings.localModel.status.contextBelowMinimumTitle': - 'Отклонено: количество токенов {contextLength} контекстного окна ниже минимального значения токена {required}, требуемого для уровня памяти. Напоминание будет повреждено молчаливым усечением.', - 'settings.localModel.status.contextOkBadge': '{contextLength} ctx ✓', - 'settings.localModel.status.contextOkTitle': - 'Токены контекстного окна {contextLength} соответствуют минимуму уровня памяти для токенов {required}.', - 'settings.localModel.status.contextUnknownBadge': 'ctx неизвестно', - 'settings.localModel.status.contextUnknownTitle': - 'Контекстное окно неизвестно; не удалось подтвердить, что он соответствует минимуму уровня памяти токена {required}.', - 'settings.localModel.status.expectedChat': 'Чат: {model}', - 'settings.localModel.status.expectedEmbedding': 'Встраивание: {model}', - 'settings.localModel.status.expectedVision': 'Видение: {model}', - 'settings.localModel.status.externalProcess': 'Внешний процесс', - 'settings.localModel.status.notAvailable': 'н/д', - 'settings.mascot.customGifPlaceholder': 'https://example.com/avatar.gif', - 'settings.mascot.loadDetailError': 'Не удалось загрузить талисман.', - 'settings.mascot.loadLibraryError': 'Не удалось загрузить библиотеку талисманов.', - 'settings.mascot.voice.customPlaceholder': 'например. 21m00Tcm4TlvDq8ikWAM', - 'settings.mascot.voice.previewText': "Hi, I'm your assistant. This is a voice preview.", - 'skills.channelIcon.discord': 'Discord', - 'skills.channelIcon.imessage': 'iMessage', - 'skills.channelIcon.telegram': 'Telegram', - 'skills.channelIcon.web': 'Интернет', - 'skills.channelIcon.yuanbao': 'Yuanbao', - 'skills.composio.poweredBy': 'Работает на Composio', - 'skills.composio.staleStatusTitle': 'Соединения показывают устаревший статус', - 'skills.create.allowedToolsHelp': 'Отображается в SKILL.md как', - 'skills.create.allowedToolsPlaceholder': 'node_exec, fetch', - 'skills.create.licensePlaceholder': 'MIT', - 'skills.create.tagsPlaceholder': 'торговля, исследование', - 'skills.install.errors.alreadyInstalledHint': - 'Навык работы с этим пулеметом уже существует в рабочей области. Сначала удалите его или измените заголовок `metadata.id`/`name`.', - 'skills.install.errors.alreadyInstalledTitle': 'Навык уже установлен.', - 'skills.install.errors.fetchFailedHint': - 'Запрос не выполнен успешно. Проверьте, что URL указывает на доступный общедоступный файл и что хост вернул ответ 2xx.', - 'skills.install.errors.fetchFailedTitle': 'Ошибка получения.', - 'skills.install.errors.fetchTimedOutHint': - 'Удаленный хост не ответил вовремя. Попробуйте еще раз или увеличьте таймаут (1–600 с).', - 'skills.install.errors.fetchTimedOutTitle': 'Время ожидания получения истекло', - 'skills.install.errors.fetchTooLargeHint': - 'Размер файла SKILL.md не должен превышать 1 МБ. Разделите связанные ресурсы на файлы `references/` или `scripts/` вместо их встраивания.', - 'skills.install.errors.fetchTooLargeTitle': 'SKILL.md слишком велик.', - 'skills.install.errors.genericHint': - 'Серверная часть вернула ошибку. Необработанное сообщение показано ниже.', - 'skills.install.errors.genericTitle': 'Не удалось установить навык.', - 'skills.install.errors.invalidSkillHint': - 'Вводный заголовок должен быть допустимым YAML с непустыми полями `name` и `description`, заканчивающимися `---`.', - 'skills.install.errors.invalidSkillTitle': 'SKILL.md не анализировал', - 'skills.install.errors.invalidUrlHint': - 'Разрешены только общедоступные HTTPS URL. Частные узлы, узлы обратной связи и узлы метаданных блокируются.', - 'skills.install.errors.invalidUrlTitle': 'URL отклонено', - 'skills.install.errors.unsupportedUrlHint': - 'Работают только прямые ссылки `.md`. Для GitHub ссылка на файл (github.com/owner/repo/blob/.../SKILL.md) — корни дерева и репо не установлены.', - 'skills.install.errors.unsupportedUrlTitle': 'Форма URL не поддерживается.', - 'skills.install.errors.writeFailedHint': - 'Каталог навыков рабочей области не был доступен для записи. Проверьте разрешения файловой системы для `/.openhuman/skills/`.', - 'skills.install.errors.writeFailedTitle': 'Не удалось записать SKILL.md.', - 'skills.install.fetchingPrefix': 'Получение', - 'skills.install.fetchingSuffix': 'может занять заданное вами время ожидания.', - 'skills.install.subtitleMiddle': 'поверх HTTPS и устанавливает его в', - 'skills.install.subtitlePrefix': 'Выбирает только один', - 'skills.install.subtitleSuffix': 'HTTPS; частные хосты и хосты обратной связи заблокированы.', - 'skills.install.successDiscovered': 'Обнаружил {count} новых навыков.', - 'skills.install.successNoNewIds': - 'Навык установлен, но новые идентификаторы навыков не появились — возможно, в каталоге уже есть навык с таким же ярлыком.', - 'skills.install.timeoutHelp': - 'По умолчанию — 60 секунд. Значения за пределами 1–600 фиксируются на стороне сервера.', - 'skills.install.timeoutInvalid': 'Должно быть целым числом от 1 до 600.', - 'skills.install.timeoutPlaceholder': '60', - 'skills.install.urlHelpMiddle': 'файл.', - 'skills.install.urlHelpPrefix': 'Прямая ссылка на', - 'skills.install.urlHelpSuffix': 'URLs автоматически перезаписывается на', - 'skills.install.urlInvalidPrefix': 'URL должен быть правильно сформированным', - 'skills.install.urlInvalidSuffix': 'связь.', - 'skills.install.urlPlaceholder': 'https://raw.githubusercontent.com/owner/repo/main/SKILL.md', - 'skills.meetingBots.platformComingSoon': 'Поддержка {label} скоро появится.', - 'skills.meetingBots.platformHints.gmeet': 'meet.google.com/abc-defg-hij', - 'skills.meetingBots.platformHints.teams': 'Teams.microsoft.com/...', - 'skills.meetingBots.platformHints.zoom': 'Zoom.us/j/...', - 'skills.meetingBots.platforms.gmeet': 'Google Встречайте', - 'skills.meetingBots.platforms.teams': 'Microsoft Teams', - 'skills.meetingBots.platforms.zoom': 'Zoom', - 'skills.meetingBots.soonSuffix': 'скоро', - 'skills.setup.screenIntel.permissionPathLabel': 'macOS применяет конфиденциальность к:', - 'settings.agentAccess.title': 'Agent OS access', - 'settings.agentAccess.menuDesc': - 'Control where the agent can read/write and whether it can use the shell.', - 'settings.agentAccess.loadError': 'Failed to load access settings', - 'settings.agentAccess.saveError': 'Failed to save access settings', - 'settings.agentAccess.saved': 'Saved — applies on your next message.', - 'settings.agentAccess.desktopOnly': 'Access settings are only available in the desktop app.', - 'settings.agentAccess.loading': 'Loading…', - 'settings.agentAccess.accessMode': 'Access mode', - 'settings.agentAccess.tier.readonly.title': 'Read-only', - 'settings.agentAccess.tier.readonly.desc': - 'Reads files and runs read-only commands to explore — but never writes, edits, or runs anything that changes state.', - 'settings.agentAccess.tier.supervised.title': 'Ask before edit', - 'settings.agentAccess.tier.supervised.desc': - 'Creates new files freely, but asks for your approval before editing an existing file, running a command, reaching the network, or installing anything.', - 'settings.agentAccess.tier.full.title': 'Full access', - 'settings.agentAccess.tier.full.desc': - 'Runs commands with your full user account access — it can read/write anywhere allowed, except credential and system stores. Destructive commands, network access, and installs still ask for approval.', - 'settings.agentAccess.defaultTag': '(default)', - 'settings.agentAccess.fullWarning': - '⚠ Full access runs commands with your full account access and is not sandboxed. Only enable it when you trust the agent with this machine. Credential and system directories stay blocked, and destructive, network, and install actions still ask for approval.', - 'settings.agentAccess.confine.label': 'Confine to workspace', - 'settings.agentAccess.confine.desc': - 'Restrict the agent to the workspace directory (plus any granted folders), whichever access mode is selected. When off, it can reach anywhere your user can — except the always-blocked credential and system directories.', - 'settings.agentAccess.grantedFolders': 'Granted folders', - 'settings.agentAccess.alwaysAllow': 'Always-allowed tools', - 'settings.agentAccess.alwaysAllowDesc': - 'Tools you marked "Always allow" in chat run without asking. Remove one to be prompted again.', - 'settings.agentAccess.alwaysAllowNone': 'No always-allowed tools yet.', - 'settings.agentAccess.grantedDesc': - 'Folders the agent may read and write, in addition to the workspace. Credential stores (~/.ssh, ~/.gnupg, ~/.aws, keychains) and system directories (/etc, /System, C:\\Windows, …) are always blocked, even inside a granted folder.', - 'settings.agentAccess.noneGranted': 'No folders granted.', - 'settings.agentAccess.readWrite': 'read + write', - 'settings.agentAccess.readOnly': 'read-only', - 'settings.agentAccess.remove': 'Remove', - 'settings.agentAccess.pathPlaceholder': 'Абсолютный путь к папке', - 'settings.agentAccess.accessLevelLabel': 'Access level', - 'settings.agentAccess.add': 'Add', - 'settings.agentAccess.saving': 'Saving…', - 'settings.agentAccess.changesApply': 'Changes apply on your next message.', - 'skills.tabs.runners': 'Runners', - 'settings.developerMenu.skillsRunner.title': 'Skills Runner', - 'settings.developerMenu.skillsRunner.desc': - 'Run any bundled skill ad-hoc — fill its inputs and fire a background autonomous run', - 'settings.developerMenu.skillsRunner.panelDesc': - 'Pick a bundled skill, fill in its declared inputs, and fire a fire-and-forget background run. Use Dev Workflow instead if you want a cron-scheduled recurring job.', - 'settings.skillsRunner.skill': 'Skill', - 'settings.skillsRunner.selectSkill': 'Select a skill…', - 'settings.skillsRunner.loadingSkills': 'Loading skills…', - 'settings.skillsRunner.loadingDescription': 'Loading skill inputs…', - 'settings.skillsRunner.noInputs': 'This skill declares no inputs.', - 'settings.skillsRunner.placeholder.required': 'required', - 'settings.skillsRunner.runNow': 'Run now', - 'settings.skillsRunner.starting': 'Starting…', - 'settings.skillsRunner.started': 'Started — run id:', - 'settings.skillsRunner.logPath': 'Log:', - 'settings.skillsRunner.error.listSkills': 'Failed to load skills:', - 'settings.skillsRunner.error.describe': 'Failed to load inputs:', - 'settings.skillsRunner.error.missingRequired': 'Missing required input(s):', - 'settings.skillsRunner.error.run': 'Run failed to start:', - 'settings.skillsRunner.error.preflightGate': 'Preflight gate failed', - 'settings.skillsRunner.schedule.heading': 'Schedule (recurring)', - 'settings.skillsRunner.schedule.help': - 'Save this skill + inputs as a recurring cron job. The agent will call run_skill at each tick.', - 'settings.skillsRunner.schedule.frequency': 'Frequency', - 'settings.skillsRunner.schedule.every30min': 'Every 30 minutes', - 'settings.skillsRunner.schedule.everyHour': 'Every hour', - 'settings.skillsRunner.schedule.every2hours': 'Every 2 hours', - 'settings.skillsRunner.schedule.every6hours': 'Every 6 hours', - 'settings.skillsRunner.schedule.onceDaily': 'Once daily (9:00)', - 'settings.skillsRunner.schedule.save': 'Save schedule', - 'settings.skillsRunner.schedule.saving': 'Saving…', - 'settings.skillsRunner.schedule.saved': 'Schedule saved.', - 'settings.skillsRunner.schedule.error': 'Schedule save failed:', - 'settings.skillsRunner.schedule.loadingJobs': 'Loading existing schedules…', - 'settings.skillsRunner.schedule.noJobs': 'No schedules saved for this skill yet.', - 'settings.skillsRunner.schedule.existing': 'Scheduled jobs for this skill:', - 'settings.skillsRunner.schedule.runNow': 'Run', - 'settings.skillsRunner.schedule.remove': 'Remove', - 'settings.skillsRunner.recentRuns.headingForSkill': 'Recent runs for this skill', - 'settings.skillsRunner.recentRuns.headingAll': 'Recent skill runs (all)', - 'settings.skillsRunner.recentRuns.refresh': 'Refresh', - 'settings.skillsRunner.recentRuns.loading': 'Loading recent runs…', - 'settings.skillsRunner.recentRuns.empty': 'No recent runs.', - 'settings.skillsRunner.viewer.loading': 'Loading log…', - 'settings.skillsRunner.viewer.tailing': 'Live tailing', - 'settings.skillsRunner.viewer.fetching': 'fetching', - 'settings.skillsRunner.viewer.error': 'Log read failed:', - 'settings.skillsRunner.repoPicker.loading': 'Loading repositories…', - 'settings.skillsRunner.repoPicker.select': 'Select a repository…', - 'settings.skillsRunner.repoPicker.empty': - 'No repositories returned. Connect GitHub via Composio to populate this list.', - 'settings.skillsRunner.repoPicker.notConnected': - 'GitHub isn’t connected via Composio. Connect it under Skills → Composio first.', - 'settings.skillsRunner.repoPicker.privateTag': '(private)', - 'settings.skillsRunner.branchPicker.needRepo': 'Pick a repo first…', - 'settings.skillsRunner.branchPicker.loading': 'Loading branches…', - 'settings.skillsRunner.branchPicker.select': 'Select a branch…', - 'settings.modelHealth.title': 'Model Health', - 'settings.modelHealth.desc': - 'Per-model quality, hallucination rate, and cost comparison across active models', - 'settings.modelHealth.allStatuses': 'All statuses', - 'settings.modelHealth.models': 'models', - 'settings.modelHealth.loading': 'Loading model data...', - 'settings.modelHealth.empty': 'No models registered', - 'settings.modelHealth.col.model': 'Model', - 'settings.modelHealth.col.quality': 'Quality', - 'settings.modelHealth.col.halluc': 'Halluc. Rate', - 'settings.modelHealth.col.cost': 'Cost / 1M out', - 'settings.modelHealth.col.agents': 'Agents', - 'settings.modelHealth.col.status': 'Status', - 'settings.modelHealth.badge.keep': 'Keep', - 'settings.modelHealth.badge.replace': 'Replace', - 'settings.modelHealth.badge.staging': 'Staging test', - 'settings.modelHealth.badge.vision': 'Vision only', - 'settings.modelHealth.swap': 'Swap?', - 'settings.modelHealth.modal.title': 'Replace Model?', - 'settings.modelHealth.modal.hallucRate': 'Hallucination rate', - 'settings.modelHealth.modal.cancel': 'Cancel', - 'settings.modelHealth.modal.apply': 'Apply Replacement', - 'settings.modelHealth.tag.cheaper': 'CHEAPER', - 'settings.modelHealth.tag.better': 'BETTER', - // Task sources (#task-sources) - 'settings.taskSources.title': 'Task Sources', - 'settings.taskSources.subtitle': 'Pull tasks from your tools onto the agent todo board', - 'settings.taskSources.description': - 'Collect work items from GitHub, Notion, Linear, and ClickUp, enrich them, and route them onto the agent todo board.', - 'settings.taskSources.connectHint': - 'Task sources use your connected accounts. Connect them under Integrations first.', - 'settings.taskSources.disabledBanner': - 'Task sources are disabled in settings. Enable them to poll automatically.', - 'settings.taskSources.loadError': 'Failed to load task sources', - 'settings.taskSources.addTitle': 'Add a task source', - 'settings.taskSources.provider': 'Provider', - 'settings.taskSources.name': 'Name (optional)', - 'settings.taskSources.namePlaceholder': 'e.g. My open issues', - 'settings.taskSources.github.repo': 'Repository (owner/name, optional)', - 'settings.taskSources.github.labels': 'Labels (comma-separated)', - 'settings.taskSources.notion.database': 'Database (board) ID', - 'settings.taskSources.linear.team': 'Team ID (optional)', - 'settings.taskSources.clickup.team': 'Workspace (team) ID (optional)', - 'settings.taskSources.assignedToMe': 'Only items assigned to me', - 'settings.taskSources.add': 'Add source', - 'settings.taskSources.adding': 'Adding…', - 'settings.taskSources.preview': 'Preview', - 'settings.taskSources.previewResult': '{count} task(s) match this filter', - 'settings.taskSources.fetchNow': 'Fetch now', - 'settings.taskSources.fetching': 'Fetching…', - 'settings.taskSources.fetchResult': 'Routed {routed} of {fetched} task(s)', - 'settings.taskSources.configured': 'Configured sources', - 'settings.taskSources.empty': 'No task sources configured yet.', - 'settings.taskSources.proactive': 'Proactive', - 'settings.taskSources.lastFetch': 'Last fetch', - 'settings.taskSources.never': 'Never', - 'settings.taskSources.statusEnabled': 'Enabled', - 'settings.taskSources.statusDisabled': 'Disabled', - 'settings.taskSources.enable': 'Enable', - 'settings.taskSources.disable': 'Disable', - 'settings.taskSources.remove': 'Remove', - 'settings.taskSources.removeConfirm': - 'Remove this task source? All ingested task history will be deleted and cannot be undone.', - - 'settings.taskSources.refresh': 'Refresh', - // Task sources provider labels (#task-sources) - 'settings.taskSources.providers.github': 'GitHub', - 'settings.taskSources.providers.notion': 'Notion', - 'settings.taskSources.providers.linear': 'Linear', - 'settings.taskSources.providers.clickup': 'ClickUp', - - // /skills IA restructure (Phase 2/3) — dashboard + new-skill page. - 'skills.dashboard.title': 'Skills', - 'skills.dashboard.scheduledHeading': 'Scheduled skills', - 'skills.dashboard.emptyTitle': 'No scheduled skills', - 'skills.dashboard.emptyBody': - 'Run a bundled skill once or save a recurring schedule to see it here.', - 'skills.dashboard.create': 'Create a Skill', - 'skills.dashboard.run': 'Run a Skill', - 'skills.dashboard.enable': 'Enable scheduled skill', - 'skills.dashboard.disable': 'Disable scheduled skill', - 'skills.dashboard.lastRun': 'Last run', - 'skills.dashboard.nextRun': 'Next run', - 'skills.dashboard.cardOpenRunner': 'Open in runner', - 'skills.dashboard.loadError': 'Failed to load scheduled skills', - 'skills.new.title': 'Create a skill', - 'skills.new.placeholderBody': - 'Authoring form arrives soon. For now, use the “New skill” button on the runner page.', - 'settings.agentAccess.requireTaskPlanApproval.label': 'Require task plan approval', - 'settings.agentAccess.requireTaskPlanApproval.desc': - 'Pause before an assigned agent executes an agent-authored task brief.', -}; - -export default ru5; diff --git a/app/src/lib/i18n/chunks/zh-CN-1.ts b/app/src/lib/i18n/chunks/zh-CN-1.ts deleted file mode 100644 index df471eb75..000000000 --- a/app/src/lib/i18n/chunks/zh-CN-1.ts +++ /dev/null @@ -1,1604 +0,0 @@ -import type { TranslationMap } from '../types'; - -// Simplified Chinese (简体中文) chunk 1/5. Translated from chunks/en-1.ts. -const zhCN1: TranslationMap = { - 'nav.home': '首页', - 'nav.human': '助手', - 'nav.chat': '对话', - 'nav.connections': '连接', - 'nav.memory': '记忆', - 'nav.alerts': '通知', - 'nav.rewards': '奖励', - 'nav.settings': '设置', - 'common.cancel': '取消', - 'common.save': '保存', - 'common.confirm': '确认', - 'common.delete': '删除', - 'common.edit': '编辑', - 'common.create': '创建', - 'common.search': '搜索', - 'common.loading': '加载中…', - 'common.error': '错误', - 'common.success': '成功', - 'common.back': '返回', - 'common.next': '下一步', - 'common.finish': '完成', - 'common.close': '关闭', - 'common.enabled': '已启用', - 'common.disabled': '已禁用', - 'common.on': '开', - 'common.off': '关', - 'common.yes': '是', - 'common.no': '否', - 'common.ok': '确定', - 'common.retry': '重试', - 'common.copy': '复制', - 'common.copied': '已复制', - 'common.learnMore': '了解更多', - 'common.seeAll': '查看全部', - 'common.dismiss': '忽略', - 'common.clear': '清除', - 'common.reset': '重置', - 'common.refresh': '刷新', - 'common.export': '导出', - 'common.import': '导入', - 'common.upload': '上传', - 'common.download': '下载', - 'common.add': '添加', - 'common.remove': '移除', - 'common.showMore': '展开更多', - 'common.showLess': '收起', - 'common.submit': '提交', - 'common.continue': '继续', - 'common.comingSoon': '即将推出', - 'settings.general': '通用', - 'settings.featuresAndAI': '功能与 AI', - 'settings.billingAndRewards': '账单与奖励', - 'settings.support': '支持', - 'settings.advanced': '高级', - 'settings.dangerZone': '危险区域', - 'settings.account': '账户', - 'settings.accountDesc': '恢复短语、团队、连接与隐私', - 'settings.notifications': '通知', - 'settings.notificationsDesc': '免打扰模式与各账户通知控制', - 'settings.notifications.tabs.preferences': '偏好设置', - 'settings.notifications.tabs.routing': '路由', - 'settings.features': '功能', - 'settings.featuresDesc': '屏幕感知、消息与工具', - 'settings.aiModels': 'AI 与模型', - 'settings.aiModelsDesc': '本地 AI 模型设置、下载与 LLM 提供商', - 'settings.ai': 'AI', - 'settings.aiDesc': '云端提供商、本地 Ollama 模型以及按工作负载路由', - 'settings.billingUsage': '账单与用量', - 'settings.billingUsageDesc': '订阅方案、配额与支付方式', - 'settings.rewards': '奖励', - 'settings.rewardsDesc': '邀请、优惠券与获得的配额', - 'settings.restartTour': '重新开始导览', - 'settings.restartTourDesc': '从头开始回放产品导览', - 'settings.about': '关于', - 'settings.aboutDesc': '应用版本与软件更新', - 'settings.developerOptions': '开发者选项', - 'settings.developerOptionsDesc': '诊断、调试面板、Webhook 与记忆检查', - 'settings.clearAppData': '清除应用数据', - 'settings.clearAppDataDesc': '退出登录并永久清除所有本地应用数据', - 'settings.logOut': '退出登录', - 'settings.logOutDesc': '退出当前账户', - 'settings.exitLocalSession': '退出本地会话', - 'settings.exitLocalSessionDesc': '返回登录页面', - 'settings.language': '语言', - 'settings.languageDesc': '应用界面显示语言', - 'settings.alerts': '通知', - 'settings.alertsDesc': '查看收件箱中的最新通知和活动', - 'settings.account.recoveryPhrase': '恢复短语', - 'settings.account.recoveryPhraseDesc': '查看并备份你的账户恢复短语', - 'settings.account.team': '团队', - 'settings.account.teamDesc': '管理团队成员与权限', - 'settings.account.connections': '连接', - 'settings.account.connectionsDesc': '管理已关联的账户与服务', - 'settings.account.privacy': '隐私', - 'settings.account.privacyDesc': '控制哪些数据离开你的电脑', - 'settings.notifications.doNotDisturb': '免打扰', - 'settings.notifications.doNotDisturbDesc': '在一定时间内暂停所有通知', - 'settings.notifications.channelControls': '各渠道控制', - 'settings.notifications.channelControlsDesc': '为每个渠道配置通知偏好', - 'settings.features.screenAwareness': '屏幕感知', - 'settings.features.screenAwarenessDesc': '让助手看到你的活动窗口', - 'settings.features.messaging': '消息', - 'settings.features.messagingDesc': '渠道与消息集成设置', - 'settings.features.tools': '工具', - 'settings.features.toolsDesc': '管理已连接的工具与集成', - 'settings.ai.localSetup': '本地 AI 设置', - 'settings.ai.localSetupDesc': '下载并配置本地 AI 模型', - 'settings.ai.llmProvider': 'LLM 提供商', - 'settings.ai.llmProviderDesc': '选择并配置你的 AI 提供商', - 'clearData.title': '清除应用数据', - 'clearData.warning': '这将退出你的账户并永久删除本地应用数据,包括:', - 'clearData.bulletSettings': '应用设置与对话', - 'clearData.bulletCache': '所有本地集成缓存数据', - 'clearData.bulletWorkspace': '工作空间数据', - 'clearData.bulletOther': '所有其他本地数据', - 'clearData.irreversible': '此操作不可撤销。', - 'clearData.clearing': '正在清除应用数据...', - 'clearData.failed': '清除数据失败,请重试。', - 'clearData.failedLogout': '退出登录失败,请重试。', - 'clearData.failedPersist': '清除持久化应用状态失败,请重试。', - 'welcome.title': '欢迎使用 OpenHuman', - 'welcome.subtitle': '你的私人 AI 超级智能。私密、简单、强大。', - 'welcome.connectPrompt': '输入 Core RPC 地址以开始使用', - 'welcome.selectRuntime': '选择运行时', - 'welcome.urlPlaceholder': 'http://localhost:8089', - 'welcome.invalidUrl': '请输入有效的 HTTP 或 HTTPS URL', - 'welcome.connecting': '连接中...', - 'welcome.connect': '连接', - 'home.greeting': '早上好', - 'home.greetingAfternoon': '下午好', - 'home.greetingEvening': '晚上好', - 'home.askAssistant': '向你的助手提问...', - 'home.statusOk': '你的设备已连接。保持应用运行以维持连接,通过下方按钮向你的智能体发送消息。', - 'home.statusBackendOnly': '正在重新连接后端…你的智能体很快将再次可用。', - 'home.statusCoreUnreachable': '本地核心 sidecar 无响应。OpenHuman 后台进程可能已崩溃或未能启动。', - 'home.statusInternetOffline': '你的设备当前处于离线状态。请检查网络或重启应用以重新连接。', - 'home.restartCore': '重启核心', - 'home.restartingCore': '正在重启核心…', - 'home.themeToggle.toLight': '切换到浅色模式', - 'home.themeToggle.toDark': '切换到深色模式', - 'chat.newThread': '新对话', - 'chat.typeMessage': '输入消息...', - 'chat.send': '发送', - 'chat.thinking': '思考中...', - 'chat.noMessages': '暂无消息', - 'chat.startConversation': '开始对话', - 'chat.regenerate': '重新生成', - 'chat.copyResponse': '复制回复', - 'chat.citations': '引用', - 'chat.toolUsed': '已使用的工具', - 'scope.legacy': '旧版', - 'scope.user': '用户', - 'scope.project': '项目', - 'skills.title': '连接', - 'skills.search': '搜索连接...', - 'skills.noResults': '未找到连接', - 'skills.connect': '连接', - 'skills.disconnect': '断开', - 'skills.configure': '配置', - 'skills.connected': '已连接', - 'skills.available': '可用', - 'skills.addAccount': '添加账户', - 'skills.channels': '渠道', - 'skills.integrations': '集成', - 'memory.title': '记忆', - 'memory.search': '搜索记忆...', - 'memory.noResults': '未找到记忆', - 'memory.empty': '暂无记忆。记忆将在你交互时自动创建。', - 'memory.tab.memory': '记忆', - 'memory.tab.tasks': 'Agent Tasks', - 'memory.tab.tasksDescription': - 'Create and track tasks — your own to-dos plus the boards your agents build across conversations.', - 'memory.tab.subconscious': '潜意识', - 'memory.tab.dreams': '梦境', - 'memory.tab.calls': '调用记录', - 'memory.tab.diagram': 'Diagram', - 'memory.tab.settings': '设置', - 'memory.analyzeNow': '立即分析', - 'memoryTree.status.title': 'Memory Tree', - 'memoryTree.status.autoSyncLabel': 'Auto-sync', - 'memoryTree.status.autoSyncDescription': - 'Pause to stop new ingestion. Existing wiki stays queryable.', - 'memoryTree.status.statusTile': 'Status', - 'memoryTree.status.lastSyncTile': 'Last sync', - 'memoryTree.status.totalChunksTile': 'Total chunks', - 'memoryTree.status.wikiSizeTile': 'Wiki size', - 'memoryTree.status.statusRunning': 'Running', - 'memoryTree.status.statusPaused': 'Paused', - 'memoryTree.status.statusSyncing': 'Syncing', - 'memoryTree.status.statusError': 'Error', - 'memoryTree.status.statusIdle': 'Idle', - 'memoryTree.status.never': 'Never', - 'memoryTree.status.fetchError': "Couldn't fetch Memory Tree status", - 'memoryTree.status.retry': 'Retry', - 'memoryTree.status.toggleFailed': "Couldn't toggle auto-sync", - 'memoryTree.status.justNow': 'just now', - 'memoryTree.status.secondsAgo': '{count}s ago', - 'memoryTree.status.minuteAgo': '1 min ago', - 'memoryTree.status.minutesAgo': '{count} min ago', - 'memoryTree.status.hourAgo': '1 hr ago', - 'memoryTree.status.hoursAgo': '{count} hr ago', - 'memoryTree.status.dayAgo': '1 day ago', - 'memoryTree.status.daysAgo': '{count} days ago', - 'alerts.title': '通知', - 'alerts.empty': '暂无通知', - 'alerts.markAllRead': '全部标记为已读', - 'alerts.unread': '未读', - 'rewards.title': '奖励', - 'rewards.referrals': '邀请', - 'rewards.coupons': '优惠券', - 'rewards.credits': '配额', - 'rewards.referralCode': '你的邀请码', - 'rewards.copyCode': '复制邀请码', - 'rewards.share': '分享', - 'onboarding.welcome': '欢迎使用 OpenHuman', - 'onboarding.welcomeDesc': '只需几步即可完成设置。', - 'onboarding.context': '上下文收集', - 'onboarding.contextDesc': '连接你日常使用的工具与服务。', - 'onboarding.localAI': '本地 AI', - 'onboarding.localAIDesc': '设置一个运行在你本机的 AI 模型。', - 'onboarding.chatProvider': '对话方式', - 'onboarding.chatProviderDesc': '选择你希望如何与助手交互。', - 'onboarding.referral': '邀请码', - 'onboarding.referralDesc': '如果你有邀请码,可以在此使用。', - 'onboarding.finish': '完成设置', - 'onboarding.finishDesc': '一切就绪!开始使用 OpenHuman。', - 'onboarding.skip': '跳过', - 'onboarding.getStarted': '开始使用', - 'onboarding.runtimeChoice.title': '你希望如何运行 OpenHuman?', - 'onboarding.runtimeChoice.subtitle': '选择最适合你的设置。之后可在设置中更改。', - 'onboarding.runtimeChoice.cloud.title': '简单模式', - 'onboarding.runtimeChoice.cloud.tagline': '让 OpenHuman 为你管理一切。', - 'onboarding.runtimeChoice.cloud.f1': '内置安全保护', - 'onboarding.runtimeChoice.cloud.f2': '令牌压缩,让用量更耐用', - 'onboarding.runtimeChoice.cloud.f3': '一个订阅,包含所有模型', - 'onboarding.runtimeChoice.cloud.f4': '无需管理 API 密钥', - 'onboarding.runtimeChoice.cloud.f5': '设置简单', - 'onboarding.runtimeChoice.custom.title': '自定义运行', - 'onboarding.runtimeChoice.custom.tagline': '使用你自己的密钥。完全掌控使用的服务。', - 'onboarding.runtimeChoice.custom.f1': '几乎所有功能都需要 API 密钥', - 'onboarding.runtimeChoice.custom.f2': '可复用你已经付费的服务', - 'onboarding.runtimeChoice.custom.f3': '如果全部本地运行,也可以免费', - 'onboarding.runtimeChoice.custom.f4': '更多设置,更多可调选项', - 'onboarding.runtimeChoice.custom.f5': '最适合高级用户和开发者', - 'onboarding.runtimeChoice.cloud.creditHighlight': '赠送 $1 额度用于试用', - 'onboarding.runtimeChoice.continueCloud': '继续使用简单模式', - 'onboarding.runtimeChoice.continueCustom': '继续使用自定义模式', - 'onboarding.runtimeChoice.recommended': '推荐', - 'onboarding.apiKeys.title': '添加你的 API 密钥', - 'onboarding.apiKeys.subtitle': - '你可以现在粘贴,也可以跳过并稍后在设置 › AI 中添加。密钥会加密存储在此设备上。', - 'onboarding.apiKeys.openaiLabel': 'OpenAI API 密钥', - 'onboarding.apiKeys.openaiPlaceholder': 'sk-...', - 'onboarding.apiKeys.anthropicLabel': 'Anthropic API 密钥', - 'onboarding.apiKeys.anthropicPlaceholder': 'sk-ant-...', - 'onboarding.apiKeys.saveError': '无法保存该密钥。请仔细检查后重试。', - 'onboarding.apiKeys.skipForNow': '暂时跳过', - 'onboarding.apiKeys.continue': '保存并继续', - 'onboarding.apiKeys.saving': '保存中…', - 'onboarding.custom.stepperInference': '推理', - 'onboarding.custom.stepperVoice': '语音', - 'onboarding.custom.stepperOAuth': 'OAuth', - 'onboarding.custom.stepperSearch': '搜索', - 'onboarding.custom.stepperEmbeddings': 'Embeddings', - 'onboarding.custom.stepperMemory': '记忆', - 'onboarding.custom.stepCounter': '第 {n} 步,共 {total} 步', - 'onboarding.custom.defaultTitle': '默认', - 'onboarding.custom.defaultSubtitle': '让 OpenHuman 为你管理。', - 'onboarding.custom.configureTitle': '配置', - 'onboarding.custom.configureSubtitle': '我来选择使用什么。', - 'onboarding.custom.progressAriaLabel': '入门进度', - 'onboarding.custom.continue': '继续', - 'onboarding.custom.back': '返回', - 'onboarding.custom.finish': '完成设置', - 'onboarding.custom.configureLater': - '你可以在入门流程结束后继续配置。完成后,我们会带你前往对应的设置页面。', - 'onboarding.custom.openSettings': '在设置中打开', - 'onboarding.custom.inference.title': '推理(文本)', - 'onboarding.custom.inference.subtitle': '哪个语言模型应该回答你的问题并运行你的智能体?', - 'onboarding.custom.inference.defaultDesc': - 'OpenHuman 会为每种工作负载路由到合适的默认模型。无需密钥,无需设置。', - 'onboarding.custom.inference.configureDesc': - '使用你自己的 OpenAI 或 Anthropic 密钥。我们会将它用于所有文本类工作负载。', - 'onboarding.custom.voice.title': '语音', - 'onboarding.custom.voice.subtitle': '用于语音模式的语音转文本和文本转语音。', - 'onboarding.custom.voice.defaultDesc': 'OpenHuman 内置托管的 STT/TTS,开箱即用。无需额外配置。', - 'onboarding.custom.voice.configureDesc': - '使用你自己的 ElevenLabs、OpenAI Whisper 等服务。在设置 › 语音中配置。', - 'onboarding.custom.oauth.title': '连接(OAuth)', - 'onboarding.custom.oauth.subtitle': 'Gmail、Slack、Notion 以及其他需要 OAuth 的连接服务。', - 'onboarding.custom.oauth.defaultDesc': - 'OpenHuman 使用托管的 Composio 工作区。之后每个服务都可一键连接。', - 'onboarding.custom.oauth.configureDesc': - '使用你自己的 Composio 账户或 API 密钥。在设置 › 连接中配置。', - 'onboarding.custom.search.title': '网页搜索', - 'onboarding.custom.search.subtitle': 'OpenHuman 如何代表你搜索网页。', - 'onboarding.custom.search.defaultDesc': 'OpenHuman 使用托管搜索后端。无需密钥。', - 'onboarding.custom.search.configureDesc': - '使用你自己的搜索提供商密钥(Tavily、Brave 等)。在设置 › 工具中配置。', - 'onboarding.custom.embeddings.title': 'Embeddings', - 'onboarding.custom.embeddings.subtitle': - 'How OpenHuman generates vector embeddings for semantic memory search.', - 'onboarding.custom.embeddings.defaultDesc': - 'OpenHuman uses a managed embedding service. No API key needed.', - 'onboarding.custom.embeddings.configureDesc': - 'Bring your own embedding provider (OpenAI, Voyage, Ollama, etc.).', - 'onboarding.custom.memory.title': '记忆', - 'onboarding.custom.memory.subtitle': 'OpenHuman 如何记住你的上下文、偏好和历史对话。', - 'onboarding.custom.memory.defaultDesc': 'OpenHuman 会自动管理记忆存储和检索。无需设置。', - 'onboarding.custom.memory.configureDesc': '你可以自行查看、导出或清除记忆。在设置 › 记忆中配置。', - 'accounts.addAccount': '添加账户', - 'accounts.manageAccounts': '管理账户', - 'accounts.noAccounts': '未连接任何账户', - 'accounts.connectAccount': '连接一个账户以开始使用', - 'accounts.agent': '助手', - 'accounts.respondQueue': '回复队列', - 'accounts.disconnect': '断开连接', - 'accounts.disconnectConfirm': '确定要断开此账户的连接吗?', - 'accounts.disconnectClearMemory': 'Also delete memory from this source', - 'accounts.disconnectClearMemoryHint': - 'Permanently removes local memory chunks linked to this connection.', - 'accounts.searchAccounts': '搜索账户...', - 'channels.title': '渠道', - 'channels.configure': '配置渠道', - 'channels.setup': '设置渠道', - 'channels.noChannels': '未配置任何渠道', - 'channels.addChannel': '添加渠道', - 'channels.status.connected': '已连接', - 'channels.status.disconnected': '已断开', - 'channels.status.error': '错误', - 'channels.status.configuring': '配置中', - 'channels.defaultMessaging': '默认消息渠道', - - // Auth mode labels - 'channels.authMode.managed_dm': '使用 OpenHuman 登录', - 'channels.authMode.oauth': 'OAuth 登录', - 'channels.authMode.bot_token': '使用你自己的 Bot Token', - 'channels.authMode.api_key': '使用你自己的 API Key', - - // Field validation - 'channels.fieldRequired': '{field} 是必填项', - - // MCP (virtual channel) - 'channels.mcp.title': 'MCP 服务器', - 'channels.mcp.description': '浏览和管理扩展 AI 能力的 Model Context Protocol 服务器。', - 'webhooks.title': 'Webhook', - 'webhooks.create': '创建 Webhook', - 'webhooks.noWebhooks': '未配置任何 Webhook', - 'webhooks.url': 'URL', - 'webhooks.secret': '密钥', - 'webhooks.events': '事件', - 'webhooks.archiveDirectory': '归档目录', - 'webhooks.todayFile': '今日文件', - 'invites.title': '邀请', - 'invites.create': '创建邀请', - 'invites.noInvites': '暂无待处理的邀请', - 'invites.code': '邀请码', - 'invites.copyLink': '复制链接', - 'devOptions.title': '开发者选项', - 'devOptions.diagnostics': '诊断', - 'devOptions.diagnosticsDesc': '系统健康、日志与性能指标', - 'devOptions.toolPolicyDiagnosticsDesc': - 'Tool inventory, policy posture, MCP allowlists, and recent blocks', - 'devOptions.toolPolicyDiagnostics.loading': 'Loading…', - 'devOptions.toolPolicyDiagnostics.unavailable': 'Diagnostics unavailable', - 'devOptions.toolPolicyDiagnostics.posture.title': 'Policy posture', - 'devOptions.toolPolicyDiagnostics.posture.autonomy': 'Autonomy:', - 'devOptions.toolPolicyDiagnostics.posture.workspaceOnly': 'Workspace only:', - 'devOptions.toolPolicyDiagnostics.posture.maxActionsPerHour': 'Max actions/hr:', - 'devOptions.toolPolicyDiagnostics.posture.approvalMediumRisk': 'Approval (medium risk):', - 'devOptions.toolPolicyDiagnostics.posture.blockHighRisk': 'Block high risk:', - 'devOptions.toolPolicyDiagnostics.inventory.title': 'Inventory', - 'devOptions.toolPolicyDiagnostics.inventory.totalTools': 'Total tools', - 'devOptions.toolPolicyDiagnostics.inventory.enabledTools': 'Enabled tools', - 'devOptions.toolPolicyDiagnostics.inventory.mcpStdioTools': 'MCP stdio tools', - 'devOptions.toolPolicyDiagnostics.inventory.jsonRpcTools': 'JSON-RPC tools', - 'devOptions.toolPolicyDiagnostics.mcpAllowlists.title': 'MCP allowlists', - 'devOptions.toolPolicyDiagnostics.mcpAllowlists.summary': - 'Enabled: {enabled} · Servers: {enabledCount}/{totalCount}', - 'devOptions.toolPolicyDiagnostics.mcpAllowlists.unnamed': '', - 'devOptions.toolPolicyDiagnostics.mcpAllowlists.allowDeny': 'allow={allowCount} deny={denyCount}', - 'devOptions.toolPolicyDiagnostics.mcpWriteAudit.title': 'MCP write audit', - 'devOptions.toolPolicyDiagnostics.mcpWriteAudit.summary': - 'Enabled: {enabled} · Recent (24h): {recentRows}', - 'devOptions.toolPolicyDiagnostics.recentBlocked.title': 'Recent blocked calls', - 'devOptions.toolPolicyDiagnostics.recentBlocked.empty': 'No blocked calls recorded.', - 'devOptions.toolPolicyDiagnostics.redactedSurfaces.title': 'Redacted surfaces', - 'devOptions.toolPolicyDiagnostics.redactedSurfaces.summary': - 'Write-capable: {writeCount} · Policy surfaces: {policyCount}', - 'devOptions.debugPanels': '调试面板', - 'devOptions.debugPanelsDesc': '功能开关、状态检查与调试工具', - 'devOptions.webhooks': 'Webhook', - 'devOptions.webhooksDesc': '配置并测试 Webhook 集成', - 'devOptions.memoryInspection': '记忆检查', - 'devOptions.memoryInspectionDesc': '浏览、查询与管理记忆条目', - 'voice.pushToTalk': '按住说话', - 'voice.recording': '录音中...', - 'voice.processing': '处理中...', - 'voice.languageHint': '语言', - 'misc.rehydrating': '正在加载你的数据...', - 'misc.checkingServices': '正在检查服务...', - 'misc.serviceUnavailable': '服务不可用', - 'misc.somethingWentWrong': '出现了一些问题', - 'misc.tryAgainLater': '请稍后重试。', - 'misc.restartApp': '重启应用', - 'misc.updateAvailable': '发现新版本', - 'misc.updateNow': '立即更新', - 'misc.updateLater': '稍后再说', - 'misc.downloading': '下载中...', - 'misc.installing': '安装中...', - 'misc.beta': '测试版', - 'misc.betaFeedback': '发送反馈', - 'mnemonic.title': '恢复短语', - 'mnemonic.warning': '按顺序记下这些单词,并将其保存在安全的地方。', - 'mnemonic.copyWarning': '永远不要分享你的恢复短语。任何拥有这些单词的人都可以访问你的账户。', - 'mnemonic.copied': '恢复短语已复制到剪贴板', - 'mnemonic.reveal': '显示短语', - 'mnemonic.revealPhrase': 'Reveal recovery phrase', - 'mnemonic.hidden': '恢复短语已隐藏', - 'privacy.title': '隐私与安全', - 'privacy.description': '发送到外部服务的数据透明度报告。', - 'privacy.empty': '未检测到外部数据传输。', - 'privacy.whatLeavesComputer': '离开你电脑的数据', - 'privacy.loading': '正在加载隐私详情...', - 'privacy.loadError': '无法加载实时隐私列表。下方的分析控件仍然可用。', - 'privacy.noCapabilities': '当前没有功能披露数据移动。', - 'privacy.sentTo': '发送至', - 'privacy.leavesDevice': '离开设备', - 'privacy.staysLocal': '留在本地', - 'privacy.anonymizedAnalytics': '匿名分析', - 'privacy.shareAnonymizedData': '分享匿名使用数据', - 'privacy.shareAnonymizedDataDesc': - '通过分享匿名崩溃报告和使用分析来帮助改进 OpenHuman。所有数据完全匿名——不会收集任何个人数据、消息、钱包密钥或会话信息。', - 'privacy.meetingFollowUps': '会议跟进', - 'privacy.autoHandoffMeet': '自动将 Google Meet 转录交给编排器', - 'privacy.autoHandoffMeetDesc': - '当 Google Meet 通话结束时,OpenHuman 的编排器可以阅读转录内容,并可能执行起草消息、安排跟进、或将摘要发布到已连接的 Slack 工作区等操作。默认关闭。', - 'privacy.analyticsDisclaimer': - '所有分析和错误报告完全匿名。启用后,我们仅收集崩溃信息、设备类型和错误的文件位置。我们永远不会访问你的消息、会话数据、钱包密钥、API 密钥或任何个人可识别信息。你可以随时更改此设置。', - 'settings.about.version': '版本', - 'settings.about.updateAvailable': '可用', - 'settings.about.softwareUpdates': '软件更新', - 'settings.about.lastChecked': '上次检查', - 'settings.about.checking': '检查中...', - 'settings.about.checkForUpdates': '检查更新', - 'settings.about.releases': '发布版本', - 'settings.about.releasesDesc': '在 GitHub 上浏览发布说明和早期版本。', - 'settings.about.openReleases': '打开 GitHub 发布', - 'settings.ai.overview': 'AI 系统概览', - 'migration.title': '从其他助手导入', - 'migration.description': - '将记忆和笔记从另一个本地助手迁移到此工作区。先点击「预览」查看将要变更的内容,然后点击「应用」复制数据。当前的记忆会先备份。', - 'migration.vendorLabel': '来源助手', - 'migration.sourceLabel': '来源工作区路径(可选)', - 'migration.sourcePlaceholder': '留空可自动检测(例如 ~/.openclaw/workspace)', - 'migration.sourcePlaceholderHermes': 'Leave blank to auto-detect (e.g. ~/.hermes)', - 'migration.sourceHint': - '留空时使用该助手的默认位置。如果你已将工作区移到其他位置,请填写明确路径。', - 'migration.previewAction': '预览', - 'migration.previewRunning': '正在预览…', - 'migration.applyAction': '应用导入', - 'migration.applyRunning': '正在导入…', - 'migration.applyDisclaimer': '只有对同一来源完成预览后才能应用。导入前会自动备份现有记忆。', - 'migration.reportTitlePreview': '预览 — 尚未导入任何数据', - 'migration.reportTitleApplied': '导入完成', - 'migration.report.source': '来源工作区', - 'migration.report.target': '目标工作区', - 'migration.report.fromSqlite': '来自 SQLite (brain.db)', - 'migration.report.fromMarkdown': '来自 Markdown', - 'migration.report.imported': '已导入', - 'migration.report.skippedUnchanged': '已跳过(未变更)', - 'migration.report.renamedConflicts': '冲突时已重命名', - 'migration.report.warnings': '警告', - 'migration.report.previewHint': '尚未导入任何数据。点击「应用导入」开始复制。', - 'migration.report.appliedHint': '导入的条目已加入你的记忆。如需再次比较,请重新运行预览。', - 'migration.confirmImport.singular': - '将 {count} 条数据导入当前工作区?\n\n来源:{source}\n目标:{target}\n\n导入前会先备份现有记忆。', - 'migration.confirmImport.plural': - '将 {count} 条数据导入当前工作区?\n\n来源:{source}\n目标:{target}\n\n导入前会先备份现有记忆。', - // Settings menu: Appearance + Mascot (#2225) - 'settings.appearance': '外观', - 'settings.appearanceDesc': '选择浅色、深色或跟随系统主题', - 'settings.mascot': '吉祥物', - 'settings.mascotDesc': '选择应用中使用的吉祥物颜色', - 'skills.integrationsSubtitle': - 'Cloud-based OAuth connections — sign in with your account and Composio brokers the tokens so agents can read and act on your behalf. No API keys to manage.', - 'skills.tabs.composio': 'Composio', - 'skills.tabs.channels': '渠道', - 'skills.tabs.mcp': 'MCP 服务器', - 'skills.mcpComingSoon.title': 'MCP 服务器', - 'skills.mcpComingSoon.description': - 'MCP server management is coming soon. This tab will be the home for discovering, connecting, and monitoring your MCP server integrations.', - 'settings.about.connection': '连接方式', - 'settings.about.connectionMode': '模式', - 'settings.about.connectionModeLocal': '本地', - 'settings.about.connectionModeCloud': '云', - 'settings.about.connectionModeUnset': '未选择', - 'settings.about.serverUrl': '服务器 URL', - 'settings.about.serverUrlUnavailable': '不可用', - 'settings.about.connectionHelperLocal': - 'Spawned in-process by the Tauri shell on app launch. The port is chosen at startup, so this URL changes between launches.', - 'settings.about.connectionHelperCloud': - 'Connected to a remote core. Change this in BootCheck or the cloud mode picker.', - 'settings.heartbeat.title': '心跳和循环', - 'settings.heartbeat.desc': '控制后台调度节奏并检查循环图。', - 'settings.ledgerUsage.title': '使用账本', - 'settings.ledgerUsage.desc': '最近的信贷支出、预算数学和背景 API 阅读预算。', - 'settings.costDashboard.title': 'Cost dashboard', - 'settings.costDashboard.desc': - '7-day spend and token burn across the swarm, with budget pace and per-model breakdown.', - 'settings.costDashboard.sevenDayCost': '7-day daily cost', - 'settings.costDashboard.sevenDayTokens': '7-day token usage', - 'settings.costDashboard.totalSpend': '7-day total', - 'settings.costDashboard.monthlyPace': 'Monthly pace', - 'settings.costDashboard.budgetLimit': 'Budget limit', - 'settings.costDashboard.utilization': 'Utilisation', - 'settings.costDashboard.modelBreakdown': 'Per-model breakdown', - 'settings.costDashboard.model': 'Model', - 'settings.costDashboard.provider': 'Provider', - 'settings.costDashboard.cost': 'Cost', - 'settings.costDashboard.tokens': 'Tokens', - 'settings.costDashboard.requests': 'Requests', - 'settings.costDashboard.percentOfTotal': '% of total', - 'settings.costDashboard.inputTokens': 'Input', - 'settings.costDashboard.outputTokens': 'Output', - 'settings.costDashboard.budgetNormal': 'On track', - 'settings.costDashboard.budgetWarning': 'Warning', - 'settings.costDashboard.budgetExceeded': 'Over budget', - 'settings.costDashboard.noBudget': 'No limit set', - 'settings.costDashboard.noData': 'No cost recorded yet for the last 7 days.', - 'settings.costDashboard.noModels': 'No model activity in the last 7 days.', - 'settings.costDashboard.loading': 'Loading cost dashboard…', - 'settings.costDashboard.disabledHint': - 'Cost dashboard is disabled in config. Set [cost.dashboard] enabled = true in config.toml to re-enable.', - 'settings.costDashboard.subtitle': - 'Live spend and token burn across the swarm. Bars auto-refresh every few seconds — no page reload needed.', - 'settings.costDashboard.summaryAriaLabel': 'Cost summary metrics', - 'settings.costDashboard.lastSevenDays': 'last 7 days', - 'settings.costDashboard.utilizationOf': 'of', - 'settings.costDashboard.thisMonth': 'this month', - 'settings.costDashboard.monthlyPaceHint': - 'Projected monthly spend at the current daily run-rate (avg × 30).', - 'settings.costDashboard.budgetLimitHint': - 'Monthly budget read from cost.monthly_limit_usd in config.toml.', - 'settings.costDashboard.dailyTarget': 'Daily target', - 'settings.costDashboard.today': 'Today', - 'settings.costDashboard.todayBadge': 'TODAY', - 'settings.costDashboard.unknownProvider': '—', - 'settings.costDashboard.justNow': 'Just now', - 'settings.costDashboard.secondsAgo': '{value}s ago', - 'settings.costDashboard.minutesAgo': '{value}m ago', - 'settings.costDashboard.hoursAgo': '{value}h ago', - 'settings.costDashboard.daysAgo': '{value}d ago', - 'settings.costDashboard.updated': 'Updated', - 'settings.costDashboard.refresh': 'Refresh', - 'settings.costDashboard.utcNote': 'Days bucketed in UTC', - 'settings.costDashboard.stackedNote': 'Input + output stacked', - 'settings.costDashboard.modelBreakdownHint': 'Aggregated across the last 7 days.', - 'settings.costDashboard.noDataHint': - 'Send an agent message — token usage from the next provider call will populate the chart within ~10 seconds.', - 'settings.search.title': '搜索引擎', - 'settings.search.menuDesc': - 'Default to OpenHuman-managed search or wire up your own provider with an API key.', - 'settings.search.description': - 'Pick the search engine the agent uses. Managed uses OpenHuman’s backend (no setup). Parallel, Brave, and Querit run direct from your machine using your API key.', - 'settings.search.engineAria': '搜索引擎', - 'settings.search.engineManagedLabel': 'OpenHuman 托管', - 'settings.search.engineManagedDesc': - 'Default. Routed through the OpenHuman backend — no API key required.', - 'settings.search.engineParallelLabel': 'Parallel', - 'settings.search.engineParallelDesc': - 'Direct Parallel API: search, extract, chat, research, enrich, dataset tools.', - 'settings.search.engineBraveLabel': 'Brave 搜索', - 'settings.search.engineBraveDesc': '直接Brave 搜索API:网络、新闻、图像和视频工具。', - 'settings.search.engineQueritLabel': 'Querit', - 'settings.search.engineQueritDesc': - 'Direct Querit API: web search with site, time range, country, and language filters.', - 'settings.search.statusConfigured': '已配置', - 'settings.search.statusNeedsKey': '需要 API 密钥', - 'settings.search.fallbackToManaged': - 'No key configured — search will fall back to Managed until a key is saved.', - 'settings.search.getApiKey': '获取 API 密钥', - 'settings.search.save': '保存', - 'settings.search.clear': '清除', - 'settings.search.show': '显示', - 'settings.search.hide': '隐藏', - 'settings.search.statusSaving': '正在保存...', - 'settings.search.statusSaved': '已保存。', - 'settings.search.statusError': '失败', - 'settings.search.parallelKeyLabel': 'Parallel API 键', - 'settings.search.braveKeyLabel': 'Brave 搜索 API 键', - 'settings.search.queritKeyLabel': 'Querit API 键', - 'settings.search.placeholderStored': '••••••••(已存储)', - 'settings.search.placeholderParallel': 'PK_...', - 'settings.search.placeholderBrave': 'BSA...', - 'settings.search.placeholderQuerit': 'Querit API key', - 'settings.embeddings.title': '向量嵌入', - 'settings.embeddings.description': - '选择将记忆转换为语义搜索向量的嵌入提供商。更改提供商、模型或维度会使已存储的向量无效,需要完全重置记忆。', - 'settings.embeddings.providerAria': '嵌入提供商', - 'settings.embeddings.statusConfigured': '已配置', - 'settings.embeddings.statusNeedsKey': '需要 API 密钥', - 'settings.embeddings.apiKeyLabel': '{provider} API 密钥', - 'settings.embeddings.placeholderStored': '••••••••(已存储)', - 'settings.embeddings.placeholderKey': '粘贴您的 API 密钥…', - 'settings.embeddings.keyStoredEncrypted': '您的 API 密钥已加密存储在此设备上。', - 'settings.embeddings.show': '显示', - 'settings.embeddings.hide': '隐藏', - 'settings.embeddings.save': '保存', - 'settings.embeddings.clear': '清除', - 'settings.embeddings.model': '模型', - 'settings.embeddings.dimensions': '维度', - 'settings.embeddings.customEndpoint': '自定义端点', - 'settings.embeddings.customModelPlaceholder': '模型名称', - 'settings.embeddings.customDimsPlaceholder': '维度', - 'settings.embeddings.applyCustom': '应用', - 'settings.embeddings.testConnection': '测试连接', - 'settings.embeddings.testing': '测试中…', - 'settings.embeddings.testSuccess': '已连接 — {dims} 维度', - 'settings.embeddings.testFailed': '失败:{error}', - 'settings.embeddings.saving': '保存中…', - 'settings.embeddings.saved': '已保存。', - 'settings.embeddings.errorPrefix': '失败', - 'settings.embeddings.wipeTitle': '重置记忆向量?', - 'settings.embeddings.wipeBody': - '更改嵌入提供商、模型或维度将删除所有已存储的记忆向量。记忆必须重新构建后检索才能再次工作。此操作无法撤消。', - 'settings.embeddings.cancel': '取消', - 'settings.embeddings.confirmWipe': '清除并应用', - 'settings.embeddings.setupTitle': '设置 {provider}', - 'settings.embeddings.saveAndSwitch': '保存并切换', - 'settings.embeddings.optional': '可选', - 'settings.embeddings.vectorSearchDisabled': - 'Vector search is disabled. Memory recall will use keyword matching and recency only — no semantic ranking.', - 'settings.embeddings.clearKey': '清除 API 密钥', - 'mcp.alphaBadge': '阿尔法', - 'mcp.alphaBannerText': - 'MCP server support is in early alpha. The Smithery registry, install flow, and tool wiring may misbehave or change shape between releases.', - 'mcp.toolList.noTools': '没有可用的工具。', - 'mcp.setup.secretDialog.title': 'MCP 设置 — 输入密码', - 'mcp.setup.secretDialog.bodyPrefix': 'MCP 设置代理需要', - 'mcp.setup.secretDialog.bodySuffix': - '. Your value is sent directly to the core process and never enters the AI conversation.', - 'mcp.setup.secretDialog.inputLabel': '价值', - 'mcp.setup.secretDialog.inputPlaceholder': '粘贴在这里', - 'mcp.setup.secretDialog.show': '显示', - 'mcp.setup.secretDialog.hide': '隐藏', - 'mcp.setup.secretDialog.submit': '提交', - 'mcp.setup.secretDialog.cancel': '取消', - 'mcp.setup.secretDialog.submitting': '正在提交...', - 'mcp.setup.secretDialog.errorPrefix': '提交失败:', - 'mcp.setup.secretDialog.privacyNote': - 'Stored encrypted in the local MCP secrets table. Never logged or sent to a model.', - 'devices.betaBadge': '贝塔', - 'devices.betaText': - 'This feature is currently in beta. Pair iOS phones with this OpenHuman to use them as a remote client.', - 'autonomy.title': '代理自主权', - 'autonomy.maxActionsLabel': '每小时最大动作数', - 'autonomy.maxActionsHelp': - 'Maximum tool actions an agent can run per rolling hour. New value applies to your next chat. Cron jobs and channel listeners keep their current limit until you restart OpenHuman.', - 'autonomy.statusSaving': '正在保存...', - 'autonomy.statusSaved': '已保存。', - 'autonomy.statusFailed': '失败', - 'autonomy.unlimitedNote': '无限制 — 禁用速率限制。', - 'autonomy.invalidIntegerMsg': - 'Must be a positive integer (use the Unlimited preset for no limit).', - 'autonomy.presetUnlimited': '无限制(默认)', - 'triggers.toggleFailed': '{trigger} 的 {action} 失败:{message}', - 'skills.composio.noApiKeyTitle': '未配置 Composio API 密钥', - 'skills.composio.noApiKeyDescription': - 'Local mode uses your own Composio API key. Open Settings → Advanced → Composio to add one before connecting integrations here.', - 'skills.composio.noApiKeyCta': '在设置中打开', - 'rewards.localUnavailable': - 'Local login does not earn rewards, coupons, or referral credit. To earn rewards, log out and continue by signing in with an OpenHuman account.', - 'rewards.localUnavailableCta': '开设账户设置', - 'channels.localManagedUnavailable': '本地用户无法使用托管频道。', - 'settings.search.localManagedUnavailable': - 'OpenHuman Managed search is not available for local users. Add your own Parallel, Brave, or Querit API key to enable web search.', - 'devices.comingSoonDescription': - 'Device pairing is coming soon. This page will be the home for pairing iPhones and managing connected devices.', - 'common.breadcrumb': '面包屑导航', - 'settings.betaBuild': '测试版构建 - v{version}', - 'migration.vendor.openclaw': 'OpenClaw', - 'migration.vendor.hermes': 'Hermes Agent', - 'onboarding.apiKeys.openaiOauthHint': - '可以使用 ChatGPT Plus/Pro 订阅或 OpenAI API 密钥,无需两者都提供。', - 'onboarding.apiKeys.openaiOauthOpening': '打开登录…', - 'onboarding.apiKeys.finishSignIn': '完成 ChatGPT 登录', - 'onboarding.apiKeys.orApiKey': '或 API 密钥', - 'calls.title': '通话', - 'calls.comingSoonBody': 'AI 辅助通话即将推出,敬请期待。', - 'rewards.referralSection.retry': '重试', - 'devOptions.sentryDisabled': '(无 ID,当前构建已禁用 Sentry)', - 'home.usageExhaustedTitle': '您的使用额度已耗尽', - 'home.usageExhaustedBody': '您当前已用完包含的使用额度。开始订阅以解锁更多持续容量。', - 'home.usageExhaustedCta': '开始订阅', - 'home.routinesCard': 'Your Routines', - 'home.routinesActive': '{count} active', - 'routines.title': 'Your Routines', - 'routines.subtitle': 'Things your assistant does automatically', - 'routines.loading': 'Loading routines…', - 'routines.empty': 'No routines yet', - 'routines.emptyHint': - 'Your assistant can run tasks on a schedule — like morning briefings or daily summaries.', - 'routines.refresh': 'Refresh', - 'routines.nextRun': 'Next run', - 'routines.lastRunSuccess': 'Last run succeeded', - 'routines.lastRunFailed': 'Last run failed', - 'routines.notRunYet': 'Not run yet', - 'routines.runNow': 'Run Now', - 'routines.running': 'Running…', - 'routines.viewHistory': 'View history', - 'routines.loadingHistory': 'Loading…', - 'routines.noHistory': 'No run history yet.', - 'routines.statusSuccess': 'Success', - 'routines.statusError': 'Error', - 'routines.showOutput': 'Show output', - 'routines.hideOutput': 'Hide output', - 'routines.toggleEnabled': 'Enable or disable this routine', - 'routines.typeAgent': 'Agent', - 'routines.typeCommand': 'Command', - 'nav.routines': 'Routines', - 'common.name': '名称', - 'settings.ai.disconnectProvider': '断开 {label}', - 'settings.ai.connectProviderLabel': '连接 {label}', - 'settings.ai.defaultLocalEndpoint': 'http://localhost:11434/v1', - 'settings.ai.endpointUrlLabel': '端点 URL', - 'settings.ai.localRuntimeHelper': - 'Where {label} is reachable. Default is localhost; point this at a remote host (for example, http://10.0.0.4:11434/v1) to use a shared instance.', - 'settings.ai.endpointUrlRequired': '端点 URL 是必需的。', - 'settings.ai.endpointProtocolRequired': '端点必须以 http:// 或 https://. 开头', - 'settings.ai.connectProviderDialog': '连接 {label}', - 'settings.ai.or': '或者', - 'settings.ai.openRouterOauthDescription': - 'Sign in with OpenRouter and import a user-controlled API key using PKCE.', - 'settings.ai.connecting': '正在连接...', - 'settings.ai.backgroundLoops': '背景循环', - 'settings.ai.backgroundLoopsDesc': - 'See what runs without a chat message, pause heartbeat work, and inspect recent credit ledger rows.', - 'settings.ai.heartbeatControls': '心跳控制', - 'settings.ai.heartbeatControlsDesc': - 'Defaults off. Enabling starts the loop; disabling aborts the running task.', - 'settings.ai.heartbeatLoop': '心跳循环', - 'settings.ai.heartbeatLoopDesc': - 'Master scheduler for planner + optional subconscious inference.', - 'settings.ai.subconsciousInference': '潜意识推理', - 'settings.ai.subconsciousInferenceDesc': - 'Runs model-backed task/reflection evaluation on heartbeat ticks.', - 'settings.ai.calendarMeetingChecks': '日历会议检查', - 'settings.ai.calendarMeetingChecksDesc': - 'Calls calendar event list for active Google Calendar connections.', - 'settings.ai.calendarCap': '日历帽', - 'settings.ai.connectionsPerTick': '{count} 康涅狄格州/蜱', - 'settings.ai.meetingLookahead': '会议前瞻', - 'settings.ai.minutesShort': '{count} 分钟', - 'settings.ai.reminderLookahead': '提醒前瞻', - 'settings.ai.cronReminderChecks': 'Cron 提醒检查', - 'settings.ai.cronReminderChecksDesc': '扫描启用的 cron 作业以查找类似提醒的即将发生的项目。', - 'settings.ai.relevantNotificationChecks': '相关通知检查', - 'settings.ai.relevantNotificationChecksDesc': - 'Promotes urgent local notifications into proactive alerts.', - 'settings.ai.externalDelivery': '外部交付', - 'settings.ai.externalDeliveryDesc': - 'Lets heartbeat alerts send proactive messages to external channels.', - 'settings.ai.interval': '间隔', - 'settings.ai.running': '运行...', - 'settings.ai.plannerTickNow': '规划师立即勾选', - 'settings.ai.loadingHeartbeatControls': '正在加载心跳控制...', - 'settings.ai.heartbeatControlsUnavailable': '心跳控制不可用。', - 'settings.ai.loopMap': '循环地图', - 'settings.ai.on': '上', - 'settings.ai.off': '关闭', - 'settings.ai.recentUsageLedger': '最近使用分类账', - 'settings.ai.recentUsageLedgerDesc': - 'Backend rows expose action/time today; source tags need backend support.', - 'settings.ai.openhumanDefault': 'OpenHuman(默认)', - 'settings.ai.localModelResolved': 'Ollama · {model}', - 'settings.ai.customRoutingForWorkload': '{label} 的自定义路由', - 'settings.ai.loadingModels': '正在加载模型...', - 'settings.ai.enterModelIdManually': '或手动输入型号 ID:', - 'settings.ai.modelIdPlaceholderForProvider': '{slug} 型号 ID', - 'settings.ai.modelIdPlaceholder': 'model-id', - 'settings.ai.selectModel': '选择型号...', - 'settings.ai.temperatureOverride': '温度超控', - 'settings.ai.temperatureOverrideSlider': '温度超控(滑块)', - 'settings.ai.temperatureOverrideValue': '温度超控(值)', - 'settings.ai.temperatureOverrideDesc': - 'Lower = more deterministic. Leave unchecked to use the provider default.', - 'settings.ai.testFailed': '测试失败', - 'settings.ai.testingModel': '测试模型...', - 'settings.ai.modelResponse': '模型响应', - 'settings.ai.providerWithValue': '提供者:{value}', - 'settings.ai.noneDash': '—', - 'settings.ai.promptHelloWorld': '提示:你好世界', - 'settings.ai.startedAt': '开始: {value}', - 'settings.ai.waitingForModelResponse': '正在等待所选型号的响应...', - 'settings.ai.response': '回应', - 'settings.ai.testing': '测试...', - 'settings.ai.test': '测试', - 'settings.ai.slugMissingError': '输入提供商名称以生成 slug。', - 'settings.ai.slugInUseError': '该提供商名称已被使用。', - 'settings.ai.slugReservedError': '选择不同的提供商名称。', - 'settings.ai.providerNamePlaceholder': '我的提供商', - 'settings.ai.slugLabel': '蛞蝓:', - 'settings.ai.openAiUrlLabel': 'OpenAI URL', - 'settings.ai.openAiUrlPlaceholder': 'https://api.openai.com/v1', - 'settings.ai.keepExistingKeyPlaceholder': '留空以保留现有密钥', - 'settings.ai.reindexingMemory': '重新索引内存', - 'settings.ai.reindexingMemoryMessage': - 'Embeddings are being reprocessed. {pending} memory item(s) are being re-embedded under the current model — semantic recall is reduced until this finishes. Keyword search keeps working, and re-embedding continues in the background if you close this.', - 'settings.ai.signInWithOpenRouter': '使用 OpenRouter 登录', - 'settings.ai.weekBudget': '周预算', - 'settings.ai.cycleRemaining': '剩余周期', - 'settings.ai.cycleTotalSpend': '周期总支出', - 'settings.ai.avgSpendRow': '平均支出行', - 'settings.ai.backgroundApiReads': 'Bg API 读取', - 'settings.ai.backgroundWakeups': '背景唤醒', - 'settings.ai.budgetMath': '预算数学', - 'settings.ai.rowsLeft': '剩余行数', - 'settings.ai.rowsPerFullWeekBudget': '每整周预算的行数', - 'settings.ai.sampleBurnRate': '样品燃烧率', - 'settings.ai.projectedEmpty': '预计空', - 'settings.ai.apiReadsPerDollarRemaining': 'API 每 $ 剩余读取次数', - 'settings.ai.loopCallBudget': '循环呼叫预算', - 'settings.ai.heartbeatTicks': '心跳滴答声', - 'settings.ai.calendarPlannerCalls': '日历规划师来电', - 'settings.ai.calendarFanoutCap': '日历扇出帽', - 'settings.ai.subconsciousModelCalls': '潜意识模型调用', - 'settings.ai.composioSyncScans': 'Composio 同步扫描', - 'settings.ai.totalBackgroundApiReadBudget': '总 bg API 读取预算', - 'settings.ai.memoryWorkerPolls': '内存工作者民意调查', - 'settings.ai.defaultProviderName': 'OpenHuman', - 'settings.ai.routing.managed': '托管', - 'settings.ai.routing.managedDesc': - 'OpenHuman will run all inference in the cloud, choose the best model for the task, optimize for cost, and keep the safest routing defaults.', - 'settings.ai.routing.managedMsg': - 'OpenHuman will handle all inference for every workload and automatically choose the best route for cost, quality, and security.', - 'settings.ai.routing.useYourOwn': '使用您自己的模型', - 'settings.ai.routing.useYourOwnDesc': - 'Choose one provider + model and route every workload through it. This is simple, but it can be inefficient because lightweight and heavyweight inference all share the same route.', - 'settings.ai.routing.advanced': '高级', - 'settings.ai.routing.advancedDesc': - 'Pick different models for different tasks. This is the best option for tight cost optimization and the most control.', - 'settings.ai.routing.customDesc': - 'Fine-grained routing gives you the best cost optimization and the most control. Use the rows below to decide which workloads stay Managed, which use your shared default, and which pin to a specific model.', - 'settings.ai.routing.chatAndConversations': '聊天和对话', - 'settings.ai.routing.chatDesc': - 'Models used during direct user interaction, replies, reasoning, agent loops, and coding help.', - 'settings.ai.routing.backgroundTasks': '后台任务', - 'settings.ai.routing.bgTasksDesc': - 'Models used outside the main conversation flow for summarization, heartbeat, learning, and subconscious evaluation.', - 'settings.ai.routing.addCustomProvider': '添加自定义提供商', - 'settings.ai.globalModel.title': '为所有事情选择一种型号', - 'settings.ai.globalModel.desc': - 'This routes all inference through one model. It is simpler, but it can be inefficient for cost and quality because lightweight and heavy tasks will all use the same route.', - 'settings.ai.globalModel.noProviders': - 'Add or connect a provider first. Then you can route every workload through one model here.', - 'settings.ai.globalModel.provider': '提供者', - 'settings.ai.globalModel.model': '型号', - 'settings.ai.globalModel.loadingModels': '正在加载模型...', - 'settings.ai.globalModel.enterModelId': '输入型号 ID', - 'settings.ai.globalModel.appliesToAll': - 'Applies the same provider + model to chat, reasoning, coding, memory, heartbeat, learning, and subconscious. Embeddings are configured separately. Changes save when you click save.', - 'settings.ai.globalModel.saving': '正在保存...', - 'settings.ai.globalModel.saved': '已保存', - 'settings.ai.workload.noModel': '未选择型号', - 'settings.ai.workload.changeModel': '改变模型', - 'settings.ai.workload.chooseModel': '选择型号', - 'settings.ai.provider.ollama': 'Ollama', - 'kbd.ariaLabel': '键盘快捷键:{shortcut}', - 'chat.modelPlaceholder': 'gpt-4o', - 'iosPair.title': '与您的桌面配对', - 'iosPair.instructions': - 'Open OpenHuman on your desktop, go to Settings > Devices, and tap "Pair phone" to show the QR code.', - 'iosPair.scanQrCode': '扫描QR code', - 'iosPair.scannerOpening': '扫描仪打开...', - 'iosPair.connecting': '正在连接到桌面...', - 'iosPair.connectedLoading': '已连接!正在加载...', - 'iosPair.expired': 'QR code 已过期。要求桌面重新生成代码。', - 'iosPair.desktopLabel': '桌面', - 'iosPair.retryScan': '重试扫描', - 'iosPair.step.openDesktop': '在桌面上打开 OpenHuman', - 'iosPair.step.openSettings': '转至设置 > 设备', - 'iosPair.step.showQr': '点击“配对手机”以显示 QR', - 'iosPair.error.camera': '相机扫描失败。检查相机权限并重试。', - 'iosPair.error.invalidQr': - 'Invalid QR code. Make sure you are scanning an OpenHuman pairing code.', - 'iosPair.error.unreachableDesktop': - 'Could not reach the desktop. Make sure both devices are online and try again.', - 'iosPair.error.connectionFailed': - 'Connection failed. Make sure the desktop app is running and try again.', - 'iosMascot.defaultPairedLabel': '桌面', - 'iosMascot.connectedTo': '连接到', - 'iosMascot.disconnect': '断开连接', - 'iosMascot.pushToTalk': '一键通话', - 'iosMascot.thinking': '想着……', - 'iosMascot.typeMessage': '输入消息...', - 'iosMascot.sendMessage': '发送消息', - 'iosMascot.error.generic': '出了点问题。请再试一次。', - 'iosMascot.error.sendFailed': '发送失败。检查您的连接。', - 'settings.companion.title': '桌面伴侣', - 'settings.companion.session': '会议', - 'settings.companion.activeLabel': '活跃', - 'settings.companion.inactiveStatus': '不活跃', - 'settings.companion.stopping': '停止…', - 'settings.companion.stopSession': '停止会话', - 'settings.companion.starting': '开始…', - 'settings.companion.startSession': '开始会话', - 'settings.companion.sessionId': '会话ID', - 'settings.companion.turns': '转弯', - 'settings.companion.remaining': '剩余', - 'settings.companion.configuration': '配置', - 'settings.companion.hotkey': '热键', - 'settings.companion.activationMode': '激活模式', - 'settings.companion.sessionTtl': '会话生存时间', - 'settings.companion.screenCapture': '屏幕截图', - 'settings.companion.appContext': '应用程序上下文', - 'settings.composio.title': 'Composio', - 'settings.composio.apiKeyExamplePlaceholder': 'ck_live_xxxxxxxxxxxxxxxxxx', - 'composio.integrationSlugsHelp': '以逗号分隔的集成段,例如', - 'composio.integrationSlugsExample': 'Gmail、松弛', - 'composio.integrationSlugsCaseInsensitive': '不区分大小写。', - 'composio.integrationSlugsPlaceholder': 'Gmail、松弛、...', - 'team.members': '会员', - 'team.membersDesc': '管理团队成员和角色', - 'team.invites': '邀请', - 'team.invitesDesc': '生成和管理邀请码', - 'team.settings': '团队设置', - 'team.settingsDesc': '编辑团队名称和设置', - 'team.editSettings': '编辑团队设置', - 'team.enterName': '输入团队名称', - 'team.saving': '正在保存...', - 'team.saveChanges': '保存更改', - 'team.delete': '删除团队', - 'team.deleteDesc': '永久删除该团队', - 'team.deleting': '正在删除...', - 'team.failedToUpdate': '更新团队失败', - 'team.failedToDelete': '删除团队失败', - 'team.manageTitle': '管理 {name}', - 'team.planCreated': '{plan} 计划 • 创建 {date}', - 'team.confirmDelete': '您确定要删除 {name} 吗?', - 'team.deleteWarning': '此操作无法撤消。所有团队数据将被永久删除。', - 'welcome.clearingAppData': '清除应用程序数据...', - 'welcome.clearAppDataAndRestart': '清除应用数据并重启', - 'welcome.clearAppDataWarning': - 'This wipes locally stored secrets and accounts on this device. Your cloud account is unaffected - you can sign in again right after.', - 'welcome.resetErrorFallback': - 'Could not clear app data. Please quit and reopen OpenHuman, then try again.', - 'welcome.signingIn': '正在为您签名...', - 'welcome.termsIntro': '继续即表示您同意', - 'welcome.termsOfUse': '条款', - 'welcome.termsJoiner': '和', - 'welcome.privacyPolicy': '隐私政策', - 'welcome.termsOutro': '.', - 'chat.addReaction': '添加反应', - 'chat.agentProfile.create': '创建代理资料', - 'chat.agentProfile.createFailed': '无法创建代理配置文件。', - 'chat.agentProfile.customDescription': '定制代理资料', - 'chat.agentProfile.defaultAgentLabel': '协调者', - 'chat.agentProfile.exists': '代理配置文件“{name}”已存在。', - 'chat.agentProfile.label': '代理简介', - 'chat.agentProfile.namePlaceholder': '个人资料名称', - 'chat.agentProfile.promptStylePlaceholder': '提示风格', - 'chat.agentProfile.allowedToolsPlaceholder': '允许使用的工具', - 'chat.backToThread': '返回{title}', - 'chat.parentThread': '父线程', - 'chat.removeReaction': '删除 {emoji}', - 'invites.generate': '生成邀请', - 'invites.generating': '生成...', - 'invites.refreshing': '正在刷新邀请...', - 'invites.loading': '正在加载邀请...', - 'invites.copyCodeAria': '复制邀请码', - 'invites.revokeAria': '撤销邀请', - 'invites.usedUp': '用完', - 'invites.uses': '用途: {current}{max}', - 'invites.expiresOn': '过期 {date}', - 'invites.empty': '还没有邀请', - 'invites.emptyHint': '生成邀请码与他人分享', - 'invites.revokeTitle': '撤销邀请码', - 'invites.revokePromptPrefix': '您确定要撤销邀请码吗', - 'invites.revokeWarning': - 'This invite code will no longer be valid and cannot be used to join the team.', - 'invites.revoking': '撤销...', - 'invites.revokeAction': '撤销邀请', - 'invites.failedGenerate': '生成邀请失败', - 'invites.failedRevoke': '撤销邀请失败', - 'team.refreshingMembers': '正在刷新会员...', - 'team.loadingMembers': '正在加载会员...', - 'team.memberCount': '{count} 成员', - 'team.memberCountPlural': '{count} 成员', - 'team.you': '(你)', - 'team.removeAria': '删除 {name}', - 'team.noMembers': '没有找到会员', - 'team.removeTitle': '删除团队成员', - 'team.removePromptPrefix': '您确定要删除吗', - 'team.removePromptSuffix': '来自团队?', - 'team.removeWarning': 'They will lose access to the team and all team resources.', - 'team.removing': '正在删除...', - 'team.removeAction': '删除会员', - 'team.changeRoleTitle': '更改成员角色', - 'team.changeRolePrompt': "Change {name}'s role from {oldRole} to {newRole}?", - 'team.changeRoleAdminGrant': - 'This will grant them full admin permissions including the ability to manage team members.', - 'team.changeRoleAdminRemove': - 'This will remove their admin permissions and they will no longer be able to manage the team.', - 'team.changing': '改变...', - 'team.changeRoleAction': '改变角色', - 'team.failedChangeRole': '角色变更失败', - 'team.failedRemoveMember': '删除会员失败', - 'voice.failedToLoadSettings': '无法加载语音设置', - 'voice.failedToSaveSettings': '无法保存语音设置', - 'voice.failedToStartServer': '语音服务器启动失败', - 'voice.failedToStopServer': '停止语音服务器失败', - 'voice.sttDisabledPrefix': - 'Voice dictation is disabled until the local STT model is downloaded. Use the', - 'voice.sttDisabledSuffix': '上面的部分安装 Whisper。', - 'voice.debug.failedToLoadVoiceDebugData': '加载语音调试数据失败', - 'voice.debug.settingsSaved': '已保存调试设置。', - 'voice.debug.failedToSaveSettings': '无法保存语音设置', - 'voice.debug.runtimeStatus': '运行时状态', - 'voice.debug.runtimeStatusDesc': - 'Live diagnostics for the voice server and speech-to-text engine.', - 'voice.debug.server': '服务器', - 'voice.debug.unavailable': '不可用', - 'voice.debug.ready': '准备好', - 'voice.debug.notReady': '还没准备好', - 'voice.debug.hotkey': '热键', - 'voice.debug.notAvailable': '不适用', - 'voice.debug.mode': '模式', - 'voice.debug.transcriptions': '转录', - 'voice.debug.serverError': '服务器错误', - 'voice.debug.advancedSettings': '高级设置', - 'voice.debug.advancedSettingsDesc': - 'Low-level tuning parameters for recording and silence detection.', - 'voice.debug.minimumRecordingSeconds': '最短录音秒数', - 'voice.debug.silenceThreshold': '静音阈值 (RMS)', - 'voice.debug.silenceThresholdDesc': - 'Recordings with energy below this are treated as silence and skipped. Lower = more sensitive.', - 'voice.providers.saved': '语音提供商已保存。', - 'voice.providers.failedToSave': '无法保存语音提供商', - 'voice.providers.ellipsis': '…', - 'voice.providers.installing': '安装中', - 'voice.providers.installingBusy': '正在安装...', - 'voice.providers.reinstallLocally': '本地重新安装', - 'voice.providers.repair': '修复', - 'voice.providers.retryLocally': '本地重试', - 'voice.providers.installLocally': '本地安装', - 'voice.providers.whisperReady': '耳语准备好了。', - 'voice.providers.whisperInstallStarted': '耳语安装开始', - 'voice.providers.queued': '排队', - 'voice.providers.failedToInstallWhisper': '安装耳语失败', - 'voice.providers.piperReady': '派珀准备好了。', - 'voice.providers.piperInstallStarted': 'Piper 安装开始', - 'voice.providers.failedToInstallPiper': '安装 Piper 失败', - 'voice.providers.title': '语音提供商', - 'voice.providers.desc': - 'Choose where transcription and synthesis run. Use the Install locally buttons to download the binaries and models into your workspace. Local providers can be saved before the install finishes — no manual WHISPER_BIN or PIPER_BIN setup required.', - 'voice.providers.sttProvider': '语音转文本提供商', - 'voice.providers.sttProviderAria': 'STT 提供商', - 'voice.providers.cloudWhisperProxy': '云(耳语代理)', - 'voice.providers.localWhisper': '本地耳语', - 'voice.providers.installRequired': ' (需要安装)', - 'voice.providers.whisperInstalledTitle': '耳语已安装。单击重新安装。', - 'voice.providers.whisperDownloadTitle': - 'Download whisper.cpp and the GGML model into your workspace.', - 'voice.providers.installed': '已安装', - 'voice.providers.installFailed': '安装失败', - 'voice.providers.notInstalled': '未安装', - 'voice.providers.whisperModel': '耳语模型', - 'voice.providers.whisperModelAria': '耳语模型', - 'voice.providers.whisperModelTiny': '很小(39 MB,最快)', - 'voice.providers.whisperModelBase': '基础 (74 MB)', - 'voice.providers.whisperModelSmall': '小 (244 MB)', - 'voice.providers.whisperModelMedium': '中型(769 MB,推荐)', - 'voice.providers.whisperModelLargeTurbo': '大型 v3 Turbo(1.5 GB,最佳精度)', - 'voice.providers.ttsProvider': '文本转语音提供商', - 'voice.providers.ttsProviderAria': 'TTS 提供商', - 'voice.providers.cloudElevenLabsProxy': '云(ElevenLabs 代理)', - 'voice.providers.localPiper': '当地风笛手', - 'voice.providers.piperInstalledTitle': 'Piper 已安装。单击重新安装。', - 'voice.providers.piperDownloadTitle': - 'Download Piper and the bundled en_US-lessac-medium voice into your workspace.', - 'voice.providers.piperVoice': '派珀之声', - 'voice.providers.piperVoiceAria': '吹笛者的声音', - 'voice.providers.customVoiceOption': '其他(在下面输入)...', - 'voice.providers.customVoiceAria': 'Piper 语音 ID(自定义)', - 'voice.providers.customVoicePlaceholder': 'en_US-lessac-medium', - 'voice.providers.piperVoicesDesc': - 'Voices come from huggingface.co/rhasspy/piper-voices. Switching voices may require an Install/Reinstall click to download the new .onnx.', - 'voice.providers.mascotVoice': '吉祥物声音', - 'voice.providers.mascotVoiceDescPrefix': - 'The ElevenLabs voice the mascot uses for spoken replies is configured under', - 'voice.providers.mascotSettings': '吉祥物设置', - 'voice.providers.mascotVoiceDescSuffix': '.', - 'voice.providers.hotkeyPlaceholder': 'Fn', - 'voice.providers.piperPreset.lessacMedium': '美国·Lessac(中性,推荐)', - 'voice.providers.piperPreset.lessacHigh': '美国·Lessac(更高品质,更大)', - 'voice.providers.piperPreset.ryanMedium': '美国·瑞安(男)', - 'voice.providers.piperPreset.amyMedium': '美国·艾米(女)', - 'voice.providers.piperPreset.librittsHigh': '美国·LibriTTS(多扬声器)', - 'voice.providers.piperPreset.alanMedium': 'GB·艾伦(男)', - 'voice.providers.piperPreset.jennyDiocoMedium': 'GB·珍妮·迪奥科(女)', - 'voice.providers.piperPreset.northernEnglishMaleMedium': 'GB·北方英语(男)', - 'voice.providers.chip.cloud': 'OpenHuman (Managed)', - 'voice.providers.chip.cloudAria': 'OpenHuman managed provider is always enabled', - 'voice.providers.chip.whisper': 'Whisper (Local)', - 'voice.providers.chip.enableWhisper': 'Enable local Whisper STT', - 'voice.providers.chip.disableWhisper': 'Disable local Whisper STT', - 'voice.providers.chip.piper': 'Piper (Local)', - 'voice.providers.chip.enablePiper': 'Enable local Piper TTS', - 'voice.providers.chip.disablePiper': 'Disable local Piper TTS', - 'voice.providers.chip.enableProvider': 'Enable', - 'voice.providers.chip.disableProvider': 'Disable', - 'voice.providers.chip.apiKeyLabel': 'API Key', - 'voice.providers.chip.apiKeyPlaceholder': 'sk-…', - 'voice.providers.chip.comingSoon': 'coming soon', - 'voice.modal.title': 'Configure', - 'voice.modal.desc': - 'Enter your API key to enable this provider. You can test the connection before saving.', - 'voice.modal.testKey': 'Test Key', - 'voice.modal.testing': 'Testing…', - 'voice.modal.saveAndEnable': 'Save & Enable', - 'voice.modal.enable': 'Enable', - 'voice.modal.whisperDesc': - 'Choose a model size and install the Whisper binary and GGML model into your workspace. Larger models are more accurate but slower.', - 'voice.modal.piperDesc': - 'Choose a voice and install the Piper binary and ONNX model into your workspace. Piper runs fully offline with low latency.', - 'voice.routing.title': 'Voice Routing', - 'voice.routing.desc': 'Choose which enabled providers handle speech-to-text and text-to-speech.', - 'voice.routing.save': 'Save', - 'voice.routing.testStt': 'Test STT', - 'voice.routing.testTts': 'Test TTS', - 'voice.routing.elevenlabsVoice': 'ElevenLabs Voice', - 'voice.routing.elevenlabsVoiceAria': 'ElevenLabs voice selection', - 'voice.routing.elevenlabsVoiceIdAria': 'ElevenLabs voice ID (custom)', - 'voice.routing.elevenlabsVoiceDesc': - 'Pick a curated voice or paste a custom voice ID from your ElevenLabs dashboard.', - 'voice.externalProviders.title': 'External Voice Providers', - 'voice.externalProviders.desc': - 'Connect third-party STT/TTS APIs like Deepgram, ElevenLabs, or OpenAI directly.', - 'voice.externalProviders.keySet': 'Key set', - 'voice.externalProviders.noKey': 'No API key', - 'voice.externalProviders.test': 'Test', - 'voice.externalProviders.testing': 'Testing…', - 'voice.externalProviders.remove': 'Remove', - 'voice.externalProviders.provider': 'Provider', - 'voice.externalProviders.selectProvider': 'Select a provider…', - 'voice.externalProviders.apiKey': 'API Key', - 'voice.externalProviders.apiKeyPlaceholder': 'sk-…', - 'voice.externalProviders.add': 'Add', - 'screenAwareness.debug.debugAndDiagnostics': '调试与诊断', - 'screenAwareness.debug.collapse': '崩溃', - 'screenAwareness.debug.expand': '展开', - 'screenAwareness.debug.failedToSave': '保存屏幕情报失败', - 'screenAwareness.debug.policyTitle': '屏幕情报政策', - 'screenAwareness.debug.baselineFps': '基线 FPS', - 'screenAwareness.debug.useVisionModel': '使用视觉模型', - 'screenAwareness.debug.useVisionModelDesc': - 'Send screenshots to a vision LLM for richer context. When off, only OCR text is used with a text LLM — faster and no vision model required.', - 'screenAwareness.debug.keepScreenshots': '保留截图', - 'screenAwareness.debug.keepScreenshotsDesc': - 'Save captured screenshots to the workspace instead of deleting after processing', - 'screenAwareness.debug.allowlist': '允许列表(每行一条规则)', - 'screenAwareness.debug.denylist': '拒绝名单(每行一条规则)', - 'screenAwareness.debug.saveSettings': '保存屏幕智能设置', - 'screenAwareness.debug.sessionStats': '会话统计', - 'screenAwareness.debug.framesEphemeral': '框架(临时)', - 'screenAwareness.debug.panicStop': '紧急停止', - 'screenAwareness.debug.defaultPanicHotkey': 'Cmd+Shift+。', - 'screenAwareness.debug.vision': '愿景', - 'screenAwareness.debug.idle': '空闲', - 'screenAwareness.debug.visionQueue': '视觉队列', - 'screenAwareness.debug.lastVision': '最后的愿景', - 'screenAwareness.debug.notAvailable': '不适用', - 'screenAwareness.debug.visionSummaries': '愿景摘要', - 'screenAwareness.debug.refreshing': '清爽…', - 'screenAwareness.debug.noSummaries': '还没有总结。', - 'screenAwareness.debug.unknownApp': '未知应用程序', - 'screenAwareness.debug.macosOnly': 'Screen Intelligence V1 目前仅在 macOS 上受支持。', - 'memory.debugTitle': '内存调试', - 'memory.documents': '文件', - 'memory.filterByNamespace': '按名称空间过滤...', - 'memory.refresh': '刷新', - 'memory.noDocumentsFound': '没有找到文件。', - 'memory.delete': '删除', - 'memory.rawResponse': '原始响应', - 'memory.namespaces': '命名空间', - 'memory.noNamespacesFound': '未找到名称空间。', - 'memory.queryRecall': '查询与召回', - 'memory.namespace': '命名空间', - 'memory.queryText': '查询文字...', - 'memory.defaultMaxChunks': '10', - 'memory.maxChunks': '最大块数', - 'memory.query': '查询', - 'memory.recall': '召回', - 'memory.queryLabel': '查询', - 'memory.recallLabel': '召回', - 'memory.queryResult': '查询结果', - 'memory.recallResult': '调用结果', - 'memory.clearNamespace': '清除命名空间', - 'memory.clearNamespaceDescription': '永久删除命名空间内的所有文档。', - 'memory.selectNamespace': '选择命名空间...', - 'memory.exampleNamespace': '例如技能:gmail:user@example.com', - 'memory.clear': '清除', - 'memory.deleteConfirm': '删除命名空间“{namespace}”中的文档“{documentId}”吗?', - 'memory.clearNamespaceConfirm': - 'This will permanently delete ALL documents in namespace "{namespace}". Continue?', - 'memory.clearNamespaceSuccess': '命名空间“{namespace}”已清除。', - 'memory.clearNamespaceEmpty': '“{namespace}”中没有需要清除的内容。', - 'webhooks.debugTitle': 'Webhooks 调试', - 'webhooks.failedToLoadDebugData': '无法加载 webhook 调试数据', - 'webhooks.clearLogsConfirm': '清除所有捕获的 Webhook 调试日志吗?', - 'webhooks.failedToClearLogs': '无法清除 webhook 日志', - 'webhooks.loading': '正在加载...', - 'webhooks.refresh': '刷新', - 'webhooks.clearing': '清算...', - 'webhooks.clearLogs': '清除日志', - 'webhooks.registered': '已注册', - 'webhooks.captured': '被捕获', - 'webhooks.live': '直播', - 'webhooks.disconnected': '断开连接', - 'webhooks.lastEvent': '最后活动', - 'webhooks.at': '在', - 'webhooks.registeredWebhooks': '注册网络钩子', - 'webhooks.noActiveRegistrations': '没有活跃的注册。', - 'webhooks.resolvingBackendUrl': '正在解析后端 URL...', - 'webhooks.capturedRequests': '捕获的请求', - 'webhooks.noRequestsCaptured': '尚未捕获任何 Webhook 请求。', - 'webhooks.unrouted': '未布线的', - 'webhooks.pending': '待定', - 'webhooks.requestHeaders': '请求标头', - 'webhooks.queryParams': '查询参数', - 'webhooks.requestBody': '请求正文', - 'webhooks.responseHeaders': '响应头', - 'webhooks.responseBody': '响应体', - 'webhooks.rawPayload': '原始有效负载', - 'webhooks.empty': '[空]', - 'providerSetup.error.defaultDetails': '提供商设置失败。', - 'providerSetup.error.providerFallback': '提供者', - 'providerSetup.error.credentialsRejected': - '{provider} rejected the credentials. Check the API key and try again.', - 'providerSetup.error.endpointNotRecognized': - '{provider} did not recognize the endpoint. Check the base URL and try again.', - 'providerSetup.error.providerUnavailable': - '{provider} is unavailable right now. Try again or check the provider status.', - 'providerSetup.error.unreachable': - 'Could not reach {provider}. Check the endpoint URL and network connection, then try again.', - 'providerSetup.error.couldNotReachWithMessage': '无法到达 {provider}:{message}', - 'providerSetup.error.technicalDetails': '技术细节', - 'devices.title': '设备', - 'devices.pairIphone': '配对 iPhone', - 'devices.noPaired': '没有配对的设备', - 'devices.emptyState': '扫描 iPhone 上的 QR code 将其连接到此 OpenHuman 会话。', - 'devices.devicePairedTitle': '设备已配对', - 'devices.devicePairedMessage': 'iPhone 连接成功。', - 'devices.deviceRevokedTitle': '设备已撤销', - 'devices.deviceRevokedMessage': '{label} 已删除。', - 'devices.revokeFailedTitle': '撤销失败', - 'devices.online': '在线', - 'devices.offline': '离线', - 'devices.lastSeenNever': '从来没有', - 'devices.lastSeenNow': '刚才', - 'devices.lastSeenMinutes': '{count}分钟前', - 'devices.lastSeenHours': '{count} 小时前', - 'devices.lastSeenDays': '{count} 天前', - 'devices.revoke': '撤销', - 'devices.revokeAria': '撤销 {label}', - 'devices.confirmRevokeTitle': '撤销设备?', - 'devices.confirmRevokeBody': '{label} 将无法再连接。此操作无法撤消。', - 'devices.loadFailed': '无法加载设备:{message}', - 'devices.pairModal.title': '配对 iPhone', - 'devices.pairModal.loading': '正在生成配对代码...', - 'devices.pairModal.instructions': '打开 iPhone 上的 OpenHuman 应用程序并扫描此代码。', - 'devices.pairModal.expiresIn': '代码将在 ~{count} 分钟后过期', - 'devices.pairModal.expiresInPlural': '代码将在 ~{count} 分钟后过期', - 'devices.pairModal.showDetails': '显示详情', - 'devices.pairModal.hideDetails': '隐藏详细信息', - 'devices.pairModal.channelId': '通道号', - 'devices.pairModal.pairingUrl': '配对URL', - 'devices.pairModal.expiredTitle': 'QR code 已过期', - 'devices.pairModal.expiredBody': '生成新代码以继续配对。', - 'devices.pairModal.generateNewCode': '生成新代码', - 'devices.pairModal.successTitle': '与 iPhone 配对', - 'devices.pairModal.autoClose': '自动关闭...', - 'devices.pairModal.errorPrefix': '无法创建配对:{message}', - 'devices.pairModal.errorTitle': '出了点问题', - 'devices.pairModal.copyUrl': '复制', - 'mcp.catalog.searchAria': '搜索锻造目录', - 'mcp.catalog.searchPlaceholder': '搜索锻造目录...', - 'mcp.catalog.loadFailed': '加载目录失败', - 'mcp.catalog.noResults': '未找到服务器。', - 'mcp.catalog.noResultsFor': '找不到“{query}”的服务器。', - 'mcp.catalog.loadMore': '加载更多', - 'mcp.configAssistant.title': '配置助手', - 'mcp.configAssistant.empty': '询问配置、所需的环境变量或设置步骤。', - 'mcp.configAssistant.suggestedValues': '建议值:', - 'mcp.configAssistant.valueHidden': '(隐藏值)', - 'mcp.configAssistant.applySuggested': '应用建议值', - 'mcp.configAssistant.reinstallHint': '使用这些值重新安装以应用它们。', - 'mcp.configAssistant.thinking': '想着……', - 'mcp.configAssistant.inputPlaceholder': '提出问题(Enter 发送,Shift+Enter 换行)', - 'mcp.configAssistant.send': '发送', - 'mcp.configAssistant.failedResponse': '未能得到回复', - 'mcp.toolList.availableSingular': '{count} 工具可用', - 'mcp.toolList.availablePlural': '{count} 可用工具', - 'mcp.toolList.tryTool': 'Try', - 'mcp.toolList.tryToolAria': 'Open execution playground for {name}', - 'mcp.playground.title': 'Run {name}', - 'mcp.playground.close': 'Close playground', - 'mcp.playground.inputSchema': 'Input schema', - 'mcp.playground.argsLabel': 'Arguments (JSON)', - 'mcp.playground.argsHelp': 'Type JSON matching the input schema. Empty input is treated as {}.', - 'mcp.playground.runShortcut': '⌘/Ctrl + Enter to run', - 'mcp.playground.format': 'Format', - 'mcp.playground.invalidJson': 'Invalid JSON', - 'mcp.playground.run': 'Run tool', - 'mcp.playground.running': 'Running…', - 'mcp.playground.result': 'Result', - 'mcp.playground.resultError': 'Tool returned an error', - 'mcp.playground.copyResult': 'Copy result', - 'mcp.playground.copied': 'Copied', - 'mcp.playground.history': 'History', - 'mcp.playground.historyEmpty': 'No invocations yet in this session.', - 'mcp.playground.historyLoad': 'Load', - 'mcp.playground.unexpectedError': 'Unexpected error invoking tool.', - 'mcp.catalog.deployed': '已部署', - 'mcp.catalog.installCount': '{count} 安装', - 'app.update.dismissNotification': '关闭更新通知', - 'bootCheck.rpcAuthSuffix': '在每个 RPC 上。', - 'mcp.installed.title': '已安装', - 'mcp.installed.browseCatalog': '浏览目录', - 'mcp.installed.empty': '尚未安装 MCP 服务器。', - 'mcp.installed.toolSingular': '{count} 工具', - 'mcp.installed.toolPlural': '{count} 工具', - 'mcp.health.title': 'Health', - 'mcp.health.summaryAria': 'MCP connection health summary', - 'mcp.health.connectedCount': '{count} connected', - 'mcp.health.connectingCount': '{count} connecting', - 'mcp.health.errorCount': '{count} error', - 'mcp.health.disconnectedCount': '{count} idle', - 'mcp.health.retryAll': 'Retry all ({count})', - 'mcp.health.retryAllAria': 'Retry all {count} errored MCP servers', - 'mcp.health.disconnectAll': 'Disconnect all ({count})', - 'mcp.health.disconnectAllAria': 'Disconnect all {count} connected MCP servers', - 'mcp.health.disconnectConfirm.title': 'Disconnect all MCP servers?', - 'mcp.health.disconnectConfirm.body': - 'This will disconnect {count} currently-connected MCP servers. Installed configurations and secrets are kept; you can reconnect any server later.', - 'mcp.health.disconnectConfirm.cancel': 'Cancel', - 'mcp.health.disconnectConfirm.confirm': 'Disconnect all', - 'mcp.health.opErrorGeneric': 'Bulk operation failed. See logs.', - 'mcp.health.bulkPartialFailure': '{failed} of {total} servers failed. See logs.', - 'mcp.installed.search.landmarkAria': 'Search installed MCP servers', - 'mcp.installed.search.inputAria': 'Filter installed MCP servers by name', - 'mcp.installed.search.placeholder': 'Filter servers…', - 'mcp.installed.search.clearAria': 'Clear filter', - 'mcp.installed.search.countMatches': '{shown} of {total} servers', - 'mcp.installed.search.noMatches': 'No servers match "{query}".', - 'mcp.inventory.openButton': 'Inventory', - 'mcp.inventory.openAria': 'Open the sharable MCP inventory panel', - 'mcp.inventory.title': 'Sharable MCP Inventory', - 'mcp.inventory.subtitle': - 'Export your installed MCP servers as a portable, secret-free manifest, or import one from a teammate. Secret env values are never included or imported.', - 'mcp.inventory.close': 'Close inventory panel', - 'mcp.inventory.tablistAria': 'Inventory sections', - 'mcp.inventory.tab.export': 'Export', - 'mcp.inventory.tab.import': 'Import', - 'mcp.inventory.export.empty': - 'No MCP servers installed yet — nothing to export. Install one from the catalog first.', - 'mcp.inventory.export.privacyTitle': 'What is in this manifest', - 'mcp.inventory.export.privacyBody': - 'Server names, qualified names, env-variable KEY NAMES, and non-secret config only. Secret values, your machine identifiers, and per-install timestamps are intentionally stripped.', - 'mcp.inventory.export.serverCount': '{count} servers in this manifest', - 'mcp.inventory.export.copy': 'Copy', - 'mcp.inventory.export.copied': 'Copied', - 'mcp.inventory.export.copyAria': 'Copy the manifest JSON to the clipboard', - 'mcp.inventory.export.download': 'Download', - 'mcp.inventory.export.downloadAria': 'Download the manifest as a JSON file', - 'mcp.inventory.import.trustTitle': 'Treat imported manifests as untrusted code', - 'mcp.inventory.import.trustBody': - 'An MCP server is a tool you grant your agent. Only import manifests from sources you trust. Each install requires your explicit click; nothing is auto-installed.', - 'mcp.inventory.import.pasteLabel': 'Paste manifest JSON', - 'mcp.inventory.import.pastePlaceholder': 'Paste a manifest here, or upload a .json file below.', - 'mcp.inventory.import.preview': 'Preview', - 'mcp.inventory.import.clear': 'Clear', - 'mcp.inventory.import.uploadFile': 'or upload a .json file', - 'mcp.inventory.import.uploadFileAria': 'Upload a manifest .json file', - 'mcp.inventory.import.fileTooLarge': 'File is too large (over 1 MB). Refusing to load.', - 'mcp.inventory.import.fileReadFailed': 'Could not read file.', - 'mcp.inventory.import.parseErrorPrefix': 'Could not parse manifest:', - 'mcp.inventory.import.previewHeading': 'Preview', - 'mcp.inventory.import.previewCounts': - '{total} servers — {newly} new, {already} already installed', - 'mcp.inventory.import.previewEmpty': 'Manifest contains no servers.', - 'mcp.inventory.import.exportedFrom': 'Exported from {exporter}', - 'mcp.inventory.import.exportedAt': 'at {when}', - 'mcp.inventory.import.statusNew': 'New', - 'mcp.inventory.import.statusAlreadyInstalled': 'Already installed', - 'mcp.inventory.import.envKeysLabel': 'Env keys', - 'mcp.inventory.import.install': 'Install', - 'mcp.inventory.import.installAria': 'Install {name} from this manifest', - 'mcp.inventory.import.skipped': 'skipped', - 'mcp.inventory.parseError.empty': 'Manifest is empty.', - 'mcp.inventory.parseError.invalidJson': 'Invalid JSON.', - 'mcp.inventory.parseError.rootNotObject': 'Manifest must be a JSON object at the root.', - 'mcp.inventory.parseError.unsupportedSchema': - 'Unsupported manifest schema — this file was not produced by a compatible exporter.', - 'mcp.inventory.parseError.missingExportedAt': 'Missing or invalid `exported_at` field.', - 'mcp.inventory.parseError.missingExportedBy': 'Missing or invalid `exported_by` field.', - 'mcp.inventory.parseError.invalidServers': 'Missing or invalid `servers` array.', - 'mcp.inventory.parseError.serverNotObject': 'A server entry is not an object.', - 'mcp.inventory.parseError.serverMissingQualifiedName': - 'A server entry is missing its qualified_name.', - 'mcp.inventory.parseError.serverMissingDisplayName': - 'A server entry is missing its display_name.', - 'mcp.inventory.parseError.serverEnvKeysNotArray': - 'A server entry has an env_keys field that is not an array of strings.', - 'mcp.inventory.parseError.serverContainsEnv': - 'A server entry contains an `env` value map. Refusing to import — manifests must only carry env_keys (names), never secret values.', - 'mcp.inventory.parseError.duplicateQualifiedName': - 'Duplicate qualified_name found in manifest. Each server must appear at most once.', - 'mcp.tab.loading': '正在加载 MCP 服务器...', - 'mcp.tab.emptyDetail': '选择服务器或浏览目录。', - 'mcp.install.loadingDetail': '正在加载服务器详细信息...', - 'mcp.install.back': '返回', - 'mcp.install.title': '安装 {name}', - 'mcp.install.requiredEnv': '所需的环境变量', - 'mcp.install.enterValue': '输入 {key}', - 'mcp.install.show': '显示', - 'mcp.install.hide': '隐藏', - 'mcp.install.configLabel': '配置(可选 JSON)', - 'mcp.install.configPlaceholder': '{"key": "value"}', - 'mcp.install.missingRequired': '“{key}”为必填项', - 'mcp.install.invalidJson': '配置 JSON 不是有效的 JSON', - 'mcp.install.failedDetail': '无法加载服务器详细信息', - 'mcp.install.failedInstall': '安装失败', - 'mcp.install.button': '安装', - 'mcp.install.installing': '正在安装...', - 'mcp.detail.suggestedEnvReady': '建议的环境值已准备好', - 'mcp.detail.suggestedEnvBody': - 'Re-install this server with the suggested values to apply them: {keys}', - 'mcp.detail.connect': '连接', - 'mcp.detail.connecting': '正在连接...', - 'mcp.detail.disconnect': '断开连接', - 'mcp.detail.hideAssistant': '隐藏助手', - 'mcp.detail.helpConfigure': '帮我配置一下', - 'mcp.detail.confirmUninstall': '确认卸载?', - 'mcp.detail.confirmUninstallAction': '是的,卸载', - 'mcp.detail.uninstall': '卸载', - 'mcp.detail.envVars': '环境变量', - 'mcp.detail.tools': '工具', - 'onboarding.skipForNow': '暂时跳过', - 'onboarding.localAI.continueWithCloud': '继续使用云', - 'onboarding.localAI.useLocalAnyway': '无论如何使用本地人工智能(不推荐用于您的设备)', - 'onboarding.localAI.useLocalInstead': '使用本地 AI 代替(现在连接 Ollama)', - 'onboarding.localAI.setupIssue': '本地 AI 设置遇到问题', - 'notifications.routingTitle': '通知路由', - 'notifications.routing.pipelineStats': '管道统计', - 'notifications.routing.total': '合计', - 'notifications.routing.unread': '未读', - 'notifications.routing.unscored': '未计分', - 'notifications.routing.intelligenceTitle': '通知情报', - 'notifications.routing.intelligenceDesc': - 'Every notification from your connected accounts is scored by a local AI model. High-importance notifications are automatically routed to your orchestrator agent so nothing critical slips through.', - 'notifications.routing.howItWorks': '它是如何运作的', - 'notifications.routing.level.drop': '掉落', - 'notifications.routing.level.dropDesc': '噪音/垃圾邮件 - 已存储但未浮出水面', - 'notifications.routing.level.acknowledge': '确认', - 'notifications.routing.level.acknowledgeDesc': '低优先级 — 显示在通知中心', - 'notifications.routing.level.react': '反应', - 'notifications.routing.level.reactDesc': '中优先级 — 触发集中的座席响应', - 'notifications.routing.level.escalate': '升级', - 'notifications.routing.level.escalateDesc': '高优先级 — 转发给协调器代理', - 'notifications.routing.perProvider': '每个提供商的路由', - 'notifications.routing.threshold': '阈值', - 'notifications.routing.routeToOrchestrator': '路由到协调器', - 'notifications.routing.loadSettingsError': '无法加载设置。重新打开此面板以重试。', - 'settings.billing.inferenceBudget.title': 'Inference Budget', - 'settings.billing.inferenceBudget.noRecurringPlanBudget': '无经常性计划预算', - 'settings.billing.inferenceBudget.noRecurringWeeklyDesc': - 'Your current plan does not include a recurring weekly inference budget. Usage is paid from available credits instead.', - 'settings.billing.inferenceBudget.remainingSummary': '剩余 {remaining} / {budget}', - 'settings.billing.inferenceBudget.spentThisCycle': '本周期花费 {amount}', - 'settings.billing.inferenceBudget.cycleEndsOn': '循环结束 {date}', - 'settings.billing.inferenceBudget.exhaustedDesc': - 'Included subscription usage is exhausted. Top up credits to keep using AI without waiting for the next cycle.', - 'settings.billing.inferenceBudget.discountVsPayg': '每次通话比即用即付便宜 {pct}%。', - 'settings.billing.inferenceBudget.cycleSpend': '周期支出', - 'settings.billing.inferenceBudget.totalAmount': '{amount} 总计', - 'settings.billing.inferenceBudget.inference': '推理', - 'settings.billing.inferenceBudget.integrations': '集成', - 'settings.billing.inferenceBudget.calls': '{count} 调用', - 'settings.billing.inferenceBudget.dailySpend': '日常消费', - 'settings.billing.inferenceBudget.dailySpendPoint': '{date}: {amount}', - 'settings.billing.inferenceBudget.topModels': '顶级模特', - 'settings.billing.inferenceBudget.noInferenceUsage': '本周期没有推理使用。', - 'settings.billing.inferenceBudget.topIntegrations': '顶级集成', - 'settings.billing.inferenceBudget.noIntegrationUsage': '本周期没有集成使用。', - 'settings.billing.inferenceBudget.unableToLoad': '无法加载使用数据', - 'settings.billing.inferenceBudget.notAvailable': '不适用', - 'memory.sourceFilterAria': '按来源过滤', - 'calls.comingSoonDescription': '人工智能辅助通话即将推出。敬请关注。', - 'vault.title': '知识库', - 'vault.description': '指向本地文件夹;文件被分块并镜像到内存中。', - 'vault.add': '添加保险库', - 'vault.added': '添加了保险库', - 'vault.createdMessage': '创建“{name}”。单击 {sync} 进行摄取。', - 'vault.couldNotAdd': '无法添加保管库', - 'vault.syncFailed': '同步失败', - 'vault.syncFailedFor': '“{name}”同步失败', - 'vault.syncFailedFiles': '{count} 文件失败', - 'vault.syncedTitle': '已同步“{name}”', - 'vault.syncSummary': '摄入 {ingested},未改变 {unchanged},移除 {removed}', - 'vault.syncSummaryFailed': ',失败 {count}', - 'vault.syncSummarySkipped': ',跳过 {count}', - 'vault.syncSummaryDuration': ' · {seconds}s', - 'vault.confirmRemovePurge': - 'Remove vault "{name}"?\n\nClick OK to also purge its memory (delete all {count} ingested document(s)).\nClick Cancel to keep the documents in memory.', - 'vault.confirmRemove': '真的删除保险库“{name}”吗?', - 'vault.removed': '保险库已移除', - 'vault.removedPurgedMessage': '删除了“{name}”并清除了其内存。', - 'vault.removedKeptMessage': '删除了“{name}”。保存在内存中的文档。', - 'vault.couldNotRemove': '无法删除保管库', - 'vault.name': '名称', - 'vault.namePlaceholder': '我的研究笔记', - 'vault.folderPath': '文件夹路径(绝对)', - 'vault.folderPathPlaceholder': '/用户/您/文档/注释', - 'vault.excludes': '排除(逗号分隔的子字符串,可选)', - 'vault.excludesPlaceholder': '草稿/,.秘密', - 'vault.creating': '创造……', - 'vault.create': '创建保管库', - 'vault.loading': '正在加载金库...', - 'vault.failedToLoad': '无法加载保管库:{error}', - 'vault.empty': '还没有金库。在上面添加一个即可开始摄取文件夹。', - 'vault.fileCount': '{count} 文件', - 'vault.syncedRelative': '已同步 {time}', - 'vault.neverSynced': '从未同步过', - 'vault.syncingProgress': '正在同步... {ingested}/{total}', - 'vault.removing': '正在删除...', - 'vault.relative.sec': '{count} 秒前', - 'vault.relative.min': '{count}分钟前', - 'vault.relative.hr': '{count} 小时前', - 'vault.relative.day': '{count} 天前', - 'whatsapp.title': 'WhatsApp', - 'subconscious.interval.fiveMinutes': '5分钟', - 'subconscious.interval.tenMinutes': '10分钟', - 'subconscious.interval.fifteenMinutes': '15分钟', - 'subconscious.interval.thirtyMinutes': '30分钟', - 'subconscious.interval.oneHour': '1小时', - 'subconscious.interval.sixHours': '6小时', - 'subconscious.interval.twelveHours': '12小时', - 'subconscious.interval.oneDay': '1天', - 'subconscious.priority.critical': '批评的', - 'subconscious.priority.important': '重要的', - 'subconscious.priority.normal': '正常', - 'subconscious.durationSeconds': '{seconds}s', - 'subconscious.durationMilliseconds': '{milliseconds}毫秒', - 'settings.search.allowedSitesLabel': 'Allowed websites', - 'settings.search.allowedSitesHint': - 'Websites the assistant may open and read while researching (one host per line, e.g. reuters.com). A host also covers its subdomains. Leave empty to block all web access.', - 'settings.search.allowedSitesAllOn': - 'The assistant can open any public website. Local and private addresses stay blocked.', - 'settings.search.allowedSitesPlaceholder': 'reuters.com\napnews.com\ngithub.com', - 'settings.search.allowedSitesSave': 'Save websites', - 'settings.search.accessModeAria': 'Web access mode', - 'settings.search.accessAllowAll': 'Allow all', - 'settings.search.accessCustom': 'Custom', - 'settings.search.accessBlockAll': 'Block all', - 'settings.search.accessBlockAllHint': - 'All web access is blocked — the assistant cannot open or read any website.', - 'memory.tab.centrality': 'Centrality', - 'graphCentrality.title': 'Knowledge Graph Centrality', - 'graphCentrality.intro': - 'PageRank over your memory graph surfaces the load-bearing hubs — and the connector entities that link otherwise-separate clusters, which a raw frequency count cannot reveal.', - 'graphCentrality.loading': 'Computing centrality…', - 'graphCentrality.errorPrefix': 'Could not load the graph:', - 'graphCentrality.retry': 'Retry', - 'graphCentrality.empty': 'No knowledge graph yet.', - 'graphCentrality.emptyHint': - 'As the assistant records facts about you, the most connected entities will surface here.', - 'graphCentrality.namespaceLabel': 'Namespace', - 'graphCentrality.namespaceAll': 'All namespaces', - 'graphCentrality.metricEntities': 'Entities', - 'graphCentrality.metricConnections': 'Connections', - 'graphCentrality.metricClusters': 'Clusters', - 'graphCentrality.clustersCaption': '{components} clusters · largest holds {largest}', - 'graphCentrality.approximateBadge': 'approximate', - 'graphCentrality.approximateTitle': 'Stopped at the iteration cap before fully converging', - 'graphCentrality.rankedHeading': 'Top entities by influence', - 'graphCentrality.colRank': '#', - 'graphCentrality.colEntity': 'Entity', - 'graphCentrality.colInfluence': 'Influence', - 'graphCentrality.colLinks': 'Links', - 'graphCentrality.bridgeBadge': 'connector', - 'graphCentrality.bridgeTitle': 'Connector — more influential than its link count suggests', - 'graphCentrality.degreeTitle': '{in} in · {out} out', - 'settings.search.engineDisabledLabel': 'Disabled', - 'settings.search.engineDisabledDesc': - 'Remove search tools from the agent context and available tool list.', -}; - -export default zhCN1; diff --git a/app/src/lib/i18n/chunks/zh-CN-2.ts b/app/src/lib/i18n/chunks/zh-CN-2.ts deleted file mode 100644 index 9ea61fff9..000000000 --- a/app/src/lib/i18n/chunks/zh-CN-2.ts +++ /dev/null @@ -1,472 +0,0 @@ -import type { TranslationMap } from '../types'; - -// Simplified Chinese (简体中文) chunk 2/5. Translated from chunks/en-2.ts. -const zhCN2: TranslationMap = { - 'settings.ai.configStatus': '配置状态', - 'settings.ai.fallbackMode': '回退模式', - 'settings.ai.loadedFromRuntime': '从运行时加载', - 'settings.ai.loadingDuration': '加载时长', - 'settings.ai.localRuntime': '本地模型运行时', - 'settings.ai.openManager': '打开管理器', - 'settings.ai.retryDownload': '重试下载', - 'settings.ai.state': '状态', - 'settings.ai.targetModel': '目标模型', - 'settings.ai.download': '下载', - 'settings.ai.localModelUnavailable': '本地模型状态不可用。', - 'settings.ai.soulConfig': 'SOUL 角色配置', - 'settings.ai.refreshing': '刷新中...', - 'settings.ai.refreshSoul': '刷新 SOUL', - 'settings.ai.loadingSoul': '正在加载 SOUL 配置...', - 'settings.ai.identity': '身份', - 'settings.ai.personality': '个性', - 'settings.ai.safetyRules': '安全规则', - 'settings.ai.source': '来源', - 'settings.ai.loaded': '已加载', - 'settings.ai.toolsConfig': 'TOOLS 配置', - 'settings.ai.refreshTools': '刷新 TOOLS', - 'settings.ai.toolsAvailable': '可用工具', - 'settings.ai.tools': '个工具', - 'settings.ai.activeSkills': '活跃技能', - 'settings.ai.skills': '个技能', - 'settings.ai.skillsOverview': '技能概览', - 'settings.ai.refreshingAll': '刷新全部中...', - 'settings.ai.refreshAll': '刷新所有 AI 配置', - 'settings.notifications.suppressAll': '抑制所有通知', - 'settings.notifications.suppressAllDesc': - '阻止来自嵌入式应用的所有操作系统通知弹窗,不受焦点状态影响。', - 'settings.notifications.toggleDnd': '切换免打扰', - 'settings.notifications.categories': '类别', - 'settings.notifications.categoryFooter': - '禁用一个类别后,该类新的通知将不再出现在通知中心。已有的通知在被清除前保持可见。', - 'settings.billing.movedToWeb': '账单已移至网页', - 'settings.billing.openDashboard': '打开账单面板', - 'settings.billing.movedToWebDesc': '订阅变更、支付方式、配额和发票现在在 TinyHumans 网页上管理。', - 'settings.billing.backToSettings': '返回设置', - 'settings.billing.openingBrowser': '正在打开浏览器...', - 'settings.billing.browserNotOpen': '如果浏览器未打开,请使用上方按钮。', - 'settings.billing.browserOpenFailed': '无法自动打开浏览器。请使用上方按钮。', - 'settings.tools.chooseCapabilities': '选择 OpenHuman 可代表你使用的能力。', - 'settings.tools.saveChanges': '保存更改', - 'settings.tools.preferencesSaved': '偏好设置已保存', - 'settings.tools.saveFailed': '保存偏好失败,请重试。', - 'settings.screenAwareness.mode': '模式', - 'settings.screenAwareness.allExceptBlacklist': '除黑名单外全部', - 'settings.screenAwareness.whitelistOnly': '仅白名单', - 'settings.screenAwareness.screenMonitoring': '屏幕监控', - 'settings.screenAwareness.saveSettings': '保存设置', - 'settings.screenAwareness.session': '会话', - 'settings.screenAwareness.status': '状态', - 'settings.screenAwareness.active': '活跃', - 'settings.screenAwareness.stopped': '已停止', - 'settings.screenAwareness.remaining': '剩余', - 'settings.screenAwareness.startSession': '开始会话', - 'settings.screenAwareness.stopSession': '停止会话', - 'settings.screenAwareness.analyzeNow': '立即分析', - 'settings.screenAwareness.macosOnly': '屏幕感知桌面捕获和权限控制目前仅在 macOS 上受支持。', - 'connections.comingSoon': '即将推出', - 'connections.setUp': '设置', - 'connections.configured': '已配置', - 'connections.unavailable': '不可用', - 'connections.checking': '检查中...', - 'connections.walletConfigured': '本地 EVM、BTC、Solana 和 Tron 身份已从你的恢复短语中配置。', - 'connections.walletReady': '通过一个恢复短语设置本地 EVM、BTC、Solana 和 Tron 身份。', - 'connections.walletError': '无法检查钱包状态。点击从恢复短语面板重试。', - 'connections.walletChecking': '正在检查钱包状态...', - 'connections.walletIdentities': '钱包身份', - 'connections.walletDerived': '从你的恢复短语本地派生,仅作为安全元数据存储。', - 'connections.privacySecurity': '隐私与安全', - 'connections.privacySecurityDesc': - '所有数据和凭据均存储在本地,采用零数据保留政策。你的信息经过加密,绝不会与第三方共享。', - 'channels.status.connecting': '连接中', - 'channels.status.notConfigured': '未配置', - 'channels.noActiveRoute': '无活跃路由', - 'channels.activeRoute': '活跃路由', - 'channels.loadingDefinitions': '正在加载渠道定义...', - 'channels.channelConnections': '渠道连接', - 'channels.configureAuthModes': '为每个消息渠道配置认证模式。', - 'channels.configNotAvailable': '配置', - 'channels.channel': '渠道', - 'devOptions.coreModeNotSet': '核心模式:未设置', - 'devOptions.coreModeNotSetDesc': '启动检查选择器尚未确认。使用选择器上的切换模式选择本地或云端。', - 'devOptions.local': '本地', - 'devOptions.embeddedCoreSidecar': '嵌入式核心侧车', - 'devOptions.sidecarSpawned': '由 Tauri shell 在应用启动时进程内启动。', - 'devOptions.cloud': '云端', - 'devOptions.remoteCoreRpc': '远程核心 RPC', - 'devOptions.token': '令牌', - 'devOptions.tokenNotSet': '未设置 — RPC 将返回 401', - 'devOptions.triggerSentryTest': '触发 Sentry 测试 (staging)', - 'devOptions.triggerSentryTestDesc': - '发送一个带有标签的错误以验证 Sentry 管道。Issue #1072 — 验证后移除。', - 'devOptions.sendTestEvent': '发送测试事件', - 'devOptions.sending': '发送中…', - 'devOptions.eventSent': '事件已发送', - 'devOptions.failed': '失败', - 'devOptions.appLogs': '应用日志', - 'devOptions.appLogsDesc': '打开包含滚动日志文件的文件夹。报告问题时请附上最近的文件。', - 'devOptions.openLogsFolder': '打开日志文件夹', - 'mnemonic.phraseSaved': '恢复短语已保存', - 'mnemonic.walletReady': '多链钱包身份已就绪。正在返回设置...', - 'mnemonic.writeDownWords': '按顺序记下这', - 'mnemonic.wordsInOrder': - '个单词,并将其保存在安全的地方。这个短语保护你的本地加密密钥以及你的 EVM、BTC、Solana 和 Tron 钱包身份。', - 'mnemonic.cannotRecover': '这个短语一旦丢失将无法恢复,应该完全保留在你的本地设备上。', - 'mnemonic.copyToClipboard': '复制到剪贴板', - 'mnemonic.alreadyHavePhrase': '我已经有恢复短语', - 'mnemonic.consentSaved': '我已保存此短语并同意将其用于本地钱包设置', - 'mnemonic.enterPhraseToRestore': - '在下面输入你的恢复短语以恢复本地钱包身份,或将完整的短语粘贴到任意字段中(新备份为 12 个单词;旧版本的 24 个单词短语仍然有效)。', - 'mnemonic.words': '单词数', - 'mnemonic.validPhrase': '有效的恢复短语', - 'mnemonic.generateNewPhrase': '改为生成新的恢复短语', - 'mnemonic.securingData': '正在保护你的数据...', - 'mnemonic.saveRecoveryPhrase': '保存恢复短语', - 'mnemonic.userNotLoaded': '用户未加载。请重新登录或刷新页面。', - 'mnemonic.invalidPhrase': '恢复短语无效。请检查你的单词后重试。', - 'mnemonic.somethingWentWrong': '出了点问题。请重试。', - 'team.failedToCreate': '创建团队失败', - 'team.invalidInviteCode': '无效或已过期的邀请码', - 'team.failedToSwitch': '切换团队失败', - 'team.failedToLeave': '离开团队失败', - 'team.role.owner': '拥有者', - 'team.role.admin': '管理员', - 'team.role.billingManager': '账单管理员', - 'team.role.member': '成员', - 'team.active': '活跃', - 'team.personalTeam': '个人团队', - 'team.manageTeam': '管理团队', - 'team.switching': '切换中...', - 'team.switch': '切换', - 'team.leaving': '离开中...', - 'team.leave': '离开', - 'team.yourTeams': '你的团队', - 'team.createNewTeam': '创建新团队', - 'team.teamName': '团队名称', - 'team.creating': '创建中...', - 'team.joinExistingTeam': '加入已有团队', - 'team.inviteCode': '邀请码', - 'team.joining': '加入中...', - 'team.join': '加入', - 'team.leaveTeam': '离开团队', - 'team.confirmLeave': '确定要离开', - 'team.leaveWarning': '你将失去对该团队及所有团队资源的访问权限。需要重新获得邀请才能重新加入。', - 'team.management': '团队管理', - 'team.notFound': '未找到团队', - 'team.accessDenied': '访问被拒绝', - 'team.members': '成员', - 'voice.title': '语音听写', - 'voice.settings': '语音设置', - 'voice.settingsDesc': '按住快捷键进行语音听写,将文本插入到当前活动字段中。', - 'voice.hotkey': '快捷键', - 'voice.activationMode': '激活模式', - 'voice.tapToToggle': '点击切换', - 'voice.writingStyle': '书写风格', - 'voice.verbatimTranscription': '逐字转录', - 'voice.naturalCleanup': '自然清理', - 'voice.autoStart': '与核心一起自动启动语音服务', - 'voice.customDictionary': '自定义词典', - 'voice.customDictionaryDesc': '添加姓名、技术术语和领域词汇以提高识别准确率。', - 'voice.addWord': '添加词语...', - 'voice.sttDisabled': '语音听写功能在本地 STT 模型下载并准备好之前被禁用。', - 'voice.openLocalAiModel': '打开本地 AI 模型', - 'voice.serverRestarted': '语音服务已使用新设置重启。', - 'voice.settingsSaved': '语音设置已保存。', - 'voice.serverStarted': '语音服务已启动。', - 'voice.serverStopped': '语音服务已停止。', - 'voice.saveVoiceSettings': '保存语音设置', - 'voice.startVoiceServer': '启动语音服务', - 'voice.stopVoiceServer': '停止语音服务', - 'voice.debugTitle': '语音调试', - 'autocomplete.title': '自动补全', - 'autocomplete.settings': '设置', - 'autocomplete.acceptWithTab': 'Tab 键接受', - 'autocomplete.stylePreset': '风格预设', - 'autocomplete.style.balanced': '均衡', - 'autocomplete.style.concise': '简洁', - 'autocomplete.style.formal': '正式', - 'autocomplete.style.casual': '随意', - 'autocomplete.style.custom': '自定义', - 'autocomplete.disabledApps': '禁用的应用(每行一个包名/应用令牌)', - 'autocomplete.saveSettings': '保存设置', - 'autocomplete.saving': '保存中…', - 'autocomplete.runtime': '运行时', - 'autocomplete.running': '运行中', - 'autocomplete.start': '启动', - 'autocomplete.stop': '停止', - 'autocomplete.settingsSaved': '自动补全设置已保存。', - 'autocomplete.started': '自动补全已启动。', - 'autocomplete.didNotStart': '自动补全未能启动。请检查是否已启用。', - 'autocomplete.stopped': '自动补全已停止。', - 'autocomplete.advancedSettings': '高级设置', - 'autocomplete.debugTitle': '自动补全调试', - 'chat.agentChat': '智能体对话', - 'chat.overrides': '覆盖设置', - 'chat.model': '模型', - 'chat.temperature': '温度', - 'chat.conversation': '对话', - 'chat.startAgentConversation': '开始与智能体对话。', - 'chat.you': '你', - 'chat.agent': '智能体', - 'chat.askAgent': '向智能体提问...', - 'chat.sendMessage': '发送消息', - 'composio.triageTitle': '集成触发器', - 'composio.triageDesc': - '启用时,每个传入的 Composio 触发器都会经过 AI 分类步骤,对事件进行分类并可能启动自动化操作——每个触发器使用一个本地 LLM 轮次。如果你更喜欢手动审查,可以全局或按集成禁用。如果环境变量', - 'composio.disableAllTriage': '禁用所有触发器的 AI 分类', - 'composio.triggersStillRecorded': '触发器仍记录到历史记录中——不运行 LLM 轮次。', - 'composio.disableSpecificIntegrations': '禁用特定集成的 AI 分类', - 'composio.settingsSaved': '设置已保存', - 'composio.saveFailed': '保存失败。请重试。', - 'cron.title': '定时任务', - 'cron.scheduledJobs': '计划任务', - 'cron.manageCronJobs': '管理核心调度器的定时任务。', - 'cron.refreshCronJobs': '刷新定时任务', - 'localModel.modelStatus': '模型状态', - 'localModel.downloadModels': '下载模型', - 'localModel.usage': '使用', - 'localModel.usageDesc': '选择哪些子系统在本地模型上运行。未勾选的将使用云端。', - 'localModel.enableRuntime': '启用本地 AI 运行时', - 'localModel.enableRuntimeDesc': - '总开关。默认关闭——Ollama 保持空闲。启用后,树摘要器、屏幕智能和自动补全始终使用本地模型。', - 'localModel.advancedSettings': '高级设置', - 'localModel.debugTitle': '本地模型调试', - 'localModel.ollamaServer.helperText': '示例:http://192.168.1.5:11434', - 'localModel.ollamaServer.label': 'Ollama 服务器 URL', - 'localModel.ollamaServer.modelCount': '个模型', - 'localModel.ollamaServer.placeholder': 'http://localhost:11434', - 'localModel.ollamaServer.reachable': '可访问', - 'localModel.ollamaServer.resetButton': '重置为默认值', - 'localModel.ollamaServer.saveButton': '保存', - 'localModel.ollamaServer.testButton': '测试连接', - 'localModel.ollamaServer.unreachable': '无法访问', - 'localModel.ollamaServer.validationError': '必须是有效的 http:// 或 https:// URL', - 'screenAwareness.debugTitle': '屏幕感知调试', - 'memory.debugTitle': '记忆调试', - 'webhooks.debugTitle': 'Webhook 调试', - 'notifications.routingTitle': '通知路由', - 'common.reload': '重新加载', - 'common.skip': '跳过', - 'common.disable': '禁用', - 'common.enable': '启用', - 'chat.safetyTimeout': '助手 2 分钟内未响应。请重试或检查你的连接。', - 'chat.filter.all': '全部', - 'chat.filter.work': '工作', - 'chat.filter.briefing': '简报', - 'chat.filter.notification': '通知', - 'chat.filter.workers': '工作线程', - 'chat.selectThread': '选择一个对话', - 'chat.threads': '对话列表', - 'chat.noThreads': '暂无对话', - 'chat.noLabelThreads': '此标签下暂无对话', - 'chat.noWorkerThreads': '暂无工作线程', - 'chat.deleteThread': '删除对话', - 'chat.deleteThreadConfirm': '确定要删除"{title}"吗?', - 'chat.untitledThread': '未命名对话', - 'chat.editThreadTitle': 'Edit thread title', - 'chat.hideSidebar': '隐藏侧边栏', - 'chat.showSidebar': '显示侧边栏', - 'chat.newThreadShortcut': '新建对话', - 'chat.new': '新建', - 'chat.failedToLoadMessages': '加载消息失败', - 'chat.thinkingIteration': '思考中...({n})', - 'chat.thinkingDots': '思考中...', - 'chat.approachingLimit': '接近使用限制', - 'chat.approachingLimitMsg': '你已使用了可用配额的{pct}%。', - 'chat.upgrade': '升级', - 'chat.weeklyLimitHit': '已达到每周限制。', - 'chat.resets': '重置时间', - 'chat.topUpToContinue': '充值以继续使用。', - 'chat.budgetComplete': '预算已用完。', - 'chat.topUp': '充值', - 'chat.cycle': '周期', - 'chat.cycleSpent': '本周期已用', - 'chat.cycleRemaining': '剩余', - 'chat.left': '剩余', - 'chat.setup': '设置', - 'chat.switchToText': '切换到文本', - 'chat.transcribing': '转录中...', - 'chat.stopAndSend': '停止并发送', - 'chat.startTalking': '开始说话', - 'chat.playingVoiceReply': '正在播放语音回复', - 'chat.voiceHint': '使用麦克风说话', - 'chat.micUnavailable': '麦克风不可用', - 'chat.turn': '轮', - 'chat.turns': '轮', - 'chat.openWorkerThread': '打开工作线程', - 'chat.attachment.attach': '添加图片', - 'chat.attachment.remove': '移除 {name}', - 'chat.attachment.tooMany': '每条消息最多 {max} 张图片', - 'chat.attachment.tooLarge': '图片超过 {max} 大小限制', - 'chat.attachment.unsupportedType': '不支持的文件类型。请使用 PNG、JPEG、WebP、GIF 或 BMP。', - 'chat.attachment.readFailed': '无法读取文件', - 'memory.searchAria': '搜索记忆', - 'memory.searchPlaceholder': '搜索记忆条目...', - 'memory.sourceFilter.all': '所有来源', - 'memory.sourceFilter.email': '邮件', - 'memory.sourceFilter.calendar': '日历', - 'memory.sourceFilter.telegram': 'Telegram', - 'memory.sourceFilter.aiInsight': 'AI 洞察', - 'memory.sourceFilter.system': '系统', - 'memory.sourceFilter.trading': '交易', - 'memory.sourceFilter.security': '安全', - 'memory.ingestionActivity': '摄取活动', - 'memory.events': '个事件', - 'memory.event': '个事件', - 'memory.overTheLast': '过去', - 'memory.months': '个月', - 'memory.peak': '峰值', - 'memory.perDay': '/天', - 'memory.less': '较少', - 'memory.more': '较多', - 'memory.on': '于', - 'memory.loading': '正在加载记忆', - 'memory.fetching': '正在获取你的记忆条目...', - 'memory.analyzing': '正在分析记忆', - 'memory.analyzingHint': '正在处理你的记忆以提取洞察...', - 'memory.noMatches': '未找到匹配', - 'memory.noMatchesHint': '尝试更改搜索词或筛选条件。', - 'memory.allCaughtUp': '全部完成', - 'memory.allCaughtUpHint': '没有新的记忆条目需要处理。', - 'memory.noAnalysis': '暂无分析', - 'memory.noAnalysisHint': '运行分析以发现记忆中的模式。', - 'memory.emptyHint': '开始交互以创建你的第一条记忆。', - 'mic.unavailable': '麦克风不可用', - 'mic.permissionDenied': '麦克风权限被拒绝', - 'mic.failedToStartRecorder': '启动录音失败', - 'mic.transcribing': '转录中...', - 'mic.tapToSend': '点击发送', - 'mic.waitingForAgent': '等待助手...', - 'mic.tapAndSpeak': '点击说话', - 'mic.stopRecording': '停止录音', - 'mic.startRecording': '开始录音', - 'token.usageLimitReached': '已达到使用限制', - 'token.approachingLimit': '接近限制', - 'token.planClickForDetails': '套餐 - 点击查看详情', - 'token.sessionTokens': '输入: {in} | 输出: {out} | 轮次: {turns}', - 'token.limit': '已达限制', - 'catalog.noCapabilityBinding': '无能力绑定', - 'catalog.downloadFailed': '下载失败', - 'catalog.active': '活跃', - 'catalog.installed': '已安装', - 'catalog.notDownloaded': '未下载', - 'catalog.inUse': '使用中', - 'catalog.use': '使用', - 'catalog.deleteModel': '删除模型', - 'catalog.download': '下载', - 'navigator.recent': '最近', - 'navigator.today': '今天', - 'navigator.thisWeek': '本周', - 'navigator.sources': '来源', - 'navigator.email': '邮件', - 'navigator.slack': 'Slack', - 'navigator.chat': '对话', - 'navigator.documents': '文档', - 'navigator.people': '联系人', - 'navigator.topics': '主题', - 'dreams.description': '梦境是 AI 生成的反思,综合了你记忆中的模式。', - 'dreams.comingSoon': '即将推出', - 'assignment.memoryLlm': '记忆 LLM', - 'assignment.memoryLlmAria': '选择记忆 LLM', - 'assignment.embedder': '嵌入模型', - 'assignment.loaded': '已加载', - 'assignment.notDownloaded': '未下载', - 'assignment.usedForExtractSummarise': '用于提取和摘要', - 'insights.knownFacts': '已知事实', - 'insights.preferences': '偏好', - 'insights.relationships': '关系', - 'insights.skills': '技能', - 'insights.opinions': '观点', - // Developer options menu items (#2225) - 'devOptions.menuAi': 'AI 配置', - 'devOptions.menuAiDesc': '云端提供商、本地 Ollama 模型与按工作负载路由', - 'devOptions.menuScreenAware': '屏幕感知', - 'devOptions.menuScreenAwareDesc': '屏幕捕获权限、监控策略与会话控制', - 'devOptions.menuMessaging': '消息通道', - 'devOptions.menuMessagingDesc': '配置 Telegram/Discord 认证模式与默认通道路由', - 'devOptions.menuTools': '工具', - 'devOptions.menuToolsDesc': '启用或禁用 OpenHuman 可代表你使用的能力', - 'devOptions.menuAgentChat': '代理对话', - 'devOptions.menuAgentChatDesc': '使用模型和温度覆盖测试代理对话', - 'devOptions.menuCronJobs': '定时任务', - 'devOptions.menuCronJobsDesc': '查看和配置运行时技能的定时任务', - 'devOptions.menuLocalModelDebug': '本地模型调试', - 'devOptions.menuLocalModelDebugDesc': 'Ollama 配置、资源下载、模型测试与诊断', - 'devOptions.menuWebhooksDebug': '网络钩子', - 'devOptions.menuWebhooksDebugDesc': '查看运行时 webhook 注册和已捕获的请求日志', - 'devOptions.menuIntelligence': '智能', - 'devOptions.menuIntelligenceDesc': '记忆工作区、潜意识引擎、梦境与设置', - 'devOptions.menuNotificationRouting': '通知路由', - 'devOptions.menuNotificationRoutingDesc': 'AI 重要性评分与集成警报的协调升级', - 'devOptions.menuComposeIOTriggers': 'ComposeIO 触发器', - 'devOptions.menuComposeIOTriggersDesc': '查看 ComposeIO 触发器历史与归档', - 'devOptions.menuComposioRouting': 'Composio 路由 (直连模式)', - 'devOptions.menuComposioRoutingDesc': - '使用你自己的 Composio API 密钥,将调用直接路由到 backend.composio.dev', - 'devOptions.menuComposioTriggers': '集成触发器', - 'devOptions.menuComposioTriggersDesc': '为 Composio 集成触发器配置 AI 分级设置', - 'mic.deviceSelector': '麦克风装置', - 'mic.tapToSendCountdown': '点击发送 ({seconds}秒)', - 'settings.agents.title': 'Agents', - 'settings.agents.subtitle': - 'Manage the agents available for delegation — built-in defaults and your own custom agents.', - 'settings.agents.menuDesc': 'Manage built-in and custom agents', - 'settings.agents.newAgent': 'New agent', - 'settings.agents.loadError': "Couldn't load agents", - 'settings.agents.empty': 'No agents yet', - 'settings.agents.sourceDefault': 'Built-in', - 'settings.agents.sourceCustom': 'Custom', - 'settings.agents.enable': 'Enable agent', - 'settings.agents.disable': 'Disable agent', - 'settings.agents.edit': 'Edit', - 'settings.agents.delete': 'Delete', - 'settings.agents.reset': 'Reset to default', - 'settings.agents.modelLabel': 'Model', - 'settings.agents.toolsLabel': 'Tools', - 'settings.agents.toolsAll': 'All tools', - 'settings.agents.toolsCount': '{count} tools', - 'settings.agents.actionFailed': "Couldn't update the agent", - 'settings.agents.orchestratorLocked': 'The orchestrator is always enabled.', - 'settings.agents.editor.createTitle': 'New agent', - 'settings.agents.editor.editTitle': 'Edit agent', - 'settings.agents.editor.id': 'ID', - 'settings.agents.editor.idHint': 'Lowercase letters, numbers, _ and - only.', - 'settings.agents.editor.name': 'Name', - 'settings.agents.editor.description': 'Description', - 'settings.agents.editor.model': 'Model (optional)', - 'settings.agents.editor.modelPlaceholder': 'e.g. inherit, hint:fast, or a model id', - 'settings.agents.editor.systemPrompt': 'System prompt (optional)', - 'settings.agents.editor.tools': 'Allowed tools', - 'settings.agents.editor.toolsHint': 'One tool name per line. Use * for all tools.', - 'settings.agents.editor.defaultsNote': - 'Editing a built-in agent saves an override you can reset later.', - 'settings.agents.editor.save': 'Save', - 'settings.agents.editor.create': 'Create agent', - 'settings.agents.editor.saving': 'Saving…', - 'settings.agentsSection.title': 'Agents', - 'settings.agentsSection.description': - 'Manage your agents, their autonomy, and what they can access on this computer.', - 'settings.agentsSection.menuDesc': 'Registry, autonomy & OS access', - 'settings.agents.editor.notFound': 'Agent not found.', - 'settings.agents.editor.modelInherit': 'Inherit (platform default)', - 'settings.agents.editor.modelHints': 'Route hints', - 'settings.agents.editor.modelTiers': 'Model tiers', - 'settings.agents.editor.modelCustom': 'Custom model id…', - 'settings.agents.editor.modelCustomPlaceholder': 'e.g. anthropic/claude-sonnet-4', - 'settings.agents.editor.selectTools': 'Add tools', - 'settings.agents.editor.toolsAllSelected': 'All tools', - 'settings.agents.editor.toolsNoneSelected': 'No tools selected', - 'settings.agents.editor.removeToolAria': 'Remove {tool}', - 'settings.agents.editor.toolsModalTitle': 'Allowed tools', - 'settings.agents.editor.toolsSelectedCount': '{count} selected', - 'settings.agents.editor.toolsSearchPlaceholder': 'Search tools…', - 'settings.agents.editor.toolsAllowAll': 'Allow all tools (*)', - 'settings.agents.editor.toolsAllowAllHint': 'This agent can use every available tool.', - 'settings.agents.editor.toolsLoading': 'Loading tools…', - 'settings.agents.editor.toolsLoadError': 'Couldn’t load tools', - 'settings.agents.editor.toolsEmpty': 'No tools match your search.', - 'settings.agents.editor.toolsDone': 'Done', - 'settings.agents.editor.builtInReadonly': - 'Built-in agents can’t be edited. You can enable, disable, or reset them from the agents list.', -}; - -export default zhCN2; diff --git a/app/src/lib/i18n/chunks/zh-CN-3.ts b/app/src/lib/i18n/chunks/zh-CN-3.ts deleted file mode 100644 index 6c26ea7a0..000000000 --- a/app/src/lib/i18n/chunks/zh-CN-3.ts +++ /dev/null @@ -1,495 +0,0 @@ -import type { TranslationMap } from '../types'; - -// Simplified Chinese (简体中文) chunk 3/5. Translated from chunks/en-3.ts. -const zhCN3: TranslationMap = { - 'insights.other': '其他', - 'insights.title': '洞察', - 'insights.empty': '暂无洞察。随着你的记忆增长,洞察会自动生成。', - 'insights.description': '基于记忆图谱中的 {count} 个关系。', - 'insights.items': '条', - 'insights.more': '更多', - 'calls.joiningCall': '正在加入通话', - 'calls.meetWindowOpening': 'Meet 窗口正在打开...', - 'calls.failedToStart': '启动通话失败', - 'calls.couldNotStart': '无法启动通话', - 'calls.failedToClose': '关闭通话失败', - 'calls.couldNotClose': '无法关闭通话', - 'calls.joinMeet': '加入 Meet', - 'calls.joinMeetDescription': '输入 Google Meet 链接以加入。', - 'calls.meetLink': 'Meet 链接', - 'calls.displayName': '显示名称', - 'calls.openingMeet': '正在打开 Meet...', - 'calls.joinCall': '加入通话', - 'calls.activeCalls': '活跃通话', - 'calls.leave': '离开', - 'workspace.wipeConfirm': '确定要清除所有记忆吗?此操作不可撤销。', - 'workspace.resetTreeConfirm': '确定要重建记忆树吗?', - 'workspace.wipeTitle': '清除记忆', - 'workspace.resetting': '重置中...', - 'workspace.resetMemory': '重置记忆', - 'workspace.resetTreeTitle': '重建记忆树', - 'workspace.rebuilding': '重建中...', - 'workspace.resetMemoryTree': '重置记忆树', - 'workspace.building': '构建中...', - 'workspace.buildSummaryTrees': '构建摘要树', - 'workspace.viewVault': '查看存储库', - 'workspace.openingVaultTitle': '在 Obsidian 中打开存储库', - 'workspace.openingVaultMessage': - '如果 Obsidian 没有打开,请从 obsidian.md 安装或使用"显示文件夹"。存储库路径:', - 'workspace.openVaultFailedTitle': '无法在 Obsidian 中打开存储库', - 'workspace.openVaultFailedMessage': '使用"显示文件夹"直接打开存储库目录。存储库路径:', - 'workspace.revealVaultFailed': '无法显示存储库文件夹', - 'workspace.revealFolder': '显示文件夹', - 'workspace.checkingVault': 'Checking…', - 'workspace.vaultNotRegisteredHelp': - 'Obsidian only opens folders you\'ve added as a vault. In Obsidian, choose "Open folder as vault" and pick the folder below — you only need to do this once. Then click View Vault again.', - 'workspace.obsidianNotFoundHelp': - "We couldn't find Obsidian on this device. Install it, or — if it's installed somewhere non-standard — set its config folder under Advanced.", - 'workspace.openAnyway': 'Open in Obsidian anyway', - 'workspace.installObsidian': 'Install Obsidian', - 'workspace.obsidianAdvanced': 'Obsidian installed elsewhere?', - 'workspace.obsidianConfigDirLabel': 'Obsidian config folder', - 'workspace.obsidianConfigDirHint': - 'Path to the folder containing obsidian.json (e.g. ~/.config/obsidian). Leave blank to auto-detect.', - 'workspace.obsidianConfigDirPlaceholder': '~/.config/obsidian', - 'workspace.graphLoadFailed': '无法加载记忆图谱', - 'workspace.loadingGraph': '正在加载记忆图谱...', - 'workspace.graphViewMode': '记忆图谱视图模式', - 'workspace.trees': '树状视图', - 'workspace.contacts': '联系人', - 'graph.noContactMentions': '无联系人提及', - 'graph.noMemory': '无记忆', - 'graph.source': '来源', - 'graph.topic': '主题', - 'graph.global': '全局', - 'graph.document': '文档', - 'graph.contact': '联系人', - 'graph.nodes': '个节点', - 'graph.parentChild': '父子', - 'graph.documentContact': '文档-联系人', - 'graph.link': '条链接', - 'graph.links': '条链接', - 'graph.children': '个子节点', - 'graph.clickToOpenObsidian': '点击在 Obsidian 中打开', - 'graph.person': '人物', - 'modal.dontShowAgain': '不再显示', - 'reflections.loading': '正在加载反思...', - 'reflections.empty': '暂无反思', - 'reflections.title': '反思', - 'reflections.proposedAction': '建议操作', - 'reflections.act': '执行', - 'reflections.dismiss': '忽略', - 'whatsapp.chatsSynced': '个对话已同步', - 'whatsapp.chatSynced': '个对话已同步', - 'sync.active': '活跃', - 'sync.recent': '最近', - 'sync.idle': '空闲', - 'sync.memorySources': '记忆来源', - 'sync.noConnectedSources': '未连接任何来源', - 'sync.chunks': '个片段', - 'sync.lastChunk': '最后片段:', - 'sync.pending': '待处理', - 'sync.processed': '已处理', - 'sync.syncing': '同步中...', - 'sync.sync': '同步', - 'sync.failedToLoad': '加载失败', - 'sync.noContent': '无可用内容', - 'memorySources.title': 'Memory Sources', - 'memorySources.empty': 'No memory sources yet. Add one to start feeding memory.', - 'memorySources.loadingConnections': 'Loading connections…', - 'memorySources.noConnections': - 'No active Composio connections found. Connect an integration first.', - 'memorySources.pickConnection': 'Pick a connection', - 'memorySources.selectConnection': '— Select a connection —', - 'memorySources.composioListFailed': 'Failed to load Composio connections.', - 'memorySources.browse': 'Browse…', - 'memorySources.folderPathPlaceholder': '/Users/you/notes', - 'memorySources.globPatternPlaceholder': '**/*.md', - 'memorySources.repoUrlPlaceholder': 'https://github.com/org/repo', - 'memorySources.branchPlaceholder': 'main', - 'memorySources.feedUrlPlaceholder': 'https://example.com/feed.xml', - 'memorySources.pageUrlPlaceholder': 'https://example.com/article', - 'memorySources.cssSelectorPlaceholder': 'article', - 'memorySources.searchQueryPlaceholder': 'from:user AI safety', - 'memorySources.kind.composio': 'Integration', - 'memorySources.kind.folder': 'Local Folder', - 'memorySources.kind.github_repo': 'GitHub Repo', - 'memorySources.kind.twitter_query': 'Twitter Search', - 'memorySources.kind.rss_feed': 'RSS Feed', - 'memorySources.kind.web_page': 'Web Page', - 'memorySources.sync.successTitle': 'Syncing', - 'memorySources.sync.successMessage': 'Progress will appear shortly.', - 'memorySources.sync.failedTitle': 'Sync failed:', - 'time.justNow': 'just now', - 'time.secondsAgoSuffix': 's ago', - 'time.minutesAgoSuffix': 'm ago', - 'time.hoursAgoSuffix': 'h ago', - 'time.daysAgoSuffix': 'd ago', - 'memorySources.customSources': 'Custom Sources', - 'memorySources.addSource': 'Add Source', - 'memorySources.noCustomSources': - 'No custom sources yet. Add a folder, GitHub repo, RSS feed, or web page to start.', - 'memorySources.pickKind': 'What kind of source do you want to add?', - 'memorySources.backToKinds': 'Back to source types', - 'memorySources.label': 'Label', - 'memorySources.labelPlaceholder': 'My research notes', - 'memorySources.add': 'Add', - 'memorySources.adding': 'Adding…', - 'memorySources.added': 'Source added', - 'memorySources.removed': 'Source removed', - 'memorySources.remove': 'Remove', - 'memorySources.enable': 'Enable', - 'memorySources.disable': 'Disable', - 'memorySources.toggleFailed': 'Toggle failed', - 'memorySources.removeFailed': 'Remove failed', - 'memorySources.folderPath': 'Folder path', - 'memorySources.globPattern': 'Glob pattern', - 'memorySources.repoUrl': 'Repository URL', - 'memorySources.branch': 'Branch', - 'memorySources.feedUrl': 'Feed URL', - 'memorySources.pageUrl': 'Page URL', - 'memorySources.cssSelector': 'CSS selector (optional)', - 'memorySources.searchQuery': 'Search query', - 'backend.aiBackend': 'AI 后端', - 'backend.cloud': '云端', - 'backend.recommended': '推荐', - 'backend.cloudDescription': '快速、强大的模型托管在我们的服务器上。可立即使用。', - 'backend.privacyNote': '个人数据、消息或密钥绝不会发送到我们的服务器。', - 'backend.local': '本地', - 'backend.advanced': '高级', - 'backend.localDescription': '使用 Ollama 在本地运行模型。完全隐私,需要设置。', - 'backend.ramRecommended': '建议 16GB+ 内存', - 'subconscious.tasks': '个任务', - 'subconscious.ticks': '次滴答', - 'subconscious.last': '上次', - 'subconscious.failed': '失败', - 'subconscious.tickInterval': '滴答间隔', - 'subconscious.runNow': '立即运行', - 'subconscious.providerUnavailableTitle': '潜意识已暂停', - 'subconscious.providerSettings': 'AI 设置', - 'subconscious.approvalNeeded': '需要审批', - 'subconscious.requiresApproval': '需要审批', - 'subconscious.fixInConnections': '在连接中修复', - 'subconscious.goAhead': '继续执行', - 'subconscious.activeTasks': '活跃任务', - 'subconscious.noActiveTasks': '暂无活跃任务', - 'subconscious.default': '默认', - 'subconscious.addTaskPlaceholder': '添加新任务...', - 'subconscious.activityLog': '活动日志', - 'subconscious.noActivity': '暂无活动', - 'subconscious.decision.nothingNew': '无新内容', - 'subconscious.decision.completed': '已完成', - 'subconscious.decision.evaluating': '评估中', - 'subconscious.decision.waitingApproval': '等待审批', - 'subconscious.decision.failed': '失败', - 'subconscious.decision.cancelled': '已取消', - 'subconscious.decision.skipped': '已跳过', - 'actionable.complete': '完成', - 'actionable.dismiss': '忽略', - 'actionable.snooze': '稍后提醒', - 'actionable.new': '新', - 'stats.storage': '存储', - 'stats.files': '个文件', - 'stats.documents': '文档', - 'stats.today': '今天', - 'stats.namespaces': '命名空间', - 'stats.relations': '关系', - 'stats.firstMemory': '首条记忆', - 'stats.latest': '最新', - 'stats.sessions': '会话数', - 'stats.tokens': '个令牌', - 'bootCheck.invalidUrl': '请输入核心 URL。', - 'bootCheck.urlMustStartWith': 'URL 必须以 http:// 或 https:// 开头', - 'bootCheck.validUrlRequired': '请输入有效的 URL(例如 https://core.example.com/rpc)', - 'bootCheck.tokenRequired': '请输入核心认证令牌。', - 'bootCheck.chooseCoreMode': '选择核心模式', - 'bootCheck.connectToCore': '连接到你的核心', - 'bootCheck.desktopDescription': 'OpenHuman 需要一个运行中的核心才能工作。请选择连接方式。', - 'bootCheck.webDescription': - '网页版 OpenHuman 连接到由你控制的远程核心。请输入其 URL 和认证令牌,或安装桌面版在本地运行核心。', - 'bootCheck.preferDesktop': '更希望在自己的设备上运行一切?', - 'bootCheck.downloadDesktop': '下载桌面应用', - 'bootCheck.localRecommended': '本地(推荐)', - 'bootCheck.localDescription': '嵌入式核心在本设备上运行 — 最快,无需配置。', - 'bootCheck.cloudMode': '云端', - 'bootCheck.cloudDescription': '连接到自定义 URL 处的远程核心。', - 'bootCheck.coreRpcUrl': '核心 RPC URL', - 'bootCheck.rpcUrlPlaceholder': 'https://core.example.com/rpc', - 'bootCheck.authToken': '认证令牌', - 'bootCheck.bearerTokenPlaceholder': '远程核心上配置的 Bearer 令牌', - 'bootCheck.storedLocally': '仅存储在本设备上。远程核心必需 — 桌面版每次 RPC 都会以 ', - 'bootCheck.testing': '测试中…', - 'bootCheck.testConnection': '测试连接', - 'bootCheck.connectedOk': '已连接 ✓', - 'bootCheck.authFailed': '认证失败 — 请检查令牌(收到 401/403)。', - 'bootCheck.unreachablePrefix': '无法连接:', - 'bootCheck.checkingCore': '正在检查核心…', - 'bootCheck.cannotReach': '无法连接到核心', - 'bootCheck.cannotReachDesc': '核心进程无法访问。请尝试切换到其他模式。', - 'bootCheck.switchMode': '切换模式', - 'bootCheck.quit': '退出', - 'bootCheck.legacyDetected': '检测到旧版后台核心', - 'bootCheck.legacyDescription': - '此设备上正在运行一个单独安装的 OpenHuman 守护进程。必须先将其移除,嵌入式核心才能接管。', - 'bootCheck.removing': '正在移除…', - 'bootCheck.removeContinue': '移除并继续', - 'bootCheck.localNeedsRestart': '本地核心需要重启', - 'bootCheck.localNeedsRestartDesc': '本地核心版本与此应用构建版本不匹配。重启后将加载正确的版本。', - 'bootCheck.restarting': '正在重启…', - 'bootCheck.restartCore': '重启核心', - 'bootCheck.cloudNeedsUpdate': '云端核心需要更新', - 'bootCheck.cloudNeedsUpdateDesc': - '云端核心版本与此应用构建版本不匹配。请运行核心更新程序来解决此差异。', - 'bootCheck.updating': '正在更新…', - 'bootCheck.updateCloudCore': '更新云端核心', - 'bootCheck.versionCheckFailed': '核心版本检查失败', - 'bootCheck.versionCheckFailedDesc': - '核心正在运行但未暴露版本接口。它可能已过时。请重启或更新核心以继续。', - 'bootCheck.working': '正在执行…', - 'bootCheck.restartUpdateCore': '重启 / 更新核心', - 'bootCheck.unexpectedError': '意外的启动检查错误', - 'bootCheck.actionFailed': '操作失败 — 请重试。', - 'bootCheck.portConflictTitle': '无法启动应用引擎', - 'bootCheck.portConflictBody': - '另一个进程正在占用 OpenHuman 所需的网络端口。我们将尝试自动修复此问题。', - 'bootCheck.portConflictFixButton': '自动修复', - 'bootCheck.portConflictFixing': '修复中…', - 'bootCheck.portConflictFixFailed': '自动修复未成功。请重启您的计算机后重试。', - 'notifications.justNow': '刚刚', - 'notifications.minAgo': '{n} 分钟前', - 'notifications.hrAgo': '{n} 小时前', - 'notifications.dayAgo': '{n} 天前', - 'notifications.category.messages': '消息', - 'notifications.category.agents': '智能体', - 'notifications.category.skills': '技能', - 'notifications.category.system': '系统', - 'notifications.category.meetings': '会议', - 'notifications.category.reminders': '提醒', - 'notifications.category.important': '重要', - 'about.update.status.checking': '检查中...', - 'about.update.status.available': 'v{version} 可用', - 'about.update.status.availableNoVersion': '更新可用', - 'about.update.status.downloading': '下载中...', - 'about.update.status.readyToInstall': 'v{version} 已准备好安装', - 'about.update.status.readyToInstallNoVersion': '已准备好安装', - 'about.update.status.installing': '安装中...', - 'about.update.status.restarting': '重启中...', - 'about.update.status.upToDate': '已是最新版本', - 'about.update.status.error': '更新检查失败', - 'about.update.status.default': '检查更新', - 'welcome.connectionFailed': '连接失败: {status} {statusText}', - 'welcome.connectionFailedMsg': '连接失败: {message}', - 'welcome.continueLocally': '本地继续', - 'welcome.localSessionStarting': '正在启动本地会话...', - 'welcome.localSessionDesc': '使用离线本地配置文件,跳过 TinyHumans OAuth。', - 'chat.agentChatDesc': '与智能体进行直接对话。', - 'channels.activeRouteValue': '{channel} 通过 {authMode}', - 'privacy.dataKind.messages': '消息', - 'privacy.dataKind.agents': '智能体', - 'privacy.dataKind.skills': '技能', - 'privacy.dataKind.system': '系统', - 'privacy.dataKind.meetings': '会议', - 'privacy.dataKind.reminders': '提醒', - 'privacy.dataKind.important': '重要', - 'onboarding.enableLocalAI': '启用本地 AI', - 'onboarding.skills.status.available': '可用', - 'onboarding.skills.status.connected': '已连接', - 'onboarding.skills.status.connecting': '连接中', - 'onboarding.skills.status.error': '错误', - 'onboarding.skills.status.unavailable': '不可用', - 'composio.statusUnavailable': '状态不可用', - 'composio.envVarOverrides': '已设置,将覆盖此设置。', - 'memory.day.sun': '日', - 'memory.day.mon': '一', - 'memory.day.tue': '二', - 'memory.day.wed': '三', - 'memory.day.thu': '四', - 'memory.day.fri': '五', - 'memory.day.sat': '六', - 'memory.ingesting': '摄取中', - 'memory.ingestionQueued': '排队中', - 'memory.ingestingTitle': '正在摄取 {title}', - 'mic.noAudioCaptured': '未捕获到音频', - 'mic.noSpeechDetected': '未检测到语音', - 'mic.lowConfidenceResult': '无法清楚地理解音频 — 请重试', - 'mic.failedToStopRecording': '停止录音失败: {message}', - 'mic.transcriptionFailed': '转录失败: {message}', - 'reflections.kind.retrospective': '回顾', - 'reflections.kind.derivedFact': '派生事实', - 'reflections.kind.moodInsight': '情绪洞察', - 'reflections.kind.relationshipInsight': '关系洞察', - 'graph.tooltip.summary': '摘要', - 'graph.tooltip.contact': '联系人', - 'localModel.usage.never': '从不', - 'localModel.usage.mediumLoad': '中等负载', - 'localModel.usage.lowLoad': '低负载', - 'localModel.usage.idleMode': '空闲模式', - 'localModel.rebootstrapComplete': '模型重新引导完成。', - 'localModel.modelsVerified': '本地模型已验证。', - 'accounts.addModal.allConnected': '全部已连接', - 'accounts.addModal.title': '添加账户', - 'accounts.respondQueue.empty': '队列为空', - 'accounts.respondQueue.hide': '隐藏回复队列', - 'accounts.respondQueue.loadFailed': '加载回复队列失败', - 'accounts.respondQueue.loading': '加载队列中…', - 'accounts.respondQueue.pending': '待处理', - 'accounts.respondQueue.show': '显示回复队列', - 'accounts.respondQueue.title': '回复队列', - 'accounts.webviewHost.almostReady': '即将就绪...', - 'accounts.webviewHost.loadTimeout': '网页视图加载超时', - 'accounts.webviewHost.loading': '正在加载 {providerName}...', - 'accounts.webviewHost.loadingAccount': '正在加载账户', - 'accounts.webviewHost.restoringSession': '正在恢复会话...', - 'accounts.webviewHost.retryLoading': '重试加载', - 'accounts.webviewHost.takingLonger': '{providerName} 加载时间比预期更长。', - 'accounts.webviewHost.timeoutHint': '超时提示', - 'app.connectionBadge.composio': 'Composio', - 'app.connectionBadge.messaging': '消息', - 'app.connectionIndicator.connected': '已连接到 OpenHuman AI', - 'app.connectionIndicator.connecting': '连接中', - 'app.connectionIndicator.coreOffline': '核心离线', - 'app.connectionIndicator.disconnected': '已断开', - 'app.connectionIndicator.offline': '离线', - 'app.connectionIndicator.reconnecting': '重新连接中…', - 'app.errorFallback.componentStack': '组件堆栈', - 'app.errorFallback.downloadLatest': '下载最新版本', - 'app.errorFallback.heading': '出现错误', - 'app.errorFallback.hint': '提示', - 'app.errorFallback.reloadApp': '重新加载应用', - 'app.errorFallback.subheading': '详情', - 'app.errorFallback.tryRecover': '尝试恢复', - 'app.localAiDownload.installing': '安装中...', - 'app.localAiDownload.preparing': '准备中...', - 'app.openhumanLink.accounts.continueWith': '使用 {label} 登录继续', - 'app.openhumanLink.accounts.done': '完成', - 'app.openhumanLink.accounts.intro': '简介', - 'app.openhumanLink.accounts.webviewNote': '网页视图说明', - 'app.openhumanLink.billing.openDashboard': '打开控制台', - 'app.openhumanLink.billing.stayOnTrial': '继续试用', - 'app.openhumanLink.billing.trialCredit': '试用配额', - 'app.openhumanLink.billing.trialDesc': '试用说明', - 'app.openhumanLink.defaultBody': '弹窗中尚未就绪。完成后打开完整设置页面', - 'app.openhumanLink.discord.intro': '简介', - 'app.openhumanLink.discord.openInvite': '打开邀请', - 'app.openhumanLink.discord.perk1': '福利 1', - 'app.openhumanLink.discord.perk2': '福利 2', - 'app.openhumanLink.discord.perk3': '福利 3', - 'app.openhumanLink.discord.perk4': '福利 4', - 'app.openhumanLink.done': '完成', - 'app.openhumanLink.loadingChannelSetup': '正在加载渠道设置', - 'app.openhumanLink.maybeLater': '稍后再说', - 'app.openhumanLink.notifications.asking': '正在请求系统权限…', - 'app.openhumanLink.notifications.blocked': '已被阻止', - 'app.openhumanLink.notifications.blockedStep1': '打开系统设置', - 'app.openhumanLink.notifications.blockedStep2': '找到 OpenHuman', - 'app.openhumanLink.notifications.blockedStep3': '开启通知权限', - 'app.openhumanLink.notifications.intro': '简介', - 'app.openhumanLink.notifications.promptHint': '提示', - 'app.openhumanLink.notifications.retry': '重试测试通知', - 'app.openhumanLink.notifications.send': '发送测试通知', - 'app.openhumanLink.notifications.sendFailed': '无法发送:{error}', - 'app.openhumanLink.notifications.sent': - '测试通知已发送。如果未收到,请前往「系统设置 → 通知 → OpenHuman」,开启「允许通知」并将横幅样式设置为「持续」。', - 'app.openhumanLink.skipForNow': '暂时跳过', - 'app.openhumanLink.telegramUnavailable': 'Telegram 不可用', - 'app.openhumanLink.title.accounts': '连接你的应用', - 'app.openhumanLink.title.billing': '账单与配额', - 'app.openhumanLink.title.discord': '加入社区', - 'app.openhumanLink.title.messaging': '连接聊天渠道', - 'app.openhumanLink.title.notifications': '允许通知', - 'app.persistRehydration.body': '正在恢复应用状态', - 'app.persistRehydration.heading': '加载中', - 'app.persistRehydration.resetCta': '重置中…', - 'app.persistRehydration.resetting': '重置中…', - 'app.routeLoading.initializing': '正在初始化 OpenHuman...', - 'app.update.currentlyOn': '{version}', - 'app.update.errorFallback': '更新时出现问题。', - 'app.update.header.default': '更新', - 'app.update.header.error': '更新失败', - 'app.update.header.installing': '正在安装更新', - 'app.update.header.readyToInstall': '更新已准备好安装', - 'app.update.header.restarting': '正在重启…', - 'app.update.later': '稍后', - 'app.update.newVersionReady': '新版本已准备好安装。', - 'app.update.progress.downloaded': '已下载', - 'app.update.progress.installing': '正在安装新版本…', - 'app.update.progress.restarting': '正在重新启动应用…', - 'app.update.progress.working': '{percent}%', - 'app.update.restartNote': '重启说明', - 'app.update.restartNow': '立即重启', - 'app.update.versionReady': '版本 {newVersion} 已准备好安装。', - 'channels.discord.accountLinked': '账户已关联', - 'channels.discord.connect': '连接', - 'channels.discord.linkTokenExpired': '关联令牌已过期,请重试。', - 'channels.discord.linkTokenInstruction': '{token}', - 'channels.discord.linkTokenLabel': '关联令牌', - 'channels.discord.linkTokenOnce': '一次性关联令牌', - 'channels.discord.picker.allPermissionsOk': '机器人在该频道拥有所有必要权限。', - 'channels.discord.picker.botNotInServers': '机器人未加入任何服务器', - 'channels.discord.picker.category': '分类', - 'channels.discord.picker.channel': '频道', - 'channels.discord.picker.checkingPermissions': '检查权限中', - 'channels.discord.picker.loadingChannels': '正在加载频道...', - 'channels.discord.picker.loadingServers': '正在加载服务器...', - 'channels.discord.picker.missingPermissions': '缺少权限', - 'channels.discord.picker.noChannels': '未找到文字频道', - 'channels.discord.picker.noServers': '未找到服务器', - 'channels.discord.picker.selectChannel': '选择频道', - 'channels.discord.picker.selectServer': '选择服务器', - 'channels.discord.picker.server': '服务器', - 'channels.discord.picker.serverChannelSelection': '服务器与频道选择', - 'channels.discord.savedRestartRequired': '频道已保存。重启应用以激活。', - 'channels.telegram.connect': '连接', - 'channels.telegram.managedDmConnecting': '正在连接私信', - 'channels.telegram.managedDmTimeout': '私信连接超时', - 'channels.telegram.reconnect': '重新连接', - 'channels.telegram.savedRestartRequired': '频道已保存。重启应用以激活。', - 'channels.web.alwaysAvailable': '始终可用', - - // Discord - 'channels.discord.displayName': 'Discord', - 'channels.discord.description': '通过 Discord 发送和接收消息。', - 'channels.discord.authMode.bot_token.description': '提供你自己的 Discord bot token。', - 'channels.discord.authMode.oauth.description': - '通过 OAuth 将 OpenHuman 机器人安装到你的 Discord 服务器。', - 'channels.discord.authMode.managed_dm.description': - '将你的个人 Discord 账户关联到 OpenHuman 机器人。', - 'channels.discord.fields.bot_token.label': '机器人代币', - 'channels.discord.fields.bot_token.placeholder': '你的 Discord bot token', - 'channels.discord.fields.guild_id.label': '服务器 (Guild) ID', - 'channels.discord.fields.guild_id.placeholder': '可选:限制到特定服务器', - - // Telegram - 'channels.telegram.displayName': 'Telegram', - 'channels.telegram.description': '通过 Telegram 发送和接收消息。', - 'channels.telegram.authMode.managed_dm.description': '直接向 OpenHuman Telegram 机器人发送消息。', - 'channels.telegram.authMode.bot_token.description': - '从 @BotFather 获取你自己的 Telegram Bot token。', - 'channels.telegram.fields.bot_token.label': '机器人代币', - 'channels.telegram.fields.bot_token.placeholder': '123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11', - 'channels.telegram.fields.allowed_users.label': '允许的用户', - 'channels.telegram.fields.allowed_users.placeholder': '逗号分隔的 Telegram 用户名', - - // Web - 'channels.web.displayName': '网络', - 'channels.web.description': '通过内置的 Web UI 聊天。', - 'channels.web.authMode.managed_dm.description': '使用嵌入式 Web 聊天 — 无需设置。', - 'welcome.continueLocallyExperimental': '在本地继续(实验性)', - 'channels.yuanbao.connect': 'Connect', - 'channels.yuanbao.connecting': '连接中…', - 'channels.yuanbao.fieldRequired': '{field} 不能为空', - 'channels.yuanbao.reconnect': 'Reconnect', - 'channels.yuanbao.savedRestartRequired': 'Channel saved. Restart the app to activate it.', - 'channels.yuanbao.unexpectedStatus': '意外的连接状态:{status}', - 'chat.approval.approve': 'Approve', - 'chat.approval.alwaysAllow': 'Always allow', - 'chat.approval.alwaysAllowHint': 'Stop asking for this tool — add it to your Always-allow list', - 'chat.approval.deciding': 'Working…', - 'chat.approval.deny': 'Deny', - 'chat.approval.error': 'Could not record your decision — try again.', - 'chat.approval.fallback': 'The agent wants to run an action that needs your approval.', - 'chat.approval.title': 'Approval needed', - 'chat.approval.tool': 'Tool:', -}; - -export default zhCN3; diff --git a/app/src/lib/i18n/chunks/zh-CN-4.ts b/app/src/lib/i18n/chunks/zh-CN-4.ts deleted file mode 100644 index 12a6098ed..000000000 --- a/app/src/lib/i18n/chunks/zh-CN-4.ts +++ /dev/null @@ -1,479 +0,0 @@ -import type { TranslationMap } from '../types'; - -// Simplified Chinese (简体中文) chunk 4/5. Translated from chunks/en-4.ts. -const zhCN4: TranslationMap = { - 'chat.unsubscribeApproval.approve': '批准并退订', - 'chat.unsubscribeApproval.approved': '✓ 已成功退订。', - 'chat.unsubscribeApproval.denied': '✕ 请求已拒绝。', - 'chat.unsubscribeApproval.deny': '拒绝', - 'chat.unsubscribeApproval.processing': '处理中...', - 'chat.unsubscribeApproval.title': '退订请求', - 'commandPalette.ariaLabel': '命令面板', - 'commandPalette.description': '描述', - 'commandPalette.label': '命令', - 'commandPalette.noResults': '无结果', - 'commandPalette.placeholder': '输入命令或搜索…', - 'commandPalette.searchAria': '搜索命令', - 'commandPalette.shortcutHint': '按 ? 查看所有快捷键', - 'commandPalette.title': '命令面板', - 'composio.connect.additionalConfigRequired': '需要额外配置', - 'composio.connect.atlassianSubdomainHint': '极致', - 'composio.connect.atlassianSubdomainLabel': 'Atlassian 子域名', - 'composio.connect.connect': '连接', - 'composio.connect.connectionFailed': '连接失败。', - 'composio.connect.disconnectFailed': '断开连接失败:{msg}', - 'composio.connect.disconnecting': '断开中…', - 'composio.connect.idleDescription': '连接你的', - 'composio.connect.idleDescriptionSuffix': - '账户。我们会打开浏览器窗口,你在其中授权后,应用会自动检测到该连接。', - 'composio.connect.isConnected': '已连接。', - 'composio.connect.manage': '管理', - 'composio.connect.needsSubdomain': '要连接', - 'composio.connect.needsSubdomainSuffix': - '请输入你的 Atlassian 子域名(例如 acme.atlassian.net 中的 acme),然后重试。', - 'composio.connect.oauthComplete': '等待完成 OAuth…', - 'composio.connect.oauthTimeout': 'OAuth 超时', - 'composio.connect.permissions': '权限', - 'composio.connect.permissionsDefault': '默认启用读写权限', - 'composio.connect.permissionsNote': '可暴露', - 'composio.connect.permissionsNoteSuffix': - 'OpenHuman 自身的智能体权限通过下方的读取、写入和管理员开关控制。', - 'composio.connect.reopenBrowser': '重新打开浏览器', - 'composio.connect.requestingUrl': '正在请求连接 URL…', - 'composio.connect.retryConnection': '重试连接', - 'composio.connect.scopeLoadError': '无法加载权限范围偏好:{msg}', - 'composio.connect.scopeSaveError': '无法保存 {key} 权限范围:{msg}', - 'composio.connect.subdomainInvalid': - '仅输入短子域名(例如 "acme"),而非完整 URL。只能包含字母、数字和连字符。', - 'composio.connect.subdomainRequired': '请输入你的 Atlassian 子域名以继续。', - 'composio.connect.dynamicsOrgNameLabel': 'Dynamics 365 组织名称', - 'composio.connect.dynamicsOrgNameHint': - '例如,myorg.crm.dynamics.com 的组织名称为 "myorg"。仅输入简短的组织名称,而不是完整 URL。', - 'composio.connect.needsFieldsPrefix': '若要连接', - 'composio.connect.needsFieldsSuffix': '我们需要一些额外信息。请填写下面缺失的字段并重试。', - 'composio.connect.requiredFieldEmpty': '此字段为必填项。', - 'composio.connect.wabaIdHint': - '通过 Meta 访问令牌调用 GET /me/businesses,然后 GET /{business_id}/owned_whatsapp_business_accounts 获取。', - 'composio.connect.wabaIdLabel': 'WhatsApp 企业账户 ID', - 'composio.connect.wabaIdRequired': '请输入你的 WhatsApp 企业账户 ID(WABA ID)以继续。', - 'composio.connect.waitingFor': '等待中', - 'composio.connect.waitingHint': '请在浏览器中完成授权', - 'composio.triggers.heading': '触发器', - 'composio.triggers.listenFrom': '监听来自以下的事件', - 'composio.triggers.loadError': '无法加载触发器', - 'composio.triggers.needsConfiguration': '需要配置', - 'composio.triggers.noneAvailable': '当前没有可用的触发器:', - 'conversations.taskKanban.moveLeft': '向左移动', - 'conversations.taskKanban.moveRight': '向右移动', - 'conversations.taskKanban.title': '任务', - 'conversations.toolTimeline.turn': '轮次', - 'conversations.toolTimeline.workerThread': '工作线程', - 'daemon.serviceBlockingGate.body': '核心服务不可用,请等待或下载最新版本。', - 'daemon.serviceBlockingGate.downloadHint': '下载最新版本', - 'daemon.serviceBlockingGate.downloadLatest': '下载最新版本', - 'daemon.serviceBlockingGate.retryCore': '重试 Core', - 'daemon.serviceBlockingGate.retryFailed': '重试失败。请下载最新应用版本后重试。', - 'daemon.serviceBlockingGate.retrying': '重试中...', - 'daemon.serviceBlockingGate.title': 'OpenHuman 核心不可用', - 'home.banners.discordSubtitle': '加入我们,获取最新资讯', - 'home.banners.discordTitle': '加入我们的 Discord', - 'home.banners.earlyBirdDismiss': '忽略早鸟横幅', - 'home.banners.earlyBirdFirstSub': '首次订阅。', - 'home.banners.earlyBirdOn': '早鸟优惠进行中', - 'home.banners.earlyBirdTitle': '前 1,000 名用户享 6 折优惠。', - 'home.banners.earlyBirdUseCode': '使用早鸟码', - 'home.banners.getSubscription': '获取订阅', - 'home.banners.promoCreditsBody': '你的促销配额已到账', - 'home.banners.promoCreditsTitle': '{amount}', - 'home.banners.promoCreditsUsage': '查看用量详情', - 'intelligence.memoryChunk.detail.chunk': '片段', - 'intelligence.memoryChunk.detail.copyChunkId': '复制片段 ID', - 'intelligence.memoryChunk.detail.embeddingInfo': 'bge-m3 1024 维', - 'intelligence.memoryChunk.detail.noEmbedding': '无嵌入', - 'intelligence.memoryChunk.letterhead.from': '来自', - 'intelligence.memoryChunk.letterhead.to': '至', - 'intelligence.memoryChunk.mentioned.chunkOne': '1 个片段', - 'intelligence.memoryChunk.mentioned.chunkOther': '{count} 个片段', - 'intelligence.memoryChunk.mentioned.heading': '提及', - 'intelligence.memoryChunk.scoreBars.ariaScore': '{name} 得分 {pct}%', - 'intelligence.memoryChunk.scoreBars.atThreshold': '阈值 {threshold}', - 'intelligence.memoryChunk.scoreBars.dropped': '已丢弃', - 'intelligence.memoryChunk.scoreBars.heading': '保留原因', - 'intelligence.memoryChunk.scoreBars.kept': '已保留', - 'intelligence.diagram.title': 'Architecture Diagram', - 'intelligence.diagram.description': - 'Latest local architecture output from the configured diagram endpoint.', - 'intelligence.diagram.refresh': 'Refresh', - 'intelligence.diagram.refreshAria': 'Refresh diagram', - 'intelligence.diagram.emptyTitle': 'No diagram available yet', - 'intelligence.diagram.emptyDescription': - 'Generate an architecture diagram from the orchestrator and this panel will refresh from the configured local endpoint.', - 'intelligence.diagram.skillInstallCommand': 'npx skills add yizhiyanhua-ai/fireworks-tech-graph', - 'intelligence.diagram.promptExample': - 'Generate an architecture diagram of the current swarm in dark terminal style', - 'intelligence.diagram.imageAlt': 'Latest generated OpenHuman architecture diagram', - 'intelligence.diagram.refreshesEvery': 'Refreshes every {seconds}s', - 'intelligence.memoryText.entityTypePrefix': '实体类型', - 'intelligence.screenDebug.active': '活跃', - 'intelligence.screenDebug.app': '应用', - 'intelligence.screenDebug.bounds': '边界', - 'intelligence.screenDebug.captureAlt': '捕获测试结果', - 'intelligence.screenDebug.captureFailed': '失败', - 'intelligence.screenDebug.captureSuccess': '成功', - 'intelligence.screenDebug.captureTest': '捕获测试', - 'intelligence.screenDebug.capturing': '捕获中', - 'intelligence.screenDebug.frames': '帧数', - 'intelligence.screenDebug.idle': '空闲', - 'intelligence.screenDebug.lastApp': '上一个应用', - 'intelligence.screenDebug.mode': '模式', - 'intelligence.screenDebug.permAccessibility': '辅助功能权限', - 'intelligence.screenDebug.permInput': '输入监控权限', - 'intelligence.screenDebug.permScreen': '辅助功能', - 'intelligence.screenDebug.permissions': '权限', - 'intelligence.screenDebug.platformNotSupported': '平台不支持', - 'intelligence.screenDebug.recentVisionSummaries': '最近视觉摘要', - 'intelligence.screenDebug.session': '会话', - 'intelligence.screenDebug.size': '大小', - 'intelligence.screenDebug.status': '状态', - 'intelligence.screenDebug.testCapture': '测试捕获', - 'intelligence.screenDebug.time': '时间', - 'intelligence.screenDebug.title': '标题', - 'intelligence.screenDebug.unknown': '未知', - 'intelligence.screenDebug.visionQueue': '视觉队列', - 'intelligence.screenDebug.visionState': '视觉状态', - 'intelligence.tasks.activeBoardOne': '1 个跨对话的活跃看板', - 'intelligence.tasks.activeBoardOther': '{count} 个跨对话的活跃看板', - 'intelligence.tasks.empty': '暂无智能体任务看板', - 'intelligence.tasks.emptyHint': '完成一项对话后,任务看板将出现在这里。', - 'intelligence.tasks.failedToLoad': '加载失败', - 'intelligence.tasks.live': '实时', - 'intelligence.tasks.loadingBoards': '正在加载任务看板…', - 'intelligence.tasks.threadPrefix': '对话', - 'intelligence.tasks.subtitle': 'Your tasks and agent task boards across the workspace.', - 'intelligence.tasks.newTask': 'New task', - 'intelligence.tasks.personalBoardTitle': 'Agent Tasks', - 'intelligence.tasks.personalEmpty': 'No personal tasks yet', - 'intelligence.tasks.composer.title': 'New task', - 'intelligence.tasks.composer.titleLabel': 'Title', - 'intelligence.tasks.composer.titlePlaceholder': 'What needs to be done?', - 'intelligence.tasks.composer.statusLabel': 'Status', - 'intelligence.tasks.composer.attachLabel': 'Attach to conversation', - 'intelligence.tasks.composer.attachNone': 'Personal (no conversation)', - 'intelligence.tasks.composer.objectiveLabel': 'Objective', - 'intelligence.tasks.composer.objectivePlaceholder': 'Optional — the desired outcome', - 'intelligence.tasks.composer.notesLabel': 'Notes', - 'intelligence.tasks.composer.notesPlaceholder': 'Optional notes', - 'intelligence.tasks.composer.create': 'Create task', - 'intelligence.tasks.composer.creating': 'Creating…', - 'intelligence.tasks.composer.createFailed': "Couldn't create the task", - 'notifications.card.dismiss': '忽略通知', - 'notifications.card.importanceTitle': '重要性', - 'notifications.center.empty': '暂无通知', - 'notifications.center.emptyHint': '新通知将出现在这里', - 'notifications.center.filterAll': '全部', - 'notifications.center.markAllRead': '全部标记已读', - 'notifications.center.title': '通知', - 'oauth.button.loopbackTimeout': '登录超时 — 浏览器未完成 OAuth 跳转。请重试。', - 'oauth.button.connecting': '连接中...', - 'oauth.login.continueWith': '继续使用', - 'onboarding.contextGathering.buildingDesc': '正在分析你的历史记录...', - 'onboarding.contextGathering.buildingProfile': '正在构建你的档案...', - 'onboarding.contextGathering.continueToChat': '前往对话', - 'onboarding.contextGathering.errorDesc': - '我们暂时无法构建你的完整资料,但没关系——你可以继续,资料会随时间逐步完善。', - 'onboarding.contextGathering.coreAlive': '核心可访问 — 首次启动可能需要一分钟。', - 'onboarding.contextGathering.coreAliveProbing': '正在检查核心连接…', - 'onboarding.contextGathering.coreUnreachable': '核心未响应。你可以继续,稍后再试。', - 'onboarding.contextGathering.stillWorkingDesc': - '我们正在预热本地模型与工具,首次启动可能需要 30–60 秒。你可以随时进入对话 — 档案构建会在后台继续进行。', - 'onboarding.contextGathering.stillWorkingTitle': '仍在生成你的档案…', - 'onboarding.contextGathering.title': '上下文收集', - 'openhuman.team_list_teams': '团队列表', - 'overlay.ariaAttention': '注意消息', - 'overlay.ariaCompanion': '伴侣已激活', - 'overlay.ariaOrb': 'OpenHuman 浮层', - 'overlay.ariaVoiceActive': '语音输入已激活', - 'overlay.companion.error': '错误', - 'overlay.companion.listening': '正在聆听…', - 'overlay.companion.pointing': '正在指向…', - 'overlay.companion.speaking': '正在说话…', - 'overlay.companion.thinking': '正在思考…', - 'overlay.orbTitle': '拖动以移动 · 双击重置位置', - 'pages.settings.account.connections': '连接', - 'pages.settings.account.connectionsDesc': '管理已连接的账户和服务', - 'pages.settings.account.privacy': '隐私', - 'pages.settings.account.privacyDesc': '控制哪些数据离开你的设备', - 'pages.settings.account.recoveryPhrase': '恢复短语', - 'pages.settings.account.recoveryPhraseDesc': '查看并备份你的恢复短语', - 'pages.settings.account.team': '团队', - 'pages.settings.account.teamDesc': '管理团队成员和权限', - 'pages.settings.accountSection.description': '恢复短语、团队、连接与隐私设置。', - 'pages.settings.accountSection.title': '账户', - 'pages.settings.ai.llm': '语言模型', - 'pages.settings.ai.llmDesc': '选择并配置语言模型提供商', - 'pages.settings.ai.voice': '语音', - 'pages.settings.ai.voiceDesc': '配置语音输入和输出', - 'pages.settings.ai.embeddings': '向量嵌入', - 'pages.settings.ai.embeddingsDesc': '用于记忆检索的向量编码模型', - 'pages.settings.aiSection.description': '语言模型提供商、本地 Ollama 以及语音(STT / TTS)。', - 'pages.settings.aiSection.title': 'AI', - 'pages.settings.features.desktopCompanion': '桌面伴侣', - 'pages.settings.features.desktopCompanionDesc': - '具有屏幕感知能力的语音助手 — 倾听、观看、说话、指向', - 'pages.settings.features.messagingChannels': '消息渠道', - 'pages.settings.features.messagingChannelsDesc': '配置消息渠道和集成', - 'pages.settings.features.notifications': '通知', - 'pages.settings.features.notificationsDesc': '管理通知偏好', - 'pages.settings.features.screenAwareness': '屏幕感知', - 'pages.settings.features.screenAwarenessDesc': '让助手感知你的屏幕内容', - 'pages.settings.features.tools': '工具', - 'pages.settings.features.toolsDesc': '管理已连接的工具和集成', - 'pages.settings.featuresSection.description': '屏幕感知、消息和工具。', - 'pages.settings.featuresSection.title': '功能', - 'privacy.dataKind.credentials': '凭据', - 'privacy.dataKind.derived': '派生数据', - 'privacy.dataKind.diagnostics': '诊断信息', - 'privacy.dataKind.metadata': '元数据', - 'privacy.dataKind.raw': '原始数据', - 'privacy.whatLeaves.link.label': '哪些数据会离开我的电脑?', - 'rewards.community.achievementsUnlocked': '已解锁 {unlocked}/{total} 项成就', - 'rewards.community.connectDiscord': '连接 Discord', - 'rewards.community.cumulativeTokens': '累计令牌', - 'rewards.community.currentStreak': '当前连续天数', - 'rewards.community.discordLinkedNotInGuild': '已关联 Discord 但未加入服务器', - 'rewards.community.discordMember': '已加入服务器', - 'rewards.community.discordNotLinked': '未关联 Discord', - 'rewards.community.discordServer': 'Discord 服务器', - 'rewards.community.discordStatusUnavailable': 'Discord 状态不可用', - 'rewards.community.discordWaiting': '等待 Discord 验证', - 'rewards.community.heroSubtitle': '完成任务,赚取奖励', - 'rewards.community.heroTitle': '社区奖励', - 'rewards.community.joinDiscord': '加入 Discord', - 'rewards.community.loadingRewards': '正在加载奖励…', - 'rewards.community.locked': '已解锁', - 'rewards.community.retrying': '重试中…', - 'rewards.community.rolesAndRewards': '角色与奖励', - 'rewards.community.streakDays': '{n} 天', - 'rewards.community.syncPending': '奖励同步待处理', - 'rewards.community.syncPendingDesc': '奖励同步正在进行中,请稍后查看。', - 'rewards.community.syncUnavailable': '同步不可用', - 'rewards.community.tryAgain': '重试中…', - 'rewards.community.unknown': '未知', - 'rewards.community.unlocked': '已解锁', - 'rewards.community.yourProgress': '你的进度', - 'rewards.coupon.colCode': '代码', - 'rewards.coupon.colRedeemed': '兑换时间', - 'rewards.coupon.colReward': '奖励', - 'rewards.coupon.colStatus': '状态', - 'rewards.coupon.loadingHistory': '正在加载奖励历史…', - 'rewards.coupon.noCodes': '尚未兑换任何奖励码。', - 'rewards.coupon.pending': '处理中', - 'rewards.coupon.placeholder': '优惠码', - 'rewards.coupon.promoCredits': '促销配额', - 'rewards.coupon.recentRedemptions': '最近兑换', - 'rewards.coupon.redeemAccepted': '{code} 已接受。完成所需操作后将解锁 {amount}。', - 'rewards.coupon.redeemButton': '兑换码', - 'rewards.coupon.redeemSuccess': '{code} 已兑换。{amount} 已添加至你的额度。', - 'rewards.coupon.redeemedCodes': '已兑换代码', - 'rewards.coupon.redeeming': '兑换中...', - 'rewards.coupon.statusApplied': '已应用', - 'rewards.coupon.statusPendingAction': '待操作', - 'rewards.coupon.statusRedeemed': '已兑换', - 'rewards.coupon.subtitle': '输入优惠码以兑换奖励', - 'rewards.coupon.title': '兑换优惠码', - 'rewards.referralSection.activity': '邀请活动', - 'rewards.referralSection.apply': '应用中…', - 'rewards.referralSection.applying': '应用中…', - 'rewards.referralSection.colReferredUser': '被邀请用户', - 'rewards.referralSection.colReward': '奖励', - 'rewards.referralSection.colStatus': '状态', - 'rewards.referralSection.colUpdated': '更新时间', - 'rewards.referralSection.completed': '已完成', - 'rewards.referralSection.copyCode': '复制邀请码', - 'rewards.referralSection.copyFailed': '复制失败', - 'rewards.referralSection.haveCode': '有邀请码?', - 'rewards.referralSection.haveCodeDesc': '输入好友的邀请码,双方均可获得奖励。', - 'rewards.referralSection.linked': '已关联', - 'rewards.referralSection.linkedCode': '已关联邀请码', - 'rewards.referralSection.loading': '正在加载邀请计划…', - 'rewards.referralSection.noReferrals': '暂无邀请记录', - 'rewards.referralSection.pendingReferrals': '待处理邀请', - 'rewards.referralSection.placeholder': '邀请码', - 'rewards.referralSection.share': '分享', - 'rewards.referralSection.statusCompleted': '已完成', - 'rewards.referralSection.statusExpired': '已过期', - 'rewards.referralSection.statusJoined': '已加入', - 'rewards.referralSection.subtitle': '邀请好友,双方均可获得配额奖励', - 'rewards.referralSection.title': '邀请好友,赚取配额', - 'rewards.referralSection.totalEarned': '总获得', - 'rewards.referralSection.yourCode': '你的邀请码', - 'settings.ai.addCloudProvider': '添加云端提供商', - 'settings.ai.addProvider': '保存中…', - 'settings.ai.apiKeyFieldLabel': 'API 密钥', - 'settings.ai.apiKeyRequired': '请粘贴你的 API 密钥以继续。', - 'settings.ai.apiKeyStoredEncrypted': 'API 密钥已加密存储', - 'settings.ai.apiKeysEncrypted': 'auth-profiles.json', - 'settings.ai.clearStoredKey': '清除已存储的密钥', - 'settings.ai.connectProvider': '连接 {label}', - 'settings.ai.customRouting': '自定义路由', - 'settings.ai.defaultResolvesTo': '默认解析为', - 'settings.ai.discard': '放弃', - 'settings.ai.editProvider': '编辑提供商', - 'settings.ai.llmProviders': 'LLM 提供商', - 'settings.ai.llmProvidersDesc': '配置你的语言模型提供商', - 'settings.ai.localOllama': '本地(Ollama)', - 'settings.ai.modelLabel': '模型', - 'settings.ai.noCustomProviders': '未配置自定义提供商', - 'settings.ai.openAiCompat.authHeaderExample': '授权:持有者<您的密钥>', - 'settings.ai.openAiCompat.authHeaderLabel': '验证标头', - 'settings.ai.openAiCompat.baseUrlLabel': '基础 URL', - 'settings.ai.openAiCompat.baseUrlUnavailable': '不可用', - 'settings.ai.openAiCompat.clearKey': '清除键', - 'settings.ai.openAiCompat.description': - "Point local harnesses at this /v1 server to route through the providers configured below. Authentication uses a stable key you set here, not the app's internal core bearer.", - 'settings.ai.openAiCompat.keyConfigured': '按键已配置', - 'settings.ai.openAiCompat.keyRequired': '需要钥匙', - 'settings.ai.openAiCompat.rotateKey': '旋转钥匙', - 'settings.ai.openAiCompat.setKey': '设置键', - 'settings.ai.openAiCompat.title': 'OpenAI 兼容端点', - 'settings.ai.providerLabel': '提供商', - 'settings.ai.routing': '路由', - 'settings.ai.routingCustom': '自定义路由', - 'settings.ai.routingDefault': '默认', - 'settings.ai.routingDesc': '为不同工作负载选择路由策略', - 'settings.ai.saveChanges': '保存中…', - 'settings.ai.saving': '保存中…', - 'settings.ai.unsavedChange': '未保存的更改', - 'settings.ai.unsavedChanges': '未保存的更改', - 'settings.ai.workloadGroupBackground': '后台工作负载', - 'settings.ai.workloadGroupChat': '对话工作负载', - 'settings.autocomplete.appFilter.acceptSuggestion': '接受建议', - 'settings.autocomplete.appFilter.contextOverride': '上下文覆盖(可选)', - 'settings.autocomplete.appFilter.debugFocus': '调试焦点', - 'settings.autocomplete.appFilter.getSuggestion': '获取建议', - 'settings.autocomplete.appFilter.liveLogs': '实时日志', - 'settings.autocomplete.appFilter.noLogs': '无日志', - 'settings.autocomplete.appFilter.refreshStatus': '刷新中…', - 'settings.autocomplete.appFilter.refreshing': '刷新中…', - 'settings.autocomplete.appFilter.runtime': '运行时', - 'settings.autocomplete.appFilter.test': '测试', - 'settings.autocomplete.completionStyle.acceptedCompletion': - '已存储接受的补全记录,用于个性化后续建议。', - 'settings.autocomplete.completionStyle.acceptedCompletions': - '已存储接受的补全记录,用于个性化后续建议。', - 'settings.autocomplete.completionStyle.clearHistory': '清除中…', - 'settings.autocomplete.completionStyle.clearing': '清除中…', - 'settings.autocomplete.completionStyle.debounce': '防抖(ms)', - 'settings.autocomplete.completionStyle.enabled': '已启用', - 'settings.autocomplete.completionStyle.maxChars': '最大字符数', - 'settings.autocomplete.completionStyle.noHistory': - '暂无接受的补全记录。用 Tab 键接受建议以开始个性化。', - 'settings.autocomplete.completionStyle.overlayTtl': '浮层显示时长(ms)', - 'settings.autocomplete.completionStyle.personalizationHistory': '个性化历史', - 'settings.autocomplete.completionStyle.styleExamples': '风格示例(每行一条)', - 'settings.autocomplete.completionStyle.styleInstructions': '风格说明', - 'settings.billing.autoRecharge.addAmount': '充入此金额', - 'settings.billing.autoRecharge.addCard': '添加银行卡', - 'settings.billing.autoRecharge.amountHint': '最低充值金额', - 'settings.billing.autoRecharge.defaultCard': '默认银行卡', - 'settings.billing.autoRecharge.lastRechargeFailed': '上次充值失败', - 'settings.billing.autoRecharge.lastRecharged': '上次充值时间', - 'settings.billing.autoRecharge.noCards': '未添加银行卡', - 'settings.billing.autoRecharge.paymentMethods': '支付方式', - 'settings.billing.autoRecharge.rechargeInProgress': '充值进行中', - 'settings.billing.autoRecharge.rechargeWhen': '余额低于以下金额时自动充值', - 'settings.billing.autoRecharge.saveSettings': '保存中…', - 'settings.billing.autoRecharge.saving': '保存中…', - 'settings.billing.autoRecharge.setDefault': '设为默认', - 'settings.billing.autoRecharge.subtitle': '余额不足时自动充值,确保服务不中断', - 'settings.billing.autoRecharge.title': '启用自动充值', - 'settings.billing.autoRecharge.toggleAriaLabel': '切换自动充值', - 'settings.billing.autoRecharge.weeklyLimit': '每周消费限额', - 'settings.billing.history.desc': '查看你的账单历史', - 'settings.billing.history.empty': '暂无账单记录', - 'settings.billing.history.openPortal': '打开账单门户', - 'settings.billing.history.posted': '已记账', - 'settings.billing.history.title': '账单历史', - 'settings.billing.inferenceBudget.cycleEnds': '周期结束', - 'settings.billing.inferenceBudget.exhausted': '已用尽', - 'settings.billing.inferenceBudget.loadError': '无法加载预算信息', - 'settings.billing.inferenceBudget.noBudgetDesc': '暂无预算配置', - 'settings.billing.inferenceBudget.noRecurringBudget': '无周期性预算', - 'settings.billing.inferenceBudget.remaining': '剩余', - 'settings.billing.inferenceBudget.tenHourCap': '10 小时上限', - 'settings.billing.inferenceBudget.title': '推理预算', - 'settings.billing.payAsYouGo.available': '可用余额', - 'settings.billing.payAsYouGo.chargeCustomAmount': '打开中…', - 'settings.billing.payAsYouGo.chooseTopUpDesc': '选择充值金额', - 'settings.billing.payAsYouGo.chooseTopUpTitle': '充值余额', - 'settings.billing.payAsYouGo.creditBalanceDesc': '你当前的配额余额', - 'settings.billing.payAsYouGo.creditBalanceTitle': '配额余额', - 'settings.billing.payAsYouGo.customAmount': '自定义金额', - 'settings.billing.payAsYouGo.enterAmount': '输入金额', - 'settings.billing.payAsYouGo.opening': '打开中…', - 'settings.billing.payAsYouGo.promotionalCredits': '促销配额', - 'settings.billing.payAsYouGo.topUpBalance': '充值余额', - 'settings.billing.payAsYouGo.topUpCredits': '充值配额', - 'settings.billing.payAsYouGo.unableToLoad': '无法加载余额。', - 'settings.billing.subscription.annual': '年付', - 'settings.billing.subscription.billedAnnually': '按年计费', - 'settings.billing.subscription.chooseSubtitle': '选择适合你的方案', - 'settings.billing.subscription.chooseTitle': '选择方案', - 'settings.billing.subscription.cryptoDesc': '支持加密货币支付', - 'settings.billing.subscription.cryptoQuestion': '想用加密货币支付?', - 'settings.billing.subscription.current': '当前', - 'settings.billing.subscription.currentPlan': '当前方案', - 'settings.billing.subscription.monthly': '月付', - 'settings.billing.subscription.paymentConfirmed': '支付已确认', - 'settings.billing.subscription.perMonth': '每月', - 'settings.billing.subscription.popular': '热门', - 'pages.settings.account.migration': '从其他助手导入', - 'pages.settings.account.migrationDesc': - '将 OpenClaw(即将支持 Hermes)的记忆和笔记迁移到此工作区。', - 'composio.connect.scope.read': '阅读', - 'composio.connect.scope.readHint': '允许代理从此连接读取数据。', - 'composio.connect.scope.write': '写', - 'composio.connect.scope.writeHint': '允许代理通过此连接创建或修改数据。', - 'composio.connect.scope.admin': '管理员', - 'composio.connect.scope.adminHint': '允许代理管理设置、权限或破坏性操作。', - 'pages.settings.composioSection.title': 'Composio', - 'pages.settings.composioSection.description': - '由 Composio 提供支持的集成的路由、触发器和历史记录。', - 'pages.settings.account.walletBalances': 'Wallet Balances', - 'pages.settings.account.walletBalancesDesc': 'View multi-chain balances for your local wallet', - 'walletBalances.title': 'Wallet Balances', - 'walletBalances.refresh': 'Refresh', - 'walletBalances.loading': 'Loading balances…', - 'walletBalances.retry': 'Retry', - 'walletBalances.emptyState': 'No wallet accounts yet — set up a wallet in Recovery Phrase.', - 'walletBalances.copyAddress': 'Copy address', - 'walletBalances.providerMissing': 'provider unavailable', - 'walletBalances.rawBalance': 'Raw: {raw}', - 'walletBalances.errorGeneric': - 'Unable to load wallet balances. Set up your wallet in Recovery Phrase and try again.', - 'conversations.taskKanban.approval.default': 'Default', - 'conversations.taskKanban.approval.notRequired': 'Not required', - 'conversations.taskKanban.approval.notRequiredBadge': 'no approval', - 'conversations.taskKanban.approval.required': 'Required', - 'conversations.taskKanban.approval.requiredBadge': 'approval', - 'conversations.taskKanban.approval.requiredBeforeExecution': 'Required before execution', - 'conversations.taskKanban.briefButton': 'Task brief', - 'conversations.taskKanban.briefTitle': 'Task brief', - 'conversations.taskKanban.closeBrief': 'Close task brief', - 'conversations.taskKanban.field.acceptanceCriteria': 'Acceptance criteria', - 'conversations.taskKanban.field.allowedTools': 'Allowed tools', - 'conversations.taskKanban.field.approval': 'Approval', - 'conversations.taskKanban.field.assignedAgent': 'Assigned agent', - 'conversations.taskKanban.field.blocker': 'Blocker', - 'conversations.taskKanban.field.evidence': 'Evidence', - 'conversations.taskKanban.field.notes': 'Notes', - 'conversations.taskKanban.field.objective': 'Objective', - 'conversations.taskKanban.field.plan': 'Plan', - 'conversations.taskKanban.field.status': 'Status', - 'conversations.taskKanban.field.title': 'Title', - 'conversations.taskKanban.saveChanges': 'Save changes', - 'conversations.taskKanban.deleteCard': 'Delete', - 'conversations.taskKanban.updateFailed': 'Could not update task; changes were not saved.', -}; - -export default zhCN4; diff --git a/app/src/lib/i18n/chunks/zh-CN-5.ts b/app/src/lib/i18n/chunks/zh-CN-5.ts deleted file mode 100644 index 337963d89..000000000 --- a/app/src/lib/i18n/chunks/zh-CN-5.ts +++ /dev/null @@ -1,979 +0,0 @@ -import type { TranslationMap } from '../types'; - -// Simplified Chinese (简体中文) chunk 5/5. Translated from chunks/en-5.ts. -const zhCN5: TranslationMap = { - 'settings.billing.subscription.save': '{pct}', - 'settings.billing.subscription.upgrade': '升级', - 'settings.billing.subscription.waiting': '等待中', - 'settings.billing.subscription.waitingPayment': '等待支付', - 'settings.composio.apiKeyDesc': '当前此设备上已存储一个 Composio API 密钥。', - 'settings.composio.apiKeyLabel': 'Composio API 密钥', - 'settings.composio.apiKeyStored': 'API 密钥已存储', - 'settings.composio.apiKeyStoredPlaceholder': '••••••••••••••••', - 'settings.composio.clearedToBackend': '已切换到后端模式', - 'settings.composio.confirmItem1': '在 app.composio.dev 上拥有带 API 密钥的账户', - 'settings.composio.confirmItem2': '通过你的个人 Composio 账户重新关联每个集成', - 'settings.composio.confirmItem3': - '注意:Composio 触发器(实时 Webhook)在直连模式下尚不可用——仅支持同步工具调用', - 'settings.composio.confirmNeedItems': '你需要:', - 'settings.composio.confirmSwitch': '我已了解,切换到直连', - 'settings.composio.confirmTitle': '⚠️ 切换到直连模式', - 'settings.composio.confirmWarning': - '你现有的集成(通过 OpenHuman 关联的 Gmail、Slack、GitHub 等)将不可见——它们存放在 OpenHuman 托管的 Composio 租户中。', - 'settings.composio.intro': - 'Composio 集成了 250+ 外部应用作为智能体可调用的工具。请选择这些工具调用的路由方式。', - 'settings.composio.modeDirect': '直连(自带 API 密钥)', - 'settings.composio.modeDirectDesc': - '调用直接发送到 backend.composio.dev。自主可控 / 适合离线场景。工具同步执行;实时触发器 Webhook 目前在直连模式下尚未路由(后续问题)。', - 'settings.composio.modeManaged': '托管(由 OpenHuman 管理)', - 'settings.composio.modeManagedDesc': - 'OpenHuman 通过我们的后端代理工具调用(推荐)。认证由我们处理,你无需粘贴 Composio API 密钥。Webhook 完全路由。', - 'settings.composio.routingMode': '路由模式', - 'settings.composio.saveErrorNoKey': '保存失败。直连模式需要非空的 API 密钥。', - 'settings.composio.saving': '保存中…', - 'settings.composio.switching': '切换中…', - 'settings.cron.jobs.desc': '管理核心调度器中的定时任务', - 'settings.cron.jobs.empty': '未找到核心定时任务。', - 'settings.cron.jobs.lastStatus': '上次状态', - 'settings.cron.jobs.loading': '正在加载定时任务...', - 'settings.cron.jobs.loadingRuns': '加载运行记录中', - 'settings.cron.jobs.nextRun': '下次运行', - 'settings.cron.jobs.pause': '暂停', - 'settings.cron.jobs.paused': '已暂停', - 'settings.cron.jobs.recentRuns': '最近运行', - 'settings.cron.jobs.removing': '删除中', - 'settings.cron.jobs.resume': '恢复', - 'settings.cron.jobs.runningNow': '立即运行', - 'settings.cron.jobs.saving': '保存中…', - 'settings.cron.jobs.schedule': '计划', - 'settings.cron.jobs.title': '核心定时任务', - 'settings.cron.jobs.viewRuns': '查看运行记录', - 'settings.localModel.deviceCapability.active': '活跃', - 'settings.localModel.deviceCapability.appliedTier': '已应用档位', - 'settings.localModel.deviceCapability.applying': '应用中', - 'settings.localModel.deviceCapability.cores': '{count} 核', - 'settings.localModel.deviceCapability.couldNotLoadPresets': '无法加载预设', - 'settings.localModel.deviceCapability.cpu': 'CPU', - 'settings.localModel.deviceCapability.customModelIds': '自定义模型 ID', - 'settings.localModel.deviceCapability.detected': '已检测到', - 'settings.localModel.deviceCapability.disabled': '已禁用', - 'settings.localModel.deviceCapability.disabledDesc': '本地 AI 已禁用', - 'settings.localModel.deviceCapability.downloadingModels': '(正在下载模型)', - 'settings.localModel.deviceCapability.downloadingSetupDesc': - '正在下载 OllamaSetup 安装程序(约 2 GB)并解压。首次安装可能需要一分钟。', - 'settings.localModel.deviceCapability.failedToApplyPreset': '应用预设失败', - 'settings.localModel.deviceCapability.gpu': 'GPU', - 'settings.localModel.deviceCapability.installFailed': 'Ollama 安装失败', - 'settings.localModel.deviceCapability.installFailedDesc': - '安装程序在 Ollama 可用之前退出。点击重试,或从 ollama.com 手动安装。', - 'settings.localModel.deviceCapability.installFirst': '请先运行 Ollama。', - 'settings.localModel.deviceCapability.installFirstDesc': - '本地层级依赖外部托管的 Ollama 端点。请自行启动它,拉取所需模型,并在运行时可达前继续使用「已禁用(云端回退)」。', - 'settings.localModel.deviceCapability.installOllamaFirst': '请先运行 Ollama 以使用此层级', - 'settings.localModel.deviceCapability.installingOllama': '正在安装 Ollama', - 'settings.localModel.deviceCapability.loadingDeviceInfo': '正在加载设备信息', - 'settings.localModel.deviceCapability.localAiDisabled': '本地 AI 已禁用 — 使用云端回退。', - 'settings.localModel.deviceCapability.modelTier': '模型档位', - 'settings.localModel.deviceCapability.needsOllama': '需要安装 Ollama', - 'settings.localModel.deviceCapability.notDetected': '未检测到', - 'settings.localModel.deviceCapability.ram': 'RAM', - 'settings.localModel.deviceCapability.recommended': '推荐', - 'settings.localModel.deviceCapability.retryInstall': '重试中…', - 'settings.localModel.deviceCapability.retrying': '重试中…', - 'settings.localModel.deviceCapability.starting': '启动中…', - 'settings.localModel.download.audioPathPlaceholder': '音频文件的绝对路径', - 'settings.localModel.download.capabilityAssets': '能力资源', - 'settings.localModel.download.downloading': '下载中...', - 'settings.localModel.download.embeddingPlaceholder': '每行一个输入字符串...', - 'settings.localModel.download.noThinkMode': '无思考模式', - 'settings.localModel.download.promptPlaceholder': '输入任意提示词并在本地模型上运行...', - 'settings.localModel.download.quantizationPref': '量化偏好', - 'settings.localModel.download.runEmbeddingTest': '运行中...', - 'settings.localModel.download.runPromptTest': '运行提示测试', - 'settings.localModel.download.runSummaryTest': '运行摘要测试', - 'settings.localModel.download.runTranscriptionTest': '运行中...', - 'settings.localModel.download.runTtsTest': '运行中...', - 'settings.localModel.download.runVisionTest': '运行中...', - 'settings.localModel.download.running': '运行中...', - 'settings.localModel.download.runningPrompt': '正在运行提示词', - 'settings.localModel.download.summarizePlaceholder': '粘贴文本以用本地模型进行摘要...', - 'settings.localModel.download.testCustomPrompt': '测试自定义提示词', - 'settings.localModel.download.testEmbeddings': '测试嵌入', - 'settings.localModel.download.testSummarization': '测试摘要', - 'settings.localModel.download.testVisionPrompt': '测试视觉提示词', - 'settings.localModel.download.testVoiceInput': '测试语音输入(STT)', - 'settings.localModel.download.testVoiceOutput': '测试语音输出(TTS)', - 'settings.localModel.download.ttsOutputPlaceholder': '可选输出 WAV 路径', - 'settings.localModel.download.ttsPlaceholder': '输入要合成的文字...', - 'settings.localModel.download.visionImagePlaceholder': - '每行一个图像引用(data URI、URL 或本地路径标记)', - 'settings.localModel.download.visionPromptPlaceholder': '输入视觉模型的提示词...', - 'settings.localModel.status.allChecksPassed': '所有检查已通过', - 'settings.localModel.status.artifact': '构件', - 'settings.localModel.status.backend': '后端', - 'settings.localModel.status.binary': '二进制文件', - 'settings.localModel.status.bootstrapResume': '引导 / 恢复', - 'settings.localModel.status.checking': '检查中...', - 'settings.localModel.status.checkingOllama': '检查 Ollama', - 'settings.localModel.status.customLocation': '自定义位置', - 'settings.localModel.status.customLocationDesc': '自定义 Ollama 安装路径', - 'settings.localModel.status.diagnosticsHint': - '点击「运行诊断」以验证 Ollama 是否正在运行以及模型是否已安装。', - 'settings.localModel.status.downloadingUnknown': '下载中(大小未知)', - 'settings.localModel.status.eta': '预计完成时间', - 'settings.localModel.status.expectedModels': '预期模型', - 'settings.localModel.status.forceRebootstrap': '强制重新引导', - 'settings.localModel.status.generationTps': '生成 TPS', - 'settings.localModel.status.hideErrorDetails': '隐藏错误详情', - 'settings.localModel.status.installManually': '手动安装', - 'settings.localModel.status.installManuallyFrom': '从以下地址手动安装', - 'settings.localModel.status.installOllama': '启动中…', - 'settings.localModel.status.installedModels': '已安装模型', - 'settings.localModel.status.installing': '安装中...', - 'settings.localModel.status.installingOllama': '正在安装 Ollama 运行时...', - 'settings.localModel.status.issues': '问题', - 'settings.localModel.status.issuesFound': '发现 {count} 个问题', - 'settings.localModel.status.lastLatency': '最近延迟', - 'settings.localModel.status.model': '模型', - 'settings.localModel.status.notFound': '未找到', - 'settings.localModel.status.notRunning': '未运行', - 'settings.localModel.status.ollamaBinaryPath': 'Ollama 二进制路径', - 'settings.localModel.status.ollamaDiagnostics': 'Ollama 诊断', - 'settings.localModel.status.ollamaNotInstalled': 'Ollama 运行时不可用', - 'settings.localModel.status.ollamaNotInstalledDesc': - 'OpenHuman 现在将 Ollama 视为外部推理运行时。请启动你自己的 Ollama 服务器,拉取所需模型,并将工作负载路由指向它。', - 'settings.localModel.status.progress': '进度', - 'settings.localModel.status.provider': '提供商', - 'settings.localModel.status.retryBootstrap': '重试引导', - 'settings.localModel.status.runDiagnostics': '检查中...', - 'settings.localModel.status.running': '运行中', - 'settings.localModel.status.runningExternalProcess': '通过外部进程运行', - 'settings.localModel.status.runtimeStatus': '运行时状态', - 'settings.localModel.status.server': '服务器', - 'settings.localModel.status.setPath': '设置中...', - 'settings.localModel.status.setting': '设置中...', - 'settings.localModel.status.showErrorDetails': '隐藏错误详情', - 'settings.localModel.status.showInstallErrorDetails': '隐藏错误详情', - 'settings.localModel.status.suggestedFixes': '建议修复方案', - 'settings.localModel.status.thenSetPath': '然后设置路径', - 'settings.localModel.status.triggering': '触发中...', - 'settings.localModel.status.unavailable': '不可用', - 'settings.localModel.status.working': '处理中...', - 'settings.developerMenu.ai.title': 'AI 配置', - 'settings.developerMenu.ai.desc': '云端提供商、本地 Ollama 模型和按工作负载路由', - 'settings.developerMenu.screenAwareness.title': '屏幕感知', - 'settings.developerMenu.screenAwareness.desc': '屏幕捕获权限、监控策略和会话控制', - 'settings.developerMenu.messagingChannels.title': '消息渠道', - 'settings.developerMenu.messagingChannels.desc': '配置 Telegram/Discord 认证模式和默认渠道路由', - 'settings.developerMenu.tools.title': '工具', - 'settings.developerMenu.tools.desc': '启用或停用 OpenHuman 可代表你使用的能力', - 'settings.developerMenu.agentChat.title': '智能体聊天', - 'settings.developerMenu.agentChat.desc': '使用模型和温度覆盖测试智能体对话', - 'settings.developerMenu.devWorkflow.title': 'Dev Workflow', - 'settings.developerMenu.devWorkflow.desc': - 'Autonomous agent that picks your GitHub issues and raises PRs on a schedule', - 'settings.developerMenu.devWorkflow.panelDesc': - 'Configure an autonomous developer agent that picks GitHub issues assigned to you and raises pull requests automatically on a schedule.', - 'settings.devWorkflow.githubRepository': 'GitHub Repository', - 'settings.devWorkflow.loadingRepositories': 'Loading repositories...', - 'settings.devWorkflow.selectRepository': 'Select a repository', - 'settings.devWorkflow.privateTag': '(private)', - 'settings.devWorkflow.detectingForkInfo': 'Detecting fork info...', - 'settings.devWorkflow.forkDetected': 'Fork detected', - 'settings.devWorkflow.upstream': 'Upstream:', - 'settings.devWorkflow.forkPrNote': 'PRs will be raised against the upstream repository.', - 'settings.devWorkflow.notForkNote': - 'Not a fork. PRs will be raised against this repository directly.', - 'settings.devWorkflow.targetBranch': 'Target Branch', - 'settings.devWorkflow.targetBranchNote': 'PRs will be raised against this branch', - 'settings.devWorkflow.loadingBranches': 'Loading branches...', - 'settings.devWorkflow.runFrequency': 'Run Frequency', - 'settings.devWorkflow.runFrequencyNote': - 'How often the agent should check for issues and raise PRs.', - 'settings.devWorkflow.updateConfiguration': 'Update Configuration', - 'settings.devWorkflow.saveConfiguration': 'Save Configuration', - 'settings.devWorkflow.remove': 'Remove', - 'settings.devWorkflow.saved': 'Saved', - 'settings.devWorkflow.activeConfiguration': 'Active Configuration', - 'settings.devWorkflow.activeConfigRepository': 'Repository:', - 'settings.devWorkflow.activeConfigUpstream': 'Upstream:', - 'settings.devWorkflow.activeConfigTargetBranch': 'Target branch:', - 'settings.devWorkflow.activeConfigSchedule': 'Schedule:', - 'settings.devWorkflow.enabled': 'Enabled', - 'settings.devWorkflow.paused': 'Paused', - 'settings.skillsRunner.scheduleEnabled': 'Enabled', - 'settings.skillsRunner.scheduleDisabled': 'Paused', - 'settings.skillsRunner.scheduleToggleAria': 'Toggle schedule enabled', - 'settings.skillsRunner.schedule.history': 'History', - 'settings.skillsRunner.schedule.historyLoading': 'Loading history\u2026', - 'settings.skillsRunner.schedule.historyEmpty': 'No runs yet for this schedule.', - 'settings.skillsRunner.schedule.historyNoOutput': 'No output captured.', - 'settings.skillsRunner.schedule.active': 'Active', - 'settings.skillsRunner.schedule.lastRunLabel': 'last:', - 'settings.devWorkflow.nextRun': 'Next run', - 'settings.devWorkflow.lastRun': 'Last run', - 'settings.devWorkflow.runNow': 'Run now', - 'settings.devWorkflow.running': 'Running…', - 'settings.devWorkflow.recentRuns': 'Recent runs', - 'settings.devWorkflow.cronSaveError': 'Failed to save configuration', - 'settings.devWorkflow.lastOutput': 'Last output', - 'settings.devWorkflow.noOutput': 'No output captured', - 'settings.devWorkflow.runningStatus': - 'Agent is running — picking an issue and working on a fix...', - 'settings.devWorkflow.errorNotConnected': - 'GitHub is not connected. Please connect GitHub via Settings > Advanced > Composio first.', - 'settings.devWorkflow.errorToolNotEnabled': - 'GITHUB_LIST_REPOSITORIES_FOR_THE_AUTHENTICATED_USER tool is not enabled on this backend. Please ask your admin to enable it in the Composio integration (backend#842).', - 'settings.devWorkflow.errorNotAuthenticated': 'Not authenticated. Please sign in first.', - 'settings.devWorkflow.errorNoRepositories': 'No repositories found for this GitHub account.', - 'settings.devWorkflow.schedule.every30min': 'Every 30 minutes', - 'settings.devWorkflow.schedule.everyHour': 'Every hour', - 'settings.devWorkflow.schedule.every2hours': 'Every 2 hours', - 'settings.devWorkflow.schedule.every6hours': 'Every 6 hours', - 'settings.devWorkflow.schedule.onceDaily': 'Once daily (9 AM)', - 'settings.developerMenu.cronJobs.title': '定时任务', - 'settings.developerMenu.cronJobs.desc': '查看并配置运行时技能的计划任务', - 'settings.developerMenu.localModelDebug.title': '本地模型调试', - 'settings.developerMenu.localModelDebug.desc': 'Ollama 配置、资源下载、模型测试和诊断', - 'settings.developerMenu.webhooks.title': 'Webhook', - 'settings.developerMenu.webhooks.desc': '检查运行时 Webhook 注册和捕获的请求日志', - 'settings.developerMenu.eventLog.title': 'Event Log', - 'settings.developerMenu.eventLog.desc': - 'Live colour-coded stream of all agent, tool, and system events', - 'settings.developerMenu.eventLog.allTypes': 'All types', - 'settings.developerMenu.eventLog.filterAgent': 'Filter...', - 'settings.developerMenu.eventLog.download': 'Download', - 'settings.developerMenu.eventLog.events': 'events', - 'settings.developerMenu.eventLog.live': 'Live', - 'settings.developerMenu.eventLog.disconnected': 'Disconnected', - 'settings.developerMenu.eventLog.waiting': 'Waiting for events...', - 'settings.developerMenu.eventLog.notConnected': 'Not connected to core', - 'settings.developerMenu.eventLog.jumpToLatest': 'Jump to latest', - 'settings.developerMenu.eventLog.badge.tool': 'TOOL', - 'settings.developerMenu.eventLog.badge.agent': 'AGENT', - 'settings.developerMenu.eventLog.badge.info': 'INFO', - 'settings.developerMenu.eventLog.badge.mem': 'MEM', - 'settings.developerMenu.eventLog.badge.chan': 'CHAN', - 'settings.developerMenu.eventLog.badge.cron': 'CRON', - 'settings.developerMenu.eventLog.badge.hook': 'HOOK', - 'settings.developerMenu.eventLog.badge.warn': 'WARN', - 'settings.developerMenu.eventLog.badge.skill': 'SKILL', - 'settings.developerMenu.eventLog.badge.comp': 'COMP', - 'settings.developerMenu.eventLog.badge.mcp': 'MCP', - 'settings.developerMenu.intelligence.title': '智能', - 'settings.developerMenu.intelligence.desc': '记忆工作区、潜意识引擎、梦境和设置', - 'settings.developerMenu.notificationRouting.title': '通知路由', - 'settings.developerMenu.notificationRouting.desc': '集成提醒的 AI 重要性评分和编排器升级', - 'settings.developerMenu.composeioTriggers.title': 'ComposeIO 触发器', - 'settings.developerMenu.composeioTriggers.desc': '查看 ComposeIO 触发器历史和归档', - 'settings.developerMenu.composioRouting.title': 'Composio 路由(直连模式)', - 'settings.developerMenu.composioRouting.desc': - '使用你自己的 Composio API 密钥并将调用直接路由到 backend.composio.dev', - 'settings.developerMenu.integrationTriggers.title': '集成触发器', - 'settings.developerMenu.integrationTriggers.desc': '配置 Composio 集成触发器的 AI 分流设置', - 'settings.appearance.menuDesc': '选择浅色、深色或跟随系统主题', - 'settings.mascot.active': '活跃', - 'settings.mascot.characterDesc': '选择你的 OpenHuman 角色', - 'settings.mascot.characterHeading': '角色', - 'settings.mascot.customGifError': - '输入 HTTPS .gif 链接、本地回环 HTTP .gif 链接、file:// .gif 链接或本地 .gif 路径。', - 'settings.mascot.customGifHeading': '自定义 GIF 头像', - 'settings.mascot.customGifLabel': '自定义 GIF 头像链接', - 'settings.mascot.colorDesc': '选择颜色方案', - 'settings.mascot.colorHeading': '颜色', - 'settings.mascot.loadingLibrary': '正在加载 OpenHuman 库…', - 'settings.mascot.localDefault': '本地 OpenHuman(默认)', - 'settings.mascot.menuTitle': '吉祥物', - 'settings.mascot.menuDesc': '选择应用内使用的吉祥物颜色', - 'settings.mascot.noCharacters': '暂无可用的 OpenHuman 角色', - 'settings.mascot.noColorVariants': '无颜色变体', - 'settings.mascot.voice.current': '当前', - 'settings.mascot.voice.customDesc': - '在 api.elevenlabs.io/v1/voices 或您的 ElevenLabs 仪表板中查找语音 ID。仅存储 ID — 您的 API 密钥保留在后端。', - 'settings.mascot.voice.customHeading': '自定义语音 ID', - 'settings.mascot.voice.customOption': '其他(粘贴语音 ID)…', - 'settings.mascot.voice.desc': - '选择吉祥物用于语音回复的 ElevenLabs 声音。按性别筛选,从精选列表中选择,粘贴自定义 ID,或让应用根据您的界面语言自动选择声音。', - 'settings.mascot.voice.genderFemale': '女声', - 'settings.mascot.voice.genderHeading': '声音性别', - 'settings.mascot.voice.genderMale': '男声', - 'settings.mascot.voice.heading': '声音', - 'settings.mascot.voice.preset': '声音预设', - 'settings.mascot.voice.presetHeading': '声音预设', - 'settings.mascot.voice.preview': '试听声音', - 'settings.mascot.voice.previewError': '声音试听失败', - 'settings.mascot.voice.previewing': '试听中…', - 'settings.mascot.voice.reset': '重置为默认值', - 'settings.mascot.voice.useLocaleDefault': '匹配应用语言', - 'settings.mascot.voice.useLocaleDefaultDesc': '为当前界面语言自动选择一个声音。', - 'settings.memoryWindow.balanced.badge': '推荐', - 'settings.memoryWindow.balanced.hint': - '合理的默认值——在不为每次运行消耗额外 token 的情况下保持良好的连贯性。', - 'settings.memoryWindow.balanced.label': '均衡', - 'settings.memoryWindow.description': - 'OpenHuman 在每次新的智能体运行中注入多少记忆上下文。更大的窗口对过往对话更有感知,但每次运行会消耗更多 token,成本也更高。', - 'settings.memoryWindow.extended.badge': '更多上下文', - 'settings.memoryWindow.extended.hint': '向每次运行注入更多长期记忆。每轮 token 成本更高。', - 'settings.memoryWindow.extended.label': '扩展', - 'settings.memoryWindow.maximum.badge': '最高成本', - 'settings.memoryWindow.maximum.hint': '最大安全窗口。连贯性最佳,每次运行的 token 账单显著更高。', - 'settings.memoryWindow.maximum.label': '最大', - 'settings.memoryWindow.minimal.badge': '最便宜', - 'settings.memoryWindow.minimal.hint': '最小记忆窗口。最便宜、最快,但跨运行的连贯性最弱。', - 'settings.memoryWindow.minimal.label': '最小', - 'settings.memoryWindow.title': '长期记忆窗口', - 'settings.screenIntel.permissions.accessibility': '辅助功能', - 'settings.screenIntel.permissions.grantHint': '在系统设置中授权后,点击下方刷新', - 'settings.screenIntel.permissions.inputMonitoring': '输入监控', - 'settings.screenIntel.permissions.macosAppliesPrivacy': 'macOS 会在所有窗口中应用隐私保护', - 'settings.screenIntel.permissions.openInputMonitoring': '请求中…', - 'settings.screenIntel.permissions.refreshStatus': '刷新中…', - 'settings.screenIntel.permissions.refreshing': '刷新中…', - 'settings.screenIntel.permissions.requestAccessibility': '请求中…', - 'settings.screenIntel.permissions.requestScreenRecording': '请求中…', - 'settings.screenIntel.permissions.requesting': '请求中…', - 'settings.screenIntel.permissions.restartRefresh': '正在重启核心…', - 'settings.screenIntel.permissions.restartingCore': '正在重启核心…', - 'settings.screenIntel.permissions.screenRecording': '屏幕录制', - 'settings.screenIntel.permissions.title': '权限', - 'skills.card.moreActions': '更多操作', - 'skills.create.allowedTools': '允许的工具', - 'skills.create.author': '作者', - 'skills.create.authorPlaceholder': '你的名字', - 'skills.create.commaSeparated': '(逗号分隔)', - 'skills.create.createBtn': '创建技能', - 'skills.create.createError': '无法创建技能', - 'skills.create.creating': '创建中…', - 'skills.create.description': '描述', - 'skills.create.descriptionPlaceholder': '这个技能做什么?', - 'skills.create.optional': '(optional)', - 'skills.create.inputs.heading': 'Inputs', - 'skills.create.inputs.help': - 'Declare parameters the skill needs. The Skills Runner will render a form for these at run time.', - 'skills.create.inputs.add': 'Add input', - 'skills.create.inputs.row.name': 'Input name', - 'skills.create.inputs.row.namePlaceholder': 'e.g. repo', - 'skills.create.inputs.row.nameError': - 'Letters, digits, underscores, and dashes only; must start with a letter.', - 'skills.create.inputs.row.description': 'Input description', - 'skills.create.inputs.row.descriptionPlaceholder': 'What goes in this field?', - 'skills.create.inputs.row.type': 'Type', - 'skills.create.inputs.row.required': 'Required', - 'skills.create.inputs.row.remove': 'Remove input', - 'skills.create.inputs.type.string': 'Text', - 'skills.create.inputs.type.integer': 'Number', - 'skills.create.inputs.type.boolean': 'Yes / No', - 'skills.create.license': '许可证', - 'skills.create.name': '名称', - 'skills.create.namePlaceholder': '例如:交易日志', - 'skills.create.scope': '范围', - 'skills.create.scopeProjectHint': '/.open human/技能/', - 'skills.create.scopeUserHint': - '写入 ~/.openhuman/skills//SKILL.md — 在所有工作空间中可用。', - 'skills.create.slugLabel': '标识符', - 'skills.create.subtitle': '技能.md', - 'skills.create.tags': '标签', - 'skills.create.title': '新建技能', - 'skills.detail.allowedTools': '允许的工具', - 'skills.detail.author': '作者', - 'skills.detail.bundledResources': '捆绑资源', - 'skills.detail.closeAriaLabel': '关闭技能详情', - 'skills.detail.location': '位置', - 'skills.detail.noBundledResources': '无捆绑资源。', - 'skills.detail.tags': '标签', - 'skills.detail.warnings': '警告', - 'skills.install.fetchLog': '获取日志', - 'skills.install.installBtn': '安装中…', - 'skills.install.installComplete': '安装完成', - 'skills.install.installing': '安装中…', - 'skills.install.parseWarnings': '解析警告', - 'skills.install.rawError': '原始错误', - 'skills.install.timeoutHint': '(秒,可选)', - 'skills.install.timeoutLabel': '超时', - 'skills.install.title': '从 URL 安装技能', - 'skills.install.urlLabel': '技能 URL', - 'skills.meetingBots.bannerDesc': '让 OpenHuman 加入你的会议,自动记录摘要', - 'skills.meetingBots.bannerTitle': '会议机器人', - 'skills.meetingBots.busyTitle': 'OpenHuman 正忙', - 'skills.meetingBots.comingSoon': '即将推出', - 'skills.meetingBots.couldNotStartTitle': '无法启动 OpenHuman', - 'skills.meetingBots.displayName': '显示名称', - 'skills.meetingBots.failedToStart': '启动 OpenHuman 失败。', - 'skills.meetingBots.joiningMessage': '它应该在几秒钟内作为参会者出现。', - 'skills.meetingBots.joiningTitle': 'OpenHuman 正在加入会议', - 'skills.meetingBots.meetingLink': '会议链接', - 'skills.meetingBots.modalAriaLabel': '将 OpenHuman 发送到会议', - 'skills.meetingBots.modalDesc': '输入会议链接,让 OpenHuman 作为参会者加入并记录内容。', - 'skills.meetingBots.modalTitle': '将 OpenHuman 发送到会议', - 'skills.meetingBots.newBadge': '新', - 'skills.meetingBots.sendTo': '发送到会议', - 'skills.meetingBots.starting': '启动中…', - 'skills.resource.preview.closeAriaLabel': '关闭预览', - 'skills.resource.preview.failed': '预览失败', - 'skills.resource.preview.loading': '加载预览中…', - 'skills.resource.tree.empty': '无捆绑资源。', - 'skills.search.placeholder': '搜索技能...', - 'skills.setup.autocomplete.acceptKey': '接受键', - 'skills.setup.autocomplete.activeDesc': '自动补全已激活,正在为你提供智能建议', - 'skills.setup.autocomplete.activeTitle': '自动补全已激活', - 'skills.setup.autocomplete.customizeSettings': '自定义设置', - 'skills.setup.autocomplete.debounce': '防抖', - 'skills.setup.autocomplete.description': '在你输入时提供智能文本建议', - 'skills.setup.autocomplete.enableBtn': '启用中...', - 'skills.setup.autocomplete.enableError': '启用自动补全失败', - 'skills.setup.autocomplete.enabling': '启用中...', - 'skills.setup.autocomplete.notSupported': '不支持', - 'skills.setup.autocomplete.stepEnable': '启用内联补全', - 'skills.setup.autocomplete.stepSuccess': '准备就绪', - 'skills.setup.autocomplete.stylePreset': '风格预设', - 'skills.setup.autocomplete.stylePresetValue': '均衡(稍后可配置)', - 'skills.setup.autocomplete.title': '文本自动补全', - 'skills.setup.screenIntel.activeDesc': '屏幕智能已激活,正在感知你的屏幕', - 'skills.setup.screenIntel.activeTitle': '屏幕智能已启用', - 'skills.setup.screenIntel.advancedSettings': '高级设置', - 'skills.setup.screenIntel.allGranted': '所有权限已授予', - 'skills.setup.screenIntel.captureMode': '捕获模式', - 'skills.setup.screenIntel.captureModeValue': '所有窗口(稍后可配置)', - 'skills.setup.screenIntel.deniedHint': '在系统设置中授权后,点击下方重启以应用更改。', - 'skills.setup.screenIntel.enableBtn': '启用中...', - 'skills.setup.screenIntel.enableDesc': '检测屏幕上的内容并将有用的上下文提供给助手', - 'skills.setup.screenIntel.enableError': '启用屏幕智能失败', - 'skills.setup.screenIntel.enabling': '启用中...', - 'skills.setup.screenIntel.grant': '打开中...', - 'skills.setup.screenIntel.granted': '已授予', - 'skills.setup.screenIntel.macosOnly': '仅支持 macOS', - 'skills.setup.screenIntel.opening': '打开中...', - 'skills.setup.screenIntel.panicHotkey': '紧急热键', - 'skills.setup.screenIntel.permAccessibility': '辅助功能', - 'skills.setup.screenIntel.permInputMonitoring': '输入监控', - 'skills.setup.screenIntel.permScreenRecording': '屏幕录制', - 'skills.setup.screenIntel.permissionsDesc': '屏幕智能需要以下权限才能正常工作', - 'skills.setup.screenIntel.refreshStatus': '刷新状态', - 'skills.setup.screenIntel.restartRefresh': '重启中...', - 'skills.setup.screenIntel.restarting': '重启中...', - 'skills.setup.screenIntel.stepEnable': '启用技能', - 'skills.setup.screenIntel.stepPermissions': '授予权限', - 'skills.setup.screenIntel.stepSuccess': '准备就绪', - 'skills.setup.screenIntel.title': '屏幕智能', - 'skills.setup.screenIntel.visionModel': '视觉模型', - 'skills.setup.voice.activation': '激活方式', - 'skills.setup.voice.activeDescPrefix': 'Fn', - 'skills.setup.voice.activeDescSuffix': 'Fn', - 'skills.setup.voice.activeTitle': '语音智能已激活', - 'skills.setup.voice.customizeSettings': '自定义设置', - 'skills.setup.voice.downloadSttBtn': '下载 STT 模型', - 'skills.setup.voice.enableDesc': '启用语音输入和输出功能', - 'skills.setup.voice.hotkey': '热键', - 'skills.setup.voice.startBtn': '启动中...', - 'skills.setup.voice.startError': '启动语音服务失败', - 'skills.setup.voice.starting': '启动中...', - 'skills.setup.voice.stepEnable': '启动语音服务', - 'skills.setup.voice.stepSetup': '需要下载模型', - 'skills.setup.voice.stepSuccess': '准备就绪', - 'skills.setup.voice.sttNotReady': '语音转文本模型未就绪', - 'skills.setup.voice.sttNotReadyDesc': - '语音智能需要本地 Whisper 模型进行转录。请从本地模型设置中下载。', - 'skills.setup.voice.sttReady': '语音转文本模型已就绪', - 'skills.setup.voice.sttReturnHint': '完成后将返回此页面', - 'skills.setup.voice.title': '语音智能', - 'skills.uninstall.couldNotUninstall': '无法卸载', - 'skills.uninstall.description': - '这将永久删除技能目录及其所有捆绑资源。智能体将在下一轮停止看到它。', - 'skills.uninstall.title': '卸载', - 'skills.uninstall.uninstallBtn': '卸载', - 'skills.uninstall.uninstalling': '卸载中…', - 'upsell.global.limitMessage': '升级方案或充值配额以继续使用', - 'upsell.global.limitTitle': '已达使用限制', - 'upsell.global.nearLimitMessage': '你已使用了 {pct}% 的使用限制。升级以获得更高限额。', - 'upsell.global.nearLimitTitle': '接近使用限制', - 'upsell.usageLimit.bodyBudget': '你已达到每周限制。', - 'upsell.usageLimit.bodyRate': '你已达到 10 小时推理速率限制。', - 'upsell.usageLimit.heading': '已达使用限制', - 'upsell.usageLimit.notNow': '暂不', - 'upsell.usageLimit.perWindow': '{amount}', - 'upsell.usageLimit.planIncludes': '{plan}', - 'upsell.usageLimit.resetsIn': '重置时间', - 'upsell.usageLimit.upgradePlan': '升级方案', - 'upsell.usageLimit.weeklyInference': '{amount}', - 'walkthrough.tooltip.letsGo': '出发吧!', - 'walkthrough.tooltip.next': '下一步 →', - 'walkthrough.tooltip.skip': '跳过引导', - 'walkthrough.tooltip.stepCounter': '{n} / {total}', - 'webhooks.activity.empty': '暂无活动', - 'webhooks.activity.title': '最近活动', - 'webhooks.composioHistory.empty': '暂无记录', - 'webhooks.composioHistory.metadataId': '元数据 ID', - 'webhooks.composioHistory.metadataUuid': '元数据 UUID', - 'webhooks.composioHistory.payload': '载荷', - 'webhooks.composioHistory.title': 'ComposeIO 触发器历史', - 'webhooks.tunnels.active': '活跃', - 'webhooks.tunnels.createFailed': '创建隧道失败', - 'webhooks.tunnels.creating': '创建中...', - 'webhooks.tunnels.deleteFailed': '删除隧道失败', - 'webhooks.tunnels.descriptionPlaceholder': '描述(可选)', - 'webhooks.tunnels.echo': '回显', - 'webhooks.tunnels.empty': '暂无隧道', - 'webhooks.tunnels.enableEcho': '启用回显', - 'webhooks.tunnels.inactive': '未激活', - 'webhooks.tunnels.namePlaceholder': '隧道名称(例如:telegram-bot)', - 'webhooks.tunnels.newTunnel': '新建隧道', - 'webhooks.tunnels.removeEcho': '移除回显', - 'webhooks.tunnels.title': 'Webhook 隧道', - 'webhooks.tunnels.toggleFailed': '切换回显失败', - 'composio.authExpired': '授权已过期', - 'composio.reconnect': '重新连接', - 'composio.previewBadge': '预览', - 'composio.previewTooltip': '代理集成即将推出 - 您可以连接,但代理尚无法使用此工具包。', - 'composio.directModeRequiresKey': '保存失败。直连模式需要非空的 API 密钥。', - 'composio.notYetRouted': '尚未路由', - 'composio.triggers.loading': '加载中…', - 'conversations.taskKanban.todo': '待办', - 'settings.composio.loading': '加载中…', - 'settings.mascot.noCharactersAvailable': '暂无可用的 OpenHuman 角色', - 'skills.uninstall.confirmTitle': '卸载 {name}?', - 'conversations.taskKanban.blocked': '已阻塞', - 'conversations.taskKanban.done': '已完成', - 'conversations.taskKanban.pending': 'Pending', - 'conversations.taskKanban.working': 'Working', - 'conversations.taskKanban.awaitingApproval': 'Awaiting approval', - 'conversations.taskKanban.ready': 'Ready', - 'conversations.taskKanban.rejected': 'Rejected', - 'conversations.taskKanban.inProgress': '进行中', - 'intelligence.memoryChunk.detail.copiedHint': '已复制', - 'settings.composio.notYetRouted': '尚未路由', - 'settings.localModel.download.manageExternal': '在外部运行时中管理此模型。', - 'settings.localModel.status.manageOllamaExternal': - '请在 OpenHuman 之外管理 Ollama 进程和模型拉取,然后重新运行诊断。', - 'settings.localModel.status.ollamaDocs': 'Ollama 文档', - 'settings.localModel.status.thenRetry': '获取设置说明,待你的运行时可达后再重试。', - 'settings.appearance.title': '外观', - 'settings.appearance.themeHeading': '主题', - 'settings.appearance.themeAria': '主题', - 'settings.appearance.modeLight': '浅色', - 'settings.appearance.modeLightDesc': '明亮界面,深色文字。', - 'settings.appearance.modeDark': '深色', - 'settings.appearance.modeDarkDesc': '暗色界面,夜间更护眼。', - 'settings.appearance.modeSystem': '跟随系统', - 'settings.appearance.modeSystemDesc': '跟随操作系统外观设置。', - 'settings.appearance.helperText': - '深色模式会将整个应用——聊天、设置、面板——切换为暗色调。"跟随系统"会同步你的操作系统外观并实时更新。', - 'settings.mascot.characterPreview': '预览', - 'settings.mascot.characterStates': '状态', - 'settings.mascot.characterVisemes': '视素', - 'settings.mascot.colorAria': 'OpenHuman 颜色', - 'settings.mascot.colorBlack': '黑色', - 'settings.mascot.colorBurgundy': '酒红色', - 'settings.mascot.colorCustom': 'Custom', - 'settings.mascot.colorNavy': '深蓝色', - 'settings.mascot.primaryColor': 'Primary color', - 'settings.mascot.secondaryColor': 'Secondary color', - 'settings.mascot.colorYellow': '黄色', - 'settings.mascot.libraryUnavailable': 'OpenHuman 资源库不可用', - 'settings.mascot.title': 'OpenHuman', - 'settings.developerMenu.mcpServer.title': 'MCP 服务器', - 'settings.developerMenu.mcpServer.desc': '配置外部 MCP 客户端以连接到 OpenHuman', - 'settings.developerMenu.autonomy.title': '智能体自主权', - 'settings.developerMenu.autonomy.desc': '工具操作速率限制和安全阈值', - 'settings.mcpServer.title': 'MCP 服务器', - 'settings.mcpServer.toolsSectionTitle': '可用工具', - 'settings.mcpServer.toolsSectionDesc': - '运行 openhuman-core mcp 时通过 MCP stdio 服务器暴露的工具', - 'settings.mcpServer.configSectionTitle': '客户端配置', - 'settings.mcpServer.configSectionDesc': '选择你的 MCP 客户端以生成对应的配置代码片段', - 'settings.mcpServer.copySnippet': '复制到剪贴板', - 'settings.mcpServer.copied': '已复制!', - 'settings.mcpServer.openConfigFile': '打开配置文件', - 'settings.mcpServer.binaryPathNotFound': - '未找到 OpenHuman 二进制文件。如果使用源码运行,请执行:cargo build --bin openhuman-core', - 'settings.mcpServer.openConfigError': '打开配置文件失败', - 'settings.mcpServer.clientClaudeDesktop': '克劳德桌面', - 'settings.mcpServer.clientCursor': '光标', - 'settings.mcpServer.clientCodex': '法典', - 'settings.mcpServer.clientZed': '泽德', - 'settings.mcpServer.configFilePath': '配置文件', - 'settings.mcpServer.clientSelectorAriaLabel': 'MCP 客户端选择器', - 'settings.persona.title': 'Persona', - 'settings.persona.menuTitle': 'Persona', - 'settings.persona.menuDesc': - 'Name, personality, avatar, and voice — your assistant as one identity', - 'settings.persona.identityHeading': 'Identity', - 'settings.persona.identityDesc': - 'A display name and short description for your assistant. Shown in the app; does not change how the assistant reasons.', - 'settings.persona.displayNameLabel': 'Display name', - 'settings.persona.displayNamePlaceholder': 'e.g. Nova', - 'settings.persona.descriptionLabel': 'Description', - 'settings.persona.descriptionPlaceholder': 'e.g. A calm, concise assistant for my team.', - 'settings.persona.soul.heading': 'Personality (SOUL.md)', - 'settings.persona.soul.desc': - 'The personality prompt the assistant follows in every conversation. Edits are saved to your workspace and take effect on the next reply.', - 'settings.persona.soul.editorLabel': 'SOUL.md contents', - 'settings.persona.soul.reset': 'Reset to default', - 'settings.persona.soul.usingDefault': 'Using the bundled default', - 'settings.persona.soul.loadError': 'Could not load SOUL.md', - 'settings.persona.soul.saveError': 'Could not save SOUL.md', - 'settings.persona.soul.resetError': 'Could not reset SOUL.md', - 'settings.persona.appearanceHeading': 'Avatar & Voice', - 'settings.persona.appearanceDesc': - 'Mascot color, custom GIF avatar, and reply voice are configured in Mascot settings.', - 'settings.persona.openMascotSettings': 'Open Mascot settings', - 'settings.developerMenu.composio.title': 'Composio', - 'settings.developerMenu.composio.desc': '路由模式、集成触发器和触发器历史存档。', - 'settings.appearance.tabBarHeading': '底部标签栏', - 'settings.appearance.tabBarAlwaysShowLabels': '始终显示标签', - 'settings.appearance.tabBarAlwaysShowLabelsDesc': '关闭时,标签仅出现在悬停时或活动选项卡上。', - 'common.breadcrumb': '面包屑', - 'settings.betaBuild': '测试版本 - v{version}', - 'migration.vendor.openclaw': 'OpenClaw', - 'migration.vendor.hermes': 'Hermes Agent', - 'onboarding.apiKeys.openaiOauthHint': - '使用 ChatGPT Plus/Pro(订阅)或 OpenAI API 密钥 — 并非两者都需要。', - 'onboarding.apiKeys.openaiOauthOpening': '正在打开登录...', - 'onboarding.apiKeys.finishSignIn': '完成 ChatGPT 登录', - 'onboarding.apiKeys.orApiKey': '或 API 键', - 'app.localAiDownload.expandAria': '展开下载进度', - 'app.localAiDownload.collapseAria': '折叠下载进度', - 'app.localAiDownload.dismissAria': '关闭下载通知', - 'mobile.nav.ariaLabel': '手机导航', - 'progress.stepsAria': '进度步骤', - 'progress.stepAria': '{total} 的步骤 {current}', - 'workspace.vaultsTitle': '知识库', - 'workspace.vaultsDesc': '指向本地文件夹;文件被分块并镜像到内存中。', - 'calls.title': '通话', - 'calls.comingSoonBody': '人工智能辅助通话即将推出。敬请关注。', - 'art.rotatingTetrahedronAria': '旋转倒四面体航天器', - 'devOptions.sentryDisabled': '(无 id — 哨兵在此版本中被禁用)', - 'composio.expiredAuthorization': '{name} 授权已过期', - 'composio.expiredDescription': - '重新连接以重新启用 {name} 工具。 OpenHuman 将保持此集成不可用,直到您刷新 OAuth 访问权限。', - 'channels.telegram.remoteControlTitle': '远程控制 (Telegram)', - 'channels.telegram.remoteControlBody': - '从允许的 Telegram 聊天中,发送 /status、/sessions、/new 或 /help。模型路由仍然使用 /model 和 /models。', - 'rewards.referralSection.retry': '重试', - 'settings.ai.plannerSummary': - '规划器:{sourceEvents} 源事件,{sent} 已发送,{deduped} 已删除重复数据。', - 'settings.ai.routeLabel': '路线: {route}', - 'settings.ai.latestSpend': '最新支出:{amount},于 {time} ({action})', - 'settings.ai.topActions': '热门行动', - 'settings.ai.noSpendRows': '未加载支出行。', - 'settings.ai.topHours': '高峰时段', - 'settings.ai.noHourlySpend': '还没有每小时支出。', - 'settings.autocomplete.appFilter.app': '应用程序', - 'settings.autocomplete.appFilter.currentSuggestion': '当前建议', - 'settings.autocomplete.appFilter.debounce': '去抖动', - 'settings.autocomplete.appFilter.enabled': '启用', - 'settings.autocomplete.appFilter.lastError': '最后一个错误', - 'settings.autocomplete.appFilter.model': '型号', - 'settings.autocomplete.appFilter.phase': '阶段', - 'settings.autocomplete.appFilter.platformSupported': '支持平台', - 'settings.autocomplete.appFilter.running': '跑步', - 'settings.autocomplete.debug.acceptedPrefix': '已接受:{value}', - 'settings.autocomplete.debug.acceptFailed': '未能接受建议', - 'settings.autocomplete.debug.alreadyRunning': '自动完成功能已在运行。', - 'settings.autocomplete.debug.clearHistoryFailed': '清除历史记录失败', - 'settings.autocomplete.debug.didNotStart': '自动完成功能未启动。', - 'settings.autocomplete.debug.disabledInSettings': '设置中禁用自动完成功能。首先启用它并保存。', - 'settings.autocomplete.debug.fetchSuggestionFailed': '无法获取当前建议', - 'settings.autocomplete.debug.inspectFocusedElementFailed': '无法检查聚焦元素', - 'settings.autocomplete.debug.loadSettingsFailed': '无法加载自动完成设置', - 'settings.autocomplete.debug.noSuggestionApplied': '没有应用任何建议。', - 'settings.autocomplete.debug.noSuggestionReturned': '没有返回任何建议。', - 'settings.autocomplete.debug.refreshStatusFailed': '无法刷新自动完成状态', - 'settings.autocomplete.debug.saveAdvancedSettingsFailed': '无法保存高级设置', - 'settings.autocomplete.debug.startFailed': '无法启动自动完成', - 'settings.autocomplete.debug.stopFailed': '无法停止自动完成', - 'settings.autocomplete.debug.suggestionPrefix': '建议:{value}', - 'settings.autocomplete.shared.none': '无', - 'settings.autocomplete.shared.notApplicable': '不适用', - 'settings.autocomplete.shared.unknown': '未知', - 'settings.billing.autoRecharge.expires': '过期 {date}', - 'settings.billing.autoRecharge.spentThisWeek': '本周使用的 ${limit} 中的 ${spent}', - 'settings.localModel.deviceCapability.disabledLowercase': '残疾人', - 'settings.localModel.deviceCapability.presetDetails': - '聊天:{chatModel} · 愿景:{visionModel} · 目标 RAM:{targetRamGb} GB', - 'settings.localModel.download.capabilityChat': '聊天', - 'settings.localModel.download.capabilityEmbedding': '嵌入', - 'settings.localModel.download.capabilityStt': 'STT', - 'settings.localModel.download.capabilityTts': 'TTS', - 'settings.localModel.download.capabilityVision': '愿景', - 'settings.localModel.download.embeddingDimensions': '尺寸:{dimensions}', - 'settings.localModel.download.embeddingModel': '型号:{modelId}', - 'settings.localModel.download.embeddingVectors': '矢量: {count}', - 'settings.localModel.download.notAvailable': '不适用', - 'settings.localModel.download.summaryHelper': - '通过 Rust 核心调用 `open human.inference_summarize`', - 'settings.localModel.download.transcript': '成绩单:', - 'settings.localModel.download.ttsOutput': '输出:{outputPath}', - 'settings.localModel.download.ttsVoice': '声音:{voiceId}', - 'settings.localModel.status.contextBelowMinimumBadge': - '{contextLength} ctx - 低于 {required} 分钟', - 'settings.localModel.status.contextBelowMinimumTitle': - '已拒绝:上下文窗口 {contextLength} 令牌低于内存层所需的 {required} 令牌最小值。回忆会因无声截断而被破坏。', - 'settings.localModel.status.contextOkBadge': '{contextLength} ctx ✓', - 'settings.localModel.status.contextOkTitle': - '上下文窗口 {contextLength} 令牌满足内存层最小值 {required} 令牌。', - 'settings.localModel.status.contextUnknownBadge': 'ctx 未知', - 'settings.localModel.status.contextUnknownTitle': - '上下文窗口未知;无法确认它满足 {required}-token 内存层最小值。', - 'settings.localModel.status.expectedChat': '聊天:{model}', - 'settings.localModel.status.expectedEmbedding': '嵌入:{model}', - 'settings.localModel.status.expectedVision': '愿景:{model}', - 'settings.localModel.status.externalProcess': '外部流程', - 'settings.localModel.status.notAvailable': '不适用', - 'settings.mascot.customGifPlaceholder': 'https://example.com/avatar.gif', - 'settings.mascot.loadDetailError': '无法加载吉祥物。', - 'settings.mascot.loadLibraryError': '无法加载吉祥物库。', - 'settings.mascot.voice.customPlaceholder': '例如21m00Tcm4TlvDq8ikWAM', - 'settings.mascot.voice.previewText': "Hi, I'm your assistant. This is a voice preview.", - 'skills.channelIcon.discord': 'Discord', - 'skills.channelIcon.imessage': 'iMessage', - 'skills.channelIcon.telegram': 'Telegram', - 'skills.channelIcon.web': '网络', - 'skills.channelIcon.yuanbao': '元宝', - 'skills.composio.poweredBy': '由 Composio 提供支持', - 'skills.composio.staleStatusTitle': '连接显示陈旧状态', - 'skills.create.allowedToolsHelp': '渲染到 SKILL.md frontmatter 中为', - 'skills.create.allowedToolsPlaceholder': '节点执行,获取', - 'skills.create.licensePlaceholder': 'MIT', - 'skills.create.tagsPlaceholder': '贸易、研究', - 'skills.install.errors.alreadyInstalledHint': - '工作区中已存在此 slug 的技能。首先将其删除或更改 frontmatter `metadata.id` / `name`。', - 'skills.install.errors.alreadyInstalledTitle': '技能已安装', - 'skills.install.errors.fetchFailedHint': - '请求未成功完成。检查 URL 指向可访问的公共文件,并且主机返回 2xx 响应。', - 'skills.install.errors.fetchFailedTitle': '获取失败', - 'skills.install.errors.fetchTimedOutHint': '远程主机没有及时响应。请重试或提高超时(1-600 秒)。', - 'skills.install.errors.fetchTimedOutTitle': '获取超时', - 'skills.install.errors.fetchTooLargeHint': - 'SKILL.md 必须小于 1 MiB。将捆绑的资源拆分为“references/”或“scripts/”文件,而不是内联它们。', - 'skills.install.errors.fetchTooLargeTitle': 'SKILL.md 太大', - 'skills.install.errors.genericHint': '后端返回错误。原始消息如下所示。', - 'skills.install.errors.genericTitle': '无法安装技能', - 'skills.install.errors.invalidSkillHint': - 'frontmatter 必须是有效的 YAML,具有非空的“name”和“description”字段,并以“---”结尾。', - 'skills.install.errors.invalidSkillTitle': 'SKILL.md 未解析', - 'skills.install.errors.invalidUrlHint': '仅允许公共 HTTPS URL。私有、环回和元数据主机被阻止。', - 'skills.install.errors.invalidUrlTitle': 'URL 被拒绝', - 'skills.install.errors.unsupportedUrlHint': - '只有直接的“.md”链接才有效。对于 GitHub,链接到文件 (github.com/owner/repo/blob/.../SKILL.md) - 未安装树和存储库根。', - 'skills.install.errors.unsupportedUrlTitle': '不支持 URL 形式', - 'skills.install.errors.writeFailedHint': - '工作区技能目录不可写。检查“/.open human/skills/”的文件系统权限。', - 'skills.install.errors.writeFailedTitle': '无法写入 SKILL.md', - 'skills.install.fetchingPrefix': '抓取', - 'skills.install.fetchingSuffix': '这可能需要您配置的超时时间。', - 'skills.install.subtitleMiddle': 'over HTTPS 并将其安装在', - 'skills.install.subtitlePrefix': '获取单个', - 'skills.install.subtitleSuffix': '仅 HTTPS;私有和环回主机被阻止。', - 'skills.install.successDiscovered': '发现{count}新技能。', - 'skills.install.successNoNewIds': - '已安装技能,但没有出现新的技能 ID - 目录可能已包含具有相同 slug 的技能。', - 'skills.install.timeoutHelp': '默认为 60 秒。 1-600 之外的值在服务器端被限制。', - 'skills.install.timeoutInvalid': '必须是 1 到 600 之间的整数。', - 'skills.install.timeoutPlaceholder': '60', - 'skills.install.urlHelpMiddle': '文件。', - 'skills.install.urlHelpPrefix': '直接链接到', - 'skills.install.urlHelpSuffix': 'URLs 自动重写为', - 'skills.install.urlInvalidPrefix': 'URL 必须是格式良好的', - 'skills.install.urlInvalidSuffix': '链接。', - 'skills.install.urlPlaceholder': 'https://raw.githubusercontent.com/owner/repo/main/SKILL.md', - 'skills.meetingBots.platformComingSoon': '{label} 支持即将推出。', - 'skills.meetingBots.platformHints.gmeet': 'meet.google.com/abc-defg-hij', - 'skills.meetingBots.platformHints.teams': 'team.microsoft.com/...', - 'skills.meetingBots.platformHints.zoom': 'Zoom.us/j/...', - 'skills.meetingBots.platforms.gmeet': 'Google 见面', - 'skills.meetingBots.platforms.teams': '微软团队', - 'skills.meetingBots.platforms.zoom': '变焦', - 'skills.meetingBots.soonSuffix': '很快', - 'skills.setup.screenIntel.permissionPathLabel': 'macOS 将隐私应用于:', - 'settings.agentAccess.title': 'Agent OS access', - 'settings.agentAccess.menuDesc': - 'Control where the agent can read/write and whether it can use the shell.', - 'settings.agentAccess.loadError': 'Failed to load access settings', - 'settings.agentAccess.saveError': 'Failed to save access settings', - 'settings.agentAccess.saved': 'Saved — applies on your next message.', - 'settings.agentAccess.desktopOnly': 'Access settings are only available in the desktop app.', - 'settings.agentAccess.loading': 'Loading…', - 'settings.agentAccess.accessMode': 'Access mode', - 'settings.agentAccess.tier.readonly.title': 'Read-only', - 'settings.agentAccess.tier.readonly.desc': - 'Reads files and runs read-only commands to explore — but never writes, edits, or runs anything that changes state.', - 'settings.agentAccess.tier.supervised.title': 'Ask before edit', - 'settings.agentAccess.tier.supervised.desc': - 'Creates new files freely, but asks for your approval before editing an existing file, running a command, reaching the network, or installing anything.', - 'settings.agentAccess.tier.full.title': 'Full access', - 'settings.agentAccess.tier.full.desc': - 'Runs commands with your full user account access — it can read/write anywhere allowed, except credential and system stores. Destructive commands, network access, and installs still ask for approval.', - 'settings.agentAccess.defaultTag': '(default)', - 'settings.agentAccess.fullWarning': - '⚠ Full access runs commands with your full account access and is not sandboxed. Only enable it when you trust the agent with this machine. Credential and system directories stay blocked, and destructive, network, and install actions still ask for approval.', - 'settings.agentAccess.confine.label': 'Confine to workspace', - 'settings.agentAccess.confine.desc': - 'Restrict the agent to the workspace directory (plus any granted folders), whichever access mode is selected. When off, it can reach anywhere your user can — except the always-blocked credential and system directories.', - 'settings.agentAccess.grantedFolders': 'Granted folders', - 'settings.agentAccess.alwaysAllow': 'Always-allowed tools', - 'settings.agentAccess.alwaysAllowDesc': - 'Tools you marked "Always allow" in chat run without asking. Remove one to be prompted again.', - 'settings.agentAccess.alwaysAllowNone': 'No always-allowed tools yet.', - 'settings.agentAccess.grantedDesc': - 'Folders the agent may read and write, in addition to the workspace. Credential stores (~/.ssh, ~/.gnupg, ~/.aws, keychains) and system directories (/etc, /System, C:\\Windows, …) are always blocked, even inside a granted folder.', - 'settings.agentAccess.noneGranted': 'No folders granted.', - 'settings.agentAccess.readWrite': 'read + write', - 'settings.agentAccess.readOnly': 'read-only', - 'settings.agentAccess.remove': 'Remove', - 'settings.agentAccess.pathPlaceholder': '文件夹的绝对路径', - 'settings.agentAccess.accessLevelLabel': 'Access level', - 'settings.agentAccess.add': 'Add', - 'settings.agentAccess.saving': 'Saving…', - 'settings.agentAccess.changesApply': 'Changes apply on your next message.', - 'skills.tabs.runners': 'Runners', - 'settings.developerMenu.skillsRunner.title': 'Skills Runner', - 'settings.developerMenu.skillsRunner.desc': - 'Run any bundled skill ad-hoc — fill its inputs and fire a background autonomous run', - 'settings.developerMenu.skillsRunner.panelDesc': - 'Pick a bundled skill, fill in its declared inputs, and fire a fire-and-forget background run. Use Dev Workflow instead if you want a cron-scheduled recurring job.', - 'settings.skillsRunner.skill': 'Skill', - 'settings.skillsRunner.selectSkill': 'Select a skill…', - 'settings.skillsRunner.loadingSkills': 'Loading skills…', - 'settings.skillsRunner.loadingDescription': 'Loading skill inputs…', - 'settings.skillsRunner.noInputs': 'This skill declares no inputs.', - 'settings.skillsRunner.placeholder.required': 'required', - 'settings.skillsRunner.runNow': 'Run now', - 'settings.skillsRunner.starting': 'Starting…', - 'settings.skillsRunner.started': 'Started — run id:', - 'settings.skillsRunner.logPath': 'Log:', - 'settings.skillsRunner.error.listSkills': 'Failed to load skills:', - 'settings.skillsRunner.error.describe': 'Failed to load inputs:', - 'settings.skillsRunner.error.missingRequired': 'Missing required input(s):', - 'settings.skillsRunner.error.run': 'Run failed to start:', - 'settings.skillsRunner.error.preflightGate': 'Preflight gate failed', - 'settings.skillsRunner.schedule.heading': 'Schedule (recurring)', - 'settings.skillsRunner.schedule.help': - 'Save this skill + inputs as a recurring cron job. The agent will call run_skill at each tick.', - 'settings.skillsRunner.schedule.frequency': 'Frequency', - 'settings.skillsRunner.schedule.every30min': 'Every 30 minutes', - 'settings.skillsRunner.schedule.everyHour': 'Every hour', - 'settings.skillsRunner.schedule.every2hours': 'Every 2 hours', - 'settings.skillsRunner.schedule.every6hours': 'Every 6 hours', - 'settings.skillsRunner.schedule.onceDaily': 'Once daily (9:00)', - 'settings.skillsRunner.schedule.save': 'Save schedule', - 'settings.skillsRunner.schedule.saving': 'Saving…', - 'settings.skillsRunner.schedule.saved': 'Schedule saved.', - 'settings.skillsRunner.schedule.error': 'Schedule save failed:', - 'settings.skillsRunner.schedule.loadingJobs': 'Loading existing schedules…', - 'settings.skillsRunner.schedule.noJobs': 'No schedules saved for this skill yet.', - 'settings.skillsRunner.schedule.existing': 'Scheduled jobs for this skill:', - 'settings.skillsRunner.schedule.runNow': 'Run', - 'settings.skillsRunner.schedule.remove': 'Remove', - 'settings.skillsRunner.recentRuns.headingForSkill': 'Recent runs for this skill', - 'settings.skillsRunner.recentRuns.headingAll': 'Recent skill runs (all)', - 'settings.skillsRunner.recentRuns.refresh': 'Refresh', - 'settings.skillsRunner.recentRuns.loading': 'Loading recent runs…', - 'settings.skillsRunner.recentRuns.empty': 'No recent runs.', - 'settings.skillsRunner.viewer.loading': 'Loading log…', - 'settings.skillsRunner.viewer.tailing': 'Live tailing', - 'settings.skillsRunner.viewer.fetching': 'fetching', - 'settings.skillsRunner.viewer.error': 'Log read failed:', - 'settings.skillsRunner.repoPicker.loading': 'Loading repositories…', - 'settings.skillsRunner.repoPicker.select': 'Select a repository…', - 'settings.skillsRunner.repoPicker.empty': - 'No repositories returned. Connect GitHub via Composio to populate this list.', - 'settings.skillsRunner.repoPicker.notConnected': - 'GitHub isn’t connected via Composio. Connect it under Skills → Composio first.', - 'settings.skillsRunner.repoPicker.privateTag': '(private)', - 'settings.skillsRunner.branchPicker.needRepo': 'Pick a repo first…', - 'settings.skillsRunner.branchPicker.loading': 'Loading branches…', - 'settings.skillsRunner.branchPicker.select': 'Select a branch…', - 'settings.modelHealth.title': 'Model Health', - 'settings.modelHealth.desc': - 'Per-model quality, hallucination rate, and cost comparison across active models', - 'settings.modelHealth.allStatuses': 'All statuses', - 'settings.modelHealth.models': 'models', - 'settings.modelHealth.loading': 'Loading model data...', - 'settings.modelHealth.empty': 'No models registered', - 'settings.modelHealth.col.model': 'Model', - 'settings.modelHealth.col.quality': 'Quality', - 'settings.modelHealth.col.halluc': 'Halluc. Rate', - 'settings.modelHealth.col.cost': 'Cost / 1M out', - 'settings.modelHealth.col.agents': 'Agents', - 'settings.modelHealth.col.status': 'Status', - 'settings.modelHealth.badge.keep': 'Keep', - 'settings.modelHealth.badge.replace': 'Replace', - 'settings.modelHealth.badge.staging': 'Staging test', - 'settings.modelHealth.badge.vision': 'Vision only', - 'settings.modelHealth.swap': 'Swap?', - 'settings.modelHealth.modal.title': 'Replace Model?', - 'settings.modelHealth.modal.hallucRate': 'Hallucination rate', - 'settings.modelHealth.modal.cancel': 'Cancel', - 'settings.modelHealth.modal.apply': 'Apply Replacement', - 'settings.modelHealth.tag.cheaper': 'CHEAPER', - 'settings.modelHealth.tag.better': 'BETTER', - // Task sources (#task-sources) - 'settings.taskSources.title': 'Task Sources', - 'settings.taskSources.subtitle': 'Pull tasks from your tools onto the agent todo board', - 'settings.taskSources.description': - 'Collect work items from GitHub, Notion, Linear, and ClickUp, enrich them, and route them onto the agent todo board.', - 'settings.taskSources.connectHint': - 'Task sources use your connected accounts. Connect them under Integrations first.', - 'settings.taskSources.disabledBanner': - 'Task sources are disabled in settings. Enable them to poll automatically.', - 'settings.taskSources.loadError': 'Failed to load task sources', - 'settings.taskSources.addTitle': 'Add a task source', - 'settings.taskSources.provider': 'Provider', - 'settings.taskSources.name': 'Name (optional)', - 'settings.taskSources.namePlaceholder': 'e.g. My open issues', - 'settings.taskSources.github.repo': 'Repository (owner/name, optional)', - 'settings.taskSources.github.labels': 'Labels (comma-separated)', - 'settings.taskSources.notion.database': 'Database (board) ID', - 'settings.taskSources.linear.team': 'Team ID (optional)', - 'settings.taskSources.clickup.team': 'Workspace (team) ID (optional)', - 'settings.taskSources.assignedToMe': 'Only items assigned to me', - 'settings.taskSources.add': 'Add source', - 'settings.taskSources.adding': 'Adding…', - 'settings.taskSources.preview': 'Preview', - 'settings.taskSources.previewResult': '{count} task(s) match this filter', - 'settings.taskSources.fetchNow': 'Fetch now', - 'settings.taskSources.fetching': 'Fetching…', - 'settings.taskSources.fetchResult': 'Routed {routed} of {fetched} task(s)', - 'settings.taskSources.configured': 'Configured sources', - 'settings.taskSources.empty': 'No task sources configured yet.', - 'settings.taskSources.proactive': 'Proactive', - 'settings.taskSources.lastFetch': 'Last fetch', - 'settings.taskSources.never': 'Never', - 'settings.taskSources.statusEnabled': 'Enabled', - 'settings.taskSources.statusDisabled': 'Disabled', - 'settings.taskSources.enable': 'Enable', - 'settings.taskSources.disable': 'Disable', - 'settings.taskSources.remove': 'Remove', - 'settings.taskSources.removeConfirm': - 'Remove this task source? All ingested task history will be deleted and cannot be undone.', - - 'settings.taskSources.refresh': 'Refresh', - // Task sources provider labels (#task-sources) - 'settings.taskSources.providers.github': 'GitHub', - 'settings.taskSources.providers.notion': 'Notion', - 'settings.taskSources.providers.linear': 'Linear', - 'settings.taskSources.providers.clickup': 'ClickUp', - - // /skills IA restructure (Phase 2/3) — dashboard + new-skill page. - 'skills.dashboard.title': 'Skills', - 'skills.dashboard.scheduledHeading': 'Scheduled skills', - 'skills.dashboard.emptyTitle': 'No scheduled skills', - 'skills.dashboard.emptyBody': - 'Run a bundled skill once or save a recurring schedule to see it here.', - 'skills.dashboard.create': 'Create a Skill', - 'skills.dashboard.run': 'Run a Skill', - 'skills.dashboard.enable': 'Enable scheduled skill', - 'skills.dashboard.disable': 'Disable scheduled skill', - 'skills.dashboard.lastRun': 'Last run', - 'skills.dashboard.nextRun': 'Next run', - 'skills.dashboard.cardOpenRunner': 'Open in runner', - 'skills.dashboard.loadError': 'Failed to load scheduled skills', - 'skills.new.title': 'Create a skill', - 'skills.new.placeholderBody': - 'Authoring form arrives soon. For now, use the “New skill” button on the runner page.', - 'settings.agentAccess.requireTaskPlanApproval.label': 'Require task plan approval', - 'settings.agentAccess.requireTaskPlanApproval.desc': - 'Pause before an assigned agent executes an agent-authored task brief.', -}; - -export default zhCN5; diff --git a/app/src/lib/i18n/de.ts b/app/src/lib/i18n/de.ts index 3950a6739..9e123a329 100644 --- a/app/src/lib/i18n/de.ts +++ b/app/src/lib/i18n/de.ts @@ -1,31 +1,4193 @@ -import de1 from './chunks/de-1'; -import de2 from './chunks/de-2'; -import de3 from './chunks/de-3'; -import de4 from './chunks/de-4'; -import de5 from './chunks/de-5'; import type { TranslationMap } from './types'; -// German (Deutsch) translations. Each chunk maps to chunks/en-N.ts. -// Missing keys fall back to English via I18nContext.resolveEn(). -const de: TranslationMap = { - ...de1, - ...de2, - ...de3, - ...de4, - ...de5, +// German (Deutsch) translations. Keys mirror en.ts; missing/ +// English-identical values fall back to English via I18nContext.resolveEn(). +const messages: TranslationMap = { + 'nav.home': 'Start', + 'nav.human': 'Mensch', + 'nav.chat': 'Chat', + 'nav.connections': 'Verbindungen', + 'nav.memory': 'Intelligenz', + 'nav.alerts': 'Benachrichtigungen', + 'nav.rewards': 'Belohnungen', + 'nav.settings': 'Einstellungen', + 'common.cancel': 'Abbrechen', + 'common.save': 'Speichern', + 'common.confirm': 'Bestätigen', + 'common.delete': 'Löschen', + 'common.edit': 'Bearbeiten', + 'common.create': 'Erstellen', + 'common.search': 'Suchen', + 'common.loading': 'Laden…', + 'common.error': 'Fehler', + 'common.success': 'Erfolg', + 'common.back': 'Zurück', + 'common.next': 'Weiter', + 'common.finish': 'Fertig', + 'common.close': 'Schließen', + 'common.enabled': 'Aktiviert', + 'common.disabled': 'Deaktiviert', + 'common.on': 'Ein', + 'common.off': 'Aus', + 'common.yes': 'Ja', + 'common.no': 'Nein', + 'common.ok': 'Verstanden', + 'common.name': 'Name', + 'common.retry': 'Erneut versuchen', + 'common.copy': 'Kopieren', + 'common.copied': 'Kopiert', + 'common.learnMore': 'Mehr erfahren', + 'common.seeAll': 'Alle anzeigen', + 'common.dismiss': 'Ausblenden', + 'common.clear': 'Leeren', + 'common.reset': 'Zurücksetzen', + 'common.refresh': 'Aktualisieren', + 'common.export': 'Exportieren', + 'common.import': 'Importieren', + 'common.upload': 'Hochladen', + 'common.download': 'Herunterladen', + 'common.add': 'Hinzufügen', + 'common.remove': 'Entfernen', + 'common.showMore': 'Mehr anzeigen', + 'common.showLess': 'Weniger anzeigen', + 'common.submit': 'Senden', + 'common.continue': 'Weiter', + 'common.comingSoon': 'Demnächst verfügbar', + 'common.breadcrumb': 'Breadcrumb', + 'settings.general': 'Allgemein', + 'settings.featuresAndAI': 'Funktionen und KI', + 'settings.billingAndRewards': 'Abrechnung und Prämien', + 'settings.support': 'Unterstützung', + 'settings.advanced': 'Erweitert', + 'settings.dangerZone': 'Gefahrenbereich', + 'settings.account': 'Konto', + 'settings.accountDesc': 'Wiederherstellungsphrase, Team, Verbindungen und Privatsphäre', + 'settings.notifications': 'Benachrichtigungen', + 'settings.notificationsDesc': '„Bitte nicht stören“ und Benachrichtigungskontrollen pro Konto', + 'settings.notifications.tabs.preferences': 'Einstellungen', + 'settings.notifications.tabs.routing': 'Routenführung', + 'settings.features': 'Funktionen', + 'settings.featuresDesc': 'Bildschirmbewusstsein, Nachrichten und Tools', + 'settings.aiModels': 'KI & Modelle', + 'settings.aiModelsDesc': 'Lokales KI-Modell-Setup, Downloads und LLM-Anbieter', + 'settings.ai': 'KI-Konfiguration', + 'settings.aiDesc': 'Cloud-Anbieter, lokale Ollama-Modelle und Routing pro Workload', + 'settings.billingUsage': 'Abrechnung und Nutzung', + 'settings.billingUsageDesc': 'Abonnementplan, Guthaben und Zahlungsmethoden', + 'settings.rewards': 'Belohnungen', + 'settings.rewardsDesc': 'Empfehlungen, Gutscheine und verdiente Credits', + 'settings.restartTour': 'Tour neu starten', + 'settings.restartTourDesc': 'Wiederhole die Produktanleitung von Anfang an', + 'settings.about': 'Über', + 'settings.aboutDesc': 'App-Version und Software-Updates', + 'settings.developerOptions': 'Fortgeschritten', + 'settings.developerOptionsDesc': + 'KI-Konfiguration, Nachrichtenkanäle, Tools, Diagnose und Debug-Panels', + 'settings.clearAppData': 'App-Daten löschen', + 'settings.clearAppDataDesc': 'Melde dich ab und lösche alle lokalen App-Daten dauerhaft', + 'settings.logOut': 'Abmelden', + 'settings.logOutDesc': 'Melde dich von deinem Konto ab', + 'settings.exitLocalSession': 'Lokale Sitzung beenden', + 'settings.exitLocalSessionDesc': 'Zum Anmeldebildschirm zurückkehren', + 'settings.language': 'Sprache', + 'settings.betaBuild': 'Beta-Build – v{version}', + 'settings.languageDesc': 'Anzeigesprache für die App-Oberfläche', + 'settings.alerts': 'Warnungen', + 'settings.alertsDesc': + 'Sieh dir aktuelle Benachrichtigungen und Aktivitäten in deinem Posteingang an', + 'settings.account.recoveryPhrase': 'Wiederherstellungssatz', + 'settings.account.recoveryPhraseDesc': + 'Sieh dir deinen Kontowiederherstellungssatz an und sichere ihn', + 'settings.account.team': 'Team', + 'settings.account.teamDesc': 'Verwalte Teammitglieder und Berechtigungen', + 'settings.account.connections': 'Verbindungen', + 'settings.account.connectionsDesc': 'Verwalte verknüpfte Konten und Dienste', + 'settings.account.privacy': 'Privatsphäre', + 'settings.account.privacyDesc': 'Kontrolliere, welche Daten deinen Computer verlassen', + 'migration.title': 'Von einem anderen Assistenten importieren', + 'migration.description': + 'Speicher und Notizen von einem anderen lokalen Assistenten in diesen Arbeitsbereich migrieren. Beginne mit einer Vorschau, um genau zu sehen, was sich ändern würde, und kopiere dann die Daten mit „Übernehmen“. Dein aktueller Speicher wird zunächst gesichert.', + 'migration.vendorLabel': 'Quellanbieter', + 'migration.vendor.openclaw': 'OpenClaw', + 'migration.vendor.hermes': 'Hermes Agent', + 'migration.sourceLabel': 'Quellarbeitsbereichspfad (optional)', + 'migration.sourcePlaceholder': + 'Zur automatischen Erkennung leer lassen (z. B. ~/.openclaw/workspace)', + 'migration.sourcePlaceholderHermes': 'Leer lassen für automatische Erkennung (z. B. ~/.hermes)', + 'migration.sourceHint': + 'Wenn leer, wird standardmäßig der Standardspeicherort des Anbieters verwendet. Lege einen expliziten Pfad fest, wenn du den Arbeitsbereich an einen anderen Ort verschoben hast.', + 'migration.previewAction': 'Vorschau', + 'migration.previewRunning': 'Vorschau...', + 'migration.applyAction': 'Import anwenden', + 'migration.applyRunning': 'Importieren…', + 'migration.applyDisclaimer': + '„Anwenden“ wird nach einer erfolgreichen Vorschau derselben Quelle freigeschaltet. Vor jedem Import wird der vorhandene Speicher gesichert.', + 'migration.reportTitlePreview': 'Vorschau – noch nichts importiert', + 'migration.reportTitleApplied': 'Import abgeschlossen', + 'migration.report.source': 'Quellarbeitsbereich', + 'migration.report.target': 'Zielarbeitsbereich', + 'migration.report.fromSqlite': 'Von SQLite (brain.db)', + 'migration.report.fromMarkdown': 'Von Markdown', + 'migration.report.imported': 'Importiert', + 'migration.report.skippedUnchanged': 'Übersprungen (unverändert)', + 'migration.report.renamedConflicts': 'Aufgrund eines Konflikts umbenannt', + 'migration.report.warnings': 'Warnungen', + 'migration.report.previewHint': + 'Es wurden noch keine Daten importiert. Klicke auf Import anwenden, um ihn zu kopieren.', + 'migration.report.appliedHint': + 'Importierte Einträge sind jetzt in deinem Speicher. Führe die Vorschau erneut aus, wenn du noch einmal vergleichen möchtest.', + 'migration.confirmImport.singular': + 'Eintrag {count} in den aktuellen Arbeitsbereich importieren?\n\nQuelle: {source}\nZiel: {target}\n\nVorhandener Speicher wird gesichert, bevor der Import ausgeführt wird.', + 'migration.confirmImport.plural': + '{count} Einträge in den aktuellen Arbeitsbereich importieren?\n\nQuelle: {source}\nZiel: {target}\n\nVorhandener Speicher wird gesichert, bevor der Import ausgeführt wird.', + 'settings.notifications.doNotDisturb': 'Bitte nicht stören', + 'settings.notifications.doNotDisturbDesc': + 'Pausiere alle Benachrichtigungen für einen festgelegten Zeitraum', + 'settings.notifications.channelControls': 'Steuerung pro Kanal', + 'settings.notifications.channelControlsDesc': + 'Konfiguriere Benachrichtigungseinstellungen für jeden Kanal', + 'settings.features.screenAwareness': 'Bildschirmbewusstsein', + 'settings.features.screenAwarenessDesc': 'Lass den Assistenten dein aktives Fenster sehen', + 'settings.features.messaging': 'Nachrichten', + 'settings.features.messagingDesc': 'Einstellungen für die Kanal- und Messaging-Integration', + 'settings.features.tools': 'Werkzeuge', + 'settings.features.toolsDesc': 'Verwalte verbundene Tools und Integrationen', + 'settings.ai.localSetup': 'Lokales KI-Setup', + 'settings.ai.localSetupDesc': 'Lade lokale KI-Modelle herunter und konfiguriere sie', + 'settings.ai.llmProvider': 'LLM Anbieter', + 'settings.ai.llmProviderDesc': 'Wähle und konfiguriere deinen KI-Anbieter', + 'clearData.title': 'App-Daten löschen', + 'clearData.warning': + 'Dadurch wirst du abgemeldet und lokale App-Daten werden dauerhaft gelöscht, einschließlich:', + 'clearData.bulletSettings': 'App-Einstellungen und Konversationen', + 'clearData.bulletCache': 'Alle Daten des lokalen Integrationscache', + 'clearData.bulletWorkspace': 'Arbeitsbereichsdaten', + 'clearData.bulletOther': 'Alle anderen lokalen Daten', + 'clearData.irreversible': 'Diese Aktion kann nicht rückgängig gemacht werden.', + 'clearData.clearing': 'App-Daten löschen...', + 'clearData.failed': 'Daten löschen und Abmelden fehlgeschlagen. Bitte versuche es erneut.', + 'clearData.failedLogout': 'Abmelden fehlgeschlagen. Bitte versuche es erneut.', + 'clearData.failedPersist': + 'Der persistente App-Status konnte nicht gelöscht werden. Bitte versuche es erneut.', + 'welcome.title': 'Willkommen bei OpenHuman', + 'welcome.subtitle': + 'Deine persönliche KI-Superintelligenz. Privat, einfach und äußerst leistungsstark.', + 'welcome.connectPrompt': 'Konfiguriere RPC URL (Erweitert)', + 'welcome.selectRuntime': 'Wähle eine Laufzeit aus', + 'welcome.clearingAppData': 'App-Daten löschen...', + 'welcome.clearAppDataAndRestart': 'App-Daten löschen und neu starten', + 'welcome.clearAppDataWarning': + 'Dadurch werden lokal gespeicherte Geheimnisse und Konten auf diesem Gerät gelöscht. Dein Cloud-Konto ist nicht betroffen – du kannst dich danach sofort wieder anmelden.', + 'welcome.resetErrorFallback': + 'App-Daten konnten nicht gelöscht werden. Bitte OpenHuman beenden, neu öffnen und es dann erneut versuchen.', + 'welcome.signingIn': 'Ich melde mich an...', + 'welcome.termsIntro': 'Indem Sie fortfahren, stimmen Sie den', + 'welcome.termsOfUse': 'Bedingungen', + 'welcome.termsJoiner': 'und der', + 'welcome.privacyPolicy': 'Datenschutzrichtlinie zu', + 'welcome.termsOutro': '.', + 'welcome.urlPlaceholder': 'http://localhost:8089', + 'welcome.invalidUrl': 'Bitte gib einen gültigen HTTP oder HTTPS URL ein.', + 'welcome.connecting': 'Testen', + 'welcome.connect': 'Testen', + 'home.greeting': 'Guten Morgen', + 'home.greetingAfternoon': 'Guten Tag', + 'home.greetingEvening': 'Guten Abend', + 'home.askAssistant': 'Frag deinen Assistenten etwas ...', + 'home.statusOk': + 'Dein Gerät ist verbunden. Lass die App laufen, um die Verbindung aufrechtzuerhalten. Sende deinem Agenten über die Schaltfläche unten eine Nachricht.', + 'home.statusBackendOnly': + 'Verbindung zum Backend wird wiederhergestellt. Dein Agent wird in Kürze wieder verfügbar sein.', + 'home.statusCoreUnreachable': + 'Der lokale Core-Sidecar reagiert nicht. Der Hintergrundprozess OpenHuman ist möglicherweise abgestürzt oder konnte nicht gestartet werden.', + 'home.statusInternetOffline': + 'Dein Gerät ist gerade offline. Prüfe dein Netzwerk oder starte die App neu, um die Verbindung wiederherzustellen.', + 'home.restartCore': 'Starte Core neu', + 'home.restartingCore': 'Kern wird neu gestartet...', + 'home.themeToggle.toLight': 'Wechsle in den Lichtmodus', + 'home.themeToggle.toDark': 'Wechsle in den Dunkelmodus', + 'home.usageExhaustedTitle': 'Dein Nutzungskontingent ist aufgebraucht', + 'home.usageExhaustedBody': + 'Dein enthaltenes Nutzungskontingent ist vorerst aufgebraucht. Starte ein Abo, um mehr laufende Kapazität freizuschalten.', + 'home.usageExhaustedCta': 'Abo starten', + 'home.routinesCard': 'Deine Routinen', + 'home.routinesActive': '{count} aktiv', + 'routines.title': 'Ihre Routinen', + 'routines.subtitle': 'Dinge, die Ihr Assistent automatisch erledigt', + 'routines.loading': 'Routinen werden geladen...', + 'routines.empty': 'Noch keine Routinen', + 'routines.emptyHint': + 'Ihr Assistent kann Aufgaben nach einem Zeitplan ausführen — wie Morgenbriefings oder tägliche Zusammenfassungen.', + 'routines.refresh': 'Aktualisieren', + 'routines.nextRun': 'Nächste Ausführung', + 'routines.lastRunSuccess': 'Letzter Durchlauf erfolgreich', + 'routines.lastRunFailed': 'Letzter Durchlauf fehlgeschlagen', + 'routines.notRunYet': 'Noch nicht ausgeführt', + 'routines.runNow': 'Ausführung starten', + 'routines.running': 'Läuft…', + 'routines.viewHistory': 'Verlauf ansehen', + 'routines.loadingHistory': 'Laden…', + 'routines.noHistory': 'Noch kein Verlauf', + 'routines.statusSuccess': 'Erfolg', + 'routines.statusError': 'Error', + 'routines.showOutput': 'Ausgabe anzeigen', + 'routines.hideOutput': 'Test-Output verstecken', + 'routines.toggleEnabled': 'Aktivieren oder deaktivieren Sie diese Routine', + 'routines.typeAgent': 'Agent', + 'routines.typeCommand': 'Kommandant', + 'nav.routines': 'Routines', + 'chat.newThread': 'Neuer Thread', + 'chat.typeMessage': 'Gib eine Nachricht ein...', + 'chat.send': 'Nachricht senden', + 'chat.thinking': 'Denken...', + 'chat.noMessages': 'Noch keine Nachrichten', + 'chat.startConversation': 'Beginne ein Gespräch', + 'chat.regenerate': 'Regenerieren', + 'chat.copyResponse': 'Antwort kopieren', + 'chat.citations': 'Zitate', + 'chat.toolUsed': 'Werkzeug verwendet', + 'scope.legacy': 'Vermächtnis', + 'scope.user': 'Benutzer', + 'scope.project': 'Projekt', + 'skills.title': 'Verbindungen', + 'skills.search': 'Verbindungen suchen...', + 'skills.noResults': 'Keine Verbindungen gefunden', + 'skills.connect': 'Verbinden', + 'skills.disconnect': 'Trennen', + 'skills.configure': 'Verwalten', + 'skills.connected': 'Verbunden', + 'skills.available': 'Verfügbar', + 'skills.addAccount': 'Konto hinzufügen', + 'skills.channels': 'Kanäle', + 'skills.integrations': 'Integrationen', + 'skills.integrationsSubtitle': + 'Cloud-basierte OAuth-Verbindungen – mit deinem Konto anmelden und Composio verwaltet die Tokens, damit Agenten in deinem Namen lesen und handeln können. Keine API-Schlüssel notwendig.', 'skills.composio.noApiKeyTitle': 'Kein Composio-API-Schlüssel konfiguriert', 'skills.composio.noApiKeyDescription': 'Im lokalen Modus wird dein eigener Composio-API-Schlüssel verwendet. Öffne Einstellungen → Erweitert → Composio, um einen Schlüssel hinzuzufügen, bevor du hier Integrationen verbindest.', 'skills.composio.noApiKeyCta': 'In den Einstellungen öffnen', - 'channels.localManagedUnavailable': 'Verwaltete Kanäle sind für lokale Benutzer nicht verfügbar.', + 'skills.tabs.composio': 'Composio', + 'skills.tabs.channels': 'Kanäle', + 'skills.tabs.mcp': 'MCP Server', + 'skills.tabs.runners': 'Runners', + 'memory.title': 'Erinnerung', + 'memory.search': 'Erinnerungen suchen...', + 'memory.noResults': 'Keine Erinnerungen gefunden', + 'memory.empty': + 'Noch keine Erinnerungen. Erinnerungen werden automatisch erstellt, während du interagierst.', + 'memory.tab.memory': 'Erinnerung', + 'memory.tab.tasks': 'Agent-Aufgaben', + 'memory.tab.tasksDescription': + 'Aufgaben erstellen und verfolgen – eigene To-dos sowie die Boards, die Agenten in Gesprächen anlegen.', + 'memory.tab.subconscious': 'Unterbewusstsein', + 'memory.tab.dreams': 'Träume', + 'memory.tab.calls': 'Anrufe', + 'memory.tab.diagram': 'Diagram', + 'memory.tab.centrality': 'Centrality', + 'memory.tab.settings': 'Einstellungen', + 'memory.analyzeNow': 'Jetzt analysieren', + 'graphCentrality.title': 'Zentralität des Wissensgraphen', + 'graphCentrality.intro': + 'Der PageRank über Ihr Speicherdiagramm zeigt die tragenden Knotenpunkte auf – und die Konnektorentitäten, die ansonsten getrennte Cluster verbinden, die eine reine Häufigkeitszählung nicht aufdecken kann.', + 'graphCentrality.loading': 'Rechenzentralität…', + 'graphCentrality.errorPrefix': 'Das Diagramm konnte nicht geladen werden:', + 'graphCentrality.retry': 'Wiederholen', + 'graphCentrality.empty': 'Noch kein Wissensgraph.', + 'graphCentrality.emptyHint': + 'Während der Assistent Fakten über Sie aufzeichnet, werden hier die am stärksten verbundenen Entitäten angezeigt.', + 'graphCentrality.namespaceLabel': 'Namensraum', + 'graphCentrality.namespaceAll': 'Alle Namensräume', + 'graphCentrality.metricEntities': 'Entitäten', + 'graphCentrality.metricConnections': 'Verbindungen', + 'graphCentrality.metricClusters': 'Cluster', + 'graphCentrality.clustersCaption': '{components}-Cluster · Größter enthält {largest}', + 'graphCentrality.approximateBadge': 'approximate', + 'graphCentrality.approximateTitle': + 'Angehalten bei der Iterationsobergrenze, bevor die Konvergenz vollständig erfolgte', + 'graphCentrality.rankedHeading': 'Top-Unternehmen nach Einfluss', + 'graphCentrality.colRank': '#', + 'graphCentrality.colEntity': 'Juristische Person', + 'graphCentrality.colInfluence': 'Beeinflussen', + 'graphCentrality.colLinks': 'Links', + 'graphCentrality.bridgeBadge': 'connector', + 'graphCentrality.bridgeTitle': + 'Connector – einflussreicher als die Anzahl der Links vermuten lässt', + 'graphCentrality.degreeTitle': '{in} rein · {out} raus', + 'memoryTree.status.title': 'Speicherbaum', + 'memoryTree.status.autoSyncLabel': 'Auto Sync', + 'memoryTree.status.autoSyncDescription': + 'Pausieren Sie, um die erneute Einnahme zu stoppen. Vorhandenes Wiki bleibt abfragbar.', + 'memoryTree.status.statusTile': 'Status', + 'memoryTree.status.lastSyncTile': 'Letzte Synchronisierung', + 'memoryTree.status.totalChunksTile': 'Gesamtstückzahl', + 'memoryTree.status.wikiSizeTile': 'Wiki-Größe', + 'memoryTree.status.statusRunning': 'Laufend', + 'memoryTree.status.statusPaused': 'Angehalten', + 'memoryTree.status.statusSyncing': 'Synchronisierung läuft', + 'memoryTree.status.statusError': 'Error', + 'memoryTree.status.statusIdle': 'Untätig', + 'memoryTree.status.never': 'Nie', + 'memoryTree.status.fetchError': 'Speicherbaum-Status konnte nicht abgerufen werden', + 'memoryTree.status.retry': 'Wiederholen', + 'memoryTree.status.toggleFailed': + 'Automatische Synchronisierung konnte nicht umgeschaltet werden', + 'memoryTree.status.justNow': 'gerade eben', + 'memoryTree.status.secondsAgo': 'Vor {count}s', + 'memoryTree.status.minuteAgo': '1 Minute zuvor', + 'memoryTree.status.minutesAgo': 'Vor {count} Min.', + 'memoryTree.status.hourAgo': 'Vor 1 Stunde', + 'memoryTree.status.hoursAgo': 'Vor {count} Std.', + 'memoryTree.status.dayAgo': 'Vor 1 Tag', + 'memoryTree.status.daysAgo': '{count} vor Tagen', + 'alerts.title': 'Warnungen', + 'alerts.empty': 'Noch keine Benachrichtigungen', + 'alerts.markAllRead': 'Alle als gelesen markieren', + 'alerts.unread': 'ungelesen', + 'rewards.title': 'Belohnungen', + 'rewards.referrals': 'Empfehlungen', + 'rewards.coupons': 'Einlösen', 'rewards.localUnavailable': 'Ein lokaler Login sammelt keine Belohnungen, Gutscheine oder Empfehlungsguthaben. Melde dich ab und anschließend mit einem OpenHuman-Konto an, wenn Belohnungen zählen sollen.', 'rewards.localUnavailableCta': 'Kontoeinstellungen öffnen', + 'rewards.credits': 'Credits', + 'rewards.referralCode': 'Dein Empfehlungscode', + 'rewards.copyCode': 'Code kopieren', + 'rewards.share': 'Teilen', + 'onboarding.welcome': 'Hallo. Ich bin OpenHuman.', + 'onboarding.welcomeDesc': + 'Dein superintelligenter KI-Assistent, der auf deinem Computer läuft. Privat, einfach und äußerst leistungsstark.', + 'onboarding.context': 'Kontexterfassung', + 'onboarding.contextDesc': 'Verbinde die Tools und Dienste, die du täglich nutzt.', + 'onboarding.localAI': 'Lokale KI', + 'onboarding.localAIDesc': + 'Richte ein lokales KI-Modell ein, das auf deinem Computer ausgeführt wird.', + 'onboarding.chatProvider': 'Chat-Anbieter', + 'onboarding.chatProviderDesc': 'Wähle aus, wie du mit deinem Assistenten interagieren möchtest.', + 'onboarding.referral': 'Empfehlung', + 'onboarding.referralDesc': 'Wende einen Empfehlungscode an, falls du einen hast.', + 'onboarding.finish': 'Schließe die Einrichtung', + 'onboarding.finishDesc': 'Du bist bereit! Beginne mit der Verwendung von OpenHuman.', + 'onboarding.skip': 'Überspringen', + 'onboarding.getStarted': 'Lege los', + 'onboarding.runtimeChoice.title': 'Wie möchtest du OpenHuman starten?', + 'onboarding.runtimeChoice.subtitle': + 'Wähle das Setup, das am besten zu dir passt. Du kannst es später in den Einstellungen ändern.', + 'onboarding.runtimeChoice.cloud.title': 'Einfach', + 'onboarding.runtimeChoice.cloud.tagline': 'Lass OpenHuman alles für dich verwalten.', + 'onboarding.runtimeChoice.cloud.f1': 'Integrierte Sicherheit', + 'onboarding.runtimeChoice.cloud.f2': 'Token-Komprimierung, um deine Nutzung weiter auszudehnen', + 'onboarding.runtimeChoice.cloud.f3': 'Ein Abonnement, jedes Modell inklusive', + 'onboarding.runtimeChoice.cloud.f4': 'Keine API Schlüssel zum Verwalten', + 'onboarding.runtimeChoice.cloud.f5': 'Einfach einzurichten', + 'onboarding.runtimeChoice.custom.title': 'Führe Benutzerdefiniert aus', + 'onboarding.runtimeChoice.custom.tagline': + 'Bring deine eigenen Schlüssel mit. Volle Kontrolle darüber, was du verwendest.', + 'onboarding.runtimeChoice.custom.f1': 'Du brauchst für fast alles API-Schlüssel', + 'onboarding.runtimeChoice.custom.f2': 'Nutzt Dienste wieder, für die du bereits bezahlt hast', + 'onboarding.runtimeChoice.custom.f3': 'Kann kostenlos sein, wenn du alles lokal ausführst', + 'onboarding.runtimeChoice.custom.f4': 'Mehr Setup, mehr Knöpfe', + 'onboarding.runtimeChoice.custom.f5': 'Am besten für Power-User und Entwickler geeignet', + 'onboarding.runtimeChoice.cloud.creditHighlight': '1 $ Gratisguthaben zum Ausprobieren', + 'onboarding.runtimeChoice.continueCloud': 'Fahre mit „Einfach“ fort', + 'onboarding.runtimeChoice.continueCustom': 'Fahre mit Benutzerdefiniert fort', + 'onboarding.runtimeChoice.recommended': 'Empfohlen', + 'onboarding.apiKeys.title': 'Fügen wir deine API-Schlüssel hinzu', + 'onboarding.apiKeys.subtitle': + 'Du kannst sie jetzt einfügen oder überspringen und später unter „Einstellungen“ > „KI“ hinzufügen. Schlüssel werden auf diesem Gerät gespeichert und im Ruhezustand verschlüsselt.', + 'onboarding.apiKeys.openaiLabel': 'OpenAI API Schlüssel', + 'onboarding.apiKeys.openaiPlaceholder': 'sk-...', + 'onboarding.apiKeys.openaiOauthHint': + 'Verwenden Sie ChatGPT Plus/Pro (Abonnement) oder einen OpenAI API-Schlüssel – nicht beides erforderlich.', + 'onboarding.apiKeys.openaiOauthOpening': 'Anmeldung öffnen…', + 'onboarding.apiKeys.finishSignIn': 'ChatGPT-Anmeldung abschließen', + 'onboarding.apiKeys.orApiKey': 'oder API-Taste', + 'onboarding.apiKeys.anthropicLabel': 'Anthropic API Schlüssel', + 'onboarding.apiKeys.anthropicPlaceholder': 'sk-ant-...', + 'onboarding.apiKeys.saveError': + 'Der Schlüssel konnte nicht gespeichert werden. Bitte prüfe ihn noch einmal und versuche es erneut.', + 'onboarding.apiKeys.skipForNow': 'Erstmal überspringen', + 'onboarding.apiKeys.continue': 'Speichern und fortfahren', + 'onboarding.apiKeys.saving': 'Sparen…', + 'onboarding.custom.stepperInference': 'Schlussfolgerung', + 'onboarding.custom.stepperVoice': 'Stimme', + 'onboarding.custom.stepperOAuth': 'OAuth', + 'onboarding.custom.stepperSearch': 'Suchen', + 'onboarding.custom.stepperEmbeddings': 'Embeddings', + 'onboarding.custom.stepperMemory': 'Erinnerung', + 'onboarding.custom.stepCounter': 'Schritt {n} von {total}', + 'onboarding.custom.defaultTitle': 'Standard', + 'onboarding.custom.defaultSubtitle': 'Lass OpenHuman das für dich erledigen.', + 'onboarding.custom.configureTitle': 'Konfigurieren', + 'onboarding.custom.configureSubtitle': 'Ich wähle aus, was ich verwenden möchte.', + 'onboarding.custom.progressAriaLabel': 'Onboarding-Fortschritt', + 'onboarding.custom.continue': 'Weiter', + 'onboarding.custom.back': 'Zurück', + 'onboarding.custom.finish': 'Schließe die Einrichtung', + 'onboarding.custom.configureLater': + 'Du kannst die Verknüpfung nach dem Onboarding abschließen. Sobald du fertig bist, wirst du auf die passende Einstellungsseite weitergeleitet.', + 'onboarding.custom.openSettings': 'In den Einstellungen öffnen', + 'onboarding.custom.inference.title': 'Schlussfolgerung (Text)', + 'onboarding.custom.inference.subtitle': + 'Welches Sprachmodell soll deine Fragen beantworten und deine Agenten betreiben?', + 'onboarding.custom.inference.defaultDesc': + 'OpenHuman leitet jede Arbeitslast an ein sinnvolles Standardmodell weiter. Keine Schlüssel, keine Einrichtung.', + 'onboarding.custom.inference.configureDesc': + 'Bring deinen eigenen OpenAI- oder Anthropic-Schlüssel mit. Wir verwenden ihn für jede textbasierte Arbeitslast.', + 'onboarding.custom.voice.title': 'Stimme', + 'onboarding.custom.voice.subtitle': 'Speech-to-Text und Text-to-Speech für den Sprachmodus.', + 'onboarding.custom.voice.defaultDesc': + 'OpenHuman wird mit verwaltetem STT/TTS geliefert, das einfach funktioniert. Nichts zu verkabeln.', + 'onboarding.custom.voice.configureDesc': + 'Verwende dein eigenes ElevenLabs / OpenAI Whisper / usw. Konfiguriere es in den Einstellungen › Stimme.', + 'onboarding.custom.oauth.title': 'Verbindungen (OAuth)', + 'onboarding.custom.oauth.subtitle': + 'Gmail, Slack, Notion und andere verbundene Dienste, die OAuth benötigen.', + 'onboarding.custom.oauth.defaultDesc': + 'OpenHuman führt einen verwalteten Composio-Arbeitsbereich aus. Ein Klick, um jeden Dienst später zu verbinden.', + 'onboarding.custom.oauth.configureDesc': + 'Bring dein eigenes Composio-Konto / API-Schlüssel mit. Konfiguriere unter Einstellungen › Verbindungen.', + 'onboarding.custom.search.title': 'Websuche', + 'onboarding.custom.search.subtitle': 'Wie OpenHuman das Web in deinem Namen durchsucht.', + 'onboarding.custom.search.defaultDesc': + 'OpenHuman verwendet ein verwaltetes Such-Backend. Keine Schlüssel erforderlich.', + 'onboarding.custom.search.configureDesc': + 'Bring deinen eigenen Suchanbieterschlüssel mit (Tavily, Brave usw.). Konfiguriere unter Einstellungen › Extras.', + 'onboarding.custom.embeddings.title': 'Embeddings', + 'onboarding.custom.embeddings.subtitle': + 'Wie OpenHuman Vektor-Embeddings für die semantische Gedächtnissuche erstellt.', + 'onboarding.custom.embeddings.defaultDesc': + 'OpenHuman verwendet einen verwalteten Embedding-Dienst. Kein API-Schlüssel erforderlich.', + 'onboarding.custom.embeddings.configureDesc': + 'Eigenen Embedding-Anbieter einbinden (OpenAI, Voyage, Ollama usw.).', + 'onboarding.custom.memory.title': 'Erinnerung', + 'onboarding.custom.memory.subtitle': + 'Wie OpenHuman sich deinen Kontext, deine Vorlieben und frühere Gespräche merkt.', + 'onboarding.custom.memory.defaultDesc': + 'OpenHuman verwaltet die Speicherung und den Abruf des Speichers automatisch. Nichts einzurichten.', + 'onboarding.custom.memory.configureDesc': + 'Überprüfe, exportiere oder lösche den Speicher selbst. Konfiguriere in den Einstellungen › Speicher.', + 'accounts.addAccount': 'Konto hinzufügen', + 'accounts.manageAccounts': 'Konten verwalten', + 'accounts.noAccounts': 'Keine Konten verbunden', + 'accounts.connectAccount': 'Verbinde ein Konto, um loszulegen', + 'accounts.agent': 'Agent', + 'accounts.respondQueue': 'Antwortwarteschlange', + 'accounts.disconnect': 'Trennen', + 'accounts.disconnectConfirm': 'Möchtest du dieses Konto wirklich trennen?', + 'accounts.disconnectClearMemory': 'Erinnerungen aus dieser Quelle ebenfalls löschen', + 'accounts.disconnectClearMemoryHint': + 'Entfernt dauerhaft alle lokalen Gedächtnisfragmente, die mit dieser Verbindung verknüpft sind.', + 'accounts.searchAccounts': 'Konten durchsuchen...', + 'channels.title': 'Kanäle', + 'channels.configure': 'Kanal konfigurieren', + 'channels.setup': 'Einrichtung', + 'channels.noChannels': 'Keine Kanäle konfiguriert', + 'channels.localManagedUnavailable': 'Verwaltete Kanäle sind für lokale Benutzer nicht verfügbar.', + 'channels.addChannel': 'Kanal hinzufügen', + 'channels.status.connected': 'Verbunden', + 'channels.status.disconnected': 'Nicht verbunden', + 'channels.status.error': 'Fehler', + 'channels.status.configuring': 'Konfigurieren', + 'channels.defaultMessaging': 'Standard-Messaging-Kanal', + 'webhooks.title': 'Webhooks', + 'webhooks.create': 'Erstelle einen Webhook', + 'webhooks.noWebhooks': 'Keine Webhooks konfiguriert', + 'webhooks.url': 'URL', + 'webhooks.secret': 'Geheimnis', + 'webhooks.events': 'Veranstaltungen', + 'webhooks.archiveDirectory': 'Archivverzeichnis', + 'webhooks.todayFile': 'Heutige Akte', + 'invites.title': 'Lädt ein', + 'invites.create': 'Einladung erstellen', + 'invites.noInvites': 'Keine ausstehenden Einladungen', + 'invites.code': 'Einladungscode', + 'invites.copyLink': 'Link kopieren', + 'invites.generate': 'Einladung erstellen', + 'invites.generating': 'Wird erstellt…', + 'invites.refreshing': 'Einladungen werden aktualisiert…', + 'invites.loading': 'Einladungen werden geladen…', + 'invites.copyCodeAria': 'Einladungscode kopieren', + 'invites.revokeAria': 'Einladung widerrufen', + 'invites.usedUp': 'Aufgebraucht', + 'invites.uses': 'Verwendung: {current}{max}', + 'invites.expiresOn': 'Läuft am {date} ab', + 'invites.empty': 'Noch keine Einladungen', + 'invites.emptyHint': 'Erstelle einen Einladungscode, um ihn mit anderen zu teilen', + 'invites.revokeTitle': 'Einladungscode widerrufen', + 'invites.revokePromptPrefix': 'Sind Sie sicher, dass Sie den Einladungscode widerrufen möchten?', + 'invites.revokeWarning': + 'Dieser Einladungscode ist danach ungültig und kann nicht mehr zum Beitritt zum Team verwendet werden.', + 'invites.revoking': 'Widerrufen...', + 'invites.revokeAction': 'Einladung widerrufen', + 'invites.failedGenerate': 'Einladung konnte nicht erstellt werden', + 'invites.failedRevoke': 'Einladung konnte nicht widerrufen werden', + 'team.refreshingMembers': 'Mitglieder werden aktualisiert...', + 'team.loadingMembers': 'Mitglieder werden geladen...', + 'team.memberCount': '{count} Mitglied', + 'team.memberCountPlural': '{count} Mitglieder', + 'team.you': '(Sie)', + 'team.removeAria': '{name} entfernen', + 'team.noMembers': 'Keine Mitglieder gefunden', + 'team.removeTitle': 'Teammitglied entfernen', + 'team.removePromptPrefix': 'Sind Sie sicher, dass Sie entfernen möchten?', + 'team.removePromptSuffix': 'aus dem Team?', + 'team.removeWarning': 'Sie verlieren den Zugriff auf das Team und alle Teamressourcen.', + 'team.removing': 'Entfernen...', + 'team.removeAction': 'Mitglied entfernen', + 'team.changeRoleTitle': 'Mitgliedsrolle ändern', + 'team.changeRolePrompt': 'Rolle von {name} von {oldRole} in {newRole} ändern?', + 'team.changeRoleAdminGrant': + 'Damit werden volle Administratorberechtigungen erteilt, einschließlich der Verwaltung von Teammitgliedern.', + 'team.changeRoleAdminRemove': + 'Damit werden die Administratorberechtigungen entzogen und die Person kann das Team nicht mehr verwalten.', + 'team.changing': 'Ändern...', + 'team.changeRoleAction': 'Rolle ändern', + 'team.failedChangeRole': 'Rolle konnte nicht geändert werden.', + 'team.failedRemoveMember': 'Mitglied konnte nicht entfernt werden.', + 'devOptions.title': 'Fortgeschritten', + 'devOptions.diagnostics': 'Diagnose', + 'devOptions.diagnosticsDesc': 'Systemzustand, Protokolle und Leistungsmetriken', + 'devOptions.toolPolicyDiagnosticsDesc': + 'Werkzeuginventar, Richtlinienstatus, MCP-Zulassungslisten und aktuelle Sperren', + 'devOptions.toolPolicyDiagnostics.loading': 'Laden…', + 'devOptions.toolPolicyDiagnostics.unavailable': 'Diagnose nicht verfügbar', + 'devOptions.toolPolicyDiagnostics.posture.title': 'Politische Haltung', + 'devOptions.toolPolicyDiagnostics.posture.autonomy': 'Autonomie:', + 'devOptions.toolPolicyDiagnostics.posture.workspaceOnly': 'Nur Arbeitsbereich:', + 'devOptions.toolPolicyDiagnostics.posture.maxActionsPerHour': 'Max. actions/hr:', + 'devOptions.toolPolicyDiagnostics.posture.approvalMediumRisk': 'Zulassung (mittleres Risiko):', + 'devOptions.toolPolicyDiagnostics.posture.blockHighRisk': 'Hohes Risiko blockieren:', + 'devOptions.toolPolicyDiagnostics.inventory.title': 'Inventar', + 'devOptions.toolPolicyDiagnostics.inventory.totalTools': 'Gesamtwerkzeuge', + 'devOptions.toolPolicyDiagnostics.inventory.enabledTools': 'Aktivierte Tools', + 'devOptions.toolPolicyDiagnostics.inventory.mcpStdioTools': 'MCP stdio-Tools', + 'devOptions.toolPolicyDiagnostics.inventory.jsonRpcTools': 'JSON-RPC-Werkzeuge', + 'devOptions.toolPolicyDiagnostics.mcpAllowlists.title': 'MCP-Zulassungslisten', + 'devOptions.toolPolicyDiagnostics.mcpAllowlists.summary': + 'Aktiviert: {enabled} · Server: ZXHOLD1ZX/ZXHOLD2ZX', + 'devOptions.toolPolicyDiagnostics.mcpAllowlists.unnamed': '', + 'devOptions.toolPolicyDiagnostics.mcpAllowlists.allowDeny': + 'erlauben={allowCount} verweigern={denyCount}', + 'devOptions.toolPolicyDiagnostics.mcpWriteAudit.title': 'MCP Schreibprüfung', + 'devOptions.toolPolicyDiagnostics.mcpWriteAudit.summary': + 'Aktiviert: {enabled} · Zuletzt (24 Stunden): {recentRows}', + 'devOptions.toolPolicyDiagnostics.recentBlocked.title': 'Letzte blockierte Anrufe', + 'devOptions.toolPolicyDiagnostics.recentBlocked.empty': + 'Es wurden keine blockierten Anrufe aufgezeichnet.', + 'devOptions.toolPolicyDiagnostics.redactedSurfaces.title': 'Geschwärzte Oberflächen', + 'devOptions.toolPolicyDiagnostics.redactedSurfaces.summary': + 'Schreibfähig: {writeCount} · Richtlinienoberflächen: {policyCount}', + 'devOptions.debugPanels': 'Debug-Panels', + 'devOptions.debugPanelsDesc': 'Feature-Flags, Zustandsprüfung und Debugging-Tools', + 'devOptions.webhooks': 'Webhooks', + 'devOptions.webhooksDesc': 'Konfiguriere und teste Webhook-Integrationen', + 'devOptions.memoryInspection': 'Speicherinspektion', + 'devOptions.memoryInspectionDesc': 'Speichereinträge durchsuchen, abfragen und verwalten', + 'voice.pushToTalk': 'Push-to-Talk', + 'voice.recording': 'Aufnahme...', + 'voice.processing': 'Verarbeitung...', + 'voice.languageHint': 'Sprache', + 'misc.rehydrating': 'Deine Daten werden geladen...', + 'misc.checkingServices': 'Dienste prüfen...', + 'misc.serviceUnavailable': 'Dienst nicht verfügbar', + 'misc.somethingWentWrong': 'Etwas ist schief gelaufen', + 'misc.tryAgainLater': 'Bitte versuche es später noch einmal.', + 'misc.restartApp': 'App neu starten', + 'misc.updateAvailable': 'Update verfügbar', + 'misc.updateNow': 'Jetzt aktualisieren', + 'misc.updateLater': 'Später', + 'misc.downloading': 'Herunterladen...', + 'misc.installing': 'Installieren...', + 'misc.beta': + 'OpenHuman befindet sich in der frühen Betaphase. Teile uns gerne dein Feedback mit oder melde Fehler, auf die du stößt – jede Meldung hilft uns, schneller zu liefern.', + 'misc.betaFeedback': 'Feedback senden', + 'mnemonic.title': 'Wiederherstellungssatz', + 'mnemonic.warning': + 'Schreibe diese Wörter der Reihe nach auf und bewahre sie an einem sicheren Ort auf.', + 'mnemonic.copyWarning': + 'Gib niemals deine Wiederherstellungsphrase weiter. Jeder mit diesen Wörtern kann auf dein Konto zugreifen.', + 'mnemonic.copied': 'Wiederherstellungsphrase in die Zwischenablage kopiert', + 'mnemonic.reveal': 'Satz enthüllen', + 'mnemonic.revealPhrase': 'Wiederherstellungsphrase anzeigen', + 'mnemonic.hidden': 'Die Wiederherstellungsphrase ist ausgeblendet', + 'privacy.title': 'Datenschutz und Sicherheit', + 'privacy.description': 'Transparenzbericht der an externe Dienste gesendeten Daten.', + 'privacy.empty': 'Keine externen Datenübertragungen erkannt.', + 'privacy.whatLeavesComputer': 'Was deinen Computer verlässt', + 'privacy.loading': 'Datenschutzdetails werden geladen...', + 'privacy.loadError': + 'Die Live-Datenschutzliste konnte nicht geladen werden. Die unten aufgeführten Analytics-Steuerelemente funktionieren weiterhin.', + 'privacy.noCapabilities': 'Derzeit geben keine Funktionen Datenbewegungen offen.', + 'privacy.sentTo': 'Gesendet an', + 'privacy.leavesDevice': 'Verlässt das Gerät', + 'privacy.staysLocal': 'Bleibt lokal', + 'privacy.anonymizedAnalytics': 'Anonymisierte Analysen', + 'privacy.shareAnonymizedData': 'Teile anonymisierte Nutzungsdaten', + 'privacy.shareAnonymizedDataDesc': + 'Hilf mit, OpenHuman zu verbessern, indem du anonyme Absturzberichte und Nutzungsanalysen teilst. Alle Daten sind vollständig anonymisiert – es werden niemals persönliche Daten, Nachrichten, Wallet-Schlüssel oder Sitzungsinformationen erfasst.', + 'privacy.meetingFollowUps': 'Nachbereitung von Besprechungen', + 'privacy.autoHandoffMeet': 'Automatische Übergabe Google Meet-Transkripte an den Orchestrator', + 'privacy.autoHandoffMeetDesc': + 'Wenn ein Google Meet-Anruf endet, kann der Orchestrator von OpenHuman das Transkript lesen und Maßnahmen wie das Verfassen von Nachrichten, das Planen von Folgemaßnahmen oder das Veröffentlichen von Zusammenfassungen in deinem verbundenen Slack-Arbeitsbereich ergreifen. Standardmäßig deaktiviert.', + 'privacy.analyticsDisclaimer': + 'Alle Analysen und Fehlerberichte sind vollständig anonymisiert. Wenn diese Option aktiviert ist, erfassen wir nur Absturzinformationen, den Gerätetyp und den Dateispeicherort von Fehlern. Wir greifen niemals auf deine Nachrichten, Sitzungsdaten, Wallet-Schlüssel, API-Schlüssel oder andere persönlich identifizierbare Informationen zu. Du kannst diese Einstellung jederzeit ändern.', + 'settings.about.version': 'Version', + 'settings.about.updateAvailable': 'ist vorhanden', + 'settings.about.softwareUpdates': 'Software-Updates', + 'settings.about.lastChecked': 'Zuletzt überprüft', + 'settings.about.checking': 'Überprüfen...', + 'settings.about.checkForUpdates': 'Nach Updates suchen', + 'settings.about.releases': 'Veröffentlichungen', + 'settings.about.releasesDesc': 'Durchsuche Versionshinweise und frühere Builds auf GitHub.', + 'settings.about.openReleases': 'Öffne GitHub-Releases', + 'settings.about.connection': 'Verbindung', + 'settings.about.connectionMode': 'Modus', + 'settings.about.connectionModeLocal': 'Lokal', + 'settings.about.connectionModeCloud': 'Cloud', + 'settings.about.connectionModeUnset': 'Nicht ausgewählt', + 'settings.about.serverUrl': 'Server-URL', + 'settings.about.serverUrlUnavailable': 'Nicht verfügbar', + 'settings.about.connectionHelperLocal': + 'Wird beim Start der App von der Tauri-Shell im Prozess erzeugt. Der Port wird beim Start ausgewählt, sodass dieser URL zwischen den Starts wechselt.', + 'settings.about.connectionHelperCloud': + 'Verbunden mit einem Remote-Core. Ändern Sie dies in BootCheck oder in der Cloud-Modus-Auswahl.', + 'settings.heartbeat.title': 'Heartbeat und Schleifen', + 'settings.heartbeat.desc': + 'Kontrollieren Sie die Hintergrundplanungskadenzen und inspizieren Sie die Schleifenkarte.', + 'settings.ledgerUsage.title': 'Nutzungsbuch', + 'settings.ledgerUsage.desc': + 'Aktuelle Kreditausgaben, Budgetmathematik und Hintergrund API Lesebudget.', + 'settings.costDashboard.title': 'Kosten-Dashboard', + 'settings.costDashboard.desc': + '7-tägige Ausgaben und Token brennen über den Schwarm, mit Budgettempo und Aufschlüsselung nach Modell.', + 'settings.costDashboard.sevenDayCost': '7-Tage-Tageskosten', + 'settings.costDashboard.sevenDayTokens': '7-Tage-Token-Nutzung', + 'settings.costDashboard.totalSpend': '7 Tage insgesamt', + 'settings.costDashboard.monthlyPace': 'Monatstempo', + 'settings.costDashboard.budgetLimit': 'Budget-Limit', + 'settings.costDashboard.utilization': 'Utilization', + 'settings.costDashboard.modelBreakdown': 'Aufschlüsselung nach Modell', + 'settings.costDashboard.model': 'Modell', + 'settings.costDashboard.provider': 'Anbieter', + 'settings.costDashboard.cost': 'Kosten', + 'settings.costDashboard.tokens': 'Tokens', + 'settings.costDashboard.requests': 'Anträge', + 'settings.costDashboard.percentOfTotal': '% der Gesamtsumme', + 'settings.costDashboard.inputTokens': 'Eingabe', + 'settings.costDashboard.outputTokens': 'Ausgabe', + 'settings.costDashboard.budgetNormal': 'Im Zeitplan', + 'settings.costDashboard.budgetWarning': ' Achtung', + 'settings.costDashboard.budgetExceeded': 'Über dem Budget', + 'settings.costDashboard.noBudget': 'Kein Limit', + 'settings.costDashboard.noData': 'In den letzten 7 Tagen wurden noch keine Kosten erfasst.', + 'settings.costDashboard.noModels': 'Keine Modellaktivität in den letzten 7 Tagen.', + 'settings.costDashboard.loading': 'Kosten-Dashboard wird geladen...', + 'settings.costDashboard.disabledHint': + 'Das Kosten-Dashboard ist in der Konfiguration deaktiviert. [cost.dashboard] enabled = true in config.toml auf re-enable setzen.', + 'settings.costDashboard.subtitle': + 'Lebendige Ausgaben und Token brennen über den Schwarm. Leisten werden alle paar Sekunden automatisch aktualisiert — kein Neuladen der Seite erforderlich.', + 'settings.costDashboard.summaryAriaLabel': 'Kostenübersicht Metriken', + 'settings.costDashboard.lastSevenDays': 'letzten 7 Tage', + 'settings.costDashboard.utilizationOf': 'der', + 'settings.costDashboard.thisMonth': 'diesen Monat', + 'settings.costDashboard.monthlyPaceHint': + 'Voraussichtliche monatliche Ausgaben bei der aktuellen täglichen Ausführungsrate (durchschnittlich × 30).', + 'settings.costDashboard.budgetLimitHint': + 'Monatsbudget aus cost.monthly_limit_usd in config.toml gelesen.', + 'settings.costDashboard.dailyTarget': 'Tägliches Ziel', + 'settings.costDashboard.today': 'Heute', + 'settings.costDashboard.todayBadge': 'TODAY', + 'settings.costDashboard.unknownProvider': '—', + 'settings.costDashboard.justNow': 'Gerade jetzt', + 'settings.costDashboard.secondsAgo': 'Vor {value}s', + 'settings.costDashboard.minutesAgo': 'Vor {value}m', + 'settings.costDashboard.hoursAgo': 'Vor {value}h', + 'settings.costDashboard.daysAgo': '{value}d vor', + 'settings.costDashboard.updated': 'Aktualisiert', + 'settings.costDashboard.refresh': 'Aktualisieren', + 'settings.costDashboard.utcNote': 'Tage in UTC', + 'settings.costDashboard.stackedNote': 'Eingang + Ausgang gestapelt', + 'settings.costDashboard.modelBreakdownHint': 'Aggregiert über die letzten 7 Tage.', + 'settings.costDashboard.noDataHint': + 'Senden Sie eine Agentennachricht — Die Tokenverwendung des nächsten Anbieteranrufs füllt das Diagramm innerhalb von ~10 Sekunden aus.', + 'settings.search.title': 'Suchmaschine', + 'settings.search.menuDesc': + 'Verwenden Sie standardmäßig die von OpenHuman verwaltete Suche oder verbinden Sie Ihren eigenen Anbieter mit einem API-Schlüssel.', + 'settings.search.description': + 'Wählen Sie die Suchmaschine, die der Agent verwendet, oder deaktivieren Sie Suchwerkzeuge vollständig. „Verwaltet“ nutzt das Backend von OpenHuman (keine Einrichtung erforderlich). Parallel, Brave und Querit laufen direkt von Ihrem Gerät aus und verwenden Ihren API-Schlüssel.', + 'settings.search.engineAria': 'Suchmaschine', + 'settings.search.engineDisabledLabel': 'Disabled', + 'settings.search.engineDisabledDesc': + 'Suchwerkzeuge aus dem Agenten-Kontext und der verfügbaren Tool-Liste entfernen.', + 'settings.search.engineManagedLabel': 'OpenHuman Verwaltet', + 'settings.search.engineManagedDesc': + 'Standard. Wird über das OpenHuman-Backend weitergeleitet – kein API-Schlüssel erforderlich.', 'settings.search.localManagedUnavailable': 'Die von OpenHuman verwaltete Suche ist für lokale Benutzer nicht verfügbar. Füge deinen eigenen Parallel- oder Brave-API-Schlüssel hinzu, um die Websuche zu aktivieren.', + 'settings.search.engineParallelLabel': 'Parallel', + 'settings.search.engineParallelDesc': + 'Direct Parallel API: Such-, Extrahierungs-, Chat-, Recherche-, Anreicherungs- und Datensatz-Tools.', + 'settings.search.engineBraveLabel': 'Brave Suche', + 'settings.search.engineBraveDesc': + 'Direct Brave Search API: Web-, Nachrichten-, Bild- und Video-Tools.', + 'settings.search.engineQueritLabel': 'Querit', + 'settings.search.engineQueritDesc': + 'Direct Querit API: Websuche mit Standort-, Zeitbereichs-, Länder- und Sprachfiltern.', + 'settings.search.statusConfigured': 'Konfiguriert', + 'settings.search.statusNeedsKey': 'Benötigt API-Schlüssel', + 'settings.search.fallbackToManaged': + 'Kein Schlüssel konfiguriert – die Suche wird auf „Verwaltet“ zurückgesetzt, bis ein Schlüssel gespeichert wird.', + 'settings.search.getApiKey': 'API-Schlüssel abrufen', + 'settings.search.save': 'Speichern', + 'settings.search.clear': 'Löschen', + 'settings.search.show': 'Anzeigen', + 'settings.search.hide': 'Ausblenden', + 'settings.search.statusSaving': 'Speichern…', + 'settings.search.statusSaved': 'Gespeichert.', + 'settings.search.statusError': 'Schlüssel', + 'settings.search.parallelKeyLabel': 'Parallel API fehlgeschlagen', + 'settings.search.braveKeyLabel': 'Brave Suche API Schlüssel', + 'settings.search.queritKeyLabel': 'Fragen Sie den API-Schlüssel ab', + 'settings.search.placeholderStored': '•••••••• (gespeichert)', + 'settings.search.placeholderParallel': 'pk_...', + 'settings.search.placeholderBrave': 'BSA...', + 'settings.search.placeholderQuerit': 'Fragen Sie den API-Schlüssel ab', + 'settings.search.allowedSitesLabel': 'Erlaubte Websites', + 'settings.search.allowedSitesHint': + 'Hosts, die der Assistent öffnen und lesen darf – per Web-Abruf und Browser-Tool – einer pro Zeile, z. B. reuters.com. Ein Host schließt auch seine Subdomains ein. Die Websuche selbst wird durch diese Liste nicht eingeschränkt.', + 'settings.search.allowedSitesAllOn': + 'Der Assistent kann jede öffentliche Website öffnen. Lokale und private Adressen bleiben gesperrt.', + 'settings.search.allowedSitesPlaceholder': 'reuters.com\napnews.com\ngithub.com', + 'settings.search.allowedSitesSave': 'Speichern Sie Websites', + 'settings.search.accessModeAria': 'Webzugriffsmodus', + 'settings.search.accessAllowAll': 'Alles zulassen', + 'settings.search.accessCustom': 'Angepasst', + 'settings.search.accessBlockAll': 'Alle blockieren', + 'settings.search.accessBlockAllHint': + 'Der gesamte Webzugriff ist blockiert – der Assistent kann keine Website öffnen oder lesen.', + 'settings.embeddings.title': 'Einbettungen', + 'settings.embeddings.description': + 'Wählen Sie den Embedding-Anbieter, der Erinnerungen in Vektoren für die semantische Suche umwandelt. Das Ändern des Anbieters, Modells oder der Dimensionen macht gespeicherte Vektoren ungültig und erfordert einen vollständigen Speicher-Reset.', + 'settings.embeddings.providerAria': 'Embedding-Anbieter', + 'settings.embeddings.statusConfigured': 'Konfiguriert', + 'settings.embeddings.statusNeedsKey': 'API-Schlüssel benötigt', + 'settings.embeddings.apiKeyLabel': '{provider} API-Schlüssel', + 'settings.embeddings.placeholderStored': '•••••••• (gespeichert)', + 'settings.embeddings.placeholderKey': 'API-Schlüssel einfügen…', + 'settings.embeddings.keyStoredEncrypted': + 'Ihr API-Schlüssel wird verschlüsselt auf diesem Gerät gespeichert.', + 'settings.embeddings.show': 'Anzeigen', + 'settings.embeddings.hide': 'Verbergen', + 'settings.embeddings.save': 'Speichern', + 'settings.embeddings.clear': 'Löschen', + 'settings.embeddings.model': 'Modell', + 'settings.embeddings.dimensions': 'Dimensionen', + 'settings.embeddings.customEndpoint': 'Benutzerdefinierter Endpunkt', + 'settings.embeddings.customModelPlaceholder': 'Modellname', + 'settings.embeddings.customDimsPlaceholder': 'Dim.', + 'settings.embeddings.applyCustom': 'Anwenden', + 'settings.embeddings.testConnection': 'Verbindung testen', + 'settings.embeddings.testing': 'Wird getestet…', + 'settings.embeddings.testSuccess': 'Verbunden — {dims} Dimensionen', + 'settings.embeddings.testFailed': 'Fehlgeschlagen: {error}', + 'settings.embeddings.saving': 'Wird gespeichert…', + 'settings.embeddings.saved': 'Gespeichert.', + 'settings.embeddings.errorPrefix': 'Fehlgeschlagen', + 'settings.embeddings.wipeTitle': 'Speichervektoren zurücksetzen?', + 'settings.embeddings.wipeBody': + 'Das Ändern des Embedding-Anbieters, Modells oder der Dimensionen löscht alle gespeicherten Speichervektoren. Der Speicher muss neu aufgebaut werden, bevor die Abfrage wieder funktioniert. Dies kann nicht rückgängig gemacht werden.', + 'settings.embeddings.cancel': 'Abbrechen', + 'settings.embeddings.confirmWipe': 'Löschen & anwenden', + 'settings.embeddings.setupTitle': '{provider} einrichten', + 'settings.embeddings.saveAndSwitch': 'Speichern & wechseln', + 'settings.embeddings.optional': 'optional', + 'settings.embeddings.vectorSearchDisabled': + 'Die Vektorsuche ist deaktiviert. Der Speicherabruf verwendet nur Keyword-Matching und Aktualität — kein semantisches Ranking.', + 'settings.embeddings.clearKey': 'API-Schlüssel löschen', + 'pages.settings.ai.embeddings': 'Einbettungen', + 'pages.settings.ai.embeddingsDesc': 'Vektorkodierungsmodell für den Speicherabruf', + 'mcp.alphaBadge': 'Alpha', + 'mcp.alphaBannerText': + 'Die MCP-Serverunterstützung befindet sich in der frühen Alpha-Phase. Die Smithery-Registrierung, der Installationsablauf und die Werkzeugverkabelung können sich zwischen den Versionen falsch verhalten oder ihre Form ändern.', + 'mcp.toolList.noTools': 'Keine Tools verfügbar.', + 'mcp.setup.secretDialog.title': 'MCP-Setup – Geben Sie das Geheimnis ein', + 'mcp.setup.secretDialog.bodyPrefix': 'Der MCP-Setup-Agent benötigt', + 'mcp.setup.secretDialog.bodySuffix': + '. Ihr Wert wird direkt an den Kernprozess gesendet und geht nie in das AI-Gespräch ein.', + 'mcp.setup.secretDialog.inputLabel': 'Wert', + 'mcp.setup.secretDialog.inputPlaceholder': 'Hier einfügen', + 'mcp.setup.secretDialog.show': 'Anzeigen', + 'mcp.setup.secretDialog.hide': 'Ausblenden', + 'mcp.setup.secretDialog.submit': 'Senden', + 'mcp.setup.secretDialog.cancel': 'Abbrechen', + 'mcp.setup.secretDialog.submitting': 'Senden…', + 'mcp.setup.secretDialog.errorPrefix': 'Senden fehlgeschlagen:', + 'mcp.setup.secretDialog.privacyNote': + 'Verschlüsselt in der lokalen MCP-Geheimnistabelle gespeichert. Niemals protokolliert oder an ein Modell gesendet.', + 'devices.betaBadge': 'Beta', + 'devices.betaText': + 'Diese Funktion befindet sich derzeit in der Beta-Phase. Koppele iOS-Geräte mit diesem OpenHuman, um sie als Remote-Client zu verwenden.', 'devices.comingSoonDescription': 'Gerätekopplung kommt bald. Diese Seite wird für das Koppeln von iPhones und die Verwaltung verbundener Geräte zuständig sein.', + 'devices.title': 'Geräte', + 'devices.pairIphone': 'iPhone koppeln', + 'devices.noPaired': 'Keine gekoppelten Geräte', + 'devices.emptyState': + 'Scanne einen QR-Code auf deinem iPhone, um es mit dieser OpenHuman-Sitzung zu verbinden.', + 'devices.devicePairedTitle': 'Gerät gekoppelt.', + 'devices.devicePairedMessage': 'iPhone erfolgreich verbunden.', + 'devices.deviceRevokedTitle': 'Gerät widerrufen', + 'devices.deviceRevokedMessage': '{label} entfernt.', + 'devices.revokeFailedTitle': 'Widerruf fehlgeschlagen', + 'devices.online': 'Online', + 'devices.offline': 'Offline', + 'devices.lastSeenNever': 'Nie', + 'devices.lastSeenNow': 'Gerade jetzt', + 'devices.lastSeenMinutes': 'vor {count}m', + 'devices.lastSeenHours': 'vor {count}h', + 'devices.lastSeenDays': 'vor {count}d', + 'devices.revoke': 'Widerrufen', + 'devices.revokeAria': '{label} widerrufen', + 'devices.confirmRevokeTitle': 'Gerät widerrufen?', + 'devices.confirmRevokeBody': + '{label} kann sich nicht mehr verbinden. Dies kann nicht rückgängig gemacht werden.', + 'devices.loadFailed': 'Geräte konnten nicht geladen werden: {message}', + 'devices.pairModal.title': 'iPhone koppeln', + 'devices.pairModal.loading': 'Kopplungscode wird erzeugt…', + 'devices.pairModal.instructions': + 'Öffne die OpenHuman-App auf deinem iPhone und scanne diesen Code.', + 'devices.pairModal.expiresIn': 'Code läuft in ~{count} Minute ab', + 'devices.pairModal.expiresInPlural': 'Code läuft in ~{count} Minuten ab', + 'devices.pairModal.showDetails': 'Details anzeigen', + 'devices.pairModal.hideDetails': 'Details ausblenden', + 'devices.pairModal.channelId': 'Kanal-ID', + 'devices.pairModal.pairingUrl': 'Kopplung URL', + 'devices.pairModal.expiredTitle': 'QR-Code abgelaufen', + 'devices.pairModal.expiredBody': 'Erzeuge einen neuen Code, um die Kopplung fortzusetzen.', + 'devices.pairModal.generateNewCode': 'Neuen Code erzeugen', + 'devices.pairModal.successTitle': 'iPhone gekoppelt', + 'devices.pairModal.autoClose': 'Wird automatisch geschlossen…', + 'devices.pairModal.errorPrefix': 'Kopplung konnte nicht erstellt werden: {message}', + 'devices.pairModal.errorTitle': 'Etwas ist schiefgelaufen', + 'devices.pairModal.copyUrl': 'Kopieren', + 'mcp.catalog.searchAria': 'Smithery-Katalog durchsuchen', + 'mcp.catalog.searchPlaceholder': 'Smithery-Katalog durchsuchen...', + 'mcp.catalog.loadFailed': 'Katalog konnte nicht geladen werden', + 'mcp.catalog.noResults': 'Keine Server gefunden.', + 'mcp.catalog.noResultsFor': 'Keine Server für „{query}“ gefunden.', + 'mcp.catalog.loadMore': 'Mehr laden', + 'mcp.configAssistant.title': 'Konfigurationsassistent', + 'mcp.configAssistant.empty': + 'Fragen Sie nach Konfiguration, erforderlichen Umgebungsvariablen oder Einrichtungsschritten.', + 'mcp.configAssistant.suggestedValues': 'Vorgeschlagene Werte:', + 'mcp.configAssistant.valueHidden': '(Wert ausgeblendet)', + 'mcp.configAssistant.applySuggested': 'Vorgeschlagene Werte anwenden', + 'mcp.configAssistant.reinstallHint': 'Neuinstallation mit diesen Werten, um sie anzuwenden.', + 'mcp.configAssistant.thinking': 'Nachdenken...', + 'mcp.configAssistant.inputPlaceholder': + 'Stellen Sie eine Frage (Eingabetaste zum Senden, Umschalt+Eingabetaste für Zeilenumbruch)', + 'mcp.configAssistant.send': 'Senden', + 'mcp.configAssistant.failedResponse': 'Es konnte keine Antwort erhalten werden', + 'mcp.toolList.availableSingular': '{count} Tool verfügbar', + 'mcp.toolList.availablePlural': '{count} Tools verfügbar', + 'mcp.toolList.tryTool': 'Versuchen', + 'mcp.toolList.tryToolAria': 'Ausführungsspielplatz für {name} öffnen', + 'mcp.playground.title': 'Führen Sie {name} aus', + 'mcp.playground.close': 'Naher Spielplatz', + 'mcp.playground.inputSchema': 'Eingabeschema', + 'mcp.playground.argsLabel': 'Argumente (JSON)', + 'mcp.playground.argsHelp': + 'Geben Sie JSON entsprechend dem Eingabeschema ein. Leere Eingaben werden als {} behandelt.', + 'mcp.playground.runShortcut': '⌘/Strg + Eingabetaste zum Ausführen', + 'mcp.playground.format': 'Format', + 'mcp.playground.invalidJson': 'Ungültiger JSON', + 'mcp.playground.run': 'Werkzeug ausführen', + 'mcp.playground.running': 'Läuft…', + 'mcp.playground.result': 'Ergebnis', + 'mcp.playground.resultError': 'Das Tool hat einen Fehler zurückgegeben', + 'mcp.playground.copyResult': 'Ergebnis kopieren', + 'mcp.playground.copied': 'Kopiert', + 'mcp.playground.history': 'Geschichte', + 'mcp.playground.historyEmpty': 'Noch keine Aufrufe in dieser Sitzung.', + 'mcp.playground.historyLoad': 'Laden', + 'mcp.playground.unexpectedError': 'Unerwarteter Fehler beim Aufrufen des Tools.', + 'mcp.catalog.deployed': 'Bereitgestellt', + 'mcp.catalog.installCount': '{count} installiert', + 'app.update.dismissNotification': 'Update-Benachrichtigung verwerfen', + 'bootCheck.rpcAuthSuffix': 'bei jedem RPC.', + 'app.localAiDownload.expandAria': 'Download-Fortschritt erweitern', + 'app.localAiDownload.collapseAria': 'Download-Fortschritt reduzieren', + 'app.localAiDownload.dismissAria': 'Download-Benachrichtigung verwerfen', + 'mobile.nav.ariaLabel': 'Mobile Navigation', + 'progress.stepsAria': 'Fortschrittsschritte', + 'progress.stepAria': 'Schritt {current} von {total}', + 'workspace.vaultsTitle': 'Wissensdepots', + 'workspace.vaultsDesc': + 'Zeigen Sie auf einen lokalen Ordner; Dateien werden aufgeteilt und in den Speicher gespiegelt.', + 'calls.title': 'Anrufe', + 'calls.comingSoonBody': 'KI-gestützte Anrufe folgen bald. Bleiben Sie dran.', + 'art.rotatingTetrahedronAria': 'Rotierendes umgekehrtes Tetraeder-Raumschiff', + 'mcp.installed.title': 'Installiert', + 'mcp.installed.browseCatalog': 'Katalog durchsuchen', + 'mcp.installed.empty': 'Noch keine MCP-Server installiert.', + 'mcp.installed.toolSingular': '{count}-Tool', + 'mcp.installed.toolPlural': '{count}-Tools', + 'mcp.health.title': 'Gesundheit', + 'mcp.health.summaryAria': 'Zusammenfassung des MCP-Verbindungszustands', + 'mcp.health.connectedCount': '{count} verbunden', + 'mcp.health.connectingCount': '{count} verbinden', + 'mcp.health.errorCount': '{count}-Fehler', + 'mcp.health.disconnectedCount': '{count} im Leerlauf', + 'mcp.health.retryAll': 'Alles erneut versuchen ({count})', + 'mcp.health.retryAllAria': + 'Versuchen Sie es erneut mit allen {count}-Fehlern auf den MCP-Servern', + 'mcp.health.disconnectAll': 'Alle trennen ({count})', + 'mcp.health.disconnectAllAria': 'Trennen Sie alle mit {count} verbundenen MCP-Server', + 'mcp.health.disconnectConfirm.title': 'Alle MCP-Server trennen?', + 'mcp.health.disconnectConfirm.body': + 'Dadurch werden {count} aktuell verbundene MCP-Server getrennt. Installierte Konfigurationen und Geheimnisse bleiben erhalten; Sie können jeden Server später wieder verbinden.', + 'mcp.health.disconnectConfirm.cancel': 'Stornieren', + 'mcp.health.disconnectConfirm.confirm': 'Trennen Sie alle', + 'mcp.health.opErrorGeneric': 'Der Massenvorgang ist fehlgeschlagen. Siehe Protokolle.', + 'mcp.health.bulkPartialFailure': '{failed} von {total} Servern fehlgeschlagen. Siehe Protokolle.', + 'mcp.installed.search.landmarkAria': 'Durchsuchen Sie installierte MCP-Server', + 'mcp.installed.search.inputAria': 'Filtern Sie installierte MCP-Server nach Namen', + 'mcp.installed.search.placeholder': 'Server filtern…', + 'mcp.installed.search.clearAria': 'Filter löschen', + 'mcp.installed.search.countMatches': '{shown} von {total}-Servern', + 'mcp.installed.search.noMatches': 'Kein Server entspricht „{query}“.', + 'mcp.inventory.openButton': 'Inventar', + 'mcp.inventory.openAria': 'Öffnen Sie das gemeinsam nutzbare MCP-Inventarfenster', + 'mcp.inventory.title': 'Gemeinsam nutzbares MCP-Inventar', + 'mcp.inventory.subtitle': + 'Exportieren Sie Ihre installierten MCP-Server als tragbares, geheimnisfreies Manifest oder importieren Sie eines von einem Teamkollegen. Geheime Umgebungswerte werden niemals einbezogen oder importiert.', + 'mcp.inventory.close': 'Inventarfenster schließen', + 'mcp.inventory.tablistAria': 'Inventarabschnitte', + 'mcp.inventory.tab.export': 'Export', + 'mcp.inventory.tab.import': 'Import', + 'mcp.inventory.export.empty': + 'Noch sind keine MCP-Server installiert – nichts zum Exportieren. Installieren Sie zuerst eines aus dem Katalog.', + 'mcp.inventory.export.privacyTitle': 'Was in diesem Manifest steht', + 'mcp.inventory.export.privacyBody': + 'Servernamen, qualifizierte Namen, SCHLÜSSELNAMEN der Umgebungsvariablen und nur nicht geheime Konfigurationen. Geheime Werte, Ihre Maschinenkennungen und Zeitstempel pro Installation werden absichtlich entfernt.', + 'mcp.inventory.export.serverCount': '{count}-Server in diesem Manifest', + 'mcp.inventory.export.copy': 'Kopie', + 'mcp.inventory.export.copied': 'Kopiert', + 'mcp.inventory.export.copyAria': 'Kopieren Sie das Manifest JSON in die Zwischenablage', + 'mcp.inventory.export.download': 'Herunterladen', + 'mcp.inventory.export.downloadAria': 'Laden Sie das Manifest als JSON-Datei herunter', + 'mcp.inventory.import.trustTitle': + 'Behandeln Sie importierte Manifeste als nicht vertrauenswürdigen Code', + 'mcp.inventory.import.trustBody': + 'Ein MCP-Server ist ein Tool, das Sie Ihrem Agenten zur Verfügung stellen. Importieren Sie Manifeste nur aus Quellen, denen Sie vertrauen. Für jede Installation ist Ihr ausdrücklicher Klick erforderlich. nichts wird automatisch installiert.', + 'mcp.inventory.import.pasteLabel': 'Fügen Sie das Manifest JSON ein', + 'mcp.inventory.import.pastePlaceholder': + 'Fügen Sie hier ein Manifest ein oder laden Sie unten eine.json-Datei hoch.', + 'mcp.inventory.import.preview': 'Vorschau', + 'mcp.inventory.import.clear': 'Klar', + 'mcp.inventory.import.uploadFile': 'oder laden Sie eine.json-Datei hoch', + 'mcp.inventory.import.uploadFileAria': 'Laden Sie eine Manifest-JSON-Datei hoch', + 'mcp.inventory.import.fileTooLarge': 'Datei ist zu groß (über 1 MB). Verweigert das Laden.', + 'mcp.inventory.import.fileReadFailed': 'Datei konnte nicht gelesen werden.', + 'mcp.inventory.import.parseErrorPrefix': 'Manifest konnte nicht analysiert werden:', + 'mcp.inventory.import.previewHeading': 'Vorschau', + 'mcp.inventory.import.previewCounts': + '{total}-Server – {newly} neu, {already} bereits installiert', + 'mcp.inventory.import.previewEmpty': 'Manifest enthält keine Server.', + 'mcp.inventory.import.exportedFrom': 'Exportiert aus {exporter}', + 'mcp.inventory.import.exportedAt': 'bei {when}', + 'mcp.inventory.import.statusNew': 'Neu', + 'mcp.inventory.import.statusAlreadyInstalled': 'Bereits installiert', + 'mcp.inventory.import.envKeysLabel': 'Env-Schlüssel', + 'mcp.inventory.import.install': 'Installieren', + 'mcp.inventory.import.installAria': 'Installieren Sie {name} von diesem Manifest', + 'mcp.inventory.import.skipped': 'skipped', + 'mcp.inventory.parseError.empty': 'Manifest ist leer.', + 'mcp.inventory.parseError.invalidJson': 'Ungültiger JSON.', + 'mcp.inventory.parseError.rootNotObject': + 'Das Manifest muss ein JSON-Objekt im Stammverzeichnis sein.', + 'mcp.inventory.parseError.unsupportedSchema': + 'Nicht unterstütztes Manifestschema – diese Datei wurde nicht von einem kompatiblen Exporter erstellt.', + 'mcp.inventory.parseError.missingExportedAt': 'Fehlendes oder ungültiges `exported_at`-Feld.', + 'mcp.inventory.parseError.missingExportedBy': 'Fehlendes oder ungültiges `exported_by`-Feld.', + 'mcp.inventory.parseError.invalidServers': 'Fehlendes oder ungültiges `servers`-Array.', + 'mcp.inventory.parseError.serverNotObject': 'Ein Servereintrag ist kein Objekt.', + 'mcp.inventory.parseError.serverMissingQualifiedName': + 'Einem Servereintrag fehlt der qualifizierte Name.', + 'mcp.inventory.parseError.serverMissingDisplayName': 'Einem Servereintrag fehlt der Anzeigename.', + 'mcp.inventory.parseError.serverEnvKeysNotArray': + 'Ein Servereintrag verfügt über ein env_keys-Feld, das kein Array von Zeichenfolgen ist.', + 'mcp.inventory.parseError.serverContainsEnv': + 'Ein Servereintrag enthält eine `env`-Wertzuordnung. Den Import verweigern – Manifeste dürfen nur env_keys (Namen) enthalten, niemals geheime Werte.', + 'mcp.inventory.parseError.duplicateQualifiedName': + 'Doppelter qualifizierter Name im Manifest gefunden. Jeder Server darf höchstens einmal vorkommen.', + 'mcp.tab.loading': 'MCP-Server werden geladen...', + 'mcp.tab.emptyDetail': 'Wählen Sie einen Server aus oder durchsuchen Sie den Katalog.', + 'mcp.install.loadingDetail': 'Serverdetails werden geladen...', + 'mcp.install.back': 'Zurück', + 'mcp.install.title': 'Installieren Sie {name}', + 'mcp.install.requiredEnv': 'Erforderliche Umgebungsvariablen', + 'mcp.install.enterValue': 'Geben Sie {key} ein', + 'mcp.install.show': 'Zeigen', + 'mcp.install.hide': 'Ausblenden', + 'mcp.install.configLabel': 'Config (optionales JSON)', + 'mcp.install.configPlaceholder': '{"Schlüssel": "Wert"}', + 'mcp.install.missingRequired': '„{key}“ ist erforderlich', + 'mcp.install.invalidJson': 'Konfigurations-JSON ist ungültig. JSON', + 'mcp.install.failedDetail': 'Fehler beim Laden der Serverdetails', + 'mcp.install.failedInstall': 'Installation fehlgeschlagen', + 'mcp.install.button': 'Installation', + 'mcp.install.installing': 'Installation...', + 'mcp.detail.suggestedEnvReady': 'Vorgeschlagene Umgebungswerte bereit', + 'mcp.detail.suggestedEnvBody': + 'Installieren Sie diesen Server mit den vorgeschlagenen Werten neu, um sie anzuwenden: {keys}', + 'mcp.detail.connect': 'Verbinden', + 'mcp.detail.connecting': 'Verbinden ...', + 'mcp.detail.disconnect': 'Trennen', + 'mcp.detail.hideAssistant': 'Ausblenden Assistent', + 'mcp.detail.helpConfigure': 'Helfen Sie mir bei der Konfiguration', + 'mcp.detail.confirmUninstall': 'Deinstallation bestätigen?', + 'mcp.detail.confirmUninstallAction': 'Ja, deinstallieren', + 'mcp.detail.uninstall': 'Deinstallieren', + 'mcp.detail.envVars': 'Umgebungsvariablen', + 'mcp.detail.tools': 'Werkzeuge', + 'onboarding.skipForNow': 'Vorerst überspringen', + 'onboarding.localAI.continueWithCloud': 'Fahren Sie mit der Cloud fort.', + 'onboarding.localAI.useLocalAnyway': + 'Trotzdem lokale KI verwenden (für dieses Gerät nicht empfohlen)', + 'onboarding.localAI.useLocalInstead': 'Stattdessen lokale KI verwenden (Ollama jetzt verbinden)', + 'onboarding.localAI.setupIssue': 'Beim Einrichten der lokalen KI ist ein Problem aufgetreten.', + 'autonomy.title': 'Agentenautonomie', + 'autonomy.maxActionsLabel': 'Maximale Aktionen pro Stunde', + 'autonomy.maxActionsHelp': + 'Maximale Anzahl von Tool-Aktionen, die ein Agent pro rollierender Stunde ausführen darf. Der neue Wert gilt ab dem nächsten Chat. Cron-Jobs und Kanal-Listener behalten ihr aktuelles Limit, bis OpenHuman neu gestartet wird.', + 'autonomy.statusSaving': 'Wird gespeichert…', + 'autonomy.statusSaved': 'Gespeichert.', + 'autonomy.statusFailed': 'Fehlgeschlagen', + 'autonomy.unlimitedNote': 'Unbegrenzt – Ratenbegrenzung deaktiviert.', + 'autonomy.invalidIntegerMsg': + "Muss eine positive ganze Zahl sein (für kein Limit das Preset 'Unbegrenzt' verwenden).", + 'autonomy.presetUnlimited': 'Unbegrenzt (Standard)', + 'triggers.toggleFailed': '{action} fehlgeschlagen für {trigger}: {message}', + 'settings.ai.overview': 'Übersicht über das KI-System', + 'settings.ai.configStatus': 'Konfigurationsstatus', + 'settings.ai.fallbackMode': 'Fallback-Modus', + 'settings.ai.loadedFromRuntime': 'Aus Runtime geladen', + 'settings.ai.loadingDuration': 'Ladedauer', + 'settings.ai.localRuntime': 'Lokale Modelllaufzeit', + 'settings.ai.openManager': 'Öffne den Manager', + 'settings.ai.retryDownload': 'Versuche den Download erneut', + 'settings.ai.state': 'Staat', + 'settings.ai.targetModel': 'Zielmodell', + 'settings.ai.download': 'Herunterladen', + 'settings.ai.localModelUnavailable': 'Lokaler Modellstatus nicht verfügbar.', + 'settings.ai.soulConfig': 'SOUL Persona-Konfiguration', + 'settings.ai.refreshing': 'Erfrischend...', + 'settings.ai.refreshSoul': 'SOUL aktualisieren', + 'settings.ai.loadingSoul': 'SOUL-Konfiguration wird geladen...', + 'settings.ai.identity': 'Identität', + 'settings.ai.personality': 'Persönlichkeit', + 'settings.ai.safetyRules': 'Sicherheitsregeln', + 'settings.ai.source': 'Quelle', + 'settings.ai.loaded': 'Geladen', + 'settings.ai.toolsConfig': 'TOOLS Konfiguration', + 'settings.ai.refreshTools': 'TOOLS aktualisieren', + 'settings.ai.toolsAvailable': 'Verfügbare Werkzeuge', + 'settings.ai.tools': 'Werkzeuge', + 'settings.ai.activeSkills': 'Aktive Fähigkeiten', + 'settings.ai.skills': 'Fähigkeiten', + 'settings.ai.skillsOverview': 'Überblick über die Fähigkeiten', + 'settings.ai.refreshingAll': 'Alles erfrischen...', + 'settings.ai.refreshAll': 'Aktualisiere alle AI-Konfigurationen', + 'settings.notifications.suppressAll': 'Alle Benachrichtigungen unterdrücken', + 'settings.notifications.suppressAllDesc': + 'Blockiere alle Betriebssystem-Benachrichtigungs-Toasts von eingebetteten Apps, unabhängig vom Fokusstatus.', + 'settings.notifications.toggleDnd': 'Schalte „Bitte nicht stören“ um', + 'settings.notifications.categories': 'Kategorien', + 'settings.notifications.categoryFooter': + 'Durch das Deaktivieren einer Kategorie wird verhindert, dass neue Benachrichtigungen dieses Typs im Benachrichtigungscenter angezeigt werden. Vorhandene Benachrichtigungen bleiben bestehen, bis sie gelöscht werden.', + 'settings.billing.movedToWeb': 'Die Abrechnung wurde ins Internet verlagert', + 'settings.billing.openDashboard': 'Abrechnungs-Dashboard öffnen', + 'settings.billing.movedToWebDesc': + 'Abonnementänderungen, Zahlungsmethoden, Gutschriften und Rechnungen werden jetzt bei TinyHumans im Internet verwaltet.', + 'settings.billing.backToSettings': 'Zurück zu den Einstellungen', + 'settings.billing.openingBrowser': 'Öffne deinen Browser...', + 'settings.billing.browserNotOpen': + 'Wenn dein Browser nicht geöffnet wurde, verwende die Schaltfläche oben.', + 'settings.billing.browserOpenFailed': + 'Der Browser konnte nicht automatisch geöffnet werden. Nutze den Button oben.', + 'settings.tools.chooseCapabilities': + 'Wähle aus, welche Funktionen OpenHuman in deinem Namen nutzen kann.', + 'settings.tools.saveChanges': 'Änderungen speichern', + 'settings.tools.preferencesSaved': 'Einstellungen gespeichert', + 'settings.tools.saveFailed': + 'Einstellungen konnten nicht gespeichert werden. Versuche es erneut.', + 'settings.screenAwareness.mode': 'Modus', + 'settings.screenAwareness.allExceptBlacklist': 'Alle außer Blacklist', + 'settings.screenAwareness.whitelistOnly': 'Nur Whitelist', + 'settings.screenAwareness.screenMonitoring': 'Bildschirmüberwachung', + 'settings.screenAwareness.saveSettings': 'Einstellungen speichern', + 'settings.screenAwareness.session': 'Sitzung', + 'settings.screenAwareness.status': 'Status', + 'settings.screenAwareness.active': 'Aktiv', + 'settings.screenAwareness.stopped': 'Angehalten', + 'settings.screenAwareness.remaining': 'Übrig', + 'settings.screenAwareness.startSession': 'Sitzung starten', + 'settings.screenAwareness.stopSession': 'Sitzung beenden', + 'settings.screenAwareness.analyzeNow': 'Jetzt analysieren', + 'settings.screenAwareness.macosOnly': + 'Die Desktop-Erfassung und Berechtigungssteuerung von Screen Awareness wird derzeit nur auf macOS unterstützt.', + 'connections.comingSoon': 'Kommt bald', + 'connections.setUp': 'Einrichten', + 'connections.configured': 'Konfiguriert', + 'connections.unavailable': 'Nicht verfügbar', + 'connections.checking': 'Überprüfen…', + 'connections.walletConfigured': + 'Lokale EVM-, BTC-, Solana- und Tron-Identitäten werden anhand deiner Wiederherstellungsphrase konfiguriert.', + 'connections.walletReady': + 'Richte lokale EVM-, BTC-, Solana- und Tron-Identitäten aus einer Wiederherstellungsphrase ein.', + 'connections.walletError': + 'Der Wallet-Status konnte nicht überprüft werden. Tippe im Bedienfeld „Wiederherstellungsphrase“ auf , um es noch einmal zu versuchen.', + 'connections.walletChecking': 'Wallet-Status wird überprüft...', + 'connections.walletIdentities': 'Wallet-Identitäten', + 'connections.walletDerived': + 'Wird lokal von deiner Wiederherstellungsphrase abgeleitet und nur als sichere Metadaten gespeichert.', + 'connections.privacySecurity': 'Datenschutz und Sicherheit', + 'connections.privacySecurityDesc': + 'Alle Daten und Anmeldeinformationen werden lokal mit einer Null-Datenaufbewahrungsrichtlinie gespeichert. Deine Daten werden verschlüsselt und niemals an Dritte weitergegeben.', + 'channels.status.connecting': 'Verbinden', + 'channels.status.notConfigured': 'Nicht konfiguriert', + 'channels.noActiveRoute': 'Keine aktive Route', + 'channels.activeRoute': 'Aktive Route', + 'channels.loadingDefinitions': 'Kanaldefinitionen werden geladen...', + 'channels.channelConnections': 'Kanalverbindungen', + 'channels.configureAuthModes': 'Konfiguriere Authentifizierungsmodi für jeden Nachrichtenkanal.', + 'channels.configNotAvailable': 'Konfiguration für', + 'channels.channel': 'Kanal', + 'devOptions.coreModeNotSet': 'Kernmodus: nicht eingestellt', + 'devOptions.coreModeNotSetDesc': + 'Der Boot-Check-Picker wurde noch nicht bestätigt. Verwende den Umschaltmodus in der Auswahl, um „Lokal“ oder „Cloud“ auszuwählen.', + 'devOptions.local': 'Lokal', + 'devOptions.embeddedCoreSidecar': 'Eingebetteter Core-Sidecar', + 'devOptions.sidecarSpawned': 'Wird prozessintern von der Tauri-Shell beim App-Start erzeugt.', + 'devOptions.cloud': 'Wolke', + 'devOptions.remoteCoreRpc': 'Remote-Kern RPC', + 'devOptions.token': 'Token', + 'devOptions.tokenNotSet': 'nicht gesetzt – RPC wird 401', + 'devOptions.triggerSentryTest': 'Trigger Sentry Test (Staging)', + 'devOptions.triggerSentryTestDesc': + 'Löst einen getaggten Fehler aus, um die Sentry-Pipeline zu überprüfen. Problem Nr. 1072 – nach Überprüfung entfernen.', + 'devOptions.sendTestEvent': 'Testereignis senden', + 'devOptions.sending': 'Senden…', + 'devOptions.eventSent': 'Ereignis gesendet', + 'devOptions.sentryDisabled': '(keine ID – Sentry in diesem Build deaktiviert)', + 'devOptions.failed': 'Fehlgeschlagen', + 'devOptions.appLogs': 'App-Protokolle', + 'devOptions.appLogsDesc': + 'Öffne den Ordner mit den fortlaufenden täglichen Protokolldateien. Hänge die aktuellste Datei an, wenn du ein Problem meldest.', + 'devOptions.openLogsFolder': 'Öffne den Protokollordner', + 'mnemonic.phraseSaved': 'Wiederherstellungsphrase gespeichert', + 'mnemonic.walletReady': + 'Multi-Chain-Wallet-Identitäten sind bereit. Zurück zu den Einstellungen...', + 'mnemonic.writeDownWords': 'Schreibe diese auf', + 'mnemonic.wordsInOrder': + 'Sortiere die Wörter in der richtigen Reihenfolge und bewahre sie an einem sicheren Ort auf. Dieser Satz sichert deinen lokalen Verschlüsselungsschlüssel und deine EVM-, BTC-, Solana- und Tron-Wallet-Identitäten.', + 'mnemonic.cannotRecover': + 'Dieser Satz kann bei Verlust niemals wiederhergestellt werden und sollte vollständig lokal auf deinem Gerät bleiben.', + 'mnemonic.copyToClipboard': 'In die Zwischenablage kopieren', + 'mnemonic.alreadyHavePhrase': 'Ich habe bereits einen Wiederherstellungssatz', + 'mnemonic.consentSaved': + 'Ich habe diesen Satz gespeichert und bin damit einverstanden, ihn für die lokale Wallet-Einrichtung zu verwenden', + 'mnemonic.enterPhraseToRestore': + 'Gib unten deine Wiederherstellungsphrase ein, um deine lokalen Wallet-Identitäten wiederherzustellen, oder füge die vollständige Phrase in ein beliebiges Feld ein (12 Wörter für neue Backups; 24-Wort-Phrasen aus älteren Versionen funktionieren weiterhin).', + 'mnemonic.words': 'Worte', + 'mnemonic.validPhrase': 'Gültige Wiederherstellungsphrase', + 'mnemonic.generateNewPhrase': 'Generiere stattdessen eine neue Wiederherstellungsphrase', + 'mnemonic.securingData': 'Sicherung deiner Daten...', + 'mnemonic.saveRecoveryPhrase': 'Speichere die Wiederherstellungsphrase', + 'mnemonic.userNotLoaded': + 'Benutzer nicht geladen. Bitte melde dich erneut an oder aktualisiere die Seite.', + 'mnemonic.invalidPhrase': + 'Ungültige Wiederherstellungsphrase. Bitte prüfe deine Wörter und versuche es erneut.', + 'mnemonic.somethingWentWrong': 'Etwas ist schief gelaufen. Bitte versuche es erneut.', + 'team.failedToCreate': 'Team konnte nicht erstellt werden', + 'team.invalidInviteCode': 'Ungültiger oder abgelaufener Einladungscode', + 'team.failedToSwitch': 'Teamwechsel fehlgeschlagen', + 'team.failedToLeave': 'Das Team konnte nicht verlassen werden', + 'team.role.owner': 'Besitzer', + 'team.role.admin': 'Admin', + 'team.role.billingManager': 'Rechnungsmanager', + 'team.role.member': 'Mitglied', + 'team.active': 'Aktiv', + 'team.personalTeam': 'Persönliches Team', + 'team.manageTeam': 'Team verwalten', + 'team.switching': 'Wechsel...', + 'team.switch': 'Wechseln', + 'team.leaving': 'Verlassen...', + 'team.leave': 'Geh', + 'team.yourTeams': 'Deine Teams', + 'team.createNewTeam': 'Neues Team erstellen', + 'team.teamName': 'Teamname', + 'team.creating': 'Erstellen...', + 'team.joinExistingTeam': 'Tritt einem bestehenden Team bei', + 'team.inviteCode': 'Einladungscode', + 'team.joining': 'Beitritt...', + 'team.join': 'Mach mit', + 'team.leaveTeam': 'Verlasse das Team', + 'team.confirmLeave': 'Bist du sicher, dass du gehen möchtest?', + 'team.leaveWarning': + 'Du verlierst den Zugriff auf das Team und alle Teamressourcen. Du brauchst eine neue Einladung, um wieder beizutreten.', + 'team.management': 'Teammanagement', + 'team.notFound': 'Team nicht gefunden', + 'team.accessDenied': 'Zugriff verweigert', + 'team.members': 'Mitglieder', + 'team.membersDesc': 'Teammitglieder und Rollen verwalten', + 'team.invites': 'Einladungen', + 'team.invitesDesc': 'Einladungscodes generieren und verwalten', + 'team.settings': 'Teameinstellungen', + 'team.settingsDesc': 'Teamnamen und -einstellungen bearbeiten', + 'team.editSettings': 'Teameinstellungen bearbeiten', + 'team.enterName': 'Teamnamen eingeben', + 'team.saving': 'Speichern...', + 'team.saveChanges': 'Speichern Änderungen', + 'team.delete': 'Team löschen', + 'team.deleteDesc': 'Dieses Team dauerhaft löschen', + 'team.deleting': 'Löschen...', + 'team.failedToUpdate': 'Team konnte nicht aktualisiert werden', + 'team.failedToDelete': 'Team konnte nicht gelöscht werden', + 'team.manageTitle': '{name} verwalten', + 'team.planCreated': '{plan} Plan • Erstellt {date}', + 'team.confirmDelete': 'Sind Sie sicher, dass Sie {name} löschen möchten?', + 'team.deleteWarning': + 'Diese Aktion kann nicht rückgängig gemacht werden. Alle Teamdaten werden dauerhaft gelöscht.', + 'voice.title': 'Sprachdiktat', + 'voice.settings': 'Spracheinstellungen', + 'voice.settingsDesc': + 'Halte den Hotkey gedrückt, um zu diktieren und Text in das aktive Feld einzufügen.', + 'voice.hotkey': 'Hotkey', + 'voice.activationMode': 'Aktivierungsmodus', + 'voice.tapToToggle': 'Zum Umschalten tippen', + 'voice.writingStyle': 'Schreibstil', + 'voice.verbatimTranscription': 'Wörtliche Transkription', + 'voice.naturalCleanup': 'Natürliche Reinigung', + 'voice.autoStart': 'Sprachserver automatisch mit dem Core starten', + 'voice.customDictionary': 'Benutzerdefiniertes Wörterbuch', + 'voice.customDictionaryDesc': + 'Füge Namen, Fachbegriffe und Domänenwörter hinzu, um die Erkennungsgenauigkeit zu verbessern.', + 'voice.addWord': 'Füge ein Wort hinzu...', + 'voice.sttDisabled': + 'Das Sprachdiktieren ist deaktiviert, bis das lokale STT-Modell heruntergeladen und bereit ist.', + 'voice.openLocalAiModel': 'Öffne das lokale KI-Modell', + 'voice.serverRestarted': 'Der Sprachserver wurde mit den neuen Einstellungen neu gestartet.', + 'voice.settingsSaved': 'Spracheinstellungen gespeichert.', + 'voice.serverStarted': 'Sprachserver gestartet.', + 'voice.serverStopped': 'Sprachserver gestoppt.', + 'voice.saveVoiceSettings': 'Spracheinstellungen speichern', + 'voice.startVoiceServer': 'Starte den Sprachserver', + 'voice.stopVoiceServer': 'Sprachserver stoppen', + 'voice.debugTitle': 'Sprach-Debug', + 'voice.failedToLoadSettings': 'Spracheinstellungen konnten nicht geladen werden', + 'voice.failedToSaveSettings': 'Spracheinstellungen konnten nicht gespeichert werden.', + 'voice.failedToStartServer': 'Sprachserver konnte nicht gestartet werden.', + 'voice.failedToStopServer': 'Sprachserver konnte nicht gestoppt werden.', + 'voice.sttDisabledPrefix': + 'Spracheingabe ist deaktiviert, bis das lokale STT-Modell heruntergeladen wurde. Verwende die', + 'voice.sttDisabledSuffix': 'oben, um Whisper zu installieren.', + 'voice.debug.failedToLoadVoiceDebugData': 'Sprach-Debug-Daten konnten nicht geladen werden.', + 'voice.debug.settingsSaved': 'Debug-Einstellungen gespeichert.', + 'voice.debug.failedToSaveSettings': 'Spracheinstellungen konnten nicht gespeichert werden.', + 'voice.debug.runtimeStatus': 'Laufzeitstatus', + 'voice.debug.runtimeStatusDesc': + 'Live-Diagnose für den Sprach-Server und die Sprache-zu-Text-Engine.', + 'voice.debug.server': 'Server', + 'voice.debug.unavailable': 'Nicht verfügbar', + 'voice.debug.ready': 'Bereit', + 'voice.debug.notReady': 'Nicht bereit', + 'voice.debug.hotkey': 'Hotkey', + 'voice.debug.notAvailable': 'n/a', + 'voice.debug.mode': 'Modus', + 'voice.debug.transcriptions': 'Transkriptionen', + 'voice.debug.serverError': 'Serverfehler', + 'voice.debug.advancedSettings': 'Erweiterte Einstellungen', + 'voice.debug.advancedSettingsDesc': + 'Niederrangige Abstimmungsparameter für Aufnahme und Stille-Erkennung.', + 'voice.debug.minimumRecordingSeconds': 'Mindestaufzeichnungssekunden', + 'voice.debug.silenceThreshold': 'Ruheschwelle (RMS)', + 'voice.debug.silenceThresholdDesc': + 'Aufnahmen mit Energie unterhalb dieses Wertes werden als Stille behandelt und übersprungen. Niedriger = empfindlicher.', + 'voice.providers.saved': 'Sprachanbieter gespeichert.', + 'voice.providers.failedToSave': 'Sprachanbieter konnten nicht gespeichert werden.', + 'voice.providers.ellipsis': '…', + 'voice.providers.installing': 'Installiere', + 'voice.providers.installingBusy': 'Installiere…', + 'voice.providers.reinstallLocally': 'Lokal neu installieren', + 'voice.providers.repair': 'Reparieren', + 'voice.providers.retryLocally': 'Lokal erneut versuchen', + 'voice.providers.installLocally': 'Lokal installieren', + 'voice.providers.whisperReady': 'Whisper ist bereit.', + 'voice.providers.whisperInstallStarted': 'Whisper-Installation gestartet', + 'voice.providers.queued': 'in der Warteschlange', + 'voice.providers.failedToInstallWhisper': 'Installation von Whisper fehlgeschlagen', + 'voice.providers.piperReady': 'Piper ist bereit.', + 'voice.providers.piperInstallStarted': 'Piper-Installation gestartet', + 'voice.providers.failedToInstallPiper': 'Installation von Piper fehlgeschlagen', + 'voice.providers.title': 'Sprachanbieter', + 'voice.providers.desc': + "Wähle, wo Transkription und Synthese ausgeführt werden. Mit den Schaltflächen 'Lokal installieren' werden die Binärdateien und Modelle in den Arbeitsbereich geladen. Lokale Anbieter können vor Abschluss der Installation gespeichert werden – keine manuelle WHISPER_BIN- oder PIPER_BIN-Konfiguration erforderlich.", + 'voice.providers.sttProvider': 'Speech-to-Text-Anbieter', + 'voice.providers.sttProviderAria': 'STT-Anbieter', + 'voice.providers.cloudWhisperProxy': 'Cloud (Whisper-Proxy)', + 'voice.providers.localWhisper': 'Lokales Whisper', + 'voice.providers.installRequired': '(Installation erforderlich)', + 'voice.providers.whisperInstalledTitle': 'Whisper ist installiert. Klicken zum Neuinstallieren.', + 'voice.providers.whisperDownloadTitle': + 'whisper.cpp und das GGML-Modell in den Arbeitsbereich herunterladen.', + 'voice.providers.installed': 'Installiert', + 'voice.providers.installFailed': 'Installation fehlgeschlagen', + 'voice.providers.notInstalled': 'Nicht installiert', + 'voice.providers.whisperModel': 'Whisper-Modell', + 'voice.providers.whisperModelAria': 'Whisper-Modell', + 'voice.providers.whisperModelTiny': 'Tiny (39 MB, am schnellsten)', + 'voice.providers.whisperModelBase': 'Basis (74 MB)', + 'voice.providers.whisperModelSmall': 'Klein (244 MB)', + 'voice.providers.whisperModelMedium': 'Mittel (769 MB, empfohlen)', + 'voice.providers.whisperModelLargeTurbo': 'Groß v3 Turbo (1,5 GB, beste Genauigkeit)', + 'voice.providers.ttsProvider': 'Text-to-Speech-Anbieter', + 'voice.providers.ttsProviderAria': 'TTS-Anbieter', + 'voice.providers.cloudElevenLabsProxy': 'Cloud (ElevenLabs-Proxy)', + 'voice.providers.localPiper': 'Lokaler Piper', + 'voice.providers.piperInstalledTitle': 'Piper ist installiert. Klicken zum Neuinstallieren.', + 'voice.providers.piperDownloadTitle': + 'Piper und die enthaltene Stimme en_US-lessac-medium in den Arbeitsbereich herunterladen.', + 'voice.providers.piperVoice': 'Piper-Stimme', + 'voice.providers.piperVoiceAria': 'Piper Voice', + 'voice.providers.customVoiceOption': 'Andere (unten eingeben)…', + 'voice.providers.customVoiceAria': 'Piper Voice-ID (benutzerdefiniert)', + 'voice.providers.customVoicePlaceholder': 'en_US-lessac-medium', + 'voice.providers.piperVoicesDesc': + "Stimmen stammen von huggingface.co/rhasspy/piper-voices. Ein Stimmenwechsel erfordert möglicherweise einen Klick auf 'Installieren/Neu installieren', um die neue .onnx-Datei herunterzuladen.", + 'voice.providers.mascotVoice': 'Maskottchen-Stimme', + 'voice.providers.mascotVoiceDescPrefix': + 'Die ElevenLabs-Stimme, die das Maskottchen für gesprochene Antworten verwendet, wird unter', + 'voice.providers.mascotSettings': 'Maskottchen-Einstellungen konfiguriert', + 'voice.providers.mascotVoiceDescSuffix': '.', + 'voice.providers.hotkeyPlaceholder': 'Fn', + 'voice.providers.piperPreset.lessacMedium': 'USA · Lessac (neutral, empfohlen)', + 'voice.providers.piperPreset.lessacHigh': 'USA · Lessac (höhere Qualität, größer)', + 'voice.providers.piperPreset.ryanMedium': 'USA · Ryan (männlich)', + 'voice.providers.piperPreset.amyMedium': 'USA · Amy (weiblich)', + 'voice.providers.piperPreset.librittsHigh': 'USA · LibriTTS (mehrere Sprecher)', + 'voice.providers.piperPreset.alanMedium': 'GB · Alan (männlich)', + 'voice.providers.piperPreset.jennyDiocoMedium': 'GB · Jenny Dioco (weiblich)', + 'voice.providers.piperPreset.northernEnglishMaleMedium': 'GB · Nordenglisch (männlich)', + 'voice.providers.chip.cloud': 'OpenHuman (Verwaltet)', + 'voice.providers.chip.cloudAria': 'Verwalteter OpenHuman-Anbieter ist immer aktiv', + 'voice.providers.chip.whisper': 'Whisper (Lokal)', + 'voice.providers.chip.enableWhisper': 'Lokales Whisper STT aktivieren', + 'voice.providers.chip.disableWhisper': 'Lokales Whisper STT deaktivieren', + 'voice.providers.chip.piper': 'Piper (Lokal)', + 'voice.providers.chip.enablePiper': 'Lokales Piper TTS aktivieren', + 'voice.providers.chip.disablePiper': 'Lokales Piper TTS deaktivieren', + 'voice.providers.chip.enableProvider': 'Enable', + 'voice.providers.chip.disableProvider': 'Disable', + 'voice.providers.chip.apiKeyLabel': 'API-Schlüssel', + 'voice.providers.chip.apiKeyPlaceholder': 'sk-…', + 'voice.providers.chip.comingSoon': 'demnächst verfügbar', + 'voice.modal.title': 'Configure', + 'voice.modal.desc': + 'API-Schlüssel eingeben, um diesen Anbieter zu aktivieren. Die Verbindung kann vor dem Speichern getestet werden.', + 'voice.modal.testKey': 'Schlüssel testen', + 'voice.modal.testing': 'Teste…', + 'voice.modal.saveAndEnable': 'Speichern & aktivieren', + 'voice.modal.enable': 'Enable', + 'voice.modal.whisperDesc': + 'Wähle eine Modellgröße und installiere die Whisper-Binärdatei sowie das GGML-Modell in deinen Arbeitsbereich. Größere Modelle sind genauer, aber langsamer.', + 'voice.modal.piperDesc': + 'Wähle eine Stimme und installiere die Piper-Binärdatei sowie das ONNX-Modell in deinen Arbeitsbereich. Piper läuft vollständig offline mit geringer Latenz.', + 'voice.routing.title': 'Sprach-Routing', + 'voice.routing.desc': + 'Wähle, welche aktivierten Anbieter Sprache-zu-Text und Text-zu-Sprache übernehmen.', + 'voice.routing.save': 'Save', + 'voice.routing.testStt': 'STT testen', + 'voice.routing.testTts': 'TTS testen', + 'voice.routing.elevenlabsVoice': 'ElevenLabs-Stimme', + 'voice.routing.elevenlabsVoiceAria': 'ElevenLabs-Stimmenauswahl', + 'voice.routing.elevenlabsVoiceIdAria': 'ElevenLabs-Stimmen-ID (benutzerdefiniert)', + 'voice.routing.elevenlabsVoiceDesc': + 'Wähle eine kuratierte Stimme oder füge eine benutzerdefinierte Stimmen-ID aus deinem ElevenLabs-Dashboard ein.', + 'voice.externalProviders.title': 'Externe Sprachanbieter', + 'voice.externalProviders.desc': + 'Drittanbieter-STT/TTS-APIs wie Deepgram, ElevenLabs oder OpenAI direkt verbinden.', + 'voice.externalProviders.keySet': 'Schlüssel gesetzt', + 'voice.externalProviders.noKey': 'Kein API-Schlüssel', + 'voice.externalProviders.test': 'Test', + 'voice.externalProviders.testing': 'Teste…', + 'voice.externalProviders.remove': 'Remove', + 'voice.externalProviders.provider': 'Provider', + 'voice.externalProviders.selectProvider': 'Anbieter auswählen…', + 'voice.externalProviders.apiKey': 'API-Schlüssel', + 'voice.externalProviders.apiKeyPlaceholder': 'sk-…', + 'voice.externalProviders.add': 'Add', + 'autocomplete.title': 'Automatische Vervollständigung', + 'autocomplete.settings': 'Einstellungen', + 'autocomplete.acceptWithTab': 'Mit Tab akzeptieren', + 'autocomplete.stylePreset': 'Stilvoreinstellung', + 'autocomplete.style.balanced': 'Ausgewogen', + 'autocomplete.style.concise': 'Prägnant', + 'autocomplete.style.formal': 'Formell', + 'autocomplete.style.casual': 'Lässig', + 'autocomplete.style.custom': 'Benutzerdefiniert', + 'autocomplete.disabledApps': 'Deaktivierte Apps (ein Bundle/App-Token pro Zeile)', + 'autocomplete.saveSettings': 'Einstellungen speichern', + 'autocomplete.saving': 'Sparen…', + 'autocomplete.runtime': 'Laufzeit', + 'autocomplete.running': 'Laufen', + 'autocomplete.start': 'Starten', + 'autocomplete.stop': 'Stopp', + 'autocomplete.settingsSaved': 'Autovervollständigungseinstellungen gespeichert.', + 'autocomplete.started': 'Die automatische Vervollständigung wurde gestartet.', + 'autocomplete.didNotStart': + 'Die automatische Vervollständigung wurde nicht gestartet. Prüfe, ob es aktiviert ist.', + 'autocomplete.stopped': 'Die automatische Vervollständigung wurde gestoppt.', + 'autocomplete.advancedSettings': 'Erweiterte Einstellungen', + 'autocomplete.debugTitle': 'Autocomplete-Debug', + 'chat.agentChat': 'Agenten-Chat', + 'chat.overrides': 'Überschreibt', + 'chat.model': 'Modell', + 'chat.temperature': 'Temperatur', + 'chat.conversation': 'Gespräch', + 'chat.startAgentConversation': 'Beginne ein Gespräch mit dem Agenten.', + 'chat.you': 'Du', + 'chat.agent': 'Agent', + 'chat.askAgent': 'Frag den Agenten etwas ...', + 'chat.sendMessage': 'Nachricht senden', + 'composio.triageTitle': 'Integrationsauslöser', + 'composio.triageDesc': + 'Wenn er aktiv ist, durchläuft jeder eingehende Composio-Auslöser einen KI-Triage-Schritt, der das Ereignis klassifiziert und möglicherweise automatisierte Aktionen auslöst – eine lokale LLM-Runde pro Auslöser. Deaktiviere die Option global oder pro Integration, wenn du eine manuelle Überprüfung bevorzugst. Wenn die Umgebungsvariable', + 'composio.disableAllTriage': 'Deaktiviere die KI-Triage für alle Auslöser', + 'composio.triggersStillRecorded': + 'Auslöser werden weiterhin im Verlauf aufgezeichnet – es wird kein LLM-Turn ausgeführt.', + 'composio.disableSpecificIntegrations': 'Deaktiviere die KI-Triage für bestimmte Integrationen', + 'composio.settingsSaved': 'Einstellungen gespeichert', + 'composio.saveFailed': 'Speichern fehlgeschlagen. Versuche es erneut.', + 'cron.title': 'Cron-Jobs', + 'cron.scheduledJobs': 'Geplante Jobs', + 'cron.manageCronJobs': 'Verwalte Cron-Jobs über den Kernplaner.', + 'cron.refreshCronJobs': 'Cron-Jobs aktualisieren', + 'localModel.modelStatus': 'Modellstatus', + 'localModel.downloadModels': 'Modelle herunterladen', + 'localModel.usage': 'Nutzung', + 'localModel.usageDesc': + 'Wähle aus, welche Subsysteme auf dem lokalen Modell ausgeführt werden. Alles, was nicht funktioniert, nutzt die Cloud.', + 'localModel.enableRuntime': 'Aktiviere die lokale AI-Laufzeit', + 'localModel.enableRuntimeDesc': + 'Hauptschalter. Standardmäßig deaktiviert – Ollama bleibt inaktiv. Wenn diese Option aktiviert ist, verwenden die Baumzusammenfassung, die Bildschirmintelligenz und die automatische Vervollständigung immer das lokale Modell.', + 'localModel.advancedSettings': 'Erweiterte Einstellungen', + 'localModel.debugTitle': 'Lokales Modell-Debug', + 'screenAwareness.debugTitle': 'Debuggen der Bildschirmerkennung', + 'screenAwareness.debug.debugAndDiagnostics': 'Debug & Diagnose', + 'screenAwareness.debug.collapse': 'Reduzieren', + 'screenAwareness.debug.expand': 'Erweitern', + 'screenAwareness.debug.failedToSave': 'Bildschirmintelligenz konnte nicht gespeichert werden.', + 'screenAwareness.debug.policyTitle': 'Bildschirmintelligenzrichtlinie', + 'screenAwareness.debug.baselineFps': 'Basis-FPS', + 'screenAwareness.debug.useVisionModel': 'Vision-Modell verwenden', + 'screenAwareness.debug.useVisionModelDesc': + 'Screenshots an ein Vision-LLM senden, um reichhaltigeren Kontext zu erhalten. Wenn deaktiviert, wird nur OCR-Text mit einem Text-LLM verwendet – schneller und ohne Vision-Modell.', + 'screenAwareness.debug.keepScreenshots': 'Screenshots behalten', + 'screenAwareness.debug.keepScreenshotsDesc': + 'Aufgenommene Screenshots im Arbeitsbereich speichern, anstatt sie nach der Verarbeitung zu löschen', + 'screenAwareness.debug.allowlist': 'Zulassungsliste (eine Regel pro Zeile)', + 'screenAwareness.debug.denylist': 'Sperrliste (eine Regel pro Zeile)', + 'screenAwareness.debug.saveSettings': 'Bildschirmintelligenzeinstellungen speichern', + 'screenAwareness.debug.sessionStats': 'Sitzungsstatistiken', + 'screenAwareness.debug.framesEphemeral': 'Frames (flüchtig)', + 'screenAwareness.debug.panicStop': 'Panikstopp', + 'screenAwareness.debug.defaultPanicHotkey': 'Befehl+Umschalt+.', + 'screenAwareness.debug.vision': 'Vision', + 'screenAwareness.debug.idle': 'inaktiv', + 'screenAwareness.debug.visionQueue': 'Vision-Warteschlange', + 'screenAwareness.debug.lastVision': 'Letzte Vision', + 'screenAwareness.debug.notAvailable': 'n/a', + 'screenAwareness.debug.visionSummaries': 'Vision-Zusammenfassungen', + 'screenAwareness.debug.refreshing': 'Erfrischend…', + 'screenAwareness.debug.noSummaries': 'Noch keine Zusammenfassungen.', + 'screenAwareness.debug.unknownApp': 'Unbekannte App', + 'screenAwareness.debug.macosOnly': + 'Screen Intelligence V1 wird derzeit nur unter macOS unterstützt.', + 'memory.debugTitle': 'Speicher-Debug', + 'memory.documents': 'Dokumente', + 'memory.filterByNamespace': 'Nach Namespace filtern...', + 'memory.refresh': 'Aktualisieren', + 'memory.noDocumentsFound': 'Keine Dokumente gefunden.', + 'memory.delete': 'Löschen', + 'memory.rawResponse': 'Rohantwort', + 'memory.namespaces': 'Namespaces', + 'memory.noNamespacesFound': 'Keine Namespaces gefunden.', + 'memory.queryRecall': 'Abfrage und Rückruf', + 'memory.namespace': 'Namespace', + 'memory.queryText': 'Abfragetext...', + 'memory.defaultMaxChunks': '10', + 'memory.maxChunks': 'max. Chunks', + 'memory.query': 'Abfrage', + 'memory.recall': 'Rückruf', + 'memory.queryLabel': 'Abfrage', + 'memory.recallLabel': 'Rückruf', + 'memory.queryResult': 'Abfrageergebnis', + 'memory.recallResult': 'Rückrufergebnis', + 'memory.clearNamespace': 'Namespace löschen', + 'memory.clearNamespaceDescription': + 'Alle Dokumente innerhalb eines Namespaces dauerhaft löschen.', + 'memory.selectNamespace': 'Namensraum auswählen...', + 'memory.exampleNamespace': 'z.B. skills:gmail:user@example.com', + 'memory.clear': 'Löschen', + 'memory.deleteConfirm': 'Dokument „{documentId}“ im Namespace „{namespace}“ löschen?', + 'memory.clearNamespaceConfirm': + 'Dadurch werden ALLE Dokumente im Namespace "{namespace}" dauerhaft gelöscht. Fortfahren?', + 'memory.clearNamespaceSuccess': 'Namespace „{namespace}“ gelöscht.', + 'memory.clearNamespaceEmpty': 'In „{namespace}“ gibt es nichts zu löschen.', + 'webhooks.debugTitle': 'Webhooks-Debug', + 'webhooks.failedToLoadDebugData': 'Webhook-Debug-Daten konnten nicht geladen werden.', + 'webhooks.clearLogsConfirm': 'Alle erfassten Webhook-Debug-Protokolle löschen?', + 'webhooks.failedToClearLogs': 'Webhook-Protokolle konnten nicht gelöscht werden.', + 'webhooks.loading': 'Laden...', + 'webhooks.refresh': 'Aktualisieren', + 'webhooks.clearing': 'Löschen...', + 'webhooks.clearLogs': 'Protokolle löschen', + 'webhooks.registered': 'registriert', + 'webhooks.captured': 'erfasst', + 'webhooks.live': 'live', + 'webhooks.disconnected': 'getrennt', + 'webhooks.lastEvent': 'Letztes Ereignis', + 'webhooks.at': 'um', + 'webhooks.registeredWebhooks': 'Registrierte Webhooks', + 'webhooks.noActiveRegistrations': 'Keine aktiven Registrierungen.', + 'webhooks.resolvingBackendUrl': 'Backend wird aufgelöst URL…', + 'webhooks.capturedRequests': 'Erfasste Anfragen', + 'webhooks.noRequestsCaptured': 'Es wurden noch keine Webhook-Anfragen erfasst.', + 'webhooks.unrouted': 'nicht weitergeleitet', + 'webhooks.pending': 'ausstehend', + 'webhooks.requestHeaders': 'Anforderungsheader', + 'webhooks.queryParams': 'Abfrageparameter', + 'webhooks.requestBody': 'Anforderungstext', + 'webhooks.responseHeaders': 'Antwortheader', + 'webhooks.responseBody': 'Antworttext', + 'webhooks.rawPayload': 'Rohnutzlast', + 'webhooks.empty': '[leer]', + 'providerSetup.error.defaultDetails': 'Anbietereinrichtung fehlgeschlagen.', + 'providerSetup.error.providerFallback': 'Der Anbieter', + 'providerSetup.error.credentialsRejected': + '{provider} hat die Anmeldedaten abgelehnt. API-Schlüssel prüfen und erneut versuchen.', + 'providerSetup.error.endpointNotRecognized': + '{provider} hat den Endpunkt nicht erkannt. Basis-URL prüfen und erneut versuchen.', + 'providerSetup.error.providerUnavailable': + '{provider} ist derzeit nicht verfügbar. Erneut versuchen oder den Anbieterstatus prüfen.', + 'providerSetup.error.unreachable': + '{provider} nicht erreichbar. Endpunkt-URL und Netzwerkverbindung prüfen, dann erneut versuchen.', + 'providerSetup.error.couldNotReachWithMessage': '{provider} nicht erreichbar: {message}', + 'providerSetup.error.technicalDetails': 'Technische Details', + 'notifications.routingTitle': 'Benachrichtigungsweiterleitung', + 'notifications.routing.pipelineStats': 'Pipeline-Statistiken', + 'notifications.routing.total': 'Gesamt', + 'notifications.routing.unread': 'Ungelesen', + 'notifications.routing.unscored': 'Nicht bewertet', + 'notifications.routing.intelligenceTitle': 'Benachrichtigungs-Intelligenz', + 'notifications.routing.intelligenceDesc': + 'Jede Benachrichtigung aus deinen verbundenen Konten wird von einem lokalen KI-Modell bewertet. Wichtige Benachrichtigungen werden automatisch an deinen Orchestrator-Agenten weitergeleitet, damit nichts Kritisches verloren geht.', + 'notifications.routing.howItWorks': 'So funktioniert es', + 'notifications.routing.level.drop': 'Verwerfen', + 'notifications.routing.level.dropDesc': 'Lärm/Spam – gespeichert, aber nicht angezeigt', + 'notifications.routing.level.acknowledge': 'Bestätigen', + 'notifications.routing.level.acknowledgeDesc': + 'Niedrige Priorität – im Benachrichtigungscenter angezeigt', + 'notifications.routing.level.react': 'Reagieren', + 'notifications.routing.level.reactDesc': + 'Mittlere Priorität – löst eine fokussierte Agenten-Antwort aus', + 'notifications.routing.level.escalate': 'Eskalieren', + 'notifications.routing.level.escalateDesc': + 'Hohe Priorität – an Orchestrator-Agenten weitergeleitet', + 'notifications.routing.perProvider': 'Routing pro Anbieter', + 'notifications.routing.threshold': 'Schwellenwert', + 'notifications.routing.routeToOrchestrator': 'Route zum Orchestrator', + 'notifications.routing.loadSettingsError': + 'Einstellungen konnten nicht geladen werden. Panel schließen und erneut öffnen.', + 'common.reload': 'Neu laden', + 'common.skip': 'Überspringen', + 'common.disable': 'Deaktivieren', + 'common.enable': 'Aktivieren', + 'chat.safetyTimeout': + 'Keine Antwort vom Agenten nach 2 Minuten. Versuche es erneut oder prüfe deine Verbindung.', + 'chat.filter.all': 'Alle', + 'chat.filter.work': 'Arbeit', + 'chat.filter.briefing': 'Briefing', + 'chat.filter.notification': 'Benachrichtigung', + 'chat.filter.workers': 'Arbeiter', + 'chat.selectThread': 'Wähle einen Thread aus', + 'chat.threads': 'Themen', + 'chat.noThreads': 'Noch keine Threads', + 'chat.noLabelThreads': 'Keine „{label}“-Threads', + 'chat.noWorkerThreads': 'Noch keine Arbeitsthreads', + 'chat.deleteThread': 'Thread löschen', + 'chat.deleteThreadConfirm': 'Bist du sicher, dass du „{title}“ löschen möchtest?', + 'chat.untitledThread': 'Thread ohne Titel', + 'chat.editThreadTitle': 'Thread-Titel bearbeiten', + 'chat.hideSidebar': 'Seitenleiste ausblenden', + 'chat.showSidebar': 'Seitenleiste anzeigen', + 'chat.newThreadShortcut': 'Neuer Thread (/new)', + 'chat.new': 'Neu', + 'chat.failedToLoadMessages': 'Nachrichten konnten nicht geladen werden', + 'chat.thinkingIteration': 'Denken... ({n})', + 'chat.thinkingDots': 'Denken...', + 'chat.approachingLimit': 'Das Nutzungslimit nähert sich', + 'chat.approachingLimitMsg': 'Du hast {pct} % deines verfügbaren Kontingents verwendet.', + 'chat.upgrade': 'Upgrade', + 'chat.weeklyLimitHit': 'Du hast dein enthaltenes Zyklusbudget aufgebraucht.', + 'chat.resets': 'Zurücksetzen', + 'chat.topUpToContinue': 'Lade Guthaben auf, um fortzufahren.', + 'chat.budgetComplete': + 'Dein enthaltenes Budget ist aufgebraucht. Füge Credits hinzu oder führe ein Upgrade durch, um fortzufahren.', + 'chat.topUp': 'Aufladen', + 'chat.cycle': 'Zyklus', + 'chat.cycleSpent': 'Habe diesen Zyklus verbracht', + 'chat.cycleRemaining': 'Übrig', + 'chat.left': 'links', + 'chat.setup': 'Einrichten', + 'chat.switchToText': 'Wechsle zu Text', + 'chat.transcribing': 'Transkribieren...', + 'chat.stopAndSend': 'Stoppen und senden', + 'chat.startTalking': 'Sprich los', + 'chat.playingVoiceReply': 'Sprachantwort wird abgespielt', + 'chat.voiceHint': 'Nutze das Mikrofon zum Sprechen', + 'chat.micUnavailable': 'Mikrofon nicht verfügbar', + 'chat.turn': 'drehen', + 'chat.turns': 'dreht sich', + 'chat.openWorkerThread': 'Arbeitsthread öffnen', + 'chat.attachment.attach': 'Bild anhängen', + 'chat.attachment.remove': '{name} entfernen', + 'chat.attachment.tooMany': 'Maximal {max} Bilder pro Nachricht', + 'chat.attachment.tooLarge': 'Bild überschreitet die Größenbeschränkung von {max}', + 'chat.attachment.unsupportedType': + 'Nicht unterstützter Dateityp. Verwenden Sie PNG, JPEG, WebP, GIF oder BMP.', + 'chat.attachment.readFailed': 'Datei konnte nicht gelesen werden', + 'memory.searchAria': 'Speicher durchsuchen', + 'memory.searchPlaceholder': 'Speichereinträge durchsuchen...', + 'memory.sourceFilter.all': 'Alle Quellen', + 'memory.sourceFilter.email': 'E-Mail', + 'memory.sourceFilter.calendar': 'Kalender', + 'memory.sourceFilter.telegram': 'Telegram', + 'memory.sourceFilter.aiInsight': 'KI-Einblick', + 'memory.sourceFilter.system': 'System', + 'memory.sourceFilter.trading': 'Handel', + 'memory.sourceFilter.security': 'Sicherheit', + 'memory.ingestionActivity': 'Einnahmeaktivität', + 'memory.events': 'Ereignisse', + 'memory.event': 'Ereignis', + 'memory.overTheLast': 'im letzten', + 'memory.months': 'Monate', + 'memory.peak': 'Höhepunkt', + 'memory.perDay': '/Tag', + 'memory.less': 'Weniger', + 'memory.more': 'Mehr', + 'memory.on': 'auf', + 'memory.loading': 'Speicher wird geladen', + 'memory.fetching': 'Deine Speichereinträge werden abgerufen...', + 'memory.analyzing': 'Gedächtnis analysieren', + 'memory.analyzingHint': 'Verarbeite deine Erinnerungen, um Erkenntnisse zu gewinnen ...', + 'memory.noMatches': 'Keine Übereinstimmungen gefunden', + 'memory.noMatchesHint': 'Versuche, deine Suchbegriffe oder Filter zu ändern.', + 'memory.allCaughtUp': 'Alles aufgeholt', + 'memory.allCaughtUpHint': 'Es müssen keine neuen Speichereinträge verarbeitet werden.', + 'memory.noAnalysis': 'Noch keine Analyse', + 'memory.noAnalysisHint': + 'Führe eine Analyse durch, um Muster in deinen Erinnerungen zu entdecken.', + 'memory.emptyHint': 'Beginne mit der Interaktion, um deine ersten Erinnerungen zu schaffen.', + 'mic.unavailable': 'Mikrofon ist nicht verfügbar', + 'mic.permissionDenied': 'Mikrofonberechtigung verweigert', + 'mic.failedToStartRecorder': 'Der Rekorder konnte nicht gestartet werden', + 'mic.transcribing': 'Transkribieren...', + 'mic.tapToSend': 'Zum Senden tippen', + 'mic.waitingForAgent': 'Warten auf Agent...', + 'mic.tapAndSpeak': 'Tippen und sprechen', + 'mic.stopRecording': 'Aufnahme stoppen und senden', + 'mic.startRecording': 'Starte die Aufnahme', + 'mic.deviceSelector': 'Mikrofongerät', + 'mic.tapToSendCountdown': 'Zum Senden tippen ({seconds}s)', + 'token.usageLimitReached': 'Nutzungslimit erreicht', + 'token.approachingLimit': 'Annäherung an die Grenze', + 'token.planClickForDetails': 'Plan – klicke für Details', + 'token.sessionTokens': 'In: {in} | Aus: {out} | Turns: {turns}', + 'token.limit': 'Limit erreicht', + 'catalog.noCapabilityBinding': 'Keine Fähigkeitsbindung', + 'catalog.downloadFailed': 'Der Download ist fehlgeschlagen', + 'catalog.active': 'Aktiv', + 'catalog.installed': 'Installiert', + 'catalog.notDownloaded': 'Nicht heruntergeladen', + 'catalog.inUse': 'Im Einsatz', + 'catalog.use': 'Benutzen', + 'catalog.deleteModel': 'Modell löschen', + 'catalog.download': 'Herunterladen', + 'navigator.recent': 'Neu', + 'navigator.today': 'Heute', + 'navigator.thisWeek': 'Diese Woche', + 'navigator.sources': 'Quellen', + 'navigator.email': 'E-Mail', + 'navigator.slack': 'Slack', + 'navigator.chat': 'Chatten', + 'navigator.documents': 'Dokumente', + 'navigator.people': 'Menschen', + 'navigator.topics': 'Themen', + 'dreams.description': + 'Träume sind KI-generierte Reflexionen, die Muster aus deinen Erinnerungen synthetisieren.', + 'dreams.comingSoon': 'Kommt bald', + 'assignment.memoryLlm': 'Speicher LLM', + 'assignment.memoryLlmAria': 'Auswahl des Speichers LLM', + 'assignment.embedder': 'Einbetter', + 'assignment.loaded': 'Geladen', + 'assignment.notDownloaded': 'Nicht heruntergeladen', + 'assignment.usedForExtractSummarise': 'Wird zur Extraktion und Zusammenfassung verwendet', + 'insights.knownFacts': 'Bekannte Fakten', + 'insights.preferences': 'Präferenzen', + 'insights.relationships': 'Beziehungen', + 'insights.skills': 'Fähigkeiten', + 'insights.opinions': 'Meinungen', + 'insights.other': 'Andere', + 'insights.title': 'Einblicke', + 'insights.empty': + 'Noch keine Erkenntnisse. Erkenntnisse werden generiert, wenn dein Gedächtnis wächst.', + 'insights.description': 'Basierend auf {count} Beziehungen in deinem Speicherdiagramm.', + 'insights.items': 'Artikel', + 'insights.more': 'mehr', + 'calls.joiningCall': 'Beitrittsgespräch', + 'calls.meetWindowOpening': 'Das Meet-Fenster wird geöffnet...', + 'calls.failedToStart': 'Der Meet-Anruf konnte nicht gestartet werden', + 'calls.couldNotStart': 'Anruf konnte nicht gestartet werden', + 'calls.failedToClose': 'Anruf konnte nicht geschlossen werden', + 'calls.couldNotClose': 'Anruf konnte nicht geschlossen werden', + 'calls.joinMeet': 'Nimm an einem Google Meet-Anruf teil', + 'calls.joinMeetDescription': 'Gib einen Google Meet-Link ein, um beizutreten.', + 'calls.meetLink': 'Meet-Link', + 'calls.displayName': 'Anzeigename', + 'calls.openingMeet': 'Meet wird geöffnet...', + 'calls.joinCall': 'Nimm am Anruf teil', + 'calls.activeCalls': 'Aktive Anrufe', + 'calls.leave': 'Verlassen', + 'workspace.wipeConfirm': + 'Bist du sicher, dass du den gesamten Speicher löschen möchtest? Dies kann nicht rückgängig gemacht werden.', + 'workspace.resetTreeConfirm': 'Bist du sicher, dass du den Speicherbaum neu erstellen möchtest?', + 'workspace.wipeTitle': 'Speicher löschen', + 'workspace.resetting': 'Zurücksetzen...', + 'workspace.resetMemory': 'Speicher zurücksetzen', + 'workspace.resetTreeTitle': 'Speicherbaum neu erstellen', + 'workspace.rebuilding': 'Wiederaufbau...', + 'workspace.resetMemoryTree': 'Speicherbaum zurücksetzen', + 'workspace.building': 'Wird erstellt...', + 'workspace.buildSummaryTrees': 'Erstelle Zusammenfassungsbäume', + 'workspace.viewVault': 'Vault anzeigen', + 'workspace.openingVaultTitle': 'Vault in Obsidian öffnen', + 'workspace.openingVaultMessage': + 'Falls Obsidian nicht geöffnet wird, installiere es von obsidian.md oder nutze „Ordner anzeigen“. Vault-Pfad:', + 'workspace.openVaultFailedTitle': 'Vault konnte nicht in Obsidian geöffnet werden', + 'workspace.openVaultFailedMessage': + 'Nutze „Ordner anzeigen“, um das Vault-Verzeichnis direkt zu öffnen. Vault-Pfad:', + 'workspace.revealVaultFailed': 'Vault-Ordner konnte nicht angezeigt werden', + 'workspace.revealFolder': 'Ordner anzeigen', + 'workspace.checkingVault': 'Prüfe…', + 'workspace.vaultNotRegisteredHelp': + "Obsidian öffnet nur Ordner, die du als Vault hinzugefügt hast. Wähle in Obsidian 'Ordner als Vault öffnen' und wähle den Ordner unten aus – das musst du nur einmal tun. Klicke dann erneut auf 'Vault anzeigen'.", + 'workspace.obsidianNotFoundHelp': + "Obsidian wurde auf diesem Gerät nicht gefunden. Installiere es oder – wenn es an einem nicht standardmäßigen Ort installiert ist – lege den Konfigurationsordner unter 'Erweitert' fest.", + 'workspace.openAnyway': 'Trotzdem in Obsidian öffnen', + 'workspace.installObsidian': 'Obsidian installieren', + 'workspace.obsidianAdvanced': 'Obsidian woanders installiert?', + 'workspace.obsidianConfigDirLabel': 'Obsidian-Konfigurationsordner', + 'workspace.obsidianConfigDirHint': + 'Pfad zum Ordner, der obsidian.json enthält (z. B. ~/.config/obsidian). Leer lassen für automatische Erkennung.', + 'workspace.obsidianConfigDirPlaceholder': '~/.config/obsidian', + 'workspace.graphLoadFailed': 'Speicherdiagramm konnte nicht geladen werden', + 'workspace.loadingGraph': 'Speicherdiagramm wird geladen...', + 'workspace.graphViewMode': 'Speicherdiagramm-Ansichtsmodus', + 'workspace.trees': 'Bäume', + 'workspace.contacts': 'Kontakte', + 'graph.noContactMentions': 'Keine Kontakterwähnungen', + 'graph.noMemory': 'Keine Erinnerung', + 'graph.source': 'Quelle', + 'graph.topic': 'Thema', + 'graph.global': 'Global', + 'graph.document': 'Dokument', + 'graph.contact': 'Kontakt', + 'graph.nodes': 'Knoten', + 'graph.parentChild': 'Eltern-Kind', + 'graph.documentContact': 'Dokumentenkontakt', + 'graph.link': 'Link', + 'graph.links': 'Links', + 'graph.children': 'Kinder', + 'graph.clickToOpenObsidian': 'Klicke hier, um in Obsidian zu öffnen', + 'graph.person': 'Person', + 'modal.dontShowAgain': 'Ähnliche Vorschläge nicht anzeigen', + 'reflections.loading': 'Reflexionen werden geladen...', + 'reflections.empty': 'Noch keine Überlegungen', + 'reflections.title': 'Reflexionen', + 'reflections.proposedAction': 'Vorgeschlagene Aktion', + 'reflections.act': 'Handeln', + 'reflections.dismiss': 'Entlassen', + 'whatsapp.chatsSynced': 'Chats synchronisiert', + 'whatsapp.chatSynced': 'Chat synchronisiert', + 'sync.active': 'Aktiv', + 'sync.recent': 'Neu', + 'sync.idle': 'Leerlauf', + 'sync.memorySources': 'Speicherquellen', + 'sync.noConnectedSources': 'Keine angeschlossenen Quellen', + 'sync.chunks': 'Brocken', + 'sync.lastChunk': 'Letzter Teil:', + 'sync.pending': 'ausstehend', + 'sync.processed': 'verarbeitet', + 'sync.syncing': 'Synchronisierung…', + 'sync.sync': 'Synchronisieren', + 'sync.failedToLoad': 'Der Synchronisierungsstatus konnte nicht geladen werden', + 'sync.noContent': + 'Es wurden noch keine Inhalte in den Speicher synchronisiert. Verbinde eine Integration, um zu beginnen.', + 'memorySources.title': 'Speicherquellen', + 'memorySources.empty': + 'Noch keine Speicherquellen. Fügen Sie einen hinzu, um den Fütterungsspeicher zu starten', + 'memorySources.customSources': 'Benutzerdefinierte Datenquellen', + 'memorySources.addSource': 'Quelle hinzufügen', + 'memorySources.noCustomSources': + 'Noch keine benutzerdefinierten Quellen. Fügen Sie einen Ordner, GitHub-Repo, RSS-Feed oder eine Webseite hinzu, um zu starten.', + 'memorySources.loadingConnections': 'Verbindungen werden geladen...', + 'memorySources.noConnections': + 'Keine aktiven Composio-Verbindungen gefunden. Verbinden Sie zuerst eine Integration.', + 'memorySources.pickConnection': 'Wählen Sie eine Verbindung', + 'memorySources.selectConnection': 'Wählen Sie eine Verbindung aus.', + 'memorySources.composioListFailed': 'Fehler beim Laden der Composio-Verbindungen.', + 'memorySources.browse': 'Durchsuchen…', + 'memorySources.folderPathPlaceholder': '/Users/you/notes', + 'memorySources.globPatternPlaceholder': 'Md. ', + 'memorySources.repoUrlPlaceholder': 'https://github.com/org/repo', + 'memorySources.branchPlaceholder': 'main', + 'memorySources.feedUrlPlaceholder': 'https://example.com/feed.xml', + 'memorySources.pageUrlPlaceholder': 'https://example.com/article', + 'memorySources.cssSelectorPlaceholder': 'article', + 'memorySources.searchQueryPlaceholder': 'von:Benutzer AI Safety', + 'memorySources.kind.composio': 'Integration', + 'memorySources.kind.folder': 'Lokaler Ordner', + 'memorySources.kind.github_repo': 'GitHub-Repo', + 'memorySources.kind.twitter_query': 'Twitter-Suche', + 'memorySources.kind.rss_feed': 'RSS-Feed', + 'memorySources.kind.web_page': 'Webseite', + 'memorySources.sync.successTitle': 'Synchronisierung läuft', + 'memorySources.sync.successMessage': 'Der Fortschritt wird in Kürze angezeigt.', + 'memorySources.sync.failedTitle': 'Synchronisierung ist fehlgeschlagen', + 'time.justNow': 'gerade eben', + 'time.secondsAgoSuffix': 'vor {count} Sek.', + 'time.minutesAgoSuffix': 'vor {count} Min.', + 'time.hoursAgoSuffix': 'vor {count} Std.', + 'time.daysAgoSuffix': 'vor {count} T', + 'memorySources.pickKind': 'Welche Art von Quelle möchten Sie hinzufügen?', + 'memorySources.backToKinds': 'Zurück zu Quellentypen', + 'memorySources.label': 'Etikett', + 'memorySources.labelPlaceholder': 'Meine Forschungsnotizen', + 'memorySources.add': 'Hinzufügen', + 'memorySources.adding': 'Hinzufügen…', + 'memorySources.added': 'Datenquelle hinzugefügt.', + 'memorySources.removed': 'Quelle entfernt', + 'memorySources.remove': 'Entlassen', + 'memorySources.enable': 'Aktivieren', + 'memorySources.disable': 'Horizontaler Parallaxeffekt', + 'memorySources.toggleFailed': 'Umschalten fehlgeschlagen', + 'memorySources.removeFailed': 'Entfernen fehlgeschlagen', + 'memorySources.folderPath': 'Ordnerpfad', + 'memorySources.globPattern': 'Glob-Muster', + 'memorySources.repoUrl': 'Repository-URL', + 'memorySources.branch': 'Zweigstelle', + 'memorySources.feedUrl': 'Feed-URL', + 'memorySources.pageUrl': 'Seite URL', + 'memorySources.cssSelector': 'CSS Wahlschalter (optional)', + 'memorySources.searchQuery': 'Suchanfrage', + 'backend.aiBackend': 'KI-Backend', + 'backend.cloud': 'Wolke', + 'backend.recommended': 'Empfohlen', + 'backend.cloudDescription': + 'Schnelle, leistungsstarke Modelle, die auf unseren Servern gehostet werden. Sofort einsatzbereit.', + 'backend.privacyNote': + 'Es werden niemals personenbezogene Daten, Nachrichten oder Schlüssel an unsere Server gesendet.', + 'backend.local': 'Lokal', + 'backend.advanced': 'Fortgeschritten', + 'backend.localDescription': + 'Führe Modelle auf deinem eigenen Computer mit Ollama aus. Vollständige Privatsphäre, erfordert eine Einrichtung.', + 'backend.ramRecommended': '16 GB+ RAM empfohlen', + 'subconscious.tasks': 'Aufgaben', + 'subconscious.ticks': 'Zecken', + 'subconscious.last': 'Zuletzt', + 'subconscious.failed': 'gescheitert', + 'subconscious.tickInterval': 'Tick-Intervall', + 'subconscious.runNow': 'Jetzt ausführen', + 'subconscious.providerUnavailableTitle': 'Unterbewusstsein ist pausiert', + 'subconscious.providerSettings': 'KI-Einstellungen', + 'subconscious.approvalNeeded': 'Genehmigung erforderlich', + 'subconscious.requiresApproval': 'Erfordert eine Genehmigung', + 'subconscious.fixInConnections': 'Fix in Verbindungen', + 'subconscious.goAhead': 'Mach weiter', + 'subconscious.activeTasks': 'Aktive Aufgaben', + 'subconscious.noActiveTasks': 'Keine aktiven Aufgaben', + 'subconscious.default': 'Standard', + 'subconscious.addTaskPlaceholder': 'Eine neue Aufgabe hinzufügen...', + 'subconscious.activityLog': 'Aktivitätsprotokoll', + 'subconscious.noActivity': 'Noch keine Aktivität', + 'subconscious.decision.nothingNew': 'Nichts Neues', + 'subconscious.decision.completed': 'Abgeschlossen', + 'subconscious.decision.evaluating': 'Bewerten', + 'subconscious.decision.waitingApproval': 'Warten auf Genehmigung', + 'subconscious.decision.failed': 'Fehlgeschlagen', + 'subconscious.decision.cancelled': 'Abgesagt', + 'subconscious.decision.skipped': 'Übersprungen', + 'actionable.complete': 'Komplett', + 'actionable.dismiss': 'Entlassen', + 'actionable.snooze': 'Schlummern', + 'actionable.new': 'Neu', + 'stats.storage': 'Lagerung', + 'stats.files': 'Dateien', + 'stats.documents': 'Dokumente', + 'stats.today': 'heute', + 'stats.namespaces': 'Namensräume', + 'stats.relations': 'Beziehungen', + 'stats.firstMemory': 'Erste Erinnerung', + 'stats.latest': 'Neueste', + 'stats.sessions': 'Sitzungen', + 'stats.tokens': 'Token', + 'bootCheck.invalidUrl': 'Bitte gib eine Laufzeit URL ein.', + 'bootCheck.urlMustStartWith': 'Der URL muss mit http:// oder https:// beginnen.', + 'bootCheck.validUrlRequired': + 'Das sieht nicht nach einem gültigen URL aus (versuche es mit https://core.example.com/rpc)', + 'bootCheck.tokenRequired': 'Für die Verbindung benötigen wir ein Authentifizierungstoken.', + 'bootCheck.chooseCoreMode': 'Wähle eine Laufzeit aus', + 'bootCheck.connectToCore': 'Stelle eine Verbindung zu deiner Laufzeit her', + 'bootCheck.desktopDescription': + 'OpenHuman benötigt eine Laufzeit zum Nachdenken. Wähle, wo es leben soll.', + 'bootCheck.webDescription': + 'Im Web stellt OpenHuman eine Verbindung zu einer von dir gesteuerten Laufzeit her. Gib unten den URL und das Authentifizierungstoken ein oder greife auf die Desktop-App zu, um eine direkt auf deinem Computer auszuführen.', + 'bootCheck.preferDesktop': 'Möchtest du lieber alles auf deinem eigenen Gerät behalten?', + 'bootCheck.downloadDesktop': 'Hol dir die Desktop-App', + 'bootCheck.localRecommended': 'Lokal ausführen (empfohlen)', + 'bootCheck.localDescription': + 'Läuft direkt hier auf deinem Computer. Am schnellsten, völlig privat, nichts einzurichten.', + 'bootCheck.cloudMode': 'In der Cloud ausführen (komplex)', + 'bootCheck.cloudDescription': + 'Stelle eine Verbindung zu einer Laufzeit her, die du woanders hostest. Die Laufzeit bleibt rund um die Uhr online, sodass du dieses Gerät nicht laufen lassen musst.', + 'bootCheck.coreRpcUrl': 'Laufzeit URL', + 'bootCheck.rpcUrlPlaceholder': 'https://core.example.com/rpc', + 'bootCheck.authToken': 'Authentifizierungstoken', + 'bootCheck.bearerTokenPlaceholder': 'Das Bearer-Token von deiner Remote-Laufzeit', + 'bootCheck.storedLocally': 'Wird nur auf diesem Gerät gespeichert. Gesendet als ', + 'bootCheck.testing': 'Testen…', + 'bootCheck.testConnection': 'Testverbindung', + 'bootCheck.connectedOk': 'Verbunden. Es kann losgehen.', + 'bootCheck.authFailed': + 'Dieser Token hat nicht funktioniert. Prüfe ihn noch einmal und versuche es erneut.', + 'bootCheck.unreachablePrefix': 'Konnte es nicht erreichen:', + 'bootCheck.checkingCore': 'Deine Laufzeit wird aufgeweckt ...', + 'bootCheck.cannotReach': 'Die Laufzeit kann nicht erreicht werden', + 'bootCheck.cannotReachDesc': + 'Wir konnten keine Verbindung zu deiner Laufzeit herstellen. Möchtest du etwas anderes ausprobieren?', + 'bootCheck.switchMode': 'Wähle eine andere Laufzeit', + 'bootCheck.quit': 'Beenden', + 'bootCheck.legacyDetected': 'Legacy-Hintergrundlaufzeit erkannt', + 'bootCheck.legacyDescription': + 'Auf diesem Gerät läuft bereits ein separat installierter OpenHuman-Daemon. Wir müssen es bereinigen, bevor die integrierte Laufzeit übernehmen kann.', + 'bootCheck.removing': 'Entfernen…', + 'bootCheck.removeContinue': 'Entfernen und fortfahren', + 'bootCheck.localNeedsRestart': 'Die lokale Laufzeit erfordert einen Neustart', + 'bootCheck.localNeedsRestartDesc': + 'Deine lokale Laufzeit hat eine andere Version als diese App. Durch einen schnellen Neustart werden sie wieder synchronisiert.', + 'bootCheck.restarting': 'Neustart...', + 'bootCheck.restartCore': 'Starte die Runtime neu', + 'bootCheck.cloudNeedsUpdate': 'Cloud Runtime benötigt ein Update', + 'bootCheck.cloudNeedsUpdateDesc': + 'Deine Cloud-Laufzeitumgebung hat eine andere Version als diese App. Führe den Updater aus, um sie wieder zu synchronisieren.', + 'bootCheck.updating': 'Aktualisierung…', + 'bootCheck.updateCloudCore': 'Aktualisiere Cloud Runtime', + 'bootCheck.versionCheckFailed': 'Laufzeitversionsprüfung fehlgeschlagen', + 'bootCheck.versionCheckFailedDesc': + 'Deine Laufzeit ist aktiv, meldet jedoch nicht ihre Version. Möglicherweise ist es veraltet. Starte es neu oder aktualisiere es, um fortzufahren.', + 'bootCheck.working': 'Arbeiten…', + 'bootCheck.restartUpdateCore': 'Runtime neu starten/aktualisieren', + 'bootCheck.unexpectedError': 'Unerwarteter Boot-Check-Fehler', + 'bootCheck.actionFailed': 'Etwas ist schief gelaufen. Bitte versuche es erneut.', + 'bootCheck.portConflictTitle': 'App-Engine konnte nicht gestartet werden', + 'bootCheck.portConflictBody': + 'Ein anderer Prozess nutzt den Netzwerkport, den OpenHuman benötigt. Wir versuchen, das automatisch zu beheben.', + 'bootCheck.portConflictFixButton': 'Automatisch beheben', + 'bootCheck.portConflictFixing': 'Wird behoben…', + 'bootCheck.portConflictFixFailed': + 'Automatische Behebung fehlgeschlagen. Bitte starten Sie Ihren Computer neu und versuchen Sie es erneut.', + 'notifications.justNow': 'gerade jetzt', + 'notifications.minAgo': 'Vor {n}m', + 'notifications.hrAgo': 'Vor {n}h', + 'notifications.dayAgo': 'Vor {n}d', + 'notifications.category.messages': 'Nachrichten', + 'notifications.category.agents': 'Agenten', + 'notifications.category.skills': 'Fähigkeiten', + 'notifications.category.system': 'System', + 'notifications.category.meetings': 'Treffen', + 'notifications.category.reminders': 'Erinnerungen', + 'notifications.category.important': 'Wichtig', + 'about.update.status.checking': 'Überprüfen...', + 'about.update.status.available': 'v{version} verfügbar', + 'about.update.status.availableNoVersion': 'Update verfügbar', + 'about.update.status.downloading': 'Herunterladen...', + 'about.update.status.readyToInstall': 'v{version} bereit zur Installation', + 'about.update.status.readyToInstallNoVersion': + 'Eine neue Version ist heruntergeladen und bereit. Starte neu, um das Update anzuwenden.', + 'about.update.status.installing': 'Installieren...', + 'about.update.status.restarting': 'Neustart...', + 'about.update.status.upToDate': 'Du verwendest die neueste Version.', + 'about.update.status.error': 'Die Aktualisierungsprüfung ist fehlgeschlagen', + 'about.update.status.default': 'Nach Updates suchen', + 'welcome.connectionFailed': 'Verbindung fehlgeschlagen: {status} {statusText}', + 'welcome.connectionFailedMsg': 'Verbindung fehlgeschlagen: {message}', + 'welcome.continueLocally': 'Lokal fortfahren', 'welcome.continueLocallyExperimental': 'Lokal fortfahren (Experimentell)', + 'welcome.localSessionStarting': 'Lokal starten Sitzung...', + 'welcome.localSessionDesc': + 'Verwendet ein lokales Offline-Profil und überspringt TinyHumans OAuth.', + 'chat.agentChatDesc': 'Öffne eine direkte Chat-Sitzung mit dem Agenten.', + 'chat.modelPlaceholder': 'gpt-4o', + 'channels.activeRouteValue': '{channel} über {authMode}', + 'privacy.dataKind.messages': 'Nachrichten', + 'privacy.dataKind.agents': 'Agenten', + 'privacy.dataKind.skills': 'Fähigkeiten', + 'privacy.dataKind.system': 'System', + 'privacy.dataKind.meetings': 'Treffen', + 'privacy.dataKind.reminders': 'Erinnerungen', + 'privacy.dataKind.important': 'Wichtig', + 'onboarding.enableLocalAI': 'Aktiviere lokale KI', + 'onboarding.skills.status.available': 'Verfügbar', + 'onboarding.skills.status.connected': 'Verbunden', + 'onboarding.skills.status.connecting': 'Verbinden', + 'onboarding.skills.status.error': 'Fehler', + 'onboarding.skills.status.unavailable': 'Nicht verfügbar', + 'composio.statusUnavailable': 'Status nicht verfügbar', + 'composio.authExpired': 'Authentifizierung abgelaufen', + 'composio.reconnect': 'Wieder verbinden', + 'composio.expiredAuthorization': '{name}-Autorisierung abgelaufen', + 'composio.expiredDescription': + 'Stellen Sie die Verbindung erneut her, um {name}-Tools erneut zu aktivieren. OpenHuman sorgt dafür, dass diese Integration nicht verfügbar bleibt, bis Sie den OAuth-Zugriff aktualisieren.', + 'composio.envVarOverrides': 'festgelegt ist, überschreibt es diese Einstellung.', + 'composio.previewBadge': 'Vorschau', + 'composio.previewTooltip': + 'Agent-Integration folgt bald – Sie können eine Verbindung herstellen, aber der Agent kann dieses Toolkit noch nicht verwenden.', + 'memory.day.sun': 'Sonne', + 'memory.day.mon': 'Mo', + 'memory.day.tue': 'Di', + 'memory.day.wed': 'Mi', + 'memory.day.thu': 'Do', + 'memory.day.fri': 'Fr', + 'memory.day.sat': 'Sa', + 'memory.ingesting': 'Einnahme', + 'memory.ingestionQueued': 'In der Warteschlange', + 'memory.ingestingTitle': 'Einnahme von {title}', + 'mic.noAudioCaptured': 'Kein Ton aufgenommen', + 'mic.noSpeechDetected': 'Keine Sprache erkannt', + 'mic.lowConfidenceResult': 'Audio konnte nicht klar verstanden werden — bitte erneut versuchen', + 'mic.failedToStopRecording': 'Aufzeichnung konnte nicht gestoppt werden: {message}', + 'mic.transcriptionFailed': 'Transkription fehlgeschlagen: {message}', + 'reflections.kind.retrospective': 'Retrospektive', + 'reflections.kind.derivedFact': 'Abgeleitete Tatsache', + 'reflections.kind.moodInsight': 'Stimmungseinsicht', + 'reflections.kind.relationshipInsight': 'Beziehungseinblick', + 'graph.tooltip.summary': 'Zusammenfassung', + 'graph.tooltip.contact': 'Kontakt', + 'localModel.usage.never': 'Niemals', + 'localModel.usage.mediumLoad': 'Mittlere Belastung', + 'localModel.usage.lowLoad': 'Geringe Belastung', + 'localModel.usage.idleMode': 'Leerlaufmodus', + 'localModel.rebootstrapComplete': 'Modell-Re-Bootstrap abgeschlossen.', + 'localModel.modelsVerified': 'Lokale Modelle verifiziert.', + 'accounts.addModal.allConnected': 'Alles verbunden', + 'accounts.addModal.title': 'Konto hinzufügen', + 'accounts.respondQueue.empty': 'Leer', + 'accounts.respondQueue.hide': 'Antwortwarteschlange ausblenden', + 'accounts.respondQueue.loadFailed': 'Antwortwarteschlange konnte nicht geladen werden', + 'accounts.respondQueue.loading': 'Warteschlange wird geladen…', + 'accounts.respondQueue.pending': 'Ausstehend', + 'accounts.respondQueue.show': 'Antwortwarteschlange anzeigen', + 'accounts.respondQueue.title': 'Antwortwarteschlange', + 'accounts.webviewHost.almostReady': 'Fast fertig...', + 'accounts.webviewHost.loadTimeout': 'Zeitüberschreitung beim Laden der Webansicht', + 'accounts.webviewHost.loading': 'Laden {providerName}...', + 'accounts.webviewHost.loadingAccount': 'Konto wird geladen', + 'accounts.webviewHost.restoringSession': 'Sitzung wird wiederhergestellt...', + 'accounts.webviewHost.retryLoading': 'Versuche den Ladevorgang erneut', + 'accounts.webviewHost.takingLonger': '{providerName} dauert länger als erwartet.', + 'accounts.webviewHost.timeoutHint': 'Timeout-Hinweis', + 'app.connectionBadge.composio': 'Composio', + 'app.connectionBadge.messaging': 'Nachrichten', + 'app.connectionIndicator.connected': 'Verbunden mit OpenHuman AI 🚀', + 'app.connectionIndicator.connecting': 'Verbinden', + 'app.connectionIndicator.coreOffline': 'Core offline', + 'app.connectionIndicator.disconnected': 'Nicht verbunden', + 'app.connectionIndicator.offline': 'Offline', + 'app.connectionIndicator.reconnecting': 'Wieder verbinden…', + 'app.errorFallback.componentStack': 'Komponentenstapel', + 'app.errorFallback.downloadLatest': 'Neueste herunterladen', + 'app.errorFallback.heading': 'Überschrift', + 'app.errorFallback.hint': 'Hinweis', + 'app.errorFallback.reloadApp': 'App neu laden', + 'app.errorFallback.subheading': 'Unterüberschrift', + 'app.errorFallback.tryRecover': 'Versuche es mit einer Wiederherstellung', + 'app.localAiDownload.installing': 'Installieren...', + 'app.localAiDownload.preparing': 'Vorbereiten...', + 'app.openhumanLink.accounts.continueWith': 'Fahre mit der Anmeldung bei {label} fort', + 'app.openhumanLink.accounts.done': 'Fertig', + 'app.openhumanLink.accounts.intro': 'Einführung', + 'app.openhumanLink.accounts.webviewNote': 'Webview-Hinweis', + 'app.openhumanLink.billing.openDashboard': 'Dashboard öffnen', + 'app.openhumanLink.billing.stayOnTrial': 'In der Testversion bleiben', + 'app.openhumanLink.billing.trialCredit': 'Probeguthaben', + 'app.openhumanLink.billing.trialDesc': 'Testbeschreibung', + 'app.openhumanLink.defaultBody': + 'Im Popup noch nicht fertig. Öffne bei Bedarf die vollständige Einstellungsseite.', + 'app.openhumanLink.discord.intro': 'Einführung', + 'app.openhumanLink.discord.openInvite': 'Einladung öffnen', + 'app.openhumanLink.discord.perk1': 'Vorteil1', + 'app.openhumanLink.discord.perk2': 'Vorteil2', + 'app.openhumanLink.discord.perk3': 'Vorteil3', + 'app.openhumanLink.discord.perk4': 'Vorteil4', + 'app.openhumanLink.done': 'Fertig', + 'app.openhumanLink.loadingChannelSetup': 'Kanal-Setup wird geladen', + 'app.openhumanLink.maybeLater': 'Vielleicht später', + 'app.openhumanLink.notifications.asking': 'Frag dein Betriebssystem ...', + 'app.openhumanLink.notifications.blocked': 'Blockiert', + 'app.openhumanLink.notifications.blockedStep1': 'Schritt 1 blockiert', + 'app.openhumanLink.notifications.blockedStep2': 'Schritt 2 blockiert', + 'app.openhumanLink.notifications.blockedStep3': 'Schritt 3 blockiert', + 'app.openhumanLink.notifications.intro': 'Einführung', + 'app.openhumanLink.notifications.promptHint': 'Prompter Hinweis', + 'app.openhumanLink.notifications.retry': 'Benachrichtigung zum erneuten Testversuch', + 'app.openhumanLink.notifications.send': 'Testbenachrichtigung senden', + 'app.openhumanLink.notifications.sendFailed': 'Konnte nicht gesendet werden: {error}', + 'app.openhumanLink.notifications.sent': + 'Testbenachrichtigung gesendet. Wenn du sie nicht erhalten hast, gehe zu Systemeinstellungen → Benachrichtigungen → OpenHuman, aktiviere „Benachrichtigungen zulassen“ und stelle den Bannerstil auf „Persistent“ ein.', + 'app.openhumanLink.skipForNow': 'Erstmal überspringen', + 'app.openhumanLink.telegramUnavailable': 'Telegram nicht verfügbar', + 'app.openhumanLink.title.accounts': 'Verbinde deine Apps', + 'app.openhumanLink.title.billing': 'Abrechnung und Gutschriften', + 'app.openhumanLink.title.discord': 'Tritt der Community bei', + 'app.openhumanLink.title.messaging': 'Verbinde einen Chat-Kanal', + 'app.openhumanLink.title.notifications': 'Benachrichtigungen zulassen', + 'app.persistRehydration.body': 'Körper', + 'app.persistRehydration.heading': 'Überschrift', + 'app.persistRehydration.resetCta': 'Zurücksetzen…', + 'app.persistRehydration.resetting': 'Zurücksetzen…', + 'app.routeLoading.initializing': 'OpenHuman wird initialisiert...', + 'app.update.currentlyOn': '{version}', + 'app.update.errorFallback': 'Beim Update ist ein Fehler aufgetreten.', + 'app.update.header.default': 'Aktualisieren', + 'app.update.header.error': 'Update fehlgeschlagen', + 'app.update.header.installing': 'Update installieren', + 'app.update.header.readyToInstall': 'Update zur Installation bereit', + 'app.update.header.restarting': 'Neustart...', + 'app.update.later': 'Später', + 'app.update.newVersionReady': 'Eine neue Version ist zur Installation bereit.', + 'app.update.progress.downloaded': '{amount} heruntergeladen', + 'app.update.progress.installing': 'Installation der neuen Version…', + 'app.update.progress.restarting': 'Neustart der App…', + 'app.update.progress.working': '{percent}%', + 'app.update.restartNote': 'Hinweis zum Neustart', + 'app.update.restartNow': 'Starte jetzt neu', + 'app.update.versionReady': 'Version {newVersion} ist zur Installation bereit.', + 'channels.discord.accountLinked': 'Konto verknüpft', + 'channels.discord.connect': 'Verbinden', + 'channels.discord.linkTokenExpired': 'Link-Token abgelaufen. Bitte versuche es erneut.', + 'channels.discord.linkTokenInstruction': '{token}', + 'channels.discord.linkTokenLabel': 'Link-Token-Label', + 'channels.discord.linkTokenOnce': 'Link-Token einmal', + 'channels.discord.picker.allPermissionsOk': + 'Bot verfügt über alle erforderlichen Berechtigungen in diesem Kanal.', + 'channels.discord.picker.botNotInServers': 'Bot nicht auf Servern', + 'channels.discord.picker.category': 'Kategorie', + 'channels.discord.picker.channel': 'Kanal', + 'channels.discord.picker.checkingPermissions': 'Berechtigungen prüfen', + 'channels.discord.picker.loadingChannels': 'Lade Kanäle...', + 'channels.discord.picker.loadingServers': 'Server werden geladen...', + 'channels.discord.picker.missingPermissions': 'Fehlende Berechtigungen', + 'channels.discord.picker.noChannels': 'Keine Textkanäle gefunden', + 'channels.discord.picker.noServers': 'Keine Server gefunden', + 'channels.discord.picker.selectChannel': 'Wähle einen Kanal aus', + 'channels.discord.picker.selectServer': 'Wähle einen Server aus', + 'channels.discord.picker.server': 'Server', + 'channels.discord.picker.serverChannelSelection': 'Server- und Kanalauswahl', + 'channels.discord.savedRestartRequired': + 'Kanal gespeichert. Starte die App neu, um sie zu aktivieren.', + 'channels.telegram.connect': 'Verbinden', + 'channels.telegram.managedDmConnecting': 'Verwaltete DM-Verbindung', + 'channels.telegram.managedDmTimeout': 'DM-Timeout verwaltet', + 'channels.telegram.reconnect': 'Wieder verbinden', + 'channels.telegram.savedRestartRequired': + 'Kanal gespeichert. Starte die App neu, um sie zu aktivieren.', + 'channels.web.alwaysAvailable': 'Immer verfügbar', + 'chat.approval.approve': 'Genehmigen', + 'chat.approval.alwaysAllow': 'Immer zulassen', + 'chat.approval.alwaysAllowHint': + 'Fragen Sie nicht mehr nach diesem Tool – fügen Sie es Ihrer Liste „Immer zulassen“ hinzu', + 'chat.approval.deciding': 'Arbeiten…', + 'chat.approval.deny': 'Leugnen', + 'chat.approval.error': + 'Ihre Entscheidung konnte nicht aufgezeichnet werden. Versuchen Sie es erneut.', + 'chat.approval.fallback': + 'Der Agent möchte eine Aktion ausführen, die Ihre Zustimmung erfordert.', + 'chat.approval.title': 'Genehmigung erforderlich', + 'chat.approval.tool': 'Werkzeug:', + 'channels.authMode.managed_dm': 'Mit OpenHuman anmelden', + 'channels.authMode.oauth': 'OAuth-Anmeldung', + 'channels.authMode.bot_token': 'Eigenen Bot-Token verwenden', + 'channels.authMode.api_key': 'Eigenen API-Schlüssel verwenden', + 'channels.fieldRequired': '{field} ist erforderlich', + 'channels.mcp.title': 'MCP-Server', + 'channels.mcp.description': + 'Durchsuche und verwalte Model Context Protocol-Server, die die KI um neue Tools erweitern.', + 'channels.discord.displayName': 'Discord', + 'channels.discord.description': 'Sende und empfange Nachrichten über Discord.', + 'channels.discord.authMode.bot_token.description': 'Gib deinen eigenen Discord-Bot-Token an.', + 'channels.discord.authMode.oauth.description': + 'Installiere den OpenHuman-Bot über OAuth auf deinem Discord-Server.', + 'channels.discord.authMode.managed_dm.description': + 'Verknüpfe dein persönliches Discord-Konto mit dem OpenHuman-Bot.', + 'channels.discord.fields.bot_token.label': 'Bot-Token', + 'channels.discord.fields.bot_token.placeholder': 'Dein Discord-Bot-Token', + 'channels.discord.fields.guild_id.label': 'Server- (Guild-) ID', + 'channels.discord.fields.guild_id.placeholder': + 'Optional: auf einen bestimmten Server beschränken', + 'channels.telegram.displayName': 'Telegram', + 'channels.telegram.description': 'Sende und empfange Nachrichten über Telegram.', + 'channels.telegram.authMode.managed_dm.description': + 'Schreibe dem OpenHuman-Telegram-Bot direkt.', + 'channels.telegram.authMode.bot_token.description': + 'Gib deinen eigenen Telegram-Bot-Token von @BotFather an.', + 'channels.telegram.fields.bot_token.label': 'Bot-Token', + 'channels.telegram.fields.bot_token.placeholder': '123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11', + 'channels.telegram.fields.allowed_users.label': 'Erlaubte Benutzer', + 'channels.telegram.fields.allowed_users.placeholder': + 'Durch Kommas getrennte Telegram-Benutzernamen', + 'channels.telegram.remoteControlTitle': 'Fernsteuerung (Telegram)', + 'channels.telegram.remoteControlBody': + 'Senden Sie von einem zulässigen Telegram-Chat aus /status, /sessions, /new oder /help. Das Modellrouting verwendet weiterhin /model und /models.', + 'channels.web.displayName': 'Web', + 'channels.web.description': 'Chatte über die integrierte Web-Oberfläche.', + 'channels.web.authMode.managed_dm.description': + 'Nutze den eingebetteten Web-Chat — keine Einrichtung erforderlich.', + 'channels.yuanbao.connect': 'Connect', + 'channels.yuanbao.connecting': 'Verbinde…', + 'channels.yuanbao.fieldRequired': '{field} ist erforderlich', + 'channels.yuanbao.reconnect': 'Reconnect', + 'channels.yuanbao.savedRestartRequired': + 'Kanal gespeichert. App neu starten, um ihn zu aktivieren.', + 'channels.yuanbao.unexpectedStatus': 'Unerwarteter Verbindungsstatus: {status}', + 'chat.unsubscribeApproval.approve': 'Genehmigen und abbestellen', + 'chat.unsubscribeApproval.approved': '✓ Erfolgreich abgemeldet.', + 'chat.unsubscribeApproval.denied': '✕Anfrage abgelehnt.', + 'chat.unsubscribeApproval.deny': 'Leugnen', + 'chat.unsubscribeApproval.processing': 'Verarbeitung...', + 'chat.unsubscribeApproval.title': 'Abmeldeanfrage', + 'commandPalette.ariaLabel': 'Befehlspalette', + 'commandPalette.description': 'Beschreibung', + 'commandPalette.label': 'Befehle', + 'commandPalette.noResults': 'Keine Ergebnisse', + 'commandPalette.placeholder': 'Gib einen Befehl ein oder suche ...', + 'commandPalette.searchAria': 'Suchbefehle', + 'commandPalette.shortcutHint': 'Drücke ? für alle Verknüpfungen', + 'commandPalette.title': 'Befehlspalette', + 'kbd.ariaLabel': 'Tastenkombination: {shortcut}', + 'iosMascot.connectedTo': 'Verbunden mit', + 'iosMascot.defaultPairedLabel': 'Desktop', + 'iosMascot.disconnect': 'Trennen', + 'iosMascot.error.generic': 'Etwas ist schief gelaufen. Bitte versuchen Sie es erneut.', + 'iosMascot.error.sendFailed': 'Senden fehlgeschlagen. Überprüfen Sie Ihre Verbindung.', + 'iosMascot.pushToTalk': 'Push-to-talk', + 'iosMascot.sendMessage': 'Nachricht senden', + 'iosMascot.thinking': 'Denken...', + 'iosMascot.typeMessage': 'Geben Sie a ein Nachricht...', + 'iosPair.connectedLoading': 'Verbunden! Wird geladen...', + 'iosPair.connecting': 'Verbindung zum Desktop wird hergestellt...', + 'iosPair.desktopLabel': 'Desktop', + 'iosPair.error.camera': + 'Kamera-Scan fehlgeschlagen. Kameraberechtigungen prüfen und erneut versuchen.', + 'iosPair.error.connectionFailed': + 'Verbindung fehlgeschlagen. Sicherstellen, dass die Desktop-App läuft, und erneut versuchen.', + 'iosPair.error.invalidQr': + 'Ungültiger QR-Code. Sicherstellen, dass ein OpenHuman-Kopplungscode gescannt wird.', + 'iosPair.error.unreachableDesktop': + 'Desktop nicht erreichbar. Sicherstellen, dass beide Geräte online sind, und erneut versuchen.', + 'iosPair.expired': 'QR code abgelaufen. Bitten Sie den Desktop, den Code neu zu generieren.', + 'iosPair.instructions': + "Öffne OpenHuman auf dem Desktop, gehe zu Einstellungen > Geräte und tippe auf 'Gerät koppeln', um den QR-Code anzuzeigen.", + 'iosPair.retryScan': 'Scan erneut versuchen', + 'iosPair.scanQrCode': 'Scannen QR code', + 'iosPair.scannerOpening': 'Scanner wird geöffnet...', + 'iosPair.step.openDesktop': 'OpenHuman auf dem Desktop öffnen', + 'iosPair.step.openSettings': 'Gehen Sie zu Einstellungen > Geräte', + 'iosPair.step.showQr': 'Tippen Sie auf „Telefon koppeln“, um QR anzuzeigen', + 'iosPair.title': 'Mit Ihrem Desktop koppeln', + 'composio.connect.additionalConfigRequired': 'Zusätzliche Konfiguration erforderlich', + 'composio.connect.atlassianSubdomainHint': 'acme', + 'composio.connect.atlassianSubdomainLabel': 'Atlassian-Subdomain-Label', + 'composio.connect.connect': 'Verbinden', + 'composio.connect.dynamicsOrgNameHint': + 'Beispiel: „myorg“ für myorg.crm.dynamics.com. Gib nur den kurzen Organisationsnamen ein, nicht den vollständigen URL.', + 'composio.connect.dynamicsOrgNameLabel': 'Name der Dynamics 365-Organisation', + 'composio.connect.connectionFailed': 'Verbindung fehlgeschlagen (Status: {status}).', + 'composio.connect.disconnectFailed': 'Verbindungstrennung fehlgeschlagen: {msg}', + 'composio.connect.disconnecting': 'Verbindung trennen…', + 'composio.connect.idleDescription': 'Verbinde deine', + 'composio.connect.idleDescriptionSuffix': + 'Konto. Wir öffnen ein Browserfenster, du genehmigst dort den Zugriff und diese App erkennt die Verbindung automatisch.', + 'composio.connect.isConnected': 'verbunden ist.', + 'composio.connect.manage': 'Verwalten', + 'composio.connect.needsFieldsPrefix': 'Zum Verbinden', + 'composio.connect.needsFieldsSuffix': + 'Wir brauchen ein bisschen mehr Informationen. Fülle die fehlenden Felder unten aus und versuche es erneut.', + 'composio.connect.needsSubdomain': 'Zum Verbinden', + 'composio.connect.needsSubdomainSuffix': + 'Gib deine Atlassian-Subdomain ein (z. B. acme für acme.atlassian.net) und versuche es erneut.', + 'composio.connect.oauthComplete': 'OAuth zum Abschließen…', + 'composio.connect.oauthTimeout': 'OAuth-Zeitüberschreitung', + 'composio.connect.permissions': 'Berechtigungen', + 'composio.connect.permissionsDefault': 'Lesen + Schreiben ist standardmäßig aktiviert', + 'composio.connect.permissionsNote': 'entlarven kann', + 'composio.connect.permissionsNoteSuffix': + 'Die eigenen Agentenberechtigungen von OpenHuman werden unten als Lese-, Schreib- und Admin-Umschaltung gesteuert.', + 'composio.connect.reopenBrowser': 'Browser erneut öffnen', + 'composio.connect.requestingUrl': 'Verbindung wird angefordert URL…', + 'composio.connect.requiredFieldEmpty': 'Dieses Feld ist erforderlich.', + 'composio.connect.retryConnection': 'Verbindung erneut versuchen', + 'composio.connect.scopeLoadError': 'Bereichseinstellungen konnten nicht geladen werden: {msg}', + 'composio.connect.scopeSaveError': 'Der Bereich {key} konnte nicht gespeichert werden: {msg}', + 'composio.connect.scope.read': 'Lesen', + 'composio.connect.scope.readHint': + 'Ermöglichen Sie dem Agenten, Daten von dieser Verbindung zu lesen.', + 'composio.connect.scope.write': 'Schreiben', + 'composio.connect.scope.writeHint': + 'Erlauben Sie dem Agenten, Daten über diese Verbindung zu erstellen oder zu ändern.', + 'composio.connect.scope.admin': 'Admin', + 'composio.connect.scope.adminHint': + 'Erlauben Sie dem Agenten, Einstellungen, Berechtigungen oder destruktive Aktionen zu verwalten.', + 'composio.connect.subdomainInvalid': + 'Gib nur die kurze Subdomain ein (z. B. „acme“), nicht die vollständige URL. Es sollte nur Buchstaben, Zahlen und Bindestriche enthalten.', + 'composio.connect.subdomainRequired': 'Bitte gib deine Atlassian-Subdomain ein, um fortzufahren.', + 'composio.connect.wabaIdHint': + 'Finde es über GET /me/businesses und dann GET /{business_id}/owned_whatsapp_business_accounts mit deinem Meta-Zugriffstoken.', + 'composio.connect.wabaIdLabel': 'Waba-ID-Etikett', + 'composio.connect.wabaIdRequired': + 'Bitte gib deine WhatsApp Geschäftskonto-ID (WABA ID) ein, um fortzufahren.', + 'composio.connect.waitingFor': 'Warten auf', + 'composio.connect.waitingHint': 'Wartender Hinweis', + 'composio.triggers.heading': 'Auslöser', + 'composio.triggers.listenFrom': 'Auf Ereignisse hören von', + 'composio.triggers.loadError': 'Trigger konnten nicht geladen werden', + 'composio.triggers.needsConfiguration': 'Muss konfiguriert werden', + 'composio.triggers.noneAvailable': 'Derzeit sind keine Auslöser verfügbar für', + 'conversations.taskKanban.moveLeft': 'Bewege dich nach links', + 'conversations.taskKanban.moveRight': 'Bewege dich nach rechts', + 'conversations.taskKanban.title': 'Aufgaben', + 'conversations.taskKanban.approval.default': 'Standard', + 'conversations.taskKanban.approval.notRequired': 'Nicht erforderlich', + 'conversations.taskKanban.approval.notRequiredBadge': 'keine Genehmigung', + 'conversations.taskKanban.approval.required': 'Erforderlich', + 'conversations.taskKanban.approval.requiredBadge': 'approval', + 'conversations.taskKanban.approval.requiredBeforeExecution': 'Vor der Ausführung erforderlich', + 'conversations.taskKanban.briefButton': 'Aufgabenbeschreibung', + 'conversations.taskKanban.briefTitle': 'Aufgabenbeschreibung', + 'conversations.taskKanban.closeBrief': 'Aufgabenbeschreibung abschließen', + 'conversations.taskKanban.field.acceptanceCriteria': 'Akzeptanzkriterien', + 'conversations.taskKanban.field.allowedTools': 'Erlaubte Werkzeuge', + 'conversations.taskKanban.field.approval': 'Genehmigung', + 'conversations.taskKanban.field.assignedAgent': 'Zugewiesener Agent', + 'conversations.taskKanban.field.blocker': 'Blocker', + 'conversations.taskKanban.field.evidence': 'Beweis', + 'conversations.taskKanban.field.notes': 'Notizen', + 'conversations.taskKanban.field.objective': 'Objektiv', + 'conversations.taskKanban.field.plan': 'Planen', + 'conversations.taskKanban.field.status': 'Status', + 'conversations.taskKanban.field.title': 'Titel', + 'conversations.taskKanban.saveChanges': 'Änderungen speichern', + 'conversations.taskKanban.deleteCard': 'Löschen', + 'conversations.taskKanban.updateFailed': + 'Aufgabe konnte nicht aktualisiert werden; Änderungen wurden nicht gespeichert.', + 'conversations.toolTimeline.turn': 'drehen', + 'conversations.toolTimeline.workerThread': 'Worker-Thread', + 'daemon.serviceBlockingGate.body': 'Körper', + 'daemon.serviceBlockingGate.downloadHint': 'Hinweis herunterladen', + 'daemon.serviceBlockingGate.downloadLatest': 'Lade die neueste Version herunter', + 'daemon.serviceBlockingGate.retryCore': 'Core erneut versuchen', + 'daemon.serviceBlockingGate.retryFailed': + 'Wiederholungsversuch fehlgeschlagen. Lade den neuesten App-Build herunter und versuche es erneut.', + 'daemon.serviceBlockingGate.retrying': 'Erneuter Versuch...', + 'daemon.serviceBlockingGate.title': 'OpenHuman Kern ist nicht verfügbar', + 'home.banners.discordSubtitle': 'Discord Untertitel', + 'home.banners.discordTitle': 'Tritt unserem Discord bei', + 'home.banners.earlyBirdDismiss': 'Frühbucherbanner schließen', + 'home.banners.earlyBirdFirstSub': 'erstes Abonnement.', + 'home.banners.earlyBirdOn': 'Frühaufsteher', + 'home.banners.earlyBirdTitle': 'Die ersten 1.000 Nutzer erhalten 60 % Rabatt.', + 'home.banners.earlyBirdUseCode': 'Frühbucher-Nutzungscode', + 'home.banners.getSubscription': 'Hol dir ein Abonnement', + 'home.banners.promoCreditsBody': 'Probiere OpenHuman aus und wenn du Lust auf mehr hast,', + 'home.banners.promoCreditsTitle': 'Du hast {amount} Werbeguthaben.', + 'home.banners.promoCreditsUsage': 'und erhalte 10x mehr Nutzung.', + 'intelligence.memoryChunk.detail.chunk': 'Brocken', + 'intelligence.memoryChunk.detail.copyChunkId': 'Chunk-ID kopieren', + 'intelligence.memoryChunk.detail.embeddingInfo': 'bge-m3 1024dim', + 'intelligence.memoryChunk.detail.noEmbedding': 'Keine Einbettung', + 'intelligence.memoryChunk.letterhead.from': 'von', + 'intelligence.memoryChunk.letterhead.to': 'zu', + 'intelligence.memoryChunk.mentioned.chunkOne': '1 Stück', + 'intelligence.memoryChunk.mentioned.chunkOther': '{count} Stücke', + 'intelligence.memoryChunk.mentioned.heading': 'e r w ä h n t', + 'intelligence.memoryChunk.scoreBars.ariaScore': '{name} erzielen einen Wert von {pct} Prozent', + 'intelligence.memoryChunk.scoreBars.atThreshold': 'um {threshold}', + 'intelligence.memoryChunk.scoreBars.dropped': 'fallen gelassen', + 'intelligence.memoryChunk.scoreBars.heading': 'Warum hast du es behalten?', + 'intelligence.memoryChunk.scoreBars.kept': 'gehalten', + 'intelligence.diagram.title': 'Architekturdiagramm', + 'intelligence.diagram.description': + 'Neueste lokale Architektur-Ausgabe vom konfigurierten Diagramm-Endpunkt.', + 'intelligence.diagram.refresh': 'Refresh', + 'intelligence.diagram.refreshAria': 'Diagramm aktualisieren', + 'intelligence.diagram.emptyTitle': 'Noch kein Diagramm verfügbar', + 'intelligence.diagram.emptyDescription': + 'Generiere ein Architekturdiagramm über den Orchestrator – dieses Panel wird dann automatisch vom konfigurierten lokalen Endpunkt aktualisiert.', + 'intelligence.diagram.skillInstallCommand': 'npx skills add yizhiyanhua-ai/fireworks-tech-graph', + 'intelligence.diagram.promptExample': + 'Generiere ein Architekturdiagramm des aktuellen Schwarms im dunklen Terminal-Stil', + 'intelligence.diagram.imageAlt': 'Zuletzt generiertes OpenHuman-Architekturdiagramm', + 'intelligence.diagram.refreshesEvery': 'Aktualisiert alle {seconds} s', + 'intelligence.memoryText.entityTypePrefix': 'Entitätstyp', + 'intelligence.screenDebug.active': 'Aktiv', + 'intelligence.screenDebug.app': 'App', + 'intelligence.screenDebug.bounds': 'Grenzen', + 'intelligence.screenDebug.captureAlt': 'Testergebnis erfassen', + 'intelligence.screenDebug.captureFailed': 'Fehlgeschlagen', + 'intelligence.screenDebug.captureSuccess': 'Erfolg', + 'intelligence.screenDebug.captureTest': 'Capture-Test', + 'intelligence.screenDebug.capturing': 'Erfassen', + 'intelligence.screenDebug.frames': 'Rahmen', + 'intelligence.screenDebug.idle': 'Leerlauf', + 'intelligence.screenDebug.lastApp': 'Letzte App', + 'intelligence.screenDebug.mode': 'Modus', + 'intelligence.screenDebug.permAccessibility': 'Zugänglichkeit aufrechterhalten', + 'intelligence.screenDebug.permInput': 'Perm-Eingabe', + 'intelligence.screenDebug.permScreen': 'Barrierefreiheit', + 'intelligence.screenDebug.permissions': 'Berechtigungen', + 'intelligence.screenDebug.platformNotSupported': 'Plattform nicht unterstützt', + 'intelligence.screenDebug.recentVisionSummaries': 'Aktuelle Visionszusammenfassungen', + 'intelligence.screenDebug.session': 'Sitzung', + 'intelligence.screenDebug.size': 'Größe', + 'intelligence.screenDebug.status': 'Status', + 'intelligence.screenDebug.testCapture': 'Testaufnahme', + 'intelligence.screenDebug.time': 'Zeit', + 'intelligence.screenDebug.title': 'Titel', + 'intelligence.screenDebug.unknown': 'Unbekannt', + 'intelligence.screenDebug.visionQueue': 'Vision-Warteschlange', + 'intelligence.screenDebug.visionState': 'Visionszustand', + 'intelligence.tasks.activeBoardOne': '1 aktives Forum für alle Gespräche', + 'intelligence.tasks.activeBoardOther': '{count} aktive Boards in allen Gesprächen', + 'intelligence.tasks.empty': 'Noch keine Agenten-Taskboards', + 'intelligence.tasks.emptyHint': 'Leerer Hinweis', + 'intelligence.tasks.failedToLoad': 'Laden fehlgeschlagen', + 'intelligence.tasks.live': 'leben', + 'intelligence.tasks.loadingBoards': 'Taskboards werden geladen…', + 'intelligence.tasks.threadPrefix': 'Thread {thread}', + 'intelligence.tasks.subtitle': 'Ihre Aufgaben und Agenten-Taskboards im gesamten Arbeitsbereich.', + 'intelligence.tasks.newTask': 'Neue Aufgabe', + 'intelligence.tasks.personalBoardTitle': 'Agentenaufgaben', + 'intelligence.tasks.personalEmpty': 'Noch keine persönlichen Aufgaben', + 'intelligence.tasks.composer.title': 'Neue Aufgabe', + 'intelligence.tasks.composer.titleLabel': 'Titel', + 'intelligence.tasks.composer.titlePlaceholder': 'Was muss getan werden?', + 'intelligence.tasks.composer.statusLabel': 'Status', + 'intelligence.tasks.composer.attachLabel': 'Dem Gespräch beifügen', + 'intelligence.tasks.composer.attachNone': 'Persönlich (kein Gespräch)', + 'intelligence.tasks.composer.objectiveLabel': 'Objektiv', + 'intelligence.tasks.composer.objectivePlaceholder': 'Optional – das gewünschte Ergebnis', + 'intelligence.tasks.composer.notesLabel': 'Notizen', + 'intelligence.tasks.composer.notesPlaceholder': 'Optionale Notizen', + 'intelligence.tasks.composer.create': 'Aufgabe erstellen', + 'intelligence.tasks.composer.creating': 'Erstellen…', + 'intelligence.tasks.composer.createFailed': 'Die Aufgabe konnte nicht erstellt werden', + 'notifications.card.dismiss': 'Benachrichtigung verwerfen', + 'notifications.card.importanceTitle': 'Wichtigkeit: {pct}%', + 'notifications.center.empty': 'Noch keine Benachrichtigungen', + 'notifications.center.emptyHint': 'Leerer Hinweis', + 'notifications.center.filterAll': 'Alles filtern', + 'notifications.center.markAllRead': 'Alles als gelesen markieren', + 'notifications.center.title': 'Benachrichtigungen', + 'oauth.button.connecting': 'Verbinden...', + 'oauth.button.loopbackTimeout': + 'Anmeldung abgelaufen — der Browser hat die OAuth-Weiterleitung nicht abgeschlossen. Bitte versuche es erneut.', + 'oauth.login.continueWith': 'Weiter mit', + 'onboarding.contextGathering.buildingDesc': 'Gebäudebeschreibung', + 'onboarding.contextGathering.buildingProfile': 'Erstelle dein Profil...', + 'onboarding.contextGathering.continueToChat': 'Weiter chatten', + 'onboarding.contextGathering.coreAlive': + 'Der Kern ist erreichbar – der erste Start kann eine Minute dauern.', + 'onboarding.contextGathering.coreAliveProbing': 'Kernverbindung prüfen…', + 'onboarding.contextGathering.coreUnreachable': + 'Der Kern reagiert nicht. Du kannst fortfahren und es später noch einmal versuchen.', + 'onboarding.contextGathering.errorDesc': + 'Dein Chat ist fertig. Wir erstellen im Hintergrund weiterhin dein vollständiges Profil, sodass du jetzt fortfahren und es im Laufe der Zeit verfeinern kannst.', + 'onboarding.contextGathering.stillWorkingDesc': + 'Der erste Start kann 30–60 Sekunden dauern, während wir dein lokales Modell und deine Tools aufwärmen. Du kannst jederzeit weiter chatten – die Profilerstellung läuft im Hintergrund weiter.', + 'onboarding.contextGathering.stillWorkingTitle': 'Ich arbeite immer noch an deinem Profil…', + 'onboarding.contextGathering.title': 'Kontexterfassung', + 'openhuman.team_list_teams': 'Teamlisten-Teams', + 'overlay.ariaAttention': 'Achtung-Nachricht', + 'overlay.ariaCompanion': 'Begleiter aktiv', + 'overlay.ariaOrb': 'OpenHuman-Overlay', + 'overlay.ariaVoiceActive': 'Spracheingabe aktiv', + 'overlay.companion.error': 'Fehler', + 'overlay.companion.listening': 'Zuhören…', + 'overlay.companion.pointing': 'Zeigen…', + 'overlay.companion.speaking': 'Apropos…', + 'overlay.companion.thinking': 'Denken…', + 'overlay.orbTitle': 'Zum Verschieben ziehen · Doppelklicken, um die Position zurückzusetzen', + 'pages.settings.account.connections': 'Verbindungen', + 'pages.settings.account.connectionsDesc': 'Überprüfe und verwalte verknüpfte Kontoverbindungen', + 'pages.settings.account.migration': 'Von einem anderen Assistenten importieren', + 'pages.settings.account.migrationDesc': + 'Migriere Speicher und Notizen von OpenClaw (oder bald Hermes) in diesen Arbeitsbereich.', + 'pages.settings.account.privacy': 'Privatsphäre', + 'pages.settings.account.privacyDesc': + 'Verwalte die Datenfreigabe und anonymisierte Nutzungspräferenzen', + 'pages.settings.account.recoveryPhrase': 'Wiederherstellungssatz', + 'pages.settings.account.recoveryPhraseDesc': + 'Verwalte deine BIP39-Wiederherstellungsphrase für Verschlüsselung und Wallet-Zugriff', + 'pages.settings.account.team': 'Team', + 'pages.settings.account.teamDesc': 'Verwalte dein Team, deine Mitglieder und Einladungen', + 'pages.settings.accountSection.description': + 'Wiederherstellungsphrase, Team, Verbindungen und Datenschutzeinstellungen.', + 'pages.settings.accountSection.title': 'Konto', + 'pages.settings.ai.llm': 'Llm', + 'pages.settings.ai.llmDesc': 'Llm absch', + 'pages.settings.ai.voice': 'Stimme', + 'pages.settings.ai.voiceDesc': 'Sprachbeschreibung', + 'pages.settings.aiSection.description': + 'Sprachmodellanbieter, lokal Ollama und Sprache (STT / TTS).', + 'pages.settings.aiSection.title': 'AI', + 'pages.settings.composioSection.title': 'Composio', + 'pages.settings.composioSection.description': + 'Routing, Trigger und Verlauf für Integrationen, die von Composio unterstützt werden.', + 'settings.developerMenu.composio.title': 'Composio', + 'settings.developerMenu.composio.desc': + 'Routing-Modus, Integrations-Trigger und Trigger-Verlaufsarchiv.', + 'pages.settings.features.desktopCompanion': 'Desktop-Begleiter', + 'pages.settings.features.desktopCompanionDesc': + 'Sprachassistent mit Bildschirmerkennung – hört zu, sieht, spricht, zeigt', + 'pages.settings.features.messagingChannels': 'Messaging-Kanäle', + 'pages.settings.features.messagingChannelsDesc': 'Nachrichtenkanäle, Abschn', + 'pages.settings.features.notifications': 'Benachrichtigungen', + 'pages.settings.features.notificationsDesc': 'Benachrichtigungen absch', + 'pages.settings.features.screenAwareness': 'Bildschirmbewusstsein', + 'pages.settings.features.screenAwarenessDesc': 'Abschn. Bildschirmwahrnehmung', + 'pages.settings.features.tools': 'Werkzeuge', + 'pages.settings.features.toolsDesc': 'Werkzeugbeschr', + 'pages.settings.featuresSection.description': 'Bildschirmbewusstsein, Nachrichten und Tools.', + 'pages.settings.featuresSection.title': 'Funktionen', + 'privacy.dataKind.credentials': 'Anmeldeinformationen', + 'privacy.dataKind.derived': 'Abgeleitet', + 'privacy.dataKind.diagnostics': 'Diagnose', + 'privacy.dataKind.metadata': 'MetaDaten', + 'privacy.dataKind.raw': 'Roh', + 'privacy.whatLeaves.link.label': 'Was verlässt meinen Computer?', + 'rewards.community.achievementsUnlocked': '{unlocked} von {total} Erfolgen freigeschaltet', + 'rewards.community.connectDiscord': 'Verbinde Discord', + 'rewards.community.cumulativeTokens': 'Kumulierte Token', + 'rewards.community.currentStreak': 'Aktuelle Serie', + 'rewards.community.discordLinkedNotInGuild': 'Verlinkt, aber nicht auf dem Server', + 'rewards.community.discordMember': 'Dem Server beigetreten', + 'rewards.community.discordNotLinked': 'Nicht verlinkt', + 'rewards.community.discordServer': 'Discord Server', + 'rewards.community.discordStatusUnavailable': 'Mitgliedschaftsstatus nicht verfügbar', + 'rewards.community.discordWaiting': 'Warten auf Backend-Synchronisierung', + 'rewards.community.heroSubtitle': + 'Schalte exklusive Kanäle, Unterstützerabzeichen und Backend-synchronisierte Belohnungen frei, indem du dein Discord-Konto verknüpfst.', + 'rewards.community.heroTitle': 'Verdiene Belohnungen und Discord Rollen', + 'rewards.community.joinDiscord': 'Tritt Discord bei', + 'rewards.community.loadingRewards': 'Prämien werden geladen…', + 'rewards.community.locked': 'Gesperrt', + 'rewards.community.retrying': 'Erneuter Versuch…', + 'rewards.community.rolesAndRewards': 'Rollen und Belohnungen', + 'rewards.community.streakDays': '{n} Tage', + 'rewards.community.syncPending': 'Synchronisierung der Prämien steht aus', + 'rewards.community.syncPendingDesc': 'Synchronisierung ausstehend', + 'rewards.community.syncUnavailable': 'Synchronisierung nicht verfügbar', + 'rewards.community.tryAgain': 'Erneuter Versuch…', + 'rewards.community.unknown': 'Unbekannt', + 'rewards.community.unlocked': 'Entsperrt', + 'rewards.community.yourProgress': 'Dein Fortschritt', + 'rewards.coupon.colCode': 'Code', + 'rewards.coupon.colRedeemed': 'Eingelöst', + 'rewards.coupon.colReward': 'Belohnung', + 'rewards.coupon.colStatus': 'Status', + 'rewards.coupon.loadingHistory': 'Prämienverlauf wird geladen…', + 'rewards.coupon.noCodes': 'Es wurden noch keine Prämiencodes eingelöst.', + 'rewards.coupon.pending': 'Ausstehend', + 'rewards.coupon.placeholder': 'Gutscheincode', + 'rewards.coupon.promoCredits': 'Promo-Credits', + 'rewards.coupon.recentRedemptions': 'Aktuelle Einlösungen', + 'rewards.coupon.redeemAccepted': + '{code} akzeptiert. {amount} wird entsperrt, nachdem die erforderliche Aktion abgeschlossen ist.', + 'rewards.coupon.redeemButton': 'Code einlösen', + 'rewards.coupon.redeemSuccess': '{code} eingelöst. {amount} wurde zu deinen Credits hinzugefügt.', + 'rewards.coupon.redeemedCodes': 'Eingelöste Codes', + 'rewards.coupon.redeeming': 'Einlösen...', + 'rewards.coupon.statusApplied': 'Angewendet', + 'rewards.coupon.statusPendingAction': 'Ausstehende Maßnahmen', + 'rewards.coupon.statusRedeemed': 'Eingelöst', + 'rewards.coupon.subtitle': 'Untertitel', + 'rewards.coupon.title': 'Gutscheincode einlösen', + 'rewards.referralSection.activity': 'Empfehlungsaktivität', + 'rewards.referralSection.apply': 'Bewerben…', + 'rewards.referralSection.applying': 'Bewerben…', + 'rewards.referralSection.colReferredUser': 'Empfohlener Benutzer', + 'rewards.referralSection.colReward': 'Belohnung', + 'rewards.referralSection.colStatus': 'Status', + 'rewards.referralSection.colUpdated': 'Aktualisiert', + 'rewards.referralSection.completed': 'Abgeschlossen', + 'rewards.referralSection.copyCode': 'Code kopieren', + 'rewards.referralSection.copyFailed': 'Der Kopiervorgang ist fehlgeschlagen', + 'rewards.referralSection.haveCode': 'Hast du einen Empfehlungscode?', + 'rewards.referralSection.haveCodeDesc': 'Habe Codebeschreibung', + 'rewards.referralSection.linked': 'Verlinkt', + 'rewards.referralSection.linkedCode': '(Code {code})', + 'rewards.referralSection.loading': 'Empfehlungsprogramm wird geladen…', + 'rewards.referralSection.retry': 'Wiederholen', + 'rewards.referralSection.noReferrals': 'Keine Empfehlungen', + 'rewards.referralSection.pendingReferrals': 'Ausstehende Empfehlungen', + 'rewards.referralSection.placeholder': 'Empfehlungscode', + 'rewards.referralSection.share': 'Teilen', + 'rewards.referralSection.statusCompleted': 'Status abgeschlossen', + 'rewards.referralSection.statusExpired': 'Status abgelaufen', + 'rewards.referralSection.statusJoined': 'Status beigetreten', + 'rewards.referralSection.subtitle': 'Untertitel', + 'rewards.referralSection.title': 'Freunde einladen, Credits verdienen', + 'rewards.referralSection.totalEarned': 'Insgesamt verdient', + 'rewards.referralSection.yourCode': 'Dein Code', + 'settings.ai.addCloudProvider': 'Cloud-Anbieter hinzufügen', + 'settings.ai.addProvider': 'Sparen…', + 'settings.ai.apiKeyFieldLabel': 'Bezeichnung des API-Schlüsselfelds', + 'settings.ai.apiKeyRequired': 'Bitte füge deinen API-Schlüssel ein, um fortzufahren.', + 'settings.ai.apiKeyStoredEncrypted': 'API-Schlüssel verschlüsselt gespeichert', + 'settings.ai.apiKeysEncrypted': 'auth-profiles.json', + 'settings.ai.clearStoredKey': 'Gespeicherten Schlüssel löschen', + 'settings.ai.connectProvider': 'Anbieter verbinden', + 'settings.ai.customRouting': 'Benutzerdefiniertes Routing', + 'settings.ai.defaultResolvesTo': 'Standard wird aufgelöst zu', + 'settings.ai.discard': 'Verwerfen', + 'settings.ai.editProvider': 'Anbieter bearbeiten', + 'settings.ai.llmProviders': 'LLM Anbieter', + 'settings.ai.llmProvidersDesc': 'LLM-Anbieter absch', + 'settings.ai.localOllama': 'Lokal (Ollama)', + 'settings.ai.modelLabel': 'Modell', + 'settings.ai.noCustomProviders': 'Keine benutzerdefinierten Anbieter', + 'settings.ai.openAiCompat.authHeaderExample': 'Autorisierung: Bearer ', + 'settings.ai.openAiCompat.authHeaderLabel': 'Auth-Header', + 'settings.ai.openAiCompat.baseUrlLabel': 'Basis URL', + 'settings.ai.openAiCompat.baseUrlUnavailable': 'Nicht verfügbar', + 'settings.ai.openAiCompat.clearKey': 'Schlüssel löschen', + 'settings.ai.openAiCompat.description': + 'Verweisen Sie lokale Kabelbäume auf diesen /v1-Server, um durch die unten konfigurierten Anbieter zu routen. Die Authentifizierung verwendet einen stabilen Schlüssel, den Sie hier festgelegt haben, nicht den internen Kernträger der App.', + 'settings.ai.openAiCompat.keyConfigured': 'Schlüssel konfiguriert', + 'settings.ai.openAiCompat.keyRequired': 'Schlüssel erforderlich', + 'settings.ai.openAiCompat.rotateKey': 'Schlüssel drehen', + 'settings.ai.openAiCompat.setKey': 'Schlüssel einstellen', + 'settings.ai.openAiCompat.title': 'OpenAI-kompatibler Endpunkt', + 'settings.ai.providerLabel': 'Anbieter', + 'skills.mcpComingSoon.title': 'MCP Server', + 'skills.mcpComingSoon.description': + 'MCP-Server-Verwaltung kommt bald. Dieser Tab wird zur zentralen Anlaufstelle für das Entdecken, Verbinden und Überwachen deiner MCP-Server-Integrationen.', + 'settings.ai.routing': 'Routenführung', + 'settings.ai.routingCustom': 'Routing benutzerdefiniert', + 'settings.ai.routingDefault': 'Standard', + 'settings.ai.routingDesc': 'Routing-Beschreibung', + 'settings.ai.saveChanges': 'Sparen…', + 'settings.ai.saving': 'Sparen…', + 'settings.ai.unsavedChange': 'nicht gespeicherte Änderung', + 'settings.ai.unsavedChanges': 'nicht gespeicherte Änderungen', + 'settings.ai.workloadGroupBackground': 'Hintergrund der Arbeitslastgruppe', + 'settings.ai.workloadGroupChat': 'Workload-Gruppenchat', + 'settings.ai.disconnectProvider': 'Trennen {label}', + 'settings.ai.connectProviderLabel': 'Verbinden {label}', + 'settings.ai.defaultLocalEndpoint': 'http://localhost:11434/v1', + 'settings.ai.endpointUrlLabel': 'Endpunkt URL', + 'settings.ai.localRuntimeHelper': + 'Wo {label} erreichbar ist. Die Standardeinstellung ist localhost. Richten Sie dies auf einen Remote-Host (z. B. http://10.0.0.4:11434/v1), um eine freigegebene Instanz zu verwenden.', + 'settings.ai.endpointUrlRequired': 'Endpunkt URL ist erforderlich.', + 'settings.ai.endpointProtocolRequired': 'Endpunkt muss mit http:// oder https://. beginnen.', + 'settings.ai.connectProviderDialog': 'Verbinden Sie {label}', + 'settings.ai.or': 'Oder', + 'settings.ai.openRouterOauthDescription': + 'Melden Sie sich mit OpenRouter an und importieren Sie einen benutzergesteuerten API-Schlüssel mit PKCE.', + 'settings.ai.connecting': 'Verbindung wird hergestellt...', + 'settings.ai.backgroundLoops': 'Hintergrundschleifen', + 'settings.ai.backgroundLoopsDesc': + 'Sehen Sie, was ohne Chat-Nachricht läuft, pausieren Sie die Herzschlagarbeit und überprüfen Sie die letzten Kreditbuchzeilen.', + 'settings.ai.heartbeatControls': 'Heartbeat-Kontrollen', + 'settings.ai.heartbeatControlsDesc': + 'Standardmäßig aus. Durch Aktivieren wird die Schleife gestartet; durch Deaktivieren wird der ausgeführte Task abgebrochen.', + 'settings.ai.heartbeatLoop': 'Heartbeat-Schleife', + 'settings.ai.heartbeatLoopDesc': + 'Master-Scheduler für Planer + optionale unbewusste Schlussfolgerung.', + 'settings.ai.subconsciousInference': 'Unterbewusste Inferenz', + 'settings.ai.subconsciousInferenceDesc': + 'Führt eine modellgestützte task/reflection-Auswertung bei Herzschlagzecken durch.', + 'settings.ai.calendarMeetingChecks': 'Kalenderbesprechungsprüfungen', + 'settings.ai.calendarMeetingChecksDesc': + 'Ruft die Kalenderereignisliste für aktive Google Kalenderverbindungen auf.', + 'settings.ai.calendarCap': 'Kalenderobergrenze', + 'settings.ai.connectionsPerTick': '{count} Verb./Takt', + 'settings.ai.meetingLookahead': 'Besprechungsvorausschau', + 'settings.ai.minutesShort': '{count} Min.', + 'settings.ai.reminderLookahead': 'Erinnerungsvorschau', + 'settings.ai.cronReminderChecks': 'Cron-Erinnerungsprüfungen', + 'settings.ai.cronReminderChecksDesc': + 'Scans aktivierten Cron-Jobs für Erinnerungen - wie anstehende Elemente.', + 'settings.ai.relevantNotificationChecks': 'Relevante Benachrichtigungsprüfungen', + 'settings.ai.relevantNotificationChecksDesc': + 'Fördert dringende lokale Benachrichtigungen in proaktive Warnungen.', + 'settings.ai.externalDelivery': 'Externe Zustellung', + 'settings.ai.externalDeliveryDesc': + 'Ermöglicht Heartbeat-Warnungen, proaktive Nachrichten an externe Kanäle zu senden.', + 'settings.ai.interval': 'Intervall', + 'settings.ai.running': 'Läuft...', + 'settings.ai.plannerTickNow': 'Planer tickt jetzt', + 'settings.ai.loadingHeartbeatControls': 'Heartbeat-Steuerelemente werden geladen...', + 'settings.ai.heartbeatControlsUnavailable': 'Heartbeat-Steuerelemente nicht verfügbar.', + 'settings.ai.loopMap': 'Schleifenzuordnung', + 'settings.ai.plannerSummary': + 'Planer: {sourceEvents} Quellereignisse, {sent} gesendet, {deduped} dedupliziert.', + 'settings.ai.routeLabel': 'Route: {route}', + 'settings.ai.on': 'ein', + 'settings.ai.off': 'aus', + 'settings.ai.recentUsageLedger': 'Ledger der letzten Nutzung', + 'settings.ai.recentUsageLedgerDesc': + 'Backend-Zeilen setzen action/time heute frei; Quell-Tags benötigen Backend-Unterstützung.', + 'settings.ai.latestSpend': 'Letzte Ausgaben: {amount} um {time} ({action})', + 'settings.ai.topActions': 'Top-Aktionen', + 'settings.ai.noSpendRows': 'Keine Ausgabenzeilen geladen.', + 'settings.ai.topHours': 'Top-Stunden', + 'settings.ai.noHourlySpend': 'Noch keine stündlichen Ausgaben.', + 'settings.ai.openhumanDefault': 'OpenHuman (Standard)', + 'settings.ai.localModelResolved': 'Ollama · {model}', + 'settings.ai.customRoutingForWorkload': 'Benutzerdefiniertes Routing für {label}', + 'settings.ai.loadingModels': 'Modelle werden geladen...', + 'settings.ai.enterModelIdManually': 'oder Modell-ID manuell eingeben:', + 'settings.ai.modelIdPlaceholderForProvider': '{slug} Modell-ID', + 'settings.ai.modelIdPlaceholder': 'model-id', + 'settings.ai.selectModel': 'Wählen Sie ein Modell...', + 'settings.ai.temperatureOverride': 'Temperatur-Override', + 'settings.ai.temperatureOverrideSlider': 'Temperatur-Override (Schieberegler)', + 'settings.ai.temperatureOverrideValue': 'Temperatur-Override (Wert)', + 'settings.ai.temperatureOverrideDesc': + 'Niedriger = deterministischer. Deaktivieren Sie diese Option, um den Anbieterstandard zu verwenden.', + 'settings.ai.testFailed': 'Test fehlgeschlagen.', + 'settings.ai.testingModel': 'Modell wird getestet...', + 'settings.ai.modelResponse': 'Modellantwort', + 'settings.ai.providerWithValue': 'Anbieter: {value}', + 'settings.ai.noneDash': '—', + 'settings.ai.promptHelloWorld': 'Eingabeaufforderung: Hallo Welt', + 'settings.ai.startedAt': 'Gestartet: {value}', + 'settings.ai.waitingForModelResponse': 'Warten auf Antwort vom ausgewählten Modell ...', + 'settings.ai.response': 'Antwort', + 'settings.ai.testing': 'Testen...', + 'settings.ai.test': 'Testen', + 'settings.ai.slugMissingError': 'Geben Sie einen Anbieternamen ein, um einen Slug zu generieren.', + 'settings.ai.slugInUseError': 'Dieser Anbietername wird bereits verwendet.', + 'settings.ai.slugReservedError': 'Wählen Sie einen anderen Anbieternamen.', + 'settings.ai.providerNamePlaceholder': 'Mein Anbieter', + 'settings.ai.slugLabel': 'Slug:', + 'settings.ai.openAiUrlLabel': 'OpenAI-URL', + 'settings.ai.openAiUrlPlaceholder': 'https://api.openai.com/v1', + 'settings.ai.keepExistingKeyPlaceholder': 'Leer lassen, um vorhandenen Schlüssel beizubehalten', + 'settings.ai.reindexingMemory': 'Speicher neu indizieren', + 'settings.ai.reindexingMemoryMessage': + 'Einbettungen werden neu verarbeitet. {pending} Speicherelement(e) werden unter dem aktuellen Modell neu eingebettet — der semantische Abruf wird reduziert, bis dies abgeschlossen ist. Die Keyword-Suche funktioniert weiterhin, und das erneute Einbetten wird im Hintergrund fortgesetzt, wenn Sie dies schließen.', + 'settings.ai.signInWithOpenRouter': 'Anmelden mit OpenRouter', + 'settings.ai.weekBudget': 'Wochenbudget', + 'settings.ai.cycleRemaining': 'Verbleibender Zyklus', + 'settings.ai.cycleTotalSpend': 'Gesamtausgaben für den Zyklus', + 'settings.ai.avgSpendRow': 'Zeile mit durchschnittlichen Ausgaben', + 'settings.ai.backgroundApiReads': 'Bg API liest', + 'settings.ai.backgroundWakeups': 'BG-Wakeups', + 'settings.ai.budgetMath': 'Budgetberechnung', + 'settings.ai.rowsLeft': 'Verbleibende Zeilen', + 'settings.ai.rowsPerFullWeekBudget': 'Zeilen pro vollem Wochenbudget', + 'settings.ai.sampleBurnRate': 'Sample-Brennrate', + 'settings.ai.projectedEmpty': 'Projiziert leer', + 'settings.ai.apiReadsPerDollarRemaining': 'API Lesevorgänge pro verbleibendem $', + 'settings.ai.loopCallBudget': 'Schleifenaufrufbudget', + 'settings.ai.heartbeatTicks': 'Heartbeat-Ticks', + 'settings.ai.calendarPlannerCalls': 'Kalenderplaner ruft auf', + 'settings.ai.calendarFanoutCap': 'Kalender-Fanout-Obergrenze', + 'settings.ai.subconsciousModelCalls': 'Unterbewusste Modellaufrufe', + 'settings.ai.composioSyncScans': 'Composio Synchronisierungsscans', + 'settings.ai.totalBackgroundApiReadBudget': 'Gesamtbg API Lesebudget', + 'settings.ai.memoryWorkerPolls': 'Speicher-Worker-Umfragen', + 'settings.ai.defaultProviderName': 'OpenHuman', + 'settings.ai.routing.managed': 'Verwaltet', + 'settings.ai.routing.managedDesc': + 'OpenHuman führt alle Inferenzen in der Cloud aus, wählt das beste Modell für die Aufgabe aus, optimiert die Kosten und behält die sichersten Routing-Standards bei.', + 'settings.ai.routing.managedMsg': + 'OpenHuman verarbeitet alle Rückschlüsse für jede Arbeitsbelastung und wählt automatisch die beste Route für Kosten, Qualität und Sicherheit.', + 'settings.ai.routing.useYourOwn': 'Verwenden Sie Ihre eigenen Modelle', + 'settings.ai.routing.useYourOwnDesc': + 'Wählen Sie ein Anbieter + Modell und leiten Sie jede Arbeitslast durch. Das ist einfach, aber es kann ineffizient sein, weil leichte und schwere Inferenz alle die gleiche Route teilen.', + 'settings.ai.routing.advanced': 'Erweitert', + 'settings.ai.routing.advancedDesc': + 'Wählen Sie verschiedene Modelle für verschiedene Aufgaben. Dies ist die beste Option für eine enge Kostenoptimierung und die beste Kontrolle.', + 'settings.ai.routing.customDesc': + 'Feinkörniges Routing gibt Ihnen die beste Kostenoptimierung und die meiste Kontrolle. Verwenden Sie die folgenden Zeilen, um zu entscheiden, welche Workloads verwaltet bleiben, welche Ihren freigegebenen Standard verwenden und welche an ein bestimmtes Modell angeheftet sind.', + 'settings.ai.routing.chatAndConversations': 'Chat und Gespräche', + 'settings.ai.routing.chatDesc': + 'Modelle, die während der direkten Benutzerinteraktion verwendet werden, Antworten, Argumentation, Agentenschleifen und Codierungshilfe.', + 'settings.ai.routing.backgroundTasks': 'Hintergrundaufgaben', + 'settings.ai.routing.bgTasksDesc': + 'Modelle, die außerhalb des Hauptgesprächsflusses für Zusammenfassung, Herzschlag, Lernen und unbewusste Bewertung verwendet werden.', + 'settings.ai.routing.addCustomProvider': 'Benutzerdefinierten Anbieter hinzufügen', + 'settings.ai.globalModel.title': 'Wählen Sie ein Modell für alles', + 'settings.ai.globalModel.desc': + 'Dies leitet alle Rückschlüsse über ein Modell. Es ist einfacher, kann aber in Bezug auf Kosten und Qualität ineffizient sein, da leichte und schwere Aufgaben alle die gleiche Route verwenden.', + 'settings.ai.globalModel.noProviders': + 'Fügen Sie zuerst einen Anbieter hinzu oder verbinden Sie ihn. Dann können Sie hier jeden Workload durch ein Modell routen.', + 'settings.ai.globalModel.provider': 'Anbieter', + 'settings.ai.globalModel.model': 'Modell', + 'settings.ai.globalModel.loadingModels': 'Modelle werden geladen…', + 'settings.ai.globalModel.enterModelId': 'Modell-ID eingeben', + 'settings.ai.globalModel.appliesToAll': + 'Wendet das gleiche Anbieter + -Modell auf Chat, Argumentation, Codierung, Gedächtnis, Herzschlag, Lernen und Unterbewusstsein an. Einbettungen werden separat konfiguriert. Änderungen speichern, wenn Sie auf Speichern klicken.', + 'settings.ai.globalModel.saving': 'Speichern…', + 'settings.ai.globalModel.saved': 'Gespeichert', + 'settings.ai.workload.noModel': 'Kein Modell ausgewählt', + 'settings.ai.workload.changeModel': 'Modell ändern', + 'settings.ai.workload.chooseModel': 'Modell auswählen', + 'settings.ai.provider.ollama': 'Ollama', + 'settings.autocomplete.appFilter.acceptSuggestion': 'Vorschlag annehmen', + 'settings.autocomplete.appFilter.app': 'App', + 'settings.autocomplete.appFilter.currentSuggestion': 'Aktueller Vorschlag', + 'settings.autocomplete.appFilter.contextOverride': 'Kontextüberschreibung (optional)', + 'settings.autocomplete.appFilter.debounce': 'Entprellen', + 'settings.autocomplete.appFilter.debugFocus': 'Debug-Fokus', + 'settings.autocomplete.appFilter.enabled': 'Aktiviert', + 'settings.autocomplete.appFilter.getSuggestion': 'Hol dir einen Vorschlag', + 'settings.autocomplete.appFilter.lastError': 'Letzter Fehler', + 'settings.autocomplete.appFilter.liveLogs': 'Live-Protokolle', + 'settings.autocomplete.appFilter.model': 'Modell', + 'settings.autocomplete.appFilter.noLogs': '):', + 'settings.autocomplete.appFilter.phase': 'Phase', + 'settings.autocomplete.appFilter.platformSupported': 'Unterstützte Plattform', + 'settings.autocomplete.appFilter.refreshStatus': 'Erfrischend…', + 'settings.autocomplete.appFilter.refreshing': 'Erfrischend…', + 'settings.autocomplete.appFilter.running': 'Wird ausgeführt', + 'settings.autocomplete.appFilter.runtime': 'Laufzeit', + 'settings.autocomplete.appFilter.test': 'Testen', + 'settings.autocomplete.completionStyle.acceptedCompletion': + '{count} akzeptierter Abschluss gespeichert – wird zur Personalisierung zukünftiger Vorschläge verwendet.', + 'settings.autocomplete.completionStyle.acceptedCompletions': + '{count} akzeptierte Vervollständigungen werden gespeichert – werden zur Personalisierung zukünftiger Vorschläge verwendet.', + 'settings.autocomplete.completionStyle.clearHistory': 'Löschen…', + 'settings.autocomplete.completionStyle.clearing': 'Löschen…', + 'settings.autocomplete.completionStyle.debounce': 'Entprellung (ms)', + 'settings.autocomplete.completionStyle.enabled': 'Aktiviert', + 'settings.autocomplete.completionStyle.maxChars': 'Max. Zeichen', + 'settings.autocomplete.completionStyle.noHistory': + 'Noch keine akzeptierten Abschlüsse. Akzeptiere Vorschläge mit der Tabulatortaste, um mit der Personalisierung zu beginnen.', + 'settings.autocomplete.completionStyle.overlayTtl': 'Overlay-TTL (ms)', + 'settings.autocomplete.completionStyle.personalizationHistory': 'Personalisierungsverlauf', + 'settings.autocomplete.completionStyle.styleExamples': 'Stilbeispiele (eines pro Zeile)', + 'settings.autocomplete.completionStyle.styleInstructions': 'Stilanweisungen', + 'settings.autocomplete.debug.acceptedPrefix': 'Akzeptiert: {value}', + 'settings.autocomplete.debug.acceptFailed': 'Vorschlag konnte nicht angenommen werden', + 'settings.autocomplete.debug.alreadyRunning': 'Autocomplete läuft bereits.', + 'settings.autocomplete.debug.clearHistoryFailed': 'Der Verlauf konnte nicht gelöscht werden.', + 'settings.autocomplete.debug.didNotStart': + 'Die automatische Vervollständigung wurde nicht gestartet.', + 'settings.autocomplete.debug.disabledInSettings': + 'Die automatische Vervollständigung ist in den Einstellungen deaktiviert. Aktivieren Sie es und speichern Sie es zunächst.', + 'settings.autocomplete.debug.fetchSuggestionFailed': + 'Der aktuelle Vorschlag konnte nicht abgerufen werden.', + 'settings.autocomplete.debug.inspectFocusedElementFailed': + 'Das fokussierte Element konnte nicht überprüft werden.', + 'settings.autocomplete.debug.loadSettingsFailed': + 'Die Einstellungen für die automatische Vervollständigung konnten nicht geladen werden.', + 'settings.autocomplete.debug.noSuggestionApplied': 'Es wurde kein Vorschlag angewendet.', + 'settings.autocomplete.debug.noSuggestionReturned': 'Kein Vorschlag zurückgegeben.', + 'settings.autocomplete.debug.refreshStatusFailed': + 'Der Status der automatischen Vervollständigung konnte nicht aktualisiert werden.', + 'settings.autocomplete.debug.saveAdvancedSettingsFailed': + 'Die erweiterten Einstellungen konnten nicht gespeichert werden.', + 'settings.autocomplete.debug.startFailed': + 'Die automatische Vervollständigung konnte nicht gestartet werden.', + 'settings.autocomplete.debug.stopFailed': + 'Die automatische Vervollständigung konnte nicht gestoppt werden.', + 'settings.autocomplete.debug.suggestionPrefix': 'Vorschlag: {value}', + 'settings.autocomplete.shared.none': 'Keine', + 'settings.autocomplete.shared.notApplicable': 'n/a', + 'settings.autocomplete.shared.unknown': 'Unbekannt', + 'settings.billing.autoRecharge.addAmount': 'Füge diesen Betrag hinzu', + 'settings.billing.autoRecharge.addCard': 'Karte hinzufügen', + 'settings.billing.autoRecharge.amountHint': 'Betragshinweis', + 'settings.billing.autoRecharge.defaultCard': 'Standardkarte', + 'settings.billing.autoRecharge.lastRechargeFailed': 'Das letzte Aufladen ist fehlgeschlagen', + 'settings.billing.autoRecharge.lastRecharged': 'Zuletzt aufgeladen', + 'settings.billing.autoRecharge.expires': 'Läuft ab {date}', + 'settings.billing.autoRecharge.noCards': 'Keine Karten', + 'settings.billing.autoRecharge.paymentMethods': 'Zahlungsmethoden', + 'settings.billing.autoRecharge.rechargeInProgress': 'Aufladen läuft', + 'settings.billing.autoRecharge.spentThisWeek': '${spent} von ${limit} diese Woche verwendet', + 'settings.billing.autoRecharge.rechargeWhen': 'Aufladen, wenn der Saldo darunter fällt', + 'settings.billing.autoRecharge.saveSettings': 'Sparen…', + 'settings.billing.autoRecharge.saving': 'Sparen…', + 'settings.billing.autoRecharge.setDefault': 'mer:', + 'settings.billing.autoRecharge.subtitle': 'Untertitel', + 'settings.billing.autoRecharge.title': 'Aktiviere die automatische Aufladung', + 'settings.billing.autoRecharge.toggleAriaLabel': 'Automatisches Aufladen umschalten', + 'settings.billing.autoRecharge.weeklyLimit': 'Wöchentliches Ausgabenlimit', + 'settings.billing.history.desc': 'Beschr', + 'settings.billing.history.empty': 'Leer', + 'settings.billing.history.openPortal': 'Portal öffnen', + 'settings.billing.history.posted': 'Gepostet', + 'settings.billing.history.title': 'Titel', + 'settings.billing.inferenceBudget.cycleEnds': 'Der Zyklus endet', + 'settings.billing.inferenceBudget.exhausted': 'Erschöpft', + 'settings.billing.inferenceBudget.loadError': 'Ladefehler', + 'settings.billing.inferenceBudget.noBudgetDesc': 'Kein Budgetabzug', + 'settings.billing.inferenceBudget.noRecurringBudget': 'Kein wiederkehrendes Budget', + 'settings.billing.inferenceBudget.noRecurringPlanBudget': 'Kein wiederkehrendes Planbudget', + 'settings.billing.inferenceBudget.noRecurringWeeklyDesc': + 'Ihr aktueller Plan enthält kein wiederkehrendes wöchentliches Inferenzbudget. Die Nutzung wird stattdessen aus verfügbaren Credits bezahlt.', + 'settings.billing.inferenceBudget.remaining': 'Übrig', + 'settings.billing.inferenceBudget.remainingSummary': '{remaining} / {budget} verbleibend', + 'settings.billing.inferenceBudget.spentThisCycle': '{amount} in diesem Zyklus ausgegeben', + 'settings.billing.inferenceBudget.cycleEndsOn': 'Zyklus endet {date}', + 'settings.billing.inferenceBudget.exhaustedDesc': + 'Die inbegriffene Abonnementnutzung ist erschöpft. Guthaben aufladen, um AI weiterhin zu verwenden, ohne auf den nächsten Zyklus zu warten.', + 'settings.billing.inferenceBudget.discountVsPayg': + '{pct}% günstiger pro Anruf als Pay-as-you-go.', + 'settings.billing.inferenceBudget.cycleSpend': 'Zyklusausgaben', + 'settings.billing.inferenceBudget.totalAmount': '{amount} Gesamt', + 'settings.billing.inferenceBudget.inference': 'Inferenz', + 'settings.billing.inferenceBudget.integrations': 'Integrationen', + 'settings.billing.inferenceBudget.calls': '{count} Aufrufe', + 'settings.billing.inferenceBudget.dailySpend': 'Tägliche Ausgaben', + 'settings.billing.inferenceBudget.dailySpendPoint': '{date}: {amount}', + 'settings.billing.inferenceBudget.topModels': 'Topmodelle', + 'settings.billing.inferenceBudget.noInferenceUsage': 'Keine Inferenznutzung in diesem Zyklus.', + 'settings.billing.inferenceBudget.topIntegrations': 'Top-Integrationen', + 'settings.billing.inferenceBudget.noIntegrationUsage': + 'Keine Integrationsnutzung in diesem Zyklus.', + 'settings.billing.inferenceBudget.tenHourCap': 'Zehn-Stunden-Kappe', + 'settings.billing.inferenceBudget.title': 'Titel', + 'settings.billing.inferenceBudget.unableToLoad': 'Nutzungsdaten können nicht geladen werden.', + 'settings.billing.inferenceBudget.notAvailable': 'n/a', + 'settings.billing.payAsYouGo.available': 'Verfügbar', + 'settings.billing.payAsYouGo.chargeCustomAmount': 'Wird geöffnet…', + 'settings.billing.payAsYouGo.chooseTopUpDesc': 'Wähle „Aufladepreis“.', + 'settings.billing.payAsYouGo.chooseTopUpTitle': 'Wähle den Aufladetitel', + 'settings.billing.payAsYouGo.creditBalanceDesc': 'Guthabenbez', + 'settings.billing.payAsYouGo.creditBalanceTitle': 'Guthabentitel', + 'settings.billing.payAsYouGo.customAmount': 'Benutzerdefinierter Betrag', + 'settings.billing.payAsYouGo.enterAmount': 'Betrag eingeben', + 'settings.billing.payAsYouGo.opening': '{amount}', + 'settings.billing.payAsYouGo.promotionalCredits': 'Werbegutschriften', + 'settings.billing.payAsYouGo.topUpBalance': 'Aufladeguthaben', + 'settings.billing.payAsYouGo.topUpCredits': 'Guthaben aufladen', + 'settings.billing.payAsYouGo.unableToLoad': 'Der Ladeausgleich kann nicht durchgeführt werden.', + 'settings.billing.subscription.annual': 'Jährlich', + 'settings.billing.subscription.billedAnnually': 'Jährliche Abrechnung', + 'settings.billing.subscription.chooseSubtitle': 'Untertitel wählen', + 'settings.billing.subscription.chooseTitle': 'Titel wählen', + 'settings.billing.subscription.cryptoDesc': 'Krypto-Beschreibung', + 'settings.billing.subscription.cryptoQuestion': 'Krypto-Frage', + 'settings.billing.subscription.current': 'Aktuell', + 'settings.billing.subscription.currentPlan': 'Aktueller Plan', + 'settings.billing.subscription.monthly': 'Monatlich', + 'settings.billing.subscription.paymentConfirmed': 'Zahlung bestätigt', + 'settings.billing.subscription.perMonth': 'Pro Monat', + 'settings.billing.subscription.popular': 'Beliebt', + 'settings.billing.subscription.save': '{pct}', + 'settings.billing.subscription.upgrade': 'Upgrade', + 'settings.billing.subscription.waiting': 'Warten', + 'settings.billing.subscription.waitingPayment': 'Warten auf Zahlung', + 'settings.composio.apiKeyDesc': + 'Auf diesem Gerät ist derzeit ein Schlüssel vom Typ Composio API gespeichert.', + 'settings.composio.apiKeyExamplePlaceholder': 'ck_live_xxxxxxxxxxxxxxx', + 'settings.composio.apiKeyLabel': 'Composio API Schlüssel', + 'settings.composio.apiKeyStored': 'API Schlüssel gespeichert', + 'settings.composio.apiKeyStoredPlaceholder': '•·•······················', + 'settings.composio.clearedToBackend': 'In den Backend-Modus gewechselt', + 'settings.composio.confirmItem1': 'Ein Konto bei app.composio.dev mit einem API-Schlüssel', + 'settings.composio.confirmItem2': + 'Um jede Integration über dein persönliches Composio-Konto erneut zu verknüpfen', + 'settings.composio.confirmItem3': + 'Hinweis: Composio-Trigger (Echtzeit-Webhooks) werden noch nicht im Direktmodus ausgelöst, sondern nur bei synchronen Toolaufrufen', + 'settings.composio.confirmNeedItems': 'Du brauchst:', + 'settings.composio.confirmSwitch': 'Ich verstehe, zu Direct wechseln', + 'settings.composio.confirmTitle': '⚠️ Wechsel in den Direktmodus', + 'settings.composio.confirmWarning': + 'Deine vorhandenen Integrationen (Gmail, Slack, GitHub usw., die über OpenHuman verknüpft sind) sind nicht sichtbar – sie befinden sich im von OpenHuman verwalteten Composio-Mandanten.', + 'settings.composio.intro': + 'Composio integriert mehr als 250 externe Apps als Tools, die dein Agent aufrufen kann. Wähle aus, wie diese Werkzeugaufrufe weitergeleitet werden.', + 'settings.composio.title': 'Composio', + 'settings.composio.modeDirect': 'Direkt (bring deinen eigenen API-Schlüssel mit)', + 'settings.composio.modeDirectDesc': + 'Anrufe gehen direkt an backend.composio.dev. Souverän / offlinefreundlich. Die Werkzeugausführung erfolgt synchron; Echtzeit-Trigger-Webhooks werden noch nicht im Direktmodus weitergeleitet (Folgeproblem).', + 'settings.composio.modeManaged': 'Verwaltet (OpenHuman erledigt das für dich)', + 'settings.composio.modeManagedDesc': + 'OpenHuman leitet Tool-Aufrufe über unser Backend weiter (empfohlen). Auth wird vermittelt; du fügst niemals einen Composio API-Schlüssel ein. Webhooks werden vollständig weitergeleitet.', + 'settings.composio.routingMode': 'Routing-Modus', + 'settings.composio.saveErrorNoKey': + 'Speichern fehlgeschlagen. Der Direktmodus erfordert einen nicht leeren Schlüssel API.', + 'settings.composio.saving': 'Sparen…', + 'settings.composio.switching': 'Wechseln…', + 'settings.companion.title': 'Desktop-Begleiter', + 'settings.companion.session': 'Sitzung', + 'settings.companion.activeLabel': 'Aktiv', + 'settings.companion.inactiveStatus': 'Inaktiv', + 'settings.companion.stopping': 'Wird gestoppt…', + 'settings.companion.stopSession': 'Sitzung beenden', + 'settings.companion.starting': 'Wird gestartet…', + 'settings.companion.startSession': 'Sitzung starten', + 'settings.companion.sessionId': 'Sitzungs-ID', + 'settings.companion.turns': 'Drehungen', + 'settings.companion.remaining': 'Verbleibende', + 'settings.companion.configuration': 'Konfiguration', + 'settings.companion.hotkey': 'Hotkey', + 'settings.companion.activationMode': 'Aktivierungsmodus', + 'settings.companion.sessionTtl': 'Sitzungs-TTL', + 'settings.companion.screenCapture': 'Bildschirmaufnahme', + 'settings.companion.appContext': 'App-Kontext', + 'settings.cron.jobs.desc': 'Beschr', + 'settings.cron.jobs.empty': 'Keine zentralen Cron-Jobs gefunden.', + 'settings.cron.jobs.lastStatus': 'Letzter Stand', + 'settings.cron.jobs.loading': 'Cron-Jobs werden geladen...', + 'settings.cron.jobs.loadingRuns': 'Ladeläufe', + 'settings.cron.jobs.nextRun': 'Nächster Lauf', + 'settings.cron.jobs.pause': 'Pause', + 'settings.cron.jobs.paused': 'Pausiert', + 'settings.cron.jobs.recentRuns': 'Aktuelle Läufe', + 'settings.cron.jobs.removing': 'Entfernen', + 'settings.cron.jobs.resume': 'Lebenslauf', + 'settings.cron.jobs.runningNow': 'Läuft jetzt', + 'settings.cron.jobs.saving': 'Sparen…', + 'settings.cron.jobs.schedule': 'Zeitplan', + 'settings.cron.jobs.title': 'Kern-Cron-Jobs', + 'settings.cron.jobs.viewRuns': 'Läufe ansehen', + 'settings.localModel.deviceCapability.active': 'Aktiv', + 'settings.localModel.deviceCapability.appliedTier': 'Angewandte Stufe', + 'settings.localModel.deviceCapability.applying': 'Bewerben', + 'settings.localModel.deviceCapability.cores': '{count}', + 'settings.localModel.deviceCapability.couldNotLoadPresets': + 'Voreinstellungen konnten nicht geladen werden', + 'settings.localModel.deviceCapability.cpu': 'CPU', + 'settings.localModel.deviceCapability.customModelIds': 'Benutzerdefinierte Modell-IDs', + 'settings.localModel.deviceCapability.detected': 'Erkannt', + 'settings.localModel.deviceCapability.disabled': 'Deaktiviert', + 'settings.localModel.deviceCapability.disabledDesc': + 'Lokale KI ist deaktiviert. Alle Inferenzanfragen laufen über die Cloud.', + 'settings.localModel.deviceCapability.downloadingModels': '(Modelle herunterladen)', + 'settings.localModel.deviceCapability.downloadingSetupDesc': + 'Lade das OllamaSetup-Installationsprogramm (~2 GB) herunter und entpacke es. Dies kann bei der ersten Installation eine Minute dauern.', + 'settings.localModel.deviceCapability.failedToApplyPreset': + 'Voreinstellung konnte nicht angewendet werden', + 'settings.localModel.deviceCapability.gpu': 'GPU', + 'settings.localModel.deviceCapability.installFailed': 'Ollama Installation fehlgeschlagen', + 'settings.localModel.deviceCapability.installFailedDesc': + 'Das Installationsprogramm wurde beendet, bevor Ollama verwendbar war. Klicke auf „Wiederholen“, um es noch einmal zu versuchen, oder installiere es manuell von ollama.com.', + 'settings.localModel.deviceCapability.installFirst': 'Führe zuerst Ollama aus.', + 'settings.localModel.deviceCapability.installFirstDesc': + 'Lokale Ebenen hängen von einem extern verwalteten Ollama-Endpunkt ab. Starte es selbst, rufe die gewünschten Modelle ab und verwende weiterhin „Deaktiviert (Cloud-Fallback)“, bis die Laufzeit erreichbar ist.', + 'settings.localModel.deviceCapability.installOllamaFirst': + 'Führe zuerst Ollama aus, um diese Stufe zu verwenden', + 'settings.localModel.deviceCapability.installingOllama': 'Ollama installieren', + 'settings.localModel.deviceCapability.loadingDeviceInfo': 'Geräteinformationen werden geladen', + 'settings.localModel.deviceCapability.localAiDisabled': + 'Lokale KI deaktiviert – Cloud-Fallback wird verwendet.', + 'settings.localModel.deviceCapability.modelTier': 'Modellebene', + 'settings.localModel.deviceCapability.needsOllama': 'Braucht Ollama', + 'settings.localModel.deviceCapability.notDetected': 'Nicht erkannt', + 'settings.localModel.deviceCapability.disabledLowercase': 'deaktiviert', + 'settings.localModel.deviceCapability.presetDetails': + 'Chat: {chatModel} · Vision: {visionModel} · Ziel-RAM: {targetRamGb} GB', + 'settings.localModel.deviceCapability.ram': 'RAM', + 'settings.localModel.deviceCapability.recommended': 'Empfohlen', + 'settings.localModel.deviceCapability.retryInstall': 'Erneuter Versuch…', + 'settings.localModel.deviceCapability.retrying': 'Erneuter Versuch…', + 'settings.localModel.deviceCapability.starting': 'Beginnend mit …', + 'settings.localModel.download.audioPathPlaceholder': 'Absoluter Pfad zur Audiodatei', + 'settings.localModel.download.capabilityChat': 'Chat', + 'settings.localModel.download.capabilityEmbedding': 'Einbettung', + 'settings.localModel.download.capabilityAssets': 'Fähigkeitsressourcen', + 'settings.localModel.download.capabilityStt': 'STT', + 'settings.localModel.download.capabilityTts': 'TTS', + 'settings.localModel.download.capabilityVision': 'Vision', + 'settings.localModel.download.downloading': 'Herunterladen...', + 'settings.localModel.download.embeddingDimensions': 'Abmessungen: {dimensions}', + 'settings.localModel.download.embeddingModel': 'Modell: {modelId}', + 'settings.localModel.download.embeddingPlaceholder': 'Eine Eingabezeichenfolge pro Zeile...', + 'settings.localModel.download.embeddingVectors': 'Vektoren: {count}', + 'settings.localModel.download.noThinkMode': 'Kein Denkmodus', + 'settings.localModel.download.notAvailable': 'n/a', + 'settings.localModel.download.promptPlaceholder': + 'Gib eine beliebige Eingabeaufforderung ein und führe sie für das lokale Modell aus ...', + 'settings.localModel.download.quantizationPref': 'Quantisierungspräferenz', + 'settings.localModel.download.runEmbeddingTest': 'Laufen...', + 'settings.localModel.download.runPromptTest': 'Führe den Prompt-Test durch', + 'settings.localModel.download.runSummaryTest': 'Führe einen Zusammenfassungstest durch', + 'settings.localModel.download.runTranscriptionTest': 'Laufen...', + 'settings.localModel.download.runTtsTest': 'Laufen...', + 'settings.localModel.download.runVisionTest': 'Laufen...', + 'settings.localModel.download.running': 'Laufen...', + 'settings.localModel.download.runningPrompt': 'Laufaufforderung', + 'settings.localModel.download.summaryHelper': + 'Ruft „openhuman.inference_summarize“ über den Rust-Kern auf', + 'settings.localModel.download.summarizePlaceholder': + 'Füge Text ein, um ihn mit dem lokalen Modell zusammenzufassen ...', + 'settings.localModel.download.testCustomPrompt': + 'Teste die benutzerdefinierte Eingabeaufforderung', + 'settings.localModel.download.testEmbeddings': 'Einbettungen testen', + 'settings.localModel.download.testSummarization': 'Testzusammenfassung', + 'settings.localModel.download.testVisionPrompt': 'Test-Sehaufforderung', + 'settings.localModel.download.testVoiceInput': 'Spracheingabe testen (STT)', + 'settings.localModel.download.testVoiceOutput': 'Sprachausgabe testen (TTS)', + 'settings.localModel.download.transcript': 'Transkript:', + 'settings.localModel.download.ttsOutput': 'Ausgabe: {outputPath}', + 'settings.localModel.download.ttsOutputPlaceholder': 'Optionaler Ausgabepfad WAV', + 'settings.localModel.download.ttsPlaceholder': 'Gib den zu synthetisierenden Text ein...', + 'settings.localModel.download.ttsVoice': 'Stimme: {voiceId}', + 'settings.localModel.download.visionImagePlaceholder': + 'Eine Bildreferenz pro Zeile (Daten URI, URL oder lokale Pfadmarkierung)', + 'settings.localModel.download.visionPromptPlaceholder': + 'Gib eine Eingabeaufforderung für das Vision-Modell ein...', + 'settings.localModel.status.allChecksPassed': 'Alle Prüfungen bestanden', + 'settings.localModel.status.artifact': 'Artefakt', + 'settings.localModel.status.backend': 'Backend', + 'settings.localModel.status.binary': 'Binär', + 'settings.localModel.status.bootstrapResume': 'Bootstrap / Fortsetzen', + 'settings.localModel.status.checking': 'Überprüfen...', + 'settings.localModel.status.checkingOllama': 'Ollama wird überprüft', + 'settings.localModel.status.contextBelowMinimumBadge': + '{contextLength} ctx – unter {required} min', + 'settings.localModel.status.contextBelowMinimumTitle': + 'Abgelehnt: Kontextfenster-{contextLength}-Token liegen unter dem {required}-Token-Mindestwert, den die Speicherschicht erfordert. Der Rückruf würde durch stilles Abschneiden beschädigt werden.', + 'settings.localModel.status.contextOkBadge': '{contextLength} Kontext ✓', + 'settings.localModel.status.contextOkTitle': + 'Kontextfenster {contextLength}-Tokens erfüllen das Minimum an {required}-Tokens auf der Speicherebene.', + 'settings.localModel.status.contextUnknownBadge': 'ctx unbekannt', + 'settings.localModel.status.contextUnknownTitle': + 'Kontextfenster unbekannt; Es konnte nicht bestätigt werden, dass das {required}-Token-Memory-Layer-Mindestniveau erreicht wird.', + 'settings.localModel.status.customLocation': 'Benutzerdefinierter Standort', + 'settings.localModel.status.customLocationDesc': 'Benutzerdefinierte Standortbeschreibung', + 'settings.localModel.status.diagnosticsHint': + 'Klicke auf „Diagnose ausführen“, um zu überprüfen, ob Ollama ausgeführt wird und Modelle installiert sind.', + 'settings.localModel.status.downloadingUnknown': 'Wird heruntergeladen (Größe unbekannt)', + 'settings.localModel.status.eta': 'Eta', + 'settings.localModel.status.expectedModels': 'Erwartete Modelle', + 'settings.localModel.status.expectedChat': 'Chat: {model}', + 'settings.localModel.status.expectedEmbedding': 'Einbettung: {model}', + 'settings.localModel.status.expectedVision': 'Vision: {model}', + 'settings.localModel.status.externalProcess': 'Externer Prozess', + 'settings.localModel.status.forceRebootstrap': 'Neustart erzwingen', + 'settings.localModel.status.generationTps': 'Generierungs-TPS', + 'settings.localModel.status.hideErrorDetails': 'Fehlerdetails ausblenden', + 'settings.localModel.status.installManually': 'Manuell installieren', + 'settings.localModel.status.installManuallyFrom': 'Manuell installieren von', + 'settings.localModel.status.installOllama': 'Beginnend mit …', + 'settings.localModel.status.installedModels': 'Installierte Modelle', + 'settings.localModel.status.installing': 'Installieren...', + 'settings.localModel.status.installingOllama': 'Ollama-Laufzeit wird installiert...', + 'settings.localModel.status.issues': 'Probleme', + 'settings.localModel.status.issuesFound': '{count} Problem(e) gefunden', + 'settings.localModel.status.lastLatency': 'Letzte Latenz', + 'settings.localModel.status.model': 'Modell', + 'settings.localModel.status.notAvailable': 'n/a', + 'settings.localModel.status.notFound': 'Nicht gefunden', + 'settings.localModel.status.notRunning': 'Läuft nicht', + 'settings.localModel.status.ollamaBinaryPath': 'Ollama Binärpfad', + 'localModel.ollamaServer.helperText': 'Beispiel: http://192.168.1.5:11434', + 'localModel.ollamaServer.label': 'Ollama-Server-URL', + 'localModel.ollamaServer.modelCount': 'Modelle', + 'localModel.ollamaServer.placeholder': 'http://localhost:11434', + 'localModel.ollamaServer.reachable': 'Erreichbar', + 'localModel.ollamaServer.resetButton': 'Auf Standard zurücksetzen', + 'localModel.ollamaServer.saveButton': 'Speichern', + 'localModel.ollamaServer.testButton': 'Testverbindung', + 'localModel.ollamaServer.unreachable': 'Unerreichbar', + 'localModel.ollamaServer.validationError': 'Muss ein gültiges http:// oder https:// sein URL', + 'settings.localModel.status.ollamaDiagnostics': 'Ollama Diagnose', + 'settings.localModel.status.ollamaNotInstalled': 'Ollama Laufzeit nicht verfügbar', + 'settings.localModel.status.ollamaNotInstalledDesc': + 'OpenHuman behandelt jetzt Ollama als externe Inferenzlaufzeit. Starte deinen eigenen Ollama-Server, rufe die gewünschten Modelle ab und richte das Workload-Routing darauf aus.', + 'settings.localModel.status.progress': 'Fortschritt', + 'settings.localModel.status.provider': 'Anbieter', + 'settings.localModel.status.retryBootstrap': 'Versuche Bootstrap erneut', + 'settings.localModel.status.runDiagnostics': 'Überprüfen...', + 'settings.localModel.status.running': 'Laufen', + 'settings.localModel.status.runningExternalProcess': + 'Wird über einen externen Prozess ausgeführt', + 'settings.localModel.status.runtimeStatus': 'Laufzeitstatus', + 'settings.localModel.status.server': 'Server', + 'settings.localModel.status.setPath': 'Einstellung...', + 'settings.localModel.status.setting': 'Einstellung...', + 'settings.localModel.status.showErrorDetails': 'Fehlerdetails ausblenden', + 'settings.localModel.status.showInstallErrorDetails': 'Fehlerdetails ausblenden', + 'settings.localModel.status.suggestedFixes': 'Vorgeschlagene Korrekturen', + 'settings.localModel.status.thenSetPath': 'Dann lege den Pfad fest', + 'settings.localModel.status.triggering': 'Auslösen...', + 'settings.localModel.status.unavailable': 'Nicht verfügbar', + 'settings.localModel.status.working': 'Arbeiten...', + 'settings.developerMenu.ai.title': 'KI-Konfiguration', + 'settings.developerMenu.ai.desc': + 'Cloud-Anbieter, lokale Ollama-Modelle und Routing pro Workload', + 'settings.developerMenu.screenAwareness.title': 'Bildschirmbewusstsein', + 'settings.developerMenu.screenAwareness.desc': + 'Bildschirmaufnahmeberechtigungen, Überwachungsrichtlinien und Sitzungskontrollen', + 'settings.developerMenu.messagingChannels.title': 'Messaging-Kanäle', + 'settings.developerMenu.messagingChannels.desc': + 'Konfiguriere die Authentifizierungsmodi Telegram/Discord und das Standardkanalrouting', + 'settings.developerMenu.tools.title': 'Werkzeuge', + 'settings.developerMenu.tools.desc': + 'Aktiviere oder deaktiviere Funktionen, die OpenHuman in deinem Namen nutzen kann', + 'settings.developerMenu.agentChat.title': 'Agenten-Chat', + 'settings.developerMenu.agentChat.desc': + 'Test-Agent-Konversation mit Modell- und Temperaturüberschreibungen', + 'settings.developerMenu.devWorkflow.title': 'Entwicklungs-Workflow', + 'settings.developerMenu.devWorkflow.desc': + 'Autonomer Agent, der Ihre GitHub-Probleme auswählt und PRs nach einem Zeitplan einstellt', + 'settings.developerMenu.devWorkflow.panelDesc': + 'Konfigurieren Sie einen autonomen Entwickler-Agenten, der Ihnen zugewiesene GitHub-Probleme auswählt und Pull-Anfragen automatisch nach einem Zeitplan auslöst.', + 'settings.developerMenu.skillsRunner.title': 'Skills-Runner', + 'settings.developerMenu.skillsRunner.desc': + 'Führen Sie jede gebündelte Fähigkeit ad-hoc aus — füllen Sie ihre Eingaben aus und feuern Sie einen autonomen Hintergrundlauf ab', + 'settings.developerMenu.skillsRunner.panelDesc': + 'Wähle eine gebündelte Fertigkeit aus, fülle ihre deklarierten Eingaben aus und feuere einen Feuer-und-Vergesst-Hintergrundlauf ab. Verwenden Sie stattdessen Dev Workflow, wenn Sie einen Cron-geplanten wiederkehrenden Job wünschen.', + 'settings.skillsRunner.skill': 'Fähigkeit', + 'settings.skillsRunner.selectSkill': 'Wählen Sie eine Fertigkeit aus…', + 'settings.skillsRunner.loadingSkills': 'Fertigkeiten werden geladen…', + 'settings.skillsRunner.loadingDescription': 'Skill-Eingaben werden geladen…', + 'settings.skillsRunner.noInputs': 'Dieser Skill deklariert keine Eingaben.', + 'settings.skillsRunner.placeholder.required': 'erforderlich', + 'settings.skillsRunner.runNow': 'Jetzt ausführen', + 'settings.skillsRunner.starting': 'Beginnend mit…', + 'settings.skillsRunner.started': 'Gestartet – Lauf-ID:', + 'settings.skillsRunner.logPath': 'Protokoll:', + 'settings.skillsRunner.error.listSkills': 'Fertigkeiten konnten nicht geladen werden:', + 'settings.skillsRunner.error.describe': 'Eingaben konnten nicht geladen werden:', + 'settings.skillsRunner.error.missingRequired': 'Fehlende erforderliche Eingabe(n):', + 'settings.skillsRunner.error.run': 'Der Lauf konnte nicht gestartet werden:', + 'settings.skillsRunner.error.preflightGate': 'Das Preflight-Gate ist ausgefallen', + 'settings.skillsRunner.schedule.heading': 'Zeitplan (wiederkehrend)', + 'settings.skillsRunner.schedule.help': + 'Speichern Sie diesen Skill + Eingaben als wiederkehrenden Cronjob. Der Agent ruft bei jedem Tick run_skill auf.', + 'settings.skillsRunner.schedule.frequency': 'Frequenz', + 'settings.skillsRunner.schedule.every30min': 'Alle 30 Minuten', + 'settings.skillsRunner.schedule.everyHour': 'Jede Stunde', + 'settings.skillsRunner.schedule.every2hours': 'Alle 2 Stunden', + 'settings.skillsRunner.schedule.every6hours': 'Alle 6 Stunden', + 'settings.skillsRunner.schedule.onceDaily': 'Einmal täglich (9:00)', + 'settings.skillsRunner.schedule.save': 'Zeitplan speichern', + 'settings.skillsRunner.schedule.saving': 'Sichern…', + 'settings.skillsRunner.schedule.saved': 'Zeitplan gespeichert.', + 'settings.skillsRunner.schedule.error': 'Das Speichern des Zeitplans ist fehlgeschlagen:', + 'settings.skillsRunner.schedule.loadingJobs': 'Vorhandene Zeitpläne werden geladen…', + 'settings.skillsRunner.schedule.noJobs': + 'Für diesen Skill sind noch keine Zeitpläne gespeichert.', + 'settings.skillsRunner.schedule.existing': 'Geplante Jobs für diesen Skill:', + 'settings.skillsRunner.schedule.runNow': 'Laufen', + 'settings.skillsRunner.schedule.remove': 'Entlassen', + 'settings.skillsRunner.scheduleEnabled': 'Aktiviert', + 'settings.skillsRunner.scheduleDisabled': 'Angehalten', + 'settings.skillsRunner.scheduleToggleAria': 'Zeitplan aktiviert umschalten', + 'settings.skillsRunner.schedule.history': 'Geschichte', + 'settings.skillsRunner.schedule.historyLoading': 'Verlauf wird geladen…', + 'settings.skillsRunner.schedule.historyEmpty': 'Für diesen Zeitplan gibt es noch keine Läufe.', + 'settings.skillsRunner.schedule.historyNoOutput': 'Keine Ausgabe erfasst.', + 'settings.skillsRunner.schedule.active': 'Aktiv', + 'settings.skillsRunner.schedule.lastRunLabel': 'zuletzt:', + 'settings.skillsRunner.recentRuns.headingForSkill': 'Aktuelle Läufe für diesen Skill', + 'settings.skillsRunner.recentRuns.headingAll': 'Aktuelle Skillruns (alle)', + 'settings.skillsRunner.recentRuns.refresh': 'Aktualisieren', + 'settings.skillsRunner.recentRuns.loading': 'Letzte Läufe werden geladen…', + 'settings.skillsRunner.recentRuns.empty': 'Keine aktuellen Läufe.', + 'settings.skillsRunner.viewer.loading': 'Protokoll wird geladen…', + 'settings.skillsRunner.viewer.tailing': 'Live-Tailing', + 'settings.skillsRunner.viewer.fetching': 'fetching', + 'settings.skillsRunner.viewer.error': 'Das Lesen des Protokolls ist fehlgeschlagen:', + 'settings.skillsRunner.repoPicker.loading': 'Repositorys werden geladen…', + 'settings.skillsRunner.repoPicker.select': 'Wählen Sie ein Repository aus…', + 'settings.skillsRunner.repoPicker.empty': + 'Es wurden keine Repositorys zurückgegeben. Verbinden Sie GitHub über Composio, um diese Liste zu füllen.', + 'settings.skillsRunner.repoPicker.notConnected': + 'GitHub ist nicht über Composio verbunden. Verbinde es zunächst unter Skills → Composio.', + 'settings.skillsRunner.repoPicker.privateTag': '(privat)', + 'settings.skillsRunner.branchPicker.needRepo': 'Wählen Sie zuerst ein Repo aus...', + 'settings.skillsRunner.branchPicker.loading': 'Zweige werden geladen…', + 'settings.skillsRunner.branchPicker.select': 'Wählen Sie eine Filiale aus…', + 'settings.devWorkflow.githubRepository': 'GitHub-Repository', + 'settings.devWorkflow.loadingRepositories': 'Repositories werden geladen...', + 'settings.devWorkflow.selectRepository': 'Wählen Sie ein Repository aus', + 'settings.devWorkflow.privateTag': '(privat)', + 'settings.devWorkflow.detectingForkInfo': 'Gabelinformationen werden erkannt...', + 'settings.devWorkflow.forkDetected': 'Gabel erkannt', + 'settings.devWorkflow.upstream': 'Upstream:', + 'settings.devWorkflow.forkPrNote': 'PRs werden gegen das Upstream-Repository angehoben.', + 'settings.devWorkflow.notForkNote': + 'Keine Gabel. PRs werden direkt gegen dieses Repository angehoben.', + 'settings.devWorkflow.targetBranch': 'Ziel-Branch', + 'settings.devWorkflow.targetBranchNote': 'PRs werden gegen diese Niederlassung erhoben', + 'settings.devWorkflow.loadingBranches': 'Filialen werden geladen...', + 'settings.devWorkflow.runFrequency': 'Ausführungsfrequenz', + 'settings.devWorkflow.runFrequencyNote': + 'Wie oft sollte der Agent nach Problemen suchen und PRs einreichen.', + 'settings.devWorkflow.updateConfiguration': 'Update Konfiguration', + 'settings.devWorkflow.saveConfiguration': 'Konfiguration speichern', + 'settings.devWorkflow.remove': 'Entlassen', + 'settings.devWorkflow.saved': 'Gespeichert', + 'settings.devWorkflow.activeConfiguration': 'Aktive Konfiguration', + 'settings.devWorkflow.activeConfigRepository': 'Repository:', + 'settings.devWorkflow.activeConfigUpstream': 'Upstream:', + 'settings.devWorkflow.activeConfigTargetBranch': 'Zielbranch:', + 'settings.devWorkflow.activeConfigSchedule': 'Zeitplan: ', + 'settings.devWorkflow.enabled': 'Aktiviert', + 'settings.devWorkflow.paused': 'Angehalten', + 'settings.devWorkflow.nextRun': 'Nächste Ausführung', + 'settings.devWorkflow.lastRun': 'Letzte Ausführung', + 'settings.devWorkflow.runNow': 'Jetzt ausführen', + 'settings.devWorkflow.running': 'Läuft…', + 'settings.devWorkflow.recentRuns': 'Letzte Durchläufe', + 'settings.devWorkflow.cronSaveError': 'Fehler beim Speichern der VKK-Konfiguration', + 'settings.devWorkflow.lastOutput': 'Letzte Ausgabe', + 'settings.devWorkflow.noOutput': 'Keine Ausgabe erfasst', + 'settings.devWorkflow.runningStatus': + 'Agent läuft — er wählt ein Problem aus und arbeitet an einer Lösung...', + 'settings.devWorkflow.errorNotConnected': + 'GitHub ist nicht verbunden. Bitte verbinden Sie GitHub zuerst über Einstellungen > Erweitert > Composio.', + 'settings.devWorkflow.errorToolNotEnabled': + 'Das GITHUB_LIST_REPOSITORIES_FOR_THE_AUTHENTICATED_USER-Tool ist in diesem Backend nicht aktiviert. Bitten Sie Ihren Administrator, es in der Composio-Integration (backend#842) zu aktivieren.', + 'settings.devWorkflow.errorNotAuthenticated': + 'Nicht authentifiziert. Bitte melden Sie sich zuerst an.', + 'settings.devWorkflow.errorNoRepositories': + 'Keine Repositories für dieses GitHub-Konto gefunden.', + 'settings.devWorkflow.schedule.every30min': 'Alle 30 Minuten', + 'settings.devWorkflow.schedule.everyHour': 'Jede Stunde', + 'settings.devWorkflow.schedule.every2hours': 'Alle 2 Stunden', + 'settings.devWorkflow.schedule.every6hours': 'Alle 6 Stunden', + 'settings.devWorkflow.schedule.onceDaily': 'Einmal täglich (09:00 Uhr)', + 'settings.developerMenu.cronJobs.title': 'Cron-Jobs', + 'settings.developerMenu.cronJobs.desc': + 'Zeige geplante Jobs für Laufzeitfähigkeiten an und konfiguriere sie', + 'settings.developerMenu.localModelDebug.title': 'Lokales Modell-Debug', + 'settings.developerMenu.localModelDebug.desc': + 'Ollama-Konfiguration, Asset-Downloads, Modelltests und Diagnose', + 'settings.developerMenu.webhooks.title': 'Webhooks', + 'settings.developerMenu.webhooks.desc': + 'Prüfe Laufzeit-Webhook-Registrierungen und erfasste Anforderungsprotokolle', + 'settings.developerMenu.eventLog.title': 'Ereignisprotokoll', + 'settings.developerMenu.eventLog.desc': + 'Farbcodierter Live-Stream aller Agenten-, Tool- und Systemereignisse', + 'settings.developerMenu.eventLog.allTypes': 'Alle Typen', + 'settings.developerMenu.eventLog.filterAgent': 'Filter …', + 'settings.developerMenu.eventLog.download': 'Herunterladen', + 'settings.developerMenu.eventLog.events': 'events', + 'settings.developerMenu.eventLog.live': 'Live', + 'settings.developerMenu.eventLog.disconnected': 'Nicht verbunden', + 'settings.developerMenu.eventLog.waiting': 'Warten auf Ereignisse...', + 'settings.developerMenu.eventLog.notConnected': 'Mit dem Hauptprogramm verbundenName', + 'settings.developerMenu.eventLog.jumpToLatest': 'Zur neuesten Seite springen', + 'settings.developerMenu.eventLog.badge.tool': 'TOOL', + 'settings.developerMenu.eventLog.badge.agent': 'AGENT', + 'settings.developerMenu.eventLog.badge.info': 'INFO', + 'settings.developerMenu.eventLog.badge.mem': 'MEM', + 'settings.developerMenu.eventLog.badge.chan': 'CHAN', + 'settings.developerMenu.eventLog.badge.cron': 'CRON', + 'settings.developerMenu.eventLog.badge.hook': 'HOOK', + 'settings.developerMenu.eventLog.badge.warn': 'WARN', + 'settings.developerMenu.eventLog.badge.skill': 'SKILL', + 'settings.developerMenu.eventLog.badge.comp': 'COMP', + 'settings.developerMenu.eventLog.badge.mcp': 'MCP', + 'settings.developerMenu.intelligence.title': 'Intelligenz', + 'settings.developerMenu.intelligence.desc': + 'Gedächtnisarbeitsbereich, Unterbewusstseinsmotor, Träume und Einstellungen', + 'settings.developerMenu.notificationRouting.title': 'Benachrichtigungsweiterleitung', + 'settings.developerMenu.notificationRouting.desc': + 'KI-Wichtigkeitsbewertung und Orchestrator-Eskalation für Integrationswarnungen', + 'settings.developerMenu.composeioTriggers.title': 'ComposeIO Auslöser', + 'settings.developerMenu.composeioTriggers.desc': + 'Sieh dir den ComposeIO-Triggerverlauf und das Archiv an', + 'settings.developerMenu.composioRouting.title': 'Composio Routing (Direktmodus)', + 'settings.developerMenu.composioRouting.desc': + 'Bring deinen eigenen Composio API-Schlüssel mit und leite Anrufe direkt an backend.composio.dev weiter', + 'settings.developerMenu.integrationTriggers.title': 'Integrationsauslöser', + 'settings.developerMenu.integrationTriggers.desc': + 'Konfiguriere KI-Triage-Einstellungen für Composio-Integrationsauslöser', + 'settings.developerMenu.mcpServer.title': 'MCP-Server', + 'settings.developerMenu.mcpServer.desc': + 'Konfiguriere externe MCP-Clients für die Verbindung mit OpenHuman', + 'settings.developerMenu.autonomy.title': 'Agent-Autonomie', + 'settings.developerMenu.autonomy.desc': + 'Aktionsraten-Limits und Sicherheitsschwellen für Werkzeuge', + 'settings.mcpServer.title': 'MCP-Server', + 'settings.mcpServer.toolsSectionTitle': 'Verfügbare Werkzeuge', + 'settings.mcpServer.toolsSectionDesc': + 'Werkzeuge, die über den MCP-stdio-Server bereitgestellt werden, wenn openhuman-core mcp ausgeführt wird', + 'settings.mcpServer.configSectionTitle': 'Client-Konfiguration', + 'settings.mcpServer.configSectionDesc': + 'Wähle deinen MCP-Client aus, um den passenden Konfigurationsausschnitt zu erzeugen', + 'settings.mcpServer.copySnippet': 'In die Zwischenablage kopieren', + 'settings.mcpServer.copied': 'Kopiert!', + 'settings.mcpServer.openConfigFile': 'Konfigurationsdatei öffnen', + 'settings.mcpServer.binaryPathNotFound': + 'OpenHuman-Binärdatei nicht gefunden. Wenn du aus dem Quellcode arbeitest, baue sie mit: cargo build --bin openhuman-core', + 'settings.mcpServer.openConfigError': 'Konfigurationsdatei konnte nicht geöffnet werden', + 'settings.mcpServer.clientClaudeDesktop': 'Claude Desktop', + 'settings.mcpServer.clientCursor': 'Cursor', + 'settings.mcpServer.clientCodex': 'Codex', + 'settings.mcpServer.clientZed': 'ZED', + 'settings.mcpServer.configFilePath': 'Konfigurationsdatei', + 'settings.mcpServer.clientSelectorAriaLabel': 'MCP-Client-Auswahl', + 'settings.appearance.menuDesc': 'Wähle hell, dunkel oder passend zu deinem Systemthema', + 'settings.agentAccess.title': 'Zugriff auf das Agenten-Betriebssystem', + 'settings.agentAccess.menuDesc': + 'Steuern Sie, wo der Agent read/write kann und ob er die Shell verwenden kann.', + 'settings.agentAccess.loadError': 'Zugriffseinstellungen konnten nicht geladen werden', + 'settings.agentAccess.saveError': 'Speichern der Einstellungen fehlgeschlagen', + 'settings.agentAccess.saved': 'Gespeichert — gilt für deine nächste Nachricht.', + 'settings.agentAccess.desktopOnly': + 'Die Zugriffseinstellungen sind nur in der Desktop-App verfügbar.', + 'settings.agentAccess.loading': 'Laden…', + 'settings.agentAccess.accessMode': 'Aufrufmodus', + 'settings.agentAccess.tier.readonly.title': 'Nur lesen', + 'settings.agentAccess.tier.readonly.desc': + 'Liest Dateien und führt schreibgeschützte Befehle zum Erkunden aus — schreibt, bearbeitet oder führt jedoch niemals etwas aus, das den Status ändert.', + 'settings.agentAccess.tier.supervised.title': 'Vor der Bearbeitung fragen', + 'settings.agentAccess.tier.supervised.desc': + 'Erstellt neue Dateien frei, bittet aber um Ihre Zustimmung, bevor Sie eine vorhandene Datei bearbeiten, einen Befehl ausführen, das Netzwerk erreichen oder etwas installieren.', + 'settings.agentAccess.tier.full.title': 'Vollzugriff', + 'settings.agentAccess.tier.full.desc': + 'Führt Befehle mit Ihrem vollständigen Benutzerkontozugriff aus — es kann read/write überall dort ausführen, wo es erlaubt ist, mit Ausnahme von Anmeldeinformationen und Systemspeichern. Destruktive Befehle, Netzwerkzugriff und Installationen müssen noch genehmigt werden.', + 'settings.agentAccess.defaultTag': '(standard)', + 'settings.agentAccess.fullWarning': + '⚠ Vollzugriff führt Befehle mit Ihrem vollständigen Kontozugriff aus und ist nicht sandboxed. Aktivieren Sie es nur, wenn Sie dem Agenten dieses Geräts anvertrauen. Anmeldeinformationen und Systemverzeichnisse bleiben blockiert, und destruktive Netzwerk- und Installationsaktionen erfordern immer noch die Genehmigung.', + 'settings.agentAccess.confine.label': 'Auf Arbeitsbereich beschränken', + 'settings.agentAccess.confine.desc': + 'Beschränken Sie den Agenten auf das Arbeitsbereichsverzeichnis (plus alle gewährten Ordner), je nachdem, welcher Zugriffsmodus ausgewählt ist. Wenn sie ausgeschaltet ist, kann sie an jeden Ort gelangen, den Ihr Benutzer erreichen kann — mit Ausnahme der immer gesperrten Anmeldeinformationen und Systemverzeichnisse.', + 'settings.agentAccess.requireTaskPlanApproval.label': + 'Erfordern Sie die Genehmigung des Aufgabenplans', + 'settings.agentAccess.requireTaskPlanApproval.desc': + 'Pausieren Sie, bevor ein zugewiesener Agent ein vom Agenten verfasstes Aufgaben-Briefing ausführt.', + 'settings.agentAccess.grantedFolders': 'Erteilte Ordner', + 'settings.agentAccess.alwaysAllow': 'Immer erlaubte Werkzeuge', + 'settings.agentAccess.alwaysAllowDesc': + 'Tools, die Sie im Chatlauf ohne zu fragen als "Immer zulassen" markiert haben. Entfernen Sie eine, um erneut aufgefordert zu werden.', + 'settings.agentAccess.alwaysAllowNone': 'Noch keine immer erlaubten Tools.', + 'settings.agentAccess.grantedDesc': + 'Ordner, die der Agent zusätzlich zum Arbeitsbereich lesen und schreiben kann. Anmeldedatenspeicher (~/.ssh, ~/.gnupg, ~/.aws, Schlüsselanhänger) und Systemverzeichnisse (/etc, /System, C:\\Windows,…) werden immer blockiert, auch innerhalb eines zugewiesenen Ordners.', + 'settings.agentAccess.noneGranted': 'Keine Ordner gewährt.', + 'settings.agentAccess.readWrite': 'Lesen+Schreiben', + 'settings.agentAccess.readOnly': 'read-only', + 'settings.agentAccess.remove': 'Entlassen', + 'settings.agentAccess.pathPlaceholder': 'Absoluter Ordnerpfad', + 'settings.agentAccess.accessLevelLabel': 'Auf Ebene zugreifen', + 'settings.agentAccess.add': 'Hinzufügen', + 'settings.agentAccess.saving': 'Sichern…', + 'settings.agentAccess.changesApply': 'Änderungen gelten für deine nächste Nachricht.', + 'settings.appearance.title': 'Aussehen', + 'settings.appearance.themeHeading': 'Thema', + 'settings.appearance.themeAria': 'Thema', + 'settings.appearance.modeLight': 'Licht', + 'settings.appearance.modeLightDesc': 'Helle Flächen, dunkler Text.', + 'settings.appearance.modeDark': 'Dunkel', + 'settings.appearance.modeDarkDesc': + 'Dunkle Oberflächen, nach Einbruch der Dunkelheit angenehmer für die Augen.', + 'settings.appearance.modeSystem': 'Match-System', + 'settings.appearance.modeSystemDesc': + 'Folgt den Einstellungen für das Erscheinungsbild deines Betriebssystems.', + 'settings.appearance.helperText': + 'Der Dunkelmodus schaltet die gesamte App – Chat, Einstellungen, Bedienfelder – auf eine dunkle Palette um. „Match System“ verfolgt das Erscheinungsbild deines Betriebssystems und aktualisiert es live.', + 'settings.appearance.tabBarHeading': 'Untere Tab-Leiste', + 'settings.appearance.tabBarAlwaysShowLabels': 'Beschriftungen immer anzeigen', + 'settings.appearance.tabBarAlwaysShowLabelsDesc': + 'Wenn diese Option deaktiviert ist, werden Beschriftungen nur beim Hover oder für die aktive Registerkarte angezeigt.', + 'settings.mascot.active': 'Aktiv', + 'settings.mascot.characterDesc': 'Charakterbeschreibung', + 'settings.mascot.characterHeading': 'Zeichenüberschrift', + 'settings.mascot.customGifError': + 'GIF konnte nicht geladen werden. Bitte überprüfe die URL und versuche es erneut.', + 'settings.mascot.customGifHeading': 'Benutzerdefinierter GIF-Avatar', + 'settings.mascot.customGifLabel': 'URL für benutzerdefinierten GIF-Avatar', + 'settings.mascot.customGifPlaceholder': 'https://example.com/avatar.gif', + 'settings.mascot.characterPreview': 'Vorschau', + 'settings.mascot.characterStates': 'Staaten', + 'settings.mascot.characterVisemes': 'Mundbilder', + 'settings.mascot.colorAria': 'OpenHuman Farbe', + 'settings.mascot.colorDesc': 'Farbbeschreibung', + 'settings.mascot.colorHeading': 'Farbüberschrift', + 'settings.mascot.colorBlack': 'Schwarz', + 'settings.mascot.colorBurgundy': 'Burgund', + 'settings.mascot.colorCustom': 'Angepasst', + 'settings.mascot.colorNavy': 'Marine', + 'settings.mascot.primaryColor': 'Primär Farbe', + 'settings.mascot.secondaryColor': 'Sekundär', + 'settings.mascot.colorYellow': 'Gelb', + 'settings.mascot.libraryUnavailable': 'OpenHuman Bibliothek nicht verfügbar', + 'settings.mascot.title': 'OpenHuman', + 'settings.mascot.loadingLibrary': 'OpenHuman-Bibliothek wird geladen…', + 'settings.mascot.loadDetailError': 'Maskottchen konnte nicht geladen werden.', + 'settings.mascot.loadLibraryError': 'Maskottchenbibliothek konnte nicht geladen werden.', + 'settings.mascot.localDefault': 'Lokal OpenHuman (Standard)', + 'settings.mascot.menuTitle': 'Maskottchen', + 'settings.mascot.menuDesc': + 'Wähle die Maskottchenfarbe aus, die in der gesamten App verwendet wird', + 'settings.mascot.noCharacters': 'Es sind noch keine OpenHuman Zeichen verfügbar', + 'settings.mascot.noColorVariants': 'Keine Farbvarianten', + 'settings.mascot.voice.current': 'aktuell', + 'settings.mascot.voice.customDesc': + 'Sprach-IDs findest du unter api.elevenlabs.io/v1/voices oder in deinem ElevenLabs-Dashboard. Es wird nur die ID gespeichert – dein API-Schlüssel bleibt im Backend.', + 'settings.mascot.voice.customHeading': 'Benutzerdefinierte Sprach-ID', + 'settings.mascot.voice.customOption': 'Andere (Sprach-ID einfügen)…', + 'settings.mascot.voice.customPlaceholder': 'z.B. 21m00Tcm4TlvDq8ikWAM', + 'settings.mascot.voice.desc': + 'Wähle die ElevenLabs-Stimme aus, die das Maskottchen für gesprochene Antworten verwendet. Filtere nach Geschlecht, wähle aus der kuratierten Liste aus, füge eine benutzerdefinierte ID ein oder lass die App eine Stimme auswählen, die deiner Benutzeroberflächensprache entspricht.', + 'settings.mascot.voice.genderFemale': 'Weiblich', + 'settings.mascot.voice.genderHeading': 'Stimmgeschlecht', + 'settings.mascot.voice.genderMale': 'Männlich', + 'settings.mascot.voice.heading': 'Stimme', + 'settings.mascot.voice.preset': 'Sprachvoreinstellung', + 'settings.mascot.voice.presetHeading': 'Sprachvoreinstellung', + 'settings.mascot.voice.preview': 'Vorschau der Stimme', + 'settings.mascot.voice.previewError': 'Die Sprachvorschau ist fehlgeschlagen', + 'settings.mascot.voice.previewText': + 'Hallo, ich bin Ihre Assistentin. Dies ist eine Sprachvorschau.', + 'settings.mascot.voice.previewing': 'Vorschau...', + 'settings.mascot.voice.reset': 'Auf Standard zurücksetzen', + 'settings.mascot.voice.useLocaleDefault': 'Passe die App-Sprache an', + 'settings.mascot.voice.useLocaleDefaultDesc': + 'Wähle automatisch eine Stimme für die aktuelle Schnittstellensprache aus.', + 'settings.persona.title': 'Persona', + 'settings.persona.menuTitle': 'Persona', + 'settings.persona.menuDesc': + 'Name, Persönlichkeit, Avatar und Stimme – Ihr Assistent als eine Identität', + 'settings.persona.identityHeading': 'Identität', + 'settings.persona.identityDesc': + 'Ein Anzeigename und eine kurze Beschreibung für Ihren Assistenten. Wird in der App angezeigt; ändert nichts an der Begründung des Assistenten.', + 'settings.persona.displayNameLabel': 'Anzeigename', + 'settings.persona.displayNamePlaceholder': 'z.B. Nova', + 'settings.persona.descriptionLabel': 'Beschreibung', + 'settings.persona.descriptionPlaceholder': + 'z.B. Ein ruhiger, prägnanter Assistent für mein Team.', + 'settings.persona.soul.heading': 'Persönlichkeit (SOUL.md)', + 'settings.persona.soul.desc': + 'Der Persönlichkeitsaufforderung folgt der Assistent in jedem Gespräch. Änderungen werden in Ihrem Arbeitsbereich gespeichert und werden bei der nächsten Antwort wirksam.', + 'settings.persona.soul.editorLabel': 'Inhalte von SOUL.md', + 'settings.persona.soul.reset': 'Auf Standard zurücksetzen', + 'settings.persona.soul.usingDefault': 'Verwendung der mitgelieferten Standardeinstellung', + 'settings.persona.soul.loadError': 'SOUL.md konnte nicht geladen werden', + 'settings.persona.soul.saveError': 'SOUL.md konnte nicht gespeichert werden', + 'settings.persona.soul.resetError': 'SOUL.md konnte nicht zurückgesetzt werden', + 'settings.persona.appearanceHeading': 'Avatar und Stimme', + 'settings.persona.appearanceDesc': + 'Maskottchenfarbe, benutzerdefinierter GIF-Avatar und Antwortstimme werden in den Maskottcheneinstellungen konfiguriert.', + 'settings.persona.openMascotSettings': 'Öffnen Sie die Maskottchen-Einstellungen', + 'settings.memoryWindow.balanced.badge': 'Empfohlen', + 'settings.memoryWindow.balanced.hint': + 'Sinnvolle Standardeinstellung – gute Kontinuität, ohne bei jedem Lauf zusätzliche Token zu verbrennen.', + 'settings.memoryWindow.balanced.label': 'Ausgewogen', + 'settings.memoryWindow.description': + 'Wie viel gespeicherter Kontext OpenHuman in jede neue Agentenausführung eingefügt wird. Bei größeren Fenstern ist man sich früherer Gespräche besser bewusst, verbraucht aber bei jedem Durchlauf mehr Token – und kostet mehr.', + 'settings.memoryWindow.extended.badge': 'Mehr Kontext', + 'settings.memoryWindow.extended.hint': + 'Bei jedem Lauf wird mehr Langzeitgedächtnis injiziert. Höhere Token-Kosten pro Spielzug.', + 'settings.memoryWindow.extended.label': 'Erweitert', + 'settings.memoryWindow.maximum.badge': 'Höchste Kosten', + 'settings.memoryWindow.maximum.hint': + 'Das größte sichere Fenster. Beste Kontinuität, deutlich höhere Token-Rechnung bei jedem Lauf.', + 'settings.memoryWindow.maximum.label': 'Maximal', + 'settings.memoryWindow.minimal.badge': 'Günstigstes', + 'settings.memoryWindow.minimal.hint': + 'Kleinstes Speicherfenster. Günstigstes, schnellstes, geringste Kontinuität zwischen den Läufen.', + 'settings.memoryWindow.minimal.label': 'Minimal', + 'settings.memoryWindow.title': 'Langzeitgedächtnisfenster', + 'settings.modelHealth.title': 'Modellgesundheit', + 'settings.modelHealth.desc': + 'Qualität pro Modell, Halluzinationsrate und Kostenvergleich zwischen aktiven Modellen', + 'settings.modelHealth.allStatuses': 'Alle Stati', + 'settings.modelHealth.models': 'models', + 'settings.modelHealth.loading': 'Modelldaten werden geladen...', + 'settings.modelHealth.empty': 'Keine Modelle registriert', + 'settings.modelHealth.col.model': 'Modell', + 'settings.modelHealth.col.quality': 'Qualität', + 'settings.modelHealth.col.halluc': 'Halluz. Rate', + 'settings.modelHealth.col.cost': 'Kosten / 1 Mio. aus', + 'settings.modelHealth.col.agents': 'Agenten', + 'settings.modelHealth.col.status': 'Status', + 'settings.modelHealth.badge.keep': 'Behalten', + 'settings.modelHealth.badge.replace': 'Ersetzen', + 'settings.modelHealth.badge.staging': 'Staging/Test', + 'settings.modelHealth.badge.vision': 'Nur Vision', + 'settings.modelHealth.swap': 'Tauschen?', + 'settings.modelHealth.modal.title': 'Modell ersetzen?', + 'settings.modelHealth.modal.hallucRate': 'Halluzinationsrate', + 'settings.modelHealth.modal.cancel': 'Stornieren', + 'settings.modelHealth.modal.apply': 'Ersatz anwenden', + 'settings.modelHealth.tag.cheaper': 'CHEAPER', + 'settings.modelHealth.tag.better': 'BETTER', + 'settings.screenIntel.permissions.accessibility': 'Barrierefreiheit', + 'settings.screenIntel.permissions.grantHint': 'Grant-Hinweis', + 'settings.screenIntel.permissions.inputMonitoring': 'Eingabeüberwachung', + 'settings.screenIntel.permissions.macosAppliesPrivacy': + 'macOS verwaltet diese Berechtigungen unter Systemeinstellungen → Datenschutz & Sicherheit.', + 'settings.screenIntel.permissions.openInputMonitoring': 'Bitte um …', + 'settings.screenIntel.permissions.refreshStatus': 'Erfrischend…', + 'settings.screenIntel.permissions.refreshing': 'Erfrischend…', + 'settings.screenIntel.permissions.requestAccessibility': 'Bitte um …', + 'settings.screenIntel.permissions.requestScreenRecording': 'Bitte um …', + 'settings.screenIntel.permissions.requesting': 'Bitte um …', + 'settings.screenIntel.permissions.restartRefresh': 'Kern wird neu gestartet...', + 'settings.screenIntel.permissions.restartingCore': 'Kern wird neu gestartet...', + 'settings.screenIntel.permissions.screenRecording': 'Bildschirmaufzeichnung', + 'settings.screenIntel.permissions.title': 'Berechtigungen', + 'skills.card.moreActions': 'Weitere Aktionen', + 'skills.channelIcon.discord': 'Discord', + 'skills.channelIcon.imessage': 'iMessage', + 'skills.channelIcon.telegram': 'Telegram', + 'skills.channelIcon.web': 'Web', + 'skills.channelIcon.yuanbao': 'Yuanbao', + 'skills.composio.poweredBy': 'Unterstützt von Composio', + 'skills.composio.staleStatusTitle': 'Verbindungen zeigen den veralteten Status an', + 'skills.create.allowedTools': 'Erlaubte Werkzeuge', + 'skills.create.allowedToolsHelp': 'Im SKILL.md-Frontmatter gerendert als', + 'skills.create.allowedToolsPlaceholder': 'node_exec, fetch', + 'skills.create.author': 'Autor', + 'skills.create.authorPlaceholder': 'Dein Name', + 'skills.create.commaSeparated': '(durch Kommas getrennt)', + 'skills.create.createBtn': 'Fertigkeit schaffen', + 'skills.create.createError': 'Fertigkeit konnte nicht erstellt werden', + 'skills.create.creating': 'Erstellen…', + 'skills.create.description': 'Beschreibung', + 'skills.create.descriptionPlaceholder': 'Was bewirkt diese Fähigkeit?', + 'skills.create.optional': '(optional)', + 'skills.create.inputs.heading': 'Inputs', + 'skills.create.inputs.help': + 'Parameter deklarieren, die der Skill benötigt. Der Skills Runner erstellt zur Laufzeit ein Formular dafür.', + 'skills.create.inputs.add': 'Eingabe hinzufügen', + 'skills.create.inputs.row.name': 'Eingabename', + 'skills.create.inputs.row.namePlaceholder': 'z. B. repo', + 'skills.create.inputs.row.nameError': + 'Nur Buchstaben, Ziffern, Unterstriche und Bindestriche; muss mit einem Buchstaben beginnen.', + 'skills.create.inputs.row.description': 'Eingabebeschreibung', + 'skills.create.inputs.row.descriptionPlaceholder': 'Was wird in dieses Feld eingegeben?', + 'skills.create.inputs.row.type': 'Type', + 'skills.create.inputs.row.required': 'Required', + 'skills.create.inputs.row.remove': 'Eingabe entfernen', + 'skills.create.inputs.type.string': 'Text', + 'skills.create.inputs.type.integer': 'Number', + 'skills.create.inputs.type.boolean': 'Ja / Nein', + 'skills.create.license': 'Lizenz', + 'skills.create.licensePlaceholder': 'MIT', + 'skills.create.name': 'Name', + 'skills.create.namePlaceholder': 'z.B. Fachzeitschrift', + 'skills.create.scope': 'Umfang', + 'skills.create.scopeProjectHint': '/.openhuman/skills/', + 'skills.create.scopeUserHint': + 'Geschrieben an ~/.openhuman/skills//SKILL.md – verfügbar in allen Arbeitsbereichen.', + 'skills.create.slugLabel': 'Schneckenetikett', + 'skills.create.subtitle': 'SKILL.md', + 'skills.create.tags': 'Schlagworte', + 'skills.create.tagsPlaceholder': 'Handel, Forschung', + 'skills.create.title': 'Neue Fähigkeit', + 'skills.detail.allowedTools': 'Erlaubte Werkzeuge', + 'skills.detail.author': 'Autor', + 'skills.detail.bundledResources': 'Gebündelte Ressourcen', + 'skills.detail.closeAriaLabel': 'Fertigkeitsdetails schließen', + 'skills.detail.location': 'Standort', + 'skills.detail.noBundledResources': 'Keine gebündelten Ressourcen.', + 'skills.detail.tags': 'Schlagworte', + 'skills.detail.warnings': 'Warnungen', + 'skills.install.errors.alreadyInstalledHint': + 'Ein Skill mit diesem Slug ist bereits im Arbeitsbereich vorhanden. Entfernen Sie es zuerst oder ändern Sie die Frontmatter „metadata.id“ / „name“.', + 'skills.install.errors.alreadyInstalledTitle': 'Skill bereits installiert', + 'skills.install.errors.fetchFailedHint': + 'Die Anfrage wurde nicht erfolgreich abgeschlossen. Überprüfen Sie, ob URL auf eine erreichbare öffentliche Datei verweist und ob der Host eine 2xx-Antwort zurückgegeben hat.', + 'skills.install.errors.fetchFailedTitle': 'Abruf fehlgeschlagen', + 'skills.install.errors.fetchTimedOutHint': + 'Der Remote-Host hat nicht rechtzeitig geantwortet. Versuchen Sie es erneut oder erhöhen Sie das Timeout (1–600 s).', + 'skills.install.errors.fetchTimedOutTitle': 'Zeitüberschreitung beim Abruf', + 'skills.install.errors.fetchTooLargeHint': + 'Die Datei SKILL.md muss unter 1 MiB liegen. Teilen Sie gebündelte Ressourcen in „references/“- oder „scripts/“-Dateien auf, anstatt sie einzubinden.', + 'skills.install.errors.fetchTooLargeTitle': 'SKILL.md zu groß', + 'skills.install.errors.genericHint': + 'Das Backend hat einen Fehler zurückgegeben. Die Rohnachricht wird unten angezeigt.', + 'skills.install.errors.genericTitle': 'Skill konnte nicht installiert werden', + 'skills.install.errors.invalidSkillHint': + 'Der Frontmatter muss gültiges YAML mit nicht leeren Feldern „Name“ und „Beschreibung“ sein, abgeschlossen durch „---“.', + 'skills.install.errors.invalidSkillTitle': 'SKILL.md hat nicht geparst', + 'skills.install.errors.invalidUrlHint': + 'Nur öffentliche HTTPS URLs sind zulässig. Private, Loopback- und Metadaten-Hosts werden blockiert.', + 'skills.install.errors.invalidUrlTitle': 'URL abgelehnt', + 'skills.install.errors.unsupportedUrlHint': + 'Nur direkte „.md“-Links funktionieren. Für GitHub: Link zu einer Datei (github.com/owner/repo/blob/.../SKILL.md) – Baum- und Repo-Roots sind nicht installiert.', + 'skills.install.errors.unsupportedUrlTitle': 'URL-Formular nicht unterstützt', + 'skills.install.errors.writeFailedHint': + 'Das Workspace-Skills-Verzeichnis war nicht beschreibbar. Überprüfen Sie die Dateisystemberechtigungen für „/.openhuman/skills/“.', + 'skills.install.errors.writeFailedTitle': 'SKILL.md konnte nicht geschrieben werden.', + 'skills.install.fetchLog': 'Protokoll abrufen', + 'skills.install.fetchingPrefix': 'Das Abrufen von', + 'skills.install.fetchingSuffix': 'kann bis zu dem von Ihnen konfigurierten Timeout dauern.', + 'skills.install.installBtn': 'Installieren…', + 'skills.install.installComplete': 'Installation abgeschlossen', + 'skills.install.installing': 'Installieren…', + 'skills.install.parseWarnings': 'Warnungen analysieren', + 'skills.install.rawError': 'Roher Fehler', + 'skills.install.subtitleMiddle': 'über HTTPS und installiert es unter', + 'skills.install.subtitlePrefix': 'Ruft nur einen einzelnen', + 'skills.install.subtitleSuffix': 'HTTPS ab; Private und Loopback-Hosts werden blockiert.', + 'skills.install.successDiscovered': '{count} neue Fähigkeiten entdeckt.', + 'skills.install.successNoNewIds': + 'Skill installiert, aber keine neuen Skill-IDs erschienen – der Katalog enthält möglicherweise bereits einen Skill mit demselben Slug.', + 'skills.install.timeoutHint': '(Sekunden, optional)', + 'skills.install.timeoutHelp': + 'Standardmäßig 60 Sekunden. Werte außerhalb von 1-600 werden serverseitig begrenzt.', + 'skills.install.timeoutInvalid': 'Muss eine Ganzzahl zwischen 1 und 600 sein.', + 'skills.install.timeoutLabel': 'Timeout-Label', + 'skills.install.timeoutPlaceholder': '60', + 'skills.install.title': 'Skill von URL installieren', + 'skills.install.urlHelpMiddle': 'Datei.', + 'skills.install.urlHelpPrefix': 'Direkter Link zu einem', + 'skills.install.urlHelpSuffix': 'URLs, zu dem automatisch umgeschrieben wird', + 'skills.install.urlInvalidPrefix': 'URL muss wohlgeformt sein', + 'skills.install.urlInvalidSuffix': 'Link.', + 'skills.install.urlLabel': 'Fähigkeit URL', + 'skills.install.urlPlaceholder': 'https://raw.githubusercontent.com/owner/repo/main/SKILL.md', + 'skills.meetingBots.bannerDesc': + 'Lege einen Google Meet-Link ab und OpenHuman tritt als Gast bei, spricht, hört zu und winkt zurück.', + 'skills.meetingBots.bannerTitle': 'Sende OpenHuman an eine Besprechung', + 'skills.meetingBots.busyTitle': 'OpenHuman ist beschäftigt', + 'skills.meetingBots.comingSoon': 'Kommt bald', + 'skills.meetingBots.couldNotStartTitle': 'OpenHuman konnte nicht gestartet werden', + 'skills.meetingBots.displayName': 'Anzeigename', + 'skills.meetingBots.failedToStart': 'OpenHuman konnte nicht gestartet werden.', + 'skills.meetingBots.joiningMessage': 'Es sollte in wenigen Sekunden als Teilnehmer erscheinen.', + 'skills.meetingBots.joiningTitle': 'OpenHuman nimmt an der Besprechung teil', + 'skills.meetingBots.meetingLink': 'Link zum Treffen', + 'skills.meetingBots.modalAriaLabel': 'Sende OpenHuman an eine Besprechung', + 'skills.meetingBots.modalDesc': + 'OpenHuman tritt als anonymer Gast bei, streamt sein Video in den Anruf und antwortet über den Agenten.', + 'skills.meetingBots.modalTitle': 'Sende OpenHuman an eine Besprechung', + 'skills.meetingBots.newBadge': 'Neu', + 'skills.meetingBots.platformComingSoon': '{label}-Unterstützung ist bald verfügbar.', + 'skills.meetingBots.platformHints.gmeet': 'meet.google.com/abc-defg-hij', + 'skills.meetingBots.platformHints.teams': 'teams.microsoft.com/...', + 'skills.meetingBots.platformHints.zoom': 'zoom.us/j/...', + 'skills.meetingBots.platforms.gmeet': 'Google Treffen Sie', + 'skills.meetingBots.platforms.teams': 'Microsoft Teams', + 'skills.meetingBots.platforms.zoom': 'Zoom', + 'skills.meetingBots.sendTo': 'Senden an', + 'skills.meetingBots.soonSuffix': 'bald', + 'skills.meetingBots.starting': 'Beginnend mit …', + 'skills.resource.preview.closeAriaLabel': 'Vorschau schließen', + 'skills.resource.preview.failed': 'Vorschau fehlgeschlagen', + 'skills.resource.preview.loading': 'Vorschau wird geladen…', + 'skills.resource.tree.empty': 'Keine gebündelten Ressourcen.', + 'skills.search.placeholder': 'Platzhalter', + 'skills.setup.autocomplete.acceptKey': 'Schlüssel akzeptieren', + 'skills.setup.autocomplete.activeDesc': 'Inline-Vervollständigungen laufen und sind bereit.', + 'skills.setup.autocomplete.activeTitle': 'Die automatische Vervollständigung ist aktiv', + 'skills.setup.autocomplete.customizeSettings': 'Passe die Einstellungen an', + 'skills.setup.autocomplete.debounce': 'Entprellen', + 'skills.setup.autocomplete.description': 'Beschreibung', + 'skills.setup.autocomplete.enableBtn': 'Aktivieren...', + 'skills.setup.autocomplete.enableError': + 'Die automatische Vervollständigung konnte nicht aktiviert werden', + 'skills.setup.autocomplete.enabling': 'Aktivieren...', + 'skills.setup.autocomplete.notSupported': 'Nicht unterstützt', + 'skills.setup.autocomplete.stepEnable': 'Aktiviere Inline-Vervollständigungen', + 'skills.setup.autocomplete.stepSuccess': 'Bereit zu gehen', + 'skills.setup.autocomplete.stylePreset': 'Stilvoreinstellung', + 'skills.setup.autocomplete.stylePresetValue': 'Ausgewogen (später konfigurierbar)', + 'skills.setup.autocomplete.title': 'Automatische Textvervollständigung', + 'skills.setup.screenIntel.activeDesc': + 'Screen Intelligence läuft und liest dein aktives Fenster.', + 'skills.setup.screenIntel.activeTitle': 'Bildschirmintelligenz ist aktiviert', + 'skills.setup.screenIntel.advancedSettings': 'Erweiterte Einstellungen', + 'skills.setup.screenIntel.allGranted': 'Alle Berechtigungen erteilt', + 'skills.setup.screenIntel.captureMode': 'Aufnahmemodus', + 'skills.setup.screenIntel.captureModeValue': 'Alle Fenster (später konfigurierbar)', + 'skills.setup.screenIntel.deniedHint': + 'Nachdem du in den Systemeinstellungen Berechtigungen erteilt hast, klicke unten, um neu zu starten und die Änderungen zu übernehmen.', + 'skills.setup.screenIntel.enableBtn': 'Aktivieren...', + 'skills.setup.screenIntel.enableDesc': + 'Liest, was auf deinem Bildschirm ist, und gibt deinem Agenten nützlichen Kontext.', + 'skills.setup.screenIntel.enableError': 'Screen Intelligence konnte nicht aktiviert werden', + 'skills.setup.screenIntel.enabling': 'Aktivieren...', + 'skills.setup.screenIntel.grant': 'Öffnen...', + 'skills.setup.screenIntel.granted': 'Erteilt', + 'skills.setup.screenIntel.macosOnly': 'Nur macOS', + 'skills.setup.screenIntel.opening': 'Öffnen...', + 'skills.setup.screenIntel.panicHotkey': 'Panik-Hotkey', + 'skills.setup.screenIntel.permAccessibility': 'Barrierefreiheit', + 'skills.setup.screenIntel.permInputMonitoring': 'Eingabeüberwachung', + 'skills.setup.screenIntel.permScreenRecording': 'Bildschirmaufzeichnung', + 'skills.setup.screenIntel.permissionsDesc': + 'Screen Intelligence benötigt Berechtigungen für Bedienungshilfen, Eingabeüberwachung und Bildschirmaufnahme.', + 'skills.setup.screenIntel.permissionPathLabel': 'macOS wendet Datenschutz an:', + 'skills.setup.screenIntel.refreshStatus': 'Status aktualisieren', + 'skills.setup.screenIntel.restartRefresh': 'Neustart...', + 'skills.setup.screenIntel.restarting': 'Neustart...', + 'skills.setup.screenIntel.stepEnable': 'Aktiviere den Skill', + 'skills.setup.screenIntel.stepPermissions': 'Berechtigungen erteilen', + 'skills.setup.screenIntel.stepSuccess': 'Bereit zu gehen', + 'skills.setup.screenIntel.title': 'Bildschirmintelligenz', + 'skills.setup.screenIntel.visionModel': 'Vision-Modell', + 'skills.setup.voice.activation': 'Aktivierung', + 'skills.setup.voice.activeDescPrefix': 'Fn', + 'skills.setup.voice.activeDescSuffix': 'Fn', + 'skills.setup.voice.activeTitle': 'Sprachintelligenz ist aktiv', + 'skills.setup.voice.customizeSettings': 'Passe die Einstellungen an', + 'skills.setup.voice.downloadSttBtn': 'STT-Modell herunterladen', + 'skills.setup.voice.enableDesc': 'Diktiere Text freihändig über dein Mikrofon.', + 'skills.setup.voice.hotkey': 'Hotkey', + 'skills.setup.voice.startBtn': 'Starten...', + 'skills.setup.voice.startError': 'Der Sprachserver konnte nicht gestartet werden', + 'skills.setup.voice.starting': 'Startet...', + 'skills.setup.voice.stepEnable': 'Sprachserver starten', + 'skills.setup.voice.stepSetup': 'Modell-Download erforderlich', + 'skills.setup.voice.stepSuccess': 'Bereit zu gehen', + 'skills.setup.voice.sttNotReady': 'Speech-to-Text-Modell nicht bereit', + 'skills.setup.voice.sttNotReadyDesc': + 'Voice Intelligence erfordert für die Transkription ein lokales Whisper-Modell. Lade es aus den lokalen Modelleinstellungen herunter.', + 'skills.setup.voice.sttReady': 'Bereit für das Speech-to-Text-Modell', + 'skills.setup.voice.sttReturnHint': 'Stt-Rückgabehinweis', + 'skills.setup.voice.title': 'Sprachintelligenz', + 'skills.uninstall.couldNotUninstall': 'Konnte nicht deinstalliert werden', + 'skills.uninstall.description': + 'Dadurch werden das Skill-Verzeichnis und alle darin enthaltenen Ressourcen dauerhaft gelöscht. Der Agent wird es in der nächsten Runde nicht mehr sehen.', + 'skills.uninstall.title': 'Deinstallieren', + 'skills.uninstall.uninstallBtn': 'Deinstallieren', + 'skills.uninstall.uninstalling': 'Deinstallation…', + 'upsell.global.limitMessage': 'Aktualisiere deinen Plan oder lade Guthaben auf, um fortzufahren', + 'upsell.global.limitTitle': 'Du', + 'upsell.global.nearLimitMessage': + 'Du hast {pct} % deines Nutzungslimits verwendet. Upgrade für höhere Limits.', + 'upsell.global.nearLimitTitle': 'Das Nutzungslimit nähert sich', + 'upsell.usageLimit.bodyBudget': + 'Du hast dein wöchentliches Limit erreicht.{reset} Aktualisiere deinen Plan oder lade Guthaben auf, um Limits zu vermeiden.', + 'upsell.usageLimit.bodyRate': + 'Du hast dein 10-Stunden-Inferenzratenlimit erreicht.{reset} Führe ein Upgrade durch, um höhere Limits zu erhalten.', + 'upsell.usageLimit.heading': 'Nutzungslimit erreicht', + 'upsell.usageLimit.notNow': 'Nicht jetzt', + 'upsell.usageLimit.perWindow': '{amount}', + 'upsell.usageLimit.planIncludes': '{plan}', + 'upsell.usageLimit.resetsIn': 'Es setzt {time} zurück.', + 'upsell.usageLimit.upgradePlan': 'Upgrade-Plan', + 'upsell.usageLimit.weeklyInference': '{amount}', + 'walkthrough.tooltip.letsGo': 'Lass uns gehen!', + 'walkthrough.tooltip.next': 'Weiter →', + 'walkthrough.tooltip.skip': 'Tour überspringen', + 'walkthrough.tooltip.stepCounter': '{n} von {total}', + 'webhooks.activity.empty': 'Leer', + 'webhooks.activity.title': 'Letzte Aktivität', + 'webhooks.composioHistory.empty': 'Leer', + 'webhooks.composioHistory.metadataId': 'MetaDaten-ID', + 'webhooks.composioHistory.metadataUuid': 'Metadaten-UUID', + 'webhooks.composioHistory.payload': 'Nutzlast', + 'webhooks.composioHistory.title': 'ComposeIO Trigger-Verlauf', + 'webhooks.tunnels.active': 'Aktiv', + 'webhooks.tunnels.createFailed': 'Tunnel konnte nicht erstellt werden', + 'webhooks.tunnels.creating': 'Erstellen...', + 'webhooks.tunnels.deleteFailed': 'Tunnel konnte nicht gelöscht werden', + 'webhooks.tunnels.descriptionPlaceholder': 'Beschreibung (optional)', + 'webhooks.tunnels.echo': 'Echo', + 'webhooks.tunnels.empty': 'Leer', + 'webhooks.tunnels.enableEcho': 'Echo aktivieren', + 'webhooks.tunnels.inactive': 'Inaktiv', + 'webhooks.tunnels.namePlaceholder': 'Tunnelname (z. B. Telegram-Bot)', + 'webhooks.tunnels.newTunnel': 'Neuer Tunnel', + 'webhooks.tunnels.removeEcho': 'Echo entfernen', + 'webhooks.tunnels.title': 'Webhook-Tunnel', + 'webhooks.tunnels.toggleFailed': 'Echo konnte nicht umgeschaltet werden', + 'composio.directModeRequiresKey': + 'Speichern fehlgeschlagen. Der Direktmodus erfordert einen nicht leeren Schlüssel API.', + 'composio.integrationSlugsHelp': 'Durch Kommas getrennte Integrations-Slugs, z.B.', + 'composio.integrationSlugsExample': 'Gmail, Slack', + 'composio.integrationSlugsCaseInsensitive': 'Groß- und Kleinschreibung wird nicht beachtet.', + 'composio.integrationSlugsPlaceholder': 'Gmail, Slack, ...', + 'composio.notYetRouted': 'noch nicht geroutet', + 'composio.triggers.loading': 'Laden…', + 'conversations.taskKanban.todo': 'Zu tun', + 'chat.addReaction': 'Reaktion hinzufügen', + 'chat.agentProfile.create': 'Agentenprofil erstellen', + 'chat.agentProfile.createFailed': 'Agentenprofil konnte nicht erstellt werden.', + 'chat.agentProfile.customDescription': 'Benutzerdefiniertes Agentenprofil', + 'chat.agentProfile.defaultAgentLabel': 'Orchestrator', + 'chat.agentProfile.exists': 'Agentenprofil „{name}“ ist bereits vorhanden.', + 'chat.agentProfile.label': 'Agentenprofil', + 'chat.agentProfile.namePlaceholder': 'Profilname', + 'chat.agentProfile.promptStylePlaceholder': 'Eingabeaufforderungsstil', + 'chat.agentProfile.allowedToolsPlaceholder': 'Zulässige Tools', + 'chat.backToThread': 'zurück zu {title}', + 'chat.parentThread': 'übergeordneter Thread', + 'chat.removeReaction': 'Entfernen {emoji}', + 'settings.composio.loading': 'Laden…', + 'settings.mascot.noCharactersAvailable': 'Es sind noch keine OpenHuman Zeichen verfügbar', + 'skills.uninstall.confirmTitle': '{name} deinstallieren?', + 'conversations.taskKanban.blocked': 'Blockiert', + 'conversations.taskKanban.done': 'Fertig', + 'conversations.taskKanban.pending': 'Ausstehend', + 'conversations.taskKanban.working': 'Arbeiten', + 'conversations.taskKanban.awaitingApproval': 'Warten auf Genehmigung', + 'conversations.taskKanban.ready': 'Bereit', + 'conversations.taskKanban.rejected': 'Abgelehnt', + 'conversations.taskKanban.inProgress': 'In Bearbeitung', + 'intelligence.memoryChunk.detail.copiedHint': 'kopiert', + 'settings.composio.notYetRouted': 'noch nicht geroutet', + 'settings.localModel.download.manageExternal': + 'Verwalte dieses Modell in deiner externen Laufzeit.', + 'settings.localModel.status.manageOllamaExternal': + 'Verwalte den Ollama-Prozess und die Modell-Pulls außerhalb von OpenHuman, und führe dann die Diagnose erneut aus.', + 'settings.localModel.status.ollamaDocs': 'Ollama Dokumente', + 'settings.localModel.status.thenRetry': + 'für Setup-Anweisungen, dann versuche es erneut, sobald deine Laufzeit erreichbar ist.', + 'devOptions.menuAi': 'KI-Konfiguration', + 'devOptions.menuAiDesc': 'Cloud-Anbieter, lokale Ollama-Modelle und Routing pro Workload', + 'devOptions.menuScreenAware': 'Bildschirmbewusstsein', + 'devOptions.menuScreenAwareDesc': + 'Bildschirmaufnahmeberechtigungen, Überwachungsrichtlinien und Sitzungskontrollen', + 'devOptions.menuMessaging': 'Messaging-Kanäle', + 'devOptions.menuMessagingDesc': + 'Konfiguriere die Authentifizierungsmodi Telegram/Discord und das Standardkanalrouting', + 'devOptions.menuTools': 'Werkzeuge', + 'devOptions.menuToolsDesc': + 'Aktiviere oder deaktiviere Funktionen, die OpenHuman in deinem Namen nutzen kann', + 'devOptions.menuAgentChat': 'Agenten-Chat', + 'devOptions.menuAgentChatDesc': + 'Test-Agent-Konversation mit Modell- und Temperaturüberschreibungen', + 'devOptions.menuCronJobs': 'Cron-Jobs', + 'devOptions.menuCronJobsDesc': + 'Zeige geplante Jobs für Laufzeitfähigkeiten an und konfiguriere sie', + 'devOptions.menuLocalModelDebug': 'Lokales Modell-Debug', + 'devOptions.menuLocalModelDebugDesc': + 'Ollama-Konfiguration, Asset-Downloads, Modelltests und Diagnose', + 'devOptions.menuWebhooksDebug': 'Webhooks', + 'devOptions.menuWebhooksDebugDesc': + 'Prüfe Laufzeit-Webhook-Registrierungen und erfasste Anforderungsprotokolle', + 'devOptions.menuIntelligence': 'Intelligenz', + 'devOptions.menuIntelligenceDesc': + 'Gedächtnisarbeitsbereich, Unterbewusstseinsmotor, Träume und Einstellungen', + 'devOptions.menuNotificationRouting': 'Benachrichtigungsweiterleitung', + 'devOptions.menuNotificationRoutingDesc': + 'KI-Wichtigkeitsbewertung und Orchestrator-Eskalation für Integrationswarnungen', + 'devOptions.menuComposeIOTriggers': 'ComposeIO Auslöser', + 'devOptions.menuComposeIOTriggersDesc': 'Sieh dir den ComposeIO-Triggerverlauf und das Archiv an', + 'devOptions.menuComposioRouting': 'Composio Routing (Direktmodus)', + 'devOptions.menuComposioRoutingDesc': + 'Bring deinen eigenen Composio API-Schlüssel mit und leite Anrufe direkt an backend.composio.dev weiter', + 'devOptions.menuComposioTriggers': 'Integrationsauslöser', + 'devOptions.menuComposioTriggersDesc': + 'Konfiguriere KI-Triage-Einstellungen für Composio-Integrationsauslöser', + 'memory.sourceFilterAria': 'Nach Quelle filtern', + 'calls.comingSoonDescription': 'KI-unterstützte Anrufe folgen in Kürze. Bleiben Sie dran.', + 'vault.title': 'Wissensdepots', + 'vault.description': + 'Lokalen Ordner angeben; Dateien werden in Fragmente aufgeteilt und in den Speicher gespiegelt.', + 'vault.add': 'Tresor hinzufügen', + 'vault.added': 'Tresor hinzugefügt', + 'vault.createdMessage': 'Erstellt „{name}“. Klicken Sie zum Aufnehmen auf {sync}.', + 'vault.couldNotAdd': 'Tresor konnte nicht hinzugefügt werden', + 'vault.syncFailed': 'Synchronisierung fehlgeschlagen', + 'vault.syncFailedFor': 'Synchronisierung für „{name}“ fehlgeschlagen', + 'vault.syncFailedFiles': '{count}-Datei(en) fehlgeschlagen', + 'vault.syncedTitle': 'Synchronisierung „{name}“ fehlgeschlagen', + 'vault.syncSummary': 'Aufgenommen {ingested}, unverändert {unchanged}, entfernt {removed}', + 'vault.syncSummaryFailed': ', fehlgeschlagen {count}', + 'vault.syncSummarySkipped': ', übersprungen {count}', + 'vault.syncSummaryDuration': '· {seconds}s', + 'vault.confirmRemovePurge': + 'Vault "{name}" entfernen?\n\nOK klicken, um auch den Speicher zu löschen (alle {count} aufgenommenen Dokument(e) entfernen).\nAbbrechen klicken, um die Dokumente im Speicher zu behalten.', + 'vault.confirmRemove': 'Tresor „{name}“ wirklich entfernen?', + 'vault.removed': 'Tresor entfernt', + 'vault.removedPurgedMessage': '„{name}“ entfernt und seinen Speicher geleert.', + 'vault.removedKeptMessage': '„{name}“ entfernt. Dokumente im Gedächtnis behalten.', + 'vault.couldNotRemove': 'Tresor konnte nicht entfernt werden.', + 'vault.name': 'Name', + 'vault.namePlaceholder': 'Meine Forschungsnotizen', + 'vault.folderPath': 'Ordnerpfad (absolut)', + 'vault.folderPathPlaceholder': '/Benutzer/Sie/Dokumente/Notizen', + 'vault.excludes': 'Schließt aus (durch Kommas getrennte Teilzeichenfolgen, optional)', + 'vault.excludesPlaceholder': 'drafts/, .secret', + 'vault.creating': 'Wird erstellt…', + 'vault.create': 'Tresor erstellen', + 'vault.loading': 'Wird geladen Tresore…', + 'vault.failedToLoad': 'Tresore konnten nicht geladen werden: {error}', + 'vault.empty': 'Noch keine Vaults. Oben einen hinzufügen, um einen Ordner aufzunehmen.', + 'vault.fileCount': '{count} Datei(en)', + 'vault.syncedRelative': 'synchronisiert {time}', + 'vault.neverSynced': 'nie synchronisiert', + 'vault.syncingProgress': 'Synchronisierung… {ingested}/{total}', + 'vault.removing': 'Entfernen…', + 'vault.relative.sec': 'vor {count}s', + 'vault.relative.min': 'vor {count}m', + 'vault.relative.hr': 'vor {count}h', + 'vault.relative.day': 'vor {count}d', + 'whatsapp.title': 'WhatsApp', + 'subconscious.interval.fiveMinutes': '5 Min.', + 'subconscious.interval.tenMinutes': '10 Min.', + 'subconscious.interval.fifteenMinutes': '15 Min.', + 'subconscious.interval.thirtyMinutes': '30 Min.', + 'subconscious.interval.oneHour': '1 Stunde', + 'subconscious.interval.sixHours': '6 Stunden', + 'subconscious.interval.twelveHours': '12 Stunden', + 'subconscious.interval.oneDay': '1 Tag', + 'subconscious.priority.critical': 'kritisch', + 'subconscious.priority.important': 'wichtig', + 'subconscious.priority.normal': 'normal', + 'subconscious.durationSeconds': '{seconds} s', + 'subconscious.durationMilliseconds': '{milliseconds} ms', + 'settings.appearance': 'Aussehen', + 'settings.appearanceDesc': 'Wähle hell, dunkel oder passend zu deinem Systemthema', + 'settings.mascot': 'Maskottchen', + 'settings.mascotDesc': 'Wähle die Maskottchenfarbe aus, die in der gesamten App verwendet wird', + 'pages.settings.account.walletBalances': 'Wallet-Guthaben', + 'pages.settings.account.walletBalancesDesc': + 'Multi-Chain-Guthaben deiner lokalen Wallet anzeigen', + 'walletBalances.title': 'Wallet-Guthaben', + 'walletBalances.refresh': 'Refresh', + 'walletBalances.loading': 'Guthaben wird geladen…', + 'walletBalances.retry': 'Retry', + 'walletBalances.emptyState': + "Noch keine Wallet-Konten – richte eine Wallet unter 'Wiederherstellungsphrase' ein.", + 'walletBalances.copyAddress': 'Adresse kopieren', + 'walletBalances.providerMissing': 'Anbieter nicht verfügbar', + 'walletBalances.rawBalance': 'Roh: {raw}', + 'walletBalances.errorGeneric': + "Wallet-Guthaben konnten nicht geladen werden. Richte deine Wallet unter 'Wiederherstellungsphrase' ein und versuche es erneut.", + 'settings.taskSources.title': 'Aufgabenquellen', + 'settings.taskSources.subtitle': 'Ziehen Sie Aufgaben aus Ihren Tools auf das Agenten-ToDo-Board', + 'settings.taskSources.description': + 'Sammeln Sie Arbeitselemente von GitHub, Notion, Linear und ClickUp, bereichern Sie sie und leiten Sie sie an das Agent-ToDo-Board weiter.', + 'settings.taskSources.connectHint': + 'Aufgabenquellen nutzen Ihre verbundenen Konten. Verbinden Sie sie zunächst unter Integrationen.', + 'settings.taskSources.disabledBanner': + 'Aufgabenquellen sind in den Einstellungen deaktiviert. Aktivieren Sie die automatische Umfrage.', + 'settings.taskSources.loadError': 'Aufgabenquellen konnten nicht geladen werden', + 'settings.taskSources.addTitle': 'Fügen Sie eine Aufgabenquelle hinzu', + 'settings.taskSources.provider': 'Anbieter', + 'settings.taskSources.name': 'Name (optional)', + 'settings.taskSources.namePlaceholder': 'z.B. Meine offenen Themen', + 'settings.taskSources.github.repo': 'Repository (Inhaber/Name, optional)', + 'settings.taskSources.github.labels': 'Beschriftungen (durch Kommas getrennt)', + 'settings.taskSources.notion.database': 'Datenbank-(Board-)ID', + 'settings.taskSources.linear.team': 'Team-ID (optional)', + 'settings.taskSources.clickup.team': 'Arbeitsbereichs-(Team-)ID (optional)', + 'settings.taskSources.assignedToMe': 'Nur mir zugewiesene Artikel', + 'settings.taskSources.add': 'Quelle hinzufügen', + 'settings.taskSources.adding': 'Hinzufügen…', + 'settings.taskSources.preview': 'Vorschau', + 'settings.taskSources.previewResult': '{count}-Aufgabe(n) entsprechen diesem Filter', + 'settings.taskSources.fetchNow': 'Jetzt abholen', + 'settings.taskSources.fetching': 'Abrufen…', + 'settings.taskSources.fetchResult': 'Gerouteter {routed} von {fetched}-Aufgabe(n)', + 'settings.taskSources.configured': 'Konfigurierte Quellen', + 'settings.taskSources.empty': 'Noch keine Aufgabenquellen konfiguriert.', + 'settings.taskSources.proactive': 'Proaktiv', + 'settings.taskSources.lastFetch': 'Letzter Abruf', + 'settings.taskSources.never': 'Nie', + 'settings.taskSources.statusEnabled': 'Aktiviert', + 'settings.taskSources.statusDisabled': 'Deaktiviert', + 'settings.taskSources.enable': 'Aktivieren', + 'settings.taskSources.disable': 'Horizontaler Parallaxeffekt', + 'settings.taskSources.remove': 'Entlassen', + 'settings.taskSources.removeConfirm': + 'Diese Aufgabenquelle entfernen? Der gesamte aufgenommene Aufgabenverlauf wird gelöscht und kann nicht rückgängig gemacht werden.', + 'settings.taskSources.refresh': 'Aktualisieren', + 'settings.taskSources.providers.github': 'GitHub', + 'settings.taskSources.providers.notion': 'Vorstellung', + 'settings.taskSources.providers.linear': 'Linear', + 'settings.taskSources.providers.clickup': 'ClickUp', + 'skills.dashboard.title': 'Skills', + 'skills.dashboard.scheduledHeading': 'Geplante Skills', + 'skills.dashboard.emptyTitle': 'Keine geplanten Skills', + 'skills.dashboard.emptyBody': + 'Führe einen gebündelten Skill einmalig aus oder speichere einen wiederkehrenden Zeitplan, um ihn hier zu sehen.', + 'skills.dashboard.create': 'Skill erstellen', + 'skills.dashboard.run': 'Skill ausführen', + 'skills.dashboard.enable': 'Geplanten Skill aktivieren', + 'skills.dashboard.disable': 'Geplanten Skill deaktivieren', + 'skills.dashboard.lastRun': 'Letzter Lauf', + 'skills.dashboard.nextRun': 'Nächster Lauf', + 'skills.dashboard.cardOpenRunner': 'Im Runner öffnen', + 'skills.dashboard.loadError': 'Geplante Skills konnten nicht geladen werden', + 'skills.new.title': 'Skill erstellen', + 'skills.new.placeholderBody': + "Das Bearbeitungsformular erscheint in Kürze. Verwende vorerst die Schaltfläche 'Neuer Skill' auf der Runner-Seite.", + 'settings.agents.title': 'Agenten', + 'settings.agents.subtitle': + 'Verwalten Sie die für die Delegation verfügbaren Agenten — integrierte Standardeinstellungen und Ihre eigenen benutzerdefinierten Agenten.', + 'settings.agents.menuDesc': 'Integrierte und benutzerdefinierte Agenten verwalten', + 'settings.agents.newAgent': 'neuer Agent', + 'settings.agents.loadError': 'Agenten konnten nicht geladen werden', + 'settings.agents.empty': 'Noch keine Agenten', + 'settings.agents.sourceDefault': 'Einbau', + 'settings.agents.sourceCustom': 'Angepasst', + 'settings.agents.enable': 'Aktivieren Agent', + 'settings.agents.disable': 'Deaktivieren Agent', + 'settings.agents.edit': 'Bearbeiten', + 'settings.agents.delete': 'Löschen', + 'settings.agents.reset': 'Auf Standard zurücksetzen', + 'settings.agents.modelLabel': 'Modell', + 'settings.agents.toolsLabel': 'Werkzeuge', + 'settings.agents.toolsAll': 'Alle Tools', + 'settings.agents.toolsCount': '{count}-WERKZEUGE', + 'settings.agents.actionFailed': 'Der Agent konnte nicht aktualisiert werden', + 'settings.agents.orchestratorLocked': 'Der Orchestrator ist immer aktiviert.', + 'settings.agents.editor.createTitle': 'neuer Agent', + 'settings.agents.editor.editTitle': 'Mitarbeiter bearbeiten', + 'settings.agents.editor.id': 'ID', + 'settings.agents.editor.idHint': 'Nur Kleinbuchstaben, Zahlen, _ und -.', + 'settings.agents.editor.name': 'Name', + 'settings.agents.editor.description': 'Beschreibung', + 'settings.agents.editor.model': 'Modell (optional)', + 'settings.agents.editor.modelPlaceholder': 'z. B. erben, hint:fast oder eine Modell-ID', + 'settings.agents.editor.systemPrompt': 'Systemabfrage (optional)', + 'settings.agents.editor.tools': 'Erlaubte Werkzeuge', + 'settings.agents.editor.toolsHint': + 'Ein Werkzeugname pro Zeile. Verwenden Sie * für alle Werkzeuge.', + 'settings.agents.editor.defaultsNote': + 'Das Bearbeiten eines integrierten Agenten speichert eine Überschreibung, die Sie später zurücksetzen können.', + 'settings.agents.editor.save': 'Speichern', + 'settings.agents.editor.create': 'Vermittler erstellen', + 'settings.agents.editor.saving': 'Sichern…', + 'settings.agentsSection.title': 'Agents', + 'settings.agentsSection.description': + 'Verwalten Sie Ihre Agenten, deren Autonomie und worauf sie auf diesem Computer zugreifen dürfen.', + 'settings.agentsSection.menuDesc': 'Registrierung, Autonomie & BS-Zugriff', + 'settings.agents.editor.notFound': 'Agent nicht gefunden.', + 'settings.agents.editor.modelInherit': 'Übernehmen (Plattformstandard)', + 'settings.agents.editor.modelHints': 'Routing-Hinweise', + 'settings.agents.editor.modelTiers': 'Modellstufen', + 'settings.agents.editor.modelCustom': 'Benutzerdefinierte Modell-ID…', + 'settings.agents.editor.modelCustomPlaceholder': 'z. B. anthropic/claude-sonnet-4', + 'settings.agents.editor.selectTools': 'Tools hinzufügen', + 'settings.agents.editor.toolsAllSelected': 'Alle Tools', + 'settings.agents.editor.toolsNoneSelected': 'Keine Tools ausgewählt', + 'settings.agents.editor.removeToolAria': '{tool} entfernen', + 'settings.agents.editor.toolsModalTitle': 'Erlaubte Tools', + 'settings.agents.editor.toolsSelectedCount': '{count} ausgewählt', + 'settings.agents.editor.toolsSearchPlaceholder': 'Tools suchen…', + 'settings.agents.editor.toolsAllowAll': 'Alle Tools erlauben (*)', + 'settings.agents.editor.toolsAllowAllHint': 'Dieser Agent kann jedes verfügbare Tool verwenden.', + 'settings.agents.editor.toolsLoading': 'Tools werden geladen…', + 'settings.agents.editor.toolsLoadError': 'Tools konnten nicht geladen werden', + 'settings.agents.editor.toolsEmpty': 'Keine Tools entsprechen Ihrer Suche.', + 'settings.agents.editor.toolsDone': 'Done', + 'settings.agents.editor.builtInReadonly': + 'Integrierte Agenten können nicht bearbeitet werden. Sie können sie in der Agentenliste aktivieren, deaktivieren oder zurücksetzen.', }; -export default de; +export default messages; diff --git a/app/src/lib/i18n/es.ts b/app/src/lib/i18n/es.ts index bbed6eb01..c6c5e955a 100644 --- a/app/src/lib/i18n/es.ts +++ b/app/src/lib/i18n/es.ts @@ -1,32 +1,4159 @@ -import es1 from './chunks/es-1'; -import es2 from './chunks/es-2'; -import es3 from './chunks/es-3'; -import es4 from './chunks/es-4'; -import es5 from './chunks/es-5'; import type { TranslationMap } from './types'; -// Spanish (Español) translations. Each chunk maps to chunks/en-N.ts. -// Missing keys fall back to English via I18nContext.resolveEn(). -const es: TranslationMap = { - ...es1, - ...es2, - ...es3, - ...es4, - ...es5, +// Spanish (Español) translations. Keys mirror en.ts; missing/ +// English-identical values fall back to English via I18nContext.resolveEn(). +const messages: TranslationMap = { + 'nav.home': 'Inicio', + 'nav.human': 'Humano', + 'nav.chat': 'Charla', + 'nav.connections': 'Conexiones', + 'nav.memory': 'Inteligencia', + 'nav.alerts': 'Alertas', + 'nav.rewards': 'Recompensas', + 'nav.settings': 'Configuración', + 'common.cancel': 'Cancelar', + 'common.save': 'Guardar', + 'common.confirm': 'Confirmar', + 'common.delete': 'Eliminar', + 'common.edit': 'Editar', + 'common.create': 'Crear', + 'common.search': 'Buscar', + 'common.loading': 'cargando…', + 'common.error': 'error', + 'common.success': 'Éxito', + 'common.back': 'Atrás', + 'common.next': 'Siguiente', + 'common.finish': 'Finalizar', + 'common.close': 'Cerrar', + 'common.enabled': 'Activado', + 'common.disabled': 'Desactivado', + 'common.on': 'Activado', + 'common.off': 'Desactivado', + 'common.yes': 'Sí', + 'common.no': 'No', + 'common.ok': 'Entendido', + 'common.name': 'Nombre', + 'common.retry': 'Reintentar', + 'common.copy': 'Copiar', + 'common.copied': 'Copiado', + 'common.learnMore': 'Más información', + 'common.seeAll': 'Ver', + 'common.dismiss': 'Descartar', + 'common.clear': 'Limpiar', + 'common.reset': 'Restablecer', + 'common.refresh': 'Actualizar', + 'common.export': 'Exportar', + 'common.import': 'Importar', + 'common.upload': 'Subir', + 'common.download': 'Descargar', + 'common.add': 'Agregar', + 'common.remove': 'Eliminar', + 'common.showMore': 'Ver más', + 'common.showLess': 'Ver menos', + 'common.submit': 'Enviar', + 'common.continue': 'Continuar', + 'common.comingSoon': 'Próximamente', + 'common.breadcrumb': 'Miga de pan', + 'settings.general': 'generales', + 'settings.featuresAndAI': 'Funciones e IA', + 'settings.billingAndRewards': 'Facturación y recompensas', + 'settings.support': 'Soporte', + 'settings.advanced': 'Avanzado', + 'settings.dangerZone': 'Zona de peligro', + 'settings.account': 'Cuenta', + 'settings.accountDesc': 'Frase de recuperación, equipo, conexiones y privacidad', + 'settings.notifications': 'Notificaciones', + 'settings.notificationsDesc': 'No molestar y controles de notificación por cuenta', + 'settings.notifications.tabs.preferences': 'Preferencias', + 'settings.notifications.tabs.routing': 'Enrutamiento', + 'settings.features': 'Funciones', + 'settings.featuresDesc': 'Conciencia de pantalla, mensajería y herramientas', + 'settings.aiModels': 'IA y modelos', + 'settings.aiModelsDesc': 'Configuración de modelos de IA locales, descargas y proveedor LLM', + 'settings.ai': 'Configuración de IA', + 'settings.aiDesc': + 'Proveedores en la nube, modelos locales de Ollama y enrutamiento por carga de trabajo', + 'settings.billingUsage': 'Facturación y uso', + 'settings.billingUsageDesc': 'Plan de suscripción, créditos y métodos de pago', + 'settings.rewards': 'Recompensas', + 'settings.rewardsDesc': 'Referidos, cupones y créditos ganados', + 'settings.restartTour': 'Reiniciar tour', + 'settings.restartTourDesc': 'Reproduce el recorrido del producto desde el principio', + 'settings.about': 'Acerca de', + 'settings.aboutDesc': 'Versión de la app y actualizaciones de software', + 'settings.developerOptions': 'Avanzado', + 'settings.developerOptionsDesc': + 'Configuración de IA, canales de mensajería, herramientas, diagnósticos y paneles de depuración', + 'settings.clearAppData': 'Borrar datos de la app', + 'settings.clearAppDataDesc': + 'Cerrar sesión y eliminar permanentemente todos los datos locales de la app', + 'settings.logOut': 'Cerrar sesión', + 'settings.logOutDesc': 'Salir de tu cuenta', + 'settings.exitLocalSession': 'Salir de la sesión local', + 'settings.exitLocalSessionDesc': 'Volver a la pantalla de inicio de sesión', + 'settings.language': 'Idioma', + 'settings.betaBuild': 'Compilación beta: v{version}', + 'settings.languageDesc': 'Idioma de visualización de la interfaz de la app', + 'settings.alerts': 'Alertas', + 'settings.alertsDesc': 'Ver alertas recientes y actividad en tu bandeja', + 'settings.account.recoveryPhrase': 'Frase de recuperación', + 'settings.account.recoveryPhraseDesc': 'Ver y respaldar tu frase de recuperación de cuenta', + 'settings.account.team': 'Equipo', + 'settings.account.teamDesc': 'Administrar miembros del equipo y permisos', + 'settings.account.connections': 'Conexiones', + 'settings.account.connectionsDesc': 'Administrar cuentas y servicios vinculados', + 'settings.account.privacy': 'Privacidad', + 'settings.account.privacyDesc': 'Controla qué datos salen de tu computadora', + 'migration.title': 'Importar desde otro asistente', + 'migration.description': + 'Migra la memoria y las notas de otro asistente local a este espacio de trabajo. Empieza con una Vista previa para ver exactamente qué cambiará y luego pulsa Aplicar para copiar los datos. Tu memoria actual se respalda primero.', + 'migration.vendorLabel': 'Proveedor de origen', + 'migration.vendor.openclaw': 'OpenClaw', + 'migration.vendor.hermes': 'Hermes Agent', + 'migration.sourceLabel': 'Ruta del espacio de trabajo de origen (opcional)', + 'migration.sourcePlaceholder': + 'Déjalo en blanco para detectar automáticamente (p. ej. ~/.openclaw/workspace)', + 'migration.sourcePlaceholderHermes': + 'Dejar en blanco para detectar automáticamente (p. ej., ~/.hermes)', + 'migration.sourceHint': + 'Si está vacío, se usa la ubicación predeterminada del proveedor. Indica una ruta explícita si moviste el espacio de trabajo a otro sitio.', + 'migration.previewAction': 'Vista previa', + 'migration.previewRunning': 'Previsualizando…', + 'migration.applyAction': 'Aplicar importación', + 'migration.applyRunning': 'Importando…', + 'migration.applyDisclaimer': + 'Aplicar se desbloquea tras una Vista previa exitosa del mismo origen. La memoria actual se respalda antes de cualquier importación.', + 'migration.reportTitlePreview': 'Vista previa — aún no se importó nada', + 'migration.reportTitleApplied': 'Importación completa', + 'migration.report.source': 'Espacio de trabajo de origen', + 'migration.report.target': 'Espacio de trabajo de destino', + 'migration.report.fromSqlite': 'Desde SQLite (brain.db)', + 'migration.report.fromMarkdown': 'Desde Markdown', + 'migration.report.imported': 'Importado', + 'migration.report.skippedUnchanged': 'Omitido (sin cambios)', + 'migration.report.renamedConflicts': 'Renombrado por conflicto', + 'migration.report.warnings': 'Advertencias', + 'migration.report.previewHint': + 'Todavía no se importó ningún dato. Pulsa Aplicar importación para copiarlo.', + 'migration.report.appliedHint': + 'Las entradas importadas ya están en tu memoria. Vuelve a ejecutar Vista previa si quieres comparar de nuevo.', + 'migration.confirmImport.singular': + '¿Importar {count} entrada al espacio de trabajo actual?\n\nOrigen: {source}\nDestino: {target}\n\nLa memoria existente se respaldará antes de la importación.', + 'migration.confirmImport.plural': + '¿Importar {count} entradas al espacio de trabajo actual?\n\nOrigen: {source}\nDestino: {target}\n\nLa memoria existente se respaldará antes de la importación.', + 'settings.notifications.doNotDisturb': 'No molestar', + 'settings.notifications.doNotDisturbDesc': + 'Pausar todas las notificaciones por un período determinado', + 'settings.notifications.channelControls': 'Controles por canal', + 'settings.notifications.channelControlsDesc': + 'Configura las preferencias de notificación para cada canal', + 'settings.features.screenAwareness': 'Conciencia de pantalla', + 'settings.features.screenAwarenessDesc': 'Permite que el asistente vea tu ventana activa', + 'settings.features.messaging': 'Mensajería', + 'settings.features.messagingDesc': 'Configuración de integración de canales y mensajería', + 'settings.features.tools': 'Herramientas', + 'settings.features.toolsDesc': 'Administrar herramientas e integraciones conectadas', + 'settings.ai.localSetup': 'Configuración de IA local', + 'settings.ai.localSetupDesc': 'Descargar y configurar modelos de IA locales', + 'settings.ai.llmProvider': 'Proveedor LLM', + 'settings.ai.llmProviderDesc': 'Elegir y configurar tu proveedor de IA', + 'clearData.title': 'Borrar datos de la app', + 'clearData.warning': + 'Esto cerrará tu sesión y eliminará permanentemente los datos locales de la app, incluyendo:', + 'clearData.bulletSettings': 'Configuración de la app y conversaciones', + 'clearData.bulletCache': 'Todos los datos de caché de integraciones locales', + 'clearData.bulletWorkspace': 'Datos del espacio de trabajo', + 'clearData.bulletOther': 'Todos los demás datos locales', + 'clearData.irreversible': 'Esta acción no se puede deshacer.', + 'clearData.clearing': 'Borrando datos de la app...', + 'clearData.failed': 'No se pudieron borrar los datos ni cerrar sesión. Inténtalo de nuevo.', + 'clearData.failedLogout': 'No se pudo cerrar sesión. Inténtalo de nuevo.', + 'clearData.failedPersist': + 'No se pudo borrar el estado persistido de la app. Inténtalo de nuevo.', + 'welcome.title': 'Bienvenido a OpenHuman', + 'welcome.subtitle': + 'Tu super inteligencia artificial personal. Privada, simple y extremadamente poderosa.', + 'welcome.connectPrompt': 'Configurar URL de RPC (Avanzado)', + 'welcome.selectRuntime': 'Seleccionar un runtime', + 'welcome.clearingAppData': 'Borrando datos de la aplicación...', + 'welcome.clearAppDataAndRestart': 'Borrar datos de la aplicación y reiniciar', + 'welcome.clearAppDataWarning': + 'Esto borra los secretos y las cuentas almacenados localmente en este dispositivo. Tu cuenta en la nube no se ve afectada; puedes volver a iniciar sesión inmediatamente.', + 'welcome.resetErrorFallback': + 'No se pudieron borrar los datos de la aplicación. Cierra y vuelve a abrir OpenHuman, luego inténtalo de nuevo.', + 'welcome.signingIn': 'Registrándote...', + 'welcome.termsIntro': 'Al continuar, aceptas las', + 'welcome.termsOfUse': 'Términos', + 'welcome.termsJoiner': 'y', + 'welcome.privacyPolicy': 'Política de privacidad', + 'welcome.termsOutro': '.', + 'welcome.urlPlaceholder': 'http://localhost:8089', + 'welcome.invalidUrl': 'Ingresa una URL HTTP o HTTPS válida', + 'welcome.connecting': 'Probando', + 'welcome.connect': 'Probar', + 'home.greeting': 'Buenos días', + 'home.greetingAfternoon': 'Buenas tardes', + 'home.greetingEvening': 'Buenas noches', + 'home.askAssistant': 'Pregúntale lo que quieras a tu asistente...', + 'home.statusOk': + 'Tu dispositivo está conectado. Mantén la app abierta para conservar la conexión. Envíale un mensaje a tu agente con el botón de abajo.', + 'home.statusBackendOnly': + 'Reconectando al backend… tu agente estará disponible nuevamente en breve.', + 'home.statusCoreUnreachable': + 'El proceso en segundo plano de OpenHuman no responde. Es posible que haya fallado o no haya podido iniciarse.', + 'home.statusInternetOffline': + 'Tu dispositivo está sin conexión. Verifica tu red o reinicia la app para reconectar.', + 'home.restartCore': 'Reiniciar core', + 'home.restartingCore': 'Reiniciando core…', + 'home.themeToggle.toLight': 'Cambiar a modo claro', + 'home.themeToggle.toDark': 'Cambiar a modo oscuro', + 'home.usageExhaustedTitle': 'Has agotado tu uso', + 'home.usageExhaustedBody': + 'Ya no te queda uso incluido por ahora. Inicia una suscripción para desbloquear más capacidad continua.', + 'home.usageExhaustedCta': 'Obtener una suscripción', + 'home.routinesCard': 'Tus rutinas', + 'home.routinesActive': '{count} activas', + 'routines.title': 'Tus rutinas', + 'routines.subtitle': 'Cosas que tu asistente hace automáticamente', + 'routines.loading': 'Cargando rutinas…', + 'routines.empty': 'Aún no hay rutinas', + 'routines.emptyHint': + 'Tu asistente puede ejecutar tareas según un horario, como informes matutinos o resúmenes diarios.', + 'routines.refresh': 'Refrescar', + 'routines.nextRun': 'Próxima carrera', + 'routines.lastRunSuccess': 'La última ejecución tuvo éxito', + 'routines.lastRunFailed': 'La última ejecución falló', + 'routines.notRunYet': 'Aún no se ha ejecutado', + 'routines.runNow': 'Corre ahora', + 'routines.running': 'Corriendo…', + 'routines.viewHistory': 'Ver historial', + 'routines.loadingHistory': 'Cargando…', + 'routines.noHistory': 'Aún no hay historial de ejecuciones.', + 'routines.statusSuccess': 'Éxito', + 'routines.statusError': 'Error', + 'routines.showOutput': 'Mostrar salida', + 'routines.hideOutput': 'Ocultar salida', + 'routines.toggleEnabled': 'Habilitar o deshabilitar esta rutina', + 'routines.typeAgent': 'Agente', + 'routines.typeCommand': 'Comando', + 'nav.routines': 'Routines', + 'chat.newThread': 'Nuevo hilo', + 'chat.typeMessage': 'Escribe un mensaje...', + 'chat.send': 'Enviar mensaje', + 'chat.thinking': 'Pensando...', + 'chat.noMessages': 'Sin mensajes aún', + 'chat.startConversation': 'Inicia una conversación', + 'chat.regenerate': 'Regenerar', + 'chat.copyResponse': 'Copiar respuesta', + 'chat.citations': 'Citas', + 'chat.toolUsed': 'Herramienta usada', + 'scope.legacy': 'Legado', + 'scope.user': 'Usuario', + 'scope.project': 'Proyecto', + 'skills.title': 'Conexiones', + 'skills.search': 'Buscar conexiones...', + 'skills.noResults': 'No se encontraron conexiones', + 'skills.connect': 'Conectar', + 'skills.disconnect': 'Desconectar', + 'skills.configure': 'Administrar', + 'skills.connected': 'Conectado', + 'skills.available': 'Disponible', + 'skills.addAccount': 'Agregar cuenta', + 'skills.channels': 'Canales', + 'skills.integrations': 'Integraciones', + 'skills.integrationsSubtitle': + 'Conexiones OAuth en la nube: inicia sesión con tu cuenta y Composio gestiona los tokens para que los agentes puedan leer y actuar en tu nombre. Sin claves de API que administrar.', 'skills.composio.noApiKeyTitle': 'No hay una API key de Composio configurada', 'skills.composio.noApiKeyDescription': 'El modo local usa tu propia API key de Composio. Abre Ajustes → Avanzado → Composio para añadir una antes de conectar integraciones aquí.', 'skills.composio.noApiKeyCta': 'Abrir en Ajustes', - 'channels.localManagedUnavailable': - 'Los canales gestionados no están disponibles para usuarios locales.', + 'skills.tabs.composio': 'Composio', + 'skills.tabs.channels': 'Canales', + 'skills.tabs.mcp': 'MCP Servidores', + 'skills.tabs.runners': 'Runners', + 'memory.title': 'Memoria', + 'memory.search': 'Buscar recuerdos...', + 'memory.noResults': 'No se encontraron recuerdos', + 'memory.empty': 'Sin recuerdos aún. Los recuerdos se crean automáticamente mientras interactúas.', + 'memory.tab.memory': 'Memoria', + 'memory.tab.tasks': 'Tareas del agente', + 'memory.tab.tasksDescription': + 'Crea y realiza un seguimiento de tareas: tus propios pendientes más los tableros que tus agentes crean a lo largo de las conversaciones.', + 'memory.tab.subconscious': 'Subconsciente', + 'memory.tab.dreams': 'Sueños', + 'memory.tab.calls': 'Llamadas', + 'memory.tab.diagram': 'Diagram', + 'memory.tab.centrality': 'Centrality', + 'memory.tab.settings': 'Configuración', + 'memory.analyzeNow': 'Analizar ahora', + 'graphCentrality.title': 'Centralidad del gráfico de conocimiento', + 'graphCentrality.intro': + 'El PageRank sobre su gráfico de memoria muestra los centros de carga y las entidades conectoras que vinculan grupos que de otro modo estarían separados, que un recuento de frecuencia sin procesar no puede revelar.', + 'graphCentrality.loading': 'Centralidad informática…', + 'graphCentrality.errorPrefix': 'No se pudo cargar el gráfico:', + 'graphCentrality.retry': 'Rever', + 'graphCentrality.empty': 'Aún no hay gráfico de conocimiento.', + 'graphCentrality.emptyHint': + 'A medida que el asistente registre datos sobre usted, las entidades más conectadas aparecerán aquí.', + 'graphCentrality.namespaceLabel': 'Espacio de nombres', + 'graphCentrality.namespaceAll': 'Todos los espacios de nombres', + 'graphCentrality.metricEntities': 'Entidades', + 'graphCentrality.metricConnections': 'Conexiones', + 'graphCentrality.metricClusters': 'Clústeres', + 'graphCentrality.clustersCaption': 'Clústeres {components} · holdings más grandes {largest}', + 'graphCentrality.approximateBadge': 'aproximado', + 'graphCentrality.approximateTitle': + 'Se detuvo en el límite de iteración antes de converger completamente', + 'graphCentrality.rankedHeading': 'Principales entidades por influencia', + 'graphCentrality.colRank': '#', + 'graphCentrality.colEntity': 'Entidad', + 'graphCentrality.colInfluence': 'Influencia', + 'graphCentrality.colLinks': 'Campo de golf', + 'graphCentrality.bridgeBadge': 'conector', + 'graphCentrality.bridgeTitle': 'Conector: más influyente de lo que sugiere su número de enlaces', + 'graphCentrality.degreeTitle': '{in} entra · {out} sale', + 'memoryTree.status.title': 'Árbol de la memoria', + 'memoryTree.status.autoSyncLabel': 'Auto-sincronización', + 'memoryTree.status.autoSyncDescription': + 'Pausa para detener la nueva ingestión. El wiki existente sigue siendo consultable.', + 'memoryTree.status.statusTile': 'Estado', + 'memoryTree.status.lastSyncTile': 'Última sincronización', + 'memoryTree.status.totalChunksTile': 'Fragmentos totales', + 'memoryTree.status.wikiSizeTile': 'Tamaño de la wiki', + 'memoryTree.status.statusRunning': 'Corriendo', + 'memoryTree.status.statusPaused': 'Pausado', + 'memoryTree.status.statusSyncing': 'Sincronizando', + 'memoryTree.status.statusError': 'Error', + 'memoryTree.status.statusIdle': 'Inactivo', + 'memoryTree.status.never': 'Nunca', + 'memoryTree.status.fetchError': 'No se pudo obtener el estado del Árbol de Memoria', + 'memoryTree.status.retry': 'Rever', + 'memoryTree.status.toggleFailed': 'No se pudo activar la sincronización automática', + 'memoryTree.status.justNow': 'justo ahora', + 'memoryTree.status.secondsAgo': '{count}s hace', + 'memoryTree.status.minuteAgo': 'Hace 1 minuto', + 'memoryTree.status.minutesAgo': '{count} hace un minuto', + 'memoryTree.status.hourAgo': 'Hace 1 hora', + 'memoryTree.status.hoursAgo': '{count} hace hr', + 'memoryTree.status.dayAgo': 'Hace 1 día', + 'memoryTree.status.daysAgo': '{count} hace días', + 'alerts.title': 'Alertas', + 'alerts.empty': 'Sin alertas aún', + 'alerts.markAllRead': 'Marcar todo como leído', + 'alerts.unread': 'sin leer', + 'rewards.title': 'Recompensas', + 'rewards.referrals': 'Referidos', + 'rewards.coupons': 'Canjear', 'rewards.localUnavailable': 'El acceso local no obtiene recompensas, cupones ni crédito por referidos. Cierra sesión y continúa iniciando sesión con una cuenta de OpenHuman si quieres que las recompensas cuenten.', 'rewards.localUnavailableCta': 'Abrir ajustes de la cuenta', + 'rewards.credits': 'Créditos', + 'rewards.referralCode': 'Tu código de referido', + 'rewards.copyCode': 'Copiar código', + 'rewards.share': 'Compartir', + 'onboarding.welcome': 'Hola. Soy OpenHuman.', + 'onboarding.welcomeDesc': + 'Tu asistente de IA superinteligente que corre en tu computadora. Privado, simple y extremadamente poderoso.', + 'onboarding.context': 'Recopilación de contexto', + 'onboarding.contextDesc': 'Conecta las herramientas y servicios que usas todos los días.', + 'onboarding.localAI': 'IA local', + 'onboarding.localAIDesc': 'Configura un modelo de IA local que corra en tu máquina.', + 'onboarding.chatProvider': 'Proveedor de chat', + 'onboarding.chatProviderDesc': 'Elige cómo quieres interactuar con tu asistente.', + 'onboarding.referral': 'Referido', + 'onboarding.referralDesc': 'Ingresa un código de referido si tienes uno.', + 'onboarding.finish': 'Finalizar configuración', + 'onboarding.finishDesc': '¡Todo listo! Empieza a usar OpenHuman.', + 'onboarding.skip': 'Omitir', + 'onboarding.getStarted': 'Empezar', + 'onboarding.runtimeChoice.title': '¿Cómo quieres ejecutar OpenHuman?', + 'onboarding.runtimeChoice.subtitle': + 'Elige la configuración que mejor se adapte a ti. Puedes cambiarlo más tarde en Configuración.', + 'onboarding.runtimeChoice.cloud.title': 'Sencillo', + 'onboarding.runtimeChoice.cloud.tagline': 'Deja que OpenHuman lo gestione todo por ti.', + 'onboarding.runtimeChoice.cloud.f1': 'Seguridad integrada', + 'onboarding.runtimeChoice.cloud.f2': 'Compresión de tokens para aprovechar más tu uso', + 'onboarding.runtimeChoice.cloud.f3': 'Una suscripción, todos los modelos incluidos', + 'onboarding.runtimeChoice.cloud.f4': 'Sin claves API que gestionar', + 'onboarding.runtimeChoice.cloud.f5': 'Fácil de configurar', + 'onboarding.runtimeChoice.custom.title': 'Personalizado', + 'onboarding.runtimeChoice.custom.tagline': + 'Usa tus propias claves. Control total sobre lo que usas.', + 'onboarding.runtimeChoice.custom.f1': 'Necesitarás claves API para casi todo', + 'onboarding.runtimeChoice.custom.f2': 'Reutiliza servicios por los que ya pagas', + 'onboarding.runtimeChoice.custom.f3': 'Puede ser gratuito si ejecutas todo localmente', + 'onboarding.runtimeChoice.custom.f4': 'Más configuración, más opciones', + 'onboarding.runtimeChoice.custom.f5': 'Ideal para usuarios avanzados y desarrolladores', + 'onboarding.runtimeChoice.cloud.creditHighlight': '$1 de crédito gratis para probarlo', + 'onboarding.runtimeChoice.continueCloud': 'Continuar con Simple', + 'onboarding.runtimeChoice.continueCustom': 'Continuar con Personalizado', + 'onboarding.runtimeChoice.recommended': 'Recomendado', + 'onboarding.apiKeys.title': 'Agreguemos tus claves API', + 'onboarding.apiKeys.subtitle': + 'Puedes pegarlas ahora u omitir y agregarlas luego en Configuración › IA. Las claves se guardan en este dispositivo, cifradas en reposo.', + 'onboarding.apiKeys.openaiLabel': 'Clave API de OpenAI', + 'onboarding.apiKeys.openaiPlaceholder': 'sk-...', + 'onboarding.apiKeys.openaiOauthHint': + 'Utilice ChatGPT Plus/Pro (suscripción) o una clave OpenAI API; no se requieren ambas.', + 'onboarding.apiKeys.openaiOauthOpening': 'Abriendo inicio de sesión…', + 'onboarding.apiKeys.finishSignIn': 'Finalizar el inicio de sesión en ChatGPT', + 'onboarding.apiKeys.orApiKey': 'o tecla API', + 'onboarding.apiKeys.anthropicLabel': 'Clave API de Anthropic', + 'onboarding.apiKeys.anthropicPlaceholder': 'sk-ant-...', + 'onboarding.apiKeys.saveError': 'No se pudo guardar esa clave. Verifícala y vuelve a intentarlo.', + 'onboarding.apiKeys.skipForNow': 'Omitir por ahora', + 'onboarding.apiKeys.continue': 'Guardar y continuar', + 'onboarding.apiKeys.saving': 'Guardando…', + 'onboarding.custom.stepperInference': 'Inferencia', + 'onboarding.custom.stepperVoice': 'Voz', + 'onboarding.custom.stepperOAuth': 'OAuth', + 'onboarding.custom.stepperSearch': 'Búsqueda', + 'onboarding.custom.stepperEmbeddings': 'Embeddings', + 'onboarding.custom.stepperMemory': 'Memoria', + 'onboarding.custom.stepCounter': 'Paso {n} de {total}', + 'onboarding.custom.defaultTitle': 'Por defecto', + 'onboarding.custom.defaultSubtitle': 'Deja que OpenHuman lo gestione por ti.', + 'onboarding.custom.configureTitle': 'Configurar', + 'onboarding.custom.configureSubtitle': 'Yo elijo qué usar.', + 'onboarding.custom.progressAriaLabel': 'Progreso del onboarding', + 'onboarding.custom.continue': 'Continuar', + 'onboarding.custom.back': 'Atrás', + 'onboarding.custom.finish': 'Finalizar configuración', + 'onboarding.custom.configureLater': + 'Puedes terminar de configurar esto después del onboarding. Te llevaremos a la página de configuración correspondiente cuando termines.', + 'onboarding.custom.openSettings': 'Abrir en Configuración', + 'onboarding.custom.inference.title': 'Inferencia (Texto)', + 'onboarding.custom.inference.subtitle': + '¿Qué modelo de lenguaje debe responder tus preguntas y ejecutar tus agentes?', + 'onboarding.custom.inference.defaultDesc': + 'OpenHuman dirige cada carga de trabajo a un modelo predeterminado adecuado. Sin claves, sin configuración.', + 'onboarding.custom.inference.configureDesc': + 'Usa tu propia clave de OpenAI o Anthropic. La usamos para todas las cargas de trabajo basadas en texto.', + 'onboarding.custom.voice.title': 'Voz', + 'onboarding.custom.voice.subtitle': 'Texto a voz y voz a texto para el modo de voz.', + 'onboarding.custom.voice.defaultDesc': + 'OpenHuman incluye STT/TTS gestionado que funciona de inmediato. Sin nada que configurar.', + 'onboarding.custom.voice.configureDesc': + 'Usa tu propio ElevenLabs / OpenAI Whisper / etc. Configura en Configuración › Voz.', + 'onboarding.custom.oauth.title': 'Conexiones (OAuth)', + 'onboarding.custom.oauth.subtitle': + 'Gmail, Slack, Notion y otros servicios conectados que necesitan OAuth.', + 'onboarding.custom.oauth.defaultDesc': + 'OpenHuman ejecuta un espacio de trabajo de Composio gestionado. Un clic para conectar cada servicio más tarde.', + 'onboarding.custom.oauth.configureDesc': + 'Usa tu propia cuenta / clave API de Composio. Configura en Configuración › Conexiones.', + 'onboarding.custom.search.title': 'Búsqueda web', + 'onboarding.custom.search.subtitle': 'Cómo OpenHuman busca en la web en tu nombre.', + 'onboarding.custom.search.defaultDesc': + 'OpenHuman usa un backend de búsqueda gestionado. Sin claves necesarias.', + 'onboarding.custom.search.configureDesc': + 'Usa tu propia clave de proveedor de búsqueda (Tavily, Brave, etc.). Configura en Configuración › Herramientas.', + 'onboarding.custom.embeddings.title': 'Embeddings', + 'onboarding.custom.embeddings.subtitle': + 'Cómo OpenHuman genera embeddings vectoriales para la búsqueda semántica en memoria.', + 'onboarding.custom.embeddings.defaultDesc': + 'OpenHuman usa un servicio de embeddings gestionado. No se necesita clave de API.', + 'onboarding.custom.embeddings.configureDesc': + 'Usa tu propio proveedor de embeddings (OpenAI, Voyage, Ollama, etc.).', + 'onboarding.custom.memory.title': 'Memoria', + 'onboarding.custom.memory.subtitle': + 'Cómo OpenHuman recuerda tu contexto, preferencias y conversaciones anteriores.', + 'onboarding.custom.memory.defaultDesc': + 'OpenHuman gestiona el almacenamiento y la recuperación de memoria automáticamente. Sin nada que configurar.', + 'onboarding.custom.memory.configureDesc': + 'Inspecciona, exporta o borra la memoria tú mismo. Configura en Configuración › Memoria.', + 'accounts.addAccount': 'Agregar cuenta', + 'accounts.manageAccounts': 'Administrar cuentas', + 'accounts.noAccounts': 'Sin cuentas conectadas', + 'accounts.connectAccount': 'Conecta una cuenta para empezar', + 'accounts.agent': 'Agente', + 'accounts.respondQueue': 'Cola de respuestas', + 'accounts.disconnect': 'Desconectar', + 'accounts.disconnectConfirm': '¿Seguro que quieres desconectar esta cuenta?', + 'accounts.disconnectClearMemory': 'Eliminar también la memoria de esta fuente', + 'accounts.disconnectClearMemoryHint': + 'Elimina permanentemente los fragmentos de memoria locales vinculados a esta conexión.', + 'accounts.searchAccounts': 'Buscar cuentas...', + 'channels.title': 'Canales', + 'channels.configure': 'Configurar canal', + 'channels.setup': 'Configurar', + 'channels.noChannels': 'Sin canales configurados', + 'channels.localManagedUnavailable': + 'Los canales gestionados no están disponibles para usuarios locales.', + 'channels.addChannel': 'Agregar canal', + 'channels.status.connected': 'Conectado', + 'channels.status.disconnected': 'Desconectado', + 'channels.status.error': 'error', + 'channels.status.configuring': 'Configurando', + 'channels.defaultMessaging': 'Canal de mensajería predeterminado', + 'webhooks.title': 'Ganchos web', + 'webhooks.create': 'Crear webhook', + 'webhooks.noWebhooks': 'Sin webhooks configurados', + 'webhooks.url': 'URL', + 'webhooks.secret': 'Secreto', + 'webhooks.events': 'Eventos', + 'webhooks.archiveDirectory': 'Directorio de archivo', + 'webhooks.todayFile': 'Archivo de hoy', + 'invites.title': 'Invitaciones', + 'invites.create': 'Crear invitación', + 'invites.noInvites': 'Sin invitaciones pendientes', + 'invites.code': 'Código de invitación', + 'invites.copyLink': 'Copiar enlace', + 'invites.generate': 'Generar invitación', + 'invites.generating': 'Generando...', + 'invites.refreshing': 'Actualizando invitaciones...', + 'invites.loading': 'Cargando invitaciones...', + 'invites.copyCodeAria': 'Copiar código de invitación', + 'invites.revokeAria': 'Revocar invitación', + 'invites.usedUp': 'Agotado', + 'invites.uses': 'Usos: {current}{max}', + 'invites.expiresOn': 'Expira el {date}', + 'invites.empty': 'Aún no hay invitaciones', + 'invites.emptyHint': 'Genera un código de invitación para compartir con otras personas', + 'invites.revokeTitle': 'Revocar código de invitación', + 'invites.revokePromptPrefix': '¿Estás seguro de que quieres revocar el código de invitación?', + 'invites.revokeWarning': + 'Este código de invitación dejará de ser válido y no podrá usarse para unirse al equipo.', + 'invites.revoking': 'Revocando...', + 'invites.revokeAction': 'Revocar invitación', + 'invites.failedGenerate': 'No se pudo generar la invitación', + 'invites.failedRevoke': 'No se pudo revocar la invitación', + 'team.refreshingMembers': 'Miembros refrescantes...', + 'team.loadingMembers': 'Cargando miembros...', + 'team.memberCount': '{count} miembro', + 'team.memberCountPlural': '{count} miembros', + 'team.you': '(tú)', + 'team.removeAria': 'Quitar {name}', + 'team.noMembers': 'No se encontraron miembros', + 'team.removeTitle': 'Eliminar miembro del equipo', + 'team.removePromptPrefix': '¿Estás seguro de que quieres eliminar?', + 'team.removePromptSuffix': 'del equipo?', + 'team.removeWarning': 'Perderán el acceso al equipo y a todos los recursos del equipo.', + 'team.removing': 'Eliminando...', + 'team.removeAction': 'Eliminar miembro', + 'team.changeRoleTitle': 'Cambiar rol de miembro', + 'team.changeRolePrompt': '¿Cambiar el rol de {name} de {oldRole} a {newRole}?', + 'team.changeRoleAdminGrant': + 'Esto les otorgará permisos completos de administrador, incluida la capacidad de gestionar miembros del equipo.', + 'team.changeRoleAdminRemove': + 'Esto eliminará sus permisos de administrador y ya no podrán gestionar el equipo.', + 'team.changing': 'Cambiando...', + 'team.changeRoleAction': 'Cambiar rol', + 'team.failedChangeRole': 'No se pudo cambiar el rol', + 'team.failedRemoveMember': 'No se pudo eliminar el miembro', + 'devOptions.title': 'Avanzado', + 'devOptions.diagnostics': 'Diagnósticos', + 'devOptions.diagnosticsDesc': 'Estado del sistema, registros y métricas de rendimiento', + 'devOptions.toolPolicyDiagnosticsDesc': + 'Inventario de herramientas, postura política, listas permitidas de MCP y bloqueos recientes', + 'devOptions.toolPolicyDiagnostics.loading': 'Cargando…', + 'devOptions.toolPolicyDiagnostics.unavailable': 'Diagnóstico no disponible', + 'devOptions.toolPolicyDiagnostics.posture.title': 'Postura política', + 'devOptions.toolPolicyDiagnostics.posture.autonomy': 'Autonomía:', + 'devOptions.toolPolicyDiagnostics.posture.workspaceOnly': 'Solo espacio de trabajo:', + 'devOptions.toolPolicyDiagnostics.posture.maxActionsPerHour': 'Máximo actions/hr:', + 'devOptions.toolPolicyDiagnostics.posture.approvalMediumRisk': 'Aprobación (riesgo medio):', + 'devOptions.toolPolicyDiagnostics.posture.blockHighRisk': 'Bloquear alto riesgo:', + 'devOptions.toolPolicyDiagnostics.inventory.title': 'Inventario', + 'devOptions.toolPolicyDiagnostics.inventory.totalTools': 'herramientas totales', + 'devOptions.toolPolicyDiagnostics.inventory.enabledTools': 'Herramientas habilitadas', + 'devOptions.toolPolicyDiagnostics.inventory.mcpStdioTools': 'Herramientas estándar MCP', + 'devOptions.toolPolicyDiagnostics.inventory.jsonRpcTools': 'Herramientas JSON-RPC', + 'devOptions.toolPolicyDiagnostics.mcpAllowlists.title': 'Listas permitidas de MCP', + 'devOptions.toolPolicyDiagnostics.mcpAllowlists.summary': + 'Habilitado: {enabled} · Servidores: {enabledCount}/{totalCount}', + 'devOptions.toolPolicyDiagnostics.mcpAllowlists.unnamed': '', + 'devOptions.toolPolicyDiagnostics.mcpAllowlists.allowDeny': + 'permitir={allowCount} negar={denyCount}', + 'devOptions.toolPolicyDiagnostics.mcpWriteAudit.title': 'Auditoría de escritura MCP', + 'devOptions.toolPolicyDiagnostics.mcpWriteAudit.summary': + 'Habilitado: {enabled} · Reciente (24h): {recentRows}', + 'devOptions.toolPolicyDiagnostics.recentBlocked.title': 'Llamadas bloqueadas recientes', + 'devOptions.toolPolicyDiagnostics.recentBlocked.empty': 'No se registraron llamadas bloqueadas.', + 'devOptions.toolPolicyDiagnostics.redactedSurfaces.title': 'Superficies redactadas', + 'devOptions.toolPolicyDiagnostics.redactedSurfaces.summary': + 'Capacidad de escritura: {writeCount} · Superficies de política: {policyCount}', + 'devOptions.debugPanels': 'Paneles de depuración', + 'devOptions.debugPanelsDesc': + 'Banderas de funciones, inspección de estado y herramientas de depuración', + 'devOptions.webhooks': 'Ganchos web', + 'devOptions.webhooksDesc': 'Configurar y probar integraciones de webhook', + 'devOptions.memoryInspection': 'Inspección de memoria', + 'devOptions.memoryInspectionDesc': 'Explorar, consultar y administrar entradas de memoria', + 'voice.pushToTalk': 'Pulsar para hablar', + 'voice.recording': 'Grabando...', + 'voice.processing': 'Procesando...', + 'voice.languageHint': 'Idioma', + 'misc.rehydrating': 'Cargando tus datos...', + 'misc.checkingServices': 'Verificando servicios...', + 'misc.serviceUnavailable': 'Servicio no disponible', + 'misc.somethingWentWrong': 'Algo salió mal', + 'misc.tryAgainLater': 'Por favor, inténtalo más tarde.', + 'misc.restartApp': 'Reiniciar app', + 'misc.updateAvailable': 'Actualización disponible', + 'misc.updateNow': 'Actualizar ahora', + 'misc.updateLater': 'Después', + 'misc.downloading': 'Descargando...', + 'misc.installing': 'Instalando...', + 'misc.beta': + 'OpenHuman está en beta temprana. No dudes en compartir comentarios o reportar cualquier error que encuentres — cada reporte nos ayuda a mejorar más rápido.', + 'misc.betaFeedback': 'Enviar comentarios', + 'mnemonic.title': 'Frase de recuperación', + 'mnemonic.warning': 'Escribe estas palabras en orden y guárdalas en un lugar seguro.', + 'mnemonic.copyWarning': + 'Nunca compartas tu frase de recuperación. Cualquiera con estas palabras puede acceder a tu cuenta.', + 'mnemonic.copied': 'Frase de recuperación copiada al portapapeles', + 'mnemonic.reveal': 'Mostrar frase', + 'mnemonic.revealPhrase': 'Mostrar frase de recuperación', + 'mnemonic.hidden': 'La frase de recuperación está oculta', + 'privacy.title': 'Privacidad y seguridad', + 'privacy.description': 'Informe de transparencia de datos enviados a servicios externos.', + 'privacy.empty': 'No se detectaron transferencias de datos externas.', + 'privacy.whatLeavesComputer': 'Qué sale de tu computadora', + 'privacy.loading': 'Cargando detalles de privacidad...', + 'privacy.loadError': + 'No se pudo cargar la lista de privacidad en vivo. Los controles de análisis a continuación aún funcionan.', + 'privacy.noCapabilities': 'Ninguna capacidad divulga movimiento de datos actualmente.', + 'privacy.sentTo': 'Enviado a', + 'privacy.leavesDevice': 'Sale del dispositivo', + 'privacy.staysLocal': 'Se queda local', + 'privacy.anonymizedAnalytics': 'Análisis anonimizado', + 'privacy.shareAnonymizedData': 'Compartir datos de uso anonimizados', + 'privacy.shareAnonymizedDataDesc': + 'Ayuda a mejorar OpenHuman compartiendo informes de errores anónimos y análisis de uso. Todos los datos son completamente anonimizados — nunca se recopilan datos personales, mensajes, claves de billetera ni información de sesión.', + 'privacy.meetingFollowUps': 'Seguimientos de reuniones', + 'privacy.autoHandoffMeet': + 'Transferencia automática de transcripciones de Google Meet al orquestador', + 'privacy.autoHandoffMeetDesc': + 'Cuando termina una llamada de Google Meet, el orquestador de OpenHuman puede leer la transcripción y tomar acciones como redactar mensajes, programar seguimientos o publicar resúmenes en tu espacio de Slack conectado. Desactivado por defecto.', + 'privacy.analyticsDisclaimer': + 'Todos los análisis e informes de errores son completamente anonimizados. Cuando está activado, recopilamos solo información de errores, tipo de dispositivo y la ubicación del archivo de los errores. Nunca accedemos a tus mensajes, datos de sesión, claves de billetera, claves API ni ninguna información de identificación personal. Puedes cambiar esta configuración en cualquier momento.', + 'settings.about.version': 'Versión', + 'settings.about.updateAvailable': 'está disponible', + 'settings.about.softwareUpdates': 'Actualizaciones de software', + 'settings.about.lastChecked': 'Última verificación', + 'settings.about.checking': 'Verificando...', + 'settings.about.checkForUpdates': 'Buscar actualizaciones', + 'settings.about.releases': 'Versiones', + 'settings.about.releasesDesc': + 'Explora las notas de versión y compilaciones anteriores en GitHub.', + 'settings.about.openReleases': 'Abrir versiones en GitHub', + 'settings.about.connection': 'Conexión', + 'settings.about.connectionMode': 'Modo', + 'settings.about.connectionModeLocal': 'locales', + 'settings.about.connectionModeCloud': 'nube', + 'settings.about.connectionModeUnset': 'No seleccionado', + 'settings.about.serverUrl': 'Servidor URL', + 'settings.about.serverUrlUnavailable': 'No disponible', + 'settings.about.connectionHelperLocal': + 'Generado en el proceso por la shell Tauri al iniciar la aplicación. El puerto se elige al inicio, por lo que este URL cambia entre lanzamientos.', + 'settings.about.connectionHelperCloud': + 'Conectado a un núcleo remoto. Cambia esto en BootCheck o en el selector de modo en la nube.', + 'settings.heartbeat.title': 'Latidos y bucles', + 'settings.heartbeat.desc': + 'Controla los ritmos de programación en segundo plano e inspecciona el mapa del bucle.', + 'settings.ledgerUsage.title': 'Libro mayor de uso', + 'settings.ledgerUsage.desc': + 'Gasto de crédito reciente, matemáticas de presupuesto y presupuesto de lectura de fondo API.', + 'settings.costDashboard.title': 'Panel de costos', + 'settings.costDashboard.desc': + 'Gasto de 7 días y quema de tokens en todo el enjambre, con ritmo de presupuesto y desglose por modelo.', + 'settings.costDashboard.sevenDayCost': 'Costo diario de 7 días', + 'settings.costDashboard.sevenDayTokens': 'Uso de token de 7 días', + 'settings.costDashboard.totalSpend': 'Total de 7 días', + 'settings.costDashboard.monthlyPace': 'Ritmo mensual', + 'settings.costDashboard.budgetLimit': 'Límite de presupuesto', + 'settings.costDashboard.utilization': 'Uso', + 'settings.costDashboard.modelBreakdown': 'Desglose por modelo', + 'settings.costDashboard.model': 'Modelo', + 'settings.costDashboard.provider': 'proveedor', + 'settings.costDashboard.cost': 'Costo', + 'settings.costDashboard.tokens': 'Fichas', + 'settings.costDashboard.requests': 'Solicitudes', + 'settings.costDashboard.percentOfTotal': '% del total', + 'settings.costDashboard.inputTokens': 'entrado', + 'settings.costDashboard.outputTokens': 'Salida', + 'settings.costDashboard.budgetNormal': 'En camino', + 'settings.costDashboard.budgetWarning': 'Advertencia', + 'settings.costDashboard.budgetExceeded': 'Por encima del presupuesto', + 'settings.costDashboard.noBudget': 'Sin límite establecido', + 'settings.costDashboard.noData': 'No se ha registrado ningún costo en los últimos 7 días.', + 'settings.costDashboard.noModels': 'No hay actividad del modelo en los últimos 7 días.', + 'settings.costDashboard.loading': 'Cargando panel de costos…', + 'settings.costDashboard.disabledHint': + 'El panel de costos está deshabilitado en la configuración. Configure [cost.dashboard] enabled = true en config.toml para volver a habilitarlo.', + 'settings.costDashboard.subtitle': + 'Gasto en vivo y quema de tokens en todo el enjambre. Las barras se actualizan automáticamente cada pocos segundos — no se necesita recargar la página.', + 'settings.costDashboard.summaryAriaLabel': 'Métricas de resumen de costos', + 'settings.costDashboard.lastSevenDays': 'últimos 7 días', + 'settings.costDashboard.utilizationOf': 'de', + 'settings.costDashboard.thisMonth': 'este mes', + 'settings.costDashboard.monthlyPaceHint': + 'Gasto mensual proyectado al ritmo diario actual (promedio × 30).', + 'settings.costDashboard.budgetLimitHint': + 'Presupuesto mensual leído de cost.monthly_limit_usd en config.toml.', + 'settings.costDashboard.dailyTarget': 'Objetivo diario', + 'settings.costDashboard.today': 'Hoy', + 'settings.costDashboard.todayBadge': 'HOY', + 'settings.costDashboard.unknownProvider': '—', + 'settings.costDashboard.justNow': 'Hace un momento', + 'settings.costDashboard.secondsAgo': '{value}s hace', + 'settings.costDashboard.minutesAgo': '{value}m hace', + 'settings.costDashboard.hoursAgo': '{value}h hace', + 'settings.costDashboard.daysAgo': '{value}d hace', + 'settings.costDashboard.updated': 'Actualizado', + 'settings.costDashboard.refresh': 'Refrescar', + 'settings.costDashboard.utcNote': 'Días agrupados en UTC', + 'settings.costDashboard.stackedNote': 'Entrada + salida apiladas', + 'settings.costDashboard.modelBreakdownHint': 'Agregado a lo largo de los últimos 7 días.', + 'settings.costDashboard.noDataHint': + 'Envía un mensaje de agente: el uso de tokens de la próxima llamada al proveedor se mostrará en el gráfico en aproximadamente 10 segundos.', + 'settings.search.title': 'motor de búsqueda', + 'settings.search.menuDesc': + 'Por defecto, usa la búsqueda gestionada por OpenHuman o conecta tu propio proveedor con una clave API.', + 'settings.search.description': + 'Elige el motor de búsqueda que usa el agente, o deshabilita las herramientas de búsqueda por completo. Gestionado usa el backend de OpenHuman (sin configuración). Parallel, Brave y Querit se ejecutan directamente desde tu máquina usando tu clave de API.', + 'settings.search.engineAria': 'motor de búsqueda', + 'settings.search.engineDisabledLabel': 'Disabled', + 'settings.search.engineDisabledDesc': + 'Elimina las herramientas de búsqueda del contexto del agente y de la lista de herramientas disponibles.', + 'settings.search.engineManagedLabel': 'OpenHuman Gestionado', + 'settings.search.engineManagedDesc': + 'Predeterminado. Enrutado a través del backend OpenHuman — no se requiere la clave API.', 'settings.search.localManagedUnavailable': 'La búsqueda gestionada por OpenHuman no está disponible para usuarios locales. Añade tu propia API key de Parallel o Brave para habilitar la búsqueda web.', + 'settings.search.engineParallelLabel': 'paralelo', + 'settings.search.engineParallelDesc': + 'Direct Parallel API: buscar, extraer, chatear, investigar, enriquecer, herramientas de conjuntos de datos.', + 'settings.search.engineBraveLabel': 'Brave Buscar', + 'settings.search.engineBraveDesc': + 'Búsqueda Directa Brave API: herramientas web, de noticias, de imágenes y de videos.', + 'settings.search.engineQueritLabel': 'Quiere', + 'settings.search.engineQueritDesc': + 'Direct Querit API: búsqueda web con filtros de sitio, rango de tiempo, país e idioma.', + 'settings.search.statusConfigured': 'Configurado', + 'settings.search.statusNeedsKey': 'Necesita la clave API', + 'settings.search.fallbackToManaged': + 'No se ha configurado ninguna clave: la búsqueda volverá a Managed hasta que se guarde una clave.', + 'settings.search.getApiKey': 'Obtener la clave API', + 'settings.search.save': 'Guardar', + 'settings.search.clear': 'Borrar', + 'settings.search.show': 'Mostrar', + 'settings.search.hide': 'Ocultar', + 'settings.search.statusSaving': 'Guardando…', + 'settings.search.statusSaved': 'Guardado.', + 'settings.search.statusError': 'Fallido', + 'settings.search.parallelKeyLabel': 'Parallel API clave', + 'settings.search.braveKeyLabel': 'Brave Buscar clave API', + 'settings.search.queritKeyLabel': 'Querit clave API', + 'settings.search.placeholderStored': '•••••••• (almacenado)', + 'settings.search.placeholderParallel': 'pk_...', + 'settings.search.placeholderBrave': 'BSA...', + 'settings.search.placeholderQuerit': 'Querit clave API', + 'settings.search.allowedSitesLabel': 'Sitios web permitidos', + 'settings.search.allowedSitesHint': + 'Hosts que el asistente puede abrir y leer — mediante recuperación web y la herramienta de navegador — uno por línea, p. ej. reuters.com. Un host también incluye sus subdominios. La búsqueda web en sí no está restringida por esta lista.', + 'settings.search.allowedSitesAllOn': + 'El asistente puede abrir cualquier sitio web público. Las direcciones locales y privadas permanecen bloqueadas.', + 'settings.search.allowedSitesPlaceholder': 'reuters.com\napnews.com\ngithub.com', + 'settings.search.allowedSitesSave': 'Guardar sitios web', + 'settings.search.accessModeAria': 'Modo de acceso web', + 'settings.search.accessAllowAll': 'Permitir todo', + 'settings.search.accessCustom': 'Personalizado', + 'settings.search.accessBlockAll': 'Bloquear todo', + 'settings.search.accessBlockAllHint': + 'Todo el acceso web está bloqueado: el asistente no puede abrir ni leer ningún sitio web.', + 'settings.embeddings.title': 'Incrustaciones', + 'settings.embeddings.description': + 'Elige qué proveedor de embeddings convierte la memoria en vectores para la búsqueda semántica. Cambiar el proveedor, modelo o dimensiones invalida los vectores almacenados y requiere un reinicio completo de la memoria.', + 'settings.embeddings.providerAria': 'Proveedor de embeddings', + 'settings.embeddings.statusConfigured': 'Configurado', + 'settings.embeddings.statusNeedsKey': 'Necesita clave API', + 'settings.embeddings.apiKeyLabel': 'Clave API de {provider}', + 'settings.embeddings.placeholderStored': '•••••••• (almacenado)', + 'settings.embeddings.placeholderKey': 'Pega tu clave API…', + 'settings.embeddings.keyStoredEncrypted': 'Tu clave API se almacena cifrada en este dispositivo.', + 'settings.embeddings.show': 'Mostrar', + 'settings.embeddings.hide': 'Ocultar', + 'settings.embeddings.save': 'Guardar', + 'settings.embeddings.clear': 'Borrar', + 'settings.embeddings.model': 'Modelo', + 'settings.embeddings.dimensions': 'Dimensiones', + 'settings.embeddings.customEndpoint': 'Endpoint personalizado', + 'settings.embeddings.customModelPlaceholder': 'Nombre del modelo', + 'settings.embeddings.customDimsPlaceholder': 'Se atenúa', + 'settings.embeddings.applyCustom': 'Aplicar', + 'settings.embeddings.testConnection': 'Probar conexión', + 'settings.embeddings.testing': 'Probando…', + 'settings.embeddings.testSuccess': 'Conectado — {dims} dimensiones', + 'settings.embeddings.testFailed': 'Fallido: {error}', + 'settings.embeddings.saving': 'Guardando…', + 'settings.embeddings.saved': 'Guardado.', + 'settings.embeddings.errorPrefix': 'Fallido', + 'settings.embeddings.wipeTitle': '¿Reiniciar vectores de memoria?', + 'settings.embeddings.wipeBody': + 'Cambiar el proveedor de embeddings, modelo o dimensiones borrará todos los vectores de memoria almacenados. La memoria debe reconstruirse antes de que la recuperación funcione de nuevo. Esto no se puede deshacer.', + 'settings.embeddings.cancel': 'Cancelar', + 'settings.embeddings.confirmWipe': 'Borrar y aplicar', + 'settings.embeddings.setupTitle': 'Configurar {provider}', + 'settings.embeddings.saveAndSwitch': 'Guardar y cambiar', + 'settings.embeddings.optional': 'opcional', + 'settings.embeddings.vectorSearchDisabled': + 'La búsqueda vectorial está desactivada. La recuperación de memoria utilizará únicamente la coincidencia de palabras clave y la actualidad — sin clasificación semántica.', + 'settings.embeddings.clearKey': 'Borrar clave API', + 'pages.settings.ai.embeddings': 'Incrustaciones', + 'pages.settings.ai.embeddingsDesc': + 'Modelo de codificación vectorial para recuperación de memoria', + 'mcp.alphaBadge': 'Alfa', + 'mcp.alphaBannerText': + 'La compatibilidad con el servidor MCP se encuentra en las primeras etapas alfa. El registro de Smithery, el flujo de instalación y el cableado de herramientas pueden comportarse mal o cambiar de forma entre versiones.', + 'mcp.toolList.noTools': 'No hay herramientas disponibles.', + 'mcp.setup.secretDialog.title': 'Configuración MCP: ingresar secreto', + 'mcp.setup.secretDialog.bodyPrefix': 'El agente de configuración MCP necesita', + 'mcp.setup.secretDialog.bodySuffix': + '. Su valor se envía directamente al proceso principal y nunca entra en la conversación AI.', + 'mcp.setup.secretDialog.inputLabel': 'Valor', + 'mcp.setup.secretDialog.inputPlaceholder': 'Pegar aquí', + 'mcp.setup.secretDialog.show': 'Mostrar', + 'mcp.setup.secretDialog.hide': 'Ocultar', + 'mcp.setup.secretDialog.submit': 'Enviar', + 'mcp.setup.secretDialog.cancel': 'Cancelar', + 'mcp.setup.secretDialog.submitting': 'Enviando…', + 'mcp.setup.secretDialog.errorPrefix': 'No se pudo enviar:', + 'mcp.setup.secretDialog.privacyNote': + 'Almacenado cifrado en la tabla de secretos local MCP. Nunca se registra ni se envía a un modelo.', + 'devices.betaBadge': 'Beta', + 'devices.betaText': + 'Esta función está actualmente en beta. Vincula teléfonos iOS con este OpenHuman para usarlos como cliente remoto.', 'devices.comingSoonDescription': 'El emparejamiento de dispositivos llegará pronto. Esta página será el lugar para emparejar iPhones y gestionar dispositivos conectados.', + 'devices.title': 'Dispositivos', + 'devices.pairIphone': 'Emparejar iPhone', + 'devices.noPaired': 'No hay dispositivos emparejados', + 'devices.emptyState': 'Escanee un QR code en su iPhone para conectarlo a esta sesión OpenHuman.', + 'devices.devicePairedTitle': 'Dispositivo emparejado', + 'devices.devicePairedMessage': 'iPhone conectado correctamente.', + 'devices.deviceRevokedTitle': 'Dispositivo revocado', + 'devices.deviceRevokedMessage': '{label} eliminado.', + 'devices.revokeFailedTitle': 'Revocar falló', + 'devices.online': 'En línea', + 'devices.offline': 'Sin conexión', + 'devices.lastSeenNever': 'nunca', + 'devices.lastSeenNow': 'Justo ahora', + 'devices.lastSeenMinutes': 'Hace {count}m', + 'devices.lastSeenHours': 'Hace {count}h', + 'devices.lastSeenDays': 'Hace {count}d', + 'devices.revoke': 'Revocar', + 'devices.revokeAria': 'Revocar {label}', + 'devices.confirmRevokeTitle': '¿Revocar dispositivo?', + 'devices.confirmRevokeBody': '{label} ya no podrá conectarse. Esta acción no se puede deshacer.', + 'devices.loadFailed': 'Error al cargar los dispositivos: {message}', + 'devices.pairModal.title': 'Emparejar iPhone', + 'devices.pairModal.loading': 'Generando código de emparejamiento…', + 'devices.pairModal.instructions': 'Abre la app de OpenHuman en tu iPhone y escanea este código.', + 'devices.pairModal.expiresIn': 'El código caduca en ~{count} minuto', + 'devices.pairModal.expiresInPlural': 'El código caduca en ~{count} minutos', + 'devices.pairModal.showDetails': 'Mostrar detalles', + 'devices.pairModal.hideDetails': 'Ocultar detalles', + 'devices.pairModal.channelId': 'ID de canal', + 'devices.pairModal.pairingUrl': 'Emparejamiento URL', + 'devices.pairModal.expiredTitle': 'El código QR expiró', + 'devices.pairModal.expiredBody': 'Genera un código nuevo para continuar con el emparejamiento.', + 'devices.pairModal.generateNewCode': 'Generar nuevo código', + 'devices.pairModal.successTitle': 'iPhone emparejado', + 'devices.pairModal.autoClose': 'Cerrando automáticamente…', + 'devices.pairModal.errorPrefix': 'No se pudo crear el emparejamiento: {message}', + 'devices.pairModal.errorTitle': 'Algo salió mal', + 'devices.pairModal.copyUrl': 'Copiar', + 'mcp.catalog.searchAria': 'Buscar catálogo de herrería', + 'mcp.catalog.searchPlaceholder': 'Buscar en el catálogo de Herrería...', + 'mcp.catalog.loadFailed': 'No se pudo cargar el catálogo', + 'mcp.catalog.noResults': 'No se encontraron servidores.', + 'mcp.catalog.noResultsFor': 'No se encontraron servidores para "{query}".', + 'mcp.catalog.loadMore': 'Cargar más', + 'mcp.configAssistant.title': 'Asistente de configuración', + 'mcp.configAssistant.empty': + 'Pregunte sobre la configuración, las variables de entorno requeridas o los pasos de configuración.', + 'mcp.configAssistant.suggestedValues': 'Valores sugeridos:', + 'mcp.configAssistant.valueHidden': '(valor oculto)', + 'mcp.configAssistant.applySuggested': 'Aplicar valores sugeridos', + 'mcp.configAssistant.reinstallHint': 'Vuelva a instalar con estos valores para aplicarlos.', + 'mcp.configAssistant.thinking': 'Pensando...', + 'mcp.configAssistant.inputPlaceholder': + 'Haga una pregunta (Intro para enviar, Mayús+Intro para nueva línea)', + 'mcp.configAssistant.send': 'enviar', + 'mcp.configAssistant.failedResponse': 'No se pudo obtener respuesta', + 'mcp.toolList.availableSingular': '{count} herramienta disponible', + 'mcp.toolList.availablePlural': '{count} herramientas disponibles', + 'mcp.toolList.tryTool': 'Intentar', + 'mcp.toolList.tryToolAria': 'Abrir el área de pruebas de ejecución para {name}', + 'mcp.playground.title': 'Ejecutar {name}', + 'mcp.playground.close': 'Cerrar el patio de recreo', + 'mcp.playground.inputSchema': 'Esquema de entrada', + 'mcp.playground.argsLabel': 'Argumentos (JSON)', + 'mcp.playground.argsHelp': + 'Escriba JSON que coincida con el esquema de entrada. La entrada vacía se trata como {}.', + 'mcp.playground.runShortcut': '⌘/Ctrl + Enter para ejecutar', + 'mcp.playground.format': 'Formato', + 'mcp.playground.invalidJson': 'JSON no válido', + 'mcp.playground.run': 'Ejecutar herramienta', + 'mcp.playground.running': 'Corriendo…', + 'mcp.playground.result': 'Resultado', + 'mcp.playground.resultError': 'La herramienta devolvió un error', + 'mcp.playground.copyResult': 'Copiar resultado', + 'mcp.playground.copied': 'copiado', + 'mcp.playground.history': 'Historia', + 'mcp.playground.historyEmpty': 'Aún no hay invocaciones en esta sesión.', + 'mcp.playground.historyLoad': 'Cargar', + 'mcp.playground.unexpectedError': 'Error inesperado al invocar la herramienta.', + 'mcp.catalog.deployed': 'Implementado', + 'mcp.catalog.installCount': '{count} instala', + 'app.update.dismissNotification': 'Descartar notificación de actualización', + 'bootCheck.rpcAuthSuffix': 'en cada RPC.', + 'app.localAiDownload.expandAria': 'Ampliar el progreso de la descarga', + 'app.localAiDownload.collapseAria': 'Contraer el progreso de la descarga', + 'app.localAiDownload.dismissAria': 'Descartar notificación de descarga', + 'mobile.nav.ariaLabel': 'Navegación móvil', + 'progress.stepsAria': 'Pasos de progreso', + 'progress.stepAria': 'Paso {current} de {total}', + 'workspace.vaultsTitle': 'Bóvedas de conocimiento', + 'workspace.vaultsDesc': + 'Apunte a una carpeta local; Los archivos se fragmentan y reflejan en la memoria.', + 'calls.title': 'llamadas', + 'calls.comingSoonBody': + 'Próximamente llegarán las llamadas asistidas por IA. Manténganse al tanto.', + 'art.rotatingTetrahedronAria': 'Nave espacial giratoria de tetraedro invertido', + 'mcp.installed.title': 'Instalado', + 'mcp.installed.browseCatalog': 'Explorar catálogo', + 'mcp.installed.empty': 'Aún no hay servidores MCP instalados.', + 'mcp.installed.toolSingular': 'herramienta {count}', + 'mcp.installed.toolPlural': '{count} herramientas', + 'mcp.health.title': 'Salud', + 'mcp.health.summaryAria': 'Resumen del estado de la conexión MCP', + 'mcp.health.connectedCount': '{count} conectado', + 'mcp.health.connectingCount': 'Conexión {count}', + 'mcp.health.errorCount': 'Error {count}', + 'mcp.health.disconnectedCount': '{count} inactivo', + 'mcp.health.retryAll': 'Reintentar todo ({count})', + 'mcp.health.retryAllAria': 'Vuelva a intentar todos los servidores MCP con errores {count}', + 'mcp.health.disconnectAll': 'Desconectar todo ({count})', + 'mcp.health.disconnectAllAria': 'Desconecte todos los servidores MCP conectados al {count}', + 'mcp.health.disconnectConfirm.title': '¿Desconectar todos los servidores MCP?', + 'mcp.health.disconnectConfirm.body': + 'Esto desconectará {count} servidores MCP conectados actualmente. Se conservan las configuraciones instaladas y los secretos; puedes volver a conectar cualquier servidor más tarde.', + 'mcp.health.disconnectConfirm.cancel': 'Cancelar', + 'mcp.health.disconnectConfirm.confirm': 'Desconectar todo', + 'mcp.health.opErrorGeneric': 'La operación masiva falló. Ver registros.', + 'mcp.health.bulkPartialFailure': + '{failed} de {total} servidores fallaron. Consulta los registros.', + 'mcp.installed.search.landmarkAria': 'Buscar servidores MCP instalados', + 'mcp.installed.search.inputAria': 'Filtrar servidores MCP instalados por nombre', + 'mcp.installed.search.placeholder': 'Filtrar servidores…', + 'mcp.installed.search.clearAria': 'Limpiar filtro', + 'mcp.installed.search.countMatches': 'Servidores {shown} de {total}', + 'mcp.installed.search.noMatches': 'Ningún servidor coincide con "{query}".', + 'mcp.inventory.openButton': 'Inventario', + 'mcp.inventory.openAria': 'Abra el panel de inventario MCP compartible', + 'mcp.inventory.title': 'Inventario MCP compartible', + 'mcp.inventory.subtitle': + 'Exporte sus servidores MCP instalados como un manifiesto portátil y sin secretos, o importe uno de un compañero de equipo. Los valores de entorno secretos nunca se incluyen ni se importan.', + 'mcp.inventory.close': 'Cerrar panel de inventario', + 'mcp.inventory.tablistAria': 'Secciones de inventario', + 'mcp.inventory.tab.export': 'Exportar', + 'mcp.inventory.tab.import': 'Importar', + 'mcp.inventory.export.empty': + 'Aún no hay servidores MCP instalados: no hay nada que exportar. Primero instale uno del catálogo.', + 'mcp.inventory.export.privacyTitle': '¿Qué hay en este manifiesto?', + 'mcp.inventory.export.privacyBody': + 'Nombres de servidor, nombres calificados, NOMBRES CLAVE de variables de entorno y configuraciones no secretas únicamente. Los valores secretos, los identificadores de su máquina y las marcas de tiempo por instalación se eliminan intencionalmente.', + 'mcp.inventory.export.serverCount': 'Servidores {count} en este manifiesto', + 'mcp.inventory.export.copy': 'Copiar', + 'mcp.inventory.export.copied': 'copiado', + 'mcp.inventory.export.copyAria': 'Copie el manifiesto JSON al portapapeles.', + 'mcp.inventory.export.download': 'Descargar', + 'mcp.inventory.export.downloadAria': 'Descargue el manifiesto como un archivo JSON', + 'mcp.inventory.import.trustTitle': + 'Trate los manifiestos importados como código que no es de confianza', + 'mcp.inventory.import.trustBody': + 'Un servidor MCP es una herramienta que usted le otorga a su agente. Importe únicamente manifiestos de fuentes en las que confíe. Cada instalación requiere su clic explícito; nada se instala automáticamente.', + 'mcp.inventory.import.pasteLabel': 'Pegar manifiesto JSON', + 'mcp.inventory.import.pastePlaceholder': + 'Pegue un manifiesto aquí o cargue un archivo.json a continuación.', + 'mcp.inventory.import.preview': 'Avance', + 'mcp.inventory.import.clear': 'Claro', + 'mcp.inventory.import.uploadFile': 'o cargar un archivo.json', + 'mcp.inventory.import.uploadFileAria': 'Cargar un archivo.json de manifiesto', + 'mcp.inventory.import.fileTooLarge': + 'El archivo es demasiado grande (más de 1 MB). Negarse a cargar.', + 'mcp.inventory.import.fileReadFailed': 'No se pudo leer el archivo.', + 'mcp.inventory.import.parseErrorPrefix': 'No se pudo analizar el manifiesto:', + 'mcp.inventory.import.previewHeading': 'Avance', + 'mcp.inventory.import.previewCounts': 'Servidores {total}: {newly} nuevo, {already} ya instalado', + 'mcp.inventory.import.previewEmpty': 'El manifiesto no contiene servidores.', + 'mcp.inventory.import.exportedFrom': 'Exportado desde {exporter}', + 'mcp.inventory.import.exportedAt': 'en {when}', + 'mcp.inventory.import.statusNew': 'Nuevo', + 'mcp.inventory.import.statusAlreadyInstalled': 'Ya instalado', + 'mcp.inventory.import.envKeysLabel': 'Teclas ambientales', + 'mcp.inventory.import.install': 'Instalar', + 'mcp.inventory.import.installAria': 'Instale {name} desde este manifiesto', + 'mcp.inventory.import.skipped': 'omitido', + 'mcp.inventory.parseError.empty': 'El manifiesto está vacío.', + 'mcp.inventory.parseError.invalidJson': 'JSON no válido.', + 'mcp.inventory.parseError.rootNotObject': 'El manifiesto debe ser un objeto JSON en la raíz.', + 'mcp.inventory.parseError.unsupportedSchema': + 'Esquema de manifiesto no compatible: este archivo no fue generado por un exportador compatible.', + 'mcp.inventory.parseError.missingExportedAt': 'Campo `exported_at` faltante o no válido.', + 'mcp.inventory.parseError.missingExportedBy': 'Campo `exported_by` faltante o no válido.', + 'mcp.inventory.parseError.invalidServers': 'Matriz `servers` faltante o no válida.', + 'mcp.inventory.parseError.serverNotObject': 'Una entrada del servidor no es un objeto.', + 'mcp.inventory.parseError.serverMissingQualifiedName': + 'A una entrada del servidor le falta su nombre_calificado.', + 'mcp.inventory.parseError.serverMissingDisplayName': + 'A una entrada del servidor le falta su nombre para mostrar.', + 'mcp.inventory.parseError.serverEnvKeysNotArray': + 'Una entrada del servidor tiene un campo env_keys que no es una matriz de cadenas.', + 'mcp.inventory.parseError.serverContainsEnv': + 'Una entrada de servidor contiene un mapa de valores `env`. Negarse a importar: los manifiestos solo deben contener env_keys (nombres), nunca valores secretos.', + 'mcp.inventory.parseError.duplicateQualifiedName': + 'Nombre_calificado duplicado encontrado en el manifiesto. Cada servidor debe aparecer como máximo una vez.', + 'mcp.tab.loading': 'Cargando servidores MCP...', + 'mcp.tab.emptyDetail': 'Seleccione un servidor o explore el catálogo.', + 'mcp.install.loadingDetail': 'Cargando detalles del servidor...', + 'mcp.install.back': 'volver', + 'mcp.install.title': 'Instalar {name}', + 'mcp.install.requiredEnv': 'Variables de entorno requeridas', + 'mcp.install.enterValue': 'Ingrese {key}', + 'mcp.install.show': 'Mostrar', + 'mcp.install.hide': 'Ocultar', + 'mcp.install.configLabel': 'Configuración (JSON opcional)', + 'mcp.install.configPlaceholder': '{"key": "value"}', + 'mcp.install.missingRequired': 'Se requiere "{key}"', + 'mcp.install.invalidJson': 'La configuración JSON no es JSON válida', + 'mcp.install.failedDetail': 'No se pudieron cargar los detalles del servidor', + 'mcp.install.failedInstall': 'La instalación falló', + 'mcp.install.button': 'Instalar', + 'mcp.install.installing': 'Instalando...', + 'mcp.detail.suggestedEnvReady': 'Valores ambientales sugeridos listos', + 'mcp.detail.suggestedEnvBody': + 'Reinstale este servidor con los valores sugeridos para aplicarlos: {keys}', + 'mcp.detail.connect': 'Conectar', + 'mcp.detail.connecting': 'Conectando...', + 'mcp.detail.disconnect': 'Desconectar', + 'mcp.detail.hideAssistant': 'Ocultar asistente', + 'mcp.detail.helpConfigure': 'Ayúdame a configurar', + 'mcp.detail.confirmUninstall': '¿Confirmar la desinstalación?', + 'mcp.detail.confirmUninstallAction': 'Sí, desinstalar', + 'mcp.detail.uninstall': 'Desinstalar', + 'mcp.detail.envVars': 'Variables ambientales', + 'mcp.detail.tools': 'Herramientas', + 'onboarding.skipForNow': 'Saltar por ahora', + 'onboarding.localAI.continueWithCloud': 'Continuar con la nube', + 'onboarding.localAI.useLocalAnyway': + 'Usar IA local de todos modos (no recomendado para tu dispositivo)', + 'onboarding.localAI.useLocalInstead': 'Utilice IA local en su lugar (conecte Ollama ahora)', + 'onboarding.localAI.setupIssue': 'La configuración local de la IA encontró un problema', + 'autonomy.title': 'Autonomía del agente', + 'autonomy.maxActionsLabel': 'Acciones máximas por hora', + 'autonomy.maxActionsHelp': + 'Número máximo de acciones de herramientas que un agente puede ejecutar por hora. El nuevo valor se aplica en tu próximo chat. Los trabajos cron y los oyentes de canales mantienen su límite actual hasta que reinicies OpenHuman.', + 'autonomy.statusSaving': 'Guardando…', + 'autonomy.statusSaved': 'Guardado.', + 'autonomy.statusFailed': 'Fallido', + 'autonomy.unlimitedNote': 'Ilimitado: limitación de velocidad deshabilitada.', + 'autonomy.invalidIntegerMsg': + 'Debe ser un número entero positivo (usa el ajuste preestablecido Sin límite para no tener límite).', + 'autonomy.presetUnlimited': 'Ilimitado (predeterminado)', + 'triggers.toggleFailed': '{action} falló para {trigger}: {message}', + 'settings.ai.overview': 'Resumen del sistema de IA', + 'settings.ai.configStatus': 'Estado de configuración', + 'settings.ai.fallbackMode': 'Modo de respaldo', + 'settings.ai.loadedFromRuntime': 'Cargado desde el runtime', + 'settings.ai.loadingDuration': 'Duración de carga', + 'settings.ai.localRuntime': 'Runtime de modelo local', + 'settings.ai.openManager': 'Abrir gestor', + 'settings.ai.retryDownload': 'Reintentar descarga', + 'settings.ai.state': 'Estado', + 'settings.ai.targetModel': 'Modelo objetivo', + 'settings.ai.download': 'Descargar', + 'settings.ai.localModelUnavailable': 'Estado del modelo local no disponible.', + 'settings.ai.soulConfig': 'Configuración de persona SOUL', + 'settings.ai.refreshing': 'Actualizando...', + 'settings.ai.refreshSoul': 'Actualizar SOUL', + 'settings.ai.loadingSoul': 'Cargando configuración de SOUL...', + 'settings.ai.identity': 'Identidad', + 'settings.ai.personality': 'Personalidad', + 'settings.ai.safetyRules': 'Reglas de seguridad', + 'settings.ai.source': 'Fuente', + 'settings.ai.loaded': 'Cargado', + 'settings.ai.toolsConfig': 'Configuración de TOOLS', + 'settings.ai.refreshTools': 'Actualizar TOOLS', + 'settings.ai.toolsAvailable': 'Herramientas disponibles', + 'settings.ai.tools': 'herramientas', + 'settings.ai.activeSkills': 'Skills activos', + 'settings.ai.skills': 'habilidades', + 'settings.ai.skillsOverview': 'Resumen de skills', + 'settings.ai.refreshingAll': 'Actualizando todo...', + 'settings.ai.refreshAll': 'Actualizar toda la configuración de IA', + 'settings.notifications.suppressAll': 'Suprimir todas las notificaciones', + 'settings.notifications.suppressAllDesc': + 'Bloquear todas las notificaciones del sistema de las apps integradas, independientemente del estado de foco.', + 'settings.notifications.toggleDnd': 'Activar/desactivar No molestar', + 'settings.notifications.categories': 'Categorías', + 'settings.notifications.categoryFooter': + 'Deshabilitar una categoría impide que aparezcan nuevas notificaciones de ese tipo en el centro de notificaciones. Las notificaciones existentes permanecen hasta que se eliminan.', + 'settings.billing.movedToWeb': 'La facturación se trasladó a la web', + 'settings.billing.openDashboard': 'Abrir panel de facturación', + 'settings.billing.movedToWebDesc': + 'Los cambios de suscripción, métodos de pago, créditos y facturas ahora se gestionan en TinyHumans en la web.', + 'settings.billing.backToSettings': 'Volver a configuración', + 'settings.billing.openingBrowser': 'Abriendo tu navegador...', + 'settings.billing.browserNotOpen': 'Si tu navegador no se abrió, usa el botón de arriba.', + 'settings.billing.browserOpenFailed': + 'No se pudo abrir el navegador automáticamente. Usa el botón de arriba.', + 'settings.tools.chooseCapabilities': 'Elige qué capacidades puede usar OpenHuman en tu nombre.', + 'settings.tools.saveChanges': 'Guardar cambios', + 'settings.tools.preferencesSaved': 'Preferencias guardadas', + 'settings.tools.saveFailed': 'No se pudieron guardar las preferencias. Inténtalo de nuevo.', + 'settings.screenAwareness.mode': 'Modo', + 'settings.screenAwareness.allExceptBlacklist': 'Todo excepto lista negra', + 'settings.screenAwareness.whitelistOnly': 'Solo lista blanca', + 'settings.screenAwareness.screenMonitoring': 'Monitoreo de pantalla', + 'settings.screenAwareness.saveSettings': 'Guardar configuración', + 'settings.screenAwareness.session': 'Sesión', + 'settings.screenAwareness.status': 'Estado', + 'settings.screenAwareness.active': 'Activo', + 'settings.screenAwareness.stopped': 'Detenido', + 'settings.screenAwareness.remaining': 'Restante', + 'settings.screenAwareness.startSession': 'Iniciar sesión', + 'settings.screenAwareness.stopSession': 'Detener sesión', + 'settings.screenAwareness.analyzeNow': 'Analizar ahora', + 'settings.screenAwareness.macosOnly': + 'La captura de pantalla y los controles de permisos de Conciencia de pantalla actualmente solo son compatibles con macOS.', + 'connections.comingSoon': 'Próximamente', + 'connections.setUp': 'Configurar', + 'connections.configured': 'Configurado', + 'connections.unavailable': 'No disponible', + 'connections.checking': 'Verificando…', + 'connections.walletConfigured': + 'Las identidades locales de EVM, BTC, Solana y Tron están configuradas desde tu frase de recuperación.', + 'connections.walletReady': + 'Configura identidades locales de EVM, BTC, Solana y Tron desde una sola frase de recuperación.', + 'connections.walletError': + 'No se pudo verificar el estado de la billetera. Toca para reintentar desde el panel de Frase de recuperación.', + 'connections.walletChecking': 'Verificando estado de la billetera...', + 'connections.walletIdentities': 'Identidades de billetera', + 'connections.walletDerived': + 'Derivadas localmente desde tu frase de recuperación y almacenadas solo como metadatos seguros.', + 'connections.privacySecurity': 'Privacidad y seguridad', + 'connections.privacySecurityDesc': + 'Todos los datos y credenciales se almacenan localmente con política de cero retención de datos. Tu información está cifrada y nunca se comparte con terceros.', + 'channels.status.connecting': 'Conectando', + 'channels.status.notConfigured': 'No configurado', + 'channels.noActiveRoute': 'Sin ruta activa', + 'channels.activeRoute': 'Ruta activa', + 'channels.loadingDefinitions': 'Cargando definiciones de canales...', + 'channels.channelConnections': 'Conexiones de canales', + 'channels.configureAuthModes': + 'Configura los modos de autenticación para cada canal de mensajería.', + 'channels.configNotAvailable': 'Configuración para', + 'channels.channel': 'canal', + 'devOptions.coreModeNotSet': 'Modo core: no establecido', + 'devOptions.coreModeNotSetDesc': + 'El selector de verificación de arranque aún no se ha confirmado. Usa Cambiar modo en el selector para elegir Local o Cloud.', + 'devOptions.local': 'locales', + 'devOptions.embeddedCoreSidecar': 'Core sidecar integrado', + 'devOptions.sidecarSpawned': 'Iniciado en proceso por el shell de Tauri al arrancar la app.', + 'devOptions.cloud': 'Nube', + 'devOptions.remoteCoreRpc': 'RPC de core remoto', + 'devOptions.token': 'ficha', + 'devOptions.tokenNotSet': 'no establecido — RPC devolverá 401', + 'devOptions.triggerSentryTest': 'Activar prueba de Sentry (staging)', + 'devOptions.triggerSentryTestDesc': + 'Dispara un error etiquetado para verificar el pipeline de Sentry. Issue #1072 — eliminar después de la verificación.', + 'devOptions.sendTestEvent': 'Enviar evento de prueba', + 'devOptions.sending': 'Enviando…', + 'devOptions.eventSent': 'Evento enviado', + 'devOptions.sentryDisabled': '(sin identificación: Sentry deshabilitado en esta compilación)', + 'devOptions.failed': 'Fallido', + 'devOptions.appLogs': 'Registros de la app', + 'devOptions.appLogsDesc': + 'Abre la carpeta que contiene los archivos de registro diarios. Adjunta el archivo más reciente al reportar un problema.', + 'devOptions.openLogsFolder': 'Abrir carpeta de registros', + 'mnemonic.phraseSaved': 'Frase de recuperación guardada', + 'mnemonic.walletReady': + 'Las identidades de billetera multicadena están listas. Volviendo a configuración...', + 'mnemonic.writeDownWords': 'Anota estas', + 'mnemonic.wordsInOrder': + 'palabras en orden y guárdalas en un lugar seguro. Esta frase protege tu clave de cifrado local y tus identidades de billetera EVM, BTC, Solana y Tron.', + 'mnemonic.cannotRecover': + 'Esta frase no puede recuperarse si se pierde y debe permanecer completamente local en tu dispositivo.', + 'mnemonic.copyToClipboard': 'Copiar al portapapeles', + 'mnemonic.alreadyHavePhrase': 'Ya tengo una frase de recuperación', + 'mnemonic.consentSaved': + 'Guardé esta frase y consiento usarla para la configuración de billetera local', + 'mnemonic.enterPhraseToRestore': + 'Ingresa tu frase de recuperación a continuación para restaurar tus identidades de billetera local, o pega la frase completa en cualquier campo (12 palabras para respaldos nuevos; las frases de 24 palabras de versiones anteriores aún funcionan).', + 'mnemonic.words': 'Palabras', + 'mnemonic.validPhrase': 'Frase de recuperación válida', + 'mnemonic.generateNewPhrase': 'Generar una nueva frase de recuperación', + 'mnemonic.securingData': 'Protegiendo tus datos...', + 'mnemonic.saveRecoveryPhrase': 'Guardar frase de recuperación', + 'mnemonic.userNotLoaded': 'Usuario no cargado. Inicia sesión de nuevo o recarga la página.', + 'mnemonic.invalidPhrase': + 'Frase de recuperación inválida. Revisa las palabras e inténtalo de nuevo.', + 'mnemonic.somethingWentWrong': 'Algo salió mal. Inténtalo de nuevo.', + 'team.failedToCreate': 'No se pudo crear el equipo', + 'team.invalidInviteCode': 'Código de invitación inválido o expirado', + 'team.failedToSwitch': 'No se pudo cambiar de equipo', + 'team.failedToLeave': 'No se pudo salir del equipo', + 'team.role.owner': 'Propietario', + 'team.role.admin': 'Administrador', + 'team.role.billingManager': 'Gestor de facturación', + 'team.role.member': 'Miembro', + 'team.active': 'Activo', + 'team.personalTeam': 'Equipo personal', + 'team.manageTeam': 'Administrar equipo', + 'team.switching': 'Cambiando...', + 'team.switch': 'Cambiar', + 'team.leaving': 'Saliendo...', + 'team.leave': 'Salir', + 'team.yourTeams': 'Tus equipos', + 'team.createNewTeam': 'Crear nuevo equipo', + 'team.teamName': 'Nombre del equipo', + 'team.creating': 'Creando...', + 'team.joinExistingTeam': 'Unirse a un equipo existente', + 'team.inviteCode': 'Código de invitación', + 'team.joining': 'Uniéndose...', + 'team.join': 'Unirse', + 'team.leaveTeam': 'Salir del equipo', + 'team.confirmLeave': '¿Seguro que quieres salir de', + 'team.leaveWarning': + 'Perderás el acceso al equipo y todos sus recursos. Necesitarás una nueva invitación para volver a unirte.', + 'team.management': 'Gestión de equipo', + 'team.notFound': 'Equipo no encontrado', + 'team.accessDenied': 'Acceso denegado', + 'team.members': 'Miembros', + 'team.membersDesc': 'Administrar los miembros y roles del equipo', + 'team.invites': 'invita', + 'team.invitesDesc': 'Generar y administrar códigos de invitación', + 'team.settings': 'Configuración del equipo', + 'team.settingsDesc': 'Editar el nombre y la configuración del equipo', + 'team.editSettings': 'Editar configuración del equipo', + 'team.enterName': 'Introduce el nombre del equipo', + 'team.saving': 'Guardando...', + 'team.saveChanges': 'Guardar cambios', + 'team.delete': 'Eliminar equipo', + 'team.deleteDesc': 'Eliminar permanentemente este equipo', + 'team.deleting': 'Eliminando...', + 'team.failedToUpdate': 'No se pudo actualizar el equipo', + 'team.failedToDelete': 'No se pudo eliminar el equipo', + 'team.manageTitle': 'Administrar {name}', + 'team.planCreated': 'Plan {plan} • Creado {date}', + 'team.confirmDelete': '¿Está seguro de que desea eliminar {name}?', + 'team.deleteWarning': + 'Esta acción no se puede deshacer. Todos los datos del equipo serán eliminados permanentemente.', + 'voice.title': 'Dictado de voz', + 'voice.settings': 'Configuración de voz', + 'voice.settingsDesc': + 'Mantén presionada la tecla de acceso rápido para dictar e insertar texto en el campo activo.', + 'voice.hotkey': 'Tecla de acceso rápido', + 'voice.activationMode': 'Modo de activación', + 'voice.tapToToggle': 'Toca para alternar', + 'voice.writingStyle': 'Estilo de escritura', + 'voice.verbatimTranscription': 'Transcripción literal', + 'voice.naturalCleanup': 'Limpieza natural', + 'voice.autoStart': 'Iniciar servidor de voz automáticamente con el core', + 'voice.customDictionary': 'Diccionario personalizado', + 'voice.customDictionaryDesc': + 'Agrega nombres, términos técnicos y palabras de dominio para mejorar la precisión del reconocimiento.', + 'voice.addWord': 'Agregar una palabra...', + 'voice.sttDisabled': + 'El dictado de voz está desactivado hasta que el modelo STT local se descargue y esté listo.', + 'voice.openLocalAiModel': 'Abrir modelo de IA local', + 'voice.serverRestarted': 'Servidor de voz reiniciado con la nueva configuración.', + 'voice.settingsSaved': 'Configuración de voz guardada.', + 'voice.serverStarted': 'Servidor de voz iniciado.', + 'voice.serverStopped': 'Servidor de voz detenido.', + 'voice.saveVoiceSettings': 'Guardar configuración de voz', + 'voice.startVoiceServer': 'Iniciar servidor de voz', + 'voice.stopVoiceServer': 'Detener servidor de voz', + 'voice.debugTitle': 'Depuración de voz', + 'voice.failedToLoadSettings': 'No se pudo cargar la configuración de voz', + 'voice.failedToSaveSettings': 'No se pudo guardar la configuración de voz', + 'voice.failedToStartServer': 'No se pudo iniciar el servidor de voz', + 'voice.failedToStopServer': 'No se pudo detener el servidor de voz', + 'voice.sttDisabledPrefix': + 'La dictación por voz está desactivada hasta que se descargue el modelo STT local. Usa el', + 'voice.sttDisabledSuffix': 'sección anterior para instalar Whisper.', + 'voice.debug.failedToLoadVoiceDebugData': 'No se pudieron cargar los datos de depuración de voz', + 'voice.debug.settingsSaved': 'Configuración de depuración guardada.', + 'voice.debug.failedToSaveSettings': 'No se pudo guardar la configuración de voz', + 'voice.debug.runtimeStatus': 'Estado de tiempo de ejecución', + 'voice.debug.runtimeStatusDesc': + 'Diagnósticos en vivo para el servidor de voz y el motor de reconocimiento de voz.', + 'voice.debug.server': 'Servidor', + 'voice.debug.unavailable': 'No disponible', + 'voice.debug.ready': 'Listo', + 'voice.debug.notReady': 'No listo', + 'voice.debug.hotkey': 'tecla de acceso rápido', + 'voice.debug.notAvailable': 'n/a', + 'voice.debug.mode': 'Modo', + 'voice.debug.transcriptions': 'Transcripciones', + 'voice.debug.serverError': 'Error del servidor', + 'voice.debug.advancedSettings': 'Configuración avanzada', + 'voice.debug.advancedSettingsDesc': + 'Parámetros de ajuste de bajo nivel para la grabación y la detección de silencio.', + 'voice.debug.minimumRecordingSeconds': 'Segundos mínimos de grabación', + 'voice.debug.silenceThreshold': 'Umbral de silencio (RMS)', + 'voice.debug.silenceThresholdDesc': + 'Las grabaciones con energía por debajo de este valor se tratan como silencio y se omiten. Menor = más sensible.', + 'voice.providers.saved': 'Proveedores de voz guardados.', + 'voice.providers.failedToSave': 'No se pudieron guardar los proveedores de voz', + 'voice.providers.ellipsis': '…', + 'voice.providers.installing': 'Instalación', + 'voice.providers.installingBusy': 'Instalando…', + 'voice.providers.reinstallLocally': 'Reinstalar localmente', + 'voice.providers.repair': 'Reparación', + 'voice.providers.retryLocally': 'Reintentar localmente', + 'voice.providers.installLocally': 'Instalar localmente', + 'voice.providers.whisperReady': 'El susurro está listo.', + 'voice.providers.whisperInstallStarted': 'Se inició la instalación de Whisper', + 'voice.providers.queued': 'en cola', + 'voice.providers.failedToInstallWhisper': 'No se pudo instalar Whisper', + 'voice.providers.piperReady': 'Piper está listo.', + 'voice.providers.piperInstallStarted': 'Instalación de Piper iniciada', + 'voice.providers.failedToInstallPiper': 'No se pudo instalar Piper', + 'voice.providers.title': 'Proveedores de voz', + 'voice.providers.desc': + 'Elige dónde se ejecutan la transcripción y la síntesis. Usa los botones Instalar localmente para descargar los binarios y modelos en tu espacio de trabajo. Los proveedores locales se pueden guardar antes de que finalice la instalación; no se requiere configuración manual de WHISPER_BIN o PIPER_BIN.', + 'voice.providers.sttProvider': 'Proveedor de voz a texto', + 'voice.providers.sttProviderAria': 'proveedor STT', + 'voice.providers.cloudWhisperProxy': 'Nube (proxy de susurro)', + 'voice.providers.localWhisper': 'Susurro local', + 'voice.providers.installRequired': ' (se requiere instalación)', + 'voice.providers.whisperInstalledTitle': 'Susurro está instalado. Haga clic para reinstalar.', + 'voice.providers.whisperDownloadTitle': + 'Descarga whisper.cpp y el modelo GGML en tu espacio de trabajo.', + 'voice.providers.installed': 'Instalado', + 'voice.providers.installFailed': 'La instalación falló', + 'voice.providers.notInstalled': 'No instalado', + 'voice.providers.whisperModel': 'Modelo susurro', + 'voice.providers.whisperModelAria': 'modelo susurro', + 'voice.providers.whisperModelTiny': 'Pequeño (39 MB, más rápido)', + 'voice.providers.whisperModelBase': 'Base (74 MB)', + 'voice.providers.whisperModelSmall': 'Pequeño (244 MB)', + 'voice.providers.whisperModelMedium': 'Mediano (769 MB, recomendado)', + 'voice.providers.whisperModelLargeTurbo': 'Turbo v3 grande (1,5 GB, mejor precisión)', + 'voice.providers.ttsProvider': 'Proveedor de texto a voz', + 'voice.providers.ttsProviderAria': 'Proveedor de TTS', + 'voice.providers.cloudElevenLabsProxy': 'Nube (proxy de ElevenLabs)', + 'voice.providers.localPiper': 'flautista local', + 'voice.providers.piperInstalledTitle': 'Piper está instalado. Haga clic para reinstalar.', + 'voice.providers.piperDownloadTitle': + 'Descarga Piper y la voz en_US-lessac-medium incluida en tu espacio de trabajo.', + 'voice.providers.piperVoice': 'voz de gaitero', + 'voice.providers.piperVoiceAria': 'voz de gaitero', + 'voice.providers.customVoiceOption': 'Otro (escriba a continuación)…', + 'voice.providers.customVoiceAria': 'Identificación de voz de Piper (personalizada)', + 'voice.providers.customVoicePlaceholder': 'es_US-lessac-medium', + 'voice.providers.piperVoicesDesc': + 'Las voces provienen de huggingface.co/rhasspy/piper-voices. Cambiar de voz puede requerir un clic en Instalar/Reinstalar para descargar el nuevo archivo .onnx.', + 'voice.providers.mascotVoice': 'Voz de mascota', + 'voice.providers.mascotVoiceDescPrefix': + 'La voz de ElevenLabs que usa la mascota para las respuestas habladas se configura en', + 'voice.providers.mascotSettings': 'Configuración de mascota', + 'voice.providers.mascotVoiceDescSuffix': '.', + 'voice.providers.hotkeyPlaceholder': 'fn', + 'voice.providers.piperPreset.lessacMedium': 'Estados Unidos · Lessac (neutral, recomendado)', + 'voice.providers.piperPreset.lessacHigh': 'EE.UU. · Lessac (mayor calidad, más grande)', + 'voice.providers.piperPreset.ryanMedium': 'Estados Unidos · Ryan (masculino)', + 'voice.providers.piperPreset.amyMedium': 'Estados Unidos · Amy (mujer)', + 'voice.providers.piperPreset.librittsHigh': 'Estados Unidos · LibriTTS (varios altavoces)', + 'voice.providers.piperPreset.alanMedium': 'ES · Alan (masculino)', + 'voice.providers.piperPreset.jennyDiocoMedium': 'GB · Jenny Dioco (mujer)', + 'voice.providers.piperPreset.northernEnglishMaleMedium': 'GB · Inglés del Norte (masculino)', + 'voice.providers.chip.cloud': 'OpenHuman (Gestionado)', + 'voice.providers.chip.cloudAria': 'El proveedor gestionado de OpenHuman está siempre habilitado', + 'voice.providers.chip.whisper': 'Whisper (Local)', + 'voice.providers.chip.enableWhisper': 'Activar Whisper STT local', + 'voice.providers.chip.disableWhisper': 'Desactivar Whisper STT local', + 'voice.providers.chip.piper': 'Piper (Local)', + 'voice.providers.chip.enablePiper': 'Activar Piper TTS local', + 'voice.providers.chip.disablePiper': 'Desactivar Piper TTS local', + 'voice.providers.chip.enableProvider': 'Enable', + 'voice.providers.chip.disableProvider': 'Disable', + 'voice.providers.chip.apiKeyLabel': 'Clave de API', + 'voice.providers.chip.apiKeyPlaceholder': 'sk-…', + 'voice.providers.chip.comingSoon': 'próximamente', + 'voice.modal.title': 'Configure', + 'voice.modal.desc': + 'Introduce tu clave de API para habilitar este proveedor. Puedes probar la conexión antes de guardar.', + 'voice.modal.testKey': 'Probar clave', + 'voice.modal.testing': 'Probando…', + 'voice.modal.saveAndEnable': 'Guardar y activar', + 'voice.modal.enable': 'Enable', + 'voice.modal.whisperDesc': + 'Elige un tamaño de modelo e instala el binario de Whisper y el modelo GGML en tu espacio de trabajo. Los modelos más grandes son más precisos pero más lentos.', + 'voice.modal.piperDesc': + 'Elige una voz e instala el binario de Piper y el modelo ONNX en tu espacio de trabajo. Piper funciona completamente sin conexión con baja latencia.', + 'voice.routing.title': 'Enrutamiento de voz', + 'voice.routing.desc': + 'Elige qué proveedores habilitados gestionan el reconocimiento y la síntesis de voz.', + 'voice.routing.save': 'Save', + 'voice.routing.testStt': 'Probar STT', + 'voice.routing.testTts': 'Probar TTS', + 'voice.routing.elevenlabsVoice': 'Voz de ElevenLabs', + 'voice.routing.elevenlabsVoiceAria': 'Selección de voz de ElevenLabs', + 'voice.routing.elevenlabsVoiceIdAria': 'ID de voz de ElevenLabs (personalizado)', + 'voice.routing.elevenlabsVoiceDesc': + 'Elige una voz seleccionada o pega un ID de voz personalizado desde tu panel de ElevenLabs.', + 'voice.externalProviders.title': 'Proveedores de voz externos', + 'voice.externalProviders.desc': + 'Conecta APIs de STT/TTS de terceros como Deepgram, ElevenLabs u OpenAI directamente.', + 'voice.externalProviders.keySet': 'Clave configurada', + 'voice.externalProviders.noKey': 'Sin clave de API', + 'voice.externalProviders.test': 'Test', + 'voice.externalProviders.testing': 'Probando…', + 'voice.externalProviders.remove': 'Remove', + 'voice.externalProviders.provider': 'Provider', + 'voice.externalProviders.selectProvider': 'Seleccionar un proveedor…', + 'voice.externalProviders.apiKey': 'Clave de API', + 'voice.externalProviders.apiKeyPlaceholder': 'sk-…', + 'voice.externalProviders.add': 'Add', + 'autocomplete.title': 'Autocompletado', + 'autocomplete.settings': 'Configuración', + 'autocomplete.acceptWithTab': 'Aceptar con Tab', + 'autocomplete.stylePreset': 'Estilo predeterminado', + 'autocomplete.style.balanced': 'Equilibrado', + 'autocomplete.style.concise': 'Conciso', + 'autocomplete.style.formal': 'formales', + 'autocomplete.style.casual': 'Informal', + 'autocomplete.style.custom': 'Personalizado', + 'autocomplete.disabledApps': 'Apps desactivadas (un bundle/token de app por línea)', + 'autocomplete.saveSettings': 'Guardar configuración', + 'autocomplete.saving': 'Guardando…', + 'autocomplete.runtime': 'Tiempo de ejecución', + 'autocomplete.running': 'Ejecutándose', + 'autocomplete.start': 'Iniciar', + 'autocomplete.stop': 'Detener', + 'autocomplete.settingsSaved': 'Configuración de autocompletado guardada.', + 'autocomplete.started': 'Autocompletado iniciado.', + 'autocomplete.didNotStart': 'El autocompletado no inició. Verifica si está habilitado.', + 'autocomplete.stopped': 'Autocompletado detenido.', + 'autocomplete.advancedSettings': 'Configuración avanzada', + 'autocomplete.debugTitle': 'Depuración de autocompletado', + 'chat.agentChat': 'Chat con agente', + 'chat.overrides': 'Anulaciones', + 'chat.model': 'Modelo', + 'chat.temperature': 'Temperatura', + 'chat.conversation': 'Conversación', + 'chat.startAgentConversation': 'Inicia una conversación con el agente.', + 'chat.you': 'Tú', + 'chat.agent': 'Agente', + 'chat.askAgent': 'Pregúntale lo que quieras al agente...', + 'chat.sendMessage': 'Enviar mensaje', + 'composio.triageTitle': 'Disparadores de integración', + 'composio.triageDesc': + 'Cuando está activo, cada disparador de Composio entrante pasa por un paso de clasificación con IA que clasifica el evento y puede iniciar acciones automatizadas — un turno de LLM local por disparador. Desactívalo globalmente o por integración si prefieres revisión manual. Si la variable de entorno', + 'composio.disableAllTriage': 'Desactivar clasificación de IA para todos los disparadores', + 'composio.triggersStillRecorded': + 'Los disparadores siguen registrándose en el historial — no se ejecuta ningún turno de LLM.', + 'composio.disableSpecificIntegrations': + 'Desactivar clasificación de IA para integraciones específicas', + 'composio.settingsSaved': 'Ajustes guardados', + 'composio.saveFailed': 'No se pudo guardar. Inténtalo de nuevo.', + 'cron.title': 'Tareas cron', + 'cron.scheduledJobs': 'Trabajos programados', + 'cron.manageCronJobs': 'Gestiona las tareas cron desde el programador del core.', + 'cron.refreshCronJobs': 'Actualizar tareas cron', + 'localModel.modelStatus': 'Estado del modelo', + 'localModel.downloadModels': 'Descargar modelos', + 'localModel.usage': 'Uso', + 'localModel.usageDesc': + 'Elige qué subsistemas corren en el modelo local. Todo lo que esté desactivado usa la nube.', + 'localModel.enableRuntime': 'Activar runtime de IA local', + 'localModel.enableRuntimeDesc': + 'Interruptor principal. Desactivado por defecto — Ollama permanece inactivo. Cuando está activado, el resumidor de árbol, la inteligencia de pantalla y el autocompletado siempre usan el modelo local.', + 'localModel.advancedSettings': 'Configuración avanzada', + 'localModel.debugTitle': 'Depuración de modelo local', + 'screenAwareness.debugTitle': 'Depuración de Conciencia de pantalla', + 'screenAwareness.debug.debugAndDiagnostics': 'Depuración y diagnóstico', + 'screenAwareness.debug.collapse': 'Colapso', + 'screenAwareness.debug.expand': 'Expandir', + 'screenAwareness.debug.failedToSave': 'No se pudo guardar la inteligencia de pantalla', + 'screenAwareness.debug.policyTitle': 'Política de inteligencia de pantalla', + 'screenAwareness.debug.baselineFps': 'FPS de referencia', + 'screenAwareness.debug.useVisionModel': 'Usar modelo de visión', + 'screenAwareness.debug.useVisionModelDesc': + 'Envía capturas de pantalla a un LLM de visión para obtener más contexto. Cuando está desactivado, solo se usa texto OCR con un LLM de texto, lo que es más rápido y no requiere modelo de visión.', + 'screenAwareness.debug.keepScreenshots': 'Mantener capturas de pantalla', + 'screenAwareness.debug.keepScreenshotsDesc': + 'Guarda las capturas de pantalla en el espacio de trabajo en lugar de eliminarlas tras el procesamiento', + 'screenAwareness.debug.allowlist': 'Lista de permitidos (una regla por línea)', + 'screenAwareness.debug.denylist': 'Lista de rechazados (una regla por línea)', + 'screenAwareness.debug.saveSettings': 'Guardar configuración de inteligencia de pantalla', + 'screenAwareness.debug.sessionStats': 'Estadísticas de sesión', + 'screenAwareness.debug.framesEphemeral': 'Marcos (efímeros)', + 'screenAwareness.debug.panicStop': 'parada de pánico', + 'screenAwareness.debug.defaultPanicHotkey': 'Cmd+Mayús+.', + 'screenAwareness.debug.vision': 'Visión', + 'screenAwareness.debug.idle': 'inactivo', + 'screenAwareness.debug.visionQueue': 'Cola de visión', + 'screenAwareness.debug.lastVision': 'ultima vision', + 'screenAwareness.debug.notAvailable': 'n/a', + 'screenAwareness.debug.visionSummaries': 'Resúmenes de visión', + 'screenAwareness.debug.refreshing': 'Refrescante…', + 'screenAwareness.debug.noSummaries': 'Aún no hay resúmenes.', + 'screenAwareness.debug.unknownApp': 'Aplicación desconocida', + 'screenAwareness.debug.macosOnly': + 'Screen Intelligence V1 actualmente solo es compatible con macOS.', + 'memory.debugTitle': 'Depuración de memoria', + 'memory.documents': 'Documentos', + 'memory.filterByNamespace': 'Filtrar por espacio de nombres...', + 'memory.refresh': 'Actualizar', + 'memory.noDocumentsFound': 'No se encontraron documentos.', + 'memory.delete': 'Eliminar', + 'memory.rawResponse': 'Respuesta cruda', + 'memory.namespaces': 'Espacios de nombres', + 'memory.noNamespacesFound': 'No se encontraron espacios de nombres.', + 'memory.queryRecall': 'Consulta y recuperación', + 'memory.namespace': 'Espacio de nombres', + 'memory.queryText': 'Texto de consulta...', + 'memory.defaultMaxChunks': '10', + 'memory.maxChunks': 'trozos máximos', + 'memory.query': 'Consulta', + 'memory.recall': 'recordar', + 'memory.queryLabel': 'Consulta', + 'memory.recallLabel': 'recordar', + 'memory.queryResult': 'Resultado de la consulta', + 'memory.recallResult': 'Recuperar resultado', + 'memory.clearNamespace': 'Borrar espacio de nombres', + 'memory.clearNamespaceDescription': + 'Elimina permanentemente todos los documentos dentro de un espacio de nombres.', + 'memory.selectNamespace': 'Seleccionar espacio de nombres...', + 'memory.exampleNamespace': 'por ej. habilidad:gmail:usuario@ejemplo.com', + 'memory.clear': 'Borrar', + 'memory.deleteConfirm': + '¿Eliminar el documento «{documentId}» del espacio de nombres «{namespace}»?', + 'memory.clearNamespaceConfirm': + 'Esto eliminará permanentemente TODOS los documentos del espacio de nombres «{namespace}». ¿Continuar?', + 'memory.clearNamespaceSuccess': 'Se borró el espacio de nombres "{namespace}".', + 'memory.clearNamespaceEmpty': 'No hay nada que borrar en "{namespace}".', + 'webhooks.debugTitle': 'Depuración de webhooks', + 'webhooks.failedToLoadDebugData': 'No se pudieron cargar los datos de depuración del webhook', + 'webhooks.clearLogsConfirm': '¿Borrar todos los registros de depuración de webhooks capturados?', + 'webhooks.failedToClearLogs': 'No se pudieron borrar los registros de webhook', + 'webhooks.loading': 'Cargando...', + 'webhooks.refresh': 'Actualizar', + 'webhooks.clearing': 'Limpiando...', + 'webhooks.clearLogs': 'Borrar registros', + 'webhooks.registered': 'registrado', + 'webhooks.captured': 'capturado', + 'webhooks.live': 'vivir', + 'webhooks.disconnected': 'desconectado', + 'webhooks.lastEvent': 'último evento', + 'webhooks.at': 'en', + 'webhooks.registeredWebhooks': 'Webhooks registrados', + 'webhooks.noActiveRegistrations': 'No hay registros activos.', + 'webhooks.resolvingBackendUrl': 'Resolviendo el servidor URL…', + 'webhooks.capturedRequests': 'Solicitudes capturadas', + 'webhooks.noRequestsCaptured': 'Aún no se han capturado solicitudes de webhook.', + 'webhooks.unrouted': 'sin ruta', + 'webhooks.pending': 'pendiente', + 'webhooks.requestHeaders': 'Encabezados de solicitud', + 'webhooks.queryParams': 'Parámetros de consulta', + 'webhooks.requestBody': 'Cuerpo de solicitud', + 'webhooks.responseHeaders': 'Encabezados de respuesta', + 'webhooks.responseBody': 'Cuerpo de respuesta', + 'webhooks.rawPayload': 'Carga útil sin procesar', + 'webhooks.empty': '[vacío]', + 'providerSetup.error.defaultDetails': 'Error en la configuración del proveedor.', + 'providerSetup.error.providerFallback': 'el proveedor', + 'providerSetup.error.credentialsRejected': + '{provider} rechazó las credenciales. Comprueba la clave de API e inténtalo de nuevo.', + 'providerSetup.error.endpointNotRecognized': + '{provider} no reconoció el endpoint. Comprueba la URL base e inténtalo de nuevo.', + 'providerSetup.error.providerUnavailable': + '{provider} no está disponible en este momento. Inténtalo de nuevo o comprueba el estado del proveedor.', + 'providerSetup.error.unreachable': + 'No se pudo contactar con {provider}. Comprueba la URL del endpoint y la conexión de red, luego inténtalo de nuevo.', + 'providerSetup.error.couldNotReachWithMessage': 'No se pudo comunicar con {provider}: {message}', + 'providerSetup.error.technicalDetails': 'Detalles técnicos', + 'notifications.routingTitle': 'Enrutamiento de notificaciones', + 'notifications.routing.pipelineStats': 'Estadísticas de canalización', + 'notifications.routing.total': 'totales', + 'notifications.routing.unread': 'No leído', + 'notifications.routing.unscored': 'Sin puntuación', + 'notifications.routing.intelligenceTitle': 'Inteligencia de notificaciones', + 'notifications.routing.intelligenceDesc': + 'Cada notificación de tus cuentas conectadas es puntuada por un modelo de IA local. Las notificaciones de alta importancia se enrutan automáticamente a tu agente orquestador para que nada crítico se escape.', + 'notifications.routing.howItWorks': 'como funciona', + 'notifications.routing.level.drop': 'soltar', + 'notifications.routing.level.dropDesc': 'Ruido/spam: almacenado pero no revelado', + 'notifications.routing.level.acknowledge': 'Reconocer', + 'notifications.routing.level.acknowledgeDesc': + 'Prioridad baja — se muestra en el centro de notificaciones', + 'notifications.routing.level.react': 'reaccionar', + 'notifications.routing.level.reactDesc': + 'Prioridad media — activa una respuesta enfocada del agente', + 'notifications.routing.level.escalate': 'escalar', + 'notifications.routing.level.escalateDesc': 'Prioridad alta: reenviado al agente orquestador', + 'notifications.routing.perProvider': 'Enrutamiento por proveedor', + 'notifications.routing.threshold': 'umbral', + 'notifications.routing.routeToOrchestrator': 'Ruta al orquestador', + 'notifications.routing.loadSettingsError': + 'Error al cargar la configuración. Vuelve a abrir este panel para reintentar.', + 'common.reload': 'Recargar', + 'common.skip': 'Omitir', + 'common.disable': 'Desactivar', + 'common.enable': 'Activar', + 'chat.safetyTimeout': + 'Sin respuesta del agente después de 2 minutos. Intenta de nuevo o verifica tu conexión.', + 'chat.filter.all': 'Todos', + 'chat.filter.work': 'Trabajo', + 'chat.filter.briefing': 'Resumen', + 'chat.filter.notification': 'Notificación', + 'chat.filter.workers': 'Trabajadores', + 'chat.selectThread': 'Selecciona un hilo', + 'chat.threads': 'Hilos', + 'chat.noThreads': 'Sin hilos aún', + 'chat.noLabelThreads': 'Sin hilos "{label}"', + 'chat.noWorkerThreads': 'Sin hilos de worker aún', + 'chat.deleteThread': 'Eliminar hilo', + 'chat.deleteThreadConfirm': '¿Seguro que quieres eliminar "{title}"?', + 'chat.untitledThread': 'Hilo sin título', + 'chat.editThreadTitle': 'Editar título del hilo', + 'chat.hideSidebar': 'Ocultar barra lateral', + 'chat.showSidebar': 'Mostrar barra lateral', + 'chat.newThreadShortcut': 'Nuevo hilo (/new)', + 'chat.new': 'Nuevo', + 'chat.failedToLoadMessages': 'No se pudieron cargar los mensajes', + 'chat.thinkingIteration': 'Pensando... ({n})', + 'chat.thinkingDots': 'Pensando...', + 'chat.approachingLimit': 'Acercándote al límite de uso', + 'chat.approachingLimitMsg': 'Has usado el {pct}% de tu cuota disponible.', + 'chat.upgrade': 'Mejorar plan', + 'chat.weeklyLimitHit': 'Alcanzaste tu límite semanal.', + 'chat.resets': 'Se restablece', + 'chat.topUpToContinue': 'Recarga para continuar.', + 'chat.budgetComplete': + 'Tu presupuesto incluido se agotó. Agrega créditos o mejora tu plan para continuar.', + 'chat.topUp': 'Recargar', + 'chat.cycle': 'Ciclo', + 'chat.cycleSpent': 'Gastado este ciclo', + 'chat.cycleRemaining': 'Restante', + 'chat.left': 'restante', + 'chat.setup': 'Configurar', + 'chat.switchToText': 'Cambiar a texto', + 'chat.transcribing': 'Transcribiendo...', + 'chat.stopAndSend': 'Detener y enviar', + 'chat.startTalking': 'Empieza a hablar', + 'chat.playingVoiceReply': 'Reproduciendo respuesta de voz', + 'chat.voiceHint': 'Usa el micrófono para hablar', + 'chat.micUnavailable': 'Micrófono no disponible', + 'chat.turn': 'turno', + 'chat.turns': 'turnos', + 'chat.openWorkerThread': 'Abrir hilo de worker', + 'chat.attachment.attach': 'Adjuntar imagen', + 'chat.attachment.remove': 'Eliminar {name}', + 'chat.attachment.tooMany': 'Máximo {max} imágenes por mensaje', + 'chat.attachment.tooLarge': 'La imagen supera el límite de tamaño de {max}', + 'chat.attachment.unsupportedType': + 'Tipo de archivo no compatible. Use PNG, JPEG, WebP, GIF o BMP.', + 'chat.attachment.readFailed': 'No se pudo leer el archivo', + 'memory.searchAria': 'Buscar en memoria', + 'memory.searchPlaceholder': 'Buscar entradas de memoria...', + 'memory.sourceFilter.all': 'Todas las fuentes', + 'memory.sourceFilter.email': 'Correo', + 'memory.sourceFilter.calendar': 'Calendario', + 'memory.sourceFilter.telegram': 'Telegram', + 'memory.sourceFilter.aiInsight': 'Insight de IA', + 'memory.sourceFilter.system': 'Sistema', + 'memory.sourceFilter.trading': 'Comercio', + 'memory.sourceFilter.security': 'Seguridad', + 'memory.ingestionActivity': 'Actividad de ingesta', + 'memory.events': 'eventos', + 'memory.event': 'evento', + 'memory.overTheLast': 'en los últimos', + 'memory.months': 'meses', + 'memory.peak': 'Pico', + 'memory.perDay': '/día', + 'memory.less': 'Menos', + 'memory.more': 'Más', + 'memory.on': 'el', + 'memory.loading': 'Cargando memoria', + 'memory.fetching': 'Obteniendo tus entradas de memoria...', + 'memory.analyzing': 'Analizando memoria', + 'memory.analyzingHint': 'Procesando tus recuerdos para extraer insights...', + 'memory.noMatches': 'Sin resultados', + 'memory.noMatchesHint': 'Prueba cambiar los términos de búsqueda o los filtros.', + 'memory.allCaughtUp': 'Todo al día', + 'memory.allCaughtUpHint': 'No hay nuevas entradas de memoria para procesar.', + 'memory.noAnalysis': 'Sin análisis aún', + 'memory.noAnalysisHint': 'Ejecuta un análisis para descubrir patrones en tus recuerdos.', + 'memory.emptyHint': 'Empieza a interactuar para crear tus primeros recuerdos.', + 'mic.unavailable': 'Micrófono no disponible', + 'mic.permissionDenied': 'Permiso de micrófono denegado', + 'mic.failedToStartRecorder': 'No se pudo iniciar la grabadora', + 'mic.transcribing': 'Transcribiendo...', + 'mic.tapToSend': 'Toca para enviar', + 'mic.waitingForAgent': 'Esperando al agente...', + 'mic.tapAndSpeak': 'Toca y habla', + 'mic.stopRecording': 'Detener grabación y enviar', + 'mic.startRecording': 'Iniciar grabación', + 'mic.deviceSelector': 'Dispositivo de micrófono', + 'mic.tapToSendCountdown': 'Toca para enviar ({seconds}s)', + 'token.usageLimitReached': 'Límite de uso alcanzado', + 'token.approachingLimit': 'Acercándote al límite', + 'token.planClickForDetails': 'plan - toca para ver detalles', + 'token.sessionTokens': 'Ent: {in} | Sal: {out} | Turnos: {turns}', + 'token.limit': 'Límite alcanzado', + 'catalog.noCapabilityBinding': 'Sin vinculación de capacidad', + 'catalog.downloadFailed': 'Descarga fallida', + 'catalog.active': 'Activo', + 'catalog.installed': 'Instalado', + 'catalog.notDownloaded': 'No descargado', + 'catalog.inUse': 'En uso', + 'catalog.use': 'Usar', + 'catalog.deleteModel': 'Eliminar modelo', + 'catalog.download': 'Descargar', + 'navigator.recent': 'Reciente', + 'navigator.today': 'Hoy', + 'navigator.thisWeek': 'Esta semana', + 'navigator.sources': 'Fuentes', + 'navigator.email': 'Correo', + 'navigator.slack': 'Slack', + 'navigator.chat': 'Charla', + 'navigator.documents': 'Documentos', + 'navigator.people': 'Personas', + 'navigator.topics': 'Temas', + 'dreams.description': + 'Los sueños son reflexiones generadas por IA que sintetizan patrones de tus recuerdos.', + 'dreams.comingSoon': 'Próximamente', + 'assignment.memoryLlm': 'LLM de memoria', + 'assignment.memoryLlmAria': 'Selección de LLM de memoria', + 'assignment.embedder': 'Incrustador', + 'assignment.loaded': 'Cargado', + 'assignment.notDownloaded': 'No descargado', + 'assignment.usedForExtractSummarise': 'Usado para extracción y resumen', + 'insights.knownFacts': 'Hechos conocidos', + 'insights.preferences': 'Preferencias', + 'insights.relationships': 'Relaciones', + 'insights.skills': 'Habilidades', + 'insights.opinions': 'Opiniones', + 'insights.other': 'Otro', + 'insights.title': 'Perspectivas', + 'insights.empty': 'Sin insights aún. Los insights se generan a medida que crece tu memoria.', + 'insights.description': 'Basado en {count} relaciones en tu grafo de memoria.', + 'insights.items': 'elementos', + 'insights.more': 'más', + 'calls.joiningCall': 'Uniéndose a la llamada', + 'calls.meetWindowOpening': 'La ventana de Meet se está abriendo...', + 'calls.failedToStart': 'No se pudo iniciar la llamada de Google Meet', + 'calls.couldNotStart': 'No se pudo iniciar la llamada', + 'calls.failedToClose': 'No se pudo cerrar la llamada', + 'calls.couldNotClose': 'No se pudo cerrar la llamada', + 'calls.joinMeet': 'Unirse a una llamada de Google Meet', + 'calls.joinMeetDescription': 'Ingresa un enlace de Google Meet para unirte.', + 'calls.meetLink': 'Enlace de Meet', + 'calls.displayName': 'Nombre de visualización', + 'calls.openingMeet': 'Abriendo Meet...', + 'calls.joinCall': 'Unirse a la llamada', + 'calls.activeCalls': 'Llamadas activas', + 'calls.leave': 'Salir', + 'workspace.wipeConfirm': + '¿Seguro que quieres borrar toda la memoria? Esta acción no se puede deshacer.', + 'workspace.resetTreeConfirm': '¿Seguro que quieres reconstruir el árbol de memoria?', + 'workspace.wipeTitle': 'Borrar memoria', + 'workspace.resetting': 'Restableciendo...', + 'workspace.resetMemory': 'Restablecer memoria', + 'workspace.resetTreeTitle': 'Reconstruir árbol de memoria', + 'workspace.rebuilding': 'Reconstruyendo...', + 'workspace.resetMemoryTree': 'Restablecer árbol de memoria', + 'workspace.building': 'Construyendo...', + 'workspace.buildSummaryTrees': 'Construir árboles de resumen', + 'workspace.viewVault': 'Ver bóveda', + 'workspace.openingVaultTitle': 'Apertura de bóveda en obsidiana', + 'workspace.openingVaultMessage': + 'Si Obsidian no se abre, instálalo desde obsidian.md o usa Mostrar carpeta. Ruta del almacén:', + 'workspace.openVaultFailedTitle': 'No se pudo abrir el almacén en Obsidian', + 'workspace.openVaultFailedMessage': + 'Utilice Revelar carpeta para abrir el directorio del almacén directamente. Ruta de la bóveda:', + 'workspace.revealVaultFailed': 'No se pudo mostrar la carpeta del almacén', + 'workspace.revealFolder': 'Revelar carpeta', + 'workspace.checkingVault': 'Verificando…', + 'workspace.vaultNotRegisteredHelp': + 'Obsidian solo abre las carpetas que hayas agregado como almacén. En Obsidian, elige «Abrir carpeta como almacén» y selecciona la carpeta de abajo; solo necesitas hacerlo una vez. Luego haz clic en Ver almacén de nuevo.', + 'workspace.obsidianNotFoundHelp': + 'No encontramos Obsidian en este dispositivo. Instálalo, o — si está instalado en una ubicación no estándar — establece su carpeta de configuración en Avanzado.', + 'workspace.openAnyway': 'Abrir en Obsidian de todos modos', + 'workspace.installObsidian': 'Instalar Obsidian', + 'workspace.obsidianAdvanced': '¿Obsidian instalado en otro lugar?', + 'workspace.obsidianConfigDirLabel': 'Carpeta de configuración de Obsidian', + 'workspace.obsidianConfigDirHint': + 'Ruta a la carpeta que contiene obsidian.json (p. ej., ~/.config/obsidian). Dejar en blanco para detectar automáticamente.', + 'workspace.obsidianConfigDirPlaceholder': '~/.config/obsidian', + 'workspace.graphLoadFailed': 'No se pudo cargar el grafo de memoria', + 'workspace.loadingGraph': 'Cargando grafo de memoria...', + 'workspace.graphViewMode': 'Modo de vista del grafo de memoria', + 'workspace.trees': 'Árboles', + 'workspace.contacts': 'Contactos', + 'graph.noContactMentions': 'Sin menciones de contacto', + 'graph.noMemory': 'Sin memoria', + 'graph.source': 'Fuente', + 'graph.topic': 'Tema', + 'graph.global': 'Mundial', + 'graph.document': 'Documento', + 'graph.contact': 'Contacto', + 'graph.nodes': 'nodos', + 'graph.parentChild': 'padre-hijo', + 'graph.documentContact': 'documento-contacto', + 'graph.link': 'enlace', + 'graph.links': 'enlaces', + 'graph.children': 'hijos', + 'graph.clickToOpenObsidian': 'Clic para abrir en Obsidian', + 'graph.person': 'Persona', + 'modal.dontShowAgain': 'No mostrar sugerencias similares', + 'reflections.loading': 'Cargando reflexiones...', + 'reflections.empty': 'Sin reflexiones aún', + 'reflections.title': 'Reflexiones', + 'reflections.proposedAction': 'Acción propuesta', + 'reflections.act': 'Actuar', + 'reflections.dismiss': 'Descartar', + 'whatsapp.chatsSynced': 'chats sincronizados', + 'whatsapp.chatSynced': 'chat sincronizado', + 'sync.active': 'Activo', + 'sync.recent': 'Reciente', + 'sync.idle': 'Inactivo', + 'sync.memorySources': 'Fuentes de memoria', + 'sync.noConnectedSources': 'Sin fuentes conectadas', + 'sync.chunks': 'fragmentos', + 'sync.lastChunk': 'Último fragmento:', + 'sync.pending': 'pendiente', + 'sync.processed': 'procesado', + 'sync.syncing': 'Sincronizando…', + 'sync.sync': 'Sincronizar', + 'sync.failedToLoad': 'No se pudo cargar el estado de sincronización', + 'sync.noContent': + 'Aún no se ha sincronizado contenido en la memoria. Conecta una integración para empezar.', + 'memorySources.title': 'Fuentes de memoria', + 'memorySources.empty': + 'Aún no hay fuentes de memoria. Agrega una para comenzar a alimentar la memoria.', + 'memorySources.customSources': 'Fuentes personalizadas', + 'memorySources.addSource': 'Agregar fuente', + 'memorySources.noCustomSources': + 'Aún no hay fuentes personalizadas. Agrega una carpeta, el repositorio GitHub, la fuente RSS o una página web para comenzar.', + 'memorySources.loadingConnections': 'Cargando conexiones…', + 'memorySources.noConnections': + 'No se encontraron conexiones activas de Composio. Conecta una integración primero.', + 'memorySources.pickConnection': 'Elige una conexión', + 'memorySources.selectConnection': '— Seleccionar una conexión —', + 'memorySources.composioListFailed': 'Error al cargar las conexiones Composio.', + 'memorySources.browse': 'Examinar…', + 'memorySources.folderPathPlaceholder': '/Users/you/notes', + 'memorySources.globPatternPlaceholder': '**/*.md', + 'memorySources.repoUrlPlaceholder': 'https://github.com/org/repo', + 'memorySources.branchPlaceholder': 'main', + 'memorySources.feedUrlPlaceholder': 'https://example.com/feed.xml', + 'memorySources.pageUrlPlaceholder': 'https://example.com/article', + 'memorySources.cssSelectorPlaceholder': 'article', + 'memorySources.searchQueryPlaceholder': 'de:usuario AI seguridad', + 'memorySources.kind.composio': 'Integración', + 'memorySources.kind.folder': 'Carpeta local', + 'memorySources.kind.github_repo': 'GitHub Repositorio', + 'memorySources.kind.twitter_query': 'Búsqueda en Twitter', + 'memorySources.kind.rss_feed': 'RSS Alimentar', + 'memorySources.kind.web_page': 'Página web', + 'memorySources.sync.successTitle': 'Sincronizando', + 'memorySources.sync.successMessage': 'El progreso aparecerá en breve.', + 'memorySources.sync.failedTitle': 'Sincronización fallida:', + 'time.justNow': 'ahora mismo', + 'time.secondsAgoSuffix': 's', + 'time.minutesAgoSuffix': 'min', + 'time.hoursAgoSuffix': 'h', + 'time.daysAgoSuffix': 'd', + 'memorySources.pickKind': '¿Qué tipo de fuente quieres agregar?', + 'memorySources.backToKinds': 'Volver a los tipos de fuente', + 'memorySources.label': 'Etiqueta', + 'memorySources.labelPlaceholder': 'Mis notas de investigación', + 'memorySources.add': 'Añadir', + 'memorySources.adding': 'Agregando…', + 'memorySources.added': 'Fuente añadida', + 'memorySources.removed': 'Fuente eliminada', + 'memorySources.remove': 'Eliminar', + 'memorySources.enable': 'Habilitar', + 'memorySources.disable': 'Desactivar', + 'memorySources.toggleFailed': 'Error al alternar', + 'memorySources.removeFailed': 'Error al eliminar', + 'memorySources.folderPath': 'Ruta de la carpeta', + 'memorySources.globPattern': 'Patrón glob', + 'memorySources.repoUrl': 'Repositorio URL', + 'memorySources.branch': 'Rama', + 'memorySources.feedUrl': 'Alimentar URL', + 'memorySources.pageUrl': 'Página URL', + 'memorySources.cssSelector': 'Selector CSS (opcional)', + 'memorySources.searchQuery': 'Consulta de búsqueda', + 'backend.aiBackend': 'Backend de IA', + 'backend.cloud': 'Nube', + 'backend.recommended': 'Recomendado', + 'backend.cloudDescription': + 'Modelos rápidos y potentes alojados en nuestros servidores. Listos para usar de inmediato.', + 'backend.privacyNote': + 'Nunca enviamos datos personales, mensajes ni claves a nuestros servidores.', + 'backend.local': 'locales', + 'backend.advanced': 'Avanzado', + 'backend.localDescription': + 'Ejecuta modelos en tu propia máquina usando Ollama. Privacidad total, requiere configuración.', + 'backend.ramRecommended': 'Se recomienda 16 GB+ de RAM', + 'subconscious.tasks': 'tareas', + 'subconscious.ticks': 'garrapatas', + 'subconscious.last': 'Último', + 'subconscious.failed': 'fallido', + 'subconscious.tickInterval': 'Intervalo de tick', + 'subconscious.runNow': 'Ejecutar ahora', + 'subconscious.providerUnavailableTitle': 'Subconsciente en pausa', + 'subconscious.providerSettings': 'Ajustes de IA', + 'subconscious.approvalNeeded': 'Se necesita aprobación', + 'subconscious.requiresApproval': 'Requiere aprobación', + 'subconscious.fixInConnections': 'Corregir en Conexiones', + 'subconscious.goAhead': 'Adelante', + 'subconscious.activeTasks': 'Tareas activas', + 'subconscious.noActiveTasks': 'Sin tareas activas', + 'subconscious.default': 'Predeterminado', + 'subconscious.addTaskPlaceholder': 'Agregar una nueva tarea...', + 'subconscious.activityLog': 'Registro de actividad', + 'subconscious.noActivity': 'Sin actividad aún', + 'subconscious.decision.nothingNew': 'Sin novedades', + 'subconscious.decision.completed': 'Completado', + 'subconscious.decision.evaluating': 'Evaluando', + 'subconscious.decision.waitingApproval': 'Esperando aprobación', + 'subconscious.decision.failed': 'Fallido', + 'subconscious.decision.cancelled': 'Cancelado', + 'subconscious.decision.skipped': 'Omitido', + 'actionable.complete': 'Completar', + 'actionable.dismiss': 'Descartar', + 'actionable.snooze': 'Posponer', + 'actionable.new': 'Nuevo', + 'stats.storage': 'Almacenamiento', + 'stats.files': 'archivos', + 'stats.documents': 'Documentos', + 'stats.today': 'hoy', + 'stats.namespaces': 'Espacios de nombres', + 'stats.relations': 'Relaciones', + 'stats.firstMemory': 'Primer recuerdo', + 'stats.latest': 'Más reciente', + 'stats.sessions': 'Sesiones', + 'stats.tokens': 'fichas', + 'bootCheck.invalidUrl': 'Ingresa una URL de runtime.', + 'bootCheck.urlMustStartWith': 'La URL debe comenzar con http:// o https://', + 'bootCheck.validUrlRequired': + 'Eso no parece una URL válida (prueba con https://core.example.com/rpc)', + 'bootCheck.tokenRequired': 'Necesitaremos un token de autenticación para conectarnos.', + 'bootCheck.chooseCoreMode': 'Seleccionar un runtime', + 'bootCheck.connectToCore': 'Conectar a tu runtime', + 'bootCheck.desktopDescription': + 'OpenHuman necesita un runtime para funcionar. Elige dónde debe vivir.', + 'bootCheck.webDescription': + 'En la web, OpenHuman se conecta a un runtime que tú controlas. Ingresa su URL y token de autenticación abajo, o descarga la app de escritorio para ejecutar uno en tu máquina.', + 'bootCheck.preferDesktop': '¿Prefieres tener todo en tu propio dispositivo?', + 'bootCheck.downloadDesktop': 'Obtener la app de escritorio', + 'bootCheck.localRecommended': 'Ejecutar localmente (Recomendado)', + 'bootCheck.localDescription': + 'Corre directamente en tu computadora. El más rápido, completamente privado, sin nada que configurar.', + 'bootCheck.cloudMode': 'Ejecutar en la nube (Complejo)', + 'bootCheck.cloudDescription': + 'Conéctate a un runtime que estás alojando en otro lugar. Permanece en línea 24×7 para que no necesites mantener este dispositivo encendido.', + 'bootCheck.coreRpcUrl': 'URL del runtime', + 'bootCheck.rpcUrlPlaceholder': 'https://core.example.com/rpc', + 'bootCheck.authToken': 'Token de autenticación', + 'bootCheck.bearerTokenPlaceholder': 'El bearer token de tu runtime remoto', + 'bootCheck.storedLocally': 'Solo guardado en este dispositivo. Enviado como ', + 'bootCheck.testing': 'Probando…', + 'bootCheck.testConnection': 'Probar conexión', + 'bootCheck.connectedOk': 'Conectado. Todo listo.', + 'bootCheck.authFailed': 'Ese token no funcionó. Verifícalo e inténtalo de nuevo.', + 'bootCheck.unreachablePrefix': 'No se pudo alcanzar:', + 'bootCheck.checkingCore': 'Activando tu runtime…', + 'bootCheck.cannotReach': 'No se puede alcanzar el runtime', + 'bootCheck.cannotReachDesc': + 'No pudimos conectarnos a tu runtime. ¿Quieres probar con uno diferente?', + 'bootCheck.switchMode': 'Elegir un runtime diferente', + 'bootCheck.quit': 'Salir', + 'bootCheck.legacyDetected': 'Runtime en segundo plano legacy detectado', + 'bootCheck.legacyDescription': + 'Un daemon de OpenHuman instalado por separado ya está corriendo en este dispositivo. Necesitamos eliminarlo antes de que el runtime integrado pueda tomar el control.', + 'bootCheck.removing': 'Eliminando…', + 'bootCheck.removeContinue': 'Eliminar y continuar', + 'bootCheck.localNeedsRestart': 'El runtime local necesita reiniciarse', + 'bootCheck.localNeedsRestartDesc': + 'Tu runtime local tiene una versión diferente a la de esta app. Un reinicio rápido los sincronizará.', + 'bootCheck.restarting': 'Reiniciando…', + 'bootCheck.restartCore': 'Reiniciar runtime', + 'bootCheck.cloudNeedsUpdate': 'El runtime en la nube necesita actualizarse', + 'bootCheck.cloudNeedsUpdateDesc': + 'Tu runtime en la nube tiene una versión diferente a la de esta app. Ejecuta el actualizador para sincronizarlos.', + 'bootCheck.updating': 'Actualizando…', + 'bootCheck.updateCloudCore': 'Actualizar runtime en la nube', + 'bootCheck.versionCheckFailed': 'Verificación de versión del runtime fallida', + 'bootCheck.versionCheckFailedDesc': + 'Tu runtime está activo pero no reporta su versión. Puede estar desactualizado. Reinícialo o actualízalo para continuar.', + 'bootCheck.working': 'Trabajando…', + 'bootCheck.restartUpdateCore': 'Reiniciar / Actualizar runtime', + 'bootCheck.unexpectedError': 'Error inesperado en verificación de arranque', + 'bootCheck.actionFailed': 'Algo salió mal. Inténtalo de nuevo.', + 'bootCheck.portConflictTitle': 'No se pudo iniciar el motor de la aplicación', + 'bootCheck.portConflictBody': + 'Otro proceso está usando el puerto de red que OpenHuman necesita. Intentaremos solucionarlo automáticamente.', + 'bootCheck.portConflictFixButton': 'Corregir automáticamente', + 'bootCheck.portConflictFixing': 'Corrigiendo…', + 'bootCheck.portConflictFixFailed': + 'La corrección automática no funcionó. Reinicia tu equipo e inténtalo de nuevo.', + 'notifications.justNow': 'justo ahora', + 'notifications.minAgo': 'hace {n}m', + 'notifications.hrAgo': 'hace {n}h', + 'notifications.dayAgo': 'hace {n}d', + 'notifications.category.messages': 'Mensajes', + 'notifications.category.agents': 'Agentes', + 'notifications.category.skills': 'Habilidades', + 'notifications.category.system': 'Sistema', + 'notifications.category.meetings': 'Reuniones', + 'notifications.category.reminders': 'Recordatorios', + 'notifications.category.important': 'Importante', + 'about.update.status.checking': 'Verificando...', + 'about.update.status.available': 'v{version} disponible', + 'about.update.status.availableNoVersion': 'Actualización disponible', + 'about.update.status.downloading': 'Descargando...', + 'about.update.status.readyToInstall': 'v{version} lista para instalar', + 'about.update.status.readyToInstallNoVersion': + 'Una nueva versión se descargó y está lista. Reinicia para aplicarla.', + 'about.update.status.installing': 'Instalando...', + 'about.update.status.restarting': 'Reiniciando...', + 'about.update.status.upToDate': 'Estás usando la versión más reciente.', + 'about.update.status.error': 'Error al verificar actualizaciones', + 'about.update.status.default': 'Buscar actualizaciones', + 'welcome.connectionFailed': 'Conexión fallida: {status} {statusText}', + 'welcome.connectionFailedMsg': 'Conexión fallida: {message}', + 'welcome.continueLocally': 'Continuar localmente', 'welcome.continueLocallyExperimental': 'Continuar localmente (Experimental)', + 'welcome.localSessionStarting': 'Iniciando sesión local...', + 'welcome.localSessionDesc': 'Utiliza un perfil local sin conexión y omite TinyHumans OAuth.', + 'chat.agentChatDesc': 'Abre una sesión de chat directo con el agente.', + 'chat.modelPlaceholder': 'gpt-4o', + 'channels.activeRouteValue': '{channel} vía {authMode}', + 'privacy.dataKind.messages': 'Mensajes', + 'privacy.dataKind.agents': 'Agentes', + 'privacy.dataKind.skills': 'Habilidades', + 'privacy.dataKind.system': 'Sistema', + 'privacy.dataKind.meetings': 'Reuniones', + 'privacy.dataKind.reminders': 'Recordatorios', + 'privacy.dataKind.important': 'Importante', + 'onboarding.enableLocalAI': 'Activar IA local', + 'onboarding.skills.status.available': 'Disponible', + 'onboarding.skills.status.connected': 'Conectado', + 'onboarding.skills.status.connecting': 'Conectando', + 'onboarding.skills.status.error': 'error', + 'onboarding.skills.status.unavailable': 'No disponible', + 'composio.statusUnavailable': 'Estado no disponible', + 'composio.authExpired': 'Autenticación caducada', + 'composio.reconnect': 'Reconectar', + 'composio.expiredAuthorization': '{name} autorización vencida', + 'composio.expiredDescription': + 'Vuelva a conectarse para volver a habilitar las herramientas {name}. OpenHuman mantendrá esta integración no disponible hasta que actualice el acceso de OAuth.', + 'composio.envVarOverrides': 'está configurada, reemplaza esta configuración.', + 'composio.previewBadge': 'Vista previa', + 'composio.previewTooltip': + 'La integración del agente estará disponible próximamente: puede conectarse, pero el agente aún no puede usar este kit de herramientas.', + 'memory.day.sun': 'Dom', + 'memory.day.mon': 'Lun', + 'memory.day.tue': 'Mar', + 'memory.day.wed': 'Mié', + 'memory.day.thu': 'Jue', + 'memory.day.fri': 'Vie', + 'memory.day.sat': 'Sáb', + 'memory.ingesting': 'Ingiriendo', + 'memory.ingestionQueued': 'En cola', + 'memory.ingestingTitle': 'Ingiriendo {title}', + 'mic.noAudioCaptured': 'No se capturó audio', + 'mic.noSpeechDetected': 'No se detectó habla', + 'mic.lowConfidenceResult': 'No se pudo entender el audio con claridad — intenta de nuevo', + 'mic.failedToStopRecording': 'No se pudo detener la grabación: {message}', + 'mic.transcriptionFailed': 'Transcripción fallida: {message}', + 'reflections.kind.retrospective': 'Retrospectiva', + 'reflections.kind.derivedFact': 'Hecho derivado', + 'reflections.kind.moodInsight': 'Insight de ánimo', + 'reflections.kind.relationshipInsight': 'Insight de relación', + 'graph.tooltip.summary': 'Resumen', + 'graph.tooltip.contact': 'Contacto', + 'localModel.usage.never': 'Nunca', + 'localModel.usage.mediumLoad': 'Carga media', + 'localModel.usage.lowLoad': 'Carga baja', + 'localModel.usage.idleMode': 'Modo inactivo', + 'localModel.rebootstrapComplete': 'Re-bootstrap del modelo completado.', + 'localModel.modelsVerified': 'Modelos locales verificados.', + 'accounts.addModal.allConnected': 'Todo conectado', + 'accounts.addModal.title': 'Agregar cuenta', + 'accounts.respondQueue.empty': 'Vacío', + 'accounts.respondQueue.hide': 'Ocultar cola de respuestas', + 'accounts.respondQueue.loadFailed': 'No se pudo cargar la cola de respuestas', + 'accounts.respondQueue.loading': 'Cargando cola…', + 'accounts.respondQueue.pending': 'Pendiente', + 'accounts.respondQueue.show': 'Mostrar cola de respuestas', + 'accounts.respondQueue.title': 'Cola de respuestas', + 'accounts.webviewHost.almostReady': 'Casi listo...', + 'accounts.webviewHost.loadTimeout': 'Tiempo de carga agotado', + 'accounts.webviewHost.loading': 'Cargando {providerName}...', + 'accounts.webviewHost.loadingAccount': 'Cargando cuenta', + 'accounts.webviewHost.restoringSession': 'Restaurando sesión...', + 'accounts.webviewHost.retryLoading': 'Reintentar carga', + 'accounts.webviewHost.takingLonger': '{providerName} está tardando más de lo esperado.', + 'accounts.webviewHost.timeoutHint': 'Pista de tiempo agotado', + 'app.connectionBadge.composio': 'Composio', + 'app.connectionBadge.messaging': 'Mensajería', + 'app.connectionIndicator.connected': 'Conectado a OpenHuman AI 🚀', + 'app.connectionIndicator.connecting': 'Conectando', + 'app.connectionIndicator.coreOffline': 'Core sin conexión', + 'app.connectionIndicator.disconnected': 'Desconectado', + 'app.connectionIndicator.offline': 'Sin conexión', + 'app.connectionIndicator.reconnecting': 'Reconectando…', + 'app.errorFallback.componentStack': 'Pila de componentes', + 'app.errorFallback.downloadLatest': 'Descargar la última versión', + 'app.errorFallback.heading': 'Encabezado', + 'app.errorFallback.hint': 'Sugerencia', + 'app.errorFallback.reloadApp': 'Recargar app', + 'app.errorFallback.subheading': 'Subtítulo', + 'app.errorFallback.tryRecover': 'Intentar recuperar', + 'app.localAiDownload.installing': 'Instalando...', + 'app.localAiDownload.preparing': 'Preparando...', + 'app.openhumanLink.accounts.continueWith': 'Continuar con inicio de sesión de {label}', + 'app.openhumanLink.accounts.done': 'Listo', + 'app.openhumanLink.accounts.intro': 'Introducción', + 'app.openhumanLink.accounts.webviewNote': 'Nota de webview', + 'app.openhumanLink.billing.openDashboard': 'Abrir panel', + 'app.openhumanLink.billing.stayOnTrial': 'Continuar con prueba', + 'app.openhumanLink.billing.trialCredit': 'Crédito de prueba', + 'app.openhumanLink.billing.trialDesc': 'Descripción de prueba', + 'app.openhumanLink.defaultBody': + 'Aún no está listo en el menú emergente. Abre la página completa de ajustes cuando la necesites.', + 'app.openhumanLink.discord.intro': 'Introducción', + 'app.openhumanLink.discord.openInvite': 'Abrir invitación', + 'app.openhumanLink.discord.perk1': 'Ventaja 1', + 'app.openhumanLink.discord.perk2': 'Ventaja 2', + 'app.openhumanLink.discord.perk3': 'Ventaja 3', + 'app.openhumanLink.discord.perk4': 'Ventaja 4', + 'app.openhumanLink.done': 'Listo', + 'app.openhumanLink.loadingChannelSetup': 'Cargando configuración de canal', + 'app.openhumanLink.maybeLater': 'Quizás después', + 'app.openhumanLink.notifications.asking': 'Consultando tu sistema operativo…', + 'app.openhumanLink.notifications.blocked': 'Bloqueado', + 'app.openhumanLink.notifications.blockedStep1': 'Paso bloqueado 1', + 'app.openhumanLink.notifications.blockedStep2': 'Paso bloqueado 2', + 'app.openhumanLink.notifications.blockedStep3': 'Paso bloqueado 3', + 'app.openhumanLink.notifications.intro': 'Introducción', + 'app.openhumanLink.notifications.promptHint': 'Sugerencia de permiso', + 'app.openhumanLink.notifications.retry': 'Reintentar notificación de prueba', + 'app.openhumanLink.notifications.send': 'Enviar notificación de prueba', + 'app.openhumanLink.notifications.sendFailed': 'No se pudo enviar: {error}', + 'app.openhumanLink.notifications.sent': + 'Notificación de prueba enviada. Si no la recibiste, ve a Ajustes del sistema → Notificaciones → OpenHuman, activa Permitir notificaciones y configura el estilo de banner como Persistente.', + 'app.openhumanLink.skipForNow': 'Omitir por ahora', + 'app.openhumanLink.telegramUnavailable': 'Telegram no disponible', + 'app.openhumanLink.title.accounts': 'Conecta tus apps', + 'app.openhumanLink.title.billing': 'Facturación y créditos', + 'app.openhumanLink.title.discord': 'Únete a la comunidad', + 'app.openhumanLink.title.messaging': 'Conecta un canal de chat', + 'app.openhumanLink.title.notifications': 'Permitir notificaciones', + 'app.persistRehydration.body': 'Cuerpo', + 'app.persistRehydration.heading': 'Encabezado', + 'app.persistRehydration.resetCta': 'Restableciendo…', + 'app.persistRehydration.resetting': 'Restableciendo…', + 'app.routeLoading.initializing': 'Inicializando OpenHuman...', + 'app.update.currentlyOn': '{version}', + 'app.update.errorFallback': 'Algo salió mal durante la actualización.', + 'app.update.header.default': 'Actualización', + 'app.update.header.error': 'Actualización fallida', + 'app.update.header.installing': 'Instalando actualización', + 'app.update.header.readyToInstall': 'Actualización lista para instalar', + 'app.update.header.restarting': 'Reiniciando…', + 'app.update.later': 'Después', + 'app.update.newVersionReady': 'Una nueva versión está lista para instalar.', + 'app.update.progress.downloaded': '{amount} descargado', + 'app.update.progress.installing': 'Instalando la nueva versión…', + 'app.update.progress.restarting': 'Relanzando la app…', + 'app.update.progress.working': '{percent}%', + 'app.update.restartNote': 'Nota de reinicio', + 'app.update.restartNow': 'Reiniciar ahora', + 'app.update.versionReady': 'La versión {newVersion} está lista para instalar.', + 'channels.discord.accountLinked': 'Cuenta vinculada', + 'channels.discord.connect': 'Conectar', + 'channels.discord.linkTokenExpired': 'El token de enlace expiró. Inténtalo de nuevo.', + 'channels.discord.linkTokenInstruction': '{token}', + 'channels.discord.linkTokenLabel': 'Etiqueta de token de enlace', + 'channels.discord.linkTokenOnce': 'Token de enlace de un solo uso', + 'channels.discord.picker.allPermissionsOk': + 'El bot tiene todos los permisos requeridos en este canal.', + 'channels.discord.picker.botNotInServers': 'Bot no está en servidores', + 'channels.discord.picker.category': 'Categoría', + 'channels.discord.picker.channel': 'Canal', + 'channels.discord.picker.checkingPermissions': 'Verificando permisos', + 'channels.discord.picker.loadingChannels': 'Cargando canales...', + 'channels.discord.picker.loadingServers': 'Cargando servidores...', + 'channels.discord.picker.missingPermissions': 'Permisos faltantes', + 'channels.discord.picker.noChannels': 'No se encontraron canales de texto', + 'channels.discord.picker.noServers': 'No se encontraron servidores', + 'channels.discord.picker.selectChannel': 'Selecciona un canal', + 'channels.discord.picker.selectServer': 'Selecciona un servidor', + 'channels.discord.picker.server': 'Servidor', + 'channels.discord.picker.serverChannelSelection': 'Selección de servidor y canal', + 'channels.discord.savedRestartRequired': 'Canal guardado. Reinicia la app para activarlo.', + 'channels.telegram.connect': 'Conectar', + 'channels.telegram.managedDmConnecting': 'Conectando DM gestionado', + 'channels.telegram.managedDmTimeout': 'Tiempo de DM gestionado agotado', + 'channels.telegram.reconnect': 'Reconectar', + 'channels.telegram.savedRestartRequired': 'Canal guardado. Reinicia la app para activarlo.', + 'channels.web.alwaysAvailable': 'Siempre disponible', + 'chat.approval.approve': 'Aprobar', + 'chat.approval.alwaysAllow': 'Permitir siempre', + 'chat.approval.alwaysAllowHint': + 'Deje de solicitar esta herramienta: agréguela a su lista de permitidos siempre', + 'chat.approval.deciding': 'Laboral…', + 'chat.approval.deny': 'Denegar', + 'chat.approval.error': 'No se pudo registrar su decisión; inténtelo de nuevo.', + 'chat.approval.fallback': 'El agente quiere ejecutar una acción que necesita su aprobación.', + 'chat.approval.title': 'Aprobación necesaria', + 'chat.approval.tool': 'Herramienta:', + 'channels.authMode.managed_dm': 'Iniciar sesión con OpenHuman', + 'channels.authMode.oauth': 'OAuth Iniciar sesión', + 'channels.authMode.bot_token': 'Utilice su propio token de bot', + 'channels.authMode.api_key': 'Utilice su propia clave API', + 'channels.fieldRequired': '{field} es requerido', + 'channels.mcp.title': 'MCP Servidores', + 'channels.mcp.description': + 'Explora y gestiona servidores de Model Context Protocol que amplían la IA con nuevas herramientas.', + 'channels.discord.displayName': 'Discord', + 'channels.discord.description': 'Enviar y recibir mensajes a través de Discord.', + 'channels.discord.authMode.bot_token.description': 'Proporcione su propio token de bot Discord.', + 'channels.discord.authMode.oauth.description': + 'Instale el bot OpenHuman en su servidor Discord a través de OAuth.', + 'channels.discord.authMode.managed_dm.description': + 'Vincula tu cuenta personal Discord al bot OpenHuman.', + 'channels.discord.fields.bot_token.label': 'Ficha de robot', + 'channels.discord.fields.bot_token.placeholder': 'Tu token de bot Discord', + 'channels.discord.fields.guild_id.label': 'ID del servidor (gremio)', + 'channels.discord.fields.guild_id.placeholder': 'Opcional: restringir a un servidor específico', + 'channels.telegram.displayName': 'Telegram', + 'channels.telegram.description': 'Enviar y recibir mensajes a través de Telegram.', + 'channels.telegram.authMode.managed_dm.description': + 'Envíe un mensaje al bot OpenHuman Telegram directamente.', + 'channels.telegram.authMode.bot_token.description': + 'Proporcione su propio token de Bot Telegram de @BotFather.', + 'channels.telegram.fields.bot_token.label': 'Ficha de robot', + 'channels.telegram.fields.bot_token.placeholder': '123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11', + 'channels.telegram.fields.allowed_users.label': 'Usuarios permitidos', + 'channels.telegram.fields.allowed_users.placeholder': + 'Nombres de usuario Telegram separados por comas', + 'channels.telegram.remoteControlTitle': 'Control remoto (Telegram)', + 'channels.telegram.remoteControlBody': + 'Desde un chat Telegram permitido, envíe /status, /sessions, /new o /help. El enrutamiento de modelos todavía usa /model y /models.', + 'channels.web.displayName': 'Web', + 'channels.web.description': 'Chatea a través de la interfaz de usuario web incorporada.', + 'channels.web.authMode.managed_dm.description': + 'Utilice el chat web integrado: no requiere configuración.', + 'channels.yuanbao.connect': 'Connect', + 'channels.yuanbao.connecting': 'Conectando…', + 'channels.yuanbao.fieldRequired': '{field} es obligatorio', + 'channels.yuanbao.reconnect': 'Reconnect', + 'channels.yuanbao.savedRestartRequired': 'Canal guardado. Reinicia la aplicación para activarlo.', + 'channels.yuanbao.unexpectedStatus': 'Estado de conexión inesperado: {status}', + 'chat.unsubscribeApproval.approve': 'Aprobar y darse de baja', + 'chat.unsubscribeApproval.approved': '✓ Baja realizada con éxito.', + 'chat.unsubscribeApproval.denied': '✕ Solicitud denegada.', + 'chat.unsubscribeApproval.deny': 'Denegar', + 'chat.unsubscribeApproval.processing': 'Procesando...', + 'chat.unsubscribeApproval.title': 'Solicitud de baja', + 'commandPalette.ariaLabel': 'Paleta de comandos', + 'commandPalette.description': 'Descripción', + 'commandPalette.label': 'Comandos', + 'commandPalette.noResults': 'Sin resultados', + 'commandPalette.placeholder': 'Escribe un comando o busca…', + 'commandPalette.searchAria': 'Buscar comandos', + 'commandPalette.shortcutHint': 'Pulsa ? para ver todos los atajos', + 'commandPalette.title': 'Paleta de comandos', + 'kbd.ariaLabel': 'Atajo de teclado: {shortcut}', + 'iosMascot.connectedTo': 'Conectado a', + 'iosMascot.defaultPairedLabel': 'Escritorio', + 'iosMascot.disconnect': 'Desconectar', + 'iosMascot.error.generic': 'Algo salió mal. Por favor inténtalo de nuevo.', + 'iosMascot.error.sendFailed': 'No se pudo enviar. Comprueba tu conexión.', + 'iosMascot.pushToTalk': 'Empuja para hablar', + 'iosMascot.sendMessage': 'enviar mensaje', + 'iosMascot.thinking': 'Pensando...', + 'iosMascot.typeMessage': 'Escribe un mensaje...', + 'iosPair.connectedLoading': '¡Conectado! Cargando...', + 'iosPair.connecting': 'Conectándose al escritorio...', + 'iosPair.desktopLabel': 'Escritorio', + 'iosPair.error.camera': + 'Error al escanear con la cámara. Comprueba los permisos de cámara e inténtalo de nuevo.', + 'iosPair.error.connectionFailed': + 'Error de conexión. Asegúrate de que la aplicación de escritorio esté en ejecución e inténtalo de nuevo.', + 'iosPair.error.invalidQr': + 'Código QR no válido. Asegúrate de escanear un código de vinculación de OpenHuman.', + 'iosPair.error.unreachableDesktop': + 'No se pudo acceder al escritorio. Asegúrate de que ambos dispositivos estén en línea e inténtalo de nuevo.', + 'iosPair.expired': 'QR code expiró. Pídale al escritorio que regenere el código.', + 'iosPair.instructions': + 'Abre OpenHuman en tu escritorio, ve a Configuración > Dispositivos y pulsa «Vincular teléfono» para mostrar el código QR.', + 'iosPair.retryScan': 'Reintentar escaneo', + 'iosPair.scanQrCode': 'Escanear QR code', + 'iosPair.scannerOpening': 'Apertura del escáner...', + 'iosPair.step.openDesktop': 'Abra OpenHuman en el escritorio', + 'iosPair.step.openSettings': 'Vaya a Configuración > Dispositivos', + 'iosPair.step.showQr': 'Toca "Emparejar teléfono" para mostrar QR', + 'iosPair.title': 'Emparéjalo con tu escritorio', + 'composio.connect.additionalConfigRequired': 'Configuración adicional requerida', + 'composio.connect.atlassianSubdomainHint': 'cumbre', + 'composio.connect.atlassianSubdomainLabel': 'Etiqueta de subdominio de Atlassian', + 'composio.connect.connect': 'Conectar', + 'composio.connect.dynamicsOrgNameHint': + 'Por ejemplo, "myorg" para myorg.crm.dynamics.com. Introduce solo el nombre corto de la organización, no la URL completa.', + 'composio.connect.dynamicsOrgNameLabel': 'Nombre de la organización de Dynamics 365', + 'composio.connect.connectionFailed': 'Falló la conexión (estado: {status}).', + 'composio.connect.disconnectFailed': 'Desconexión fallida: {msg}', + 'composio.connect.disconnecting': 'Desconectando…', + 'composio.connect.idleDescription': 'Conecta tu', + 'composio.connect.idleDescriptionSuffix': + 'cuenta. Abriremos una ventana del navegador, apruebas el acceso allí, y esta app detectará la conexión automáticamente.', + 'composio.connect.isConnected': 'está conectado.', + 'composio.connect.manage': 'Gestionar', + 'composio.connect.needsFieldsPrefix': 'Para conectar', + 'composio.connect.needsFieldsSuffix': + 'necesitamos un poco más de información. Completa los campos que faltan abajo y vuelve a intentarlo.', + 'composio.connect.needsSubdomain': 'Para conectar', + 'composio.connect.needsSubdomainSuffix': + 'introduce tu subdominio de Atlassian (p. ej. acme para acme.atlassian.net) e inténtalo de nuevo.', + 'composio.connect.oauthComplete': 'OAuth por completar…', + 'composio.connect.oauthTimeout': 'Tiempo de OAuth agotado', + 'composio.connect.permissions': 'Permisos', + 'composio.connect.permissionsDefault': 'Lectura + Escritura habilitados por defecto', + 'composio.connect.permissionsNote': 'puede exponer', + 'composio.connect.permissionsNoteSuffix': + 'los propios permisos del agente de OpenHuman se controlan abajo con conmutadores de lectura, escritura y administración.', + 'composio.connect.reopenBrowser': 'Reabrir navegador', + 'composio.connect.requestingUrl': 'Solicitando URL de conexión…', + 'composio.connect.requiredFieldEmpty': 'Este campo es obligatorio.', + 'composio.connect.retryConnection': 'Reintentar conexión', + 'composio.connect.scopeLoadError': 'No se pudieron cargar las preferencias de alcance: {msg}', + 'composio.connect.scopeSaveError': 'No se pudo guardar el alcance {key}: {msg}', + 'composio.connect.scope.read': 'leer', + 'composio.connect.scope.readHint': 'Permita que el agente lea datos de esta conexión.', + 'composio.connect.scope.write': 'escribir', + 'composio.connect.scope.writeHint': + 'Permita que el agente cree o modifique datos a través de esta conexión.', + 'composio.connect.scope.admin': 'administrador', + 'composio.connect.scope.adminHint': + 'Permitir que el agente administre configuraciones, permisos o acciones destructivas.', + 'composio.connect.subdomainInvalid': + 'Introduce solo el subdominio corto (p. ej. "acme"), no la URL completa. Debe contener solo letras, números y guiones.', + 'composio.connect.subdomainRequired': 'Ingresa tu subdominio de Atlassian para continuar.', + 'composio.connect.wabaIdHint': + 'Encuéntralo mediante GET /me/businesses y luego GET /{business_id}/owned_whatsapp_business_accounts usando tu token de acceso de Meta.', + 'composio.connect.wabaIdLabel': 'Etiqueta de ID de WABA', + 'composio.connect.wabaIdRequired': + 'Ingresa tu ID de cuenta de WhatsApp Business (WABA ID) para continuar.', + 'composio.connect.waitingFor': 'Esperando a', + 'composio.connect.waitingHint': 'Sugerencia de espera', + 'composio.triggers.heading': 'Disparadores', + 'composio.triggers.listenFrom': 'Escuchar eventos de', + 'composio.triggers.loadError': 'No se pudieron cargar los triggers', + 'composio.triggers.needsConfiguration': 'Necesita configuración', + 'composio.triggers.noneAvailable': 'Actualmente no hay triggers disponibles para', + 'conversations.taskKanban.moveLeft': 'Mover a la izquierda', + 'conversations.taskKanban.moveRight': 'Mover a la derecha', + 'conversations.taskKanban.title': 'Tareas', + 'conversations.taskKanban.approval.default': 'Por defecto', + 'conversations.taskKanban.approval.notRequired': 'No requerido', + 'conversations.taskKanban.approval.notRequiredBadge': 'sin aprobación', + 'conversations.taskKanban.approval.required': 'Requerido', + 'conversations.taskKanban.approval.requiredBadge': 'aprobación', + 'conversations.taskKanban.approval.requiredBeforeExecution': 'Requerido antes de la ejecución', + 'conversations.taskKanban.briefButton': 'Resumen de la tarea', + 'conversations.taskKanban.briefTitle': 'Resumen de la tarea', + 'conversations.taskKanban.closeBrief': 'Cerrar resumen de tarea', + 'conversations.taskKanban.field.acceptanceCriteria': 'Criterios de aceptación', + 'conversations.taskKanban.field.allowedTools': 'Herramientas permitidas', + 'conversations.taskKanban.field.approval': 'Aprobación', + 'conversations.taskKanban.field.assignedAgent': 'Agente asignado', + 'conversations.taskKanban.field.blocker': 'bloqueador', + 'conversations.taskKanban.field.evidence': 'Evidencia', + 'conversations.taskKanban.field.notes': 'Notas', + 'conversations.taskKanban.field.objective': 'Objetivo', + 'conversations.taskKanban.field.plan': 'Plan', + 'conversations.taskKanban.field.status': 'Estado', + 'conversations.taskKanban.field.title': 'Título', + 'conversations.taskKanban.saveChanges': 'Guardar cambios', + 'conversations.taskKanban.deleteCard': 'Borrar', + 'conversations.taskKanban.updateFailed': + 'No se pudo actualizar la tarea; los cambios no se guardaron.', + 'conversations.toolTimeline.turn': 'turno', + 'conversations.toolTimeline.workerThread': 'hilo de worker', + 'daemon.serviceBlockingGate.body': 'Cuerpo', + 'daemon.serviceBlockingGate.downloadHint': 'Sugerencia de descarga', + 'daemon.serviceBlockingGate.downloadLatest': 'Descargar la última versión', + 'daemon.serviceBlockingGate.retryCore': 'Reintentar Core', + 'daemon.serviceBlockingGate.retryFailed': + 'Reintento fallido. Descarga la última versión de la app e inténtalo de nuevo.', + 'daemon.serviceBlockingGate.retrying': 'Reintentando...', + 'daemon.serviceBlockingGate.title': 'El core de OpenHuman no está disponible', + 'home.banners.discordSubtitle': 'Subtítulo de Discord', + 'home.banners.discordTitle': 'Únete a nuestro Discord', + 'home.banners.earlyBirdDismiss': 'Descartar banner de early bird', + 'home.banners.earlyBirdFirstSub': 'primera suscripción.', + 'home.banners.earlyBirdOn': 'Early bird activo', + 'home.banners.earlyBirdTitle': 'Los primeros 1.000 usuarios obtienen un 60% de descuento.', + 'home.banners.earlyBirdUseCode': 'Usar código early bird', + 'home.banners.getSubscription': 'obtener una suscripción', + 'home.banners.promoCreditsBody': 'Cuerpo de créditos promocionales', + 'home.banners.promoCreditsTitle': '{amount}', + 'home.banners.promoCreditsUsage': 'Uso de créditos promocionales', + 'intelligence.memoryChunk.detail.chunk': 'Fragmento', + 'intelligence.memoryChunk.detail.copyChunkId': 'Copiar ID de fragmento', + 'intelligence.memoryChunk.detail.embeddingInfo': 'bge-m3 1024dim', + 'intelligence.memoryChunk.detail.noEmbedding': 'Sin embedding', + 'intelligence.memoryChunk.letterhead.from': 'de', + 'intelligence.memoryChunk.letterhead.to': 'a', + 'intelligence.memoryChunk.mentioned.chunkOne': '1 fragmento', + 'intelligence.memoryChunk.mentioned.chunkOther': '{count} fragmentos', + 'intelligence.memoryChunk.mentioned.heading': 'm e n c i o n a d o', + 'intelligence.memoryChunk.scoreBars.ariaScore': '{name} puntuación {pct} por ciento', + 'intelligence.memoryChunk.scoreBars.atThreshold': 'en {threshold}', + 'intelligence.memoryChunk.scoreBars.dropped': 'descartado', + 'intelligence.memoryChunk.scoreBars.heading': 'p o r q u é s e c o n s e r v ó', + 'intelligence.memoryChunk.scoreBars.kept': 'conservado', + 'intelligence.diagram.title': 'Diagrama de arquitectura', + 'intelligence.diagram.description': + 'Última salida de arquitectura local desde el endpoint de diagrama configurado.', + 'intelligence.diagram.refresh': 'Refresh', + 'intelligence.diagram.refreshAria': 'Actualizar diagrama', + 'intelligence.diagram.emptyTitle': 'Aún no hay diagrama disponible', + 'intelligence.diagram.emptyDescription': + 'Genera un diagrama de arquitectura desde el orquestador y este panel se actualizará desde el endpoint local configurado.', + 'intelligence.diagram.skillInstallCommand': 'npx skills add yizhiyanhua-ai/fireworks-tech-graph', + 'intelligence.diagram.promptExample': + 'Genera un diagrama de arquitectura del enjambre actual en estilo de terminal oscuro', + 'intelligence.diagram.imageAlt': 'Último diagrama de arquitectura de OpenHuman generado', + 'intelligence.diagram.refreshesEvery': 'Se actualiza cada {seconds}s', + 'intelligence.memoryText.entityTypePrefix': 'Tipo de entidad', + 'intelligence.screenDebug.active': 'Activo', + 'intelligence.screenDebug.app': 'Aplicación', + 'intelligence.screenDebug.bounds': 'Límites', + 'intelligence.screenDebug.captureAlt': 'Resultado de prueba de captura', + 'intelligence.screenDebug.captureFailed': 'Falló', + 'intelligence.screenDebug.captureSuccess': 'Éxito', + 'intelligence.screenDebug.captureTest': 'Prueba de captura', + 'intelligence.screenDebug.capturing': 'Capturando', + 'intelligence.screenDebug.frames': 'Fotogramas', + 'intelligence.screenDebug.idle': 'Inactivo', + 'intelligence.screenDebug.lastApp': 'Última app', + 'intelligence.screenDebug.mode': 'Modo', + 'intelligence.screenDebug.permAccessibility': 'Permiso de accesibilidad', + 'intelligence.screenDebug.permInput': 'Permiso de entrada', + 'intelligence.screenDebug.permScreen': 'Accesibilidad', + 'intelligence.screenDebug.permissions': 'Permisos', + 'intelligence.screenDebug.platformNotSupported': 'Plataforma no compatible', + 'intelligence.screenDebug.recentVisionSummaries': 'Resúmenes de visión recientes', + 'intelligence.screenDebug.session': 'Sesión', + 'intelligence.screenDebug.size': 'Tamaño', + 'intelligence.screenDebug.status': 'Estado', + 'intelligence.screenDebug.testCapture': 'Prueba de captura', + 'intelligence.screenDebug.time': 'Tiempo', + 'intelligence.screenDebug.title': 'Título', + 'intelligence.screenDebug.unknown': 'Desconocido', + 'intelligence.screenDebug.visionQueue': 'Cola de visión', + 'intelligence.screenDebug.visionState': 'Estado de visión', + 'intelligence.tasks.activeBoardOne': '1 tablero activo entre conversaciones', + 'intelligence.tasks.activeBoardOther': '{count} tableros activos entre conversaciones', + 'intelligence.tasks.empty': 'Sin tableros de tareas de agente aún', + 'intelligence.tasks.emptyHint': 'Sugerencia de vacío', + 'intelligence.tasks.failedToLoad': 'No se pudo cargar', + 'intelligence.tasks.live': 'en vivo', + 'intelligence.tasks.loadingBoards': 'Cargando tableros de tareas…', + 'intelligence.tasks.threadPrefix': 'Hilo {thread}', + 'intelligence.tasks.subtitle': + 'Sus tareas y paneles de tareas de agentes en todo el espacio de trabajo.', + 'intelligence.tasks.newTask': 'Nueva tarea', + 'intelligence.tasks.personalBoardTitle': 'Tareas del agente', + 'intelligence.tasks.personalEmpty': 'Aún no hay tareas personales', + 'intelligence.tasks.composer.title': 'Nueva tarea', + 'intelligence.tasks.composer.titleLabel': 'Título', + 'intelligence.tasks.composer.titlePlaceholder': '¿Qué hay que hacer?', + 'intelligence.tasks.composer.statusLabel': 'Estado', + 'intelligence.tasks.composer.attachLabel': 'Adjuntar a la conversación', + 'intelligence.tasks.composer.attachNone': 'Personal (sin conversación)', + 'intelligence.tasks.composer.objectiveLabel': 'Objetivo', + 'intelligence.tasks.composer.objectivePlaceholder': 'Opcional: el resultado deseado', + 'intelligence.tasks.composer.notesLabel': 'Notas', + 'intelligence.tasks.composer.notesPlaceholder': 'Notas opcionales', + 'intelligence.tasks.composer.create': 'Crear tarea', + 'intelligence.tasks.composer.creating': 'Creando…', + 'intelligence.tasks.composer.createFailed': 'No se pudo crear la tarea', + 'notifications.card.dismiss': 'Descartar notificación', + 'notifications.card.importanceTitle': 'Importancia: {pct}%', + 'notifications.center.empty': 'Sin notificaciones aún', + 'notifications.center.emptyHint': 'Sugerencia de vacío', + 'notifications.center.filterAll': 'Filtrar todo', + 'notifications.center.markAllRead': 'Marcar todo como leído', + 'notifications.center.title': 'Notificaciones', + 'oauth.button.connecting': 'Conectando...', + 'oauth.button.loopbackTimeout': + 'El inicio de sesión expiró — el navegador no completó la redirección OAuth. Por favor, inténtalo de nuevo.', + 'oauth.login.continueWith': 'Continuar con', + 'onboarding.contextGathering.buildingDesc': 'Descripción de construcción', + 'onboarding.contextGathering.buildingProfile': 'Construyendo tu perfil...', + 'onboarding.contextGathering.continueToChat': 'Continuar al chat', + 'onboarding.contextGathering.coreAlive': + 'El núcleo está disponible — el primer arranque puede tardar un minuto.', + 'onboarding.contextGathering.coreAliveProbing': 'Comprobando la conexión con el núcleo…', + 'onboarding.contextGathering.coreUnreachable': + 'El núcleo no responde. Puedes continuar e intentarlo más tarde.', + 'onboarding.contextGathering.errorDesc': + 'No pudimos construir tu perfil completo ahora mismo, pero no pasa nada — puedes continuar y tu perfil se construirá con el tiempo.', + 'onboarding.contextGathering.stillWorkingDesc': + 'El primer arranque puede tardar 30–60 segundos mientras preparamos tu modelo local y tus herramientas. Puedes continuar al chat en cualquier momento — la construcción del perfil sigue en segundo plano.', + 'onboarding.contextGathering.stillWorkingTitle': 'Seguimos trabajando en tu perfil…', + 'onboarding.contextGathering.title': 'Recopilación de contexto', + 'openhuman.team_list_teams': 'Lista de equipos', + 'overlay.ariaAttention': 'Mensaje de atención', + 'overlay.ariaCompanion': 'Acompañante activo', + 'overlay.ariaOrb': 'Overlay de OpenHuman', + 'overlay.ariaVoiceActive': 'Entrada de voz activa', + 'overlay.companion.error': 'error', + 'overlay.companion.listening': 'Escuchando…', + 'overlay.companion.pointing': 'Señalando…', + 'overlay.companion.speaking': 'Hablando…', + 'overlay.companion.thinking': 'Pensando…', + 'overlay.orbTitle': 'Arrastra para mover · Doble clic para restablecer posición', + 'pages.settings.account.connections': 'Conexiones', + 'pages.settings.account.connectionsDesc': 'Descripción de conexiones', + 'pages.settings.account.migration': 'Importar desde otro asistente', + 'pages.settings.account.migrationDesc': + 'Migra memoria y notas desde OpenClaw (y pronto Hermes) a este espacio de trabajo.', + 'pages.settings.account.privacy': 'Privacidad', + 'pages.settings.account.privacyDesc': 'Descripción de privacidad', + 'pages.settings.account.recoveryPhrase': 'Frase de recuperación', + 'pages.settings.account.recoveryPhraseDesc': 'Descripción de frase de recuperación', + 'pages.settings.account.team': 'Equipo', + 'pages.settings.account.teamDesc': 'Descripción de equipo', + 'pages.settings.accountSection.description': + 'Frase de recuperación, equipo, conexiones y configuración de privacidad.', + 'pages.settings.accountSection.title': 'Cuenta', + 'pages.settings.ai.llm': 'LLM', + 'pages.settings.ai.llmDesc': 'Descripción de LLM', + 'pages.settings.ai.voice': 'Voz', + 'pages.settings.ai.voiceDesc': 'Descripción de voz', + 'pages.settings.aiSection.description': + 'Proveedores de modelos de lenguaje, Ollama local y voz (STT / TTS).', + 'pages.settings.aiSection.title': 'IA', + 'pages.settings.composioSection.title': 'Composio', + 'pages.settings.composioSection.description': + 'Enrutamiento, activadores e historial para integraciones impulsadas por Composio.', + 'settings.developerMenu.composio.title': 'Composio', + 'settings.developerMenu.composio.desc': + 'Modo de enrutamiento, activadores de integración y archivo de historial de activadores.', + 'pages.settings.features.desktopCompanion': 'Acompañante de escritorio', + 'pages.settings.features.desktopCompanionDesc': + 'Asistente de voz con conciencia de pantalla — escucha, ve, habla, señala', + 'pages.settings.features.messagingChannels': 'Canales de mensajería', + 'pages.settings.features.messagingChannelsDesc': 'Descripción de canales de mensajería', + 'pages.settings.features.notifications': 'Notificaciones', + 'pages.settings.features.notificationsDesc': 'Descripción de notificaciones', + 'pages.settings.features.screenAwareness': 'Conciencia de pantalla', + 'pages.settings.features.screenAwarenessDesc': 'Descripción de conciencia de pantalla', + 'pages.settings.features.tools': 'Herramientas', + 'pages.settings.features.toolsDesc': 'Descripción de herramientas', + 'pages.settings.featuresSection.description': + 'Conciencia de pantalla, mensajería y herramientas.', + 'pages.settings.featuresSection.title': 'Funciones', + 'privacy.dataKind.credentials': 'Credenciales', + 'privacy.dataKind.derived': 'Derivado', + 'privacy.dataKind.diagnostics': 'Diagnósticos', + 'privacy.dataKind.metadata': 'Metadatos', + 'privacy.dataKind.raw': 'Sin procesar', + 'privacy.whatLeaves.link.label': '¿Qué sale de mi ordenador?', + 'rewards.community.achievementsUnlocked': '{unlocked} de {total} logros desbloqueados', + 'rewards.community.connectDiscord': 'Conectar Discord', + 'rewards.community.cumulativeTokens': 'Tokens acumulados', + 'rewards.community.currentStreak': 'Racha actual', + 'rewards.community.discordLinkedNotInGuild': 'Discord vinculado pero no en el servidor', + 'rewards.community.discordMember': 'Te uniste al servidor', + 'rewards.community.discordNotLinked': 'Discord no vinculado', + 'rewards.community.discordServer': 'Servidor de Discord', + 'rewards.community.discordStatusUnavailable': 'Estado de Discord no disponible', + 'rewards.community.discordWaiting': 'Esperando en Discord', + 'rewards.community.heroSubtitle': 'Subtítulo hero', + 'rewards.community.heroTitle': 'Título hero', + 'rewards.community.joinDiscord': 'Unirse a Discord', + 'rewards.community.loadingRewards': 'Cargando recompensas…', + 'rewards.community.locked': 'Desbloqueado', + 'rewards.community.retrying': 'Reintentando…', + 'rewards.community.rolesAndRewards': 'Roles y recompensas', + 'rewards.community.streakDays': '{n}', + 'rewards.community.syncPending': 'Sincronización de recompensas pendiente', + 'rewards.community.syncPendingDesc': 'Descripción de sincronización pendiente', + 'rewards.community.syncUnavailable': 'Sincronización no disponible', + 'rewards.community.tryAgain': 'Reintentando…', + 'rewards.community.unknown': 'Desconocido', + 'rewards.community.unlocked': 'Desbloqueado', + 'rewards.community.yourProgress': 'Tu progreso', + 'rewards.coupon.colCode': 'Código', + 'rewards.coupon.colRedeemed': 'Canjeado', + 'rewards.coupon.colReward': 'Recompensa', + 'rewards.coupon.colStatus': 'Estado', + 'rewards.coupon.loadingHistory': 'Cargando historial de recompensas…', + 'rewards.coupon.noCodes': 'Aún no se han canjeado códigos de recompensa.', + 'rewards.coupon.pending': 'Pendiente', + 'rewards.coupon.placeholder': 'Código de cupón', + 'rewards.coupon.promoCredits': 'Créditos promocionales', + 'rewards.coupon.recentRedemptions': 'Canjes recientes', + 'rewards.coupon.redeemAccepted': + '{code} aceptado. {amount} se desbloqueará cuando se complete la acción requerida.', + 'rewards.coupon.redeemButton': 'Canjear código', + 'rewards.coupon.redeemSuccess': '{code} canjeado. Se añadieron {amount} a tus créditos.', + 'rewards.coupon.redeemedCodes': 'Códigos canjeados', + 'rewards.coupon.redeeming': 'Canjeando...', + 'rewards.coupon.statusApplied': 'Aplicado', + 'rewards.coupon.statusPendingAction': 'Acción pendiente', + 'rewards.coupon.statusRedeemed': 'Canjeado', + 'rewards.coupon.subtitle': 'Subtítulo', + 'rewards.coupon.title': 'Canjear un código de cupón', + 'rewards.referralSection.activity': 'Actividad de referidos', + 'rewards.referralSection.apply': 'Aplicando…', + 'rewards.referralSection.applying': 'Aplicando…', + 'rewards.referralSection.colReferredUser': 'Usuario referido', + 'rewards.referralSection.colReward': 'Recompensa', + 'rewards.referralSection.colStatus': 'Estado', + 'rewards.referralSection.colUpdated': 'Actualizado', + 'rewards.referralSection.completed': 'Completado', + 'rewards.referralSection.copyCode': 'Copiar código', + 'rewards.referralSection.copyFailed': 'Error al copiar', + 'rewards.referralSection.haveCode': '¿Tienes un código de referido?', + 'rewards.referralSection.haveCodeDesc': 'Descripción de código disponible', + 'rewards.referralSection.linked': 'Vinculado', + 'rewards.referralSection.linkedCode': '(código {code})', + 'rewards.referralSection.loading': 'Cargando programa de referidos…', + 'rewards.referralSection.retry': 'Reintentar', + 'rewards.referralSection.noReferrals': 'Sin referidos', + 'rewards.referralSection.pendingReferrals': 'Referidos pendientes', + 'rewards.referralSection.placeholder': 'Código de referido', + 'rewards.referralSection.share': 'Compartir', + 'rewards.referralSection.statusCompleted': 'Estado: completado', + 'rewards.referralSection.statusExpired': 'Estado: expirado', + 'rewards.referralSection.statusJoined': 'Estado: unido', + 'rewards.referralSection.subtitle': 'Subtítulo', + 'rewards.referralSection.title': 'Invita amigos, gana créditos', + 'rewards.referralSection.totalEarned': 'Total ganado', + 'rewards.referralSection.yourCode': 'Tu código', + 'settings.ai.addCloudProvider': 'Añadir proveedor en la nube', + 'settings.ai.addProvider': 'Guardando…', + 'settings.ai.apiKeyFieldLabel': 'Etiqueta de campo de clave API', + 'settings.ai.apiKeyRequired': 'Pega tu clave API para continuar.', + 'settings.ai.apiKeyStoredEncrypted': 'Clave API almacenada cifrada', + 'settings.ai.apiKeysEncrypted': 'perfiles-de-autenticación.json', + 'settings.ai.clearStoredKey': 'Borrar clave almacenada', + 'settings.ai.connectProvider': 'Conectar proveedor', + 'settings.ai.customRouting': 'Enrutamiento personalizado', + 'settings.ai.defaultResolvesTo': 'El valor predeterminado se resuelve a', + 'settings.ai.discard': 'Descartar', + 'settings.ai.editProvider': 'Editar proveedor', + 'settings.ai.llmProviders': 'Proveedores LLM', + 'settings.ai.llmProvidersDesc': 'Descripción de proveedores LLM', + 'settings.ai.localOllama': 'Local (Ollama)', + 'settings.ai.modelLabel': 'Modelo', + 'settings.ai.noCustomProviders': 'Sin proveedores personalizados', + 'settings.ai.openAiCompat.authHeaderExample': 'Autorización: Portador ', + 'settings.ai.openAiCompat.authHeaderLabel': 'encabezado de autenticación', + 'settings.ai.openAiCompat.baseUrlLabel': 'URL base', + 'settings.ai.openAiCompat.baseUrlUnavailable': 'No disponible', + 'settings.ai.openAiCompat.clearKey': 'Borrar clave', + 'settings.ai.openAiCompat.description': + 'Señale los arneses locales en este servidor /v1 para enrutar a través de los proveedores configurados a continuación. La autenticación utiliza una clave estable que usted establece aquí, no el portador interno del núcleo de la aplicación.', + 'settings.ai.openAiCompat.keyConfigured': 'Clave configurada', + 'settings.ai.openAiCompat.keyRequired': 'Se requiere clave', + 'settings.ai.openAiCompat.rotateKey': 'Girar clave', + 'settings.ai.openAiCompat.setKey': 'Establecer clave', + 'settings.ai.openAiCompat.title': 'Punto final compatible con OpenAI', + 'settings.ai.providerLabel': 'Proveedor', + 'skills.mcpComingSoon.title': 'MCP Servidores', + 'skills.mcpComingSoon.description': + 'La gestión de servidores MCP llegará pronto. Esta pestaña será el lugar para descubrir, conectar y monitorear tus integraciones de servidor MCP.', + 'settings.ai.routing': 'Enrutamiento', + 'settings.ai.routingCustom': 'Enrutamiento personalizado', + 'settings.ai.routingDefault': 'Predeterminado', + 'settings.ai.routingDesc': 'Descripción de enrutamiento', + 'settings.ai.saveChanges': 'Guardando…', + 'settings.ai.saving': 'Guardando…', + 'settings.ai.unsavedChange': 'cambio sin guardar', + 'settings.ai.unsavedChanges': 'cambios sin guardar', + 'settings.ai.workloadGroupBackground': 'Grupo de carga de trabajo en segundo plano', + 'settings.ai.workloadGroupChat': 'Grupo de carga de trabajo de chat', + 'settings.ai.disconnectProvider': 'Desconectar {label}', + 'settings.ai.connectProviderLabel': 'Conectar {label}', + 'settings.ai.defaultLocalEndpoint': 'http://localhost:11434/v1', + 'settings.ai.endpointUrlLabel': 'Punto final URL', + 'settings.ai.localRuntimeHelper': + 'Donde {label} es accesible. Por defecto es localhost; apunte esto a un host remoto (por ejemplo, http://10.0.0.4:11434/v1) para usar una instancia compartida.', + 'settings.ai.endpointUrlRequired': 'Se requiere el punto final URL.', + 'settings.ai.endpointProtocolRequired': 'El punto final debe comenzar con http:// o https://.', + 'settings.ai.connectProviderDialog': 'Conectar {label}', + 'settings.ai.or': 'O', + 'settings.ai.openRouterOauthDescription': + 'Inicia sesión con OpenRouter e importa una clave API controlada por el usuario usando PKCE.', + 'settings.ai.connecting': 'Conectando...', + 'settings.ai.backgroundLoops': 'Bucles de fondo', + 'settings.ai.backgroundLoopsDesc': + 'Vea qué se ejecuta sin un mensaje de chat, pause el trabajo de latido y examine las filas recientes del libro mayor de créditos.', + 'settings.ai.heartbeatControls': 'Controles de latidos del corazón', + 'settings.ai.heartbeatControlsDesc': + 'Predeterminado apagado. Activar inicia el bucle; desactivar aborta la tarea en ejecución.', + 'settings.ai.heartbeatLoop': 'Bucle de latidos del corazón', + 'settings.ai.heartbeatLoopDesc': + 'Programador maestro para planificador + inferencia subconsciente opcional.', + 'settings.ai.subconsciousInference': 'inferencia subconsciente', + 'settings.ai.subconsciousInferenceDesc': + 'Ejecuta la evaluación task/reflection respaldada por modelo en los latidos del corazón.', + 'settings.ai.calendarMeetingChecks': 'Verificaciones de reuniones del calendario', + 'settings.ai.calendarMeetingChecksDesc': + 'Llama a la lista de eventos del calendario para conexiones de calendario Google activas.', + 'settings.ai.calendarCap': 'tapa del calendario', + 'settings.ai.connectionsPerTick': '{count} conexión/tick', + 'settings.ai.meetingLookahead': 'Reunión anticipada', + 'settings.ai.minutesShort': '{count} min', + 'settings.ai.reminderLookahead': 'Recordatorio anticipado', + 'settings.ai.cronReminderChecks': 'Comprobaciones de recordatorio cron', + 'settings.ai.cronReminderChecksDesc': + 'Analiza los trabajos cron habilitados para elementos próximos similares a recordatorios.', + 'settings.ai.relevantNotificationChecks': 'Comprobaciones de notificaciones relevantes', + 'settings.ai.relevantNotificationChecksDesc': + 'Promueve las notificaciones locales urgentes en alertas proactivas.', + 'settings.ai.externalDelivery': 'Entrega externa', + 'settings.ai.externalDeliveryDesc': + 'Permite que las alertas de latido envíen mensajes proactivos a canales externos.', + 'settings.ai.interval': 'Intervalo', + 'settings.ai.running': 'Corriendo...', + 'settings.ai.plannerTickNow': 'Planificador marca ahora', + 'settings.ai.loadingHeartbeatControls': 'Cargando controles de latidos...', + 'settings.ai.heartbeatControlsUnavailable': 'Los controles de latidos no están disponibles.', + 'settings.ai.loopMap': 'Mapa de bucle', + 'settings.ai.plannerSummary': + 'Planificador: {sourceEvents} eventos de origen, {sent} enviados, {deduped} deduplicados.', + 'settings.ai.routeLabel': 'ruta: {route}', + 'settings.ai.on': 'en', + 'settings.ai.off': 'apagado', + 'settings.ai.recentUsageLedger': 'Libro mayor de uso reciente', + 'settings.ai.recentUsageLedgerDesc': + 'Las filas del backend exponen action/time hoy; las etiquetas de origen necesitan soporte del backend.', + 'settings.ai.latestSpend': 'Último gasto: {amount} en {time} ({action})', + 'settings.ai.topActions': 'Acciones principales', + 'settings.ai.noSpendRows': 'No se han cargado filas de gastos.', + 'settings.ai.topHours': 'Horas principales', + 'settings.ai.noHourlySpend': 'Aún no hay gasto por horas.', + 'settings.ai.openhumanDefault': 'OpenHuman (predeterminado)', + 'settings.ai.localModelResolved': 'Ollama · {model}', + 'settings.ai.customRoutingForWorkload': 'Ruta personalizada para {label}', + 'settings.ai.loadingModels': 'Cargando modelos...', + 'settings.ai.enterModelIdManually': 'o ingrese la identificación del modelo manualmente:', + 'settings.ai.modelIdPlaceholderForProvider': '{slug} identificación del modelo', + 'settings.ai.modelIdPlaceholder': 'model-id', + 'settings.ai.selectModel': 'Seleccione un modelo...', + 'settings.ai.temperatureOverride': 'Anulación de temperatura', + 'settings.ai.temperatureOverrideSlider': 'Anulación de temperatura (control deslizante)', + 'settings.ai.temperatureOverrideValue': 'Anulación de temperatura (valor)', + 'settings.ai.temperatureOverrideDesc': + 'Más bajo = más determinista. Déjelo sin marcar para usar el valor predeterminado del proveedor.', + 'settings.ai.testFailed': 'Prueba fallida', + 'settings.ai.testingModel': 'Modelo de prueba...', + 'settings.ai.modelResponse': 'Respuesta modelo', + 'settings.ai.providerWithValue': 'Proveedor: {value}', + 'settings.ai.noneDash': '—', + 'settings.ai.promptHelloWorld': 'Mensaje: Hola mundo', + 'settings.ai.startedAt': 'Iniciado: {value}', + 'settings.ai.waitingForModelResponse': 'Esperando respuesta del modelo seleccionado...', + 'settings.ai.response': 'Respuesta', + 'settings.ai.testing': 'Probando...', + 'settings.ai.test': 'prueba', + 'settings.ai.slugMissingError': 'Ingrese el nombre de un proveedor para generar un slug.', + 'settings.ai.slugInUseError': 'Ese nombre de proveedor ya está en uso.', + 'settings.ai.slugReservedError': 'Elija un nombre de proveedor diferente.', + 'settings.ai.providerNamePlaceholder': 'Mi proveedor', + 'settings.ai.slugLabel': 'Babosa:', + 'settings.ai.openAiUrlLabel': 'URL de OpenAI', + 'settings.ai.openAiUrlPlaceholder': 'https://api.openai.com/v1', + 'settings.ai.keepExistingKeyPlaceholder': 'Déjelo en blanco para conservar la clave existente', + 'settings.ai.reindexingMemory': 'Memoria de reindexación', + 'settings.ai.reindexingMemoryMessage': + 'Los embeddings están siendo reprocesados. El(los) elemento(s) de memoria {pending} están siendo re-embebidos bajo el modelo actual; la recuperación semántica se reduce hasta que esto termine. La búsqueda por palabras clave sigue funcionando, y el re-embedding continúa en segundo plano si cierras esto.', + 'settings.ai.signInWithOpenRouter': 'Iniciar sesión con OpenRouter', + 'settings.ai.weekBudget': 'Presupuesto semanal', + 'settings.ai.cycleRemaining': 'Ciclo restante', + 'settings.ai.cycleTotalSpend': 'Gasto total del ciclo', + 'settings.ai.avgSpendRow': 'Fila de gasto medio', + 'settings.ai.backgroundApiReads': 'Bg API lee', + 'settings.ai.backgroundWakeups': 'Bg despertares', + 'settings.ai.budgetMath': 'Matemáticas presupuestarias', + 'settings.ai.rowsLeft': 'Filas restantes', + 'settings.ai.rowsPerFullWeekBudget': 'Presupuesto de filas por semana completa', + 'settings.ai.sampleBurnRate': 'Tasa de grabación de muestras', + 'settings.ai.projectedEmpty': 'vacío proyectado', + 'settings.ai.apiReadsPerDollarRemaining': 'API lecturas por $ restantes', + 'settings.ai.loopCallBudget': 'Presupuesto de llamadas en bucle', + 'settings.ai.heartbeatTicks': 'Latidos del corazón', + 'settings.ai.calendarPlannerCalls': 'Llamadas del planificador de calendario', + 'settings.ai.calendarFanoutCap': 'Tapa de distribución del calendario', + 'settings.ai.subconsciousModelCalls': 'Llamadas del modelo subconsciente', + 'settings.ai.composioSyncScans': 'Composio escaneos de sincronización', + 'settings.ai.totalBackgroundApiReadBudget': 'Total bg API leer presupuesto', + 'settings.ai.memoryWorkerPolls': 'Encuestas de trabajadores de la memoria', + 'settings.ai.defaultProviderName': 'OpenHuman', + 'settings.ai.routing.managed': 'Gestionado', + 'settings.ai.routing.managedDesc': + 'OpenHuman ejecutará toda la inferencia en la nube, elegirá el mejor modelo para la tarea, optimizará para el costo y mantendrá los valores predeterminados de enrutamiento más seguros.', + 'settings.ai.routing.managedMsg': + 'OpenHuman manejará toda la inferencia para cada carga de trabajo y elegirá automáticamente la mejor ruta para costo, calidad y seguridad.', + 'settings.ai.routing.useYourOwn': 'Utilice sus propios modelos', + 'settings.ai.routing.useYourOwnDesc': + 'Elige un proveedor + modelo y dirige todas las cargas de trabajo a través de él. Esto es simple, pero puede ser ineficiente porque la inferencia ligera y la pesada comparten la misma ruta.', + 'settings.ai.routing.advanced': 'Avanzado', + 'settings.ai.routing.advancedDesc': + 'Elige diferentes modelos para diferentes tareas. Esta es la mejor opción para una optimización estricta de costos y el mayor control.', + 'settings.ai.routing.customDesc': + 'El enrutamiento detallado te ofrece la mejor optimización de costos y el mayor control. Usa las filas a continuación para decidir qué cargas de trabajo permanecen gestionadas, cuáles usan tu valor predeterminado compartido y cuáles se asignan a un modelo específico.', + 'settings.ai.routing.chatAndConversations': 'Chat y conversaciones', + 'settings.ai.routing.chatDesc': + 'Modelos utilizados durante la interacción directa con el usuario, respuestas, razonamiento, bucles de agentes y ayuda en programación.', + 'settings.ai.routing.backgroundTasks': 'Tareas en segundo plano', + 'settings.ai.routing.bgTasksDesc': + 'Modelos utilizados fuera del flujo principal de la conversación para resumen, latido, aprendizaje y evaluación subconsciente.', + 'settings.ai.routing.addCustomProvider': 'Agregar proveedor personalizado', + 'settings.ai.globalModel.title': 'Elige un modelo para todo', + 'settings.ai.globalModel.desc': + 'Esto dirige toda la inferencia a través de un modelo. Es más sencillo, pero puede ser ineficiente en cuanto a costo y calidad porque las tareas ligeras y pesadas usarán la misma ruta.', + 'settings.ai.globalModel.noProviders': + 'Agrega o conecta un proveedor primero. Luego puedes enrutar cada carga de trabajo a través de un modelo aquí.', + 'settings.ai.globalModel.provider': 'Proveedor', + 'settings.ai.globalModel.model': 'modelo', + 'settings.ai.globalModel.loadingModels': 'Cargando modelos…', + 'settings.ai.globalModel.enterModelId': 'Ingrese la identificación del modelo', + 'settings.ai.globalModel.appliesToAll': + 'Aplica el mismo proveedor + modelo a chat, razonamiento, codificación, memoria, latido, aprendizaje y subconsciente. Los embeddings se configuran por separado. Los cambios se guardan cuando haces clic en guardar.', + 'settings.ai.globalModel.saving': 'Guardando…', + 'settings.ai.globalModel.saved': 'Guardado', + 'settings.ai.workload.noModel': 'Ningún modelo seleccionado', + 'settings.ai.workload.changeModel': 'Cambiar modelo', + 'settings.ai.workload.chooseModel': 'Elige modelo', + 'settings.ai.provider.ollama': 'Ollama', + 'settings.autocomplete.appFilter.acceptSuggestion': 'Aceptar sugerencia', + 'settings.autocomplete.appFilter.app': 'Aplicación', + 'settings.autocomplete.appFilter.currentSuggestion': 'Sugerencia actual', + 'settings.autocomplete.appFilter.contextOverride': 'Anulación de contexto (opcional)', + 'settings.autocomplete.appFilter.debounce': 'rebote', + 'settings.autocomplete.appFilter.debugFocus': 'Foco de depuración', + 'settings.autocomplete.appFilter.enabled': 'Habilitado', + 'settings.autocomplete.appFilter.getSuggestion': 'Obtener sugerencia', + 'settings.autocomplete.appFilter.lastError': 'último error', + 'settings.autocomplete.appFilter.liveLogs': 'Registros en vivo', + 'settings.autocomplete.appFilter.model': 'modelo', + 'settings.autocomplete.appFilter.noLogs': '):', + 'settings.autocomplete.appFilter.phase': 'Fase', + 'settings.autocomplete.appFilter.platformSupported': 'Plataforma compatible', + 'settings.autocomplete.appFilter.refreshStatus': 'Actualizando…', + 'settings.autocomplete.appFilter.refreshing': 'Actualizando…', + 'settings.autocomplete.appFilter.running': 'corriendo', + 'settings.autocomplete.appFilter.runtime': 'Tiempo de ejecución', + 'settings.autocomplete.appFilter.test': 'Probar', + 'settings.autocomplete.completionStyle.acceptedCompletion': + '{count} completado aceptado almacenado — se usa para personalizar futuras sugerencias.', + 'settings.autocomplete.completionStyle.acceptedCompletions': + '{count} completados aceptados almacenados — se usan para personalizar futuras sugerencias.', + 'settings.autocomplete.completionStyle.clearHistory': 'Limpiando…', + 'settings.autocomplete.completionStyle.clearing': 'Limpiando…', + 'settings.autocomplete.completionStyle.debounce': 'Rebote (ms)', + 'settings.autocomplete.completionStyle.enabled': 'Activado', + 'settings.autocomplete.completionStyle.maxChars': 'Máx. caracteres', + 'settings.autocomplete.completionStyle.noHistory': + 'Sin completados aceptados aún. Acepta sugerencias con Tab para empezar a personalizar.', + 'settings.autocomplete.completionStyle.overlayTtl': 'TTL de overlay (ms)', + 'settings.autocomplete.completionStyle.personalizationHistory': 'Historial de personalización', + 'settings.autocomplete.completionStyle.styleExamples': 'Ejemplos de estilo (uno por línea)', + 'settings.autocomplete.completionStyle.styleInstructions': 'Instrucciones de estilo', + 'settings.autocomplete.debug.acceptedPrefix': 'Aceptado: {value}', + 'settings.autocomplete.debug.acceptFailed': 'No se pudo aceptar la sugerencia', + 'settings.autocomplete.debug.alreadyRunning': + 'La función de autocompletar ya se está ejecutando.', + 'settings.autocomplete.debug.clearHistoryFailed': 'No se pudo borrar el historial', + 'settings.autocomplete.debug.didNotStart': 'La función de autocompletar no se inició.', + 'settings.autocomplete.debug.disabledInSettings': + 'Autocompletar está deshabilitado en la configuración. Habilítelo y guarde primero.', + 'settings.autocomplete.debug.fetchSuggestionFailed': 'No se pudo recuperar la sugerencia actual', + 'settings.autocomplete.debug.inspectFocusedElementFailed': + 'No se pudo inspeccionar el elemento enfocado', + 'settings.autocomplete.debug.loadSettingsFailed': + 'No se pudo cargar la configuración de autocompletar', + 'settings.autocomplete.debug.noSuggestionApplied': 'No se aplicó ninguna sugerencia.', + 'settings.autocomplete.debug.noSuggestionReturned': 'No se devolvió ninguna sugerencia.', + 'settings.autocomplete.debug.refreshStatusFailed': + 'No se pudo actualizar el estado de autocompletar', + 'settings.autocomplete.debug.saveAdvancedSettingsFailed': + 'No se pudo guardar la configuración avanzada', + 'settings.autocomplete.debug.startFailed': 'No se pudo iniciar el autocompletado', + 'settings.autocomplete.debug.stopFailed': 'No se pudo detener el autocompletado', + 'settings.autocomplete.debug.suggestionPrefix': 'Sugerencia: {value}', + 'settings.autocomplete.shared.none': 'Ninguno', + 'settings.autocomplete.shared.notApplicable': 'n/a', + 'settings.autocomplete.shared.unknown': 'Desconocido', + 'settings.billing.autoRecharge.addAmount': 'Agregar esta cantidad', + 'settings.billing.autoRecharge.addCard': 'Agregar tarjeta', + 'settings.billing.autoRecharge.amountHint': 'Sugerencia de cantidad', + 'settings.billing.autoRecharge.defaultCard': 'Tarjeta predeterminada', + 'settings.billing.autoRecharge.lastRechargeFailed': 'Última recarga fallida', + 'settings.billing.autoRecharge.lastRecharged': 'Última recarga', + 'settings.billing.autoRecharge.expires': 'Vence {date}', + 'settings.billing.autoRecharge.noCards': 'Sin tarjetas', + 'settings.billing.autoRecharge.paymentMethods': 'Métodos de pago', + 'settings.billing.autoRecharge.rechargeInProgress': 'Recarga en progreso', + 'settings.billing.autoRecharge.spentThisWeek': '${spent} de ${limit} usados esta semana', + 'settings.billing.autoRecharge.rechargeWhen': 'Recargar cuando el saldo caiga por debajo de', + 'settings.billing.autoRecharge.saveSettings': 'Guardando…', + 'settings.billing.autoRecharge.saving': 'Guardando…', + 'settings.billing.autoRecharge.setDefault': ':', + 'settings.billing.autoRecharge.subtitle': 'Subtítulo', + 'settings.billing.autoRecharge.title': 'Activar recarga automática', + 'settings.billing.autoRecharge.toggleAriaLabel': 'Activar/desactivar recarga automática', + 'settings.billing.autoRecharge.weeklyLimit': 'Límite de gasto semanal', + 'settings.billing.history.desc': 'Descripción', + 'settings.billing.history.empty': 'Vacío', + 'settings.billing.history.openPortal': 'Abrir portal', + 'settings.billing.history.posted': 'Publicado', + 'settings.billing.history.title': 'Título', + 'settings.billing.inferenceBudget.cycleEnds': 'El ciclo termina', + 'settings.billing.inferenceBudget.exhausted': 'Agotado', + 'settings.billing.inferenceBudget.loadError': 'Error de carga', + 'settings.billing.inferenceBudget.noBudgetDesc': 'Sin descripción de presupuesto', + 'settings.billing.inferenceBudget.noRecurringBudget': 'Sin presupuesto recurrente', + 'settings.billing.inferenceBudget.noRecurringPlanBudget': 'Sin presupuesto de plan recurrente', + 'settings.billing.inferenceBudget.noRecurringWeeklyDesc': + 'Su plan actual no incluye un presupuesto semanal recurrente para inferencias. En su lugar, el uso se paga con los créditos disponibles.', + 'settings.billing.inferenceBudget.remaining': 'Restante', + 'settings.billing.inferenceBudget.remainingSummary': '{remaining} / {budget} restante', + 'settings.billing.inferenceBudget.spentThisCycle': 'Pasé {amount} este ciclo', + 'settings.billing.inferenceBudget.cycleEndsOn': 'El ciclo termina {date}', + 'settings.billing.inferenceBudget.exhaustedDesc': + 'El uso de la suscripción incluida se ha agotado. Recarga créditos para seguir usando AI sin esperar al próximo ciclo.', + 'settings.billing.inferenceBudget.discountVsPayg': + '{pct}% más barato por llamada que pagar por uso.', + 'settings.billing.inferenceBudget.cycleSpend': 'Gasto en ciclo', + 'settings.billing.inferenceBudget.totalAmount': '{amount} en total', + 'settings.billing.inferenceBudget.inference': 'Inferencia', + 'settings.billing.inferenceBudget.integrations': 'Integraciones', + 'settings.billing.inferenceBudget.calls': '{count} llamadas', + 'settings.billing.inferenceBudget.dailySpend': 'Gasto diario', + 'settings.billing.inferenceBudget.dailySpendPoint': '{date}: {amount}', + 'settings.billing.inferenceBudget.topModels': 'Mejores modelos', + 'settings.billing.inferenceBudget.noInferenceUsage': 'No se utilizan inferencias en este ciclo.', + 'settings.billing.inferenceBudget.topIntegrations': 'Principales integraciones', + 'settings.billing.inferenceBudget.noIntegrationUsage': 'No hay uso de integración en este ciclo.', + 'settings.billing.inferenceBudget.tenHourCap': 'Límite de diez horas', + 'settings.billing.inferenceBudget.title': 'Título', + 'settings.billing.inferenceBudget.unableToLoad': 'No se pueden cargar datos de uso', + 'settings.billing.inferenceBudget.notAvailable': 'n/a', + 'settings.billing.payAsYouGo.available': 'Disponible', + 'settings.billing.payAsYouGo.chargeCustomAmount': 'Abriendo…', + 'settings.billing.payAsYouGo.chooseTopUpDesc': 'Descripción de recarga', + 'settings.billing.payAsYouGo.chooseTopUpTitle': 'Título de recarga', + 'settings.billing.payAsYouGo.creditBalanceDesc': 'Descripción de saldo de crédito', + 'settings.billing.payAsYouGo.creditBalanceTitle': 'Título de saldo de crédito', + 'settings.billing.payAsYouGo.customAmount': 'Cantidad personalizada', + 'settings.billing.payAsYouGo.enterAmount': 'Ingresar cantidad', + 'settings.billing.payAsYouGo.opening': 'Abriendo', + 'settings.billing.payAsYouGo.promotionalCredits': 'Créditos promocionales', + 'settings.billing.payAsYouGo.topUpBalance': 'Recargar saldo', + 'settings.billing.payAsYouGo.topUpCredits': 'Recargar créditos', + 'settings.billing.payAsYouGo.unableToLoad': 'No se pudo cargar el saldo.', + 'settings.billing.subscription.annual': 'Anual', + 'settings.billing.subscription.billedAnnually': 'Facturado anualmente', + 'settings.billing.subscription.chooseSubtitle': 'Elegir subtítulo', + 'settings.billing.subscription.chooseTitle': 'Elegir título', + 'settings.billing.subscription.cryptoDesc': 'Descripción de cripto', + 'settings.billing.subscription.cryptoQuestion': 'Pregunta de cripto', + 'settings.billing.subscription.current': 'Actual', + 'settings.billing.subscription.currentPlan': 'Plan actual', + 'settings.billing.subscription.monthly': 'Mensual', + 'settings.billing.subscription.paymentConfirmed': 'Pago confirmado', + 'settings.billing.subscription.perMonth': 'Por mes', + 'settings.billing.subscription.popular': 'populares', + 'settings.billing.subscription.save': '{pct}', + 'settings.billing.subscription.upgrade': 'Mejorar plan', + 'settings.billing.subscription.waiting': 'Esperando', + 'settings.billing.subscription.waitingPayment': 'Esperando pago', + 'settings.composio.apiKeyDesc': + 'Actualmente hay una clave API de Composio almacenada en este dispositivo.', + 'settings.composio.apiKeyExamplePlaceholder': 'ck_live_xxxxxxxxxxxxxxxx', + 'settings.composio.apiKeyLabel': 'Clave API de Composio', + 'settings.composio.apiKeyStored': 'Clave API almacenada', + 'settings.composio.apiKeyStoredPlaceholder': '••••••••••••••••', + 'settings.composio.clearedToBackend': 'Cambiado al modo Backend', + 'settings.composio.confirmItem1': 'Una cuenta en app.composio.dev con una clave API', + 'settings.composio.confirmItem2': + 'Vuelve a vincular cada integración a través de tu cuenta personal de Composio', + 'settings.composio.confirmItem3': + 'Nota: los triggers de Composio (webhooks en tiempo real) aún no funcionan en modo Directo — solo las llamadas de herramientas síncronas', + 'settings.composio.confirmNeedItems': 'Necesitarás:', + 'settings.composio.confirmSwitch': 'Entiendo, cambiar a Directo', + 'settings.composio.confirmTitle': '⚠️ Cambiando a modo Directo', + 'settings.composio.confirmWarning': + 'Tus integraciones existentes (Gmail, Slack, GitHub, etc. vinculadas a través de OpenHuman) no serán visibles — viven en el inquilino de Composio gestionado por OpenHuman.', + 'settings.composio.intro': + 'Composio integra más de 250 aplicaciones externas como herramientas que tu agente puede invocar. Elige cómo se enrutan esas llamadas.', + 'settings.composio.title': 'Composio', + 'settings.composio.modeDirect': 'Directo (usa tu propia clave API)', + 'settings.composio.modeDirectDesc': + 'Las llamadas van directamente a backend.composio.dev. Soberano / amigable con uso sin conexión. La ejecución de herramientas funciona de forma síncrona; los webhooks de triggers en tiempo real aún no están enrutados en modo directo (incidencia pendiente).', + 'settings.composio.modeManaged': 'Gestionado (OpenHuman lo maneja por ti)', + 'settings.composio.modeManagedDesc': + 'OpenHuman canaliza las llamadas de herramientas a través de nuestro backend (recomendado). La autenticación se intermedia; nunca pegas una clave API de Composio. Los webhooks están totalmente enrutados.', + 'settings.composio.routingMode': 'Modo de enrutamiento', + 'settings.composio.saveErrorNoKey': + 'Error al guardar. El modo Directo requiere una clave API no vacía.', + 'settings.composio.saving': 'Guardando…', + 'settings.composio.switching': 'Cambiando…', + 'settings.companion.title': 'Compañero de escritorio', + 'settings.companion.session': 'Sesión', + 'settings.companion.activeLabel': 'Activo', + 'settings.companion.inactiveStatus': 'Inactivo', + 'settings.companion.stopping': 'Parando…', + 'settings.companion.stopSession': 'Detener sesión', + 'settings.companion.starting': 'Empezando…', + 'settings.companion.startSession': 'Iniciar sesión', + 'settings.companion.sessionId': 'ID de sesión', + 'settings.companion.turns': 'vueltas', + 'settings.companion.remaining': 'restante', + 'settings.companion.configuration': 'Configuración', + 'settings.companion.hotkey': 'tecla de acceso rápido', + 'settings.companion.activationMode': 'Modo de activación', + 'settings.companion.sessionTtl': 'TTL de sesión', + 'settings.companion.screenCapture': 'Captura de pantalla', + 'settings.companion.appContext': 'Contexto de la aplicación', + 'settings.cron.jobs.desc': 'Descripción', + 'settings.cron.jobs.empty': 'No se encontraron tareas cron del core.', + 'settings.cron.jobs.lastStatus': 'Último estado', + 'settings.cron.jobs.loading': 'Cargando tareas cron...', + 'settings.cron.jobs.loadingRuns': 'Cargando ejecuciones', + 'settings.cron.jobs.nextRun': 'Próxima ejecución', + 'settings.cron.jobs.pause': 'Pausar', + 'settings.cron.jobs.paused': 'Pausado', + 'settings.cron.jobs.recentRuns': 'Ejecuciones recientes', + 'settings.cron.jobs.removing': 'Eliminando', + 'settings.cron.jobs.resume': 'Reanudar', + 'settings.cron.jobs.runningNow': 'Ejecutando ahora', + 'settings.cron.jobs.saving': 'Guardando…', + 'settings.cron.jobs.schedule': 'Programación', + 'settings.cron.jobs.title': 'Tareas cron del core', + 'settings.cron.jobs.viewRuns': 'Ver ejecuciones', + 'settings.localModel.deviceCapability.active': 'Activo', + 'settings.localModel.deviceCapability.appliedTier': 'Nivel aplicado', + 'settings.localModel.deviceCapability.applying': 'Aplicando', + 'settings.localModel.deviceCapability.cores': '{count}', + 'settings.localModel.deviceCapability.couldNotLoadPresets': 'No se pudieron cargar los presets', + 'settings.localModel.deviceCapability.cpu': 'CPU', + 'settings.localModel.deviceCapability.customModelIds': 'IDs de modelos personalizados', + 'settings.localModel.deviceCapability.detected': 'Detectado', + 'settings.localModel.deviceCapability.disabled': 'Desactivado', + 'settings.localModel.deviceCapability.disabledDesc': 'Descripción de desactivado', + 'settings.localModel.deviceCapability.downloadingModels': '(descargando modelos)', + 'settings.localModel.deviceCapability.downloadingSetupDesc': + 'Descargando el instalador de OllamaSetup (~2 GB) y descomprimiéndolo. Esto puede tardar un minuto en la primera instalación.', + 'settings.localModel.deviceCapability.failedToApplyPreset': 'No se pudo aplicar el preset', + 'settings.localModel.deviceCapability.gpu': 'GPU', + 'settings.localModel.deviceCapability.installFailed': 'Instalación de Ollama fallida', + 'settings.localModel.deviceCapability.installFailedDesc': + 'El instalador terminó antes de que Ollama estuviera disponible. Haz clic en reintentar o instálalo manualmente desde ollama.com.', + 'settings.localModel.deviceCapability.installFirst': 'Ejecuta Ollama primero.', + 'settings.localModel.deviceCapability.installFirstDesc': + 'Los niveles locales dependen de un endpoint de Ollama gestionado externamente. Inícialo tú mismo, descarga los modelos que quieras y sigue usando "Desactivado (respaldo en la nube)" hasta que el runtime sea accesible.', + 'settings.localModel.deviceCapability.installOllamaFirst': + 'Ejecuta Ollama primero para usar este nivel', + 'settings.localModel.deviceCapability.installingOllama': 'Instalando Ollama', + 'settings.localModel.deviceCapability.loadingDeviceInfo': 'Cargando info del dispositivo', + 'settings.localModel.deviceCapability.localAiDisabled': + 'IA local desactivada — usando respaldo en la nube.', + 'settings.localModel.deviceCapability.modelTier': 'Nivel de modelo', + 'settings.localModel.deviceCapability.needsOllama': 'Necesita Ollama', + 'settings.localModel.deviceCapability.notDetected': 'No detectado', + 'settings.localModel.deviceCapability.disabledLowercase': 'discapacitado', + 'settings.localModel.deviceCapability.presetDetails': + 'Chat: {chatModel} · Visión: {visionModel} · RAM objetivo: {targetRamGb} GB', + 'settings.localModel.deviceCapability.ram': 'RAM', + 'settings.localModel.deviceCapability.recommended': 'Recomendado', + 'settings.localModel.deviceCapability.retryInstall': 'Reintentando…', + 'settings.localModel.deviceCapability.retrying': 'Reintentando…', + 'settings.localModel.deviceCapability.starting': 'Iniciando…', + 'settings.localModel.download.audioPathPlaceholder': 'Ruta absoluta al archivo de audio', + 'settings.localModel.download.capabilityChat': 'Charla', + 'settings.localModel.download.capabilityEmbedding': 'Incrustar', + 'settings.localModel.download.capabilityAssets': 'Activos de capacidad', + 'settings.localModel.download.capabilityStt': 'STT', + 'settings.localModel.download.capabilityTts': 'TTS', + 'settings.localModel.download.capabilityVision': 'Visión', + 'settings.localModel.download.downloading': 'Descargando...', + 'settings.localModel.download.embeddingDimensions': 'Dimensiones: {dimensions}', + 'settings.localModel.download.embeddingModel': 'Modelo: {modelId}', + 'settings.localModel.download.embeddingPlaceholder': 'Una cadena de entrada por línea...', + 'settings.localModel.download.embeddingVectors': 'Vectores: {count}', + 'settings.localModel.download.noThinkMode': 'Sin modo de pensamiento', + 'settings.localModel.download.notAvailable': 'n/a', + 'settings.localModel.download.promptPlaceholder': + 'Escribe cualquier prompt y ejecútalo en el modelo local...', + 'settings.localModel.download.quantizationPref': 'Preferencia de cuantización', + 'settings.localModel.download.runEmbeddingTest': 'Ejecutando...', + 'settings.localModel.download.runPromptTest': 'Ejecutar prueba de prompt', + 'settings.localModel.download.runSummaryTest': 'Ejecutar prueba de resumen', + 'settings.localModel.download.runTranscriptionTest': 'Ejecutando...', + 'settings.localModel.download.runTtsTest': 'Ejecutando...', + 'settings.localModel.download.runVisionTest': 'Ejecutando...', + 'settings.localModel.download.running': 'Ejecutando...', + 'settings.localModel.download.runningPrompt': 'Ejecutando prompt', + 'settings.localModel.download.summaryHelper': + 'Llama a `openhuman.inference_summarize` a través del núcleo de Rust', + 'settings.localModel.download.summarizePlaceholder': + 'Pega texto para resumir con el modelo local...', + 'settings.localModel.download.testCustomPrompt': 'Probar prompt personalizado', + 'settings.localModel.download.testEmbeddings': 'Probar embeddings', + 'settings.localModel.download.testSummarization': 'Probar resumen', + 'settings.localModel.download.testVisionPrompt': 'Probar prompt de visión', + 'settings.localModel.download.testVoiceInput': 'Probar entrada de voz (STT)', + 'settings.localModel.download.testVoiceOutput': 'Probar salida de voz (TTS)', + 'settings.localModel.download.transcript': 'Transcripción:', + 'settings.localModel.download.ttsOutput': 'Salida: {outputPath}', + 'settings.localModel.download.ttsOutputPlaceholder': 'Ruta WAV de salida opcional', + 'settings.localModel.download.ttsPlaceholder': 'Ingresa texto para sintetizar...', + 'settings.localModel.download.ttsVoice': 'Voz: {voiceId}', + 'settings.localModel.download.visionImagePlaceholder': + 'Una referencia de imagen por línea (data URI, URL o marcador de ruta local)', + 'settings.localModel.download.visionPromptPlaceholder': + 'Ingresa un prompt para el modelo de visión...', + 'settings.localModel.status.allChecksPassed': 'Todas las verificaciones pasaron', + 'settings.localModel.status.artifact': 'Artefacto', + 'settings.localModel.status.backend': 'backend', + 'settings.localModel.status.binary': 'Binario', + 'settings.localModel.status.bootstrapResume': 'Bootstrap / Reanudar', + 'settings.localModel.status.checking': 'Verificando...', + 'settings.localModel.status.checkingOllama': 'Verificando Ollama', + 'settings.localModel.status.contextBelowMinimumBadge': + '{contextLength} ctx - debajo de {required} min', + 'settings.localModel.status.contextBelowMinimumTitle': + 'Rechazado: los tokens {contextLength} de la ventana de contexto están por debajo del mínimo de tokens {required} que requiere la capa de memoria. El truncamiento silencioso corrompería la recuperación.', + 'settings.localModel.status.contextOkBadge': '{contextLength}ctx ✓', + 'settings.localModel.status.contextOkTitle': + 'Los tokens {contextLength} de la ventana de contexto cumplen con el mínimo de la capa de memoria de tokens {required}.', + 'settings.localModel.status.contextUnknownBadge': 'ctx desconocido', + 'settings.localModel.status.contextUnknownTitle': + 'Ventana de contexto desconocida; No se pudo confirmar que cumpla con el mínimo de capa de memoria del token {required}.', + 'settings.localModel.status.customLocation': 'Ubicación personalizada', + 'settings.localModel.status.customLocationDesc': 'Descripción de ubicación personalizada', + 'settings.localModel.status.diagnosticsHint': + 'Haz clic en "Ejecutar diagnósticos" para verificar que Ollama está en ejecución y los modelos están instalados.', + 'settings.localModel.status.downloadingUnknown': 'Descargando (tamaño desconocido)', + 'settings.localModel.status.eta': 'ETA', + 'settings.localModel.status.expectedModels': 'Modelos esperados', + 'settings.localModel.status.expectedChat': 'Charla: {model}', + 'settings.localModel.status.expectedEmbedding': 'Incrustación: {model}', + 'settings.localModel.status.expectedVision': 'Visión: {model}', + 'settings.localModel.status.externalProcess': 'Proceso externo', + 'settings.localModel.status.forceRebootstrap': 'Forzar re-bootstrap', + 'settings.localModel.status.generationTps': 'TPS de generación', + 'settings.localModel.status.hideErrorDetails': 'Ocultar detalles del error', + 'settings.localModel.status.installManually': 'Instalar manualmente', + 'settings.localModel.status.installManuallyFrom': 'Instalar manualmente desde', + 'settings.localModel.status.installOllama': 'Iniciando…', + 'settings.localModel.status.installedModels': 'Modelos instalados', + 'settings.localModel.status.installing': 'Instalando...', + 'settings.localModel.status.installingOllama': 'Instalando runtime de Ollama...', + 'settings.localModel.status.issues': 'Problemas', + 'settings.localModel.status.issuesFound': 'Se encontraron {count} problema(s)', + 'settings.localModel.status.lastLatency': 'Última latencia', + 'settings.localModel.status.model': 'Modelo', + 'settings.localModel.status.notAvailable': 'n/a', + 'settings.localModel.status.notFound': 'No encontrado', + 'settings.localModel.status.notRunning': 'No en ejecución', + 'settings.localModel.status.ollamaBinaryPath': 'Ruta del binario de Ollama', + 'localModel.ollamaServer.helperText': 'Ejemplo: http://192.168.1.5:11434', + 'localModel.ollamaServer.label': 'URL del servidor Ollama', + 'localModel.ollamaServer.modelCount': 'modelos', + 'localModel.ollamaServer.placeholder': 'http://localhost:11434', + 'localModel.ollamaServer.reachable': 'Accesible', + 'localModel.ollamaServer.resetButton': 'Restablecer al valor predeterminado', + 'localModel.ollamaServer.saveButton': 'Guardar', + 'localModel.ollamaServer.testButton': 'Probar conexión', + 'localModel.ollamaServer.unreachable': 'No accesible', + 'localModel.ollamaServer.validationError': 'Debe ser una URL http:// o https:// válida', + 'settings.localModel.status.ollamaDiagnostics': 'Diagnósticos de Ollama', + 'settings.localModel.status.ollamaNotInstalled': 'Runtime de Ollama no disponible', + 'settings.localModel.status.ollamaNotInstalledDesc': + 'OpenHuman ahora trata Ollama como un runtime de inferencia externo. Inicia tu propio servidor Ollama, descarga los modelos que quieras y apunta el enrutado de cargas hacia él.', + 'settings.localModel.status.progress': 'Progreso', + 'settings.localModel.status.provider': 'Proveedor', + 'settings.localModel.status.retryBootstrap': 'Reintentar bootstrap', + 'settings.localModel.status.runDiagnostics': 'Verificando...', + 'settings.localModel.status.running': 'Ejecutándose', + 'settings.localModel.status.runningExternalProcess': 'Ejecutándose como proceso externo', + 'settings.localModel.status.runtimeStatus': 'Estado del runtime', + 'settings.localModel.status.server': 'Servidor', + 'settings.localModel.status.setPath': 'Configurando...', + 'settings.localModel.status.setting': 'Configurando...', + 'settings.localModel.status.showErrorDetails': 'Ocultar detalles del error', + 'settings.localModel.status.showInstallErrorDetails': 'Ocultar detalles del error', + 'settings.localModel.status.suggestedFixes': 'Correcciones sugeridas', + 'settings.localModel.status.thenSetPath': 'Luego configura la ruta', + 'settings.localModel.status.triggering': 'Activando...', + 'settings.localModel.status.unavailable': 'No disponible', + 'settings.localModel.status.working': 'Trabajando...', + 'settings.developerMenu.ai.title': 'Configuración de IA', + 'settings.developerMenu.ai.desc': + 'Proveedores en la nube, modelos locales de Ollama y enrutamiento por carga de trabajo', + 'settings.developerMenu.screenAwareness.title': 'Conciencia de pantalla', + 'settings.developerMenu.screenAwareness.desc': + 'Permisos de captura de pantalla, política de supervisión y controles de sesión', + 'settings.developerMenu.messagingChannels.title': 'Canales de mensajería', + 'settings.developerMenu.messagingChannels.desc': + 'Configura los modos de autenticación de Telegram/Discord y el enrutamiento de canal predeterminado', + 'settings.developerMenu.tools.title': 'Herramientas', + 'settings.developerMenu.tools.desc': + 'Activa o desactiva las capacidades que OpenHuman puede usar en tu nombre', + 'settings.developerMenu.agentChat.title': 'Chat del agente', + 'settings.developerMenu.agentChat.desc': + 'Prueba conversaciones del agente con ajustes de modelo y temperatura', + 'settings.developerMenu.devWorkflow.title': 'Flujo de trabajo de desarrollo', + 'settings.developerMenu.devWorkflow.desc': + 'Agente autónomo que selecciona tus problemas GitHub y genera PRs según un horario', + 'settings.developerMenu.devWorkflow.panelDesc': + 'Configura un agente desarrollador autónomo que seleccione los problemas GitHub asignados a ti y genere solicitudes de extracción automáticamente según un horario.', + 'settings.developerMenu.skillsRunner.title': 'Corredor de habilidades', + 'settings.developerMenu.skillsRunner.desc': + 'Ejecute cualquier habilidad incluida de manera ad hoc: complete sus entradas y active una ejecución autónoma en segundo plano', + 'settings.developerMenu.skillsRunner.panelDesc': + 'Elige una habilidad agrupada, completa sus entradas declaradas y ejecuta una ejecución en segundo plano de tipo fire-and-forget. Usa Dev Workflow en su lugar si quieres un trabajo recurrente programado con cron.', + 'settings.skillsRunner.skill': 'Habilidad', + 'settings.skillsRunner.selectSkill': 'Selecciona una habilidad…', + 'settings.skillsRunner.loadingSkills': 'Cargando habilidades…', + 'settings.skillsRunner.loadingDescription': 'Cargando entradas de habilidades…', + 'settings.skillsRunner.noInputs': 'Esta habilidad no declara entradas.', + 'settings.skillsRunner.placeholder.required': 'requerido', + 'settings.skillsRunner.runNow': 'Corre ahora', + 'settings.skillsRunner.starting': 'Comenzando…', + 'settings.skillsRunner.started': 'Iniciado — id de ejecución:', + 'settings.skillsRunner.logPath': 'Registro:', + 'settings.skillsRunner.error.listSkills': 'Error al cargar habilidades:', + 'settings.skillsRunner.error.describe': 'Error al cargar las entradas:', + 'settings.skillsRunner.error.missingRequired': 'Faltan datos de entrada requeridos:', + 'settings.skillsRunner.error.run': 'Error al iniciar la ejecución:', + 'settings.skillsRunner.error.preflightGate': 'La puerta de preembarque falló', + 'settings.skillsRunner.schedule.heading': 'Horario (recurrente)', + 'settings.skillsRunner.schedule.help': + 'Guarda esta habilidad + entradas como un trabajo cron recurrente. El agente llamará a run_skill en cada tick.', + 'settings.skillsRunner.schedule.frequency': 'Frecuencia', + 'settings.skillsRunner.schedule.every30min': 'Cada 30 minutos', + 'settings.skillsRunner.schedule.everyHour': 'Cada hora', + 'settings.skillsRunner.schedule.every2hours': 'Cada 2 horas', + 'settings.skillsRunner.schedule.every6hours': 'Cada 6 horas', + 'settings.skillsRunner.schedule.onceDaily': 'Una vez al día (9:00)', + 'settings.skillsRunner.schedule.save': 'Guardar horario', + 'settings.skillsRunner.schedule.saving': 'Guardando…', + 'settings.skillsRunner.schedule.saved': 'Horario guardado.', + 'settings.skillsRunner.schedule.error': 'Error al guardar el horario:', + 'settings.skillsRunner.schedule.loadingJobs': 'Cargando horarios existentes…', + 'settings.skillsRunner.schedule.noJobs': 'Aún no hay horarios guardados para esta habilidad.', + 'settings.skillsRunner.schedule.existing': 'Trabajos programados para esta habilidad:', + 'settings.skillsRunner.schedule.runNow': 'Correr', + 'settings.skillsRunner.schedule.remove': 'Eliminar', + 'settings.skillsRunner.scheduleEnabled': 'Habilitado', + 'settings.skillsRunner.scheduleDisabled': 'Pausado', + 'settings.skillsRunner.scheduleToggleAria': 'Alternar programación habilitada', + 'settings.skillsRunner.schedule.history': 'Historia', + 'settings.skillsRunner.schedule.historyLoading': 'Cargando historial…', + 'settings.skillsRunner.schedule.historyEmpty': 'Aún no hay ejecuciones para este horario.', + 'settings.skillsRunner.schedule.historyNoOutput': 'No se capturó salida.', + 'settings.skillsRunner.schedule.active': 'activo', + 'settings.skillsRunner.schedule.lastRunLabel': 'último:', + 'settings.skillsRunner.recentRuns.headingForSkill': 'Ejecuciones recientes para esta habilidad', + 'settings.skillsRunner.recentRuns.headingAll': 'Carreras de habilidades recientes (todas)', + 'settings.skillsRunner.recentRuns.refresh': 'Refrescar', + 'settings.skillsRunner.recentRuns.loading': 'Cargando carreras recientes…', + 'settings.skillsRunner.recentRuns.empty': 'No hay carreras recientes.', + 'settings.skillsRunner.viewer.loading': 'Cargando registro…', + 'settings.skillsRunner.viewer.tailing': 'Seguimiento en vivo', + 'settings.skillsRunner.viewer.fetching': 'obteniendo', + 'settings.skillsRunner.viewer.error': 'Error al leer el registro:', + 'settings.skillsRunner.repoPicker.loading': 'Cargando repositorios…', + 'settings.skillsRunner.repoPicker.select': 'Selecciona un repositorio…', + 'settings.skillsRunner.repoPicker.empty': + 'No se devolvieron repositorios. Conecta GitHub a través de Composio para llenar esta lista.', + 'settings.skillsRunner.repoPicker.notConnected': + 'GitHub no está conectado a través de Composio. Conéctalo primero en Habilidades → Composio.', + 'settings.skillsRunner.repoPicker.privateTag': '(privado)', + 'settings.skillsRunner.branchPicker.needRepo': 'Primero elige un repositorio…', + 'settings.skillsRunner.branchPicker.loading': 'Cargando ramas…', + 'settings.skillsRunner.branchPicker.select': 'Seleccione una sucursal…', + 'settings.devWorkflow.githubRepository': 'Repositorio GitHub', + 'settings.devWorkflow.loadingRepositories': 'Cargando repositorios...', + 'settings.devWorkflow.selectRepository': 'Selecciona un repositorio', + 'settings.devWorkflow.privateTag': '(privado)', + 'settings.devWorkflow.detectingForkInfo': 'Detectando información del fork...', + 'settings.devWorkflow.forkDetected': 'Bifurcación detectada', + 'settings.devWorkflow.upstream': 'Corriente arriba:', + 'settings.devWorkflow.forkPrNote': 'Se abrirán PRs contra el repositorio principal.', + 'settings.devWorkflow.notForkNote': + 'No es un fork. Los PR se harán directamente contra este repositorio.', + 'settings.devWorkflow.targetBranch': 'Rama de destino', + 'settings.devWorkflow.targetBranchNote': 'Se crearán PRs contra esta rama', + 'settings.devWorkflow.loadingBranches': 'Cargando ramas...', + 'settings.devWorkflow.runFrequency': 'Frecuencia de ejecución', + 'settings.devWorkflow.runFrequencyNote': + 'Con qué frecuencia el agente debe comprobar si hay problemas y levantar PRs.', + 'settings.devWorkflow.updateConfiguration': 'Actualizar configuración', + 'settings.devWorkflow.saveConfiguration': 'Guardar configuración', + 'settings.devWorkflow.remove': 'Eliminar', + 'settings.devWorkflow.saved': 'guardado', + 'settings.devWorkflow.activeConfiguration': 'Configuración activa', + 'settings.devWorkflow.activeConfigRepository': 'Repositorio:', + 'settings.devWorkflow.activeConfigUpstream': 'Corriente arriba:', + 'settings.devWorkflow.activeConfigTargetBranch': 'Rama destino:', + 'settings.devWorkflow.activeConfigSchedule': 'Horario:', + 'settings.devWorkflow.enabled': 'Habilitado', + 'settings.devWorkflow.paused': 'Pausado', + 'settings.devWorkflow.nextRun': 'Próxima carrera', + 'settings.devWorkflow.lastRun': 'Última ejecución', + 'settings.devWorkflow.runNow': 'Corre ahora', + 'settings.devWorkflow.running': 'Corriendo…', + 'settings.devWorkflow.recentRuns': 'Ejecuciones recientes', + 'settings.devWorkflow.cronSaveError': 'Error al guardar la configuración', + 'settings.devWorkflow.lastOutput': 'Última salida', + 'settings.devWorkflow.noOutput': 'No se capturó salida', + 'settings.devWorkflow.runningStatus': + 'El agente está en funcionamiento: seleccionando un problema y trabajando en una solución...', + 'settings.devWorkflow.errorNotConnected': + 'GitHub no está conectado. Por favor, conecte GitHub a través de Configuración > Avanzado > Composio primero.', + 'settings.devWorkflow.errorToolNotEnabled': + 'La herramienta GITHUB_LIST_REPOSITORIES_FOR_THE_AUTHENTICATED_USER no está habilitada en este backend. Por favor, pide a tu administrador que la habilite en la integración de Composio (backend#842).', + 'settings.devWorkflow.errorNotAuthenticated': 'No autenticado. Por favor, inicie sesión primero.', + 'settings.devWorkflow.errorNoRepositories': + 'No se encontraron repositorios para esta cuenta GitHub.', + 'settings.devWorkflow.schedule.every30min': 'Cada 30 minutos', + 'settings.devWorkflow.schedule.everyHour': 'Cada hora', + 'settings.devWorkflow.schedule.every2hours': 'Cada 2 horas', + 'settings.devWorkflow.schedule.every6hours': 'Cada 6 horas', + 'settings.devWorkflow.schedule.onceDaily': 'Una vez al día (9 AM)', + 'settings.developerMenu.cronJobs.title': 'Tareas cron', + 'settings.developerMenu.cronJobs.desc': + 'Ver y configurar tareas programadas para habilidades en tiempo de ejecución', + 'settings.developerMenu.localModelDebug.title': 'Depuración del modelo local', + 'settings.developerMenu.localModelDebug.desc': + 'Configuración de Ollama, descargas de recursos, pruebas de modelo y diagnósticos', + 'settings.developerMenu.webhooks.title': 'Ganchos web', + 'settings.developerMenu.webhooks.desc': + 'Inspecciona registros de webhooks en tiempo de ejecución y solicitudes capturadas', + 'settings.developerMenu.eventLog.title': 'Registro de eventos', + 'settings.developerMenu.eventLog.desc': + 'Transmisión en vivo codificada por colores de todos los eventos de agentes, herramientas y sistemas', + 'settings.developerMenu.eventLog.allTypes': 'Todos los tipos', + 'settings.developerMenu.eventLog.filterAgent': 'Filtrar...', + 'settings.developerMenu.eventLog.download': 'Descargar', + 'settings.developerMenu.eventLog.events': 'eventos', + 'settings.developerMenu.eventLog.live': 'Vivir', + 'settings.developerMenu.eventLog.disconnected': 'desconectado', + 'settings.developerMenu.eventLog.waiting': 'Esperando eventos...', + 'settings.developerMenu.eventLog.notConnected': 'No conectado al núcleo', + 'settings.developerMenu.eventLog.jumpToLatest': 'Saltar a lo más reciente', + 'settings.developerMenu.eventLog.badge.tool': 'TOOL', + 'settings.developerMenu.eventLog.badge.agent': 'AGENT', + 'settings.developerMenu.eventLog.badge.info': 'INFO', + 'settings.developerMenu.eventLog.badge.mem': 'MEM', + 'settings.developerMenu.eventLog.badge.chan': 'CHAN', + 'settings.developerMenu.eventLog.badge.cron': 'CRON', + 'settings.developerMenu.eventLog.badge.hook': 'HOOK', + 'settings.developerMenu.eventLog.badge.warn': 'WARN', + 'settings.developerMenu.eventLog.badge.skill': 'SKILL', + 'settings.developerMenu.eventLog.badge.comp': 'COMP', + 'settings.developerMenu.eventLog.badge.mcp': 'MCP', + 'settings.developerMenu.intelligence.title': 'Inteligencia', + 'settings.developerMenu.intelligence.desc': + 'Espacio de trabajo de memoria, motor subconsciente, sueños y ajustes', + 'settings.developerMenu.notificationRouting.title': 'Enrutamiento de notificaciones', + 'settings.developerMenu.notificationRouting.desc': + 'Puntuación de importancia con IA y escalado al orquestador para alertas de integración', + 'settings.developerMenu.composeioTriggers.title': 'Disparadores de ComposeIO', + 'settings.developerMenu.composeioTriggers.desc': + 'Ver historial y archivo de disparadores de ComposeIO', + 'settings.developerMenu.composioRouting.title': 'Enrutamiento de Composio (modo directo)', + 'settings.developerMenu.composioRouting.desc': + 'Usa tu propia clave API de Composio y enruta llamadas directamente a backend.composio.dev', + 'settings.developerMenu.integrationTriggers.title': 'Disparadores de integración', + 'settings.developerMenu.integrationTriggers.desc': + 'Configura los ajustes de triaje de IA para disparadores de integración de Composio', + 'settings.developerMenu.mcpServer.title': 'MCP Servidor', + 'settings.developerMenu.mcpServer.desc': + 'Configure clientes MCP externos para conectarse a OpenHuman', + 'settings.developerMenu.autonomy.title': 'Autonomía del agente', + 'settings.developerMenu.autonomy.desc': + 'Límites de frecuencia de acciones de herramientas y umbrales de seguridad', + 'settings.mcpServer.title': 'MCP Servidor', + 'settings.mcpServer.toolsSectionTitle': 'Herramientas disponibles', + 'settings.mcpServer.toolsSectionDesc': + 'Herramientas expuestas a través del servidor stdio MCP cuando se ejecuta openhuman-core mcp', + 'settings.mcpServer.configSectionTitle': 'Configuración del cliente', + 'settings.mcpServer.configSectionDesc': + 'Seleccione su cliente MCP para generar el fragmento de configuración correcto', + 'settings.mcpServer.copySnippet': 'Copiar al portapapeles', + 'settings.mcpServer.copied': '¡Copiado!', + 'settings.mcpServer.openConfigFile': 'Abrir archivo de configuración', + 'settings.mcpServer.binaryPathNotFound': + 'OpenHuman binario no encontrado. Si se ejecuta desde el código fuente, compila con: cargo build --bin openhuman-core', + 'settings.mcpServer.openConfigError': 'No se pudo abrir el archivo de configuración', + 'settings.mcpServer.clientClaudeDesktop': 'Escritorio Claude', + 'settings.mcpServer.clientCursor': 'Cursor', + 'settings.mcpServer.clientCodex': 'Códice', + 'settings.mcpServer.clientZed': 'Zed', + 'settings.mcpServer.configFilePath': 'Archivo de configuración', + 'settings.mcpServer.clientSelectorAriaLabel': 'MCP selector de cliente', + 'settings.appearance.menuDesc': 'Elige claro, oscuro o igualar el tema del sistema', + 'settings.agentAccess.title': 'Acceso del agente al sistema operativo', + 'settings.agentAccess.menuDesc': + 'Controla dónde el agente puede read/write y si puede usar la consola.', + 'settings.agentAccess.loadError': 'Error al cargar la configuración de acceso', + 'settings.agentAccess.saveError': 'Error al guardar la configuración de acceso', + 'settings.agentAccess.saved': 'Guardado — se aplica en tu próximo mensaje.', + 'settings.agentAccess.desktopOnly': + 'La configuración de acceso solo está disponible en la aplicación de escritorio.', + 'settings.agentAccess.loading': 'Cargando…', + 'settings.agentAccess.accessMode': 'Modo de acceso', + 'settings.agentAccess.tier.readonly.title': 'Solo lectura', + 'settings.agentAccess.tier.readonly.desc': + 'Lee archivos y ejecuta comandos de solo lectura para explorar, pero nunca escribe, edita ni ejecuta nada que cambie el estado.', + 'settings.agentAccess.tier.supervised.title': 'Pregunta antes de editar', + 'settings.agentAccess.tier.supervised.desc': + 'Crea nuevos archivos libremente, pero solicita su aprobación antes de editar un archivo existente, ejecutar un comando, acceder a la red o instalar algo.', + 'settings.agentAccess.tier.full.title': 'Acceso completo', + 'settings.agentAccess.tier.full.desc': + 'Ejecuta comandos con acceso completo de tu cuenta de usuario: puede read/write en cualquier lugar permitido, excepto en los almacenes de credenciales y del sistema. Los comandos destructivos, el acceso a la red y las instalaciones aún requieren aprobación.', + 'settings.agentAccess.defaultTag': '(predeterminado)', + 'settings.agentAccess.fullWarning': + '⚠ El acceso completo ejecuta comandos con el acceso total de tu cuenta y no está en un entorno aislado. Solo actívalo cuando confíes en el agente con esta máquina. Los directorios de credenciales y del sistema siguen bloqueados, y las acciones destructivas, de red e instalación aún requieren aprobación.', + 'settings.agentAccess.confine.label': 'Restringir al espacio de trabajo', + 'settings.agentAccess.confine.desc': + 'Restringe al agente al directorio de trabajo (más cualquier carpeta concedida), sea cual sea el modo de acceso seleccionado. Cuando está desactivado, puede acceder a cualquier lugar al que pueda acceder tu usuario, excepto a los directorios de credenciales y del sistema que siempre están bloqueados.', + 'settings.agentAccess.requireTaskPlanApproval.label': 'Requerir la aprobación del plan de tareas', + 'settings.agentAccess.requireTaskPlanApproval.desc': + 'Pausa antes de que un agente asignado ejecute un breve tarea elaborada por el agente.', + 'settings.agentAccess.grantedFolders': 'Carpetas concedidas', + 'settings.agentAccess.alwaysAllow': 'Herramientas siempre permitidas', + 'settings.agentAccess.alwaysAllowDesc': + 'Las herramientas que marcaste como "Permitir siempre" en el chat se ejecutan sin pedir permiso. Elimina una para que se te pregunte nuevamente.', + 'settings.agentAccess.alwaysAllowNone': 'Aún no hay herramientas siempre permitidas.', + 'settings.agentAccess.grantedDesc': + 'Carpetas que el agente puede leer y escribir, además del espacio de trabajo. Los almacenes de credenciales (~/.ssh, ~/.gnupg, ~/.aws, llaveros) y los directorios del sistema (/etc, /System, C:\\Windows,…) siempre están bloqueados, incluso dentro de una carpeta concedida.', + 'settings.agentAccess.noneGranted': 'No se otorgaron carpetas.', + 'settings.agentAccess.readWrite': 'leer + escribir', + 'settings.agentAccess.readOnly': 'solo lectura', + 'settings.agentAccess.remove': 'Eliminar', + 'settings.agentAccess.pathPlaceholder': 'Ruta absoluta de la carpeta', + 'settings.agentAccess.accessLevelLabel': 'Nivel de acceso', + 'settings.agentAccess.add': 'Añadir', + 'settings.agentAccess.saving': 'Guardando…', + 'settings.agentAccess.changesApply': 'Los cambios se aplican en tu próximo mensaje.', + 'settings.appearance.title': 'Apariencia', + 'settings.appearance.themeHeading': 'Tema', + 'settings.appearance.themeAria': 'Tema', + 'settings.appearance.modeLight': 'Luz', + 'settings.appearance.modeLightDesc': 'Superficies brillantes, texto oscuro.', + 'settings.appearance.modeDark': 'oscuro', + 'settings.appearance.modeDarkDesc': + 'Las superficies oscuras son más agradables a la vista después del anochecer.', + 'settings.appearance.modeSystem': 'Sistema de partidos', + 'settings.appearance.modeSystemDesc': + 'Siga la configuración de apariencia de su sistema operativo.', + 'settings.appearance.helperText': + 'El modo oscuro cambia toda la aplicación (chat, configuración, paneles) a una paleta tenue. El "sistema de coincidencias" sigue la apariencia de su sistema operativo y se actualiza en vivo.', + 'settings.appearance.tabBarHeading': 'Barra de pestañas inferior', + 'settings.appearance.tabBarAlwaysShowLabels': 'Mostrar siempre etiquetas', + 'settings.appearance.tabBarAlwaysShowLabelsDesc': + 'Cuando está desactivado, las etiquetas solo aparecen al pasar el mouse o para la pestaña activa.', + 'settings.mascot.active': 'Activo', + 'settings.mascot.characterDesc': 'Descripción del personaje', + 'settings.mascot.characterHeading': 'Encabezado del personaje', + 'settings.mascot.customGifError': + 'Introduzca una ruta HTTPS .gif URL, loopback HTTP .gif URL, file:// .gif URL o ruta .gif local.', + 'settings.mascot.customGifHeading': 'Avatar GIF personalizado', + 'settings.mascot.customGifLabel': 'Avatar GIF personalizado URL', + 'settings.mascot.customGifPlaceholder': 'https://example.com/avatar.gif', + 'settings.mascot.characterPreview': 'Vista previa', + 'settings.mascot.characterStates': 'estados', + 'settings.mascot.characterVisemes': 'visemas', + 'settings.mascot.colorAria': 'color OpenHuman', + 'settings.mascot.colorDesc': 'Descripción del color', + 'settings.mascot.colorHeading': 'Encabezado del color', + 'settings.mascot.colorBlack': 'negro', + 'settings.mascot.colorBurgundy': 'Borgoña', + 'settings.mascot.colorCustom': 'Personalizado', + 'settings.mascot.colorNavy': 'Marina', + 'settings.mascot.primaryColor': 'Color primario', + 'settings.mascot.secondaryColor': 'Color secundario', + 'settings.mascot.colorYellow': 'amarillo', + 'settings.mascot.libraryUnavailable': 'Biblioteca OpenHuman no disponible', + 'settings.mascot.title': 'OpenHuman', + 'settings.mascot.loadingLibrary': 'Cargando biblioteca de OpenHuman…', + 'settings.mascot.loadDetailError': 'No se pudo cargar la mascota.', + 'settings.mascot.loadLibraryError': 'No se pudo cargar la biblioteca de mascotas.', + 'settings.mascot.localDefault': 'OpenHuman local (predeterminado)', + 'settings.mascot.menuTitle': 'Mascota', + 'settings.mascot.menuDesc': 'Elige el color de la mascota usado en toda la app', + 'settings.mascot.noCharacters': 'Aún no hay personajes de OpenHuman disponibles', + 'settings.mascot.noColorVariants': 'Sin variantes de color', + 'settings.mascot.voice.current': 'actual', + 'settings.mascot.voice.customDesc': + 'Encuentra los ID de voz en api.elevenlabs.io/v1/voices o en tu panel de ElevenLabs. Solo se almacena el ID — tu clave de API permanece en el backend.', + 'settings.mascot.voice.customHeading': 'ID de voz personalizado', + 'settings.mascot.voice.customOption': 'Otro (pegar ID de voz)…', + 'settings.mascot.voice.customPlaceholder': 'por ej. 21m00Tcm4TlvDq8ikWAM', + 'settings.mascot.voice.desc': + 'Elige la voz de ElevenLabs que la mascota usa para las respuestas habladas. Filtra por género, elige de la lista curada, pega un ID personalizado, o deja que la app elija una voz que coincida con el idioma de la interfaz.', + 'settings.mascot.voice.genderFemale': 'Femenino', + 'settings.mascot.voice.genderHeading': 'Género de la voz', + 'settings.mascot.voice.genderMale': 'Masculino', + 'settings.mascot.voice.heading': 'Voz', + 'settings.mascot.voice.preset': 'Preajuste de voz', + 'settings.mascot.voice.presetHeading': 'Preajuste de voz', + 'settings.mascot.voice.preview': 'Vista previa de voz', + 'settings.mascot.voice.previewError': 'Falló la vista previa de voz', + 'settings.mascot.voice.previewText': 'Hola, soy tu asistente. Esta es una vista previa de voz.', + 'settings.mascot.voice.previewing': 'Reproduciendo vista previa…', + 'settings.mascot.voice.reset': 'Restablecer al predeterminado', + 'settings.mascot.voice.useLocaleDefault': 'Coincidir con el idioma de la app', + 'settings.mascot.voice.useLocaleDefaultDesc': + 'Elegir automáticamente una voz para el idioma de la interfaz actual.', + 'settings.persona.title': 'Persona', + 'settings.persona.menuTitle': 'Persona', + 'settings.persona.menuDesc': + 'Nombre, personalidad, avatar y voz: tu asistente como una sola identidad', + 'settings.persona.identityHeading': 'Identidad', + 'settings.persona.identityDesc': + 'Un nombre para mostrar y una breve descripción de tu asistente. Se muestra en la aplicación; no cambia la forma en que el asistente razona.', + 'settings.persona.displayNameLabel': 'Nombre para mostrar', + 'settings.persona.displayNamePlaceholder': 'p. ej. Nova', + 'settings.persona.descriptionLabel': 'Descripción', + 'settings.persona.descriptionPlaceholder': + 'por ejemplo, un asistente tranquilo y conciso para mi equipo.', + 'settings.persona.soul.heading': 'Personalidad (SOUL.md)', + 'settings.persona.soul.desc': + 'La personalidad que el asistente sigue en cada conversación. Las ediciones se guardan en tu espacio de trabajo y se aplican en la próxima respuesta.', + 'settings.persona.soul.editorLabel': 'contenido de SOUL.md', + 'settings.persona.soul.reset': 'Restablecer a predeterminado', + 'settings.persona.soul.usingDefault': 'Usando el predeterminado incluido', + 'settings.persona.soul.loadError': 'No se pudo cargar SOUL.md', + 'settings.persona.soul.saveError': 'No se pudo guardar SOUL.md', + 'settings.persona.soul.resetError': 'No se pudo restablecer SOUL.md', + 'settings.persona.appearanceHeading': 'Avatar y Voz', + 'settings.persona.appearanceDesc': + 'El color de la mascota, el avatar personalizado GIF y la voz de respuesta se configuran en los ajustes de la mascota.', + 'settings.persona.openMascotSettings': 'Abrir la configuración de Mascota', + 'settings.memoryWindow.balanced.badge': 'Recomendado', + 'settings.memoryWindow.balanced.hint': + 'Predeterminado sensato — buena continuidad sin quemar tokens extra en cada ejecución.', + 'settings.memoryWindow.balanced.label': 'Equilibrado', + 'settings.memoryWindow.description': + 'Cuánto contexto recordado inyecta OpenHuman en cada nueva ejecución del agente. Ventanas más grandes parecen más conscientes de conversaciones pasadas, pero usan más tokens — y cuestan más — en cada ejecución.', + 'settings.memoryWindow.extended.badge': 'Más contexto', + 'settings.memoryWindow.extended.hint': + 'Más memoria a largo plazo inyectada en cada ejecución. Mayor coste de tokens por turno.', + 'settings.memoryWindow.extended.label': 'Extendido', + 'settings.memoryWindow.maximum.badge': 'Mayor coste', + 'settings.memoryWindow.maximum.hint': + 'La ventana segura más grande. Mejor continuidad, factura de tokens significativamente mayor en cada ejecución.', + 'settings.memoryWindow.maximum.label': 'Máximo', + 'settings.memoryWindow.minimal.badge': 'Más barato', + 'settings.memoryWindow.minimal.hint': + 'Ventana de memoria más pequeña. La más barata, rápida y con menor continuidad entre ejecuciones.', + 'settings.memoryWindow.minimal.label': 'Mínimo', + 'settings.memoryWindow.title': 'Ventana de memoria a largo plazo', + 'settings.modelHealth.title': 'Salud del modelo', + 'settings.modelHealth.desc': + 'Comparación por modelo de calidad, tasa de alucinaciones y costo entre los modelos activos', + 'settings.modelHealth.allStatuses': 'Todos los estados', + 'settings.modelHealth.models': 'modelos', + 'settings.modelHealth.loading': 'Cargando datos del modelo...', + 'settings.modelHealth.empty': 'No hay modelos registrados', + 'settings.modelHealth.col.model': 'Modelo', + 'settings.modelHealth.col.quality': 'Calidad', + 'settings.modelHealth.col.halluc': 'Tasa de alucinación', + 'settings.modelHealth.col.cost': 'Costo / 1M salido', + 'settings.modelHealth.col.agents': 'Agentes', + 'settings.modelHealth.col.status': 'Estado', + 'settings.modelHealth.badge.keep': 'Mantener', + 'settings.modelHealth.badge.replace': 'Reemplazar', + 'settings.modelHealth.badge.staging': 'Prueba de preparación', + 'settings.modelHealth.badge.vision': 'Solo visión', + 'settings.modelHealth.swap': '¿Intercambiar?', + 'settings.modelHealth.modal.title': '¿Reemplazar modelo?', + 'settings.modelHealth.modal.hallucRate': 'Tasa de alucinación', + 'settings.modelHealth.modal.cancel': 'Cancelar', + 'settings.modelHealth.modal.apply': 'Aplicar reemplazo', + 'settings.modelHealth.tag.cheaper': 'CHEAPER', + 'settings.modelHealth.tag.better': 'BETTER', + 'settings.screenIntel.permissions.accessibility': 'Accesibilidad', + 'settings.screenIntel.permissions.grantHint': 'Sugerencia de permiso', + 'settings.screenIntel.permissions.inputMonitoring': 'Monitoreo de entrada', + 'settings.screenIntel.permissions.macosAppliesPrivacy': 'macOS aplica privacidad', + 'settings.screenIntel.permissions.openInputMonitoring': 'Solicitando…', + 'settings.screenIntel.permissions.refreshStatus': 'Actualizando…', + 'settings.screenIntel.permissions.refreshing': 'Actualizando…', + 'settings.screenIntel.permissions.requestAccessibility': 'Solicitando…', + 'settings.screenIntel.permissions.requestScreenRecording': 'Solicitando…', + 'settings.screenIntel.permissions.requesting': 'Solicitando…', + 'settings.screenIntel.permissions.restartRefresh': 'Reiniciando core…', + 'settings.screenIntel.permissions.restartingCore': 'Reiniciando core…', + 'settings.screenIntel.permissions.screenRecording': 'Grabación de pantalla', + 'settings.screenIntel.permissions.title': 'Permisos', + 'skills.card.moreActions': 'Más acciones', + 'skills.channelIcon.discord': 'Discord', + 'skills.channelIcon.imessage': 'iMessage', + 'skills.channelIcon.telegram': 'Telegram', + 'skills.channelIcon.web': 'Web', + 'skills.channelIcon.yuanbao': 'Yuanbao', + 'skills.composio.poweredBy': 'Desarrollado por Composio', + 'skills.composio.staleStatusTitle': 'Las conexiones muestran un estado obsoleto', + 'skills.create.allowedTools': 'Herramientas permitidas', + 'skills.create.allowedToolsHelp': 'Representado en el frontmatter de SKILL.md como', + 'skills.create.allowedToolsPlaceholder': 'node_exec, buscar', + 'skills.create.author': 'Autor', + 'skills.create.authorPlaceholder': 'Tu nombre', + 'skills.create.commaSeparated': '(separado por comas)', + 'skills.create.createBtn': 'Crear habilidad', + 'skills.create.createError': 'No se pudo crear el skill', + 'skills.create.creating': 'Creando…', + 'skills.create.description': 'Descripción', + 'skills.create.descriptionPlaceholder': '¿Qué hace este skill?', + 'skills.create.optional': '(opcional)', + 'skills.create.inputs.heading': 'Inputs', + 'skills.create.inputs.help': + 'Declara los parámetros que necesita la habilidad. El ejecutor de habilidades mostrará un formulario para estos en tiempo de ejecución.', + 'skills.create.inputs.add': 'Agregar entrada', + 'skills.create.inputs.row.name': 'Nombre de la entrada', + 'skills.create.inputs.row.namePlaceholder': 'p. ej., repo', + 'skills.create.inputs.row.nameError': + 'Solo letras, dígitos, guiones bajos y guiones; debe comenzar con una letra.', + 'skills.create.inputs.row.description': 'Descripción de la entrada', + 'skills.create.inputs.row.descriptionPlaceholder': '¿Qué va en este campo?', + 'skills.create.inputs.row.type': 'Type', + 'skills.create.inputs.row.required': 'Required', + 'skills.create.inputs.row.remove': 'Eliminar entrada', + 'skills.create.inputs.type.string': 'Text', + 'skills.create.inputs.type.integer': 'Number', + 'skills.create.inputs.type.boolean': 'Sí / No', + 'skills.create.license': 'Licencia', + 'skills.create.licensePlaceholder': 'MIT', + 'skills.create.name': 'Nombre', + 'skills.create.namePlaceholder': 'p. ej. Trade Journal', + 'skills.create.scope': 'Alcance', + 'skills.create.scopeProjectHint': '/.openhuman/habilidades/', + 'skills.create.scopeUserHint': + 'Se escribe en ~/.openhuman/skills//SKILL.md — disponible en todos los espacios de trabajo.', + 'skills.create.slugLabel': 'Etiqueta de slug', + 'skills.create.subtitle': 'HABILIDAD.md', + 'skills.create.tags': 'Etiquetas', + 'skills.create.tagsPlaceholder': 'comercio, investigación', + 'skills.create.title': 'Nueva habilidad', + 'skills.detail.allowedTools': 'Herramientas permitidas', + 'skills.detail.author': 'Autor', + 'skills.detail.bundledResources': 'Recursos incluidos', + 'skills.detail.closeAriaLabel': 'Cerrar detalles del skill', + 'skills.detail.location': 'Ubicación', + 'skills.detail.noBundledResources': 'Sin recursos incluidos.', + 'skills.detail.tags': 'Etiquetas', + 'skills.detail.warnings': 'Advertencias', + 'skills.install.errors.alreadyInstalledHint': + 'Ya existe una habilidad con esta babosa en el espacio de trabajo. Elimínelo primero o cambie el frontmatter `metadata.id`/`name`.', + 'skills.install.errors.alreadyInstalledTitle': 'Habilidad ya instalada', + 'skills.install.errors.fetchFailedHint': + 'La solicitud no se completó correctamente. Verifique que URL apunte a un archivo público accesible y que el host haya devuelto una respuesta 2xx.', + 'skills.install.errors.fetchFailedTitle': 'Error de recuperación', + 'skills.install.errors.fetchTimedOutHint': + 'El host remoto no respondió a tiempo. Inténtelo de nuevo o aumente el tiempo de espera (1-600 s).', + 'skills.install.errors.fetchTimedOutTitle': 'Se agotó el tiempo de recuperación', + 'skills.install.errors.fetchTooLargeHint': + 'SKILL.md debe tener menos de 1 MiB. Divida los recursos empaquetados en archivos `references/` o `scripts/` en lugar de insertarlos.', + 'skills.install.errors.fetchTooLargeTitle': 'SKILL.md demasiado grande', + 'skills.install.errors.genericHint': + 'El servidor devolvió un error. El mensaje sin formato se muestra a continuación.', + 'skills.install.errors.genericTitle': 'No se pudo instalar la habilidad', + 'skills.install.errors.invalidSkillHint': + 'El frontmatter debe ser YAML válido con campos `nombre` y `descripción` no vacíos, terminados en `---`.', + 'skills.install.errors.invalidSkillTitle': 'SKILL.md no analizó', + 'skills.install.errors.invalidUrlHint': + 'Solo se permiten HTTPS URLs públicos. Los hosts privados, de bucle invertido y de metadatos están bloqueados.', + 'skills.install.errors.invalidUrlTitle': 'URL rechazado', + 'skills.install.errors.unsupportedUrlHint': + 'Sólo funcionan los enlaces directos `.md`. Para GitHub, enlace a un archivo (github.com/owner/repo/blob/.../SKILL.md): las raíces del árbol y del repositorio no están instaladas.', + 'skills.install.errors.unsupportedUrlTitle': 'Formulario URL no compatible', + 'skills.install.errors.writeFailedHint': + 'No se podía escribir en el directorio de habilidades del espacio de trabajo. Verifique los permisos del sistema de archivos para `/.openhuman/skills/`.', + 'skills.install.errors.writeFailedTitle': 'No se pudo escribir SKILL.md', + 'skills.install.fetchLog': 'Obtener registro', + 'skills.install.fetchingPrefix': 'buscando', + 'skills.install.fetchingSuffix': + 'esto puede tardar hasta el tiempo de espera que haya configurado.', + 'skills.install.installBtn': 'Instalando…', + 'skills.install.installComplete': 'Instalación completa', + 'skills.install.installing': 'Instalando…', + 'skills.install.parseWarnings': 'Advertencias de análisis', + 'skills.install.rawError': 'Error sin procesar', + 'skills.install.subtitleMiddle': 'sobre HTTPS y lo instala bajo', + 'skills.install.subtitlePrefix': 'Obtiene un solo', + 'skills.install.subtitleSuffix': + 'HTTPS solamente; Los hosts privados y de loopback están bloqueados.', + 'skills.install.successDiscovered': 'Descubrí {count} nuevas habilidades.', + 'skills.install.successNoNewIds': + 'Habilidad instalada, pero no aparecieron nuevos identificadores de habilidad; es posible que el catálogo ya contenga una habilidad con el mismo slug.', + 'skills.install.timeoutHint': '(segundos, opcional)', + 'skills.install.timeoutHelp': + 'El valor predeterminado es 60 segundos. Los valores fuera de 1-600 se bloquean en el lado del servidor.', + 'skills.install.timeoutInvalid': 'Debe ser un número entero entre 1 y 600.', + 'skills.install.timeoutLabel': 'Etiqueta de tiempo límite', + 'skills.install.timeoutPlaceholder': '60', + 'skills.install.title': 'Instalar habilidad desde URL', + 'skills.install.urlHelpMiddle': 'archivo.', + 'skills.install.urlHelpPrefix': 'Enlace directo a un', + 'skills.install.urlHelpSuffix': 'URLs reescritura automática a', + 'skills.install.urlInvalidPrefix': 'URL debe ser un bien formado', + 'skills.install.urlInvalidSuffix': 'enlace.', + 'skills.install.urlLabel': 'URL de la habilidad', + 'skills.install.urlPlaceholder': 'https://raw.githubusercontent.com/owner/repo/main/SKILL.md', + 'skills.meetingBots.bannerDesc': 'Descripción del banner', + 'skills.meetingBots.bannerTitle': 'Título del banner', + 'skills.meetingBots.busyTitle': 'OpenHuman está ocupado', + 'skills.meetingBots.comingSoon': 'Próximamente', + 'skills.meetingBots.couldNotStartTitle': 'No se pudo iniciar OpenHuman', + 'skills.meetingBots.displayName': 'Nombre de visualización', + 'skills.meetingBots.failedToStart': 'No se pudo iniciar OpenHuman.', + 'skills.meetingBots.joiningMessage': 'Debería aparecer como participante en unos segundos.', + 'skills.meetingBots.joiningTitle': 'OpenHuman se está uniendo a la reunión', + 'skills.meetingBots.meetingLink': 'Enlace de la reunión', + 'skills.meetingBots.modalAriaLabel': 'Enviar OpenHuman a una reunión', + 'skills.meetingBots.modalDesc': 'Descripción del modal', + 'skills.meetingBots.modalTitle': 'Enviar OpenHuman a una reunión', + 'skills.meetingBots.newBadge': 'Nuevo', + 'skills.meetingBots.platformComingSoon': 'El soporte de {label} llegará pronto.', + 'skills.meetingBots.platformHints.gmeet': 'meet.google.com/abc-defg-hij', + 'skills.meetingBots.platformHints.teams': 'equipos.microsoft.com/...', + 'skills.meetingBots.platformHints.zoom': 'zoom.us/j/...', + 'skills.meetingBots.platforms.gmeet': 'Google Conocer', + 'skills.meetingBots.platforms.teams': 'Equipos de Microsoft', + 'skills.meetingBots.platforms.zoom': 'Ampliar', + 'skills.meetingBots.sendTo': 'Enviar a', + 'skills.meetingBots.soonSuffix': 'pronto', + 'skills.meetingBots.starting': 'Iniciando…', + 'skills.resource.preview.closeAriaLabel': 'Cerrar vista previa', + 'skills.resource.preview.failed': 'Vista previa fallida', + 'skills.resource.preview.loading': 'Cargando vista previa…', + 'skills.resource.tree.empty': 'Sin recursos incluidos.', + 'skills.search.placeholder': 'Marcador de posición', + 'skills.setup.autocomplete.acceptKey': 'Tecla de aceptación', + 'skills.setup.autocomplete.activeDesc': 'Descripción activa', + 'skills.setup.autocomplete.activeTitle': 'Autocompletado está activo', + 'skills.setup.autocomplete.customizeSettings': 'Personalizar configuración', + 'skills.setup.autocomplete.debounce': 'rebote', + 'skills.setup.autocomplete.description': 'Descripción', + 'skills.setup.autocomplete.enableBtn': 'Activando...', + 'skills.setup.autocomplete.enableError': 'No se pudo activar el autocompletado', + 'skills.setup.autocomplete.enabling': 'Activando...', + 'skills.setup.autocomplete.notSupported': 'No compatible', + 'skills.setup.autocomplete.stepEnable': 'Activar completados en línea', + 'skills.setup.autocomplete.stepSuccess': 'Listo para usar', + 'skills.setup.autocomplete.stylePreset': 'Estilo predeterminado', + 'skills.setup.autocomplete.stylePresetValue': 'Equilibrado (configurable después)', + 'skills.setup.autocomplete.title': 'Autocompletado de texto', + 'skills.setup.screenIntel.activeDesc': 'Descripción activa', + 'skills.setup.screenIntel.activeTitle': 'Inteligencia de pantalla está activada', + 'skills.setup.screenIntel.advancedSettings': 'Configuración avanzada', + 'skills.setup.screenIntel.allGranted': 'Todos los permisos otorgados', + 'skills.setup.screenIntel.captureMode': 'Modo de captura', + 'skills.setup.screenIntel.captureModeValue': 'Todas las ventanas (configurable después)', + 'skills.setup.screenIntel.deniedHint': + 'Después de otorgar permisos en Configuración del sistema, haz clic abajo para reiniciar y aplicar los cambios.', + 'skills.setup.screenIntel.enableBtn': 'Activando...', + 'skills.setup.screenIntel.enableDesc': 's en tu pantalla y añade contexto útil a tu agente', + 'skills.setup.screenIntel.enableError': 'No se pudo activar la Inteligencia de pantalla', + 'skills.setup.screenIntel.enabling': 'Activando...', + 'skills.setup.screenIntel.grant': 'Abriendo...', + 'skills.setup.screenIntel.granted': 'Otorgado', + 'skills.setup.screenIntel.macosOnly': 'Solo macOS', + 'skills.setup.screenIntel.opening': 'Abriendo...', + 'skills.setup.screenIntel.panicHotkey': 'Tecla de pánico', + 'skills.setup.screenIntel.permAccessibility': 'Accesibilidad', + 'skills.setup.screenIntel.permInputMonitoring': 'Monitoreo de entrada', + 'skills.setup.screenIntel.permScreenRecording': 'Grabación de pantalla', + 'skills.setup.screenIntel.permissionsDesc': 'Descripción de permisos', + 'skills.setup.screenIntel.permissionPathLabel': 'macOS aplica la privacidad a:', + 'skills.setup.screenIntel.refreshStatus': 'Actualizar estado', + 'skills.setup.screenIntel.restartRefresh': 'Reiniciando...', + 'skills.setup.screenIntel.restarting': 'Reiniciando...', + 'skills.setup.screenIntel.stepEnable': 'Activar el skill', + 'skills.setup.screenIntel.stepPermissions': 'Otorgar permisos', + 'skills.setup.screenIntel.stepSuccess': 'Listo para usar', + 'skills.setup.screenIntel.title': 'Inteligencia de pantalla', + 'skills.setup.screenIntel.visionModel': 'Modelo de visión', + 'skills.setup.voice.activation': 'Activación', + 'skills.setup.voice.activeDescPrefix': 'fn', + 'skills.setup.voice.activeDescSuffix': 'fn', + 'skills.setup.voice.activeTitle': 'Inteligencia de voz está activa', + 'skills.setup.voice.customizeSettings': 'Personalizar configuración', + 'skills.setup.voice.downloadSttBtn': 'Descargar modelo STT', + 'skills.setup.voice.enableDesc': 'Descripción de activación', + 'skills.setup.voice.hotkey': 'Tecla de acceso rápido', + 'skills.setup.voice.startBtn': 'Iniciando...', + 'skills.setup.voice.startError': 'No se pudo iniciar el servidor de voz', + 'skills.setup.voice.starting': 'Iniciando...', + 'skills.setup.voice.stepEnable': 'Iniciar servidor de voz', + 'skills.setup.voice.stepSetup': 'Se requiere descarga del modelo', + 'skills.setup.voice.stepSuccess': 'Listo para usar', + 'skills.setup.voice.sttNotReady': 'Modelo de voz a texto no listo', + 'skills.setup.voice.sttNotReadyDesc': + 'La Inteligencia de voz requiere un modelo local de Whisper para transcripción. Descárgalo desde la configuración de Modelo local.', + 'skills.setup.voice.sttReady': 'Modelo de voz a texto listo', + 'skills.setup.voice.sttReturnHint': 'Sugerencia de retorno STT', + 'skills.setup.voice.title': 'Inteligencia de voz', + 'skills.uninstall.couldNotUninstall': 'No se pudo desinstalar', + 'skills.uninstall.description': + 'Esto elimina permanentemente el directorio de la habilidad y todos sus recursos incluidos. El agente dejará de verlo en el próximo turno.', + 'skills.uninstall.title': 'Desinstalar', + 'skills.uninstall.uninstallBtn': 'Desinstalar', + 'skills.uninstall.uninstalling': 'Desinstalando…', + 'upsell.global.limitMessage': 'Mejora tu plan o recarga créditos para continuar', + 'upsell.global.limitTitle': 'Tú', + 'upsell.global.nearLimitMessage': + 'Has usado el {pct}% de tu límite de uso. Mejora el plan para límites más altos.', + 'upsell.global.nearLimitTitle': 'Acercándote al límite de uso', + 'upsell.usageLimit.bodyBudget': + 'Has alcanzado tu límite semanal.{reset} Mejora tu plan o recarga créditos para evitar límites.', + 'upsell.usageLimit.bodyRate': + 'Has alcanzado tu límite de inferencia de 10 horas.{reset} Mejora para obtener límites más altos.', + 'upsell.usageLimit.heading': 'Límite de uso alcanzado', + 'upsell.usageLimit.notNow': 'Ahora no', + 'upsell.usageLimit.perWindow': '{amount}', + 'upsell.usageLimit.planIncludes': '{plan}', + 'upsell.usageLimit.resetsIn': 'Se restablece {time}.', + 'upsell.usageLimit.upgradePlan': 'Mejorar plan', + 'upsell.usageLimit.weeklyInference': '{amount}', + 'walkthrough.tooltip.letsGo': '¡Vamos!', + 'walkthrough.tooltip.next': 'Siguiente →', + 'walkthrough.tooltip.skip': 'Omitir tour', + 'walkthrough.tooltip.stepCounter': '{n} de {total}', + 'webhooks.activity.empty': 'Vacío', + 'webhooks.activity.title': 'Actividad reciente', + 'webhooks.composioHistory.empty': 'Vacío', + 'webhooks.composioHistory.metadataId': 'ID de metadatos', + 'webhooks.composioHistory.metadataUuid': 'UUID de metadatos', + 'webhooks.composioHistory.payload': 'Carga útil', + 'webhooks.composioHistory.title': 'Historial de disparadores de Composio', + 'webhooks.tunnels.active': 'Activo', + 'webhooks.tunnels.createFailed': 'No se pudo crear el túnel', + 'webhooks.tunnels.creating': 'Creando...', + 'webhooks.tunnels.deleteFailed': 'No se pudo eliminar el túnel', + 'webhooks.tunnels.descriptionPlaceholder': 'Descripción (opcional)', + 'webhooks.tunnels.echo': 'eco', + 'webhooks.tunnels.empty': 'Vacío', + 'webhooks.tunnels.enableEcho': 'Activar echo', + 'webhooks.tunnels.inactive': 'Inactivo', + 'webhooks.tunnels.namePlaceholder': 'Nombre del túnel (p. ej. telegram-bot)', + 'webhooks.tunnels.newTunnel': 'Nuevo túnel', + 'webhooks.tunnels.removeEcho': 'Eliminar echo', + 'webhooks.tunnels.title': 'Túneles de webhook', + 'webhooks.tunnels.toggleFailed': 'No se pudo alternar el echo', + 'composio.directModeRequiresKey': + 'Error al guardar. El modo Directo requiere una clave API no vacía.', + 'composio.integrationSlugsHelp': 'Slugs de integración separados por comas, p.', + 'composio.integrationSlugsExample': 'gmail, flojo', + 'composio.integrationSlugsCaseInsensitive': 'No distingue entre mayúsculas y minúsculas.', + 'composio.integrationSlugsPlaceholder': 'gmail, holgura, ...', + 'composio.notYetRouted': 'aún sin enrutar', + 'composio.triggers.loading': 'Cargando…', + 'conversations.taskKanban.todo': 'Pendiente', + 'chat.addReaction': 'Añadir reacción', + 'chat.agentProfile.create': 'Crear perfil de agente', + 'chat.agentProfile.createFailed': 'No se pudo crear el perfil del agente.', + 'chat.agentProfile.customDescription': 'Perfil de agente personalizado', + 'chat.agentProfile.defaultAgentLabel': 'orquestador', + 'chat.agentProfile.exists': 'El perfil del agente "{name}" ya existe.', + 'chat.agentProfile.label': 'Perfil del agente', + 'chat.agentProfile.namePlaceholder': 'Nombre del perfil', + 'chat.agentProfile.promptStylePlaceholder': 'estilo rápido', + 'chat.agentProfile.allowedToolsPlaceholder': 'Herramientas permitidas', + 'chat.backToThread': 'volver a {title}', + 'chat.parentThread': 'hilo principal', + 'chat.removeReaction': 'Quitar {emoji}', + 'settings.composio.loading': 'Cargando…', + 'settings.mascot.noCharactersAvailable': 'Aún no hay personajes de OpenHuman disponibles', + 'skills.uninstall.confirmTitle': '¿Desinstalar {name}?', + 'conversations.taskKanban.blocked': 'Bloqueado', + 'conversations.taskKanban.done': 'Completado', + 'conversations.taskKanban.pending': 'Pendiente', + 'conversations.taskKanban.working': 'Laboral', + 'conversations.taskKanban.awaitingApproval': 'En espera de aprobación', + 'conversations.taskKanban.ready': 'Listo', + 'conversations.taskKanban.rejected': 'Rechazado', + 'conversations.taskKanban.inProgress': 'En progreso', + 'intelligence.memoryChunk.detail.copiedHint': 'copiado', + 'settings.composio.notYetRouted': 'aún sin enrutar', + 'settings.localModel.download.manageExternal': 'Gestiona este modelo en tu runtime externo.', + 'settings.localModel.status.manageOllamaExternal': + 'Gestiona el proceso de Ollama y las descargas de modelos fuera de OpenHuman, luego vuelve a ejecutar los diagnósticos.', + 'settings.localModel.status.ollamaDocs': 'Documentación de Ollama', + 'settings.localModel.status.thenRetry': + 'para instrucciones de configuración, luego reintenta cuando tu runtime sea accesible.', + 'devOptions.menuAi': 'Configuración de IA', + 'devOptions.menuAiDesc': + 'Proveedores de nube, modelos Ollama locales y enrutamiento por carga de trabajo', + 'devOptions.menuScreenAware': 'Conciencia de pantalla', + 'devOptions.menuScreenAwareDesc': + 'Permisos de captura de pantalla, política de monitoreo y controles de sesión', + 'devOptions.menuMessaging': 'Canales de mensajería', + 'devOptions.menuMessagingDesc': + 'Configurar los modos de autenticación Telegram/Discord y el enrutamiento de canales predeterminado', + 'devOptions.menuTools': 'Herramientas', + 'devOptions.menuToolsDesc': + 'Habilitar o deshabilitar capacidades que OpenHuman puede usar en su nombre', + 'devOptions.menuAgentChat': 'Chat de agente', + 'devOptions.menuAgentChatDesc': + 'Conversación del agente de prueba con anulaciones de modelo y temperatura', + 'devOptions.menuCronJobs': 'Trabajos cronificados', + 'devOptions.menuCronJobsDesc': + 'Ver y configurar trabajos programados para habilidades en tiempo de ejecución', + 'devOptions.menuLocalModelDebug': 'Depuración del modelo local', + 'devOptions.menuLocalModelDebugDesc': + 'Ollama configuración, descargas de activos, pruebas de modelos y diagnósticos', + 'devOptions.menuWebhooksDebug': 'Ganchos web', + 'devOptions.menuWebhooksDebugDesc': + 'Inspeccionar los registros de webhooks en tiempo de ejecución y los registros de solicitudes capturados', + 'devOptions.menuIntelligence': 'Inteligencia', + 'devOptions.menuIntelligenceDesc': + 'Espacio de trabajo de la memoria, motor subconsciente, sueños y escenarios.', + 'devOptions.menuNotificationRouting': 'Enrutamiento de notificaciones', + 'devOptions.menuNotificationRoutingDesc': + 'Puntuación de importancia de la IA y escalamiento del orquestador para alertas de integración', + 'devOptions.menuComposeIOTriggers': 'Activadores de ComposeIO', + 'devOptions.menuComposeIOTriggersDesc': + 'Ver el historial y el archivo de activadores de ComposeIO', + 'devOptions.menuComposioRouting': 'Composio Enrutamiento (modo directo)', + 'devOptions.menuComposioRoutingDesc': + 'Traiga su propia clave Composio API y enrute las llamadas directamente a backend.composio.dev', + 'devOptions.menuComposioTriggers': 'Desencadenantes de integración', + 'devOptions.menuComposioTriggersDesc': + 'Configurar los ajustes de clasificación de IA para los activadores de integración Composio', + 'memory.sourceFilterAria': 'Filtrar por fuente', + 'calls.comingSoonDescription': 'Las llamadas asistidas por IA llegarán pronto. Mantente atento.', + 'vault.title': 'Bóvedas de conocimiento', + 'vault.description': + 'Apunta a una carpeta local; los archivos se fragmentan y se reflejan en la memoria.', + 'vault.add': 'Agregar bóveda', + 'vault.added': 'Bóveda agregada', + 'vault.createdMessage': 'Creado "{name}". Haga clic en {sync} para ingerir.', + 'vault.couldNotAdd': 'No se pudo agregar la bóveda', + 'vault.syncFailed': 'Error de sincronización', + 'vault.syncFailedFor': 'Error de sincronización para "{name}"', + 'vault.syncFailedFiles': 'Archivo(s) {count} fallidos', + 'vault.syncedTitle': 'Sincronizado "{name}"', + 'vault.syncSummary': 'Ingerido {ingested}, sin cambios {unchanged}, eliminado {removed}', + 'vault.syncSummaryFailed': ', falló {count}', + 'vault.syncSummarySkipped': ', omitido {count}', + 'vault.syncSummaryDuration': ' · {seconds}s', + 'vault.confirmRemovePurge': + '¿Eliminar el almacén «{name}»?\n\nHaz clic en Aceptar para purgar también su memoria (eliminar todos los {count} documento(s) procesados).\nHaz clic en Cancelar para conservar los documentos en memoria.', + 'vault.confirmRemove': '¿Realmente eliminar la bóveda "{name}"?', + 'vault.removed': 'Bóveda eliminada', + 'vault.removedPurgedMessage': 'Se eliminó "{name}" y se borró la memoria.', + 'vault.removedKeptMessage': 'Se eliminó "{name}". Documentos guardados en la memoria.', + 'vault.couldNotRemove': 'No se pudo eliminar la bóveda', + 'vault.name': 'Nombre', + 'vault.namePlaceholder': 'mis notas de investigacion', + 'vault.folderPath': 'Ruta de la carpeta (absoluta)', + 'vault.folderPathPlaceholder': '/Usuarios/usted/Documentos/notas', + 'vault.excludes': 'Excluye (subcadenas separadas por comas, opcional)', + 'vault.excludesPlaceholder': 'borradores/, .secreto', + 'vault.creating': 'Creando…', + 'vault.create': 'Crear bóveda', + 'vault.loading': 'Cargando bóvedas…', + 'vault.failedToLoad': 'No se pudieron cargar las bóvedas: {error}', + 'vault.empty': 'Aún no hay bóvedas. Agregue uno arriba para comenzar a ingerir una carpeta.', + 'vault.fileCount': '{count} archivo(s)', + 'vault.syncedRelative': 'sincronizado {time}', + 'vault.neverSynced': 'nunca sincronizado', + 'vault.syncingProgress': 'Sincronizando... {ingested}/{total}', + 'vault.removing': 'Eliminando…', + 'vault.relative.sec': 'Hace {count}s', + 'vault.relative.min': 'Hace {count}m', + 'vault.relative.hr': 'Hace {count}h', + 'vault.relative.day': 'Hace {count}d', + 'whatsapp.title': 'WhatsApp', + 'subconscious.interval.fiveMinutes': '5 minutos', + 'subconscious.interval.tenMinutes': '10 minutos', + 'subconscious.interval.fifteenMinutes': '15 minutos', + 'subconscious.interval.thirtyMinutes': '30 minutos', + 'subconscious.interval.oneHour': '1 hora', + 'subconscious.interval.sixHours': '6 horas', + 'subconscious.interval.twelveHours': '12 horas', + 'subconscious.interval.oneDay': '1 dia', + 'subconscious.priority.critical': 'crítico', + 'subconscious.priority.important': 'importante', + 'subconscious.priority.normal': 'normales', + 'subconscious.durationSeconds': '{seconds}s', + 'subconscious.durationMilliseconds': '{milliseconds}ms', + 'settings.appearance': 'Apariencia', + 'settings.appearanceDesc': 'Elija claro, oscuro o combine el tema de su sistema', + 'settings.mascot': 'mascota', + 'settings.mascotDesc': 'Elija el color de mascota utilizado en la aplicación', + 'pages.settings.account.walletBalances': 'Saldos de billetera', + 'pages.settings.account.walletBalancesDesc': + 'Ver saldos en múltiples cadenas de tu billetera local', + 'walletBalances.title': 'Saldos de billetera', + 'walletBalances.refresh': 'Refresh', + 'walletBalances.loading': 'Cargando saldos…', + 'walletBalances.retry': 'Retry', + 'walletBalances.emptyState': + 'Aún no hay cuentas de billetera — configura una billetera en Frase de recuperación.', + 'walletBalances.copyAddress': 'Copiar dirección', + 'walletBalances.providerMissing': 'proveedor no disponible', + 'walletBalances.rawBalance': 'Bruto: {raw}', + 'walletBalances.errorGeneric': + 'No se pueden cargar los saldos de la billetera. Configura tu billetera en Frase de recuperación e inténtalo de nuevo.', + 'settings.taskSources.title': 'Fuentes de tareas', + 'settings.taskSources.subtitle': + 'Extrae tareas de tus herramientas al tablero de tareas del agente', + 'settings.taskSources.description': + 'Recopila elementos de trabajo de GitHub, Notion, Linear y ClickUp, enriquétalos y dirígelos al tablero de tareas del agente.', + 'settings.taskSources.connectHint': + 'Las fuentes de tareas utilizan tus cuentas conectadas. Conéctalas primero en Integraciones.', + 'settings.taskSources.disabledBanner': + 'Las fuentes de tareas están deshabilitadas en la configuración. Actívalas para que se actualicen automáticamente.', + 'settings.taskSources.loadError': 'Error al cargar las fuentes de la tarea', + 'settings.taskSources.addTitle': 'Agregar una fuente de tarea', + 'settings.taskSources.provider': 'proveedor', + 'settings.taskSources.name': 'Nombre (opcional)', + 'settings.taskSources.namePlaceholder': 'p. ej. Mis asuntos abiertos', + 'settings.taskSources.github.repo': 'Repositorio (propietario/nombre, opcional)', + 'settings.taskSources.github.labels': 'Etiquetas (separadas por comas)', + 'settings.taskSources.notion.database': 'ID de la base de datos (tablero)', + 'settings.taskSources.linear.team': 'ID del equipo (opcional)', + 'settings.taskSources.clickup.team': 'ID del espacio de trabajo (equipo) (opcional)', + 'settings.taskSources.assignedToMe': 'Solo los elementos asignados a mí', + 'settings.taskSources.add': 'Agregar fuente', + 'settings.taskSources.adding': 'Agregando…', + 'settings.taskSources.preview': 'Avance', + 'settings.taskSources.previewResult': 'La(s) tarea(s) {count} coinciden con este filtro', + 'settings.taskSources.fetchNow': 'Trae ahora', + 'settings.taskSources.fetching': 'Obteniendo…', + 'settings.taskSources.fetchResult': 'Enrutado {routed} de la(s) tarea(s) {fetched}', + 'settings.taskSources.configured': 'Fuentes configuradas', + 'settings.taskSources.empty': 'Aún no se han configurado fuentes de tareas.', + 'settings.taskSources.proactive': 'proactivo', + 'settings.taskSources.lastFetch': 'Última búsqueda', + 'settings.taskSources.never': 'Nunca', + 'settings.taskSources.statusEnabled': 'Habilitado', + 'settings.taskSources.statusDisabled': 'Deshabilitado', + 'settings.taskSources.enable': 'Habilitar', + 'settings.taskSources.disable': 'Desactivar', + 'settings.taskSources.remove': 'Eliminar', + 'settings.taskSources.removeConfirm': + '¿Eliminar esta fuente de tarea? Todo el historial de tareas ingeridas se eliminará y no se puede deshacer.', + 'settings.taskSources.refresh': 'Refrescar', + 'settings.taskSources.providers.github': 'GitHub', + 'settings.taskSources.providers.notion': 'Noción', + 'settings.taskSources.providers.linear': 'Lineal', + 'settings.taskSources.providers.clickup': 'ClickUp', + 'skills.dashboard.title': 'Skills', + 'skills.dashboard.scheduledHeading': 'Habilidades programadas', + 'skills.dashboard.emptyTitle': 'Sin habilidades programadas', + 'skills.dashboard.emptyBody': + 'Ejecuta una habilidad integrada una vez o guarda una programación recurrente para verla aquí.', + 'skills.dashboard.create': 'Crear una habilidad', + 'skills.dashboard.run': 'Ejecutar una habilidad', + 'skills.dashboard.enable': 'Activar habilidad programada', + 'skills.dashboard.disable': 'Desactivar habilidad programada', + 'skills.dashboard.lastRun': 'Última ejecución', + 'skills.dashboard.nextRun': 'Próxima ejecución', + 'skills.dashboard.cardOpenRunner': 'Abrir en el ejecutor', + 'skills.dashboard.loadError': 'Error al cargar las habilidades programadas', + 'skills.new.title': 'Crear una habilidad', + 'skills.new.placeholderBody': + 'El formulario de creación llegará pronto. Por ahora, usa el botón «Nueva habilidad» en la página del ejecutor.', + 'settings.agents.title': 'Agentes', + 'settings.agents.subtitle': + 'Administra los agentes disponibles para la delegación: los predeterminados integrados y tus propios agentes personalizados.', + 'settings.agents.menuDesc': 'Administrar agentes integrados y personalizados', + 'settings.agents.newAgent': 'Nuevo agente', + 'settings.agents.loadError': 'No se pudieron cargar los agentes', + 'settings.agents.empty': 'Todavía no hay agentes', + 'settings.agents.sourceDefault': 'incorporado', + 'settings.agents.sourceCustom': 'Personalizado', + 'settings.agents.enable': 'Habilitar agente', + 'settings.agents.disable': 'Desactivar agente', + 'settings.agents.edit': 'Editar', + 'settings.agents.delete': 'Borrar', + 'settings.agents.reset': 'Restablecer a predeterminado', + 'settings.agents.modelLabel': 'Modelo', + 'settings.agents.toolsLabel': 'Herramientas', + 'settings.agents.toolsAll': 'Todas las herramientas', + 'settings.agents.toolsCount': 'herramientas {count}', + 'settings.agents.actionFailed': 'No se pudo actualizar el agente', + 'settings.agents.orchestratorLocked': 'El orquestador siempre está habilitado.', + 'settings.agents.editor.createTitle': 'Nuevo agente', + 'settings.agents.editor.editTitle': 'Editar agente', + 'settings.agents.editor.id': 'ID', + 'settings.agents.editor.idHint': 'Solo letras minúsculas, números, _ y -.', + 'settings.agents.editor.name': 'Nombre', + 'settings.agents.editor.description': 'Descripción', + 'settings.agents.editor.model': 'Modelo (opcional)', + 'settings.agents.editor.modelPlaceholder': + 'por ejemplo, heredar, pista:rápido, o un id de modelo', + 'settings.agents.editor.systemPrompt': 'Indicador del sistema (opcional)', + 'settings.agents.editor.tools': 'Herramientas permitidas', + 'settings.agents.editor.toolsHint': + 'Un nombre de herramienta por línea. Usa * para todas las herramientas.', + 'settings.agents.editor.defaultsNote': + 'Editar un agente integrado guarda una anulación que puedes restablecer más tarde.', + 'settings.agents.editor.save': 'Guardar', + 'settings.agents.editor.create': 'Crear agente', + 'settings.agents.editor.saving': 'Guardando…', + 'settings.agentsSection.title': 'Agents', + 'settings.agentsSection.description': + 'Administra tus agentes, su autonomía y a qué pueden acceder en este equipo.', + 'settings.agentsSection.menuDesc': 'Registro, autonomía y acceso al SO', + 'settings.agents.editor.notFound': 'Agente no encontrado.', + 'settings.agents.editor.modelInherit': 'Heredar (predeterminado de la plataforma)', + 'settings.agents.editor.modelHints': 'Sugerencias de enrutamiento', + 'settings.agents.editor.modelTiers': 'Niveles de modelo', + 'settings.agents.editor.modelCustom': 'ID de modelo personalizado…', + 'settings.agents.editor.modelCustomPlaceholder': 'ej. anthropic/claude-sonnet-4', + 'settings.agents.editor.selectTools': 'Agregar herramientas', + 'settings.agents.editor.toolsAllSelected': 'Todas las herramientas', + 'settings.agents.editor.toolsNoneSelected': 'Ninguna herramienta seleccionada', + 'settings.agents.editor.removeToolAria': 'Eliminar {tool}', + 'settings.agents.editor.toolsModalTitle': 'Herramientas permitidas', + 'settings.agents.editor.toolsSelectedCount': '{count} seleccionadas', + 'settings.agents.editor.toolsSearchPlaceholder': 'Buscar herramientas…', + 'settings.agents.editor.toolsAllowAll': 'Permitir todas las herramientas (*)', + 'settings.agents.editor.toolsAllowAllHint': + 'Este agente puede usar todas las herramientas disponibles.', + 'settings.agents.editor.toolsLoading': 'Cargando herramientas…', + 'settings.agents.editor.toolsLoadError': 'No se pudieron cargar las herramientas', + 'settings.agents.editor.toolsEmpty': 'Ninguna herramienta coincide con tu búsqueda.', + 'settings.agents.editor.toolsDone': 'Done', + 'settings.agents.editor.builtInReadonly': + 'Los agentes integrados no se pueden editar. Puedes activarlos, desactivarlos o restablecerlos desde la lista de agentes.', }; -export default es; +export default messages; diff --git a/app/src/lib/i18n/fr.ts b/app/src/lib/i18n/fr.ts index c67cf74fc..86c5f78bf 100644 --- a/app/src/lib/i18n/fr.ts +++ b/app/src/lib/i18n/fr.ts @@ -1,32 +1,4176 @@ -import fr1 from './chunks/fr-1'; -import fr2 from './chunks/fr-2'; -import fr3 from './chunks/fr-3'; -import fr4 from './chunks/fr-4'; -import fr5 from './chunks/fr-5'; import type { TranslationMap } from './types'; -// French (Français) translations. Each chunk maps to chunks/en-N.ts. -// Missing keys fall back to English via I18nContext.resolveEn(). -const fr: TranslationMap = { - ...fr1, - ...fr2, - ...fr3, - ...fr4, - ...fr5, +// French (Français) translations. Keys mirror en.ts; missing/ +// English-identical values fall back to English via I18nContext.resolveEn(). +const messages: TranslationMap = { + 'nav.home': 'Accueil', + 'nav.human': 'Humain', + 'nav.chat': 'Chat', + 'nav.connections': 'Connexions', + 'nav.memory': 'Intelligence', + 'nav.alerts': 'Alertes', + 'nav.rewards': 'Récompenses', + 'nav.settings': 'Paramètres', + 'common.cancel': 'Annuler', + 'common.save': 'Enregistrer', + 'common.confirm': 'Confirmer', + 'common.delete': 'Supprimer', + 'common.edit': 'Modifier', + 'common.create': 'Créer', + 'common.search': 'Rechercher', + 'common.loading': 'chargement…', + 'common.error': 'Erreur', + 'common.success': 'Succès', + 'common.back': 'Retour', + 'common.next': 'Suivant', + 'common.finish': 'Terminer', + 'common.close': 'Fermer', + 'common.enabled': 'Activé', + 'common.disabled': 'Désactivé', + 'common.on': 'Activé', + 'common.off': 'Désactivé', + 'common.yes': 'Oui', + 'common.no': 'Non', + 'common.ok': 'Compris', + 'common.name': 'Nom', + 'common.retry': 'Réessayer', + 'common.copy': 'Copier', + 'common.copied': 'Copié', + 'common.learnMore': 'En savoir plus', + 'common.seeAll': 'Voir', + 'common.dismiss': 'Ignorer', + 'common.clear': 'Effacer', + 'common.reset': 'Réinitialiser', + 'common.refresh': 'Actualiser', + 'common.export': 'Exporter', + 'common.import': 'Importer', + 'common.upload': 'Envoyer', + 'common.download': 'Télécharger', + 'common.add': 'Ajouter', + 'common.remove': 'Supprimer', + 'common.showMore': 'Afficher plus', + 'common.showLess': 'Afficher moins', + 'common.submit': 'Envoyer', + 'common.continue': 'Continuer', + 'common.comingSoon': 'Bientôt disponible', + 'common.breadcrumb': "Fil d'Ariane", + 'settings.general': 'Général', + 'settings.featuresAndAI': 'Fonctionnalités & IA', + 'settings.billingAndRewards': 'Facturation & Récompenses', + 'settings.support': 'Assistance', + 'settings.advanced': 'Avancé', + 'settings.dangerZone': 'Zone de danger', + 'settings.account': 'Compte', + 'settings.accountDesc': 'Phrase de récupération, équipe, connexions et confidentialité', + 'settings.notifications': 'Notifications', + 'settings.notificationsDesc': 'Ne pas déranger et contrôles de notifications par compte', + 'settings.notifications.tabs.preferences': 'Préférences', + 'settings.notifications.tabs.routing': 'Routage', + 'settings.features': 'Fonctionnalités', + 'settings.featuresDesc': "Surveillance de l'écran, messagerie et outils", + 'settings.aiModels': 'IA & Modèles', + 'settings.aiModelsDesc': + 'Configuration des modèles IA locaux, téléchargements et fournisseur LLM', + 'settings.ai': 'Configuration IA', + 'settings.aiDesc': 'Fournisseurs cloud, modèles Ollama locaux et routage par charge de travail', + 'settings.billingUsage': 'Facturation & Utilisation', + 'settings.billingUsageDesc': "Plan d'abonnement, crédits et méthodes de paiement", + 'settings.rewards': 'Récompenses', + 'settings.rewardsDesc': 'Parrainages, coupons et crédits gagnés', + 'settings.restartTour': 'Relancer la visite', + 'settings.restartTourDesc': 'Rejouer la présentation du produit depuis le début', + 'settings.about': 'À propos', + 'settings.aboutDesc': "Version de l'application et mises à jour logicielles", + 'settings.developerOptions': 'Avancé', + 'settings.developerOptionsDesc': + 'Configuration IA, canaux de messagerie, outils, diagnostics et panneaux de débogage', + 'settings.clearAppData': "Effacer les données de l'app", + 'settings.clearAppDataDesc': + 'Se déconnecter et supprimer définitivement toutes les données locales', + 'settings.logOut': 'Se déconnecter', + 'settings.logOutDesc': 'Se déconnecter de ton compte', + 'settings.exitLocalSession': 'Quitter le local session', + 'settings.exitLocalSessionDesc': "Retour à l'écran de connexion", + 'settings.language': 'Langue', + 'settings.betaBuild': 'Version bêta - v{version}', + 'settings.languageDesc': "Langue d'affichage de l'interface", + 'settings.alerts': 'Alertes', + 'settings.alertsDesc': "Voir les alertes récentes et l'activité dans ta boîte de réception", + 'settings.account.recoveryPhrase': 'Phrase de récupération', + 'settings.account.recoveryPhraseDesc': 'Voir et sauvegarder ta phrase de récupération', + 'settings.account.team': 'Équipe', + 'settings.account.teamDesc': "Gérer les membres et les permissions de l'équipe", + 'settings.account.connections': 'Connexions', + 'settings.account.connectionsDesc': 'Gérer les comptes et services liés', + 'settings.account.privacy': 'Confidentialité', + 'settings.account.privacyDesc': 'Contrôler quelles données quittent ton ordinateur', + 'migration.title': 'Importer depuis un autre assistant', + 'migration.description': + "Migrez la mémoire et les notes d'un autre assistant local vers cet espace de travail. Commencez par un Aperçu pour voir précisément ce qui changera, puis cliquez sur Appliquer pour copier les données. Votre mémoire actuelle est sauvegardée au préalable.", + 'migration.vendorLabel': 'Source', + 'migration.vendor.openclaw': 'OpenClaw', + 'migration.vendor.hermes': 'Hermes Agent', + 'migration.sourceLabel': "Chemin de l'espace de travail source (facultatif)", + 'migration.sourcePlaceholder': + 'Laisser vide pour détection automatique (p. ex. ~/.openclaw/workspace)', + 'migration.sourcePlaceholderHermes': 'Laisser vide pour la détection automatique (ex. ~/.hermes)', + 'migration.sourceHint': + "Utilise l'emplacement par défaut du fournisseur si vide. Indiquez un chemin explicite si vous avez déplacé l'espace de travail.", + 'migration.previewAction': 'Aperçu', + 'migration.previewRunning': 'Aperçu en cours…', + 'migration.applyAction': "Appliquer l'import", + 'migration.applyRunning': 'Importation…', + 'migration.applyDisclaimer': + 'Appliquer est débloqué après un Aperçu réussi de la même source. La mémoire existante est sauvegardée avant tout import.', + 'migration.reportTitlePreview': "Aperçu — rien d'importé pour l'instant", + 'migration.reportTitleApplied': 'Importation terminée', + 'migration.report.source': 'Espace de travail source', + 'migration.report.target': 'Espace de travail cible', + 'migration.report.fromSqlite': 'Depuis SQLite (brain.db)', + 'migration.report.fromMarkdown': 'Depuis Markdown', + 'migration.report.imported': 'Importés', + 'migration.report.skippedUnchanged': 'Ignorés (inchangés)', + 'migration.report.renamedConflicts': 'Renommés en cas de conflit', + 'migration.report.warnings': 'Avertissements', + 'migration.report.previewHint': + "Aucune donnée n'a encore été importée. Cliquez sur Appliquer l'import pour la copier.", + 'migration.report.appliedHint': + 'Les entrées importées sont maintenant dans votre mémoire. Relancez Aperçu pour comparer à nouveau.', + 'migration.confirmImport.singular': + "Importer {count} entrée dans l'espace de travail actuel ?\n\nSource : {source}\nCible : {target}\n\nLa mémoire existante sera sauvegardée avant l'import.", + 'migration.confirmImport.plural': + "Importer {count} entrées dans l'espace de travail actuel ?\n\nSource : {source}\nCible : {target}\n\nLa mémoire existante sera sauvegardée avant l'import.", + 'settings.notifications.doNotDisturb': 'Ne pas déranger', + 'settings.notifications.doNotDisturbDesc': + 'Mettre en pause toutes les notifications pendant une durée définie', + 'settings.notifications.channelControls': 'Contrôles par canal', + 'settings.notifications.channelControlsDesc': + 'Configurer les préférences de notifications pour chaque canal', + 'settings.features.screenAwareness': "Surveillance de l'écran", + 'settings.features.screenAwarenessDesc': "Permettre à l'assistant de voir ta fenêtre active", + 'settings.features.messaging': 'Messagerie', + 'settings.features.messagingDesc': "Paramètres d'intégration des canaux et de la messagerie", + 'settings.features.tools': 'Outils', + 'settings.features.toolsDesc': 'Gérer les outils et intégrations connectés', + 'settings.ai.localSetup': 'Configuration IA locale', + 'settings.ai.localSetupDesc': 'Télécharger et configurer les modèles IA locaux', + 'settings.ai.llmProvider': 'Fournisseur LLM', + 'settings.ai.llmProviderDesc': 'Choisir et configurer ton fournisseur IA', + 'clearData.title': "Effacer les données de l'app", + 'clearData.warning': + 'Cela va te déconnecter et supprimer définitivement les données locales, notamment :', + 'clearData.bulletSettings': "Paramètres de l'app et conversations", + 'clearData.bulletCache': "Toutes les données de cache d'intégration locales", + 'clearData.bulletWorkspace': "Données de l'espace de travail", + 'clearData.bulletOther': 'Toutes les autres données locales', + 'clearData.irreversible': 'Cette action est irréversible.', + 'clearData.clearing': 'Effacement des données…', + 'clearData.failed': "Échec de l'effacement des données et de la déconnexion. Réessaie.", + 'clearData.failedLogout': 'Échec de la déconnexion. Réessaie.', + 'clearData.failedPersist': "Échec de l'effacement de l'état persisté. Réessaie.", + 'welcome.title': 'Bienvenue sur OpenHuman', + 'welcome.subtitle': + 'Ton assistant IA personnel super-intelligent. Privé, simple et extrêmement puissant.', + 'welcome.connectPrompt': "Configurer l'URL RPC (Avancé)", + 'welcome.selectRuntime': 'Sélectionner un runtime', + 'welcome.clearingAppData': "Effacement des données de l'appli…", + 'welcome.clearAppDataAndRestart': "Effacer les données de l'appli et redémarrer", + 'welcome.clearAppDataWarning': + "Cela efface les secrets et comptes stockés localement sur cet appareil. Votre compte cloud n'est pas affecté — vous pouvez vous reconnecter immédiatement après.", + 'welcome.resetErrorFallback': + "Impossible d'effacer les données de l'appli. Quittez et rouvrez OpenHuman, puis réessayez.", + 'welcome.signingIn': 'Vous connecter...', + 'welcome.termsIntro': 'En continuant, vous acceptez les', + 'welcome.termsOfUse': 'Terms', + 'welcome.termsJoiner': 'et la', + 'welcome.privacyPolicy': 'Politique de confidentialité', + 'welcome.termsOutro': '.', + 'welcome.urlPlaceholder': 'http://localhost:8089', + 'welcome.invalidUrl': 'Saisis une URL HTTP ou HTTPS valide', + 'welcome.connecting': 'Test en cours', + 'welcome.connect': 'Tester', + 'home.greeting': 'Bonjour', + 'home.greetingAfternoon': 'Bon après-midi', + 'home.greetingEvening': 'Bonsoir', + 'home.askAssistant': "Pose n'importe quelle question à ton assistant…", + 'home.statusOk': + "Ton appareil est connecté. Garde l'app ouverte pour maintenir la connexion. Envoie un message à ton agent avec le bouton ci-dessous.", + 'home.statusBackendOnly': + 'Reconnexion au backend… ton agent sera de nouveau disponible dans quelques instants.', + 'home.statusCoreUnreachable': + "Le processus local OpenHuman ne répond pas. Il a peut-être planté ou n'a pas démarré correctement.", + 'home.statusInternetOffline': + "Ton appareil est hors ligne. Vérifie ta connexion ou redémarre l'app.", + 'home.restartCore': 'Redémarrer le core', + 'home.restartingCore': 'Redémarrage du core…', + 'home.themeToggle.toLight': 'Passer en mode clair', + 'home.themeToggle.toDark': 'Passer en mode sombre', + 'home.usageExhaustedTitle': 'Vous avez épuisé votre utilisation', + 'home.usageExhaustedBody': + 'Vous n’avez plus d’utilisation incluse pour le moment. Démarrez un abonnement pour débloquer davantage de capacité continue.', + 'home.usageExhaustedCta': 'Prendre un abonnement', + 'home.routinesCard': 'Vos routines', + 'home.routinesActive': '{count} actif(s)', + 'routines.title': 'Vos Routines', + 'routines.subtitle': 'Choses que votre assistant fait automatiquement', + 'routines.loading': 'Chargement des routines…', + 'routines.empty': 'Pas encore de routines', + 'routines.emptyHint': + 'Votre assistant peut exécuter des tâches selon un planning — comme des briefings matinaux ou des résumés quotidiens.', + 'routines.refresh': 'Actualiser', + 'routines.nextRun': 'Prochaine course', + 'routines.lastRunSuccess': 'Dernière exécution réussie', + 'routines.lastRunFailed': 'Dernière exécution échouée', + 'routines.notRunYet': 'Pas encore exécuté', + 'routines.runNow': 'Cours maintenant', + 'routines.running': 'Course…', + 'routines.viewHistory': "Afficher l'historique", + 'routines.loadingHistory': 'Chargement…', + 'routines.noHistory': "Pas encore d'historique d'exécution.", + 'routines.statusSuccess': 'Succès', + 'routines.statusError': 'Erreur', + 'routines.showOutput': 'Afficher la sortie', + 'routines.hideOutput': 'Masquer la sortie', + 'routines.toggleEnabled': 'Activer ou désactiver cette routine', + 'routines.typeAgent': 'Agent', + 'routines.typeCommand': 'Commande', + 'nav.routines': 'Routines', + 'chat.newThread': 'Nouveau fil', + 'chat.typeMessage': 'Écris un message…', + 'chat.send': 'Envoyer le message', + 'chat.thinking': 'En train de réfléchir…', + 'chat.noMessages': "Aucun message pour l'instant", + 'chat.startConversation': 'Démarre une conversation', + 'chat.regenerate': 'Régénérer', + 'chat.copyResponse': 'Copier la réponse', + 'chat.citations': 'Citations', + 'chat.toolUsed': 'Outil utilisé', + 'scope.legacy': 'Hérité', + 'scope.user': 'Utilisateur', + 'scope.project': 'Projet', + 'skills.title': 'Connexions', + 'skills.search': 'Rechercher des connexions…', + 'skills.noResults': 'Aucune connexion trouvée', + 'skills.connect': 'Connecter', + 'skills.disconnect': 'Déconnecter', + 'skills.configure': 'Gérer', + 'skills.connected': 'Connecté', + 'skills.available': 'Disponible', + 'skills.addAccount': 'Ajouter un compte', + 'skills.channels': 'Canaux', + 'skills.integrations': 'Intégrations', + 'skills.integrationsSubtitle': + 'Connexions OAuth cloud — connectez-vous avec votre compte et Composio gère les jetons pour que les agents puissent lire et agir en votre nom. Aucune clé API à gérer.', 'skills.composio.noApiKeyTitle': 'Aucune clé API Composio configurée', 'skills.composio.noApiKeyDescription': 'Le mode local utilise votre propre clé API Composio. Ouvrez Paramètres → Avancé → Composio pour en ajouter une avant de connecter des intégrations ici.', 'skills.composio.noApiKeyCta': 'Ouvrir dans les paramètres', - 'channels.localManagedUnavailable': - 'Les canaux gérés ne sont pas disponibles pour les utilisateurs locaux.', + 'skills.tabs.composio': 'Composio', + 'skills.tabs.channels': 'Canaux', + 'skills.tabs.mcp': 'MCP Serveurs', + 'skills.tabs.runners': 'Runners', + 'memory.title': 'Mémoire', + 'memory.search': 'Rechercher dans la mémoire…', + 'memory.noResults': 'Aucun souvenir trouvé', + 'memory.empty': + "Aucun souvenir pour l'instant. Les souvenirs sont créés automatiquement au fil de tes interactions.", + 'memory.tab.memory': 'Mémoire', + 'memory.tab.tasks': "Tâches de l'agent", + 'memory.tab.tasksDescription': + 'Créez et suivez des tâches — vos propres listes de choses à faire ainsi que les tableaux que vos agents construisent au fil des conversations.', + 'memory.tab.subconscious': 'Subconscient', + 'memory.tab.dreams': 'Rêves', + 'memory.tab.calls': 'Appels', + 'memory.tab.diagram': 'Diagram', + 'memory.tab.centrality': 'Centrality', + 'memory.tab.settings': 'Paramètres', + 'memory.analyzeNow': 'Analyser maintenant', + 'graphCentrality.title': 'Centralité du graphe de connaissances', + 'graphCentrality.intro': + "PageRank sur votre graphe de mémoire met en évidence les hubs porteurs de charge — et les entités connectrices qui relient des clusters autrement séparés, ce qu'un simple comptage de fréquence ne peut révéler.", + 'graphCentrality.loading': 'Calcul de la centralité…', + 'graphCentrality.errorPrefix': 'Impossible de charger le graphique:', + 'graphCentrality.retry': 'Réessayer', + 'graphCentrality.empty': 'Pas encore de graphe de connaissances.', + 'graphCentrality.emptyHint': + "Au fur et à mesure que l'assistant enregistre des faits sur vous, les entités les plus connectées apparaîtront ici.", + 'graphCentrality.namespaceLabel': 'Espace de noms', + 'graphCentrality.namespaceAll': 'Tous les espaces de noms', + 'graphCentrality.metricEntities': 'Entités', + 'graphCentrality.metricConnections': 'Connexions', + 'graphCentrality.metricClusters': 'Groupes', + 'graphCentrality.clustersCaption': 'Clusters {components} · plus grandes poches {largest}', + 'graphCentrality.approximateBadge': 'approximatif', + 'graphCentrality.approximateTitle': "Arrêté à la limite d'itération avant convergence complète", + 'graphCentrality.rankedHeading': 'Principales entités par influence', + 'graphCentrality.colRank': '#', + 'graphCentrality.colEntity': 'Entité', + 'graphCentrality.colInfluence': 'Influence', + 'graphCentrality.colLinks': 'Liens', + 'graphCentrality.bridgeBadge': 'connecteur', + 'graphCentrality.bridgeTitle': 'Connecteur — plus influent que ne le suggère son nombre de liens', + 'graphCentrality.degreeTitle': '{in} en · {out} hors', + 'memoryTree.status.title': 'Arbre de mémoire', + 'memoryTree.status.autoSyncLabel': 'Auto-synchronisation', + 'memoryTree.status.autoSyncDescription': + 'Pause pour arrêter la nouvelle ingestion. Le wiki existant reste consultable.', + 'memoryTree.status.statusTile': 'Statut', + 'memoryTree.status.lastSyncTile': 'Dernière synchronisation', + 'memoryTree.status.totalChunksTile': 'Morceaux totaux', + 'memoryTree.status.wikiSizeTile': 'Taille du wiki', + 'memoryTree.status.statusRunning': 'Course', + 'memoryTree.status.statusPaused': 'En pause', + 'memoryTree.status.statusSyncing': 'Synchronisation', + 'memoryTree.status.statusError': 'Erreur', + 'memoryTree.status.statusIdle': 'Inactif', + 'memoryTree.status.never': 'Jamais', + 'memoryTree.status.fetchError': "Impossible de récupérer l'état de l'arborescence de mémoire", + 'memoryTree.status.retry': 'Réessayer', + 'memoryTree.status.toggleFailed': + "Impossible d'activer/désactiver la synchronisation automatique", + 'memoryTree.status.justNow': "à l'instant", + 'memoryTree.status.secondsAgo': '{count}s il y a', + 'memoryTree.status.minuteAgo': 'Il y a 1 minute', + 'memoryTree.status.minutesAgo': '{count} il y a quelques minutes', + 'memoryTree.status.hourAgo': 'Il y a 1 heure', + 'memoryTree.status.hoursAgo': '{count} il y a hr', + 'memoryTree.status.dayAgo': 'Il y a 1 jour', + 'memoryTree.status.daysAgo': '{count} il y a des jours', + 'alerts.title': 'Alertes', + 'alerts.empty': "Aucune alerte pour l'instant", + 'alerts.markAllRead': 'Tout marquer comme lu', + 'alerts.unread': 'non lu', + 'rewards.title': 'Récompenses', + 'rewards.referrals': 'Parrainages', + 'rewards.coupons': 'Échanger', 'rewards.localUnavailable': 'La connexion locale ne permet pas de gagner des récompenses, des coupons ou du crédit de parrainage. Déconnecte-toi puis connecte-toi avec un compte OpenHuman si tu veux que les récompenses comptent.', 'rewards.localUnavailableCta': 'Ouvrir les paramètres du compte', + 'rewards.credits': 'Crédits', + 'rewards.referralCode': 'Ton code de parrainage', + 'rewards.copyCode': 'Copier le code', + 'rewards.share': 'Partager', + 'onboarding.welcome': 'Salut. Je suis OpenHuman.', + 'onboarding.welcomeDesc': + 'Ton assistant IA super-intelligent qui tourne sur ton ordinateur. Privé, simple et extrêmement puissant.', + 'onboarding.context': 'Collecte de contexte', + 'onboarding.contextDesc': 'Connecte les outils et services que tu utilises tous les jours.', + 'onboarding.localAI': 'IA locale', + 'onboarding.localAIDesc': 'Configure un modèle IA local qui tourne sur ta machine.', + 'onboarding.chatProvider': 'Fournisseur de chat', + 'onboarding.chatProviderDesc': 'Choisis comment tu veux interagir avec ton assistant.', + 'onboarding.referral': 'Parrainage', + 'onboarding.referralDesc': 'Applique un code de parrainage si tu en as un.', + 'onboarding.finish': 'Terminer la configuration', + 'onboarding.finishDesc': 'Tout est prêt ! Commence à utiliser OpenHuman.', + 'onboarding.skip': 'Passer', + 'onboarding.getStarted': 'Démarrer', + 'onboarding.runtimeChoice.title': 'Comment veux-tu utiliser OpenHuman ?', + 'onboarding.runtimeChoice.subtitle': + 'Choisis la configuration qui te convient. Tu pourras la modifier plus tard dans les Paramètres.', + 'onboarding.runtimeChoice.cloud.title': 'Simple', + 'onboarding.runtimeChoice.cloud.tagline': 'Laisse OpenHuman tout gérer pour toi.', + 'onboarding.runtimeChoice.cloud.f1': 'Sécurité intégrée', + 'onboarding.runtimeChoice.cloud.f2': 'Compression de tokens pour aller plus loin', + 'onboarding.runtimeChoice.cloud.f3': 'Un abonnement, tous les modèles inclus', + 'onboarding.runtimeChoice.cloud.f4': 'Aucune clé API à gérer', + 'onboarding.runtimeChoice.cloud.f5': 'Facile à configurer', + 'onboarding.runtimeChoice.custom.title': 'Personnalisé', + 'onboarding.runtimeChoice.custom.tagline': + 'Utilise tes propres clés. Contrôle total sur ce que tu utilises.', + 'onboarding.runtimeChoice.custom.f1': 'Tu auras besoin de clés API pour presque tout', + 'onboarding.runtimeChoice.custom.f2': 'Réutilise les services que tu paies déjà', + 'onboarding.runtimeChoice.custom.f3': 'Peut être gratuit si tu fais tout tourner localement', + 'onboarding.runtimeChoice.custom.f4': "Plus de configuration, plus d'options", + 'onboarding.runtimeChoice.custom.f5': 'Idéal pour les utilisateurs avancés et les développeurs', + 'onboarding.runtimeChoice.cloud.creditHighlight': '$1 de crédit offert pour essayer', + 'onboarding.runtimeChoice.continueCloud': 'Continuer avec Simple', + 'onboarding.runtimeChoice.continueCustom': 'Continuer avec Personnalisé', + 'onboarding.runtimeChoice.recommended': 'Recommandé', + 'onboarding.apiKeys.title': 'Ajoutons tes clés API', + 'onboarding.apiKeys.subtitle': + 'Tu peux les coller maintenant ou passer et les ajouter plus tard dans Paramètres › IA. Les clés sont stockées sur cet appareil, chiffrées au repos.', + 'onboarding.apiKeys.openaiLabel': 'Clé API OpenAI', + 'onboarding.apiKeys.openaiPlaceholder': 'sk-...', + 'onboarding.apiKeys.openaiOauthHint': + 'Utilisez ChatGPT Plus/Pro (abonnement) ou une clé OpenAI API — les deux ne sont pas requis.', + 'onboarding.apiKeys.openaiOauthOpening': 'Ouverture de la connexion…', + 'onboarding.apiKeys.finishSignIn': 'Terminer la connexion à ChatGPT', + 'onboarding.apiKeys.orApiKey': 'ou clé API', + 'onboarding.apiKeys.anthropicLabel': 'Clé API Anthropic', + 'onboarding.apiKeys.anthropicPlaceholder': 'sk-ant-...', + 'onboarding.apiKeys.saveError': "Impossible d'enregistrer cette clé. Vérifie-la et réessaie.", + 'onboarding.apiKeys.skipForNow': "Passer pour l'instant", + 'onboarding.apiKeys.continue': 'Enregistrer et continuer', + 'onboarding.apiKeys.saving': 'Enregistrement…', + 'onboarding.custom.stepperInference': 'Inférence', + 'onboarding.custom.stepperVoice': 'Voix', + 'onboarding.custom.stepperOAuth': 'OAuth', + 'onboarding.custom.stepperSearch': 'Recherche', + 'onboarding.custom.stepperEmbeddings': 'Embeddings', + 'onboarding.custom.stepperMemory': 'Mémoire', + 'onboarding.custom.stepCounter': 'Étape {n} sur {total}', + 'onboarding.custom.defaultTitle': 'Par défaut', + 'onboarding.custom.defaultSubtitle': 'Laisse OpenHuman gérer ça pour toi.', + 'onboarding.custom.configureTitle': 'Configurer', + 'onboarding.custom.configureSubtitle': "Je choisis ce que j'utilise.", + 'onboarding.custom.progressAriaLabel': 'Progression de la configuration', + 'onboarding.custom.continue': 'Continuer', + 'onboarding.custom.back': 'Retour', + 'onboarding.custom.finish': 'Terminer la configuration', + 'onboarding.custom.configureLater': + "Tu peux finaliser cette configuration après l'initialisation. On t'amènera sur la page Paramètres correspondante une fois que tu auras terminé.", + 'onboarding.custom.openSettings': 'Ouvrir dans les Paramètres', + 'onboarding.custom.inference.title': 'Inférence (texte)', + 'onboarding.custom.inference.subtitle': + 'Quel modèle de langage doit répondre à tes questions et faire tourner tes agents ?', + 'onboarding.custom.inference.defaultDesc': + 'OpenHuman dirige chaque charge de travail vers un modèle par défaut adapté. Aucune clé, aucune configuration.', + 'onboarding.custom.inference.configureDesc': + "Utilise ta propre clé OpenAI ou Anthropic. On l'utilise pour toutes les tâches textuelles.", + 'onboarding.custom.voice.title': 'Voix', + 'onboarding.custom.voice.subtitle': 'Reconnaissance vocale et synthèse pour le mode voix.', + 'onboarding.custom.voice.defaultDesc': + 'OpenHuman inclut un STT/TTS géré qui fonctionne directement. Rien à configurer.', + 'onboarding.custom.voice.configureDesc': + 'Utilise ton propre ElevenLabs / OpenAI Whisper / etc. À configurer dans Paramètres › Voix.', + 'onboarding.custom.oauth.title': 'Connexions (OAuth)', + 'onboarding.custom.oauth.subtitle': + 'Gmail, Slack, Notion et autres services connectés nécessitant OAuth.', + 'onboarding.custom.oauth.defaultDesc': + 'OpenHuman gère un espace de travail Composio. Un clic pour connecter chaque service plus tard.', + 'onboarding.custom.oauth.configureDesc': + 'Utilise ton propre compte Composio / clé API. À configurer dans Paramètres › Connexions.', + 'onboarding.custom.search.title': 'Recherche web', + 'onboarding.custom.search.subtitle': + 'Comment OpenHuman effectue des recherches sur le web en ton nom.', + 'onboarding.custom.search.defaultDesc': + 'OpenHuman utilise un backend de recherche géré. Aucune clé nécessaire.', + 'onboarding.custom.search.configureDesc': + 'Utilise ta propre clé de fournisseur de recherche (Tavily, Brave, etc.). À configurer dans Paramètres › Outils.', + 'onboarding.custom.embeddings.title': 'Embeddings', + 'onboarding.custom.embeddings.subtitle': + 'Comment OpenHuman génère des embeddings vectoriels pour la recherche sémantique en mémoire.', + 'onboarding.custom.embeddings.defaultDesc': + "OpenHuman utilise un service d'embedding géré. Aucune clé API requise.", + 'onboarding.custom.embeddings.configureDesc': + "Utilisez votre propre fournisseur d'embeddings (OpenAI, Voyage, Ollama, etc.).", + 'onboarding.custom.memory.title': 'Mémoire', + 'onboarding.custom.memory.subtitle': + 'Comment OpenHuman mémorise ton contexte, tes préférences et tes conversations passées.', + 'onboarding.custom.memory.defaultDesc': + 'OpenHuman gère automatiquement le stockage et la récupération en mémoire. Rien à configurer.', + 'onboarding.custom.memory.configureDesc': + 'Inspecte, exporte ou efface la mémoire toi-même. À configurer dans Paramètres › Mémoire.', + 'accounts.addAccount': 'Ajouter un compte', + 'accounts.manageAccounts': 'Gérer les comptes', + 'accounts.noAccounts': 'Aucun compte connecté', + 'accounts.connectAccount': 'Connecte un compte pour démarrer', + 'accounts.agent': 'Agent', + 'accounts.respondQueue': 'File de réponses', + 'accounts.disconnect': 'Déconnecter', + 'accounts.disconnectConfirm': 'Es-tu sûr de vouloir déconnecter ce compte ?', + 'accounts.disconnectClearMemory': 'Supprimer aussi la mémoire de cette source', + 'accounts.disconnectClearMemoryHint': + 'Supprime définitivement les fragments de mémoire locaux liés à cette connexion.', + 'accounts.searchAccounts': 'Rechercher des comptes…', + 'channels.title': 'Canaux', + 'channels.configure': 'Configurer le canal', + 'channels.setup': 'Configuration', + 'channels.noChannels': 'Aucun canal configuré', + 'channels.localManagedUnavailable': + 'Les canaux gérés ne sont pas disponibles pour les utilisateurs locaux.', + 'channels.addChannel': 'Ajouter un canal', + 'channels.status.connected': 'Connecté', + 'channels.status.disconnected': 'Déconnecté', + 'channels.status.error': 'Erreur', + 'channels.status.configuring': 'Configuration en cours', + 'channels.defaultMessaging': 'Canal de messagerie par défaut', + 'webhooks.title': 'Webhooks', + 'webhooks.create': 'Créer un webhook', + 'webhooks.noWebhooks': 'Aucun webhook configuré', + 'webhooks.url': 'URL', + 'webhooks.secret': 'Secret', + 'webhooks.events': 'Événements', + 'webhooks.archiveDirectory': "Répertoire d'archive", + 'webhooks.todayFile': 'Fichier du jour', + 'invites.title': 'Invitations', + 'invites.create': 'Créer une invitation', + 'invites.noInvites': 'Aucune invitation en attente', + 'invites.code': "Code d'invitation", + 'invites.copyLink': 'Copier le lien', + 'invites.generate': 'Générer une invitation', + 'invites.generating': 'Génération…', + 'invites.refreshing': 'Actualisation des invitations…', + 'invites.loading': 'Chargement des invitations…', + 'invites.copyCodeAria': "Copier le code d'invitation", + 'invites.revokeAria': "Révoquer l'invitation", + 'invites.usedUp': 'Épuisée', + 'invites.uses': 'Utilise : {current}{max}', + 'invites.expiresOn': 'Expire le {date}', + 'invites.empty': 'Aucune invitation pour le moment', + 'invites.emptyHint': 'Générez un code d’invitation à partager', + 'invites.revokeTitle': 'Révoquer le code d’invitation', + 'invites.revokePromptPrefix': "Êtes-vous sûr de vouloir révoquer le code d'invitation", + 'invites.revokeWarning': + 'Ce code d’invitation ne sera plus valide et ne pourra plus être utilisé pour rejoindre l’équipe.', + 'invites.revoking': 'Révocation...', + 'invites.revokeAction': 'Révoquer l’invitation', + 'invites.failedGenerate': 'Échec de la génération de l’invitation', + 'invites.failedRevoke': 'Échec de la révocation de l’invitation', + 'team.refreshingMembers': 'Actualisation des membres...', + 'team.loadingMembers': 'Chargement des membres...', + 'team.memberCount': '{count} membre', + 'team.memberCountPlural': 'Membres {count}', + 'team.you': '(Vous)', + 'team.removeAria': 'Supprimer {name}', + 'team.noMembers': 'Aucun membre trouvé', + 'team.removeTitle': "Supprimer un membre de l'équipe", + 'team.removePromptPrefix': 'Êtes-vous sûr de vouloir supprimer', + 'team.removePromptSuffix': "de l'équipe ?", + 'team.removeWarning': "Il ou elle perdra l'accès à l'équipe et à toutes ses ressources.", + 'team.removing': 'Suppression...', + 'team.removeAction': 'Supprimer un membre', + 'team.changeRoleTitle': 'Modifier le rôle du membre', + 'team.changeRolePrompt': 'Changer le rôle de {name} de {oldRole} à {newRole} ?', + 'team.changeRoleAdminGrant': + "Cela leur accordera les permissions d'administrateur complètes, y compris la possibilité de gérer les membres de l'équipe.", + 'team.changeRoleAdminRemove': + "Cela supprimera leurs permissions d'administrateur et ils ne pourront plus gérer l'équipe.", + 'team.changing': 'Modification...', + 'team.changeRoleAction': 'Modifier le rôle', + 'team.failedChangeRole': 'Échec du changement de rôle', + 'team.failedRemoveMember': 'Échec de la suppression du membre', + 'devOptions.title': 'Avancé', + 'devOptions.diagnostics': 'Diagnostics', + 'devOptions.diagnosticsDesc': 'Santé du système, journaux et métriques de performance', + 'devOptions.toolPolicyDiagnosticsDesc': + 'Inventaire des outils, posture de la politique, listes autorisées MCP et blocages récents', + 'devOptions.toolPolicyDiagnostics.loading': 'Chargement…', + 'devOptions.toolPolicyDiagnostics.unavailable': 'Diagnostics indisponibles', + 'devOptions.toolPolicyDiagnostics.posture.title': 'Position de la politique', + 'devOptions.toolPolicyDiagnostics.posture.autonomy': 'Autonomie:', + 'devOptions.toolPolicyDiagnostics.posture.workspaceOnly': 'Espace de travail uniquement:', + 'devOptions.toolPolicyDiagnostics.posture.maxActionsPerHour': 'Actions max/h :', + 'devOptions.toolPolicyDiagnostics.posture.approvalMediumRisk': 'Approbation (risque moyen):', + 'devOptions.toolPolicyDiagnostics.posture.blockHighRisk': 'Bloquer le haut risque:', + 'devOptions.toolPolicyDiagnostics.inventory.title': 'Inventaire', + 'devOptions.toolPolicyDiagnostics.inventory.totalTools': 'Outils totaux', + 'devOptions.toolPolicyDiagnostics.inventory.enabledTools': 'Outils activés', + 'devOptions.toolPolicyDiagnostics.inventory.mcpStdioTools': 'MCP outils stdio', + 'devOptions.toolPolicyDiagnostics.inventory.jsonRpcTools': 'Outils JSON-RPC', + 'devOptions.toolPolicyDiagnostics.mcpAllowlists.title': 'Listes blanches MCP', + 'devOptions.toolPolicyDiagnostics.mcpAllowlists.summary': + 'Activé : {enabled} · Serveurs : {enabledCount}/{totalCount}', + 'devOptions.toolPolicyDiagnostics.mcpAllowlists.unnamed': '', + 'devOptions.toolPolicyDiagnostics.mcpAllowlists.allowDeny': 'allow={allowCount} deny={denyCount}', + 'devOptions.toolPolicyDiagnostics.mcpWriteAudit.title': 'MCP écrire audit', + 'devOptions.toolPolicyDiagnostics.mcpWriteAudit.summary': + 'Activé: {enabled} · Récent (24h): {recentRows}', + 'devOptions.toolPolicyDiagnostics.recentBlocked.title': 'Appels récents bloqués', + 'devOptions.toolPolicyDiagnostics.recentBlocked.empty': 'Aucun appel bloqué enregistré.', + 'devOptions.toolPolicyDiagnostics.redactedSurfaces.title': 'Surfaces expurgées', + 'devOptions.toolPolicyDiagnostics.redactedSurfaces.summary': + "Capable d'écrire: {writeCount} · Surfaces de politique: {policyCount}", + 'devOptions.debugPanels': 'Panneaux de débogage', + 'devOptions.debugPanelsDesc': + "Indicateurs de fonctionnalités, inspection de l'état et outils de débogage", + 'devOptions.webhooks': 'Webhooks', + 'devOptions.webhooksDesc': 'Configurer et tester les intégrations webhook', + 'devOptions.memoryInspection': 'Inspection de la mémoire', + 'devOptions.memoryInspectionDesc': 'Parcourir, interroger et gérer les entrées de mémoire', + 'voice.pushToTalk': 'Appuyer pour parler', + 'voice.recording': 'Enregistrement…', + 'voice.processing': 'Traitement…', + 'voice.languageHint': 'Langue', + 'misc.rehydrating': 'Chargement de tes données…', + 'misc.checkingServices': 'Vérification des services…', + 'misc.serviceUnavailable': 'Service indisponible', + 'misc.somethingWentWrong': "Une erreur s'est produite", + 'misc.tryAgainLater': 'Réessaie plus tard.', + 'misc.restartApp': "Redémarrer l'app", + 'misc.updateAvailable': 'Mise à jour disponible', + 'misc.updateNow': 'Mettre à jour maintenant', + 'misc.updateLater': 'Plus tard', + 'misc.downloading': 'Téléchargement…', + 'misc.installing': 'Installation…', + 'misc.beta': + "OpenHuman est en bêta anticipée. N'hésite pas à partager tes retours ou signaler des bugs — chaque rapport nous aide à avancer plus vite.", + 'misc.betaFeedback': 'Envoyer un retour', + 'mnemonic.title': 'Phrase de récupération', + 'mnemonic.warning': "Note ces mots dans l'ordre et conserve-les en lieu sûr.", + 'mnemonic.copyWarning': + 'Ne partage jamais ta phrase de récupération. Toute personne disposant de ces mots peut accéder à ton compte.', + 'mnemonic.copied': 'Phrase de récupération copiée dans le presse-papiers', + 'mnemonic.reveal': 'Afficher la phrase', + 'mnemonic.revealPhrase': 'Révéler la phrase de récupération', + 'mnemonic.hidden': 'La phrase de récupération est masquée', + 'privacy.title': 'Confidentialité & Sécurité', + 'privacy.description': 'Rapport de transparence sur les données envoyées aux services externes.', + 'privacy.empty': 'Aucun transfert de données externe détecté.', + 'privacy.whatLeavesComputer': 'Ce qui quitte ton ordinateur', + 'privacy.loading': 'Chargement des détails de confidentialité…', + 'privacy.loadError': + "Impossible de charger la liste de confidentialité en direct. Les contrôles d'analyse ci-dessous fonctionnent toujours.", + 'privacy.noCapabilities': + 'Aucune fonctionnalité ne divulgue actuellement de mouvement de données.', + 'privacy.sentTo': 'Envoyé à', + 'privacy.leavesDevice': "Quitte l'appareil", + 'privacy.staysLocal': 'Reste local', + 'privacy.anonymizedAnalytics': 'Analyses anonymisées', + 'privacy.shareAnonymizedData': "Partager les données d'utilisation anonymisées", + 'privacy.shareAnonymizedDataDesc': + "Aide à améliorer OpenHuman en partageant des rapports de plantage et des analyses d'utilisation anonymes. Toutes les données sont entièrement anonymisées — aucune donnée personnelle, message, clé de portefeuille ou information de session n'est jamais collectée.", + 'privacy.meetingFollowUps': 'Suivis de réunion', + 'privacy.autoHandoffMeet': + "Transmettre automatiquement les transcriptions Google Meet à l'orchestrateur", + 'privacy.autoHandoffMeetDesc': + "Quand un appel Google Meet se termine, l'orchestrateur d'OpenHuman peut lire la transcription et effectuer des actions comme rédiger des messages, planifier des suivis ou publier des résumés sur ton espace Slack connecté. Désactivé par défaut.", + 'privacy.analyticsDisclaimer': + "Toutes les analyses et rapports de bugs sont entièrement anonymisés. Quand activé, on collecte uniquement les informations de plantage, le type d'appareil et l'emplacement des erreurs. On n'accède jamais à tes messages, données de session, clés de portefeuille, clés API ou toute information personnelle identifiable. Tu peux modifier ce paramètre à tout moment.", + 'settings.about.version': 'Version', + 'settings.about.updateAvailable': 'disponible', + 'settings.about.softwareUpdates': 'Mises à jour logicielles', + 'settings.about.lastChecked': 'Dernière vérification', + 'settings.about.checking': 'Vérification…', + 'settings.about.checkForUpdates': 'Rechercher des mises à jour', + 'settings.about.releases': 'Versions', + 'settings.about.releasesDesc': + 'Parcourir les notes de version et les builds précédentes sur GitHub.', + 'settings.about.openReleases': 'Ouvrir les versions GitHub', + 'settings.about.connection': 'Connexion', + 'settings.about.connectionMode': 'Mode', + 'settings.about.connectionModeLocal': 'local', + 'settings.about.connectionModeCloud': 'Nuage', + 'settings.about.connectionModeUnset': 'Non sélectionné', + 'settings.about.serverUrl': 'Serveur URL', + 'settings.about.serverUrlUnavailable': 'Indisponible', + 'settings.about.connectionHelperLocal': + "Généré dans le processus par le shell Tauri au lancement de l'application. Le port est choisi au démarrage, donc ce URL change entre les lancements.", + 'settings.about.connectionHelperCloud': + 'Connecté à un noyau distant. Modifiez cela dans BootCheck ou le sélecteur de mode cloud.', + 'settings.heartbeat.title': 'Battement de coeur et boucles', + 'settings.heartbeat.desc': + 'Contrôlez les cadences de planification en arrière-plan et inspectez la carte de boucle.', + 'settings.ledgerUsage.title': "Registre d'utilisation", + 'settings.ledgerUsage.desc': + 'Dépenses de crédit récentes, calcul du budget et lecture du budget de fond API.', + 'settings.costDashboard.title': 'Tableau de bord des coûts', + 'settings.costDashboard.desc': + "Dépense et combustion de tokens sur 7 jours à travers l'essaim, avec rythme budgétaire et répartition par modèle.", + 'settings.costDashboard.sevenDayCost': 'Coût quotidien sur 7 jours', + 'settings.costDashboard.sevenDayTokens': 'Utilisation du jeton sur 7 jours', + 'settings.costDashboard.totalSpend': 'Total sur 7 jours', + 'settings.costDashboard.monthlyPace': 'Rythme mensuel', + 'settings.costDashboard.budgetLimit': 'Limite de budget', + 'settings.costDashboard.utilization': 'Utilisation', + 'settings.costDashboard.modelBreakdown': 'Répartition par modèle', + 'settings.costDashboard.model': 'Modèle', + 'settings.costDashboard.provider': 'Fournisseur', + 'settings.costDashboard.cost': 'Coût', + 'settings.costDashboard.tokens': 'Jetons', + 'settings.costDashboard.requests': 'Requêtes', + 'settings.costDashboard.percentOfTotal': '% du total', + 'settings.costDashboard.inputTokens': 'Entrée', + 'settings.costDashboard.outputTokens': 'Sortie', + 'settings.costDashboard.budgetNormal': 'Sur la bonne voie', + 'settings.costDashboard.budgetWarning': 'Avertissement', + 'settings.costDashboard.budgetExceeded': 'Dépassé le budget', + 'settings.costDashboard.noBudget': 'Aucune limite définie', + 'settings.costDashboard.noData': 'Aucun coût enregistré pour les 7 derniers jours.', + 'settings.costDashboard.noModels': 'Aucune activité du modèle au cours des 7 derniers jours.', + 'settings.costDashboard.loading': 'Chargement du tableau de bord des coûts…', + 'settings.costDashboard.disabledHint': + 'Le tableau de bord des coûts est désactivé dans la configuration. Définissez [cost.dashboard] enabled = true dans config.toml pour le réactiver.', + 'settings.costDashboard.subtitle': + "Dépenses en direct et combustion de jetons à travers l'essaim. Les barres se rafraîchissent automatiquement toutes les quelques secondes — aucun rechargement de page nécessaire.", + 'settings.costDashboard.summaryAriaLabel': 'Résumé des métriques de coût', + 'settings.costDashboard.lastSevenDays': 'les 7 derniers jours', + 'settings.costDashboard.utilizationOf': 'de', + 'settings.costDashboard.thisMonth': 'ce mois', + 'settings.costDashboard.monthlyPaceHint': + "Dépense mensuelle projetée au taux d'utilisation quotidien actuel (moyenne × 30).", + 'settings.costDashboard.budgetLimitHint': + 'Budget mensuel lu à partir de cost.monthly_limit_usd dans config.toml.', + 'settings.costDashboard.dailyTarget': 'Objectif quotidien', + 'settings.costDashboard.today': "Aujourd'hui", + 'settings.costDashboard.todayBadge': "AUJOURD'HUI", + 'settings.costDashboard.unknownProvider': '—', + 'settings.costDashboard.justNow': "À l'instant", + 'settings.costDashboard.secondsAgo': '{value}s il y a', + 'settings.costDashboard.minutesAgo': '{value}m il y a', + 'settings.costDashboard.hoursAgo': '{value}h il y a', + 'settings.costDashboard.daysAgo': '{value}d il y a', + 'settings.costDashboard.updated': 'Mis à jour', + 'settings.costDashboard.refresh': 'Actualiser', + 'settings.costDashboard.utcNote': 'Jours regroupés en UTC', + 'settings.costDashboard.stackedNote': 'Entrée + sortie empilées', + 'settings.costDashboard.modelBreakdownHint': 'Agrégé sur les 7 derniers jours.', + 'settings.costDashboard.noDataHint': + "Envoyez un message agent — l'utilisation des jetons lors du prochain appel au fournisseur remplira le graphique en environ 10 secondes.", + 'settings.search.title': 'Moteur de recherche', + 'settings.search.menuDesc': + 'Par défaut, utilisez la recherche gérée par OpenHuman ou connectez votre propre fournisseur avec une clé API.', + 'settings.search.description': + "Choisissez le moteur de recherche utilisé par l'agent, ou désactivez entièrement les outils de recherche. Géré utilise le backend d'OpenHuman (sans configuration). Parallel, Brave et Querit s'exécutent directement depuis votre machine avec votre clé API.", + 'settings.search.engineAria': 'Moteur de recherche', + 'settings.search.engineDisabledLabel': 'Disabled', + 'settings.search.engineDisabledDesc': + "Supprimer les outils de recherche du contexte agent et de la liste d'outils disponibles.", + 'settings.search.engineManagedLabel': 'OpenHuman Géré', + 'settings.search.engineManagedDesc': + 'Par défaut. Routé via le backend OpenHuman — aucune clé API requise.', 'settings.search.localManagedUnavailable': 'La recherche gérée par OpenHuman n’est pas disponible pour les utilisateurs locaux. Ajoutez votre propre clé API Parallel ou Brave pour activer la recherche web.', + 'settings.search.engineParallelLabel': 'Parallèle', + 'settings.search.engineParallelDesc': + 'Direct Parallel API: rechercher, extraire, discuter, rechercher, enrichir, outils de jeu de données.', + 'settings.search.engineBraveLabel': 'Brave Recherche', + 'settings.search.engineBraveDesc': + 'Recherche Directe Brave API: outils web, actualités, images et vidéos.', + 'settings.search.engineQueritLabel': 'Il/Elle cherche', + 'settings.search.engineQueritDesc': + 'Direct Querit API: recherche sur le web avec filtres de site, de plage temporelle, de pays et de langue.', + 'settings.search.statusConfigured': 'Configuré', + 'settings.search.statusNeedsKey': 'Nécessite la clé API', + 'settings.search.fallbackToManaged': + "Aucune clé configurée — la recherche reviendra à Managed jusqu'à ce qu'une clé soit enregistrée.", + 'settings.search.getApiKey': 'Obtenir la clé API', + 'settings.search.save': 'Enregistrer', + 'settings.search.clear': 'Effacer', + 'settings.search.show': 'Afficher', + 'settings.search.hide': 'Masquer', + 'settings.search.statusSaving': 'Enregistrement…', + 'settings.search.statusSaved': 'Enregistré.', + 'settings.search.statusError': 'Échec', + 'settings.search.parallelKeyLabel': 'Parallel API clé', + 'settings.search.braveKeyLabel': 'Brave Recherche API clé', + 'settings.search.queritKeyLabel': 'Cherche la clé API', + 'settings.search.placeholderStored': '•••••••• (stocké)', + 'settings.search.placeholderParallel': 'pk_...', + 'settings.search.placeholderBrave': 'BSA...', + 'settings.search.placeholderQuerit': 'Cherche la clé API', + 'settings.search.allowedSitesLabel': 'Sites web autorisés', + 'settings.search.allowedSitesHint': + "Hôtes que l'assistant peut ouvrir et lire — via la récupération web et l'outil navigateur — un par ligne, p. ex. reuters.com. Un hôte couvre également ses sous-domaines. La recherche web elle-même n'est pas limitée par cette liste.", + 'settings.search.allowedSitesAllOn': + "L'assistant peut ouvrir n'importe quel site public. Les adresses locales et privées restent bloquées.", + 'settings.search.allowedSitesPlaceholder': 'reuters.com\napnews.com\ngithub.com', + 'settings.search.allowedSitesSave': 'Enregistrer des sites web', + 'settings.search.accessModeAria': "Mode d'accès Web", + 'settings.search.accessAllowAll': 'Autoriser tout', + 'settings.search.accessCustom': 'Personnalisé', + 'settings.search.accessBlockAll': 'Bloquer tout', + 'settings.search.accessBlockAllHint': + "Tout accès au web est bloqué — l'assistant ne peut ouvrir ni lire aucun site web.", + 'settings.embeddings.title': 'Encastrements', + 'settings.embeddings.description': + "Choisissez le fournisseur d'embeddings qui convertit la mémoire en vecteurs pour la recherche sémantique. Changer le fournisseur, le modèle ou les dimensions invalide les vecteurs stockés et nécessite une réinitialisation complète de la mémoire.", + 'settings.embeddings.providerAria': "Fournisseur d'embeddings", + 'settings.embeddings.statusConfigured': 'Configuré', + 'settings.embeddings.statusNeedsKey': 'Clé API requise', + 'settings.embeddings.apiKeyLabel': 'Clé API {provider}', + 'settings.embeddings.placeholderStored': '•••••••• (stocké)', + 'settings.embeddings.placeholderKey': 'Collez votre clé API…', + 'settings.embeddings.keyStoredEncrypted': + 'Votre clé API est stockée de manière chiffrée sur cet appareil.', + 'settings.embeddings.show': 'Afficher', + 'settings.embeddings.hide': 'Masquer', + 'settings.embeddings.save': 'Enregistrer', + 'settings.embeddings.clear': 'Effacer', + 'settings.embeddings.model': 'Modèle', + 'settings.embeddings.dimensions': 'Dimensions', + 'settings.embeddings.customEndpoint': 'Point de terminaison personnalisé', + 'settings.embeddings.customModelPlaceholder': 'Nom du modèle', + 'settings.embeddings.customDimsPlaceholder': 'Dims La prise en charge du serveur', + 'settings.embeddings.applyCustom': 'Appliquer', + 'settings.embeddings.testConnection': 'Tester la connexion', + 'settings.embeddings.testing': 'Test en cours…', + 'settings.embeddings.testSuccess': 'Connecté — {dims} dimensions', + 'settings.embeddings.testFailed': 'Échec : {error}', + 'settings.embeddings.saving': 'Enregistrement…', + 'settings.embeddings.saved': 'Enregistré.', + 'settings.embeddings.errorPrefix': 'Échec', + 'settings.embeddings.wipeTitle': 'Réinitialiser les vecteurs mémoire ?', + 'settings.embeddings.wipeBody': + "Changer le fournisseur d'embeddings, le modèle ou les dimensions effacera tous les vecteurs mémoire stockés. La mémoire doit être reconstruite avant que la récupération ne fonctionne à nouveau. Cette action est irréversible.", + 'settings.embeddings.cancel': 'Annuler', + 'settings.embeddings.confirmWipe': 'Effacer et appliquer', + 'settings.embeddings.setupTitle': 'Configurer {provider}', + 'settings.embeddings.saveAndSwitch': 'Enregistrer et changer', + 'settings.embeddings.optional': 'optionnel', + 'settings.embeddings.vectorSearchDisabled': + 'La recherche vectorielle est désactivée. Le rappel de la mémoire utilisera uniquement la correspondance de mots-clés et la récence — pas de classement sémantique.', + 'settings.embeddings.clearKey': 'Effacer la clé API', + 'pages.settings.ai.embeddings': 'Intégrations', + 'pages.settings.ai.embeddingsDesc': + "Modèle d'encodage vectoriel pour la récupération de la mémoire", + 'mcp.alphaBadge': 'Alpha', + 'mcp.alphaBannerText': + "Le support du serveur MCP est en phase alpha précoce. Le registre Smithery, le flux d'installation et le câblage des outils peuvent mal fonctionner ou changer de forme entre les versions.", + 'mcp.toolList.noTools': 'Aucun outil disponible.', + 'mcp.setup.secretDialog.title': 'Installation MCP — Entrez le secret', + 'mcp.setup.secretDialog.bodyPrefix': "L'agent de configuration MCP a besoin", + 'mcp.setup.secretDialog.bodySuffix': + ". Votre valeur est envoyée directement au processus principal et n'entre jamais dans la conversation AI.", + 'mcp.setup.secretDialog.inputLabel': 'Valeur', + 'mcp.setup.secretDialog.inputPlaceholder': 'Coller ici', + 'mcp.setup.secretDialog.show': 'Afficher', + 'mcp.setup.secretDialog.hide': 'Masquer', + 'mcp.setup.secretDialog.submit': 'Soumettre', + 'mcp.setup.secretDialog.cancel': 'Annuler', + 'mcp.setup.secretDialog.submitting': 'Soumission…', + 'mcp.setup.secretDialog.errorPrefix': 'Échec de la soumission :', + 'mcp.setup.secretDialog.privacyNote': + 'Stocké de manière chiffrée dans la table de secrets locale MCP. Jamais enregistré ni envoyé à un modèle.', + 'devices.betaBadge': 'Bêta', + 'devices.betaText': + 'Cette fonctionnalité est actuellement en bêta. Associez des iPhone à cet OpenHuman pour les utiliser comme client distant.', 'devices.comingSoonDescription': 'L’appairage des appareils arrive bientôt. Cette page servira à appairer des iPhone et à gérer les appareils connectés.', + 'devices.title': 'Appareils', + 'devices.pairIphone': 'Jumeler l’iPhone', + 'devices.noPaired': 'Aucun appareil jumelé', + 'devices.emptyState': + 'Scannez un code QR sur votre iPhone pour le connecter à cette session OpenHuman.', + 'devices.devicePairedTitle': 'Appareil couplé', + 'devices.devicePairedMessage': 'iPhone connecté avec succès.', + 'devices.deviceRevokedTitle': 'Appareil révoqué', + 'devices.deviceRevokedMessage': '{label} supprimé.', + 'devices.revokeFailedTitle': 'Échec de la révocation', + 'devices.online': 'En ligne', + 'devices.offline': 'Hors ligne', + 'devices.lastSeenNever': 'Jamais', + 'devices.lastSeenNow': "À l'instant", + 'devices.lastSeenMinutes': 'Il y a {count}m', + 'devices.lastSeenHours': 'Il y a {count}h', + 'devices.lastSeenDays': '{count}d il y a', + 'devices.revoke': 'Révoquer', + 'devices.revokeAria': 'Révoquer {label}', + 'devices.confirmRevokeTitle': 'Révoquer l’appareil ?', + 'devices.confirmRevokeBody': + '{label} ne pourra plus se connecter. Cette action est irréversible.', + 'devices.loadFailed': 'Échec du chargement des appareils : {message}', + 'devices.pairModal.title': 'Jumeler l’iPhone', + 'devices.pairModal.loading': 'Génération du code de jumelage…', + 'devices.pairModal.instructions': + 'Ouvrez l’application OpenHuman sur votre iPhone et scannez ce code.', + 'devices.pairModal.expiresIn': 'Le code expire dans ~{count} minute', + 'devices.pairModal.expiresInPlural': 'Le code expire dans ~{count} minutes', + 'devices.pairModal.showDetails': 'Afficher les détails', + 'devices.pairModal.hideDetails': 'Masquer les détails', + 'devices.pairModal.channelId': 'ID de chaîne', + 'devices.pairModal.pairingUrl': 'Couplage URL', + 'devices.pairModal.expiredTitle': 'Le code QR a expiré', + 'devices.pairModal.expiredBody': 'Générez un nouveau code pour poursuivre le jumelage.', + 'devices.pairModal.generateNewCode': 'Générer un nouveau code', + 'devices.pairModal.successTitle': 'iPhone jumelé', + 'devices.pairModal.autoClose': 'Fermeture automatique…', + 'devices.pairModal.errorPrefix': 'Échec de la création du couplage : {message}', + 'devices.pairModal.errorTitle': 'Un problème est survenu', + 'devices.pairModal.copyUrl': 'Copier', + 'mcp.catalog.searchAria': 'Rechercher dans le catalogue Smithery', + 'mcp.catalog.searchPlaceholder': 'Rechercher dans le catalogue Smithery...', + 'mcp.catalog.loadFailed': 'Échec du chargement du catalogue', + 'mcp.catalog.noResults': 'Aucun serveur trouvé.', + 'mcp.catalog.noResultsFor': 'Aucun serveur trouvé pour "{query}".', + 'mcp.catalog.loadMore': 'Charger plus', + 'mcp.configAssistant.title': 'Assistant de configuration', + 'mcp.configAssistant.empty': + "Demandez à propos de la configuration, des variables d'environnement requises ou des étapes de configuration.", + 'mcp.configAssistant.suggestedValues': 'Valeurs suggérées :', + 'mcp.configAssistant.valueHidden': '(valeur masquée)', + 'mcp.configAssistant.applySuggested': 'Appliquer les valeurs suggérées', + 'mcp.configAssistant.reinstallHint': 'Réinstallez avec ces valeurs pour les appliquer.', + 'mcp.configAssistant.thinking': 'Je réfléchis...', + 'mcp.configAssistant.inputPlaceholder': + 'Posez une question (Entrée pour envoyer, Maj+Entrée pour un retour à la ligne)', + 'mcp.configAssistant.send': 'Envoyer', + 'mcp.configAssistant.failedResponse': "Échec de l'obtention de la réponse", + 'mcp.toolList.availableSingular': '{count} outil disponible', + 'mcp.toolList.availablePlural': '{count} outils disponibles', + 'mcp.toolList.tryTool': 'Essayer', + 'mcp.toolList.tryToolAria': "Ouvrir le terrain d'exécution pour {name}", + 'mcp.playground.title': 'Exécuter {name}', + 'mcp.playground.close': 'Fermer le terrain de jeu', + 'mcp.playground.inputSchema': "Schéma d'entrée", + 'mcp.playground.argsLabel': 'Arguments (JSON)', + 'mcp.playground.argsHelp': + "Type JSON correspondant au schéma d'entrée. Une entrée vide est traitée comme {}.", + 'mcp.playground.runShortcut': '⌘/Ctrl + Entrée pour exécuter', + 'mcp.playground.format': 'Format', + 'mcp.playground.invalidJson': 'JSON invalide', + 'mcp.playground.run': "Exécuter l'outil", + 'mcp.playground.running': 'Course…', + 'mcp.playground.result': 'Résultat', + 'mcp.playground.resultError': "L'outil a renvoyé une erreur", + 'mcp.playground.copyResult': 'Copier le résultat', + 'mcp.playground.copied': 'Copié', + 'mcp.playground.history': 'Histoire', + 'mcp.playground.historyEmpty': 'Aucune invocation pour le moment dans cette session.', + 'mcp.playground.historyLoad': 'Charger', + 'mcp.playground.unexpectedError': "Erreur inattendue lors de l'appel de l'outil.", + 'mcp.catalog.deployed': 'Déployé', + 'mcp.catalog.installCount': '{count} installe', + 'app.update.dismissNotification': 'Ignorer la notification de mise à jour', + 'bootCheck.rpcAuthSuffix': 'tous les RPC.', + 'app.localAiDownload.expandAria': 'Développer la progression du téléchargement', + 'app.localAiDownload.collapseAria': 'Réduire la progression du téléchargement', + 'app.localAiDownload.dismissAria': 'Ignorer la notification de téléchargement', + 'mobile.nav.ariaLabel': 'Navigation mobile', + 'progress.stepsAria': 'Étapes de progression', + 'progress.stepAria': 'Étape {current} de {total}', + 'workspace.vaultsTitle': 'Coffres de connaissances', + 'workspace.vaultsDesc': + 'Pointez sur un dossier local ; les fichiers sont fragmentés et mis en miroir dans la mémoire.', + 'calls.title': 'Appels', + 'calls.comingSoonBody': "Les appels assistés par l'IA arriveront bientôt. Restez à l'écoute.", + 'art.rotatingTetrahedronAria': 'Vaisseau spatial à tétraèdre inversé rotatif', + 'mcp.installed.title': 'Installé', + 'mcp.installed.browseCatalog': 'Parcourir le catalogue', + 'mcp.installed.empty': 'Aucun serveur MCP installé pour le moment.', + 'mcp.installed.toolSingular': 'Outil {count}', + 'mcp.installed.toolPlural': 'Outils {count}', + 'mcp.health.title': 'Santé', + 'mcp.health.summaryAria': "Résumé de l'état de santé de la connexion MCP", + 'mcp.health.connectedCount': '{count} connecté', + 'mcp.health.connectingCount': '{count} en connexion', + 'mcp.health.errorCount': 'Erreur {count}', + 'mcp.health.disconnectedCount': '{count} inactif', + 'mcp.health.retryAll': 'Réessayer tout ({count})', + 'mcp.health.retryAllAria': 'Réessayer tous les serveurs {count} MCP en erreur', + 'mcp.health.disconnectAll': 'Déconnecter tout ({count})', + 'mcp.health.disconnectAllAria': 'Déconnectez tous les serveurs {count} connectés MCP', + 'mcp.health.disconnectConfirm.title': 'Déconnecter tous les serveurs MCP?', + 'mcp.health.disconnectConfirm.body': + "Cela déconnectera {count} serveurs MCP actuellement connectés. Les configurations installées et les secrets sont conservés ; vous pourrez reconnecter n'importe quel serveur ultérieurement.", + 'mcp.health.disconnectConfirm.cancel': 'Annuler', + 'mcp.health.disconnectConfirm.confirm': 'Déconnecter tout', + 'mcp.health.opErrorGeneric': "L'opération en masse a échoué. Voir les journaux.", + 'mcp.health.bulkPartialFailure': + '{failed} sur {total} serveurs ont échoué. Consultez les journaux.', + 'mcp.installed.search.landmarkAria': 'Rechercher les serveurs MCP installés', + 'mcp.installed.search.inputAria': 'Filtrer les serveurs MCP installés par nom', + 'mcp.installed.search.placeholder': 'Filtrer les serveurs…', + 'mcp.installed.search.clearAria': 'Effacer le filtre', + 'mcp.installed.search.countMatches': '{shown} des serveurs {total}', + 'mcp.installed.search.noMatches': 'Aucun serveur ne correspond à « {query} ».', + 'mcp.inventory.openButton': 'Inventaire', + 'mcp.inventory.openAria': "Ouvrez le panneau d'inventaire partageable MCP", + 'mcp.inventory.title': 'Inventaire MCP partageable', + 'mcp.inventory.subtitle': + "Exportez vos serveurs MCP installés sous forme de manifeste portable, sans secrets, ou importez-en un depuis un coéquipier. Les valeurs d'environnement secrètes ne sont jamais incluses ni importées.", + 'mcp.inventory.close': "Fermer le panneau d'inventaire", + 'mcp.inventory.tablistAria': "Sections d'inventaire", + 'mcp.inventory.tab.export': 'Exporter', + 'mcp.inventory.tab.import': 'Importer', + 'mcp.inventory.export.empty': + "Aucun serveur MCP installé pour le moment — rien à exporter. Installez-en un depuis le catalogue d'abord.", + 'mcp.inventory.export.privacyTitle': "Qu'y a-t-il dans ce manifeste", + 'mcp.inventory.export.privacyBody': + "Noms de serveur, noms qualifiés, noms de clés de variables d'environnement et seule la configuration non secrète. Les valeurs secrètes, les identifiants de votre machine et les horodatages par installation sont intentionnellement supprimés.", + 'mcp.inventory.export.serverCount': 'Serveurs {count} dans ce manifeste', + 'mcp.inventory.export.copy': 'Copier', + 'mcp.inventory.export.copied': 'Copié', + 'mcp.inventory.export.copyAria': 'Copiez le manifeste JSON dans le presse-papiers', + 'mcp.inventory.export.download': 'Télécharger', + 'mcp.inventory.export.downloadAria': 'Téléchargez le manifeste en tant que fichier JSON', + 'mcp.inventory.import.trustTitle': 'Traitez les manifests importés comme du code non fiable', + 'mcp.inventory.import.trustBody': + "Un serveur MCP est un outil que vous accordez à votre agent. N'importez des manifests que de sources que vous connaissez et en qui vous avez confiance. Chaque installation nécessite votre clic explicite; rien n'est installé automatiquement.", + 'mcp.inventory.import.pasteLabel': 'Collez le manifeste JSON', + 'mcp.inventory.import.pastePlaceholder': + 'Collez un manifeste ici, ou téléchargez un fichier.json ci-dessous.', + 'mcp.inventory.import.preview': 'Aperçu', + 'mcp.inventory.import.clear': 'Clair', + 'mcp.inventory.import.uploadFile': 'ou téléverser un fichier.json', + 'mcp.inventory.import.uploadFileAria': 'Téléchargez un fichier manifest.json', + 'mcp.inventory.import.fileTooLarge': + 'Le fichier est trop volumineux (plus de 1 Mo). Refus de le charger.', + 'mcp.inventory.import.fileReadFailed': 'Impossible de lire le fichier.', + 'mcp.inventory.import.parseErrorPrefix': "Impossible d'analyser le manifeste:", + 'mcp.inventory.import.previewHeading': 'Aperçu', + 'mcp.inventory.import.previewCounts': + 'Serveurs {total} — {newly} nouveaux, {already} déjà installés', + 'mcp.inventory.import.previewEmpty': 'Le manifeste ne contient aucun serveur.', + 'mcp.inventory.import.exportedFrom': 'Exporté de {exporter}', + 'mcp.inventory.import.exportedAt': 'chez {when}', + 'mcp.inventory.import.statusNew': 'Nouveau', + 'mcp.inventory.import.statusAlreadyInstalled': 'Déjà installé', + 'mcp.inventory.import.envKeysLabel': 'Clés Env', + 'mcp.inventory.import.install': 'Installer', + 'mcp.inventory.import.installAria': 'Installez {name} à partir de ce manifeste', + 'mcp.inventory.import.skipped': 'ignoré', + 'mcp.inventory.parseError.empty': 'Le manifeste est vide.', + 'mcp.inventory.parseError.invalidJson': 'JSON invalide.', + 'mcp.inventory.parseError.rootNotObject': 'Le manifeste doit être un objet JSON à la racine.', + 'mcp.inventory.parseError.unsupportedSchema': + "Schéma de manifeste non pris en charge — ce fichier n'a pas été produit par un exportateur compatible.", + 'mcp.inventory.parseError.missingExportedAt': 'Champ `exported_at` manquant ou invalide.', + 'mcp.inventory.parseError.missingExportedBy': 'Champ `exported_by` manquant ou invalide.', + 'mcp.inventory.parseError.invalidServers': 'Tableau `servers` manquant ou invalide.', + 'mcp.inventory.parseError.serverNotObject': "Une entrée de serveur n'est pas un objet.", + 'mcp.inventory.parseError.serverMissingQualifiedName': + 'Une entrée de serveur manque de son nom_qualifié.', + 'mcp.inventory.parseError.serverMissingDisplayName': + 'Une entrée de serveur manque de son display_name.', + 'mcp.inventory.parseError.serverEnvKeysNotArray': + "Une entrée de serveur possède un champ env_keys qui n'est pas un tableau de chaînes.", + 'mcp.inventory.parseError.serverContainsEnv': + "Une entrée de serveur contient une carte de valeurs `env`. Refus d'importer — les manifestes ne doivent contenir que des env_keys (noms), jamais de valeurs secrètes.", + 'mcp.inventory.parseError.duplicateQualifiedName': + 'Nom_qualifié dupliqué trouvé dans le manifeste. Chaque serveur doit apparaître au maximum une fois.', + 'mcp.tab.loading': 'Chargement des serveurs MCP...', + 'mcp.tab.emptyDetail': 'Sélectionnez un serveur ou parcourez le catalogue.', + 'mcp.install.loadingDetail': 'Chargement des détails du serveur...', + 'mcp.install.back': 'Retourner', + 'mcp.install.title': 'Installer {name}', + 'mcp.install.requiredEnv': "Variables d'environnement requises", + 'mcp.install.enterValue': 'Saisissez {key}', + 'mcp.install.show': 'Afficher', + 'mcp.install.hide': 'Masquer', + 'mcp.install.configLabel': 'Config (JSON facultatif)', + 'mcp.install.configPlaceholder': '{"key": "value"}', + 'mcp.install.missingRequired': '"{key}" est requis', + 'mcp.install.invalidJson': "La configuration JSON n'est pas valide JSON", + 'mcp.install.failedDetail': 'Échec du chargement des détails du serveur', + 'mcp.install.failedInstall': "Échec de l'installation", + 'mcp.install.button': 'Installation', + 'mcp.install.installing': 'Installation...', + 'mcp.detail.suggestedEnvReady': "Valeurs d'environnement suggérées prêtes", + 'mcp.detail.suggestedEnvBody': + 'Réinstallez ce serveur avec les valeurs suggérées pour les appliquer: {keys}', + 'mcp.detail.connect': 'Connecter', + 'mcp.detail.connecting': 'Connexion...', + 'mcp.detail.disconnect': 'Déconnecter', + 'mcp.detail.hideAssistant': "Cacher l'assistant", + 'mcp.detail.helpConfigure': 'Aidez-moi à configurer', + 'mcp.detail.confirmUninstall': 'Confirmer la désinstallation ?', + 'mcp.detail.confirmUninstallAction': 'Oui, désinstaller', + 'mcp.detail.uninstall': 'Désinstaller', + 'mcp.detail.envVars': "Variables d'environnement", + 'mcp.detail.tools': 'Outils', + 'onboarding.skipForNow': "Passer pour l'instant", + 'onboarding.localAI.continueWithCloud': 'Continuer avec Cloud', + 'onboarding.localAI.useLocalAnyway': + "Utiliser l'IA locale quand même (non recommandé pour votre appareil)", + 'onboarding.localAI.useLocalInstead': + "Utiliser l'IA locale à la place (connecter Ollama maintenant)", + 'onboarding.localAI.setupIssue': "La configuration de l'IA locale a rencontré un problème", + 'autonomy.title': "Autonomie de l'agent", + 'autonomy.maxActionsLabel': 'Actions maximales par heure', + 'autonomy.maxActionsHelp': + "Nombre maximum d'actions d'outil qu'un agent peut exécuter par heure glissante. La nouvelle valeur s'applique à votre prochaine conversation. Les tâches planifiées et les écouteurs de canaux conservent leur limite actuelle jusqu'au redémarrage d'OpenHuman.", + 'autonomy.statusSaving': 'Enregistrement…', + 'autonomy.statusSaved': 'Enregistré.', + 'autonomy.statusFailed': 'Échec', + 'autonomy.unlimitedNote': 'Illimité — limitation de débit désactivée.', + 'autonomy.invalidIntegerMsg': + 'Doit être un entier positif (utilisez le préréglage Illimité pour ne pas définir de limite).', + 'autonomy.presetUnlimited': 'Illimité (par défaut)', + 'triggers.toggleFailed': 'Échec de {action} pour {trigger} : {message}', + 'settings.ai.overview': "Vue d'ensemble du système IA", + 'settings.ai.configStatus': 'État de la configuration', + 'settings.ai.fallbackMode': 'Mode de secours', + 'settings.ai.loadedFromRuntime': 'Chargé depuis le runtime', + 'settings.ai.loadingDuration': 'Durée de chargement', + 'settings.ai.localRuntime': 'Runtime de modèle local', + 'settings.ai.openManager': 'Ouvrir le gestionnaire', + 'settings.ai.retryDownload': 'Relancer le téléchargement', + 'settings.ai.state': 'État', + 'settings.ai.targetModel': 'Modèle cible', + 'settings.ai.download': 'Télécharger', + 'settings.ai.localModelUnavailable': 'État du modèle local indisponible.', + 'settings.ai.soulConfig': 'Configuration de la persona SOUL', + 'settings.ai.refreshing': 'Actualisation…', + 'settings.ai.refreshSoul': 'Actualiser SOUL', + 'settings.ai.loadingSoul': 'Chargement de la configuration SOUL…', + 'settings.ai.identity': 'Identité', + 'settings.ai.personality': 'Personnalité', + 'settings.ai.safetyRules': 'Règles de sécurité', + 'settings.ai.source': 'Source', + 'settings.ai.loaded': 'Chargé', + 'settings.ai.toolsConfig': 'Configuration TOOLS', + 'settings.ai.refreshTools': 'Actualiser TOOLS', + 'settings.ai.toolsAvailable': 'Outils disponibles', + 'settings.ai.tools': 'outils', + 'settings.ai.activeSkills': 'Compétences actives', + 'settings.ai.skills': 'compétences', + 'settings.ai.skillsOverview': "Vue d'ensemble des compétences", + 'settings.ai.refreshingAll': 'Tout actualiser…', + 'settings.ai.refreshAll': 'Actualiser toute la configuration IA', + 'settings.notifications.suppressAll': 'Supprimer toutes les notifications', + 'settings.notifications.suppressAllDesc': + "Bloquer toutes les notifications OS des apps intégrées, quel que soit l'état de mise au premier plan.", + 'settings.notifications.toggleDnd': 'Activer/désactiver Ne pas déranger', + 'settings.notifications.categories': 'Catégories', + 'settings.notifications.categoryFooter': + "Désactiver une catégorie empêche les nouvelles notifications de ce type d'apparaître dans le centre de notifications. Les notifications existantes restent jusqu'à ce qu'elles soient effacées.", + 'settings.billing.movedToWeb': 'La facturation est maintenant sur le web', + 'settings.billing.openDashboard': 'Ouvrir le tableau de bord de facturation', + 'settings.billing.movedToWebDesc': + "Les changements d'abonnement, méthodes de paiement, crédits et factures sont désormais gérés sur TinyHumans en ligne.", + 'settings.billing.backToSettings': 'Retour aux paramètres', + 'settings.billing.openingBrowser': 'Ouverture du navigateur…', + 'settings.billing.browserNotOpen': + "Si ton navigateur ne s'est pas ouvert, utilise le bouton ci-dessus.", + 'settings.billing.browserOpenFailed': + "Le navigateur n'a pas pu s'ouvrir automatiquement. Utilise le bouton ci-dessus.", + 'settings.tools.chooseCapabilities': + "Choisis les fonctionnalités qu'OpenHuman peut utiliser en ton nom.", + 'settings.tools.saveChanges': 'Enregistrer les modifications', + 'settings.tools.preferencesSaved': 'Préférences enregistrées', + 'settings.tools.saveFailed': "Échec de l'enregistrement des préférences. Réessaie.", + 'settings.screenAwareness.mode': 'Mode', + 'settings.screenAwareness.allExceptBlacklist': 'Tout sauf la liste noire', + 'settings.screenAwareness.whitelistOnly': 'Liste blanche uniquement', + 'settings.screenAwareness.screenMonitoring': "Surveillance de l'écran", + 'settings.screenAwareness.saveSettings': 'Enregistrer les paramètres', + 'settings.screenAwareness.session': 'Session', + 'settings.screenAwareness.status': 'État', + 'settings.screenAwareness.active': 'Actif', + 'settings.screenAwareness.stopped': 'Arrêté', + 'settings.screenAwareness.remaining': 'Restant', + 'settings.screenAwareness.startSession': 'Démarrer la session', + 'settings.screenAwareness.stopSession': 'Arrêter la session', + 'settings.screenAwareness.analyzeNow': 'Analyser maintenant', + 'settings.screenAwareness.macosOnly': + "La capture d'écran et les contrôles d'autorisation de la surveillance de l'écran sont actuellement pris en charge sur macOS uniquement.", + 'connections.comingSoon': 'Bientôt disponible', + 'connections.setUp': 'Configurer', + 'connections.configured': 'Configuré', + 'connections.unavailable': 'Indisponible', + 'connections.checking': 'Vérification…', + 'connections.walletConfigured': + 'Les identités locales EVM, BTC, Solana et Tron sont configurées depuis ta phrase de récupération.', + 'connections.walletReady': + 'Configure les identités locales EVM, BTC, Solana et Tron depuis une seule phrase de récupération.', + 'connections.walletError': + "Impossible de vérifier l'état du portefeuille. Appuie pour réessayer depuis le panneau de phrase de récupération.", + 'connections.walletChecking': "Vérification de l'état du portefeuille…", + 'connections.walletIdentities': 'Identités de portefeuille', + 'connections.walletDerived': + 'Dérivé localement depuis ta phrase de récupération et stocké comme métadonnées sécurisées uniquement.', + 'connections.privacySecurity': 'Confidentialité & Sécurité', + 'connections.privacySecurityDesc': + "Toutes les données et informations d'identification sont stockées localement avec une politique de zéro rétention de données. Tes informations sont chiffrées et ne sont jamais partagées avec des tiers.", + 'channels.status.connecting': 'Connexion en cours', + 'channels.status.notConfigured': 'Non configuré', + 'channels.noActiveRoute': 'Aucune route active', + 'channels.activeRoute': 'Route active', + 'channels.loadingDefinitions': 'Chargement des définitions de canaux…', + 'channels.channelConnections': 'Connexions de canaux', + 'channels.configureAuthModes': + "Configurer les modes d'authentification pour chaque canal de messagerie.", + 'channels.configNotAvailable': 'Configuration pour', + 'channels.channel': 'canal', + 'devOptions.coreModeNotSet': 'Mode core : non défini', + 'devOptions.coreModeNotSetDesc': + "Le sélecteur de vérification au démarrage n'a pas encore été confirmé. Utilise Changer de mode dans le sélecteur pour choisir Local ou Cloud.", + 'devOptions.local': 'local', + 'devOptions.embeddedCoreSidecar': 'Sidecar core intégré', + 'devOptions.sidecarSpawned': + "Lancé en processus interne par le shell Tauri au démarrage de l'app.", + 'devOptions.cloud': 'Nuage', + 'devOptions.remoteCoreRpc': 'RPC core distant', + 'devOptions.token': 'Jeton', + 'devOptions.tokenNotSet': 'non défini — le RPC renverra 401', + 'devOptions.triggerSentryTest': 'Déclencher un test Sentry (staging)', + 'devOptions.triggerSentryTestDesc': + 'Envoie une erreur balisée pour vérifier le pipeline Sentry. Issue #1072 — à supprimer après vérification.', + 'devOptions.sendTestEvent': 'Envoyer un événement de test', + 'devOptions.sending': 'Envoi…', + 'devOptions.eventSent': 'Événement envoyé', + 'devOptions.sentryDisabled': '(aucun identifiant - Sentry désactivé dans cette version)', + 'devOptions.failed': 'Échec', + 'devOptions.appLogs': "Journaux de l'app", + 'devOptions.appLogsDesc': + 'Ouvrir le dossier contenant les fichiers journaux quotidiens. Joins le fichier le plus récent quand tu signales un problème.', + 'devOptions.openLogsFolder': 'Ouvrir le dossier des journaux', + 'mnemonic.phraseSaved': 'Phrase de récupération enregistrée', + 'mnemonic.walletReady': + 'Les identités de portefeuille multi-chaîne sont prêtes. Retour aux paramètres…', + 'mnemonic.writeDownWords': 'Note ces', + 'mnemonic.wordsInOrder': + "mots dans l'ordre et conserve-les en lieu sûr. Cette phrase sécurise ta clé de chiffrement locale et tes identités de portefeuille EVM, BTC, Solana et Tron.", + 'mnemonic.cannotRecover': + 'Cette phrase ne peut jamais être récupérée si elle est perdue et doit rester entièrement locale sur ton appareil.', + 'mnemonic.copyToClipboard': 'Copier dans le presse-papiers', + 'mnemonic.alreadyHavePhrase': "J'ai déjà une phrase de récupération", + 'mnemonic.consentSaved': + "J'ai sauvegardé cette phrase et j'accepte de l'utiliser pour la configuration du portefeuille local", + 'mnemonic.enterPhraseToRestore': + "Saisis ta phrase de récupération ci-dessous pour restaurer tes identités de portefeuille locales, ou colle la phrase complète dans n'importe quel champ (12 mots pour les nouvelles sauvegardes ; les phrases de 24 mots des versions antérieures fonctionnent toujours).", + 'mnemonic.words': 'Mots', + 'mnemonic.validPhrase': 'Phrase de récupération valide', + 'mnemonic.generateNewPhrase': 'Générer une nouvelle phrase de récupération à la place', + 'mnemonic.securingData': 'Sécurisation de tes données…', + 'mnemonic.saveRecoveryPhrase': 'Enregistrer la phrase de récupération', + 'mnemonic.userNotLoaded': 'Utilisateur non chargé. Reconnecte-toi ou actualise la page.', + 'mnemonic.invalidPhrase': 'Phrase de récupération invalide. Vérifie tes mots et réessaie.', + 'mnemonic.somethingWentWrong': "Une erreur s'est produite. Réessaie.", + 'team.failedToCreate': "Échec de la création de l'équipe", + 'team.invalidInviteCode': "Code d'invitation invalide ou expiré", + 'team.failedToSwitch': "Échec du changement d'équipe", + 'team.failedToLeave': "Échec de la sortie de l'équipe", + 'team.role.owner': 'Propriétaire', + 'team.role.admin': 'Administrateur', + 'team.role.billingManager': 'Gestionnaire de facturation', + 'team.role.member': 'Membre', + 'team.active': 'Actif', + 'team.personalTeam': 'Équipe personnelle', + 'team.manageTeam': "Gérer l'équipe", + 'team.switching': 'Changement…', + 'team.switch': 'Changer', + 'team.leaving': 'Départ…', + 'team.leave': 'Quitter', + 'team.yourTeams': 'Tes équipes', + 'team.createNewTeam': 'Créer une nouvelle équipe', + 'team.teamName': "Nom de l'équipe", + 'team.creating': 'Création…', + 'team.joinExistingTeam': 'Rejoindre une équipe existante', + 'team.inviteCode': "Code d'invitation", + 'team.joining': 'Adhésion…', + 'team.join': 'Rejoindre', + 'team.leaveTeam': "Quitter l'équipe", + 'team.confirmLeave': 'Es-tu sûr de vouloir quitter', + 'team.leaveWarning': + "Tu perdras l'accès à l'équipe et à toutes ses ressources. Tu auras besoin d'une nouvelle invitation pour la rejoindre.", + 'team.management': "Gestion de l'équipe", + 'team.notFound': 'Équipe introuvable', + 'team.accessDenied': 'Accès refusé', + 'team.members': 'Membres', + 'team.membersDesc': "Gérer les membres et les rôles de l'équipe", + 'team.invites': 'Invites', + 'team.invitesDesc': "Générer et gérer les codes d'invitation", + 'team.settings': "Paramètres de l'équipe", + 'team.settingsDesc': "Modifier le nom et les paramètres de l'équipe", + 'team.editSettings': "Modifier les paramètres de l'équipe", + 'team.enterName': "Entrer le nom de l'équipe", + 'team.saving': 'Enregistrement...', + 'team.saveChanges': 'Enregistrer les modifications', + 'team.delete': "Supprimer l'équipe", + 'team.deleteDesc': 'Supprimer définitivement cette équipe', + 'team.deleting': 'Suppression...', + 'team.failedToUpdate': "Échec de la mise à jour de l'équipe", + 'team.failedToDelete': "Échec de la suppression de l'équipe", + 'team.manageTitle': 'Gérer {name}', + 'team.planCreated': '{plan} Plan • Créé {date}', + 'team.confirmDelete': 'Êtes-vous sûr de vouloir supprimer {name} ?', + 'team.deleteWarning': + "Cette action est irréversible. Toutes les données de l'équipe seront définitivement supprimées.", + 'voice.title': 'Dictée vocale', + 'voice.settings': 'Paramètres vocaux', + 'voice.settingsDesc': + 'Maintiens le raccourci pour dicter et insérer du texte dans le champ actif.', + 'voice.hotkey': 'Raccourci', + 'voice.activationMode': "Mode d'activation", + 'voice.tapToToggle': 'Appuyer pour activer/désactiver', + 'voice.writingStyle': "Style d'écriture", + 'voice.verbatimTranscription': 'Transcription verbatim', + 'voice.naturalCleanup': 'Nettoyage naturel', + 'voice.autoStart': 'Démarrer le serveur vocal automatiquement avec le core', + 'voice.customDictionary': 'Dictionnaire personnalisé', + 'voice.customDictionaryDesc': + 'Ajoute des noms, termes techniques et mots du domaine pour améliorer la précision de la reconnaissance.', + 'voice.addWord': 'Ajouter un mot…', + 'voice.sttDisabled': + "La dictée vocale est désactivée jusqu'à ce que le modèle STT local soit téléchargé et prêt.", + 'voice.openLocalAiModel': 'Ouvrir le modèle IA local', + 'voice.serverRestarted': 'Serveur vocal redémarré avec les nouveaux paramètres.', + 'voice.settingsSaved': 'Paramètres vocaux enregistrés.', + 'voice.serverStarted': 'Serveur vocal démarré.', + 'voice.serverStopped': 'Serveur vocal arrêté.', + 'voice.saveVoiceSettings': 'Enregistrer les paramètres vocaux', + 'voice.startVoiceServer': 'Démarrer le serveur vocal', + 'voice.stopVoiceServer': 'Arrêter le serveur vocal', + 'voice.debugTitle': 'Débogage vocal', + 'voice.failedToLoadSettings': 'Échec du chargement des paramètres vocaux', + 'voice.failedToSaveSettings': 'Échec de la sauvegarde des paramètres vocaux', + 'voice.failedToStartServer': 'Échec du démarrage du serveur vocal', + 'voice.failedToStopServer': "Échec de l'arrêt du serveur vocal", + 'voice.sttDisabledPrefix': + "La dictée vocale est désactivée jusqu'au téléchargement du modèle STT local. Utilisez le", + 'voice.sttDisabledSuffix': 'ci-dessus pour installer Whisper.', + 'voice.debug.failedToLoadVoiceDebugData': 'Échec du chargement des données de débogage vocal.', + 'voice.debug.settingsSaved': 'Paramètres de débogage enregistrés.', + 'voice.debug.failedToSaveSettings': 'Échec de la sauvegarde des paramètres vocaux', + 'voice.debug.runtimeStatus': "État du moteur d'exécution", + 'voice.debug.runtimeStatusDesc': + 'Diagnostics en direct pour le serveur vocal et le moteur de reconnaissance vocale.', + 'voice.debug.server': 'Serveur', + 'voice.debug.unavailable': 'Indisponible', + 'voice.debug.ready': 'Prêt', + 'voice.debug.notReady': 'Non prêt', + 'voice.debug.hotkey': 'Raccourci', + 'voice.debug.notAvailable': 'n/a', + 'voice.debug.mode': 'Mode', + 'voice.debug.transcriptions': 'Transcriptions', + 'voice.debug.serverError': 'Erreur du serveur', + 'voice.debug.advancedSettings': 'Paramètres avancés', + 'voice.debug.advancedSettingsDesc': + "Paramètres de réglage fin pour l'enregistrement et la détection du silence.", + 'voice.debug.minimumRecordingSeconds': "Durée minimale d'enregistrement (secondes)", + 'voice.debug.silenceThreshold': 'Seuil de silence (RMS)', + 'voice.debug.silenceThresholdDesc': + "Les enregistrements dont l'énergie est inférieure à ce seuil sont traités comme du silence et ignorés. Plus bas = plus sensible.", + 'voice.providers.saved': 'Fournisseurs de voix enregistrés.', + 'voice.providers.failedToSave': 'Échec de la sauvegarde des fournisseurs vocaux', + 'voice.providers.ellipsis': '…', + 'voice.providers.installing': 'Installation de', + 'voice.providers.installingBusy': 'Installation…', + 'voice.providers.reinstallLocally': 'Réinstaller localement', + 'voice.providers.repair': 'Réparer', + 'voice.providers.retryLocally': 'Réessayez localement', + 'voice.providers.installLocally': 'Installez localement', + 'voice.providers.whisperReady': 'Whisper est prêt.', + 'voice.providers.whisperInstallStarted': 'Installation de Whisper démarrée', + 'voice.providers.queued': 'queued', + 'voice.providers.failedToInstallWhisper': "Échec de l'installation de Whisper", + 'voice.providers.piperReady': 'Piper est prêt.', + 'voice.providers.piperInstallStarted': 'Installation de Piper démarrée', + 'voice.providers.failedToInstallPiper': "Échec de l'installation de Piper", + 'voice.providers.title': 'Fournisseurs de voix', + 'voice.providers.desc': + "Choisissez où la transcription et la synthèse s'exécutent. Utilisez les boutons Installer localement pour télécharger les binaires et modèles dans votre espace de travail. Les fournisseurs locaux peuvent être enregistrés avant la fin de l'installation — aucune configuration manuelle de WHISPER_BIN ou PIPER_BIN requise.", + 'voice.providers.sttProvider': 'Fournisseur de synthèse vocale', + 'voice.providers.sttProviderAria': 'Fournisseur STT', + 'voice.providers.cloudWhisperProxy': 'Cloud (proxy Whisper)', + 'voice.providers.localWhisper': 'Whisper local', + 'voice.providers.installRequired': '(installation requise)', + 'voice.providers.whisperInstalledTitle': 'Whisper est installé. Cliquez pour réinstaller.', + 'voice.providers.whisperDownloadTitle': + 'Télécharger whisper.cpp et le modèle GGML dans votre espace de travail.', + 'voice.providers.installed': 'Installé', + 'voice.providers.installFailed': "Échec de l'installation", + 'voice.providers.notInstalled': 'Non installé', + 'voice.providers.whisperModel': 'Modèle Whisper', + 'voice.providers.whisperModelAria': 'Modèle Whisper', + 'voice.providers.whisperModelTiny': 'Petit (39 Mo, le plus rapide)', + 'voice.providers.whisperModelBase': 'Base (74 Mo)', + 'voice.providers.whisperModelSmall': 'Petit (244 Mo)', + 'voice.providers.whisperModelMedium': 'Moyen (769 Mo, recommandé)', + 'voice.providers.whisperModelLargeTurbo': 'Grand v3 Turbo (1,5 Go, meilleure précision)', + 'voice.providers.ttsProvider': 'Fournisseur de synthèse vocale', + 'voice.providers.ttsProviderAria': 'Fournisseur TTS', + 'voice.providers.cloudElevenLabsProxy': 'Cloud (proxy ElevenLabs)', + 'voice.providers.localPiper': 'Piper local', + 'voice.providers.piperInstalledTitle': 'Piper est installé. Cliquez pour réinstaller.', + 'voice.providers.piperDownloadTitle': + 'Télécharger Piper et la voix en_US-lessac-medium intégrée dans votre espace de travail.', + 'voice.providers.piperVoice': 'Voix Piper', + 'voice.providers.piperVoiceAria': 'Voix Piper', + 'voice.providers.customVoiceOption': 'Autre (tapez ci-dessous)…', + 'voice.providers.customVoiceAria': 'Piper voice id (personnalisé)', + 'voice.providers.customVoicePlaceholder': 'en_US-lessac-medium', + 'voice.providers.piperVoicesDesc': + 'Les voix proviennent de huggingface.co/rhasspy/piper-voices. Changer de voix peut nécessiter un clic sur Installer/Réinstaller pour télécharger le nouveau fichier .onnx.', + 'voice.providers.mascotVoice': 'Voix de la mascotte', + 'voice.providers.mascotVoiceDescPrefix': + 'La voix ElevenLabs que la mascotte utilise pour ses réponses vocales est configurée sous', + 'voice.providers.mascotSettings': 'Paramètres de la mascotte', + 'voice.providers.mascotVoiceDescSuffix': '.', + 'voice.providers.hotkeyPlaceholder': 'Fn', + 'voice.providers.piperPreset.lessacMedium': 'US · Lessac (neutre, recommandé)', + 'voice.providers.piperPreset.lessacHigh': 'États-Unis · Lessac (qualité supérieure, plus grand)', + 'voice.providers.piperPreset.ryanMedium': 'États-Unis · Ryan (homme)', + 'voice.providers.piperPreset.amyMedium': 'États-Unis · Amy (femme)', + 'voice.providers.piperPreset.librittsHigh': 'États-Unis · LibriTTS (multi-haut-parleurs)', + 'voice.providers.piperPreset.alanMedium': 'GB · Alan (homme)', + 'voice.providers.piperPreset.jennyDiocoMedium': 'GB · Jenny Dioco (femme)', + 'voice.providers.piperPreset.northernEnglishMaleMedium': 'GB · Anglais du Nord (homme)', + 'voice.providers.chip.cloud': 'OpenHuman (Géré)', + 'voice.providers.chip.cloudAria': 'Le fournisseur géré OpenHuman est toujours activé', + 'voice.providers.chip.whisper': 'Whisper (Local)', + 'voice.providers.chip.enableWhisper': 'Activer la transcription Whisper locale', + 'voice.providers.chip.disableWhisper': 'Désactiver la transcription Whisper locale', + 'voice.providers.chip.piper': 'Piper (Local)', + 'voice.providers.chip.enablePiper': 'Activer la synthèse vocale Piper locale', + 'voice.providers.chip.disablePiper': 'Désactiver la synthèse vocale Piper locale', + 'voice.providers.chip.enableProvider': 'Enable', + 'voice.providers.chip.disableProvider': 'Disable', + 'voice.providers.chip.apiKeyLabel': 'Clé API', + 'voice.providers.chip.apiKeyPlaceholder': 'sk-…', + 'voice.providers.chip.comingSoon': 'bientôt disponible', + 'voice.modal.title': 'Configure', + 'voice.modal.desc': + "Saisissez votre clé API pour activer ce fournisseur. Vous pouvez tester la connexion avant d'enregistrer.", + 'voice.modal.testKey': 'Tester la clé', + 'voice.modal.testing': 'Test en cours…', + 'voice.modal.saveAndEnable': 'Enregistrer et activer', + 'voice.modal.enable': 'Enable', + 'voice.modal.whisperDesc': + 'Choisissez une taille de modèle et installez le binaire Whisper ainsi que le modèle GGML dans votre espace de travail. Les modèles plus grands sont plus précis mais plus lents.', + 'voice.modal.piperDesc': + 'Choisissez une voix et installez le binaire Piper ainsi que le modèle ONNX dans votre espace de travail. Piper fonctionne entièrement hors ligne avec une faible latence.', + 'voice.routing.title': 'Routage vocal', + 'voice.routing.desc': + 'Choisissez quels fournisseurs activés gèrent la reconnaissance et la synthèse vocale.', + 'voice.routing.save': 'Save', + 'voice.routing.testStt': 'Tester STT', + 'voice.routing.testTts': 'Tester TTS', + 'voice.routing.elevenlabsVoice': 'Voix ElevenLabs', + 'voice.routing.elevenlabsVoiceAria': 'Sélection de la voix ElevenLabs', + 'voice.routing.elevenlabsVoiceIdAria': 'ID de voix ElevenLabs (personnalisé)', + 'voice.routing.elevenlabsVoiceDesc': + 'Choisissez une voix sélectionnée ou collez un ID de voix personnalisé depuis votre tableau de bord ElevenLabs.', + 'voice.externalProviders.title': 'Fournisseurs vocaux externes', + 'voice.externalProviders.desc': + 'Connectez des APIs STT/TTS tierces comme Deepgram, ElevenLabs ou OpenAI directement.', + 'voice.externalProviders.keySet': 'Clé définie', + 'voice.externalProviders.noKey': 'Aucune clé API', + 'voice.externalProviders.test': 'Test', + 'voice.externalProviders.testing': 'Test en cours…', + 'voice.externalProviders.remove': 'Remove', + 'voice.externalProviders.provider': 'Provider', + 'voice.externalProviders.selectProvider': 'Sélectionner un fournisseur…', + 'voice.externalProviders.apiKey': 'Clé API', + 'voice.externalProviders.apiKeyPlaceholder': 'sk-…', + 'voice.externalProviders.add': 'Add', + 'autocomplete.title': 'Autocomplétion', + 'autocomplete.settings': 'Paramètres', + 'autocomplete.acceptWithTab': 'Accepter avec Tab', + 'autocomplete.stylePreset': 'Préréglage de style', + 'autocomplete.style.balanced': 'Équilibré', + 'autocomplete.style.concise': 'Concis', + 'autocomplete.style.formal': 'Formel', + 'autocomplete.style.casual': 'Décontracté', + 'autocomplete.style.custom': 'Personnalisé', + 'autocomplete.disabledApps': "Apps désactivées (un identifiant d'app par ligne)", + 'autocomplete.saveSettings': 'Enregistrer les paramètres', + 'autocomplete.saving': 'Enregistrement…', + 'autocomplete.runtime': 'Runtime', + 'autocomplete.running': 'En cours', + 'autocomplete.start': 'Démarrer', + 'autocomplete.stop': 'Arrêter', + 'autocomplete.settingsSaved': "Paramètres d'autocomplétion enregistrés.", + 'autocomplete.started': 'Autocomplétion démarrée.', + 'autocomplete.didNotStart': "L'autocomplétion n'a pas démarré. Vérifie qu'elle est activée.", + 'autocomplete.stopped': 'Autocomplétion arrêtée.', + 'autocomplete.advancedSettings': 'Paramètres avancés', + 'autocomplete.debugTitle': "Débogage de l'autocomplétion", + 'chat.agentChat': "Chat avec l'agent", + 'chat.overrides': 'Remplacements', + 'chat.model': 'Modèle', + 'chat.temperature': 'Température', + 'chat.conversation': 'Conversation', + 'chat.startAgentConversation': "Démarre une conversation avec l'agent.", + 'chat.you': 'Toi', + 'chat.agent': 'Agent', + 'chat.askAgent': "Pose n'importe quelle question à l'agent…", + 'chat.sendMessage': 'Envoyer le message', + 'composio.triageTitle': "Déclencheurs d'intégration", + 'composio.triageDesc': + "Quand activé, chaque déclencheur Composio entrant passe par une étape de triage IA qui classe l'événement et peut lancer des actions automatisées — un tour LLM local par déclencheur. Désactive globalement ou par intégration si tu préfères une revue manuelle. Si la variable d'environnement", + 'composio.disableAllTriage': 'Désactiver le triage IA pour tous les déclencheurs', + 'composio.triggersStillRecorded': + "Les déclencheurs sont toujours enregistrés dans l'historique — aucun tour LLM n'est exécuté.", + 'composio.disableSpecificIntegrations': + 'Désactiver le triage IA pour des intégrations spécifiques', + 'composio.settingsSaved': 'Paramètres enregistrés', + 'composio.saveFailed': "Échec de l'enregistrement. Réessaie.", + 'cron.title': 'Tâches cron', + 'cron.scheduledJobs': 'Tâches planifiées', + 'cron.manageCronJobs': 'Gérer les tâches cron depuis le planificateur core.', + 'cron.refreshCronJobs': 'Actualiser les tâches cron', + 'localModel.modelStatus': 'État du modèle', + 'localModel.downloadModels': 'Télécharger les modèles', + 'localModel.usage': 'Utilisation', + 'localModel.usageDesc': + 'Choisis quels sous-systèmes tournent sur le modèle local. Tout ce qui est désactivé utilise le cloud.', + 'localModel.enableRuntime': 'Activer le runtime IA local', + 'localModel.enableRuntimeDesc': + "Interrupteur principal. Désactivé par défaut — Ollama reste en veille. Quand activé, le résumeur d'arbre, l'intelligence d'écran et l'autocomplétion utilisent toujours le modèle local.", + 'localModel.advancedSettings': 'Paramètres avancés', + 'localModel.debugTitle': 'Débogage du modèle local', + 'screenAwareness.debugTitle': "Débogage de la surveillance de l'écran", + 'screenAwareness.debug.debugAndDiagnostics': 'Débogage et diagnostics', + 'screenAwareness.debug.collapse': 'Réduire', + 'screenAwareness.debug.expand': 'Développer', + 'screenAwareness.debug.failedToSave': "Échec de la sauvegarde de l'intelligence écran", + 'screenAwareness.debug.policyTitle': "Politique d'intelligence écran", + 'screenAwareness.debug.baselineFps': 'FPS de référence', + 'screenAwareness.debug.useVisionModel': 'Utiliser le modèle de vision', + 'screenAwareness.debug.useVisionModelDesc': + "Envoyer les captures d'écran à un LLM vision pour un contexte plus riche. Désactivé, seul le texte OCR est utilisé avec un LLM texte — plus rapide et sans modèle vision requis.", + 'screenAwareness.debug.keepScreenshots': "Conserver les captures d'écran", + 'screenAwareness.debug.keepScreenshotsDesc': + "Enregistrer les captures dans l'espace de travail au lieu de les supprimer après traitement", + 'screenAwareness.debug.allowlist': "Liste d'autorisation (une règle par ligne)", + 'screenAwareness.debug.denylist': 'Liste de refus (une règle par ligne)', + 'screenAwareness.debug.saveSettings': "Enregistrer les paramètres d'intelligence écran", + 'screenAwareness.debug.sessionStats': 'Statistiques de session', + 'screenAwareness.debug.framesEphemeral': 'Trames (éphémères)', + 'screenAwareness.debug.panicStop': 'Arrêt de panique', + 'screenAwareness.debug.defaultPanicHotkey': 'Cmd+Shift+.', + 'screenAwareness.debug.vision': 'Vision', + 'screenAwareness.debug.idle': 'inactif', + 'screenAwareness.debug.visionQueue': "File d'attente vision", + 'screenAwareness.debug.lastVision': 'Dernière vision', + 'screenAwareness.debug.notAvailable': 'n/a', + 'screenAwareness.debug.visionSummaries': 'Résumés de vision', + 'screenAwareness.debug.refreshing': 'Actualisation…', + 'screenAwareness.debug.noSummaries': "Aucun résumé pour l'instant.", + 'screenAwareness.debug.unknownApp': 'Application inconnue', + 'screenAwareness.debug.macosOnly': + 'Screen Intelligence V1 est actuellement pris en charge sur macOS uniquement.', + 'memory.debugTitle': 'Débogage de la mémoire', + 'memory.documents': 'Documents', + 'memory.filterByNamespace': 'Filtrer par espace de noms...', + 'memory.refresh': 'Actualiser', + 'memory.noDocumentsFound': 'Aucun document trouvé.', + 'memory.delete': 'Supprimer', + 'memory.rawResponse': 'Réponse brute', + 'memory.namespaces': 'Espaces de noms', + 'memory.noNamespacesFound': 'Aucun espace de noms trouvé.', + 'memory.queryRecall': 'Requête et rappel', + 'memory.namespace': 'Espace de noms', + 'memory.queryText': 'Texte de requête...', + 'memory.defaultMaxChunks': '10', + 'memory.maxChunks': 'morceaux maximum', + 'memory.query': 'Requête', + 'memory.recall': 'Rappel', + 'memory.queryLabel': 'Requête', + 'memory.recallLabel': 'Rappel', + 'memory.queryResult': 'Résultat de la requête', + 'memory.recallResult': 'Rappel du résultat', + 'memory.clearNamespace': "Vider l'espace de noms", + 'memory.clearNamespaceDescription': + "Supprimer définitivement tous les documents d'un espace de noms.", + 'memory.selectNamespace': 'Sélectionner un espace de noms…', + 'memory.exampleNamespace': 'par ex. skills:gmail:user@example.com', + 'memory.clear': 'Effacer', + 'memory.deleteConfirm': + "Supprimer le document « {documentId} » dans l'espace de noms « {namespace} » ?", + 'memory.clearNamespaceConfirm': + "Cela supprimera définitivement TOUS les documents de l'espace de noms « {namespace} ». Continuer ?", + 'memory.clearNamespaceSuccess': 'Espace de noms « {namespace} » effacé.', + 'memory.clearNamespaceEmpty': 'Rien à effacer dans "{namespace}".', + 'webhooks.debugTitle': 'Débogage des webhooks', + 'webhooks.failedToLoadDebugData': 'Échec du chargement des données de débogage du webhook', + 'webhooks.clearLogsConfirm': 'Effacer tous les journaux de débogage des webhooks capturés ?', + 'webhooks.failedToClearLogs': 'Échec de la suppression des journaux webhook', + 'webhooks.loading': 'Chargement...', + 'webhooks.refresh': 'Actualiser', + 'webhooks.clearing': 'Effacement...', + 'webhooks.clearLogs': 'Effacer les journaux', + 'webhooks.registered': 'enregistré', + 'webhooks.captured': 'capturé', + 'webhooks.live': 'en direct', + 'webhooks.disconnected': 'déconnecté', + 'webhooks.lastEvent': 'Dernier événement', + 'webhooks.at': 'à', + 'webhooks.registeredWebhooks': 'Webhooks enregistrés', + 'webhooks.noActiveRegistrations': 'Aucune inscription active.', + 'webhooks.resolvingBackendUrl': 'Résolution du backend URL…', + 'webhooks.capturedRequests': 'Requêtes capturées', + 'webhooks.noRequestsCaptured': 'Aucune demande de webhook capturée pour le moment.', + 'webhooks.unrouted': 'non acheminé', + 'webhooks.pending': 'en attente', + 'webhooks.requestHeaders': 'En-têtes de requête', + 'webhooks.queryParams': 'Paramètres de requête', + 'webhooks.requestBody': 'Corps de la requête', + 'webhooks.responseHeaders': 'En-têtes de réponse', + 'webhooks.responseBody': 'Corps de réponse', + 'webhooks.rawPayload': 'Charge utile brute', + 'webhooks.empty': '[vide]', + 'providerSetup.error.defaultDetails': 'La configuration du fournisseur a échoué.', + 'providerSetup.error.providerFallback': 'Le fournisseur', + 'providerSetup.error.credentialsRejected': + '{provider} a rejeté les identifiants. Vérifiez la clé API et réessayez.', + 'providerSetup.error.endpointNotRecognized': + "{provider} n'a pas reconnu le point de terminaison. Vérifiez l'URL de base et réessayez.", + 'providerSetup.error.providerUnavailable': + '{provider} est actuellement indisponible. Réessayez ou vérifiez le statut du fournisseur.', + 'providerSetup.error.unreachable': + "Impossible de joindre {provider}. Vérifiez l'URL du point de terminaison et la connexion réseau, puis réessayez.", + 'providerSetup.error.couldNotReachWithMessage': 'Impossible de joindre {provider} : {message}', + 'providerSetup.error.technicalDetails': 'Détails techniques', + 'notifications.routingTitle': 'Routage des notifications', + 'notifications.routing.pipelineStats': 'Statistiques du pipeline', + 'notifications.routing.total': 'Total', + 'notifications.routing.unread': 'Non lu', + 'notifications.routing.unscored': 'Non noté', + 'notifications.routing.intelligenceTitle': 'Intelligence des notifications', + 'notifications.routing.intelligenceDesc': + "Chaque notification de vos comptes connectés est évaluée par un modèle d'IA local. Les notifications à haute importance sont automatiquement transmises à votre agent orchestrateur pour qu'aucune information critique ne passe inaperçue.", + 'notifications.routing.howItWorks': 'Comment ça marche', + 'notifications.routing.level.drop': 'Déposer', + 'notifications.routing.level.dropDesc': 'Bruit/spam — stockés mais non visibles', + 'notifications.routing.level.acknowledge': 'Acquitter', + 'notifications.routing.level.acknowledgeDesc': + 'Basse priorité — affichée dans le centre de notifications', + 'notifications.routing.level.react': 'Réagir', + 'notifications.routing.level.reactDesc': + "Priorité moyenne — déclenche une réponse ciblée de l'agent", + 'notifications.routing.level.escalate': 'Escalader', + 'notifications.routing.level.escalateDesc': "Haute priorité — transmise à l'agent orchestrateur", + 'notifications.routing.perProvider': 'Routage par fournisseur', + 'notifications.routing.threshold': 'Seuil', + 'notifications.routing.routeToOrchestrator': "Transmettre à l'orchestrateur", + 'notifications.routing.loadSettingsError': + 'Échec du chargement des paramètres. Rouvrez ce panneau pour réessayer.', + 'common.reload': 'Recharger', + 'common.skip': 'Passer', + 'common.disable': 'Désactiver', + 'common.enable': 'Activer', + 'chat.safetyTimeout': + "Aucune réponse de l'agent après 2 minutes. Réessaie ou vérifie ta connexion.", + 'chat.filter.all': 'Tous', + 'chat.filter.work': 'Travail', + 'chat.filter.briefing': 'Briefing', + 'chat.filter.notification': 'Notification', + 'chat.filter.workers': 'Travailleurs', + 'chat.selectThread': 'Sélectionne un fil', + 'chat.threads': 'Fils', + 'chat.noThreads': "Aucun fil pour l'instant", + 'chat.noLabelThreads': 'Aucun fil « {label} »', + 'chat.noWorkerThreads': "Aucun fil worker pour l'instant", + 'chat.deleteThread': 'Supprimer le fil', + 'chat.deleteThreadConfirm': 'Es-tu sûr de vouloir supprimer « {title} » ?', + 'chat.untitledThread': 'Fil sans titre', + 'chat.editThreadTitle': 'Modifier le titre du fil', + 'chat.hideSidebar': 'Masquer la barre latérale', + 'chat.showSidebar': 'Afficher la barre latérale', + 'chat.newThreadShortcut': 'Nouveau fil (/new)', + 'chat.new': 'Nouveau', + 'chat.failedToLoadMessages': 'Échec du chargement des messages', + 'chat.thinkingIteration': 'Réflexion… ({n})', + 'chat.thinkingDots': 'Réflexion…', + 'chat.approachingLimit': "Limite d'utilisation proche", + 'chat.approachingLimitMsg': 'Tu as utilisé {pct}% de ton quota disponible.', + 'chat.upgrade': 'Passer à la version supérieure', + 'chat.weeklyLimitHit': 'Tu as atteint ta limite hebdomadaire.', + 'chat.resets': 'Réinitialisation', + 'chat.topUpToContinue': 'Recharge pour continuer.', + 'chat.budgetComplete': + 'Ton budget inclus est épuisé. Ajoute des crédits ou passe à la version supérieure pour continuer.', + 'chat.topUp': 'Recharger', + 'chat.cycle': 'Cycle', + 'chat.cycleSpent': 'Dépensé ce cycle', + 'chat.cycleRemaining': 'Restant', + 'chat.left': 'restant', + 'chat.setup': 'Configurer', + 'chat.switchToText': 'Passer au texte', + 'chat.transcribing': 'Transcription…', + 'chat.stopAndSend': 'Arrêter et envoyer', + 'chat.startTalking': 'Commence à parler', + 'chat.playingVoiceReply': 'Lecture de la réponse vocale', + 'chat.voiceHint': 'Utilise le micro pour parler', + 'chat.micUnavailable': 'Microphone indisponible', + 'chat.turn': 'tour', + 'chat.turns': 'tours', + 'chat.openWorkerThread': 'Ouvrir le fil worker', + 'chat.attachment.attach': 'Joindre une image', + 'chat.attachment.remove': 'Supprimer {name}', + 'chat.attachment.tooMany': 'Maximum {max} images par message', + 'chat.attachment.tooLarge': "L'image dépasse la taille limite de {max}", + 'chat.attachment.unsupportedType': + 'Type de fichier non pris en charge. Utilisez PNG, JPEG, WebP, GIF ou BMP.', + 'chat.attachment.readFailed': 'Impossible de lire le fichier', + 'memory.searchAria': 'Rechercher dans la mémoire', + 'memory.searchPlaceholder': 'Rechercher des entrées de mémoire…', + 'memory.sourceFilter.all': 'Toutes les sources', + 'memory.sourceFilter.email': 'E-mail', + 'memory.sourceFilter.calendar': 'Calendrier', + 'memory.sourceFilter.telegram': 'Telegram', + 'memory.sourceFilter.aiInsight': 'Insight IA', + 'memory.sourceFilter.system': 'Système', + 'memory.sourceFilter.trading': 'Trading', + 'memory.sourceFilter.security': 'Sécurité', + 'memory.ingestionActivity': "Activité d'ingestion", + 'memory.events': 'événements', + 'memory.event': 'événement', + 'memory.overTheLast': 'au cours des derniers', + 'memory.months': 'mois', + 'memory.peak': 'Pic', + 'memory.perDay': '/jour', + 'memory.less': 'Moins', + 'memory.more': 'Plus', + 'memory.on': 'le', + 'memory.loading': 'Chargement de la mémoire', + 'memory.fetching': 'Récupération de tes entrées de mémoire…', + 'memory.analyzing': 'Analyse de la mémoire', + 'memory.analyzingHint': 'Traitement de tes souvenirs pour en extraire des insights…', + 'memory.noMatches': 'Aucun résultat trouvé', + 'memory.noMatchesHint': 'Essaie de modifier tes termes de recherche ou tes filtres.', + 'memory.allCaughtUp': 'Tout est à jour', + 'memory.allCaughtUpHint': 'Aucune nouvelle entrée de mémoire à traiter.', + 'memory.noAnalysis': "Pas encore d'analyse", + 'memory.noAnalysisHint': 'Lance une analyse pour découvrir des tendances dans tes souvenirs.', + 'memory.emptyHint': 'Commence à interagir pour créer tes premiers souvenirs.', + 'mic.unavailable': "Le microphone n'est pas disponible", + 'mic.permissionDenied': 'Permission microphone refusée', + 'mic.failedToStartRecorder': "Échec du démarrage de l'enregistreur", + 'mic.transcribing': 'Transcription…', + 'mic.tapToSend': 'Appuie pour envoyer', + 'mic.waitingForAgent': "En attente de l'agent…", + 'mic.tapAndSpeak': 'Appuie et parle', + 'mic.stopRecording': "Arrêter l'enregistrement et envoyer", + 'mic.startRecording': "Démarrer l'enregistrement", + 'mic.deviceSelector': 'Dispositif de microphone', + 'mic.tapToSendCountdown': 'Appuie pour envoyer ({seconds}s)', + 'token.usageLimitReached': "Limite d'utilisation atteinte", + 'token.approachingLimit': 'Limite proche', + 'token.planClickForDetails': 'plan - clique pour les détails', + 'token.sessionTokens': 'Entrée : {in} | Sortie : {out} | Tours : {turns}', + 'token.limit': 'Limite atteinte', + 'catalog.noCapabilityBinding': 'Aucune liaison de fonctionnalité', + 'catalog.downloadFailed': 'Échec du téléchargement', + 'catalog.active': 'Actif', + 'catalog.installed': 'Installé', + 'catalog.notDownloaded': 'Non téléchargé', + 'catalog.inUse': "En cours d'utilisation", + 'catalog.use': 'Utiliser', + 'catalog.deleteModel': 'Supprimer le modèle', + 'catalog.download': 'Télécharger', + 'navigator.recent': 'Récent', + 'navigator.today': "Aujourd'hui", + 'navigator.thisWeek': 'Cette semaine', + 'navigator.sources': 'Sources', + 'navigator.email': 'E-mail', + 'navigator.slack': 'Slack', + 'navigator.chat': 'Chat', + 'navigator.documents': 'Documents', + 'navigator.people': 'Personnes', + 'navigator.topics': 'Sujets', + 'dreams.description': + 'Les rêves sont des réflexions générées par IA qui synthétisent des tendances de ta mémoire.', + 'dreams.comingSoon': 'Bientôt disponible', + 'assignment.memoryLlm': 'LLM de mémoire', + 'assignment.memoryLlmAria': 'Sélection du LLM de mémoire', + 'assignment.embedder': 'Intégrateur', + 'assignment.loaded': 'Chargé', + 'assignment.notDownloaded': 'Non téléchargé', + 'assignment.usedForExtractSummarise': "Utilisé pour l'extraction et la synthèse", + 'insights.knownFacts': 'Faits connus', + 'insights.preferences': 'Préférences', + 'insights.relationships': 'Relations', + 'insights.skills': 'Compétences', + 'insights.opinions': 'Opinions', + 'insights.other': 'Autre', + 'insights.title': 'Insights', + 'insights.empty': + "Pas encore d'insights. Les insights sont générés au fur et à mesure que ta mémoire grandit.", + 'insights.description': 'Basé sur {count} relations dans ton graphe de mémoire.', + 'insights.items': 'éléments', + 'insights.more': 'de plus', + 'calls.joiningCall': "Connexion à l'appel", + 'calls.meetWindowOpening': "La fenêtre Meet s'ouvre…", + 'calls.failedToStart': "Échec du démarrage de l'appel Google Meet", + 'calls.couldNotStart': "Impossible de démarrer l'appel", + 'calls.failedToClose': "Échec de la fermeture de l'appel", + 'calls.couldNotClose': "Impossible de fermer l'appel", + 'calls.joinMeet': 'Rejoindre un appel Google Meet', + 'calls.joinMeetDescription': 'Saisis un lien Google Meet pour rejoindre.', + 'calls.meetLink': 'Lien Meet', + 'calls.displayName': "Nom d'affichage", + 'calls.openingMeet': 'Ouverture de Meet…', + 'calls.joinCall': "Rejoindre l'appel", + 'calls.activeCalls': 'Appels actifs', + 'calls.leave': 'Quitter', + 'workspace.wipeConfirm': + 'Es-tu sûr de vouloir effacer toute la mémoire ? Cette action est irréversible.', + 'workspace.resetTreeConfirm': "Es-tu sûr de vouloir reconstruire l'arbre de mémoire ?", + 'workspace.wipeTitle': 'Effacer la mémoire', + 'workspace.resetting': 'Réinitialisation…', + 'workspace.resetMemory': 'Réinitialiser la mémoire', + 'workspace.resetTreeTitle': "Reconstruire l'arbre de mémoire", + 'workspace.rebuilding': 'Reconstruction…', + 'workspace.resetMemoryTree': "Réinitialiser l'arbre de mémoire", + 'workspace.building': 'Construction…', + 'workspace.buildSummaryTrees': 'Construire les arbres de résumé', + 'workspace.viewVault': 'Voir le coffre', + 'workspace.openingVaultTitle': 'Ouverture du coffre-fort dans Obsidian', + 'workspace.openingVaultMessage': + "Si Obsidian ne s'ouvre pas, installez-le depuis obsidian.md ou utilisez Afficher le dossier. Chemin du coffre :", + 'workspace.openVaultFailedTitle': "Impossible d'ouvrir le coffre dans Obsidian", + 'workspace.openVaultFailedMessage': + 'Utilisez Reveal Folder pour ouvrir directement le répertoire du coffre-fort. Chemin du coffre-fort :', + 'workspace.revealVaultFailed': "Impossible d'afficher le dossier du coffre", + 'workspace.revealFolder': 'Révéler le dossier', + 'workspace.checkingVault': 'Vérification…', + 'workspace.vaultNotRegisteredHelp': + "Obsidian n'ouvre que les dossiers que vous avez ajoutés comme coffre. Dans Obsidian, choisissez « Ouvrir le dossier comme coffre » et sélectionnez le dossier ci-dessous — vous ne devez le faire qu'une seule fois. Cliquez ensuite sur Afficher le coffre.", + 'workspace.obsidianNotFoundHelp': + "Obsidian est introuvable sur cet appareil. Installez-le, ou — s'il est installé dans un emplacement non standard — définissez son dossier de configuration sous Avancé.", + 'workspace.openAnyway': 'Ouvrir dans Obsidian quand même', + 'workspace.installObsidian': 'Installer Obsidian', + 'workspace.obsidianAdvanced': 'Obsidian installé ailleurs ?', + 'workspace.obsidianConfigDirLabel': 'Dossier de configuration Obsidian', + 'workspace.obsidianConfigDirHint': + 'Chemin vers le dossier contenant obsidian.json (ex. ~/.config/obsidian). Laisser vide pour la détection automatique.', + 'workspace.obsidianConfigDirPlaceholder': '~/.config/obsidian', + 'workspace.graphLoadFailed': 'Échec du chargement du graphe de mémoire', + 'workspace.loadingGraph': 'Chargement du graphe de mémoire…', + 'workspace.graphViewMode': 'Mode de vue du graphe de mémoire', + 'workspace.trees': 'Arbres', + 'workspace.contacts': 'Contacts', + 'graph.noContactMentions': 'Aucune mention de contact', + 'graph.noMemory': 'Aucune mémoire', + 'graph.source': 'Source', + 'graph.topic': 'Sujet', + 'graph.global': 'Global', + 'graph.document': 'Document', + 'graph.contact': 'Contact', + 'graph.nodes': 'nœuds', + 'graph.parentChild': 'parent-enfant', + 'graph.documentContact': 'document-contact', + 'graph.link': 'lien', + 'graph.links': 'liens', + 'graph.children': 'enfants', + 'graph.clickToOpenObsidian': 'Clique pour ouvrir dans Obsidian', + 'graph.person': 'Personne', + 'modal.dontShowAgain': 'Ne plus afficher de suggestions similaires', + 'reflections.loading': 'Chargement des réflexions…', + 'reflections.empty': 'Pas encore de réflexions', + 'reflections.title': 'Réflexions', + 'reflections.proposedAction': 'Action proposée', + 'reflections.act': 'Agir', + 'reflections.dismiss': 'Ignorer', + 'whatsapp.chatsSynced': 'conversations synchronisées', + 'whatsapp.chatSynced': 'conversation synchronisée', + 'sync.active': 'Actif', + 'sync.recent': 'Récent', + 'sync.idle': 'En veille', + 'sync.memorySources': 'Sources de mémoire', + 'sync.noConnectedSources': 'Aucune source connectée', + 'sync.chunks': 'segments', + 'sync.lastChunk': 'Dernier segment :', + 'sync.pending': 'en attente', + 'sync.processed': 'traité', + 'sync.syncing': 'Synchronisation…', + 'sync.sync': 'Synchroniser', + 'sync.failedToLoad': "Échec du chargement de l'état de synchronisation", + 'sync.noContent': + "Aucun contenu n'a encore été synchronisé dans la mémoire. Connecte une intégration pour commencer.", + 'memorySources.title': 'Sources de mémoire', + 'memorySources.empty': + 'Aucune source de mémoire pour le moment. Ajoutez-en une pour commencer à alimenter la mémoire.', + 'memorySources.customSources': 'Sources personnalisées', + 'memorySources.addSource': 'Ajouter une source', + 'memorySources.noCustomSources': + 'Pas encore de sources personnalisées. Ajoutez un dossier, le dépôt GitHub, le flux RSS ou une page web pour commencer.', + 'memorySources.loadingConnections': 'Chargement des connexions…', + 'memorySources.noConnections': + "Aucune connexion Composio active trouvée. Connectez d'abord une intégration.", + 'memorySources.pickConnection': 'Choisissez une connexion', + 'memorySources.selectConnection': '— Sélectionnez une connexion —', + 'memorySources.composioListFailed': 'Échec du chargement des connexions Composio.', + 'memorySources.browse': 'Parcourir…', + 'memorySources.folderPathPlaceholder': '/Users/you/notes', + 'memorySources.globPatternPlaceholder': '**/*.md', + 'memorySources.repoUrlPlaceholder': 'https://github.com/org/repo', + 'memorySources.branchPlaceholder': 'main', + 'memorySources.feedUrlPlaceholder': 'https://example.com/feed.xml', + 'memorySources.pageUrlPlaceholder': 'https://example.com/article', + 'memorySources.cssSelectorPlaceholder': 'article', + 'memorySources.searchQueryPlaceholder': "de:l'utilisateur AI sécurité", + 'memorySources.kind.composio': 'Intégration', + 'memorySources.kind.folder': 'Dossier local', + 'memorySources.kind.github_repo': 'GitHub Dépôt', + 'memorySources.kind.twitter_query': 'Recherche Twitter', + 'memorySources.kind.rss_feed': 'RSS Flux', + 'memorySources.kind.web_page': 'Page Web', + 'memorySources.sync.successTitle': 'Synchronisation', + 'memorySources.sync.successMessage': 'Le progrès apparaîtra bientôt.', + 'memorySources.sync.failedTitle': 'Échec de la synchronisation:', + 'time.justNow': "à l'instant", + 'time.secondsAgoSuffix': 's', + 'time.minutesAgoSuffix': 'min', + 'time.hoursAgoSuffix': 'h', + 'time.daysAgoSuffix': 'j', + 'memorySources.pickKind': 'Quel type de source voulez-vous ajouter?', + 'memorySources.backToKinds': 'Retour aux types de source', + 'memorySources.label': 'Étiquette', + 'memorySources.labelPlaceholder': 'Mes notes de recherche', + 'memorySources.add': 'Ajouter', + 'memorySources.adding': 'Ajout en cours…', + 'memorySources.added': 'Source ajoutée', + 'memorySources.removed': 'Source supprimée', + 'memorySources.remove': 'Supprimer', + 'memorySources.enable': 'Activer', + 'memorySources.disable': 'Désactiver', + 'memorySources.toggleFailed': 'Basculement échoué', + 'memorySources.removeFailed': 'Échec de la suppression', + 'memorySources.folderPath': 'Chemin du dossier', + 'memorySources.globPattern': 'Motif glob', + 'memorySources.repoUrl': 'Dépôt URL', + 'memorySources.branch': 'Branche', + 'memorySources.feedUrl': 'Alimentez URL', + 'memorySources.pageUrl': 'URL de la page', + 'memorySources.cssSelector': 'Sélecteur CSS (optionnel)', + 'memorySources.searchQuery': 'Requête de recherche', + 'backend.aiBackend': 'Backend IA', + 'backend.cloud': 'Cloud', + 'backend.recommended': 'Recommandé', + 'backend.cloudDescription': + "Modèles rapides et puissants hébergés sur nos serveurs. Prêt à l'emploi immédiatement.", + 'backend.privacyNote': + "Aucune donnée personnelle, message ou clé n'est jamais envoyé à nos serveurs.", + 'backend.local': 'Local', + 'backend.advanced': 'Avancé', + 'backend.localDescription': + 'Fais tourner les modèles sur ta propre machine avec Ollama. Confidentialité totale, configuration requise.', + 'backend.ramRecommended': '16 Go+ de RAM recommandés', + 'subconscious.tasks': 'tâches', + 'subconscious.ticks': 'ticks', + 'subconscious.last': 'Dernier', + 'subconscious.failed': 'échoué', + 'subconscious.tickInterval': 'Intervalle de tick', + 'subconscious.runNow': 'Exécuter maintenant', + 'subconscious.providerUnavailableTitle': 'Subconscient en pause', + 'subconscious.providerSettings': 'Paramètres IA', + 'subconscious.approvalNeeded': 'Approbation requise', + 'subconscious.requiresApproval': 'Nécessite une approbation', + 'subconscious.fixInConnections': 'Corriger dans Connexions', + 'subconscious.goAhead': "Aller de l'avant", + 'subconscious.activeTasks': 'Tâches actives', + 'subconscious.noActiveTasks': 'Aucune tâche active', + 'subconscious.default': 'Par défaut', + 'subconscious.addTaskPlaceholder': 'Ajouter une nouvelle tâche…', + 'subconscious.activityLog': "Journal d'activité", + 'subconscious.noActivity': "Aucune activité pour l'instant", + 'subconscious.decision.nothingNew': 'Rien de nouveau', + 'subconscious.decision.completed': 'Terminé', + 'subconscious.decision.evaluating': 'Évaluation en cours', + 'subconscious.decision.waitingApproval': "En attente d'approbation", + 'subconscious.decision.failed': 'Échoué', + 'subconscious.decision.cancelled': 'Annulé', + 'subconscious.decision.skipped': 'Ignoré', + 'actionable.complete': 'Terminer', + 'actionable.dismiss': 'Ignorer', + 'actionable.snooze': 'Reporter', + 'actionable.new': 'Nouveau', + 'stats.storage': 'Stockage', + 'stats.files': 'fichiers', + 'stats.documents': 'Documents', + 'stats.today': "aujourd'hui", + 'stats.namespaces': 'Espaces de noms', + 'stats.relations': 'Relations', + 'stats.firstMemory': 'Premier souvenir', + 'stats.latest': 'Dernier', + 'stats.sessions': 'Sessions', + 'stats.tokens': 'jetons', + 'bootCheck.invalidUrl': 'Saisis une URL de runtime.', + 'bootCheck.urlMustStartWith': "L'URL doit commencer par http:// ou https://", + 'bootCheck.validUrlRequired': + 'Ça ne ressemble pas à une URL valide (essaie https://core.example.com/rpc)', + 'bootCheck.tokenRequired': "On aura besoin d'un token d'authentification pour se connecter.", + 'bootCheck.chooseCoreMode': 'Sélectionner un runtime', + 'bootCheck.connectToCore': 'Connecte-toi à ton runtime', + 'bootCheck.desktopDescription': + "OpenHuman a besoin d'un runtime pour fonctionner. Choisis où il doit être hébergé.", + 'bootCheck.webDescription': + "Sur le web, OpenHuman se connecte à un runtime que tu contrôles. Renseigne son URL et son token d'authentification ci-dessous, ou télécharge l'app desktop pour en faire tourner un directement sur ta machine.", + 'bootCheck.preferDesktop': 'Tu préfères tout garder sur ton propre appareil ?', + 'bootCheck.downloadDesktop': "Télécharger l'app desktop", + 'bootCheck.localRecommended': 'Exécuter localement (Recommandé)', + 'bootCheck.localDescription': + 'Tourne directement sur ton ordinateur. Le plus rapide, entièrement privé, rien à configurer.', + 'bootCheck.cloudMode': 'Exécuter dans le cloud (Complexe)', + 'bootCheck.cloudDescription': + "Connecte-toi à un runtime que tu héberges ailleurs. Reste en ligne 24h/24 et 7j/7 — tu n'as pas besoin de garder cet appareil allumé.", + 'bootCheck.coreRpcUrl': 'URL du runtime', + 'bootCheck.rpcUrlPlaceholder': 'https://core.example.com/rpc', + 'bootCheck.authToken': "Token d'authentification", + 'bootCheck.bearerTokenPlaceholder': 'Le token bearer de ton runtime distant', + 'bootCheck.storedLocally': 'Conservé sur cet appareil uniquement. Envoyé en tant que ', + 'bootCheck.testing': 'Test en cours…', + 'bootCheck.testConnection': 'Tester la connexion', + 'bootCheck.connectedOk': 'Connecté. Tu es prêt.', + 'bootCheck.authFailed': "Ce token n'a pas fonctionné. Vérifie-le et réessaie.", + 'bootCheck.unreachablePrefix': "Impossible de l'atteindre :", + 'bootCheck.checkingCore': 'Réveil de ton runtime…', + 'bootCheck.cannotReach': "Impossible d'atteindre le runtime", + 'bootCheck.cannotReachDesc': + "On n'a pas pu se connecter à ton runtime. Tu veux en essayer un autre ?", + 'bootCheck.switchMode': 'Choisir un autre runtime', + 'bootCheck.quit': 'Quitter', + 'bootCheck.legacyDetected': 'Runtime de fond hérité détecté', + 'bootCheck.legacyDescription': + "Un daemon OpenHuman installé séparément est déjà en cours d'exécution sur cet appareil. On doit le supprimer avant que le runtime intégré puisse prendre le relais.", + 'bootCheck.removing': 'Suppression…', + 'bootCheck.removeContinue': 'Supprimer et continuer', + 'bootCheck.localNeedsRestart': 'Le runtime local doit être redémarré', + 'bootCheck.localNeedsRestartDesc': + 'Ton runtime local est sur une version différente de cette app. Un redémarrage rapide les remettra en synchronisation.', + 'bootCheck.restarting': 'Redémarrage…', + 'bootCheck.restartCore': 'Redémarrer le runtime', + 'bootCheck.cloudNeedsUpdate': 'Le runtime cloud doit être mis à jour', + 'bootCheck.cloudNeedsUpdateDesc': + 'Ton runtime cloud est sur une version différente de cette app. Lance la mise à jour pour les remettre en synchronisation.', + 'bootCheck.updating': 'Mise à jour…', + 'bootCheck.updateCloudCore': 'Mettre à jour le runtime cloud', + 'bootCheck.versionCheckFailed': 'Échec de la vérification de la version du runtime', + 'bootCheck.versionCheckFailedDesc': + 'Ton runtime est actif mais ne rapporte pas sa version. Il est peut-être obsolète. Redémarre-le ou mets-le à jour pour continuer.', + 'bootCheck.working': 'En cours…', + 'bootCheck.restartUpdateCore': 'Redémarrer / Mettre à jour le runtime', + 'bootCheck.unexpectedError': 'Erreur inattendue lors de la vérification au démarrage', + 'bootCheck.actionFailed': "Une erreur s'est produite. Réessaie.", + 'bootCheck.portConflictTitle': "Impossible de démarrer le moteur de l'application", + 'bootCheck.portConflictBody': + 'Un autre processus utilise le port réseau dont OpenHuman a besoin. Nous allons tenter de corriger cela automatiquement.', + 'bootCheck.portConflictFixButton': 'Corriger automatiquement', + 'bootCheck.portConflictFixing': 'Correction en cours…', + 'bootCheck.portConflictFixFailed': + "La correction automatique n'a pas fonctionné. Veuillez redémarrer votre ordinateur et réessayer.", + 'notifications.justNow': "à l'instant", + 'notifications.minAgo': 'il y a {n} min', + 'notifications.hrAgo': 'il y a {n} h', + 'notifications.dayAgo': 'il y a {n} j', + 'notifications.category.messages': 'Messages', + 'notifications.category.agents': 'Agents', + 'notifications.category.skills': 'Compétences', + 'notifications.category.system': 'Système', + 'notifications.category.meetings': 'Réunions', + 'notifications.category.reminders': 'Rappels', + 'notifications.category.important': 'Important', + 'about.update.status.checking': 'Vérification…', + 'about.update.status.available': 'v{version} disponible', + 'about.update.status.availableNoVersion': 'Mise à jour disponible', + 'about.update.status.downloading': 'Téléchargement…', + 'about.update.status.readyToInstall': 'v{version} prête à installer', + 'about.update.status.readyToInstallNoVersion': + "Une nouvelle version est téléchargée et prête. Redémarre pour l'appliquer.", + 'about.update.status.installing': 'Installation…', + 'about.update.status.restarting': 'Redémarrage…', + 'about.update.status.upToDate': 'Tu utilises la dernière version.', + 'about.update.status.error': 'Échec de la vérification des mises à jour', + 'about.update.status.default': 'Rechercher des mises à jour', + 'welcome.connectionFailed': 'Connexion échouée : {status} {statusText}', + 'welcome.connectionFailedMsg': 'Connexion échouée : {message}', + 'welcome.continueLocally': 'Continuer localement', 'welcome.continueLocallyExperimental': 'Continuer en local (Expérimental)', + 'welcome.localSessionStarting': 'Démarrage de la session locale...', + 'welcome.localSessionDesc': 'Utilise un profil local hors ligne et ignore TinyHumans OAuth.', + 'chat.agentChatDesc': "Ouvrir une session de chat direct avec l'agent.", + 'chat.modelPlaceholder': 'gpt-4o', + 'channels.activeRouteValue': '{channel} via {authMode}', + 'privacy.dataKind.messages': 'Messages', + 'privacy.dataKind.agents': 'Agents', + 'privacy.dataKind.skills': 'Compétences', + 'privacy.dataKind.system': 'Système', + 'privacy.dataKind.meetings': 'Réunions', + 'privacy.dataKind.reminders': 'Rappels', + 'privacy.dataKind.important': 'Important', + 'onboarding.enableLocalAI': "Activer l'IA locale", + 'onboarding.skills.status.available': 'Disponible', + 'onboarding.skills.status.connected': 'Connecté', + 'onboarding.skills.status.connecting': 'Connexion en cours', + 'onboarding.skills.status.error': 'Erreur', + 'onboarding.skills.status.unavailable': 'Indisponible', + 'composio.statusUnavailable': 'État indisponible', + 'composio.authExpired': 'Authentification expirée', + 'composio.reconnect': 'Reconnecter', + 'composio.expiredAuthorization': "L'autorisation {name} a expiré", + 'composio.expiredDescription': + "Reconnectez-vous pour réactiver les outils {name}. OpenHuman gardera cette intégration indisponible jusqu'à ce que vous actualisiez l'accès OAuth.", + 'composio.envVarOverrides': 'est définie, elle remplace ce paramètre.', + 'composio.previewBadge': 'Aperçu', + 'composio.previewTooltip': + "Intégration de l'agent bientôt disponible : vous pouvez vous connecter, mais l'agent ne peut pas encore utiliser cette boîte à outils.", + 'memory.day.sun': 'Dim', + 'memory.day.mon': 'Lun', + 'memory.day.tue': 'Mar', + 'memory.day.wed': 'Mer', + 'memory.day.thu': 'Jeu', + 'memory.day.fri': 'Ven', + 'memory.day.sat': 'Sam', + 'memory.ingesting': 'Ingestion', + 'memory.ingestionQueued': "En file d'attente", + 'memory.ingestingTitle': 'Ingestion de {title}', + 'mic.noAudioCaptured': 'Aucun audio capturé', + 'mic.noSpeechDetected': 'Aucune parole détectée', + 'mic.lowConfidenceResult': "Impossible de comprendre l'audio clairement — réessaie", + 'mic.failedToStopRecording': "Échec de l'arrêt de l'enregistrement : {message}", + 'mic.transcriptionFailed': 'Échec de la transcription : {message}', + 'reflections.kind.retrospective': 'Rétrospective', + 'reflections.kind.derivedFact': 'Fait dérivé', + 'reflections.kind.moodInsight': 'Insight émotionnel', + 'reflections.kind.relationshipInsight': 'Insight relationnel', + 'graph.tooltip.summary': 'Résumé', + 'graph.tooltip.contact': 'Contact', + 'localModel.usage.never': 'Jamais', + 'localModel.usage.mediumLoad': 'Charge moyenne', + 'localModel.usage.lowLoad': 'Faible charge', + 'localModel.usage.idleMode': 'Mode veille', + 'localModel.rebootstrapComplete': 'Re-bootstrap du modèle terminé.', + 'localModel.modelsVerified': 'Modèles locaux vérifiés.', + 'accounts.addModal.allConnected': 'Tout est connecté', + 'accounts.addModal.title': 'Ajouter un compte', + 'accounts.respondQueue.empty': 'Vide', + 'accounts.respondQueue.hide': 'Masquer la file de réponses', + 'accounts.respondQueue.loadFailed': 'Échec du chargement de la file de réponses', + 'accounts.respondQueue.loading': 'Chargement de la file…', + 'accounts.respondQueue.pending': 'En attente', + 'accounts.respondQueue.show': 'Afficher la file de réponses', + 'accounts.respondQueue.title': 'File de réponses', + 'accounts.webviewHost.almostReady': 'Presque prêt…', + 'accounts.webviewHost.loadTimeout': 'Délai de chargement de la webview dépassé', + 'accounts.webviewHost.loading': 'Chargement de {providerName}…', + 'accounts.webviewHost.loadingAccount': 'Chargement du compte', + 'accounts.webviewHost.restoringSession': 'Restauration de la session…', + 'accounts.webviewHost.retryLoading': 'Réessayer le chargement', + 'accounts.webviewHost.takingLonger': '{providerName} prend plus de temps que prévu.', + 'accounts.webviewHost.timeoutHint': "Indice de délai d'attente", + 'app.connectionBadge.composio': 'Composio', + 'app.connectionBadge.messaging': 'Messagerie', + 'app.connectionIndicator.connected': 'Connecté à OpenHuman AI 🚀', + 'app.connectionIndicator.connecting': 'Connexion en cours', + 'app.connectionIndicator.coreOffline': 'Core hors ligne', + 'app.connectionIndicator.disconnected': 'Déconnecté', + 'app.connectionIndicator.offline': 'Hors ligne', + 'app.connectionIndicator.reconnecting': 'Reconnexion…', + 'app.errorFallback.componentStack': 'Pile de composants', + 'app.errorFallback.downloadLatest': 'Télécharger la dernière version', + 'app.errorFallback.heading': 'Titre', + 'app.errorFallback.hint': 'Indice', + 'app.errorFallback.reloadApp': "Recharger l'app", + 'app.errorFallback.subheading': 'Sous-titre', + 'app.errorFallback.tryRecover': 'Essayer de récupérer', + 'app.localAiDownload.installing': 'Installation…', + 'app.localAiDownload.preparing': 'Préparation…', + 'app.openhumanLink.accounts.continueWith': 'Continuer avec la connexion {label}', + 'app.openhumanLink.accounts.done': 'Terminé', + 'app.openhumanLink.accounts.intro': 'Intro', + 'app.openhumanLink.accounts.webviewNote': 'Note webview', + 'app.openhumanLink.billing.openDashboard': 'Ouvrir le tableau de bord', + 'app.openhumanLink.billing.stayOnTrial': "Rester en période d'essai", + 'app.openhumanLink.billing.trialCredit': "Crédit d'essai", + 'app.openhumanLink.billing.trialDesc': "Description de l'essai", + 'app.openhumanLink.defaultBody': + 'Pas encore disponible dans la fenêtre contextuelle. Ouvrez la page des paramètres complète si nécessaire.', + 'app.openhumanLink.discord.intro': 'Intro', + 'app.openhumanLink.discord.openInvite': "Ouvrir l'invitation", + 'app.openhumanLink.discord.perk1': 'Avantage 1', + 'app.openhumanLink.discord.perk2': 'Avantage 2', + 'app.openhumanLink.discord.perk3': 'Avantage 3', + 'app.openhumanLink.discord.perk4': 'Avantage 4', + 'app.openhumanLink.done': 'Terminé', + 'app.openhumanLink.loadingChannelSetup': 'Chargement de la configuration du canal', + 'app.openhumanLink.maybeLater': 'Peut-être plus tard', + 'app.openhumanLink.notifications.asking': 'Demande à ton OS…', + 'app.openhumanLink.notifications.blocked': 'Bloqué', + 'app.openhumanLink.notifications.blockedStep1': 'Étape 1 bloquée', + 'app.openhumanLink.notifications.blockedStep2': 'Étape 2 bloquée', + 'app.openhumanLink.notifications.blockedStep3': 'Étape 3 bloquée', + 'app.openhumanLink.notifications.intro': 'Intro', + 'app.openhumanLink.notifications.promptHint': "Indice d'invite", + 'app.openhumanLink.notifications.retry': 'Renvoyer une notification de test', + 'app.openhumanLink.notifications.send': 'Envoyer une notification de test', + 'app.openhumanLink.notifications.sendFailed': "Impossible d'envoyer : {error}", + 'app.openhumanLink.notifications.sent': + "Notification de test envoyée. Si vous ne l'avez pas reçue, allez dans Réglages Système → Notifications → OpenHuman, activez Autoriser les notifications, et définissez le style de bannière sur Persistant.", + 'app.openhumanLink.skipForNow': "Passer pour l'instant", + 'app.openhumanLink.telegramUnavailable': 'Telegram indisponible', + 'app.openhumanLink.title.accounts': 'Connecte tes apps', + 'app.openhumanLink.title.billing': 'Facturation & crédits', + 'app.openhumanLink.title.discord': 'Rejoins la communauté', + 'app.openhumanLink.title.messaging': 'Connecter un canal de chat', + 'app.openhumanLink.title.notifications': 'Autoriser les notifications', + 'app.persistRehydration.body': 'Corps', + 'app.persistRehydration.heading': 'Titre', + 'app.persistRehydration.resetCta': 'Réinitialisation…', + 'app.persistRehydration.resetting': 'Réinitialisation…', + 'app.routeLoading.initializing': "Initialisation d'OpenHuman...", + 'app.update.currentlyOn': '{version}', + 'app.update.errorFallback': "Une erreur s'est produite lors de la mise à jour.", + 'app.update.header.default': 'Mise à jour', + 'app.update.header.error': 'Mise à jour échouée', + 'app.update.header.installing': 'Installation de la mise à jour', + 'app.update.header.readyToInstall': 'Mise à jour prête à installer', + 'app.update.header.restarting': 'Redémarrage…', + 'app.update.later': 'Plus tard', + 'app.update.newVersionReady': 'Une nouvelle version est prête à installer.', + 'app.update.progress.downloaded': '{amount} téléchargé', + 'app.update.progress.installing': 'Installation de la nouvelle version…', + 'app.update.progress.restarting': "Relancement de l'app…", + 'app.update.progress.working': '{percent} %', + 'app.update.restartNote': 'Note de redémarrage', + 'app.update.restartNow': 'Redémarrer maintenant', + 'app.update.versionReady': 'La version {newVersion} est prête à installer.', + 'channels.discord.accountLinked': 'Compte lié', + 'channels.discord.connect': 'Connecter', + 'channels.discord.linkTokenExpired': 'Token de liaison expiré. Réessaie.', + 'channels.discord.linkTokenInstruction': '{token}', + 'channels.discord.linkTokenLabel': 'Libellé du token de liaison', + 'channels.discord.linkTokenOnce': 'Token de liaison unique', + 'channels.discord.picker.allPermissionsOk': + 'Le bot dispose de toutes les permissions requises dans ce canal.', + 'channels.discord.picker.botNotInServers': 'Bot absent des serveurs', + 'channels.discord.picker.category': 'Catégorie', + 'channels.discord.picker.channel': 'Canal', + 'channels.discord.picker.checkingPermissions': 'Vérification des permissions', + 'channels.discord.picker.loadingChannels': 'Chargement des canaux…', + 'channels.discord.picker.loadingServers': 'Chargement des serveurs…', + 'channels.discord.picker.missingPermissions': 'Permissions manquantes', + 'channels.discord.picker.noChannels': 'Aucun canal texte trouvé', + 'channels.discord.picker.noServers': 'Aucun serveur trouvé', + 'channels.discord.picker.selectChannel': 'Sélectionner un canal', + 'channels.discord.picker.selectServer': 'Sélectionner un serveur', + 'channels.discord.picker.server': 'Serveur', + 'channels.discord.picker.serverChannelSelection': 'Sélection du serveur et du canal', + 'channels.discord.savedRestartRequired': "Canal enregistré. Redémarre l'app pour l'activer.", + 'channels.telegram.connect': 'Connecter', + 'channels.telegram.managedDmConnecting': 'Connexion du DM géré', + 'channels.telegram.managedDmTimeout': 'Délai du DM géré dépassé', + 'channels.telegram.reconnect': 'Reconnecter', + 'channels.telegram.savedRestartRequired': "Canal enregistré. Redémarre l'app pour l'activer.", + 'channels.web.alwaysAvailable': 'Toujours disponible', + 'chat.approval.approve': 'Approuver', + 'chat.approval.alwaysAllow': 'Toujours autoriser', + 'chat.approval.alwaysAllowHint': + 'Arrêtez de demander cet outil — ajoutez-le à votre liste Toujours autoriser', + 'chat.approval.deciding': 'Travail en cours…', + 'chat.approval.deny': 'Refuser', + 'chat.approval.error': "Impossible d'enregistrer votre décision — veuillez réessayer.", + 'chat.approval.fallback': "L'agent veut exécuter une action qui nécessite votre approbation.", + 'chat.approval.title': 'Approbation requise', + 'chat.approval.tool': 'Outil:', + 'channels.authMode.managed_dm': 'Connectez-vous avec OpenHuman', + 'channels.authMode.oauth': 'OAuth Connectez-vous', + 'channels.authMode.bot_token': 'Utiliser votre propre jeton de robot', + 'channels.authMode.api_key': 'Utilisez votre propre clé API', + 'channels.fieldRequired': '{field} est requis', + 'channels.mcp.title': 'Serveurs MCP', + 'channels.mcp.description': + "Parcourez et gérez les serveurs Model Context Protocol qui étendent l'IA avec de nouveaux outils.", + 'channels.discord.displayName': 'Discord', + 'channels.discord.description': 'Envoyer et recevoir des messages via Discord.', + 'channels.discord.authMode.bot_token.description': + 'Fournissez votre propre jeton de bot Discord.', + 'channels.discord.authMode.oauth.description': + 'Installez le bot OpenHuman sur votre serveur Discord via OAuth.', + 'channels.discord.authMode.managed_dm.description': + 'Liez votre compte personnel Discord au bot OpenHuman.', + 'channels.discord.fields.bot_token.label': 'Jeton de bot', + 'channels.discord.fields.bot_token.placeholder': 'Votre jeton de bot Discord', + 'channels.discord.fields.guild_id.label': 'ID de serveur (guilde)', + 'channels.discord.fields.guild_id.placeholder': + 'Facultatif : restreindre à un serveur spécifique', + 'channels.telegram.displayName': 'Telegram', + 'channels.telegram.description': 'Envoyer et recevoir des messages via Telegram.', + 'channels.telegram.authMode.managed_dm.description': + 'Envoyez un message directement au robot OpenHuman Telegram.', + 'channels.telegram.authMode.bot_token.description': + 'Fournissez votre propre jeton Bot Telegram de @BotFather.', + 'channels.telegram.fields.bot_token.label': 'Jeton de robot', + 'channels.telegram.fields.bot_token.placeholder': '123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11', + 'channels.telegram.fields.allowed_users.label': 'Utilisateurs autorisés', + 'channels.telegram.fields.allowed_users.placeholder': + "Noms d'utilisateur Telegram séparés par des virgules", + 'channels.telegram.remoteControlTitle': 'Télécommande (Telegram)', + 'channels.telegram.remoteControlBody': + "À partir d'un chat Telegram autorisé, envoyez /status, /sessions, /new ou /help. Le routage de modèles utilise toujours /model et /models.", + 'channels.web.displayName': 'Web', + 'channels.web.description': "Discutez via l'interface utilisateur Web intégrée.", + 'channels.web.authMode.managed_dm.description': + 'Utilisez le chat Web intégré – aucune configuration requise.', + 'channels.yuanbao.connect': 'Connect', + 'channels.yuanbao.connecting': 'Connexion…', + 'channels.yuanbao.fieldRequired': '{field} est requis', + 'channels.yuanbao.reconnect': 'Reconnect', + 'channels.yuanbao.savedRestartRequired': + "Canal enregistré. Redémarrez l'application pour l'activer.", + 'channels.yuanbao.unexpectedStatus': 'Statut de connexion inattendu : {status}', + 'chat.unsubscribeApproval.approve': 'Approuver et se désabonner', + 'chat.unsubscribeApproval.approved': '✓ Désabonnement réussi.', + 'chat.unsubscribeApproval.denied': '✕ Demande refusée.', + 'chat.unsubscribeApproval.deny': 'Refuser', + 'chat.unsubscribeApproval.processing': 'Traitement…', + 'chat.unsubscribeApproval.title': 'Demande de désabonnement', + 'commandPalette.ariaLabel': 'Palette de commandes', + 'commandPalette.description': 'Description', + 'commandPalette.label': 'Commandes', + 'commandPalette.noResults': 'Aucun résultat', + 'commandPalette.placeholder': 'Tape une commande ou recherche…', + 'commandPalette.searchAria': 'Rechercher des commandes', + 'commandPalette.shortcutHint': 'Appuyez sur ? pour tous les raccourcis', + 'commandPalette.title': 'Palette de commandes', + 'kbd.ariaLabel': 'Raccourci clavier : {shortcut}', + 'iosMascot.connectedTo': 'Connecté à', + 'iosMascot.defaultPairedLabel': 'Bureau', + 'iosMascot.disconnect': 'Déconnecter', + 'iosMascot.error.generic': "Une erreur s'est produite. Veuillez réessayer.", + 'iosMascot.error.sendFailed': "Échec de l'envoi. Vérifiez votre connexion.", + 'iosMascot.pushToTalk': 'Push-to-talk', + 'iosMascot.sendMessage': 'Envoyer un message', + 'iosMascot.thinking': 'En réflexion...', + 'iosMascot.typeMessage': 'Tapez un message...', + 'iosPair.connectedLoading': 'Connecté ! Chargement...', + 'iosPair.connecting': 'Connexion au bureau...', + 'iosPair.desktopLabel': 'Bureau', + 'iosPair.error.camera': + 'Échec du scan par caméra. Vérifiez les autorisations de la caméra et réessayez.', + 'iosPair.error.connectionFailed': + "Échec de la connexion. Assurez-vous que l'application de bureau est en cours d'exécution et réessayez.", + 'iosPair.error.invalidQr': + "Code QR invalide. Assurez-vous de scanner un code d'association OpenHuman.", + 'iosPair.error.unreachableDesktop': + 'Impossible de joindre le bureau. Assurez-vous que les deux appareils sont en ligne et réessayez.', + 'iosPair.expired': 'QR code a expiré. Demandez au bureau de régénérer le code.', + 'iosPair.instructions': + 'Ouvrez OpenHuman sur votre bureau, allez dans Réglages > Appareils et appuyez sur « Associer un téléphone » pour afficher le code QR.', + 'iosPair.retryScan': 'Rescanner', + 'iosPair.scanQrCode': 'Numérisation QR code', + 'iosPair.scannerOpening': 'Ouverture du scanner...', + 'iosPair.step.openDesktop': 'Ouvrez OpenHuman sur le bureau', + 'iosPair.step.openSettings': 'Accédez à Paramètres > Appareils', + 'iosPair.step.showQr': 'Appuyez sur « Associer le téléphone » pour afficher QR', + 'iosPair.title': 'Associer avec votre bureau', + 'composio.connect.additionalConfigRequired': 'Configuration supplémentaire requise', + 'composio.connect.atlassianSubdomainHint': 'acme', + 'composio.connect.atlassianSubdomainLabel': 'Libellé du sous-domaine Atlassian', + 'composio.connect.connect': 'Connecter', + 'composio.connect.dynamicsOrgNameHint': + 'Par exemple, "myorg" pour myorg.crm.dynamics.com. Saisis uniquement le nom court de l\'organisation, pas l\'URL complète.', + 'composio.connect.dynamicsOrgNameLabel': "Nom de l'organisation Dynamics 365", + 'composio.connect.connectionFailed': 'Échec de la connexion (statut : {status}).', + 'composio.connect.disconnectFailed': 'Déconnexion échouée : {msg}', + 'composio.connect.disconnecting': 'Déconnexion…', + 'composio.connect.idleDescription': 'Connectez votre', + 'composio.connect.idleDescriptionSuffix': + "compte. Nous ouvrirons une fenêtre du navigateur, vous y approuvez l'accès, et cette application détectera la connexion automatiquement.", + 'composio.connect.isConnected': 'est connecté.', + 'composio.connect.manage': 'Gérer', + 'composio.connect.needsFieldsPrefix': 'Pour connecter', + 'composio.connect.needsFieldsSuffix': + "nous avons besoin d'un peu plus d'informations. Remplis les champs manquants ci-dessous et réessaie.", + 'composio.connect.needsSubdomain': 'Pour connecter', + 'composio.connect.needsSubdomainSuffix': + 'saisissez votre sous-domaine Atlassian (par ex. acme pour acme.atlassian.net) et réessayez.', + 'composio.connect.oauthComplete': 'OAuth à compléter…', + 'composio.connect.oauthTimeout': 'Délai OAuth dépassé', + 'composio.connect.permissions': 'Autorisations', + 'composio.connect.permissionsDefault': 'Lecture + Écriture activées par défaut', + 'composio.connect.permissionsNote': 'peut exposer', + 'composio.connect.permissionsNoteSuffix': + "Les autorisations de l'agent OpenHuman sont contrôlées ci-dessous par des bascules lecture, écriture et admin.", + 'composio.connect.reopenBrowser': 'Rouvrir le navigateur', + 'composio.connect.requestingUrl': "Demande de l'URL de connexion…", + 'composio.connect.requiredFieldEmpty': 'Ce champ est obligatoire.', + 'composio.connect.retryConnection': 'Réessayer la connexion', + 'composio.connect.scopeLoadError': 'Impossible de charger les préférences de portée : {msg}', + 'composio.connect.scopeSaveError': "Impossible d'enregistrer la portée {key} : {msg}", + 'composio.connect.scope.read': 'Lire', + 'composio.connect.scope.readHint': "Autoriser l'agent à lire les données de cette connexion.", + 'composio.connect.scope.write': 'Ecriture', + 'composio.connect.scope.writeHint': + "Autoriser l'agent à créer ou modifier des données via cette connexion.", + 'composio.connect.scope.admin': 'Administrateur', + 'composio.connect.scope.adminHint': + "Autoriser l'agent à gérer les paramètres, les autorisations ou les actions destructrices.", + 'composio.connect.subdomainInvalid': + 'Saisissez uniquement le sous-domaine court (par ex. "acme"), pas l\'URL complète. Il doit contenir uniquement des lettres, chiffres et tirets.', + 'composio.connect.subdomainRequired': 'Saisis ton sous-domaine Atlassian pour continuer.', + 'composio.connect.wabaIdHint': + "Trouve-le via GET /me/businesses puis GET /{business_id}/owned_whatsapp_business_accounts en utilisant ton jeton d'accès Meta.", + 'composio.connect.wabaIdLabel': "Libellé de l'identifiant WABA", + 'composio.connect.wabaIdRequired': + 'Saisis ton identifiant WhatsApp Business Account (WABA ID) pour continuer.', + 'composio.connect.waitingFor': 'En attente de', + 'composio.connect.waitingHint': "Indice d'attente", + 'composio.triggers.heading': 'Déclencheurs', + 'composio.triggers.listenFrom': 'Écouter les événements de', + 'composio.triggers.loadError': 'Impossible de charger les déclencheurs', + 'composio.triggers.needsConfiguration': 'Configuration requise', + 'composio.triggers.noneAvailable': "Aucun déclencheur n'est actuellement disponible pour", + 'conversations.taskKanban.moveLeft': 'Déplacer à gauche', + 'conversations.taskKanban.moveRight': 'Déplacer à droite', + 'conversations.taskKanban.title': 'Tâches', + 'conversations.taskKanban.approval.default': 'Par défaut', + 'conversations.taskKanban.approval.notRequired': 'Non requis', + 'conversations.taskKanban.approval.notRequiredBadge': 'aucune approbation', + 'conversations.taskKanban.approval.required': 'Requis', + 'conversations.taskKanban.approval.requiredBadge': 'approbation', + 'conversations.taskKanban.approval.requiredBeforeExecution': "Requis avant l'exécution", + 'conversations.taskKanban.briefButton': 'Résumé de la tâche', + 'conversations.taskKanban.briefTitle': 'Résumé de la tâche', + 'conversations.taskKanban.closeBrief': 'Fermer le résumé de la tâche', + 'conversations.taskKanban.field.acceptanceCriteria': "Critères d'acceptation", + 'conversations.taskKanban.field.allowedTools': 'Outils autorisés', + 'conversations.taskKanban.field.approval': 'Approbation', + 'conversations.taskKanban.field.assignedAgent': 'Agent assigné', + 'conversations.taskKanban.field.blocker': 'Blocage', + 'conversations.taskKanban.field.evidence': 'Preuve', + 'conversations.taskKanban.field.notes': 'Notes', + 'conversations.taskKanban.field.objective': 'Objectif', + 'conversations.taskKanban.field.plan': 'Plan', + 'conversations.taskKanban.field.status': 'Statut', + 'conversations.taskKanban.field.title': 'Titre', + 'conversations.taskKanban.saveChanges': 'Enregistrer les modifications', + 'conversations.taskKanban.deleteCard': 'Supprimer', + 'conversations.taskKanban.updateFailed': + "Impossible de mettre à jour la tâche; les modifications n'ont pas été enregistrées.", + 'conversations.toolTimeline.turn': 'tour', + 'conversations.toolTimeline.workerThread': 'fil worker', + 'daemon.serviceBlockingGate.body': 'Corps', + 'daemon.serviceBlockingGate.downloadHint': 'Indice de téléchargement', + 'daemon.serviceBlockingGate.downloadLatest': 'Télécharger la dernière version', + 'daemon.serviceBlockingGate.retryCore': 'Réessayer le Core', + 'daemon.serviceBlockingGate.retryFailed': + "Nouvelle tentative échouée. Télécharge la dernière version de l'app et réessaie.", + 'daemon.serviceBlockingGate.retrying': 'Nouvelle tentative…', + 'daemon.serviceBlockingGate.title': 'Le core OpenHuman est indisponible', + 'home.banners.discordSubtitle': 'Sous-titre Discord', + 'home.banners.discordTitle': 'Rejoins notre Discord', + 'home.banners.earlyBirdDismiss': 'Ignorer la bannière early bird', + 'home.banners.earlyBirdFirstSub': 'premier abonnement.', + 'home.banners.earlyBirdOn': 'Early bird activé', + 'home.banners.earlyBirdTitle': 'Les 1 000 premiers utilisateurs bénéficient de 60 % de remise.', + 'home.banners.earlyBirdUseCode': 'Utiliser le code early bird', + 'home.banners.getSubscription': 'obtenir un abonnement', + 'home.banners.promoCreditsBody': 'Corps des crédits promo', + 'home.banners.promoCreditsTitle': '{amount}', + 'home.banners.promoCreditsUsage': 'Utilisation des crédits promo', + 'intelligence.memoryChunk.detail.chunk': 'Segment', + 'intelligence.memoryChunk.detail.copyChunkId': "Copier l'identifiant du segment", + 'intelligence.memoryChunk.detail.embeddingInfo': 'bge-m3 1024dim', + 'intelligence.memoryChunk.detail.noEmbedding': "Pas d'embedding", + 'intelligence.memoryChunk.letterhead.from': 'de', + 'intelligence.memoryChunk.letterhead.to': 'à', + 'intelligence.memoryChunk.mentioned.chunkOne': '1 fragment', + 'intelligence.memoryChunk.mentioned.chunkOther': '{count} fragments', + 'intelligence.memoryChunk.mentioned.heading': 'm e n t i o n n é', + 'intelligence.memoryChunk.scoreBars.ariaScore': '{name} score {pct} pour cent', + 'intelligence.memoryChunk.scoreBars.atThreshold': 'à {threshold}', + 'intelligence.memoryChunk.scoreBars.dropped': 'abandonné', + 'intelligence.memoryChunk.scoreBars.heading': 'p o u r q u o i c o n s e r v é', + 'intelligence.memoryChunk.scoreBars.kept': 'conservé', + 'intelligence.diagram.title': "Diagramme d'architecture", + 'intelligence.diagram.description': + "Dernière sortie d'architecture locale depuis le point de terminaison de diagramme configuré.", + 'intelligence.diagram.refresh': 'Refresh', + 'intelligence.diagram.refreshAria': 'Actualiser le diagramme', + 'intelligence.diagram.emptyTitle': "Aucun diagramme disponible pour l'instant", + 'intelligence.diagram.emptyDescription': + "Générez un diagramme d'architecture depuis l'orchestrateur et ce panneau se rafraîchira depuis le point de terminaison local configuré.", + 'intelligence.diagram.skillInstallCommand': 'npx skills add yizhiyanhua-ai/fireworks-tech-graph', + 'intelligence.diagram.promptExample': + "Générer un diagramme d'architecture du swarm actuel dans un style terminal sombre", + 'intelligence.diagram.imageAlt': "Dernier diagramme d'architecture OpenHuman généré", + 'intelligence.diagram.refreshesEvery': 'Actualise toutes les {seconds}s', + 'intelligence.memoryText.entityTypePrefix': "Type d'entité", + 'intelligence.screenDebug.active': 'Actif', + 'intelligence.screenDebug.app': 'Application', + 'intelligence.screenDebug.bounds': 'Limites', + 'intelligence.screenDebug.captureAlt': 'Résultat du test de capture', + 'intelligence.screenDebug.captureFailed': 'Échec', + 'intelligence.screenDebug.captureSuccess': 'Succès', + 'intelligence.screenDebug.captureTest': 'Test de capture', + 'intelligence.screenDebug.capturing': 'Capture en cours', + 'intelligence.screenDebug.frames': 'Images', + 'intelligence.screenDebug.idle': 'En veille', + 'intelligence.screenDebug.lastApp': 'Dernière app', + 'intelligence.screenDebug.mode': 'Mode', + 'intelligence.screenDebug.permAccessibility': 'Permission accessibilité', + 'intelligence.screenDebug.permInput': 'Permission saisie', + 'intelligence.screenDebug.permScreen': 'Accessibilité', + 'intelligence.screenDebug.permissions': 'Autorisations', + 'intelligence.screenDebug.platformNotSupported': 'Plateforme non prise en charge', + 'intelligence.screenDebug.recentVisionSummaries': 'Résumés de vision récents', + 'intelligence.screenDebug.session': 'Session', + 'intelligence.screenDebug.size': 'Taille', + 'intelligence.screenDebug.status': 'État', + 'intelligence.screenDebug.testCapture': 'Test de capture', + 'intelligence.screenDebug.time': 'Temps', + 'intelligence.screenDebug.title': 'Titre', + 'intelligence.screenDebug.unknown': 'Inconnu', + 'intelligence.screenDebug.visionQueue': 'File de vision', + 'intelligence.screenDebug.visionState': 'État de la vision', + 'intelligence.tasks.activeBoardOne': '1 tableau actif dans les conversations', + 'intelligence.tasks.activeBoardOther': '{count} tableaux actifs dans les conversations', + 'intelligence.tasks.empty': "Aucun tableau de tâches agent pour l'instant", + 'intelligence.tasks.emptyHint': 'Indice vide', + 'intelligence.tasks.failedToLoad': 'Échec du chargement', + 'intelligence.tasks.live': 'en direct', + 'intelligence.tasks.loadingBoards': 'Chargement des tableaux de tâches…', + 'intelligence.tasks.threadPrefix': 'Fil {thread}', + 'intelligence.tasks.subtitle': + "Vos tâches et tableaux de tâches d'agent dans tout l'espace de travail.", + 'intelligence.tasks.newTask': 'Nouvelle tâche', + 'intelligence.tasks.personalBoardTitle': "Tâches de l'agent", + 'intelligence.tasks.personalEmpty': 'Pas encore de tâches personnelles', + 'intelligence.tasks.composer.title': 'Nouvelle tâche', + 'intelligence.tasks.composer.titleLabel': 'Titre', + 'intelligence.tasks.composer.titlePlaceholder': 'Que faut-il faire?', + 'intelligence.tasks.composer.statusLabel': 'Statut', + 'intelligence.tasks.composer.attachLabel': 'Joindre à la conversation', + 'intelligence.tasks.composer.attachNone': 'Personnel (pas de conversation)', + 'intelligence.tasks.composer.objectiveLabel': 'Objectif', + 'intelligence.tasks.composer.objectivePlaceholder': 'Optionnel — le résultat souhaité', + 'intelligence.tasks.composer.notesLabel': 'Notes', + 'intelligence.tasks.composer.notesPlaceholder': 'Notes facultatives', + 'intelligence.tasks.composer.create': 'Créer une tâche', + 'intelligence.tasks.composer.creating': 'Création…', + 'intelligence.tasks.composer.createFailed': 'Impossible de créer la tâche', + 'notifications.card.dismiss': 'Ignorer la notification', + 'notifications.card.importanceTitle': 'Importance : {pct} %', + 'notifications.center.empty': "Aucune notification pour l'instant", + 'notifications.center.emptyHint': 'Indice vide', + 'notifications.center.filterAll': 'Tout filtrer', + 'notifications.center.markAllRead': 'Tout marquer comme lu', + 'notifications.center.title': 'Notifications', + 'oauth.button.connecting': 'Connexion en cours…', + 'oauth.button.loopbackTimeout': + "La connexion a expiré — le navigateur n'a pas complété la redirection OAuth. Veuillez réessayer.", + 'oauth.login.continueWith': 'Continuer avec', + 'onboarding.contextGathering.buildingDesc': 'Description de la construction', + 'onboarding.contextGathering.buildingProfile': 'Construction de ton profil…', + 'onboarding.contextGathering.continueToChat': 'Accéder au chat', + 'onboarding.contextGathering.coreAlive': + 'Le cœur est accessible — le premier lancement peut prendre une minute.', + 'onboarding.contextGathering.coreAliveProbing': 'Vérification de la connexion au cœur…', + 'onboarding.contextGathering.coreUnreachable': + 'Le cœur ne répond pas. Tu peux continuer et réessayer plus tard.', + 'onboarding.contextGathering.errorDesc': + "Nous n'avons pas pu créer votre profil complet pour l'instant, mais ce n'est pas grave — vous pouvez continuer et votre profil se construira au fil du temps.", + 'onboarding.contextGathering.stillWorkingDesc': + 'Le premier lancement peut prendre 30 à 60 secondes pendant que nous préparons ton modèle local et tes outils. Tu peux accéder au chat à tout moment — la construction du profil continue en arrière-plan.', + 'onboarding.contextGathering.stillWorkingTitle': 'Construction de ton profil en cours…', + 'onboarding.contextGathering.title': 'Collecte de contexte', + 'openhuman.team_list_teams': 'Liste des équipes', + 'overlay.ariaAttention': "Message d'attention", + 'overlay.ariaCompanion': 'Compagnon actif', + 'overlay.ariaOrb': 'Overlay OpenHuman', + 'overlay.ariaVoiceActive': 'Saisie vocale active', + 'overlay.companion.error': 'Erreur', + 'overlay.companion.listening': 'À l’écoute…', + 'overlay.companion.pointing': 'En train de pointer…', + 'overlay.companion.speaking': 'En train de parler…', + 'overlay.companion.thinking': 'Réflexion…', + 'overlay.orbTitle': 'Glisse pour déplacer · Double-clique pour réinitialiser la position', + 'pages.settings.account.connections': 'Connexions', + 'pages.settings.account.connectionsDesc': 'Description des connexions', + 'pages.settings.account.migration': 'Importer depuis un autre assistant', + 'pages.settings.account.migrationDesc': + 'Migrez la mémoire et les notes depuis OpenClaw (et bientôt Hermes) vers cet espace de travail.', + 'pages.settings.account.privacy': 'Confidentialité', + 'pages.settings.account.privacyDesc': 'Description de la confidentialité', + 'pages.settings.account.recoveryPhrase': 'Phrase de récupération', + 'pages.settings.account.recoveryPhraseDesc': 'Description de la phrase de récupération', + 'pages.settings.account.team': 'Équipe', + 'pages.settings.account.teamDesc': "Description de l'équipe", + 'pages.settings.accountSection.description': + 'Phrase de récupération, équipe, connexions et paramètres de confidentialité.', + 'pages.settings.accountSection.title': 'Compte', + 'pages.settings.ai.llm': 'LLM', + 'pages.settings.ai.llmDesc': 'Description du LLM', + 'pages.settings.ai.voice': 'Voix', + 'pages.settings.ai.voiceDesc': 'Description de la voix', + 'pages.settings.aiSection.description': + 'Fournisseurs de modèles de langage, Ollama local et voix (STT / TTS).', + 'pages.settings.aiSection.title': 'IA', + 'pages.settings.composioSection.title': 'Composio', + 'pages.settings.composioSection.description': + 'Routage, déclencheurs et historique pour les intégrations optimisées par Composio.', + 'settings.developerMenu.composio.title': 'Composio', + 'settings.developerMenu.composio.desc': + "Mode de routage, déclencheurs d'intégration et archive de l'historique des déclencheurs.", + 'pages.settings.features.desktopCompanion': 'Compagnon de bureau', + 'pages.settings.features.desktopCompanionDesc': + "Assistant vocal avec conscience de l'écran — écoute, voit, parle, pointe", + 'pages.settings.features.messagingChannels': 'Canaux de messagerie', + 'pages.settings.features.messagingChannelsDesc': 'Description des canaux de messagerie', + 'pages.settings.features.notifications': 'Notifications', + 'pages.settings.features.notificationsDesc': 'Description des notifications', + 'pages.settings.features.screenAwareness': "Surveillance de l'écran", + 'pages.settings.features.screenAwarenessDesc': "Description de la surveillance de l'écran", + 'pages.settings.features.tools': 'Outils', + 'pages.settings.features.toolsDesc': 'Description des outils', + 'pages.settings.featuresSection.description': "Surveillance de l'écran, messagerie et outils.", + 'pages.settings.featuresSection.title': 'Fonctionnalités', + 'privacy.dataKind.credentials': 'Identifiants', + 'privacy.dataKind.derived': 'Dérivé', + 'privacy.dataKind.diagnostics': 'Diagnostics', + 'privacy.dataKind.metadata': 'Métadonnées', + 'privacy.dataKind.raw': 'Brut', + 'privacy.whatLeaves.link.label': "Qu'est-ce qui quitte mon ordinateur ?", + 'rewards.community.achievementsUnlocked': '{unlocked} sur {total} succès débloqués', + 'rewards.community.connectDiscord': 'Connecter Discord', + 'rewards.community.cumulativeTokens': 'Tokens cumulés', + 'rewards.community.currentStreak': 'Série actuelle', + 'rewards.community.discordLinkedNotInGuild': 'Discord lié mais pas dans la guilde', + 'rewards.community.discordMember': 'A rejoint le serveur', + 'rewards.community.discordNotLinked': 'Discord non lié', + 'rewards.community.discordServer': 'Serveur Discord', + 'rewards.community.discordStatusUnavailable': 'État Discord indisponible', + 'rewards.community.discordWaiting': 'En attente de Discord', + 'rewards.community.heroSubtitle': 'Sous-titre principal', + 'rewards.community.heroTitle': 'Titre principal', + 'rewards.community.joinDiscord': 'Rejoindre Discord', + 'rewards.community.loadingRewards': 'Chargement des récompenses…', + 'rewards.community.locked': 'Débloqué', + 'rewards.community.retrying': 'Nouvelle tentative…', + 'rewards.community.rolesAndRewards': 'Rôles & Récompenses', + 'rewards.community.streakDays': '{n}', + 'rewards.community.syncPending': 'Synchronisation des récompenses en attente', + 'rewards.community.syncPendingDesc': 'Description de la synchronisation en attente', + 'rewards.community.syncUnavailable': 'Synchronisation indisponible', + 'rewards.community.tryAgain': 'Nouvelle tentative…', + 'rewards.community.unknown': 'Inconnu', + 'rewards.community.unlocked': 'Débloqué', + 'rewards.community.yourProgress': 'Ta progression', + 'rewards.coupon.colCode': 'Code', + 'rewards.coupon.colRedeemed': 'Échangé', + 'rewards.coupon.colReward': 'Récompense', + 'rewards.coupon.colStatus': 'Statut', + 'rewards.coupon.loadingHistory': "Chargement de l'historique des récompenses…", + 'rewards.coupon.noCodes': "Aucun code de récompense utilisé pour l'instant.", + 'rewards.coupon.pending': 'En attente', + 'rewards.coupon.placeholder': 'Code de coupon', + 'rewards.coupon.promoCredits': 'Crédits promo', + 'rewards.coupon.recentRedemptions': 'Échanges récents', + 'rewards.coupon.redeemAccepted': + "{code} accepté. {amount} sera débloqué après que l'action requise sera effectuée.", + 'rewards.coupon.redeemButton': 'Utiliser le code', + 'rewards.coupon.redeemSuccess': '{code} utilisé. {amount} a été ajouté à vos crédits.', + 'rewards.coupon.redeemedCodes': 'Codes échangés', + 'rewards.coupon.redeeming': 'Échange en cours…', + 'rewards.coupon.statusApplied': 'Appliqué', + 'rewards.coupon.statusPendingAction': 'Action en attente', + 'rewards.coupon.statusRedeemed': 'Utilisé', + 'rewards.coupon.subtitle': 'Sous-titre', + 'rewards.coupon.title': 'Échanger un code de coupon', + 'rewards.referralSection.activity': 'Activité de parrainage', + 'rewards.referralSection.apply': 'Application…', + 'rewards.referralSection.applying': 'Application…', + 'rewards.referralSection.colReferredUser': 'Utilisateur parrainé', + 'rewards.referralSection.colReward': 'Récompense', + 'rewards.referralSection.colStatus': 'Statut', + 'rewards.referralSection.colUpdated': 'Mis à jour', + 'rewards.referralSection.completed': 'Terminé', + 'rewards.referralSection.copyCode': 'Copier le code', + 'rewards.referralSection.copyFailed': 'Copie échouée', + 'rewards.referralSection.haveCode': 'Tu as un code de parrainage ?', + 'rewards.referralSection.haveCodeDesc': "Description d'un code disponible", + 'rewards.referralSection.linked': 'Lié', + 'rewards.referralSection.linkedCode': '(code {code})', + 'rewards.referralSection.loading': 'Chargement du programme de parrainage…', + 'rewards.referralSection.retry': 'Réessayez', + 'rewards.referralSection.noReferrals': 'Aucun parrainage', + 'rewards.referralSection.pendingReferrals': 'Parrainages en attente', + 'rewards.referralSection.placeholder': 'Code de parrainage', + 'rewards.referralSection.share': 'Partager', + 'rewards.referralSection.statusCompleted': 'Statut terminé', + 'rewards.referralSection.statusExpired': 'Statut expiré', + 'rewards.referralSection.statusJoined': 'Statut rejoint', + 'rewards.referralSection.subtitle': 'Sous-titre', + 'rewards.referralSection.title': 'Invite des amis, gagne des crédits', + 'rewards.referralSection.totalEarned': 'Total gagné', + 'rewards.referralSection.yourCode': 'Ton code', + 'settings.ai.addCloudProvider': 'Ajouter un fournisseur cloud', + 'settings.ai.addProvider': 'Enregistrement…', + 'settings.ai.apiKeyFieldLabel': 'Libellé du champ clé API', + 'settings.ai.apiKeyRequired': 'Colle ta clé API pour continuer.', + 'settings.ai.apiKeyStoredEncrypted': 'Clé API stockée chiffrée', + 'settings.ai.apiKeysEncrypted': 'auth-profiles.json', + 'settings.ai.clearStoredKey': 'Effacer la clé stockée', + 'settings.ai.connectProvider': 'Connecter un fournisseur', + 'settings.ai.customRouting': 'Routage personnalisé', + 'settings.ai.defaultResolvesTo': 'Par défaut résolu en', + 'settings.ai.discard': 'Annuler', + 'settings.ai.editProvider': 'Modifier le fournisseur', + 'settings.ai.llmProviders': 'Fournisseurs LLM', + 'settings.ai.llmProvidersDesc': 'Description des fournisseurs LLM', + 'settings.ai.localOllama': 'Local (Ollama)', + 'settings.ai.modelLabel': 'Modèle', + 'settings.ai.noCustomProviders': 'Aucun fournisseur personnalisé', + 'settings.ai.openAiCompat.authHeaderExample': 'Autorisation : Porteur ', + 'settings.ai.openAiCompat.authHeaderLabel': "En-tête d'authentification", + 'settings.ai.openAiCompat.baseUrlLabel': 'URL de base', + 'settings.ai.openAiCompat.baseUrlUnavailable': 'Indisponible', + 'settings.ai.openAiCompat.clearKey': 'Effacer la clé', + 'settings.ai.openAiCompat.description': + "Les harnais locaux pointent vers ce serveur /v1 pour passer par les fournisseurs configurés ci-dessous. L'authentification utilise une clé stable que vous définissez ici, et non le jeton interne principal de l'application.", + 'settings.ai.openAiCompat.keyConfigured': 'Clé configurée', + 'settings.ai.openAiCompat.keyRequired': 'Clé requise', + 'settings.ai.openAiCompat.rotateKey': 'Rotation key', + 'settings.ai.openAiCompat.setKey': 'Définir la clé', + 'settings.ai.openAiCompat.title': 'Point de terminaison compatible OpenAI', + 'settings.ai.providerLabel': 'Fournisseur', + 'skills.mcpComingSoon.title': 'MCP Serveurs', + 'skills.mcpComingSoon.description': + 'La gestion des serveurs MCP arrive bientôt. Cet onglet sera le point central pour découvrir, connecter et surveiller vos intégrations de serveurs MCP.', + 'settings.ai.routing': 'Routage', + 'settings.ai.routingCustom': 'Routage personnalisé', + 'settings.ai.routingDefault': 'Par défaut', + 'settings.ai.routingDesc': 'Description du routage', + 'settings.ai.saveChanges': 'Enregistrement…', + 'settings.ai.saving': 'Enregistrement…', + 'settings.ai.unsavedChange': 'modification non enregistrée', + 'settings.ai.unsavedChanges': 'modifications non enregistrées', + 'settings.ai.workloadGroupBackground': 'Groupe de charge de fond', + 'settings.ai.workloadGroupChat': 'Groupe de charge chat', + 'settings.ai.disconnectProvider': 'Déconnecter {label}', + 'settings.ai.connectProviderLabel': 'Connecter {label}', + 'settings.ai.defaultLocalEndpoint': 'http://localhost:11434/v1', + 'settings.ai.endpointUrlLabel': 'Point de terminaison URL', + 'settings.ai.localRuntimeHelper': + "Là où {label} est accessible. Par défaut, c'est localhost; pointez ceci vers un hôte distant (par exemple, http://10.0.0.4:11434/v1) pour utiliser une instance partagée.", + 'settings.ai.endpointUrlRequired': 'Le point de terminaison URL est requis.', + 'settings.ai.endpointProtocolRequired': + 'Le point de terminaison doit commencer par http:// ou https://.', + 'settings.ai.connectProviderDialog': 'Connectez-vous {label}', + 'settings.ai.or': 'Ou', + 'settings.ai.openRouterOauthDescription': + "Connectez-vous avec OpenRouter et importez une clé API contrôlée par l'utilisateur en utilisant PKCE.", + 'settings.ai.connecting': 'Connexion...', + 'settings.ai.backgroundLoops': 'Boucles de fond', + 'settings.ai.backgroundLoopsDesc': + "Voyez ce qui s'exécute sans message de discussion, interrompez le travail du battement de cœur et inspectez les lignes récentes du grand livre de crédit.", + 'settings.ai.heartbeatControls': 'Contrôles de battement de coeur', + 'settings.ai.heartbeatControlsDesc': + "Désactivé par défaut. L'activation démarre la boucle; la désactivation interrompt la tâche en cours.", + 'settings.ai.heartbeatLoop': 'Boucle de battement de coeur', + 'settings.ai.heartbeatLoopDesc': + 'Planificateur principal pour planificateur + inférence subconsciente optionnelle.', + 'settings.ai.subconsciousInference': 'Inférence subconsciente', + 'settings.ai.subconsciousInferenceDesc': + 'Exécute une évaluation task/reflection basée sur un modèle sur les impulsions du rythme cardiaque.', + 'settings.ai.calendarMeetingChecks': 'Les réunions du calendrier vérifient', + 'settings.ai.calendarMeetingChecksDesc': + 'Appelle la liste des événements du calendrier pour les connexions actives du calendrier Google.', + 'settings.ai.calendarCap': 'Limite du calendrier', + 'settings.ai.connectionsPerTick': '{count} conn/tick', + 'settings.ai.meetingLookahead': 'Anticipation de la réunion', + 'settings.ai.minutesShort': '{count} min', + 'settings.ai.reminderLookahead': 'Anticipation de rappel', + 'settings.ai.cronReminderChecks': 'Vérifications de rappel Cron', + 'settings.ai.cronReminderChecksDesc': + 'Analyse les tâches cron activées pour les éléments à venir de type rappel.', + 'settings.ai.relevantNotificationChecks': 'Vérifications de notifications pertinentes', + 'settings.ai.relevantNotificationChecksDesc': + 'Transforme les notifications locales urgentes en alertes proactives.', + 'settings.ai.externalDelivery': 'Diffusion externe', + 'settings.ai.externalDeliveryDesc': + 'Laissons les alertes de battement de cœur envoyer des messages proactifs vers des canaux externes.', + 'settings.ai.interval': 'Intervalle', + 'settings.ai.running': "En cours d'exécution...", + 'settings.ai.plannerTickNow': 'Planificateur tick maintenant', + 'settings.ai.loadingHeartbeatControls': 'Chargement des contrôles de rythme cardiaque...', + 'settings.ai.heartbeatControlsUnavailable': 'Contrôles de rythme cardiaque indisponibles.', + 'settings.ai.loopMap': 'Carte de boucle', + 'settings.ai.plannerSummary': + 'Planificateur : événements sources {sourceEvents}, {sent} envoyés, {deduped} dédupliqués.', + 'settings.ai.routeLabel': 'itinéraire : {route}', + 'settings.ai.on': 'activée', + 'settings.ai.off': 'désactivée', + 'settings.ai.recentUsageLedger': 'Registre des utilisations récentes', + 'settings.ai.recentUsageLedgerDesc': + "Les lignes backend exposent action/time aujourd'hui; les tags source nécessitent un support backend.", + 'settings.ai.latestSpend': 'Dernière dépense : {amount} à {time} ({action})', + 'settings.ai.topActions': 'Principales actions', + 'settings.ai.noSpendRows': 'Aucune ligne de dépenses chargée.', + 'settings.ai.topHours': 'Heures principales', + 'settings.ai.noHourlySpend': "Aucune dépense horaire pour l'instant.", + 'settings.ai.openhumanDefault': 'OpenHuman (par défaut)', + 'settings.ai.localModelResolved': 'Ollama · {model}', + 'settings.ai.customRoutingForWorkload': 'Routage personnalisé pour {label}', + 'settings.ai.loadingModels': 'Chargement des modèles...', + 'settings.ai.enterModelIdManually': "ou entrer l'identifiant du modèle manuellement:", + 'settings.ai.modelIdPlaceholderForProvider': '{slug} identifiant du modèle', + 'settings.ai.modelIdPlaceholder': 'model-id', + 'settings.ai.selectModel': 'Sélectionnez un modèle...', + 'settings.ai.temperatureOverride': 'Température override', + 'settings.ai.temperatureOverrideSlider': 'Override de température (curseur)', + 'settings.ai.temperatureOverrideValue': 'Override de température (valeur)', + 'settings.ai.temperatureOverrideDesc': + 'Plus bas = plus déterministe. Laissez décoché pour utiliser la valeur par défaut du fournisseur.', + 'settings.ai.testFailed': 'Test échoué', + 'settings.ai.testingModel': 'Modèle de test...', + 'settings.ai.modelResponse': 'Réponse du modèle', + 'settings.ai.providerWithValue': 'Fournisseur : {value}', + 'settings.ai.noneDash': '—', + 'settings.ai.promptHelloWorld': 'Invite : Bonjour tout le monde', + 'settings.ai.startedAt': 'Démarré : {value}', + 'settings.ai.waitingForModelResponse': 'En attente de réponse du modèle sélectionné...', + 'settings.ai.response': 'Réponse', + 'settings.ai.testing': 'Test...', + 'settings.ai.test': 'Test', + 'settings.ai.slugMissingError': 'Saisissez un nom de fournisseur pour générer un slug.', + 'settings.ai.slugInUseError': 'Ce nom de fournisseur est déjà utilisé.', + 'settings.ai.slugReservedError': 'Choisissez un autre nom de fournisseur.', + 'settings.ai.providerNamePlaceholder': 'Mon fournisseur', + 'settings.ai.slugLabel': 'Slug :', + 'settings.ai.openAiUrlLabel': 'URL OpenAI', + 'settings.ai.openAiUrlPlaceholder': 'https://api.openai.com/v1', + 'settings.ai.keepExistingKeyPlaceholder': 'Laisser vide pour conserver la clé existante', + 'settings.ai.reindexingMemory': 'Réindexation de la mémoire', + 'settings.ai.reindexingMemoryMessage': + "Les embeddings sont en cours de retraitement. L(es) élément(s) de mémoire {pending} sont en cours de réintégration sous le modèle actuel — le rappel sémantique est réduit jusqu'à ce que cela se termine. La recherche par mot-clé continue de fonctionner, et la réintégration se poursuit en arrière-plan si vous fermez ceci.", + 'settings.ai.signInWithOpenRouter': 'Connectez-vous avec OpenRouter', + 'settings.ai.weekBudget': 'Budget hebdomadaire', + 'settings.ai.cycleRemaining': 'Cycle restant', + 'settings.ai.cycleTotalSpend': 'Dépenses totales du cycle', + 'settings.ai.avgSpendRow': 'Ligne de dépenses moyennes', + 'settings.ai.backgroundApiReads': 'Bg API lit', + 'settings.ai.backgroundWakeups': 'Bg réveils', + 'settings.ai.budgetMath': 'Calcul du budget', + 'settings.ai.rowsLeft': 'Lignes restantes', + 'settings.ai.rowsPerFullWeekBudget': 'Lignes par budget de semaine complète', + 'settings.ai.sampleBurnRate': "Taux de combustion d'échantillon", + 'settings.ai.projectedEmpty': 'Vide projeté', + 'settings.ai.apiReadsPerDollarRemaining': 'API lectures par $ restant', + 'settings.ai.loopCallBudget': "Budget d'appel en boucle", + 'settings.ai.heartbeatTicks': 'Ticks de battement de coeur', + 'settings.ai.calendarPlannerCalls': 'Appels du planificateur de calendrier', + 'settings.ai.calendarFanoutCap': 'Capuchon de diffusion du calendrier', + 'settings.ai.subconsciousModelCalls': 'Appels du modèle subconscient', + 'settings.ai.composioSyncScans': 'Composio analyses de synchronisation', + 'settings.ai.totalBackgroundApiReadBudget': 'Budget total de lecture API', + 'settings.ai.memoryWorkerPolls': 'Sondages de mémoire', + 'settings.ai.defaultProviderName': 'OpenHuman', + 'settings.ai.routing.managed': 'Géré', + 'settings.ai.routing.managedDesc': + 'OpenHuman exécutera toutes les inférences dans le cloud, choisira le meilleur modèle pour la tâche, optimisera les coûts et conservera les paramètres de routage les plus sûrs par défaut.', + 'settings.ai.routing.managedMsg': + 'OpenHuman gérera toutes les inférences pour chaque charge de travail et choisira automatiquement la meilleure route en termes de coût, de qualité et de sécurité.', + 'settings.ai.routing.useYourOwn': 'Utilisez vos propres modèles', + 'settings.ai.routing.useYourOwnDesc': + "Choisissez un fournisseur + modèle et faites passer toutes les charges de travail par celui-ci. C'est simple, mais cela peut être inefficace car les inférences légères et lourdes partagent toutes le même trajet.", + 'settings.ai.routing.advanced': 'Avancé', + 'settings.ai.routing.advancedDesc': + "Choisissez différents modèles pour différentes tâches. C'est la meilleure option pour une optimisation stricte des coûts et le plus de contrôle.", + 'settings.ai.routing.customDesc': + 'Le routage granulaire vous offre la meilleure optimisation des coûts et le plus de contrôle. Utilisez les lignes ci-dessous pour décider quelles charges de travail restent gérées, lesquelles utilisent votre valeur par défaut partagée, et lesquelles sont attribuées à un modèle spécifique.', + 'settings.ai.routing.chatAndConversations': 'Chat et conversations', + 'settings.ai.routing.chatDesc': + "Modèles utilisés lors de l'interaction directe avec l'utilisateur, des réponses, du raisonnement, des boucles d'agents et de l'aide à la programmation.", + 'settings.ai.routing.backgroundTasks': 'Tâches en arrière-plan', + 'settings.ai.routing.bgTasksDesc': + "Modèles utilisés en dehors du flux principal de conversation pour la synthèse, le suivi, l'apprentissage et l'évaluation subconsciente.", + 'settings.ai.routing.addCustomProvider': 'Ajouter un fournisseur personnalisé', + 'settings.ai.globalModel.title': 'Choisissez un modèle pour tout', + 'settings.ai.globalModel.desc': + "Cela fait passer toutes les inférences par un seul modèle. C'est plus simple, mais cela peut être inefficace en termes de coût et de qualité, car les tâches légères et lourdes utiliseront toutes le même chemin.", + 'settings.ai.globalModel.noProviders': + "Ajoutez ou connectez d'abord un fournisseur. Ensuite, vous pouvez acheminer chaque charge de travail via un modèle ici.", + 'settings.ai.globalModel.provider': 'Fournisseur', + 'settings.ai.globalModel.model': 'Modèle', + 'settings.ai.globalModel.loadingModels': 'Chargement des modèles…', + 'settings.ai.globalModel.enterModelId': "Entrez l'identifiant du modèle", + 'settings.ai.globalModel.appliesToAll': + "S'applique au même fournisseur + modèle pour le chat, le raisonnement, le codage, la mémoire, le rythme cardiaque, l'apprentissage et le subconscient. Les embeddings sont configurés séparément. Les modifications sont enregistrées lorsque vous cliquez sur enregistrer.", + 'settings.ai.globalModel.saving': 'Enregistrement…', + 'settings.ai.globalModel.saved': 'Enregistré', + 'settings.ai.workload.noModel': 'Aucun modèle sélectionné', + 'settings.ai.workload.changeModel': 'Changer de modèle', + 'settings.ai.workload.chooseModel': 'Choisir un modèle', + 'settings.ai.provider.ollama': 'Ollama', + 'settings.autocomplete.appFilter.acceptSuggestion': 'Accepter la suggestion', + 'settings.autocomplete.appFilter.app': 'Application', + 'settings.autocomplete.appFilter.currentSuggestion': 'Suggestion actuelle', + 'settings.autocomplete.appFilter.contextOverride': 'Remplacement du contexte (optionnel)', + 'settings.autocomplete.appFilter.debounce': 'Anti-rebond', + 'settings.autocomplete.appFilter.debugFocus': 'Focus de débogage', + 'settings.autocomplete.appFilter.enabled': 'Activé', + 'settings.autocomplete.appFilter.getSuggestion': 'Obtenir une suggestion', + 'settings.autocomplete.appFilter.lastError': 'Dernière erreur', + 'settings.autocomplete.appFilter.liveLogs': 'Journaux en direct', + 'settings.autocomplete.appFilter.model': 'Modèle', + 'settings.autocomplete.appFilter.noLogs': '):', + 'settings.autocomplete.appFilter.phase': 'Phase', + 'settings.autocomplete.appFilter.platformSupported': 'Plateforme prise en charge', + 'settings.autocomplete.appFilter.refreshStatus': 'Actualisation…', + 'settings.autocomplete.appFilter.refreshing': 'Actualisation…', + 'settings.autocomplete.appFilter.running': "En cours d'exécution", + 'settings.autocomplete.appFilter.runtime': 'Exécution', + 'settings.autocomplete.appFilter.test': 'Tester', + 'settings.autocomplete.completionStyle.acceptedCompletion': + '{count} complétion acceptée stockée — utilisée pour personnaliser les suggestions futures.', + 'settings.autocomplete.completionStyle.acceptedCompletions': + '{count} complétions acceptées stockées — utilisées pour personnaliser les suggestions futures.', + 'settings.autocomplete.completionStyle.clearHistory': 'Effacement…', + 'settings.autocomplete.completionStyle.clearing': 'Effacement…', + 'settings.autocomplete.completionStyle.debounce': 'Délai anti-rebond (ms)', + 'settings.autocomplete.completionStyle.enabled': 'Activé', + 'settings.autocomplete.completionStyle.maxChars': 'Nombre max de caractères', + 'settings.autocomplete.completionStyle.noHistory': + 'Pas encore de complétions acceptées. Accepte des suggestions avec Tab pour commencer à personnaliser.', + 'settings.autocomplete.completionStyle.overlayTtl': "Durée de vie de l'overlay (ms)", + 'settings.autocomplete.completionStyle.personalizationHistory': 'Historique de personnalisation', + 'settings.autocomplete.completionStyle.styleExamples': 'Exemples de style (un par ligne)', + 'settings.autocomplete.completionStyle.styleInstructions': 'Instructions de style', + 'settings.autocomplete.debug.acceptedPrefix': 'Acceptée : {value}', + 'settings.autocomplete.debug.acceptFailed': "Échec de l'acceptation de la suggestion", + 'settings.autocomplete.debug.alreadyRunning': + "La saisie semi-automatique est déjà en cours d'exécution.", + 'settings.autocomplete.debug.clearHistoryFailed': "Échec de l'effacement de l'historique.", + 'settings.autocomplete.debug.didNotStart': "La saisie semi-automatique n'a pas démarré.", + 'settings.autocomplete.debug.disabledInSettings': + "La saisie semi-automatique est désactivée dans les paramètres. Activez-le et enregistrez d'abord.", + 'settings.autocomplete.debug.fetchSuggestionFailed': + 'Échec de la récupération de la suggestion actuelle', + 'settings.autocomplete.debug.inspectFocusedElementFailed': + "Échec de l'inspection de l'élément ciblé", + 'settings.autocomplete.debug.loadSettingsFailed': + 'Échec du chargement des paramètres de saisie semi-automatique', + 'settings.autocomplete.debug.noSuggestionApplied': "Aucune suggestion n'a été appliquée.", + 'settings.autocomplete.debug.noSuggestionReturned': 'Aucune suggestion renvoyée.', + 'settings.autocomplete.debug.refreshStatusFailed': + "Échec de l'actualisation de l'état de la saisie semi-automatique", + 'settings.autocomplete.debug.saveAdvancedSettingsFailed': + "Échec de l'enregistrement des paramètres avancés", + 'settings.autocomplete.debug.startFailed': 'Échec du démarrage de la saisie semi-automatique', + 'settings.autocomplete.debug.stopFailed': "Échec de l'arrêt de la saisie semi-automatique", + 'settings.autocomplete.debug.suggestionPrefix': 'Suggestion : {value}', + 'settings.autocomplete.shared.none': 'Aucune', + 'settings.autocomplete.shared.notApplicable': 'n/a', + 'settings.autocomplete.shared.unknown': 'Inconnu', + 'settings.billing.autoRecharge.addAmount': 'Ajouter ce montant', + 'settings.billing.autoRecharge.addCard': 'Ajouter une carte', + 'settings.billing.autoRecharge.amountHint': 'Indice de montant', + 'settings.billing.autoRecharge.defaultCard': 'Carte par défaut', + 'settings.billing.autoRecharge.lastRechargeFailed': 'Dernière recharge échouée', + 'settings.billing.autoRecharge.lastRecharged': 'Dernière recharge', + 'settings.billing.autoRecharge.expires': 'Expire {date}', + 'settings.billing.autoRecharge.noCards': 'Aucune carte', + 'settings.billing.autoRecharge.paymentMethods': 'Méthodes de paiement', + 'settings.billing.autoRecharge.rechargeInProgress': 'Recharge en cours', + 'settings.billing.autoRecharge.spentThisWeek': '${spent} de ${limit} utilisé cette semaine', + 'settings.billing.autoRecharge.rechargeWhen': 'Recharger quand le solde passe en dessous de', + 'settings.billing.autoRecharge.saveSettings': 'Enregistrement…', + 'settings.billing.autoRecharge.saving': 'Enregistrement…', + 'settings.billing.autoRecharge.setDefault': ':', + 'settings.billing.autoRecharge.subtitle': 'Sous-titre', + 'settings.billing.autoRecharge.title': 'Activer la recharge automatique', + 'settings.billing.autoRecharge.toggleAriaLabel': 'Activer/désactiver la recharge automatique', + 'settings.billing.autoRecharge.weeklyLimit': 'Limite de dépenses hebdomadaire', + 'settings.billing.history.desc': 'Description', + 'settings.billing.history.empty': 'Vide', + 'settings.billing.history.openPortal': 'Ouvrir le portail', + 'settings.billing.history.posted': 'Publié', + 'settings.billing.history.title': 'Titre', + 'settings.billing.inferenceBudget.cycleEnds': 'Fin du cycle', + 'settings.billing.inferenceBudget.exhausted': 'Épuisé', + 'settings.billing.inferenceBudget.loadError': 'Erreur de chargement', + 'settings.billing.inferenceBudget.noBudgetDesc': 'Description sans budget', + 'settings.billing.inferenceBudget.noRecurringBudget': 'Aucun budget récurrent', + 'settings.billing.inferenceBudget.noRecurringPlanBudget': 'Aucun budget de plan récurrent', + 'settings.billing.inferenceBudget.noRecurringWeeklyDesc': + "Votre plan actuel n'inclut pas de budget d'inférence hebdomadaire récurrent. L'utilisation est plutôt payée à partir des crédits disponibles.", + 'settings.billing.inferenceBudget.remaining': 'Restant', + 'settings.billing.inferenceBudget.remainingSummary': '{remaining} / {budget} restants', + 'settings.billing.inferenceBudget.spentThisCycle': 'Dépensé {amount} ce cycle', + 'settings.billing.inferenceBudget.cycleEndsOn': 'Le cycle se termine {date}', + 'settings.billing.inferenceBudget.exhaustedDesc': + "L'utilisation incluse de l'abonnement est épuisée. Rechargez des crédits pour continuer à utiliser AI sans attendre le prochain cycle.", + 'settings.billing.inferenceBudget.discountVsPayg': + "{pct}% moins cher par appel que le paiement à l'utilisation.", + 'settings.billing.inferenceBudget.cycleSpend': 'Dépenses de cycle', + 'settings.billing.inferenceBudget.totalAmount': '{amount} au total', + 'settings.billing.inferenceBudget.inference': 'Inférence', + 'settings.billing.inferenceBudget.integrations': 'Intégrations', + 'settings.billing.inferenceBudget.calls': '{count} appels', + 'settings.billing.inferenceBudget.dailySpend': 'Dépenses quotidiennes', + 'settings.billing.inferenceBudget.dailySpendPoint': '{date} : {amount}', + 'settings.billing.inferenceBudget.topModels': 'Top modèles', + 'settings.billing.inferenceBudget.noInferenceUsage': "Aucune utilisation d'inférence ce cycle.", + 'settings.billing.inferenceBudget.topIntegrations': 'Principales intégrations', + 'settings.billing.inferenceBudget.noIntegrationUsage': + "Aucune utilisation de l'intégration ce cycle.", + 'settings.billing.inferenceBudget.tenHourCap': 'Plafond de dix heures', + 'settings.billing.inferenceBudget.title': 'Titre', + 'settings.billing.inferenceBudget.unableToLoad': + "Impossible de charger les données d'utilisation", + 'settings.billing.inferenceBudget.notAvailable': 'n/a', + 'settings.billing.payAsYouGo.available': 'Disponible', + 'settings.billing.payAsYouGo.chargeCustomAmount': 'Ouverture…', + 'settings.billing.payAsYouGo.chooseTopUpDesc': 'Description du choix de recharge', + 'settings.billing.payAsYouGo.chooseTopUpTitle': 'Titre du choix de recharge', + 'settings.billing.payAsYouGo.creditBalanceDesc': 'Description du solde de crédits', + 'settings.billing.payAsYouGo.creditBalanceTitle': 'Titre du solde de crédits', + 'settings.billing.payAsYouGo.customAmount': 'Montant personnalisé', + 'settings.billing.payAsYouGo.enterAmount': 'Saisir un montant', + 'settings.billing.payAsYouGo.opening': 'Ouverture', + 'settings.billing.payAsYouGo.promotionalCredits': 'Crédits promotionnels', + 'settings.billing.payAsYouGo.topUpBalance': 'Recharger le solde', + 'settings.billing.payAsYouGo.topUpCredits': 'Recharger les crédits', + 'settings.billing.payAsYouGo.unableToLoad': 'Impossible de charger le solde.', + 'settings.billing.subscription.annual': 'Annuel', + 'settings.billing.subscription.billedAnnually': 'Facturé annuellement', + 'settings.billing.subscription.chooseSubtitle': 'Sous-titre du choix', + 'settings.billing.subscription.chooseTitle': 'Titre du choix', + 'settings.billing.subscription.cryptoDesc': 'Description crypto', + 'settings.billing.subscription.cryptoQuestion': 'Question crypto', + 'settings.billing.subscription.current': 'Actuel', + 'settings.billing.subscription.currentPlan': 'Plan actuel', + 'settings.billing.subscription.monthly': 'Mensuel', + 'settings.billing.subscription.paymentConfirmed': 'Paiement confirmé', + 'settings.billing.subscription.perMonth': 'Par mois', + 'settings.billing.subscription.popular': 'Populaire', + 'settings.billing.subscription.save': '{pct}', + 'settings.billing.subscription.upgrade': 'Passer à la version supérieure', + 'settings.billing.subscription.waiting': 'En attente', + 'settings.billing.subscription.waitingPayment': 'En attente de paiement', + 'settings.composio.apiKeyDesc': 'Une clé API Composio est actuellement stockée sur cet appareil.', + 'settings.composio.apiKeyExamplePlaceholder': 'ck_live_xxxxxxxxxxxxxxxx', + 'settings.composio.apiKeyLabel': 'Clé API Composio', + 'settings.composio.apiKeyStored': 'Clé API stockée', + 'settings.composio.apiKeyStoredPlaceholder': '••••••••••••••••', + 'settings.composio.clearedToBackend': 'Basculé en mode Backend', + 'settings.composio.confirmItem1': 'Un compte sur app.composio.dev avec une clé API', + 'settings.composio.confirmItem2': + 'Re-lier chaque intégration via votre compte Composio personnel', + 'settings.composio.confirmItem3': + "Remarque : les déclencheurs Composio (webhooks en temps réel) ne se déclenchent pas encore en mode Direct — uniquement les appels d'outils synchrones", + 'settings.composio.confirmNeedItems': 'Vous aurez besoin de :', + 'settings.composio.confirmSwitch': 'Je comprends, passer en Direct', + 'settings.composio.confirmTitle': '⚠️ Passage au mode Direct', + 'settings.composio.confirmWarning': + 'Vos intégrations existantes (Gmail, Slack, GitHub, etc. liées via OpenHuman) ne seront pas visibles — elles vivent dans le tenant Composio géré par OpenHuman.', + 'settings.composio.intro': + "Composio intègre plus de 250 applications externes en tant qu'outils que votre agent peut appeler. Choisissez comment ces appels d'outils sont routés.", + 'settings.composio.title': 'Composio', + 'settings.composio.modeDirect': 'Direct (apporte ta propre clé API)', + 'settings.composio.modeDirectDesc': + "Les appels vont directement à backend.composio.dev. Souverain / compatible hors ligne. L'exécution des outils fonctionne de manière synchrone ; les webhooks de déclencheurs en temps réel ne sont pas encore routés en mode direct (problème de suivi).", + 'settings.composio.modeManaged': "Géré (OpenHuman s'en occupe pour toi)", + 'settings.composio.modeManagedDesc': + "OpenHuman relaie les appels d'outils via notre backend (recommandé). L'authentification est négociée ; vous ne collez jamais de clé API Composio. Les webhooks sont entièrement routés.", + 'settings.composio.routingMode': 'Mode de routage', + 'settings.composio.saveErrorNoKey': + "Échec de l'enregistrement. Le mode Direct nécessite une clé API non vide.", + 'settings.composio.saving': 'Enregistrement…', + 'settings.composio.switching': 'Bascule en cours…', + 'settings.companion.title': 'Compagnon de bureau', + 'settings.companion.session': 'Session', + 'settings.companion.activeLabel': 'Actif', + 'settings.companion.inactiveStatus': 'Inactif', + 'settings.companion.stopping': 'Arrêt…', + 'settings.companion.stopSession': 'Arrêter la session', + 'settings.companion.starting': 'Démarrage…', + 'settings.companion.startSession': 'Démarrer la session', + 'settings.companion.sessionId': 'ID de session', + 'settings.companion.turns': 'Tours', + 'settings.companion.remaining': 'Configuration', + 'settings.companion.configuration': 'restante', + 'settings.companion.hotkey': 'Raccourci clavier', + 'settings.companion.activationMode': "Mode d'activation", + 'settings.companion.sessionTtl': 'Durée de vie de la session', + 'settings.companion.screenCapture': "Capture d'écran", + 'settings.companion.appContext': "Contexte de l'application", + 'settings.cron.jobs.desc': 'Description', + 'settings.cron.jobs.empty': 'Aucune tâche cron core trouvée.', + 'settings.cron.jobs.lastStatus': 'Dernier statut', + 'settings.cron.jobs.loading': 'Chargement des tâches cron…', + 'settings.cron.jobs.loadingRuns': 'Chargement des exécutions', + 'settings.cron.jobs.nextRun': 'Prochaine exécution', + 'settings.cron.jobs.pause': 'Mettre en pause', + 'settings.cron.jobs.paused': 'En pause', + 'settings.cron.jobs.recentRuns': 'Exécutions récentes', + 'settings.cron.jobs.removing': 'Suppression', + 'settings.cron.jobs.resume': 'Reprendre', + 'settings.cron.jobs.runningNow': "En cours d'exécution", + 'settings.cron.jobs.saving': 'Enregistrement…', + 'settings.cron.jobs.schedule': 'Planification', + 'settings.cron.jobs.title': 'Tâches cron du core', + 'settings.cron.jobs.viewRuns': 'Voir les exécutions', + 'settings.localModel.deviceCapability.active': 'Actif', + 'settings.localModel.deviceCapability.appliedTier': 'Niveau appliqué', + 'settings.localModel.deviceCapability.applying': 'Application en cours', + 'settings.localModel.deviceCapability.cores': '{count}', + 'settings.localModel.deviceCapability.couldNotLoadPresets': + 'Impossible de charger les préréglages', + 'settings.localModel.deviceCapability.cpu': 'CPU', + 'settings.localModel.deviceCapability.customModelIds': 'Identifiants de modèles personnalisés', + 'settings.localModel.deviceCapability.detected': 'Détecté', + 'settings.localModel.deviceCapability.disabled': 'Désactivé', + 'settings.localModel.deviceCapability.disabledDesc': 'Description désactivé', + 'settings.localModel.deviceCapability.downloadingModels': '(téléchargement des modèles)', + 'settings.localModel.deviceCapability.downloadingSetupDesc': + "Téléchargement de l'installateur OllamaSetup (~2 Go) et décompression. Cela peut prendre une minute lors de la première installation.", + 'settings.localModel.deviceCapability.failedToApplyPreset': + "Échec de l'application du préréglage", + 'settings.localModel.deviceCapability.gpu': 'GPU', + 'settings.localModel.deviceCapability.installFailed': "Échec de l'installation d'Ollama", + 'settings.localModel.deviceCapability.installFailedDesc': + "L'installateur s'est terminé avant qu'Ollama soit utilisable. Clique sur Réessayer pour recommencer, ou installe manuellement depuis ollama.com.", + 'settings.localModel.deviceCapability.installFirst': "Lancez Ollama d'abord.", + 'settings.localModel.deviceCapability.installFirstDesc': + 'Les niveaux locaux dépendent d\'un point de terminaison Ollama géré en externe. Lancez-le vous-même, téléchargez les modèles souhaités, et continuez à utiliser "Désactivé (repli cloud)" jusqu\'à ce que le runtime soit accessible.', + 'settings.localModel.deviceCapability.installOllamaFirst': + "Lancez Ollama d'abord pour utiliser ce niveau", + 'settings.localModel.deviceCapability.installingOllama': "Installation d'Ollama", + 'settings.localModel.deviceCapability.loadingDeviceInfo': + "Chargement des informations de l'appareil", + 'settings.localModel.deviceCapability.localAiDisabled': + 'IA locale désactivée — utilisation du fallback cloud.', + 'settings.localModel.deviceCapability.modelTier': 'Niveau de modèle', + 'settings.localModel.deviceCapability.needsOllama': 'Ollama requis', + 'settings.localModel.deviceCapability.notDetected': 'Non détecté', + 'settings.localModel.deviceCapability.disabledLowercase': 'désactivé', + 'settings.localModel.deviceCapability.presetDetails': + 'Chat : {chatModel} · Vision : {visionModel} · RAM cible : {targetRamGb} Go', + 'settings.localModel.deviceCapability.ram': 'RAM', + 'settings.localModel.deviceCapability.recommended': 'Recommandé', + 'settings.localModel.deviceCapability.retryInstall': 'Nouvelle tentative…', + 'settings.localModel.deviceCapability.retrying': 'Nouvelle tentative…', + 'settings.localModel.deviceCapability.starting': 'Démarrage…', + 'settings.localModel.download.audioPathPlaceholder': 'Chemin absolu vers le fichier audio', + 'settings.localModel.download.capabilityChat': 'bavarder', + 'settings.localModel.download.capabilityEmbedding': 'Intégration', + 'settings.localModel.download.capabilityAssets': 'Ressources de fonctionnalité', + 'settings.localModel.download.capabilityStt': 'STT', + 'settings.localModel.download.capabilityTts': 'TTS', + 'settings.localModel.download.capabilityVision': 'Vision', + 'settings.localModel.download.downloading': 'Téléchargement…', + 'settings.localModel.download.embeddingDimensions': 'Dimensions : {dimensions}', + 'settings.localModel.download.embeddingModel': 'Modèle : {modelId}', + 'settings.localModel.download.embeddingPlaceholder': "Une chaîne d'entrée par ligne…", + 'settings.localModel.download.embeddingVectors': 'Vecteurs : {count}', + 'settings.localModel.download.noThinkMode': 'Mode sans réflexion', + 'settings.localModel.download.notAvailable': 'n/a', + 'settings.localModel.download.promptPlaceholder': + "Tape n'importe quelle invite et exécute-la sur le modèle local…", + 'settings.localModel.download.quantizationPref': 'Préférence de quantification', + 'settings.localModel.download.runEmbeddingTest': 'En cours…', + 'settings.localModel.download.runPromptTest': "Lancer le test d'invite", + 'settings.localModel.download.runSummaryTest': 'Lancer le test de résumé', + 'settings.localModel.download.runTranscriptionTest': 'En cours…', + 'settings.localModel.download.runTtsTest': 'En cours…', + 'settings.localModel.download.runVisionTest': 'En cours…', + 'settings.localModel.download.running': 'En cours…', + 'settings.localModel.download.runningPrompt': "Exécution de l'invite", + 'settings.localModel.download.summaryHelper': + 'Appelle `openhuman.inference_summarize` via le noyau Rust', + 'settings.localModel.download.summarizePlaceholder': + 'Colle du texte à résumer avec le modèle local…', + 'settings.localModel.download.testCustomPrompt': 'Tester une invite personnalisée', + 'settings.localModel.download.testEmbeddings': 'Tester les embeddings', + 'settings.localModel.download.testSummarization': 'Tester la synthèse', + 'settings.localModel.download.testVisionPrompt': 'Tester une invite de vision', + 'settings.localModel.download.testVoiceInput': "Tester l'entrée vocale (STT)", + 'settings.localModel.download.testVoiceOutput': 'Tester la sortie vocale (TTS)', + 'settings.localModel.download.transcript': 'Transcription :', + 'settings.localModel.download.ttsOutput': 'Sortie : {outputPath}', + 'settings.localModel.download.ttsOutputPlaceholder': 'Chemin WAV de sortie optionnel', + 'settings.localModel.download.ttsPlaceholder': 'Saisis du texte à synthétiser…', + 'settings.localModel.download.ttsVoice': 'Voix : {voiceId}', + 'settings.localModel.download.visionImagePlaceholder': + "Une référence d'image par ligne (URI data, URL ou marqueur de chemin local)", + 'settings.localModel.download.visionPromptPlaceholder': + 'Saisis une invite pour le modèle de vision…', + 'settings.localModel.status.allChecksPassed': 'Toutes les vérifications réussies', + 'settings.localModel.status.artifact': 'Artefact', + 'settings.localModel.status.backend': 'Backend', + 'settings.localModel.status.binary': 'Binaire', + 'settings.localModel.status.bootstrapResume': 'Bootstrap / Reprendre', + 'settings.localModel.status.checking': 'Vérification…', + 'settings.localModel.status.checkingOllama': "Vérification d'Ollama", + 'settings.localModel.status.contextBelowMinimumBadge': + '{contextLength} ctx - inférieur à {required} min', + 'settings.localModel.status.contextBelowMinimumTitle': + 'Rejeté : la fenêtre contextuelle des jetons {contextLength} est inférieure au minimum de jetons {required} requis par la couche mémoire. Le rappel serait corrompu par une troncature silencieuse.', + 'settings.localModel.status.contextOkBadge': '{contextLength} ctx ✓', + 'settings.localModel.status.contextOkTitle': + 'Les jetons {contextLength} de la fenêtre contextuelle répondent au minimum de la couche mémoire de jetons {required}.', + 'settings.localModel.status.contextUnknownBadge': 'ctx inconnu', + 'settings.localModel.status.contextUnknownTitle': + "Fenêtre contextuelle inconnue ; n'a pas pu confirmer qu'il répond au minimum de couche mémoire du jeton {required}.", + 'settings.localModel.status.customLocation': 'Emplacement personnalisé', + 'settings.localModel.status.customLocationDesc': "Description de l'emplacement personnalisé", + 'settings.localModel.status.diagnosticsHint': + 'Cliquez sur "Lancer les diagnostics" pour vérifier qu\'Ollama fonctionne et que les modèles sont installés.', + 'settings.localModel.status.downloadingUnknown': 'Téléchargement (taille inconnue)', + 'settings.localModel.status.eta': 'ETA', + 'settings.localModel.status.expectedModels': 'Modèles attendus', + 'settings.localModel.status.expectedChat': 'Discussion : {model}', + 'settings.localModel.status.expectedEmbedding': 'Intégration : {model}', + 'settings.localModel.status.expectedVision': 'Vision : {model}', + 'settings.localModel.status.externalProcess': 'Processus externe', + 'settings.localModel.status.forceRebootstrap': 'Forcer le ré-amorçage', + 'settings.localModel.status.generationTps': 'TPS de génération', + 'settings.localModel.status.hideErrorDetails': "Masquer les détails de l'erreur", + 'settings.localModel.status.installManually': 'Installer manuellement', + 'settings.localModel.status.installManuallyFrom': 'Installer manuellement depuis', + 'settings.localModel.status.installOllama': 'Démarrage…', + 'settings.localModel.status.installedModels': 'Modèles installés', + 'settings.localModel.status.installing': 'Installation…', + 'settings.localModel.status.installingOllama': 'Installation du runtime Ollama…', + 'settings.localModel.status.issues': 'Problèmes', + 'settings.localModel.status.issuesFound': '{count} problème(s) trouvé(s)', + 'settings.localModel.status.lastLatency': 'Dernière latence', + 'settings.localModel.status.model': 'Modèle', + 'settings.localModel.status.notAvailable': 'n/a', + 'settings.localModel.status.notFound': 'Introuvable', + 'settings.localModel.status.notRunning': "Non en cours d'exécution", + 'settings.localModel.status.ollamaBinaryPath': 'Chemin du binaire Ollama', + 'localModel.ollamaServer.helperText': 'Exemple : http://192.168.1.5:11434', + 'localModel.ollamaServer.label': 'URL du serveur Ollama', + 'localModel.ollamaServer.modelCount': 'modèles', + 'localModel.ollamaServer.placeholder': 'http://localhost:11434', + 'localModel.ollamaServer.reachable': 'Accessible', + 'localModel.ollamaServer.resetButton': 'Réinitialiser par défaut', + 'localModel.ollamaServer.saveButton': 'Enregistrer', + 'localModel.ollamaServer.testButton': 'Tester la connexion', + 'localModel.ollamaServer.unreachable': 'Inaccessible', + 'localModel.ollamaServer.validationError': 'Doit être une URL http:// ou https:// valide', + 'settings.localModel.status.ollamaDiagnostics': 'Diagnostics Ollama', + 'settings.localModel.status.ollamaNotInstalled': 'Runtime Ollama indisponible', + 'settings.localModel.status.ollamaNotInstalledDesc': + "OpenHuman traite désormais Ollama comme un runtime d'inférence externe. Lancez votre propre serveur Ollama, téléchargez les modèles souhaités, et dirigez le routage des charges de travail vers celui-ci.", + 'settings.localModel.status.progress': 'Progression', + 'settings.localModel.status.provider': 'Fournisseur', + 'settings.localModel.status.retryBootstrap': 'Réessayer le bootstrap', + 'settings.localModel.status.runDiagnostics': 'Vérification…', + 'settings.localModel.status.running': 'En cours', + 'settings.localModel.status.runningExternalProcess': 'En cours via processus externe', + 'settings.localModel.status.runtimeStatus': 'État du runtime', + 'settings.localModel.status.server': 'Serveur', + 'settings.localModel.status.setPath': 'Configuration…', + 'settings.localModel.status.setting': 'Configuration…', + 'settings.localModel.status.showErrorDetails': "Masquer les détails de l'erreur", + 'settings.localModel.status.showInstallErrorDetails': "Masquer les détails de l'erreur", + 'settings.localModel.status.suggestedFixes': 'Corrections suggérées', + 'settings.localModel.status.thenSetPath': 'Ensuite définir le chemin', + 'settings.localModel.status.triggering': 'Déclenchement…', + 'settings.localModel.status.unavailable': 'Indisponible', + 'settings.localModel.status.working': 'En cours…', + 'settings.developerMenu.ai.title': 'Configuration IA', + 'settings.developerMenu.ai.desc': + 'Fournisseurs cloud, modèles Ollama locaux et routage par charge de travail', + 'settings.developerMenu.screenAwareness.title': "Conscience de l'écran", + 'settings.developerMenu.screenAwareness.desc': + "Autorisations de capture d'écran, politique de surveillance et contrôles de session", + 'settings.developerMenu.messagingChannels.title': 'Canaux de messagerie', + 'settings.developerMenu.messagingChannels.desc': + "Configure les modes d'authentification Telegram/Discord et le routage de canal par défaut", + 'settings.developerMenu.tools.title': 'Outils', + 'settings.developerMenu.tools.desc': + "Active ou désactive les capacités qu'OpenHuman peut utiliser en ton nom", + 'settings.developerMenu.agentChat.title': 'Chat agent', + 'settings.developerMenu.agentChat.desc': + 'Teste une conversation agent avec des remplacements de modèle et de température', + 'settings.developerMenu.devWorkflow.title': 'Flux de travail de développement', + 'settings.developerMenu.devWorkflow.desc': + 'Agent autonome qui sélectionne vos problèmes GitHub et crée des PR selon un calendrier', + 'settings.developerMenu.devWorkflow.panelDesc': + 'Configurez un agent développeur autonome qui sélectionne les problèmes GitHub qui vous sont attribués et crée automatiquement des demandes de tirage selon un calendrier.', + 'settings.developerMenu.skillsRunner.title': 'Compétences Coureur', + 'settings.developerMenu.skillsRunner.desc': + "Exécutez n'importe quelle compétence intégrée de manière ponctuelle — remplissez ses entrées et lancez une exécution autonome en arrière-plan", + 'settings.developerMenu.skillsRunner.panelDesc': + "Choisissez une compétence regroupée, remplissez ses entrées déclarées, et lancez une exécution en arrière-plan de type 'lancer-et-oublier'. Utilisez le flux de travail Dev à la place si vous voulez un travail récurrent planifié par cron.", + 'settings.skillsRunner.skill': 'Compétence', + 'settings.skillsRunner.selectSkill': 'Sélectionnez une compétence…', + 'settings.skillsRunner.loadingSkills': 'Chargement des compétences…', + 'settings.skillsRunner.loadingDescription': 'Chargement des entrées de compétences…', + 'settings.skillsRunner.noInputs': 'Cette compétence ne déclare aucune entrée.', + 'settings.skillsRunner.placeholder.required': 'requis', + 'settings.skillsRunner.runNow': 'Cours maintenant', + 'settings.skillsRunner.starting': 'Démarrage…', + 'settings.skillsRunner.started': 'Commencé — id de course:', + 'settings.skillsRunner.logPath': 'Journal:', + 'settings.skillsRunner.error.listSkills': 'Échec du chargement des compétences:', + 'settings.skillsRunner.error.describe': 'Échec du chargement des entrées:', + 'settings.skillsRunner.error.missingRequired': 'Entrée(s) requise(s) manquante(s):', + 'settings.skillsRunner.error.run': "Échec du démarrage de l'exécution:", + 'settings.skillsRunner.error.preflightGate': 'La porte de prévol a échoué', + 'settings.skillsRunner.schedule.heading': 'Planifier (récurrent)', + 'settings.skillsRunner.schedule.help': + "Enregistrez cette compétence + les entrées comme un travail cron récurrent. L'agent appellera run_skill à chaque tick.", + 'settings.skillsRunner.schedule.frequency': 'Fréquence', + 'settings.skillsRunner.schedule.every30min': 'Toutes les 30 minutes', + 'settings.skillsRunner.schedule.everyHour': 'Toutes les heures', + 'settings.skillsRunner.schedule.every2hours': 'Toutes les 2 heures', + 'settings.skillsRunner.schedule.every6hours': 'Toutes les 6 heures', + 'settings.skillsRunner.schedule.onceDaily': 'Une fois par jour (9h00)', + 'settings.skillsRunner.schedule.save': 'Enregistrer le planning', + 'settings.skillsRunner.schedule.saving': 'Enregistrement…', + 'settings.skillsRunner.schedule.saved': 'Horaires enregistrés.', + 'settings.skillsRunner.schedule.error': "Échec de l'enregistrement du calendrier:", + 'settings.skillsRunner.schedule.loadingJobs': 'Chargement des emplois du temps existants…', + 'settings.skillsRunner.schedule.noJobs': + "Aucun emploi du temps n'a encore été enregistré pour cette compétence.", + 'settings.skillsRunner.schedule.existing': 'Tâches planifiées pour cette compétence:', + 'settings.skillsRunner.schedule.runNow': 'Courir', + 'settings.skillsRunner.schedule.remove': 'Supprimer', + 'settings.skillsRunner.scheduleEnabled': 'Activé', + 'settings.skillsRunner.scheduleDisabled': 'En pause', + 'settings.skillsRunner.scheduleToggleAria': 'Activer/désactiver le programme', + 'settings.skillsRunner.schedule.history': 'Histoire', + 'settings.skillsRunner.schedule.historyLoading': "Chargement de l'historique…", + 'settings.skillsRunner.schedule.historyEmpty': 'Aucune course pour ce planning pour le moment.', + 'settings.skillsRunner.schedule.historyNoOutput': 'Aucune sortie capturée.', + 'settings.skillsRunner.schedule.active': 'actif', + 'settings.skillsRunner.schedule.lastRunLabel': 'dernier:', + 'settings.skillsRunner.recentRuns.headingForSkill': 'Exécutions récentes pour cette compétence', + 'settings.skillsRunner.recentRuns.headingAll': 'Dernières courses de compétences (toutes)', + 'settings.skillsRunner.recentRuns.refresh': 'Actualiser', + 'settings.skillsRunner.recentRuns.loading': 'Chargement des courses récentes…', + 'settings.skillsRunner.recentRuns.empty': 'Aucune course récente.', + 'settings.skillsRunner.viewer.loading': 'Chargement du journal…', + 'settings.skillsRunner.viewer.tailing': 'Suivi en direct', + 'settings.skillsRunner.viewer.fetching': 'récupération', + 'settings.skillsRunner.viewer.error': 'Échec de la lecture du journal:', + 'settings.skillsRunner.repoPicker.loading': 'Chargement des dépôts…', + 'settings.skillsRunner.repoPicker.select': 'Sélectionnez un dépôt…', + 'settings.skillsRunner.repoPicker.empty': + 'Aucun dépôt retourné. Connectez GitHub via Composio pour remplir cette liste.', + 'settings.skillsRunner.repoPicker.notConnected': + "GitHub n'est pas connecté via Composio. Connectez-le d'abord sous Compétences → Composio.", + 'settings.skillsRunner.repoPicker.privateTag': '(privé)', + 'settings.skillsRunner.branchPicker.needRepo': "Choisis d'abord un dépôt…", + 'settings.skillsRunner.branchPicker.loading': 'Chargement des branches…', + 'settings.skillsRunner.branchPicker.select': 'Sélectionnez une branche…', + 'settings.devWorkflow.githubRepository': 'Dépôt GitHub', + 'settings.devWorkflow.loadingRepositories': 'Chargement des dépôts...', + 'settings.devWorkflow.selectRepository': 'Sélectionnez un dépôt', + 'settings.devWorkflow.privateTag': '(privé)', + 'settings.devWorkflow.detectingForkInfo': 'Détection des informations sur la fourche...', + 'settings.devWorkflow.forkDetected': 'Fourche détectée', + 'settings.devWorkflow.upstream': 'En amont:', + 'settings.devWorkflow.forkPrNote': 'Les PR seront soumises au dépôt en amont.', + 'settings.devWorkflow.notForkNote': + 'Pas un fork. Les PR seront soumises directement contre ce dépôt.', + 'settings.devWorkflow.targetBranch': 'Branche cible', + 'settings.devWorkflow.targetBranchNote': 'Des PR seront créés contre cette branche', + 'settings.devWorkflow.loadingBranches': 'Chargement des branches...', + 'settings.devWorkflow.runFrequency': 'Fréquence de course', + 'settings.devWorkflow.runFrequencyNote': + "À quelle fréquence l'agent doit vérifier les problèmes et créer des PR.", + 'settings.devWorkflow.updateConfiguration': 'Mettre à jour la configuration', + 'settings.devWorkflow.saveConfiguration': 'Enregistrer la configuration', + 'settings.devWorkflow.remove': 'Supprimer', + 'settings.devWorkflow.saved': 'Enregistré', + 'settings.devWorkflow.activeConfiguration': 'Configuration active', + 'settings.devWorkflow.activeConfigRepository': 'Dépôt:', + 'settings.devWorkflow.activeConfigUpstream': 'En amont:', + 'settings.devWorkflow.activeConfigTargetBranch': 'Branche cible:', + 'settings.devWorkflow.activeConfigSchedule': 'Programme:', + 'settings.devWorkflow.enabled': 'Activé', + 'settings.devWorkflow.paused': 'En pause', + 'settings.devWorkflow.nextRun': 'Prochaine course', + 'settings.devWorkflow.lastRun': 'Dernière exécution', + 'settings.devWorkflow.runNow': 'Cours maintenant', + 'settings.devWorkflow.running': 'Course…', + 'settings.devWorkflow.recentRuns': 'Courses récentes', + 'settings.devWorkflow.cronSaveError': "Échec de l'enregistrement de la configuration", + 'settings.devWorkflow.lastOutput': 'Dernière sortie', + 'settings.devWorkflow.noOutput': 'Aucune sortie capturée', + 'settings.devWorkflow.runningStatus': + "L'agent fonctionne — il choisit un problème et travaille sur une solution...", + 'settings.devWorkflow.errorNotConnected': + "GitHub n'est pas connecté. Veuillez connecter GitHub via Paramètres > Avancé > Composio en premier.", + 'settings.devWorkflow.errorToolNotEnabled': + "L'outil GITHUB_LIST_REPOSITORIES_FOR_THE_AUTHENTICATED_USER n'est pas activé sur ce backend. Veuillez demander à votre administrateur de l'activer dans l'intégration Composio (backend#842).", + 'settings.devWorkflow.errorNotAuthenticated': "Non authentifié. Veuillez vous connecter d'abord.", + 'settings.devWorkflow.errorNoRepositories': 'Aucun dépôt trouvé pour ce compte GitHub.', + 'settings.devWorkflow.schedule.every30min': 'Toutes les 30 minutes', + 'settings.devWorkflow.schedule.everyHour': 'Toutes les heures', + 'settings.devWorkflow.schedule.every2hours': 'Toutes les 2 heures', + 'settings.devWorkflow.schedule.every6hours': 'Toutes les 6 heures', + 'settings.devWorkflow.schedule.onceDaily': 'Une fois par jour (9 h)', + 'settings.developerMenu.cronJobs.title': 'Tâches cron', + 'settings.developerMenu.cronJobs.desc': + "Afficher et configurer les tâches planifiées des compétences d'exécution", + 'settings.developerMenu.localModelDebug.title': 'Débogage du modèle local', + 'settings.developerMenu.localModelDebug.desc': + "Configuration Ollama, téléchargements d'assets, tests de modèle et diagnostics", + 'settings.developerMenu.webhooks.title': 'Webhooks', + 'settings.developerMenu.webhooks.desc': + "Inspecter les enregistrements de webhooks d'exécution et les journaux de requêtes capturés", + 'settings.developerMenu.eventLog.title': 'Journal des événements', + 'settings.developerMenu.eventLog.desc': + 'Flux en direct codé par couleur de tous les événements des agents, outils et systèmes', + 'settings.developerMenu.eventLog.allTypes': 'Tous les types', + 'settings.developerMenu.eventLog.filterAgent': 'Filtrer...', + 'settings.developerMenu.eventLog.download': 'Télécharger', + 'settings.developerMenu.eventLog.events': 'événements', + 'settings.developerMenu.eventLog.live': 'Vivre', + 'settings.developerMenu.eventLog.disconnected': 'Déconnecté', + 'settings.developerMenu.eventLog.waiting': 'En attente des événements...', + 'settings.developerMenu.eventLog.notConnected': 'Non connecté au noyau', + 'settings.developerMenu.eventLog.jumpToLatest': 'Aller au plus récent', + 'settings.developerMenu.eventLog.badge.tool': 'TOOL', + 'settings.developerMenu.eventLog.badge.agent': 'AGENT', + 'settings.developerMenu.eventLog.badge.info': 'INFO', + 'settings.developerMenu.eventLog.badge.mem': 'MEM', + 'settings.developerMenu.eventLog.badge.chan': 'CHAN', + 'settings.developerMenu.eventLog.badge.cron': 'CRON', + 'settings.developerMenu.eventLog.badge.hook': 'HOOK', + 'settings.developerMenu.eventLog.badge.warn': 'WARN', + 'settings.developerMenu.eventLog.badge.skill': 'SKILL', + 'settings.developerMenu.eventLog.badge.comp': 'COMP', + 'settings.developerMenu.eventLog.badge.mcp': 'MCP', + 'settings.developerMenu.intelligence.title': 'Intelligence', + 'settings.developerMenu.intelligence.desc': + 'Espace mémoire, moteur subconscient, rêves et paramètres', + 'settings.developerMenu.notificationRouting.title': 'Routage des notifications', + 'settings.developerMenu.notificationRouting.desc': + "Score d'importance par IA et escalade de l'orchestrateur pour les alertes d'intégration", + 'settings.developerMenu.composeioTriggers.title': 'Déclencheurs ComposeIO', + 'settings.developerMenu.composeioTriggers.desc': + "Afficher l'historique et les archives des déclencheurs ComposeIO", + 'settings.developerMenu.composioRouting.title': 'Routage Composio (mode direct)', + 'settings.developerMenu.composioRouting.desc': + 'Utilise ta propre clé API Composio et route les appels directement vers backend.composio.dev', + 'settings.developerMenu.integrationTriggers.title': "Déclencheurs d'intégration", + 'settings.developerMenu.integrationTriggers.desc': + "Configurer les paramètres de triage IA pour les déclencheurs d'intégration Composio", + 'settings.developerMenu.mcpServer.title': 'MCP Serveur', + 'settings.developerMenu.mcpServer.desc': + 'Configurer les clients MCP externes pour se connecter à OpenHuman', + 'settings.developerMenu.autonomy.title': 'Autonomie de l’agent', + 'settings.developerMenu.autonomy.desc': + 'Limites de fréquence des actions des outils et seuils de sécurité', + 'settings.mcpServer.title': 'Serveur MCP', + 'settings.mcpServer.toolsSectionTitle': 'Outils disponibles', + 'settings.mcpServer.toolsSectionDesc': + "Outils exposés via le serveur stdio MCP lors de l'exécution d'openhuman-core mcp", + 'settings.mcpServer.configSectionTitle': 'Configuration du client', + 'settings.mcpServer.configSectionDesc': + "Sélectionnez votre client MCP pour générer l'extrait de configuration correct", + 'settings.mcpServer.copySnippet': 'Copier dans le presse-papiers', + 'settings.mcpServer.copied': 'Copié !', + 'settings.mcpServer.openConfigFile': 'Ouvrir le fichier de configuration', + 'settings.mcpServer.binaryPathNotFound': + 'Binaire OpenHuman introuvable. Si vous exécutez à partir des sources, compilez avec : cargo build --bin openhuman-core', + 'settings.mcpServer.openConfigError': "Échec de l'ouverture du fichier de configuration", + 'settings.mcpServer.clientClaudeDesktop': 'Bureau Claude', + 'settings.mcpServer.clientCursor': 'Curseur', + 'settings.mcpServer.clientCodex': 'Codex', + 'settings.mcpServer.clientZed': 'Zed', + 'settings.mcpServer.configFilePath': 'Fichier de configuration', + 'settings.mcpServer.clientSelectorAriaLabel': 'MCP sélecteur de client', + 'settings.appearance.menuDesc': 'Choisis clair, sombre ou le thème du système', + 'settings.agentAccess.title': "Accès OS de l'agent", + 'settings.agentAccess.menuDesc': + "Contrôlez où l'agent peut read/write et s'il peut utiliser le shell.", + 'settings.agentAccess.loadError': "Échec du chargement des paramètres d'accès", + 'settings.agentAccess.saveError': "Échec de l'enregistrement des paramètres d'accès", + 'settings.agentAccess.saved': "Enregistré — s'applique à votre prochain message.", + 'settings.agentAccess.desktopOnly': + "Les paramètres d'accès ne sont disponibles que dans l'application de bureau.", + 'settings.agentAccess.loading': 'Chargement…', + 'settings.agentAccess.accessMode': "Mode d'accès", + 'settings.agentAccess.tier.readonly.title': 'Lecture seule', + 'settings.agentAccess.tier.readonly.desc': + "Lit des fichiers et exécute des commandes en lecture seule pour explorer — mais n'écrit jamais, ne modifie jamais, ni n’exécute quoi que ce soit qui change l’état.", + 'settings.agentAccess.tier.supervised.title': 'Demandez avant de modifier', + 'settings.agentAccess.tier.supervised.desc': + 'Crée de nouveaux fichiers librement, mais demande votre approbation avant de modifier un fichier existant, d’exécuter une commande, d’accéder au réseau ou d’installer quoi que ce soit.', + 'settings.agentAccess.tier.full.title': 'Accès complet', + 'settings.agentAccess.tier.full.desc': + "Exécute des commandes avec l'accès complet de votre compte utilisateur — il peut read/write partout où cela est autorisé, sauf dans les magasins de certificats et du système. Les commandes destructrices, l'accès au réseau et les installations demandent toujours une approbation.", + 'settings.agentAccess.defaultTag': '(par défaut)', + 'settings.agentAccess.fullWarning': + "⚠ L'accès complet exécute des commandes avec l'accès complet de votre compte et n'est pas isolé. Ne l'activez que lorsque vous faites confiance à l'agent avec cette machine. Les répertoires de systèmes et d'identifiants restent bloqués, et les actions destructrices, réseau et d'installation demandent toujours une approbation.", + 'settings.agentAccess.confine.label': "Confiner à l'espace de travail", + 'settings.agentAccess.confine.desc': + "Restreignez l'agent au répertoire de l'espace de travail (plus tous les dossiers accordés), quel que soit le mode d'accès sélectionné. Lorsqu'il est désactivé, il peut accéder à n'importe quel endroit auquel votre utilisateur peut accéder — sauf aux répertoires de crédentiel et système toujours bloqués.", + 'settings.agentAccess.requireTaskPlanApproval.label': "Exiger l'approbation du plan de tâche", + 'settings.agentAccess.requireTaskPlanApproval.desc': + "Pause avant qu'un agent assigné n'exécute un briefing de tâche rédigé par un agent.", + 'settings.agentAccess.grantedFolders': 'Dossiers accordés', + 'settings.agentAccess.alwaysAllow': 'Outils toujours autorisés', + 'settings.agentAccess.alwaysAllowDesc': + "Les outils que vous avez marqués « Toujours autoriser » dans le chat s'exécutent sans demander. Supprimez-en un pour être invité à nouveau.", + 'settings.agentAccess.alwaysAllowNone': 'Pas encore d’outils toujours autorisés.', + 'settings.agentAccess.grantedDesc': + "Dossiers que l'agent peut lire et écrire, en plus de l'espace de travail. Les magasins d'informations d'identification (~/.ssh, ~/.gnupg, ~/.aws, trousseaux) et les répertoires système (/etc, /System, C:\\Windows,…) sont toujours bloqués, même à l'intérieur d'un dossier autorisé.", + 'settings.agentAccess.noneGranted': 'Aucun dossier accordé.', + 'settings.agentAccess.readWrite': 'lire + écrire', + 'settings.agentAccess.readOnly': 'lecture seule', + 'settings.agentAccess.remove': 'Supprimer', + 'settings.agentAccess.pathPlaceholder': 'Chemin absolu du dossier', + 'settings.agentAccess.accessLevelLabel': "Niveau d'accès", + 'settings.agentAccess.add': 'Ajouter', + 'settings.agentAccess.saving': 'Enregistrement…', + 'settings.agentAccess.changesApply': "Les modifications s'appliquent à votre prochain message.", + 'settings.appearance.title': 'Apparence', + 'settings.appearance.themeHeading': 'Thème', + 'settings.appearance.themeAria': 'Thème', + 'settings.appearance.modeLight': 'Clair', + 'settings.appearance.modeLightDesc': 'Surfaces claires, texte sombre.', + 'settings.appearance.modeDark': 'Sombre', + 'settings.appearance.modeDarkDesc': + 'Surfaces sombres, plus agréables pour les yeux après le crépuscule.', + 'settings.appearance.modeSystem': 'Système de correspondance', + 'settings.appearance.modeSystemDesc': + "Suivez les paramètres d'apparence de votre système d'exploitation.", + 'settings.appearance.helperText': + "Le mode sombre fait basculer l'ensemble de l'application (chat, paramètres, panneaux) vers une palette sombre. \"Match system\" suit l'apparence de votre système d'exploitation et se met à jour en direct.", + 'settings.appearance.tabBarHeading': "Barre d'onglets inférieure", + 'settings.appearance.tabBarAlwaysShowLabels': 'Toujours afficher les étiquettes', + 'settings.appearance.tabBarAlwaysShowLabelsDesc': + "Lorsqu'elle est désactivée, les étiquettes n'apparaissent qu'au survol ou pour l'onglet actif.", + 'settings.mascot.active': 'Actif', + 'settings.mascot.characterDesc': 'Description du personnage', + 'settings.mascot.characterHeading': 'Titre du personnage', + 'settings.mascot.customGifError': + 'Entrez un HTTPS .gif URL, un bouclage HTTP .gif URL, un fichier:// .gif URL ou un chemin local .gif.', + 'settings.mascot.customGifHeading': 'Avatar GIF personnalisé', + 'settings.mascot.customGifLabel': 'Avatar GIF personnalisé URL', + 'settings.mascot.customGifPlaceholder': 'https://example.com/avatar.gif', + 'settings.mascot.characterPreview': 'Aperçu', + 'settings.mascot.characterStates': 'états', + 'settings.mascot.characterVisemes': 'visèmes', + 'settings.mascot.colorAria': 'OpenHuman couleur', + 'settings.mascot.colorDesc': 'Description de la couleur', + 'settings.mascot.colorHeading': 'Titre de la couleur', + 'settings.mascot.colorBlack': 'Noir', + 'settings.mascot.colorBurgundy': 'Bordeaux', + 'settings.mascot.colorCustom': 'Personnalisé', + 'settings.mascot.colorNavy': 'Marine', + 'settings.mascot.primaryColor': 'Couleur primaire', + 'settings.mascot.secondaryColor': 'Couleur secondaire', + 'settings.mascot.colorYellow': 'Jaune', + 'settings.mascot.libraryUnavailable': 'OpenHuman bibliothèque indisponible', + 'settings.mascot.title': 'OpenHuman', + 'settings.mascot.loadingLibrary': 'Chargement de la bibliothèque OpenHuman…', + 'settings.mascot.loadDetailError': 'Impossible de charger la mascotte.', + 'settings.mascot.loadLibraryError': 'Impossible de charger la bibliothèque de mascottes.', + 'settings.mascot.localDefault': 'OpenHuman local (par défaut)', + 'settings.mascot.menuTitle': 'Mascotte', + 'settings.mascot.menuDesc': "Choisis la couleur de la mascotte utilisée dans toute l'application", + 'settings.mascot.noCharacters': "Aucun personnage OpenHuman n'est encore disponible", + 'settings.mascot.noColorVariants': 'Aucune variante de couleur', + 'settings.mascot.voice.current': 'actuel', + 'settings.mascot.voice.customDesc': + "Trouvez les identifiants vocaux sur api.elevenlabs.io/v1/voices ou dans votre tableau de bord ElevenLabs. Seul l'identifiant est stocké — votre clé API reste sur le backend.", + 'settings.mascot.voice.customHeading': 'Identifiant vocal personnalisé', + 'settings.mascot.voice.customOption': "Autre (coller l'identifiant vocal)…", + 'settings.mascot.voice.customPlaceholder': 'par ex. 21m00Tcm4TlvDq8ikWAM', + 'settings.mascot.voice.desc': + "Choisissez la voix ElevenLabs utilisée par la mascotte pour les réponses parlées. Filtrez par genre, choisissez dans la liste sélectionnée, collez un identifiant personnalisé, ou laissez l'application choisir une voix qui correspond à la langue de l'interface.", + 'settings.mascot.voice.genderFemale': 'Féminin', + 'settings.mascot.voice.genderHeading': 'Genre de la voix', + 'settings.mascot.voice.genderMale': 'Masculin', + 'settings.mascot.voice.heading': 'Voix', + 'settings.mascot.voice.preset': 'Préréglage vocal', + 'settings.mascot.voice.presetHeading': 'Préréglage vocal', + 'settings.mascot.voice.preview': 'Aperçu de la voix', + 'settings.mascot.voice.previewError': "Échec de l'aperçu de la voix", + 'settings.mascot.voice.previewText': 'Salut, je suis votre assistant. Ceci est un aperçu vocal.', + 'settings.mascot.voice.previewing': 'Aperçu en cours…', + 'settings.mascot.voice.reset': 'Réinitialiser à la valeur par défaut', + 'settings.mascot.voice.useLocaleDefault': "Faire correspondre à la langue de l'application", + 'settings.mascot.voice.useLocaleDefaultDesc': + "Choisir automatiquement une voix pour la langue de l'interface actuelle.", + 'settings.persona.title': 'Persona', + 'settings.persona.menuTitle': 'Persona', + 'settings.persona.menuDesc': + 'Nom, personnalité, avatar et voix — votre assistant comme une seule identité', + 'settings.persona.identityHeading': 'Identité', + 'settings.persona.identityDesc': + "Un nom d'affichage et une courte description pour votre assistant. Affiché dans l'application; ne change pas la façon dont l'assistant raisonne.", + 'settings.persona.displayNameLabel': 'Nom affiché', + 'settings.persona.displayNamePlaceholder': 'par exemple Nova', + 'settings.persona.descriptionLabel': 'Description', + 'settings.persona.descriptionPlaceholder': + 'par exemple. Un assistant calme et concis pour mon équipe.', + 'settings.persona.soul.heading': 'Personnalité (ÂME.md)', + 'settings.persona.soul.desc': + "La personnalité que l'assistant suit dans chaque conversation. Les modifications sont enregistrées dans votre espace de travail et prennent effet lors de la réponse suivante.", + 'settings.persona.soul.editorLabel': 'Contenu de SOUL.md', + 'settings.persona.soul.reset': 'Réinitialiser par défaut', + 'settings.persona.soul.usingDefault': 'Utiliser le défaut inclus', + 'settings.persona.soul.loadError': 'Impossible de charger SOUL.md', + 'settings.persona.soul.saveError': "Impossible d'enregistrer SOUL.md", + 'settings.persona.soul.resetError': 'Impossible de réinitialiser SOUL.md', + 'settings.persona.appearanceHeading': 'Avatar et Voix', + 'settings.persona.appearanceDesc': + "La couleur de la mascotte, l'avatar personnalisé GIF et la voix de réponse sont configurés dans les paramètres de la mascotte.", + 'settings.persona.openMascotSettings': 'Ouvrir les paramètres de Mascot', + 'settings.memoryWindow.balanced.badge': 'Recommandé', + 'settings.memoryWindow.balanced.hint': + 'Valeur par défaut raisonnable — bonne continuité sans consommer de jetons supplémentaires à chaque exécution.', + 'settings.memoryWindow.balanced.label': 'Équilibré', + 'settings.memoryWindow.description': + "Quelle quantité de contexte mémorisé OpenHuman injecte dans chaque nouvelle exécution d'agent. Des fenêtres plus larges semblent plus conscientes des conversations passées mais consomment plus de jetons — et coûtent plus cher — à chaque exécution.", + 'settings.memoryWindow.extended.badge': 'Plus de contexte', + 'settings.memoryWindow.extended.hint': + 'Plus de mémoire à long terme injectée à chaque exécution. Coût en jetons plus élevé par tour.', + 'settings.memoryWindow.extended.label': 'Étendu', + 'settings.memoryWindow.maximum.badge': 'Coût maximum', + 'settings.memoryWindow.maximum.hint': + 'La plus grande fenêtre sûre. Meilleure continuité, facture de jetons nettement plus élevée à chaque exécution.', + 'settings.memoryWindow.maximum.label': 'Maximum', + 'settings.memoryWindow.minimal.badge': 'Le moins cher', + 'settings.memoryWindow.minimal.hint': + 'Plus petite fenêtre de mémoire. Le moins cher, le plus rapide, le moins de continuité entre les exécutions.', + 'settings.memoryWindow.minimal.label': 'minimal', + 'settings.memoryWindow.title': 'Fenêtre de mémoire à long terme', + 'settings.modelHealth.title': 'Santé Modèle', + 'settings.modelHealth.desc': + "Qualité par modèle, taux d'hallucination et comparaison des coûts entre les modèles actifs", + 'settings.modelHealth.allStatuses': 'Tous les statuts', + 'settings.modelHealth.models': 'modèles', + 'settings.modelHealth.loading': 'Chargement des données du modèle...', + 'settings.modelHealth.empty': 'Aucun modèle enregistré', + 'settings.modelHealth.col.model': 'Modèle', + 'settings.modelHealth.col.quality': 'Qualité', + 'settings.modelHealth.col.halluc': "Taux d'halluc.", + 'settings.modelHealth.col.cost': 'Coût / 1M sorti', + 'settings.modelHealth.col.agents': 'Agents', + 'settings.modelHealth.col.status': 'Statut', + 'settings.modelHealth.badge.keep': 'Garder', + 'settings.modelHealth.badge.replace': 'Remplacer', + 'settings.modelHealth.badge.staging': 'Test de mise en scène', + 'settings.modelHealth.badge.vision': 'Vision seulement', + 'settings.modelHealth.swap': 'Échanger?', + 'settings.modelHealth.modal.title': 'Remplacer le modèle?', + 'settings.modelHealth.modal.hallucRate': "Taux d'hallucination", + 'settings.modelHealth.modal.cancel': 'Annuler', + 'settings.modelHealth.modal.apply': 'Appliquer le remplacement', + 'settings.modelHealth.tag.cheaper': 'CHEAPER', + 'settings.modelHealth.tag.better': 'BETTER', + 'settings.screenIntel.permissions.accessibility': 'Accessibilité', + 'settings.screenIntel.permissions.grantHint': "Indice d'autorisation", + 'settings.screenIntel.permissions.inputMonitoring': 'Surveillance des entrées', + 'settings.screenIntel.permissions.macosAppliesPrivacy': 'macOS applique la confidentialité', + 'settings.screenIntel.permissions.openInputMonitoring': 'Demande en cours…', + 'settings.screenIntel.permissions.refreshStatus': 'Actualisation…', + 'settings.screenIntel.permissions.refreshing': 'Actualisation…', + 'settings.screenIntel.permissions.requestAccessibility': 'Demande en cours…', + 'settings.screenIntel.permissions.requestScreenRecording': 'Demande en cours…', + 'settings.screenIntel.permissions.requesting': 'Demande en cours…', + 'settings.screenIntel.permissions.restartRefresh': 'Redémarrage du core…', + 'settings.screenIntel.permissions.restartingCore': 'Redémarrage du core…', + 'settings.screenIntel.permissions.screenRecording': "Enregistrement d'écran", + 'settings.screenIntel.permissions.title': 'Autorisations', + 'skills.card.moreActions': "Plus d'actions", + 'skills.channelIcon.discord': 'Discord', + 'skills.channelIcon.imessage': 'iMessage', + 'skills.channelIcon.telegram': 'Telegram', + 'skills.channelIcon.web': 'Web', + 'skills.channelIcon.yuanbao': 'Yuanbao', + 'skills.composio.poweredBy': 'Propulsé par Composio', + 'skills.composio.staleStatusTitle': 'Les connexions affichent un état obsolète', + 'skills.create.allowedTools': 'Outils autorisés', + 'skills.create.allowedToolsHelp': 'Rendu dans le frontmatter SKILL.md comme', + 'skills.create.allowedToolsPlaceholder': 'node_exec, récupérer', + 'skills.create.author': 'Auteur', + 'skills.create.authorPlaceholder': 'Ton nom', + 'skills.create.commaSeparated': '(séparés par des virgules)', + 'skills.create.createBtn': 'Créer la compétence', + 'skills.create.createError': 'Impossible de créer la compétence', + 'skills.create.creating': 'Création…', + 'skills.create.description': 'Description', + 'skills.create.descriptionPlaceholder': 'Que fait cette compétence ?', + 'skills.create.optional': '(facultatif)', + 'skills.create.inputs.heading': 'Inputs', + 'skills.create.inputs.help': + "Déclarez les paramètres dont la compétence a besoin. Le lanceur de compétences affichera un formulaire pour ceux-ci à l'exécution.", + 'skills.create.inputs.add': 'Ajouter une entrée', + 'skills.create.inputs.row.name': "Nom de l'entrée", + 'skills.create.inputs.row.namePlaceholder': 'ex. repo', + 'skills.create.inputs.row.nameError': + 'Lettres, chiffres, tirets bas et tirets uniquement ; doit commencer par une lettre.', + 'skills.create.inputs.row.description': "Description de l'entrée", + 'skills.create.inputs.row.descriptionPlaceholder': 'Que contient ce champ ?', + 'skills.create.inputs.row.type': 'Type', + 'skills.create.inputs.row.required': 'Required', + 'skills.create.inputs.row.remove': "Supprimer l'entrée", + 'skills.create.inputs.type.string': 'Text', + 'skills.create.inputs.type.integer': 'Number', + 'skills.create.inputs.type.boolean': 'Oui / Non', + 'skills.create.license': 'Licence', + 'skills.create.licensePlaceholder': 'MIT', + 'skills.create.name': 'Nom', + 'skills.create.namePlaceholder': 'ex. Journal de trading', + 'skills.create.scope': 'Portée', + 'skills.create.scopeProjectHint': '/.openhuman/skills/', + 'skills.create.scopeUserHint': + 'Écrit dans ~/.openhuman/skills//SKILL.md — disponible dans tous les espaces de travail.', + 'skills.create.slugLabel': 'Libellé du slug', + 'skills.create.subtitle': 'SKILL.md', + 'skills.create.tags': 'Étiquettes', + 'skills.create.tagsPlaceholder': 'trading, recherche', + 'skills.create.title': 'Nouvelle compétence', + 'skills.detail.allowedTools': 'Outils autorisés', + 'skills.detail.author': 'Auteur', + 'skills.detail.bundledResources': 'Ressources groupées', + 'skills.detail.closeAriaLabel': 'Fermer les détails de la compétence', + 'skills.detail.location': 'Emplacement', + 'skills.detail.noBundledResources': 'Aucune ressource groupée.', + 'skills.detail.tags': 'Étiquettes', + 'skills.detail.warnings': 'Avertissements', + 'skills.install.errors.alreadyInstalledHint': + "Une compétence avec ce slug existe déjà dans l'espace de travail. Supprimez-le d'abord ou modifiez le frontmatter `metadata.id` / `name`.", + 'skills.install.errors.alreadyInstalledTitle': 'Compétence déjà installée', + 'skills.install.errors.fetchFailedHint': + "La demande n'a pas abouti. Vérifiez les points URL sur un fichier public accessible et que l'hôte a renvoyé une réponse 2xx.", + 'skills.install.errors.fetchFailedTitle': 'Échec de la récupération', + 'skills.install.errors.fetchTimedOutHint': + "L'hôte distant n'a pas répondu à temps. Réessayez ou augmentez le délai d'attente (1 à 600 s).", + 'skills.install.errors.fetchTimedOutTitle': 'Le délai de récupération a expiré.', + 'skills.install.errors.fetchTooLargeHint': + 'Le fichier SKILL.md doit être inférieur à 1 Mo. Divisez les ressources groupées en fichiers « références/ » ou « scripts/ » au lieu de les intégrer.', + 'skills.install.errors.fetchTooLargeTitle': 'SKILL.md trop volumineux', + 'skills.install.errors.genericHint': + 'Le backend a renvoyé une erreur. Le message brut est présenté ci-dessous.', + 'skills.install.errors.genericTitle': "Impossible d'installer la compétence", + 'skills.install.errors.invalidSkillHint': + 'Le frontmatter doit être un YAML valide avec des champs `name` et `description` non vides, terminés par `---`.', + 'skills.install.errors.invalidSkillTitle': "SKILL.md n'a pas analysé", + 'skills.install.errors.invalidUrlHint': + 'Seuls les HTTPS URL publics sont autorisés. Les hôtes privés, de bouclage et de métadonnées sont bloqués.', + 'skills.install.errors.invalidUrlTitle': 'URL rejeté', + 'skills.install.errors.unsupportedUrlHint': + "Seuls les liens directs `.md` fonctionnent. Pour GitHub, créez un lien vers un fichier (github.com/owner/repo/blob/.../SKILL.md) - les racines de l'arborescence et du dépôt ne sont pas installées.", + 'skills.install.errors.unsupportedUrlTitle': 'Formulaire URL non pris en charge.', + 'skills.install.errors.writeFailedHint': + "Le répertoire des compétences de l'espace de travail n'était pas accessible en écriture. Vérifiez les autorisations du système de fichiers pour `/.openhuman/skills/`.", + 'skills.install.errors.writeFailedTitle': "Impossible d'écrire SKILL.md", + 'skills.install.fetchLog': 'Récupérer le journal', + 'skills.install.fetchingPrefix': 'Récupération', + 'skills.install.fetchingSuffix': + "cela peut prendre jusqu'au délai d'attente que vous avez configuré.", + 'skills.install.installBtn': 'Installation…', + 'skills.install.installComplete': 'Installation terminée', + 'skills.install.installing': 'Installation…', + 'skills.install.parseWarnings': "Avertissements d'analyse", + 'skills.install.rawError': 'Erreur brute', + 'skills.install.subtitleMiddle': "sur HTTPS et l'installe sous", + 'skills.install.subtitlePrefix': 'Récupère un seul', + 'skills.install.subtitleSuffix': + 'HTTPS uniquement ; les hôtes privés et de bouclage sont bloqués.', + 'skills.install.successDiscovered': 'Vous avez découvert {count} nouvelle(s) compétence(s).', + 'skills.install.successNoNewIds': + "Compétence installée, mais aucun nouvel identifiant de compétence n'est apparu - le catalogue contient peut-être déjà une compétence avec le même slug.", + 'skills.install.timeoutHint': '(secondes, optionnel)', + 'skills.install.timeoutHelp': + 'La valeur par défaut est 60 secondes. Les valeurs en dehors de 1-600 sont limitées côté serveur.', + 'skills.install.timeoutInvalid': 'Doit être un entier compris entre 1 et 600.', + 'skills.install.timeoutLabel': "Libellé du délai d'attente", + 'skills.install.timeoutPlaceholder': '60', + 'skills.install.title': 'Installer une compétence depuis une URL', + 'skills.install.urlHelpMiddle': 'déposer.', + 'skills.install.urlHelpPrefix': 'Lien direct vers une réécriture automatique de', + 'skills.install.urlHelpSuffix': 'URLs vers', + 'skills.install.urlInvalidPrefix': 'URL doit être un lien', + 'skills.install.urlInvalidSuffix': 'bien formé. Le support de', + 'skills.install.urlLabel': 'URL de la compétence', + 'skills.install.urlPlaceholder': 'https://raw.githubusercontent.com/owner/repo/main/SKILL.md', + 'skills.meetingBots.bannerDesc': 'Description de la bannière', + 'skills.meetingBots.bannerTitle': 'Titre de la bannière', + 'skills.meetingBots.busyTitle': 'OpenHuman est occupé', + 'skills.meetingBots.comingSoon': 'Bientôt disponible', + 'skills.meetingBots.couldNotStartTitle': 'Impossible de démarrer OpenHuman', + 'skills.meetingBots.displayName': "Nom d'affichage", + 'skills.meetingBots.failedToStart': "Échec du démarrage d'OpenHuman.", + 'skills.meetingBots.joiningMessage': + 'Il devrait apparaître comme participant dans quelques secondes.', + 'skills.meetingBots.joiningTitle': 'OpenHuman rejoint la réunion', + 'skills.meetingBots.meetingLink': 'Lien de réunion', + 'skills.meetingBots.modalAriaLabel': 'Envoyer OpenHuman à une réunion', + 'skills.meetingBots.modalDesc': 'Description de la modal', + 'skills.meetingBots.modalTitle': 'Envoyer OpenHuman à une réunion', + 'skills.meetingBots.newBadge': 'Nouveau badge', + 'skills.meetingBots.platformComingSoon': '{label} sera bientôt disponible.', + 'skills.meetingBots.platformHints.gmeet': 'meet.google.com/abc-defg-hij', + 'skills.meetingBots.platformHints.teams': 'teams.microsoft.com/...', + 'skills.meetingBots.platformHints.zoom': 'zoom.us/j/...', + 'skills.meetingBots.platforms.gmeet': 'Google Meet', + 'skills.meetingBots.platforms.teams': 'Microsoft Teams', + 'skills.meetingBots.platforms.zoom': 'Zoom', + 'skills.meetingBots.sendTo': 'Envoyer à', + 'skills.meetingBots.soonSuffix': 'bientôt', + 'skills.meetingBots.starting': 'Démarrage…', + 'skills.resource.preview.closeAriaLabel': "Fermer l'aperçu", + 'skills.resource.preview.failed': "Échec de l'aperçu", + 'skills.resource.preview.loading': "Chargement de l'aperçu…", + 'skills.resource.tree.empty': 'Aucune ressource groupée.', + 'skills.search.placeholder': 'Espace réservé', + 'skills.setup.autocomplete.acceptKey': "Touche d'acceptation", + 'skills.setup.autocomplete.activeDesc': 'Description active', + 'skills.setup.autocomplete.activeTitle': "L'autocomplétion est active", + 'skills.setup.autocomplete.customizeSettings': 'Personnaliser les paramètres', + 'skills.setup.autocomplete.debounce': 'Anti-rebond', + 'skills.setup.autocomplete.description': 'Description', + 'skills.setup.autocomplete.enableBtn': 'Activation…', + 'skills.setup.autocomplete.enableError': "Échec de l'activation de l'autocomplétion", + 'skills.setup.autocomplete.enabling': 'Activation…', + 'skills.setup.autocomplete.notSupported': 'Non pris en charge', + 'skills.setup.autocomplete.stepEnable': 'Activer les complétions en ligne', + 'skills.setup.autocomplete.stepSuccess': "Prêt à l'emploi", + 'skills.setup.autocomplete.stylePreset': 'Préréglage de style', + 'skills.setup.autocomplete.stylePresetValue': 'Équilibré (configurable plus tard)', + 'skills.setup.autocomplete.title': 'Autocomplétion de texte', + 'skills.setup.screenIntel.activeDesc': 'Description active', + 'skills.setup.screenIntel.activeTitle': "L'intelligence d'écran est activée", + 'skills.setup.screenIntel.advancedSettings': 'Paramètres avancés', + 'skills.setup.screenIntel.allGranted': 'Toutes les permissions accordées', + 'skills.setup.screenIntel.captureMode': 'Mode de capture', + 'skills.setup.screenIntel.captureModeValue': 'Toutes les fenêtres (configurable plus tard)', + 'skills.setup.screenIntel.deniedHint': + 'Après avoir accordé les permissions dans les Paramètres système, clique ci-dessous pour redémarrer et prendre en compte les modifications.', + 'skills.setup.screenIntel.enableBtn': 'Activation…', + 'skills.setup.screenIntel.enableDesc': + 's sur ton écran et injecte du contexte utile dans ton agent', + 'skills.setup.screenIntel.enableError': "Échec de l'activation de l'intelligence d'écran", + 'skills.setup.screenIntel.enabling': 'Activation…', + 'skills.setup.screenIntel.grant': 'Ouverture…', + 'skills.setup.screenIntel.granted': 'Accordé', + 'skills.setup.screenIntel.macosOnly': 'macOS uniquement', + 'skills.setup.screenIntel.opening': 'Ouverture…', + 'skills.setup.screenIntel.panicHotkey': 'Raccourci de panique', + 'skills.setup.screenIntel.permAccessibility': 'Accessibilité', + 'skills.setup.screenIntel.permInputMonitoring': 'Surveillance des entrées', + 'skills.setup.screenIntel.permScreenRecording': "Enregistrement d'écran", + 'skills.setup.screenIntel.permissionsDesc': 'Description des permissions', + 'skills.setup.screenIntel.permissionPathLabel': 'macOS applique la confidentialité à :', + 'skills.setup.screenIntel.refreshStatus': 'Actualiser le statut', + 'skills.setup.screenIntel.restartRefresh': 'Redémarrage…', + 'skills.setup.screenIntel.restarting': 'Redémarrage…', + 'skills.setup.screenIntel.stepEnable': 'Activer la compétence', + 'skills.setup.screenIntel.stepPermissions': 'Accorder les permissions', + 'skills.setup.screenIntel.stepSuccess': "Prêt à l'emploi", + 'skills.setup.screenIntel.title': "Intelligence d'écran", + 'skills.setup.screenIntel.visionModel': 'Modèle de vision', + 'skills.setup.voice.activation': 'Activation', + 'skills.setup.voice.activeDescPrefix': 'Fn', + 'skills.setup.voice.activeDescSuffix': 'Fn', + 'skills.setup.voice.activeTitle': "L'intelligence vocale est active", + 'skills.setup.voice.customizeSettings': 'Personnaliser les paramètres', + 'skills.setup.voice.downloadSttBtn': 'Télécharger le modèle STT', + 'skills.setup.voice.enableDesc': "Description d'activation", + 'skills.setup.voice.hotkey': 'Raccourci', + 'skills.setup.voice.startBtn': 'Démarrage…', + 'skills.setup.voice.startError': 'Échec du démarrage du serveur vocal', + 'skills.setup.voice.starting': 'Démarrage…', + 'skills.setup.voice.stepEnable': 'Démarrer le serveur vocal', + 'skills.setup.voice.stepSetup': 'Téléchargement du modèle requis', + 'skills.setup.voice.stepSuccess': "Prêt à l'emploi", + 'skills.setup.voice.sttNotReady': 'Modèle speech-to-text non prêt', + 'skills.setup.voice.sttNotReadyDesc': + "L'intelligence vocale nécessite un modèle Whisper local pour la transcription. Télécharge-le depuis les paramètres du modèle local.", + 'skills.setup.voice.sttReady': 'Modèle speech-to-text prêt', + 'skills.setup.voice.sttReturnHint': 'Indice de retour STT', + 'skills.setup.voice.title': 'Intelligence vocale', + 'skills.uninstall.couldNotUninstall': 'Impossible de désinstaller', + 'skills.uninstall.description': + "Cela supprime définitivement le répertoire de la compétence et toutes ses ressources fournies. L'agent cessera de la voir au prochain tour.", + 'skills.uninstall.title': 'Désinstaller', + 'skills.uninstall.uninstallBtn': 'Désinstaller', + 'skills.uninstall.uninstalling': 'Désinstallation…', + 'upsell.global.limitMessage': 'Mets à niveau ton plan ou recharge des crédits pour continuer', + 'upsell.global.limitTitle': 'Toi', + 'upsell.global.nearLimitMessage': + "Tu as utilisé {pct}% de ta limite d'utilisation. Mets à niveau pour des limites plus élevées.", + 'upsell.global.nearLimitTitle': "Limite d'utilisation proche", + 'upsell.usageLimit.bodyBudget': + 'Vous avez atteint votre limite hebdomadaire.{reset} Améliorez votre forfait ou rechargez des crédits pour éviter les limites.', + 'upsell.usageLimit.bodyRate': + "Vous avez atteint votre limite de taux d'inférence sur 10 heures.{reset} Améliorez pour des limites plus élevées.", + 'upsell.usageLimit.heading': "Limite d'utilisation atteinte", + 'upsell.usageLimit.notNow': 'Pas maintenant', + 'upsell.usageLimit.perWindow': '{amount}', + 'upsell.usageLimit.planIncludes': '{plan}', + 'upsell.usageLimit.resetsIn': 'Réinitialisation {time}.', + 'upsell.usageLimit.upgradePlan': 'Mettre à niveau le plan', + 'upsell.usageLimit.weeklyInference': '{amount}', + 'walkthrough.tooltip.letsGo': "C'est parti !", + 'walkthrough.tooltip.next': 'Suivant →', + 'walkthrough.tooltip.skip': 'Passer la visite', + 'walkthrough.tooltip.stepCounter': '{n} sur {total}', + 'webhooks.activity.empty': 'Vide', + 'webhooks.activity.title': 'Activité récente', + 'webhooks.composioHistory.empty': 'Vide', + 'webhooks.composioHistory.metadataId': 'ID de métadonnées', + 'webhooks.composioHistory.metadataUuid': 'UUID de métadonnées', + 'webhooks.composioHistory.payload': 'Charge utile', + 'webhooks.composioHistory.title': 'Historique des déclencheurs ComposeIO', + 'webhooks.tunnels.active': 'Actif', + 'webhooks.tunnels.createFailed': 'Échec de la création du tunnel', + 'webhooks.tunnels.creating': 'Création…', + 'webhooks.tunnels.deleteFailed': 'Échec de la suppression du tunnel', + 'webhooks.tunnels.descriptionPlaceholder': 'Description (optionnel)', + 'webhooks.tunnels.echo': 'Écho', + 'webhooks.tunnels.empty': 'Vide', + 'webhooks.tunnels.enableEcho': "Activer l'écho", + 'webhooks.tunnels.inactive': 'Inactif', + 'webhooks.tunnels.namePlaceholder': 'Nom du tunnel (ex. telegram-bot)', + 'webhooks.tunnels.newTunnel': 'Nouveau tunnel', + 'webhooks.tunnels.removeEcho': "Supprimer l'écho", + 'webhooks.tunnels.title': 'Tunnels webhook', + 'webhooks.tunnels.toggleFailed': "Échec de la bascule de l'écho", + 'composio.directModeRequiresKey': + "Échec de l'enregistrement. Le mode Direct nécessite une clé API non vide.", + 'composio.integrationSlugsHelp': "Identifiants d'intégration séparés par des virgules, ex.", + 'composio.integrationSlugsExample': 'gmail, slack', + 'composio.integrationSlugsCaseInsensitive': 'Insensible à la casse.', + 'composio.integrationSlugsPlaceholder': 'gmail, slack, ...', + 'composio.notYetRouted': 'pas encore routé', + 'composio.triggers.loading': 'Chargement…', + 'conversations.taskKanban.todo': 'À faire', + 'chat.addReaction': 'Ajouter une réaction', + 'chat.agentProfile.create': "Créer un profil d'agent", + 'chat.agentProfile.createFailed': "Impossible de créer le profil d'agent.", + 'chat.agentProfile.customDescription': "Profil d'agent personnalisé", + 'chat.agentProfile.defaultAgentLabel': 'Orchestrator', + 'chat.agentProfile.exists': "Le profil d'agent « {name} » existe déjà.", + 'chat.agentProfile.label': "Profil d'agent", + 'chat.agentProfile.namePlaceholder': 'Nom du profil', + 'chat.agentProfile.promptStylePlaceholder': 'Style de prompt', + 'chat.agentProfile.allowedToolsPlaceholder': 'Outils autorisés', + 'chat.backToThread': 'retour à {title}', + 'chat.parentThread': 'fil parent', + 'chat.removeReaction': 'Supprimer {emoji}', + 'settings.composio.loading': 'Chargement…', + 'settings.mascot.noCharactersAvailable': "Aucun personnage OpenHuman n'est encore disponible", + 'skills.uninstall.confirmTitle': 'Désinstaller {name} ?', + 'conversations.taskKanban.blocked': 'Bloqué', + 'conversations.taskKanban.done': 'Terminé', + 'conversations.taskKanban.pending': 'En attente', + 'conversations.taskKanban.working': 'Travailler', + 'conversations.taskKanban.awaitingApproval': "En attente d'approbation", + 'conversations.taskKanban.ready': 'Prêt', + 'conversations.taskKanban.rejected': 'rejeté', + 'conversations.taskKanban.inProgress': 'En cours', + 'intelligence.memoryChunk.detail.copiedHint': 'copié', + 'settings.composio.notYetRouted': 'pas encore routé', + 'settings.localModel.download.manageExternal': 'Gérez ce modèle dans votre runtime externe.', + 'settings.localModel.status.manageOllamaExternal': + "Gérez le processus Ollama et les téléchargements de modèles en dehors d'OpenHuman, puis relancez les diagnostics.", + 'settings.localModel.status.ollamaDocs': 'Documentation Ollama', + 'settings.localModel.status.thenRetry': + 'pour les instructions de configuration, puis réessayez une fois votre runtime accessible.', + 'devOptions.menuAi': "Configuration de l'IA", + 'devOptions.menuAiDesc': + 'Fournisseurs de cloud, modèles Ollama locaux et routage par charge de travail', + 'devOptions.menuScreenAware': "Connaissance de l'écran", + 'devOptions.menuScreenAwareDesc': + "Autorisations de capture d'écran, stratégie de surveillance et contrôles de session", + 'devOptions.menuMessaging': 'Canaux de messagerie', + 'devOptions.menuMessagingDesc': + "Configurer les modes d'authentification Telegram/Discord et le routage des canaux par défaut", + 'devOptions.menuTools': 'Outils', + 'devOptions.menuToolsDesc': + 'Activer ou désactiver les fonctionnalités que OpenHuman peut utiliser en votre nom', + 'devOptions.menuAgentChat': "Chat d'agent", + 'devOptions.menuAgentChatDesc': + "Conversation de l'agent de test avec remplacements de modèle et de température", + 'devOptions.menuCronJobs': 'Tâches Cron', + 'devOptions.menuCronJobsDesc': + "Afficher et configurer les tâches planifiées pour les compétences d'exécution", + 'devOptions.menuLocalModelDebug': 'Débogage du modèle local', + 'devOptions.menuLocalModelDebugDesc': + "Ollama configuration, téléchargements d'actifs, tests de modèles et diagnostics", + 'devOptions.menuWebhooksDebug': 'Webhooks', + 'devOptions.menuWebhooksDebugDesc': + "Inspecter les enregistrements de webhooks d'exécution et les journaux de requêtes capturés", + 'devOptions.menuIntelligence': 'Intelligence', + 'devOptions.menuIntelligenceDesc': + 'Espace de travail mémoire, moteur subconscient, rêves et paramètres', + 'devOptions.menuNotificationRouting': 'Routage des notifications', + 'devOptions.menuNotificationRoutingDesc': + "Score d'importance de l'IA et escalade de l'orchestrateur pour les alertes d'intégration", + 'devOptions.menuComposeIOTriggers': 'Déclencheurs ComposeIO', + 'devOptions.menuComposeIOTriggersDesc': + "Afficher l'historique et les archives des déclencheurs ComposeIO", + 'devOptions.menuComposioRouting': 'Routage Composio (mode direct)', + 'devOptions.menuComposioRoutingDesc': + 'Apportez votre propre clé Composio API et acheminez les appels directement vers backend.composio.dev', + 'devOptions.menuComposioTriggers': "Déclencheurs d'intégration", + 'devOptions.menuComposioTriggersDesc': + "Configurez les paramètres de triage IA pour les déclencheurs d'intégration Composio", + 'memory.sourceFilterAria': 'Filtrer par source', + 'calls.comingSoonDescription': "Les appels assistés par IA arrivent bientôt. Restez à l'écoute.", + 'vault.title': 'Coffres de connaissances', + 'vault.description': + 'Pointez vers un dossier local ; les fichiers sont découpés et mis en miroir dans la mémoire.', + 'vault.add': 'Ajouter un coffre-fort', + 'vault.added': 'Coffre-fort ajouté', + 'vault.createdMessage': 'Création de "{name}". Cliquez sur {sync} pour ingérer.', + 'vault.couldNotAdd': "Impossible d'ajouter le coffre", + 'vault.syncFailed': 'Échec de la synchronisation', + 'vault.syncFailedFor': 'Échec de la synchronisation pour « {name} »', + 'vault.syncFailedFiles': 'Échec de {count} fichier(s)', + 'vault.syncedTitle': '"{name}" synchronisé', + 'vault.syncSummary': '{ingested} ingéré, {unchanged} inchangé, supprimé {removed}', + 'vault.syncSummaryFailed': ', échec {count}', + 'vault.syncSummarySkipped': ', ignoré {count}', + 'vault.syncSummaryDuration': '· {seconds}s', + 'vault.confirmRemovePurge': + 'Supprimer le coffre « {name} » ?\n\nCliquez sur OK pour purger également sa mémoire (supprimer les {count} document(s) ingéré(s)).\nCliquez sur Annuler pour conserver les documents en mémoire.', + 'vault.confirmRemove': 'Voulez-vous vraiment supprimer le coffre-fort « {name} » ?', + 'vault.removed': 'Vault supprimé', + 'vault.removedPurgedMessage': 'Supprimé "{name}" et purgé sa mémoire.', + 'vault.removedKeptMessage': 'Suppression de "{name}". Documents conservés en mémoire.', + 'vault.couldNotRemove': 'Impossible de supprimer le coffre-fort', + 'vault.name': 'Nom', + 'vault.namePlaceholder': 'Mes notes de recherche', + 'vault.folderPath': 'Chemin du dossier (absolu)', + 'vault.folderPathPlaceholder': '/Utilisateurs/vous/Documents/notes', + 'vault.excludes': 'Exclut (sous-chaînes séparées par des virgules, facultatif)', + 'vault.excludesPlaceholder': 'drafts/, .secret', + 'vault.creating': 'Création…', + 'vault.create': 'Créer un coffre-fort', + 'vault.loading': 'Chargement coffres-forts…', + 'vault.failedToLoad': 'Échec du chargement des coffres-forts : {error}', + 'vault.empty': + "Aucun coffre pour l'instant. Ajoutez-en un ci-dessus pour commencer à ingérer un dossier.", + 'vault.fileCount': '{count} fichier(s)', + 'vault.syncedRelative': 'synchronisés {time}', + 'vault.neverSynced': 'jamais synchronisés', + 'vault.syncingProgress': 'Synchronisation… {ingested}/{total}', + 'vault.removing': 'Suppression…', + 'vault.relative.sec': 'il y a {count}s', + 'vault.relative.min': 'il y a {count}m', + 'vault.relative.hr': 'il y a {count}h', + 'vault.relative.day': '{count}d', + 'whatsapp.title': 'WhatsApp', + 'subconscious.interval.fiveMinutes': '5 min', + 'subconscious.interval.tenMinutes': '10 min', + 'subconscious.interval.fifteenMinutes': '15 min', + 'subconscious.interval.thirtyMinutes': '30 min', + 'subconscious.interval.oneHour': '1 heure', + 'subconscious.interval.sixHours': '6 heures', + 'subconscious.interval.twelveHours': '12 heures', + 'subconscious.interval.oneDay': '1 jour', + 'subconscious.priority.critical': 'critique', + 'subconscious.priority.important': 'important', + 'subconscious.priority.normal': 'normal', + 'subconscious.durationSeconds': '{seconds}s', + 'subconscious.durationMilliseconds': '{milliseconds}ms', + 'settings.appearance': 'Apparence', + 'settings.appearanceDesc': 'Choisissez clair, sombre ou assorti à votre thème système', + 'settings.mascot': 'Mascotte', + 'settings.mascotDesc': "Choisissez la couleur de la mascotte utilisée dans l'application", + 'pages.settings.account.walletBalances': 'Soldes du portefeuille', + 'pages.settings.account.walletBalancesDesc': + 'Afficher les soldes multi-chaînes de votre portefeuille local', + 'walletBalances.title': 'Soldes du portefeuille', + 'walletBalances.refresh': 'Refresh', + 'walletBalances.loading': 'Chargement des soldes…', + 'walletBalances.retry': 'Retry', + 'walletBalances.emptyState': + "Aucun compte de portefeuille pour l'instant — configurez un portefeuille dans Phrase de récupération.", + 'walletBalances.copyAddress': "Copier l'adresse", + 'walletBalances.providerMissing': 'fournisseur indisponible', + 'walletBalances.rawBalance': 'Brut : {raw}', + 'walletBalances.errorGeneric': + 'Impossible de charger les soldes du portefeuille. Configurez votre portefeuille dans Phrase de récupération et réessayez.', + 'settings.taskSources.title': 'Sources de tâches', + 'settings.taskSources.subtitle': + "Tirez les tâches de vos outils sur le tableau des tâches de l'agent", + 'settings.taskSources.description': + "Collecter les éléments de travail de GitHub, Notion, Linear et ClickUp, les enrichir et les acheminer vers le tableau des tâches de l'agent.", + 'settings.taskSources.connectHint': + "Les sources de tâches utilisent vos comptes connectés. Connectez-les d'abord sous Intégrations.", + 'settings.taskSources.disabledBanner': + "Les sources de tâches sont désactivées dans les paramètres. Activez-les pour qu'elles soient interrogées automatiquement.", + 'settings.taskSources.loadError': 'Échec du chargement des sources de la tâche', + 'settings.taskSources.addTitle': 'Ajouter une source de tâche', + 'settings.taskSources.provider': 'Fournisseur', + 'settings.taskSources.name': 'Nom (facultatif)', + 'settings.taskSources.namePlaceholder': 'par exemple, mes problèmes ouverts', + 'settings.taskSources.github.repo': 'Dépôt (propriétaire/nom, facultatif)', + 'settings.taskSources.github.labels': 'Étiquettes (séparées par des virgules)', + 'settings.taskSources.notion.database': 'ID de la base de données (tableau)', + 'settings.taskSources.linear.team': "ID de l'équipe (facultatif)", + 'settings.taskSources.clickup.team': 'ID de l’espace de travail (équipe) (optionnel)', + 'settings.taskSources.assignedToMe': 'Uniquement les éléments qui me sont attribués', + 'settings.taskSources.add': 'Ajouter une source', + 'settings.taskSources.adding': 'Ajout en cours…', + 'settings.taskSources.preview': 'Aperçu', + 'settings.taskSources.previewResult': 'La ou les tâches {count} correspondent à ce filtre', + 'settings.taskSources.fetchNow': 'Ramasse maintenant', + 'settings.taskSources.fetching': 'Récupération…', + 'settings.taskSources.fetchResult': 'Acheminé {routed} des tâches {fetched}', + 'settings.taskSources.configured': 'Sources configurées', + 'settings.taskSources.empty': 'Aucune source de tâche configurée pour le moment.', + 'settings.taskSources.proactive': 'proactif', + 'settings.taskSources.lastFetch': 'Dernière récupération', + 'settings.taskSources.never': 'Jamais', + 'settings.taskSources.statusEnabled': 'Activé', + 'settings.taskSources.statusDisabled': 'désactivé', + 'settings.taskSources.enable': 'Activer', + 'settings.taskSources.disable': 'Désactiver', + 'settings.taskSources.remove': 'Supprimer', + 'settings.taskSources.removeConfirm': + "Supprimer cette source de tâche? Tout l'historique des tâches ingérées sera supprimé et ne pourra pas être annulé.", + 'settings.taskSources.refresh': 'Actualiser', + 'settings.taskSources.providers.github': 'GitHub', + 'settings.taskSources.providers.notion': 'Notion', + 'settings.taskSources.providers.linear': 'Linéaire', + 'settings.taskSources.providers.clickup': 'ClickUp', + 'skills.dashboard.title': 'Skills', + 'skills.dashboard.scheduledHeading': 'Compétences planifiées', + 'skills.dashboard.emptyTitle': 'Aucune compétence planifiée', + 'skills.dashboard.emptyBody': + 'Exécutez une compétence intégrée une fois ou enregistrez un calendrier récurrent pour la voir ici.', + 'skills.dashboard.create': 'Créer une compétence', + 'skills.dashboard.run': 'Exécuter une compétence', + 'skills.dashboard.enable': 'Activer la compétence planifiée', + 'skills.dashboard.disable': 'Désactiver la compétence planifiée', + 'skills.dashboard.lastRun': 'Dernière exécution', + 'skills.dashboard.nextRun': 'Prochaine exécution', + 'skills.dashboard.cardOpenRunner': 'Ouvrir dans le lanceur', + 'skills.dashboard.loadError': 'Échec du chargement des compétences planifiées', + 'skills.new.title': 'Créer une compétence', + 'skills.new.placeholderBody': + "Le formulaire de création arrive bientôt. Pour l'instant, utilisez le bouton « Nouvelle compétence » sur la page du lanceur.", + 'settings.agents.title': 'Agents', + 'settings.agents.subtitle': + 'Gérez les agents disponibles pour la délégation — les agents par défaut intégrés et vos propres agents personnalisés.', + 'settings.agents.menuDesc': 'Gérer les agents intégrés et personnalisés', + 'settings.agents.newAgent': 'Nouvel agent', + 'settings.agents.loadError': 'Impossible de charger les agents', + 'settings.agents.empty': "Pas encore d'agents", + 'settings.agents.sourceDefault': 'Intégré', + 'settings.agents.sourceCustom': 'Personnalisé', + 'settings.agents.enable': "Activer l'agent", + 'settings.agents.disable': "Désactiver l'agent", + 'settings.agents.edit': 'Modifier', + 'settings.agents.delete': 'Supprimer', + 'settings.agents.reset': 'Réinitialiser par défaut', + 'settings.agents.modelLabel': 'Modèle', + 'settings.agents.toolsLabel': 'Outils', + 'settings.agents.toolsAll': 'Tous les outils', + 'settings.agents.toolsCount': 'Outils {count}', + 'settings.agents.actionFailed': "Impossible de mettre à jour l'agent", + 'settings.agents.orchestratorLocked': "L'orchestrateur est toujours activé.", + 'settings.agents.editor.createTitle': 'Nouvel agent', + 'settings.agents.editor.editTitle': "Modifier l'agent", + 'settings.agents.editor.id': 'ID', + 'settings.agents.editor.idHint': 'Lettres minuscules, chiffres, _ et - seulement.', + 'settings.agents.editor.name': 'Nom', + 'settings.agents.editor.description': 'Description', + 'settings.agents.editor.model': 'Modèle (optionnel)', + 'settings.agents.editor.modelPlaceholder': + 'par exemple hériter, indice: rapide, ou un identifiant de modèle', + 'settings.agents.editor.systemPrompt': 'Invite système (optionnel)', + 'settings.agents.editor.tools': 'Outils autorisés', + 'settings.agents.editor.toolsHint': "Un nom d'outil par ligne. Utilisez * pour tous les outils.", + 'settings.agents.editor.defaultsNote': + 'Modifier un agent intégré enregistre une substitution que vous pouvez réinitialiser plus tard.', + 'settings.agents.editor.save': 'Enregistrer', + 'settings.agents.editor.create': 'Créer un agent', + 'settings.agents.editor.saving': 'Enregistrement…', + 'settings.agentsSection.title': 'Agents', + 'settings.agentsSection.description': + 'Gérez vos agents, leur autonomie et ce à quoi ils peuvent accéder sur cet ordinateur.', + 'settings.agentsSection.menuDesc': 'Registre, autonomie et accès au système', + 'settings.agents.editor.notFound': 'Agent introuvable.', + 'settings.agents.editor.modelInherit': 'Hériter (défaut de la plateforme)', + 'settings.agents.editor.modelHints': 'Conseils de routage', + 'settings.agents.editor.modelTiers': 'Niveaux de modèle', + 'settings.agents.editor.modelCustom': 'Identifiant de modèle personnalisé…', + 'settings.agents.editor.modelCustomPlaceholder': 'ex. anthropic/claude-sonnet-4', + 'settings.agents.editor.selectTools': 'Ajouter des outils', + 'settings.agents.editor.toolsAllSelected': 'Tous les outils', + 'settings.agents.editor.toolsNoneSelected': 'Aucun outil sélectionné', + 'settings.agents.editor.removeToolAria': 'Retirer {tool}', + 'settings.agents.editor.toolsModalTitle': 'Outils autorisés', + 'settings.agents.editor.toolsSelectedCount': '{count} sélectionné(s)', + 'settings.agents.editor.toolsSearchPlaceholder': 'Rechercher des outils…', + 'settings.agents.editor.toolsAllowAll': 'Autoriser tous les outils (*)', + 'settings.agents.editor.toolsAllowAllHint': + 'Cet agent peut utiliser tous les outils disponibles.', + 'settings.agents.editor.toolsLoading': 'Chargement des outils…', + 'settings.agents.editor.toolsLoadError': 'Impossible de charger les outils', + 'settings.agents.editor.toolsEmpty': 'Aucun outil ne correspond à votre recherche.', + 'settings.agents.editor.toolsDone': 'Done', + 'settings.agents.editor.builtInReadonly': + 'Les agents intégrés ne peuvent pas être modifiés. Vous pouvez les activer, les désactiver ou les réinitialiser depuis la liste des agents.', }; -export default fr; +export default messages; diff --git a/app/src/lib/i18n/hi.ts b/app/src/lib/i18n/hi.ts index 17ccc0547..87e634df4 100644 --- a/app/src/lib/i18n/hi.ts +++ b/app/src/lib/i18n/hi.ts @@ -1,31 +1,4089 @@ -import hi1 from './chunks/hi-1'; -import hi2 from './chunks/hi-2'; -import hi3 from './chunks/hi-3'; -import hi4 from './chunks/hi-4'; -import hi5 from './chunks/hi-5'; import type { TranslationMap } from './types'; -// Hindi (हिन्दी) translations. Each chunk maps to chunks/en-N.ts. -// Missing keys fall back to English via I18nContext.resolveEn(). -const hi: TranslationMap = { - ...hi1, - ...hi2, - ...hi3, - ...hi4, - ...hi5, +// Hindi (हिन्दी) translations. Keys mirror en.ts; missing/ +// English-identical values fall back to English via I18nContext.resolveEn(). +const messages: TranslationMap = { + 'nav.home': 'होम', + 'nav.human': 'मानव', + 'nav.chat': 'चैट', + 'nav.connections': 'कनेक्शन', + 'nav.memory': 'इंटेलिजेंस', + 'nav.alerts': 'अलर्ट', + 'nav.rewards': 'रिवॉर्ड', + 'nav.settings': 'सेटिंग्स', + 'common.cancel': 'रद्द करें', + 'common.save': 'सेव करें', + 'common.confirm': 'कन्फर्म करें', + 'common.delete': 'डिलीट करें', + 'common.edit': 'एडिट करें', + 'common.create': 'बनाएं', + 'common.search': 'सर्च करें', + 'common.loading': 'लोड हो रहा है…', + 'common.error': 'एरर', + 'common.success': 'सफल', + 'common.back': 'वापस', + 'common.next': 'आगे', + 'common.finish': 'पूरा करें', + 'common.close': 'बंद करें', + 'common.enabled': 'चालू है', + 'common.disabled': 'बंद है', + 'common.on': 'चालू', + 'common.off': 'बंद', + 'common.yes': 'हाँ', + 'common.no': 'नहीं', + 'common.ok': 'ठीक है', + 'common.name': 'नाम', + 'common.retry': 'पुनः प्रयास करें', + 'common.copy': 'कॉपी करें', + 'common.copied': 'कॉपी हो गया', + 'common.learnMore': 'और जानें', + 'common.seeAll': 'देखें', + 'common.dismiss': 'हटाएं', + 'common.clear': 'क्लियर करें', + 'common.reset': 'रीसेट करें', + 'common.refresh': 'रिफ्रेश करें', + 'common.export': 'एक्सपोर्ट करें', + 'common.import': 'इम्पोर्ट करें', + 'common.upload': 'अपलोड करें', + 'common.download': 'डाउनलोड करें', + 'common.add': 'जोड़ें', + 'common.remove': 'हटाएं', + 'common.showMore': 'और दिखाएं', + 'common.showLess': 'कम दिखाएं', + 'common.submit': 'सबमिट करें', + 'common.continue': 'जारी रखें', + 'common.comingSoon': 'जल्द आ रहा है', + 'common.breadcrumb': 'ब्रेडक्रंब', + 'settings.general': 'सामान्य', + 'settings.featuresAndAI': 'फीचर्स और AI', + 'settings.billingAndRewards': 'बिलिंग और रिवॉर्ड', + 'settings.support': 'सपोर्ट', + 'settings.advanced': 'एडवांस्ड', + 'settings.dangerZone': 'डेंजर ज़ोन', + 'settings.account': 'अकाउंट', + 'settings.accountDesc': 'रिकवरी फ्रेज़, टीम, कनेक्शन और प्राइवेसी', + 'settings.notifications': 'नोटिफिकेशन', + 'settings.notificationsDesc': 'डू नॉट डिस्टर्ब और हर अकाउंट के नोटिफिकेशन कंट्रोल', + 'settings.notifications.tabs.preferences': 'प्राथमिकताएँ', + 'settings.notifications.tabs.routing': 'रूटिंग', + 'settings.features': 'फीचर्स', + 'settings.featuresDesc': 'स्क्रीन अवेयरनेस, मैसेजिंग और टूल्स', + 'settings.aiModels': 'AI और मॉडल्स', + 'settings.aiModelsDesc': 'लोकल AI मॉडल सेटअप, डाउनलोड और LLM प्रोवाइडर', + 'settings.ai': 'AI कॉन्फिगरेशन', + 'settings.aiDesc': 'क्लाउड प्रोवाइडर, लोकल Ollama मॉडल और वर्कलोड रूटिंग', + 'settings.billingUsage': 'बिलिंग और उपयोग', + 'settings.billingUsageDesc': 'सब्सक्रिप्शन प्लान, क्रेडिट और पेमेंट तरीके', + 'settings.rewards': 'रिवॉर्ड', + 'settings.rewardsDesc': 'रेफरल, कूपन और कमाए हुए क्रेडिट', + 'settings.restartTour': 'टूर फिर से शुरू करें', + 'settings.restartTourDesc': 'प्रोडक्ट वॉकथ्रू शुरू से देखें', + 'settings.about': 'के बारे में', + 'settings.aboutDesc': 'ऐप वर्जन और सॉफ्टवेयर अपडेट', + 'settings.developerOptions': 'एडवांस्ड', + 'settings.developerOptionsDesc': 'AI कॉन्फिग, मैसेजिंग चैनल, टूल्स, डायग्नोस्टिक्स और डिबग पैनल', + 'settings.clearAppData': 'ऐप डेटा क्लियर करें', + 'settings.clearAppDataDesc': 'साइन आउट करें और सारा लोकल ऐप डेटा हमेशा के लिए मिटाएं', + 'settings.logOut': 'लॉग आउट', + 'settings.logOutDesc': 'अपने अकाउंट से साइन आउट करें', + 'settings.exitLocalSession': 'स्थानीय सत्र से बाहर निकलें', + 'settings.exitLocalSessionDesc': 'साइन-इन स्क्रीन पर वापस लौटें', + 'settings.language': 'भाषा', + 'settings.betaBuild': 'बीटा बिल्ड - v{version}', + 'settings.languageDesc': 'ऐप इंटरफेस की डिस्प्ले भाषा', + 'settings.alerts': 'अलर्ट', + 'settings.alertsDesc': 'हाल के अलर्ट और इनबॉक्स एक्टिविटी देखें', + 'settings.account.recoveryPhrase': 'रिकवरी फ्रेज़', + 'settings.account.recoveryPhraseDesc': 'अपना अकाउंट रिकवरी फ्रेज़ देखें और बैकअप लें', + 'settings.account.team': 'टीम', + 'settings.account.teamDesc': 'टीम मेंबर्स और परमिशन मैनेज करें', + 'settings.account.connections': 'कनेक्शन', + 'settings.account.connectionsDesc': 'लिंक्ड अकाउंट और सर्विसेज़ मैनेज करें', + 'settings.account.privacy': 'प्राइवेसी', + 'settings.account.privacyDesc': 'कंट्रोल करें कि आपके कंप्यूटर से क्या डेटा जाता है', + 'migration.title': 'किसी अन्य असिस्टेंट से इम्पोर्ट करें', + 'migration.description': + 'किसी अन्य लोकल असिस्टेंट से मेमोरी और नोट्स को इस वर्कस्पेस में माइग्रेट करें। पहले Preview से देखें कि क्या बदलेगा, फिर Apply से डेटा कॉपी करें। आपकी मौजूदा मेमोरी पहले बैकअप कर ली जाती है।', + 'migration.vendorLabel': 'सोर्स वेंडर', + 'migration.vendor.openclaw': 'OpenClaw', + 'migration.vendor.hermes': 'Hermes Agent', + 'migration.sourceLabel': 'सोर्स वर्कस्पेस पाथ (वैकल्पिक)', + 'migration.sourcePlaceholder': 'ऑटो-डिटेक्ट के लिए खाली छोड़ें (जैसे ~/.openclaw/workspace)', + 'migration.sourcePlaceholderHermes': 'ऑटो-डिटेक्ट के लिए खाली छोड़ें (जैसे ~/.hermes)', + 'migration.sourceHint': + 'खाली होने पर वेंडर के डिफ़ॉल्ट लोकेशन का उपयोग होता है। अगर आपने वर्कस्पेस हटाया है तो स्पष्ट पाथ दें।', + 'migration.previewAction': 'प्रीव्यू', + 'migration.previewRunning': 'प्रीव्यू हो रहा है…', + 'migration.applyAction': 'इम्पोर्ट लागू करें', + 'migration.applyRunning': 'इम्पोर्ट हो रहा है…', + 'migration.applyDisclaimer': + 'उसी सोर्स के सफल Preview के बाद ही Apply अनलॉक होता है। किसी भी इम्पोर्ट से पहले मौजूदा मेमोरी का बैकअप लिया जाता है।', + 'migration.reportTitlePreview': 'प्रीव्यू — अभी कुछ इम्पोर्ट नहीं हुआ', + 'migration.reportTitleApplied': 'इम्पोर्ट पूरा', + 'migration.report.source': 'सोर्स वर्कस्पेस', + 'migration.report.target': 'टार्गेट वर्कस्पेस', + 'migration.report.fromSqlite': 'SQLite (brain.db) से', + 'migration.report.fromMarkdown': 'Markdown से', + 'migration.report.imported': 'इम्पोर्ट हुए', + 'migration.report.skippedUnchanged': 'छोड़े गए (अपरिवर्तित)', + 'migration.report.renamedConflicts': 'टकराव पर नाम बदला', + 'migration.report.warnings': 'चेतावनी', + 'migration.report.previewHint': + 'अभी तक कोई डेटा इम्पोर्ट नहीं हुआ है। कॉपी करने के लिए Apply पर क्लिक करें।', + 'migration.report.appliedHint': + 'इम्पोर्ट की गई एंट्रीज़ अब आपकी मेमोरी में हैं। दोबारा तुलना के लिए Preview फिर से चलाएँ।', + 'migration.confirmImport.singular': + '{count} एंट्री को मौजूदा वर्कस्पेस में इम्पोर्ट करें?\n\nसोर्स: {source}\nटार्गेट: {target}\n\nइम्पोर्ट से पहले मौजूदा मेमोरी का बैकअप लिया जाएगा।', + 'migration.confirmImport.plural': + '{count} एंट्रीज़ को मौजूदा वर्कस्पेस में इम्पोर्ट करें?\n\nसोर्स: {source}\nटार्गेट: {target}\n\nइम्पोर्ट से पहले मौजूदा मेमोरी का बैकअप लिया जाएगा।', + 'settings.notifications.doNotDisturb': 'डू नॉट डिस्टर्ब', + 'settings.notifications.doNotDisturbDesc': 'तय समय के लिए सभी नोटिफिकेशन रोकें', + 'settings.notifications.channelControls': 'चैनल-वाइज़ कंट्रोल', + 'settings.notifications.channelControlsDesc': 'हर चैनल के लिए नोटिफिकेशन प्रेफरेंस सेट करें', + 'settings.features.screenAwareness': 'स्क्रीन अवेयरनेस', + 'settings.features.screenAwarenessDesc': 'असिस्टेंट को आपकी एक्टिव विंडो देखने दें', + 'settings.features.messaging': 'मैसेजिंग', + 'settings.features.messagingDesc': 'चैनल और मैसेजिंग इंटीग्रेशन सेटिंग्स', + 'settings.features.tools': 'टूल्स', + 'settings.features.toolsDesc': 'कनेक्टेड टूल्स और इंटीग्रेशन मैनेज करें', + 'settings.ai.localSetup': 'लोकल AI सेटअप', + 'settings.ai.localSetupDesc': 'लोकल AI मॉडल डाउनलोड और कॉन्फिगर करें', + 'settings.ai.llmProvider': 'LLM प्रोवाइडर', + 'settings.ai.llmProviderDesc': 'अपना AI प्रोवाइडर चुनें और कॉन्फिगर करें', + 'clearData.title': 'ऐप डेटा क्लियर करें', + 'clearData.warning': + 'इससे आप साइन आउट हो जाएंगे और नीचे दिया गया लोकल डेटा हमेशा के लिए मिट जाएगा:', + 'clearData.bulletSettings': 'ऐप सेटिंग्स और बातचीत', + 'clearData.bulletCache': 'सभी लोकल इंटीग्रेशन कैश डेटा', + 'clearData.bulletWorkspace': 'वर्कस्पेस डेटा', + 'clearData.bulletOther': 'बाकी सभी लोकल डेटा', + 'clearData.irreversible': 'यह कार्रवाई वापस नहीं हो सकती।', + 'clearData.clearing': 'ऐप डेटा क्लियर हो रहा है...', + 'clearData.failed': 'डेटा क्लियर करने और लॉगआउट में दिक्कत आई। दोबारा कोशिश करें।', + 'clearData.failedLogout': 'लॉग आउट नहीं हो पाया। दोबारा कोशिश करें।', + 'clearData.failedPersist': 'सेव्ड ऐप स्टेट क्लियर नहीं हो पाई। दोबारा कोशिश करें।', + 'welcome.title': 'OpenHuman में आपका स्वागत है', + 'welcome.subtitle': 'आपकी पर्सनल AI सुपर इंटेलिजेंस। प्राइवेट, सिंपल और बेहद पावरफुल।', + 'welcome.connectPrompt': 'RPC URL कॉन्फिगर करें (एडवांस्ड)', + 'welcome.selectRuntime': 'एक रनटाइम चुनें', + 'welcome.clearingAppData': 'ऐप डेटा साफ़ किया जा रहा है...', + 'welcome.clearAppDataAndRestart': 'ऐप डेटा साफ़ करें और पुनरारंभ करें', + 'welcome.clearAppDataWarning': + 'यह इस डिवाइस पर स्थानीय रूप से संग्रहीत सीक्रेट और अकाउंट मिटा देता है। आपका क्लाउड अकाउंट प्रभावित नहीं होता — आप तुरंत बाद फिर से साइन इन कर सकते हैं।', + 'welcome.resetErrorFallback': + 'ऐप डेटा साफ़ नहीं हो सका। OpenHuman बंद करें और दोबारा खोलें, फिर पुनः प्रयास करें।', + 'welcome.signingIn': 'आपको साइन इन किया जा रहा है...', + 'welcome.termsIntro': 'जारी रखकर, आप इससे सहमत हैं', + 'welcome.termsOfUse': 'शर्तें', + 'welcome.termsJoiner': 'और', + 'welcome.privacyPolicy': 'गोपनीयता नीति', + 'welcome.termsOutro': '.', + 'welcome.urlPlaceholder': 'http://localhost:8089', + 'welcome.invalidUrl': 'कृपया एक सही HTTP या HTTPS URL डालें', + 'welcome.connecting': 'टेस्टिंग', + 'welcome.connect': 'टेस्ट करें', + 'home.greeting': 'सुप्रभात', + 'home.greetingAfternoon': 'नमस्ते', + 'home.greetingEvening': 'शुभ संध्या', + 'home.askAssistant': 'असिस्टेंट से कुछ भी पूछें...', + 'home.statusOk': + 'आपका डिवाइस कनेक्टेड है। कनेक्शन बनाए रखने के लिए ऐप चलाते रहें। नीचे बटन से अपने एजेंट को मैसेज करें।', + 'home.statusBackendOnly': 'बैकएंड से फिर से जुड़ रहे हैं… आपका एजेंट जल्द ही उपलब्ध होगा।', + 'home.statusCoreUnreachable': + 'लोकल कोर साइडकार रिस्पॉन्ड नहीं कर रहा। OpenHuman का बैकग्राउंड प्रोसेस क्रैश हो गया होगा या शुरू नहीं हो पाया।', + 'home.statusInternetOffline': + 'आपका डिवाइस अभी ऑफलाइन है। अपना नेटवर्क चेक करें या दोबारा कनेक्ट करने के लिए ऐप रीस्टार्ट करें।', + 'home.restartCore': 'कोर रीस्टार्ट करें', + 'home.restartingCore': 'कोर रीस्टार्ट हो रहा है…', + 'home.themeToggle.toLight': 'लाइट मोड पर स्विच करें', + 'home.themeToggle.toDark': 'डार्क मोड पर स्विच करें', + 'home.usageExhaustedTitle': 'आपका उपयोग समाप्त हो गया है', + 'home.usageExhaustedBody': + 'आपकी शामिल उपयोग सीमा अभी समाप्त हो चुकी है। अधिक निरंतर क्षमता अनलॉक करने के लिए सदस्यता शुरू करें।', + 'home.usageExhaustedCta': 'सदस्यता शुरू करें', + 'home.routinesCard': 'आपकी रूटीन', + 'home.routinesActive': '{count} सक्रिय', + 'routines.title': 'आपका दिनचर्या', + 'routines.subtitle': 'अपने सहायक को स्वचालित रूप से करने के लिए चीजें', + 'routines.loading': 'दिनचर्या लोड हो रहा है...', + 'routines.empty': 'अभी तक कोई दिनचर्या नहीं', + 'routines.emptyHint': + 'आपका सहायक एक अनुसूची पर कार्य चला सकता है - जैसे सुबह की ब्रीफिंग या दैनिक सारांश।', + 'routines.refresh': 'ताज़ा', + 'routines.nextRun': 'अगला', + 'routines.lastRunSuccess': 'अंतिम रन सफल', + 'routines.lastRunFailed': 'अंतिम रन असफल', + 'routines.notRunYet': 'अभी तक नहीं चला', + 'routines.runNow': 'अब चलायें', + 'routines.running': 'दौड़ना...', + 'routines.viewHistory': 'इतिहास देखें', + 'routines.loadingHistory': 'लोड...', + 'routines.noHistory': 'अभी तक कोई रन इतिहास नहीं है।', + 'routines.statusSuccess': 'सफलता', + 'routines.statusError': 'त्रुटि', + 'routines.showOutput': 'उत्पादन दिखाएँ', + 'routines.hideOutput': 'उत्पादन छुपाएं', + 'routines.toggleEnabled': 'इस दिनचर्या को सक्षम या अक्षम करें', + 'routines.typeAgent': 'एजेंट', + 'routines.typeCommand': 'कमान', + 'nav.routines': 'Routines', + 'chat.newThread': 'नई थ्रेड', + 'chat.typeMessage': 'मैसेज टाइप करें...', + 'chat.send': 'मैसेज भेजें', + 'chat.thinking': 'सोच रहा है...', + 'chat.noMessages': 'अभी कोई मैसेज नहीं', + 'chat.startConversation': 'बातचीत शुरू करें', + 'chat.regenerate': 'फिर से बनाएं', + 'chat.copyResponse': 'जवाब कॉपी करें', + 'chat.citations': 'सोर्स', + 'chat.toolUsed': 'टूल इस्तेमाल हुआ', + 'scope.legacy': 'लीगेसी', + 'scope.user': 'यूज़र', + 'scope.project': 'प्रोजेक्ट', + 'skills.title': 'कनेक्शन', + 'skills.search': 'कनेक्शन सर्च करें...', + 'skills.noResults': 'कोई कनेक्शन नहीं मिला', + 'skills.connect': 'कनेक्ट करें', + 'skills.disconnect': 'डिसकनेक्ट करें', + 'skills.configure': 'मैनेज करें', + 'skills.connected': 'कनेक्टेड', + 'skills.available': 'उपलब्ध', + 'skills.addAccount': 'अकाउंट जोड़ें', + 'skills.channels': 'चैनल', + 'skills.integrations': 'इंटीग्रेशन', + 'skills.integrationsSubtitle': + 'क्लाउड-आधारित OAuth कनेक्शन — अपने अकाउंट से साइन इन करें और Composio टोकन ब्रोकर करता है ताकि एजेंट आपकी ओर से पढ़ और कार्य कर सकें। कोई API कुंजी प्रबंधित नहीं करनी।', 'skills.composio.noApiKeyTitle': 'कोई Composio API key कॉन्फ़िगर नहीं है', 'skills.composio.noApiKeyDescription': 'लोकल मोड आपकी अपनी Composio API key का उपयोग करता है। यहाँ integrations जोड़ने से पहले Settings → Advanced → Composio खोलकर key जोड़ें।', 'skills.composio.noApiKeyCta': 'Settings में खोलें', - 'channels.localManagedUnavailable': 'लोकल उपयोगकर्ताओं के लिए managed channels उपलब्ध नहीं हैं।', + 'skills.tabs.composio': 'Composio', + 'skills.tabs.channels': 'चैनल', + 'skills.tabs.mcp': 'MCP सर्वर', + 'skills.tabs.runners': 'Runners', + 'memory.title': 'मेमोरी', + 'memory.search': 'मेमोरी सर्च करें...', + 'memory.noResults': 'कोई मेमोरी नहीं मिली', + 'memory.empty': 'अभी कोई मेमोरी नहीं है। बातचीत के दौरान मेमोरी अपने आप बनती है।', + 'memory.tab.memory': 'मेमोरी', + 'memory.tab.tasks': 'एजेंट कार्य', + 'memory.tab.tasksDescription': + 'कार्य बनाएं और ट्रैक करें — आपके अपने टू-डू और साथ ही वे बोर्ड जो आपके एजेंट वार्तालापों में बनाते हैं।', + 'memory.tab.subconscious': 'सबकॉन्शस', + 'memory.tab.dreams': 'ड्रीम्स', + 'memory.tab.calls': 'कॉल्स', + 'memory.tab.diagram': 'Diagram', + 'memory.tab.centrality': 'Centrality', + 'memory.tab.settings': 'सेटिंग्स', + 'memory.analyzeNow': 'अभी एनालाइज़ करें', + 'graphCentrality.title': 'ज्ञान ग्राफ केंद्रीयता', + 'graphCentrality.intro': + 'अपने मेमोरी ग्राफ़ पर पेजरैंक लोड-असर हब सतहों - और कनेक्टर इकाइयां जो अन्यथा अलग-अलग समूहों को जोड़ती हैं, जो एक कच्चे आवृत्ति गिनती प्रकट नहीं हो सकती हैं।', + 'graphCentrality.loading': 'संघटन', + 'graphCentrality.errorPrefix': 'ग्राफ को लोड नहीं कर सकता:', + 'graphCentrality.retry': 'रेस्त्री', + 'graphCentrality.empty': 'अभी तक कोई ज्ञान ग्राफ नहीं है।', + 'graphCentrality.emptyHint': + 'चूंकि सहायक आपके बारे में तथ्यों को रिकॉर्ड करता है, तो सबसे अधिक जुड़े संस्थाएं यहां सामने आएंगी।', + 'graphCentrality.namespaceLabel': 'Namespace', + 'graphCentrality.namespaceAll': 'सभी नामस्थान', + 'graphCentrality.metricEntities': 'संस्था', + 'graphCentrality.metricConnections': 'कनेक्शन', + 'graphCentrality.metricClusters': 'क्लस्टर', + 'graphCentrality.clustersCaption': '{components} क्लस्टर · सबसे बड़ा {largest} रखती है', + 'graphCentrality.approximateBadge': 'लगभग', + 'graphCentrality.approximateTitle': 'पूरी तरह से अभिसरण से पहले पुनरावृत्ति टोपी पर रुकना', + 'graphCentrality.rankedHeading': 'प्रभाव से शीर्ष संस्थाएं', + 'graphCentrality.colRank': '#', + 'graphCentrality.colEntity': 'संस्था', + 'graphCentrality.colInfluence': 'प्रभाव', + 'graphCentrality.colLinks': 'लिंक', + 'graphCentrality.bridgeBadge': 'कनेक्टर', + 'graphCentrality.bridgeTitle': 'कनेक्टर - इसके लिंक गिनती से अधिक प्रभावशाली सुझाव देते हैं', + 'graphCentrality.degreeTitle': '{in}', + 'memoryTree.status.title': 'मेमोरी ट्री', + 'memoryTree.status.autoSyncLabel': 'ऑटो सिंक', + 'memoryTree.status.autoSyncDescription': + 'नए अंतर्ग्रहण को रोकने के लिए रोकें। मौजूदा विकि क्वेरी योग्य रहता है।', + 'memoryTree.status.statusTile': 'स्थिति', + 'memoryTree.status.lastSyncTile': 'अंतिम सिंक', + 'memoryTree.status.totalChunksTile': 'कुल अंक', + 'memoryTree.status.wikiSizeTile': 'विकी आकार', + 'memoryTree.status.statusRunning': 'दौड़ना', + 'memoryTree.status.statusPaused': 'दलित', + 'memoryTree.status.statusSyncing': 'सिंक करना', + 'memoryTree.status.statusError': 'त्रुटि', + 'memoryTree.status.statusIdle': 'आइडल', + 'memoryTree.status.never': 'कभी नहीं', + 'memoryTree.status.fetchError': 'स्मृति वृक्ष की स्थिति नहीं मिला', + 'memoryTree.status.retry': 'रेस्त्री', + 'memoryTree.status.toggleFailed': 'ऑटो सिंक को टॉगल नहीं कर सका', + 'memoryTree.status.justNow': 'अभी', + 'memoryTree.status.secondsAgo': '{count} पहले', + 'memoryTree.status.minuteAgo': '1 मिनट पहले', + 'memoryTree.status.minutesAgo': '{count} min पहले', + 'memoryTree.status.hourAgo': '1 घंटे पहले', + 'memoryTree.status.hoursAgo': '{count} hr पहले', + 'memoryTree.status.dayAgo': '1 दिन पहले', + 'memoryTree.status.daysAgo': '{count} दिन पहले', + 'alerts.title': 'अलर्ट', + 'alerts.empty': 'अभी कोई अलर्ट नहीं', + 'alerts.markAllRead': 'सभी पढ़ा हुआ मार्क करें', + 'alerts.unread': 'अनरीड', + 'rewards.title': 'रिवॉर्ड', + 'rewards.referrals': 'रेफरल', + 'rewards.coupons': 'रिडीम करें', 'rewards.localUnavailable': 'लोकल लॉगिन पर rewards, coupons या referral credit नहीं मिलते। rewards पाने के लिए लॉग आउट करें और OpenHuman खाते से साइन इन करें।', 'rewards.localUnavailableCta': 'Account Settings खोलें', + 'rewards.credits': 'क्रेडिट', + 'rewards.referralCode': 'आपका रेफरल कोड', + 'rewards.copyCode': 'कोड कॉपी करें', + 'rewards.share': 'शेयर करें', + 'onboarding.welcome': 'नमस्ते। मैं OpenHuman हूँ।', + 'onboarding.welcomeDesc': + 'आपका सुपर-इंटेलिजेंट AI असिस्टेंट जो आपके कंप्यूटर पर चलता है। प्राइवेट, सिंपल और बेहद पावरफुल।', + 'onboarding.context': 'कॉन्टेक्स्ट गैदरिंग', + 'onboarding.contextDesc': 'अपने रोज़ इस्तेमाल के टूल्स और सर्विसेज़ कनेक्ट करें।', + 'onboarding.localAI': 'लोकल AI', + 'onboarding.localAIDesc': 'अपनी मशीन पर चलने वाला लोकल AI मॉडल सेट करें।', + 'onboarding.chatProvider': 'चैट प्रोवाइडर', + 'onboarding.chatProviderDesc': 'चुनें कि असिस्टेंट से कैसे बात करनी है।', + 'onboarding.referral': 'रेफरल', + 'onboarding.referralDesc': 'अगर आपके पास रेफरल कोड है तो लगाएं।', + 'onboarding.finish': 'सेटअप पूरा करें', + 'onboarding.finishDesc': 'सब तैयार है! OpenHuman इस्तेमाल शुरू करें।', + 'onboarding.skip': 'स्किप करें', + 'onboarding.getStarted': 'शुरू करें', + 'onboarding.runtimeChoice.title': 'OpenHuman कैसे चलाना चाहते हैं?', + 'onboarding.runtimeChoice.subtitle': + 'अपने लिए सही सेटअप चुनें। बाद में Settings में बदल सकते हैं।', + 'onboarding.runtimeChoice.cloud.title': 'सिंपल', + 'onboarding.runtimeChoice.cloud.tagline': 'OpenHuman सब कुछ मैनेज करेगा।', + 'onboarding.runtimeChoice.cloud.f1': 'बिल्ट-इन सिक्योरिटी', + 'onboarding.runtimeChoice.cloud.f2': 'ज़्यादा उपयोग के लिए टोकन कम्प्रेशन', + 'onboarding.runtimeChoice.cloud.f3': 'एक सब्सक्रिप्शन, हर मॉडल शामिल', + 'onboarding.runtimeChoice.cloud.f4': 'कोई API keys मैनेज नहीं करनी', + 'onboarding.runtimeChoice.cloud.f5': 'सेटअप बेहद आसान', + 'onboarding.runtimeChoice.custom.title': 'कस्टम रन करें', + 'onboarding.runtimeChoice.custom.tagline': 'अपनी keys लाएं। पूरा कंट्रोल आपके हाथ में।', + 'onboarding.runtimeChoice.custom.f1': 'लगभग हर चीज़ के लिए API keys चाहिए होंगी', + 'onboarding.runtimeChoice.custom.f2': 'जो सर्विसेज़ आप पहले से पे करते हैं उन्हें रियूज़ करता है', + 'onboarding.runtimeChoice.custom.f3': 'सब लोकल चलाएं तो फ्री हो सकता है', + 'onboarding.runtimeChoice.custom.f4': 'ज़्यादा सेटअप, ज़्यादा कंट्रोल', + 'onboarding.runtimeChoice.custom.f5': 'पावर यूज़र्स और डेवलपर्स के लिए बेस्ट', + 'onboarding.runtimeChoice.cloud.creditHighlight': 'ट्राई करने के लिए $1 मुफ्त क्रेडिट', + 'onboarding.runtimeChoice.continueCloud': 'सिंपल के साथ जारी रखें', + 'onboarding.runtimeChoice.continueCustom': 'कस्टम के साथ जारी रखें', + 'onboarding.runtimeChoice.recommended': 'सुझावित', + 'onboarding.apiKeys.title': 'अपनी API Keys जोड़ें', + 'onboarding.apiKeys.subtitle': + 'अभी पेस्ट करें या बाद में Settings › AI में जोड़ें। Keys इस डिवाइस पर एन्क्रिप्टेड रहती हैं।', + 'onboarding.apiKeys.openaiLabel': 'OpenAI API कुंजी', + 'onboarding.apiKeys.openaiPlaceholder': 'sk-...', + 'onboarding.apiKeys.openaiOauthHint': + 'चैटजीपीटी प्लस/प्रो (सदस्यता) या OpenAI API कुंजी का उपयोग करें - दोनों की आवश्यकता नहीं है।', + 'onboarding.apiKeys.openaiOauthOpening': 'साइन-इन खुल रहा है...', + 'onboarding.apiKeys.finishSignIn': 'चैटजीपीटी साइन-इन समाप्त करें', + 'onboarding.apiKeys.orApiKey': 'या API कुंजी', + 'onboarding.apiKeys.anthropicLabel': 'Anthropic API कुंजी', + 'onboarding.apiKeys.anthropicPlaceholder': 'sk-ant-...', + 'onboarding.apiKeys.saveError': 'वह key सेव नहीं हो पाई। दोबारा चेक करके कोशिश करें।', + 'onboarding.apiKeys.skipForNow': 'अभी के लिए स्किप करें', + 'onboarding.apiKeys.continue': 'सेव करें और जारी रखें', + 'onboarding.apiKeys.saving': 'सेव हो रहा है…', + 'onboarding.custom.stepperInference': 'इनफरेंस', + 'onboarding.custom.stepperVoice': 'वॉइस', + 'onboarding.custom.stepperOAuth': 'OAuth', + 'onboarding.custom.stepperSearch': 'सर्च', + 'onboarding.custom.stepperEmbeddings': 'Embeddings', + 'onboarding.custom.stepperMemory': 'मेमोरी', + 'onboarding.custom.stepCounter': 'स्टेप {n} / {total}', + 'onboarding.custom.defaultTitle': 'डिफ़ॉल्ट', + 'onboarding.custom.defaultSubtitle': 'OpenHuman खुद मैनेज करेगा।', + 'onboarding.custom.configureTitle': 'कॉन्फिगर करें', + 'onboarding.custom.configureSubtitle': 'मैं खुद चुनूँगा।', + 'onboarding.custom.progressAriaLabel': 'ऑनबोर्डिंग प्रोग्रेस', + 'onboarding.custom.continue': 'जारी रखें', + 'onboarding.custom.back': 'वापस', + 'onboarding.custom.finish': 'सेटअप पूरा करें', + 'onboarding.custom.configureLater': + 'ऑनबोर्डिंग के बाद यह सेट कर सकते हैं। हो जाने पर आपको सही Settings पेज पर ले जाएंगे।', + 'onboarding.custom.openSettings': 'Settings में खोलें', + 'onboarding.custom.inference.title': 'इनफरेंस (टेक्स्ट)', + 'onboarding.custom.inference.subtitle': + 'कौन सा लैंग्वेज मॉडल आपके सवाल जवाब देगा और एजेंट चलाएगा?', + 'onboarding.custom.inference.defaultDesc': + 'OpenHuman हर वर्कलोड के लिए खुद सही मॉडल चुनता है। कोई key नहीं, कोई सेटअप नहीं।', + 'onboarding.custom.inference.configureDesc': + 'अपनी OpenAI या Anthropic key लाएं। हर टेक्स्ट वर्कलोड के लिए इस्तेमाल होगी।', + 'onboarding.custom.voice.title': 'वॉइस', + 'onboarding.custom.voice.subtitle': 'वॉइस मोड के लिए स्पीच-टू-टेक्स्ट और टेक्स्ट-टू-स्पीच।', + 'onboarding.custom.voice.defaultDesc': + 'OpenHuman में मैनेज्ड STT/TTS है जो बस काम करता है। कुछ सेट नहीं करना।', + 'onboarding.custom.voice.configureDesc': + 'अपना ElevenLabs / OpenAI Whisper / आदि इस्तेमाल करें। Settings › Voice में कॉन्फिगर करें।', + 'onboarding.custom.oauth.title': 'कनेक्शन (OAuth)', + 'onboarding.custom.oauth.subtitle': 'Gmail, Slack, Notion और OAuth ज़रूरी सर्विसेज़।', + 'onboarding.custom.oauth.defaultDesc': + 'OpenHuman मैनेज्ड Composio वर्कस्पेस चलाता है। हर सर्विस एक क्लिक में कनेक्ट होती है।', + 'onboarding.custom.oauth.configureDesc': + 'अपना Composio अकाउंट / API key लाएं। Settings › Connections में कॉन्फिगर करें।', + 'onboarding.custom.search.title': 'वेब सर्च', + 'onboarding.custom.search.subtitle': 'OpenHuman आपकी तरफ से वेब कैसे सर्च करता है।', + 'onboarding.custom.search.defaultDesc': + 'OpenHuman मैनेज्ड सर्च बैकएंड इस्तेमाल करता है। कोई key नहीं चाहिए।', + 'onboarding.custom.search.configureDesc': + 'अपनी सर्च प्रोवाइडर key लाएं (Tavily, Brave, आदि)। Settings › Tools में कॉन्फिगर करें।', + 'onboarding.custom.embeddings.title': 'Embeddings', + 'onboarding.custom.embeddings.subtitle': + 'OpenHuman सिमेंटिक मेमोरी खोज के लिए वेक्टर एम्बेडिंग कैसे बनाता है।', + 'onboarding.custom.embeddings.defaultDesc': + 'OpenHuman एक प्रबंधित एम्बेडिंग सेवा का उपयोग करता है। कोई API कुंजी आवश्यक नहीं।', + 'onboarding.custom.embeddings.configureDesc': + 'अपना खुद का एम्बेडिंग प्रोवाइडर लाएं (OpenAI, Voyage, Ollama, आदि)।', + 'onboarding.custom.memory.title': 'मेमोरी', + 'onboarding.custom.memory.subtitle': + 'OpenHuman आपका कॉन्टेक्स्ट, पसंद और पुरानी बातें कैसे याद रखता है।', + 'onboarding.custom.memory.defaultDesc': + 'OpenHuman मेमोरी स्टोरेज और रिट्रीवल अपने आप मैनेज करता है। कुछ सेट नहीं करना।', + 'onboarding.custom.memory.configureDesc': + 'मेमोरी खुद देखें, एक्सपोर्ट करें या मिटाएं। Settings › Memory में कॉन्फिगर करें।', + 'accounts.addAccount': 'अकाउंट जोड़ें', + 'accounts.manageAccounts': 'अकाउंट मैनेज करें', + 'accounts.noAccounts': 'कोई अकाउंट कनेक्ट नहीं है', + 'accounts.connectAccount': 'शुरू करने के लिए एक अकाउंट कनेक्ट करें', + 'accounts.agent': 'एजेंट', + 'accounts.respondQueue': 'रिस्पॉन्ड क्यू', + 'accounts.disconnect': 'डिसकनेक्ट करें', + 'accounts.disconnectConfirm': 'क्या आप वाकई इस अकाउंट को डिसकनेक्ट करना चाहते हैं?', + 'accounts.disconnectClearMemory': 'इस स्रोत की मेमोरी भी हटाएं', + 'accounts.disconnectClearMemoryHint': + 'इस कनेक्शन से जुड़े स्थानीय मेमोरी खंड स्थायी रूप से हटा दिए जाएंगे।', + 'accounts.searchAccounts': 'अकाउंट सर्च करें...', + 'channels.title': 'चैनल', + 'channels.configure': 'चैनल कॉन्फिगर करें', + 'channels.setup': 'सेटअप', + 'channels.noChannels': 'कोई चैनल कॉन्फिगर नहीं है', + 'channels.localManagedUnavailable': 'लोकल उपयोगकर्ताओं के लिए managed channels उपलब्ध नहीं हैं।', + 'channels.addChannel': 'चैनल जोड़ें', + 'channels.status.connected': 'कनेक्टेड', + 'channels.status.disconnected': 'डिसकनेक्टेड', + 'channels.status.error': 'एरर', + 'channels.status.configuring': 'कॉन्फिगर हो रहा है', + 'channels.defaultMessaging': 'डिफ़ॉल्ट मैसेजिंग चैनल', + 'webhooks.title': 'वेबहुक्स', + 'webhooks.create': 'Webhook बनाएं', + 'webhooks.noWebhooks': 'कोई webhook कॉन्फिगर नहीं है', + 'webhooks.url': 'URL', + 'webhooks.secret': 'सीक्रेट', + 'webhooks.events': 'इवेंट्स', + 'webhooks.archiveDirectory': 'आर्काइव डायरेक्टरी', + 'webhooks.todayFile': 'आज की फाइल', + 'invites.title': 'इनवाइट्स', + 'invites.create': 'इनवाइट बनाएं', + 'invites.noInvites': 'कोई पेंडिंग इनवाइट नहीं', + 'invites.code': 'इनवाइट कोड', + 'invites.copyLink': 'लिंक कॉपी करें', + 'invites.generate': 'आमंत्रण जनरेट करें', + 'invites.generating': 'उत्पन्न हो रहा है...', + 'invites.refreshing': 'ताज़ा आमंत्रण...', + 'invites.loading': 'आमंत्रण लोड हो रहे हैं...', + 'invites.copyCodeAria': 'आमंत्रण कोड कॉपी करें', + 'invites.revokeAria': 'आमंत्रण रद्द करें', + 'invites.usedUp': 'उपयोग किया गया', + 'invites.uses': 'उपयोग: {current}{max}', + 'invites.expiresOn': 'समाप्त {date}', + 'invites.empty': 'अभी तक कोई निमंत्रण नहीं', + 'invites.emptyHint': 'दूसरों के साथ साझा करने के लिए एक आमंत्रण कोड जनरेट करें', + 'invites.revokeTitle': 'आमंत्रण कोड निरस्त करें', + 'invites.revokePromptPrefix': 'क्या आप वाकई आमंत्रण कोड रद्द करना चाहते हैं?', + 'invites.revokeWarning': + 'यह इनवाइट कोड अब मान्य नहीं रहेगा और टीम में शामिल होने के लिए उपयोग नहीं किया जा सकेगा।', + 'invites.revoking': 'निरस्त किया जा रहा है...', + 'invites.revokeAction': 'आमंत्रण निरस्त करें', + 'invites.failedGenerate': 'आमंत्रण जनरेट करने में विफल', + 'invites.failedRevoke': 'आमंत्रण रद्द करने में विफल', + 'team.refreshingMembers': 'सदस्यों को ताज़ा किया जा रहा है...', + 'team.loadingMembers': 'सदस्य लोड हो रहे हैं...', + 'team.memberCount': '{count} सदस्य', + 'team.memberCountPlural': '{count} सदस्य', + 'team.you': '(आप)', + 'team.removeAria': '{name} हटाएं', + 'team.noMembers': 'कोई सदस्य नहीं मिला', + 'team.removeTitle': 'टीम सदस्य को हटाएँ', + 'team.removePromptPrefix': 'क्या आप वाकई हटाना चाहते हैं', + 'team.removePromptSuffix': 'टीम से?', + 'team.removeWarning': 'वे टीम और सभी टीम संसाधनों तक पहुंच खो देंगे।', + 'team.removing': 'हटाया जा रहा है...', + 'team.removeAction': 'सदस्य हटाएँ', + 'team.changeRoleTitle': 'सदस्य भूमिका बदलें', + 'team.changeRolePrompt': '{name} की भूमिका {oldRole} से {newRole} में बदलें?', + 'team.changeRoleAdminGrant': + 'इससे उन्हें टीम सदस्य प्रबंधन की क्षमता सहित पूर्ण एडमिन अनुमतियां मिल जाएंगी।', + 'team.changeRoleAdminRemove': + 'इससे उनकी एडमिन अनुमतियां हट जाएंगी और वे अब टीम प्रबंधित नहीं कर पाएंगे।', + 'team.changing': 'बदल रहा है...', + 'team.changeRoleAction': 'भूमिका बदलें', + 'team.failedChangeRole': 'भूमिका बदलने में विफल', + 'team.failedRemoveMember': 'सदस्य को हटाने में विफल', + 'devOptions.title': 'एडवांस्ड', + 'devOptions.diagnostics': 'डायग्नोस्टिक्स', + 'devOptions.diagnosticsDesc': 'सिस्टम हेल्थ, लॉग्स और परफॉर्मेंस मेट्रिक्स', + 'devOptions.toolPolicyDiagnosticsDesc': + 'उपकरण सूची, नीति मुद्रा, MCP अनुमतिसूची, और हाल के ब्लॉक', + 'devOptions.toolPolicyDiagnostics.loading': 'लोड...', + 'devOptions.toolPolicyDiagnostics.unavailable': 'अनुपलब्ध', + 'devOptions.toolPolicyDiagnostics.posture.title': 'नीति', + 'devOptions.toolPolicyDiagnostics.posture.autonomy': 'स्वायत्तता:', + 'devOptions.toolPolicyDiagnostics.posture.workspaceOnly': 'केवल कार्यक्षेत्र:', + 'devOptions.toolPolicyDiagnostics.posture.maxActionsPerHour': 'अधिकतम क्रियाएँ/घंटा:', + 'devOptions.toolPolicyDiagnostics.posture.approvalMediumRisk': 'स्वीकृति (मध्यम जोखिम):', + 'devOptions.toolPolicyDiagnostics.posture.blockHighRisk': 'ब्लॉक उच्च जोखिम:', + 'devOptions.toolPolicyDiagnostics.inventory.title': 'सूची', + 'devOptions.toolPolicyDiagnostics.inventory.totalTools': 'कुल उपकरण', + 'devOptions.toolPolicyDiagnostics.inventory.enabledTools': 'सक्षम उपकरण', + 'devOptions.toolPolicyDiagnostics.inventory.mcpStdioTools': 'MCP stdio उपकरण', + 'devOptions.toolPolicyDiagnostics.inventory.jsonRpcTools': 'JSON', + 'devOptions.toolPolicyDiagnostics.mcpAllowlists.title': 'MCP', + 'devOptions.toolPolicyDiagnostics.mcpAllowlists.summary': + 'सक्षम: {enabled} · सर्वर: {enabledCount} / {totalCount}', + 'devOptions.toolPolicyDiagnostics.mcpAllowlists.unnamed': '<अनाम>', + 'devOptions.toolPolicyDiagnostics.mcpAllowlists.allowDeny': + 'अनुमति = {allowCount} इनकार = {denyCount}', + 'devOptions.toolPolicyDiagnostics.mcpWriteAudit.title': 'MCP', + 'devOptions.toolPolicyDiagnostics.mcpWriteAudit.summary': 'सक्षम: {enabled}', + 'devOptions.toolPolicyDiagnostics.recentBlocked.title': 'हाल ही में अवरुद्ध कॉल', + 'devOptions.toolPolicyDiagnostics.recentBlocked.empty': 'कोई अवरुद्ध कॉल दर्ज नहीं किया गया।', + 'devOptions.toolPolicyDiagnostics.redactedSurfaces.title': 'निष्क्रिय सतहों', + 'devOptions.toolPolicyDiagnostics.redactedSurfaces.summary': 'लेखक: {writeCount}', + 'devOptions.debugPanels': 'डिबग पैनल', + 'devOptions.debugPanelsDesc': 'फीचर फ्लैग्स, स्टेट इंस्पेक्शन और डिबगिंग टूल्स', + 'devOptions.webhooks': 'वेबहुक्स', + 'devOptions.webhooksDesc': 'Webhook इंटीग्रेशन कॉन्फिगर और टेस्ट करें', + 'devOptions.memoryInspection': 'मेमोरी इंस्पेक्शन', + 'devOptions.memoryInspectionDesc': 'मेमोरी एंट्रीज़ ब्राउज़, क्वेरी और मैनेज करें', + 'voice.pushToTalk': 'पुश टू टॉक', + 'voice.recording': 'रिकॉर्डिंग हो रही है...', + 'voice.processing': 'प्रोसेस हो रहा है...', + 'voice.languageHint': 'भाषा', + 'misc.rehydrating': 'आपका डेटा लोड हो रहा है...', + 'misc.checkingServices': 'सर्विसेज़ चेक हो रही हैं...', + 'misc.serviceUnavailable': 'सर्विस उपलब्ध नहीं है', + 'misc.somethingWentWrong': 'कुछ गड़बड़ हो गई', + 'misc.tryAgainLater': 'कृपया बाद में कोशिश करें।', + 'misc.restartApp': 'ऐप रीस्टार्ट करें', + 'misc.updateAvailable': 'अपडेट उपलब्ध है', + 'misc.updateNow': 'अभी अपडेट करें', + 'misc.updateLater': 'बाद में', + 'misc.downloading': 'डाउनलोड हो रहा है...', + 'misc.installing': 'इन्स्टॉल हो रहा है...', + 'misc.beta': + 'OpenHuman अभी अर्ली बीटा में है। फीडबैक शेयर करें या कोई बग मिले तो रिपोर्ट करें — हर रिपोर्ट हमें तेज़ी से काम करने में मदद करती है।', + 'misc.betaFeedback': 'फीडबैक भेजें', + 'mnemonic.title': 'रिकवरी फ्रेज़', + 'mnemonic.warning': 'इन शब्दों को क्रम में लिखें और किसी सुरक्षित जगह रखें।', + 'mnemonic.copyWarning': + 'रिकवरी फ्रेज़ कभी किसी से शेयर न करें। इन शब्दों से कोई भी आपका अकाउंट एक्सेस कर सकता है।', + 'mnemonic.copied': 'रिकवरी फ्रेज़ क्लिपबोर्ड पर कॉपी हो गया', + 'mnemonic.reveal': 'फ्रेज़ दिखाएं', + 'mnemonic.revealPhrase': 'रिकवरी वाक्यांश दिखाएं', + 'mnemonic.hidden': 'रिकवरी फ्रेज़ छुपी हुई है', + 'privacy.title': 'प्राइवेसी और सिक्योरिटी', + 'privacy.description': 'बाहरी सर्विसेज़ को भेजे गए डेटा की ट्रांसपेरेंसी रिपोर्ट।', + 'privacy.empty': 'कोई बाहरी डेटा ट्रांसफर नहीं मिला।', + 'privacy.whatLeavesComputer': 'आपके कंप्यूटर से क्या जाता है', + 'privacy.loading': 'प्राइवेसी डिटेल्स लोड हो रही हैं...', + 'privacy.loadError': + 'लाइव प्राइवेसी लिस्ट लोड नहीं हो पाई। नीचे के एनालिटिक्स कंट्रोल अभी भी काम करते हैं।', + 'privacy.noCapabilities': 'अभी कोई कैपेबिलिटी डेटा मूवमेंट नहीं दिखा रही।', + 'privacy.sentTo': 'भेजा गया', + 'privacy.leavesDevice': 'डिवाइस से बाहर जाता है', + 'privacy.staysLocal': 'लोकल रहता है', + 'privacy.anonymizedAnalytics': 'अनॉनिमाइज़्ड एनालिटिक्स', + 'privacy.shareAnonymizedData': 'अनॉनिमाइज़्ड यूसेज डेटा शेयर करें', + 'privacy.shareAnonymizedDataDesc': + 'अनॉनिमस क्रैश रिपोर्ट और यूसेज एनालिटिक्स शेयर करके OpenHuman को बेहतर बनाने में मदद करें। सभी डेटा पूरी तरह अनॉनिमाइज़्ड है — कोई पर्सनल डेटा, मैसेज, वॉलेट keys या सेशन जानकारी कभी कलेक्ट नहीं होती।', + 'privacy.meetingFollowUps': 'मीटिंग फॉलो-अप', + 'privacy.autoHandoffMeet': 'Google Meet ट्रांसक्रिप्ट ऑटो-हैंडऑफ ऑर्केस्ट्रेटर को करें', + 'privacy.autoHandoffMeetDesc': + 'Google Meet कॉल खत्म होने पर, OpenHuman का ऑर्केस्ट्रेटर ट्रांसक्रिप्ट पढ़ सकता है और मैसेज ड्राफ्ट करना, फॉलो-अप शेड्यूल करना या Slack पर सारांश पोस्ट करना जैसे काम कर सकता है। डिफ़ॉल्ट रूप से बंद है।', + 'privacy.analyticsDisclaimer': + 'सभी एनालिटिक्स और बग रिपोर्ट पूरी तरह अनॉनिमाइज़्ड हैं। चालू होने पर, हम केवल क्रैश जानकारी, डिवाइस टाइप और एरर फाइल लोकेशन कलेक्ट करते हैं। हम कभी आपके मैसेज, सेशन डेटा, वॉलेट keys, API keys या कोई भी पर्सनल जानकारी एक्सेस नहीं करते। यह सेटिंग कभी भी बदल सकते हैं।', + 'settings.about.version': 'वर्जन', + 'settings.about.updateAvailable': 'उपलब्ध है', + 'settings.about.softwareUpdates': 'सॉफ्टवेयर अपडेट', + 'settings.about.lastChecked': 'आखिरी बार चेक किया', + 'settings.about.checking': 'चेक हो रहा है...', + 'settings.about.checkForUpdates': 'अपडेट चेक करें', + 'settings.about.releases': 'रिलीज़', + 'settings.about.releasesDesc': 'GitHub पर रिलीज़ नोट्स और पुराने बिल्ड देखें।', + 'settings.about.openReleases': 'GitHub रिलीज़ खोलें', + 'settings.about.connection': 'कनेक्शन', + 'settings.about.connectionMode': 'मोड', + 'settings.about.connectionModeLocal': 'स्थानीय', + 'settings.about.connectionModeCloud': 'बादल', + 'settings.about.connectionModeUnset': 'चयनित नहीं', + 'settings.about.serverUrl': 'सर्वर URL', + 'settings.about.serverUrlUnavailable': 'अनुपलब्ध', + 'settings.about.connectionHelperLocal': + 'ऐप लॉन्च पर Tauri शेल द्वारा इन-प्रोसेस का आयोजन किया गया। बंदरगाह को स्टार्टअप पर चुना जाता है, इसलिए प्रक्षेपण के बीच यह URL परिवर्तन होता है।', + 'settings.about.connectionHelperCloud': + 'एक दूरस्थ कोर से जुड़ा हुआ है। इसे बूट चेक या क्लाउड मोड पिकर में बदलें।', + 'settings.heartbeat.title': 'दिल की धड़कन और लूप', + 'settings.heartbeat.desc': + 'नियंत्रण पृष्ठभूमि शेड्यूलिंग कैडेंस और लूप मानचित्र का निरीक्षण करें।', + 'settings.ledgerUsage.title': 'उपयोग बही', + 'settings.ledgerUsage.desc': 'हाल का क्रेडिट खर्च, बजट गणित, और पृष्ठभूमि API बजट पढ़ें।', + 'settings.costDashboard.title': 'कॉस्ट डैशबोर्ड', + 'settings.costDashboard.desc': + 'बजट की गति और प्रति मॉडल ब्रेकडाउन के साथ, 7-day खर्च और टोकन पूरे दल में जलाते हैं।', + 'settings.costDashboard.sevenDayCost': '7 दिन दैनिक लागत', + 'settings.costDashboard.sevenDayTokens': '7 दिन टोकन उपयोग', + 'settings.costDashboard.totalSpend': '7 दिन कुल', + 'settings.costDashboard.monthlyPace': 'मासिक गति', + 'settings.costDashboard.budgetLimit': 'बजट सीमा', + 'settings.costDashboard.utilization': 'उपयोगिता', + 'settings.costDashboard.modelBreakdown': 'प्रति मॉडल ब्रेकडाउन', + 'settings.costDashboard.model': 'मॉडल', + 'settings.costDashboard.provider': 'प्रदाता', + 'settings.costDashboard.cost': 'लागत', + 'settings.costDashboard.tokens': 'टोकन', + 'settings.costDashboard.requests': 'अनुरोध', + 'settings.costDashboard.percentOfTotal': 'कुल का%', + 'settings.costDashboard.inputTokens': 'इनपुट', + 'settings.costDashboard.outputTokens': 'उत्पादन', + 'settings.costDashboard.budgetNormal': 'ट्रैक पर', + 'settings.costDashboard.budgetWarning': 'चेतावनी', + 'settings.costDashboard.budgetExceeded': 'बजट', + 'settings.costDashboard.noBudget': 'कोई सीमा नहीं', + 'settings.costDashboard.noData': 'पिछले 7 दिनों के लिए अभी तक कोई लागत दर्ज नहीं हुई है।', + 'settings.costDashboard.noModels': 'पिछले 7 दिनों में कोई मॉडल गतिविधि नहीं।', + 'settings.costDashboard.loading': 'लागत डैशबोर्ड लोड हो रहा है...', + 'settings.costDashboard.disabledHint': + 'लागत डैशबोर्ड विन्यास में अक्षम है। सेट [cost.dashboard] सक्षम = config.toml में फिर से सक्षम करने के लिए सही।', + 'settings.costDashboard.subtitle': + 'लाइव खर्च और टोकन पूरे झुंड में जलाते हैं। बार्स ऑटो रिफ्रेश हर कुछ सेकंड - कोई पेज पुनः लोड की जरूरत है।', + 'settings.costDashboard.summaryAriaLabel': 'लागत सारांश मीट्रिक', + 'settings.costDashboard.lastSevenDays': 'पिछले 7 दिनों', + 'settings.costDashboard.utilizationOf': 'of', + 'settings.costDashboard.thisMonth': 'इस माह', + 'settings.costDashboard.monthlyPaceHint': + 'वर्तमान दैनिक रन-रेट (avg × 30) पर अनुमानित मासिक खर्च।', + 'settings.costDashboard.budgetLimitHint': + 'config.toml में cost.monthly_limit_usd से मासिक बजट पढ़ा गया।', + 'settings.costDashboard.dailyTarget': 'दैनिक लक्ष्य', + 'settings.costDashboard.today': 'आज', + 'settings.costDashboard.todayBadge': 'TODAY', + 'settings.costDashboard.unknownProvider': '—', + 'settings.costDashboard.justNow': 'अभी', + 'settings.costDashboard.secondsAgo': '{value} पहले', + 'settings.costDashboard.minutesAgo': '{value} m पहले', + 'settings.costDashboard.hoursAgo': '{value} h पहले', + 'settings.costDashboard.daysAgo': '{value} d पहले', + 'settings.costDashboard.updated': 'अद्यतन', + 'settings.costDashboard.refresh': 'ताज़ा', + 'settings.costDashboard.utcNote': 'UTC में दिन की बाल्टी', + 'settings.costDashboard.stackedNote': 'इनपुट + आउटपुट स्टैक्ड', + 'settings.costDashboard.modelBreakdownHint': 'पिछले 7 दिनों में एकत्र हुआ।', + 'settings.costDashboard.noDataHint': + 'एक एजेंट संदेश भेजें - अगले प्रदाता कॉल से टोकन का उपयोग ~ 10 सेकंड के भीतर चार्ट को पॉप्युलेट करेगा।', + 'settings.search.title': 'खोज इंजन', + 'settings.search.menuDesc': + 'डिफ़ॉल्ट to OpenHuman -एक API कुंजी के साथ अपने स्वयं के प्रदाता को प्रबंधित खोज या तार करना।', + 'settings.search.description': + 'एजेंट द्वारा उपयोग किए जाने वाले सर्च इंजन को चुनें, या सर्च टूल्स को पूरी तरह बंद करें। Managed, OpenHuman के बैकएंड का उपयोग करता है (कोई सेटअप नहीं)। Parallel, Brave, और Querit आपकी API key का उपयोग करके सीधे आपकी मशीन से चलते हैं।', + 'settings.search.engineAria': 'खोज इंजन', + 'settings.search.engineDisabledLabel': 'Disabled', + 'settings.search.engineDisabledDesc': 'एजेंट संदर्भ और उपलब्ध टूल सूची से खोज टूल हटाएं।', + 'settings.search.engineManagedLabel': 'OpenHuman प्रबंधित', + 'settings.search.engineManagedDesc': 'डिफ़ॉल्ट। OpenHuman backend — no API key required.', 'settings.search.localManagedUnavailable': 'लोकल उपयोगकर्ताओं के लिए OpenHuman Managed search उपलब्ध नहीं है। वेब सर्च चालू करने के लिए अपनी Parallel या Brave API key जोड़ें।', + 'settings.search.engineParallelLabel': 'Parallel', + 'settings.search.engineParallelDesc': + 'डायरेक्ट Parallel API: खोज, निकालने, चैट, अनुसंधान, समृद्ध, डेटासेट उपकरण।', + 'settings.search.engineBraveLabel': 'Brave खोजें', + 'settings.search.engineBraveDesc': 'प्रत्यक्ष Brave खोजें API: वेब, समाचार, छवि और वीडियो उपकरण।', + 'settings.search.engineQueritLabel': 'क्वेर्ट', + 'settings.search.engineQueritDesc': + 'प्रत्यक्ष Querit API: साइट, समय सीमा, देश और भाषा फिल्टर के साथ वेब खोज।', + 'settings.search.statusConfigured': 'विन्यस्त', + 'settings.search.statusNeedsKey': 'API कुंजी की आवश्यकता है', + 'settings.search.fallbackToManaged': + 'कोई कुंजी विन्यस्त - खोज एक कुंजी सहेजा जाता है जब तक प्रबंधित करने के लिए वापस गिर जाएगा।', + 'settings.search.getApiKey': 'API कुंजी प्राप्त करें', + 'settings.search.save': 'सहेजें', + 'settings.search.clear': 'स्पष्ट', + 'settings.search.show': 'दिखाओ', + 'settings.search.hide': 'छिपाओ', + 'settings.search.statusSaving': 'सहेजा जा रहा है...', + 'settings.search.statusSaved': 'सहेजा गया.', + 'settings.search.statusError': 'असफल', + 'settings.search.parallelKeyLabel': 'Parallel API कुंजी', + 'settings.search.braveKeyLabel': 'Brave API कुंजी खोजें', + 'settings.search.queritKeyLabel': 'क्वेरिट API कुंजी', + 'settings.search.placeholderStored': '•••••••• (संग्रहीत)', + 'settings.search.placeholderParallel': 'पीके_...', + 'settings.search.placeholderBrave': 'BSA...', + 'settings.search.placeholderQuerit': 'क्वेरिट API कुंजी', + 'settings.search.allowedSitesLabel': 'अनुमत वेबसाइटों', + 'settings.search.allowedSitesHint': + 'वे होस्ट जिन्हें असिस्टेंट खोल और पढ़ सकता है — वेब फ़ेच और ब्राउज़र टूल के माध्यम से — प्रति पंक्ति एक, जैसे reuters.com। एक होस्ट में उसके सभी सबडोमेन भी शामिल होते हैं। वेब सर्च स्वयं इस सूची से प्रतिबंधित नहीं है।', + 'settings.search.allowedSitesAllOn': + 'सहायक किसी भी सार्वजनिक वेबसाइट को खोल सकता है। स्थानीय और निजी पते अवरुद्ध रहते हैं।', + 'settings.search.allowedSitesPlaceholder': 'reuters.com\napnews.com\ngithub.com', + 'settings.search.allowedSitesSave': 'वेबसाइट सहेजें', + 'settings.search.accessModeAria': 'वेब एक्सेस मोड', + 'settings.search.accessAllowAll': 'सभी को अनुमति दें', + 'settings.search.accessCustom': 'कस्टम', + 'settings.search.accessBlockAll': 'सभी को ब्लॉक करें', + 'settings.search.accessBlockAllHint': + 'सभी वेब एक्सेस अवरुद्ध है - सहायक किसी भी वेबसाइट को खोल या पढ़ नहीं सकता है।', + 'settings.embeddings.title': 'एम्बेडिंग्स', + 'settings.embeddings.description': + 'चुनें कि कौन सा एम्बेडिंग प्रदाता मेमोरी को सिमेंटिक सर्च के लिए वेक्टर में बदलता है। प्रदाता, मॉडल या आयाम बदलने से संग्रहीत वेक्टर अमान्य हो जाते हैं और पूर्ण मेमरी रीसेट की आवश्यकता होती है।', + 'settings.embeddings.providerAria': 'एम्बेडिंग प्रदाता', + 'settings.embeddings.statusConfigured': 'कॉन्फ़िगर किया गया', + 'settings.embeddings.statusNeedsKey': 'API कुंजी चाहिए', + 'settings.embeddings.apiKeyLabel': '{provider} API कुंजी', + 'settings.embeddings.placeholderStored': '•••••••• (संग्रहीत)', + 'settings.embeddings.placeholderKey': 'अपनी API कुंजी पेस्ट करें…', + 'settings.embeddings.keyStoredEncrypted': + 'आपकी API कुंजी इस डिवाइस पर एन्क्रिप्टेड स्टोर की गई है।', + 'settings.embeddings.show': 'दिखाएँ', + 'settings.embeddings.hide': 'छिपाएँ', + 'settings.embeddings.save': 'सहेजें', + 'settings.embeddings.clear': 'साफ़ करें', + 'settings.embeddings.model': 'मॉडल', + 'settings.embeddings.dimensions': 'आयाम', + 'settings.embeddings.customEndpoint': 'कस्टम एंडपॉइंट', + 'settings.embeddings.customModelPlaceholder': 'मॉडल का नाम', + 'settings.embeddings.customDimsPlaceholder': 'आयाम', + 'settings.embeddings.applyCustom': 'लागू करें', + 'settings.embeddings.testConnection': 'कनेक्शन परीक्षण', + 'settings.embeddings.testing': 'परीक्षण हो रहा है…', + 'settings.embeddings.testSuccess': 'कनेक्ट — {dims} आयाम', + 'settings.embeddings.testFailed': 'विफल: {error}', + 'settings.embeddings.saving': 'सहेजा जा रहा है…', + 'settings.embeddings.saved': 'सहेजा गया।', + 'settings.embeddings.errorPrefix': 'विफल', + 'settings.embeddings.wipeTitle': 'मेमोरी वेक्टर रीसेट करें?', + 'settings.embeddings.wipeBody': + 'एम्बेडिंग प्रदाता, मॉडल या आयाम बदलने से सभी संग्रहीत मेमोरी वेक्टर मिट जाएंगे। पुनर्प्राप्ति फिर से काम करने से पहले मेमोरी को फिर से बनाना होगा। यह पूर्ववत नहीं किया जा सकता।', + 'settings.embeddings.cancel': 'रद्द करें', + 'settings.embeddings.confirmWipe': 'मिटाएँ और लागू करें', + 'settings.embeddings.setupTitle': '{provider} सेटअप', + 'settings.embeddings.saveAndSwitch': 'सहेजें और बदलें', + 'settings.embeddings.optional': 'वैकल्पिक', + 'settings.embeddings.vectorSearchDisabled': + 'वेक्टर खोज अक्षम है। मेमोरी रिकॉल केवल कीवर्ड मेलिंग और रीसेंसी का उपयोग करेगा - कोई सेमैनेटिक रैंकिंग नहीं।', + 'settings.embeddings.clearKey': 'API कुंजी साफ़ करें', + 'pages.settings.ai.embeddings': 'एम्बेडिंग्स', + 'pages.settings.ai.embeddingsDesc': 'मेमोरी पुनर्प्राप्ति के लिए वेक्टर एन्कोडिंग मॉडल', + 'mcp.alphaBadge': 'अल्फ़ा', + 'mcp.alphaBannerText': + 'MCP सर्वर समर्थन प्रारंभिक अल्फा में है। स्मिथरी रजिस्ट्री, प्रवाह स्थापित करने और उपकरण तारों को रिलीज के बीच आकार बदलने या बदल सकता है।', + 'mcp.toolList.noTools': 'कोई उपकरण उपलब्ध नहीं.', + 'mcp.setup.secretDialog.title': 'MCP सेटअप - गुप्त दर्ज करें', + 'mcp.setup.secretDialog.bodyPrefix': 'MCP सेटअप एजेंट की आवश्यकता है', + 'mcp.setup.secretDialog.bodySuffix': + '। आपका मान सीधे कोर प्रक्रिया को भेजा जाता है और AI वार्तालाप में कभी नहीं जाता।', + 'mcp.setup.secretDialog.inputLabel': 'मूल्य', + 'mcp.setup.secretDialog.inputPlaceholder': 'यहाँ चिपकाएँ', + 'mcp.setup.secretDialog.show': 'दिखाओ', + 'mcp.setup.secretDialog.hide': 'छिपाओ', + 'mcp.setup.secretDialog.submit': 'सबमिट करें', + 'mcp.setup.secretDialog.cancel': 'रद्द करें', + 'mcp.setup.secretDialog.submitting': 'सबमिट किया जा रहा है...', + 'mcp.setup.secretDialog.errorPrefix': 'सबमिट करने में विफल:', + 'mcp.setup.secretDialog.privacyNote': + 'स्थानीय MCP रहस्य तालिका में संग्रहीत एन्क्रिप्टेड। कभी लॉग किया या एक मॉडल के लिए भेजा।', + 'devices.betaBadge': 'बीटा', + 'devices.betaText': + 'यह सुविधा अभी बीटा में है। इस OpenHuman से iOS फ़ोन जोड़ें और उन्हें रिमोट क्लाइंट के रूप में उपयोग करें।', 'devices.comingSoonDescription': 'डिवाइस पेयरिंग जल्द आ रही है। यह पेज iPhone पेयर करने और जुड़े हुए डिवाइस प्रबंधित करने का स्थान होगा।', + 'devices.title': 'उपकरण', + 'devices.pairIphone': 'iPhone युग्मित करें', + 'devices.noPaired': 'कोई युग्मित डिवाइस नहीं', + 'devices.emptyState': 'अपने iPhone पर QR कोड स्कैन करें और इसे इस OpenHuman सत्र से जोड़ें।', + 'devices.devicePairedTitle': 'डिवाइस युग्मित', + 'devices.devicePairedMessage': 'iPhone सफलतापूर्वक कनेक्ट हुआ.', + 'devices.deviceRevokedTitle': 'डिवाइस निरस्त कर दिया गया', + 'devices.deviceRevokedMessage': '{label} हटा दिया गया.', + 'devices.revokeFailedTitle': 'निरस्त करना विफल रहा', + 'devices.online': 'ऑनलाइन', + 'devices.offline': 'ऑफ़लाइन', + 'devices.lastSeenNever': 'कभी नहीं', + 'devices.lastSeenNow': 'अभी अभी', + 'devices.lastSeenMinutes': '{count}m पहले', + 'devices.lastSeenHours': '{count}h पहले', + 'devices.lastSeenDays': '{count}d पहले', + 'devices.revoke': 'निरस्त करें', + 'devices.revokeAria': 'निरस्त करें{label}', + 'devices.confirmRevokeTitle': 'डिवाइस निरस्त करें?', + 'devices.confirmRevokeBody': '{label} अब कनेक्ट नहीं कर पाएगा। इसे वापस नहीं किया जा सकता।', + 'devices.loadFailed': 'डिवाइस लोड करने में विफल: {message}', + 'devices.pairModal.title': 'iPhone युग्मित करें', + 'devices.pairModal.loading': 'युग्मन कोड जनरेट किया जा रहा है...', + 'devices.pairModal.instructions': 'अपने iPhone पर OpenHuman ऐप खोलें और इस कोड को स्कैन करें।', + 'devices.pairModal.expiresIn': 'कोड ~{count} मिनट में समाप्त हो जाता है', + 'devices.pairModal.expiresInPlural': 'कोड ~{count} मिनट में समाप्त हो जाता है', + 'devices.pairModal.showDetails': 'विवरण दिखाएँ', + 'devices.pairModal.hideDetails': 'विवरण छिपाएँ', + 'devices.pairModal.channelId': 'चैनल आईडी', + 'devices.pairModal.pairingUrl': 'जोड़ना URL', + 'devices.pairModal.expiredTitle': 'QR code समाप्त हो गया', + 'devices.pairModal.expiredBody': 'युग्मन जारी रखने के लिए एक नया कोड जनरेट करें.', + 'devices.pairModal.generateNewCode': 'नया कोड जनरेट करें', + 'devices.pairModal.successTitle': 'iPhone के साथ युग्मित', + 'devices.pairModal.autoClose': 'स्वचालित रूप से बंद हो रहा है...', + 'devices.pairModal.errorPrefix': 'युग्मन बनाने में विफल: {message}', + 'devices.pairModal.errorTitle': 'कुछ ग़लत हो गया', + 'devices.pairModal.copyUrl': 'प्रतिलिपि', + 'mcp.catalog.searchAria': 'स्मिथेरी कैटलॉग खोजें', + 'mcp.catalog.searchPlaceholder': 'स्मिथरी कैटलॉग खोजें...', + 'mcp.catalog.loadFailed': 'कैटलॉग लोड करने में विफल', + 'mcp.catalog.noResults': 'कोई सर्वर नहीं मिला.', + 'mcp.catalog.noResultsFor': '"{query}" के लिए कोई सर्वर नहीं मिला।', + 'mcp.catalog.loadMore': 'और अधिक लोड करें', + 'mcp.configAssistant.title': 'कॉन्फ़िगरेशन सहायक', + 'mcp.configAssistant.empty': 'कॉन्फ़िगरेशन, आवश्यक एनवी वर्र्स या सेटअप चरणों के बारे में पूछें।', + 'mcp.configAssistant.suggestedValues': 'सुझाए गए मान:', + 'mcp.configAssistant.valueHidden': '(मूल्य छिपा हुआ)', + 'mcp.configAssistant.applySuggested': 'सुझाए गए मान लागू करें', + 'mcp.configAssistant.reinstallHint': 'इन्हें लागू करने के लिए इन मानों के साथ पुनः स्थापित करें।', + 'mcp.configAssistant.thinking': 'सोच रहा हूँ...', + 'mcp.configAssistant.inputPlaceholder': 'एक सवाल पूछो (Enter to send, Shift+Enter for newline)', + 'mcp.configAssistant.send': 'भेजें', + 'mcp.configAssistant.failedResponse': 'प्रतिक्रिया प्राप्त करने में विफल', + 'mcp.toolList.availableSingular': '{count} उपकरण उपलब्ध है', + 'mcp.toolList.availablePlural': '{count} उपकरण उपलब्ध हैं', + 'mcp.toolList.tryTool': 'कोशिश करो', + 'mcp.toolList.tryToolAria': '{name} के लिए खुला निष्पादन खेल का मैदान', + 'mcp.playground.title': 'रन {name}', + 'mcp.playground.close': 'खेल का मैदान बंद', + 'mcp.playground.inputSchema': 'इनपुट स्कीमा', + 'mcp.playground.argsLabel': 'तर्क (JSON)', + 'mcp.playground.argsHelp': + 'टाइप JSON इनपुट स्कीमा से मेल खाते हैं। खाली इनपुट को {} के रूप में माना जाता है।', + 'mcp.playground.runShortcut': '⌘/Ctrl + Enter चलाने के लिए', + 'mcp.playground.format': 'प्रारूप', + 'mcp.playground.invalidJson': 'JSON', + 'mcp.playground.run': 'रन टूल', + 'mcp.playground.running': 'दौड़ना...', + 'mcp.playground.result': 'परिणाम', + 'mcp.playground.resultError': 'टूल एक त्रुटि लौटा', + 'mcp.playground.copyResult': 'कॉपी परिणाम', + 'mcp.playground.copied': 'Copied', + 'mcp.playground.history': 'इतिहास', + 'mcp.playground.historyEmpty': 'इस सत्र में अभी तक कोई चालान नहीं है।', + 'mcp.playground.historyLoad': 'लोड', + 'mcp.playground.unexpectedError': 'अनपेक्षित त्रुटि चालान उपकरण।', + 'mcp.catalog.deployed': 'तैनात', + 'mcp.catalog.installCount': '{count} इंस्टॉल होता है', + 'app.update.dismissNotification': 'अद्यतन अधिसूचना ख़ारिज करें', + 'bootCheck.rpcAuthSuffix': 'प्रत्येक RPC पर।', + 'app.localAiDownload.expandAria': 'डाउनलोड प्रगति का विस्तार करें', + 'app.localAiDownload.collapseAria': 'डाउनलोड प्रगति को संक्षिप्त करें', + 'app.localAiDownload.dismissAria': 'डाउनलोड अधिसूचना ख़ारिज करें', + 'mobile.nav.ariaLabel': 'मोबाइल नेविगेशन', + 'progress.stepsAria': 'प्रगति के चरण', + 'progress.stepAria': '{total} का चरण {current}', + 'workspace.vaultsTitle': 'ज्ञान भंडार', + 'workspace.vaultsDesc': + 'किसी स्थानीय फ़ोल्डर पर इंगित करें; फ़ाइलें खंडित हो जाती हैं और स्मृति में प्रतिबिंबित हो जाती हैं।', + 'calls.title': 'कॉल', + 'calls.comingSoonBody': 'एआई-सहायक कॉल जल्द ही आ रही हैं। बने रहें।', + 'art.rotatingTetrahedronAria': 'घूमता हुआ उलटा टेट्राहेड्रोन अंतरिक्ष यान', + 'mcp.installed.title': 'स्थापित', + 'mcp.installed.browseCatalog': 'कैटलॉग ब्राउज़ करें', + 'mcp.installed.empty': 'अभी तक कोई MCP सर्वर स्थापित नहीं है।', + 'mcp.installed.toolSingular': '{count} उपकरण', + 'mcp.installed.toolPlural': '{count} उपकरण', + 'mcp.health.title': 'स्वास्थ्य', + 'mcp.health.summaryAria': 'MCP कनेक्शन स्वास्थ्य सारांश', + 'mcp.health.connectedCount': '{count} कनेक्ट', + 'mcp.health.connectingCount': '{count} कनेक्ट', + 'mcp.health.errorCount': '{count} त्रुटि', + 'mcp.health.disconnectedCount': '{count} निष्क्रिय', + 'mcp.health.retryAll': 'सभी ({count})', + 'mcp.health.retryAllAria': 'Retry सभी {count} त्रुटि MCP सर्वर', + 'mcp.health.disconnectAll': 'सभी को अलग करें ({count})', + 'mcp.health.disconnectAllAria': 'सभी {count} कनेक्ट किए गए MCP सर्वर को डिस्कनेक्ट करें', + 'mcp.health.disconnectConfirm.title': 'सभी MCP सर्वर को डिस्कनेक्ट करें?', + 'mcp.health.disconnectConfirm.body': + 'यह वर्तमान में कनेक्टेड MCP सर्वर को डिस्कनेक्ट करेगा। स्थापित विन्यास और रहस्यों को रखा जाता है; आप बाद में किसी भी सर्वर को फिर से कनेक्ट कर सकते हैं।', + 'mcp.health.disconnectConfirm.cancel': 'रद्द करना', + 'mcp.health.disconnectConfirm.confirm': 'सभी को अलग करें', + 'mcp.health.opErrorGeneric': 'थोक ऑपरेशन विफल रहा। लॉग देखें', + 'mcp.health.bulkPartialFailure': '{total} में से {failed} सर्वर विफल हुए। लॉग देखें।', + 'mcp.installed.search.landmarkAria': 'खोज स्थापित MCP सर्वर', + 'mcp.installed.search.inputAria': 'नाम से फ़िल्टर स्थापित MCP सर्वर', + 'mcp.installed.search.placeholder': 'फिल्टर सर्वर...', + 'mcp.installed.search.clearAria': 'साफ़ फिल्टर', + 'mcp.installed.search.countMatches': '{total} सर्वर के {shown}', + 'mcp.installed.search.noMatches': 'कोई सर्वर "{query}" से मेल खाता है।', + 'mcp.inventory.openButton': 'सूची', + 'mcp.inventory.openAria': 'Sharable MCP सूची पैनल खोलें', + 'mcp.inventory.title': 'Sharable MCP इन्वेंटरी', + 'mcp.inventory.subtitle': + 'अपने स्थापित MCP सर्वर को पोर्टेबल, गुप्त-मुक्त प्रकटन के रूप में निर्यात करें, या एक टीममेट से आयात करें। गुप्त env मूल्यों को कभी भी शामिल या आयात नहीं किया जाता है।', + 'mcp.inventory.close': 'बंद सूची पैनल', + 'mcp.inventory.tablistAria': 'सूची', + 'mcp.inventory.tab.export': 'निर्यात', + 'mcp.inventory.tab.import': 'आयात', + 'mcp.inventory.export.empty': + 'नहीं MCP सर्वर अभी तक स्थापित - निर्यात करने के लिए कुछ भी नहीं। पहले सूची में से एक स्थापित करें।', + 'mcp.inventory.export.privacyTitle': 'यह क्या है', + 'mcp.inventory.export.privacyBody': + 'सर्वर नाम, योग्य नाम, env-variable KEY NAMES, और गैर-secret config केवल। गुप्त मूल्य, आपकी मशीन पहचानकर्ता, और प्रति-स्थापित टाइमस्टैम्प जानबूझकर छीन रहे हैं।', + 'mcp.inventory.export.serverCount': 'इस घोषणा में {count} सर्वर', + 'mcp.inventory.export.copy': 'कॉपी', + 'mcp.inventory.export.copied': 'Copied', + 'mcp.inventory.export.copyAria': 'JSON को क्लिपबोर्ड पर कॉपी करें', + 'mcp.inventory.export.download': 'डाउनलोड', + 'mcp.inventory.export.downloadAria': 'JSON फ़ाइल के रूप में प्रकट होने को डाउनलोड करें', + 'mcp.inventory.import.trustTitle': 'आयातित मेनिफेस्ट को अविश्वसनीय कोड के रूप में मानें', + 'mcp.inventory.import.trustBody': + 'एक MCP सर्वर एक ऐसा उपकरण है जिसे आप अपना एजेंट देते हैं। केवल आयात उन स्रोतों से प्रकट होता है जिन्हें आप rust कहते हैं। प्रत्येक स्थापना के लिए आपके स्पष्ट क्लिक की आवश्यकता होती है; कोई भी ऑटो-इंस्टॉल नहीं है।', + 'mcp.inventory.import.pasteLabel': 'पेस्ट करें प्रकटन JSON', + 'mcp.inventory.import.pastePlaceholder': + 'यहाँ एक प्रकट पेस्ट करें, या नीचे एक.json फ़ाइल अपलोड करें।', + 'mcp.inventory.import.preview': 'पूर्वावलोकन', + 'mcp.inventory.import.clear': 'स्पष्ट', + 'mcp.inventory.import.uploadFile': 'फ़ाइल अपलोड करें', + 'mcp.inventory.import.uploadFileAria': 'एक प्रकटन फ़ाइल अपलोड करें', + 'mcp.inventory.import.fileTooLarge': 'फ़ाइल बहुत बड़ी है (1 MB से अधिक)। लोड हो रहा है।', + 'mcp.inventory.import.fileReadFailed': 'फ़ाइल नहीं पढ़ा जा सकता।', + 'mcp.inventory.import.parseErrorPrefix': 'प्रकट नहीं हो सकता:', + 'mcp.inventory.import.previewHeading': 'पूर्वावलोकन', + 'mcp.inventory.import.previewCounts': '{total} सर्वर - {newly} नया, {already} पहले से ही स्थापित', + 'mcp.inventory.import.previewEmpty': 'मैनिफेस्ट में कोई सर्वर नहीं है।', + 'mcp.inventory.import.exportedFrom': '{exporter}', + 'mcp.inventory.import.exportedAt': '{when}', + 'mcp.inventory.import.statusNew': 'नया', + 'mcp.inventory.import.statusAlreadyInstalled': 'पहले से ही स्थापित', + 'mcp.inventory.import.envKeysLabel': 'एनवी कुंजी', + 'mcp.inventory.import.install': 'स्थापित करना', + 'mcp.inventory.import.installAria': 'इस घोषणा से {name} स्थापित करें', + 'mcp.inventory.import.skipped': 'छीनना', + 'mcp.inventory.parseError.empty': 'मैनिफेस्ट खाली है।', + 'mcp.inventory.parseError.invalidJson': 'अमान्य JSON।', + 'mcp.inventory.parseError.rootNotObject': 'Manifest रूट पर एक JSON वस्तु होना चाहिए।', + 'mcp.inventory.parseError.unsupportedSchema': + 'अनसमर्थित घोषणा स्कीमा - यह फ़ाइल एक संगत निर्यातक द्वारा उत्पादित नहीं की गई थी।', + 'mcp.inventory.parseError.missingExportedAt': 'मिसिंग या अमान्य `exported_at` क्षेत्र।', + 'mcp.inventory.parseError.missingExportedBy': 'मिसिंग या अमान्य `exported_by` क्षेत्र।', + 'mcp.inventory.parseError.invalidServers': 'मिसिंग या अवैध `servers` सरणी।', + 'mcp.inventory.parseError.serverNotObject': 'सर्वर प्रविष्टि एक वस्तु नहीं है।', + 'mcp.inventory.parseError.serverMissingQualifiedName': + 'एक सर्वर प्रविष्टि अपने योग्य नाम लापता है।', + 'mcp.inventory.parseError.serverMissingDisplayName': + 'सर्वर प्रविष्टि अपने display name लापता है।', + 'mcp.inventory.parseError.serverEnvKeysNotArray': + 'सर्वर प्रविष्टि में एक env keys क्षेत्र है जो स्ट्रिंग्स की एक सरणी नहीं है।', + 'mcp.inventory.parseError.serverContainsEnv': + 'सर्वर प्रविष्टि में `env` मान मानचित्र होता है। आयात करने के लिए इनकार - प्रकट होता है केवल env keys (नाम) लेना चाहिए, कभी गुप्त मान नहीं होना चाहिए।', + 'mcp.inventory.parseError.duplicateQualifiedName': + 'डुप्लिकेट योग्य नाम प्रकट होने में पाया गया। प्रत्येक सर्वर को एक बार में प्रदर्शित होना चाहिए।', + 'mcp.tab.loading': 'MCP सर्वर लोड हो रहा है...', + 'mcp.tab.emptyDetail': 'एक सर्वर चुनें या कैटलॉग ब्राउज़ करें।', + 'mcp.install.loadingDetail': 'सर्वर विवरण लोड हो रहा है...', + 'mcp.install.back': 'वापस जाओ', + 'mcp.install.title': '{name} स्थापित करें', + 'mcp.install.requiredEnv': 'आवश्यक पर्यावरण चर', + 'mcp.install.enterValue': '{key} दर्ज करें', + 'mcp.install.show': 'दिखाओ', + 'mcp.install.hide': 'छिपाओ', + 'mcp.install.configLabel': 'कॉन्फ़िगरेशन (वैकल्पिक JSON)', + 'mcp.install.configPlaceholder': '{"key": "value"}', + 'mcp.install.missingRequired': '"{key}" आवश्यक है', + 'mcp.install.invalidJson': 'कॉन्फ़िग JSON मान्य JSON नहीं है', + 'mcp.install.failedDetail': 'सर्वर विवरण लोड करने में विफल', + 'mcp.install.failedInstall': 'इंस्टॉल विफल', + 'mcp.install.button': 'स्थापित करें', + 'mcp.install.installing': 'स्थापित किया जा रहा है...', + 'mcp.detail.suggestedEnvReady': 'सुझाए गए पर्यावरण मूल्य तैयार हैं', + 'mcp.detail.suggestedEnvBody': + 'इस सर्वर को फिर से स्थापित करने के लिए सुझाए गए मूल्यों के साथ उन्हें लागू करने के लिए: {keys}', + 'mcp.detail.connect': 'कनेक्ट करें', + 'mcp.detail.connecting': 'कनेक्ट हो रहा है...', + 'mcp.detail.disconnect': 'डिस्कनेक्ट करें', + 'mcp.detail.hideAssistant': 'सहायक छिपाएँ', + 'mcp.detail.helpConfigure': 'कॉन्फ़िगर करने में मेरी सहायता करें', + 'mcp.detail.confirmUninstall': 'अनइंस्टॉल की पुष्टि करें?', + 'mcp.detail.confirmUninstallAction': 'हाँ, अनइंस्टॉल करें', + 'mcp.detail.uninstall': 'अनइंस्टॉल करें', + 'mcp.detail.envVars': 'पर्यावरण चर', + 'mcp.detail.tools': 'उपकरण', + 'onboarding.skipForNow': 'अभी के लिए छोड़ें', + 'onboarding.localAI.continueWithCloud': 'बादल के साथ जारी रखें', + 'onboarding.localAI.useLocalAnyway': + 'फिर भी स्थानीय AI उपयोग करें (आपके डिवाइस के लिए अनुशंसित नहीं)', + 'onboarding.localAI.useLocalInstead': + 'इसके बजाय स्थानीय AI उपयोग करें (अभी Ollama से कनेक्ट करें)', + 'onboarding.localAI.setupIssue': 'स्थानीय AI सेटअप में एक समस्या आई', + 'autonomy.title': 'एजेंट की स्वायत्तता', + 'autonomy.maxActionsLabel': 'प्रति घंटे अधिकतम क्रियाएं', + 'autonomy.maxActionsHelp': + 'प्रति रोलिंग घंटे में एजेंट अधिकतम कितने टूल एक्शन चला सकता है। नया मान अगली चैट पर लागू होगा। Cron जॉब्स और चैनल लिसनर OpenHuman को पुनः आरंभ करने तक अपनी मौजूदा सीमा बनाए रखते हैं।', + 'autonomy.statusSaving': 'सहेजा जा रहा है...', + 'autonomy.statusSaved': 'सहेजा गया.', + 'autonomy.statusFailed': 'असफल', + 'autonomy.unlimitedNote': 'असीमित - दर सीमित करना अक्षम।', + 'autonomy.invalidIntegerMsg': + 'एक धनात्मक पूर्णांक होना चाहिए (कोई सीमा न रखने के लिए Unlimited प्रीसेट उपयोग करें)।', + 'autonomy.presetUnlimited': 'असीमित (डिफ़ॉल्ट)', + 'triggers.toggleFailed': '{action} {trigger} के लिए विफल: {message}', + 'settings.ai.overview': 'AI सिस्टम ओवरव्यू', + 'settings.ai.configStatus': 'कॉन्फिगरेशन स्टेटस', + 'settings.ai.fallbackMode': 'फ़ॉलबैक मोड', + 'settings.ai.loadedFromRuntime': 'रनटाइम से लोड हुआ', + 'settings.ai.loadingDuration': 'लोडिंग में लगा समय', + 'settings.ai.localRuntime': 'लोकल मॉडल रनटाइम', + 'settings.ai.openManager': 'मैनेजर खोलें', + 'settings.ai.retryDownload': 'डाउनलोड फिर से करें', + 'settings.ai.state': 'स्टेट', + 'settings.ai.targetModel': 'टार्गेट मॉडल', + 'settings.ai.download': 'डाउनलोड करें', + 'settings.ai.localModelUnavailable': 'लोकल मॉडल स्टेटस उपलब्ध नहीं।', + 'settings.ai.soulConfig': 'SOUL पर्सोना कॉन्फिगरेशन', + 'settings.ai.refreshing': 'रिफ्रेश हो रहा है...', + 'settings.ai.refreshSoul': 'SOUL रिफ्रेश करें', + 'settings.ai.loadingSoul': 'SOUL कॉन्फिगरेशन लोड हो रही है...', + 'settings.ai.identity': 'आइडेंटिटी', + 'settings.ai.personality': 'पर्सनैलिटी', + 'settings.ai.safetyRules': 'सेफ्टी रूल्स', + 'settings.ai.source': 'सोर्स', + 'settings.ai.loaded': 'लोड हुआ', + 'settings.ai.toolsConfig': 'TOOLS कॉन्फिगरेशन', + 'settings.ai.refreshTools': 'TOOLS रिफ्रेश करें', + 'settings.ai.toolsAvailable': 'उपलब्ध टूल्स', + 'settings.ai.tools': 'टूल्स', + 'settings.ai.activeSkills': 'एक्टिव स्किल्स', + 'settings.ai.skills': 'स्किल्स', + 'settings.ai.skillsOverview': 'स्किल्स ओवरव्यू', + 'settings.ai.refreshingAll': 'सभी रिफ्रेश हो रहे हैं...', + 'settings.ai.refreshAll': 'सभी AI कॉन्फिगरेशन रिफ्रेश करें', + 'settings.notifications.suppressAll': 'सभी नोटिफिकेशन बंद करें', + 'settings.notifications.suppressAllDesc': + 'फोकस स्टेट चाहे कुछ भी हो, एम्बेडेड ऐप्स के सभी OS नोटिफिकेशन टोस्ट ब्लॉक करें।', + 'settings.notifications.toggleDnd': 'डू नॉट डिस्टर्ब टॉगल करें', + 'settings.notifications.categories': 'कैटेगरीज़', + 'settings.notifications.categoryFooter': + 'किसी कैटेगरी को डिसेबल करने से उस टाइप के नए नोटिफिकेशन नोटिफिकेशन सेंटर में नहीं आएंगे। पुराने नोटिफिकेशन तब तक रहेंगे जब तक क्लियर न हों।', + 'settings.billing.movedToWeb': 'बिलिंग वेब पर चली गई है', + 'settings.billing.openDashboard': 'बिलिंग डैशबोर्ड खोलें', + 'settings.billing.movedToWebDesc': + 'सब्सक्रिप्शन बदलाव, पेमेंट तरीके, क्रेडिट और इनवॉयस अब वेब पर TinyHumans में मैनेज होते हैं।', + 'settings.billing.backToSettings': 'Settings पर वापस', + 'settings.billing.openingBrowser': 'ब्राउज़र खुल रहा है...', + 'settings.billing.browserNotOpen': 'अगर ब्राउज़र नहीं खुला तो ऊपर वाला बटन इस्तेमाल करें।', + 'settings.billing.browserOpenFailed': + 'ब्राउज़र ऑटोमेटिकली नहीं खुल पाया। ऊपर वाला बटन इस्तेमाल करें।', + 'settings.tools.chooseCapabilities': + 'चुनें कि OpenHuman आपकी तरफ से कौन सी कैपेबिलिटीज़ इस्तेमाल कर सकता है।', + 'settings.tools.saveChanges': 'बदलाव सेव करें', + 'settings.tools.preferencesSaved': 'प्रेफरेंस सेव हो गई', + 'settings.tools.saveFailed': 'प्रेफरेंस सेव नहीं हो पाई। दोबारा कोशिश करें।', + 'settings.screenAwareness.mode': 'मोड', + 'settings.screenAwareness.allExceptBlacklist': 'ब्लैकलिस्ट छोड़कर सब', + 'settings.screenAwareness.whitelistOnly': 'केवल व्हाइटलिस्ट', + 'settings.screenAwareness.screenMonitoring': 'स्क्रीन मॉनिटरिंग', + 'settings.screenAwareness.saveSettings': 'सेटिंग्स सेव करें', + 'settings.screenAwareness.session': 'सेशन', + 'settings.screenAwareness.status': 'स्टेटस', + 'settings.screenAwareness.active': 'एक्टिव', + 'settings.screenAwareness.stopped': 'रुका हुआ', + 'settings.screenAwareness.remaining': 'बचा हुआ', + 'settings.screenAwareness.startSession': 'सेशन शुरू करें', + 'settings.screenAwareness.stopSession': 'सेशन रोकें', + 'settings.screenAwareness.analyzeNow': 'अभी एनालाइज़ करें', + 'settings.screenAwareness.macosOnly': + 'स्क्रीन अवेयरनेस डेस्कटॉप कैप्चर और परमिशन कंट्रोल अभी केवल macOS पर सपोर्ट हैं।', + 'connections.comingSoon': 'जल्द आ रहा है', + 'connections.setUp': 'सेट अप करें', + 'connections.configured': 'कॉन्फिगर हो गया', + 'connections.unavailable': 'उपलब्ध नहीं', + 'connections.checking': 'चेक हो रहा है…', + 'connections.walletConfigured': + 'रिकवरी फ्रेज़ से लोकल EVM, BTC, Solana और Tron आइडेंटिटी कॉन्फिगर हो गई हैं।', + 'connections.walletReady': + 'एक रिकवरी फ्रेज़ से लोकल EVM, BTC, Solana और Tron आइडेंटिटी सेट करें।', + 'connections.walletError': + 'वॉलेट स्टेटस चेक नहीं हो पाई। रिकवरी फ्रेज़ पैनल से फिर से कोशिश करें।', + 'connections.walletChecking': 'वॉलेट स्टेटस चेक हो रही है...', + 'connections.walletIdentities': 'वॉलेट आइडेंटिटी', + 'connections.walletDerived': + 'रिकवरी फ्रेज़ से लोकल रूप से डिराइव हुई और केवल सेफ मेटाडेटा के रूप में स्टोर।', + 'connections.privacySecurity': 'प्राइवेसी और सिक्योरिटी', + 'connections.privacySecurityDesc': + 'सभी डेटा और क्रेडेंशियल ज़ीरो-डेटा रिटेंशन पॉलिसी के साथ लोकल रूप से स्टोर हैं। आपकी जानकारी एन्क्रिप्टेड है और तीसरे पक्ष से कभी शेयर नहीं होती।', + 'channels.status.connecting': 'कनेक्ट हो रहा है', + 'channels.status.notConfigured': 'कॉन्फिगर नहीं हुआ', + 'channels.noActiveRoute': 'कोई एक्टिव रूट नहीं', + 'channels.activeRoute': 'एक्टिव रूट', + 'channels.loadingDefinitions': 'चैनल डेफिनिशन लोड हो रही हैं...', + 'channels.channelConnections': 'चैनल कनेक्शन', + 'channels.configureAuthModes': 'हर मैसेजिंग चैनल के लिए auth modes कॉन्फिगर करें।', + 'channels.configNotAvailable': 'कॉन्फिगरेशन उपलब्ध नहीं है', + 'channels.channel': 'चैनल', + 'devOptions.coreModeNotSet': 'कोर मोड: सेट नहीं है', + 'devOptions.coreModeNotSetDesc': + 'बूट-चेक पिकर अभी कन्फर्म नहीं हुआ। Local या Cloud चुनने के लिए पिकर पर Switch mode इस्तेमाल करें।', + 'devOptions.local': 'लोकल', + 'devOptions.embeddedCoreSidecar': 'एम्बेडेड कोर साइडकार', + 'devOptions.sidecarSpawned': 'ऐप लॉन्च पर Tauri shell द्वारा इन-प्रोसेस स्पॉन किया गया।', + 'devOptions.cloud': 'क्लाउड', + 'devOptions.remoteCoreRpc': 'रिमोट कोर RPC', + 'devOptions.token': 'टोकन', + 'devOptions.tokenNotSet': 'सेट नहीं — RPC 401 देगा', + 'devOptions.triggerSentryTest': 'Sentry टेस्ट ट्रिगर करें (staging)', + 'devOptions.triggerSentryTestDesc': + 'Sentry पाइपलाइन वेरिफाई करने के लिए टैग्ड एरर फायर करता है। Issue #1072 — वेरिफिकेशन के बाद हटाएं।', + 'devOptions.sendTestEvent': 'टेस्ट इवेंट भेजें', + 'devOptions.sending': 'भेज रहे हैं…', + 'devOptions.eventSent': 'इवेंट भेज दिया गया', + 'devOptions.sentryDisabled': '(कोई आईडी नहीं - इस बिल्ड में संतरी अक्षम है)', + 'devOptions.failed': 'विफल', + 'devOptions.appLogs': 'ऐप लॉग्स', + 'devOptions.appLogsDesc': + 'रोज़ाना के रोलिंग लॉग फाइल्स वाला फोल्डर खोलें। इश्यू रिपोर्ट करते समय सबसे नई फाइल अटैच करें।', + 'devOptions.openLogsFolder': 'लॉग्स फोल्डर खोलें', + 'mnemonic.phraseSaved': 'रिकवरी फ्रेज़ सेव हो गया', + 'mnemonic.walletReady': 'मल्टी-चेन वॉलेट आइडेंटिटी तैयार हैं। Settings पर वापस जा रहे हैं...', + 'mnemonic.writeDownWords': 'ये', + 'mnemonic.wordsInOrder': + 'शब्द क्रम में लिखें और किसी सुरक्षित जगह रखें। यह फ्रेज़ आपकी लोकल एन्क्रिप्शन key और EVM, BTC, Solana तथा Tron वॉलेट आइडेंटिटी सुरक्षित रखता है।', + 'mnemonic.cannotRecover': + 'यह फ्रेज़ खो जाए तो कभी रिकवर नहीं हो सकता — इसे पूरी तरह अपने डिवाइस पर ही रखें।', + 'mnemonic.copyToClipboard': 'क्लिपबोर्ड पर कॉपी करें', + 'mnemonic.alreadyHavePhrase': 'मेरे पास पहले से रिकवरी फ्रेज़ है', + 'mnemonic.consentSaved': + 'मैंने यह फ्रेज़ सेव कर लिया है और लोकल वॉलेट सेटअप के लिए इसे इस्तेमाल करने की अनुमति देता हूँ', + 'mnemonic.enterPhraseToRestore': + 'अपना लोकल वॉलेट रिस्टोर करने के लिए नीचे रिकवरी फ्रेज़ डालें, या पूरा फ्रेज़ किसी भी फील्ड में पेस्ट करें (नए बैकअप के लिए 12 शब्द; पुराने वर्जन के 24 शब्द भी काम करते हैं)।', + 'mnemonic.words': 'शब्द', + 'mnemonic.validPhrase': 'सही रिकवरी फ्रेज़', + 'mnemonic.generateNewPhrase': 'नया रिकवरी फ्रेज़ जनरेट करें', + 'mnemonic.securingData': 'आपका डेटा सुरक्षित हो रहा है...', + 'mnemonic.saveRecoveryPhrase': 'रिकवरी फ्रेज़ सेव करें', + 'mnemonic.userNotLoaded': 'यूज़र लोड नहीं हुआ। दोबारा साइन इन करें या पेज रिफ्रेश करें।', + 'mnemonic.invalidPhrase': 'गलत रिकवरी फ्रेज़। अपने शब्द चेक करके दोबारा कोशिश करें।', + 'mnemonic.somethingWentWrong': 'कुछ गड़बड़ हो गई। दोबारा कोशिश करें।', + 'team.failedToCreate': 'टीम नहीं बन पाई', + 'team.invalidInviteCode': 'गलत या एक्सपायर्ड इनवाइट कोड', + 'team.failedToSwitch': 'टीम स्विच नहीं हो पाई', + 'team.failedToLeave': 'टीम छोड़ने में दिक्कत आई', + 'team.role.owner': 'ओनर', + 'team.role.admin': 'एडमिन', + 'team.role.billingManager': 'बिलिंग मैनेजर', + 'team.role.member': 'मेंबर', + 'team.active': 'एक्टिव', + 'team.personalTeam': 'पर्सनल टीम', + 'team.manageTeam': 'टीम मैनेज करें', + 'team.switching': 'स्विच हो रहा है...', + 'team.switch': 'स्विच करें', + 'team.leaving': 'छोड़ रहे हैं...', + 'team.leave': 'छोड़ें', + 'team.yourTeams': 'आपकी टीम्स', + 'team.createNewTeam': 'नई टीम बनाएं', + 'team.teamName': 'टीम का नाम', + 'team.creating': 'बन रही है...', + 'team.joinExistingTeam': 'मौजूदा टीम जॉइन करें', + 'team.inviteCode': 'इनवाइट कोड', + 'team.joining': 'जॉइन हो रहे हैं...', + 'team.join': 'जॉइन करें', + 'team.leaveTeam': 'टीम छोड़ें', + 'team.confirmLeave': 'क्या आप वाकई छोड़ना चाहते हैं', + 'team.leaveWarning': + 'आप टीम और सभी टीम रिसोर्स का एक्सेस खो देंगे। दोबारा जॉइन करने के लिए नया इनवाइट चाहिए होगा।', + 'team.management': 'टीम मैनेजमेंट', + 'team.notFound': 'टीम नहीं मिली', + 'team.accessDenied': 'एक्सेस नहीं मिला', + 'team.members': 'मेंबर्स', + 'team.membersDesc': 'टीम के सदस्यों और भूमिकाओं को प्रबंधित करें', + 'team.invites': 'आमंत्रित करता है', + 'team.invitesDesc': 'आमंत्रण कोड बनाएं और प्रबंधित करें', + 'team.settings': 'टीम सेटिंग्स', + 'team.settingsDesc': 'टीम का नाम और सेटिंग संपादित करें', + 'team.editSettings': 'टीम सेटिंग संपादित करें', + 'team.enterName': 'टीम का नाम दर्ज करें', + 'team.saving': 'सहेजा जा रहा है...', + 'team.saveChanges': 'परिवर्तन सहेजें', + 'team.delete': 'टीम हटाएँ', + 'team.deleteDesc': 'इस टीम को स्थायी रूप से हटा दें', + 'team.deleting': 'हटाया जा रहा है...', + 'team.failedToUpdate': 'टीम को अद्यतन करने में विफल', + 'team.failedToDelete': 'टीम को हटाने में विफल', + 'team.manageTitle': '{name} प्रबंधित करें', + 'team.planCreated': '{plan} योजना • बनाई गई {date}', + 'team.confirmDelete': 'क्या आप वाकई {name} को हटाना चाहते हैं?', + 'team.deleteWarning': + 'यह कार्य पूर्ववत नहीं किया जा सकता। सभी टीम डेटा स्थायी रूप से हटा दिया जाएगा।', + 'voice.title': 'वॉइस डिक्टेशन', + 'voice.settings': 'वॉइस सेटिंग्स', + 'voice.settingsDesc': 'डिक्टेट करने और एक्टिव फील्ड में टेक्स्ट डालने के लिए hotkey दबाकर रखें।', + 'voice.hotkey': 'हॉटकी', + 'voice.activationMode': 'एक्टिवेशन मोड', + 'voice.tapToToggle': 'टॉगल के लिए टैप करें', + 'voice.writingStyle': 'राइटिंग स्टाइल', + 'voice.verbatimTranscription': 'जैसा बोला वैसा ट्रांसक्रिप्शन', + 'voice.naturalCleanup': 'नैचुरल क्लीनअप', + 'voice.autoStart': 'कोर के साथ वॉइस सर्वर ऑटोमेटिकली शुरू करें', + 'voice.customDictionary': 'कस्टम डिक्शनरी', + 'voice.customDictionaryDesc': + 'रिकग्निशन एक्युरेसी बढ़ाने के लिए नाम, टेक्निकल टर्म और डोमेन शब्द जोड़ें।', + 'voice.addWord': 'एक शब्द जोड़ें...', + 'voice.sttDisabled': 'लोकल STT मॉडल डाउनलोड और तैयार होने तक वॉइस डिक्टेशन बंद है।', + 'voice.openLocalAiModel': 'लोकल AI मॉडल खोलें', + 'voice.serverRestarted': 'नई सेटिंग्स के साथ वॉइस सर्वर रीस्टार्ट हो गया।', + 'voice.settingsSaved': 'वॉइस सेटिंग्स सेव हो गईं।', + 'voice.serverStarted': 'वॉइस सर्वर शुरू हो गया।', + 'voice.serverStopped': 'वॉइस सर्वर बंद हो गया।', + 'voice.saveVoiceSettings': 'वॉइस सेटिंग्स सेव करें', + 'voice.startVoiceServer': 'वॉइस सर्वर शुरू करें', + 'voice.stopVoiceServer': 'वॉइस सर्वर बंद करें', + 'voice.debugTitle': 'वॉइस डिबग', + 'voice.failedToLoadSettings': 'ध्वनि सेटिंग लोड करने में विफल', + 'voice.failedToSaveSettings': 'ध्वनि सेटिंग सहेजने में विफल', + 'voice.failedToStartServer': 'वॉइस सर्वर प्रारंभ करने में विफल', + 'voice.failedToStopServer': 'वॉइस सर्वर को रोकने में विफल', + 'voice.sttDisabledPrefix': 'स्थानीय STT मॉडल डाउनलोड होने तक वॉयस डिक्टेशन अक्षम है। उपयोग करें', + 'voice.sttDisabledSuffix': 'व्हिस्पर स्थापित करने के लिए उपरोक्त अनुभाग।', + 'voice.debug.failedToLoadVoiceDebugData': 'ध्वनि डिबग डेटा लोड करने में विफल', + 'voice.debug.settingsSaved': 'डीबग सेटिंग सहेजी गईं.', + 'voice.debug.failedToSaveSettings': 'ध्वनि सेटिंग सहेजने में विफल', + 'voice.debug.runtimeStatus': 'रनटाइम स्थिति', + 'voice.debug.runtimeStatusDesc': + 'वॉयस सर्वर और स्पीच-टू-टेक्स्ट इंजन के लिए लाइव डायग्नोस्टिक्स।', + 'voice.debug.server': 'सर्वर', + 'voice.debug.unavailable': 'अनुपलब्ध', + 'voice.debug.ready': 'तैयार', + 'voice.debug.notReady': 'तैयार नहीं', + 'voice.debug.hotkey': 'हॉटकी', + 'voice.debug.notAvailable': 'एन/ए', + 'voice.debug.mode': 'मोड', + 'voice.debug.transcriptions': 'प्रतिलेखन', + 'voice.debug.serverError': 'सर्वर त्रुटि', + 'voice.debug.advancedSettings': 'उन्नत सेटिंग्स', + 'voice.debug.advancedSettingsDesc': + 'रिकॉर्डिंग और साइलेंस डिटेक्शन के लिए निम्न-स्तरीय ट्यूनिंग पैरामीटर।', + 'voice.debug.minimumRecordingSeconds': 'न्यूनतम रिकॉर्डिंग सेकंड', + 'voice.debug.silenceThreshold': 'साइलेंस थ्रेशोल्ड (आरएमएस)', + 'voice.debug.silenceThresholdDesc': + 'इससे कम ऊर्जा वाली रिकॉर्डिंग को साइलेंस माना जाता है और छोड़ दिया जाता है। कम = अधिक संवेदनशील।', + 'voice.providers.saved': 'ध्वनि प्रदाता सहेजे गए.', + 'voice.providers.failedToSave': 'ध्वनि प्रदाताओं को सहेजने में विफल', + 'voice.providers.ellipsis': '…', + 'voice.providers.installing': 'स्थापित करना', + 'voice.providers.installingBusy': 'इंस्टाल किया जा रहा है...', + 'voice.providers.reinstallLocally': 'स्थानीय रूप से पुनः स्थापित करें', + 'voice.providers.repair': 'मरम्मत', + 'voice.providers.retryLocally': 'स्थानीय स्तर पर पुनः प्रयास करें', + 'voice.providers.installLocally': 'स्थानीय रूप से स्थापित करें', + 'voice.providers.whisperReady': 'व्हिस्पर तैयार है.', + 'voice.providers.whisperInstallStarted': 'व्हिस्पर इंस्टॉल प्रारंभ हुआ', + 'voice.providers.queued': 'पंक्तिबद्ध', + 'voice.providers.failedToInstallWhisper': 'व्हिस्पर स्थापित करने में विफल', + 'voice.providers.piperReady': 'पाइपर तैयार है.', + 'voice.providers.piperInstallStarted': 'पाइपर स्थापित करना प्रारंभ हो गया', + 'voice.providers.failedToInstallPiper': 'पाइपर स्थापित करने में विफल', + 'voice.providers.title': 'आवाज प्रदाता', + 'voice.providers.desc': + 'चुनें कि ट्रांसक्रिप्शन और सिंथेसिस कहाँ चलें। बाइनरी और मॉडल डाउनलोड करने के लिए Install locally बटन उपयोग करें। स्थानीय प्रोवाइडर इंस्टॉल पूरा होने से पहले भी सहेजे जा सकते हैं — कोई मैन्युअल WHISPER_BIN या PIPER_BIN सेटअप आवश्यक नहीं।', + 'voice.providers.sttProvider': 'वाक्-से-पाठ प्रदाता', + 'voice.providers.sttProviderAria': 'एसटीटी प्रदाता', + 'voice.providers.cloudWhisperProxy': 'बादल (कानाफूसी प्रॉक्सी)', + 'voice.providers.localWhisper': 'स्थानीय कानाफूसी', + 'voice.providers.installRequired': ' (इंस्टॉल आवश्यक)', + 'voice.providers.whisperInstalledTitle': + 'Whisper इंस्टॉल है। पुनः इंस्टॉल करने के लिए क्लिक करें।', + 'voice.providers.whisperDownloadTitle': + 'whisper.cpp और GGML मॉडल को अपने वर्कस्पेस में डाउनलोड करें।', + 'voice.providers.installed': 'स्थापित', + 'voice.providers.installFailed': 'इंस्टॉल विफल', + 'voice.providers.notInstalled': 'स्थापित नहीं', + 'voice.providers.whisperModel': 'व्हिस्पर मॉडल', + 'voice.providers.whisperModelAria': 'कानाफूसी मॉडल', + 'voice.providers.whisperModelTiny': 'छोटा (39 एमबी, सबसे तेज़)', + 'voice.providers.whisperModelBase': 'आधार (74 एमबी)', + 'voice.providers.whisperModelSmall': 'छोटा (244 एमबी)', + 'voice.providers.whisperModelMedium': 'मध्यम (769 एमबी, अनुशंसित)', + 'voice.providers.whisperModelLargeTurbo': 'बड़ा v3 टर्बो (1.5 जीबी, सर्वोत्तम सटीकता)', + 'voice.providers.ttsProvider': 'पाठ से वाक् प्रदाता', + 'voice.providers.ttsProviderAria': 'टीटीएस प्रदाता', + 'voice.providers.cloudElevenLabsProxy': 'क्लाउड (इलेवनलैब्स प्रॉक्सी)', + 'voice.providers.localPiper': 'स्थानीय पाइपर', + 'voice.providers.piperInstalledTitle': 'पाइपर लगा हुआ है. पुनः स्थापित करने के लिए क्लिक करें.', + 'voice.providers.piperDownloadTitle': + 'Piper और बंडल की गई en_US-lessac-medium वॉयस को अपने वर्कस्पेस में डाउनलोड करें।', + 'voice.providers.piperVoice': 'पाइपर आवाज', + 'voice.providers.piperVoiceAria': 'पाइपर आवाज', + 'voice.providers.customVoiceOption': 'अन्य (नीचे टाइप करें)…', + 'voice.providers.customVoiceAria': 'पाइपर वॉयस आईडी (कस्टम)', + 'voice.providers.customVoicePlaceholder': 'en_US-lessac-मध्यम', + 'voice.providers.piperVoicesDesc': + 'वॉयस huggingface.co/rhasspy/piper-voices से आती हैं। वॉयस बदलने पर नई .onnx डाउनलोड करने के लिए Install/Reinstall क्लिक करना पड़ सकता है।', + 'voice.providers.mascotVoice': 'शुभंकर आवाज', + 'voice.providers.mascotVoiceDescPrefix': + 'ElevenLabs की वह आवाज़ जो मेसकॉट बोली प्रतिक्रियाओं के लिए उपयोग करता है, यहाँ कॉन्फ़िगर की गई है', + 'voice.providers.mascotSettings': 'शुभंकर सेटिंग', + 'voice.providers.mascotVoiceDescSuffix': '.', + 'voice.providers.hotkeyPlaceholder': 'एफ.एन', + 'voice.providers.piperPreset.lessacMedium': 'यूएस · लेसैक (तटस्थ, अनुशंसित)', + 'voice.providers.piperPreset.lessacHigh': 'यूएस · लेसैक (उच्च गुणवत्ता, बड़ा)', + 'voice.providers.piperPreset.ryanMedium': 'यूएस · रयान (पुरुष)', + 'voice.providers.piperPreset.amyMedium': 'यूएस · एमी (महिला)', + 'voice.providers.piperPreset.librittsHigh': 'यूएस · लिब्रिटीटीएस (मल्टी-स्पीकर)', + 'voice.providers.piperPreset.alanMedium': 'जीबी · एलन (पुरुष)', + 'voice.providers.piperPreset.jennyDiocoMedium': 'जीबी · जेनी डिओको (महिला)', + 'voice.providers.piperPreset.northernEnglishMaleMedium': 'जीबी · उत्तरी अंग्रेजी (पुरुष)', + 'voice.providers.chip.cloud': 'OpenHuman (प्रबंधित)', + 'voice.providers.chip.cloudAria': 'OpenHuman प्रबंधित प्रोवाइडर हमेशा सक्षम रहता है', + 'voice.providers.chip.whisper': 'Whisper (स्थानीय)', + 'voice.providers.chip.enableWhisper': 'स्थानीय Whisper STT सक्षम करें', + 'voice.providers.chip.disableWhisper': 'स्थानीय Whisper STT अक्षम करें', + 'voice.providers.chip.piper': 'Piper (स्थानीय)', + 'voice.providers.chip.enablePiper': 'स्थानीय Piper TTS सक्षम करें', + 'voice.providers.chip.disablePiper': 'स्थानीय Piper TTS अक्षम करें', + 'voice.providers.chip.enableProvider': 'Enable', + 'voice.providers.chip.disableProvider': 'Disable', + 'voice.providers.chip.apiKeyLabel': 'API कुंजी', + 'voice.providers.chip.apiKeyPlaceholder': 'sk-…', + 'voice.providers.chip.comingSoon': 'जल्द आ रहा है', + 'voice.modal.title': 'Configure', + 'voice.modal.desc': + 'इस प्रोवाइडर को सक्षम करने के लिए अपनी API कुंजी दर्ज करें। सहेजने से पहले कनेक्शन परीक्षण कर सकते हैं।', + 'voice.modal.testKey': 'कुंजी परीक्षण करें', + 'voice.modal.testing': 'परीक्षण हो रहा है…', + 'voice.modal.saveAndEnable': 'सहेजें और सक्षम करें', + 'voice.modal.enable': 'Enable', + 'voice.modal.whisperDesc': + 'एक मॉडल आकार चुनें और Whisper बाइनरी तथा GGML मॉडल अपने वर्कस्पेस में इंस्टॉल करें। बड़े मॉडल अधिक सटीक लेकिन धीमे होते हैं।', + 'voice.modal.piperDesc': + 'एक वॉयस चुनें और Piper बाइनरी तथा ONNX मॉडल अपने वर्कस्पेस में इंस्टॉल करें। Piper पूरी तरह ऑफलाइन और कम विलंबता के साथ चलता है।', + 'voice.routing.title': 'वॉयस रूटिंग', + 'voice.routing.desc': + 'चुनें कि कौन से सक्षम प्रोवाइडर स्पीच-टू-टेक्स्ट और टेक्स्ट-टू-स्पीच संभालें।', + 'voice.routing.save': 'Save', + 'voice.routing.testStt': 'STT परीक्षण करें', + 'voice.routing.testTts': 'TTS परीक्षण करें', + 'voice.routing.elevenlabsVoice': 'ElevenLabs वॉयस', + 'voice.routing.elevenlabsVoiceAria': 'ElevenLabs वॉयस चयन', + 'voice.routing.elevenlabsVoiceIdAria': 'ElevenLabs वॉयस ID (कस्टम)', + 'voice.routing.elevenlabsVoiceDesc': + 'एक क्यूरेटेड वॉयस चुनें या अपने ElevenLabs डैशबोर्ड से कस्टम वॉयस ID पेस्ट करें।', + 'voice.externalProviders.title': 'बाहरी वॉयस प्रोवाइडर', + 'voice.externalProviders.desc': + 'Deepgram, ElevenLabs या OpenAI जैसे तृतीय-पक्ष STT/TTS API सीधे कनेक्ट करें।', + 'voice.externalProviders.keySet': 'कुंजी सेट है', + 'voice.externalProviders.noKey': 'कोई API कुंजी नहीं', + 'voice.externalProviders.test': 'Test', + 'voice.externalProviders.testing': 'परीक्षण हो रहा है…', + 'voice.externalProviders.remove': 'Remove', + 'voice.externalProviders.provider': 'Provider', + 'voice.externalProviders.selectProvider': 'एक प्रोवाइडर चुनें…', + 'voice.externalProviders.apiKey': 'API कुंजी', + 'voice.externalProviders.apiKeyPlaceholder': 'sk-…', + 'voice.externalProviders.add': 'Add', + 'autocomplete.title': 'ऑटोकम्पलीट', + 'autocomplete.settings': 'सेटिंग्स', + 'autocomplete.acceptWithTab': 'Tab से एक्सेप्ट करें', + 'autocomplete.stylePreset': 'स्टाइल प्रीसेट', + 'autocomplete.style.balanced': 'बैलेंस्ड', + 'autocomplete.style.concise': 'संक्षिप्त', + 'autocomplete.style.formal': 'फॉर्मल', + 'autocomplete.style.casual': 'कैज़ुअल', + 'autocomplete.style.custom': 'कस्टम', + 'autocomplete.disabledApps': 'डिसेबल ऐप्स (एक बंडल/ऐप टोकन प्रति लाइन)', + 'autocomplete.saveSettings': 'सेटिंग्स सेव करें', + 'autocomplete.saving': 'सेव हो रहा है…', + 'autocomplete.runtime': 'रनटाइम', + 'autocomplete.running': 'चल रहा है', + 'autocomplete.start': 'शुरू करें', + 'autocomplete.stop': 'रोकें', + 'autocomplete.settingsSaved': 'ऑटोकम्पलीट सेटिंग्स सेव हो गईं।', + 'autocomplete.started': 'ऑटोकम्पलीट शुरू हो गया।', + 'autocomplete.didNotStart': 'ऑटोकम्पलीट शुरू नहीं हुआ। चेक करें कि यह चालू है।', + 'autocomplete.stopped': 'ऑटोकम्पलीट रुक गया।', + 'autocomplete.advancedSettings': 'एडवांस्ड सेटिंग्स', + 'autocomplete.debugTitle': 'ऑटोकम्पलीट डिबग', + 'chat.agentChat': 'एजेंट चैट', + 'chat.overrides': 'ओवरराइड्स', + 'chat.model': 'मॉडल', + 'chat.temperature': 'टेम्परेचर', + 'chat.conversation': 'बातचीत', + 'chat.startAgentConversation': 'एजेंट से बातचीत शुरू करें।', + 'chat.you': 'आप', + 'chat.agent': 'एजेंट', + 'chat.askAgent': 'एजेंट से कुछ भी पूछें...', + 'chat.sendMessage': 'मैसेज भेजें', + 'composio.triageTitle': 'इंटीग्रेशन ट्रिगर', + 'composio.triageDesc': + 'एक्टिव होने पर, हर आने वाला Composio ट्रिगर AI triage स्टेप से गुज़रता है जो इवेंट क्लासीफाई करता है और ऑटोमेटेड एक्शन शुरू कर सकता है — प्रति ट्रिगर एक लोकल LLM टर्न। मैन्युअल रिव्यू पसंद हो तो ग्लोबली या per-integration डिसेबल करें। अगर एनवायरनमेंट वेरिएबल', + 'composio.disableAllTriage': 'सभी ट्रिगर के लिए AI triage बंद करें', + 'composio.triggersStillRecorded': + 'ट्रिगर हिस्ट्री में रिकॉर्ड होते रहते हैं — कोई LLM टर्न नहीं चलता।', + 'composio.disableSpecificIntegrations': 'खास इंटीग्रेशन के लिए AI triage बंद करें', + 'composio.settingsSaved': 'सेटिंग्स सहेजी गईं', + 'composio.saveFailed': 'सेव नहीं हो पाया। दोबारा कोशिश करें।', + 'cron.title': 'क्रॉन जॉब्स', + 'cron.scheduledJobs': 'शेड्यूल्ड जॉब्स', + 'cron.manageCronJobs': 'कोर शेड्यूलर से cron jobs मैनेज करें।', + 'cron.refreshCronJobs': 'Cron Jobs रिफ्रेश करें', + 'localModel.modelStatus': 'मॉडल स्टेटस', + 'localModel.downloadModels': 'मॉडल डाउनलोड करें', + 'localModel.usage': 'उपयोग', + 'localModel.usageDesc': + 'चुनें कि कौन से सबसिस्टम लोकल मॉडल पर चलें। बंद होने पर क्लाउड इस्तेमाल होगा।', + 'localModel.enableRuntime': 'लोकल AI रनटाइम चालू करें', + 'localModel.enableRuntimeDesc': + 'मास्टर स्विच। डिफ़ॉल्ट रूप से बंद — Ollama आइडल रहता है। चालू होने पर tree summarizer, screen intelligence और autocomplete हमेशा लोकल मॉडल इस्तेमाल करते हैं।', + 'localModel.advancedSettings': 'एडवांस्ड सेटिंग्स', + 'localModel.debugTitle': 'लोकल मॉडल डिबग', + 'screenAwareness.debugTitle': 'स्क्रीन अवेयरनेस डिबग', + 'screenAwareness.debug.debugAndDiagnostics': 'डिबग और डायग्नोस्टिक्स', + 'screenAwareness.debug.collapse': 'पतन', + 'screenAwareness.debug.expand': 'विस्तार करें', + 'screenAwareness.debug.failedToSave': 'स्क्रीन इंटेलिजेंस सहेजने में विफल', + 'screenAwareness.debug.policyTitle': 'स्क्रीन इंटेलिजेंस नीति', + 'screenAwareness.debug.baselineFps': 'बेसलाइन एफपीएस', + 'screenAwareness.debug.useVisionModel': 'विज़न मॉडल का उपयोग करें', + 'screenAwareness.debug.useVisionModelDesc': + 'समृद्ध संदर्भ के लिए स्क्रीनशॉट को विज़न LLM को भेजें। बंद होने पर केवल OCR टेक्स्ट का उपयोग टेक्स्ट LLM के साथ किया जाता है — तेज़ और विज़न मॉडल की आवश्यकता नहीं।', + 'screenAwareness.debug.keepScreenshots': 'स्क्रीनशॉट रखें', + 'screenAwareness.debug.keepScreenshotsDesc': + 'प्रोसेसिंग के बाद हटाने की बजाय कैप्चर किए गए स्क्रीनशॉट वर्कस्पेस में सहेजें', + 'screenAwareness.debug.allowlist': 'अनुमति सूची (प्रति पंक्ति एक नियम)', + 'screenAwareness.debug.denylist': 'अस्वीकृत सूची (प्रति पंक्ति एक नियम)', + 'screenAwareness.debug.saveSettings': 'स्क्रीन इंटेलिजेंस सेटिंग्स सहेजें', + 'screenAwareness.debug.sessionStats': 'सत्र आँकड़े', + 'screenAwareness.debug.framesEphemeral': 'फ़्रेम (क्षणिक)', + 'screenAwareness.debug.panicStop': 'घबराना बंद करो', + 'screenAwareness.debug.defaultPanicHotkey': 'सीएमडी+शिफ्ट+.', + 'screenAwareness.debug.vision': 'दृष्टि', + 'screenAwareness.debug.idle': 'निष्क्रिय', + 'screenAwareness.debug.visionQueue': 'दृष्टि कतार', + 'screenAwareness.debug.lastVision': 'अंतिम दर्शन', + 'screenAwareness.debug.notAvailable': 'एन/ए', + 'screenAwareness.debug.visionSummaries': 'दृष्टि सारांश', + 'screenAwareness.debug.refreshing': 'ताज़ा...', + 'screenAwareness.debug.noSummaries': 'अभी तक कोई सारांश नहीं.', + 'screenAwareness.debug.unknownApp': 'अज्ञात ऐप', + 'screenAwareness.debug.macosOnly': 'स्क्रीन इंटेलिजेंस V1 वर्तमान में केवल macOS पर समर्थित है।', + 'memory.debugTitle': 'मेमोरी डिबग', + 'memory.documents': 'दस्तावेज़', + 'memory.filterByNamespace': 'नामस्थान के अनुसार फ़िल्टर करें...', + 'memory.refresh': 'ताज़ा करें', + 'memory.noDocumentsFound': 'कोई दस्तावेज़ नहीं मिला.', + 'memory.delete': 'हटाएँ', + 'memory.rawResponse': 'कच्ची प्रतिक्रिया', + 'memory.namespaces': 'नामस्थान', + 'memory.noNamespacesFound': 'कोई नामस्थान नहीं मिला.', + 'memory.queryRecall': 'प्रश्न और स्मरण', + 'memory.namespace': 'नामस्थान', + 'memory.queryText': 'क्वेरी पाठ...', + 'memory.defaultMaxChunks': '10', + 'memory.maxChunks': 'अधिकतम टुकड़े', + 'memory.query': 'प्रश्न', + 'memory.recall': 'स्मरण करो', + 'memory.queryLabel': 'प्रश्न', + 'memory.recallLabel': 'स्मरण करो', + 'memory.queryResult': 'क्वेरी परिणाम', + 'memory.recallResult': 'परिणाम याद करें', + 'memory.clearNamespace': 'नामस्थान साफ़ करें', + 'memory.clearNamespaceDescription': 'किसी नेमस्पेस के सभी दस्तावेज़ स्थायी रूप से हटाएं।', + 'memory.selectNamespace': 'नामस्थान चुनें...', + 'memory.exampleNamespace': 'जैसे कौशल:gmail:user@example.com', + 'memory.clear': 'स्पष्ट', + 'memory.deleteConfirm': 'नामस्थान "{namespace}" में दस्तावेज़ "{documentId}" हटाएं?', + 'memory.clearNamespaceConfirm': + 'यह "{namespace}" नेमस्पेस के सभी दस्तावेज़ स्थायी रूप से हटा देगा। जारी रखें?', + 'memory.clearNamespaceSuccess': 'नेमस्पेस "{namespace}" साफ़ किया गया।', + 'memory.clearNamespaceEmpty': '"{namespace}" में साफ़ करने के लिए कुछ भी नहीं है।', + 'webhooks.debugTitle': 'Webhooks डिबग', + 'webhooks.failedToLoadDebugData': 'वेबहुक डिबग डेटा लोड करने में विफल', + 'webhooks.clearLogsConfirm': 'सभी कैप्चर किए गए वेबहुक डीबग लॉग साफ़ करें?', + 'webhooks.failedToClearLogs': 'वेबहुक लॉग साफ़ करने में विफल', + 'webhooks.loading': 'लोड हो रहा है...', + 'webhooks.refresh': 'ताज़ा करें', + 'webhooks.clearing': 'समाशोधन...', + 'webhooks.clearLogs': 'लॉग साफ़ करें', + 'webhooks.registered': 'पंजीकृत', + 'webhooks.captured': 'कब्जा कर लिया', + 'webhooks.live': 'जीना', + 'webhooks.disconnected': 'विच्छेदित', + 'webhooks.lastEvent': 'आखिरी घटना', + 'webhooks.at': 'पर', + 'webhooks.registeredWebhooks': 'पंजीकृत वेबहुक', + 'webhooks.noActiveRegistrations': 'कोई सक्रिय पंजीकरण नहीं.', + 'webhooks.resolvingBackendUrl': 'बैकएंड का समाधान URL…', + 'webhooks.capturedRequests': 'कैप्चर किए गए अनुरोध', + 'webhooks.noRequestsCaptured': 'अभी तक कोई वेबहुक अनुरोध कैप्चर नहीं किया गया।', + 'webhooks.unrouted': 'अनियंत्रित', + 'webhooks.pending': 'लंबित', + 'webhooks.requestHeaders': 'शीर्षलेखों का अनुरोध करें', + 'webhooks.queryParams': 'क्वेरी पैरामीटर', + 'webhooks.requestBody': 'अनुरोध निकाय', + 'webhooks.responseHeaders': 'प्रतिक्रिया शीर्षलेख', + 'webhooks.responseBody': 'प्रतिक्रिया निकाय', + 'webhooks.rawPayload': 'कच्चा पेलोड', + 'webhooks.empty': '[खाली]', + 'providerSetup.error.defaultDetails': 'प्रदाता सेटअप विफल रहा.', + 'providerSetup.error.providerFallback': 'प्रदाता', + 'providerSetup.error.credentialsRejected': + '{provider} ने क्रेडेंशियल अस्वीकार कर दिए। API कुंजी जांचें और पुनः प्रयास करें।', + 'providerSetup.error.endpointNotRecognized': + '{provider} ने एंडपॉइंट नहीं पहचाना। बेस URL जांचें और पुनः प्रयास करें।', + 'providerSetup.error.providerUnavailable': + '{provider} अभी उपलब्ध नहीं है। पुनः प्रयास करें या प्रोवाइडर स्थिति जांचें।', + 'providerSetup.error.unreachable': + '{provider} से संपर्क नहीं हो सका। एंडपॉइंट URL और नेटवर्क कनेक्शन जांचें, फिर पुनः प्रयास करें।', + 'providerSetup.error.couldNotReachWithMessage': '{provider} तक नहीं पहुंच सका: {message}', + 'providerSetup.error.technicalDetails': 'तकनीकी विवरण', + 'notifications.routingTitle': 'नोटिफिकेशन रूटिंग', + 'notifications.routing.pipelineStats': 'पाइपलाइन आँकड़े', + 'notifications.routing.total': 'कुल', + 'notifications.routing.unread': 'अपठित', + 'notifications.routing.unscored': 'अंकरहित', + 'notifications.routing.intelligenceTitle': 'अधिसूचना खुफिया', + 'notifications.routing.intelligenceDesc': + 'आपके कनेक्टेड अकाउंट्स की हर सूचना को स्थानीय AI मॉडल द्वारा स्कोर किया जाता है। उच्च-महत्व की सूचनाएं स्वतः आपके ऑर्केस्ट्रेटर एजेंट को भेज दी जाती हैं ताकि कोई महत्वपूर्ण बात छूट न जाए।', + 'notifications.routing.howItWorks': 'यह कैसे काम करता है', + 'notifications.routing.level.drop': 'गिराओ', + 'notifications.routing.level.dropDesc': 'शोर / स्पैम - संग्रहीत लेकिन सामने नहीं आया', + 'notifications.routing.level.acknowledge': 'स्वीकार करें', + 'notifications.routing.level.acknowledgeDesc': + 'निम्न-प्राथमिकता — नोटिफिकेशन सेंटर में दिखाया गया', + 'notifications.routing.level.react': 'प्रतिक्रिया', + 'notifications.routing.level.reactDesc': + 'मध्यम-प्राथमिकता — केंद्रित एजेंट प्रतिक्रिया ट्रिगर करता है', + 'notifications.routing.level.escalate': 'आगे बढ़ें', + 'notifications.routing.level.escalateDesc': + 'उच्च-प्राथमिकता — ऑर्केस्ट्रेटर एजेंट को अग्रेषित किया गया', + 'notifications.routing.perProvider': 'प्रति-प्रदाता रूटिंग', + 'notifications.routing.threshold': 'देहली', + 'notifications.routing.routeToOrchestrator': 'ऑर्केस्ट्रेटर के लिए मार्ग', + 'notifications.routing.loadSettingsError': + 'सेटिंग्स लोड करने में विफल। पुनः प्रयास करने के लिए यह पैनल फिर से खोलें।', + 'common.reload': 'रिलोड करें', + 'common.skip': 'स्किप करें', + 'common.disable': 'बंद करें', + 'common.enable': 'चालू करें', + 'chat.safetyTimeout': + '2 मिनट बाद भी एजेंट से कोई जवाब नहीं मिला। दोबारा कोशिश करें या अपना कनेक्शन चेक करें।', + 'chat.filter.all': 'सभी', + 'chat.filter.work': 'वर्क', + 'chat.filter.briefing': 'ब्रीफिंग', + 'chat.filter.notification': 'नोटिफिकेशन', + 'chat.filter.workers': 'वर्कर्स', + 'chat.selectThread': 'एक थ्रेड चुनें', + 'chat.threads': 'थ्रेड्स', + 'chat.noThreads': 'अभी कोई थ्रेड नहीं', + 'chat.noLabelThreads': 'कोई "{label}" थ्रेड नहीं', + 'chat.noWorkerThreads': 'अभी कोई वर्कर थ्रेड नहीं', + 'chat.deleteThread': 'थ्रेड डिलीट करें', + 'chat.deleteThreadConfirm': 'क्या आप वाकई "{title}" डिलीट करना चाहते हैं?', + 'chat.untitledThread': 'बिना शीर्षक की थ्रेड', + 'chat.editThreadTitle': 'थ्रेड शीर्षक संपादित करें', + 'chat.hideSidebar': 'साइडबार छुपाएं', + 'chat.showSidebar': 'साइडबार दिखाएं', + 'chat.newThreadShortcut': 'नई थ्रेड (/new)', + 'chat.new': 'नई', + 'chat.failedToLoadMessages': 'मैसेज लोड नहीं हो पाए', + 'chat.thinkingIteration': 'सोच रहा है... ({n})', + 'chat.thinkingDots': 'सोच रहा है...', + 'chat.approachingLimit': 'उपयोग सीमा के करीब', + 'chat.approachingLimitMsg': 'आपने अपने उपलब्ध कोटे का {pct}% इस्तेमाल कर लिया है।', + 'chat.upgrade': 'अपग्रेड करें', + 'chat.weeklyLimitHit': 'आपकी साप्ताहिक सीमा पूरी हो गई।', + 'chat.resets': 'रीसेट होता है', + 'chat.topUpToContinue': 'जारी रखने के लिए टॉप अप करें।', + 'chat.budgetComplete': 'आपका बजट पूरा हो गया। जारी रखने के लिए क्रेडिट जोड़ें या अपग्रेड करें।', + 'chat.topUp': 'टॉप अप करें', + 'chat.cycle': 'चक्र', + 'chat.cycleSpent': 'इस चक्र में खर्च', + 'chat.cycleRemaining': 'शेष', + 'chat.left': 'बचा हुआ', + 'chat.setup': 'सेट अप करें', + 'chat.switchToText': 'टेक्स्ट पर स्विच करें', + 'chat.transcribing': 'ट्रांसक्राइब हो रहा है...', + 'chat.stopAndSend': 'रोकें और भेजें', + 'chat.startTalking': 'बोलना शुरू करें', + 'chat.playingVoiceReply': 'वॉइस रिप्लाई चल रहा है', + 'chat.voiceHint': 'बोलने के लिए माइक इस्तेमाल करें', + 'chat.micUnavailable': 'माइक्रोफोन उपलब्ध नहीं', + 'chat.turn': 'टर्न', + 'chat.turns': 'टर्न्स', + 'chat.openWorkerThread': 'वर्कर थ्रेड खोलें', + 'chat.attachment.attach': 'छवि संलग्न करें', + 'chat.attachment.remove': '{name} हटाएं', + 'chat.attachment.tooMany': 'प्रति संदेश अधिकतम {max} छवियां', + 'chat.attachment.tooLarge': 'छवि {max} आकार सीमा से अधिक है', + 'chat.attachment.unsupportedType': + 'असमर्थित फ़ाइल प्रकार। PNG, JPEG, WebP, GIF, या BMP का उपयोग करें।', + 'chat.attachment.readFailed': 'फ़ाइल पढ़ नहीं सकी', + 'memory.searchAria': 'मेमोरी सर्च करें', + 'memory.searchPlaceholder': 'मेमोरी एंट्रीज़ सर्च करें...', + 'memory.sourceFilter.all': 'सभी सोर्स', + 'memory.sourceFilter.email': 'ईमेल', + 'memory.sourceFilter.calendar': 'कैलेंडर', + 'memory.sourceFilter.telegram': 'Telegram', + 'memory.sourceFilter.aiInsight': 'AI इनसाइट', + 'memory.sourceFilter.system': 'सिस्टम', + 'memory.sourceFilter.trading': 'ट्रेडिंग', + 'memory.sourceFilter.security': 'सिक्योरिटी', + 'memory.ingestionActivity': 'इन्जेशन एक्टिविटी', + 'memory.events': 'इवेंट्स', + 'memory.event': 'इवेंट', + 'memory.overTheLast': 'पिछले', + 'memory.months': 'महीने', + 'memory.peak': 'पीक', + 'memory.perDay': '/दिन', + 'memory.less': 'कम', + 'memory.more': 'ज़्यादा', + 'memory.on': 'पर', + 'memory.loading': 'मेमोरी लोड हो रही है', + 'memory.fetching': 'आपकी मेमोरी एंट्रीज़ फेच हो रही हैं...', + 'memory.analyzing': 'मेमोरी एनालाइज़ हो रही है', + 'memory.analyzingHint': 'इनसाइट निकालने के लिए मेमोरी प्रोसेस हो रही है...', + 'memory.noMatches': 'कोई मिलान नहीं मिला', + 'memory.noMatchesHint': 'सर्च टर्म या फिल्टर बदलकर देखें।', + 'memory.allCaughtUp': 'सब अप-टू-डेट है', + 'memory.allCaughtUpHint': 'कोई नई मेमोरी एंट्री प्रोसेस करने के लिए नहीं।', + 'memory.noAnalysis': 'अभी कोई एनालिसिस नहीं', + 'memory.noAnalysisHint': 'अपनी मेमोरी में पैटर्न देखने के लिए एनालिसिस चलाएं।', + 'memory.emptyHint': 'अपनी पहली मेमोरी बनाने के लिए बातचीत शुरू करें।', + 'mic.unavailable': 'माइक्रोफोन उपलब्ध नहीं है', + 'mic.permissionDenied': 'माइक्रोफोन की अनुमति नहीं मिली', + 'mic.failedToStartRecorder': 'रिकॉर्डर शुरू नहीं हो पाया', + 'mic.transcribing': 'ट्रांसक्राइब हो रहा है...', + 'mic.tapToSend': 'भेजने के लिए टैप करें', + 'mic.waitingForAgent': 'एजेंट का इंतज़ार है...', + 'mic.tapAndSpeak': 'टैप करें और बोलें', + 'mic.stopRecording': 'रिकॉर्डिंग रोकें और भेजें', + 'mic.startRecording': 'रिकॉर्डिंग शुरू करें', + 'mic.deviceSelector': 'माइक्रोफोन डिवाइस', + 'mic.tapToSendCountdown': 'भेजने के लिए टैप करें ({seconds}स)', + 'token.usageLimitReached': 'उपयोग सीमा पहुँच गई', + 'token.approachingLimit': 'सीमा के करीब', + 'token.planClickForDetails': 'प्लान - डिटेल्स के लिए क्लिक करें', + 'token.sessionTokens': 'इन: {in} | आउट: {out} | टर्न: {turns}', + 'token.limit': 'सीमा पहुँच गई', + 'catalog.noCapabilityBinding': 'कोई कैपेबिलिटी बाइंडिंग नहीं', + 'catalog.downloadFailed': 'डाउनलोड विफल', + 'catalog.active': 'एक्टिव', + 'catalog.installed': 'इन्स्टॉल्ड', + 'catalog.notDownloaded': 'डाउनलोड नहीं हुआ', + 'catalog.inUse': 'इस्तेमाल हो रहा है', + 'catalog.use': 'इस्तेमाल करें', + 'catalog.deleteModel': 'मॉडल डिलीट करें', + 'catalog.download': 'डाउनलोड करें', + 'navigator.recent': 'हाल का', + 'navigator.today': 'आज', + 'navigator.thisWeek': 'इस हफ्ते', + 'navigator.sources': 'सोर्स', + 'navigator.email': 'ईमेल', + 'navigator.slack': 'Slack', + 'navigator.chat': 'चैट', + 'navigator.documents': 'दस्तावेज़', + 'navigator.people': 'लोग', + 'navigator.topics': 'विषय', + 'dreams.description': + 'ड्रीम्स AI-जेनरेटेड रिफ्लेक्शन हैं जो आपकी मेमोरी के पैटर्न को सिंथेसाइज़ करते हैं।', + 'dreams.comingSoon': 'जल्द आ रहा है', + 'assignment.memoryLlm': 'मेमोरी LLM', + 'assignment.memoryLlmAria': 'मेमोरी LLM सिलेक्शन', + 'assignment.embedder': 'एम्बेडर', + 'assignment.loaded': 'लोड हुआ', + 'assignment.notDownloaded': 'डाउनलोड नहीं हुआ', + 'assignment.usedForExtractSummarise': 'एक्सट्रैक्शन और समरीज़ेशन के लिए इस्तेमाल', + 'insights.knownFacts': 'जानी-मानी बातें', + 'insights.preferences': 'पसंद', + 'insights.relationships': 'रिश्ते', + 'insights.skills': 'स्किल्स', + 'insights.opinions': 'राय', + 'insights.other': 'अन्य', + 'insights.title': 'इनसाइट्स', + 'insights.empty': 'अभी कोई इनसाइट नहीं। मेमोरी बढ़ने पर इनसाइट्स बनती हैं।', + 'insights.description': 'आपके मेमोरी ग्राफ में {count} रिलेशन के आधार पर।', + 'insights.items': 'आइटम्स', + 'insights.more': 'और', + 'calls.joiningCall': 'कॉल जॉइन हो रही है', + 'calls.meetWindowOpening': 'Meet विंडो खुल रही है...', + 'calls.failedToStart': 'Meet कॉल शुरू नहीं हो पाई', + 'calls.couldNotStart': 'कॉल शुरू नहीं हो पाई', + 'calls.failedToClose': 'कॉल बंद नहीं हो पाई', + 'calls.couldNotClose': 'कॉल बंद नहीं हो पाई', + 'calls.joinMeet': 'Google Meet कॉल जॉइन करें', + 'calls.joinMeetDescription': 'जॉइन करने के लिए Google Meet लिंक डालें।', + 'calls.meetLink': 'Meet लिंक', + 'calls.displayName': 'डिस्प्ले नाम', + 'calls.openingMeet': 'Meet खुल रहा है...', + 'calls.joinCall': 'कॉल जॉइन करें', + 'calls.activeCalls': 'एक्टिव कॉल्स', + 'calls.leave': 'छोड़ें', + 'workspace.wipeConfirm': 'क्या आप वाकई सारी मेमोरी मिटाना चाहते हैं? यह वापस नहीं होगा।', + 'workspace.resetTreeConfirm': 'क्या आप वाकई मेमोरी ट्री रीबिल्ड करना चाहते हैं?', + 'workspace.wipeTitle': 'मेमोरी मिटाएं', + 'workspace.resetting': 'रीसेट हो रहा है...', + 'workspace.resetMemory': 'मेमोरी रीसेट करें', + 'workspace.resetTreeTitle': 'मेमोरी ट्री रीबिल्ड करें', + 'workspace.rebuilding': 'रीबिल्ड हो रहा है...', + 'workspace.resetMemoryTree': 'मेमोरी ट्री रीसेट करें', + 'workspace.building': 'बन रहा है...', + 'workspace.buildSummaryTrees': 'समरी ट्री बनाएं', + 'workspace.viewVault': 'वॉल्ट देखें', + 'workspace.openingVaultTitle': 'ओब्सीडियन में तिजोरी खोलना', + 'workspace.openingVaultMessage': + 'यदि Obsidian नहीं खुलता, तो obsidian.md से इंस्टॉल करें या Reveal Folder उपयोग करें। वॉल्ट पथ:', + 'workspace.openVaultFailedTitle': 'Obsidian में वॉल्ट नहीं खुल सका', + 'workspace.openVaultFailedMessage': + 'वॉल्ट निर्देशिका को सीधे खोलने के लिए रिवील फोल्डर का उपयोग करें। तिजोरी पथ:', + 'workspace.revealVaultFailed': 'वॉल्ट फ़ोल्डर नहीं दिखाया जा सका', + 'workspace.revealFolder': 'फ़ोल्डर प्रकट करें', + 'workspace.checkingVault': 'जाँच हो रही है…', + 'workspace.vaultNotRegisteredHelp': + 'Obsidian केवल वे फ़ोल्डर खोलता है जो आपने वॉल्ट के रूप में जोड़े हैं। Obsidian में "Open folder as vault" चुनें और नीचे दिया फ़ोल्डर चुनें — यह एक बार करना है। फिर View Vault पर क्लिक करें।', + 'workspace.obsidianNotFoundHelp': + 'इस डिवाइस पर Obsidian नहीं मिला। इसे इंस्टॉल करें, या — यदि यह किसी गैर-मानक स्थान पर इंस्टॉल है — Advanced में इसका कॉन्फ़िग फ़ोल्डर सेट करें।', + 'workspace.openAnyway': 'फिर भी Obsidian में खोलें', + 'workspace.installObsidian': 'Obsidian इंस्टॉल करें', + 'workspace.obsidianAdvanced': 'Obsidian किसी और जगह इंस्टॉल है?', + 'workspace.obsidianConfigDirLabel': 'Obsidian कॉन्फ़िग फ़ोल्डर', + 'workspace.obsidianConfigDirHint': + 'obsidian.json वाले फ़ोल्डर का पथ (जैसे ~/.config/obsidian)। ऑटो-डिटेक्ट के लिए खाली छोड़ें।', + 'workspace.obsidianConfigDirPlaceholder': '~/.config/obsidian', + 'workspace.graphLoadFailed': 'मेमोरी ग्राफ लोड नहीं हो पाया', + 'workspace.loadingGraph': 'मेमोरी ग्राफ लोड हो रहा है...', + 'workspace.graphViewMode': 'मेमोरी ग्राफ व्यू मोड', + 'workspace.trees': 'ट्रीज़', + 'workspace.contacts': 'कॉन्टैक्ट्स', + 'graph.noContactMentions': 'कोई कॉन्टैक्ट मेंशन नहीं', + 'graph.noMemory': 'कोई मेमोरी नहीं', + 'graph.source': 'सोर्स', + 'graph.topic': 'विषय', + 'graph.global': 'ग्लोबल', + 'graph.document': 'दस्तावेज़', + 'graph.contact': 'कॉन्टैक्ट', + 'graph.nodes': 'नोड्स', + 'graph.parentChild': 'पेरेंट-चाइल्ड', + 'graph.documentContact': 'दस्तावेज़-कॉन्टैक्ट', + 'graph.link': 'लिंक', + 'graph.links': 'लिंक्स', + 'graph.children': 'चाइल्ड', + 'graph.clickToOpenObsidian': 'Obsidian में खोलने के लिए क्लिक करें', + 'graph.person': 'व्यक्ति', + 'modal.dontShowAgain': 'ऐसे सुझाव फिर न दिखाएं', + 'reflections.loading': 'रिफ्लेक्शन लोड हो रहे हैं...', + 'reflections.empty': 'अभी कोई रिफ्लेक्शन नहीं', + 'reflections.title': 'रिफ्लेक्शन', + 'reflections.proposedAction': 'प्रस्तावित एक्शन', + 'reflections.act': 'करें', + 'reflections.dismiss': 'हटाएं', + 'whatsapp.chatsSynced': 'चैट्स सिंक हुईं', + 'whatsapp.chatSynced': 'चैट सिंक हुई', + 'sync.active': 'एक्टिव', + 'sync.recent': 'हाल का', + 'sync.idle': 'आइडल', + 'sync.memorySources': 'मेमोरी सोर्स', + 'sync.noConnectedSources': 'कोई कनेक्टेड सोर्स नहीं', + 'sync.chunks': 'चंक्स', + 'sync.lastChunk': 'आखिरी चंक:', + 'sync.pending': 'पेंडिंग', + 'sync.processed': 'प्रोसेस्ड', + 'sync.syncing': 'सिंक हो रहा है…', + 'sync.sync': 'सिंक करें', + 'sync.failedToLoad': 'सिंक स्टेटस लोड नहीं हो पाई', + 'sync.noContent': + 'अभी कोई कॉन्टेंट मेमोरी में सिंक नहीं हुआ। शुरू करने के लिए कोई इंटीग्रेशन कनेक्ट करें।', + 'memorySources.title': 'मेमोरी स्रोत', + 'memorySources.empty': + 'अभी तक कोई स्मृति स्रोत नहीं है। एक को खिला मेमोरी शुरू करने के लिए जोड़ें।', + 'memorySources.customSources': 'कस्टम स्रोत', + 'memorySources.addSource': 'स्रोत जोड़ें', + 'memorySources.noCustomSources': + 'अभी तक कोई कस्टम स्रोत नहीं है। एक फ़ोल्डर जोड़ें, GitHub रेपो, RSS फीड, या वेब पेज शुरू करने के लिए।', + 'memorySources.loadingConnections': 'कनेक्शन लोड हो रहा है...', + 'memorySources.noConnections': 'कोई सक्रिय Composio कनेक्शन नहीं मिला। पहले एकीकरण कनेक्ट करें।', + 'memorySources.pickConnection': 'कनेक्शन चुनें', + 'memorySources.selectConnection': '- एक कनेक्शन चुनें -', + 'memorySources.composioListFailed': 'Composio कनेक्शन लोड करने में विफल रहा।', + 'memorySources.browse': 'ब्राउज़ करें', + 'memorySources.folderPathPlaceholder': '/Users/you/notes', + 'memorySources.globPatternPlaceholder': '**', + 'memorySources.repoUrlPlaceholder': 'https://github.com/org/repo', + 'memorySources.branchPlaceholder': 'main', + 'memorySources.feedUrlPlaceholder': 'https://example.com/feed.xml', + 'memorySources.pageUrlPlaceholder': 'https://example.com/article', + 'memorySources.cssSelectorPlaceholder': 'article', + 'memorySources.searchQueryPlaceholder': 'से:उपयोगकर्ता AI सुरक्षा', + 'memorySources.kind.composio': 'एकीकरण', + 'memorySources.kind.folder': 'स्थानीय फ़ोल्डर', + 'memorySources.kind.github_repo': 'GitHub रेपो', + 'memorySources.kind.twitter_query': 'Twitter खोज', + 'memorySources.kind.rss_feed': 'RSS फ़ीड', + 'memorySources.kind.web_page': 'वेब पेज', + 'memorySources.sync.successTitle': 'सिंक करना', + 'memorySources.sync.successMessage': 'प्रगति शीघ्र ही दिखाई देगी।', + 'memorySources.sync.failedTitle': 'सिंक विफल:', + 'time.justNow': 'अभी', + 'time.secondsAgoSuffix': 'सेकंड पहले', + 'time.minutesAgoSuffix': 'मिनट पहले', + 'time.hoursAgoSuffix': 'घंटे पहले', + 'time.daysAgoSuffix': 'दिन पहले', + 'memorySources.pickKind': 'आप किस तरह के स्रोत को जोड़ना चाहते हैं?', + 'memorySources.backToKinds': 'स्रोत प्रकार वापस', + 'memorySources.label': 'लेबल', + 'memorySources.labelPlaceholder': 'मेरा शोध नोट', + 'memorySources.add': 'जोड़ें', + 'memorySources.adding': 'जोड़ना...', + 'memorySources.added': 'स्रोत जोड़ा', + 'memorySources.removed': 'स्रोत हटाया', + 'memorySources.remove': 'निकालें', + 'memorySources.enable': 'सक्षम', + 'memorySources.disable': 'अक्षम', + 'memorySources.toggleFailed': 'Toggle विफल', + 'memorySources.removeFailed': 'असफल', + 'memorySources.folderPath': 'फ़ोल्डर पथ', + 'memorySources.globPattern': 'ग्लोब पैटर्न', + 'memorySources.repoUrl': 'रिपॉजिटरी URL', + 'memorySources.branch': 'शाखा', + 'memorySources.feedUrl': 'URL', + 'memorySources.pageUrl': 'पृष्ठ URL', + 'memorySources.cssSelector': 'CSS चयनकर्ता (वैकल्पिक)', + 'memorySources.searchQuery': 'खोज क्वेरी', + 'backend.aiBackend': 'AI बैकएंड', + 'backend.cloud': 'क्लाउड', + 'backend.recommended': 'सुझावित', + 'backend.cloudDescription': 'हमारे सर्वर पर तेज़ और पावरफुल मॉडल। तुरंत इस्तेमाल के लिए तैयार।', + 'backend.privacyNote': 'कोई पर्सनल डेटा, मैसेज या keys हमारे सर्वर पर कभी नहीं जाते।', + 'backend.local': 'लोकल', + 'backend.advanced': 'एडवांस्ड', + 'backend.localDescription': + 'Ollama का इस्तेमाल करके अपनी मशीन पर मॉडल चलाएं। पूरी प्राइवेसी, सेटअप ज़रूरी।', + 'backend.ramRecommended': '16GB+ RAM सुझावित', + 'subconscious.tasks': 'टास्क', + 'subconscious.ticks': 'टिक्स', + 'subconscious.last': 'आखिरी', + 'subconscious.failed': 'विफल', + 'subconscious.tickInterval': 'टिक इंटरवल', + 'subconscious.runNow': 'अभी चलाएं', + 'subconscious.providerUnavailableTitle': 'Subconscious रुका हुआ है', + 'subconscious.providerSettings': 'AI सेटिंग्स', + 'subconscious.approvalNeeded': 'अनुमति चाहिए', + 'subconscious.requiresApproval': 'अनुमति ज़रूरी है', + 'subconscious.fixInConnections': 'Connections में ठीक करें', + 'subconscious.goAhead': 'आगे बढ़ें', + 'subconscious.activeTasks': 'एक्टिव टास्क', + 'subconscious.noActiveTasks': 'कोई एक्टिव टास्क नहीं', + 'subconscious.default': 'डिफ़ॉल्ट', + 'subconscious.addTaskPlaceholder': 'नया टास्क जोड़ें...', + 'subconscious.activityLog': 'एक्टिविटी लॉग', + 'subconscious.noActivity': 'अभी कोई एक्टिविटी नहीं', + 'subconscious.decision.nothingNew': 'कुछ नया नहीं', + 'subconscious.decision.completed': 'पूरा हुआ', + 'subconscious.decision.evaluating': 'एवैल्यूएट हो रहा है', + 'subconscious.decision.waitingApproval': 'अनुमति का इंतज़ार है', + 'subconscious.decision.failed': 'विफल', + 'subconscious.decision.cancelled': 'रद्द हुआ', + 'subconscious.decision.skipped': 'स्किप हुआ', + 'actionable.complete': 'पूरा करें', + 'actionable.dismiss': 'हटाएं', + 'actionable.snooze': 'स्नूज़ करें', + 'actionable.new': 'नया', + 'stats.storage': 'स्टोरेज', + 'stats.files': 'फाइल्स', + 'stats.documents': 'दस्तावेज़', + 'stats.today': 'आज', + 'stats.namespaces': 'नेमस्पेस', + 'stats.relations': 'रिलेशन', + 'stats.firstMemory': 'पहली मेमोरी', + 'stats.latest': 'सबसे नया', + 'stats.sessions': 'सेशन', + 'stats.tokens': 'टोकन', + 'bootCheck.invalidUrl': 'कृपया एक रनटाइम URL डालें।', + 'bootCheck.urlMustStartWith': 'URL को http:// या https:// से शुरू होना चाहिए', + 'bootCheck.validUrlRequired': 'यह सही URL नहीं लगता (कोशिश करें https://core.example.com/rpc)', + 'bootCheck.tokenRequired': 'कनेक्ट करने के लिए एक auth टोकन चाहिए।', + 'bootCheck.chooseCoreMode': 'रनटाइम चुनें', + 'bootCheck.connectToCore': 'अपने रनटाइम से कनेक्ट करें', + 'bootCheck.desktopDescription': + 'OpenHuman को सोचने के लिए एक रनटाइम चाहिए। चुनें कि यह कहाँ रहे।', + 'bootCheck.webDescription': + 'वेब पर, OpenHuman आपके कंट्रोल के रनटाइम से कनेक्ट होता है। नीचे URL और auth टोकन डालें, या अपनी मशीन पर चलाने के लिए डेस्कटॉप ऐप लें।', + 'bootCheck.preferDesktop': 'सब अपने डिवाइस पर रखना चाहते हैं?', + 'bootCheck.downloadDesktop': 'डेस्कटॉप ऐप पाएं', + 'bootCheck.localRecommended': 'लोकल रन करें (सुझावित)', + 'bootCheck.localDescription': + 'आपके कंप्यूटर पर ही चलता है। सबसे तेज़, पूरी तरह प्राइवेट, कुछ सेट नहीं करना।', + 'bootCheck.cloudMode': 'क्लाउड पर चलाएं (जटिल)', + 'bootCheck.cloudDescription': + 'कहीं और होस्ट किए रनटाइम से कनेक्ट करें। 24×7 ऑनलाइन रहता है, डिवाइस चलाते रहने की ज़रूरत नहीं।', + 'bootCheck.coreRpcUrl': 'रनटाइम URL', + 'bootCheck.rpcUrlPlaceholder': 'https://core.example.com/rpc', + 'bootCheck.authToken': 'Auth टोकन', + 'bootCheck.bearerTokenPlaceholder': 'आपके रिमोट रनटाइम का bearer टोकन', + 'bootCheck.storedLocally': 'केवल इस डिवाइस पर रखा जाता है। भेजा जाता है ', + 'bootCheck.testing': 'टेस्ट हो रहा है…', + 'bootCheck.testConnection': 'कनेक्शन टेस्ट करें', + 'bootCheck.connectedOk': 'कनेक्ट हो गया। आप तैयार हैं।', + 'bootCheck.authFailed': 'वह टोकन काम नहीं किया। दोबारा चेक करके कोशिश करें।', + 'bootCheck.unreachablePrefix': 'नहीं पहुँच पाए:', + 'bootCheck.checkingCore': 'आपका रनटाइम जगा रहे हैं…', + 'bootCheck.cannotReach': 'रनटाइम तक नहीं पहुँच पाए', + 'bootCheck.cannotReachDesc': + 'आपके रनटाइम से कनेक्ट नहीं हो पाया। कोई और रनटाइम ट्राई करना चाहते हैं?', + 'bootCheck.switchMode': 'कोई और रनटाइम चुनें', + 'bootCheck.quit': 'बंद करें', + 'bootCheck.legacyDetected': 'पुराना बैकग्राउंड रनटाइम मिला', + 'bootCheck.legacyDescription': + 'इस डिवाइस पर अलग से इन्स्टॉल किया OpenHuman daemon पहले से चल रहा है। बिल्ट-इन रनटाइम शुरू होने से पहले इसे हटाना होगा।', + 'bootCheck.removing': 'हटाया जा रहा है…', + 'bootCheck.removeContinue': 'हटाएं और जारी रखें', + 'bootCheck.localNeedsRestart': 'लोकल रनटाइम को रीस्टार्ट चाहिए', + 'bootCheck.localNeedsRestartDesc': + 'आपका लोकल रनटाइम इस ऐप से अलग वर्जन पर है। एक जल्दी रीस्टार्ट से दोनों सिंक हो जाएंगे।', + 'bootCheck.restarting': 'रीस्टार्ट हो रहा है…', + 'bootCheck.restartCore': 'रनटाइम रीस्टार्ट करें', + 'bootCheck.cloudNeedsUpdate': 'क्लाउड रनटाइम को अपडेट चाहिए', + 'bootCheck.cloudNeedsUpdateDesc': + 'आपका क्लाउड रनटाइम इस ऐप से अलग वर्जन पर है। अपडेटर चलाएं ताकि दोनों सिंक हो जाएं।', + 'bootCheck.updating': 'अपडेट हो रहा है…', + 'bootCheck.updateCloudCore': 'क्लाउड रनटाइम अपडेट करें', + 'bootCheck.versionCheckFailed': 'रनटाइम वर्जन चेक विफल', + 'bootCheck.versionCheckFailedDesc': + 'आपका रनटाइम चल रहा है लेकिन वर्जन रिपोर्ट नहीं कर रहा। शायद पुराना हो। जारी रखने के लिए रीस्टार्ट या अपडेट करें।', + 'bootCheck.working': 'काम हो रहा है…', + 'bootCheck.restartUpdateCore': 'रनटाइम रीस्टार्ट / अपडेट करें', + 'bootCheck.unexpectedError': 'अनपेक्षित बूट-चेक एरर', + 'bootCheck.actionFailed': 'कुछ गड़बड़ हो गई। दोबारा कोशिश करें।', + 'bootCheck.portConflictTitle': 'ऐप इंजन शुरू नहीं हो सका', + 'bootCheck.portConflictBody': + 'कोई अन्य प्रक्रिया उस नेटवर्क पोर्ट का उपयोग कर रही है जो OpenHuman को चाहिए। हम इसे स्वचालित रूप से ठीक करने का प्रयास करेंगे।', + 'bootCheck.portConflictFixButton': 'स्वचालित रूप से ठीक करें', + 'bootCheck.portConflictFixing': 'ठीक हो रहा है…', + 'bootCheck.portConflictFixFailed': + 'स्वचालित सुधार काम नहीं आया। कृपया अपना कंप्यूटर पुनः आरंभ करें और पुनः प्रयास करें।', + 'notifications.justNow': 'अभी-अभी', + 'notifications.minAgo': '{n}मि. पहले', + 'notifications.hrAgo': '{n}घं. पहले', + 'notifications.dayAgo': '{n}दि. पहले', + 'notifications.category.messages': 'मैसेज', + 'notifications.category.agents': 'एजेंट', + 'notifications.category.skills': 'स्किल्स', + 'notifications.category.system': 'सिस्टम', + 'notifications.category.meetings': 'मीटिंग', + 'notifications.category.reminders': 'रिमाइंडर', + 'notifications.category.important': 'महत्वपूर्ण', + 'about.update.status.checking': 'चेक हो रहा है...', + 'about.update.status.available': 'v{version} उपलब्ध है', + 'about.update.status.availableNoVersion': 'अपडेट उपलब्ध है', + 'about.update.status.downloading': 'डाउनलोड हो रहा है...', + 'about.update.status.readyToInstall': 'v{version} इन्स्टॉल के लिए तैयार', + 'about.update.status.readyToInstallNoVersion': + 'नया वर्जन डाउनलोड हो गया और तैयार है। लागू करने के लिए रीस्टार्ट करें।', + 'about.update.status.installing': 'इन्स्टॉल हो रहा है...', + 'about.update.status.restarting': 'रीस्टार्ट हो रहा है...', + 'about.update.status.upToDate': 'आप लेटेस्ट वर्जन चला रहे हैं।', + 'about.update.status.error': 'अपडेट चेक विफल', + 'about.update.status.default': 'अपडेट चेक करें', + 'welcome.connectionFailed': 'कनेक्शन विफल: {status} {statusText}', + 'welcome.connectionFailedMsg': 'कनेक्शन विफल: {message}', + 'welcome.continueLocally': 'स्थानीय स्तर पर जारी रखें', 'welcome.continueLocallyExperimental': 'लोकल रूप से जारी रखें (प्रायोगिक)', + 'welcome.localSessionStarting': 'स्थानीय सत्र प्रारंभ हो रहा है...', + 'welcome.localSessionDesc': + 'ऑफ़लाइन स्थानीय प्रोफ़ाइल का उपयोग करता है और TinyHumans OAuth को छोड़ देता है।', + 'chat.agentChatDesc': 'एजेंट के साथ डायरेक्ट चैट सेशन खोलें।', + 'chat.modelPlaceholder': 'gpt-4o', + 'channels.activeRouteValue': '{channel} द्वारा {authMode}', + 'privacy.dataKind.messages': 'मैसेज', + 'privacy.dataKind.agents': 'एजेंट', + 'privacy.dataKind.skills': 'स्किल्स', + 'privacy.dataKind.system': 'सिस्टम', + 'privacy.dataKind.meetings': 'मीटिंग', + 'privacy.dataKind.reminders': 'रिमाइंडर', + 'privacy.dataKind.important': 'महत्वपूर्ण', + 'onboarding.enableLocalAI': 'लोकल AI चालू करें', + 'onboarding.skills.status.available': 'उपलब्ध', + 'onboarding.skills.status.connected': 'कनेक्टेड', + 'onboarding.skills.status.connecting': 'कनेक्ट हो रहा है', + 'onboarding.skills.status.error': 'एरर', + 'onboarding.skills.status.unavailable': 'उपलब्ध नहीं', + 'composio.statusUnavailable': 'स्टेटस उपलब्ध नहीं', + 'composio.authExpired': 'प्रमाणीकरण समाप्त', + 'composio.reconnect': 'पुनः कनेक्ट करें', + 'composio.expiredAuthorization': '{name} प्राधिकरण समाप्त हो गया', + 'composio.expiredDescription': + '{name} टूल को पुनः सक्षम करने के लिए पुनः कनेक्ट करें। OpenHuman इस एकीकरण को तब तक अनुपलब्ध रखेगा जब तक आप OAuth पहुंच को ताज़ा नहीं करते।', + 'composio.envVarOverrides': 'सेट है तो यह सेटिंग ओवरराइड होती है।', + 'composio.previewBadge': 'पूर्वावलोकन', + 'composio.previewTooltip': + 'एजेंट एकीकरण जल्द ही आ रहा है - आप कनेक्ट कर सकते हैं, लेकिन एजेंट अभी तक इस टूलकिट का उपयोग नहीं कर सकता है।', + 'memory.day.sun': 'रवि', + 'memory.day.mon': 'सोम', + 'memory.day.tue': 'मंगल', + 'memory.day.wed': 'बुध', + 'memory.day.thu': 'गुरु', + 'memory.day.fri': 'शुक्र', + 'memory.day.sat': 'शनि', + 'memory.ingesting': 'इन्जेस्ट हो रहा है', + 'memory.ingestionQueued': 'क्यू में है', + 'memory.ingestingTitle': '{title} इन्जेस्ट हो रहा है', + 'mic.noAudioCaptured': 'कोई ऑडियो कैप्चर नहीं हुआ', + 'mic.noSpeechDetected': 'कोई बोलना नहीं मिला', + 'mic.lowConfidenceResult': 'ऑडियो स्पष्ट रूप से समझ नहीं आया — कृपया पुनः प्रयास करें', + 'mic.failedToStopRecording': 'रिकॉर्डिंग रोकने में दिक्कत: {message}', + 'mic.transcriptionFailed': 'ट्रांसक्रिप्शन विफल: {message}', + 'reflections.kind.retrospective': 'रेट्रोस्पेक्टिव', + 'reflections.kind.derivedFact': 'डिराइव्ड फैक्ट', + 'reflections.kind.moodInsight': 'मूड इनसाइट', + 'reflections.kind.relationshipInsight': 'रिलेशनशिप इनसाइट', + 'graph.tooltip.summary': 'सारांश', + 'graph.tooltip.contact': 'कॉन्टैक्ट', + 'localModel.usage.never': 'कभी नहीं', + 'localModel.usage.mediumLoad': 'मीडियम लोड', + 'localModel.usage.lowLoad': 'लो लोड', + 'localModel.usage.idleMode': 'आइडल मोड', + 'localModel.rebootstrapComplete': 'मॉडल री-बूटस्ट्रैप पूरा हुआ।', + 'localModel.modelsVerified': 'लोकल मॉडल वेरिफाई हो गए।', + 'accounts.addModal.allConnected': 'सब कनेक्टेड', + 'accounts.addModal.title': 'अकाउंट जोड़ें', + 'accounts.respondQueue.empty': 'खाली है', + 'accounts.respondQueue.hide': 'उत्तर कतार छिपाएँ', + 'accounts.respondQueue.loadFailed': 'रिस्पॉन्ड क्यू लोड नहीं हो पाई', + 'accounts.respondQueue.loading': 'क्यू लोड हो रही है…', + 'accounts.respondQueue.pending': 'पेंडिंग', + 'accounts.respondQueue.show': 'उत्तर कतार दिखाएँ', + 'accounts.respondQueue.title': 'रिस्पॉन्ड क्यू', + 'accounts.webviewHost.almostReady': 'लगभग तैयार है...', + 'accounts.webviewHost.loadTimeout': 'Webview लोड टाइमआउट', + 'accounts.webviewHost.loading': '{providerName} लोड हो रहा है...', + 'accounts.webviewHost.loadingAccount': 'अकाउंट लोड हो रहा है', + 'accounts.webviewHost.restoringSession': 'सेशन रिस्टोर हो रहा है...', + 'accounts.webviewHost.retryLoading': 'दोबारा लोड करें', + 'accounts.webviewHost.takingLonger': '{providerName} उम्मीद से ज़्यादा समय ले रहा है।', + 'accounts.webviewHost.timeoutHint': 'टाइमआउट हिंट', + 'app.connectionBadge.composio': 'Composio', + 'app.connectionBadge.messaging': 'मैसेजिंग', + 'app.connectionIndicator.connected': 'OpenHuman AI से कनेक्टेड 🚀', + 'app.connectionIndicator.connecting': 'कनेक्ट हो रहा है', + 'app.connectionIndicator.coreOffline': 'कोर ऑफलाइन', + 'app.connectionIndicator.disconnected': 'डिसकनेक्टेड', + 'app.connectionIndicator.offline': 'ऑफलाइन', + 'app.connectionIndicator.reconnecting': 'पुनः कनेक्ट हो रहा है…', + 'app.errorFallback.componentStack': 'कम्पोनेंट स्टैक', + 'app.errorFallback.downloadLatest': 'लेटेस्ट डाउनलोड करें', + 'app.errorFallback.heading': 'शीर्षक', + 'app.errorFallback.hint': 'संकेत', + 'app.errorFallback.reloadApp': 'ऐप रिलोड करें', + 'app.errorFallback.subheading': 'उपशीर्षक', + 'app.errorFallback.tryRecover': 'रिकवर करने की कोशिश करें', + 'app.localAiDownload.installing': 'इन्स्टॉल हो रहा है...', + 'app.localAiDownload.preparing': 'तैयार हो रहा है...', + 'app.openhumanLink.accounts.continueWith': '{label} साइन-इन के साथ जारी रखें', + 'app.openhumanLink.accounts.done': 'हो गया', + 'app.openhumanLink.accounts.intro': 'परिचय', + 'app.openhumanLink.accounts.webviewNote': 'वेबव्यू नोट', + 'app.openhumanLink.billing.openDashboard': 'डैशबोर्ड खोलें', + 'app.openhumanLink.billing.stayOnTrial': 'ट्रायल पर रहें', + 'app.openhumanLink.billing.trialCredit': 'ट्रायल क्रेडिट', + 'app.openhumanLink.billing.trialDesc': 'ट्रायल विवरण', + 'app.openhumanLink.defaultBody': + 'पॉपअप में अभी तैयार नहीं है। जब आवश्यकता हो तो पूर्ण सेटिंग्स पृष्ठ खोलें।', + 'app.openhumanLink.discord.intro': 'परिचय', + 'app.openhumanLink.discord.openInvite': 'इनवाइट खोलें', + 'app.openhumanLink.discord.perk1': 'लाभ 1', + 'app.openhumanLink.discord.perk2': 'लाभ 2', + 'app.openhumanLink.discord.perk3': 'लाभ 3', + 'app.openhumanLink.discord.perk4': 'लाभ 4', + 'app.openhumanLink.done': 'हो गया', + 'app.openhumanLink.loadingChannelSetup': 'चैनल सेटअप लोड हो रहा है', + 'app.openhumanLink.maybeLater': 'शायद बाद में', + 'app.openhumanLink.notifications.asking': 'OS से पूछ रहे हैं…', + 'app.openhumanLink.notifications.blocked': 'ब्लॉक्ड', + 'app.openhumanLink.notifications.blockedStep1': 'ब्लॉक्ड चरण 1', + 'app.openhumanLink.notifications.blockedStep2': 'ब्लॉक्ड चरण 2', + 'app.openhumanLink.notifications.blockedStep3': 'ब्लॉक्ड चरण 3', + 'app.openhumanLink.notifications.intro': 'परिचय', + 'app.openhumanLink.notifications.promptHint': 'प्रॉम्प्ट संकेत', + 'app.openhumanLink.notifications.retry': 'टेस्ट नोटिफिकेशन फिर भेजें', + 'app.openhumanLink.notifications.send': 'टेस्ट नोटिफिकेशन भेजें', + 'app.openhumanLink.notifications.sendFailed': 'भेजा नहीं जा सका: {error}', + 'app.openhumanLink.notifications.sent': + 'टेस्ट नोटिफ़िकेशन भेज दिया गया। यदि आपको प्राप्त नहीं हुआ, तो System Settings → Notifications → OpenHuman पर जाएँ, Allow Notifications चालू करें, और Banner Style को Persistent पर सेट करें।', + 'app.openhumanLink.skipForNow': 'अभी के लिए स्किप करें', + 'app.openhumanLink.telegramUnavailable': 'Telegram उपलब्ध नहीं', + 'app.openhumanLink.title.accounts': 'अपने ऐप्स कनेक्ट करें', + 'app.openhumanLink.title.billing': 'बिलिंग और क्रेडिट', + 'app.openhumanLink.title.discord': 'कम्युनिटी जॉइन करें', + 'app.openhumanLink.title.messaging': 'चैट चैनल कनेक्ट करें', + 'app.openhumanLink.title.notifications': 'नोटिफिकेशन की अनुमति दें', + 'app.persistRehydration.body': 'विवरण', + 'app.persistRehydration.heading': 'शीर्षक', + 'app.persistRehydration.resetCta': 'रीसेट हो रहा है…', + 'app.persistRehydration.resetting': 'रीसेट हो रहा है…', + 'app.routeLoading.initializing': 'OpenHuman आरंभ हो रहा है...', + 'app.update.currentlyOn': '{version}', + 'app.update.errorFallback': 'अपडेट के दौरान कुछ गड़बड़ हो गई।', + 'app.update.header.default': 'अपडेट', + 'app.update.header.error': 'अपडेट विफल', + 'app.update.header.installing': 'अपडेट इन्स्टॉल हो रहा है', + 'app.update.header.readyToInstall': 'अपडेट इन्स्टॉल के लिए तैयार', + 'app.update.header.restarting': 'रीस्टार्ट हो रहा है…', + 'app.update.later': 'बाद में', + 'app.update.newVersionReady': 'नया वर्जन इन्स्टॉल के लिए तैयार है।', + 'app.update.progress.downloaded': '{amount} डाउनलोड हुआ', + 'app.update.progress.installing': 'नया वर्जन इन्स्टॉल हो रहा है…', + 'app.update.progress.restarting': 'ऐप फिर से लॉन्च हो रहा है…', + 'app.update.progress.working': '{percent}%', + 'app.update.restartNote': 'पुनः आरंभ नोट', + 'app.update.restartNow': 'अभी रीस्टार्ट करें', + 'app.update.versionReady': 'वर्जन {newVersion} इन्स्टॉल के लिए तैयार है।', + 'channels.discord.accountLinked': 'अकाउंट लिंक हो गया', + 'channels.discord.connect': 'कनेक्ट करें', + 'channels.discord.linkTokenExpired': 'लिंक टोकन एक्सपायर हो गया। दोबारा कोशिश करें।', + 'channels.discord.linkTokenInstruction': '{token}', + 'channels.discord.linkTokenLabel': 'लिंक टोकन लेबल', + 'channels.discord.linkTokenOnce': 'लिंक टोकन एक बार', + 'channels.discord.picker.allPermissionsOk': 'बॉट के पास इस चैनल में सभी ज़रूरी परमिशन हैं।', + 'channels.discord.picker.botNotInServers': 'बॉट किसी सर्वर में नहीं है', + 'channels.discord.picker.category': 'श्रेणी', + 'channels.discord.picker.channel': 'चैनल', + 'channels.discord.picker.checkingPermissions': 'परमिशन चेक हो रही हैं', + 'channels.discord.picker.loadingChannels': 'चैनल लोड हो रहे हैं...', + 'channels.discord.picker.loadingServers': 'सर्वर लोड हो रहे हैं...', + 'channels.discord.picker.missingPermissions': 'परमिशन नहीं हैं', + 'channels.discord.picker.noChannels': 'कोई टेक्स्ट चैनल नहीं मिला', + 'channels.discord.picker.noServers': 'कोई सर्वर नहीं मिला', + 'channels.discord.picker.selectChannel': 'एक चैनल चुनें', + 'channels.discord.picker.selectServer': 'एक सर्वर चुनें', + 'channels.discord.picker.server': 'सर्वर', + 'channels.discord.picker.serverChannelSelection': 'सर्वर और चैनल चयन', + 'channels.discord.savedRestartRequired': + 'चैनल सेव हो गया। एक्टिवेट करने के लिए ऐप रीस्टार्ट करें।', + 'channels.telegram.connect': 'कनेक्ट करें', + 'channels.telegram.managedDmConnecting': 'मैनेज्ड DM कनेक्ट हो रहा है', + 'channels.telegram.managedDmTimeout': 'मैनेज्ड DM टाइमआउट', + 'channels.telegram.reconnect': 'फिर से कनेक्ट करें', + 'channels.telegram.savedRestartRequired': + 'चैनल सेव हो गया। एक्टिवेट करने के लिए ऐप रीस्टार्ट करें।', + 'channels.web.alwaysAvailable': 'हमेशा उपलब्ध', + 'chat.approval.approve': 'स्वीकृति', + 'chat.approval.alwaysAllow': 'हमेशा अनुमति दें', + 'chat.approval.alwaysAllowHint': + 'इस उपकरण के लिए पूछना बंद करो - इसे अपने हमेशा की अनुमति सूची में जोड़ें', + 'chat.approval.deciding': 'कार्य...', + 'chat.approval.deny': 'डेनी', + 'chat.approval.error': 'अपने निर्णय को रिकॉर्ड नहीं कर सकता - फिर से प्रयास करें।', + 'chat.approval.fallback': 'एजेंट अपने अनुमोदन की जरूरत है कि एक कार्रवाई चलाने के लिए चाहता है।', + 'chat.approval.title': 'आवश्यक अनुमोदन', + 'chat.approval.tool': 'उपकरण:', + 'channels.authMode.managed_dm': 'OpenHuman से लॉगिन करें', + 'channels.authMode.oauth': 'OAuth साइन-इन करें', + 'channels.authMode.bot_token': 'अपने स्वयं के बॉट टोकन का उपयोग करें', + 'channels.authMode.api_key': 'अपनी स्वयं की API कुंजी का उपयोग करें', + 'channels.fieldRequired': '{field} आवश्यक है', + 'channels.mcp.title': 'MCP सर्वर', + 'channels.mcp.description': + 'AI को नए टूल्स से विस्तारित करने वाले Model Context Protocol सर्वर ब्राउज़ और प्रबंधित करें।', + 'channels.discord.displayName': 'Discord', + 'channels.discord.description': 'Discord के माध्यम से संदेश भेजें और प्राप्त करें।', + 'channels.discord.authMode.bot_token.description': 'अपना स्वयं का Discord बॉट टोकन प्रदान करें।', + 'channels.discord.authMode.oauth.description': + 'OpenHuman बॉट को OAuth के माध्यम से अपने Discord सर्वर पर स्थापित करें।', + 'channels.discord.authMode.managed_dm.description': + 'अपने व्यक्तिगत Discord खाते को OpenHuman बॉट से लिंक करें।', + 'channels.discord.fields.bot_token.label': 'बॉट टोकन', + 'channels.discord.fields.bot_token.placeholder': 'आपका Discord बॉट टोकन', + 'channels.discord.fields.guild_id.label': 'सर्वर (गिल्ड) आईडी', + 'channels.discord.fields.guild_id.placeholder': 'वैकल्पिक: एक विशिष्ट सर्वर तक सीमित रखें', + 'channels.telegram.displayName': 'Telegram', + 'channels.telegram.description': 'Telegram के माध्यम से संदेश भेजें और प्राप्त करें।', + 'channels.telegram.authMode.managed_dm.description': + 'OpenHuman Telegram बॉट को सीधे संदेश भेजें।', + 'channels.telegram.authMode.bot_token.description': + '@BotFather से अपना स्वयं का Telegram बॉट टोकन प्रदान करें।', + 'channels.telegram.fields.bot_token.label': 'बॉट टोकन', + 'channels.telegram.fields.bot_token.placeholder': '123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11', + 'channels.telegram.fields.allowed_users.label': 'अनुमत उपयोगकर्ता', + 'channels.telegram.fields.allowed_users.placeholder': + 'अल्पविराम से अलग किए गए Telegram उपयोक्तानाम', + 'channels.telegram.remoteControlTitle': 'रिमोट कंट्रोल (Telegram)', + 'channels.telegram.remoteControlBody': + 'अनुमत Telegram चैट से, /स्थिति, /सत्र, /नया, या /सहायता भेजें। मॉडल रूटिंग अभी भी /मॉडल और /मॉडल का उपयोग करती है।', + 'channels.web.displayName': 'वेब', + 'channels.web.description': 'अंतर्निहित वेब यूआई के माध्यम से चैट करें।', + 'channels.web.authMode.managed_dm.description': + 'एम्बेडेड वेब चैट का उपयोग करें - किसी सेटअप की आवश्यकता नहीं है।', + 'channels.yuanbao.connect': 'Connect', + 'channels.yuanbao.connecting': 'कनेक्ट हो रहा है…', + 'channels.yuanbao.fieldRequired': '{field} आवश्यक है', + 'channels.yuanbao.reconnect': 'Reconnect', + 'channels.yuanbao.savedRestartRequired': + 'चैनल सहेजा गया। इसे सक्रिय करने के लिए ऐप पुनः आरंभ करें।', + 'channels.yuanbao.unexpectedStatus': 'अप्रत्याशित कनेक्शन स्थिति: {status}', + 'chat.unsubscribeApproval.approve': 'स्वीकृत करें और सदस्यता समाप्त करें', + 'chat.unsubscribeApproval.approved': '✓ सफलतापूर्वक सदस्यता समाप्त की गई।', + 'chat.unsubscribeApproval.denied': '✕ रिक्वेस्ट नामंज़ूर।', + 'chat.unsubscribeApproval.deny': 'नामंज़ूर करें', + 'chat.unsubscribeApproval.processing': 'प्रोसेस हो रहा है...', + 'chat.unsubscribeApproval.title': 'सदस्यता समाप्ति अनुरोध', + 'commandPalette.ariaLabel': 'कमांड पैलेट', + 'commandPalette.description': 'विवरण', + 'commandPalette.label': 'कमांड', + 'commandPalette.noResults': 'कोई रिज़ल्ट नहीं', + 'commandPalette.placeholder': 'कोई कमांड टाइप करें या सर्च करें…', + 'commandPalette.searchAria': 'कमांड सर्च करें', + 'commandPalette.shortcutHint': 'सभी शॉर्टकट के लिए ? दबाएँ', + 'commandPalette.title': 'कमांड पैलेट', + 'kbd.ariaLabel': 'कीबोर्ड शॉर्टकट: {shortcut}', + 'iosMascot.connectedTo': 'से जुड़ा हुआ है', + 'iosMascot.defaultPairedLabel': 'डेस्कटॉप', + 'iosMascot.disconnect': 'डिस्कनेक्ट करें', + 'iosMascot.error.generic': 'कुछ ग़लत हो गया. कृपया पुन: प्रयास करें।', + 'iosMascot.error.sendFailed': 'भेजने में विफल. अपना कनेक्शन जांचें.', + 'iosMascot.pushToTalk': 'बात करने के लिए दबाव डालें', + 'iosMascot.sendMessage': 'संदेश भेजें', + 'iosMascot.thinking': 'सोच रहा हूँ...', + 'iosMascot.typeMessage': 'एक संदेश टाइप करें...', + 'iosPair.connectedLoading': 'जुड़ा हुआ! लोड हो रहा है...', + 'iosPair.connecting': 'डेस्कटॉप से कनेक्ट हो रहा है...', + 'iosPair.desktopLabel': 'डेस्कटॉप', + 'iosPair.error.camera': 'कैमरा स्कैन विफल रहा. कैमरा अनुमतियाँ जाँचें और पुनः प्रयास करें।', + 'iosPair.error.connectionFailed': + 'कनेक्शन विफल। सुनिश्चित करें कि डेस्कटॉप ऐप चल रहा है और पुनः प्रयास करें।', + 'iosPair.error.invalidQr': + 'अमान्य QR कोड। सुनिश्चित करें कि आप OpenHuman पेयरिंग कोड स्कैन कर रहे हैं।', + 'iosPair.error.unreachableDesktop': + 'डेस्कटॉप से संपर्क नहीं हो सका। सुनिश्चित करें कि दोनों डिवाइस ऑनलाइन हैं और पुनः प्रयास करें।', + 'iosPair.expired': 'QR code समाप्त हो गया. डेस्कटॉप से ​​कोड पुनः जनरेट करने के लिए कहें।', + 'iosPair.instructions': + 'अपने डेस्कटॉप पर OpenHuman खोलें, Settings > Devices पर जाएं, और QR कोड दिखाने के लिए "Pair phone" टैप करें।', + 'iosPair.retryScan': 'पुनः स्कैन करने का प्रयास करें', + 'iosPair.scanQrCode': 'स्कैन QR code', + 'iosPair.scannerOpening': 'स्कैनर खुल रहा है...', + 'iosPair.step.openDesktop': 'डेस्कटॉप पर OpenHuman खोलें', + 'iosPair.step.openSettings': 'सेटिंग्स > डिवाइसेस पर जाएँ', + 'iosPair.step.showQr': 'QR दिखाने के लिए "फ़ोन जोड़ें" पर टैप करें', + 'iosPair.title': 'अपने डेस्कटॉप के साथ युग्मित करें', + 'composio.connect.additionalConfigRequired': 'अतिरिक्त कॉन्फिग ज़रूरी है', + 'composio.connect.atlassianSubdomainHint': 'एक्मे', + 'composio.connect.atlassianSubdomainLabel': 'Atlassian सबडोमेन लेबल', + 'composio.connect.connect': 'कनेक्ट करें', + 'composio.connect.dynamicsOrgNameHint': + 'उदाहरण के लिए, myorg.crm.dynamics.com के लिए "myorg"। केवल छोटा संगठन नाम दर्ज करें, पूरा URL नहीं।', + 'composio.connect.dynamicsOrgNameLabel': 'Dynamics 365 संगठन का नाम', + 'composio.connect.connectionFailed': 'कनेक्शन विफल (स्थिति: {status})।', + 'composio.connect.disconnectFailed': 'डिसकनेक्ट विफल: {msg}', + 'composio.connect.disconnecting': 'डिसकनेक्ट हो रहा है…', + 'composio.connect.idleDescription': 'अपना कनेक्ट करें', + 'composio.connect.idleDescriptionSuffix': + 'खाता। हम एक ब्राउज़र विंडो खोलेंगे, आप वहाँ एक्सेस स्वीकृत करते हैं, और यह ऐप कनेक्शन को स्वचालित रूप से पहचान लेगा।', + 'composio.connect.isConnected': 'कनेक्ट है।', + 'composio.connect.manage': 'प्रबंधित करें', + 'composio.connect.needsFieldsPrefix': 'कनेक्ट करने के लिए', + 'composio.connect.needsFieldsSuffix': + 'हमें कुछ अतिरिक्त जानकारी चाहिए। नीचे लापता फ़ील्ड भरें और फिर से प्रयास करें।', + 'composio.connect.needsSubdomain': 'कनेक्ट करने के लिए', + 'composio.connect.needsSubdomainSuffix': + 'अपना Atlassian सबडोमेन दर्ज करें (जैसे acme.atlassian.net के लिए acme) और पुनः प्रयास करें।', + 'composio.connect.oauthComplete': 'OAuth पूरा करने के लिए…', + 'composio.connect.oauthTimeout': 'OAuth टाइमआउट', + 'composio.connect.permissions': 'परमिशन', + 'composio.connect.permissionsDefault': 'Read + Write डिफ़ॉल्ट रूप से चालू', + 'composio.connect.permissionsNote': 'उजागर कर सकता है', + 'composio.connect.permissionsNoteSuffix': + 'OpenHuman की अपनी एजेंट अनुमतियाँ नीचे पढ़ें, लिखें और एडमिन टॉगल के रूप में नियंत्रित होती हैं।', + 'composio.connect.reopenBrowser': 'ब्राउज़र फिर से खोलें', + 'composio.connect.requestingUrl': 'कनेक्ट URL माँगा जा रहा है…', + 'composio.connect.requiredFieldEmpty': 'यह फ़ील्ड आवश्यक है।', + 'composio.connect.retryConnection': 'कनेक्शन फिर से करें', + 'composio.connect.scopeLoadError': 'स्कोप प्रेफरेंस लोड नहीं हो पाई: {msg}', + 'composio.connect.scopeSaveError': '{key} स्कोप सेव नहीं हो पाया: {msg}', + 'composio.connect.scope.read': 'पढ़ें', + 'composio.connect.scope.readHint': 'एजेंट को इस कनेक्शन से डेटा पढ़ने की अनुमति दें।', + 'composio.connect.scope.write': 'लिखो', + 'composio.connect.scope.writeHint': + 'एजेंट को इस कनेक्शन के माध्यम से डेटा बनाने या संशोधित करने की अनुमति दें।', + 'composio.connect.scope.admin': 'व्यवस्थापक', + 'composio.connect.scope.adminHint': + 'एजेंट को सेटिंग्स, अनुमतियाँ, या विनाशकारी कार्रवाइयां प्रबंधित करने की अनुमति दें।', + 'composio.connect.subdomainInvalid': + 'केवल छोटा सबडोमेन दर्ज करें (जैसे "acme"), पूर्ण URL नहीं। इसमें केवल अक्षर, संख्याएँ और हाइफ़न होने चाहिए।', + 'composio.connect.subdomainRequired': 'जारी रखने के लिए अपना Atlassian subdomain डालें।', + 'composio.connect.wabaIdHint': + 'अपने Meta एक्सेस टोकन का उपयोग करके GET /me/businesses फिर GET /{business_id}/owned_whatsapp_business_accounts के माध्यम से इसे प्राप्त करें।', + 'composio.connect.wabaIdLabel': 'Waba आईडी लेबल', + 'composio.connect.wabaIdRequired': + 'जारी रखने के लिए अपना WhatsApp Business Account ID (WABA ID) डालें।', + 'composio.connect.waitingFor': 'प्रतीक्षा कर रहा है', + 'composio.connect.waitingHint': 'प्रतीक्षा संकेत', + 'composio.triggers.heading': 'ट्रिगर', + 'composio.triggers.listenFrom': 'से इवेंट्स सुनें', + 'composio.triggers.loadError': 'ट्रिगर्स लोड नहीं हो सके', + 'composio.triggers.needsConfiguration': 'कॉन्फिगरेशन ज़रूरी है', + 'composio.triggers.noneAvailable': 'वर्तमान में कोई ट्रिगर उपलब्ध नहीं है', + 'conversations.taskKanban.moveLeft': 'बाएं ले जाएं', + 'conversations.taskKanban.moveRight': 'दाएं ले जाएं', + 'conversations.taskKanban.title': 'टास्क', + 'conversations.taskKanban.approval.default': 'डिफ़ॉल्ट', + 'conversations.taskKanban.approval.notRequired': 'आवश्यकता नहीं', + 'conversations.taskKanban.approval.notRequiredBadge': 'कोई अनुमोदन नहीं', + 'conversations.taskKanban.approval.required': 'आवश्यक', + 'conversations.taskKanban.approval.requiredBadge': 'अनुमोदन', + 'conversations.taskKanban.approval.requiredBeforeExecution': 'निष्पादन से पहले आवश्यक', + 'conversations.taskKanban.briefButton': 'कार्य संक्षिप्त', + 'conversations.taskKanban.briefTitle': 'कार्य संक्षिप्त', + 'conversations.taskKanban.closeBrief': 'बंद कार्य संक्षिप्त', + 'conversations.taskKanban.field.acceptanceCriteria': 'स्वीकृति मानदंड', + 'conversations.taskKanban.field.allowedTools': 'अनुमति उपकरण', + 'conversations.taskKanban.field.approval': 'स्वीकृति', + 'conversations.taskKanban.field.assignedAgent': 'असाइन एजेंट', + 'conversations.taskKanban.field.blocker': 'ब्लॉकर', + 'conversations.taskKanban.field.evidence': 'प्रमाण', + 'conversations.taskKanban.field.notes': 'नोट', + 'conversations.taskKanban.field.objective': 'उद्देश्य', + 'conversations.taskKanban.field.plan': 'योजना', + 'conversations.taskKanban.field.status': 'स्थिति', + 'conversations.taskKanban.field.title': 'शीर्षक', + 'conversations.taskKanban.saveChanges': 'परिवर्तन सहेजें', + 'conversations.taskKanban.deleteCard': 'Delete', + 'conversations.taskKanban.updateFailed': 'कार्य अद्यतन नहीं कर सका; परिवर्तन बचाया नहीं गया।', + 'conversations.toolTimeline.turn': 'टर्न', + 'conversations.toolTimeline.workerThread': 'वर्कर थ्रेड', + 'daemon.serviceBlockingGate.body': 'विवरण', + 'daemon.serviceBlockingGate.downloadHint': 'डाउनलोड संकेत', + 'daemon.serviceBlockingGate.downloadLatest': 'नवीनतम संस्करण डाउनलोड करें', + 'daemon.serviceBlockingGate.retryCore': 'कोर पुनः प्रयास करें', + 'daemon.serviceBlockingGate.retryFailed': + 'फिर से कोशिश विफल। लेटेस्ट ऐप बिल्ड डाउनलोड करके दोबारा कोशिश करें।', + 'daemon.serviceBlockingGate.retrying': 'फिर से कोशिश हो रही है...', + 'daemon.serviceBlockingGate.title': 'OpenHuman कोर उपलब्ध नहीं है', + 'home.banners.discordSubtitle': 'Discord उपशीर्षक', + 'home.banners.discordTitle': 'हमारा Discord जॉइन करें', + 'home.banners.earlyBirdDismiss': 'अर्ली बर्ड बैनर हटाएं', + 'home.banners.earlyBirdFirstSub': 'पहली सदस्यता।', + 'home.banners.earlyBirdOn': 'अर्ली बर्ड चालू', + 'home.banners.earlyBirdTitle': 'पहले 1,000 उपयोगकर्ताओं को 60% की छूट मिलती है।', + 'home.banners.earlyBirdUseCode': 'अर्ली बर्ड कोड का उपयोग करें', + 'home.banners.getSubscription': 'सदस्यता लें', + 'home.banners.promoCreditsBody': 'प्रोमो क्रेडिट विवरण', + 'home.banners.promoCreditsTitle': '{amount}', + 'home.banners.promoCreditsUsage': 'प्रोमो क्रेडिट उपयोग', + 'intelligence.memoryChunk.detail.chunk': 'चंक', + 'intelligence.memoryChunk.detail.copyChunkId': 'Chunk ID कॉपी करें', + 'intelligence.memoryChunk.detail.embeddingInfo': 'बीजीई-एम3 1024डिम', + 'intelligence.memoryChunk.detail.noEmbedding': 'कोई एम्बेडिंग नहीं', + 'intelligence.memoryChunk.letterhead.from': 'से', + 'intelligence.memoryChunk.letterhead.to': 'को', + 'intelligence.memoryChunk.mentioned.chunkOne': '1 चंक', + 'intelligence.memoryChunk.mentioned.chunkOther': '{count} चंक', + 'intelligence.memoryChunk.mentioned.heading': 'उल्लेखित', + 'intelligence.memoryChunk.scoreBars.ariaScore': '{name} स्कोर {pct} प्रतिशत', + 'intelligence.memoryChunk.scoreBars.atThreshold': '{threshold} पर', + 'intelligence.memoryChunk.scoreBars.dropped': 'हटाया गया', + 'intelligence.memoryChunk.scoreBars.heading': 'क्यों रखा', + 'intelligence.memoryChunk.scoreBars.kept': 'रखा गया', + 'intelligence.diagram.title': 'आर्किटेक्चर डायग्राम', + 'intelligence.diagram.description': + 'कॉन्फ़िगर किए गए डायग्राम एंडपॉइंट से नवीनतम स्थानीय आर्किटेक्चर आउटपुट।', + 'intelligence.diagram.refresh': 'Refresh', + 'intelligence.diagram.refreshAria': 'डायग्राम रीफ्रेश करें', + 'intelligence.diagram.emptyTitle': 'अभी कोई डायग्राम उपलब्ध नहीं है', + 'intelligence.diagram.emptyDescription': + 'ऑर्केस्ट्रेटर से एक आर्किटेक्चर डायग्राम बनाएं और यह पैनल कॉन्फ़िगर किए गए स्थानीय एंडपॉइंट से स्वयं अपडेट हो जाएगा।', + 'intelligence.diagram.skillInstallCommand': 'npx skills add yizhiyanhua-ai/fireworks-tech-graph', + 'intelligence.diagram.promptExample': + 'डार्क टर्मिनल स्टाइल में वर्तमान स्वार्म का आर्किटेक्चर डायग्राम बनाएं', + 'intelligence.diagram.imageAlt': 'OpenHuman का नवीनतम जेनरेटेड आर्किटेक्चर डायग्राम', + 'intelligence.diagram.refreshesEvery': 'हर {seconds}s पर रीफ्रेश होता है', + 'intelligence.memoryText.entityTypePrefix': 'इकाई प्रकार', + 'intelligence.screenDebug.active': 'एक्टिव', + 'intelligence.screenDebug.app': 'ऐप', + 'intelligence.screenDebug.bounds': 'बाउंड्स', + 'intelligence.screenDebug.captureAlt': 'कैप्चर टेस्ट रिज़ल्ट', + 'intelligence.screenDebug.captureFailed': 'विफल', + 'intelligence.screenDebug.captureSuccess': 'सफल', + 'intelligence.screenDebug.captureTest': 'कैप्चर टेस्ट', + 'intelligence.screenDebug.capturing': 'कैप्चर हो रहा है', + 'intelligence.screenDebug.frames': 'फ्रेम', + 'intelligence.screenDebug.idle': 'आइडल', + 'intelligence.screenDebug.lastApp': 'आखिरी ऐप', + 'intelligence.screenDebug.mode': 'मोड', + 'intelligence.screenDebug.permAccessibility': 'Accessibility परमिशन', + 'intelligence.screenDebug.permInput': 'इनपुट परमिशन', + 'intelligence.screenDebug.permScreen': 'स्क्रीन रिकॉर्डिंग अनुमति', + 'intelligence.screenDebug.permissions': 'परमिशन', + 'intelligence.screenDebug.platformNotSupported': 'प्लेटफॉर्म सपोर्टेड नहीं', + 'intelligence.screenDebug.recentVisionSummaries': 'हाल के विज़न समरीज़', + 'intelligence.screenDebug.session': 'सेशन', + 'intelligence.screenDebug.size': 'साइज़', + 'intelligence.screenDebug.status': 'स्टेटस', + 'intelligence.screenDebug.testCapture': 'टेस्ट कैप्चर', + 'intelligence.screenDebug.time': 'समय', + 'intelligence.screenDebug.title': 'टाइटल', + 'intelligence.screenDebug.unknown': 'अज्ञात', + 'intelligence.screenDebug.visionQueue': 'विज़न क्यू', + 'intelligence.screenDebug.visionState': 'विज़न स्टेट', + 'intelligence.tasks.activeBoardOne': 'बातचीतों में 1 सक्रिय बोर्ड', + 'intelligence.tasks.activeBoardOther': 'बातचीतों में {count} सक्रिय बोर्ड', + 'intelligence.tasks.empty': 'अभी कोई एजेंट टास्क बोर्ड नहीं', + 'intelligence.tasks.emptyHint': 'खाली संकेत', + 'intelligence.tasks.failedToLoad': 'लोड नहीं हो पाया', + 'intelligence.tasks.live': 'लाइव', + 'intelligence.tasks.loadingBoards': 'टास्क बोर्ड लोड हो रहे हैं…', + 'intelligence.tasks.threadPrefix': 'थ्रेड {thread}', + 'intelligence.tasks.subtitle': 'कार्यस्थल पर आपके कार्य और एजेंट कार्य बोर्ड।', + 'intelligence.tasks.newTask': 'नया कार्य', + 'intelligence.tasks.personalBoardTitle': 'एजेंट कार्य', + 'intelligence.tasks.personalEmpty': 'अभी तक कोई व्यक्तिगत कार्य नहीं', + 'intelligence.tasks.composer.title': 'नया कार्य', + 'intelligence.tasks.composer.titleLabel': 'शीर्षक', + 'intelligence.tasks.composer.titlePlaceholder': 'क्या करना चाहिए?', + 'intelligence.tasks.composer.statusLabel': 'स्थिति', + 'intelligence.tasks.composer.attachLabel': 'बातचीत करने के लिए संलग्न', + 'intelligence.tasks.composer.attachNone': 'व्यक्तिगत (कोई बातचीत नहीं)', + 'intelligence.tasks.composer.objectiveLabel': 'उद्देश्य', + 'intelligence.tasks.composer.objectivePlaceholder': 'वैकल्पिक - वांछित परिणाम', + 'intelligence.tasks.composer.notesLabel': 'नोट', + 'intelligence.tasks.composer.notesPlaceholder': 'वैकल्पिक नोट्स', + 'intelligence.tasks.composer.create': 'कार्य', + 'intelligence.tasks.composer.creating': 'बनाना', + 'intelligence.tasks.composer.createFailed': 'काम नहीं कर सका', + 'notifications.card.dismiss': 'नोटिफिकेशन हटाएं', + 'notifications.card.importanceTitle': 'महत्व: {pct}%', + 'notifications.center.empty': 'अभी कोई नोटिफिकेशन नहीं', + 'notifications.center.emptyHint': 'खाली संकेत', + 'notifications.center.filterAll': 'सभी फिल्टर', + 'notifications.center.markAllRead': 'सभी पढ़ा हुआ मार्क करें', + 'notifications.center.title': 'नोटिफिकेशन', + 'oauth.button.connecting': 'कनेक्ट हो रहा है...', + 'oauth.button.loopbackTimeout': + 'साइन-इन का समय समाप्त हो गया — ब्राउज़र ने OAuth पुनर्निर्देशन पूरा नहीं किया। कृपया पुनः प्रयास करें।', + 'oauth.login.continueWith': 'के साथ जारी रखें', + 'onboarding.contextGathering.buildingDesc': 'बिल्डिंग विवरण', + 'onboarding.contextGathering.buildingProfile': 'आपकी प्रोफ़ाइल बन रही है...', + 'onboarding.contextGathering.continueToChat': 'चैट पर जाएं', + 'onboarding.contextGathering.coreAlive': + 'कोर पहुँच योग्य है — पहली बार लॉन्च करने में एक मिनट लग सकता है।', + 'onboarding.contextGathering.coreAliveProbing': 'कोर कनेक्शन की जाँच की जा रही है…', + 'onboarding.contextGathering.coreUnreachable': + 'कोर प्रतिक्रिया नहीं दे रहा है। आप जारी रख सकते हैं और बाद में पुनः प्रयास कर सकते हैं।', + 'onboarding.contextGathering.errorDesc': + 'हम अभी आपकी पूरी प्रोफ़ाइल नहीं बना सके, लेकिन कोई बात नहीं — आप जारी रख सकते हैं और आपकी प्रोफ़ाइल समय के साथ बनती जाएगी।', + 'onboarding.contextGathering.stillWorkingDesc': + 'हम आपके स्थानीय मॉडल और टूल्स को तैयार कर रहे हैं, पहली बार लॉन्च करने में 30–60 सेकंड लग सकते हैं। आप कभी भी चैट पर जा सकते हैं — प्रोफ़ाइल पृष्ठभूमि में बनती रहेगी।', + 'onboarding.contextGathering.stillWorkingTitle': 'आपकी प्रोफ़ाइल पर अब भी काम चल रहा है…', + 'onboarding.contextGathering.title': 'कॉन्टेक्स्ट गैदरिंग', + 'openhuman.team_list_teams': 'टीम सूची टीमें', + 'overlay.ariaAttention': 'ध्यान संदेश', + 'overlay.ariaCompanion': 'कंपैनियन सक्रिय', + 'overlay.ariaOrb': 'OpenHuman ओवरले', + 'overlay.ariaVoiceActive': 'वॉइस इनपुट एक्टिव', + 'overlay.companion.error': 'त्रुटि', + 'overlay.companion.listening': 'सुन रहा है…', + 'overlay.companion.pointing': 'इशारा कर रहा है…', + 'overlay.companion.speaking': 'बोल रहा है…', + 'overlay.companion.thinking': 'सोच रहा है…', + 'overlay.orbTitle': 'मूव करने के लिए खींचें · पोज़िशन रीसेट के लिए डबल-क्लिक करें', + 'pages.settings.account.connections': 'कनेक्शन', + 'pages.settings.account.connectionsDesc': 'कनेक्शन विवरण', + 'pages.settings.account.migration': 'किसी अन्य असिस्टेंट से इम्पोर्ट करें', + 'pages.settings.account.migrationDesc': + 'OpenClaw (और जल्द ही Hermes) से मेमोरी और नोट्स इस वर्कस्पेस में माइग्रेट करें।', + 'pages.settings.account.privacy': 'प्राइवेसी', + 'pages.settings.account.privacyDesc': 'गोपनीयता विवरण', + 'pages.settings.account.recoveryPhrase': 'रिकवरी फ्रेज़', + 'pages.settings.account.recoveryPhraseDesc': 'रिकवरी फ़्रेज़ विवरण', + 'pages.settings.account.team': 'टीम', + 'pages.settings.account.teamDesc': 'टीम विवरण', + 'pages.settings.accountSection.description': 'रिकवरी फ्रेज़, टीम, कनेक्शन और प्राइवेसी सेटिंग्स।', + 'pages.settings.accountSection.title': 'अकाउंट', + 'pages.settings.ai.llm': 'LLM', + 'pages.settings.ai.llmDesc': 'LLM विवरण', + 'pages.settings.ai.voice': 'वॉइस', + 'pages.settings.ai.voiceDesc': 'वॉइस विवरण', + 'pages.settings.aiSection.description': + 'लैंग्वेज मॉडल प्रोवाइडर, लोकल Ollama और वॉइस (STT / TTS)।', + 'pages.settings.aiSection.title': 'AI', + 'pages.settings.composioSection.title': 'Composio', + 'pages.settings.composioSection.description': + 'Composio द्वारा संचालित एकीकरण के लिए रूटिंग, ट्रिगर और इतिहास।', + 'settings.developerMenu.composio.title': 'Composio', + 'settings.developerMenu.composio.desc': 'रूटिंग मोड, एकीकरण ट्रिगर, और ट्रिगर इतिहास संग्रह।', + 'pages.settings.features.desktopCompanion': 'डेस्कटॉप कंपैनियन', + 'pages.settings.features.desktopCompanionDesc': + 'स्क्रीन जागरूकता के साथ वॉयस सहायक — सुनता है, देखता है, बोलता है, इशारा करता है', + 'pages.settings.features.messagingChannels': 'मैसेजिंग चैनल', + 'pages.settings.features.messagingChannelsDesc': 'मैसेजिंग चैनल विवरण', + 'pages.settings.features.notifications': 'नोटिफिकेशन', + 'pages.settings.features.notificationsDesc': 'नोटिफ़िकेशन विवरण', + 'pages.settings.features.screenAwareness': 'स्क्रीन अवेयरनेस', + 'pages.settings.features.screenAwarenessDesc': 'स्क्रीन अवेयरनेस विवरण', + 'pages.settings.features.tools': 'टूल्स', + 'pages.settings.features.toolsDesc': 'टूल्स विवरण', + 'pages.settings.featuresSection.description': 'स्क्रीन अवेयरनेस, मैसेजिंग और टूल्स।', + 'pages.settings.featuresSection.title': 'फीचर्स', + 'privacy.dataKind.credentials': 'क्रेडेंशियल', + 'privacy.dataKind.derived': 'डिराइव्ड', + 'privacy.dataKind.diagnostics': 'डायग्नोस्टिक्स', + 'privacy.dataKind.metadata': 'मेटाडेटा', + 'privacy.dataKind.raw': 'रॉ', + 'privacy.whatLeaves.link.label': 'मेरे कंप्यूटर से क्या जाता है?', + 'rewards.community.achievementsUnlocked': '{total} में से {unlocked} उपलब्धियाँ अनलॉक हुईं', + 'rewards.community.connectDiscord': 'Discord कनेक्ट करें', + 'rewards.community.cumulativeTokens': 'कुल टोकन', + 'rewards.community.currentStreak': 'मौजूदा स्ट्रीक', + 'rewards.community.discordLinkedNotInGuild': 'Discord लिंक्ड, Guild में नहीं', + 'rewards.community.discordMember': 'सर्वर में शामिल हुए', + 'rewards.community.discordNotLinked': 'Discord लिंक्ड नहीं', + 'rewards.community.discordServer': 'Discord सर्वर', + 'rewards.community.discordStatusUnavailable': 'Discord स्टेटस उपलब्ध नहीं', + 'rewards.community.discordWaiting': 'Discord का इंतज़ार', + 'rewards.community.heroSubtitle': 'हीरो उपशीर्षक', + 'rewards.community.heroTitle': 'हीरो शीर्षक', + 'rewards.community.joinDiscord': 'Discord से जुड़ें', + 'rewards.community.loadingRewards': 'रिवॉर्ड लोड हो रहे हैं…', + 'rewards.community.locked': 'अनलॉक्ड', + 'rewards.community.retrying': 'फिर से कोशिश हो रही है…', + 'rewards.community.rolesAndRewards': 'रोल्स और रिवॉर्ड', + 'rewards.community.streakDays': '{n}', + 'rewards.community.syncPending': 'रिवॉर्ड सिंक पेंडिंग', + 'rewards.community.syncPendingDesc': 'सिंक लंबित विवरण', + 'rewards.community.syncUnavailable': 'सिंक उपलब्ध नहीं', + 'rewards.community.tryAgain': 'फिर से कोशिश हो रही है…', + 'rewards.community.unknown': 'अज्ञात', + 'rewards.community.unlocked': 'अनलॉक्ड', + 'rewards.community.yourProgress': 'आपकी प्रगति', + 'rewards.coupon.colCode': 'कोड', + 'rewards.coupon.colRedeemed': 'रिडीम हुआ', + 'rewards.coupon.colReward': 'रिवॉर्ड', + 'rewards.coupon.colStatus': 'स्टेटस', + 'rewards.coupon.loadingHistory': 'रिवॉर्ड हिस्ट्री लोड हो रही है…', + 'rewards.coupon.noCodes': 'अभी तक कोई रिवॉर्ड कोड रिडीम नहीं किया गया।', + 'rewards.coupon.pending': 'पेंडिंग', + 'rewards.coupon.placeholder': 'कूपन कोड', + 'rewards.coupon.promoCredits': 'प्रोमो क्रेडिट', + 'rewards.coupon.recentRedemptions': 'हाल के रिडेम्प्शन', + 'rewards.coupon.redeemAccepted': + '{code} स्वीकृत। आवश्यक कार्रवाई पूरी होने के बाद {amount} अनलॉक होगा।', + 'rewards.coupon.redeemButton': 'कोड रिडीम करें', + 'rewards.coupon.redeemSuccess': '{code} रिडीम किया गया। {amount} आपके क्रेडिट में जोड़ा गया।', + 'rewards.coupon.redeemedCodes': 'रिडीम हुए कोड', + 'rewards.coupon.redeeming': 'रिडीम हो रहा है...', + 'rewards.coupon.statusApplied': 'लागू', + 'rewards.coupon.statusPendingAction': 'कार्रवाई लंबित', + 'rewards.coupon.statusRedeemed': 'रिडीम किया गया', + 'rewards.coupon.subtitle': 'उपशीर्षक', + 'rewards.coupon.title': 'कूपन कोड रिडीम करें', + 'rewards.referralSection.activity': 'रेफरल एक्टिविटी', + 'rewards.referralSection.apply': 'लागू हो रहा है…', + 'rewards.referralSection.applying': 'लागू हो रहा है…', + 'rewards.referralSection.colReferredUser': 'रेफर किया यूज़र', + 'rewards.referralSection.colReward': 'रिवॉर्ड', + 'rewards.referralSection.colStatus': 'स्टेटस', + 'rewards.referralSection.colUpdated': 'अपडेट हुआ', + 'rewards.referralSection.completed': 'पूरा हुआ', + 'rewards.referralSection.copyCode': 'कोड कॉपी करें', + 'rewards.referralSection.copyFailed': 'कॉपी विफल', + 'rewards.referralSection.haveCode': 'रेफरल कोड है?', + 'rewards.referralSection.haveCodeDesc': 'कोड है विवरण', + 'rewards.referralSection.linked': 'लिंक्ड', + 'rewards.referralSection.linkedCode': '(कोड {code})', + 'rewards.referralSection.loading': 'रेफरल प्रोग्राम लोड हो रहा है…', + 'rewards.referralSection.retry': 'पुनः प्रयास करें', + 'rewards.referralSection.noReferrals': 'कोई रेफरल नहीं', + 'rewards.referralSection.pendingReferrals': 'पेंडिंग रेफरल', + 'rewards.referralSection.placeholder': 'रेफरल कोड', + 'rewards.referralSection.share': 'शेयर करें', + 'rewards.referralSection.statusCompleted': 'पूरा हुआ', + 'rewards.referralSection.statusExpired': 'एक्सपायर हो गया', + 'rewards.referralSection.statusJoined': 'जॉइन हुआ', + 'rewards.referralSection.subtitle': 'उपशीर्षक', + 'rewards.referralSection.title': 'दोस्तों को इनवाइट करें, क्रेडिट कमाएं', + 'rewards.referralSection.totalEarned': 'कुल कमाया', + 'rewards.referralSection.yourCode': 'आपका कोड', + 'settings.ai.addCloudProvider': 'क्लाउड प्रदाता जोड़ें', + 'settings.ai.addProvider': 'सेव हो रहा है…', + 'settings.ai.apiKeyFieldLabel': 'API key फील्ड लेबल', + 'settings.ai.apiKeyRequired': 'जारी रखने के लिए अपनी API key पेस्ट करें।', + 'settings.ai.apiKeyStoredEncrypted': 'API key एन्क्रिप्टेड रूप में स्टोर है', + 'settings.ai.apiKeysEncrypted': 'xqx', + 'settings.ai.clearStoredKey': 'स्टोर्ड key क्लियर करें', + 'settings.ai.connectProvider': 'प्रदाता कनेक्ट करें', + 'settings.ai.customRouting': 'कस्टम रूटिंग', + 'settings.ai.defaultResolvesTo': 'डिफ़ॉल्ट इसमें हल होता है', + 'settings.ai.discard': 'रद्द करें', + 'settings.ai.editProvider': 'प्रदाता संपादित करें', + 'settings.ai.llmProviders': 'LLM प्रोवाइडर', + 'settings.ai.llmProvidersDesc': 'भाषा मॉडल प्रदाता जोड़ें और कॉन्फ़िगर करें।', + 'settings.ai.localOllama': 'लोकल (Ollama)', + 'settings.ai.modelLabel': 'मॉडल', + 'settings.ai.noCustomProviders': 'कोई कस्टम प्रोवाइडर नहीं', + 'settings.ai.openAiCompat.authHeaderExample': 'Authorization: Bearer <आपकी कुंजी>', + 'settings.ai.openAiCompat.authHeaderLabel': 'प्रामाणिक शीर्षलेख', + 'settings.ai.openAiCompat.baseUrlLabel': 'आधार URL', + 'settings.ai.openAiCompat.baseUrlUnavailable': 'अनुपलब्ध', + 'settings.ai.openAiCompat.clearKey': 'साफ़ कुंजी', + 'settings.ai.openAiCompat.description': + 'इस / v1 सर्वर पर पॉइंट स्थानीय harnesses को नीचे कॉन्फ़िगर किए गए प्रदाताओं के माध्यम से रूट करने के लिए। प्रमाणीकरण एक स्थिर कुंजी का उपयोग करता है जिसे आप यहां सेट करते हैं, ऐप का आंतरिक कोर बियरर नहीं।', + 'settings.ai.openAiCompat.keyConfigured': 'कुंजी कॉन्फ़िगर की गई', + 'settings.ai.openAiCompat.keyRequired': 'कुंजी आवश्यक है', + 'settings.ai.openAiCompat.rotateKey': 'कुंजी घुमाएँ', + 'settings.ai.openAiCompat.setKey': 'कुंजी सेट करें', + 'settings.ai.openAiCompat.title': 'OpenAI-संगत समापन बिंदु', + 'settings.ai.providerLabel': 'प्रोवाइडर', + 'skills.mcpComingSoon.title': 'MCP सर्वर', + 'skills.mcpComingSoon.description': + 'MCP सर्वर प्रबंधन जल्द आ रहा है। यह टैब आपके MCP सर्वर इंटीग्रेशन खोजने, कनेक्ट करने और मॉनिटर करने का केंद्र होगा।', + 'settings.ai.routing': 'रूटिंग', + 'settings.ai.routingCustom': 'कस्टम रूटिंग', + 'settings.ai.routingDefault': 'डिफ़ॉल्ट', + 'settings.ai.routingDesc': 'रूटिंग विवरण', + 'settings.ai.saveChanges': 'सेव हो रहा है…', + 'settings.ai.saving': 'सेव हो रहा है…', + 'settings.ai.unsavedChange': 'असहेजा परिवर्तन', + 'settings.ai.unsavedChanges': 'असहेजे परिवर्तन', + 'settings.ai.workloadGroupBackground': 'बैकग्राउंड वर्कलोड ग्रुप', + 'settings.ai.workloadGroupChat': 'चैट वर्कलोड ग्रुप', + 'settings.ai.disconnectProvider': 'डिस्कनेक्ट करें {label}', + 'settings.ai.connectProviderLabel': 'कनेक्ट करें {label}', + 'settings.ai.defaultLocalEndpoint': 'http://localhost:11434/v1', + 'settings.ai.endpointUrlLabel': 'समापन बिंदु URL', + 'settings.ai.localRuntimeHelper': + 'जहां {label} पहुंच योग्य है। डिफ़ॉल्ट स्थानीयहोस्ट है; इसे रिमोट होस्ट पर इंगित करें (उदाहरण के लिए, http://10.0.0.4:11434/v1) एक साझा उदाहरण का उपयोग करने के लिए)।', + 'settings.ai.endpointUrlRequired': 'समापन बिंदु URL आवश्यक है.', + 'settings.ai.endpointProtocolRequired': 'समापन बिंदु http:// या https://. से शुरू होना चाहिए', + 'settings.ai.connectProviderDialog': 'कनेक्ट करें {label}', + 'settings.ai.or': 'या', + 'settings.ai.openRouterOauthDescription': + 'OpenRouter के साथ साइन इन करें और PKCE का उपयोग करके उपयोगकर्ता नियंत्रित API कुंजी आयात करें।', + 'settings.ai.connecting': 'कनेक्ट हो रहा है...', + 'settings.ai.backgroundLoops': 'पृष्ठभूमि लूप', + 'settings.ai.backgroundLoopsDesc': + 'क्या एक चैट संदेश के बिना चलाता है, दिल की धड़कन काम को रोकें, और हाल ही में क्रेडिट लेजर पंक्तियों का निरीक्षण करें।', + 'settings.ai.heartbeatControls': 'दिल की धड़कन नियंत्रित होती है', + 'settings.ai.heartbeatControlsDesc': + 'डिफ़ॉल्ट। सक्षम करने से लूप शुरू होता है; निष्क्रिय करने से चलने का कार्य समाप्त हो जाता है।', + 'settings.ai.heartbeatLoop': 'दिल की धड़कन का लूप', + 'settings.ai.heartbeatLoopDesc': 'प्लानर + वैकल्पिक अवचेतन उपस्थिति के लिए मास्टर शेड्यूलर।', + 'settings.ai.subconsciousInference': 'अवचेतन अनुमान', + 'settings.ai.subconsciousInferenceDesc': + 'हार्टबीट टिक पर मॉडल समर्थित task/reflection मूल्यांकन चलाता है।', + 'settings.ai.calendarMeetingChecks': 'कैलेंडर मीटिंग की जाँच', + 'settings.ai.calendarMeetingChecksDesc': + 'सक्रिय Google कैलेंडर कनेक्शन के लिए कैलेंडर इवेंट सूची बुलाता है।', + 'settings.ai.calendarCap': 'कैलेंडर कैप', + 'settings.ai.connectionsPerTick': '{count} कॉन/टिक', + 'settings.ai.meetingLookahead': 'बैठक आगे की ओर देख रही है', + 'settings.ai.minutesShort': '{count} मि', + 'settings.ai.reminderLookahead': 'आगे देखने का अनुस्मारक', + 'settings.ai.cronReminderChecks': 'क्रॉन अनुस्मारक जाँच करता है', + 'settings.ai.cronReminderChecksDesc': + 'स्कैन ने रिमाइंडर जैसी आगामी वस्तुओं के लिए क्रोन नौकरियों को सक्षम किया।', + 'settings.ai.relevantNotificationChecks': 'प्रासंगिक अधिसूचना जाँच', + 'settings.ai.relevantNotificationChecksDesc': + 'तत्काल स्थानीय सूचनाएं सक्रिय अलर्ट में बढ़ावा देता है।', + 'settings.ai.externalDelivery': 'बाह्य वितरण', + 'settings.ai.externalDeliveryDesc': + 'दिल की धड़कन अलर्ट बाहरी चैनलों को सक्रिय संदेश भेज देता है।', + 'settings.ai.interval': 'अंतराल', + 'settings.ai.running': 'चल रहा है...', + 'settings.ai.plannerTickNow': 'प्लानर अभी टिक करें', + 'settings.ai.loadingHeartbeatControls': 'दिल की धड़कन नियंत्रण लोड हो रहा है...', + 'settings.ai.heartbeatControlsUnavailable': 'दिल की धड़कन नियंत्रण अनुपलब्ध है.', + 'settings.ai.loopMap': 'लूप मानचित्र', + 'settings.ai.plannerSummary': + 'योजनाकार: {sourceEvents} स्रोत घटनाएँ, {sent} भेजा गया, {deduped} काटा गया।', + 'settings.ai.routeLabel': 'मार्ग: {route}', + 'settings.ai.on': 'पर', + 'settings.ai.off': 'बंद', + 'settings.ai.recentUsageLedger': 'हालिया उपयोग खाता बही', + 'settings.ai.recentUsageLedgerDesc': + 'बैकएंड पंक्तियां आज action/time को उजागर करती हैं; स्रोत टैग को बैकेंड समर्थन की आवश्यकता होती है।', + 'settings.ai.latestSpend': 'नवीनतम खर्च: {amount} पर {time} ({action})', + 'settings.ai.topActions': 'शीर्ष क्रियाएं', + 'settings.ai.noSpendRows': 'कोई व्यय पंक्तियाँ लोड नहीं की गईं.', + 'settings.ai.topHours': 'शीर्ष घंटे', + 'settings.ai.noHourlySpend': 'अभी तक कोई प्रति घंटा खर्च नहीं.', + 'settings.ai.openhumanDefault': 'OpenHuman (डिफ़ॉल्ट)', + 'settings.ai.localModelResolved': 'Ollama', + 'settings.ai.customRoutingForWorkload': '{label} के लिए कस्टम रूटिंग', + 'settings.ai.loadingModels': 'मॉडल लोड हो रहे हैं...', + 'settings.ai.enterModelIdManually': 'या मैन्युअल रूप से मॉडल आईडी दर्ज करें:', + 'settings.ai.modelIdPlaceholderForProvider': '{slug} मॉडल आईडी', + 'settings.ai.modelIdPlaceholder': 'model-id', + 'settings.ai.selectModel': 'एक मॉडल चुनें...', + 'settings.ai.temperatureOverride': 'तापमान ओवरराइड', + 'settings.ai.temperatureOverrideSlider': 'तापमान ओवरराइड (स्लाइडर)', + 'settings.ai.temperatureOverrideValue': 'तापमान ओवरराइड (मान)', + 'settings.ai.temperatureOverrideDesc': + 'लोअर = अधिक नियतिवादी। प्रदाता डिफ़ॉल्ट का उपयोग करने के लिए अनचेक छोड़ दें।', + 'settings.ai.testFailed': 'परीक्षण विफल रहा', + 'settings.ai.testingModel': 'परीक्षण मॉडल...', + 'settings.ai.modelResponse': 'मॉडल प्रतिक्रिया', + 'settings.ai.providerWithValue': 'प्रदाता: {value}', + 'settings.ai.noneDash': '—', + 'settings.ai.promptHelloWorld': 'संकेत: नमस्ते विश्व', + 'settings.ai.startedAt': 'प्रारंभ: {value}', + 'settings.ai.waitingForModelResponse': 'चयनित मॉडल से प्रतिक्रिया की प्रतीक्षा है...', + 'settings.ai.response': 'प्रतिक्रिया', + 'settings.ai.testing': 'परीक्षण...', + 'settings.ai.test': 'परीक्षण', + 'settings.ai.slugMissingError': 'स्लग उत्पन्न करने के लिए प्रदाता का नाम दर्ज करें।', + 'settings.ai.slugInUseError': 'वह प्रदाता नाम पहले से ही उपयोग में है.', + 'settings.ai.slugReservedError': 'कोई भिन्न प्रदाता नाम चुनें.', + 'settings.ai.providerNamePlaceholder': 'मेरा प्रदाता', + 'settings.ai.slugLabel': 'स्लग:', + 'settings.ai.openAiUrlLabel': 'xxxxxxxxxxxx', + 'settings.ai.openAiUrlPlaceholder': 'https://api.openai.com/v1', + 'settings.ai.keepExistingKeyPlaceholder': 'मौजूदा कुंजी रखने के लिए खाली छोड़ दें', + 'settings.ai.reindexingMemory': 'स्मृति को पुनः अनुक्रमित करना', + 'settings.ai.reindexingMemoryMessage': + 'एम्बेडिंग को फिर से संसाधित किया जा रहा है। {pending} मेमोरी आइटम (s) को वर्तमान मॉडल के तहत फिर से एम्बेड किया जा रहा है - इस खत्म होने तक शब्दकोष वापस कम हो जाता है। कीवर्ड खोज काम करता रहता है, और यदि आप इसे बंद करते हैं तो पृष्ठभूमि में फिर से एम्बेड करना जारी रहता है।', + 'settings.ai.signInWithOpenRouter': 'OpenRouter से साइन इन करें', + 'settings.ai.weekBudget': 'सप्ताह का बजट', + 'settings.ai.cycleRemaining': 'चक्र शेष है', + 'settings.ai.cycleTotalSpend': 'चक्र कुल खर्च', + 'settings.ai.avgSpendRow': 'औसत व्यय पंक्ति', + 'settings.ai.backgroundApiReads': 'बीजी API पढ़ता है', + 'settings.ai.backgroundWakeups': 'बीजी वेकअप', + 'settings.ai.budgetMath': 'बजट गणित', + 'settings.ai.rowsLeft': 'पंक्तियाँ शेष हैं', + 'settings.ai.rowsPerFullWeekBudget': 'पूरे सप्ताह के बजट के अनुसार पंक्तियाँ', + 'settings.ai.sampleBurnRate': 'नमूना जलने की दर', + 'settings.ai.projectedEmpty': 'खाली प्रक्षेपित किया गया', + 'settings.ai.apiReadsPerDollarRemaining': 'API प्रति $ शेष पढ़ता है', + 'settings.ai.loopCallBudget': 'लूप कॉल बजट', + 'settings.ai.heartbeatTicks': 'दिल की धड़कन टिक-टिक करती है', + 'settings.ai.calendarPlannerCalls': 'कैलेंडर योजनाकार कॉल करता है', + 'settings.ai.calendarFanoutCap': 'कैलेंडर फैनआउट कैप', + 'settings.ai.subconsciousModelCalls': 'अवचेतन मॉडल कॉल', + 'settings.ai.composioSyncScans': 'Composio सिंक स्कैन', + 'settings.ai.totalBackgroundApiReadBudget': 'कुल बीजी API बजट पढ़ें', + 'settings.ai.memoryWorkerPolls': 'स्मृति कार्यकर्ता सर्वेक्षण', + 'settings.ai.defaultProviderName': 'OpenHuman', + 'settings.ai.routing.managed': 'प्रबंधित', + 'settings.ai.routing.managedDesc': + 'OpenHuman बादल में सभी अनुमान चला जाएगा, कार्य के लिए सबसे अच्छा मॉडल चुनें, लागत के लिए अनुकूलन करें और सबसे सुरक्षित रूटिंग डिफ़ॉल्ट रखें।', + 'settings.ai.routing.managedMsg': + 'OpenHuman प्रत्येक कार्यभार के लिए सभी अनुमानों को संभालेंगे और स्वचालित रूप से लागत, गुणवत्ता और सुरक्षा के लिए सबसे अच्छा मार्ग चुनें।', + 'settings.ai.routing.useYourOwn': 'अपने खुद के मॉडल का प्रयोग करें', + 'settings.ai.routing.useYourOwnDesc': + 'एक प्रदाता + मॉडल चुनें और उसके माध्यम से हर कार्यभार को रूट करें। यह सरल है, लेकिन यह अक्षम हो सकता है क्योंकि हल्के और भारी वजन अनुमान सभी समान मार्ग साझा करते हैं।', + 'settings.ai.routing.advanced': 'उन्नत', + 'settings.ai.routing.advancedDesc': + 'विभिन्न कार्यों के लिए विभिन्न मॉडल चुनें। यह तंग लागत अनुकूलन और सबसे अधिक नियंत्रण के लिए सबसे अच्छा विकल्प है।', + 'settings.ai.routing.customDesc': + 'फाइन-ग्रेन रूटिंग आपको सर्वोत्तम लागत अनुकूलन और सबसे अधिक नियंत्रण देता है। यह तय करने के लिए नीचे की पंक्तियों का उपयोग करें कि कौन से वर्कलोड प्रबंधित रहते हैं, जो आपके साझा डिफ़ॉल्ट का उपयोग करते हैं, और जो एक विशिष्ट मॉडल के लिए पिन करते हैं।', + 'settings.ai.routing.chatAndConversations': 'चैट और बातचीत', + 'settings.ai.routing.chatDesc': + 'मॉडल प्रत्यक्ष उपयोगकर्ता बातचीत, उत्तर, तर्क, एजेंट छोरों और कोडिंग मदद के दौरान इस्तेमाल किया।', + 'settings.ai.routing.backgroundTasks': 'पृष्ठभूमि कार्य', + 'settings.ai.routing.bgTasksDesc': + 'मॉडल संक्षेपण, दिल की धड़कन, सीखने और अवचेतन मूल्यांकन के लिए मुख्य बातचीत प्रवाह के बाहर इस्तेमाल किया।', + 'settings.ai.routing.addCustomProvider': 'कस्टम प्रदाता जोड़ें', + 'settings.ai.globalModel.title': 'हर चीज़ के लिए एक मॉडल चुनें', + 'settings.ai.globalModel.desc': + 'यह एक मॉडल के माध्यम से सभी inference मार्गों। यह सरल है, लेकिन यह लागत और गुणवत्ता के लिए अक्षम हो सकता है क्योंकि हल्के और भारी कार्य सभी एक ही मार्ग का उपयोग करेंगे।', + 'settings.ai.globalModel.noProviders': + 'पहले प्रदाता को जोड़ें या कनेक्ट करें। फिर आप यहां एक मॉडल के माध्यम से हर कार्यभार को रूट कर सकते हैं।', + 'settings.ai.globalModel.provider': 'प्रदाता', + 'settings.ai.globalModel.model': 'मॉडल', + 'settings.ai.globalModel.loadingModels': 'मॉडल लोड हो रहे हैं…', + 'settings.ai.globalModel.enterModelId': 'मॉडल आईडी दर्ज करें', + 'settings.ai.globalModel.appliesToAll': + 'उसी प्रदाता + मॉडल को चैट, तर्क, कोडिंग, मेमोरी, हार्टबीट, लर्निंग और अवचेतन को लागू करता है। एम्बेडिंग को अलग से कॉन्फ़िगर किया गया है। जब आप सेव पर क्लिक करते हैं तो चेंज सेव करते हैं।', + 'settings.ai.globalModel.saving': 'सहेजा जा रहा है...', + 'settings.ai.globalModel.saved': 'सहेजा गया', + 'settings.ai.workload.noModel': 'कोई मॉडल चयनित नहीं', + 'settings.ai.workload.changeModel': 'मॉडल बदलें', + 'settings.ai.workload.chooseModel': 'मॉडल चुनें', + 'settings.ai.provider.ollama': 'Ollama', + 'settings.autocomplete.appFilter.acceptSuggestion': 'सुझाव एक्सेप्ट करें', + 'settings.autocomplete.appFilter.app': 'ऐप', + 'settings.autocomplete.appFilter.currentSuggestion': 'वर्तमान सुझाव', + 'settings.autocomplete.appFilter.contextOverride': 'कॉन्टेक्स्ट ओवरराइड (वैकल्पिक)', + 'settings.autocomplete.appFilter.debounce': 'बहस', + 'settings.autocomplete.appFilter.debugFocus': 'डिबग फोकस', + 'settings.autocomplete.appFilter.enabled': 'सक्षम', + 'settings.autocomplete.appFilter.getSuggestion': 'सुझाव पाएं', + 'settings.autocomplete.appFilter.lastError': 'अंतिम त्रुटि', + 'settings.autocomplete.appFilter.liveLogs': 'लाइव लॉग्स', + 'settings.autocomplete.appFilter.model': 'मॉडल', + 'settings.autocomplete.appFilter.noLogs': ') :', + 'settings.autocomplete.appFilter.phase': 'चरण', + 'settings.autocomplete.appFilter.platformSupported': 'मंच समर्थित', + 'settings.autocomplete.appFilter.refreshStatus': 'रिफ्रेश हो रहा है…', + 'settings.autocomplete.appFilter.refreshing': 'रिफ्रेश हो रहा है…', + 'settings.autocomplete.appFilter.running': 'चल रहा है', + 'settings.autocomplete.appFilter.runtime': 'रनटाइम', + 'settings.autocomplete.appFilter.test': 'टेस्ट', + 'settings.autocomplete.completionStyle.acceptedCompletion': + '{count} स्वीकृत कम्प्लीशन संग्रहीत — भविष्य के सुझावों को निजीकृत करने के लिए उपयोग किया गया।', + 'settings.autocomplete.completionStyle.acceptedCompletions': + '{count} स्वीकृत कम्प्लीशन संग्रहीत — भविष्य के सुझावों को निजीकृत करने के लिए उपयोग किया गया।', + 'settings.autocomplete.completionStyle.clearHistory': 'क्लियर हो रहा है…', + 'settings.autocomplete.completionStyle.clearing': 'क्लियर हो रहा है…', + 'settings.autocomplete.completionStyle.debounce': 'डिबाउंस (ms)', + 'settings.autocomplete.completionStyle.enabled': 'चालू है', + 'settings.autocomplete.completionStyle.maxChars': 'मैक्स कैरेक्टर', + 'settings.autocomplete.completionStyle.noHistory': + 'अभी कोई एक्सेप्टेड कम्पलीशन नहीं। पर्सनलाइज़ेशन शुरू करने के लिए Tab से सुझाव एक्सेप्ट करें।', + 'settings.autocomplete.completionStyle.overlayTtl': 'ओवरले TTL (ms)', + 'settings.autocomplete.completionStyle.personalizationHistory': 'पर्सनलाइज़ेशन हिस्ट्री', + 'settings.autocomplete.completionStyle.styleExamples': 'स्टाइल उदाहरण (एक प्रति लाइन)', + 'settings.autocomplete.completionStyle.styleInstructions': 'स्टाइल इंस्ट्रक्शन', + 'settings.autocomplete.debug.acceptedPrefix': 'स्वीकृत: {value}', + 'settings.autocomplete.debug.acceptFailed': 'सुझाव स्वीकार करने में विफल', + 'settings.autocomplete.debug.alreadyRunning': 'स्वत: पूर्ण पहले से ही चल रहा है.', + 'settings.autocomplete.debug.clearHistoryFailed': 'इतिहास साफ़ करने में विफल', + 'settings.autocomplete.debug.didNotStart': 'स्वत: पूर्ण प्रारंभ नहीं हुआ.', + 'settings.autocomplete.debug.disabledInSettings': + 'सेटिंग्स में स्वत: पूर्ण अक्षम है. इसे इनेबल करें और पहले सेव करें।', + 'settings.autocomplete.debug.fetchSuggestionFailed': 'वर्तमान सुझाव लाने में विफल', + 'settings.autocomplete.debug.inspectFocusedElementFailed': + 'केंद्रित तत्व का निरीक्षण करने में विफल', + 'settings.autocomplete.debug.loadSettingsFailed': 'स्वतः पूर्ण सेटिंग लोड करने में विफल', + 'settings.autocomplete.debug.noSuggestionApplied': 'कोई सुझाव लागू नहीं किया गया.', + 'settings.autocomplete.debug.noSuggestionReturned': 'कोई सुझाव वापस नहीं आया.', + 'settings.autocomplete.debug.refreshStatusFailed': 'स्वतः पूर्ण स्थिति ताज़ा करने में विफल', + 'settings.autocomplete.debug.saveAdvancedSettingsFailed': 'उन्नत सेटिंग्स सहेजने में विफल', + 'settings.autocomplete.debug.startFailed': 'स्वतः पूर्ण प्रारंभ करने में विफल', + 'settings.autocomplete.debug.stopFailed': 'स्वतः पूर्णता रोकने में विफल', + 'settings.autocomplete.debug.suggestionPrefix': 'सुझाव: {value}', + 'settings.autocomplete.shared.none': 'कोई नहीं', + 'settings.autocomplete.shared.notApplicable': 'एन/ए', + 'settings.autocomplete.shared.unknown': 'अज्ञात', + 'settings.billing.autoRecharge.addAmount': 'यह राशि जोड़ें', + 'settings.billing.autoRecharge.addCard': 'कार्ड जोड़ें', + 'settings.billing.autoRecharge.amountHint': 'राशि संकेत', + 'settings.billing.autoRecharge.defaultCard': 'डिफ़ॉल्ट कार्ड', + 'settings.billing.autoRecharge.lastRechargeFailed': 'आखिरी रिचार्ज विफल', + 'settings.billing.autoRecharge.lastRecharged': 'आखिरी रिचार्ज', + 'settings.billing.autoRecharge.expires': 'समाप्त {date}', + 'settings.billing.autoRecharge.noCards': 'कोई कार्ड नहीं', + 'settings.billing.autoRecharge.paymentMethods': 'पेमेंट तरीके', + 'settings.billing.autoRecharge.rechargeInProgress': 'रिचार्ज हो रहा है', + 'settings.billing.autoRecharge.spentThisWeek': + 'इस सप्ताह ${limit} में से ${spent} का उपयोग किया गया', + 'settings.billing.autoRecharge.rechargeWhen': 'बैलेंस इससे कम होने पर रिचार्ज करें', + 'settings.billing.autoRecharge.saveSettings': 'सेव हो रहा है…', + 'settings.billing.autoRecharge.saving': 'सेव हो रहा है…', + 'settings.billing.autoRecharge.setDefault': ':', + 'settings.billing.autoRecharge.subtitle': 'उपशीर्षक', + 'settings.billing.autoRecharge.title': 'ऑटो-रिचार्ज चालू करें', + 'settings.billing.autoRecharge.toggleAriaLabel': 'ऑटो-रिचार्ज टॉगल करें', + 'settings.billing.autoRecharge.weeklyLimit': 'साप्ताहिक खर्च सीमा', + 'settings.billing.history.desc': 'विवरण', + 'settings.billing.history.empty': 'खाली है', + 'settings.billing.history.openPortal': 'पोर्टल खोलें', + 'settings.billing.history.posted': 'पोस्ट हुआ', + 'settings.billing.history.title': 'शीर्षक', + 'settings.billing.inferenceBudget.cycleEnds': 'साइकल खत्म होती है', + 'settings.billing.inferenceBudget.exhausted': 'खत्म हो गया', + 'settings.billing.inferenceBudget.loadError': 'लोड एरर', + 'settings.billing.inferenceBudget.noBudgetDesc': 'कोई बजट विवरण नहीं', + 'settings.billing.inferenceBudget.noRecurringBudget': 'कोई रेकरिंग बजट नहीं', + 'settings.billing.inferenceBudget.noRecurringPlanBudget': 'कोई आवर्ती योजना बजट नहीं', + 'settings.billing.inferenceBudget.noRecurringWeeklyDesc': + 'आपकी वर्तमान योजना में एक आवर्ती साप्ताहिक अनुमान बजट शामिल नहीं है। उपयोग के बजाय उपलब्ध क्रेडिट से भुगतान किया जाता है।', + 'settings.billing.inferenceBudget.remaining': 'बचा हुआ', + 'settings.billing.inferenceBudget.remainingSummary': '{remaining} / {budget} शेष', + 'settings.billing.inferenceBudget.spentThisCycle': 'इस चक्र में {amount} खर्च हुआ', + 'settings.billing.inferenceBudget.cycleEndsOn': 'चक्र समाप्त होता है {date}', + 'settings.billing.inferenceBudget.exhaustedDesc': + 'शामिल सदस्यता उपयोग समाप्त हो गया है। अगले चक्र के लिए इंतजार किए बिना एआई का उपयोग करने के लिए शीर्ष क्रेडिट।', + 'settings.billing.inferenceBudget.discountVsPayg': + '{pct}% वेतन के रूप में आप जाओ की तुलना में प्रति कॉल सस्ता है।', + 'settings.billing.inferenceBudget.cycleSpend': 'साइकिल खर्च', + 'settings.billing.inferenceBudget.totalAmount': '{amount} कुल', + 'settings.billing.inferenceBudget.inference': 'अनुमान', + 'settings.billing.inferenceBudget.integrations': 'एकीकरण', + 'settings.billing.inferenceBudget.calls': '{count} कॉल', + 'settings.billing.inferenceBudget.dailySpend': 'दैनिक खर्च', + 'settings.billing.inferenceBudget.dailySpendPoint': '{date}: {amount}', + 'settings.billing.inferenceBudget.topModels': 'शीर्ष मॉडल', + 'settings.billing.inferenceBudget.noInferenceUsage': 'इस चक्र का कोई अनुमान उपयोग नहीं।', + 'settings.billing.inferenceBudget.topIntegrations': 'शीर्ष एकीकरण', + 'settings.billing.inferenceBudget.noIntegrationUsage': 'इस चक्र में कोई एकीकरण उपयोग नहीं।', + 'settings.billing.inferenceBudget.tenHourCap': 'दस घंटे की सीमा', + 'settings.billing.inferenceBudget.title': 'शीर्षक', + 'settings.billing.inferenceBudget.unableToLoad': 'उपयोग डेटा लोड करने में असमर्थ', + 'settings.billing.inferenceBudget.notAvailable': 'एन/ए', + 'settings.billing.payAsYouGo.available': 'उपलब्ध', + 'settings.billing.payAsYouGo.chargeCustomAmount': 'खुल रहा है…', + 'settings.billing.payAsYouGo.chooseTopUpDesc': 'टॉप अप चुनें विवरण', + 'settings.billing.payAsYouGo.chooseTopUpTitle': 'टॉप अप चुनें शीर्षक', + 'settings.billing.payAsYouGo.creditBalanceDesc': 'क्रेडिट बैलेंस विवरण', + 'settings.billing.payAsYouGo.creditBalanceTitle': 'क्रेडिट बैलेंस शीर्षक', + 'settings.billing.payAsYouGo.customAmount': 'कस्टम राशि', + 'settings.billing.payAsYouGo.enterAmount': 'राशि डालें', + 'settings.billing.payAsYouGo.opening': 'खोला जा रहा है', + 'settings.billing.payAsYouGo.promotionalCredits': 'प्रमोशनल क्रेडिट', + 'settings.billing.payAsYouGo.topUpBalance': 'बैलेंस टॉप-अप', + 'settings.billing.payAsYouGo.topUpCredits': 'क्रेडिट टॉप अप करें', + 'settings.billing.payAsYouGo.unableToLoad': 'बैलेंस लोड नहीं हो पाया।', + 'settings.billing.subscription.annual': 'वार्षिक', + 'settings.billing.subscription.billedAnnually': 'सालाना बिल होता है', + 'settings.billing.subscription.chooseSubtitle': 'उपशीर्षक चुनें', + 'settings.billing.subscription.chooseTitle': 'शीर्षक चुनें', + 'settings.billing.subscription.cryptoDesc': 'क्रिप्टो विवरण', + 'settings.billing.subscription.cryptoQuestion': 'क्रिप्टो प्रश्न', + 'settings.billing.subscription.current': 'मौजूदा', + 'settings.billing.subscription.currentPlan': 'मौजूदा प्लान', + 'settings.billing.subscription.monthly': 'मासिक', + 'settings.billing.subscription.paymentConfirmed': 'पेमेंट कन्फर्म हुई', + 'settings.billing.subscription.perMonth': 'प्रति माह', + 'settings.billing.subscription.popular': 'लोकप्रिय', + 'settings.billing.subscription.save': '{pct}', + 'settings.billing.subscription.upgrade': 'अपग्रेड करें', + 'settings.billing.subscription.waiting': 'इंतज़ार हो रहा है', + 'settings.billing.subscription.waitingPayment': 'पेमेंट का इंतज़ार', + 'settings.composio.apiKeyDesc': 'इस डिवाइस पर वर्तमान में एक Composio API कुंजी संग्रहीत है।', + 'settings.composio.apiKeyExamplePlaceholder': 'ck_live_xxxxxxxxxxxxxxxx', + 'settings.composio.apiKeyLabel': 'Composio API कुंजी', + 'settings.composio.apiKeyStored': 'API कुंजी संग्रहीत', + 'settings.composio.apiKeyStoredPlaceholder': + '••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••', + 'settings.composio.clearedToBackend': 'Backend मोड पर स्विच हुआ', + 'settings.composio.confirmItem1': 'app.composio.dev पर API कुंजी के साथ एक खाता', + 'settings.composio.confirmItem2': + 'अपने व्यक्तिगत Composio खाते के माध्यम से प्रत्येक एकीकरण को फिर से लिंक करना', + 'settings.composio.confirmItem3': + 'नोट: Composio ट्रिगर्स (रीयल-टाइम वेबहुक्स) डायरेक्ट मोड में अभी फायर नहीं होते — केवल सिंक्रोनस टूल कॉल्स', + 'settings.composio.confirmNeedItems': 'आपको चाहिए:', + 'settings.composio.confirmSwitch': 'मैं समझ गया, डायरेक्ट पर स्विच करें', + 'settings.composio.confirmTitle': '⚠️ डायरेक्ट मोड पर स्विच कर रहे हैं', + 'settings.composio.confirmWarning': + 'आपके मौजूदा एकीकरण (Gmail, Slack, GitHub, आदि OpenHuman के माध्यम से लिंक किए गए) दिखाई नहीं देंगे — वे OpenHuman-प्रबंधित Composio टेनेंट में रहते हैं।', + 'settings.composio.intro': + 'Composio 250+ बाहरी ऐप्स को टूल्स के रूप में एकीकृत करता है जिन्हें आपका एजेंट कॉल कर सकता है। चुनें कि वे टूल कॉल कैसे रूट किए जाएँ।', + 'settings.composio.title': 'Composio', + 'settings.composio.modeDirect': 'डायरेक्ट (अपनी API key लाएं)', + 'settings.composio.modeDirectDesc': + 'कॉल सीधे backend.composio.dev पर जाती हैं। संप्रभु / ऑफ़लाइन-अनुकूल। टूल निष्पादन सिंक्रोनस रूप से कार्य करता है; रीयल-टाइम ट्रिगर वेबहुक्स अभी डायरेक्ट मोड में रूट नहीं हैं (फॉलो-अप मुद्दा)।', + 'settings.composio.modeManaged': 'मैनेज्ड (OpenHuman मैनेज करेगा)', + 'settings.composio.modeManagedDesc': + 'OpenHuman हमारे बैकएंड के माध्यम से टूल कॉल्स को प्रॉक्सी करता है (अनुशंसित)। प्रमाणीकरण ब्रोकर किया जाता है; आप कभी भी Composio API कुंजी पेस्ट नहीं करते। वेबहुक्स पूरी तरह से रूट किए जाते हैं।', + 'settings.composio.routingMode': 'रूटिंग मोड', + 'settings.composio.saveErrorNoKey': + 'सहेजने में विफल। डायरेक्ट मोड के लिए गैर-रिक्त API कुंजी आवश्यक है।', + 'settings.composio.saving': 'सेव हो रहा है…', + 'settings.composio.switching': 'स्विच हो रहा है…', + 'settings.companion.title': 'डेस्कटॉप साथी', + 'settings.companion.session': 'सत्र', + 'settings.companion.activeLabel': 'सक्रिय', + 'settings.companion.inactiveStatus': 'निष्क्रिय', + 'settings.companion.stopping': 'रुक रहा हूँ...', + 'settings.companion.stopSession': 'सत्र रोकें', + 'settings.companion.starting': 'शुरू हो रहा है...', + 'settings.companion.startSession': 'सत्र प्रारंभ करें', + 'settings.companion.sessionId': 'सत्र आईडी', + 'settings.companion.turns': 'बदल जाता है', + 'settings.companion.remaining': 'शेष', + 'settings.companion.configuration': 'विन्यास', + 'settings.companion.hotkey': 'हॉटकी', + 'settings.companion.activationMode': 'सक्रियण मोड', + 'settings.companion.sessionTtl': 'सत्र टीटीएल', + 'settings.companion.screenCapture': 'स्क्रीन कैप्चर', + 'settings.companion.appContext': 'ऐप संदर्भ', + 'settings.cron.jobs.desc': 'विवरण', + 'settings.cron.jobs.empty': 'कोई कोर cron job नहीं मिला।', + 'settings.cron.jobs.lastStatus': 'आखिरी स्टेटस', + 'settings.cron.jobs.loading': 'Cron jobs लोड हो रही हैं...', + 'settings.cron.jobs.loadingRuns': 'रन लोड हो रहे हैं', + 'settings.cron.jobs.nextRun': 'अगला रन', + 'settings.cron.jobs.pause': 'रोकें', + 'settings.cron.jobs.paused': 'रोका गया', + 'settings.cron.jobs.recentRuns': 'हाल के रन', + 'settings.cron.jobs.removing': 'हटाया जा रहा है', + 'settings.cron.jobs.resume': 'फिर शुरू करें', + 'settings.cron.jobs.runningNow': 'अभी चल रहा है', + 'settings.cron.jobs.saving': 'सेव हो रहा है…', + 'settings.cron.jobs.schedule': 'शेड्यूल', + 'settings.cron.jobs.title': 'कोर Cron Jobs', + 'settings.cron.jobs.viewRuns': 'रन देखें', + 'settings.localModel.deviceCapability.active': 'एक्टिव', + 'settings.localModel.deviceCapability.appliedTier': 'लागू टियर', + 'settings.localModel.deviceCapability.applying': 'लागू हो रहा है', + 'settings.localModel.deviceCapability.cores': '{count}', + 'settings.localModel.deviceCapability.couldNotLoadPresets': 'प्रीसेट लोड नहीं हो पाई', + 'settings.localModel.deviceCapability.cpu': 'CPU', + 'settings.localModel.deviceCapability.customModelIds': 'कस्टम मॉडल IDs', + 'settings.localModel.deviceCapability.detected': 'डिटेक्ट हुआ', + 'settings.localModel.deviceCapability.disabled': 'बंद है', + 'settings.localModel.deviceCapability.disabledDesc': 'अक्षम विवरण', + 'settings.localModel.deviceCapability.downloadingModels': '(मॉडल डाउनलोड हो रहे हैं)', + 'settings.localModel.deviceCapability.downloadingSetupDesc': + 'OllamaSetup इन्स्टॉलर (~2 GB) डाउनलोड और अनपैक हो रहा है। पहली इन्स्टॉल पर एक मिनट लग सकता है।', + 'settings.localModel.deviceCapability.failedToApplyPreset': 'प्रीसेट लागू नहीं हो पाई', + 'settings.localModel.deviceCapability.gpu': 'GPU', + 'settings.localModel.deviceCapability.installFailed': 'Ollama इन्स्टॉल विफल', + 'settings.localModel.deviceCapability.installFailedDesc': + 'Ollama यूज़ेबल होने से पहले इन्स्टॉलर बंद हो गया। दोबारा कोशिश करें या ollama.com से मैन्युअली इन्स्टॉल करें।', + 'settings.localModel.deviceCapability.installFirst': 'पहले Ollama चलाएँ।', + 'settings.localModel.deviceCapability.installFirstDesc': + 'स्थानीय टियर बाहरी रूप से प्रबंधित Ollama एंडपॉइंट पर निर्भर हैं। इसे स्वयं प्रारंभ करें, अपने इच्छित मॉडल खींचें, और जब तक रनटाइम पहुँच योग्य न हो तब तक "Disabled (cloud fallback)" का उपयोग करते रहें।', + 'settings.localModel.deviceCapability.installOllamaFirst': + 'इस टियर का उपयोग करने के लिए पहले Ollama चलाएँ', + 'settings.localModel.deviceCapability.installingOllama': 'Ollama इन्स्टॉल हो रहा है', + 'settings.localModel.deviceCapability.loadingDeviceInfo': 'डिवाइस जानकारी लोड हो रही है', + 'settings.localModel.deviceCapability.localAiDisabled': + 'लोकल AI बंद है — क्लाउड फ़ॉलबैक इस्तेमाल हो रहा है।', + 'settings.localModel.deviceCapability.modelTier': 'मॉडल टियर', + 'settings.localModel.deviceCapability.needsOllama': 'Ollama ज़रूरी है', + 'settings.localModel.deviceCapability.notDetected': 'डिटेक्ट नहीं हुआ', + 'settings.localModel.deviceCapability.disabledLowercase': 'अक्षम', + 'settings.localModel.deviceCapability.presetDetails': + 'चैट: {chatModel} · दृष्टि: {visionModel} · लक्ष्य रैम: {targetRamGb} जीबी', + 'settings.localModel.deviceCapability.ram': 'RAM', + 'settings.localModel.deviceCapability.recommended': 'सुझावित', + 'settings.localModel.deviceCapability.retryInstall': 'फिर से कोशिश हो रही है…', + 'settings.localModel.deviceCapability.retrying': 'फिर से कोशिश हो रही है…', + 'settings.localModel.deviceCapability.starting': 'शुरू हो रहा है…', + 'settings.localModel.download.audioPathPlaceholder': 'ऑडियो फाइल का Absolute path', + 'settings.localModel.download.capabilityChat': 'बातचीत', + 'settings.localModel.download.capabilityEmbedding': 'एंबेडिंग', + 'settings.localModel.download.capabilityAssets': 'कैपेबिलिटी असेट्स', + 'settings.localModel.download.capabilityStt': 'STT', + 'settings.localModel.download.capabilityTts': 'TTS', + 'settings.localModel.download.capabilityVision': 'दृष्टि', + 'settings.localModel.download.downloading': 'डाउनलोड हो रहा है...', + 'settings.localModel.download.embeddingDimensions': 'आयाम: {dimensions}', + 'settings.localModel.download.embeddingModel': 'मॉडल: {modelId}', + 'settings.localModel.download.embeddingPlaceholder': 'एक इनपुट स्ट्रिंग प्रति लाइन...', + 'settings.localModel.download.embeddingVectors': 'वेक्टर: {count}', + 'settings.localModel.download.noThinkMode': 'नो थिंक मोड', + 'settings.localModel.download.notAvailable': 'एन/ए', + 'settings.localModel.download.promptPlaceholder': + 'कोई भी prompt टाइप करें और लोकल मॉडल पर चलाएं...', + 'settings.localModel.download.quantizationPref': 'क्वांटाइज़ेशन प्राथमिकता', + 'settings.localModel.download.runEmbeddingTest': 'चल रहा है...', + 'settings.localModel.download.runPromptTest': 'प्रॉम्प्ट टेस्ट चलाएँ', + 'settings.localModel.download.runSummaryTest': 'सारांश टेस्ट चलाएँ', + 'settings.localModel.download.runTranscriptionTest': 'चल रहा है...', + 'settings.localModel.download.runTtsTest': 'चल रहा है...', + 'settings.localModel.download.runVisionTest': 'चल रहा है...', + 'settings.localModel.download.running': 'चल रहा है...', + 'settings.localModel.download.runningPrompt': 'Prompt चल रहा है', + 'settings.localModel.download.summaryHelper': + 'रस्ट कोर के माध्यम से `openhuman.inference_summarize` को कॉल करता है', + 'settings.localModel.download.summarizePlaceholder': + 'लोकल मॉडल से समराइज़ करने के लिए टेक्स्ट पेस्ट करें...', + 'settings.localModel.download.testCustomPrompt': 'कस्टम Prompt टेस्ट करें', + 'settings.localModel.download.testEmbeddings': 'एम्बेडिंग टेस्ट करें', + 'settings.localModel.download.testSummarization': 'समराइज़ेशन टेस्ट करें', + 'settings.localModel.download.testVisionPrompt': 'विज़न Prompt टेस्ट करें', + 'settings.localModel.download.testVoiceInput': 'वॉइस इनपुट टेस्ट करें (STT)', + 'settings.localModel.download.testVoiceOutput': 'वॉइस आउटपुट टेस्ट करें (TTS)', + 'settings.localModel.download.transcript': 'प्रतिलेख:', + 'settings.localModel.download.ttsOutput': 'आउटपुट: {outputPath}', + 'settings.localModel.download.ttsOutputPlaceholder': 'वैकल्पिक आउटपुट WAV path', + 'settings.localModel.download.ttsPlaceholder': 'सिंथेसाइज़ करने के लिए टेक्स्ट डालें...', + 'settings.localModel.download.ttsVoice': 'आवाज़: {voiceId}', + 'settings.localModel.download.visionImagePlaceholder': + 'एक इमेज रेफरेंस प्रति लाइन (data URI, URL, या लोकल path मार्कर)', + 'settings.localModel.download.visionPromptPlaceholder': 'विज़न मॉडल के लिए prompt डालें...', + 'settings.localModel.status.allChecksPassed': 'सभी चेक पास हुए', + 'settings.localModel.status.artifact': 'आर्टिफैक्ट', + 'settings.localModel.status.backend': 'बैकएंड', + 'settings.localModel.status.binary': 'बाइनरी', + 'settings.localModel.status.bootstrapResume': 'बूटस्ट्रैप / फिर से शुरू', + 'settings.localModel.status.checking': 'चेक हो रहा है...', + 'settings.localModel.status.checkingOllama': 'Ollama चेक हो रहा है', + 'settings.localModel.status.contextBelowMinimumBadge': + '{contextLength} ctx - {required} मिनट से नीचे', + 'settings.localModel.status.contextBelowMinimumTitle': + 'अस्वीकृत: संदर्भ विंडो {contextLength} टोकन मेमोरी परत के लिए आवश्यक न्यूनतम {required}-टोकन से नीचे है। मौन काट-छाँट से स्मरण भ्रष्ट हो जाएगा।', + 'settings.localModel.status.contextOkBadge': '{contextLength} ctx ✓', + 'settings.localModel.status.contextOkTitle': + 'संदर्भ विंडो {contextLength} टोकन न्यूनतम {required} टोकन की मेमोरी-लेयर को पूरा करती है।', + 'settings.localModel.status.contextUnknownBadge': 'सीटीएक्स अज्ञात', + 'settings.localModel.status.contextUnknownTitle': + 'प्रसंग विंडो अज्ञात; इसकी पुष्टि नहीं हो सकी कि यह न्यूनतम {required}-टोकन मेमोरी-लेयर को पूरा करता है।', + 'settings.localModel.status.customLocation': 'कस्टम लोकेशन', + 'settings.localModel.status.customLocationDesc': 'कस्टम स्थान विवरण', + 'settings.localModel.status.diagnosticsHint': + 'यह सत्यापित करने के लिए "Run Diagnostics" पर क्लिक करें कि Ollama चल रहा है और मॉडल इंस्टॉल हैं।', + 'settings.localModel.status.downloadingUnknown': 'डाउनलोड हो रहा है (साइज़ अज्ञात)', + 'settings.localModel.status.eta': 'ETA', + 'settings.localModel.status.expectedModels': 'एक्सपेक्टेड मॉडल', + 'settings.localModel.status.expectedChat': 'चैट: {model}', + 'settings.localModel.status.expectedEmbedding': 'एम्बेडिंग: {model}', + 'settings.localModel.status.expectedVision': 'दृष्टि: {model}', + 'settings.localModel.status.externalProcess': 'बाह्य प्रक्रिया', + 'settings.localModel.status.forceRebootstrap': 'बल पुनः बूटस्ट्रैप', + 'settings.localModel.status.generationTps': 'जनरेशन TPS', + 'settings.localModel.status.hideErrorDetails': 'एरर डिटेल्स छुपाएं', + 'settings.localModel.status.installManually': 'मैन्युअली इन्स्टॉल करें', + 'settings.localModel.status.installManuallyFrom': 'यहाँ से मैन्युअली इन्स्टॉल करें', + 'settings.localModel.status.installOllama': 'शुरू हो रहा है…', + 'settings.localModel.status.installedModels': 'इन्स्टॉल्ड मॉडल', + 'settings.localModel.status.installing': 'इन्स्टॉल हो रहा है...', + 'settings.localModel.status.installingOllama': 'Ollama रनटाइम इन्स्टॉल हो रहा है...', + 'settings.localModel.status.issues': 'समस्याएं', + 'settings.localModel.status.issuesFound': '{count} समस्या(एँ) मिलीं', + 'settings.localModel.status.lastLatency': 'आखिरी लेटेंसी', + 'settings.localModel.status.model': 'मॉडल', + 'settings.localModel.status.notAvailable': 'एन/ए', + 'settings.localModel.status.notFound': 'नहीं मिला', + 'settings.localModel.status.notRunning': 'नहीं चल रहा', + 'settings.localModel.status.ollamaBinaryPath': 'Ollama बाइनरी पथ', + 'localModel.ollamaServer.helperText': 'उदाहरण: http://192.168.1.5:11434', + 'localModel.ollamaServer.label': 'Ollama सर्वर URL', + 'localModel.ollamaServer.modelCount': 'मॉडल', + 'localModel.ollamaServer.placeholder': 'http://localhost:11434', + 'localModel.ollamaServer.reachable': 'पहुंचने योग्य', + 'localModel.ollamaServer.resetButton': 'डिफ़ॉल्ट पर रीसेट करें', + 'localModel.ollamaServer.saveButton': 'सहेजें', + 'localModel.ollamaServer.testButton': 'कनेक्शन जांचें', + 'localModel.ollamaServer.unreachable': 'पहुंचने योग्य नहीं', + 'localModel.ollamaServer.validationError': 'एक मान्य http:// या https:// URL होना चाहिए', + 'settings.localModel.status.ollamaDiagnostics': 'Ollama डायग्नोस्टिक्स', + 'settings.localModel.status.ollamaNotInstalled': 'Ollama रनटाइम अनुपलब्ध', + 'settings.localModel.status.ollamaNotInstalledDesc': + 'OpenHuman अब Ollama को एक बाहरी इन्फ़रेंस रनटाइम के रूप में मानता है। अपना खुद का Ollama सर्वर शुरू करें, अपने इच्छित मॉडल खींचें, और वर्कलोड रूटिंग को इसकी ओर इंगित करें।', + 'settings.localModel.status.progress': 'प्रगति', + 'settings.localModel.status.provider': 'प्रोवाइडर', + 'settings.localModel.status.retryBootstrap': 'Bootstrap फिर से करें', + 'settings.localModel.status.runDiagnostics': 'चेक हो रहा है...', + 'settings.localModel.status.running': 'चल रहा है', + 'settings.localModel.status.runningExternalProcess': 'एक्सटर्नल प्रोसेस से चल रहा है', + 'settings.localModel.status.runtimeStatus': 'रनटाइम स्टेटस', + 'settings.localModel.status.server': 'सर्वर', + 'settings.localModel.status.setPath': 'सेट हो रहा है...', + 'settings.localModel.status.setting': 'सेट हो रहा है...', + 'settings.localModel.status.showErrorDetails': 'एरर डिटेल्स छुपाएं', + 'settings.localModel.status.showInstallErrorDetails': 'एरर डिटेल्स छुपाएं', + 'settings.localModel.status.suggestedFixes': 'सुझाए गए समाधान', + 'settings.localModel.status.thenSetPath': 'फिर path सेट करें', + 'settings.localModel.status.triggering': 'ट्रिगर हो रहा है...', + 'settings.localModel.status.unavailable': 'उपलब्ध नहीं', + 'settings.localModel.status.working': 'काम हो रहा है...', + 'settings.developerMenu.ai.title': 'AI कॉन्फ़िगरेशन', + 'settings.developerMenu.ai.desc': 'क्लाउड प्रदाता, स्थानीय Ollama मॉडल, और प्रति-वर्कलोड रूटिंग', + 'settings.developerMenu.screenAwareness.title': 'स्क्रीन अवेयरनेस', + 'settings.developerMenu.screenAwareness.desc': + 'स्क्रीन कैप्चर अनुमतियां, मॉनिटरिंग नीति, और सत्र नियंत्रण', + 'settings.developerMenu.messagingChannels.title': 'मैसेजिंग चैनल', + 'settings.developerMenu.messagingChannels.desc': + 'Telegram/Discord प्रमाणीकरण मोड और डिफ़ॉल्ट चैनल रूटिंग कॉन्फ़िगर करें', + 'settings.developerMenu.tools.title': 'टूल्स', + 'settings.developerMenu.tools.desc': + 'OpenHuman आपकी ओर से जिन क्षमताओं का उपयोग कर सकता है, उन्हें सक्षम या अक्षम करें', + 'settings.developerMenu.agentChat.title': 'एजेंट चैट', + 'settings.developerMenu.agentChat.desc': + 'मॉडल और तापमान ओवरराइड के साथ एजेंट वार्तालाप का परीक्षण करें', + 'settings.developerMenu.devWorkflow.title': 'देव वर्कफ़्लो', + 'settings.developerMenu.devWorkflow.desc': + 'स्वायत्त एजेंट जो आपके GitHub मुद्दों को चुनता है और एक शेड्यूल पर PR को बढ़ाता है', + 'settings.developerMenu.devWorkflow.panelDesc': + 'एक स्वायत्त डेवलपर एजेंट को कॉन्फ़िगर करें जो आपको सौंपे गए GitHub मुद्दों को चुनता है और एक शेड्यूल पर स्वचालित रूप से अनुरोध खींचता है।', + 'settings.developerMenu.skillsRunner.title': 'कौशल धावक', + 'settings.developerMenu.skillsRunner.desc': + 'किसी भी बंडल कौशल ऐड-हॉक को चलाएं - अपने इनपुट को भरें और एक पृष्ठभूमि स्वायत्त रन को आग लगा दें', + 'settings.developerMenu.skillsRunner.panelDesc': + 'एक बंडल कौशल चुनें, अपने घोषित इनपुट को भरें और एक फायर-एंड-फॉरगेट पृष्ठभूमि रन को फायर करें। इसके बजाय देव वर्कफ़्लो का उपयोग करें यदि आप एक क्रोन-अनुसूचीबद्ध आवर्ती नौकरी चाहते हैं।', + 'settings.skillsRunner.skill': 'कौशल', + 'settings.skillsRunner.selectSkill': 'एक कौशल चुनें...', + 'settings.skillsRunner.loadingSkills': 'कौशल लोड हो रहा है...', + 'settings.skillsRunner.loadingDescription': 'कौशल इनपुट लोड हो रहा है...', + 'settings.skillsRunner.noInputs': 'यह कौशल कोई इनपुट घोषित नहीं करता है।', + 'settings.skillsRunner.placeholder.required': 'required', + 'settings.skillsRunner.runNow': 'अब भागो', + 'settings.skillsRunner.starting': 'शुरू', + 'settings.skillsRunner.started': 'शुरू किया - रन आईडी:', + 'settings.skillsRunner.logPath': 'लॉग:', + 'settings.skillsRunner.error.listSkills': 'लोड कौशल में विफल:', + 'settings.skillsRunner.error.describe': 'इनपुट लोड करने में विफल:', + 'settings.skillsRunner.error.missingRequired': 'मिसिंग आवश्यक इनपुट (s):', + 'settings.skillsRunner.error.run': 'रन शुरू करने में विफल रहा:', + 'settings.skillsRunner.error.preflightGate': 'Preflight गेट विफल', + 'settings.skillsRunner.schedule.heading': 'अनुसूची (आवर्ती)', + 'settings.skillsRunner.schedule.help': + 'इस कौशल + इनपुट को एक आवर्ती क्रोन नौकरी के रूप में सहेजें। एजेंट प्रत्येक टिक पर run skill कॉल करेगा।', + 'settings.skillsRunner.schedule.frequency': 'आवृत्ति', + 'settings.skillsRunner.schedule.every30min': '30 मिनट', + 'settings.skillsRunner.schedule.everyHour': 'हर घंटे', + 'settings.skillsRunner.schedule.every2hours': 'हर 2 घंटे', + 'settings.skillsRunner.schedule.every6hours': '6 घंटे', + 'settings.skillsRunner.schedule.onceDaily': 'एक बार दैनिक (9:00)', + 'settings.skillsRunner.schedule.save': 'अनुसूची सहेजें', + 'settings.skillsRunner.schedule.saving': 'बचत', + 'settings.skillsRunner.schedule.saved': 'अनुसूची बचाया।', + 'settings.skillsRunner.schedule.error': 'अनुसूची असफल:', + 'settings.skillsRunner.schedule.loadingJobs': 'मौजूदा अनुसूची लोड हो रहा है...', + 'settings.skillsRunner.schedule.noJobs': 'इस कौशल के लिए अभी तक कोई शेड्यूल नहीं बचा है।', + 'settings.skillsRunner.schedule.existing': 'इस कौशल के लिए अनुसूचित नौकरियां:', + 'settings.skillsRunner.schedule.runNow': 'रन', + 'settings.skillsRunner.schedule.remove': 'निकालें', + 'settings.skillsRunner.scheduleEnabled': 'सक्षम', + 'settings.skillsRunner.scheduleDisabled': 'दलित', + 'settings.skillsRunner.scheduleToggleAria': 'Toggle अनुसूची सक्षम', + 'settings.skillsRunner.schedule.history': 'इतिहास', + 'settings.skillsRunner.schedule.historyLoading': 'इतिहास', + 'settings.skillsRunner.schedule.historyEmpty': 'इस कार्यक्रम के लिए अभी तक कोई रन नहीं है।', + 'settings.skillsRunner.schedule.historyNoOutput': 'कोई आउटपुट कब्जा नहीं किया गया।', + 'settings.skillsRunner.schedule.active': 'सक्रिय', + 'settings.skillsRunner.schedule.lastRunLabel': 'अंतिम:', + 'settings.skillsRunner.recentRuns.headingForSkill': 'इस कौशल के लिए हाल ही में रन', + 'settings.skillsRunner.recentRuns.headingAll': 'हाल के कौशल रन (सभी)', + 'settings.skillsRunner.recentRuns.refresh': 'ताज़ा', + 'settings.skillsRunner.recentRuns.loading': 'हाल ही में रन लोड हो रहा है...', + 'settings.skillsRunner.recentRuns.empty': 'हाल ही में रन नहीं।', + 'settings.skillsRunner.viewer.loading': 'लॉग इन करें', + 'settings.skillsRunner.viewer.tailing': 'लाइव पूंछ', + 'settings.skillsRunner.viewer.fetching': 'प्राप्त करना', + 'settings.skillsRunner.viewer.error': 'लॉग इन असफल:', + 'settings.skillsRunner.repoPicker.loading': 'सम्पर्क करने का विवरण', + 'settings.skillsRunner.repoPicker.select': 'एक प्रस्तावना चुनें...', + 'settings.skillsRunner.repoPicker.empty': + 'कोई प्रस्ताव वापस नहीं आया। इस सूची को पॉप्युलेट करने के लिए Composio के माध्यम से GitHub कनेक्ट करें।', + 'settings.skillsRunner.repoPicker.notConnected': + 'GitHub Composio से जुड़ा नहीं है। इसे पहले कौशल → Composio के तहत कनेक्ट करें।', + 'settings.skillsRunner.repoPicker.privateTag': '(निजी)', + 'settings.skillsRunner.branchPicker.needRepo': 'पहले एक रेपो चुनें...', + 'settings.skillsRunner.branchPicker.loading': 'लोड हो रहा है...', + 'settings.skillsRunner.branchPicker.select': 'एक शाखा चुनें...', + 'settings.devWorkflow.githubRepository': 'GitHub रिपॉजिटरी', + 'settings.devWorkflow.loadingRepositories': 'सम्पर्क करने का विवरण', + 'settings.devWorkflow.selectRepository': 'प्रस्तावना का चयन करें', + 'settings.devWorkflow.privateTag': '(निजी)', + 'settings.devWorkflow.detectingForkInfo': 'फोर्क जानकारी का पता लगाना...', + 'settings.devWorkflow.forkDetected': 'फोर्क का पता लगाना', + 'settings.devWorkflow.upstream': 'अपस्ट्रीम', + 'settings.devWorkflow.forkPrNote': 'पीआर को अपस्ट्रीम भंडार के खिलाफ उठाया जाएगा।', + 'settings.devWorkflow.notForkNote': + 'एक कांटा नहीं। पीआर को सीधे इस प्रस्ताव के खिलाफ उठाया जाएगा।', + 'settings.devWorkflow.targetBranch': 'लक्ष्य शाखा', + 'settings.devWorkflow.targetBranchNote': 'इस शाखा के खिलाफ पीआर उठाए जाएंगे', + 'settings.devWorkflow.loadingBranches': 'लोड हो रहा है...', + 'settings.devWorkflow.runFrequency': 'रन फ्रीक्वेंसी', + 'settings.devWorkflow.runFrequencyNote': + 'अक्सर एजेंट को मुद्दों के लिए कैसे जांचना चाहिए और पीआर बढ़ाने चाहिए।', + 'settings.devWorkflow.updateConfiguration': 'अद्यतन विन्यास', + 'settings.devWorkflow.saveConfiguration': 'कॉन्फ़िगरेशन सहेजें', + 'settings.devWorkflow.remove': 'निकालें', + 'settings.devWorkflow.saved': 'सेव', + 'settings.devWorkflow.activeConfiguration': 'सक्रिय विन्यास', + 'settings.devWorkflow.activeConfigRepository': 'भंडार:', + 'settings.devWorkflow.activeConfigUpstream': 'अपस्ट्रीम', + 'settings.devWorkflow.activeConfigTargetBranch': 'लक्ष्य शाखा:', + 'settings.devWorkflow.activeConfigSchedule': 'अनुसूची:', + 'settings.devWorkflow.enabled': 'सक्षम', + 'settings.devWorkflow.paused': 'दलित', + 'settings.devWorkflow.nextRun': 'अगला', + 'settings.devWorkflow.lastRun': 'अंतिम रन', + 'settings.devWorkflow.runNow': 'अब भागो', + 'settings.devWorkflow.running': 'दौड़ना...', + 'settings.devWorkflow.recentRuns': 'हाल ही में रन', + 'settings.devWorkflow.cronSaveError': 'विन्यास को बचाने में विफल', + 'settings.devWorkflow.lastOutput': 'अंतिम उत्पादन', + 'settings.devWorkflow.noOutput': 'कोई आउटपुट कैप्चर नहीं', + 'settings.devWorkflow.runningStatus': + 'एजेंट चल रहा है - एक मुद्दा उठा रहा है और एक फिक्स पर काम कर रहा है...', + 'settings.devWorkflow.errorNotConnected': + 'GitHub कनेक्ट नहीं है। कृपया सेटिंग्स के माध्यम से GitHub कनेक्ट करें > उन्नत > Composio पहले।', + 'settings.devWorkflow.errorToolNotEnabled': + 'GITHUB_LIST_REPOSITORIES_FOR_THE_AUTHENTICATED_USER टूल इस बैकएंड पर सक्षम नहीं है। कृपया अपने व्यवस्थापक से Composio एकीकरण (backend#842) में इसे सक्षम करने के लिए कहें।', + 'settings.devWorkflow.errorNotAuthenticated': 'प्रमाणित नहीं है। कृपया पहले साइन इन करें।', + 'settings.devWorkflow.errorNoRepositories': 'इस GitHub खाते के लिए कोई प्रस्ताव नहीं मिला।', + 'settings.devWorkflow.schedule.every30min': '30 मिनट', + 'settings.devWorkflow.schedule.everyHour': 'हर घंटे', + 'settings.devWorkflow.schedule.every2hours': 'हर 2 घंटे', + 'settings.devWorkflow.schedule.every6hours': '6 घंटे', + 'settings.devWorkflow.schedule.onceDaily': 'एक बार दैनिक (9 AM)', + 'settings.developerMenu.cronJobs.title': 'Cron जॉब्स', + 'settings.developerMenu.cronJobs.desc': + 'रनटाइम स्किल्स के लिए शेड्यूल किए गए जॉब देखें और कॉन्फ़िगर करें', + 'settings.developerMenu.localModelDebug.title': 'लोकल मॉडल डिबग', + 'settings.developerMenu.localModelDebug.desc': + 'Ollama कॉन्फ़िगरेशन, एसेट डाउनलोड, मॉडल टेस्ट, और डायग्नोस्टिक्स', + 'settings.developerMenu.webhooks.title': 'वेबहुक्स', + 'settings.developerMenu.webhooks.desc': + 'रनटाइम वेबहुक रजिस्ट्रेशन और कैप्चर किए गए अनुरोध लॉग देखें', + 'settings.developerMenu.eventLog.title': 'घटना लॉग', + 'settings.developerMenu.eventLog.desc': + 'सभी एजेंट, टूल और सिस्टम इवेंट्स की लाइव कलर-कोडेड स्ट्रीम', + 'settings.developerMenu.eventLog.allTypes': 'सभी प्रकार', + 'settings.developerMenu.eventLog.filterAgent': 'फ़िल्टर...', + 'settings.developerMenu.eventLog.download': 'डाउनलोड', + 'settings.developerMenu.eventLog.events': 'कार्यक्रम', + 'settings.developerMenu.eventLog.live': 'लाइव', + 'settings.developerMenu.eventLog.disconnected': 'डिस्कनेक्ट', + 'settings.developerMenu.eventLog.waiting': 'घटनाओं के लिए प्रतीक्षा...', + 'settings.developerMenu.eventLog.notConnected': 'कोर से जुड़ा नहीं है', + 'settings.developerMenu.eventLog.jumpToLatest': 'नवीनतम', + 'settings.developerMenu.eventLog.badge.tool': 'TOOL', + 'settings.developerMenu.eventLog.badge.agent': 'AGENT', + 'settings.developerMenu.eventLog.badge.info': 'INFO', + 'settings.developerMenu.eventLog.badge.mem': 'MEM', + 'settings.developerMenu.eventLog.badge.chan': 'CHAN', + 'settings.developerMenu.eventLog.badge.cron': 'CRON', + 'settings.developerMenu.eventLog.badge.hook': 'HOOK', + 'settings.developerMenu.eventLog.badge.warn': 'WARN', + 'settings.developerMenu.eventLog.badge.skill': 'SKILL', + 'settings.developerMenu.eventLog.badge.comp': 'COMP', + 'settings.developerMenu.eventLog.badge.mcp': 'MCP', + 'settings.developerMenu.intelligence.title': 'इंटेलिजेंस', + 'settings.developerMenu.intelligence.desc': + 'मेमोरी वर्कस्पेस, सबकॉन्शस इंजन, ड्रीम्स, और सेटिंग्स', + 'settings.developerMenu.notificationRouting.title': 'नोटिफ़िकेशन रूटिंग', + 'settings.developerMenu.notificationRouting.desc': + 'AI महत्व स्कोरिंग और इंटीग्रेशन अलर्ट के लिए ऑर्केस्ट्रेटर एस्केलेशन', + 'settings.developerMenu.composeioTriggers.title': 'ComposeIO ट्रिगर्स', + 'settings.developerMenu.composeioTriggers.desc': 'ComposeIO ट्रिगर इतिहास और आर्काइव देखें', + 'settings.developerMenu.composioRouting.title': 'Composio रूटिंग (डायरेक्ट मोड)', + 'settings.developerMenu.composioRouting.desc': + 'अपनी Composio API कुंजी लाएं और कॉल सीधे backend.composio.dev पर रूट करें', + 'settings.developerMenu.integrationTriggers.title': 'इंटीग्रेशन ट्रिगर्स', + 'settings.developerMenu.integrationTriggers.desc': + 'Composio इंटीग्रेशन ट्रिगर्स के लिए AI ट्रायेज सेटिंग्स कॉन्फ़िगर करें', + 'settings.developerMenu.mcpServer.title': 'MCP सर्वर', + 'settings.developerMenu.mcpServer.desc': + 'OpenHuman से कनेक्ट करने के लिए बाहरी MCP क्लाइंट को कॉन्फ़िगर करें', + 'settings.developerMenu.autonomy.title': 'एजेंट स्वायत्तता', + 'settings.developerMenu.autonomy.desc': 'टूल क्रिया दर सीमाएँ और सुरक्षा सीमाएँ', + 'settings.mcpServer.title': 'MCP सर्वर', + 'settings.mcpServer.toolsSectionTitle': 'उपलब्ध उपकरण', + 'settings.mcpServer.toolsSectionDesc': + 'ओपनह्यूमन-कोर एमसीपी चलाने पर उपकरण MCP stdio सर्वर के माध्यम से उजागर होते हैं', + 'settings.mcpServer.configSectionTitle': 'क्लाइंट कॉन्फ़िगरेशन', + 'settings.mcpServer.configSectionDesc': + 'सही कॉन्फ़िगरेशन स्निपेट जनरेट करने के लिए अपना MCP क्लाइंट चुनें', + 'settings.mcpServer.copySnippet': 'क्लिपबोर्ड पर कॉपी करें', + 'settings.mcpServer.copied': 'नकल की गई!', + 'settings.mcpServer.openConfigFile': 'कॉन्फ़िग फ़ाइल खोलें', + 'settings.mcpServer.binaryPathNotFound': + 'OpenHuman बाइनरी नहीं मिली. यदि स्रोत से चल रहा है, तो इसके साथ निर्माण करें: cargo build --bin openhuman-core', + 'settings.mcpServer.openConfigError': 'कॉन्फ़िग फ़ाइल खोलने में विफल', + 'settings.mcpServer.clientClaudeDesktop': 'क्लाउड डेस्कटॉप', + 'settings.mcpServer.clientCursor': 'कर्सर', + 'settings.mcpServer.clientCodex': 'कोडेक्स', + 'settings.mcpServer.clientZed': 'जेड', + 'settings.mcpServer.configFilePath': 'कॉन्फ़िग फ़ाइल', + 'settings.mcpServer.clientSelectorAriaLabel': 'MCP ग्राहक चयनकर्ता', + 'settings.appearance.menuDesc': 'लाइट, डार्क, या सिस्टम थीम से मिलान चुनें', + 'settings.agentAccess.title': 'एजेंट OS एक्सेस', + 'settings.agentAccess.menuDesc': + 'जहां एजेंट read/write को नियंत्रित कर सकता है और क्या यह खोल का उपयोग कर सकता है।', + 'settings.agentAccess.loadError': 'पहुँच सेटिंग्स लोड करने में विफल', + 'settings.agentAccess.saveError': 'पहुँच सेटिंग्स को बचाने में विफल', + 'settings.agentAccess.saved': 'सेव्ड - आपके अगले संदेश पर लागू होता है।', + 'settings.agentAccess.desktopOnly': 'एक्सेस सेटिंग्स केवल डेस्कटॉप ऐप में उपलब्ध हैं।', + 'settings.agentAccess.loading': 'लोड...', + 'settings.agentAccess.accessMode': 'एक्सेस मोड', + 'settings.agentAccess.tier.readonly.title': 'केवल', + 'settings.agentAccess.tier.readonly.desc': + 'फ़ाइलों को पढ़ता है और केवल पढ़ने के आदेश का पता लगाने के लिए - लेकिन कभी लिखने, संपादित नहीं करता है, या किसी भी चीज को चलाता है जो राज्य बदलता है।', + 'settings.agentAccess.tier.supervised.title': 'संपादित करने से पहले पूछें', + 'settings.agentAccess.tier.supervised.desc': + 'नई फ़ाइलों को स्वतंत्र रूप से बनाता है, लेकिन मौजूदा फ़ाइल को संपादित करने से पहले अपनी मंजूरी के लिए पूछता है, एक कमांड चला रहा है, नेटवर्क तक पहुंचता है, या कुछ भी स्थापित करता है।', + 'settings.agentAccess.tier.full.title': 'पूर्ण पहुँच', + 'settings.agentAccess.tier.full.desc': + 'अपने पूर्ण उपयोगकर्ता खाता एक्सेस के साथ कमांड चलाएं - यह क्रेडेंशियल और सिस्टम स्टोर को छोड़कर कहीं भी read/write अनुमति दे सकता है। विनाशकारी कमांड, नेटवर्क एक्सेस और इंस्टॉल अभी भी अनुमोदन के लिए पूछते हैं।', + 'settings.agentAccess.defaultTag': '(डिफ़ॉल्ट)', + 'settings.agentAccess.fullWarning': + 'A full access to the full account access. जब आप इस मशीन के साथ एजेंट को rust करते हैं तो केवल इसे सक्षम करें। क्रेडेंशियल और सिस्टम डायरेक्टरी अवरुद्ध रहते हैं, और विनाशकारी, नेटवर्क और स्थापित कार्रवाई अभी भी अनुमोदन के लिए पूछते हैं।', + 'settings.agentAccess.confine.label': 'वर्कस्पेस को कॉन्फ़िगर करें', + 'settings.agentAccess.confine.desc': + 'एजेंट को वर्कस्पेस डायरेक्टरी (साथ किसी भी स्वीकृत फ़ोल्डर) में प्रतिबंधित करें, जो भी एक्सेस मोड का चयन किया जाता है। जब बंद हो जाता है, तो यह कहीं भी आपके उपयोगकर्ता तक पहुंच सकता है - हमेशा अवरुद्ध क्रेडेंशियल और सिस्टम डायरेक्टरी को छोड़कर।', + 'settings.agentAccess.requireTaskPlanApproval.label': 'कार्य योजना अनुमोदन की आवश्यकता', + 'settings.agentAccess.requireTaskPlanApproval.desc': + 'एक निर्धारित एजेंट से पहले रोकें एक एजेंट-लेखित कार्य संक्षिप्त निष्पादित करता है।', + 'settings.agentAccess.grantedFolders': 'स्वीकृत फ़ोल्डर', + 'settings.agentAccess.alwaysAllow': 'हमेशा की अनुमति उपकरण', + 'settings.agentAccess.alwaysAllowDesc': + 'उपकरण जिन्हें आपने बिना पूछे चैट रन में "अलवे अनुमति" चिह्नित किया। एक बार फिर से शुरू करने के लिए।', + 'settings.agentAccess.alwaysAllowNone': 'अभी तक कोई हमेशा की अनुमति नहीं है।', + 'settings.agentAccess.grantedDesc': + 'फ़ोल्डर्स एजेंट वर्कस्पेस के अलावा, पढ़ सकते हैं और लिख सकते हैं। क्रेडेंशियल स्टोर (~/.ssh, ~/.gnupg, ~/.aws, keychains) और सिस्टम डायरेक्टरीज (/etc, / System, C:\\ Windows),...) हमेशा अवरुद्ध होते हैं, यहां तक कि एक दिए गए फ़ोल्डर के अंदर भी।', + 'settings.agentAccess.noneGranted': 'कोई फ़ोल्डर नहीं दिया गया।', + 'settings.agentAccess.readWrite': 'पढ़ना + लिखना', + 'settings.agentAccess.readOnly': 'केवल', + 'settings.agentAccess.remove': 'निकालें', + 'settings.agentAccess.pathPlaceholder': 'फ़ोल्डर का पूर्ण पथ', + 'settings.agentAccess.accessLevelLabel': 'प्रवेश स्तर', + 'settings.agentAccess.add': 'जोड़ें', + 'settings.agentAccess.saving': 'बचत', + 'settings.agentAccess.changesApply': 'परिवर्तन आपके अगले संदेश पर लागू होते हैं।', + 'settings.appearance.title': 'दिखावट', + 'settings.appearance.themeHeading': 'थीम', + 'settings.appearance.themeAria': 'थीम', + 'settings.appearance.modeLight': 'रोशनी', + 'settings.appearance.modeLightDesc': 'चमकदार सतहें, गहरा पाठ।', + 'settings.appearance.modeDark': 'अंधेरा', + 'settings.appearance.modeDarkDesc': 'धुंधली सतह, शाम के बाद आंखों पर आसान।', + 'settings.appearance.modeSystem': 'मिलान प्रणाली', + 'settings.appearance.modeSystemDesc': 'अपने OS उपस्थिति सेटिंग का पालन करें.', + 'settings.appearance.helperText': + 'डार्क मोड पूरे ऐप - चैट, सेटिंग्स, पैनल - को एक मंद पैलेट में बदल देता है। "मैच सिस्टम" आपके ओएस की उपस्थिति और अपडेट का लाइव अनुसरण करता है।', + 'settings.appearance.tabBarHeading': 'निचला टैब बार', + 'settings.appearance.tabBarAlwaysShowLabels': 'हमेशा लेबल दिखाएं', + 'settings.appearance.tabBarAlwaysShowLabelsDesc': + 'बंद होने पर, लेबल केवल होवर पर या सक्रिय टैब के लिए दिखाई देते हैं।', + 'settings.mascot.active': 'एक्टिव', + 'settings.mascot.characterDesc': 'कैरेक्टर विवरण', + 'settings.mascot.characterHeading': 'कैरेक्टर शीर्षक', + 'settings.mascot.customGifError': + 'एक HTTPS .gif URL, लूपबैक HTTP .gif URL, फ़ाइल:// .gif URL, या स्थानीय .gif पथ दर्ज करें।', + 'settings.mascot.customGifHeading': 'कस्टम GIF अवतार', + 'settings.mascot.customGifLabel': 'कस्टम GIF अवतार URL', + 'settings.mascot.customGifPlaceholder': 'https://example.com/avatar.gif', + 'settings.mascot.characterPreview': 'पूर्वावलोकन', + 'settings.mascot.characterStates': 'राज्य', + 'settings.mascot.characterVisemes': 'हिंदी', + 'settings.mascot.colorAria': 'OpenHuman रंग', + 'settings.mascot.colorDesc': 'रंग विवरण', + 'settings.mascot.colorHeading': 'रंग शीर्षक', + 'settings.mascot.colorBlack': 'काला', + 'settings.mascot.colorBurgundy': 'बरगंडी', + 'settings.mascot.colorCustom': 'कस्टम', + 'settings.mascot.colorNavy': 'नौसेना', + 'settings.mascot.primaryColor': 'प्राथमिक रंग', + 'settings.mascot.secondaryColor': 'माध्यमिक रंग', + 'settings.mascot.colorYellow': 'पीला', + 'settings.mascot.libraryUnavailable': 'OpenHuman लाइब्रेरी अनुपलब्ध है', + 'settings.mascot.title': 'OpenHuman', + 'settings.mascot.loadingLibrary': 'OpenHuman लाइब्रेरी लोड हो रही है…', + 'settings.mascot.loadDetailError': 'शुभंकर लोड नहीं किया जा सका.', + 'settings.mascot.loadLibraryError': 'शुभंकर लाइब्रेरी लोड नहीं की जा सकी.', + 'settings.mascot.localDefault': 'लोकल OpenHuman (डिफ़ॉल्ट)', + 'settings.mascot.menuTitle': 'मास्कॉट', + 'settings.mascot.menuDesc': 'ऐप में उपयोग होने वाला मास्कॉट रंग चुनें', + 'settings.mascot.noCharacters': 'अभी तक कोई OpenHuman कैरेक्टर उपलब्ध नहीं है', + 'settings.mascot.noColorVariants': 'कोई कलर वेरिएंट नहीं', + 'settings.mascot.voice.current': 'वर्तमान', + 'settings.mascot.voice.customDesc': + 'वॉइस आईडी api.elevenlabs.io/v1/voices या अपने ElevenLabs डैशबोर्ड पर खोजें। केवल आईडी संग्रहीत होती है — आपकी API कुंजी बैकएंड पर रहती है।', + 'settings.mascot.voice.customHeading': 'कस्टम वॉइस आईडी', + 'settings.mascot.voice.customOption': 'अन्य (वॉइस आईडी पेस्ट करें)…', + 'settings.mascot.voice.customPlaceholder': 'जैसे 21m00Tcm4TlvDq8ikWAM', + 'settings.mascot.voice.desc': + 'बोले गए उत्तरों के लिए मैस्कॉट जो ElevenLabs वॉइस उपयोग करता है उसे चुनें। लिंग के अनुसार फ़िल्टर करें, क्यूरेटेड सूची से चुनें, कस्टम आईडी पेस्ट करें, या ऐप को इंटरफ़ेस भाषा से मेल खाने वाली आवाज़ चुनने दें।', + 'settings.mascot.voice.genderFemale': 'स्त्री', + 'settings.mascot.voice.genderHeading': 'वॉइस लिंग', + 'settings.mascot.voice.genderMale': 'पुरुष', + 'settings.mascot.voice.heading': 'वॉइस', + 'settings.mascot.voice.preset': 'वॉइस प्रीसेट', + 'settings.mascot.voice.presetHeading': 'वॉइस प्रीसेट', + 'settings.mascot.voice.preview': 'वॉइस पूर्वावलोकन', + 'settings.mascot.voice.previewError': 'वॉइस पूर्वावलोकन विफल हुआ', + 'settings.mascot.voice.previewText': 'हाय, मैं तुम्हारा सहायक हूँ। यह एक आवाज पूर्वावलोकन है।', + 'settings.mascot.voice.previewing': 'पूर्वावलोकन हो रहा है…', + 'settings.mascot.voice.reset': 'डिफ़ॉल्ट पर रीसेट करें', + 'settings.mascot.voice.useLocaleDefault': 'ऐप भाषा से मिलाएँ', + 'settings.mascot.voice.useLocaleDefaultDesc': + 'वर्तमान इंटरफ़ेस भाषा के लिए स्वचालित रूप से एक आवाज़ चुनें।', + 'settings.persona.title': 'व्यक्तित्व', + 'settings.persona.menuTitle': 'व्यक्तित्व', + 'settings.persona.menuDesc': 'नाम, व्यक्तित्व, अवतार और आवाज - एक पहचान के रूप में आपका सहायक', + 'settings.persona.identityHeading': 'पहचान', + 'settings.persona.identityDesc': + 'आपके सहायक के लिए एक प्रदर्शन नाम और लघु विवरण। ऐप में दिखाया गया है; यह नहीं बदलता कि कैसे सहायक कारण हैं।', + 'settings.persona.displayNameLabel': 'नाम प्रदर्शित करें', + 'settings.persona.displayNamePlaceholder': 'जैसे Nova', + 'settings.persona.descriptionLabel': 'विवरण', + 'settings.persona.descriptionPlaceholder': 'e.g मेरी टीम के लिए एक शांत, संक्षिप्त सहायक।', + 'settings.persona.soul.heading': 'व्यक्तित्व (SOUL)', + 'settings.persona.soul.desc': + 'व्यक्तित्व ने प्रत्येक बातचीत में सहायक को प्रेरित किया। संपादन आपके कार्यक्षेत्र में सहेजे जाते हैं और अगले उत्तर में प्रभाव डालते हैं।', + 'settings.persona.soul.editorLabel': 'SOUL', + 'settings.persona.soul.reset': 'डिफ़ॉल्ट रूप से रीसेट करें', + 'settings.persona.soul.usingDefault': 'बंडल डिफ़ॉल्ट का उपयोग करना', + 'settings.persona.soul.loadError': 'SOUL', + 'settings.persona.soul.saveError': 'नहीं बचा सकता SOUL.md', + 'settings.persona.soul.resetError': 'SOUL.md रीसेट नहीं कर सका', + 'settings.persona.appearanceHeading': 'अवतार और आवाज', + 'settings.persona.appearanceDesc': + 'Mascot रंग, कस्टम GIF अवतार, और उत्तर आवाज Mascot सेटिंग्स में कॉन्फ़िगर किया गया है।', + 'settings.persona.openMascotSettings': 'ओपन Mascot सेटिंग्स', + 'settings.memoryWindow.balanced.badge': 'अनुशंसित', + 'settings.memoryWindow.balanced.hint': + 'समझदारी भरा डिफ़ॉल्ट — हर रन पर अतिरिक्त टोकन खर्च किए बिना अच्छी निरंतरता।', + 'settings.memoryWindow.balanced.label': 'संतुलित', + 'settings.memoryWindow.description': + 'OpenHuman हर नए एजेंट रन में कितना याद किया गया संदर्भ इंजेक्ट करता है। बड़ी विंडोज़ पिछली बातचीत के बारे में अधिक जागरूक लगती हैं लेकिन हर रन पर अधिक टोकन का उपयोग करती हैं — और अधिक लागत आती है।', + 'settings.memoryWindow.extended.badge': 'अधिक संदर्भ', + 'settings.memoryWindow.extended.hint': + 'प्रत्येक रन में अधिक दीर्घकालिक मेमोरी इंजेक्ट होती है। प्रति टर्न उच्च टोकन लागत।', + 'settings.memoryWindow.extended.label': 'विस्तारित', + 'settings.memoryWindow.maximum.badge': 'सर्वोच्च लागत', + 'settings.memoryWindow.maximum.hint': + 'सबसे बड़ी सुरक्षित विंडो। सर्वोत्तम निरंतरता, हर रन पर काफी अधिक टोकन बिल।', + 'settings.memoryWindow.maximum.label': 'अधिकतम', + 'settings.memoryWindow.minimal.badge': 'सबसे सस्ता', + 'settings.memoryWindow.minimal.hint': + 'सबसे छोटी मेमोरी विंडो। सबसे सस्ता, सबसे तेज़, रनों के बीच कम से कम निरंतरता।', + 'settings.memoryWindow.minimal.label': 'न्यूनतम', + 'settings.memoryWindow.title': 'लॉन्ग-टर्म मेमोरी विंडो', + 'settings.modelHealth.title': 'स्वास्थ्य', + 'settings.modelHealth.desc': + 'प्रति मॉडल की गुणवत्ता, मतिभ्रम दर, और सक्रिय मॉडलों में लागत तुलना', + 'settings.modelHealth.allStatuses': 'सभी स्थितियां', + 'settings.modelHealth.models': 'मॉडल', + 'settings.modelHealth.loading': 'मॉडल डेटा लोड हो रहा है...', + 'settings.modelHealth.empty': 'पंजीकृत मॉडल', + 'settings.modelHealth.col.model': 'मॉडल', + 'settings.modelHealth.col.quality': 'गुणवत्ता', + 'settings.modelHealth.col.halluc': 'हॉलुक दर', + 'settings.modelHealth.col.cost': 'लागत / 1M बाहर', + 'settings.modelHealth.col.agents': 'एजेंट', + 'settings.modelHealth.col.status': 'स्थिति', + 'settings.modelHealth.badge.keep': 'रखना', + 'settings.modelHealth.badge.replace': 'बदलें', + 'settings.modelHealth.badge.staging': 'स्टेजिंग टेस्ट', + 'settings.modelHealth.badge.vision': 'केवल दृष्टि', + 'settings.modelHealth.swap': 'स्वैप?', + 'settings.modelHealth.modal.title': 'मॉडल बदलें?', + 'settings.modelHealth.modal.hallucRate': 'सम्पर्क करने का विवरण', + 'settings.modelHealth.modal.cancel': 'रद्द करना', + 'settings.modelHealth.modal.apply': 'प्रतिस्थापन लागू करें', + 'settings.modelHealth.tag.cheaper': 'CHEAPER', + 'settings.modelHealth.tag.better': 'BETTER', + 'settings.screenIntel.permissions.accessibility': 'एक्सेसिबिलिटी', + 'settings.screenIntel.permissions.grantHint': 'स्वीकृति संकेत', + 'settings.screenIntel.permissions.inputMonitoring': 'इनपुट मॉनिटरिंग', + 'settings.screenIntel.permissions.macosAppliesPrivacy': 'macOS गोपनीयता लागू करता है', + 'settings.screenIntel.permissions.openInputMonitoring': 'रिक्वेस्ट हो रही है…', + 'settings.screenIntel.permissions.refreshStatus': 'रिफ्रेश हो रहा है…', + 'settings.screenIntel.permissions.refreshing': 'रिफ्रेश हो रहा है…', + 'settings.screenIntel.permissions.requestAccessibility': 'रिक्वेस्ट हो रही है…', + 'settings.screenIntel.permissions.requestScreenRecording': 'रिक्वेस्ट हो रही है…', + 'settings.screenIntel.permissions.requesting': 'रिक्वेस्ट हो रही है…', + 'settings.screenIntel.permissions.restartRefresh': 'कोर रीस्टार्ट हो रहा है…', + 'settings.screenIntel.permissions.restartingCore': 'कोर रीस्टार्ट हो रहा है…', + 'settings.screenIntel.permissions.screenRecording': 'स्क्रीन रिकॉर्डिंग', + 'settings.screenIntel.permissions.title': 'परमिशन', + 'skills.card.moreActions': 'और एक्शन', + 'skills.channelIcon.discord': 'Discord', + 'skills.channelIcon.imessage': 'iMessage', + 'skills.channelIcon.telegram': 'Telegram', + 'skills.channelIcon.web': 'वेब', + 'skills.channelIcon.yuanbao': 'Yuanbao', + 'skills.composio.poweredBy': 'Composio द्वारा संचालित', + 'skills.composio.staleStatusTitle': 'कनेक्शन पुरानी स्थिति दिखा रहे हैं', + 'skills.create.allowedTools': 'अनुमत टूल्स', + 'skills.create.allowedToolsHelp': 'SKILL.md फ्रंटमैटर में प्रस्तुत किया गया', + 'skills.create.allowedToolsPlaceholder': 'नोड_एक्सईसी, प्राप्त करें', + 'skills.create.author': 'लेखक', + 'skills.create.authorPlaceholder': 'आपका नाम', + 'skills.create.commaSeparated': '(कॉमा से अलग करें)', + 'skills.create.createBtn': 'स्किल बनाएँ', + 'skills.create.createError': 'स्किल नहीं बन पाई', + 'skills.create.creating': 'बन रहा है…', + 'skills.create.description': 'विवरण', + 'skills.create.descriptionPlaceholder': 'यह स्किल क्या करती है?', + 'skills.create.optional': '(वैकल्पिक)', + 'skills.create.inputs.heading': 'Inputs', + 'skills.create.inputs.help': + 'स्किल को जिन पैरामीटर की आवश्यकता है उन्हें घोषित करें। Skills Runner रन टाइम पर इनके लिए एक फ़ॉर्म दिखाएगा।', + 'skills.create.inputs.add': 'इनपुट जोड़ें', + 'skills.create.inputs.row.name': 'इनपुट नाम', + 'skills.create.inputs.row.namePlaceholder': 'जैसे repo', + 'skills.create.inputs.row.nameError': + 'केवल अक्षर, अंक, अंडरस्कोर और डैश; अक्षर से शुरू होना चाहिए।', + 'skills.create.inputs.row.description': 'इनपुट विवरण', + 'skills.create.inputs.row.descriptionPlaceholder': 'इस फ़ील्ड में क्या जाता है?', + 'skills.create.inputs.row.type': 'Type', + 'skills.create.inputs.row.required': 'Required', + 'skills.create.inputs.row.remove': 'इनपुट हटाएं', + 'skills.create.inputs.type.string': 'Text', + 'skills.create.inputs.type.integer': 'Number', + 'skills.create.inputs.type.boolean': 'हाँ / नहीं', + 'skills.create.license': 'लाइसेंस', + 'skills.create.licensePlaceholder': 'MIT', + 'skills.create.name': 'नाम', + 'skills.create.namePlaceholder': 'जैसे Trade Journal', + 'skills.create.scope': 'स्कोप', + 'skills.create.scopeProjectHint': '/.openhuman/skills/', + 'skills.create.scopeUserHint': + '~/.openhuman/skills//SKILL.md में लिखा जाता है — सभी वर्कस्पेस में उपलब्ध।', + 'skills.create.slugLabel': 'स्लग लेबल', + 'skills.create.subtitle': 'SKILL.md', + 'skills.create.tags': 'टैग्स', + 'skills.create.tagsPlaceholder': 'व्यापार, अनुसंधान', + 'skills.create.title': 'नया स्किल', + 'skills.detail.allowedTools': 'अनुमत टूल्स', + 'skills.detail.author': 'लेखक', + 'skills.detail.bundledResources': 'बंडल्ड रिसोर्सेज़', + 'skills.detail.closeAriaLabel': 'स्किल डिटेल्स बंद करें', + 'skills.detail.location': 'लोकेशन', + 'skills.detail.noBundledResources': 'कोई बंडल्ड रिसोर्स नहीं।', + 'skills.detail.tags': 'टैग्स', + 'skills.detail.warnings': 'चेतावनियाँ', + 'skills.install.errors.alreadyInstalledHint': + 'इस स्लग के साथ एक कौशल कार्यक्षेत्र में पहले से ही मौजूद है। पहले इसे हटाएँ या फ्रंटमैटर `metadata.id` / `name` बदलें।', + 'skills.install.errors.alreadyInstalledTitle': 'कौशल पहले से ही स्थापित है', + 'skills.install.errors.fetchFailedHint': + 'अनुरोध सफलतापूर्वक पूरा नहीं हुआ. पहुंच योग्य सार्वजनिक फ़ाइल पर URL बिंदुओं की जांच करें, और होस्ट ने 2xx प्रतिक्रिया लौटाई है।', + 'skills.install.errors.fetchFailedTitle': 'फ़ेच विफल रहा', + 'skills.install.errors.fetchTimedOutHint': + 'दूरस्थ होस्ट ने समय पर उत्तर नहीं दिया. पुनः प्रयास करें या समयबाह्य बढ़ाएँ (1-600 सेकंड)।', + 'skills.install.errors.fetchTimedOutTitle': 'लाने का समय समाप्त हो गया', + 'skills.install.errors.fetchTooLargeHint': + 'SKILL.md 1 MiB से कम होना चाहिए। बंडल किए गए संसाधनों को इनलाइन करने के बजाय `संदर्भ/` या `स्क्रिप्ट/` फ़ाइलों में विभाजित करें।', + 'skills.install.errors.fetchTooLargeTitle': 'SKILL.md बहुत बड़ा है', + 'skills.install.errors.genericHint': 'बैकएंड ने एक त्रुटि लौटाई. कच्चा संदेश नीचे दिखाया गया है।', + 'skills.install.errors.genericTitle': 'कौशल स्थापित नहीं किया जा सका', + 'skills.install.errors.invalidSkillHint': + 'फ्रंटमैटर गैर-रिक्त `नाम` और `विवरण` फ़ील्ड के साथ वैध YAML होना चाहिए, जो `---` द्वारा समाप्त हो।', + 'skills.install.errors.invalidSkillTitle': 'SKILL.md ने पार्स नहीं किया', + 'skills.install.errors.invalidUrlHint': + 'केवल सार्वजनिक HTTPS URLs की अनुमति है। निजी, लूपबैक और मेटाडेटा होस्ट अवरुद्ध हैं।', + 'skills.install.errors.invalidUrlTitle': 'URL अस्वीकृत', + 'skills.install.errors.unsupportedUrlHint': + 'केवल सीधे `.md` लिंक काम करते हैं। GitHub के लिए, एक फ़ाइल से लिंक करें (github.com/owner/repo/blob/.../SKILL.md) - ट्री और रेपो रूट स्थापित नहीं हैं।', + 'skills.install.errors.unsupportedUrlTitle': 'URL फॉर्म समर्थित नहीं है', + 'skills.install.errors.writeFailedHint': + 'कार्यक्षेत्र कौशल निर्देशिका लिखने योग्य नहीं थी. `/.openhuman/skills/` के लिए फ़ाइल सिस्टम अनुमतियाँ जाँचें।', + 'skills.install.errors.writeFailedTitle': 'SKILL.md नहीं लिख सका', + 'skills.install.fetchLog': 'फ़ेच लॉग', + 'skills.install.fetchingPrefix': 'ला रहा है', + 'skills.install.fetchingSuffix': + 'इसमें आपके द्वारा कॉन्फ़िगर किया गया टाइमआउट तक का समय लग सकता है।', + 'skills.install.installBtn': 'इन्स्टॉल हो रहा है…', + 'skills.install.installComplete': 'इन्स्टॉल पूरा हुआ', + 'skills.install.installing': 'इन्स्टॉल हो रहा है…', + 'skills.install.parseWarnings': 'Parse चेतावनियाँ', + 'skills.install.rawError': 'रॉ एरर', + 'skills.install.subtitleMiddle': 'HTTPS के ऊपर और इसे नीचे स्थापित करता है', + 'skills.install.subtitlePrefix': 'एक सिंगल लाता है', + 'skills.install.subtitleSuffix': 'केवल HTTPS; निजी और लूपबैक होस्ट अवरुद्ध हैं।', + 'skills.install.successDiscovered': '{count} नए कौशल की खोज की।', + 'skills.install.successNoNewIds': + 'कौशल स्थापित किया गया, लेकिन कोई नई कौशल आईडी दिखाई नहीं दी - कैटलॉग में पहले से ही उसी स्लग वाला कौशल शामिल हो सकता है।', + 'skills.install.timeoutHint': '(सेकंड, वैकल्पिक)', + 'skills.install.timeoutHelp': + 'डिफ़ॉल्ट 60 सेकंड. 1-600 के बाहर के मान सर्वर-साइड पर क्लैंप किए गए हैं।', + 'skills.install.timeoutInvalid': '1 और 600 के बीच एक पूर्णांक होना चाहिए.', + 'skills.install.timeoutLabel': 'टाइमआउट लेबल', + 'skills.install.timeoutPlaceholder': '60', + 'skills.install.title': 'URL से स्किल इंस्टॉल करें', + 'skills.install.urlHelpMiddle': 'फ़ाइल.', + 'skills.install.urlHelpPrefix': 'ए से सीधा लिंक', + 'skills.install.urlHelpSuffix': 'URLs स्वतः पुनः लिखें', + 'skills.install.urlInvalidPrefix': 'URL एक सुगठित होना चाहिए', + 'skills.install.urlInvalidSuffix': 'लिंक.', + 'skills.install.urlLabel': 'स्किल URL', + 'skills.install.urlPlaceholder': 'https://raw.githubusercontent.com/owner/repo/main/SKILL.md', + 'skills.meetingBots.bannerDesc': 'बैनर विवरण', + 'skills.meetingBots.bannerTitle': 'बैनर शीर्षक', + 'skills.meetingBots.busyTitle': 'OpenHuman व्यस्त है', + 'skills.meetingBots.comingSoon': 'जल्द आ रहा है', + 'skills.meetingBots.couldNotStartTitle': 'OpenHuman प्रारंभ नहीं हो सका', + 'skills.meetingBots.displayName': 'डिस्प्ले नाम', + 'skills.meetingBots.failedToStart': 'OpenHuman शुरू नहीं हो पाया।', + 'skills.meetingBots.joiningMessage': + 'कुछ सेकंड में यह मीटिंग में पार्टिसिपेंट के रूप में दिखेगा।', + 'skills.meetingBots.joiningTitle': 'OpenHuman मीटिंग जॉइन कर रहा है', + 'skills.meetingBots.meetingLink': 'मीटिंग लिंक', + 'skills.meetingBots.modalAriaLabel': 'OpenHuman को मीटिंग में भेजें', + 'skills.meetingBots.modalDesc': 'मोडल विवरण', + 'skills.meetingBots.modalTitle': 'OpenHuman को मीटिंग में भेजें', + 'skills.meetingBots.newBadge': 'नया', + 'skills.meetingBots.platformComingSoon': '{label} समर्थन जल्द ही आ रहा है।', + 'skills.meetingBots.platformHints.gmeet': 'meet.google.com/abc-defg-hij', + 'skills.meetingBots.platformHints.teams': 'Teams.microsoft.com/...', + 'skills.meetingBots.platformHints.zoom': 'Zoom.us/j/...', + 'skills.meetingBots.platforms.gmeet': 'Google मिलें', + 'skills.meetingBots.platforms.teams': 'माइक्रोसॉफ्ट टीमें', + 'skills.meetingBots.platforms.zoom': 'ज़ूम करें', + 'skills.meetingBots.sendTo': 'भेजें', + 'skills.meetingBots.soonSuffix': 'जल्द ही', + 'skills.meetingBots.starting': 'शुरू हो रहा है…', + 'skills.resource.preview.closeAriaLabel': 'प्रीव्यू बंद करें', + 'skills.resource.preview.failed': 'पूर्वावलोकन विफल', + 'skills.resource.preview.loading': 'प्रीव्यू लोड हो रहा है…', + 'skills.resource.tree.empty': 'कोई बंडल्ड रिसोर्स नहीं।', + 'skills.search.placeholder': 'प्लेसहोल्डर', + 'skills.setup.autocomplete.acceptKey': 'स्वीकार कुंजी', + 'skills.setup.autocomplete.activeDesc': 'सक्रिय विवरण', + 'skills.setup.autocomplete.activeTitle': 'Auto-Complete एक्टिव है', + 'skills.setup.autocomplete.customizeSettings': 'सेटिंग्स कस्टमाइज़ करें', + 'skills.setup.autocomplete.debounce': 'डिबाउंस', + 'skills.setup.autocomplete.description': 'विवरण', + 'skills.setup.autocomplete.enableBtn': 'चालू हो रहा है...', + 'skills.setup.autocomplete.enableError': 'ऑटोकम्पलीट चालू नहीं हो पाया', + 'skills.setup.autocomplete.enabling': 'चालू हो रहा है...', + 'skills.setup.autocomplete.notSupported': 'सपोर्टेड नहीं', + 'skills.setup.autocomplete.stepEnable': 'इनलाइन कम्पलीशन चालू करें', + 'skills.setup.autocomplete.stepSuccess': 'तैयार है', + 'skills.setup.autocomplete.stylePreset': 'स्टाइल प्रीसेट', + 'skills.setup.autocomplete.stylePresetValue': 'Balanced (बाद में बदल सकते हैं)', + 'skills.setup.autocomplete.title': 'टेक्स्ट Auto-Complete', + 'skills.setup.screenIntel.activeDesc': 'सक्रिय विवरण', + 'skills.setup.screenIntel.activeTitle': 'Screen Intelligence चालू है', + 'skills.setup.screenIntel.advancedSettings': 'एडवांस्ड सेटिंग्स', + 'skills.setup.screenIntel.allGranted': 'सभी परमिशन मिल गईं', + 'skills.setup.screenIntel.captureMode': 'कैप्चर मोड', + 'skills.setup.screenIntel.captureModeValue': 'सभी विंडो (बाद में बदल सकते हैं)', + 'skills.setup.screenIntel.deniedHint': + 'System Settings में परमिशन देने के बाद, बदलाव लागू करने के लिए नीचे क्लिक करके रीस्टार्ट करें।', + 'skills.setup.screenIntel.enableBtn': 'चालू हो रहा है...', + 'skills.setup.screenIntel.enableDesc': 'आपकी स्क्रीन पर और एजेंट को उपयोगी कॉन्टेक्स्ट दें', + 'skills.setup.screenIntel.enableError': 'Screen Intelligence चालू नहीं हो पाई', + 'skills.setup.screenIntel.enabling': 'चालू हो रहा है...', + 'skills.setup.screenIntel.grant': 'खुल रहा है...', + 'skills.setup.screenIntel.granted': 'मिल गई', + 'skills.setup.screenIntel.macosOnly': 'केवल macOS', + 'skills.setup.screenIntel.opening': 'खुल रहा है...', + 'skills.setup.screenIntel.panicHotkey': 'पैनिक हॉटकी', + 'skills.setup.screenIntel.permAccessibility': 'एक्सेसिबिलिटी', + 'skills.setup.screenIntel.permInputMonitoring': 'इनपुट मॉनिटरिंग', + 'skills.setup.screenIntel.permScreenRecording': 'स्क्रीन रिकॉर्डिंग', + 'skills.setup.screenIntel.permissionsDesc': 'अनुमतियाँ विवरण', + 'skills.setup.screenIntel.permissionPathLabel': 'macOS निम्नलिखित पर गोपनीयता लागू करता है:', + 'skills.setup.screenIntel.refreshStatus': 'स्टेटस रिफ्रेश करें', + 'skills.setup.screenIntel.restartRefresh': 'रीस्टार्ट हो रहा है...', + 'skills.setup.screenIntel.restarting': 'रीस्टार्ट हो रहा है...', + 'skills.setup.screenIntel.stepEnable': 'स्किल चालू करें', + 'skills.setup.screenIntel.stepPermissions': 'परमिशन दें', + 'skills.setup.screenIntel.stepSuccess': 'तैयार है', + 'skills.setup.screenIntel.title': 'स्क्रीन इंटेलिजेंस', + 'skills.setup.screenIntel.visionModel': 'विज़न मॉडल', + 'skills.setup.voice.activation': 'एक्टिवेशन', + 'skills.setup.voice.activeDescPrefix': 'एफ.एन', + 'skills.setup.voice.activeDescSuffix': 'एफ.एन', + 'skills.setup.voice.activeTitle': 'Voice Intelligence एक्टिव है', + 'skills.setup.voice.customizeSettings': 'सेटिंग्स कस्टमाइज़ करें', + 'skills.setup.voice.downloadSttBtn': 'STT डाउनलोड करें', + 'skills.setup.voice.enableDesc': 'सक्षम विवरण', + 'skills.setup.voice.hotkey': 'हॉटकी', + 'skills.setup.voice.startBtn': 'शुरू हो रहा है...', + 'skills.setup.voice.startError': 'वॉइस सर्वर शुरू नहीं हो पाया', + 'skills.setup.voice.starting': 'शुरू हो रहा है...', + 'skills.setup.voice.stepEnable': 'वॉइस सर्वर शुरू करें', + 'skills.setup.voice.stepSetup': 'मॉडल डाउनलोड ज़रूरी है', + 'skills.setup.voice.stepSuccess': 'तैयार है', + 'skills.setup.voice.sttNotReady': 'Speech-to-text मॉडल तैयार नहीं है', + 'skills.setup.voice.sttNotReadyDesc': + 'Voice Intelligence को ट्रांसक्रिप्शन के लिए लोकल Whisper मॉडल चाहिए। इसे Local Model सेटिंग्स से डाउनलोड करें।', + 'skills.setup.voice.sttReady': 'Speech-to-text मॉडल तैयार है', + 'skills.setup.voice.sttReturnHint': 'STT रिटर्न संकेत', + 'skills.setup.voice.title': 'वॉइस इंटेलिजेंस', + 'skills.uninstall.couldNotUninstall': 'अनइंस्टॉल नहीं हो सका', + 'skills.uninstall.description': + 'यह स्किल डायरेक्टरी और उसके सभी बंडल किए गए संसाधनों को स्थायी रूप से हटा देता है। एजेंट अगले टर्न पर इसे देखना बंद कर देगा।', + 'skills.uninstall.title': 'अनइंस्टॉल', + 'skills.uninstall.uninstallBtn': 'अनइंस्टॉल', + 'skills.uninstall.uninstalling': 'अनइंस्टॉल हो रहा है…', + 'upsell.global.limitMessage': 'जारी रखने के लिए अपना प्लान अपग्रेड करें या क्रेडिट टॉप अप करें', + 'upsell.global.limitTitle': 'आप', + 'upsell.global.nearLimitMessage': + 'आपने अपनी उपयोग सीमा का {pct}% इस्तेमाल कर लिया है। ज़्यादा सीमा के लिए अपग्रेड करें।', + 'upsell.global.nearLimitTitle': 'उपयोग सीमा के करीब', + 'upsell.usageLimit.bodyBudget': + 'आपने अपनी साप्ताहिक सीमा प्राप्त कर ली है।{reset} सीमाओं से बचने के लिए अपनी योजना अपग्रेड करें या क्रेडिट टॉप अप करें।', + 'upsell.usageLimit.bodyRate': + 'आपने अपनी 10-घंटे की इन्फ़रेंस दर सीमा प्राप्त कर ली है।{reset} उच्च सीमा के लिए अपग्रेड करें।', + 'upsell.usageLimit.heading': 'उपयोग सीमा पहुँच गई', + 'upsell.usageLimit.notNow': 'अभी नहीं', + 'upsell.usageLimit.perWindow': '{amount}', + 'upsell.usageLimit.planIncludes': '{plan}', + 'upsell.usageLimit.resetsIn': 'यह {time} रीसेट होती है।', + 'upsell.usageLimit.upgradePlan': 'प्लान अपग्रेड करें', + 'upsell.usageLimit.weeklyInference': '{amount}', + 'walkthrough.tooltip.letsGo': 'चलिए शुरू करें!', + 'walkthrough.tooltip.next': 'अगला →', + 'walkthrough.tooltip.skip': 'टूर छोड़ें', + 'walkthrough.tooltip.stepCounter': '{total} में से {n}', + 'webhooks.activity.empty': 'खाली है', + 'webhooks.activity.title': 'हाल की एक्टिविटी', + 'webhooks.composioHistory.empty': 'खाली है', + 'webhooks.composioHistory.metadataId': 'मेटाडेटा ID', + 'webhooks.composioHistory.metadataUuid': 'मेटाडेटा UUID', + 'webhooks.composioHistory.payload': 'पेलोड', + 'webhooks.composioHistory.title': 'ComposeIO ट्रिगर हिस्ट्री', + 'webhooks.tunnels.active': 'एक्टिव', + 'webhooks.tunnels.createFailed': 'टनल बनाने में दिक्कत', + 'webhooks.tunnels.creating': 'बन रहा है...', + 'webhooks.tunnels.deleteFailed': 'टनल डिलीट करने में दिक्कत', + 'webhooks.tunnels.descriptionPlaceholder': 'विवरण (वैकल्पिक)', + 'webhooks.tunnels.echo': 'इको', + 'webhooks.tunnels.empty': 'खाली है', + 'webhooks.tunnels.enableEcho': 'Echo चालू करें', + 'webhooks.tunnels.inactive': 'निष्क्रिय', + 'webhooks.tunnels.namePlaceholder': 'टनल का नाम (जैसे telegram-bot)', + 'webhooks.tunnels.newTunnel': 'नया टनल', + 'webhooks.tunnels.removeEcho': 'Echo हटाएं', + 'webhooks.tunnels.title': 'Webhook टनल', + 'webhooks.tunnels.toggleFailed': 'Echo टॉगल करने में दिक्कत', + 'composio.directModeRequiresKey': + 'सहेजने में विफल। डायरेक्ट मोड के लिए गैर-रिक्त API कुंजी आवश्यक है।', + 'composio.integrationSlugsHelp': 'अल्पविराम से अलग किए गए एकीकरण स्लग, उदा.', + 'composio.integrationSlugsExample': 'जीमेल, सुस्त', + 'composio.integrationSlugsCaseInsensitive': 'केस-असंवेदनशील.', + 'composio.integrationSlugsPlaceholder': 'जीमेल, स्लैक, ...', + 'composio.notYetRouted': 'अभी तक रूट नहीं हुआ', + 'composio.triggers.loading': 'लोड हो रहा है…', + 'conversations.taskKanban.todo': 'करना है', + 'chat.addReaction': 'प्रतिक्रिया जोड़ें', + 'chat.agentProfile.create': 'एजेंट प्रोफ़ाइल बनाएं', + 'chat.agentProfile.createFailed': 'एजेंट प्रोफ़ाइल नहीं बनाई जा सकी.', + 'chat.agentProfile.customDescription': 'कस्टम एजेंट प्रोफ़ाइल', + 'chat.agentProfile.defaultAgentLabel': 'ऑर्केस्ट्रेटर', + 'chat.agentProfile.exists': 'एजेंट प्रोफ़ाइल "{name}" पहले से मौजूद है।', + 'chat.agentProfile.label': 'एजेंट प्रोफ़ाइल', + 'chat.agentProfile.namePlaceholder': 'प्रोफ़ाइल नाम', + 'chat.agentProfile.promptStylePlaceholder': 'शीघ्र शैली', + 'chat.agentProfile.allowedToolsPlaceholder': 'अनुमत उपकरण', + 'chat.backToThread': '{title} पर वापस', + 'chat.parentThread': 'मूल सूत्र', + 'chat.removeReaction': '{emoji} हटाएं', + 'settings.composio.loading': 'लोड हो रहा है…', + 'settings.mascot.noCharactersAvailable': 'अभी तक कोई OpenHuman कैरेक्टर उपलब्ध नहीं है', + 'skills.uninstall.confirmTitle': '{name} अनइंस्टॉल करें?', + 'conversations.taskKanban.blocked': 'अवरुद्ध', + 'conversations.taskKanban.done': 'पूर्ण', + 'conversations.taskKanban.pending': 'लंबित', + 'conversations.taskKanban.working': 'कार्य', + 'conversations.taskKanban.awaitingApproval': 'अनुमति देना', + 'conversations.taskKanban.ready': 'रेडी', + 'conversations.taskKanban.rejected': 'अस्वीकार', + 'conversations.taskKanban.inProgress': 'प्रगति पर', + 'intelligence.memoryChunk.detail.copiedHint': 'कॉपी हो गया', + 'settings.composio.notYetRouted': 'अभी तक रूट नहीं हुआ', + 'settings.localModel.download.manageExternal': 'इस मॉडल को अपने बाहरी रनटाइम में प्रबंधित करें।', + 'settings.localModel.status.manageOllamaExternal': + 'OpenHuman के बाहर Ollama प्रक्रिया और मॉडल पुल प्रबंधित करें, फिर डायग्नोस्टिक्स पुनः चलाएँ।', + 'settings.localModel.status.ollamaDocs': 'Ollama दस्तावेज़', + 'settings.localModel.status.thenRetry': + 'सेटअप निर्देशों के लिए, फिर आपका रनटाइम पहुँच योग्य होने के बाद पुनः प्रयास करें।', + 'devOptions.menuAi': 'एआई कॉन्फ़िगरेशन', + 'devOptions.menuAiDesc': 'क्लाउड प्रदाता, स्थानीय Ollama मॉडल, और प्रति-वर्कलोड रूटिंग', + 'devOptions.menuScreenAware': 'स्क्रीन जागरूकता', + 'devOptions.menuScreenAwareDesc': 'स्क्रीन कैप्चर अनुमतियाँ, निगरानी नीति और सत्र नियंत्रण', + 'devOptions.menuMessaging': 'मैसेजिंग चैनल', + 'devOptions.menuMessagingDesc': + 'Telegram/Discord प्रमाणीकरण मोड और डिफ़ॉल्ट चैनल रूटिंग कॉन्फ़िगर करें', + 'devOptions.menuTools': 'उपकरण', + 'devOptions.menuToolsDesc': + 'क्षमताओं को सक्षम या अक्षम करें OpenHuman आपकी ओर से उपयोग कर सकते हैं', + 'devOptions.menuAgentChat': 'एजेंट चैट', + 'devOptions.menuAgentChatDesc': 'मॉडल और तापमान ओवरराइड के साथ परीक्षण एजेंट की बातचीत', + 'devOptions.menuCronJobs': 'क्रॉन जॉब्स', + 'devOptions.menuCronJobsDesc': 'रनटाइम कौशल के लिए निर्धारित कार्य देखें और कॉन्फ़िगर करें', + 'devOptions.menuLocalModelDebug': 'स्थानीय मॉडल डीबग', + 'devOptions.menuLocalModelDebugDesc': + 'Ollama कॉन्फ़िगरेशन, एसेट डाउनलोड, मॉडल परीक्षण और डायग्नोस्टिक्स', + 'devOptions.menuWebhooksDebug': 'वेबहुक', + 'devOptions.menuWebhooksDebugDesc': + 'रनटाइम वेबहुक पंजीकरण और कैप्चर किए गए अनुरोध लॉग का निरीक्षण करें', + 'devOptions.menuIntelligence': 'बुद्धि', + 'devOptions.menuIntelligenceDesc': 'मेमोरी कार्यक्षेत्र, अवचेतन इंजन, सपने और सेटिंग्स', + 'devOptions.menuNotificationRouting': 'अधिसूचना रूटिंग', + 'devOptions.menuNotificationRoutingDesc': + 'एकीकरण अलर्ट के लिए एआई महत्व स्कोरिंग और ऑर्केस्ट्रेटर एस्केलेशन', + 'devOptions.menuComposeIOTriggers': 'कंपोज़आईओ ट्रिगर्स', + 'devOptions.menuComposeIOTriggersDesc': 'ComposeIO ट्रिगर इतिहास और संग्रह देखें', + 'devOptions.menuComposioRouting': 'Composio रूटिंग (डायरेक्ट मोड)', + 'devOptions.menuComposioRoutingDesc': + 'अपनी स्वयं की Composio API कुंजी लाएँ और कॉल को सीधे Backend.composio.dev पर रूट करें', + 'devOptions.menuComposioTriggers': 'एकीकरण ट्रिगर', + 'devOptions.menuComposioTriggersDesc': + 'Composio एकीकरण ट्रिगर के लिए AI ट्राइएज सेटिंग्स कॉन्फ़िगर करें', + 'memory.sourceFilterAria': 'स्रोत के अनुसार फ़िल्टर करें', + 'calls.comingSoonDescription': 'एआई-सहायक कॉल जल्द ही आ रही हैं। बने रहें।', + 'vault.title': 'ज्ञान भंडार', + 'vault.description': + 'कोई स्थानीय फ़ोल्डर चुनें; फ़ाइलें खंडों में विभाजित होकर मेमोरी में मिरर हो जाती हैं।', + 'vault.add': 'तिजोरी जोड़ें', + 'vault.added': 'तिजोरी जोड़ी गई', + 'vault.createdMessage': '"{name}" बनाया गया। निगलने के लिए {sync} पर क्लिक करें।', + 'vault.couldNotAdd': 'वॉल्ट नहीं जोड़ा जा सका', + 'vault.syncFailed': 'समन्वयन विफल', + 'vault.syncFailedFor': '"{name}" के लिए समन्वयन विफल', + 'vault.syncFailedFiles': 'विफल {count} फ़ाइल(फ़ाइलें)', + 'vault.syncedTitle': 'समन्वयित "{name}"', + 'vault.syncSummary': 'अंतर्ग्रहण {ingested}, अपरिवर्तित {unchanged}, हटाया गया {removed}', + 'vault.syncSummaryFailed': ', विफल {count}', + 'vault.syncSummarySkipped': ', छोड़ दिया गया {count}', + 'vault.syncSummaryDuration': ' · {seconds}s', + 'vault.confirmRemovePurge': + 'वॉल्ट "{name}" हटाएं?\n\nOK क्लिक करें तो इसकी मेमोरी भी साफ़ हो जाएगी (सभी {count} इंजेस्टेड दस्तावेज़ हटा दिए जाएंगे)।\nCancel क्लिक करें तो दस्तावेज़ मेमोरी में रहेंगे।', + 'vault.confirmRemove': 'वास्तव में वॉल्ट "{name}" को हटा दें?', + 'vault.removed': 'तिजोरी हटा दी गई', + 'vault.removedPurgedMessage': '"{name}" को हटा दिया गया और इसकी मेमोरी को शुद्ध कर दिया गया।', + 'vault.removedKeptMessage': '"{name}" हटा दिया गया। दस्तावेज़ स्मृति में रखे गए.', + 'vault.couldNotRemove': 'तिजोरी नहीं निकाली जा सकी', + 'vault.name': 'नाम', + 'vault.namePlaceholder': 'मेरे शोध नोट्स', + 'vault.folderPath': 'फ़ोल्डर पथ (पूर्ण)', + 'vault.folderPathPlaceholder': '/उपयोगकर्ता/आप/दस्तावेज़/नोट्स', + 'vault.excludes': 'बहिष्कृत (अल्पविराम से अलग किए गए सबस्ट्रिंग, वैकल्पिक)', + 'vault.excludesPlaceholder': 'ड्राफ्ट/, .गुप्त', + 'vault.creating': 'बनाया जा रहा है...', + 'vault.create': 'तिजोरी बनाएं', + 'vault.loading': 'तिजोरी लोड हो रही है...', + 'vault.failedToLoad': 'वॉल्ट लोड करने में विफल: {error}', + 'vault.empty': 'अभी कोई वॉल्ट नहीं है। कोई फ़ोल्डर इंजेस्ट करना शुरू करने के लिए ऊपर एक जोड़ें।', + 'vault.fileCount': '{count}फ़ाइलें', + 'vault.syncedRelative': 'समन्वयित {time}', + 'vault.neverSynced': 'कभी समन्वयित नहीं किया गया', + 'vault.syncingProgress': 'सिंक हो रहा है... {ingested}/{total}', + 'vault.removing': 'हटाया जा रहा है...', + 'vault.relative.sec': '{count}s पहले', + 'vault.relative.min': '{count}m पहले', + 'vault.relative.hr': '{count}h पहले', + 'vault.relative.day': '{count}d पहले', + 'whatsapp.title': 'WhatsApp', + 'subconscious.interval.fiveMinutes': '5 मिनट', + 'subconscious.interval.tenMinutes': '10 मिनट', + 'subconscious.interval.fifteenMinutes': '15 मि', + 'subconscious.interval.thirtyMinutes': '30 मि', + 'subconscious.interval.oneHour': '1 घंटा', + 'subconscious.interval.sixHours': '6 घंटे', + 'subconscious.interval.twelveHours': '12 घंटे', + 'subconscious.interval.oneDay': '1 दिन', + 'subconscious.priority.critical': 'आलोचनात्मक', + 'subconscious.priority.important': 'महत्वपूर्ण', + 'subconscious.priority.normal': 'सामान्य', + 'subconscious.durationSeconds': '{seconds}s', + 'subconscious.durationMilliseconds': '{milliseconds}ms', + 'settings.appearance': 'दिखावट', + 'settings.appearanceDesc': 'प्रकाश, अंधेरा, या अपने सिस्टम थीम से मेल चुनें', + 'settings.mascot': 'शुभंकर', + 'settings.mascotDesc': 'ऐप में उपयोग किया जाने वाला शुभंकर रंग चुनें', + 'pages.settings.account.walletBalances': 'वॉलेट बैलेंस', + 'pages.settings.account.walletBalancesDesc': 'अपने स्थानीय वॉलेट के मल्टी-चेन बैलेंस देखें', + 'walletBalances.title': 'वॉलेट बैलेंस', + 'walletBalances.refresh': 'Refresh', + 'walletBalances.loading': 'बैलेंस लोड हो रहा है…', + 'walletBalances.retry': 'Retry', + 'walletBalances.emptyState': 'अभी कोई वॉलेट अकाउंट नहीं — Recovery Phrase में वॉलेट सेटअप करें।', + 'walletBalances.copyAddress': 'पता कॉपी करें', + 'walletBalances.providerMissing': 'प्रोवाइडर अनुपलब्ध', + 'walletBalances.rawBalance': 'रॉ: {raw}', + 'walletBalances.errorGeneric': + 'वॉलेट बैलेंस लोड नहीं हो सका। Recovery Phrase में अपना वॉलेट सेटअप करें और पुनः प्रयास करें।', + 'settings.taskSources.title': 'कार्य स्रोत', + 'settings.taskSources.subtitle': 'एजेंट टोडो बोर्ड पर अपने उपकरणों से कार्य खींचें', + 'settings.taskSources.description': + 'GitHub, नॉटियन, रैखिक और क्लिकअप से कार्य वस्तुओं को इकट्ठा करें, उन्हें समृद्ध करें और उन्हें एजेंट टोडो बोर्ड पर ले जाएं।', + 'settings.taskSources.connectHint': + 'कार्य स्रोत आपके कनेक्टेड खातों का उपयोग करते हैं। उन्हें पहले एकीकरण के तहत कनेक्ट करें।', + 'settings.taskSources.disabledBanner': + 'कार्य स्रोत सेटिंग्स में अक्षम हैं। उन्हें स्वचालित रूप से मतदान करने में सक्षम बनाता है।', + 'settings.taskSources.loadError': 'कार्य स्रोतों को लोड करने में विफल', + 'settings.taskSources.addTitle': 'एक कार्य स्रोत जोड़ें', + 'settings.taskSources.provider': 'प्रदाता', + 'settings.taskSources.name': 'नाम (वैकल्पिक)', + 'settings.taskSources.namePlaceholder': 'e.g मेरे खुले मुद्दे', + 'settings.taskSources.github.repo': 'रिपॉज़िटरी (owner/name, वैकल्पिक)', + 'settings.taskSources.github.labels': 'लेबल (comma-separated)', + 'settings.taskSources.notion.database': 'डेटाबेस (बोर्ड) ID', + 'settings.taskSources.linear.team': 'टीम आईडी (वैकल्पिक)', + 'settings.taskSources.clickup.team': 'कार्यक्षेत्र (टीम) आईडी (वैकल्पिक)', + 'settings.taskSources.assignedToMe': 'केवल मुझे सौंपा गया आइटम', + 'settings.taskSources.add': 'स्रोत जोड़ें', + 'settings.taskSources.adding': 'जोड़ना...', + 'settings.taskSources.preview': 'पूर्वावलोकन', + 'settings.taskSources.previewResult': '{count} कार्य इस फ़िल्टर से मेल खाता है', + 'settings.taskSources.fetchNow': 'अभी लेना', + 'settings.taskSources.fetching': '...', + 'settings.taskSources.fetchResult': '{fetched} कार्य (s) के रूटेड {routed}', + 'settings.taskSources.configured': 'संरूपित सूत्र', + 'settings.taskSources.empty': 'अभी तक कोई कार्य स्रोत नहीं है।', + 'settings.taskSources.proactive': 'सक्रिय', + 'settings.taskSources.lastFetch': 'अंतिम आगमन', + 'settings.taskSources.never': 'कभी नहीं', + 'settings.taskSources.statusEnabled': 'सक्षम', + 'settings.taskSources.statusDisabled': 'विकलांग', + 'settings.taskSources.enable': 'सक्षम', + 'settings.taskSources.disable': 'अक्षम', + 'settings.taskSources.remove': 'निकालें', + 'settings.taskSources.removeConfirm': + 'इस कार्य स्रोत को निकालें? सभी ingested कार्य इतिहास को हटा दिया जाएगा और नहीं किया जा सकता है।', + 'settings.taskSources.refresh': 'ताज़ा', + 'settings.taskSources.providers.github': 'GitHub', + 'settings.taskSources.providers.notion': 'धारणा', + 'settings.taskSources.providers.linear': 'रैखिक', + 'settings.taskSources.providers.clickup': 'क्लिक करें', + 'skills.dashboard.title': 'Skills', + 'skills.dashboard.scheduledHeading': 'शेड्यूल की गई स्किल्स', + 'skills.dashboard.emptyTitle': 'कोई शेड्यूल की गई स्किल नहीं', + 'skills.dashboard.emptyBody': + 'इसे यहाँ देखने के लिए एक बंडल स्किल एक बार चलाएं या आवर्ती शेड्यूल सहेजें।', + 'skills.dashboard.create': 'एक स्किल बनाएं', + 'skills.dashboard.run': 'एक स्किल चलाएं', + 'skills.dashboard.enable': 'शेड्यूल की गई स्किल सक्षम करें', + 'skills.dashboard.disable': 'शेड्यूल की गई स्किल अक्षम करें', + 'skills.dashboard.lastRun': 'अंतिम बार चला', + 'skills.dashboard.nextRun': 'अगली बार चलेगा', + 'skills.dashboard.cardOpenRunner': 'रनर में खोलें', + 'skills.dashboard.loadError': 'शेड्यूल की गई स्किल लोड करने में विफल', + 'skills.new.title': 'एक स्किल बनाएं', + 'skills.new.placeholderBody': + 'ऑथरिंग फ़ॉर्म जल्द आएगा। अभी के लिए, रनर पेज पर "New skill" बटन उपयोग करें।', + 'settings.agents.title': 'एजेंट', + 'settings.agents.subtitle': + 'प्रतिनिधिमंडल के लिए उपलब्ध एजेंटों को प्रबंधित करें - अंतर्निहित डिफ़ॉल्ट और अपने स्वयं के कस्टम एजेंट।', + 'settings.agents.menuDesc': 'अंतर्निहित और कस्टम एजेंट प्रबंधित करें', + 'settings.agents.newAgent': 'नया एजेंट', + 'settings.agents.loadError': 'एजेंट लोड नहीं कर सका', + 'settings.agents.empty': 'अभी तक कोई एजेंट नहीं', + 'settings.agents.sourceDefault': 'निर्मित', + 'settings.agents.sourceCustom': 'कस्टम', + 'settings.agents.enable': 'सक्षम एजेंट', + 'settings.agents.disable': 'अक्षम एजेंट', + 'settings.agents.edit': 'संपादित करें', + 'settings.agents.delete': 'Delete', + 'settings.agents.reset': 'डिफ़ॉल्ट रूप से रीसेट करें', + 'settings.agents.modelLabel': 'मॉडल', + 'settings.agents.toolsLabel': 'उपकरण', + 'settings.agents.toolsAll': 'सभी उपकरण', + 'settings.agents.toolsCount': '{count} उपकरण', + 'settings.agents.actionFailed': 'एजेंट को अपडेट नहीं कर सका', + 'settings.agents.orchestratorLocked': 'ऑर्केस्ट्रेटर हमेशा सक्षम होता है।', + 'settings.agents.editor.createTitle': 'नया एजेंट', + 'settings.agents.editor.editTitle': 'संपादन एजेंट', + 'settings.agents.editor.id': 'ID', + 'settings.agents.editor.idHint': 'लोअरकेस अक्षर, संख्या, और - केवल।', + 'settings.agents.editor.name': 'नाम', + 'settings.agents.editor.description': 'विवरण', + 'settings.agents.editor.model': 'मॉडल (वैकल्पिक)', + 'settings.agents.editor.modelPlaceholder': 'e.g. विरासत, संकेत: तेज, या एक मॉडल आईडी', + 'settings.agents.editor.systemPrompt': 'सिस्टम प्रॉम्प्ट (वैकल्पिक)', + 'settings.agents.editor.tools': 'अनुमति उपकरण', + 'settings.agents.editor.toolsHint': + 'एक उपकरण का नाम प्रति पंक्ति। सभी उपकरणों के लिए * का उपयोग करें।', + 'settings.agents.editor.defaultsNote': + 'एक अंतर्निहित एजेंट को संपादित करने से आपको बाद में रीसेट कर सकते हैं।', + 'settings.agents.editor.save': 'सहेजें', + 'settings.agents.editor.create': 'एजेंट बनाना', + 'settings.agents.editor.saving': 'बचत', + 'settings.agentsSection.title': 'Agents', + 'settings.agentsSection.description': + 'अपने एजेंट, उनकी स्वायत्तता और इस कंप्यूटर पर वे क्या एक्सेस कर सकते हैं, यह प्रबंधित करें।', + 'settings.agentsSection.menuDesc': 'रजिस्ट्री, स्वायत्तता और OS एक्सेस', + 'settings.agents.editor.notFound': 'एजेंट नहीं मिला।', + 'settings.agents.editor.modelInherit': 'इनहेरिट करें (प्लेटफ़ॉर्म डिफ़ॉल्ट)', + 'settings.agents.editor.modelHints': 'रूट संकेत', + 'settings.agents.editor.modelTiers': 'मॉडल स्तर', + 'settings.agents.editor.modelCustom': 'कस्टम मॉडल आईडी…', + 'settings.agents.editor.modelCustomPlaceholder': 'जैसे anthropic/claude-sonnet-4', + 'settings.agents.editor.selectTools': 'टूल जोड़ें', + 'settings.agents.editor.toolsAllSelected': 'सभी टूल', + 'settings.agents.editor.toolsNoneSelected': 'कोई टूल चुना नहीं गया', + 'settings.agents.editor.removeToolAria': '{tool} हटाएं', + 'settings.agents.editor.toolsModalTitle': 'अनुमत टूल', + 'settings.agents.editor.toolsSelectedCount': '{count} चुने गए', + 'settings.agents.editor.toolsSearchPlaceholder': 'टूल खोजें…', + 'settings.agents.editor.toolsAllowAll': 'सभी टूल की अनुमति दें (*)', + 'settings.agents.editor.toolsAllowAllHint': 'यह एजेंट हर उपलब्ध टूल का उपयोग कर सकता है।', + 'settings.agents.editor.toolsLoading': 'टूल लोड हो रहे हैं…', + 'settings.agents.editor.toolsLoadError': 'टूल लोड नहीं हो सके', + 'settings.agents.editor.toolsEmpty': 'आपकी खोज से कोई टूल मेल नहीं खाता।', + 'settings.agents.editor.toolsDone': 'Done', + 'settings.agents.editor.builtInReadonly': + 'बिल्ट-इन एजेंट संपादित नहीं किए जा सकते। आप एजेंट सूची से उन्हें सक्षम, अक्षम या रीसेट कर सकते हैं।', }; -export default hi; +export default messages; diff --git a/app/src/lib/i18n/id.ts b/app/src/lib/i18n/id.ts index ab5e04e30..74a86e440 100644 --- a/app/src/lib/i18n/id.ts +++ b/app/src/lib/i18n/id.ts @@ -1,31 +1,4099 @@ -import id1 from './chunks/id-1'; -import id2 from './chunks/id-2'; -import id3 from './chunks/id-3'; -import id4 from './chunks/id-4'; -import id5 from './chunks/id-5'; import type { TranslationMap } from './types'; -// Bahasa Indonesia translations. Each chunk maps to chunks/en-N.ts. -// Missing keys fall back to English via I18nContext.resolveEn(). -const id: TranslationMap = { - ...id1, - ...id2, - ...id3, - ...id4, - ...id5, +// Indonesian (Bahasa Indonesia) translations. Keys mirror en.ts; missing/ +// English-identical values fall back to English via I18nContext.resolveEn(). +const messages: TranslationMap = { + 'nav.home': 'Beranda', + 'nav.human': 'Manusia', + 'nav.chat': 'Obrolan', + 'nav.connections': 'Koneksi', + 'nav.memory': 'Memori', + 'nav.alerts': 'Peringatan', + 'nav.rewards': 'Hadiah', + 'nav.settings': 'Pengaturan', + 'common.cancel': 'Batal', + 'common.save': 'Simpan', + 'common.confirm': 'Konfirmasi', + 'common.delete': 'Hapus', + 'common.edit': 'Ubah', + 'common.create': 'Buat', + 'common.search': 'Cari', + 'common.loading': 'memuat…', + 'common.error': 'Kesalahan', + 'common.success': 'Berhasil', + 'common.back': 'Kembali', + 'common.next': 'Berikutnya', + 'common.finish': 'Selesai', + 'common.close': 'Tutup', + 'common.enabled': 'Aktif', + 'common.disabled': 'Nonaktif', + 'common.on': 'Nyala', + 'common.off': 'Mati', + 'common.yes': 'Ya', + 'common.no': 'Tidak', + 'common.ok': 'Mengerti', + 'common.name': 'Nama', + 'common.retry': 'Coba lagi', + 'common.copy': 'Salin', + 'common.copied': 'Disalin', + 'common.learnMore': 'Pelajari lagi', + 'common.seeAll': 'Lihat', + 'common.dismiss': 'Abaikan', + 'common.clear': 'Bersihkan', + 'common.reset': 'Atur ulang', + 'common.refresh': 'Segarkan', + 'common.export': 'Ekspor', + 'common.import': 'Impor', + 'common.upload': 'Unggah', + 'common.download': 'Unduh', + 'common.add': 'Tambah', + 'common.remove': 'Hapus', + 'common.showMore': 'Tampilkan lagi', + 'common.showLess': 'Tampilkan sedikit', + 'common.submit': 'Kirim', + 'common.continue': 'Lanjutkan', + 'common.comingSoon': 'Segera Hadir', + 'common.breadcrumb': 'Breadcrumb', + 'settings.general': 'Umum', + 'settings.featuresAndAI': 'Fitur & AI', + 'settings.billingAndRewards': 'Tagihan & Hadiah', + 'settings.support': 'Dukungan', + 'settings.advanced': 'Lanjutan', + 'settings.dangerZone': 'Zona Berbahaya', + 'settings.account': 'Akun', + 'settings.accountDesc': 'Frasa pemulihan, tim, koneksi, dan privasi', + 'settings.notifications': 'Notifikasi', + 'settings.notificationsDesc': 'Jangan Ganggu dan kontrol notifikasi per akun', + 'settings.notifications.tabs.preferences': 'Preferensi', + 'settings.notifications.tabs.routing': 'Perutean', + 'settings.features': 'Fitur', + 'settings.featuresDesc': 'Kesadaran layar, pesan, dan alat', + 'settings.aiModels': 'AI & Model', + 'settings.aiModelsDesc': 'Pengaturan model AI lokal, unduhan, dan penyedia LLM', + 'settings.ai': 'AI', + 'settings.aiDesc': 'Penyedia cloud, model Ollama lokal, dan routing per beban kerja', + 'settings.billingUsage': 'Tagihan & Pemakaian', + 'settings.billingUsageDesc': 'Paket langganan, kredit, dan metode pembayaran', + 'settings.rewards': 'Hadiah', + 'settings.rewardsDesc': 'Referral, kupon, dan kredit yang diperoleh', + 'settings.restartTour': 'Ulangi Tur', + 'settings.restartTourDesc': 'Putar ulang panduan produk dari awal', + 'settings.about': 'Tentang', + 'settings.aboutDesc': 'Versi aplikasi dan pembaruan perangkat lunak', + 'settings.developerOptions': 'Opsi Developer', + 'settings.developerOptionsDesc': 'Diagnostik, panel debug, webhook, dan inspeksi memori', + 'settings.clearAppData': 'Bersihkan Data Aplikasi', + 'settings.clearAppDataDesc': 'Keluar dan hapus permanen semua data aplikasi lokal', + 'settings.logOut': 'Keluar', + 'settings.logOutDesc': 'Keluar dari akun Anda', + 'settings.exitLocalSession': 'Keluar dari sesi lokal', + 'settings.exitLocalSessionDesc': 'Kembali ke layar masuk', + 'settings.language': 'Bahasa', + 'settings.betaBuild': 'Versi beta - v{version}', + 'settings.languageDesc': 'Bahasa tampilan untuk antarmuka aplikasi', + 'settings.alerts': 'Peringatan', + 'settings.alertsDesc': 'Lihat peringatan terbaru dan aktivitas di kotak masuk Anda', + 'settings.account.recoveryPhrase': 'Frasa Pemulihan', + 'settings.account.recoveryPhraseDesc': 'Lihat dan cadangkan frasa pemulihan akun Anda', + 'settings.account.team': 'Tim', + 'settings.account.teamDesc': 'Kelola anggota tim dan izin', + 'settings.account.connections': 'Koneksi', + 'settings.account.connectionsDesc': 'Kelola akun dan layanan yang terhubung', + 'settings.account.privacy': 'Privasi', + 'settings.account.privacyDesc': 'Kontrol data apa saja yang keluar dari komputer Anda', + 'migration.title': 'Impor dari asisten lain', + 'migration.description': + 'Migrasikan memori dan catatan dari asisten lokal lain ke ruang kerja ini. Mulai dengan Pratinjau untuk melihat persis apa yang akan berubah, lalu klik Terapkan untuk menyalin datanya. Memori Anda saat ini dicadangkan terlebih dahulu.', + 'migration.vendorLabel': 'Sumber', + 'migration.vendor.openclaw': 'OpenClaw', + 'migration.vendor.hermes': 'Agen Hermes', + 'migration.sourceLabel': 'Path ruang kerja sumber (opsional)', + 'migration.sourcePlaceholder': + 'Biarkan kosong untuk deteksi otomatis (misalnya ~/.openclaw/workspace)', + 'migration.sourcePlaceholderHermes': 'Biarkan kosong untuk deteksi otomatis (mis. ~/.hermes)', + 'migration.sourceHint': + 'Kosong berarti memakai lokasi default sumber. Isi path eksplisit jika ruang kerja sudah dipindahkan.', + 'migration.previewAction': 'Pratinjau', + 'migration.previewRunning': 'Memuat pratinjau…', + 'migration.applyAction': 'Terapkan impor', + 'migration.applyRunning': 'Mengimpor…', + 'migration.applyDisclaimer': + 'Terapkan terbuka setelah Pratinjau berhasil untuk sumber yang sama. Memori yang ada dicadangkan sebelum impor apa pun.', + 'migration.reportTitlePreview': 'Pratinjau — belum ada yang diimpor', + 'migration.reportTitleApplied': 'Impor selesai', + 'migration.report.source': 'Ruang kerja sumber', + 'migration.report.target': 'Ruang kerja tujuan', + 'migration.report.fromSqlite': 'Dari SQLite (brain.db)', + 'migration.report.fromMarkdown': 'Dari Markdown', + 'migration.report.imported': 'Diimpor', + 'migration.report.skippedUnchanged': 'Dilewati (tidak berubah)', + 'migration.report.renamedConflicts': 'Diganti nama saat konflik', + 'migration.report.warnings': 'Peringatan', + 'migration.report.previewHint': + 'Belum ada data yang diimpor. Klik Terapkan impor untuk menyalinnya.', + 'migration.report.appliedHint': + 'Entri yang diimpor kini ada di memori Anda. Jalankan Pratinjau lagi untuk membandingkan.', + 'migration.confirmImport.singular': + 'Impor {count} entri ke ruang kerja saat ini?\n\nSumber: {source}\nTujuan: {target}\n\nMemori yang ada akan dicadangkan sebelum impor dimulai.', + 'migration.confirmImport.plural': + 'Impor {count} entri ke ruang kerja saat ini?\n\nSumber: {source}\nTujuan: {target}\n\nMemori yang ada akan dicadangkan sebelum impor dimulai.', + 'settings.notifications.doNotDisturb': 'Jangan Ganggu', + 'settings.notifications.doNotDisturbDesc': 'Jeda semua notifikasi selama periode tertentu', + 'settings.notifications.channelControls': 'Kontrol Per Kanal', + 'settings.notifications.channelControlsDesc': 'Atur preferensi notifikasi untuk setiap kanal', + 'settings.features.screenAwareness': 'Kesadaran Layar', + 'settings.features.screenAwarenessDesc': 'Izinkan asisten melihat jendela aktif Anda', + 'settings.features.messaging': 'Pesan', + 'settings.features.messagingDesc': 'Pengaturan kanal dan integrasi pesan', + 'settings.features.tools': 'Alat', + 'settings.features.toolsDesc': 'Kelola alat dan integrasi yang terhubung', + 'settings.ai.localSetup': 'Pengaturan AI Lokal', + 'settings.ai.localSetupDesc': 'Unduh dan konfigurasikan model AI lokal', + 'settings.ai.llmProvider': 'Penyedia LLM', + 'settings.ai.llmProviderDesc': 'Pilih dan konfigurasikan penyedia AI Anda', + 'clearData.title': 'Bersihkan Data Aplikasi', + 'clearData.warning': + 'Ini akan mengeluarkan Anda dan menghapus permanen data aplikasi lokal termasuk:', + 'clearData.bulletSettings': 'Pengaturan aplikasi dan percakapan', + 'clearData.bulletCache': 'Semua data cache integrasi lokal', + 'clearData.bulletWorkspace': 'Data workspace', + 'clearData.bulletOther': 'Semua data lokal lainnya', + 'clearData.irreversible': 'Tindakan ini tidak dapat dibatalkan.', + 'clearData.clearing': 'Membersihkan Data Aplikasi...', + 'clearData.failed': 'Gagal membersihkan data dan keluar. Silakan coba lagi.', + 'clearData.failedLogout': 'Gagal keluar. Silakan coba lagi.', + 'clearData.failedPersist': 'Gagal membersihkan status aplikasi tersimpan. Silakan coba lagi.', + 'welcome.title': 'Selamat datang di OpenHuman', + 'welcome.subtitle': 'Asisten AI Anda untuk komunitas', + 'welcome.connectPrompt': 'Konfigurasikan RPC URL (Lanjutan)', + 'welcome.selectRuntime': 'Pilih Runtime', + 'welcome.clearingAppData': 'Menghapus data aplikasi...', + 'welcome.clearAppDataAndRestart': 'Hapus data aplikasi & memulai ulang', + 'welcome.clearAppDataWarning': + 'Ini akan menghapus rahasia dan akun yang tersimpan secara lokal di perangkat ini. Akun cloud Anda tidak terpengaruh — Anda dapat masuk kembali segera setelahnya.', + 'welcome.resetErrorFallback': + 'Tidak dapat menghapus data aplikasi. Silakan keluar dan buka kembali OpenHuman, lalu coba lagi.', + 'welcome.signingIn': 'Memasukkan Anda...', + 'welcome.termsIntro': 'Dengan melanjutkan, Anda menyetujui', + 'welcome.termsOfUse': 'Persyaratan', + 'welcome.termsJoiner': 'dan', + 'welcome.privacyPolicy': 'Kebijakan Privasi', + 'welcome.termsOutro': '.', + 'welcome.urlPlaceholder': 'http://localhost:8089', + 'welcome.invalidUrl': 'Masukkan URL HTTP atau HTTPS yang valid', + 'welcome.connecting': 'Menguji', + 'welcome.connect': 'Uji', + 'home.greeting': 'Selamat pagi', + 'home.greetingAfternoon': 'Selamat siang', + 'home.greetingEvening': 'Selamat malam', + 'home.askAssistant': 'Tanyakan apa saja ke asisten Anda...', + 'home.statusOk': + 'Perangkat Anda terhubung. Biarkan aplikasi tetap berjalan agar koneksi tetap aktif. Kirim pesan ke agen Anda dengan tombol di bawah.', + 'home.statusBackendOnly': + 'Menghubungkan ulang ke backend... agen Anda akan segera tersedia lagi.', + 'home.statusCoreUnreachable': + 'Core sidecar lokal tidak merespons. Proses latar OpenHuman mungkin crash atau gagal dimulai.', + 'home.statusInternetOffline': + 'Perangkat Anda sedang offline. Periksa jaringan atau mulai ulang aplikasi untuk menyambung lagi.', + 'home.restartCore': 'Mulai Ulang Core', + 'home.restartingCore': 'Memulai ulang core...', + 'home.themeToggle.toLight': 'Beralih ke mode terang', + 'home.themeToggle.toDark': 'Beralih ke mode gelap', + 'home.usageExhaustedTitle': 'Jatah penggunaan Anda telah habis', + 'home.usageExhaustedBody': + 'Kuota penggunaan yang termasuk saat ini sudah habis. Mulai langganan untuk membuka kapasitas berkelanjutan yang lebih besar.', + 'home.usageExhaustedCta': 'Mulai berlangganan', + 'home.routinesCard': 'Rutinitas Anda', + 'home.routinesActive': '{count} aktif', + 'routines.title': 'Rutinitas Anda', + 'routines.subtitle': 'Hal yang dilakukan asisten Anda secara otomatis', + 'routines.loading': 'Memuat rutinitas…', + 'routines.empty': 'Belum ada rutinitas', + 'routines.emptyHint': + 'Asistenmu bisa menjalankan tugas sesuai jadwal seperti pengarahan pagi atau ringkasan harian.', + 'routines.refresh': 'Segarkan', + 'routines.nextRun': 'Jalankan berikutnya', + 'routines.lastRunSuccess': 'Terakhir berjalan berhasil', + 'routines.lastRunFailed': 'Terakhir berjalan gagal', + 'routines.notRunYet': 'Belum pernah dijalankan', + 'routines.runNow': 'Jalankan Sekarang', + 'routines.running': 'Berjalan...', + 'routines.viewHistory': 'Lihat riwayat', + 'routines.loadingHistory': 'Memuat…', + 'routines.noHistory': 'Belum ada riwayat eksekusi.', + 'routines.statusSuccess': 'Berhasil', + 'routines.statusError': 'Kesalahan', + 'routines.showOutput': 'Tampilkan output', + 'routines.hideOutput': 'Sembunyikan output', + 'routines.toggleEnabled': 'Aktifkan atau matikan rutinitas ini', + 'routines.typeAgent': 'Agen', + 'routines.typeCommand': 'Perintah', + 'nav.routines': 'Routines', + 'chat.newThread': 'Thread baru', + 'chat.typeMessage': 'Ketik pesan...', + 'chat.send': 'Kirim pesan', + 'chat.thinking': 'Berpikir...', + 'chat.noMessages': 'Belum ada pesan', + 'chat.startConversation': 'Mulai percakapan', + 'chat.regenerate': 'Buat ulang', + 'chat.copyResponse': 'Salin respons', + 'chat.citations': 'Sitasi', + 'chat.toolUsed': 'Alat yang digunakan', + 'scope.legacy': 'Lama', + 'scope.user': 'Pengguna', + 'scope.project': 'Proyek', + 'skills.title': 'Koneksi', + 'skills.search': 'Cari koneksi...', + 'skills.noResults': 'Koneksi tidak ditemukan', + 'skills.connect': 'Hubungkan', + 'skills.disconnect': 'Putuskan', + 'skills.configure': 'Kelola', + 'skills.connected': 'Terhubung', + 'skills.available': 'Tersedia', + 'skills.addAccount': 'Tambah Akun', + 'skills.channels': 'Kanal', + 'skills.integrations': 'Integrasi', + 'skills.integrationsSubtitle': + 'Koneksi OAuth berbasis cloud — masuk dengan akun Anda dan Composio mengelola token agar agen dapat membaca dan bertindak atas nama Anda. Tidak perlu mengelola API key.', 'skills.composio.noApiKeyTitle': 'Belum ada API key Composio yang dikonfigurasi', 'skills.composio.noApiKeyDescription': 'Mode lokal menggunakan API key Composio milik Anda sendiri. Buka Pengaturan → Lanjutan → Composio untuk menambahkannya sebelum menghubungkan integrasi di sini.', 'skills.composio.noApiKeyCta': 'Buka di Pengaturan', - 'channels.localManagedUnavailable': 'Channel terkelola tidak tersedia untuk pengguna lokal.', + 'skills.tabs.composio': 'Composio', + 'skills.tabs.channels': 'Saluran', + 'skills.tabs.mcp': 'MCP Server', + 'skills.tabs.runners': 'Runners', + 'memory.title': 'Memori', + 'memory.search': 'Cari memori...', + 'memory.noResults': 'Memori tidak ditemukan', + 'memory.empty': 'Belum ada memori. Memori dibuat otomatis saat Anda berinteraksi.', + 'memory.tab.memory': 'Memori', + 'memory.tab.tasks': 'Tugas Agen', + 'memory.tab.tasksDescription': + 'Buat dan lacak tugas — to-do Anda sendiri beserta papan yang dibangun agen Anda di berbagai percakapan.', + 'memory.tab.subconscious': 'Bawah sadar', + 'memory.tab.dreams': 'Mimpi', + 'memory.tab.calls': 'Panggilan', + 'memory.tab.diagram': 'Diagram', + 'memory.tab.centrality': 'Centrality', + 'memory.tab.settings': 'Pengaturan', + 'memory.analyzeNow': 'Analisis Sekarang', + 'graphCentrality.title': 'Centralitas Grafik Pengetahuan', + 'graphCentrality.intro': + 'PageRank melalui grafik memori Anda permukaan hub load- bantalan - dan entiti konektor yang menghubungkan lain-terpisah cluster, yang jumlah frekuensi mentah tidak dapat mengungkapkan.', + 'graphCentrality.loading': 'Komputer sentralitas...', + 'graphCentrality.errorPrefix': 'Tidak dapat memuat grafiknya:', + 'graphCentrality.retry': 'Coba lagi', + 'graphCentrality.empty': 'Belum ada grafik pengetahuan.', + 'graphCentrality.emptyHint': + 'Sebagai asisten mencatat fakta tentang Anda, entitas yang paling terhubung akan muncul di sini.', + 'graphCentrality.namespaceLabel': 'Namespace', + 'graphCentrality.namespaceAll': 'Semua ruang-nama', + 'graphCentrality.metricEntities': 'Entitas', + 'graphCentrality.metricConnections': 'Koneksi', + 'graphCentrality.metricClusters': 'Cluster', + 'graphCentrality.clustersCaption': '{components} cluster terbesar memegang {largest}', + 'graphCentrality.approximateBadge': 'approximate', + 'graphCentrality.approximateTitle': 'Berhenti di puncak iterasi sebelum sepenuhnya konverging', + 'graphCentrality.rankedHeading': 'Entitas atas dengan pengaruh', + 'graphCentrality.colRank': '#', + 'graphCentrality.colEntity': 'Entitas', + 'graphCentrality.colInfluence': 'Influensi', + 'graphCentrality.colLinks': 'Taut', + 'graphCentrality.bridgeBadge': 'connector', + 'graphCentrality.bridgeTitle': + 'Konektor - lebih berpengaruh daripada jumlah link yang menunjukkan', + 'graphCentrality.degreeTitle': '{in} keluar', + 'memoryTree.status.title': 'Pohon Memori', + 'memoryTree.status.autoSyncLabel': 'Sinkronisasi otomatis', + 'memoryTree.status.autoSyncDescription': + 'Jeda untuk menghentikan ingest baru. Wiki yang ada tetap dapat dikueri.', + 'memoryTree.status.statusTile': 'Status', + 'memoryTree.status.lastSyncTile': 'Sinkronisasi terakhir', + 'memoryTree.status.totalChunksTile': 'Total potongan', + 'memoryTree.status.wikiSizeTile': 'Ukuran wiki', + 'memoryTree.status.statusRunning': 'Berjalan', + 'memoryTree.status.statusPaused': 'Dijeda', + 'memoryTree.status.statusSyncing': 'Menyinkronkan', + 'memoryTree.status.statusError': 'Kesalahan', + 'memoryTree.status.statusIdle': 'Diam', + 'memoryTree.status.never': 'Tidak pernah', + 'memoryTree.status.fetchError': 'Gagal mengambil status Pohon Memori', + 'memoryTree.status.retry': 'Coba lagi', + 'memoryTree.status.toggleFailed': 'Gagal mengalihkan sinkronisasi otomatis', + 'memoryTree.status.justNow': 'baru saja', + 'memoryTree.status.secondsAgo': '{count} dtk lalu', + 'memoryTree.status.minuteAgo': '1 mnt lalu', + 'memoryTree.status.minutesAgo': '{count} mnt lalu', + 'memoryTree.status.hourAgo': '1 jam lalu', + 'memoryTree.status.hoursAgo': '{count} jam lalu', + 'memoryTree.status.dayAgo': '1 hari lalu', + 'memoryTree.status.daysAgo': '{count} hari lalu', + 'alerts.title': 'Peringatan', + 'alerts.empty': 'Belum ada peringatan', + 'alerts.markAllRead': 'Tandai semua sudah dibaca', + 'alerts.unread': 'belum dibaca', + 'rewards.title': 'Hadiah', + 'rewards.referrals': 'Referral', + 'rewards.coupons': 'Tukarkan', 'rewards.localUnavailable': 'Login lokal tidak mendapatkan reward, kupon, atau kredit referral. Keluar lalu lanjutkan dengan masuk menggunakan akun OpenHuman jika Anda ingin reward dihitung.', 'rewards.localUnavailableCta': 'Buka Pengaturan Akun', + 'rewards.credits': 'Kredit', + 'rewards.referralCode': 'Kode referral Anda', + 'rewards.copyCode': 'Salin kode', + 'rewards.share': 'Bagikan', + 'onboarding.welcome': 'Hai. Saya OpenHuman.', + 'onboarding.welcomeDesc': + 'Asisten AI super cerdas yang berjalan di komputer Anda. Privat, sederhana, dan sangat kuat.', + 'onboarding.context': 'Pengumpulan Konteks', + 'onboarding.contextDesc': 'Hubungkan alat dan layanan yang Anda gunakan setiap hari.', + 'onboarding.localAI': 'AI Lokal', + 'onboarding.localAIDesc': 'Siapkan model AI lokal yang berjalan di mesin Anda.', + 'onboarding.chatProvider': 'Penyedia Chat', + 'onboarding.chatProviderDesc': 'Pilih cara Anda ingin berinteraksi dengan asisten.', + 'onboarding.referral': 'Rujukan', + 'onboarding.referralDesc': 'Gunakan kode referral jika Anda memilikinya.', + 'onboarding.finish': 'Selesaikan Pengaturan', + 'onboarding.finishDesc': 'Semua siap! Mulai gunakan OpenHuman.', + 'onboarding.skip': 'Lewati', + 'onboarding.getStarted': 'Mulai', + 'onboarding.runtimeChoice.title': 'Bagaimana Anda ingin menjalankan OpenHuman?', + 'onboarding.runtimeChoice.subtitle': + 'Pilih pengaturan yang paling sesuai untuk Anda. Anda dapat mengubahnya nanti di Pengaturan.', + 'onboarding.runtimeChoice.cloud.title': 'Sederhana', + 'onboarding.runtimeChoice.cloud.tagline': 'Biarkan OpenHuman mengelola segalanya untuk Anda.', + 'onboarding.runtimeChoice.cloud.f1': 'Keamanan bawaan', + 'onboarding.runtimeChoice.cloud.f2': 'Kompresi token untuk memaksimalkan penggunaan Anda', + 'onboarding.runtimeChoice.cloud.f3': 'Satu langganan, semua model sudah termasuk', + 'onboarding.runtimeChoice.cloud.f4': 'Tidak perlu mengelola API key', + 'onboarding.runtimeChoice.cloud.f5': 'Mudah diatur', + 'onboarding.runtimeChoice.custom.title': 'Jalankan Kustom', + 'onboarding.runtimeChoice.custom.tagline': + 'Bawa key Anda sendiri. Kontrol penuh atas apa yang Anda gunakan.', + 'onboarding.runtimeChoice.custom.f1': 'Anda memerlukan API key untuk hampir semuanya', + 'onboarding.runtimeChoice.custom.f2': 'Memanfaatkan ulang layanan yang sudah Anda bayar', + 'onboarding.runtimeChoice.custom.f3': 'Bisa gratis jika Anda menjalankan semuanya secara lokal', + 'onboarding.runtimeChoice.custom.f4': 'Lebih banyak pengaturan, lebih banyak kontrol', + 'onboarding.runtimeChoice.custom.f5': 'Terbaik untuk pengguna power dan developer', + 'onboarding.runtimeChoice.cloud.creditHighlight': '$1 kredit gratis untuk dicoba', + 'onboarding.runtimeChoice.continueCloud': 'Lanjutkan dengan Sederhana', + 'onboarding.runtimeChoice.continueCustom': 'Lanjutkan dengan Kustom', + 'onboarding.runtimeChoice.recommended': 'Direkomendasikan', + 'onboarding.apiKeys.title': 'Mari Tambahkan API Key Anda', + 'onboarding.apiKeys.subtitle': + 'Anda dapat menempelkannya sekarang atau lewati dan tambahkan nanti di Pengaturan › AI. Key disimpan di perangkat ini, dienkripsi saat penyimpanan.', + 'onboarding.apiKeys.openaiLabel': 'API key OpenAI', + 'onboarding.apiKeys.openaiPlaceholder': 'sk-...', + 'onboarding.apiKeys.openaiOauthHint': + 'Gunakan ChatGPT Plus/Pro (berlangganan) atau kunci OpenAI API — keduanya tidak diperlukan.', + 'onboarding.apiKeys.openaiOauthOpening': 'Membuka proses masuk…', + 'onboarding.apiKeys.finishSignIn': 'Selesaikan proses masuk ChatGPT', + 'onboarding.apiKeys.orApiKey': 'atau kunci API', + 'onboarding.apiKeys.anthropicLabel': 'API key Anthropic', + 'onboarding.apiKeys.anthropicPlaceholder': 'sk-ant-...', + 'onboarding.apiKeys.saveError': + 'Tidak dapat menyimpan key tersebut. Periksa kembali dan coba lagi.', + 'onboarding.apiKeys.skipForNow': 'Lewati untuk sekarang', + 'onboarding.apiKeys.continue': 'Simpan dan lanjutkan', + 'onboarding.apiKeys.saving': 'Menyimpan...', + 'onboarding.custom.stepperInference': 'Inferensi', + 'onboarding.custom.stepperVoice': 'Suara', + 'onboarding.custom.stepperOAuth': 'OAuth', + 'onboarding.custom.stepperSearch': 'Pencarian', + 'onboarding.custom.stepperEmbeddings': 'Embeddings', + 'onboarding.custom.stepperMemory': 'Memori', + 'onboarding.custom.stepCounter': 'Langkah {n} dari {total}', + 'onboarding.custom.defaultTitle': 'Bawaan', + 'onboarding.custom.defaultSubtitle': 'Biarkan OpenHuman mengelolanya untuk Anda.', + 'onboarding.custom.configureTitle': 'Konfigurasi', + 'onboarding.custom.configureSubtitle': 'Saya akan memilih apa yang digunakan.', + 'onboarding.custom.progressAriaLabel': 'Progres orientasi', + 'onboarding.custom.continue': 'Lanjutkan', + 'onboarding.custom.back': 'Kembali', + 'onboarding.custom.finish': 'Selesaikan Pengaturan', + 'onboarding.custom.configureLater': + 'Anda dapat menyelesaikan pengaturan ini setelah orientasi. Kami akan mengarahkan Anda ke halaman Pengaturan yang sesuai setelah selesai.', + 'onboarding.custom.openSettings': 'Buka di Pengaturan', + 'onboarding.custom.inference.title': 'Inferensi (Teks)', + 'onboarding.custom.inference.subtitle': + 'Model bahasa mana yang harus menjawab pertanyaan dan menjalankan agen Anda?', + 'onboarding.custom.inference.defaultDesc': + 'OpenHuman mengarahkan setiap beban kerja ke model default yang masuk akal. Tidak perlu key, tidak perlu pengaturan.', + 'onboarding.custom.inference.configureDesc': + 'Bawa key OpenAI atau Anthropic Anda sendiri. Kami menggunakannya untuk setiap beban kerja berbasis teks.', + 'onboarding.custom.voice.title': 'Suara', + 'onboarding.custom.voice.subtitle': 'Speech-to-text dan text-to-speech untuk mode suara.', + 'onboarding.custom.voice.defaultDesc': + 'OpenHuman dilengkapi dengan STT/TTS terkelola yang langsung berfungsi. Tidak ada yang perlu dikonfigurasi.', + 'onboarding.custom.voice.configureDesc': + 'Gunakan ElevenLabs / OpenAI Whisper / dll. milik Anda sendiri. Konfigurasi di Pengaturan › Suara.', + 'onboarding.custom.oauth.title': 'Koneksi (OAuth)', + 'onboarding.custom.oauth.subtitle': + 'Gmail, Slack, Notion, dan layanan terhubung lainnya yang memerlukan OAuth.', + 'onboarding.custom.oauth.defaultDesc': + 'OpenHuman menjalankan workspace Composio terkelola. Satu klik untuk menghubungkan setiap layanan nanti.', + 'onboarding.custom.oauth.configureDesc': + 'Bawa akun Composio / API key Anda sendiri. Konfigurasi di Pengaturan › Koneksi.', + 'onboarding.custom.search.title': 'Pencarian Web', + 'onboarding.custom.search.subtitle': 'Cara OpenHuman mencari web atas nama Anda.', + 'onboarding.custom.search.defaultDesc': + 'OpenHuman menggunakan backend pencarian terkelola. Tidak perlu key.', + 'onboarding.custom.search.configureDesc': + 'Bawa key penyedia pencarian Anda sendiri (Tavily, Brave, dll.). Konfigurasi di Pengaturan › Alat.', + 'onboarding.custom.embeddings.title': 'Embeddings', + 'onboarding.custom.embeddings.subtitle': + 'Cara OpenHuman menghasilkan embedding vektor untuk pencarian memori semantik.', + 'onboarding.custom.embeddings.defaultDesc': + 'OpenHuman menggunakan layanan embedding terkelola. Tidak perlu API key.', + 'onboarding.custom.embeddings.configureDesc': + 'Gunakan penyedia embedding Anda sendiri (OpenAI, Voyage, Ollama, dll.).', + 'onboarding.custom.memory.title': 'Memori', + 'onboarding.custom.memory.subtitle': + 'Cara OpenHuman mengingat konteks, preferensi, dan percakapan sebelumnya.', + 'onboarding.custom.memory.defaultDesc': + 'OpenHuman mengelola penyimpanan dan pengambilan memori secara otomatis. Tidak ada yang perlu diatur.', + 'onboarding.custom.memory.configureDesc': + 'Periksa, ekspor, atau hapus memori sendiri. Konfigurasi di Pengaturan › Memori.', + 'accounts.addAccount': 'Tambah Akun', + 'accounts.manageAccounts': 'Kelola Akun', + 'accounts.noAccounts': 'Belum ada akun terhubung', + 'accounts.connectAccount': 'Hubungkan akun untuk memulai', + 'accounts.agent': 'Agen', + 'accounts.respondQueue': 'Antrean Respons', + 'accounts.disconnect': 'Putuskan', + 'accounts.disconnectConfirm': 'Yakin ingin memutuskan akun ini?', + 'accounts.disconnectClearMemory': 'Hapus juga memori dari sumber ini', + 'accounts.disconnectClearMemoryHint': + 'Menghapus secara permanen potongan memori lokal yang terhubung ke koneksi ini.', + 'accounts.searchAccounts': 'Cari akun...', + 'channels.title': 'Kanal', + 'channels.configure': 'Konfigurasi Kanal', + 'channels.setup': 'Pengaturan', + 'channels.noChannels': 'Belum ada kanal yang dikonfigurasi', + 'channels.localManagedUnavailable': 'Channel terkelola tidak tersedia untuk pengguna lokal.', + 'channels.addChannel': 'Tambah Kanal', + 'channels.status.connected': 'Terhubung', + 'channels.status.disconnected': 'Terputus', + 'channels.status.error': 'Kesalahan', + 'channels.status.configuring': 'Mengonfigurasi', + 'channels.defaultMessaging': 'Kanal Pesan Default', + 'webhooks.title': 'Webhook', + 'webhooks.create': 'Buat Webhook', + 'webhooks.noWebhooks': 'Belum ada webhook yang dikonfigurasi', + 'webhooks.url': 'URL', + 'webhooks.secret': 'Rahasia', + 'webhooks.events': 'Event', + 'webhooks.archiveDirectory': 'Direktori Arsip', + 'webhooks.todayFile': 'File Hari Ini', + 'invites.title': 'Undangan', + 'invites.create': 'Buat Undangan', + 'invites.noInvites': 'Tidak ada undangan tertunda', + 'invites.code': 'Kode Undangan', + 'invites.copyLink': 'Salin Link', + 'invites.generate': 'Hasilkan Undangan', + 'invites.generating': 'Menghasilkan...', + 'invites.refreshing': 'Menyegarkan undangan...', + 'invites.loading': 'Memuat undangan...', + 'invites.copyCodeAria': 'Salin kode undangan', + 'invites.revokeAria': 'Cabut undangan', + 'invites.usedUp': 'Habis', + 'invites.uses': 'Kegunaan: {current}{max}', + 'invites.expiresOn': 'Kedaluwarsa {date}', + 'invites.empty': 'Belum ada undangan', + 'invites.emptyHint': 'Buat kode undangan untuk dibagikan dengan orang lain', + 'invites.revokeTitle': 'Cabut Kode Undangan', + 'invites.revokePromptPrefix': 'Apakah Anda yakin ingin mencabut kode undangan', + 'invites.revokeWarning': + 'Kode undangan ini tidak akan lagi berlaku dan tidak dapat digunakan untuk bergabung dengan tim.', + 'invites.revoking': 'Mencabut...', + 'invites.revokeAction': 'Mencabut Undangan', + 'invites.failedGenerate': 'Gagal membuat undangan', + 'invites.failedRevoke': 'Gagal mencabut undangan', + 'team.refreshingMembers': 'Menyegarkan anggota...', + 'team.loadingMembers': 'Memuat anggota...', + 'team.memberCount': '{count} anggota', + 'team.memberCountPlural': '{count} anggota', + 'team.you': '(Anda)', + 'team.removeAria': 'Hapus {name}', + 'team.noMembers': 'Tidak ada anggota yang ditemukan', + 'team.removeTitle': 'Hapus Anggota Tim', + 'team.removePromptPrefix': 'Apakah Anda yakin ingin menghapus', + 'team.removePromptSuffix': 'dari tim?', + 'team.removeWarning': 'Mereka akan kehilangan akses ke tim dan semua sumber daya tim.', + 'team.removing': 'Menghapus...', + 'team.removeAction': 'Hapus Anggota', + 'team.changeRoleTitle': 'Ubah Peran Anggota', + 'team.changeRolePrompt': 'Ubah peran {name} dari {oldRole} menjadi {newRole}?', + 'team.changeRoleAdminGrant': + 'Ini akan memberikan mereka izin admin penuh termasuk kemampuan untuk mengelola anggota tim.', + 'team.changeRoleAdminRemove': + 'Ini akan mencabut izin admin mereka dan mereka tidak lagi dapat mengelola tim.', + 'team.changing': 'Mengubah...', + 'team.changeRoleAction': 'Mengubah Peran', + 'team.failedChangeRole': 'Gagal mengubah peran', + 'team.failedRemoveMember': 'Gagal menghapus anggota', + 'devOptions.title': 'Opsi Developer', + 'devOptions.diagnostics': 'Diagnostik', + 'devOptions.diagnosticsDesc': 'Kesehatan sistem, log, dan metrik performa', + 'devOptions.toolPolicyDiagnosticsDesc': + 'Alat inventaris, postur kebijakan, allowzes MCP, dan blok terbaru', + 'devOptions.toolPolicyDiagnostics.loading': 'Memuat…', + 'devOptions.toolPolicyDiagnostics.unavailable': 'Diagnostik tidak tersedia', + 'devOptions.toolPolicyDiagnostics.posture.title': 'Postur kebijakan', + 'devOptions.toolPolicyDiagnostics.posture.autonomy': 'Autonomy:', + 'devOptions.toolPolicyDiagnostics.posture.workspaceOnly': 'Hanya ruang kerja:', + 'devOptions.toolPolicyDiagnostics.posture.maxActionsPerHour': 'Maks. tindakan/jam:', + 'devOptions.toolPolicyDiagnostics.posture.approvalMediumRisk': 'Persetujuan (resiko sedang):', + 'devOptions.toolPolicyDiagnostics.posture.blockHighRisk': 'Resiko tinggi blok:', + 'devOptions.toolPolicyDiagnostics.inventory.title': 'Inventaris', + 'devOptions.toolPolicyDiagnostics.inventory.totalTools': 'Total alat', + 'devOptions.toolPolicyDiagnostics.inventory.enabledTools': 'Perangkat yang diaktifkan', + 'devOptions.toolPolicyDiagnostics.inventory.mcpStdioTools': 'Perkakas stdio MCP', + 'devOptions.toolPolicyDiagnostics.inventory.jsonRpcTools': 'Alat JSON-RPC', + 'devOptions.toolPolicyDiagnostics.mcpAllowlists.title': 'Allowlist MCP', + 'devOptions.toolPolicyDiagnostics.mcpAllowlists.summary': 'Diaktifkan: {enabled}', + 'devOptions.toolPolicyDiagnostics.mcpAllowlists.unnamed': '< tanpa nama >', + 'devOptions.toolPolicyDiagnostics.mcpAllowlists.allowDeny': + 'ijinkan = {allowCount} menyangkal = {denyCount}', + 'devOptions.toolPolicyDiagnostics.mcpWriteAudit.title': 'MCP menulis audit', + 'devOptions.toolPolicyDiagnostics.mcpWriteAudit.summary': 'Diaktifkan: {enabled}', + 'devOptions.toolPolicyDiagnostics.recentBlocked.title': 'Panggilan terblok baru-baru ini', + 'devOptions.toolPolicyDiagnostics.recentBlocked.empty': 'Tidak ada panggilan diblokir direkam.', + 'devOptions.toolPolicyDiagnostics.redactedSurfaces.title': 'Permukaan Redacted', + 'devOptions.toolPolicyDiagnostics.redactedSurfaces.summary': 'Penulis-mampu: {writeCount}', + 'devOptions.debugPanels': 'Panel Debug', + 'devOptions.debugPanelsDesc': 'Feature flag, inspeksi status, dan alat debugging', + 'devOptions.webhooks': 'Webhook', + 'devOptions.webhooksDesc': 'Konfigurasi dan uji integrasi webhook', + 'devOptions.memoryInspection': 'Inspeksi Memori', + 'devOptions.memoryInspectionDesc': 'Jelajahi, kueri, dan kelola entri memori', + 'voice.pushToTalk': 'Tekan untuk Bicara', + 'voice.recording': 'Merekam...', + 'voice.processing': 'Memproses...', + 'voice.languageHint': 'Bahasa', + 'misc.rehydrating': 'Memuat data Anda...', + 'misc.checkingServices': 'Memeriksa layanan...', + 'misc.serviceUnavailable': 'Layanan Tidak Tersedia', + 'misc.somethingWentWrong': 'Terjadi kesalahan', + 'misc.tryAgainLater': 'Silakan coba lagi nanti.', + 'misc.restartApp': 'Mulai Ulang Aplikasi', + 'misc.updateAvailable': 'Pembaruan Tersedia', + 'misc.updateNow': 'Perbarui Sekarang', + 'misc.updateLater': 'Nanti', + 'misc.downloading': 'Mengunduh...', + 'misc.installing': 'Menginstal...', + 'misc.beta': 'Beta', + 'misc.betaFeedback': 'Kirim masukan', + 'mnemonic.title': 'Frasa Pemulihan', + 'mnemonic.warning': 'Tulis kata-kata ini berurutan dan simpan di tempat aman.', + 'mnemonic.copyWarning': + 'Jangan pernah membagikan frasa pemulihan. Siapa pun yang memiliki kata-kata ini dapat mengakses akun Anda.', + 'mnemonic.copied': 'Frasa pemulihan disalin ke clipboard', + 'mnemonic.reveal': 'Tampilkan frasa', + 'mnemonic.revealPhrase': 'Tampilkan frasa pemulihan', + 'mnemonic.hidden': 'Frasa pemulihan disembunyikan', + 'privacy.title': 'Privasi & Keamanan', + 'privacy.description': 'Laporan transparansi data yang dikirim ke layanan eksternal.', + 'privacy.empty': 'Tidak ada transfer data eksternal terdeteksi.', + 'privacy.whatLeavesComputer': 'Data yang keluar dari komputer Anda', + 'privacy.loading': 'Memuat detail privasi...', + 'privacy.loadError': + 'Tidak dapat memuat daftar privasi live. Kontrol analitik di bawah tetap berfungsi.', + 'privacy.noCapabilities': 'Belum ada kemampuan yang mengungkap pergerakan data.', + 'privacy.sentTo': 'Dikirim ke', + 'privacy.leavesDevice': 'Keluar dari perangkat', + 'privacy.staysLocal': 'Tetap lokal', + 'privacy.anonymizedAnalytics': 'Analitik Anonim', + 'privacy.shareAnonymizedData': 'Bagikan Data Penggunaan Anonim', + 'privacy.shareAnonymizedDataDesc': + 'Bantu meningkatkan OpenHuman dengan membagikan laporan crash dan analitik penggunaan anonim. Semua data sepenuhnya anonim; tidak ada data pribadi, pesan, kunci dompet, atau informasi sesi yang dikumpulkan.', + 'privacy.meetingFollowUps': 'Tindak lanjut rapat', + 'privacy.autoHandoffMeet': 'Serahkan transkrip Google Meet otomatis ke orchestrator', + 'privacy.autoHandoffMeetDesc': + 'Saat panggilan Google Meet berakhir, orchestrator OpenHuman dapat membaca transkrip dan mengambil tindakan seperti menyusun pesan, menjadwalkan tindak lanjut, atau memposting ringkasan ke workspace Slack yang terhubung. Nonaktif secara default.', + 'privacy.analyticsDisclaimer': + 'Semua analitik dan laporan bug sepenuhnya anonim. Saat aktif, kami hanya mengumpulkan informasi crash, jenis perangkat, dan lokasi file error. Kami tidak pernah mengakses pesan, data sesi, kunci dompet, API key, atau informasi pribadi Anda. Pengaturan ini bisa diubah kapan saja.', + 'settings.about.version': 'Versi', + 'settings.about.updateAvailable': 'tersedia', + 'settings.about.softwareUpdates': 'Pembaruan perangkat lunak', + 'settings.about.lastChecked': 'Terakhir diperiksa', + 'settings.about.checking': 'Memeriksa...', + 'settings.about.checkForUpdates': 'Periksa pembaruan', + 'settings.about.releases': 'Rilis', + 'settings.about.releasesDesc': 'Telusuri catatan rilis dan build sebelumnya di GitHub.', + 'settings.about.openReleases': 'Buka rilis GitHub', + 'settings.about.connection': 'Koneksi', + 'settings.about.connectionMode': 'Mode', + 'settings.about.connectionModeLocal': 'Lokal', + 'settings.about.connectionModeCloud': 'Awan', + 'settings.about.connectionModeUnset': 'Tidak dipilih', + 'settings.about.serverUrl': 'URL Server', + 'settings.about.serverUrlUnavailable': 'Tidak tersedia', + 'settings.about.connectionHelperLocal': + 'Spawn in- proses oleh Tauri shell pada aplikasi peluncuran. Port dipilih saat startup, jadi URL ini berubah antara peluncuran.', + 'settings.about.connectionHelperCloud': + 'Terhubung ke inti remote. Ubah ini dalam BootCheck atau mode awan picker.', + 'settings.heartbeat.title': 'Detak jantung & loop', + 'settings.heartbeat.desc': 'Kontrol irama penjadwalan latar belakang dan periksa peta loop.', + 'settings.ledgerUsage.title': 'Buku besar penggunaan', + 'settings.ledgerUsage.desc': + 'Menghabiskan kredit baru-baru ini, anggaran matematika, dan latar belakang API membaca anggaran.', + 'settings.costDashboard.title': 'Papan dashboard Biaya', + 'settings.costDashboard.desc': + '7 hari menghabiskan dan token membakar seluruh kawanan, dengan kecepatan anggaran dan rusak.', + 'settings.costDashboard.sevenDayCost': '7 hari biaya harian', + 'settings.costDashboard.sevenDayTokens': 'Penggunaan token 7 hari', + 'settings.costDashboard.totalSpend': 'Total 7 hari', + 'settings.costDashboard.monthlyPace': 'Kecepatan bulanan', + 'settings.costDashboard.budgetLimit': 'Batas anggaran', + 'settings.costDashboard.utilization': 'Utilisasi', + 'settings.costDashboard.modelBreakdown': 'Kerusakan per- model', + 'settings.costDashboard.model': 'Model AI', + 'settings.costDashboard.provider': 'Penyedia', + 'settings.costDashboard.cost': 'Biaya', + 'settings.costDashboard.tokens': 'Token', + 'settings.costDashboard.requests': 'Permintaan', + 'settings.costDashboard.percentOfTotal': '% total', + 'settings.costDashboard.inputTokens': 'Input', + 'settings.costDashboard.outputTokens': 'Output', + 'settings.costDashboard.budgetNormal': 'Pada trek', + 'settings.costDashboard.budgetWarning': 'Peringatan', + 'settings.costDashboard.budgetExceeded': 'Lebih dari anggaran', + 'settings.costDashboard.noBudget': 'Tak ada batas yang ditata', + 'settings.costDashboard.noData': 'Tidak ada biaya yang dicatat belum selama 7 hari terakhir.', + 'settings.costDashboard.noModels': 'Tidak ada aktivitas model dalam 7 hari terakhir.', + 'settings.costDashboard.loading': 'Memuat dasbor biaya...', + 'settings.costDashboard.disabledHint': + 'Papan dashboard biaya dinonaktifkan dalam konfigurasi. Set [cost.dashboard] diaktifkan = true dalam config.toml untuk mengaktifkan kembali.', + 'settings.costDashboard.subtitle': + 'Hidup menghabiskan dan token membakar seluruh kawanan. Bars auto- refresh setiap beberapa detik - tidak ada halaman reload yang dibutuhkan.', + 'settings.costDashboard.summaryAriaLabel': 'Metric ringkasan biaya', + 'settings.costDashboard.lastSevenDays': '7 hari terakhir', + 'settings.costDashboard.utilizationOf': 'of', + 'settings.costDashboard.thisMonth': 'bulan ini', + 'settings.costDashboard.monthlyPaceHint': + 'Diproyeksikan pengeluaran bulanan pada tingkat harian (avg × 30).', + 'settings.costDashboard.budgetLimitHint': + 'Anggaran bulanan dibaca dari Cost.months _ limit _ usd di config.toml.', + 'settings.costDashboard.dailyTarget': 'Target harian', + 'settings.costDashboard.today': 'Hari ini', + 'settings.costDashboard.todayBadge': 'TODAY', + 'settings.costDashboard.unknownProvider': '-', + 'settings.costDashboard.justNow': 'Baru saja', + 'settings.costDashboard.secondsAgo': '{value}s yang lalu', + 'settings.costDashboard.minutesAgo': '{value}m yang lalu', + 'settings.costDashboard.hoursAgo': '{value}h yang lalu', + 'settings.costDashboard.daysAgo': '{value}d yang lalu', + 'settings.costDashboard.updated': 'Diperbarui', + 'settings.costDashboard.refresh': 'Segarkan', + 'settings.costDashboard.utcNote': 'Hari libur di UTC', + 'settings.costDashboard.stackedNote': 'Masukan + keluaran ditumpuk', + 'settings.costDashboard.modelBreakdownHint': 'Diperburuk 7 hari terakhir.', + 'settings.costDashboard.noDataHint': + 'Kirim pesan agen - penggunaan token dari panggilan penyedia berikutnya akan mengisi bagan dalam waktu ~10.', + 'settings.search.title': 'Mesin pencari', + 'settings.search.menuDesc': + 'Baku bagi OpenHuman- mengatur pencarian atau menghubungkan penyedia anda sendiri dengan kunci API.', + 'settings.search.description': + 'Pilih mesin pencari yang digunakan agen, atau nonaktifkan alat pencarian sepenuhnya. Managed menggunakan backend OpenHuman (tanpa pengaturan). Parallel, Brave, dan Querit berjalan langsung dari mesin Anda menggunakan kunci API Anda.', + 'settings.search.engineAria': 'Mesin pencari', + 'settings.search.engineDisabledLabel': 'Disabled', + 'settings.search.engineDisabledDesc': + 'Hapus alat pencarian dari konteks agen dan daftar alat yang tersedia.', + 'settings.search.engineManagedLabel': 'OpenHuman Dikelola', + 'settings.search.engineManagedDesc': + 'Baku. Diarahkan melalui backend OpenHuman — tidak diperlukan kunci API.', 'settings.search.localManagedUnavailable': 'Pencarian OpenHuman Managed tidak tersedia untuk pengguna lokal. Tambahkan API key Parallel atau Brave Anda sendiri untuk mengaktifkan pencarian web.', + 'settings.search.engineParallelLabel': 'Parallel', + 'settings.search.engineParallelDesc': + 'Parallel Langsung API: pencarian, ekstrak, percakapan, penelitian, perkaya, alat dataset.', + 'settings.search.engineBraveLabel': 'Brave Penelusuran', + 'settings.search.engineBraveDesc': + 'Brave Langsung Pencarian API: web, berita, gambar, dan alat video.', + 'settings.search.engineQueritLabel': 'Querit', + 'settings.search.engineQueritDesc': + 'Querit Langsung API: pencarian web dengan situs, rentang waktu, negara, dan filter bahasa.', + 'settings.search.statusConfigured': 'Dikonfigurasi', + 'settings.search.statusNeedsKey': 'Memerlukan kunci API', + 'settings.search.fallbackToManaged': + 'Tidak ada kunci yang dikonfigurasi - pencarian akan jatuh kembali ke Managed sampai kunci disimpan.', + 'settings.search.getApiKey': 'Dapatkan kunci API', + 'settings.search.save': 'Simpan', + 'settings.search.clear': 'Hapus', + 'settings.search.show': 'Tampilkan', + 'settings.search.hide': 'Sembunyikan', + 'settings.search.statusSaving': 'Menyimpan…', + 'settings.search.statusSaved': 'Tersimpan.', + 'settings.search.statusError': 'Gagal', + 'settings.search.parallelKeyLabel': 'Parallel API kunci', + 'settings.search.braveKeyLabel': 'Brave Penelusuran API kunci', + 'settings.search.queritKeyLabel': 'kunci Querit API', + 'settings.search.placeholderStored': '•••••••• (disimpan)', + 'settings.search.placeholderParallel': 'pk_...', + 'settings.search.placeholderBrave': 'BSA...', + 'settings.search.placeholderQuerit': 'kunci Querit API', + 'settings.search.allowedSitesLabel': 'Situs yang diijinkan', + 'settings.search.allowedSitesHint': + 'Host yang boleh dibuka dan dibaca oleh asisten — melalui pengambilan web dan alat browser — satu per baris, mis. reuters.com. Sebuah host juga mencakup subdomain-nya. Penelusuran web itu sendiri tidak dibatasi oleh daftar ini.', + 'settings.search.allowedSitesAllOn': + 'Asisten dapat membuka website publik. Alamat lokal dan pribadi tetap diblokir.', + 'settings.search.allowedSitesPlaceholder': 'reuters.com\napnews.com\ngithub.com', + 'settings.search.allowedSitesSave': 'Simpan situs web', + 'settings.search.accessModeAria': 'Mode akses web', + 'settings.search.accessAllowAll': 'Izinkan semua', + 'settings.search.accessCustom': 'Kustom', + 'settings.search.accessBlockAll': 'Blokir semua', + 'settings.search.accessBlockAllHint': + 'Semua akses web diblokir - asisten tidak dapat membuka atau membaca website apapun.', + 'settings.embeddings.title': 'Sematan', + 'settings.embeddings.description': + 'Pilih penyedia embedding yang mengubah memori menjadi vektor untuk pencarian semantik. Mengubah penyedia, model, atau dimensi membatalkan vektor yang tersimpan dan memerlukan reset memori penuh.', + 'settings.embeddings.providerAria': 'Penyedia embedding', + 'settings.embeddings.statusConfigured': 'Dikonfigurasi', + 'settings.embeddings.statusNeedsKey': 'Perlu kunci API', + 'settings.embeddings.apiKeyLabel': 'Kunci API {provider}', + 'settings.embeddings.placeholderStored': '•••••••• (disimpan)', + 'settings.embeddings.placeholderKey': 'Tempel kunci API Anda…', + 'settings.embeddings.keyStoredEncrypted': 'Kunci API Anda disimpan terenkripsi di perangkat ini.', + 'settings.embeddings.show': 'Tampilkan', + 'settings.embeddings.hide': 'Sembunyikan', + 'settings.embeddings.save': 'Simpan', + 'settings.embeddings.clear': 'Hapus', + 'settings.embeddings.model': 'Model AI', + 'settings.embeddings.dimensions': 'Dimensi', + 'settings.embeddings.customEndpoint': 'Endpoint kustom', + 'settings.embeddings.customModelPlaceholder': 'Nama model', + 'settings.embeddings.customDimsPlaceholder': 'Meredupkan', + 'settings.embeddings.applyCustom': 'Terapkan', + 'settings.embeddings.testConnection': 'Uji koneksi', + 'settings.embeddings.testing': 'Menguji…', + 'settings.embeddings.testSuccess': 'Terhubung — {dims} dimensi', + 'settings.embeddings.testFailed': 'Gagal: {error}', + 'settings.embeddings.saving': 'Menyimpan…', + 'settings.embeddings.saved': 'Tersimpan.', + 'settings.embeddings.errorPrefix': 'Gagal', + 'settings.embeddings.wipeTitle': 'Reset vektor memori?', + 'settings.embeddings.wipeBody': + 'Mengubah penyedia embedding, model, atau dimensi akan menghapus semua vektor memori yang tersimpan. Memori harus dibangun ulang sebelum pencarian berfungsi kembali. Ini tidak dapat dibatalkan.', + 'settings.embeddings.cancel': 'Batal', + 'settings.embeddings.confirmWipe': 'Hapus & terapkan', + 'settings.embeddings.setupTitle': 'Siapkan {provider}', + 'settings.embeddings.saveAndSwitch': 'Simpan & ganti', + 'settings.embeddings.optional': 'opsional', + 'settings.embeddings.vectorSearchDisabled': + 'Pencarian Vektor dinonaktifkan. Recall memori akan menggunakan kata kunci pencocokan dan retensi saja - tidak ada peringkat semantik.', + 'settings.embeddings.clearKey': 'Hapus kunci API', + 'pages.settings.ai.embeddings': 'Penyematan', + 'pages.settings.ai.embeddingsDesc': 'Model encoding vektor untuk pengambilan memori', + 'mcp.alphaBadge': 'Alfa', + 'mcp.alphaBannerText': + 'Dukungan server MCP masih dalam tahap alpha awal. Registry Smithery, alur instalasi, dan koneksi alat mungkin berperilaku tidak terduga atau berubah antara rilis.', + 'mcp.toolList.noTools': 'Tidak ada alat yang tersedia.', + 'mcp.setup.secretDialog.title': 'MCP Penyiapan — Masukkan Rahasia', + 'mcp.setup.secretDialog.bodyPrefix': 'Agen penyiapan MCP memerlukan', + 'mcp.setup.secretDialog.bodySuffix': + 'Nilai Anda dikirim langsung ke inti proses dan tidak pernah memasuki percakapan AI.', + 'mcp.setup.secretDialog.inputLabel': 'Nilai', + 'mcp.setup.secretDialog.inputPlaceholder': 'Tempel di sini', + 'mcp.setup.secretDialog.show': 'Tampilkan', + 'mcp.setup.secretDialog.hide': 'Sembunyikan', + 'mcp.setup.secretDialog.submit': 'Kirim', + 'mcp.setup.secretDialog.cancel': 'Batal', + 'mcp.setup.secretDialog.submitting': 'Mengirimkan…', + 'mcp.setup.secretDialog.errorPrefix': 'Gagal mengirimkan:', + 'mcp.setup.secretDialog.privacyNote': + 'Terenkripsi di meja rahasia MCP lokal. Tidak pernah log atau dikirim ke model.', + 'devices.betaBadge': 'Beta', + 'devices.betaText': + 'Fitur ini sedang dalam versi beta. Pasangkan ponsel iOS dengan OpenHuman ini untuk menggunakannya sebagai klien jarak jauh.', 'devices.comingSoonDescription': 'Pemasangan perangkat akan segera hadir. Halaman ini akan menjadi tempat untuk memasangkan iPhone dan mengelola perangkat yang terhubung.', + 'devices.title': 'Perangkat', + 'devices.pairIphone': 'Pasangkan iPhone', + 'devices.noPaired': 'Tidak ada perangkat yang dipasangkan', + 'devices.emptyState': + 'Pindai kode QR di iPhone Anda untuk menghubungkannya ke sesi OpenHuman ini.', + 'devices.devicePairedTitle': 'Perangkat yang dipasangkan', + 'devices.devicePairedMessage': 'iPhone berhasil tersambung.', + 'devices.deviceRevokedTitle': 'Perangkat dicabut', + 'devices.deviceRevokedMessage': '{label} dihapus.', + 'devices.revokeFailedTitle': 'Pencabutan gagal', + 'devices.online': 'Online', + 'devices.offline': 'Offline', + 'devices.lastSeenNever': 'Tidak pernah', + 'devices.lastSeenNow': 'Baru saja', + 'devices.lastSeenMinutes': '{count}m lalu', + 'devices.lastSeenHours': '{count}h lalu', + 'devices.lastSeenDays': '{count}d lalu', + 'devices.revoke': 'Cabut', + 'devices.revokeAria': 'Cabut {label}', + 'devices.confirmRevokeTitle': 'Cabut perangkat?', + 'devices.confirmRevokeBody': + '{label} tidak akan lagi dapat terhubung. Tindakan ini tidak dapat dibatalkan.', + 'devices.loadFailed': 'Gagal memuat perangkat: {message}', + 'devices.pairModal.title': 'Pasangkan iPhone', + 'devices.pairModal.loading': 'Membuat kode penyandingan…', + 'devices.pairModal.instructions': 'Buka aplikasi OpenHuman di iPhone Anda dan pindai kode ini.', + 'devices.pairModal.expiresIn': 'Masa berlaku kode akan habis dalam ~{count} menit', + 'devices.pairModal.expiresInPlural': 'Masa berlaku kode akan habis dalam ~{count} menit', + 'devices.pairModal.showDetails': 'Tampilkan detailnya', + 'devices.pairModal.hideDetails': 'Sembunyikan detailnya', + 'devices.pairModal.channelId': 'ID Saluran', + 'devices.pairModal.pairingUrl': 'Penyandingan URL', + 'devices.pairModal.expiredTitle': 'QR code kedaluwarsa', + 'devices.pairModal.expiredBody': 'Buat kode baru untuk melanjutkan penyandingan.', + 'devices.pairModal.generateNewCode': 'Buat kode baru', + 'devices.pairModal.successTitle': 'Dipasangkan dengan iPhone', + 'devices.pairModal.autoClose': 'Menutup secara otomatis…', + 'devices.pairModal.errorPrefix': 'Gagal membuat penyandingan: {message}', + 'devices.pairModal.errorTitle': 'Ada yang tidak beres', + 'devices.pairModal.copyUrl': 'Salin', + 'mcp.catalog.searchAria': 'Cari katalog Smithery', + 'mcp.catalog.searchPlaceholder': 'Cari katalog Smithery...', + 'mcp.catalog.loadFailed': 'Gagal memuat katalog', + 'mcp.catalog.noResults': 'Tidak ada server yang ditemukan.', + 'mcp.catalog.noResultsFor': 'Tidak ditemukan server untuk "{query}".', + 'mcp.catalog.loadMore': 'Muat selengkapnya', + 'mcp.configAssistant.title': 'Asisten konfigurasi', + 'mcp.configAssistant.empty': + 'Tanyakan tentang konfigurasi, env vars yang diperlukan, atau langkah setup.', + 'mcp.configAssistant.suggestedValues': 'Nilai yang disarankan:', + 'mcp.configAssistant.valueHidden': '(nilai tersembunyi)', + 'mcp.configAssistant.applySuggested': 'Terapkan nilai yang disarankan', + 'mcp.configAssistant.reinstallHint': 'Instal ulang dengan nilai ini untuk menerapkannya.', + 'mcp.configAssistant.thinking': 'Berpikir...', + 'mcp.configAssistant.inputPlaceholder': + 'Ajukan suatu pertanyaan (Masukkan untuk mengirim, Shift + Enter untuk baris baru)', + 'mcp.configAssistant.send': 'Kirim', + 'mcp.configAssistant.failedResponse': 'Gagal mendapat respons', + 'mcp.toolList.availableSingular': '{count} alat tersedia', + 'mcp.toolList.availablePlural': '{count} alat tersedia', + 'mcp.toolList.tryTool': 'Cobalah', + 'mcp.toolList.tryToolAria': 'Buka tempat bermain eksekusi untuk {name}', + 'mcp.playground.title': 'Jalankan {name}', + 'mcp.playground.close': 'Tutup taman bermain', + 'mcp.playground.inputSchema': 'Skema masukan', + 'mcp.playground.argsLabel': 'Argumen (JSON)', + 'mcp.playground.argsHelp': + 'Tipe JSON yang cocok dengan skema masukan. Masukan kosong diperlakukan sebagai {}.', + 'mcp.playground.runShortcut': '/Ctrl + Enter untuk dijalankan', + 'mcp.playground.format': 'Format', + 'mcp.playground.invalidJson': 'JSON tidak valid', + 'mcp.playground.run': 'Jalankan alat', + 'mcp.playground.running': 'Berjalan...', + 'mcp.playground.result': 'Hasil', + 'mcp.playground.resultError': 'Alat mengembalikan galat', + 'mcp.playground.copyResult': 'Hasil salinan', + 'mcp.playground.copied': 'Disalin', + 'mcp.playground.history': 'Riwayat', + 'mcp.playground.historyEmpty': 'Belum ada doa dalam sesi ini.', + 'mcp.playground.historyLoad': 'Muat', + 'mcp.playground.unexpectedError': 'Terjadi galat saat memanggil alat.', + 'mcp.catalog.deployed': 'Dikerahkan', + 'mcp.catalog.installCount': '{count} diinstal', + 'app.update.dismissNotification': 'Tutup pemberitahuan pembaruan', + 'bootCheck.rpcAuthSuffix': 'di setiap RPC.', + 'app.localAiDownload.expandAria': 'Perluas kemajuan pengunduhan', + 'app.localAiDownload.collapseAria': 'Ciutkan kemajuan pengunduhan', + 'app.localAiDownload.dismissAria': 'Tutup pemberitahuan unduhan', + 'mobile.nav.ariaLabel': 'Navigasi seluler', + 'progress.stepsAria': 'Langkah kemajuan', + 'progress.stepAria': 'Langkah {current} dari {total}', + 'workspace.vaultsTitle': 'Gudang pengetahuan', + 'workspace.vaultsDesc': 'Arahkan ke folder lokal; file dipotong dan dicerminkan ke dalam memori.', + 'calls.title': 'Panggilan', + 'calls.comingSoonBody': 'Panggilan dengan bantuan AI akan segera hadir. Pantau terus.', + 'art.rotatingTetrahedronAria': 'Pesawat ruang angkasa tetrahedron terbalik yang berputar', + 'mcp.installed.title': 'Terpasang', + 'mcp.installed.browseCatalog': 'Jelajahi katalog', + 'mcp.installed.empty': 'Belum ada server MCP yang terinstal.', + 'mcp.installed.toolSingular': '{count} alat', + 'mcp.installed.toolPlural': '{count} alat', + 'mcp.health.title': 'Kesehatan', + 'mcp.health.summaryAria': 'Ringkasan sambungan kesehatan MCP', + 'mcp.health.connectedCount': '{count} tersambung', + 'mcp.health.connectingCount': 'Menghubungkan {count}', + 'mcp.health.errorCount': 'Kesalahan {count}', + 'mcp.health.disconnectedCount': '{count} diam', + 'mcp.health.retryAll': 'Coba lagi semua ({count})', + 'mcp.health.retryAllAria': 'Coba lagi semua server {count} terdistorsi', + 'mcp.health.disconnectAll': 'Putuskan semua ({count})', + 'mcp.health.disconnectAllAria': 'Putuskan semua server {count} terhubung dengan server MCP', + 'mcp.health.disconnectConfirm.title': 'Putuskan semua server MCP?', + 'mcp.health.disconnectConfirm.body': + 'Ini akan memutuskan {count} server MCP yang sedang terhubung. Konfigurasi dan rahasia yang terpasang tetap disimpan; Anda dapat menghubungkan kembali server mana saja nanti.', + 'mcp.health.disconnectConfirm.cancel': 'Batal', + 'mcp.health.disconnectConfirm.confirm': 'Putuskan semua', + 'mcp.health.opErrorGeneric': 'Operasi Bulk gagal. Lihat log.', + 'mcp.health.bulkPartialFailure': '{failed} dari {total} server gagal. Lihat log.', + 'mcp.installed.search.landmarkAria': 'Pencarian terinstal server MCP', + 'mcp.installed.search.inputAria': 'Filter yang terpasang server MCP dengan nama', + 'mcp.installed.search.placeholder': 'Penyaring server...', + 'mcp.installed.search.clearAria': 'Bersihkan filter', + 'mcp.installed.search.countMatches': '{shown} dari server {total}', + 'mcp.installed.search.noMatches': 'Tak ada server yang cocok dengan "{query}".', + 'mcp.inventory.openButton': 'Inventaris', + 'mcp.inventory.openAria': 'Buka panel inventaris MCP yang dapat diasah', + 'mcp.inventory.title': 'Sharable MCP Inventaris', + 'mcp.inventory.subtitle': + 'Ekspor server MCP terinstal Anda sebagai manifest bebas portabel, atau impor satu dari rekan satu tim. Nilai env rahasia tidak pernah disertakan atau diimpor.', + 'mcp.inventory.close': 'Tutup panel inventaris', + 'mcp.inventory.tablistAria': 'Daerah inventaris', + 'mcp.inventory.tab.export': 'Ekspor', + 'mcp.inventory.tab.import': 'Impor', + 'mcp.inventory.export.empty': + 'Belum ada server MCP yang terpasang - belum ada yang perlu diekspor. Pasang satu dari katalog pertama.', + 'mcp.inventory.export.privacyTitle': 'Apa yang ada di sini jelas', + 'mcp.inventory.export.privacyBody': + 'Nama server, nama yang memenuhi syarat, hanya config variabel KEY, dan bukan rahasia saja. Nilai rahasia, identifikasi mesin Anda, dan penanda waktu instal sengaja dilucuti.', + 'mcp.inventory.export.serverCount': 'Server {count} dalam daftar muatan ini', + 'mcp.inventory.export.copy': 'Salin', + 'mcp.inventory.export.copied': 'Disalin', + 'mcp.inventory.export.copyAria': 'Salin manifest JSON ke papan klip', + 'mcp.inventory.export.download': 'Unduh', + 'mcp.inventory.export.downloadAria': 'Unduh daftar muatan sebagai berkas JSON', + 'mcp.inventory.import.trustTitle': 'Perlakukan manifestasi impor sebagai kode tidak terpercaya', + 'mcp.inventory.import.trustBody': + 'Server MCP adalah alat yang kau berikan pada agenmu. Hanya impor manifestasi dari sumber yang Anda percaya. Setiap instalasi memerlukan klik eksplisit Anda; tidak ada yang otomatis terinstal.', + 'mcp.inventory.import.pasteLabel': 'Tempel daftar muatan JSON', + 'mcp.inventory.import.pastePlaceholder': + 'Tempel daftar muatan di sini, atau unggah berkas .json di bawah ini.', + 'mcp.inventory.import.preview': 'Pratinjau', + 'mcp.inventory.import.clear': 'Bersihkan', + 'mcp.inventory.import.uploadFile': 'atau mengunggah sebuah berkas .json', + 'mcp.inventory.import.uploadFileAria': 'Unggah berkas manifest .json', + 'mcp.inventory.import.fileTooLarge': 'Berkas terlalu besar (lebih dari 1 MB). Menolak beban.', + 'mcp.inventory.import.fileReadFailed': 'Tidak dapat membaca berkas.', + 'mcp.inventory.import.parseErrorPrefix': 'Tidak dapat mengurai daftar muatan:', + 'mcp.inventory.import.previewHeading': 'Pratinjau', + 'mcp.inventory.import.previewCounts': 'Server {total} - {newly} baru, {already} telah dipasang', + 'mcp.inventory.import.previewEmpty': 'Terlihat tidak ada server.', + 'mcp.inventory.import.exportedFrom': 'Diusir dari {exporter}', + 'mcp.inventory.import.exportedAt': 'di {when}', + 'mcp.inventory.import.statusNew': 'Baru', + 'mcp.inventory.import.statusAlreadyInstalled': 'Sudah dipasang', + 'mcp.inventory.import.envKeysLabel': 'Env kunci', + 'mcp.inventory.import.install': 'Instal', + 'mcp.inventory.import.installAria': 'Pasang {name} dari daftar muatan ini', + 'mcp.inventory.import.skipped': 'dilewati', + 'mcp.inventory.parseError.empty': 'Menyatakan kosong.', + 'mcp.inventory.parseError.invalidJson': 'JSON tidak sah.', + 'mcp.inventory.parseError.rootNotObject': 'Menyatakan harus menjadi objek JSON di akar.', + 'mcp.inventory.parseError.unsupportedSchema': + 'Skema manifest tidak didukung - berkas ini tidak dihasilkan oleh sebuah exporter yang kompatibel.', + 'mcp.inventory.parseError.missingExportedAt': 'Kehilangan atau tidak valid `exported_at` field.', + 'mcp.inventory.parseError.missingExportedBy': 'Kehilangan atau tidak valid `exported_by` field.', + 'mcp.inventory.parseError.invalidServers': 'Hilang atau tidak valid `servers` array.', + 'mcp.inventory.parseError.serverNotObject': 'Entri server bukan objek.', + 'mcp.inventory.parseError.serverMissingQualifiedName': + 'Sebuah entri server hilang yang memenuhi syarat _ nama.', + 'mcp.inventory.parseError.serverMissingDisplayName': 'Entri server kehilangan nama layarnya.', + 'mcp.inventory.parseError.serverEnvKeysNotArray': + 'Entri server memiliki ruas env _ keys yang bukan array string.', + 'mcp.inventory.parseError.serverContainsEnv': + 'Sebuah entri server berisi sebuah peta nilai `env`. Menolak impor - manifest hanya harus memuat env _ keys (names), jangan pernah nilai rahasia.', + 'mcp.inventory.parseError.duplicateQualifiedName': + 'Duplikasi _ nama memenuhi syarat ditemukan dalam daftar muatan. Setiap server harus muncul sekali.', + 'mcp.tab.loading': 'Memuat MCP server...', + 'mcp.tab.emptyDetail': 'Pilih server atau telusuri katalog.', + 'mcp.install.loadingDetail': 'Memuat detail server...', + 'mcp.install.back': 'Kembali', + 'mcp.install.title': 'Instal {name}', + 'mcp.install.requiredEnv': 'Variabel lingkungan yang diperlukan', + 'mcp.install.enterValue': 'Masukkan {key}', + 'mcp.install.show': 'Tampilkan', + 'mcp.install.hide': 'Sembunyikan', + 'mcp.install.configLabel': 'Konfigurasi (JSON opsional)', + 'mcp.install.configPlaceholder': '{"key": "value"}', + 'mcp.install.missingRequired': '"{key}" diperlukan', + 'mcp.install.invalidJson': 'Konfigurasi JSON bukan JSON yang valid', + 'mcp.install.failedDetail': 'Gagal memuat detail server', + 'mcp.install.failedInstall': 'Penginstalan gagal', + 'mcp.install.button': 'Penginstalan', + 'mcp.install.installing': 'Penginstalan...', + 'mcp.detail.suggestedEnvReady': 'Nilai lingkungan yang disarankan sudah siap', + 'mcp.detail.suggestedEnvBody': + 'Instal ulang server ini dengan nilai yang disarankan untuk diterapkan: {keys}', + 'mcp.detail.connect': 'Sambungkan', + 'mcp.detail.connecting': 'Sambungan...', + 'mcp.detail.disconnect': 'Putuskan sambungan', + 'mcp.detail.hideAssistant': 'Sembunyikan asisten', + 'mcp.detail.helpConfigure': 'Bantu saya mengonfigurasi', + 'mcp.detail.confirmUninstall': 'Konfirmasi uninstall?', + 'mcp.detail.confirmUninstallAction': 'Ya, hapus instalan', + 'mcp.detail.uninstall': 'Hapus instalan', + 'mcp.detail.envVars': 'Variabel lingkungan', + 'mcp.detail.tools': 'Alat', + 'onboarding.skipForNow': 'Lewati Sekarang', + 'onboarding.localAI.continueWithCloud': 'Lanjutkan dengan Cloud', + 'onboarding.localAI.useLocalAnyway': + 'Gunakan AI lokal tetap (tidak disarankan untuk perangkat Anda)', + 'onboarding.localAI.useLocalInstead': 'Gunakan AI lokal saja (hubungkan Ollama sekarang)', + 'onboarding.localAI.setupIssue': 'Penyiapan AI lokal mengalami masalah', + 'autonomy.title': 'Otonomi agen', + 'autonomy.maxActionsLabel': 'Tindakan maksimal per jam', + 'autonomy.maxActionsHelp': + 'Jumlah maksimum tindakan alat yang dapat dijalankan agen per jam bergulir. Nilai baru berlaku untuk obrolan berikutnya. Pekerjaan cron dan pendengar saluran tetap menggunakan batas saat ini sampai Anda me-restart OpenHuman.', + 'autonomy.statusSaving': 'Menyimpan…', + 'autonomy.statusSaved': 'Tersimpan.', + 'autonomy.statusFailed': 'Gagal', + 'autonomy.unlimitedNote': 'Tidak terbatas — pembatasan tarif dinonaktifkan.', + 'autonomy.invalidIntegerMsg': + 'Harus berupa bilangan bulat positif (gunakan preset Tidak Terbatas untuk tanpa batas).', + 'autonomy.presetUnlimited': 'Tidak terbatas (default)', + 'triggers.toggleFailed': '{action} gagal untuk {trigger}: {message}', + 'settings.ai.overview': 'Ringkasan Sistem AI', + 'settings.ai.configStatus': 'Status Konfigurasi', + 'settings.ai.fallbackMode': 'Mode Fallback', + 'settings.ai.loadedFromRuntime': 'Dimuat dari Runtime', + 'settings.ai.loadingDuration': 'Durasi Muat', + 'settings.ai.localRuntime': 'Runtime Model Lokal', + 'settings.ai.openManager': 'Buka Pengelola', + 'settings.ai.retryDownload': 'Coba Unduh Lagi', + 'settings.ai.state': 'Status', + 'settings.ai.targetModel': 'Model Target', + 'settings.ai.download': 'Unduh', + 'settings.ai.localModelUnavailable': 'Status model lokal tidak tersedia.', + 'settings.ai.soulConfig': 'Konfigurasi Persona SOUL', + 'settings.ai.refreshing': 'Menyegarkan...', + 'settings.ai.refreshSoul': 'Segarkan SOUL', + 'settings.ai.loadingSoul': 'Memuat konfigurasi SOUL...', + 'settings.ai.identity': 'Identitas', + 'settings.ai.personality': 'Kepribadian', + 'settings.ai.safetyRules': 'Aturan Keamanan', + 'settings.ai.source': 'Sumber', + 'settings.ai.loaded': 'Dimuat', + 'settings.ai.toolsConfig': 'Konfigurasi TOOLS', + 'settings.ai.refreshTools': 'Segarkan TOOLS', + 'settings.ai.toolsAvailable': 'Alat Tersedia', + 'settings.ai.tools': 'alat', + 'settings.ai.activeSkills': 'Skill Aktif', + 'settings.ai.skills': 'skill', + 'settings.ai.skillsOverview': 'Ringkasan Skill', + 'settings.ai.refreshingAll': 'Menyegarkan Semua...', + 'settings.ai.refreshAll': 'Segarkan Semua Konfigurasi AI', + 'settings.notifications.suppressAll': 'Tahan semua notifikasi', + 'settings.notifications.suppressAllDesc': + 'Blokir semua toast notifikasi OS dari aplikasi tertanam terlepas dari status fokus.', + 'settings.notifications.toggleDnd': 'Alihkan Jangan Ganggu', + 'settings.notifications.categories': 'Kategori', + 'settings.notifications.categoryFooter': + 'Menonaktifkan kategori menghentikan notifikasi baru jenis tersebut muncul di pusat notifikasi. Notifikasi yang sudah ada tetap tersimpan sampai dibersihkan.', + 'settings.billing.movedToWeb': 'Tagihan dipindahkan ke web', + 'settings.billing.openDashboard': 'Buka dashboard tagihan', + 'settings.billing.movedToWebDesc': + 'Perubahan langganan, metode pembayaran, kredit, dan invoice kini dikelola di web TinyHumans.', + 'settings.billing.backToSettings': 'Kembali ke pengaturan', + 'settings.billing.openingBrowser': 'Membuka browser Anda...', + 'settings.billing.browserNotOpen': 'Jika browser tidak terbuka, gunakan tombol di atas.', + 'settings.billing.browserOpenFailed': + 'Browser tidak dapat dibuka otomatis. Gunakan tombol di atas.', + 'settings.tools.chooseCapabilities': + 'Pilih kemampuan yang dapat digunakan OpenHuman atas nama Anda.', + 'settings.tools.saveChanges': 'Simpan Perubahan', + 'settings.tools.preferencesSaved': 'Preferensi tersimpan', + 'settings.tools.saveFailed': 'Gagal menyimpan preferensi. Coba lagi.', + 'settings.screenAwareness.mode': 'Mode', + 'settings.screenAwareness.allExceptBlacklist': 'Semua Kecuali Blacklist', + 'settings.screenAwareness.whitelistOnly': 'Whitelist Saja', + 'settings.screenAwareness.screenMonitoring': 'Pemantauan Layar', + 'settings.screenAwareness.saveSettings': 'Simpan Pengaturan', + 'settings.screenAwareness.session': 'Sesi', + 'settings.screenAwareness.status': 'Status', + 'settings.screenAwareness.active': 'Aktif', + 'settings.screenAwareness.stopped': 'Berhenti', + 'settings.screenAwareness.remaining': 'Tersisa', + 'settings.screenAwareness.startSession': 'Mulai Sesi', + 'settings.screenAwareness.stopSession': 'Hentikan Sesi', + 'settings.screenAwareness.analyzeNow': 'Analisis Sekarang', + 'settings.screenAwareness.macosOnly': + 'Tangkapan layar desktop dan kontrol izin Screen Awareness saat ini hanya didukung di macOS.', + 'connections.comingSoon': 'Segera hadir', + 'connections.setUp': 'Atur', + 'connections.configured': 'Dikonfigurasi', + 'connections.unavailable': 'Tidak tersedia', + 'connections.checking': 'Memeriksa...', + 'connections.walletConfigured': + 'Identitas EVM, BTC, Solana, dan Tron lokal dikonfigurasi dari frasa pemulihan Anda.', + 'connections.walletReady': + 'Siapkan identitas EVM, BTC, Solana, dan Tron lokal dari satu frasa pemulihan.', + 'connections.walletError': + 'Tidak dapat memeriksa status dompet. Ketuk untuk mencoba lagi dari panel Frasa Pemulihan.', + 'connections.walletChecking': 'Memeriksa status dompet...', + 'connections.walletIdentities': 'Identitas dompet', + 'connections.walletDerived': + 'Diturunkan secara lokal dari frasa pemulihan Anda dan hanya disimpan sebagai metadata aman.', + 'connections.privacySecurity': 'Privasi & Keamanan', + 'connections.privacySecurityDesc': + 'Semua data dan kredensial disimpan lokal dengan kebijakan zero-data retention. Informasi Anda dienkripsi dan tidak pernah dibagikan ke pihak ketiga.', + 'channels.status.connecting': 'Menghubungkan', + 'channels.status.notConfigured': 'Belum dikonfigurasi', + 'channels.noActiveRoute': 'Tidak ada rute aktif', + 'channels.activeRoute': 'Rute aktif', + 'channels.loadingDefinitions': 'Memuat definisi kanal...', + 'channels.channelConnections': 'Koneksi Kanal', + 'channels.configureAuthModes': 'Konfigurasi mode autentikasi untuk setiap kanal pesan.', + 'channels.configNotAvailable': 'Konfigurasi untuk', + 'channels.channel': 'kanal', + 'devOptions.coreModeNotSet': 'Mode core: belum diatur', + 'devOptions.coreModeNotSetDesc': + 'Pemilih boot-check belum dikonfirmasi. Gunakan Ganti mode di pemilih untuk memilih Lokal atau Cloud.', + 'devOptions.local': 'Lokal', + 'devOptions.embeddedCoreSidecar': 'Core sidecar tertanam', + 'devOptions.sidecarSpawned': + 'Dijalankan dalam proses oleh shell Tauri saat aplikasi diluncurkan.', + 'devOptions.cloud': 'Cloud', + 'devOptions.remoteCoreRpc': 'RPC core jarak jauh', + 'devOptions.token': 'Token', + 'devOptions.tokenNotSet': 'belum diatur — RPC akan 401', + 'devOptions.triggerSentryTest': 'Picu Tes Sentry (staging)', + 'devOptions.triggerSentryTestDesc': + 'Mengirim error bertag untuk memverifikasi pipeline Sentry. Issue #1072 — hapus setelah verifikasi.', + 'devOptions.sendTestEvent': 'Kirim event tes', + 'devOptions.sending': 'Mengirim...', + 'devOptions.eventSent': 'Event terkirim', + 'devOptions.sentryDisabled': '(tidak ada id — Penjaga dinonaktifkan dalam build ini)', + 'devOptions.failed': 'Gagal', + 'devOptions.appLogs': 'Log aplikasi', + 'devOptions.appLogsDesc': + 'Buka folder berisi file log harian bergulir. Lampirkan file terbaru saat melaporkan masalah.', + 'devOptions.openLogsFolder': 'Buka folder log', + 'mnemonic.phraseSaved': 'Frasa pemulihan tersimpan', + 'mnemonic.walletReady': 'Identitas dompet multi-chain siap. Kembali ke pengaturan...', + 'mnemonic.writeDownWords': 'Tulis', + 'mnemonic.wordsInOrder': + 'kata ini secara berurutan dan simpan di tempat aman. Frasa ini mengamankan kunci enkripsi lokal dan identitas dompet EVM, BTC, Solana, dan Tron Anda.', + 'mnemonic.cannotRecover': + 'Frasa ini tidak dapat dipulihkan jika hilang dan harus tetap sepenuhnya lokal di perangkat Anda.', + 'mnemonic.copyToClipboard': 'Salin ke Clipboard', + 'mnemonic.alreadyHavePhrase': 'Saya sudah memiliki frasa pemulihan', + 'mnemonic.consentSaved': + 'Saya menyimpan frasa ini dan menyetujui penggunaannya untuk pengaturan dompet lokal', + 'mnemonic.enterPhraseToRestore': + 'Masukkan frasa pemulihan Anda di bawah untuk memulihkan identitas dompet lokal, atau tempel frasa lengkap ke kolom mana saja (12 kata untuk cadangan baru; frasa 24 kata dari versi lama tetap berfungsi).', + 'mnemonic.words': 'Kata', + 'mnemonic.validPhrase': 'Frasa pemulihan valid', + 'mnemonic.generateNewPhrase': 'Buat frasa pemulihan baru', + 'mnemonic.securingData': 'Mengamankan Data Anda...', + 'mnemonic.saveRecoveryPhrase': 'Simpan Frasa Pemulihan', + 'mnemonic.userNotLoaded': 'Pengguna belum dimuat. Silakan masuk lagi atau segarkan halaman.', + 'mnemonic.invalidPhrase': 'Frasa pemulihan tidak valid. Periksa kata-kata Anda dan coba lagi.', + 'mnemonic.somethingWentWrong': 'Terjadi kesalahan. Silakan coba lagi.', + 'team.failedToCreate': 'Gagal membuat tim', + 'team.invalidInviteCode': 'Kode undangan tidak valid atau sudah kedaluwarsa', + 'team.failedToSwitch': 'Gagal berpindah tim', + 'team.failedToLeave': 'Gagal meninggalkan tim', + 'team.role.owner': 'Pemilik', + 'team.role.admin': 'Administrator', + 'team.role.billingManager': 'Manajer Tagihan', + 'team.role.member': 'Anggota', + 'team.active': 'Aktif', + 'team.personalTeam': 'Tim pribadi', + 'team.manageTeam': 'Kelola Tim', + 'team.switching': 'Berpindah...', + 'team.switch': 'Pindah', + 'team.leaving': 'Keluar...', + 'team.leave': 'Keluar', + 'team.yourTeams': 'Tim Anda', + 'team.createNewTeam': 'Buat Tim Baru', + 'team.teamName': 'Nama tim', + 'team.creating': 'Membuat...', + 'team.joinExistingTeam': 'Bergabung dengan Tim yang Ada', + 'team.inviteCode': 'Kode undangan', + 'team.joining': 'Bergabung...', + 'team.join': 'Bergabung', + 'team.leaveTeam': 'Tinggalkan Tim', + 'team.confirmLeave': 'Yakin ingin meninggalkan', + 'team.leaveWarning': + 'Anda akan kehilangan akses ke tim dan semua sumber daya tim. Anda memerlukan undangan baru untuk bergabung kembali.', + 'team.management': 'Manajemen Tim', + 'team.notFound': 'Tim tidak ditemukan', + 'team.accessDenied': 'Akses ditolak', + 'team.members': 'Anggota', + 'team.membersDesc': 'Mengelola anggota tim dan peran', + 'team.invites': 'Undangan', + 'team.invitesDesc': 'Membuat dan mengelola kode undangan', + 'team.settings': 'Pengaturan Tim', + 'team.settingsDesc': 'Edit nama dan pengaturan tim', + 'team.editSettings': 'Edit Pengaturan Tim', + 'team.enterName': 'Masukkan nama tim', + 'team.saving': 'Menyimpan...', + 'team.saveChanges': 'Simpan Perubahan', + 'team.delete': 'Hapus Tim', + 'team.deleteDesc': 'Hapus tim ini secara permanen', + 'team.deleting': 'Menghapus...', + 'team.failedToUpdate': 'Gagal memperbarui tim', + 'team.failedToDelete': 'Gagal menghapus tim', + 'team.manageTitle': 'Kelola {name}', + 'team.planCreated': '{plan} Rencana • Dibuat {date}', + 'team.confirmDelete': 'Apakah Anda yakin ingin menghapus {name}?', + 'team.deleteWarning': + 'Tindakan ini tidak dapat dibatalkan. Semua data tim akan dihapus secara permanen.', + 'voice.title': 'Dikte Suara', + 'voice.settings': 'Pengaturan Suara', + 'voice.settingsDesc': 'Tahan hotkey untuk mendiktekan dan memasukkan teks ke kolom aktif.', + 'voice.hotkey': 'Pintasan', + 'voice.activationMode': 'Mode Aktivasi', + 'voice.tapToToggle': 'Ketuk untuk mengalihkan', + 'voice.writingStyle': 'Gaya Penulisan', + 'voice.verbatimTranscription': 'Transkripsi kata per kata', + 'voice.naturalCleanup': 'Pembersihan natural', + 'voice.autoStart': 'Mulai server suara otomatis dengan core', + 'voice.customDictionary': 'Kamus Kustom', + 'voice.customDictionaryDesc': + 'Tambahkan nama, istilah teknis, dan kata domain untuk meningkatkan akurasi pengenalan.', + 'voice.addWord': 'Tambahkan kata...', + 'voice.sttDisabled': 'Dikte suara dinonaktifkan sampai model STT lokal diunduh dan siap.', + 'voice.openLocalAiModel': 'Buka Model AI Lokal', + 'voice.serverRestarted': 'Server suara dimulai ulang dengan pengaturan baru.', + 'voice.settingsSaved': 'Pengaturan suara tersimpan.', + 'voice.serverStarted': 'Server suara dimulai.', + 'voice.serverStopped': 'Server suara dihentikan.', + 'voice.saveVoiceSettings': 'Simpan Pengaturan Suara', + 'voice.startVoiceServer': 'Mulai Server Suara', + 'voice.stopVoiceServer': 'Hentikan Server Suara', + 'voice.debugTitle': 'Debug Suara', + 'voice.failedToLoadSettings': 'Gagal memuat pengaturan suara', + 'voice.failedToSaveSettings': 'Gagal menyimpan pengaturan suara', + 'voice.failedToStartServer': 'Gagal memulai server suara', + 'voice.failedToStopServer': 'Gagal menghentikan server suara', + 'voice.sttDisabledPrefix': 'Dikte suara dinonaktifkan sampai model STT lokal diunduh. Gunakan', + 'voice.sttDisabledSuffix': 'di atas untuk menginstal Whisper.', + 'voice.debug.failedToLoadVoiceDebugData': 'Gagal memuat data debug suara', + 'voice.debug.settingsSaved': 'Pengaturan debug disimpan.', + 'voice.debug.failedToSaveSettings': 'Gagal menyimpan pengaturan suara', + 'voice.debug.runtimeStatus': 'Status Runtime', + 'voice.debug.runtimeStatusDesc': + 'Diagnostik langsung untuk server suara dan mesin ucapan-ke-teks.', + 'voice.debug.server': 'Server', + 'voice.debug.unavailable': 'Tidak tersedia', + 'voice.debug.ready': 'Siap', + 'voice.debug.notReady': 'Belum siap', + 'voice.debug.hotkey': 'Hotkey', + 'voice.debug.notAvailable': 't/a', + 'voice.debug.mode': 'Mode', + 'voice.debug.transcriptions': 'Transkripsi', + 'voice.debug.serverError': 'Kesalahan Server', + 'voice.debug.advancedSettings': 'Pengaturan Lanjutan', + 'voice.debug.advancedSettingsDesc': + 'Parameter penyesuaian tingkat rendah untuk perekaman dan deteksi keheningan.', + 'voice.debug.minimumRecordingSeconds': 'Detik Perekaman Minimum', + 'voice.debug.silenceThreshold': 'Ambang Batas Senyap (RMS)', + 'voice.debug.silenceThresholdDesc': + 'Rekaman dengan energi di bawah nilai ini dianggap sebagai keheningan dan dilewati. Lebih rendah = lebih sensitif.', + 'voice.providers.saved': 'Penyedia suara disimpan.', + 'voice.providers.failedToSave': 'Gagal menyimpan penyedia suara', + 'voice.providers.ellipsis': '…', + 'voice.providers.installing': 'Menginstal', + 'voice.providers.installingBusy': 'Menginstal…', + 'voice.providers.reinstallLocally': 'Instal ulang secara lokal', + 'voice.providers.repair': 'Perbaikan', + 'voice.providers.retryLocally': 'Coba lagi secara lokal', + 'voice.providers.installLocally': 'Instal secara lokal', + 'voice.providers.whisperReady': 'Whisper sudah siap.', + 'voice.providers.whisperInstallStarted': 'Penginstalan Whisper dimulai', + 'voice.providers.queued': 'antri', + 'voice.providers.failedToInstallWhisper': 'Gagal menginstal Whisper', + 'voice.providers.piperReady': 'Piper sudah siap.', + 'voice.providers.piperInstallStarted': 'Penginstalan Piper dimulai', + 'voice.providers.failedToInstallPiper': 'Gagal menginstal Piper', + 'voice.providers.title': 'Penyedia Suara', + 'voice.providers.desc': + 'Pilih tempat transkripsi dan sintesis dijalankan. Gunakan tombol Instal secara lokal untuk mengunduh biner dan model ke workspace Anda. Penyedia lokal dapat disimpan sebelum instalasi selesai — tidak perlu pengaturan WHISPER_BIN atau PIPER_BIN secara manual.', + 'voice.providers.sttProvider': 'Penyedia Ucapan-ke-Teks', + 'voice.providers.sttProviderAria': 'Penyedia STT', + 'voice.providers.cloudWhisperProxy': 'Cloud (Proksi Bisikan)', + 'voice.providers.localWhisper': 'Bisikan Lokal', + 'voice.providers.installRequired': '(perlu instalasi)', + 'voice.providers.whisperInstalledTitle': 'Bisikan dipasang. Klik untuk menginstal ulang.', + 'voice.providers.whisperDownloadTitle': 'Unduh whisper.cpp dan model GGML ke workspace Anda.', + 'voice.providers.installed': 'Terpasang', + 'voice.providers.installFailed': 'Penginstalan gagal', + 'voice.providers.notInstalled': 'Tidak terinstal', + 'voice.providers.whisperModel': 'Model Bisikan', + 'voice.providers.whisperModelAria': 'Model Bisikan', + 'voice.providers.whisperModelTiny': 'Kecil (39 MB, tercepat)', + 'voice.providers.whisperModelBase': 'Dasar (74 MB)', + 'voice.providers.whisperModelSmall': 'Kecil (244 MB)', + 'voice.providers.whisperModelMedium': 'Sedang (769 MB, disarankan)', + 'voice.providers.whisperModelLargeTurbo': 'Besar v3 Turbo (1,5 GB, akurasi terbaik)', + 'voice.providers.ttsProvider': 'Penyedia Text-to-Speech', + 'voice.providers.ttsProviderAria': 'Penyedia TTS', + 'voice.providers.cloudElevenLabsProxy': 'Cloud (proksi ElevenLabs)', + 'voice.providers.localPiper': 'Piper Lokal', + 'voice.providers.piperInstalledTitle': 'Piper sudah terpasang. Klik untuk menginstal ulang.', + 'voice.providers.piperDownloadTitle': + 'Unduh Piper dan suara en_US-lessac-medium bawaan ke workspace Anda.', + 'voice.providers.piperVoice': 'Suara Piper', + 'voice.providers.piperVoiceAria': 'Suara Piper', + 'voice.providers.customVoiceOption': 'Lainnya (ketik di bawah)…', + 'voice.providers.customVoiceAria': 'Piper voice id (khusus)', + 'voice.providers.customVoicePlaceholder': 'en_US-lessac-medium', + 'voice.providers.piperVoicesDesc': + 'Suara berasal dari huggingface.co/rhasspy/piper-voices. Mengganti suara mungkin memerlukan klik Instal/Instal Ulang untuk mengunduh .onnx baru.', + 'voice.providers.mascotVoice': 'Suara Maskot', + 'voice.providers.mascotVoiceDescPrefix': + 'Suara ElevenLabs yang digunakan maskot untuk balasan lisan dikonfigurasi di bawah', + 'voice.providers.mascotSettings': 'Pengaturan Maskot', + 'voice.providers.mascotVoiceDescSuffix': '.', + 'voice.providers.hotkeyPlaceholder': 'Fn', + 'voice.providers.piperPreset.lessacMedium': 'AS · Lessac (netral, disarankan)', + 'voice.providers.piperPreset.lessacHigh': 'AS · Lessac (kualitas lebih tinggi, lebih besar)', + 'voice.providers.piperPreset.ryanMedium': 'AS · Ryan (pria)', + 'voice.providers.piperPreset.amyMedium': 'AS · Amy (wanita)', + 'voice.providers.piperPreset.librittsHigh': 'AS · LibriTTS (multi-speaker)', + 'voice.providers.piperPreset.alanMedium': 'GB · Alan (pria)', + 'voice.providers.piperPreset.jennyDiocoMedium': 'GB · Jenny Dioco (wanita)', + 'voice.providers.piperPreset.northernEnglishMaleMedium': 'GB · Bahasa Inggris Utara (pria)', + 'voice.providers.chip.cloud': 'OpenHuman (Terkelola)', + 'voice.providers.chip.cloudAria': 'Penyedia terkelola OpenHuman selalu aktif', + 'voice.providers.chip.whisper': 'Whisper (Lokal)', + 'voice.providers.chip.enableWhisper': 'Aktifkan Whisper STT lokal', + 'voice.providers.chip.disableWhisper': 'Nonaktifkan Whisper STT lokal', + 'voice.providers.chip.piper': 'Piper (Lokal)', + 'voice.providers.chip.enablePiper': 'Aktifkan Piper TTS lokal', + 'voice.providers.chip.disablePiper': 'Nonaktifkan Piper TTS lokal', + 'voice.providers.chip.enableProvider': 'Enable', + 'voice.providers.chip.disableProvider': 'Disable', + 'voice.providers.chip.apiKeyLabel': 'Kunci API', + 'voice.providers.chip.apiKeyPlaceholder': 'sk-…', + 'voice.providers.chip.comingSoon': 'segera hadir', + 'voice.modal.title': 'Configure', + 'voice.modal.desc': + 'Masukkan API key Anda untuk mengaktifkan penyedia ini. Anda dapat menguji koneksi sebelum menyimpan.', + 'voice.modal.testKey': 'Uji Kunci', + 'voice.modal.testing': 'Menguji…', + 'voice.modal.saveAndEnable': 'Simpan & Aktifkan', + 'voice.modal.enable': 'Enable', + 'voice.modal.whisperDesc': + 'Pilih ukuran model dan instal biner Whisper serta model GGML ke workspace Anda. Model yang lebih besar lebih akurat tetapi lebih lambat.', + 'voice.modal.piperDesc': + 'Pilih suara dan instal biner Piper serta model ONNX ke workspace Anda. Piper berjalan sepenuhnya offline dengan latensi rendah.', + 'voice.routing.title': 'Perutean Suara', + 'voice.routing.desc': + 'Pilih penyedia yang diaktifkan untuk menangani ucapan-ke-teks dan teks-ke-ucapan.', + 'voice.routing.save': 'Save', + 'voice.routing.testStt': 'Uji STT', + 'voice.routing.testTts': 'Uji TTS', + 'voice.routing.elevenlabsVoice': 'Suara ElevenLabs', + 'voice.routing.elevenlabsVoiceAria': 'Pemilihan suara ElevenLabs', + 'voice.routing.elevenlabsVoiceIdAria': 'ID suara ElevenLabs (kustom)', + 'voice.routing.elevenlabsVoiceDesc': + 'Pilih suara yang dikurasi atau tempel ID suara kustom dari dasbor ElevenLabs Anda.', + 'voice.externalProviders.title': 'Penyedia Suara Eksternal', + 'voice.externalProviders.desc': + 'Hubungkan API STT/TTS pihak ketiga seperti Deepgram, ElevenLabs, atau OpenAI secara langsung.', + 'voice.externalProviders.keySet': 'Kunci diatur', + 'voice.externalProviders.noKey': 'Tidak ada API key', + 'voice.externalProviders.test': 'Test', + 'voice.externalProviders.testing': 'Menguji…', + 'voice.externalProviders.remove': 'Remove', + 'voice.externalProviders.provider': 'Provider', + 'voice.externalProviders.selectProvider': 'Pilih penyedia…', + 'voice.externalProviders.apiKey': 'Kunci API', + 'voice.externalProviders.apiKeyPlaceholder': 'sk-…', + 'voice.externalProviders.add': 'Add', + 'autocomplete.title': 'Pelengkap Otomatis', + 'autocomplete.settings': 'Pengaturan', + 'autocomplete.acceptWithTab': 'Terima dengan Tab', + 'autocomplete.stylePreset': 'Preset Gaya', + 'autocomplete.style.balanced': 'Seimbang', + 'autocomplete.style.concise': 'Ringkas', + 'autocomplete.style.formal': 'Resmi', + 'autocomplete.style.casual': 'Santai', + 'autocomplete.style.custom': 'Kustom', + 'autocomplete.disabledApps': 'Aplikasi yang Dinonaktifkan (satu bundle/token aplikasi per baris)', + 'autocomplete.saveSettings': 'Simpan Pengaturan', + 'autocomplete.saving': 'Menyimpan...', + 'autocomplete.runtime': 'Waktu Proses', + 'autocomplete.running': 'Berjalan', + 'autocomplete.start': 'Mulai', + 'autocomplete.stop': 'Hentikan', + 'autocomplete.settingsSaved': 'Pengaturan pelengkap otomatis tersimpan.', + 'autocomplete.started': 'Pelengkap otomatis dimulai.', + 'autocomplete.didNotStart': 'Pelengkap otomatis tidak dimulai. Periksa apakah sudah diaktifkan.', + 'autocomplete.stopped': 'Pelengkap otomatis dihentikan.', + 'autocomplete.advancedSettings': 'Pengaturan lanjutan', + 'autocomplete.debugTitle': 'Debug Pelengkap Otomatis', + 'chat.agentChat': 'Chat Agen', + 'chat.overrides': 'Penggantian', + 'chat.model': 'Model', + 'chat.temperature': 'Temperatur', + 'chat.conversation': 'Percakapan', + 'chat.startAgentConversation': 'Mulai percakapan dengan agen.', + 'chat.you': 'Anda', + 'chat.agent': 'Agen', + 'chat.askAgent': 'Tanyakan apa saja ke agen...', + 'chat.sendMessage': 'Kirim Pesan', + 'composio.triageTitle': 'Pemicu Integrasi', + 'composio.triageDesc': + 'Saat aktif, setiap pemicu Composio yang masuk menjalani langkah triase AI yang mengklasifikasikan event dan mungkin memulai tindakan otomatis — satu giliran LLM lokal per pemicu. Nonaktifkan secara global atau per integrasi jika Anda lebih suka tinjauan manual. Jika variabel lingkungan', + 'composio.disableAllTriage': 'Nonaktifkan triase AI untuk semua pemicu', + 'composio.triggersStillRecorded': + 'Pemicu tetap dicatat ke riwayat — tidak ada giliran LLM yang dijalankan.', + 'composio.disableSpecificIntegrations': 'Nonaktifkan triase AI untuk integrasi tertentu', + 'composio.settingsSaved': 'Pengaturan disimpan', + 'composio.saveFailed': 'Gagal menyimpan. Coba lagi.', + 'cron.title': 'Cron Job', + 'cron.scheduledJobs': 'Job Terjadwal', + 'cron.manageCronJobs': 'Kelola cron job dari penjadwal core.', + 'cron.refreshCronJobs': 'Segarkan Cron Job', + 'localModel.modelStatus': 'Status Model', + 'localModel.downloadModels': 'Unduh Model', + 'localModel.usage': 'Pemakaian', + 'localModel.usageDesc': + 'Pilih subsistem mana yang berjalan di model lokal. Yang nonaktif memakai cloud.', + 'localModel.enableRuntime': 'Aktifkan runtime AI lokal', + 'localModel.enableRuntimeDesc': + 'Sakelar utama. Nonaktif secara default; Ollama tetap idle. Saat aktif, peringkas tree, kecerdasan layar, dan autocomplete selalu memakai model lokal.', + 'localModel.advancedSettings': 'Pengaturan lanjutan', + 'localModel.debugTitle': 'Debug Model Lokal', + 'screenAwareness.debugTitle': 'Debug Kesadaran Layar', + 'screenAwareness.debug.debugAndDiagnostics': 'Debug & Diagnostik', + 'screenAwareness.debug.collapse': 'Ciutkan', + 'screenAwareness.debug.expand': 'Perluas', + 'screenAwareness.debug.failedToSave': 'Gagal menyimpan kecerdasan layar', + 'screenAwareness.debug.policyTitle': 'Kebijakan Intelijen Layar', + 'screenAwareness.debug.baselineFps': 'FPS Dasar', + 'screenAwareness.debug.useVisionModel': 'Gunakan Model Visi', + 'screenAwareness.debug.useVisionModelDesc': + 'Kirim tangkapan layar ke LLM vision untuk konteks yang lebih kaya. Jika dinonaktifkan, hanya teks OCR yang digunakan dengan LLM teks — lebih cepat dan tidak memerlukan model vision.', + 'screenAwareness.debug.keepScreenshots': 'Simpan Tangkapan Layar', + 'screenAwareness.debug.keepScreenshotsDesc': + 'Simpan tangkapan layar yang diambil ke workspace alih-alih menghapusnya setelah diproses', + 'screenAwareness.debug.allowlist': 'Daftar yang diizinkan (satu aturan per baris)', + 'screenAwareness.debug.denylist': 'Daftar Tolak (satu aturan per baris)', + 'screenAwareness.debug.saveSettings': 'Simpan Pengaturan Kecerdasan Layar', + 'screenAwareness.debug.sessionStats': 'Statistik Sesi', + 'screenAwareness.debug.framesEphemeral': 'Bingkai (sementara)', + 'screenAwareness.debug.panicStop': 'Berhenti panik', + 'screenAwareness.debug.defaultPanicHotkey': 'Cmd+Shift+.', + 'screenAwareness.debug.vision': 'Vision', + 'screenAwareness.debug.idle': 'idle', + 'screenAwareness.debug.visionQueue': 'Antrean vision', + 'screenAwareness.debug.lastVision': 'Vision terakhir', + 'screenAwareness.debug.notAvailable': 'n/a', + 'screenAwareness.debug.visionSummaries': 'Ringkasan Vision', + 'screenAwareness.debug.refreshing': 'Menyegarkan…', + 'screenAwareness.debug.noSummaries': 'Belum ada ringkasan.', + 'screenAwareness.debug.unknownApp': 'Aplikasi Tidak Dikenal', + 'screenAwareness.debug.macosOnly': 'Screen Intelligence V1 saat ini hanya didukung di macOS.', + 'memory.debugTitle': 'Debug Memori', + 'memory.documents': 'Dokumen', + 'memory.filterByNamespace': 'Filter berdasarkan namespace...', + 'memory.refresh': 'Segarkan', + 'memory.noDocumentsFound': 'Tidak ada dokumen yang ditemukan.', + 'memory.delete': 'Hapus', + 'memory.rawResponse': 'Respons mentah', + 'memory.namespaces': 'Namespace', + 'memory.noNamespacesFound': 'Tidak ada namespace yang ditemukan.', + 'memory.queryRecall': 'Kueri & Penarikan Kembali', + 'memory.namespace': 'Namespace', + 'memory.queryText': 'Teks kueri...', + 'memory.defaultMaxChunks': '10', + 'memory.maxChunks': 'potongan maksimal', + 'memory.query': 'Kueri', + 'memory.recall': 'Penarikan kembali', + 'memory.queryLabel': 'Kueri', + 'memory.recallLabel': 'Penarikan kembali', + 'memory.queryResult': 'Hasil kueri', + 'memory.recallResult': 'Hasil penarikan', + 'memory.clearNamespace': 'Hapus Namespace', + 'memory.clearNamespaceDescription': 'Hapus secara permanen semua dokumen dalam namespace.', + 'memory.selectNamespace': 'Pilih namespace...', + 'memory.exampleNamespace': 'mis. skill:gmail:user@example.com', + 'memory.clear': 'Hapus', + 'memory.deleteConfirm': 'Hapus dokumen "{documentId}" di namespace "{namespace}"?', + 'memory.clearNamespaceConfirm': + 'Ini akan menghapus secara permanen SEMUA dokumen di namespace "{namespace}". Lanjutkan?', + 'memory.clearNamespaceSuccess': 'Namespace "{namespace}" dihapus.', + 'memory.clearNamespaceEmpty': 'Tidak ada yang perlu dihapus di "{namespace}".', + 'webhooks.debugTitle': 'Debug Webhook', + 'webhooks.failedToLoadDebugData': 'Gagal memuat data debug webhook', + 'webhooks.clearLogsConfirm': 'Hapus semua log debug webhook yang diambil?', + 'webhooks.failedToClearLogs': 'Gagal menghapus log webhook', + 'webhooks.loading': 'Memuat...', + 'webhooks.refresh': 'Segarkan', + 'webhooks.clearing': 'Menghapus...', + 'webhooks.clearLogs': 'Hapus Log', + 'webhooks.registered': 'terdaftar', + 'webhooks.captured': 'direkam', + 'webhooks.live': 'langsung', + 'webhooks.disconnected': 'terputus', + 'webhooks.lastEvent': 'Acara terakhir', + 'webhooks.at': 'pukul', + 'webhooks.registeredWebhooks': 'Webhook Terdaftar', + 'webhooks.noActiveRegistrations': 'Tidak ada registrasi aktif.', + 'webhooks.resolvingBackendUrl': 'Menyelesaikan backend URL…', + 'webhooks.capturedRequests': 'Permintaan yang Diambil', + 'webhooks.noRequestsCaptured': 'Belum ada permintaan webhook yang ditangkap.', + 'webhooks.unrouted': 'tidak dirutekan', + 'webhooks.pending': 'tertunda', + 'webhooks.requestHeaders': 'Header Permintaan', + 'webhooks.queryParams': 'Param Kueri', + 'webhooks.requestBody': 'Isi Permintaan', + 'webhooks.responseHeaders': 'Header Respons', + 'webhooks.responseBody': 'Isi Respons', + 'webhooks.rawPayload': 'Payload Mentah', + 'webhooks.empty': '[kosong]', + 'providerSetup.error.defaultDetails': 'Penyiapan penyedia gagal.', + 'providerSetup.error.providerFallback': 'Penyedia', + 'providerSetup.error.credentialsRejected': + '{provider} menolak kredensial. Periksa API key dan coba lagi.', + 'providerSetup.error.endpointNotRecognized': + '{provider} tidak mengenali endpoint. Periksa URL dasar dan coba lagi.', + 'providerSetup.error.providerUnavailable': + '{provider} tidak tersedia saat ini. Coba lagi atau periksa status penyedia.', + 'providerSetup.error.unreachable': + 'Tidak dapat menjangkau {provider}. Periksa URL endpoint dan koneksi jaringan, lalu coba lagi.', + 'providerSetup.error.couldNotReachWithMessage': 'Tidak dapat menjangkau {provider}: {message}', + 'providerSetup.error.technicalDetails': 'Detail teknis', + 'notifications.routingTitle': 'Perutean Notifikasi', + 'notifications.routing.pipelineStats': 'Statistik saluran', + 'notifications.routing.total': 'Total', + 'notifications.routing.unread': 'Belum Dibaca', + 'notifications.routing.unscored': 'Belum diberi skor', + 'notifications.routing.intelligenceTitle': 'Intelijen Notifikasi', + 'notifications.routing.intelligenceDesc': + 'Setiap notifikasi dari akun yang terhubung dinilai oleh model AI lokal. Notifikasi penting secara otomatis diteruskan ke agen orkestrator Anda agar tidak ada yang terlewat.', + 'notifications.routing.howItWorks': 'Cara kerjanya', + 'notifications.routing.level.drop': 'Hapus', + 'notifications.routing.level.dropDesc': 'Kebisingan / spam — disimpan tetapi tidak muncul', + 'notifications.routing.level.acknowledge': 'Akui', + 'notifications.routing.level.acknowledgeDesc': + 'Prioritas rendah — ditampilkan di pusat notifikasi', + 'notifications.routing.level.react': 'Bereaksi', + 'notifications.routing.level.reactDesc': 'Prioritas sedang — memicu respons agen terfokus', + 'notifications.routing.level.escalate': 'Eskalasi', + 'notifications.routing.level.escalateDesc': 'Prioritas tinggi — diteruskan ke agen orkestra', + 'notifications.routing.perProvider': 'Per penyedia perutean', + 'notifications.routing.threshold': 'Ambang batas', + 'notifications.routing.routeToOrchestrator': 'Rute ke orkestrator', + 'notifications.routing.loadSettingsError': + 'Gagal memuat pengaturan. Buka kembali panel ini untuk mencoba lagi.', + 'common.reload': 'Muat ulang', + 'common.skip': 'Lewati', + 'common.disable': 'Nonaktifkan', + 'common.enable': 'Aktifkan', + 'chat.safetyTimeout': 'Tidak ada respons dari agen setelah 2 menit. Coba lagi atau cek koneksi.', + 'chat.filter.all': 'Semua', + 'chat.filter.work': 'Kerja', + 'chat.filter.briefing': 'Ringkasan', + 'chat.filter.notification': 'Notifikasi', + 'chat.filter.workers': 'Worker', + 'chat.selectThread': 'Pilih thread', + 'chat.threads': 'Thread', + 'chat.noThreads': 'Belum ada thread', + 'chat.noLabelThreads': 'Tidak ada thread "{label}"', + 'chat.noWorkerThreads': 'Belum ada thread worker', + 'chat.deleteThread': 'Hapus thread', + 'chat.deleteThreadConfirm': 'Yakin ingin menghapus "{title}"?', + 'chat.untitledThread': 'Thread tanpa judul', + 'chat.editThreadTitle': 'Edit judul utas', + 'chat.hideSidebar': 'Sembunyikan sidebar', + 'chat.showSidebar': 'Tampilkan sidebar', + 'chat.newThreadShortcut': 'Thread baru (/new)', + 'chat.new': 'Baru', + 'chat.failedToLoadMessages': 'Gagal memuat pesan', + 'chat.thinkingIteration': 'Berpikir... ({n})', + 'chat.thinkingDots': 'Berpikir...', + 'chat.approachingLimit': 'Mendekati batas pemakaian', + 'chat.approachingLimitMsg': 'Anda telah memakai {pct}% dari kuota yang tersedia.', + 'chat.upgrade': 'Tingkatkan', + 'chat.weeklyLimitHit': 'Anda telah mencapai batas mingguan.', + 'chat.resets': 'Reset', + 'chat.topUpToContinue': 'Isi ulang untuk melanjutkan.', + 'chat.budgetComplete': 'Budget bawaan Anda sudah habis. Tambah kredit atau upgrade untuk lanjut.', + 'chat.topUp': 'Isi Ulang', + 'chat.cycle': 'Siklus', + 'chat.cycleSpent': 'Terpakai siklus ini', + 'chat.cycleRemaining': 'Sisa', + 'chat.left': 'tersisa', + 'chat.setup': 'Atur', + 'chat.switchToText': 'Beralih ke teks', + 'chat.transcribing': 'Mentranskripsi...', + 'chat.stopAndSend': 'Berhenti dan kirim', + 'chat.startTalking': 'Mulai bicara', + 'chat.playingVoiceReply': 'Memutar balasan suara', + 'chat.voiceHint': 'Gunakan mikrofon untuk bicara', + 'chat.micUnavailable': 'Mikrofon tidak tersedia', + 'chat.turn': 'giliran', + 'chat.turns': 'giliran', + 'chat.openWorkerThread': 'Buka thread worker', + 'chat.attachment.attach': 'Lampirkan gambar', + 'chat.attachment.remove': 'Hapus {name}', + 'chat.attachment.tooMany': 'Maksimal {max} gambar per pesan', + 'chat.attachment.tooLarge': 'Gambar melebihi batas ukuran {max}', + 'chat.attachment.unsupportedType': + 'Jenis file tidak didukung. Gunakan PNG, JPEG, WebP, GIF, atau BMP.', + 'chat.attachment.readFailed': 'Tidak dapat membaca file', + 'memory.searchAria': 'Cari memori', + 'memory.searchPlaceholder': 'Cari entri memori...', + 'memory.sourceFilter.all': 'Semua sumber', + 'memory.sourceFilter.email': 'Email', + 'memory.sourceFilter.calendar': 'Kalender', + 'memory.sourceFilter.telegram': 'Telegram', + 'memory.sourceFilter.aiInsight': 'Insight AI', + 'memory.sourceFilter.system': 'Sistem', + 'memory.sourceFilter.trading': 'Perdagangan', + 'memory.sourceFilter.security': 'Keamanan', + 'memory.ingestionActivity': 'Aktivitas Ingesti', + 'memory.events': 'peristiwa', + 'memory.event': 'peristiwa', + 'memory.overTheLast': 'selama', + 'memory.months': 'bulan', + 'memory.peak': 'Puncak', + 'memory.perDay': '/hari', + 'memory.less': 'Lebih sedikit', + 'memory.more': 'Lebih banyak', + 'memory.on': 'pada', + 'memory.loading': 'Memuat Memori', + 'memory.fetching': 'Mengambil entri memori Anda...', + 'memory.analyzing': 'Menganalisis Memori', + 'memory.analyzingHint': 'Memproses memori Anda untuk mengekstrak insight...', + 'memory.noMatches': 'Tidak Ada Hasil', + 'memory.noMatchesHint': 'Coba ubah kata kunci atau filter.', + 'memory.allCaughtUp': 'Semua Sudah Selesai', + 'memory.allCaughtUpHint': 'Tidak ada entri memori baru untuk diproses.', + 'memory.noAnalysis': 'Belum Ada Analisis', + 'memory.noAnalysisHint': 'Jalankan analisis untuk menemukan pola dalam memori Anda.', + 'memory.emptyHint': 'Mulai berinteraksi untuk membuat memori pertama Anda.', + 'mic.unavailable': 'Mikrofon tidak tersedia', + 'mic.permissionDenied': 'Izin mikrofon ditolak', + 'mic.failedToStartRecorder': 'Gagal memulai perekam', + 'mic.transcribing': 'Mentranskripsi...', + 'mic.tapToSend': 'Ketuk untuk mengirim', + 'mic.waitingForAgent': 'Menunggu agen...', + 'mic.tapAndSpeak': 'Ketuk dan bicara', + 'mic.stopRecording': 'Hentikan perekaman dan kirim', + 'mic.startRecording': 'Mulai merekam', + 'mic.deviceSelector': 'Perangkat mikrofon', + 'mic.tapToSendCountdown': 'Ketuk untuk mengirim ({seconds}d)', + 'token.usageLimitReached': 'Batas pemakaian tercapai', + 'token.approachingLimit': 'Mendekati batas', + 'token.planClickForDetails': 'paket - klik untuk detail', + 'token.sessionTokens': 'Masuk: {in} | Keluar: {out} | Giliran: {turns}', + 'token.limit': 'Batas Tercapai', + 'catalog.noCapabilityBinding': 'Tidak ada binding kemampuan', + 'catalog.downloadFailed': 'Unduhan gagal', + 'catalog.active': 'Aktif', + 'catalog.installed': 'Terinstal', + 'catalog.notDownloaded': 'Belum diunduh', + 'catalog.inUse': 'Sedang Dipakai', + 'catalog.use': 'Gunakan', + 'catalog.deleteModel': 'Hapus model', + 'catalog.download': 'Unduh', + 'navigator.recent': 'Terbaru', + 'navigator.today': 'Hari Ini', + 'navigator.thisWeek': 'Minggu Ini', + 'navigator.sources': 'Sumber', + 'navigator.email': 'Email', + 'navigator.slack': 'Slack', + 'navigator.chat': 'Obrolan', + 'navigator.documents': 'Dokumen', + 'navigator.people': 'Orang', + 'navigator.topics': 'Topik', + 'dreams.description': + 'Mimpi adalah refleksi yang dibuat AI yang mensintesis pola dari memori Anda.', + 'dreams.comingSoon': 'Segera hadir', + 'assignment.memoryLlm': 'LLM Memori', + 'assignment.memoryLlmAria': 'Pemilihan LLM Memori', + 'assignment.embedder': 'Penyemat', + 'assignment.loaded': 'Dimuat', + 'assignment.notDownloaded': 'Belum diunduh', + 'assignment.usedForExtractSummarise': 'Digunakan untuk ekstraksi dan ringkasan', + 'insights.knownFacts': 'Fakta yang Diketahui', + 'insights.preferences': 'Preferensi', + 'insights.relationships': 'Hubungan', + 'insights.skills': 'Skill', + 'insights.opinions': 'Pendapat', + 'insights.other': 'Lainnya', + 'insights.title': 'Wawasan', + 'insights.empty': 'Belum ada wawasan. Wawasan dibuat seiring bertambahnya memori Anda.', + 'insights.description': 'Berdasarkan {count} relasi di grafik memori Anda.', + 'insights.items': 'item', + 'insights.more': 'lagi', + 'calls.joiningCall': 'Bergabung ke panggilan', + 'calls.meetWindowOpening': 'Jendela Meet sedang dibuka...', + 'calls.failedToStart': 'Gagal memulai panggilan Meet', + 'calls.couldNotStart': 'Tidak dapat memulai panggilan', + 'calls.failedToClose': 'Gagal menutup panggilan', + 'calls.couldNotClose': 'Tidak dapat menutup panggilan', + 'calls.joinMeet': 'Bergabung ke panggilan Google Meet', + 'calls.joinMeetDescription': 'Masukkan tautan Google Meet untuk bergabung.', + 'calls.meetLink': 'Tautan Meet', + 'calls.displayName': 'Nama Tampilan', + 'calls.openingMeet': 'Membuka Meet...', + 'calls.joinCall': 'Bergabung ke Panggilan', + 'calls.activeCalls': 'Panggilan Aktif', + 'calls.leave': 'Keluar', + 'workspace.wipeConfirm': + 'Yakin ingin menghapus semua memori? Tindakan ini tidak dapat dibatalkan.', + 'workspace.resetTreeConfirm': 'Yakin ingin membangun ulang pohon memori?', + 'workspace.wipeTitle': 'Hapus Memori', + 'workspace.resetting': 'Mereset...', + 'workspace.resetMemory': 'Reset Memori', + 'workspace.resetTreeTitle': 'Bangun Ulang Pohon Memori', + 'workspace.rebuilding': 'Membangun ulang...', + 'workspace.resetMemoryTree': 'Reset Pohon Memori', + 'workspace.building': 'Membangun...', + 'workspace.buildSummaryTrees': 'Bangun Pohon Ringkasan', + 'workspace.viewVault': 'Lihat Vault', + 'workspace.openingVaultTitle': 'Membuka vault di Obsidian', + 'workspace.openingVaultMessage': + 'Jika Obsidian tidak terbuka, instal dari obsidian.md atau gunakan Tampilkan Folder. Path vault:', + 'workspace.openVaultFailedTitle': 'Tidak dapat membuka vault di Obsidian', + 'workspace.openVaultFailedMessage': + 'Gunakan Tampilkan Folder untuk membuka direktori vault secara langsung. Path vault:', + 'workspace.revealVaultFailed': 'Tidak dapat menampilkan folder vault', + 'workspace.revealFolder': 'Tampilkan Folder', + 'workspace.checkingVault': 'Memeriksa…', + 'workspace.vaultNotRegisteredHelp': + 'Obsidian hanya membuka folder yang telah Anda tambahkan sebagai vault. Di Obsidian, pilih "Buka folder sebagai vault" dan pilih folder di bawah — Anda hanya perlu melakukan ini sekali. Lalu klik Lihat Vault lagi.', + 'workspace.obsidianNotFoundHelp': + 'Kami tidak dapat menemukan Obsidian di perangkat ini. Instal, atau — jika dipasang di lokasi non-standar — atur folder konfigurasinya di Lanjutan.', + 'workspace.openAnyway': 'Buka di Obsidian tetap', + 'workspace.installObsidian': 'Instal Obsidian', + 'workspace.obsidianAdvanced': 'Obsidian dipasang di tempat lain?', + 'workspace.obsidianConfigDirLabel': 'Folder konfigurasi Obsidian', + 'workspace.obsidianConfigDirHint': + 'Jalur ke folder yang berisi obsidian.json (mis. ~/.config/obsidian). Biarkan kosong untuk deteksi otomatis.', + 'workspace.obsidianConfigDirPlaceholder': '~/.config/obsidian', + 'workspace.graphLoadFailed': 'Gagal memuat grafik memori', + 'workspace.loadingGraph': 'Memuat grafik memori...', + 'workspace.graphViewMode': 'Mode tampilan grafik memori', + 'workspace.trees': 'Pohon', + 'workspace.contacts': 'Kontak', + 'graph.noContactMentions': 'Tidak ada sebutan kontak', + 'graph.noMemory': 'Tidak ada memori', + 'graph.source': 'Sumber', + 'graph.topic': 'Topik', + 'graph.global': 'Keseluruhan', + 'graph.document': 'Dokumen', + 'graph.contact': 'Kontak', + 'graph.nodes': 'node', + 'graph.parentChild': 'induk-anak', + 'graph.documentContact': 'dokumen-kontak', + 'graph.link': 'tautan', + 'graph.links': 'tautan', + 'graph.children': 'anak', + 'graph.clickToOpenObsidian': 'Klik untuk membuka di Obsidian', + 'graph.person': 'Orang', + 'modal.dontShowAgain': 'Jangan tampilkan saran serupa', + 'reflections.loading': 'Memuat refleksi...', + 'reflections.empty': 'Belum ada refleksi', + 'reflections.title': 'Refleksi', + 'reflections.proposedAction': 'Tindakan yang Diusulkan', + 'reflections.act': 'Tindakan', + 'reflections.dismiss': 'Abaikan', + 'whatsapp.chatsSynced': 'obrolan disinkronkan', + 'whatsapp.chatSynced': 'obrolan disinkronkan', + 'sync.active': 'Aktif', + 'sync.recent': 'Terbaru', + 'sync.idle': 'Siaga', + 'sync.memorySources': 'Sumber Memori', + 'sync.noConnectedSources': 'Tidak ada sumber terhubung', + 'sync.chunks': 'chunk', + 'sync.lastChunk': 'Chunk terakhir:', + 'sync.pending': 'tertunda', + 'sync.processed': 'diproses', + 'sync.syncing': 'Menyinkronkan...', + 'sync.sync': 'Sinkronkan', + 'sync.failedToLoad': 'Gagal memuat status sinkronisasi', + 'sync.noContent': + 'Belum ada konten yang disinkronkan ke memori. Hubungkan integrasi untuk memulai.', + 'memorySources.title': 'Sumber Memori', + 'memorySources.empty': 'Belum ada sumber ingatan. Tambahkan satu untuk mulai makan memori.', + 'memorySources.customSources': 'Sumber Kustom', + 'memorySources.addSource': 'Tambah Sumber', + 'memorySources.noCustomSources': + 'Belum ada sumber khusus. Tambahkan folder, GitHub repo, RSS feed, atau halaman web untuk memulai.', + 'memorySources.loadingConnections': 'Memuat koneksi...', + 'memorySources.noConnections': + 'Tak ditemukan koneksi Composio yang aktif. Hubungkan integrasi dulu.', + 'memorySources.pickConnection': 'Pilih koneksi', + 'memorySources.selectConnection': '- Pilih koneksi -', + 'memorySources.composioListFailed': 'Gagal memuat koneksi Composio.', + 'memorySources.browse': 'Jelajahi...', + 'memorySources.folderPathPlaceholder': '/Users/you/notes', + 'memorySources.globPatternPlaceholder': '* * /*.md', + 'memorySources.repoUrlPlaceholder': 'https://github.com/org/repo', + 'memorySources.branchPlaceholder': 'main', + 'memorySources.feedUrlPlaceholder': 'https://example.com/feed.xml', + 'memorySources.pageUrlPlaceholder': 'https://example.com/article', + 'memorySources.cssSelectorPlaceholder': 'article', + 'memorySources.searchQueryPlaceholder': 'dari: keselamatan AI pengguna', + 'memorySources.kind.composio': 'Integrasi', + 'memorySources.kind.folder': 'Folder Lokal', + 'memorySources.kind.github_repo': 'Repo GitHub', + 'memorySources.kind.twitter_query': 'Pencarian Twitter', + 'memorySources.kind.rss_feed': 'Feed RSS', + 'memorySources.kind.web_page': 'Halaman Web', + 'memorySources.sync.successTitle': 'Menyinkronkan', + 'memorySources.sync.successMessage': 'Kemajuan akan segera muncul.', + 'memorySources.sync.failedTitle': 'Sinkronisasi gagal:', + 'time.justNow': 'baru saja', + 'time.secondsAgoSuffix': 'd lalu', + 'time.minutesAgoSuffix': 'm lalu', + 'time.hoursAgoSuffix': 'j lalu', + 'time.daysAgoSuffix': 'h lalu', + 'memorySources.pickKind': 'Sumber apa yang ingin Anda tambahkan?', + 'memorySources.backToKinds': 'Kembali ke tipe sumber', + 'memorySources.label': 'Label', + 'memorySources.labelPlaceholder': 'Catatan penelitianku.', + 'memorySources.add': 'Tambah', + 'memorySources.adding': 'Menambahkan…', + 'memorySources.added': 'Sumber ditambahkan', + 'memorySources.removed': 'Sumber dihapus', + 'memorySources.remove': 'Hapus', + 'memorySources.enable': 'Aktifkan', + 'memorySources.disable': 'Nonaktifkan', + 'memorySources.toggleFailed': 'Gagal mengalihkan', + 'memorySources.removeFailed': 'Gagal menghapus', + 'memorySources.folderPath': 'Path folder', + 'memorySources.globPattern': 'Pola glob', + 'memorySources.repoUrl': 'URL repositori', + 'memorySources.branch': 'Branch', + 'memorySources.feedUrl': 'URL feed', + 'memorySources.pageUrl': 'URL halaman', + 'memorySources.cssSelector': 'pemilih CSS (opsional)', + 'memorySources.searchQuery': 'Kueri pencarian', + 'backend.aiBackend': 'Backend AI', + 'backend.cloud': 'Awan', + 'backend.recommended': 'Direkomendasikan', + 'backend.cloudDescription': 'Model cepat dan kuat yang dihosting di server kami. Siap dipakai.', + 'backend.privacyNote': 'Data pribadi, pesan, atau kunci tidak pernah dikirim ke server kami.', + 'backend.local': 'Lokal', + 'backend.advanced': 'Lanjutan', + 'backend.localDescription': + 'Jalankan model di mesin Anda sendiri menggunakan Ollama. Privasi penuh, perlu pengaturan.', + 'backend.ramRecommended': 'RAM 16GB+ direkomendasikan', + 'subconscious.tasks': 'tugas', + 'subconscious.ticks': 'tick', + 'subconscious.last': 'Terakhir', + 'subconscious.failed': 'gagal', + 'subconscious.tickInterval': 'Interval Tick', + 'subconscious.runNow': 'Jalankan Sekarang', + 'subconscious.providerUnavailableTitle': 'Subconscious dijeda', + 'subconscious.providerSettings': 'Pengaturan AI', + 'subconscious.approvalNeeded': 'Persetujuan Diperlukan', + 'subconscious.requiresApproval': 'Memerlukan persetujuan', + 'subconscious.fixInConnections': 'Perbaiki di Koneksi', + 'subconscious.goAhead': 'Lanjutkan', + 'subconscious.activeTasks': 'Tugas Aktif', + 'subconscious.noActiveTasks': 'Tidak ada tugas aktif', + 'subconscious.default': 'Bawaan', + 'subconscious.addTaskPlaceholder': 'Tambahkan tugas baru...', + 'subconscious.activityLog': 'Log Aktivitas', + 'subconscious.noActivity': 'Belum ada aktivitas', + 'subconscious.decision.nothingNew': 'Tidak ada yang baru', + 'subconscious.decision.completed': 'Selesai', + 'subconscious.decision.evaluating': 'Mengevaluasi', + 'subconscious.decision.waitingApproval': 'Menunggu persetujuan', + 'subconscious.decision.failed': 'Gagal', + 'subconscious.decision.cancelled': 'Dibatalkan', + 'subconscious.decision.skipped': 'Dilewati', + 'actionable.complete': 'Selesai', + 'actionable.dismiss': 'Abaikan', + 'actionable.snooze': 'Tunda', + 'actionable.new': 'Baru', + 'stats.storage': 'Penyimpanan', + 'stats.files': 'file', + 'stats.documents': 'Dokumen', + 'stats.today': 'hari ini', + 'stats.namespaces': 'Namespace', + 'stats.relations': 'Relasi', + 'stats.firstMemory': 'Memori Pertama', + 'stats.latest': 'Terbaru', + 'stats.sessions': 'Sesi', + 'stats.tokens': 'token', + 'bootCheck.invalidUrl': 'Masukkan URL runtime.', + 'bootCheck.urlMustStartWith': 'URL harus diawali dengan http:// atau https://', + 'bootCheck.validUrlRequired': 'Itu bukan URL yang valid (coba https://core.example.com/rpc)', + 'bootCheck.tokenRequired': 'Kami memerlukan token autentikasi untuk terhubung.', + 'bootCheck.chooseCoreMode': 'Pilih Runtime', + 'bootCheck.connectToCore': 'Hubungkan ke Runtime Anda', + 'bootCheck.desktopDescription': + 'OpenHuman memerlukan runtime untuk berpikir. Pilih di mana runtime harus berada.', + 'bootCheck.webDescription': + 'Di web, OpenHuman terhubung ke runtime yang Anda kendalikan. Masukkan URL dan token autentikasi di bawah, atau ambil aplikasi desktop untuk menjalankannya langsung di mesin Anda.', + 'bootCheck.preferDesktop': 'Lebih suka menyimpan semuanya di perangkat Anda sendiri?', + 'bootCheck.downloadDesktop': 'Dapatkan Aplikasi Desktop', + 'bootCheck.localRecommended': 'Jalankan Secara Lokal (Direkomendasikan)', + 'bootCheck.localDescription': + 'Berjalan langsung di komputer Anda. Tercepat, sepenuhnya privat, tidak perlu pengaturan.', + 'bootCheck.cloudMode': 'Jalankan di Cloud (Kompleks)', + 'bootCheck.cloudDescription': + 'Hubungkan ke runtime yang Anda hosting di tempat lain. Tetap online 24×7 sehingga Anda tidak perlu terus menjalankan perangkat ini.', + 'bootCheck.coreRpcUrl': 'URL Runtime', + 'bootCheck.rpcUrlPlaceholder': 'https://core.example.com/rpc', + 'bootCheck.authToken': 'Token Autentikasi', + 'bootCheck.bearerTokenPlaceholder': 'Token bearer dari runtime jarak jauh Anda', + 'bootCheck.storedLocally': 'Hanya disimpan di perangkat ini. Dikirim sebagai ', + 'bootCheck.testing': 'Menguji...', + 'bootCheck.testConnection': 'Uji Koneksi', + 'bootCheck.connectedOk': 'Terhubung. Anda siap melanjutkan.', + 'bootCheck.authFailed': 'Token tersebut tidak berfungsi. Periksa kembali dan coba lagi.', + 'bootCheck.unreachablePrefix': 'Tidak dapat mencapainya:', + 'bootCheck.checkingCore': 'Membangunkan runtime Anda...', + 'bootCheck.cannotReach': 'Tidak Dapat Menjangkau Runtime', + 'bootCheck.cannotReachDesc': + 'Kami tidak dapat terhubung ke runtime Anda. Ingin mencoba yang berbeda?', + 'bootCheck.switchMode': 'Pilih Runtime Berbeda', + 'bootCheck.quit': 'Keluar', + 'bootCheck.legacyDetected': 'Runtime Latar Belakang Lama Terdeteksi', + 'bootCheck.legacyDescription': + 'Daemon OpenHuman yang diinstal terpisah sudah berjalan di perangkat ini. Kami perlu membersihkannya sebelum runtime bawaan dapat mengambil alih.', + 'bootCheck.removing': 'Menghapus...', + 'bootCheck.removeContinue': 'Hapus dan Lanjutkan', + 'bootCheck.localNeedsRestart': 'Runtime Lokal Perlu Dimulai Ulang', + 'bootCheck.localNeedsRestartDesc': + 'Runtime lokal Anda menggunakan versi berbeda dari aplikasi ini. Mulai ulang cepat akan menyinkronkannya kembali.', + 'bootCheck.restarting': 'Memulai ulang...', + 'bootCheck.restartCore': 'Mulai Ulang Runtime', + 'bootCheck.cloudNeedsUpdate': 'Runtime Cloud Perlu Diperbarui', + 'bootCheck.cloudNeedsUpdateDesc': + 'Runtime cloud Anda menggunakan versi berbeda dari aplikasi ini. Jalankan pembaruan untuk menyinkronkannya kembali.', + 'bootCheck.updating': 'Memperbarui...', + 'bootCheck.updateCloudCore': 'Perbarui Runtime Cloud', + 'bootCheck.versionCheckFailed': 'Pemeriksaan Versi Runtime Gagal', + 'bootCheck.versionCheckFailedDesc': + 'Runtime Anda aktif tetapi tidak melaporkan versinya. Mungkin sudah usang. Mulai ulang atau perbarui untuk melanjutkan.', + 'bootCheck.working': 'Memproses...', + 'bootCheck.restartUpdateCore': 'Mulai Ulang / Perbarui Runtime', + 'bootCheck.unexpectedError': 'Kesalahan Boot-Check Tak Terduga', + 'bootCheck.actionFailed': 'Terjadi kesalahan. Silakan coba lagi.', + 'bootCheck.portConflictTitle': 'Tidak dapat memulai mesin aplikasi', + 'bootCheck.portConflictBody': + 'Proses lain sedang menggunakan port jaringan yang dibutuhkan OpenHuman. Kami akan mencoba memperbaikinya secara otomatis.', + 'bootCheck.portConflictFixButton': 'Perbaiki Otomatis', + 'bootCheck.portConflictFixing': 'Memperbaiki…', + 'bootCheck.portConflictFixFailed': + 'Perbaikan otomatis tidak berhasil. Silakan restart komputer Anda dan coba lagi.', + 'notifications.justNow': 'baru saja', + 'notifications.minAgo': '{n}m lalu', + 'notifications.hrAgo': '{n}j lalu', + 'notifications.dayAgo': '{n}h lalu', + 'notifications.category.messages': 'Pesan', + 'notifications.category.agents': 'Agen', + 'notifications.category.skills': 'Skill', + 'notifications.category.system': 'Sistem', + 'notifications.category.meetings': 'Rapat', + 'notifications.category.reminders': 'Pengingat', + 'notifications.category.important': 'Penting', + 'about.update.status.checking': 'Memeriksa...', + 'about.update.status.available': 'v{version} tersedia', + 'about.update.status.availableNoVersion': 'Pembaruan tersedia', + 'about.update.status.downloading': 'Mengunduh...', + 'about.update.status.readyToInstall': 'v{version} siap diinstal', + 'about.update.status.readyToInstallNoVersion': + 'Versi baru sudah diunduh dan siap. Mulai ulang untuk menerapkan.', + 'about.update.status.installing': 'Menginstal...', + 'about.update.status.restarting': 'Memulai ulang...', + 'about.update.status.upToDate': 'Anda memakai versi terbaru.', + 'about.update.status.error': 'Pemeriksaan pembaruan gagal', + 'about.update.status.default': 'Periksa pembaruan', + 'welcome.connectionFailed': 'Koneksi gagal: {status} {statusText}', + 'welcome.connectionFailedMsg': 'Koneksi gagal: {message}', + 'welcome.continueLocally': 'Lanjutkan secara lokal', 'welcome.continueLocallyExperimental': 'Lanjutkan Secara Lokal (Eksperimental)', + 'welcome.localSessionStarting': 'Memulai sesi lokal...', + 'welcome.localSessionDesc': 'Menggunakan profil lokal offline dan melewati TinyHumans OAuth.', + 'chat.agentChatDesc': 'Buka sesi chat langsung dengan agen.', + 'chat.modelPlaceholder': 'gpt-4o', + 'channels.activeRouteValue': '{channel} lewat {authMode}', + 'privacy.dataKind.messages': 'Pesan', + 'privacy.dataKind.agents': 'Agen', + 'privacy.dataKind.skills': 'Skill', + 'privacy.dataKind.system': 'Sistem', + 'privacy.dataKind.meetings': 'Rapat', + 'privacy.dataKind.reminders': 'Pengingat', + 'privacy.dataKind.important': 'Penting', + 'onboarding.enableLocalAI': 'Aktifkan AI Lokal', + 'onboarding.skills.status.available': 'Tersedia', + 'onboarding.skills.status.connected': 'Terhubung', + 'onboarding.skills.status.connecting': 'Menghubungkan', + 'onboarding.skills.status.error': 'Kesalahan', + 'onboarding.skills.status.unavailable': 'Tidak tersedia', + 'composio.statusUnavailable': 'Status tidak tersedia', + 'composio.authExpired': 'Autentikasi kedaluwarsa', + 'composio.reconnect': 'Hubungkan ulang', + 'composio.expiredAuthorization': '{name} otorisasi kedaluwarsa', + 'composio.expiredDescription': + 'Sambungkan kembali untuk mengaktifkan kembali alat {name}. OpenHuman akan membuat integrasi ini tidak tersedia sampai Anda menyegarkan akses OAuth.', + 'composio.envVarOverrides': 'diatur, itu menggantikan pengaturan ini.', + 'composio.previewBadge': 'Pratinjau', + 'composio.previewTooltip': + 'Integrasi agen segera hadir — Anda dapat terhubung, tetapi agen belum dapat menggunakan perangkat ini.', + 'memory.day.sun': 'Min', + 'memory.day.mon': 'Sen', + 'memory.day.tue': 'Sel', + 'memory.day.wed': 'Rab', + 'memory.day.thu': 'Kam', + 'memory.day.fri': 'Jum', + 'memory.day.sat': 'Sab', + 'memory.ingesting': 'Mengingesti', + 'memory.ingestionQueued': 'Dalam antrean', + 'memory.ingestingTitle': 'Mengingesti {title}', + 'mic.noAudioCaptured': 'Tidak ada audio tertangkap', + 'mic.noSpeechDetected': 'Tidak ada suara terdeteksi', + 'mic.lowConfidenceResult': 'Tidak dapat memahami audio dengan jelas — silakan coba lagi', + 'mic.failedToStopRecording': 'Gagal menghentikan perekaman: {message}', + 'mic.transcriptionFailed': 'Transkripsi gagal: {message}', + 'reflections.kind.retrospective': 'Retrospektif', + 'reflections.kind.derivedFact': 'Fakta Turunan', + 'reflections.kind.moodInsight': 'Wawasan Suasana Hati', + 'reflections.kind.relationshipInsight': 'Wawasan Hubungan', + 'graph.tooltip.summary': 'Ringkasan', + 'graph.tooltip.contact': 'Kontak', + 'localModel.usage.never': 'Tidak pernah', + 'localModel.usage.mediumLoad': 'Beban sedang', + 'localModel.usage.lowLoad': 'Beban rendah', + 'localModel.usage.idleMode': 'Mode idle', + 'localModel.rebootstrapComplete': 'Bootstrap ulang model selesai.', + 'localModel.modelsVerified': 'Model lokal diverifikasi.', + 'accounts.addModal.allConnected': 'Semua terhubung', + 'accounts.addModal.title': 'Tambah akun', + 'accounts.respondQueue.empty': 'Kosong', + 'accounts.respondQueue.hide': 'Sembunyikan antrean balasan', + 'accounts.respondQueue.loadFailed': 'Gagal memuat antrean respons', + 'accounts.respondQueue.loading': 'Memuat antrean...', + 'accounts.respondQueue.pending': 'Tertunda', + 'accounts.respondQueue.show': 'Tampilkan antrean balasan', + 'accounts.respondQueue.title': 'Antrean respons', + 'accounts.webviewHost.almostReady': 'Hampir siap...', + 'accounts.webviewHost.loadTimeout': 'Waktu muat webview habis', + 'accounts.webviewHost.loading': 'Memuat {providerName}...', + 'accounts.webviewHost.loadingAccount': 'Memuat akun', + 'accounts.webviewHost.restoringSession': 'Memulihkan sesi...', + 'accounts.webviewHost.retryLoading': 'Coba muat ulang', + 'accounts.webviewHost.takingLonger': + '{providerName} memakan waktu lebih lama dari yang diharapkan.', + 'accounts.webviewHost.timeoutHint': 'Petunjuk waktu habis', + 'app.connectionBadge.composio': 'Composio', + 'app.connectionBadge.messaging': 'Pesan', + 'app.connectionIndicator.connected': 'Terhubung ke OpenHuman AI 🚀', + 'app.connectionIndicator.connecting': 'Menghubungkan', + 'app.connectionIndicator.coreOffline': 'Core tidak online', + 'app.connectionIndicator.disconnected': 'Terputus', + 'app.connectionIndicator.offline': 'Tidak online', + 'app.connectionIndicator.reconnecting': 'Menyambung ulang…', + 'app.errorFallback.componentStack': 'Stack komponen', + 'app.errorFallback.downloadLatest': 'Unduh terbaru', + 'app.errorFallback.heading': 'Judul', + 'app.errorFallback.hint': 'Petunjuk', + 'app.errorFallback.reloadApp': 'Muat ulang aplikasi', + 'app.errorFallback.subheading': 'Subjudul', + 'app.errorFallback.tryRecover': 'Coba pulihkan', + 'app.localAiDownload.installing': 'Menginstal...', + 'app.localAiDownload.preparing': 'Mempersiapkan...', + 'app.openhumanLink.accounts.continueWith': 'Lanjutkan dengan masuk {label}', + 'app.openhumanLink.accounts.done': 'Selesai', + 'app.openhumanLink.accounts.intro': 'Pengantar', + 'app.openhumanLink.accounts.webviewNote': 'Catatan webview', + 'app.openhumanLink.billing.openDashboard': 'Buka dashboard', + 'app.openhumanLink.billing.stayOnTrial': 'Tetap di trial', + 'app.openhumanLink.billing.trialCredit': 'Kredit trial', + 'app.openhumanLink.billing.trialDesc': 'Deskripsi trial', + 'app.openhumanLink.defaultBody': + 't siap di popup belum. Buka halaman pengaturan lengkap jika Anda', + 'app.openhumanLink.discord.intro': 'Pengantar', + 'app.openhumanLink.discord.openInvite': 'Buka undangan', + 'app.openhumanLink.discord.perk1': 'Keuntungan 1', + 'app.openhumanLink.discord.perk2': 'Keuntungan 2', + 'app.openhumanLink.discord.perk3': 'Keuntungan 3', + 'app.openhumanLink.discord.perk4': 'Keuntungan 4', + 'app.openhumanLink.done': 'Selesai', + 'app.openhumanLink.loadingChannelSetup': 'Memuat pengaturan kanal', + 'app.openhumanLink.maybeLater': 'Mungkin nanti', + 'app.openhumanLink.notifications.asking': 'Menanyakan ke OS Anda...', + 'app.openhumanLink.notifications.blocked': 'Diblokir', + 'app.openhumanLink.notifications.blockedStep1': 'Langkah 1 diblokir', + 'app.openhumanLink.notifications.blockedStep2': 'Langkah 2 diblokir', + 'app.openhumanLink.notifications.blockedStep3': 'Langkah 3 diblokir', + 'app.openhumanLink.notifications.intro': 'Pengantar', + 'app.openhumanLink.notifications.promptHint': 'Petunjuk prompt', + 'app.openhumanLink.notifications.retry': 'Coba ulang notifikasi tes', + 'app.openhumanLink.notifications.send': 'Kirim notifikasi tes', + 'app.openhumanLink.notifications.sendFailed': 'Tidak bisa mengirim: {error}', + 'app.openhumanLink.notifications.sent': + 'Notifikasi uji telah dikirim. Jika Anda tidak menerimanya, buka System Settings → Notifications → OpenHuman, aktifkan Allow Notifications, dan atur Banner Style ke Persistent.', + 'app.openhumanLink.skipForNow': 'Lewati untuk sekarang', + 'app.openhumanLink.telegramUnavailable': 'Telegram tidak tersedia', + 'app.openhumanLink.title.accounts': 'Hubungkan aplikasi Anda', + 'app.openhumanLink.title.billing': 'Tagihan & kredit', + 'app.openhumanLink.title.discord': 'Bergabung ke komunitas', + 'app.openhumanLink.title.messaging': 'Hubungkan kanal chat', + 'app.openhumanLink.title.notifications': 'Izinkan notifikasi', + 'app.persistRehydration.body': 'Isi', + 'app.persistRehydration.heading': 'Judul', + 'app.persistRehydration.resetCta': 'Mereset...', + 'app.persistRehydration.resetting': 'Mereset...', + 'app.routeLoading.initializing': 'Menginisialisasi OpenHuman...', + 'app.update.currentlyOn': '{version}', + 'app.update.errorFallback': 'Terjadi kesalahan saat memperbarui.', + 'app.update.header.default': 'Perbarui', + 'app.update.header.error': 'Pembaruan gagal', + 'app.update.header.installing': 'Menginstal pembaruan', + 'app.update.header.readyToInstall': 'Pembaruan siap diinstal', + 'app.update.header.restarting': 'Memulai ulang...', + 'app.update.later': 'Nanti', + 'app.update.newVersionReady': 'Versi baru siap diinstal.', + 'app.update.progress.downloaded': '{amount} diunduh', + 'app.update.progress.installing': 'Menginstal versi baru...', + 'app.update.progress.restarting': 'Meluncurkan ulang aplikasi...', + 'app.update.progress.working': '{percent}%', + 'app.update.restartNote': 'Catatan mulai ulang', + 'app.update.restartNow': 'Mulai ulang sekarang', + 'app.update.versionReady': 'Versi {newVersion} siap diinstal.', + 'channels.discord.accountLinked': 'Akun terhubung', + 'channels.discord.connect': 'Hubungkan', + 'channels.discord.linkTokenExpired': 'Token tautan kedaluwarsa. Silakan coba lagi.', + 'channels.discord.linkTokenInstruction': '{token}', + 'channels.discord.linkTokenLabel': 'Label token tautan', + 'channels.discord.linkTokenOnce': 'Token tautan sekali pakai', + 'channels.discord.picker.allPermissionsOk': + 'Bot memiliki semua izin yang diperlukan di kanal ini.', + 'channels.discord.picker.botNotInServers': 'Bot tidak ada di server', + 'channels.discord.picker.category': 'Kategori', + 'channels.discord.picker.channel': 'Kanal', + 'channels.discord.picker.checkingPermissions': 'Memeriksa izin', + 'channels.discord.picker.loadingChannels': 'Memuat kanal...', + 'channels.discord.picker.loadingServers': 'Memuat server...', + 'channels.discord.picker.missingPermissions': 'Izin tidak lengkap', + 'channels.discord.picker.noChannels': 'Tidak ada kanal teks ditemukan', + 'channels.discord.picker.noServers': 'Tidak ada server ditemukan', + 'channels.discord.picker.selectChannel': 'Pilih kanal', + 'channels.discord.picker.selectServer': 'Pilih server', + 'channels.discord.picker.server': 'Server', + 'channels.discord.picker.serverChannelSelection': 'Pemilihan Server & Channel', + 'channels.discord.savedRestartRequired': + 'Kanal tersimpan. Mulai ulang aplikasi untuk mengaktifkannya.', + 'channels.telegram.connect': 'Hubungkan', + 'channels.telegram.managedDmConnecting': 'DM terkelola menghubungkan', + 'channels.telegram.managedDmTimeout': 'Waktu DM terkelola habis', + 'channels.telegram.reconnect': 'Hubungkan ulang', + 'channels.telegram.savedRestartRequired': + 'Kanal tersimpan. Mulai ulang aplikasi untuk mengaktifkannya.', + 'channels.web.alwaysAvailable': 'Selalu tersedia', + 'chat.approval.approve': 'Setujui', + 'chat.approval.alwaysAllow': 'Selalu izinkan', + 'chat.approval.alwaysAllowHint': + 'Berhenti meminta alat ini - tambahkan ke daftar Always- ijinkan', + 'chat.approval.deciding': 'Bekerja…', + 'chat.approval.deny': 'Tolak', + 'chat.approval.error': 'Tidak bisa merekam keputusan Anda - coba lagi.', + 'chat.approval.fallback': 'Agen ingin melakukan tindakan yang membutuhkan persetujuanmu.', + 'chat.approval.title': 'Perlu persetujuan', + 'chat.approval.tool': 'Alat:', + 'channels.authMode.managed_dm': 'Masuk dengan OpenHuman', + 'channels.authMode.oauth': 'OAuth Masuk', + 'channels.authMode.bot_token': 'Gunakan Token Bot Anda sendiri', + 'channels.authMode.api_key': 'Gunakan Kunci API Anda sendiri', + 'channels.fieldRequired': '{field} diperlukan', + 'channels.mcp.title': 'MCP Server', + 'channels.mcp.description': + 'Jelajahi dan kelola server Model Context Protocol yang memperluas AI dengan alat baru.', + 'channels.discord.displayName': 'Discord', + 'channels.discord.description': 'Mengirim dan menerima pesan melalui Discord.', + 'channels.discord.authMode.bot_token.description': 'Berikan token bot Discord Anda sendiri.', + 'channels.discord.authMode.oauth.description': + 'Instal bot OpenHuman ke server Discord Anda melalui OAuth.', + 'channels.discord.authMode.managed_dm.description': + 'Tautkan akun Discord pribadi Anda ke bot OpenHuman.', + 'channels.discord.fields.bot_token.label': 'Token Bot', + 'channels.discord.fields.bot_token.placeholder': 'Token bot Discord Anda', + 'channels.discord.fields.guild_id.label': 'ID Server (Guild)', + 'channels.discord.fields.guild_id.placeholder': 'Opsional: batasi ke server tertentu', + 'channels.telegram.displayName': 'Telegram', + 'channels.telegram.description': 'Mengirim dan menerima pesan melalui Telegram.', + 'channels.telegram.authMode.managed_dm.description': + 'Kirim pesan langsung ke bot OpenHuman Telegram.', + 'channels.telegram.authMode.bot_token.description': + 'Berikan token Bot Telegram Anda sendiri dari @Botfather.', + 'channels.telegram.fields.bot_token.label': 'Token Bot', + 'channels.telegram.fields.bot_token.placeholder': '123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11', + 'channels.telegram.fields.allowed_users.label': 'Pengguna yang Diizinkan', + 'channels.telegram.fields.allowed_users.placeholder': 'dipisahkan koma Telegram nama pengguna', + 'channels.telegram.remoteControlTitle': 'Kendali jarak jauh (Telegram)', + 'channels.telegram.remoteControlBody': + 'Dari obrolan Telegram yang diizinkan, kirim /status, /sessions, /new, atau /help. Perutean model masih menggunakan /model dan /models.', + 'channels.web.displayName': 'Web', + 'channels.web.description': 'Mengobrol melalui UI web bawaan.', + 'channels.web.authMode.managed_dm.description': + 'Gunakan obrolan web tertanam — tidak perlu penyiapan.', + 'channels.yuanbao.connect': 'Connect', + 'channels.yuanbao.connecting': 'Menghubungkan…', + 'channels.yuanbao.fieldRequired': '{field} wajib diisi', + 'channels.yuanbao.reconnect': 'Reconnect', + 'channels.yuanbao.savedRestartRequired': + 'Saluran disimpan. Restart aplikasi untuk mengaktifkannya.', + 'channels.yuanbao.unexpectedStatus': 'Status koneksi tidak terduga: {status}', + 'chat.unsubscribeApproval.approve': 'Setujui & Berhenti Berlangganan', + 'chat.unsubscribeApproval.approved': '✓ Berhasil berhenti berlangganan.', + 'chat.unsubscribeApproval.denied': '✕ Permintaan ditolak.', + 'chat.unsubscribeApproval.deny': 'Tolak', + 'chat.unsubscribeApproval.processing': 'Memproses...', + 'chat.unsubscribeApproval.title': 'Permintaan Berhenti Berlangganan', + 'commandPalette.ariaLabel': 'Palet perintah', + 'commandPalette.description': 'Deskripsi', + 'commandPalette.label': 'Perintah', + 'commandPalette.noResults': 'Tidak ada hasil', + 'commandPalette.placeholder': 'Ketik perintah atau cari...', + 'commandPalette.searchAria': 'Cari perintah', + 'commandPalette.shortcutHint': 'Tekan ? untuk semua pintasan', + 'commandPalette.title': 'Palet perintah', + 'kbd.ariaLabel': 'Pintasan keyboard: {shortcut}', + 'iosMascot.connectedTo': 'Tersambung ke', + 'iosMascot.defaultPairedLabel': 'Desktop', + 'iosMascot.disconnect': 'Putuskan sambungan', + 'iosMascot.error.generic': 'Ada yang tidak beres. Silakan coba lagi.', + 'iosMascot.error.sendFailed': 'Gagal mengirim. Periksa koneksi Anda.', + 'iosMascot.pushToTalk': 'Tekan untuk bicara', + 'iosMascot.sendMessage': 'Kirim pesan', + 'iosMascot.thinking': 'Berpikir...', + 'iosMascot.typeMessage': 'Ketik a pesan...', + 'iosPair.connectedLoading': 'Tersambung! Memuat...', + 'iosPair.connecting': 'Menyambungkan ke desktop...', + 'iosPair.desktopLabel': 'Desktop', + 'iosPair.error.camera': 'Pemindaian kamera gagal. Periksa izin kamera dan coba lagi.', + 'iosPair.error.connectionFailed': + 'Koneksi gagal. Pastikan aplikasi desktop sedang berjalan dan coba lagi.', + 'iosPair.error.invalidQr': 'Kode QR tidak valid. Pastikan Anda memindai kode pairing OpenHuman.', + 'iosPair.error.unreachableDesktop': + 'Tidak dapat menjangkau desktop. Pastikan kedua perangkat online dan coba lagi.', + 'iosPair.expired': 'QR code kedaluwarsa. Minta desktop untuk membuat ulang kode.', + 'iosPair.instructions': + 'Buka OpenHuman di desktop Anda, buka Pengaturan > Perangkat, dan ketuk "Pasangkan ponsel" untuk menampilkan kode QR.', + 'iosPair.retryScan': 'Coba pindai lagi', + 'iosPair.scanQrCode': 'Pindai QR code', + 'iosPair.scannerOpening': 'Pemindai terbuka...', + 'iosPair.step.openDesktop': 'Buka OpenHuman di desktop', + 'iosPair.step.openSettings': 'Buka Pengaturan > Perangkat', + 'iosPair.step.showQr': 'Ketuk "Pasangkan ponsel" untuk menampilkan QR', + 'iosPair.title': 'Pasangkan dengan desktop Anda', + 'composio.connect.additionalConfigRequired': 'Konfigurasi tambahan diperlukan', + 'composio.connect.atlassianSubdomainHint': 'acme', + 'composio.connect.atlassianSubdomainLabel': 'Label subdomain Atlassian', + 'composio.connect.connect': 'Hubungkan', + 'composio.connect.dynamicsOrgNameHint': + 'Misalnya, "myorg" untuk myorg.crm.dynamics.com. Masukkan nama organisasi pendek saja, bukan URL lengkap.', + 'composio.connect.dynamicsOrgNameLabel': 'Nama Organisasi Dynamics 365', + 'composio.connect.connectionFailed': 'Koneksi gagal (status: {status}).', + 'composio.connect.disconnectFailed': 'Putus koneksi gagal: {msg}', + 'composio.connect.disconnecting': 'Memutus koneksi...', + 'composio.connect.idleDescription': 'Hubungkan', + 'composio.connect.idleDescriptionSuffix': + 'akun Anda. Kami akan membuka jendela browser, Anda menyetujui akses di sana, dan aplikasi ini akan mendeteksi koneksi secara otomatis.', + 'composio.connect.isConnected': 'terhubung.', + 'composio.connect.manage': 'Kelola', + 'composio.connect.needsFieldsPrefix': 'Untuk menghubungkan', + 'composio.connect.needsFieldsSuffix': + 'kami memerlukan informasi tambahan. Isi bidang yang hilang di bawah dan coba lagi.', + 'composio.connect.needsSubdomain': 'Untuk menghubungkan', + 'composio.connect.needsSubdomainSuffix': + 'masukkan subdomain Atlassian Anda (mis. acme untuk acme.atlassian.net) lalu coba lagi.', + 'composio.connect.oauthComplete': 'OAuth untuk diselesaikan…', + 'composio.connect.oauthTimeout': 'Waktu OAuth habis', + 'composio.connect.permissions': 'Izin', + 'composio.connect.permissionsDefault': 'Baca + Tulis diaktifkan secara default', + 'composio.connect.permissionsNote': 'dapat mengekspos', + 'composio.connect.permissionsNoteSuffix': + 'Izin agen milik OpenHuman dikendalikan di bawah sebagai sakelar read, write, dan admin.', + 'composio.connect.reopenBrowser': 'Buka ulang browser', + 'composio.connect.requestingUrl': 'Meminta URL koneksi...', + 'composio.connect.requiredFieldEmpty': 'Bidang ini wajib diisi.', + 'composio.connect.retryConnection': 'Coba koneksi lagi', + 'composio.connect.scopeLoadError': 'Tidak dapat memuat preferensi scope: {msg}', + 'composio.connect.scopeSaveError': 'Tidak dapat menyimpan scope {key}: {msg}', + 'composio.connect.scope.read': 'Baca', + 'composio.connect.scope.readHint': 'Izinkan agen membaca data dari koneksi ini.', + 'composio.connect.scope.write': 'Tulis', + 'composio.connect.scope.writeHint': + 'Izinkan agen membuat atau mengubah data melalui koneksi ini.', + 'composio.connect.scope.admin': 'Admin', + 'composio.connect.scope.adminHint': + 'Mengizinkan agen mengelola pengaturan, izin, atau tindakan destruktif.', + 'composio.connect.subdomainInvalid': + 'Masukkan hanya subdomain pendek (mis. "acme"), bukan URL lengkap. Hanya boleh berisi huruf, angka, dan tanda hubung.', + 'composio.connect.subdomainRequired': 'Masukkan subdomain Atlassian Anda untuk melanjutkan.', + 'composio.connect.wabaIdHint': + 'Temukan melalui GET /me/businesses lalu GET /{business_id}/owned_whatsapp_business_accounts menggunakan token akses Meta Anda.', + 'composio.connect.wabaIdLabel': 'Label ID WABA', + 'composio.connect.wabaIdRequired': + 'Masukkan ID Akun Bisnis WhatsApp (WABA ID) Anda untuk melanjutkan.', + 'composio.connect.waitingFor': 'Menunggu', + 'composio.connect.waitingHint': 'Petunjuk menunggu', + 'composio.triggers.heading': 'Pemicu', + 'composio.triggers.listenFrom': 'Dengarkan event dari', + 'composio.triggers.loadError': 'Tidak bisa memuat trigger', + 'composio.triggers.needsConfiguration': 'Perlu konfigurasi', + 'composio.triggers.noneAvailable': 'Tidak ada trigger yang tersedia saat ini untuk', + 'conversations.taskKanban.moveLeft': 'Pindah ke kiri', + 'conversations.taskKanban.moveRight': 'Pindah ke kanan', + 'conversations.taskKanban.title': 'Tugas', + 'conversations.taskKanban.approval.default': 'Default', + 'conversations.taskKanban.approval.notRequired': 'Tidak diperlukan', + 'conversations.taskKanban.approval.notRequiredBadge': 'tidak ada persetujuan', + 'conversations.taskKanban.approval.required': 'Diperlukan', + 'conversations.taskKanban.approval.requiredBadge': 'approval', + 'conversations.taskKanban.approval.requiredBeforeExecution': 'Diperlukan sebelum eksekusi', + 'conversations.taskKanban.briefButton': 'Ringkasan tugas', + 'conversations.taskKanban.briefTitle': 'Ringkasan tugas', + 'conversations.taskKanban.closeBrief': 'Tutup ringkasan tugas', + 'conversations.taskKanban.field.acceptanceCriteria': 'Kriteria penerimaan', + 'conversations.taskKanban.field.allowedTools': 'Alat yang diizinkan', + 'conversations.taskKanban.field.approval': 'Persetujuan', + 'conversations.taskKanban.field.assignedAgent': 'Agen yang ditugaskan', + 'conversations.taskKanban.field.blocker': 'Penghambat', + 'conversations.taskKanban.field.evidence': 'Bukti', + 'conversations.taskKanban.field.notes': 'Catatan', + 'conversations.taskKanban.field.objective': 'Tujuan', + 'conversations.taskKanban.field.plan': 'Rencana', + 'conversations.taskKanban.field.status': 'Status', + 'conversations.taskKanban.field.title': 'Judul', + 'conversations.taskKanban.saveChanges': 'Simpan perubahan', + 'conversations.taskKanban.deleteCard': 'Hapus', + 'conversations.taskKanban.updateFailed': 'Tak bisa memutakhirkan tugas; perubahan tak disimpan.', + 'conversations.toolTimeline.turn': 'giliran', + 'conversations.toolTimeline.workerThread': 'thread worker', + 'daemon.serviceBlockingGate.body': 'Isi', + 'daemon.serviceBlockingGate.downloadHint': 'Petunjuk unduhan', + 'daemon.serviceBlockingGate.downloadLatest': 'Unduh Versi Terbaru', + 'daemon.serviceBlockingGate.retryCore': 'Coba Ulang Core', + 'daemon.serviceBlockingGate.retryFailed': + 'Coba ulang gagal. Unduh build aplikasi terbaru dan coba lagi.', + 'daemon.serviceBlockingGate.retrying': 'Mencoba ulang...', + 'daemon.serviceBlockingGate.title': 'Core OpenHuman tidak tersedia', + 'home.banners.discordSubtitle': 'Subtitle Discord', + 'home.banners.discordTitle': 'Bergabung ke Discord Kami', + 'home.banners.earlyBirdDismiss': 'Abaikan banner early bird', + 'home.banners.earlyBirdFirstSub': 'langganan pertama.', + 'home.banners.earlyBirdOn': 'Early bird aktif', + 'home.banners.earlyBirdTitle': '1.000 pengguna pertama dapat diskon 60%.', + 'home.banners.earlyBirdUseCode': 'Gunakan kode early bird', + 'home.banners.getSubscription': 'dapatkan langganan', + 'home.banners.promoCreditsBody': 'Isi kredit promo', + 'home.banners.promoCreditsTitle': '{amount}', + 'home.banners.promoCreditsUsage': 'Penggunaan kredit promo', + 'intelligence.memoryChunk.detail.chunk': 'Potongan', + 'intelligence.memoryChunk.detail.copyChunkId': 'Salin ID chunk', + 'intelligence.memoryChunk.detail.embeddingInfo': 'bge-m3 1024dim', + 'intelligence.memoryChunk.detail.noEmbedding': 'Tidak ada embedding', + 'intelligence.memoryChunk.letterhead.from': 'dari', + 'intelligence.memoryChunk.letterhead.to': 'ke', + 'intelligence.memoryChunk.mentioned.chunkOne': '1 potongan', + 'intelligence.memoryChunk.mentioned.chunkOther': '{count} chunk', + 'intelligence.memoryChunk.mentioned.heading': 'd i s e b u t k a n', + 'intelligence.memoryChunk.scoreBars.ariaScore': '{name} skor {pct} persen', + 'intelligence.memoryChunk.scoreBars.atThreshold': 'pada {threshold}', + 'intelligence.memoryChunk.scoreBars.dropped': 'dibuang', + 'intelligence.memoryChunk.scoreBars.heading': 'm e n g a p a d i s i m p a n', + 'intelligence.memoryChunk.scoreBars.kept': 'dipertahankan', + 'intelligence.diagram.title': 'Diagram Arsitektur', + 'intelligence.diagram.description': + 'Output arsitektur lokal terbaru dari endpoint diagram yang dikonfigurasi.', + 'intelligence.diagram.refresh': 'Refresh', + 'intelligence.diagram.refreshAria': 'Segarkan diagram', + 'intelligence.diagram.emptyTitle': 'Belum ada diagram tersedia', + 'intelligence.diagram.emptyDescription': + 'Buat diagram arsitektur dari orkestrator dan panel ini akan diperbarui dari endpoint lokal yang dikonfigurasi.', + 'intelligence.diagram.skillInstallCommand': 'npx skills add yizhiyanhua-ai/fireworks-tech-graph', + 'intelligence.diagram.promptExample': + 'Buat diagram arsitektur swarm saat ini dalam gaya terminal gelap', + 'intelligence.diagram.imageAlt': 'Diagram arsitektur OpenHuman terbaru yang dihasilkan', + 'intelligence.diagram.refreshesEvery': 'Diperbarui setiap {seconds}d', + 'intelligence.memoryText.entityTypePrefix': 'Tipe entitas', + 'intelligence.screenDebug.active': 'Aktif', + 'intelligence.screenDebug.app': 'Aplikasi', + 'intelligence.screenDebug.bounds': 'Batas', + 'intelligence.screenDebug.captureAlt': 'Hasil tes tangkapan', + 'intelligence.screenDebug.captureFailed': 'Gagal', + 'intelligence.screenDebug.captureSuccess': 'Berhasil', + 'intelligence.screenDebug.captureTest': 'Tes tangkapan', + 'intelligence.screenDebug.capturing': 'Menangkap', + 'intelligence.screenDebug.frames': 'Frame', + 'intelligence.screenDebug.idle': 'Siaga', + 'intelligence.screenDebug.lastApp': 'Aplikasi Terakhir', + 'intelligence.screenDebug.mode': 'Mode', + 'intelligence.screenDebug.permAccessibility': 'Izin aksesibilitas', + 'intelligence.screenDebug.permInput': 'Izin input', + 'intelligence.screenDebug.permScreen': 'Aksesibilitas', + 'intelligence.screenDebug.permissions': 'Izin', + 'intelligence.screenDebug.platformNotSupported': 'Platform tidak didukung', + 'intelligence.screenDebug.recentVisionSummaries': 'Ringkasan visi terbaru', + 'intelligence.screenDebug.session': 'Sesi', + 'intelligence.screenDebug.size': 'Ukuran', + 'intelligence.screenDebug.status': 'Status', + 'intelligence.screenDebug.testCapture': 'Tes tangkapan', + 'intelligence.screenDebug.time': 'Waktu', + 'intelligence.screenDebug.title': 'Judul', + 'intelligence.screenDebug.unknown': 'Tidak diketahui', + 'intelligence.screenDebug.visionQueue': 'Antrean Visi', + 'intelligence.screenDebug.visionState': 'Status Visi', + 'intelligence.tasks.activeBoardOne': '1 board aktif di seluruh percakapan', + 'intelligence.tasks.activeBoardOther': '{count} board aktif di seluruh percakapan', + 'intelligence.tasks.empty': 'Belum ada papan tugas agen', + 'intelligence.tasks.emptyHint': 'Petunjuk kosong', + 'intelligence.tasks.failedToLoad': 'Gagal memuat', + 'intelligence.tasks.live': 'langsung', + 'intelligence.tasks.loadingBoards': 'Memuat papan tugas...', + 'intelligence.tasks.threadPrefix': 'Utas {thread}', + 'intelligence.tasks.subtitle': 'Tugas Anda dan papan tugas agen di seluruh ruang kerja.', + 'intelligence.tasks.newTask': 'Tugas baru', + 'intelligence.tasks.personalBoardTitle': 'Tugas Agen', + 'intelligence.tasks.personalEmpty': 'Belum ada tugas pribadi', + 'intelligence.tasks.composer.title': 'Tugas baru', + 'intelligence.tasks.composer.titleLabel': 'Judul', + 'intelligence.tasks.composer.titlePlaceholder': 'Apa yang perlu dilakukan?', + 'intelligence.tasks.composer.statusLabel': 'Status', + 'intelligence.tasks.composer.attachLabel': 'Lampirkan ke percakapan', + 'intelligence.tasks.composer.attachNone': 'Pribadi (tanpa percakapan)', + 'intelligence.tasks.composer.objectiveLabel': 'Tujuan', + 'intelligence.tasks.composer.objectivePlaceholder': 'Opsional — hasil yang diinginkan', + 'intelligence.tasks.composer.notesLabel': 'Catatan', + 'intelligence.tasks.composer.notesPlaceholder': 'Catatan opsional', + 'intelligence.tasks.composer.create': 'Buat tugas', + 'intelligence.tasks.composer.creating': 'Membuat…', + 'intelligence.tasks.composer.createFailed': 'Gagal membuat tugas', + 'notifications.card.dismiss': 'Abaikan notifikasi', + 'notifications.card.importanceTitle': 'Tingkat penting: {pct}%', + 'notifications.center.empty': 'Belum ada notifikasi', + 'notifications.center.emptyHint': 'Petunjuk kosong', + 'notifications.center.filterAll': 'Filter semua', + 'notifications.center.markAllRead': 'Tandai semua sudah dibaca', + 'notifications.center.title': 'Notifikasi', + 'oauth.button.connecting': 'Menghubungkan...', + 'oauth.button.loopbackTimeout': + 'Masuk habis waktu — browser tidak menyelesaikan pengalihan OAuth. Silakan coba lagi.', + 'oauth.login.continueWith': 'Lanjutkan dengan', + 'onboarding.contextGathering.buildingDesc': 'Deskripsi pembangunan', + 'onboarding.contextGathering.buildingProfile': 'Membangun profil Anda...', + 'onboarding.contextGathering.continueToChat': 'Lanjutkan ke chat', + 'onboarding.contextGathering.coreAlive': + 'Core dapat diakses — peluncuran pertama bisa memakan waktu satu menit.', + 'onboarding.contextGathering.coreAliveProbing': 'Memeriksa koneksi core…', + 'onboarding.contextGathering.coreUnreachable': + 'Core tidak merespons. Anda bisa melanjutkan dan coba lagi nanti.', + 'onboarding.contextGathering.errorDesc': + 'Kami tidak bisa membangun profil lengkap Anda sekarang, tapi tidak apa-apa — Anda bisa lanjut dan profil Anda akan terbentuk seiring waktu.', + 'onboarding.contextGathering.stillWorkingDesc': + 'Peluncuran pertama bisa memakan waktu 30–60 detik sementara kami menyiapkan model dan alat lokal Anda. Anda bisa melanjutkan ke chat kapan saja — pembuatan profil tetap berjalan di latar belakang.', + 'onboarding.contextGathering.stillWorkingTitle': 'Masih membangun profil Anda…', + 'onboarding.contextGathering.title': 'Pengumpulan Konteks', + 'openhuman.team_list_teams': 'Daftar tim', + 'overlay.ariaAttention': 'Pesan perhatian', + 'overlay.ariaCompanion': 'Pendamping aktif', + 'overlay.ariaOrb': 'Overlay OpenHuman', + 'overlay.ariaVoiceActive': 'Input suara aktif', + 'overlay.companion.error': 'Kesalahan', + 'overlay.companion.listening': 'Mendengarkan…', + 'overlay.companion.pointing': 'Menunjuk…', + 'overlay.companion.speaking': 'Berbicara…', + 'overlay.companion.thinking': 'Berpikir…', + 'overlay.orbTitle': 'Seret untuk memindahkan · Klik dua kali untuk mereset posisi', + 'pages.settings.account.connections': 'Koneksi', + 'pages.settings.account.connectionsDesc': 'Deskripsi koneksi', + 'pages.settings.account.migration': 'Impor dari asisten lain', + 'pages.settings.account.migrationDesc': + 'Migrasikan memori dan catatan dari OpenClaw (dan, segera, Hermes) ke ruang kerja ini.', + 'pages.settings.account.privacy': 'Privasi', + 'pages.settings.account.privacyDesc': 'Deskripsi privasi', + 'pages.settings.account.recoveryPhrase': 'Frasa pemulihan', + 'pages.settings.account.recoveryPhraseDesc': 'Deskripsi frasa pemulihan', + 'pages.settings.account.team': 'Tim', + 'pages.settings.account.teamDesc': 'Deskripsi tim', + 'pages.settings.accountSection.description': + 'Frasa pemulihan, tim, koneksi, dan pengaturan privasi.', + 'pages.settings.accountSection.title': 'Akun', + 'pages.settings.ai.llm': 'LLM', + 'pages.settings.ai.llmDesc': 'Deskripsi LLM', + 'pages.settings.ai.voice': 'Suara', + 'pages.settings.ai.voiceDesc': 'Deskripsi suara', + 'pages.settings.aiSection.description': + 'Penyedia model bahasa, Ollama lokal, dan suara (STT / TTS).', + 'pages.settings.aiSection.title': 'AI', + 'pages.settings.composioSection.title': 'Composio', + 'pages.settings.composioSection.description': + 'Perutean, pemicu, dan riwayat untuk integrasi yang didukung oleh Composio.', + 'settings.developerMenu.composio.title': 'Composio', + 'settings.developerMenu.composio.desc': + 'Mode perutean, pemicu integrasi, dan arsip riwayat pemicu.', + 'pages.settings.features.desktopCompanion': 'Pendamping Desktop', + 'pages.settings.features.desktopCompanionDesc': + 'Asisten suara dengan kesadaran layar — mendengar, melihat, berbicara, menunjuk', + 'pages.settings.features.messagingChannels': 'Kanal pesan', + 'pages.settings.features.messagingChannelsDesc': 'Deskripsi kanal pesan', + 'pages.settings.features.notifications': 'Notifikasi', + 'pages.settings.features.notificationsDesc': 'Deskripsi notifikasi', + 'pages.settings.features.screenAwareness': 'Kesadaran layar', + 'pages.settings.features.screenAwarenessDesc': 'Deskripsi kesadaran layar', + 'pages.settings.features.tools': 'Alat', + 'pages.settings.features.toolsDesc': 'Deskripsi alat', + 'pages.settings.featuresSection.description': 'Kesadaran layar, pesan, dan alat.', + 'pages.settings.featuresSection.title': 'Fitur', + 'privacy.dataKind.credentials': 'Kredensial', + 'privacy.dataKind.derived': 'Turunan', + 'privacy.dataKind.diagnostics': 'Diagnostik', + 'privacy.dataKind.metadata': 'Metadata', + 'privacy.dataKind.raw': 'Mentah', + 'privacy.whatLeaves.link.label': 'Apa yang keluar dari komputer saya?', + 'rewards.community.achievementsUnlocked': '{unlocked} dari {total} pencapaian terbuka', + 'rewards.community.connectDiscord': 'Hubungkan Discord', + 'rewards.community.cumulativeTokens': 'Token kumulatif', + 'rewards.community.currentStreak': 'Streak saat ini', + 'rewards.community.discordLinkedNotInGuild': 'Discord terhubung tidak ada di guild', + 'rewards.community.discordMember': 'Bergabung ke server', + 'rewards.community.discordNotLinked': 'Discord belum terhubung', + 'rewards.community.discordServer': 'Server Discord', + 'rewards.community.discordStatusUnavailable': 'Status Discord tidak tersedia', + 'rewards.community.discordWaiting': 'Menunggu Discord', + 'rewards.community.heroSubtitle': 'Subtitle hero', + 'rewards.community.heroTitle': 'Judul hero', + 'rewards.community.joinDiscord': 'Gabung Discord', + 'rewards.community.loadingRewards': 'Memuat hadiah...', + 'rewards.community.locked': 'Terbuka', + 'rewards.community.retrying': 'Mencoba ulang...', + 'rewards.community.rolesAndRewards': 'Peran & Hadiah', + 'rewards.community.streakDays': '{n}', + 'rewards.community.syncPending': 'Sinkronisasi hadiah tertunda', + 'rewards.community.syncPendingDesc': 'Deskripsi tertunda sinkronisasi', + 'rewards.community.syncUnavailable': 'Sinkronisasi tidak tersedia', + 'rewards.community.tryAgain': 'Mencoba ulang...', + 'rewards.community.unknown': 'Tidak diketahui', + 'rewards.community.unlocked': 'Terbuka', + 'rewards.community.yourProgress': 'Progres Anda', + 'rewards.coupon.colCode': 'Kode', + 'rewards.coupon.colRedeemed': 'Ditukarkan', + 'rewards.coupon.colReward': 'Hadiah', + 'rewards.coupon.colStatus': 'Status', + 'rewards.coupon.loadingHistory': 'Memuat riwayat hadiah...', + 'rewards.coupon.noCodes': 'Belum ada kode hadiah yang ditukarkan.', + 'rewards.coupon.pending': 'Tertunda', + 'rewards.coupon.placeholder': 'Kode kupon', + 'rewards.coupon.promoCredits': 'Kredit promo', + 'rewards.coupon.recentRedemptions': 'Penukaran terbaru', + 'rewards.coupon.redeemAccepted': + '{code} diterima. {amount} akan terbuka setelah tindakan yang diperlukan diselesaikan.', + 'rewards.coupon.redeemButton': 'Tukarkan Kode', + 'rewards.coupon.redeemSuccess': '{code} ditukarkan. {amount} telah ditambahkan ke kredit Anda.', + 'rewards.coupon.redeemedCodes': 'Kode yang ditukarkan', + 'rewards.coupon.redeeming': 'Menukarkan...', + 'rewards.coupon.statusApplied': 'Diterapkan', + 'rewards.coupon.statusPendingAction': 'Menunggu tindakan', + 'rewards.coupon.statusRedeemed': 'Ditukarkan', + 'rewards.coupon.subtitle': 'Subjudul', + 'rewards.coupon.title': 'Tukarkan kode kupon', + 'rewards.referralSection.activity': 'Aktivitas referral', + 'rewards.referralSection.apply': 'Menerapkan...', + 'rewards.referralSection.applying': 'Menerapkan...', + 'rewards.referralSection.colReferredUser': 'Pengguna yang direferensikan', + 'rewards.referralSection.colReward': 'Hadiah', + 'rewards.referralSection.colStatus': 'Status', + 'rewards.referralSection.colUpdated': 'Diperbarui', + 'rewards.referralSection.completed': 'Selesai', + 'rewards.referralSection.copyCode': 'Salin kode', + 'rewards.referralSection.copyFailed': 'Salin gagal', + 'rewards.referralSection.haveCode': 'Punya kode referral?', + 'rewards.referralSection.haveCodeDesc': 'Deskripsi punya kode', + 'rewards.referralSection.linked': 'Terhubung', + 'rewards.referralSection.linkedCode': '(kode {code})', + 'rewards.referralSection.loading': 'Memuat program referral...', + 'rewards.referralSection.retry': 'Coba lagi', + 'rewards.referralSection.noReferrals': 'Tidak ada referral', + 'rewards.referralSection.pendingReferrals': 'Referral tertunda', + 'rewards.referralSection.placeholder': 'Kode referral', + 'rewards.referralSection.share': 'Bagikan', + 'rewards.referralSection.statusCompleted': 'Status selesai', + 'rewards.referralSection.statusExpired': 'Status kedaluwarsa', + 'rewards.referralSection.statusJoined': 'Status bergabung', + 'rewards.referralSection.subtitle': 'Subjudul', + 'rewards.referralSection.title': 'Undang teman, dapatkan kredit', + 'rewards.referralSection.totalEarned': 'Total diperoleh', + 'rewards.referralSection.yourCode': 'Kode Anda', + 'settings.ai.addCloudProvider': 'Tambah penyedia cloud', + 'settings.ai.addProvider': 'Menyimpan...', + 'settings.ai.apiKeyFieldLabel': 'Label kolom API key', + 'settings.ai.apiKeyRequired': 'Tempelkan API key Anda untuk melanjutkan.', + 'settings.ai.apiKeyStoredEncrypted': 'API key disimpan terenkripsi', + 'settings.ai.apiKeysEncrypted': 'auth-profiles.json', + 'settings.ai.clearStoredKey': 'Hapus key tersimpan', + 'settings.ai.connectProvider': 'Hubungkan penyedia', + 'settings.ai.customRouting': 'Routing kustom', + 'settings.ai.defaultResolvesTo': 'Default diarahkan ke', + 'settings.ai.discard': 'Buang', + 'settings.ai.editProvider': 'Edit penyedia', + 'settings.ai.llmProviders': 'Penyedia LLM', + 'settings.ai.llmProvidersDesc': 'Deskripsi penyedia LLM', + 'settings.ai.localOllama': 'Lokal (Ollama)', + 'settings.ai.modelLabel': 'Model AI', + 'settings.ai.noCustomProviders': 'Tidak ada penyedia kustom', + 'settings.ai.openAiCompat.authHeaderExample': 'Otorisasi: Pembawa ', + 'settings.ai.openAiCompat.authHeaderLabel': 'Header autentikasi', + 'settings.ai.openAiCompat.baseUrlLabel': 'Basis URL', + 'settings.ai.openAiCompat.baseUrlUnavailable': 'Tidak tersedia', + 'settings.ai.openAiCompat.clearKey': 'Hapus kunci', + 'settings.ai.openAiCompat.description': + 'Arahkan harness lokal ke server /v1 ini untuk diteruskan melalui penyedia yang dikonfigurasi di bawah. Autentikasi menggunakan kunci stabil yang Anda tetapkan di sini, bukan bearer inti internal aplikasi.', + 'settings.ai.openAiCompat.keyConfigured': 'Kunci dikonfigurasi', + 'settings.ai.openAiCompat.keyRequired': 'Kunci diperlukan', + 'settings.ai.openAiCompat.rotateKey': 'Tombol putar', + 'settings.ai.openAiCompat.setKey': 'Setel kunci', + 'settings.ai.openAiCompat.title': 'Titik akhir yang kompatibel dengan OpenAI', + 'settings.ai.providerLabel': 'Penyedia', + 'skills.mcpComingSoon.title': 'MCP Server', + 'skills.mcpComingSoon.description': + 'Manajemen server MCP akan segera hadir. Tab ini akan menjadi tempat untuk menemukan, menghubungkan, dan memantau integrasi server MCP Anda.', + 'settings.ai.routing': 'Perutean', + 'settings.ai.routingCustom': 'Routing kustom', + 'settings.ai.routingDefault': 'Bawaan', + 'settings.ai.routingDesc': 'Deskripsi routing', + 'settings.ai.saveChanges': 'Menyimpan...', + 'settings.ai.saving': 'Menyimpan...', + 'settings.ai.unsavedChange': 'perubahan belum disimpan', + 'settings.ai.unsavedChanges': 'perubahan belum disimpan', + 'settings.ai.workloadGroupBackground': 'Grup beban kerja latar', + 'settings.ai.workloadGroupChat': 'Grup beban kerja chat', + 'settings.ai.disconnectProvider': 'Putuskan sambungan {label}', + 'settings.ai.connectProviderLabel': 'Sambungkan {label}', + 'settings.ai.defaultLocalEndpoint': 'http://localhost:11434/v1', + 'settings.ai.endpointUrlLabel': 'Titik Akhir URL', + 'settings.ai.localRuntimeHelper': + 'Dimana {label} bisa dihubungi. Baku adalah localhost; arahkan ini ke host jarak jauh (misalnya, http://10.0.0.4:11434/v1) untuk memakai suatu contoh bersama.', + 'settings.ai.endpointUrlRequired': 'Titik akhir URL diperlukan.', + 'settings.ai.endpointProtocolRequired': 'Titik akhir harus dimulai dengan http:// atau https://.', + 'settings.ai.connectProviderDialog': 'Hubungkan {label}', + 'settings.ai.or': 'Atau', + 'settings.ai.openRouterOauthDescription': + 'Masuk dengan kunci OpenRouter dan impor sebuah user yang dikendalikan API menggunakan PKCE.', + 'settings.ai.connecting': 'Menghubungkan...', + 'settings.ai.backgroundLoops': 'Perulangan latar belakang', + 'settings.ai.backgroundLoopsDesc': + 'Lihat apa yang berjalan tanpa pesan obrolan, jeda kerja detak jantung, dan memeriksa buku kas kredit baru-baru ini.', + 'settings.ai.heartbeatControls': 'Kontrol detak jantung', + 'settings.ai.heartbeatControlsDesc': + 'Default off. Mengaktifkan memulai loop; menonaktifkan menonaktifkan tugas yang sedang berjalan.', + 'settings.ai.heartbeatLoop': 'Putaran detak jantung', + 'settings.ai.heartbeatLoopDesc': + 'Master penjadwalan untuk perencana + inferensi bawah sadar opsional.', + 'settings.ai.subconsciousInference': 'Inferensi bawah sadar', + 'settings.ai.subconsciousInferenceDesc': + 'Model runs - didukung /reflection evaluasi pada detak jantung.', + 'settings.ai.calendarMeetingChecks': 'Pemeriksaan rapat kalender', + 'settings.ai.calendarMeetingChecksDesc': + 'Memanggil daftar acara kalender untuk koneksi kalender Google yang aktif.', + 'settings.ai.calendarCap': 'Batas kalender', + 'settings.ai.connectionsPerTick': '{count} samb/centang', + 'settings.ai.meetingLookahead': 'Pertemuan ke depan', + 'settings.ai.minutesShort': '{count} mnt', + 'settings.ai.reminderLookahead': 'Pengingat ke depan', + 'settings.ai.cronReminderChecks': 'Pemeriksaan pengingat cron', + 'settings.ai.cronReminderChecksDesc': + 'Pemindaian memungkinkan pekerjaan cron untuk pengingat-seperti item mendatang.', + 'settings.ai.relevantNotificationChecks': 'Pemeriksaan notifikasi yang relevan', + 'settings.ai.relevantNotificationChecksDesc': + 'Promoses mendesak pemberitahuan lokal ke peringatan proaktif.', + 'settings.ai.externalDelivery': 'Pengiriman eksternal', + 'settings.ai.externalDeliveryDesc': + 'Biarkan detak jantung memperingatkan mengirim pesan proaktif ke saluran eksternal.', + 'settings.ai.interval': 'Interval', + 'settings.ai.running': 'Berjalan...', + 'settings.ai.plannerTickNow': 'Perencana centang sekarang', + 'settings.ai.loadingHeartbeatControls': 'Memuat kontrol detak jantung...', + 'settings.ai.heartbeatControlsUnavailable': 'Kontrol detak jantung tidak tersedia.', + 'settings.ai.loopMap': 'Peta loop', + 'settings.ai.plannerSummary': + 'Perencana: {sourceEvents} peristiwa sumber, {sent} terkirim, {deduped} dihapuskan.', + 'settings.ai.routeLabel': 'rute: {route}', + 'settings.ai.on': 'aktif', + 'settings.ai.off': 'nonaktif', + 'settings.ai.recentUsageLedger': 'Buku besar penggunaan terkini', + 'settings.ai.recentUsageLedgerDesc': + 'Backend baris mengekspos action/time hari ini; sumber tag membutuhkan dukungan backend.', + 'settings.ai.latestSpend': 'Pembelanjaan terbaru: {amount} pada {time} ({action})', + 'settings.ai.topActions': 'Tindakan teratas', + 'settings.ai.noSpendRows': 'Tidak ada baris pembelanjaan yang dimuat.', + 'settings.ai.topHours': 'Jam sibuk', + 'settings.ai.noHourlySpend': 'Belum ada pembelanjaan per jam.', + 'settings.ai.openhumanDefault': 'OpenHuman (baku)', + 'settings.ai.localModelResolved': 'Ollama', + 'settings.ai.customRoutingForWorkload': 'Perutean khusus untuk {label}', + 'settings.ai.loadingModels': 'Memuat model...', + 'settings.ai.enterModelIdManually': 'atau masukkan id model secara manual:', + 'settings.ai.modelIdPlaceholderForProvider': '{slug} ID model', + 'settings.ai.modelIdPlaceholder': 'model-id', + 'settings.ai.selectModel': 'Pilih model...', + 'settings.ai.temperatureOverride': 'Penggantian suhu', + 'settings.ai.temperatureOverrideSlider': 'Penggantian suhu (slider)', + 'settings.ai.temperatureOverrideValue': 'Penggantian suhu (nilai)', + 'settings.ai.temperatureOverrideDesc': + 'Turunkan = lebih deterministik. Biarkan tak diperiksa untuk memakai penyedia bawaan.', + 'settings.ai.testFailed': 'Pengujian gagal', + 'settings.ai.testingModel': 'Pengujian model...', + 'settings.ai.modelResponse': 'Respons model', + 'settings.ai.providerWithValue': 'Penyedia: {value}', + 'settings.ai.noneDash': '-', + 'settings.ai.promptHelloWorld': 'Perintah: Halo dunia', + 'settings.ai.startedAt': 'Dimulai: {value}', + 'settings.ai.waitingForModelResponse': 'Menunggu respon dari model yang dipilih...', + 'settings.ai.response': 'Respon', + 'settings.ai.testing': 'Pengujian...', + 'settings.ai.test': 'Pengujian', + 'settings.ai.slugMissingError': 'Masukkan nama penyedia untuk menghasilkan siput.', + 'settings.ai.slugInUseError': 'Nama penyedia tersebut sudah digunakan.', + 'settings.ai.slugReservedError': 'Pilih nama penyedia yang berbeda.', + 'settings.ai.providerNamePlaceholder': 'Penyedia Saya', + 'settings.ai.slugLabel': 'Siput:', + 'settings.ai.openAiUrlLabel': 'URL OpenAI', + 'settings.ai.openAiUrlPlaceholder': 'https://api.openai.com/v1', + 'settings.ai.keepExistingKeyPlaceholder': 'Biarkan kosong untuk mempertahankan kunci yang ada', + 'settings.ai.reindexingMemory': 'Mengindeks ulang memori', + 'settings.ai.reindexingMemoryMessage': + 'Embeddings sedang diproses kembali. Butir memori {pending} sedang tertanam kembali di bawah model saat ini - semantic recall berkurang sampai ini selesai. Pencarian kata kunci terus bekerja, dan kembali embedding terus di latar belakang jika Anda menutup ini.', + 'settings.ai.signInWithOpenRouter': 'Masuk dengan OpenRouter', + 'settings.ai.weekBudget': 'Anggaran minggu', + 'settings.ai.cycleRemaining': 'Sisa siklus', + 'settings.ai.cycleTotalSpend': 'Total pembelanjaan siklus', + 'settings.ai.avgSpendRow': 'Baris pembelanjaan rata-rata', + 'settings.ai.backgroundApiReads': 'Bg API dibaca', + 'settings.ai.backgroundWakeups': 'Bg bangun', + 'settings.ai.budgetMath': 'Perhitungan anggaran', + 'settings.ai.rowsLeft': 'Baris tersisa', + 'settings.ai.rowsPerFullWeekBudget': 'Baris anggaran per minggu penuh', + 'settings.ai.sampleBurnRate': 'Laju pembakaran sampel', + 'settings.ai.projectedEmpty': 'Proyeksi kosong', + 'settings.ai.apiReadsPerDollarRemaining': 'API pembacaan per $ yang tersisa', + 'settings.ai.loopCallBudget': 'Anggaran panggilan berulang', + 'settings.ai.heartbeatTicks': 'Detak jantung berdetak', + 'settings.ai.calendarPlannerCalls': 'Panggilan perencana kalender', + 'settings.ai.calendarFanoutCap': 'Batas fanout kalender', + 'settings.ai.subconsciousModelCalls': 'Panggilan model bawah sadar', + 'settings.ai.composioSyncScans': 'Composio pemindaian sinkronisasi', + 'settings.ai.totalBackgroundApiReadBudget': 'Total bg API anggaran baca', + 'settings.ai.memoryWorkerPolls': 'Jajak pendapat pekerja memori', + 'settings.ai.defaultProviderName': 'OpenHuman', + 'settings.ai.routing.managed': 'Terkelola', + 'settings.ai.routing.managedDesc': + 'OpenHuman akan menjalankan semua kesimpulan di awan, memilih model terbaik untuk tugas ini, mengoptimalkan biaya, dan menjaga standar routing teraman.', + 'settings.ai.routing.managedMsg': + 'OpenHuman akan menangani semua inferensi untuk setiap beban kerja dan secara otomatis memilih rute terbaik untuk biaya, kualitas, dan keamanan.', + 'settings.ai.routing.useYourOwn': 'Gunakan Model Anda Sendiri', + 'settings.ai.routing.useYourOwnDesc': + 'Pilih satu model + penyedia dan setiap beban kerja di dalamnya. Ini sederhana, tetapi dapat tidak efisien karena inferensi ringan dan kelas berat semua berbagi rute yang sama.', + 'settings.ai.routing.advanced': 'Tingkat Lanjut', + 'settings.ai.routing.advancedDesc': + 'Pilih model yang berbeda untuk tugas yang berbeda. Ini adalah pilihan terbaik untuk optimasi biaya ketat dan kontrol yang paling.', + 'settings.ai.routing.customDesc': + 'Routing halus memberikan optimasi biaya terbaik dan kontrol yang paling. Gunakan baris di bawah ini untuk memutuskan loading kerja mana yang tetap Managed, yang menggunakan nilai baku yang sama, dan pin yang digunakan untuk model tertentu.', + 'settings.ai.routing.chatAndConversations': 'Obrolan dan Percakapan', + 'settings.ai.routing.chatDesc': + 'Model digunakan selama interaksi pengguna langsung, membalas, penalaran, loop agen, dan bantuan coding.', + 'settings.ai.routing.backgroundTasks': 'Tugas Latar Belakang', + 'settings.ai.routing.bgTasksDesc': + 'Model digunakan di luar aliran percakapan utama untuk summarisasi, detak jantung, pembelajaran, dan evaluasi bawah sadar.', + 'settings.ai.routing.addCustomProvider': 'Tambahkan Penyedia Khusus', + 'settings.ai.globalModel.title': 'Pilih satu model untuk semuanya', + 'settings.ai.globalModel.desc': + 'Rute ini semua masuk melalui satu model. Hal ini lebih sederhana, tetapi dapat tidak efisien untuk biaya dan kualitas karena tugas ringan dan berat semua akan menggunakan rute yang sama.', + 'settings.ai.globalModel.noProviders': + 'Tambah atau hubungkan penyedia terlebih dahulu. Kemudian Anda dapat rute setiap beban kerja melalui satu model di sini.', + 'settings.ai.globalModel.provider': 'Penyedia', + 'settings.ai.globalModel.model': 'Model AI', + 'settings.ai.globalModel.loadingModels': 'Memuat model…', + 'settings.ai.globalModel.enterModelId': 'Masukkan id model', + 'settings.ai.globalModel.appliesToAll': + 'Applies penyedia + model yang sama untuk chatting, penalaran, coding, memori, detak jantung, belajar, dan bawah sadar. Embeddings dikonfigurasi secara terpisah. Perubahan simpan ketika Anda klik save.', + 'settings.ai.globalModel.saving': 'Menyimpan…', + 'settings.ai.globalModel.saved': 'Tersimpan', + 'settings.ai.workload.noModel': 'Tidak ada model yang dipilih', + 'settings.ai.workload.changeModel': 'Ubah Model', + 'settings.ai.workload.chooseModel': 'Pilih Model', + 'settings.ai.provider.ollama': 'Ollama', + 'settings.autocomplete.appFilter.acceptSuggestion': 'Terima saran', + 'settings.autocomplete.appFilter.app': 'Aplikasi', + 'settings.autocomplete.appFilter.currentSuggestion': 'Saran saat ini', + 'settings.autocomplete.appFilter.contextOverride': 'Penggantian Konteks (opsional)', + 'settings.autocomplete.appFilter.debounce': 'Debounce', + 'settings.autocomplete.appFilter.debugFocus': 'Debug fokus', + 'settings.autocomplete.appFilter.enabled': 'Diaktifkan', + 'settings.autocomplete.appFilter.getSuggestion': 'Dapatkan saran', + 'settings.autocomplete.appFilter.lastError': 'Kesalahan terakhir', + 'settings.autocomplete.appFilter.liveLogs': 'Log Langsung', + 'settings.autocomplete.appFilter.model': 'Model AI', + 'settings.autocomplete.appFilter.noLogs': ') :', + 'settings.autocomplete.appFilter.phase': 'Fase', + 'settings.autocomplete.appFilter.platformSupported': 'Platform didukung', + 'settings.autocomplete.appFilter.refreshStatus': 'Menyegarkan...', + 'settings.autocomplete.appFilter.refreshing': 'Menyegarkan...', + 'settings.autocomplete.appFilter.running': 'Berjalan', + 'settings.autocomplete.appFilter.runtime': 'Waktu proses', + 'settings.autocomplete.appFilter.test': 'Tes', + 'settings.autocomplete.completionStyle.acceptedCompletion': + '{count} pelengkapan diterima tersimpan — digunakan untuk mempersonalisasi saran berikutnya.', + 'settings.autocomplete.completionStyle.acceptedCompletions': + '{count} pelengkapan diterima tersimpan — digunakan untuk mempersonalisasi saran berikutnya.', + 'settings.autocomplete.completionStyle.clearHistory': 'Membersihkan...', + 'settings.autocomplete.completionStyle.clearing': 'Membersihkan...', + 'settings.autocomplete.completionStyle.debounce': 'Tunda input (ms)', + 'settings.autocomplete.completionStyle.enabled': 'Diaktifkan', + 'settings.autocomplete.completionStyle.maxChars': 'Maks Karakter', + 'settings.autocomplete.completionStyle.noHistory': + 'Belum ada pelengkapan yang diterima. Terima saran dengan Tab untuk mulai mempersonalisasi.', + 'settings.autocomplete.completionStyle.overlayTtl': 'TTL Overlay (ms)', + 'settings.autocomplete.completionStyle.personalizationHistory': 'Riwayat Personalisasi', + 'settings.autocomplete.completionStyle.styleExamples': 'Contoh Gaya (satu per baris)', + 'settings.autocomplete.completionStyle.styleInstructions': 'Instruksi Gaya', + 'settings.autocomplete.debug.acceptedPrefix': 'Diterima: {value}', + 'settings.autocomplete.debug.acceptFailed': 'Gagal menerima saran', + 'settings.autocomplete.debug.alreadyRunning': 'Pelengkapan otomatis sudah berjalan.', + 'settings.autocomplete.debug.clearHistoryFailed': 'Gagal menghapus riwayat', + 'settings.autocomplete.debug.didNotStart': 'Pelengkapan otomatis tidak dimulai.', + 'settings.autocomplete.debug.disabledInSettings': + 'Pelengkapan otomatis dinonaktifkan di pengaturan. Aktifkan dan simpan terlebih dahulu.', + 'settings.autocomplete.debug.fetchSuggestionFailed': 'Gagal mengambil saran saat ini', + 'settings.autocomplete.debug.inspectFocusedElementFailed': 'Gagal memeriksa elemen fokus', + 'settings.autocomplete.debug.loadSettingsFailed': 'Gagal memuat pengaturan pelengkapan otomatis', + 'settings.autocomplete.debug.noSuggestionApplied': 'Tidak ada saran yang diterapkan.', + 'settings.autocomplete.debug.noSuggestionReturned': 'Tidak ada saran yang dikembalikan.', + 'settings.autocomplete.debug.refreshStatusFailed': + 'Gagal menyegarkan status pelengkapan otomatis', + 'settings.autocomplete.debug.saveAdvancedSettingsFailed': 'Gagal menyimpan pengaturan lanjutan', + 'settings.autocomplete.debug.startFailed': 'Gagal memulai pelengkapan otomatis', + 'settings.autocomplete.debug.stopFailed': 'Gagal menghentikan pelengkapan otomatis', + 'settings.autocomplete.debug.suggestionPrefix': 'Saran: {value}', + 'settings.autocomplete.shared.none': 'Tidak ada', + 'settings.autocomplete.shared.notApplicable': 'n/a', + 'settings.autocomplete.shared.unknown': 'Tidak diketahui', + 'settings.billing.autoRecharge.addAmount': 'Tambahkan jumlah ini', + 'settings.billing.autoRecharge.addCard': 'Tambah kartu', + 'settings.billing.autoRecharge.amountHint': 'Petunjuk jumlah', + 'settings.billing.autoRecharge.defaultCard': 'Kartu default', + 'settings.billing.autoRecharge.lastRechargeFailed': 'Isi ulang terakhir gagal', + 'settings.billing.autoRecharge.lastRecharged': 'Terakhir diisi ulang', + 'settings.billing.autoRecharge.expires': 'Kedaluwarsa {date}', + 'settings.billing.autoRecharge.noCards': 'Tidak ada kartu', + 'settings.billing.autoRecharge.paymentMethods': 'Metode Pembayaran', + 'settings.billing.autoRecharge.rechargeInProgress': 'Isi ulang sedang berlangsung', + 'settings.billing.autoRecharge.spentThisWeek': '${spent} dari ${limit} digunakan minggu ini', + 'settings.billing.autoRecharge.rechargeWhen': 'Isi ulang saat saldo turun di bawah', + 'settings.billing.autoRecharge.saveSettings': 'Menyimpan...', + 'settings.billing.autoRecharge.saving': 'Menyimpan...', + 'settings.billing.autoRecharge.setDefault': ':', + 'settings.billing.autoRecharge.subtitle': 'Subjudul', + 'settings.billing.autoRecharge.title': 'Aktifkan Isi Ulang Otomatis', + 'settings.billing.autoRecharge.toggleAriaLabel': 'Alihkan isi ulang otomatis', + 'settings.billing.autoRecharge.weeklyLimit': 'Batas pengeluaran mingguan', + 'settings.billing.history.desc': 'Deskripsi', + 'settings.billing.history.empty': 'Kosong', + 'settings.billing.history.openPortal': 'Buka portal', + 'settings.billing.history.posted': 'Diposting', + 'settings.billing.history.title': 'Judul', + 'settings.billing.inferenceBudget.cycleEnds': 'Siklus berakhir', + 'settings.billing.inferenceBudget.exhausted': 'Habis', + 'settings.billing.inferenceBudget.loadError': 'Error memuat', + 'settings.billing.inferenceBudget.noBudgetDesc': 'Deskripsi tidak ada budget', + 'settings.billing.inferenceBudget.noRecurringBudget': 'Tidak ada budget berulang', + 'settings.billing.inferenceBudget.noRecurringPlanBudget': 'Tidak ada anggaran paket berulang', + 'settings.billing.inferenceBudget.noRecurringWeeklyDesc': + 'Rencana Anda saat ini tidak termasuk anggaran inferensi mingguan berulang. Penggunaan dibayar dari kredit yang tersedia sebagai gantinya.', + 'settings.billing.inferenceBudget.remaining': 'Tersisa', + 'settings.billing.inferenceBudget.remainingSummary': '{remaining} / {budget} tersisa', + 'settings.billing.inferenceBudget.spentThisCycle': 'Menghabiskan {amount} siklus ini', + 'settings.billing.inferenceBudget.cycleEndsOn': 'Siklus berakhir {date}', + 'settings.billing.inferenceBudget.exhaustedDesc': + 'Penggunaan langganan disertakan habis. Atas kredit untuk terus menggunakan AI tanpa menunggu siklus berikutnya.', + 'settings.billing.inferenceBudget.discountVsPayg': + '{pct}% lebih murah setiap panggilan daripada gaji-as-you-go.', + 'settings.billing.inferenceBudget.cycleSpend': 'Pembelanjaan siklus', + 'settings.billing.inferenceBudget.totalAmount': 'Total {amount}', + 'settings.billing.inferenceBudget.inference': 'Inferensi', + 'settings.billing.inferenceBudget.integrations': 'Integrasi', + 'settings.billing.inferenceBudget.calls': '{count} panggilan', + 'settings.billing.inferenceBudget.dailySpend': 'Pembelanjaan harian', + 'settings.billing.inferenceBudget.dailySpendPoint': '{date}: {amount}', + 'settings.billing.inferenceBudget.topModels': 'Model teratas', + 'settings.billing.inferenceBudget.noInferenceUsage': + 'Tidak ada penggunaan kesimpulan siklus ini.', + 'settings.billing.inferenceBudget.topIntegrations': 'Integrasi teratas', + 'settings.billing.inferenceBudget.noIntegrationUsage': + 'Tidak ada penggunaan integrasi siklus ini.', + 'settings.billing.inferenceBudget.tenHourCap': 'Batas sepuluh jam', + 'settings.billing.inferenceBudget.title': 'Judul', + 'settings.billing.inferenceBudget.unableToLoad': 'Tidak dapat memuat data penggunaan', + 'settings.billing.inferenceBudget.notAvailable': 'n/a', + 'settings.billing.payAsYouGo.available': 'Tersedia', + 'settings.billing.payAsYouGo.chargeCustomAmount': 'Membuka...', + 'settings.billing.payAsYouGo.chooseTopUpDesc': 'Deskripsi pilih isi ulang', + 'settings.billing.payAsYouGo.chooseTopUpTitle': 'Judul pilih isi ulang', + 'settings.billing.payAsYouGo.creditBalanceDesc': 'Deskripsi saldo kredit', + 'settings.billing.payAsYouGo.creditBalanceTitle': 'Judul saldo kredit', + 'settings.billing.payAsYouGo.customAmount': 'Jumlah kustom', + 'settings.billing.payAsYouGo.enterAmount': 'Masukkan jumlah', + 'settings.billing.payAsYouGo.opening': 'Membuka', + 'settings.billing.payAsYouGo.promotionalCredits': 'Kredit Promosi', + 'settings.billing.payAsYouGo.topUpBalance': 'Isi Ulang Saldo', + 'settings.billing.payAsYouGo.topUpCredits': 'Isi Ulang Kredit', + 'settings.billing.payAsYouGo.unableToLoad': 'Tidak dapat memuat saldo.', + 'settings.billing.subscription.annual': 'Tahunan', + 'settings.billing.subscription.billedAnnually': 'Ditagih tahunan', + 'settings.billing.subscription.chooseSubtitle': 'Subtitle pilih', + 'settings.billing.subscription.chooseTitle': 'Judul pilih', + 'settings.billing.subscription.cryptoDesc': 'Deskripsi crypto', + 'settings.billing.subscription.cryptoQuestion': 'Pertanyaan crypto', + 'settings.billing.subscription.current': 'Saat ini', + 'settings.billing.subscription.currentPlan': 'Paket saat ini', + 'settings.billing.subscription.monthly': 'Bulanan', + 'settings.billing.subscription.paymentConfirmed': 'Pembayaran dikonfirmasi', + 'settings.billing.subscription.perMonth': 'Per bulan', + 'settings.billing.subscription.popular': 'Populer', + 'settings.billing.subscription.save': '{pct}', + 'settings.billing.subscription.upgrade': 'Tingkatkan', + 'settings.billing.subscription.waiting': 'Menunggu', + 'settings.billing.subscription.waitingPayment': 'Menunggu pembayaran', + 'settings.composio.apiKeyDesc': 'API key Composio saat ini tersimpan di perangkat ini.', + 'settings.composio.apiKeyExamplePlaceholder': 'ck_live_xxxxxxxxxxxxxxxx', + 'settings.composio.apiKeyLabel': 'API key Composio', + 'settings.composio.apiKeyStored': 'API key tersimpan', + 'settings.composio.apiKeyStoredPlaceholder': 'Ini dia.', + 'settings.composio.clearedToBackend': 'Beralih ke mode Backend', + 'settings.composio.confirmItem1': 'Akun di app.composio.dev dengan API key', + 'settings.composio.confirmItem2': + 'Menghubungkan ulang setiap integrasi melalui akun Composio pribadi Anda', + 'settings.composio.confirmItem3': + 'Catatan: trigger Composio (webhook real-time) belum berjalan di mode Direct — hanya pemanggilan tool sinkron', + 'settings.composio.confirmNeedItems': 'Anda akan butuh:', + 'settings.composio.confirmSwitch': 'Saya mengerti, beralih ke Direct', + 'settings.composio.confirmTitle': '⚠️ Beralih ke mode Direct', + 'settings.composio.confirmWarning': + 'Integrasi Anda yang sudah ada (Gmail, Slack, GitHub, dll. yang terhubung melalui OpenHuman) tidak akan terlihat — mereka berada di tenant Composio yang dikelola OpenHuman.', + 'settings.composio.intro': + 'Composio mengintegrasikan 250+ aplikasi eksternal sebagai tool yang dapat dipanggil agen Anda. Pilih cara pemanggilan tool tersebut dirutekan.', + 'settings.composio.title': 'Composio', + 'settings.composio.modeDirect': 'Langsung (bawa API key Anda sendiri)', + 'settings.composio.modeDirectDesc': + 'Panggilan langsung ke backend.composio.dev. Berdaulat / ramah offline. Eksekusi tool berjalan sinkron; webhook trigger real-time belum dirutekan dalam mode direct (isu lanjutan).', + 'settings.composio.modeManaged': 'Terkelola (OpenHuman menanganinya untuk Anda)', + 'settings.composio.modeManagedDesc': + 'OpenHuman mem-proxy pemanggilan tool melalui backend kami (disarankan). Autentikasi dibrokerkan; Anda tidak perlu menempel API key Composio. Webhook dirutekan sepenuhnya.', + 'settings.composio.routingMode': 'Mode routing', + 'settings.composio.saveErrorNoKey': + 'Gagal menyimpan. Mode Direct memerlukan API key yang tidak kosong.', + 'settings.composio.saving': 'Menyimpan...', + 'settings.composio.switching': 'Mengalihkan…', + 'settings.companion.title': 'Perusahaan Desktop', + 'settings.companion.session': 'Sesi', + 'settings.companion.activeLabel': 'Aktif', + 'settings.companion.inactiveStatus': 'Tidak aktif', + 'settings.companion.stopping': 'Berhenti…', + 'settings.companion.stopSession': 'Hentikan Sesi', + 'settings.companion.starting': 'Mulai…', + 'settings.companion.startSession': 'Mulai Sesi', + 'settings.companion.sessionId': 'ID Sesi', + 'settings.companion.turns': 'Putaran', + 'settings.companion.remaining': 'Tersisa', + 'settings.companion.configuration': 'Konfigurasi', + 'settings.companion.hotkey': 'Tombol Pintas', + 'settings.companion.activationMode': 'Mode Aktivasi', + 'settings.companion.sessionTtl': 'Sesi TTL', + 'settings.companion.screenCapture': 'Tangkapan Layar', + 'settings.companion.appContext': 'Konteks Aplikasi', + 'settings.cron.jobs.desc': 'Deskripsi', + 'settings.cron.jobs.empty': 'Tidak ada cron job core ditemukan.', + 'settings.cron.jobs.lastStatus': 'Status terakhir', + 'settings.cron.jobs.loading': 'Memuat cron job...', + 'settings.cron.jobs.loadingRuns': 'Memuat run', + 'settings.cron.jobs.nextRun': 'Jalan berikutnya', + 'settings.cron.jobs.pause': 'Jeda', + 'settings.cron.jobs.paused': 'Dijeda', + 'settings.cron.jobs.recentRuns': 'Jalan terbaru', + 'settings.cron.jobs.removing': 'Menghapus', + 'settings.cron.jobs.resume': 'Lanjutkan', + 'settings.cron.jobs.runningNow': 'Sedang berjalan', + 'settings.cron.jobs.saving': 'Menyimpan...', + 'settings.cron.jobs.schedule': 'Jadwal', + 'settings.cron.jobs.title': 'Cron Job Core', + 'settings.cron.jobs.viewRuns': 'Lihat run', + 'settings.localModel.deviceCapability.active': 'Aktif', + 'settings.localModel.deviceCapability.appliedTier': 'Tingkat yang diterapkan', + 'settings.localModel.deviceCapability.applying': 'Menerapkan', + 'settings.localModel.deviceCapability.cores': '{count}', + 'settings.localModel.deviceCapability.couldNotLoadPresets': 'Tidak dapat memuat preset', + 'settings.localModel.deviceCapability.cpu': 'CPU', + 'settings.localModel.deviceCapability.customModelIds': 'ID model kustom', + 'settings.localModel.deviceCapability.detected': 'Terdeteksi', + 'settings.localModel.deviceCapability.disabled': 'Dinonaktifkan', + 'settings.localModel.deviceCapability.disabledDesc': 'Deskripsi dinonaktifkan', + 'settings.localModel.deviceCapability.downloadingModels': '(mengunduh model)', + 'settings.localModel.deviceCapability.downloadingSetupDesc': + 'Mengunduh penginstal OllamaSetup (~2 GB) dan membongkarnya. Ini mungkin memerlukan beberapa waktu pada pemasangan pertama.', + 'settings.localModel.deviceCapability.failedToApplyPreset': 'Gagal menerapkan preset', + 'settings.localModel.deviceCapability.gpu': 'GPU', + 'settings.localModel.deviceCapability.installFailed': 'Instalasi Ollama gagal', + 'settings.localModel.deviceCapability.installFailedDesc': + 'Penginstal keluar sebelum Ollama dapat digunakan. Klik coba ulang, atau instal manual dari ollama.com.', + 'settings.localModel.deviceCapability.installFirst': 'Jalankan Ollama terlebih dahulu.', + 'settings.localModel.deviceCapability.installFirstDesc': + 'Tier lokal bergantung pada endpoint Ollama yang dikelola eksternal. Jalankan sendiri, tarik model yang Anda inginkan, dan tetap gunakan "Disabled (cloud fallback)" hingga runtime dapat dijangkau.', + 'settings.localModel.deviceCapability.installOllamaFirst': + 'Jalankan Ollama terlebih dahulu untuk menggunakan tier ini', + 'settings.localModel.deviceCapability.installingOllama': 'Menginstal Ollama', + 'settings.localModel.deviceCapability.loadingDeviceInfo': 'Memuat info perangkat', + 'settings.localModel.deviceCapability.localAiDisabled': + 'AI lokal dinonaktifkan — menggunakan fallback cloud.', + 'settings.localModel.deviceCapability.modelTier': 'Tingkat Model', + 'settings.localModel.deviceCapability.needsOllama': 'Memerlukan Ollama', + 'settings.localModel.deviceCapability.notDetected': 'Tidak terdeteksi', + 'settings.localModel.deviceCapability.disabledLowercase': 'dinonaktifkan', + 'settings.localModel.deviceCapability.presetDetails': + 'Obrolan: {chatModel} · Penglihatan: {visionModel} · Target RAM: {targetRamGb} GB', + 'settings.localModel.deviceCapability.ram': 'RAM', + 'settings.localModel.deviceCapability.recommended': 'Direkomendasikan', + 'settings.localModel.deviceCapability.retryInstall': 'Mencoba ulang...', + 'settings.localModel.deviceCapability.retrying': 'Mencoba ulang...', + 'settings.localModel.deviceCapability.starting': 'Memulai...', + 'settings.localModel.download.audioPathPlaceholder': 'Path absolut ke file audio', + 'settings.localModel.download.capabilityChat': 'Obrolan', + 'settings.localModel.download.capabilityEmbedding': 'Penyematan', + 'settings.localModel.download.capabilityAssets': 'Aset Kemampuan', + 'settings.localModel.download.capabilityStt': 'STT', + 'settings.localModel.download.capabilityTts': 'TTS', + 'settings.localModel.download.capabilityVision': 'Penglihatan', + 'settings.localModel.download.downloading': 'Mengunduh...', + 'settings.localModel.download.embeddingDimensions': 'Dimensi: {dimensions}', + 'settings.localModel.download.embeddingModel': 'Model: {modelId}', + 'settings.localModel.download.embeddingPlaceholder': 'Satu string input per baris...', + 'settings.localModel.download.embeddingVectors': 'Vektor: {count}', + 'settings.localModel.download.noThinkMode': 'Mode tanpa berpikir', + 'settings.localModel.download.notAvailable': 't/a', + 'settings.localModel.download.promptPlaceholder': + 'Ketik prompt apa saja dan jalankan terhadap model lokal...', + 'settings.localModel.download.quantizationPref': 'Preferensi kuantisasi', + 'settings.localModel.download.runEmbeddingTest': 'Menjalankan...', + 'settings.localModel.download.runPromptTest': 'Jalankan Uji Prompt', + 'settings.localModel.download.runSummaryTest': 'Jalankan Uji Ringkasan', + 'settings.localModel.download.runTranscriptionTest': 'Menjalankan...', + 'settings.localModel.download.runTtsTest': 'Menjalankan...', + 'settings.localModel.download.runVisionTest': 'Menjalankan...', + 'settings.localModel.download.running': 'Menjalankan...', + 'settings.localModel.download.runningPrompt': 'Menjalankan prompt', + 'settings.localModel.download.summaryHelper': + 'Panggilan `openhuman.inference_summarize` melalui Rust core', + 'settings.localModel.download.summarizePlaceholder': + 'Tempel teks untuk diringkas dengan model lokal...', + 'settings.localModel.download.testCustomPrompt': 'Tes Prompt Kustom', + 'settings.localModel.download.testEmbeddings': 'Tes Embedding', + 'settings.localModel.download.testSummarization': 'Tes Ringkasan', + 'settings.localModel.download.testVisionPrompt': 'Tes Prompt Visi', + 'settings.localModel.download.testVoiceInput': 'Tes Input Suara (STT)', + 'settings.localModel.download.testVoiceOutput': 'Tes Output Suara (TTS)', + 'settings.localModel.download.transcript': 'Transkrip:', + 'settings.localModel.download.ttsOutput': 'Keluaran: {outputPath}', + 'settings.localModel.download.ttsOutputPlaceholder': 'Path WAV output opsional', + 'settings.localModel.download.ttsPlaceholder': 'Masukkan teks untuk disintesis...', + 'settings.localModel.download.ttsVoice': 'Suara: {voiceId}', + 'settings.localModel.download.visionImagePlaceholder': + 'Satu referensi gambar per baris (data URI, URL, atau penanda path lokal)', + 'settings.localModel.download.visionPromptPlaceholder': 'Masukkan prompt untuk model visi...', + 'settings.localModel.status.allChecksPassed': 'Semua pemeriksaan berhasil', + 'settings.localModel.status.artifact': 'Artefak', + 'settings.localModel.status.backend': 'Bagian Belakang', + 'settings.localModel.status.binary': 'Biner', + 'settings.localModel.status.bootstrapResume': 'Bootstrap / Lanjutkan', + 'settings.localModel.status.checking': 'Memeriksa...', + 'settings.localModel.status.checkingOllama': 'Memeriksa Ollama', + 'settings.localModel.status.contextBelowMinimumBadge': + '{contextLength} ctx - di bawah {required} mnt', + 'settings.localModel.status.contextBelowMinimumTitle': + 'Ditolak: jendela konteks {contextLength} token berada di bawah minimum {required}-token yang diperlukan lapisan memori. Penarikan kembali akan dirusak oleh pemotongan diam-diam.', + 'settings.localModel.status.contextOkBadge': '{contextLength} KTX', + 'settings.localModel.status.contextOkTitle': + 'Jendela konteks {contextLength} token memenuhi minimum lapisan memori {required} token.', + 'settings.localModel.status.contextUnknownBadge': 'ctx tidak diketahui', + 'settings.localModel.status.contextUnknownTitle': + 'Jendela konteks tidak diketahui; tidak dapat mengonfirmasi bahwa itu memenuhi minimum lapisan memori {required}-token.', + 'settings.localModel.status.customLocation': 'Lokasi kustom', + 'settings.localModel.status.customLocationDesc': 'Deskripsi lokasi kustom', + 'settings.localModel.status.diagnosticsHint': + 'Klik "Run Diagnostics" untuk memverifikasi Ollama berjalan dan model telah terinstal.', + 'settings.localModel.status.downloadingUnknown': 'Mengunduh (ukuran tidak diketahui)', + 'settings.localModel.status.eta': 'ETA', + 'settings.localModel.status.expectedModels': 'Model yang diharapkan', + 'settings.localModel.status.expectedChat': 'Obrolan: {model}', + 'settings.localModel.status.expectedEmbedding': 'Penyematan: {model}', + 'settings.localModel.status.expectedVision': 'Visi: {model}', + 'settings.localModel.status.externalProcess': 'Proses eksternal', + 'settings.localModel.status.forceRebootstrap': 'Paksa Re-bootstrap', + 'settings.localModel.status.generationTps': 'TPS Generasi', + 'settings.localModel.status.hideErrorDetails': 'Sembunyikan detail error', + 'settings.localModel.status.installManually': 'Instal manual', + 'settings.localModel.status.installManuallyFrom': 'Instal manual dari', + 'settings.localModel.status.installOllama': 'Memulai...', + 'settings.localModel.status.installedModels': 'Model terinstal', + 'settings.localModel.status.installing': 'Menginstal...', + 'settings.localModel.status.installingOllama': 'Menginstal runtime Ollama...', + 'settings.localModel.status.issues': 'Masalah', + 'settings.localModel.status.issuesFound': '{count} masalah ditemukan', + 'settings.localModel.status.lastLatency': 'Latensi Terakhir', + 'settings.localModel.status.model': 'Model AI', + 'settings.localModel.status.notAvailable': 't/a', + 'settings.localModel.status.notFound': 'Tidak ditemukan', + 'settings.localModel.status.notRunning': 'Tidak berjalan', + 'settings.localModel.status.ollamaBinaryPath': 'Path biner Ollama', + 'localModel.ollamaServer.helperText': 'Contoh: http://192.168.1.5:11434', + 'localModel.ollamaServer.label': 'URL Server Ollama', + 'localModel.ollamaServer.modelCount': 'model', + 'localModel.ollamaServer.placeholder': 'http://localhost:11434', + 'localModel.ollamaServer.reachable': 'Dapat Dijangkau', + 'localModel.ollamaServer.resetButton': 'Setel Ulang ke Default', + 'localModel.ollamaServer.saveButton': 'Simpan', + 'localModel.ollamaServer.testButton': 'Uji Koneksi', + 'localModel.ollamaServer.unreachable': 'Tidak Dapat Dijangkau', + 'localModel.ollamaServer.validationError': 'Harus berupa URL http:// atau https:// yang valid', + 'settings.localModel.status.ollamaDiagnostics': 'Diagnostik Ollama', + 'settings.localModel.status.ollamaNotInstalled': 'Runtime Ollama tidak tersedia', + 'settings.localModel.status.ollamaNotInstalledDesc': + 'OpenHuman kini memperlakukan Ollama sebagai runtime inferensi eksternal. Jalankan server Ollama Anda sendiri, tarik model yang diinginkan, lalu arahkan routing workload ke sana.', + 'settings.localModel.status.progress': 'Progres', + 'settings.localModel.status.provider': 'Penyedia', + 'settings.localModel.status.retryBootstrap': 'Coba Ulang Bootstrap', + 'settings.localModel.status.runDiagnostics': 'Memeriksa...', + 'settings.localModel.status.running': 'Berjalan', + 'settings.localModel.status.runningExternalProcess': 'Berjalan via proses eksternal', + 'settings.localModel.status.runtimeStatus': 'Status Runtime', + 'settings.localModel.status.server': 'Server', + 'settings.localModel.status.setPath': 'Mengatur...', + 'settings.localModel.status.setting': 'Mengatur...', + 'settings.localModel.status.showErrorDetails': 'Sembunyikan detail error', + 'settings.localModel.status.showInstallErrorDetails': 'Sembunyikan detail error', + 'settings.localModel.status.suggestedFixes': 'Perbaikan yang disarankan', + 'settings.localModel.status.thenSetPath': 'Lalu atur path', + 'settings.localModel.status.triggering': 'Memicu...', + 'settings.localModel.status.unavailable': 'Tidak tersedia', + 'settings.localModel.status.working': 'Memproses...', + 'settings.developerMenu.ai.title': 'Konfigurasi AI', + 'settings.developerMenu.ai.desc': + 'Penyedia cloud, model Ollama lokal, dan routing per beban kerja', + 'settings.developerMenu.screenAwareness.title': 'Kesadaran Layar', + 'settings.developerMenu.screenAwareness.desc': + 'Izin tangkapan layar, kebijakan pemantauan, dan kontrol sesi', + 'settings.developerMenu.messagingChannels.title': 'Kanal Pesan', + 'settings.developerMenu.messagingChannels.desc': + 'Atur mode autentikasi Telegram/Discord dan routing kanal default', + 'settings.developerMenu.tools.title': 'Alat', + 'settings.developerMenu.tools.desc': + 'Aktifkan atau nonaktifkan kemampuan yang bisa digunakan OpenHuman atas nama Anda', + 'settings.developerMenu.agentChat.title': 'Chat Agen', + 'settings.developerMenu.agentChat.desc': + 'Uji percakapan agen dengan override model dan temperatur', + 'settings.developerMenu.devWorkflow.title': 'Alur Kerja Dev', + 'settings.developerMenu.devWorkflow.desc': + 'Agen Autonomus yang mengambil isu GitHub-mu dan menaikkan PRs sesuai jadwal', + 'settings.developerMenu.devWorkflow.panelDesc': + 'Mengkonfigurasi agen pengembang otonom yang memilih isu GitHub yang ditugaskan kepada Anda dan menaikkan permintaan tarik secara otomatis sesuai jadwal.', + 'settings.developerMenu.skillsRunner.title': 'Pemandu Skill', + 'settings.developerMenu.skillsRunner.desc': + 'Jalankan keterampilan bundled-hoc - mengisi masukan dan api latar belakang otonom run', + 'settings.developerMenu.skillsRunner.panelDesc': + 'Pilih keterampilan bundled, mengisi masukan yang dideklarasikan, dan api-dan-lupa menjalankan latar belakang. Gunakan Dev Workflow sebagai gantinya jika Anda ingin cron- dijadwalkan pekerjaan berulang.', + 'settings.skillsRunner.skill': 'Skill', + 'settings.skillsRunner.selectSkill': 'Pilih keterampilan...', + 'settings.skillsRunner.loadingSkills': 'Memuat keterampilan...', + 'settings.skillsRunner.loadingDescription': 'Memuat masukan keterampilan...', + 'settings.skillsRunner.noInputs': 'Keterampilan ini menyatakan tidak ada masukan.', + 'settings.skillsRunner.placeholder.required': 'required', + 'settings.skillsRunner.runNow': 'Lari sekarang', + 'settings.skillsRunner.starting': 'Mulai...', + 'settings.skillsRunner.started': 'Mulai - jalankan id:', + 'settings.skillsRunner.logPath': 'Log:', + 'settings.skillsRunner.error.listSkills': 'Gagal memuat keterampilan:', + 'settings.skillsRunner.error.describe': 'Gagal memuat masukan:', + 'settings.skillsRunner.error.missingRequired': 'Kehilangan masukan yang diperlukan:', + 'settings.skillsRunner.error.run': 'Jalankan gagal untuk dimulai:', + 'settings.skillsRunner.error.preflightGate': 'Gerbang prapenerbangan gagal', + 'settings.skillsRunner.schedule.heading': 'Jadwal (berulang)', + 'settings.skillsRunner.schedule.help': + 'Simpan keterampilan ini + masukan sebagai tugas berulang cron. Agen akan memanggil run-skill di setiap tick.', + 'settings.skillsRunner.schedule.frequency': 'Frekuensi', + 'settings.skillsRunner.schedule.every30min': 'Setiap 30 menit', + 'settings.skillsRunner.schedule.everyHour': 'Setiap jam', + 'settings.skillsRunner.schedule.every2hours': 'Setiap 2 jam', + 'settings.skillsRunner.schedule.every6hours': 'Setiap 6 jam', + 'settings.skillsRunner.schedule.onceDaily': 'Setiap hari (9: 00)', + 'settings.skillsRunner.schedule.save': 'Simpan jadwal', + 'settings.skillsRunner.schedule.saving': 'Menyimpan...', + 'settings.skillsRunner.schedule.saved': 'Jadwal disimpan.', + 'settings.skillsRunner.schedule.error': 'Pengiriman jadwal gagal:', + 'settings.skillsRunner.schedule.loadingJobs': 'Memuat jadwal yang ada...', + 'settings.skillsRunner.schedule.noJobs': + 'Tidak ada jadwal yang disimpan untuk keterampilan ini belum.', + 'settings.skillsRunner.schedule.existing': 'Tugas yang dijadwalkan untuk keterampilan ini:', + 'settings.skillsRunner.schedule.runNow': 'Lari', + 'settings.skillsRunner.schedule.remove': 'Hapus', + 'settings.skillsRunner.scheduleEnabled': 'Diaktifkan', + 'settings.skillsRunner.scheduleDisabled': 'Dijeda', + 'settings.skillsRunner.scheduleToggleAria': 'Jungkitkan jadwal diaktifkan', + 'settings.skillsRunner.schedule.history': 'Riwayat', + 'settings.skillsRunner.schedule.historyLoading': 'Memuat riwayat...', + 'settings.skillsRunner.schedule.historyEmpty': 'Belum ada jadwal untuk ini.', + 'settings.skillsRunner.schedule.historyNoOutput': 'Tidak ada keluaran yang ditangkap.', + 'settings.skillsRunner.schedule.active': 'Aktif', + 'settings.skillsRunner.schedule.lastRunLabel': 'terakhir:', + 'settings.skillsRunner.recentRuns.headingForSkill': + 'Berjalan baru-baru ini untuk keterampilan ini', + 'settings.skillsRunner.recentRuns.headingAll': 'Keterampilan terbaru (semua)', + 'settings.skillsRunner.recentRuns.refresh': 'Segarkan', + 'settings.skillsRunner.recentRuns.loading': 'Memuat run baru-baru ini...', + 'settings.skillsRunner.recentRuns.empty': 'Tidak berjalan baru-baru ini.', + 'settings.skillsRunner.viewer.loading': 'Memuat log...', + 'settings.skillsRunner.viewer.tailing': 'Hidup tailing', + 'settings.skillsRunner.viewer.fetching': 'fetching', + 'settings.skillsRunner.viewer.error': 'Gagal membaca log:', + 'settings.skillsRunner.repoPicker.loading': 'Memuat repositori...', + 'settings.skillsRunner.repoPicker.select': 'Pilih suatu repositori...', + 'settings.skillsRunner.repoPicker.empty': + 'Tidak ada repositori yang dikembalikan. Hubungkan GitHub melalui Composio untuk mengisi daftar ini.', + 'settings.skillsRunner.repoPicker.notConnected': + 'GitHub tidak terhubung melalui Composio. Sambungkan ke Skills Composio dulu.', + 'settings.skillsRunner.repoPicker.privateTag': '(privat)', + 'settings.skillsRunner.branchPicker.needRepo': 'Pilih repo dulu...', + 'settings.skillsRunner.branchPicker.loading': 'Memuat branch...', + 'settings.skillsRunner.branchPicker.select': 'Pilih suatu branch...', + 'settings.devWorkflow.githubRepository': 'Repositori GitHub', + 'settings.devWorkflow.loadingRepositories': 'Memuat repositori...', + 'settings.devWorkflow.selectRepository': 'Pilih suatu repositori', + 'settings.devWorkflow.privateTag': '(privat)', + 'settings.devWorkflow.detectingForkInfo': 'Mendeteksi info garpu...', + 'settings.devWorkflow.forkDetected': 'Fork terdeteksi', + 'settings.devWorkflow.upstream': 'Upstream:', + 'settings.devWorkflow.forkPrNote': 'PRS akan diangkat melawan repositori hulu.', + 'settings.devWorkflow.notForkNote': + 'Bukan garpu. PRs akan diangkat terhadap repositori ini secara langsung.', + 'settings.devWorkflow.targetBranch': 'Branch Target', + 'settings.devWorkflow.targetBranchNote': 'PRS akan diangkat melawan cabang ini', + 'settings.devWorkflow.loadingBranches': 'Memuat branch...', + 'settings.devWorkflow.runFrequency': 'Jalankan Frekuensi', + 'settings.devWorkflow.runFrequencyNote': + 'Seberapa sering agen harus memeriksa masalah dan meningkatkan PRS.', + 'settings.devWorkflow.updateConfiguration': 'Mutakhirkan Konfigurasi', + 'settings.devWorkflow.saveConfiguration': 'Simpan Konfigurasi', + 'settings.devWorkflow.remove': 'Hapus', + 'settings.devWorkflow.saved': 'Tersimpan', + 'settings.devWorkflow.activeConfiguration': 'Konfigurasi Aktif', + 'settings.devWorkflow.activeConfigRepository': 'Repositori:', + 'settings.devWorkflow.activeConfigUpstream': 'Upstream:', + 'settings.devWorkflow.activeConfigTargetBranch': 'Branch target:', + 'settings.devWorkflow.activeConfigSchedule': 'Jadwal:', + 'settings.devWorkflow.enabled': 'Diaktifkan', + 'settings.devWorkflow.paused': 'Dijeda', + 'settings.devWorkflow.nextRun': 'Jalankan berikutnya', + 'settings.devWorkflow.lastRun': 'Terakhir berjalan', + 'settings.devWorkflow.runNow': 'Lari sekarang', + 'settings.devWorkflow.running': 'Berjalan...', + 'settings.devWorkflow.recentRuns': 'Berjalan terkini', + 'settings.devWorkflow.cronSaveError': 'Gagal menyimpan konfigurasi', + 'settings.devWorkflow.lastOutput': 'Keluaran terakhir', + 'settings.devWorkflow.noOutput': 'Tak ada keluaran yang ditangkap', + 'settings.devWorkflow.runningStatus': + 'Agen berjalan - memilih masalah dan bekerja pada memperbaiki...', + 'settings.devWorkflow.errorNotConnected': + 'GitHub tidak terhubung. Mohon hubungkan GitHub melalui Settings > Advanced > Composio pertama.', + 'settings.devWorkflow.errorToolNotEnabled': + 'Alat GITHUB_LIST_REPOSITORIES_FOR_THE_AUTHENTICATED_USER tidak diaktifkan di backend ini. Mohon minta admin Anda untuk mengaktifkannya dalam integrasi Composio (backend#842).', + 'settings.devWorkflow.errorNotAuthenticated': 'Tidak dikonfirmasi. Silakan masuk dulu.', + 'settings.devWorkflow.errorNoRepositories': + 'Tidak ada repositori yang ditemukan untuk akun GitHub ini.', + 'settings.devWorkflow.schedule.every30min': 'Setiap 30 menit', + 'settings.devWorkflow.schedule.everyHour': 'Setiap jam', + 'settings.devWorkflow.schedule.every2hours': 'Setiap 2 jam', + 'settings.devWorkflow.schedule.every6hours': 'Setiap 6 jam', + 'settings.devWorkflow.schedule.onceDaily': 'Setiap hari (jam 9 pagi)', + 'settings.developerMenu.cronJobs.title': 'Pekerjaan Cron', + 'settings.developerMenu.cronJobs.desc': 'Lihat dan atur pekerjaan terjadwal untuk skill runtime', + 'settings.developerMenu.localModelDebug.title': 'Debug Model Lokal', + 'settings.developerMenu.localModelDebug.desc': + 'Konfigurasi Ollama, unduhan aset, pengujian model, dan diagnostik', + 'settings.developerMenu.webhooks.title': 'Webhook', + 'settings.developerMenu.webhooks.desc': + 'Periksa pendaftaran webhook runtime dan log permintaan yang tertangkap', + 'settings.developerMenu.eventLog.title': 'Log Peristiwa', + 'settings.developerMenu.eventLog.desc': + 'Siaran warna langsung dari semua agen, alat, dan peristiwa sistem', + 'settings.developerMenu.eventLog.allTypes': 'Semua jenis', + 'settings.developerMenu.eventLog.filterAgent': 'Filter...', + 'settings.developerMenu.eventLog.download': 'Unduh', + 'settings.developerMenu.eventLog.events': 'events', + 'settings.developerMenu.eventLog.live': 'Live', + 'settings.developerMenu.eventLog.disconnected': 'Terputus', + 'settings.developerMenu.eventLog.waiting': 'Menunggu peristiwa...', + 'settings.developerMenu.eventLog.notConnected': 'Tidak terhubung ke inti', + 'settings.developerMenu.eventLog.jumpToLatest': 'Lompat ke terbaru', + 'settings.developerMenu.eventLog.badge.tool': 'TOOL', + 'settings.developerMenu.eventLog.badge.agent': 'AGENT', + 'settings.developerMenu.eventLog.badge.info': 'INFO', + 'settings.developerMenu.eventLog.badge.mem': 'MEM', + 'settings.developerMenu.eventLog.badge.chan': 'CHAN', + 'settings.developerMenu.eventLog.badge.cron': 'CRON', + 'settings.developerMenu.eventLog.badge.hook': 'HOOK', + 'settings.developerMenu.eventLog.badge.warn': 'WARN', + 'settings.developerMenu.eventLog.badge.skill': 'SKILL', + 'settings.developerMenu.eventLog.badge.comp': 'COMP', + 'settings.developerMenu.eventLog.badge.mcp': 'MCP', + 'settings.developerMenu.intelligence.title': 'Kecerdasan', + 'settings.developerMenu.intelligence.desc': + 'Ruang kerja memori, mesin bawah sadar, mimpi, dan pengaturan', + 'settings.developerMenu.notificationRouting.title': 'Routing Notifikasi', + 'settings.developerMenu.notificationRouting.desc': + 'Penilaian kepentingan AI dan eskalasi orkestrator untuk peringatan integrasi', + 'settings.developerMenu.composeioTriggers.title': 'Pemicu ComposeIO', + 'settings.developerMenu.composeioTriggers.desc': 'Lihat riwayat pemicu ComposeIO dan arsip', + 'settings.developerMenu.composioRouting.title': 'Routing Composio (Mode Langsung)', + 'settings.developerMenu.composioRouting.desc': + 'Gunakan kunci API Composio Anda sendiri dan rutekan panggilan langsung ke backend.composio.dev', + 'settings.developerMenu.integrationTriggers.title': 'Pemicu Integrasi', + 'settings.developerMenu.integrationTriggers.desc': + 'Atur pengaturan triase AI untuk pemicu integrasi Composio', + 'settings.developerMenu.mcpServer.title': 'Server MCP', + 'settings.developerMenu.mcpServer.desc': + 'Konfigurasikan klien MCP eksternal untuk terhubung ke OpenHuman', + 'settings.developerMenu.autonomy.title': 'Otonomi agen', + 'settings.developerMenu.autonomy.desc': 'Batas laju aksi alat dan ambang keamanan', + 'settings.mcpServer.title': 'Server MCP', + 'settings.mcpServer.toolsSectionTitle': 'Alat yang tersedia', + 'settings.mcpServer.toolsSectionDesc': + 'Alat yang diekspos melalui server stdio MCP saat menjalankan openhuman-core mcp', + 'settings.mcpServer.configSectionTitle': 'Konfigurasi Klien', + 'settings.mcpServer.configSectionDesc': + 'Pilih klien MCP Anda untuk membuat cuplikan konfigurasi yang tepat', + 'settings.mcpServer.copySnippet': 'Salin ke Clipboard', + 'settings.mcpServer.copied': 'Tersalin!', + 'settings.mcpServer.openConfigFile': 'Buka File Konfigurasi', + 'settings.mcpServer.binaryPathNotFound': + 'Binary OpenHuman tidak ditemukan. Jika menjalankan dari source, build dengan: cargo build --bin openhuman-core', + 'settings.mcpServer.openConfigError': 'Gagal membuka file konfigurasi', + 'settings.mcpServer.clientClaudeDesktop': 'Claude Desktop', + 'settings.mcpServer.clientCursor': 'Kursor', + 'settings.mcpServer.clientCodex': 'Codex', + 'settings.mcpServer.clientZed': 'Zed', + 'settings.mcpServer.configFilePath': 'File konfigurasi', + 'settings.mcpServer.clientSelectorAriaLabel': 'Pemilih klien MCP', + 'settings.appearance.menuDesc': 'Pilih terang, gelap, atau ikuti tema sistem', + 'settings.agentAccess.title': 'Agen OS akses', + 'settings.agentAccess.menuDesc': + 'Kontrol di mana agen dapat read/write dan apakah dapat menggunakan shell.', + 'settings.agentAccess.loadError': 'Gagal memuat pengaturan akses', + 'settings.agentAccess.saveError': 'Gagal menyimpan pengaturan akses', + 'settings.agentAccess.saved': 'Tersimpan - berlaku pada pesan berikutnya.', + 'settings.agentAccess.desktopOnly': 'Pengaturan akses hanya tersedia pada aplikasi desktop.', + 'settings.agentAccess.loading': 'Memuat…', + 'settings.agentAccess.accessMode': 'Mode akses', + 'settings.agentAccess.tier.readonly.title': 'Baca saja', + 'settings.agentAccess.tier.readonly.desc': + 'Baca berkas dan jalankan baca-saja perintah untuk dieksplorasi - tetapi tidak pernah menulis, edits, atau menjalankan apapun yang mengubah keadaan.', + 'settings.agentAccess.tier.supervised.title': 'Tanyakan sebelum menyunting', + 'settings.agentAccess.tier.supervised.desc': + 'Membuat berkas baru dengan bebas, tapi meminta persetujuan Anda sebelum menyunting berkas yang ada, menjalankan perintah, mencapai jaringan, atau memasang apapun.', + 'settings.agentAccess.tier.full.title': 'Akses penuh', + 'settings.agentAccess.tier.full.desc': + 'Menjalankan perintah dengan akses penuh akun pengguna Anda - dapat read/write di mana saja diperbolehkan, kecuali kredensial dan sistem toko. Perintah penghancuran, akses jaringan, dan instalasi masih meminta persetujuan.', + 'settings.agentAccess.defaultTag': '(bawaan)', + 'settings.agentAccess.fullWarning': + 'Akses penuh menjalankan perintah dengan akses penuh akun Anda dan tidak sandboxed. Hanya mengaktifkannya ketika Anda mempercayai agen dengan mesin ini. Direktori kredensial dan sistem tetap diblokir, dan destruktif, jaringan, dan aksi instalasi masih meminta persetujuan.', + 'settings.agentAccess.confine.label': 'Confine ke area kerja', + 'settings.agentAccess.confine.desc': + 'Batasi agen ke direktori area kerja (ditambah folder yang diberikan), modus akses mana yang dipilih. Ketika mati, dapat mencapai mana saja pengguna dapat - kecuali selalu-diblokir kredensial dan sistem direktori.', + 'settings.agentAccess.requireTaskPlanApproval.label': 'Perlu persetujuan rencana tugas', + 'settings.agentAccess.requireTaskPlanApproval.desc': + 'Jeda sebelum agen yang ditugaskan mengeksekusi suatu tugas singkat.', + 'settings.agentAccess.grantedFolders': 'Folder yang diberikan', + 'settings.agentAccess.alwaysAllow': 'Selalu-diperbolehkan alat', + 'settings.agentAccess.alwaysAllowDesc': + 'Perkakas yang Anda tandai "Always allow" dalam run percakapan tanpa bertanya. Hapus satu yang akan diminta lagi.', + 'settings.agentAccess.alwaysAllowNone': 'Belum ada alat yang diperbolehkan.', + 'settings.agentAccess.grantedDesc': + 'Folder agen dapat membaca dan menulis, selain ke ruang kerja. Toko Credential (~/.ssh, ~/.gnupg, ~/.aws,) dan direktori kunci sistem (/etc, /System,:\\ Windows,...) selalu diblokir, bahkan di dalam folder yang diberikan.', + 'settings.agentAccess.noneGranted': 'Tidak ada folder yang diberikan.', + 'settings.agentAccess.readWrite': 'baca + tulis', + 'settings.agentAccess.readOnly': 'read-only', + 'settings.agentAccess.remove': 'Hapus', + 'settings.agentAccess.pathPlaceholder': 'Jalur folder absolut', + 'settings.agentAccess.accessLevelLabel': 'Aras akses', + 'settings.agentAccess.add': 'Tambah', + 'settings.agentAccess.saving': 'Menyimpan...', + 'settings.agentAccess.changesApply': 'Perubahan pada pesan berikutnya.', + 'settings.appearance.title': 'Tampilan', + 'settings.appearance.themeHeading': 'Tema', + 'settings.appearance.themeAria': 'Tema', + 'settings.appearance.modeLight': 'Terang', + 'settings.appearance.modeLightDesc': 'Permukaan terang, teks gelap.', + 'settings.appearance.modeDark': 'Gelap', + 'settings.appearance.modeDarkDesc': 'Permukaan redup, lebih nyaman untuk malam hari.', + 'settings.appearance.modeSystem': 'Ikuti sistem', + 'settings.appearance.modeSystemDesc': 'Ikuti pengaturan tampilan OS Anda.', + 'settings.appearance.helperText': + 'Mode gelap mengubah seluruh aplikasi - obrolan, pengaturan, dan panel - ke palet redup. "Ikuti sistem" mengikuti tampilan OS Anda dan diperbarui otomatis.', + 'settings.appearance.tabBarHeading': 'Bilah tab bawah', + 'settings.appearance.tabBarAlwaysShowLabels': 'Selalu tampilkan label', + 'settings.appearance.tabBarAlwaysShowLabelsDesc': + 'Saat nonaktif, label hanya muncul saat diarahkan atau untuk tab yang aktif.', + 'settings.mascot.active': 'Aktif', + 'settings.mascot.characterDesc': 'Deskripsi karakter', + 'settings.mascot.characterHeading': 'Judul karakter', + 'settings.mascot.customGifError': + 'Masukkan HTTPS .gif URL, loopback HTTP .gif URL, file:// .gif URL, atau jalur .gif lokal.', + 'settings.mascot.customGifHeading': 'Avatar GIF khusus', + 'settings.mascot.customGifLabel': 'Avatar GIF khusus URL', + 'settings.mascot.customGifPlaceholder': 'https://example.com/avatar.gif', + 'settings.mascot.characterPreview': 'Pratinjau', + 'settings.mascot.characterStates': 'status', + 'settings.mascot.characterVisemes': 'visem', + 'settings.mascot.colorAria': 'Warna OpenHuman', + 'settings.mascot.colorDesc': 'Deskripsi warna', + 'settings.mascot.colorHeading': 'Judul warna', + 'settings.mascot.colorBlack': 'Hitam', + 'settings.mascot.colorBurgundy': 'Burgundi', + 'settings.mascot.colorCustom': 'Kustom', + 'settings.mascot.colorNavy': 'Biru tua', + 'settings.mascot.primaryColor': 'Warna primer', + 'settings.mascot.secondaryColor': 'Warna sekunder', + 'settings.mascot.colorYellow': 'Kuning', + 'settings.mascot.libraryUnavailable': 'Library OpenHuman tidak tersedia', + 'settings.mascot.title': 'OpenHuman', + 'settings.mascot.loadingLibrary': 'Memuat perpustakaan OpenHuman...', + 'settings.mascot.loadDetailError': 'Tidak dapat memuat maskot.', + 'settings.mascot.loadLibraryError': 'Tidak dapat memuat perpustakaan maskot.', + 'settings.mascot.localDefault': 'OpenHuman Lokal (default)', + 'settings.mascot.menuTitle': 'Maskot', + 'settings.mascot.menuDesc': 'Pilih warna maskot yang digunakan di seluruh aplikasi', + 'settings.mascot.noCharacters': 'Belum ada karakter OpenHuman yang tersedia', + 'settings.mascot.noColorVariants': 'Tidak ada varian warna', + 'settings.mascot.voice.current': 'saat ini', + 'settings.mascot.voice.customDesc': + 'Temukan ID suara di api.elevenlabs.io/v1/voices atau dasbor ElevenLabs Anda. Hanya ID yang disimpan — kunci API Anda tetap di backend.', + 'settings.mascot.voice.customHeading': 'ID suara kustom', + 'settings.mascot.voice.customOption': 'Lainnya (tempel ID suara)…', + 'settings.mascot.voice.customPlaceholder': 'mis. 21m00Tcm4TlvDq8ikWAM', + 'settings.mascot.voice.desc': + 'Pilih suara ElevenLabs yang digunakan maskot untuk balasan lisan. Filter berdasarkan jenis kelamin, pilih dari daftar pilihan, tempel ID kustom, atau biarkan aplikasi memilih suara yang sesuai dengan bahasa antarmuka.', + 'settings.mascot.voice.genderFemale': 'Wanita', + 'settings.mascot.voice.genderHeading': 'Jenis kelamin suara', + 'settings.mascot.voice.genderMale': 'Pria', + 'settings.mascot.voice.heading': 'Suara', + 'settings.mascot.voice.preset': 'Pratinjau suara', + 'settings.mascot.voice.presetHeading': 'Pratinjau suara', + 'settings.mascot.voice.preview': 'Pratinjau suara', + 'settings.mascot.voice.previewError': 'Pratinjau suara gagal', + 'settings.mascot.voice.previewText': 'Halo, saya asisten Anda. Ini adalah pratinjau suara.', + 'settings.mascot.voice.previewing': 'Memuat pratinjau…', + 'settings.mascot.voice.reset': 'Atur ulang ke default', + 'settings.mascot.voice.useLocaleDefault': 'Cocokkan bahasa aplikasi', + 'settings.mascot.voice.useLocaleDefaultDesc': + 'Pilih otomatis suara untuk bahasa antarmuka saat ini.', + 'settings.persona.title': 'Persona', + 'settings.persona.menuTitle': 'Persona', + 'settings.persona.menuDesc': + 'Nama, kepribadian, avatar, dan suara - asisten Anda sebagai satu identitas', + 'settings.persona.identityHeading': 'Identitas', + 'settings.persona.identityDesc': + 'Sebuah nama tampilan dan deskripsi pendek untuk asisten Anda. Shown dalam aplikasi; tidak mengubah bagaimana asisten alasan.', + 'settings.persona.displayNameLabel': 'Tampilkan nama', + 'settings.persona.displayNamePlaceholder': 'Nova.', + 'settings.persona.descriptionLabel': 'Deskripsi', + 'settings.persona.descriptionPlaceholder': 'Misalnya A tenang, asisten ringkas untuk tim saya.', + 'settings.persona.soul.heading': 'Kepribadian (SOUL.md)', + 'settings.persona.soul.desc': + 'Kepribadian mendorong asisten mengikuti setiap percakapan. Tilikan disimpan ke area kerja Anda dan ambil efek pada jawaban berikutnya.', + 'settings.persona.soul.editorLabel': 'Isi SOUL.md', + 'settings.persona.soul.reset': 'Atur ulang ke default', + 'settings.persona.soul.usingDefault': 'Menggunakan baku bundled', + 'settings.persona.soul.loadError': 'Tidak dapat memuat SOUL.md', + 'settings.persona.soul.saveError': 'Tidak dapat menyimpan SOUL.md', + 'settings.persona.soul.resetError': 'Tidak dapat mereset SOUL.md', + 'settings.persona.appearanceHeading': 'Avatar & Suara', + 'settings.persona.appearanceDesc': + 'Warna Mascot, avatar GIF kustom, dan suara balasan dikonfigurasi dalam pengaturan Mascot.', + 'settings.persona.openMascotSettings': 'Buka pengaturan Mascot', + 'settings.memoryWindow.balanced.badge': 'Direkomendasikan', + 'settings.memoryWindow.balanced.hint': + 'Default yang masuk akal — kontinuitas yang baik tanpa membakar token tambahan di setiap run.', + 'settings.memoryWindow.balanced.label': 'Seimbang', + 'settings.memoryWindow.description': + 'Seberapa banyak konteks yang diingat OpenHuman dimasukkan ke setiap run agen baru. Jendela yang lebih besar terasa lebih sadar akan percakapan sebelumnya, tetapi menggunakan lebih banyak token — dan biaya lebih mahal — di setiap run.', + 'settings.memoryWindow.extended.badge': 'Lebih banyak konteks', + 'settings.memoryWindow.extended.hint': + 'Lebih banyak memori jangka panjang yang dimasukkan ke setiap run. Biaya token per giliran lebih tinggi.', + 'settings.memoryWindow.extended.label': 'Diperluas', + 'settings.memoryWindow.maximum.badge': 'Biaya tertinggi', + 'settings.memoryWindow.maximum.hint': + 'Jendela teraman terbesar. Kontinuitas terbaik, tagihan token per run jauh lebih tinggi.', + 'settings.memoryWindow.maximum.label': 'Maksimum', + 'settings.memoryWindow.minimal.badge': 'Termurah', + 'settings.memoryWindow.minimal.hint': + 'Jendela memori terkecil. Termurah, tercepat, kontinuitas paling sedikit antar run.', + 'settings.memoryWindow.minimal.label': 'Ringkas', + 'settings.memoryWindow.title': 'Jendela memori jangka panjang', + 'settings.modelHealth.title': 'Model Kesehatan', + 'settings.modelHealth.desc': + 'Kualitas permodel, tingkat halusinasi, dan perbandingan biaya di seluruh model aktif', + 'settings.modelHealth.allStatuses': 'Semua status', + 'settings.modelHealth.models': 'models', + 'settings.modelHealth.loading': 'Memuat data model...', + 'settings.modelHealth.empty': 'Tidak ada model yang terdaftar', + 'settings.modelHealth.col.model': 'Model AI', + 'settings.modelHealth.col.quality': 'Kualitas', + 'settings.modelHealth.col.halluc': 'Halluc. Laju', + 'settings.modelHealth.col.cost': 'Biaya / 1M keluar', + 'settings.modelHealth.col.agents': 'Agen', + 'settings.modelHealth.col.status': 'Status', + 'settings.modelHealth.badge.keep': 'Simpan', + 'settings.modelHealth.badge.replace': 'Ganti', + 'settings.modelHealth.badge.staging': 'Tes pencegah', + 'settings.modelHealth.badge.vision': 'Hanya visi', + 'settings.modelHealth.swap': 'Ganti?', + 'settings.modelHealth.modal.title': 'Ganti Model?', + 'settings.modelHealth.modal.hallucRate': 'Laju halusinasi', + 'settings.modelHealth.modal.cancel': 'Batal', + 'settings.modelHealth.modal.apply': 'Terapkan Penggantian', + 'settings.modelHealth.tag.cheaper': 'CHEAPER', + 'settings.modelHealth.tag.better': 'BETTER', + 'settings.screenIntel.permissions.accessibility': 'Aksesibilitas', + 'settings.screenIntel.permissions.grantHint': 'Petunjuk izin', + 'settings.screenIntel.permissions.inputMonitoring': 'Pemantauan Input', + 'settings.screenIntel.permissions.macosAppliesPrivacy': 'macOS menerapkan privasi', + 'settings.screenIntel.permissions.openInputMonitoring': 'Meminta...', + 'settings.screenIntel.permissions.refreshStatus': 'Menyegarkan...', + 'settings.screenIntel.permissions.refreshing': 'Menyegarkan...', + 'settings.screenIntel.permissions.requestAccessibility': 'Meminta...', + 'settings.screenIntel.permissions.requestScreenRecording': 'Meminta...', + 'settings.screenIntel.permissions.requesting': 'Meminta...', + 'settings.screenIntel.permissions.restartRefresh': 'Memulai ulang core...', + 'settings.screenIntel.permissions.restartingCore': 'Memulai ulang core...', + 'settings.screenIntel.permissions.screenRecording': 'Perekaman Layar', + 'settings.screenIntel.permissions.title': 'Izin', + 'skills.card.moreActions': 'Tindakan lainnya', + 'skills.channelIcon.discord': 'Discord', + 'skills.channelIcon.imessage': 'iMessage', + 'skills.channelIcon.telegram': 'Telegram', + 'skills.channelIcon.web': 'Web', + 'skills.channelIcon.yuanbao': 'Yuanbao', + 'skills.composio.poweredBy': 'Didukung oleh Composio', + 'skills.composio.staleStatusTitle': 'Koneksi menunjukkan status basi', + 'skills.create.allowedTools': 'Tool yang diizinkan', + 'skills.create.allowedToolsHelp': 'Dirender ke frontmatter SKILL.md sebagai', + 'skills.create.allowedToolsPlaceholder': 'node_exec, ambil', + 'skills.create.author': 'Penulis', + 'skills.create.authorPlaceholder': 'Nama Anda', + 'skills.create.commaSeparated': '(dipisahkan koma)', + 'skills.create.createBtn': 'Buat skill', + 'skills.create.createError': 'Tidak dapat membuat skill', + 'skills.create.creating': 'Membuat...', + 'skills.create.description': 'Deskripsi', + 'skills.create.descriptionPlaceholder': 'Apa fungsi skill ini?', + 'skills.create.optional': '(opsional)', + 'skills.create.inputs.heading': 'Inputs', + 'skills.create.inputs.help': + 'Deklarasikan parameter yang dibutuhkan skill. Skills Runner akan merender formulir untuk ini saat dijalankan.', + 'skills.create.inputs.add': 'Tambah input', + 'skills.create.inputs.row.name': 'Nama input', + 'skills.create.inputs.row.namePlaceholder': 'mis. repo', + 'skills.create.inputs.row.nameError': + 'Hanya huruf, angka, garis bawah, dan tanda hubung; harus diawali dengan huruf.', + 'skills.create.inputs.row.description': 'Deskripsi input', + 'skills.create.inputs.row.descriptionPlaceholder': 'Apa yang dimasukkan ke field ini?', + 'skills.create.inputs.row.type': 'Type', + 'skills.create.inputs.row.required': 'Required', + 'skills.create.inputs.row.remove': 'Hapus input', + 'skills.create.inputs.type.string': 'Text', + 'skills.create.inputs.type.integer': 'Number', + 'skills.create.inputs.type.boolean': 'Ya / Tidak', + 'skills.create.license': 'Lisensi', + 'skills.create.licensePlaceholder': 'MIT', + 'skills.create.name': 'Nama', + 'skills.create.namePlaceholder': 'mis. Jurnal Trading', + 'skills.create.scope': 'Cakupan', + 'skills.create.scopeProjectHint': '/.openhuman/skills/', + 'skills.create.scopeUserHint': + 'Ditulis ke ~/.openhuman/skills//SKILL.md — tersedia di semua workspace.', + 'skills.create.slugLabel': 'Label slug', + 'skills.create.subtitle': 'SKILL.md', + 'skills.create.tags': 'Tag', + 'skills.create.tagsPlaceholder': 'perdagangan, penelitian', + 'skills.create.title': 'Skill baru', + 'skills.detail.allowedTools': 'Alat yang diizinkan', + 'skills.detail.author': 'Penulis', + 'skills.detail.bundledResources': 'Sumber daya bundel', + 'skills.detail.closeAriaLabel': 'Tutup detail skill', + 'skills.detail.location': 'Lokasi', + 'skills.detail.noBundledResources': 'Tidak ada sumber daya bundel.', + 'skills.detail.tags': 'Tag', + 'skills.detail.warnings': 'Peringatan', + 'skills.install.errors.alreadyInstalledHint': + 'Keterampilan dengan siput ini sudah ada di ruang kerja. Hapus dulu atau ubah frontmatter `metadata.id` / `name`.', + 'skills.install.errors.alreadyInstalledTitle': 'Keterampilan sudah terpasang', + 'skills.install.errors.fetchFailedHint': + 'Permintaan tidak berhasil diselesaikan. Periksa poin URL pada file publik yang dapat dijangkau, dan host mengembalikan respons 2xx.', + 'skills.install.errors.fetchFailedTitle': 'Pengambilan gagal', + 'skills.install.errors.fetchTimedOutHint': + 'Host jarak jauh tidak merespons tepat waktu. Coba lagi atau tambah batas waktu (1-600 detik).', + 'skills.install.errors.fetchTimedOutTitle': 'Waktu pengambilan habis', + 'skills.install.errors.fetchTooLargeHint': + 'SKILL.md harus di bawah 1 MiB. Pisahkan sumber daya yang dibundel menjadi file `referensi/` atau `skrip/` alih-alih menyatukannya.', + 'skills.install.errors.fetchTooLargeTitle': 'SKILL.md terlalu besar', + 'skills.install.errors.genericHint': + 'Backend menghasilkan kesalahan. Pesan mentahnya ditunjukkan di bawah ini.', + 'skills.install.errors.genericTitle': 'Tidak dapat menginstal keterampilan', + 'skills.install.errors.invalidSkillHint': + 'Materi depan harus berupa YAML yang valid dengan kolom `nama` dan `deskripsi` yang tidak kosong, diakhiri dengan `---`.', + 'skills.install.errors.invalidSkillTitle': 'SKILL.md tidak diurai', + 'skills.install.errors.invalidUrlHint': + 'Hanya HTTPS URL publik yang diperbolehkan. Host pribadi, loopback, dan metadata diblokir.', + 'skills.install.errors.invalidUrlTitle': 'URL ditolak', + 'skills.install.errors.unsupportedUrlHint': + 'Hanya tautan `.md` langsung yang berfungsi. Untuk GitHub, tautan ke file (github.com/owner/repo/blob/.../SKILL.md) - akar pohon dan repo tidak diinstal.', + 'skills.install.errors.unsupportedUrlTitle': 'formulir URL tidak didukung', + 'skills.install.errors.writeFailedHint': + 'Direktori keterampilan ruang kerja tidak dapat ditulis. Periksa izin sistem file untuk `/.openhuman/skills/`.', + 'skills.install.errors.writeFailedTitle': 'Tidak dapat menulis SKILL.md', + 'skills.install.fetchLog': 'Ambil log', + 'skills.install.fetchingPrefix': 'Mengambil', + 'skills.install.fetchingSuffix': + 'ini dapat memakan waktu hingga batas waktu yang Anda konfigurasikan.', + 'skills.install.installBtn': 'Menginstal...', + 'skills.install.installComplete': 'Instalasi selesai', + 'skills.install.installing': 'Menginstal...', + 'skills.install.parseWarnings': 'Peringatan parse', + 'skills.install.rawError': 'Error mentah', + 'skills.install.subtitleMiddle': 'di atas HTTPS dan menginstalnya di bawah', + 'skills.install.subtitlePrefix': 'Hanya mengambil satu', + 'skills.install.subtitleSuffix': 'HTTPS; host pribadi dan loopback diblokir.', + 'skills.install.successDiscovered': 'Menemukan {count} keterampilan baru.', + 'skills.install.successNoNewIds': + 'Skill terpasang, tetapi tidak ada ID skill baru yang muncul - katalog mungkin sudah berisi skill dengan slug yang sama.', + 'skills.install.timeoutHint': '(detik, opsional)', + 'skills.install.timeoutHelp': + 'Defaultnya adalah 60 detik. Nilai di luar 1-600 dijepit di sisi server.', + 'skills.install.timeoutInvalid': 'Harus berupa bilangan bulat antara 1 dan 600.', + 'skills.install.timeoutLabel': 'Label waktu habis', + 'skills.install.timeoutPlaceholder': '60', + 'skills.install.title': 'Pasang skill dari URL', + 'skills.install.urlHelpMiddle': 'berkas.', + 'skills.install.urlHelpPrefix': 'Tautan langsung ke', + 'skills.install.urlHelpSuffix': 'URLs penulisan ulang otomatis ke', + 'skills.install.urlInvalidPrefix': 'URL harus berupa tautan', + 'skills.install.urlInvalidSuffix': 'yang dibuat dengan baik.', + 'skills.install.urlLabel': 'URL skill', + 'skills.install.urlPlaceholder': 'https://raw.githubusercontent.com/owner/repo/main/SKILL.md', + 'skills.meetingBots.bannerDesc': 'Deskripsi banner', + 'skills.meetingBots.bannerTitle': 'Judul banner', + 'skills.meetingBots.busyTitle': 'OpenHuman sedang sibuk', + 'skills.meetingBots.comingSoon': 'Segera hadir', + 'skills.meetingBots.couldNotStartTitle': 'Tidak bisa memulai OpenHuman', + 'skills.meetingBots.displayName': 'Nama tampilan', + 'skills.meetingBots.failedToStart': 'Gagal memulai OpenHuman.', + 'skills.meetingBots.joiningMessage': 'Seharusnya muncul sebagai peserta dalam beberapa detik.', + 'skills.meetingBots.joiningTitle': 'OpenHuman bergabung ke rapat', + 'skills.meetingBots.meetingLink': 'Tautan rapat', + 'skills.meetingBots.modalAriaLabel': 'Kirim OpenHuman ke rapat', + 'skills.meetingBots.modalDesc': 'Deskripsi modal', + 'skills.meetingBots.modalTitle': 'Kirim OpenHuman ke rapat', + 'skills.meetingBots.newBadge': 'Lencana baru', + 'skills.meetingBots.platformComingSoon': '{label} dukungan akan segera hadir.', + 'skills.meetingBots.platformHints.gmeet': 'meet.google.com/abc-defg-hij', + 'skills.meetingBots.platformHints.teams': 'team.microsoft.com/...', + 'skills.meetingBots.platformHints.zoom': 'zoom.us/j/...', + 'skills.meetingBots.platforms.gmeet': 'Google Temui', + 'skills.meetingBots.platforms.teams': 'Microsoft Teams', + 'skills.meetingBots.platforms.zoom': 'Zoom', + 'skills.meetingBots.sendTo': 'Kirim ke', + 'skills.meetingBots.soonSuffix': 'segera', + 'skills.meetingBots.starting': 'Memulai...', + 'skills.resource.preview.closeAriaLabel': 'Tutup pratinjau', + 'skills.resource.preview.failed': 'Pratinjau gagal', + 'skills.resource.preview.loading': 'Memuat pratinjau...', + 'skills.resource.tree.empty': 'Tidak ada sumber daya bundel.', + 'skills.search.placeholder': 'Teks placeholder', + 'skills.setup.autocomplete.acceptKey': 'Kunci terima', + 'skills.setup.autocomplete.activeDesc': 'Deskripsi aktif', + 'skills.setup.autocomplete.activeTitle': 'Auto-Complete Aktif', + 'skills.setup.autocomplete.customizeSettings': 'Sesuaikan pengaturan', + 'skills.setup.autocomplete.debounce': 'Tunda input', + 'skills.setup.autocomplete.description': 'Deskripsi', + 'skills.setup.autocomplete.enableBtn': 'Mengaktifkan...', + 'skills.setup.autocomplete.enableError': 'Gagal mengaktifkan pelengkap otomatis', + 'skills.setup.autocomplete.enabling': 'Mengaktifkan...', + 'skills.setup.autocomplete.notSupported': 'Tidak didukung', + 'skills.setup.autocomplete.stepEnable': 'Aktifkan pelengkap otomatis', + 'skills.setup.autocomplete.stepSuccess': 'Siap digunakan', + 'skills.setup.autocomplete.stylePreset': 'Preset gaya', + 'skills.setup.autocomplete.stylePresetValue': 'Seimbang (dapat dikonfigurasi nanti)', + 'skills.setup.autocomplete.title': 'Auto-Complete Teks', + 'skills.setup.screenIntel.activeDesc': 'Deskripsi aktif', + 'skills.setup.screenIntel.activeTitle': 'Kecerdasan Layar Diaktifkan', + 'skills.setup.screenIntel.advancedSettings': 'Pengaturan lanjutan', + 'skills.setup.screenIntel.allGranted': 'Semua izin diberikan', + 'skills.setup.screenIntel.captureMode': 'Mode tangkap', + 'skills.setup.screenIntel.captureModeValue': 'Semua jendela (dapat dikonfigurasi nanti)', + 'skills.setup.screenIntel.deniedHint': + 'Setelah memberikan izin di Pengaturan Sistem, klik di bawah untuk memulai ulang dan mengambil perubahan.', + 'skills.setup.screenIntel.enableBtn': 'Mengaktifkan...', + 'skills.setup.screenIntel.enableDesc': + 's di layar Anda dan memberikan konteks berguna ke agen Anda', + 'skills.setup.screenIntel.enableError': 'Gagal mengaktifkan Kecerdasan Layar', + 'skills.setup.screenIntel.enabling': 'Mengaktifkan...', + 'skills.setup.screenIntel.grant': 'Membuka...', + 'skills.setup.screenIntel.granted': 'Diberikan', + 'skills.setup.screenIntel.macosOnly': 'Hanya macOS', + 'skills.setup.screenIntel.opening': 'Membuka...', + 'skills.setup.screenIntel.panicHotkey': 'Hotkey panik', + 'skills.setup.screenIntel.permAccessibility': 'Aksesibilitas', + 'skills.setup.screenIntel.permInputMonitoring': 'Pemantauan Input', + 'skills.setup.screenIntel.permScreenRecording': 'Perekaman Layar', + 'skills.setup.screenIntel.permissionsDesc': 'Deskripsi izin', + 'skills.setup.screenIntel.permissionPathLabel': 'macOS menerapkan privasi ke:', + 'skills.setup.screenIntel.refreshStatus': 'Segarkan status', + 'skills.setup.screenIntel.restartRefresh': 'Memulai ulang...', + 'skills.setup.screenIntel.restarting': 'Memulai ulang...', + 'skills.setup.screenIntel.stepEnable': 'Aktifkan skill', + 'skills.setup.screenIntel.stepPermissions': 'Berikan izin', + 'skills.setup.screenIntel.stepSuccess': 'Siap digunakan', + 'skills.setup.screenIntel.title': 'Kecerdasan Layar', + 'skills.setup.screenIntel.visionModel': 'Model visi', + 'skills.setup.voice.activation': 'Aktivasi', + 'skills.setup.voice.activeDescPrefix': 'Fn', + 'skills.setup.voice.activeDescSuffix': 'Fn', + 'skills.setup.voice.activeTitle': 'Kecerdasan Suara Aktif', + 'skills.setup.voice.customizeSettings': 'Sesuaikan pengaturan', + 'skills.setup.voice.downloadSttBtn': 'Unduh tombol STT', + 'skills.setup.voice.enableDesc': 'Deskripsi aktifkan', + 'skills.setup.voice.hotkey': 'Pintasan', + 'skills.setup.voice.startBtn': 'Memulai...', + 'skills.setup.voice.startError': 'Gagal memulai server suara', + 'skills.setup.voice.starting': 'Memulai...', + 'skills.setup.voice.stepEnable': 'Mulai server suara', + 'skills.setup.voice.stepSetup': 'Unduhan model diperlukan', + 'skills.setup.voice.stepSuccess': 'Siap digunakan', + 'skills.setup.voice.sttNotReady': 'Model speech-to-text belum siap', + 'skills.setup.voice.sttNotReadyDesc': + 'Kecerdasan Suara memerlukan model Whisper lokal untuk transkripsi. Unduh dari pengaturan Model Lokal.', + 'skills.setup.voice.sttReady': 'Model speech-to-text siap', + 'skills.setup.voice.sttReturnHint': 'Petunjuk kembali STT', + 'skills.setup.voice.title': 'Kecerdasan Suara', + 'skills.uninstall.couldNotUninstall': 'Tidak bisa mencopot', + 'skills.uninstall.description': + 'Ini akan menghapus permanen direktori skill dan semua resource yang dibundel. Agen akan berhenti melihatnya pada giliran berikutnya.', + 'skills.uninstall.title': 'Copot', + 'skills.uninstall.uninstallBtn': 'Copot', + 'skills.uninstall.uninstalling': 'Mencopot…', + 'upsell.global.limitMessage': 'Upgrade paket atau isi ulang kredit untuk melanjutkan', + 'upsell.global.limitTitle': 'Anda', + 'upsell.global.nearLimitMessage': + 'Anda telah menggunakan {pct}% dari batas pemakaian. Upgrade untuk batas lebih tinggi.', + 'upsell.global.nearLimitTitle': 'Mendekati batas pemakaian', + 'upsell.usageLimit.bodyBudget': + 'Anda telah mencapai batas mingguan.{reset} Tingkatkan paket Anda atau isi ulang kredit untuk menghindari batas.', + 'upsell.usageLimit.bodyRate': + 'Anda telah mencapai batas laju inferensi 10 jam.{reset} Tingkatkan untuk batas yang lebih tinggi.', + 'upsell.usageLimit.heading': 'Batas Pemakaian Tercapai', + 'upsell.usageLimit.notNow': 'Tidak sekarang', + 'upsell.usageLimit.perWindow': '{amount}', + 'upsell.usageLimit.planIncludes': '{plan}', + 'upsell.usageLimit.resetsIn': 'Akan direset {time}.', + 'upsell.usageLimit.upgradePlan': 'Upgrade paket', + 'upsell.usageLimit.weeklyInference': '{amount}', + 'walkthrough.tooltip.letsGo': 'Ayo mulai!', + 'walkthrough.tooltip.next': 'Berikutnya →', + 'walkthrough.tooltip.skip': 'Lewati tur', + 'walkthrough.tooltip.stepCounter': '{n} dari {total}', + 'webhooks.activity.empty': 'Kosong', + 'webhooks.activity.title': 'Aktivitas Terbaru', + 'webhooks.composioHistory.empty': 'Kosong', + 'webhooks.composioHistory.metadataId': 'ID Metadata', + 'webhooks.composioHistory.metadataUuid': 'UUID Metadata', + 'webhooks.composioHistory.payload': 'Muatan', + 'webhooks.composioHistory.title': 'Riwayat Pemicu ComposeIO', + 'webhooks.tunnels.active': 'Aktif', + 'webhooks.tunnels.createFailed': 'Gagal membuat tunnel', + 'webhooks.tunnels.creating': 'Membuat...', + 'webhooks.tunnels.deleteFailed': 'Gagal menghapus tunnel', + 'webhooks.tunnels.descriptionPlaceholder': 'Deskripsi (opsional)', + 'webhooks.tunnels.echo': 'Echo', + 'webhooks.tunnels.empty': 'Kosong', + 'webhooks.tunnels.enableEcho': 'Aktifkan Echo', + 'webhooks.tunnels.inactive': 'Tidak aktif', + 'webhooks.tunnels.namePlaceholder': 'Nama tunnel (mis. telegram-bot)', + 'webhooks.tunnels.newTunnel': 'Tunnel baru', + 'webhooks.tunnels.removeEcho': 'Hapus Echo', + 'webhooks.tunnels.title': 'Tunnel Webhook', + 'webhooks.tunnels.toggleFailed': 'Gagal mengalihkan echo', + 'composio.directModeRequiresKey': + 'Gagal menyimpan. Mode Direct memerlukan API key yang tidak kosong.', + 'composio.integrationSlugsHelp': 'Siput integrasi yang dipisahkan koma, mis.', + 'composio.integrationSlugsExample': 'gmail, slack', + 'composio.integrationSlugsCaseInsensitive': 'Tidak peka huruf besar-kecil.', + 'composio.integrationSlugsPlaceholder': 'gmail, slack, ...', + 'composio.notYetRouted': 'belum dirutekan', + 'composio.triggers.loading': 'Memuat…', + 'conversations.taskKanban.todo': 'Akan dikerjakan', + 'chat.addReaction': 'Tambahkan reaksi', + 'chat.agentProfile.create': 'Buat profil agen', + 'chat.agentProfile.createFailed': 'Tidak dapat membuat profil agen.', + 'chat.agentProfile.customDescription': 'Profil agen khusus', + 'chat.agentProfile.defaultAgentLabel': 'Orchestrator', + 'chat.agentProfile.exists': 'Profil agen "{name}" sudah ada.', + 'chat.agentProfile.label': 'Profil agen', + 'chat.agentProfile.namePlaceholder': 'Nama profil', + 'chat.agentProfile.promptStylePlaceholder': 'Gaya perintah', + 'chat.agentProfile.allowedToolsPlaceholder': 'Alat yang diizinkan', + 'chat.backToThread': 'kembali ke {title}', + 'chat.parentThread': 'thread induk', + 'chat.removeReaction': 'Hapus {emoji}', + 'settings.composio.loading': 'Memuat…', + 'settings.mascot.noCharactersAvailable': 'Belum ada karakter OpenHuman yang tersedia', + 'skills.uninstall.confirmTitle': 'Copot {name}?', + 'conversations.taskKanban.blocked': 'Terhambat', + 'conversations.taskKanban.done': 'Selesai', + 'conversations.taskKanban.pending': 'Tertunda', + 'conversations.taskKanban.working': 'Bekerja', + 'conversations.taskKanban.awaitingApproval': 'Menunggu persetujuan', + 'conversations.taskKanban.ready': 'Siap', + 'conversations.taskKanban.rejected': 'Ditolak', + 'conversations.taskKanban.inProgress': 'Sedang berjalan', + 'intelligence.memoryChunk.detail.copiedHint': 'disalin', + 'settings.composio.notYetRouted': 'belum dirutekan', + 'settings.localModel.download.manageExternal': 'Kelola model ini di runtime eksternal Anda.', + 'settings.localModel.status.manageOllamaExternal': + 'Kelola proses Ollama dan unduhan model di luar OpenHuman, lalu jalankan ulang diagnostik.', + 'settings.localModel.status.ollamaDocs': 'Dokumentasi Ollama', + 'settings.localModel.status.thenRetry': + 'untuk instruksi pengaturan, lalu coba lagi setelah runtime Anda dapat dijangkau.', + 'devOptions.menuAi': 'Konfigurasi AI', + 'devOptions.menuAiDesc': 'Penyedia cloud, model Ollama lokal, dan routing per beban kerja', + 'devOptions.menuScreenAware': 'Kesadaran Layar', + 'devOptions.menuScreenAwareDesc': 'Izin tangkapan layar, kebijakan pemantauan, dan kontrol sesi', + 'devOptions.menuMessaging': 'Channel Pesan', + 'devOptions.menuMessagingDesc': + 'Konfigurasikan mode autentikasi Telegram/Discord dan routing channel bawaan', + 'devOptions.menuTools': 'Alat', + 'devOptions.menuToolsDesc': + 'Aktifkan atau nonaktifkan kemampuan yang dapat digunakan OpenHuman atas nama Anda', + 'devOptions.menuAgentChat': 'Obrolan Agen', + 'devOptions.menuAgentChatDesc': 'Uji percakapan agen dengan override model dan suhu', + 'devOptions.menuCronJobs': 'Pekerjaan Cron', + 'devOptions.menuCronJobsDesc': 'Lihat dan konfigurasikan pekerjaan terjadwal untuk skill runtime', + 'devOptions.menuLocalModelDebug': 'Debug Model Lokal', + 'devOptions.menuLocalModelDebugDesc': + 'Konfigurasi Ollama, unduhan aset, pengujian model, dan diagnostik', + 'devOptions.menuWebhooksDebug': 'Webhook', + 'devOptions.menuWebhooksDebugDesc': + 'Periksa pendaftaran webhook runtime dan log permintaan yang ditangkap', + 'devOptions.menuIntelligence': 'Kecerdasan', + 'devOptions.menuIntelligenceDesc': 'Workspace memori, mesin subconscious, mimpi, dan pengaturan', + 'devOptions.menuNotificationRouting': 'Routing Notifikasi', + 'devOptions.menuNotificationRoutingDesc': + 'Skor kepentingan AI dan eskalasi orkestrator untuk alert integrasi', + 'devOptions.menuComposeIOTriggers': 'Pemicu ComposeIO', + 'devOptions.menuComposeIOTriggersDesc': 'Lihat riwayat dan arsip pemicu ComposeIO', + 'devOptions.menuComposioRouting': 'Routing Composio (Mode Direct)', + 'devOptions.menuComposioRoutingDesc': + 'Gunakan API key Composio milik Anda sendiri dan rutekan panggilan langsung ke backend.composio.dev', + 'devOptions.menuComposioTriggers': 'Pemicu Integrasi', + 'devOptions.menuComposioTriggersDesc': + 'Konfigurasikan pengaturan triase AI untuk pemicu integrasi Composio', + 'memory.sourceFilterAria': 'Filter berdasarkan sumber', + 'calls.comingSoonDescription': 'Panggilan dengan bantuan AI akan segera hadir. Pantau terus.', + 'vault.title': 'Gudang pengetahuan', + 'vault.description': 'Arahkan ke folder lokal; file dipotong dan dicerminkan ke dalam memori.', + 'vault.add': 'Tambahkan brankas', + 'vault.added': 'Vault ditambahkan', + 'vault.createdMessage': 'Membuat "{name}". Klik {sync} untuk menyerap.', + 'vault.couldNotAdd': 'Tidak dapat menambahkan vault', + 'vault.syncFailed': 'Sinkronisasi gagal', + 'vault.syncFailedFor': 'Sinkronisasi gagal untuk "{name}"', + 'vault.syncFailedFiles': 'Gagal {count} file', + 'vault.syncedTitle': 'Disinkronkan "{name}"', + 'vault.syncSummary': 'Diserap {ingested}, tidak diubah {unchanged}, dihapus {removed}', + 'vault.syncSummaryFailed': ', gagal {count}', + 'vault.syncSummarySkipped': ', dilewati {count}', + 'vault.syncSummaryDuration': '· {seconds}s', + 'vault.confirmRemovePurge': + 'Hapus vault "{name}"?\n\nKlik OK untuk juga menghapus memorinya (hapus semua {count} dokumen yang telah dimasukkan).\nKlik Batal untuk menyimpan dokumen di memori.', + 'vault.confirmRemove': 'Benar-benar menghapus brankas "{name}"?', + 'vault.removed': 'Vault dihapus', + 'vault.removedPurgedMessage': 'Menghapus "{name}" dan menghapus memorinya.', + 'vault.removedKeptMessage': 'Menghapus "{name}". Dokumen disimpan dalam memori.', + 'vault.couldNotRemove': 'Tidak dapat menghapus vault', + 'vault.name': 'Nama', + 'vault.namePlaceholder': 'Catatan penelitian saya', + 'vault.folderPath': 'Jalur folder (mutlak)', + 'vault.folderPathPlaceholder': '/Pengguna/Anda/Dokumen/catatan', + 'vault.excludes': 'Tidak termasuk (substring yang dipisahkan koma, opsional)', + 'vault.excludesPlaceholder': 'draft/, .secret', + 'vault.creating': 'Membuat…', + 'vault.create': 'Membuat vault', + 'vault.loading': 'Memuat vault…', + 'vault.failedToLoad': 'Gagal memuat brankas: {error}', + 'vault.empty': 'Belum ada brankas. Tambahkan satu di atas untuk mulai menyerap folder.', + 'vault.fileCount': '{count} file', + 'vault.syncedRelative': 'disinkronkan {time}', + 'vault.neverSynced': 'tidak pernah disinkronkan', + 'vault.syncingProgress': 'Menyinkronkan… {ingested}/{total}', + 'vault.removing': 'Menghapus…', + 'vault.relative.sec': '{count}s yang lalu', + 'vault.relative.min': '{count}m yang lalu', + 'vault.relative.hr': '{count}h yang lalu', + 'vault.relative.day': '{count}d yang lalu', + 'whatsapp.title': 'WhatsApp', + 'subconscious.interval.fiveMinutes': '5 menit', + 'subconscious.interval.tenMinutes': '10 menit', + 'subconscious.interval.fifteenMinutes': '15 menit', + 'subconscious.interval.thirtyMinutes': '30 menit', + 'subconscious.interval.oneHour': '1 jam', + 'subconscious.interval.sixHours': '6 jam', + 'subconscious.interval.twelveHours': '12 jam', + 'subconscious.interval.oneDay': '1 hari', + 'subconscious.priority.critical': 'kritis', + 'subconscious.priority.important': 'penting', + 'subconscious.priority.normal': 'normal', + 'subconscious.durationSeconds': '{seconds}d', + 'subconscious.durationMilliseconds': '{milliseconds}md', + 'settings.appearance': 'Tampilan', + 'settings.appearanceDesc': 'Pilih terang, gelap, atau ikuti tema sistem Anda', + 'settings.mascot': 'Maskot', + 'settings.mascotDesc': 'Pilih warna maskot yang digunakan di seluruh aplikasi', + 'pages.settings.account.walletBalances': 'Saldo Dompet', + 'pages.settings.account.walletBalancesDesc': 'Lihat saldo multi-rantai untuk dompet lokal Anda', + 'walletBalances.title': 'Saldo Dompet', + 'walletBalances.refresh': 'Refresh', + 'walletBalances.loading': 'Memuat saldo…', + 'walletBalances.retry': 'Retry', + 'walletBalances.emptyState': 'Belum ada akun dompet — atur dompet di Frasa Pemulihan.', + 'walletBalances.copyAddress': 'Salin alamat', + 'walletBalances.providerMissing': 'penyedia tidak tersedia', + 'walletBalances.rawBalance': 'Mentah: {raw}', + 'walletBalances.errorGeneric': + 'Tidak dapat memuat saldo dompet. Atur dompet Anda di Frasa Pemulihan dan coba lagi.', + 'settings.taskSources.title': 'Sumber Tugas', + 'settings.taskSources.subtitle': 'Tarik tugas dari alat Anda ke papan todo agen', + 'settings.taskSources.description': + 'Kumpulkan item kerja dari GitHub, Notion, Linear, dan ClickUp, perkaya mereka, dan rute mereka ke agen papan todo.', + 'settings.taskSources.connectHint': + 'Sumber tugas menggunakan akun yang terhubung Anda. Hubungkan mereka dengan Integrations.', + 'settings.taskSources.disabledBanner': + 'Sumber tugas dinonaktifkan di pengaturan. Aktifkan mereka untuk melakukan polling secara otomatis.', + 'settings.taskSources.loadError': 'Gagal memuat sumber tugas', + 'settings.taskSources.addTitle': 'Tambahkan suatu sumber tugas', + 'settings.taskSources.provider': 'Penyedia', + 'settings.taskSources.name': 'Nama (opsional)', + 'settings.taskSources.namePlaceholder': 'mis. Masalah terbuka saya', + 'settings.taskSources.github.repo': 'Repositori (pemilik/nama, opsional)', + 'settings.taskSources.github.labels': 'Label (koma - dipisahkan)', + 'settings.taskSources.notion.database': 'ID Basis Data (papan)', + 'settings.taskSources.linear.team': 'ID tim (opsional)', + 'settings.taskSources.clickup.team': 'ID workspace (tim) (opsional)', + 'settings.taskSources.assignedToMe': 'Hanya item yang ditugaskan kepada saya', + 'settings.taskSources.add': 'Tambah sumber', + 'settings.taskSources.adding': 'Menambahkan…', + 'settings.taskSources.preview': 'Pratinjau', + 'settings.taskSources.previewResult': 'Tugas {count} cocok dengan penyaring ini', + 'settings.taskSources.fetchNow': 'Ambil sekarang', + 'settings.taskSources.fetching': 'Mengambil...', + 'settings.taskSources.fetchResult': 'Karang tugas {routed} dari {fetched}', + 'settings.taskSources.configured': 'Sumber yang dikonfigurasi', + 'settings.taskSources.empty': 'Belum ada sumber tugas yang dikonfigurasi.', + 'settings.taskSources.proactive': 'Proaktif', + 'settings.taskSources.lastFetch': 'Terakhir mengambil', + 'settings.taskSources.never': 'Tidak pernah', + 'settings.taskSources.statusEnabled': 'Diaktifkan', + 'settings.taskSources.statusDisabled': 'Dinonaktifkan', + 'settings.taskSources.enable': 'Aktifkan', + 'settings.taskSources.disable': 'Nonaktifkan', + 'settings.taskSources.remove': 'Hapus', + 'settings.taskSources.removeConfirm': + 'Hapus sumber tugas ini? Semua riwayat tugas akan dihapus dan tak dapat dibatalkan.', + 'settings.taskSources.refresh': 'Segarkan', + 'settings.taskSources.providers.github': 'GitHub', + 'settings.taskSources.providers.notion': 'Notion', + 'settings.taskSources.providers.linear': 'Linear', + 'settings.taskSources.providers.clickup': 'ClickUp', + 'skills.dashboard.title': 'Skills', + 'skills.dashboard.scheduledHeading': 'Skill terjadwal', + 'skills.dashboard.emptyTitle': 'Tidak ada skill terjadwal', + 'skills.dashboard.emptyBody': + 'Jalankan skill bawaan sekali atau simpan jadwal berulang untuk melihatnya di sini.', + 'skills.dashboard.create': 'Buat Skill', + 'skills.dashboard.run': 'Jalankan Skill', + 'skills.dashboard.enable': 'Aktifkan skill terjadwal', + 'skills.dashboard.disable': 'Nonaktifkan skill terjadwal', + 'skills.dashboard.lastRun': 'Terakhir dijalankan', + 'skills.dashboard.nextRun': 'Dijalankan berikutnya', + 'skills.dashboard.cardOpenRunner': 'Buka di pemandu', + 'skills.dashboard.loadError': 'Gagal memuat skill terjadwal', + 'skills.new.title': 'Buat skill', + 'skills.new.placeholderBody': + 'Formulir pembuatan akan segera tersedia. Untuk saat ini, gunakan tombol "Skill baru" di halaman pemandu.', + 'settings.agents.title': 'Agen', + 'settings.agents.subtitle': + 'Atur agen yang tersedia untuk delegasi - membangun - dalam default dan agen custom Anda sendiri.', + 'settings.agents.menuDesc': 'Kelola built-in dan agen gubahan', + 'settings.agents.newAgent': 'Agen baru', + 'settings.agents.loadError': 'Gagal memuat agen', + 'settings.agents.empty': 'Belum ada agen', + 'settings.agents.sourceDefault': 'Bawaan', + 'settings.agents.sourceCustom': 'Kustom', + 'settings.agents.enable': 'Aktifkan agen', + 'settings.agents.disable': 'Nonaktifkan agen', + 'settings.agents.edit': 'Edit', + 'settings.agents.delete': 'Hapus', + 'settings.agents.reset': 'Atur ulang ke default', + 'settings.agents.modelLabel': 'Model AI', + 'settings.agents.toolsLabel': 'Perkakas', + 'settings.agents.toolsAll': 'Semua alat', + 'settings.agents.toolsCount': '{count} alat', + 'settings.agents.actionFailed': 'Gagal memperbarui agen', + 'settings.agents.orchestratorLocked': 'Penakluk selalu aktif.', + 'settings.agents.editor.createTitle': 'Agen baru', + 'settings.agents.editor.editTitle': 'Sunting agen', + 'settings.agents.editor.id': 'ID', + 'settings.agents.editor.idHint': 'Huruf kecil, nomor, _ dan - saja.', + 'settings.agents.editor.name': 'Nama', + 'settings.agents.editor.description': 'Deskripsi', + 'settings.agents.editor.model': 'Model (opsional)', + 'settings.agents.editor.modelPlaceholder': 'Pewaris, petunjuk: cepat, atau id model', + 'settings.agents.editor.systemPrompt': 'Prompt sistem (opsional)', + 'settings.agents.editor.tools': 'Alat yang diizinkan', + 'settings.agents.editor.toolsHint': 'Satu nama alat per baris. Gunakan * untuk semua alat.', + 'settings.agents.editor.defaultsNote': + 'Menyunting agen built-in menyimpan override yang dapat Anda reset nanti.', + 'settings.agents.editor.save': 'Simpan', + 'settings.agents.editor.create': 'Buat agen', + 'settings.agents.editor.saving': 'Menyimpan...', + 'settings.agentsSection.title': 'Agents', + 'settings.agentsSection.description': + 'Kelola agen Anda, otonomi mereka, dan apa yang dapat mereka akses di komputer ini.', + 'settings.agentsSection.menuDesc': 'Registri, otonomi & akses OS', + 'settings.agents.editor.notFound': 'Agen tidak ditemukan.', + 'settings.agents.editor.modelInherit': 'Warisi (default platform)', + 'settings.agents.editor.modelHints': 'Petunjuk rute', + 'settings.agents.editor.modelTiers': 'Tingkatan model', + 'settings.agents.editor.modelCustom': 'ID model kustom…', + 'settings.agents.editor.modelCustomPlaceholder': 'mis. anthropic/claude-sonnet-4', + 'settings.agents.editor.selectTools': 'Tambah alat', + 'settings.agents.editor.toolsAllSelected': 'Semua alat', + 'settings.agents.editor.toolsNoneSelected': 'Tidak ada alat yang dipilih', + 'settings.agents.editor.removeToolAria': 'Hapus {tool}', + 'settings.agents.editor.toolsModalTitle': 'Alat yang diizinkan', + 'settings.agents.editor.toolsSelectedCount': '{count} dipilih', + 'settings.agents.editor.toolsSearchPlaceholder': 'Cari alat…', + 'settings.agents.editor.toolsAllowAll': 'Izinkan semua alat (*)', + 'settings.agents.editor.toolsAllowAllHint': + 'Agen ini dapat menggunakan semua alat yang tersedia.', + 'settings.agents.editor.toolsLoading': 'Memuat alat…', + 'settings.agents.editor.toolsLoadError': 'Gagal memuat alat', + 'settings.agents.editor.toolsEmpty': 'Tidak ada alat yang cocok dengan pencarian Anda.', + 'settings.agents.editor.toolsDone': 'Done', + 'settings.agents.editor.builtInReadonly': + 'Agen bawaan tidak dapat diedit. Anda dapat mengaktifkan, menonaktifkan, atau meresetnya dari daftar agen.', }; -export default id; +export default messages; diff --git a/app/src/lib/i18n/it.ts b/app/src/lib/i18n/it.ts index 0c4ac79c7..ebf87eaf4 100644 --- a/app/src/lib/i18n/it.ts +++ b/app/src/lib/i18n/it.ts @@ -1,32 +1,4154 @@ -import it1 from './chunks/it-1'; -import it2 from './chunks/it-2'; -import it3 from './chunks/it-3'; -import it4 from './chunks/it-4'; -import it5 from './chunks/it-5'; import type { TranslationMap } from './types'; -// Italian (Italiano) translations. Each chunk maps to chunks/en-N.ts. -// Missing keys fall back to English via I18nContext.resolveEn(). -const it: TranslationMap = { - ...it1, - ...it2, - ...it3, - ...it4, - ...it5, +// Italian (Italiano) translations. Keys mirror en.ts; missing/ +// English-identical values fall back to English via I18nContext.resolveEn(). +const messages: TranslationMap = { + 'nav.home': 'Home', + 'nav.human': 'Umano', + 'nav.chat': 'Chat', + 'nav.connections': 'Connessioni', + 'nav.memory': 'Intelligenza', + 'nav.alerts': 'Avvisi', + 'nav.rewards': 'Premi', + 'nav.settings': 'Impostazioni', + 'common.cancel': 'Annulla', + 'common.save': 'Salva', + 'common.confirm': 'Conferma', + 'common.delete': 'Elimina', + 'common.edit': 'Modifica', + 'common.create': 'Crea', + 'common.search': 'Cerca', + 'common.loading': 'caricamento…', + 'common.error': 'Errore', + 'common.success': 'Successo', + 'common.back': 'Indietro', + 'common.next': 'Avanti', + 'common.finish': 'Fine', + 'common.close': 'Chiudi', + 'common.enabled': 'Abilitato', + 'common.disabled': 'Disabilitato', + 'common.on': 'Attivo', + 'common.off': 'Disattivo', + 'common.yes': 'Sì', + 'common.no': 'No', + 'common.ok': 'Ok', + 'common.name': 'Nome', + 'common.retry': 'Riprova', + 'common.copy': 'Copia', + 'common.copied': 'Copiato', + 'common.learnMore': 'Scopri di più', + 'common.seeAll': 'Visualizza', + 'common.dismiss': 'Ignora', + 'common.clear': 'Cancella', + 'common.reset': 'Ripristina', + 'common.refresh': 'Aggiorna', + 'common.export': 'Esporta', + 'common.import': 'Importa', + 'common.upload': 'Carica', + 'common.download': 'Scarica', + 'common.add': 'Aggiungi', + 'common.remove': 'Rimuovi', + 'common.showMore': 'Mostra di più', + 'common.showLess': 'Mostra meno', + 'common.submit': 'Invia', + 'common.continue': 'Continua', + 'common.comingSoon': 'Prossimamente', + 'common.breadcrumb': 'breadcrumb', + 'settings.general': 'Generale', + 'settings.featuresAndAI': 'Funzionalità e AI', + 'settings.billingAndRewards': 'Fatturazione e premi', + 'settings.support': 'Supporto', + 'settings.advanced': 'Avanzate', + 'settings.dangerZone': 'Zona pericolosa', + 'settings.account': 'Account', + 'settings.accountDesc': 'Frase di recupero, team, connessioni e privacy', + 'settings.notifications': 'Notifiche', + 'settings.notificationsDesc': 'Non disturbare e controlli notifiche per account', + 'settings.notifications.tabs.preferences': 'Preferenze', + 'settings.notifications.tabs.routing': 'Instradamento', + 'settings.features': 'Funzionalità', + 'settings.featuresDesc': 'Consapevolezza schermo, messaggistica e strumenti', + 'settings.aiModels': 'AI e modelli', + 'settings.aiModelsDesc': 'Configurazione modello AI locale, download e provider LLM', + 'settings.ai': 'Configurazione AI', + 'settings.aiDesc': 'Provider cloud, modelli Ollama locali e instradamento per carico di lavoro', + 'settings.billingUsage': 'Fatturazione e utilizzo', + 'settings.billingUsageDesc': 'Piano di abbonamento, crediti e metodi di pagamento', + 'settings.rewards': 'Premi', + 'settings.rewardsDesc': 'Referral, coupon e crediti guadagnati', + 'settings.restartTour': 'Riavvia tour', + 'settings.restartTourDesc': "Riproduci la presentazione del prodotto dall'inizio", + 'settings.about': 'Informazioni', + 'settings.aboutDesc': 'Versione app e aggiornamenti software', + 'settings.developerOptions': 'Avanzate', + 'settings.developerOptionsDesc': + 'Configurazione AI, canali di messaggistica, strumenti, diagnostica e pannelli di debug', + 'settings.clearAppData': 'Cancella dati app', + 'settings.clearAppDataDesc': + "Disconnetti e cancella permanentemente tutti i dati locali dell'app", + 'settings.logOut': 'Disconnetti', + 'settings.logOutDesc': 'Disconnetti dal tuo account', + 'settings.exitLocalSession': 'Esci dalla sessione locale', + 'settings.exitLocalSessionDesc': 'Ritorna alla schermata di accesso', + 'settings.language': 'Lingua', + 'settings.betaBuild': 'Build beta - v{version}', + 'settings.languageDesc': "Lingua di visualizzazione dell'interfaccia dell'app", + 'settings.alerts': 'Avvisi', + 'settings.alertsDesc': 'Visualizza avvisi recenti e attività nella tua posta', + 'settings.account.recoveryPhrase': 'Frase di recupero', + 'settings.account.recoveryPhraseDesc': 'Visualizza e fai il backup della frase di recupero', + 'settings.account.team': 'Squadra', + 'settings.account.teamDesc': 'Gestisci membri del team e autorizzazioni', + 'settings.account.connections': 'Connessioni', + 'settings.account.connectionsDesc': 'Gestisci account e servizi collegati', + 'settings.account.privacy': 'Privacy', + 'settings.account.privacyDesc': 'Controlla quali dati escono dal tuo computer', + 'migration.title': 'Importa da un altro assistente', + 'migration.description': + 'Migra memoria e note da un altro assistente locale in questo spazio di lavoro. Inizia con Anteprima per vedere esattamente cosa cambierebbe, poi premi Applica per copiare i dati. La memoria attuale viene salvata in backup per prima.', + 'migration.vendorLabel': 'Provider di origine', + 'migration.vendor.openclaw': 'OpenClaw', + 'migration.vendor.hermes': 'Hermes Agent', + 'migration.sourceLabel': 'Percorso dello spazio di lavoro di origine (facoltativo)', + 'migration.sourcePlaceholder': + 'Lascia vuoto per rilevamento automatico (es. ~/.openclaw/workspace)', + 'migration.sourcePlaceholderHermes': 'Lascia vuoto per il rilevamento automatico (es. ~/.hermes)', + 'migration.sourceHint': + 'Vuoto usa la posizione predefinita del provider. Inserisci un percorso esplicito se hai spostato lo spazio di lavoro.', + 'migration.previewAction': 'Anteprima', + 'migration.previewRunning': 'Anteprima in corso…', + 'migration.applyAction': "Applica l'import", + 'migration.applyRunning': 'Importazione in corso…', + 'migration.applyDisclaimer': + "Applica si sblocca dopo un'Anteprima riuscita della stessa origine. La memoria esistente viene salvata in backup prima di qualsiasi import.", + 'migration.reportTitlePreview': 'Anteprima — nessun import effettuato', + 'migration.reportTitleApplied': 'Importazione completata', + 'migration.report.source': 'Spazio di lavoro di origine', + 'migration.report.target': 'Spazio di lavoro di destinazione', + 'migration.report.fromSqlite': 'Da SQLite (brain.db)', + 'migration.report.fromMarkdown': 'Da Markdown', + 'migration.report.imported': 'Importati', + 'migration.report.skippedUnchanged': 'Saltati (non modificati)', + 'migration.report.renamedConflicts': 'Rinominati in caso di conflitto', + 'migration.report.warnings': 'Avvisi', + 'migration.report.previewHint': + "Nessun dato è ancora stato importato. Premi Applica l'import per copiarlo.", + 'migration.report.appliedHint': + 'Le voci importate sono ora nella tua memoria. Riesegui Anteprima per confrontare di nuovo.', + 'migration.confirmImport.singular': + "Importare {count} voce nello spazio di lavoro attuale?\n\nOrigine: {source}\nDestinazione: {target}\n\nLa memoria esistente verrà salvata in backup prima dell'import.", + 'migration.confirmImport.plural': + "Importare {count} voci nello spazio di lavoro attuale?\n\nOrigine: {source}\nDestinazione: {target}\n\nLa memoria esistente verrà salvata in backup prima dell'import.", + 'settings.notifications.doNotDisturb': 'Non disturbare', + 'settings.notifications.doNotDisturbDesc': + 'Metti in pausa tutte le notifiche per un periodo prefissato', + 'settings.notifications.channelControls': 'Controlli per canale', + 'settings.notifications.channelControlsDesc': + 'Configura le preferenze di notifica per ogni canale', + 'settings.features.screenAwareness': 'Consapevolezza schermo', + 'settings.features.screenAwarenessDesc': "Consenti all'assistente di vedere la finestra attiva", + 'settings.features.messaging': 'Messaggistica', + 'settings.features.messagingDesc': 'Impostazioni canale e integrazione messaggistica', + 'settings.features.tools': 'Strumenti', + 'settings.features.toolsDesc': 'Gestisci strumenti e integrazioni connessi', + 'settings.ai.localSetup': 'Configurazione AI locale', + 'settings.ai.localSetupDesc': 'Scarica e configura modelli AI locali', + 'settings.ai.llmProvider': 'Provider LLM', + 'settings.ai.llmProviderDesc': 'Scegli e configura il tuo provider AI', + 'clearData.title': 'Cancella dati app', + 'clearData.warning': + "Verrai disconnesso e i dati locali dell'app verranno eliminati permanentemente, compresi:", + 'clearData.bulletSettings': "Impostazioni e conversazioni dell'app", + 'clearData.bulletCache': 'Tutti i dati di cache delle integrazioni locali', + 'clearData.bulletWorkspace': 'Dati del workspace', + 'clearData.bulletOther': 'Tutti gli altri dati locali', + 'clearData.irreversible': 'Questa azione non può essere annullata.', + 'clearData.clearing': 'Cancellazione dati app...', + 'clearData.failed': 'Impossibile cancellare i dati ed effettuare il logout. Riprova.', + 'clearData.failedLogout': 'Impossibile effettuare il logout. Riprova.', + 'clearData.failedPersist': "Impossibile cancellare lo stato persistente dell'app. Riprova.", + 'welcome.title': 'Benvenuto in OpenHuman', + 'welcome.subtitle': + 'La tua super intelligenza AI personale. Privata, semplice ed estremamente potente.', + 'welcome.connectPrompt': 'Configura URL RPC (Avanzato)', + 'welcome.selectRuntime': 'Seleziona un runtime', + 'welcome.clearingAppData': 'Cancellazione dati app in corso...', + 'welcome.clearAppDataAndRestart': 'Cancella dati app e riavvia', + 'welcome.clearAppDataWarning': + 'Questa operazione cancella i segreti e gli account memorizzati localmente su questo dispositivo. Il tuo account cloud non viene influenzato — puoi accedere di nuovo subito dopo.', + 'welcome.resetErrorFallback': + "Impossibile cancellare i dati dell'app. Chiudi e riapri OpenHuman, poi riprova.", + 'welcome.signingIn': 'Accesso in corso...', + 'welcome.termsIntro': 'Continuando, accetti i', + 'welcome.termsOfUse': 'Termini', + 'welcome.termsJoiner': 'e', + 'welcome.privacyPolicy': 'Informativa sulla privacy', + 'welcome.termsOutro': '.', + 'welcome.urlPlaceholder': 'http://localhost:8089', + 'welcome.invalidUrl': 'Inserisci un URL HTTP o HTTPS valido', + 'welcome.connecting': 'Test', + 'welcome.connect': 'Test', + 'home.greeting': 'Buongiorno', + 'home.greetingAfternoon': 'Buon pomeriggio', + 'home.greetingEvening': 'Buonasera', + 'home.askAssistant': 'Chiedi qualsiasi cosa al tuo assistente...', + 'home.statusOk': + "Il tuo dispositivo è connesso. Tieni l'app in esecuzione per mantenere la connessione attiva. Scrivi al tuo agente con il pulsante sotto.", + 'home.statusBackendOnly': 'Riconnessione al backend… il tuo agente sarà disponibile a breve.', + 'home.statusCoreUnreachable': + 'Il sidecar core locale non risponde. Il processo in background di OpenHuman potrebbe essersi bloccato o non essere partito.', + 'home.statusInternetOffline': + "Il tuo dispositivo è offline. Controlla la rete o riavvia l'app per riconnetterti.", + 'home.restartCore': 'Riavvia core', + 'home.restartingCore': 'Riavvio core…', + 'home.themeToggle.toLight': 'Passa al tema chiaro', + 'home.themeToggle.toDark': 'Passa al tema scuro', + 'home.usageExhaustedTitle': 'Hai esaurito il tuo utilizzo', + 'home.usageExhaustedBody': + 'Hai esaurito per ora l’utilizzo incluso. Avvia un abbonamento per sbloccare più capacità continuativa.', + 'home.usageExhaustedCta': 'Attiva un abbonamento', + 'home.routinesCard': 'Le tue routine', + 'home.routinesActive': '{count} attive', + 'routines.title': 'Le tue routine', + 'routines.subtitle': 'Cose che il tuo assistente fa automaticamente', + 'routines.loading': 'Caricamento delle routine…', + 'routines.empty': 'Ancora nessuna routine', + 'routines.emptyHint': + 'Il tuo assistente può eseguire attività secondo un programma — come briefing mattutini o riepiloghi giornalieri.', + 'routines.refresh': 'Aggiorna', + 'routines.nextRun': 'Prossima corsa', + 'routines.lastRunSuccess': "L'ultima esecuzione è riuscita", + 'routines.lastRunFailed': "L'ultima esecuzione è fallita", + 'routines.notRunYet': 'Non ancora eseguito', + 'routines.runNow': 'Corri adesso', + 'routines.running': 'Correndo…', + 'routines.viewHistory': 'Visualizza cronologia', + 'routines.loadingHistory': 'Caricamento…', + 'routines.noHistory': 'Ancora nessuna cronologia delle esecuzioni.', + 'routines.statusSuccess': 'Successo', + 'routines.statusError': 'Errore', + 'routines.showOutput': 'Mostra output', + 'routines.hideOutput': 'Nascondi output', + 'routines.toggleEnabled': 'Abilita o disabilita questa routine', + 'routines.typeAgent': 'Agente', + 'routines.typeCommand': 'Comando', + 'nav.routines': 'Routines', + 'chat.newThread': 'Nuovo thread', + 'chat.typeMessage': 'Scrivi un messaggio...', + 'chat.send': 'Invia messaggio', + 'chat.thinking': 'Sto pensando...', + 'chat.noMessages': 'Nessun messaggio', + 'chat.startConversation': 'Inizia una conversazione', + 'chat.regenerate': 'Rigenera', + 'chat.copyResponse': 'Copia risposta', + 'chat.citations': 'Citazioni', + 'chat.toolUsed': 'Strumento usato', + 'scope.legacy': 'Legacy', + 'scope.user': 'Utente', + 'scope.project': 'Progetto', + 'skills.title': 'Connessioni', + 'skills.search': 'Cerca connessioni...', + 'skills.noResults': 'Nessuna connessione trovata', + 'skills.connect': 'Connetti', + 'skills.disconnect': 'Disconnetti', + 'skills.configure': 'Gestisci', + 'skills.connected': 'Connesso', + 'skills.available': 'Disponibile', + 'skills.addAccount': 'Aggiungi account', + 'skills.channels': 'Canali', + 'skills.integrations': 'Integrazioni', + 'skills.integrationsSubtitle': + 'Connessioni OAuth basate su cloud — accedi con il tuo account e Composio gestisce i token affinché gli agenti possano leggere e agire per tuo conto. Nessuna chiave API da gestire.', 'skills.composio.noApiKeyTitle': 'Nessuna chiave API Composio configurata', 'skills.composio.noApiKeyDescription': 'La modalità locale usa la tua chiave API Composio. Apri Impostazioni → Avanzate → Composio per aggiungerne una prima di collegare le integrazioni qui.', 'skills.composio.noApiKeyCta': 'Apri nelle impostazioni', - 'channels.localManagedUnavailable': - 'I canali gestiti non sono disponibili per gli utenti locali.', + 'skills.tabs.composio': 'Composio', + 'skills.tabs.channels': 'Canali', + 'skills.tabs.mcp': 'MCP Server', + 'skills.tabs.runners': 'Runners', + 'memory.title': 'Memoria', + 'memory.search': 'Cerca memorie...', + 'memory.noResults': 'Nessuna memoria trovata', + 'memory.empty': + 'Nessuna memoria ancora. Le memorie vengono create automaticamente mentre interagisci.', + 'memory.tab.memory': 'Memoria', + 'memory.tab.tasks': 'Attività agente', + 'memory.tab.tasksDescription': + 'Crea e monitora le attività — i tuoi to-do personali e le board create dagli agenti nelle conversazioni.', + 'memory.tab.subconscious': 'Subconscio', + 'memory.tab.dreams': 'Sogni', + 'memory.tab.calls': 'Chiamate', + 'memory.tab.diagram': 'Diagram', + 'memory.tab.centrality': 'Centrality', + 'memory.tab.settings': 'Impostazioni', + 'memory.analyzeNow': 'Analizza ora', + 'graphCentrality.title': 'Centralità del Grafo della Conoscenza', + 'graphCentrality.intro': + 'PageRank sul tuo grafo della memoria mette in evidenza gli hub portanti — e le entità di collegamento che connettono cluster altrimenti separati, cosa che un semplice conteggio di frequenza non può rivelare.', + 'graphCentrality.loading': 'Calcolando la centralità…', + 'graphCentrality.errorPrefix': 'Impossibile caricare il grafico:', + 'graphCentrality.retry': 'Riprova', + 'graphCentrality.empty': 'Ancora nessun knowledge graph.', + 'graphCentrality.emptyHint': + "Man mano che l'assistente registra fatti su di te, le entità più connesse emergeranno qui.", + 'graphCentrality.namespaceLabel': 'Spazio dei nomi', + 'graphCentrality.namespaceAll': 'Tutti gli spazi dei nomi', + 'graphCentrality.metricEntities': 'Entità', + 'graphCentrality.metricConnections': 'Connessioni', + 'graphCentrality.metricClusters': 'Gruppi', + 'graphCentrality.clustersCaption': 'Cluster {components} · più grandi impugnature {largest}', + 'graphCentrality.approximateBadge': 'approssimativo', + 'graphCentrality.approximateTitle': + 'Fermato al limite delle iterazioni prima di convergere completamente', + 'graphCentrality.rankedHeading': 'Principali entità per influenza', + 'graphCentrality.colRank': '#', + 'graphCentrality.colEntity': 'Entità', + 'graphCentrality.colInfluence': 'Influenza', + 'graphCentrality.colLinks': 'Collegamenti', + 'graphCentrality.bridgeBadge': 'connettore', + 'graphCentrality.bridgeTitle': + 'Connettore — più influente di quanto suggerisca il suo numero di collegamenti', + 'graphCentrality.degreeTitle': '{in} in entrata · {out} in uscita', + 'memoryTree.status.title': 'Albero della memoria', + 'memoryTree.status.autoSyncLabel': 'Sincronizzazione automatica', + 'memoryTree.status.autoSyncDescription': + 'Pausa per interrompere la nuova ingestione. La wiki esistente rimane interrogabile.', + 'memoryTree.status.statusTile': 'Stato', + 'memoryTree.status.lastSyncTile': 'Ultima sincronizzazione', + 'memoryTree.status.totalChunksTile': 'Blocchi totali', + 'memoryTree.status.wikiSizeTile': 'Dimensione del Wiki', + 'memoryTree.status.statusRunning': 'Correre', + 'memoryTree.status.statusPaused': 'In pausa', + 'memoryTree.status.statusSyncing': 'Sincronizzazione', + 'memoryTree.status.statusError': 'Errore', + 'memoryTree.status.statusIdle': 'Inattivo', + 'memoryTree.status.never': 'Mai', + 'memoryTree.status.fetchError': "Impossibile recuperare lo stato dell'Albero della Memoria", + 'memoryTree.status.retry': 'Riprova', + 'memoryTree.status.toggleFailed': + 'Impossibile attivare/disattivare la sincronizzazione automatica', + 'memoryTree.status.justNow': 'proprio adesso', + 'memoryTree.status.secondsAgo': '{count}s fa', + 'memoryTree.status.minuteAgo': '1 minuto fa', + 'memoryTree.status.minutesAgo': '{count} minuti fa', + 'memoryTree.status.hourAgo': '1 ora fa', + 'memoryTree.status.hoursAgo': '{count} ore fa', + 'memoryTree.status.dayAgo': '1 giorno fa', + 'memoryTree.status.daysAgo': '{count} giorni fa', + 'alerts.title': 'Avvisi', + 'alerts.empty': 'Nessun avviso', + 'alerts.markAllRead': 'Segna tutti come letti', + 'alerts.unread': 'non letti', + 'rewards.title': 'Premi', + 'rewards.referrals': 'Referral', + 'rewards.coupons': 'Riscatta', 'rewards.localUnavailable': "L'accesso locale non guadagna ricompense, coupon o credito referral. Esci e continua accedendo con un account OpenHuman se vuoi che le ricompense vengano conteggiate.", 'rewards.localUnavailableCta': 'Apri le impostazioni account', + 'rewards.credits': 'Crediti', + 'rewards.referralCode': 'Il tuo codice referral', + 'rewards.copyCode': 'Copia codice', + 'rewards.share': 'Condividi', + 'onboarding.welcome': 'Ciao. Sono OpenHuman.', + 'onboarding.welcomeDesc': + 'Il tuo assistente AI super intelligente che gira sul tuo computer. Privato, semplice ed estremamente potente.', + 'onboarding.context': 'Raccolta del contesto', + 'onboarding.contextDesc': 'Connetti gli strumenti e i servizi che usi ogni giorno.', + 'onboarding.localAI': 'AI locale', + 'onboarding.localAIDesc': 'Configura un modello AI locale che gira sulla tua macchina.', + 'onboarding.chatProvider': 'Provider chat', + 'onboarding.chatProviderDesc': 'Scegli come vuoi interagire con il tuo assistente.', + 'onboarding.referral': 'Codice referral', + 'onboarding.referralDesc': 'Applica un codice referral se ne hai uno.', + 'onboarding.finish': 'Termina configurazione', + 'onboarding.finishDesc': 'Tutto pronto! Inizia a usare OpenHuman.', + 'onboarding.skip': 'Salta', + 'onboarding.getStarted': 'Inizia', + 'onboarding.runtimeChoice.title': 'Come vuoi eseguire OpenHuman?', + 'onboarding.runtimeChoice.subtitle': + 'Scegli la configurazione che fa per te. Puoi cambiarla in seguito nelle Impostazioni.', + 'onboarding.runtimeChoice.cloud.title': 'Semplice', + 'onboarding.runtimeChoice.cloud.tagline': 'Lascia che OpenHuman gestisca tutto per te.', + 'onboarding.runtimeChoice.cloud.f1': 'Sicurezza integrata', + 'onboarding.runtimeChoice.cloud.f2': 'Compressione token per allungare il tuo utilizzo', + 'onboarding.runtimeChoice.cloud.f3': 'Un solo abbonamento, tutti i modelli inclusi', + 'onboarding.runtimeChoice.cloud.f4': 'Nessuna chiave API da gestire', + 'onboarding.runtimeChoice.cloud.f5': 'Configurazione semplice', + 'onboarding.runtimeChoice.custom.title': 'Esegui personalizzato', + 'onboarding.runtimeChoice.custom.tagline': 'Porta le tue chiavi. Pieno controllo di ciò che usi.', + 'onboarding.runtimeChoice.custom.f1': 'Avrai bisogno di chiavi API per quasi tutto', + 'onboarding.runtimeChoice.custom.f2': 'Riutilizza servizi che già paghi', + 'onboarding.runtimeChoice.custom.f3': 'Può essere gratis se esegui tutto localmente', + 'onboarding.runtimeChoice.custom.f4': 'Più configurazione, più parametri', + 'onboarding.runtimeChoice.custom.f5': 'Ideale per power user e sviluppatori', + 'onboarding.runtimeChoice.cloud.creditHighlight': '1$ di credito gratuito per provarlo', + 'onboarding.runtimeChoice.continueCloud': 'Continua con Semplice', + 'onboarding.runtimeChoice.continueCustom': 'Continua con Personalizzato', + 'onboarding.runtimeChoice.recommended': 'Consigliato', + 'onboarding.apiKeys.title': 'Aggiungiamo le tue chiavi API', + 'onboarding.apiKeys.subtitle': + 'Puoi incollarle ora o saltare e aggiungerle dopo in Impostazioni › AI. Le chiavi sono memorizzate su questo dispositivo, crittografate a riposo.', + 'onboarding.apiKeys.openaiLabel': 'Chiave API OpenAI', + 'onboarding.apiKeys.openaiPlaceholder': 'sk-...', + 'onboarding.apiKeys.openaiOauthHint': + 'Utilizza ChatGPT Plus/Pro (abbonamento) o una chiave OpenAI API: non entrambi richiesti.', + 'onboarding.apiKeys.openaiOauthOpening': "Apertura dell'accesso…", + 'onboarding.apiKeys.finishSignIn': "Termina l'accesso a ChatGPT", + 'onboarding.apiKeys.orApiKey': 'o il tasto API', + 'onboarding.apiKeys.anthropicLabel': 'Chiave API Anthropic', + 'onboarding.apiKeys.anthropicPlaceholder': 'sk-ant-...', + 'onboarding.apiKeys.saveError': 'Impossibile salvare la chiave. Controllala e riprova.', + 'onboarding.apiKeys.skipForNow': 'Salta per ora', + 'onboarding.apiKeys.continue': 'Salva e continua', + 'onboarding.apiKeys.saving': 'Salvataggio…', + 'onboarding.custom.stepperInference': 'Inferenza', + 'onboarding.custom.stepperVoice': 'Voce', + 'onboarding.custom.stepperOAuth': 'OAuth', + 'onboarding.custom.stepperSearch': 'Ricerca', + 'onboarding.custom.stepperEmbeddings': 'Embeddings', + 'onboarding.custom.stepperMemory': 'Memoria', + 'onboarding.custom.stepCounter': 'Passo {n} di {total}', + 'onboarding.custom.defaultTitle': 'Predefinito', + 'onboarding.custom.defaultSubtitle': 'Lascia che OpenHuman lo gestisca per te.', + 'onboarding.custom.configureTitle': 'Configura', + 'onboarding.custom.configureSubtitle': 'Scelgo io cosa usare.', + 'onboarding.custom.progressAriaLabel': 'Avanzamento onboarding', + 'onboarding.custom.continue': 'Continua', + 'onboarding.custom.back': 'Indietro', + 'onboarding.custom.finish': 'Termina configurazione', + 'onboarding.custom.configureLater': + "Puoi finire di configurare dopo l'onboarding. Ti porteremo alla pagina Impostazioni corrispondente al termine.", + 'onboarding.custom.openSettings': 'Apri in Impostazioni', + 'onboarding.custom.inference.title': 'Inferenza (testo)', + 'onboarding.custom.inference.subtitle': + 'Quale modello linguistico dovrebbe rispondere alle tue domande ed eseguire i tuoi agenti?', + 'onboarding.custom.inference.defaultDesc': + 'OpenHuman instrada ogni carico di lavoro a un modello predefinito sensato. Niente chiavi, niente configurazione.', + 'onboarding.custom.inference.configureDesc': + 'Porta la tua chiave OpenAI o Anthropic. La useremo per ogni carico di lavoro testuale.', + 'onboarding.custom.voice.title': 'Voce', + 'onboarding.custom.voice.subtitle': 'Speech-to-text e text-to-speech per la modalità vocale.', + 'onboarding.custom.voice.defaultDesc': + 'OpenHuman include STT/TTS gestiti che funzionano subito. Niente da configurare.', + 'onboarding.custom.voice.configureDesc': + 'Usa il tuo ElevenLabs / OpenAI Whisper / ecc. Configura in Impostazioni › Voce.', + 'onboarding.custom.oauth.title': 'Connessioni (OAuth)', + 'onboarding.custom.oauth.subtitle': + 'Gmail, Slack, Notion e altri servizi connessi che richiedono OAuth.', + 'onboarding.custom.oauth.defaultDesc': + 'OpenHuman gestisce un workspace Composio gestito. Un clic per connettere ogni servizio in seguito.', + 'onboarding.custom.oauth.configureDesc': + 'Porta il tuo account Composio / chiave API. Configura in Impostazioni › Connessioni.', + 'onboarding.custom.search.title': 'Ricerca web', + 'onboarding.custom.search.subtitle': 'Come OpenHuman cerca sul web per tuo conto.', + 'onboarding.custom.search.defaultDesc': + 'OpenHuman usa un backend di ricerca gestito. Nessuna chiave necessaria.', + 'onboarding.custom.search.configureDesc': + 'Porta la tua chiave di provider di ricerca (Tavily, Brave, ecc.). Configura in Impostazioni › Strumenti.', + 'onboarding.custom.embeddings.title': 'Embeddings', + 'onboarding.custom.embeddings.subtitle': + 'Come OpenHuman genera gli embedding vettoriali per la ricerca nella memoria semantica.', + 'onboarding.custom.embeddings.defaultDesc': + 'OpenHuman utilizza un servizio di embedding gestito. Nessuna chiave API necessaria.', + 'onboarding.custom.embeddings.configureDesc': + 'Usa il tuo provider di embedding (OpenAI, Voyage, Ollama, ecc.).', + 'onboarding.custom.memory.title': 'Memoria', + 'onboarding.custom.memory.subtitle': + 'Come OpenHuman ricorda il tuo contesto, le preferenze e le conversazioni precedenti.', + 'onboarding.custom.memory.defaultDesc': + "OpenHuman gestisce automaticamente l'archiviazione e il recupero della memoria. Niente da configurare.", + 'onboarding.custom.memory.configureDesc': + 'Ispeziona, esporta o cancella la memoria da solo. Configura in Impostazioni › Memoria.', + 'accounts.addAccount': 'Aggiungi account', + 'accounts.manageAccounts': 'Gestisci account', + 'accounts.noAccounts': 'Nessun account connesso', + 'accounts.connectAccount': 'Connetti un account per iniziare', + 'accounts.agent': 'Agente', + 'accounts.respondQueue': 'Coda di risposta', + 'accounts.disconnect': 'Disconnetti', + 'accounts.disconnectConfirm': 'Sei sicuro di voler disconnettere questo account?', + 'accounts.disconnectClearMemory': 'Elimina anche la memoria da questa fonte', + 'accounts.disconnectClearMemoryHint': + 'Rimuove definitivamente i frammenti di memoria locale collegati a questa connessione.', + 'accounts.searchAccounts': 'Cerca account...', + 'channels.title': 'Canali', + 'channels.configure': 'Configura canale', + 'channels.setup': 'Configura', + 'channels.noChannels': 'Nessun canale configurato', + 'channels.localManagedUnavailable': + 'I canali gestiti non sono disponibili per gli utenti locali.', + 'channels.addChannel': 'Aggiungi canale', + 'channels.status.connected': 'Connesso', + 'channels.status.disconnected': 'Disconnesso', + 'channels.status.error': 'Errore', + 'channels.status.configuring': 'Configurazione', + 'channels.defaultMessaging': 'Canale di messaggistica predefinito', + 'webhooks.title': 'Webhook', + 'webhooks.create': 'Crea webhook', + 'webhooks.noWebhooks': 'Nessun webhook configurato', + 'webhooks.url': 'URL', + 'webhooks.secret': 'Segreto', + 'webhooks.events': 'Eventi', + 'webhooks.archiveDirectory': 'Directory di archivio', + 'webhooks.todayFile': 'File di oggi', + 'invites.title': 'Inviti', + 'invites.create': 'Crea invito', + 'invites.noInvites': 'Nessun invito in sospeso', + 'invites.code': 'Codice invito', + 'invites.copyLink': 'Copia link', + 'invites.generate': 'Genera invito', + 'invites.generating': 'Generazione in corso...', + 'invites.refreshing': 'Aggiornamento inviti in corso...', + 'invites.loading': 'Caricamento inviti...', + 'invites.copyCodeAria': 'Copia codice invito', + 'invites.revokeAria': 'Revoca invito', + 'invites.usedUp': 'Esaurito', + 'invites.uses': 'Utilizza: {current}{max}', + 'invites.expiresOn': 'Scadenza {date}', + 'invites.empty': 'Ancora nessun invito', + 'invites.emptyHint': 'Genera un codice di invito da condividere con altri', + 'invites.revokeTitle': 'Revoca codice di invito', + 'invites.revokePromptPrefix': 'Sei sicuro vuoi revocare il codice di invito', + 'invites.revokeWarning': + 'Questo codice invito non sarà più valido e non potrà essere usato per entrare nel team.', + 'invites.revoking': 'Revoca in corso...', + 'invites.revokeAction': 'Revoca invito', + 'invites.failedGenerate': "Impossibile generare l'invito", + 'invites.failedRevoke': "Impossibile revocare l'invito", + 'team.refreshingMembers': 'Aggiornamento membri...', + 'team.loadingMembers': 'Caricamento membri...', + 'team.memberCount': '{count} membro', + 'team.memberCountPlural': '{count} membri', + 'team.you': '(Tu)', + 'team.removeAria': 'Rimuovi {name}', + 'team.noMembers': 'Nessun membro trovato', + 'team.removeTitle': 'Rimuovi membro del team', + 'team.removePromptPrefix': 'Sei sicuro di voler rimuovere', + 'team.removePromptSuffix': 'dal team?', + 'team.removeWarning': "Perderanno l'accesso al team e a tutte le risorse del team.", + 'team.removing': 'Rimozione in corso...', + 'team.removeAction': 'Rimuovi membro', + 'team.changeRoleTitle': 'Modifica ruolo membro', + 'team.changeRolePrompt': 'Cambiare il ruolo di {name} da {oldRole} a {newRole}?', + 'team.changeRoleAdminGrant': + 'Questo concederà loro i permessi di amministratore completi, inclusa la possibilità di gestire i membri del team.', + 'team.changeRoleAdminRemove': + 'Questo rimuoverà i loro permessi di amministratore e non potranno più gestire il team.', + 'team.changing': 'Modifica...', + 'team.changeRoleAction': 'Modifica ruolo', + 'team.failedChangeRole': 'Impossibile modificare il ruolo', + 'team.failedRemoveMember': 'Impossibile rimuovere il membro', + 'devOptions.title': 'Avanzate', + 'devOptions.diagnostics': 'Diagnostica', + 'devOptions.diagnosticsDesc': 'Stato del sistema, log e metriche di performance', + 'devOptions.toolPolicyDiagnosticsDesc': + 'Inventario degli strumenti, posizione della politica, allowlist MCP e blocchi recenti', + 'devOptions.toolPolicyDiagnostics.loading': 'Caricamento…', + 'devOptions.toolPolicyDiagnostics.unavailable': 'Diagnostica non disponibile', + 'devOptions.toolPolicyDiagnostics.posture.title': 'Orientamento politico', + 'devOptions.toolPolicyDiagnostics.posture.autonomy': 'Autonomia:', + 'devOptions.toolPolicyDiagnostics.posture.workspaceOnly': 'Solo spazio di lavoro:', + 'devOptions.toolPolicyDiagnostics.posture.maxActionsPerHour': 'Azioni max/ora:', + 'devOptions.toolPolicyDiagnostics.posture.approvalMediumRisk': 'Approvazione (rischio medio):', + 'devOptions.toolPolicyDiagnostics.posture.blockHighRisk': 'Blocca ad alto rischio:', + 'devOptions.toolPolicyDiagnostics.inventory.title': 'Inventario', + 'devOptions.toolPolicyDiagnostics.inventory.totalTools': 'Strumenti totali', + 'devOptions.toolPolicyDiagnostics.inventory.enabledTools': 'Strumenti abilitati', + 'devOptions.toolPolicyDiagnostics.inventory.mcpStdioTools': 'Strumenti stdio MCP', + 'devOptions.toolPolicyDiagnostics.inventory.jsonRpcTools': 'strumenti JSON-RPC', + 'devOptions.toolPolicyDiagnostics.mcpAllowlists.title': 'liste di permessi MCP', + 'devOptions.toolPolicyDiagnostics.mcpAllowlists.summary': + 'Abilitato: {enabled} · Server: {enabledCount}/{totalCount}', + 'devOptions.toolPolicyDiagnostics.mcpAllowlists.unnamed': '', + 'devOptions.toolPolicyDiagnostics.mcpAllowlists.allowDeny': + 'consenti={allowCount} nega={denyCount}', + 'devOptions.toolPolicyDiagnostics.mcpWriteAudit.title': 'MCP scrivi audit', + 'devOptions.toolPolicyDiagnostics.mcpWriteAudit.summary': + 'Abilitato: {enabled} · Recenti (24h): {recentRows}', + 'devOptions.toolPolicyDiagnostics.recentBlocked.title': 'Chiamate bloccate recenti', + 'devOptions.toolPolicyDiagnostics.recentBlocked.empty': 'Nessuna chiamata bloccata registrata.', + 'devOptions.toolPolicyDiagnostics.redactedSurfaces.title': 'Superfici oscurate', + 'devOptions.toolPolicyDiagnostics.redactedSurfaces.summary': + 'Scrittura abilitata: {writeCount} · Superfici della politica: {policyCount}', + 'devOptions.debugPanels': 'Pannelli di debug', + 'devOptions.debugPanelsDesc': 'Feature flag, ispezione dello stato e strumenti di debug', + 'devOptions.webhooks': 'Webhook', + 'devOptions.webhooksDesc': 'Configura e testa le integrazioni webhook', + 'devOptions.memoryInspection': 'Ispezione memoria', + 'devOptions.memoryInspectionDesc': 'Esplora, interroga e gestisci le voci di memoria', + 'voice.pushToTalk': 'Push to talk', + 'voice.recording': 'Registrazione...', + 'voice.processing': 'Elaborazione...', + 'voice.languageHint': 'Lingua', + 'misc.rehydrating': 'Caricamento dei tuoi dati...', + 'misc.checkingServices': 'Verifica servizi...', + 'misc.serviceUnavailable': 'Servizio non disponibile', + 'misc.somethingWentWrong': 'Qualcosa è andato storto', + 'misc.tryAgainLater': 'Riprova più tardi.', + 'misc.restartApp': 'Riavvia app', + 'misc.updateAvailable': 'Aggiornamento disponibile', + 'misc.updateNow': 'Aggiorna ora', + 'misc.updateLater': 'Più tardi', + 'misc.downloading': 'Download in corso...', + 'misc.installing': 'Installazione...', + 'misc.beta': + 'OpenHuman è in beta iniziale. Sentiti libero di condividere feedback o segnalare bug che incontri — ogni segnalazione ci aiuta a rilasciare più velocemente.', + 'misc.betaFeedback': 'Invia feedback', + 'mnemonic.title': 'Frase di recupero', + 'mnemonic.warning': 'Scrivi queste parole in ordine e conservale in un luogo sicuro.', + 'mnemonic.copyWarning': + 'Non condividere mai la tua frase di recupero. Chiunque abbia queste parole può accedere al tuo account.', + 'mnemonic.copied': 'Frase di recupero copiata negli appunti', + 'mnemonic.reveal': 'Mostra frase', + 'mnemonic.revealPhrase': 'Mostra frase di recupero', + 'mnemonic.hidden': 'La frase di recupero è nascosta', + 'privacy.title': 'Privacy e sicurezza', + 'privacy.description': 'Report di trasparenza sui dati inviati a servizi esterni.', + 'privacy.empty': 'Nessun trasferimento di dati esterno rilevato.', + 'privacy.whatLeavesComputer': 'Cosa esce dal tuo computer', + 'privacy.loading': 'Caricamento dettagli privacy...', + 'privacy.loadError': + "Impossibile caricare l'elenco privacy in tempo reale. I controlli analytics sottostanti funzionano comunque.", + 'privacy.noCapabilities': 'Nessuna capacità attualmente divulga movimenti di dati.', + 'privacy.sentTo': 'Inviato a', + 'privacy.leavesDevice': 'Esce dal dispositivo', + 'privacy.staysLocal': 'Rimane locale', + 'privacy.anonymizedAnalytics': 'Analisi anonimizzate', + 'privacy.shareAnonymizedData': 'Condividi dati di utilizzo anonimizzati', + 'privacy.shareAnonymizedDataDesc': + 'Aiuta a migliorare OpenHuman condividendo report di crash anonimi e analisi di utilizzo. Tutti i dati sono completamente anonimizzati — nessun dato personale, messaggio, chiave wallet o informazione di sessione viene mai raccolto.', + 'privacy.meetingFollowUps': 'Follow-up delle riunioni', + 'privacy.autoHandoffMeet': + "Trasferimento automatico delle trascrizioni Google Meet all'orchestratore", + 'privacy.autoHandoffMeetDesc': + "Quando termina una chiamata Google Meet, l'orchestratore di OpenHuman può leggere la trascrizione e svolgere azioni come redigere messaggi, pianificare follow-up o pubblicare riassunti nel tuo workspace Slack connesso. Disattivato di default.", + 'privacy.analyticsDisclaimer': + 'Tutti i report analitici e bug sono completamente anonimi. Quando abilitati, raccogliamo solo informazioni sui crash, tipo di dispositivo e percorso file degli errori. Non accediamo mai ai tuoi messaggi, dati di sessione, chiavi del wallet, chiavi API o informazioni personali identificabili. Puoi cambiare questa impostazione in qualsiasi momento.', + 'settings.about.version': 'Versione', + 'settings.about.updateAvailable': 'è disponibile', + 'settings.about.softwareUpdates': 'Aggiornamenti software', + 'settings.about.lastChecked': 'Ultima verifica', + 'settings.about.checking': 'Verifica in corso...', + 'settings.about.checkForUpdates': 'Verifica aggiornamenti', + 'settings.about.releases': 'Release', + 'settings.about.releasesDesc': 'Sfoglia le note di rilascio e le build precedenti su GitHub.', + 'settings.about.openReleases': 'Apri release GitHub', + 'settings.about.connection': 'Connessione', + 'settings.about.connectionMode': 'Modalità', + 'settings.about.connectionModeLocal': 'Locale', + 'settings.about.connectionModeCloud': 'Nuvola', + 'settings.about.connectionModeUnset': 'Non selezionato', + 'settings.about.serverUrl': 'URL del server', + 'settings.about.serverUrlUnavailable': 'Non disponibile', + 'settings.about.connectionHelperLocal': + "Generato in-process dal shell Tauri all'avvio dell'app. La porta viene scelta all'avvio, quindi questo URL cambia tra gli avvii.", + 'settings.about.connectionHelperCloud': + 'Connesso a un core remoto. Cambia questo in BootCheck o nel selettore della modalità cloud.', + 'settings.heartbeat.title': 'Heartbeat e loop', + 'settings.heartbeat.desc': + 'Controlla le cadenze di pianificazione di background e ispeziona la mappa del ciclo.', + 'settings.ledgerUsage.title': 'Registro di utilizzo', + 'settings.ledgerUsage.desc': + 'Spesa recente di credito, matematica del budget e lettura del budget di background API.', + 'settings.costDashboard.title': 'Cruscotto dei costi', + 'settings.costDashboard.desc': + "Spesa e bruciatura di token nell'arco di 7 giorni attraverso lo sciame, con ritmo di budget e suddivisione per modello.", + 'settings.costDashboard.sevenDayCost': 'Costo giornaliero di 7 giorni', + 'settings.costDashboard.sevenDayTokens': 'Utilizzo del token di 7 giorni', + 'settings.costDashboard.totalSpend': 'Totale di 7 giorni', + 'settings.costDashboard.monthlyPace': 'Ritmo mensile', + 'settings.costDashboard.budgetLimit': 'Limite di budget', + 'settings.costDashboard.utilization': 'Utilizzo', + 'settings.costDashboard.modelBreakdown': 'Suddivisione per modello', + 'settings.costDashboard.model': 'Modello', + 'settings.costDashboard.provider': 'Fornitore', + 'settings.costDashboard.cost': 'Costo', + 'settings.costDashboard.tokens': 'Gettoni', + 'settings.costDashboard.requests': 'Richieste', + 'settings.costDashboard.percentOfTotal': '% del totale', + 'settings.costDashboard.inputTokens': 'Ingresso', + 'settings.costDashboard.outputTokens': 'Output', + 'settings.costDashboard.budgetNormal': 'In carreggiata', + 'settings.costDashboard.budgetWarning': 'Avviso', + 'settings.costDashboard.budgetExceeded': 'Oltre il budget', + 'settings.costDashboard.noBudget': 'Nessun limite impostato', + 'settings.costDashboard.noData': 'Nessun costo registrato negli ultimi 7 giorni.', + 'settings.costDashboard.noModels': 'Nessuna attività del modello negli ultimi 7 giorni.', + 'settings.costDashboard.loading': 'Caricamento cruscotto dei costi…', + 'settings.costDashboard.disabledHint': + 'La dashboard dei costi è disabilitata nella configurazione. Imposta [cost.dashboard] enabled = true in config.toml per riattivarla.', + 'settings.costDashboard.subtitle': + 'Spese live e distruzione di token attraverso lo sciame. Le barre si aggiornano automaticamente ogni pochi secondi — nessun bisogno di ricaricare la pagina.', + 'settings.costDashboard.summaryAriaLabel': 'Metriche riepilogative dei costi', + 'settings.costDashboard.lastSevenDays': 'ultimi 7 giorni', + 'settings.costDashboard.utilizationOf': 'di', + 'settings.costDashboard.thisMonth': 'questo mese', + 'settings.costDashboard.monthlyPaceHint': + 'Spesa mensile prevista al tasso di esecuzione giornaliero corrente (media × 30).', + 'settings.costDashboard.budgetLimitHint': + 'Budget mensile letto da cost.monthly_limit_usd in config.toml.', + 'settings.costDashboard.dailyTarget': 'Obiettivo giornaliero', + 'settings.costDashboard.today': 'Oggi', + 'settings.costDashboard.todayBadge': 'OGGI', + 'settings.costDashboard.unknownProvider': '—', + 'settings.costDashboard.justNow': 'Proprio adesso', + 'settings.costDashboard.secondsAgo': '{value}s fa', + 'settings.costDashboard.minutesAgo': '{value}m fa', + 'settings.costDashboard.hoursAgo': '{value}h fa', + 'settings.costDashboard.daysAgo': '{value}d fa', + 'settings.costDashboard.updated': 'Aggiornato', + 'settings.costDashboard.refresh': 'Aggiorna', + 'settings.costDashboard.utcNote': 'Giorni raggruppati in UTC', + 'settings.costDashboard.stackedNote': 'Ingresso + uscita impilati', + 'settings.costDashboard.modelBreakdownHint': 'Aggregato negli ultimi 7 giorni.', + 'settings.costDashboard.noDataHint': + "Invia un messaggio all'agente: l'utilizzo dei token dalla prossima chiamata al provider popolerà il grafico entro circa 10 secondi.", + 'settings.search.title': 'Motore di ricerca', + 'settings.search.menuDesc': + 'Imposta come predefinito la ricerca gestita da OpenHuman oppure collega il tuo provider con una chiave API.', + 'settings.search.description': + "Scegli il motore di ricerca utilizzato dall'agente oppure disabilita completamente gli strumenti di ricerca. Gestito utilizza il backend di OpenHuman (nessuna configurazione). Parallelo, Brave e Querit vengono eseguiti direttamente dalla tua macchina usando la tua chiave API.", + 'settings.search.engineAria': 'Motore di ricerca', + 'settings.search.engineDisabledLabel': 'Disabled', + 'settings.search.engineDisabledDesc': + "Rimuovi gli strumenti di ricerca dal contesto dell'agente e dall'elenco degli strumenti disponibili.", + 'settings.search.engineManagedLabel': 'OpenHuman Gestito', + 'settings.search.engineManagedDesc': + 'Predefinito. Instradato tramite il backend OpenHuman — nessuna chiave API necessaria.', 'settings.search.localManagedUnavailable': 'La ricerca gestita da OpenHuman non è disponibile per gli utenti locali. Aggiungi la tua chiave API Parallel o Brave per abilitare la ricerca web.', + 'settings.search.engineParallelLabel': 'parallelo', + 'settings.search.engineParallelDesc': + 'Direct Parallel API: ricerca, estrai, chatta, ricerca, arricchisci, strumenti per set di dati.', + 'settings.search.engineBraveLabel': 'Brave Cerca', + 'settings.search.engineBraveDesc': + 'Ricerca Diretta Brave API: strumenti per web, notizie, immagini e video.', + 'settings.search.engineQueritLabel': 'Querit', + 'settings.search.engineQueritDesc': + 'Direct Querit API: ricerca sul web con filtri per sito, intervallo di tempo, paese e lingua.', + 'settings.search.statusConfigured': 'Configurato', + 'settings.search.statusNeedsKey': 'Richiede la chiave API', + 'settings.search.fallbackToManaged': + 'Nessuna chiave configurata — la ricerca passerà a Gestito finché non viene salvata una chiave.', + 'settings.search.getApiKey': 'Ottieni chiave API', + 'settings.search.save': 'Salva', + 'settings.search.clear': 'Cancella', + 'settings.search.show': 'Mostra', + 'settings.search.hide': 'Nascondi', + 'settings.search.statusSaving': 'Salvataggio...', + 'settings.search.statusSaved': 'Salvato.', + 'settings.search.statusError': 'Non riuscito', + 'settings.search.parallelKeyLabel': 'Parallel API chiave', + 'settings.search.braveKeyLabel': 'Brave Cerca chiave API', + 'settings.search.queritKeyLabel': 'Chiave Querit API', + 'settings.search.placeholderStored': '•••••••• (memorizzato)', + 'settings.search.placeholderParallel': 'pk_...', + 'settings.search.placeholderBrave': 'BSA...', + 'settings.search.placeholderQuerit': 'Chiave Querit API', + 'settings.search.allowedSitesLabel': 'Siti web consentiti', + 'settings.search.allowedSitesHint': + "Host che l'assistente può aprire e leggere — tramite recupero web e lo strumento browser — uno per riga, es. reuters.com. Un host include anche i suoi sottodomini. La ricerca web stessa non è limitata da questo elenco.", + 'settings.search.allowedSitesAllOn': + "L'assistente può aprire qualsiasi sito web pubblico. Gli indirizzi locali e privati rimangono bloccati.", + 'settings.search.allowedSitesPlaceholder': 'reuters.com\napnews.com\ngithub.com', + 'settings.search.allowedSitesSave': 'Salva siti web', + 'settings.search.accessModeAria': 'Modalità di accesso al web', + 'settings.search.accessAllowAll': 'Consenti tutto', + 'settings.search.accessCustom': 'Personalizzato', + 'settings.search.accessBlockAll': 'Blocca tutto', + 'settings.search.accessBlockAllHint': + "Tutti gli accessi web sono bloccati — l'assistente non può aprire o leggere alcun sito web.", + 'settings.embeddings.title': 'Incorporamenti', + 'settings.embeddings.description': + 'Scegli il fornitore di embeddings che converte la memoria in vettori per la ricerca semantica. Cambiare fornitore, modello o dimensioni invalida i vettori memorizzati e richiede un reset completo della memoria.', + 'settings.embeddings.providerAria': 'Fornitore di embeddings', + 'settings.embeddings.statusConfigured': 'Configurato', + 'settings.embeddings.statusNeedsKey': 'Chiave API necessaria', + 'settings.embeddings.apiKeyLabel': 'Chiave API {provider}', + 'settings.embeddings.placeholderStored': '•••••••• (memorizzato)', + 'settings.embeddings.placeholderKey': 'Incolla la tua chiave API…', + 'settings.embeddings.keyStoredEncrypted': + 'La tua chiave API è memorizzata crittografata su questo dispositivo.', + 'settings.embeddings.show': 'Mostra', + 'settings.embeddings.hide': 'Nascondi', + 'settings.embeddings.save': 'Salva', + 'settings.embeddings.clear': 'Cancella', + 'settings.embeddings.model': 'Modello', + 'settings.embeddings.dimensions': 'Dimensioni', + 'settings.embeddings.customEndpoint': 'Endpoint personalizzato', + 'settings.embeddings.customModelPlaceholder': 'Nome modello', + 'settings.embeddings.customDimsPlaceholder': 'Dim', + 'settings.embeddings.applyCustom': 'Applica', + 'settings.embeddings.testConnection': 'Testa connessione', + 'settings.embeddings.testing': 'Test in corso…', + 'settings.embeddings.testSuccess': 'Connesso — {dims} dimensioni', + 'settings.embeddings.testFailed': 'Fallito: {error}', + 'settings.embeddings.saving': 'Salvataggio…', + 'settings.embeddings.saved': 'Salvato.', + 'settings.embeddings.errorPrefix': 'Fallito', + 'settings.embeddings.wipeTitle': 'Resettare i vettori della memoria?', + 'settings.embeddings.wipeBody': + 'Cambiare il fornitore di embeddings, il modello o le dimensioni cancellerà tutti i vettori della memoria. La memoria deve essere ricostruita prima che il recupero funzioni di nuovo. Questa operazione non può essere annullata.', + 'settings.embeddings.cancel': 'Annulla', + 'settings.embeddings.confirmWipe': 'Cancella e applica', + 'settings.embeddings.setupTitle': 'Configura {provider}', + 'settings.embeddings.saveAndSwitch': 'Salva e cambia', + 'settings.embeddings.optional': 'opzionale', + 'settings.embeddings.vectorSearchDisabled': + 'La ricerca vettoriale è disabilitata. Il richiamo della memoria utilizzerà solo il confronto delle parole chiave e la recenza — nessuna classificazione semantica.', + 'settings.embeddings.clearKey': 'Cancella chiave API', + 'pages.settings.ai.embeddings': 'Incorporamenti', + 'pages.settings.ai.embeddingsDesc': + 'Modello di codifica vettoriale per il recupero della memoria', + 'mcp.alphaBadge': 'Alfa', + 'mcp.alphaBannerText': + 'Il supporto del server MCP è in fase alpha iniziale. Il registro Smithery, il flusso di installazione e il collegamento degli strumenti potrebbero comportarsi in modo anomalo o cambiare forma tra le versioni.', + 'mcp.toolList.noTools': 'Nessuno strumento disponibile.', + 'mcp.setup.secretDialog.title': 'MCP Configurazione: inserisci il segreto', + 'mcp.setup.secretDialog.bodyPrefix': "L'agente di configurazione MCP è necessario", + 'mcp.setup.secretDialog.bodySuffix': + '. Il tuo valore viene inviato direttamente al processo principale e non entra mai nella conversazione AI.', + 'mcp.setup.secretDialog.inputLabel': 'Valore', + 'mcp.setup.secretDialog.inputPlaceholder': 'Incolla qui', + 'mcp.setup.secretDialog.show': 'Mostra', + 'mcp.setup.secretDialog.hide': 'Nascondi', + 'mcp.setup.secretDialog.submit': 'Invia', + 'mcp.setup.secretDialog.cancel': 'Annulla', + 'mcp.setup.secretDialog.submitting': 'Invio in corso...', + 'mcp.setup.secretDialog.errorPrefix': 'Impossibile inviare:', + 'mcp.setup.secretDialog.privacyNote': + 'Memorizzato criptato nella tabella dei segreti locali MCP. Mai registrato o inviato a un modello.', + 'devices.betaBadge': 'Beta', + 'devices.betaText': + 'Questa funzionalità è attualmente in beta. Associa i telefoni iOS a questo OpenHuman per usarli come client remoto.', 'devices.comingSoonDescription': "L'abbinamento dei dispositivi arriverà presto. Questa pagina sarà il punto centrale per abbinare gli iPhone e gestire i dispositivi connessi.", + 'devices.title': 'Dispositivi', + 'devices.pairIphone': 'Associa iPhone', + 'devices.noPaired': 'Nessun dispositivo associato', + 'devices.emptyState': + 'Scansiona un codice QR sul tuo iPhone per collegarlo a questa sessione OpenHuman.', + 'devices.devicePairedTitle': 'Dispositivo accoppiato.', + 'devices.devicePairedMessage': 'iPhone connesso correttamente.', + 'devices.deviceRevokedTitle': 'Dispositivo revocato', + 'devices.deviceRevokedMessage': '{label} rimosso.', + 'devices.revokeFailedTitle': 'Revoca non riuscita', + 'devices.online': 'Online', + 'devices.offline': 'Offline', + 'devices.lastSeenNever': 'Mai', + 'devices.lastSeenNow': 'Proprio ora', + 'devices.lastSeenMinutes': '{count}m fa', + 'devices.lastSeenHours': '{count}h fa', + 'devices.lastSeenDays': '{count}d fa', + 'devices.revoke': 'Revoca', + 'devices.revokeAria': 'Revoca {label}', + 'devices.confirmRevokeTitle': 'Revoca dispositivo?', + 'devices.confirmRevokeBody': + '{label} non potrà più connettersi. Questa operazione non può essere annullata.', + 'devices.loadFailed': 'Impossibile caricare i dispositivi: {message}', + 'devices.pairModal.title': 'Accoppia iPhone', + 'devices.pairModal.loading': 'Generazione del codice di accoppiamento…', + 'devices.pairModal.instructions': + "Apri l'app OpenHuman sul tuo iPhone e scansiona questo codice.", + 'devices.pairModal.expiresIn': 'Il codice scade tra ~{count} minuto', + 'devices.pairModal.expiresInPlural': 'Il codice scade tra ~{count} minuti', + 'devices.pairModal.showDetails': 'Mostra dettagli', + 'devices.pairModal.hideDetails': 'Nascondi dettagli', + 'devices.pairModal.channelId': 'ID canale', + 'devices.pairModal.pairingUrl': 'Associazione URL', + 'devices.pairModal.expiredTitle': 'QR code scaduto', + 'devices.pairModal.expiredBody': "Genera un nuovo codice per continuare l'associazione.", + 'devices.pairModal.generateNewCode': 'Genera nuovo codice', + 'devices.pairModal.successTitle': 'Accoppiato con iPhone', + 'devices.pairModal.autoClose': 'Chiusura automatica…', + 'devices.pairModal.errorPrefix': "Impossibile creare l'associazione: {message}", + 'devices.pairModal.errorTitle': 'Qualcosa è andato storto', + 'devices.pairModal.copyUrl': 'Copia', + 'mcp.catalog.searchAria': 'Cerca nel catalogo della fucina', + 'mcp.catalog.searchPlaceholder': 'Cerca nel catalogo della fucina...', + 'mcp.catalog.loadFailed': 'Impossibile caricare il catalogo', + 'mcp.catalog.noResults': 'Nessun server trovato.', + 'mcp.catalog.noResultsFor': 'Nessun server trovato per "{query}".', + 'mcp.catalog.loadMore': 'Carica altro', + 'mcp.configAssistant.title': 'Assistente di configurazione', + 'mcp.configAssistant.empty': + "Chiedi della configurazione, delle variabili d'ambiente richieste o dei passaggi di configurazione.", + 'mcp.configAssistant.suggestedValues': 'Valori suggeriti:', + 'mcp.configAssistant.valueHidden': '(valore nascosto)', + 'mcp.configAssistant.applySuggested': 'Applica i valori suggeriti', + 'mcp.configAssistant.reinstallHint': 'Reinstallare con questi valori per applicarli.', + 'mcp.configAssistant.thinking': 'Pensavo...', + 'mcp.configAssistant.inputPlaceholder': + 'Fai una domanda (Invio per inviare, Maiusc+Invio per andare a capo)', + 'mcp.configAssistant.send': 'Invia', + 'mcp.configAssistant.failedResponse': 'Impossibile ottenere risposta', + 'mcp.toolList.availableSingular': '{count} strumento disponibile', + 'mcp.toolList.availablePlural': '{count} strumenti disponibili', + 'mcp.toolList.tryTool': 'Provare', + 'mcp.toolList.tryToolAria': 'Apri il playground di esecuzione per {name}', + 'mcp.playground.title': 'Esegui {name}', + 'mcp.playground.close': 'Chiudere il parco giochi', + 'mcp.playground.inputSchema': 'Schema di input', + 'mcp.playground.argsLabel': 'Argomenti (JSON)', + 'mcp.playground.argsHelp': + "Digitare JSON corrispondente allo schema di input. L'input vuoto è considerato come {}.", + 'mcp.playground.runShortcut': '⌘/Ctrl + Invio per eseguire', + 'mcp.playground.format': 'Formato', + 'mcp.playground.invalidJson': 'JSON non valido', + 'mcp.playground.run': 'Esegui strumento', + 'mcp.playground.running': 'Correndo…', + 'mcp.playground.result': 'Risultato', + 'mcp.playground.resultError': 'Lo strumento ha restituito un errore', + 'mcp.playground.copyResult': 'Copia risultato', + 'mcp.playground.copied': 'Copiato', + 'mcp.playground.history': 'Storia', + 'mcp.playground.historyEmpty': 'Nessuna invocazione ancora in questa sessione.', + 'mcp.playground.historyLoad': 'Caricare', + 'mcp.playground.unexpectedError': "Errore imprevisto durante l'invocazione dello strumento.", + 'mcp.catalog.deployed': 'Distribuito', + 'mcp.catalog.installCount': '{count} installa', + 'app.update.dismissNotification': 'Ignora notifica di aggiornamento', + 'bootCheck.rpcAuthSuffix': 'su ogni RPC.', + 'app.localAiDownload.expandAria': "Espandi l'avanzamento del download", + 'app.localAiDownload.collapseAria': "Comprimi l'avanzamento del download", + 'app.localAiDownload.dismissAria': 'Ignora notifica di download', + 'mobile.nav.ariaLabel': 'Navigazione mobile', + 'progress.stepsAria': 'Passaggi di avanzamento', + 'progress.stepAria': 'Passaggio {current} di {total}', + 'workspace.vaultsTitle': 'Depositi di conoscenza', + 'workspace.vaultsDesc': + 'Punta a una cartella locale; i file vengono suddivisi in blocchi e sottoposti a mirroring nella memoria.', + 'calls.title': 'Chiamate', + 'calls.comingSoonBody': + "Le chiamate assistite dall'intelligenza artificiale saranno presto disponibili. Rimani sintonizzato.", + 'art.rotatingTetrahedronAria': 'Veicolo spaziale a tetraedro invertito rotante', + 'mcp.installed.title': 'Installato', + 'mcp.installed.browseCatalog': 'Sfoglia il catalogo', + 'mcp.installed.empty': 'Nessun server MCP ancora installato.', + 'mcp.installed.toolSingular': '{count} strumento', + 'mcp.installed.toolPlural': '{count} strumenti', + 'mcp.health.title': 'Salute', + 'mcp.health.summaryAria': 'Riepilogo dello stato della connessione MCP', + 'mcp.health.connectedCount': '{count} connesso', + 'mcp.health.connectingCount': '{count} collegamento', + 'mcp.health.errorCount': 'errore {count}', + 'mcp.health.disconnectedCount': '{count} inattivo', + 'mcp.health.retryAll': 'Riprova tutto ({count})', + 'mcp.health.retryAllAria': 'Riprova tutti i server {count} che hanno generato errore MCP', + 'mcp.health.disconnectAll': 'Scollegare tutto ({count})', + 'mcp.health.disconnectAllAria': 'Disconnetti tutti i server {count} collegati a MCP', + 'mcp.health.disconnectConfirm.title': 'Disconnettere tutti i server MCP?', + 'mcp.health.disconnectConfirm.body': + 'Questa azione disconnetterà {count} server MCP attualmente connessi. Le configurazioni installate e i segreti verranno mantenuti; puoi riconnettere qualsiasi server in seguito.', + 'mcp.health.disconnectConfirm.cancel': 'Annulla', + 'mcp.health.disconnectConfirm.confirm': 'Disconnetti tutto', + 'mcp.health.opErrorGeneric': 'Operazione di massa fallita. Vedere i registri.', + 'mcp.health.bulkPartialFailure': '{failed} di {total} server non riusciti. Controlla i log.', + 'mcp.installed.search.landmarkAria': 'Cerca server MCP installati', + 'mcp.installed.search.inputAria': 'Filtra i server MCP installati per nome', + 'mcp.installed.search.placeholder': 'Filtra server…', + 'mcp.installed.search.clearAria': 'Cancella filtro', + 'mcp.installed.search.countMatches': '{shown} di server {total}', + 'mcp.installed.search.noMatches': 'Nessun server corrisponde a "{query}".', + 'mcp.inventory.openButton': 'Inventario', + 'mcp.inventory.openAria': "Apri il pannello dell'inventario condivisibile MCP", + 'mcp.inventory.title': 'Inventario MCP Condivisibile', + 'mcp.inventory.subtitle': + 'Esporta i tuoi server MCP installati come un manifesto portatile senza segreti, oppure importane uno da un compagno di squadra. I valori di ambiente segreti non vengono mai inclusi o importati.', + 'mcp.inventory.close': "Chiudi il pannello dell'inventario", + 'mcp.inventory.tablistAria': "Sezioni dell'inventario", + 'mcp.inventory.tab.export': 'Esporta', + 'mcp.inventory.tab.import': 'Importa', + 'mcp.inventory.export.empty': + 'Nessun server MCP installato ancora — nulla da esportare. Installa prima uno dal catalogo.', + 'mcp.inventory.export.privacyTitle': "Cosa c'è in questo manifesto", + 'mcp.inventory.export.privacyBody': + "Nomi dei server, nomi qualificati, nomi CHIAVE delle variabili d'ambiente e solo configurazioni non segrete. Valori segreti, identificatori della tua macchina e timestamp per installazione sono intenzionalmente rimossi.", + 'mcp.inventory.export.serverCount': 'Server {count} in questo manifesto', + 'mcp.inventory.export.copy': 'Copia', + 'mcp.inventory.export.copied': 'Copiato', + 'mcp.inventory.export.copyAria': 'Copia il manifesto JSON negli appunti', + 'mcp.inventory.export.download': 'Scarica', + 'mcp.inventory.export.downloadAria': 'Scarica il manifesto come file JSON', + 'mcp.inventory.import.trustTitle': 'Considera i manifest importati come codice non attendibile', + 'mcp.inventory.import.trustBody': + 'Un server MCP è uno strumento che concedi al tuo agente. Importa manifest solo da fonti di cui ti fidi. Ogni installazione richiede il tuo clic esplicito; nulla viene installato automaticamente.', + 'mcp.inventory.import.pasteLabel': 'Incolla il manifesto JSON', + 'mcp.inventory.import.pastePlaceholder': + 'Incolla un manifesto qui, o carica un file.json qui sotto.', + 'mcp.inventory.import.preview': 'Anteprima', + 'mcp.inventory.import.clear': 'Chiaro', + 'mcp.inventory.import.uploadFile': 'o carica un file.json', + 'mcp.inventory.import.uploadFileAria': 'Carica un file manifest.json', + 'mcp.inventory.import.fileTooLarge': + 'Il file è troppo grande (oltre 1 MB). Rifiuto di caricarlo.', + 'mcp.inventory.import.fileReadFailed': 'Impossibile leggere il file.', + 'mcp.inventory.import.parseErrorPrefix': 'Impossibile analizzare il manifesto:', + 'mcp.inventory.import.previewHeading': 'Anteprima', + 'mcp.inventory.import.previewCounts': 'Server {total} — {newly} nuovi, {already} già installati', + 'mcp.inventory.import.previewEmpty': 'Il manifesto non contiene server.', + 'mcp.inventory.import.exportedFrom': 'Esportato da {exporter}', + 'mcp.inventory.import.exportedAt': 'a {when}', + 'mcp.inventory.import.statusNew': 'Nuovo', + 'mcp.inventory.import.statusAlreadyInstalled': 'Già installato', + 'mcp.inventory.import.envKeysLabel': 'Chiavi Env', + 'mcp.inventory.import.install': 'Installa', + 'mcp.inventory.import.installAria': 'Installa {name} da questo manifesto', + 'mcp.inventory.import.skipped': 'ignorato', + 'mcp.inventory.parseError.empty': 'Il manifest è vuoto.', + 'mcp.inventory.parseError.invalidJson': 'JSON non valido.', + 'mcp.inventory.parseError.rootNotObject': 'Il manifest deve essere un oggetto JSON alla radice.', + 'mcp.inventory.parseError.unsupportedSchema': + 'Schema del manifesto non supportato — questo file non è stato prodotto da un esportatore compatibile.', + 'mcp.inventory.parseError.missingExportedAt': 'Campo `exported_at` mancante o non valido.', + 'mcp.inventory.parseError.missingExportedBy': 'Campo `exported_by` mancante o non valido.', + 'mcp.inventory.parseError.invalidServers': 'Array `servers` mancante o non valido.', + 'mcp.inventory.parseError.serverNotObject': 'Una voce del server non è un oggetto.', + 'mcp.inventory.parseError.serverMissingQualifiedName': + 'Un ingresso del server manca del suo qualified_name.', + 'mcp.inventory.parseError.serverMissingDisplayName': + 'Un ingresso del server manca del suo display_name.', + 'mcp.inventory.parseError.serverEnvKeysNotArray': + 'Una voce del server ha un campo env_keys che non è un array di stringhe.', + 'mcp.inventory.parseError.serverContainsEnv': + 'Una voce del server contiene una mappa di valori `env`. Rifiuto di importare — i manifesti devono contenere solo env_keys (nomi), mai valori segreti.', + 'mcp.inventory.parseError.duplicateQualifiedName': + 'Nome_qualificato duplicato trovato nel manifesto. Ogni server deve apparire al massimo una volta.', + 'mcp.tab.loading': 'Caricamento MCP server...', + 'mcp.tab.emptyDetail': 'Selezionare un server o sfogliare il catalogo.', + 'mcp.install.loadingDetail': 'Caricamento dettagli server...', + 'mcp.install.back': 'Torna indietro', + 'mcp.install.title': 'Installa {name}', + 'mcp.install.requiredEnv': 'Variabili di ambiente richieste', + 'mcp.install.enterValue': 'Inserisci {key}', + 'mcp.install.show': 'Mostra', + 'mcp.install.hide': 'Nascondi', + 'mcp.install.configLabel': 'Configurazione (JSON opzionale)', + 'mcp.install.configPlaceholder': '{"key": "value"}', + 'mcp.install.missingRequired': '"{key}" è richiesto', + 'mcp.install.invalidJson': 'Configurazione JSON non è valida JSON', + 'mcp.install.failedDetail': 'Impossibile caricare i dettagli del server', + 'mcp.install.failedInstall': 'Installazione non riuscita', + 'mcp.install.button': 'Installa', + 'mcp.install.installing': 'Installazione...', + 'mcp.detail.suggestedEnvReady': 'Valori di ambiente suggeriti pronti', + 'mcp.detail.suggestedEnvBody': + 'Reinstalla questo server con i valori suggeriti per applicarli: {keys}', + 'mcp.detail.connect': 'Connetti', + 'mcp.detail.connecting': 'Connessione in corso...', + 'mcp.detail.disconnect': 'Disconnetti', + 'mcp.detail.hideAssistant': 'Nascondi assistente', + 'mcp.detail.helpConfigure': 'Aiutami a configurare', + 'mcp.detail.confirmUninstall': 'Confermi la disinstallazione?', + 'mcp.detail.confirmUninstallAction': 'Sì, disinstalla', + 'mcp.detail.uninstall': 'Disinstalla', + 'mcp.detail.envVars': 'Variabili di ambiente', + 'mcp.detail.tools': 'Strumenti', + 'onboarding.skipForNow': 'Salta per ora', + 'onboarding.localAI.continueWithCloud': 'Continua con Cloud', + 'onboarding.localAI.useLocalAnyway': + "Usa comunque l'IA locale (non consigliato per il tuo dispositivo)", + 'onboarding.localAI.useLocalInstead': "Usa invece l'IA locale (connetti Ollama ora)", + 'onboarding.localAI.setupIssue': 'Configurazione IA locale: si è verificato un problema', + 'autonomy.title': 'Autonomia agente', + 'autonomy.maxActionsLabel': 'Azioni massime per ora', + 'autonomy.maxActionsHelp': + 'Numero massimo di azioni dello strumento che un agente può eseguire per ora continuativa. Il nuovo valore si applica alla prossima chat. I cron job e i listener dei canali mantengono il limite attuale fino al riavvio di OpenHuman.', + 'autonomy.statusSaving': 'Salvataggio…', + 'autonomy.statusSaved': 'Salvato.', + 'autonomy.statusFailed': 'Non riuscito', + 'autonomy.unlimitedNote': 'Illimitato: limitazione della velocità disabilitata.', + 'autonomy.invalidIntegerMsg': + 'Deve essere un numero intero positivo (usa il preset Illimitato per nessun limite).', + 'autonomy.presetUnlimited': 'Illimitato (predefinito)', + 'triggers.toggleFailed': '{action} non riuscito per {trigger}: {message}', + 'settings.ai.overview': 'Panoramica sistema AI', + 'settings.ai.configStatus': 'Stato configurazione', + 'settings.ai.fallbackMode': 'Modalità di fallback', + 'settings.ai.loadedFromRuntime': 'Caricato dal runtime', + 'settings.ai.loadingDuration': 'Durata caricamento', + 'settings.ai.localRuntime': 'Runtime modello locale', + 'settings.ai.openManager': 'Apri manager', + 'settings.ai.retryDownload': 'Riprova download', + 'settings.ai.state': 'Stato', + 'settings.ai.targetModel': 'Modello target', + 'settings.ai.download': 'Scarica', + 'settings.ai.localModelUnavailable': 'Stato modello locale non disponibile.', + 'settings.ai.soulConfig': 'Configurazione persona SOUL', + 'settings.ai.refreshing': 'Aggiornamento...', + 'settings.ai.refreshSoul': 'Aggiorna SOUL', + 'settings.ai.loadingSoul': 'Caricamento configurazione SOUL...', + 'settings.ai.identity': 'Identità', + 'settings.ai.personality': 'Personalità', + 'settings.ai.safetyRules': 'Regole di sicurezza', + 'settings.ai.source': 'Origine', + 'settings.ai.loaded': 'Caricato', + 'settings.ai.toolsConfig': 'Configurazione TOOLS', + 'settings.ai.refreshTools': 'Aggiorna TOOLS', + 'settings.ai.toolsAvailable': 'Strumenti disponibili', + 'settings.ai.tools': 'strumenti', + 'settings.ai.activeSkills': 'Skill attive', + 'settings.ai.skills': 'skill', + 'settings.ai.skillsOverview': 'Panoramica skill', + 'settings.ai.refreshingAll': 'Aggiornamento totale...', + 'settings.ai.refreshAll': 'Aggiorna tutta la configurazione AI', + 'settings.notifications.suppressAll': 'Sopprimi tutte le notifiche', + 'settings.notifications.suppressAllDesc': + "Blocca tutti i toast di notifica dell'OS dalle app integrate indipendentemente dallo stato di focus.", + 'settings.notifications.toggleDnd': 'Attiva/disattiva Non disturbare', + 'settings.notifications.categories': 'Categorie', + 'settings.notifications.categoryFooter': + 'Disabilitare una categoria impedisce alle nuove notifiche di quel tipo di apparire nel centro notifiche. Le notifiche esistenti rimangono finché non vengono cancellate.', + 'settings.billing.movedToWeb': 'La fatturazione è stata spostata sul web', + 'settings.billing.openDashboard': 'Apri dashboard fatturazione', + 'settings.billing.movedToWebDesc': + "Le modifiche all'abbonamento, i metodi di pagamento, i crediti e le fatture sono ora gestiti su TinyHumans sul web.", + 'settings.billing.backToSettings': 'Torna alle impostazioni', + 'settings.billing.openingBrowser': 'Apertura del browser...', + 'settings.billing.browserNotOpen': 'Se il browser non si è aperto, usa il pulsante sopra.', + 'settings.billing.browserOpenFailed': + 'Impossibile aprire automaticamente il browser. Usa il pulsante sopra.', + 'settings.tools.chooseCapabilities': 'Scegli quali capacità OpenHuman può usare per tuo conto.', + 'settings.tools.saveChanges': 'Salva modifiche', + 'settings.tools.preferencesSaved': 'Preferenze salvate', + 'settings.tools.saveFailed': 'Salvataggio preferenze fallito. Riprova.', + 'settings.screenAwareness.mode': 'Modalità', + 'settings.screenAwareness.allExceptBlacklist': 'Tutti tranne blacklist', + 'settings.screenAwareness.whitelistOnly': 'Solo whitelist', + 'settings.screenAwareness.screenMonitoring': 'Monitoraggio schermo', + 'settings.screenAwareness.saveSettings': 'Salva impostazioni', + 'settings.screenAwareness.session': 'Sessione', + 'settings.screenAwareness.status': 'Stato', + 'settings.screenAwareness.active': 'Attivo', + 'settings.screenAwareness.stopped': 'Fermato', + 'settings.screenAwareness.remaining': 'Rimanente', + 'settings.screenAwareness.startSession': 'Avvia sessione', + 'settings.screenAwareness.stopSession': 'Ferma sessione', + 'settings.screenAwareness.analyzeNow': 'Analizza ora', + 'settings.screenAwareness.macosOnly': + 'La cattura desktop di Consapevolezza schermo e i controlli dei permessi sono attualmente supportati solo su macOS.', + 'connections.comingSoon': 'In arrivo', + 'connections.setUp': 'Configura', + 'connections.configured': 'Configurato', + 'connections.unavailable': 'Non disponibile', + 'connections.checking': 'Verifica…', + 'connections.walletConfigured': + 'Le identità locali EVM, BTC, Solana e Tron sono configurate dalla tua frase di recupero.', + 'connections.walletReady': + "Configura identità locali EVM, BTC, Solana e Tron da un'unica frase di recupero.", + 'connections.walletError': + 'Impossibile verificare lo stato del wallet. Tocca per riprovare dal pannello Frase di recupero.', + 'connections.walletChecking': 'Verifica stato wallet...', + 'connections.walletIdentities': 'Identità wallet', + 'connections.walletDerived': + 'Derivato localmente dalla tua frase di recupero e memorizzato solo come metadato sicuro.', + 'connections.privacySecurity': 'Privacy e sicurezza', + 'connections.privacySecurityDesc': + 'Tutti i dati e le credenziali sono memorizzati localmente con una politica di zero conservazione. Le tue informazioni sono crittografate e mai condivise con terze parti.', + 'channels.status.connecting': 'Connessione', + 'channels.status.notConfigured': 'Non configurato', + 'channels.noActiveRoute': 'Nessuna route attiva', + 'channels.activeRoute': 'Route attiva', + 'channels.loadingDefinitions': 'Caricamento definizioni canali...', + 'channels.channelConnections': 'Connessioni dei canali', + 'channels.configureAuthModes': + 'Configura le modalità di autenticazione per ciascun canale di messaggistica.', + 'channels.configNotAvailable': 'Configurazione per', + 'channels.channel': 'canale', + 'devOptions.coreModeNotSet': 'Modalità core: non impostata', + 'devOptions.coreModeNotSetDesc': + 'Il selettore del controllo di avvio non è stato ancora confermato. Usa Cambia modalità sul selettore per scegliere Locale o Cloud.', + 'devOptions.local': 'Locale', + 'devOptions.embeddedCoreSidecar': 'Sidecar core integrato', + 'devOptions.sidecarSpawned': "Avviato in-process dalla shell Tauri all'avvio dell'app.", + 'devOptions.cloud': 'Nuvola', + 'devOptions.remoteCoreRpc': 'RPC core remoto', + 'devOptions.token': 'Gettone', + 'devOptions.tokenNotSet': 'non impostato — RPC restituirà 401', + 'devOptions.triggerSentryTest': 'Attiva test Sentry (staging)', + 'devOptions.triggerSentryTestDesc': + 'Genera un errore taggato per verificare la pipeline Sentry. Issue #1072 — rimuovere dopo la verifica.', + 'devOptions.sendTestEvent': 'Invia evento di test', + 'devOptions.sending': 'Invio…', + 'devOptions.eventSent': 'Evento inviato', + 'devOptions.sentryDisabled': '(nessun ID: sentinella disabilitata in questa build)', + 'devOptions.failed': 'Fallito', + 'devOptions.appLogs': "Log dell'app", + 'devOptions.appLogsDesc': + 'Apri la cartella che contiene i file di log giornalieri. Allega il file più recente quando segnali un problema.', + 'devOptions.openLogsFolder': 'Apri cartella log', + 'mnemonic.phraseSaved': 'Frase di recupero salvata', + 'mnemonic.walletReady': + 'Le identità wallet multi-chain sono pronte. Ritorno alle impostazioni...', + 'mnemonic.writeDownWords': 'Scrivi queste', + 'mnemonic.wordsInOrder': + 'parole in ordine e conservale in un luogo sicuro. Questa frase protegge la tua chiave di crittografia locale e le identità wallet EVM, BTC, Solana e Tron.', + 'mnemonic.cannotRecover': + 'Questa frase non può mai essere recuperata se persa e dovrebbe rimanere completamente locale sul tuo dispositivo.', + 'mnemonic.copyToClipboard': 'Copia negli appunti', + 'mnemonic.alreadyHavePhrase': 'Ho già una frase di recupero', + 'mnemonic.consentSaved': + 'Ho salvato questa frase e acconsento ad usarla per la configurazione del wallet locale', + 'mnemonic.enterPhraseToRestore': + 'Inserisci la tua frase di recupero qui sotto per ripristinare le identità del wallet locale, oppure incolla la frase completa in qualsiasi campo (12 parole per i nuovi backup; le frasi a 24 parole delle versioni precedenti funzionano ancora).', + 'mnemonic.words': 'Parole', + 'mnemonic.validPhrase': 'Frase di recupero valida', + 'mnemonic.generateNewPhrase': 'Genera invece una nuova frase di recupero', + 'mnemonic.securingData': 'Protezione dei tuoi dati...', + 'mnemonic.saveRecoveryPhrase': 'Salva frase di recupero', + 'mnemonic.userNotLoaded': 'Utente non caricato. Accedi di nuovo o ricarica la pagina.', + 'mnemonic.invalidPhrase': 'Frase di recupero non valida. Controlla le parole e riprova.', + 'mnemonic.somethingWentWrong': 'Qualcosa è andato storto. Riprova.', + 'team.failedToCreate': 'Creazione team fallita', + 'team.invalidInviteCode': 'Codice invito non valido o scaduto', + 'team.failedToSwitch': 'Cambio team fallito', + 'team.failedToLeave': 'Uscita dal team fallita', + 'team.role.owner': 'Proprietario', + 'team.role.admin': 'Amministratore', + 'team.role.billingManager': 'Responsabile fatturazione', + 'team.role.member': 'Membro', + 'team.active': 'Attivo', + 'team.personalTeam': 'Team personale', + 'team.manageTeam': 'Gestisci team', + 'team.switching': 'Cambio...', + 'team.switch': 'Cambia', + 'team.leaving': 'Uscita...', + 'team.leave': 'Lascia', + 'team.yourTeams': 'I tuoi team', + 'team.createNewTeam': 'Crea nuovo team', + 'team.teamName': 'Nome team', + 'team.creating': 'Creazione...', + 'team.joinExistingTeam': 'Unisciti a un team esistente', + 'team.inviteCode': 'Codice invito', + 'team.joining': 'Adesione...', + 'team.join': 'Unisciti', + 'team.leaveTeam': 'Lascia team', + 'team.confirmLeave': 'Sei sicuro di voler lasciare', + 'team.leaveWarning': + "Perderai l'accesso al team e a tutte le sue risorse. Servirà un nuovo invito per rientrare.", + 'team.management': 'Gestione team', + 'team.notFound': 'Team non trovato', + 'team.accessDenied': 'Accesso negato', + 'team.members': 'Membri', + 'team.membersDesc': 'Gestisci i membri e i ruoli del team', + 'team.invites': 'Inviti', + 'team.invitesDesc': 'Genera e gestisci i codici di invito', + 'team.settings': 'Impostazioni squadra', + 'team.settingsDesc': 'Modifica il nome e le impostazioni della squadra', + 'team.editSettings': 'Modifica impostazioni squadra', + 'team.enterName': 'Inserisci il nome della squadra', + 'team.saving': 'Salvataggio...', + 'team.saveChanges': 'Salva Modifiche', + 'team.delete': 'Elimina team', + 'team.deleteDesc': 'Elimina definitivamente questo team', + 'team.deleting': 'Eliminazione in corso...', + 'team.failedToUpdate': 'Impossibile aggiornare il team', + 'team.failedToDelete': 'Impossibile eliminare il team', + 'team.manageTitle': 'Gestisci {name}', + 'team.planCreated': '{plan} Piano • Creato {date}', + 'team.confirmDelete': 'Sei sicuro di voler eliminare {name}?', + 'team.deleteWarning': + 'Questa operazione non può essere annullata. Tutti i dati del team verranno rimossi definitivamente.', + 'voice.title': 'Dettatura vocale', + 'voice.settings': 'Impostazioni voce', + 'voice.settingsDesc': "Tieni premuta l'hotkey per dettare e inserire testo nel campo attivo.", + 'voice.hotkey': 'Tasto di scelta rapida', + 'voice.activationMode': 'Modalità di attivazione', + 'voice.tapToToggle': 'Tocca per attivare/disattivare', + 'voice.writingStyle': 'Stile di scrittura', + 'voice.verbatimTranscription': 'Trascrizione letterale', + 'voice.naturalCleanup': 'Pulizia naturale', + 'voice.autoStart': 'Avvia il server vocale automaticamente con il core', + 'voice.customDictionary': 'Dizionario personalizzato', + 'voice.customDictionaryDesc': + "Aggiungi nomi, termini tecnici e parole di dominio per migliorare l'accuratezza del riconoscimento.", + 'voice.addWord': 'Aggiungi una parola...', + 'voice.sttDisabled': + 'La dettatura vocale è disabilitata finché il modello STT locale non è scaricato e pronto.', + 'voice.openLocalAiModel': 'Apri modello AI locale', + 'voice.serverRestarted': 'Server vocale riavviato con le nuove impostazioni.', + 'voice.settingsSaved': 'Impostazioni vocali salvate.', + 'voice.serverStarted': 'Server vocale avviato.', + 'voice.serverStopped': 'Server vocale fermato.', + 'voice.saveVoiceSettings': 'Salva impostazioni vocali', + 'voice.startVoiceServer': 'Avvia server vocale', + 'voice.stopVoiceServer': 'Ferma server vocale', + 'voice.debugTitle': 'Debug voce', + 'voice.failedToLoadSettings': 'Impossibile caricare le impostazioni vocali', + 'voice.failedToSaveSettings': 'Impossibile salvare le impostazioni vocali', + 'voice.failedToStartServer': 'Impossibile avviare il server vocale', + 'voice.failedToStopServer': 'Impossibile arrestare server vocale', + 'voice.sttDisabledPrefix': + 'La dettatura vocale è disabilitata finché il modello STT locale non viene scaricato. Usa il', + 'voice.sttDisabledSuffix': 'qui sopra per installare Whisper.', + 'voice.debug.failedToLoadVoiceDebugData': 'Impossibile caricare i dati di debug vocale.', + 'voice.debug.settingsSaved': 'Impostazioni di debug salvate.', + 'voice.debug.failedToSaveSettings': 'Impossibile salvare le impostazioni vocali', + 'voice.debug.runtimeStatus': 'Stato runtime', + 'voice.debug.runtimeStatusDesc': + 'Diagnostica in tempo reale per il server vocale e il motore di sintesi vocale.', + 'voice.debug.server': 'Server', + 'voice.debug.unavailable': 'Non disponibile', + 'voice.debug.ready': 'Pronto', + 'voice.debug.notReady': 'Non pronto', + 'voice.debug.hotkey': 'Tasto di scelta rapida', + 'voice.debug.notAvailable': 'n/d', + 'voice.debug.mode': 'Modalità', + 'voice.debug.transcriptions': 'Trascrizioni', + 'voice.debug.serverError': 'Errore server', + 'voice.debug.advancedSettings': 'Impostazioni avanzate', + 'voice.debug.advancedSettingsDesc': + 'Parametri di regolazione avanzata per la registrazione e il rilevamento del silenzio.', + 'voice.debug.minimumRecordingSeconds': 'Secondi minimi di registrazione', + 'voice.debug.silenceThreshold': 'Soglia di silenzio (RMS)', + 'voice.debug.silenceThresholdDesc': + 'Le registrazioni con energia inferiore a questa soglia vengono trattate come silenzio e saltate. Più basso = più sensibile.', + 'voice.providers.saved': 'Fornitori di servizi vocali salvati.', + 'voice.providers.failedToSave': 'Impossibile salvare i provider vocali', + 'voice.providers.ellipsis': '…', + 'voice.providers.installing': 'Installazione', + 'voice.providers.installingBusy': 'Installazione…', + 'voice.providers.reinstallLocally': 'Reinstalla localmente', + 'voice.providers.repair': 'Ripara', + 'voice.providers.retryLocally': 'Riprova localmente', + 'voice.providers.installLocally': 'Installa localmente', + 'voice.providers.whisperReady': 'Whisper è pronto.', + 'voice.providers.whisperInstallStarted': 'Installazione di Whisper avviata', + 'voice.providers.queued': 'in coda', + 'voice.providers.failedToInstallWhisper': 'Impossibile installare Whisper', + 'voice.providers.piperReady': 'Piper è pronto.', + 'voice.providers.piperInstallStarted': 'Installazione di Piper avviata', + 'voice.providers.failedToInstallPiper': 'Impossibile installare Piper', + 'voice.providers.title': 'Provider vocali', + 'voice.providers.desc': + "Scegli dove vengono eseguiti la trascrizione e la sintesi. Usa i pulsanti Installa localmente per scaricare i binari e i modelli nel tuo workspace. I provider locali possono essere salvati prima del completamento dell'installazione — nessuna configurazione manuale di WHISPER_BIN o PIPER_BIN richiesta.", + 'voice.providers.sttProvider': 'Provider di sintesi vocale', + 'voice.providers.sttProviderAria': 'Provider STT', + 'voice.providers.cloudWhisperProxy': 'Cloud (proxy Whisper)', + 'voice.providers.localWhisper': 'Whisper locale', + 'voice.providers.installRequired': '(installazione richiesta)', + 'voice.providers.whisperInstalledTitle': 'Whisper è installato. Fare clic per reinstallare.', + 'voice.providers.whisperDownloadTitle': + 'Scarica whisper.cpp e il modello GGML nel tuo workspace.', + 'voice.providers.installed': 'Installato', + 'voice.providers.installFailed': 'Installazione non riuscita', + 'voice.providers.notInstalled': 'Non installato', + 'voice.providers.whisperModel': 'Modello Whisper', + 'voice.providers.whisperModelAria': 'Modello Whisper', + 'voice.providers.whisperModelTiny': 'Piccolo (39 MB, più veloce)', + 'voice.providers.whisperModelBase': 'Base (74 MB)', + 'voice.providers.whisperModelSmall': 'Piccolo (244 MB)', + 'voice.providers.whisperModelMedium': 'Medio (769 MB, consigliato)', + 'voice.providers.whisperModelLargeTurbo': 'Grande v3 Turbo (1,5 GB, massima precisione)', + 'voice.providers.ttsProvider': 'Provider di sintesi vocale', + 'voice.providers.ttsProviderAria': 'Provider di sintesi vocale', + 'voice.providers.cloudElevenLabsProxy': 'Cloud (proxy ElevenLabs)', + 'voice.providers.localPiper': 'Piper locale', + 'voice.providers.piperInstalledTitle': 'Piper è installato. Fare clic per reinstallare.', + 'voice.providers.piperDownloadTitle': + 'Scarica Piper e la voce en_US-lessac-medium inclusa nel tuo workspace.', + 'voice.providers.piperVoice': 'Voce Piper', + 'voice.providers.piperVoiceAria': 'Voce Piper', + 'voice.providers.customVoiceOption': 'Altro (digitare di seguito)…', + 'voice.providers.customVoiceAria': 'ID voce Piper (personalizzato)', + 'voice.providers.customVoicePlaceholder': 'it_US-lessac-medium', + 'voice.providers.piperVoicesDesc': + 'Le voci provengono da huggingface.co/rhasspy/piper-voices. Cambiare voce potrebbe richiedere un clic su Installa/Reinstalla per scaricare il nuovo file .onnx.', + 'voice.providers.mascotVoice': 'Voce della mascotte', + 'voice.providers.mascotVoiceDescPrefix': + 'La voce ElevenLabs usata dalla mascotte per le risposte vocali è configurata in', + 'voice.providers.mascotSettings': 'Impostazioni della mascotte', + 'voice.providers.mascotVoiceDescSuffix': '.', + 'voice.providers.hotkeyPlaceholder': 'Fn', + 'voice.providers.piperPreset.lessacMedium': 'US · Lessac (neutro, consigliato)', + 'voice.providers.piperPreset.lessacHigh': 'Stati Uniti · Lessac (qualità superiore, più grande)', + 'voice.providers.piperPreset.ryanMedium': 'Stati Uniti · Ryan (uomo)', + 'voice.providers.piperPreset.amyMedium': 'Stati Uniti · Amy (donna)', + 'voice.providers.piperPreset.librittsHigh': 'Stati Uniti · LibriTTS (multi-altoparlante)', + 'voice.providers.piperPreset.alanMedium': 'GB · Alan (maschio)', + 'voice.providers.piperPreset.jennyDiocoMedium': 'GB · Jenny Dioco (femmina)', + 'voice.providers.piperPreset.northernEnglishMaleMedium': 'GB · Inglese settentrionale (maschio)', + 'voice.providers.chip.cloud': 'OpenHuman (Gestito)', + 'voice.providers.chip.cloudAria': 'Il provider gestito da OpenHuman è sempre abilitato', + 'voice.providers.chip.whisper': 'Whisper (Locale)', + 'voice.providers.chip.enableWhisper': 'Abilita Whisper STT locale', + 'voice.providers.chip.disableWhisper': 'Disabilita Whisper STT locale', + 'voice.providers.chip.piper': 'Piper (Locale)', + 'voice.providers.chip.enablePiper': 'Abilita Piper TTS locale', + 'voice.providers.chip.disablePiper': 'Disabilita Piper TTS locale', + 'voice.providers.chip.enableProvider': 'Enable', + 'voice.providers.chip.disableProvider': 'Disable', + 'voice.providers.chip.apiKeyLabel': 'Chiave API', + 'voice.providers.chip.apiKeyPlaceholder': 'sk-…', + 'voice.providers.chip.comingSoon': 'prossimamente', + 'voice.modal.title': 'Configure', + 'voice.modal.desc': + 'Inserisci la tua chiave API per abilitare questo provider. Puoi testare la connessione prima di salvare.', + 'voice.modal.testKey': 'Testa chiave', + 'voice.modal.testing': 'Test in corso…', + 'voice.modal.saveAndEnable': 'Salva e abilita', + 'voice.modal.enable': 'Enable', + 'voice.modal.whisperDesc': + 'Scegli una dimensione del modello e installa il binario Whisper e il modello GGML nel tuo workspace. I modelli più grandi sono più accurati ma più lenti.', + 'voice.modal.piperDesc': + 'Scegli una voce e installa il binario Piper e il modello ONNX nel tuo workspace. Piper funziona completamente offline con bassa latenza.', + 'voice.routing.title': 'Routing vocale', + 'voice.routing.desc': + 'Scegli quali provider abilitati gestiscono la sintesi vocale e il testo vocale.', + 'voice.routing.save': 'Save', + 'voice.routing.testStt': 'Testa STT', + 'voice.routing.testTts': 'Testa TTS', + 'voice.routing.elevenlabsVoice': 'Voce ElevenLabs', + 'voice.routing.elevenlabsVoiceAria': 'Selezione voce ElevenLabs', + 'voice.routing.elevenlabsVoiceIdAria': 'ID voce ElevenLabs (personalizzato)', + 'voice.routing.elevenlabsVoiceDesc': + 'Scegli una voce selezionata o incolla un ID voce personalizzato dalla tua dashboard ElevenLabs.', + 'voice.externalProviders.title': 'Provider vocali esterni', + 'voice.externalProviders.desc': + 'Connetti API STT/TTS di terze parti come Deepgram, ElevenLabs o OpenAI direttamente.', + 'voice.externalProviders.keySet': 'Chiave impostata', + 'voice.externalProviders.noKey': 'Nessuna chiave API', + 'voice.externalProviders.test': 'Test', + 'voice.externalProviders.testing': 'Test in corso…', + 'voice.externalProviders.remove': 'Remove', + 'voice.externalProviders.provider': 'Provider', + 'voice.externalProviders.selectProvider': 'Seleziona un provider…', + 'voice.externalProviders.apiKey': 'Chiave API', + 'voice.externalProviders.apiKeyPlaceholder': 'sk-…', + 'voice.externalProviders.add': 'Add', + 'autocomplete.title': 'Autocompletamento', + 'autocomplete.settings': 'Impostazioni', + 'autocomplete.acceptWithTab': 'Accetta con Tab', + 'autocomplete.stylePreset': 'Preset di stile', + 'autocomplete.style.balanced': 'Bilanciato', + 'autocomplete.style.concise': 'Conciso', + 'autocomplete.style.formal': 'Formale', + 'autocomplete.style.casual': 'Informale', + 'autocomplete.style.custom': 'Personalizzato', + 'autocomplete.disabledApps': 'App disabilitate (un bundle/app token per riga)', + 'autocomplete.saveSettings': 'Salva impostazioni', + 'autocomplete.saving': 'Salvataggio…', + 'autocomplete.runtime': 'Runtime', + 'autocomplete.running': 'In esecuzione', + 'autocomplete.start': 'Avvia', + 'autocomplete.stop': 'Ferma', + 'autocomplete.settingsSaved': 'Impostazioni di autocompletamento salvate.', + 'autocomplete.started': 'Autocompletamento avviato.', + 'autocomplete.didNotStart': 'Autocompletamento non avviato. Verifica che sia abilitato.', + 'autocomplete.stopped': 'Autocompletamento fermato.', + 'autocomplete.advancedSettings': 'Impostazioni avanzate', + 'autocomplete.debugTitle': 'Debug autocompletamento', + 'chat.agentChat': 'Chat agente', + 'chat.overrides': 'Override', + 'chat.model': 'Modello', + 'chat.temperature': 'Temperatura', + 'chat.conversation': 'Conversazione', + 'chat.startAgentConversation': "Inizia una conversazione con l'agente.", + 'chat.you': 'Tu', + 'chat.agent': 'Agente', + 'chat.askAgent': "Chiedi qualsiasi cosa all'agente...", + 'chat.sendMessage': 'Invia messaggio', + 'composio.triageTitle': 'Trigger delle integrazioni', + 'composio.triageDesc': + "Quando attivo, ogni trigger Composio in arrivo passa per uno step di triage AI che classifica l'evento e può avviare azioni automatiche — un turno LLM locale per trigger. Disabilita globalmente o per singola integrazione se preferisci la revisione manuale. Se la variabile d'ambiente", + 'composio.disableAllTriage': 'Disabilita il triage AI per tutti i trigger', + 'composio.triggersStillRecorded': + 'I trigger vengono comunque registrati nella cronologia — nessun turno LLM viene eseguito.', + 'composio.disableSpecificIntegrations': 'Disabilita il triage AI per integrazioni specifiche', + 'composio.settingsSaved': 'Impostazioni salvate', + 'composio.saveFailed': 'Salvataggio fallito. Riprova.', + 'cron.title': 'Cron Job', + 'cron.scheduledJobs': 'Job pianificati', + 'cron.manageCronJobs': 'Gestisci i cron job dal core scheduler.', + 'cron.refreshCronJobs': 'Aggiorna cron job', + 'localModel.modelStatus': 'Stato del modello', + 'localModel.downloadModels': 'Scarica modelli', + 'localModel.usage': 'Utilizzo', + 'localModel.usageDesc': + 'Scegli quali sottosistemi girano sul modello locale. Quelli disattivati usano il cloud.', + 'localModel.enableRuntime': 'Abilita runtime AI locale', + 'localModel.enableRuntimeDesc': + "Interruttore principale. Disattivato di default — Ollama resta inattivo. Quando attivo, il tree summarizer, lo screen intelligence e l'autocompletamento usano sempre il modello locale.", + 'localModel.advancedSettings': 'Impostazioni avanzate', + 'localModel.debugTitle': 'Debug modello locale', + 'screenAwareness.debugTitle': 'Debug consapevolezza schermo', + 'screenAwareness.debug.debugAndDiagnostics': 'Debug e diagnostica', + 'screenAwareness.debug.collapse': 'Comprimi', + 'screenAwareness.debug.expand': 'Espandi', + 'screenAwareness.debug.failedToSave': 'Impossibile salvare i dati di Screen Intelligence', + 'screenAwareness.debug.policyTitle': 'Policy di Screen Intelligence', + 'screenAwareness.debug.baselineFps': 'FPS di base', + 'screenAwareness.debug.useVisionModel': 'Utilizza modello di visione', + 'screenAwareness.debug.useVisionModelDesc': + 'Invia gli screenshot a un LLM con visione per un contesto più ricco. Se disattivato, viene utilizzato solo il testo OCR con un LLM testuale — più veloce e senza modello visivo.', + 'screenAwareness.debug.keepScreenshots': 'Conserva screenshot', + 'screenAwareness.debug.keepScreenshotsDesc': + "Salva gli screenshot acquisiti nell'area di lavoro invece di eliminarli dopo l'elaborazione", + 'screenAwareness.debug.allowlist': 'Lista consentita (una regola per riga)', + 'screenAwareness.debug.denylist': 'Lista vietata (una regola per riga)', + 'screenAwareness.debug.saveSettings': 'Salva impostazioni di Screen Intelligence', + 'screenAwareness.debug.sessionStats': 'Statistiche sessione', + 'screenAwareness.debug.framesEphemeral': 'Frame (effimeri)', + 'screenAwareness.debug.panicStop': 'Arresto antipanico', + 'screenAwareness.debug.defaultPanicHotkey': 'Cmd+Maiusc+.', + 'screenAwareness.debug.vision': 'Visione', + 'screenAwareness.debug.idle': 'inattiva', + 'screenAwareness.debug.visionQueue': 'Coda visioni', + 'screenAwareness.debug.lastVision': 'Ultima visione', + 'screenAwareness.debug.notAvailable': 'n/a', + 'screenAwareness.debug.visionSummaries': 'Riepiloghi visione', + 'screenAwareness.debug.refreshing': 'Aggiornamento in corso…', + 'screenAwareness.debug.noSummaries': 'Ancora nessun riepilogo.', + 'screenAwareness.debug.unknownApp': 'App sconosciuta', + 'screenAwareness.debug.macosOnly': + 'Screen Intelligence V1 è attualmente supportato solo su macOS.', + 'memory.debugTitle': 'Debug memoria', + 'memory.documents': 'Documenti', + 'memory.filterByNamespace': 'Filtra per spazio dei nomi...', + 'memory.refresh': 'Aggiorna', + 'memory.noDocumentsFound': 'Nessun documento trovato.', + 'memory.delete': 'Elimina', + 'memory.rawResponse': 'Risposta non elaborata', + 'memory.namespaces': 'Spazi dei nomi', + 'memory.noNamespacesFound': 'Nessuno spazio dei nomi trovato.', + 'memory.queryRecall': 'Query e richiamo', + 'memory.namespace': 'Spazio dei nomi', + 'memory.queryText': 'Query testo...', + 'memory.defaultMaxChunks': '10', + 'memory.maxChunks': 'blocchi massimi', + 'memory.query': 'Query', + 'memory.recall': 'Richiama', + 'memory.queryLabel': 'Query', + 'memory.recallLabel': 'Richiama', + 'memory.queryResult': 'Risultato della query', + 'memory.recallResult': 'Richiama risultato', + 'memory.clearNamespace': 'Cancella spazio dei nomi', + 'memory.clearNamespaceDescription': + "Elimina definitivamente tutti i documenti all'interno di un namespace.", + 'memory.selectNamespace': 'Seleziona lo spazio dei nomi...', + 'memory.exampleNamespace': 'ad es. skill:gmail:user@example.com', + 'memory.clear': 'Cancella', + 'memory.deleteConfirm': 'Eliminare il documento "{documentId}" nel namespace "{namespace}"?', + 'memory.clearNamespaceConfirm': + 'Questa operazione eliminerà definitivamente TUTTI i documenti nel namespace "{namespace}". Continuare?', + 'memory.clearNamespaceSuccess': 'Spazio dei nomi "{namespace}" cancellato.', + 'memory.clearNamespaceEmpty': 'Niente da cancellare in "{namespace}".', + 'webhooks.debugTitle': 'Debug webhook', + 'webhooks.failedToLoadDebugData': 'Impossibile caricare i dati di debug del webhook', + 'webhooks.clearLogsConfirm': 'Cancellare tutti i registri di debug del webhook acquisiti?', + 'webhooks.failedToClearLogs': 'Impossibile cancellare i registri del webhook', + 'webhooks.loading': 'Caricamento...', + 'webhooks.refresh': 'Aggiorna', + 'webhooks.clearing': 'Cancellazione...', + 'webhooks.clearLogs': 'Cancella registri', + 'webhooks.registered': 'registrato', + 'webhooks.captured': 'catturato', + 'webhooks.live': 'live', + 'webhooks.disconnected': 'disconnesso', + 'webhooks.lastEvent': 'Ultimo evento', + 'webhooks.at': 'alle', + 'webhooks.registeredWebhooks': 'Webhook registrati', + 'webhooks.noActiveRegistrations': 'Nessuna registrazione attiva.', + 'webhooks.resolvingBackendUrl': 'Risoluzione del backend URL…', + 'webhooks.capturedRequests': 'Richieste catturate', + 'webhooks.noRequestsCaptured': 'Nessuna richiesta webhook ancora catturata.', + 'webhooks.unrouted': 'non indirizzato', + 'webhooks.pending': 'in sospeso', + 'webhooks.requestHeaders': 'Intestazioni della richiesta', + 'webhooks.queryParams': 'Parametri della query', + 'webhooks.requestBody': 'Corpo della richiesta', + 'webhooks.responseHeaders': 'Risposta Intestazioni', + 'webhooks.responseBody': 'Corpo della risposta', + 'webhooks.rawPayload': 'Payload non elaborato', + 'webhooks.empty': '[vuoto]', + 'providerSetup.error.defaultDetails': 'Configurazione del provider non riuscita.', + 'providerSetup.error.providerFallback': 'Il provider', + 'providerSetup.error.credentialsRejected': + '{provider} ha rifiutato le credenziali. Controlla la chiave API e riprova.', + 'providerSetup.error.endpointNotRecognized': + "{provider} non ha riconosciuto l'endpoint. Controlla l'URL di base e riprova.", + 'providerSetup.error.providerUnavailable': + '{provider} non è disponibile al momento. Riprova o controlla lo stato del provider.', + 'providerSetup.error.unreachable': + "Impossibile raggiungere {provider}. Controlla l'URL dell'endpoint e la connessione di rete, poi riprova.", + 'providerSetup.error.couldNotReachWithMessage': 'Impossibile raggiungere {provider}: {message}', + 'providerSetup.error.technicalDetails': 'Dettagli tecnici', + 'notifications.routingTitle': 'Instradamento notifiche', + 'notifications.routing.pipelineStats': 'Statistiche pipeline', + 'notifications.routing.total': 'Totale', + 'notifications.routing.unread': 'Non letti', + 'notifications.routing.unscored': 'Senza punteggio', + 'notifications.routing.intelligenceTitle': 'Intelligence di notifica', + 'notifications.routing.intelligenceDesc': + "Ogni notifica dagli account connessi viene valutata da un modello IA locale. Le notifiche ad alta priorità vengono automaticamente inoltrate all'agente orchestratore affinché nulla di importante vada perso.", + 'notifications.routing.howItWorks': 'Come funziona', + 'notifications.routing.level.drop': 'Elimina', + 'notifications.routing.level.dropDesc': 'Rumore/spam: archiviato ma non emerso', + 'notifications.routing.level.acknowledge': 'Riconosci', + 'notifications.routing.level.acknowledgeDesc': 'Bassa priorità: mostrato nel centro notifiche', + 'notifications.routing.level.react': 'Reagisci', + 'notifications.routing.level.reactDesc': + "Media priorità — attiva una risposta focalizzata dell'agente", + 'notifications.routing.level.escalate': 'Escalation', + 'notifications.routing.level.escalateDesc': "Alta priorità — inoltrata all'agente orchestratore", + 'notifications.routing.perProvider': 'Routing per provider', + 'notifications.routing.threshold': 'Soglia', + 'notifications.routing.routeToOrchestrator': "Inoltra all'orchestratore", + 'notifications.routing.loadSettingsError': + 'Impossibile caricare le impostazioni. Riapri questo pannello per riprovare.', + 'common.reload': 'Ricarica', + 'common.skip': 'Salta', + 'common.disable': 'Disabilita', + 'common.enable': 'Abilita', + 'chat.safetyTimeout': + "Nessuna risposta dall'agente dopo 2 minuti. Riprova o controlla la connessione.", + 'chat.filter.all': 'Tutti', + 'chat.filter.work': 'Lavoro', + 'chat.filter.briefing': 'Briefing', + 'chat.filter.notification': 'Notifica', + 'chat.filter.workers': 'Worker', + 'chat.selectThread': 'Seleziona un thread', + 'chat.threads': 'Thread', + 'chat.noThreads': 'Nessun thread', + 'chat.noLabelThreads': 'Nessun thread "{label}"', + 'chat.noWorkerThreads': 'Nessun thread worker', + 'chat.deleteThread': 'Elimina thread', + 'chat.deleteThreadConfirm': 'Sei sicuro di voler eliminare "{title}"?', + 'chat.untitledThread': 'Thread senza titolo', + 'chat.editThreadTitle': 'Modifica titolo del thread', + 'chat.hideSidebar': 'Nascondi barra laterale', + 'chat.showSidebar': 'Mostra barra laterale', + 'chat.newThreadShortcut': 'Nuovo thread (/new)', + 'chat.new': 'Nuovo', + 'chat.failedToLoadMessages': 'Impossibile caricare i messaggi', + 'chat.thinkingIteration': 'Sto pensando... ({n})', + 'chat.thinkingDots': 'Sto pensando...', + 'chat.approachingLimit': 'Limite di utilizzo in avvicinamento', + 'chat.approachingLimitMsg': 'Hai usato il {pct}% della tua quota disponibile.', + 'chat.upgrade': 'Aggiorna', + 'chat.weeklyLimitHit': 'Hai raggiunto il limite settimanale.', + 'chat.resets': 'Reset', + 'chat.topUpToContinue': 'Ricarica per continuare.', + 'chat.budgetComplete': + 'Il tuo budget incluso è esaurito. Aggiungi crediti o passa a un piano superiore per continuare.', + 'chat.topUp': 'Ricarica', + 'chat.cycle': 'Ciclo', + 'chat.cycleSpent': 'Speso in questo ciclo', + 'chat.cycleRemaining': 'Rimanente', + 'chat.left': 'rimasti', + 'chat.setup': 'Configura', + 'chat.switchToText': 'Passa al testo', + 'chat.transcribing': 'Trascrizione...', + 'chat.stopAndSend': 'Ferma e invia', + 'chat.startTalking': 'Inizia a parlare', + 'chat.playingVoiceReply': 'Riproduzione risposta vocale', + 'chat.voiceHint': 'Usa il microfono per parlare', + 'chat.micUnavailable': 'Microfono non disponibile', + 'chat.turn': 'turno', + 'chat.turns': 'turni', + 'chat.openWorkerThread': 'Apri thread worker', + 'chat.attachment.attach': 'Allega immagine', + 'chat.attachment.remove': 'Rimuovi {name}', + 'chat.attachment.tooMany': 'Massimo {max} immagini per messaggio', + 'chat.attachment.tooLarge': "L'immagine supera il limite di dimensione di {max}", + 'chat.attachment.unsupportedType': 'Tipo di file non supportato. Usa PNG, JPEG, WebP, GIF o BMP.', + 'chat.attachment.readFailed': 'Impossibile leggere il file', + 'memory.searchAria': 'Cerca memoria', + 'memory.searchPlaceholder': 'Cerca voci di memoria...', + 'memory.sourceFilter.all': 'Tutte le origini', + 'memory.sourceFilter.email': 'E-mail', + 'memory.sourceFilter.calendar': 'Calendario', + 'memory.sourceFilter.telegram': 'Telegram', + 'memory.sourceFilter.aiInsight': 'Insight IA', + 'memory.sourceFilter.system': 'Sistema', + 'memory.sourceFilter.trading': 'Trading', + 'memory.sourceFilter.security': 'Sicurezza', + 'memory.ingestionActivity': 'Attività di ingestione', + 'memory.events': 'eventi', + 'memory.event': 'evento', + 'memory.overTheLast': 'negli ultimi', + 'memory.months': 'mesi', + 'memory.peak': 'Picco', + 'memory.perDay': '/giorno', + 'memory.less': 'Meno', + 'memory.more': 'Più', + 'memory.on': 'il', + 'memory.loading': 'Caricamento memoria', + 'memory.fetching': 'Recupero delle tue voci di memoria...', + 'memory.analyzing': 'Analisi della memoria', + 'memory.analyzingHint': 'Elaborazione delle tue memorie per estrarre insight...', + 'memory.noMatches': 'Nessuna corrispondenza trovata', + 'memory.noMatchesHint': 'Prova a cambiare i termini di ricerca o i filtri.', + 'memory.allCaughtUp': 'Tutto aggiornato', + 'memory.allCaughtUpHint': 'Nessuna nuova voce di memoria da elaborare.', + 'memory.noAnalysis': 'Nessuna analisi', + 'memory.noAnalysisHint': "Esegui un'analisi per scoprire pattern nelle tue memorie.", + 'memory.emptyHint': 'Inizia a interagire per creare le tue prime memorie.', + 'mic.unavailable': 'Microfono non disponibile', + 'mic.permissionDenied': 'Permesso microfono negato', + 'mic.failedToStartRecorder': 'Avvio del registratore fallito', + 'mic.transcribing': 'Trascrizione...', + 'mic.tapToSend': 'Tocca per inviare', + 'mic.waitingForAgent': "In attesa dell'agente...", + 'mic.tapAndSpeak': 'Tocca e parla', + 'mic.stopRecording': 'Ferma registrazione e invia', + 'mic.startRecording': 'Avvia registrazione', + 'mic.deviceSelector': 'Dispositivo microfono', + 'mic.tapToSendCountdown': 'Tocca per inviare ({seconds}s)', + 'token.usageLimitReached': 'Limite di utilizzo raggiunto', + 'token.approachingLimit': 'Limite in avvicinamento', + 'token.planClickForDetails': 'piano - clicca per dettagli', + 'token.sessionTokens': 'Ingresso: {in} | Uscita: {out} | Turni: {turns}', + 'token.limit': 'Limite raggiunto', + 'catalog.noCapabilityBinding': 'Nessun binding di capacità', + 'catalog.downloadFailed': 'Download fallito', + 'catalog.active': 'Attivo', + 'catalog.installed': 'Installato', + 'catalog.notDownloaded': 'Non scaricato', + 'catalog.inUse': 'In uso', + 'catalog.use': 'Usa', + 'catalog.deleteModel': 'Elimina modello', + 'catalog.download': 'Scarica', + 'navigator.recent': 'Recenti', + 'navigator.today': 'Oggi', + 'navigator.thisWeek': 'Questa settimana', + 'navigator.sources': 'Origini', + 'navigator.email': 'Email', + 'navigator.slack': 'Slack', + 'navigator.chat': 'Chat', + 'navigator.documents': 'Documenti', + 'navigator.people': 'Persone', + 'navigator.topics': 'Argomenti', + 'dreams.description': + "I sogni sono riflessioni generate dall'AI che sintetizzano i pattern dalle tue memorie.", + 'dreams.comingSoon': 'In arrivo', + 'assignment.memoryLlm': 'LLM memoria', + 'assignment.memoryLlmAria': 'Selezione LLM memoria', + 'assignment.embedder': 'Incorpora', + 'assignment.loaded': 'Caricato', + 'assignment.notDownloaded': 'Non scaricato', + 'assignment.usedForExtractSummarise': 'Usato per estrazione e riassunto', + 'insights.knownFacts': 'Fatti noti', + 'insights.preferences': 'Preferenze', + 'insights.relationships': 'Relazioni', + 'insights.skills': 'Competenze', + 'insights.opinions': 'Opinioni', + 'insights.other': 'Altro', + 'insights.title': 'Insight', + 'insights.empty': + 'Nessuna insight. Le insight vengono generate man mano che la tua memoria cresce.', + 'insights.description': 'Basato su {count} relazioni nel tuo grafo di memoria.', + 'insights.items': 'elementi', + 'insights.more': 'altri', + 'calls.joiningCall': 'Accesso alla chiamata in corso', + 'calls.meetWindowOpening': 'La finestra di Meet si sta aprendo...', + 'calls.failedToStart': 'Avvio della chiamata Meet fallito', + 'calls.couldNotStart': 'Impossibile avviare la chiamata', + 'calls.failedToClose': 'Chiusura chiamata fallita', + 'calls.couldNotClose': 'Impossibile chiudere la chiamata', + 'calls.joinMeet': 'Unisciti a una chiamata Google Meet', + 'calls.joinMeetDescription': 'Inserisci un link Google Meet per unirti.', + 'calls.meetLink': 'Link Meet', + 'calls.displayName': 'Nome visualizzato', + 'calls.openingMeet': 'Apertura di Meet...', + 'calls.joinCall': 'Unisciti alla chiamata', + 'calls.activeCalls': 'Chiamate attive', + 'calls.leave': 'Esci', + 'workspace.wipeConfirm': + 'Sei sicuro di voler cancellare tutta la memoria? Questa azione non può essere annullata.', + 'workspace.resetTreeConfirm': "Sei sicuro di voler ricostruire l'albero di memoria?", + 'workspace.wipeTitle': 'Cancella memoria', + 'workspace.resetting': 'Ripristino...', + 'workspace.resetMemory': 'Ripristina memoria', + 'workspace.resetTreeTitle': 'Ricostruisci albero di memoria', + 'workspace.rebuilding': 'Ricostruzione...', + 'workspace.resetMemoryTree': 'Ripristina albero di memoria', + 'workspace.building': 'Costruzione...', + 'workspace.buildSummaryTrees': 'Costruisci alberi di riassunto', + 'workspace.viewVault': 'Visualizza vault', + 'workspace.openingVaultTitle': 'Apertura del vault in Obsidian', + 'workspace.openingVaultMessage': + 'Se Obsidian non si apre, installalo da obsidian.md oppure usa Mostra cartella. Percorso vault:', + 'workspace.openVaultFailedTitle': 'Impossibile aprire il vault in Obsidian', + 'workspace.openVaultFailedMessage': + 'Utilizzare Reveal Folder per aprire direttamente la directory del vault. Percorso del vault:', + 'workspace.revealVaultFailed': 'Impossibile mostrare la cartella vault', + 'workspace.revealFolder': 'Rivela cartella', + 'workspace.checkingVault': 'Controllo in corso…', + 'workspace.vaultNotRegisteredHelp': + 'Obsidian apre solo le cartelle che hai aggiunto come vault. In Obsidian, scegli "Apri cartella come vault" e seleziona la cartella qui sotto — devi farlo solo una volta. Poi fai clic su Visualizza vault.', + 'workspace.obsidianNotFoundHelp': + 'Non abbiamo trovato Obsidian su questo dispositivo. Installalo, oppure — se è installato in una posizione non standard — imposta la sua cartella di configurazione in Avanzate.', + 'workspace.openAnyway': 'Apri comunque in Obsidian', + 'workspace.installObsidian': 'Installa Obsidian', + 'workspace.obsidianAdvanced': 'Obsidian installato altrove?', + 'workspace.obsidianConfigDirLabel': 'Cartella di configurazione Obsidian', + 'workspace.obsidianConfigDirHint': + 'Percorso della cartella contenente obsidian.json (es. ~/.config/obsidian). Lascia vuoto per il rilevamento automatico.', + 'workspace.obsidianConfigDirPlaceholder': '~/.config/obsidian', + 'workspace.graphLoadFailed': 'Impossibile caricare il grafo di memoria', + 'workspace.loadingGraph': 'Caricamento grafo di memoria...', + 'workspace.graphViewMode': 'Modalità di visualizzazione grafo di memoria', + 'workspace.trees': 'Alberi', + 'workspace.contacts': 'Contatti', + 'graph.noContactMentions': 'Nessuna menzione di contatto', + 'graph.noMemory': 'Nessuna memoria', + 'graph.source': 'Origine', + 'graph.topic': 'Argomento', + 'graph.global': 'Globale', + 'graph.document': 'Documento', + 'graph.contact': 'Contatto', + 'graph.nodes': 'nodi', + 'graph.parentChild': 'genitore-figlio', + 'graph.documentContact': 'documento-contatto', + 'graph.link': 'collegamento', + 'graph.links': 'collegamenti', + 'graph.children': 'figli', + 'graph.clickToOpenObsidian': 'Clic per aprire in Obsidian', + 'graph.person': 'Persona', + 'modal.dontShowAgain': 'Non mostrare suggerimenti simili', + 'reflections.loading': 'Caricamento riflessioni...', + 'reflections.empty': 'Nessuna riflessione', + 'reflections.title': 'Riflessioni', + 'reflections.proposedAction': 'Azione proposta', + 'reflections.act': 'Agisci', + 'reflections.dismiss': 'Ignora', + 'whatsapp.chatsSynced': 'chat sincronizzate', + 'whatsapp.chatSynced': 'chat sincronizzata', + 'sync.active': 'Attivo', + 'sync.recent': 'Recenti', + 'sync.idle': 'Inattivo', + 'sync.memorySources': 'Origini di memoria', + 'sync.noConnectedSources': 'Nessuna origine connessa', + 'sync.chunks': 'chunk', + 'sync.lastChunk': 'Ultimo chunk:', + 'sync.pending': 'in attesa', + 'sync.processed': 'elaborati', + 'sync.syncing': 'Sincronizzazione…', + 'sync.sync': 'Sincronizza', + 'sync.failedToLoad': 'Impossibile caricare lo stato di sincronizzazione', + 'sync.noContent': + "Nessun contenuto è stato sincronizzato nella memoria. Connetti un'integrazione per iniziare.", + 'memorySources.title': 'Fonti di memoria', + 'memorySources.empty': + 'Ancora nessuna fonte di memoria. Aggiungine una per iniziare a alimentare la memoria.', + 'memorySources.customSources': 'Fonti personalizzate', + 'memorySources.addSource': 'Aggiungi Fonte', + 'memorySources.noCustomSources': + 'Ancora nessuna fonte personalizzata. Aggiungi una cartella, il repository GitHub, il feed RSS o una pagina web per iniziare.', + 'memorySources.loadingConnections': 'Caricamento delle connessioni…', + 'memorySources.noConnections': + "Nessuna connessione Composio attiva trovata. Collega prima un'integrazione.", + 'memorySources.pickConnection': 'Scegli una connessione', + 'memorySources.selectConnection': '— Seleziona una connessione —', + 'memorySources.composioListFailed': 'Impossibile caricare le connessioni Composio.', + 'memorySources.browse': 'Sfoglia…', + 'memorySources.folderPathPlaceholder': '/Users/you/notes', + 'memorySources.globPatternPlaceholder': '**/*.md', + 'memorySources.repoUrlPlaceholder': 'https://github.com/org/repo', + 'memorySources.branchPlaceholder': 'main', + 'memorySources.feedUrlPlaceholder': 'https://example.com/feed.xml', + 'memorySources.pageUrlPlaceholder': 'https://example.com/article', + 'memorySources.cssSelectorPlaceholder': 'article', + 'memorySources.searchQueryPlaceholder': 'da:utente AI sicurezza', + 'memorySources.kind.composio': 'Integrazione', + 'memorySources.kind.folder': 'Cartella Locale', + 'memorySources.kind.github_repo': 'GitHub Repository', + 'memorySources.kind.twitter_query': 'Ricerca su Twitter', + 'memorySources.kind.rss_feed': 'Feed RSS', + 'memorySources.kind.web_page': 'Pagina web', + 'memorySources.sync.successTitle': 'Sincronizzazione', + 'memorySources.sync.successMessage': 'Il progresso apparirà a breve.', + 'memorySources.sync.failedTitle': 'Sincronizzazione fallita:', + 'time.justNow': 'proprio ora', + 'time.secondsAgoSuffix': 's fa', + 'time.minutesAgoSuffix': 'min fa', + 'time.hoursAgoSuffix': 'h fa', + 'time.daysAgoSuffix': 'g fa', + 'memorySources.pickKind': 'Che tipo di fonte vuoi aggiungere?', + 'memorySources.backToKinds': 'Torna ai tipi di origine', + 'memorySources.label': 'Etichetta', + 'memorySources.labelPlaceholder': 'Le mie note di ricerca', + 'memorySources.add': 'Aggiungi', + 'memorySources.adding': 'Aggiungendo…', + 'memorySources.added': 'Fonte aggiunta', + 'memorySources.removed': 'Fonte rimossa', + 'memorySources.remove': 'Rimuovere', + 'memorySources.enable': 'Abilita', + 'memorySources.disable': 'Disabilita', + 'memorySources.toggleFailed': 'Commutazione fallita', + 'memorySources.removeFailed': 'Rimozione fallita', + 'memorySources.folderPath': 'Percorso della cartella', + 'memorySources.globPattern': 'Modello glob', + 'memorySources.repoUrl': 'URL del repository', + 'memorySources.branch': 'Ramo', + 'memorySources.feedUrl': 'Alimenta URL', + 'memorySources.pageUrl': 'Pagina URL', + 'memorySources.cssSelector': 'Selettore CSS (opzionale)', + 'memorySources.searchQuery': 'Query di ricerca', + 'backend.aiBackend': 'Backend AI', + 'backend.cloud': 'Cloud', + 'backend.recommended': 'Consigliato', + 'backend.cloudDescription': + "Modelli veloci e potenti instradati attraverso il backend di OpenHuman. Pronti all'uso immediatamente.", + 'backend.privacyNote': + 'Nessun dato personale, messaggio o chiave viene mai inviato ai nostri server.', + 'backend.local': 'Locale', + 'backend.advanced': 'Avanzato', + 'backend.localDescription': + 'Esegui i modelli sulla tua macchina con Ollama. Privacy totale, richiede configurazione.', + 'backend.ramRecommended': '16GB+ di RAM consigliati', + 'subconscious.tasks': 'attività', + 'subconscious.ticks': 'tick', + 'subconscious.last': 'Ultimo', + 'subconscious.failed': 'fallito', + 'subconscious.tickInterval': 'Intervallo di tick', + 'subconscious.runNow': 'Esegui ora', + 'subconscious.providerUnavailableTitle': 'Subconscio in pausa', + 'subconscious.providerSettings': 'Impostazioni IA', + 'subconscious.approvalNeeded': 'Approvazione necessaria', + 'subconscious.requiresApproval': 'Richiede approvazione', + 'subconscious.fixInConnections': 'Correggi in Connessioni', + 'subconscious.goAhead': 'Procedi', + 'subconscious.activeTasks': 'Attività attive', + 'subconscious.noActiveTasks': 'Nessuna attività attiva', + 'subconscious.default': 'Predefinito', + 'subconscious.addTaskPlaceholder': 'Aggiungi una nuova attività...', + 'subconscious.activityLog': 'Log attività', + 'subconscious.noActivity': 'Nessuna attività', + 'subconscious.decision.nothingNew': 'Niente di nuovo', + 'subconscious.decision.completed': 'Completato', + 'subconscious.decision.evaluating': 'Valutazione', + 'subconscious.decision.waitingApproval': 'In attesa di approvazione', + 'subconscious.decision.failed': 'Fallito', + 'subconscious.decision.cancelled': 'Annullato', + 'subconscious.decision.skipped': 'Saltato', + 'actionable.complete': 'Completa', + 'actionable.dismiss': 'Ignora', + 'actionable.snooze': 'Posticipa', + 'actionable.new': 'Nuovo', + 'stats.storage': 'Archiviazione', + 'stats.files': 'file', + 'stats.documents': 'Documenti', + 'stats.today': 'oggi', + 'stats.namespaces': 'Namespace', + 'stats.relations': 'Relazioni', + 'stats.firstMemory': 'Prima memoria', + 'stats.latest': 'Ultime', + 'stats.sessions': 'Sessioni', + 'stats.tokens': 'token', + 'bootCheck.invalidUrl': 'Inserisci un URL di runtime.', + 'bootCheck.urlMustStartWith': "L'URL deve iniziare con http:// o https://", + 'bootCheck.validUrlRequired': 'Non sembra un URL valido (prova https://core.example.com/rpc)', + 'bootCheck.tokenRequired': 'Servirà un token di autenticazione per connettersi.', + 'bootCheck.chooseCoreMode': 'Seleziona un runtime', + 'bootCheck.connectToCore': 'Connetti al tuo runtime', + 'bootCheck.desktopDescription': + 'OpenHuman ha bisogno di un runtime per pensare. Scegli dove farlo girare.', + 'bootCheck.webDescription': + "Sul web, OpenHuman si connette a un runtime che controlli tu. Inserisci sotto URL e token di autenticazione, oppure scarica l'app desktop per farne girare uno direttamente sulla tua macchina.", + 'bootCheck.preferDesktop': 'Preferisci tenere tutto sul tuo dispositivo?', + 'bootCheck.downloadDesktop': "Scarica l'app desktop", + 'bootCheck.localRecommended': 'Esegui localmente (consigliato)', + 'bootCheck.localDescription': + 'Gira direttamente sul tuo computer. Più veloce, completamente privato, niente da configurare.', + 'bootCheck.cloudMode': 'Esegui sul cloud (complesso)', + 'bootCheck.cloudDescription': + 'Connettiti a un runtime che stai ospitando altrove. Resta online 24×7 così non devi tenere acceso questo dispositivo.', + 'bootCheck.coreRpcUrl': 'URL runtime', + 'bootCheck.rpcUrlPlaceholder': 'https://core.example.com/rpc', + 'bootCheck.authToken': 'Token di autenticazione', + 'bootCheck.bearerTokenPlaceholder': 'Il bearer token del tuo runtime remoto', + 'bootCheck.storedLocally': 'Conservato solo su questo dispositivo. Inviato come ', + 'bootCheck.testing': 'Test in corso…', + 'bootCheck.testConnection': 'Prova connessione', + 'bootCheck.connectedOk': 'Connesso. Tutto a posto.', + 'bootCheck.authFailed': 'Token non valido. Controllalo e riprova.', + 'bootCheck.unreachablePrefix': 'Impossibile raggiungerlo:', + 'bootCheck.checkingCore': 'Attivazione del runtime…', + 'bootCheck.cannotReach': 'Impossibile raggiungere il runtime', + 'bootCheck.cannotReachDesc': + 'Non siamo riusciti a connetterci al tuo runtime. Vuoi provarne uno diverso?', + 'bootCheck.switchMode': 'Scegli un runtime diverso', + 'bootCheck.quit': 'Esci', + 'bootCheck.legacyDetected': 'Runtime in background legacy rilevato', + 'bootCheck.legacyDescription': + 'Un daemon OpenHuman installato separatamente è già in esecuzione su questo dispositivo. Dobbiamo rimuoverlo prima che il runtime integrato possa subentrare.', + 'bootCheck.removing': 'Rimozione…', + 'bootCheck.removeContinue': 'Rimuovi e continua', + 'bootCheck.localNeedsRestart': 'Il runtime locale necessita di un riavvio', + 'bootCheck.localNeedsRestartDesc': + "Il tuo runtime locale ha una versione diversa da quella dell'app. Un riavvio rapido li riallineerà.", + 'bootCheck.restarting': 'Riavvio…', + 'bootCheck.restartCore': 'Riavvia runtime', + 'bootCheck.cloudNeedsUpdate': 'Il runtime cloud necessita di un aggiornamento', + 'bootCheck.cloudNeedsUpdateDesc': + "Il tuo runtime cloud ha una versione diversa da quella dell'app. Esegui l'updater per riallinearli.", + 'bootCheck.updating': 'Aggiornamento…', + 'bootCheck.updateCloudCore': 'Aggiorna runtime cloud', + 'bootCheck.versionCheckFailed': 'Verifica versione runtime fallita', + 'bootCheck.versionCheckFailedDesc': + 'Il runtime è attivo ma non comunica la sua versione. Potrebbe essere obsoleto. Riavvialo o aggiornalo per continuare.', + 'bootCheck.working': 'Elaborazione…', + 'bootCheck.restartUpdateCore': 'Riavvia / aggiorna runtime', + 'bootCheck.unexpectedError': 'Errore inatteso del controllo di avvio', + 'bootCheck.actionFailed': 'Qualcosa è andato storto. Riprova.', + 'bootCheck.portConflictTitle': "Impossibile avviare il motore dell'app", + 'bootCheck.portConflictBody': + 'Un altro processo sta usando la porta di rete necessaria a OpenHuman. Tenteremo di risolvere il problema automaticamente.', + 'bootCheck.portConflictFixButton': 'Correzione automatica', + 'bootCheck.portConflictFixing': 'Correzione in corso…', + 'bootCheck.portConflictFixFailed': + 'La correzione automatica non ha funzionato. Riavvia il computer e riprova.', + 'notifications.justNow': 'adesso', + 'notifications.minAgo': '{n}m fa', + 'notifications.hrAgo': '{n}h fa', + 'notifications.dayAgo': '{n}g fa', + 'notifications.category.messages': 'Messaggi', + 'notifications.category.agents': 'Agenti', + 'notifications.category.skills': 'Skill', + 'notifications.category.system': 'Sistema', + 'notifications.category.meetings': 'Riunioni', + 'notifications.category.reminders': 'Promemoria', + 'notifications.category.important': 'Importanti', + 'about.update.status.checking': 'Verifica in corso...', + 'about.update.status.available': 'v{version} disponibile', + 'about.update.status.availableNoVersion': 'Aggiornamento disponibile', + 'about.update.status.downloading': 'Download in corso...', + 'about.update.status.readyToInstall': "v{version} pronta per l'installazione", + 'about.update.status.readyToInstallNoVersion': + 'Una nuova versione è stata scaricata ed è pronta. Riavvia per applicare.', + 'about.update.status.installing': 'Installazione...', + 'about.update.status.restarting': 'Riavvio in corso...', + 'about.update.status.upToDate': "Stai utilizzando l'ultima versione.", + 'about.update.status.error': 'Verifica aggiornamento fallita', + 'about.update.status.default': 'Verifica aggiornamenti', + 'welcome.connectionFailed': 'Connessione fallita: {status} {statusText}', + 'welcome.connectionFailedMsg': 'Connessione fallita: {message}', + 'welcome.continueLocally': 'Continua localmente', 'welcome.continueLocallyExperimental': 'Continua Localmente (Sperimentale)', + 'welcome.localSessionStarting': 'Avvio sessione locale...', + 'welcome.localSessionDesc': 'Utilizza un profilo locale offline e salta TinyHumans OAuth.', + 'chat.agentChatDesc': "Apri una sessione di chat diretta con l'agente.", + 'chat.modelPlaceholder': 'gpt-4o', + 'channels.activeRouteValue': '{channel} tramite {authMode}', + 'privacy.dataKind.messages': 'Messaggi', + 'privacy.dataKind.agents': 'Agenti', + 'privacy.dataKind.skills': 'Skill', + 'privacy.dataKind.system': 'Sistema', + 'privacy.dataKind.meetings': 'Riunioni', + 'privacy.dataKind.reminders': 'Promemoria', + 'privacy.dataKind.important': 'Importante', + 'onboarding.enableLocalAI': 'Abilita AI locale', + 'onboarding.skills.status.available': 'Disponibile', + 'onboarding.skills.status.connected': 'Connesso', + 'onboarding.skills.status.connecting': 'Connessione', + 'onboarding.skills.status.error': 'Errore', + 'onboarding.skills.status.unavailable': 'Non disponibile', + 'composio.statusUnavailable': 'Stato non disponibile', + 'composio.authExpired': 'Autenticazione scaduta', + 'composio.reconnect': 'Riconnetti', + 'composio.expiredAuthorization': '{name} autorizzazione scaduta', + 'composio.expiredDescription': + "Riconnettiti per riattivare gli strumenti {name}. OpenHuman manterrà questa integrazione non disponibile finché non aggiornerai l'accesso a OAuth.", + 'composio.envVarOverrides': 'è impostata, sovrascrive questa impostazione.', + 'composio.previewBadge': 'Anteprima', + 'composio.previewTooltip': + "Integrazione dell'agente disponibile a breve: puoi connetterti, ma l'agente non può ancora utilizzare questo toolkit.", + 'memory.day.sun': 'Dom', + 'memory.day.mon': 'Lun', + 'memory.day.tue': 'Mar', + 'memory.day.wed': 'Mer', + 'memory.day.thu': 'Gio', + 'memory.day.fri': 'Ven', + 'memory.day.sat': 'Sab', + 'memory.ingesting': 'Ingestione', + 'memory.ingestionQueued': 'In coda', + 'memory.ingestingTitle': 'Ingestione di {title}', + 'mic.noAudioCaptured': 'Nessun audio catturato', + 'mic.noSpeechDetected': 'Nessun parlato rilevato', + 'mic.lowConfidenceResult': "Impossibile comprendere l'audio chiaramente — riprova", + 'mic.failedToStopRecording': 'Impossibile fermare la registrazione: {message}', + 'mic.transcriptionFailed': 'Trascrizione fallita: {message}', + 'reflections.kind.retrospective': 'Retrospettiva', + 'reflections.kind.derivedFact': 'Fatto derivato', + 'reflections.kind.moodInsight': "Insight sull'umore", + 'reflections.kind.relationshipInsight': 'Insight relazionale', + 'graph.tooltip.summary': 'Riassunto', + 'graph.tooltip.contact': 'Contatto', + 'localModel.usage.never': 'Mai', + 'localModel.usage.mediumLoad': 'Carico medio', + 'localModel.usage.lowLoad': 'Carico basso', + 'localModel.usage.idleMode': 'Modalità inattiva', + 'localModel.rebootstrapComplete': 'Re-bootstrap del modello completato.', + 'localModel.modelsVerified': 'Modelli locali verificati.', + 'accounts.addModal.allConnected': 'Tutti connessi', + 'accounts.addModal.title': 'Aggiungi account', + 'accounts.respondQueue.empty': 'Vuota', + 'accounts.respondQueue.hide': 'Nascondi coda di risposta', + 'accounts.respondQueue.loadFailed': 'Impossibile caricare la coda di risposta', + 'accounts.respondQueue.loading': 'Caricamento coda…', + 'accounts.respondQueue.pending': 'In attesa', + 'accounts.respondQueue.show': 'Mostra coda di risposta', + 'accounts.respondQueue.title': 'Coda di risposta', + 'accounts.webviewHost.almostReady': 'Quasi pronto...', + 'accounts.webviewHost.loadTimeout': 'Timeout caricamento webview', + 'accounts.webviewHost.loading': 'Caricamento di {providerName}...', + 'accounts.webviewHost.loadingAccount': 'Caricamento account', + 'accounts.webviewHost.restoringSession': 'Ripristino sessione...', + 'accounts.webviewHost.retryLoading': 'Riprova caricamento', + 'accounts.webviewHost.takingLonger': '{providerName} sta impiegando più tempo del previsto.', + 'accounts.webviewHost.timeoutHint': 'Suggerimento timeout', + 'app.connectionBadge.composio': 'Composio', + 'app.connectionBadge.messaging': 'Messaggistica', + 'app.connectionIndicator.connected': 'Connesso a OpenHuman AI 🚀', + 'app.connectionIndicator.connecting': 'Connessione', + 'app.connectionIndicator.coreOffline': 'Core non in linea', + 'app.connectionIndicator.disconnected': 'Disconnesso', + 'app.connectionIndicator.offline': 'Offline', + 'app.connectionIndicator.reconnecting': 'Riconnessione…', + 'app.errorFallback.componentStack': 'Stack del componente', + 'app.errorFallback.downloadLatest': "Scarica l'ultima versione", + 'app.errorFallback.heading': 'Intestazione', + 'app.errorFallback.hint': 'Suggerimento', + 'app.errorFallback.reloadApp': 'Ricarica app', + 'app.errorFallback.subheading': 'Sottotitolo', + 'app.errorFallback.tryRecover': 'Prova a ripristinare', + 'app.localAiDownload.installing': 'Installazione...', + 'app.localAiDownload.preparing': 'Preparazione...', + 'app.openhumanLink.accounts.continueWith': 'Continua con accesso {label}', + 'app.openhumanLink.accounts.done': 'Fatto', + 'app.openhumanLink.accounts.intro': 'Introduzione', + 'app.openhumanLink.accounts.webviewNote': 'Nota webview', + 'app.openhumanLink.billing.openDashboard': 'Apri dashboard', + 'app.openhumanLink.billing.stayOnTrial': 'Rimani in prova', + 'app.openhumanLink.billing.trialCredit': 'Credito di prova', + 'app.openhumanLink.billing.trialDesc': 'Descrizione prova', + 'app.openhumanLink.defaultBody': + 'Non ancora pronto nel popup. Apri la pagina completa delle impostazioni quando ti serve.', + 'app.openhumanLink.discord.intro': 'Introduzione', + 'app.openhumanLink.discord.openInvite': 'Apri invito', + 'app.openhumanLink.discord.perk1': 'Vantaggio 1', + 'app.openhumanLink.discord.perk2': 'Vantaggio 2', + 'app.openhumanLink.discord.perk3': 'Vantaggio 3', + 'app.openhumanLink.discord.perk4': 'Vantaggio 4', + 'app.openhumanLink.done': 'Fatto', + 'app.openhumanLink.loadingChannelSetup': 'Caricamento configurazione canale', + 'app.openhumanLink.maybeLater': 'Forse più tardi', + 'app.openhumanLink.notifications.asking': 'Richiesta al tuo OS…', + 'app.openhumanLink.notifications.blocked': 'Bloccato', + 'app.openhumanLink.notifications.blockedStep1': 'Passo 1 bloccato', + 'app.openhumanLink.notifications.blockedStep2': 'Passo 2 bloccato', + 'app.openhumanLink.notifications.blockedStep3': 'Passo 3 bloccato', + 'app.openhumanLink.notifications.intro': 'Introduzione', + 'app.openhumanLink.notifications.promptHint': 'Suggerimento prompt', + 'app.openhumanLink.notifications.retry': 'Riprova notifica di test', + 'app.openhumanLink.notifications.send': 'Invia notifica di test', + 'app.openhumanLink.notifications.sendFailed': 'Impossibile inviare: {error}', + 'app.openhumanLink.notifications.sent': + "Notifica di test inviata. Se non l'hai ricevuta, vai in Impostazioni di Sistema → Notifiche → OpenHuman, attiva Consenti notifiche e imposta lo Stile banner su Persistente.", + 'app.openhumanLink.skipForNow': 'Salta per ora', + 'app.openhumanLink.telegramUnavailable': 'Telegram non disponibile', + 'app.openhumanLink.title.accounts': 'Connetti le tue app', + 'app.openhumanLink.title.billing': 'Fatturazione e crediti', + 'app.openhumanLink.title.discord': 'Unisciti alla community', + 'app.openhumanLink.title.messaging': 'Connetti un canale di chat', + 'app.openhumanLink.title.notifications': 'Consenti notifiche', + 'app.persistRehydration.body': 'Corpo', + 'app.persistRehydration.heading': 'Intestazione', + 'app.persistRehydration.resetCta': 'Ripristino…', + 'app.persistRehydration.resetting': 'Ripristino…', + 'app.routeLoading.initializing': 'Inizializzazione di OpenHuman...', + 'app.update.currentlyOn': '{version}', + 'app.update.errorFallback': "Si è verificato un errore durante l'aggiornamento.", + 'app.update.header.default': 'Aggiornamento', + 'app.update.header.error': 'Aggiornamento fallito', + 'app.update.header.installing': 'Installazione aggiornamento', + 'app.update.header.readyToInstall': "Aggiornamento pronto per l'installazione", + 'app.update.header.restarting': 'Riavvio…', + 'app.update.later': 'Più tardi', + 'app.update.newVersionReady': "Una nuova versione è pronta per l'installazione.", + 'app.update.progress.downloaded': '{amount} scaricati', + 'app.update.progress.installing': 'Installazione della nuova versione…', + 'app.update.progress.restarting': "Riavvio dell'app…", + 'app.update.progress.working': '{percent}%', + 'app.update.restartNote': 'Nota sul riavvio', + 'app.update.restartNow': 'Riavvia ora', + 'app.update.versionReady': "La versione {newVersion} è pronta per l'installazione.", + 'channels.discord.accountLinked': 'Account collegato', + 'channels.discord.connect': 'Connetti', + 'channels.discord.linkTokenExpired': 'Token di collegamento scaduto. Riprova.', + 'channels.discord.linkTokenInstruction': '{token}', + 'channels.discord.linkTokenLabel': 'Etichetta token di collegamento', + 'channels.discord.linkTokenOnce': 'Token di collegamento monouso', + 'channels.discord.picker.allPermissionsOk': + 'Il bot ha tutte le autorizzazioni richieste in questo canale.', + 'channels.discord.picker.botNotInServers': 'Bot non presente nei server', + 'channels.discord.picker.category': 'Categoria', + 'channels.discord.picker.channel': 'Canale', + 'channels.discord.picker.checkingPermissions': 'Verifica autorizzazioni', + 'channels.discord.picker.loadingChannels': 'Caricamento canali...', + 'channels.discord.picker.loadingServers': 'Caricamento server...', + 'channels.discord.picker.missingPermissions': 'Autorizzazioni mancanti', + 'channels.discord.picker.noChannels': 'Nessun canale di testo trovato', + 'channels.discord.picker.noServers': 'Nessun server trovato', + 'channels.discord.picker.selectChannel': 'Seleziona un canale', + 'channels.discord.picker.selectServer': 'Seleziona un server', + 'channels.discord.picker.server': 'Server', + 'channels.discord.picker.serverChannelSelection': 'Selezione server e canale', + 'channels.discord.savedRestartRequired': "Canale salvato. Riavvia l'app per attivarlo.", + 'channels.telegram.connect': 'Connetti', + 'channels.telegram.managedDmConnecting': 'Connessione DM gestiti', + 'channels.telegram.managedDmTimeout': 'Timeout DM gestiti', + 'channels.telegram.reconnect': 'Riconnetti', + 'channels.telegram.savedRestartRequired': "Canale salvato. Riavvia l'app per attivarlo.", + 'channels.web.alwaysAvailable': 'Sempre disponibile', + 'chat.approval.approve': 'Approvare', + 'chat.approval.alwaysAllow': 'Consenti sempre', + 'chat.approval.alwaysAllowHint': + 'Smettila di chiedere questo strumento — aggiungilo alla tua lista Sempre consentito', + 'chat.approval.deciding': 'Lavorando…', + 'chat.approval.deny': 'Negare', + 'chat.approval.error': 'Impossibile registrare la tua decisione — riprova.', + 'chat.approval.fallback': + "L'agente vuole eseguire un'azione che necessita della tua approvazione.", + 'chat.approval.title': 'Approvazione necessaria', + 'chat.approval.tool': 'Strumento:', + 'channels.authMode.managed_dm': 'Accedi con OpenHuman', + 'channels.authMode.oauth': 'OAuth Accedi', + 'channels.authMode.bot_token': 'Usa il tuo token Bot', + 'channels.authMode.api_key': 'Usa la tua chiave API', + 'channels.fieldRequired': '{field} è richiesto', + 'channels.mcp.title': 'MCP Server', + 'channels.mcp.description': + "Sfoglia e gestisci i server del Model Context Protocol che estendono l'IA con nuovi strumenti.", + 'channels.discord.displayName': 'Discord', + 'channels.discord.description': 'Invia e ricevi messaggi tramite Discord.', + 'channels.discord.authMode.bot_token.description': 'Fornisci il tuo token bot Discord.', + 'channels.discord.authMode.oauth.description': + 'Installa il bot OpenHuman sul tuo server Discord tramite OAuth.', + 'channels.discord.authMode.managed_dm.description': + 'Collega il tuo account personale Discord al bot OpenHuman.', + 'channels.discord.fields.bot_token.label': 'Token bot', + 'channels.discord.fields.bot_token.placeholder': 'Il tuo token bot Discord', + 'channels.discord.fields.guild_id.label': 'ID server (gilda)', + 'channels.discord.fields.guild_id.placeholder': 'Facoltativo: limita a un server specifico', + 'channels.telegram.displayName': 'Telegram', + 'channels.telegram.description': 'Invia e ricevi messaggi tramite Telegram.', + 'channels.telegram.authMode.managed_dm.description': + 'Invia un messaggio direttamente al bot OpenHuman Telegram.', + 'channels.telegram.authMode.bot_token.description': + 'Fornisci il tuo token Bot Telegram da @BotFather.', + 'channels.telegram.fields.bot_token.label': 'Token bot', + 'channels.telegram.fields.bot_token.placeholder': '123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11', + 'channels.telegram.fields.allowed_users.label': 'Utenti consentiti', + 'channels.telegram.fields.allowed_users.placeholder': 'Separati da virgole Telegram nomi utente', + 'channels.telegram.remoteControlTitle': 'Controllo remoto (Telegram)', + 'channels.telegram.remoteControlBody': + 'Da una chat Telegram consentita, inviare /status, /sessions, /new o /help. Il routing del modello utilizza ancora /model e /models.', + 'channels.web.displayName': 'Web', + 'channels.web.description': "Chatta tramite l'interfaccia utente Web integrata.", + 'channels.web.authMode.managed_dm.description': + 'Utilizza la chat web incorporata: non è richiesta alcuna configurazione.', + 'channels.yuanbao.connect': 'Connect', + 'channels.yuanbao.connecting': 'Connessione in corso…', + 'channels.yuanbao.fieldRequired': '{field} è obbligatorio', + 'channels.yuanbao.reconnect': 'Reconnect', + 'channels.yuanbao.savedRestartRequired': "Canale salvato. Riavvia l'app per attivarlo.", + 'channels.yuanbao.unexpectedStatus': 'Stato di connessione imprevisto: {status}', + 'chat.unsubscribeApproval.approve': 'Approva e annulla iscrizione', + 'chat.unsubscribeApproval.approved': '✓ Iscrizione annullata con successo.', + 'chat.unsubscribeApproval.denied': '✕ Richiesta rifiutata.', + 'chat.unsubscribeApproval.deny': 'Rifiuta', + 'chat.unsubscribeApproval.processing': 'Elaborazione...', + 'chat.unsubscribeApproval.title': 'Richiesta di annullamento iscrizione', + 'commandPalette.ariaLabel': 'Palette dei comandi', + 'commandPalette.description': 'Descrizione', + 'commandPalette.label': 'Comandi', + 'commandPalette.noResults': 'Nessun risultato', + 'commandPalette.placeholder': 'Digita un comando o cerca…', + 'commandPalette.searchAria': 'Cerca comandi', + 'commandPalette.shortcutHint': 'Premi ? per tutte le scorciatoie', + 'commandPalette.title': 'Palette dei comandi', + 'kbd.ariaLabel': 'Scorciatoia da tastiera: {shortcut}', + 'iosMascot.connectedTo': 'Connesso a', + 'iosMascot.defaultPairedLabel': 'Desktop', + 'iosMascot.disconnect': 'Disconnetti', + 'iosMascot.error.generic': 'Qualcosa è andato storto. Per favore riprova.', + 'iosMascot.error.sendFailed': 'Impossibile inviare. Controlla la tua connessione.', + 'iosMascot.pushToTalk': 'Push-to-talk', + 'iosMascot.sendMessage': 'Invia messaggio', + 'iosMascot.thinking': 'In pensiero...', + 'iosMascot.typeMessage': 'Digita un messaggio...', + 'iosPair.connectedLoading': 'Connesso! Caricamento...', + 'iosPair.connecting': 'Connessione al desktop...', + 'iosPair.desktopLabel': 'Desktop', + 'iosPair.error.camera': + 'Scansione fotocamera fallita. Controlla i permessi della fotocamera e riprova.', + 'iosPair.error.connectionFailed': + "Connessione fallita. Assicurati che l'app desktop sia in esecuzione e riprova.", + 'iosPair.error.invalidQr': + 'Codice QR non valido. Assicurati di scansionare un codice di abbinamento OpenHuman.', + 'iosPair.error.unreachableDesktop': + 'Impossibile raggiungere il desktop. Assicurati che entrambi i dispositivi siano online e riprova.', + 'iosPair.expired': 'QR code scaduto. Chiedi al desktop di rigenerare il codice.', + 'iosPair.instructions': + 'Apri OpenHuman sul desktop, vai in Impostazioni > Dispositivi e tocca "Associa telefono" per mostrare il codice QR.', + 'iosPair.retryScan': 'Riprova la scansione', + 'iosPair.scanQrCode': 'Scansione QR code', + 'iosPair.scannerOpening': 'Apertura scanner...', + 'iosPair.step.openDesktop': 'Apri OpenHuman sul desktop', + 'iosPair.step.openSettings': 'Vai a Impostazioni > Dispositivi', + 'iosPair.step.showQr': 'Tocca "Accoppia telefono" per visualizzare QR', + 'iosPair.title': 'Accoppia con il tuo desktop', + 'composio.connect.additionalConfigRequired': 'Configurazione aggiuntiva richiesta', + 'composio.connect.atlassianSubdomainHint': 'acme', + 'composio.connect.atlassianSubdomainLabel': 'Etichetta sottodominio Atlassian', + 'composio.connect.connect': 'Connetti', + 'composio.connect.dynamicsOrgNameHint': + 'Per esempio, "myorg" per myorg.crm.dynamics.com. Inserisci solo il nome breve dell\'organizzazione, non l\'URL completo.', + 'composio.connect.dynamicsOrgNameLabel': "Nome dell'organizzazione Dynamics 365", + 'composio.connect.connectionFailed': 'Connessione fallita (stato: {status}).', + 'composio.connect.disconnectFailed': 'Disconnessione fallita: {msg}', + 'composio.connect.disconnecting': 'Disconnessione…', + 'composio.connect.idleDescription': 'Connetti il tuo', + 'composio.connect.idleDescriptionSuffix': + "account. Apriremo una finestra del browser, autorizzerai l'accesso lì, e l'app rileverà automaticamente la connessione.", + 'composio.connect.isConnected': 'è connesso.', + 'composio.connect.manage': 'Gestisci', + 'composio.connect.needsFieldsPrefix': 'Per connettere', + 'composio.connect.needsFieldsSuffix': + 'ci servono altre informazioni. Compila i campi mancanti qui sotto e riprova.', + 'composio.connect.needsSubdomain': 'Per connettere', + 'composio.connect.needsSubdomainSuffix': + 'inserisci il tuo sottodominio Atlassian (es. acme per acme.atlassian.net) e riprova.', + 'composio.connect.oauthComplete': 'OAuth da completare…', + 'composio.connect.oauthTimeout': 'Timeout OAuth', + 'composio.connect.permissions': 'Autorizzazioni', + 'composio.connect.permissionsDefault': 'Lettura + scrittura abilitate di default', + 'composio.connect.permissionsNote': 'può esporre', + 'composio.connect.permissionsNoteSuffix': + "Le autorizzazioni proprie dell'agente OpenHuman sono controllate sotto come toggle di lettura, scrittura e admin.", + 'composio.connect.reopenBrowser': 'Riapri browser', + 'composio.connect.requestingUrl': 'Richiesta URL di connessione…', + 'composio.connect.requiredFieldEmpty': 'Questo campo è obbligatorio.', + 'composio.connect.retryConnection': 'Riprova connessione', + 'composio.connect.scopeLoadError': 'Impossibile caricare preferenze degli scope: {msg}', + 'composio.connect.scopeSaveError': 'Impossibile salvare lo scope {key}: {msg}', + 'composio.connect.scope.read': 'Lettura', + 'composio.connect.scope.readHint': + "Consenti all'agente di leggere i dati da questo collegamento.", + 'composio.connect.scope.write': 'Scrivi', + 'composio.connect.scope.writeHint': + "Consenti all'agente di creare o modificare i dati tramite questa connessione.", + 'composio.connect.scope.admin': 'Amministratore', + 'composio.connect.scope.adminHint': + "Consenti all'agente di gestire impostazioni, autorizzazioni o azioni distruttive.", + 'composio.connect.subdomainInvalid': + 'Inserisci solo il sottodominio breve (es. "acme"), non l\'URL completo. Deve contenere solo lettere, numeri e trattini.', + 'composio.connect.subdomainRequired': 'Inserisci il tuo sottodominio Atlassian per continuare.', + 'composio.connect.wabaIdHint': + 'Trovalo tramite GET /me/businesses poi GET /{business_id}/owned_whatsapp_business_accounts usando il tuo token di accesso Meta.', + 'composio.connect.wabaIdLabel': 'Etichetta WABA ID', + 'composio.connect.wabaIdRequired': + 'Inserisci il tuo ID WhatsApp Business Account (WABA ID) per continuare.', + 'composio.connect.waitingFor': 'In attesa di', + 'composio.connect.waitingHint': 'Suggerimento di attesa', + 'composio.triggers.heading': 'Trigger', + 'composio.triggers.listenFrom': 'Ascolta eventi da', + 'composio.triggers.loadError': 'Impossibile caricare i trigger', + 'composio.triggers.needsConfiguration': 'Richiede configurazione', + 'composio.triggers.noneAvailable': 'Nessun trigger attualmente disponibile per', + 'conversations.taskKanban.moveLeft': 'Sposta a sinistra', + 'conversations.taskKanban.moveRight': 'Sposta a destra', + 'conversations.taskKanban.title': 'Attività', + 'conversations.taskKanban.approval.default': 'Predefinito', + 'conversations.taskKanban.approval.notRequired': 'Non richiesto', + 'conversations.taskKanban.approval.notRequiredBadge': 'nessuna approvazione', + 'conversations.taskKanban.approval.required': 'Obbligatorio', + 'conversations.taskKanban.approval.requiredBadge': 'approvazione', + 'conversations.taskKanban.approval.requiredBeforeExecution': "Richiesto prima dell'esecuzione", + 'conversations.taskKanban.briefButton': 'Breve compito', + 'conversations.taskKanban.briefTitle': 'Breve compito', + 'conversations.taskKanban.closeBrief': 'Chiudi riepilogo attività', + 'conversations.taskKanban.field.acceptanceCriteria': 'Criteri di accettazione', + 'conversations.taskKanban.field.allowedTools': 'Strumenti consentiti', + 'conversations.taskKanban.field.approval': 'Approvazione', + 'conversations.taskKanban.field.assignedAgent': 'Agente assegnato', + 'conversations.taskKanban.field.blocker': 'Bloccatore', + 'conversations.taskKanban.field.evidence': 'Prova', + 'conversations.taskKanban.field.notes': 'Note', + 'conversations.taskKanban.field.objective': 'Obiettivo', + 'conversations.taskKanban.field.plan': 'Piano', + 'conversations.taskKanban.field.status': 'Stato', + 'conversations.taskKanban.field.title': 'Titolo', + 'conversations.taskKanban.saveChanges': 'Salva modifiche', + 'conversations.taskKanban.deleteCard': 'Elimina', + 'conversations.taskKanban.updateFailed': + "Impossibile aggiornare l'attività; le modifiche non sono state salvate.", + 'conversations.toolTimeline.turn': 'turno', + 'conversations.toolTimeline.workerThread': 'thread worker', + 'daemon.serviceBlockingGate.body': 'Corpo', + 'daemon.serviceBlockingGate.downloadHint': 'Suggerimento di download', + 'daemon.serviceBlockingGate.downloadLatest': "Scarica l'ultima versione", + 'daemon.serviceBlockingGate.retryCore': 'Riprova core', + 'daemon.serviceBlockingGate.retryFailed': + "Tentativo fallito. Scarica l'ultima build dell'app e riprova.", + 'daemon.serviceBlockingGate.retrying': 'Nuovo tentativo...', + 'daemon.serviceBlockingGate.title': 'Il core di OpenHuman non è disponibile', + 'home.banners.discordSubtitle': 'Sottotitolo Discord', + 'home.banners.discordTitle': 'Unisciti al nostro Discord', + 'home.banners.earlyBirdDismiss': 'Ignora banner early bird', + 'home.banners.earlyBirdFirstSub': 'primo abbonamento.', + 'home.banners.earlyBirdOn': 'Early bird attivo', + 'home.banners.earlyBirdTitle': 'I primi 1.000 utenti ottengono il 60% di sconto.', + 'home.banners.earlyBirdUseCode': 'Codice early bird', + 'home.banners.getSubscription': 'ottieni un abbonamento', + 'home.banners.promoCreditsBody': 'Corpo crediti promozionali', + 'home.banners.promoCreditsTitle': '{amount}', + 'home.banners.promoCreditsUsage': 'Uso crediti promozionali', + 'intelligence.memoryChunk.detail.chunk': 'Pezzo', + 'intelligence.memoryChunk.detail.copyChunkId': 'Copia ID chunk', + 'intelligence.memoryChunk.detail.embeddingInfo': 'bge-m3 1024dim', + 'intelligence.memoryChunk.detail.noEmbedding': 'Nessun embedding', + 'intelligence.memoryChunk.letterhead.from': 'da', + 'intelligence.memoryChunk.letterhead.to': 'a', + 'intelligence.memoryChunk.mentioned.chunkOne': '1 pezzo', + 'intelligence.memoryChunk.mentioned.chunkOther': '{count} chunk', + 'intelligence.memoryChunk.mentioned.heading': 'm e n z i o n a t i', + 'intelligence.memoryChunk.scoreBars.ariaScore': 'punteggio {name} {pct} percento', + 'intelligence.memoryChunk.scoreBars.atThreshold': 'a {threshold}', + 'intelligence.memoryChunk.scoreBars.dropped': 'scartati', + 'intelligence.memoryChunk.scoreBars.heading': 'p e r c h é t e n u t i', + 'intelligence.memoryChunk.scoreBars.kept': 'tenuti', + 'intelligence.diagram.title': "Diagramma dell'architettura", + 'intelligence.diagram.description': + "Ultimo output dell'architettura locale dall'endpoint del diagramma configurato.", + 'intelligence.diagram.refresh': 'Refresh', + 'intelligence.diagram.refreshAria': 'Aggiorna diagramma', + 'intelligence.diagram.emptyTitle': 'Nessun diagramma disponibile', + 'intelligence.diagram.emptyDescription': + "Genera un diagramma dell'architettura dall'orchestratore e questo pannello si aggiornerà dall'endpoint locale configurato.", + 'intelligence.diagram.skillInstallCommand': 'npx skills add yizhiyanhua-ai/fireworks-tech-graph', + 'intelligence.diagram.promptExample': + "Genera un diagramma dell'architettura dello swarm attuale in stile terminale scuro", + 'intelligence.diagram.imageAlt': "Ultimo diagramma dell'architettura OpenHuman generato", + 'intelligence.diagram.refreshesEvery': 'Si aggiorna ogni {seconds}s', + 'intelligence.memoryText.entityTypePrefix': 'Tipo di entità', + 'intelligence.screenDebug.active': 'Attivo', + 'intelligence.screenDebug.app': 'App', + 'intelligence.screenDebug.bounds': 'Limiti', + 'intelligence.screenDebug.captureAlt': 'Risultato test di cattura', + 'intelligence.screenDebug.captureFailed': 'Fallito', + 'intelligence.screenDebug.captureSuccess': 'Successo', + 'intelligence.screenDebug.captureTest': 'Test di cattura', + 'intelligence.screenDebug.capturing': 'Cattura in corso', + 'intelligence.screenDebug.frames': 'Frame', + 'intelligence.screenDebug.idle': 'Inattivo', + 'intelligence.screenDebug.lastApp': 'Ultima app', + 'intelligence.screenDebug.mode': 'Modalità', + 'intelligence.screenDebug.permAccessibility': 'Permesso accessibilità', + 'intelligence.screenDebug.permInput': 'Permesso input', + 'intelligence.screenDebug.permScreen': 'Accessibilità', + 'intelligence.screenDebug.permissions': 'Permessi', + 'intelligence.screenDebug.platformNotSupported': 'Piattaforma non supportata', + 'intelligence.screenDebug.recentVisionSummaries': 'Riassunti vision recenti', + 'intelligence.screenDebug.session': 'Sessione', + 'intelligence.screenDebug.size': 'Dimensione', + 'intelligence.screenDebug.status': 'Stato', + 'intelligence.screenDebug.testCapture': 'Test cattura', + 'intelligence.screenDebug.time': 'Ora', + 'intelligence.screenDebug.title': 'Titolo', + 'intelligence.screenDebug.unknown': 'Sconosciuto', + 'intelligence.screenDebug.visionQueue': 'Coda vision', + 'intelligence.screenDebug.visionState': 'Stato vision', + 'intelligence.tasks.activeBoardOne': '1 board attiva tra le conversazioni', + 'intelligence.tasks.activeBoardOther': '{count} board attive tra le conversazioni', + 'intelligence.tasks.empty': "Nessuna board di attività dell'agente", + 'intelligence.tasks.emptyHint': 'Suggerimento vuoto', + 'intelligence.tasks.failedToLoad': 'Caricamento fallito', + 'intelligence.tasks.live': 'in tempo reale', + 'intelligence.tasks.loadingBoards': 'Caricamento board attività…', + 'intelligence.tasks.threadPrefix': 'Discussione {thread}', + 'intelligence.tasks.subtitle': + 'I tuoi compiti e le bacheche dei compiti degli agenti in tutto lo spazio di lavoro.', + 'intelligence.tasks.newTask': 'Nuovo compito', + 'intelligence.tasks.personalBoardTitle': "Compiti dell'agente", + 'intelligence.tasks.personalEmpty': 'Ancora nessun compito personale', + 'intelligence.tasks.composer.title': 'Nuovo compito', + 'intelligence.tasks.composer.titleLabel': 'Titolo', + 'intelligence.tasks.composer.titlePlaceholder': 'Cosa deve essere fatto?', + 'intelligence.tasks.composer.statusLabel': 'Stato', + 'intelligence.tasks.composer.attachLabel': 'Allega alla conversazione', + 'intelligence.tasks.composer.attachNone': 'Personale (nessuna conversazione)', + 'intelligence.tasks.composer.objectiveLabel': 'Obiettivo', + 'intelligence.tasks.composer.objectivePlaceholder': 'Facoltativo — il risultato desiderato', + 'intelligence.tasks.composer.notesLabel': 'Note', + 'intelligence.tasks.composer.notesPlaceholder': 'Note opzionali', + 'intelligence.tasks.composer.create': 'Crea attività', + 'intelligence.tasks.composer.creating': 'Creando…', + 'intelligence.tasks.composer.createFailed': 'Impossibile creare il task', + 'notifications.card.dismiss': 'Ignora notifica', + 'notifications.card.importanceTitle': 'Importanza: {pct}%', + 'notifications.center.empty': 'Nessuna notifica', + 'notifications.center.emptyHint': 'Suggerimento vuoto', + 'notifications.center.filterAll': 'Filtra tutte', + 'notifications.center.markAllRead': 'Segna tutte come lette', + 'notifications.center.title': 'Notifiche', + 'oauth.button.connecting': 'Connessione...', + 'oauth.button.loopbackTimeout': + 'Accesso scaduto — il browser non ha completato il reindirizzamento OAuth. Riprova.', + 'oauth.login.continueWith': 'Continua con', + 'onboarding.contextGathering.buildingDesc': 'Descrizione costruzione', + 'onboarding.contextGathering.buildingProfile': 'Costruzione del tuo profilo...', + 'onboarding.contextGathering.continueToChat': 'Continua alla chat', + 'onboarding.contextGathering.coreAlive': + 'Il core è raggiungibile — il primo avvio può richiedere un minuto.', + 'onboarding.contextGathering.coreAliveProbing': 'Verifica della connessione al core…', + 'onboarding.contextGathering.coreUnreachable': + 'Il core non risponde. Puoi continuare e riprovare più tardi.', + 'onboarding.contextGathering.errorDesc': + 'Non siamo riusciti a costruire il tuo profilo completo ora, ma va bene — puoi continuare e il tuo profilo si svilupperà nel tempo.', + 'onboarding.contextGathering.stillWorkingDesc': + 'Il primo avvio può richiedere 30–60 secondi mentre prepariamo il tuo modello locale e gli strumenti. Puoi continuare la chat in qualsiasi momento — la costruzione del profilo continua in background.', + 'onboarding.contextGathering.stillWorkingTitle': 'Stiamo ancora preparando il tuo profilo…', + 'onboarding.contextGathering.title': 'Raccolta del contesto', + 'openhuman.team_list_teams': 'Elenco team', + 'overlay.ariaAttention': 'Messaggio di attenzione', + 'overlay.ariaCompanion': 'Companion attivo', + 'overlay.ariaOrb': 'Overlay OpenHuman', + 'overlay.ariaVoiceActive': 'Input vocale attivo', + 'overlay.companion.error': 'Errore', + 'overlay.companion.listening': 'In ascolto…', + 'overlay.companion.pointing': 'Sta puntando…', + 'overlay.companion.speaking': 'Sta parlando…', + 'overlay.companion.thinking': 'Sta pensando…', + 'overlay.orbTitle': 'Trascina per spostare · Doppio clic per ripristinare la posizione', + 'pages.settings.account.connections': 'Connessioni', + 'pages.settings.account.connectionsDesc': 'Descrizione connessioni', + 'pages.settings.account.migration': 'Importa da un altro assistente', + 'pages.settings.account.migrationDesc': + 'Migra memoria e note da OpenClaw (e presto Hermes) in questo spazio di lavoro.', + 'pages.settings.account.privacy': 'Privacy', + 'pages.settings.account.privacyDesc': 'Descrizione privacy', + 'pages.settings.account.recoveryPhrase': 'Frase di recupero', + 'pages.settings.account.recoveryPhraseDesc': 'Descrizione frase di recupero', + 'pages.settings.account.team': 'Team', + 'pages.settings.account.teamDesc': 'Descrizione team', + 'pages.settings.accountSection.description': + 'Frase di recupero, team, connessioni e impostazioni privacy.', + 'pages.settings.accountSection.title': 'Account', + 'pages.settings.ai.llm': 'LLM', + 'pages.settings.ai.llmDesc': 'Descrizione LLM', + 'pages.settings.ai.voice': 'Voce', + 'pages.settings.ai.voiceDesc': 'Descrizione voce', + 'pages.settings.aiSection.description': + 'Provider di modelli linguistici, Ollama locale e voce (STT / TTS).', + 'pages.settings.aiSection.title': 'AI', + 'pages.settings.composioSection.title': 'Composio', + 'pages.settings.composioSection.description': + 'Routing, trigger e cronologia per le integrazioni fornite da Composio.', + 'settings.developerMenu.composio.title': 'Composio', + 'settings.developerMenu.composio.desc': + 'Modalità di routing, trigger di integrazione e archivio cronologico dei trigger.', + 'pages.settings.features.desktopCompanion': 'Companion Desktop', + 'pages.settings.features.desktopCompanionDesc': + 'Assistente vocale con consapevolezza dello schermo — ascolta, vede, parla, indica', + 'pages.settings.features.messagingChannels': 'Canali di messaggistica', + 'pages.settings.features.messagingChannelsDesc': 'Descrizione canali di messaggistica', + 'pages.settings.features.notifications': 'Notifiche', + 'pages.settings.features.notificationsDesc': 'Descrizione notifiche', + 'pages.settings.features.screenAwareness': 'Consapevolezza schermo', + 'pages.settings.features.screenAwarenessDesc': 'Descrizione consapevolezza schermo', + 'pages.settings.features.tools': 'Strumenti', + 'pages.settings.features.toolsDesc': 'Descrizione strumenti', + 'pages.settings.featuresSection.description': + 'Consapevolezza schermo, messaggistica e strumenti.', + 'pages.settings.featuresSection.title': 'Funzionalità', + 'privacy.dataKind.credentials': 'Credenziali', + 'privacy.dataKind.derived': 'Derivati', + 'privacy.dataKind.diagnostics': 'Diagnostica', + 'privacy.dataKind.metadata': 'Metadati', + 'privacy.dataKind.raw': 'Grezzi', + 'privacy.whatLeaves.link.label': 'Cosa esce dal mio computer?', + 'rewards.community.achievementsUnlocked': '{unlocked} di {total} obiettivi sbloccati', + 'rewards.community.connectDiscord': 'Connetti Discord', + 'rewards.community.cumulativeTokens': 'Token cumulativi', + 'rewards.community.currentStreak': 'Streak attuale', + 'rewards.community.discordLinkedNotInGuild': 'Discord collegato ma non nella gilda', + 'rewards.community.discordMember': 'Sei entrato nel server', + 'rewards.community.discordNotLinked': 'Discord non collegato', + 'rewards.community.discordServer': 'Server Discord', + 'rewards.community.discordStatusUnavailable': 'Stato Discord non disponibile', + 'rewards.community.discordWaiting': 'Attesa Discord', + 'rewards.community.heroSubtitle': 'Sottotitolo hero', + 'rewards.community.heroTitle': 'Titolo hero', + 'rewards.community.joinDiscord': 'Unisciti a Discord', + 'rewards.community.loadingRewards': 'Caricamento premi…', + 'rewards.community.locked': 'Bloccato', + 'rewards.community.retrying': 'Nuovo tentativo…', + 'rewards.community.rolesAndRewards': 'Ruoli e premi', + 'rewards.community.streakDays': '{n}', + 'rewards.community.syncPending': 'Sincronizzazione premi in attesa', + 'rewards.community.syncPendingDesc': 'Descrizione sincronizzazione in attesa', + 'rewards.community.syncUnavailable': 'Sincronizzazione non disponibile', + 'rewards.community.tryAgain': 'Nuovo tentativo…', + 'rewards.community.unknown': 'Sconosciuto', + 'rewards.community.unlocked': 'Sbloccato', + 'rewards.community.yourProgress': 'Il tuo progresso', + 'rewards.coupon.colCode': 'Codice', + 'rewards.coupon.colRedeemed': 'Riscattato', + 'rewards.coupon.colReward': 'Premio', + 'rewards.coupon.colStatus': 'Stato', + 'rewards.coupon.loadingHistory': 'Caricamento cronologia premi…', + 'rewards.coupon.noCodes': 'Nessun codice premio riscattato.', + 'rewards.coupon.pending': 'In attesa', + 'rewards.coupon.placeholder': 'Codice coupon', + 'rewards.coupon.promoCredits': 'Crediti promozionali', + 'rewards.coupon.recentRedemptions': 'Riscatti recenti', + 'rewards.coupon.redeemAccepted': + "{code} accettato. {amount} verrà sbloccato dopo il completamento dell'azione richiesta.", + 'rewards.coupon.redeemButton': 'Riscatta codice', + 'rewards.coupon.redeemSuccess': '{code} riscattato. {amount} è stato aggiunto ai tuoi crediti.', + 'rewards.coupon.redeemedCodes': 'Codici riscattati', + 'rewards.coupon.redeeming': 'Riscatto in corso...', + 'rewards.coupon.statusApplied': 'Applicato', + 'rewards.coupon.statusPendingAction': 'Azione in attesa', + 'rewards.coupon.statusRedeemed': 'Riscattato', + 'rewards.coupon.subtitle': 'Sottotitolo', + 'rewards.coupon.title': 'Riscatta un codice coupon', + 'rewards.referralSection.activity': 'Attività referral', + 'rewards.referralSection.apply': 'Applicazione…', + 'rewards.referralSection.applying': 'Applicazione…', + 'rewards.referralSection.colReferredUser': 'Utente referenziato', + 'rewards.referralSection.colReward': 'Premio', + 'rewards.referralSection.colStatus': 'Stato', + 'rewards.referralSection.colUpdated': 'Aggiornato', + 'rewards.referralSection.completed': 'Completato', + 'rewards.referralSection.copyCode': 'Copia codice', + 'rewards.referralSection.copyFailed': 'Copia fallita', + 'rewards.referralSection.haveCode': 'Hai un codice referral?', + 'rewards.referralSection.haveCodeDesc': 'Descrizione codice', + 'rewards.referralSection.linked': 'Collegato', + 'rewards.referralSection.linkedCode': '(codice {code})', + 'rewards.referralSection.loading': 'Caricamento programma referral…', + 'rewards.referralSection.retry': 'Riprova', + 'rewards.referralSection.noReferrals': 'Nessun referral', + 'rewards.referralSection.pendingReferrals': 'Referral in attesa', + 'rewards.referralSection.placeholder': 'Codice referral', + 'rewards.referralSection.share': 'Condividi', + 'rewards.referralSection.statusCompleted': 'Stato completato', + 'rewards.referralSection.statusExpired': 'Stato scaduto', + 'rewards.referralSection.statusJoined': 'Stato iscritto', + 'rewards.referralSection.subtitle': 'Sottotitolo', + 'rewards.referralSection.title': 'Invita amici, guadagna crediti', + 'rewards.referralSection.totalEarned': 'Totale guadagnato', + 'rewards.referralSection.yourCode': 'Il tuo codice', + 'settings.ai.addCloudProvider': 'Aggiungi provider cloud', + 'settings.ai.addProvider': 'Salvataggio…', + 'settings.ai.apiKeyFieldLabel': 'Etichetta campo chiave API', + 'settings.ai.apiKeyRequired': 'Incolla la tua chiave API per continuare.', + 'settings.ai.apiKeyStoredEncrypted': 'Chiave API memorizzata crittografata', + 'settings.ai.apiKeysEncrypted': 'auth-profiles.json', + 'settings.ai.clearStoredKey': 'Cancella chiave memorizzata', + 'settings.ai.connectProvider': 'Connetti provider', + 'settings.ai.customRouting': 'Instradamento personalizzato', + 'settings.ai.defaultResolvesTo': 'Il valore predefinito si risolve in', + 'settings.ai.discard': 'Scarta', + 'settings.ai.editProvider': 'Modifica provider', + 'settings.ai.llmProviders': 'Provider LLM', + 'settings.ai.llmProvidersDesc': 'Descrizione provider LLM', + 'settings.ai.localOllama': 'Locale (Ollama)', + 'settings.ai.modelLabel': 'Modello', + 'settings.ai.noCustomProviders': 'Nessun provider personalizzato', + 'settings.ai.openAiCompat.authHeaderExample': 'Authorization: Bearer ', + 'settings.ai.openAiCompat.authHeaderLabel': 'Intestazione autenticazione', + 'settings.ai.openAiCompat.baseUrlLabel': 'URL base', + 'settings.ai.openAiCompat.baseUrlUnavailable': 'Non disponibile', + 'settings.ai.openAiCompat.clearKey': 'Cancella chiave', + 'settings.ai.openAiCompat.description': + "Indirizza gli harness locali a questo server /v1 per instradare tramite i provider configurati qui sotto. L'autenticazione utilizza una chiave stabile che imposti qui, non il bearer interno del core dell'app.", + 'settings.ai.openAiCompat.keyConfigured': 'Chiave configurata', + 'settings.ai.openAiCompat.keyRequired': 'Chiave richiesta', + 'settings.ai.openAiCompat.rotateKey': 'Ruota chiave', + 'settings.ai.openAiCompat.setKey': 'Imposta chiave', + 'settings.ai.openAiCompat.title': 'Endpoint compatibile con OpenAI', + 'settings.ai.providerLabel': 'Fornitore', + 'skills.mcpComingSoon.title': 'MCP Server', + 'skills.mcpComingSoon.description': + 'La gestione dei server MCP è in arrivo. Questa scheda sarà il punto di riferimento per scoprire, connettere e monitorare le integrazioni con i server MCP.', + 'settings.ai.routing': 'Instradamento', + 'settings.ai.routingCustom': 'Instradamento personalizzato', + 'settings.ai.routingDefault': 'Predefinito', + 'settings.ai.routingDesc': 'Descrizione instradamento', + 'settings.ai.saveChanges': 'Salvataggio…', + 'settings.ai.saving': 'Salvataggio…', + 'settings.ai.unsavedChange': 'modifica non salvata', + 'settings.ai.unsavedChanges': 'modifiche non salvate', + 'settings.ai.workloadGroupBackground': 'Gruppo carico di lavoro background', + 'settings.ai.workloadGroupChat': 'Gruppo carico di lavoro chat', + 'settings.ai.disconnectProvider': 'Disconnetti {label}', + 'settings.ai.connectProviderLabel': 'Connetti {label}', + 'settings.ai.defaultLocalEndpoint': 'http://localhost:11434/v1', + 'settings.ai.endpointUrlLabel': "URL dell'endpoint", + 'settings.ai.localRuntimeHelper': + "Dove {label} è raggiungibile. Il valore predefinito è localhost; punta questo a un host remoto (per esempio, http://10.0.0.4:11434/v1) per utilizzare un'istanza condivisa.", + 'settings.ai.endpointUrlRequired': "È richiesto l'endpoint URL.", + 'settings.ai.endpointProtocolRequired': "L'endpoint deve iniziare con http:// o https://.", + 'settings.ai.connectProviderDialog': 'Connetti {label}', + 'settings.ai.or': 'Oppure', + 'settings.ai.openRouterOauthDescription': + "Accedi con OpenRouter e importa una chiave API controllata dall'utente usando PKCE.", + 'settings.ai.connecting': 'Connessione in corso...', + 'settings.ai.backgroundLoops': 'Loop in background', + 'settings.ai.backgroundLoopsDesc': + 'Vedi cosa funziona senza un messaggio di chat, metti in pausa il lavoro del battito cardiaco e ispeziona le righe recenti del libro mastro dei crediti.', + 'settings.ai.heartbeatControls': 'Controlli del battito cardiaco', + 'settings.ai.heartbeatControlsDesc': + "Predefinito spento. L'attivazione avvia il ciclo; la disattivazione interrompe il compito in corso.", + 'settings.ai.heartbeatLoop': 'Ciclo del battito cardiaco', + 'settings.ai.heartbeatLoopDesc': + 'Programmatore principale per pianificatore + inferenza subconscia opzionale.', + 'settings.ai.subconsciousInference': 'Inferenza subconscia', + 'settings.ai.subconsciousInferenceDesc': + 'Esegue la valutazione task/reflection supportata dal modello sui tic del battito cardiaco.', + 'settings.ai.calendarMeetingChecks': 'Controlli delle riunioni del calendario', + 'settings.ai.calendarMeetingChecksDesc': + "Chiama l'elenco degli eventi del calendario per le connessioni del calendario Google attive.", + 'settings.ai.calendarCap': 'Limite calendario', + 'settings.ai.connectionsPerTick': '{count} conn/tick', + 'settings.ai.meetingLookahead': 'Previsione riunione', + 'settings.ai.minutesShort': '{count} min', + 'settings.ai.reminderLookahead': 'Previsione promemoria', + 'settings.ai.cronReminderChecks': 'Controlli del promemoria cron', + 'settings.ai.cronReminderChecksDesc': + 'Scansiona i cron job abilitati per elementi imminenti simili a promemoria.', + 'settings.ai.relevantNotificationChecks': 'Controlli delle notifiche pertinenti', + 'settings.ai.relevantNotificationChecksDesc': + 'Promuove le notifiche locali urgenti in avvisi proattivi.', + 'settings.ai.externalDelivery': 'Consegna esterna', + 'settings.ai.externalDeliveryDesc': + 'Lasciamo che gli avvisi del battito cardiaco inviino messaggi proattivi a canali esterni.', + 'settings.ai.interval': 'Intervallo', + 'settings.ai.running': 'In esecuzione...', + 'settings.ai.plannerTickNow': 'Pianificatore seleziona ora', + 'settings.ai.loadingHeartbeatControls': 'Caricamento controlli heartbeat...', + 'settings.ai.heartbeatControlsUnavailable': 'Controlli heartbeat non disponibili.', + 'settings.ai.loopMap': 'Mappa del ciclo', + 'settings.ai.plannerSummary': + 'Pianificatore: {sourceEvents} eventi origine, {sent} inviati, {deduped} deduplicato.', + 'settings.ai.routeLabel': 'percorso: {route}', + 'settings.ai.on': 'acceso', + 'settings.ai.off': 'disattivato', + 'settings.ai.recentUsageLedger': 'Registro utilizzo recente', + 'settings.ai.recentUsageLedgerDesc': + 'Le righe del backend espongono action/time oggi; i tag sorgente necessitano del supporto del backend.', + 'settings.ai.latestSpend': 'Ultima spesa: {amount} alle {time} ({action})', + 'settings.ai.topActions': 'Azioni principali', + 'settings.ai.noSpendRows': 'Nessuna riga di spesa caricata.', + 'settings.ai.topHours': 'Ore principali', + 'settings.ai.noHourlySpend': 'Ancora nessuna spesa oraria.', + 'settings.ai.openhumanDefault': 'OpenHuman (predefinito)', + 'settings.ai.localModelResolved': 'Ollama · {model}', + 'settings.ai.customRoutingForWorkload': 'Routing personalizzato per {label}', + 'settings.ai.loadingModels': 'Caricamento modelli...', + 'settings.ai.enterModelIdManually': "oppure inserisci manualmente l'ID del modello:", + 'settings.ai.modelIdPlaceholderForProvider': '{slug} ID modello', + 'settings.ai.modelIdPlaceholder': 'model-id', + 'settings.ai.selectModel': 'Seleziona un modello...', + 'settings.ai.temperatureOverride': 'Ignora temperatura', + 'settings.ai.temperatureOverrideSlider': 'Ignora temperatura (cursore)', + 'settings.ai.temperatureOverrideValue': 'Ignora temperatura (valore)', + 'settings.ai.temperatureOverrideDesc': + 'Più basso = più deterministico. Lascia deselezionato per usare il valore predefinito del provider.', + 'settings.ai.testFailed': 'Test non riuscito', + 'settings.ai.testingModel': 'Test del modello...', + 'settings.ai.modelResponse': 'Risposta del modello', + 'settings.ai.providerWithValue': 'Fornitore: {value}', + 'settings.ai.noneDash': '—', + 'settings.ai.promptHelloWorld': 'Prompt: Ciao mondo', + 'settings.ai.startedAt': 'Avviato: {value}', + 'settings.ai.waitingForModelResponse': 'In attesa di risposta dal modello selezionato...', + 'settings.ai.response': 'Risposta', + 'settings.ai.testing': 'Test...', + 'settings.ai.test': 'Test', + 'settings.ai.slugMissingError': 'Immettere il nome di un provider per generare uno slug.', + 'settings.ai.slugInUseError': 'Il nome del provider è già in uso.', + 'settings.ai.slugReservedError': 'Scegli un nome provider diverso.', + 'settings.ai.providerNamePlaceholder': 'Il mio provider', + 'settings.ai.slugLabel': 'Lumaca:', + 'settings.ai.openAiUrlLabel': 'URL OpenAI', + 'settings.ai.openAiUrlPlaceholder': 'https://api.openai.com/v1', + 'settings.ai.keepExistingKeyPlaceholder': 'Lascia vuoto per mantenere la chiave esistente', + 'settings.ai.reindexingMemory': 'Reindicizzazione della memoria', + 'settings.ai.reindexingMemoryMessage': + "Gli embeddings stanno venendo rielaborati. L'elemento di memoria {pending} viene ri-embedded sotto il modello attuale — il richiamo semantico è ridotto fino al completamento di questa operazione. La ricerca per parole chiave continua a funzionare e il ri-embedding continua in background se chiudi questo.", + 'settings.ai.signInWithOpenRouter': 'Accedi con OpenRouter', + 'settings.ai.weekBudget': 'Budget settimanale', + 'settings.ai.cycleRemaining': 'Ciclo rimanente', + 'settings.ai.cycleTotalSpend': 'Ciclo di spesa totale', + 'settings.ai.avgSpendRow': 'Riga di spesa media', + 'settings.ai.backgroundApiReads': 'Bg API letture', + 'settings.ai.backgroundWakeups': 'Risvegli Bg', + 'settings.ai.budgetMath': 'Matematica del budget', + 'settings.ai.rowsLeft': 'Righe rimaste', + 'settings.ai.rowsPerFullWeekBudget': 'Righe per budget settimanale intero', + 'settings.ai.sampleBurnRate': 'Velocità di combustione del campione', + 'settings.ai.projectedEmpty': 'Vuoto previsto', + 'settings.ai.apiReadsPerDollarRemaining': 'API letture per $ rimanenti', + 'settings.ai.loopCallBudget': 'Budget delle chiamate in loop', + 'settings.ai.heartbeatTicks': 'Tick del battito cardiaco', + 'settings.ai.calendarPlannerCalls': 'Chiamate del pianificatore del calendario', + 'settings.ai.calendarFanoutCap': 'Limite fanout del calendario', + 'settings.ai.subconsciousModelCalls': 'Chiamate del modello subconscio', + 'settings.ai.composioSyncScans': 'Composio scansioni di sincronizzazione', + 'settings.ai.totalBackgroundApiReadBudget': 'Totale bg API budget letto', + 'settings.ai.memoryWorkerPolls': 'Sondaggi del Memory Worker', + 'settings.ai.defaultProviderName': 'OpenHuman', + 'settings.ai.routing.managed': 'Gestiti', + 'settings.ai.routing.managedDesc': + 'OpenHuman eseguirà tutte le inferenze nel cloud, sceglierà il miglior modello per il compito, ottimizzerà i costi e manterrà le impostazioni di routing più sicure.', + 'settings.ai.routing.managedMsg': + 'OpenHuman gestirà tutte le inferenze per ogni carico di lavoro e sceglierà automaticamente il percorso migliore in termini di costo, qualità e sicurezza.', + 'settings.ai.routing.useYourOwn': 'Utilizza i tuoi modelli', + 'settings.ai.routing.useYourOwnDesc': + 'Scegli un fornitore + modello e instrada ogni carico di lavoro attraverso di esso. Questo è semplice, ma può essere inefficiente perché tutte le inferenze leggere e pesanti condividono lo stesso percorso.', + 'settings.ai.routing.advanced': 'Avanzato', + 'settings.ai.routing.advancedDesc': + "Scegli modelli diversi per compiti diversi. Questa è l'opzione migliore per un'ottimizzazione dei costi stretta e per avere il massimo controllo.", + 'settings.ai.routing.customDesc': + 'Il routing dettagliato ti offre la migliore ottimizzazione dei costi e il massimo controllo. Usa le righe qui sotto per decidere quali carichi di lavoro rimangono gestiti, quali utilizzano il tuo predefinito condiviso e quali vengono assegnati a un modello specifico.', + 'settings.ai.routing.chatAndConversations': 'Chat e conversazioni', + 'settings.ai.routing.chatDesc': + "Modelli utilizzati durante l'interazione diretta con l'utente, risposte, ragionamento, cicli dell'agente e assistenza alla codifica.", + 'settings.ai.routing.backgroundTasks': 'Attività in background', + 'settings.ai.routing.bgTasksDesc': + 'Modelli utilizzati al di fuori del flusso principale della conversazione per sintesi, battito, apprendimento e valutazione subconscia.', + 'settings.ai.routing.addCustomProvider': 'Aggiungi provider personalizzato', + 'settings.ai.globalModel.title': 'Scegli un modello per tutto', + 'settings.ai.globalModel.desc': + "Questo instrada tutta l'inferenza attraverso un modello. È più semplice, ma può essere inefficiente per quanto riguarda i costi e la qualità perché compiti leggeri e pesanti utilizzeranno tutti lo stesso percorso.", + 'settings.ai.globalModel.noProviders': + 'Aggiungi o collega prima un fornitore. Poi puoi instradare ogni carico di lavoro attraverso un modello qui.', + 'settings.ai.globalModel.provider': 'Fornitore', + 'settings.ai.globalModel.model': 'Modello', + 'settings.ai.globalModel.loadingModels': 'Caricamento modelli…', + 'settings.ai.globalModel.enterModelId': 'Inserisci ID modello', + 'settings.ai.globalModel.appliesToAll': + 'Applica lo stesso provider + modello a chat, ragionamento, codifica, memoria, battito cardiaco, apprendimento e subconscio. Le embeddings sono configurate separatamente. Le modifiche vengono salvate quando clicchi su salva.', + 'settings.ai.globalModel.saving': 'Salvataggio…', + 'settings.ai.globalModel.saved': 'Salvato', + 'settings.ai.workload.noModel': 'Nessun modello selezionato', + 'settings.ai.workload.changeModel': 'Cambia modello', + 'settings.ai.workload.chooseModel': 'Scegli modello', + 'settings.ai.provider.ollama': 'Ollama', + 'settings.autocomplete.appFilter.acceptSuggestion': 'Accetta suggerimento', + 'settings.autocomplete.appFilter.app': 'App', + 'settings.autocomplete.appFilter.currentSuggestion': 'Suggerimento corrente', + 'settings.autocomplete.appFilter.contextOverride': 'Override contesto (opzionale)', + 'settings.autocomplete.appFilter.debounce': 'Antirimbalzo', + 'settings.autocomplete.appFilter.debugFocus': 'Focus debug', + 'settings.autocomplete.appFilter.enabled': 'Abilitato', + 'settings.autocomplete.appFilter.getSuggestion': 'Ottieni suggerimento', + 'settings.autocomplete.appFilter.lastError': 'Ultimo errore', + 'settings.autocomplete.appFilter.liveLogs': 'Log live', + 'settings.autocomplete.appFilter.model': 'Modello', + 'settings.autocomplete.appFilter.noLogs': 'Nessun log', + 'settings.autocomplete.appFilter.phase': 'Fase', + 'settings.autocomplete.appFilter.platformSupported': 'Piattaforma supportata', + 'settings.autocomplete.appFilter.refreshStatus': 'Aggiornamento…', + 'settings.autocomplete.appFilter.refreshing': 'Aggiornamento…', + 'settings.autocomplete.appFilter.running': 'In esecuzione', + 'settings.autocomplete.appFilter.runtime': 'Tempo di esecuzione', + 'settings.autocomplete.appFilter.test': 'Test', + 'settings.autocomplete.completionStyle.acceptedCompletion': + '{count} completamento accettato memorizzato — usato per personalizzare i futuri suggerimenti.', + 'settings.autocomplete.completionStyle.acceptedCompletions': + '{count} completamenti accettati memorizzati — usati per personalizzare i futuri suggerimenti.', + 'settings.autocomplete.completionStyle.clearHistory': 'Cancellazione…', + 'settings.autocomplete.completionStyle.clearing': 'Cancellazione…', + 'settings.autocomplete.completionStyle.debounce': 'Rimbalzo (ms)', + 'settings.autocomplete.completionStyle.enabled': 'Abilitato', + 'settings.autocomplete.completionStyle.maxChars': 'Caratteri max', + 'settings.autocomplete.completionStyle.noHistory': + 'Nessun completamento accettato. Accetta i suggerimenti con Tab per iniziare a personalizzare.', + 'settings.autocomplete.completionStyle.overlayTtl': 'TTL overlay (ms)', + 'settings.autocomplete.completionStyle.personalizationHistory': 'Cronologia personalizzazione', + 'settings.autocomplete.completionStyle.styleExamples': 'Esempi di stile (uno per riga)', + 'settings.autocomplete.completionStyle.styleInstructions': 'Istruzioni di stile', + 'settings.autocomplete.debug.acceptedPrefix': 'Accettato: {value}', + 'settings.autocomplete.debug.acceptFailed': 'Impossibile accettare il suggerimento', + 'settings.autocomplete.debug.alreadyRunning': 'Il completamento automatico è già in esecuzione.', + 'settings.autocomplete.debug.clearHistoryFailed': 'Impossibile cancellare la cronologia.', + 'settings.autocomplete.debug.didNotStart': 'Il completamento automatico non è stato avviato.', + 'settings.autocomplete.debug.disabledInSettings': + 'Il completamento automatico è disabilitato nelle impostazioni. Abilitalo e salva prima.', + 'settings.autocomplete.debug.fetchSuggestionFailed': + 'Impossibile recuperare il suggerimento corrente', + 'settings.autocomplete.debug.inspectFocusedElementFailed': + "Impossibile controllare l'elemento selezionato", + 'settings.autocomplete.debug.loadSettingsFailed': + 'Impossibile caricare le impostazioni di completamento automatico', + 'settings.autocomplete.debug.noSuggestionApplied': 'Nessun suggerimento è stato applicato.', + 'settings.autocomplete.debug.noSuggestionReturned': 'Nessun suggerimento restituito.', + 'settings.autocomplete.debug.refreshStatusFailed': + 'Impossibile aggiornare lo stato del completamento automatico', + 'settings.autocomplete.debug.saveAdvancedSettingsFailed': + 'Impossibile salvare le impostazioni avanzate', + 'settings.autocomplete.debug.startFailed': 'Impossibile avviare il completamento automatico', + 'settings.autocomplete.debug.stopFailed': 'Impossibile arrestare il completamento automatico', + 'settings.autocomplete.debug.suggestionPrefix': 'Suggerimento: {value}', + 'settings.autocomplete.shared.none': 'Nessuno', + 'settings.autocomplete.shared.notApplicable': 'n/a', + 'settings.autocomplete.shared.unknown': 'Sconosciuto', + 'settings.billing.autoRecharge.addAmount': 'Aggiungi questo importo', + 'settings.billing.autoRecharge.addCard': 'Aggiungi carta', + 'settings.billing.autoRecharge.amountHint': 'Suggerimento importo', + 'settings.billing.autoRecharge.defaultCard': 'Carta predefinita', + 'settings.billing.autoRecharge.lastRechargeFailed': 'Ultima ricarica fallita', + 'settings.billing.autoRecharge.lastRecharged': 'Ultima ricarica', + 'settings.billing.autoRecharge.expires': 'Scadenza {date}', + 'settings.billing.autoRecharge.noCards': 'Nessuna carta', + 'settings.billing.autoRecharge.paymentMethods': 'Metodi di pagamento', + 'settings.billing.autoRecharge.rechargeInProgress': 'Ricarica in corso', + 'settings.billing.autoRecharge.spentThisWeek': '${spent} di ${limit} utilizzato questa settimana', + 'settings.billing.autoRecharge.rechargeWhen': 'Ricarica quando il saldo scende sotto', + 'settings.billing.autoRecharge.saveSettings': 'Salvataggio…', + 'settings.billing.autoRecharge.saving': 'Salvataggio…', + 'settings.billing.autoRecharge.setDefault': 'Imposta come predefinita', + 'settings.billing.autoRecharge.subtitle': 'Sottotitolo', + 'settings.billing.autoRecharge.title': 'Abilita ricarica automatica', + 'settings.billing.autoRecharge.toggleAriaLabel': 'Attiva/disattiva ricarica automatica', + 'settings.billing.autoRecharge.weeklyLimit': 'Limite di spesa settimanale', + 'settings.billing.history.desc': 'Descrizione', + 'settings.billing.history.empty': 'Vuoto', + 'settings.billing.history.openPortal': 'Apri portale', + 'settings.billing.history.posted': 'Registrato', + 'settings.billing.history.title': 'Titolo', + 'settings.billing.inferenceBudget.cycleEnds': 'Fine ciclo', + 'settings.billing.inferenceBudget.exhausted': 'Esaurito', + 'settings.billing.inferenceBudget.loadError': 'Errore di caricamento', + 'settings.billing.inferenceBudget.noBudgetDesc': 'Nessuna descrizione budget', + 'settings.billing.inferenceBudget.noRecurringBudget': 'Nessun budget ricorrente', + 'settings.billing.inferenceBudget.noRecurringPlanBudget': 'Nessun budget del piano ricorrente', + 'settings.billing.inferenceBudget.noRecurringWeeklyDesc': + "Il tuo piano attuale non include un budget ricorrente settimanale per le inferenze. L'utilizzo viene invece pagato dai crediti disponibili.", + 'settings.billing.inferenceBudget.remaining': 'Rimanente', + 'settings.billing.inferenceBudget.remainingSummary': '{remaining} / {budget} rimanente', + 'settings.billing.inferenceBudget.spentThisCycle': 'Speso {amount} in questo ciclo', + 'settings.billing.inferenceBudget.cycleEndsOn': 'Il ciclo termina {date}', + 'settings.billing.inferenceBudget.exhaustedDesc': + "L'utilizzo dell'abbonamento incluso è esaurito. Ricarica i crediti per continuare a usare AI senza aspettare il ciclo successivo.", + 'settings.billing.inferenceBudget.discountVsPayg': + '{pct}% più economico per chiamata rispetto al pagamento a consumo.', + 'settings.billing.inferenceBudget.cycleSpend': 'Ciclo di spesa', + 'settings.billing.inferenceBudget.totalAmount': '{amount} totale', + 'settings.billing.inferenceBudget.inference': 'Inferenza', + 'settings.billing.inferenceBudget.integrations': 'Integrazioni', + 'settings.billing.inferenceBudget.calls': '{count} chiamate', + 'settings.billing.inferenceBudget.dailySpend': 'Spesa giornaliera', + 'settings.billing.inferenceBudget.dailySpendPoint': '{date}: {amount}', + 'settings.billing.inferenceBudget.topModels': 'Modelli principali', + 'settings.billing.inferenceBudget.noInferenceUsage': + "Nessun utilizzo dell'inferenza in questo ciclo.", + 'settings.billing.inferenceBudget.topIntegrations': 'Integrazioni principali', + 'settings.billing.inferenceBudget.noIntegrationUsage': + "Nessun utilizzo dell'integrazione in questo ciclo.", + 'settings.billing.inferenceBudget.tenHourCap': 'Limite di 10 ore', + 'settings.billing.inferenceBudget.title': 'Titolo', + 'settings.billing.inferenceBudget.unableToLoad': 'Impossibile caricare i dati di utilizzo', + 'settings.billing.inferenceBudget.notAvailable': 'n/a', + 'settings.billing.payAsYouGo.available': 'Disponibile', + 'settings.billing.payAsYouGo.chargeCustomAmount': 'Apertura…', + 'settings.billing.payAsYouGo.chooseTopUpDesc': 'Descrizione scelta ricarica', + 'settings.billing.payAsYouGo.chooseTopUpTitle': 'Titolo scelta ricarica', + 'settings.billing.payAsYouGo.creditBalanceDesc': 'Descrizione saldo crediti', + 'settings.billing.payAsYouGo.creditBalanceTitle': 'Titolo saldo crediti', + 'settings.billing.payAsYouGo.customAmount': 'Importo personalizzato', + 'settings.billing.payAsYouGo.enterAmount': 'Inserisci importo', + 'settings.billing.payAsYouGo.opening': 'Apertura', + 'settings.billing.payAsYouGo.promotionalCredits': 'Crediti promozionali', + 'settings.billing.payAsYouGo.topUpBalance': 'Saldo ricarica', + 'settings.billing.payAsYouGo.topUpCredits': 'Ricarica crediti', + 'settings.billing.payAsYouGo.unableToLoad': 'Impossibile caricare il saldo.', + 'settings.billing.subscription.annual': 'Annuale', + 'settings.billing.subscription.billedAnnually': 'Fatturato annualmente', + 'settings.billing.subscription.chooseSubtitle': 'Sottotitolo scelta', + 'settings.billing.subscription.chooseTitle': 'Titolo scelta', + 'settings.billing.subscription.cryptoDesc': 'Descrizione crypto', + 'settings.billing.subscription.cryptoQuestion': 'Domanda crypto', + 'settings.billing.subscription.current': 'Attuale', + 'settings.billing.subscription.currentPlan': 'Piano attuale', + 'settings.billing.subscription.monthly': 'Mensile', + 'settings.billing.subscription.paymentConfirmed': 'Pagamento confermato', + 'settings.billing.subscription.perMonth': 'Al mese', + 'settings.billing.subscription.popular': 'Popolare', + 'settings.billing.subscription.save': '{pct}', + 'settings.billing.subscription.upgrade': 'Aggiorna', + 'settings.billing.subscription.waiting': 'In attesa', + 'settings.billing.subscription.waitingPayment': 'In attesa di pagamento', + 'settings.composio.apiKeyDesc': + 'Una chiave API Composio è attualmente memorizzata su questo dispositivo.', + 'settings.composio.apiKeyExamplePlaceholder': 'ck_live_xxxxxxxxxxxxxxxxx', + 'settings.composio.apiKeyLabel': 'Chiave API Composio', + 'settings.composio.apiKeyStored': 'Chiave API memorizzata', + 'settings.composio.apiKeyStoredPlaceholder': '••••••••••••••••', + 'settings.composio.clearedToBackend': 'Passato alla modalità Backend', + 'settings.composio.confirmItem1': 'Un account su app.composio.dev con una chiave API', + 'settings.composio.confirmItem2': + 'Per ricollegare ogni integrazione tramite il tuo account Composio personale', + 'settings.composio.confirmItem3': + 'Nota: i trigger Composio (webhook in tempo reale) non funzionano ancora in modalità Diretta — solo le chiamate sincrone agli strumenti', + 'settings.composio.confirmNeedItems': 'Ti serviranno:', + 'settings.composio.confirmSwitch': 'Ho capito, passa a Diretta', + 'settings.composio.confirmTitle': '⚠️ Passaggio alla modalità Diretta', + 'settings.composio.confirmWarning': + 'Le tue integrazioni esistenti (Gmail, Slack, GitHub, ecc. collegate tramite OpenHuman) non saranno visibili — risiedono nel tenant Composio gestito da OpenHuman.', + 'settings.composio.intro': + 'Composio integra oltre 250 app esterne come strumenti che il tuo agente può chiamare. Scegli come instradare queste chiamate.', + 'settings.composio.title': 'Composio', + 'settings.composio.modeDirect': 'Diretta (usa la tua chiave API)', + 'settings.composio.modeDirectDesc': + "Le chiamate vanno direttamente a backend.composio.dev. Sovrana / offline-friendly. L'esecuzione degli strumenti funziona in modo sincrono; i webhook dei trigger in tempo reale non sono ancora instradati in modalità diretta (issue di follow-up).", + 'settings.composio.modeManaged': 'Gestita (OpenHuman lo gestisce per te)', + 'settings.composio.modeManagedDesc': + "OpenHuman fa da proxy per le chiamate degli strumenti tramite il nostro backend (consigliato). L'autenticazione è mediata; non incolli mai una chiave API Composio. I webhook sono completamente instradati.", + 'settings.composio.routingMode': 'Modalità di instradamento', + 'settings.composio.saveErrorNoKey': + 'Salvataggio fallito. La modalità Diretta richiede una chiave API non vuota.', + 'settings.composio.saving': 'Salvataggio…', + 'settings.composio.switching': 'Passaggio…', + 'settings.companion.title': 'Compagno da scrivania', + 'settings.companion.session': 'Sessione', + 'settings.companion.activeLabel': 'Attivo', + 'settings.companion.inactiveStatus': 'Inattivo', + 'settings.companion.stopping': 'Arresto…', + 'settings.companion.stopSession': 'Interrompi sessione', + 'settings.companion.starting': 'Avvio…', + 'settings.companion.startSession': 'Avvia sessione', + 'settings.companion.sessionId': 'ID sessione', + 'settings.companion.turns': 'Turni', + 'settings.companion.remaining': 'Rimanenti', + 'settings.companion.configuration': 'Configurazione', + 'settings.companion.hotkey': 'Tasto di scelta rapida', + 'settings.companion.activationMode': 'Modalità di attivazione', + 'settings.companion.sessionTtl': 'Sessione TTL', + 'settings.companion.screenCapture': 'Acquisizione schermata', + 'settings.companion.appContext': 'Contesto app', + 'settings.cron.jobs.desc': 'Descrizione', + 'settings.cron.jobs.empty': 'Nessun cron job core trovato.', + 'settings.cron.jobs.lastStatus': 'Ultimo stato', + 'settings.cron.jobs.loading': 'Caricamento cron job...', + 'settings.cron.jobs.loadingRuns': 'Caricamento esecuzioni', + 'settings.cron.jobs.nextRun': 'Prossima esecuzione', + 'settings.cron.jobs.pause': 'Pausa', + 'settings.cron.jobs.paused': 'In pausa', + 'settings.cron.jobs.recentRuns': 'Esecuzioni recenti', + 'settings.cron.jobs.removing': 'Rimozione', + 'settings.cron.jobs.resume': 'Riprendi', + 'settings.cron.jobs.runningNow': 'In esecuzione ora', + 'settings.cron.jobs.saving': 'Salvataggio…', + 'settings.cron.jobs.schedule': 'Pianificazione', + 'settings.cron.jobs.title': 'Cron Job core', + 'settings.cron.jobs.viewRuns': 'Visualizza esecuzioni', + 'settings.localModel.deviceCapability.active': 'Attivo', + 'settings.localModel.deviceCapability.appliedTier': 'Tier applicato', + 'settings.localModel.deviceCapability.applying': 'Applicazione', + 'settings.localModel.deviceCapability.cores': '{count}', + 'settings.localModel.deviceCapability.couldNotLoadPresets': 'Impossibile caricare i preset', + 'settings.localModel.deviceCapability.cpu': 'CPU', + 'settings.localModel.deviceCapability.customModelIds': 'ID modello personalizzati', + 'settings.localModel.deviceCapability.detected': 'Rilevato', + 'settings.localModel.deviceCapability.disabled': 'Disabilitato', + 'settings.localModel.deviceCapability.disabledDesc': 'Descrizione disabilitato', + 'settings.localModel.deviceCapability.downloadingModels': '(download modelli)', + 'settings.localModel.deviceCapability.downloadingSetupDesc': + "Download dell'installer OllamaSetup (~2 GB) e scompattazione. Al primo avvio può richiedere un minuto.", + 'settings.localModel.deviceCapability.failedToApplyPreset': 'Impossibile applicare il preset', + 'settings.localModel.deviceCapability.gpu': 'GPU', + 'settings.localModel.deviceCapability.installFailed': 'Installazione Ollama fallita', + 'settings.localModel.deviceCapability.installFailedDesc': + "L'installer è uscito prima che Ollama fosse utilizzabile. Clicca riprova oppure installa manualmente da ollama.com.", + 'settings.localModel.deviceCapability.installFirst': 'Esegui prima Ollama.', + 'settings.localModel.deviceCapability.installFirstDesc': + 'I tier locali dipendono da un endpoint Ollama gestito esternamente. Avvialo tu, scarica i modelli che vuoi e continua a usare "Disabilitato (fallback cloud)" finché il runtime non è raggiungibile.', + 'settings.localModel.deviceCapability.installOllamaFirst': + 'Esegui prima Ollama per usare questo tier', + 'settings.localModel.deviceCapability.installingOllama': 'Installazione Ollama', + 'settings.localModel.deviceCapability.loadingDeviceInfo': 'Caricamento info dispositivo', + 'settings.localModel.deviceCapability.localAiDisabled': + 'AI locale disabilitata — uso il fallback cloud.', + 'settings.localModel.deviceCapability.modelTier': 'Tier del modello', + 'settings.localModel.deviceCapability.needsOllama': 'Richiede Ollama', + 'settings.localModel.deviceCapability.notDetected': 'Non rilevato', + 'settings.localModel.deviceCapability.disabledLowercase': 'disabilitato', + 'settings.localModel.deviceCapability.presetDetails': + 'Chat: {chatModel} · Visione: {visionModel} · RAM di destinazione: {targetRamGb} GB', + 'settings.localModel.deviceCapability.ram': 'RAM', + 'settings.localModel.deviceCapability.recommended': 'Consigliato', + 'settings.localModel.deviceCapability.retryInstall': 'Nuovo tentativo…', + 'settings.localModel.deviceCapability.retrying': 'Nuovo tentativo…', + 'settings.localModel.deviceCapability.starting': 'Avvio…', + 'settings.localModel.download.audioPathPlaceholder': 'Percorso assoluto al file audio', + 'settings.localModel.download.capabilityChat': 'Chat', + 'settings.localModel.download.capabilityEmbedding': 'Incorporamento', + 'settings.localModel.download.capabilityAssets': 'Asset di capacità', + 'settings.localModel.download.capabilityStt': 'STT', + 'settings.localModel.download.capabilityTts': 'TTS', + 'settings.localModel.download.capabilityVision': 'Visione', + 'settings.localModel.download.downloading': 'Download in corso...', + 'settings.localModel.download.embeddingDimensions': 'Dimensioni: {dimensions}', + 'settings.localModel.download.embeddingModel': 'Modello: {modelId}', + 'settings.localModel.download.embeddingPlaceholder': 'Una stringa di input per riga...', + 'settings.localModel.download.embeddingVectors': 'Vettori: {count}', + 'settings.localModel.download.noThinkMode': 'Modalità no-think', + 'settings.localModel.download.notAvailable': 'n/a', + 'settings.localModel.download.promptPlaceholder': + 'Scrivi un prompt qualsiasi ed eseguilo sul modello locale...', + 'settings.localModel.download.quantizationPref': 'Preferenza quantizzazione', + 'settings.localModel.download.runEmbeddingTest': 'Esecuzione...', + 'settings.localModel.download.runPromptTest': 'Esegui test prompt', + 'settings.localModel.download.runSummaryTest': 'Esegui test riassunto', + 'settings.localModel.download.runTranscriptionTest': 'Esecuzione...', + 'settings.localModel.download.runTtsTest': 'Esecuzione...', + 'settings.localModel.download.runVisionTest': 'Esecuzione...', + 'settings.localModel.download.running': 'Esecuzione...', + 'settings.localModel.download.runningPrompt': 'Esecuzione prompt', + 'settings.localModel.download.summaryHelper': + 'Chiama `openhuman.inference_summarize` tramite Rust core', + 'settings.localModel.download.summarizePlaceholder': + 'Incolla il testo da riassumere con il modello locale...', + 'settings.localModel.download.testCustomPrompt': 'Test prompt personalizzato', + 'settings.localModel.download.testEmbeddings': 'Test embedding', + 'settings.localModel.download.testSummarization': 'Test riassunto', + 'settings.localModel.download.testVisionPrompt': 'Test prompt vision', + 'settings.localModel.download.testVoiceInput': 'Test input vocale (STT)', + 'settings.localModel.download.testVoiceOutput': 'Test output vocale (TTS)', + 'settings.localModel.download.transcript': 'Trascrizione:', + 'settings.localModel.download.ttsOutput': 'Output: {outputPath}', + 'settings.localModel.download.ttsOutputPlaceholder': 'Percorso WAV di output opzionale', + 'settings.localModel.download.ttsPlaceholder': 'Inserisci il testo da sintetizzare...', + 'settings.localModel.download.ttsVoice': 'Voce: {voiceId}', + 'settings.localModel.download.visionImagePlaceholder': + 'Un riferimento immagine per riga (data URI, URL o marcatore di percorso locale)', + 'settings.localModel.download.visionPromptPlaceholder': + 'Inserisci un prompt per il modello vision...', + 'settings.localModel.status.allChecksPassed': 'Tutti i controlli superati', + 'settings.localModel.status.artifact': 'Artefatto', + 'settings.localModel.status.backend': 'Backend', + 'settings.localModel.status.binary': 'Binario', + 'settings.localModel.status.bootstrapResume': 'Bootstrap / ripresa', + 'settings.localModel.status.checking': 'Verifica in corso...', + 'settings.localModel.status.checkingOllama': 'Verifica Ollama', + 'settings.localModel.status.contextBelowMinimumBadge': + '{contextLength} ctx - inferiore a {required} min', + 'settings.localModel.status.contextBelowMinimumTitle': + 'Rifiutato: i token {contextLength} della finestra di contesto sono al di sotto del minimo {required}-token richiesto dal livello di memoria. Il richiamo verrebbe danneggiato dal troncamento silenzioso.', + 'settings.localModel.status.contextOkBadge': '{contextLength} ctx ✓', + 'settings.localModel.status.contextOkTitle': + 'I token {contextLength} della finestra di contesto soddisfano il livello minimo di memoria di token {required}.', + 'settings.localModel.status.contextUnknownBadge': 'ctx sconosciuto', + 'settings.localModel.status.contextUnknownTitle': + 'Finestra di contesto sconosciuta; non è stato possibile confermare che soddisfi il livello minimo di memoria {required}-token.', + 'settings.localModel.status.customLocation': 'Posizione personalizzata', + 'settings.localModel.status.customLocationDesc': 'Descrizione posizione personalizzata', + 'settings.localModel.status.diagnosticsHint': + 'Clicca "Esegui diagnostica" per verificare che Ollama sia in esecuzione e i modelli installati.', + 'settings.localModel.status.downloadingUnknown': 'Download (dimensione sconosciuta)', + 'settings.localModel.status.eta': 'ETA', + 'settings.localModel.status.expectedModels': 'Modelli attesi', + 'settings.localModel.status.expectedChat': 'Chat: {model}', + 'settings.localModel.status.expectedEmbedding': 'Incorporamento: {model}', + 'settings.localModel.status.expectedVision': 'Visione: {model}', + 'settings.localModel.status.externalProcess': 'Processo esterno', + 'settings.localModel.status.forceRebootstrap': 'Forza re-bootstrap', + 'settings.localModel.status.generationTps': 'TPS di generazione', + 'settings.localModel.status.hideErrorDetails': 'Nascondi dettagli errore', + 'settings.localModel.status.installManually': 'Installa manualmente', + 'settings.localModel.status.installManuallyFrom': 'Installa manualmente da', + 'settings.localModel.status.installOllama': 'Avvio…', + 'settings.localModel.status.installedModels': 'Modelli installati', + 'settings.localModel.status.installing': 'Installazione...', + 'settings.localModel.status.installingOllama': 'Installazione runtime Ollama...', + 'settings.localModel.status.issues': 'Problemi', + 'settings.localModel.status.issuesFound': '{count} problema/i trovato/i', + 'settings.localModel.status.lastLatency': 'Ultima latenza', + 'settings.localModel.status.model': 'Modello', + 'settings.localModel.status.notAvailable': 'n/a', + 'settings.localModel.status.notFound': 'Non trovato', + 'settings.localModel.status.notRunning': 'Non in esecuzione', + 'settings.localModel.status.ollamaBinaryPath': 'Percorso binario Ollama', + 'localModel.ollamaServer.helperText': 'Esempio: http://192.168.1.5:11434', + 'localModel.ollamaServer.label': 'URL del server Ollama', + 'localModel.ollamaServer.modelCount': 'modelli', + 'localModel.ollamaServer.placeholder': 'http://localhost:11434', + 'localModel.ollamaServer.reachable': 'Raggiungibile', + 'localModel.ollamaServer.resetButton': 'Ripristina predefinito', + 'localModel.ollamaServer.saveButton': 'Salva', + 'localModel.ollamaServer.testButton': 'Testa connessione', + 'localModel.ollamaServer.unreachable': 'Non raggiungibile', + 'localModel.ollamaServer.validationError': 'Deve essere un URL http:// o https:// valido', + 'settings.localModel.status.ollamaDiagnostics': 'Diagnostica Ollama', + 'settings.localModel.status.ollamaNotInstalled': 'Runtime Ollama non disponibile', + 'settings.localModel.status.ollamaNotInstalledDesc': + "OpenHuman ora tratta Ollama come un runtime di inferenza esterno. Avvia il tuo server Ollama, scarica i modelli che vuoi e punta l'instradamento dei carichi di lavoro su di esso.", + 'settings.localModel.status.progress': 'Progresso', + 'settings.localModel.status.provider': 'Fornitore', + 'settings.localModel.status.retryBootstrap': 'Riprova bootstrap', + 'settings.localModel.status.runDiagnostics': 'Verifica in corso...', + 'settings.localModel.status.running': 'In esecuzione', + 'settings.localModel.status.runningExternalProcess': 'In esecuzione tramite processo esterno', + 'settings.localModel.status.runtimeStatus': 'Stato runtime', + 'settings.localModel.status.server': 'Server', + 'settings.localModel.status.setPath': 'Impostazione...', + 'settings.localModel.status.setting': 'Impostazione...', + 'settings.localModel.status.showErrorDetails': 'Mostra dettagli errore', + 'settings.localModel.status.showInstallErrorDetails': 'Mostra dettagli errore di installazione', + 'settings.localModel.status.suggestedFixes': 'Soluzioni suggerite', + 'settings.localModel.status.thenSetPath': 'Poi imposta il percorso', + 'settings.localModel.status.triggering': 'Attivazione...', + 'settings.localModel.status.unavailable': 'Non disponibile', + 'settings.localModel.status.working': 'Elaborazione...', + 'settings.developerMenu.ai.title': 'Configurazione IA', + 'settings.developerMenu.ai.desc': + 'Provider cloud, modelli Ollama locali e routing per carico di lavoro', + 'settings.developerMenu.screenAwareness.title': 'Consapevolezza schermo', + 'settings.developerMenu.screenAwareness.desc': + 'Permessi di cattura schermo, criteri di monitoraggio e controlli di sessione', + 'settings.developerMenu.messagingChannels.title': 'Canali di messaggistica', + 'settings.developerMenu.messagingChannels.desc': + 'Configura le modalità di autenticazione Telegram/Discord e il routing predefinito del canale', + 'settings.developerMenu.tools.title': 'Strumenti', + 'settings.developerMenu.tools.desc': + 'Abilita o disabilita le capacità che OpenHuman può usare per tuo conto', + 'settings.developerMenu.agentChat.title': 'Chat agente', + 'settings.developerMenu.agentChat.desc': + "Testa conversazioni dell'agente con override di modello e temperatura", + 'settings.developerMenu.devWorkflow.title': 'Flusso di lavoro di sviluppo', + 'settings.developerMenu.devWorkflow.desc': + 'Agente autonomo che seleziona i tuoi problemi GitHub e crea PR secondo un calendario', + 'settings.developerMenu.devWorkflow.panelDesc': + 'Configura un agente sviluppatore autonomo che seleziona i problemi GitHub assegnati a te e crea automaticamente richieste di pull su un programma prestabilito.', + 'settings.developerMenu.skillsRunner.title': 'Corritore di abilità', + 'settings.developerMenu.skillsRunner.desc': + "Esegui qualsiasi skill inclusa ad hoc — compila i suoi input e avvia un'esecuzione autonoma in background", + 'settings.developerMenu.skillsRunner.panelDesc': + "Seleziona una skill inclusa, compila i suoi input dichiarati e avvia un'esecuzione in background di tipo fire-and-forget. Usa invece Dev Workflow se desideri un lavoro ricorrente pianificato con cron.", + 'settings.skillsRunner.skill': 'Abilità', + 'settings.skillsRunner.selectSkill': 'Seleziona una competenza…', + 'settings.skillsRunner.loadingSkills': 'Caricamento delle competenze…', + 'settings.skillsRunner.loadingDescription': 'Caricamento input delle abilità…', + 'settings.skillsRunner.noInputs': 'Questa abilità non dichiara input.', + 'settings.skillsRunner.placeholder.required': 'richiesto', + 'settings.skillsRunner.runNow': 'Corri adesso', + 'settings.skillsRunner.starting': 'Avviamento…', + 'settings.skillsRunner.started': 'Avviato — id esecuzione:', + 'settings.skillsRunner.logPath': 'Registro:', + 'settings.skillsRunner.error.listSkills': 'Impossibile caricare le competenze:', + 'settings.skillsRunner.error.describe': 'Impossibile caricare gli input:', + 'settings.skillsRunner.error.missingRequired': 'Input richiesto mancante:', + 'settings.skillsRunner.error.run': "Esecuzione fallita all'avvio:", + 'settings.skillsRunner.error.preflightGate': 'Il gate di prevolo non è riuscito', + 'settings.skillsRunner.schedule.heading': 'Programma (ricorrente)', + 'settings.skillsRunner.schedule.help': + "Salva questa abilità + input come un lavoro cron ricorrente. L'agente chiamerà run_skill ad ogni ciclo.", + 'settings.skillsRunner.schedule.frequency': 'Frequenza', + 'settings.skillsRunner.schedule.every30min': 'Ogni 30 minuti', + 'settings.skillsRunner.schedule.everyHour': 'Ogni ora', + 'settings.skillsRunner.schedule.every2hours': 'Ogni 2 ore', + 'settings.skillsRunner.schedule.every6hours': 'Ogni 6 ore', + 'settings.skillsRunner.schedule.onceDaily': 'Una volta al giorno (9:00)', + 'settings.skillsRunner.schedule.save': 'Salva programma', + 'settings.skillsRunner.schedule.saving': 'Salvataggio…', + 'settings.skillsRunner.schedule.saved': 'Programma salvato.', + 'settings.skillsRunner.schedule.error': 'Salvataggio programma fallito:', + 'settings.skillsRunner.schedule.loadingJobs': 'Caricamento degli orari esistenti…', + 'settings.skillsRunner.schedule.noJobs': 'Nessun programma salvato per questa competenza ancora.', + 'settings.skillsRunner.schedule.existing': 'Attività programmate per questa competenza:', + 'settings.skillsRunner.schedule.runNow': 'Corri', + 'settings.skillsRunner.schedule.remove': 'Rimuovere', + 'settings.skillsRunner.scheduleEnabled': 'Abilitato', + 'settings.skillsRunner.scheduleDisabled': 'In pausa', + 'settings.skillsRunner.scheduleToggleAria': 'Attiva/disattiva il programma abilitato', + 'settings.skillsRunner.schedule.history': 'Storia', + 'settings.skillsRunner.schedule.historyLoading': 'Caricamento cronologia…', + 'settings.skillsRunner.schedule.historyEmpty': 'Ancora nessuna corsa per questo programma.', + 'settings.skillsRunner.schedule.historyNoOutput': 'Nessun output catturato.', + 'settings.skillsRunner.schedule.active': 'Attivo', + 'settings.skillsRunner.schedule.lastRunLabel': 'ultimo:', + 'settings.skillsRunner.recentRuns.headingForSkill': 'Esecuzioni recenti per questa abilità', + 'settings.skillsRunner.recentRuns.headingAll': 'Esecuzioni di abilità recenti (tutte)', + 'settings.skillsRunner.recentRuns.refresh': 'Aggiorna', + 'settings.skillsRunner.recentRuns.loading': 'Caricamento delle corse recenti…', + 'settings.skillsRunner.recentRuns.empty': 'Nessuna corsa recente.', + 'settings.skillsRunner.viewer.loading': 'Caricamento registro…', + 'settings.skillsRunner.viewer.tailing': 'Monitoraggio in tempo reale', + 'settings.skillsRunner.viewer.fetching': 'recupero', + 'settings.skillsRunner.viewer.error': 'Lettura del registro fallita:', + 'settings.skillsRunner.repoPicker.loading': 'Caricamento dei repository…', + 'settings.skillsRunner.repoPicker.select': 'Seleziona un repository…', + 'settings.skillsRunner.repoPicker.empty': + 'Nessun repository restituito. Collega GitHub tramite Composio per popolare questa lista.', + 'settings.skillsRunner.repoPicker.notConnected': + 'GitHub non è connesso tramite Composio. Connettilo prima sotto Competenze → Composio.', + 'settings.skillsRunner.repoPicker.privateTag': '(privato)', + 'settings.skillsRunner.branchPicker.needRepo': 'Scegli prima un repository…', + 'settings.skillsRunner.branchPicker.loading': 'Caricamento dei rami…', + 'settings.skillsRunner.branchPicker.select': 'Seleziona un ramo…', + 'settings.devWorkflow.githubRepository': 'Repository GitHub', + 'settings.devWorkflow.loadingRepositories': 'Caricamento dei repository...', + 'settings.devWorkflow.selectRepository': 'Seleziona un repository', + 'settings.devWorkflow.privateTag': '(privato)', + 'settings.devWorkflow.detectingForkInfo': 'Rilevamento informazioni sul fork...', + 'settings.devWorkflow.forkDetected': 'Forchetta rilevata', + 'settings.devWorkflow.upstream': 'A monte:', + 'settings.devWorkflow.forkPrNote': 'Le PR saranno sollevate contro il repository upstream.', + 'settings.devWorkflow.notForkNote': + 'Non un fork. Le PR verranno inviate direttamente a questo repository.', + 'settings.devWorkflow.targetBranch': 'Branch di destinazione', + 'settings.devWorkflow.targetBranchNote': 'Le PR saranno create contro questo branch', + 'settings.devWorkflow.loadingBranches': 'Caricamento dei rami...', + 'settings.devWorkflow.runFrequency': 'Frequenza di esecuzione', + 'settings.devWorkflow.runFrequencyNote': + "Quanto spesso l'agente dovrebbe controllare la presenza di problemi e aprire PR.", + 'settings.devWorkflow.updateConfiguration': 'Aggiorna configurazione', + 'settings.devWorkflow.saveConfiguration': 'Salva configurazione', + 'settings.devWorkflow.remove': 'Rimuovere', + 'settings.devWorkflow.saved': 'Salvato', + 'settings.devWorkflow.activeConfiguration': 'Configurazione Attiva', + 'settings.devWorkflow.activeConfigRepository': 'Repository:', + 'settings.devWorkflow.activeConfigUpstream': 'A monte:', + 'settings.devWorkflow.activeConfigTargetBranch': 'Ramo di destinazione:', + 'settings.devWorkflow.activeConfigSchedule': 'Programma:', + 'settings.devWorkflow.enabled': 'Abilitato', + 'settings.devWorkflow.paused': 'In pausa', + 'settings.devWorkflow.nextRun': 'Prossima corsa', + 'settings.devWorkflow.lastRun': 'Ultima esecuzione', + 'settings.devWorkflow.runNow': 'Corri adesso', + 'settings.devWorkflow.running': 'Correndo…', + 'settings.devWorkflow.recentRuns': 'Corse recenti', + 'settings.devWorkflow.cronSaveError': 'Salvataggio della configurazione non riuscito', + 'settings.devWorkflow.lastOutput': 'Ultima uscita', + 'settings.devWorkflow.noOutput': 'Nessun output catturato', + 'settings.devWorkflow.runningStatus': + "L'agente è in esecuzione — sta selezionando un problema e lavorando a una soluzione...", + 'settings.devWorkflow.errorNotConnected': + 'GitHub non è connesso. Per favore, collega GitHub tramite Impostazioni > Avanzate > Composio prima.', + 'settings.devWorkflow.errorToolNotEnabled': + "Lo strumento GITHUB_LIST_REPOSITORIES_FOR_THE_AUTHENTICATED_USER non è abilitato su questo backend. Si prega di chiedere al proprio amministratore di abilitarlo nell'integrazione Composio (backend#842).", + 'settings.devWorkflow.errorNotAuthenticated': "Non autenticato. Effettua prima l'accesso.", + 'settings.devWorkflow.errorNoRepositories': + 'Nessun repository trovato per questo account GitHub.', + 'settings.devWorkflow.schedule.every30min': 'Ogni 30 minuti', + 'settings.devWorkflow.schedule.everyHour': 'Ogni ora', + 'settings.devWorkflow.schedule.every2hours': 'Ogni 2 ore', + 'settings.devWorkflow.schedule.every6hours': 'Ogni 6 ore', + 'settings.devWorkflow.schedule.onceDaily': 'Una volta al giorno (ore 9)', + 'settings.developerMenu.cronJobs.title': 'Processi cron', + 'settings.developerMenu.cronJobs.desc': + 'Visualizza e configura processi pianificati per le skill di runtime', + 'settings.developerMenu.localModelDebug.title': 'Debug modello locale', + 'settings.developerMenu.localModelDebug.desc': + 'Configurazione Ollama, download asset, test del modello e diagnostica', + 'settings.developerMenu.webhooks.title': 'Webhook', + 'settings.developerMenu.webhooks.desc': + 'Ispeziona registrazioni webhook di runtime e log delle richieste catturate', + 'settings.developerMenu.eventLog.title': 'Registro eventi', + 'settings.developerMenu.eventLog.desc': + 'Flusso in diretta codificato a colori di tutti gli eventi di agenti, strumenti e sistemi', + 'settings.developerMenu.eventLog.allTypes': 'Tutti i tipi', + 'settings.developerMenu.eventLog.filterAgent': 'Filtro...', + 'settings.developerMenu.eventLog.download': 'Scarica', + 'settings.developerMenu.eventLog.events': 'eventi', + 'settings.developerMenu.eventLog.live': 'Vivere', + 'settings.developerMenu.eventLog.disconnected': 'Disconnesso', + 'settings.developerMenu.eventLog.waiting': 'In attesa degli eventi...', + 'settings.developerMenu.eventLog.notConnected': 'Non connesso al nucleo', + 'settings.developerMenu.eventLog.jumpToLatest': "Vai all'ultimo", + 'settings.developerMenu.eventLog.badge.tool': 'TOOL', + 'settings.developerMenu.eventLog.badge.agent': 'AGENT', + 'settings.developerMenu.eventLog.badge.info': 'INFO', + 'settings.developerMenu.eventLog.badge.mem': 'MEM', + 'settings.developerMenu.eventLog.badge.chan': 'CHAN', + 'settings.developerMenu.eventLog.badge.cron': 'CRON', + 'settings.developerMenu.eventLog.badge.hook': 'HOOK', + 'settings.developerMenu.eventLog.badge.warn': 'WARN', + 'settings.developerMenu.eventLog.badge.skill': 'SKILL', + 'settings.developerMenu.eventLog.badge.comp': 'COMP', + 'settings.developerMenu.eventLog.badge.mcp': 'MCP', + 'settings.developerMenu.intelligence.title': 'Intelligenza', + 'settings.developerMenu.intelligence.desc': + 'Area di lavoro memoria, motore subconscio, sogni e impostazioni', + 'settings.developerMenu.notificationRouting.title': 'Routing notifiche', + 'settings.developerMenu.notificationRouting.desc': + "Punteggio di importanza IA ed escalation dell'orchestratore per avvisi di integrazione", + 'settings.developerMenu.composeioTriggers.title': 'Trigger ComposeIO', + 'settings.developerMenu.composeioTriggers.desc': + 'Visualizza cronologia e archivio dei trigger ComposeIO', + 'settings.developerMenu.composioRouting.title': 'Routing Composio (modalità diretta)', + 'settings.developerMenu.composioRouting.desc': + 'Usa la tua chiave API Composio e instrada le chiamate direttamente a backend.composio.dev', + 'settings.developerMenu.integrationTriggers.title': 'Trigger di integrazione', + 'settings.developerMenu.integrationTriggers.desc': + 'Configura le impostazioni di triage IA per i trigger di integrazione Composio', + 'settings.developerMenu.mcpServer.title': 'Server MCP', + 'settings.developerMenu.mcpServer.desc': + 'Configura i client MCP esterni per connettersi a OpenHuman', + 'settings.developerMenu.autonomy.title': 'Autonomia agente', + 'settings.developerMenu.autonomy.desc': + 'Limiti di frequenza delle azioni degli strumenti e soglie di sicurezza', + 'settings.mcpServer.title': 'Server MCP', + 'settings.mcpServer.toolsSectionTitle': 'Strumenti disponibili', + 'settings.mcpServer.toolsSectionDesc': + "Strumenti esposti tramite il server MCP stdio durante l'esecuzione di openhuman-core mcp", + 'settings.mcpServer.configSectionTitle': 'Configurazione client', + 'settings.mcpServer.configSectionDesc': + 'Seleziona il tuo client MCP per generare lo snippet di configurazione corretto', + 'settings.mcpServer.copySnippet': 'Copia negli appunti', + 'settings.mcpServer.copied': 'Copiato!', + 'settings.mcpServer.openConfigFile': 'Apri file di configurazione', + 'settings.mcpServer.binaryPathNotFound': + 'OpenHuman binario non trovato. Se esegui dal sorgente, compila con: cargo build --bin openhuman-core', + 'settings.mcpServer.openConfigError': 'Impossibile aprire il file di configurazione', + 'settings.mcpServer.clientClaudeDesktop': 'Claude Desktop', + 'settings.mcpServer.clientCursor': 'Cursore', + 'settings.mcpServer.clientCodex': 'Codice', + 'settings.mcpServer.clientZed': 'Zed', + 'settings.mcpServer.configFilePath': 'File di configurazione', + 'settings.mcpServer.clientSelectorAriaLabel': 'MCP selettore client', + 'settings.appearance.menuDesc': 'Scegli chiaro, scuro o il tema del sistema', + 'settings.agentAccess.title': "Accesso dell'agente al sistema operativo", + 'settings.agentAccess.menuDesc': + "Controlla dove l'agente può read/write e se può usare la shell.", + 'settings.agentAccess.loadError': 'Impossibile caricare le impostazioni di accesso', + 'settings.agentAccess.saveError': 'Impossibile salvare le impostazioni di accesso', + 'settings.agentAccess.saved': 'Salvato — si applica al tuo prossimo messaggio.', + 'settings.agentAccess.desktopOnly': + "Le impostazioni di accesso sono disponibili solo nell'app desktop.", + 'settings.agentAccess.loading': 'Caricamento…', + 'settings.agentAccess.accessMode': 'Modalità di accesso', + 'settings.agentAccess.tier.readonly.title': 'Sola lettura', + 'settings.agentAccess.tier.readonly.desc': + 'Legge file ed esegue comandi in sola lettura per esplorare, ma non scrive mai, modifica né esegue nulla che cambi lo stato.', + 'settings.agentAccess.tier.supervised.title': 'Chiedi prima di modificare', + 'settings.agentAccess.tier.supervised.desc': + 'Crea nuovi file liberamente, ma chiede la tua approvazione prima di modificare un file esistente, eseguire un comando, accedere alla rete o installare qualsiasi cosa.', + 'settings.agentAccess.tier.full.title': 'Accesso completo', + 'settings.agentAccess.tier.full.desc': + "Esegue comandi con accesso completo al tuo account utente — può read/write ovunque consentito, eccetto nei depositi di credenziali e di sistema. I comandi distruttivi, l'accesso alla rete e le installazioni richiedono ancora l'approvazione.", + 'settings.agentAccess.defaultTag': '(predefinito)', + 'settings.agentAccess.fullWarning': + "⚠ L'accesso completo esegue comandi con l'accesso completo al tuo account e non è isolato. Attivalo solo quando ti fidi dell'agente con questa macchina. Le directory delle credenziali e di sistema rimangono bloccate, e le azioni distruttive, di rete e di installazione richiedono comunque l'approvazione.", + 'settings.agentAccess.confine.label': "Limita all'area di lavoro", + 'settings.agentAccess.confine.desc': + "Restringi l'agente alla directory di lavoro (più eventuali cartelle concesse), qualunque modalità di accesso sia selezionata. Quando è disattivato, può raggiungere ovunque l'utente possa — tranne le directory delle credenziali e di sistema sempre bloccate.", + 'settings.agentAccess.requireTaskPlanApproval.label': + "Richiedere l'approvazione del piano di lavoro", + 'settings.agentAccess.requireTaskPlanApproval.desc': + "Pausa prima che un agente assegnato esegua un brief del compito scritto dall'agente.", + 'settings.agentAccess.grantedFolders': 'Cartelle concesse', + 'settings.agentAccess.alwaysAllow': 'Strumenti sempre consentiti', + 'settings.agentAccess.alwaysAllowDesc': + 'Gli strumenti che hai contrassegnato come "Consenti sempre" in chat funzionano senza chiedere. Rimuovine uno per ricevere nuovamente la richiesta.', + 'settings.agentAccess.alwaysAllowNone': 'Ancora nessuno strumento sempre consentito.', + 'settings.agentAccess.grantedDesc': + "Cartelle che l'agente può leggere e scrivere, oltre all'area di lavoro. Archivi di credenziali (~/.ssh, ~/.gnupg, ~/.aws, portachiavi) e directory di sistema (/etc, /System, C:\\Windows,…) sono sempre bloccati, anche all'interno di una cartella concessa.", + 'settings.agentAccess.noneGranted': 'Nessuna cartella concessa.', + 'settings.agentAccess.readWrite': 'leggere + scrivere', + 'settings.agentAccess.readOnly': 'sola lettura', + 'settings.agentAccess.remove': 'Rimuovere', + 'settings.agentAccess.pathPlaceholder': 'Percorso assoluto della cartella', + 'settings.agentAccess.accessLevelLabel': 'Livello di accesso', + 'settings.agentAccess.add': 'Aggiungi', + 'settings.agentAccess.saving': 'Salvataggio…', + 'settings.agentAccess.changesApply': 'Le modifiche verranno applicate al tuo prossimo messaggio.', + 'settings.appearance.title': 'Aspetto', + 'settings.appearance.themeHeading': 'Tema', + 'settings.appearance.themeAria': 'Tema', + 'settings.appearance.modeLight': 'Luce', + 'settings.appearance.modeLightDesc': 'Superfici luminose, testo scuro.', + 'settings.appearance.modeDark': 'Scuro', + 'settings.appearance.modeDarkDesc': 'Superfici scure, più facili per gli occhi dopo il tramonto.', + 'settings.appearance.modeSystem': 'Sistema di corrispondenza', + 'settings.appearance.modeSystemDesc': + "Segui l'impostazione dell'aspetto del tuo sistema operativo.", + 'settings.appearance.helperText': + 'La modalità oscura trasforma l\'intera app (chat, impostazioni, pannelli) in una tavolozza scura. Il "sistema di corrispondenza" segue l\'aspetto del tuo sistema operativo e si aggiorna in tempo reale.', + 'settings.appearance.tabBarHeading': 'Barra delle schede inferiore', + 'settings.appearance.tabBarAlwaysShowLabels': 'Mostra sempre le etichette', + 'settings.appearance.tabBarAlwaysShowLabelsDesc': + 'Quando disattivata, le etichette vengono visualizzate solo al passaggio del mouse o per la scheda attiva.', + 'settings.mascot.active': 'Attivo', + 'settings.mascot.characterDesc': 'Descrizione personaggio', + 'settings.mascot.characterHeading': 'Intestazione personaggio', + 'settings.mascot.customGifError': + 'Immettere un HTTPS .gif URL, loopback HTTP .gif URL, file:// .gif URL o un percorso .gif locale.', + 'settings.mascot.customGifHeading': 'Avatar GIF personalizzato', + 'settings.mascot.customGifLabel': 'Avatar GIF personalizzato URL', + 'settings.mascot.customGifPlaceholder': 'https://example.com/avatar.gif', + 'settings.mascot.characterPreview': 'Anteprima', + 'settings.mascot.characterStates': 'stati', + 'settings.mascot.characterVisemes': 'visemi', + 'settings.mascot.colorAria': 'OpenHuman colore', + 'settings.mascot.colorDesc': 'Descrizione colore', + 'settings.mascot.colorHeading': 'Intestazione colore', + 'settings.mascot.colorBlack': 'Nero', + 'settings.mascot.colorBurgundy': 'Borgogna', + 'settings.mascot.colorCustom': 'Personalizzato', + 'settings.mascot.colorNavy': 'Blu marino', + 'settings.mascot.primaryColor': 'Colore primario', + 'settings.mascot.secondaryColor': 'Colore secondario', + 'settings.mascot.colorYellow': 'Giallo', + 'settings.mascot.libraryUnavailable': 'OpenHuman libreria non disponibile', + 'settings.mascot.title': 'OpenHuman', + 'settings.mascot.loadingLibrary': 'Caricamento libreria OpenHuman…', + 'settings.mascot.loadDetailError': 'Impossibile caricare la mascotte.', + 'settings.mascot.loadLibraryError': 'Impossibile caricare la libreria delle mascotte.', + 'settings.mascot.localDefault': 'OpenHuman locale (predefinito)', + 'settings.mascot.menuTitle': 'Mascotte', + 'settings.mascot.menuDesc': "Scegli il colore della mascotte usato in tutta l'app", + 'settings.mascot.noCharacters': 'Nessun personaggio OpenHuman disponibile', + 'settings.mascot.noColorVariants': 'Nessuna variante di colore', + 'settings.mascot.voice.current': 'attuale', + 'settings.mascot.voice.customDesc': + "Trova gli ID vocali su api.elevenlabs.io/v1/voices o nel tuo dashboard ElevenLabs. Viene salvato solo l'ID — la tua chiave API rimane sul backend.", + 'settings.mascot.voice.customHeading': 'ID vocale personalizzato', + 'settings.mascot.voice.customOption': 'Altro (incolla ID vocale)…', + 'settings.mascot.voice.customPlaceholder': 'ad es. 21m00Tcm4TlvDq8ikWAM', + 'settings.mascot.voice.desc': + "Scegli la voce ElevenLabs che la mascotte usa per le risposte parlate. Filtra per genere, scegli dall'elenco curato, incolla un ID personalizzato, oppure lascia che l'app scelga una voce che corrisponda alla lingua dell'interfaccia.", + 'settings.mascot.voice.genderFemale': 'Femminile', + 'settings.mascot.voice.genderHeading': 'Genere della voce', + 'settings.mascot.voice.genderMale': 'Maschile', + 'settings.mascot.voice.heading': 'Voce', + 'settings.mascot.voice.preset': 'Preimpostazione voce', + 'settings.mascot.voice.presetHeading': 'Preimpostazione voce', + 'settings.mascot.voice.preview': 'Anteprima voce', + 'settings.mascot.voice.previewError': 'Anteprima voce non riuscita', + 'settings.mascot.voice.previewText': + "Ciao, sono il tuo assistente. Questa è un'anteprima vocale.", + 'settings.mascot.voice.previewing': 'Anteprima in corso…', + 'settings.mascot.voice.reset': 'Ripristina ai valori predefiniti', + 'settings.mascot.voice.useLocaleDefault': "Abbina la lingua dell'app", + 'settings.mascot.voice.useLocaleDefaultDesc': + "Scegli automaticamente una voce per la lingua dell'interfaccia corrente.", + 'settings.persona.title': 'Persona', + 'settings.persona.menuTitle': 'Persona', + 'settings.persona.menuDesc': + "Nome, personalità, avatar e voce — il tuo assistente come un'unica identità", + 'settings.persona.identityHeading': 'Identità', + 'settings.persona.identityDesc': + "Un nome visualizzato e una breve descrizione per il tuo assistente. Visualizzati nell'app; non cambiano il modo in cui l'assistente ragiona.", + 'settings.persona.displayNameLabel': 'Nome visualizzato', + 'settings.persona.displayNamePlaceholder': 'ad es. Nova', + 'settings.persona.descriptionLabel': 'Descrizione', + 'settings.persona.descriptionPlaceholder': + 'ad esempio. Un assistente calmo e conciso per il mio team.', + 'settings.persona.soul.heading': 'Personalità (ANIMA.md)', + 'settings.persona.soul.desc': + "La personalità che l'assistente segue in ogni conversazione. Le modifiche vengono salvate nel tuo workspace e avranno effetto alla risposta successiva.", + 'settings.persona.soul.editorLabel': 'Contenuti di SOUL.md', + 'settings.persona.soul.reset': 'Ripristina impostazioni predefinite', + 'settings.persona.soul.usingDefault': 'Usando il predefinito incluso', + 'settings.persona.soul.loadError': 'Impossibile caricare SOUL.md', + 'settings.persona.soul.saveError': 'Impossibile salvare SOUL.md', + 'settings.persona.soul.resetError': 'Impossibile reimpostare SOUL.md', + 'settings.persona.appearanceHeading': 'Avatar e Voce', + 'settings.persona.appearanceDesc': + "Il colore della mascotte, l'avatar personalizzato GIF e la voce di risposta sono configurati nelle impostazioni della mascotte.", + 'settings.persona.openMascotSettings': 'Apri le impostazioni del Mascotte', + 'settings.memoryWindow.balanced.badge': 'Consigliato', + 'settings.memoryWindow.balanced.hint': + 'Predefinito sensato — buona continuità senza bruciare token extra a ogni esecuzione.', + 'settings.memoryWindow.balanced.label': 'Bilanciato', + 'settings.memoryWindow.description': + "Quanto contesto ricordato OpenHuman inietta in ogni nuova esecuzione dell'agente. Finestre più grandi fanno sentire l'agente più consapevole delle conversazioni passate ma usano più token — e costano di più — a ogni esecuzione.", + 'settings.memoryWindow.extended.badge': 'Più contesto', + 'settings.memoryWindow.extended.hint': + 'Più memoria a lungo termine iniettata in ogni esecuzione. Costo token più alto per turno.', + 'settings.memoryWindow.extended.label': 'Esteso', + 'settings.memoryWindow.maximum.badge': 'Costo più alto', + 'settings.memoryWindow.maximum.hint': + 'La più grande finestra sicura. Migliore continuità, bolletta token significativamente più alta a ogni esecuzione.', + 'settings.memoryWindow.maximum.label': 'Massimo', + 'settings.memoryWindow.minimal.badge': 'Più economico', + 'settings.memoryWindow.minimal.hint': + 'Finestra di memoria minima. Più economico, più veloce, minore continuità tra esecuzioni.', + 'settings.memoryWindow.minimal.label': 'Minimo', + 'settings.memoryWindow.title': 'Finestra di memoria a lungo termine', + 'settings.modelHealth.title': 'Salute del modello', + 'settings.modelHealth.desc': + 'Qualità per modello, tasso di allucinazione e confronto dei costi tra modelli attivi', + 'settings.modelHealth.allStatuses': 'Tutti gli stati', + 'settings.modelHealth.models': 'modelli', + 'settings.modelHealth.loading': 'Caricamento dei dati del modello...', + 'settings.modelHealth.empty': 'Nessun modello registrato', + 'settings.modelHealth.col.model': 'Modello', + 'settings.modelHealth.col.quality': 'Qualità', + 'settings.modelHealth.col.halluc': 'Tasso di allucinazioni', + 'settings.modelHealth.col.cost': 'Costo / 1M fuori', + 'settings.modelHealth.col.agents': 'Agenti', + 'settings.modelHealth.col.status': 'Stato', + 'settings.modelHealth.badge.keep': 'Tenere', + 'settings.modelHealth.badge.replace': 'Sostituire', + 'settings.modelHealth.badge.staging': 'Test di staging', + 'settings.modelHealth.badge.vision': 'Solo visione', + 'settings.modelHealth.swap': 'Scambiare?', + 'settings.modelHealth.modal.title': 'Sostituire il modello?', + 'settings.modelHealth.modal.hallucRate': 'Tasso di allucinazione', + 'settings.modelHealth.modal.cancel': 'Annulla', + 'settings.modelHealth.modal.apply': 'Applica sostituzione', + 'settings.modelHealth.tag.cheaper': 'CHEAPER', + 'settings.modelHealth.tag.better': 'BETTER', + 'settings.screenIntel.permissions.accessibility': 'Accessibilità', + 'settings.screenIntel.permissions.grantHint': 'Suggerimento concessione', + 'settings.screenIntel.permissions.inputMonitoring': 'Monitoraggio input', + 'settings.screenIntel.permissions.macosAppliesPrivacy': 'macOS applica privacy', + 'settings.screenIntel.permissions.openInputMonitoring': 'Richiesta…', + 'settings.screenIntel.permissions.refreshStatus': 'Aggiornamento…', + 'settings.screenIntel.permissions.refreshing': 'Aggiornamento…', + 'settings.screenIntel.permissions.requestAccessibility': 'Richiesta…', + 'settings.screenIntel.permissions.requestScreenRecording': 'Richiesta…', + 'settings.screenIntel.permissions.requesting': 'Richiesta…', + 'settings.screenIntel.permissions.restartRefresh': 'Riavvio core…', + 'settings.screenIntel.permissions.restartingCore': 'Riavvio core…', + 'settings.screenIntel.permissions.screenRecording': 'Registrazione schermo', + 'settings.screenIntel.permissions.title': 'Permessi', + 'skills.card.moreActions': 'Altre azioni', + 'skills.channelIcon.discord': 'Discord', + 'skills.channelIcon.imessage': 'iMessage', + 'skills.channelIcon.telegram': 'Telegram', + 'skills.channelIcon.web': 'Web', + 'skills.channelIcon.yuanbao': 'Yuanbao', + 'skills.composio.poweredBy': 'Offerto da Composio', + 'skills.composio.staleStatusTitle': 'Le connessioni mostrano uno stato obsoleto', + 'skills.create.allowedTools': 'Strumenti consentiti', + 'skills.create.allowedToolsHelp': 'Resi nel frontmatter SKILL.md come', + 'skills.create.allowedToolsPlaceholder': 'node_exec, fetch', + 'skills.create.author': 'Autore', + 'skills.create.authorPlaceholder': 'Il tuo nome', + 'skills.create.commaSeparated': '(separati da virgole)', + 'skills.create.createBtn': 'Crea skill', + 'skills.create.createError': 'Impossibile creare la skill', + 'skills.create.creating': 'Creazione…', + 'skills.create.description': 'Descrizione', + 'skills.create.descriptionPlaceholder': 'Cosa fa questa skill?', + 'skills.create.optional': '(facoltativo)', + 'skills.create.inputs.heading': 'Inputs', + 'skills.create.inputs.help': + "Dichiara i parametri necessari alla skill. Lo Skills Runner visualizzerà un modulo per questi al momento dell'esecuzione.", + 'skills.create.inputs.add': 'Aggiungi input', + 'skills.create.inputs.row.name': "Nome dell'input", + 'skills.create.inputs.row.namePlaceholder': 'es. repo', + 'skills.create.inputs.row.nameError': + 'Solo lettere, cifre, underscore e trattini; deve iniziare con una lettera.', + 'skills.create.inputs.row.description': "Descrizione dell'input", + 'skills.create.inputs.row.descriptionPlaceholder': 'Cosa va in questo campo?', + 'skills.create.inputs.row.type': 'Type', + 'skills.create.inputs.row.required': 'Required', + 'skills.create.inputs.row.remove': 'Rimuovi input', + 'skills.create.inputs.type.string': 'Text', + 'skills.create.inputs.type.integer': 'Number', + 'skills.create.inputs.type.boolean': 'Sì / No', + 'skills.create.license': 'Licenza', + 'skills.create.licensePlaceholder': 'MIT', + 'skills.create.name': 'Nome', + 'skills.create.namePlaceholder': 'es. Trade Journal', + 'skills.create.scope': 'Ambito', + 'skills.create.scopeProjectHint': '/.openhuman/skills/', + 'skills.create.scopeUserHint': + 'Scritto in ~/.openhuman/skills//SKILL.md — disponibile in tutti i workspace.', + 'skills.create.slugLabel': 'Etichetta slug', + 'skills.create.subtitle': 'SKILL.md', + 'skills.create.tags': 'Tag', + 'skills.create.tagsPlaceholder': 'trading, ricerca', + 'skills.create.title': 'Nuova skill', + 'skills.detail.allowedTools': 'Strumenti consentiti', + 'skills.detail.author': 'Autore', + 'skills.detail.bundledResources': 'Risorse incluse', + 'skills.detail.closeAriaLabel': 'Chiudi dettagli skill', + 'skills.detail.location': 'Posizione', + 'skills.detail.noBundledResources': 'Nessuna risorsa inclusa.', + 'skills.detail.tags': 'Tag', + 'skills.detail.warnings': 'Avvertenze', + 'skills.install.errors.alreadyInstalledHint': + "Una skill con questo slug esiste già nell'area di lavoro. Rimuovilo prima o modifica il frontmatter `metadata.id` / `name`.", + 'skills.install.errors.alreadyInstalledTitle': 'Competenza già installata', + 'skills.install.errors.fetchFailedHint': + "La richiesta non è stata completata correttamente. Controlla che URL punti a un file pubblico raggiungibile e che l'host abbia restituito una risposta 2xx.", + 'skills.install.errors.fetchFailedTitle': 'Recupero non riuscito', + 'skills.install.errors.fetchTimedOutHint': + "L'host remoto non ha risposto in tempo. Riprovare o aumentare il timeout (1-600 s).", + 'skills.install.errors.fetchTimedOutTitle': 'Recupero scaduto', + 'skills.install.errors.fetchTooLargeHint': + 'SKILL.md deve essere inferiore a 1 MiB. Dividi le risorse raggruppate in file "riferimenti/" o "script/" invece di incorporarle.', + 'skills.install.errors.fetchTooLargeTitle': 'SKILL.md troppo grande', + 'skills.install.errors.genericHint': + 'Il backend ha restituito un errore. Il messaggio grezzo è mostrato di seguito.', + 'skills.install.errors.genericTitle': 'Impossibile installare la competenza', + 'skills.install.errors.invalidSkillHint': + 'Il frontmatter deve essere YAML valido con campi `nome` e `descrizione` non vuoti, terminati da `---`.', + 'skills.install.errors.invalidSkillTitle': 'SKILL.md non ha analizzato', + 'skills.install.errors.invalidUrlHint': + 'Sono consentiti solo HTTPS URL pubblici. Gli host privati, di loopback e di metadati sono bloccati.', + 'skills.install.errors.invalidUrlTitle': 'URL rifiutato', + 'skills.install.errors.unsupportedUrlHint': + "Funzionano solo i collegamenti diretti `.md`. Per GitHub, collegamento a un file (github.com/owner/repo/blob/.../SKILL.md): l'albero e le radici del repository non sono installati.", + 'skills.install.errors.unsupportedUrlTitle': 'URL modulo non supportato', + 'skills.install.errors.writeFailedHint': + "La directory delle competenze dell'area di lavoro non era scrivibile. Controlla i permessi del filesystem per `/.openhuman/skills/`.", + 'skills.install.errors.writeFailedTitle': 'Impossibile scrivere SKILL.md', + 'skills.install.fetchLog': 'Log di fetch', + 'skills.install.fetchingPrefix': 'Recupero di', + 'skills.install.fetchingSuffix': 'ciò può richiedere fino al timeout configurato.', + 'skills.install.installBtn': 'Installazione…', + 'skills.install.installComplete': 'Installazione completata', + 'skills.install.installing': 'Installazione…', + 'skills.install.parseWarnings': 'Avvertenze di parsing', + 'skills.install.rawError': 'Errore grezzo', + 'skills.install.subtitleMiddle': 'su HTTPS e lo installa in', + 'skills.install.subtitlePrefix': 'Recupera un singolo', + 'skills.install.subtitleSuffix': 'solo HTTPS; gli host privati ​​e di loopback sono bloccati.', + 'skills.install.successDiscovered': 'Scoperto {count} nuove abilità.', + 'skills.install.successNoNewIds': + "Abilità installata, ma non sono apparsi nuovi ID abilità: il catalogo potrebbe già contenere un'abilità con lo stesso slug.", + 'skills.install.timeoutHint': '(secondi, opzionale)', + 'skills.install.timeoutHelp': + 'Il valore predefinito è 60 secondi. I valori esterni a 1-600 sono bloccati sul lato server.', + 'skills.install.timeoutInvalid': 'Deve essere un numero intero compreso tra 1 e 600.', + 'skills.install.timeoutLabel': 'Etichetta timeout', + 'skills.install.timeoutPlaceholder': '60', + 'skills.install.title': 'Installa skill da URL', + 'skills.install.urlHelpMiddle': 'file.', + 'skills.install.urlHelpPrefix': 'Collegamento diretto a un', + 'skills.install.urlHelpSuffix': 'URLs riscrittura automatica in', + 'skills.install.urlInvalidPrefix': 'URL deve essere un collegamento', + 'skills.install.urlInvalidSuffix': 'ben formato.', + 'skills.install.urlLabel': 'URL skill', + 'skills.install.urlPlaceholder': 'https://raw.githubusercontent.com/owner/repo/main/SKILL.md', + 'skills.meetingBots.bannerDesc': 'Descrizione banner', + 'skills.meetingBots.bannerTitle': 'Titolo banner', + 'skills.meetingBots.busyTitle': 'OpenHuman è occupato', + 'skills.meetingBots.comingSoon': 'In arrivo', + 'skills.meetingBots.couldNotStartTitle': 'Impossibile avviare OpenHuman', + 'skills.meetingBots.displayName': 'Nome visualizzato', + 'skills.meetingBots.failedToStart': 'Avvio di OpenHuman fallito.', + 'skills.meetingBots.joiningMessage': 'Apparirà come partecipante tra qualche secondo.', + 'skills.meetingBots.joiningTitle': 'OpenHuman si sta unendo alla riunione', + 'skills.meetingBots.meetingLink': 'Link della riunione', + 'skills.meetingBots.modalAriaLabel': 'Invia OpenHuman a una riunione', + 'skills.meetingBots.modalDesc': 'Descrizione modale', + 'skills.meetingBots.modalTitle': 'Invia OpenHuman a una riunione', + 'skills.meetingBots.newBadge': 'Nuovo', + 'skills.meetingBots.platformComingSoon': 'Il supporto {label} sarà presto disponibile.', + 'skills.meetingBots.platformHints.gmeet': 'meet.google.com/abc-defg-hij', + 'skills.meetingBots.platformHints.teams': 'teams.microsoft.com/...', + 'skills.meetingBots.platformHints.zoom': 'zoom.us/j/...', + 'skills.meetingBots.platforms.gmeet': 'Google Incontra', + 'skills.meetingBots.platforms.teams': 'Microsoft Teams', + 'skills.meetingBots.platforms.zoom': 'Zoom', + 'skills.meetingBots.sendTo': 'Invia a', + 'skills.meetingBots.soonSuffix': 'presto', + 'skills.meetingBots.starting': 'Avvio…', + 'skills.resource.preview.closeAriaLabel': 'Chiudi anteprima', + 'skills.resource.preview.failed': 'Anteprima fallita', + 'skills.resource.preview.loading': 'Caricamento anteprima…', + 'skills.resource.tree.empty': 'Nessuna risorsa inclusa.', + 'skills.search.placeholder': 'Segnaposto', + 'skills.setup.autocomplete.acceptKey': 'Tasto di accettazione', + 'skills.setup.autocomplete.activeDesc': 'Descrizione attivo', + 'skills.setup.autocomplete.activeTitle': 'Autocompletamento attivo', + 'skills.setup.autocomplete.customizeSettings': 'Personalizza impostazioni', + 'skills.setup.autocomplete.debounce': 'Antirimbalzo', + 'skills.setup.autocomplete.description': 'Descrizione', + 'skills.setup.autocomplete.enableBtn': 'Abilitazione...', + 'skills.setup.autocomplete.enableError': 'Abilitazione autocompletamento fallita', + 'skills.setup.autocomplete.enabling': 'Abilitazione...', + 'skills.setup.autocomplete.notSupported': 'Non supportato', + 'skills.setup.autocomplete.stepEnable': 'Abilita completamenti inline', + 'skills.setup.autocomplete.stepSuccess': 'Pronto', + 'skills.setup.autocomplete.stylePreset': 'Preset di stile', + 'skills.setup.autocomplete.stylePresetValue': 'Bilanciato (configurabile in seguito)', + 'skills.setup.autocomplete.title': 'Autocompletamento testo', + 'skills.setup.screenIntel.activeDesc': 'Descrizione attivo', + 'skills.setup.screenIntel.activeTitle': 'Screen Intelligence abilitato', + 'skills.setup.screenIntel.advancedSettings': 'Impostazioni avanzate', + 'skills.setup.screenIntel.allGranted': 'Tutti i permessi concessi', + 'skills.setup.screenIntel.captureMode': 'Modalità di cattura', + 'skills.setup.screenIntel.captureModeValue': 'Tutte le finestre (configurabile in seguito)', + 'skills.setup.screenIntel.deniedHint': + 'Dopo aver concesso i permessi in Impostazioni di sistema, clicca sotto per riavviare e raccogliere le modifiche.', + 'skills.setup.screenIntel.enableBtn': 'Abilitazione...', + 'skills.setup.screenIntel.enableDesc': + 's sul tuo schermo e fornisce contesto utile al tuo agente', + 'skills.setup.screenIntel.enableError': 'Abilitazione Screen Intelligence fallita', + 'skills.setup.screenIntel.enabling': 'Abilitazione...', + 'skills.setup.screenIntel.grant': 'Apertura...', + 'skills.setup.screenIntel.granted': 'Concesso', + 'skills.setup.screenIntel.macosOnly': 'Solo macOS', + 'skills.setup.screenIntel.opening': 'Apertura...', + 'skills.setup.screenIntel.panicHotkey': 'Hotkey panico', + 'skills.setup.screenIntel.permAccessibility': 'Accessibilità', + 'skills.setup.screenIntel.permInputMonitoring': 'Monitoraggio input', + 'skills.setup.screenIntel.permScreenRecording': 'Registrazione schermo', + 'skills.setup.screenIntel.permissionsDesc': 'Descrizione permessi', + 'skills.setup.screenIntel.permissionPathLabel': 'macOS applica la privacy a:', + 'skills.setup.screenIntel.refreshStatus': 'Aggiorna stato', + 'skills.setup.screenIntel.restartRefresh': 'Riavvio...', + 'skills.setup.screenIntel.restarting': 'Riavvio...', + 'skills.setup.screenIntel.stepEnable': 'Abilita la skill', + 'skills.setup.screenIntel.stepPermissions': 'Concedi permessi', + 'skills.setup.screenIntel.stepSuccess': 'Pronto', + 'skills.setup.screenIntel.title': 'Intelligenza dello schermo', + 'skills.setup.screenIntel.visionModel': 'Modello vision', + 'skills.setup.voice.activation': 'Attivazione', + 'skills.setup.voice.activeDescPrefix': 'Fn', + 'skills.setup.voice.activeDescSuffix': 'Fn', + 'skills.setup.voice.activeTitle': 'Voice Intelligence attivo', + 'skills.setup.voice.customizeSettings': 'Personalizza impostazioni', + 'skills.setup.voice.downloadSttBtn': 'Scarica STT', + 'skills.setup.voice.enableDesc': 'Descrizione abilitazione', + 'skills.setup.voice.hotkey': 'Tasto di scelta rapida', + 'skills.setup.voice.startBtn': 'Avvio...', + 'skills.setup.voice.startError': 'Avvio del server vocale fallito', + 'skills.setup.voice.starting': 'Avvio...', + 'skills.setup.voice.stepEnable': 'Avvia il server vocale', + 'skills.setup.voice.stepSetup': 'Download modello richiesto', + 'skills.setup.voice.stepSuccess': 'Pronto', + 'skills.setup.voice.sttNotReady': 'Modello speech-to-text non pronto', + 'skills.setup.voice.sttNotReadyDesc': + 'Voice Intelligence richiede un modello Whisper locale per la trascrizione. Scaricalo dalle impostazioni Modello locale.', + 'skills.setup.voice.sttReady': 'Modello speech-to-text pronto', + 'skills.setup.voice.sttReturnHint': 'Suggerimento ritorno STT', + 'skills.setup.voice.title': 'Intelligenza vocale', + 'skills.uninstall.couldNotUninstall': 'Impossibile disinstallare', + 'skills.uninstall.description': + "Questa operazione elimina permanentemente la directory della skill e tutte le sue risorse incluse. L'agente smetterà di vederla al turno successivo.", + 'skills.uninstall.title': 'Disinstalla', + 'skills.uninstall.uninstallBtn': 'Disinstalla', + 'skills.uninstall.uninstalling': 'Disinstallazione…', + 'upsell.global.limitMessage': 'Aggiorna il tuo piano o ricarica i crediti per continuare', + 'upsell.global.limitTitle': 'Tu', + 'upsell.global.nearLimitMessage': + 'Hai usato il {pct}% del tuo limite di utilizzo. Aggiorna per limiti più alti.', + 'upsell.global.nearLimitTitle': 'Limite di utilizzo in avvicinamento', + 'upsell.usageLimit.bodyBudget': + 'Hai raggiunto il limite settimanale.{reset} Aggiorna il piano o ricarica crediti per evitare i limiti.', + 'upsell.usageLimit.bodyRate': + 'Hai raggiunto il limite di velocità di inferenza di 10 ore.{reset} Aggiorna per limiti più alti.', + 'upsell.usageLimit.heading': 'Limite di utilizzo raggiunto', + 'upsell.usageLimit.notNow': 'Non ora', + 'upsell.usageLimit.perWindow': '{amount}', + 'upsell.usageLimit.planIncludes': '{plan}', + 'upsell.usageLimit.resetsIn': 'Si resetta {time}.', + 'upsell.usageLimit.upgradePlan': 'Aggiorna piano', + 'upsell.usageLimit.weeklyInference': '{amount}', + 'walkthrough.tooltip.letsGo': 'Andiamo!', + 'walkthrough.tooltip.next': 'Avanti →', + 'walkthrough.tooltip.skip': 'Salta tour', + 'walkthrough.tooltip.stepCounter': '{n} di {total}', + 'webhooks.activity.empty': 'Vuoto', + 'webhooks.activity.title': 'Attività recente', + 'webhooks.composioHistory.empty': 'Vuoto', + 'webhooks.composioHistory.metadataId': 'ID metadati', + 'webhooks.composioHistory.metadataUuid': 'UUID metadati', + 'webhooks.composioHistory.payload': 'Payload', + 'webhooks.composioHistory.title': 'Cronologia trigger Composio', + 'webhooks.tunnels.active': 'Attivo', + 'webhooks.tunnels.createFailed': 'Creazione tunnel fallita', + 'webhooks.tunnels.creating': 'Creazione...', + 'webhooks.tunnels.deleteFailed': 'Eliminazione tunnel fallita', + 'webhooks.tunnels.descriptionPlaceholder': 'Descrizione (opzionale)', + 'webhooks.tunnels.echo': 'Echo', + 'webhooks.tunnels.empty': 'Vuoto', + 'webhooks.tunnels.enableEcho': 'Abilita echo', + 'webhooks.tunnels.inactive': 'Inattivo', + 'webhooks.tunnels.namePlaceholder': 'Nome tunnel (es. telegram-bot)', + 'webhooks.tunnels.newTunnel': 'Nuovo tunnel', + 'webhooks.tunnels.removeEcho': 'Rimuovi echo', + 'webhooks.tunnels.title': 'Tunnel webhook', + 'webhooks.tunnels.toggleFailed': 'Attivazione echo fallita', + 'composio.directModeRequiresKey': + 'Salvataggio fallito. La modalità Diretta richiede una chiave API non vuota.', + 'composio.integrationSlugsHelp': 'Slug di integrazione separati da virgole, ad es.', + 'composio.integrationSlugsExample': 'Gmail, slack', + 'composio.integrationSlugsCaseInsensitive': 'Senza distinzione tra maiuscole e minuscole.', + 'composio.integrationSlugsPlaceholder': 'gmail, slack, ...', + 'composio.notYetRouted': 'non ancora instradato', + 'composio.triggers.loading': 'Caricamento…', + 'conversations.taskKanban.todo': 'Da fare', + 'chat.addReaction': 'Aggiungi reazione', + 'chat.agentProfile.create': 'Crea profilo agente', + 'chat.agentProfile.createFailed': 'Impossibile creare il profilo agente.', + 'chat.agentProfile.customDescription': 'Profilo agente personalizzato', + 'chat.agentProfile.defaultAgentLabel': 'Orchestrator', + 'chat.agentProfile.exists': 'Il profilo agente "{name}" esiste già.', + 'chat.agentProfile.label': 'Profilo agente', + 'chat.agentProfile.namePlaceholder': 'Nome profilo', + 'chat.agentProfile.promptStylePlaceholder': 'Stile prompt', + 'chat.agentProfile.allowedToolsPlaceholder': 'Strumenti consentiti', + 'chat.backToThread': 'torna a {title}', + 'chat.parentThread': 'thread principale', + 'chat.removeReaction': 'Rimuovi {emoji}', + 'settings.composio.loading': 'Caricamento…', + 'settings.mascot.noCharactersAvailable': 'Nessun personaggio OpenHuman disponibile', + 'skills.uninstall.confirmTitle': 'Disinstallare {name}?', + 'conversations.taskKanban.blocked': 'Bloccato', + 'conversations.taskKanban.done': 'Fatto', + 'conversations.taskKanban.pending': 'In sospeso', + 'conversations.taskKanban.working': 'Lavorando', + 'conversations.taskKanban.awaitingApproval': 'In attesa di approvazione', + 'conversations.taskKanban.ready': 'Pronto', + 'conversations.taskKanban.rejected': 'Rifiutato', + 'conversations.taskKanban.inProgress': 'In corso', + 'intelligence.memoryChunk.detail.copiedHint': 'copiato', + 'settings.composio.notYetRouted': 'non ancora instradato', + 'settings.localModel.download.manageExternal': 'Gestisci questo modello nel tuo runtime esterno.', + 'settings.localModel.status.manageOllamaExternal': + 'Gestisci il processo Ollama e i pull dei modelli al di fuori di OpenHuman, poi riesegui la diagnostica.', + 'settings.localModel.status.ollamaDocs': 'Documentazione Ollama', + 'settings.localModel.status.thenRetry': + 'per le istruzioni di configurazione, poi riprova quando il runtime è raggiungibile.', + 'devOptions.menuAi': 'Configurazione AI', + 'devOptions.menuAiDesc': 'Provider cloud, modelli Ollama locali e routing per carico di lavoro', + 'devOptions.menuScreenAware': 'Riconoscimento schermo', + 'devOptions.menuScreenAwareDesc': + "Autorizzazioni per l'acquisizione dello schermo, policy di monitoraggio e controlli della sessione", + 'devOptions.menuMessaging': 'Canali di messaggistica', + 'devOptions.menuMessagingDesc': + 'Configura le modalità di autenticazione Telegram/Discord e il routing del canale predefinito', + 'devOptions.menuTools': 'Strumenti', + 'devOptions.menuToolsDesc': + 'Abilita o disabilita le funzionalità che OpenHuman può utilizzare per tuo conto', + 'devOptions.menuAgentChat': "Chat dell'agente", + 'devOptions.menuAgentChatDesc': + "Conversazione dell'agente di test con override di modello e temperatura", + 'devOptions.menuCronJobs': 'Processi cron', + 'devOptions.menuCronJobsDesc': + 'Visualizza e configura processi pianificati per le competenze di runtime', + 'devOptions.menuLocalModelDebug': 'Debug modello locale', + 'devOptions.menuLocalModelDebugDesc': + 'Ollama configurazione, download di risorse, test del modello e diagnostica', + 'devOptions.menuWebhooksDebug': 'Webhook', + 'devOptions.menuWebhooksDebugDesc': + 'Esamina le registrazioni dei webhook di runtime e i registri delle richieste acquisite', + 'devOptions.menuIntelligence': 'Intelligenza', + 'devOptions.menuIntelligenceDesc': + 'Spazio di lavoro della memoria, motore subconscio, sogni e impostazioni', + 'devOptions.menuNotificationRouting': 'Routing delle notifiche', + 'devOptions.menuNotificationRoutingDesc': + "Punteggio di importanza AI ed escalation dell'agente di orchestrazione per gli avvisi di integrazione", + 'devOptions.menuComposeIOTriggers': 'Trigger ComposeIO', + 'devOptions.menuComposeIOTriggersDesc': + "Visualizza la cronologia e l'archivio dei trigger ComposeIO", + 'devOptions.menuComposioRouting': 'Composio Routing (modalità diretta)', + 'devOptions.menuComposioRoutingDesc': + 'Porta la tua chiave Composio API e instrada le chiamate direttamente a backend.composio.dev', + 'devOptions.menuComposioTriggers': 'Trigger di integrazione', + 'devOptions.menuComposioTriggersDesc': + 'Configura le impostazioni di triage AI per i trigger di integrazione Composio', + 'memory.sourceFilterAria': 'Filtra per origine', + 'calls.comingSoonDescription': + "Le chiamate assistite dall'IA sono in arrivo. Resta sintonizzato.", + 'vault.title': 'Depositi di conoscenza', + 'vault.description': + 'Punta a una cartella locale; i file vengono suddivisi in blocchi e copiati nella memoria.', + 'vault.add': 'Aggiungi deposito', + 'vault.added': 'Deposito aggiunto', + 'vault.createdMessage': 'Creato "{name}". Fai clic su {sync} per importare.', + 'vault.couldNotAdd': 'Impossibile aggiungere il deposito', + 'vault.syncFailed': 'Sincronizzazione non riuscita', + 'vault.syncFailedFor': 'Sincronizzazione non riuscita per "{name}"', + 'vault.syncFailedFiles': 'Impossibile {count} file', + 'vault.syncedTitle': 'Sincronizzato "{name}"', + 'vault.syncSummary': 'Importato {ingested}, invariato {unchanged}, rimosso {removed}', + 'vault.syncSummaryFailed': ', non riuscito {count}', + 'vault.syncSummarySkipped': ', saltato {count}', + 'vault.syncSummaryDuration': '· {seconds}s', + 'vault.confirmRemovePurge': + 'Rimuovere il vault "{name}"?\n\nFai clic su OK per eliminare anche la sua memoria (elimina tutti i {count} documento/i caricati).\nFai clic su Annulla per mantenere i documenti in memoria.', + 'vault.confirmRemove': 'Rimuovere davvero il vault "{name}"?', + 'vault.removed': 'Vault rimosso', + 'vault.removedPurgedMessage': 'Rimosso "{name}" e cancellata la sua memoria.', + 'vault.removedKeptMessage': 'Rimosso "{name}". Documenti conservati in memoria.', + 'vault.couldNotRemove': 'Impossibile rimuovere il deposito', + 'vault.name': 'Nome', + 'vault.namePlaceholder': 'Le mie note di ricerca', + 'vault.folderPath': 'Percorso della cartella (assoluto)', + 'vault.folderPathPlaceholder': '/Utenti/tu/Documenti/note', + 'vault.excludes': 'Esclude (sottostringhe separate da virgole, facoltativo)', + 'vault.excludesPlaceholder': 'bozze/, .secret', + 'vault.creating': 'Creazione…', + 'vault.create': 'Crea deposito', + 'vault.loading': 'Caricamento depositi…', + 'vault.failedToLoad': 'Impossibile caricare i depositi: {error}', + 'vault.empty': 'Nessun vault ancora. Aggiungine uno sopra per iniziare a caricare una cartella.', + 'vault.fileCount': '{count} file', + 'vault.syncedRelative': 'sincronizzato {time}', + 'vault.neverSynced': 'mai sincronizzato', + 'vault.syncingProgress': 'Sincronizzazione… {ingested}/{total}', + 'vault.removing': 'Rimozione in corso…', + 'vault.relative.sec': '{count}s fa', + 'vault.relative.min': '{count}m fa', + 'vault.relative.hr': '{count}h fa', + 'vault.relative.day': '{count}d fa', + 'whatsapp.title': 'WhatsApp', + 'subconscious.interval.fiveMinutes': '5 minuti', + 'subconscious.interval.tenMinutes': '10 minuti', + 'subconscious.interval.fifteenMinutes': '15 minuti', + 'subconscious.interval.thirtyMinutes': '30 minuti', + 'subconscious.interval.oneHour': '1 ora', + 'subconscious.interval.sixHours': '6 ore', + 'subconscious.interval.twelveHours': '12 ore', + 'subconscious.interval.oneDay': '1 giorno', + 'subconscious.priority.critical': 'critico', + 'subconscious.priority.important': 'importante', + 'subconscious.priority.normal': 'normale', + 'subconscious.durationSeconds': '{seconds}s', + 'subconscious.durationMilliseconds': '{milliseconds}ms', + 'settings.appearance': 'Aspetto', + 'settings.appearanceDesc': 'Scegli la luce, scuro o abbina il tema del tuo sistema', + 'settings.mascot': 'Mascotte', + 'settings.mascotDesc': "Scegli il colore della mascotte utilizzato in tutta l'app", + 'pages.settings.account.walletBalances': 'Saldi portafoglio', + 'pages.settings.account.walletBalancesDesc': + 'Visualizza i saldi multi-chain del tuo portafoglio locale', + 'walletBalances.title': 'Saldi portafoglio', + 'walletBalances.refresh': 'Refresh', + 'walletBalances.loading': 'Caricamento saldi…', + 'walletBalances.retry': 'Retry', + 'walletBalances.emptyState': + 'Nessun account portafoglio ancora — configura un portafoglio in Frase di recupero.', + 'walletBalances.copyAddress': 'Copia indirizzo', + 'walletBalances.providerMissing': 'provider non disponibile', + 'walletBalances.rawBalance': 'Grezzo: {raw}', + 'walletBalances.errorGeneric': + 'Impossibile caricare i saldi del portafoglio. Configura il tuo portafoglio in Frase di recupero e riprova.', + 'settings.taskSources.title': 'Fonti del compito', + 'settings.taskSources.subtitle': + "Estrai le attività dai tuoi strumenti sulla lavagna delle cose da fare dell'agente", + 'settings.taskSources.description': + "Raccogliere elementi di lavoro da GitHub, Notion, Linear e ClickUp, arricchirli e instradarli sulla bacheca delle cose da fare dell'agente.", + 'settings.taskSources.connectHint': + 'Le origini dei compiti utilizzano i tuoi account collegati. Collegali prima sotto Integrazioni.', + 'settings.taskSources.disabledBanner': + 'Le fonti delle attività sono disattivate nelle impostazioni. Attivale per eseguire il polling automaticamente.', + 'settings.taskSources.loadError': 'Impossibile caricare le fonti del compito', + 'settings.taskSources.addTitle': 'Aggiungi una fonte di attività', + 'settings.taskSources.provider': 'Fornitore', + 'settings.taskSources.name': 'Nome (opzionale)', + 'settings.taskSources.namePlaceholder': 'ad esempio, i miei problemi aperti', + 'settings.taskSources.github.repo': 'Repository (proprietario/nome, facoltativo)', + 'settings.taskSources.github.labels': 'Etichette (separate da virgola)', + 'settings.taskSources.notion.database': 'ID del database (board)', + 'settings.taskSources.linear.team': 'ID del team (opzionale)', + 'settings.taskSources.clickup.team': 'ID dello spazio di lavoro (team) (opzionale)', + 'settings.taskSources.assignedToMe': 'Solo gli articoli assegnati a me', + 'settings.taskSources.add': 'Aggiungi fonte', + 'settings.taskSources.adding': 'Aggiungendo…', + 'settings.taskSources.preview': 'Anteprima', + 'settings.taskSources.previewResult': 'Il/i compito/i {count} corrispondono a questo filtro', + 'settings.taskSources.fetchNow': 'Prendi adesso', + 'settings.taskSources.fetching': 'Recupero…', + 'settings.taskSources.fetchResult': 'Instradato {routed} di {fetched} attività', + 'settings.taskSources.configured': 'Fonti configurate', + 'settings.taskSources.empty': 'Nessuna fonte attività configurata ancora.', + 'settings.taskSources.proactive': 'Proattivo', + 'settings.taskSources.lastFetch': 'Ultimo recupero', + 'settings.taskSources.never': 'Mai', + 'settings.taskSources.statusEnabled': 'Abilitato', + 'settings.taskSources.statusDisabled': 'Disabilitato', + 'settings.taskSources.enable': 'Abilita', + 'settings.taskSources.disable': 'Disabilita', + 'settings.taskSources.remove': 'Rimuovere', + 'settings.taskSources.removeConfirm': + 'Rimuovere questa fonte del compito? Tutta la cronologia dei compiti importati sarà eliminata e non potrà essere annullata.', + 'settings.taskSources.refresh': 'Aggiorna', + 'settings.taskSources.providers.github': 'GitHub', + 'settings.taskSources.providers.notion': 'Nozione', + 'settings.taskSources.providers.linear': 'Lineare', + 'settings.taskSources.providers.clickup': 'ClickUp', + 'skills.dashboard.title': 'Skills', + 'skills.dashboard.scheduledHeading': 'Skill pianificate', + 'skills.dashboard.emptyTitle': 'Nessuna skill pianificata', + 'skills.dashboard.emptyBody': + 'Esegui una skill inclusa una volta o salva una pianificazione ricorrente per vederla qui.', + 'skills.dashboard.create': 'Crea una skill', + 'skills.dashboard.run': 'Esegui una skill', + 'skills.dashboard.enable': 'Abilita skill pianificata', + 'skills.dashboard.disable': 'Disabilita skill pianificata', + 'skills.dashboard.lastRun': 'Ultima esecuzione', + 'skills.dashboard.nextRun': 'Prossima esecuzione', + 'skills.dashboard.cardOpenRunner': 'Apri nel runner', + 'skills.dashboard.loadError': 'Impossibile caricare le skill pianificate', + 'skills.new.title': 'Crea una skill', + 'skills.new.placeholderBody': + 'Il modulo di creazione è in arrivo. Per ora, usa il pulsante "Nuova skill" nella pagina del runner.', + 'settings.agents.title': 'Agenti', + 'settings.agents.subtitle': + 'Gestisci gli agenti disponibili per la delega — quelli predefiniti integrati e i tuoi agenti personalizzati.', + 'settings.agents.menuDesc': 'Gestisci agenti integrati e personalizzati', + 'settings.agents.newAgent': 'Nuovo agente', + 'settings.agents.loadError': 'Impossibile caricare gli agenti', + 'settings.agents.empty': 'Ancora nessun agente', + 'settings.agents.sourceDefault': 'Integrato', + 'settings.agents.sourceCustom': 'Personalizzato', + 'settings.agents.enable': 'Abilita agente', + 'settings.agents.disable': 'Disabilita agente', + 'settings.agents.edit': 'Modifica', + 'settings.agents.delete': 'Elimina', + 'settings.agents.reset': 'Ripristina impostazioni predefinite', + 'settings.agents.modelLabel': 'Modello', + 'settings.agents.toolsLabel': 'Strumenti', + 'settings.agents.toolsAll': 'Tutti gli strumenti', + 'settings.agents.toolsCount': 'strumenti {count}', + 'settings.agents.actionFailed': "Impossibile aggiornare l'agente", + 'settings.agents.orchestratorLocked': "L'orchestratore è sempre abilitato.", + 'settings.agents.editor.createTitle': 'Nuovo agente', + 'settings.agents.editor.editTitle': 'Modifica agente', + 'settings.agents.editor.id': 'ID', + 'settings.agents.editor.idHint': 'Solo lettere minuscole, numeri, _ e -.', + 'settings.agents.editor.name': 'Nome', + 'settings.agents.editor.description': 'Descrizione', + 'settings.agents.editor.model': 'Modello (opzionale)', + 'settings.agents.editor.modelPlaceholder': + 'ad esempio eredita, suggerimento:veloce, o un id modello', + 'settings.agents.editor.systemPrompt': 'Prompt di sistema (opzionale)', + 'settings.agents.editor.tools': 'Strumenti consentiti', + 'settings.agents.editor.toolsHint': + 'Un nome di strumento per riga. Usa * per tutti gli strumenti.', + 'settings.agents.editor.defaultsNote': + 'Modificare un agente integrato salva una sovrascrittura che puoi ripristinare in seguito.', + 'settings.agents.editor.save': 'Salva', + 'settings.agents.editor.create': 'Crea agente', + 'settings.agents.editor.saving': 'Salvataggio…', + 'settings.agentsSection.title': 'Agents', + 'settings.agentsSection.description': + 'Gestisci i tuoi agenti, la loro autonomia e a cosa possono accedere su questo computer.', + 'settings.agentsSection.menuDesc': 'Registro, autonomia e accesso al sistema operativo', + 'settings.agents.editor.notFound': 'Agente non trovato.', + 'settings.agents.editor.modelInherit': 'Eredita (predefinito della piattaforma)', + 'settings.agents.editor.modelHints': 'Suggerimenti di instradamento', + 'settings.agents.editor.modelTiers': 'Livelli di modello', + 'settings.agents.editor.modelCustom': 'ID modello personalizzato…', + 'settings.agents.editor.modelCustomPlaceholder': 'es. anthropic/claude-sonnet-4', + 'settings.agents.editor.selectTools': 'Aggiungi strumenti', + 'settings.agents.editor.toolsAllSelected': 'Tutti gli strumenti', + 'settings.agents.editor.toolsNoneSelected': 'Nessuno strumento selezionato', + 'settings.agents.editor.removeToolAria': 'Rimuovi {tool}', + 'settings.agents.editor.toolsModalTitle': 'Strumenti consentiti', + 'settings.agents.editor.toolsSelectedCount': '{count} selezionati', + 'settings.agents.editor.toolsSearchPlaceholder': 'Cerca strumenti…', + 'settings.agents.editor.toolsAllowAll': 'Consenti tutti gli strumenti (*)', + 'settings.agents.editor.toolsAllowAllHint': + 'Questo agente può utilizzare tutti gli strumenti disponibili.', + 'settings.agents.editor.toolsLoading': 'Caricamento strumenti…', + 'settings.agents.editor.toolsLoadError': 'Impossibile caricare gli strumenti', + 'settings.agents.editor.toolsEmpty': 'Nessuno strumento corrisponde alla ricerca.', + 'settings.agents.editor.toolsDone': 'Done', + 'settings.agents.editor.builtInReadonly': + "Gli agenti integrati non possono essere modificati. Puoi abilitarli, disabilitarli o reimpostarli dall'elenco degli agenti.", }; -export default it; +export default messages; diff --git a/app/src/lib/i18n/ko.ts b/app/src/lib/i18n/ko.ts index a247ca56a..b2885cfcd 100644 --- a/app/src/lib/i18n/ko.ts +++ b/app/src/lib/i18n/ko.ts @@ -1,10 +1,4052 @@ -import ko1 from './chunks/ko-1'; -import ko2 from './chunks/ko-2'; -import ko3 from './chunks/ko-3'; -import ko4 from './chunks/ko-4'; -import ko5 from './chunks/ko-5'; import type { TranslationMap } from './types'; -const ko: TranslationMap = { ...ko1, ...ko2, ...ko3, ...ko4, ...ko5 }; +// Korean (한국어) translations. Keys mirror en.ts; missing/ +// English-identical values fall back to English via I18nContext.resolveEn(). +const messages: TranslationMap = { + 'nav.home': '홈', + 'nav.human': '휴먼', + 'nav.chat': '채팅', + 'nav.connections': '연결', + 'nav.memory': '인텔리전스', + 'nav.alerts': '알림', + 'nav.rewards': '보상', + 'nav.settings': '설정', + 'common.cancel': '취소', + 'common.save': '저장', + 'common.confirm': '확인', + 'common.delete': '삭제', + 'common.edit': '편집', + 'common.create': '생성', + 'common.search': '검색', + 'common.loading': '로딩 중…', + 'common.error': '오류', + 'common.success': '성공', + 'common.back': '뒤로', + 'common.next': '다음', + 'common.finish': '완료', + 'common.close': '닫기', + 'common.enabled': '활성화됨', + 'common.disabled': '비활성화됨', + 'common.on': '켜짐', + 'common.off': '꺼짐', + 'common.yes': '예', + 'common.no': '아니요', + 'common.ok': '확인했습니다', + 'common.name': '이름', + 'common.retry': '다시 시도', + 'common.copy': '복사', + 'common.copied': '복사됨', + 'common.learnMore': '자세히 알아보기', + 'common.seeAll': '보기', + 'common.dismiss': '닫기', + 'common.clear': '지우기', + 'common.reset': '초기화', + 'common.refresh': '새로고침', + 'common.export': '내보내기', + 'common.import': '가져오기', + 'common.upload': '업로드', + 'common.download': '다운로드', + 'common.add': '추가', + 'common.remove': '제거', + 'common.showMore': '더 보기', + 'common.showLess': '간단히 보기', + 'common.submit': '제출', + 'common.continue': '계속', + 'common.comingSoon': '출시 예정', + 'common.breadcrumb': '탐색경로', + 'settings.general': '일반', + 'settings.featuresAndAI': '기능 및 AI', + 'settings.billingAndRewards': '결제 및 보상', + 'settings.support': '지원', + 'settings.advanced': '고급', + 'settings.dangerZone': '위험 영역', + 'settings.account': '계정', + 'settings.accountDesc': '복구 문구, 팀, 연결 및 개인정보', + 'settings.notifications': '알림', + 'settings.notificationsDesc': '방해 금지 및 계정별 알림 설정', + 'settings.notifications.tabs.preferences': '기본 설정', + 'settings.notifications.tabs.routing': '라우팅', + 'settings.features': '기능', + 'settings.featuresDesc': '화면 인식, 메시징 및 도구', + 'settings.aiModels': 'AI 및 모델', + 'settings.aiModelsDesc': '로컬 AI 모델 설정, 다운로드 및 LLM 제공업체', + 'settings.ai': 'AI 구성', + 'settings.aiDesc': '클라우드 제공업체, 로컬 Ollama 모델 및 작업별 라우팅', + 'settings.billingUsage': '결제 및 사용량', + 'settings.billingUsageDesc': '구독 플랜, 크레딧 및 결제 수단', + 'settings.rewards': '보상', + 'settings.rewardsDesc': '추천, 쿠폰 및 적립 크레딧', + 'settings.restartTour': '투어 다시 시작', + 'settings.restartTourDesc': '제품 안내를 처음부터 다시 보기', + 'settings.about': '정보', + 'settings.aboutDesc': '앱 버전 및 소프트웨어 업데이트', + 'settings.developerOptions': '고급', + 'settings.developerOptionsDesc': 'AI 구성, 메시징 채널, 도구, 진단 및 디버그 패널', + 'settings.clearAppData': '앱 데이터 삭제', + 'settings.clearAppDataDesc': '로그아웃하고 모든 로컬 앱 데이터를 영구적으로 삭제', + 'settings.logOut': '로그아웃', + 'settings.logOutDesc': '계정에서 로그아웃', + 'settings.exitLocalSession': '로컬 세션 종료', + 'settings.exitLocalSessionDesc': '로그인 화면으로 돌아가기', + 'settings.language': '언어', + 'settings.betaBuild': '베타 빌드 - v{version}', + 'settings.languageDesc': '앱 인터페이스 표시 언어', + 'settings.alerts': '알림', + 'settings.alertsDesc': '받은 편지함에서 최근 알림 및 활동 보기', + 'settings.account.recoveryPhrase': '복구 문구', + 'settings.account.recoveryPhraseDesc': '계정 복구 문구를 확인하고 백업합니다', + 'settings.account.team': '팀', + 'settings.account.teamDesc': '팀 구성원과 권한을 관리합니다', + 'settings.account.connections': '연결', + 'settings.account.connectionsDesc': '연결된 계정과 서비스를 관리합니다', + 'settings.account.privacy': '개인정보 보호', + 'settings.account.privacyDesc': '컴퓨터 밖으로 나가는 데이터를 제어합니다', + 'migration.title': '다른 어시스턴트에서 가져오기', + 'migration.description': + '다른 로컬 어시스턴트의 메모리와 노트를 이 워크스페이스로 마이그레이션합니다. 먼저 미리 보기로 변경 사항을 확인한 다음 적용하여 데이터를 복사하세요. 현재 메모리는 먼저 백업됩니다.', + 'migration.vendorLabel': '소스 공급업체', + 'migration.vendor.openclaw': 'OpenClaw', + 'migration.vendor.hermes': 'Hermes Agent', + 'migration.sourceLabel': '소스 작업공간 경로(선택 사항)', + 'migration.sourcePlaceholder': '자동 감지하려면 비워 두세요(예: ~/.openclaw/workspace)', + 'migration.sourcePlaceholderHermes': '비워두면 자동 감지 (예: ~/.hermes)', + 'migration.sourceHint': + '비워두면 공급업체의 기본 위치를 사용합니다. 워크스페이스를 다른 위치로 이동한 경우 명시적인 경로를 설정하세요.', + 'migration.previewAction': '미리 보기', + 'migration.previewRunning': '미리보기 중…', + 'migration.applyAction': '가져오기 적용', + 'migration.applyRunning': '가져오는 중…', + 'migration.applyDisclaimer': + '동일한 소스에서 미리 보기를 성공적으로 완료한 후 적용이 활성화됩니다. 가져오기 전에 기존 메모리가 백업됩니다.', + 'migration.reportTitlePreview': '미리 보기 — 아직 가져온 항목 없음', + 'migration.reportTitleApplied': '가져오기 완료', + 'migration.report.source': '소스 작업 영역', + 'migration.report.target': '대상 작업 영역', + 'migration.report.fromSqlite': 'SQLite(brain.db)에서', + 'migration.report.fromMarkdown': '마크다운에서', + 'migration.report.imported': '가져옴', + 'migration.report.skippedUnchanged': '건너뛰었습니다(변경되지 않음)', + 'migration.report.renamedConflicts': '충돌 시 이름이 변경됨', + 'migration.report.warnings': '경고', + 'migration.report.previewHint': + '아직 데이터를 가져오지 않았습니다. 가져오기 적용을 클릭하여 복사하세요.', + 'migration.report.appliedHint': + '가져온 항목이 이제 메모리에 있습니다. 다시 비교하려면 미리 보기를 다시 실행하세요.', + 'migration.confirmImport.singular': + '현재 워크스페이스로 {count}개의 항목을 가져오시겠습니까?\n\n소스: {source}\n대상: {target}\n\n가져오기 실행 전에 기존 메모리가 백업됩니다.', + 'migration.confirmImport.plural': + '현재 워크스페이스로 {count}개의 항목을 가져오시겠습니까?\n\n소스: {source}\n대상: {target}\n\n가져오기 실행 전에 기존 메모리가 백업됩니다.', + 'settings.notifications.doNotDisturb': '방해 금지', + 'settings.notifications.doNotDisturbDesc': '정해진 시간 동안 모든 알림을 일시 중지합니다', + 'settings.notifications.channelControls': '채널별 설정', + 'settings.notifications.channelControlsDesc': '각 채널의 알림 기본 설정을 구성합니다', + 'settings.features.screenAwareness': '화면 인식', + 'settings.features.screenAwarenessDesc': '어시스턴트가 현재 활성 창을 볼 수 있게 합니다', + 'settings.features.messaging': '메시징', + 'settings.features.messagingDesc': '채널 및 메시징 통합 설정', + 'settings.features.tools': '도구', + 'settings.features.toolsDesc': '연결된 도구와 통합을 관리합니다', + 'settings.ai.localSetup': '로컬 AI 설정', + 'settings.ai.localSetupDesc': '로컬 AI 모델을 다운로드하고 구성합니다', + 'settings.ai.llmProvider': 'LLM 제공업체', + 'settings.ai.llmProviderDesc': 'AI 제공업체를 선택하고 구성합니다', + 'clearData.title': '앱 데이터 삭제', + 'clearData.warning': '이 작업은 로그아웃하고 다음 로컬 앱 데이터를 영구적으로 삭제합니다:', + 'clearData.bulletSettings': '앱 설정 및 대화', + 'clearData.bulletCache': '모든 로컬 통합 캐시 데이터', + 'clearData.bulletWorkspace': '워크스페이스 데이터', + 'clearData.bulletOther': '기타 모든 로컬 데이터', + 'clearData.irreversible': '이 작업은 되돌릴 수 없습니다.', + 'clearData.clearing': '앱 데이터를 삭제하는 중...', + 'clearData.failed': '데이터 삭제 및 로그아웃에 실패했습니다. 다시 시도해 주세요.', + 'clearData.failedLogout': '로그아웃에 실패했습니다. 다시 시도해 주세요.', + 'clearData.failedPersist': '저장된 앱 상태를 삭제하지 못했습니다. 다시 시도해 주세요.', + 'welcome.title': 'OpenHuman에 오신 것을 환영합니다', + 'welcome.subtitle': '개인용 AI 슈퍼 인텔리전스입니다. 비공개이며, 간단하고, 매우 강력합니다.', + 'welcome.connectPrompt': 'RPC URL 구성(고급)', + 'welcome.selectRuntime': '런타임 선택', + 'welcome.clearingAppData': '앱 데이터 삭제 중...', + 'welcome.clearAppDataAndRestart': '앱 데이터 삭제 및 다시 시작', + 'welcome.clearAppDataWarning': + '이 작업은 이 기기에 로컬로 저장된 비밀 정보와 계정을 초기화합니다. 클라우드 계정은 영향을 받지 않으며 즉시 다시 로그인할 수 있습니다.', + 'welcome.resetErrorFallback': + '앱 데이터를 지울 수 없습니다. OpenHuman을 종료하고 다시 열어 재시도하세요.', + 'welcome.signingIn': '로그인 중...', + 'welcome.termsIntro': '계속 진행하면', + 'welcome.termsOfUse': '약관', + 'welcome.termsJoiner': '및', + 'welcome.privacyPolicy': '개인정보 보호정책에 동의하게 됩니다.', + 'welcome.termsOutro': '.', + 'welcome.urlPlaceholder': 'http://localhost:8089', + 'welcome.invalidUrl': '올바른 HTTP 또는 HTTPS URL을 입력해 주세요', + 'welcome.connecting': '테스트 중', + 'welcome.connect': '테스트', + 'home.greeting': '좋은 아침입니다', + 'home.greetingAfternoon': '좋은 오후입니다', + 'home.greetingEvening': '좋은 저녁입니다', + 'home.askAssistant': '어시스턴트에게 무엇이든 물어보세요...', + 'home.statusOk': + '기기가 연결되었습니다. 연결을 유지하려면 앱을 계속 실행해 주세요. 아래 버튼으로 에이전트에게 메시지를 보내세요.', + 'home.statusBackendOnly': + '백엔드에 다시 연결하는 중입니다… 곧 에이전트를 다시 사용할 수 있습니다.', + 'home.statusCoreUnreachable': + '로컬 코어 사이드카가 응답하지 않습니다. OpenHuman 백그라운드 프로세스가 중단되었거나 시작하지 못했을 수 있습니다.', + 'home.statusInternetOffline': + '현재 기기가 오프라인 상태입니다. 네트워크를 확인하거나 앱을 다시 시작하여 다시 연결하세요.', + 'home.restartCore': '코어 다시 시작', + 'home.restartingCore': '코어를 다시 시작하는 중…', + 'home.themeToggle.toLight': '라이트 모드로 전환', + 'home.themeToggle.toDark': '다크 모드로 전환', + 'home.usageExhaustedTitle': '사용 한도를 모두 소진했습니다', + 'home.usageExhaustedBody': + '현재 포함된 사용량을 모두 소진했습니다. 더 많은 지속 용량을 사용하려면 구독을 시작하세요.', + 'home.usageExhaustedCta': '구독 시작', + 'home.routinesCard': '내 루틴', + 'home.routinesActive': '{count}개 활성', + 'routines.title': '내 루틴', + 'routines.subtitle': '어시스턴트가 자동으로 수행하는 작업', + 'routines.loading': '루틴 로드 중…', + 'routines.empty': '아직 루틴이 없습니다', + 'routines.emptyHint': + '어시스턴트는 아침 브리핑이나 일일 요약처럼 일정에 따라 작업을 실행할 수 있습니다.', + 'routines.refresh': '새로고침', + 'routines.nextRun': '다음 실행', + 'routines.lastRunSuccess': '마지막 실행 성공', + 'routines.lastRunFailed': '마지막 실행 실패', + 'routines.notRunYet': '아직 실행되지 않음', + 'routines.runNow': '지금 실행', + 'routines.running': '실행 중…', + 'routines.viewHistory': '기록 보기', + 'routines.loadingHistory': '로딩 중…', + 'routines.noHistory': '아직 실행 기록이 없습니다.', + 'routines.statusSuccess': '성공', + 'routines.statusError': '오류', + 'routines.showOutput': '출력 표시', + 'routines.hideOutput': '출력 숨기기', + 'routines.toggleEnabled': '이 루틴을 활성화하거나 비활성화', + 'routines.typeAgent': '에이전트', + 'routines.typeCommand': '명령', + 'nav.routines': 'Routines', + 'chat.newThread': '새 스레드', + 'chat.typeMessage': '메시지를 입력하세요...', + 'chat.send': '메시지 보내기', + 'chat.thinking': '생각 중...', + 'chat.noMessages': '아직 메시지가 없습니다', + 'chat.startConversation': '대화 시작', + 'chat.regenerate': '다시 생성', + 'chat.copyResponse': '응답 복사', + 'chat.citations': '인용', + 'chat.toolUsed': '사용된 도구', + 'scope.legacy': '레거시', + 'scope.user': '사용자', + 'scope.project': '프로젝트', + 'skills.title': '연결', + 'skills.search': '연결 검색...', + 'skills.noResults': '연결을 찾을 수 없습니다', + 'skills.connect': '연결', + 'skills.disconnect': '연결 해제', + 'skills.configure': '관리', + 'skills.connected': '연결됨', + 'skills.available': '사용 가능', + 'skills.addAccount': '계정 추가', + 'skills.channels': '채널', + 'skills.integrations': '통합', + 'skills.integrationsSubtitle': + '클라우드 기반 OAuth 연결 — 계정으로 로그인하면 Composio가 토큰을 관리하여 에이전트가 사용자를 대신해 읽고 작동할 수 있습니다. API 키 관리가 필요 없습니다.', + 'skills.composio.noApiKeyTitle': '아니요 Composio API 키가 구성됨', + 'skills.composio.noApiKeyDescription': + '로컬 모드에서는 자체 Composio API 키를 사용합니다. 설정 → 고급 → Composio에서 키를 추가한 후 여기서 통합을 연결하세요.', + 'skills.composio.noApiKeyCta': '설정에서 열기', + 'skills.tabs.composio': 'Composio', + 'skills.tabs.channels': '채널', + 'skills.tabs.mcp': 'MCP 서버', + 'skills.tabs.runners': 'Runners', + 'memory.title': '메모리', + 'memory.search': '메모리 검색...', + 'memory.noResults': '메모리를 찾을 수 없습니다', + 'memory.empty': '아직 메모리가 없습니다. 메모리는 상호작용하면서 자동으로 생성됩니다.', + 'memory.tab.memory': '메모리', + 'memory.tab.tasks': '에이전트 작업', + 'memory.tab.tasksDescription': + '작업을 만들고 추적하세요 — 본인의 할 일 목록과 에이전트가 대화를 통해 구성한 보드가 모두 포함됩니다.', + 'memory.tab.subconscious': '잠재의식', + 'memory.tab.dreams': '꿈', + 'memory.tab.calls': '통화', + 'memory.tab.diagram': 'Diagram', + 'memory.tab.centrality': 'Centrality', + 'memory.tab.settings': '설정', + 'memory.analyzeNow': '지금 분석', + 'graphCentrality.title': '지식 그래프 중심성', + 'graphCentrality.intro': + '메모리 그래프에 PageRank를 적용해 핵심 허브와, 단순 빈도 계산으로는 드러나지 않는 분리된 클러스터를 연결하는 엔터티를 드러냅니다.', + 'graphCentrality.loading': '중심성 계산 중…', + 'graphCentrality.errorPrefix': '그래프를 로드할 수 없습니다:', + 'graphCentrality.retry': '다시 시도', + 'graphCentrality.empty': '아직 지식 그래프가 없습니다.', + 'graphCentrality.emptyHint': + '어시스턴트가 사용자에 대한 사실을 기록하면 가장 많이 연결된 엔터티가 여기에 표시됩니다.', + 'graphCentrality.namespaceLabel': '네임스페이스', + 'graphCentrality.namespaceAll': '모든 네임스페이스', + 'graphCentrality.metricEntities': '엔터티', + 'graphCentrality.metricConnections': '연결', + 'graphCentrality.metricClusters': '클러스터', + 'graphCentrality.clustersCaption': '클러스터 {components}개 · 최대 {largest}개 포함', + 'graphCentrality.approximateBadge': '근사값', + 'graphCentrality.approximateTitle': '완전히 수렴하기 전에 반복 한도에서 중지됨', + 'graphCentrality.rankedHeading': '영향력 상위 엔터티', + 'graphCentrality.colRank': '#', + 'graphCentrality.colEntity': '엔터티', + 'graphCentrality.colInfluence': '영향력', + 'graphCentrality.colLinks': '링크', + 'graphCentrality.bridgeBadge': '커넥터', + 'graphCentrality.bridgeTitle': '커넥터 - 링크 수보다 더 큰 영향력을 가진 엔터티', + 'graphCentrality.degreeTitle': '들어옴 {in} · 나감 {out}', + 'memoryTree.status.title': '메모리 트리', + 'memoryTree.status.autoSyncLabel': '자동 동기화', + 'memoryTree.status.autoSyncDescription': + '새 수집을 중지하려면 일시 중지하세요. 기존 위키는 계속 쿼리할 수 있습니다.', + 'memoryTree.status.statusTile': '상태', + 'memoryTree.status.lastSyncTile': '마지막 동기화', + 'memoryTree.status.totalChunksTile': '총 청크', + 'memoryTree.status.wikiSizeTile': '위키 크기', + 'memoryTree.status.statusRunning': '실행 중', + 'memoryTree.status.statusPaused': '일시 중지됨', + 'memoryTree.status.statusSyncing': '동기화 중', + 'memoryTree.status.statusError': '오류', + 'memoryTree.status.statusIdle': '유휴 상태', + 'memoryTree.status.never': '없음', + 'memoryTree.status.fetchError': '메모리 트리 상태를 가져올 수 없습니다.', + 'memoryTree.status.retry': '다시 시도', + 'memoryTree.status.toggleFailed': '자동 동기화를 전환할 수 없습니다.', + 'memoryTree.status.justNow': '방금 전', + 'memoryTree.status.secondsAgo': '{count}초 전', + 'memoryTree.status.minuteAgo': '1분 전', + 'memoryTree.status.minutesAgo': '{count}분 전', + 'memoryTree.status.hourAgo': '1시간 전', + 'memoryTree.status.hoursAgo': '{count}시간 전', + 'memoryTree.status.dayAgo': '1일 전', + 'memoryTree.status.daysAgo': '{count}일 전', + 'alerts.title': '알림', + 'alerts.empty': '아직 알림이 없습니다', + 'alerts.markAllRead': '모두 읽음으로 표시', + 'alerts.unread': '읽지 않음', + 'rewards.title': '보상', + 'rewards.referrals': '추천', + 'rewards.coupons': '교환', + 'rewards.localUnavailable': + '로컬 로그인은 리워드, 쿠폰 또는 추천 크레딧을 적립할 수 없습니다. 리워드를 적립하려면 로그아웃하고 OpenHuman 계정으로 로그인하세요.', + 'rewards.localUnavailableCta': '계정 설정 열기', + 'rewards.credits': '크레딧', + 'rewards.referralCode': '내 추천 코드', + 'rewards.copyCode': '코드 복사', + 'rewards.share': '공유', + 'onboarding.welcome': '안녕하세요. 저는 OpenHuman입니다.', + 'onboarding.welcomeDesc': + '컴퓨터에서 실행되는 초지능 AI 어시스턴트입니다. 비공개이며, 간단하고, 매우 강력합니다.', + 'onboarding.context': '컨텍스트 수집', + 'onboarding.contextDesc': '매일 사용하는 도구와 서비스를 연결하세요.', + 'onboarding.localAI': '로컬 AI', + 'onboarding.localAIDesc': '기기에서 실행되는 로컬 AI 모델을 설정하세요.', + 'onboarding.chatProvider': '채팅 제공업체', + 'onboarding.chatProviderDesc': '어시스턴트와 상호작용할 방법을 선택하세요.', + 'onboarding.referral': '추천', + 'onboarding.referralDesc': '추천 코드가 있다면 적용하세요.', + 'onboarding.finish': '설정 완료', + 'onboarding.finishDesc': '모든 준비가 끝났습니다! OpenHuman을 사용해 보세요.', + 'onboarding.skip': '건너뛰기', + 'onboarding.getStarted': '시작하기', + 'onboarding.runtimeChoice.title': 'OpenHuman을 어떻게 실행하시겠습니까?', + 'onboarding.runtimeChoice.subtitle': + '가장 잘 맞는 설정을 선택하세요. 나중에 설정에서 변경할 수 있습니다.', + 'onboarding.runtimeChoice.cloud.title': '간단 모드', + 'onboarding.runtimeChoice.cloud.tagline': 'OpenHuman이 모든 것을 대신 관리하도록 합니다.', + 'onboarding.runtimeChoice.cloud.f1': '내장 보안', + 'onboarding.runtimeChoice.cloud.f2': '사용량을 더 오래 쓰기 위한 토큰 압축', + 'onboarding.runtimeChoice.cloud.f3': '하나의 구독으로 모든 모델 포함', + 'onboarding.runtimeChoice.cloud.f4': '관리할 API 키 없음', + 'onboarding.runtimeChoice.cloud.f5': '간단한 설정', + 'onboarding.runtimeChoice.custom.title': '사용자 지정 실행', + 'onboarding.runtimeChoice.custom.tagline': '직접 키를 가져와 사용 중인 항목을 완전히 제어합니다.', + 'onboarding.runtimeChoice.custom.f1': '거의 모든 기능에 API 키가 필요합니다', + 'onboarding.runtimeChoice.custom.f2': '이미 결제 중인 서비스를 다시 사용합니다', + 'onboarding.runtimeChoice.custom.f3': '모든 것을 로컬에서 실행하면 무료일 수 있습니다', + 'onboarding.runtimeChoice.custom.f4': '더 많은 설정과 더 많은 옵션', + 'onboarding.runtimeChoice.custom.f5': '고급 사용자와 개발자에게 가장 적합', + 'onboarding.runtimeChoice.cloud.creditHighlight': '체험용 $1 무료 크레딧', + 'onboarding.runtimeChoice.continueCloud': '간단 모드로 계속', + 'onboarding.runtimeChoice.continueCustom': '사용자 지정으로 계속', + 'onboarding.runtimeChoice.recommended': '추천', + 'onboarding.apiKeys.title': 'API 키를 추가해 봅시다', + 'onboarding.apiKeys.subtitle': + '지금 붙여넣거나 건너뛰고 나중에 설정 › AI에서 추가할 수 있습니다. 키는 이 기기에 저장되며 저장 시 암호화됩니다.', + 'onboarding.apiKeys.openaiLabel': 'OpenAI API 키', + 'onboarding.apiKeys.openaiPlaceholder': 'sk-...', + 'onboarding.apiKeys.openaiOauthHint': + 'ChatGPT Plus/Pro(구독) 또는 OpenAI API 키를 사용하세요. 둘 다 필수는 아닙니다.', + 'onboarding.apiKeys.openaiOauthOpening': '로그인 중…', + 'onboarding.apiKeys.finishSignIn': 'ChatGPT 로그인 완료', + 'onboarding.apiKeys.orApiKey': '또는 API 키', + 'onboarding.apiKeys.anthropicLabel': 'Anthropic API 키', + 'onboarding.apiKeys.anthropicPlaceholder': 'sk-ant-...', + 'onboarding.apiKeys.saveError': + '해당 키를 저장할 수 없습니다. 다시 확인한 후 다시 시도해 주세요.', + 'onboarding.apiKeys.skipForNow': '지금은 건너뛰기', + 'onboarding.apiKeys.continue': '저장하고 계속', + 'onboarding.apiKeys.saving': '저장 중…', + 'onboarding.custom.stepperInference': '추론', + 'onboarding.custom.stepperVoice': '음성', + 'onboarding.custom.stepperOAuth': 'OAuth', + 'onboarding.custom.stepperSearch': '검색', + 'onboarding.custom.stepperEmbeddings': 'Embeddings', + 'onboarding.custom.stepperMemory': '메모리', + 'onboarding.custom.stepCounter': '{total}단계 중 {n}단계', + 'onboarding.custom.defaultTitle': '기본값', + 'onboarding.custom.defaultSubtitle': 'OpenHuman이 대신 관리하도록 합니다.', + 'onboarding.custom.configureTitle': '구성', + 'onboarding.custom.configureSubtitle': '사용할 항목을 직접 선택합니다.', + 'onboarding.custom.progressAriaLabel': '온보딩 진행 상황', + 'onboarding.custom.continue': '계속', + 'onboarding.custom.back': '뒤로', + 'onboarding.custom.finish': '설정 완료', + 'onboarding.custom.configureLater': + '온보딩 후에 이 설정을 마칠 수 있습니다. 완료되면 해당 설정 페이지로 이동합니다.', + 'onboarding.custom.openSettings': '설정에서 열기', + 'onboarding.custom.inference.title': '추론(텍스트)', + 'onboarding.custom.inference.subtitle': + '어떤 언어 모델이 질문에 답하고 에이전트를 실행해야 하나요?', + 'onboarding.custom.inference.defaultDesc': + 'OpenHuman은 모든 작업을 적절한 기본 모델로 라우팅합니다. 키도 필요 없고 설정도 필요 없습니다.', + 'onboarding.custom.inference.configureDesc': + '직접 OpenAI 또는 Anthropic 키를 가져오세요. 모든 텍스트 기반 작업에 이 키를 사용합니다.', + 'onboarding.custom.voice.title': '음성', + 'onboarding.custom.voice.subtitle': + '음성 모드를 위한 음성-텍스트 변환 및 텍스트-음성 변환입니다.', + 'onboarding.custom.voice.defaultDesc': + 'OpenHuman에는 바로 사용할 수 있는 관리형 STT/TTS가 포함되어 있습니다. 별도로 연결할 필요가 없습니다.', + 'onboarding.custom.voice.configureDesc': + '직접 ElevenLabs / OpenAI Whisper 등을 사용하세요. 설정 › 음성에서 구성할 수 있습니다.', + 'onboarding.custom.oauth.title': '연결(OAuth)', + 'onboarding.custom.oauth.subtitle': + 'OAuth가 필요한 Gmail, Slack, Notion 및 기타 연결 서비스입니다.', + 'onboarding.custom.oauth.defaultDesc': + 'OpenHuman은 관리형 Composio 워크스페이스를 실행합니다. 나중에 각 서비스를 한 번의 클릭으로 연결할 수 있습니다.', + 'onboarding.custom.oauth.configureDesc': + '직접 Composio 계정 또는 API 키를 가져오세요. 설정 › 연결에서 구성할 수 있습니다.', + 'onboarding.custom.search.title': '웹 검색', + 'onboarding.custom.search.subtitle': 'OpenHuman이 사용자를 대신해 웹을 검색하는 방식입니다.', + 'onboarding.custom.search.defaultDesc': + 'OpenHuman은 관리형 검색 백엔드를 사용합니다. 키가 필요 없습니다.', + 'onboarding.custom.search.configureDesc': + '직접 검색 제공업체 키(Tavily, Brave 등)를 가져오세요. 설정 › 도구에서 구성할 수 있습니다.', + 'onboarding.custom.embeddings.title': 'Embeddings', + 'onboarding.custom.embeddings.subtitle': + 'OpenHuman이 시맨틱 메모리 검색을 위한 벡터 임베딩을 생성하는 방식입니다.', + 'onboarding.custom.embeddings.defaultDesc': + 'OpenHuman이 관리형 임베딩 서비스를 사용합니다. API 키가 필요 없습니다.', + 'onboarding.custom.embeddings.configureDesc': + '자체 임베딩 공급자(OpenAI, Voyage, Ollama 등)를 사용하세요.', + 'onboarding.custom.memory.title': '메모리', + 'onboarding.custom.memory.subtitle': + 'OpenHuman이 사용자의 컨텍스트, 선호도, 이전 대화를 기억하는 방식입니다.', + 'onboarding.custom.memory.defaultDesc': + 'OpenHuman은 메모리 저장과 검색을 자동으로 관리합니다. 설정할 것이 없습니다.', + 'onboarding.custom.memory.configureDesc': + '메모리를 직접 검사, 내보내기 또는 삭제할 수 있습니다. 설정 › 메모리에서 구성할 수 있습니다.', + 'accounts.addAccount': '계정 추가', + 'accounts.manageAccounts': '계정 관리', + 'accounts.noAccounts': '연결된 계정이 없습니다', + 'accounts.connectAccount': '시작하려면 계정을 연결하세요', + 'accounts.agent': '에이전트', + 'accounts.respondQueue': '응답 대기열', + 'accounts.disconnect': '연결 해제', + 'accounts.disconnectConfirm': '이 계정의 연결을 해제하시겠습니까?', + 'accounts.disconnectClearMemory': '이 소스의 메모리도 삭제', + 'accounts.disconnectClearMemoryHint': + '이 연결과 연관된 로컬 메모리 조각을 영구적으로 삭제합니다.', + 'accounts.searchAccounts': '계정 검색...', + 'channels.title': '채널', + 'channels.configure': '채널 구성', + 'channels.setup': '설정', + 'channels.noChannels': '구성된 채널이 없습니다', + 'channels.localManagedUnavailable': '로컬 사용자는 관리 채널을 사용할 수 없습니다.', + 'channels.addChannel': '채널 추가', + 'channels.status.connected': '연결됨', + 'channels.status.disconnected': '연결 해제됨', + 'channels.status.error': '오류', + 'channels.status.configuring': '구성 중', + 'channels.defaultMessaging': '기본 메시징 채널', + 'webhooks.title': '웹훅', + 'webhooks.create': '웹훅 생성', + 'webhooks.noWebhooks': '구성된 웹훅이 없습니다', + 'webhooks.url': 'URL', + 'webhooks.secret': '시크릿', + 'webhooks.events': '이벤트', + 'webhooks.archiveDirectory': '보관 디렉터리', + 'webhooks.todayFile': '오늘의 파일', + 'invites.title': '초대', + 'invites.create': '초대 생성', + 'invites.noInvites': '대기 중인 초대가 없습니다', + 'invites.code': '초대 코드', + 'invites.copyLink': '링크 복사', + 'invites.generate': '초대 생성', + 'invites.generating': '생성 중...', + 'invites.refreshing': '초대 새로 고치는 중...', + 'invites.loading': '초대 로드 중...', + 'invites.copyCodeAria': '초대 코드 복사', + 'invites.revokeAria': '초대 취소', + 'invites.usedUp': '소진됨', + 'invites.uses': '용도: {current}{max}', + 'invites.expiresOn': '{date} 만료', + 'invites.empty': '아직 초대가 없습니다.', + 'invites.emptyHint': '다른 사람과 공유할 초대 코드를 생성하세요.', + 'invites.revokeTitle': '초대 코드 취소', + 'invites.revokePromptPrefix': '정말 하시겠습니까? 초대 코드 취소', + 'invites.revokeWarning': '이 초대 코드는 더 이상 유효하지 않으며 팀 참여에 사용할 수 없습니다.', + 'invites.revoking': '취소 중...', + 'invites.revokeAction': '초대 취소', + 'invites.failedGenerate': '초대 생성 실패', + 'invites.failedRevoke': '초대 취소 실패', + 'team.refreshingMembers': '멤버 새로 고치는 중...', + 'team.loadingMembers': '구성원 로드 중...', + 'team.memberCount': '{count} 구성원', + 'team.memberCountPlural': '{count} 구성원', + 'team.you': '(귀하)', + 'team.removeAria': '{name} 제거', + 'team.noMembers': '구성원을 찾을 수 없습니다.', + 'team.removeTitle': '팀 구성원 제거', + 'team.removePromptPrefix': '제거하시겠습니까?', + 'team.removePromptSuffix': '팀에서?', + 'team.removeWarning': '팀 및 모든 팀 리소스에 대한 액세스 권한을 잃게 됩니다.', + 'team.removing': '제거 중...', + 'team.removeAction': '구성원 제거', + 'team.changeRoleTitle': '구성원 역할 변경', + 'team.changeRolePrompt': '{name}의 역할을 {oldRole}에서 {newRole}(으)로 변경하시겠습니까?', + 'team.changeRoleAdminGrant': '팀원 관리 권한을 포함한 모든 관리자 권한이 부여됩니다.', + 'team.changeRoleAdminRemove': '관리자 권한이 제거되어 더 이상 팀을 관리할 수 없게 됩니다.', + 'team.changing': '변경 중...', + 'team.changeRoleAction': '역할 변경', + 'team.failedChangeRole': '역할 변경 실패', + 'team.failedRemoveMember': '구성원 제거 실패', + 'devOptions.title': '고급', + 'devOptions.diagnostics': '진단', + 'devOptions.diagnosticsDesc': '시스템 상태, 로그 및 성능 지표', + 'devOptions.toolPolicyDiagnosticsDesc': '도구 인벤토리, 정책 상태, MCP 허용 목록 및 최근 차단', + 'devOptions.toolPolicyDiagnostics.loading': '로딩 중…', + 'devOptions.toolPolicyDiagnostics.unavailable': '진단을 사용할 수 없습니다.', + 'devOptions.toolPolicyDiagnostics.posture.title': '정책 상태', + 'devOptions.toolPolicyDiagnostics.posture.autonomy': '자율성:', + 'devOptions.toolPolicyDiagnostics.posture.workspaceOnly': '작업공간만:', + 'devOptions.toolPolicyDiagnostics.posture.maxActionsPerHour': '시간당 최대 작업:', + 'devOptions.toolPolicyDiagnostics.posture.approvalMediumRisk': '승인(중간 위험):', + 'devOptions.toolPolicyDiagnostics.posture.blockHighRisk': '높은 위험 차단:', + 'devOptions.toolPolicyDiagnostics.inventory.title': '인벤토리', + 'devOptions.toolPolicyDiagnostics.inventory.totalTools': '총 도구', + 'devOptions.toolPolicyDiagnostics.inventory.enabledTools': '활성화된 도구', + 'devOptions.toolPolicyDiagnostics.inventory.mcpStdioTools': 'MCP stdio 도구', + 'devOptions.toolPolicyDiagnostics.inventory.jsonRpcTools': 'JSON-RPC 도구', + 'devOptions.toolPolicyDiagnostics.mcpAllowlists.title': 'MCP 허용 목록', + 'devOptions.toolPolicyDiagnostics.mcpAllowlists.summary': + '활성화됨: {enabled} · 서버: {enabledCount}/{totalCount}', + 'devOptions.toolPolicyDiagnostics.mcpAllowlists.unnamed': '<이름 없음>', + 'devOptions.toolPolicyDiagnostics.mcpAllowlists.allowDeny': '허용={allowCount} 거부={denyCount}', + 'devOptions.toolPolicyDiagnostics.mcpWriteAudit.title': 'MCP 쓰기 감사', + 'devOptions.toolPolicyDiagnostics.mcpWriteAudit.summary': + '활성화됨: {enabled} · 최근(24시간): {recentRows}', + 'devOptions.toolPolicyDiagnostics.recentBlocked.title': '최근 차단된 호출', + 'devOptions.toolPolicyDiagnostics.recentBlocked.empty': '기록된 차단 호출이 없습니다.', + 'devOptions.toolPolicyDiagnostics.redactedSurfaces.title': '마스킹된 표면', + 'devOptions.toolPolicyDiagnostics.redactedSurfaces.summary': + '쓰기 가능: {writeCount} · 정책 표면: {policyCount}', + 'devOptions.debugPanels': '디버그 패널', + 'devOptions.debugPanelsDesc': '기능 플래그, 상태 검사 및 디버깅 도구', + 'devOptions.webhooks': '웹훅', + 'devOptions.webhooksDesc': '웹훅 통합을 구성하고 테스트합니다', + 'devOptions.memoryInspection': '메모리 검사', + 'devOptions.memoryInspectionDesc': '메모리 항목을 탐색, 쿼리 및 관리합니다', + 'voice.pushToTalk': '눌러서 말하기', + 'voice.recording': '녹음 중...', + 'voice.processing': '처리 중...', + 'voice.languageHint': '언어', + 'misc.rehydrating': '데이터를 불러오는 중...', + 'misc.checkingServices': '서비스 확인 중...', + 'misc.serviceUnavailable': '서비스를 사용할 수 없음', + 'misc.somethingWentWrong': '문제가 발생했습니다', + 'misc.tryAgainLater': '나중에 다시 시도해 주세요.', + 'misc.restartApp': '앱 다시 시작', + 'misc.updateAvailable': '업데이트 사용 가능', + 'misc.updateNow': '지금 업데이트', + 'misc.updateLater': '나중에', + 'misc.downloading': '다운로드 중...', + 'misc.installing': '설치 중...', + 'misc.beta': + 'OpenHuman은 초기 베타 버전입니다. 피드백을 공유하거나 발견한 버그를 신고해 주세요 — 모든 신고는 더 빠른 출시를 돕습니다.', + 'misc.betaFeedback': '피드백 보내기', + 'mnemonic.title': '복구 문구', + 'mnemonic.warning': '이 단어들을 순서대로 적어 안전한 곳에 보관하세요.', + 'mnemonic.copyWarning': + '복구 문구를 절대 공유하지 마세요. 이 단어를 가진 사람은 누구나 계정에 접근할 수 있습니다.', + 'mnemonic.copied': '복구 문구가 클립보드에 복사되었습니다', + 'mnemonic.reveal': '문구 보기', + 'mnemonic.revealPhrase': '복구 문구 표시', + 'mnemonic.hidden': '복구 문구가 숨겨져 있습니다', + 'privacy.title': '개인정보 및 보안', + 'privacy.description': '외부 서비스로 전송되는 데이터에 대한 투명성 보고서입니다.', + 'privacy.empty': '감지된 외부 데이터 전송이 없습니다.', + 'privacy.whatLeavesComputer': '내 컴퓨터를 떠나는 데이터', + 'privacy.loading': '개인정보 세부 정보를 불러오는 중...', + 'privacy.loadError': + '실시간 개인정보 목록을 불러올 수 없습니다. 아래의 분석 제어 기능은 계속 작동합니다.', + 'privacy.noCapabilities': '현재 데이터 이동을 공개하는 기능이 없습니다.', + 'privacy.sentTo': '전송 대상', + 'privacy.leavesDevice': '기기를 떠남', + 'privacy.staysLocal': '로컬에 유지됨', + 'privacy.anonymizedAnalytics': '익명화된 분석', + 'privacy.shareAnonymizedData': '익명화된 사용 데이터 공유', + 'privacy.shareAnonymizedDataDesc': + '익명 충돌 보고서와 사용 분석을 공유하여 OpenHuman 개선을 도와주세요. 모든 데이터는 완전히 익명화되며, 개인 데이터, 메시지, 지갑 키 또는 세션 정보는 절대 수집되지 않습니다.', + 'privacy.meetingFollowUps': '회의 후속 조치', + 'privacy.autoHandoffMeet': 'Google Meet transcript를 오케스트레이터에 자동 전달', + 'privacy.autoHandoffMeetDesc': + 'Google Meet 통화가 끝나면 OpenHuman의 오케스트레이터가 transcript를 읽고 메시지 초안 작성, 후속 일정 예약, 연결된 Slack 워크스페이스에 요약 게시 같은 작업을 수행할 수 있습니다. 기본값은 꺼짐입니다.', + 'privacy.analyticsDisclaimer': + '모든 분석 및 버그 보고서는 완전히 익명화됩니다. 활성화하면 충돌 정보, 기기 유형, 오류 파일 위치만 수집합니다. 메시지, 세션 데이터, 지갑 키, API 키 또는 개인 식별 정보에는 절대 접근하지 않습니다. 이 설정은 언제든지 변경할 수 있습니다.', + 'settings.about.version': '버전', + 'settings.about.updateAvailable': '사용 가능', + 'settings.about.softwareUpdates': '소프트웨어 업데이트', + 'settings.about.lastChecked': '마지막 확인', + 'settings.about.checking': '확인 중...', + 'settings.about.checkForUpdates': '업데이트 확인', + 'settings.about.releases': '릴리스', + 'settings.about.releasesDesc': 'GitHub에서 릴리스 노트와 이전 빌드를 찾아보세요.', + 'settings.about.openReleases': 'GitHub 릴리스 열기', + 'settings.about.connection': '연결', + 'settings.about.connectionMode': '모드', + 'settings.about.connectionModeLocal': '로컬', + 'settings.about.connectionModeCloud': '클라우드', + 'settings.about.connectionModeUnset': '선택되지 않음', + 'settings.about.serverUrl': '서버 URL', + 'settings.about.serverUrlUnavailable': '사용할 수 없음', + 'settings.about.connectionHelperLocal': + '앱 실행 시 Tauri 셸이 프로세스 내부에서 시작합니다. 포트는 시작할 때 선택되므로 이 URL은 실행할 때마다 달라집니다.', + 'settings.about.connectionHelperCloud': + '원격 코어에 연결되었습니다. BootCheck 또는 클라우드 모드 선택기에서 변경하세요.', + 'settings.heartbeat.title': '하트비트 및 루프', + 'settings.heartbeat.desc': '백그라운드 예약 흐름을 제어하고 루프 맵을 검사합니다.', + 'settings.ledgerUsage.title': '사용량 원장', + 'settings.ledgerUsage.desc': '최근 크레딧 지출, 예산 계산 및 배경 API 읽기 예산.', + 'settings.costDashboard.title': '비용 대시보드', + 'settings.costDashboard.desc': + '전체 스웜의 7일 지출과 토큰 사용량, 예산 속도 및 모델별 세부 내역입니다.', + 'settings.costDashboard.sevenDayCost': '7일 일별 비용', + 'settings.costDashboard.sevenDayTokens': '7일 토큰 사용량', + 'settings.costDashboard.totalSpend': '7일 합계', + 'settings.costDashboard.monthlyPace': '월간 속도', + 'settings.costDashboard.budgetLimit': '예산 한도', + 'settings.costDashboard.utilization': '사용률', + 'settings.costDashboard.modelBreakdown': '모델별 세부 내역', + 'settings.costDashboard.model': '모델', + 'settings.costDashboard.provider': '제공업체', + 'settings.costDashboard.cost': '비용', + 'settings.costDashboard.tokens': '토큰', + 'settings.costDashboard.requests': '요청', + 'settings.costDashboard.percentOfTotal': '전체 대비 %', + 'settings.costDashboard.inputTokens': '입력', + 'settings.costDashboard.outputTokens': '출력', + 'settings.costDashboard.budgetNormal': '정상 진행 중', + 'settings.costDashboard.budgetWarning': '경고', + 'settings.costDashboard.budgetExceeded': '예산 초과', + 'settings.costDashboard.noBudget': '한도 설정 없음', + 'settings.costDashboard.noData': '지난 7일 동안 기록된 비용이 없습니다.', + 'settings.costDashboard.noModels': '지난 7일 동안 모델 활동이 없습니다.', + 'settings.costDashboard.loading': '비용 대시보드 로드 중…', + 'settings.costDashboard.disabledHint': + '비용 대시보드가 config에서 비활성화되어 있습니다. 다시 활성화하려면 config.toml에서 [cost.dashboard] enabled = true로 설정하세요.', + 'settings.costDashboard.subtitle': + '전체 스웜의 실시간 지출과 토큰 사용량입니다. 막대는 몇 초마다 자동으로 새로고침되며 페이지를 다시 로드할 필요가 없습니다.', + 'settings.costDashboard.summaryAriaLabel': '비용 요약 지표', + 'settings.costDashboard.lastSevenDays': '지난 7일', + 'settings.costDashboard.utilizationOf': '/', + 'settings.costDashboard.thisMonth': '이번 달', + 'settings.costDashboard.monthlyPaceHint': + '현재 일일 실행 속도(평균 × 30)를 기준으로 예상한 월간 지출입니다.', + 'settings.costDashboard.budgetLimitHint': + 'config.toml의 cost.monthly_limit_usd에서 읽은 월간 예산입니다.', + 'settings.costDashboard.dailyTarget': '일일 목표', + 'settings.costDashboard.today': '오늘', + 'settings.costDashboard.todayBadge': '오늘', + 'settings.costDashboard.unknownProvider': '—', + 'settings.costDashboard.justNow': '방금 전', + 'settings.costDashboard.secondsAgo': '{value}초 전', + 'settings.costDashboard.minutesAgo': '{value}분 전', + 'settings.costDashboard.hoursAgo': '{value}시간 전', + 'settings.costDashboard.daysAgo': '{value}일 전', + 'settings.costDashboard.updated': '업데이트됨', + 'settings.costDashboard.refresh': '새로고침', + 'settings.costDashboard.utcNote': '일자는 UTC 기준으로 묶입니다', + 'settings.costDashboard.stackedNote': '입력 + 출력 누적', + 'settings.costDashboard.modelBreakdownHint': '지난 7일 전체 집계입니다.', + 'settings.costDashboard.noDataHint': + '에이전트 메시지를 보내세요. 다음 제공업체 호출의 토큰 사용량이 약 10초 안에 차트에 표시됩니다.', + 'settings.search.title': '검색 엔진', + 'settings.search.menuDesc': + 'OpenHuman 관리 검색을 기본값으로 사용하거나 API 키로 자체 제공업체를 연결하세요.', + 'settings.search.description': + '에이전트가 사용할 검색 엔진을 선택하거나 검색 도구를 완전히 비활성화합니다. 관리형은 OpenHuman의 백엔드를 사용합니다(설정 불필요). 병렬, Brave, Querit은 API 키를 사용하여 내 컴퓨터에서 직접 실행됩니다.', + 'settings.search.engineAria': '검색 엔진', + 'settings.search.engineDisabledLabel': 'Disabled', + 'settings.search.engineDisabledDesc': + '에이전트 컨텍스트 및 사용 가능한 도구 목록에서 검색 도구를 제거합니다.', + 'settings.search.engineManagedLabel': 'OpenHuman 관리됨', + 'settings.search.engineManagedDesc': + '기본값입니다. OpenHuman 백엔드를 통해 라우팅되며 API 키가 필요하지 않습니다.', + 'settings.search.localManagedUnavailable': + '로컬 사용자는 OpenHuman 관리 검색을 사용할 수 없습니다. 웹 검색을 활성화하려면 자체 Parallel, Brave 또는 Querit API 키를 추가하세요.', + 'settings.search.engineParallelLabel': 'Parallel', + 'settings.search.engineParallelDesc': + '직접 Parallel API: 검색, 추출, 채팅, 리서치, 보강, 데이터셋 도구.', + 'settings.search.engineBraveLabel': 'Brave 검색', + 'settings.search.engineBraveDesc': '직접 Brave 검색 API: 웹, 뉴스, 이미지 및 비디오 도구.', + 'settings.search.engineQueritLabel': 'Querit', + 'settings.search.engineQueritDesc': + '직접 Querit API: 사이트, 시간 범위, 국가 및 언어 필터가 있는 웹 검색.', + 'settings.search.statusConfigured': '구성됨', + 'settings.search.statusNeedsKey': 'API 키 필요', + 'settings.search.fallbackToManaged': + '구성된 키가 없습니다. 키가 저장될 때까지 검색은 관리형으로 대체됩니다.', + 'settings.search.getApiKey': 'API 키 가져오기', + 'settings.search.save': '저장', + 'settings.search.clear': '지우기', + 'settings.search.show': '표시', + 'settings.search.hide': '숨기기', + 'settings.search.statusSaving': '저장…', + 'settings.search.statusSaved': '저장되었습니다.', + 'settings.search.statusError': '실패', + 'settings.search.parallelKeyLabel': 'Parallel API 키', + 'settings.search.braveKeyLabel': 'Brave 검색 API 키', + 'settings.search.queritKeyLabel': 'Querit API 키', + 'settings.search.placeholderStored': '•••••••(저장됨)', + 'settings.search.placeholderParallel': 'pk_...', + 'settings.search.placeholderBrave': 'BSA...', + 'settings.search.placeholderQuerit': 'Querit API 키', + 'settings.search.allowedSitesLabel': '허용된 웹사이트', + 'settings.search.allowedSitesHint': + '리서치 중 어시스턴트가 열고 읽을 수 있는 웹사이트입니다(한 줄에 호스트 하나, 예: reuters.com). 호스트에는 하위 도메인도 포함됩니다. 모든 웹 접근을 차단하려면 비워 두세요.', + 'settings.search.allowedSitesAllOn': + '어시스턴트가 모든 공개 웹사이트를 열 수 있습니다. 로컬 및 비공개 주소는 계속 차단됩니다.', + 'settings.search.allowedSitesPlaceholder': 'reuters.com\napnews.com\ngithub.com', + 'settings.search.allowedSitesSave': '웹사이트 저장', + 'settings.search.accessModeAria': '웹 접근 모드', + 'settings.search.accessAllowAll': '모두 허용', + 'settings.search.accessCustom': '사용자 정의', + 'settings.search.accessBlockAll': '모두 차단', + 'settings.search.accessBlockAllHint': + '모든 웹 접근이 차단됩니다. 어시스턴트는 어떤 웹사이트도 열거나 읽을 수 없습니다.', + 'settings.embeddings.title': '임베딩', + 'settings.embeddings.description': + '시맨틱 검색을 위해 메모리를 벡터로 변환할 임베딩 제공자를 선택하세요. 제공자, 모델 또는 차원을 변경하면 저장된 벡터가 무효화되며 전체 메모리 초기화가 필요합니다.', + 'settings.embeddings.providerAria': '임베딩 제공자', + 'settings.embeddings.statusConfigured': '구성됨', + 'settings.embeddings.statusNeedsKey': 'API 키 필요', + 'settings.embeddings.apiKeyLabel': '{provider} API 키', + 'settings.embeddings.placeholderStored': '•••••••(저장됨)', + 'settings.embeddings.placeholderKey': 'API 키를 붙여넣으세요…', + 'settings.embeddings.keyStoredEncrypted': 'API 키는 이 기기에 암호화되어 저장됩니다.', + 'settings.embeddings.show': '표시', + 'settings.embeddings.hide': '숨기기', + 'settings.embeddings.save': '저장', + 'settings.embeddings.clear': '지우기', + 'settings.embeddings.model': '모델', + 'settings.embeddings.dimensions': '차원', + 'settings.embeddings.customEndpoint': '사용자 정의 엔드포인트', + 'settings.embeddings.customModelPlaceholder': '모델 이름', + 'settings.embeddings.customDimsPlaceholder': '차원', + 'settings.embeddings.applyCustom': '적용', + 'settings.embeddings.testConnection': '연결 테스트', + 'settings.embeddings.testing': '테스트 중…', + 'settings.embeddings.testSuccess': '연결됨 — {dims} 차원', + 'settings.embeddings.testFailed': '실패: {error}', + 'settings.embeddings.saving': '저장 중…', + 'settings.embeddings.saved': '저장됨.', + 'settings.embeddings.errorPrefix': '실패', + 'settings.embeddings.wipeTitle': '메모리 벡터를 초기화하시겠습니까?', + 'settings.embeddings.wipeBody': + '임베딩 제공자, 모델 또는 차원을 변경하면 저장된 모든 메모리 벡터가 삭제됩니다. 검색이 다시 작동하려면 메모리를 재구축해야 합니다. 이 작업은 취소할 수 없습니다.', + 'settings.embeddings.cancel': '취소', + 'settings.embeddings.confirmWipe': '삭제 및 적용', + 'settings.embeddings.setupTitle': '{provider} 설정', + 'settings.embeddings.saveAndSwitch': '저장 및 전환', + 'settings.embeddings.optional': '선택사항', + 'settings.embeddings.vectorSearchDisabled': + '벡터 검색이 비활성화되어 있습니다. 메모리 회상은 의미 순위 없이 키워드 매칭과 최신성만 사용합니다.', + 'settings.embeddings.clearKey': 'API 키 삭제', + 'pages.settings.ai.embeddings': '임베딩', + 'pages.settings.ai.embeddingsDesc': '메모리 검색을 위한 벡터 인코딩 모델', + 'mcp.alphaBadge': '알파', + 'mcp.alphaBannerText': + 'MCP 서버 지원은 초기 알파 단계입니다. Smithery 레지스트리, 설치 흐름 및 도구 연결은 릴리스 사이에 오작동하거나 형태가 바뀔 수 있습니다.', + 'mcp.toolList.noTools': '사용 가능한 도구가 없습니다.', + 'mcp.setup.secretDialog.title': 'MCP 설정 - 비밀번호 입력', + 'mcp.setup.secretDialog.bodyPrefix': 'MCP 설정 에이전트에는 다음이 필요합니다.', + 'mcp.setup.secretDialog.bodySuffix': + '. 입력한 값은 코어 프로세스로 직접 전송되며 AI 대화에는 절대 들어가지 않습니다.', + 'mcp.setup.secretDialog.inputLabel': '값', + 'mcp.setup.secretDialog.inputPlaceholder': '여기에 붙여넣으세요.', + 'mcp.setup.secretDialog.show': '표시', + 'mcp.setup.secretDialog.hide': '숨기기', + 'mcp.setup.secretDialog.submit': '제출', + 'mcp.setup.secretDialog.cancel': '취소', + 'mcp.setup.secretDialog.submitting': '제출 중…', + 'mcp.setup.secretDialog.errorPrefix': '제출 실패:', + 'mcp.setup.secretDialog.privacyNote': + '로컬 MCP 비밀 테이블에 암호화되어 저장됩니다. 로그에 남기거나 모델로 전송하지 않습니다.', + 'devices.betaBadge': '베타', + 'devices.betaText': + '이 기능은 현재 베타 버전입니다. iOS 기기를 이 OpenHuman과 페어링하여 원격 클라이언트로 사용할 수 있습니다.', + 'devices.comingSoonDescription': + '기기 페어링이 곧 제공됩니다. 이 페이지에서 iPhone을 페어링하고 연결된 기기를 관리할 수 있게 됩니다.', + 'devices.title': '장치', + 'devices.pairIphone': 'iPhone 페어링', + 'devices.noPaired': '페어링된 장치가 없습니다.', + 'devices.emptyState': 'iPhone에서 QR code을 스캔하여 이 OpenHuman 세션에 연결하세요.', + 'devices.devicePairedTitle': '기기 페어링됨', + 'devices.devicePairedMessage': 'iPhone이 성공적으로 연결되었습니다.', + 'devices.deviceRevokedTitle': '장치가 취소되었습니다.', + 'devices.deviceRevokedMessage': '{label}이(가) 제거되었습니다.', + 'devices.revokeFailedTitle': '취소 실패', + 'devices.online': '온라인', + 'devices.offline': '오프라인', + 'devices.lastSeenNever': '없음', + 'devices.lastSeenNow': '방금', + 'devices.lastSeenMinutes': '{count}분 전', + 'devices.lastSeenHours': '{count}시간 전', + 'devices.lastSeenDays': '{count}일 전', + 'devices.revoke': '취소', + 'devices.revokeAria': '{label} 취소', + 'devices.confirmRevokeTitle': '장치를 취소하시겠습니까?', + 'devices.confirmRevokeBody': + '{label}의 연결이 더 이상 허용되지 않습니다. 이 작업은 취소할 수 없습니다.', + 'devices.loadFailed': '장치를 로드하지 못했습니다: {message}', + 'devices.pairModal.title': 'iPhone 페어링', + 'devices.pairModal.loading': '페어링 코드 생성 중…', + 'devices.pairModal.instructions': 'iPhone에서 OpenHuman 앱을 열고 이 코드를 스캔하세요.', + 'devices.pairModal.expiresIn': '코드는 ~{count}분 후에 만료됩니다.', + 'devices.pairModal.expiresInPlural': '코드는 ~{count}분 후에 만료됩니다.', + 'devices.pairModal.showDetails': '세부 정보 표시', + 'devices.pairModal.hideDetails': '세부 정보 숨기기', + 'devices.pairModal.channelId': '채널 ID', + 'devices.pairModal.pairingUrl': '페어링 URL', + 'devices.pairModal.expiredTitle': 'QR code 만료', + 'devices.pairModal.expiredBody': '페어링을 계속하려면 새 코드를 생성하세요.', + 'devices.pairModal.generateNewCode': '새 코드 생성', + 'devices.pairModal.successTitle': 'iPhone과 페어링됨', + 'devices.pairModal.autoClose': '자동으로 종료 중…', + 'devices.pairModal.errorPrefix': '페어링 생성 실패: {message}', + 'devices.pairModal.errorTitle': '문제가 발생했습니다.', + 'devices.pairModal.copyUrl': '복사', + 'mcp.catalog.searchAria': 'Smithery 카탈로그 검색', + 'mcp.catalog.searchPlaceholder': 'Smithery 카탈로그 검색...', + 'mcp.catalog.loadFailed': '카탈로그를 로드하지 못했습니다.', + 'mcp.catalog.noResults': '서버를 찾을 수 없습니다.', + 'mcp.catalog.noResultsFor': '"{query}"에 대한 서버를 찾을 수 없습니다.', + 'mcp.catalog.loadMore': '추가 로드', + 'mcp.configAssistant.title': '구성 도우미', + 'mcp.configAssistant.empty': '구성, 필수 환경 변수 또는 설정 단계에 대해 문의하세요.', + 'mcp.configAssistant.suggestedValues': '제안 값:', + 'mcp.configAssistant.valueHidden': '(값 숨김)', + 'mcp.configAssistant.applySuggested': '제안 값 적용', + 'mcp.configAssistant.reinstallHint': '해당 값을 적용하려면 해당 값을 다시 설치하세요.', + 'mcp.configAssistant.thinking': '생각 중...', + 'mcp.configAssistant.inputPlaceholder': '질문하기(보내려면 Enter, 줄 바꿈하려면 Shift+Enter)', + 'mcp.configAssistant.send': '보내기', + 'mcp.configAssistant.failedResponse': '응답을 받지 못했습니다.', + 'mcp.toolList.availableSingular': '{count} 도구 사용 가능', + 'mcp.toolList.availablePlural': '{count} 도구 사용 가능', + 'mcp.toolList.tryTool': '시도', + 'mcp.toolList.tryToolAria': '{name} 실행 플레이그라운드 열기', + 'mcp.playground.title': '{name} 실행', + 'mcp.playground.close': '플레이그라운드 닫기', + 'mcp.playground.inputSchema': '입력 스키마', + 'mcp.playground.argsLabel': '인수(JSON)', + 'mcp.playground.argsHelp': '입력 스키마와 일치하는 JSON을 입력하세요. 빈 입력은 {}로 처리됩니다.', + 'mcp.playground.runShortcut': '실행하려면 ⌘/Ctrl + Enter', + 'mcp.playground.format': '서식 지정', + 'mcp.playground.invalidJson': '유효하지 않은 JSON', + 'mcp.playground.run': '도구 실행', + 'mcp.playground.running': '실행 중…', + 'mcp.playground.result': '결과', + 'mcp.playground.resultError': '도구가 오류를 반환했습니다.', + 'mcp.playground.copyResult': '결과 복사', + 'mcp.playground.copied': '복사됨', + 'mcp.playground.history': '기록', + 'mcp.playground.historyEmpty': '이 세션에는 아직 호출이 없습니다.', + 'mcp.playground.historyLoad': '불러오기', + 'mcp.playground.unexpectedError': '도구 호출 중 예기치 않은 오류가 발생했습니다.', + 'mcp.catalog.deployed': '배포됨', + 'mcp.catalog.installCount': '{count} 설치', + 'app.update.dismissNotification': '업데이트 알림 닫기', + 'bootCheck.rpcAuthSuffix': 'RPC마다.', + 'app.localAiDownload.expandAria': '다운로드 진행률 확장', + 'app.localAiDownload.collapseAria': '다운로드 진행률 축소', + 'app.localAiDownload.dismissAria': '다운로드 알림 닫기', + 'mobile.nav.ariaLabel': '모바일 탐색', + 'progress.stepsAria': '진행 단계', + 'progress.stepAria': '{total}의 {current} 단계', + 'workspace.vaultsTitle': '지식 저장소', + 'workspace.vaultsDesc': '로컬 폴더를 가리킵니다. 파일은 청크로 분할되어 메모리에 미러링됩니다.', + 'calls.title': '통화', + 'calls.comingSoonBody': 'AI 지원 통화가 곧 제공될 예정입니다. 계속 지켜봐 주시기 바랍니다.', + 'art.rotatingTetrahedronAria': '회전하는 역사면체 우주선', + 'mcp.installed.title': '설치됨', + 'mcp.installed.browseCatalog': '카탈로그 찾아보기', + 'mcp.installed.empty': '아직 MCP 서버가 설치되지 않았습니다.', + 'mcp.installed.toolSingular': '{count} 도구', + 'mcp.installed.toolPlural': '{count} 도구', + 'mcp.health.title': '상태', + 'mcp.health.summaryAria': 'MCP 연결 상태 요약', + 'mcp.health.connectedCount': '{count}개 연결됨', + 'mcp.health.connectingCount': '{count}개 연결 중', + 'mcp.health.errorCount': '{count}개 오류', + 'mcp.health.disconnectedCount': '{count}개 유휴', + 'mcp.health.retryAll': '모두 다시 시도({count})', + 'mcp.health.retryAllAria': '오류가 발생한 MCP 서버 {count}개 모두 다시 시도', + 'mcp.health.disconnectAll': '모두 연결 끊기({count})', + 'mcp.health.disconnectAllAria': '연결된 MCP 서버 {count}개 모두 연결 끊기', + 'mcp.health.disconnectConfirm.title': '모든 MCP 서버 연결을 끊으시겠습니까?', + 'mcp.health.disconnectConfirm.body': + '현재 연결된 MCP 서버 {count}개의 연결을 끊습니다. 설치된 구성과 비밀 값은 유지되며 나중에 어떤 서버든 다시 연결할 수 있습니다.', + 'mcp.health.disconnectConfirm.cancel': '취소', + 'mcp.health.disconnectConfirm.confirm': '모두 연결 끊기', + 'mcp.health.opErrorGeneric': '일괄 작업에 실패했습니다. 로그를 확인하세요.', + 'mcp.health.bulkPartialFailure': + '{total}개 서버 중 {failed}개가 실패했습니다. 로그를 확인하세요.', + 'mcp.installed.search.landmarkAria': '설치된 MCP 서버 검색', + 'mcp.installed.search.inputAria': '이름으로 설치된 MCP 서버 필터링', + 'mcp.installed.search.placeholder': '서버 필터링…', + 'mcp.installed.search.clearAria': '필터 지우기', + 'mcp.installed.search.countMatches': '{total}개 중 {shown}개 서버', + 'mcp.installed.search.noMatches': '"{query}"와 일치하는 서버가 없습니다.', + 'mcp.inventory.openButton': '인벤토리', + 'mcp.inventory.openAria': '공유 가능한 MCP 인벤토리 패널 열기', + 'mcp.inventory.title': '공유 가능한 MCP 인벤토리', + 'mcp.inventory.subtitle': + '설치된 MCP 서버를 비밀 값이 없는 휴대용 매니페스트로 내보내거나 팀원의 매니페스트를 가져옵니다. 비밀 env 값은 포함되거나 가져오지 않습니다.', + 'mcp.inventory.close': '인벤토리 패널 닫기', + 'mcp.inventory.tablistAria': '인벤토리 섹션', + 'mcp.inventory.tab.export': '내보내기', + 'mcp.inventory.tab.import': '가져오기', + 'mcp.inventory.export.empty': + '아직 설치된 MCP 서버가 없어 내보낼 항목이 없습니다. 먼저 카탈로그에서 서버를 설치하세요.', + 'mcp.inventory.export.privacyTitle': '이 매니페스트에 포함되는 내용', + 'mcp.inventory.export.privacyBody': + '서버 이름, 정규 이름, env 변수 KEY NAMES 및 비밀 값이 아닌 구성만 포함됩니다. 비밀 값, 기기 식별자 및 설치별 타임스탬프는 의도적으로 제거됩니다.', + 'mcp.inventory.export.serverCount': '이 매니페스트의 서버 {count}개', + 'mcp.inventory.export.copy': '복사', + 'mcp.inventory.export.copied': '복사됨', + 'mcp.inventory.export.copyAria': '매니페스트 JSON을 클립보드에 복사', + 'mcp.inventory.export.download': '다운로드', + 'mcp.inventory.export.downloadAria': '매니페스트를 JSON 파일로 다운로드', + 'mcp.inventory.import.trustTitle': '가져온 매니페스트를 신뢰할 수 없는 코드로 취급', + 'mcp.inventory.import.trustBody': + 'MCP 서버는 에이전트에 권한을 부여하는 도구입니다. 신뢰하는 출처의 매니페스트만 가져오세요. 각 설치에는 명시적인 클릭이 필요하며 자동 설치되는 항목은 없습니다.', + 'mcp.inventory.import.pasteLabel': '매니페스트 JSON 붙여넣기', + 'mcp.inventory.import.pastePlaceholder': + '여기에 매니페스트를 붙여넣거나 아래에서 .json 파일을 업로드하세요.', + 'mcp.inventory.import.preview': '미리 보기', + 'mcp.inventory.import.clear': '지우기', + 'mcp.inventory.import.uploadFile': '또는 .json 파일 업로드', + 'mcp.inventory.import.uploadFileAria': '매니페스트 .json 파일 업로드', + 'mcp.inventory.import.fileTooLarge': '파일이 너무 큽니다(1MB 초과). 로드를 거부합니다.', + 'mcp.inventory.import.fileReadFailed': '파일을 읽을 수 없습니다.', + 'mcp.inventory.import.parseErrorPrefix': '매니페스트를 파싱할 수 없습니다:', + 'mcp.inventory.import.previewHeading': '미리 보기', + 'mcp.inventory.import.previewCounts': '서버 {total}개 - 신규 {newly}개, 이미 설치됨 {already}개', + 'mcp.inventory.import.previewEmpty': '매니페스트에 서버가 없습니다.', + 'mcp.inventory.import.exportedFrom': '{exporter}에서 내보냄', + 'mcp.inventory.import.exportedAt': '{when}에', + 'mcp.inventory.import.statusNew': '신규', + 'mcp.inventory.import.statusAlreadyInstalled': '이미 설치됨', + 'mcp.inventory.import.envKeysLabel': 'env 키', + 'mcp.inventory.import.install': '설치', + 'mcp.inventory.import.installAria': '이 매니페스트에서 {name} 설치', + 'mcp.inventory.import.skipped': '건너뜀', + 'mcp.inventory.parseError.empty': '매니페스트가 비어 있습니다.', + 'mcp.inventory.parseError.invalidJson': '유효하지 않은 JSON입니다.', + 'mcp.inventory.parseError.rootNotObject': '매니페스트 루트는 JSON 객체여야 합니다.', + 'mcp.inventory.parseError.unsupportedSchema': + '지원되지 않는 매니페스트 스키마입니다. 이 파일은 호환되는 내보내기 도구에서 생성되지 않았습니다.', + 'mcp.inventory.parseError.missingExportedAt': '`exported_at` 필드가 없거나 유효하지 않습니다.', + 'mcp.inventory.parseError.missingExportedBy': '`exported_by` 필드가 없거나 유효하지 않습니다.', + 'mcp.inventory.parseError.invalidServers': '`servers` 배열이 없거나 유효하지 않습니다.', + 'mcp.inventory.parseError.serverNotObject': '서버 항목이 객체가 아닙니다.', + 'mcp.inventory.parseError.serverMissingQualifiedName': '서버 항목에 qualified_name이 없습니다.', + 'mcp.inventory.parseError.serverMissingDisplayName': '서버 항목에 display_name이 없습니다.', + 'mcp.inventory.parseError.serverEnvKeysNotArray': + '서버 항목의 env_keys 필드가 문자열 배열이 아닙니다.', + 'mcp.inventory.parseError.serverContainsEnv': + '서버 항목에 `env` 값 맵이 포함되어 있습니다. 가져오기를 거부합니다. 매니페스트에는 env_keys(이름)만 포함되어야 하며 비밀 값은 포함할 수 없습니다.', + 'mcp.inventory.parseError.duplicateQualifiedName': + '매니페스트에서 중복된 qualified_name을 찾았습니다. 각 서버는 최대 한 번만 나타나야 합니다.', + 'mcp.tab.loading': 'MCP 서버 로드 중...', + 'mcp.tab.emptyDetail': '서버를 선택하거나 카탈로그를 찾아보세요.', + 'mcp.install.loadingDetail': '서버 세부정보 로드 중...', + 'mcp.install.back': '뒤로 가기', + 'mcp.install.title': '{name} 설치', + 'mcp.install.requiredEnv': '필수 환경 변수', + 'mcp.install.enterValue': '{key} 입력', + 'mcp.install.show': '표시', + 'mcp.install.hide': '숨기기', + 'mcp.install.configLabel': '구성(선택적 JSON)', + 'mcp.install.configPlaceholder': '{"key": "value"}', + 'mcp.install.missingRequired': '"{key}"이 필요합니다.', + 'mcp.install.invalidJson': '구성 JSON이 유효한 JSON이 아닙니다.', + 'mcp.install.failedDetail': '서버 세부 정보를 로드하지 못했습니다.', + 'mcp.install.failedInstall': '설치에 실패했습니다.', + 'mcp.install.button': '설치', + 'mcp.install.installing': '설치 중...', + 'mcp.detail.suggestedEnvReady': '제안된 환경 값이 준비되었습니다.', + 'mcp.detail.suggestedEnvBody': + '제안 값을 적용하려면 이 서버를 해당 값으로 다시 설치하세요: {keys}', + 'mcp.detail.connect': '연결', + 'mcp.detail.connecting': '연결 중...', + 'mcp.detail.disconnect': '연결 끊기', + 'mcp.detail.hideAssistant': '보조 숨기기', + 'mcp.detail.helpConfigure': '구성 도와주세요', + 'mcp.detail.confirmUninstall': '제거를 확인하시겠습니까?', + 'mcp.detail.confirmUninstallAction': '예, 제거합니다.', + 'mcp.detail.uninstall': '제거', + 'mcp.detail.envVars': '환경 변수', + 'mcp.detail.tools': '도구', + 'onboarding.skipForNow': '지금 건너뛰기', + 'onboarding.localAI.continueWithCloud': '클라우드 계속하기', + 'onboarding.localAI.useLocalAnyway': '어쨌든 로컬 AI 사용(기기에 권장되지 않음)', + 'onboarding.localAI.useLocalInstead': '대신 로컬 AI 사용(지금 Ollama 연결)', + 'onboarding.localAI.setupIssue': '로컬 AI 설정에 문제가 발생했습니다.', + 'autonomy.title': '에이전트 자율성', + 'autonomy.maxActionsLabel': '시간당 최대 작업', + 'autonomy.maxActionsHelp': + '에이전트가 롤링 1시간 동안 실행할 수 있는 최대 도구 작업 수입니다. 새 값은 다음 채팅부터 적용됩니다. 크론 작업 및 채널 리스너는 OpenHuman을 재시작할 때까지 현재 제한을 유지합니다.', + 'autonomy.statusSaving': '저장 중…', + 'autonomy.statusSaved': '저장되었습니다.', + 'autonomy.statusFailed': '실패', + 'autonomy.unlimitedNote': '무제한 — 속도 제한이 비활성화되었습니다.', + 'autonomy.invalidIntegerMsg': "양의 정수여야 합니다 (제한 없음은 '무제한' 프리셋을 사용하세요).", + 'autonomy.presetUnlimited': '무제한(기본값)', + 'triggers.toggleFailed': '{trigger}에 대해 {action} 실패: {message}', + 'settings.ai.overview': 'AI 시스템 개요', + 'settings.ai.configStatus': '구성 상태', + 'settings.ai.fallbackMode': '대체 모드', + 'settings.ai.loadedFromRuntime': '런타임에서 로드됨', + 'settings.ai.loadingDuration': '로드 시간', + 'settings.ai.localRuntime': '로컬 모델 런타임', + 'settings.ai.openManager': '관리자 열기', + 'settings.ai.retryDownload': '다운로드 다시 시도', + 'settings.ai.state': '상태', + 'settings.ai.targetModel': '대상 모델', + 'settings.ai.download': '다운로드', + 'settings.ai.localModelUnavailable': '로컬 모델 상태를 사용할 수 없습니다.', + 'settings.ai.soulConfig': 'SOUL 페르소나 구성', + 'settings.ai.refreshing': '새로고침 중...', + 'settings.ai.refreshSoul': 'SOUL 새로고침', + 'settings.ai.loadingSoul': 'SOUL 구성을 불러오는 중...', + 'settings.ai.identity': '정체성', + 'settings.ai.personality': '성격', + 'settings.ai.safetyRules': '안전 규칙', + 'settings.ai.source': '출처', + 'settings.ai.loaded': '로드됨', + 'settings.ai.toolsConfig': 'TOOLS 구성', + 'settings.ai.refreshTools': 'TOOLS 새로고침', + 'settings.ai.toolsAvailable': '사용 가능한 도구', + 'settings.ai.tools': '도구', + 'settings.ai.activeSkills': '활성 스킬', + 'settings.ai.skills': '스킬', + 'settings.ai.skillsOverview': '스킬 개요', + 'settings.ai.refreshingAll': '모두 새로고침 중...', + 'settings.ai.refreshAll': '모든 AI 구성 새로고침', + 'settings.notifications.suppressAll': '모든 알림 억제', + 'settings.notifications.suppressAllDesc': + '포커스 상태와 관계없이 내장 앱의 모든 OS 알림 토스트를 차단합니다.', + 'settings.notifications.toggleDnd': '방해 금지 전환', + 'settings.notifications.categories': '카테고리', + 'settings.notifications.categoryFooter': + '카테고리를 비활성화하면 해당 유형의 새 알림이 알림 센터에 표시되지 않습니다. 기존 알림은 삭제될 때까지 남아 있습니다.', + 'settings.billing.movedToWeb': '결제가 웹으로 이동됨', + 'settings.billing.openDashboard': '결제 대시보드 열기', + 'settings.billing.movedToWebDesc': + '구독 변경, 결제 수단, 크레딧 및 인보이스는 이제 웹의 TinyHumans에서 관리됩니다.', + 'settings.billing.backToSettings': '설정으로 돌아가기', + 'settings.billing.openingBrowser': '브라우저를 여는 중...', + 'settings.billing.browserNotOpen': '브라우저가 열리지 않았다면 위 버튼을 사용하세요.', + 'settings.billing.browserOpenFailed': '브라우저를 자동으로 열 수 없습니다. 위 버튼을 사용하세요.', + 'settings.tools.chooseCapabilities': + 'OpenHuman이 사용자를 대신해 사용할 수 있는 기능을 선택하세요.', + 'settings.tools.saveChanges': '변경 사항 저장', + 'settings.tools.preferencesSaved': '기본 설정이 저장되었습니다', + 'settings.tools.saveFailed': '기본 설정 저장에 실패했습니다. 다시 시도하세요.', + 'settings.screenAwareness.mode': '모드', + 'settings.screenAwareness.allExceptBlacklist': '블랙리스트 제외 모두', + 'settings.screenAwareness.whitelistOnly': '화이트리스트만', + 'settings.screenAwareness.screenMonitoring': '화면 모니터링', + 'settings.screenAwareness.saveSettings': '설정 저장', + 'settings.screenAwareness.session': '세션', + 'settings.screenAwareness.status': '상태', + 'settings.screenAwareness.active': '활성', + 'settings.screenAwareness.stopped': '중지됨', + 'settings.screenAwareness.remaining': '남은 시간', + 'settings.screenAwareness.startSession': '세션 시작', + 'settings.screenAwareness.stopSession': '세션 중지', + 'settings.screenAwareness.analyzeNow': '지금 분석', + 'settings.screenAwareness.macosOnly': + '화면 인식 데스크톱 캡처 및 권한 제어는 현재 macOS에서만 지원됩니다.', + 'connections.comingSoon': '곧 제공 예정', + 'connections.setUp': '설정', + 'connections.configured': '구성됨', + 'connections.unavailable': '사용할 수 없음', + 'connections.checking': '확인 중…', + 'connections.walletConfigured': + '로컬 EVM, BTC, Solana 및 Tron ID가 복구 문구에서 구성되었습니다.', + 'connections.walletReady': '하나의 복구 문구에서 로컬 EVM, BTC, Solana 및 Tron ID를 설정합니다.', + 'connections.walletError': '지갑 상태를 확인할 수 없습니다. 복구 문구 패널에서 다시 시도하세요.', + 'connections.walletChecking': '지갑 상태 확인 중...', + 'connections.walletIdentities': '지갑 ID', + 'connections.walletDerived': '복구 문구에서 로컬로 파생되며 안전한 메타데이터로만 저장됩니다.', + 'connections.privacySecurity': '개인정보 및 보안', + 'connections.privacySecurityDesc': + '모든 데이터와 자격 증명은 무데이터 보존 정책으로 로컬에 저장됩니다. 사용자의 정보는 암호화되며 제3자와 절대 공유되지 않습니다.', + 'channels.status.connecting': '연결 중', + 'channels.status.notConfigured': '구성되지 않음', + 'channels.noActiveRoute': '활성 경로 없음', + 'channels.activeRoute': '활성 경로', + 'channels.loadingDefinitions': '채널 정의를 불러오는 중...', + 'channels.channelConnections': '채널 연결', + 'channels.configureAuthModes': '각 메시징 채널의 인증 모드를 구성합니다.', + 'channels.configNotAvailable': '구성을 사용할 수 없음:', + 'channels.channel': '채널', + 'devOptions.coreModeNotSet': '코어 모드: 설정되지 않음', + 'devOptions.coreModeNotSetDesc': + '부트 체크 선택기가 아직 확인되지 않았습니다. 선택기에서 모드 전환을 사용하여 로컬 또는 클라우드를 선택하세요.', + 'devOptions.local': '로컬', + 'devOptions.embeddedCoreSidecar': '내장 코어 사이드카', + 'devOptions.sidecarSpawned': '앱 실행 시 Tauri 셸에 의해 프로세스 내부에서 생성됩니다.', + 'devOptions.cloud': '클라우드', + 'devOptions.remoteCoreRpc': '원격 코어 RPC', + 'devOptions.token': '토큰', + 'devOptions.tokenNotSet': '설정되지 않음 — RPC가 401을 반환합니다', + 'devOptions.triggerSentryTest': 'Sentry 테스트 트리거(스테이징)', + 'devOptions.triggerSentryTestDesc': + 'Sentry 파이프라인을 확인하기 위해 태그가 지정된 오류를 발생시킵니다. 이슈 #1072 — 확인 후 제거.', + 'devOptions.sendTestEvent': '테스트 이벤트 보내기', + 'devOptions.sending': '보내는 중…', + 'devOptions.eventSent': '이벤트 전송됨', + 'devOptions.sentryDisabled': '(id 없음 — 이 빌드에서 센트리가 비활성화되었습니다.)', + 'devOptions.failed': '실패', + 'devOptions.appLogs': '앱 로그', + 'devOptions.appLogsDesc': + '일별 롤링 로그 파일이 들어 있는 폴더를 엽니다. 문제를 보고할 때 가장 최근 파일을 첨부하세요.', + 'devOptions.openLogsFolder': '로그 폴더 열기', + 'mnemonic.phraseSaved': '복구 문구 저장됨', + 'mnemonic.walletReady': '멀티체인 지갑 ID가 준비되었습니다. 설정으로 돌아가는 중...', + 'mnemonic.writeDownWords': '다음 단어들을 적어 두세요', + 'mnemonic.wordsInOrder': + '단어를 순서대로 적어 안전한 곳에 보관하세요. 이 문구는 로컬 암호화 키와 EVM, BTC, Solana 및 Tron 지갑 ID를 보호합니다.', + 'mnemonic.cannotRecover': + '이 문구는 분실하면 복구할 수 없으며 기기에서만 완전히 로컬로 유지되어야 합니다.', + 'mnemonic.copyToClipboard': '클립보드에 복사', + 'mnemonic.alreadyHavePhrase': '이미 복구 문구가 있습니다', + 'mnemonic.consentSaved': '이 문구를 저장했으며 로컬 지갑 설정에 사용하는 데 동의합니다', + 'mnemonic.enterPhraseToRestore': + '로컬 지갑 ID를 복원하려면 아래에 복구 문구를 입력하거나 전체 문구를 아무 입력란에 붙여넣으세요(새 백업은 12단어, 이전 버전의 24단어 문구도 작동합니다).', + 'mnemonic.words': '단어', + 'mnemonic.validPhrase': '유효한 복구 문구', + 'mnemonic.generateNewPhrase': '대신 새 복구 문구 생성', + 'mnemonic.securingData': '데이터 보호 중...', + 'mnemonic.saveRecoveryPhrase': '복구 문구 저장', + 'mnemonic.userNotLoaded': + '사용자가 로드되지 않았습니다. 다시 로그인하거나 페이지를 새로고침하세요.', + 'mnemonic.invalidPhrase': '유효하지 않은 복구 문구입니다. 단어를 확인하고 다시 시도하세요.', + 'mnemonic.somethingWentWrong': '문제가 발생했습니다. 다시 시도해 주세요.', + 'team.failedToCreate': '팀 생성에 실패했습니다', + 'team.invalidInviteCode': '유효하지 않거나 만료된 초대 코드입니다', + 'team.failedToSwitch': '팀 전환에 실패했습니다', + 'team.failedToLeave': '팀 나가기에 실패했습니다', + 'team.role.owner': '소유자', + 'team.role.admin': '관리자', + 'team.role.billingManager': '결제 관리자', + 'team.role.member': '멤버', + 'team.active': '활성', + 'team.personalTeam': '개인 팀', + 'team.manageTeam': '팀 관리', + 'team.switching': '전환 중...', + 'team.switch': '전환', + 'team.leaving': '나가는 중...', + 'team.leave': '나가기', + 'team.yourTeams': '내 팀', + 'team.createNewTeam': '새 팀 생성', + 'team.teamName': '팀 이름', + 'team.creating': '생성 중...', + 'team.joinExistingTeam': '기존 팀 참가', + 'team.inviteCode': '초대 코드', + 'team.joining': '참가 중...', + 'team.join': '참가', + 'team.leaveTeam': '팀 나가기', + 'team.confirmLeave': '정말로 나가시겠습니까', + 'team.leaveWarning': + '팀과 모든 팀 리소스에 대한 접근 권한을 잃게 됩니다. 다시 참가하려면 새 초대가 필요합니다.', + 'team.management': '팀 관리', + 'team.notFound': '팀을 찾을 수 없습니다', + 'team.accessDenied': '접근이 거부되었습니다', + 'team.members': '멤버', + 'team.membersDesc': '팀 구성원 및 역할 관리', + 'team.invites': '초대', + 'team.invitesDesc': '초대 코드 생성 및 관리', + 'team.settings': '팀 설정', + 'team.settingsDesc': '팀 이름 및 설정 편집', + 'team.editSettings': '팀 설정 편집', + 'team.enterName': '팀 이름 입력', + 'team.saving': '저장 중...', + 'team.saveChanges': '저장 변경 사항', + 'team.delete': '팀 삭제', + 'team.deleteDesc': '이 팀을 영구적으로 삭제합니다.', + 'team.deleting': '삭제 중...', + 'team.failedToUpdate': '팀 업데이트 실패', + 'team.failedToDelete': '팀 삭제 실패', + 'team.manageTitle': '{name} 관리', + 'team.planCreated': '{plan} 계획 • {date} 생성됨', + 'team.confirmDelete': '{name}을(를) 삭제하시겠습니까?', + 'team.deleteWarning': '이 작업은 취소할 수 없습니다. 모든 팀 데이터가 영구적으로 제거됩니다.', + 'voice.title': '음성 받아쓰기', + 'voice.settings': '음성 설정', + 'voice.settingsDesc': '핫키를 길게 눌러 받아쓰기하고 활성 입력란에 텍스트를 삽입합니다.', + 'voice.hotkey': '핫키', + 'voice.activationMode': '활성화 모드', + 'voice.tapToToggle': '탭하여 전환', + 'voice.writingStyle': '작성 스타일', + 'voice.verbatimTranscription': '그대로 전사', + 'voice.naturalCleanup': '자연스럽게 정리', + 'voice.autoStart': '코어와 함께 음성 서버 자동 시작', + 'voice.customDictionary': '사용자 지정 사전', + 'voice.customDictionaryDesc': '이름, 기술 용어, 도메인 단어를 추가하여 인식 정확도를 향상합니다.', + 'voice.addWord': '단어 추가...', + 'voice.sttDisabled': '로컬 STT 모델이 다운로드되고 준비될 때까지 음성 받아쓰기가 비활성화됩니다.', + 'voice.openLocalAiModel': '로컬 AI 모델 열기', + 'voice.serverRestarted': '새 설정으로 음성 서버가 다시 시작되었습니다.', + 'voice.settingsSaved': '음성 설정이 저장되었습니다.', + 'voice.serverStarted': '음성 서버가 시작되었습니다.', + 'voice.serverStopped': '음성 서버가 중지되었습니다.', + 'voice.saveVoiceSettings': '음성 설정 저장', + 'voice.startVoiceServer': '음성 서버 시작', + 'voice.stopVoiceServer': '음성 서버 중지', + 'voice.debugTitle': '음성 디버그', + 'voice.failedToLoadSettings': '음성 설정 로드 실패', + 'voice.failedToSaveSettings': '음성 설정 저장 실패', + 'voice.failedToStartServer': '음성 서버 시작 실패', + 'voice.failedToStopServer': '음성 서버를 중지하지 못했습니다.', + 'voice.sttDisabledPrefix': + '로컬 STT 모델이 다운로드될 때까지 음성 받아쓰기를 사용할 수 없습니다. 다음을 사용하세요:', + 'voice.sttDisabledSuffix': '섹션을 사용하세요.', + 'voice.debug.failedToLoadVoiceDebugData': '음성 디버그 데이터를 로드하지 못했습니다.', + 'voice.debug.settingsSaved': '디버그 설정이 저장되었습니다.', + 'voice.debug.failedToSaveSettings': '음성 설정을 저장하지 못했습니다.', + 'voice.debug.runtimeStatus': '런타임 상태', + 'voice.debug.runtimeStatusDesc': '음성 서버 및 음성-텍스트 변환 엔진의 실시간 진단입니다.', + 'voice.debug.server': '서버', + 'voice.debug.unavailable': '사용할 수 없음', + 'voice.debug.ready': '준비됨', + 'voice.debug.notReady': '준비되지 않음', + 'voice.debug.hotkey': '단축키', + 'voice.debug.notAvailable': '해당 없음', + 'voice.debug.mode': '모드', + 'voice.debug.transcriptions': '기록', + 'voice.debug.serverError': '서버 오류', + 'voice.debug.advancedSettings': '고급 설정', + 'voice.debug.advancedSettingsDesc': '녹음 및 무음 감지를 위한 저수준 조정 매개변수입니다.', + 'voice.debug.minimumRecordingSeconds': '최소 녹음 시간(초)', + 'voice.debug.silenceThreshold': '무음 임계값(RMS)', + 'voice.debug.silenceThresholdDesc': + '이 값보다 에너지가 낮은 녹음은 무음으로 처리되어 건너뜁니다. 낮을수록 더 민감합니다.', + 'voice.providers.saved': '음성 제공업체가 저장되었습니다.', + 'voice.providers.failedToSave': '음성 제공자를 저장하지 못했습니다.', + 'voice.providers.ellipsis': '…', + 'voice.providers.installing': '설치 중', + 'voice.providers.installingBusy': '설치 중...', + 'voice.providers.reinstallLocally': '로컬로 다시 설치', + 'voice.providers.repair': '복구', + 'voice.providers.retryLocally': '로컬로 다시 시도', + 'voice.providers.installLocally': '로컬로 설치', + 'voice.providers.whisperReady': '속삭임이 준비되었습니다.', + 'voice.providers.whisperInstallStarted': 'Whisper 설치가 시작되었습니다.', + 'voice.providers.queued': '대기 중입니다.', + 'voice.providers.failedToInstallWhisper': 'Whisper를 설치하지 못했습니다.', + 'voice.providers.piperReady': 'Piper가 준비되었습니다.', + 'voice.providers.piperInstallStarted': 'Piper 설치가 시작되었습니다.', + 'voice.providers.failedToInstallPiper': 'Piper를 설치하지 못했습니다.', + 'voice.providers.title': '음성 공급자', + 'voice.providers.desc': + '전사 및 합성이 실행되는 위치를 선택하세요. 로컬 설치 버튼을 사용하여 바이너리 및 모델을 워크스페이스에 다운로드하세요. 로컬 공급자는 설치 완료 전에도 저장할 수 있으며 WHISPER_BIN 또는 PIPER_BIN 수동 설정이 필요 없습니다.', + 'voice.providers.sttProvider': '음성-텍스트 공급자', + 'voice.providers.sttProviderAria': 'STT 공급자', + 'voice.providers.cloudWhisperProxy': '클라우드(속삭임 프록시)', + 'voice.providers.localWhisper': '로컬 속삭임', + 'voice.providers.installRequired': '(설치 필요)', + 'voice.providers.whisperInstalledTitle': '위스퍼가 설치되었습니다. 다시 설치하려면 클릭하세요.', + 'voice.providers.whisperDownloadTitle': + 'whisper.cpp와 GGML 모델을 워크스페이스에 다운로드합니다.', + 'voice.providers.installed': '설치됨', + 'voice.providers.installFailed': '설치 실패', + 'voice.providers.notInstalled': '설치되지 않음', + 'voice.providers.whisperModel': '귓속말 모델', + 'voice.providers.whisperModelAria': '귓속말 모델', + 'voice.providers.whisperModelTiny': '소형(39MB, 가장 빠름)', + 'voice.providers.whisperModelBase': '기본(74MB)', + 'voice.providers.whisperModelSmall': '소형(244MB)', + 'voice.providers.whisperModelMedium': '중형(769MB, 권장)', + 'voice.providers.whisperModelLargeTurbo': '대형 v3 터보(1.5GB, 최고 정확도)', + 'voice.providers.ttsProvider': '텍스트 음성 변환 제공자', + 'voice.providers.ttsProviderAria': 'TTS 제공자', + 'voice.providers.cloudElevenLabsProxy': '클라우드(ElevenLabs 프록시)', + 'voice.providers.localPiper': '로컬 Piper', + 'voice.providers.piperInstalledTitle': 'Piper가 설치되었습니다. 다시 설치하려면 클릭하세요.', + 'voice.providers.piperDownloadTitle': + 'Piper와 번들된 en_US-lessac-medium 음성을 워크스페이스에 다운로드합니다.', + 'voice.providers.piperVoice': '파이퍼 목소리', + 'voice.providers.piperVoiceAria': '파이퍼 목소리', + 'voice.providers.customVoiceOption': '기타(아래 입력)…', + 'voice.providers.customVoiceAria': '파이퍼 음성 ID(사용자 정의)', + 'voice.providers.customVoicePlaceholder': 'en_US-lessac-medium', + 'voice.providers.piperVoicesDesc': + '음성은 huggingface.co/rhasspy/piper-voices에서 제공됩니다. 음성을 변경하려면 새 .onnx를 다운로드하기 위해 설치/재설치를 클릭해야 할 수 있습니다.', + 'voice.providers.mascotVoice': '마스코트 음성', + 'voice.providers.mascotVoiceDescPrefix': + '마스코트가 음성 답변에 사용하는 ElevenLabs 음성은 다음에서 구성됩니다', + 'voice.providers.mascotSettings': '마스코트 설정', + 'voice.providers.mascotVoiceDescSuffix': '.', + 'voice.providers.hotkeyPlaceholder': 'Fn', + 'voice.providers.piperPreset.lessacMedium': 'US · Lessac (중립, 권장)', + 'voice.providers.piperPreset.lessacHigh': 'US · Lessac (고품질, 대형)', + 'voice.providers.piperPreset.ryanMedium': 'US · Ryan (남성)', + 'voice.providers.piperPreset.amyMedium': 'US · Amy (여)', + 'voice.providers.piperPreset.librittsHigh': 'US · LibriTTS (멀티 스피커)', + 'voice.providers.piperPreset.alanMedium': 'GB · Alan (남)', + 'voice.providers.piperPreset.jennyDiocoMedium': 'GB · Jenny Dioco (여)', + 'voice.providers.piperPreset.northernEnglishMaleMedium': 'GB · 북부 영어(남성)', + 'voice.providers.chip.cloud': 'OpenHuman (관리형)', + 'voice.providers.chip.cloudAria': 'OpenHuman 관리형 공급자는 항상 활성화되어 있습니다', + 'voice.providers.chip.whisper': 'Whisper (로컬)', + 'voice.providers.chip.enableWhisper': '로컬 Whisper STT 활성화', + 'voice.providers.chip.disableWhisper': '로컬 Whisper STT 비활성화', + 'voice.providers.chip.piper': 'Piper (로컬)', + 'voice.providers.chip.enablePiper': '로컬 Piper TTS 활성화', + 'voice.providers.chip.disablePiper': '로컬 Piper TTS 비활성화', + 'voice.providers.chip.enableProvider': 'Enable', + 'voice.providers.chip.disableProvider': 'Disable', + 'voice.providers.chip.apiKeyLabel': 'API 키', + 'voice.providers.chip.apiKeyPlaceholder': 'sk-…', + 'voice.providers.chip.comingSoon': '출시 예정', + 'voice.modal.title': 'Configure', + 'voice.modal.desc': + '이 공급자를 활성화하려면 API 키를 입력하세요. 저장하기 전에 연결을 테스트할 수 있습니다.', + 'voice.modal.testKey': '키 테스트', + 'voice.modal.testing': '테스트 중…', + 'voice.modal.saveAndEnable': '저장 및 활성화', + 'voice.modal.enable': 'Enable', + 'voice.modal.whisperDesc': + '모델 크기를 선택하고 Whisper 바이너리 및 GGML 모델을 워크스페이스에 설치하세요. 더 큰 모델은 더 정확하지만 느립니다.', + 'voice.modal.piperDesc': + '음성을 선택하고 Piper 바이너리 및 ONNX 모델을 워크스페이스에 설치하세요. Piper는 낮은 지연 시간으로 완전히 오프라인에서 실행됩니다.', + 'voice.routing.title': '음성 라우팅', + 'voice.routing.desc': + '음성-텍스트 변환과 텍스트-음성 변환을 처리할 활성화된 공급자를 선택하세요.', + 'voice.routing.save': 'Save', + 'voice.routing.testStt': 'STT 테스트', + 'voice.routing.testTts': 'TTS 테스트', + 'voice.routing.elevenlabsVoice': 'ElevenLabs 음성', + 'voice.routing.elevenlabsVoiceAria': 'ElevenLabs 음성 선택', + 'voice.routing.elevenlabsVoiceIdAria': 'ElevenLabs 음성 ID (커스텀)', + 'voice.routing.elevenlabsVoiceDesc': + '선별된 음성을 선택하거나 ElevenLabs 대시보드에서 커스텀 음성 ID를 붙여넣으세요.', + 'voice.externalProviders.title': '외부 음성 공급자', + 'voice.externalProviders.desc': + 'Deepgram, ElevenLabs 또는 OpenAI 같은 서드파티 STT/TTS API를 직접 연결하세요.', + 'voice.externalProviders.keySet': '키 설정됨', + 'voice.externalProviders.noKey': 'API 키 없음', + 'voice.externalProviders.test': 'Test', + 'voice.externalProviders.testing': '테스트 중…', + 'voice.externalProviders.remove': 'Remove', + 'voice.externalProviders.provider': 'Provider', + 'voice.externalProviders.selectProvider': '공급자 선택…', + 'voice.externalProviders.apiKey': 'API 키', + 'voice.externalProviders.apiKeyPlaceholder': 'sk-…', + 'voice.externalProviders.add': 'Add', + 'autocomplete.title': '자동 완성', + 'autocomplete.settings': '설정', + 'autocomplete.acceptWithTab': 'Tab으로 수락', + 'autocomplete.stylePreset': '스타일 프리셋', + 'autocomplete.style.balanced': '균형', + 'autocomplete.style.concise': '간결', + 'autocomplete.style.formal': '격식', + 'autocomplete.style.casual': '캐주얼', + 'autocomplete.style.custom': '사용자 지정', + 'autocomplete.disabledApps': '비활성화된 앱(줄마다 하나의 번들/앱 토큰)', + 'autocomplete.saveSettings': '설정 저장', + 'autocomplete.saving': '저장 중…', + 'autocomplete.runtime': '런타임', + 'autocomplete.running': '실행 중', + 'autocomplete.start': '시작', + 'autocomplete.stop': '중지', + 'autocomplete.settingsSaved': '자동 완성 설정이 저장되었습니다.', + 'autocomplete.started': '자동 완성이 시작되었습니다.', + 'autocomplete.didNotStart': '자동 완성이 시작되지 않았습니다. 활성화되어 있는지 확인하세요.', + 'autocomplete.stopped': '자동 완성이 중지되었습니다.', + 'autocomplete.advancedSettings': '고급 설정', + 'autocomplete.debugTitle': '자동 완성 디버그', + 'chat.agentChat': '에이전트 채팅', + 'chat.overrides': '재정의', + 'chat.model': '모델', + 'chat.temperature': '온도', + 'chat.conversation': '대화', + 'chat.startAgentConversation': '에이전트와 대화를 시작하세요.', + 'chat.you': '나', + 'chat.agent': '에이전트', + 'chat.askAgent': '에이전트에게 무엇이든 물어보세요...', + 'chat.sendMessage': '메시지 보내기', + 'composio.triageTitle': '통합 트리거', + 'composio.triageDesc': + '활성화되면 들어오는 각 Composio 트리거가 이벤트를 분류하고 자동 작업을 시작할 수 있는 AI 선별 단계를 거칩니다 — 트리거당 로컬 LLM 턴 하나가 사용됩니다. 수동 검토를 선호한다면 전체 또는 통합별로 비활성화하세요. 환경 변수가', + 'composio.disableAllTriage': '모든 트리거에 대한 AI 선별 비활성화', + 'composio.triggersStillRecorded': '트리거는 기록에 계속 저장됩니다 — LLM 턴은 실행되지 않습니다.', + 'composio.disableSpecificIntegrations': '특정 통합에 대한 AI 선별 비활성화', + 'composio.settingsSaved': '설정이 저장되었습니다', + 'composio.saveFailed': '저장에 실패했습니다. 다시 시도하세요.', + 'cron.title': 'Cron 작업', + 'cron.scheduledJobs': '예약된 작업', + 'cron.manageCronJobs': '코어 스케줄러에서 cron 작업을 관리합니다.', + 'cron.refreshCronJobs': 'Cron 작업 새로고침', + 'localModel.modelStatus': '모델 상태', + 'localModel.downloadModels': '모델 다운로드', + 'localModel.usage': '사용량', + 'localModel.usageDesc': + '로컬 모델에서 실행할 하위 시스템을 선택하세요. 꺼진 항목은 클라우드를 사용합니다.', + 'localModel.enableRuntime': '로컬 AI 런타임 활성화', + 'localModel.enableRuntimeDesc': + '마스터 스위치입니다. 기본값은 꺼짐이며 Ollama는 유휴 상태로 유지됩니다. 켜면 트리 요약기, 화면 인텔리전스, 자동 완성이 항상 로컬 모델을 사용합니다.', + 'localModel.advancedSettings': '고급 설정', + 'localModel.debugTitle': '로컬 모델 디버그', + 'screenAwareness.debugTitle': '화면 인식 디버그', + 'screenAwareness.debug.debugAndDiagnostics': '디버그 및 진단', + 'screenAwareness.debug.collapse': '축소', + 'screenAwareness.debug.expand': '확장', + 'screenAwareness.debug.failedToSave': '화면 인텔리전스 저장 실패', + 'screenAwareness.debug.policyTitle': '화면 인텔리전스 정책', + 'screenAwareness.debug.baselineFps': '기준 FPS', + 'screenAwareness.debug.useVisionModel': '비전 모델 사용', + 'screenAwareness.debug.useVisionModelDesc': + '더 풍부한 컨텍스트를 위해 비전 LLM에 스크린샷을 전송합니다. 꺼져 있으면 텍스트 LLM에서 OCR 텍스트만 사용하므로 더 빠르고 비전 모델이 필요 없습니다.', + 'screenAwareness.debug.keepScreenshots': '스크린샷 유지', + 'screenAwareness.debug.keepScreenshotsDesc': + '처리 후 삭제하지 않고 캡처한 스크린샷을 워크스페이스에 저장합니다', + 'screenAwareness.debug.allowlist': '허용 목록(한 줄에 하나의 규칙)', + 'screenAwareness.debug.denylist': '차단 목록(한 줄에 하나의 규칙)', + 'screenAwareness.debug.saveSettings': '화면 인텔리전스 설정 저장', + 'screenAwareness.debug.sessionStats': '세션 통계', + 'screenAwareness.debug.framesEphemeral': '프레임(임시)', + 'screenAwareness.debug.panicStop': '패닉 중지', + 'screenAwareness.debug.defaultPanicHotkey': 'Cmd+Shift+.', + 'screenAwareness.debug.vision': '비전', + 'screenAwareness.debug.idle': '유휴', + 'screenAwareness.debug.visionQueue': '비전 대기열', + 'screenAwareness.debug.lastVision': '마지막 비전', + 'screenAwareness.debug.notAvailable': '해당 없음', + 'screenAwareness.debug.visionSummaries': '비전 요약', + 'screenAwareness.debug.refreshing': '새로 고침…', + 'screenAwareness.debug.noSummaries': '아직 요약이 없습니다.', + 'screenAwareness.debug.unknownApp': '알 수 없는 앱', + 'screenAwareness.debug.macosOnly': 'Screen Intelligence V1은 현재 macOS에서만 지원됩니다.', + 'memory.debugTitle': '메모리 디버그', + 'memory.documents': '문서', + 'memory.filterByNamespace': '네임스페이스로 필터링...', + 'memory.refresh': '새로고침', + 'memory.noDocumentsFound': '문서를 찾을 수 없습니다.', + 'memory.delete': '삭제', + 'memory.rawResponse': '원시 응답', + 'memory.namespaces': '네임스페이스', + 'memory.noNamespacesFound': '네임스페이스를 찾을 수 없습니다.', + 'memory.queryRecall': '쿼리 및 회수', + 'memory.namespace': '네임스페이스', + 'memory.queryText': '쿼리 텍스트...', + 'memory.defaultMaxChunks': '10', + 'memory.maxChunks': '최대 청크', + 'memory.query': '쿼리', + 'memory.recall': '리콜', + 'memory.queryLabel': '쿼리', + 'memory.recallLabel': '리콜', + 'memory.queryResult': '쿼리 결과', + 'memory.recallResult': '리콜 결과', + 'memory.clearNamespace': '네임스페이스 지우기', + 'memory.clearNamespaceDescription': '네임스페이스 내의 모든 문서를 영구적으로 삭제합니다.', + 'memory.selectNamespace': '네임스페이스 선택...', + 'memory.exampleNamespace': '예를 들어 스킬:gmail:user@example.com', + 'memory.clear': '지우기', + 'memory.deleteConfirm': '"{namespace}" 네임스페이스에서 "{documentId}" 문서를 삭제하시겠습니까?', + 'memory.clearNamespaceConfirm': + '네임스페이스 "{namespace}"의 모든 문서가 영구적으로 삭제됩니다. 계속하시겠습니까?', + 'memory.clearNamespaceSuccess': '네임스페이스 "{namespace}"이 삭제되었습니다.', + 'memory.clearNamespaceEmpty': '"{namespace}"에서 지울 항목이 없습니다.', + 'webhooks.debugTitle': '웹훅 디버그', + 'webhooks.failedToLoadDebugData': '웹훅 디버그 데이터를 로드하지 못했습니다.', + 'webhooks.clearLogsConfirm': '캡처된 웹훅 디버그 로그를 모두 삭제하시겠습니까?', + 'webhooks.failedToClearLogs': '웹훅 로그를 지우지 못했습니다.', + 'webhooks.loading': '로드 중...', + 'webhooks.refresh': '새로 고침', + 'webhooks.clearing': '지우는 중...', + 'webhooks.clearLogs': '로그 지우기', + 'webhooks.registered': '등록됨', + 'webhooks.captured': '캡처됨', + 'webhooks.live': 'live', + 'webhooks.disconnected': '연결 끊김', + 'webhooks.lastEvent': '마지막 이벤트', + 'webhooks.at': 'at', + 'webhooks.registeredWebhooks': '등록된 웹훅', + 'webhooks.noActiveRegistrations': '활성 등록이 없습니다.', + 'webhooks.resolvingBackendUrl': '백엔드 URL 해결 중…', + 'webhooks.capturedRequests': '캡처된 요청', + 'webhooks.noRequestsCaptured': '아직 캡처된 웹훅 요청이 없습니다.', + 'webhooks.unrouted': '라우팅 해제됨', + 'webhooks.pending': '보류 중', + 'webhooks.requestHeaders': '요청 헤더', + 'webhooks.queryParams': '쿼리 매개변수', + 'webhooks.requestBody': '요청 본문', + 'webhooks.responseHeaders': '응답 헤더', + 'webhooks.responseBody': '응답 본문', + 'webhooks.rawPayload': '원시 페이로드', + 'webhooks.empty': '[비어 있음]', + 'providerSetup.error.defaultDetails': '공급자 설정에 실패했습니다.', + 'providerSetup.error.providerFallback': '공급자', + 'providerSetup.error.credentialsRejected': + '{provider}에서 자격 증명을 거부했습니다. API 키를 확인하고 다시 시도하세요.', + 'providerSetup.error.endpointNotRecognized': + '{provider}에서 엔드포인트를 인식하지 못했습니다. 기본 URL을 확인하고 다시 시도하세요.', + 'providerSetup.error.providerUnavailable': + '{provider}를 현재 사용할 수 없습니다. 다시 시도하거나 공급자 상태를 확인하세요.', + 'providerSetup.error.unreachable': + '{provider}에 연결할 수 없습니다. 엔드포인트 URL과 네트워크 연결을 확인한 후 다시 시도하세요.', + 'providerSetup.error.couldNotReachWithMessage': '{provider}에 연결할 수 없습니다: {message}', + 'providerSetup.error.technicalDetails': '기술 세부 정보', + 'notifications.routingTitle': '알림 라우팅', + 'notifications.routing.pipelineStats': '파이프라인 통계', + 'notifications.routing.total': '합계', + 'notifications.routing.unread': '읽지 않음', + 'notifications.routing.unscored': '점수가 매겨지지 않음', + 'notifications.routing.intelligenceTitle': '알림 인텔리전스', + 'notifications.routing.intelligenceDesc': + '연결된 계정의 모든 알림은 로컬 AI 모델로 점수가 매겨집니다. 중요도가 높은 알림은 오케스트레이터 에이전트로 자동으로 라우팅되어 중요한 사항을 놓치지 않습니다.', + 'notifications.routing.howItWorks': '작동 방식', + 'notifications.routing.level.drop': '삭제', + 'notifications.routing.level.dropDesc': '소음/스팸 — 저장되었지만 표시되지 않음', + 'notifications.routing.level.acknowledge': '승인', + 'notifications.routing.level.acknowledgeDesc': '낮은 우선 순위 — 알림 센터에 표시됨', + 'notifications.routing.level.react': '반응', + 'notifications.routing.level.reactDesc': '중간 우선순위 — 집중된 에이전트 응답을 트리거합니다.', + 'notifications.routing.level.escalate': '에스컬레이션', + 'notifications.routing.level.escalateDesc': '높은 우선 순위 - 오케스트레이터 에이전트로 전달됨', + 'notifications.routing.perProvider': '공급자별 라우팅', + 'notifications.routing.threshold': '임계값', + 'notifications.routing.routeToOrchestrator': '오케스트레이터로 라우팅', + 'notifications.routing.loadSettingsError': + '설정을 불러오지 못했습니다. 이 패널을 다시 열어 재시도하세요.', + 'common.reload': '다시 불러오기', + 'common.skip': '건너뛰기', + 'common.disable': '비활성화', + 'common.enable': '활성화', + 'chat.safetyTimeout': '2분 후에도 에이전트의 응답이 없습니다. 다시 시도하거나 연결을 확인하세요.', + 'chat.filter.all': '전체', + 'chat.filter.work': '업무', + 'chat.filter.briefing': '브리핑', + 'chat.filter.notification': '알림', + 'chat.filter.workers': '워커', + 'chat.selectThread': '스레드 선택', + 'chat.threads': '스레드', + 'chat.noThreads': '아직 스레드가 없습니다', + 'chat.noLabelThreads': '"{label}" 스레드가 없습니다', + 'chat.noWorkerThreads': '아직 워커 스레드가 없습니다', + 'chat.deleteThread': '스레드 삭제', + 'chat.deleteThreadConfirm': '"{title}" 스레드를 삭제하시겠습니까?', + 'chat.untitledThread': '제목 없는 스레드', + 'chat.editThreadTitle': '스레드 제목 편집', + 'chat.hideSidebar': '사이드바 숨기기', + 'chat.showSidebar': '사이드바 표시', + 'chat.newThreadShortcut': '새 스레드 (/new)', + 'chat.new': '새로 만들기', + 'chat.failedToLoadMessages': '메시지를 불러오지 못했습니다', + 'chat.thinkingIteration': '생각 중... ({n})', + 'chat.thinkingDots': '생각 중...', + 'chat.approachingLimit': '사용 한도에 가까워지고 있습니다', + 'chat.approachingLimitMsg': '사용 가능한 할당량의 {pct}%를 사용했습니다.', + 'chat.upgrade': '업그레이드', + 'chat.weeklyLimitHit': '포함된 주기 예산을 모두 사용했습니다.', + 'chat.resets': '초기화', + 'chat.topUpToContinue': '계속하려면 충전하세요.', + 'chat.budgetComplete': + '포함된 예산을 모두 사용했습니다. 계속하려면 크레딧을 추가하거나 업그레이드하세요.', + 'chat.topUp': '충전', + 'chat.cycle': '주기', + 'chat.cycleSpent': '이번 주기 사용량', + 'chat.cycleRemaining': '남은 양', + 'chat.left': '남음', + 'chat.setup': '설정', + 'chat.switchToText': '텍스트로 전환', + 'chat.transcribing': '전사 중...', + 'chat.stopAndSend': '중지하고 보내기', + 'chat.startTalking': '말하기 시작', + 'chat.playingVoiceReply': '음성 응답 재생 중', + 'chat.voiceHint': '마이크를 사용해 말하세요', + 'chat.micUnavailable': '마이크를 사용할 수 없습니다', + 'chat.turn': '턴', + 'chat.turns': '턴', + 'chat.openWorkerThread': '워커 스레드 열기', + 'chat.attachment.attach': '이미지 첨부', + 'chat.attachment.remove': '{name} 제거', + 'chat.attachment.tooMany': '메시지당 최대 {max}개 이미지', + 'chat.attachment.tooLarge': '이미지가 {max} 크기 제한을 초과합니다', + 'chat.attachment.unsupportedType': + '지원되지 않는 파일 형식입니다. PNG, JPEG, WebP, GIF 또는 BMP를 사용하세요.', + 'chat.attachment.readFailed': '파일을 읽을 수 없습니다', + 'memory.searchAria': '메모리 검색', + 'memory.searchPlaceholder': '메모리 항목 검색...', + 'memory.sourceFilter.all': '모든 소스', + 'memory.sourceFilter.email': '이메일', + 'memory.sourceFilter.calendar': '캘린더', + 'memory.sourceFilter.telegram': 'Telegram', + 'memory.sourceFilter.aiInsight': 'AI 인사이트', + 'memory.sourceFilter.system': '시스템', + 'memory.sourceFilter.trading': '거래', + 'memory.sourceFilter.security': '보안', + 'memory.ingestionActivity': '수집 활동', + 'memory.events': '이벤트', + 'memory.event': '이벤트', + 'memory.overTheLast': '지난 기간', + 'memory.months': '개월', + 'memory.peak': '최고치', + 'memory.perDay': '/일', + 'memory.less': '적음', + 'memory.more': '많음', + 'memory.on': '켜짐', + 'memory.loading': '메모리 불러오는 중', + 'memory.fetching': '메모리 항목을 가져오는 중...', + 'memory.analyzing': '메모리 분석 중', + 'memory.analyzingHint': '인사이트를 추출하기 위해 메모리를 처리하는 중...', + 'memory.noMatches': '일치하는 항목 없음', + 'memory.noMatchesHint': '검색어 또는 필터를 변경해 보세요.', + 'memory.allCaughtUp': '모두 완료됨', + 'memory.allCaughtUpHint': '처리할 새 메모리 항목이 없습니다.', + 'memory.noAnalysis': '아직 분석 없음', + 'memory.noAnalysisHint': '메모리에서 패턴을 발견하려면 분석을 실행하세요.', + 'memory.emptyHint': '첫 번째 메모리를 만들려면 상호작용을 시작하세요.', + 'mic.unavailable': '마이크를 사용할 수 없습니다', + 'mic.permissionDenied': '마이크 권한이 거부되었습니다', + 'mic.failedToStartRecorder': '녹음기를 시작하지 못했습니다', + 'mic.transcribing': '전사 중...', + 'mic.tapToSend': '탭하여 보내기', + 'mic.waitingForAgent': '에이전트를 기다리는 중...', + 'mic.tapAndSpeak': '탭하고 말하기', + 'mic.stopRecording': '녹음을 중지하고 보내기', + 'mic.startRecording': '녹음 시작', + 'mic.deviceSelector': '마이크 장치', + 'mic.tapToSendCountdown': '탭하여 보내기 ({seconds}초)', + 'token.usageLimitReached': '사용 한도에 도달했습니다', + 'token.approachingLimit': '한도에 가까워지고 있습니다', + 'token.planClickForDetails': '플랜 - 자세한 내용을 보려면 클릭', + 'token.sessionTokens': '입력: {in} | 출력: {out} | 턴: {turns}', + 'token.limit': '한도 도달', + 'catalog.noCapabilityBinding': '기능 바인딩 없음', + 'catalog.downloadFailed': '다운로드 실패', + 'catalog.active': '활성', + 'catalog.installed': '설치됨', + 'catalog.notDownloaded': '다운로드되지 않음', + 'catalog.inUse': '사용 중', + 'catalog.use': '사용', + 'catalog.deleteModel': '모델 삭제', + 'catalog.download': '다운로드', + 'navigator.recent': '최근', + 'navigator.today': '오늘', + 'navigator.thisWeek': '이번 주', + 'navigator.sources': '소스', + 'navigator.email': '이메일', + 'navigator.slack': 'Slack', + 'navigator.chat': '채팅', + 'navigator.documents': '문서', + 'navigator.people': '사람', + 'navigator.topics': '주제', + 'dreams.description': '꿈은 메모리의 패턴을 종합하는 AI 생성 반영입니다.', + 'dreams.comingSoon': '곧 제공 예정', + 'assignment.memoryLlm': '메모리 LLM', + 'assignment.memoryLlmAria': '메모리 LLM 선택', + 'assignment.embedder': '임베더', + 'assignment.loaded': '로드됨', + 'assignment.notDownloaded': '다운로드되지 않음', + 'assignment.usedForExtractSummarise': '추출 및 요약에 사용됨', + 'insights.knownFacts': '알려진 사실', + 'insights.preferences': '선호도', + 'insights.relationships': '관계', + 'insights.skills': '스킬', + 'insights.opinions': '의견', + 'insights.other': '기타', + 'insights.title': '인사이트', + 'insights.empty': '아직 인사이트가 없습니다. 메모리가 늘어나면 인사이트가 생성됩니다.', + 'insights.description': '메모리 그래프의 {count}개 관계를 기반으로 합니다.', + 'insights.items': '항목', + 'insights.more': '더 보기', + 'calls.joiningCall': '통화에 참여하는 중', + 'calls.meetWindowOpening': 'Meet 창이 열리는 중...', + 'calls.failedToStart': 'Meet 통화를 시작하지 못했습니다', + 'calls.couldNotStart': '통화를 시작할 수 없습니다', + 'calls.failedToClose': '통화를 닫지 못했습니다', + 'calls.couldNotClose': '통화를 닫을 수 없습니다', + 'calls.joinMeet': 'Google Meet 통화 참여', + 'calls.joinMeetDescription': '참여할 Google Meet 링크를 입력하세요.', + 'calls.meetLink': 'Meet 링크', + 'calls.displayName': '표시 이름', + 'calls.openingMeet': 'Meet 여는 중...', + 'calls.joinCall': '통화 참여', + 'calls.activeCalls': '활성 통화', + 'calls.leave': '나가기', + 'workspace.wipeConfirm': '모든 메모리를 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.', + 'workspace.resetTreeConfirm': '메모리 트리를 다시 빌드하시겠습니까?', + 'workspace.wipeTitle': '메모리 삭제', + 'workspace.resetting': '초기화 중...', + 'workspace.resetMemory': '메모리 초기화', + 'workspace.resetTreeTitle': '메모리 트리 다시 빌드', + 'workspace.rebuilding': '다시 빌드 중...', + 'workspace.resetMemoryTree': '메모리 트리 초기화', + 'workspace.building': '빌드 중...', + 'workspace.buildSummaryTrees': '요약 트리 빌드', + 'workspace.viewVault': '볼트 보기', + 'workspace.openingVaultTitle': 'Obsidian에서 볼트 열기', + 'workspace.openingVaultMessage': + 'Obsidian이 열리지 않으면 obsidian.md에서 설치하거나 폴더 표시를 사용하세요. 볼트 경로:', + 'workspace.openVaultFailedTitle': 'Obsidian에서 볼트를 열 수 없습니다', + 'workspace.openVaultFailedMessage': + '폴더 표시를 사용하여 볼트 디렉터리를 직접 엽니다. 볼트 경로:', + 'workspace.revealVaultFailed': '볼트 폴더를 표시할 수 없습니다', + 'workspace.revealFolder': '폴더 공개', + 'workspace.checkingVault': '확인 중…', + 'workspace.vaultNotRegisteredHelp': + 'Obsidian은 볼트로 추가된 폴더만 열 수 있습니다. Obsidian에서 "폴더를 볼트로 열기"를 선택하고 아래 폴더를 선택하세요 — 한 번만 하면 됩니다. 그런 다음 볼트 보기를 다시 클릭하세요.', + 'workspace.obsidianNotFoundHelp': + '이 기기에서 Obsidian을 찾을 수 없습니다. 설치하거나, 비표준 위치에 설치되어 있는 경우 고급 설정에서 구성 폴더를 설정하세요.', + 'workspace.openAnyway': '어쨌든 Obsidian에서 열기', + 'workspace.installObsidian': 'Obsidian 설치', + 'workspace.obsidianAdvanced': 'Obsidian이 다른 위치에 설치되어 있나요?', + 'workspace.obsidianConfigDirLabel': 'Obsidian 구성 폴더', + 'workspace.obsidianConfigDirHint': + 'obsidian.json이 포함된 폴더 경로 (예: ~/.config/obsidian). 비워두면 자동 감지됩니다.', + 'workspace.obsidianConfigDirPlaceholder': '~/.config/obsidian', + 'workspace.graphLoadFailed': '메모리 그래프를 불러오지 못했습니다', + 'workspace.loadingGraph': '메모리 그래프를 불러오는 중...', + 'workspace.graphViewMode': '메모리 그래프 보기 모드', + 'workspace.trees': '트리', + 'workspace.contacts': '연락처', + 'graph.noContactMentions': '연락처 언급 없음', + 'graph.noMemory': '메모리 없음', + 'graph.source': '소스', + 'graph.topic': '주제', + 'graph.global': '전역', + 'graph.document': '문서', + 'graph.contact': '연락처', + 'graph.nodes': '노드', + 'graph.parentChild': '부모-자식', + 'graph.documentContact': '문서-연락처', + 'graph.link': '링크', + 'graph.links': '링크', + 'graph.children': '자식', + 'graph.clickToOpenObsidian': '클릭하여 Obsidian에서 열기', + 'graph.person': '사람', + 'modal.dontShowAgain': '비슷한 제안을 다시 표시하지 않기', + 'reflections.loading': '반영을 불러오는 중...', + 'reflections.empty': '아직 반영이 없습니다', + 'reflections.title': '반영', + 'reflections.proposedAction': '제안된 작업', + 'reflections.act': '실행', + 'reflections.dismiss': '닫기', + 'whatsapp.chatsSynced': '채팅 동기화됨', + 'whatsapp.chatSynced': '채팅 동기화됨', + 'sync.active': '활성', + 'sync.recent': '최근', + 'sync.idle': '유휴', + 'sync.memorySources': '메모리 소스', + 'sync.noConnectedSources': '연결된 소스 없음', + 'sync.chunks': '청크', + 'sync.lastChunk': '마지막 청크:', + 'sync.pending': '대기 중', + 'sync.processed': '처리됨', + 'sync.syncing': '동기화 중…', + 'sync.sync': '동기화', + 'sync.failedToLoad': '동기화 상태를 불러오지 못했습니다', + 'sync.noContent': '아직 메모리에 동기화된 콘텐츠가 없습니다. 시작하려면 통합을 연결하세요.', + 'memorySources.title': '메모리 소스', + 'memorySources.empty': '아직 메모리 소스가 없습니다. 메모리를 채우려면 하나를 추가하세요.', + 'memorySources.customSources': '사용자 지정 소스', + 'memorySources.addSource': '소스 추가', + 'memorySources.noCustomSources': + '아직 사용자 지정 소스가 없습니다. 폴더, GitHub 리포지토리, RSS 피드 또는 웹 페이지를 추가해 시작하세요.', + 'memorySources.loadingConnections': '연결을 불러오는 중…', + 'memorySources.noConnections': '활성 Composio 연결을 찾을 수 없습니다. 먼저 통합을 연결하세요.', + 'memorySources.pickConnection': '연결 선택', + 'memorySources.selectConnection': '— 연결 선택 —', + 'memorySources.composioListFailed': 'Composio 연결을 불러오지 못했습니다.', + 'memorySources.browse': '찾아보기…', + 'memorySources.folderPathPlaceholder': '/Users/you/notes', + 'memorySources.globPatternPlaceholder': '**/*.md', + 'memorySources.repoUrlPlaceholder': 'https://github.com/org/repo', + 'memorySources.branchPlaceholder': 'main', + 'memorySources.feedUrlPlaceholder': 'https://example.com/feed.xml', + 'memorySources.pageUrlPlaceholder': 'https://example.com/article', + 'memorySources.cssSelectorPlaceholder': 'article', + 'memorySources.searchQueryPlaceholder': 'from:user AI 안전', + 'memorySources.kind.composio': '통합', + 'memorySources.kind.folder': '로컬 폴더', + 'memorySources.kind.github_repo': 'GitHub 리포지토리', + 'memorySources.kind.twitter_query': 'Twitter 검색', + 'memorySources.kind.rss_feed': 'RSS 피드', + 'memorySources.kind.web_page': '웹 페이지', + 'memorySources.sync.successTitle': '동기화 중', + 'memorySources.sync.successMessage': '진행 상황이 곧 표시됩니다.', + 'memorySources.sync.failedTitle': '동기화 실패:', + 'time.justNow': '방금 전', + 'time.secondsAgoSuffix': '초 전', + 'time.minutesAgoSuffix': '분 전', + 'time.hoursAgoSuffix': '시간 전', + 'time.daysAgoSuffix': '일 전', + 'memorySources.pickKind': '어떤 종류의 소스를 추가하시겠습니까?', + 'memorySources.backToKinds': '소스 유형으로 돌아가기', + 'memorySources.label': '레이블', + 'memorySources.labelPlaceholder': '내 리서치 노트', + 'memorySources.add': '추가', + 'memorySources.adding': '추가 중…', + 'memorySources.added': '소스가 추가되었습니다', + 'memorySources.removed': '소스가 제거되었습니다', + 'memorySources.remove': '제거', + 'memorySources.enable': '활성화', + 'memorySources.disable': '비활성화', + 'memorySources.toggleFailed': '전환 실패', + 'memorySources.removeFailed': '제거 실패', + 'memorySources.folderPath': '폴더 경로', + 'memorySources.globPattern': 'Glob 패턴', + 'memorySources.repoUrl': '리포지토리 URL', + 'memorySources.branch': '브랜치', + 'memorySources.feedUrl': '피드 URL', + 'memorySources.pageUrl': '페이지 URL', + 'memorySources.cssSelector': 'CSS 선택자(선택 사항)', + 'memorySources.searchQuery': '검색 쿼리', + 'backend.aiBackend': 'AI 백엔드', + 'backend.cloud': '클라우드', + 'backend.recommended': '추천', + 'backend.cloudDescription': + '서버에서 호스팅되는 빠르고 강력한 모델입니다. 즉시 사용할 수 있습니다.', + 'backend.privacyNote': '개인 데이터, 메시지 또는 키는 서버로 전송되지 않습니다.', + 'backend.local': '로컬', + 'backend.advanced': '고급', + 'backend.localDescription': + 'Ollama를 사용하여 자신의 컴퓨터에서 모델을 실행합니다. 완전한 개인정보 보호를 제공하지만 설정이 필요합니다.', + 'backend.ramRecommended': '16GB 이상 RAM 권장', + 'subconscious.tasks': '작업', + 'subconscious.ticks': '틱', + 'subconscious.last': '마지막', + 'subconscious.failed': '실패', + 'subconscious.tickInterval': '틱 간격', + 'subconscious.runNow': '지금 실행', + 'subconscious.providerUnavailableTitle': 'Subconscious 일시 중지됨', + 'subconscious.providerSettings': 'AI 설정', + 'subconscious.approvalNeeded': '승인 필요', + 'subconscious.requiresApproval': '승인이 필요함', + 'subconscious.fixInConnections': '연결에서 수정', + 'subconscious.goAhead': '진행', + 'subconscious.activeTasks': '활성 작업', + 'subconscious.noActiveTasks': '활성 작업 없음', + 'subconscious.default': '기본값', + 'subconscious.addTaskPlaceholder': '새 작업 추가...', + 'subconscious.activityLog': '활동 로그', + 'subconscious.noActivity': '아직 활동이 없습니다', + 'subconscious.decision.nothingNew': '새로운 내용 없음', + 'subconscious.decision.completed': '완료됨', + 'subconscious.decision.evaluating': '평가 중', + 'subconscious.decision.waitingApproval': '승인 대기 중', + 'subconscious.decision.failed': '실패', + 'subconscious.decision.cancelled': '취소됨', + 'subconscious.decision.skipped': '건너뜀', + 'actionable.complete': '완료', + 'actionable.dismiss': '닫기', + 'actionable.snooze': '다시 알림', + 'actionable.new': '새 항목', + 'stats.storage': '저장소', + 'stats.files': '파일', + 'stats.documents': '문서', + 'stats.today': '오늘', + 'stats.namespaces': '네임스페이스', + 'stats.relations': '관계', + 'stats.firstMemory': '첫 번째 메모리', + 'stats.latest': '최신', + 'stats.sessions': '세션', + 'stats.tokens': '토큰', + 'bootCheck.invalidUrl': '런타임 URL을 입력해 주세요.', + 'bootCheck.urlMustStartWith': 'URL은 http:// 또는 https://로 시작해야 합니다', + 'bootCheck.validUrlRequired': '유효한 URL처럼 보이지 않습니다(예: https://core.example.com/rpc)', + 'bootCheck.tokenRequired': '연결하려면 인증 토큰이 필요합니다.', + 'bootCheck.chooseCoreMode': '런타임 선택', + 'bootCheck.connectToCore': '런타임에 연결', + 'bootCheck.desktopDescription': + 'OpenHuman은 생각하기 위한 런타임이 필요합니다. 어디에서 실행할지 선택하세요.', + 'bootCheck.webDescription': + '웹에서 OpenHuman은 사용자가 제어하는 런타임에 연결됩니다. 아래에 URL과 인증 토큰을 입력하거나, 데스크톱 앱을 받아 이 컴퓨터에서 바로 실행하세요.', + 'bootCheck.preferDesktop': '모든 것을 자신의 기기에 보관하고 싶으신가요?', + 'bootCheck.downloadDesktop': '데스크톱 앱 받기', + 'bootCheck.localRecommended': '로컬에서 실행(추천)', + 'bootCheck.localDescription': + '이 컴퓨터에서 바로 실행됩니다. 가장 빠르고, 완전히 비공개이며, 설정할 것이 없습니다.', + 'bootCheck.cloudMode': '클라우드에서 실행(복잡)', + 'bootCheck.cloudDescription': + '다른 곳에서 호스팅 중인 런타임에 연결합니다. 24×7 온라인 상태를 유지하므로 이 기기를 계속 켜둘 필요가 없습니다.', + 'bootCheck.coreRpcUrl': '런타임 URL', + 'bootCheck.rpcUrlPlaceholder': 'https://core.example.com/rpc', + 'bootCheck.authToken': '인증 토큰', + 'bootCheck.bearerTokenPlaceholder': '원격 런타임의 bearer 토큰', + 'bootCheck.storedLocally': '이 기기에만 보관됩니다. 다음으로 전송됨: ', + 'bootCheck.testing': '테스트 중…', + 'bootCheck.testConnection': '연결 테스트', + 'bootCheck.connectedOk': '연결되었습니다. 사용할 준비가 되었습니다.', + 'bootCheck.authFailed': '해당 토큰이 작동하지 않았습니다. 다시 확인하고 시도하세요.', + 'bootCheck.unreachablePrefix': '연결할 수 없습니다:', + 'bootCheck.checkingCore': '런타임을 깨우는 중…', + 'bootCheck.cannotReach': '런타임에 연결할 수 없습니다', + 'bootCheck.cannotReachDesc': '런타임에 연결할 수 없습니다. 다른 런타임을 시도하시겠습니까?', + 'bootCheck.switchMode': '다른 런타임 선택', + 'bootCheck.quit': '종료', + 'bootCheck.legacyDetected': '레거시 백그라운드 런타임 감지됨', + 'bootCheck.legacyDescription': + '별도로 설치된 OpenHuman 데몬이 이 기기에서 이미 실행 중입니다. 내장 런타임이 대신 실행되기 전에 이를 정리해야 합니다.', + 'bootCheck.removing': '제거 중…', + 'bootCheck.removeContinue': '제거하고 계속', + 'bootCheck.localNeedsRestart': '로컬 런타임을 다시 시작해야 함', + 'bootCheck.localNeedsRestartDesc': + '로컬 런타임의 버전이 이 앱과 다릅니다. 빠르게 다시 시작하면 다시 동기화됩니다.', + 'bootCheck.restarting': '다시 시작 중…', + 'bootCheck.restartCore': '런타임 다시 시작', + 'bootCheck.cloudNeedsUpdate': '클라우드 런타임 업데이트 필요', + 'bootCheck.cloudNeedsUpdateDesc': + '클라우드 런타임의 버전이 이 앱과 다릅니다. 업데이트 프로그램을 실행하여 다시 동기화하세요.', + 'bootCheck.updating': '업데이트 중…', + 'bootCheck.updateCloudCore': '클라우드 런타임 업데이트', + 'bootCheck.versionCheckFailed': '런타임 버전 확인 실패', + 'bootCheck.versionCheckFailedDesc': + '런타임이 실행 중이지만 버전을 보고하지 않습니다. 오래된 버전일 수 있습니다. 계속하려면 다시 시작하거나 업데이트하세요.', + 'bootCheck.working': '작업 중…', + 'bootCheck.restartUpdateCore': '런타임 다시 시작 / 업데이트', + 'bootCheck.unexpectedError': '예상치 못한 부트 체크 오류', + 'bootCheck.actionFailed': '문제가 발생했습니다. 다시 시도해 주세요.', + 'bootCheck.portConflictTitle': '앱 엔진을 시작할 수 없습니다', + 'bootCheck.portConflictBody': + '다른 프로세스가 OpenHuman에 필요한 네트워크 포트를 사용 중입니다. 자동으로 문제를 해결해 드리겠습니다.', + 'bootCheck.portConflictFixButton': '자동 수정', + 'bootCheck.portConflictFixing': '수정 중…', + 'bootCheck.portConflictFixFailed': + '자동 수정에 실패했습니다. 컴퓨터를 재시작한 후 다시 시도해 주세요.', + 'notifications.justNow': '방금 전', + 'notifications.minAgo': '{n}분 전', + 'notifications.hrAgo': '{n}시간 전', + 'notifications.dayAgo': '{n}일 전', + 'notifications.category.messages': '메시지', + 'notifications.category.agents': '에이전트', + 'notifications.category.skills': '스킬', + 'notifications.category.system': '시스템', + 'notifications.category.meetings': '회의', + 'notifications.category.reminders': '리마인더', + 'notifications.category.important': '중요', + 'about.update.status.checking': '확인 중...', + 'about.update.status.available': 'v{version} 사용 가능', + 'about.update.status.availableNoVersion': '업데이트 사용 가능', + 'about.update.status.downloading': '다운로드 중...', + 'about.update.status.readyToInstall': 'v{version} 설치 준비 완료', + 'about.update.status.readyToInstallNoVersion': + '새 버전이 다운로드되어 준비되었습니다. 적용하려면 다시 시작하세요.', + 'about.update.status.installing': '설치 중...', + 'about.update.status.restarting': '다시 시작 중...', + 'about.update.status.upToDate': '최신 버전을 실행 중입니다.', + 'about.update.status.error': '업데이트 확인 실패', + 'about.update.status.default': '업데이트 확인', + 'welcome.connectionFailed': '연결 실패: {status} {statusText}', + 'welcome.connectionFailedMsg': '연결 실패: {message}', + 'welcome.continueLocally': '로컬에서 계속', + 'welcome.continueLocallyExperimental': '로컬에서 계속(실험적)', + 'welcome.localSessionStarting': '로컬 세션 시작 중...', + 'welcome.localSessionDesc': '오프라인 로컬 프로필을 사용하고 TinyHumans를 건너뜁니다. OAuth.', + 'chat.agentChatDesc': '에이전트와 직접 채팅 세션을 엽니다.', + 'chat.modelPlaceholder': 'gpt-4o', + 'channels.activeRouteValue': '{authMode}을(를) 통해 {channel}', + 'privacy.dataKind.messages': '메시지', + 'privacy.dataKind.agents': '에이전트', + 'privacy.dataKind.skills': '스킬', + 'privacy.dataKind.system': '시스템', + 'privacy.dataKind.meetings': '회의', + 'privacy.dataKind.reminders': '리마인더', + 'privacy.dataKind.important': '중요', + 'onboarding.enableLocalAI': '로컬 AI 활성화', + 'onboarding.skills.status.available': '사용 가능', + 'onboarding.skills.status.connected': '연결됨', + 'onboarding.skills.status.connecting': '연결 중', + 'onboarding.skills.status.error': '오류', + 'onboarding.skills.status.unavailable': '사용할 수 없음', + 'composio.statusUnavailable': '상태를 사용할 수 없음', + 'composio.authExpired': '인증이 만료됨', + 'composio.reconnect': '다시 연결', + 'composio.expiredAuthorization': '{name} 인증이 만료되었습니다.', + 'composio.expiredDescription': + '{name} 도구를 다시 활성화하려면 다시 연결하세요. OpenHuman은 OAuth 액세스를 새로 고칠 때까지 이 통합을 사용할 수 없는 상태로 유지합니다.', + 'composio.envVarOverrides': '설정되어 있으며, 이 설정을 재정의합니다.', + 'composio.previewBadge': '미리보기', + 'composio.previewTooltip': + '에이전트 통합이 곧 제공됩니다. 연결할 수는 있지만 에이전트는 아직 이 툴킷을 사용할 수 없습니다.', + 'memory.day.sun': '일', + 'memory.day.mon': '월', + 'memory.day.tue': '화', + 'memory.day.wed': '수', + 'memory.day.thu': '목', + 'memory.day.fri': '금', + 'memory.day.sat': '토', + 'memory.ingesting': '수집 중', + 'memory.ingestionQueued': '대기열에 추가됨', + 'memory.ingestingTitle': '{title} 수집 중', + 'mic.noAudioCaptured': '캡처된 오디오가 없습니다', + 'mic.noSpeechDetected': '음성이 감지되지 않았습니다', + 'mic.lowConfidenceResult': '오디오를 명확하게 이해할 수 없습니다 — 다시 시도해 주세요', + 'mic.failedToStopRecording': '녹음을 중지하지 못했습니다: {message}', + 'mic.transcriptionFailed': '전사에 실패했습니다: {message}', + 'reflections.kind.retrospective': '회고', + 'reflections.kind.derivedFact': '파생된 사실', + 'reflections.kind.moodInsight': '기분 인사이트', + 'reflections.kind.relationshipInsight': '관계 인사이트', + 'graph.tooltip.summary': '요약', + 'graph.tooltip.contact': '연락처', + 'localModel.usage.never': '사용 안 함', + 'localModel.usage.mediumLoad': '중간 부하', + 'localModel.usage.lowLoad': '낮은 부하', + 'localModel.usage.idleMode': '유휴 모드', + 'localModel.rebootstrapComplete': '모델 재부트스트랩 완료.', + 'localModel.modelsVerified': '로컬 모델 확인 완료.', + 'accounts.addModal.allConnected': '모두 연결됨', + 'accounts.addModal.title': '계정 추가', + 'accounts.respondQueue.empty': '비어 있음', + 'accounts.respondQueue.hide': '응답 대기열 숨기기', + 'accounts.respondQueue.loadFailed': '응답 대기열을 불러오지 못했습니다', + 'accounts.respondQueue.loading': '대기열 불러오는 중…', + 'accounts.respondQueue.pending': '대기 중', + 'accounts.respondQueue.show': '응답 대기열 표시', + 'accounts.respondQueue.title': '응답 대기열', + 'accounts.webviewHost.almostReady': '거의 준비됨...', + 'accounts.webviewHost.loadTimeout': 'Webview 로드 시간 초과', + 'accounts.webviewHost.loading': '{providerName} 불러오는 중...', + 'accounts.webviewHost.loadingAccount': '계정 불러오는 중', + 'accounts.webviewHost.restoringSession': '세션 복원 중...', + 'accounts.webviewHost.retryLoading': '다시 불러오기', + 'accounts.webviewHost.takingLonger': '{providerName}이 예상보다 오래 걸리고 있습니다.', + 'accounts.webviewHost.timeoutHint': '시간 초과 힌트', + 'app.connectionBadge.composio': 'Composio', + 'app.connectionBadge.messaging': '메시징', + 'app.connectionIndicator.connected': 'OpenHuman AI에 연결됨 🚀', + 'app.connectionIndicator.connecting': '연결 중', + 'app.connectionIndicator.coreOffline': '코어 오프라인', + 'app.connectionIndicator.disconnected': '연결 해제됨', + 'app.connectionIndicator.offline': '오프라인', + 'app.connectionIndicator.reconnecting': '다시 연결 중…', + 'app.errorFallback.componentStack': '컴포넌트 스택', + 'app.errorFallback.downloadLatest': '최신 버전 다운로드', + 'app.errorFallback.heading': '제목', + 'app.errorFallback.hint': '힌트', + 'app.errorFallback.reloadApp': '앱 다시 불러오기', + 'app.errorFallback.subheading': '부제목', + 'app.errorFallback.tryRecover': '복구 시도', + 'app.localAiDownload.installing': '설치 중...', + 'app.localAiDownload.preparing': '준비 중...', + 'app.openhumanLink.accounts.continueWith': '{label} 로그인으로 계속', + 'app.openhumanLink.accounts.done': '완료', + 'app.openhumanLink.accounts.intro': '소개', + 'app.openhumanLink.accounts.webviewNote': 'Webview 안내', + 'app.openhumanLink.billing.openDashboard': '대시보드 열기', + 'app.openhumanLink.billing.stayOnTrial': '체험판 유지', + 'app.openhumanLink.billing.trialCredit': '체험 크레딧', + 'app.openhumanLink.billing.trialDesc': '체험 설명', + 'app.openhumanLink.defaultBody': + '아직 팝업에서 준비되지 않았습니다. 필요하면 전체 설정 페이지를 여세요.', + 'app.openhumanLink.discord.intro': '소개', + 'app.openhumanLink.discord.openInvite': '초대 열기', + 'app.openhumanLink.discord.perk1': '혜택1', + 'app.openhumanLink.discord.perk2': '혜택2', + 'app.openhumanLink.discord.perk3': '혜택3', + 'app.openhumanLink.discord.perk4': '혜택4', + 'app.openhumanLink.done': '완료', + 'app.openhumanLink.loadingChannelSetup': '채널 설정 불러오는 중', + 'app.openhumanLink.maybeLater': '나중에', + 'app.openhumanLink.notifications.asking': 'OS에 요청 중…', + 'app.openhumanLink.notifications.blocked': '차단됨', + 'app.openhumanLink.notifications.blockedStep1': '차단 단계1', + 'app.openhumanLink.notifications.blockedStep2': '차단 단계2', + 'app.openhumanLink.notifications.blockedStep3': '차단 단계3', + 'app.openhumanLink.notifications.intro': '소개', + 'app.openhumanLink.notifications.promptHint': '프롬프트 힌트', + 'app.openhumanLink.notifications.retry': '테스트 알림 다시 시도', + 'app.openhumanLink.notifications.send': '테스트 알림 보내기', + 'app.openhumanLink.notifications.sendFailed': '보낼 수 없습니다: {error}', + 'app.openhumanLink.notifications.sent': + '테스트 알림이 전송되었습니다. 받지 못했다면 시스템 설정 → 알림 → OpenHuman으로 이동해 알림 허용을 켜고 배너 스타일을 지속으로 설정하세요.', + 'app.openhumanLink.skipForNow': '지금은 건너뛰기', + 'app.openhumanLink.telegramUnavailable': 'Telegram을 사용할 수 없음', + 'app.openhumanLink.title.accounts': '앱 연결', + 'app.openhumanLink.title.billing': '결제 및 크레딧', + 'app.openhumanLink.title.discord': '커뮤니티 참여', + 'app.openhumanLink.title.messaging': '채팅 채널 연결', + 'app.openhumanLink.title.notifications': '알림 허용', + 'app.persistRehydration.body': '본문', + 'app.persistRehydration.heading': '제목', + 'app.persistRehydration.resetCta': '초기화 중…', + 'app.persistRehydration.resetting': '초기화 중…', + 'app.routeLoading.initializing': 'OpenHuman 초기화 중...', + 'app.update.currentlyOn': '{version}', + 'app.update.errorFallback': '업데이트 중 문제가 발생했습니다.', + 'app.update.header.default': '업데이트', + 'app.update.header.error': '업데이트 실패', + 'app.update.header.installing': '업데이트 설치 중', + 'app.update.header.readyToInstall': '업데이트 설치 준비 완료', + 'app.update.header.restarting': '다시 시작 중…', + 'app.update.later': '나중에', + 'app.update.newVersionReady': '새 버전을 설치할 준비가 되었습니다.', + 'app.update.progress.downloaded': '{amount} 다운로드됨', + 'app.update.progress.installing': '새 버전 설치 중…', + 'app.update.progress.restarting': '앱 다시 실행 중…', + 'app.update.progress.working': '{percent}%', + 'app.update.restartNote': '다시 시작 안내', + 'app.update.restartNow': '지금 다시 시작', + 'app.update.versionReady': '버전 {newVersion} 설치 준비 완료.', + 'channels.discord.accountLinked': '계정 연결됨', + 'channels.discord.connect': '연결', + 'channels.discord.linkTokenExpired': '링크 토큰이 만료되었습니다. 다시 시도하세요.', + 'channels.discord.linkTokenInstruction': '{token}', + 'channels.discord.linkTokenLabel': '링크 토큰 라벨', + 'channels.discord.linkTokenOnce': '링크 토큰 1회 사용', + 'channels.discord.picker.allPermissionsOk': + '봇이 이 채널에서 필요한 모든 권한을 가지고 있습니다.', + 'channels.discord.picker.botNotInServers': '봇이 서버에 없습니다', + 'channels.discord.picker.category': '카테고리', + 'channels.discord.picker.channel': '채널', + 'channels.discord.picker.checkingPermissions': '권한 확인 중', + 'channels.discord.picker.loadingChannels': '채널 불러오는 중...', + 'channels.discord.picker.loadingServers': '서버 불러오는 중...', + 'channels.discord.picker.missingPermissions': '권한 누락', + 'channels.discord.picker.noChannels': '텍스트 채널을 찾을 수 없습니다', + 'channels.discord.picker.noServers': '서버를 찾을 수 없습니다', + 'channels.discord.picker.selectChannel': '채널 선택', + 'channels.discord.picker.selectServer': '서버 선택', + 'channels.discord.picker.server': '서버', + 'channels.discord.picker.serverChannelSelection': '서버 및 채널 선택', + 'channels.discord.savedRestartRequired': + '채널이 저장되었습니다. 활성화하려면 앱을 다시 시작하세요.', + 'channels.telegram.connect': '연결', + 'channels.telegram.managedDmConnecting': '관리형 DM 연결 중', + 'channels.telegram.managedDmTimeout': '관리형 DM 시간이 초과됨', + 'channels.telegram.reconnect': '다시 연결', + 'channels.telegram.savedRestartRequired': + '채널이 저장되었습니다. 활성화하려면 앱을 다시 시작하세요.', + 'channels.web.alwaysAvailable': '항상 사용 가능', + 'chat.approval.approve': '승인', + 'chat.approval.alwaysAllow': '항상 허용', + 'chat.approval.alwaysAllowHint': '이 도구에 대해 다시 묻지 않도록 항상 허용 목록에 추가합니다', + 'chat.approval.deciding': '작업 중…', + 'chat.approval.deny': '거부', + 'chat.approval.error': '결정을 기록할 수 없습니다. 다시 시도하세요.', + 'chat.approval.fallback': '에이전트가 승인이 필요한 작업을 실행하려고 합니다.', + 'chat.approval.title': '승인 필요', + 'chat.approval.tool': '도구:', + 'channels.authMode.managed_dm': 'OpenHuman로 로그인', + 'channels.authMode.oauth': 'OAuth 로그인', + 'channels.authMode.bot_token': '자체 봇 토큰 사용', + 'channels.authMode.api_key': '자체 API 키 사용', + 'channels.fieldRequired': '{field}이 필요합니다.', + 'channels.mcp.title': 'MCP 서버', + 'channels.mcp.description': + 'AI에 새로운 도구를 추가하는 Model Context Protocol 서버를 탐색하고 관리합니다.', + 'channels.discord.displayName': 'Discord', + 'channels.discord.description': 'Discord을(를) 통해 메시지를 보내고 받습니다.', + 'channels.discord.authMode.bot_token.description': '자신만의 Discord 봇 토큰을 제공하세요.', + 'channels.discord.authMode.oauth.description': + 'OAuth을 통해 OpenHuman 봇을 Discord 서버에 설치합니다.', + 'channels.discord.authMode.managed_dm.description': + '개인 Discord 계정을 OpenHuman 봇에 연결하세요.', + 'channels.discord.fields.bot_token.label': '봇 토큰', + 'channels.discord.fields.bot_token.placeholder': '귀하의 Discord 봇 토큰', + 'channels.discord.fields.guild_id.label': '서버(길드) ID', + 'channels.discord.fields.guild_id.placeholder': '선택 사항: 특정 서버로 제한', + 'channels.telegram.displayName': 'Telegram', + 'channels.telegram.description': '메시지 보내기 및 받기 Telegram.', + 'channels.telegram.authMode.managed_dm.description': + 'OpenHuman Telegram 봇에게 직접 메시지를 보냅니다.', + 'channels.telegram.authMode.bot_token.description': + '@BotFather에서 자신만의 Telegram 봇 토큰을 제공하세요.', + 'channels.telegram.fields.bot_token.label': '봇 토큰', + 'channels.telegram.fields.bot_token.placeholder': '123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11', + 'channels.telegram.fields.allowed_users.label': '허용된 사용자', + 'channels.telegram.fields.allowed_users.placeholder': '쉼표로 구분 Telegram 사용자 이름', + 'channels.telegram.remoteControlTitle': '원격 제어(Telegram)', + 'channels.telegram.remoteControlBody': + '허용된 Telegram 채팅에서 /status, /sessions, /new 또는 /help를 보냅니다. 모델 라우팅은 여전히 ​​/model 및 /models를 사용합니다.', + 'channels.web.displayName': '웹', + 'channels.web.description': '내장된 웹 UI를 통해 채팅합니다.', + 'channels.web.authMode.managed_dm.description': + '내장된 웹 채팅을 사용하세요. 설정이 필요하지 않습니다.', + 'channels.yuanbao.connect': 'Connect', + 'channels.yuanbao.connecting': '연결 중…', + 'channels.yuanbao.fieldRequired': '{field}은(는) 필수입니다', + 'channels.yuanbao.reconnect': 'Reconnect', + 'channels.yuanbao.savedRestartRequired': '채널이 저장되었습니다. 활성화하려면 앱을 재시작하세요.', + 'channels.yuanbao.unexpectedStatus': '예상치 못한 연결 상태: {status}', + 'chat.unsubscribeApproval.approve': '승인 및 구독 취소', + 'chat.unsubscribeApproval.approved': '✓ 구독 취소가 완료되었습니다.', + 'chat.unsubscribeApproval.denied': '✕ 요청이 거부되었습니다.', + 'chat.unsubscribeApproval.deny': '거부', + 'chat.unsubscribeApproval.processing': '처리 중...', + 'chat.unsubscribeApproval.title': '구독 취소 요청', + 'commandPalette.ariaLabel': '명령 팔레트', + 'commandPalette.description': '설명', + 'commandPalette.label': '명령', + 'commandPalette.noResults': '결과 없음', + 'commandPalette.placeholder': '명령을 입력하거나 검색…', + 'commandPalette.searchAria': '명령 검색', + 'commandPalette.shortcutHint': '모든 단축키를 보려면 ?를 누르세요', + 'commandPalette.title': '명령 팔레트', + 'kbd.ariaLabel': '키보드 단축키: {shortcut}', + 'iosMascot.connectedTo': '연결됨', + 'iosMascot.defaultPairedLabel': '데스크탑', + 'iosMascot.disconnect': '연결 끊기', + 'iosMascot.error.generic': '문제가 발생했습니다. 다시 시도해 주세요.', + 'iosMascot.error.sendFailed': '전송하지 못했습니다. 연결을 확인하세요.', + 'iosMascot.pushToTalk': '푸시하여 말하기', + 'iosMascot.sendMessage': '메시지 보내기', + 'iosMascot.thinking': '생각 중...', + 'iosMascot.typeMessage': '메시지 입력...', + 'iosPair.connectedLoading': '연결되었습니다! 로드 중...', + 'iosPair.connecting': '데스크톱에 연결하는 중...', + 'iosPair.desktopLabel': '데스크톱', + 'iosPair.error.camera': '카메라 스캔에 실패했습니다. 카메라 권한을 확인하고 다시 시도하세요.', + 'iosPair.error.connectionFailed': + '연결에 실패했습니다. 데스크탑 앱이 실행 중인지 확인하고 다시 시도하세요.', + 'iosPair.error.invalidQr': + '유효하지 않은 QR 코드입니다. OpenHuman 페어링 코드를 스캔하고 있는지 확인하세요.', + 'iosPair.error.unreachableDesktop': + '데스크탑에 연결할 수 없습니다. 두 기기가 모두 온라인 상태인지 확인하고 다시 시도하세요.', + 'iosPair.expired': 'QR code이 만료되었습니다. 데스크탑에 코드 재생성을 요청하십시오.', + 'iosPair.instructions': + '데스크탑에서 OpenHuman을 열고 설정 > 기기로 이동한 후 "기기 페어링"을 탭하여 QR 코드를 표시하세요.', + 'iosPair.retryScan': '스캔 재시도', + 'iosPair.scanQrCode': '스캔 QR code', + 'iosPair.scannerOpening': '스캐너 여는 중...', + 'iosPair.step.openDesktop': '데스크톱에서 OpenHuman 열기', + 'iosPair.step.openSettings': '설정 > 장치로 이동', + 'iosPair.step.showQr': '"기기 페어링"을 탭하여 QR 표시', + 'iosPair.title': '데스크톱과 페어링', + 'composio.connect.additionalConfigRequired': '추가 구성이 필요합니다', + 'composio.connect.atlassianSubdomainHint': 'acme', + 'composio.connect.atlassianSubdomainLabel': 'Atlassian 하위 도메인 라벨', + 'composio.connect.connect': '연결', + 'composio.connect.dynamicsOrgNameHint': + '예를 들어 myorg.crm.dynamics.com의 경우 "myorg"입니다. 전체 URL이 아닌 짧은 조직 이름만 입력하세요.', + 'composio.connect.dynamicsOrgNameLabel': 'Dynamics 365 조직 이름', + 'composio.connect.connectionFailed': '연결 실패(상태: {status}).', + 'composio.connect.disconnectFailed': '연결 해제 실패: {msg}', + 'composio.connect.disconnecting': '연결 해제 중…', + 'composio.connect.idleDescription': '다음을 연결하세요:', + 'composio.connect.idleDescriptionSuffix': + '계정. 브라우저 창을 열면 그곳에서 접근을 승인하고, 이 앱이 자동으로 연결을 감지합니다.', + 'composio.connect.isConnected': '연결되었습니다.', + 'composio.connect.manage': '관리', + 'composio.connect.needsFieldsPrefix': '연결하려면', + 'composio.connect.needsFieldsSuffix': + '좀 더 많은 정보가 필요합니다. 아래의 누락된 필드를 입력하고 다시 시도하세요.', + 'composio.connect.needsSubdomain': '연결하려면', + 'composio.connect.needsSubdomainSuffix': + 'Atlassian 하위 도메인(예: acme.atlassian.net의 경우 acme)을 입력하고 다시 시도하세요.', + 'composio.connect.oauthComplete': 'OAuth 완료 대기 중…', + 'composio.connect.oauthTimeout': 'OAuth 시간이 초과되었습니다', + 'composio.connect.permissions': '권한', + 'composio.connect.permissionsDefault': '읽기 + 쓰기가 기본적으로 활성화됨', + 'composio.connect.permissionsNote': '노출할 수 있음', + 'composio.connect.permissionsNoteSuffix': + 'OpenHuman 자체 에이전트 권한은 아래에서 읽기, 쓰기, 관리자 토글로 제어됩니다.', + 'composio.connect.reopenBrowser': '브라우저 다시 열기', + 'composio.connect.requestingUrl': '연결 URL 요청 중…', + 'composio.connect.requiredFieldEmpty': '이 필드는 필수입니다.', + 'composio.connect.retryConnection': '연결 다시 시도', + 'composio.connect.scopeLoadError': '범위 기본 설정을 불러올 수 없습니다: {msg}', + 'composio.connect.scopeSaveError': '{key} 범위를 저장할 수 없습니다: {msg}', + 'composio.connect.scope.read': '읽기', + 'composio.connect.scope.readHint': '에이전트가 이 연결에서 데이터를 읽을 수 있도록 허용합니다.', + 'composio.connect.scope.write': '쓰기', + 'composio.connect.scope.writeHint': + '에이전트가 이 연결을 통해 데이터를 생성하거나 수정할 수 있도록 허용합니다.', + 'composio.connect.scope.admin': '관리자', + 'composio.connect.scope.adminHint': + '에이전트가 설정, 권한 또는 파괴적인 작업을 관리하도록 허용합니다.', + 'composio.connect.subdomainInvalid': + '전체 URL이 아닌 짧은 하위 도메인만 입력하세요(예: "acme"). 문자, 숫자, 하이픈만 포함해야 합니다.', + 'composio.connect.subdomainRequired': '계속하려면 Atlassian 하위 도메인을 입력하세요.', + 'composio.connect.wabaIdHint': + 'GET /me/businesses를 통해 찾은 다음 Meta 액세스 토큰을 사용하여 /{business_id}/owned_whatsapp_business_accounts를 GET하세요.', + 'composio.connect.wabaIdLabel': 'WABA ID 라벨', + 'composio.connect.wabaIdRequired': + '계속하려면 WhatsApp Business Account ID (WABA ID)를 입력하세요.', + 'composio.connect.waitingFor': '대기 중:', + 'composio.connect.waitingHint': '방금 열린 브라우저 창에서 연결을 완료하세요.', + 'composio.triggers.heading': '트리거', + 'composio.triggers.listenFrom': '다음에서 이벤트 수신:', + 'composio.triggers.loadError': '트리거를 불러올 수 없습니다', + 'composio.triggers.needsConfiguration': '구성이 필요합니다', + 'composio.triggers.noneAvailable': '현재 사용할 수 있는 트리거가 없습니다:', + 'conversations.taskKanban.moveLeft': '왼쪽으로 이동', + 'conversations.taskKanban.moveRight': '오른쪽으로 이동', + 'conversations.taskKanban.title': '작업', + 'conversations.taskKanban.approval.default': '기본값', + 'conversations.taskKanban.approval.notRequired': '필요 없음', + 'conversations.taskKanban.approval.notRequiredBadge': '승인 없음', + 'conversations.taskKanban.approval.required': '필수', + 'conversations.taskKanban.approval.requiredBadge': '승인', + 'conversations.taskKanban.approval.requiredBeforeExecution': '실행 전 필수', + 'conversations.taskKanban.briefButton': '작업 브리프', + 'conversations.taskKanban.briefTitle': '작업 브리프', + 'conversations.taskKanban.closeBrief': '작업 브리프 닫기', + 'conversations.taskKanban.field.acceptanceCriteria': '수락 기준', + 'conversations.taskKanban.field.allowedTools': '허용된 도구', + 'conversations.taskKanban.field.approval': '승인', + 'conversations.taskKanban.field.assignedAgent': '할당된 에이전트', + 'conversations.taskKanban.field.blocker': '차단 요소', + 'conversations.taskKanban.field.evidence': '증거', + 'conversations.taskKanban.field.notes': '메모', + 'conversations.taskKanban.field.objective': '목표', + 'conversations.taskKanban.field.plan': '계획', + 'conversations.taskKanban.field.status': '상태', + 'conversations.taskKanban.field.title': '제목', + 'conversations.taskKanban.saveChanges': '변경 사항 저장', + 'conversations.taskKanban.deleteCard': '삭제', + 'conversations.taskKanban.updateFailed': + '작업을 업데이트할 수 없어 변경 사항이 저장되지 않았습니다.', + 'conversations.toolTimeline.turn': '턴', + 'conversations.toolTimeline.workerThread': '워커 스레드', + 'daemon.serviceBlockingGate.body': '본문', + 'daemon.serviceBlockingGate.downloadHint': '다운로드 안내', + 'daemon.serviceBlockingGate.downloadLatest': '최신 버전 다운로드', + 'daemon.serviceBlockingGate.retryCore': '코어 다시 시도', + 'daemon.serviceBlockingGate.retryFailed': + '다시 시도에 실패했습니다. 최신 앱 빌드를 다운로드하고 다시 시도하세요.', + 'daemon.serviceBlockingGate.retrying': '다시 시도 중...', + 'daemon.serviceBlockingGate.title': 'OpenHuman 코어를 사용할 수 없습니다', + 'home.banners.discordSubtitle': 'Discord 부제목', + 'home.banners.discordTitle': 'Discord 참여하기', + 'home.banners.earlyBirdDismiss': '얼리버드 배너 닫기', + 'home.banners.earlyBirdFirstSub': '첫 구독.', + 'home.banners.earlyBirdOn': '얼리버드 적용', + 'home.banners.earlyBirdTitle': '첫 1,000명의 사용자는 60% 할인을 받습니다.', + 'home.banners.earlyBirdUseCode': '얼리버드 코드 사용', + 'home.banners.getSubscription': '구독하기', + 'home.banners.promoCreditsBody': 'OpenHuman을 사용해 보고, 더 필요할 때', + 'home.banners.promoCreditsTitle': '{amount}의 프로모션 크레딧이 있습니다.', + 'home.banners.promoCreditsUsage': '10배 더 많은 사용량을 받으세요.', + 'intelligence.memoryChunk.detail.chunk': '청크', + 'intelligence.memoryChunk.detail.copyChunkId': '청크 ID 복사', + 'intelligence.memoryChunk.detail.embeddingInfo': 'bge-m3 1024dim', + 'intelligence.memoryChunk.detail.noEmbedding': '임베딩 없음', + 'intelligence.memoryChunk.letterhead.from': '보낸 사람', + 'intelligence.memoryChunk.letterhead.to': '받는 사람', + 'intelligence.memoryChunk.mentioned.chunkOne': '청크 1개', + 'intelligence.memoryChunk.mentioned.chunkOther': '청크 {count}개', + 'intelligence.memoryChunk.mentioned.heading': '언급됨', + 'intelligence.memoryChunk.scoreBars.ariaScore': '{name} 점수 {pct}퍼센트', + 'intelligence.memoryChunk.scoreBars.atThreshold': '{threshold} 기준', + 'intelligence.memoryChunk.scoreBars.dropped': '제외됨', + 'intelligence.memoryChunk.scoreBars.heading': '유지된 이유', + 'intelligence.memoryChunk.scoreBars.kept': '유지됨', + 'intelligence.diagram.title': '아키텍처 다이어그램', + 'intelligence.diagram.description': + '구성된 다이어그램 엔드포인트에서 가져온 최신 로컬 아키텍처 출력입니다.', + 'intelligence.diagram.refresh': 'Refresh', + 'intelligence.diagram.refreshAria': '다이어그램 새로 고침', + 'intelligence.diagram.emptyTitle': '아직 사용 가능한 다이어그램이 없습니다', + 'intelligence.diagram.emptyDescription': + '오케스트레이터에서 아키텍처 다이어그램을 생성하면 이 패널이 구성된 로컬 엔드포인트에서 새로 고침됩니다.', + 'intelligence.diagram.skillInstallCommand': 'npx skills add yizhiyanhua-ai/fireworks-tech-graph', + 'intelligence.diagram.promptExample': + '현재 스웜의 아키텍처 다이어그램을 다크 터미널 스타일로 생성하세요', + 'intelligence.diagram.imageAlt': '최신 생성된 OpenHuman 아키텍처 다이어그램', + 'intelligence.diagram.refreshesEvery': '{seconds}초마다 새로 고침', + 'intelligence.memoryText.entityTypePrefix': '엔터티 유형', + 'intelligence.screenDebug.active': '활성', + 'intelligence.screenDebug.app': '앱', + 'intelligence.screenDebug.bounds': '경계', + 'intelligence.screenDebug.captureAlt': '캡처 테스트 결과', + 'intelligence.screenDebug.captureFailed': '실패', + 'intelligence.screenDebug.captureSuccess': '성공', + 'intelligence.screenDebug.captureTest': '캡처 테스트', + 'intelligence.screenDebug.capturing': '캡처 중', + 'intelligence.screenDebug.frames': '프레임', + 'intelligence.screenDebug.idle': '유휴', + 'intelligence.screenDebug.lastApp': '마지막 앱', + 'intelligence.screenDebug.mode': '모드', + 'intelligence.screenDebug.permAccessibility': '접근성 권한', + 'intelligence.screenDebug.permInput': '입력 권한', + 'intelligence.screenDebug.permScreen': '접근성', + 'intelligence.screenDebug.permissions': '권한', + 'intelligence.screenDebug.platformNotSupported': '플랫폼이 지원되지 않음', + 'intelligence.screenDebug.recentVisionSummaries': '최근 비전 요약', + 'intelligence.screenDebug.session': '세션', + 'intelligence.screenDebug.size': '크기', + 'intelligence.screenDebug.status': '상태', + 'intelligence.screenDebug.testCapture': '테스트 캡처', + 'intelligence.screenDebug.time': '시간', + 'intelligence.screenDebug.title': '제목', + 'intelligence.screenDebug.unknown': '알 수 없음', + 'intelligence.screenDebug.visionQueue': '비전 대기열', + 'intelligence.screenDebug.visionState': '비전 상태', + 'intelligence.tasks.activeBoardOne': '대화 전반에 활성 보드 1개', + 'intelligence.tasks.activeBoardOther': '대화 전반에 활성 보드 {count}개', + 'intelligence.tasks.empty': '아직 에이전트 작업 보드가 없습니다', + 'intelligence.tasks.emptyHint': '빈 상태 안내', + 'intelligence.tasks.failedToLoad': '불러오지 못했습니다', + 'intelligence.tasks.live': '실시간', + 'intelligence.tasks.loadingBoards': '작업 보드 불러오는 중…', + 'intelligence.tasks.threadPrefix': '스레드 {thread}', + 'intelligence.tasks.subtitle': '워크스페이스 전반의 내 작업과 에이전트 작업 보드입니다.', + 'intelligence.tasks.newTask': '새 작업', + 'intelligence.tasks.personalBoardTitle': '에이전트 작업', + 'intelligence.tasks.personalEmpty': '아직 개인 작업이 없습니다', + 'intelligence.tasks.composer.title': '새 작업', + 'intelligence.tasks.composer.titleLabel': '제목', + 'intelligence.tasks.composer.titlePlaceholder': '무엇을 해야 하나요?', + 'intelligence.tasks.composer.statusLabel': '상태', + 'intelligence.tasks.composer.attachLabel': '대화에 첨부', + 'intelligence.tasks.composer.attachNone': '개인용(대화 없음)', + 'intelligence.tasks.composer.objectiveLabel': '목표', + 'intelligence.tasks.composer.objectivePlaceholder': '선택 사항 — 원하는 결과', + 'intelligence.tasks.composer.notesLabel': '메모', + 'intelligence.tasks.composer.notesPlaceholder': '선택 사항 메모', + 'intelligence.tasks.composer.create': '작업 만들기', + 'intelligence.tasks.composer.creating': '만드는 중…', + 'intelligence.tasks.composer.createFailed': '작업을 만들 수 없습니다', + 'notifications.card.dismiss': '알림 닫기', + 'notifications.card.importanceTitle': '중요도: {pct}%', + 'notifications.center.empty': '아직 알림이 없습니다', + 'notifications.center.emptyHint': '빈 상태 안내', + 'notifications.center.filterAll': '전체 필터', + 'notifications.center.markAllRead': '모두 읽음으로 표시', + 'notifications.center.title': '알림', + 'oauth.button.connecting': '연결 중...', + 'oauth.button.loopbackTimeout': + '로그인 시간 초과 — 브라우저가 OAuth 리디렉션을 완료하지 못했습니다. 다시 시도해 주세요.', + 'oauth.login.continueWith': '다음으로 계속:', + 'onboarding.contextGathering.buildingDesc': '작성 설명', + 'onboarding.contextGathering.buildingProfile': '프로필을 만드는 중...', + 'onboarding.contextGathering.continueToChat': '채팅으로 계속', + 'onboarding.contextGathering.coreAlive': + 'Core에 접근 가능합니다. 처음 실행하는 데 1분 정도 걸릴 수 있습니다.', + 'onboarding.contextGathering.coreAliveProbing': '코어 연결 확인 중…', + 'onboarding.contextGathering.coreUnreachable': + '코어가 응답하지 않습니다. 계속해서 나중에 다시 시도할 수 있습니다.', + 'onboarding.contextGathering.errorDesc': + '채팅이 준비되었습니다. 전체 프로필은 백그라운드에서 계속 만들 예정이므로 지금 계속하고 나중에 점진적으로 개선할 수 있습니다.', + 'onboarding.contextGathering.stillWorkingDesc': + '로컬 모델과 도구를 준비하는 동안 처음 실행하는 데 30~60초 정도 걸릴 수 있습니다. 언제든지 계속 채팅할 수 있습니다. 프로필 빌드는 백그라운드에서 계속 실행됩니다.', + 'onboarding.contextGathering.stillWorkingTitle': '아직 프로필 작업 중입니다…', + 'onboarding.contextGathering.title': '컨텍스트 수집', + 'openhuman.team_list_teams': '팀 목록 팀', + 'overlay.ariaAttention': '주의 메시지', + 'overlay.ariaCompanion': '컴패니언 활성', + 'overlay.ariaOrb': 'OpenHuman 오버레이', + 'overlay.ariaVoiceActive': '음성 입력 활성', + 'overlay.companion.error': '오류', + 'overlay.companion.listening': '듣는 중…', + 'overlay.companion.pointing': '가리키는 중…', + 'overlay.companion.speaking': '말하는 중…', + 'overlay.companion.thinking': '생각 중...', + 'overlay.orbTitle': '드래그하여 이동 · 두 번 클릭하여 위치 초기화', + 'pages.settings.account.connections': '연결', + 'pages.settings.account.connectionsDesc': '연결된 계정 연결을 검토하고 관리합니다', + 'pages.settings.account.migration': '다른 어시스턴트에서 가져오기', + 'pages.settings.account.migrationDesc': + 'OpenClaw(또는 곧 Hermes)의 메모리와 메모를 이 작업 공간으로 마이그레이션합니다.', + 'pages.settings.account.privacy': '개인정보 보호', + 'pages.settings.account.privacyDesc': '데이터 공유 및 익명화된 사용 기본 설정을 관리합니다', + 'pages.settings.account.recoveryPhrase': '복구 문구', + 'pages.settings.account.recoveryPhraseDesc': + '암호화 및 지갑 접근을 위한 BIP39 복구 문구를 관리합니다', + 'pages.settings.account.team': '팀', + 'pages.settings.account.teamDesc': '팀, 멤버 및 초대를 관리합니다', + 'pages.settings.accountSection.description': '복구 문구, 팀, 연결 및 개인정보 설정.', + 'pages.settings.accountSection.title': '계정', + 'pages.settings.ai.llm': 'LLM', + 'pages.settings.ai.llmDesc': 'LLM 설명', + 'pages.settings.ai.voice': '음성', + 'pages.settings.ai.voiceDesc': '음성 설명', + 'pages.settings.aiSection.description': '언어 모델 제공업체, 로컬 Ollama 및 음성(STT / TTS).', + 'pages.settings.aiSection.title': 'AI', + 'pages.settings.composioSection.title': 'Composio', + 'pages.settings.composioSection.description': + 'Composio에서 제공하는 통합에 대한 라우팅, 트리거 및 기록입니다.', + 'settings.developerMenu.composio.title': 'Composio', + 'settings.developerMenu.composio.desc': '라우팅 모드, 통합 트리거 및 트리거 기록 아카이브.', + 'pages.settings.features.desktopCompanion': '데스크탑 동반자', + 'pages.settings.features.desktopCompanionDesc': + '화면 인식 기능이 있는 음성 도우미 — 듣고, 보고, 말하고, 가리킵니다.', + 'pages.settings.features.messagingChannels': '메시징 채널', + 'pages.settings.features.messagingChannelsDesc': '메시징 채널 설명', + 'pages.settings.features.notifications': '알림', + 'pages.settings.features.notificationsDesc': '알림 설명', + 'pages.settings.features.screenAwareness': '화면 인식', + 'pages.settings.features.screenAwarenessDesc': '화면 인식 설명', + 'pages.settings.features.tools': '도구', + 'pages.settings.features.toolsDesc': '도구 설명', + 'pages.settings.featuresSection.description': '화면 인식, 메시징 및 도구.', + 'pages.settings.featuresSection.title': '기능', + 'privacy.dataKind.credentials': '자격 증명', + 'privacy.dataKind.derived': '파생됨', + 'privacy.dataKind.diagnostics': '진단', + 'privacy.dataKind.metadata': '메타데이터', + 'privacy.dataKind.raw': '원본', + 'privacy.whatLeaves.link.label': '내 컴퓨터를 떠나는 데이터는 무엇인가요?', + 'rewards.community.achievementsUnlocked': '{total}개 중 {unlocked}개 업적 잠금 해제됨', + 'rewards.community.connectDiscord': 'Discord 연결', + 'rewards.community.cumulativeTokens': '누적 토큰', + 'rewards.community.currentStreak': '현재 연속 기록', + 'rewards.community.discordLinkedNotInGuild': '연결됨, 하지만 서버 멤버가 아님', + 'rewards.community.discordMember': '서버에 참여함', + 'rewards.community.discordNotLinked': '연결되지 않음', + 'rewards.community.discordServer': 'Discord 서버', + 'rewards.community.discordStatusUnavailable': '멤버십 상태를 사용할 수 없음', + 'rewards.community.discordWaiting': '백엔드 동기화 대기 중', + 'rewards.community.heroSubtitle': + 'Discord 계정을 연결하여 독점 채널, 후원자 배지 및 백엔드 동기화 보상을 잠금 해제하세요.', + 'rewards.community.heroTitle': '보상 및 Discord 역할 받기', + 'rewards.community.joinDiscord': 'Discord 참여', + 'rewards.community.loadingRewards': '보상 불러오는 중…', + 'rewards.community.locked': '잠김', + 'rewards.community.retrying': '다시 시도 중…', + 'rewards.community.rolesAndRewards': '역할 및 보상', + 'rewards.community.streakDays': '{n}일', + 'rewards.community.syncPending': '보상 동기화 대기 중', + 'rewards.community.syncPendingDesc': '동기화 대기 설명', + 'rewards.community.syncUnavailable': '동기화를 사용할 수 없음', + 'rewards.community.tryAgain': '다시 시도 중…', + 'rewards.community.unknown': '알 수 없음', + 'rewards.community.unlocked': '잠금 해제됨', + 'rewards.community.yourProgress': '내 진행 상황', + 'rewards.coupon.colCode': '코드', + 'rewards.coupon.colRedeemed': '교환됨', + 'rewards.coupon.colReward': '보상', + 'rewards.coupon.colStatus': '상태', + 'rewards.coupon.loadingHistory': '보상 기록 불러오는 중…', + 'rewards.coupon.noCodes': '아직 교환된 보상 코드가 없습니다.', + 'rewards.coupon.pending': '대기 중', + 'rewards.coupon.placeholder': '쿠폰 코드', + 'rewards.coupon.promoCredits': '프로모션 크레딧', + 'rewards.coupon.recentRedemptions': '최근 교환', + 'rewards.coupon.redeemAccepted': + '{code}이(가) 승인되었습니다. 필요한 작업이 완료되면 {amount}이(가) 잠금 해제됩니다.', + 'rewards.coupon.redeemButton': '코드 교환', + 'rewards.coupon.redeemSuccess': + '{code}이(가) 교환되었습니다. {amount}이(가) 크레딧에 추가되었습니다.', + 'rewards.coupon.redeemedCodes': '교환된 코드', + 'rewards.coupon.redeeming': '교환 중...', + 'rewards.coupon.statusApplied': '적용됨', + 'rewards.coupon.statusPendingAction': '작업 대기 중', + 'rewards.coupon.statusRedeemed': '교환됨', + 'rewards.coupon.subtitle': '부제목', + 'rewards.coupon.title': '쿠폰 코드 교환', + 'rewards.referralSection.activity': '추천 활동', + 'rewards.referralSection.apply': '적용 중…', + 'rewards.referralSection.applying': '적용 중…', + 'rewards.referralSection.colReferredUser': '추천된 사용자', + 'rewards.referralSection.colReward': '보상', + 'rewards.referralSection.colStatus': '상태', + 'rewards.referralSection.colUpdated': '업데이트됨', + 'rewards.referralSection.completed': '완료됨', + 'rewards.referralSection.copyCode': '코드 복사', + 'rewards.referralSection.copyFailed': '복사 실패', + 'rewards.referralSection.haveCode': '추천 코드가 있나요?', + 'rewards.referralSection.haveCodeDesc': '코드 있음 설명', + 'rewards.referralSection.linked': '연결됨', + 'rewards.referralSection.linkedCode': '(코드 {code})', + 'rewards.referralSection.loading': '추천 프로그램 불러오는 중…', + 'rewards.referralSection.retry': '재시도', + 'rewards.referralSection.noReferrals': '추천 없음', + 'rewards.referralSection.pendingReferrals': '대기 중인 추천', + 'rewards.referralSection.placeholder': '추천 코드', + 'rewards.referralSection.share': '공유', + 'rewards.referralSection.statusCompleted': '완료 상태', + 'rewards.referralSection.statusExpired': '만료 상태', + 'rewards.referralSection.statusJoined': '참여 상태', + 'rewards.referralSection.subtitle': '부제목', + 'rewards.referralSection.title': '친구를 초대하고 크레딧 받기', + 'rewards.referralSection.totalEarned': '총 적립', + 'rewards.referralSection.yourCode': '내 코드', + 'settings.ai.addCloudProvider': '클라우드 제공업체 추가', + 'settings.ai.addProvider': '저장 중…', + 'settings.ai.apiKeyFieldLabel': 'API 키 필드 라벨', + 'settings.ai.apiKeyRequired': '계속하려면 API 키를 붙여넣어 주세요.', + 'settings.ai.apiKeyStoredEncrypted': 'API 키가 암호화되어 저장됨', + 'settings.ai.apiKeysEncrypted': 'auth-profiles.json', + 'settings.ai.clearStoredKey': '저장된 키 지우기', + 'settings.ai.connectProvider': '제공업체 연결', + 'settings.ai.customRouting': '사용자 지정 라우팅', + 'settings.ai.defaultResolvesTo': '기본값은 다음으로 확인됨', + 'settings.ai.discard': '취소', + 'settings.ai.editProvider': '제공업체 편집', + 'settings.ai.llmProviders': 'LLM 제공업체', + 'settings.ai.llmProvidersDesc': 'LLM 제공업체 설명', + 'settings.ai.localOllama': '로컬(Ollama)', + 'settings.ai.modelLabel': '모델', + 'settings.ai.noCustomProviders': '사용자 지정 제공업체 없음', + 'settings.ai.openAiCompat.authHeaderExample': '권한 부여: Bearer ', + 'settings.ai.openAiCompat.authHeaderLabel': '인증 헤더', + 'settings.ai.openAiCompat.baseUrlLabel': '기본 URL', + 'settings.ai.openAiCompat.baseUrlUnavailable': '사용할 수 없음', + 'settings.ai.openAiCompat.clearKey': '키 지우기', + 'settings.ai.openAiCompat.description': + '로컬 하네스를 이 /v1 서버로 지정하면 아래에 구성된 제공업체를 통해 라우팅됩니다. 인증에는 앱 내부 코어 bearer가 아니라 여기에서 설정한 고정 키를 사용합니다.', + 'settings.ai.openAiCompat.keyConfigured': '키 구성됨', + 'settings.ai.openAiCompat.keyRequired': '키 필요', + 'settings.ai.openAiCompat.rotateKey': '키 회전', + 'settings.ai.openAiCompat.setKey': '키 설정', + 'settings.ai.openAiCompat.title': 'OpenAI 호환 엔드포인트', + 'settings.ai.providerLabel': '제공업체', + 'skills.mcpComingSoon.title': 'MCP 서버', + 'skills.mcpComingSoon.description': + 'MCP 서버 관리가 곧 제공됩니다. 이 탭에서 MCP 서버 통합을 검색, 연결 및 모니터링할 수 있게 됩니다.', + 'settings.ai.routing': '라우팅', + 'settings.ai.routingCustom': '사용자 지정 라우팅', + 'settings.ai.routingDefault': '기본값', + 'settings.ai.routingDesc': '라우팅 설명', + 'settings.ai.saveChanges': '저장 중…', + 'settings.ai.saving': '저장 중…', + 'settings.ai.unsavedChange': '저장되지 않은 변경 사항', + 'settings.ai.unsavedChanges': '저장되지 않은 변경 사항', + 'settings.ai.workloadGroupBackground': '백그라운드 작업 그룹', + 'settings.ai.workloadGroupChat': '채팅 작업 그룹', + 'settings.ai.disconnectProvider': '{label} 연결 끊기', + 'settings.ai.connectProviderLabel': '{label} 연결', + 'settings.ai.defaultLocalEndpoint': 'http://localhost:11434/v1', + 'settings.ai.endpointUrlLabel': '끝점 URL', + 'settings.ai.localRuntimeHelper': + '{label}에 연결할 수 있는 위치입니다. 기본값은 localhost입니다. 공유 인스턴스를 사용하려면 원격 호스트(예: http://10.0.0.4:11434/v1)를 가리키세요.', + 'settings.ai.endpointUrlRequired': '엔드포인트 URL이(가) 필요합니다.', + 'settings.ai.endpointProtocolRequired': '엔드포인트는 http:// 또는 https://로 시작해야 합니다.', + 'settings.ai.connectProviderDialog': '{label}에 연결', + 'settings.ai.or': '또는', + 'settings.ai.openRouterOauthDescription': + 'OpenRouter로 로그인하고 PKCE를 사용해 사용자가 제어하는 API 키를 가져옵니다.', + 'settings.ai.connecting': '연결 중...', + 'settings.ai.backgroundLoops': '백그라운드 루프', + 'settings.ai.backgroundLoopsDesc': + '채팅 메시지 없이 실행되는 항목을 확인하고, 하트비트 작업을 일시 중지하며, 최근 크레딧 원장 행을 검사합니다.', + 'settings.ai.heartbeatControls': '하트비트 제어', + 'settings.ai.heartbeatControlsDesc': + '기본값은 꺼짐입니다. 활성화하면 루프가 시작되고 비활성화하면 실행 중인 작업이 중단됩니다.', + 'settings.ai.heartbeatLoop': '하트비트 루프', + 'settings.ai.heartbeatLoopDesc': '플래너 및 선택적 잠재의식 추론을 위한 마스터 스케줄러입니다.', + 'settings.ai.subconsciousInference': '잠재의식 추론', + 'settings.ai.subconsciousInferenceDesc': '하트비트 틱에서 모델 기반 작업/회고 평가를 실행합니다.', + 'settings.ai.calendarMeetingChecks': '캘린더 회의 확인', + 'settings.ai.calendarMeetingChecksDesc': + '활성 Google Calendar 연결의 캘린더 이벤트 목록을 호출합니다.', + 'settings.ai.calendarCap': '캘린더 캡', + 'settings.ai.connectionsPerTick': '틱당 {count}개 연결', + 'settings.ai.meetingLookahead': '회의 미리보기', + 'settings.ai.minutesShort': '{count}분', + 'settings.ai.reminderLookahead': '알림 미리보기', + 'settings.ai.cronReminderChecks': '크론 알림 확인', + 'settings.ai.cronReminderChecksDesc': + '활성화된 크론 작업에서 알림에 가까운 예정 항목을 스캔합니다.', + 'settings.ai.relevantNotificationChecks': '관련 알림 확인', + 'settings.ai.relevantNotificationChecksDesc': '긴급한 로컬 알림을 선제적 알림으로 승격합니다.', + 'settings.ai.externalDelivery': '외부 전달', + 'settings.ai.externalDeliveryDesc': + '하트비트 알림이 외부 채널로 선제적 메시지를 보낼 수 있게 합니다.', + 'settings.ai.interval': '간격', + 'settings.ai.running': '실행 중...', + 'settings.ai.plannerTickNow': '지금 플래너 체크', + 'settings.ai.loadingHeartbeatControls': '하트비트 제어 로드 중...', + 'settings.ai.heartbeatControlsUnavailable': '하트비트 제어를 사용할 수 없습니다.', + 'settings.ai.loopMap': '루프 맵', + 'settings.ai.plannerSummary': + '플래너: {sourceEvents} 소스 이벤트, {sent} 전송, {deduped} 중복 제거.', + 'settings.ai.routeLabel': '경로: {route}', + 'settings.ai.on': '켜짐', + 'settings.ai.off': '꺼짐', + 'settings.ai.recentUsageLedger': '최근 사용량 원장', + 'settings.ai.recentUsageLedgerDesc': + '백엔드 행은 오늘의 작업/시간을 표시합니다. 소스 태그에는 백엔드 지원이 필요합니다.', + 'settings.ai.latestSpend': '최근 지출: {time}({action})의 {amount}', + 'settings.ai.topActions': '주요 작업', + 'settings.ai.noSpendRows': '로드된 지출 행이 없습니다.', + 'settings.ai.topHours': '상위 시간', + 'settings.ai.noHourlySpend': '아직 시간당 지출이 없습니다.', + 'settings.ai.openhumanDefault': 'OpenHuman(기본값)', + 'settings.ai.localModelResolved': 'Ollama · {model}', + 'settings.ai.customRoutingForWorkload': '{label}에 대한 사용자 정의 라우팅', + 'settings.ai.loadingModels': '모델 로드 중...', + 'settings.ai.enterModelIdManually': '또는 모델 ID를 수동으로 입력:', + 'settings.ai.modelIdPlaceholderForProvider': '{slug} 모델 ID', + 'settings.ai.modelIdPlaceholder': 'model-id', + 'settings.ai.selectModel': '모델 선택...', + 'settings.ai.temperatureOverride': '온도 재정의', + 'settings.ai.temperatureOverrideSlider': '온도 재정의(슬라이더)', + 'settings.ai.temperatureOverrideValue': '온도 재정의(값)', + 'settings.ai.temperatureOverrideDesc': + '낮을수록 더 결정적입니다. 제공업체 기본값을 사용하려면 선택하지 않은 상태로 두세요.', + 'settings.ai.testFailed': '테스트 실패', + 'settings.ai.testingModel': '모델 테스트 중...', + 'settings.ai.modelResponse': '모델 응답', + 'settings.ai.providerWithValue': '공급자: {value}', + 'settings.ai.noneDash': '—', + 'settings.ai.promptHelloWorld': '프롬프트: Hello world', + 'settings.ai.startedAt': '시작됨: {value}', + 'settings.ai.waitingForModelResponse': '선택한 모델의 응답을 기다리는 중...', + 'settings.ai.response': '응답', + 'settings.ai.testing': '테스트 중...', + 'settings.ai.test': '테스트', + 'settings.ai.slugMissingError': '슬러그를 생성하려면 공급자 이름을 입력하세요.', + 'settings.ai.slugInUseError': '해당 공급자 이름이 이미 사용 중입니다.', + 'settings.ai.slugReservedError': '다른 공급자 이름을 선택하세요.', + 'settings.ai.providerNamePlaceholder': '내 공급자', + 'settings.ai.slugLabel': '슬러그:', + 'settings.ai.openAiUrlLabel': 'OpenAI URL', + 'settings.ai.openAiUrlPlaceholder': 'https://api.openai.com/v1', + 'settings.ai.keepExistingKeyPlaceholder': '기존 키를 유지하려면 비워 두세요.', + 'settings.ai.reindexingMemory': '메모리 재색인 중', + 'settings.ai.reindexingMemoryMessage': + '임베딩을 다시 처리하는 중입니다. {pending}개의 메모리 항목이 현재 모델로 다시 임베딩되고 있습니다. 완료될 때까지 의미 기반 회상 성능이 줄어듭니다. 키워드 검색은 계속 작동하며, 이 창을 닫아도 재임베딩은 백그라운드에서 계속됩니다.', + 'settings.ai.signInWithOpenRouter': 'OpenRouter로 로그인', + 'settings.ai.weekBudget': '주 예산', + 'settings.ai.cycleRemaining': '남은 주기', + 'settings.ai.cycleTotalSpend': '주기 총 지출', + 'settings.ai.avgSpendRow': '평균 지출 행', + 'settings.ai.backgroundApiReads': 'Bg API 읽기', + 'settings.ai.backgroundWakeups': '백그라운드 깨우기', + 'settings.ai.budgetMath': '예산 계산', + 'settings.ai.rowsLeft': '남은 행', + 'settings.ai.rowsPerFullWeekBudget': '전체 주 예산당 행', + 'settings.ai.sampleBurnRate': '샘플 소모율', + 'settings.ai.projectedEmpty': '비어 있을 것으로 예상됨', + 'settings.ai.apiReadsPerDollarRemaining': '남은 $당 API 읽기', + 'settings.ai.loopCallBudget': '루프 호출 예산', + 'settings.ai.heartbeatTicks': '하트비트 틱', + 'settings.ai.calendarPlannerCalls': '캘린더 플래너 호출', + 'settings.ai.calendarFanoutCap': '달력 팬아웃 한도', + 'settings.ai.subconsciousModelCalls': '잠재 의식 모델 호출', + 'settings.ai.composioSyncScans': 'Composio 동기화 검색', + 'settings.ai.totalBackgroundApiReadBudget': '총 bg API 읽기 예산', + 'settings.ai.memoryWorkerPolls': '메모리 작업자 설문 조사', + 'settings.ai.defaultProviderName': 'OpenHuman', + 'settings.ai.routing.managed': '관리됨', + 'settings.ai.routing.managedDesc': + 'OpenHuman이 모든 추론을 클라우드에서 실행하고, 작업에 가장 적합한 모델을 선택하며, 비용을 최적화하고 가장 안전한 라우팅 기본값을 유지합니다.', + 'settings.ai.routing.managedMsg': + 'OpenHuman이 모든 워크로드의 추론을 처리하고 비용, 품질, 보안을 고려해 최적의 경로를 자동으로 선택합니다.', + 'settings.ai.routing.useYourOwn': '자체 모델 사용', + 'settings.ai.routing.useYourOwnDesc': + '제공업체와 모델 하나를 선택하고 모든 워크로드를 해당 경로로 라우팅합니다. 간단하지만 경량 추론과 대형 추론이 같은 경로를 공유하므로 비효율적일 수 있습니다.', + 'settings.ai.routing.advanced': '고급', + 'settings.ai.routing.advancedDesc': + '작업별로 다른 모델을 선택합니다. 세밀한 비용 최적화와 최대 제어에 가장 적합한 옵션입니다.', + 'settings.ai.routing.customDesc': + '세분화된 라우팅은 최고의 비용 최적화와 가장 많은 제어권을 제공합니다. 아래 행에서 관리형으로 유지할 워크로드, 공유 기본값을 사용할 워크로드, 특정 모델에 고정할 워크로드를 결정하세요.', + 'settings.ai.routing.chatAndConversations': '채팅 및 대화', + 'settings.ai.routing.chatDesc': + '직접 사용자 상호작용, 답변, 추론, 에이전트 루프 및 코딩 도움에 사용되는 모델입니다.', + 'settings.ai.routing.backgroundTasks': '백그라운드 작업', + 'settings.ai.routing.bgTasksDesc': + '요약, 하트비트, 학습 및 잠재의식 평가처럼 기본 대화 흐름 밖에서 사용되는 모델입니다.', + 'settings.ai.routing.addCustomProvider': '사용자 정의 공급자 추가', + 'settings.ai.globalModel.title': '모든 것에 대해 하나의 모델을 선택합니다.', + 'settings.ai.globalModel.desc': + '모든 추론을 하나의 모델로 라우팅합니다. 더 간단하지만 경량 작업과 무거운 작업이 모두 같은 경로를 사용하므로 비용과 품질 면에서 비효율적일 수 있습니다.', + 'settings.ai.globalModel.noProviders': + '먼저 제공업체를 추가하거나 연결하세요. 그런 다음 여기에서 모든 워크로드를 하나의 모델로 라우팅할 수 있습니다.', + 'settings.ai.globalModel.provider': '공급자', + 'settings.ai.globalModel.model': '모델', + 'settings.ai.globalModel.loadingModels': '모델 로드 중…', + 'settings.ai.globalModel.enterModelId': '모델 ID 입력', + 'settings.ai.globalModel.appliesToAll': + '채팅, 추론, 코딩, 메모리, 하트비트, 학습 및 잠재의식에 동일한 제공업체와 모델을 적용합니다. 임베딩은 별도로 구성됩니다. 저장을 클릭하면 변경 사항이 저장됩니다.', + 'settings.ai.globalModel.saving': '저장 중…', + 'settings.ai.globalModel.saved': '저장됨', + 'settings.ai.workload.noModel': '선택된 모델 없음', + 'settings.ai.workload.changeModel': '모델 변경', + 'settings.ai.workload.chooseModel': '모델 선택', + 'settings.ai.provider.ollama': 'Ollama', + 'settings.autocomplete.appFilter.acceptSuggestion': '제안 수락', + 'settings.autocomplete.appFilter.app': '앱', + 'settings.autocomplete.appFilter.currentSuggestion': '현재 제안', + 'settings.autocomplete.appFilter.contextOverride': '컨텍스트 재정의(선택 사항)', + 'settings.autocomplete.appFilter.debounce': '디바운스', + 'settings.autocomplete.appFilter.debugFocus': '포커스 디버그', + 'settings.autocomplete.appFilter.enabled': '활성화됨', + 'settings.autocomplete.appFilter.getSuggestion': '제안 받기', + 'settings.autocomplete.appFilter.lastError': '마지막 오류', + 'settings.autocomplete.appFilter.liveLogs': '실시간 로그', + 'settings.autocomplete.appFilter.model': '모델', + 'settings.autocomplete.appFilter.noLogs': ') :', + 'settings.autocomplete.appFilter.phase': '단계', + 'settings.autocomplete.appFilter.platformSupported': '플랫폼 지원', + 'settings.autocomplete.appFilter.refreshStatus': '새로고침 중…', + 'settings.autocomplete.appFilter.refreshing': '새로고침 중…', + 'settings.autocomplete.appFilter.running': '실행 중', + 'settings.autocomplete.appFilter.runtime': '런타임', + 'settings.autocomplete.appFilter.test': '테스트', + 'settings.autocomplete.completionStyle.acceptedCompletion': + '수락된 완성 {count}개가 저장됨 — 향후 제안을 개인화하는 데 사용됩니다.', + 'settings.autocomplete.completionStyle.acceptedCompletions': + '수락된 완성 {count}개가 저장됨 — 향후 제안을 개인화하는 데 사용됩니다.', + 'settings.autocomplete.completionStyle.clearHistory': '지우는 중…', + 'settings.autocomplete.completionStyle.clearing': '지우는 중…', + 'settings.autocomplete.completionStyle.debounce': '디바운스(ms)', + 'settings.autocomplete.completionStyle.enabled': '활성화됨', + 'settings.autocomplete.completionStyle.maxChars': '최대 문자 수', + 'settings.autocomplete.completionStyle.noHistory': + '아직 수락된 완성이 없습니다. Tab으로 제안을 수락하여 개인화를 시작하세요.', + 'settings.autocomplete.completionStyle.overlayTtl': '오버레이 TTL(ms)', + 'settings.autocomplete.completionStyle.personalizationHistory': '개인화 기록', + 'settings.autocomplete.completionStyle.styleExamples': '스타일 예시(줄마다 하나씩)', + 'settings.autocomplete.completionStyle.styleInstructions': '스타일 지침', + 'settings.autocomplete.debug.acceptedPrefix': '수락됨: {value}', + 'settings.autocomplete.debug.acceptFailed': '제안을 수락하지 못했습니다.', + 'settings.autocomplete.debug.alreadyRunning': '자동 완성이 이미 실행 중입니다.', + 'settings.autocomplete.debug.clearHistoryFailed': '기록을 지우지 못했습니다.', + 'settings.autocomplete.debug.didNotStart': '자동 완성이 시작되지 않았습니다.', + 'settings.autocomplete.debug.disabledInSettings': + '설정에서 자동완성이 비활성화되어 있습니다. 활성화하고 먼저 저장하십시오.', + 'settings.autocomplete.debug.fetchSuggestionFailed': '현재 제안을 가져오지 못했습니다.', + 'settings.autocomplete.debug.inspectFocusedElementFailed': '중점 요소를 검사하지 못했습니다.', + 'settings.autocomplete.debug.loadSettingsFailed': '자동 완성 설정을 로드하지 못했습니다.', + 'settings.autocomplete.debug.noSuggestionApplied': '제안이 적용되지 않았습니다.', + 'settings.autocomplete.debug.noSuggestionReturned': '반환된 제안이 없습니다.', + 'settings.autocomplete.debug.refreshStatusFailed': '자동 완성 상태를 새로 고치지 못했습니다.', + 'settings.autocomplete.debug.saveAdvancedSettingsFailed': '고급 설정을 저장하지 못했습니다.', + 'settings.autocomplete.debug.startFailed': '자동 완성을 시작하지 못했습니다.', + 'settings.autocomplete.debug.stopFailed': '자동 완성을 중지하지 못했습니다.', + 'settings.autocomplete.debug.suggestionPrefix': '제안: {value}', + 'settings.autocomplete.shared.none': '없음', + 'settings.autocomplete.shared.notApplicable': '해당 없음', + 'settings.autocomplete.shared.unknown': '알 수 없음', + 'settings.billing.autoRecharge.addAmount': '이 금액 추가', + 'settings.billing.autoRecharge.addCard': '카드 추가', + 'settings.billing.autoRecharge.amountHint': '금액 안내', + 'settings.billing.autoRecharge.defaultCard': '기본 카드', + 'settings.billing.autoRecharge.lastRechargeFailed': '마지막 충전 실패', + 'settings.billing.autoRecharge.lastRecharged': '마지막 충전', + 'settings.billing.autoRecharge.expires': '{date}', + 'settings.billing.autoRecharge.noCards': '카드 없음', + 'settings.billing.autoRecharge.paymentMethods': '결제 수단', + 'settings.billing.autoRecharge.rechargeInProgress': '충전 진행 중', + 'settings.billing.autoRecharge.spentThisWeek': '${spent} 만료 이번 주에 ${limit} 사용됨', + 'settings.billing.autoRecharge.rechargeWhen': '잔액이 다음보다 낮아지면 충전', + 'settings.billing.autoRecharge.saveSettings': '저장 중…', + 'settings.billing.autoRecharge.saving': '저장 중…', + 'settings.billing.autoRecharge.setDefault': ':', + 'settings.billing.autoRecharge.subtitle': '부제목', + 'settings.billing.autoRecharge.title': '자동 충전 활성화', + 'settings.billing.autoRecharge.toggleAriaLabel': '자동 충전 전환', + 'settings.billing.autoRecharge.weeklyLimit': '주간 지출 한도', + 'settings.billing.history.desc': '설명', + 'settings.billing.history.empty': '비어 있음', + 'settings.billing.history.openPortal': '포털 열기', + 'settings.billing.history.posted': '게시됨', + 'settings.billing.history.title': '제목', + 'settings.billing.inferenceBudget.cycleEnds': '주기 종료', + 'settings.billing.inferenceBudget.exhausted': '소진됨', + 'settings.billing.inferenceBudget.loadError': '로드 오류', + 'settings.billing.inferenceBudget.noBudgetDesc': '예산 없음 설명', + 'settings.billing.inferenceBudget.noRecurringBudget': '반복 예산 없음', + 'settings.billing.inferenceBudget.noRecurringPlanBudget': '반복 계획 예산이 없습니다.', + 'settings.billing.inferenceBudget.noRecurringWeeklyDesc': + '현재 플랜에는 반복 주간 추론 예산이 포함되어 있지 않습니다. 대신 사용 가능한 크레딧에서 사용량이 결제됩니다.', + 'settings.billing.inferenceBudget.remaining': '남음', + 'settings.billing.inferenceBudget.remainingSummary': '{remaining} / {budget} 남음', + 'settings.billing.inferenceBudget.spentThisCycle': '이번 주기에 {amount} 소비', + 'settings.billing.inferenceBudget.cycleEndsOn': '주기 종료 {date}', + 'settings.billing.inferenceBudget.exhaustedDesc': + '구독에 포함된 사용량을 모두 소진했습니다. 다음 주기를 기다리지 않고 AI를 계속 사용하려면 크레딧을 충전하세요.', + 'settings.billing.inferenceBudget.discountVsPayg': '종량제보다 통화당 {pct}% 저렴합니다.', + 'settings.billing.inferenceBudget.cycleSpend': '주기 지출', + 'settings.billing.inferenceBudget.totalAmount': '{amount} 총계', + 'settings.billing.inferenceBudget.inference': '추론', + 'settings.billing.inferenceBudget.integrations': '통합', + 'settings.billing.inferenceBudget.calls': '{count} 호출', + 'settings.billing.inferenceBudget.dailySpend': '일일 지출', + 'settings.billing.inferenceBudget.dailySpendPoint': '{date}: {amount}', + 'settings.billing.inferenceBudget.topModels': '상위 모델', + 'settings.billing.inferenceBudget.noInferenceUsage': '이번 주기에는 추론 사용량이 없습니다.', + 'settings.billing.inferenceBudget.topIntegrations': '상위 통합', + 'settings.billing.inferenceBudget.noIntegrationUsage': '이번 주기에는 통합을 사용하지 않습니다.', + 'settings.billing.inferenceBudget.tenHourCap': '10시간 한도', + 'settings.billing.inferenceBudget.title': '제목', + 'settings.billing.inferenceBudget.unableToLoad': '사용량 데이터를 로드할 수 없습니다.', + 'settings.billing.inferenceBudget.notAvailable': '해당 사항 없음', + 'settings.billing.payAsYouGo.available': '사용 가능', + 'settings.billing.payAsYouGo.chargeCustomAmount': '여는 중…', + 'settings.billing.payAsYouGo.chooseTopUpDesc': '충전 선택 설명', + 'settings.billing.payAsYouGo.chooseTopUpTitle': '충전 선택 제목', + 'settings.billing.payAsYouGo.creditBalanceDesc': '크레딧 잔액 설명', + 'settings.billing.payAsYouGo.creditBalanceTitle': '크레딧 잔액 제목', + 'settings.billing.payAsYouGo.customAmount': '사용자 지정 금액', + 'settings.billing.payAsYouGo.enterAmount': '금액 입력', + 'settings.billing.payAsYouGo.opening': '여는 중', + 'settings.billing.payAsYouGo.promotionalCredits': '프로모션 크레딧', + 'settings.billing.payAsYouGo.topUpBalance': '충전 잔액', + 'settings.billing.payAsYouGo.topUpCredits': '크레딧 충전', + 'settings.billing.payAsYouGo.unableToLoad': '잔액을 불러올 수 없습니다.', + 'settings.billing.subscription.annual': '연간', + 'settings.billing.subscription.billedAnnually': '연간 청구', + 'settings.billing.subscription.chooseSubtitle': '부제목 선택', + 'settings.billing.subscription.chooseTitle': '제목 선택', + 'settings.billing.subscription.cryptoDesc': '암호화폐 설명', + 'settings.billing.subscription.cryptoQuestion': '암호화폐 질문', + 'settings.billing.subscription.current': '현재', + 'settings.billing.subscription.currentPlan': '현재 플랜', + 'settings.billing.subscription.monthly': '월간', + 'settings.billing.subscription.paymentConfirmed': '결제 확인됨', + 'settings.billing.subscription.perMonth': '월별', + 'settings.billing.subscription.popular': '인기', + 'settings.billing.subscription.save': '{pct}', + 'settings.billing.subscription.upgrade': '업그레이드', + 'settings.billing.subscription.waiting': '대기 중', + 'settings.billing.subscription.waitingPayment': '결제 대기 중', + 'settings.composio.apiKeyDesc': 'Composio API 키가 현재 이 기기에 저장되어 있습니다.', + 'settings.composio.apiKeyExamplePlaceholder': 'ck_live_xxxxxxxxxxxxxxxx', + 'settings.composio.apiKeyLabel': 'Composio API 키', + 'settings.composio.apiKeyStored': 'API 키 저장됨', + 'settings.composio.apiKeyStoredPlaceholder': '••••••••••••••••', + 'settings.composio.clearedToBackend': '백엔드 모드로 전환됨', + 'settings.composio.confirmItem1': 'API 키가 있는 app.composio.dev 계정', + 'settings.composio.confirmItem2': '개인 Composio 계정을 통해 각 통합을 다시 연결해야 합니다', + 'settings.composio.confirmItem3': + '참고: Composio 트리거(실시간 웹훅)는 아직 Direct 모드에서 실행되지 않습니다 — 동기식 도구 호출만 지원됩니다', + 'settings.composio.confirmNeedItems': '필요한 항목:', + 'settings.composio.confirmSwitch': '이해했습니다. Direct로 전환', + 'settings.composio.confirmTitle': '⚠️ Direct 모드로 전환', + 'settings.composio.confirmWarning': + '기존 통합(Gmail, Slack, GitHub 등 OpenHuman을 통해 연결된 통합)은 표시되지 않습니다 — OpenHuman 관리형 Composio 테넌트에 있습니다.', + 'settings.composio.intro': + 'Composio는 에이전트가 호출할 수 있는 도구로 250개 이상의 외부 앱을 통합합니다. 이러한 도구 호출이 라우팅되는 방식을 선택하세요.', + 'settings.composio.title': 'Composio', + 'settings.composio.modeDirect': 'Direct(직접 API 키 사용)', + 'settings.composio.modeDirectDesc': + '호출이 backend.composio.dev로 직접 이동합니다. 독립적이고 오프라인 친화적입니다. 도구 실행은 동기식으로 작동하지만, 실시간 트리거 웹훅은 아직 Direct 모드에서 라우팅되지 않습니다(후속 이슈).', + 'settings.composio.modeManaged': '관리형(OpenHuman이 대신 처리)', + 'settings.composio.modeManagedDesc': + 'OpenHuman이 백엔드를 통해 도구 호출을 프록시합니다(권장). 인증은 중개되며, Composio API 키를 붙여넣을 필요가 없습니다. 웹훅은 완전히 라우팅됩니다.', + 'settings.composio.routingMode': '라우팅 모드', + 'settings.composio.saveErrorNoKey': + '저장에 실패했습니다. Direct 모드에는 비어 있지 않은 API 키가 필요합니다.', + 'settings.composio.saving': '저장 중…', + 'settings.composio.switching': '전환 중…', + 'settings.companion.title': '데스크톱 컴패니언', + 'settings.companion.session': '세션', + 'settings.companion.activeLabel': '활성', + 'settings.companion.inactiveStatus': '비활성', + 'settings.companion.stopping': '중지 중…', + 'settings.companion.stopSession': '중지 세션', + 'settings.companion.starting': '시작 중…', + 'settings.companion.startSession': '세션 시작', + 'settings.companion.sessionId': '세션 ID', + 'settings.companion.turns': '회전', + 'settings.companion.remaining': '남음', + 'settings.companion.configuration': '구성', + 'settings.companion.hotkey': '단축키', + 'settings.companion.activationMode': '활성화 모드', + 'settings.companion.sessionTtl': '세션 TTL', + 'settings.companion.screenCapture': '화면 캡처', + 'settings.companion.appContext': '앱 컨텍스트', + 'settings.cron.jobs.desc': '설명', + 'settings.cron.jobs.empty': '코어 cron 작업을 찾을 수 없습니다.', + 'settings.cron.jobs.lastStatus': '마지막 상태', + 'settings.cron.jobs.loading': 'cron 작업 불러오는 중...', + 'settings.cron.jobs.loadingRuns': '실행 기록 불러오는 중', + 'settings.cron.jobs.nextRun': '다음 실행', + 'settings.cron.jobs.pause': '일시 중지', + 'settings.cron.jobs.paused': '일시 중지됨', + 'settings.cron.jobs.recentRuns': '최근 실행', + 'settings.cron.jobs.removing': '제거 중', + 'settings.cron.jobs.resume': '재개', + 'settings.cron.jobs.runningNow': '지금 실행 중', + 'settings.cron.jobs.saving': '저장 중…', + 'settings.cron.jobs.schedule': '일정', + 'settings.cron.jobs.title': '코어 Cron 작업', + 'settings.cron.jobs.viewRuns': '실행 기록 보기', + 'settings.localModel.deviceCapability.active': '활성', + 'settings.localModel.deviceCapability.appliedTier': '적용된 티어', + 'settings.localModel.deviceCapability.applying': '적용 중', + 'settings.localModel.deviceCapability.cores': '{count}', + 'settings.localModel.deviceCapability.couldNotLoadPresets': '프리셋을 불러올 수 없습니다', + 'settings.localModel.deviceCapability.cpu': 'CPU', + 'settings.localModel.deviceCapability.customModelIds': '사용자 지정 모델 ID', + 'settings.localModel.deviceCapability.detected': '감지됨', + 'settings.localModel.deviceCapability.disabled': '비활성화됨', + 'settings.localModel.deviceCapability.disabledDesc': '비활성화 설명', + 'settings.localModel.deviceCapability.downloadingModels': '(모델 다운로드 중)', + 'settings.localModel.deviceCapability.downloadingSetupDesc': + 'OllamaSetup 설치 프로그램(~2GB)을 다운로드하고 압축을 푸는 중입니다. 첫 설치 시 시간이 걸릴 수 있습니다.', + 'settings.localModel.deviceCapability.failedToApplyPreset': '프리셋 적용 실패', + 'settings.localModel.deviceCapability.gpu': 'GPU', + 'settings.localModel.deviceCapability.installFailed': 'Ollama 설치 실패', + 'settings.localModel.deviceCapability.installFailedDesc': + 'Ollama를 사용할 수 있기 전에 설치 프로그램이 종료되었습니다. 다시 시도하려면 재시도를 클릭하거나 ollama.com에서 수동으로 설치하세요.', + 'settings.localModel.deviceCapability.installFirst': '먼저 Ollama를 실행하세요.', + 'settings.localModel.deviceCapability.installFirstDesc': + '로컬 티어는 외부에서 관리되는 Ollama 엔드포인트에 의존합니다. 직접 시작하고 원하는 모델을 가져온 뒤, 런타임에 연결할 수 있을 때까지 "비활성화됨(클라우드 대체)"을 계속 사용하세요.', + 'settings.localModel.deviceCapability.installOllamaFirst': + '이 티어를 사용하려면 먼저 Ollama를 실행하세요', + 'settings.localModel.deviceCapability.installingOllama': 'Ollama 설치 중', + 'settings.localModel.deviceCapability.loadingDeviceInfo': '기기 정보 불러오는 중', + 'settings.localModel.deviceCapability.localAiDisabled': + '로컬 AI 비활성화됨 — 클라우드 대체 사용 중.', + 'settings.localModel.deviceCapability.modelTier': '모델 티어', + 'settings.localModel.deviceCapability.needsOllama': 'Ollama 필요', + 'settings.localModel.deviceCapability.notDetected': '감지되지 않음', + 'settings.localModel.deviceCapability.disabledLowercase': '비활성화됨', + 'settings.localModel.deviceCapability.presetDetails': + '채팅: {chatModel} · 비전: {visionModel} · 대상 RAM: {targetRamGb}GB', + 'settings.localModel.deviceCapability.ram': 'RAM', + 'settings.localModel.deviceCapability.recommended': '권장', + 'settings.localModel.deviceCapability.retryInstall': '다시 시도 중…', + 'settings.localModel.deviceCapability.retrying': '다시 시도 중…', + 'settings.localModel.deviceCapability.starting': '시작 중…', + 'settings.localModel.download.audioPathPlaceholder': '오디오 파일의 절대 경로', + 'settings.localModel.download.capabilityChat': '채팅', + 'settings.localModel.download.capabilityEmbedding': '삽입 중', + 'settings.localModel.download.capabilityAssets': '기능 자산', + 'settings.localModel.download.capabilityStt': 'STT', + 'settings.localModel.download.capabilityTts': 'TTS', + 'settings.localModel.download.capabilityVision': '비전', + 'settings.localModel.download.downloading': '다운로드 중...', + 'settings.localModel.download.embeddingDimensions': '치수: {dimensions}', + 'settings.localModel.download.embeddingModel': '모델: {modelId}', + 'settings.localModel.download.embeddingPlaceholder': '줄마다 하나의 입력 문자열...', + 'settings.localModel.download.embeddingVectors': '벡터: {count}', + 'settings.localModel.download.noThinkMode': '생각 없음 모드', + 'settings.localModel.download.notAvailable': '해당 사항 없음', + 'settings.localModel.download.promptPlaceholder': + '아무 프롬프트나 입력하고 로컬 모델에서 실행하세요...', + 'settings.localModel.download.quantizationPref': '양자화 기본 설정', + 'settings.localModel.download.runEmbeddingTest': '실행 중...', + 'settings.localModel.download.runPromptTest': '프롬프트 테스트 실행', + 'settings.localModel.download.runSummaryTest': '요약 테스트 실행', + 'settings.localModel.download.runTranscriptionTest': '실행 중...', + 'settings.localModel.download.runTtsTest': '실행 중...', + 'settings.localModel.download.runVisionTest': '실행 중...', + 'settings.localModel.download.running': '실행 중...', + 'settings.localModel.download.runningPrompt': '프롬프트 실행 중', + 'settings.localModel.download.summaryHelper': + 'Rust 코어를 통해 `openhuman.inference_summarize`를 호출합니다.', + 'settings.localModel.download.summarizePlaceholder': + '로컬 모델로 요약할 텍스트를 붙여넣으세요...', + 'settings.localModel.download.testCustomPrompt': '사용자 지정 프롬프트 테스트', + 'settings.localModel.download.testEmbeddings': '임베딩 테스트', + 'settings.localModel.download.testSummarization': '요약 테스트', + 'settings.localModel.download.testVisionPrompt': '비전 프롬프트 테스트', + 'settings.localModel.download.testVoiceInput': '음성 입력 테스트(STT)', + 'settings.localModel.download.testVoiceOutput': '음성 출력 테스트(TTS)', + 'settings.localModel.download.transcript': '내용:', + 'settings.localModel.download.ttsOutput': '출력: {outputPath}', + 'settings.localModel.download.ttsOutputPlaceholder': '선택적 출력 WAV 경로', + 'settings.localModel.download.ttsPlaceholder': '합성할 텍스트 입력...', + 'settings.localModel.download.ttsVoice': '음성: {voiceId}', + 'settings.localModel.download.visionImagePlaceholder': + '줄마다 하나의 이미지 참조(data URI, URL 또는 로컬 경로 표시)', + 'settings.localModel.download.visionPromptPlaceholder': '비전 모델용 프롬프트 입력...', + 'settings.localModel.status.allChecksPassed': '모든 확인 통과', + 'settings.localModel.status.artifact': '아티팩트', + 'settings.localModel.status.backend': '백엔드', + 'settings.localModel.status.binary': '바이너리', + 'settings.localModel.status.bootstrapResume': '부트스트랩 / 재개', + 'settings.localModel.status.checking': '확인 중...', + 'settings.localModel.status.checkingOllama': 'Ollama 확인 중', + 'settings.localModel.status.contextBelowMinimumBadge': + '{contextLength} ctx - {required} min 미만', + 'settings.localModel.status.contextBelowMinimumTitle': + '거부됨: 컨텍스트 창 {contextLength} 토큰이 메모리 계층에 필요한 {required} 토큰 최소값보다 낮습니다. 자동 잘림으로 인해 재현율이 손상될 수 있습니다.', + 'settings.localModel.status.contextOkBadge': '{contextLength} ctx ✓', + 'settings.localModel.status.contextOkTitle': + '컨텍스트 창 {contextLength} 토큰은 메모리 계층 최소 {required} 토큰을 충족합니다.', + 'settings.localModel.status.contextUnknownBadge': 'ctx 알 수 없음', + 'settings.localModel.status.contextUnknownTitle': + '컨텍스트 창을 알 수 없습니다. {required} 토큰 메모리 계층 최소값을 충족하는지 확인할 수 없습니다.', + 'settings.localModel.status.customLocation': '사용자 지정 위치', + 'settings.localModel.status.customLocationDesc': '사용자 지정 위치 설명', + 'settings.localModel.status.diagnosticsHint': + '"진단 실행"을 클릭하여 Ollama가 실행 중이고 모델이 설치되어 있는지 확인하세요.', + 'settings.localModel.status.downloadingUnknown': '다운로드 중(크기 알 수 없음)', + 'settings.localModel.status.eta': '예상 시간', + 'settings.localModel.status.expectedModels': '예상 모델', + 'settings.localModel.status.expectedChat': '채팅: {model}', + 'settings.localModel.status.expectedEmbedding': '포함: {model}', + 'settings.localModel.status.expectedVision': '비전: {model}', + 'settings.localModel.status.externalProcess': '외부 프로세스', + 'settings.localModel.status.forceRebootstrap': '강제 재부트스트랩', + 'settings.localModel.status.generationTps': '생성 TPS', + 'settings.localModel.status.hideErrorDetails': '오류 세부 정보 숨기기', + 'settings.localModel.status.installManually': '수동 설치', + 'settings.localModel.status.installManuallyFrom': '다음에서 수동 설치', + 'settings.localModel.status.installOllama': '시작 중…', + 'settings.localModel.status.installedModels': '설치된 모델', + 'settings.localModel.status.installing': '설치 중...', + 'settings.localModel.status.installingOllama': 'Ollama 런타임 설치 중...', + 'settings.localModel.status.issues': '문제', + 'settings.localModel.status.issuesFound': '문제 {count}개 발견', + 'settings.localModel.status.lastLatency': '마지막 지연 시간', + 'settings.localModel.status.model': '모델', + 'settings.localModel.status.notAvailable': '해당 사항 없음', + 'settings.localModel.status.notFound': '찾을 수 없음', + 'settings.localModel.status.notRunning': '실행 중이 아님', + 'settings.localModel.status.ollamaBinaryPath': 'Ollama 바이너리 경로', + 'localModel.ollamaServer.helperText': '예: http://192.168.1.5:11434', + 'localModel.ollamaServer.label': 'Ollama 서버 URL', + 'localModel.ollamaServer.modelCount': '모델', + 'localModel.ollamaServer.placeholder': 'http://localhost:11434', + 'localModel.ollamaServer.reachable': '연결 가능', + 'localModel.ollamaServer.resetButton': '기본값으로 재설정', + 'localModel.ollamaServer.saveButton': '저장', + 'localModel.ollamaServer.testButton': '테스트 연결', + 'localModel.ollamaServer.unreachable': '연결할 수 없음', + 'localModel.ollamaServer.validationError': '유효한 http:// 또는 https:// URL이어야 합니다.', + 'settings.localModel.status.ollamaDiagnostics': 'Ollama 진단', + 'settings.localModel.status.ollamaNotInstalled': 'Ollama 런타임을 사용할 수 없음', + 'settings.localModel.status.ollamaNotInstalledDesc': + 'OpenHuman은 이제 Ollama를 외부 추론 런타임으로 취급합니다. 직접 Ollama 서버를 시작하고 원하는 모델을 가져온 뒤 작업 라우팅을 해당 서버로 지정하세요.', + 'settings.localModel.status.progress': '진행률', + 'settings.localModel.status.provider': '제공업체', + 'settings.localModel.status.retryBootstrap': '부트스트랩 다시 시도', + 'settings.localModel.status.runDiagnostics': '확인 중...', + 'settings.localModel.status.running': '실행 중', + 'settings.localModel.status.runningExternalProcess': '외부 프로세스로 실행 중', + 'settings.localModel.status.runtimeStatus': '런타임 상태', + 'settings.localModel.status.server': '서버', + 'settings.localModel.status.setPath': '설정 중...', + 'settings.localModel.status.setting': '설정 중...', + 'settings.localModel.status.showErrorDetails': '오류 세부 정보 숨기기', + 'settings.localModel.status.showInstallErrorDetails': '오류 세부 정보 숨기기', + 'settings.localModel.status.suggestedFixes': '제안된 수정 사항', + 'settings.localModel.status.thenSetPath': '그런 다음 경로 설정', + 'settings.localModel.status.triggering': '트리거 중...', + 'settings.localModel.status.unavailable': '사용할 수 없음', + 'settings.localModel.status.working': '작업 중...', + 'settings.developerMenu.ai.title': 'AI 구성', + 'settings.developerMenu.ai.desc': '클라우드 공급자, 로컬 Ollama 모델 및 워크로드별 라우팅', + 'settings.developerMenu.screenAwareness.title': '화면 인식', + 'settings.developerMenu.screenAwareness.desc': '화면 캡처 권한, 모니터링 정책 및 세션 제어', + 'settings.developerMenu.messagingChannels.title': '메시징 채널', + 'settings.developerMenu.messagingChannels.desc': + 'Telegram/Discord 인증 모드 및 기본 채널 라우팅 구성', + 'settings.developerMenu.tools.title': '도구', + 'settings.developerMenu.tools.desc': + 'OpenHuman이 사용자를 대신하여 사용할 수 있는 기능 활성화 또는 비활성화', + 'settings.developerMenu.agentChat.title': '에이전트 채팅', + 'settings.developerMenu.agentChat.desc': '모델 및 온도 재정의를 통한 테스트 에이전트 대화', + 'settings.developerMenu.devWorkflow.title': '개발 워크플로', + 'settings.developerMenu.devWorkflow.desc': + 'GitHub 이슈를 선택하고 일정에 따라 PR을 여는 자율 에이전트', + 'settings.developerMenu.devWorkflow.panelDesc': + '내게 할당된 GitHub 이슈를 선택하고 일정에 따라 pull request를 자동으로 여는 자율 개발자 에이전트를 구성하세요.', + 'settings.developerMenu.skillsRunner.title': '스킬 실행기', + 'settings.developerMenu.skillsRunner.desc': + '번들 스킬을 즉석에서 실행합니다. 입력을 채우고 백그라운드 자율 실행을 시작하세요.', + 'settings.developerMenu.skillsRunner.panelDesc': + '번들 스킬을 선택하고 선언된 입력을 채운 뒤, 기다릴 필요 없는 백그라운드 실행을 시작하세요. cron 예약 반복 작업이 필요하면 대신 개발 워크플로를 사용하세요.', + 'settings.skillsRunner.skill': '스킬', + 'settings.skillsRunner.selectSkill': '스킬 선택…', + 'settings.skillsRunner.loadingSkills': '스킬 불러오는 중…', + 'settings.skillsRunner.loadingDescription': '스킬 입력 불러오는 중…', + 'settings.skillsRunner.noInputs': '이 스킬은 입력을 선언하지 않습니다.', + 'settings.skillsRunner.placeholder.required': '필수', + 'settings.skillsRunner.runNow': '지금 실행', + 'settings.skillsRunner.starting': '시작 중…', + 'settings.skillsRunner.started': '시작됨 — 실행 ID:', + 'settings.skillsRunner.logPath': '로그:', + 'settings.skillsRunner.error.listSkills': '스킬을 불러오지 못했습니다:', + 'settings.skillsRunner.error.describe': '입력을 불러오지 못했습니다:', + 'settings.skillsRunner.error.missingRequired': '필수 입력 누락:', + 'settings.skillsRunner.error.run': '실행을 시작하지 못했습니다:', + 'settings.skillsRunner.error.preflightGate': '사전 점검 게이트 실패', + 'settings.skillsRunner.schedule.heading': '일정(반복)', + 'settings.skillsRunner.schedule.help': + '이 스킬과 입력을 반복 cron 작업으로 저장합니다. 에이전트는 각 tick마다 run_skill을 호출합니다.', + 'settings.skillsRunner.schedule.frequency': '빈도', + 'settings.skillsRunner.schedule.every30min': '30분마다', + 'settings.skillsRunner.schedule.everyHour': '매시간', + 'settings.skillsRunner.schedule.every2hours': '2시간마다', + 'settings.skillsRunner.schedule.every6hours': '6시간마다', + 'settings.skillsRunner.schedule.onceDaily': '하루 한 번(9:00)', + 'settings.skillsRunner.schedule.save': '일정 저장', + 'settings.skillsRunner.schedule.saving': '저장 중…', + 'settings.skillsRunner.schedule.saved': '일정이 저장되었습니다.', + 'settings.skillsRunner.schedule.error': '일정 저장 실패:', + 'settings.skillsRunner.schedule.loadingJobs': '기존 일정 불러오는 중…', + 'settings.skillsRunner.schedule.noJobs': '이 스킬에 저장된 일정이 아직 없습니다.', + 'settings.skillsRunner.schedule.existing': '이 스킬의 예약된 작업:', + 'settings.skillsRunner.schedule.runNow': '실행', + 'settings.skillsRunner.schedule.remove': '제거', + 'settings.skillsRunner.scheduleEnabled': '활성화됨', + 'settings.skillsRunner.scheduleDisabled': '일시 중지됨', + 'settings.skillsRunner.scheduleToggleAria': '일정 활성화 전환', + 'settings.skillsRunner.schedule.history': '기록', + 'settings.skillsRunner.schedule.historyLoading': '기록 불러오는 중…', + 'settings.skillsRunner.schedule.historyEmpty': '이 일정의 실행 기록이 아직 없습니다.', + 'settings.skillsRunner.schedule.historyNoOutput': '캡처된 출력이 없습니다.', + 'settings.skillsRunner.schedule.active': '활성', + 'settings.skillsRunner.schedule.lastRunLabel': '마지막:', + 'settings.skillsRunner.recentRuns.headingForSkill': '이 스킬의 최근 실행', + 'settings.skillsRunner.recentRuns.headingAll': '최근 스킬 실행(전체)', + 'settings.skillsRunner.recentRuns.refresh': '새로고침', + 'settings.skillsRunner.recentRuns.loading': '최근 실행 불러오는 중…', + 'settings.skillsRunner.recentRuns.empty': '최근 실행이 없습니다.', + 'settings.skillsRunner.viewer.loading': '로그 불러오는 중…', + 'settings.skillsRunner.viewer.tailing': '실시간 tail', + 'settings.skillsRunner.viewer.fetching': '가져오는 중', + 'settings.skillsRunner.viewer.error': '로그 읽기 실패:', + 'settings.skillsRunner.repoPicker.loading': '리포지토리 불러오는 중…', + 'settings.skillsRunner.repoPicker.select': '리포지토리 선택…', + 'settings.skillsRunner.repoPicker.empty': + '반환된 리포지토리가 없습니다. 이 목록을 채우려면 Composio를 통해 GitHub을 연결하세요.', + 'settings.skillsRunner.repoPicker.notConnected': + 'GitHub이 Composio를 통해 연결되어 있지 않습니다. 먼저 스킬 → Composio에서 연결하세요.', + 'settings.skillsRunner.repoPicker.privateTag': '(비공개)', + 'settings.skillsRunner.branchPicker.needRepo': '먼저 리포지토리를 선택하세요…', + 'settings.skillsRunner.branchPicker.loading': '브랜치 불러오는 중…', + 'settings.skillsRunner.branchPicker.select': '브랜치 선택…', + 'settings.devWorkflow.githubRepository': 'GitHub 리포지토리', + 'settings.devWorkflow.loadingRepositories': '리포지토리 불러오는 중...', + 'settings.devWorkflow.selectRepository': '리포지토리 선택', + 'settings.devWorkflow.privateTag': '(비공개)', + 'settings.devWorkflow.detectingForkInfo': '포크 정보 감지 중...', + 'settings.devWorkflow.forkDetected': '포크 감지됨', + 'settings.devWorkflow.upstream': '업스트림:', + 'settings.devWorkflow.forkPrNote': 'PR은 업스트림 리포지토리를 대상으로 열립니다.', + 'settings.devWorkflow.notForkNote': + '포크가 아닙니다. PR은 이 리포지토리를 직접 대상으로 열립니다.', + 'settings.devWorkflow.targetBranch': '대상 브랜치', + 'settings.devWorkflow.targetBranchNote': 'PR은 이 브랜치를 대상으로 열립니다', + 'settings.devWorkflow.loadingBranches': '브랜치 불러오는 중...', + 'settings.devWorkflow.runFrequency': '실행 빈도', + 'settings.devWorkflow.runFrequencyNote': '에이전트가 이슈를 확인하고 PR을 여는 빈도입니다.', + 'settings.devWorkflow.updateConfiguration': '구성 업데이트', + 'settings.devWorkflow.saveConfiguration': '구성 저장', + 'settings.devWorkflow.remove': '제거', + 'settings.devWorkflow.saved': '저장됨', + 'settings.devWorkflow.activeConfiguration': '활성 구성', + 'settings.devWorkflow.activeConfigRepository': '리포지토리:', + 'settings.devWorkflow.activeConfigUpstream': '업스트림:', + 'settings.devWorkflow.activeConfigTargetBranch': '대상 브랜치:', + 'settings.devWorkflow.activeConfigSchedule': '일정:', + 'settings.devWorkflow.enabled': '활성화됨', + 'settings.devWorkflow.paused': '일시 중지됨', + 'settings.devWorkflow.nextRun': '다음 실행', + 'settings.devWorkflow.lastRun': '마지막 실행', + 'settings.devWorkflow.runNow': '지금 실행', + 'settings.devWorkflow.running': '실행 중…', + 'settings.devWorkflow.recentRuns': '최근 실행', + 'settings.devWorkflow.cronSaveError': '구성을 저장하지 못했습니다', + 'settings.devWorkflow.lastOutput': '마지막 출력', + 'settings.devWorkflow.noOutput': '캡처된 출력이 없습니다', + 'settings.devWorkflow.runningStatus': + '에이전트가 실행 중입니다 — 이슈를 선택하고 수정 작업을 진행하는 중...', + 'settings.devWorkflow.errorNotConnected': + 'GitHub이 연결되어 있지 않습니다. 먼저 설정 > 고급 > Composio에서 GitHub을 연결하세요.', + 'settings.devWorkflow.errorToolNotEnabled': + '이 백엔드에서 GITHUB_LIST_REPOSITORIES_FOR_THE_AUTHENTICATED_USER 도구가 활성화되어 있지 않습니다. 관리자에게 Composio 통합에서 활성화해 달라고 요청하세요(backend#842).', + 'settings.devWorkflow.errorNotAuthenticated': '인증되지 않았습니다. 먼저 로그인하세요.', + 'settings.devWorkflow.errorNoRepositories': '이 GitHub 계정의 리포지토리를 찾을 수 없습니다.', + 'settings.devWorkflow.schedule.every30min': '30분마다', + 'settings.devWorkflow.schedule.everyHour': '매시간', + 'settings.devWorkflow.schedule.every2hours': '2시간마다', + 'settings.devWorkflow.schedule.every6hours': '6시간마다', + 'settings.devWorkflow.schedule.onceDaily': '하루 한 번(오전 9시)', + 'settings.developerMenu.cronJobs.title': '크론 작업', + 'settings.developerMenu.cronJobs.desc': '예약 보기 및 구성 런타임 기술용 작업', + 'settings.developerMenu.localModelDebug.title': '로컬 모델 디버그', + 'settings.developerMenu.localModelDebug.desc': 'Ollama 구성, 자산 다운로드, 모델 테스트 및 진단', + 'settings.developerMenu.webhooks.title': '웹훅', + 'settings.developerMenu.webhooks.desc': '런타임 웹훅 등록 및 캡처된 요청 로그 검사', + 'settings.developerMenu.eventLog.title': '이벤트 로그', + 'settings.developerMenu.eventLog.desc': + '모든 에이전트, 도구, 시스템 이벤트를 색상으로 구분해 실시간으로 표시합니다.', + 'settings.developerMenu.eventLog.allTypes': '모든 유형', + 'settings.developerMenu.eventLog.filterAgent': '필터...', + 'settings.developerMenu.eventLog.download': '다운로드', + 'settings.developerMenu.eventLog.events': '이벤트', + 'settings.developerMenu.eventLog.live': '실시간', + 'settings.developerMenu.eventLog.disconnected': '연결 끊김', + 'settings.developerMenu.eventLog.waiting': '이벤트 대기 중...', + 'settings.developerMenu.eventLog.notConnected': '코어에 연결되지 않음', + 'settings.developerMenu.eventLog.jumpToLatest': '최신으로 이동', + 'settings.developerMenu.eventLog.badge.tool': 'TOOL', + 'settings.developerMenu.eventLog.badge.agent': 'AGENT', + 'settings.developerMenu.eventLog.badge.info': 'INFO', + 'settings.developerMenu.eventLog.badge.mem': 'MEM', + 'settings.developerMenu.eventLog.badge.chan': 'CHAN', + 'settings.developerMenu.eventLog.badge.cron': 'CRON', + 'settings.developerMenu.eventLog.badge.hook': 'HOOK', + 'settings.developerMenu.eventLog.badge.warn': 'WARN', + 'settings.developerMenu.eventLog.badge.skill': 'SKILL', + 'settings.developerMenu.eventLog.badge.comp': 'COMP', + 'settings.developerMenu.eventLog.badge.mcp': 'MCP', + 'settings.developerMenu.intelligence.title': '인텔리전스', + 'settings.developerMenu.intelligence.desc': '메모리 작업 공간, 잠재의식 엔진, 드림 및 설정', + 'settings.developerMenu.notificationRouting.title': '알림 라우팅', + 'settings.developerMenu.notificationRouting.desc': + '통합 경고에 대한 AI 중요도 점수 및 오케스트레이터 에스컬레이션', + 'settings.developerMenu.composeioTriggers.title': 'ComposeIO 트리거', + 'settings.developerMenu.composeioTriggers.desc': 'ComposeIO 트리거 기록 및 아카이브 보기', + 'settings.developerMenu.composioRouting.title': 'Composio 라우팅(직접 모드)', + 'settings.developerMenu.composioRouting.desc': + '자신만의 Composio API 키를 가져와 호출을 backend.composio.dev로 직접 라우팅하세요.', + 'settings.developerMenu.integrationTriggers.title': '통합 트리거', + 'settings.developerMenu.integrationTriggers.desc': + 'Composio 통합 트리거에 대한 AI 분류 설정 구성', + 'settings.developerMenu.mcpServer.title': 'MCP 서버', + 'settings.developerMenu.mcpServer.desc': 'OpenHuman에 연결하도록 외부 MCP 클라이언트 구성', + 'settings.developerMenu.autonomy.title': '에이전트 자율성', + 'settings.developerMenu.autonomy.desc': '도구 작업 속도 제한 및 안전 임계값', + 'settings.mcpServer.title': 'MCP 서버', + 'settings.mcpServer.toolsSectionTitle': '사용 가능한 도구', + 'settings.mcpServer.toolsSectionDesc': + '도구 노출 openhuman-core mcp 실행 시 MCP stdio 서버를 통해', + 'settings.mcpServer.configSectionTitle': '클라이언트 구성', + 'settings.mcpServer.configSectionDesc': + '올바른 구성 조각을 생성하려면 MCP 클라이언트를 선택하세요.', + 'settings.mcpServer.copySnippet': '클립보드에 복사', + 'settings.mcpServer.copied': '복사되었습니다!', + 'settings.mcpServer.openConfigFile': '구성 파일 열기', + 'settings.mcpServer.binaryPathNotFound': + 'OpenHuman 바이너리를 찾을 수 없습니다. 소스에서 실행하는 경우 다음을 사용하여 빌드하세요: cargo build --bin openhuman-core', + 'settings.mcpServer.openConfigError': '구성 파일을 열지 못했습니다.', + 'settings.mcpServer.clientClaudeDesktop': 'Claude Desktop', + 'settings.mcpServer.clientCursor': '커서', + 'settings.mcpServer.clientCodex': 'Codex', + 'settings.mcpServer.clientZed': 'Zed', + 'settings.mcpServer.configFilePath': '구성 파일', + 'settings.mcpServer.clientSelectorAriaLabel': 'MCP 클라이언트 선택기', + 'settings.appearance.menuDesc': '밝은 색, 어두운 색 선택 또는 시스템 테마와 일치', + 'settings.agentAccess.title': '에이전트 OS 접근', + 'settings.agentAccess.menuDesc': + '에이전트가 읽고 쓸 수 있는 위치와 shell 사용 가능 여부를 제어합니다.', + 'settings.agentAccess.loadError': '접근 설정을 불러오지 못했습니다', + 'settings.agentAccess.saveError': '접근 설정을 저장하지 못했습니다', + 'settings.agentAccess.saved': '저장됨 — 다음 메시지부터 적용됩니다.', + 'settings.agentAccess.desktopOnly': '접근 설정은 데스크톱 앱에서만 사용할 수 있습니다.', + 'settings.agentAccess.loading': '불러오는 중…', + 'settings.agentAccess.accessMode': '접근 모드', + 'settings.agentAccess.tier.readonly.title': '읽기 전용', + 'settings.agentAccess.tier.readonly.desc': + '탐색을 위해 파일을 읽고 읽기 전용 명령을 실행하지만, 쓰기, 편집 또는 상태를 변경하는 작업은 절대 실행하지 않습니다.', + 'settings.agentAccess.tier.supervised.title': '편집 전 확인', + 'settings.agentAccess.tier.supervised.desc': + '새 파일은 자유롭게 만들 수 있지만 기존 파일 편집, 명령 실행, 네트워크 접근 또는 설치 전에는 승인을 요청합니다.', + 'settings.agentAccess.tier.full.title': '전체 접근', + 'settings.agentAccess.tier.full.desc': + '사용자 계정의 전체 접근 권한으로 명령을 실행합니다. 자격 증명 및 시스템 저장소를 제외하고 허용된 모든 위치를 읽고 쓸 수 있습니다. 파괴적 명령, 네트워크 접근, 설치는 계속 승인을 요청합니다.', + 'settings.agentAccess.defaultTag': '(기본값)', + 'settings.agentAccess.fullWarning': + '⚠ 전체 접근은 사용자 계정의 전체 접근 권한으로 명령을 실행하며 샌드박스가 적용되지 않습니다. 이 컴퓨터에서 에이전트를 신뢰할 때만 활성화하세요. 자격 증명 및 시스템 디렉터리는 계속 차단되며, 파괴적 작업, 네트워크 작업, 설치 작업은 계속 승인을 요청합니다.', + 'settings.agentAccess.confine.label': '작업공간으로 제한', + 'settings.agentAccess.confine.desc': + '선택한 접근 모드와 관계없이 에이전트를 작업공간 디렉터리와 허용된 폴더로 제한합니다. 끄면 항상 차단되는 자격 증명 및 시스템 디렉터리를 제외하고 사용자가 접근할 수 있는 모든 위치에 접근할 수 있습니다.', + 'settings.agentAccess.requireTaskPlanApproval.label': '작업 계획 승인 필요', + 'settings.agentAccess.requireTaskPlanApproval.desc': + '할당된 에이전트가 에이전트가 작성한 작업 브리프를 실행하기 전에 일시 중지합니다.', + 'settings.agentAccess.grantedFolders': '허용된 폴더', + 'settings.agentAccess.alwaysAllow': '항상 허용된 도구', + 'settings.agentAccess.alwaysAllowDesc': + '채팅에서 "항상 허용"으로 표시한 도구는 확인 없이 실행됩니다. 다시 확인을 받으려면 항목을 제거하세요.', + 'settings.agentAccess.alwaysAllowNone': '아직 항상 허용된 도구가 없습니다.', + 'settings.agentAccess.grantedDesc': + '작업공간 외에 에이전트가 읽고 쓸 수 있는 폴더입니다. 자격 증명 저장소(~/.ssh, ~/.gnupg, ~/.aws, keychains)와 시스템 디렉터리(/etc, /System, C:\\Windows, …)는 허용된 폴더 안에 있어도 항상 차단됩니다.', + 'settings.agentAccess.noneGranted': '허용된 폴더가 없습니다.', + 'settings.agentAccess.readWrite': '읽기 + 쓰기', + 'settings.agentAccess.readOnly': '읽기 전용', + 'settings.agentAccess.remove': '제거', + 'settings.agentAccess.pathPlaceholder': '폴더의 절대 경로', + 'settings.agentAccess.accessLevelLabel': '접근 수준', + 'settings.agentAccess.add': '추가', + 'settings.agentAccess.saving': '저장 중…', + 'settings.agentAccess.changesApply': '변경 사항은 다음 메시지부터 적용됩니다.', + 'settings.appearance.title': '외관', + 'settings.appearance.themeHeading': '테마', + 'settings.appearance.themeAria': '테마', + 'settings.appearance.modeLight': '라이트', + 'settings.appearance.modeLightDesc': '밝은 표면, 어두운 텍스트.', + 'settings.appearance.modeDark': '다크', + 'settings.appearance.modeDarkDesc': '어두운 표면, 해가 진 후 눈에 더 편안합니다.', + 'settings.appearance.modeSystem': '시스템과 일치', + 'settings.appearance.modeSystemDesc': 'OS 외관 설정을 따릅니다.', + 'settings.appearance.helperText': + '다크 모드는 전체 앱 — 채팅, 설정, 패널 — 을 어두운 팔레트로 전환합니다. "시스템과 일치"는 OS 외관을 따르며 실시간으로 업데이트됩니다.', + 'settings.appearance.tabBarHeading': '하단 탭 표시줄', + 'settings.appearance.tabBarAlwaysShowLabels': '항상 레이블 표시', + 'settings.appearance.tabBarAlwaysShowLabelsDesc': + '끄면 레이블은 마우스를 가져가거나 활성 탭에 대해서만 표시됩니다.', + 'settings.mascot.active': '활성', + 'settings.mascot.characterDesc': '캐릭터 설명', + 'settings.mascot.characterHeading': '캐릭터 제목', + 'settings.mascot.customGifError': + 'HTTPS .gif URL, loopback HTTP .gif URL, file:// .gif URL 또는 로컬 .gif 경로를 입력하세요.', + 'settings.mascot.customGifHeading': '사용자 지정 GIF 아바타', + 'settings.mascot.customGifLabel': '사용자 지정 GIF 아바타 URL', + 'settings.mascot.customGifPlaceholder': 'https://example.com/avatar.gif', + 'settings.mascot.characterPreview': '미리보기', + 'settings.mascot.characterStates': '상태', + 'settings.mascot.characterVisemes': '입 모양', + 'settings.mascot.colorAria': 'OpenHuman 색상', + 'settings.mascot.colorDesc': '색상 설명', + 'settings.mascot.colorHeading': '색상 제목', + 'settings.mascot.colorBlack': '검정', + 'settings.mascot.colorBurgundy': '버건디', + 'settings.mascot.colorCustom': '사용자 지정', + 'settings.mascot.colorNavy': '네이비', + 'settings.mascot.primaryColor': '기본 색상', + 'settings.mascot.secondaryColor': '보조 색상', + 'settings.mascot.colorYellow': '노랑', + 'settings.mascot.libraryUnavailable': 'OpenHuman 라이브러리를 사용할 수 없음', + 'settings.mascot.title': 'OpenHuman', + 'settings.mascot.loadingLibrary': 'OpenHuman 라이브러리 불러오는 중…', + 'settings.mascot.loadDetailError': '마스코트를 로드할 수 없습니다.', + 'settings.mascot.loadLibraryError': '마스코트 라이브러리를 로드할 수 없습니다.', + 'settings.mascot.localDefault': '로컬 OpenHuman(기본값)', + 'settings.mascot.menuTitle': '마스코트', + 'settings.mascot.menuDesc': '앱 전체에서 사용되는 마스코트 색상 선택', + 'settings.mascot.noCharacters': '아직 사용할 수 있는 OpenHuman 캐릭터가 없습니다', + 'settings.mascot.noColorVariants': '색상 변형 없음', + 'settings.mascot.voice.current': '현재', + 'settings.mascot.voice.customDesc': + 'api.elevenlabs.io/v1/voices 또는 ElevenLabs 대시보드에서 음성 ID를 찾으세요. ID만 저장되며 API 키는 백엔드에 유지됩니다.', + 'settings.mascot.voice.customHeading': '사용자 지정 음성 ID', + 'settings.mascot.voice.customOption': '기타(음성 ID 붙여넣기)…', + 'settings.mascot.voice.customPlaceholder': '예: 21m00Tcm4TlvDq8ikWAM', + 'settings.mascot.voice.desc': + '마스코트가 음성 응답에 사용할 ElevenLabs 음성을 선택하세요. 성별로 필터링하고, 선별된 목록에서 선택하거나, 사용자 지정 ID를 붙여넣거나, 앱이 인터페이스 언어에 맞는 음성을 선택하도록 할 수 있습니다.', + 'settings.mascot.voice.genderFemale': '여성', + 'settings.mascot.voice.genderHeading': '음성 성별', + 'settings.mascot.voice.genderMale': '남성', + 'settings.mascot.voice.heading': '음성', + 'settings.mascot.voice.preset': '음성 프리셋', + 'settings.mascot.voice.presetHeading': '음성 프리셋', + 'settings.mascot.voice.preview': '음성 미리듣기', + 'settings.mascot.voice.previewError': '음성 미리듣기 실패', + 'settings.mascot.voice.previewText': + '안녕하세요, 저는 당신의 어시스턴트입니다. 음성 미리듣기입니다.', + 'settings.mascot.voice.previewing': '미리듣는 중…', + 'settings.mascot.voice.reset': '기본값으로 초기화', + 'settings.mascot.voice.useLocaleDefault': '앱 언어와 일치', + 'settings.mascot.voice.useLocaleDefaultDesc': + '현재 인터페이스 언어에 맞는 음성을 자동으로 선택합니다.', + 'settings.persona.title': '페르소나', + 'settings.persona.menuTitle': '페르소나', + 'settings.persona.menuDesc': + '이름, 성격, 아바타, 음성을 하나의 어시스턴트 정체성으로 관리합니다.', + 'settings.persona.identityHeading': '정체성', + 'settings.persona.identityDesc': + '어시스턴트의 표시 이름과 짧은 설명입니다. 앱에 표시되며 어시스턴트의 추론 방식은 바꾸지 않습니다.', + 'settings.persona.displayNameLabel': '표시 이름', + 'settings.persona.displayNamePlaceholder': '예: Nova', + 'settings.persona.descriptionLabel': '설명', + 'settings.persona.descriptionPlaceholder': '예: 우리 팀을 위한 차분하고 간결한 어시스턴트.', + 'settings.persona.soul.heading': '성격(SOUL.md)', + 'settings.persona.soul.desc': + '어시스턴트가 모든 대화에서 따르는 성격 프롬프트입니다. 편집 내용은 작업공간에 저장되며 다음 응답부터 적용됩니다.', + 'settings.persona.soul.editorLabel': 'SOUL.md 내용', + 'settings.persona.soul.reset': '기본값으로 초기화', + 'settings.persona.soul.usingDefault': '번들 기본값 사용 중', + 'settings.persona.soul.loadError': 'SOUL.md를 불러올 수 없습니다', + 'settings.persona.soul.saveError': 'SOUL.md를 저장할 수 없습니다', + 'settings.persona.soul.resetError': 'SOUL.md를 초기화할 수 없습니다', + 'settings.persona.appearanceHeading': '아바타 및 음성', + 'settings.persona.appearanceDesc': + '마스코트 색상, 사용자 지정 GIF 아바타, 응답 음성은 마스코트 설정에서 구성합니다.', + 'settings.persona.openMascotSettings': '마스코트 설정 열기', + 'settings.memoryWindow.balanced.badge': '추천', + 'settings.memoryWindow.balanced.hint': + '합리적인 기본값 — 매번 추가 토큰을 많이 쓰지 않으면서 좋은 연속성을 제공합니다.', + 'settings.memoryWindow.balanced.label': '균형', + 'settings.memoryWindow.description': + 'OpenHuman이 새 에이전트 실행마다 주입하는 기억된 컨텍스트의 양입니다. 창이 클수록 과거 대화를 더 잘 인식하지만, 매 실행마다 더 많은 토큰을 사용하고 비용도 더 듭니다.', + 'settings.memoryWindow.extended.badge': '더 많은 컨텍스트', + 'settings.memoryWindow.extended.hint': + '각 실행에 더 많은 장기 메모리를 주입합니다. 턴당 토큰 비용이 더 높습니다.', + 'settings.memoryWindow.extended.label': '확장', + 'settings.memoryWindow.maximum.badge': '가장 높은 비용', + 'settings.memoryWindow.maximum.hint': + '가장 큰 안전 창입니다. 최고의 연속성을 제공하지만 매 실행마다 토큰 비용이 의미 있게 증가합니다.', + 'settings.memoryWindow.maximum.label': '최대', + 'settings.memoryWindow.minimal.badge': '가장 저렴함', + 'settings.memoryWindow.minimal.hint': + '가장 작은 메모리 창입니다. 가장 저렴하고 빠르지만 실행 간 연속성이 가장 낮습니다.', + 'settings.memoryWindow.minimal.label': '최소', + 'settings.memoryWindow.title': '장기 메모리 창', + 'settings.modelHealth.title': '모델 상태', + 'settings.modelHealth.desc': '활성 모델 전반의 모델별 품질, 환각률, 비용 비교', + 'settings.modelHealth.allStatuses': '모든 상태', + 'settings.modelHealth.models': '모델', + 'settings.modelHealth.loading': '모델 데이터 불러오는 중...', + 'settings.modelHealth.empty': '등록된 모델이 없습니다', + 'settings.modelHealth.col.model': '모델', + 'settings.modelHealth.col.quality': '품질', + 'settings.modelHealth.col.halluc': '환각률', + 'settings.modelHealth.col.cost': '1M 출력당 비용', + 'settings.modelHealth.col.agents': '에이전트', + 'settings.modelHealth.col.status': '상태', + 'settings.modelHealth.badge.keep': '유지', + 'settings.modelHealth.badge.replace': '교체', + 'settings.modelHealth.badge.staging': '스테이징 테스트', + 'settings.modelHealth.badge.vision': '비전 전용', + 'settings.modelHealth.swap': '교체?', + 'settings.modelHealth.modal.title': '모델을 교체하시겠습니까?', + 'settings.modelHealth.modal.hallucRate': '환각률', + 'settings.modelHealth.modal.cancel': '취소', + 'settings.modelHealth.modal.apply': '교체 적용', + 'settings.modelHealth.tag.cheaper': '더 저렴함', + 'settings.modelHealth.tag.better': '더 좋음', + 'settings.screenIntel.permissions.accessibility': '접근성', + 'settings.screenIntel.permissions.grantHint': '권한 허용 안내', + 'settings.screenIntel.permissions.inputMonitoring': '입력 모니터링', + 'settings.screenIntel.permissions.macosAppliesPrivacy': 'macOS 개인정보 보호 적용', + 'settings.screenIntel.permissions.openInputMonitoring': '요청 중…', + 'settings.screenIntel.permissions.refreshStatus': '새로고침 중…', + 'settings.screenIntel.permissions.refreshing': '새로고침 중…', + 'settings.screenIntel.permissions.requestAccessibility': '요청 중…', + 'settings.screenIntel.permissions.requestScreenRecording': '요청 중…', + 'settings.screenIntel.permissions.requesting': '요청 중…', + 'settings.screenIntel.permissions.restartRefresh': '코어 다시 시작 중…', + 'settings.screenIntel.permissions.restartingCore': '코어 다시 시작 중…', + 'settings.screenIntel.permissions.screenRecording': '화면 녹화', + 'settings.screenIntel.permissions.title': '권한', + 'skills.card.moreActions': '추가 작업', + 'skills.channelIcon.discord': 'Discord', + 'skills.channelIcon.imessage': 'iMessage', + 'skills.channelIcon.telegram': 'Telegram', + 'skills.channelIcon.web': '웹', + 'skills.channelIcon.yuanbao': 'Yuanbao', + 'skills.composio.poweredBy': 'Composio 제공', + 'skills.composio.staleStatusTitle': '연결이 오래된 상태를 표시합니다.', + 'skills.create.allowedTools': '허용된 도구', + 'skills.create.allowedToolsHelp': 'SKILL.md 앞부분에 다음과 같이 렌더링됩니다.', + 'skills.create.allowedToolsPlaceholder': 'node_exec, 가져오기', + 'skills.create.author': '작성자', + 'skills.create.authorPlaceholder': '이름', + 'skills.create.commaSeparated': '(쉼표로 구분)', + 'skills.create.createBtn': '스킬 생성', + 'skills.create.createError': '스킬을 생성할 수 없습니다', + 'skills.create.creating': '생성 중…', + 'skills.create.description': '설명', + 'skills.create.descriptionPlaceholder': '이 스킬은 무엇을 하나요?', + 'skills.create.optional': '(선택 사항)', + 'skills.create.inputs.heading': 'Inputs', + 'skills.create.inputs.help': + '스킬에 필요한 매개변수를 선언하세요. Skills Runner가 런타임에 이에 대한 양식을 렌더링합니다.', + 'skills.create.inputs.add': '입력 추가', + 'skills.create.inputs.row.name': '입력 이름', + 'skills.create.inputs.row.namePlaceholder': '예: repo', + 'skills.create.inputs.row.nameError': + '영문자, 숫자, 밑줄, 대시만 사용 가능하며 영문자로 시작해야 합니다.', + 'skills.create.inputs.row.description': '입력 설명', + 'skills.create.inputs.row.descriptionPlaceholder': '이 필드에 무엇이 들어가나요?', + 'skills.create.inputs.row.type': 'Type', + 'skills.create.inputs.row.required': 'Required', + 'skills.create.inputs.row.remove': '입력 제거', + 'skills.create.inputs.type.string': 'Text', + 'skills.create.inputs.type.integer': 'Number', + 'skills.create.inputs.type.boolean': '예 / 아니오', + 'skills.create.license': '라이선스', + 'skills.create.licensePlaceholder': 'MIT', + 'skills.create.name': '이름', + 'skills.create.namePlaceholder': '예: Trade Journal', + 'skills.create.scope': '범위', + 'skills.create.scopeProjectHint': '/.openhuman/skills/', + 'skills.create.scopeUserHint': + '~/.openhuman/skills//SKILL.md에 작성됨 — 모든 워크스페이스에서 사용 가능.', + 'skills.create.slugLabel': '슬러그 라벨', + 'skills.create.subtitle': 'SKILL.md', + 'skills.create.tags': '태그', + 'skills.create.tagsPlaceholder': '거래, 연구', + 'skills.create.title': '새 스킬', + 'skills.detail.allowedTools': '허용된 도구', + 'skills.detail.author': '작성자', + 'skills.detail.bundledResources': '번들 리소스', + 'skills.detail.closeAriaLabel': '스킬 세부 정보 닫기', + 'skills.detail.location': '위치', + 'skills.detail.noBundledResources': '번들 리소스가 없습니다.', + 'skills.detail.tags': '태그', + 'skills.detail.warnings': '경고', + 'skills.install.errors.alreadyInstalledHint': + '이 슬러그와 관련된 스킬이 이미 작업공간에 존재합니다. 먼저 제거하거나 `metadata.id` / `name` 머리말을 변경하세요.', + 'skills.install.errors.alreadyInstalledTitle': '스킬이 이미 설치되어 있습니다.', + 'skills.install.errors.fetchFailedHint': + '요청이 성공적으로 완료되지 않았습니다. 연결 가능한 공용 파일에서 URL 지점을 확인하고 호스트가 2xx 응답을 반환했는지 확인하세요.', + 'skills.install.errors.fetchFailedTitle': '가져오기 실패', + 'skills.install.errors.fetchTimedOutHint': + '원격 호스트가 제때 응답하지 않았습니다. 다시 시도하거나 제한 시간을 늘리세요(1~600초).', + 'skills.install.errors.fetchTimedOutTitle': '가져오기 시간이 초과되었습니다.', + 'skills.install.errors.fetchTooLargeHint': + 'SKILL.md는 1MiB 미만이어야 합니다. 번들 리소스를 인라인하는 대신 `references/` 또는 `scripts/` 파일로 분할하세요.', + 'skills.install.errors.fetchTooLargeTitle': 'SKILL.md가 너무 큽니다.', + 'skills.install.errors.genericHint': + '백엔드에서 오류를 반환했습니다. 원시 메시지는 아래와 같습니다.', + 'skills.install.errors.genericTitle': '기술을 설치할 수 없습니다.', + 'skills.install.errors.invalidSkillHint': + '머리말은 비어 있지 않은 `이름` 및 `설명` 필드가 있고 `---`로 끝나는 유효한 YAML이어야 합니다.', + 'skills.install.errors.invalidSkillTitle': 'SKILL.md가 구문 분석되지 않았습니다.', + 'skills.install.errors.invalidUrlHint': + '공개 HTTPS URL만 허용됩니다. 개인, 루프백 및 메타데이터 호스트가 차단됩니다.', + 'skills.install.errors.invalidUrlTitle': 'URL 거부됨', + 'skills.install.errors.unsupportedUrlHint': + '직접 `.md` 링크만 작동합니다. GitHub의 경우 파일 링크(github.com/owner/repo/blob/.../SKILL.md) - 트리 및 repo 루트는 설치되지 않습니다.', + 'skills.install.errors.unsupportedUrlTitle': 'URL 형식이 지원되지 않습니다.', + 'skills.install.errors.writeFailedHint': + '작업공간 기술 디렉터리에 쓸 수 없습니다. `/.openhuman/skills/`에 대한 파일 시스템 권한을 확인하세요.', + 'skills.install.errors.writeFailedTitle': 'SKILL.md를 쓸 수 없습니다.', + 'skills.install.fetchLog': '로그 가져오기', + 'skills.install.fetchingPrefix': '가져오는 중', + 'skills.install.fetchingSuffix': '이는 구성한 시간 초과까지 걸릴 수 있습니다.', + 'skills.install.installBtn': '설치 중…', + 'skills.install.installComplete': '설치 완료', + 'skills.install.installing': '설치 중…', + 'skills.install.parseWarnings': '파싱 경고', + 'skills.install.rawError': '원시 오류', + 'skills.install.subtitleMiddle': 'HTTPS을 통해', + 'skills.install.subtitlePrefix': '아래에 설치합니다. 단일', + 'skills.install.subtitleSuffix': 'HTTPS만 가져옵니다. 개인 및 루프백 호스트는 차단됩니다.', + 'skills.install.successDiscovered': '{count} 새로운 스킬을 발견했습니다.', + 'skills.install.successNoNewIds': + '스킬이 설치되었지만 새 스킬 ID가 나타나지 않았습니다. 카탈로그에 이미 동일한 슬러그가 있는 스킬이 포함되어 있을 수 있습니다.', + 'skills.install.timeoutHint': '(초, 선택 사항)', + 'skills.install.timeoutHelp': '기본값은 60초입니다. 1-600 이외의 값은 서버측에서 고정됩니다.', + 'skills.install.timeoutInvalid': '1~600 사이의 정수여야 합니다.', + 'skills.install.timeoutLabel': '시간 초과 라벨', + 'skills.install.timeoutPlaceholder': '60', + 'skills.install.title': 'URL에서 스킬 설치', + 'skills.install.urlHelpMiddle': '파일.', + 'skills.install.urlHelpPrefix': '직접 링크', + 'skills.install.urlHelpSuffix': 'URLs 자동 재작성', + 'skills.install.urlInvalidPrefix': 'URL은 올바른 형식의', + 'skills.install.urlInvalidSuffix': '링크여야 합니다.', + 'skills.install.urlLabel': '스킬 URL', + 'skills.install.urlPlaceholder': 'https://raw.githubusercontent.com/owner/repo/main/SKILL.md', + 'skills.meetingBots.bannerDesc': + 'Google Meet 링크를 넣으면 OpenHuman이 게스트로 참여하여 말하고, 듣고, 반응합니다.', + 'skills.meetingBots.bannerTitle': 'OpenHuman을 회의에 보내기', + 'skills.meetingBots.busyTitle': 'OpenHuman이 바쁩니다', + 'skills.meetingBots.comingSoon': '곧 제공 예정', + 'skills.meetingBots.couldNotStartTitle': 'OpenHuman을 시작할 수 없습니다', + 'skills.meetingBots.displayName': '표시 이름', + 'skills.meetingBots.failedToStart': 'OpenHuman 시작에 실패했습니다.', + 'skills.meetingBots.joiningMessage': '몇 초 안에 참가자로 표시될 것입니다.', + 'skills.meetingBots.joiningTitle': 'OpenHuman이 회의에 참여하는 중', + 'skills.meetingBots.meetingLink': '회의 링크', + 'skills.meetingBots.modalAriaLabel': 'OpenHuman을 회의에 보내기', + 'skills.meetingBots.modalDesc': + 'OpenHuman이 익명 게스트로 참여하여 비디오를 통화에 스트리밍하고 에이전트를 통해 응답합니다.', + 'skills.meetingBots.modalTitle': 'OpenHuman을 회의에 보내기', + 'skills.meetingBots.newBadge': '새 항목', + 'skills.meetingBots.platformComingSoon': '{label} 지원이 곧 제공될 예정입니다.', + 'skills.meetingBots.platformHints.gmeet': 'Meet.google.com/abc-defg-hij', + 'skills.meetingBots.platformHints.teams': 'Teams.microsoft.com/...', + 'skills.meetingBots.platformHints.zoom': 'Zoom.us/j/...', + 'skills.meetingBots.platforms.gmeet': 'Google 모임', + 'skills.meetingBots.platforms.teams': 'Microsoft Teams', + 'skills.meetingBots.platforms.zoom': 'Zoom', + 'skills.meetingBots.sendTo': '보내기', + 'skills.meetingBots.soonSuffix': '곧', + 'skills.meetingBots.starting': '시작 중…', + 'skills.resource.preview.closeAriaLabel': '미리보기 닫기', + 'skills.resource.preview.failed': '미리보기 실패', + 'skills.resource.preview.loading': '미리보기 불러오는 중…', + 'skills.resource.tree.empty': '번들 리소스가 없습니다.', + 'skills.search.placeholder': '플레이스홀더', + 'skills.setup.autocomplete.acceptKey': '수락 키', + 'skills.setup.autocomplete.activeDesc': '활성 설명', + 'skills.setup.autocomplete.activeTitle': '자동 완성이 활성화됨', + 'skills.setup.autocomplete.customizeSettings': '설정 사용자 지정', + 'skills.setup.autocomplete.debounce': '디바운스', + 'skills.setup.autocomplete.description': '설명', + 'skills.setup.autocomplete.enableBtn': '활성화 중...', + 'skills.setup.autocomplete.enableError': '자동 완성을 활성화하지 못했습니다', + 'skills.setup.autocomplete.enabling': '활성화 중...', + 'skills.setup.autocomplete.notSupported': '지원되지 않음', + 'skills.setup.autocomplete.stepEnable': '인라인 완성 활성화', + 'skills.setup.autocomplete.stepSuccess': '사용 준비 완료', + 'skills.setup.autocomplete.stylePreset': '스타일 프리셋', + 'skills.setup.autocomplete.stylePresetValue': '균형(나중에 구성 가능)', + 'skills.setup.autocomplete.title': '텍스트 자동 완성', + 'skills.setup.screenIntel.activeDesc': '활성 설명', + 'skills.setup.screenIntel.activeTitle': '화면 인텔리전스가 활성화됨', + 'skills.setup.screenIntel.advancedSettings': '고급 설정', + 'skills.setup.screenIntel.allGranted': '모든 권한 허용됨', + 'skills.setup.screenIntel.captureMode': '캡처 모드', + 'skills.setup.screenIntel.captureModeValue': '모든 창(나중에 구성 가능)', + 'skills.setup.screenIntel.deniedHint': + '시스템 설정에서 권한을 허용한 후 아래를 클릭하여 다시 시작하고 변경 사항을 적용하세요.', + 'skills.setup.screenIntel.enableBtn': '활성화 중...', + 'skills.setup.screenIntel.enableDesc': + '화면의 내용을 읽고 유용한 컨텍스트를 에이전트에 제공합니다', + 'skills.setup.screenIntel.enableError': '화면 인텔리전스를 활성화하지 못했습니다', + 'skills.setup.screenIntel.enabling': '활성화 중...', + 'skills.setup.screenIntel.grant': '여는 중...', + 'skills.setup.screenIntel.granted': '허용됨', + 'skills.setup.screenIntel.macosOnly': 'macOS 전용', + 'skills.setup.screenIntel.opening': '여는 중...', + 'skills.setup.screenIntel.panicHotkey': '패닉 핫키', + 'skills.setup.screenIntel.permAccessibility': '접근성', + 'skills.setup.screenIntel.permInputMonitoring': '입력 모니터링', + 'skills.setup.screenIntel.permScreenRecording': '화면 녹화', + 'skills.setup.screenIntel.permissionsDesc': '권한 설명', + 'skills.setup.screenIntel.permissionPathLabel': 'macOS는 다음에 개인 정보 보호를 적용합니다.', + 'skills.setup.screenIntel.refreshStatus': '상태 새로고침', + 'skills.setup.screenIntel.restartRefresh': '다시 시작 중...', + 'skills.setup.screenIntel.restarting': '다시 시작 중...', + 'skills.setup.screenIntel.stepEnable': '스킬 활성화', + 'skills.setup.screenIntel.stepPermissions': '권한 허용', + 'skills.setup.screenIntel.stepSuccess': '사용 준비 완료', + 'skills.setup.screenIntel.title': '화면 인텔리전스', + 'skills.setup.screenIntel.visionModel': '비전 모델', + 'skills.setup.voice.activation': '활성화', + 'skills.setup.voice.activeDescPrefix': 'Fn', + 'skills.setup.voice.activeDescSuffix': 'Fn', + 'skills.setup.voice.activeTitle': '음성 인텔리전스가 활성화됨', + 'skills.setup.voice.customizeSettings': '설정 사용자 지정', + 'skills.setup.voice.downloadSttBtn': 'STT 다운로드 버튼', + 'skills.setup.voice.enableDesc': '활성화 설명', + 'skills.setup.voice.hotkey': '핫키', + 'skills.setup.voice.startBtn': '시작 중...', + 'skills.setup.voice.startError': '음성 서버를 시작하지 못했습니다', + 'skills.setup.voice.starting': '시작 중...', + 'skills.setup.voice.stepEnable': '음성 서버 시작', + 'skills.setup.voice.stepSetup': '모델 다운로드 필요', + 'skills.setup.voice.stepSuccess': '사용 준비 완료', + 'skills.setup.voice.sttNotReady': '음성-텍스트 모델이 준비되지 않음', + 'skills.setup.voice.sttNotReadyDesc': + '음성 인텔리전스에는 전사용 로컬 Whisper 모델이 필요합니다. 로컬 모델 설정에서 다운로드하세요.', + 'skills.setup.voice.sttReady': '음성-텍스트 모델 준비됨', + 'skills.setup.voice.sttReturnHint': 'STT 반환 안내', + 'skills.setup.voice.title': '음성 인텔리전스', + 'skills.uninstall.couldNotUninstall': '제거할 수 없습니다', + 'skills.uninstall.description': + '이 작업은 스킬 디렉터리와 모든 번들 리소스를 영구적으로 삭제합니다. 에이전트는 다음 턴부터 이를 더 이상 볼 수 없습니다.', + 'skills.uninstall.title': '제거', + 'skills.uninstall.uninstallBtn': '제거', + 'skills.uninstall.uninstalling': '제거 중…', + 'upsell.global.limitMessage': '계속하려면 플랜을 업그레이드하거나 크레딧을 충전하세요', + 'upsell.global.limitTitle': '사용자', + 'upsell.global.nearLimitMessage': + '사용 한도의 {pct}%를 사용했습니다. 더 높은 한도를 위해 업그레이드하세요.', + 'upsell.global.nearLimitTitle': '사용 한도에 가까워지고 있습니다', + 'upsell.usageLimit.bodyBudget': + '주간 한도에 도달했습니다.{reset} 한도를 피하려면 플랜을 업그레이드하거나 크레딧을 충전하세요.', + 'upsell.usageLimit.bodyRate': + '10시간 추론 속도 한도에 도달했습니다.{reset} 더 높은 한도를 위해 업그레이드하세요.', + 'upsell.usageLimit.heading': '사용 한도에 도달했습니다', + 'upsell.usageLimit.notNow': '지금은 아님', + 'upsell.usageLimit.perWindow': '{amount}', + 'upsell.usageLimit.planIncludes': '{plan}', + 'upsell.usageLimit.resetsIn': '{time}에 초기화됩니다.', + 'upsell.usageLimit.upgradePlan': '플랜 업그레이드', + 'upsell.usageLimit.weeklyInference': '{amount}', + 'walkthrough.tooltip.letsGo': '시작해 봅시다!', + 'walkthrough.tooltip.next': '다음 →', + 'walkthrough.tooltip.skip': '투어 건너뛰기', + 'walkthrough.tooltip.stepCounter': '{total}개 중 {n}개', + 'webhooks.activity.empty': '비어 있음', + 'webhooks.activity.title': '최근 활동', + 'webhooks.composioHistory.empty': '비어 있음', + 'webhooks.composioHistory.metadataId': '메타데이터 ID', + 'webhooks.composioHistory.metadataUuid': '메타데이터 UUID', + 'webhooks.composioHistory.payload': '페이로드', + 'webhooks.composioHistory.title': 'ComposeIO 트리거 기록', + 'webhooks.tunnels.active': '활성', + 'webhooks.tunnels.createFailed': '터널 생성 실패', + 'webhooks.tunnels.creating': '생성 중...', + 'webhooks.tunnels.deleteFailed': '터널 삭제 실패', + 'webhooks.tunnels.descriptionPlaceholder': '설명(선택 사항)', + 'webhooks.tunnels.echo': '에코', + 'webhooks.tunnels.empty': '비어 있음', + 'webhooks.tunnels.enableEcho': 'Echo 활성화', + 'webhooks.tunnels.inactive': '비활성', + 'webhooks.tunnels.namePlaceholder': '터널 이름(예: telegram-bot)', + 'webhooks.tunnels.newTunnel': '새 터널', + 'webhooks.tunnels.removeEcho': 'Echo 제거', + 'webhooks.tunnels.title': '웹훅 터널', + 'webhooks.tunnels.toggleFailed': 'Echo 전환 실패', + 'composio.directModeRequiresKey': + '저장에 실패했습니다. Direct 모드에는 비어 있지 않은 API 키가 필요합니다.', + 'composio.integrationSlugsHelp': '쉼표로 구분된 통합 슬러그, 예:', + 'composio.integrationSlugsExample': 'gmail, slack', + 'composio.integrationSlugsCaseInsensitive': '대소문자를 구분하지 않습니다.', + 'composio.integrationSlugsPlaceholder': 'gmail, slack, ...', + 'composio.notYetRouted': '아직 라우팅되지 않음', + 'composio.triggers.loading': '불러오는 중…', + 'conversations.taskKanban.todo': '할 일', + 'chat.addReaction': '반응 추가', + 'chat.agentProfile.create': '에이전트 프로필 생성', + 'chat.agentProfile.createFailed': '에이전트 프로필을 생성할 수 없습니다.', + 'chat.agentProfile.customDescription': '사용자 지정 에이전트 프로필', + 'chat.agentProfile.defaultAgentLabel': 'Orchestrator', + 'chat.agentProfile.exists': '에이전트 프로필 "{name}"이(가) 이미 존재합니다.', + 'chat.agentProfile.label': '에이전트 프로필', + 'chat.agentProfile.namePlaceholder': '프로필 이름', + 'chat.agentProfile.promptStylePlaceholder': '프롬프트 스타일', + 'chat.agentProfile.allowedToolsPlaceholder': '허용된 도구', + 'chat.backToThread': '{title}로 돌아가기', + 'chat.parentThread': '상위 스레드', + 'chat.removeReaction': '{emoji} 제거', + 'settings.composio.loading': '불러오는 중…', + 'settings.mascot.noCharactersAvailable': '아직 사용할 수 있는 OpenHuman 캐릭터가 없습니다', + 'skills.uninstall.confirmTitle': '{name}을(를) 제거하시겠습니까?', + 'conversations.taskKanban.blocked': '차단됨', + 'conversations.taskKanban.done': '완료', + 'conversations.taskKanban.pending': '대기 중', + 'conversations.taskKanban.working': '작업 중', + 'conversations.taskKanban.awaitingApproval': '승인 대기 중', + 'conversations.taskKanban.ready': '준비됨', + 'conversations.taskKanban.rejected': '거부됨', + 'conversations.taskKanban.inProgress': '진행 중', + 'intelligence.memoryChunk.detail.copiedHint': '복사됨', + 'settings.composio.notYetRouted': '아직 라우팅되지 않음', + 'settings.localModel.download.manageExternal': '외부 런타임에서 이 모델을 관리하세요.', + 'settings.localModel.status.manageOllamaExternal': + 'OpenHuman 외부에서 Ollama 프로세스와 모델 가져오기를 관리한 다음 진단을 다시 실행하세요.', + 'settings.localModel.status.ollamaDocs': 'Ollama 문서', + 'settings.localModel.status.thenRetry': + '설정 지침을 확인한 다음 런타임에 연결할 수 있게 되면 다시 시도하세요.', + 'devOptions.menuAi': 'AI 구성', + 'devOptions.menuAiDesc': '클라우드 공급자, 로컬 Ollama 모델 및 워크로드별 라우팅', + 'devOptions.menuScreenAware': '화면 인식', + 'devOptions.menuScreenAwareDesc': '화면 캡처 권한, 모니터링 정책 및 세션 제어', + 'devOptions.menuMessaging': '메시징 채널', + 'devOptions.menuMessagingDesc': 'Telegram/Discord 인증 모드 및 기본 채널 라우팅 구성', + 'devOptions.menuTools': '도구', + 'devOptions.menuToolsDesc': + 'OpenHuman이(가) 사용자를 대신하여 사용할 수 있는 기능 활성화 또는 비활성화', + 'devOptions.menuAgentChat': '에이전트 채팅', + 'devOptions.menuAgentChatDesc': '모델 및 온도 재정의를 사용한 테스트 에이전트 대화', + 'devOptions.menuCronJobs': '크론 작업', + 'devOptions.menuCronJobsDesc': '런타임 기술에 대해 예약된 작업 보기 및 구성', + 'devOptions.menuLocalModelDebug': '로컬 모델 디버그', + 'devOptions.menuLocalModelDebugDesc': 'Ollama 구성, 자산 다운로드, 모델 테스트 및 진단', + 'devOptions.menuWebhooksDebug': '웹후크', + 'devOptions.menuWebhooksDebugDesc': '런타임 웹후크 등록 및 캡처된 요청 로그 검사', + 'devOptions.menuIntelligence': '인텔리전스', + 'devOptions.menuIntelligenceDesc': '메모리 작업 공간, 잠재의식 엔진, 드림 및 설정', + 'devOptions.menuNotificationRouting': '알림 라우팅', + 'devOptions.menuNotificationRoutingDesc': + '통합 경고에 대한 AI 중요도 점수 및 오케스트레이터 에스컬레이션', + 'devOptions.menuComposeIOTriggers': 'ComposeIO 트리거', + 'devOptions.menuComposeIOTriggersDesc': 'ComposeIO 트리거 기록 및 아카이브 보기', + 'devOptions.menuComposioRouting': 'Composio 라우팅(직접 모드)', + 'devOptions.menuComposioRoutingDesc': + '자체 Composio API 키를 가져와 호출을 backend.composio.dev로 직접 라우팅', + 'devOptions.menuComposioTriggers': '통합 트리거', + 'devOptions.menuComposioTriggersDesc': 'Composio 통합 트리거에 대한 AI 심사 설정 구성', + 'memory.sourceFilterAria': '소스별 필터링', + 'calls.comingSoonDescription': 'AI 지원 통화가 곧 제공됩니다. 기대해 주세요.', + 'vault.title': '지식 보관소', + 'vault.description': '로컬 폴더를 가리킵니다. 파일은 청크로 분할되어 메모리에 미러링됩니다.', + 'vault.add': '저장소 추가', + 'vault.added': '저장소 추가', + 'vault.createdMessage': '"{name}"을(를) 생성했습니다. 수집하려면 {sync}을 클릭하세요.', + 'vault.couldNotAdd': '볼트를 추가할 수 없습니다.', + 'vault.syncFailed': '동기화 실패', + 'vault.syncFailedFor': '"{name}"에 대한 동기화 실패', + 'vault.syncFailedFiles': '{count} 파일 실패', + 'vault.syncedTitle': '동기화됨 "{name}"', + 'vault.syncSummary': '{ingested} 수집, {unchanged} 변경, {removed}', + 'vault.syncSummaryFailed': '제거, {count}', + 'vault.syncSummarySkipped': '실패, {count}', + 'vault.syncSummaryDuration': '건너뛰었습니다. {seconds}s', + 'vault.confirmRemovePurge': + '볼트 "{name}"을(를) 제거하시겠습니까?\n\n확인을 클릭하면 수집된 문서 {count}개도 함께 삭제됩니다.\n취소를 클릭하면 문서가 메모리에 유지됩니다.', + 'vault.confirmRemove': '"{name}" 볼트를 제거하시겠습니까?', + 'vault.removed': 'Vault가 제거되었습니다.', + 'vault.removedPurgedMessage': '"{name}"을(를) 제거하고 해당 메모리를 삭제했습니다.', + 'vault.removedKeptMessage': '"{name}"을(를) 제거했습니다. 문서는 메모리에 보관됩니다.', + 'vault.couldNotRemove': '볼트를 제거할 수 없습니다.', + 'vault.name': '이름', + 'vault.namePlaceholder': '내 연구 노트', + 'vault.folderPath': '폴더 경로(절대)', + 'vault.folderPathPlaceholder': '/사용자/당신/문서/메모', + 'vault.excludes': '제외(쉼표로 구분된 하위 문자열, 선택 사항)', + 'vault.excludesPlaceholder': '초안/, .secret', + 'vault.creating': '생성 중…', + 'vault.create': '볼트 생성', + 'vault.loading': '볼트 로드 중…', + 'vault.failedToLoad': '볼트 로드 실패: {error}', + 'vault.empty': '아직 Vault가 없습니다. 폴더 수집을 시작하려면 위에 하나를 추가하세요.', + 'vault.fileCount': '{count} 파일', + 'vault.syncedRelative': '동기화됨 {time}', + 'vault.neverSynced': '동기화되지 않음', + 'vault.syncingProgress': '동기화 중… {ingested}/{total}', + 'vault.removing': '제거 중…', + 'vault.relative.sec': '{count}초 전', + 'vault.relative.min': '{count}분 전', + 'vault.relative.hr': '{count}시간 전', + 'vault.relative.day': '{count}일 전', + 'whatsapp.title': 'WhatsApp', + 'subconscious.interval.fiveMinutes': '5분', + 'subconscious.interval.tenMinutes': '10분', + 'subconscious.interval.fifteenMinutes': '15분', + 'subconscious.interval.thirtyMinutes': '30분', + 'subconscious.interval.oneHour': '1시간', + 'subconscious.interval.sixHours': '6시간', + 'subconscious.interval.twelveHours': '12시간', + 'subconscious.interval.oneDay': '1일', + 'subconscious.priority.critical': '심각', + 'subconscious.priority.important': '중요', + 'subconscious.priority.normal': '정상', + 'subconscious.durationSeconds': '{seconds}s', + 'subconscious.durationMilliseconds': '{milliseconds}ms', + 'settings.appearance': '모양', + 'settings.appearanceDesc': '밝은 색, 어두운 색 선택 또는 시스템 테마와 일치', + 'settings.mascot': '마스코트', + 'settings.mascotDesc': '앱 전체에서 사용되는 마스코트 색상 선택', + 'pages.settings.account.walletBalances': '지갑 잔액', + 'pages.settings.account.walletBalancesDesc': '로컬 지갑의 멀티체인 잔액을 확인하세요', + 'walletBalances.title': '지갑 잔액', + 'walletBalances.refresh': 'Refresh', + 'walletBalances.loading': '잔액 불러오는 중…', + 'walletBalances.retry': 'Retry', + 'walletBalances.emptyState': '아직 지갑 계정이 없습니다 — 복구 문구에서 지갑을 설정하세요.', + 'walletBalances.copyAddress': '주소 복사', + 'walletBalances.providerMissing': '공급자 사용 불가', + 'walletBalances.rawBalance': '원본: {raw}', + 'walletBalances.errorGeneric': + '지갑 잔액을 불러올 수 없습니다. 복구 문구에서 지갑을 설정하고 다시 시도하세요.', + 'settings.taskSources.title': '작업 소스', + 'settings.taskSources.subtitle': '도구의 작업을 에이전트 할 일 보드로 가져옵니다', + 'settings.taskSources.description': + 'GitHub, Notion, Linear, ClickUp에서 작업 항목을 수집하고 보강한 뒤 에이전트 할 일 보드로 라우팅합니다.', + 'settings.taskSources.connectHint': + '작업 소스는 연결된 계정을 사용합니다. 먼저 통합에서 계정을 연결하세요.', + 'settings.taskSources.disabledBanner': + '설정에서 작업 소스가 비활성화되어 있습니다. 자동으로 폴링하려면 활성화하세요.', + 'settings.taskSources.loadError': '작업 소스를 불러오지 못했습니다', + 'settings.taskSources.addTitle': '작업 소스 추가', + 'settings.taskSources.provider': '제공업체', + 'settings.taskSources.name': '이름(선택 사항)', + 'settings.taskSources.namePlaceholder': '예: 내 열린 이슈', + 'settings.taskSources.github.repo': '저장소 (소유자/이름, 선택 사항)', + 'settings.taskSources.github.labels': '레이블(쉼표로 구분)', + 'settings.taskSources.notion.database': '데이터베이스(보드) ID', + 'settings.taskSources.linear.team': '팀 ID(선택 사항)', + 'settings.taskSources.clickup.team': '작업공간(팀) ID(선택 사항)', + 'settings.taskSources.assignedToMe': '내게 할당된 항목만', + 'settings.taskSources.add': '소스 추가', + 'settings.taskSources.adding': '추가 중…', + 'settings.taskSources.preview': '미리보기', + 'settings.taskSources.previewResult': '{count}개 작업이 이 필터와 일치합니다', + 'settings.taskSources.fetchNow': '지금 가져오기', + 'settings.taskSources.fetching': '가져오는 중…', + 'settings.taskSources.fetchResult': '{fetched}개 작업 중 {routed}개 라우팅됨', + 'settings.taskSources.configured': '구성된 소스', + 'settings.taskSources.empty': '아직 구성된 작업 소스가 없습니다.', + 'settings.taskSources.proactive': '능동형', + 'settings.taskSources.lastFetch': '마지막 가져오기', + 'settings.taskSources.never': '없음', + 'settings.taskSources.statusEnabled': '활성화됨', + 'settings.taskSources.statusDisabled': '비활성화됨', + 'settings.taskSources.enable': '활성화', + 'settings.taskSources.disable': '비활성화', + 'settings.taskSources.remove': '제거', + 'settings.taskSources.removeConfirm': + '이 작업 소스를 제거하시겠습니까? 수집된 모든 작업 기록이 삭제되며 되돌릴 수 없습니다.', + 'settings.taskSources.refresh': '새로고침', + 'settings.taskSources.providers.github': 'GitHub', + 'settings.taskSources.providers.notion': 'Notion', + 'settings.taskSources.providers.linear': 'Linear', + 'settings.taskSources.providers.clickup': 'ClickUp', + 'skills.dashboard.title': 'Skills', + 'skills.dashboard.scheduledHeading': '예약된 스킬', + 'skills.dashboard.emptyTitle': '예약된 스킬 없음', + 'skills.dashboard.emptyBody': + '번들 스킬을 한 번 실행하거나 반복 일정을 저장하면 여기에 표시됩니다.', + 'skills.dashboard.create': '스킬 만들기', + 'skills.dashboard.run': '스킬 실행', + 'skills.dashboard.enable': '예약된 스킬 활성화', + 'skills.dashboard.disable': '예약된 스킬 비활성화', + 'skills.dashboard.lastRun': '마지막 실행', + 'skills.dashboard.nextRun': '다음 실행', + 'skills.dashboard.cardOpenRunner': '러너에서 열기', + 'skills.dashboard.loadError': '예약된 스킬을 불러오지 못했습니다', + 'skills.new.title': '스킬 만들기', + 'skills.new.placeholderBody': + '편집 양식이 곧 제공됩니다. 지금은 러너 페이지의 "새 스킬" 버튼을 사용하세요.', + 'settings.agents.title': '에이전트', + 'settings.agents.subtitle': + '위임에 사용할 수 있는 에이전트를 관리하세요. 기본 제공 에이전트와 직접 만든 사용자 지정 에이전트를 포함합니다.', + 'settings.agents.menuDesc': '기본 제공 및 사용자 지정 에이전트 관리', + 'settings.agents.newAgent': '새 에이전트', + 'settings.agents.loadError': '에이전트를 불러올 수 없습니다', + 'settings.agents.empty': '아직 에이전트가 없습니다', + 'settings.agents.sourceDefault': '기본 제공', + 'settings.agents.sourceCustom': '사용자 지정', + 'settings.agents.enable': '에이전트 활성화', + 'settings.agents.disable': '에이전트 비활성화', + 'settings.agents.edit': '편집', + 'settings.agents.delete': '삭제', + 'settings.agents.reset': '기본값으로 재설정', + 'settings.agents.modelLabel': '모델', + 'settings.agents.toolsLabel': '도구', + 'settings.agents.toolsAll': '모든 도구', + 'settings.agents.toolsCount': '도구 {count}개', + 'settings.agents.actionFailed': '에이전트를 업데이트할 수 없습니다', + 'settings.agents.orchestratorLocked': '오케스트레이터는 항상 활성화되어 있습니다.', + 'settings.agents.editor.createTitle': '새 에이전트', + 'settings.agents.editor.editTitle': '에이전트 편집', + 'settings.agents.editor.id': 'ID', + 'settings.agents.editor.idHint': '소문자, 숫자, _ 및 -만 사용할 수 있습니다.', + 'settings.agents.editor.name': '이름', + 'settings.agents.editor.description': '설명', + 'settings.agents.editor.model': '모델(선택 사항)', + 'settings.agents.editor.modelPlaceholder': '예: inherit, hint:fast 또는 모델 ID', + 'settings.agents.editor.systemPrompt': '시스템 프롬프트(선택 사항)', + 'settings.agents.editor.tools': '허용된 도구', + 'settings.agents.editor.toolsHint': + '한 줄에 도구 이름을 하나씩 입력하세요. 모든 도구에는 *를 사용하세요.', + 'settings.agents.editor.defaultsNote': + '기본 제공 에이전트를 편집하면 나중에 재설정할 수 있는 재정의로 저장됩니다.', + 'settings.agents.editor.save': '저장', + 'settings.agents.editor.create': '에이전트 만들기', + 'settings.agents.editor.saving': '저장 중…', + 'settings.agentsSection.title': 'Agents', + 'settings.agentsSection.description': + '에이전트와 그 자율성, 그리고 이 컴퓨터에서 액세스할 수 있는 항목을 관리하세요.', + 'settings.agentsSection.menuDesc': '레지스트리, 자율성 및 OS 접근', + 'settings.agents.editor.notFound': '에이전트를 찾을 수 없습니다.', + 'settings.agents.editor.modelInherit': '상속 (플랫폼 기본값)', + 'settings.agents.editor.modelHints': '라우트 힌트', + 'settings.agents.editor.modelTiers': '모델 등급', + 'settings.agents.editor.modelCustom': '사용자 정의 모델 ID…', + 'settings.agents.editor.modelCustomPlaceholder': '예: anthropic/claude-sonnet-4', + 'settings.agents.editor.selectTools': '도구 추가', + 'settings.agents.editor.toolsAllSelected': '모든 도구', + 'settings.agents.editor.toolsNoneSelected': '선택된 도구 없음', + 'settings.agents.editor.removeToolAria': '{tool} 제거', + 'settings.agents.editor.toolsModalTitle': '허용된 도구', + 'settings.agents.editor.toolsSelectedCount': '{count}개 선택됨', + 'settings.agents.editor.toolsSearchPlaceholder': '도구 검색…', + 'settings.agents.editor.toolsAllowAll': '모든 도구 허용 (*)', + 'settings.agents.editor.toolsAllowAllHint': + '이 에이전트는 사용 가능한 모든 도구를 사용할 수 있습니다.', + 'settings.agents.editor.toolsLoading': '도구 불러오는 중…', + 'settings.agents.editor.toolsLoadError': '도구를 불러올 수 없습니다', + 'settings.agents.editor.toolsEmpty': '검색 결과와 일치하는 도구가 없습니다.', + 'settings.agents.editor.toolsDone': 'Done', + 'settings.agents.editor.builtInReadonly': + '기본 제공 에이전트는 편집할 수 없습니다. 에이전트 목록에서 활성화, 비활성화 또는 초기화할 수 있습니다.', +}; -export default ko; +export default messages; diff --git a/app/src/lib/i18n/pl.ts b/app/src/lib/i18n/pl.ts index 2594268c6..ed2269920 100644 --- a/app/src/lib/i18n/pl.ts +++ b/app/src/lib/i18n/pl.ts @@ -1,32 +1,4155 @@ -import pl1 from './chunks/pl-1'; -import pl2 from './chunks/pl-2'; -import pl3 from './chunks/pl-3'; -import pl4 from './chunks/pl-4'; -import pl5 from './chunks/pl-5'; import type { TranslationMap } from './types'; -// Polish (Polski) translations. Each chunk maps to chunks/en-N.ts. -// Missing keys fall back to English via I18nContext.resolveEn(). -const pl: TranslationMap = { - ...pl1, - ...pl2, - ...pl3, - ...pl4, - ...pl5, +// Polish (Polski) translations. Keys mirror en.ts; missing/ +// English-identical values fall back to English via I18nContext.resolveEn(). +const messages: TranslationMap = { + 'nav.home': 'Start', + 'nav.human': 'Człowiek', + 'nav.chat': 'Czat', + 'nav.connections': 'Połączenia', + 'nav.memory': 'Inteligencja', + 'nav.alerts': 'Alerty', + 'nav.rewards': 'Nagrody', + 'nav.settings': 'Ustawienia', + 'common.cancel': 'Anuluj', + 'common.save': 'Zapisz', + 'common.confirm': 'Potwierdź', + 'common.delete': 'Usuń', + 'common.edit': 'Edytuj', + 'common.create': 'Utwórz', + 'common.search': 'Szukaj', + 'common.loading': 'ładowanie…', + 'common.error': 'Błąd', + 'common.success': 'Sukces', + 'common.back': 'Wstecz', + 'common.next': 'Dalej', + 'common.finish': 'Zakończ', + 'common.close': 'Zamknij', + 'common.enabled': 'Włączone', + 'common.disabled': 'Wyłączone', + 'common.on': 'Wł.', + 'common.off': 'Wył.', + 'common.yes': 'Tak', + 'common.no': 'Nie', + 'common.ok': 'OK', + 'common.name': 'Nazwa', + 'common.retry': 'Spróbuj ponownie', + 'common.copy': 'Kopiuj', + 'common.copied': 'Skopiowano', + 'common.learnMore': 'Dowiedz się więcej', + 'common.seeAll': 'Zobacz', + 'common.dismiss': 'Odrzuć', + 'common.clear': 'Wyczyść', + 'common.reset': 'Zresetuj', + 'common.refresh': 'Odśwież', + 'common.export': 'Eksportuj', + 'common.import': 'Importuj', + 'common.upload': 'Wgraj', + 'common.download': 'Pobierz', + 'common.add': 'Dodaj', + 'common.remove': 'Usuń', + 'common.showMore': 'Pokaż więcej', + 'common.showLess': 'Pokaż mniej', + 'common.submit': 'Wyślij', + 'common.continue': 'Kontynuuj', + 'common.comingSoon': 'Wkrótce', + 'common.breadcrumb': 'Ścieżka nawigacji', + 'settings.general': 'Ogólne', + 'settings.featuresAndAI': 'Funkcje i AI', + 'settings.billingAndRewards': 'Rozliczenia i nagrody', + 'settings.support': 'Wsparcie', + 'settings.advanced': 'Zaawansowane', + 'settings.dangerZone': 'Strefa niebezpieczna', + 'settings.account': 'Konto', + 'settings.accountDesc': 'Fraza odzyskiwania, zespół, połączenia i prywatność', + 'settings.notifications': 'Powiadomienia', + 'settings.notificationsDesc': 'Tryb Nie przeszkadzać i ustawienia powiadomień dla każdego konta', + 'settings.notifications.tabs.preferences': 'Preferencje', + 'settings.notifications.tabs.routing': 'Reguły routingu', + 'settings.features': 'Funkcje', + 'settings.featuresDesc': 'Świadomość ekranu, wiadomości i narzędzia', + 'settings.aiModels': 'AI i modele', + 'settings.aiModelsDesc': 'Konfiguracja lokalnych modeli AI, pobierania i dostawcy LLM', + 'settings.ai': 'Konfiguracja AI', + 'settings.aiDesc': 'Dostawcy chmurowi, modele Ollama lokalnie i routing per obciążenie', + 'settings.billingUsage': 'Rozliczenia i zużycie', + 'settings.billingUsageDesc': 'Plan subskrypcji, kredyty i metody płatności', + 'settings.rewards': 'Nagrody', + 'settings.rewardsDesc': 'Polecenia, kupony i zdobyte kredyty', + 'settings.restartTour': 'Uruchom przewodnik ponownie', + 'settings.restartTourDesc': 'Odtwórz wprowadzenie po produkcie od początku', + 'settings.about': 'O aplikacji', + 'settings.aboutDesc': 'Wersja aplikacji i aktualizacje oprogramowania', + 'settings.developerOptions': 'Zaawansowane', + 'settings.developerOptionsDesc': + 'Konfiguracja AI, kanały wiadomości, narzędzia, diagnostyka i panele debugowania', + 'settings.clearAppData': 'Wyczyść dane aplikacji', + 'settings.clearAppDataDesc': 'Wyloguj się i trwale wyczyść wszystkie lokalne dane aplikacji', + 'settings.logOut': 'Wyloguj się', + 'settings.logOutDesc': 'Wyloguj się ze swojego konta', + 'settings.exitLocalSession': 'Zakończ sesję lokalną', + 'settings.exitLocalSessionDesc': 'Wróć do ekranu logowania', + 'settings.language': 'Język', + 'settings.betaBuild': 'Wersja beta - v{version}', + 'settings.languageDesc': 'Język wyświetlania interfejsu aplikacji', + 'settings.alerts': 'Alerty', + 'settings.alertsDesc': 'Zobacz ostatnie alerty i aktywność w skrzynce odbiorczej', + 'settings.account.recoveryPhrase': 'Fraza odzyskiwania', + 'settings.account.recoveryPhraseDesc': 'Wyświetl i zabezpiecz swoją frazę odzyskiwania', + 'settings.account.team': 'Zespół', + 'settings.account.teamDesc': 'Zarządzaj członkami i uprawnieniami zespołu', + 'settings.account.connections': 'Połączenia', + 'settings.account.connectionsDesc': 'Zarządzaj połączonymi kontami i usługami', + 'settings.account.privacy': 'Prywatność', + 'settings.account.privacyDesc': 'Kontroluj, jakie dane opuszczają Twój komputer', + 'migration.title': 'Importuj z innego asystenta', + 'migration.description': + 'Przenieś pamięć i notatki z innego lokalnego asystenta do tej przestrzeni roboczej. Zacznij od Podglądu, aby zobaczyć, co dokładnie się zmieni, potem Zastosuj, aby skopiować dane. Twoja obecna pamięć jest najpierw archiwizowana.', + 'migration.vendorLabel': 'Dostawca źródłowy', + 'migration.vendor.openclaw': 'OpenClaw', + 'migration.vendor.hermes': 'Hermes Agent', + 'migration.sourceLabel': 'Ścieżka źródłowej przestrzeni roboczej (opcjonalne)', + 'migration.sourcePlaceholder': + 'Zostaw puste, aby wykryć automatycznie (np. ~/.openclaw/workspace)', + 'migration.sourcePlaceholderHermes': 'Pozostaw puste, aby wykryć automatycznie (np. ~/.hermes)', + 'migration.sourceHint': + 'Domyślnie używa standardowej lokalizacji dostawcy, gdy puste. Wpisz konkretną ścieżkę, jeśli przeniosłeś przestrzeń roboczą.', + 'migration.previewAction': 'Podgląd', + 'migration.previewRunning': 'Podgląd…', + 'migration.applyAction': 'Zastosuj import', + 'migration.applyRunning': 'Importowanie…', + 'migration.applyDisclaimer': + 'Zastosuj odblokowuje się po udanym Podglądzie tego samego źródła. Istniejąca pamięć jest archiwizowana przed importem.', + 'migration.reportTitlePreview': 'Podgląd — jeszcze nic nie zaimportowano', + 'migration.reportTitleApplied': 'Import ukończony', + 'migration.report.source': 'Źródłowa przestrzeń robocza', + 'migration.report.target': 'Docelowa przestrzeń robocza', + 'migration.report.fromSqlite': 'Ze SQLite (brain.db)', + 'migration.report.fromMarkdown': 'Z Markdown', + 'migration.report.imported': 'Zaimportowano', + 'migration.report.skippedUnchanged': 'Pominięto (bez zmian)', + 'migration.report.renamedConflicts': 'Zmieniono nazwę przy konflikcie', + 'migration.report.warnings': 'Ostrzeżenia', + 'migration.report.previewHint': + 'Jeszcze nic nie zostało zaimportowane. Kliknij Zastosuj import, aby skopiować.', + 'migration.report.appliedHint': + 'Zaimportowane wpisy są teraz w pamięci. Uruchom Podgląd ponownie, aby porównać.', + 'migration.confirmImport.singular': + 'Zaimportować {count} wpis do obecnej przestrzeni roboczej?\n\nŹródło: {source}\nCel: {target}\n\nIstniejąca pamięć zostanie zarchiwizowana przed uruchomieniem importu.', + 'migration.confirmImport.plural': + 'Zaimportować {count} wpisów do obecnej przestrzeni roboczej?\n\nŹródło: {source}\nCel: {target}\n\nIstniejąca pamięć zostanie zarchiwizowana przed uruchomieniem importu.', + 'settings.notifications.doNotDisturb': 'Tryb Nie przeszkadzać', + 'settings.notifications.doNotDisturbDesc': 'Wstrzymaj wszystkie powiadomienia na określony czas', + 'settings.notifications.channelControls': 'Sterowanie per kanał', + 'settings.notifications.channelControlsDesc': + 'Skonfiguruj preferencje powiadomień dla każdego kanału', + 'settings.features.screenAwareness': 'Świadomość ekranu', + 'settings.features.screenAwarenessDesc': 'Pozwól asystentowi widzieć Twoje aktywne okno', + 'settings.features.messaging': 'Wiadomości', + 'settings.features.messagingDesc': 'Ustawienia kanałów i integracji wiadomości', + 'settings.features.tools': 'Narzędzia', + 'settings.features.toolsDesc': 'Zarządzaj podłączonymi narzędziami i integracjami', + 'settings.ai.localSetup': 'Konfiguracja lokalnego AI', + 'settings.ai.localSetupDesc': 'Pobierz i skonfiguruj lokalne modele AI', + 'settings.ai.llmProvider': 'Dostawca LLM', + 'settings.ai.llmProviderDesc': 'Wybierz i skonfiguruj dostawcę AI', + 'clearData.title': 'Wyczyść dane aplikacji', + 'clearData.warning': 'To wyloguje Cię i trwale usunie lokalne dane aplikacji, w tym:', + 'clearData.bulletSettings': 'Ustawienia aplikacji i rozmowy', + 'clearData.bulletCache': 'Wszystkie lokalne dane cache integracji', + 'clearData.bulletWorkspace': 'Dane przestrzeni roboczej', + 'clearData.bulletOther': 'Wszystkie pozostałe dane lokalne', + 'clearData.irreversible': 'Tej operacji nie można cofnąć.', + 'clearData.clearing': 'Czyszczenie danych aplikacji...', + 'clearData.failed': 'Nie udało się wyczyścić danych i wylogować. Spróbuj ponownie.', + 'clearData.failedLogout': 'Nie udało się wylogować. Spróbuj ponownie.', + 'clearData.failedPersist': + 'Nie udało się wyczyścić utrwalonego stanu aplikacji. Spróbuj ponownie.', + 'welcome.title': 'Witaj w OpenHuman', + 'welcome.subtitle': 'Twoja osobista superinteligencja AI. Prywatna, prosta i niezwykle potężna.', + 'welcome.connectPrompt': 'Skonfiguruj URL RPC (zaawansowane)', + 'welcome.selectRuntime': 'Wybierz środowisko', + 'welcome.clearingAppData': 'Czyszczenie danych aplikacji...', + 'welcome.clearAppDataAndRestart': 'Wyczyść dane i uruchom ponownie', + 'welcome.clearAppDataWarning': + 'Spowoduje to usunięcie lokalnie przechowywanych sekretów i kont na tym urządzeniu. Twoje konto w chmurze pozostanie nienaruszone — możesz zalogować się ponownie od razu.', + 'welcome.resetErrorFallback': + 'Nie udało się wyczyścić danych aplikacji. Zamknij i ponownie otwórz OpenHuman, a następnie spróbuj ponownie.', + 'welcome.signingIn': 'Logowanie...', + 'welcome.termsIntro': 'Kontynuując akceptujesz', + 'welcome.termsOfUse': 'Regulamin', + 'welcome.termsJoiner': 'oraz', + 'welcome.privacyPolicy': 'Politykę prywatności', + 'welcome.termsOutro': '.', + 'welcome.urlPlaceholder': 'http://localhost:8089', + 'welcome.invalidUrl': 'Wpisz poprawny adres HTTP lub HTTPS', + 'welcome.connecting': 'Testowanie', + 'welcome.connect': 'Testuj', + 'home.greeting': 'Dzień dobry', + 'home.greetingAfternoon': 'Dobre popołudnie', + 'home.greetingEvening': 'Dobry wieczór', + 'home.askAssistant': 'Zapytaj asystenta o cokolwiek...', + 'home.statusOk': + 'Twoje urządzenie jest połączone. Utrzymuj aplikację uruchomioną, aby zachować połączenie. Wyślij wiadomość do agenta przyciskiem poniżej.', + 'home.statusBackendOnly': + 'Ponowne łączenie z backendem… Twój agent będzie dostępny ponownie za chwilę.', + 'home.statusCoreUnreachable': + 'Rdzeń OpenHuman nie odpowiada. Proces w tle mógł ulec awarii lub nie uruchomić się.', + 'home.statusInternetOffline': + 'Twoje urządzenie jest teraz offline. Sprawdź sieć lub uruchom ponownie aplikację, aby się połączyć.', + 'home.restartCore': 'Uruchom ponownie rdzeń', + 'home.restartingCore': 'Restartowanie rdzenia…', + 'home.themeToggle.toLight': 'Przełącz na tryb jasny', + 'home.themeToggle.toDark': 'Przełącz na tryb ciemny', + 'home.usageExhaustedTitle': 'Wykorzystałeś swój limit', + 'home.usageExhaustedBody': + 'Twój limit użycia na ten moment został wyczerpany. Wykup subskrypcję, aby odblokować większą ciągłą pojemność.', + 'home.usageExhaustedCta': 'Wykup subskrypcję', + 'home.routinesCard': 'Twoje Rutyny', + 'home.routinesActive': '{count} aktywnych', + 'routines.title': 'Twoje rutyny', + 'routines.subtitle': 'Rzeczy, które asystent wykonuje automatycznie', + 'routines.loading': 'Ładowanie rutyn…', + 'routines.empty': 'Brak rutyn', + 'routines.emptyHint': + 'Asystent może uruchamiać zadania według harmonogramu, takie jak poranne briefingi lub codzienne podsumowania.', + 'routines.refresh': 'Odśwież', + 'routines.nextRun': 'Następne uruchomienie', + 'routines.lastRunSuccess': 'Ostatnie uruchomienie zakończone powodzeniem', + 'routines.lastRunFailed': 'Ostatnie uruchomienie nie powiodło się', + 'routines.notRunYet': 'Jeszcze nie uruchomiono', + 'routines.runNow': 'Uruchom teraz', + 'routines.running': 'Uruchamianie…', + 'routines.viewHistory': 'Wyświetl historię', + 'routines.loadingHistory': 'Ładowanie…', + 'routines.noHistory': 'Brak historii uruchomień.', + 'routines.statusSuccess': 'Powodzenie', + 'routines.statusError': 'Błąd', + 'routines.showOutput': 'Pokaż wynik', + 'routines.hideOutput': 'Ukryj wynik', + 'routines.toggleEnabled': 'Włącz lub wyłącz tę rutynę', + 'routines.typeAgent': 'Agent', + 'routines.typeCommand': 'Polecenie', + 'nav.routines': 'Routines', + 'chat.newThread': 'Nowy wątek', + 'chat.typeMessage': 'Napisz wiadomość...', + 'chat.send': 'Wyślij wiadomość', + 'chat.thinking': 'Myślę...', + 'chat.noMessages': 'Brak wiadomości', + 'chat.startConversation': 'Rozpocznij rozmowę', + 'chat.regenerate': 'Wygeneruj ponownie', + 'chat.copyResponse': 'Skopiuj odpowiedź', + 'chat.citations': 'Cytowania', + 'chat.toolUsed': 'Użyte narzędzie', + 'scope.legacy': 'Legacy', + 'scope.user': 'Użytkownik', + 'scope.project': 'Projekt', + 'skills.title': 'Połączenia', + 'skills.search': 'Szukaj połączeń...', + 'skills.noResults': 'Nie znaleziono połączeń', + 'skills.connect': 'Połącz', + 'skills.disconnect': 'Rozłącz', + 'skills.configure': 'Zarządzaj', + 'skills.connected': 'Połączone', + 'skills.available': 'Dostępne', + 'skills.addAccount': 'Dodaj konto', + 'skills.channels': 'Kanały', + 'skills.integrations': 'Integracje Composio', + 'skills.integrationsSubtitle': + 'Chmurowe połączenia OAuth — zaloguj się swoim kontem, a Composio pośredniczy w tokenach, dzięki czemu agenci mogą czytać i działać w Twoim imieniu. Bez kluczy API do utrzymywania.', 'skills.composio.noApiKeyTitle': 'Brak skonfigurowanego klucza API Composio', 'skills.composio.noApiKeyDescription': 'W trybie lokalnym używany jest Twój własny klucz API Composio. Otwórz Ustawienia → Zaawansowane → Composio, aby dodać klucz, zanim podłączysz tutaj integracje.', 'skills.composio.noApiKeyCta': 'Otwórz ustawienia', - 'channels.localManagedUnavailable': - 'Kanały zarządzane są niedostępne dla użytkowników lokalnych.', + 'skills.tabs.composio': 'Composio', + 'skills.tabs.channels': 'Kanały', + 'skills.tabs.mcp': 'Serwery MCP', + 'skills.tabs.runners': 'Runnery', + 'memory.title': 'Pamięć', + 'memory.search': 'Szukaj w pamięci...', + 'memory.noResults': 'Nie znaleziono wspomnień', + 'memory.empty': + 'Brak wspomnień. Wspomnienia powstają automatycznie podczas korzystania z aplikacji.', + 'memory.tab.memory': 'Pamięć', + 'memory.tab.tasks': 'Zadania agenta', + 'memory.tab.tasksDescription': + 'Twórz i śledź zadania — własne listy do zrobienia oraz tablice, które Twoi agenci budują w rozmowach.', + 'memory.tab.subconscious': 'Podświadomość', + 'memory.tab.dreams': 'Marzenia senne', + 'memory.tab.calls': 'Połączenia', + 'memory.tab.diagram': 'Diagram', + 'memory.tab.centrality': 'Centrality', + 'memory.tab.settings': 'Ustawienia', + 'memory.analyzeNow': 'Analizuj teraz', + 'graphCentrality.title': 'Centralność grafu wiedzy', + 'graphCentrality.intro': + 'PageRank nad grafem pamięci pokazuje kluczowe węzły oraz encje-łączniki, które spajają oddzielne klastry, czego nie ujawnia proste zliczanie częstotliwości.', + 'graphCentrality.loading': 'Obliczanie centralności…', + 'graphCentrality.errorPrefix': 'Nie udało się załadować grafu:', + 'graphCentrality.retry': 'Ponów', + 'graphCentrality.empty': 'Nie ma jeszcze grafu wiedzy.', + 'graphCentrality.emptyHint': + 'Gdy asystent zapisze fakty o Tobie, najbardziej połączone encje pojawią się tutaj.', + 'graphCentrality.namespaceLabel': 'Przestrzeń nazw', + 'graphCentrality.namespaceAll': 'Wszystkie przestrzenie nazw', + 'graphCentrality.metricEntities': 'Encje', + 'graphCentrality.metricConnections': 'Połączenia', + 'graphCentrality.metricClusters': 'Klastry', + 'graphCentrality.clustersCaption': '{components} klastrów · największy zawiera {largest}', + 'graphCentrality.approximateBadge': 'przybliżone', + 'graphCentrality.approximateTitle': 'Zatrzymano na limicie iteracji przed pełną zbieżnością', + 'graphCentrality.rankedHeading': 'Najważniejsze encje według wpływu', + 'graphCentrality.colRank': '#', + 'graphCentrality.colEntity': 'Encja', + 'graphCentrality.colInfluence': 'Wpływ', + 'graphCentrality.colLinks': 'Linki', + 'graphCentrality.bridgeBadge': 'łącznik', + 'graphCentrality.bridgeTitle': 'Łącznik — bardziej wpływowy, niż sugeruje liczba linków', + 'graphCentrality.degreeTitle': '{in} wej. · {out} wyj.', + 'memoryTree.status.title': 'Drzewo pamięci', + 'memoryTree.status.autoSyncLabel': 'Automatyczna synchronizacja', + 'memoryTree.status.autoSyncDescription': + 'Wstrzymaj, aby zatrzymać nowe pobieranie. Istniejąca wiki pozostanie dostępna do zapytań.', + 'memoryTree.status.statusTile': 'Stan', + 'memoryTree.status.lastSyncTile': 'Ostatnia synchronizacja', + 'memoryTree.status.totalChunksTile': 'Fragmenty łącznie', + 'memoryTree.status.wikiSizeTile': 'Rozmiar wiki', + 'memoryTree.status.statusRunning': 'Działa', + 'memoryTree.status.statusPaused': 'Wstrzymane', + 'memoryTree.status.statusSyncing': 'Synchronizacja', + 'memoryTree.status.statusError': 'Błąd', + 'memoryTree.status.statusIdle': 'Bezczynne', + 'memoryTree.status.never': 'Nigdy', + 'memoryTree.status.fetchError': 'Nie udało się pobrać statusu drzewa pamięci', + 'memoryTree.status.retry': 'Ponów', + 'memoryTree.status.toggleFailed': 'Nie udało się przełączyć automatycznej synchronizacji', + 'memoryTree.status.justNow': 'przed chwilą', + 'memoryTree.status.secondsAgo': '{count} s temu', + 'memoryTree.status.minuteAgo': '1 min temu', + 'memoryTree.status.minutesAgo': '{count} min temu', + 'memoryTree.status.hourAgo': '1 godz. temu', + 'memoryTree.status.hoursAgo': '{count} godz. temu', + 'memoryTree.status.dayAgo': '1 dzień temu', + 'memoryTree.status.daysAgo': '{count} dni temu', + 'alerts.title': 'Alerty', + 'alerts.empty': 'Brak alertów', + 'alerts.markAllRead': 'Oznacz wszystkie jako przeczytane', + 'alerts.unread': 'nieprzeczytane', + 'rewards.title': 'Nagrody', + 'rewards.referrals': 'Polecenia', + 'rewards.coupons': 'Wykorzystaj', 'rewards.localUnavailable': 'Logowanie lokalne nie zbiera nagród, voucherów ani środków z poleceń. Wyloguj się i zaloguj kontem OpenHuman, jeśli zależy Ci na nagrodach.', 'rewards.localUnavailableCta': 'Otwórz ustawienia konta', + 'rewards.credits': 'Kredyty', + 'rewards.referralCode': 'Twój kod polecający', + 'rewards.copyCode': 'Skopiuj kod', + 'rewards.share': 'Udostępnij', + 'onboarding.welcome': 'Cześć. Jestem OpenHuman.', + 'onboarding.welcomeDesc': + 'Twój superinteligentny asystent AI uruchomiony na Twoim komputerze. Prywatny, prosty i niezwykle potężny.', + 'onboarding.context': 'Zbieranie kontekstu', + 'onboarding.contextDesc': 'Połącz narzędzia i usługi, z których korzystasz na co dzień.', + 'onboarding.localAI': 'Lokalne AI', + 'onboarding.localAIDesc': 'Skonfiguruj lokalny model AI uruchomiony na Twoim komputerze.', + 'onboarding.chatProvider': 'Dostawca czatu', + 'onboarding.chatProviderDesc': 'Wybierz, jak chcesz wchodzić w interakcje z asystentem.', + 'onboarding.referral': 'Polecenie', + 'onboarding.referralDesc': 'Wpisz kod polecający, jeśli go masz.', + 'onboarding.finish': 'Zakończ konfigurację', + 'onboarding.finishDesc': 'Gotowe! Zacznij korzystać z OpenHuman.', + 'onboarding.skip': 'Pomiń', + 'onboarding.getStarted': 'Rozpocznij', + 'onboarding.runtimeChoice.title': 'Jak chcesz uruchomić OpenHuman?', + 'onboarding.runtimeChoice.subtitle': + 'Wybierz, jak dużą część OpenHuman ma obsłużyć za Ciebie. Możesz to zmienić później w Ustawieniach.', + 'onboarding.runtimeChoice.cloud.title': 'Prosto', + 'onboarding.runtimeChoice.cloud.tagline': + 'Korzystaj z logowania OpenHuman, routingu modeli, wyszukiwarki i zarządzanych integracji.', + 'onboarding.runtimeChoice.cloud.f1': 'OAuth i routing modeli pośredniczone przez backend', + 'onboarding.runtimeChoice.cloud.f2': 'Kompresja tokenów, aby wydłużyć Twój limit', + 'onboarding.runtimeChoice.cloud.f3': 'Jedna subskrypcja, każdy model w komplecie', + 'onboarding.runtimeChoice.cloud.f4': + 'Brak kluczy modeli, wyszukiwarki i Composio do utrzymywania', + 'onboarding.runtimeChoice.cloud.f5': 'Lokalne drzewo pamięci, zarządzane usługi sieciowe', + 'onboarding.runtimeChoice.custom.title': 'Niestandardowo', + 'onboarding.runtimeChoice.custom.tagline': + 'Przynieś własne klucze. Wybierz, które usługi OpenHuman ma wywoływać.', + 'onboarding.runtimeChoice.custom.f1': 'Będziesz potrzebować kluczy API do prawie wszystkiego', + 'onboarding.runtimeChoice.custom.f2': 'Korzysta z usług, za które już płacisz', + 'onboarding.runtimeChoice.custom.f3': 'Trzyma obsługiwane obciążenia na Twoim komputerze', + 'onboarding.runtimeChoice.custom.f4': 'Więcej konfiguracji, więcej pokręteł', + 'onboarding.runtimeChoice.custom.f5': 'Najlepsze dla zaawansowanych użytkowników i deweloperów', + 'onboarding.runtimeChoice.cloud.creditHighlight': '1 USD darmowych kredytów na start', + 'onboarding.runtimeChoice.continueCloud': 'Kontynuuj w trybie Prosto', + 'onboarding.runtimeChoice.continueCustom': 'Kontynuuj w trybie Niestandardowo', + 'onboarding.runtimeChoice.recommended': 'Polecane', + 'onboarding.apiKeys.title': 'Dodajmy Twoje klucze API', + 'onboarding.apiKeys.subtitle': + 'Możesz wkleić je teraz lub pominąć i dodać później w Ustawieniach › AI. Klucze są przechowywane na tym urządzeniu, zaszyfrowane w spoczynku.', + 'onboarding.apiKeys.openaiLabel': 'Klucz API OpenAI', + 'onboarding.apiKeys.openaiPlaceholder': 'sk-...', + 'onboarding.apiKeys.openaiOauthHint': + 'Użyj ChatGPT Plus/Pro (subskrypcja) lub klucza API OpenAI — nie potrzeba obu.', + 'onboarding.apiKeys.openaiOauthOpening': 'Otwieranie logowania…', + 'onboarding.apiKeys.finishSignIn': 'Dokończ logowanie ChatGPT', + 'onboarding.apiKeys.orApiKey': 'lub klucz API', + 'onboarding.apiKeys.anthropicLabel': 'Klucz API Anthropic', + 'onboarding.apiKeys.anthropicPlaceholder': 'sk-ant-...', + 'onboarding.apiKeys.saveError': + 'Nie udało się zapisać tego klucza. Sprawdź go i spróbuj ponownie.', + 'onboarding.apiKeys.skipForNow': 'Pomiń na razie', + 'onboarding.apiKeys.continue': 'Zapisz i kontynuuj', + 'onboarding.apiKeys.saving': 'Zapisywanie…', + 'onboarding.custom.stepperInference': 'Inferencja', + 'onboarding.custom.stepperVoice': 'Głos', + 'onboarding.custom.stepperOAuth': 'OAuth', + 'onboarding.custom.stepperSearch': 'Wyszukiwarka', + 'onboarding.custom.stepperEmbeddings': 'Embeddings', + 'onboarding.custom.stepperMemory': 'Pamięć', + 'onboarding.custom.stepCounter': 'Krok {n} z {total}', + 'onboarding.custom.defaultTitle': 'Domyślnie', + 'onboarding.custom.defaultSubtitle': 'Niech OpenHuman zarządza tym za Ciebie.', + 'onboarding.custom.configureTitle': 'Skonfiguruj', + 'onboarding.custom.configureSubtitle': 'Wybiorę sam, co użyć.', + 'onboarding.custom.progressAriaLabel': 'Postęp konfiguracji', + 'onboarding.custom.continue': 'Kontynuuj', + 'onboarding.custom.back': 'Wstecz', + 'onboarding.custom.finish': 'Zakończ konfigurację', + 'onboarding.custom.configureLater': + 'Możesz dokończyć konfigurację po wprowadzeniu. Przeniesiemy Cię na odpowiednią stronę Ustawień, kiedy skończysz.', + 'onboarding.custom.openSettings': 'Otwórz w Ustawieniach', + 'onboarding.custom.inference.title': 'Inferencja (tekst)', + 'onboarding.custom.inference.subtitle': + 'Który model językowy ma odpowiadać na pytania i uruchamiać agentów?', + 'onboarding.custom.inference.defaultDesc': + 'OpenHuman domyślnie kieruje obciążenia przez zarządzany backend. Bez kluczy, bez konfiguracji.', + 'onboarding.custom.inference.configureDesc': + 'Przynieś własny klucz OpenAI lub Anthropic. Użyjemy go do każdego obciążenia tekstowego.', + 'onboarding.custom.voice.title': 'Głos', + 'onboarding.custom.voice.subtitle': 'Mowa na tekst i tekst na mowę dla trybu głosowego.', + 'onboarding.custom.voice.defaultDesc': + 'OpenHuman dostarcza zarządzanych dostawców STT/TTS, którzy mogą wysyłać audio/tekst do usług hostowanych.', + 'onboarding.custom.voice.configureDesc': + 'Użyj własnego ElevenLabs / OpenAI Whisper itp. Skonfiguruj w Ustawieniach › Głos.', + 'onboarding.custom.oauth.title': 'Połączenia (OAuth)', + 'onboarding.custom.oauth.subtitle': + 'Gmail, Slack, Notion i inne podłączone usługi, które wymagają OAuth.', + 'onboarding.custom.oauth.defaultDesc': + 'OpenHuman pośredniczy w OAuth i wywołaniach narzędzi przez zarządzaną przestrzeń Composio.', + 'onboarding.custom.oauth.configureDesc': + 'Przynieś własne konto / klucz API Composio. Skonfiguruj w Ustawieniach › Połączenia.', + 'onboarding.custom.search.title': 'Wyszukiwanie w sieci', + 'onboarding.custom.search.subtitle': 'Jak OpenHuman wyszukuje w sieci w Twoim imieniu.', + 'onboarding.custom.search.defaultDesc': + 'OpenHuman domyślnie używa zarządzanego proxy wyszukiwarki. Klucz API niepotrzebny.', + 'onboarding.custom.search.configureDesc': + 'Przynieś własny klucz dostawcy (Tavily, Brave itp.). Skonfiguruj w Ustawieniach › Narzędzia.', + 'onboarding.custom.embeddings.title': 'Embeddings', + 'onboarding.custom.embeddings.subtitle': + 'Jak OpenHuman generuje wektory embeddings na potrzeby wyszukiwania semantycznego.', + 'onboarding.custom.embeddings.defaultDesc': + 'OpenHuman używa zarządzanej usługi embeddings. Klucz API niepotrzebny.', + 'onboarding.custom.embeddings.configureDesc': + 'Przynieś własnego dostawcę embeddings (OpenAI, Voyage, Ollama itp.).', + 'onboarding.custom.memory.title': 'Pamięć', + 'onboarding.custom.memory.subtitle': + 'Jak OpenHuman zapamiętuje Twój kontekst, preferencje i wcześniejsze rozmowy.', + 'onboarding.custom.memory.defaultDesc': + 'OpenHuman zarządza pamięcią automatycznie. Nic do skonfigurowania.', + 'onboarding.custom.memory.configureDesc': + 'Przeglądaj, eksportuj lub czyść pamięć samodzielnie. Skonfiguruj w Ustawieniach › Pamięć.', + 'accounts.addAccount': 'Dodaj konto', + 'accounts.manageAccounts': 'Zarządzaj kontami', + 'accounts.noAccounts': 'Brak podłączonych kont', + 'accounts.connectAccount': 'Podłącz konto, aby zacząć', + 'accounts.agent': 'Agent', + 'accounts.respondQueue': 'Kolejka odpowiedzi', + 'accounts.disconnect': 'Rozłącz', + 'accounts.disconnectConfirm': 'Czy na pewno rozłączyć to konto?', + 'accounts.disconnectClearMemory': 'Usuń też pamięć z tego źródła', + 'accounts.disconnectClearMemoryHint': + 'Trwale usuwa lokalne fragmenty pamięci powiązane z tym połączeniem.', + 'accounts.searchAccounts': 'Szukaj kont...', + 'channels.title': 'Kanały', + 'channels.configure': 'Skonfiguruj kanał', + 'channels.setup': 'Konfiguracja', + 'channels.noChannels': 'Brak skonfigurowanych kanałów', + 'channels.localManagedUnavailable': + 'Kanały zarządzane są niedostępne dla użytkowników lokalnych.', + 'channels.addChannel': 'Dodaj kanał', + 'channels.status.connected': 'Połączony', + 'channels.status.disconnected': 'Rozłączony', + 'channels.status.error': 'Błąd', + 'channels.status.configuring': 'Konfigurowanie', + 'channels.defaultMessaging': 'Domyślny kanał wiadomości', + 'webhooks.title': 'Webhooki', + 'webhooks.create': 'Utwórz webhook', + 'webhooks.noWebhooks': 'Brak skonfigurowanych webhooków', + 'webhooks.url': 'URL', + 'webhooks.secret': 'Sekret', + 'webhooks.events': 'Zdarzenia', + 'webhooks.archiveDirectory': 'Katalog archiwum', + 'webhooks.todayFile': 'Dzisiejszy plik', + 'invites.title': 'Zaproszenia', + 'invites.create': 'Utwórz zaproszenie', + 'invites.noInvites': 'Brak oczekujących zaproszeń', + 'invites.code': 'Kod zaproszenia', + 'invites.copyLink': 'Skopiuj link', + 'invites.generate': 'Wygeneruj zaproszenie', + 'invites.generating': 'Generowanie...', + 'invites.refreshing': 'Odświeżanie zaproszeń...', + 'invites.loading': 'Ładowanie zaproszeń...', + 'invites.copyCodeAria': 'Skopiuj kod zaproszenia', + 'invites.revokeAria': 'Unieważnij zaproszenie', + 'invites.usedUp': 'Wykorzystane', + 'invites.uses': 'Wykorzystania: {current}{max}', + 'invites.expiresOn': 'Wygasa {date}', + 'invites.empty': 'Brak zaproszeń', + 'invites.emptyHint': 'Wygeneruj kod zaproszenia, aby udostępnić go innym', + 'invites.revokeTitle': 'Unieważnij kod zaproszenia', + 'invites.revokePromptPrefix': 'Czy na pewno unieważnić kod zaproszenia', + 'invites.revokeWarning': + 'Ten kod nie będzie już ważny i nie można go będzie użyć, aby dołączyć do zespołu.', + 'invites.revoking': 'Unieważnianie...', + 'invites.revokeAction': 'Unieważnij zaproszenie', + 'invites.failedGenerate': 'Nie udało się wygenerować zaproszenia', + 'invites.failedRevoke': 'Nie udało się unieważnić zaproszenia', + 'team.refreshingMembers': 'Odświeżanie członków...', + 'team.loadingMembers': 'Ładowanie członków...', + 'team.memberCount': '{count} członek', + 'team.memberCountPlural': '{count} członków', + 'team.you': '(Ty)', + 'team.removeAria': 'Usuń {name}', + 'team.noMembers': 'Nie znaleziono członków', + 'team.removeTitle': 'Usuń członka zespołu', + 'team.removePromptPrefix': 'Czy na pewno usunąć', + 'team.removePromptSuffix': 'z zespołu?', + 'team.removeWarning': 'Utracą dostęp do zespołu i wszystkich jego zasobów.', + 'team.removing': 'Usuwanie...', + 'team.removeAction': 'Usuń członka', + 'team.changeRoleTitle': 'Zmień rolę członka', + 'team.changeRolePrompt': 'Zmienić rolę użytkownika {name} z {oldRole} na {newRole}?', + 'team.changeRoleAdminGrant': + 'Nadasz pełne uprawnienia administratora, w tym możliwość zarządzania członkami zespołu.', + 'team.changeRoleAdminRemove': + 'Odbierzesz uprawnienia administratora i osoba ta nie będzie mogła zarządzać zespołem.', + 'team.changing': 'Zmienianie...', + 'team.changeRoleAction': 'Zmień rolę', + 'team.failedChangeRole': 'Nie udało się zmienić roli', + 'team.failedRemoveMember': 'Nie udało się usunąć członka', + 'devOptions.title': 'Zaawansowane', + 'devOptions.diagnostics': 'Diagnostyka', + 'devOptions.diagnosticsDesc': 'Zdrowie systemu, logi i metryki wydajności', + 'devOptions.toolPolicyDiagnosticsDesc': + 'Inwentarz narzędzi, postawa polityki, listy dozwolonych MCP i ostatnie blokady', + 'devOptions.toolPolicyDiagnostics.loading': 'Ładowanie…', + 'devOptions.toolPolicyDiagnostics.unavailable': 'Diagnostyka niedostępna', + 'devOptions.toolPolicyDiagnostics.posture.title': 'Postawa polityki', + 'devOptions.toolPolicyDiagnostics.posture.autonomy': 'Autonomia:', + 'devOptions.toolPolicyDiagnostics.posture.workspaceOnly': 'Tylko obszar roboczy:', + 'devOptions.toolPolicyDiagnostics.posture.maxActionsPerHour': 'Maks. akcji/godz.:', + 'devOptions.toolPolicyDiagnostics.posture.approvalMediumRisk': 'Zatwierdzenie (średnie ryzyko):', + 'devOptions.toolPolicyDiagnostics.posture.blockHighRisk': 'Blokuj wysokie ryzyko:', + 'devOptions.toolPolicyDiagnostics.inventory.title': 'Inwentarz', + 'devOptions.toolPolicyDiagnostics.inventory.totalTools': 'Narzędzia łącznie', + 'devOptions.toolPolicyDiagnostics.inventory.enabledTools': 'Włączone narzędzia', + 'devOptions.toolPolicyDiagnostics.inventory.mcpStdioTools': 'Narzędzia MCP stdio', + 'devOptions.toolPolicyDiagnostics.inventory.jsonRpcTools': 'Narzędzia JSON-RPC', + 'devOptions.toolPolicyDiagnostics.mcpAllowlists.title': 'Listy dozwolonych MCP', + 'devOptions.toolPolicyDiagnostics.mcpAllowlists.summary': + 'Włączone: {enabled} · Serwery: {enabledCount}/{totalCount}', + 'devOptions.toolPolicyDiagnostics.mcpAllowlists.unnamed': '', + 'devOptions.toolPolicyDiagnostics.mcpAllowlists.allowDeny': + 'dozwól={allowCount} odmów={denyCount}', + 'devOptions.toolPolicyDiagnostics.mcpWriteAudit.title': 'Audyt zapisu MCP', + 'devOptions.toolPolicyDiagnostics.mcpWriteAudit.summary': + 'Włączone: {enabled} · Ostatnie (24 godz.): {recentRows}', + 'devOptions.toolPolicyDiagnostics.recentBlocked.title': 'Ostatnie zablokowane wywołania', + 'devOptions.toolPolicyDiagnostics.recentBlocked.empty': 'Nie odnotowano zablokowanych wywołań.', + 'devOptions.toolPolicyDiagnostics.redactedSurfaces.title': 'Zredagowane powierzchnie', + 'devOptions.toolPolicyDiagnostics.redactedSurfaces.summary': + 'Z możliwością zapisu: {writeCount} · Powierzchnie polityki: {policyCount}', + 'devOptions.debugPanels': 'Panele debugowania', + 'devOptions.debugPanelsDesc': 'Feature flagi, inspekcja stanu i narzędzia debugowania', + 'devOptions.webhooks': 'Webhooki', + 'devOptions.webhooksDesc': 'Konfiguruj i testuj integracje webhooków', + 'devOptions.memoryInspection': 'Inspekcja pamięci', + 'devOptions.memoryInspectionDesc': 'Przeglądaj, odpytuj i zarządzaj wpisami pamięci', + 'voice.pushToTalk': 'Naciśnij i mów', + 'voice.recording': 'Nagrywanie...', + 'voice.processing': 'Przetwarzanie...', + 'voice.languageHint': 'Język', + 'misc.rehydrating': 'Ładowanie danych...', + 'misc.checkingServices': 'Sprawdzanie usług...', + 'misc.serviceUnavailable': 'Usługa niedostępna', + 'misc.somethingWentWrong': 'Coś poszło nie tak', + 'misc.tryAgainLater': 'Spróbuj ponownie później.', + 'misc.restartApp': 'Uruchom ponownie aplikację', + 'misc.updateAvailable': 'Dostępna aktualizacja', + 'misc.updateNow': 'Aktualizuj teraz', + 'misc.updateLater': 'Później', + 'misc.downloading': 'Pobieranie...', + 'misc.installing': 'Instalowanie...', + 'misc.beta': + 'OpenHuman jest we wczesnej fazie beta. Chętnie poznamy Twoje uwagi — każdy zgłoszony błąd pomaga nam szybciej wydać poprawki.', + 'misc.betaFeedback': 'Wyślij uwagi', + 'mnemonic.title': 'Fraza odzyskiwania', + 'mnemonic.warning': 'Zapisz te słowa w kolejności i przechowuj je w bezpiecznym miejscu.', + 'mnemonic.copyWarning': + 'Nigdy nie udostępniaj swojej frazy odzyskiwania. Każdy, kto ma te słowa, może uzyskać dostęp do Twojego konta.', + 'mnemonic.copied': 'Fraza odzyskiwania skopiowana do schowka', + 'mnemonic.reveal': 'Pokaż frazę', + 'mnemonic.revealPhrase': 'Pokaż frazę odzyskiwania', + 'mnemonic.hidden': 'Fraza odzyskiwania jest ukryta', + 'privacy.title': 'Prywatność i bezpieczeństwo', + 'privacy.description': 'Raport o danych wysyłanych do usług zewnętrznych.', + 'privacy.empty': 'Nie wykryto żadnych zewnętrznych transferów danych.', + 'privacy.whatLeavesComputer': 'Co opuszcza Twój komputer', + 'privacy.loading': 'Ładowanie szczegółów prywatności...', + 'privacy.loadError': + 'Nie udało się załadować listy prywatności. Kontrolki analityki poniżej nadal działają.', + 'privacy.noCapabilities': 'Żadna funkcja obecnie nie ujawnia ruchu danych.', + 'privacy.sentTo': 'Wysłano do', + 'privacy.leavesDevice': 'Opuszcza urządzenie', + 'privacy.staysLocal': 'Zostaje lokalnie', + 'privacy.anonymizedAnalytics': 'Anonimowa analityka', + 'privacy.shareAnonymizedData': 'Udostępniaj anonimowe dane o użytkowaniu', + 'privacy.shareAnonymizedDataDesc': + 'Pomóż ulepszać OpenHuman, udostępniając anonimowe raporty awarii i analitykę użytkowania. Wszystkie dane są w pełni anonimowe — nigdy nie zbieramy danych osobowych, wiadomości, kluczy portfela ani informacji o sesji.', + 'privacy.meetingFollowUps': 'Działania po spotkaniach', + 'privacy.autoHandoffMeet': 'Automatycznie przekazuj transkrypcje Google Meet do orchestratora', + 'privacy.autoHandoffMeetDesc': + 'Gdy spotkanie Google Meet się kończy, orchestrator OpenHuman może odczytać transkrypcję i wykonać akcje, np. przygotować wiadomości, zaplanować działania lub opublikować podsumowanie w podłączonym workspace Slack. Domyślnie wyłączone.', + 'privacy.analyticsDisclaimer': + 'Wszystkie raporty analityczne i błędów są w pełni anonimowe. Po włączeniu zbieramy informacje o awariach i typie urządzenia (Sentry) oraz anonimową analitykę (Google Analytics — odsłony, używane funkcje). Nigdy nie uzyskujemy dostępu do Twoich wiadomości, danych sesji, kluczy portfela, kluczy API ani danych osobowych. Możesz zmienić to ustawienie w dowolnym momencie.', + 'settings.about.version': 'Wersja', + 'settings.about.updateAvailable': 'jest dostępna', + 'settings.about.softwareUpdates': 'Aktualizacje oprogramowania', + 'settings.about.lastChecked': 'Ostatnio sprawdzone', + 'settings.about.checking': 'Sprawdzanie...', + 'settings.about.checkForUpdates': 'Sprawdź aktualizacje', + 'settings.about.releases': 'Wydania', + 'settings.about.releasesDesc': + 'Przeglądaj notatki o wydaniach i wcześniejsze buildy na GitHubie.', + 'settings.about.openReleases': 'Otwórz wydania na GitHubie', + 'settings.about.connection': 'Połączenie', + 'settings.about.connectionMode': 'Tryb', + 'settings.about.connectionModeLocal': 'Lokalny', + 'settings.about.connectionModeCloud': 'Chmura', + 'settings.about.connectionModeUnset': 'Nie wybrano', + 'settings.about.serverUrl': 'URL serwera', + 'settings.about.serverUrlUnavailable': 'Niedostępny', + 'settings.about.connectionHelperLocal': + 'Uruchomiony w procesie przez powłokę Tauri przy starcie aplikacji. Port wybierany jest przy każdym starcie, więc URL zmienia się między uruchomieniami.', + 'settings.about.connectionHelperCloud': + 'Połączono ze zdalnym rdzeniem. Zmień to w BootCheck lub w wyborze trybu chmury.', + 'settings.heartbeat.title': 'Heartbeat i pętle', + 'settings.heartbeat.desc': 'Steruj częstotliwością harmonogramu tła i podglądaj mapę pętli.', + 'settings.ledgerUsage.title': 'Księga zużycia', + 'settings.ledgerUsage.desc': + 'Ostatnie wydatki kredytów, matematyka budżetu i budżet odczytów API w tle.', + 'settings.costDashboard.title': 'Panel kosztów', + 'settings.costDashboard.desc': + 'Wydatki i zużycie tokenów z 7 dni w całym roju, z tempem budżetu i rozbiciem per model.', + 'settings.costDashboard.sevenDayCost': 'Dzienny koszt z 7 dni', + 'settings.costDashboard.sevenDayTokens': 'Zużycie tokenów z 7 dni', + 'settings.costDashboard.totalSpend': 'Suma z 7 dni', + 'settings.costDashboard.monthlyPace': 'Tempo miesięczne', + 'settings.costDashboard.budgetLimit': 'Limit budżetu', + 'settings.costDashboard.utilization': 'Wykorzystanie', + 'settings.costDashboard.modelBreakdown': 'Rozbicie per model', + 'settings.costDashboard.model': 'Model AI', + 'settings.costDashboard.provider': 'Dostawca', + 'settings.costDashboard.cost': 'Koszt', + 'settings.costDashboard.tokens': 'Tokeny', + 'settings.costDashboard.requests': 'Żądania', + 'settings.costDashboard.percentOfTotal': '% całości', + 'settings.costDashboard.inputTokens': 'Wejście', + 'settings.costDashboard.outputTokens': 'Wyjście', + 'settings.costDashboard.budgetNormal': 'Zgodnie z planem', + 'settings.costDashboard.budgetWarning': 'Ostrzeżenie', + 'settings.costDashboard.budgetExceeded': 'Ponad budżet', + 'settings.costDashboard.noBudget': 'Nie ustawiono limitu', + 'settings.costDashboard.noData': 'Brak zarejestrowanych kosztów z ostatnich 7 dni.', + 'settings.costDashboard.noModels': 'Brak aktywności modeli w ostatnich 7 dniach.', + 'settings.costDashboard.loading': 'Ładowanie panelu kosztów…', + 'settings.costDashboard.disabledHint': + 'Panel kosztów jest wyłączony w konfiguracji. Ustaw [cost.dashboard] enabled = true w config.toml, aby włączyć go ponownie.', + 'settings.costDashboard.subtitle': + 'Bieżące wydatki i zużycie tokenów w całym roju. Słupki odświeżają się automatycznie co kilka sekund — bez przeładowywania strony.', + 'settings.costDashboard.summaryAriaLabel': 'Metryki podsumowania kosztów', + 'settings.costDashboard.lastSevenDays': 'ostatnie 7 dni', + 'settings.costDashboard.utilizationOf': 'z', + 'settings.costDashboard.thisMonth': 'w tym miesiącu', + 'settings.costDashboard.monthlyPaceHint': + 'Prognozowane miesięczne wydatki przy bieżącym dziennym tempie (średnia × 30).', + 'settings.costDashboard.budgetLimitHint': + 'Miesięczny budżet odczytany z cost.monthly_limit_usd w config.toml.', + 'settings.costDashboard.dailyTarget': 'Cel dzienny', + 'settings.costDashboard.today': 'Dzisiaj', + 'settings.costDashboard.todayBadge': 'DZISIAJ', + 'settings.costDashboard.unknownProvider': '—', + 'settings.costDashboard.justNow': 'Przed chwilą', + 'settings.costDashboard.secondsAgo': '{value} s temu', + 'settings.costDashboard.minutesAgo': '{value} min temu', + 'settings.costDashboard.hoursAgo': '{value} godz. temu', + 'settings.costDashboard.daysAgo': '{value} dni temu', + 'settings.costDashboard.updated': 'Zaktualizowano', + 'settings.costDashboard.refresh': 'Odśwież', + 'settings.costDashboard.utcNote': 'Dni grupowane według UTC', + 'settings.costDashboard.stackedNote': 'Wejście + wyjście skumulowane', + 'settings.costDashboard.modelBreakdownHint': 'Zagregowane z ostatnich 7 dni.', + 'settings.costDashboard.noDataHint': + 'Wyślij wiadomość do agenta — zużycie tokenów z następnego wywołania dostawcy pojawi się na wykresie w ciągu około 10 sekund.', + 'settings.search.title': 'Wyszukiwarka', + 'settings.search.menuDesc': + 'Użyj domyślnie wyszukiwarki zarządzanej przez OpenHuman lub podłącz własnego dostawcę z kluczem API.', + 'settings.search.description': + 'Wybierz wyszukiwarkę używaną przez agenta. Zarządzana korzysta z backendu OpenHuman (bez konfiguracji). Parallel i Brave działają bezpośrednio z Twojego urządzenia, używając Twojego klucza API.', + 'settings.search.engineAria': 'Wyszukiwarka', + 'settings.search.engineDisabledLabel': 'Disabled', + 'settings.search.engineDisabledDesc': + 'Usuń narzędzia wyszukiwania z kontekstu agenta i listy dostępnych narzędzi.', + 'settings.search.engineManagedLabel': 'OpenHuman zarządzane', + 'settings.search.engineManagedDesc': 'Domyślnie. Przez backend OpenHuman — bez klucza API.', 'settings.search.localManagedUnavailable': 'Wyszukiwarka zarządzana przez OpenHuman jest niedostępna dla użytkowników lokalnych. Dodaj własny klucz API Parallel lub Brave, aby włączyć wyszukiwanie w sieci.', + 'settings.search.engineParallelLabel': 'Parallel', + 'settings.search.engineParallelDesc': + 'Bezpośrednie API Parallel: szukaj, wyciąg, czat, badania, wzbogacenie, narzędzia datasetowe.', + 'settings.search.engineBraveLabel': 'Brave Search', + 'settings.search.engineBraveDesc': + 'Bezpośrednie API Brave Search: web, wiadomości, obrazy i wideo.', + 'settings.search.engineQueritLabel': 'Querit', + 'settings.search.engineQueritDesc': + 'Bezpośrednie API Querit: wyszukiwanie w sieci z filtrami strony, zakresu czasu, kraju i języka.', + 'settings.search.statusConfigured': 'Skonfigurowano', + 'settings.search.statusNeedsKey': 'Wymaga klucza API', + 'settings.search.fallbackToManaged': + 'Brak klucza — do czasu jego zapisania wyszukiwarka przejdzie w tryb zarządzany.', + 'settings.search.getApiKey': 'Pobierz klucz API', + 'settings.search.save': 'Zapisz', + 'settings.search.clear': 'Wyczyść', + 'settings.search.show': 'Pokaż', + 'settings.search.hide': 'Ukryj', + 'settings.search.statusSaving': 'Zapisywanie…', + 'settings.search.statusSaved': 'Zapisano.', + 'settings.search.statusError': 'Niepowodzenie', + 'settings.search.parallelKeyLabel': 'Klucz API Parallel', + 'settings.search.braveKeyLabel': 'Klucz API Brave Search', + 'settings.search.queritKeyLabel': 'Klucz API Querit', + 'settings.search.placeholderStored': '•••••••• (zapisane)', + 'settings.search.placeholderParallel': 'pk_...', + 'settings.search.placeholderBrave': 'BSA...', + 'settings.search.placeholderQuerit': 'Klucz API Querit', + 'settings.search.allowedSitesLabel': 'Dozwolone witryny', + 'settings.search.allowedSitesHint': + 'Hosty, które asystent może otwierać i odczytywać — poprzez pobieranie stron i narzędzie przeglądarki — jeden na linię, np. reuters.com. Host obejmuje również swoje subdomeny. Samo wyszukiwanie w internecie nie jest ograniczone przez tę listę.', + 'settings.search.allowedSitesAllOn': + 'Asystent może otworzyć dowolną publiczną witrynę. Adresy lokalne i prywatne pozostają zablokowane.', + 'settings.search.allowedSitesPlaceholder': 'reuters.com\napnews.com\ngithub.com', + 'settings.search.allowedSitesSave': 'Zapisz witryny', + 'settings.search.accessModeAria': 'Tryb dostępu do sieci', + 'settings.search.accessAllowAll': 'Zezwalaj na wszystko', + 'settings.search.accessCustom': 'Niestandardowe', + 'settings.search.accessBlockAll': 'Blokuj wszystko', + 'settings.search.accessBlockAllHint': + 'Cały dostęp do sieci jest zablokowany — asystent nie może otwierać ani czytać żadnej witryny.', + 'settings.embeddings.title': 'Embeddings', + 'settings.embeddings.description': + 'Wybierz, który dostawca embeddings konwertuje pamięć na wektory do wyszukiwania semantycznego. Zmiana dostawcy, modelu lub wymiarów unieważnia zapisane wektory i wymaga pełnego resetu pamięci.', + 'settings.embeddings.providerAria': 'Dostawca embeddings', + 'settings.embeddings.statusConfigured': 'Skonfigurowano', + 'settings.embeddings.statusNeedsKey': 'Wymaga klucza API', + 'settings.embeddings.apiKeyLabel': 'Klucz API {provider}', + 'settings.embeddings.placeholderStored': '•••••••• (zapisane)', + 'settings.embeddings.placeholderKey': 'Wklej swój klucz API…', + 'settings.embeddings.keyStoredEncrypted': 'Twój klucz API jest zaszyfrowany na tym urządzeniu.', + 'settings.embeddings.show': 'Pokaż', + 'settings.embeddings.hide': 'Ukryj', + 'settings.embeddings.save': 'Zapisz', + 'settings.embeddings.clear': 'Wyczyść', + 'settings.embeddings.model': 'Model', + 'settings.embeddings.dimensions': 'Wymiary', + 'settings.embeddings.customEndpoint': 'Niestandardowy endpoint', + 'settings.embeddings.customModelPlaceholder': 'Nazwa modelu', + 'settings.embeddings.customDimsPlaceholder': 'Wymiary', + 'settings.embeddings.applyCustom': 'Zastosuj', + 'settings.embeddings.testConnection': 'Przetestuj połączenie', + 'settings.embeddings.testing': 'Testowanie…', + 'settings.embeddings.testSuccess': 'Połączono — wymiarów: {dims}', + 'settings.embeddings.testFailed': 'Niepowodzenie: {error}', + 'settings.embeddings.saving': 'Zapisywanie…', + 'settings.embeddings.saved': 'Zapisano.', + 'settings.embeddings.errorPrefix': 'Niepowodzenie', + 'settings.embeddings.wipeTitle': 'Zresetować wektory pamięci?', + 'settings.embeddings.wipeBody': + 'Zmiana dostawcy, modelu lub wymiarów embeddings usunie wszystkie zapisane wektory pamięci. Pamięć trzeba odbudować, zanim wyszukiwanie znów zadziała. Tej operacji nie można cofnąć.', + 'settings.embeddings.cancel': 'Anuluj', + 'settings.embeddings.confirmWipe': 'Wyczyść i zastosuj', + 'settings.embeddings.setupTitle': 'Skonfiguruj {provider}', + 'settings.embeddings.saveAndSwitch': 'Zapisz i przełącz', + 'settings.embeddings.optional': 'opcjonalne', + 'settings.embeddings.vectorSearchDisabled': + 'Wyszukiwanie wektorowe jest wyłączone. Pamięć będzie używać tylko dopasowania słów kluczowych i świeżości — bez rankingu semantycznego.', + 'settings.embeddings.clearKey': 'Wyczyść klucz API', + 'pages.settings.ai.embeddings': 'Embeddingi', + 'pages.settings.ai.embeddingsDesc': 'Model kodowania wektorowego do wyszukiwania w pamięci', + 'mcp.alphaBadge': 'Alfa', + 'mcp.alphaBannerText': + 'Obsługa serwerów MCP jest we wczesnej fazie alpha. Rejestr Smithery, instalacja i podpinanie narzędzi mogą się zmieniać między wydaniami.', + 'mcp.toolList.noTools': 'Brak dostępnych narzędzi.', + 'mcp.setup.secretDialog.title': 'Konfiguracja MCP — wpisz sekret', + 'mcp.setup.secretDialog.bodyPrefix': 'Asystent konfiguracji MCP potrzebuje', + 'mcp.setup.secretDialog.bodySuffix': + '. Wartość jest wysyłana bezpośrednio do procesu rdzenia i nigdy nie trafia do rozmowy AI.', + 'mcp.setup.secretDialog.inputLabel': 'Wartość', + 'mcp.setup.secretDialog.inputPlaceholder': 'Wklej tutaj', + 'mcp.setup.secretDialog.show': 'Pokaż', + 'mcp.setup.secretDialog.hide': 'Ukryj', + 'mcp.setup.secretDialog.submit': 'Wyślij', + 'mcp.setup.secretDialog.cancel': 'Anuluj', + 'mcp.setup.secretDialog.submitting': 'Wysyłanie…', + 'mcp.setup.secretDialog.errorPrefix': 'Nie udało się wysłać:', + 'mcp.setup.secretDialog.privacyNote': + 'Przechowywane zaszyfrowane w lokalnej tabeli sekretów MCP. Nigdy nie są logowane ani wysyłane do modelu.', + 'devices.betaBadge': 'Beta', + 'devices.betaText': + 'Ta funkcja jest obecnie w fazie beta. Sparuj iPhone z tą instalacją OpenHuman, aby używać go jako zdalnego klienta.', 'devices.comingSoonDescription': 'Parowanie urządzeń pojawi się wkrótce. Ta strona będzie służyć do parowania iPhone’ów i zarządzania połączonymi urządzeniami.', + 'devices.title': 'Urządzenia', + 'devices.pairIphone': 'Sparuj iPhone', + 'devices.noPaired': 'Brak sparowanych urządzeń', + 'devices.emptyState': 'Zeskanuj kod QR w aplikacji iPhone, aby połączyć go z tą sesją OpenHuman.', + 'devices.devicePairedTitle': 'Urządzenie sparowane', + 'devices.devicePairedMessage': 'iPhone został pomyślnie podłączony.', + 'devices.deviceRevokedTitle': 'Urządzenie unieważnione', + 'devices.deviceRevokedMessage': 'Usunięto {label}.', + 'devices.revokeFailedTitle': 'Nie udało się unieważnić', + 'devices.online': 'Online', + 'devices.offline': 'Offline', + 'devices.lastSeenNever': 'Nigdy', + 'devices.lastSeenNow': 'Przed chwilą', + 'devices.lastSeenMinutes': '{count} min temu', + 'devices.lastSeenHours': '{count} godz. temu', + 'devices.lastSeenDays': '{count} dni temu', + 'devices.revoke': 'Unieważnij', + 'devices.revokeAria': 'Unieważnij {label}', + 'devices.confirmRevokeTitle': 'Unieważnić urządzenie?', + 'devices.confirmRevokeBody': + '{label} nie będzie już mogło się łączyć. Tej operacji nie można cofnąć.', + 'devices.loadFailed': 'Nie udało się załadować urządzeń: {message}', + 'devices.pairModal.title': 'Sparuj iPhone', + 'devices.pairModal.loading': 'Generowanie kodu parowania…', + 'devices.pairModal.instructions': 'Otwórz aplikację OpenHuman na iPhone i zeskanuj ten kod.', + 'devices.pairModal.expiresIn': 'Kod wygasa za ~{count} minutę', + 'devices.pairModal.expiresInPlural': 'Kod wygasa za ~{count} minut', + 'devices.pairModal.showDetails': 'Pokaż szczegóły', + 'devices.pairModal.hideDetails': 'Ukryj szczegóły', + 'devices.pairModal.channelId': 'ID kanału', + 'devices.pairModal.pairingUrl': 'URL parowania', + 'devices.pairModal.expiredTitle': 'Kod QR wygasł', + 'devices.pairModal.expiredBody': 'Wygeneruj nowy kod, aby kontynuować parowanie.', + 'devices.pairModal.generateNewCode': 'Wygeneruj nowy kod', + 'devices.pairModal.successTitle': 'Sparowano z iPhone', + 'devices.pairModal.autoClose': 'Automatyczne zamykanie…', + 'devices.pairModal.errorPrefix': 'Nie udało się utworzyć parowania: {message}', + 'devices.pairModal.errorTitle': 'Coś poszło nie tak', + 'devices.pairModal.copyUrl': 'Skopiuj', + 'mcp.catalog.searchAria': 'Szukaj w katalogu Smithery', + 'mcp.catalog.searchPlaceholder': 'Szukaj w katalogu Smithery...', + 'mcp.catalog.loadFailed': 'Nie udało się załadować katalogu', + 'mcp.catalog.noResults': 'Nie znaleziono serwerów.', + 'mcp.catalog.noResultsFor': 'Nie znaleziono serwerów dla „{query}”.', + 'mcp.catalog.loadMore': 'Załaduj więcej', + 'mcp.configAssistant.title': 'Asystent konfiguracji', + 'mcp.configAssistant.empty': 'Zapytaj o konfigurację, wymagane zmienne lub kroki instalacji.', + 'mcp.configAssistant.suggestedValues': 'Sugerowane wartości:', + 'mcp.configAssistant.valueHidden': '(wartość ukryta)', + 'mcp.configAssistant.applySuggested': 'Zastosuj sugerowane wartości', + 'mcp.configAssistant.reinstallHint': 'Aby je zastosować, zainstaluj ponownie z tymi wartościami.', + 'mcp.configAssistant.thinking': 'Myślę...', + 'mcp.configAssistant.inputPlaceholder': + 'Zadaj pytanie (Enter aby wysłać, Shift+Enter nowa linia)', + 'mcp.configAssistant.send': 'Wyślij', + 'mcp.configAssistant.failedResponse': 'Nie udało się uzyskać odpowiedzi', + 'mcp.toolList.availableSingular': 'Dostępne {count} narzędzie', + 'mcp.toolList.availablePlural': 'Dostępnych narzędzi: {count}', + 'mcp.toolList.tryTool': 'Wypróbuj', + 'mcp.toolList.tryToolAria': 'Otwórz playground wykonania dla {name}', + 'mcp.playground.title': 'Uruchom {name}', + 'mcp.playground.close': 'Zamknij playground', + 'mcp.playground.inputSchema': 'Schemat wejścia', + 'mcp.playground.argsLabel': 'Argumenty (JSON)', + 'mcp.playground.argsHelp': + 'Wpisz JSON zgodny ze schematem wejścia. Puste wejście jest traktowane jako {}.', + 'mcp.playground.runShortcut': '⌘/Ctrl + Enter, aby uruchomić', + 'mcp.playground.format': 'Formatuj', + 'mcp.playground.invalidJson': 'Nieprawidłowy JSON', + 'mcp.playground.run': 'Uruchom narzędzie', + 'mcp.playground.running': 'Uruchamianie…', + 'mcp.playground.result': 'Wynik', + 'mcp.playground.resultError': 'Narzędzie zwróciło błąd', + 'mcp.playground.copyResult': 'Skopiuj wynik', + 'mcp.playground.copied': 'Skopiowano', + 'mcp.playground.history': 'Historia', + 'mcp.playground.historyEmpty': 'Brak wywołań w tej sesji.', + 'mcp.playground.historyLoad': 'Załaduj', + 'mcp.playground.unexpectedError': 'Nieoczekiwany błąd podczas wywoływania narzędzia.', + 'mcp.catalog.deployed': 'Wdrożono', + 'mcp.catalog.installCount': 'Instalacji: {count}', + 'app.update.dismissNotification': 'Odrzuć powiadomienie o aktualizacji', + 'bootCheck.rpcAuthSuffix': 'przy każdym RPC.', + 'app.localAiDownload.expandAria': 'Rozwiń postęp pobierania', + 'app.localAiDownload.collapseAria': 'Zwiń postęp pobierania', + 'app.localAiDownload.dismissAria': 'Odrzuć powiadomienie o pobieraniu', + 'mobile.nav.ariaLabel': 'Nawigacja mobilna', + 'progress.stepsAria': 'Kroki postępu', + 'progress.stepAria': 'Krok {current} z {total}', + 'workspace.vaultsTitle': 'Sejfy wiedzy', + 'workspace.vaultsDesc': + 'Wskaż lokalny folder; pliki są dzielone na fragmenty i zwierciadłowo odzwierciedlane w pamięci.', + 'calls.title': 'Rozmowy', + 'calls.comingSoonBody': 'Rozmowy wspomagane przez AI są już wkrótce. Pozostań w kontakcie.', + 'art.rotatingTetrahedronAria': 'Obracający się odwrócony statek tetraedryczny', + 'mcp.installed.title': 'Zainstalowane', + 'mcp.installed.browseCatalog': 'Przeglądaj katalog', + 'mcp.installed.empty': 'Brak zainstalowanych serwerów MCP.', + 'mcp.installed.toolSingular': '{count} narzędzie', + 'mcp.installed.toolPlural': 'Narzędzia: {count}', + 'mcp.health.title': 'Kondycja', + 'mcp.health.summaryAria': 'Podsumowanie kondycji połączeń MCP', + 'mcp.health.connectedCount': 'Połączono: {count}', + 'mcp.health.connectingCount': 'Łączenie: {count}', + 'mcp.health.errorCount': 'Błędy: {count}', + 'mcp.health.disconnectedCount': 'Bezczynne: {count}', + 'mcp.health.retryAll': 'Ponów wszystko ({count})', + 'mcp.health.retryAllAria': 'Ponów wszystkie serwery MCP z błędem: {count}', + 'mcp.health.disconnectAll': 'Rozłącz wszystko ({count})', + 'mcp.health.disconnectAllAria': 'Rozłącz wszystkie połączone serwery MCP: {count}', + 'mcp.health.disconnectConfirm.title': 'Rozłączyć wszystkie serwery MCP?', + 'mcp.health.disconnectConfirm.body': + 'To rozłączy obecnie połączone serwery MCP ({count}). Zainstalowane konfiguracje i sekrety zostaną zachowane; każdy serwer możesz połączyć ponownie później.', + 'mcp.health.disconnectConfirm.cancel': 'Anuluj', + 'mcp.health.disconnectConfirm.confirm': 'Rozłącz wszystko', + 'mcp.health.opErrorGeneric': 'Operacja zbiorcza nie powiodła się. Zobacz logi.', + 'mcp.health.bulkPartialFailure': '{failed} z {total} serwerów nie powiodło się. Sprawdź logi.', + 'mcp.installed.search.landmarkAria': 'Szukaj w zainstalowanych serwerach MCP', + 'mcp.installed.search.inputAria': 'Filtruj zainstalowane serwery MCP według nazwy', + 'mcp.installed.search.placeholder': 'Filtruj serwery…', + 'mcp.installed.search.clearAria': 'Wyczyść filtr', + 'mcp.installed.search.countMatches': '{shown} z {total} serwerów', + 'mcp.installed.search.noMatches': 'Brak serwerów pasujących do „{query}”.', + 'mcp.inventory.openButton': 'Inwentarz', + 'mcp.inventory.openAria': 'Otwórz panel udostępnianego inwentarza MCP', + 'mcp.inventory.title': 'Udostępniany inwentarz MCP', + 'mcp.inventory.subtitle': + 'Wyeksportuj zainstalowane serwery MCP jako przenośny manifest bez sekretów albo zaimportuj manifest od członka zespołu. Wartości sekretów env nigdy nie są dołączane ani importowane.', + 'mcp.inventory.close': 'Zamknij panel inwentarza', + 'mcp.inventory.tablistAria': 'Sekcje inwentarza', + 'mcp.inventory.tab.export': 'Eksport', + 'mcp.inventory.tab.import': 'Importuj', + 'mcp.inventory.export.empty': + 'Nie zainstalowano jeszcze serwerów MCP — nie ma czego eksportować. Najpierw zainstaluj jeden z katalogu.', + 'mcp.inventory.export.privacyTitle': 'Co zawiera ten manifest', + 'mcp.inventory.export.privacyBody': + 'Tylko nazwy serwerów, nazwy kwalifikowane, NAZWY KLUCZY zmiennych env i konfiguracja bez sekretów. Wartości sekretów, identyfikatory Twojego urządzenia i znaczniki czasu instalacji są celowo usuwane.', + 'mcp.inventory.export.serverCount': 'Serwery w tym manifeście: {count}', + 'mcp.inventory.export.copy': 'Kopiuj', + 'mcp.inventory.export.copied': 'Skopiowano', + 'mcp.inventory.export.copyAria': 'Skopiuj JSON manifestu do schowka', + 'mcp.inventory.export.download': 'Pobierz', + 'mcp.inventory.export.downloadAria': 'Pobierz manifest jako plik JSON', + 'mcp.inventory.import.trustTitle': 'Traktuj importowane manifesty jak niezaufany kod', + 'mcp.inventory.import.trustBody': + 'Serwer MCP to narzędzie, do którego dajesz agentowi dostęp. Importuj manifesty tylko ze źródeł, którym ufasz. Każda instalacja wymaga jawnego kliknięcia; nic nie instaluje się automatycznie.', + 'mcp.inventory.import.pasteLabel': 'Wklej JSON manifestu', + 'mcp.inventory.import.pastePlaceholder': 'Wklej manifest tutaj albo prześlij poniżej plik .json.', + 'mcp.inventory.import.preview': 'Podgląd', + 'mcp.inventory.import.clear': 'Wyczyść', + 'mcp.inventory.import.uploadFile': 'lub prześlij plik .json', + 'mcp.inventory.import.uploadFileAria': 'Prześlij plik manifestu .json', + 'mcp.inventory.import.fileTooLarge': 'Plik jest za duży (ponad 1 MB). Odmowa wczytania.', + 'mcp.inventory.import.fileReadFailed': 'Nie udało się odczytać pliku.', + 'mcp.inventory.import.parseErrorPrefix': 'Nie udało się sparsować manifestu:', + 'mcp.inventory.import.previewHeading': 'Podgląd', + 'mcp.inventory.import.previewCounts': + '{total} serwerów — nowe: {newly}, już zainstalowane: {already}', + 'mcp.inventory.import.previewEmpty': 'Manifest nie zawiera serwerów.', + 'mcp.inventory.import.exportedFrom': 'Wyeksportowano z {exporter}', + 'mcp.inventory.import.exportedAt': 'o {when}', + 'mcp.inventory.import.statusNew': 'Nowy', + 'mcp.inventory.import.statusAlreadyInstalled': 'Już zainstalowany', + 'mcp.inventory.import.envKeysLabel': 'Klucze env', + 'mcp.inventory.import.install': 'Zainstaluj', + 'mcp.inventory.import.installAria': 'Zainstaluj {name} z tego manifestu', + 'mcp.inventory.import.skipped': 'pominięto', + 'mcp.inventory.parseError.empty': 'Manifest jest pusty.', + 'mcp.inventory.parseError.invalidJson': 'Nieprawidłowy JSON.', + 'mcp.inventory.parseError.rootNotObject': 'Manifest musi być obiektem JSON w korzeniu.', + 'mcp.inventory.parseError.unsupportedSchema': + 'Nieobsługiwany schemat manifestu — ten plik nie został utworzony przez zgodny eksporter.', + 'mcp.inventory.parseError.missingExportedAt': + 'Brak pola `exported_at` albo ma ono nieprawidłową wartość.', + 'mcp.inventory.parseError.missingExportedBy': + 'Brak pola `exported_by` albo ma ono nieprawidłową wartość.', + 'mcp.inventory.parseError.invalidServers': + 'Brak tablicy `servers` albo ma ona nieprawidłową wartość.', + 'mcp.inventory.parseError.serverNotObject': 'Wpis serwera nie jest obiektem.', + 'mcp.inventory.parseError.serverMissingQualifiedName': + 'We wpisie serwera brakuje qualified_name.', + 'mcp.inventory.parseError.serverMissingDisplayName': 'We wpisie serwera brakuje display_name.', + 'mcp.inventory.parseError.serverEnvKeysNotArray': + 'Wpis serwera ma pole env_keys, które nie jest tablicą stringów.', + 'mcp.inventory.parseError.serverContainsEnv': + 'Wpis serwera zawiera mapę wartości `env`. Odmowa importu — manifesty mogą przenosić tylko env_keys (nazwy), nigdy wartości sekretów.', + 'mcp.inventory.parseError.duplicateQualifiedName': + 'W manifeście znaleziono zduplikowaną wartość qualified_name. Każdy serwer może wystąpić najwyżej raz.', + 'mcp.tab.loading': 'Ładowanie serwerów MCP...', + 'mcp.tab.emptyDetail': 'Wybierz serwer lub przeglądaj katalog.', + 'mcp.install.loadingDetail': 'Ładowanie szczegółów serwera...', + 'mcp.install.back': 'Wstecz', + 'mcp.install.title': 'Zainstaluj {name}', + 'mcp.install.requiredEnv': 'Wymagane zmienne środowiskowe', + 'mcp.install.enterValue': 'Wpisz wartość dla {key}', + 'mcp.install.show': 'Pokaż', + 'mcp.install.hide': 'Ukryj', + 'mcp.install.configLabel': 'Konfiguracja (opcjonalny JSON)', + 'mcp.install.configPlaceholder': '{"key": "value"}', + 'mcp.install.missingRequired': 'Pole „{key}” jest wymagane', + 'mcp.install.invalidJson': 'Konfiguracja nie jest poprawnym JSON-em', + 'mcp.install.failedDetail': 'Nie udało się załadować szczegółów serwera', + 'mcp.install.failedInstall': 'Instalacja nieudana', + 'mcp.install.button': 'Zainstaluj', + 'mcp.install.installing': 'Instalowanie...', + 'mcp.detail.suggestedEnvReady': 'Gotowe sugerowane wartości środowiska', + 'mcp.detail.suggestedEnvBody': + 'Zainstaluj ten serwer ponownie z sugerowanymi wartościami, aby je zastosować: {keys}', + 'mcp.detail.connect': 'Połącz', + 'mcp.detail.connecting': 'Łączenie...', + 'mcp.detail.disconnect': 'Rozłącz', + 'mcp.detail.hideAssistant': 'Ukryj asystenta', + 'mcp.detail.helpConfigure': 'Pomóż skonfigurować', + 'mcp.detail.confirmUninstall': 'Potwierdzić odinstalowanie?', + 'mcp.detail.confirmUninstallAction': 'Tak, odinstaluj', + 'mcp.detail.uninstall': 'Odinstaluj', + 'mcp.detail.envVars': 'Zmienne środowiskowe', + 'mcp.detail.tools': 'Narzędzia', + 'onboarding.skipForNow': 'Pomiń na razie', + 'onboarding.localAI.continueWithCloud': 'Kontynuuj z chmurą', + 'onboarding.localAI.useLocalAnyway': + 'Użyj lokalnego AI mimo to (niezalecane dla Twojego urządzenia)', + 'onboarding.localAI.useLocalInstead': 'Użyj lokalnego AI (połącz Ollama teraz)', + 'onboarding.localAI.setupIssue': 'Konfiguracja lokalnego AI napotkała problem', + 'autonomy.title': 'Autonomia agenta', + 'autonomy.maxActionsLabel': 'Maks. akcji na godzinę', + 'autonomy.maxActionsHelp': + 'Maksymalna liczba akcji narzędzi, którą agent może uruchomić w ciągu kolejnej godziny. Nowa wartość obowiązuje od następnego czatu. Zadania cron i nasłuchy kanałów zachowują dotychczasowy limit do restartu OpenHuman.', + 'autonomy.statusSaving': 'Zapisywanie…', + 'autonomy.statusSaved': 'Zapisano.', + 'autonomy.statusFailed': 'Niepowodzenie', + 'autonomy.unlimitedNote': 'Bez limitu — ograniczenia tempa wyłączone.', + 'autonomy.invalidIntegerMsg': + 'Musi być dodatnią liczbą całkowitą (użyj presetu Bez limitu, aby usunąć limit).', + 'autonomy.presetUnlimited': 'Bez limitu (domyślnie)', + 'triggers.toggleFailed': 'Nie udało się: {action} dla {trigger}: {message}', + 'settings.ai.overview': 'Przegląd systemu AI', + 'settings.ai.configStatus': 'Stan konfiguracji', + 'settings.ai.fallbackMode': 'Tryb awaryjny', + 'settings.ai.loadedFromRuntime': 'Wczytane ze środowiska', + 'settings.ai.loadingDuration': 'Czas wczytywania', + 'settings.ai.localRuntime': 'Lokalne środowisko modelu', + 'settings.ai.openManager': 'Otwórz menedżera', + 'settings.ai.retryDownload': 'Ponów pobieranie', + 'settings.ai.state': 'Stan', + 'settings.ai.targetModel': 'Model docelowy', + 'settings.ai.download': 'Pobierz', + 'settings.ai.localModelUnavailable': 'Stan modelu lokalnego niedostępny.', + 'settings.ai.soulConfig': 'Konfiguracja persony SOUL', + 'settings.ai.refreshing': 'Odświeżanie...', + 'settings.ai.refreshSoul': 'Odśwież SOUL', + 'settings.ai.loadingSoul': 'Wczytywanie konfiguracji SOUL...', + 'settings.ai.identity': 'Tożsamość', + 'settings.ai.personality': 'Osobowość', + 'settings.ai.safetyRules': 'Zasady bezpieczeństwa', + 'settings.ai.source': 'Źródło', + 'settings.ai.loaded': 'Wczytano', + 'settings.ai.toolsConfig': 'Konfiguracja TOOLS', + 'settings.ai.refreshTools': 'Odśwież TOOLS', + 'settings.ai.toolsAvailable': 'Dostępne narzędzia', + 'settings.ai.tools': 'narzędzia', + 'settings.ai.activeSkills': 'Aktywne umiejętności', + 'settings.ai.skills': 'umiejętności', + 'settings.ai.skillsOverview': 'Przegląd umiejętności', + 'settings.ai.refreshingAll': 'Odświeżanie wszystkiego...', + 'settings.ai.refreshAll': 'Odśwież całą konfigurację AI', + 'settings.notifications.suppressAll': 'Wycisz wszystkie powiadomienia', + 'settings.notifications.suppressAllDesc': + 'Blokuj wszystkie systemowe powiadomienia z osadzonych aplikacji niezależnie od fokusa.', + 'settings.notifications.toggleDnd': 'Przełącz tryb Nie przeszkadzać', + 'settings.notifications.categories': 'Kategorie', + 'settings.notifications.categoryFooter': + 'Wyłączenie kategorii zatrzymuje nowe powiadomienia tego typu w centrum powiadomień. Istniejące pozostają do czasu wyczyszczenia.', + 'settings.billing.movedToWeb': 'Rozliczenia przeniesione do sieci', + 'settings.billing.openDashboard': 'Otwórz panel rozliczeń', + 'settings.billing.movedToWebDesc': + 'Zmiany subskrypcji, metody płatności, kredyty i faktury są teraz zarządzane w TinyHumans w sieci.', + 'settings.billing.backToSettings': 'Powrót do ustawień', + 'settings.billing.openingBrowser': 'Otwieranie przeglądarki...', + 'settings.billing.browserNotOpen': + 'Jeśli przeglądarka się nie otworzyła, użyj przycisku powyżej.', + 'settings.billing.browserOpenFailed': + 'Nie udało się otworzyć przeglądarki automatycznie. Użyj przycisku powyżej.', + 'settings.tools.chooseCapabilities': + 'Wybierz, z jakich możliwości OpenHuman może korzystać w Twoim imieniu.', + 'settings.tools.saveChanges': 'Zapisz zmiany', + 'settings.tools.preferencesSaved': 'Preferencje zapisane', + 'settings.tools.saveFailed': 'Nie udało się zapisać preferencji. Spróbuj ponownie.', + 'settings.screenAwareness.mode': 'Tryb', + 'settings.screenAwareness.allExceptBlacklist': 'Wszystko oprócz czarnej listy', + 'settings.screenAwareness.whitelistOnly': 'Tylko biała lista', + 'settings.screenAwareness.screenMonitoring': 'Monitorowanie ekranu', + 'settings.screenAwareness.saveSettings': 'Zapisz ustawienia', + 'settings.screenAwareness.session': 'Sesja', + 'settings.screenAwareness.status': 'Stan', + 'settings.screenAwareness.active': 'Aktywna', + 'settings.screenAwareness.stopped': 'Zatrzymana', + 'settings.screenAwareness.remaining': 'Pozostało', + 'settings.screenAwareness.startSession': 'Rozpocznij sesję', + 'settings.screenAwareness.stopSession': 'Zatrzymaj sesję', + 'settings.screenAwareness.analyzeNow': 'Analizuj teraz', + 'settings.screenAwareness.macosOnly': + 'Przechwytywanie ekranu i zarządzanie uprawnieniami są obecnie obsługiwane tylko na macOS.', + 'connections.comingSoon': 'Wkrótce', + 'connections.setUp': 'Skonfiguruj', + 'connections.configured': 'Skonfigurowano', + 'connections.unavailable': 'Niedostępne', + 'connections.checking': 'Sprawdzanie…', + 'connections.walletConfigured': + 'Lokalne tożsamości EVM, BTC, Solana i Tron są skonfigurowane z Twojej frazy odzyskiwania.', + 'connections.walletReady': + 'Skonfiguruj lokalne tożsamości EVM, BTC, Solana i Tron z jednej frazy odzyskiwania.', + 'connections.walletError': + 'Nie można sprawdzić stanu portfela. Dotknij, aby ponowić z panelu Frazy odzyskiwania.', + 'connections.walletChecking': 'Sprawdzanie stanu portfela...', + 'connections.walletIdentities': 'Tożsamości portfela', + 'connections.walletDerived': + 'Wyprowadzone lokalnie z Twojej frazy odzyskiwania i przechowywane tylko jako bezpieczne metadane.', + 'connections.privacySecurity': 'Prywatność i bezpieczeństwo', + 'connections.privacySecurityDesc': + 'Wszystkie dane i poświadczenia są przechowywane lokalnie z polityką zerowego retencji. Twoje informacje są szyfrowane i nigdy nie są udostępniane stronom trzecim.', + 'channels.status.connecting': 'Łączenie', + 'channels.status.notConfigured': 'Nieskonfigurowany', + 'channels.noActiveRoute': 'Brak aktywnej trasy', + 'channels.activeRoute': 'Aktywna trasa', + 'channels.loadingDefinitions': 'Wczytywanie definicji kanałów...', + 'channels.channelConnections': 'Połączenia kanałów', + 'channels.configureAuthModes': 'Skonfiguruj tryby uwierzytelniania dla każdego kanału.', + 'channels.configNotAvailable': 'Konfiguracja dla', + 'channels.channel': 'kanał', + 'devOptions.coreModeNotSet': 'Tryb rdzenia: nie ustawiony', + 'devOptions.coreModeNotSetDesc': + 'Wybór trybu uruchamiania nie został jeszcze potwierdzony. Użyj „Przełącz tryb”, aby wybrać Lokalny lub Chmurowy.', + 'devOptions.local': 'Lokalny', + 'devOptions.embeddedCoreSidecar': 'Wbudowany sidecar rdzenia', + 'devOptions.sidecarSpawned': 'Uruchamiany w procesie powłoki Tauri przy starcie aplikacji.', + 'devOptions.cloud': 'Chmura', + 'devOptions.remoteCoreRpc': 'Zdalne RPC rdzenia', + 'devOptions.token': 'Token dostępu', + 'devOptions.tokenNotSet': 'nie ustawiony — RPC zwróci 401', + 'devOptions.triggerSentryTest': 'Wyzwól test Sentry (staging)', + 'devOptions.triggerSentryTestDesc': + 'Wysyła oznaczony błąd, aby zweryfikować potok Sentry. Issue #1072 — usuń po weryfikacji.', + 'devOptions.sendTestEvent': 'Wyślij zdarzenie testowe', + 'devOptions.sending': 'Wysyłanie…', + 'devOptions.eventSent': 'Zdarzenie wysłane', + 'devOptions.sentryDisabled': '(brak ID — Sentry wyłączone w tej kompilacji)', + 'devOptions.failed': 'Niepowodzenie', + 'devOptions.appLogs': 'Dzienniki aplikacji', + 'devOptions.appLogsDesc': + 'Otwórz folder z rotacyjnymi dziennikami dziennymi. Dołącz najnowszy plik podczas zgłaszania błędu.', + 'devOptions.openLogsFolder': 'Otwórz folder dzienników', + 'mnemonic.phraseSaved': 'Fraza odzyskiwania zapisana', + 'mnemonic.walletReady': 'Wielołańcuchowe tożsamości portfela są gotowe. Powrót do ustawień...', + 'mnemonic.writeDownWords': 'Zapisz te', + 'mnemonic.wordsInOrder': + 'słów w kolejności i przechowuj je w bezpiecznym miejscu. Ta fraza zabezpiecza Twój lokalny klucz szyfrowania oraz tożsamości portfeli EVM, BTC, Solana i Tron.', + 'mnemonic.cannotRecover': + 'Tej frazy nie da się odzyskać, jeśli ją utracisz, i powinna pozostać wyłącznie lokalna na Twoim urządzeniu.', + 'mnemonic.copyToClipboard': 'Skopiuj do schowka', + 'mnemonic.alreadyHavePhrase': 'Mam już frazę odzyskiwania', + 'mnemonic.consentSaved': + 'Zapisałem(am) tę frazę i wyrażam zgodę na jej użycie do konfiguracji lokalnego portfela', + 'mnemonic.enterPhraseToRestore': + 'Wprowadź swoją frazę odzyskiwania poniżej, aby przywrócić lokalne tożsamości portfela, lub wklej pełną frazę w dowolne pole (12 słów dla nowych kopii zapasowych; 24-słowne frazy ze starszych wersji nadal działają).', + 'mnemonic.words': 'Słowa', + 'mnemonic.validPhrase': 'Prawidłowa fraza odzyskiwania', + 'mnemonic.generateNewPhrase': 'Wygeneruj zamiast tego nową frazę odzyskiwania', + 'mnemonic.securingData': 'Zabezpieczanie Twoich danych...', + 'mnemonic.saveRecoveryPhrase': 'Zapisz frazę odzyskiwania', + 'mnemonic.userNotLoaded': 'Użytkownik nie wczytany. Zaloguj się ponownie lub odśwież stronę.', + 'mnemonic.invalidPhrase': 'Nieprawidłowa fraza odzyskiwania. Sprawdź słowa i spróbuj ponownie.', + 'mnemonic.somethingWentWrong': 'Coś poszło nie tak. Spróbuj ponownie.', + 'team.failedToCreate': 'Nie udało się utworzyć zespołu', + 'team.invalidInviteCode': 'Nieprawidłowy lub wygasły kod zaproszenia', + 'team.failedToSwitch': 'Nie udało się przełączyć zespołu', + 'team.failedToLeave': 'Nie udało się opuścić zespołu', + 'team.role.owner': 'Właściciel', + 'team.role.admin': 'Administrator', + 'team.role.billingManager': 'Menedżer rozliczeń', + 'team.role.member': 'Członek', + 'team.active': 'Aktywny', + 'team.personalTeam': 'Zespół osobisty', + 'team.manageTeam': 'Zarządzaj zespołem', + 'team.switching': 'Przełączanie...', + 'team.switch': 'Przełącz', + 'team.leaving': 'Opuszczanie...', + 'team.leave': 'Opuść', + 'team.yourTeams': 'Twoje zespoły', + 'team.createNewTeam': 'Utwórz nowy zespół', + 'team.teamName': 'Nazwa zespołu', + 'team.creating': 'Tworzenie...', + 'team.joinExistingTeam': 'Dołącz do istniejącego zespołu', + 'team.inviteCode': 'Kod zaproszenia', + 'team.joining': 'Dołączanie...', + 'team.join': 'Dołącz', + 'team.leaveTeam': 'Opuść zespół', + 'team.confirmLeave': 'Czy na pewno chcesz opuścić', + 'team.leaveWarning': + 'Stracisz dostęp do zespołu i wszystkich jego zasobów. Aby wrócić, będziesz potrzebować nowego zaproszenia.', + 'team.management': 'Zarządzanie zespołem', + 'team.notFound': 'Nie znaleziono zespołu', + 'team.accessDenied': 'Brak dostępu', + 'team.members': 'Członkowie', + 'team.membersDesc': 'Zarządzaj członkami zespołu i ich rolami', + 'team.invites': 'Zaproszenia', + 'team.invitesDesc': 'Generuj kody zaproszeń i zarządzaj nimi', + 'team.settings': 'Ustawienia zespołu', + 'team.settingsDesc': 'Edytuj nazwę i ustawienia zespołu', + 'team.editSettings': 'Edytuj ustawienia zespołu', + 'team.enterName': 'Wpisz nazwę zespołu', + 'team.saving': 'Zapisywanie...', + 'team.saveChanges': 'Zapisz zmiany', + 'team.delete': 'Usuń zespół', + 'team.deleteDesc': 'Trwale usuń ten zespół', + 'team.deleting': 'Usuwanie...', + 'team.failedToUpdate': 'Nie udało się zaktualizować zespołu', + 'team.failedToDelete': 'Nie udało się usunąć zespołu', + 'team.manageTitle': 'Zarządzaj zespołem {name}', + 'team.planCreated': 'Plan {plan} • Utworzono {date}', + 'team.confirmDelete': 'Czy na pewno usunąć {name}?', + 'team.deleteWarning': + 'Tej operacji nie można cofnąć. Wszystkie dane zespołu zostaną trwale usunięte.', + 'voice.title': 'Dyktowanie głosowe', + 'voice.settings': 'Ustawienia głosu', + 'voice.settingsDesc': 'Przytrzymaj skrót, aby dyktować i wstawiać tekst do aktywnego pola.', + 'voice.hotkey': 'Skrót klawiszowy', + 'voice.activationMode': 'Tryb aktywacji', + 'voice.tapToToggle': 'Dotknij, aby przełączyć', + 'voice.writingStyle': 'Styl pisania', + 'voice.verbatimTranscription': 'Transkrypcja dosłowna', + 'voice.naturalCleanup': 'Naturalne porządkowanie', + 'voice.autoStart': 'Uruchamiaj serwer głosowy automatycznie z rdzeniem', + 'voice.customDictionary': 'Słownik użytkownika', + 'voice.customDictionaryDesc': + 'Dodaj nazwy, terminy techniczne i słowa branżowe, aby poprawić dokładność rozpoznawania.', + 'voice.addWord': 'Dodaj słowo...', + 'voice.sttDisabled': + 'Dyktowanie głosowe jest wyłączone do czasu pobrania i przygotowania lokalnego modelu STT.', + 'voice.openLocalAiModel': 'Otwórz lokalny model AI', + 'voice.serverRestarted': 'Serwer głosowy uruchomiony ponownie z nowymi ustawieniami.', + 'voice.settingsSaved': 'Ustawienia głosu zapisane.', + 'voice.serverStarted': 'Serwer głosowy uruchomiony.', + 'voice.serverStopped': 'Serwer głosowy zatrzymany.', + 'voice.saveVoiceSettings': 'Zapisz ustawienia głosu', + 'voice.startVoiceServer': 'Uruchom serwer głosowy', + 'voice.stopVoiceServer': 'Zatrzymaj serwer głosowy', + 'voice.debugTitle': 'Debug głosu', + 'voice.failedToLoadSettings': 'Nie udało się załadować ustawień głosu', + 'voice.failedToSaveSettings': 'Nie udało się zapisać ustawień głosu', + 'voice.failedToStartServer': 'Nie udało się uruchomić serwera głosu', + 'voice.failedToStopServer': 'Nie udało się zatrzymać serwera głosu', + 'voice.sttDisabledPrefix': + 'Dyktowanie głosem jest wyłączone, dopóki nie zostanie pobrany lokalny model STT. Użyj sekcji', + 'voice.sttDisabledSuffix': 'powyżej, aby zainstalować Whisper.', + 'voice.debug.failedToLoadVoiceDebugData': 'Nie udało się załadować danych debugowania głosu', + 'voice.debug.settingsSaved': 'Ustawienia debugowania zapisane.', + 'voice.debug.failedToSaveSettings': 'Nie udało się zapisać ustawień głosu', + 'voice.debug.runtimeStatus': 'Status środowiska uruchomieniowego', + 'voice.debug.runtimeStatusDesc': 'Diagnostyka na żywo serwera głosowego i silnika mowy na tekst.', + 'voice.debug.server': 'Server', + 'voice.debug.unavailable': 'Unavailable', + 'voice.debug.ready': 'Ready', + 'voice.debug.notReady': 'Nie gotowy', + 'voice.debug.hotkey': 'Hotkey', + 'voice.debug.notAvailable': 'n/a', + 'voice.debug.mode': 'Mode', + 'voice.debug.transcriptions': 'Transcriptions', + 'voice.debug.serverError': 'Błąd serwera', + 'voice.debug.advancedSettings': 'Ustawienia zaawansowane', + 'voice.debug.advancedSettingsDesc': + 'Niskopoziomowe parametry dostrajania nagrywania i wykrywania ciszy.', + 'voice.debug.minimumRecordingSeconds': 'Minimalna długość nagrania (sekundy)', + 'voice.debug.silenceThreshold': 'Próg ciszy (RMS)', + 'voice.debug.silenceThresholdDesc': + 'Nagrania z energią poniżej tego progu są traktowane jako cisza i pomijane. Niżej = bardziej czułe.', + 'voice.providers.saved': 'Zapisano dostawców głosu.', + 'voice.providers.failedToSave': 'Nie udało się zapisać dostawców głosu', + 'voice.providers.ellipsis': '…', + 'voice.providers.installing': 'Instalowanie', + 'voice.providers.installingBusy': 'Instalowanie…', + 'voice.providers.reinstallLocally': 'Zainstaluj ponownie lokalnie', + 'voice.providers.repair': 'Napraw', + 'voice.providers.retryLocally': 'Spróbuj ponownie lokalnie', + 'voice.providers.installLocally': 'Zainstaluj lokalnie', + 'voice.providers.whisperReady': 'Whisper jest gotowy.', + 'voice.providers.whisperInstallStarted': 'Instalacja Whisper rozpoczęta', + 'voice.providers.queued': 'w kolejce', + 'voice.providers.failedToInstallWhisper': 'Nie udało się zainstalować Whisper', + 'voice.providers.piperReady': 'Piper jest gotowy.', + 'voice.providers.piperInstallStarted': 'Instalacja Piper rozpoczęta', + 'voice.providers.failedToInstallPiper': 'Nie udało się zainstalować Piper', + 'voice.providers.title': 'Dostawcy głosu', + 'voice.providers.desc': + 'Wybierz, gdzie ma działać transkrypcja i synteza. Użyj przycisków „Zainstaluj lokalnie”, aby pobrać binarki i modele do przestrzeni roboczej. Lokalnych dostawców można zapisać przed zakończeniem instalacji — bez ręcznego ustawiania WHISPER_BIN czy PIPER_BIN.', + 'voice.providers.sttProvider': 'Dostawca mowy na tekst', + 'voice.providers.sttProviderAria': 'Dostawca STT', + 'voice.providers.cloudWhisperProxy': 'Chmura (proxy Whisper)', + 'voice.providers.localWhisper': 'Whisper lokalnie', + 'voice.providers.installRequired': ' (wymagana instalacja)', + 'voice.providers.whisperInstalledTitle': + 'Whisper jest zainstalowany. Kliknij, aby zainstalować ponownie.', + 'voice.providers.whisperDownloadTitle': + 'Pobierz whisper.cpp i model GGML do przestrzeni roboczej.', + 'voice.providers.installed': 'Zainstalowano', + 'voice.providers.installFailed': 'Instalacja nieudana', + 'voice.providers.notInstalled': 'Nie zainstalowano', + 'voice.providers.whisperModel': 'Model Whisper', + 'voice.providers.whisperModelAria': 'Model Whisper', + 'voice.providers.whisperModelTiny': 'Tiny (39 MB, najszybszy)', + 'voice.providers.whisperModelBase': 'Podstawowy (74 MB)', + 'voice.providers.whisperModelSmall': 'Mały (244 MB)', + 'voice.providers.whisperModelMedium': 'Medium (769 MB, polecany)', + 'voice.providers.whisperModelLargeTurbo': 'Large v3 Turbo (1.5 GB, najlepsza dokładność)', + 'voice.providers.ttsProvider': 'Dostawca tekstu na mowę', + 'voice.providers.ttsProviderAria': 'Dostawca TTS', + 'voice.providers.cloudElevenLabsProxy': 'Chmura (proxy ElevenLabs)', + 'voice.providers.localPiper': 'Piper lokalnie', + 'voice.providers.piperInstalledTitle': + 'Piper jest zainstalowany. Kliknij, aby zainstalować ponownie.', + 'voice.providers.piperDownloadTitle': + 'Pobierz Piper i głos en_US-lessac-medium do przestrzeni roboczej.', + 'voice.providers.piperVoice': 'Głos Piper', + 'voice.providers.piperVoiceAria': 'Głos Piper', + 'voice.providers.customVoiceOption': 'Inny (wpisz poniżej)…', + 'voice.providers.customVoiceAria': 'Identyfikator głosu Piper (niestandardowy)', + 'voice.providers.customVoicePlaceholder': 'en_US-lessac-medium', + 'voice.providers.piperVoicesDesc': + 'Głosy pochodzą z huggingface.co/rhasspy/piper-voices. Zmiana głosu może wymagać kliknięcia Zainstaluj / Zainstaluj ponownie, aby pobrać nowy plik .onnx.', + 'voice.providers.mascotVoice': 'Głos maskotki', + 'voice.providers.mascotVoiceDescPrefix': + 'Głos ElevenLabs, którego maskotka używa do mówionych odpowiedzi, konfiguruje się w', + 'voice.providers.mascotSettings': 'Ustawienia maskotki', + 'voice.providers.mascotVoiceDescSuffix': '.', + 'voice.providers.hotkeyPlaceholder': 'Fn', + 'voice.providers.piperPreset.lessacMedium': 'US · Lessac (neutralny, zalecany)', + 'voice.providers.piperPreset.lessacHigh': 'US · Lessac (wyższa jakość, większy)', + 'voice.providers.piperPreset.ryanMedium': 'US · Ryan (męski)', + 'voice.providers.piperPreset.amyMedium': 'US · Amy (żeński)', + 'voice.providers.piperPreset.librittsHigh': 'US · LibriTTS (wielu mówców)', + 'voice.providers.piperPreset.alanMedium': 'GB · Alan (męski)', + 'voice.providers.piperPreset.jennyDiocoMedium': 'GB · Jenny Dioco (żeński)', + 'voice.providers.piperPreset.northernEnglishMaleMedium': 'GB · Północnoangielski (męski)', + 'voice.providers.chip.cloud': 'OpenHuman (zarządzany)', + 'voice.providers.chip.cloudAria': 'Zarządzany dostawca OpenHuman jest zawsze włączony', + 'voice.providers.chip.whisper': 'Whisper (lokalnie)', + 'voice.providers.chip.enableWhisper': 'Włącz lokalny Whisper STT', + 'voice.providers.chip.disableWhisper': 'Wyłącz lokalny Whisper STT', + 'voice.providers.chip.piper': 'Piper (lokalnie)', + 'voice.providers.chip.enablePiper': 'Włącz lokalny Piper TTS', + 'voice.providers.chip.disablePiper': 'Wyłącz lokalny Piper TTS', + 'voice.providers.chip.enableProvider': 'Włącz', + 'voice.providers.chip.disableProvider': 'Wyłącz', + 'voice.providers.chip.apiKeyLabel': 'Klucz API', + 'voice.providers.chip.apiKeyPlaceholder': 'sk-…', + 'voice.providers.chip.comingSoon': 'wkrótce', + 'voice.modal.title': 'Skonfiguruj', + 'voice.modal.desc': + 'Wpisz swój klucz API, aby włączyć tego dostawcę. Możesz przetestować połączenie przed zapisem.', + 'voice.modal.testKey': 'Przetestuj klucz', + 'voice.modal.testing': 'Testowanie…', + 'voice.modal.saveAndEnable': 'Zapisz i włącz', + 'voice.modal.enable': 'Włącz', + 'voice.modal.whisperDesc': + 'Wybierz rozmiar modelu i zainstaluj binarkę Whisper oraz model GGML w przestrzeni roboczej. Większe modele są dokładniejsze, ale wolniejsze.', + 'voice.modal.piperDesc': + 'Wybierz głos i zainstaluj binarkę Piper oraz model ONNX w przestrzeni roboczej. Piper działa w pełni offline z niskim opóźnieniem.', + 'voice.routing.title': 'Routing głosu', + 'voice.routing.desc': 'Wybierz, którzy włączeni dostawcy obsługują STT i TTS.', + 'voice.routing.save': 'Zapisz', + 'voice.routing.testStt': 'Testuj STT', + 'voice.routing.testTts': 'Testuj TTS', + 'voice.routing.elevenlabsVoice': 'Głos ElevenLabs', + 'voice.routing.elevenlabsVoiceAria': 'Wybór głosu ElevenLabs', + 'voice.routing.elevenlabsVoiceIdAria': 'Identyfikator głosu ElevenLabs (niestandardowy)', + 'voice.routing.elevenlabsVoiceDesc': + 'Wybierz wybrany głos lub wklej własne ID głosu z panelu ElevenLabs.', + 'voice.externalProviders.title': 'Zewnętrzni dostawcy głosu', + 'voice.externalProviders.desc': + 'Podłącz API STT/TTS innych firm, np. Deepgram, ElevenLabs lub OpenAI, bezpośrednio.', + 'voice.externalProviders.keySet': 'Klucz ustawiony', + 'voice.externalProviders.noKey': 'Brak klucza API', + 'voice.externalProviders.test': 'Test', + 'voice.externalProviders.testing': 'Testowanie…', + 'voice.externalProviders.remove': 'Usuń', + 'voice.externalProviders.provider': 'Dostawca', + 'voice.externalProviders.selectProvider': 'Wybierz dostawcę…', + 'voice.externalProviders.apiKey': 'Klucz API', + 'voice.externalProviders.apiKeyPlaceholder': 'sk-…', + 'voice.externalProviders.add': 'Dodaj', + 'autocomplete.title': 'Autouzupełnianie', + 'autocomplete.settings': 'Ustawienia', + 'autocomplete.acceptWithTab': 'Akceptuj Tabem', + 'autocomplete.stylePreset': 'Styl', + 'autocomplete.style.balanced': 'Zrównoważony', + 'autocomplete.style.concise': 'Zwięzły', + 'autocomplete.style.formal': 'Formalny', + 'autocomplete.style.casual': 'Swobodny', + 'autocomplete.style.custom': 'Własny', + 'autocomplete.disabledApps': + 'Wyłączone aplikacje (jeden identyfikator pakietu/aplikacji w wierszu)', + 'autocomplete.saveSettings': 'Zapisz ustawienia', + 'autocomplete.saving': 'Zapisywanie…', + 'autocomplete.runtime': 'Środowisko', + 'autocomplete.running': 'Działa', + 'autocomplete.start': 'Uruchom', + 'autocomplete.stop': 'Zatrzymaj', + 'autocomplete.settingsSaved': 'Ustawienia autouzupełniania zapisane.', + 'autocomplete.started': 'Autouzupełnianie uruchomione.', + 'autocomplete.didNotStart': 'Autouzupełnianie nie wystartowało. Sprawdź, czy jest włączone.', + 'autocomplete.stopped': 'Autouzupełnianie zatrzymane.', + 'autocomplete.advancedSettings': 'Ustawienia zaawansowane', + 'autocomplete.debugTitle': 'Debug autouzupełniania', + 'chat.agentChat': 'Czat z agentem', + 'chat.overrides': 'Nadpisania', + 'chat.model': 'Model', + 'chat.temperature': 'Temperatura', + 'chat.conversation': 'Rozmowa', + 'chat.startAgentConversation': 'Rozpocznij rozmowę z agentem.', + 'chat.you': 'Ty', + 'chat.agent': 'Agent', + 'chat.askAgent': 'Zapytaj agenta o cokolwiek...', + 'chat.sendMessage': 'Wyślij wiadomość', + 'composio.triageTitle': 'Wyzwalacze integracji', + 'composio.triageDesc': + 'Gdy włączone, każdy przychodzący wyzwalacz Composio przechodzi przez krok klasyfikacji AI — jedna tura lokalnego LLM na wyzwalacz. Wyłącz globalnie lub dla wybranych integracji, jeśli wolisz ręczny przegląd. Jeśli zmienna środowiskowa', + 'composio.disableAllTriage': 'Wyłącz klasyfikację AI dla wszystkich wyzwalaczy', + 'composio.triggersStillRecorded': + 'Wyzwalacze są nadal zapisywane do historii — żadna tura LLM nie jest uruchamiana.', + 'composio.disableSpecificIntegrations': 'Wyłącz klasyfikację AI dla konkretnych integracji', + 'composio.settingsSaved': 'Ustawienia zapisane', + 'composio.saveFailed': 'Nie udało się zapisać. Spróbuj ponownie.', + 'cron.title': 'Zadania cron', + 'cron.scheduledJobs': 'Zaplanowane zadania', + 'cron.manageCronJobs': 'Zarządzaj zadaniami cron z poziomu harmonogramu rdzenia.', + 'cron.refreshCronJobs': 'Odśwież zadania cron', + 'localModel.modelStatus': 'Stan modelu', + 'localModel.downloadModels': 'Pobierz modele', + 'localModel.usage': 'Użycie', + 'localModel.usageDesc': + 'Wybierz, które podsystemy korzystają z modelu lokalnego. Wszystko wyłączone używa chmury.', + 'localModel.enableRuntime': 'Włącz lokalne środowisko AI', + 'localModel.enableRuntimeDesc': + 'Główny przełącznik. Domyślnie wyłączony — Ollama pozostaje bezczynna. Gdy włączony, podsumowywanie drzewa, inteligencja ekranu i autouzupełnianie zawsze korzystają z modelu lokalnego.', + 'localModel.advancedSettings': 'Ustawienia zaawansowane', + 'localModel.debugTitle': 'Debug modelu lokalnego', + 'screenAwareness.debugTitle': 'Debug świadomości ekranu', + 'screenAwareness.debug.debugAndDiagnostics': 'Debug i diagnostyka', + 'screenAwareness.debug.collapse': 'Zwiń', + 'screenAwareness.debug.expand': 'Rozwiń', + 'screenAwareness.debug.failedToSave': 'Nie udało się zapisać świadomości ekranu', + 'screenAwareness.debug.policyTitle': 'Polityka świadomości ekranu', + 'screenAwareness.debug.baselineFps': 'Bazowe FPS', + 'screenAwareness.debug.useVisionModel': 'Użyj modelu wizji', + 'screenAwareness.debug.useVisionModelDesc': + 'Wysyłaj zrzuty ekranu do LLM wizyjnego po bogatszy kontekst. Gdy wyłączone, używany jest tylko tekst OCR z LLM tekstowym — szybciej i bez modelu wizji.', + 'screenAwareness.debug.keepScreenshots': 'Zachowuj zrzuty ekranu', + 'screenAwareness.debug.keepScreenshotsDesc': + 'Zapisuj zrzuty ekranu w przestrzeni roboczej zamiast usuwać po przetworzeniu', + 'screenAwareness.debug.allowlist': 'Lista dozwolonych (jedna reguła na linię)', + 'screenAwareness.debug.denylist': 'Lista blokowanych (jedna reguła na linię)', + 'screenAwareness.debug.saveSettings': 'Zapisz ustawienia świadomości ekranu', + 'screenAwareness.debug.sessionStats': 'Statystyki sesji', + 'screenAwareness.debug.framesEphemeral': 'Klatki (ulotne)', + 'screenAwareness.debug.panicStop': 'Awaryjne zatrzymanie', + 'screenAwareness.debug.defaultPanicHotkey': 'Cmd+Shift+.', + 'screenAwareness.debug.vision': 'Wizja', + 'screenAwareness.debug.idle': 'bezczynne', + 'screenAwareness.debug.visionQueue': 'Kolejka wizji', + 'screenAwareness.debug.lastVision': 'Ostatnia wizja', + 'screenAwareness.debug.notAvailable': 'n/d', + 'screenAwareness.debug.visionSummaries': 'Podsumowania wizji', + 'screenAwareness.debug.refreshing': 'Odświeżanie…', + 'screenAwareness.debug.noSummaries': 'Brak podsumowań.', + 'screenAwareness.debug.unknownApp': 'Nieznana aplikacja', + 'screenAwareness.debug.macosOnly': + 'Świadomość ekranu V1 jest obecnie obsługiwana tylko na macOS.', + 'memory.debugTitle': 'Debug pamięci', + 'memory.documents': 'Dokumenty', + 'memory.filterByNamespace': 'Filtruj po przestrzeni nazw...', + 'memory.refresh': 'Odśwież', + 'memory.noDocumentsFound': 'Nie znaleziono dokumentów.', + 'memory.delete': 'Usuń', + 'memory.rawResponse': 'Surowa odpowiedź', + 'memory.namespaces': 'Przestrzenie nazw', + 'memory.noNamespacesFound': 'Nie znaleziono przestrzeni nazw.', + 'memory.queryRecall': 'Zapytanie i przywołanie', + 'memory.namespace': 'Przestrzeń nazw', + 'memory.queryText': 'Tekst zapytania...', + 'memory.defaultMaxChunks': '10', + 'memory.maxChunks': 'maks. fragmentów', + 'memory.query': 'Zapytaj', + 'memory.recall': 'Przywołaj', + 'memory.queryLabel': 'Zapytanie', + 'memory.recallLabel': 'Przywołanie', + 'memory.queryResult': 'Wynik zapytania', + 'memory.recallResult': 'Wynik przywołania', + 'memory.clearNamespace': 'Wyczyść przestrzeń nazw', + 'memory.clearNamespaceDescription': 'Trwale usuń wszystkie dokumenty w przestrzeni nazw.', + 'memory.selectNamespace': 'Wybierz przestrzeń nazw...', + 'memory.exampleNamespace': 'np. skill:gmail:user@example.com', + 'memory.clear': 'Wyczyść', + 'memory.deleteConfirm': 'Usunąć dokument „{documentId}” w przestrzeni „{namespace}”?', + 'memory.clearNamespaceConfirm': + 'To trwale usunie WSZYSTKIE dokumenty w przestrzeni „{namespace}”. Kontynuować?', + 'memory.clearNamespaceSuccess': 'Wyczyszczono przestrzeń „{namespace}”.', + 'memory.clearNamespaceEmpty': 'Nic do wyczyszczenia w „{namespace}”.', + 'webhooks.debugTitle': 'Debug webhooków', + 'webhooks.failedToLoadDebugData': 'Nie udało się załadować danych debugowania webhooków', + 'webhooks.clearLogsConfirm': 'Wyczyścić wszystkie zebrane logi debugowania webhooków?', + 'webhooks.failedToClearLogs': 'Nie udało się wyczyścić logów webhooków', + 'webhooks.loading': 'Ładowanie...', + 'webhooks.refresh': 'Odśwież', + 'webhooks.clearing': 'Czyszczenie...', + 'webhooks.clearLogs': 'Wyczyść logi', + 'webhooks.registered': 'zarejestrowane', + 'webhooks.captured': 'przechwycone', + 'webhooks.live': 'na żywo', + 'webhooks.disconnected': 'rozłączone', + 'webhooks.lastEvent': 'Ostatnie zdarzenie', + 'webhooks.at': 'o', + 'webhooks.registeredWebhooks': 'Zarejestrowane webhooki', + 'webhooks.noActiveRegistrations': 'Brak aktywnych rejestracji.', + 'webhooks.resolvingBackendUrl': 'Rozpoznawanie URL backendu…', + 'webhooks.capturedRequests': 'Przechwycone żądania', + 'webhooks.noRequestsCaptured': 'Nie przechwycono jeszcze żądań webhooków.', + 'webhooks.unrouted': 'nierozesłane', + 'webhooks.pending': 'oczekujące', + 'webhooks.requestHeaders': 'Nagłówki żądania', + 'webhooks.queryParams': 'Parametry zapytania', + 'webhooks.requestBody': 'Treść żądania', + 'webhooks.responseHeaders': 'Nagłówki odpowiedzi', + 'webhooks.responseBody': 'Treść odpowiedzi', + 'webhooks.rawPayload': 'Surowy ładunek', + 'webhooks.empty': '[puste]', + 'providerSetup.error.defaultDetails': 'Konfiguracja dostawcy nieudana.', + 'providerSetup.error.providerFallback': 'Dostawca', + 'providerSetup.error.credentialsRejected': + 'Dostawca {provider} odrzucił dane logowania. Sprawdź klucz API i spróbuj ponownie.', + 'providerSetup.error.endpointNotRecognized': + 'Dostawca {provider} nie rozpoznał endpointu. Sprawdź URL bazowy i spróbuj ponownie.', + 'providerSetup.error.providerUnavailable': + 'Dostawca {provider} jest teraz niedostępny. Spróbuj ponownie lub sprawdź status dostawcy.', + 'providerSetup.error.unreachable': + 'Nie udało się połączyć z {provider}. Sprawdź URL endpointu i połączenie sieciowe, potem spróbuj ponownie.', + 'providerSetup.error.couldNotReachWithMessage': 'Nie udało się połączyć z {provider}: {message}', + 'providerSetup.error.technicalDetails': 'Szczegóły techniczne', + 'notifications.routingTitle': 'Trasowanie powiadomień', + 'notifications.routing.pipelineStats': 'Statystyki pipeline', + 'notifications.routing.total': 'Razem', + 'notifications.routing.unread': 'Nieprzeczytane', + 'notifications.routing.unscored': 'Niezocenione', + 'notifications.routing.intelligenceTitle': 'Inteligencja powiadomień', + 'notifications.routing.intelligenceDesc': + 'Każde powiadomienie z Twoich podłączonych kont jest oceniane przez lokalny model AI. Powiadomienia o wysokiej wadze są automatycznie kierowane do agenta orchestratora, by nic ważnego nie umknęło.', + 'notifications.routing.howItWorks': 'Jak to działa', + 'notifications.routing.level.drop': 'Odrzuć', + 'notifications.routing.level.dropDesc': 'Szum / spam — zapisane, ale nie pokazywane', + 'notifications.routing.level.acknowledge': 'Potwierdź', + 'notifications.routing.level.acknowledgeDesc': 'Niski priorytet — widoczne w centrum powiadomień', + 'notifications.routing.level.react': 'Reaguj', + 'notifications.routing.level.reactDesc': + 'Średni priorytet — uruchamia ukierunkowaną odpowiedź agenta', + 'notifications.routing.level.escalate': 'Eskaluj', + 'notifications.routing.level.escalateDesc': 'Wysoki priorytet — przekierowane do orchestratora', + 'notifications.routing.perProvider': 'Routing per dostawca', + 'notifications.routing.threshold': 'Próg', + 'notifications.routing.routeToOrchestrator': 'Kieruj do orchestratora', + 'notifications.routing.loadSettingsError': + 'Nie udało się załadować ustawień. Otwórz panel ponownie.', + 'common.reload': 'Odśwież', + 'common.skip': 'Pomiń', + 'common.disable': 'Wyłącz', + 'common.enable': 'Włącz', + 'chat.safetyTimeout': + 'Brak odpowiedzi agenta po 2 minutach. Spróbuj ponownie lub sprawdź połączenie.', + 'chat.filter.all': 'Wszystkie', + 'chat.filter.work': 'Praca', + 'chat.filter.briefing': 'Briefing', + 'chat.filter.notification': 'Powiadomienia', + 'chat.filter.workers': 'Workery', + 'chat.selectThread': 'Wybierz wątek', + 'chat.threads': 'Wątki', + 'chat.noThreads': 'Brak wątków', + 'chat.noLabelThreads': 'Brak wątków „{label}”', + 'chat.noWorkerThreads': 'Brak wątków workerów', + 'chat.deleteThread': 'Usuń wątek', + 'chat.deleteThreadConfirm': 'Czy na pewno chcesz usunąć „{title}”?', + 'chat.untitledThread': 'Wątek bez tytułu', + 'chat.editThreadTitle': 'Edytuj tytuł wątku', + 'chat.hideSidebar': 'Ukryj panel boczny', + 'chat.showSidebar': 'Pokaż panel boczny', + 'chat.newThreadShortcut': 'Nowy wątek (/new)', + 'chat.new': 'Nowy', + 'chat.failedToLoadMessages': 'Nie udało się wczytać wiadomości', + 'chat.thinkingIteration': 'Myślę... ({n})', + 'chat.thinkingDots': 'Myślę...', + 'chat.approachingLimit': 'Zbliżasz się do limitu', + 'chat.approachingLimitMsg': 'Wykorzystano {pct}% dostępnego limitu.', + 'chat.upgrade': 'Podnieś plan', + 'chat.weeklyLimitHit': 'Wykorzystano przewidziany budżet cyklu.', + 'chat.resets': 'Reset', + 'chat.topUpToContinue': 'Doładuj, aby kontynuować.', + 'chat.budgetComplete': 'Twój budżet jest wyczerpany. Doładuj kredyty lub zmień plan.', + 'chat.topUp': 'Doładuj', + 'chat.cycle': 'Cykl', + 'chat.cycleSpent': 'Wydane w tym cyklu', + 'chat.cycleRemaining': 'Pozostało', + 'chat.left': 'pozostało', + 'chat.setup': 'Skonfiguruj', + 'chat.switchToText': 'Przełącz na tekst', + 'chat.transcribing': 'Transkrypcja...', + 'chat.stopAndSend': 'Zatrzymaj i wyślij', + 'chat.startTalking': 'Zacznij mówić', + 'chat.playingVoiceReply': 'Odtwarzanie odpowiedzi głosowej', + 'chat.voiceHint': 'Użyj mikrofonu, aby mówić', + 'chat.micUnavailable': 'Mikrofon niedostępny', + 'chat.turn': 'tura', + 'chat.turns': 'tury', + 'chat.openWorkerThread': 'Otwórz wątek workera', + 'chat.attachment.attach': 'Dołącz obraz', + 'chat.attachment.remove': 'Usuń {name}', + 'chat.attachment.tooMany': 'Maksymalnie {max} obrazów na wiadomość', + 'chat.attachment.tooLarge': 'Obraz przekracza limit rozmiaru {max}', + 'chat.attachment.unsupportedType': 'Nieobsługiwany typ pliku. Użyj PNG, JPEG, WebP, GIF lub BMP.', + 'chat.attachment.readFailed': 'Nie można odczytać pliku', + 'memory.searchAria': 'Szukaj w pamięci', + 'memory.searchPlaceholder': 'Szukaj wpisów pamięci...', + 'memory.sourceFilter.all': 'Wszystkie źródła', + 'memory.sourceFilter.email': 'E-mail', + 'memory.sourceFilter.calendar': 'Kalendarz', + 'memory.sourceFilter.telegram': 'Telegram', + 'memory.sourceFilter.aiInsight': 'Wniosek AI', + 'memory.sourceFilter.system': 'System', + 'memory.sourceFilter.trading': 'Handel', + 'memory.sourceFilter.security': 'Bezpieczeństwo', + 'memory.ingestionActivity': 'Aktywność pobierania', + 'memory.events': 'zdarzenia', + 'memory.event': 'zdarzenie', + 'memory.overTheLast': 'w ciągu ostatnich', + 'memory.months': 'miesięcy', + 'memory.peak': 'Szczyt', + 'memory.perDay': '/dzień', + 'memory.less': 'Mniej', + 'memory.more': 'Więcej', + 'memory.on': 'w', + 'memory.loading': 'Wczytywanie pamięci', + 'memory.fetching': 'Pobieranie wpisów pamięci...', + 'memory.analyzing': 'Analiza pamięci', + 'memory.analyzingHint': 'Przetwarzanie wspomnień w celu wydobycia wniosków...', + 'memory.noMatches': 'Brak dopasowań', + 'memory.noMatchesHint': 'Spróbuj zmienić wyszukiwane słowa lub filtry.', + 'memory.allCaughtUp': 'Wszystko nadrobione', + 'memory.allCaughtUpHint': 'Brak nowych wpisów do przetworzenia.', + 'memory.noAnalysis': 'Brak analizy', + 'memory.noAnalysisHint': 'Uruchom analizę, aby odkryć wzorce w swoich wspomnieniach.', + 'memory.emptyHint': 'Zacznij używać aplikacji, aby utworzyć pierwsze wspomnienia.', + 'mic.unavailable': 'Mikrofon niedostępny', + 'mic.permissionDenied': 'Odmowa dostępu do mikrofonu', + 'mic.failedToStartRecorder': 'Nie udało się uruchomić rejestratora', + 'mic.transcribing': 'Transkrypcja...', + 'mic.tapToSend': 'Dotknij, aby wysłać', + 'mic.waitingForAgent': 'Czekam na agenta...', + 'mic.tapAndSpeak': 'Dotknij i mów', + 'mic.stopRecording': 'Zatrzymaj nagrywanie i wyślij', + 'mic.startRecording': 'Rozpocznij nagrywanie', + 'mic.deviceSelector': 'Urządzenie mikrofonowe', + 'mic.tapToSendCountdown': 'Dotknij, aby wysłać ({seconds}s)', + 'token.usageLimitReached': 'Osiągnięto limit użycia', + 'token.approachingLimit': 'Zbliżasz się do limitu', + 'token.planClickForDetails': 'plan — kliknij, aby zobaczyć szczegóły', + 'token.sessionTokens': 'Wej: {in} | Wyj: {out} | Tury: {turns}', + 'token.limit': 'Limit osiągnięty', + 'catalog.noCapabilityBinding': 'Brak powiązanej możliwości', + 'catalog.downloadFailed': 'Pobieranie nie powiodło się', + 'catalog.active': 'Aktywny', + 'catalog.installed': 'Zainstalowany', + 'catalog.notDownloaded': 'Nie pobrany', + 'catalog.inUse': 'W użyciu', + 'catalog.use': 'Użyj', + 'catalog.deleteModel': 'Usuń model', + 'catalog.download': 'Pobierz', + 'navigator.recent': 'Ostatnie', + 'navigator.today': 'Dziś', + 'navigator.thisWeek': 'Ten tydzień', + 'navigator.sources': 'Źródła', + 'navigator.email': 'E-mail', + 'navigator.slack': 'Slack', + 'navigator.chat': 'Czat', + 'navigator.documents': 'Dokumenty', + 'navigator.people': 'Ludzie', + 'navigator.topics': 'Tematy', + 'dreams.description': + 'Sny to refleksje generowane przez AI, syntetyzujące wzorce z Twoich wspomnień.', + 'dreams.comingSoon': 'Wkrótce', + 'assignment.memoryLlm': 'LLM pamięci', + 'assignment.memoryLlmAria': 'Wybór LLM pamięci', + 'assignment.embedder': 'Embedder', + 'assignment.loaded': 'Wczytano', + 'assignment.notDownloaded': 'Nie pobrano', + 'assignment.usedForExtractSummarise': 'Używany do ekstrakcji i podsumowywania', + 'insights.knownFacts': 'Znane fakty', + 'insights.preferences': 'Preferencje', + 'insights.relationships': 'Relacje', + 'insights.skills': 'Umiejętności', + 'insights.opinions': 'Opinie', + 'insights.other': 'Inne', + 'insights.title': 'Wnioski', + 'insights.empty': 'Brak wniosków. Wnioski są generowane wraz ze wzrostem pamięci.', + 'insights.description': 'Na podstawie {count} relacji w Twoim grafie pamięci.', + 'insights.items': 'elementów', + 'insights.more': 'więcej', + 'calls.joiningCall': 'Dołączanie do rozmowy', + 'calls.meetWindowOpening': 'Otwieranie okna Meet...', + 'calls.failedToStart': 'Nie udało się uruchomić rozmowy Meet', + 'calls.couldNotStart': 'Nie można rozpocząć rozmowy', + 'calls.failedToClose': 'Nie udało się zakończyć rozmowy', + 'calls.couldNotClose': 'Nie można zamknąć rozmowy', + 'calls.joinMeet': 'Dołącz do rozmowy Google Meet', + 'calls.joinMeetDescription': 'Wprowadź link Google Meet, aby dołączyć.', + 'calls.meetLink': 'Link Meet', + 'calls.displayName': 'Wyświetlana nazwa', + 'calls.openingMeet': 'Otwieranie Meet...', + 'calls.joinCall': 'Dołącz do rozmowy', + 'calls.activeCalls': 'Aktywne rozmowy', + 'calls.leave': 'Opuść', + 'workspace.wipeConfirm': + 'Czy na pewno chcesz wyczyścić całą pamięć? Tej operacji nie można cofnąć.', + 'workspace.resetTreeConfirm': 'Czy na pewno chcesz przebudować drzewo pamięci?', + 'workspace.wipeTitle': 'Wyczyść pamięć', + 'workspace.resetting': 'Resetowanie...', + 'workspace.resetMemory': 'Zresetuj pamięć', + 'workspace.resetTreeTitle': 'Przebuduj drzewo pamięci', + 'workspace.rebuilding': 'Przebudowa...', + 'workspace.resetMemoryTree': 'Zresetuj drzewo pamięci', + 'workspace.building': 'Budowanie...', + 'workspace.buildSummaryTrees': 'Zbuduj drzewa podsumowań', + 'workspace.viewVault': 'Pokaż sejf', + 'workspace.openingVaultTitle': 'Otwieranie sejfu w Obsidianie', + 'workspace.openingVaultMessage': + 'Jeśli Obsidian się nie otworzy, zainstaluj go z obsidian.md lub użyj „Pokaż folder”. Ścieżka sejfu:', + 'workspace.openVaultFailedTitle': 'Nie udało się otworzyć sejfu w Obsidianie', + 'workspace.openVaultFailedMessage': + 'Użyj „Pokaż folder”, aby otworzyć katalog sejfu bezpośrednio. Ścieżka sejfu:', + 'workspace.revealVaultFailed': 'Nie udało się pokazać folderu sejfu', + 'workspace.revealFolder': 'Pokaż folder', + 'workspace.checkingVault': 'Sprawdzanie…', + 'workspace.vaultNotRegisteredHelp': + 'Obsidian otwiera tylko foldery dodane jako sejf. W Obsidianie wybierz „Otwórz folder jako sejf” i wskaż folder poniżej — wystarczy to zrobić raz. Następnie ponownie kliknij Pokaż sejf.', + 'workspace.obsidianNotFoundHelp': + 'Nie znaleziono Obsidiana na tym urządzeniu. Zainstaluj go lub — jeśli jest zainstalowany w niestandardowym miejscu — ustaw jego folder konfiguracyjny w sekcji Zaawansowane.', + 'workspace.openAnyway': 'Otwórz w Obsidianie mimo to', + 'workspace.installObsidian': 'Zainstaluj Obsidiana', + 'workspace.obsidianAdvanced': 'Obsidian zainstalowany gdzie indziej?', + 'workspace.obsidianConfigDirLabel': 'Folder konfiguracji Obsidiana', + 'workspace.obsidianConfigDirHint': + 'Ścieżka do folderu zawierającego obsidian.json (np. ~/.config/obsidian). Zostaw puste, aby wykryć automatycznie.', + 'workspace.obsidianConfigDirPlaceholder': '~/.config/obsidian', + 'workspace.graphLoadFailed': 'Nie udało się wczytać grafu pamięci', + 'workspace.loadingGraph': 'Wczytywanie grafu pamięci...', + 'workspace.graphViewMode': 'Tryb widoku grafu pamięci', + 'workspace.trees': 'Drzewa', + 'workspace.contacts': 'Kontakty', + 'graph.noContactMentions': 'Brak wzmianek o kontakcie', + 'graph.noMemory': 'Brak pamięci', + 'graph.source': 'Źródło', + 'graph.topic': 'Temat', + 'graph.global': 'Globalne', + 'graph.document': 'Dokument', + 'graph.contact': 'Kontakt', + 'graph.nodes': 'węzły', + 'graph.parentChild': 'rodzic-dziecko', + 'graph.documentContact': 'dokument-kontakt', + 'graph.link': 'powiązanie', + 'graph.links': 'powiązania', + 'graph.children': 'dzieci', + 'graph.clickToOpenObsidian': 'Kliknij, aby otworzyć w Obsidianie', + 'graph.person': 'Osoba', + 'modal.dontShowAgain': 'Nie pokazuj podobnych sugestii', + 'reflections.loading': 'Wczytywanie refleksji...', + 'reflections.empty': 'Brak refleksji', + 'reflections.title': 'Refleksje', + 'reflections.proposedAction': 'Proponowane działanie', + 'reflections.act': 'Wykonaj', + 'reflections.dismiss': 'Odrzuć', + 'whatsapp.chatsSynced': 'rozmów zsynchronizowano', + 'whatsapp.chatSynced': 'rozmowa zsynchronizowana', + 'sync.active': 'Aktywna', + 'sync.recent': 'Ostatnia', + 'sync.idle': 'Bezczynna', + 'sync.memorySources': 'Źródła pamięci', + 'sync.noConnectedSources': 'Brak połączonych źródeł', + 'sync.chunks': 'fragmentów', + 'sync.lastChunk': 'Ostatni fragment:', + 'sync.pending': 'oczekujące', + 'sync.processed': 'przetworzone', + 'sync.syncing': 'Synchronizacja…', + 'sync.sync': 'Synchronizuj', + 'sync.failedToLoad': 'Nie udało się wczytać stanu synchronizacji', + 'sync.noContent': + 'Żadna treść nie została jeszcze zsynchronizowana do pamięci. Podłącz integrację, aby zacząć.', + 'memorySources.title': 'Źródła pamięci', + 'memorySources.empty': 'Brak źródeł pamięci. Dodaj jedno, aby zacząć zasilać pamięć.', + 'memorySources.customSources': 'Własne źródła', + 'memorySources.addSource': 'Dodaj źródło', + 'memorySources.noCustomSources': + 'Brak własnych źródeł. Dodaj folder, repozytorium GitHub, kanał RSS lub stronę internetową, aby zacząć.', + 'memorySources.loadingConnections': 'Wczytywanie połączeń…', + 'memorySources.noConnections': + 'Nie znaleziono aktywnych połączeń Composio. Najpierw połącz integrację.', + 'memorySources.pickConnection': 'Wybierz połączenie', + 'memorySources.selectConnection': '— Wybierz połączenie —', + 'memorySources.composioListFailed': 'Nie udało się wczytać połączeń Composio.', + 'memorySources.browse': 'Przeglądaj…', + 'memorySources.folderPathPlaceholder': '/Users/you/notes', + 'memorySources.globPatternPlaceholder': '**/*.md', + 'memorySources.repoUrlPlaceholder': 'https://github.com/org/repo', + 'memorySources.branchPlaceholder': 'main', + 'memorySources.feedUrlPlaceholder': 'https://example.com/feed.xml', + 'memorySources.pageUrlPlaceholder': 'https://example.com/article', + 'memorySources.cssSelectorPlaceholder': 'article', + 'memorySources.searchQueryPlaceholder': 'from:user AI safety', + 'memorySources.kind.composio': 'Integracja', + 'memorySources.kind.folder': 'Folder lokalny', + 'memorySources.kind.github_repo': 'Repozytorium GitHub', + 'memorySources.kind.twitter_query': 'Wyszukiwanie Twittera', + 'memorySources.kind.rss_feed': 'Kanał RSS', + 'memorySources.kind.web_page': 'Strona internetowa', + 'memorySources.sync.successTitle': 'Synchronizowanie', + 'memorySources.sync.successMessage': 'Postęp pojawi się za chwilę.', + 'memorySources.sync.failedTitle': 'Synchronizacja nie powiodła się:', + 'time.justNow': 'przed chwilą', + 'time.secondsAgoSuffix': 's temu', + 'time.minutesAgoSuffix': 'min temu', + 'time.hoursAgoSuffix': 'godz. temu', + 'time.daysAgoSuffix': 'd temu', + 'memorySources.pickKind': 'Jaki typ źródła chcesz dodać?', + 'memorySources.backToKinds': 'Wróć do typów źródeł', + 'memorySources.label': 'Etykieta', + 'memorySources.labelPlaceholder': 'Moje notatki badawcze', + 'memorySources.add': 'Dodaj', + 'memorySources.adding': 'Dodawanie…', + 'memorySources.added': 'Źródło dodane', + 'memorySources.removed': 'Źródło usunięte', + 'memorySources.remove': 'Usuń', + 'memorySources.enable': 'Włącz', + 'memorySources.disable': 'Wyłącz', + 'memorySources.toggleFailed': 'Nie udało się przełączyć', + 'memorySources.removeFailed': 'Nie udało się usunąć', + 'memorySources.folderPath': 'Ścieżka folderu', + 'memorySources.globPattern': 'Wzorzec glob', + 'memorySources.repoUrl': 'URL repozytorium', + 'memorySources.branch': 'Gałąź', + 'memorySources.feedUrl': 'URL kanału', + 'memorySources.pageUrl': 'URL strony', + 'memorySources.cssSelector': 'Selektor CSS (opcjonalnie)', + 'memorySources.searchQuery': 'Zapytanie wyszukiwania', + 'backend.aiBackend': 'Backend AI', + 'backend.cloud': 'Chmura', + 'backend.recommended': 'Zalecane', + 'backend.cloudDescription': + 'Szybkie, mocne modele kierowane przez backend OpenHuman. Gotowe do użycia od razu.', + 'backend.privacyNote': + 'Prompty i wybrany kontekst mogą być wysyłane do skonfigurowanego backendu/dostawcy. Użyj trybu lokalnego dla obsługiwanych workloadów na urządzeniu.', + 'backend.local': 'Lokalny', + 'backend.advanced': 'Zaawansowane', + 'backend.localDescription': + 'Uruchom modele na własnej maszynie z Ollamą. Pełna prywatność, wymaga konfiguracji.', + 'backend.ramRecommended': 'Zalecane 16 GB+ RAM', + 'subconscious.tasks': 'zadań', + 'subconscious.ticks': 'tików', + 'subconscious.last': 'Ostatnio', + 'subconscious.failed': 'nieudane', + 'subconscious.tickInterval': 'Interwał tików', + 'subconscious.runNow': 'Uruchom teraz', + 'subconscious.providerUnavailableTitle': 'Podświadomość wstrzymana', + 'subconscious.providerSettings': 'Ustawienia AI', + 'subconscious.approvalNeeded': 'Wymagana zgoda', + 'subconscious.requiresApproval': 'Wymaga zgody', + 'subconscious.fixInConnections': 'Napraw w Połączeniach', + 'subconscious.goAhead': 'Działaj', + 'subconscious.activeTasks': 'Aktywne zadania', + 'subconscious.noActiveTasks': 'Brak aktywnych zadań', + 'subconscious.default': 'Domyślne', + 'subconscious.addTaskPlaceholder': 'Dodaj nowe zadanie...', + 'subconscious.activityLog': 'Dziennik aktywności', + 'subconscious.noActivity': 'Brak aktywności', + 'subconscious.decision.nothingNew': 'Nic nowego', + 'subconscious.decision.completed': 'Ukończone', + 'subconscious.decision.evaluating': 'Ocena', + 'subconscious.decision.waitingApproval': 'Oczekiwanie na zgodę', + 'subconscious.decision.failed': 'Niepowodzenie', + 'subconscious.decision.cancelled': 'Anulowane', + 'subconscious.decision.skipped': 'Pominięte', + 'actionable.complete': 'Zakończ', + 'actionable.dismiss': 'Odrzuć', + 'actionable.snooze': 'Odłóż', + 'actionable.new': 'Nowe', + 'stats.storage': 'Pamięć', + 'stats.files': 'plików', + 'stats.documents': 'Dokumenty', + 'stats.today': 'dziś', + 'stats.namespaces': 'Przestrzenie nazw', + 'stats.relations': 'Relacje', + 'stats.firstMemory': 'Pierwsze wspomnienie', + 'stats.latest': 'Ostatnie', + 'stats.sessions': 'Sesje', + 'stats.tokens': 'tokenów', + 'bootCheck.invalidUrl': 'Wprowadź adres URL środowiska.', + 'bootCheck.urlMustStartWith': 'Adres musi zaczynać się od http:// lub https://', + 'bootCheck.validUrlRequired': + 'To nie wygląda na prawidłowy adres URL (spróbuj https://core.example.com/rpc)', + 'bootCheck.tokenRequired': 'Aby się połączyć, potrzebujemy tokenu uwierzytelniania.', + 'bootCheck.chooseCoreMode': 'Wybierz środowisko', + 'bootCheck.connectToCore': 'Połącz się ze swoim środowiskiem', + 'bootCheck.desktopDescription': + 'OpenHuman potrzebuje środowiska do działania. Wybierz, gdzie ma się znajdować.', + 'bootCheck.webDescription': + 'W przeglądarce OpenHuman łączy się ze środowiskiem, którym zarządzasz. Wpisz jego URL i token poniżej lub pobierz aplikację desktopową, aby uruchomić środowisko bezpośrednio na komputerze.', + 'bootCheck.preferDesktop': 'Wolisz wszystko trzymać na własnym urządzeniu?', + 'bootCheck.downloadDesktop': 'Pobierz aplikację desktopową', + 'bootCheck.localRecommended': 'Uruchom lokalnie (zalecane)', + 'bootCheck.localDescription': + 'Działa bezpośrednio na Twoim komputerze. Najszybsze, w pełni prywatne, bez konfiguracji.', + 'bootCheck.cloudMode': 'Uruchom w chmurze (zaawansowane)', + 'bootCheck.cloudDescription': + 'Połącz się ze środowiskiem hostowanym w innym miejscu. Działa 24×7, więc nie musisz trzymać tego urządzenia włączonego.', + 'bootCheck.coreRpcUrl': 'URL środowiska', + 'bootCheck.rpcUrlPlaceholder': 'https://core.example.com/rpc', + 'bootCheck.authToken': 'Token uwierzytelniania', + 'bootCheck.bearerTokenPlaceholder': 'Token bearer ze zdalnego środowiska', + 'bootCheck.storedLocally': 'Przechowywany wyłącznie na tym urządzeniu. Wysyłany jako ', + 'bootCheck.testing': 'Testowanie…', + 'bootCheck.testConnection': 'Testuj połączenie', + 'bootCheck.connectedOk': 'Połączono. Możesz działać.', + 'bootCheck.authFailed': 'Ten token nie zadziałał. Sprawdź go i spróbuj ponownie.', + 'bootCheck.unreachablePrefix': 'Nie udało się połączyć:', + 'bootCheck.checkingCore': 'Budzenie środowiska…', + 'bootCheck.cannotReach': 'Nie można połączyć się ze środowiskiem', + 'bootCheck.cannotReachDesc': 'Nie udało się połączyć z Twoim środowiskiem. Spróbować innego?', + 'bootCheck.switchMode': 'Wybierz inne środowisko', + 'bootCheck.quit': 'Zakończ', + 'bootCheck.legacyDetected': 'Wykryto starsze środowisko w tle', + 'bootCheck.legacyDescription': + 'Osobno zainstalowany daemon OpenHuman już działa na tym urządzeniu. Musimy go usunąć, zanim wbudowane środowisko przejmie kontrolę.', + 'bootCheck.removing': 'Usuwanie…', + 'bootCheck.removeContinue': 'Usuń i kontynuuj', + 'bootCheck.localNeedsRestart': 'Lokalne środowisko wymaga restartu', + 'bootCheck.localNeedsRestartDesc': + 'Twoje lokalne środowisko jest w innej wersji niż ta aplikacja. Szybki restart przywróci zgodność.', + 'bootCheck.restarting': 'Restartowanie…', + 'bootCheck.restartCore': 'Zrestartuj środowisko', + 'bootCheck.cloudNeedsUpdate': 'Środowisko chmurowe wymaga aktualizacji', + 'bootCheck.cloudNeedsUpdateDesc': + 'Twoje środowisko chmurowe jest w innej wersji niż ta aplikacja. Uruchom aktualizację, aby przywrócić zgodność.', + 'bootCheck.updating': 'Aktualizowanie…', + 'bootCheck.updateCloudCore': 'Zaktualizuj środowisko chmurowe', + 'bootCheck.versionCheckFailed': 'Sprawdzenie wersji środowiska nie powiodło się', + 'bootCheck.versionCheckFailedDesc': + 'Środowisko działa, ale nie raportuje wersji. Może być nieaktualne. Zrestartuj lub zaktualizuj, aby kontynuować.', + 'bootCheck.working': 'Pracuję…', + 'bootCheck.restartUpdateCore': 'Zrestartuj / zaktualizuj środowisko', + 'bootCheck.unexpectedError': 'Nieoczekiwany błąd sprawdzania uruchamiania', + 'bootCheck.actionFailed': 'Coś poszło nie tak. Spróbuj ponownie.', + 'bootCheck.portConflictTitle': 'Nie udało się uruchomić silnika aplikacji', + 'bootCheck.portConflictBody': + 'Inny proces używa portu sieciowego potrzebnego OpenHumanowi. Spróbujemy to naprawić automatycznie.', + 'bootCheck.portConflictFixButton': 'Napraw automatycznie', + 'bootCheck.portConflictFixing': 'Naprawianie…', + 'bootCheck.portConflictFixFailed': + 'Automatyczna naprawa się nie powiodła. Zrestartuj komputer i spróbuj ponownie.', + 'notifications.justNow': 'przed chwilą', + 'notifications.minAgo': '{n} min temu', + 'notifications.hrAgo': '{n} godz. temu', + 'notifications.dayAgo': '{n} dni temu', + 'notifications.category.messages': 'Wiadomości', + 'notifications.category.agents': 'Agenci', + 'notifications.category.skills': 'Umiejętności', + 'notifications.category.system': 'System', + 'notifications.category.meetings': 'Spotkania', + 'notifications.category.reminders': 'Przypomnienia', + 'notifications.category.important': 'Ważne', + 'about.update.status.checking': 'Sprawdzanie...', + 'about.update.status.available': 'Dostępna wersja {version}', + 'about.update.status.availableNoVersion': 'Dostępna aktualizacja', + 'about.update.status.downloading': 'Pobieranie...', + 'about.update.status.readyToInstall': 'Wersja {version} gotowa do instalacji', + 'about.update.status.readyToInstallNoVersion': + 'Nowa wersja została pobrana i jest gotowa. Zrestartuj, aby zastosować.', + 'about.update.status.installing': 'Instalowanie...', + 'about.update.status.restarting': 'Restartowanie...', + 'about.update.status.upToDate': 'Używasz najnowszej wersji.', + 'about.update.status.error': 'Sprawdzenie aktualizacji nie powiodło się', + 'about.update.status.default': 'Sprawdź aktualizacje', + 'welcome.connectionFailed': 'Połączenie nie powiodło się: {status} {statusText}', + 'welcome.connectionFailedMsg': 'Połączenie nie powiodło się: {message}', + 'welcome.continueLocally': 'Kontynuuj lokalnie', 'welcome.continueLocallyExperimental': 'Kontynuuj lokalnie (Eksperymentalne)', + 'welcome.localSessionStarting': 'Rozpoczynanie sesji lokalnej...', + 'welcome.localSessionDesc': + 'Używa lokalnego profilu offline i pomija logowanie OAuth TinyHumans.', + 'chat.agentChatDesc': 'Otwórz bezpośrednią sesję czatu z agentem.', + 'chat.modelPlaceholder': 'gpt-4o', + 'channels.activeRouteValue': '{channel} przez {authMode}', + 'privacy.dataKind.messages': 'Wiadomości', + 'privacy.dataKind.agents': 'Agenci', + 'privacy.dataKind.skills': 'Umiejętności', + 'privacy.dataKind.system': 'System', + 'privacy.dataKind.meetings': 'Spotkania', + 'privacy.dataKind.reminders': 'Przypomnienia', + 'privacy.dataKind.important': 'Ważne', + 'onboarding.enableLocalAI': 'Włącz lokalne AI', + 'onboarding.skills.status.available': 'Dostępne', + 'onboarding.skills.status.connected': 'Połączone', + 'onboarding.skills.status.connecting': 'Łączenie', + 'onboarding.skills.status.error': 'Błąd', + 'onboarding.skills.status.unavailable': 'Niedostępne', + 'composio.statusUnavailable': 'Status niedostępny', + 'composio.authExpired': 'Autoryzacja wygasła', + 'composio.reconnect': 'Połącz ponownie', + 'composio.expiredAuthorization': 'Autoryzacja {name} wygasła', + 'composio.expiredDescription': + 'Połącz ponownie, aby ponownie włączyć narzędzia {name}. OpenHuman utrzyma tę integrację jako niedostępną, dopóki nie odświeżysz dostępu OAuth.', + 'composio.envVarOverrides': 'jest ustawiona, nadpisuje to ustawienie.', + 'composio.previewBadge': 'Podgląd', + 'composio.previewTooltip': + 'Integracja z agentem wkrótce — możesz się połączyć, ale agent nie może jeszcze użyć tego zestawu narzędzi.', + 'memory.day.sun': 'nd.', + 'memory.day.mon': 'pn.', + 'memory.day.tue': 'wt.', + 'memory.day.wed': 'śr.', + 'memory.day.thu': 'cz.', + 'memory.day.fri': 'pt.', + 'memory.day.sat': 'sb.', + 'memory.ingesting': 'Pobieranie', + 'memory.ingestionQueued': 'W kolejce', + 'memory.ingestingTitle': 'Pobieranie {title}', + 'mic.noAudioCaptured': 'Nie nagrano dźwięku', + 'mic.noSpeechDetected': 'Nie wykryto mowy', + 'mic.lowConfidenceResult': 'Nie udało się wyraźnie zrozumieć dźwięku — spróbuj ponownie', + 'mic.failedToStopRecording': 'Nie udało się zatrzymać nagrywania: {message}', + 'mic.transcriptionFailed': 'Transkrypcja nie powiodła się: {message}', + 'reflections.kind.retrospective': 'Retrospektywa', + 'reflections.kind.derivedFact': 'Wywiedziony fakt', + 'reflections.kind.moodInsight': 'Wnioski o nastroju', + 'reflections.kind.relationshipInsight': 'Wnioski o relacjach', + 'graph.tooltip.summary': 'Podsumowanie', + 'graph.tooltip.contact': 'Kontakt', + 'localModel.usage.never': 'Nigdy', + 'localModel.usage.mediumLoad': 'Średnie obciążenie', + 'localModel.usage.lowLoad': 'Niskie obciążenie', + 'localModel.usage.idleMode': 'Tryb bezczynności', + 'localModel.rebootstrapComplete': 'Ponowna inicjalizacja modelu zakończona.', + 'localModel.modelsVerified': 'Modele lokalne zweryfikowane.', + 'accounts.addModal.allConnected': 'Wszystkie połączone', + 'accounts.addModal.title': 'Dodaj konto', + 'accounts.respondQueue.empty': 'Pusto', + 'accounts.respondQueue.hide': 'Ukryj kolejkę odpowiedzi', + 'accounts.respondQueue.loadFailed': 'Nie udało się wczytać kolejki odpowiedzi', + 'accounts.respondQueue.loading': 'Wczytywanie kolejki…', + 'accounts.respondQueue.pending': 'Oczekujące', + 'accounts.respondQueue.show': 'Pokaż kolejkę odpowiedzi', + 'accounts.respondQueue.title': 'Kolejka odpowiedzi', + 'accounts.webviewHost.almostReady': 'Już prawie gotowe...', + 'accounts.webviewHost.loadTimeout': 'Limit czasu wczytywania webview', + 'accounts.webviewHost.loading': 'Wczytywanie {providerName}...', + 'accounts.webviewHost.loadingAccount': 'Wczytywanie konta', + 'accounts.webviewHost.restoringSession': 'Przywracanie sesji...', + 'accounts.webviewHost.retryLoading': 'Ponów wczytywanie', + 'accounts.webviewHost.takingLonger': '{providerName} trwa dłużej niż oczekiwano.', + 'accounts.webviewHost.timeoutHint': 'Wskazówka dot. limitu czasu', + 'app.connectionBadge.composio': 'Composio', + 'app.connectionBadge.messaging': 'Wiadomości', + 'app.connectionIndicator.connected': 'Połączono z OpenHuman AI 🚀', + 'app.connectionIndicator.connecting': 'Łączenie', + 'app.connectionIndicator.coreOffline': 'Rdzeń offline', + 'app.connectionIndicator.disconnected': 'Rozłączono', + 'app.connectionIndicator.offline': 'Offline', + 'app.connectionIndicator.reconnecting': 'Ponowne łączenie…', + 'app.errorFallback.componentStack': 'Stos komponentów', + 'app.errorFallback.downloadLatest': 'Pobierz najnowszą wersję', + 'app.errorFallback.heading': 'Coś poszło nie tak', + 'app.errorFallback.hint': 'Wskazówka', + 'app.errorFallback.reloadApp': 'Przeładuj aplikację', + 'app.errorFallback.subheading': 'Spróbuj przeładować lub pobrać najnowszą wersję.', + 'app.errorFallback.tryRecover': 'Spróbuj odzyskać', + 'app.localAiDownload.installing': 'Instalowanie...', + 'app.localAiDownload.preparing': 'Przygotowanie...', + 'app.openhumanLink.accounts.continueWith': 'Kontynuuj z logowaniem {label}', + 'app.openhumanLink.accounts.done': 'Gotowe', + 'app.openhumanLink.accounts.intro': 'Podłącz konta, których używasz na co dzień.', + 'app.openhumanLink.accounts.webviewNote': 'Każde konto otwiera się we własnym oknie webview.', + 'app.openhumanLink.billing.openDashboard': 'Otwórz panel', + 'app.openhumanLink.billing.stayOnTrial': 'Zostań w wersji próbnej', + 'app.openhumanLink.billing.trialCredit': 'Kredyt próbny', + 'app.openhumanLink.billing.trialDesc': + 'Korzystasz z bezpłatnego okresu próbnego. Doładuj, aby kontynuować.', + 'app.openhumanLink.defaultBody': + 'Jeszcze nie gotowe w popupie. Otwórz pełną stronę ustawień, gdy będziesz potrzebować.', + 'app.openhumanLink.discord.intro': + 'Dołącz do społeczności, dziel się opiniami i bądź na bieżąco.', + 'app.openhumanLink.discord.openInvite': 'Otwórz zaproszenie', + 'app.openhumanLink.discord.perk1': 'Pomoc bezpośrednio od twórców', + 'app.openhumanLink.discord.perk2': 'Wczesny dostęp do nowych funkcji', + 'app.openhumanLink.discord.perk3': 'Wymiana skryptów i przepisów', + 'app.openhumanLink.discord.perk4': 'Możliwość wpływu na priorytety', + 'app.openhumanLink.done': 'Gotowe', + 'app.openhumanLink.loadingChannelSetup': 'Wczytywanie konfiguracji kanału', + 'app.openhumanLink.maybeLater': 'Może później', + 'app.openhumanLink.notifications.asking': 'Pytanie systemu operacyjnego…', + 'app.openhumanLink.notifications.blocked': 'Zablokowane', + 'app.openhumanLink.notifications.blockedStep1': 'Otwórz Ustawienia systemowe → Powiadomienia.', + 'app.openhumanLink.notifications.blockedStep2': 'Znajdź OpenHuman na liście aplikacji.', + 'app.openhumanLink.notifications.blockedStep3': 'Włącz „Zezwalaj na powiadomienia” i wróć tutaj.', + 'app.openhumanLink.notifications.intro': + 'Włącz powiadomienia, aby otrzymywać alerty od agenta i kanałów.', + 'app.openhumanLink.notifications.promptHint': 'Twój system zapyta o zgodę za chwilę.', + 'app.openhumanLink.notifications.retry': 'Ponów powiadomienie testowe', + 'app.openhumanLink.notifications.send': 'Wyślij powiadomienie testowe', + 'app.openhumanLink.notifications.sendFailed': 'Nie udało się wysłać: {error}', + 'app.openhumanLink.notifications.sent': + 'Wysłano powiadomienie testowe. Jeśli go nie otrzymałeś(aś), przejdź do Ustawienia systemowe → Powiadomienia → OpenHuman, włącz „Zezwalaj na powiadomienia” i ustaw styl banera na „Trwały”.', + 'app.openhumanLink.skipForNow': 'Pomiń na razie', + 'app.openhumanLink.telegramUnavailable': 'Telegram niedostępny', + 'app.openhumanLink.title.accounts': 'Podłącz swoje aplikacje', + 'app.openhumanLink.title.billing': 'Rozliczenia i kredyty', + 'app.openhumanLink.title.discord': 'Dołącz do społeczności', + 'app.openhumanLink.title.messaging': 'Podłącz kanał komunikacji', + 'app.openhumanLink.title.notifications': 'Zezwól na powiadomienia', + 'app.persistRehydration.body': + 'Trwa odzyskiwanie stanu. Jeśli widzisz ten ekran zbyt długo, zresetuj aplikację.', + 'app.persistRehydration.heading': 'Przywracanie sesji', + 'app.persistRehydration.resetCta': 'Resetowanie…', + 'app.persistRehydration.resetting': 'Resetowanie…', + 'app.routeLoading.initializing': 'Inicjalizacja OpenHuman...', + 'app.update.currentlyOn': '{version}', + 'app.update.errorFallback': 'Coś poszło nie tak podczas aktualizacji.', + 'app.update.header.default': 'Aktualizacja', + 'app.update.header.error': 'Aktualizacja nie powiodła się', + 'app.update.header.installing': 'Instalowanie aktualizacji', + 'app.update.header.readyToInstall': 'Aktualizacja gotowa do instalacji', + 'app.update.header.restarting': 'Restartowanie…', + 'app.update.later': 'Później', + 'app.update.newVersionReady': 'Nowa wersja jest gotowa do instalacji.', + 'app.update.progress.downloaded': 'pobrano {amount}', + 'app.update.progress.installing': 'Instalowanie nowej wersji…', + 'app.update.progress.restarting': 'Uruchamianie aplikacji ponownie…', + 'app.update.progress.working': '{percent}%', + 'app.update.restartNote': 'Restart zamknie wszystkie aktywne sesje czatu i wątki.', + 'app.update.restartNow': 'Zrestartuj teraz', + 'app.update.versionReady': 'Wersja {newVersion} jest gotowa do instalacji.', + 'channels.discord.accountLinked': 'Konto powiązane', + 'channels.discord.connect': 'Połącz', + 'channels.discord.linkTokenExpired': 'Token powiązania wygasł. Spróbuj ponownie.', + 'channels.discord.linkTokenInstruction': '{token}', + 'channels.discord.linkTokenLabel': 'Etykieta tokenu powiązania', + 'channels.discord.linkTokenOnce': 'Token jednorazowego powiązania', + 'channels.discord.picker.allPermissionsOk': 'Bot ma wszystkie wymagane uprawnienia w tym kanale.', + 'channels.discord.picker.botNotInServers': 'Bot nie jest na serwerach', + 'channels.discord.picker.category': 'Kategoria', + 'channels.discord.picker.channel': 'Kanał', + 'channels.discord.picker.checkingPermissions': 'Sprawdzanie uprawnień', + 'channels.discord.picker.loadingChannels': 'Wczytywanie kanałów...', + 'channels.discord.picker.loadingServers': 'Wczytywanie serwerów...', + 'channels.discord.picker.missingPermissions': 'Brakujące uprawnienia', + 'channels.discord.picker.noChannels': 'Nie znaleziono kanałów tekstowych', + 'channels.discord.picker.noServers': 'Nie znaleziono serwerów', + 'channels.discord.picker.selectChannel': 'Wybierz kanał', + 'channels.discord.picker.selectServer': 'Wybierz serwer', + 'channels.discord.picker.server': 'Serwer', + 'channels.discord.picker.serverChannelSelection': 'Wybór serwera i kanału', + 'channels.discord.savedRestartRequired': + 'Kanał zapisany. Zrestartuj aplikację, aby go aktywować.', + 'channels.telegram.connect': 'Połącz', + 'channels.telegram.managedDmConnecting': 'Łączenie zarządzanego DM', + 'channels.telegram.managedDmTimeout': 'Limit czasu zarządzanego DM', + 'channels.telegram.reconnect': 'Połącz ponownie', + 'channels.telegram.savedRestartRequired': + 'Kanał zapisany. Zrestartuj aplikację, aby go aktywować.', + 'channels.web.alwaysAvailable': 'Zawsze dostępny', + 'chat.approval.approve': 'Zatwierdź', + 'chat.approval.alwaysAllow': 'Zawsze zezwalaj', + 'chat.approval.alwaysAllowHint': + 'Przestań pytać o to narzędzie — dodaj je do listy Zawsze zezwalaj', + 'chat.approval.deciding': 'Przetwarzanie…', + 'chat.approval.deny': 'Odrzuć', + 'chat.approval.error': 'Nie udało się zapisać decyzji — spróbuj ponownie.', + 'chat.approval.fallback': 'Agent chce wykonać akcję wymagającą Twojej zgody.', + 'chat.approval.title': 'Wymagana zgoda', + 'chat.approval.tool': 'Narzędzie:', + 'channels.authMode.managed_dm': 'Zaloguj się z OpenHuman', + 'channels.authMode.oauth': 'Logowanie OAuth', + 'channels.authMode.bot_token': 'Użyj własnego tokena bota', + 'channels.authMode.api_key': 'Użyj własnego klucza API', + 'channels.fieldRequired': 'Pole {field} jest wymagane', + 'channels.mcp.title': 'Serwery MCP', + 'channels.mcp.description': + 'Przeglądaj serwery Model Context Protocol i zarządzaj nimi, aby rozszerzyć AI o nowe narzędzia.', + 'channels.discord.displayName': 'Discord', + 'channels.discord.description': 'Wysyłaj i odbieraj wiadomości przez Discord.', + 'channels.discord.authMode.bot_token.description': 'Podaj własny token bota Discord.', + 'channels.discord.authMode.oauth.description': + 'Zainstaluj bota OpenHuman na swoim serwerze Discord przez OAuth.', + 'channels.discord.authMode.managed_dm.description': + 'Powiąż swoje osobiste konto Discord z botem OpenHuman.', + 'channels.discord.fields.bot_token.label': 'Token bota', + 'channels.discord.fields.bot_token.placeholder': 'Twój token bota Discord', + 'channels.discord.fields.guild_id.label': 'ID serwera (gildii)', + 'channels.discord.fields.guild_id.placeholder': 'Opcjonalne: ogranicz do konkretnego serwera', + 'channels.telegram.displayName': 'Telegram', + 'channels.telegram.description': 'Wysyłaj i odbieraj wiadomości przez Telegram.', + 'channels.telegram.authMode.managed_dm.description': + 'Pisz bezpośrednio do bota OpenHuman na Telegramie.', + 'channels.telegram.authMode.bot_token.description': + 'Podaj własny token bota Telegram z @BotFather.', + 'channels.telegram.fields.bot_token.label': 'Token bota', + 'channels.telegram.fields.bot_token.placeholder': '123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11', + 'channels.telegram.fields.allowed_users.label': 'Dozwoleni użytkownicy', + 'channels.telegram.fields.allowed_users.placeholder': + 'Oddzielone przecinkami nazwy użytkowników Telegrama', + 'channels.telegram.remoteControlTitle': 'Sterowanie zdalne (Telegram)', + 'channels.telegram.remoteControlBody': + 'Z dozwolonego czatu Telegram wyślij /status, /sessions, /new lub /help. Trasowanie modelu nadal używa /model i /models.', + 'channels.web.displayName': 'Sieć', + 'channels.web.description': 'Czatuj przez wbudowany interfejs webowy.', + 'channels.web.authMode.managed_dm.description': + 'Użyj wbudowanego czatu webowego — bez konfiguracji.', + 'channels.yuanbao.connect': 'Połącz', + 'channels.yuanbao.connecting': 'Łączenie…', + 'channels.yuanbao.fieldRequired': '{field} jest wymagane', + 'channels.yuanbao.reconnect': 'Połącz ponownie', + 'channels.yuanbao.savedRestartRequired': + 'Kanał zapisany. Zrestartuj aplikację, aby go aktywować.', + 'channels.yuanbao.unexpectedStatus': 'Nieoczekiwany status połączenia: {status}', + 'chat.unsubscribeApproval.approve': 'Zatwierdź i wypisz', + 'chat.unsubscribeApproval.approved': '✓ Pomyślnie wypisano.', + 'chat.unsubscribeApproval.denied': '✕ Żądanie odrzucone.', + 'chat.unsubscribeApproval.deny': 'Odrzuć', + 'chat.unsubscribeApproval.processing': 'Przetwarzanie...', + 'chat.unsubscribeApproval.title': 'Żądanie wypisania', + 'commandPalette.ariaLabel': 'Paleta poleceń', + 'commandPalette.description': 'Opis', + 'commandPalette.label': 'Polecenia', + 'commandPalette.noResults': 'Brak wyników', + 'commandPalette.placeholder': 'Wpisz polecenie lub wyszukaj…', + 'commandPalette.searchAria': 'Szukaj poleceń', + 'commandPalette.shortcutHint': 'Wciśnij ?, aby zobaczyć wszystkie skróty', + 'commandPalette.title': 'Paleta poleceń', + 'kbd.ariaLabel': 'Skrót klawiszowy: {shortcut}', + 'iosMascot.connectedTo': 'Połączono z', + 'iosMascot.defaultPairedLabel': 'Komputer', + 'iosMascot.disconnect': 'Rozłącz', + 'iosMascot.error.generic': 'Coś poszło nie tak. Spróbuj ponownie.', + 'iosMascot.error.sendFailed': 'Nie udało się wysłać. Sprawdź połączenie.', + 'iosMascot.pushToTalk': 'Naciśnij i mów', + 'iosMascot.sendMessage': 'Wyślij wiadomość', + 'iosMascot.thinking': 'Myślę...', + 'iosMascot.typeMessage': 'Napisz wiadomość...', + 'iosPair.connectedLoading': 'Połączono! Ładowanie...', + 'iosPair.connecting': 'Łączenie z komputerem...', + 'iosPair.desktopLabel': 'Komputer', + 'iosPair.error.camera': + 'Skanowanie kamerą nieudane. Sprawdź uprawnienia do kamery i spróbuj ponownie.', + 'iosPair.error.connectionFailed': + 'Połączenie nieudane. Upewnij się, że aplikacja na komputerze działa i spróbuj ponownie.', + 'iosPair.error.invalidQr': + 'Nieprawidłowy kod QR. Upewnij się, że skanujesz kod parowania OpenHuman.', + 'iosPair.error.unreachableDesktop': + 'Nie udało się dotrzeć do komputera. Upewnij się, że oba urządzenia są online i spróbuj ponownie.', + 'iosPair.expired': 'Kod QR wygasł. Poproś komputer o wygenerowanie nowego.', + 'iosPair.instructions': + 'Otwórz OpenHuman na komputerze, przejdź do Ustawienia > Urządzenia i kliknij „Sparuj telefon”, aby pokazać kod QR.', + 'iosPair.retryScan': 'Skanuj ponownie', + 'iosPair.scanQrCode': 'Zeskanuj kod QR', + 'iosPair.scannerOpening': 'Otwieranie skanera...', + 'iosPair.step.openDesktop': 'Otwórz OpenHuman na komputerze', + 'iosPair.step.openSettings': 'Przejdź do Ustawienia > Urządzenia', + 'iosPair.step.showQr': 'Kliknij „Sparuj telefon”, aby pokazać kod QR', + 'iosPair.title': 'Sparuj z komputerem', + 'composio.connect.additionalConfigRequired': 'Wymagana dodatkowa konfiguracja', + 'composio.connect.atlassianSubdomainHint': 'acme', + 'composio.connect.atlassianSubdomainLabel': 'Subdomena Atlassian', + 'composio.connect.connect': 'Połącz', + 'composio.connect.dynamicsOrgNameHint': + 'Na przykład „myorg” dla myorg.crm.dynamics.com. Wprowadź tylko krótką nazwę organizacji, nie pełny URL.', + 'composio.connect.dynamicsOrgNameLabel': 'Nazwa organizacji Dynamics 365', + 'composio.connect.connectionFailed': 'Połączenie nie powiodło się (status: {status}).', + 'composio.connect.disconnectFailed': 'Rozłączenie nie powiodło się: {msg}', + 'composio.connect.disconnecting': 'Rozłączanie…', + 'composio.connect.idleDescription': 'Połącz swoje konto', + 'composio.connect.idleDescriptionSuffix': + '. Otworzymy okno przeglądarki, tam zaakceptujesz dostęp, a ta aplikacja wykryje połączenie automatycznie.', + 'composio.connect.isConnected': 'jest połączone.', + 'composio.connect.manage': 'Zarządzaj', + 'composio.connect.needsFieldsPrefix': 'Aby się połączyć', + 'composio.connect.needsFieldsSuffix': + 'potrzebujemy nieco więcej informacji. Uzupełnij brakujące pola poniżej i spróbuj ponownie.', + 'composio.connect.needsSubdomain': 'Aby się połączyć', + 'composio.connect.needsSubdomainSuffix': + 'wprowadź swoją subdomenę Atlassian (np. acme dla acme.atlassian.net) i spróbuj ponownie.', + 'composio.connect.oauthComplete': 'Czekam na zakończenie OAuth…', + 'composio.connect.oauthTimeout': 'Przekroczono czas oczekiwania na OAuth', + 'composio.connect.permissions': 'Uprawnienia', + 'composio.connect.permissionsDefault': 'Odczyt + zapis włączone domyślnie', + 'composio.connect.permissionsNote': 'może wystawiać', + 'composio.connect.permissionsNoteSuffix': + 'uprawnienia agenta OpenHuman są kontrolowane poniżej przełącznikami odczytu, zapisu i administracji.', + 'composio.connect.reopenBrowser': 'Otwórz przeglądarkę ponownie', + 'composio.connect.requestingUrl': 'Żądanie URL połączenia…', + 'composio.connect.requiredFieldEmpty': 'To pole jest wymagane.', + 'composio.connect.retryConnection': 'Ponów połączenie', + 'composio.connect.scopeLoadError': 'Nie udało się wczytać preferencji uprawnień: {msg}', + 'composio.connect.scopeSaveError': 'Nie udało się zapisać uprawnienia {key}: {msg}', + 'composio.connect.scope.read': 'Odczyt', + 'composio.connect.scope.readHint': 'Pozwól agentowi odczytywać dane z tego połączenia.', + 'composio.connect.scope.write': 'Zapis', + 'composio.connect.scope.writeHint': + 'Pozwól agentowi tworzyć lub modyfikować dane przez to połączenie.', + 'composio.connect.scope.admin': 'Administracja', + 'composio.connect.scope.adminHint': + 'Pozwól agentowi zarządzać ustawieniami, uprawnieniami lub akcjami destrukcyjnymi.', + 'composio.connect.subdomainInvalid': + 'Wprowadź tylko krótką subdomenę (np. „acme”), nie pełny URL. Powinna zawierać tylko litery, cyfry i myślniki.', + 'composio.connect.subdomainRequired': 'Wprowadź subdomenę Atlassian, aby kontynuować.', + 'composio.connect.wabaIdHint': + 'Znajdziesz je przez GET /me/businesses, a następnie GET /{business_id}/owned_whatsapp_business_accounts z tokenem dostępu Meta.', + 'composio.connect.wabaIdLabel': 'ID WhatsApp Business Account', + 'composio.connect.wabaIdRequired': + 'Wprowadź swoje ID WhatsApp Business Account (WABA ID), aby kontynuować.', + 'composio.connect.waitingFor': 'Oczekiwanie na', + 'composio.connect.waitingHint': 'Może to potrwać chwilę.', + 'composio.triggers.heading': 'Wyzwalacze', + 'composio.triggers.listenFrom': 'Nasłuchuj zdarzeń z', + 'composio.triggers.loadError': 'Nie udało się wczytać wyzwalaczy', + 'composio.triggers.needsConfiguration': 'Wymaga konfiguracji', + 'composio.triggers.noneAvailable': 'Brak dostępnych wyzwalaczy dla', + 'conversations.taskKanban.moveLeft': 'Przesuń w lewo', + 'conversations.taskKanban.moveRight': 'Przesuń w prawo', + 'conversations.taskKanban.title': 'Zadania', + 'conversations.taskKanban.approval.default': 'Domyślne', + 'conversations.taskKanban.approval.notRequired': 'Niewymagane', + 'conversations.taskKanban.approval.notRequiredBadge': 'bez zatwierdzenia', + 'conversations.taskKanban.approval.required': 'Wymagane', + 'conversations.taskKanban.approval.requiredBadge': 'zatwierdzenie', + 'conversations.taskKanban.approval.requiredBeforeExecution': 'Wymagane przed wykonaniem', + 'conversations.taskKanban.briefButton': 'Brief zadania', + 'conversations.taskKanban.briefTitle': 'Brief zadania', + 'conversations.taskKanban.closeBrief': 'Zamknij brief zadania', + 'conversations.taskKanban.field.acceptanceCriteria': 'Kryteria akceptacji', + 'conversations.taskKanban.field.allowedTools': 'Dozwolone narzędzia', + 'conversations.taskKanban.field.approval': 'Zatwierdzenie', + 'conversations.taskKanban.field.assignedAgent': 'Przypisany agent', + 'conversations.taskKanban.field.blocker': 'Bloker', + 'conversations.taskKanban.field.evidence': 'Dowody', + 'conversations.taskKanban.field.notes': 'Notatki', + 'conversations.taskKanban.field.objective': 'Cel', + 'conversations.taskKanban.field.plan': 'Plan', + 'conversations.taskKanban.field.status': 'Status', + 'conversations.taskKanban.field.title': 'Tytuł', + 'conversations.taskKanban.saveChanges': 'Zapisz zmiany', + 'conversations.taskKanban.deleteCard': 'Usuń', + 'conversations.taskKanban.updateFailed': + 'Nie udało się zaktualizować zadania; zmian nie zapisano.', + 'conversations.toolTimeline.turn': 'tura', + 'conversations.toolTimeline.workerThread': 'wątek workera', + 'daemon.serviceBlockingGate.body': + 'Rdzeń OpenHuman nie odpowiada. Spróbuj ponownie lub pobierz najnowszą wersję aplikacji.', + 'daemon.serviceBlockingGate.downloadHint': + 'Jeśli problem się powtarza, pobierz najnowszą wersję.', + 'daemon.serviceBlockingGate.downloadLatest': 'Pobierz najnowszą wersję', + 'daemon.serviceBlockingGate.retryCore': 'Ponów rdzeń', + 'daemon.serviceBlockingGate.retryFailed': + 'Ponowna próba się nie powiodła. Pobierz najnowszą wersję aplikacji i spróbuj ponownie.', + 'daemon.serviceBlockingGate.retrying': 'Ponawianie...', + 'daemon.serviceBlockingGate.title': 'Rdzeń OpenHuman jest niedostępny', + 'home.banners.discordSubtitle': 'Pomoc, opinie i wczesny dostęp do funkcji.', + 'home.banners.discordTitle': 'Dołącz do naszego Discorda', + 'home.banners.earlyBirdDismiss': 'Odrzuć baner early bird', + 'home.banners.earlyBirdFirstSub': 'pierwszą subskrypcję.', + 'home.banners.earlyBirdOn': 'Early bird na', + 'home.banners.earlyBirdTitle': 'Pierwszych 1000 użytkowników otrzymuje 60% zniżki.', + 'home.banners.earlyBirdUseCode': 'Użyj kodu early bird', + 'home.banners.getSubscription': 'wykup subskrypcję', + 'home.banners.promoCreditsBody': 'Przetestuj OpenHuman, a gdy będziesz gotowy(a) na więcej,', + 'home.banners.promoCreditsTitle': 'Masz {amount} kredytów promocyjnych.', + 'home.banners.promoCreditsUsage': 'i uzyskaj 10x więcej użycia.', + 'intelligence.memoryChunk.detail.chunk': 'Fragment', + 'intelligence.memoryChunk.detail.copyChunkId': 'Skopiuj ID fragmentu', + 'intelligence.memoryChunk.detail.embeddingInfo': 'bge-m3 1024 wymiarów', + 'intelligence.memoryChunk.detail.noEmbedding': 'Brak embeddingu', + 'intelligence.memoryChunk.letterhead.from': 'od', + 'intelligence.memoryChunk.letterhead.to': 'do', + 'intelligence.memoryChunk.mentioned.chunkOne': '1 fragment', + 'intelligence.memoryChunk.mentioned.chunkOther': '{count} fragmentów', + 'intelligence.memoryChunk.mentioned.heading': 'w z m i a n k o w a n e', + 'intelligence.memoryChunk.scoreBars.ariaScore': '{name} wynik {pct} procent', + 'intelligence.memoryChunk.scoreBars.atThreshold': 'na progu {threshold}', + 'intelligence.memoryChunk.scoreBars.dropped': 'odrzucone', + 'intelligence.memoryChunk.scoreBars.heading': 'd l a c z e g o z a c h o w a n e', + 'intelligence.memoryChunk.scoreBars.kept': 'zachowane', + 'intelligence.diagram.title': 'Diagram architektury', + 'intelligence.diagram.description': + 'Najnowsze lokalne wyjście architektury ze skonfigurowanego punktu końcowego diagramów.', + 'intelligence.diagram.refresh': 'Refresh', + 'intelligence.diagram.refreshAria': 'Odśwież diagram', + 'intelligence.diagram.emptyTitle': 'Brak dostępnego diagramu', + 'intelligence.diagram.emptyDescription': + 'Wygeneruj diagram architektury z orkiestratora, a ten panel odświeży się ze skonfigurowanego lokalnego punktu końcowego.', + 'intelligence.diagram.skillInstallCommand': 'npx skills add yizhiyanhua-ai/fireworks-tech-graph', + 'intelligence.diagram.promptExample': + 'Wygeneruj diagram architektury bieżącego roju w ciemnym stylu terminala', + 'intelligence.diagram.imageAlt': 'Najnowszy wygenerowany diagram architektury OpenHuman', + 'intelligence.diagram.refreshesEvery': 'Odświeża co {seconds}s', + 'intelligence.memoryText.entityTypePrefix': 'Typ encji', + 'intelligence.screenDebug.active': 'Aktywne', + 'intelligence.screenDebug.app': 'Aplikacja', + 'intelligence.screenDebug.bounds': 'Granice', + 'intelligence.screenDebug.captureAlt': 'Wynik testu przechwytywania', + 'intelligence.screenDebug.captureFailed': 'Niepowodzenie', + 'intelligence.screenDebug.captureSuccess': 'Powodzenie', + 'intelligence.screenDebug.captureTest': 'Test przechwytywania', + 'intelligence.screenDebug.capturing': 'Przechwytywanie', + 'intelligence.screenDebug.frames': 'Klatki', + 'intelligence.screenDebug.idle': 'Bezczynne', + 'intelligence.screenDebug.lastApp': 'Ostatnia aplikacja', + 'intelligence.screenDebug.mode': 'Tryb', + 'intelligence.screenDebug.permAccessibility': 'Uprawnienie: dostępność', + 'intelligence.screenDebug.permInput': 'Uprawnienie: wejście', + 'intelligence.screenDebug.permScreen': 'Dostępność', + 'intelligence.screenDebug.permissions': 'Uprawnienia', + 'intelligence.screenDebug.platformNotSupported': 'Platforma nieobsługiwana', + 'intelligence.screenDebug.recentVisionSummaries': 'Ostatnie podsumowania wizji', + 'intelligence.screenDebug.session': 'Sesja', + 'intelligence.screenDebug.size': 'Rozmiar', + 'intelligence.screenDebug.status': 'Stan', + 'intelligence.screenDebug.testCapture': 'Testuj przechwytywanie', + 'intelligence.screenDebug.time': 'Czas', + 'intelligence.screenDebug.title': 'Tytuł', + 'intelligence.screenDebug.unknown': 'Nieznane', + 'intelligence.screenDebug.visionQueue': 'Kolejka wizji', + 'intelligence.screenDebug.visionState': 'Stan wizji', + 'intelligence.tasks.activeBoardOne': '1 aktywna tablica w rozmowach', + 'intelligence.tasks.activeBoardOther': '{count} aktywnych tablic w rozmowach', + 'intelligence.tasks.empty': 'Brak tablic zadań agenta', + 'intelligence.tasks.emptyHint': 'Tablice pojawią się tutaj po rozpoczęciu pracy z agentem.', + 'intelligence.tasks.failedToLoad': 'Nie udało się wczytać', + 'intelligence.tasks.live': 'na żywo', + 'intelligence.tasks.loadingBoards': 'Wczytywanie tablic zadań…', + 'intelligence.tasks.threadPrefix': 'Wątek {thread}', + 'intelligence.tasks.subtitle': + 'Twoje zadania i tablice zadań agentów w całej przestrzeni roboczej.', + 'intelligence.tasks.newTask': 'Nowe zadanie', + 'intelligence.tasks.personalBoardTitle': 'Zadania agenta', + 'intelligence.tasks.personalEmpty': 'Brak zadań osobistych', + 'intelligence.tasks.composer.title': 'Nowe zadanie', + 'intelligence.tasks.composer.titleLabel': 'Tytuł', + 'intelligence.tasks.composer.titlePlaceholder': 'Co trzeba zrobić?', + 'intelligence.tasks.composer.statusLabel': 'Status', + 'intelligence.tasks.composer.attachLabel': 'Dołącz do rozmowy', + 'intelligence.tasks.composer.attachNone': 'Osobiste (bez rozmowy)', + 'intelligence.tasks.composer.objectiveLabel': 'Cel', + 'intelligence.tasks.composer.objectivePlaceholder': 'Opcjonalnie — oczekiwany wynik', + 'intelligence.tasks.composer.notesLabel': 'Notatki', + 'intelligence.tasks.composer.notesPlaceholder': 'Opcjonalne notatki', + 'intelligence.tasks.composer.create': 'Utwórz zadanie', + 'intelligence.tasks.composer.creating': 'Tworzenie…', + 'intelligence.tasks.composer.createFailed': 'Nie udało się utworzyć zadania', + 'notifications.card.dismiss': 'Odrzuć powiadomienie', + 'notifications.card.importanceTitle': 'Ważność: {pct}%', + 'notifications.center.empty': 'Brak powiadomień', + 'notifications.center.emptyHint': 'Nowe powiadomienia pojawią się tutaj.', + 'notifications.center.filterAll': 'Wszystkie', + 'notifications.center.markAllRead': 'Oznacz wszystkie jako przeczytane', + 'notifications.center.title': 'Powiadomienia', + 'oauth.button.connecting': 'Łączenie...', + 'oauth.button.loopbackTimeout': + 'Logowanie przekroczyło limit czasu — przeglądarka nie ukończyła przekierowania OAuth. Spróbuj ponownie.', + 'oauth.login.continueWith': 'Kontynuuj z', + 'onboarding.contextGathering.buildingDesc': + 'Analizujemy Twój kontekst, aby spersonalizować pierwsze rozmowy.', + 'onboarding.contextGathering.buildingProfile': 'Budowanie Twojego profilu...', + 'onboarding.contextGathering.continueToChat': 'Przejdź do czatu', + 'onboarding.contextGathering.coreAlive': + 'Rdzeń jest osiągalny — pierwsze uruchomienie może potrwać minutę.', + 'onboarding.contextGathering.coreAliveProbing': 'Sprawdzanie połączenia z rdzeniem…', + 'onboarding.contextGathering.coreUnreachable': + 'Rdzeń nie odpowiada. Możesz kontynuować i spróbować ponownie później.', + 'onboarding.contextGathering.errorDesc': + 'Twój czat jest gotowy. Będziemy nadal budować pełny profil w tle, więc możesz już teraz kontynuować i dopracowywać go z czasem.', + 'onboarding.contextGathering.stillWorkingDesc': + 'Pierwsze uruchomienie może potrwać 30–60 sekund podczas rozgrzewania lokalnego modelu i narzędzi. Możesz przejść do czatu w każdej chwili — budowa profilu działa w tle.', + 'onboarding.contextGathering.stillWorkingTitle': 'Trwa praca nad Twoim profilem…', + 'onboarding.contextGathering.title': 'Zbieranie kontekstu', + 'openhuman.team_list_teams': 'Lista zespołów', + 'overlay.ariaAttention': 'Wiadomość uwagi', + 'overlay.ariaCompanion': 'Companion aktywny', + 'overlay.ariaOrb': 'Nakładka OpenHuman', + 'overlay.ariaVoiceActive': 'Wejście głosowe aktywne', + 'overlay.companion.error': 'Błąd', + 'overlay.companion.listening': 'Słucham…', + 'overlay.companion.pointing': 'Wskazuję…', + 'overlay.companion.speaking': 'Mówię…', + 'overlay.companion.thinking': 'Myślę…', + 'overlay.orbTitle': 'Przeciągnij, aby przesunąć · Kliknij dwukrotnie, aby zresetować pozycję', + 'pages.settings.account.connections': 'Połączenia', + 'pages.settings.account.connectionsDesc': 'Przeglądaj i zarządzaj połączeniami kont', + 'pages.settings.account.migration': 'Importuj z innego asystenta', + 'pages.settings.account.migrationDesc': + 'Przenieś pamięć i notatki z OpenClaw (a wkrótce również Hermes) do tej przestrzeni roboczej.', + 'pages.settings.account.privacy': 'Prywatność', + 'pages.settings.account.privacyDesc': + 'Zarządzaj udostępnianiem danych i anonimowymi preferencjami użycia', + 'pages.settings.account.recoveryPhrase': 'Fraza odzyskiwania', + 'pages.settings.account.recoveryPhraseDesc': + 'Zarządzaj swoją frazą odzyskiwania BIP39 do szyfrowania i dostępu do portfela', + 'pages.settings.account.team': 'Zespół', + 'pages.settings.account.teamDesc': 'Zarządzaj zespołem, członkami i zaproszeniami', + 'pages.settings.accountSection.description': + 'Fraza odzyskiwania, zespół, połączenia i ustawienia prywatności.', + 'pages.settings.accountSection.title': 'Konto', + 'pages.settings.ai.llm': 'LLM', + 'pages.settings.ai.llmDesc': 'Dostawcy modeli językowych i trasowanie', + 'pages.settings.ai.voice': 'Głos', + 'pages.settings.ai.voiceDesc': 'Konfiguracja STT i TTS dla rozmów głosowych', + 'pages.settings.aiSection.description': + 'Dostawcy modeli językowych, lokalna Ollama i głos (STT / TTS).', + 'pages.settings.aiSection.title': 'AI', + 'pages.settings.composioSection.title': 'Composio', + 'pages.settings.composioSection.description': + 'Trasowanie, wyzwalacze i historia integracji obsługiwanych przez Composio.', + 'settings.developerMenu.composio.title': 'Composio', + 'settings.developerMenu.composio.desc': + 'Tryb trasowania, wyzwalacze integracji i archiwum historii wyzwalaczy.', + 'pages.settings.features.desktopCompanion': 'Towarzysz pulpitu', + 'pages.settings.features.desktopCompanionDesc': + 'Asystent głosowy ze świadomością ekranu — słucha, widzi, mówi, wskazuje', + 'pages.settings.features.messagingChannels': 'Kanały komunikacji', + 'pages.settings.features.messagingChannelsDesc': + 'Konfiguruj kanały takie jak Telegram, Discord i Slack', + 'pages.settings.features.notifications': 'Powiadomienia', + 'pages.settings.features.notificationsDesc': + 'Steruj alertami systemowymi i kategoriami powiadomień', + 'pages.settings.features.screenAwareness': 'Świadomość ekranu', + 'pages.settings.features.screenAwarenessDesc': + 'Uprawnienia, monitorowanie i sesje przechwytywania ekranu', + 'pages.settings.features.tools': 'Narzędzia', + 'pages.settings.features.toolsDesc': 'Wybierz, z jakich możliwości OpenHuman może korzystać', + 'pages.settings.featuresSection.description': 'Świadomość ekranu, komunikacja i narzędzia.', + 'pages.settings.featuresSection.title': 'Funkcje', + 'privacy.dataKind.credentials': 'Poświadczenia', + 'privacy.dataKind.derived': 'Wyprowadzone', + 'privacy.dataKind.diagnostics': 'Diagnostyka', + 'privacy.dataKind.metadata': 'Metadane', + 'privacy.dataKind.raw': 'Surowe', + 'privacy.whatLeaves.link.label': 'Co opuszcza mój komputer?', + 'rewards.community.achievementsUnlocked': 'Odblokowano {unlocked} z {total} osiągnięć', + 'rewards.community.connectDiscord': 'Połącz Discord', + 'rewards.community.cumulativeTokens': 'Łączna liczba tokenów', + 'rewards.community.currentStreak': 'Aktualna seria', + 'rewards.community.discordLinkedNotInGuild': 'Powiązane, ale nie na serwerze', + 'rewards.community.discordMember': 'Dołączono do serwera', + 'rewards.community.discordNotLinked': 'Nie powiązane', + 'rewards.community.discordServer': 'Serwer Discord', + 'rewards.community.discordStatusUnavailable': 'Status członkostwa niedostępny', + 'rewards.community.discordWaiting': 'Oczekiwanie na synchronizację z backendem', + 'rewards.community.heroSubtitle': + 'Odblokuj ekskluzywne kanały, odznaki wspierających i nagrody synchronizowane z backendem, łącząc swoje konto Discord.', + 'rewards.community.heroTitle': 'Zdobywaj nagrody i role na Discordzie', + 'rewards.community.joinDiscord': 'Dołącz do Discorda', + 'rewards.community.loadingRewards': 'Wczytywanie nagród…', + 'rewards.community.locked': 'Zablokowane', + 'rewards.community.retrying': 'Ponawianie…', + 'rewards.community.rolesAndRewards': 'Role i nagrody', + 'rewards.community.streakDays': '{n} dni', + 'rewards.community.syncPending': 'Synchronizacja nagród w toku', + 'rewards.community.syncPendingDesc': + 'Trwa synchronizacja Twoich nagród. Spróbuj ponownie za chwilę.', + 'rewards.community.syncUnavailable': 'Synchronizacja niedostępna', + 'rewards.community.tryAgain': 'Ponawianie…', + 'rewards.community.unknown': 'Nieznane', + 'rewards.community.unlocked': 'Odblokowane', + 'rewards.community.yourProgress': 'Twój postęp', + 'rewards.coupon.colCode': 'Kod', + 'rewards.coupon.colRedeemed': 'Zrealizowano', + 'rewards.coupon.colReward': 'Nagroda', + 'rewards.coupon.colStatus': 'Status', + 'rewards.coupon.loadingHistory': 'Wczytywanie historii nagród…', + 'rewards.coupon.noCodes': 'Nie zrealizowano jeszcze żadnych kodów.', + 'rewards.coupon.pending': 'Oczekujące', + 'rewards.coupon.placeholder': 'Kod kuponu', + 'rewards.coupon.promoCredits': 'Kredyty promocyjne', + 'rewards.coupon.recentRedemptions': 'Ostatnie realizacje', + 'rewards.coupon.redeemAccepted': + '{code} zaakceptowany. {amount} zostanie odblokowane po wykonaniu wymaganej akcji.', + 'rewards.coupon.redeemButton': 'Zrealizuj kod', + 'rewards.coupon.redeemSuccess': '{code} zrealizowany. {amount} dodano do Twoich kredytów.', + 'rewards.coupon.redeemedCodes': 'Zrealizowane kody', + 'rewards.coupon.redeeming': 'Realizacja...', + 'rewards.coupon.statusApplied': 'Zastosowano', + 'rewards.coupon.statusPendingAction': 'Oczekuje na akcję', + 'rewards.coupon.statusRedeemed': 'Zrealizowano', + 'rewards.coupon.subtitle': 'Wprowadź kod, aby otrzymać kredyty promocyjne.', + 'rewards.coupon.title': 'Zrealizuj kod kuponu', + 'rewards.referralSection.activity': 'Aktywność poleceń', + 'rewards.referralSection.apply': 'Stosowanie…', + 'rewards.referralSection.applying': 'Stosowanie…', + 'rewards.referralSection.colReferredUser': 'Polecony użytkownik', + 'rewards.referralSection.colReward': 'Nagroda', + 'rewards.referralSection.colStatus': 'Status', + 'rewards.referralSection.colUpdated': 'Zaktualizowano', + 'rewards.referralSection.completed': 'Zakończone', + 'rewards.referralSection.copyCode': 'Kopiuj kod', + 'rewards.referralSection.copyFailed': 'Kopiowanie nie powiodło się', + 'rewards.referralSection.haveCode': 'Masz kod polecający?', + 'rewards.referralSection.haveCodeDesc': + 'Wprowadź kod, który otrzymałeś(aś) od znajomego, aby uzyskać bonus.', + 'rewards.referralSection.linked': 'Powiązane', + 'rewards.referralSection.linkedCode': '(kod {code})', + 'rewards.referralSection.loading': 'Wczytywanie programu poleceń…', + 'rewards.referralSection.retry': 'Ponów', + 'rewards.referralSection.noReferrals': 'Brak poleceń', + 'rewards.referralSection.pendingReferrals': 'Oczekujące polecenia', + 'rewards.referralSection.placeholder': 'Kod polecający', + 'rewards.referralSection.share': 'Udostępnij', + 'rewards.referralSection.statusCompleted': 'Zakończone', + 'rewards.referralSection.statusExpired': 'Wygasłe', + 'rewards.referralSection.statusJoined': 'Dołączył(a)', + 'rewards.referralSection.subtitle': 'Zaproś znajomych do OpenHuman i zarabiajcie kredyty razem.', + 'rewards.referralSection.title': 'Zapraszaj znajomych, zarabiaj kredyty', + 'rewards.referralSection.totalEarned': 'Łącznie zarobione', + 'rewards.referralSection.yourCode': 'Twój kod', + 'settings.ai.addCloudProvider': 'Dodaj dostawcę chmurowego', + 'settings.ai.addProvider': 'Zapisywanie…', + 'settings.ai.apiKeyFieldLabel': 'Klucz API', + 'settings.ai.apiKeyRequired': 'Wklej swój klucz API, aby kontynuować.', + 'settings.ai.apiKeyStoredEncrypted': 'Klucz API przechowywany w postaci zaszyfrowanej', + 'settings.ai.apiKeysEncrypted': 'auth-profiles.json', + 'settings.ai.clearStoredKey': 'Wyczyść zapisany klucz', + 'settings.ai.connectProvider': 'Połącz dostawcę', + 'settings.ai.customRouting': 'Własne trasowanie', + 'settings.ai.defaultResolvesTo': 'OpenHuman', + 'settings.ai.discard': 'Odrzuć', + 'settings.ai.editProvider': 'Edytuj dostawcę', + 'settings.ai.llmProviders': 'Dostawcy LLM', + 'settings.ai.llmProvidersDesc': 'Skonfiguruj dostawców chmurowych i lokalnych modeli językowych.', + 'settings.ai.localOllama': 'Lokalny (Ollama)', + 'settings.ai.modelLabel': 'Model', + 'settings.ai.noCustomProviders': 'Brak własnych dostawców', + 'settings.ai.openAiCompat.authHeaderExample': 'Authorization: Bearer ', + 'settings.ai.openAiCompat.authHeaderLabel': 'Nagłówek uwierzytelniania', + 'settings.ai.openAiCompat.baseUrlLabel': 'Bazowy URL', + 'settings.ai.openAiCompat.baseUrlUnavailable': 'Niedostępny', + 'settings.ai.openAiCompat.clearKey': 'Wyczyść klucz', + 'settings.ai.openAiCompat.description': + 'Skieruj lokalne harnesy do tego serwera /v1, aby kierować ruch przez dostawców skonfigurowanych poniżej. Uwierzytelnianie używa stabilnego klucza ustawionego tutaj, nie wewnętrznego tokenu rdzenia aplikacji.', + 'settings.ai.openAiCompat.keyConfigured': 'Klucz skonfigurowany', + 'settings.ai.openAiCompat.keyRequired': 'Klucz wymagany', + 'settings.ai.openAiCompat.rotateKey': 'Rotuj klucz', + 'settings.ai.openAiCompat.setKey': 'Ustaw klucz', + 'settings.ai.openAiCompat.title': 'Endpoint kompatybilny z OpenAI', + 'settings.ai.providerLabel': 'Dostawca', + 'skills.mcpComingSoon.title': 'Serwery MCP', + 'skills.mcpComingSoon.description': + 'Zarządzanie serwerami MCP pojawi się wkrótce. Ta zakładka będzie służyć do wyszukiwania, łączenia i monitorowania integracji z serwerami MCP.', + 'settings.ai.routing': 'Trasowanie', + 'settings.ai.routingCustom': 'Własne trasowanie', + 'settings.ai.routingDefault': 'Domyślne', + 'settings.ai.routingDesc': + 'Wybierz, którzy dostawcy obsługują które workloady (czat, tło, embeddingi).', + 'settings.ai.saveChanges': 'Zapisywanie…', + 'settings.ai.saving': 'Zapisywanie…', + 'settings.ai.unsavedChange': 'niezapisana zmiana', + 'settings.ai.unsavedChanges': 'niezapisane zmiany', + 'settings.ai.workloadGroupBackground': 'Grupa workloadów: tło', + 'settings.ai.workloadGroupChat': 'Grupa workloadów: czat', + 'settings.ai.disconnectProvider': 'Rozłącz {label}', + 'settings.ai.connectProviderLabel': 'Połącz {label}', + 'settings.ai.defaultLocalEndpoint': 'http://localhost:11434/v1', + 'settings.ai.endpointUrlLabel': 'URL endpointu', + 'settings.ai.localRuntimeHelper': + 'Miejsce, w którym dostępny jest {label}. Domyślnie jest to localhost; wskaż zdalny host (na przykład http://10.0.0.4:11434/v1), aby użyć współdzielonej instancji.', + 'settings.ai.endpointUrlRequired': 'URL endpointu jest wymagany.', + 'settings.ai.endpointProtocolRequired': 'Endpoint musi zaczynać się od http:// lub https://.', + 'settings.ai.connectProviderDialog': 'Połącz {label}', + 'settings.ai.or': 'lub', + 'settings.ai.openRouterOauthDescription': + 'Zaloguj się przez OpenRouter i zaimportuj kontrolowany przez użytkownika klucz API z użyciem PKCE.', + 'settings.ai.connecting': 'Łączenie...', + 'settings.ai.backgroundLoops': 'Pętle w tle', + 'settings.ai.backgroundLoopsDesc': + 'Zobacz, co działa bez wiadomości na czacie, wstrzymaj pracę heartbeat i sprawdź ostatnie wiersze księgi kredytów.', + 'settings.ai.heartbeatControls': 'Sterowanie heartbeat', + 'settings.ai.heartbeatControlsDesc': + 'Domyślnie wyłączone. Włączenie uruchamia pętlę; wyłączenie przerywa działające zadanie.', + 'settings.ai.heartbeatLoop': 'Pętla heartbeat', + 'settings.ai.heartbeatLoopDesc': + 'Główny harmonogram dla planera i opcjonalnej inferencji podświadomości.', + 'settings.ai.subconsciousInference': 'Inferencja podświadomości', + 'settings.ai.subconsciousInferenceDesc': + 'Uruchamia opartą na modelu ocenę zadań i refleksji podczas taktów heartbeat.', + 'settings.ai.calendarMeetingChecks': 'Sprawdzanie spotkań w kalendarzu', + 'settings.ai.calendarMeetingChecksDesc': + 'Wywołuje listę wydarzeń kalendarza dla aktywnych połączeń Google Calendar.', + 'settings.ai.calendarCap': 'Limit kalendarza', + 'settings.ai.connectionsPerTick': '{count} poł./takt', + 'settings.ai.meetingLookahead': 'Wyprzedzenie spotkań', + 'settings.ai.minutesShort': '{count} min', + 'settings.ai.reminderLookahead': 'Wyprzedzenie przypomnień', + 'settings.ai.cronReminderChecks': 'Sprawdzanie przypomnień cron', + 'settings.ai.cronReminderChecksDesc': + 'Skanuje włączone zadania cron pod kątem zbliżających się elementów podobnych do przypomnień.', + 'settings.ai.relevantNotificationChecks': 'Sprawdzanie istotnych powiadomień', + 'settings.ai.relevantNotificationChecksDesc': + 'Promuje pilne powiadomienia lokalne do proaktywnych alertów.', + 'settings.ai.externalDelivery': 'Dostarczanie zewnętrzne', + 'settings.ai.externalDeliveryDesc': + 'Pozwala alertom heartbeat wysyłać proaktywne wiadomości do kanałów zewnętrznych.', + 'settings.ai.interval': 'Interwał', + 'settings.ai.running': 'Działa...', + 'settings.ai.plannerTickNow': 'Takt planera teraz', + 'settings.ai.loadingHeartbeatControls': 'Ładowanie sterowania heartbeat...', + 'settings.ai.heartbeatControlsUnavailable': 'Sterowanie heartbeat jest niedostępne.', + 'settings.ai.loopMap': 'Mapa pętli', + 'settings.ai.plannerSummary': + 'Planner: {sourceEvents} zdarzeń źródłowych, {sent} wysłanych, {deduped} zdeduplikowanych.', + 'settings.ai.routeLabel': 'trasa: {route}', + 'settings.ai.on': 'wł.', + 'settings.ai.off': 'wył.', + 'settings.ai.recentUsageLedger': 'Ostatnia księga zużycia', + 'settings.ai.recentUsageLedgerDesc': + 'Wiersze backendu pokazują dzisiejszą akcję i czas; tagi źródła wymagają obsługi backendu.', + 'settings.ai.latestSpend': 'Ostatni wydatek: {amount} o {time} ({action})', + 'settings.ai.topActions': 'Najczęstsze akcje', + 'settings.ai.noSpendRows': 'Brak załadowanych wierszy wydatków.', + 'settings.ai.topHours': 'Najczęstsze godziny', + 'settings.ai.noHourlySpend': 'Brak wydatków godzinowych.', + 'settings.ai.openhumanDefault': 'OpenHuman (domyślny)', + 'settings.ai.localModelResolved': 'Ollama · {model}', + 'settings.ai.customRoutingForWorkload': 'Niestandardowy routing dla {label}', + 'settings.ai.loadingModels': 'Ładowanie modeli...', + 'settings.ai.enterModelIdManually': 'lub wpisz ID modelu ręcznie:', + 'settings.ai.modelIdPlaceholderForProvider': 'ID modelu {slug}', + 'settings.ai.modelIdPlaceholder': 'model-id', + 'settings.ai.selectModel': 'Wybierz model...', + 'settings.ai.temperatureOverride': 'Nadpisanie temperatury', + 'settings.ai.temperatureOverrideSlider': 'Nadpisanie temperatury (suwak)', + 'settings.ai.temperatureOverrideValue': 'Nadpisanie temperatury (wartość)', + 'settings.ai.temperatureOverrideDesc': + 'Niższa = bardziej deterministyczna. Pozostaw niezaznaczone, aby użyć domyślnej wartości dostawcy.', + 'settings.ai.testFailed': 'Test nie powiódł się', + 'settings.ai.testingModel': 'Testowanie modelu...', + 'settings.ai.modelResponse': 'Odpowiedź modelu', + 'settings.ai.providerWithValue': 'Dostawca: {value}', + 'settings.ai.noneDash': '—', + 'settings.ai.promptHelloWorld': 'Prompt: Witaj świecie', + 'settings.ai.startedAt': 'Uruchomiono: {value}', + 'settings.ai.waitingForModelResponse': 'Oczekiwanie na odpowiedź wybranego modelu...', + 'settings.ai.response': 'Odpowiedź', + 'settings.ai.testing': 'Testowanie...', + 'settings.ai.test': 'Testuj', + 'settings.ai.slugMissingError': 'Wpisz nazwę dostawcy, aby wygenerować slug.', + 'settings.ai.slugInUseError': 'Ta nazwa dostawcy jest już używana.', + 'settings.ai.slugReservedError': 'Wybierz inną nazwę dostawcy.', + 'settings.ai.providerNamePlaceholder': 'Mój dostawca', + 'settings.ai.slugLabel': 'Slug identyfikatora:', + 'settings.ai.openAiUrlLabel': 'URL OpenAI', + 'settings.ai.openAiUrlPlaceholder': 'https://api.openai.com/v1', + 'settings.ai.keepExistingKeyPlaceholder': 'Pozostaw puste, aby zachować istniejący klucz', + 'settings.ai.reindexingMemory': 'Ponowne indeksowanie pamięci', + 'settings.ai.reindexingMemoryMessage': + 'Embeddingi są przetwarzane ponownie. Elementy pamięci ({pending}) są ponownie embeddingowane w ramach bieżącego modelu — semantyczne przywoływanie jest ograniczone do czasu zakończenia. Wyszukiwanie słów kluczowych nadal działa, a ponowne embeddingowanie będzie kontynuowane w tle, jeśli zamkniesz ten widok.', + 'settings.ai.signInWithOpenRouter': 'Zaloguj się z OpenRouter', + 'settings.ai.weekBudget': 'Budżet tygodniowy', + 'settings.ai.cycleRemaining': 'Pozostało w cyklu', + 'settings.ai.cycleTotalSpend': 'Łączne wydatki w cyklu', + 'settings.ai.avgSpendRow': 'Średni wiersz wydatków', + 'settings.ai.backgroundApiReads': 'Odczyty API w tle', + 'settings.ai.backgroundWakeups': 'Wybudzenia w tle', + 'settings.ai.budgetMath': 'Obliczenia budżetu', + 'settings.ai.rowsLeft': 'Pozostałe wiersze', + 'settings.ai.rowsPerFullWeekBudget': 'Wiersze na pełny budżet tygodniowy', + 'settings.ai.sampleBurnRate': 'Przykładowe tempo zużycia', + 'settings.ai.projectedEmpty': 'Prognozowane wyczerpanie', + 'settings.ai.apiReadsPerDollarRemaining': 'Pozostałe odczyty API na $', + 'settings.ai.loopCallBudget': 'Budżet wywołań pętli', + 'settings.ai.heartbeatTicks': 'Takty heartbeat', + 'settings.ai.calendarPlannerCalls': 'Wywołania planera kalendarza', + 'settings.ai.calendarFanoutCap': 'Limit rozsyłania kalendarza', + 'settings.ai.subconsciousModelCalls': 'Wywołania modelu podświadomości', + 'settings.ai.composioSyncScans': 'Skanowania synchronizacji Composio', + 'settings.ai.totalBackgroundApiReadBudget': 'Łączny budżet odczytów API w tle', + 'settings.ai.memoryWorkerPolls': 'Odpytywania procesu pamięci', + 'settings.ai.defaultProviderName': 'OpenHuman', + 'settings.ai.routing.managed': 'Zarządzane', + 'settings.ai.routing.managedDesc': + 'OpenHuman uruchomi całą inferencję w chmurze, wybierze najlepszy model dla zadania, zoptymalizuje koszty i zachowa najbezpieczniejsze domyślne ustawienia routingu.', + 'settings.ai.routing.managedMsg': + 'OpenHuman obsłuży całą inferencję dla każdego obciążenia i automatycznie wybierze najlepszą ścieżkę pod kątem kosztu, jakości i bezpieczeństwa.', + 'settings.ai.routing.useYourOwn': 'Użyj własnych modeli', + 'settings.ai.routing.useYourOwnDesc': + 'Wybierz jednego dostawcę i model, a następnie kieruj każde obciążenie przez niego. To proste, ale może być nieefektywne, ponieważ lekka i ciężka inferencja współdzielą tę samą ścieżkę.', + 'settings.ai.routing.advanced': 'Zaawansowane', + 'settings.ai.routing.advancedDesc': + 'Wybierz różne modele dla różnych zadań. To najlepsza opcja dla ścisłej optymalizacji kosztów i największej kontroli.', + 'settings.ai.routing.customDesc': + 'Precyzyjny routing zapewnia najlepszą optymalizację kosztów i największą kontrolę. Użyj poniższych wierszy, aby zdecydować, które obciążenia pozostają zarządzane, które używają wspólnej domyślnej ścieżki, a które są przypięte do konkretnego modelu.', + 'settings.ai.routing.chatAndConversations': 'Czat i rozmowy', + 'settings.ai.routing.chatDesc': + 'Modele używane podczas bezpośredniej interakcji z użytkownikiem, odpowiedzi, rozumowania, pętli agentów i pomocy w kodowaniu.', + 'settings.ai.routing.backgroundTasks': 'Zadania w tle', + 'settings.ai.routing.bgTasksDesc': + 'Modele używane poza głównym przepływem rozmowy do podsumowań, heartbeat, uczenia i oceny podświadomości.', + 'settings.ai.routing.addCustomProvider': 'Dodaj własnego dostawcę', + 'settings.ai.globalModel.title': 'Wybierz jeden model do wszystkiego', + 'settings.ai.globalModel.desc': + 'To kieruje całą inferencję przez jeden model. Jest prostsze, ale może być nieefektywne pod kątem kosztu i jakości, ponieważ lekkie i ciężkie zadania użyją tej samej ścieżki.', + 'settings.ai.globalModel.noProviders': + 'Najpierw dodaj lub połącz dostawcę. Potem możesz tutaj kierować każde obciążenie przez jeden model.', + 'settings.ai.globalModel.provider': 'Dostawca', + 'settings.ai.globalModel.model': 'Model AI', + 'settings.ai.globalModel.loadingModels': 'Ładowanie modeli…', + 'settings.ai.globalModel.enterModelId': 'Wpisz ID modelu', + 'settings.ai.globalModel.appliesToAll': + 'Stosuje tego samego dostawcę i model do czatu, rozumowania, kodowania, pamięci, heartbeat, uczenia i podświadomości. Embeddingi są konfigurowane osobno. Zmiany zapiszą się po kliknięciu zapisz.', + 'settings.ai.globalModel.saving': 'Zapisywanie…', + 'settings.ai.globalModel.saved': 'Zapisano', + 'settings.ai.workload.noModel': 'Nie wybrano modelu', + 'settings.ai.workload.changeModel': 'Zmień model', + 'settings.ai.workload.chooseModel': 'Wybierz model', + 'settings.ai.provider.ollama': 'Ollama', + 'settings.autocomplete.appFilter.acceptSuggestion': 'Akceptuj sugestię', + 'settings.autocomplete.appFilter.app': 'Aplikacja', + 'settings.autocomplete.appFilter.currentSuggestion': 'Bieżąca sugestia', + 'settings.autocomplete.appFilter.contextOverride': 'Nadpisanie kontekstu (opcjonalne)', + 'settings.autocomplete.appFilter.debounce': 'Opóźnienie', + 'settings.autocomplete.appFilter.debugFocus': 'Debug fokusa', + 'settings.autocomplete.appFilter.enabled': 'Włączone', + 'settings.autocomplete.appFilter.getSuggestion': 'Pobierz sugestię', + 'settings.autocomplete.appFilter.lastError': 'Ostatni błąd', + 'settings.autocomplete.appFilter.liveLogs': 'Dziennik na żywo', + 'settings.autocomplete.appFilter.model': 'Model', + 'settings.autocomplete.appFilter.noLogs': ') :', + 'settings.autocomplete.appFilter.phase': 'Faza', + 'settings.autocomplete.appFilter.platformSupported': 'Platforma obsługiwana', + 'settings.autocomplete.appFilter.refreshStatus': 'Odświeżanie…', + 'settings.autocomplete.appFilter.refreshing': 'Odświeżanie…', + 'settings.autocomplete.appFilter.running': 'Działa', + 'settings.autocomplete.appFilter.runtime': 'Środowisko', + 'settings.autocomplete.appFilter.test': 'Testuj', + 'settings.autocomplete.completionStyle.acceptedCompletion': + 'Zapisano {count} zaakceptowane uzupełnienie — używane do personalizacji przyszłych sugestii.', + 'settings.autocomplete.completionStyle.acceptedCompletions': + 'Zapisano {count} zaakceptowanych uzupełnień — używane do personalizacji przyszłych sugestii.', + 'settings.autocomplete.completionStyle.clearHistory': 'Czyszczenie…', + 'settings.autocomplete.completionStyle.clearing': 'Czyszczenie…', + 'settings.autocomplete.completionStyle.debounce': 'Opóźnienie debounce (ms)', + 'settings.autocomplete.completionStyle.enabled': 'Włączone', + 'settings.autocomplete.completionStyle.maxChars': 'Maks. znaków', + 'settings.autocomplete.completionStyle.noHistory': + 'Brak zaakceptowanych uzupełnień. Akceptuj sugestie Tabem, aby rozpocząć personalizację.', + 'settings.autocomplete.completionStyle.overlayTtl': 'TTL nakładki (ms)', + 'settings.autocomplete.completionStyle.personalizationHistory': 'Historia personalizacji', + 'settings.autocomplete.completionStyle.styleExamples': 'Przykłady stylu (jeden w wierszu)', + 'settings.autocomplete.completionStyle.styleInstructions': 'Instrukcje stylu', + 'settings.autocomplete.debug.acceptedPrefix': 'Zaakceptowano: {value}', + 'settings.autocomplete.debug.acceptFailed': 'Nie udało się zaakceptować sugestii', + 'settings.autocomplete.debug.alreadyRunning': 'Autouzupełnianie już działa.', + 'settings.autocomplete.debug.clearHistoryFailed': 'Nie udało się wyczyścić historii', + 'settings.autocomplete.debug.didNotStart': 'Autouzupełnianie nie wystartowało.', + 'settings.autocomplete.debug.disabledInSettings': + 'Autouzupełnianie jest wyłączone w ustawieniach. Włącz je i zapisz najpierw.', + 'settings.autocomplete.debug.fetchSuggestionFailed': 'Nie udało się pobrać bieżącej sugestii', + 'settings.autocomplete.debug.inspectFocusedElementFailed': + 'Nie udało się zbadać aktywnego elementu', + 'settings.autocomplete.debug.loadSettingsFailed': + 'Nie udało się wczytać ustawień autouzupełniania', + 'settings.autocomplete.debug.noSuggestionApplied': 'Nie zastosowano sugestii.', + 'settings.autocomplete.debug.noSuggestionReturned': 'Nie zwrócono sugestii.', + 'settings.autocomplete.debug.refreshStatusFailed': + 'Nie udało się odświeżyć statusu autouzupełniania', + 'settings.autocomplete.debug.saveAdvancedSettingsFailed': + 'Nie udało się zapisać ustawień zaawansowanych', + 'settings.autocomplete.debug.startFailed': 'Nie udało się uruchomić autouzupełniania', + 'settings.autocomplete.debug.stopFailed': 'Nie udało się zatrzymać autouzupełniania', + 'settings.autocomplete.debug.suggestionPrefix': 'Sugestia: {value}', + 'settings.autocomplete.shared.none': 'Brak', + 'settings.autocomplete.shared.notApplicable': 'nd.', + 'settings.autocomplete.shared.unknown': 'Nieznane', + 'settings.billing.autoRecharge.addAmount': 'Dodaj tę kwotę', + 'settings.billing.autoRecharge.addCard': 'Dodaj kartę', + 'settings.billing.autoRecharge.amountHint': 'Minimalna kwota doładowania to równowartość 5 USD.', + 'settings.billing.autoRecharge.defaultCard': 'Karta domyślna', + 'settings.billing.autoRecharge.lastRechargeFailed': 'Ostatnie doładowanie nie powiodło się', + 'settings.billing.autoRecharge.lastRecharged': 'Ostatnio doładowano', + 'settings.billing.autoRecharge.expires': 'Wygasa {date}', + 'settings.billing.autoRecharge.noCards': 'Brak kart', + 'settings.billing.autoRecharge.paymentMethods': 'Metody płatności', + 'settings.billing.autoRecharge.rechargeInProgress': 'Doładowanie w toku', + 'settings.billing.autoRecharge.spentThisWeek': 'Wykorzystano ${spent} z ${limit} w tym tygodniu', + 'settings.billing.autoRecharge.rechargeWhen': 'Doładuj, gdy saldo spadnie poniżej', + 'settings.billing.autoRecharge.saveSettings': 'Zapisywanie…', + 'settings.billing.autoRecharge.saving': 'Zapisywanie…', + 'settings.billing.autoRecharge.setDefault': ':', + 'settings.billing.autoRecharge.subtitle': + 'Automatycznie doładowuj kredyty, gdy saldo spadnie poniżej progu.', + 'settings.billing.autoRecharge.title': 'Włącz automatyczne doładowanie', + 'settings.billing.autoRecharge.toggleAriaLabel': 'Przełącz automatyczne doładowanie', + 'settings.billing.autoRecharge.weeklyLimit': 'Tygodniowy limit wydatków', + 'settings.billing.history.desc': 'Twoje ostatnie transakcje i rozliczenia.', + 'settings.billing.history.empty': 'Brak historii do wyświetlenia.', + 'settings.billing.history.openPortal': 'Otwórz portal', + 'settings.billing.history.posted': 'Zaksięgowano', + 'settings.billing.history.title': 'Historia rozliczeń', + 'settings.billing.inferenceBudget.cycleEnds': 'Koniec cyklu', + 'settings.billing.inferenceBudget.exhausted': 'Wyczerpane', + 'settings.billing.inferenceBudget.loadError': 'Błąd wczytywania', + 'settings.billing.inferenceBudget.noBudgetDesc': + 'Brak aktywnego budżetu cyklicznego. Wykup plan, aby zacząć.', + 'settings.billing.inferenceBudget.noRecurringBudget': 'Brak budżetu cyklicznego', + 'settings.billing.inferenceBudget.noRecurringPlanBudget': 'Brak cyklicznego budżetu planu', + 'settings.billing.inferenceBudget.noRecurringWeeklyDesc': + 'Twój obecny plan nie zawiera cyklicznego tygodniowego budżetu inferencji. Zużycie jest opłacane z dostępnych kredytów.', + 'settings.billing.inferenceBudget.remaining': 'Pozostało', + 'settings.billing.inferenceBudget.remainingSummary': 'Pozostało {remaining} / {budget}', + 'settings.billing.inferenceBudget.spentThisCycle': 'Wydano {amount} w tym cyklu', + 'settings.billing.inferenceBudget.cycleEndsOn': 'Cykl kończy się {date}', + 'settings.billing.inferenceBudget.exhaustedDesc': + 'Subskrypcyjne zużycie zostało wyczerpane. Doładuj kredyty, aby korzystać dalej bez czekania na nowy cykl.', + 'settings.billing.inferenceBudget.discountVsPayg': + 'O {pct}% taniej za wywołanie niż w pay-as-you-go.', + 'settings.billing.inferenceBudget.cycleSpend': 'Wydatki w cyklu', + 'settings.billing.inferenceBudget.totalAmount': '{amount} łącznie', + 'settings.billing.inferenceBudget.inference': 'Inferencja', + 'settings.billing.inferenceBudget.integrations': 'Integracje', + 'settings.billing.inferenceBudget.calls': '{count} wywołań', + 'settings.billing.inferenceBudget.dailySpend': 'Wydatki dzienne', + 'settings.billing.inferenceBudget.dailySpendPoint': '{date}: {amount}', + 'settings.billing.inferenceBudget.topModels': 'Najczęstsze modele', + 'settings.billing.inferenceBudget.noInferenceUsage': 'Brak zużycia inferencji w tym cyklu.', + 'settings.billing.inferenceBudget.topIntegrations': 'Najczęstsze integracje', + 'settings.billing.inferenceBudget.noIntegrationUsage': 'Brak zużycia integracji w tym cyklu.', + 'settings.billing.inferenceBudget.tenHourCap': 'Limit 10-godzinny', + 'settings.billing.inferenceBudget.title': 'Budżet inferencji', + 'settings.billing.inferenceBudget.unableToLoad': 'Nie udało się załadować danych zużycia', + 'settings.billing.inferenceBudget.notAvailable': 'n/d', + 'settings.billing.payAsYouGo.available': 'Dostępne', + 'settings.billing.payAsYouGo.chargeCustomAmount': 'Otwieranie…', + 'settings.billing.payAsYouGo.chooseTopUpDesc': 'Wybierz kwotę doładowania lub wprowadź własną.', + 'settings.billing.payAsYouGo.chooseTopUpTitle': 'Wybierz kwotę doładowania', + 'settings.billing.payAsYouGo.creditBalanceDesc': + 'Twoje aktualne saldo kredytów dostępne do użycia.', + 'settings.billing.payAsYouGo.creditBalanceTitle': 'Saldo kredytów', + 'settings.billing.payAsYouGo.customAmount': 'Własna kwota', + 'settings.billing.payAsYouGo.enterAmount': 'Wprowadź kwotę', + 'settings.billing.payAsYouGo.opening': 'Otwieranie', + 'settings.billing.payAsYouGo.promotionalCredits': 'Kredyty promocyjne', + 'settings.billing.payAsYouGo.topUpBalance': 'Doładuj saldo', + 'settings.billing.payAsYouGo.topUpCredits': 'Doładuj kredyty', + 'settings.billing.payAsYouGo.unableToLoad': 'Nie można wczytać salda.', + 'settings.billing.subscription.annual': 'Roczna', + 'settings.billing.subscription.billedAnnually': 'Rozliczane rocznie', + 'settings.billing.subscription.chooseSubtitle': 'Wybierz plan dopasowany do Twoich potrzeb.', + 'settings.billing.subscription.chooseTitle': 'Wybierz plan', + 'settings.billing.subscription.cryptoDesc': + 'Możesz zapłacić również w kryptowalucie — skontaktuj się z nami.', + 'settings.billing.subscription.cryptoQuestion': 'Wolisz zapłacić kryptowalutą?', + 'settings.billing.subscription.current': 'Bieżący', + 'settings.billing.subscription.currentPlan': 'Bieżący plan', + 'settings.billing.subscription.monthly': 'Miesięczna', + 'settings.billing.subscription.paymentConfirmed': 'Płatność potwierdzona', + 'settings.billing.subscription.perMonth': 'miesięcznie', + 'settings.billing.subscription.popular': 'Popularne', + 'settings.billing.subscription.save': '{pct}', + 'settings.billing.subscription.upgrade': 'Podnieś plan', + 'settings.billing.subscription.waiting': 'Oczekiwanie', + 'settings.billing.subscription.waitingPayment': 'Oczekiwanie na płatność', + 'settings.composio.apiKeyDesc': + 'Klucz API Composio jest obecnie przechowywany na tym urządzeniu.', + 'settings.composio.apiKeyExamplePlaceholder': 'ck_live_xxxxxxxxxxxxxxxx', + 'settings.composio.apiKeyLabel': 'Klucz API Composio', + 'settings.composio.apiKeyStored': 'Klucz API zapisany', + 'settings.composio.apiKeyStoredPlaceholder': '••••••••••••••••', + 'settings.composio.clearedToBackend': 'Przełączono na tryb backendowy', + 'settings.composio.confirmItem1': 'Konto w app.composio.dev z kluczem API', + 'settings.composio.confirmItem2': + 'Ponowne powiązanie każdej integracji przez Twoje osobiste konto Composio', + 'settings.composio.confirmItem3': + 'Uwaga: wyzwalacze Composio (webhooks w czasie rzeczywistym) nie działają jeszcze w trybie bezpośrednim — tylko synchroniczne wywołania narzędzi', + 'settings.composio.confirmNeedItems': 'Będziesz potrzebować:', + 'settings.composio.confirmSwitch': 'Rozumiem, przełącz na tryb bezpośredni', + 'settings.composio.confirmTitle': '⚠️ Przełączanie na tryb bezpośredni', + 'settings.composio.confirmWarning': + 'Twoje istniejące integracje (Gmail, Slack, GitHub itp. połączone przez OpenHuman) nie będą widoczne — żyją w tenant Composio zarządzanym przez OpenHuman.', + 'settings.composio.intro': + 'Composio integruje 250+ zewnętrznych aplikacji jako narzędzia, z których może korzystać Twój agent. Wybierz, jak kierować te wywołania.', + 'settings.composio.title': 'Composio', + 'settings.composio.modeDirect': 'Bezpośredni (przynieś własny klucz API)', + 'settings.composio.modeDirectDesc': + 'Wywołania trafiają bezpośrednio do backend.composio.dev. Suwerennie / przyjazne offline. Wywołania narzędzi działają synchronicznie; webhooks wyzwalaczy w czasie rzeczywistym nie są jeszcze trasowane w trybie bezpośrednim.', + 'settings.composio.modeManaged': 'Zarządzany (OpenHuman robi to za Ciebie)', + 'settings.composio.modeManagedDesc': + 'OpenHuman pośredniczy w wywołaniach narzędzi przez nasz backend (zalecane). Uwierzytelnianie jest pośredniczone; nie musisz wklejać klucza API Composio. Webhooks są w pełni trasowane.', + 'settings.composio.routingMode': 'Tryb trasowania', + 'settings.composio.saveErrorNoKey': + 'Nie udało się zapisać. Tryb bezpośredni wymaga niepustego klucza API.', + 'settings.composio.saving': 'Zapisywanie…', + 'settings.composio.switching': 'Przełączanie…', + 'settings.companion.title': 'Towarzysz komputerowy', + 'settings.companion.session': 'Sesja', + 'settings.companion.activeLabel': 'Aktywna', + 'settings.companion.inactiveStatus': 'Nieaktywna', + 'settings.companion.stopping': 'Zatrzymywanie…', + 'settings.companion.stopSession': 'Zatrzymaj sesję', + 'settings.companion.starting': 'Uruchamianie…', + 'settings.companion.startSession': 'Uruchom sesję', + 'settings.companion.sessionId': 'ID sesji', + 'settings.companion.turns': 'Tury', + 'settings.companion.remaining': 'Pozostało', + 'settings.companion.configuration': 'Konfiguracja', + 'settings.companion.hotkey': 'Skrót klawiszowy', + 'settings.companion.activationMode': 'Tryb aktywacji', + 'settings.companion.sessionTtl': 'TTL sesji', + 'settings.companion.screenCapture': 'Przechwytywanie ekranu', + 'settings.companion.appContext': 'Kontekst aplikacji', + 'settings.cron.jobs.desc': 'Zadania cykliczne uruchamiane przez harmonogram rdzenia.', + 'settings.cron.jobs.empty': 'Nie znaleziono zadań cron rdzenia.', + 'settings.cron.jobs.lastStatus': 'Ostatni status', + 'settings.cron.jobs.loading': 'Wczytywanie zadań cron...', + 'settings.cron.jobs.loadingRuns': 'Wczytywanie uruchomień', + 'settings.cron.jobs.nextRun': 'Następne uruchomienie', + 'settings.cron.jobs.pause': 'Wstrzymaj', + 'settings.cron.jobs.paused': 'Wstrzymane', + 'settings.cron.jobs.recentRuns': 'Ostatnie uruchomienia', + 'settings.cron.jobs.removing': 'Usuwanie', + 'settings.cron.jobs.resume': 'Wznów', + 'settings.cron.jobs.runningNow': 'Uruchamiane teraz', + 'settings.cron.jobs.saving': 'Zapisywanie…', + 'settings.cron.jobs.schedule': 'Harmonogram', + 'settings.cron.jobs.title': 'Zadania cron rdzenia', + 'settings.cron.jobs.viewRuns': 'Zobacz uruchomienia', + 'settings.localModel.deviceCapability.active': 'Aktywne', + 'settings.localModel.deviceCapability.appliedTier': 'Zastosowany poziom', + 'settings.localModel.deviceCapability.applying': 'Stosowanie', + 'settings.localModel.deviceCapability.cores': '{count}', + 'settings.localModel.deviceCapability.couldNotLoadPresets': 'Nie udało się wczytać presetów', + 'settings.localModel.deviceCapability.cpu': 'CPU', + 'settings.localModel.deviceCapability.customModelIds': 'Własne ID modeli', + 'settings.localModel.deviceCapability.detected': 'Wykryto', + 'settings.localModel.deviceCapability.disabled': 'Wyłączone', + 'settings.localModel.deviceCapability.disabledDesc': + 'Lokalne AI wyłączone — używana jest chmura jako rezerwa.', + 'settings.localModel.deviceCapability.downloadingModels': '(pobieranie modeli)', + 'settings.localModel.deviceCapability.downloadingSetupDesc': + 'Pobieranie instalatora OllamaSetup (~2 GB) i rozpakowywanie. Pierwsza instalacja może potrwać minutę.', + 'settings.localModel.deviceCapability.failedToApplyPreset': 'Nie udało się zastosować presetu', + 'settings.localModel.deviceCapability.gpu': 'GPU', + 'settings.localModel.deviceCapability.installFailed': 'Instalacja Ollama nie powiodła się', + 'settings.localModel.deviceCapability.installFailedDesc': + 'Instalator zakończył pracę, zanim Ollama była gotowa. Kliknij ponów, aby spróbować jeszcze raz, lub zainstaluj ręcznie z ollama.com.', + 'settings.localModel.deviceCapability.installFirst': 'Najpierw uruchom Ollamę.', + 'settings.localModel.deviceCapability.installFirstDesc': + 'Lokalne poziomy zależą od zewnętrznie zarządzanego endpointu Ollama. Uruchom go samodzielnie, pobierz potrzebne modele i pozostań przy „Wyłączone (rezerwa chmurowa)”, dopóki środowisko nie będzie osiągalne.', + 'settings.localModel.deviceCapability.installOllamaFirst': + 'Najpierw uruchom Ollamę, aby użyć tego poziomu', + 'settings.localModel.deviceCapability.installingOllama': 'Instalowanie Ollama', + 'settings.localModel.deviceCapability.loadingDeviceInfo': 'Wczytywanie informacji o urządzeniu', + 'settings.localModel.deviceCapability.localAiDisabled': + 'Lokalne AI wyłączone — używana jest rezerwa chmurowa.', + 'settings.localModel.deviceCapability.modelTier': 'Poziom modelu', + 'settings.localModel.deviceCapability.needsOllama': 'Wymaga Ollama', + 'settings.localModel.deviceCapability.notDetected': 'Nie wykryto', + 'settings.localModel.deviceCapability.disabledLowercase': 'wyłączone', + 'settings.localModel.deviceCapability.presetDetails': + 'Czat: {chatModel} · Wizja: {visionModel} · Docelowy RAM: {targetRamGb} GB', + 'settings.localModel.deviceCapability.ram': 'RAM', + 'settings.localModel.deviceCapability.recommended': 'Zalecane', + 'settings.localModel.deviceCapability.retryInstall': 'Ponawianie…', + 'settings.localModel.deviceCapability.retrying': 'Ponawianie…', + 'settings.localModel.deviceCapability.starting': 'Uruchamianie…', + 'settings.localModel.download.audioPathPlaceholder': 'Bezwzględna ścieżka do pliku audio', + 'settings.localModel.download.capabilityChat': 'Czat', + 'settings.localModel.download.capabilityEmbedding': 'Embeddingi', + 'settings.localModel.download.capabilityAssets': 'Zasoby możliwości', + 'settings.localModel.download.capabilityStt': 'STT', + 'settings.localModel.download.capabilityTts': 'TTS', + 'settings.localModel.download.capabilityVision': 'Wizja', + 'settings.localModel.download.downloading': 'Pobieranie...', + 'settings.localModel.download.embeddingDimensions': 'Wymiary: {dimensions}', + 'settings.localModel.download.embeddingModel': 'Model embeddingu: {modelId}', + 'settings.localModel.download.embeddingPlaceholder': 'Jeden ciąg wejściowy w wierszu...', + 'settings.localModel.download.embeddingVectors': 'Wektory: {count}', + 'settings.localModel.download.noThinkMode': 'Tryb bez myślenia', + 'settings.localModel.download.notAvailable': 'nd.', + 'settings.localModel.download.promptPlaceholder': + 'Wpisz dowolny prompt i uruchom go na modelu lokalnym...', + 'settings.localModel.download.quantizationPref': 'Preferencja kwantyzacji', + 'settings.localModel.download.runEmbeddingTest': 'Uruchamianie...', + 'settings.localModel.download.runPromptTest': 'Uruchom test promptu', + 'settings.localModel.download.runSummaryTest': 'Uruchom test podsumowania', + 'settings.localModel.download.runTranscriptionTest': 'Uruchamianie...', + 'settings.localModel.download.runTtsTest': 'Uruchamianie...', + 'settings.localModel.download.runVisionTest': 'Uruchamianie...', + 'settings.localModel.download.running': 'Uruchamianie...', + 'settings.localModel.download.runningPrompt': 'Uruchamianie promptu', + 'settings.localModel.download.summaryHelper': + 'Wywołuje `openhuman.inference_summarize` przez rdzeń Rust', + 'settings.localModel.download.summarizePlaceholder': + 'Wklej tekst do podsumowania modelem lokalnym...', + 'settings.localModel.download.testCustomPrompt': 'Testuj własny prompt', + 'settings.localModel.download.testEmbeddings': 'Testuj embeddingi', + 'settings.localModel.download.testSummarization': 'Testuj podsumowywanie', + 'settings.localModel.download.testVisionPrompt': 'Testuj prompt wizji', + 'settings.localModel.download.testVoiceInput': 'Testuj wejście głosowe (STT)', + 'settings.localModel.download.testVoiceOutput': 'Testuj wyjście głosowe (TTS)', + 'settings.localModel.download.transcript': 'Transkrypcja:', + 'settings.localModel.download.ttsOutput': 'Wyjście: {outputPath}', + 'settings.localModel.download.ttsOutputPlaceholder': 'Opcjonalna ścieżka wyjściowa WAV', + 'settings.localModel.download.ttsPlaceholder': 'Wprowadź tekst do syntezy...', + 'settings.localModel.download.ttsVoice': 'Głos: {voiceId}', + 'settings.localModel.download.visionImagePlaceholder': + 'Jedno odniesienie do obrazu w wierszu (data URI, URL lub marker lokalnej ścieżki)', + 'settings.localModel.download.visionPromptPlaceholder': 'Wprowadź prompt dla modelu wizji...', + 'settings.localModel.status.allChecksPassed': 'Wszystkie testy zaliczone', + 'settings.localModel.status.artifact': 'Artefakt', + 'settings.localModel.status.backend': 'Zaplecze', + 'settings.localModel.status.binary': 'Plik binarny', + 'settings.localModel.status.bootstrapResume': 'Inicjalizacja / wznowienie', + 'settings.localModel.status.checking': 'Sprawdzanie...', + 'settings.localModel.status.checkingOllama': 'Sprawdzanie Ollama', + 'settings.localModel.status.contextBelowMinimumBadge': + '{contextLength} ctx - poniżej minimum {required}', + 'settings.localModel.status.contextBelowMinimumTitle': + 'Odrzucone: okno kontekstu {contextLength} tokenów jest poniżej minimum {required} tokenów wymaganego przez warstwę pamięci. Cichy obcięcie kontekstu uszkodziłoby recall.', + 'settings.localModel.status.contextOkBadge': '{contextLength} ctx ✓', + 'settings.localModel.status.contextOkTitle': + 'Okno kontekstu {contextLength} tokenów spełnia minimum warstwy pamięci wynoszące {required} tokenów.', + 'settings.localModel.status.contextUnknownBadge': 'ctx nieznane', + 'settings.localModel.status.contextUnknownTitle': + 'Okno kontekstu nieznane; nie udało się potwierdzić, że spełnia minimum {required} tokenów warstwy pamięci.', + 'settings.localModel.status.customLocation': 'Własna lokalizacja', + 'settings.localModel.status.customLocationDesc': 'Wskaż ręcznie ścieżkę do binarki Ollama.', + 'settings.localModel.status.diagnosticsHint': + 'Kliknij „Uruchom diagnostykę”, aby zweryfikować, że Ollama działa i modele są zainstalowane.', + 'settings.localModel.status.downloadingUnknown': 'Pobieranie (rozmiar nieznany)', + 'settings.localModel.status.eta': 'Pozostały czas', + 'settings.localModel.status.expectedModels': 'Oczekiwane modele', + 'settings.localModel.status.expectedChat': 'Czat: {model}', + 'settings.localModel.status.expectedEmbedding': 'Embeddingi: {model}', + 'settings.localModel.status.expectedVision': 'Wizja: {model}', + 'settings.localModel.status.externalProcess': 'Zewnętrzny proces', + 'settings.localModel.status.forceRebootstrap': 'Wymuś ponowną inicjalizację', + 'settings.localModel.status.generationTps': 'TPS generowania', + 'settings.localModel.status.hideErrorDetails': 'Ukryj szczegóły błędu', + 'settings.localModel.status.installManually': 'Zainstaluj ręcznie', + 'settings.localModel.status.installManuallyFrom': 'Zainstaluj ręcznie z', + 'settings.localModel.status.installOllama': 'Uruchamianie…', + 'settings.localModel.status.installedModels': 'Zainstalowane modele', + 'settings.localModel.status.installing': 'Instalowanie...', + 'settings.localModel.status.installingOllama': 'Instalowanie środowiska Ollama...', + 'settings.localModel.status.issues': 'Problemy', + 'settings.localModel.status.issuesFound': 'Znaleziono {count} problemów', + 'settings.localModel.status.lastLatency': 'Ostatnie opóźnienie', + 'settings.localModel.status.model': 'Model', + 'settings.localModel.status.notAvailable': 'nd.', + 'settings.localModel.status.notFound': 'Nie znaleziono', + 'settings.localModel.status.notRunning': 'Nie działa', + 'settings.localModel.status.ollamaBinaryPath': 'Ścieżka binarki Ollama', + 'localModel.ollamaServer.helperText': 'Przykład: http://192.168.1.5:11434', + 'localModel.ollamaServer.label': 'Adres URL serwera Ollama', + 'localModel.ollamaServer.modelCount': 'modele', + 'localModel.ollamaServer.placeholder': 'http://localhost:11434', + 'localModel.ollamaServer.reachable': 'Dostępny', + 'localModel.ollamaServer.resetButton': 'Przywróć domyślne', + 'localModel.ollamaServer.saveButton': 'Zapisz', + 'localModel.ollamaServer.testButton': 'Testuj połączenie', + 'localModel.ollamaServer.unreachable': 'Niedostępny', + 'localModel.ollamaServer.validationError': 'Musi być poprawnym adresem http:// lub https://', + 'settings.localModel.status.ollamaDiagnostics': 'Diagnostyka Ollama', + 'settings.localModel.status.ollamaNotInstalled': 'Środowisko Ollama niedostępne', + 'settings.localModel.status.ollamaNotInstalledDesc': + 'OpenHuman traktuje teraz Ollamę jako zewnętrzne środowisko inferencji. Uruchom własny serwer Ollama, pobierz potrzebne modele i skieruj na niego trasowanie workloadów.', + 'settings.localModel.status.progress': 'Postęp', + 'settings.localModel.status.provider': 'Dostawca', + 'settings.localModel.status.retryBootstrap': 'Ponów inicjalizację', + 'settings.localModel.status.runDiagnostics': 'Sprawdzanie...', + 'settings.localModel.status.running': 'Działa', + 'settings.localModel.status.runningExternalProcess': 'Działa przez zewnętrzny proces', + 'settings.localModel.status.runtimeStatus': 'Stan środowiska', + 'settings.localModel.status.server': 'Serwer', + 'settings.localModel.status.setPath': 'Ustawianie...', + 'settings.localModel.status.setting': 'Ustawianie...', + 'settings.localModel.status.showErrorDetails': 'Ukryj szczegóły błędu', + 'settings.localModel.status.showInstallErrorDetails': 'Ukryj szczegóły błędu', + 'settings.localModel.status.suggestedFixes': 'Sugerowane poprawki', + 'settings.localModel.status.thenSetPath': 'Następnie ustaw ścieżkę', + 'settings.localModel.status.triggering': 'Uruchamianie...', + 'settings.localModel.status.unavailable': 'Niedostępne', + 'settings.localModel.status.working': 'Pracuję...', + 'settings.developerMenu.ai.title': 'Konfiguracja AI', + 'settings.developerMenu.ai.desc': + 'Dostawcy chmurowi, lokalne modele Ollama i trasowanie per workload', + 'settings.developerMenu.screenAwareness.title': 'Świadomość ekranu', + 'settings.developerMenu.screenAwareness.desc': + 'Uprawnienia do przechwytywania ekranu, polityka monitorowania i kontrola sesji', + 'settings.developerMenu.messagingChannels.title': 'Kanały komunikacji', + 'settings.developerMenu.messagingChannels.desc': + 'Konfiguruj tryby uwierzytelniania Telegram/Discord i domyślne trasowanie', + 'settings.developerMenu.tools.title': 'Narzędzia', + 'settings.developerMenu.tools.desc': + 'Włącz lub wyłącz możliwości, z których OpenHuman może korzystać w Twoim imieniu', + 'settings.developerMenu.agentChat.title': 'Czat z agentem', + 'settings.developerMenu.agentChat.desc': + 'Testuj rozmowę z agentem z nadpisaniami modelu i temperatury', + 'settings.developerMenu.devWorkflow.title': 'Przepływ pracy dev', + 'settings.developerMenu.devWorkflow.desc': + 'Autonomiczny agent, który wybiera Twoje zgłoszenia GitHub i cyklicznie tworzy PR-y', + 'settings.developerMenu.devWorkflow.panelDesc': + 'Skonfiguruj autonomicznego agenta deweloperskiego, który wybiera zgłoszenia GitHub przypisane do Ciebie i automatycznie tworzy pull requesty zgodnie z harmonogramem.', + 'settings.developerMenu.skillsRunner.title': 'Runner umiejętności', + 'settings.developerMenu.skillsRunner.desc': + 'Uruchom dowolną dołączoną umiejętność ad hoc — wypełnij jej dane wejściowe i rozpocznij autonomiczne uruchomienie w tle', + 'settings.developerMenu.skillsRunner.panelDesc': + 'Wybierz dołączoną umiejętność, wypełnij zadeklarowane dane wejściowe i uruchom zadanie w tle bez oczekiwania na wynik. Użyj przepływu pracy dev, jeśli potrzebujesz cyklicznego zadania według harmonogramu cron.', + 'settings.skillsRunner.skill': 'Umiejętność', + 'settings.skillsRunner.selectSkill': 'Wybierz umiejętność…', + 'settings.skillsRunner.loadingSkills': 'Wczytywanie umiejętności…', + 'settings.skillsRunner.loadingDescription': 'Wczytywanie danych wejściowych umiejętności…', + 'settings.skillsRunner.noInputs': 'Ta umiejętność nie deklaruje danych wejściowych.', + 'settings.skillsRunner.placeholder.required': 'wymagane', + 'settings.skillsRunner.runNow': 'Uruchom teraz', + 'settings.skillsRunner.starting': 'Uruchamianie…', + 'settings.skillsRunner.started': 'Uruchomiono — ID uruchomienia:', + 'settings.skillsRunner.logPath': 'Dziennik:', + 'settings.skillsRunner.error.listSkills': 'Nie udało się wczytać umiejętności:', + 'settings.skillsRunner.error.describe': 'Nie udało się wczytać danych wejściowych:', + 'settings.skillsRunner.error.missingRequired': 'Brak wymaganych danych wejściowych:', + 'settings.skillsRunner.error.run': 'Nie udało się rozpocząć uruchomienia:', + 'settings.skillsRunner.error.preflightGate': 'Brama preflight nie powiodła się', + 'settings.skillsRunner.schedule.heading': 'Harmonogram (cykliczny)', + 'settings.skillsRunner.schedule.help': + 'Zapisz tę umiejętność i dane wejściowe jako cykliczne zadanie cron. Agent wywoła run_skill przy każdym tyknięciu.', + 'settings.skillsRunner.schedule.frequency': 'Częstotliwość', + 'settings.skillsRunner.schedule.every30min': 'Co 30 minut', + 'settings.skillsRunner.schedule.everyHour': 'Co godzinę', + 'settings.skillsRunner.schedule.every2hours': 'Co 2 godziny', + 'settings.skillsRunner.schedule.every6hours': 'Co 6 godzin', + 'settings.skillsRunner.schedule.onceDaily': 'Raz dziennie (9:00)', + 'settings.skillsRunner.schedule.save': 'Zapisz harmonogram', + 'settings.skillsRunner.schedule.saving': 'Zapisywanie…', + 'settings.skillsRunner.schedule.saved': 'Harmonogram zapisany.', + 'settings.skillsRunner.schedule.error': 'Nie udało się zapisać harmonogramu:', + 'settings.skillsRunner.schedule.loadingJobs': 'Wczytywanie istniejących harmonogramów…', + 'settings.skillsRunner.schedule.noJobs': + 'Nie zapisano jeszcze harmonogramów dla tej umiejętności.', + 'settings.skillsRunner.schedule.existing': 'Zaplanowane zadania dla tej umiejętności:', + 'settings.skillsRunner.schedule.runNow': 'Uruchom', + 'settings.skillsRunner.schedule.remove': 'Usuń', + 'settings.skillsRunner.scheduleEnabled': 'Włączone', + 'settings.skillsRunner.scheduleDisabled': 'Wstrzymane', + 'settings.skillsRunner.scheduleToggleAria': 'Przełącz włączenie harmonogramu', + 'settings.skillsRunner.schedule.history': 'Historia', + 'settings.skillsRunner.schedule.historyLoading': 'Wczytywanie historii…', + 'settings.skillsRunner.schedule.historyEmpty': 'Brak uruchomień dla tego harmonogramu.', + 'settings.skillsRunner.schedule.historyNoOutput': 'Nie przechwycono wyjścia.', + 'settings.skillsRunner.schedule.active': 'Aktywne', + 'settings.skillsRunner.schedule.lastRunLabel': 'ostatnio:', + 'settings.skillsRunner.recentRuns.headingForSkill': 'Ostatnie uruchomienia tej umiejętności', + 'settings.skillsRunner.recentRuns.headingAll': 'Ostatnie uruchomienia umiejętności (wszystkie)', + 'settings.skillsRunner.recentRuns.refresh': 'Odśwież', + 'settings.skillsRunner.recentRuns.loading': 'Wczytywanie ostatnich uruchomień…', + 'settings.skillsRunner.recentRuns.empty': 'Brak ostatnich uruchomień.', + 'settings.skillsRunner.viewer.loading': 'Wczytywanie logu…', + 'settings.skillsRunner.viewer.tailing': 'Śledzenie na żywo', + 'settings.skillsRunner.viewer.fetching': 'pobieranie', + 'settings.skillsRunner.viewer.error': 'Odczyt logu nie powiódł się:', + 'settings.skillsRunner.repoPicker.loading': 'Wczytywanie repozytoriów…', + 'settings.skillsRunner.repoPicker.select': 'Wybierz repozytorium…', + 'settings.skillsRunner.repoPicker.empty': + 'Nie zwrócono repozytoriów. Połącz GitHub przez Composio, aby wypełnić tę listę.', + 'settings.skillsRunner.repoPicker.notConnected': + 'GitHub nie jest połączony przez Composio. Najpierw połącz go w Umiejętności → Composio.', + 'settings.skillsRunner.repoPicker.privateTag': '(prywatne)', + 'settings.skillsRunner.branchPicker.needRepo': 'Najpierw wybierz repozytorium…', + 'settings.skillsRunner.branchPicker.loading': 'Wczytywanie gałęzi…', + 'settings.skillsRunner.branchPicker.select': 'Wybierz gałąź…', + 'settings.devWorkflow.githubRepository': 'Repozytorium GitHub', + 'settings.devWorkflow.loadingRepositories': 'Wczytywanie repozytoriów...', + 'settings.devWorkflow.selectRepository': 'Wybierz repozytorium', + 'settings.devWorkflow.privateTag': '(prywatne)', + 'settings.devWorkflow.detectingForkInfo': 'Wykrywanie informacji o forku...', + 'settings.devWorkflow.forkDetected': 'Wykryto fork', + 'settings.devWorkflow.upstream': 'Nadrzędne:', + 'settings.devWorkflow.forkPrNote': 'PR-y będą tworzone względem repozytorium upstream.', + 'settings.devWorkflow.notForkNote': + 'To nie jest fork. PR-y będą tworzone bezpośrednio względem tego repozytorium.', + 'settings.devWorkflow.targetBranch': 'Gałąź docelowa', + 'settings.devWorkflow.targetBranchNote': 'PR-y będą tworzone względem tej gałęzi', + 'settings.devWorkflow.loadingBranches': 'Wczytywanie gałęzi...', + 'settings.devWorkflow.runFrequency': 'Częstotliwość uruchamiania', + 'settings.devWorkflow.runFrequencyNote': + 'Jak często agent ma sprawdzać zgłoszenia i tworzyć PR-y.', + 'settings.devWorkflow.updateConfiguration': 'Aktualizuj konfigurację', + 'settings.devWorkflow.saveConfiguration': 'Zapisz konfigurację', + 'settings.devWorkflow.remove': 'Usuń', + 'settings.devWorkflow.saved': 'Zapisano', + 'settings.devWorkflow.activeConfiguration': 'Aktywna konfiguracja', + 'settings.devWorkflow.activeConfigRepository': 'Repozytorium:', + 'settings.devWorkflow.activeConfigUpstream': 'Nadrzędne:', + 'settings.devWorkflow.activeConfigTargetBranch': 'Gałąź docelowa:', + 'settings.devWorkflow.activeConfigSchedule': 'Harmonogram:', + 'settings.devWorkflow.enabled': 'Włączone', + 'settings.devWorkflow.paused': 'Wstrzymane', + 'settings.devWorkflow.nextRun': 'Następne uruchomienie', + 'settings.devWorkflow.lastRun': 'Ostatnie uruchomienie', + 'settings.devWorkflow.runNow': 'Uruchom teraz', + 'settings.devWorkflow.running': 'Uruchamianie…', + 'settings.devWorkflow.recentRuns': 'Ostatnie uruchomienia', + 'settings.devWorkflow.cronSaveError': 'Nie udało się zapisać konfiguracji', + 'settings.devWorkflow.lastOutput': 'Ostatnie wyjście', + 'settings.devWorkflow.noOutput': 'Nie przechwycono wyjścia', + 'settings.devWorkflow.runningStatus': + 'Agent działa — wybiera zgłoszenie i pracuje nad poprawką...', + 'settings.devWorkflow.errorNotConnected': + 'GitHub nie jest połączony. Najpierw połącz GitHub przez Ustawienia > Zaawansowane > Composio.', + 'settings.devWorkflow.errorToolNotEnabled': + 'Narzędzie GITHUB_LIST_REPOSITORIES_FOR_THE_AUTHENTICATED_USER nie jest włączone na tym backendzie. Poproś administratora o włączenie go w integracji Composio (backend#842).', + 'settings.devWorkflow.errorNotAuthenticated': 'Brak uwierzytelnienia. Najpierw się zaloguj.', + 'settings.devWorkflow.errorNoRepositories': 'Nie znaleziono repozytoriów dla tego konta GitHub.', + 'settings.devWorkflow.schedule.every30min': 'Co 30 minut', + 'settings.devWorkflow.schedule.everyHour': 'Co godzinę', + 'settings.devWorkflow.schedule.every2hours': 'Co 2 godziny', + 'settings.devWorkflow.schedule.every6hours': 'Co 6 godzin', + 'settings.devWorkflow.schedule.onceDaily': 'Raz dziennie (9:00)', + 'settings.developerMenu.cronJobs.title': 'Zadania cron', + 'settings.developerMenu.cronJobs.desc': + 'Przeglądaj i konfiguruj zaplanowane zadania dla umiejętności runtime', + 'settings.developerMenu.localModelDebug.title': 'Debug modelu lokalnego', + 'settings.developerMenu.localModelDebug.desc': + 'Konfiguracja Ollama, pobieranie zasobów, testy modeli i diagnostyka', + 'settings.developerMenu.webhooks.title': 'Webhooks', + 'settings.developerMenu.webhooks.desc': + 'Sprawdź rejestracje webhooków w runtime i logi przechwyconych żądań', + 'settings.developerMenu.eventLog.title': 'Dziennik zdarzeń', + 'settings.developerMenu.eventLog.desc': + 'Kolorowany strumień na żywo wszystkich zdarzeń agenta, narzędzi i systemu', + 'settings.developerMenu.eventLog.allTypes': 'Wszystkie typy', + 'settings.developerMenu.eventLog.filterAgent': 'Filtruj...', + 'settings.developerMenu.eventLog.download': 'Pobierz', + 'settings.developerMenu.eventLog.events': 'zdarzenia', + 'settings.developerMenu.eventLog.live': 'Na żywo', + 'settings.developerMenu.eventLog.disconnected': 'Rozłączono', + 'settings.developerMenu.eventLog.waiting': 'Oczekiwanie na zdarzenia...', + 'settings.developerMenu.eventLog.notConnected': 'Brak połączenia z rdzeniem', + 'settings.developerMenu.eventLog.jumpToLatest': 'Przejdź do najnowszego', + 'settings.developerMenu.eventLog.badge.tool': 'TOOL', + 'settings.developerMenu.eventLog.badge.agent': 'AGENT', + 'settings.developerMenu.eventLog.badge.info': 'INFO', + 'settings.developerMenu.eventLog.badge.mem': 'MEM', + 'settings.developerMenu.eventLog.badge.chan': 'CHAN', + 'settings.developerMenu.eventLog.badge.cron': 'CRON', + 'settings.developerMenu.eventLog.badge.hook': 'HOOK', + 'settings.developerMenu.eventLog.badge.warn': 'WARN', + 'settings.developerMenu.eventLog.badge.skill': 'SKILL', + 'settings.developerMenu.eventLog.badge.comp': 'COMP', + 'settings.developerMenu.eventLog.badge.mcp': 'MCP', + 'settings.developerMenu.intelligence.title': 'Inteligencja', + 'settings.developerMenu.intelligence.desc': + 'Przestrzeń pamięci, silnik podświadomości, sny i ustawienia', + 'settings.developerMenu.notificationRouting.title': 'Trasowanie powiadomień', + 'settings.developerMenu.notificationRouting.desc': + 'Punktacja ważności AI i eskalacja orkiestratora dla alertów integracji', + 'settings.developerMenu.composeioTriggers.title': 'Wyzwalacze ComposeIO', + 'settings.developerMenu.composeioTriggers.desc': + 'Przeglądaj historię i archiwum wyzwalaczy ComposeIO', + 'settings.developerMenu.composioRouting.title': 'Trasowanie Composio (tryb bezpośredni)', + 'settings.developerMenu.composioRouting.desc': + 'Użyj własnego klucza API Composio i kieruj wywołania bezpośrednio do backend.composio.dev', + 'settings.developerMenu.integrationTriggers.title': 'Wyzwalacze integracji', + 'settings.developerMenu.integrationTriggers.desc': + 'Konfiguruj ustawienia klasyfikacji AI dla wyzwalaczy integracji Composio', + 'settings.developerMenu.mcpServer.title': 'Serwer MCP', + 'settings.developerMenu.mcpServer.desc': + 'Skonfiguruj zewnętrznych klientów MCP do połączenia z OpenHumanem', + 'settings.developerMenu.autonomy.title': 'Autonomia agenta', + 'settings.developerMenu.autonomy.desc': 'Limity szybkości akcji narzędzi i progi bezpieczeństwa', + 'settings.mcpServer.title': 'Serwer MCP', + 'settings.mcpServer.toolsSectionTitle': 'Dostępne narzędzia', + 'settings.mcpServer.toolsSectionDesc': + 'Narzędzia udostępniane przez serwer stdio MCP podczas uruchamiania openhuman-core mcp', + 'settings.mcpServer.configSectionTitle': 'Konfiguracja klienta', + 'settings.mcpServer.configSectionDesc': + 'Wybierz swojego klienta MCP, aby wygenerować poprawny fragment konfiguracji', + 'settings.mcpServer.copySnippet': 'Skopiuj do schowka', + 'settings.mcpServer.copied': 'Skopiowano!', + 'settings.mcpServer.openConfigFile': 'Otwórz plik konfiguracyjny', + 'settings.mcpServer.binaryPathNotFound': + 'Nie znaleziono pliku binarnego OpenHuman. Jeśli uruchamiasz ze źródeł, zbuduj: cargo build --bin openhuman-core', + 'settings.mcpServer.openConfigError': 'Nie udało się otworzyć pliku konfiguracyjnego', + 'settings.mcpServer.clientClaudeDesktop': 'Claude Desktop', + 'settings.mcpServer.clientCursor': 'Cursor', + 'settings.mcpServer.clientCodex': 'Codex', + 'settings.mcpServer.clientZed': 'Zed', + 'settings.mcpServer.configFilePath': 'Plik konfiguracyjny', + 'settings.mcpServer.clientSelectorAriaLabel': 'Selektor klienta MCP', + 'settings.appearance.menuDesc': 'Wybierz jasny, ciemny lub dopasowany do systemu motyw', + 'settings.agentAccess.title': 'Dostęp agenta do systemu', + 'settings.agentAccess.menuDesc': + 'Kontroluj, gdzie agent może czytać/pisać oraz czy może używać powłoki.', + 'settings.agentAccess.loadError': 'Nie udało się wczytać ustawień dostępu', + 'settings.agentAccess.saveError': 'Nie udało się zapisać ustawień dostępu', + 'settings.agentAccess.saved': 'Zapisano — zostanie zastosowane w następnej wiadomości.', + 'settings.agentAccess.desktopOnly': + 'Ustawienia dostępu są dostępne tylko w aplikacji desktopowej.', + 'settings.agentAccess.loading': 'Wczytywanie…', + 'settings.agentAccess.accessMode': 'Tryb dostępu', + 'settings.agentAccess.tier.readonly.title': 'Tylko do odczytu', + 'settings.agentAccess.tier.readonly.desc': + 'Czyta pliki i uruchamia polecenia tylko do odczytu, aby eksplorować — ale nigdy nie zapisuje, nie edytuje ani nie uruchamia niczego, co zmienia stan.', + 'settings.agentAccess.tier.supervised.title': 'Pytaj przed edycją', + 'settings.agentAccess.tier.supervised.desc': + 'Tworzy nowe pliki swobodnie, ale pyta o Twoją zgodę przed edycją istniejącego pliku, uruchomieniem polecenia, dostępem do sieci lub instalacją czegokolwiek.', + 'settings.agentAccess.tier.full.title': 'Pełny dostęp', + 'settings.agentAccess.tier.full.desc': + 'Uruchamia polecenia z pełnym dostępem Twojego konta — może czytać/pisać wszędzie, gdzie to dozwolone, oprócz magazynów poświadczeń i systemowych. Polecenia destrukcyjne, dostęp do sieci i instalacje nadal proszą o zgodę.', + 'settings.agentAccess.defaultTag': '(domyślny)', + 'settings.agentAccess.fullWarning': + '⚠ Pełny dostęp uruchamia polecenia z pełnymi uprawnieniami Twojego konta i nie jest sandboxowany. Włącz to tylko wtedy, gdy ufasz agentowi na tym komputerze. Katalogi poświadczeń i systemowe pozostają zablokowane, a akcje destrukcyjne, sieciowe i instalacyjne nadal proszą o zgodę.', + 'settings.agentAccess.confine.label': 'Ogranicz do przestrzeni roboczej', + 'settings.agentAccess.confine.desc': + 'Ogranicz agenta do katalogu przestrzeni roboczej (oraz dodanych folderów), niezależnie od wybranego trybu dostępu. Wyłączone — może sięgać wszędzie, gdzie Twój użytkownik, oprócz zawsze zablokowanych katalogów poświadczeń i systemowych.', + 'settings.agentAccess.requireTaskPlanApproval.label': 'Wymagaj zatwierdzenia planu zadania', + 'settings.agentAccess.requireTaskPlanApproval.desc': + 'Wstrzymaj, zanim przypisany agent wykona opis zadania utworzony przez agenta.', + 'settings.agentAccess.grantedFolders': 'Przyznane foldery', + 'settings.agentAccess.alwaysAllow': 'Zawsze dozwolone narzędzia', + 'settings.agentAccess.alwaysAllowDesc': + 'Narzędzia oznaczone w czacie jako „Zawsze zezwalaj” działają bez pytania. Usuń narzędzie, aby znów wymagało potwierdzenia.', + 'settings.agentAccess.alwaysAllowNone': 'Brak zawsze dozwolonych narzędzi.', + 'settings.agentAccess.grantedDesc': + 'Foldery, do których agent może czytać i pisać, oprócz przestrzeni roboczej. Magazyny poświadczeń (~/.ssh, ~/.gnupg, ~/.aws, keychains) i katalogi systemowe (/etc, /System, C:\\Windows, …) są zawsze zablokowane, nawet w przyznanym folderze.', + 'settings.agentAccess.noneGranted': 'Brak przyznanych folderów.', + 'settings.agentAccess.readWrite': 'odczyt + zapis', + 'settings.agentAccess.readOnly': 'tylko do odczytu', + 'settings.agentAccess.remove': 'Usuń', + 'settings.agentAccess.pathPlaceholder': 'Bezwzględna ścieżka folderu', + 'settings.agentAccess.accessLevelLabel': 'Poziom dostępu', + 'settings.agentAccess.add': 'Dodaj', + 'settings.agentAccess.saving': 'Zapisywanie…', + 'settings.agentAccess.changesApply': 'Zmiany zostaną zastosowane w następnej wiadomości.', + 'settings.appearance.title': 'Wygląd', + 'settings.appearance.themeHeading': 'Motyw', + 'settings.appearance.themeAria': 'Motyw', + 'settings.appearance.modeLight': 'Jasny', + 'settings.appearance.modeLightDesc': 'Jasne powierzchnie, ciemny tekst.', + 'settings.appearance.modeDark': 'Ciemny', + 'settings.appearance.modeDarkDesc': 'Przyciemnione powierzchnie, łatwiejsze dla oczu po zmroku.', + 'settings.appearance.modeSystem': 'Dopasuj do systemu', + 'settings.appearance.modeSystemDesc': + 'Postępuj zgodnie z ustawieniem wyglądu Twojego systemu operacyjnego.', + 'settings.appearance.helperText': + 'Tryb ciemny przełącza całą aplikację — czat, ustawienia, panele — na przyciemnioną paletę. „Dopasuj do systemu” podąża za wyglądem systemu i aktualizuje się na żywo.', + 'settings.appearance.tabBarHeading': 'Dolny pasek zakładek', + 'settings.appearance.tabBarAlwaysShowLabels': 'Zawsze pokazuj etykiety', + 'settings.appearance.tabBarAlwaysShowLabelsDesc': + 'Wyłączone — etykiety pojawiają się tylko po najechaniu lub dla aktywnej zakładki.', + 'settings.mascot.active': 'Aktywny', + 'settings.mascot.characterDesc': 'Wybierz charakter maskotki OpenHuman.', + 'settings.mascot.characterHeading': 'Charakter', + 'settings.mascot.customGifError': + 'Wprowadź URL .gif HTTPS, URL .gif loopback HTTP, URL file:// .gif lub lokalną ścieżkę .gif.', + 'settings.mascot.customGifHeading': 'Własny awatar GIF', + 'settings.mascot.customGifLabel': 'URL własnego awatara GIF', + 'settings.mascot.customGifPlaceholder': 'https://example.com/avatar.gif', + 'settings.mascot.characterPreview': 'Podgląd', + 'settings.mascot.characterStates': 'stanów', + 'settings.mascot.characterVisemes': 'wizemów', + 'settings.mascot.colorAria': 'Kolor OpenHuman', + 'settings.mascot.colorDesc': 'Wybierz kolor maskotki używany w całej aplikacji.', + 'settings.mascot.colorHeading': 'Kolor', + 'settings.mascot.colorBlack': 'Czarny', + 'settings.mascot.colorBurgundy': 'Burgundowy', + 'settings.mascot.colorCustom': 'Własny', + 'settings.mascot.colorNavy': 'Granatowy', + 'settings.mascot.primaryColor': 'Kolor podstawowy', + 'settings.mascot.secondaryColor': 'Kolor dodatkowy', + 'settings.mascot.colorYellow': 'Żółty', + 'settings.mascot.libraryUnavailable': 'Biblioteka OpenHuman niedostępna', + 'settings.mascot.title': 'OpenHuman', + 'settings.mascot.loadingLibrary': 'Wczytywanie biblioteki OpenHuman…', + 'settings.mascot.loadDetailError': 'Nie udało się wczytać maskotki.', + 'settings.mascot.loadLibraryError': 'Nie udało się wczytać biblioteki maskotek.', + 'settings.mascot.localDefault': 'Lokalny OpenHuman (domyślny)', + 'settings.mascot.menuTitle': 'Maskotka', + 'settings.mascot.menuDesc': 'Wybierz kolor maskotki używany w aplikacji', + 'settings.mascot.noCharacters': 'Nie ma jeszcze dostępnych postaci OpenHuman', + 'settings.mascot.noColorVariants': 'Brak wariantów kolorystycznych', + 'settings.mascot.voice.current': 'bieżący', + 'settings.mascot.voice.customDesc': + 'Znajdź ID głosów w api.elevenlabs.io/v1/voices lub w panelu ElevenLabs. Przechowywane jest tylko ID — Twój klucz API pozostaje na backendzie.', + 'settings.mascot.voice.customHeading': 'Własne ID głosu', + 'settings.mascot.voice.customOption': 'Inne (wklej ID głosu)…', + 'settings.mascot.voice.customPlaceholder': 'np. 21m00Tcm4TlvDq8ikWAM', + 'settings.mascot.voice.desc': + 'Wybierz głos ElevenLabs, którego maskotka używa do odpowiedzi głosowych. Filtruj po płci, wybierz z listy lub pozwól aplikacji dobrać głos pasujący do języka interfejsu.', + 'settings.mascot.voice.genderFemale': 'Kobiecy', + 'settings.mascot.voice.genderHeading': 'Płeć głosu', + 'settings.mascot.voice.genderMale': 'Męski', + 'settings.mascot.voice.heading': 'Głos', + 'settings.mascot.voice.preset': 'Preset głosu', + 'settings.mascot.voice.presetHeading': 'Preset głosu', + 'settings.mascot.voice.preview': 'Podgląd głosu', + 'settings.mascot.voice.previewError': 'Podgląd głosu nie powiódł się', + 'settings.mascot.voice.previewText': 'Cześć, jestem Twoim asystentem. To jest podgląd głosu.', + 'settings.mascot.voice.previewing': 'Odsłuchiwanie…', + 'settings.mascot.voice.reset': 'Przywróć domyślny', + 'settings.mascot.voice.useLocaleDefault': 'Dopasuj do języka aplikacji', + 'settings.mascot.voice.useLocaleDefaultDesc': + 'Automatyczny dobór głosu do bieżącego języka interfejsu.', + 'settings.persona.title': 'Profil asystenta', + 'settings.persona.menuTitle': 'Profil asystenta', + 'settings.persona.menuDesc': + 'Imię, osobowość, awatar i głos — Twój asystent jako jedna tożsamość', + 'settings.persona.identityHeading': 'Tożsamość', + 'settings.persona.identityDesc': + 'Wyświetlana nazwa i krótki opis Twojego asystenta. Pokazane w aplikacji; nie zmienia sposobu rozumowania asystenta.', + 'settings.persona.displayNameLabel': 'Wyświetlana nazwa', + 'settings.persona.displayNamePlaceholder': 'np. Nova', + 'settings.persona.descriptionLabel': 'Opis', + 'settings.persona.descriptionPlaceholder': 'np. Spokojny, zwięzły asystent dla mojego zespołu.', + 'settings.persona.soul.heading': 'Osobowość (SOUL.md)', + 'settings.persona.soul.desc': + 'Prompt osobowości, którym asystent kieruje się w każdej rozmowie. Edycje są zapisywane w Twojej przestrzeni roboczej i wchodzą w życie w następnej odpowiedzi.', + 'settings.persona.soul.editorLabel': 'Zawartość SOUL.md', + 'settings.persona.soul.reset': 'Przywróć domyślne', + 'settings.persona.soul.usingDefault': 'Używam dołączonej wartości domyślnej', + 'settings.persona.soul.loadError': 'Nie udało się wczytać SOUL.md', + 'settings.persona.soul.saveError': 'Nie udało się zapisać SOUL.md', + 'settings.persona.soul.resetError': 'Nie udało się zresetować SOUL.md', + 'settings.persona.appearanceHeading': 'Awatar i głos', + 'settings.persona.appearanceDesc': + 'Kolor maskotki, własny awatar GIF i głos odpowiedzi są konfigurowane w ustawieniach Maskotki.', + 'settings.persona.openMascotSettings': 'Otwórz ustawienia Maskotki', + 'settings.memoryWindow.balanced.badge': 'Zalecane', + 'settings.memoryWindow.balanced.hint': + 'Rozsądna wartość domyślna — dobra ciągłość bez nadmiernych tokenów na każde uruchomienie.', + 'settings.memoryWindow.balanced.label': 'Zrównoważone', + 'settings.memoryWindow.description': + 'Ile zapamiętanego kontekstu OpenHuman wstrzykuje do każdego nowego uruchomienia agenta. Większe okno daje większą świadomość poprzednich rozmów, ale używa więcej tokenów — i kosztuje więcej — przy każdym uruchomieniu.', + 'settings.memoryWindow.extended.badge': 'Więcej kontekstu', + 'settings.memoryWindow.extended.hint': + 'Więcej długoterminowej pamięci wstrzykiwanej do każdego uruchomienia. Wyższy koszt tokenów na turę.', + 'settings.memoryWindow.extended.label': 'Rozszerzone', + 'settings.memoryWindow.maximum.badge': 'Najwyższy koszt', + 'settings.memoryWindow.maximum.hint': + 'Największe bezpieczne okno. Najlepsza ciągłość, znacząco wyższy rachunek za tokeny przy każdym uruchomieniu.', + 'settings.memoryWindow.maximum.label': 'Maksymalne', + 'settings.memoryWindow.minimal.badge': 'Najtańsze', + 'settings.memoryWindow.minimal.hint': + 'Najmniejsze okno pamięci. Najtańsze, najszybsze, najmniejsza ciągłość między uruchomieniami.', + 'settings.memoryWindow.minimal.label': 'Minimalne', + 'settings.memoryWindow.title': 'Okno pamięci długoterminowej', + 'settings.modelHealth.title': 'Kondycja modeli', + 'settings.modelHealth.desc': + 'Jakość, współczynnik halucynacji i porównanie kosztów aktywnych modeli', + 'settings.modelHealth.allStatuses': 'Wszystkie statusy', + 'settings.modelHealth.models': 'modele', + 'settings.modelHealth.loading': 'Wczytywanie danych modeli...', + 'settings.modelHealth.empty': 'Brak zarejestrowanych modeli', + 'settings.modelHealth.col.model': 'Model', + 'settings.modelHealth.col.quality': 'Jakość', + 'settings.modelHealth.col.halluc': 'Wsp. haluc.', + 'settings.modelHealth.col.cost': 'Koszt / 1M wyjścia', + 'settings.modelHealth.col.agents': 'Agenci', + 'settings.modelHealth.col.status': 'Stan', + 'settings.modelHealth.badge.keep': 'Zostaw', + 'settings.modelHealth.badge.replace': 'Zastąp', + 'settings.modelHealth.badge.staging': 'Test staging', + 'settings.modelHealth.badge.vision': 'Tylko wizja', + 'settings.modelHealth.swap': 'Zamienić?', + 'settings.modelHealth.modal.title': 'Zastąpić model?', + 'settings.modelHealth.modal.hallucRate': 'Współczynnik halucynacji', + 'settings.modelHealth.modal.cancel': 'Anuluj', + 'settings.modelHealth.modal.apply': 'Zastosuj zamianę', + 'settings.modelHealth.tag.cheaper': 'TAŃSZY', + 'settings.modelHealth.tag.better': 'LEPSZY', + 'settings.screenIntel.permissions.accessibility': 'Dostępność', + 'settings.screenIntel.permissions.grantHint': 'System otworzy okno żądania uprawnień.', + 'settings.screenIntel.permissions.inputMonitoring': 'Monitorowanie wejścia', + 'settings.screenIntel.permissions.macosAppliesPrivacy': 'macOS stosuje politykę prywatności do:', + 'settings.screenIntel.permissions.openInputMonitoring': 'Żądanie…', + 'settings.screenIntel.permissions.refreshStatus': 'Odświeżanie…', + 'settings.screenIntel.permissions.refreshing': 'Odświeżanie…', + 'settings.screenIntel.permissions.requestAccessibility': 'Żądanie…', + 'settings.screenIntel.permissions.requestScreenRecording': 'Żądanie…', + 'settings.screenIntel.permissions.requesting': 'Żądanie…', + 'settings.screenIntel.permissions.restartRefresh': 'Restartowanie rdzenia…', + 'settings.screenIntel.permissions.restartingCore': 'Restartowanie rdzenia…', + 'settings.screenIntel.permissions.screenRecording': 'Nagrywanie ekranu', + 'settings.screenIntel.permissions.title': 'Uprawnienia', + 'skills.card.moreActions': 'Więcej akcji', + 'skills.channelIcon.discord': 'Discord', + 'skills.channelIcon.imessage': 'iMessage', + 'skills.channelIcon.telegram': 'Telegram', + 'skills.channelIcon.web': 'Sieć', + 'skills.channelIcon.yuanbao': 'Yuanbao', + 'skills.composio.poweredBy': 'Napędzane przez Composio', + 'skills.composio.staleStatusTitle': 'Połączenia pokazują nieaktualny status', + 'skills.create.allowedTools': 'Dozwolone narzędzia', + 'skills.create.allowedToolsHelp': 'Renderowane do nagłówka frontmatter SKILL.md jako', + 'skills.create.allowedToolsPlaceholder': 'node_exec, fetch', + 'skills.create.author': 'Autor', + 'skills.create.authorPlaceholder': 'Twoje imię', + 'skills.create.commaSeparated': '(rozdzielone przecinkami)', + 'skills.create.createBtn': 'Utwórz umiejętność', + 'skills.create.createError': 'Nie udało się utworzyć umiejętności', + 'skills.create.creating': 'Tworzenie…', + 'skills.create.description': 'Opis', + 'skills.create.descriptionPlaceholder': 'Co robi ta umiejętność?', + 'skills.create.optional': '(opcjonalnie)', + 'skills.create.inputs.heading': 'Inputs', + 'skills.create.inputs.help': + 'Zadeklaruj parametry potrzebne umiejętności. Skills Runner wyrenderuje dla nich formularz w czasie działania.', + 'skills.create.inputs.add': 'Dodaj dane wejściowe', + 'skills.create.inputs.row.name': 'Nazwa danych wejściowych', + 'skills.create.inputs.row.namePlaceholder': 'np. repo', + 'skills.create.inputs.row.nameError': + 'Tylko litery, cyfry, podkreślenia i myślniki; musi zaczynać się od litery.', + 'skills.create.inputs.row.description': 'Opis danych wejściowych', + 'skills.create.inputs.row.descriptionPlaceholder': 'Co należy wpisać w tym polu?', + 'skills.create.inputs.row.type': 'Type', + 'skills.create.inputs.row.required': 'Required', + 'skills.create.inputs.row.remove': 'Usuń dane wejściowe', + 'skills.create.inputs.type.string': 'Text', + 'skills.create.inputs.type.integer': 'Number', + 'skills.create.inputs.type.boolean': 'Tak / Nie', + 'skills.create.license': 'Licencja', + 'skills.create.licensePlaceholder': 'MIT', + 'skills.create.name': 'Nazwa', + 'skills.create.namePlaceholder': 'np. Dziennik transakcji', + 'skills.create.scope': 'Zakres', + 'skills.create.scopeProjectHint': '/.openhuman/skills/', + 'skills.create.scopeUserHint': + 'Zapisane do ~/.openhuman/skills//SKILL.md — dostępne we wszystkich przestrzeniach roboczych.', + 'skills.create.slugLabel': 'Etykieta slug', + 'skills.create.subtitle': 'SKILL.md', + 'skills.create.tags': 'Tagi', + 'skills.create.tagsPlaceholder': 'handel, badania', + 'skills.create.title': 'Nowa umiejętność', + 'skills.detail.allowedTools': 'Dozwolone narzędzia', + 'skills.detail.author': 'Autor', + 'skills.detail.bundledResources': 'Dołączone zasoby', + 'skills.detail.closeAriaLabel': 'Zamknij szczegóły umiejętności', + 'skills.detail.location': 'Lokalizacja', + 'skills.detail.noBundledResources': 'Brak dołączonych zasobów.', + 'skills.detail.tags': 'Tagi', + 'skills.detail.warnings': 'Ostrzeżenia', + 'skills.install.errors.alreadyInstalledHint': + 'Umiejętność z tym slugiem już istnieje w przestrzeni roboczej. Usuń ją najpierw lub zmień `metadata.id` / `name` w frontmatter.', + 'skills.install.errors.alreadyInstalledTitle': 'Umiejętność już zainstalowana', + 'skills.install.errors.fetchFailedHint': + 'Żądanie nie zostało zrealizowane pomyślnie. Sprawdź, że URL wskazuje na osiągalny plik publiczny i że host zwrócił odpowiedź 2xx.', + 'skills.install.errors.fetchFailedTitle': 'Pobieranie nie powiodło się', + 'skills.install.errors.fetchTimedOutHint': + 'Zdalny host nie odpowiedział w czasie. Spróbuj ponownie lub zwiększ limit czasu (1-600 s).', + 'skills.install.errors.fetchTimedOutTitle': 'Przekroczono limit czasu pobierania', + 'skills.install.errors.fetchTooLargeHint': + 'SKILL.md musi mieć poniżej 1 MiB. Podziel dołączone zasoby na pliki `references/` lub `scripts/` zamiast wstawiać je inline.', + 'skills.install.errors.fetchTooLargeTitle': 'SKILL.md zbyt duży', + 'skills.install.errors.genericHint': 'Backend zwrócił błąd. Surowa wiadomość pokazana poniżej.', + 'skills.install.errors.genericTitle': 'Nie udało się zainstalować umiejętności', + 'skills.install.errors.invalidSkillHint': + 'Frontmatter musi być poprawnym YAML-em z niepustymi polami `name` i `description`, zakończonym `---`.', + 'skills.install.errors.invalidSkillTitle': 'SKILL.md nie został sparsowany', + 'skills.install.errors.invalidUrlHint': + 'Dozwolone są tylko publiczne adresy HTTPS. Prywatne, loopback i metadanowe hosty są zablokowane.', + 'skills.install.errors.invalidUrlTitle': 'URL odrzucony', + 'skills.install.errors.unsupportedUrlHint': + 'Działają tylko bezpośrednie linki `.md`. Dla GitHuba linkuj do pliku (github.com/owner/repo/blob/.../SKILL.md) — drzewa i korzenie repo nie są instalowane.', + 'skills.install.errors.unsupportedUrlTitle': 'Forma URL nieobsługiwana', + 'skills.install.errors.writeFailedHint': + 'Katalog umiejętności w przestrzeni roboczej nie był zapisywalny. Sprawdź uprawnienia systemu plików dla `/.openhuman/skills/`.', + 'skills.install.errors.writeFailedTitle': 'Nie udało się zapisać SKILL.md', + 'skills.install.fetchLog': 'Dziennik pobierania', + 'skills.install.fetchingPrefix': 'Pobieranie', + 'skills.install.fetchingSuffix': 'może to potrwać do skonfigurowanego limitu czasu.', + 'skills.install.installBtn': 'Instalowanie…', + 'skills.install.installComplete': 'Instalacja zakończona', + 'skills.install.installing': 'Instalowanie…', + 'skills.install.parseWarnings': 'Ostrzeżenia parsowania', + 'skills.install.rawError': 'Surowy błąd', + 'skills.install.subtitleMiddle': 'przez HTTPS i instaluje pod', + 'skills.install.subtitlePrefix': 'Pobiera pojedynczy', + 'skills.install.subtitleSuffix': 'tylko HTTPS; prywatne i loopback hosty są zablokowane.', + 'skills.install.successDiscovered': 'Odkryto {count} nowych umiejętności.', + 'skills.install.successNoNewIds': + 'Umiejętność zainstalowana, ale nie pojawiły się nowe ID — katalog może już zawierać umiejętność z tym samym slugiem.', + 'skills.install.timeoutHint': '(sekundy, opcjonalne)', + 'skills.install.timeoutHelp': + 'Domyślnie 60 sekund. Wartości spoza zakresu 1-600 są ograniczane po stronie serwera.', + 'skills.install.timeoutInvalid': 'Musi być liczbą całkowitą między 1 a 600.', + 'skills.install.timeoutLabel': 'Limit czasu', + 'skills.install.timeoutPlaceholder': '60', + 'skills.install.title': 'Zainstaluj umiejętność z URL', + 'skills.install.urlHelpMiddle': 'plik.', + 'skills.install.urlHelpPrefix': 'Bezpośredni link do', + 'skills.install.urlHelpSuffix': 'URL-e przepisują się na', + 'skills.install.urlInvalidPrefix': 'URL musi być poprawnie sformułowanym', + 'skills.install.urlInvalidSuffix': 'linkiem.', + 'skills.install.urlLabel': 'URL umiejętności', + 'skills.install.urlPlaceholder': 'https://raw.githubusercontent.com/owner/repo/main/SKILL.md', + 'skills.meetingBots.bannerDesc': + 'Wklej link Google Meet, a OpenHuman dołączy jako gość, mówi, słucha i odpowiada.', + 'skills.meetingBots.bannerTitle': 'Wyślij OpenHuman na spotkanie', + 'skills.meetingBots.busyTitle': 'OpenHuman jest zajęty', + 'skills.meetingBots.comingSoon': 'Wkrótce', + 'skills.meetingBots.couldNotStartTitle': 'Nie udało się uruchomić OpenHuman', + 'skills.meetingBots.displayName': 'Wyświetlana nazwa', + 'skills.meetingBots.failedToStart': 'Nie udało się uruchomić OpenHuman.', + 'skills.meetingBots.joiningMessage': 'Powinien pojawić się jako uczestnik w ciągu kilku sekund.', + 'skills.meetingBots.joiningTitle': 'OpenHuman dołącza do spotkania', + 'skills.meetingBots.meetingLink': 'Link spotkania', + 'skills.meetingBots.modalAriaLabel': 'Wyślij OpenHuman na spotkanie', + 'skills.meetingBots.modalDesc': + 'OpenHuman dołącza jako anonimowy gość, transmituje wideo do rozmowy i odpowiada przez agenta.', + 'skills.meetingBots.modalTitle': 'Wyślij OpenHuman na spotkanie', + 'skills.meetingBots.newBadge': 'Nowość', + 'skills.meetingBots.platformComingSoon': 'Obsługa {label} jest już wkrótce.', + 'skills.meetingBots.platformHints.gmeet': 'meet.google.com/abc-defg-hij', + 'skills.meetingBots.platformHints.teams': 'teams.microsoft.com/...', + 'skills.meetingBots.platformHints.zoom': 'zoom.us/j/...', + 'skills.meetingBots.platforms.gmeet': 'Google Meet', + 'skills.meetingBots.platforms.teams': 'Microsoft Teams', + 'skills.meetingBots.platforms.zoom': 'Zoom', + 'skills.meetingBots.sendTo': 'Wyślij do', + 'skills.meetingBots.soonSuffix': 'wkrótce', + 'skills.meetingBots.starting': 'Uruchamianie…', + 'skills.resource.preview.closeAriaLabel': 'Zamknij podgląd', + 'skills.resource.preview.failed': 'Podgląd nie powiódł się', + 'skills.resource.preview.loading': 'Wczytywanie podglądu…', + 'skills.resource.tree.empty': 'Brak dołączonych zasobów.', + 'skills.search.placeholder': 'Szukaj umiejętności...', + 'skills.setup.autocomplete.acceptKey': 'Klawisz akceptacji', + 'skills.setup.autocomplete.activeDesc': + 'Autouzupełnianie działa. Akceptuj sugestie klawiszem skrótu.', + 'skills.setup.autocomplete.activeTitle': 'Autouzupełnianie jest aktywne', + 'skills.setup.autocomplete.customizeSettings': 'Dostosuj ustawienia', + 'skills.setup.autocomplete.debounce': 'Debounce', + 'skills.setup.autocomplete.description': + 'Sugestie wierszowe podczas pisania w polach tekstowych.', + 'skills.setup.autocomplete.enableBtn': 'Włączanie...', + 'skills.setup.autocomplete.enableError': 'Nie udało się włączyć autouzupełniania', + 'skills.setup.autocomplete.enabling': 'Włączanie...', + 'skills.setup.autocomplete.notSupported': 'Nieobsługiwane', + 'skills.setup.autocomplete.stepEnable': 'Włącz uzupełnienia wierszowe', + 'skills.setup.autocomplete.stepSuccess': 'Gotowe', + 'skills.setup.autocomplete.stylePreset': 'Preset stylu', + 'skills.setup.autocomplete.stylePresetValue': 'Zrównoważony (konfigurowalny później)', + 'skills.setup.autocomplete.title': 'Autouzupełnianie tekstu', + 'skills.setup.screenIntel.activeDesc': 'Inteligencja ekranu działa. Wybrane okna są obserwowane.', + 'skills.setup.screenIntel.activeTitle': 'Inteligencja ekranu jest włączona', + 'skills.setup.screenIntel.advancedSettings': 'Ustawienia zaawansowane', + 'skills.setup.screenIntel.allGranted': 'Wszystkie uprawnienia przyznane', + 'skills.setup.screenIntel.captureMode': 'Tryb przechwytywania', + 'skills.setup.screenIntel.captureModeValue': 'Wszystkie okna (konfigurowalne później)', + 'skills.setup.screenIntel.deniedHint': + 'Po przyznaniu uprawnień w Ustawieniach systemowych kliknij poniżej, aby zrestartować i odświeżyć zmiany.', + 'skills.setup.screenIntel.enableBtn': 'Włączanie...', + 'skills.setup.screenIntel.enableDesc': + 's na Twoim ekranie i dostarczają użytecznego kontekstu agentowi', + 'skills.setup.screenIntel.enableError': 'Nie udało się włączyć inteligencji ekranu', + 'skills.setup.screenIntel.enabling': 'Włączanie...', + 'skills.setup.screenIntel.grant': 'Otwieranie...', + 'skills.setup.screenIntel.granted': 'Przyznano', + 'skills.setup.screenIntel.macosOnly': 'Tylko macOS', + 'skills.setup.screenIntel.opening': 'Otwieranie...', + 'skills.setup.screenIntel.panicHotkey': 'Skrót awaryjny', + 'skills.setup.screenIntel.permAccessibility': 'Dostępność', + 'skills.setup.screenIntel.permInputMonitoring': 'Monitorowanie wejścia', + 'skills.setup.screenIntel.permScreenRecording': 'Nagrywanie ekranu', + 'skills.setup.screenIntel.permissionsDesc': 'Inteligencja ekranu wymaga uprawnień systemowych:', + 'skills.setup.screenIntel.permissionPathLabel': 'macOS stosuje politykę prywatności do:', + 'skills.setup.screenIntel.refreshStatus': 'Odśwież status', + 'skills.setup.screenIntel.restartRefresh': 'Restartowanie...', + 'skills.setup.screenIntel.restarting': 'Restartowanie...', + 'skills.setup.screenIntel.stepEnable': 'Włącz umiejętność', + 'skills.setup.screenIntel.stepPermissions': 'Przyznaj uprawnienia', + 'skills.setup.screenIntel.stepSuccess': 'Gotowe', + 'skills.setup.screenIntel.title': 'Inteligencja ekranu', + 'skills.setup.screenIntel.visionModel': 'Model wizji', + 'skills.setup.voice.activation': 'Aktywacja', + 'skills.setup.voice.activeDescPrefix': 'Fn', + 'skills.setup.voice.activeDescSuffix': 'Fn', + 'skills.setup.voice.activeTitle': 'Inteligencja głosowa jest aktywna', + 'skills.setup.voice.customizeSettings': 'Dostosuj ustawienia', + 'skills.setup.voice.downloadSttBtn': 'Pobierz model STT', + 'skills.setup.voice.enableDesc': 'Włącz dyktowanie głosowe i odpowiedzi głosowe.', + 'skills.setup.voice.hotkey': 'Skrót klawiszowy', + 'skills.setup.voice.startBtn': 'Uruchamianie...', + 'skills.setup.voice.startError': 'Nie udało się uruchomić serwera głosowego', + 'skills.setup.voice.starting': 'Uruchamianie...', + 'skills.setup.voice.stepEnable': 'Uruchom serwer głosowy', + 'skills.setup.voice.stepSetup': 'Wymagane pobranie modelu', + 'skills.setup.voice.stepSuccess': 'Gotowe', + 'skills.setup.voice.sttNotReady': 'Model speech-to-text niegotowy', + 'skills.setup.voice.sttNotReadyDesc': + 'Inteligencja głosowa wymaga lokalnego modelu Whisper do transkrypcji. Pobierz go z ustawień modelu lokalnego.', + 'skills.setup.voice.sttReady': 'Model speech-to-text gotowy', + 'skills.setup.voice.sttReturnHint': 'Wróć tutaj po pobraniu modelu.', + 'skills.setup.voice.title': 'Inteligencja głosowa', + 'skills.uninstall.couldNotUninstall': 'Nie udało się odinstalować', + 'skills.uninstall.description': + 'Permanentnie usuwa katalog umiejętności i wszystkie dołączone zasoby. Agent przestanie je widzieć w następnej turze.', + 'skills.uninstall.title': 'Odinstaluj', + 'skills.uninstall.uninstallBtn': 'Odinstaluj', + 'skills.uninstall.uninstalling': 'Odinstalowywanie…', + 'upsell.global.limitMessage': 'Podnieś plan lub doładuj kredyty, aby kontynuować', + 'upsell.global.limitTitle': 'Ty', + 'upsell.global.nearLimitMessage': + 'Wykorzystano {pct}% limitu użycia. Podnieś plan, aby zwiększyć limity.', + 'upsell.global.nearLimitTitle': 'Zbliżasz się do limitu użycia', + 'upsell.usageLimit.bodyBudget': + 'Osiągnięto tygodniowy limit.{reset} Podnieś plan lub doładuj kredyty, aby uniknąć limitów.', + 'upsell.usageLimit.bodyRate': + 'Osiągnięto 10-godzinny limit szybkości inferencji.{reset} Podnieś plan, aby zwiększyć limity.', + 'upsell.usageLimit.heading': 'Osiągnięto limit użycia', + 'upsell.usageLimit.notNow': 'Nie teraz', + 'upsell.usageLimit.perWindow': '{amount}', + 'upsell.usageLimit.planIncludes': '{plan}', + 'upsell.usageLimit.resetsIn': 'Resetuje się {time}.', + 'upsell.usageLimit.upgradePlan': 'Podnieś plan', + 'upsell.usageLimit.weeklyInference': '{amount}', + 'walkthrough.tooltip.letsGo': 'Zaczynamy!', + 'walkthrough.tooltip.next': 'Dalej →', + 'walkthrough.tooltip.skip': 'Pomiń przewodnik', + 'walkthrough.tooltip.stepCounter': '{n} z {total}', + 'webhooks.activity.empty': 'Brak aktywności.', + 'webhooks.activity.title': 'Ostatnia aktywność', + 'webhooks.composioHistory.empty': 'Brak historii.', + 'webhooks.composioHistory.metadataId': 'ID metadanych', + 'webhooks.composioHistory.metadataUuid': 'UUID metadanych', + 'webhooks.composioHistory.payload': 'Ładunek', + 'webhooks.composioHistory.title': 'Historia wyzwalaczy ComposeIO', + 'webhooks.tunnels.active': 'Aktywny', + 'webhooks.tunnels.createFailed': 'Nie udało się utworzyć tunelu', + 'webhooks.tunnels.creating': 'Tworzenie...', + 'webhooks.tunnels.deleteFailed': 'Nie udało się usunąć tunelu', + 'webhooks.tunnels.descriptionPlaceholder': 'Opis (opcjonalny)', + 'webhooks.tunnels.echo': 'Echo', + 'webhooks.tunnels.empty': 'Brak tuneli.', + 'webhooks.tunnels.enableEcho': 'Włącz Echo', + 'webhooks.tunnels.inactive': 'Nieaktywny', + 'webhooks.tunnels.namePlaceholder': 'Nazwa tunelu (np. telegram-bot)', + 'webhooks.tunnels.newTunnel': 'Nowy tunel', + 'webhooks.tunnels.removeEcho': 'Usuń Echo', + 'webhooks.tunnels.title': 'Tunele webhooków', + 'webhooks.tunnels.toggleFailed': 'Nie udało się przełączyć echa', + 'composio.directModeRequiresKey': + 'Nie udało się zapisać. Tryb bezpośredni wymaga niepustego klucza API.', + 'composio.integrationSlugsHelp': 'Slugi integracji rozdzielone przecinkami, np.', + 'composio.integrationSlugsExample': 'gmail, slack', + 'composio.integrationSlugsCaseInsensitive': 'Bez rozróżniania wielkości liter.', + 'composio.integrationSlugsPlaceholder': 'gmail, slack, ...', + 'composio.notYetRouted': 'jeszcze nie trasowane', + 'composio.triggers.loading': 'Wczytywanie…', + 'conversations.taskKanban.todo': 'Do zrobienia', + 'chat.addReaction': 'Dodaj reakcję', + 'chat.agentProfile.create': 'Utwórz profil agenta', + 'chat.agentProfile.createFailed': 'Nie udało się utworzyć profilu agenta.', + 'chat.agentProfile.customDescription': 'Niestandardowy profil agenta', + 'chat.agentProfile.defaultAgentLabel': 'Orchestrator', + 'chat.agentProfile.exists': 'Profil agenta „{name}” już istnieje.', + 'chat.agentProfile.label': 'Profil agenta', + 'chat.agentProfile.namePlaceholder': 'Nazwa profilu', + 'chat.agentProfile.promptStylePlaceholder': 'Styl promptu', + 'chat.agentProfile.allowedToolsPlaceholder': 'Dozwolone narzędzia', + 'chat.backToThread': 'wróć do {title}', + 'chat.parentThread': 'wątek nadrzędny', + 'chat.removeReaction': 'Usuń {emoji}', + 'settings.composio.loading': 'Wczytywanie…', + 'settings.mascot.noCharactersAvailable': 'Nie ma jeszcze dostępnych postaci OpenHuman', + 'skills.uninstall.confirmTitle': 'Odinstalować {name}?', + 'conversations.taskKanban.blocked': 'Zablokowane', + 'conversations.taskKanban.done': 'Zrobione', + 'conversations.taskKanban.pending': 'Oczekujące', + 'conversations.taskKanban.working': 'W pracy', + 'conversations.taskKanban.awaitingApproval': 'Oczekuje na zatwierdzenie', + 'conversations.taskKanban.ready': 'Gotowe', + 'conversations.taskKanban.rejected': 'Odrzucone', + 'conversations.taskKanban.inProgress': 'W toku', + 'intelligence.memoryChunk.detail.copiedHint': 'skopiowano', + 'settings.composio.notYetRouted': 'jeszcze nie trasowane', + 'settings.localModel.download.manageExternal': + 'Zarządzaj tym modelem w swoim zewnętrznym środowisku.', + 'settings.localModel.status.manageOllamaExternal': + 'Zarządzaj procesem Ollama i pobraniami modeli poza OpenHumanem, a następnie uruchom ponownie diagnostykę.', + 'settings.localModel.status.ollamaDocs': 'Dokumentacja Ollama', + 'settings.localModel.status.thenRetry': + 'po instrukcje konfiguracji, a następnie spróbuj ponownie, gdy środowisko będzie osiągalne.', + 'devOptions.menuAi': 'Konfiguracja AI', + 'devOptions.menuAiDesc': 'Dostawcy chmurowi, lokalne modele Ollama i trasowanie per workload', + 'devOptions.menuScreenAware': 'Świadomość ekranu', + 'devOptions.menuScreenAwareDesc': + 'Uprawnienia do przechwytywania ekranu, polityka monitorowania i kontrola sesji', + 'devOptions.menuMessaging': 'Kanały komunikacji', + 'devOptions.menuMessagingDesc': + 'Konfiguruj tryby uwierzytelniania Telegram/Discord i domyślne trasowanie', + 'devOptions.menuTools': 'Narzędzia', + 'devOptions.menuToolsDesc': + 'Włącz lub wyłącz możliwości, z których OpenHuman może korzystać w Twoim imieniu', + 'devOptions.menuAgentChat': 'Czat z agentem', + 'devOptions.menuAgentChatDesc': 'Testuj rozmowę z agentem z nadpisaniem modelu i temperatury', + 'devOptions.menuCronJobs': 'Zadania cron', + 'devOptions.menuCronJobsDesc': + 'Przeglądaj i konfiguruj zaplanowane zadania dla umiejętności runtime', + 'devOptions.menuLocalModelDebug': 'Debug modelu lokalnego', + 'devOptions.menuLocalModelDebugDesc': + 'Konfiguracja Ollama, pobieranie zasobów, testy modeli i diagnostyka', + 'devOptions.menuWebhooksDebug': 'Webhooki', + 'devOptions.menuWebhooksDebugDesc': + 'Sprawdź rejestracje webhooków w runtime i logi przechwyconych żądań', + 'devOptions.menuIntelligence': 'Inteligencja', + 'devOptions.menuIntelligenceDesc': 'Przestrzeń pamięci, silnik podświadomości, sny i ustawienia', + 'devOptions.menuNotificationRouting': 'Trasowanie powiadomień', + 'devOptions.menuNotificationRoutingDesc': + 'Punktacja ważności AI i eskalacja przez orkiestrator dla alertów integracji', + 'devOptions.menuComposeIOTriggers': 'Wyzwalacze ComposeIO', + 'devOptions.menuComposeIOTriggersDesc': 'Przeglądaj historię i archiwum wyzwalaczy ComposeIO', + 'devOptions.menuComposioRouting': 'Trasowanie Composio (tryb bezpośredni)', + 'devOptions.menuComposioRoutingDesc': + 'Użyj własnego klucza API Composio i kieruj wywołania bezpośrednio do backend.composio.dev', + 'devOptions.menuComposioTriggers': 'Wyzwalacze integracji', + 'devOptions.menuComposioTriggersDesc': + 'Konfiguruj ustawienia klasyfikacji AI dla wyzwalaczy integracji Composio', + 'memory.sourceFilterAria': 'Filtruj po źródle', + 'calls.comingSoonDescription': 'Połączenia wspierane AI pojawią się wkrótce. Bądź na bieżąco.', + 'vault.title': 'Skarbce wiedzy (Eksperymentalne)', + 'vault.description': + 'Wskaż lokalny folder; pliki zostaną podzielone i odzwierciedlone w pamięci.', + 'vault.add': 'Dodaj skarbiec', + 'vault.added': 'Skarbiec dodany', + 'vault.createdMessage': 'Utworzono „{name}”. Kliknij {sync}, aby zaindeksować.', + 'vault.couldNotAdd': 'Nie udało się dodać skarbca', + 'vault.syncFailed': 'Synchronizacja nieudana', + 'vault.syncFailedFor': 'Synchronizacja „{name}” nieudana', + 'vault.syncFailedFiles': 'Nieudane pliki: {count}', + 'vault.syncedTitle': 'Zsynchronizowano „{name}”', + 'vault.syncSummary': 'Zaindeksowano: {ingested}, bez zmian: {unchanged}, usunięto: {removed}', + 'vault.syncSummaryFailed': ', nieudane: {count}', + 'vault.syncSummarySkipped': ', pominięte: {count}', + 'vault.syncSummaryDuration': ' · {seconds} s', + 'vault.confirmRemovePurge': + 'Usunąć skarbiec „{name}”?\n\nKliknij OK, aby również wyczyścić jego pamięć (usunąć wszystkie {count} zaindeksowane dokumenty).\nKliknij Anuluj, aby zachować dokumenty w pamięci.', + 'vault.confirmRemove': 'Na pewno usunąć skarbiec „{name}”?', + 'vault.removed': 'Skarbiec usunięty', + 'vault.removedPurgedMessage': 'Usunięto „{name}” i wyczyszczono pamięć.', + 'vault.removedKeptMessage': 'Usunięto „{name}”. Dokumenty pozostają w pamięci.', + 'vault.couldNotRemove': 'Nie udało się usunąć skarbca', + 'vault.name': 'Nazwa', + 'vault.namePlaceholder': 'Moje notatki badawcze', + 'vault.folderPath': 'Ścieżka folderu (bezwzględna)', + 'vault.folderPathPlaceholder': '/Users/ty/Documents/notatki', + 'vault.excludes': 'Wykluczenia (po przecinku, opcjonalnie)', + 'vault.excludesPlaceholder': 'wersje robocze/, .sekret', + 'vault.creating': 'Tworzenie…', + 'vault.create': 'Utwórz skarbiec', + 'vault.loading': 'Ładowanie skarbców…', + 'vault.failedToLoad': 'Nie udało się załadować skarbców: {error}', + 'vault.empty': 'Brak skarbców. Dodaj jeden powyżej, aby zacząć indeksować folder.', + 'vault.fileCount': 'Plików: {count}', + 'vault.syncedRelative': 'zsynchronizowano {time}', + 'vault.neverSynced': 'nigdy nie synchronizowano', + 'vault.syncingProgress': 'Synchronizowanie… {ingested}/{total}', + 'vault.removing': 'Usuwanie…', + 'vault.relative.sec': '{count} s temu', + 'vault.relative.min': '{count} min temu', + 'vault.relative.hr': '{count} godz. temu', + 'vault.relative.day': '{count} dni temu', + 'whatsapp.title': 'WhatsApp', + 'subconscious.interval.fiveMinutes': '5 min', + 'subconscious.interval.tenMinutes': '10 min', + 'subconscious.interval.fifteenMinutes': '15 min', + 'subconscious.interval.thirtyMinutes': '30 min', + 'subconscious.interval.oneHour': '1 godz.', + 'subconscious.interval.sixHours': '6 godz.', + 'subconscious.interval.twelveHours': '12 godz.', + 'subconscious.interval.oneDay': '1 dzień', + 'subconscious.priority.critical': 'krytyczne', + 'subconscious.priority.important': 'ważne', + 'subconscious.priority.normal': 'normalne', + 'subconscious.durationSeconds': '{seconds} s', + 'subconscious.durationMilliseconds': '{milliseconds} ms', + 'settings.appearance': 'Wygląd', + 'settings.appearanceDesc': 'Wybierz tryb jasny, ciemny lub zgodny z systemem', + 'settings.mascot': 'Maskotka', + 'settings.mascotDesc': 'Wybierz kolor maskotki używany w aplikacji', + 'pages.settings.account.walletBalances': 'Salda portfela', + 'pages.settings.account.walletBalancesDesc': + 'Przeglądaj salda wielu sieci dla swojego lokalnego portfela', + 'walletBalances.title': 'Salda portfela', + 'walletBalances.refresh': 'Refresh', + 'walletBalances.loading': 'Ładowanie sald…', + 'walletBalances.retry': 'Retry', + 'walletBalances.emptyState': + 'Brak kont portfela — skonfiguruj portfel w sekcji Fraza odzyskiwania.', + 'walletBalances.copyAddress': 'Kopiuj adres', + 'walletBalances.providerMissing': 'dostawca niedostępny', + 'walletBalances.rawBalance': 'Nieprzetworzone: {raw}', + 'walletBalances.errorGeneric': + 'Nie można załadować sald portfela. Skonfiguruj portfel w sekcji Fraza odzyskiwania i spróbuj ponownie.', + 'settings.taskSources.title': 'Źródła zadań', + 'settings.taskSources.subtitle': 'Pobieraj zadania z narzędzi na tablicę zadań agenta', + 'settings.taskSources.description': + 'Zbieraj elementy pracy z GitHub, Notion, Linear i ClickUp, wzbogacaj je i kieruj na tablicę zadań agenta.', + 'settings.taskSources.connectHint': + 'Źródła zadań używają połączonych kont. Najpierw połącz je w Integracjach.', + 'settings.taskSources.disabledBanner': + 'Źródła zadań są wyłączone w ustawieniach. Włącz je, aby automatycznie odpytywać.', + 'settings.taskSources.loadError': 'Nie udało się wczytać źródeł zadań', + 'settings.taskSources.addTitle': 'Dodaj źródło zadań', + 'settings.taskSources.provider': 'Dostawca', + 'settings.taskSources.name': 'Nazwa (opcjonalnie)', + 'settings.taskSources.namePlaceholder': 'np. Moje otwarte zgłoszenia', + 'settings.taskSources.github.repo': 'Repozytorium (właściciel/nazwa, opcjonalnie)', + 'settings.taskSources.github.labels': 'Etykiety (rozdzielone przecinkami)', + 'settings.taskSources.notion.database': 'ID bazy danych (tablicy)', + 'settings.taskSources.linear.team': 'ID zespołu (opcjonalnie)', + 'settings.taskSources.clickup.team': 'ID przestrzeni roboczej (zespołu, opcjonalnie)', + 'settings.taskSources.assignedToMe': 'Tylko elementy przypisane do mnie', + 'settings.taskSources.add': 'Dodaj źródło', + 'settings.taskSources.adding': 'Dodawanie…', + 'settings.taskSources.preview': 'Podgląd', + 'settings.taskSources.previewResult': '{count} zadań pasuje do tego filtra', + 'settings.taskSources.fetchNow': 'Pobierz teraz', + 'settings.taskSources.fetching': 'Pobieranie…', + 'settings.taskSources.fetchResult': 'Skierowano {routed} z {fetched} zadań', + 'settings.taskSources.configured': 'Skonfigurowane źródła', + 'settings.taskSources.empty': 'Nie skonfigurowano jeszcze źródeł zadań.', + 'settings.taskSources.proactive': 'Proaktywne', + 'settings.taskSources.lastFetch': 'Ostatnie pobranie', + 'settings.taskSources.never': 'Nigdy', + 'settings.taskSources.statusEnabled': 'Włączone', + 'settings.taskSources.statusDisabled': 'Wyłączone', + 'settings.taskSources.enable': 'Włącz', + 'settings.taskSources.disable': 'Wyłącz', + 'settings.taskSources.remove': 'Usuń', + 'settings.taskSources.removeConfirm': + 'Usunąć to źródło zadań? Cała pobrana historia zadań zostanie usunięta i nie będzie można tego cofnąć.', + 'settings.taskSources.refresh': 'Odśwież', + 'settings.taskSources.providers.github': 'GitHub', + 'settings.taskSources.providers.notion': 'Notion', + 'settings.taskSources.providers.linear': 'Linear', + 'settings.taskSources.providers.clickup': 'ClickUp', + 'skills.dashboard.title': 'Skills', + 'skills.dashboard.scheduledHeading': 'Zaplanowane umiejętności', + 'skills.dashboard.emptyTitle': 'Brak zaplanowanych umiejętności', + 'skills.dashboard.emptyBody': + 'Uruchom wbudowaną umiejętność jednorazowo lub zapisz harmonogram cykliczny, aby zobaczyć ją tutaj.', + 'skills.dashboard.create': 'Utwórz umiejętność', + 'skills.dashboard.run': 'Uruchom umiejętność', + 'skills.dashboard.enable': 'Włącz zaplanowaną umiejętność', + 'skills.dashboard.disable': 'Wyłącz zaplanowaną umiejętność', + 'skills.dashboard.lastRun': 'Ostatnie uruchomienie', + 'skills.dashboard.nextRun': 'Następne uruchomienie', + 'skills.dashboard.cardOpenRunner': 'Otwórz w runnerze', + 'skills.dashboard.loadError': 'Nie udało się załadować zaplanowanych umiejętności', + 'skills.new.title': 'Utwórz umiejętność', + 'skills.new.placeholderBody': + 'Formularz tworzenia pojawi się wkrótce. Na razie użyj przycisku „Nowa umiejętność” na stronie runnera.', + 'settings.agents.title': 'Agenci', + 'settings.agents.subtitle': + 'Zarządzaj agentami dostępnymi do delegowania — wbudowanymi domyślnymi i własnymi niestandardowymi agentami.', + 'settings.agents.menuDesc': 'Zarządzaj wbudowanymi i niestandardowymi agentami', + 'settings.agents.newAgent': 'Nowy agent', + 'settings.agents.loadError': 'Nie udało się wczytać agentów', + 'settings.agents.empty': 'Brak agentów', + 'settings.agents.sourceDefault': 'Wbudowany', + 'settings.agents.sourceCustom': 'Niestandardowy', + 'settings.agents.enable': 'Włącz agenta', + 'settings.agents.disable': 'Wyłącz agenta', + 'settings.agents.edit': 'Edytuj', + 'settings.agents.delete': 'Usuń', + 'settings.agents.reset': 'Przywróć domyślne', + 'settings.agents.modelLabel': 'Model agenta', + 'settings.agents.toolsLabel': 'Narzędzia', + 'settings.agents.toolsAll': 'Wszystkie narzędzia', + 'settings.agents.toolsCount': '{count} narzędzi', + 'settings.agents.actionFailed': 'Nie udało się zaktualizować agenta', + 'settings.agents.orchestratorLocked': 'Orkiestrator jest zawsze włączony.', + 'settings.agents.editor.createTitle': 'Nowy agent', + 'settings.agents.editor.editTitle': 'Edytuj agenta', + 'settings.agents.editor.id': 'Identyfikator', + 'settings.agents.editor.idHint': 'Tylko małe litery, cyfry, _ i -.', + 'settings.agents.editor.name': 'Nazwa', + 'settings.agents.editor.description': 'Opis', + 'settings.agents.editor.model': 'Model (opcjonalnie)', + 'settings.agents.editor.modelPlaceholder': 'np. inherit, hint:fast albo identyfikator modelu', + 'settings.agents.editor.systemPrompt': 'Prompt systemowy (opcjonalnie)', + 'settings.agents.editor.tools': 'Dozwolone narzędzia', + 'settings.agents.editor.toolsHint': + 'Jedna nazwa narzędzia w wierszu. Użyj * dla wszystkich narzędzi.', + 'settings.agents.editor.defaultsNote': + 'Edycja wbudowanego agenta zapisuje nadpisanie, które możesz później zresetować.', + 'settings.agents.editor.save': 'Zapisz', + 'settings.agents.editor.create': 'Utwórz agenta', + 'settings.agents.editor.saving': 'Zapisywanie…', + 'settings.agentsSection.title': 'Agents', + 'settings.agentsSection.description': + 'Zarządzaj agentami, ich autonomią i tym, do czego mogą uzyskać dostęp na tym komputerze.', + 'settings.agentsSection.menuDesc': 'Rejestr, autonomia i dostęp do systemu', + 'settings.agents.editor.notFound': 'Nie znaleziono agenta.', + 'settings.agents.editor.modelInherit': 'Dziedzicz (domyślne platformy)', + 'settings.agents.editor.modelHints': 'Wskazówki trasowania', + 'settings.agents.editor.modelTiers': 'Poziomy modelu', + 'settings.agents.editor.modelCustom': 'Własny identyfikator modelu…', + 'settings.agents.editor.modelCustomPlaceholder': 'np. anthropic/claude-sonnet-4', + 'settings.agents.editor.selectTools': 'Dodaj narzędzia', + 'settings.agents.editor.toolsAllSelected': 'Wszystkie narzędzia', + 'settings.agents.editor.toolsNoneSelected': 'Nie wybrano narzędzi', + 'settings.agents.editor.removeToolAria': 'Usuń {tool}', + 'settings.agents.editor.toolsModalTitle': 'Dozwolone narzędzia', + 'settings.agents.editor.toolsSelectedCount': '{count} wybrano', + 'settings.agents.editor.toolsSearchPlaceholder': 'Szukaj narzędzi…', + 'settings.agents.editor.toolsAllowAll': 'Zezwól na wszystkie narzędzia (*)', + 'settings.agents.editor.toolsAllowAllHint': + 'Ten agent może korzystać z każdego dostępnego narzędzia.', + 'settings.agents.editor.toolsLoading': 'Ładowanie narzędzi…', + 'settings.agents.editor.toolsLoadError': 'Nie udało się załadować narzędzi', + 'settings.agents.editor.toolsEmpty': 'Żadne narzędzie nie pasuje do wyszukiwania.', + 'settings.agents.editor.toolsDone': 'Done', + 'settings.agents.editor.builtInReadonly': + 'Wbudowanych agentów nie można edytować. Możesz je włączyć, wyłączyć lub zresetować z poziomu listy agentów.', }; -export default pl; +export default messages; diff --git a/app/src/lib/i18n/pt.ts b/app/src/lib/i18n/pt.ts index ecabdb95e..d9e8f1508 100644 --- a/app/src/lib/i18n/pt.ts +++ b/app/src/lib/i18n/pt.ts @@ -1,32 +1,4154 @@ -import pt1 from './chunks/pt-1'; -import pt2 from './chunks/pt-2'; -import pt3 from './chunks/pt-3'; -import pt4 from './chunks/pt-4'; -import pt5 from './chunks/pt-5'; import type { TranslationMap } from './types'; -// Portuguese (Português) translations. Each chunk maps to chunks/en-N.ts. -// Missing keys fall back to English via I18nContext.resolveEn(). -const pt: TranslationMap = { - ...pt1, - ...pt2, - ...pt3, - ...pt4, - ...pt5, +// Portuguese (Português) translations. Keys mirror en.ts; missing/ +// English-identical values fall back to English via I18nContext.resolveEn(). +const messages: TranslationMap = { + 'nav.home': 'Início', + 'nav.human': 'Humano', + 'nav.chat': 'Bate-papo', + 'nav.connections': 'Conexões', + 'nav.memory': 'Inteligência', + 'nav.alerts': 'Alertas', + 'nav.rewards': 'Recompensas', + 'nav.settings': 'Configurações', + 'common.cancel': 'Cancelar', + 'common.save': 'Salvar', + 'common.confirm': 'Confirmar', + 'common.delete': 'Excluir', + 'common.edit': 'Editar', + 'common.create': 'Criar', + 'common.search': 'Pesquisar', + 'common.loading': 'carregando…', + 'common.error': 'Erro', + 'common.success': 'Sucesso', + 'common.back': 'Voltar', + 'common.next': 'Próximo', + 'common.finish': 'Concluir', + 'common.close': 'Fechar', + 'common.enabled': 'Ativado', + 'common.disabled': 'Desativado', + 'common.on': 'Ligado', + 'common.off': 'Desligado', + 'common.yes': 'Sim', + 'common.no': 'Não', + 'common.ok': 'Entendi', + 'common.name': 'Nome', + 'common.retry': 'Tentar novamente', + 'common.copy': 'Copiar', + 'common.copied': 'Copiado', + 'common.learnMore': 'Saiba mais', + 'common.seeAll': 'Ver', + 'common.dismiss': 'Dispensar', + 'common.clear': 'Limpar', + 'common.reset': 'Redefinir', + 'common.refresh': 'Atualizar', + 'common.export': 'Exportar', + 'common.import': 'Importar', + 'common.upload': 'Enviar', + 'common.download': 'Baixar', + 'common.add': 'Adicionar', + 'common.remove': 'Remover', + 'common.showMore': 'Mostrar mais', + 'common.showLess': 'Mostrar menos', + 'common.submit': 'Enviar', + 'common.continue': 'Continuar', + 'common.comingSoon': 'Em breve', + 'common.breadcrumb': 'Breadcrumb', + 'settings.general': 'Geral', + 'settings.featuresAndAI': 'Recursos e IA', + 'settings.billingAndRewards': 'Cobrança e Recompensas', + 'settings.support': 'Suporte', + 'settings.advanced': 'Avançado', + 'settings.dangerZone': 'Zona de Perigo', + 'settings.account': 'Conta', + 'settings.accountDesc': 'Frase de recuperação, equipe, conexões e privacidade', + 'settings.notifications': 'Notificações', + 'settings.notificationsDesc': 'Não Perturbe e controles de notificação por conta', + 'settings.notifications.tabs.preferences': 'Preferências', + 'settings.notifications.tabs.routing': 'Roteamento', + 'settings.features': 'Recursos', + 'settings.featuresDesc': 'Reconhecimento de tela, mensagens e ferramentas', + 'settings.aiModels': 'IA e Modelos', + 'settings.aiModelsDesc': 'Configuração de modelos de IA local, downloads e provedor LLM', + 'settings.ai': 'Configuração de IA', + 'settings.aiDesc': + 'Provedores na nuvem, modelos Ollama locais e roteamento por carga de trabalho', + 'settings.billingUsage': 'Cobrança e Uso', + 'settings.billingUsageDesc': 'Plano de assinatura, créditos e métodos de pagamento', + 'settings.rewards': 'Recompensas', + 'settings.rewardsDesc': 'Indicações, cupons e créditos ganhos', + 'settings.restartTour': 'Reiniciar Tour', + 'settings.restartTourDesc': 'Reproduzir o tutorial do produto desde o início', + 'settings.about': 'Sobre', + 'settings.aboutDesc': 'Versão do app e atualizações de software', + 'settings.developerOptions': 'Avançado', + 'settings.developerOptionsDesc': + 'Configuração de IA, canais de mensagens, ferramentas, diagnósticos e painéis de depuração', + 'settings.clearAppData': 'Limpar Dados do App', + 'settings.clearAppDataDesc': 'Sair e excluir permanentemente todos os dados locais do app', + 'settings.logOut': 'Sair', + 'settings.logOutDesc': 'Sair da sua conta', + 'settings.exitLocalSession': 'Sair da sessão local', + 'settings.exitLocalSessionDesc': 'Retornar à tela de login', + 'settings.language': 'Idioma', + 'settings.betaBuild': 'Versão beta - v{version}', + 'settings.languageDesc': 'Idioma de exibição da interface do app', + 'settings.alerts': 'Alertas', + 'settings.alertsDesc': 'Ver alertas recentes e atividades na sua caixa de entrada', + 'settings.account.recoveryPhrase': 'Frase de Recuperação', + 'settings.account.recoveryPhraseDesc': 'Ver e fazer backup da sua frase de recuperação de conta', + 'settings.account.team': 'Equipe', + 'settings.account.teamDesc': 'Gerenciar membros da equipe e permissões', + 'settings.account.connections': 'Conexões', + 'settings.account.connectionsDesc': 'Gerenciar contas e serviços vinculados', + 'settings.account.privacy': 'Privacidade', + 'settings.account.privacyDesc': 'Controlar quais dados saem do seu computador', + 'migration.title': 'Importar de outro assistente', + 'migration.description': + 'Migre memória e anotações de outro assistente local para este espaço de trabalho. Comece com uma Pré-visualização para ver exatamente o que mudaria, depois clique em Aplicar para copiar os dados. Sua memória atual é salva primeiro.', + 'migration.vendorLabel': 'Fornecedor de origem', + 'migration.vendor.openclaw': 'OpenClaw', + 'migration.vendor.hermes': 'Hermes Agent', + 'migration.sourceLabel': 'Caminho do espaço de trabalho de origem (opcional)', + 'migration.sourcePlaceholder': + 'Deixe em branco para detecção automática (ex.: ~/.openclaw/workspace)', + 'migration.sourcePlaceholderHermes': + 'Deixe em branco para detectar automaticamente (ex.: ~/.hermes)', + 'migration.sourceHint': + 'Em branco usa o local padrão do fornecedor. Informe um caminho explícito se você moveu o espaço de trabalho.', + 'migration.previewAction': 'Pré-visualizar', + 'migration.previewRunning': 'Pré-visualizando…', + 'migration.applyAction': 'Aplicar importação', + 'migration.applyRunning': 'Importando…', + 'migration.applyDisclaimer': + 'Aplicar é desbloqueado após uma Pré-visualização bem-sucedida da mesma origem. A memória existente é salva antes de qualquer importação.', + 'migration.reportTitlePreview': 'Pré-visualização — nada importado ainda', + 'migration.reportTitleApplied': 'Importação concluída', + 'migration.report.source': 'Espaço de trabalho de origem', + 'migration.report.target': 'Espaço de trabalho de destino', + 'migration.report.fromSqlite': 'Do SQLite (brain.db)', + 'migration.report.fromMarkdown': 'Do Markdown', + 'migration.report.imported': 'Importados', + 'migration.report.skippedUnchanged': 'Ignorados (sem alteração)', + 'migration.report.renamedConflicts': 'Renomeados em caso de conflito', + 'migration.report.warnings': 'Avisos', + 'migration.report.previewHint': + 'Nenhum dado foi importado ainda. Clique em Aplicar importação para copiar.', + 'migration.report.appliedHint': + 'As entradas importadas já estão na sua memória. Execute Pré-visualizar novamente para comparar.', + 'migration.confirmImport.singular': + 'Importar {count} entrada para o espaço de trabalho atual?\n\nOrigem: {source}\nDestino: {target}\n\nA memória existente será salva antes da importação.', + 'migration.confirmImport.plural': + 'Importar {count} entradas para o espaço de trabalho atual?\n\nOrigem: {source}\nDestino: {target}\n\nA memória existente será salva antes da importação.', + 'settings.notifications.doNotDisturb': 'Não Perturbe', + 'settings.notifications.doNotDisturbDesc': 'Pausar todas as notificações por um período definido', + 'settings.notifications.channelControls': 'Controles por Canal', + 'settings.notifications.channelControlsDesc': + 'Configurar preferências de notificação para cada canal', + 'settings.features.screenAwareness': 'Reconhecimento de Tela', + 'settings.features.screenAwarenessDesc': 'Deixar o assistente ver sua janela ativa', + 'settings.features.messaging': 'Mensagens', + 'settings.features.messagingDesc': 'Configurações de integração de canais e mensagens', + 'settings.features.tools': 'Ferramentas', + 'settings.features.toolsDesc': 'Gerenciar ferramentas e integrações conectadas', + 'settings.ai.localSetup': 'Configuração de IA Local', + 'settings.ai.localSetupDesc': 'Baixar e configurar modelos de IA local', + 'settings.ai.llmProvider': 'Provedor LLM', + 'settings.ai.llmProviderDesc': 'Escolher e configurar seu provedor de IA', + 'clearData.title': 'Limpar Dados do App', + 'clearData.warning': + 'Isso vai desconectar você e excluir permanentemente os dados locais do app, incluindo:', + 'clearData.bulletSettings': 'Configurações do app e conversas', + 'clearData.bulletCache': 'Todos os dados de cache de integração local', + 'clearData.bulletWorkspace': 'Dados do espaço de trabalho', + 'clearData.bulletOther': 'Todos os outros dados locais', + 'clearData.irreversible': 'Esta ação não pode ser desfeita.', + 'clearData.clearing': 'Limpando dados do app...', + 'clearData.failed': 'Falha ao limpar dados e sair. Por favor, tente novamente.', + 'clearData.failedLogout': 'Falha ao sair. Por favor, tente novamente.', + 'clearData.failedPersist': + 'Falha ao limpar o estado persistido do app. Por favor, tente novamente.', + 'welcome.title': 'Bem-vindo ao OpenHuman', + 'welcome.subtitle': + 'Sua super inteligência artificial pessoal. Privada, simples e extremamente poderosa.', + 'welcome.connectPrompt': 'Configurar URL de RPC (Avançado)', + 'welcome.selectRuntime': 'Selecionar um Runtime', + 'welcome.clearingAppData': 'Limpando dados do aplicativo...', + 'welcome.clearAppDataAndRestart': 'Limpar dados do aplicativo e reinicie', + 'welcome.clearAppDataWarning': + 'Isso apaga segredos e contas armazenados localmente neste dispositivo. Sua conta na nuvem não é afetada — você pode entrar novamente logo após.', + 'welcome.resetErrorFallback': + 'Não foi possível limpar os dados do app. Por favor, feche e reabra o OpenHuman e tente novamente.', + 'welcome.signingIn': 'Fazendo login...', + 'welcome.termsIntro': 'Ao continuar, você concorda com os', + 'welcome.termsOfUse': 'Termos', + 'welcome.termsJoiner': 'e', + 'welcome.privacyPolicy': 'Política de Privacidade', + 'welcome.termsOutro': '.', + 'welcome.urlPlaceholder': 'http://localhost:8089', + 'welcome.invalidUrl': 'Por favor, insira uma URL HTTP ou HTTPS válida', + 'welcome.connecting': 'Testando', + 'welcome.connect': 'Testar', + 'home.greeting': 'Bom dia', + 'home.greetingAfternoon': 'Boa tarde', + 'home.greetingEvening': 'Boa noite', + 'home.askAssistant': 'Pergunte qualquer coisa ao seu assistente...', + 'home.statusOk': + 'Seu dispositivo está conectado. Mantenha o app aberto para manter a conexão ativa. Envie uma mensagem ao seu agente com o botão abaixo.', + 'home.statusBackendOnly': + 'Reconectando ao backend… seu agente estará disponível novamente em breve.', + 'home.statusCoreUnreachable': + 'O processo em segundo plano do OpenHuman não está respondendo. Ele pode ter travado ou falhado ao iniciar.', + 'home.statusInternetOffline': + 'Seu dispositivo está offline agora. Verifique sua rede ou reinicie o app para reconectar.', + 'home.restartCore': 'Reiniciar Core', + 'home.restartingCore': 'Reiniciando o core…', + 'home.themeToggle.toLight': 'Mudar para modo claro', + 'home.themeToggle.toDark': 'Mudar para modo escuro', + 'home.usageExhaustedTitle': 'Você esgotou seu uso', + 'home.usageExhaustedBody': + 'Seu uso incluído acabou por enquanto. Inicie uma assinatura para desbloquear mais capacidade contínua.', + 'home.usageExhaustedCta': 'Assinar', + 'home.routinesCard': 'Suas Rotinas', + 'home.routinesActive': '{count} ativas', + 'routines.title': 'Seus Hábitos', + 'routines.subtitle': 'Coisas que seu assistente faz automaticamente', + 'routines.loading': 'Carregando rotinas…', + 'routines.empty': 'Ainda não há rotinas', + 'routines.emptyHint': + 'Seu assistente pode executar tarefas em um cronograma — como briefings matinais ou resumos diários.', + 'routines.refresh': 'Atualizar', + 'routines.nextRun': 'Próxima execução', + 'routines.lastRunSuccess': 'A última execução foi bem-sucedida', + 'routines.lastRunFailed': 'A última execução falhou', + 'routines.notRunYet': 'Ainda não executado', + 'routines.runNow': 'Corra Agora', + 'routines.running': 'Executando…', + 'routines.viewHistory': 'Ver histórico', + 'routines.loadingHistory': 'Carregando…', + 'routines.noHistory': 'Ainda não há histórico de execuções.', + 'routines.statusSuccess': 'Sucesso', + 'routines.statusError': 'Erro', + 'routines.showOutput': 'Mostrar saída', + 'routines.hideOutput': 'Ocultar saída', + 'routines.toggleEnabled': 'Ativar ou desativar esta rotina', + 'routines.typeAgent': 'Agente', + 'routines.typeCommand': 'Comando', + 'nav.routines': 'Routines', + 'chat.newThread': 'Nova conversa', + 'chat.typeMessage': 'Digite uma mensagem...', + 'chat.send': 'Enviar mensagem', + 'chat.thinking': 'Pensando...', + 'chat.noMessages': 'Nenhuma mensagem ainda', + 'chat.startConversation': 'Inicie uma conversa', + 'chat.regenerate': 'Regenerar', + 'chat.copyResponse': 'Copiar resposta', + 'chat.citations': 'Citações', + 'chat.toolUsed': 'Ferramenta usada', + 'scope.legacy': 'Legado', + 'scope.user': 'Usuário', + 'scope.project': 'Projeto', + 'skills.title': 'Conexões', + 'skills.search': 'Pesquisar conexões...', + 'skills.noResults': 'Nenhuma conexão encontrada', + 'skills.connect': 'Conectar', + 'skills.disconnect': 'Desconectar', + 'skills.configure': 'Gerenciar', + 'skills.connected': 'Conectado', + 'skills.available': 'Disponível', + 'skills.addAccount': 'Adicionar Conta', + 'skills.channels': 'Canais', + 'skills.integrations': 'Integrações', + 'skills.integrationsSubtitle': + 'Conexões OAuth baseadas em nuvem — faça login com sua conta e o Composio gerencia os tokens para que os agentes possam ler e agir em seu nome. Sem chaves de API para gerenciar.', 'skills.composio.noApiKeyTitle': 'Nenhuma chave de API do Composio configurada', 'skills.composio.noApiKeyDescription': 'O modo local usa sua própria chave de API do Composio. Abra Configurações → Avançado → Composio para adicionar uma antes de conectar integrações aqui.', 'skills.composio.noApiKeyCta': 'Abrir nas Configurações', - 'channels.localManagedUnavailable': - 'Canais gerenciados não estão disponíveis para usuários locais.', + 'skills.tabs.composio': 'Composio', + 'skills.tabs.channels': 'Canais', + 'skills.tabs.mcp': 'MCP Servidores', + 'skills.tabs.runners': 'Runners', + 'memory.title': 'Memória', + 'memory.search': 'Pesquisar memórias...', + 'memory.noResults': 'Nenhuma memória encontrada', + 'memory.empty': + 'Nenhuma memória ainda. As memórias são criadas automaticamente conforme você interage.', + 'memory.tab.memory': 'Memória', + 'memory.tab.tasks': 'Tarefas do Agente', + 'memory.tab.tasksDescription': + 'Crie e acompanhe tarefas — seus próprios afazeres e os painéis que seus agentes constroem ao longo das conversas.', + 'memory.tab.subconscious': 'Subconsciente', + 'memory.tab.dreams': 'Sonhos', + 'memory.tab.calls': 'Chamadas', + 'memory.tab.diagram': 'Diagram', + 'memory.tab.centrality': 'Centrality', + 'memory.tab.settings': 'Configurações', + 'memory.analyzeNow': 'Analisar Agora', + 'graphCentrality.title': 'Centralidade do Grafo de Conhecimento', + 'graphCentrality.intro': + 'O PageRank sobre seu grafo de memória revela os hubs que suportam carga — e as entidades conectoras que ligam clusters que, de outra forma, seriam separados, algo que uma contagem de frequência bruta não consegue revelar.', + 'graphCentrality.loading': 'Calculando centralidade…', + 'graphCentrality.errorPrefix': 'Não foi possível carregar o gráfico:', + 'graphCentrality.retry': 'Tentar novamente', + 'graphCentrality.empty': 'Ainda não há gráfico de conhecimento.', + 'graphCentrality.emptyHint': + 'À medida que o assistente registra fatos sobre você, as entidades mais conectadas aparecerão aqui.', + 'graphCentrality.namespaceLabel': 'Namespace', + 'graphCentrality.namespaceAll': 'Todos os namespaces', + 'graphCentrality.metricEntities': 'Entidades', + 'graphCentrality.metricConnections': 'Conexões', + 'graphCentrality.metricClusters': 'Clusters', + 'graphCentrality.clustersCaption': 'clusters {components} · maiores sustentos {largest}', + 'graphCentrality.approximateBadge': 'aproximado', + 'graphCentrality.approximateTitle': + 'Parou no limite de iterações antes de convergir completamente', + 'graphCentrality.rankedHeading': 'Principais entidades por influência', + 'graphCentrality.colRank': '#', + 'graphCentrality.colEntity': 'Entidade', + 'graphCentrality.colInfluence': 'Influência', + 'graphCentrality.colLinks': 'Links', + 'graphCentrality.bridgeBadge': 'conector', + 'graphCentrality.bridgeTitle': 'Conector — mais influente do que seu número de links sugere', + 'graphCentrality.degreeTitle': '{in} entrando · {out} saindo', + 'memoryTree.status.title': 'Árvore da Memória', + 'memoryTree.status.autoSyncLabel': 'Auto-sincronização', + 'memoryTree.status.autoSyncDescription': + 'Pausa para parar a nova ingestão. O wiki existente permanece consultável.', + 'memoryTree.status.statusTile': 'Status', + 'memoryTree.status.lastSyncTile': 'Última sincronização', + 'memoryTree.status.totalChunksTile': 'Total de blocos', + 'memoryTree.status.wikiSizeTile': 'Tamanho da Wiki', + 'memoryTree.status.statusRunning': 'Correndo', + 'memoryTree.status.statusPaused': 'Pausado', + 'memoryTree.status.statusSyncing': 'Sincronizando', + 'memoryTree.status.statusError': 'Erro', + 'memoryTree.status.statusIdle': 'Ocioso', + 'memoryTree.status.never': 'Nunca', + 'memoryTree.status.fetchError': 'Não foi possível buscar o status da Árvore de Memória', + 'memoryTree.status.retry': 'Tentar novamente', + 'memoryTree.status.toggleFailed': 'Não foi possível ativar/desativar a sincronização automática', + 'memoryTree.status.justNow': 'agora mesmo', + 'memoryTree.status.secondsAgo': '{count}s atrás', + 'memoryTree.status.minuteAgo': 'há 1 minuto', + 'memoryTree.status.minutesAgo': '{count} minutos atrás', + 'memoryTree.status.hourAgo': 'Há 1 hora', + 'memoryTree.status.hoursAgo': '{count} hr atrás', + 'memoryTree.status.dayAgo': '1 dia atrás', + 'memoryTree.status.daysAgo': '{count} dias atrás', + 'alerts.title': 'Alertas', + 'alerts.empty': 'Nenhum alerta ainda', + 'alerts.markAllRead': 'Marcar tudo como lido', + 'alerts.unread': 'não lido', + 'rewards.title': 'Recompensas', + 'rewards.referrals': 'Indicações', + 'rewards.coupons': 'Resgatar', 'rewards.localUnavailable': 'O login local não rende recompensas, cupons nem crédito de indicação. Saia e continue entrando com uma conta OpenHuman se quiser que as recompensas contem.', 'rewards.localUnavailableCta': 'Abrir configurações da conta', + 'rewards.credits': 'Créditos', + 'rewards.referralCode': 'Seu código de indicação', + 'rewards.copyCode': 'Copiar código', + 'rewards.share': 'Compartilhar', + 'onboarding.welcome': 'Olá. Eu sou o OpenHuman.', + 'onboarding.welcomeDesc': + 'Seu assistente de IA superinteligente que roda no seu computador. Privado, simples e extremamente poderoso.', + 'onboarding.context': 'Coleta de Contexto', + 'onboarding.contextDesc': 'Conecte as ferramentas e serviços que você usa todos os dias.', + 'onboarding.localAI': 'IA Local', + 'onboarding.localAIDesc': 'Configure um modelo de IA local que roda na sua máquina.', + 'onboarding.chatProvider': 'Provedor de Chat', + 'onboarding.chatProviderDesc': 'Escolha como deseja interagir com seu assistente.', + 'onboarding.referral': 'Indicação', + 'onboarding.referralDesc': 'Aplique um código de indicação, se tiver um.', + 'onboarding.finish': 'Concluir Configuração', + 'onboarding.finishDesc': 'Tudo pronto! Comece a usar o OpenHuman.', + 'onboarding.skip': 'Pular', + 'onboarding.getStarted': 'Começar', + 'onboarding.runtimeChoice.title': 'Como você gostaria de rodar o OpenHuman?', + 'onboarding.runtimeChoice.subtitle': + 'Escolha a configuração que melhor se encaixa para você. Você pode alterar isso depois nas Configurações.', + 'onboarding.runtimeChoice.cloud.title': 'Simples', + 'onboarding.runtimeChoice.cloud.tagline': 'Deixe o OpenHuman gerenciar tudo para você.', + 'onboarding.runtimeChoice.cloud.f1': 'Segurança integrada', + 'onboarding.runtimeChoice.cloud.f2': 'Compressão de tokens para ampliar seu uso', + 'onboarding.runtimeChoice.cloud.f3': 'Uma assinatura, todos os modelos incluídos', + 'onboarding.runtimeChoice.cloud.f4': 'Sem chaves de API para gerenciar', + 'onboarding.runtimeChoice.cloud.f5': 'Simples de configurar', + 'onboarding.runtimeChoice.custom.title': 'Personalizado', + 'onboarding.runtimeChoice.custom.tagline': + 'Traga suas próprias chaves. Controle total do que está usando.', + 'onboarding.runtimeChoice.custom.f1': 'Você precisará de chaves de API para quase tudo', + 'onboarding.runtimeChoice.custom.f2': 'Reutiliza serviços que você já paga', + 'onboarding.runtimeChoice.custom.f3': 'Pode ser gratuito se você rodar tudo localmente', + 'onboarding.runtimeChoice.custom.f4': 'Mais configuração, mais controles', + 'onboarding.runtimeChoice.custom.f5': 'Ideal para usuários avançados e desenvolvedores', + 'onboarding.runtimeChoice.cloud.creditHighlight': '$1 de crédito grátis para experimentar', + 'onboarding.runtimeChoice.continueCloud': 'Continuar com Simples', + 'onboarding.runtimeChoice.continueCustom': 'Continuar com Personalizado', + 'onboarding.runtimeChoice.recommended': 'Recomendado', + 'onboarding.apiKeys.title': 'Vamos Adicionar Suas Chaves de API', + 'onboarding.apiKeys.subtitle': + 'Você pode colá-las agora ou pular e adicioná-las depois em Configurações › IA. As chaves são armazenadas neste dispositivo, criptografadas em repouso.', + 'onboarding.apiKeys.openaiLabel': 'Chave de API OpenAI', + 'onboarding.apiKeys.openaiPlaceholder': 'sk-...', + 'onboarding.apiKeys.openaiOauthHint': + 'Use ChatGPT Plus/Pro (assinatura) ou uma chave OpenAI API — ambos não são necessários.', + 'onboarding.apiKeys.openaiOauthOpening': 'Abrindo login…', + 'onboarding.apiKeys.finishSignIn': 'Concluir login no ChatGPT', + 'onboarding.apiKeys.orApiKey': 'ou tecla API', + 'onboarding.apiKeys.anthropicLabel': 'Chave de API Anthropic', + 'onboarding.apiKeys.anthropicPlaceholder': 'sk-ant-...', + 'onboarding.apiKeys.saveError': + 'Não foi possível salvar essa chave. Verifique-a e tente novamente.', + 'onboarding.apiKeys.skipForNow': 'Pular por enquanto', + 'onboarding.apiKeys.continue': 'Salvar e continuar', + 'onboarding.apiKeys.saving': 'Salvando…', + 'onboarding.custom.stepperInference': 'Inferência', + 'onboarding.custom.stepperVoice': 'Voz', + 'onboarding.custom.stepperOAuth': 'OAuth', + 'onboarding.custom.stepperSearch': 'Pesquisa', + 'onboarding.custom.stepperEmbeddings': 'Embeddings', + 'onboarding.custom.stepperMemory': 'Memória', + 'onboarding.custom.stepCounter': 'Etapa {n} de {total}', + 'onboarding.custom.defaultTitle': 'Padrão', + 'onboarding.custom.defaultSubtitle': 'Deixe o OpenHuman gerenciar para você.', + 'onboarding.custom.configureTitle': 'Configurar', + 'onboarding.custom.configureSubtitle': 'Vou escolher o que usar.', + 'onboarding.custom.progressAriaLabel': 'Progresso do onboarding', + 'onboarding.custom.continue': 'Continuar', + 'onboarding.custom.back': 'Voltar', + 'onboarding.custom.finish': 'Concluir Configuração', + 'onboarding.custom.configureLater': + 'Você pode terminar de configurar isso após o onboarding. Vamos te levar à página de Configurações correspondente quando terminar.', + 'onboarding.custom.openSettings': 'Abrir nas Configurações', + 'onboarding.custom.inference.title': 'Inferência (Texto)', + 'onboarding.custom.inference.subtitle': + 'Qual modelo de linguagem deve responder suas perguntas e executar seus agentes?', + 'onboarding.custom.inference.defaultDesc': + 'O OpenHuman direciona cada carga de trabalho para um modelo padrão adequado. Sem chaves, sem configuração.', + 'onboarding.custom.inference.configureDesc': + 'Traga sua própria chave OpenAI ou Anthropic. Usamos para todas as cargas de trabalho baseadas em texto.', + 'onboarding.custom.voice.title': 'Voz', + 'onboarding.custom.voice.subtitle': 'Fala para texto e texto para fala no modo de voz.', + 'onboarding.custom.voice.defaultDesc': + 'O OpenHuman vem com STT/TTS gerenciado que funciona sem configuração.', + 'onboarding.custom.voice.configureDesc': + 'Use seu próprio ElevenLabs / OpenAI Whisper / etc. Configure em Configurações › Voz.', + 'onboarding.custom.oauth.title': 'Conexões (OAuth)', + 'onboarding.custom.oauth.subtitle': + 'Gmail, Slack, Notion e outros serviços conectados que precisam de OAuth.', + 'onboarding.custom.oauth.defaultDesc': + 'O OpenHuman usa um espaço de trabalho Composio gerenciado. Um clique para conectar cada serviço depois.', + 'onboarding.custom.oauth.configureDesc': + 'Traga sua própria conta Composio / chave de API. Configure em Configurações › Conexões.', + 'onboarding.custom.search.title': 'Pesquisa na Web', + 'onboarding.custom.search.subtitle': 'Como o OpenHuman pesquisa na web em seu nome.', + 'onboarding.custom.search.defaultDesc': + 'O OpenHuman usa um backend de pesquisa gerenciado. Sem chaves necessárias.', + 'onboarding.custom.search.configureDesc': + 'Traga sua própria chave de provedor de pesquisa (Tavily, Brave, etc.). Configure em Configurações › Ferramentas.', + 'onboarding.custom.embeddings.title': 'Embeddings', + 'onboarding.custom.embeddings.subtitle': + 'Como o OpenHuman gera embeddings vetoriais para busca semântica na memória.', + 'onboarding.custom.embeddings.defaultDesc': + 'O OpenHuman usa um serviço gerenciado de embeddings. Nenhuma chave de API necessária.', + 'onboarding.custom.embeddings.configureDesc': + 'Use seu próprio provedor de embeddings (OpenAI, Voyage, Ollama, etc.).', + 'onboarding.custom.memory.title': 'Memória', + 'onboarding.custom.memory.subtitle': + 'Como o OpenHuman se lembra do seu contexto, preferências e conversas anteriores.', + 'onboarding.custom.memory.defaultDesc': + 'O OpenHuman gerencia o armazenamento e a recuperação de memória automaticamente. Sem nada para configurar.', + 'onboarding.custom.memory.configureDesc': + 'Inspecione, exporte ou limpe a memória você mesmo. Configure em Configurações › Memória.', + 'accounts.addAccount': 'Adicionar Conta', + 'accounts.manageAccounts': 'Gerenciar Contas', + 'accounts.noAccounts': 'Nenhuma conta conectada', + 'accounts.connectAccount': 'Conecte uma conta para começar', + 'accounts.agent': 'Agente', + 'accounts.respondQueue': 'Fila de Respostas', + 'accounts.disconnect': 'Desconectar', + 'accounts.disconnectConfirm': 'Tem certeza de que deseja desconectar esta conta?', + 'accounts.disconnectClearMemory': 'Também excluir memória desta fonte', + 'accounts.disconnectClearMemoryHint': + 'Remove permanentemente os fragmentos de memória local vinculados a esta conexão.', + 'accounts.searchAccounts': 'Pesquisar contas...', + 'channels.title': 'Canais', + 'channels.configure': 'Configurar Canal', + 'channels.setup': 'Configurar', + 'channels.noChannels': 'Nenhum canal configurado', + 'channels.localManagedUnavailable': + 'Canais gerenciados não estão disponíveis para usuários locais.', + 'channels.addChannel': 'Adicionar Canal', + 'channels.status.connected': 'Conectado', + 'channels.status.disconnected': 'Desconectado', + 'channels.status.error': 'Erro', + 'channels.status.configuring': 'Configurando', + 'channels.defaultMessaging': 'Canal de Mensagens Padrão', + 'webhooks.title': 'Webhooks', + 'webhooks.create': 'Criar Webhook', + 'webhooks.noWebhooks': 'Nenhum webhook configurado', + 'webhooks.url': 'URL', + 'webhooks.secret': 'Segredo', + 'webhooks.events': 'Eventos', + 'webhooks.archiveDirectory': 'Diretório de Arquivo', + 'webhooks.todayFile': 'Arquivo de Hoje', + 'invites.title': 'Convites', + 'invites.create': 'Criar Convite', + 'invites.noInvites': 'Nenhum convite pendente', + 'invites.code': 'Código de Convite', + 'invites.copyLink': 'Copiar Link', + 'invites.generate': 'Gerar convite', + 'invites.generating': 'Gerando...', + 'invites.refreshing': 'Atualizando convites...', + 'invites.loading': 'Carregando convites...', + 'invites.copyCodeAria': 'Copiar código de convite', + 'invites.revokeAria': 'Revogar convite', + 'invites.usedUp': 'Esgotado', + 'invites.uses': 'Usa: {current}{max}', + 'invites.expiresOn': 'Expira em {date}', + 'invites.empty': 'Nenhum convite ainda', + 'invites.emptyHint': 'Gere um código de convite para compartilhar com outras pessoas', + 'invites.revokeTitle': 'Revogar código de convite', + 'invites.revokePromptPrefix': 'Tem certeza de que deseja revogar o código de convite', + 'invites.revokeWarning': + 'Este código de convite não será mais válido e não poderá ser usado para entrar na equipe.', + 'invites.revoking': 'Revogando...', + 'invites.revokeAction': 'Revogar convite', + 'invites.failedGenerate': 'Falha ao gerar convite', + 'invites.failedRevoke': 'Falha ao revogar convite', + 'team.refreshingMembers': 'Atualizando membros...', + 'team.loadingMembers': 'Carregando membros...', + 'team.memberCount': '{count} membro', + 'team.memberCountPlural': '{count} membros', + 'team.you': '(Você)', + 'team.removeAria': 'Remover {name}', + 'team.noMembers': 'Nenhum membro encontrado', + 'team.removeTitle': 'Remover membro da equipe', + 'team.removePromptPrefix': 'Tem certeza de que deseja remover', + 'team.removePromptSuffix': 'da equipe?', + 'team.removeWarning': 'Eles perderão o acesso à equipe e a todos os recursos da equipe.', + 'team.removing': 'Removendo...', + 'team.removeAction': 'Remover membro', + 'team.changeRoleTitle': 'Alterar função de membro', + 'team.changeRolePrompt': 'Alterar o papel de {name} de {oldRole} para {newRole}?', + 'team.changeRoleAdminGrant': + 'Isso concederá a ele permissões completas de administrador, incluindo a capacidade de gerenciar membros da equipe.', + 'team.changeRoleAdminRemove': + 'Isso removerá as permissões de administrador dele e ele não poderá mais gerenciar a equipe.', + 'team.changing': 'Alterando...', + 'team.changeRoleAction': 'Alterar função', + 'team.failedChangeRole': 'Falha ao alterar função', + 'team.failedRemoveMember': 'Falha ao remover membro', + 'devOptions.title': 'Avançado', + 'devOptions.diagnostics': 'Diagnósticos', + 'devOptions.diagnosticsDesc': 'Saúde do sistema, logs e métricas de desempenho', + 'devOptions.toolPolicyDiagnosticsDesc': + 'Inventário de ferramentas, postura de políticas, listas de permissão MCP e bloqueios recentes', + 'devOptions.toolPolicyDiagnostics.loading': 'Carregando…', + 'devOptions.toolPolicyDiagnostics.unavailable': 'Diagnósticos indisponíveis', + 'devOptions.toolPolicyDiagnostics.posture.title': 'Postura de política', + 'devOptions.toolPolicyDiagnostics.posture.autonomy': 'Autonomia:', + 'devOptions.toolPolicyDiagnostics.posture.workspaceOnly': 'Apenas espaço de trabalho:', + 'devOptions.toolPolicyDiagnostics.posture.maxActionsPerHour': 'Máx. ações/h:', + 'devOptions.toolPolicyDiagnostics.posture.approvalMediumRisk': 'Aprovação (risco médio):', + 'devOptions.toolPolicyDiagnostics.posture.blockHighRisk': 'Bloquear alto risco:', + 'devOptions.toolPolicyDiagnostics.inventory.title': 'Inventário', + 'devOptions.toolPolicyDiagnostics.inventory.totalTools': 'Ferramentas totais', + 'devOptions.toolPolicyDiagnostics.inventory.enabledTools': 'Ferramentas habilitadas', + 'devOptions.toolPolicyDiagnostics.inventory.mcpStdioTools': 'MCP ferramentas stdio', + 'devOptions.toolPolicyDiagnostics.inventory.jsonRpcTools': 'ferramentas JSON-RPC', + 'devOptions.toolPolicyDiagnostics.mcpAllowlists.title': 'Listas de permissão MCP', + 'devOptions.toolPolicyDiagnostics.mcpAllowlists.summary': + 'Ativado: {enabled} · Servidores: {enabledCount}/{totalCount}', + 'devOptions.toolPolicyDiagnostics.mcpAllowlists.unnamed': '', + 'devOptions.toolPolicyDiagnostics.mcpAllowlists.allowDeny': + 'permitir={allowCount} negar={denyCount}', + 'devOptions.toolPolicyDiagnostics.mcpWriteAudit.title': 'MCP escrever auditoria', + 'devOptions.toolPolicyDiagnostics.mcpWriteAudit.summary': + 'Ativado: {enabled} · Recentes (24h): {recentRows}', + 'devOptions.toolPolicyDiagnostics.recentBlocked.title': 'Chamadas bloqueadas recentes', + 'devOptions.toolPolicyDiagnostics.recentBlocked.empty': 'Nenhuma chamada bloqueada registrada.', + 'devOptions.toolPolicyDiagnostics.redactedSurfaces.title': 'Superfícies redigidas', + 'devOptions.toolPolicyDiagnostics.redactedSurfaces.summary': + 'Capaz de escrever: {writeCount} · Superfícies de política: {policyCount}', + 'devOptions.debugPanels': 'Painéis de Depuração', + 'devOptions.debugPanelsDesc': + 'Flags de funcionalidades, inspeção de estado e ferramentas de depuração', + 'devOptions.webhooks': 'Webhooks', + 'devOptions.webhooksDesc': 'Configurar e testar integrações de webhook', + 'devOptions.memoryInspection': 'Inspeção de Memória', + 'devOptions.memoryInspectionDesc': 'Navegar, consultar e gerenciar entradas de memória', + 'voice.pushToTalk': 'Pressionar para Falar', + 'voice.recording': 'Gravando...', + 'voice.processing': 'Processando...', + 'voice.languageHint': 'Idioma', + 'misc.rehydrating': 'Carregando seus dados...', + 'misc.checkingServices': 'Verificando serviços...', + 'misc.serviceUnavailable': 'Serviço Indisponível', + 'misc.somethingWentWrong': 'Algo deu errado', + 'misc.tryAgainLater': 'Por favor, tente novamente mais tarde.', + 'misc.restartApp': 'Reiniciar App', + 'misc.updateAvailable': 'Atualização Disponível', + 'misc.updateNow': 'Atualizar Agora', + 'misc.updateLater': 'Depois', + 'misc.downloading': 'Baixando...', + 'misc.installing': 'Instalando...', + 'misc.beta': + 'O OpenHuman está em beta inicial. Sinta-se à vontade para compartilhar feedback ou reportar bugs que encontrar — cada relato nos ajuda a melhorar mais rápido.', + 'misc.betaFeedback': 'Enviar feedback', + 'mnemonic.title': 'Frase de Recuperação', + 'mnemonic.warning': 'Anote estas palavras em ordem e guarde-as em um lugar seguro.', + 'mnemonic.copyWarning': + 'Nunca compartilhe sua frase de recuperação. Qualquer pessoa com essas palavras pode acessar sua conta.', + 'mnemonic.copied': 'Frase de recuperação copiada para a área de transferência', + 'mnemonic.reveal': 'Revelar frase', + 'mnemonic.revealPhrase': 'Revelar frase de recuperação', + 'mnemonic.hidden': 'Frase de recuperação está oculta', + 'privacy.title': 'Privacidade e Segurança', + 'privacy.description': 'Relatório de transparência de dados enviados a serviços externos.', + 'privacy.empty': 'Nenhuma transferência de dados externa detectada.', + 'privacy.whatLeavesComputer': 'O que sai do seu computador', + 'privacy.loading': 'Carregando detalhes de privacidade...', + 'privacy.loadError': + 'Não foi possível carregar a lista de privacidade em tempo real. Os controles de análise abaixo ainda funcionam.', + 'privacy.noCapabilities': 'Nenhuma funcionalidade divulga atualmente movimentação de dados.', + 'privacy.sentTo': 'Enviado para', + 'privacy.leavesDevice': 'Sai do dispositivo', + 'privacy.staysLocal': 'Fica local', + 'privacy.anonymizedAnalytics': 'Análises Anonimizadas', + 'privacy.shareAnonymizedData': 'Compartilhar Dados de Uso Anonimizados', + 'privacy.shareAnonymizedDataDesc': + 'Ajude a melhorar o OpenHuman compartilhando relatórios de falhas e análises de uso anônimas. Todos os dados são totalmente anonimizados — nenhum dado pessoal, mensagem, chave de carteira ou informação de sessão é coletado.', + 'privacy.meetingFollowUps': 'Acompanhamentos de reuniões', + 'privacy.autoHandoffMeet': + 'Transferência automática de transcrições do Google Meet para o orquestrador', + 'privacy.autoHandoffMeetDesc': + 'Quando uma chamada do Google Meet termina, o orquestrador do OpenHuman pode ler a transcrição e pode realizar ações como redigir mensagens, agendar acompanhamentos ou postar resumos no seu espaço de trabalho Slack conectado. Desativado por padrão.', + 'privacy.analyticsDisclaimer': + 'Todas as análises e relatórios de bugs são totalmente anonimizados. Quando ativado, coletamos apenas informações de falhas, tipo de dispositivo e localização do arquivo de erros. Nunca acessamos suas mensagens, dados de sessão, chaves de carteira, chaves de API ou qualquer informação de identificação pessoal. Você pode alterar essa configuração a qualquer momento.', + 'settings.about.version': 'Versão', + 'settings.about.updateAvailable': 'está disponível', + 'settings.about.softwareUpdates': 'Atualizações de software', + 'settings.about.lastChecked': 'Última verificação', + 'settings.about.checking': 'Verificando...', + 'settings.about.checkForUpdates': 'Verificar atualizações', + 'settings.about.releases': 'Versões', + 'settings.about.releasesDesc': + 'Navegar pelas notas de versão e compilações anteriores no GitHub.', + 'settings.about.openReleases': 'Abrir versões no GitHub', + 'settings.about.connection': 'Conexão', + 'settings.about.connectionMode': 'Modo', + 'settings.about.connectionModeLocal': 'Local', + 'settings.about.connectionModeCloud': 'Nuvem', + 'settings.about.connectionModeUnset': 'Não selecionado', + 'settings.about.serverUrl': 'Servidor URL', + 'settings.about.serverUrlUnavailable': 'Indisponível', + 'settings.about.connectionHelperLocal': + 'Gerado no processo pelo shell Tauri ao iniciar o aplicativo. A porta é escolhida na inicialização, então este URL muda entre os lançamentos.', + 'settings.about.connectionHelperCloud': + 'Conectado a um núcleo remoto. Altere isso no BootCheck ou no seletor de modo de nuvem.', + 'settings.heartbeat.title': 'Heartbeat e loops', + 'settings.heartbeat.desc': + 'Controle as cadências de agendamento em segundo plano e inspecione o mapa de loop.', + 'settings.ledgerUsage.title': 'Razão de uso', + 'settings.ledgerUsage.desc': + 'Gastos recentes de crédito, matemática do orçamento e leitura do orçamento de fundo API.', + 'settings.costDashboard.title': 'Painel de custos', + 'settings.costDashboard.desc': + 'Gastos de 7 dias e queima de tokens em toda a rede, com ritmo de orçamento e detalhamento por modelo.', + 'settings.costDashboard.sevenDayCost': 'Custo diário de 7 dias', + 'settings.costDashboard.sevenDayTokens': 'Uso de token de 7 dias', + 'settings.costDashboard.totalSpend': 'total de 7 dias', + 'settings.costDashboard.monthlyPace': 'Ritmo mensal', + 'settings.costDashboard.budgetLimit': 'Limite orçamentário', + 'settings.costDashboard.utilization': 'Uso', + 'settings.costDashboard.modelBreakdown': 'Detalhamento por modelo', + 'settings.costDashboard.model': 'Modelo', + 'settings.costDashboard.provider': 'Fornecedor', + 'settings.costDashboard.cost': 'Custo', + 'settings.costDashboard.tokens': 'Tokens', + 'settings.costDashboard.requests': 'Solicitações', + 'settings.costDashboard.percentOfTotal': '% do total', + 'settings.costDashboard.inputTokens': 'Entrada', + 'settings.costDashboard.outputTokens': 'Saída', + 'settings.costDashboard.budgetNormal': 'No caminho certo', + 'settings.costDashboard.budgetWarning': 'Aviso', + 'settings.costDashboard.budgetExceeded': 'Acima do orçamento', + 'settings.costDashboard.noBudget': 'Sem limite definido', + 'settings.costDashboard.noData': 'Nenhum custo registrado ainda nos últimos 7 dias.', + 'settings.costDashboard.noModels': 'Nenhuma atividade do modelo nos últimos 7 dias.', + 'settings.costDashboard.loading': 'Carregando painel de custo…', + 'settings.costDashboard.disabledHint': + 'O painel de custos está desativado na configuração. Defina [cost.dashboard] enabled = true no config.toml para reativar.', + 'settings.costDashboard.subtitle': + 'Gastos ao vivo e queima de tokens em todo o enxame. As barras atualizam automaticamente a cada poucos segundos — sem necessidade de recarregar a página.', + 'settings.costDashboard.summaryAriaLabel': 'Métricas de resumo de custos', + 'settings.costDashboard.lastSevenDays': 'últimos 7 dias', + 'settings.costDashboard.utilizationOf': 'de', + 'settings.costDashboard.thisMonth': 'este mês', + 'settings.costDashboard.monthlyPaceHint': + 'Gasto mensal projetado na taxa diária atual (média × 30).', + 'settings.costDashboard.budgetLimitHint': + 'Orçamento mensal lido de cost.monthly_limit_usd em config.toml.', + 'settings.costDashboard.dailyTarget': 'Meta diária', + 'settings.costDashboard.today': 'Hoje', + 'settings.costDashboard.todayBadge': 'HOJE', + 'settings.costDashboard.unknownProvider': '—', + 'settings.costDashboard.justNow': 'Agora mesmo', + 'settings.costDashboard.secondsAgo': '{value}s atrás', + 'settings.costDashboard.minutesAgo': '{value}m atrás', + 'settings.costDashboard.hoursAgo': '{value}h atrás', + 'settings.costDashboard.daysAgo': '{value}d atrás', + 'settings.costDashboard.updated': 'Atualizado', + 'settings.costDashboard.refresh': 'Atualizar', + 'settings.costDashboard.utcNote': 'Dias agrupados em UTC', + 'settings.costDashboard.stackedNote': 'Entrada + saída empilhadas', + 'settings.costDashboard.modelBreakdownHint': 'Agregado ao longo dos últimos 7 dias.', + 'settings.costDashboard.noDataHint': + 'Envie uma mensagem de agente — o uso de tokens na próxima chamada do provedor preencherá o gráfico em cerca de 10 segundos.', + 'settings.search.title': 'Mecanismo de pesquisa', + 'settings.search.menuDesc': + 'Padrão para pesquisa gerenciada por OpenHuman ou conecte seu próprio provedor com uma chave API.', + 'settings.search.description': + 'Escolha o mecanismo de busca usado pelo agente, ou desative as ferramentas de pesquisa completamente. Gerenciado usa o backend do OpenHuman (sem configuração). Parallel, Brave e Querit funcionam diretamente do seu computador usando sua chave de API.', + 'settings.search.engineAria': 'Mecanismo de pesquisa', + 'settings.search.engineDisabledLabel': 'Disabled', + 'settings.search.engineDisabledDesc': + 'Remover ferramentas de busca do contexto do agente e da lista de ferramentas disponíveis.', + 'settings.search.engineManagedLabel': 'OpenHuman Gerenciado', + 'settings.search.engineManagedDesc': + 'Padrão. Roteado através do backend OpenHuman — nenhuma chave API é necessária.', 'settings.search.localManagedUnavailable': 'A busca gerenciada pela OpenHuman não está disponível para usuários locais. Adicione sua própria chave de API do Parallel ou Brave para habilitar a busca na web.', + 'settings.search.engineParallelLabel': 'Paralelo', + 'settings.search.engineParallelDesc': + 'Paralelo Direto API: buscar, extrair, conversar, pesquisar, enriquecer, ferramentas de conjunto de dados.', + 'settings.search.engineBraveLabel': 'Pesquisa Brave', + 'settings.search.engineBraveDesc': + 'Pesquisa Direta Brave API: ferramentas de web, notícias, imagens e vídeo.', + 'settings.search.engineQueritLabel': 'Querit', + 'settings.search.engineQueritDesc': + 'Direct Querit API: pesquisa na web com filtros de site, intervalo de tempo, país e idioma.', + 'settings.search.statusConfigured': 'Configurado', + 'settings.search.statusNeedsKey': 'Precisa da chave API', + 'settings.search.fallbackToManaged': + 'Nenhuma chave configurada — a pesquisa voltará para Gerenciada até que uma chave seja salva.', + 'settings.search.getApiKey': 'Obtenha a chave API', + 'settings.search.save': 'Salvar', + 'settings.search.clear': 'Limpar', + 'settings.search.show': 'Mostrar', + 'settings.search.hide': 'Ocultar', + 'settings.search.statusSaving': 'Salvando…', + 'settings.search.statusSaved': 'Salvo.', + 'settings.search.statusError': 'Falha', + 'settings.search.parallelKeyLabel': 'Parallel API chave', + 'settings.search.braveKeyLabel': 'Brave Pesquisar chave API', + 'settings.search.queritKeyLabel': 'Chave Querit API', + 'settings.search.placeholderStored': '•••••••• (armazenado)', + 'settings.search.placeholderParallel': 'pk_...', + 'settings.search.placeholderBrave': 'BSA...', + 'settings.search.placeholderQuerit': 'Chave Querit API', + 'settings.search.allowedSitesLabel': 'Sites permitidos', + 'settings.search.allowedSitesHint': + 'Hosts que o assistente pode abrir e ler — via busca na web e ferramenta de navegador — um por linha, ex.: reuters.com. Um host também cobre seus subdomínios. A busca na web em si não é restringida por esta lista.', + 'settings.search.allowedSitesAllOn': + 'O assistente pode abrir qualquer site público. Endereços locais e privados permanecem bloqueados.', + 'settings.search.allowedSitesPlaceholder': 'reuters.com\napnews.com\ngithub.com', + 'settings.search.allowedSitesSave': 'Salvar sites', + 'settings.search.accessModeAria': 'Modo de acesso à web', + 'settings.search.accessAllowAll': 'Permitir tudo', + 'settings.search.accessCustom': 'Personalizado', + 'settings.search.accessBlockAll': 'Bloquear tudo', + 'settings.search.accessBlockAllHint': + 'Todo o acesso à web está bloqueado — o assistente não pode abrir ou ler nenhum site.', + 'settings.embeddings.title': 'Incorporações', + 'settings.embeddings.description': + 'Escolha qual provedor de embeddings converte memória em vetores para busca semântica. Alterar o provedor, modelo ou dimensões invalida vetores armazenados e requer uma redefinição completa da memória.', + 'settings.embeddings.providerAria': 'Provedor de embeddings', + 'settings.embeddings.statusConfigured': 'Configurado', + 'settings.embeddings.statusNeedsKey': 'Precisa de chave API', + 'settings.embeddings.apiKeyLabel': 'Chave API {provider}', + 'settings.embeddings.placeholderStored': '•••••••• (armazenado)', + 'settings.embeddings.placeholderKey': 'Cole sua chave API…', + 'settings.embeddings.keyStoredEncrypted': + 'Sua chave API é armazenada criptografada neste dispositivo.', + 'settings.embeddings.show': 'Mostrar', + 'settings.embeddings.hide': 'Ocultar', + 'settings.embeddings.save': 'Salvar', + 'settings.embeddings.clear': 'Limpar', + 'settings.embeddings.model': 'Modelo', + 'settings.embeddings.dimensions': 'Dimensões', + 'settings.embeddings.customEndpoint': 'Endpoint personalizado', + 'settings.embeddings.customModelPlaceholder': 'Nome do modelo', + 'settings.embeddings.customDimsPlaceholder': 'Escurece', + 'settings.embeddings.applyCustom': 'Aplicar', + 'settings.embeddings.testConnection': 'Testar conexão', + 'settings.embeddings.testing': 'Testando…', + 'settings.embeddings.testSuccess': 'Conectado — {dims} dimensões', + 'settings.embeddings.testFailed': 'Falhou: {error}', + 'settings.embeddings.saving': 'Salvando…', + 'settings.embeddings.saved': 'Salvo.', + 'settings.embeddings.errorPrefix': 'Falhou', + 'settings.embeddings.wipeTitle': 'Redefinir vetores de memória?', + 'settings.embeddings.wipeBody': + 'Alterar o provedor de embeddings, modelo ou dimensões apagará todos os vetores de memória armazenados. A memória deve ser reconstruída antes que a recuperação funcione novamente. Isso não pode ser desfeito.', + 'settings.embeddings.cancel': 'Cancelar', + 'settings.embeddings.confirmWipe': 'Limpar e aplicar', + 'settings.embeddings.setupTitle': 'Configurar {provider}', + 'settings.embeddings.saveAndSwitch': 'Salvar e trocar', + 'settings.embeddings.optional': 'opcional', + 'settings.embeddings.vectorSearchDisabled': + 'A pesquisa vetorial está desativada. A recuperação de memória usará apenas correspondência de palavras-chave e recência — sem classificação semântica.', + 'settings.embeddings.clearKey': 'Limpar chave API', + 'pages.settings.ai.embeddings': 'Incorporações', + 'pages.settings.ai.embeddingsDesc': 'Modelo de codificação vetorial para recuperação de memória', + 'mcp.alphaBadge': 'Alfa', + 'mcp.alphaBannerText': + 'O suporte do servidor MCP está em alfa inicial. O registro Smithery, o fluxo de instalação e a conexão das ferramentas podem se comportar de maneira inadequada ou mudar de forma entre as versões.', + 'mcp.toolList.noTools': 'Nenhuma ferramenta disponível.', + 'mcp.setup.secretDialog.title': 'MCP Configuração - Insira o segredo', + 'mcp.setup.secretDialog.bodyPrefix': 'O agente de configuração MCP precisa de', + 'mcp.setup.secretDialog.bodySuffix': + '. Seu valor é enviado diretamente para o processo principal e nunca entra na conversa AI.', + 'mcp.setup.secretDialog.inputLabel': 'Valor', + 'mcp.setup.secretDialog.inputPlaceholder': 'Cole aqui', + 'mcp.setup.secretDialog.show': 'Mostrar', + 'mcp.setup.secretDialog.hide': 'Ocultar', + 'mcp.setup.secretDialog.submit': 'Enviar', + 'mcp.setup.secretDialog.cancel': 'Cancelar', + 'mcp.setup.secretDialog.submitting': 'Enviando…', + 'mcp.setup.secretDialog.errorPrefix': 'Falha ao enviar:', + 'mcp.setup.secretDialog.privacyNote': + 'Armazenado criptografado na tabela de segredos local MCP. Nunca registrado ou enviado para um modelo.', + 'devices.betaBadge': 'Beta', + 'devices.betaText': + 'Este recurso está atualmente em beta. Vincule iPhones a este OpenHuman para usá-los como cliente remoto.', 'devices.comingSoonDescription': 'O pareamento de dispositivos está chegando em breve. Esta página será o lugar para parear iPhones e gerenciar dispositivos conectados.', + 'devices.title': 'Dispositivos', + 'devices.pairIphone': 'Emparelhar iPhone', + 'devices.noPaired': 'Nenhum dispositivo emparelhado', + 'devices.emptyState': + 'Escaneie um QR code no seu iPhone para conectá-lo a esta sessão do OpenHuman.', + 'devices.devicePairedTitle': 'Dispositivo emparelhado', + 'devices.devicePairedMessage': 'iPhone conectado com sucesso.', + 'devices.deviceRevokedTitle': 'Dispositivo revogado', + 'devices.deviceRevokedMessage': '{label} removido.', + 'devices.revokeFailedTitle': 'Falha na revogação', + 'devices.online': 'On-line', + 'devices.offline': 'Off-line', + 'devices.lastSeenNever': 'Nunca', + 'devices.lastSeenNow': 'Agora mesmo', + 'devices.lastSeenMinutes': '{count}m atrás', + 'devices.lastSeenHours': '{count}h atrás', + 'devices.lastSeenDays': '{count}d atrás', + 'devices.revoke': 'Revogar', + 'devices.revokeAria': 'Revogar {label}', + 'devices.confirmRevokeTitle': 'Revogar dispositivo?', + 'devices.confirmRevokeBody': + '{label} não poderá mais se conectar. Esta ação não pode ser desfeita.', + 'devices.loadFailed': 'Falha ao carregar dispositivos: {message}', + 'devices.pairModal.title': 'Emparelhar iPhone', + 'devices.pairModal.loading': 'Gerando código de emparelhamento…', + 'devices.pairModal.instructions': 'Abra o app OpenHuman no seu iPhone e escaneie este código.', + 'devices.pairModal.expiresIn': 'O código expira em ~{count} minuto', + 'devices.pairModal.expiresInPlural': 'O código expira em ~{count} minutos', + 'devices.pairModal.showDetails': 'Mostrar detalhes', + 'devices.pairModal.hideDetails': 'Ocultar detalhes', + 'devices.pairModal.channelId': 'ID do canal', + 'devices.pairModal.pairingUrl': 'Emparelhamento URL', + 'devices.pairModal.expiredTitle': 'QR code expirou', + 'devices.pairModal.expiredBody': 'Gere um novo código para continuar o emparelhamento.', + 'devices.pairModal.generateNewCode': 'Gerar novo código', + 'devices.pairModal.successTitle': 'Emparelhado com iPhone', + 'devices.pairModal.autoClose': 'Fechando automaticamente…', + 'devices.pairModal.errorPrefix': 'Falha ao criar emparelhamento: {message}', + 'devices.pairModal.errorTitle': 'Algo deu errado', + 'devices.pairModal.copyUrl': 'Copiar', + 'mcp.catalog.searchAria': 'Pesquise no catálogo da Smithery', + 'mcp.catalog.searchPlaceholder': 'Pesquisar catálogo da Smithery...', + 'mcp.catalog.loadFailed': 'Falha ao carregar o catálogo', + 'mcp.catalog.noResults': 'Nenhum servidor encontrado.', + 'mcp.catalog.noResultsFor': 'Nenhum servidor encontrado para "{query}".', + 'mcp.catalog.loadMore': 'Carregar mais', + 'mcp.configAssistant.title': 'Assistente de configuração', + 'mcp.configAssistant.empty': + 'Pergunte sobre configuração, variáveis de ambiente necessárias ou etapas de configuração.', + 'mcp.configAssistant.suggestedValues': 'Valores sugeridos:', + 'mcp.configAssistant.valueHidden': '(valor oculto)', + 'mcp.configAssistant.applySuggested': 'Aplicar valores sugeridos', + 'mcp.configAssistant.reinstallHint': 'Reinstale com esses valores para aplicá-los.', + 'mcp.configAssistant.thinking': 'Pensando...', + 'mcp.configAssistant.inputPlaceholder': + 'Faça uma pergunta (Enter para enviar, Shift+Enter para nova linha)', + 'mcp.configAssistant.send': 'Enviar', + 'mcp.configAssistant.failedResponse': 'Falha ao obter resposta', + 'mcp.toolList.availableSingular': '{count} ferramenta disponível', + 'mcp.toolList.availablePlural': '{count} ferramentas disponíveis', + 'mcp.toolList.tryTool': 'Tentar', + 'mcp.toolList.tryToolAria': 'Abrir playground de execução para {name}', + 'mcp.playground.title': 'Execute {name}', + 'mcp.playground.close': 'Fechar parquinho', + 'mcp.playground.inputSchema': 'Esquema de entrada', + 'mcp.playground.argsLabel': 'Argumentos (JSON)', + 'mcp.playground.argsHelp': + 'Digite JSON correspondendo ao esquema de entrada. Entrada vazia é tratada como {}.', + 'mcp.playground.runShortcut': '⌘/Ctrl + Enter para executar', + 'mcp.playground.format': 'Formato', + 'mcp.playground.invalidJson': 'JSON inválido', + 'mcp.playground.run': 'Executar ferramenta', + 'mcp.playground.running': 'Executando…', + 'mcp.playground.result': 'Resultado', + 'mcp.playground.resultError': 'A ferramenta retornou um erro', + 'mcp.playground.copyResult': 'Copiar resultado', + 'mcp.playground.copied': 'Copiado', + 'mcp.playground.history': 'História', + 'mcp.playground.historyEmpty': 'Ainda não houve invocações nesta sessão.', + 'mcp.playground.historyLoad': 'Carregar', + 'mcp.playground.unexpectedError': 'Erro inesperado ao invocar a ferramenta.', + 'mcp.catalog.deployed': 'Implantado', + 'mcp.catalog.installCount': '{count} instala', + 'app.update.dismissNotification': 'Ignorar notificação de atualização', + 'bootCheck.rpcAuthSuffix': 'em cada RPC.', + 'app.localAiDownload.expandAria': 'Expandir o progresso do download', + 'app.localAiDownload.collapseAria': 'Recolher o progresso do download', + 'app.localAiDownload.dismissAria': 'Dispensar notificação de download', + 'mobile.nav.ariaLabel': 'Navegação móvel', + 'progress.stepsAria': 'Etapas de progresso', + 'progress.stepAria': 'Etapa {current} de {total}', + 'workspace.vaultsTitle': 'Cofres de conhecimento', + 'workspace.vaultsDesc': + 'Aponte para uma pasta local; os arquivos são fragmentados e espelhados na memória.', + 'calls.title': 'Chamadas', + 'calls.comingSoonBody': 'Chamadas assistidas por IA estarão disponíveis em breve. Fique atento.', + 'art.rotatingTetrahedronAria': 'Nave espacial rotativa de tetraedro invertido', + 'mcp.installed.title': 'Instalado', + 'mcp.installed.browseCatalog': 'Navegar no catálogo', + 'mcp.installed.empty': 'Nenhum servidor MCP instalado ainda.', + 'mcp.installed.toolSingular': 'Ferramenta {count}', + 'mcp.installed.toolPlural': 'Ferramentas {count}', + 'mcp.health.title': 'Saúde', + 'mcp.health.summaryAria': 'Resumo da integridade da conexão MCP', + 'mcp.health.connectedCount': '{count} conectado', + 'mcp.health.connectingCount': '{count} conectando', + 'mcp.health.errorCount': 'erro {count}', + 'mcp.health.disconnectedCount': '{count} ocioso', + 'mcp.health.retryAll': 'Tentar novamente tudo ({count})', + 'mcp.health.retryAllAria': + 'Tentar novamente todos os servidores {count} que apresentaram erro MCP', + 'mcp.health.disconnectAll': 'Desconectar tudo ({count})', + 'mcp.health.disconnectAllAria': 'Desconecte todos os servidores MCP conectados ao {count}', + 'mcp.health.disconnectConfirm.title': 'Desconectar todos os servidores MCP?', + 'mcp.health.disconnectConfirm.body': + 'Isso desconectará {count} servidores MCP conectados no momento. As configurações instaladas e os segredos são mantidos; você poderá reconectar qualquer servidor mais tarde.', + 'mcp.health.disconnectConfirm.cancel': 'Cancelar', + 'mcp.health.disconnectConfirm.confirm': 'Desconectar tudo', + 'mcp.health.opErrorGeneric': 'Operação em massa falhou. Veja os registros.', + 'mcp.health.bulkPartialFailure': '{failed} de {total} servidores falharam. Veja os logs.', + 'mcp.installed.search.landmarkAria': 'Pesquisar servidores MCP instalados', + 'mcp.installed.search.inputAria': 'Filtrar servidores MCP instalados por nome', + 'mcp.installed.search.placeholder': 'Filtrar servidores…', + 'mcp.installed.search.clearAria': 'Limpar filtro', + 'mcp.installed.search.countMatches': '{shown} de servidores {total}', + 'mcp.installed.search.noMatches': 'Nenhum servidor corresponde a "{query}".', + 'mcp.inventory.openButton': 'Inventário', + 'mcp.inventory.openAria': 'Abra o painel de inventário compartilhável MCP', + 'mcp.inventory.title': 'Inventário MCP Compartilhável', + 'mcp.inventory.subtitle': + 'Exporte seus servidores MCP instalados como um manifesto portátil, sem segredos, ou importe um de um colega de equipe. Os valores de variáveis de ambiente secretas nunca são incluídos ou importados.', + 'mcp.inventory.close': 'Fechar painel de inventário', + 'mcp.inventory.tablistAria': 'Seções de inventário', + 'mcp.inventory.tab.export': 'Exportar', + 'mcp.inventory.tab.import': 'Importar', + 'mcp.inventory.export.empty': + 'Nenhum servidor MCP instalado ainda — nada para exportar. Instale um a partir do catálogo primeiro.', + 'mcp.inventory.export.privacyTitle': 'O que está neste manifesto', + 'mcp.inventory.export.privacyBody': + 'Nomes de servidores, nomes qualificados, nomes de VARIÁVEIS DE AMBIENTE e apenas configurações não secretas. Valores secretos, identificadores da sua máquina e timestamps por instalação são intencionalmente removidos.', + 'mcp.inventory.export.serverCount': 'Servidores {count} neste manifesto', + 'mcp.inventory.export.copy': 'Copiar', + 'mcp.inventory.export.copied': 'Copiado', + 'mcp.inventory.export.copyAria': 'Copie o manifesto JSON para a área de transferência', + 'mcp.inventory.export.download': 'Baixar', + 'mcp.inventory.export.downloadAria': 'Baixe o manifesto como um arquivo JSON', + 'mcp.inventory.import.trustTitle': 'Trate manifests importados como código não confiável', + 'mcp.inventory.import.trustBody': + 'Um servidor MCP é uma ferramenta que você concede ao seu agente. Importe manifestos apenas de fontes em que confia. Cada instalação requer seu clique explícito; nada é instalado automaticamente.', + 'mcp.inventory.import.pasteLabel': 'Cole o manifesto JSON', + 'mcp.inventory.import.pastePlaceholder': + 'Cole um manifesto aqui ou envie um arquivo.json abaixo.', + 'mcp.inventory.import.preview': 'Visualizar', + 'mcp.inventory.import.clear': 'Claro', + 'mcp.inventory.import.uploadFile': 'ou envie um arquivo.json', + 'mcp.inventory.import.uploadFileAria': 'Carregar um arquivo manifest.json', + 'mcp.inventory.import.fileTooLarge': + 'O arquivo é muito grande (mais de 1 MB). Recusando-se a carregar.', + 'mcp.inventory.import.fileReadFailed': 'Não foi possível ler o arquivo.', + 'mcp.inventory.import.parseErrorPrefix': 'Não foi possível analisar o manifesto:', + 'mcp.inventory.import.previewHeading': 'Visualizar', + 'mcp.inventory.import.previewCounts': + 'Servidores {total} — {newly} novos, {already} já instalados', + 'mcp.inventory.import.previewEmpty': 'O manifesto não contém servidores.', + 'mcp.inventory.import.exportedFrom': 'Exportado de {exporter}', + 'mcp.inventory.import.exportedAt': 'em {when}', + 'mcp.inventory.import.statusNew': 'Novo', + 'mcp.inventory.import.statusAlreadyInstalled': 'Já instalado', + 'mcp.inventory.import.envKeysLabel': 'Chaves de ambiente', + 'mcp.inventory.import.install': 'Instalar', + 'mcp.inventory.import.installAria': 'Instale {name} a partir deste manifesto', + 'mcp.inventory.import.skipped': 'ignorado', + 'mcp.inventory.parseError.empty': 'Manifesto está vazio.', + 'mcp.inventory.parseError.invalidJson': 'JSON inválido.', + 'mcp.inventory.parseError.rootNotObject': 'O manifesto deve ser um objeto JSON na raiz.', + 'mcp.inventory.parseError.unsupportedSchema': + 'Esquema de manifesto não suportado — este arquivo não foi produzido por um exportador compatível.', + 'mcp.inventory.parseError.missingExportedAt': 'Campo `exported_at` ausente ou inválido.', + 'mcp.inventory.parseError.missingExportedBy': 'Campo `exported_by` ausente ou inválido.', + 'mcp.inventory.parseError.invalidServers': 'Array `servers` ausente ou inválido.', + 'mcp.inventory.parseError.serverNotObject': 'Uma entrada de servidor não é um objeto.', + 'mcp.inventory.parseError.serverMissingQualifiedName': + 'Uma entrada de servidor está sem seu qualified_name.', + 'mcp.inventory.parseError.serverMissingDisplayName': + 'Uma entrada de servidor está sem seu display_name.', + 'mcp.inventory.parseError.serverEnvKeysNotArray': + 'Uma entrada de servidor possui um campo env_keys que não é um array de strings.', + 'mcp.inventory.parseError.serverContainsEnv': + 'Uma entrada de servidor contém um mapa de valores `env`. Recusando importar — os manifests devem conter apenas env_keys (nomes), nunca valores secretos.', + 'mcp.inventory.parseError.duplicateQualifiedName': + 'Nome_qualificado duplicado encontrado no manifesto. Cada servidor deve aparecer no máximo uma vez.', + 'mcp.tab.loading': 'Carregando servidores MCP...', + 'mcp.tab.emptyDetail': 'Selecione um servidor ou navegue no catálogo.', + 'mcp.install.loadingDetail': 'Carregando detalhes do servidor...', + 'mcp.install.back': 'Voltar', + 'mcp.install.title': 'Instalar {name}', + 'mcp.install.requiredEnv': 'Variáveis de ambiente necessárias', + 'mcp.install.enterValue': 'Digite {key}', + 'mcp.install.show': 'Mostrar', + 'mcp.install.hide': 'Ocultar', + 'mcp.install.configLabel': 'Configuração (JSON opcional)', + 'mcp.install.configPlaceholder': '{"key": "value"}', + 'mcp.install.missingRequired': '"{key}" é obrigatório', + 'mcp.install.invalidJson': 'JSON de configuração não é JSON válido', + 'mcp.install.failedDetail': 'Falha ao carregar detalhes do servidor', + 'mcp.install.failedInstall': 'Falha na instalação', + 'mcp.install.button': 'Instalação', + 'mcp.install.installing': 'Instalando...', + 'mcp.detail.suggestedEnvReady': 'Valores de ambiente sugeridos prontos', + 'mcp.detail.suggestedEnvBody': + 'Reinstale este servidor com os valores sugeridos para aplicá-los: {keys}', + 'mcp.detail.connect': 'Conectar', + 'mcp.detail.connecting': 'Conectando...', + 'mcp.detail.disconnect': 'Desconectar', + 'mcp.detail.hideAssistant': 'Ocultar assistente', + 'mcp.detail.helpConfigure': 'Ajude-me a configurar', + 'mcp.detail.confirmUninstall': 'Confirmar desinstalação?', + 'mcp.detail.confirmUninstallAction': 'Sim, desinstalar', + 'mcp.detail.uninstall': 'Desinstalar', + 'mcp.detail.envVars': 'Variáveis de ambiente', + 'mcp.detail.tools': 'Ferramentas', + 'onboarding.skipForNow': 'Ignorar por agora', + 'onboarding.localAI.continueWithCloud': 'Continuar com a nuvem', + 'onboarding.localAI.useLocalAnyway': + 'Usar IA local mesmo assim (não recomendado para este dispositivo)', + 'onboarding.localAI.useLocalInstead': 'Use IA local (conecte Ollama agora)', + 'onboarding.localAI.setupIssue': 'A configuração de IA local encontrou um problema', + 'autonomy.title': 'Autonomia do agente', + 'autonomy.maxActionsLabel': 'Máximo de ações por hora', + 'autonomy.maxActionsHelp': + 'Número máximo de ações de ferramentas que um agente pode executar por hora corrida. O novo valor se aplica ao próximo chat. Cron jobs e ouvintes de canais mantêm o limite atual até você reiniciar o OpenHuman.', + 'autonomy.statusSaving': 'Salvando…', + 'autonomy.statusSaved': 'Salvo.', + 'autonomy.statusFailed': 'Falha', + 'autonomy.unlimitedNote': 'Ilimitado — limitação de taxa desativada.', + 'autonomy.invalidIntegerMsg': + 'Deve ser um número inteiro positivo (use o preset Ilimitado para sem limite).', + 'autonomy.presetUnlimited': 'Ilimitado (padrão)', + 'triggers.toggleFailed': '{action} falhou para {trigger}: {message}', + 'settings.ai.overview': 'Visão Geral do Sistema de IA', + 'settings.ai.configStatus': 'Status da Configuração', + 'settings.ai.fallbackMode': 'Modo de Fallback', + 'settings.ai.loadedFromRuntime': 'Carregado do Runtime', + 'settings.ai.loadingDuration': 'Duração do Carregamento', + 'settings.ai.localRuntime': 'Runtime do Modelo Local', + 'settings.ai.openManager': 'Abrir Gerenciador', + 'settings.ai.retryDownload': 'Tentar Download Novamente', + 'settings.ai.state': 'Estado', + 'settings.ai.targetModel': 'Modelo Alvo', + 'settings.ai.download': 'Baixar', + 'settings.ai.localModelUnavailable': 'Status do modelo local indisponível.', + 'settings.ai.soulConfig': 'Configuração de Persona SOUL', + 'settings.ai.refreshing': 'Atualizando...', + 'settings.ai.refreshSoul': 'Atualizar SOUL', + 'settings.ai.loadingSoul': 'Carregando configuração SOUL...', + 'settings.ai.identity': 'Identidade', + 'settings.ai.personality': 'Personalidade', + 'settings.ai.safetyRules': 'Regras de Segurança', + 'settings.ai.source': 'Fonte', + 'settings.ai.loaded': 'Carregado', + 'settings.ai.toolsConfig': 'Configuração de FERRAMENTAS', + 'settings.ai.refreshTools': 'Atualizar FERRAMENTAS', + 'settings.ai.toolsAvailable': 'Ferramentas Disponíveis', + 'settings.ai.tools': 'ferramentas', + 'settings.ai.activeSkills': 'Habilidades Ativas', + 'settings.ai.skills': 'habilidades', + 'settings.ai.skillsOverview': 'Visão Geral das Habilidades', + 'settings.ai.refreshingAll': 'Atualizando Tudo...', + 'settings.ai.refreshAll': 'Atualizar Toda a Configuração de IA', + 'settings.notifications.suppressAll': 'Suprimir todas as notificações', + 'settings.notifications.suppressAllDesc': + 'Bloquear todos os avisos de notificação do SO de apps incorporados independentemente do estado de foco.', + 'settings.notifications.toggleDnd': 'Ativar/Desativar Não Perturbe', + 'settings.notifications.categories': 'Categorias', + 'settings.notifications.categoryFooter': + 'Desativar uma categoria impede que novas notificações desse tipo apareçam na central de notificações. As notificações existentes permanecem até serem limpas.', + 'settings.billing.movedToWeb': 'Cobrança movida para a web', + 'settings.billing.openDashboard': 'Abrir painel de cobrança', + 'settings.billing.movedToWebDesc': + 'Alterações de assinatura, métodos de pagamento, créditos e faturas agora são gerenciados no TinyHumans na web.', + 'settings.billing.backToSettings': 'Voltar às configurações', + 'settings.billing.openingBrowser': 'Abrindo seu navegador...', + 'settings.billing.browserNotOpen': 'Se seu navegador não abriu, use o botão acima.', + 'settings.billing.browserOpenFailed': + 'O navegador não pôde ser aberto automaticamente. Use o botão acima.', + 'settings.tools.chooseCapabilities': + 'Escolha quais funcionalidades o OpenHuman pode usar em seu nome.', + 'settings.tools.saveChanges': 'Salvar Alterações', + 'settings.tools.preferencesSaved': 'Preferências salvas', + 'settings.tools.saveFailed': 'Falha ao salvar preferências. Tente novamente.', + 'settings.screenAwareness.mode': 'Modo', + 'settings.screenAwareness.allExceptBlacklist': 'Todos Exceto Lista Negra', + 'settings.screenAwareness.whitelistOnly': 'Somente Lista Branca', + 'settings.screenAwareness.screenMonitoring': 'Monitoramento de Tela', + 'settings.screenAwareness.saveSettings': 'Salvar Configurações', + 'settings.screenAwareness.session': 'Sessão', + 'settings.screenAwareness.status': 'Status', + 'settings.screenAwareness.active': 'Ativo', + 'settings.screenAwareness.stopped': 'Parado', + 'settings.screenAwareness.remaining': 'Restante', + 'settings.screenAwareness.startSession': 'Iniciar Sessão', + 'settings.screenAwareness.stopSession': 'Encerrar Sessão', + 'settings.screenAwareness.analyzeNow': 'Analisar Agora', + 'settings.screenAwareness.macosOnly': + 'A captura de tela e os controles de permissão do Reconhecimento de Tela são suportados atualmente apenas no macOS.', + 'connections.comingSoon': 'Em breve', + 'connections.setUp': 'Configurar', + 'connections.configured': 'Configurado', + 'connections.unavailable': 'Indisponível', + 'connections.checking': 'Verificando…', + 'connections.walletConfigured': + 'Identidades locais de EVM, BTC, Solana e Tron estão configuradas a partir da sua frase de recuperação.', + 'connections.walletReady': + 'Configure identidades locais de EVM, BTC, Solana e Tron a partir de uma única frase de recuperação.', + 'connections.walletError': + 'Não foi possível verificar o status da carteira. Toque para tentar novamente no painel de Frase de Recuperação.', + 'connections.walletChecking': 'Verificando status da carteira...', + 'connections.walletIdentities': 'Identidades de carteira', + 'connections.walletDerived': + 'Derivado localmente da sua frase de recuperação e armazenado apenas como metadados seguros.', + 'connections.privacySecurity': 'Privacidade e Segurança', + 'connections.privacySecurityDesc': + 'Todos os dados e credenciais são armazenados localmente com política de retenção zero. Suas informações são criptografadas e nunca compartilhadas com terceiros.', + 'channels.status.connecting': 'Conectando', + 'channels.status.notConfigured': 'Não configurado', + 'channels.noActiveRoute': 'Nenhuma rota ativa', + 'channels.activeRoute': 'Rota ativa', + 'channels.loadingDefinitions': 'Carregando definições de canal...', + 'channels.channelConnections': 'Conexões de Canal', + 'channels.configureAuthModes': 'Configure modos de autenticação para cada canal de mensagens.', + 'channels.configNotAvailable': 'Configuração para', + 'channels.channel': 'canal', + 'devOptions.coreModeNotSet': 'Modo do core: não definido', + 'devOptions.coreModeNotSetDesc': + 'O seletor de verificação de inicialização ainda não foi confirmado. Use Trocar modo no seletor para escolher Local ou Cloud.', + 'devOptions.local': 'Local', + 'devOptions.embeddedCoreSidecar': 'Core sidecar incorporado', + 'devOptions.sidecarSpawned': 'Iniciado em processo pelo shell Tauri na abertura do app.', + 'devOptions.cloud': 'Nuvem', + 'devOptions.remoteCoreRpc': 'RPC do core remoto', + 'devOptions.token': 'Token', + 'devOptions.tokenNotSet': 'não definido — RPC retornará 401', + 'devOptions.triggerSentryTest': 'Disparar Teste do Sentry (staging)', + 'devOptions.triggerSentryTestDesc': + 'Envia um erro marcado para verificar o pipeline do Sentry. Issue #1072 — remover após verificação.', + 'devOptions.sendTestEvent': 'Enviar evento de teste', + 'devOptions.sending': 'Enviando…', + 'devOptions.eventSent': 'Evento enviado', + 'devOptions.sentryDisabled': '(sem id - Sentinela desabilitada nesta compilação)', + 'devOptions.failed': 'Falhou', + 'devOptions.appLogs': 'Logs do app', + 'devOptions.appLogsDesc': + 'Abrir a pasta com os arquivos de log diários rotativos. Anexe o arquivo mais recente ao reportar um problema.', + 'devOptions.openLogsFolder': 'Abrir pasta de logs', + 'mnemonic.phraseSaved': 'Frase de recuperação salva', + 'mnemonic.walletReady': + 'Identidades de carteira multi-chain estão prontas. Retornando às configurações...', + 'mnemonic.writeDownWords': 'Anote estas', + 'mnemonic.wordsInOrder': + 'palavras em ordem e guarde-as em um lugar seguro. Esta frase protege sua chave de criptografia local e suas identidades de carteira EVM, BTC, Solana e Tron.', + 'mnemonic.cannotRecover': + 'Esta frase nunca poderá ser recuperada se perdida e deve permanecer totalmente local no seu dispositivo.', + 'mnemonic.copyToClipboard': 'Copiar para Área de Transferência', + 'mnemonic.alreadyHavePhrase': 'Já tenho uma frase de recuperação', + 'mnemonic.consentSaved': + 'Salvei esta frase e concordo em usá-la para configuração da carteira local', + 'mnemonic.enterPhraseToRestore': + 'Insira sua frase de recuperação abaixo para restaurar suas identidades de carteira local, ou cole a frase completa em qualquer campo (12 palavras para novos backups; frases de 24 palavras de versões mais antigas ainda funcionam).', + 'mnemonic.words': 'Palavras', + 'mnemonic.validPhrase': 'Frase de recuperação válida', + 'mnemonic.generateNewPhrase': 'Gerar uma nova frase de recuperação', + 'mnemonic.securingData': 'Protegendo Seus Dados...', + 'mnemonic.saveRecoveryPhrase': 'Salvar Frase de Recuperação', + 'mnemonic.userNotLoaded': + 'Usuário não carregado. Por favor, faça login novamente ou atualize a página.', + 'mnemonic.invalidPhrase': + 'Frase de recuperação inválida. Verifique as palavras e tente novamente.', + 'mnemonic.somethingWentWrong': 'Algo deu errado. Por favor, tente novamente.', + 'team.failedToCreate': 'Falha ao criar equipe', + 'team.invalidInviteCode': 'Código de convite inválido ou expirado', + 'team.failedToSwitch': 'Falha ao trocar de equipe', + 'team.failedToLeave': 'Falha ao sair da equipe', + 'team.role.owner': 'Proprietário', + 'team.role.admin': 'Administrador', + 'team.role.billingManager': 'Gerente de Cobrança', + 'team.role.member': 'Membro', + 'team.active': 'Ativo', + 'team.personalTeam': 'Equipe pessoal', + 'team.manageTeam': 'Gerenciar Equipe', + 'team.switching': 'Trocando...', + 'team.switch': 'Trocar', + 'team.leaving': 'Saindo...', + 'team.leave': 'Sair', + 'team.yourTeams': 'Suas Equipes', + 'team.createNewTeam': 'Criar Nova Equipe', + 'team.teamName': 'Nome da equipe', + 'team.creating': 'Criando...', + 'team.joinExistingTeam': 'Entrar em Equipe Existente', + 'team.inviteCode': 'Código de convite', + 'team.joining': 'Entrando...', + 'team.join': 'Entrar', + 'team.leaveTeam': 'Sair da Equipe', + 'team.confirmLeave': 'Tem certeza de que deseja sair de', + 'team.leaveWarning': + 'Você perderá o acesso à equipe e a todos os recursos da equipe. Você precisará de um novo convite para reingressar.', + 'team.management': 'Gerenciamento de Equipe', + 'team.notFound': 'Equipe não encontrada', + 'team.accessDenied': 'Acesso negado', + 'team.members': 'Membros', + 'team.membersDesc': 'Gerenciar membros e funções da equipe', + 'team.invites': 'Convites', + 'team.invitesDesc': 'Gerar e gerenciar códigos de convite', + 'team.settings': 'Configurações da equipe', + 'team.settingsDesc': 'Editar nome e configurações da equipe', + 'team.editSettings': 'Editar configurações da equipe', + 'team.enterName': 'Insira o nome da equipe', + 'team.saving': 'Salvando...', + 'team.saveChanges': 'Salvar Alterações', + 'team.delete': 'Excluir equipe', + 'team.deleteDesc': 'Excluir permanentemente esta equipe', + 'team.deleting': 'Excluindo...', + 'team.failedToUpdate': 'Falha ao atualizar equipe', + 'team.failedToDelete': 'Falha ao excluir equipe', + 'team.manageTitle': 'Gerenciar {name}', + 'team.planCreated': 'Plano {plan} • Criado {date}', + 'team.confirmDelete': 'Tem certeza de que deseja excluir {name}?', + 'team.deleteWarning': + 'Esta ação não pode ser desfeita. Todos os dados da equipe serão removidos permanentemente.', + 'voice.title': 'Ditado por Voz', + 'voice.settings': 'Configurações de Voz', + 'voice.settingsDesc': + 'Mantenha a tecla de atalho pressionada para ditar e inserir texto no campo ativo.', + 'voice.hotkey': 'Tecla de Atalho', + 'voice.activationMode': 'Modo de Ativação', + 'voice.tapToToggle': 'Toque para alternar', + 'voice.writingStyle': 'Estilo de Escrita', + 'voice.verbatimTranscription': 'Transcrição literal', + 'voice.naturalCleanup': 'Limpeza natural', + 'voice.autoStart': 'Iniciar servidor de voz automaticamente com o core', + 'voice.customDictionary': 'Dicionário Personalizado', + 'voice.customDictionaryDesc': + 'Adicione nomes, termos técnicos e palavras do domínio para melhorar a precisão do reconhecimento.', + 'voice.addWord': 'Adicionar uma palavra...', + 'voice.sttDisabled': + 'O ditado por voz está desativado até que o modelo STT local seja baixado e esteja pronto.', + 'voice.openLocalAiModel': 'Abrir Modelo de IA Local', + 'voice.serverRestarted': 'Servidor de voz reiniciado com as novas configurações.', + 'voice.settingsSaved': 'Configurações de voz salvas.', + 'voice.serverStarted': 'Servidor de voz iniciado.', + 'voice.serverStopped': 'Servidor de voz parado.', + 'voice.saveVoiceSettings': 'Salvar Configurações de Voz', + 'voice.startVoiceServer': 'Iniciar Servidor de Voz', + 'voice.stopVoiceServer': 'Parar Servidor de Voz', + 'voice.debugTitle': 'Depuração de Voz', + 'voice.failedToLoadSettings': 'Falha ao carregar configurações de voz', + 'voice.failedToSaveSettings': 'Falha ao salvar as configurações de voz', + 'voice.failedToStartServer': 'Falha ao iniciar o servidor de voz', + 'voice.failedToStopServer': 'Falha ao parar o servidor de voz', + 'voice.sttDisabledPrefix': + 'A ditação por voz está desativada até que o modelo STT local seja baixado. Use o', + 'voice.sttDisabledSuffix': 'acima para instalar o Whisper.', + 'voice.debug.failedToLoadVoiceDebugData': 'Falha ao carregar dados de depuração de voz', + 'voice.debug.settingsSaved': 'Configurações de depuração salvas.', + 'voice.debug.failedToSaveSettings': 'Falha ao salvar as configurações de voz', + 'voice.debug.runtimeStatus': 'Status do tempo de execução', + 'voice.debug.runtimeStatusDesc': + 'Diagnósticos ao vivo para o servidor de voz e o motor de reconhecimento de fala.', + 'voice.debug.server': 'Servidor', + 'voice.debug.unavailable': 'Indisponível', + 'voice.debug.ready': 'Pronto', + 'voice.debug.notReady': 'Não pronto', + 'voice.debug.hotkey': 'Tecla de atalho', + 'voice.debug.notAvailable': 'n/a', + 'voice.debug.mode': 'Modo', + 'voice.debug.transcriptions': 'Transcrições', + 'voice.debug.serverError': 'Erro de servidor', + 'voice.debug.advancedSettings': 'Configurações avançadas', + 'voice.debug.advancedSettingsDesc': + 'Parâmetros de ajuste de baixo nível para gravação e detecção de silêncio.', + 'voice.debug.minimumRecordingSeconds': 'Segundos Mínimos de Gravação', + 'voice.debug.silenceThreshold': 'Limite de Silêncio (RMS)', + 'voice.debug.silenceThresholdDesc': + 'Gravações com energia abaixo deste valor são tratadas como silêncio e ignoradas. Menor = mais sensível.', + 'voice.providers.saved': 'Provedores de voz salvos.', + 'voice.providers.failedToSave': 'Falha ao salvar provedores de voz', + 'voice.providers.ellipsis': '…', + 'voice.providers.installing': 'Instalando', + 'voice.providers.installingBusy': 'Instalando…', + 'voice.providers.reinstallLocally': 'Reinstale localmente', + 'voice.providers.repair': 'Reparar', + 'voice.providers.retryLocally': 'Tente novamente localmente', + 'voice.providers.installLocally': 'Instale localmente', + 'voice.providers.whisperReady': 'O Whisper está pronto.', + 'voice.providers.whisperInstallStarted': 'Instalação do Whisper iniciada', + 'voice.providers.queued': 'na fila', + 'voice.providers.failedToInstallWhisper': 'Falha ao instalar o Whisper', + 'voice.providers.piperReady': 'Piper está pronto.', + 'voice.providers.piperInstallStarted': 'Instalação do Piper iniciada', + 'voice.providers.failedToInstallPiper': 'Falha ao instalar o Piper', + 'voice.providers.title': 'Provedores de voz', + 'voice.providers.desc': + 'Escolha onde a transcrição e a síntese são executadas. Use os botões Instalar localmente para baixar os binários e modelos no seu workspace. Os provedores locais podem ser salvos antes da conclusão da instalação — não é necessária configuração manual de WHISPER_BIN ou PIPER_BIN.', + 'voice.providers.sttProvider': 'Provedor de fala para texto', + 'voice.providers.sttProviderAria': 'Provedor STT', + 'voice.providers.cloudWhisperProxy': 'Nuvem (proxy Whisper)', + 'voice.providers.localWhisper': 'Whisper local', + 'voice.providers.installRequired': '(instalação necessária)', + 'voice.providers.whisperInstalledTitle': 'O Whisper está instalado. Clique para reinstalar.', + 'voice.providers.whisperDownloadTitle': 'Baixar o whisper.cpp e o modelo GGML no seu workspace.', + 'voice.providers.installed': 'Instalado', + 'voice.providers.installFailed': 'Falha na instalação', + 'voice.providers.notInstalled': 'Não instalado', + 'voice.providers.whisperModel': 'Modelo Whisper', + 'voice.providers.whisperModelAria': 'Modelo Whisper', + 'voice.providers.whisperModelTiny': 'Minúsculo (39 MB, mais rápido)', + 'voice.providers.whisperModelBase': 'Base (74 MB)', + 'voice.providers.whisperModelSmall': 'Pequeno (244 MB)', + 'voice.providers.whisperModelMedium': 'Médio (769 MB, recomendado)', + 'voice.providers.whisperModelLargeTurbo': 'Grande v3 Turbo (1,5 GB, melhor precisão)', + 'voice.providers.ttsProvider': 'Provedor de texto para fala', + 'voice.providers.ttsProviderAria': 'Provedor TTS', + 'voice.providers.cloudElevenLabsProxy': 'Nuvem (proxy ElevenLabs)', + 'voice.providers.localPiper': 'Piper local', + 'voice.providers.piperInstalledTitle': 'O Piper está instalado. Clique para reinstalar.', + 'voice.providers.piperDownloadTitle': + 'Baixar o Piper e a voz en_US-lessac-medium incluída no seu workspace.', + 'voice.providers.piperVoice': 'Voz Piper', + 'voice.providers.piperVoiceAria': 'Voz Piper', + 'voice.providers.customVoiceOption': 'Outro (digite abaixo)…', + 'voice.providers.customVoiceAria': 'Piper voice id (personalizado)', + 'voice.providers.customVoicePlaceholder': 'en_US-lessac-medium', + 'voice.providers.piperVoicesDesc': + 'As vozes vêm de huggingface.co/rhasspy/piper-voices. Trocar de voz pode exigir um clique em Instalar/Reinstalar para baixar o novo .onnx.', + 'voice.providers.mascotVoice': 'Voz do mascote', + 'voice.providers.mascotVoiceDescPrefix': + 'A voz ElevenLabs que o mascote usa para respostas faladas é configurada em', + 'voice.providers.mascotSettings': 'Configurações do mascote', + 'voice.providers.mascotVoiceDescSuffix': '.', + 'voice.providers.hotkeyPlaceholder': 'Fn', + 'voice.providers.piperPreset.lessacMedium': 'US · Lessac (neutro, recomendado)', + 'voice.providers.piperPreset.lessacHigh': 'EUA · Lessac (qualidade superior, maior)', + 'voice.providers.piperPreset.ryanMedium': 'EUA · Ryan (masculino)', + 'voice.providers.piperPreset.amyMedium': 'EUA · Amy (feminino)', + 'voice.providers.piperPreset.librittsHigh': 'EUA · LibriTTS (multialto-falante)', + 'voice.providers.piperPreset.alanMedium': 'GB · Alan (masculino)', + 'voice.providers.piperPreset.jennyDiocoMedium': 'GB · Jenny Dioco (feminino)', + 'voice.providers.piperPreset.northernEnglishMaleMedium': 'GB · Inglês do Norte (masculino)', + 'voice.providers.chip.cloud': 'OpenHuman (Gerenciado)', + 'voice.providers.chip.cloudAria': 'O provedor gerenciado OpenHuman está sempre ativado', + 'voice.providers.chip.whisper': 'Whisper (Local)', + 'voice.providers.chip.enableWhisper': 'Ativar Whisper STT local', + 'voice.providers.chip.disableWhisper': 'Desativar Whisper STT local', + 'voice.providers.chip.piper': 'Piper (Local)', + 'voice.providers.chip.enablePiper': 'Ativar Piper TTS local', + 'voice.providers.chip.disablePiper': 'Desativar Piper TTS local', + 'voice.providers.chip.enableProvider': 'Enable', + 'voice.providers.chip.disableProvider': 'Disable', + 'voice.providers.chip.apiKeyLabel': 'Chave de API', + 'voice.providers.chip.apiKeyPlaceholder': 'sk-…', + 'voice.providers.chip.comingSoon': 'em breve', + 'voice.modal.title': 'Configure', + 'voice.modal.desc': + 'Insira sua chave de API para ativar este provedor. Você pode testar a conexão antes de salvar.', + 'voice.modal.testKey': 'Testar Chave', + 'voice.modal.testing': 'Testando…', + 'voice.modal.saveAndEnable': 'Salvar e Ativar', + 'voice.modal.enable': 'Enable', + 'voice.modal.whisperDesc': + 'Escolha um tamanho de modelo e instale o binário Whisper e o modelo GGML no seu workspace. Modelos maiores são mais precisos, porém mais lentos.', + 'voice.modal.piperDesc': + 'Escolha uma voz e instale o binário Piper e o modelo ONNX no seu workspace. O Piper funciona completamente offline com baixa latência.', + 'voice.routing.title': 'Roteamento de Voz', + 'voice.routing.desc': + 'Escolha quais provedores habilitados lidam com reconhecimento e síntese de fala.', + 'voice.routing.save': 'Save', + 'voice.routing.testStt': 'Testar STT', + 'voice.routing.testTts': 'Testar TTS', + 'voice.routing.elevenlabsVoice': 'Voz ElevenLabs', + 'voice.routing.elevenlabsVoiceAria': 'Seleção de voz ElevenLabs', + 'voice.routing.elevenlabsVoiceIdAria': 'ID de voz ElevenLabs (personalizado)', + 'voice.routing.elevenlabsVoiceDesc': + 'Escolha uma voz selecionada ou cole um ID de voz personalizado do seu painel ElevenLabs.', + 'voice.externalProviders.title': 'Provedores de Voz Externos', + 'voice.externalProviders.desc': + 'Conecte APIs de STT/TTS de terceiros como Deepgram, ElevenLabs ou OpenAI diretamente.', + 'voice.externalProviders.keySet': 'Chave definida', + 'voice.externalProviders.noKey': 'Sem chave de API', + 'voice.externalProviders.test': 'Test', + 'voice.externalProviders.testing': 'Testando…', + 'voice.externalProviders.remove': 'Remove', + 'voice.externalProviders.provider': 'Provider', + 'voice.externalProviders.selectProvider': 'Selecione um provedor…', + 'voice.externalProviders.apiKey': 'Chave de API', + 'voice.externalProviders.apiKeyPlaceholder': 'sk-…', + 'voice.externalProviders.add': 'Add', + 'autocomplete.title': 'Autocompletar', + 'autocomplete.settings': 'Configurações', + 'autocomplete.acceptWithTab': 'Aceitar com Tab', + 'autocomplete.stylePreset': 'Predefinição de Estilo', + 'autocomplete.style.balanced': 'Equilibrado', + 'autocomplete.style.concise': 'Conciso', + 'autocomplete.style.formal': 'Formal', + 'autocomplete.style.casual': 'Casual', + 'autocomplete.style.custom': 'Personalizado', + 'autocomplete.disabledApps': 'Apps Desativados (um bundle/token de app por linha)', + 'autocomplete.saveSettings': 'Salvar Configurações', + 'autocomplete.saving': 'Salvando…', + 'autocomplete.runtime': 'Tempo de execução', + 'autocomplete.running': 'Rodando', + 'autocomplete.start': 'Iniciar', + 'autocomplete.stop': 'Parar', + 'autocomplete.settingsSaved': 'Configurações de autocompletar salvas.', + 'autocomplete.started': 'Autocompletar iniciado.', + 'autocomplete.didNotStart': 'O autocompletar não iniciou. Verifique se está ativado.', + 'autocomplete.stopped': 'Autocompletar parado.', + 'autocomplete.advancedSettings': 'Configurações avançadas', + 'autocomplete.debugTitle': 'Depuração de Autocompletar', + 'chat.agentChat': 'Chat com Agente', + 'chat.overrides': 'Substituições', + 'chat.model': 'Modelo', + 'chat.temperature': 'Temperatura', + 'chat.conversation': 'Conversa', + 'chat.startAgentConversation': 'Inicie uma conversa com o agente.', + 'chat.you': 'Você', + 'chat.agent': 'Agente', + 'chat.askAgent': 'Pergunte qualquer coisa ao agente...', + 'chat.sendMessage': 'Enviar Mensagem', + 'composio.triageTitle': 'Gatilhos de Integração', + 'composio.triageDesc': + 'Quando ativo, cada gatilho Composio recebido passa por uma etapa de triagem de IA que classifica o evento e pode iniciar ações automatizadas — um turno de LLM local por gatilho. Desative globalmente ou por integração se preferir revisão manual. Se a variável de ambiente', + 'composio.disableAllTriage': 'Desativar triagem de IA para todos os gatilhos', + 'composio.triggersStillRecorded': + 'Os gatilhos ainda são registrados no histórico — nenhum turno de LLM é executado.', + 'composio.disableSpecificIntegrations': 'Desativar triagem de IA para integrações específicas', + 'composio.settingsSaved': 'Configurações salvas', + 'composio.saveFailed': 'Falha ao salvar. Tente novamente.', + 'cron.title': 'Tarefas Cron', + 'cron.scheduledJobs': 'Tarefas Agendadas', + 'cron.manageCronJobs': 'Gerenciar tarefas cron do agendador do core.', + 'cron.refreshCronJobs': 'Atualizar Tarefas Cron', + 'localModel.modelStatus': 'Status do Modelo', + 'localModel.downloadModels': 'Baixar Modelos', + 'localModel.usage': 'Uso', + 'localModel.usageDesc': + 'Escolha quais subsistemas rodam no modelo local. O que estiver desligado usa a nuvem.', + 'localModel.enableRuntime': 'Ativar runtime de IA local', + 'localModel.enableRuntimeDesc': + 'Chave mestre. Desligado por padrão — Ollama fica inativo. Quando ligado, o sumarizador de árvore, inteligência de tela e autocompletar sempre usam o modelo local.', + 'localModel.advancedSettings': 'Configurações avançadas', + 'localModel.debugTitle': 'Depuração de Modelo Local', + 'screenAwareness.debugTitle': 'Depuração de Reconhecimento de Tela', + 'screenAwareness.debug.debugAndDiagnostics': 'Depuração e diagnóstico', + 'screenAwareness.debug.collapse': 'Collapse', + 'screenAwareness.debug.expand': 'Expandir', + 'screenAwareness.debug.failedToSave': 'Falha ao salvar inteligência de tela', + 'screenAwareness.debug.policyTitle': 'Política de inteligência de tela', + 'screenAwareness.debug.baselineFps': 'FPS de linha de base', + 'screenAwareness.debug.useVisionModel': 'Usar modelo de visão', + 'screenAwareness.debug.useVisionModelDesc': + 'Enviar capturas de tela para um LLM de visão para contexto mais rico. Quando desativado, apenas o texto de OCR é usado com um LLM de texto — mais rápido e sem necessidade de modelo de visão.', + 'screenAwareness.debug.keepScreenshots': 'Manter capturas de tela', + 'screenAwareness.debug.keepScreenshotsDesc': + 'Salvar capturas de tela no workspace em vez de excluí-las após o processamento', + 'screenAwareness.debug.allowlist': 'Lista de permissões (uma regra por linha)', + 'screenAwareness.debug.denylist': 'Lista de bloqueios (uma regra por linha)', + 'screenAwareness.debug.saveSettings': 'Salvar configurações de inteligência de tela', + 'screenAwareness.debug.sessionStats': 'Estatísticas de sessão', + 'screenAwareness.debug.framesEphemeral': 'Quadros (efêmeros)', + 'screenAwareness.debug.panicStop': 'Parada de pânico', + 'screenAwareness.debug.defaultPanicHotkey': 'Cmd+Shift+.', + 'screenAwareness.debug.vision': 'Visão', + 'screenAwareness.debug.idle': 'inativa', + 'screenAwareness.debug.visionQueue': 'Fila de visão', + 'screenAwareness.debug.lastVision': 'Última visão', + 'screenAwareness.debug.notAvailable': 'n/a', + 'screenAwareness.debug.visionSummaries': 'Resumos de visão', + 'screenAwareness.debug.refreshing': 'Atualizando…', + 'screenAwareness.debug.noSummaries': 'Ainda não há resumos.', + 'screenAwareness.debug.unknownApp': 'Aplicativo desconhecido', + 'screenAwareness.debug.macosOnly': + 'O Screen Intelligence V1 é suportado apenas no macOS no momento.', + 'memory.debugTitle': 'Depuração de Memória', + 'memory.documents': 'Documentos', + 'memory.filterByNamespace': 'Filtrar por namespace...', + 'memory.refresh': 'Atualizar', + 'memory.noDocumentsFound': 'Nenhum documento encontrado.', + 'memory.delete': 'Excluir', + 'memory.rawResponse': 'Resposta bruta', + 'memory.namespaces': 'Namespaces', + 'memory.noNamespacesFound': 'Nenhum namespace encontrado.', + 'memory.queryRecall': 'Consultar e recuperar', + 'memory.namespace': 'Namespace', + 'memory.queryText': 'Texto da consulta...', + 'memory.defaultMaxChunks': '10', + 'memory.maxChunks': 'máximo de pedaços', + 'memory.query': 'Consulta', + 'memory.recall': 'Recuperar', + 'memory.queryLabel': 'Consulta', + 'memory.recallLabel': 'Recuperar', + 'memory.queryResult': 'Resultado da consulta', + 'memory.recallResult': 'Resultado de recuperação', + 'memory.clearNamespace': 'Limpar Namespace', + 'memory.clearNamespaceDescription': + 'Excluir permanentemente todos os documentos dentro de um namespace.', + 'memory.selectNamespace': 'Selecione o namespace...', + 'memory.exampleNamespace': 'por exemplo. habilidade:gmail:user@example.com', + 'memory.clear': 'Limpar', + 'memory.deleteConfirm': 'Excluir documento "{documentId}" no namespace "{namespace}"?', + 'memory.clearNamespaceConfirm': + 'Isso excluirá permanentemente TODOS os documentos no namespace "{namespace}". Continuar?', + 'memory.clearNamespaceSuccess': 'Namespace "{namespace}" limpo.', + 'memory.clearNamespaceEmpty': 'Nada a limpar em "{namespace}".', + 'webhooks.debugTitle': 'Depuração de Webhooks', + 'webhooks.failedToLoadDebugData': 'Falha ao carregar dados de depuração de webhook', + 'webhooks.clearLogsConfirm': 'Limpar todos os logs de depuração de webhook capturados?', + 'webhooks.failedToClearLogs': 'Falha ao limpar logs de webhook', + 'webhooks.loading': 'Carregando...', + 'webhooks.refresh': 'Atualizar', + 'webhooks.clearing': 'Limpando...', + 'webhooks.clearLogs': 'Limpar logs', + 'webhooks.registered': 'registrou', + 'webhooks.captured': 'capturado', + 'webhooks.live': 'ao vivo', + 'webhooks.disconnected': 'desconectado', + 'webhooks.lastEvent': 'Último evento', + 'webhooks.at': 'em', + 'webhooks.registeredWebhooks': 'Webhooks registrados', + 'webhooks.noActiveRegistrations': 'Nenhum registro ativo.', + 'webhooks.resolvingBackendUrl': 'Resolvendo back-end URL…', + 'webhooks.capturedRequests': 'Solicitações capturadas', + 'webhooks.noRequestsCaptured': 'Nenhuma solicitação de webhook capturada ainda.', + 'webhooks.unrouted': 'não roteado', + 'webhooks.pending': 'pendente', + 'webhooks.requestHeaders': 'Cabeçalhos de solicitação', + 'webhooks.queryParams': 'Parâmetros de consulta', + 'webhooks.requestBody': 'Corpo da solicitação', + 'webhooks.responseHeaders': 'Cabeçalhos de resposta', + 'webhooks.responseBody': 'Corpo de resposta', + 'webhooks.rawPayload': 'Carga útil bruta', + 'webhooks.empty': '[vazio]', + 'providerSetup.error.defaultDetails': 'Falha na configuração do provedor.', + 'providerSetup.error.providerFallback': 'O provedor', + 'providerSetup.error.credentialsRejected': + '{provider} rejeitou as credenciais. Verifique a chave de API e tente novamente.', + 'providerSetup.error.endpointNotRecognized': + '{provider} não reconheceu o endpoint. Verifique a URL base e tente novamente.', + 'providerSetup.error.providerUnavailable': + '{provider} está indisponível no momento. Tente novamente ou verifique o status do provedor.', + 'providerSetup.error.unreachable': + 'Não foi possível alcançar {provider}. Verifique a URL do endpoint e a conexão de rede, e tente novamente.', + 'providerSetup.error.couldNotReachWithMessage': 'Não foi possível alcançar {provider}: {message}', + 'providerSetup.error.technicalDetails': 'Detalhes técnicos', + 'notifications.routingTitle': 'Roteamento de Notificações', + 'notifications.routing.pipelineStats': 'Estatísticas de pipeline', + 'notifications.routing.total': 'Total', + 'notifications.routing.unread': 'Não lido', + 'notifications.routing.unscored': 'Sem pontuação', + 'notifications.routing.intelligenceTitle': 'Inteligência de notificação', + 'notifications.routing.intelligenceDesc': + 'Cada notificação das suas contas conectadas é avaliada por um modelo de IA local. Notificações de alta importância são roteadas automaticamente para o seu agente orquestrador para que nada crítico passe despercebido.', + 'notifications.routing.howItWorks': 'Como funciona', + 'notifications.routing.level.drop': 'Eliminar', + 'notifications.routing.level.dropDesc': 'Ruído / spam - armazenado, mas não descoberto', + 'notifications.routing.level.acknowledge': 'Reconhecer', + 'notifications.routing.level.acknowledgeDesc': + 'Baixa prioridade — exibida na central de notificações', + 'notifications.routing.level.react': 'React', + 'notifications.routing.level.reactDesc': + 'Média prioridade — aciona uma resposta focada do agente', + 'notifications.routing.level.escalate': 'Escalar', + 'notifications.routing.level.escalateDesc': + 'Alta prioridade — encaminhada ao agente orquestrador', + 'notifications.routing.perProvider': 'Roteamento por provedor', + 'notifications.routing.threshold': 'Limite', + 'notifications.routing.routeToOrchestrator': 'Rota para o orquestrador', + 'notifications.routing.loadSettingsError': + 'Falha ao carregar as configurações. Reabra este painel para tentar novamente.', + 'common.reload': 'Recarregar', + 'common.skip': 'Pular', + 'common.disable': 'Desativar', + 'common.enable': 'Ativar', + 'chat.safetyTimeout': + 'Nenhuma resposta do agente após 2 minutos. Tente novamente ou verifique sua conexão.', + 'chat.filter.all': 'Todos', + 'chat.filter.work': 'Trabalho', + 'chat.filter.briefing': 'Resumo', + 'chat.filter.notification': 'Notificação', + 'chat.filter.workers': 'Trabalhadores', + 'chat.selectThread': 'Selecione uma conversa', + 'chat.threads': 'Conversas', + 'chat.noThreads': 'Nenhuma conversa ainda', + 'chat.noLabelThreads': 'Nenhuma conversa "{label}"', + 'chat.noWorkerThreads': 'Nenhuma thread de worker ainda', + 'chat.deleteThread': 'Excluir conversa', + 'chat.deleteThreadConfirm': 'Tem certeza de que deseja excluir "{title}"?', + 'chat.untitledThread': 'Conversa sem título', + 'chat.editThreadTitle': 'Editar título da conversa', + 'chat.hideSidebar': 'Ocultar barra lateral', + 'chat.showSidebar': 'Mostrar barra lateral', + 'chat.newThreadShortcut': 'Nova conversa (/new)', + 'chat.new': 'Nova', + 'chat.failedToLoadMessages': 'Falha ao carregar mensagens', + 'chat.thinkingIteration': 'Pensando... ({n})', + 'chat.thinkingDots': 'Pensando...', + 'chat.approachingLimit': 'Aproximando-se do limite de uso', + 'chat.approachingLimitMsg': 'Você usou {pct}% da sua cota disponível.', + 'chat.upgrade': 'Fazer upgrade', + 'chat.weeklyLimitHit': 'Você atingiu seu limite semanal.', + 'chat.resets': 'Reinicia', + 'chat.topUpToContinue': 'Adicione créditos para continuar.', + 'chat.budgetComplete': + 'Seu orçamento incluído foi esgotado. Adicione créditos ou faça upgrade para continuar.', + 'chat.topUp': 'Adicionar Créditos', + 'chat.cycle': 'Ciclo', + 'chat.cycleSpent': 'Gasto neste ciclo', + 'chat.cycleRemaining': 'Restante', + 'chat.left': 'restante', + 'chat.setup': 'Configurar', + 'chat.switchToText': 'Mudar para texto', + 'chat.transcribing': 'Transcrevendo...', + 'chat.stopAndSend': 'Parar e enviar', + 'chat.startTalking': 'Comece a falar', + 'chat.playingVoiceReply': 'Reproduzindo resposta de voz', + 'chat.voiceHint': 'Use o microfone para falar', + 'chat.micUnavailable': 'Microfone indisponível', + 'chat.turn': 'turno', + 'chat.turns': 'turnos', + 'chat.openWorkerThread': 'Abrir thread de worker', + 'chat.attachment.attach': 'Anexar imagem', + 'chat.attachment.remove': 'Remover {name}', + 'chat.attachment.tooMany': 'Máximo de {max} imagens por mensagem', + 'chat.attachment.tooLarge': 'A imagem excede o limite de tamanho de {max}', + 'chat.attachment.unsupportedType': + 'Tipo de arquivo não suportado. Use PNG, JPEG, WebP, GIF ou BMP.', + 'chat.attachment.readFailed': 'Não foi possível ler o arquivo', + 'memory.searchAria': 'Pesquisar memória', + 'memory.searchPlaceholder': 'Pesquisar entradas de memória...', + 'memory.sourceFilter.all': 'Todas as fontes', + 'memory.sourceFilter.email': 'E-mail', + 'memory.sourceFilter.calendar': 'Calendário', + 'memory.sourceFilter.telegram': 'Telegram', + 'memory.sourceFilter.aiInsight': 'Insight de IA', + 'memory.sourceFilter.system': 'Sistema', + 'memory.sourceFilter.trading': 'Negociação', + 'memory.sourceFilter.security': 'Segurança', + 'memory.ingestionActivity': 'Atividade de Ingestão', + 'memory.events': 'eventos', + 'memory.event': 'evento', + 'memory.overTheLast': 'nos últimos', + 'memory.months': 'meses', + 'memory.peak': 'Pico', + 'memory.perDay': '/dia', + 'memory.less': 'Menos', + 'memory.more': 'Mais', + 'memory.on': 'em', + 'memory.loading': 'Carregando Memória', + 'memory.fetching': 'Buscando suas entradas de memória...', + 'memory.analyzing': 'Analisando Memória', + 'memory.analyzingHint': 'Processando suas memórias para extrair insights...', + 'memory.noMatches': 'Nenhum Resultado Encontrado', + 'memory.noMatchesHint': 'Tente alterar seus termos de pesquisa ou filtros.', + 'memory.allCaughtUp': 'Tudo em Dia', + 'memory.allCaughtUpHint': 'Nenhuma nova entrada de memória para processar.', + 'memory.noAnalysis': 'Nenhuma Análise Ainda', + 'memory.noAnalysisHint': 'Execute uma análise para descobrir padrões em suas memórias.', + 'memory.emptyHint': 'Comece a interagir para criar suas primeiras memórias.', + 'mic.unavailable': 'Microfone não disponível', + 'mic.permissionDenied': 'Permissão de microfone negada', + 'mic.failedToStartRecorder': 'Falha ao iniciar o gravador', + 'mic.transcribing': 'Transcrevendo...', + 'mic.tapToSend': 'Toque para enviar', + 'mic.waitingForAgent': 'Aguardando agente...', + 'mic.tapAndSpeak': 'Toque e fale', + 'mic.stopRecording': 'Parar gravação e enviar', + 'mic.startRecording': 'Iniciar gravação', + 'mic.deviceSelector': 'Dispositivo de microfone', + 'mic.tapToSendCountdown': 'Toque para enviar ({seconds}s)', + 'token.usageLimitReached': 'Limite de uso atingido', + 'token.approachingLimit': 'Aproximando-se do limite', + 'token.planClickForDetails': 'plano - clique para detalhes', + 'token.sessionTokens': 'Ent: {in} | Saí: {out} | Turnos: {turns}', + 'token.limit': 'Limite Atingido', + 'catalog.noCapabilityBinding': 'Sem vinculação de funcionalidade', + 'catalog.downloadFailed': 'Falha no download', + 'catalog.active': 'Ativo', + 'catalog.installed': 'Instalado', + 'catalog.notDownloaded': 'Não baixado', + 'catalog.inUse': 'Em Uso', + 'catalog.use': 'Usar', + 'catalog.deleteModel': 'Excluir modelo', + 'catalog.download': 'Baixar', + 'navigator.recent': 'Recente', + 'navigator.today': 'Hoje', + 'navigator.thisWeek': 'Esta Semana', + 'navigator.sources': 'Fontes', + 'navigator.email': 'E-mail', + 'navigator.slack': 'Slack', + 'navigator.chat': 'Bate-papo', + 'navigator.documents': 'Documentos', + 'navigator.people': 'Pessoas', + 'navigator.topics': 'Tópicos', + 'dreams.description': + 'Sonhos são reflexões geradas por IA que sintetizam padrões das suas memórias.', + 'dreams.comingSoon': 'Em breve', + 'assignment.memoryLlm': 'LLM de Memória', + 'assignment.memoryLlmAria': 'Seleção de LLM de memória', + 'assignment.embedder': 'Incorporador', + 'assignment.loaded': 'Carregado', + 'assignment.notDownloaded': 'Não baixado', + 'assignment.usedForExtractSummarise': 'Usado para extração e sumarização', + 'insights.knownFacts': 'Fatos Conhecidos', + 'insights.preferences': 'Preferências', + 'insights.relationships': 'Relacionamentos', + 'insights.skills': 'Habilidades', + 'insights.opinions': 'Opiniões', + 'insights.other': 'Outros', + 'insights.title': 'Insights', + 'insights.empty': 'Nenhum insight ainda. Os insights são gerados conforme sua memória cresce.', + 'insights.description': 'Baseado em {count} relações no seu grafo de memória.', + 'insights.items': 'itens', + 'insights.more': 'mais', + 'calls.joiningCall': 'Entrando na chamada', + 'calls.meetWindowOpening': 'A janela do Meet está abrindo...', + 'calls.failedToStart': 'Falha ao iniciar chamada no Meet', + 'calls.couldNotStart': 'Não foi possível iniciar a chamada', + 'calls.failedToClose': 'Falha ao encerrar a chamada', + 'calls.couldNotClose': 'Não foi possível encerrar a chamada', + 'calls.joinMeet': 'Entrar em uma chamada do Google Meet', + 'calls.joinMeetDescription': 'Insira um link do Google Meet para entrar.', + 'calls.meetLink': 'Link do Meet', + 'calls.displayName': 'Nome de Exibição', + 'calls.openingMeet': 'Abrindo Meet...', + 'calls.joinCall': 'Entrar na Chamada', + 'calls.activeCalls': 'Chamadas Ativas', + 'calls.leave': 'Sair', + 'workspace.wipeConfirm': + 'Tem certeza de que deseja apagar toda a memória? Isso não pode ser desfeito.', + 'workspace.resetTreeConfirm': 'Tem certeza de que deseja reconstruir a árvore de memória?', + 'workspace.wipeTitle': 'Apagar Memória', + 'workspace.resetting': 'Redefinindo...', + 'workspace.resetMemory': 'Redefinir Memória', + 'workspace.resetTreeTitle': 'Reconstruir Árvore de Memória', + 'workspace.rebuilding': 'Reconstruindo...', + 'workspace.resetMemoryTree': 'Redefinir Árvore de Memória', + 'workspace.building': 'Construindo...', + 'workspace.buildSummaryTrees': 'Construir Árvores de Resumo', + 'workspace.viewVault': 'Ver Cofre', + 'workspace.openingVaultTitle': 'Abrindo o cofre no Obsidian', + 'workspace.openingVaultMessage': + 'Se o Obsidian não abrir, instale-o em obsidian.md ou use Revelar Pasta. Caminho do vault:', + 'workspace.openVaultFailedTitle': 'Não foi possível abrir o vault no Obsidian', + 'workspace.openVaultFailedMessage': + 'Use Reveal Folder para abrir o diretório do vault diretamente. Caminho do cofre:', + 'workspace.revealVaultFailed': 'Não foi possível revelar a pasta do vault', + 'workspace.revealFolder': 'Revelar pasta', + 'workspace.checkingVault': 'Verificando…', + 'workspace.vaultNotRegisteredHelp': + 'O Obsidian só abre pastas adicionadas como vault. No Obsidian, escolha "Abrir pasta como vault" e selecione a pasta abaixo — você só precisa fazer isso uma vez. Depois clique em Ver Vault novamente.', + 'workspace.obsidianNotFoundHelp': + 'Não encontramos o Obsidian neste dispositivo. Instale-o, ou — se estiver instalado em um local não padrão — defina sua pasta de configuração em Avançado.', + 'workspace.openAnyway': 'Abrir no Obsidian mesmo assim', + 'workspace.installObsidian': 'Instalar Obsidian', + 'workspace.obsidianAdvanced': 'Obsidian instalado em outro local?', + 'workspace.obsidianConfigDirLabel': 'Pasta de configuração do Obsidian', + 'workspace.obsidianConfigDirHint': + 'Caminho para a pasta que contém obsidian.json (ex.: ~/.config/obsidian). Deixe em branco para detectar automaticamente.', + 'workspace.obsidianConfigDirPlaceholder': '~/.config/obsidian', + 'workspace.graphLoadFailed': 'Falha ao carregar grafo de memória', + 'workspace.loadingGraph': 'Carregando grafo de memória...', + 'workspace.graphViewMode': 'Modo de visualização do grafo de memória', + 'workspace.trees': 'Árvores', + 'workspace.contacts': 'Contatos', + 'graph.noContactMentions': 'Nenhuma menção de contato', + 'graph.noMemory': 'Sem memória', + 'graph.source': 'Fonte', + 'graph.topic': 'Tópico', + 'graph.global': 'Global', + 'graph.document': 'Documento', + 'graph.contact': 'Contato', + 'graph.nodes': 'nós', + 'graph.parentChild': 'pai-filho', + 'graph.documentContact': 'documento-contato', + 'graph.link': 'link', + 'graph.links': 'links', + 'graph.children': 'filhos', + 'graph.clickToOpenObsidian': 'Clique para abrir no Obsidian', + 'graph.person': 'Pessoa', + 'modal.dontShowAgain': 'Não mostrar sugestões semelhantes', + 'reflections.loading': 'Carregando reflexões...', + 'reflections.empty': 'Nenhuma reflexão ainda', + 'reflections.title': 'Reflexões', + 'reflections.proposedAction': 'Ação Proposta', + 'reflections.act': 'Agir', + 'reflections.dismiss': 'Dispensar', + 'whatsapp.chatsSynced': 'chats sincronizados', + 'whatsapp.chatSynced': 'chat sincronizado', + 'sync.active': 'Ativo', + 'sync.recent': 'Recente', + 'sync.idle': 'Inativo', + 'sync.memorySources': 'Fontes de Memória', + 'sync.noConnectedSources': 'Nenhuma fonte conectada', + 'sync.chunks': 'blocos', + 'sync.lastChunk': 'Último bloco:', + 'sync.pending': 'pendente', + 'sync.processed': 'processado', + 'sync.syncing': 'Sincronizando…', + 'sync.sync': 'Sincronizar', + 'sync.failedToLoad': 'Falha ao carregar status de sincronização', + 'sync.noContent': + 'Nenhum conteúdo foi sincronizado na memória ainda. Conecte uma integração para começar.', + 'memorySources.title': 'Fontes de Memória', + 'memorySources.empty': + 'Ainda não há fontes de memória. Adicione uma para começar a alimentar a memória.', + 'memorySources.customSources': 'Fontes Personalizadas', + 'memorySources.addSource': 'Adicionar Fonte', + 'memorySources.noCustomSources': + 'Ainda não há fontes personalizadas. Adicione uma pasta, repositório GitHub, feed RSS ou página da web para começar.', + 'memorySources.loadingConnections': 'Carregando conexões…', + 'memorySources.noConnections': + 'Nenhuma conexão Composio ativa encontrada. Conecte uma integração primeiro.', + 'memorySources.pickConnection': 'Escolha uma conexão', + 'memorySources.selectConnection': '— Selecionar uma conexão —', + 'memorySources.composioListFailed': 'Falha ao carregar as conexões Composio.', + 'memorySources.browse': 'Navegar…', + 'memorySources.folderPathPlaceholder': '/Users/you/notes', + 'memorySources.globPatternPlaceholder': '**/*.md', + 'memorySources.repoUrlPlaceholder': 'https://github.com/org/repo', + 'memorySources.branchPlaceholder': 'main', + 'memorySources.feedUrlPlaceholder': 'https://example.com/feed.xml', + 'memorySources.pageUrlPlaceholder': 'https://example.com/article', + 'memorySources.cssSelectorPlaceholder': 'article', + 'memorySources.searchQueryPlaceholder': 'de:usuário AI segurança', + 'memorySources.kind.composio': 'Integração', + 'memorySources.kind.folder': 'Pasta Local', + 'memorySources.kind.github_repo': 'Repositório GitHub', + 'memorySources.kind.twitter_query': 'Busca no Twitter', + 'memorySources.kind.rss_feed': 'Feed RSS', + 'memorySources.kind.web_page': 'Página da Web', + 'memorySources.sync.successTitle': 'Sincronizando', + 'memorySources.sync.successMessage': 'O progresso aparecerá em breve.', + 'memorySources.sync.failedTitle': 'Falha na sincronização:', + 'time.justNow': 'agora mesmo', + 'time.secondsAgoSuffix': 's atrás', + 'time.minutesAgoSuffix': 'min atrás', + 'time.hoursAgoSuffix': 'h atrás', + 'time.daysAgoSuffix': 'd atrás', + 'memorySources.pickKind': 'Que tipo de fonte você quer adicionar?', + 'memorySources.backToKinds': 'Voltar para os tipos de origem', + 'memorySources.label': 'Etiqueta', + 'memorySources.labelPlaceholder': 'Minhas anotações de pesquisa', + 'memorySources.add': 'Adicionar', + 'memorySources.adding': 'Adicionando…', + 'memorySources.added': 'Fonte adicionada', + 'memorySources.removed': 'Fonte removida', + 'memorySources.remove': 'Remover', + 'memorySources.enable': 'Ativar', + 'memorySources.disable': 'Desativar', + 'memorySources.toggleFailed': 'Falha na alternância', + 'memorySources.removeFailed': 'Falha ao remover', + 'memorySources.folderPath': 'Caminho da pasta', + 'memorySources.globPattern': 'Padrão glob', + 'memorySources.repoUrl': 'Repositório URL', + 'memorySources.branch': 'Ramo', + 'memorySources.feedUrl': 'Alimentar URL', + 'memorySources.pageUrl': 'Página URL', + 'memorySources.cssSelector': 'Seletor CSS (opcional)', + 'memorySources.searchQuery': 'Consulta de pesquisa', + 'backend.aiBackend': 'Backend de IA', + 'backend.cloud': 'Nuvem', + 'backend.recommended': 'Recomendado', + 'backend.cloudDescription': + 'Modelos rápidos e poderosos hospedados em nossos servidores. Pronto para usar imediatamente.', + 'backend.privacyNote': 'Nenhum dado pessoal, mensagem ou chave é enviado aos nossos servidores.', + 'backend.local': 'Local', + 'backend.advanced': 'Avançado', + 'backend.localDescription': + 'Rode modelos na sua própria máquina usando Ollama. Total privacidade, requer configuração.', + 'backend.ramRecommended': '16GB+ de RAM recomendado', + 'subconscious.tasks': 'tarefas', + 'subconscious.ticks': 'ticks', + 'subconscious.last': 'Último', + 'subconscious.failed': 'falhou', + 'subconscious.tickInterval': 'Intervalo de Tick', + 'subconscious.runNow': 'Executar Agora', + 'subconscious.providerUnavailableTitle': 'Subconsciente pausado', + 'subconscious.providerSettings': 'Configurações de IA', + 'subconscious.approvalNeeded': 'Aprovação Necessária', + 'subconscious.requiresApproval': 'Requer aprovação', + 'subconscious.fixInConnections': 'Corrigir em Conexões', + 'subconscious.goAhead': 'Prosseguir', + 'subconscious.activeTasks': 'Tarefas Ativas', + 'subconscious.noActiveTasks': 'Nenhuma tarefa ativa', + 'subconscious.default': 'Padrão', + 'subconscious.addTaskPlaceholder': 'Adicionar uma nova tarefa...', + 'subconscious.activityLog': 'Registro de Atividades', + 'subconscious.noActivity': 'Nenhuma atividade ainda', + 'subconscious.decision.nothingNew': 'Nada novo', + 'subconscious.decision.completed': 'Concluído', + 'subconscious.decision.evaluating': 'Avaliando', + 'subconscious.decision.waitingApproval': 'Aguardando aprovação', + 'subconscious.decision.failed': 'Falhou', + 'subconscious.decision.cancelled': 'Cancelado', + 'subconscious.decision.skipped': 'Pulado', + 'actionable.complete': 'Concluir', + 'actionable.dismiss': 'Dispensar', + 'actionable.snooze': 'Adiar', + 'actionable.new': 'Novo', + 'stats.storage': 'Armazenamento', + 'stats.files': 'arquivos', + 'stats.documents': 'Documentos', + 'stats.today': 'hoje', + 'stats.namespaces': 'Namespaces', + 'stats.relations': 'Relações', + 'stats.firstMemory': 'Primeira Memória', + 'stats.latest': 'Mais Recente', + 'stats.sessions': 'Sessões', + 'stats.tokens': 'tokens', + 'bootCheck.invalidUrl': 'Por favor, insira uma URL de runtime.', + 'bootCheck.urlMustStartWith': 'A URL precisa começar com http:// ou https://', + 'bootCheck.validUrlRequired': + 'Isso não parece uma URL válida (tente https://core.example.com/rpc)', + 'bootCheck.tokenRequired': 'Vamos precisar de um token de autenticação para conectar.', + 'bootCheck.chooseCoreMode': 'Selecionar um Runtime', + 'bootCheck.connectToCore': 'Conectar ao Seu Runtime', + 'bootCheck.desktopDescription': + 'O OpenHuman precisa de um runtime para pensar. Escolha onde ele deve ficar.', + 'bootCheck.webDescription': + 'Na web, o OpenHuman conecta-se a um runtime que você controla. Insira o URL e o token de autenticação abaixo, ou baixe o app desktop para rodar um na sua máquina.', + 'bootCheck.preferDesktop': 'Prefere manter tudo no seu próprio dispositivo?', + 'bootCheck.downloadDesktop': 'Baixar o App Desktop', + 'bootCheck.localRecommended': 'Rodar Localmente (Recomendado)', + 'bootCheck.localDescription': + 'Roda aqui no seu computador. Mais rápido, totalmente privado, sem nada para configurar.', + 'bootCheck.cloudMode': 'Rodar na Nuvem (Complexo)', + 'bootCheck.cloudDescription': + 'Conecte a um runtime que você hospeda em outro lugar. Fica online 24×7 para que você não precise manter este dispositivo ligado.', + 'bootCheck.coreRpcUrl': 'URL do Runtime', + 'bootCheck.rpcUrlPlaceholder': 'https://core.example.com/rpc', + 'bootCheck.authToken': 'Token de Autenticação', + 'bootCheck.bearerTokenPlaceholder': 'O token bearer do seu runtime remoto', + 'bootCheck.storedLocally': 'Mantido apenas neste dispositivo. Enviado como ', + 'bootCheck.testing': 'Testando…', + 'bootCheck.testConnection': 'Testar Conexão', + 'bootCheck.connectedOk': 'Conectado. Tudo pronto.', + 'bootCheck.authFailed': 'Esse token não funcionou. Verifique-o e tente novamente.', + 'bootCheck.unreachablePrefix': 'Não foi possível alcançar:', + 'bootCheck.checkingCore': 'Ativando seu runtime…', + 'bootCheck.cannotReach': 'Não Consigo Alcançar o Runtime', + 'bootCheck.cannotReachDesc': + 'Não foi possível conectar ao seu runtime. Deseja tentar um diferente?', + 'bootCheck.switchMode': 'Escolher um Runtime Diferente', + 'bootCheck.quit': 'Sair', + 'bootCheck.legacyDetected': 'Runtime de Segundo Plano Legado Detectado', + 'bootCheck.legacyDescription': + 'Um daemon OpenHuman instalado separadamente já está rodando neste dispositivo. Precisamos removê-lo antes que o runtime integrado possa assumir.', + 'bootCheck.removing': 'Removendo…', + 'bootCheck.removeContinue': 'Remover e Continuar', + 'bootCheck.localNeedsRestart': 'O Runtime Local Precisa de uma Reinicialização', + 'bootCheck.localNeedsRestartDesc': + 'Seu runtime local está em uma versão diferente deste app. Uma reinicialização rápida vai sincronizá-los.', + 'bootCheck.restarting': 'Reiniciando…', + 'bootCheck.restartCore': 'Reiniciar Runtime', + 'bootCheck.cloudNeedsUpdate': 'O Runtime na Nuvem Precisa de uma Atualização', + 'bootCheck.cloudNeedsUpdateDesc': + 'Seu runtime na nuvem está em uma versão diferente deste app. Execute o atualizador para sincronizá-los.', + 'bootCheck.updating': 'Atualizando…', + 'bootCheck.updateCloudCore': 'Atualizar Runtime na Nuvem', + 'bootCheck.versionCheckFailed': 'Verificação de Versão do Runtime Falhou', + 'bootCheck.versionCheckFailedDesc': + 'Seu runtime está ativo, mas não está reportando sua versão. Pode estar desatualizado. Reinicie ou atualize-o para continuar.', + 'bootCheck.working': 'Trabalhando…', + 'bootCheck.restartUpdateCore': 'Reiniciar / Atualizar Runtime', + 'bootCheck.unexpectedError': 'Erro Inesperado na Verificação de Inicialização', + 'bootCheck.actionFailed': 'Algo deu errado. Por favor, tente novamente.', + 'bootCheck.portConflictTitle': 'Não foi possível iniciar o motor do aplicativo', + 'bootCheck.portConflictBody': + 'Outro processo está usando a porta de rede que o OpenHuman precisa. Tentaremos corrigir isso automaticamente.', + 'bootCheck.portConflictFixButton': 'Corrigir automaticamente', + 'bootCheck.portConflictFixing': 'Corrigindo…', + 'bootCheck.portConflictFixFailed': + 'A correção automática não funcionou. Reinicie o computador e tente novamente.', + 'notifications.justNow': 'agora mesmo', + 'notifications.minAgo': '{n}min atrás', + 'notifications.hrAgo': '{n}h atrás', + 'notifications.dayAgo': '{n}d atrás', + 'notifications.category.messages': 'Mensagens', + 'notifications.category.agents': 'Agentes', + 'notifications.category.skills': 'Habilidades', + 'notifications.category.system': 'Sistema', + 'notifications.category.meetings': 'Reuniões', + 'notifications.category.reminders': 'Lembretes', + 'notifications.category.important': 'Importante', + 'about.update.status.checking': 'Verificando...', + 'about.update.status.available': 'v{version} disponível', + 'about.update.status.availableNoVersion': 'Atualização disponível', + 'about.update.status.downloading': 'Baixando...', + 'about.update.status.readyToInstall': 'v{version} pronta para instalar', + 'about.update.status.readyToInstallNoVersion': + 'Uma nova versão foi baixada e está pronta. Reinicie para aplicar.', + 'about.update.status.installing': 'Instalando...', + 'about.update.status.restarting': 'Reiniciando...', + 'about.update.status.upToDate': 'Você está usando a versão mais recente.', + 'about.update.status.error': 'Falha na verificação de atualização', + 'about.update.status.default': 'Verificar atualizações', + 'welcome.connectionFailed': 'Falha na conexão: {status} {statusText}', + 'welcome.connectionFailedMsg': 'Falha na conexão: {message}', + 'welcome.continueLocally': 'Continuar localmente', 'welcome.continueLocallyExperimental': 'Continuar Localmente (Experimental)', + 'welcome.localSessionStarting': 'Iniciando sessão local...', + 'welcome.localSessionDesc': 'Usa um perfil local offline e ignora TinyHumans OAuth.', + 'chat.agentChatDesc': 'Abrir uma sessão de chat direto com o agente.', + 'chat.modelPlaceholder': 'gpt-4o', + 'channels.activeRouteValue': '{channel} via {authMode}', + 'privacy.dataKind.messages': 'Mensagens', + 'privacy.dataKind.agents': 'Agentes', + 'privacy.dataKind.skills': 'Habilidades', + 'privacy.dataKind.system': 'Sistema', + 'privacy.dataKind.meetings': 'Reuniões', + 'privacy.dataKind.reminders': 'Lembretes', + 'privacy.dataKind.important': 'Importante', + 'onboarding.enableLocalAI': 'Ativar IA Local', + 'onboarding.skills.status.available': 'Disponível', + 'onboarding.skills.status.connected': 'Conectado', + 'onboarding.skills.status.connecting': 'Conectando', + 'onboarding.skills.status.error': 'Erro', + 'onboarding.skills.status.unavailable': 'Indisponível', + 'composio.statusUnavailable': 'Status indisponível', + 'composio.authExpired': 'Autenticação expirada', + 'composio.reconnect': 'Reconectar', + 'composio.expiredAuthorization': '{name} autorização expirou', + 'composio.expiredDescription': + 'Reconecte para reativar as ferramentas {name}. OpenHuman manterá esta integração indisponível até que você atualize o acesso de OAuth.', + 'composio.envVarOverrides': 'está definida, ela substitui esta configuração.', + 'composio.previewBadge': 'Visualização', + 'composio.previewTooltip': + 'Integração do agente em breve – você pode se conectar, mas o agente ainda não pode usar este kit de ferramentas.', + 'memory.day.sun': 'Dom', + 'memory.day.mon': 'Seg', + 'memory.day.tue': 'Ter', + 'memory.day.wed': 'Qua', + 'memory.day.thu': 'Qui', + 'memory.day.fri': 'Sex', + 'memory.day.sat': 'Sáb', + 'memory.ingesting': 'Ingerindo', + 'memory.ingestionQueued': 'Na fila', + 'memory.ingestingTitle': 'Ingerindo {title}', + 'mic.noAudioCaptured': 'Nenhum áudio capturado', + 'mic.noSpeechDetected': 'Nenhuma fala detectada', + 'mic.lowConfidenceResult': 'Não foi possível entender o áudio com clareza — tente novamente', + 'mic.failedToStopRecording': 'Falha ao parar a gravação: {message}', + 'mic.transcriptionFailed': 'Falha na transcrição: {message}', + 'reflections.kind.retrospective': 'Retrospectiva', + 'reflections.kind.derivedFact': 'Fato Derivado', + 'reflections.kind.moodInsight': 'Insight de Humor', + 'reflections.kind.relationshipInsight': 'Insight de Relacionamento', + 'graph.tooltip.summary': 'Resumo', + 'graph.tooltip.contact': 'Contato', + 'localModel.usage.never': 'Nunca', + 'localModel.usage.mediumLoad': 'Carga média', + 'localModel.usage.lowLoad': 'Carga baixa', + 'localModel.usage.idleMode': 'Modo inativo', + 'localModel.rebootstrapComplete': 'Re-bootstrap do modelo concluído.', + 'localModel.modelsVerified': 'Modelos locais verificados.', + 'accounts.addModal.allConnected': 'Todos conectados', + 'accounts.addModal.title': 'Adicionar conta', + 'accounts.respondQueue.empty': 'Vazio', + 'accounts.respondQueue.hide': 'Ocultar fila de respostas', + 'accounts.respondQueue.loadFailed': 'Falha ao carregar fila de respostas', + 'accounts.respondQueue.loading': 'Carregando fila…', + 'accounts.respondQueue.pending': 'Pendente', + 'accounts.respondQueue.show': 'Mostrar fila de respostas', + 'accounts.respondQueue.title': 'Fila de respostas', + 'accounts.webviewHost.almostReady': 'Quase pronto...', + 'accounts.webviewHost.loadTimeout': 'Tempo limite de carregamento do webview', + 'accounts.webviewHost.loading': 'Carregando {providerName}...', + 'accounts.webviewHost.loadingAccount': 'Carregando conta', + 'accounts.webviewHost.restoringSession': 'Restaurando sessão...', + 'accounts.webviewHost.retryLoading': 'Tentar carregar novamente', + 'accounts.webviewHost.takingLonger': '{providerName} está demorando mais do que o esperado.', + 'accounts.webviewHost.timeoutHint': 'Dica de timeout', + 'app.connectionBadge.composio': 'Composio', + 'app.connectionBadge.messaging': 'Mensagens', + 'app.connectionIndicator.connected': 'Conectado ao OpenHuman AI 🚀', + 'app.connectionIndicator.connecting': 'Conectando', + 'app.connectionIndicator.coreOffline': 'Núcleo offline', + 'app.connectionIndicator.disconnected': 'Desconectado', + 'app.connectionIndicator.offline': 'Offline', + 'app.connectionIndicator.reconnecting': 'Reconectando…', + 'app.errorFallback.componentStack': 'Pilha de componentes', + 'app.errorFallback.downloadLatest': 'Baixar mais recente', + 'app.errorFallback.heading': 'Título', + 'app.errorFallback.hint': 'Dica', + 'app.errorFallback.reloadApp': 'Recarregar app', + 'app.errorFallback.subheading': 'Subtítulo', + 'app.errorFallback.tryRecover': 'Tentar recuperar', + 'app.localAiDownload.installing': 'Instalando...', + 'app.localAiDownload.preparing': 'Preparando...', + 'app.openhumanLink.accounts.continueWith': 'Continuar com login de {label}', + 'app.openhumanLink.accounts.done': 'Concluído', + 'app.openhumanLink.accounts.intro': 'Introdução', + 'app.openhumanLink.accounts.webviewNote': 'Nota do webview', + 'app.openhumanLink.billing.openDashboard': 'Abrir painel', + 'app.openhumanLink.billing.stayOnTrial': 'Ficar no período de teste', + 'app.openhumanLink.billing.trialCredit': 'Crédito de teste', + 'app.openhumanLink.billing.trialDesc': 'Descrição do teste', + 'app.openhumanLink.defaultBody': + 'Ainda não disponível no popup. Abra a página completa de configurações quando precisar.', + 'app.openhumanLink.discord.intro': 'Introdução', + 'app.openhumanLink.discord.openInvite': 'Abrir convite', + 'app.openhumanLink.discord.perk1': 'Benefício 1', + 'app.openhumanLink.discord.perk2': 'Benefício 2', + 'app.openhumanLink.discord.perk3': 'Benefício 3', + 'app.openhumanLink.discord.perk4': 'Benefício 4', + 'app.openhumanLink.done': 'Concluído', + 'app.openhumanLink.loadingChannelSetup': 'Carregando configuração do canal', + 'app.openhumanLink.maybeLater': 'Talvez depois', + 'app.openhumanLink.notifications.asking': 'Solicitando ao SO…', + 'app.openhumanLink.notifications.blocked': 'Bloqueado', + 'app.openhumanLink.notifications.blockedStep1': 'Passo 1 bloqueado', + 'app.openhumanLink.notifications.blockedStep2': 'Passo 2 bloqueado', + 'app.openhumanLink.notifications.blockedStep3': 'Passo 3 bloqueado', + 'app.openhumanLink.notifications.intro': 'Introdução', + 'app.openhumanLink.notifications.promptHint': 'Dica de solicitação', + 'app.openhumanLink.notifications.retry': 'Tentar notificação de teste novamente', + 'app.openhumanLink.notifications.send': 'Enviar notificação de teste', + 'app.openhumanLink.notifications.sendFailed': 'Não foi possível enviar: {error}', + 'app.openhumanLink.notifications.sent': + 'Notificação de teste enviada. Se você não a recebeu, vá em Configurações do Sistema → Notificações → OpenHuman, ative Permitir Notificações e defina o Estilo de Banner como Persistente.', + 'app.openhumanLink.skipForNow': 'Pular por enquanto', + 'app.openhumanLink.telegramUnavailable': 'Telegram indisponível', + 'app.openhumanLink.title.accounts': 'Conecte seus apps', + 'app.openhumanLink.title.billing': 'Cobrança e créditos', + 'app.openhumanLink.title.discord': 'Entrar na comunidade', + 'app.openhumanLink.title.messaging': 'Conectar um canal de chat', + 'app.openhumanLink.title.notifications': 'Permitir notificações', + 'app.persistRehydration.body': 'Corpo', + 'app.persistRehydration.heading': 'Título', + 'app.persistRehydration.resetCta': 'Redefinindo…', + 'app.persistRehydration.resetting': 'Redefinindo…', + 'app.routeLoading.initializing': 'Inicializando OpenHuman...', + 'app.update.currentlyOn': '{version}', + 'app.update.errorFallback': 'Algo deu errado durante a atualização.', + 'app.update.header.default': 'Atualizar', + 'app.update.header.error': 'Falha na atualização', + 'app.update.header.installing': 'Instalando atualização', + 'app.update.header.readyToInstall': 'Atualização pronta para instalar', + 'app.update.header.restarting': 'Reiniciando…', + 'app.update.later': 'Depois', + 'app.update.newVersionReady': 'Uma nova versão está pronta para instalar.', + 'app.update.progress.downloaded': '{amount} baixados', + 'app.update.progress.installing': 'Instalando a nova versão…', + 'app.update.progress.restarting': 'Relançando o app…', + 'app.update.progress.working': '{percent}%', + 'app.update.restartNote': 'Nota de reinicialização', + 'app.update.restartNow': 'Reiniciar agora', + 'app.update.versionReady': 'Versão {newVersion} está pronta para instalar.', + 'channels.discord.accountLinked': 'Conta vinculada', + 'channels.discord.connect': 'Conectar', + 'channels.discord.linkTokenExpired': 'Token de vinculação expirado. Por favor, tente novamente.', + 'channels.discord.linkTokenInstruction': '{token}', + 'channels.discord.linkTokenLabel': 'Rótulo do token de vinculação', + 'channels.discord.linkTokenOnce': 'Token de vinculação único', + 'channels.discord.picker.allPermissionsOk': + 'O bot tem todas as permissões necessárias neste canal.', + 'channels.discord.picker.botNotInServers': 'Bot não está nos servidores', + 'channels.discord.picker.category': 'Categoria', + 'channels.discord.picker.channel': 'Canal', + 'channels.discord.picker.checkingPermissions': 'Verificando permissões', + 'channels.discord.picker.loadingChannels': 'Carregando canais...', + 'channels.discord.picker.loadingServers': 'Carregando servidores...', + 'channels.discord.picker.missingPermissions': 'Permissões faltando', + 'channels.discord.picker.noChannels': 'Nenhum canal de texto encontrado', + 'channels.discord.picker.noServers': 'Nenhum servidor encontrado', + 'channels.discord.picker.selectChannel': 'Selecione um canal', + 'channels.discord.picker.selectServer': 'Selecione um servidor', + 'channels.discord.picker.server': 'Servidor', + 'channels.discord.picker.serverChannelSelection': 'Seleção de Servidor e Canal', + 'channels.discord.savedRestartRequired': 'Canal salvo. Reinicie o app para ativá-lo.', + 'channels.telegram.connect': 'Conectar', + 'channels.telegram.managedDmConnecting': 'DM gerenciado conectando', + 'channels.telegram.managedDmTimeout': 'Timeout de DM gerenciado', + 'channels.telegram.reconnect': 'Reconectar', + 'channels.telegram.savedRestartRequired': 'Canal salvo. Reinicie o app para ativá-lo.', + 'channels.web.alwaysAvailable': 'Sempre disponível', + 'chat.approval.approve': 'Aprovar', + 'chat.approval.alwaysAllow': 'Sempre permitir', + 'chat.approval.alwaysAllowHint': + 'Pare de pedir por esta ferramenta — adicione-a à sua lista de Sempre permitir', + 'chat.approval.deciding': 'Trabalhando…', + 'chat.approval.deny': 'Negar', + 'chat.approval.error': 'Não foi possível registrar sua decisão — tente novamente.', + 'chat.approval.fallback': 'O agente quer executar uma ação que precisa da sua aprovação.', + 'chat.approval.title': 'Aprovação necessária', + 'chat.approval.tool': 'Ferramenta:', + 'channels.authMode.managed_dm': 'Faça login com OpenHuman', + 'channels.authMode.oauth': 'OAuth Faça login', + 'channels.authMode.bot_token': 'Use seu próprio token de bot', + 'channels.authMode.api_key': 'Use o seu próprio Chave API', + 'channels.fieldRequired': '{field} é necessária', + 'channels.mcp.title': 'MCP Servidores', + 'channels.mcp.description': + 'Navegue e gerencie servidores do Model Context Protocol que ampliam a IA com novas ferramentas.', + 'channels.discord.displayName': 'Discord', + 'channels.discord.description': 'Envie e receba mensagens via Discord.', + 'channels.discord.authMode.bot_token.description': 'Forneça seu próprio token de bot Discord.', + 'channels.discord.authMode.oauth.description': + 'Instale o bot OpenHuman em seu servidor Discord via OAuth.', + 'channels.discord.authMode.managed_dm.description': + 'Vincule sua conta pessoal Discord ao bot OpenHuman.', + 'channels.discord.fields.bot_token.label': 'Token de bot', + 'channels.discord.fields.bot_token.placeholder': 'Seu token de bot Discord', + 'channels.discord.fields.guild_id.label': 'ID do servidor (guilda)', + 'channels.discord.fields.guild_id.placeholder': 'Opcional: restringir a um servidor específico', + 'channels.telegram.displayName': 'Telegram', + 'channels.telegram.description': 'Enviar e receber mensagens via Telegram.', + 'channels.telegram.authMode.managed_dm.description': + 'Envie uma mensagem diretamente para o bot OpenHuman Telegram.', + 'channels.telegram.authMode.bot_token.description': + 'Forneça seu próprio token de bot Telegram de @BotFather.', + 'channels.telegram.fields.bot_token.label': 'Token de bot', + 'channels.telegram.fields.bot_token.placeholder': '123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11', + 'channels.telegram.fields.allowed_users.label': 'Usuários permitidos', + 'channels.telegram.fields.allowed_users.placeholder': + 'Separados por vírgula Telegram nomes de usuário', + 'channels.telegram.remoteControlTitle': 'Controle remoto (Telegram)', + 'channels.telegram.remoteControlBody': + 'Em um bate-papo Telegram permitido, envie /status, /sessions, /new ou /help. O roteamento de modelo ainda usa /model e /models.', + 'channels.web.displayName': 'Web', + 'channels.web.description': 'Bate-papo por meio da interface da web integrada.', + 'channels.web.authMode.managed_dm.description': + 'Use o chat da web incorporado – não é necessária nenhuma configuração.', + 'channels.yuanbao.connect': 'Connect', + 'channels.yuanbao.connecting': 'Conectando…', + 'channels.yuanbao.fieldRequired': '{field} é obrigatório', + 'channels.yuanbao.reconnect': 'Reconnect', + 'channels.yuanbao.savedRestartRequired': 'Canal salvo. Reinicie o app para ativá-lo.', + 'channels.yuanbao.unexpectedStatus': 'Status de conexão inesperado: {status}', + 'chat.unsubscribeApproval.approve': 'Aprovar e Cancelar Inscrição', + 'chat.unsubscribeApproval.approved': '✓ Inscrição cancelada com sucesso.', + 'chat.unsubscribeApproval.denied': '✕ Solicitação negada.', + 'chat.unsubscribeApproval.deny': 'Negar', + 'chat.unsubscribeApproval.processing': 'Processando...', + 'chat.unsubscribeApproval.title': 'Solicitação de Cancelamento', + 'commandPalette.ariaLabel': 'Paleta de comandos', + 'commandPalette.description': 'Descrição', + 'commandPalette.label': 'Comandos', + 'commandPalette.noResults': 'Sem resultados', + 'commandPalette.placeholder': 'Digite um comando ou pesquise…', + 'commandPalette.searchAria': 'Pesquisar comandos', + 'commandPalette.shortcutHint': 'Pressione ? para ver todos os atalhos', + 'commandPalette.title': 'Paleta de comandos', + 'kbd.ariaLabel': 'Atalho de teclado: {shortcut}', + 'iosMascot.connectedTo': 'Conectado a', + 'iosMascot.defaultPairedLabel': 'Desktop', + 'iosMascot.disconnect': 'Desconectar', + 'iosMascot.error.generic': 'Algo deu errado. Por favor, tente novamente.', + 'iosMascot.error.sendFailed': 'Falha ao enviar. Verifique sua conexão.', + 'iosMascot.pushToTalk': 'Pressione para falar', + 'iosMascot.sendMessage': 'Enviar mensagem', + 'iosMascot.thinking': 'Pensando...', + 'iosMascot.typeMessage': 'Digite um mensagem...', + 'iosPair.connectedLoading': 'Conectado! Carregando...', + 'iosPair.connecting': 'Conectando à área de trabalho...', + 'iosPair.desktopLabel': 'Desktop', + 'iosPair.error.camera': + 'Falha na leitura pela câmera. Verifique as permissões de câmera e tente novamente.', + 'iosPair.error.connectionFailed': + 'Falha na conexão. Verifique se o app desktop está em execução e tente novamente.', + 'iosPair.error.invalidQr': + 'QR code inválido. Certifique-se de estar escaneando um código de pareamento do OpenHuman.', + 'iosPair.error.unreachableDesktop': + 'Não foi possível alcançar o desktop. Certifique-se de que ambos os dispositivos estão online e tente novamente.', + 'iosPair.expired': 'QR code expirou. Peça à área de trabalho para regenerar o código.', + 'iosPair.instructions': + 'Abra o OpenHuman no seu desktop, vá em Configurações > Dispositivos e toque em "Parear telefone" para exibir o QR code.', + 'iosPair.retryScan': 'Repetir verificação', + 'iosPair.scanQrCode': 'Digitalizar QR code', + 'iosPair.scannerOpening': 'Scanner abrindo...', + 'iosPair.step.openDesktop': 'Abra OpenHuman na área de trabalho', + 'iosPair.step.openSettings': 'Vá para Configurações > Dispositivos', + 'iosPair.step.showQr': 'Toque em "Parear telefone" para mostrar QR', + 'iosPair.title': 'Emparelhe com seu desktop', + 'composio.connect.additionalConfigRequired': 'Configuração adicional necessária', + 'composio.connect.atlassianSubdomainHint': 'acme', + 'composio.connect.atlassianSubdomainLabel': 'Rótulo de subdomínio Atlassian', + 'composio.connect.connect': 'Conectar', + 'composio.connect.dynamicsOrgNameHint': + 'Por exemplo, "myorg" para myorg.crm.dynamics.com. Insira apenas o nome curto da organização, não a URL completa.', + 'composio.connect.dynamicsOrgNameLabel': 'Nome da organização do Dynamics 365', + 'composio.connect.connectionFailed': 'Falha na conexão (status: {status}).', + 'composio.connect.disconnectFailed': 'Falha ao desconectar: {msg}', + 'composio.connect.disconnecting': 'Desconectando…', + 'composio.connect.idleDescription': 'Conecte sua', + 'composio.connect.idleDescriptionSuffix': + 'conta. Abriremos uma janela do navegador, você aprova o acesso lá, e este app detectará a conexão automaticamente.', + 'composio.connect.isConnected': 'está conectado.', + 'composio.connect.manage': 'Gerenciar', + 'composio.connect.needsFieldsPrefix': 'Para conectar', + 'composio.connect.needsFieldsSuffix': + 'precisamos de mais algumas informações. Preencha os campos faltantes abaixo e tente novamente.', + 'composio.connect.needsSubdomain': 'Para conectar', + 'composio.connect.needsSubdomainSuffix': + 'informe seu subdomínio Atlassian (ex.: acme para acme.atlassian.net) e tente novamente.', + 'composio.connect.oauthComplete': 'OAuth a concluir…', + 'composio.connect.oauthTimeout': 'Timeout de OAuth', + 'composio.connect.permissions': 'Permissões', + 'composio.connect.permissionsDefault': 'Leitura + Escrita ativadas por padrão', + 'composio.connect.permissionsNote': 'pode expor', + 'composio.connect.permissionsNoteSuffix': + 'As permissões do agente do OpenHuman são controladas abaixo como botões de leitura, escrita e admin.', + 'composio.connect.reopenBrowser': 'Reabrir navegador', + 'composio.connect.requestingUrl': 'Solicitando URL de conexão…', + 'composio.connect.requiredFieldEmpty': 'Este campo é obrigatório.', + 'composio.connect.retryConnection': 'Tentar conexão novamente', + 'composio.connect.scopeLoadError': 'Não foi possível carregar preferências de escopo: {msg}', + 'composio.connect.scopeSaveError': 'Não foi possível salvar escopo {key}: {msg}', + 'composio.connect.scope.read': 'Leitura', + 'composio.connect.scope.readHint': 'Permitir que o agente leia dados desta conexão.', + 'composio.connect.scope.write': 'Gravar', + 'composio.connect.scope.writeHint': + 'Permitir que o agente crie ou modifique dados por meio desta conexão.', + 'composio.connect.scope.admin': 'Administrador', + 'composio.connect.scope.adminHint': + 'Permitir que o agente gerencie configurações, permissões ou ações destrutivas.', + 'composio.connect.subdomainInvalid': + 'Informe apenas o subdomínio curto (ex.: "acme"), não a URL completa. Deve conter apenas letras, números e hífens.', + 'composio.connect.subdomainRequired': + 'Por favor, insira seu subdomínio Atlassian para continuar.', + 'composio.connect.wabaIdHint': + 'Encontre-o via GET /me/businesses depois GET /{business_id}/owned_whatsapp_business_accounts usando seu token de acesso do Meta.', + 'composio.connect.wabaIdLabel': 'Rótulo de ID WABA', + 'composio.connect.wabaIdRequired': + 'Por favor, insira seu ID de Conta Empresarial do WhatsApp (WABA ID) para continuar.', + 'composio.connect.waitingFor': 'Aguardando', + 'composio.connect.waitingHint': 'Dica de espera', + 'composio.triggers.heading': 'Gatilhos', + 'composio.triggers.listenFrom': 'Ouvir eventos de', + 'composio.triggers.loadError': 'Não foi possível carregar os gatilhos', + 'composio.triggers.needsConfiguration': 'Precisa de configuração', + 'composio.triggers.noneAvailable': 'Nenhum gatilho disponível no momento para', + 'conversations.taskKanban.moveLeft': 'Mover para esquerda', + 'conversations.taskKanban.moveRight': 'Mover para direita', + 'conversations.taskKanban.title': 'Tarefas', + 'conversations.taskKanban.approval.default': 'Padrão', + 'conversations.taskKanban.approval.notRequired': 'Não obrigatório', + 'conversations.taskKanban.approval.notRequiredBadge': 'sem aprovação', + 'conversations.taskKanban.approval.required': 'Obrigatório', + 'conversations.taskKanban.approval.requiredBadge': 'aprovação', + 'conversations.taskKanban.approval.requiredBeforeExecution': 'Necessário antes da execução', + 'conversations.taskKanban.briefButton': 'Resumo da tarefa', + 'conversations.taskKanban.briefTitle': 'Resumo da tarefa', + 'conversations.taskKanban.closeBrief': 'Fechar resumo da tarefa', + 'conversations.taskKanban.field.acceptanceCriteria': 'Critérios de aceitação', + 'conversations.taskKanban.field.allowedTools': 'Ferramentas permitidas', + 'conversations.taskKanban.field.approval': 'Aprovação', + 'conversations.taskKanban.field.assignedAgent': 'Agente designado', + 'conversations.taskKanban.field.blocker': 'Bloqueador', + 'conversations.taskKanban.field.evidence': 'Evidência', + 'conversations.taskKanban.field.notes': 'Notas', + 'conversations.taskKanban.field.objective': 'Objetivo', + 'conversations.taskKanban.field.plan': 'Plano', + 'conversations.taskKanban.field.status': 'Status', + 'conversations.taskKanban.field.title': 'Título', + 'conversations.taskKanban.saveChanges': 'Salvar alterações', + 'conversations.taskKanban.deleteCard': 'Excluir', + 'conversations.taskKanban.updateFailed': + 'Não foi possível atualizar a tarefa; as alterações não foram salvas.', + 'conversations.toolTimeline.turn': 'turno', + 'conversations.toolTimeline.workerThread': 'thread de worker', + 'daemon.serviceBlockingGate.body': 'Corpo', + 'daemon.serviceBlockingGate.downloadHint': 'Dica de download', + 'daemon.serviceBlockingGate.downloadLatest': 'Baixar Versão Mais Recente', + 'daemon.serviceBlockingGate.retryCore': 'Tentar Core Novamente', + 'daemon.serviceBlockingGate.retryFailed': + 'Nova tentativa falhou. Baixe a versão mais recente do app e tente novamente.', + 'daemon.serviceBlockingGate.retrying': 'Tentando novamente...', + 'daemon.serviceBlockingGate.title': 'O core do OpenHuman está indisponível', + 'home.banners.discordSubtitle': 'Subtítulo do Discord', + 'home.banners.discordTitle': 'Entre no Nosso Discord', + 'home.banners.earlyBirdDismiss': 'Dispensar banner de early bird', + 'home.banners.earlyBirdFirstSub': 'primeira assinatura.', + 'home.banners.earlyBirdOn': 'Early bird ativo', + 'home.banners.earlyBirdTitle': 'Os primeiros 1.000 usuários ganham 60% de desconto.', + 'home.banners.earlyBirdUseCode': 'Usar código early bird', + 'home.banners.getSubscription': 'fazer uma assinatura', + 'home.banners.promoCreditsBody': 'Corpo dos créditos promocionais', + 'home.banners.promoCreditsTitle': '{amount}', + 'home.banners.promoCreditsUsage': 'Uso dos créditos promocionais', + 'intelligence.memoryChunk.detail.chunk': 'Bloco', + 'intelligence.memoryChunk.detail.copyChunkId': 'Copiar ID do bloco', + 'intelligence.memoryChunk.detail.embeddingInfo': 'bge-m3 1024dim', + 'intelligence.memoryChunk.detail.noEmbedding': 'Sem embedding', + 'intelligence.memoryChunk.letterhead.from': 'de', + 'intelligence.memoryChunk.letterhead.to': 'para', + 'intelligence.memoryChunk.mentioned.chunkOne': '1 pedaço', + 'intelligence.memoryChunk.mentioned.chunkOther': '{count} pedaços', + 'intelligence.memoryChunk.mentioned.heading': 'm e n c i o n a d o', + 'intelligence.memoryChunk.scoreBars.ariaScore': '{name} pontuação {pct} por cento', + 'intelligence.memoryChunk.scoreBars.atThreshold': 'em {threshold}', + 'intelligence.memoryChunk.scoreBars.dropped': 'descartado', + 'intelligence.memoryChunk.scoreBars.heading': 'p o r q u ê m a n t i d o', + 'intelligence.memoryChunk.scoreBars.kept': 'mantido', + 'intelligence.diagram.title': 'Diagrama de Arquitetura', + 'intelligence.diagram.description': + 'Última saída de arquitetura local do endpoint de diagrama configurado.', + 'intelligence.diagram.refresh': 'Refresh', + 'intelligence.diagram.refreshAria': 'Atualizar diagrama', + 'intelligence.diagram.emptyTitle': 'Nenhum diagrama disponível ainda', + 'intelligence.diagram.emptyDescription': + 'Gere um diagrama de arquitetura pelo orquestrador e este painel será atualizado a partir do endpoint local configurado.', + 'intelligence.diagram.skillInstallCommand': 'npx skills add yizhiyanhua-ai/fireworks-tech-graph', + 'intelligence.diagram.promptExample': + 'Gere um diagrama de arquitetura do swarm atual no estilo de terminal escuro', + 'intelligence.diagram.imageAlt': 'Último diagrama de arquitetura OpenHuman gerado', + 'intelligence.diagram.refreshesEvery': 'Atualiza a cada {seconds}s', + 'intelligence.memoryText.entityTypePrefix': 'Tipo de entidade', + 'intelligence.screenDebug.active': 'Ativo', + 'intelligence.screenDebug.app': 'Aplicativo', + 'intelligence.screenDebug.bounds': 'Limites', + 'intelligence.screenDebug.captureAlt': 'Resultado do teste de captura', + 'intelligence.screenDebug.captureFailed': 'Falhou', + 'intelligence.screenDebug.captureSuccess': 'Sucesso', + 'intelligence.screenDebug.captureTest': 'Teste de captura', + 'intelligence.screenDebug.capturing': 'Capturando', + 'intelligence.screenDebug.frames': 'Quadros', + 'intelligence.screenDebug.idle': 'Inativo', + 'intelligence.screenDebug.lastApp': 'Último App', + 'intelligence.screenDebug.mode': 'Modo', + 'intelligence.screenDebug.permAccessibility': 'Permissão de acessibilidade', + 'intelligence.screenDebug.permInput': 'Permissão de entrada', + 'intelligence.screenDebug.permScreen': 'Acessibilidade', + 'intelligence.screenDebug.permissions': 'Permissões', + 'intelligence.screenDebug.platformNotSupported': 'Plataforma não suportada', + 'intelligence.screenDebug.recentVisionSummaries': 'Resumos de visão recentes', + 'intelligence.screenDebug.session': 'Sessão', + 'intelligence.screenDebug.size': 'Tamanho', + 'intelligence.screenDebug.status': 'Status', + 'intelligence.screenDebug.testCapture': 'Testar captura', + 'intelligence.screenDebug.time': 'Tempo', + 'intelligence.screenDebug.title': 'Título', + 'intelligence.screenDebug.unknown': 'Desconhecido', + 'intelligence.screenDebug.visionQueue': 'Fila de Visão', + 'intelligence.screenDebug.visionState': 'Estado de Visão', + 'intelligence.tasks.activeBoardOne': '1 quadro ativo entre conversas', + 'intelligence.tasks.activeBoardOther': '{count} quadros ativos entre conversas', + 'intelligence.tasks.empty': 'Nenhum quadro de tarefas de agente ainda', + 'intelligence.tasks.emptyHint': 'Dica de vazio', + 'intelligence.tasks.failedToLoad': 'Falha ao carregar', + 'intelligence.tasks.live': 'ao vivo', + 'intelligence.tasks.loadingBoards': 'Carregando quadros de tarefas…', + 'intelligence.tasks.threadPrefix': 'Tópico {thread}', + 'intelligence.tasks.subtitle': + 'Suas tarefas e quadros de tarefas de agentes em todo o espaço de trabalho.', + 'intelligence.tasks.newTask': 'Nova tarefa', + 'intelligence.tasks.personalBoardTitle': 'Tarefas do Agente', + 'intelligence.tasks.personalEmpty': 'Nenhuma tarefa pessoal ainda', + 'intelligence.tasks.composer.title': 'Nova tarefa', + 'intelligence.tasks.composer.titleLabel': 'Título', + 'intelligence.tasks.composer.titlePlaceholder': 'O que precisa ser feito?', + 'intelligence.tasks.composer.statusLabel': 'Status', + 'intelligence.tasks.composer.attachLabel': 'Anexar à conversa', + 'intelligence.tasks.composer.attachNone': 'Pessoal (sem conversa)', + 'intelligence.tasks.composer.objectiveLabel': 'Objetivo', + 'intelligence.tasks.composer.objectivePlaceholder': 'Opcional — o resultado desejado', + 'intelligence.tasks.composer.notesLabel': 'Notas', + 'intelligence.tasks.composer.notesPlaceholder': 'Notas opcionais', + 'intelligence.tasks.composer.create': 'Criar tarefa', + 'intelligence.tasks.composer.creating': 'Criando…', + 'intelligence.tasks.composer.createFailed': 'Não foi possível criar a tarefa', + 'notifications.card.dismiss': 'Dispensar notificação', + 'notifications.card.importanceTitle': 'Importância: {pct}%', + 'notifications.center.empty': 'Nenhuma notificação ainda', + 'notifications.center.emptyHint': 'Dica de vazio', + 'notifications.center.filterAll': 'Filtrar todos', + 'notifications.center.markAllRead': 'Marcar todos como lidos', + 'notifications.center.title': 'Notificações', + 'oauth.button.connecting': 'Conectando...', + 'oauth.button.loopbackTimeout': + 'Login expirou — o navegador não concluiu o redirecionamento OAuth. Por favor, tente novamente.', + 'oauth.login.continueWith': 'Continuar com', + 'onboarding.contextGathering.buildingDesc': 'Descrição de construção', + 'onboarding.contextGathering.buildingProfile': 'Construindo seu perfil...', + 'onboarding.contextGathering.continueToChat': 'Continuar para o chat', + 'onboarding.contextGathering.coreAlive': + 'Núcleo acessível — a primeira inicialização pode demorar um minuto.', + 'onboarding.contextGathering.coreAliveProbing': 'Verificando a conexão com o núcleo…', + 'onboarding.contextGathering.coreUnreachable': + 'O núcleo não está respondendo. Você pode continuar e tentar novamente mais tarde.', + 'onboarding.contextGathering.errorDesc': + 'Não conseguimos montar seu perfil completo agora, mas tudo bem — você pode continuar e seu perfil será construído ao longo do tempo.', + 'onboarding.contextGathering.stillWorkingDesc': + 'A primeira inicialização pode levar 30–60 segundos enquanto preparamos seu modelo local e ferramentas. Você pode continuar para o chat a qualquer momento — a construção do perfil continua em segundo plano.', + 'onboarding.contextGathering.stillWorkingTitle': 'Ainda construindo seu perfil…', + 'onboarding.contextGathering.title': 'Coleta de Contexto', + 'openhuman.team_list_teams': 'Listar equipes', + 'overlay.ariaAttention': 'Mensagem de atenção', + 'overlay.ariaCompanion': 'Companion ativo', + 'overlay.ariaOrb': 'Orb do OpenHuman', + 'overlay.ariaVoiceActive': 'Entrada de voz ativa', + 'overlay.companion.error': 'Erro', + 'overlay.companion.listening': 'Ouvindo…', + 'overlay.companion.pointing': 'Apontando…', + 'overlay.companion.speaking': 'Falando…', + 'overlay.companion.thinking': 'Pensando…', + 'overlay.orbTitle': 'Arraste para mover · Clique duplo para redefinir posição', + 'pages.settings.account.connections': 'Conexões', + 'pages.settings.account.connectionsDesc': 'Descrição de conexões', + 'pages.settings.account.migration': 'Importar de outro assistente', + 'pages.settings.account.migrationDesc': + 'Migre memória e anotações do OpenClaw (e, em breve, do Hermes) para este espaço de trabalho.', + 'pages.settings.account.privacy': 'Privacidade', + 'pages.settings.account.privacyDesc': 'Descrição de privacidade', + 'pages.settings.account.recoveryPhrase': 'Frase de recuperação', + 'pages.settings.account.recoveryPhraseDesc': 'Descrição da frase de recuperação', + 'pages.settings.account.team': 'Equipe', + 'pages.settings.account.teamDesc': 'Descrição de equipe', + 'pages.settings.accountSection.description': + 'Frase de recuperação, equipe, conexões e configurações de privacidade.', + 'pages.settings.accountSection.title': 'Conta', + 'pages.settings.ai.llm': 'LLM', + 'pages.settings.ai.llmDesc': 'Descrição do LLM', + 'pages.settings.ai.voice': 'Voz', + 'pages.settings.ai.voiceDesc': 'Descrição de voz', + 'pages.settings.aiSection.description': + 'Provedores de modelos de linguagem, Ollama local e voz (STT / TTS).', + 'pages.settings.aiSection.title': 'IA', + 'pages.settings.composioSection.title': 'Composio', + 'pages.settings.composioSection.description': + 'Roteamento, gatilhos e histórico para integrações desenvolvidas por Composio.', + 'settings.developerMenu.composio.title': 'Composio', + 'settings.developerMenu.composio.desc': + 'Modo de roteamento, gatilhos de integração e arquivo de histórico de gatilhos.', + 'pages.settings.features.desktopCompanion': 'Companion Desktop', + 'pages.settings.features.desktopCompanionDesc': + 'Assistente de voz com consciência da tela — escuta, vê, fala, aponta', + 'pages.settings.features.messagingChannels': 'Canais de mensagens', + 'pages.settings.features.messagingChannelsDesc': 'Descrição dos canais de mensagens', + 'pages.settings.features.notifications': 'Notificações', + 'pages.settings.features.notificationsDesc': 'Descrição de notificações', + 'pages.settings.features.screenAwareness': 'Reconhecimento de tela', + 'pages.settings.features.screenAwarenessDesc': 'Descrição do reconhecimento de tela', + 'pages.settings.features.tools': 'Ferramentas', + 'pages.settings.features.toolsDesc': 'Descrição de ferramentas', + 'pages.settings.featuresSection.description': 'Reconhecimento de tela, mensagens e ferramentas.', + 'pages.settings.featuresSection.title': 'Recursos', + 'privacy.dataKind.credentials': 'Credenciais', + 'privacy.dataKind.derived': 'Derivado', + 'privacy.dataKind.diagnostics': 'Diagnósticos', + 'privacy.dataKind.metadata': 'Metadados', + 'privacy.dataKind.raw': 'Bruto', + 'privacy.whatLeaves.link.label': 'O que sai do meu computador?', + 'rewards.community.achievementsUnlocked': '{unlocked} de {total} conquistas desbloqueadas', + 'rewards.community.connectDiscord': 'Conectar Discord', + 'rewards.community.cumulativeTokens': 'Tokens acumulados', + 'rewards.community.currentStreak': 'Sequência atual', + 'rewards.community.discordLinkedNotInGuild': 'Discord vinculado mas não no servidor', + 'rewards.community.discordMember': 'Entrou no servidor', + 'rewards.community.discordNotLinked': 'Discord não vinculado', + 'rewards.community.discordServer': 'Servidor do Discord', + 'rewards.community.discordStatusUnavailable': 'Status do Discord indisponível', + 'rewards.community.discordWaiting': 'Aguardando Discord', + 'rewards.community.heroSubtitle': 'Subtítulo do herói', + 'rewards.community.heroTitle': 'Título do herói', + 'rewards.community.joinDiscord': 'Entrar no Discord', + 'rewards.community.loadingRewards': 'Carregando recompensas…', + 'rewards.community.locked': 'Desbloqueado', + 'rewards.community.retrying': 'Tentando novamente…', + 'rewards.community.rolesAndRewards': 'Funções e Recompensas', + 'rewards.community.streakDays': '{n}', + 'rewards.community.syncPending': 'Sincronização de recompensas pendente', + 'rewards.community.syncPendingDesc': 'Descrição de sincronização pendente', + 'rewards.community.syncUnavailable': 'Sincronização indisponível', + 'rewards.community.tryAgain': 'Tentando novamente…', + 'rewards.community.unknown': 'Desconhecido', + 'rewards.community.unlocked': 'Desbloqueado', + 'rewards.community.yourProgress': 'Seu Progresso', + 'rewards.coupon.colCode': 'Código', + 'rewards.coupon.colRedeemed': 'Resgatado', + 'rewards.coupon.colReward': 'Recompensa', + 'rewards.coupon.colStatus': 'Status', + 'rewards.coupon.loadingHistory': 'Carregando histórico de recompensas…', + 'rewards.coupon.noCodes': 'Nenhum código de recompensa resgatado ainda.', + 'rewards.coupon.pending': 'Pendente', + 'rewards.coupon.placeholder': 'Código de cupom', + 'rewards.coupon.promoCredits': 'Créditos promocionais', + 'rewards.coupon.recentRedemptions': 'Resgates recentes', + 'rewards.coupon.redeemAccepted': + '{code} aceito. {amount} será desbloqueado após a ação necessária ser concluída.', + 'rewards.coupon.redeemButton': 'Resgatar Código', + 'rewards.coupon.redeemSuccess': '{code} resgatado. {amount} foi adicionado aos seus créditos.', + 'rewards.coupon.redeemedCodes': 'Códigos resgatados', + 'rewards.coupon.redeeming': 'Resgatando...', + 'rewards.coupon.statusApplied': 'Aplicado', + 'rewards.coupon.statusPendingAction': 'Ação pendente', + 'rewards.coupon.statusRedeemed': 'Resgatado', + 'rewards.coupon.subtitle': 'Subtítulo', + 'rewards.coupon.title': 'Resgatar um código de cupom', + 'rewards.referralSection.activity': 'Atividade de indicações', + 'rewards.referralSection.apply': 'Aplicando…', + 'rewards.referralSection.applying': 'Aplicando…', + 'rewards.referralSection.colReferredUser': 'Usuário indicado', + 'rewards.referralSection.colReward': 'Recompensa', + 'rewards.referralSection.colStatus': 'Status', + 'rewards.referralSection.colUpdated': 'Atualizado', + 'rewards.referralSection.completed': 'Concluído', + 'rewards.referralSection.copyCode': 'Copiar código', + 'rewards.referralSection.copyFailed': 'Falha ao copiar', + 'rewards.referralSection.haveCode': 'Tem um código de indicação?', + 'rewards.referralSection.haveCodeDesc': 'Descrição do código', + 'rewards.referralSection.linked': 'Vinculado', + 'rewards.referralSection.linkedCode': '(código {code})', + 'rewards.referralSection.loading': 'Carregando programa de indicações…', + 'rewards.referralSection.retry': 'Tentar novamente', + 'rewards.referralSection.noReferrals': 'Sem indicações', + 'rewards.referralSection.pendingReferrals': 'Indicações pendentes', + 'rewards.referralSection.placeholder': 'Código de indicação', + 'rewards.referralSection.share': 'Compartilhar', + 'rewards.referralSection.statusCompleted': 'Status concluído', + 'rewards.referralSection.statusExpired': 'Status expirado', + 'rewards.referralSection.statusJoined': 'Status de ingresso', + 'rewards.referralSection.subtitle': 'Subtítulo', + 'rewards.referralSection.title': 'Convide amigos, ganhe créditos', + 'rewards.referralSection.totalEarned': 'Total ganho', + 'rewards.referralSection.yourCode': 'Seu código', + 'settings.ai.addCloudProvider': 'Adicionar provedor de nuvem', + 'settings.ai.addProvider': 'Salvando…', + 'settings.ai.apiKeyFieldLabel': 'Rótulo do campo de chave de API', + 'settings.ai.apiKeyRequired': 'Por favor, cole sua chave de API para continuar.', + 'settings.ai.apiKeyStoredEncrypted': 'Chave de API armazenada criptografada', + 'settings.ai.apiKeysEncrypted': 'auth-profiles.json', + 'settings.ai.clearStoredKey': 'Limpar chave armazenada', + 'settings.ai.connectProvider': 'Conectar provedor', + 'settings.ai.customRouting': 'Roteamento personalizado', + 'settings.ai.defaultResolvesTo': 'O padrão resolve para', + 'settings.ai.discard': 'Descartar', + 'settings.ai.editProvider': 'Editar provedor', + 'settings.ai.llmProviders': 'Provedores LLM', + 'settings.ai.llmProvidersDesc': 'Descrição dos provedores LLM', + 'settings.ai.localOllama': 'Local (Ollama)', + 'settings.ai.modelLabel': 'Modelo', + 'settings.ai.noCustomProviders': 'Sem provedores personalizados', + 'settings.ai.openAiCompat.authHeaderExample': 'Autorização: Portador ', + 'settings.ai.openAiCompat.authHeaderLabel': 'Cabeçalho de autenticação', + 'settings.ai.openAiCompat.baseUrlLabel': 'URL base', + 'settings.ai.openAiCompat.baseUrlUnavailable': 'Indisponível', + 'settings.ai.openAiCompat.clearKey': 'Limpar chave', + 'settings.ai.openAiCompat.description': + 'Aponte os harnesses locais para este servidor /v1 para rotear através dos provedores configurados abaixo. A autenticação usa uma chave estável que você define aqui, e não o bearer interno do núcleo do aplicativo.', + 'settings.ai.openAiCompat.keyConfigured': 'Chave configurada', + 'settings.ai.openAiCompat.keyRequired': 'Chave necessária', + 'settings.ai.openAiCompat.rotateKey': 'Girar chave', + 'settings.ai.openAiCompat.setKey': 'Definir chave', + 'settings.ai.openAiCompat.title': 'Endpoint compatível com OpenAI', + 'settings.ai.providerLabel': 'Provedor', + 'skills.mcpComingSoon.title': 'MCP Servidores', + 'skills.mcpComingSoon.description': + 'O gerenciamento de servidores MCP chegará em breve. Esta aba será o local para descobrir, conectar e monitorar suas integrações de servidores MCP.', + 'settings.ai.routing': 'Roteamento', + 'settings.ai.routingCustom': 'Roteamento personalizado', + 'settings.ai.routingDefault': 'Padrão', + 'settings.ai.routingDesc': 'Descrição do roteamento', + 'settings.ai.saveChanges': 'Salvando…', + 'settings.ai.saving': 'Salvando…', + 'settings.ai.unsavedChange': 'alteração não salva', + 'settings.ai.unsavedChanges': 'alterações não salvas', + 'settings.ai.workloadGroupBackground': 'Grupo de carga de trabalho em segundo plano', + 'settings.ai.workloadGroupChat': 'Grupo de carga de trabalho de chat', + 'settings.ai.disconnectProvider': 'Desconecte {label}', + 'settings.ai.connectProviderLabel': 'Conecte {label}', + 'settings.ai.defaultLocalEndpoint': 'http://localhost:11434/v1', + 'settings.ai.endpointUrlLabel': 'Ponto de extremidade URL', + 'settings.ai.localRuntimeHelper': + 'Onde {label} é acessível. O padrão é localhost; aponte isso para um host remoto (por exemplo, http://10.0.0.4:11434/v1) para usar uma instância compartilhada.', + 'settings.ai.endpointUrlRequired': 'Endpoint URL é necessário.', + 'settings.ai.endpointProtocolRequired': 'Endpoint deve começar com http:// ou https://.', + 'settings.ai.connectProviderDialog': 'Conectar {label}', + 'settings.ai.or': 'Ou', + 'settings.ai.openRouterOauthDescription': + 'Faça login com OpenRouter e importe uma chave API controlada pelo usuário usando PKCE.', + 'settings.ai.connecting': 'Conectando...', + 'settings.ai.backgroundLoops': 'Loops de segundo plano.', + 'settings.ai.backgroundLoopsDesc': + 'Veja o que funciona sem uma mensagem de chat, pause o trabalho do pulso e inspecione as linhas recentes do livro razão de créditos.', + 'settings.ai.heartbeatControls': 'Controles de pulsação', + 'settings.ai.heartbeatControlsDesc': + 'Padrões desativados. Ativar inicia o loop; desativar aborta a tarefa em execução.', + 'settings.ai.heartbeatLoop': 'Loop de pulsação', + 'settings.ai.heartbeatLoopDesc': + 'Agendador mestre para planejador + inferência subconsciente opcional.', + 'settings.ai.subconsciousInference': 'Inferência subconsciente', + 'settings.ai.subconsciousInferenceDesc': + 'Executa avaliação task/reflection com suporte a modelo em batimentos de pulso.', + 'settings.ai.calendarMeetingChecks': 'Verificações de reuniões do calendário', + 'settings.ai.calendarMeetingChecksDesc': + 'Chama a lista de eventos do calendário para conexões ativas do Calendário Google.', + 'settings.ai.calendarCap': 'Limite do calendário', + 'settings.ai.connectionsPerTick': '{count} conn/tick', + 'settings.ai.meetingLookahead': 'Antecipação da reunião', + 'settings.ai.minutesShort': '{count} min', + 'settings.ai.reminderLookahead': 'Antecipação do lembrete', + 'settings.ai.cronReminderChecks': 'Verificações de lembretes do Cron', + 'settings.ai.cronReminderChecksDesc': + 'Verifica trabalhos agendados no cron para itens futuros semelhantes a lembretes.', + 'settings.ai.relevantNotificationChecks': 'Verificações de notificações relevantes', + 'settings.ai.relevantNotificationChecksDesc': + 'Promove notificações locais urgentes em alertas proativos.', + 'settings.ai.externalDelivery': 'Entrega externa', + 'settings.ai.externalDeliveryDesc': + 'Vamos fazer com que os alertas de batimento cardíaco enviem mensagens proativas para canais externos.', + 'settings.ai.interval': 'Intervalo', + 'settings.ai.running': 'Em execução...', + 'settings.ai.plannerTickNow': 'Marcação do planejador agora', + 'settings.ai.loadingHeartbeatControls': 'Carregando controles de pulsação...', + 'settings.ai.heartbeatControlsUnavailable': 'Controles de pulsação indisponíveis.', + 'settings.ai.loopMap': 'Mapa de loop', + 'settings.ai.plannerSummary': + 'Planejador: {sourceEvents} eventos de origem, {sent} enviados, {deduped} desduplicados.', + 'settings.ai.routeLabel': 'rota: {route}', + 'settings.ai.on': 'ativado', + 'settings.ai.off': 'desativado', + 'settings.ai.recentUsageLedger': 'Razão de uso recente', + 'settings.ai.recentUsageLedgerDesc': + 'As linhas do backend expõem action/time hoje; as tags de origem precisam de suporte do backend.', + 'settings.ai.latestSpend': 'Último gasto: {amount} em {time} ({action})', + 'settings.ai.topActions': 'Principais ações', + 'settings.ai.noSpendRows': 'Nenhuma linha de gastos carregada.', + 'settings.ai.topHours': 'Principais horários', + 'settings.ai.noHourlySpend': 'Ainda não há gasto por hora.', + 'settings.ai.openhumanDefault': 'OpenHuman (padrão)', + 'settings.ai.localModelResolved': 'Ollama · {model}', + 'settings.ai.customRoutingForWorkload': 'Roteamento personalizado para {label}', + 'settings.ai.loadingModels': 'Carregando modelos...', + 'settings.ai.enterModelIdManually': 'ou insira o ID do modelo manualmente:', + 'settings.ai.modelIdPlaceholderForProvider': '{slug} ID do modelo', + 'settings.ai.modelIdPlaceholder': 'model-id', + 'settings.ai.selectModel': 'Selecione um modelo...', + 'settings.ai.temperatureOverride': 'Substituição de temperatura', + 'settings.ai.temperatureOverrideSlider': 'Substituição de temperatura (controle deslizante)', + 'settings.ai.temperatureOverrideValue': 'Substituição de temperatura (valor)', + 'settings.ai.temperatureOverrideDesc': + 'Mais baixo = mais determinístico. Deixe desmarcado para usar o padrão do provedor.', + 'settings.ai.testFailed': 'Teste falhou', + 'settings.ai.testingModel': 'Modelo de teste...', + 'settings.ai.modelResponse': 'Resposta do modelo', + 'settings.ai.providerWithValue': 'Provedor: {value}', + 'settings.ai.noneDash': '—', + 'settings.ai.promptHelloWorld': 'Prompt: Olá, mundo', + 'settings.ai.startedAt': 'Iniciado: {value}', + 'settings.ai.waitingForModelResponse': 'Aguardando resposta do modelo selecionado...', + 'settings.ai.response': 'Resposta', + 'settings.ai.testing': 'Testando...', + 'settings.ai.test': 'Teste', + 'settings.ai.slugMissingError': 'Insira um nome de provedor para gerar um slug.', + 'settings.ai.slugInUseError': 'Esse nome de provedor já está em uso.', + 'settings.ai.slugReservedError': 'Escolha um nome de provedor diferente.', + 'settings.ai.providerNamePlaceholder': 'Meu provedor', + 'settings.ai.slugLabel': 'Lesma:', + 'settings.ai.openAiUrlLabel': 'URL da OpenAI', + 'settings.ai.openAiUrlPlaceholder': 'https://api.openai.com/v1', + 'settings.ai.keepExistingKeyPlaceholder': 'Deixe em branco para manter a chave existente', + 'settings.ai.reindexingMemory': 'Reindexando a memória', + 'settings.ai.reindexingMemoryMessage': + 'Os embeddings estão sendo reprocessados. O(s) item(s) de memória {pending} estão sendo re-embarcados sob o modelo atual — a recordação semântica é reduzida até que isso termine. A busca por palavras-chave continua funcionando, e a re-embarcação continua em segundo plano se você fechar isto.', + 'settings.ai.signInWithOpenRouter': 'Faça login com OpenRouter', + 'settings.ai.weekBudget': 'Orçamento semanal', + 'settings.ai.cycleRemaining': 'Ciclo restante', + 'settings.ai.cycleTotalSpend': 'Gasto total do ciclo', + 'settings.ai.avgSpendRow': 'Linha de gasto médio', + 'settings.ai.backgroundApiReads': 'Bg API lê', + 'settings.ai.backgroundWakeups': 'Ativações de Bg', + 'settings.ai.budgetMath': 'Matemática do orçamento', + 'settings.ai.rowsLeft': 'Linhas restantes', + 'settings.ai.rowsPerFullWeekBudget': 'Linhas por orçamento de semana inteira', + 'settings.ai.sampleBurnRate': 'Taxa de queima de amostra', + 'settings.ai.projectedEmpty': 'Vazio projetado', + 'settings.ai.apiReadsPerDollarRemaining': 'API leituras por $ restantes', + 'settings.ai.loopCallBudget': 'Orçamento de chamada de loop', + 'settings.ai.heartbeatTicks': 'Pulsações', + 'settings.ai.calendarPlannerCalls': 'Chamadas do planejador de calendário', + 'settings.ai.calendarFanoutCap': 'Limite de fanout do calendário', + 'settings.ai.subconsciousModelCalls': 'Chamadas de modelo subconsciente', + 'settings.ai.composioSyncScans': 'Composio varreduras de sincronização', + 'settings.ai.totalBackgroundApiReadBudget': 'Total bg API orçamento de leitura', + 'settings.ai.memoryWorkerPolls': 'Pesquisas de trabalho de memória', + 'settings.ai.defaultProviderName': 'OpenHuman', + 'settings.ai.routing.managed': 'Gerenciadas', + 'settings.ai.routing.managedDesc': + 'OpenHuman executará toda a inferência na nuvem, escolherá o melhor modelo para a tarefa, otimizará os custos e manterá os padrões de roteamento mais seguros.', + 'settings.ai.routing.managedMsg': + 'OpenHuman irá gerenciar toda a inferência para cada carga de trabalho e escolherá automaticamente a melhor rota em termos de custo, qualidade e segurança.', + 'settings.ai.routing.useYourOwn': 'Use seus próprios modelos', + 'settings.ai.routing.useYourOwnDesc': + 'Escolha um provedor + modelo e direcione todas as cargas de trabalho através dele. Isso é simples, mas pode ser ineficiente porque inferências leves e pesadas compartilham a mesma rota.', + 'settings.ai.routing.advanced': 'Avançado', + 'settings.ai.routing.advancedDesc': + 'Escolha modelos diferentes para tarefas diferentes. Esta é a melhor opção para otimização de custos rigorosa e o máximo de controle.', + 'settings.ai.routing.customDesc': + 'O roteamento detalhado oferece a melhor otimização de custos e o máximo de controle. Use as linhas abaixo para decidir quais cargas de trabalho permanecem Gerenciadas, quais usam seu padrão compartilhado e quais são fixadas a um modelo específico.', + 'settings.ai.routing.chatAndConversations': 'Bate-papo e conversas', + 'settings.ai.routing.chatDesc': + 'Modelos usados durante a interação direta com o usuário, respostas, raciocínio, ciclos de agentes e ajuda com programação.', + 'settings.ai.routing.backgroundTasks': 'Tarefas de segundo plano', + 'settings.ai.routing.bgTasksDesc': + 'Modelos usados fora do fluxo principal de conversa para resumir, monitoramento, aprendizado e avaliação subconsciente.', + 'settings.ai.routing.addCustomProvider': 'Adicionar provedor personalizado', + 'settings.ai.globalModel.title': 'Escolha um modelo para tudo', + 'settings.ai.globalModel.desc': + 'Isso direciona toda a inferência através de um modelo. É mais simples, mas pode ser ineficiente em termos de custo e qualidade porque tarefas leves e pesadas usarão todas o mesmo caminho.', + 'settings.ai.globalModel.noProviders': + 'Adicione ou conecte um provedor primeiro. Então você pode direcionar toda carga de trabalho através de um modelo aqui.', + 'settings.ai.globalModel.provider': 'Provedor', + 'settings.ai.globalModel.model': 'Modelo', + 'settings.ai.globalModel.loadingModels': 'Carregando modelos…', + 'settings.ai.globalModel.enterModelId': 'Insira o ID do modelo', + 'settings.ai.globalModel.appliesToAll': + 'Aplica o mesmo provedor + modelo ao chat, raciocínio, codificação, memória, batimento cardíaco, aprendizado e subconsciente. Embeddings são configurados separadamente. As alterações são salvas quando você clica em salvar.', + 'settings.ai.globalModel.saving': 'Salvando…', + 'settings.ai.globalModel.saved': 'Salvo', + 'settings.ai.workload.noModel': 'Nenhum modelo selecionado', + 'settings.ai.workload.changeModel': 'Alterar modelo', + 'settings.ai.workload.chooseModel': 'Escolher modelo', + 'settings.ai.provider.ollama': 'Ollama', + 'settings.autocomplete.appFilter.acceptSuggestion': 'Aceitar sugestão', + 'settings.autocomplete.appFilter.app': 'Aplicativo', + 'settings.autocomplete.appFilter.currentSuggestion': 'Sugestão atual', + 'settings.autocomplete.appFilter.contextOverride': 'Substituição de Contexto (opcional)', + 'settings.autocomplete.appFilter.debounce': 'Desacelerar', + 'settings.autocomplete.appFilter.debugFocus': 'Foco de depuração', + 'settings.autocomplete.appFilter.enabled': 'Habilitado', + 'settings.autocomplete.appFilter.getSuggestion': 'Obter sugestão', + 'settings.autocomplete.appFilter.lastError': 'Último erro', + 'settings.autocomplete.appFilter.liveLogs': 'Logs ao Vivo', + 'settings.autocomplete.appFilter.model': 'Modelo', + 'settings.autocomplete.appFilter.noLogs': '):', + 'settings.autocomplete.appFilter.phase': 'Fase', + 'settings.autocomplete.appFilter.platformSupported': 'Plataforma suportada', + 'settings.autocomplete.appFilter.refreshStatus': 'Atualizando…', + 'settings.autocomplete.appFilter.refreshing': 'Atualizando…', + 'settings.autocomplete.appFilter.running': 'Em execução', + 'settings.autocomplete.appFilter.runtime': 'Tempo de execução', + 'settings.autocomplete.appFilter.test': 'Testar', + 'settings.autocomplete.completionStyle.acceptedCompletion': + '{count} complemento aceito armazenado — usado para personalizar sugestões futuras.', + 'settings.autocomplete.completionStyle.acceptedCompletions': + '{count} complementos aceitos armazenados — usados para personalizar sugestões futuras.', + 'settings.autocomplete.completionStyle.clearHistory': 'Limpando…', + 'settings.autocomplete.completionStyle.clearing': 'Limpando…', + 'settings.autocomplete.completionStyle.debounce': 'Atraso de resposta (ms)', + 'settings.autocomplete.completionStyle.enabled': 'Ativado', + 'settings.autocomplete.completionStyle.maxChars': 'Máx. de Caracteres', + 'settings.autocomplete.completionStyle.noHistory': + 'Nenhuma conclusão aceita ainda. Aceite sugestões com Tab para começar a personalizar.', + 'settings.autocomplete.completionStyle.overlayTtl': 'TTL do Overlay (ms)', + 'settings.autocomplete.completionStyle.personalizationHistory': 'Histórico de Personalização', + 'settings.autocomplete.completionStyle.styleExamples': 'Exemplos de Estilo (um por linha)', + 'settings.autocomplete.completionStyle.styleInstructions': 'Instruções de Estilo', + 'settings.autocomplete.debug.acceptedPrefix': 'Aceito: {value}', + 'settings.autocomplete.debug.acceptFailed': 'Falha ao aceitar sugestão', + 'settings.autocomplete.debug.alreadyRunning': 'O preenchimento automático já está em execução.', + 'settings.autocomplete.debug.clearHistoryFailed': 'Falha ao limpar o histórico', + 'settings.autocomplete.debug.didNotStart': 'O preenchimento automático não foi iniciado.', + 'settings.autocomplete.debug.disabledInSettings': + 'O preenchimento automático está desativado nas configurações. Habilite-o e salve primeiro.', + 'settings.autocomplete.debug.fetchSuggestionFailed': 'Falha ao buscar a sugestão atual', + 'settings.autocomplete.debug.inspectFocusedElementFailed': + 'Falha ao inspecionar o elemento em foco', + 'settings.autocomplete.debug.loadSettingsFailed': + 'Falha ao carregar as configurações de preenchimento automático', + 'settings.autocomplete.debug.noSuggestionApplied': 'Nenhuma sugestão foi aplicada.', + 'settings.autocomplete.debug.noSuggestionReturned': 'Nenhuma sugestão foi retornada.', + 'settings.autocomplete.debug.refreshStatusFailed': + 'Falha ao atualizar o status do preenchimento automático', + 'settings.autocomplete.debug.saveAdvancedSettingsFailed': + 'Falha ao salvar as configurações avançadas', + 'settings.autocomplete.debug.startFailed': 'Falha ao iniciar o preenchimento automático', + 'settings.autocomplete.debug.stopFailed': 'Falha ao interromper o preenchimento automático', + 'settings.autocomplete.debug.suggestionPrefix': 'Sugestão: {value}', + 'settings.autocomplete.shared.none': 'Nenhum', + 'settings.autocomplete.shared.notApplicable': 'n/a', + 'settings.autocomplete.shared.unknown': 'Desconhecido', + 'settings.billing.autoRecharge.addAmount': 'Adicionar este valor', + 'settings.billing.autoRecharge.addCard': 'Adicionar cartão', + 'settings.billing.autoRecharge.amountHint': 'Dica de valor', + 'settings.billing.autoRecharge.defaultCard': 'Cartão padrão', + 'settings.billing.autoRecharge.lastRechargeFailed': 'Última recarga falhou', + 'settings.billing.autoRecharge.lastRecharged': 'Última recarga', + 'settings.billing.autoRecharge.expires': 'Expira {date}', + 'settings.billing.autoRecharge.noCards': 'Sem cartões', + 'settings.billing.autoRecharge.paymentMethods': 'Métodos de Pagamento', + 'settings.billing.autoRecharge.rechargeInProgress': 'Recarga em andamento', + 'settings.billing.autoRecharge.spentThisWeek': '${spent} de ${limit} usado esta semana', + 'settings.billing.autoRecharge.rechargeWhen': 'Recarregar quando o saldo cair abaixo de', + 'settings.billing.autoRecharge.saveSettings': 'Salvando…', + 'settings.billing.autoRecharge.saving': 'Salvando…', + 'settings.billing.autoRecharge.setDefault': ':', + 'settings.billing.autoRecharge.subtitle': 'Subtítulo', + 'settings.billing.autoRecharge.title': 'Ativar Recarga Automática', + 'settings.billing.autoRecharge.toggleAriaLabel': 'Alternar recarga automática', + 'settings.billing.autoRecharge.weeklyLimit': 'Limite de gastos semanal', + 'settings.billing.history.desc': 'Descrição', + 'settings.billing.history.empty': 'Vazio', + 'settings.billing.history.openPortal': 'Abrir portal', + 'settings.billing.history.posted': 'Postado', + 'settings.billing.history.title': 'Título', + 'settings.billing.inferenceBudget.cycleEnds': 'Ciclo termina', + 'settings.billing.inferenceBudget.exhausted': 'Esgotado', + 'settings.billing.inferenceBudget.loadError': 'Erro de carregamento', + 'settings.billing.inferenceBudget.noBudgetDesc': 'Descrição sem orçamento', + 'settings.billing.inferenceBudget.noRecurringBudget': 'Sem orçamento recorrente', + 'settings.billing.inferenceBudget.noRecurringPlanBudget': 'Nenhum orçamento de plano recorrente', + 'settings.billing.inferenceBudget.noRecurringWeeklyDesc': + 'Seu plano atual não inclui um orçamento recorrente de inferência semanal. O uso é pago a partir dos créditos disponíveis, em vez disso.', + 'settings.billing.inferenceBudget.remaining': 'Restante', + 'settings.billing.inferenceBudget.remainingSummary': '{remaining} / {budget} restantes', + 'settings.billing.inferenceBudget.spentThisCycle': 'Gasto {amount} neste ciclo', + 'settings.billing.inferenceBudget.cycleEndsOn': 'O ciclo termina em {date}', + 'settings.billing.inferenceBudget.exhaustedDesc': + 'O uso da assinatura incluída foi esgotado. Recarregue créditos para continuar usando AI sem esperar pelo próximo ciclo.', + 'settings.billing.inferenceBudget.discountVsPayg': + '{pct}% mais barato por chamada do que pagar conforme o uso.', + 'settings.billing.inferenceBudget.cycleSpend': 'Gasto do ciclo', + 'settings.billing.inferenceBudget.totalAmount': '{amount} no total', + 'settings.billing.inferenceBudget.inference': 'Inferência', + 'settings.billing.inferenceBudget.integrations': 'Integrações', + 'settings.billing.inferenceBudget.calls': '{count} chamadas', + 'settings.billing.inferenceBudget.dailySpend': 'Gasto diário', + 'settings.billing.inferenceBudget.dailySpendPoint': '{date}: {amount}', + 'settings.billing.inferenceBudget.topModels': 'Principais modelos', + 'settings.billing.inferenceBudget.noInferenceUsage': 'Nenhum uso de inferência neste ciclo.', + 'settings.billing.inferenceBudget.topIntegrations': 'Principais integrações', + 'settings.billing.inferenceBudget.noIntegrationUsage': 'Nenhum uso de integração neste ciclo.', + 'settings.billing.inferenceBudget.tenHourCap': 'Limite de dez horas', + 'settings.billing.inferenceBudget.title': 'Título', + 'settings.billing.inferenceBudget.unableToLoad': 'Não foi possível carregar os dados de uso', + 'settings.billing.inferenceBudget.notAvailable': 'n/a', + 'settings.billing.payAsYouGo.available': 'Disponível', + 'settings.billing.payAsYouGo.chargeCustomAmount': 'Abrindo…', + 'settings.billing.payAsYouGo.chooseTopUpDesc': 'Descrição de recarga', + 'settings.billing.payAsYouGo.chooseTopUpTitle': 'Título de recarga', + 'settings.billing.payAsYouGo.creditBalanceDesc': 'Descrição do saldo de crédito', + 'settings.billing.payAsYouGo.creditBalanceTitle': 'Título do saldo de crédito', + 'settings.billing.payAsYouGo.customAmount': 'Valor personalizado', + 'settings.billing.payAsYouGo.enterAmount': 'Inserir valor', + 'settings.billing.payAsYouGo.opening': 'Abrindo', + 'settings.billing.payAsYouGo.promotionalCredits': 'Créditos Promocionais', + 'settings.billing.payAsYouGo.topUpBalance': 'Recarregar Saldo', + 'settings.billing.payAsYouGo.topUpCredits': 'Recarregar Créditos', + 'settings.billing.payAsYouGo.unableToLoad': 'Não foi possível carregar o saldo.', + 'settings.billing.subscription.annual': 'Anual', + 'settings.billing.subscription.billedAnnually': 'Cobrado anualmente', + 'settings.billing.subscription.chooseSubtitle': 'Subtítulo de escolha', + 'settings.billing.subscription.chooseTitle': 'Título de escolha', + 'settings.billing.subscription.cryptoDesc': 'Descrição de cripto', + 'settings.billing.subscription.cryptoQuestion': 'Pergunta sobre cripto', + 'settings.billing.subscription.current': 'Atual', + 'settings.billing.subscription.currentPlan': 'Plano atual', + 'settings.billing.subscription.monthly': 'Mensal', + 'settings.billing.subscription.paymentConfirmed': 'Pagamento confirmado', + 'settings.billing.subscription.perMonth': 'Por mês', + 'settings.billing.subscription.popular': 'Popular', + 'settings.billing.subscription.save': '{pct}', + 'settings.billing.subscription.upgrade': 'Fazer upgrade', + 'settings.billing.subscription.waiting': 'Aguardando', + 'settings.billing.subscription.waitingPayment': 'Aguardando pagamento', + 'settings.composio.apiKeyDesc': + 'Uma chave de API do Composio está atualmente armazenada neste dispositivo.', + 'settings.composio.apiKeyExamplePlaceholder': 'ck_live_xxxxxxxxxxxxxxx', + 'settings.composio.apiKeyLabel': 'Chave de API do Composio', + 'settings.composio.apiKeyStored': 'Chave de API armazenada', + 'settings.composio.apiKeyStoredPlaceholder': '••••••••••••••••', + 'settings.composio.clearedToBackend': 'Alternado para modo Backend', + 'settings.composio.confirmItem1': 'Uma conta em app.composio.dev com uma chave de API', + 'settings.composio.confirmItem2': + 'Religar cada integração através da sua conta pessoal do Composio', + 'settings.composio.confirmItem3': + 'Observação: gatilhos do Composio (webhooks em tempo real) ainda não funcionam no modo Direto — apenas chamadas síncronas de ferramentas', + 'settings.composio.confirmNeedItems': 'Você precisará de:', + 'settings.composio.confirmSwitch': 'Entendi, alternar para Direto', + 'settings.composio.confirmTitle': '⚠️ Alternando para o modo Direto', + 'settings.composio.confirmWarning': + 'Suas integrações existentes (Gmail, Slack, GitHub, etc. conectadas via OpenHuman) não ficarão visíveis — elas vivem no tenant do Composio gerenciado pelo OpenHuman.', + 'settings.composio.intro': + 'O Composio integra mais de 250 apps externos como ferramentas que seu agente pode chamar. Escolha como essas chamadas são roteadas.', + 'settings.composio.title': 'Composio', + 'settings.composio.modeDirect': 'Direto (traga sua própria chave de API)', + 'settings.composio.modeDirectDesc': + 'As chamadas vão direto para backend.composio.dev. Soberano / amigável para offline. A execução de ferramentas funciona de forma síncrona; webhooks de gatilhos em tempo real ainda não são roteados no modo direto (issue de acompanhamento).', + 'settings.composio.modeManaged': 'Gerenciado (OpenHuman cuida para você)', + 'settings.composio.modeManagedDesc': + 'O OpenHuman faz proxy das chamadas de ferramentas pelo nosso backend (recomendado). A autenticação é intermediada; você nunca cola uma chave de API do Composio. Webhooks são totalmente roteados.', + 'settings.composio.routingMode': 'Modo de roteamento', + 'settings.composio.saveErrorNoKey': + 'Falha ao salvar. O modo Direto requer uma chave de API não vazia.', + 'settings.composio.saving': 'Salvando…', + 'settings.composio.switching': 'Alternando…', + 'settings.companion.title': 'Companheiro de Área de Trabalho', + 'settings.companion.session': 'Sessão', + 'settings.companion.activeLabel': 'Ativo', + 'settings.companion.inactiveStatus': 'Inativo', + 'settings.companion.stopping': 'Parando…', + 'settings.companion.stopSession': 'Interromper sessão', + 'settings.companion.starting': 'Iniciando…', + 'settings.companion.startSession': 'Iniciar sessão', + 'settings.companion.sessionId': 'ID da sessão', + 'settings.companion.turns': 'Turnos', + 'settings.companion.remaining': 'Restante', + 'settings.companion.configuration': 'Configuração', + 'settings.companion.hotkey': 'Tecla de atalho', + 'settings.companion.activationMode': 'Modo de ativação', + 'settings.companion.sessionTtl': 'Sessão TTL', + 'settings.companion.screenCapture': 'Captura de tela', + 'settings.companion.appContext': 'Contexto do aplicativo', + 'settings.cron.jobs.desc': 'Descrição', + 'settings.cron.jobs.empty': 'Nenhuma tarefa cron do core encontrada.', + 'settings.cron.jobs.lastStatus': 'Último status', + 'settings.cron.jobs.loading': 'Carregando tarefas cron...', + 'settings.cron.jobs.loadingRuns': 'Carregando execuções', + 'settings.cron.jobs.nextRun': 'Próxima execução', + 'settings.cron.jobs.pause': 'Pausar', + 'settings.cron.jobs.paused': 'Pausado', + 'settings.cron.jobs.recentRuns': 'Execuções recentes', + 'settings.cron.jobs.removing': 'Removendo', + 'settings.cron.jobs.resume': 'Retomar', + 'settings.cron.jobs.runningNow': 'Executando agora', + 'settings.cron.jobs.saving': 'Salvando…', + 'settings.cron.jobs.schedule': 'Agendamento', + 'settings.cron.jobs.title': 'Tarefas Cron do Core', + 'settings.cron.jobs.viewRuns': 'Ver execuções', + 'settings.localModel.deviceCapability.active': 'Ativo', + 'settings.localModel.deviceCapability.appliedTier': 'Nível aplicado', + 'settings.localModel.deviceCapability.applying': 'Aplicando', + 'settings.localModel.deviceCapability.cores': '{count}', + 'settings.localModel.deviceCapability.couldNotLoadPresets': + 'Não foi possível carregar predefinições', + 'settings.localModel.deviceCapability.cpu': 'CPU', + 'settings.localModel.deviceCapability.customModelIds': 'IDs de modelos personalizados', + 'settings.localModel.deviceCapability.detected': 'Detectado', + 'settings.localModel.deviceCapability.disabled': 'Desativado', + 'settings.localModel.deviceCapability.disabledDesc': 'Descrição desativado', + 'settings.localModel.deviceCapability.downloadingModels': '(baixando modelos)', + 'settings.localModel.deviceCapability.downloadingSetupDesc': + 'Baixando o instalador OllamaSetup (~2 GB) e descompactando. Isso pode levar um minuto na primeira instalação.', + 'settings.localModel.deviceCapability.failedToApplyPreset': 'Falha ao aplicar predefinição', + 'settings.localModel.deviceCapability.gpu': 'GPU', + 'settings.localModel.deviceCapability.installFailed': 'Instalação do Ollama falhou', + 'settings.localModel.deviceCapability.installFailedDesc': + 'O instalador encerrou antes que o Ollama estivesse utilizável. Clique em tentar novamente ou instale manualmente em ollama.com.', + 'settings.localModel.deviceCapability.installFirst': 'Execute o Ollama primeiro.', + 'settings.localModel.deviceCapability.installFirstDesc': + 'Os níveis locais dependem de um endpoint Ollama gerenciado externamente. Inicie-o você mesmo, baixe os modelos desejados e continue usando "Desativado (fallback de nuvem)" até que o runtime esteja acessível.', + 'settings.localModel.deviceCapability.installOllamaFirst': + 'Execute o Ollama primeiro para usar este nível', + 'settings.localModel.deviceCapability.installingOllama': 'Instalando ollama', + 'settings.localModel.deviceCapability.loadingDeviceInfo': 'Carregando informações do dispositivo', + 'settings.localModel.deviceCapability.localAiDisabled': + 'IA local desativada — usando fallback na nuvem.', + 'settings.localModel.deviceCapability.modelTier': 'Nível do Modelo', + 'settings.localModel.deviceCapability.needsOllama': 'Precisa de ollama', + 'settings.localModel.deviceCapability.notDetected': 'Não detectado', + 'settings.localModel.deviceCapability.disabledLowercase': 'desativado', + 'settings.localModel.deviceCapability.presetDetails': + 'Bate-papo: {chatModel} · Visão: {visionModel} · RAM de destino: {targetRamGb} GB', + 'settings.localModel.deviceCapability.ram': 'RAM', + 'settings.localModel.deviceCapability.recommended': 'Recomendado', + 'settings.localModel.deviceCapability.retryInstall': 'Tentando novamente…', + 'settings.localModel.deviceCapability.retrying': 'Tentando novamente…', + 'settings.localModel.deviceCapability.starting': 'Iniciando…', + 'settings.localModel.download.audioPathPlaceholder': 'Caminho absoluto para arquivo de áudio', + 'settings.localModel.download.capabilityChat': 'Bate-papo', + 'settings.localModel.download.capabilityEmbedding': 'Incorporação', + 'settings.localModel.download.capabilityAssets': 'Assets de Funcionalidade', + 'settings.localModel.download.capabilityStt': 'STT', + 'settings.localModel.download.capabilityTts': 'TTS', + 'settings.localModel.download.capabilityVision': 'Visão', + 'settings.localModel.download.downloading': 'Baixando...', + 'settings.localModel.download.embeddingDimensions': 'Dimensões: {dimensions}', + 'settings.localModel.download.embeddingModel': 'Modelo: {modelId}', + 'settings.localModel.download.embeddingPlaceholder': 'Uma string de entrada por linha...', + 'settings.localModel.download.embeddingVectors': 'Vetores: {count}', + 'settings.localModel.download.noThinkMode': 'Sem modo de pensamento', + 'settings.localModel.download.notAvailable': 'n/a', + 'settings.localModel.download.promptPlaceholder': + 'Digite qualquer prompt e execute-o no modelo local...', + 'settings.localModel.download.quantizationPref': 'Preferência de quantização', + 'settings.localModel.download.runEmbeddingTest': 'Executando...', + 'settings.localModel.download.runPromptTest': 'Executar Teste de Prompt', + 'settings.localModel.download.runSummaryTest': 'Executar Teste de Resumo', + 'settings.localModel.download.runTranscriptionTest': 'Executando...', + 'settings.localModel.download.runTtsTest': 'Executando...', + 'settings.localModel.download.runVisionTest': 'Executando...', + 'settings.localModel.download.running': 'Executando...', + 'settings.localModel.download.runningPrompt': 'Executando prompt', + 'settings.localModel.download.summaryHelper': + 'Chamadas `openhuman.inference_summarize` via Rust core', + 'settings.localModel.download.summarizePlaceholder': + 'Cole o texto para resumir com o modelo local...', + 'settings.localModel.download.testCustomPrompt': 'Testar Prompt Personalizado', + 'settings.localModel.download.testEmbeddings': 'Testar Embeddings', + 'settings.localModel.download.testSummarization': 'Testar Sumarização', + 'settings.localModel.download.testVisionPrompt': 'Testar Prompt de Visão', + 'settings.localModel.download.testVoiceInput': 'Testar Entrada de Voz (STT)', + 'settings.localModel.download.testVoiceOutput': 'Testar Saída de Voz (TTS)', + 'settings.localModel.download.transcript': 'Transcrição:', + 'settings.localModel.download.ttsOutput': 'Saída: {outputPath}', + 'settings.localModel.download.ttsOutputPlaceholder': 'Caminho WAV de saída opcional', + 'settings.localModel.download.ttsPlaceholder': 'Insira o texto para sintetizar...', + 'settings.localModel.download.ttsVoice': 'Voz: {voiceId}', + 'settings.localModel.download.visionImagePlaceholder': + 'Uma referência de imagem por linha (URI de dados, URL ou marcador de caminho local)', + 'settings.localModel.download.visionPromptPlaceholder': + 'Insira um prompt para o modelo de visão...', + 'settings.localModel.status.allChecksPassed': 'Todas as verificações passaram', + 'settings.localModel.status.artifact': 'Artefato', + 'settings.localModel.status.backend': 'Back-end', + 'settings.localModel.status.binary': 'Binário', + 'settings.localModel.status.bootstrapResume': 'Bootstrap / Retomar', + 'settings.localModel.status.checking': 'Verificando...', + 'settings.localModel.status.checkingOllama': 'Verificando ollama', + 'settings.localModel.status.contextBelowMinimumBadge': + '{contextLength} ctx - abaixo de {required} min', + 'settings.localModel.status.contextBelowMinimumTitle': + 'Rejeitado: os tokens {contextLength} da janela de contexto estão abaixo do mínimo de token {required} que a camada de memória exige. A recuperação seria corrompida pelo truncamento silencioso.', + 'settings.localModel.status.contextOkBadge': '{contextLength} ctx ✓', + 'settings.localModel.status.contextOkTitle': + 'Os tokens {contextLength} da janela de contexto atendem ao mínimo da camada de memória de {required} tokens.', + 'settings.localModel.status.contextUnknownBadge': 'ctx desconhecido', + 'settings.localModel.status.contextUnknownTitle': + 'Janela de contexto desconhecida; não foi possível confirmar se atende ao mínimo da camada de memória do token {required}.', + 'settings.localModel.status.customLocation': 'Localização personalizada', + 'settings.localModel.status.customLocationDesc': 'Descrição de localização personalizada', + 'settings.localModel.status.diagnosticsHint': + 'Clique em "Executar Diagnóstico" para verificar se o Ollama está rodando e os modelos estão instalados.', + 'settings.localModel.status.downloadingUnknown': 'Baixando (tamanho desconhecido)', + 'settings.localModel.status.eta': 'ETA', + 'settings.localModel.status.expectedModels': 'Modelos esperados', + 'settings.localModel.status.expectedChat': 'Bate-papo: {model}', + 'settings.localModel.status.expectedEmbedding': 'Incorporação: {model}', + 'settings.localModel.status.expectedVision': 'Visão: {model}', + 'settings.localModel.status.externalProcess': 'Processo externo', + 'settings.localModel.status.forceRebootstrap': 'Forçar Re-bootstrap', + 'settings.localModel.status.generationTps': 'TPS de geração', + 'settings.localModel.status.hideErrorDetails': 'Ocultar detalhes do erro', + 'settings.localModel.status.installManually': 'Instalar manualmente', + 'settings.localModel.status.installManuallyFrom': 'Instalar manualmente em', + 'settings.localModel.status.installOllama': 'Iniciando…', + 'settings.localModel.status.installedModels': 'Modelos instalados', + 'settings.localModel.status.installing': 'Instalando...', + 'settings.localModel.status.installingOllama': 'Instalando runtime Ollama...', + 'settings.localModel.status.issues': 'Problemas', + 'settings.localModel.status.issuesFound': '{count} problema(s) encontrado(s)', + 'settings.localModel.status.lastLatency': 'Última Latência', + 'settings.localModel.status.model': 'Modelo', + 'settings.localModel.status.notAvailable': 'n/a', + 'settings.localModel.status.notFound': 'Não encontrado', + 'settings.localModel.status.notRunning': 'Não está em execução', + 'settings.localModel.status.ollamaBinaryPath': 'Caminho do binário Ollama', + 'localModel.ollamaServer.helperText': 'Exemplo: http://192.168.1.5:11434', + 'localModel.ollamaServer.label': 'URL do servidor Ollama', + 'localModel.ollamaServer.modelCount': 'modelos', + 'localModel.ollamaServer.placeholder': 'http://localhost:11434', + 'localModel.ollamaServer.reachable': 'Acessível', + 'localModel.ollamaServer.resetButton': 'Redefinir para padrão', + 'localModel.ollamaServer.saveButton': 'Salvar', + 'localModel.ollamaServer.testButton': 'Testar conexão', + 'localModel.ollamaServer.unreachable': 'Inacessível', + 'localModel.ollamaServer.validationError': 'Deve ser uma URL http:// ou https:// válida', + 'settings.localModel.status.ollamaDiagnostics': 'Diagnósticos do Ollama', + 'settings.localModel.status.ollamaNotInstalled': 'Runtime do Ollama indisponível', + 'settings.localModel.status.ollamaNotInstalledDesc': + 'O OpenHuman agora trata o Ollama como um runtime de inferência externo. Inicie seu próprio servidor Ollama, baixe os modelos desejados e aponte o roteamento de carga para ele.', + 'settings.localModel.status.progress': 'Progresso', + 'settings.localModel.status.provider': 'Provedor', + 'settings.localModel.status.retryBootstrap': 'Tentar Bootstrap Novamente', + 'settings.localModel.status.runDiagnostics': 'Verificando...', + 'settings.localModel.status.running': 'Rodando', + 'settings.localModel.status.runningExternalProcess': 'Rodando via processo externo', + 'settings.localModel.status.runtimeStatus': 'Status do Runtime', + 'settings.localModel.status.server': 'Servidor', + 'settings.localModel.status.setPath': 'Definindo...', + 'settings.localModel.status.setting': 'Definindo...', + 'settings.localModel.status.showErrorDetails': 'Ocultar detalhes do erro', + 'settings.localModel.status.showInstallErrorDetails': 'Ocultar detalhes do erro', + 'settings.localModel.status.suggestedFixes': 'Correções sugeridas', + 'settings.localModel.status.thenSetPath': 'Então defina o caminho', + 'settings.localModel.status.triggering': 'Disparando...', + 'settings.localModel.status.unavailable': 'Indisponível', + 'settings.localModel.status.working': 'Trabalhando...', + 'settings.developerMenu.ai.title': 'Configuração de IA', + 'settings.developerMenu.ai.desc': + 'Provedores em nuvem, modelos Ollama locais e roteamento por carga de trabalho', + 'settings.developerMenu.screenAwareness.title': 'Consciência de tela', + 'settings.developerMenu.screenAwareness.desc': + 'Permissões de captura de tela, política de monitoramento e controles de sessão', + 'settings.developerMenu.messagingChannels.title': 'Canais de mensagens', + 'settings.developerMenu.messagingChannels.desc': + 'Configure modos de autenticação Telegram/Discord e o roteamento de canal padrão', + 'settings.developerMenu.tools.title': 'Ferramentas', + 'settings.developerMenu.tools.desc': + 'Ative ou desative capacidades que o OpenHuman pode usar em seu nome', + 'settings.developerMenu.agentChat.title': 'Chat do agente', + 'settings.developerMenu.agentChat.desc': + 'Teste conversas do agente com substituições de modelo e temperatura', + 'settings.developerMenu.devWorkflow.title': 'Fluxo de Trabalho de Desenvolvimento', + 'settings.developerMenu.devWorkflow.desc': + 'Agente autônomo que seleciona seus problemas GitHub e cria PRs em um cronograma', + 'settings.developerMenu.devWorkflow.panelDesc': + 'Configure um agente de desenvolvedor autônomo que selecione problemas GitHub atribuídos a você e faça pull requests automaticamente em um cronograma.', + 'settings.developerMenu.skillsRunner.title': 'Corredor de Habilidades', + 'settings.developerMenu.skillsRunner.desc': + 'Execute qualquer habilidade incluída ad-hoc — preencha suas entradas e inicie uma execução autônoma em segundo plano', + 'settings.developerMenu.skillsRunner.panelDesc': + 'Escolha uma habilidade agrupada, preencha suas entradas declaradas e execute uma execução em segundo plano de disparo e esquecimento. Use Dev Workflow em vez disso se você quiser um trabalho recorrente agendado pelo cron.', + 'settings.skillsRunner.skill': 'Habilidade', + 'settings.skillsRunner.selectSkill': 'Selecione uma habilidade…', + 'settings.skillsRunner.loadingSkills': 'Carregando habilidades…', + 'settings.skillsRunner.loadingDescription': 'Carregando entradas de habilidade…', + 'settings.skillsRunner.noInputs': 'Esta habilidade não declara entradas.', + 'settings.skillsRunner.placeholder.required': 'obrigatório', + 'settings.skillsRunner.runNow': 'Corra agora', + 'settings.skillsRunner.starting': 'Iniciando…', + 'settings.skillsRunner.started': 'Iniciado — id da execução:', + 'settings.skillsRunner.logPath': 'Registro:', + 'settings.skillsRunner.error.listSkills': 'Falha ao carregar habilidades:', + 'settings.skillsRunner.error.describe': 'Falha ao carregar entradas:', + 'settings.skillsRunner.error.missingRequired': 'Entrada(s) obrigatória(s) ausente(s):', + 'settings.skillsRunner.error.run': 'Falha ao iniciar a execução:', + 'settings.skillsRunner.error.preflightGate': 'Portão de embarque pré-voo falhou', + 'settings.skillsRunner.schedule.heading': 'Agenda (recorrente)', + 'settings.skillsRunner.schedule.help': + 'Salve esta habilidade + entradas como um trabalho cron recorrente. O agente chamará run_skill a cada tick.', + 'settings.skillsRunner.schedule.frequency': 'Frequência', + 'settings.skillsRunner.schedule.every30min': 'A cada 30 minutos', + 'settings.skillsRunner.schedule.everyHour': 'A cada hora', + 'settings.skillsRunner.schedule.every2hours': 'A cada 2 horas', + 'settings.skillsRunner.schedule.every6hours': 'A cada 6 horas', + 'settings.skillsRunner.schedule.onceDaily': 'Uma vez ao dia (9:00)', + 'settings.skillsRunner.schedule.save': 'Salvar cronograma', + 'settings.skillsRunner.schedule.saving': 'Salvando…', + 'settings.skillsRunner.schedule.saved': 'Cronograma salvo.', + 'settings.skillsRunner.schedule.error': 'Falha ao salvar a programação:', + 'settings.skillsRunner.schedule.loadingJobs': 'Carregando horários existentes…', + 'settings.skillsRunner.schedule.noJobs': 'Nenhum cronograma salvo para esta habilidade ainda.', + 'settings.skillsRunner.schedule.existing': 'Trabalhos agendados para esta habilidade:', + 'settings.skillsRunner.schedule.runNow': 'Correr', + 'settings.skillsRunner.schedule.remove': 'Remover', + 'settings.skillsRunner.scheduleEnabled': 'Ativado', + 'settings.skillsRunner.scheduleDisabled': 'Pausado', + 'settings.skillsRunner.scheduleToggleAria': 'Alternar programação ativada', + 'settings.skillsRunner.schedule.history': 'História', + 'settings.skillsRunner.schedule.historyLoading': 'Carregando histórico…', + 'settings.skillsRunner.schedule.historyEmpty': 'Nenhuma execução ainda para esta programação.', + 'settings.skillsRunner.schedule.historyNoOutput': 'Nenhuma saída capturada.', + 'settings.skillsRunner.schedule.active': 'Ativo', + 'settings.skillsRunner.schedule.lastRunLabel': 'último:', + 'settings.skillsRunner.recentRuns.headingForSkill': 'Execuções recentes para esta habilidade', + 'settings.skillsRunner.recentRuns.headingAll': 'Execuções de habilidade recentes (todas)', + 'settings.skillsRunner.recentRuns.refresh': 'Atualizar', + 'settings.skillsRunner.recentRuns.loading': 'Carregando corridas recentes…', + 'settings.skillsRunner.recentRuns.empty': 'Nenhuma execução recente.', + 'settings.skillsRunner.viewer.loading': 'Carregando registro…', + 'settings.skillsRunner.viewer.tailing': 'Acompanhamento ao vivo', + 'settings.skillsRunner.viewer.fetching': 'buscando', + 'settings.skillsRunner.viewer.error': 'Falha ao ler o log:', + 'settings.skillsRunner.repoPicker.loading': 'Carregando repositórios…', + 'settings.skillsRunner.repoPicker.select': 'Selecione um repositório…', + 'settings.skillsRunner.repoPicker.empty': + 'Nenhum repositório retornado. Conecte GitHub via Composio para preencher esta lista.', + 'settings.skillsRunner.repoPicker.notConnected': + 'GitHub não está conectado via Composio. Conecte-o primeiro em Habilidades → Composio.', + 'settings.skillsRunner.repoPicker.privateTag': '(privado)', + 'settings.skillsRunner.branchPicker.needRepo': 'Escolha um repositório primeiro…', + 'settings.skillsRunner.branchPicker.loading': 'Carregando ramificações…', + 'settings.skillsRunner.branchPicker.select': 'Selecione um ramo…', + 'settings.devWorkflow.githubRepository': 'Repositório GitHub', + 'settings.devWorkflow.loadingRepositories': 'Carregando repositórios...', + 'settings.devWorkflow.selectRepository': 'Selecione um repositório', + 'settings.devWorkflow.privateTag': '(privado)', + 'settings.devWorkflow.detectingForkInfo': 'Detectando informações de fork...', + 'settings.devWorkflow.forkDetected': 'Bifurcação detectada', + 'settings.devWorkflow.upstream': 'A montante:', + 'settings.devWorkflow.forkPrNote': 'PRs serão criados contra o repositório upstream.', + 'settings.devWorkflow.notForkNote': + 'Não é um fork. PRs serão submetidos diretamente a este repositório.', + 'settings.devWorkflow.targetBranch': 'Branch de Destino', + 'settings.devWorkflow.targetBranchNote': 'PRs serão criados contra este branch', + 'settings.devWorkflow.loadingBranches': 'Carregando ramificações...', + 'settings.devWorkflow.runFrequency': 'Frequência de execução', + 'settings.devWorkflow.runFrequencyNote': + 'Com que frequência o agente deve verificar problemas e abrir PRs.', + 'settings.devWorkflow.updateConfiguration': 'Atualizar Configuração', + 'settings.devWorkflow.saveConfiguration': 'Salvar Configuração', + 'settings.devWorkflow.remove': 'Remover', + 'settings.devWorkflow.saved': 'Salvo', + 'settings.devWorkflow.activeConfiguration': 'Configuração ativa', + 'settings.devWorkflow.activeConfigRepository': 'Repositório:', + 'settings.devWorkflow.activeConfigUpstream': 'A montante:', + 'settings.devWorkflow.activeConfigTargetBranch': 'Branch de destino:', + 'settings.devWorkflow.activeConfigSchedule': 'Cronograma:', + 'settings.devWorkflow.enabled': 'Ativado', + 'settings.devWorkflow.paused': 'Pausado', + 'settings.devWorkflow.nextRun': 'Próxima execução', + 'settings.devWorkflow.lastRun': 'Última execução', + 'settings.devWorkflow.runNow': 'Corra agora', + 'settings.devWorkflow.running': 'Executando…', + 'settings.devWorkflow.recentRuns': 'Corridas recentes', + 'settings.devWorkflow.cronSaveError': 'Falha ao salvar a configuração', + 'settings.devWorkflow.lastOutput': 'Última saída', + 'settings.devWorkflow.noOutput': 'Nenhuma saída capturada', + 'settings.devWorkflow.runningStatus': + 'O agente está em execução — selecionando um problema e trabalhando em uma correção...', + 'settings.devWorkflow.errorNotConnected': + 'GitHub não está conectado. Por favor, conecte o GitHub através de Configurações > Avançado > Composio primeiro.', + 'settings.devWorkflow.errorToolNotEnabled': + 'A ferramenta GITHUB_LIST_REPOSITORIES_FOR_THE_AUTHENTICATED_USER não está habilitada neste backend. Por favor, peça ao seu administrador para habilitá-la na integração Composio (backend#842).', + 'settings.devWorkflow.errorNotAuthenticated': 'Não autenticado. Por favor, faça login primeiro.', + 'settings.devWorkflow.errorNoRepositories': + 'Nenhum repositório encontrado para esta conta GitHub.', + 'settings.devWorkflow.schedule.every30min': 'A cada 30 minutos', + 'settings.devWorkflow.schedule.everyHour': 'A cada hora', + 'settings.devWorkflow.schedule.every2hours': 'A cada 2 horas', + 'settings.devWorkflow.schedule.every6hours': 'A cada 6 horas', + 'settings.devWorkflow.schedule.onceDaily': 'Uma vez ao dia (9h)', + 'settings.developerMenu.cronJobs.title': 'Tarefas cron', + 'settings.developerMenu.cronJobs.desc': + 'Veja e configure tarefas agendadas para habilidades em tempo de execução', + 'settings.developerMenu.localModelDebug.title': 'Depuração do modelo local', + 'settings.developerMenu.localModelDebug.desc': + 'Configuração do Ollama, downloads de recursos, testes de modelo e diagnósticos', + 'settings.developerMenu.webhooks.title': 'Webhooks', + 'settings.developerMenu.webhooks.desc': + 'Inspecione registros de webhooks em tempo de execução e logs de solicitações capturadas', + 'settings.developerMenu.eventLog.title': 'Registro de Eventos', + 'settings.developerMenu.eventLog.desc': + 'Transmissão ao vivo com cores codificadas de todos os eventos de agentes, ferramentas e sistemas', + 'settings.developerMenu.eventLog.allTypes': 'Todos os tipos', + 'settings.developerMenu.eventLog.filterAgent': 'Filtrar...', + 'settings.developerMenu.eventLog.download': 'Baixar', + 'settings.developerMenu.eventLog.events': 'eventos', + 'settings.developerMenu.eventLog.live': 'Ao vivo', + 'settings.developerMenu.eventLog.disconnected': 'Desconectado', + 'settings.developerMenu.eventLog.waiting': 'Aguardando eventos...', + 'settings.developerMenu.eventLog.notConnected': 'Não conectado ao núcleo', + 'settings.developerMenu.eventLog.jumpToLatest': 'Ir para o mais recente', + 'settings.developerMenu.eventLog.badge.tool': 'TOOL', + 'settings.developerMenu.eventLog.badge.agent': 'AGENT', + 'settings.developerMenu.eventLog.badge.info': 'INFO', + 'settings.developerMenu.eventLog.badge.mem': 'MEM', + 'settings.developerMenu.eventLog.badge.chan': 'CHAN', + 'settings.developerMenu.eventLog.badge.cron': 'CRON', + 'settings.developerMenu.eventLog.badge.hook': 'HOOK', + 'settings.developerMenu.eventLog.badge.warn': 'WARN', + 'settings.developerMenu.eventLog.badge.skill': 'SKILL', + 'settings.developerMenu.eventLog.badge.comp': 'COMP', + 'settings.developerMenu.eventLog.badge.mcp': 'MCP', + 'settings.developerMenu.intelligence.title': 'Inteligência', + 'settings.developerMenu.intelligence.desc': + 'Espaço de trabalho de memória, motor subconsciente, sonhos e configurações', + 'settings.developerMenu.notificationRouting.title': 'Roteamento de notificações', + 'settings.developerMenu.notificationRouting.desc': + 'Pontuação de importância por IA e escalonamento do orquestrador para alertas de integração', + 'settings.developerMenu.composeioTriggers.title': 'Gatilhos ComposeIO', + 'settings.developerMenu.composeioTriggers.desc': + 'Veja o histórico e o arquivo de gatilhos do ComposeIO', + 'settings.developerMenu.composioRouting.title': 'Roteamento Composio (modo direto)', + 'settings.developerMenu.composioRouting.desc': + 'Use sua própria chave de API da Composio e roteie chamadas diretamente para backend.composio.dev', + 'settings.developerMenu.integrationTriggers.title': 'Gatilhos de integração', + 'settings.developerMenu.integrationTriggers.desc': + 'Configure as opções de triagem por IA para gatilhos de integração Composio', + 'settings.developerMenu.mcpServer.title': 'MCP Servidor', + 'settings.developerMenu.mcpServer.desc': + 'Configurar clientes MCP externos para se conectarem a OpenHuman', + 'settings.developerMenu.autonomy.title': 'Autonomia do agente', + 'settings.developerMenu.autonomy.desc': + 'Limites de taxa de ações de ferramentas e limites de segurança', + 'settings.mcpServer.title': 'Servidor MCP', + 'settings.mcpServer.toolsSectionTitle': 'Ferramentas disponíveis', + 'settings.mcpServer.toolsSectionDesc': + 'Ferramentas expostas por meio do servidor MCP stdio ao executar openhuman-core mcp', + 'settings.mcpServer.configSectionTitle': 'Configuração do cliente', + 'settings.mcpServer.configSectionDesc': + 'Selecione seu cliente MCP para gerar o snippet de configuração correto', + 'settings.mcpServer.copySnippet': 'Copiar para a área de transferência', + 'settings.mcpServer.copied': 'Copiado!', + 'settings.mcpServer.openConfigFile': 'Abra o arquivo de configuração', + 'settings.mcpServer.binaryPathNotFound': + 'OpenHuman binário não encontrado. Se estiver executando a partir do código-fonte, crie com: cargo build --bin openhuman-core', + 'settings.mcpServer.openConfigError': 'Falha ao abrir o arquivo de configuração', + 'settings.mcpServer.clientClaudeDesktop': 'Área de trabalho Claude', + 'settings.mcpServer.clientCursor': 'Cursor', + 'settings.mcpServer.clientCodex': 'Códice', + 'settings.mcpServer.clientZed': 'Zed', + 'settings.mcpServer.configFilePath': 'Arquivo de configuração', + 'settings.mcpServer.clientSelectorAriaLabel': 'MCP seletor de cliente', + 'settings.appearance.menuDesc': 'Escolha claro, escuro ou o tema do sistema', + 'settings.agentAccess.title': 'Acesso ao sistema operacional do agente', + 'settings.agentAccess.menuDesc': + 'Controle onde o agente pode read/write e se ele pode usar o shell.', + 'settings.agentAccess.loadError': 'Falha ao carregar as configurações de acesso', + 'settings.agentAccess.saveError': 'Falha ao salvar as configurações de acesso', + 'settings.agentAccess.saved': 'Salvo — aplicado na sua próxima mensagem.', + 'settings.agentAccess.desktopOnly': + 'As configurações de acesso estão disponíveis apenas no aplicativo para computador.', + 'settings.agentAccess.loading': 'Carregando…', + 'settings.agentAccess.accessMode': 'Modo de acesso', + 'settings.agentAccess.tier.readonly.title': 'Somente leitura', + 'settings.agentAccess.tier.readonly.desc': + 'Lê arquivos e executa comandos apenas de leitura para explorar — mas nunca escreve, edita ou executa nada que altere o estado.', + 'settings.agentAccess.tier.supervised.title': 'Pergunte antes de editar', + 'settings.agentAccess.tier.supervised.desc': + 'Cria novos arquivos livremente, mas pede sua aprovação antes de editar um arquivo existente, executar um comando, acessar a rede ou instalar qualquer coisa.', + 'settings.agentAccess.tier.full.title': 'Acesso total', + 'settings.agentAccess.tier.full.desc': + 'Executa comandos com acesso total à sua conta de usuário — pode read/write em qualquer lugar permitido, exceto em credenciais e repositórios do sistema. Comandos destrutivos, acesso à rede e instalações ainda solicitam aprovação.', + 'settings.agentAccess.defaultTag': '(padrão)', + 'settings.agentAccess.fullWarning': + '⚠ O acesso total executa comandos com acesso completo à sua conta e não é isolado. Só o habilite quando você confiar no agente com esta máquina. Diretórios de credenciais e do sistema continuam bloqueados, e ações destrutivas, de rede e de instalação ainda solicitam aprovação.', + 'settings.agentAccess.confine.label': 'Confinar ao espaço de trabalho', + 'settings.agentAccess.confine.desc': + 'Restringir o agente ao diretório de trabalho (mais quaisquer pastas concedidas), qualquer que seja o modo de acesso selecionado. Quando desligado, ele pode acessar qualquer lugar que seu usuário possa — exceto os diretórios de credenciais e do sistema que sempre são bloqueados.', + 'settings.agentAccess.requireTaskPlanApproval.label': 'Exigir aprovação do plano de tarefas', + 'settings.agentAccess.requireTaskPlanApproval.desc': + 'Pausa antes que um agente designado execute um briefing de tarefa elaborado pelo agente.', + 'settings.agentAccess.grantedFolders': 'Pastas concedidas', + 'settings.agentAccess.alwaysAllow': 'Ferramentas sempre permitidas', + 'settings.agentAccess.alwaysAllowDesc': + 'As ferramentas que você marcou como "Sempre permitir" no chat funcionam sem perguntar. Remova uma para ser solicitado novamente.', + 'settings.agentAccess.alwaysAllowNone': 'Ainda sem ferramentas sempre permitidas.', + 'settings.agentAccess.grantedDesc': + 'Pastas que o agente pode ler e escrever, além do espaço de trabalho. Armazenamentos de credenciais (~/.ssh, ~/.gnupg, ~/.aws, chaveiros) e diretórios do sistema (/etc, /System, C:\\Windows,…) estão sempre bloqueados, mesmo dentro de uma pasta concedida.', + 'settings.agentAccess.noneGranted': 'Nenhuma pasta concedida.', + 'settings.agentAccess.readWrite': 'ler + escrever', + 'settings.agentAccess.readOnly': 'somente leitura', + 'settings.agentAccess.remove': 'Remover', + 'settings.agentAccess.pathPlaceholder': 'Caminho absoluto da pasta', + 'settings.agentAccess.accessLevelLabel': 'Nível de acesso', + 'settings.agentAccess.add': 'Adicionar', + 'settings.agentAccess.saving': 'Salvando…', + 'settings.agentAccess.changesApply': 'As alterações serão aplicadas na sua próxima mensagem.', + 'settings.appearance.title': 'Aparência', + 'settings.appearance.themeHeading': 'Tema', + 'settings.appearance.themeAria': 'Tema', + 'settings.appearance.modeLight': 'Claro', + 'settings.appearance.modeLightDesc': 'Superfícies brilhantes, texto escuro.', + 'settings.appearance.modeDark': 'Escuro', + 'settings.appearance.modeDarkDesc': + 'Superfícies escuras, mais agradáveis ​​aos olhos após o anoitecer.', + 'settings.appearance.modeSystem': 'Sistema de correspondência', + 'settings.appearance.modeSystemDesc': + 'Siga a configuração de aparência do seu sistema operacional.', + 'settings.appearance.helperText': + 'O modo escuro muda todo o aplicativo – bate-papo, configurações, painéis – para uma paleta escura. "Match system" segue a aparência do seu sistema operacional e atualiza ao vivo.', + 'settings.appearance.tabBarHeading': 'Barra inferior da guia', + 'settings.appearance.tabBarAlwaysShowLabels': 'Sempre mostrar rótulos', + 'settings.appearance.tabBarAlwaysShowLabelsDesc': + 'Quando desativado, os rótulos só aparecem ao passar o mouse ou para a guia ativa.', + 'settings.mascot.active': 'Ativo', + 'settings.mascot.characterDesc': 'Descrição do personagem', + 'settings.mascot.characterHeading': 'Título do personagem', + 'settings.mascot.customGifError': + 'Insira um caminho HTTPS .gif URL, loopback HTTP .gif URL, arquivo:// .gif URL ou .gif local.', + 'settings.mascot.customGifHeading': 'Avatar GIF personalizado', + 'settings.mascot.customGifLabel': 'Avatar GIF personalizado URL', + 'settings.mascot.customGifPlaceholder': 'https://example.com/avatar.gif', + 'settings.mascot.characterPreview': 'Visualização', + 'settings.mascot.characterStates': 'estados', + 'settings.mascot.characterVisemes': 'visemas', + 'settings.mascot.colorAria': 'OpenHuman cor', + 'settings.mascot.colorDesc': 'Descrição de cor', + 'settings.mascot.colorHeading': 'Título de cor', + 'settings.mascot.colorBlack': 'Preto', + 'settings.mascot.colorBurgundy': 'Borgonha', + 'settings.mascot.colorCustom': 'Personalizado', + 'settings.mascot.colorNavy': 'Marinho', + 'settings.mascot.primaryColor': 'Cor primária', + 'settings.mascot.secondaryColor': 'Cor secundária', + 'settings.mascot.colorYellow': 'Amarelo', + 'settings.mascot.libraryUnavailable': 'OpenHuman biblioteca indisponível', + 'settings.mascot.title': 'OpenHuman', + 'settings.mascot.loadingLibrary': 'Carregando biblioteca do OpenHuman…', + 'settings.mascot.loadDetailError': 'Não foi possível carregar o mascote.', + 'settings.mascot.loadLibraryError': 'Não foi possível carregar a biblioteca de mascotes.', + 'settings.mascot.localDefault': 'OpenHuman local (padrão)', + 'settings.mascot.menuTitle': 'Mascote', + 'settings.mascot.menuDesc': 'Escolha a cor do mascote usada em todo o app', + 'settings.mascot.noCharacters': 'Nenhum personagem do OpenHuman disponível ainda', + 'settings.mascot.noColorVariants': 'Sem variantes de cor', + 'settings.mascot.voice.current': 'atual', + 'settings.mascot.voice.customDesc': + 'Encontre IDs de voz em api.elevenlabs.io/v1/voices ou no seu painel da ElevenLabs. Apenas o ID é armazenado — sua chave de API permanece no backend.', + 'settings.mascot.voice.customHeading': 'ID de voz personalizado', + 'settings.mascot.voice.customOption': 'Outro (colar ID de voz)…', + 'settings.mascot.voice.customPlaceholder': 'por exemplo. 21m00Tcm4TlvDq8ikWAM', + 'settings.mascot.voice.desc': + 'Escolha a voz da ElevenLabs que o mascote usa para respostas faladas. Filtre por gênero, escolha na lista curada, cole um ID personalizado, ou deixe o app escolher uma voz que combine com o idioma da interface.', + 'settings.mascot.voice.genderFemale': 'Feminino', + 'settings.mascot.voice.genderHeading': 'Gênero da voz', + 'settings.mascot.voice.genderMale': 'Masculino', + 'settings.mascot.voice.heading': 'Voz', + 'settings.mascot.voice.preset': 'Predefinição de voz', + 'settings.mascot.voice.presetHeading': 'Predefinição de voz', + 'settings.mascot.voice.preview': 'Pré-visualização da voz', + 'settings.mascot.voice.previewError': 'Falha na pré-visualização da voz', + 'settings.mascot.voice.previewText': 'Oi, eu sou seu assistente. Esta é uma prévia de voz.', + 'settings.mascot.voice.previewing': 'Pré-visualizando…', + 'settings.mascot.voice.reset': 'Redefinir para o padrão', + 'settings.mascot.voice.useLocaleDefault': 'Corresponder ao idioma do app', + 'settings.mascot.voice.useLocaleDefaultDesc': + 'Escolher automaticamente uma voz para o idioma atual da interface.', + 'settings.persona.title': 'Persona', + 'settings.persona.menuTitle': 'Persona', + 'settings.persona.menuDesc': + 'Nome, personalidade, avatar e voz — seu assistente como uma só identidade', + 'settings.persona.identityHeading': 'Identidade', + 'settings.persona.identityDesc': + 'Um nome de exibição e uma breve descrição para o seu assistente. Mostrado no aplicativo; não altera a forma como o assistente raciocina.', + 'settings.persona.displayNameLabel': 'Nome de exibição', + 'settings.persona.displayNamePlaceholder': 'por exemplo Nova', + 'settings.persona.descriptionLabel': 'Descrição', + 'settings.persona.descriptionPlaceholder': + 'por exemplo, um assistente calmo e conciso para minha equipe.', + 'settings.persona.soul.heading': 'Personalidade (SOUL.md)', + 'settings.persona.soul.desc': + 'A personalidade que o assistente segue em cada conversa. As edições são salvas no seu espaço de trabalho e entram em vigor na próxima resposta.', + 'settings.persona.soul.editorLabel': 'Conteúdo do SOUL.md', + 'settings.persona.soul.reset': 'Redefinir para o padrão', + 'settings.persona.soul.usingDefault': 'Usando o padrão incluído', + 'settings.persona.soul.loadError': 'Não foi possível carregar SOUL.md', + 'settings.persona.soul.saveError': 'Não foi possível salvar SOUL.md', + 'settings.persona.soul.resetError': 'Não foi possível resetar SOUL.md', + 'settings.persona.appearanceHeading': 'Avatar e Voz', + 'settings.persona.appearanceDesc': + 'A cor do mascote, o avatar personalizado GIF e a voz de resposta são configurados nas configurações do mascote.', + 'settings.persona.openMascotSettings': 'Abrir configurações do Mascote', + 'settings.memoryWindow.balanced.badge': 'Recomendado', + 'settings.memoryWindow.balanced.hint': + 'Padrão sensato — boa continuidade sem queimar tokens extras em cada execução.', + 'settings.memoryWindow.balanced.label': 'Balanceado', + 'settings.memoryWindow.description': + 'Quanto contexto lembrado o OpenHuman injeta em cada nova execução do agente. Janelas maiores parecem mais cientes de conversas passadas, mas usam mais tokens — e custam mais — a cada execução.', + 'settings.memoryWindow.extended.badge': 'Mais contexto', + 'settings.memoryWindow.extended.hint': + 'Mais memória de longo prazo injetada em cada execução. Custo maior por turno.', + 'settings.memoryWindow.extended.label': 'Estendido', + 'settings.memoryWindow.maximum.badge': 'Maior custo', + 'settings.memoryWindow.maximum.hint': + 'A maior janela segura. Melhor continuidade, conta de tokens significativamente maior a cada execução.', + 'settings.memoryWindow.maximum.label': 'Máximo', + 'settings.memoryWindow.minimal.badge': 'Mais barato', + 'settings.memoryWindow.minimal.hint': + 'Menor janela de memória. Mais barato, mais rápido, menor continuidade entre execuções.', + 'settings.memoryWindow.minimal.label': 'Mínimo', + 'settings.memoryWindow.title': 'Janela de memória de longo prazo', + 'settings.modelHealth.title': 'Saúde do Modelo', + 'settings.modelHealth.desc': + 'Qualidade por modelo, taxa de alucinações e comparação de custos entre os modelos ativos', + 'settings.modelHealth.allStatuses': 'Todos os status', + 'settings.modelHealth.models': 'modelos', + 'settings.modelHealth.loading': 'Carregando dados do modelo...', + 'settings.modelHealth.empty': 'Nenhum modelo registrado', + 'settings.modelHealth.col.model': 'Modelo', + 'settings.modelHealth.col.quality': 'Qualidade', + 'settings.modelHealth.col.halluc': 'Taxa de alucinação', + 'settings.modelHealth.col.cost': 'Custo / 1M fora', + 'settings.modelHealth.col.agents': 'Agentes', + 'settings.modelHealth.col.status': 'Status', + 'settings.modelHealth.badge.keep': 'Manter', + 'settings.modelHealth.badge.replace': 'Substituir', + 'settings.modelHealth.badge.staging': 'Teste de encenação', + 'settings.modelHealth.badge.vision': 'Somente visão', + 'settings.modelHealth.swap': 'Trocar?', + 'settings.modelHealth.modal.title': 'Substituir modelo?', + 'settings.modelHealth.modal.hallucRate': 'Taxa de alucinação', + 'settings.modelHealth.modal.cancel': 'Cancelar', + 'settings.modelHealth.modal.apply': 'Aplicar Substituição', + 'settings.modelHealth.tag.cheaper': 'CHEAPER', + 'settings.modelHealth.tag.better': 'BETTER', + 'settings.screenIntel.permissions.accessibility': 'Acessibilidade', + 'settings.screenIntel.permissions.grantHint': 'Dica de concessão', + 'settings.screenIntel.permissions.inputMonitoring': 'Monitoramento de Entrada', + 'settings.screenIntel.permissions.macosAppliesPrivacy': 'macOS aplica privacidade', + 'settings.screenIntel.permissions.openInputMonitoring': 'Solicitando…', + 'settings.screenIntel.permissions.refreshStatus': 'Atualizando…', + 'settings.screenIntel.permissions.refreshing': 'Atualizando…', + 'settings.screenIntel.permissions.requestAccessibility': 'Solicitando…', + 'settings.screenIntel.permissions.requestScreenRecording': 'Solicitando…', + 'settings.screenIntel.permissions.requesting': 'Solicitando…', + 'settings.screenIntel.permissions.restartRefresh': 'Reiniciando o core…', + 'settings.screenIntel.permissions.restartingCore': 'Reiniciando o core…', + 'settings.screenIntel.permissions.screenRecording': 'Gravação de Tela', + 'settings.screenIntel.permissions.title': 'Permissões', + 'skills.card.moreActions': 'Mais ações', + 'skills.channelIcon.discord': 'Discord', + 'skills.channelIcon.imessage': 'iMessage', + 'skills.channelIcon.telegram': 'Telegram', + 'skills.channelIcon.web': 'Web', + 'skills.channelIcon.yuanbao': 'Yuanbao', + 'skills.composio.poweredBy': 'Desenvolvido por Composio', + 'skills.composio.staleStatusTitle': 'As conexões estão mostrando status obsoleto', + 'skills.create.allowedTools': 'Ferramentas permitidas', + 'skills.create.allowedToolsHelp': 'Renderizado no frontmatter SKILL.md como', + 'skills.create.allowedToolsPlaceholder': 'node_exec, fetch', + 'skills.create.author': 'Autor', + 'skills.create.authorPlaceholder': 'Seu nome', + 'skills.create.commaSeparated': '(separado por vírgulas)', + 'skills.create.createBtn': 'Criar skill', + 'skills.create.createError': 'Não foi possível criar habilidade', + 'skills.create.creating': 'Criando…', + 'skills.create.description': 'Descrição', + 'skills.create.descriptionPlaceholder': 'O que essa habilidade faz?', + 'skills.create.optional': '(opcional)', + 'skills.create.inputs.heading': 'Inputs', + 'skills.create.inputs.help': + 'Declare os parâmetros que a skill precisa. O Skills Runner renderizará um formulário para estes em tempo de execução.', + 'skills.create.inputs.add': 'Adicionar entrada', + 'skills.create.inputs.row.name': 'Nome da entrada', + 'skills.create.inputs.row.namePlaceholder': 'ex.: repo', + 'skills.create.inputs.row.nameError': + 'Apenas letras, dígitos, sublinhados e hifens; deve começar com uma letra.', + 'skills.create.inputs.row.description': 'Descrição da entrada', + 'skills.create.inputs.row.descriptionPlaceholder': 'O que vai neste campo?', + 'skills.create.inputs.row.type': 'Type', + 'skills.create.inputs.row.required': 'Required', + 'skills.create.inputs.row.remove': 'Remover entrada', + 'skills.create.inputs.type.string': 'Text', + 'skills.create.inputs.type.integer': 'Number', + 'skills.create.inputs.type.boolean': 'Sim / Não', + 'skills.create.license': 'Licença', + 'skills.create.licensePlaceholder': 'MIT', + 'skills.create.name': 'Nome', + 'skills.create.namePlaceholder': 'ex.: Trade Journal', + 'skills.create.scope': 'Escopo', + 'skills.create.scopeProjectHint': '/.openhuman/skills/', + 'skills.create.scopeUserHint': + 'Escrito em ~/.openhuman/skills//SKILL.md — disponível em todos os espaços de trabalho.', + 'skills.create.slugLabel': 'Rótulo do slug', + 'skills.create.subtitle': 'SKILL.md', + 'skills.create.tags': 'Tags', + 'skills.create.tagsPlaceholder': 'negociação, pesquisa', + 'skills.create.title': 'Nova skill', + 'skills.detail.allowedTools': 'Ferramentas permitidas', + 'skills.detail.author': 'Autor', + 'skills.detail.bundledResources': 'Recursos incluídos', + 'skills.detail.closeAriaLabel': 'Fechar detalhes da habilidade', + 'skills.detail.location': 'Localização', + 'skills.detail.noBundledResources': 'Sem recursos incluídos.', + 'skills.detail.tags': 'Tags', + 'skills.detail.warnings': 'Avisos', + 'skills.install.errors.alreadyInstalledHint': + 'Uma habilidade com este slug já existe no espaço de trabalho. Remova-o primeiro ou altere o frontmatter `metadata.id` / `name`.', + 'skills.install.errors.alreadyInstalledTitle': 'Habilidade já instalada', + 'skills.install.errors.fetchFailedHint': + 'A solicitação não foi concluída com êxito. Verifique os pontos URL em um arquivo público acessível e se o host retornou uma resposta 2xx.', + 'skills.install.errors.fetchFailedTitle': 'Falha na busca', + 'skills.install.errors.fetchTimedOutHint': + 'O host remoto não respondeu a tempo. Tente novamente ou aumente o tempo limite (1-600 s).', + 'skills.install.errors.fetchTimedOutTitle': 'Tempo limite de busca esgotado', + 'skills.install.errors.fetchTooLargeHint': + 'O SKILL.md deve ter menos de 1 MiB. Divida os recursos agrupados em arquivos `references/` ou `scripts/` em vez de inlinhá-los.', + 'skills.install.errors.fetchTooLargeTitle': 'SKILL.md muito grande', + 'skills.install.errors.genericHint': + 'O back-end retornou um erro. A mensagem bruta é mostrada abaixo.', + 'skills.install.errors.genericTitle': 'Não foi possível instalar a habilidade', + 'skills.install.errors.invalidSkillHint': + 'O frontmatter deve ser YAML válido com campos `name` e `description` não vazios, terminados por `---`.', + 'skills.install.errors.invalidSkillTitle': 'SKILL.md não analisou', + 'skills.install.errors.invalidUrlHint': + 'Somente HTTPS URLs públicos são permitidos. Hosts privados, de loopback e de metadados são bloqueados.', + 'skills.install.errors.invalidUrlTitle': 'URL rejeitado', + 'skills.install.errors.unsupportedUrlHint': + 'Somente links diretos `.md` funcionam. Para GitHub, link para um arquivo (github.com/owner/repo/blob/.../SKILL.md) - as raízes da árvore e do repositório não estão instaladas.', + 'skills.install.errors.unsupportedUrlTitle': 'Formulário URL não suportado', + 'skills.install.errors.writeFailedHint': + 'O diretório de habilidades do espaço de trabalho não era gravável. Verifique as permissões do sistema de arquivos para `/.openhuman/skills/`.', + 'skills.install.errors.writeFailedTitle': 'Não foi possível gravar SKILL.md', + 'skills.install.fetchLog': 'Buscar log', + 'skills.install.fetchingPrefix': 'Buscando', + 'skills.install.fetchingSuffix': 'isso pode levar até o tempo limite que você configurou.', + 'skills.install.installBtn': 'Instalando…', + 'skills.install.installComplete': 'Instalação concluída', + 'skills.install.installing': 'Instalando…', + 'skills.install.parseWarnings': 'Avisos de análise', + 'skills.install.rawError': 'Erro bruto', + 'skills.install.subtitleMiddle': 'sobre HTTPS e instala-o em', + 'skills.install.subtitlePrefix': 'Busca apenas um único', + 'skills.install.subtitleSuffix': 'HTTPS; hosts privados e de loopback são bloqueados.', + 'skills.install.successDiscovered': 'Descobertas {count} novas habilidades.', + 'skills.install.successNoNewIds': + 'Habilidade instalada, mas nenhum novo ID de habilidade apareceu - o catálogo pode já conter uma habilidade com o mesmo slug.', + 'skills.install.timeoutHint': '(segundos, opcional)', + 'skills.install.timeoutHelp': + 'O padrão é 60 segundos. Valores fora de 1-600 são fixados no lado do servidor.', + 'skills.install.timeoutInvalid': 'Deve ser um número inteiro entre 1 e 600.', + 'skills.install.timeoutLabel': 'Rótulo de timeout', + 'skills.install.timeoutPlaceholder': '60', + 'skills.install.title': 'Instalar skill a partir de URL', + 'skills.install.urlHelpMiddle': 'arquivo.', + 'skills.install.urlHelpPrefix': 'Link direto para uma reescrita automática de', + 'skills.install.urlHelpSuffix': 'URLs para', + 'skills.install.urlInvalidPrefix': 'URL deve ser um link', + 'skills.install.urlInvalidSuffix': 'bem formado.', + 'skills.install.urlLabel': 'URL da skill', + 'skills.install.urlPlaceholder': 'https://raw.githubusercontent.com/owner/repo/main/SKILL.md', + 'skills.meetingBots.bannerDesc': 'Descrição do banner', + 'skills.meetingBots.bannerTitle': 'Título do banner', + 'skills.meetingBots.busyTitle': 'OpenHuman está ocupado', + 'skills.meetingBots.comingSoon': 'Em breve', + 'skills.meetingBots.couldNotStartTitle': 'Não foi possível iniciar o OpenHuman', + 'skills.meetingBots.displayName': 'Nome de exibição', + 'skills.meetingBots.failedToStart': 'Falha ao iniciar o OpenHuman.', + 'skills.meetingBots.joiningMessage': 'Ele deve aparecer como participante em alguns segundos.', + 'skills.meetingBots.joiningTitle': 'OpenHuman está entrando na reunião', + 'skills.meetingBots.meetingLink': 'Link da reunião', + 'skills.meetingBots.modalAriaLabel': 'Enviar OpenHuman para uma reunião', + 'skills.meetingBots.modalDesc': 'Descrição do modal', + 'skills.meetingBots.modalTitle': 'Enviar OpenHuman para uma reunião', + 'skills.meetingBots.newBadge': 'Badge novo', + 'skills.meetingBots.platformComingSoon': 'O suporte {label} estará disponível em breve.', + 'skills.meetingBots.platformHints.gmeet': 'meet.google.com/abc-defg-hij', + 'skills.meetingBots.platformHints.teams': 'times.microsoft.com/...', + 'skills.meetingBots.platformHints.zoom': 'zoom.us/j/...', + 'skills.meetingBots.platforms.gmeet': 'Google Conheça', + 'skills.meetingBots.platforms.teams': 'Microsoft Teams', + 'skills.meetingBots.platforms.zoom': 'Zoom', + 'skills.meetingBots.sendTo': 'Enviar para', + 'skills.meetingBots.soonSuffix': 'em breve', + 'skills.meetingBots.starting': 'Iniciando…', + 'skills.resource.preview.closeAriaLabel': 'Fechar visualização', + 'skills.resource.preview.failed': 'Falha na pré-visualização', + 'skills.resource.preview.loading': 'Carregando visualização…', + 'skills.resource.tree.empty': 'Sem recursos incluídos.', + 'skills.search.placeholder': 'Espaço reservado', + 'skills.setup.autocomplete.acceptKey': 'Tecla de aceitar', + 'skills.setup.autocomplete.activeDesc': 'Descrição ativo', + 'skills.setup.autocomplete.activeTitle': 'Auto-Complete está Ativo', + 'skills.setup.autocomplete.customizeSettings': 'Personalizar configurações', + 'skills.setup.autocomplete.debounce': 'Debounce', + 'skills.setup.autocomplete.description': 'Descrição', + 'skills.setup.autocomplete.enableBtn': 'Ativando...', + 'skills.setup.autocomplete.enableError': 'Falha ao ativar autocompletar', + 'skills.setup.autocomplete.enabling': 'Ativando...', + 'skills.setup.autocomplete.notSupported': 'Não suportado', + 'skills.setup.autocomplete.stepEnable': 'Ativar conclusões inline', + 'skills.setup.autocomplete.stepSuccess': 'Pronto para usar', + 'skills.setup.autocomplete.stylePreset': 'Predefinição de estilo', + 'skills.setup.autocomplete.stylePresetValue': 'Equilibrado (configurável depois)', + 'skills.setup.autocomplete.title': 'Auto-Complete de Texto', + 'skills.setup.screenIntel.activeDesc': 'Descrição ativo', + 'skills.setup.screenIntel.activeTitle': 'Inteligência de Tela está Ativada', + 'skills.setup.screenIntel.advancedSettings': 'Configurações avançadas', + 'skills.setup.screenIntel.allGranted': 'Todas as permissões concedidas', + 'skills.setup.screenIntel.captureMode': 'Modo de captura', + 'skills.setup.screenIntel.captureModeValue': 'Todas as janelas (configurável depois)', + 'skills.setup.screenIntel.deniedHint': + 'Após conceder permissões nas Configurações do Sistema, clique abaixo para reiniciar e aplicar as alterações.', + 'skills.setup.screenIntel.enableBtn': 'Ativando...', + 'skills.setup.screenIntel.enableDesc': 's na sua tela e alimentar contexto útil no seu agente', + 'skills.setup.screenIntel.enableError': 'Falha ao ativar Inteligência de Tela', + 'skills.setup.screenIntel.enabling': 'Ativando...', + 'skills.setup.screenIntel.grant': 'Abrindo...', + 'skills.setup.screenIntel.granted': 'Concedido', + 'skills.setup.screenIntel.macosOnly': 'Apenas macOS', + 'skills.setup.screenIntel.opening': 'Abrindo...', + 'skills.setup.screenIntel.panicHotkey': 'Tecla de pânico', + 'skills.setup.screenIntel.permAccessibility': 'Acessibilidade', + 'skills.setup.screenIntel.permInputMonitoring': 'Monitoramento de Entrada', + 'skills.setup.screenIntel.permScreenRecording': 'Gravação de Tela', + 'skills.setup.screenIntel.permissionsDesc': 'Descrição de permissões', + 'skills.setup.screenIntel.permissionPathLabel': 'macOS aplica privacidade a:', + 'skills.setup.screenIntel.refreshStatus': 'Atualizar status', + 'skills.setup.screenIntel.restartRefresh': 'Reiniciando...', + 'skills.setup.screenIntel.restarting': 'Reiniciando...', + 'skills.setup.screenIntel.stepEnable': 'Ativar a habilidade', + 'skills.setup.screenIntel.stepPermissions': 'Conceder permissões', + 'skills.setup.screenIntel.stepSuccess': 'Pronto para usar', + 'skills.setup.screenIntel.title': 'Inteligência de Tela', + 'skills.setup.screenIntel.visionModel': 'Modelo de visão', + 'skills.setup.voice.activation': 'Ativação', + 'skills.setup.voice.activeDescPrefix': 'Fn', + 'skills.setup.voice.activeDescSuffix': 'Fn', + 'skills.setup.voice.activeTitle': 'Inteligência de Voz está Ativa', + 'skills.setup.voice.customizeSettings': 'Personalizar configurações', + 'skills.setup.voice.downloadSttBtn': 'Botão de download STT', + 'skills.setup.voice.enableDesc': 'Descrição de ativação', + 'skills.setup.voice.hotkey': 'Tecla de atalho', + 'skills.setup.voice.startBtn': 'Iniciando...', + 'skills.setup.voice.startError': 'Falha ao iniciar servidor de voz', + 'skills.setup.voice.starting': 'Iniciando...', + 'skills.setup.voice.stepEnable': 'Iniciar servidor de voz', + 'skills.setup.voice.stepSetup': 'Download de modelo necessário', + 'skills.setup.voice.stepSuccess': 'Pronto para usar', + 'skills.setup.voice.sttNotReady': 'Modelo de fala para texto não está pronto', + 'skills.setup.voice.sttNotReadyDesc': + 'A Inteligência de Voz requer um modelo Whisper local para transcrição. Baixe-o nas configurações de Modelo Local.', + 'skills.setup.voice.sttReady': 'Modelo de fala para texto pronto', + 'skills.setup.voice.sttReturnHint': 'Dica de retorno STT', + 'skills.setup.voice.title': 'Inteligência de Voz', + 'skills.uninstall.couldNotUninstall': 'Não foi possível desinstalar', + 'skills.uninstall.description': + 'Isso exclui permanentemente o diretório da skill e todos os recursos empacotados. O agente deixará de vê-la no próximo turno.', + 'skills.uninstall.title': 'Desinstalar', + 'skills.uninstall.uninstallBtn': 'Desinstalar', + 'skills.uninstall.uninstalling': 'Desinstalando…', + 'upsell.global.limitMessage': 'Faça upgrade do seu plano ou adicione créditos para continuar', + 'upsell.global.limitTitle': 'Você', + 'upsell.global.nearLimitMessage': + 'Você usou {pct}% do seu limite de uso. Faça upgrade para limites mais altos.', + 'upsell.global.nearLimitTitle': 'Aproximando-se do limite de uso', + 'upsell.usageLimit.bodyBudget': + 'Você atingiu seu limite semanal.{reset} Atualize seu plano ou recarregue créditos para evitar limites.', + 'upsell.usageLimit.bodyRate': + 'Você atingiu seu limite de taxa de inferência de 10 horas.{reset} Atualize para limites maiores.', + 'upsell.usageLimit.heading': 'Limite de Uso Atingido', + 'upsell.usageLimit.notNow': 'Agora não', + 'upsell.usageLimit.perWindow': '{amount}', + 'upsell.usageLimit.planIncludes': '{plan}', + 'upsell.usageLimit.resetsIn': 'Será redefinido {time}.', + 'upsell.usageLimit.upgradePlan': 'Fazer upgrade do plano', + 'upsell.usageLimit.weeklyInference': '{amount}', + 'walkthrough.tooltip.letsGo': 'Vamos lá!', + 'walkthrough.tooltip.next': 'Próximo →', + 'walkthrough.tooltip.skip': 'Pular tour', + 'walkthrough.tooltip.stepCounter': '{n} de {total}', + 'webhooks.activity.empty': 'Vazio', + 'webhooks.activity.title': 'Atividade Recente', + 'webhooks.composioHistory.empty': 'Vazio', + 'webhooks.composioHistory.metadataId': 'ID de Metadados', + 'webhooks.composioHistory.metadataUuid': 'UUID de Metadados', + 'webhooks.composioHistory.payload': 'Carga útil', + 'webhooks.composioHistory.title': 'Histórico de Gatilhos ComposeIO', + 'webhooks.tunnels.active': 'Ativo', + 'webhooks.tunnels.createFailed': 'Falha ao criar tunnel', + 'webhooks.tunnels.creating': 'Criando...', + 'webhooks.tunnels.deleteFailed': 'Falha ao excluir tunnel', + 'webhooks.tunnels.descriptionPlaceholder': 'Descrição (opcional)', + 'webhooks.tunnels.echo': 'Echo', + 'webhooks.tunnels.empty': 'Vazio', + 'webhooks.tunnels.enableEcho': 'Ativar Echo', + 'webhooks.tunnels.inactive': 'Inativo', + 'webhooks.tunnels.namePlaceholder': 'Nome do tunnel (ex.: telegram-bot)', + 'webhooks.tunnels.newTunnel': 'Novo tunnel', + 'webhooks.tunnels.removeEcho': 'Remover Echo', + 'webhooks.tunnels.title': 'Tunnels de Webhook', + 'webhooks.tunnels.toggleFailed': 'Falha ao alternar echo', + 'composio.directModeRequiresKey': + 'Falha ao salvar. O modo Direto requer uma chave de API não vazia.', + 'composio.integrationSlugsHelp': 'Slugs de integração separados por vírgula, por exemplo.', + 'composio.integrationSlugsExample': 'Gmail, folga', + 'composio.integrationSlugsCaseInsensitive': 'Não diferencia maiúsculas de minúsculas.', + 'composio.integrationSlugsPlaceholder': 'gmail, slack, ...', + 'composio.notYetRouted': 'ainda não roteado', + 'composio.triggers.loading': 'Carregando…', + 'conversations.taskKanban.todo': 'A fazer', + 'chat.addReaction': 'Adicionar reação', + 'chat.agentProfile.create': 'Criar perfil de agente', + 'chat.agentProfile.createFailed': 'Não foi possível criar perfil de agente.', + 'chat.agentProfile.customDescription': 'Perfil de agente personalizado', + 'chat.agentProfile.defaultAgentLabel': 'Orquestrador', + 'chat.agentProfile.exists': 'O perfil de agente "{name}" já existe.', + 'chat.agentProfile.label': 'Perfil do agente', + 'chat.agentProfile.namePlaceholder': 'Nome do perfil', + 'chat.agentProfile.promptStylePlaceholder': 'Estilo de prompt', + 'chat.agentProfile.allowedToolsPlaceholder': 'Ferramentas permitidas', + 'chat.backToThread': 'voltar para {title}', + 'chat.parentThread': 'thread pai', + 'chat.removeReaction': 'Remover {emoji}', + 'settings.composio.loading': 'Carregando…', + 'settings.mascot.noCharactersAvailable': 'Nenhum personagem do OpenHuman disponível ainda', + 'skills.uninstall.confirmTitle': 'Desinstalar {name}?', + 'conversations.taskKanban.blocked': 'Bloqueado', + 'conversations.taskKanban.done': 'Concluído', + 'conversations.taskKanban.pending': 'Pendente', + 'conversations.taskKanban.working': 'Trabalhando', + 'conversations.taskKanban.awaitingApproval': 'Aguardando aprovação', + 'conversations.taskKanban.ready': 'Pronto', + 'conversations.taskKanban.rejected': 'Rejeitado', + 'conversations.taskKanban.inProgress': 'Em andamento', + 'intelligence.memoryChunk.detail.copiedHint': 'copiado', + 'settings.composio.notYetRouted': 'ainda não roteado', + 'settings.localModel.download.manageExternal': 'Gerencie este modelo no seu runtime externo.', + 'settings.localModel.status.manageOllamaExternal': + 'Gerencie o processo do Ollama e o download de modelos fora do OpenHuman e, em seguida, execute o diagnóstico novamente.', + 'settings.localModel.status.ollamaDocs': 'Documentação do Ollama', + 'settings.localModel.status.thenRetry': + 'para instruções de configuração, em seguida tente novamente depois que seu runtime estiver acessível.', + 'devOptions.menuAi': 'Configuração de IA', + 'devOptions.menuAiDesc': + 'Provedores de nuvem, modelos Ollama locais e roteamento por carga de trabalho', + 'devOptions.menuScreenAware': 'Reconhecimento de tela', + 'devOptions.menuScreenAwareDesc': + 'Permissões de captura de tela, política de monitoramento e controles de sessão', + 'devOptions.menuMessaging': 'Canais de mensagens', + 'devOptions.menuMessagingDesc': + 'Configurar modos de autenticação Telegram/Discord e roteamento de canal padrão', + 'devOptions.menuTools': 'Ferramentas', + 'devOptions.menuToolsDesc': + 'Habilitar ou desabilitar recursos que OpenHuman pode usar em seu nome', + 'devOptions.menuAgentChat': 'Bate-papo do agente', + 'devOptions.menuAgentChatDesc': + 'Testar conversação do agente com substituições de modelo e temperatura', + 'devOptions.menuCronJobs': 'Tarefas Cron', + 'devOptions.menuCronJobsDesc': + 'Visualizar e configurar trabalhos agendados para habilidades de tempo de execução', + 'devOptions.menuLocalModelDebug': 'Depuração de modelo local', + 'devOptions.menuLocalModelDebugDesc': + 'Configuração de Ollama, downloads de ativos, testes de modelo e diagnósticos', + 'devOptions.menuWebhooksDebug': 'Webhooks', + 'devOptions.menuWebhooksDebugDesc': + 'Inspecione registros de webhook em tempo de execução e logs de solicitação capturados', + 'devOptions.menuIntelligence': 'Inteligência', + 'devOptions.menuIntelligenceDesc': + 'Espaço de trabalho de memória, mecanismo subconsciente, sonhos e configurações', + 'devOptions.menuNotificationRouting': 'Roteamento de notificação', + 'devOptions.menuNotificationRoutingDesc': + 'AI pontuação de importância e escalonamento do orquestrador para alertas de integração', + 'devOptions.menuComposeIOTriggers': 'Acionadores do ComposeIO', + 'devOptions.menuComposeIOTriggersDesc': + 'Visualizar histórico e arquivo do acionador do ComposeIO', + 'devOptions.menuComposioRouting': 'Composio Roteamento (modo direto)', + 'devOptions.menuComposioRoutingDesc': + 'Traga sua própria chave Composio API e encaminhar chamadas diretamente para backend.composio.dev', + 'devOptions.menuComposioTriggers': 'Gatilhos de integração', + 'devOptions.menuComposioTriggersDesc': + 'Definir configurações de triagem de IA para gatilhos de integração Composio', + 'memory.sourceFilterAria': 'Filtrar por origem', + 'calls.comingSoonDescription': 'Chamadas assistidas por IA chegam em breve. Fique ligado.', + 'vault.title': 'Cofres de conhecimento', + 'vault.description': + 'Aponte para uma pasta local; os arquivos são fragmentados e espelhados na memória.', + 'vault.add': 'Adicionar cofre', + 'vault.added': 'Cofre adicionado', + 'vault.createdMessage': 'Criado "{name}". Clique em {sync} para ingerir.', + 'vault.couldNotAdd': 'Não foi possível adicionar o cofre', + 'vault.syncFailed': 'Falha na sincronização', + 'vault.syncFailedFor': 'Falha na sincronização para "{name}"', + 'vault.syncFailedFiles': 'Falha em {count} arquivo(s)', + 'vault.syncedTitle': 'Sincronizado "{name}"', + 'vault.syncSummary': 'Ingerido {ingested}, inalterado {unchanged}, removido {removed}', + 'vault.syncSummaryFailed': ', falhou {count}', + 'vault.syncSummarySkipped': ', ignorado {count}', + 'vault.syncSummaryDuration': '· {seconds}s', + 'vault.confirmRemovePurge': + 'Remover vault "{name}"?\n\nClique em OK para também purgar sua memória (excluir todos os {count} documento(s) ingerido(s)).\nClique em Cancelar para manter os documentos na memória.', + 'vault.confirmRemove': 'Realmente remover o cofre "{name}"?', + 'vault.removed': 'Vault removido', + 'vault.removedPurgedMessage': 'Removido "{name}" e limpou sua memória.', + 'vault.removedKeptMessage': 'Removido "{name}". Documentos guardados na memória.', + 'vault.couldNotRemove': 'Não foi possível remover o cofre', + 'vault.name': 'Nome', + 'vault.namePlaceholder': 'Minhas notas de pesquisa', + 'vault.folderPath': 'Caminho da pasta (absoluto)', + 'vault.folderPathPlaceholder': '/Users/you/Documents/notes', + 'vault.excludes': 'Exclui (substrings separadas por vírgula, opcional)', + 'vault.excludesPlaceholder': 'rascunhos/, .secret', + 'vault.creating': 'Criando…', + 'vault.create': 'Criar cofre', + 'vault.loading': 'Carregando cofres…', + 'vault.failedToLoad': 'Falha ao carregar cofres: {error}', + 'vault.empty': 'Ainda não há cofres. Adicione um acima para começar a assimilar uma pasta.', + 'vault.fileCount': '{count} arquivo(s)', + 'vault.syncedRelative': 'sincronizado {time}', + 'vault.neverSynced': 'nunca sincronizado', + 'vault.syncingProgress': 'Sincronizando… {ingested}/{total}', + 'vault.removing': 'Removendo…', + 'vault.relative.sec': '{count}s atrás', + 'vault.relative.min': '{count}m atrás', + 'vault.relative.hr': '{count}h atrás', + 'vault.relative.day': '{count}d atrás', + 'whatsapp.title': 'WhatsApp', + 'subconscious.interval.fiveMinutes': '5 minutos', + 'subconscious.interval.tenMinutes': '10 minutos', + 'subconscious.interval.fifteenMinutes': '15 minutos', + 'subconscious.interval.thirtyMinutes': '30 minutos', + 'subconscious.interval.oneHour': '1 hora', + 'subconscious.interval.sixHours': '6 horas', + 'subconscious.interval.twelveHours': '12 horas', + 'subconscious.interval.oneDay': '1 dia', + 'subconscious.priority.critical': 'crítico', + 'subconscious.priority.important': 'importante', + 'subconscious.priority.normal': 'normal', + 'subconscious.durationSeconds': '{seconds}s', + 'subconscious.durationMilliseconds': '{milliseconds}ms', + 'settings.appearance': 'Aparência', + 'settings.appearanceDesc': 'Escolha claro, escuro ou combine com o tema do seu sistema', + 'settings.mascot': 'Mascote', + 'settings.mascotDesc': 'Escolha a cor do mascote usada no aplicativo', + 'pages.settings.account.walletBalances': 'Saldos da Carteira', + 'pages.settings.account.walletBalancesDesc': 'Visualize saldos multi-chain da sua carteira local', + 'walletBalances.title': 'Saldos da Carteira', + 'walletBalances.refresh': 'Refresh', + 'walletBalances.loading': 'Carregando saldos…', + 'walletBalances.retry': 'Retry', + 'walletBalances.emptyState': + 'Nenhuma conta na carteira ainda — configure uma carteira em Frase de Recuperação.', + 'walletBalances.copyAddress': 'Copiar endereço', + 'walletBalances.providerMissing': 'provedor indisponível', + 'walletBalances.rawBalance': 'Bruto: {raw}', + 'walletBalances.errorGeneric': + 'Não foi possível carregar os saldos da carteira. Configure sua carteira em Frase de Recuperação e tente novamente.', + 'settings.taskSources.title': 'Fontes da Tarefa', + 'settings.taskSources.subtitle': + 'Puxe tarefas de suas ferramentas para o quadro de tarefas do agente', + 'settings.taskSources.description': + 'Coletar itens de trabalho do GitHub, Notion, Linear e ClickUp, enriquecê-los e encaminhá-los para o quadro de tarefas do agente.', + 'settings.taskSources.connectHint': + 'As fontes de tarefas usam suas contas conectadas. Conecte-as primeiro em Integrações.', + 'settings.taskSources.disabledBanner': + 'As fontes de tarefas estão desativadas nas configurações. Ative-as para realizar a verificação automaticamente.', + 'settings.taskSources.loadError': 'Falha ao carregar fontes da tarefa', + 'settings.taskSources.addTitle': 'Adicionar uma fonte de tarefa', + 'settings.taskSources.provider': 'Fornecedor', + 'settings.taskSources.name': 'Nome (opcional)', + 'settings.taskSources.namePlaceholder': 'por exemplo, minhas questões abertas', + 'settings.taskSources.github.repo': 'Repositório (proprietário/nome, opcional)', + 'settings.taskSources.github.labels': 'Etiquetas (separadas por vírgula)', + 'settings.taskSources.notion.database': 'ID do banco de dados (quadro)', + 'settings.taskSources.linear.team': 'ID da equipe (opcional)', + 'settings.taskSources.clickup.team': 'ID do espaço de trabalho (equipe) (opcional)', + 'settings.taskSources.assignedToMe': 'Apenas itens atribuídos a mim', + 'settings.taskSources.add': 'Adicionar fonte', + 'settings.taskSources.adding': 'Adicionando…', + 'settings.taskSources.preview': 'Visualizar', + 'settings.taskSources.previewResult': 'A tarefa(s) {count} corresponde(m) a este filtro', + 'settings.taskSources.fetchNow': 'Buscar agora', + 'settings.taskSources.fetching': 'Buscando…', + 'settings.taskSources.fetchResult': 'Roteado {routed} de {fetched} tarefa(s)', + 'settings.taskSources.configured': 'Fontes configuradas', + 'settings.taskSources.empty': 'Nenhuma fonte de tarefa configurada ainda.', + 'settings.taskSources.proactive': 'Proativo', + 'settings.taskSources.lastFetch': 'Última busca', + 'settings.taskSources.never': 'Nunca', + 'settings.taskSources.statusEnabled': 'Ativado', + 'settings.taskSources.statusDisabled': 'Desativado', + 'settings.taskSources.enable': 'Ativar', + 'settings.taskSources.disable': 'Desativar', + 'settings.taskSources.remove': 'Remover', + 'settings.taskSources.removeConfirm': + 'Remover esta fonte de tarefa? Todo o histórico de tarefas ingerido será excluído e não pode ser desfeito.', + 'settings.taskSources.refresh': 'Atualizar', + 'settings.taskSources.providers.github': 'GitHub', + 'settings.taskSources.providers.notion': 'Noção', + 'settings.taskSources.providers.linear': 'Linear', + 'settings.taskSources.providers.clickup': 'ClickUp', + 'skills.dashboard.title': 'Skills', + 'skills.dashboard.scheduledHeading': 'Skills agendadas', + 'skills.dashboard.emptyTitle': 'Nenhuma skill agendada', + 'skills.dashboard.emptyBody': + 'Execute uma skill disponível uma vez ou salve um agendamento recorrente para vê-la aqui.', + 'skills.dashboard.create': 'Criar uma Skill', + 'skills.dashboard.run': 'Executar uma Skill', + 'skills.dashboard.enable': 'Ativar skill agendada', + 'skills.dashboard.disable': 'Desativar skill agendada', + 'skills.dashboard.lastRun': 'Última execução', + 'skills.dashboard.nextRun': 'Próxima execução', + 'skills.dashboard.cardOpenRunner': 'Abrir no runner', + 'skills.dashboard.loadError': 'Falha ao carregar skills agendadas', + 'skills.new.title': 'Criar uma skill', + 'skills.new.placeholderBody': + 'O formulário de criação chegará em breve. Por enquanto, use o botão "Nova skill" na página do runner.', + 'settings.agents.title': 'Agentes', + 'settings.agents.subtitle': + 'Gerencie os agentes disponíveis para delegação — padrões integrados e seus próprios agentes personalizados.', + 'settings.agents.menuDesc': 'Gerenciar agentes incorporados e personalizados', + 'settings.agents.newAgent': 'Novo agente', + 'settings.agents.loadError': 'Não foi possível carregar os agentes', + 'settings.agents.empty': 'Ainda não há agentes', + 'settings.agents.sourceDefault': 'Integrado', + 'settings.agents.sourceCustom': 'Personalizado', + 'settings.agents.enable': 'Ativar agente', + 'settings.agents.disable': 'Desativar agente', + 'settings.agents.edit': 'Editar', + 'settings.agents.delete': 'Excluir', + 'settings.agents.reset': 'Redefinir para o padrão', + 'settings.agents.modelLabel': 'Modelo', + 'settings.agents.toolsLabel': 'Ferramentas', + 'settings.agents.toolsAll': 'Todas as ferramentas', + 'settings.agents.toolsCount': 'ferramentas {count}', + 'settings.agents.actionFailed': 'Não foi possível atualizar o agente', + 'settings.agents.orchestratorLocked': 'O orquestrador está sempre habilitado.', + 'settings.agents.editor.createTitle': 'Novo agente', + 'settings.agents.editor.editTitle': 'Editar agente', + 'settings.agents.editor.id': 'ID', + 'settings.agents.editor.idHint': 'Somente letras minúsculas, números, _ e -.', + 'settings.agents.editor.name': 'Nome', + 'settings.agents.editor.description': 'Descrição', + 'settings.agents.editor.model': 'Modelo (opcional)', + 'settings.agents.editor.modelPlaceholder': 'por exemplo, herdar, dica:rápido, ou um id de modelo', + 'settings.agents.editor.systemPrompt': 'Prompt do sistema (opcional)', + 'settings.agents.editor.tools': 'Ferramentas permitidas', + 'settings.agents.editor.toolsHint': + 'Um nome de ferramenta por linha. Use * para todas as ferramentas.', + 'settings.agents.editor.defaultsNote': + 'Editar um agente integrado salva uma substituição que você pode redefinir depois.', + 'settings.agents.editor.save': 'Salvar', + 'settings.agents.editor.create': 'Criar agente', + 'settings.agents.editor.saving': 'Salvando…', + 'settings.agentsSection.title': 'Agents', + 'settings.agentsSection.description': + 'Gerencie seus agentes, sua autonomia e o que eles podem acessar neste computador.', + 'settings.agentsSection.menuDesc': 'Registro, autonomia e acesso ao SO', + 'settings.agents.editor.notFound': 'Agente não encontrado.', + 'settings.agents.editor.modelInherit': 'Herdar (padrão da plataforma)', + 'settings.agents.editor.modelHints': 'Dicas de roteamento', + 'settings.agents.editor.modelTiers': 'Níveis de modelo', + 'settings.agents.editor.modelCustom': 'ID de modelo personalizado…', + 'settings.agents.editor.modelCustomPlaceholder': 'ex.: anthropic/claude-sonnet-4', + 'settings.agents.editor.selectTools': 'Adicionar ferramentas', + 'settings.agents.editor.toolsAllSelected': 'Todas as ferramentas', + 'settings.agents.editor.toolsNoneSelected': 'Nenhuma ferramenta selecionada', + 'settings.agents.editor.removeToolAria': 'Remover {tool}', + 'settings.agents.editor.toolsModalTitle': 'Ferramentas permitidas', + 'settings.agents.editor.toolsSelectedCount': '{count} selecionadas', + 'settings.agents.editor.toolsSearchPlaceholder': 'Pesquisar ferramentas…', + 'settings.agents.editor.toolsAllowAll': 'Permitir todas as ferramentas (*)', + 'settings.agents.editor.toolsAllowAllHint': + 'Este agente pode usar todas as ferramentas disponíveis.', + 'settings.agents.editor.toolsLoading': 'Carregando ferramentas…', + 'settings.agents.editor.toolsLoadError': 'Não foi possível carregar as ferramentas', + 'settings.agents.editor.toolsEmpty': 'Nenhuma ferramenta corresponde à sua pesquisa.', + 'settings.agents.editor.toolsDone': 'Done', + 'settings.agents.editor.builtInReadonly': + 'Agentes integrados não podem ser editados. Você pode ativá-los, desativá-los ou redefini-los na lista de agentes.', }; -export default pt; +export default messages; diff --git a/app/src/lib/i18n/ru.ts b/app/src/lib/i18n/ru.ts index c404e4644..aca44712c 100644 --- a/app/src/lib/i18n/ru.ts +++ b/app/src/lib/i18n/ru.ts @@ -1,31 +1,4123 @@ -import ru1 from './chunks/ru-1'; -import ru2 from './chunks/ru-2'; -import ru3 from './chunks/ru-3'; -import ru4 from './chunks/ru-4'; -import ru5 from './chunks/ru-5'; import type { TranslationMap } from './types'; -// Russian (Русский) translations. Each chunk maps to chunks/en-N.ts. -// Missing keys fall back to English via I18nContext.resolveEn(). -const ru: TranslationMap = { - ...ru1, - ...ru2, - ...ru3, - ...ru4, - ...ru5, +// Russian (Русский) translations. Keys mirror en.ts; missing/ +// English-identical values fall back to English via I18nContext.resolveEn(). +const messages: TranslationMap = { + 'nav.home': 'Главная', + 'nav.human': 'Человек', + 'nav.chat': 'Чат', + 'nav.connections': 'Подключения', + 'nav.memory': 'Интеллект', + 'nav.alerts': 'Оповещения', + 'nav.rewards': 'Награды', + 'nav.settings': 'Настройки', + 'common.cancel': 'Отмена', + 'common.save': 'Сохранить', + 'common.confirm': 'Подтвердить', + 'common.delete': 'Удалить', + 'common.edit': 'Редактировать', + 'common.create': 'Создать', + 'common.search': 'Поиск', + 'common.loading': 'загрузка…', + 'common.error': 'Ошибка', + 'common.success': 'Готово', + 'common.back': 'Назад', + 'common.next': 'Далее', + 'common.finish': 'Завершить', + 'common.close': 'Закрыть', + 'common.enabled': 'Включено', + 'common.disabled': 'Отключено', + 'common.on': 'Вкл', + 'common.off': 'Выкл', + 'common.yes': 'Да', + 'common.no': 'Нет', + 'common.ok': 'Понятно', + 'common.name': 'Имя', + 'common.retry': 'Повторить', + 'common.copy': 'Копировать', + 'common.copied': 'Скопировано', + 'common.learnMore': 'Узнать больше', + 'common.seeAll': 'Посмотреть', + 'common.dismiss': 'Закрыть', + 'common.clear': 'Очистить', + 'common.reset': 'Сбросить', + 'common.refresh': 'Обновить', + 'common.export': 'Экспорт', + 'common.import': 'Импорт', + 'common.upload': 'Загрузить', + 'common.download': 'Скачать', + 'common.add': 'Добавить', + 'common.remove': 'Убрать', + 'common.showMore': 'Показать больше', + 'common.showLess': 'Показать меньше', + 'common.submit': 'Отправить', + 'common.continue': 'Продолжить', + 'common.comingSoon': 'Скоро', + 'common.breadcrumb': 'Breadcrumb', + 'settings.general': 'Общие', + 'settings.featuresAndAI': 'Функции и AI', + 'settings.billingAndRewards': 'Оплата и награды', + 'settings.support': 'Поддержка', + 'settings.advanced': 'Дополнительно', + 'settings.dangerZone': 'Опасная зона', + 'settings.account': 'Аккаунт', + 'settings.accountDesc': 'Фраза восстановления, команда, подключения и конфиденциальность', + 'settings.notifications': 'Уведомления', + 'settings.notificationsDesc': + 'Режим «Не беспокоить» и настройки уведомлений для каждого аккаунта', + 'settings.notifications.tabs.preferences': 'Настройки', + 'settings.notifications.tabs.routing': 'Маршрутизация', + 'settings.features': 'Функции', + 'settings.featuresDesc': 'Слежение за экраном, мессенджеры и инструменты', + 'settings.aiModels': 'AI и модели', + 'settings.aiModelsDesc': 'Настройка локальных AI-моделей, загрузки и LLM-провайдер', + 'settings.ai': 'Настройки AI', + 'settings.aiDesc': 'Облачные провайдеры, локальные модели Ollama и маршрутизация по задачам', + 'settings.billingUsage': 'Оплата и использование', + 'settings.billingUsageDesc': 'Подписка, кредиты и способы оплаты', + 'settings.rewards': 'Награды', + 'settings.rewardsDesc': 'Рефералы, купоны и заработанные кредиты', + 'settings.restartTour': 'Повторить тур', + 'settings.restartTourDesc': 'Запустить обучение заново с самого начала', + 'settings.about': 'О приложении', + 'settings.aboutDesc': 'Версия приложения и обновления', + 'settings.developerOptions': 'Дополнительно', + 'settings.developerOptionsDesc': + 'Настройки AI, каналы связи, инструменты, диагностика и панели отладки', + 'settings.clearAppData': 'Очистить данные приложения', + 'settings.clearAppDataDesc': 'Выйти из аккаунта и удалить все локальные данные приложения', + 'settings.logOut': 'Выйти', + 'settings.logOutDesc': 'Выйти из своего аккаунта', + 'settings.exitLocalSession': 'Выход из локального сеанса', + 'settings.exitLocalSessionDesc': 'Возврат к экрану входа в систему', + 'settings.language': 'Язык', + 'settings.betaBuild': 'Бета-сборка — v{version}', + 'settings.languageDesc': 'Язык отображения интерфейса', + 'settings.alerts': 'Оповещения', + 'settings.alertsDesc': 'Смотри последние оповещения и активность во входящих', + 'settings.account.recoveryPhrase': 'Фраза восстановления', + 'settings.account.recoveryPhraseDesc': 'Просмотр и резервное копирование фразы восстановления', + 'settings.account.team': 'Команда', + 'settings.account.teamDesc': 'Управление участниками команды и правами', + 'settings.account.connections': 'Подключения', + 'settings.account.connectionsDesc': 'Управление привязанными аккаунтами и сервисами', + 'settings.account.privacy': 'Конфиденциальность', + 'settings.account.privacyDesc': 'Контролируй, какие данные покидают твой компьютер', + 'migration.title': 'Импорт из другого ассистента', + 'migration.description': + 'Перенесите память и заметки из другого локального ассистента в это рабочее пространство. Сначала запустите «Предпросмотр», чтобы увидеть, что изменится, затем нажмите «Применить», чтобы скопировать данные. Текущая память сохраняется в резервную копию первой.', + 'migration.vendorLabel': 'Источник', + 'migration.vendor.openclaw': 'OpenClaw', + 'migration.vendor.hermes': 'Hermes Agent', + 'migration.sourceLabel': 'Путь к исходному рабочему пространству (необязательно)', + 'migration.sourcePlaceholder': + 'Оставьте пустым для автоопределения (например, ~/.openclaw/workspace)', + 'migration.sourcePlaceholderHermes': 'Оставьте пустым для автоопределения (например, ~/.hermes)', + 'migration.sourceHint': + 'Если пусто, используется стандартное расположение источника. Укажите явный путь, если вы перенесли рабочее пространство.', + 'migration.previewAction': 'Предпросмотр', + 'migration.previewRunning': 'Предпросмотр…', + 'migration.applyAction': 'Применить импорт', + 'migration.applyRunning': 'Импорт…', + 'migration.applyDisclaimer': + '«Применить» разблокируется только после успешного предпросмотра того же источника. Существующая память сохраняется перед любым импортом.', + 'migration.reportTitlePreview': 'Предпросмотр — ничего ещё не импортировано', + 'migration.reportTitleApplied': 'Импорт завершён', + 'migration.report.source': 'Исходное пространство', + 'migration.report.target': 'Целевое пространство', + 'migration.report.fromSqlite': 'Из SQLite (brain.db)', + 'migration.report.fromMarkdown': 'Из Markdown', + 'migration.report.imported': 'Импортировано', + 'migration.report.skippedUnchanged': 'Пропущено (без изменений)', + 'migration.report.renamedConflicts': 'Переименовано при конфликте', + 'migration.report.warnings': 'Предупреждения', + 'migration.report.previewHint': + 'Данные ещё не импортированы. Нажмите «Применить импорт», чтобы скопировать.', + 'migration.report.appliedHint': + 'Импортированные записи теперь в вашей памяти. Запустите «Предпросмотр» снова для сравнения.', + 'migration.confirmImport.singular': + 'Импортировать {count} запись в текущее рабочее пространство?\n\nИсточник: {source}\nЦель: {target}\n\nПеред импортом будет сохранена резервная копия памяти.', + 'migration.confirmImport.plural': + 'Импортировать {count} записей в текущее рабочее пространство?\n\nИсточник: {source}\nЦель: {target}\n\nПеред импортом будет сохранена резервная копия памяти.', + 'settings.notifications.doNotDisturb': 'Не беспокоить', + 'settings.notifications.doNotDisturbDesc': 'Отключить все уведомления на заданный период', + 'settings.notifications.channelControls': 'По каналам', + 'settings.notifications.channelControlsDesc': 'Настройка уведомлений для каждого канала', + 'settings.features.screenAwareness': 'Слежение за экраном', + 'settings.features.screenAwarenessDesc': 'Разреши ассистенту видеть активное окно', + 'settings.features.messaging': 'Мессенджеры', + 'settings.features.messagingDesc': 'Настройки каналов и интеграции мессенджеров', + 'settings.features.tools': 'Инструменты', + 'settings.features.toolsDesc': 'Управление подключёнными инструментами и интеграциями', + 'settings.ai.localSetup': 'Настройка локального AI', + 'settings.ai.localSetupDesc': 'Загрузка и настройка локальных AI-моделей', + 'settings.ai.llmProvider': 'LLM-провайдер', + 'settings.ai.llmProviderDesc': 'Выбери и настрой своего AI-провайдера', + 'clearData.title': 'Очистить данные приложения', + 'clearData.warning': 'Это выйдет из аккаунта и навсегда удалит локальные данные, включая:', + 'clearData.bulletSettings': 'Настройки и переписки', + 'clearData.bulletCache': 'Все локальные кэши интеграций', + 'clearData.bulletWorkspace': 'Данные рабочего пространства', + 'clearData.bulletOther': 'Все прочие локальные данные', + 'clearData.irreversible': 'Это действие нельзя отменить.', + 'clearData.clearing': 'Очистка данных…', + 'clearData.failed': 'Не удалось очистить данные и выйти. Попробуй ещё раз.', + 'clearData.failedLogout': 'Не удалось выйти. Попробуй ещё раз.', + 'clearData.failedPersist': 'Не удалось сбросить состояние приложения. Попробуй ещё раз.', + 'welcome.title': 'Добро пожаловать в OpenHuman', + 'welcome.subtitle': 'Твой персональный суперинтеллект. Приватный, простой и невероятно мощный.', + 'welcome.connectPrompt': 'Настроить RPC URL (дополнительно)', + 'welcome.selectRuntime': 'Выбрать среду выполнения', + 'welcome.clearingAppData': 'Очистка данных приложения...', + 'welcome.clearAppDataAndRestart': 'Очистка данных приложения и перезапуск', + 'welcome.clearAppDataWarning': + 'Это удалит локально сохранённые секреты и аккаунты на этом устройстве. Ваш облачный аккаунт не затрагивается — вы можете войти снова сразу после этого.', + 'welcome.resetErrorFallback': + 'Не удалось очистить данные приложения. Закройте и снова откройте OpenHuman, затем повторите попытку.', + 'welcome.signingIn': 'Выполняете вход...', + 'welcome.termsIntro': 'Продолжая, вы соглашаетесь с', + 'welcome.termsOfUse': 'Условиями', + 'welcome.termsJoiner': 'и', + 'welcome.privacyPolicy': 'Политикой конфиденциальности.', + 'welcome.termsOutro': '.', + 'welcome.urlPlaceholder': 'http://localhost:8089', + 'welcome.invalidUrl': 'Введи корректный URL (http или https)', + 'welcome.connecting': 'Проверка', + 'welcome.connect': 'Проверить', + 'home.greeting': 'Доброе утро', + 'home.greetingAfternoon': 'Добрый день', + 'home.greetingEvening': 'Добрый вечер', + 'home.askAssistant': 'Спроси ассистента о чём угодно...', + 'home.statusOk': + 'Устройство подключено. Не закрывай приложение, чтобы поддерживать соединение. Отправь сообщение агенту с помощью кнопки ниже.', + 'home.statusBackendOnly': 'Переподключение к серверу… агент скоро снова будет доступен.', + 'home.statusCoreUnreachable': + 'Локальный процесс OpenHuman не отвечает. Возможно, он завис или не запустился.', + 'home.statusInternetOffline': + 'Нет подключения к интернету. Проверь сеть или перезапусти приложение.', + 'home.restartCore': 'Перезапустить ядро', + 'home.restartingCore': 'Перезапуск ядра…', + 'home.themeToggle.toLight': 'Переключить на светлую тему', + 'home.themeToggle.toDark': 'Переключить на тёмную тему', + 'home.usageExhaustedTitle': 'Вы исчерпали лимит использования', + 'home.usageExhaustedBody': + 'Включённый объём использования пока исчерпан. Оформите подписку, чтобы получить больше постоянной мощности.', + 'home.usageExhaustedCta': 'Оформить подписку', + 'home.routinesCard': 'Ваши подпрограммы', + 'home.routinesActive': '{count} активных', + 'routines.title': 'Ваши рутины', + 'routines.subtitle': 'Что ваш помощник делает автоматически', + 'routines.loading': 'Загрузка процедур…', + 'routines.empty': 'Пока нет процедур', + 'routines.emptyHint': + 'Ваш помощник может выполнять задачи по расписанию — например, утренние брифинги или ежедневные сводки.', + 'routines.refresh': 'Обновить', + 'routines.nextRun': 'Следующий запуск', + 'routines.lastRunSuccess': 'Последний запуск удался', + 'routines.lastRunFailed': 'Последний запуск не удался', + 'routines.notRunYet': 'Еще не запущен', + 'routines.runNow': 'Беги сейчас', + 'routines.running': 'Бег…', + 'routines.viewHistory': 'Посмотреть историю', + 'routines.loadingHistory': 'Загрузка…', + 'routines.noHistory': 'Истории запусков пока нет.', + 'routines.statusSuccess': 'Успех', + 'routines.statusError': 'Ошибка', + 'routines.showOutput': 'Показать вывод', + 'routines.hideOutput': 'Скрыть вывод', + 'routines.toggleEnabled': 'Включить или отключить эту процедуру', + 'routines.typeAgent': 'Агент', + 'routines.typeCommand': 'Команда', + 'nav.routines': 'Routines', + 'chat.newThread': 'Новый чат', + 'chat.typeMessage': 'Введи сообщение...', + 'chat.send': 'Отправить сообщение', + 'chat.thinking': 'Думаю...', + 'chat.noMessages': 'Сообщений пока нет', + 'chat.startConversation': 'Начни разговор', + 'chat.regenerate': 'Сгенерировать снова', + 'chat.copyResponse': 'Скопировать ответ', + 'chat.citations': 'Источники', + 'chat.toolUsed': 'Использован инструмент', + 'scope.legacy': 'Устаревшее', + 'scope.user': 'Пользователь', + 'scope.project': 'Проект', + 'skills.title': 'Подключения', + 'skills.search': 'Поиск подключений...', + 'skills.noResults': 'Подключения не найдены', + 'skills.connect': 'Подключить', + 'skills.disconnect': 'Отключить', + 'skills.configure': 'Управление', + 'skills.connected': 'Подключено', + 'skills.available': 'Доступно', + 'skills.addAccount': 'Добавить аккаунт', + 'skills.channels': 'Каналы', + 'skills.integrations': 'Интеграции', + 'skills.integrationsSubtitle': + 'Облачные OAuth-подключения — войдите в свой аккаунт, и Composio управляет токенами, чтобы агенты могли читать и действовать от вашего имени. Никаких API-ключей для управления.', 'skills.composio.noApiKeyTitle': 'Ключ API Composio не настроен', 'skills.composio.noApiKeyDescription': 'Локальный режим использует ваш собственный ключ API Composio. Откройте Настройки → Дополнительно → Composio, чтобы добавить ключ перед подключением интеграций здесь.', 'skills.composio.noApiKeyCta': 'Открыть в настройках', - 'channels.localManagedUnavailable': 'Управляемые каналы недоступны для локальных пользователей.', + 'skills.tabs.composio': 'Composio', + 'skills.tabs.channels': 'Каналы', + 'skills.tabs.mcp': 'MCP Серверы', + 'skills.tabs.runners': 'Runners', + 'memory.title': 'Память', + 'memory.search': 'Поиск воспоминаний...', + 'memory.noResults': 'Воспоминания не найдены', + 'memory.empty': 'Воспоминаний пока нет. Они создаются автоматически в процессе общения.', + 'memory.tab.memory': 'Память', + 'memory.tab.tasks': 'Задачи агента', + 'memory.tab.tasksDescription': + 'Создавайте и отслеживайте задачи — ваши личные дела и доски, которые агенты формируют в ходе разговоров.', + 'memory.tab.subconscious': 'Подсознание', + 'memory.tab.dreams': 'Сны', + 'memory.tab.calls': 'Звонки', + 'memory.tab.diagram': 'Diagram', + 'memory.tab.centrality': 'Centrality', + 'memory.tab.settings': 'Настройки', + 'memory.analyzeNow': 'Анализировать сейчас', + 'graphCentrality.title': 'Централизованность графа знаний', + 'graphCentrality.intro': + 'PageRank по вашему графику памяти отображает несущие нагрузку концентраторы — и объекты-соединители, которые связывают отдельные кластеры, которые не может выявить необработанный подсчет частоты.', + 'graphCentrality.loading': 'Вычислительная центральность…', + 'graphCentrality.errorPrefix': 'Не удалось загрузить график:', + 'graphCentrality.retry': 'Повторить попытку', + 'graphCentrality.empty': 'Графа знаний пока нет.', + 'graphCentrality.emptyHint': + 'По мере того, как помощник записывает факты о вас, здесь всплывают наиболее связанные между собой сущности.', + 'graphCentrality.namespaceLabel': 'Пространство имен', + 'graphCentrality.namespaceAll': 'Все пространства имен', + 'graphCentrality.metricEntities': 'Сущности', + 'graphCentrality.metricConnections': 'Соединения', + 'graphCentrality.metricClusters': 'Кластеры', + 'graphCentrality.clustersCaption': 'Кластеры {components} · крупнейшие холдинги {largest}', + 'graphCentrality.approximateBadge': 'approximate', + 'graphCentrality.approximateTitle': 'Остановился на пределе итерации перед полной сходимостью', + 'graphCentrality.rankedHeading': 'Лучшие организации по влиянию', + 'graphCentrality.colRank': '#', + 'graphCentrality.colEntity': 'Сущность', + 'graphCentrality.colInfluence': 'Влияние', + 'graphCentrality.colLinks': 'Ссылки', + 'graphCentrality.bridgeBadge': 'connector', + 'graphCentrality.bridgeTitle': + 'Коннектор — более влиятельный, чем предполагает количество ссылок.', + 'graphCentrality.degreeTitle': '{in} вход · {out} выход', + 'memoryTree.status.title': 'Дерево памяти', + 'memoryTree.status.autoSyncLabel': 'Автосинхронизация', + 'memoryTree.status.autoSyncDescription': + 'Пауза, чтобы остановить новый прием. Существующая вики остается доступной для запросов.', + 'memoryTree.status.statusTile': 'Статус', + 'memoryTree.status.lastSyncTile': 'Последняя синхронизация', + 'memoryTree.status.totalChunksTile': 'Всего кусков', + 'memoryTree.status.wikiSizeTile': 'Размер вики', + 'memoryTree.status.statusRunning': 'Бег', + 'memoryTree.status.statusPaused': 'Приостановлено', + 'memoryTree.status.statusSyncing': 'Синхронизация', + 'memoryTree.status.statusError': 'Ошибка', + 'memoryTree.status.statusIdle': 'Праздный', + 'memoryTree.status.never': 'Никогда', + 'memoryTree.status.fetchError': 'Не удалось получить статус дерева памяти.', + 'memoryTree.status.retry': 'Повторить попытку', + 'memoryTree.status.toggleFailed': 'Не удалось включить автосинхронизацию.', + 'memoryTree.status.justNow': 'прямо сейчас', + 'memoryTree.status.secondsAgo': '{count} сек. назад', + 'memoryTree.status.minuteAgo': '1 минуту назад', + 'memoryTree.status.minutesAgo': '{count} мин назад', + 'memoryTree.status.hourAgo': '1 час назад', + 'memoryTree.status.hoursAgo': '{count} час назад', + 'memoryTree.status.dayAgo': '1 день назад', + 'memoryTree.status.daysAgo': '{count} дней назад', + 'alerts.title': 'Оповещения', + 'alerts.empty': 'Оповещений пока нет', + 'alerts.markAllRead': 'Отметить всё прочитанным', + 'alerts.unread': 'непрочитано', + 'rewards.title': 'Награды', + 'rewards.referrals': 'Рефералы', + 'rewards.coupons': 'Активировать', 'rewards.localUnavailable': 'Локальный вход не приносит награды, купоны или реферальный кредит. Выйдите и войдите с аккаунтом OpenHuman, если хотите, чтобы награды начислялись.', 'rewards.localUnavailableCta': 'Открыть настройки аккаунта', + 'rewards.credits': 'Кредиты', + 'rewards.referralCode': 'Твой реферальный код', + 'rewards.copyCode': 'Скопировать код', + 'rewards.share': 'Поделиться', + 'onboarding.welcome': 'Привет. Я OpenHuman.', + 'onboarding.welcomeDesc': + 'Твой суперинтеллектуальный AI-ассистент, работающий прямо на твоём компьютере. Приватный, простой и невероятно мощный.', + 'onboarding.context': 'Сбор контекста', + 'onboarding.contextDesc': 'Подключи инструменты и сервисы, которыми пользуешься каждый день.', + 'onboarding.localAI': 'Локальный AI', + 'onboarding.localAIDesc': 'Настрой локальную AI-модель, работающую прямо на твоём устройстве.', + 'onboarding.chatProvider': 'Чат-провайдер', + 'onboarding.chatProviderDesc': 'Выбери, как хочешь общаться с ассистентом.', + 'onboarding.referral': 'Реферал', + 'onboarding.referralDesc': 'Введи реферальный код, если он у тебя есть.', + 'onboarding.finish': 'Завершить настройку', + 'onboarding.finishDesc': 'Всё готово! Начни пользоваться OpenHuman.', + 'onboarding.skip': 'Пропустить', + 'onboarding.getStarted': 'Начать', + 'onboarding.runtimeChoice.title': 'Как ты хочешь запустить OpenHuman?', + 'onboarding.runtimeChoice.subtitle': + 'Выбери подходящий вариант. Изменить можно позже в Настройках.', + 'onboarding.runtimeChoice.cloud.title': 'Просто', + 'onboarding.runtimeChoice.cloud.tagline': 'Пусть OpenHuman сам обо всём позаботится.', + 'onboarding.runtimeChoice.cloud.f1': 'Встроенная безопасность', + 'onboarding.runtimeChoice.cloud.f2': 'Сжатие токенов для экономии ресурсов', + 'onboarding.runtimeChoice.cloud.f3': 'Одна подписка — все модели включены', + 'onboarding.runtimeChoice.cloud.f4': 'Никаких API-ключей', + 'onboarding.runtimeChoice.cloud.f5': 'Простая настройка', + 'onboarding.runtimeChoice.custom.title': 'Свои настройки', + 'onboarding.runtimeChoice.custom.tagline': + 'Используй свои ключи. Полный контроль над тем, что используется.', + 'onboarding.runtimeChoice.custom.f1': 'Для большинства функций потребуются API-ключи', + 'onboarding.runtimeChoice.custom.f2': 'Переиспользует сервисы, за которые ты уже платишь', + 'onboarding.runtimeChoice.custom.f3': 'Может быть бесплатным, если всё запускать локально', + 'onboarding.runtimeChoice.custom.f4': 'Больше настроек и параметров', + 'onboarding.runtimeChoice.custom.f5': + 'Лучший выбор для продвинутых пользователей и разработчиков', + 'onboarding.runtimeChoice.cloud.creditHighlight': '$1 бесплатный кредит для знакомства', + 'onboarding.runtimeChoice.continueCloud': 'Продолжить с простым режимом', + 'onboarding.runtimeChoice.continueCustom': 'Продолжить со своими настройками', + 'onboarding.runtimeChoice.recommended': 'Рекомендуется', + 'onboarding.apiKeys.title': 'Добавь свои API-ключи', + 'onboarding.apiKeys.subtitle': + 'Вставь их сейчас или пропусти и добавь позже в Настройки › AI. Ключи хранятся на этом устройстве в зашифрованном виде.', + 'onboarding.apiKeys.openaiLabel': 'API-ключ OpenAI', + 'onboarding.apiKeys.openaiPlaceholder': 'sk-...', + 'onboarding.apiKeys.openaiOauthHint': + 'Используйте ChatGPT Plus/Pro (подписка) или ключ OpenAI API — не оба обязательны.', + 'onboarding.apiKeys.openaiOauthOpening': 'Открытие входа…', + 'onboarding.apiKeys.finishSignIn': 'Завершите вход в ChatGPT', + 'onboarding.apiKeys.orApiKey': 'или ключ API', + 'onboarding.apiKeys.anthropicLabel': 'API-ключ Anthropic', + 'onboarding.apiKeys.anthropicPlaceholder': 'sk-ant-...', + 'onboarding.apiKeys.saveError': 'Не удалось сохранить ключ. Проверь его и попробуй снова.', + 'onboarding.apiKeys.skipForNow': 'Пропустить', + 'onboarding.apiKeys.continue': 'Сохранить и продолжить', + 'onboarding.apiKeys.saving': 'Сохранение…', + 'onboarding.custom.stepperInference': 'Инференс', + 'onboarding.custom.stepperVoice': 'Голос', + 'onboarding.custom.stepperOAuth': 'OAuth', + 'onboarding.custom.stepperSearch': 'Поиск', + 'onboarding.custom.stepperEmbeddings': 'Embeddings', + 'onboarding.custom.stepperMemory': 'Память', + 'onboarding.custom.stepCounter': 'Шаг {n} из {total}', + 'onboarding.custom.defaultTitle': 'По умолчанию', + 'onboarding.custom.defaultSubtitle': 'Пусть OpenHuman сам управляет этим.', + 'onboarding.custom.configureTitle': 'Настроить', + 'onboarding.custom.configureSubtitle': 'Я сам выберу, что использовать.', + 'onboarding.custom.progressAriaLabel': 'Прогресс настройки', + 'onboarding.custom.continue': 'Продолжить', + 'onboarding.custom.back': 'Назад', + 'onboarding.custom.finish': 'Завершить настройку', + 'onboarding.custom.configureLater': + 'Можно завершить настройку после онбординга. Мы откроем нужную страницу настроек.', + 'onboarding.custom.openSettings': 'Открыть в настройках', + 'onboarding.custom.inference.title': 'Инференс (текст)', + 'onboarding.custom.inference.subtitle': + 'Какая языковая модель будет отвечать на вопросы и запускать агентов?', + 'onboarding.custom.inference.defaultDesc': + 'OpenHuman автоматически выбирает подходящую модель. Без ключей и настроек.', + 'onboarding.custom.inference.configureDesc': + 'Используй свой ключ OpenAI или Anthropic для всех текстовых задач.', + 'onboarding.custom.voice.title': 'Голос', + 'onboarding.custom.voice.subtitle': 'Распознавание и синтез речи для голосового режима.', + 'onboarding.custom.voice.defaultDesc': + 'OpenHuman поставляется с управляемым STT/TTS, который работает сразу. Ничего настраивать не нужно.', + 'onboarding.custom.voice.configureDesc': + 'Используй свой ElevenLabs / OpenAI Whisper / другой сервис. Настрой в Настройки › Голос.', + 'onboarding.custom.oauth.title': 'Подключения (OAuth)', + 'onboarding.custom.oauth.subtitle': 'Gmail, Slack, Notion и другие сервисы, требующие OAuth.', + 'onboarding.custom.oauth.defaultDesc': + 'OpenHuman использует управляемое рабочее пространство Composio. Один клик для подключения каждого сервиса.', + 'onboarding.custom.oauth.configureDesc': + 'Используй свой аккаунт Composio / API-ключ. Настрой в Настройки › Подключения.', + 'onboarding.custom.search.title': 'Поиск в интернете', + 'onboarding.custom.search.subtitle': 'Как OpenHuman ищет информацию в интернете.', + 'onboarding.custom.search.defaultDesc': + 'OpenHuman использует управляемый поисковый бэкенд. Ключи не нужны.', + 'onboarding.custom.search.configureDesc': + 'Используй свой ключ поискового провайдера (Tavily, Brave и др.). Настрой в Настройки › Инструменты.', + 'onboarding.custom.embeddings.title': 'Embeddings', + 'onboarding.custom.embeddings.subtitle': + 'Как OpenHuman создаёт векторные эмбеддинги для семантического поиска в памяти.', + 'onboarding.custom.embeddings.defaultDesc': + 'OpenHuman использует управляемый сервис эмбеддингов. API-ключ не требуется.', + 'onboarding.custom.embeddings.configureDesc': + 'Используйте собственного провайдера эмбеддингов (OpenAI, Voyage, Ollama и др.).', + 'onboarding.custom.memory.title': 'Память', + 'onboarding.custom.memory.subtitle': + 'Как OpenHuman запоминает контекст, предпочтения и предыдущие разговоры.', + 'onboarding.custom.memory.defaultDesc': + 'OpenHuman автоматически управляет хранением и извлечением воспоминаний. Ничего настраивать не нужно.', + 'onboarding.custom.memory.configureDesc': + 'Просматривай, экспортируй или очищай память самостоятельно. Настрой в Настройки › Память.', + 'accounts.addAccount': 'Добавить аккаунт', + 'accounts.manageAccounts': 'Управление аккаунтами', + 'accounts.noAccounts': 'Аккаунты не подключены', + 'accounts.connectAccount': 'Подключи аккаунт для начала работы', + 'accounts.agent': 'Агент', + 'accounts.respondQueue': 'Очередь ответов', + 'accounts.disconnect': 'Отключить', + 'accounts.disconnectConfirm': 'Ты уверен, что хочешь отключить этот аккаунт?', + 'accounts.disconnectClearMemory': 'Также удалить память из этого источника', + 'accounts.disconnectClearMemoryHint': + 'Навсегда удаляет локальные фрагменты памяти, связанные с этим подключением.', + 'accounts.searchAccounts': 'Поиск аккаунтов...', + 'channels.title': 'Каналы', + 'channels.configure': 'Настроить канал', + 'channels.setup': 'Настройка', + 'channels.noChannels': 'Каналы не настроены', + 'channels.localManagedUnavailable': 'Управляемые каналы недоступны для локальных пользователей.', + 'channels.addChannel': 'Добавить канал', + 'channels.status.connected': 'Подключено', + 'channels.status.disconnected': 'Отключено', + 'channels.status.error': 'Ошибка', + 'channels.status.configuring': 'Настройка', + 'channels.defaultMessaging': 'Канал по умолчанию', + 'webhooks.title': 'Вебхуки', + 'webhooks.create': 'Создать вебхук', + 'webhooks.noWebhooks': 'Вебхуки не настроены', + 'webhooks.url': 'URL', + 'webhooks.secret': 'Секрет', + 'webhooks.events': 'События', + 'webhooks.archiveDirectory': 'Директория архива', + 'webhooks.todayFile': 'Файл за сегодня', + 'invites.title': 'Приглашения', + 'invites.create': 'Создать приглашение', + 'invites.noInvites': 'Активных приглашений нет', + 'invites.code': 'Код приглашения', + 'invites.copyLink': 'Скопировать ссылку', + 'invites.generate': 'Создать приглашение', + 'invites.generating': 'Создание...', + 'invites.refreshing': 'Обновление приглашений...', + 'invites.loading': 'Загрузка приглашений...', + 'invites.copyCodeAria': 'Скопировать код приглашения', + 'invites.revokeAria': 'Отозвать приглашение', + 'invites.usedUp': 'Использовано', + 'invites.uses': 'Используется: {current}{max}', + 'invites.expiresOn': 'Срок действия истекает {date}', + 'invites.empty': 'Пока нет приглашений', + 'invites.emptyHint': 'Создайте код приглашения для обмена с другими', + 'invites.revokeTitle': 'Отозвать код приглашения', + 'invites.revokePromptPrefix': 'Вы уверены, что хотите отозвать код приглашения?', + 'invites.revokeWarning': + 'Этот код приглашения станет недействительным и не может быть использован для вступления в команду.', + 'invites.revoking': 'Отзыв...', + 'invites.revokeAction': 'Отозвать приглашение', + 'invites.failedGenerate': 'Не удалось создать приглашение.', + 'invites.failedRevoke': 'Не удалось отозвать приглашение.', + 'team.refreshingMembers': 'Обновление участников...', + 'team.loadingMembers': 'Загрузка участников...', + 'team.memberCount': '{count} участник', + 'team.memberCountPlural': '{count} участников', + 'team.you': '(Вы)', + 'team.removeAria': 'Удалить {name}', + 'team.noMembers': 'Участники не найдены.', + 'team.removeTitle': 'Удалить участника команды', + 'team.removePromptPrefix': 'Вы уверены, что хотите удалить', + 'team.removePromptSuffix': 'из команды?', + 'team.removeWarning': 'Они потеряют доступ к команде и всем ее ресурсам.', + 'team.removing': 'Удаление...', + 'team.removeAction': 'Удалить участника', + 'team.changeRoleTitle': 'Изменить роль участника', + 'team.changeRolePrompt': 'Изменить роль {name} с {oldRole} на {newRole}?', + 'team.changeRoleAdminGrant': + 'Это предоставит им полные права администратора, включая возможность управлять участниками команды.', + 'team.changeRoleAdminRemove': + 'Это лишит их прав администратора, и они больше не смогут управлять командой.', + 'team.changing': 'Изменение...', + 'team.changeRoleAction': 'Изменить роль', + 'team.failedChangeRole': 'Не удалось изменить роль.', + 'team.failedRemoveMember': 'Не удалось удалить участника.', + 'devOptions.title': 'Дополнительно', + 'devOptions.diagnostics': 'Диагностика', + 'devOptions.diagnosticsDesc': 'Состояние системы, логи и метрики производительности', + 'devOptions.toolPolicyDiagnosticsDesc': + 'Инвентаризация инструментов, положение политики, белые списки MCP и недавние блокировки', + 'devOptions.toolPolicyDiagnostics.loading': 'Загрузка…', + 'devOptions.toolPolicyDiagnostics.unavailable': 'Диагностика недоступна', + 'devOptions.toolPolicyDiagnostics.posture.title': 'Политическая позиция', + 'devOptions.toolPolicyDiagnostics.posture.autonomy': 'Автономия:', + 'devOptions.toolPolicyDiagnostics.posture.workspaceOnly': 'Только рабочее пространство:', + 'devOptions.toolPolicyDiagnostics.posture.maxActionsPerHour': 'Макс actions/hr:', + 'devOptions.toolPolicyDiagnostics.posture.approvalMediumRisk': 'Одобрение (средний риск):', + 'devOptions.toolPolicyDiagnostics.posture.blockHighRisk': 'Блокировать высокий риск:', + 'devOptions.toolPolicyDiagnostics.inventory.title': 'Инвентарь', + 'devOptions.toolPolicyDiagnostics.inventory.totalTools': 'Всего инструментов', + 'devOptions.toolPolicyDiagnostics.inventory.enabledTools': 'Включенные инструменты', + 'devOptions.toolPolicyDiagnostics.inventory.mcpStdioTools': 'MCP инструменты stdio', + 'devOptions.toolPolicyDiagnostics.inventory.jsonRpcTools': 'JSON-RPC инструменты', + 'devOptions.toolPolicyDiagnostics.mcpAllowlists.title': 'Белые списки MCP', + 'devOptions.toolPolicyDiagnostics.mcpAllowlists.summary': + 'Включено: {enabled} · Серверы: ZXHOLD1ZX/ZXHOLD2ZX', + 'devOptions.toolPolicyDiagnostics.mcpAllowlists.unnamed': '<без имени>', + 'devOptions.toolPolicyDiagnostics.mcpAllowlists.allowDeny': + 'разрешить = {allowCount} запретить = {denyCount}', + 'devOptions.toolPolicyDiagnostics.mcpWriteAudit.title': 'MCP аудит записи', + 'devOptions.toolPolicyDiagnostics.mcpWriteAudit.summary': + 'Включено: {enabled} · Последние (24 часа): {recentRows}', + 'devOptions.toolPolicyDiagnostics.recentBlocked.title': 'Недавние заблокированные вызовы', + 'devOptions.toolPolicyDiagnostics.recentBlocked.empty': + 'Заблокированных вызовов не зарегистрировано.', + 'devOptions.toolPolicyDiagnostics.redactedSurfaces.title': 'Отредактированные поверхности', + 'devOptions.toolPolicyDiagnostics.redactedSurfaces.summary': + 'Возможность записи: {writeCount} · Поверхности политик: {policyCount}', + 'devOptions.debugPanels': 'Панели отладки', + 'devOptions.debugPanelsDesc': 'Флаги функций, инспекция состояния и инструменты отладки', + 'devOptions.webhooks': 'Вебхуки', + 'devOptions.webhooksDesc': 'Настройка и тестирование вебхуков', + 'devOptions.memoryInspection': 'Инспекция памяти', + 'devOptions.memoryInspectionDesc': 'Просмотр, запросы и управление записями памяти', + 'voice.pushToTalk': 'Нажми и говори', + 'voice.recording': 'Запись...', + 'voice.processing': 'Обработка...', + 'voice.languageHint': 'Язык', + 'misc.rehydrating': 'Загрузка данных...', + 'misc.checkingServices': 'Проверка сервисов...', + 'misc.serviceUnavailable': 'Сервис недоступен', + 'misc.somethingWentWrong': 'Что-то пошло не так', + 'misc.tryAgainLater': 'Попробуй позже.', + 'misc.restartApp': 'Перезапустить приложение', + 'misc.updateAvailable': 'Доступно обновление', + 'misc.updateNow': 'Обновить сейчас', + 'misc.updateLater': 'Позже', + 'misc.downloading': 'Загрузка...', + 'misc.installing': 'Установка...', + 'misc.beta': + 'OpenHuman находится в стадии раннего бета-тестирования. Делись отзывами и сообщай об ошибках — каждый репорт помогает нам двигаться быстрее.', + 'misc.betaFeedback': 'Отправить отзыв', + 'mnemonic.title': 'Фраза восстановления', + 'mnemonic.warning': 'Запиши эти слова по порядку и храни в надёжном месте.', + 'mnemonic.copyWarning': + 'Никогда не делись фразой восстановления. Любой, кто её знает, получит доступ к твоему аккаунту.', + 'mnemonic.copied': 'Фраза восстановления скопирована в буфер обмена', + 'mnemonic.reveal': 'Показать фразу', + 'mnemonic.revealPhrase': 'Показать фразу восстановления', + 'mnemonic.hidden': 'Фраза восстановления скрыта', + 'privacy.title': 'Конфиденциальность и безопасность', + 'privacy.description': 'Отчёт о данных, отправляемых во внешние сервисы.', + 'privacy.empty': 'Передачи данных во внешние сервисы не обнаружены.', + 'privacy.whatLeavesComputer': 'Что покидает твой компьютер', + 'privacy.loading': 'Загрузка данных о конфиденциальности...', + 'privacy.loadError': + 'Не удалось загрузить список. Настройки аналитики ниже по-прежнему работают.', + 'privacy.noCapabilities': 'Ни одна функция не передаёт данные.', + 'privacy.sentTo': 'Отправляется в', + 'privacy.leavesDevice': 'Покидает устройство', + 'privacy.staysLocal': 'Остаётся локально', + 'privacy.anonymizedAnalytics': 'Анонимная аналитика', + 'privacy.shareAnonymizedData': 'Делиться анонимными данными об использовании', + 'privacy.shareAnonymizedDataDesc': + 'Помоги улучшить OpenHuman, отправляя анонимные отчёты об ошибках и данные об использовании. Все данные полностью анонимизированы — личные данные, сообщения, ключи кошелька и информация о сессии никогда не собираются.', + 'privacy.meetingFollowUps': 'Действия после встреч', + 'privacy.autoHandoffMeet': 'Автоматически передавать транскрипты Google Meet оркестратору', + 'privacy.autoHandoffMeetDesc': + 'Когда звонок в Google Meet заканчивается, оркестратор OpenHuman может прочитать транскрипт и выполнить действия: составить сообщения, запланировать задачи или опубликовать итоги в Slack. По умолчанию выключено.', + 'privacy.analyticsDisclaimer': + 'Вся аналитика и отчёты об ошибках полностью анонимизированы. При включении мы собираем только информацию об ошибках, тип устройства и расположение файлов с ошибками. Мы никогда не получаем доступ к твоим сообщениям, данным сессии, ключам кошелька, API-ключам или любой личной информации. Ты можешь изменить этот параметр в любое время.', + 'settings.about.version': 'Версия', + 'settings.about.updateAvailable': 'доступна', + 'settings.about.softwareUpdates': 'Обновления ПО', + 'settings.about.lastChecked': 'Последняя проверка', + 'settings.about.checking': 'Проверка...', + 'settings.about.checkForUpdates': 'Проверить обновления', + 'settings.about.releases': 'Релизы', + 'settings.about.releasesDesc': 'Просмотр заметок к релизам и предыдущих сборок на GitHub.', + 'settings.about.openReleases': 'Открыть релизы на GitHub', + 'settings.about.connection': 'Соединение', + 'settings.about.connectionMode': 'Режим', + 'settings.about.connectionModeLocal': 'Локальный', + 'settings.about.connectionModeCloud': 'Облачный', + 'settings.about.connectionModeUnset': 'Не выбран', + 'settings.about.serverUrl': 'Сервер URL', + 'settings.about.serverUrlUnavailable': 'Недоступно', + 'settings.about.connectionHelperLocal': + 'Создается внутри процесса оболочкой Tauri при запуске приложения. Порт выбирается при запуске, поэтому этот URL меняется между запусками.', + 'settings.about.connectionHelperCloud': + 'Подключен к удаленному ядру. Измените это в BootCheck или в средстве выбора облачного режима.', + 'settings.heartbeat.title': 'Heartbeat и циклы', + 'settings.heartbeat.desc': 'Управляйте частотой фонового планирования и проверяйте карту циклов.', + 'settings.ledgerUsage.title': 'Журнал использования', + 'settings.ledgerUsage.desc': + 'Недавние расходы по кредитам, математические расчеты бюджета и предыстория. API читает бюджет.', + 'settings.costDashboard.title': 'Панель затрат', + 'settings.costDashboard.desc': + '7-дневные расходы и сжигание токенов по всему множеству, с указанием темпа бюджета и разбивки по моделям.', + 'settings.costDashboard.sevenDayCost': '7-дневная ежедневная стоимость', + 'settings.costDashboard.sevenDayTokens': '7-дневное использование токена', + 'settings.costDashboard.totalSpend': 'всего 7 дней', + 'settings.costDashboard.monthlyPace': 'Ежемесячный темп', + 'settings.costDashboard.budgetLimit': 'Ограничение бюджета', + 'settings.costDashboard.utilization': 'Использование', + 'settings.costDashboard.modelBreakdown': 'Разбивка по моделям', + 'settings.costDashboard.model': 'Модель', + 'settings.costDashboard.provider': 'Поставщик', + 'settings.costDashboard.cost': 'Расходы', + 'settings.costDashboard.tokens': 'Токены', + 'settings.costDashboard.requests': 'Запросы', + 'settings.costDashboard.percentOfTotal': '% от общего количества', + 'settings.costDashboard.inputTokens': 'Вход', + 'settings.costDashboard.outputTokens': 'Выход', + 'settings.costDashboard.budgetNormal': 'На ходу', + 'settings.costDashboard.budgetWarning': 'Предупреждение', + 'settings.costDashboard.budgetExceeded': 'Превышение бюджета', + 'settings.costDashboard.noBudget': 'Ограничение не установлено', + 'settings.costDashboard.noData': 'За последние 7 дней стоимость еще не зафиксирована.', + 'settings.costDashboard.noModels': 'Никакой активности модели за последние 7 дней.', + 'settings.costDashboard.loading': 'Загрузка сводки расходов…', + 'settings.costDashboard.disabledHint': + 'Панель затрат отключена в конфигурации. Установите [cost.dashboard] Enabled = True в config.toml, чтобы повторно включить.', + 'settings.costDashboard.subtitle': + 'Расходы в реальном времени и сжигание токенов по всему множеству. Бары автоматически обновляются каждые несколько секунд — перезагрузка страницы не требуется.', + 'settings.costDashboard.summaryAriaLabel': 'Сводные показатели затрат', + 'settings.costDashboard.lastSevenDays': 'последние 7 дней', + 'settings.costDashboard.utilizationOf': 'из', + 'settings.costDashboard.thisMonth': 'в этом месяце', + 'settings.costDashboard.monthlyPaceHint': + 'Прогнозируемые ежемесячные расходы при текущем ежедневном расходе (в среднем × 30).', + 'settings.costDashboard.budgetLimitHint': + 'Ежемесячный бюджет считывается из Cost.monthly_limit_usd в config.toml.', + 'settings.costDashboard.dailyTarget': 'Ежедневная цель', + 'settings.costDashboard.today': 'Сегодня', + 'settings.costDashboard.todayBadge': 'TODAY', + 'settings.costDashboard.unknownProvider': '—', + 'settings.costDashboard.justNow': 'Прямо сейчас', + 'settings.costDashboard.secondsAgo': '{value} сек. назад', + 'settings.costDashboard.minutesAgo': '{value}мин назад', + 'settings.costDashboard.hoursAgo': '{value}ч назад', + 'settings.costDashboard.daysAgo': '{value} дней назад', + 'settings.costDashboard.updated': 'Обновлено', + 'settings.costDashboard.refresh': 'Обновить', + 'settings.costDashboard.utcNote': 'Дни, разбитые по UTC', + 'settings.costDashboard.stackedNote': 'Вход + выход сложены', + 'settings.costDashboard.modelBreakdownHint': 'Совокупно за последние 7 дней.', + 'settings.costDashboard.noDataHint': + 'Отправьте сообщение агенту — использование токена при следующем вызове провайдера заполнит диаграмму в течение примерно 10 секунд.', + 'settings.search.title': 'Поисковая система', + 'settings.search.menuDesc': + 'По умолчанию используется поиск, управляемый OpenHuman, или подключите собственного провайдера с помощью ключа API.', + 'settings.search.description': + 'Выберите поисковую систему, которую использует агент, или полностью отключите инструменты поиска. Управляемый режим использует серверную часть OpenHuman (настройка не требуется). Parallel, Brave и Querit работают напрямую с вашего устройства, используя ваш API-ключ.', + 'settings.search.engineAria': 'Поисковая система', + 'settings.search.engineDisabledLabel': 'Disabled', + 'settings.search.engineDisabledDesc': + 'Удалить инструменты поиска из контекста агента и списка доступных инструментов.', + 'settings.search.engineManagedLabel': 'OpenHuman Управляемый', + 'settings.search.engineManagedDesc': + 'По умолчанию. Маршрутизируется через серверную часть OpenHuman — ключ API не ​​требуется.', 'settings.search.localManagedUnavailable': 'Поиск OpenHuman Managed недоступен для локальных пользователей. Добавьте свой ключ API Parallel или Brave, чтобы включить веб-поиск.', + 'settings.search.engineParallelLabel': 'Параллельно', + 'settings.search.engineParallelDesc': + 'Direct Parallel API: инструменты поиска, извлечения, общения, исследования, обогащения и набора данных.', + 'settings.search.engineBraveLabel': 'Brave Поиск', + 'settings.search.engineBraveDesc': + 'Прямой поиск Brave API: инструменты для Интернета, новостей, изображений и видео.', + 'settings.search.engineQueritLabel': 'Керит', + 'settings.search.engineQueritDesc': + 'Direct Querit API: поиск в Интернете с фильтрами по сайту, временному диапазону, стране и языку.', + 'settings.search.statusConfigured': 'Настроено', + 'settings.search.statusNeedsKey': 'Требуется ключ API', + 'settings.search.fallbackToManaged': + 'Ключ не настроен — поиск будет переведен в режим «Управляемый», пока ключ не будет сохранен.', + 'settings.search.getApiKey': 'Получите ключ API', + 'settings.search.save': 'Сохранить', + 'settings.search.clear': 'Очистить', + 'settings.search.show': 'Показать', + 'settings.search.hide': 'Скрыть', + 'settings.search.statusSaving': 'Сохранение…', + 'settings.search.statusSaved': 'Сохранено.', + 'settings.search.statusError': 'Ошибка', + 'settings.search.parallelKeyLabel': 'Parallel API ключ', + 'settings.search.braveKeyLabel': 'Brave Поиск API ключ', + 'settings.search.queritKeyLabel': 'Запросить ключ API', + 'settings.search.placeholderStored': '•••••••• (сохранено)', + 'settings.search.placeholderParallel': 'pk_...', + 'settings.search.placeholderBrave': 'BSA...', + 'settings.search.placeholderQuerit': 'Запросить ключ API', + 'settings.search.allowedSitesLabel': 'Разрешенные веб-сайты', + 'settings.search.allowedSitesHint': + 'Хосты, которые ассистент может открывать и читать — через веб-запросы и браузерный инструмент — по одному на строку, например reuters.com. Хост также охватывает все его поддомены. Веб-поиск не ограничивается этим списком.', + 'settings.search.allowedSitesAllOn': + 'Помощник может открыть любой общедоступный веб-сайт. Локальные и частные адреса остаются заблокированными.', + 'settings.search.allowedSitesPlaceholder': 'reuters.com\napnews.com\ngithub.com', + 'settings.search.allowedSitesSave': 'Сохранение веб-сайтов', + 'settings.search.accessModeAria': 'Режим веб-доступа', + 'settings.search.accessAllowAll': 'Разрешить все', + 'settings.search.accessCustom': 'Обычай', + 'settings.search.accessBlockAll': 'Блокировать все', + 'settings.search.accessBlockAllHint': + 'Весь веб-доступ заблокирован — помощник не может открыть или прочитать какой-либо веб-сайт.', + 'settings.embeddings.title': 'Эмбеддинги', + 'settings.embeddings.description': + 'Выберите провайдера эмбеддингов, который преобразует память в векторы для семантического поиска. Изменение провайдера, модели или размерности делает сохранённые векторы недействительными и требует полного сброса памяти.', + 'settings.embeddings.providerAria': 'Провайдер эмбеддингов', + 'settings.embeddings.statusConfigured': 'Настроено', + 'settings.embeddings.statusNeedsKey': 'Нужен API-ключ', + 'settings.embeddings.apiKeyLabel': 'API-ключ {provider}', + 'settings.embeddings.placeholderStored': '•••••••• (сохранено)', + 'settings.embeddings.placeholderKey': 'Вставьте API-ключ…', + 'settings.embeddings.keyStoredEncrypted': + 'Ваш API-ключ хранится в зашифрованном виде на этом устройстве.', + 'settings.embeddings.show': 'Показать', + 'settings.embeddings.hide': 'Скрыть', + 'settings.embeddings.save': 'Сохранить', + 'settings.embeddings.clear': 'Очистить', + 'settings.embeddings.model': 'Модель', + 'settings.embeddings.dimensions': 'Размерность', + 'settings.embeddings.customEndpoint': 'Пользовательский эндпоинт', + 'settings.embeddings.customModelPlaceholder': 'Название модели', + 'settings.embeddings.customDimsPlaceholder': 'Разм.', + 'settings.embeddings.applyCustom': 'Применить', + 'settings.embeddings.testConnection': 'Проверить подключение', + 'settings.embeddings.testing': 'Проверка…', + 'settings.embeddings.testSuccess': 'Подключено — {dims} измерений', + 'settings.embeddings.testFailed': 'Ошибка: {error}', + 'settings.embeddings.saving': 'Сохранение…', + 'settings.embeddings.saved': 'Сохранено.', + 'settings.embeddings.errorPrefix': 'Ошибка', + 'settings.embeddings.wipeTitle': 'Сбросить векторы памяти?', + 'settings.embeddings.wipeBody': + 'Изменение провайдера эмбеддингов, модели или размерности удалит все сохранённые векторы памяти. Память должна быть перестроена, прежде чем поиск снова заработает. Это действие нельзя отменить.', + 'settings.embeddings.cancel': 'Отмена', + 'settings.embeddings.confirmWipe': 'Очистить и применить', + 'settings.embeddings.setupTitle': 'Настройка {provider}', + 'settings.embeddings.saveAndSwitch': 'Сохранить и переключить', + 'settings.embeddings.optional': 'необязательно', + 'settings.embeddings.vectorSearchDisabled': + 'Векторный поиск отключен. При вызове из памяти будут использоваться только сопоставление ключевых слов и актуальность — без семантического ранжирования.', + 'settings.embeddings.clearKey': 'Удалить API-ключ', + 'pages.settings.ai.embeddings': 'Эмбеддинги', + 'pages.settings.ai.embeddingsDesc': 'Модель векторного кодирования для извлечения из памяти', + 'mcp.alphaBadge': 'Альфа', + 'mcp.alphaBannerText': + 'Поддержка сервера MCP находится в ранней альфа-версии. Реестр Smithery, процесс установки и подключение инструментов могут работать неправильно или изменять форму между выпусками.', + 'mcp.toolList.noTools': 'Инструменты недоступны.', + 'mcp.setup.secretDialog.title': 'MCP Настройка — введите секретный код', + 'mcp.setup.secretDialog.bodyPrefix': 'Агенту установки MCP требуется', + 'mcp.setup.secretDialog.bodySuffix': + '. Ваше значение отправляется непосредственно в основной процесс и никогда не попадает в диалог AI.', + 'mcp.setup.secretDialog.inputLabel': 'Значение', + 'mcp.setup.secretDialog.inputPlaceholder': 'Вставить сюда', + 'mcp.setup.secretDialog.show': 'Показать', + 'mcp.setup.secretDialog.hide': 'Скрыть', + 'mcp.setup.secretDialog.submit': 'Отправить', + 'mcp.setup.secretDialog.cancel': 'Отмена', + 'mcp.setup.secretDialog.submitting': 'Отправка…', + 'mcp.setup.secretDialog.errorPrefix': 'Не удалось отправить:', + 'mcp.setup.secretDialog.privacyNote': + 'Хранится в зашифрованном виде в локальной таблице секретов MCP. Никогда не регистрировался и не отправлялся модели.', + 'devices.betaBadge': 'Бета-версия', + 'devices.betaText': + 'Эта функция находится в стадии бета-тестирования. Подключите iPhone к этому OpenHuman для использования в качестве удалённого клиента.', 'devices.comingSoonDescription': 'Сопряжение устройств скоро появится. Эта страница будет местом для подключения iPhone и управления подключёнными устройствами.', + 'devices.title': 'Устройства', + 'devices.pairIphone': 'Сопряжение с iPhone', + 'devices.noPaired': 'Нет сопряженных устройств', + 'devices.emptyState': + 'Отсканируйте QR-код на своём iPhone, чтобы подключить его к текущей сессии OpenHuman.', + 'devices.devicePairedTitle': 'Устройство сопряжено.', + 'devices.devicePairedMessage': 'iPhone успешно подключен.', + 'devices.deviceRevokedTitle': 'Устройство отозвано.', + 'devices.deviceRevokedMessage': '{label} удалено.', + 'devices.revokeFailedTitle': 'Не удалось отозвать', + 'devices.online': 'В сети', + 'devices.offline': 'Не в сети', + 'devices.lastSeenNever': 'Никогда', + 'devices.lastSeenNow': 'Только сейчас', + 'devices.lastSeenMinutes': '{count}м назад', + 'devices.lastSeenHours': '{count}ч назад', + 'devices.lastSeenDays': '{count}д назад', + 'devices.revoke': 'Отозвать', + 'devices.revokeAria': 'Отозвать {label}', + 'devices.confirmRevokeTitle': 'Отозвать устройство?', + 'devices.confirmRevokeBody': '{label} больше не сможет подключиться. Это невозможно отменить.', + 'devices.loadFailed': 'Не удалось загрузить устройства: {message}', + 'devices.pairModal.title': 'Сопряжение с iPhone', + 'devices.pairModal.loading': 'Генерация кода сопряжения…', + 'devices.pairModal.instructions': + 'Откройте приложение OpenHuman на iPhone и отсканируйте этот код.', + 'devices.pairModal.expiresIn': 'Срок действия кода истекает через ~{count} минуту.', + 'devices.pairModal.expiresInPlural': 'Срок действия кода истекает через ~{count} минут.', + 'devices.pairModal.showDetails': 'Показать подробности', + 'devices.pairModal.hideDetails': 'Скрыть подробности', + 'devices.pairModal.channelId': 'Идентификатор канала', + 'devices.pairModal.pairingUrl': 'Сопряжение URL', + 'devices.pairModal.expiredTitle': 'Срок действия QR code истек', + 'devices.pairModal.expiredBody': 'Создайте новый код для продолжения сопряжения.', + 'devices.pairModal.generateNewCode': 'Создать новый код.', + 'devices.pairModal.successTitle': 'Соединение с iPhone.', + 'devices.pairModal.autoClose': 'Автоматическое закрытие…', + 'devices.pairModal.errorPrefix': 'Не удалось создать соединение: {message}', + 'devices.pairModal.errorTitle': 'Что-то пошло не так', + 'devices.pairModal.copyUrl': 'Копировать', + 'mcp.catalog.searchAria': 'Поиск в каталоге кузнечного дела', + 'mcp.catalog.searchPlaceholder': 'Поиск в каталоге кузнечного дела...', + 'mcp.catalog.loadFailed': 'Не удалось загрузить каталог.', + 'mcp.catalog.noResults': 'Серверы не найдены.', + 'mcp.catalog.noResultsFor': 'Серверы для «{query}» не найдены.', + 'mcp.catalog.loadMore': 'Загрузить больше', + 'mcp.configAssistant.title': 'Помощник по настройке', + 'mcp.configAssistant.empty': + 'Спросите о конфигурации, необходимых переменных окружения или этапах настройки.', + 'mcp.configAssistant.suggestedValues': 'Рекомендуемые значения:', + 'mcp.configAssistant.valueHidden': '(значение скрыто)', + 'mcp.configAssistant.applySuggested': 'Примените предложенные значения.', + 'mcp.configAssistant.reinstallHint': 'Переустановите с этими значениями, чтобы применить их.', + 'mcp.configAssistant.thinking': 'Думаю...', + 'mcp.configAssistant.inputPlaceholder': + 'Задайте вопрос (Enter для отправки, Shift+Enter для перевода строки)', + 'mcp.configAssistant.send': 'Отправить', + 'mcp.configAssistant.failedResponse': 'Не удалось получить ответ', + 'mcp.toolList.availableSingular': 'Доступен инструмент {count}', + 'mcp.toolList.availablePlural': 'Доступен инструмент {count}', + 'mcp.toolList.tryTool': 'Пытаться', + 'mcp.toolList.tryToolAria': 'Открытая площадка для исполнения {name}', + 'mcp.playground.title': 'Запустите {name}', + 'mcp.playground.close': 'Закрыть игровую площадку', + 'mcp.playground.inputSchema': 'Входная схема', + 'mcp.playground.argsLabel': 'Аргументы (JSON)', + 'mcp.playground.argsHelp': + 'Введите JSON, соответствующий входной схеме. Пустой ввод рассматривается как {}.', + 'mcp.playground.runShortcut': '⌘/Ctrl + Enter для запуска', + 'mcp.playground.format': 'Формат', + 'mcp.playground.invalidJson': 'Неверный JSON', + 'mcp.playground.run': 'Запустить инструмент', + 'mcp.playground.running': 'Бег…', + 'mcp.playground.result': 'Результат', + 'mcp.playground.resultError': 'Инструмент возвратил ошибку', + 'mcp.playground.copyResult': 'Копировать результат', + 'mcp.playground.copied': 'Скопировано', + 'mcp.playground.history': 'История', + 'mcp.playground.historyEmpty': 'В этом сеансе пока нет вызовов.', + 'mcp.playground.historyLoad': 'Нагрузка', + 'mcp.playground.unexpectedError': 'Неожиданная ошибка при вызове инструмента.', + 'mcp.catalog.deployed': 'Развернуто', + 'mcp.catalog.installCount': '{count} устанавливает', + 'app.update.dismissNotification': 'Отклонить уведомление об обновлении', + 'bootCheck.rpcAuthSuffix': 'каждый раз RPC.', + 'app.localAiDownload.expandAria': 'Развернуть ход загрузки', + 'app.localAiDownload.collapseAria': 'Свернуть ход загрузки', + 'app.localAiDownload.dismissAria': 'Закрыть уведомление о загрузке.', + 'mobile.nav.ariaLabel': 'Мобильная навигация', + 'progress.stepsAria': 'Шаги выполнения', + 'progress.stepAria': 'Шаг {current} из {total}', + 'workspace.vaultsTitle': 'Хранилища знаний', + 'workspace.vaultsDesc': + 'Укажите локальную папку; файлы разбиваются на части и зеркально отображаются в памяти.', + 'calls.title': 'Звонки', + 'calls.comingSoonBody': 'Скоро появятся звонки с помощью ИИ. Следите за обновлениями.', + 'art.rotatingTetrahedronAria': 'Вращающийся космический корабль в виде перевернутого тетраэдра', + 'mcp.installed.title': 'Установлен', + 'mcp.installed.browseCatalog': 'Просмотр каталога', + 'mcp.installed.empty': 'Серверы MCP пока не установлены.', + 'mcp.installed.toolSingular': '{count} инструмент', + 'mcp.installed.toolPlural': '{count} инструменты', + 'mcp.health.title': 'Здоровье', + 'mcp.health.summaryAria': 'Сводная информация о состоянии соединения MCP', + 'mcp.health.connectedCount': '{count} подключен', + 'mcp.health.connectingCount': '{count} подключение', + 'mcp.health.errorCount': 'Ошибка {count}', + 'mcp.health.disconnectedCount': '{count} простой', + 'mcp.health.retryAll': 'Повторить все ({count})', + 'mcp.health.retryAllAria': 'Повторить попытку на всех серверах {count} с ошибкой MCP.', + 'mcp.health.disconnectAll': 'Отключить все ({count})', + 'mcp.health.disconnectAllAria': 'Отключите все подключенные к {count} серверы MCP.', + 'mcp.health.disconnectConfirm.title': 'Отключить все серверы MCP?', + 'mcp.health.disconnectConfirm.body': + 'Это отключит {count}, подключенные в данный момент серверы MCP. Установленные конфигурации и секреты сохраняются; вы можете повторно подключить любой сервер позже.', + 'mcp.health.disconnectConfirm.cancel': 'Отмена', + 'mcp.health.disconnectConfirm.confirm': 'Отключить все', + 'mcp.health.opErrorGeneric': 'Массовая операция не удалась. Смотрите журналы.', + 'mcp.health.bulkPartialFailure': '{failed} из {total} серверов дали сбой. Смотрите журналы.', + 'mcp.installed.search.landmarkAria': 'Поиск установленных серверов MCP', + 'mcp.installed.search.inputAria': 'Фильтровать установленные серверы MCP по имени', + 'mcp.installed.search.placeholder': 'Фильтровать серверы…', + 'mcp.installed.search.clearAria': 'Очистить фильтр', + 'mcp.installed.search.countMatches': '{shown} из серверов {total}', + 'mcp.installed.search.noMatches': 'Нет серверов, соответствующих «{query}».', + 'mcp.inventory.openButton': 'Инвентарь', + 'mcp.inventory.openAria': 'Откройте общую панель инвентаря MCP.', + 'mcp.inventory.title': 'Общий инвентарь MCP', + 'mcp.inventory.subtitle': + 'Экспортируйте установленные серверы MCP в виде переносимого, несекретного манифеста или импортируйте его у товарища по команде. Секретные значения env никогда не включаются и не импортируются.', + 'mcp.inventory.close': 'Закрыть панель инвентаря', + 'mcp.inventory.tablistAria': 'Разделы инвентаря', + 'mcp.inventory.tab.export': 'Экспорт', + 'mcp.inventory.tab.import': 'Импорт', + 'mcp.inventory.export.empty': + 'Серверы MCP пока не установлены — экспортировать нечего. Сначала установите один из каталога.', + 'mcp.inventory.export.privacyTitle': 'Что в этом манифесте', + 'mcp.inventory.export.privacyBody': + 'Только имена серверов, полные имена, ИМЕНА КЛЮЧЕЙ переменных env и несекретная конфигурация. Секретные значения, идентификаторы вашего компьютера и временные метки каждой установки намеренно удаляются.', + 'mcp.inventory.export.serverCount': 'Серверы {count} в этом манифесте', + 'mcp.inventory.export.copy': 'Копировать', + 'mcp.inventory.export.copied': 'Скопировано', + 'mcp.inventory.export.copyAria': 'Скопируйте манифест JSON в буфер обмена.', + 'mcp.inventory.export.download': 'Скачать', + 'mcp.inventory.export.downloadAria': 'Загрузите манифест в виде файла JSON.', + 'mcp.inventory.import.trustTitle': 'Считайте импортированные манифесты ненадежным кодом.', + 'mcp.inventory.import.trustBody': + 'Сервер MCP — это инструмент, который вы предоставляете своему агенту. Импортируйте манифесты только из источников, которым вы доверяете. Каждая установка требует вашего явного щелчка мышью; ничего не устанавливается автоматически.', + 'mcp.inventory.import.pasteLabel': 'Вставить манифест JSON', + 'mcp.inventory.import.pastePlaceholder': 'Вставьте манифест сюда или загрузите файл.json ниже.', + 'mcp.inventory.import.preview': 'Предварительный просмотр', + 'mcp.inventory.import.clear': 'Прозрачный', + 'mcp.inventory.import.uploadFile': 'или загрузите файл.json', + 'mcp.inventory.import.uploadFileAria': 'Загрузите файл манифеста.json.', + 'mcp.inventory.import.fileTooLarge': 'Файл слишком велик (более 1 МБ). Отказ загружаться.', + 'mcp.inventory.import.fileReadFailed': 'Не удалось прочитать файл.', + 'mcp.inventory.import.parseErrorPrefix': 'Не удалось разобрать манифест:', + 'mcp.inventory.import.previewHeading': 'Предварительный просмотр', + 'mcp.inventory.import.previewCounts': 'Серверы {total} — {newly} новый, {already} уже установлен', + 'mcp.inventory.import.previewEmpty': 'Манифест не содержит серверов.', + 'mcp.inventory.import.exportedFrom': 'Экспортировано из {exporter}.', + 'mcp.inventory.import.exportedAt': 'в {when}', + 'mcp.inventory.import.statusNew': 'Новый', + 'mcp.inventory.import.statusAlreadyInstalled': 'Уже установлено', + 'mcp.inventory.import.envKeysLabel': 'Ключи окружения', + 'mcp.inventory.import.install': 'Установить', + 'mcp.inventory.import.installAria': 'Установите {name} из этого манифеста.', + 'mcp.inventory.import.skipped': 'skipped', + 'mcp.inventory.parseError.empty': 'Манифест пуст.', + 'mcp.inventory.parseError.invalidJson': 'Неверный JSON.', + 'mcp.inventory.parseError.rootNotObject': 'Манифест должен быть объектом JSON в корне.', + 'mcp.inventory.parseError.unsupportedSchema': + 'Неподдерживаемая схема манифеста — этот файл не был создан совместимым экспортером.', + 'mcp.inventory.parseError.missingExportedAt': 'Поле `exported_at` отсутствует или неверно.', + 'mcp.inventory.parseError.missingExportedBy': 'Поле `exported_by` отсутствует или неверно.', + 'mcp.inventory.parseError.invalidServers': 'Массив `servers` отсутствует или недействителен.', + 'mcp.inventory.parseError.serverNotObject': 'Запись сервера не является объектом.', + 'mcp.inventory.parseError.serverMissingQualifiedName': + 'В записи сервера отсутствует квалифицированное_имя.', + 'mcp.inventory.parseError.serverMissingDisplayName': + 'В записи сервера отсутствует отображаемое_имя.', + 'mcp.inventory.parseError.serverEnvKeysNotArray': + 'Запись сервера имеет поле env_keys, которое не является массивом строк.', + 'mcp.inventory.parseError.serverContainsEnv': + 'Запись сервера содержит карту значений `env`. Отказ от импорта — манифесты должны содержать только env_keys (имена), а не секретные значения.', + 'mcp.inventory.parseError.duplicateQualifiedName': + 'В манифесте найдено повторяющееся квалифицированное_имя. Каждый сервер должен появиться не более одного раза.', + 'mcp.tab.loading': 'Загрузка серверов MCP...', + 'mcp.tab.emptyDetail': 'Выберите сервер или просмотрите каталог.', + 'mcp.install.loadingDetail': 'Загрузка сведений о сервере...', + 'mcp.install.back': 'Вернитесь назад', + 'mcp.install.title': 'Установите {name}', + 'mcp.install.requiredEnv': 'Необходимые переменные среды', + 'mcp.install.enterValue': 'Введите {key}', + 'mcp.install.show': 'Показать', + 'mcp.install.hide': 'Скрыть', + 'mcp.install.configLabel': 'Конфигурация (необязательный JSON)', + 'mcp.install.configPlaceholder': '{"ключ": "значение"}', + 'mcp.install.missingRequired': 'Требуется «{key}»', + 'mcp.install.invalidJson': 'Конфигурация JSON недействительна. JSON', + 'mcp.install.failedDetail': 'Не удалось загрузить сведения о сервере.', + 'mcp.install.failedInstall': 'Не удалось установить', + 'mcp.install.button': 'Установить', + 'mcp.install.installing': 'Установка...', + 'mcp.detail.suggestedEnvReady': 'Рекомендуемые значения среды готовы', + 'mcp.detail.suggestedEnvBody': + 'Чтобы применить их, переустановите этот сервер с предложенными значениями: {keys}.', + 'mcp.detail.connect': 'Подключитесь', + 'mcp.detail.connecting': 'Подключение...', + 'mcp.detail.disconnect': 'Отключите', + 'mcp.detail.hideAssistant': 'Скрыть помощника', + 'mcp.detail.helpConfigure': 'Помогите мне настроить', + 'mcp.detail.confirmUninstall': 'Подтвердить удаление?', + 'mcp.detail.confirmUninstallAction': 'Да, удалить', + 'mcp.detail.uninstall': 'Удалить', + 'mcp.detail.envVars': 'Переменные среды', + 'mcp.detail.tools': 'Инструменты', + 'onboarding.skipForNow': 'Пропустить сейчас', + 'onboarding.localAI.continueWithCloud': 'Продолжить с Облако', + 'onboarding.localAI.useLocalAnyway': + 'Всё равно использовать локальный ИИ (не рекомендуется для вашего устройства)', + 'onboarding.localAI.useLocalInstead': 'Использовать локальный ИИ (подключить Ollama сейчас)', + 'onboarding.localAI.setupIssue': 'При настройке локального AI возникла проблема', + 'autonomy.title': 'Автономия агента.', + 'autonomy.maxActionsLabel': 'Максимальное количество действий в час.', + 'autonomy.maxActionsHelp': + 'Максимальное количество действий инструментов, которое агент может выполнить за скользящий час. Новое значение применяется к следующему чату. Задания cron и слушатели каналов сохраняют текущий лимит до перезапуска OpenHuman.', + 'autonomy.statusSaving': 'Сохранение…', + 'autonomy.statusSaved': 'Сохранено.', + 'autonomy.statusFailed': 'Ошибка', + 'autonomy.unlimitedNote': 'Unlimited — ограничение скорости отключено.', + 'autonomy.invalidIntegerMsg': + 'Должно быть положительным целым числом (используйте пресет «Без ограничений» для отключения лимита).', + 'autonomy.presetUnlimited': 'Неограниченно (по умолчанию)', + 'triggers.toggleFailed': '{action} не удалось для {trigger}: {message}', + 'settings.ai.overview': 'Обзор AI-системы', + 'settings.ai.configStatus': 'Статус конфигурации', + 'settings.ai.fallbackMode': 'Резервный режим', + 'settings.ai.loadedFromRuntime': 'Загружено из среды выполнения', + 'settings.ai.loadingDuration': 'Время загрузки', + 'settings.ai.localRuntime': 'Локальная среда выполнения модели', + 'settings.ai.openManager': 'Открыть менеджер', + 'settings.ai.retryDownload': 'Повторить загрузку', + 'settings.ai.state': 'Состояние', + 'settings.ai.targetModel': 'Целевая модель', + 'settings.ai.download': 'Скачать', + 'settings.ai.localModelUnavailable': 'Статус локальной модели недоступен.', + 'settings.ai.soulConfig': 'Конфигурация персоны SOUL', + 'settings.ai.refreshing': 'Обновление...', + 'settings.ai.refreshSoul': 'Обновить SOUL', + 'settings.ai.loadingSoul': 'Загрузка конфигурации SOUL...', + 'settings.ai.identity': 'Идентичность', + 'settings.ai.personality': 'Личность', + 'settings.ai.safetyRules': 'Правила безопасности', + 'settings.ai.source': 'Источник', + 'settings.ai.loaded': 'Загружено', + 'settings.ai.toolsConfig': 'Конфигурация TOOLS', + 'settings.ai.refreshTools': 'Обновить TOOLS', + 'settings.ai.toolsAvailable': 'Доступно инструментов', + 'settings.ai.tools': 'инструменты', + 'settings.ai.activeSkills': 'Активные навыки', + 'settings.ai.skills': 'навыки', + 'settings.ai.skillsOverview': 'Обзор навыков', + 'settings.ai.refreshingAll': 'Обновление всего...', + 'settings.ai.refreshAll': 'Обновить всю конфигурацию AI', + 'settings.notifications.suppressAll': 'Отключить все уведомления', + 'settings.notifications.suppressAllDesc': + 'Блокировать все всплывающие уведомления ОС из встроенных приложений независимо от фокуса.', + 'settings.notifications.toggleDnd': 'Включить/выключить «Не беспокоить»', + 'settings.notifications.categories': 'Категории', + 'settings.notifications.categoryFooter': + 'Отключение категории останавливает появление новых уведомлений этого типа в центре уведомлений. Существующие уведомления остаются до их очистки.', + 'settings.billing.movedToWeb': 'Оплата перенесена на сайт', + 'settings.billing.openDashboard': 'Открыть панель оплаты', + 'settings.billing.movedToWebDesc': + 'Изменение подписки, способы оплаты, кредиты и счета теперь управляются в TinyHumans на сайте.', + 'settings.billing.backToSettings': 'Назад к настройкам', + 'settings.billing.openingBrowser': 'Открытие браузера...', + 'settings.billing.browserNotOpen': 'Если браузер не открылся, используй кнопку выше.', + 'settings.billing.browserOpenFailed': 'Браузер не открылся автоматически. Используй кнопку выше.', + 'settings.tools.chooseCapabilities': + 'Выбери, какие возможности OpenHuman может использовать от твоего имени.', + 'settings.tools.saveChanges': 'Сохранить изменения', + 'settings.tools.preferencesSaved': 'Настройки сохранены', + 'settings.tools.saveFailed': 'Не удалось сохранить настройки. Попробуй ещё раз.', + 'settings.screenAwareness.mode': 'Режим', + 'settings.screenAwareness.allExceptBlacklist': 'Всё, кроме исключений', + 'settings.screenAwareness.whitelistOnly': 'Только разрешённые', + 'settings.screenAwareness.screenMonitoring': 'Мониторинг экрана', + 'settings.screenAwareness.saveSettings': 'Сохранить настройки', + 'settings.screenAwareness.session': 'Сессия', + 'settings.screenAwareness.status': 'Статус', + 'settings.screenAwareness.active': 'Активно', + 'settings.screenAwareness.stopped': 'Остановлено', + 'settings.screenAwareness.remaining': 'Осталось', + 'settings.screenAwareness.startSession': 'Начать сессию', + 'settings.screenAwareness.stopSession': 'Завершить сессию', + 'settings.screenAwareness.analyzeNow': 'Анализировать сейчас', + 'settings.screenAwareness.macosOnly': + 'Захват экрана и управление разрешениями поддерживаются только на macOS.', + 'connections.comingSoon': 'Скоро', + 'connections.setUp': 'Настроить', + 'connections.configured': 'Настроено', + 'connections.unavailable': 'Недоступно', + 'connections.checking': 'Проверка…', + 'connections.walletConfigured': + 'Локальные идентификаторы EVM, BTC, Solana и Tron настроены на основе твоей фразы восстановления.', + 'connections.walletReady': + 'Настрой локальные идентификаторы EVM, BTC, Solana и Tron из одной фразы восстановления.', + 'connections.walletError': + 'Не удалось проверить статус кошелька. Нажми, чтобы повторить в панели фразы восстановления.', + 'connections.walletChecking': 'Проверка статуса кошелька...', + 'connections.walletIdentities': 'Идентификаторы кошелька', + 'connections.walletDerived': + 'Вычислено локально из фразы восстановления и хранится только как безопасные метаданные.', + 'connections.privacySecurity': 'Конфиденциальность и безопасность', + 'connections.privacySecurityDesc': + 'Все данные и учётные данные хранятся локально по политике нулевого хранения. Информация зашифрована и никогда не передаётся третьим лицам.', + 'channels.status.connecting': 'Подключение', + 'channels.status.notConfigured': 'Не настроено', + 'channels.noActiveRoute': 'Нет активного маршрута', + 'channels.activeRoute': 'Активный маршрут', + 'channels.loadingDefinitions': 'Загрузка определений каналов...', + 'channels.channelConnections': 'Подключения каналов', + 'channels.configureAuthModes': 'Настрой режимы авторизации для каждого канала связи.', + 'channels.configNotAvailable': 'Конфигурация для', + 'channels.channel': 'канал', + 'devOptions.coreModeNotSet': 'Режим ядра: не задан', + 'devOptions.coreModeNotSetDesc': + 'Выбор в загрузочном экране ещё не подтверждён. Используй «Сменить режим» для выбора между «Локальный» и «Облако».', + 'devOptions.local': 'Локальный', + 'devOptions.embeddedCoreSidecar': 'Встроенный процесс ядра', + 'devOptions.sidecarSpawned': 'Запущен внутри процесса Tauri при старте приложения.', + 'devOptions.cloud': 'Облако', + 'devOptions.remoteCoreRpc': 'Удалённый RPC ядра', + 'devOptions.token': 'Токен', + 'devOptions.tokenNotSet': 'не задан — RPC вернёт 401', + 'devOptions.triggerSentryTest': 'Тест Sentry (staging)', + 'devOptions.triggerSentryTestDesc': + 'Отправляет тегированную ошибку для проверки пайплайна Sentry. Issue #1072 — удалить после проверки.', + 'devOptions.sendTestEvent': 'Отправить тестовое событие', + 'devOptions.sending': 'Отправка…', + 'devOptions.eventSent': 'Событие отправлено', + 'devOptions.sentryDisabled': '(идентификатор отсутствует — охрана отключена в этой сборке)', + 'devOptions.failed': 'Ошибка', + 'devOptions.appLogs': 'Логи приложения', + 'devOptions.appLogsDesc': + 'Открыть папку с ежедневными лог-файлами. Прикрепляй последний файл при сообщении об ошибке.', + 'devOptions.openLogsFolder': 'Открыть папку с логами', + 'mnemonic.phraseSaved': 'Фраза восстановления сохранена', + 'mnemonic.walletReady': 'Мультичейн-идентификаторы готовы. Возврат к настройкам...', + 'mnemonic.writeDownWords': 'Запиши эти', + 'mnemonic.wordsInOrder': + 'слова по порядку и храни в надёжном месте. Эта фраза защищает твой локальный ключ шифрования и идентификаторы кошельков EVM, BTC, Solana и Tron.', + 'mnemonic.cannotRecover': + 'Эту фразу невозможно восстановить при потере — она должна оставаться только на твоём устройстве.', + 'mnemonic.copyToClipboard': 'Скопировать в буфер обмена', + 'mnemonic.alreadyHavePhrase': 'У меня уже есть фраза восстановления', + 'mnemonic.consentSaved': + 'Я сохранил эту фразу и соглашаюсь использовать её для настройки локального кошелька', + 'mnemonic.enterPhraseToRestore': + 'Введи фразу восстановления ниже для восстановления идентификаторов кошелька, или вставь полную фразу в любое поле (12 слов для новых бэкапов; фразы из 24 слов от старых версий тоже работают).', + 'mnemonic.words': 'Слова', + 'mnemonic.validPhrase': 'Верная фраза восстановления', + 'mnemonic.generateNewPhrase': 'Сгенерировать новую фразу восстановления', + 'mnemonic.securingData': 'Защита данных...', + 'mnemonic.saveRecoveryPhrase': 'Сохранить фразу восстановления', + 'mnemonic.userNotLoaded': 'Пользователь не загружен. Войди снова или обнови страницу.', + 'mnemonic.invalidPhrase': 'Неверная фраза восстановления. Проверь слова и попробуй снова.', + 'mnemonic.somethingWentWrong': 'Что-то пошло не так. Попробуй ещё раз.', + 'team.failedToCreate': 'Не удалось создать команду', + 'team.invalidInviteCode': 'Неверный или устаревший код приглашения', + 'team.failedToSwitch': 'Не удалось переключить команду', + 'team.failedToLeave': 'Не удалось покинуть команду', + 'team.role.owner': 'Владелец', + 'team.role.admin': 'Администратор', + 'team.role.billingManager': 'Менеджер по оплате', + 'team.role.member': 'Участник', + 'team.active': 'Активная', + 'team.personalTeam': 'Личная команда', + 'team.manageTeam': 'Управление командой', + 'team.switching': 'Переключение...', + 'team.switch': 'Переключить', + 'team.leaving': 'Выход...', + 'team.leave': 'Покинуть', + 'team.yourTeams': 'Твои команды', + 'team.createNewTeam': 'Создать новую команду', + 'team.teamName': 'Название команды', + 'team.creating': 'Создание...', + 'team.joinExistingTeam': 'Вступить в существующую команду', + 'team.inviteCode': 'Код приглашения', + 'team.joining': 'Вход...', + 'team.join': 'Вступить', + 'team.leaveTeam': 'Покинуть команду', + 'team.confirmLeave': 'Ты уверен, что хочешь покинуть', + 'team.leaveWarning': + 'Ты потеряешь доступ к команде и всем её ресурсам. Для повторного входа потребуется новое приглашение.', + 'team.management': 'Управление командой', + 'team.notFound': 'Команда не найдена', + 'team.accessDenied': 'Доступ запрещён', + 'team.members': 'Участники', + 'team.membersDesc': 'Управление участниками и ролями команды', + 'team.invites': 'Приглашения', + 'team.invitesDesc': 'Создание кодов приглашения и управление ими', + 'team.settings': 'Настройки группы', + 'team.settingsDesc': 'Изменить название и настройки команды', + 'team.editSettings': 'Изменить настройки группы', + 'team.enterName': 'Введите название команды', + 'team.saving': 'Сохранение...', + 'team.saveChanges': 'Сохранить изменения', + 'team.delete': 'Удалить команду', + 'team.deleteDesc': 'Удалить эту команду навсегда', + 'team.deleting': 'Удаление...', + 'team.failedToUpdate': 'Не удалось обновить команду.', + 'team.failedToDelete': 'Не удалось удалить команду.', + 'team.manageTitle': 'Управление {name}', + 'team.planCreated': '{plan} План • Создано {date}', + 'team.confirmDelete': 'Вы уверены, что хотите удалить {name}?', + 'team.deleteWarning': 'Это действие нельзя отменить. Все данные команды будут навсегда удалены.', + 'voice.title': 'Голосовой ввод', + 'voice.settings': 'Настройки голоса', + 'voice.settingsDesc': 'Удерживай горячую клавишу для диктовки и вставки текста в активное поле.', + 'voice.hotkey': 'Горячая клавиша', + 'voice.activationMode': 'Режим активации', + 'voice.tapToToggle': 'Нажать для переключения', + 'voice.writingStyle': 'Стиль письма', + 'voice.verbatimTranscription': 'Дословная транскрипция', + 'voice.naturalCleanup': 'Естественная обработка', + 'voice.autoStart': 'Запускать голосовой сервер автоматически вместе с ядром', + 'voice.customDictionary': 'Пользовательский словарь', + 'voice.customDictionaryDesc': + 'Добавляй имена, технические термины и специальные слова для улучшения точности распознавания.', + 'voice.addWord': 'Добавить слово...', + 'voice.sttDisabled': + 'Голосовой ввод отключён, пока локальная STT-модель не загружена и не готова.', + 'voice.openLocalAiModel': 'Открыть локальную AI-модель', + 'voice.serverRestarted': 'Голосовой сервер перезапущен с новыми настройками.', + 'voice.settingsSaved': 'Настройки голоса сохранены.', + 'voice.serverStarted': 'Голосовой сервер запущен.', + 'voice.serverStopped': 'Голосовой сервер остановлен.', + 'voice.saveVoiceSettings': 'Сохранить настройки голоса', + 'voice.startVoiceServer': 'Запустить голосовой сервер', + 'voice.stopVoiceServer': 'Остановить голосовой сервер', + 'voice.debugTitle': 'Отладка голоса', + 'voice.failedToLoadSettings': 'Не удалось загрузить голосовые настройки.', + 'voice.failedToSaveSettings': 'Не удалось сохранить голосовые настройки.', + 'voice.failedToStartServer': 'Не удалось запустить голосовой сервер.', + 'voice.failedToStopServer': 'Не удалось остановить голосовой сервер.', + 'voice.sttDisabledPrefix': + 'Голосовой ввод отключён, пока не загружена локальная модель STT. Используйте', + 'voice.sttDisabledSuffix': 'выше, чтобы установить Whisper.', + 'voice.debug.failedToLoadVoiceDebugData': 'Не удалось загрузить данные голосовой отладки.', + 'voice.debug.settingsSaved': 'Настройки отладки сохранены.', + 'voice.debug.failedToSaveSettings': 'Не удалось сохранить голосовые настройки.', + 'voice.debug.runtimeStatus': 'Статус выполнения.', + 'voice.debug.runtimeStatusDesc': + 'Живая диагностика голосового сервера и движка преобразования речи в текст.', + 'voice.debug.server': 'Сервер', + 'voice.debug.unavailable': 'Недоступно', + 'voice.debug.ready': 'Готов', + 'voice.debug.notReady': 'Не готов', + 'voice.debug.hotkey': 'Горячая клавиша', + 'voice.debug.notAvailable': 'н/д', + 'voice.debug.mode': 'Режим', + 'voice.debug.transcriptions': 'Транскрипции', + 'voice.debug.serverError': 'Ошибка сервера', + 'voice.debug.advancedSettings': 'Расширенные настройки', + 'voice.debug.advancedSettingsDesc': + 'Низкоуровневые параметры настройки записи и определения тишины.', + 'voice.debug.minimumRecordingSeconds': 'Минимальное количество секунд записи', + 'voice.debug.silenceThreshold': 'Порог тишины (RMS)', + 'voice.debug.silenceThresholdDesc': + 'Записи с энергией ниже этого значения считаются тишиной и пропускаются. Меньше = чувствительнее.', + 'voice.providers.saved': 'Поставщики голосовой связи сохранены.', + 'voice.providers.failedToSave': 'Не удалось сохранить поставщиков голосовой связи.', + 'voice.providers.ellipsis': '…', + 'voice.providers.installing': 'Установка', + 'voice.providers.installingBusy': 'Установка…', + 'voice.providers.reinstallLocally': 'Переустановить локально', + 'voice.providers.repair': 'Восстановить', + 'voice.providers.retryLocally': 'Повторить локально.', + 'voice.providers.installLocally': 'Установить локально.', + 'voice.providers.whisperReady': 'Whisper готов.', + 'voice.providers.whisperInstallStarted': 'Установка Whisper началась.', + 'voice.providers.queued': 'поставлен в очередь.', + 'voice.providers.failedToInstallWhisper': 'Не удалось установить Whisper.', + 'voice.providers.piperReady': 'Piper готов.', + 'voice.providers.piperInstallStarted': 'Началась установка Piper.', + 'voice.providers.failedToInstallPiper': 'Не удалось установить Piper.', + 'voice.providers.title': 'Поставщики голоса.', + 'voice.providers.desc': + 'Выберите, где выполняется транскрипция и синтез речи. Используйте кнопки «Установить локально» для загрузки бинарных файлов и моделей в вашу рабочую область. Локальные провайдеры можно сохранить до завершения установки — ручная настройка WHISPER_BIN или PIPER_BIN не требуется.', + 'voice.providers.sttProvider': 'Поставщик преобразования речи в текст', + 'voice.providers.sttProviderAria': 'Поставщик STT', + 'voice.providers.cloudWhisperProxy': 'Облако (прокси-сервер Whisper)', + 'voice.providers.localWhisper': 'Локальный Whisper', + 'voice.providers.installRequired': '(требуется установка)', + 'voice.providers.whisperInstalledTitle': 'Whisper установлен. Нажмите, чтобы переустановить.', + 'voice.providers.whisperDownloadTitle': + 'Загрузить whisper.cpp и модель GGML в вашу рабочую область.', + 'voice.providers.installed': 'Установлено', + 'voice.providers.installFailed': 'Не удалось установить', + 'voice.providers.notInstalled': 'Не установлено', + 'voice.providers.whisperModel': 'Модель Whisper', + 'voice.providers.whisperModelAria': 'Модель Whisper', + 'voice.providers.whisperModelTiny': 'Tiny (39 МБ, самый быстрый)', + 'voice.providers.whisperModelBase': 'Базовый (74 МБ)', + 'voice.providers.whisperModelSmall': 'Маленький (244 МБ)', + 'voice.providers.whisperModelMedium': 'Средний (769 МБ, рекомендуется)', + 'voice.providers.whisperModelLargeTurbo': 'Large v3 Turbo (1,5 ГБ, наилучшая точность)', + 'voice.providers.ttsProvider': 'Поставщик преобразования текста в речь', + 'voice.providers.ttsProviderAria': 'Поставщик TTS', + 'voice.providers.cloudElevenLabsProxy': 'Облако (прокси-сервер ElevenLabs)', + 'voice.providers.localPiper': 'Локальный Piper', + 'voice.providers.piperInstalledTitle': 'Piper установлен. Нажмите, чтобы переустановить.', + 'voice.providers.piperDownloadTitle': + 'Загрузить Piper и встроенный голос en_US-lessac-medium в вашу рабочую область.', + 'voice.providers.piperVoice': 'Голос Пайпера', + 'voice.providers.piperVoiceAria': 'Голос Пайпера', + 'voice.providers.customVoiceOption': 'Другое (введите ниже)…', + 'voice.providers.customVoiceAria': 'Идентификатор голоса Пайпера (пользовательский)', + 'voice.providers.customVoicePlaceholder': 'en_US-lessac-medium', + 'voice.providers.piperVoicesDesc': + 'Голоса поставляются с huggingface.co/rhasspy/piper-voices. Переключение голосов может потребовать нажатия «Установить/Переустановить» для загрузки нового файла .onnx.', + 'voice.providers.mascotVoice': 'Голос талисмана', + 'voice.providers.mascotVoiceDescPrefix': + 'Голос ElevenLabs, используемый маскотом для устных ответов, настраивается в разделе', + 'voice.providers.mascotSettings': 'Настройки талисмана', + 'voice.providers.mascotVoiceDescSuffix': '.', + 'voice.providers.hotkeyPlaceholder': 'Fn', + 'voice.providers.piperPreset.lessacMedium': 'US · Лессак (нейтральный, рекомендуется)', + 'voice.providers.piperPreset.lessacHigh': 'США · Лессак (более высокое качество, больше)', + 'voice.providers.piperPreset.ryanMedium': 'США · Райан (мужчина)', + 'voice.providers.piperPreset.amyMedium': 'США · Эми (женщина)', + 'voice.providers.piperPreset.librittsHigh': 'США · LibriTTS (мультидинамик)', + 'voice.providers.piperPreset.alanMedium': 'ГБ · Алан (мужчина)', + 'voice.providers.piperPreset.jennyDiocoMedium': 'ГБ · Дженни Диоко (женщина)', + 'voice.providers.piperPreset.northernEnglishMaleMedium': 'ГБ · Северный английский (мужчина)', + 'voice.providers.chip.cloud': 'OpenHuman (управляемый)', + 'voice.providers.chip.cloudAria': 'Управляемый провайдер OpenHuman всегда включён', + 'voice.providers.chip.whisper': 'Whisper (локальный)', + 'voice.providers.chip.enableWhisper': 'Включить локальный Whisper STT', + 'voice.providers.chip.disableWhisper': 'Отключить локальный Whisper STT', + 'voice.providers.chip.piper': 'Piper (локальный)', + 'voice.providers.chip.enablePiper': 'Включить локальный Piper TTS', + 'voice.providers.chip.disablePiper': 'Отключить локальный Piper TTS', + 'voice.providers.chip.enableProvider': 'Enable', + 'voice.providers.chip.disableProvider': 'Disable', + 'voice.providers.chip.apiKeyLabel': 'API-ключ', + 'voice.providers.chip.apiKeyPlaceholder': 'sk-…', + 'voice.providers.chip.comingSoon': 'скоро', + 'voice.modal.title': 'Configure', + 'voice.modal.desc': + 'Введите API-ключ для активации этого провайдера. Можно проверить подключение перед сохранением.', + 'voice.modal.testKey': 'Проверить ключ', + 'voice.modal.testing': 'Тестирование…', + 'voice.modal.saveAndEnable': 'Сохранить и включить', + 'voice.modal.enable': 'Enable', + 'voice.modal.whisperDesc': + 'Выберите размер модели и установите бинарный файл Whisper и модель GGML в вашу рабочую область. Более крупные модели точнее, но медленнее.', + 'voice.modal.piperDesc': + 'Выберите голос и установите бинарный файл Piper и модель ONNX в вашу рабочую область. Piper работает полностью офлайн с низкой задержкой.', + 'voice.routing.title': 'Маршрутизация голоса', + 'voice.routing.desc': + 'Выберите, какие включённые провайдеры обрабатывают преобразование речи в текст и текста в речь.', + 'voice.routing.save': 'Save', + 'voice.routing.testStt': 'Тест STT', + 'voice.routing.testTts': 'Тест TTS', + 'voice.routing.elevenlabsVoice': 'Голос ElevenLabs', + 'voice.routing.elevenlabsVoiceAria': 'Выбор голоса ElevenLabs', + 'voice.routing.elevenlabsVoiceIdAria': 'ID голоса ElevenLabs (пользовательский)', + 'voice.routing.elevenlabsVoiceDesc': + 'Выберите подобранный голос или вставьте пользовательский ID голоса из вашей панели ElevenLabs.', + 'voice.externalProviders.title': 'Внешние голосовые провайдеры', + 'voice.externalProviders.desc': + 'Подключайте сторонние STT/TTS API, такие как Deepgram, ElevenLabs или OpenAI, напрямую.', + 'voice.externalProviders.keySet': 'Ключ установлен', + 'voice.externalProviders.noKey': 'Нет API-ключа', + 'voice.externalProviders.test': 'Test', + 'voice.externalProviders.testing': 'Тестирование…', + 'voice.externalProviders.remove': 'Remove', + 'voice.externalProviders.provider': 'Provider', + 'voice.externalProviders.selectProvider': 'Выберите провайдера…', + 'voice.externalProviders.apiKey': 'API-ключ', + 'voice.externalProviders.apiKeyPlaceholder': 'sk-…', + 'voice.externalProviders.add': 'Add', + 'autocomplete.title': 'Автодополнение', + 'autocomplete.settings': 'Настройки', + 'autocomplete.acceptWithTab': 'Принять с помощью Tab', + 'autocomplete.stylePreset': 'Стиль', + 'autocomplete.style.balanced': 'Сбалансированный', + 'autocomplete.style.concise': 'Краткий', + 'autocomplete.style.formal': 'Официальный', + 'autocomplete.style.casual': 'Неформальный', + 'autocomplete.style.custom': 'Пользовательский', + 'autocomplete.disabledApps': 'Отключённые приложения (по одному bundle/токену на строку)', + 'autocomplete.saveSettings': 'Сохранить настройки', + 'autocomplete.saving': 'Сохранение…', + 'autocomplete.runtime': 'Среда выполнения', + 'autocomplete.running': 'Работает', + 'autocomplete.start': 'Запустить', + 'autocomplete.stop': 'Остановить', + 'autocomplete.settingsSaved': 'Настройки автодополнения сохранены.', + 'autocomplete.started': 'Автодополнение запущено.', + 'autocomplete.didNotStart': 'Автодополнение не запустилось. Проверь, включено ли оно.', + 'autocomplete.stopped': 'Автодополнение остановлено.', + 'autocomplete.advancedSettings': 'Дополнительные настройки', + 'autocomplete.debugTitle': 'Отладка автодополнения', + 'chat.agentChat': 'Чат с агентом', + 'chat.overrides': 'Переопределения', + 'chat.model': 'Модель', + 'chat.temperature': 'Температура', + 'chat.conversation': 'Разговор', + 'chat.startAgentConversation': 'Начни разговор с агентом.', + 'chat.you': 'Ты', + 'chat.agent': 'Агент', + 'chat.askAgent': 'Спроси агента о чём угодно...', + 'chat.sendMessage': 'Отправить сообщение', + 'composio.triageTitle': 'Триггеры интеграций', + 'composio.triageDesc': + 'Когда активно, каждый входящий триггер Composio проходит через шаг AI-сортировки, который классифицирует событие и может запустить автоматические действия — один локальный LLM-запрос на триггер. Отключи глобально или для конкретных интеграций, если предпочитаешь ручной просмотр. Если переменная окружения', + 'composio.disableAllTriage': 'Отключить AI-сортировку для всех триггеров', + 'composio.triggersStillRecorded': + 'Триггеры по-прежнему записываются в историю — LLM-запросы не выполняются.', + 'composio.disableSpecificIntegrations': 'Отключить AI-сортировку для конкретных интеграций', + 'composio.settingsSaved': 'Настройки сохранены', + 'composio.saveFailed': 'Не удалось сохранить. Попробуй ещё раз.', + 'cron.title': 'Задания по расписанию', + 'cron.scheduledJobs': 'Запланированные задания', + 'cron.manageCronJobs': 'Управление заданиями из основного планировщика.', + 'cron.refreshCronJobs': 'Обновить задания', + 'localModel.modelStatus': 'Статус модели', + 'localModel.downloadModels': 'Скачать модели', + 'localModel.usage': 'Использование', + 'localModel.usageDesc': + 'Выбери, какие подсистемы используют локальную модель. Остальное использует облако.', + 'localModel.enableRuntime': 'Включить локальную AI-среду', + 'localModel.enableRuntimeDesc': + 'Главный переключатель. По умолчанию выключен — Ollama простаивает. При включении суммаризатор деревьев, интеллект экрана и автодополнение всегда используют локальную модель.', + 'localModel.advancedSettings': 'Дополнительные настройки', + 'localModel.debugTitle': 'Отладка локальной модели', + 'screenAwareness.debugTitle': 'Отладка слежения за экраном', + 'screenAwareness.debug.debugAndDiagnostics': 'Отладка и диагностика', + 'screenAwareness.debug.collapse': 'Свернуть', + 'screenAwareness.debug.expand': 'Развернуть', + 'screenAwareness.debug.failedToSave': 'Не удалось сохранить интеллект экрана.', + 'screenAwareness.debug.policyTitle': 'Политика интеллекта экрана', + 'screenAwareness.debug.baselineFps': 'Базовый показатель FPS', + 'screenAwareness.debug.useVisionModel': 'Использовать модель концепции.', + 'screenAwareness.debug.useVisionModelDesc': + 'Отправлять снимки экрана в визуальную языковую модель для более богатого контекста. Если отключено, используется только OCR-текст с текстовой моделью — быстрее и без требований к визуальной модели.', + 'screenAwareness.debug.keepScreenshots': 'Сохранять снимки экрана.', + 'screenAwareness.debug.keepScreenshotsDesc': + 'Сохранять снимки экрана в рабочей области вместо удаления после обработки', + 'screenAwareness.debug.allowlist': 'Список разрешенных (одно правило в строке)', + 'screenAwareness.debug.denylist': 'Список запрещенных (одно правило в строке)', + 'screenAwareness.debug.saveSettings': 'Сохранить настройки интеллекта экрана', + 'screenAwareness.debug.sessionStats': 'Статистика сеанса', + 'screenAwareness.debug.framesEphemeral': 'Кадры (эфемерные)', + 'screenAwareness.debug.panicStop': 'Паника-стоп', + 'screenAwareness.debug.defaultPanicHotkey': 'Cmd+Shift+.', + 'screenAwareness.debug.vision': 'Видение', + 'screenAwareness.debug.idle': 'бездействующее', + 'screenAwareness.debug.visionQueue': 'Очередь видений', + 'screenAwareness.debug.lastVision': 'Последнее видение', + 'screenAwareness.debug.notAvailable': 'н/д', + 'screenAwareness.debug.visionSummaries': 'Сводки видений', + 'screenAwareness.debug.refreshing': 'Обновление…', + 'screenAwareness.debug.noSummaries': 'Сводок пока нет.', + 'screenAwareness.debug.unknownApp': 'Неизвестное приложение.', + 'screenAwareness.debug.macosOnly': + 'Screen Intelligence V1 в настоящее время поддерживается только на macOS.', + 'memory.debugTitle': 'Отладка памяти', + 'memory.documents': 'Документы', + 'memory.filterByNamespace': 'Фильтровать по пространству имен...', + 'memory.refresh': 'Обновить', + 'memory.noDocumentsFound': 'Документы не найдены.', + 'memory.delete': 'Удалить', + 'memory.rawResponse': 'Необработанный ответ', + 'memory.namespaces': 'Пространства имен', + 'memory.noNamespacesFound': 'Пространства имен не найдены.', + 'memory.queryRecall': 'Запрос и вызов', + 'memory.namespace': 'Пространство имен', + 'memory.queryText': 'Текст запроса...', + 'memory.defaultMaxChunks': '10', + 'memory.maxChunks': 'максимальное количество фрагментов', + 'memory.query': 'Запрос', + 'memory.recall': 'Вызов', + 'memory.queryLabel': 'Запрос', + 'memory.recallLabel': 'Вызов', + 'memory.queryResult': 'Результат запроса', + 'memory.recallResult': 'Результат вызова', + 'memory.clearNamespace': 'Очистить пространство имен', + 'memory.clearNamespaceDescription': 'Безвозвратно удалить все документы в пространстве имен.', + 'memory.selectNamespace': 'Выберите пространство имен...', + 'memory.exampleNamespace': 'например. навык:gmail:user@example.com', + 'memory.clear': 'Очистить', + 'memory.deleteConfirm': 'Удалить документ «{documentId}» в пространстве имен «{namespace}»?', + 'memory.clearNamespaceConfirm': + 'Это навсегда удалит ВСЕ документы в пространстве имён «{namespace}». Продолжить?', + 'memory.clearNamespaceSuccess': 'Пространство имен «{namespace}» очищено.', + 'memory.clearNamespaceEmpty': 'В «{namespace}» нечего очищать.', + 'webhooks.debugTitle': 'Отладка вебхуков', + 'webhooks.failedToLoadDebugData': 'Не удалось загрузить данные отладки веб-перехватчика.', + 'webhooks.clearLogsConfirm': 'Очистить все записанные журналы отладки веб-перехватчиков?', + 'webhooks.failedToClearLogs': 'Не удалось очистить журналы веб-перехватчиков.', + 'webhooks.loading': 'Загрузка...', + 'webhooks.refresh': 'Обновить', + 'webhooks.clearing': 'Очистка...', + 'webhooks.clearLogs': 'Очистить журналы', + 'webhooks.registered': 'зарегистрирован', + 'webhooks.captured': 'захвачен', + 'webhooks.live': 'в прямом эфире', + 'webhooks.disconnected': 'отключен', + 'webhooks.lastEvent': 'Последнее событие', + 'webhooks.at': 'в', + 'webhooks.registeredWebhooks': 'Зарегистрированные вебхуки.', + 'webhooks.noActiveRegistrations': 'Активных регистраций нет.', + 'webhooks.resolvingBackendUrl': 'Разрешение серверной части URL…', + 'webhooks.capturedRequests': 'Захваченные запросы', + 'webhooks.noRequestsCaptured': 'Запросы веб-перехватчика еще не зафиксированы.', + 'webhooks.unrouted': 'не маршрутизировано', + 'webhooks.pending': 'в ожидании', + 'webhooks.requestHeaders': 'Заголовки запроса', + 'webhooks.queryParams': 'Параметры запроса', + 'webhooks.requestBody': 'Тело запроса', + 'webhooks.responseHeaders': 'Заголовки ответа', + 'webhooks.responseBody': 'Тело ответа', + 'webhooks.rawPayload': 'Необработанные полезные данные', + 'webhooks.empty': '[пусто]', + 'providerSetup.error.defaultDetails': 'Не удалось настроить поставщика.', + 'providerSetup.error.providerFallback': 'Поставщик', + 'providerSetup.error.credentialsRejected': + '{provider} отклонил учётные данные. Проверьте API-ключ и повторите попытку.', + 'providerSetup.error.endpointNotRecognized': + '{provider} не распознал конечную точку. Проверьте базовый URL и повторите попытку.', + 'providerSetup.error.providerUnavailable': + '{provider} временно недоступен. Повторите попытку или проверьте статус провайдера.', + 'providerSetup.error.unreachable': + 'Не удалось подключиться к {provider}. Проверьте URL конечной точки и сетевое подключение, затем повторите попытку.', + 'providerSetup.error.couldNotReachWithMessage': 'Не удалось связаться с {provider}: {message}', + 'providerSetup.error.technicalDetails': 'Технические подробности', + 'notifications.routingTitle': 'Маршрутизация уведомлений', + 'notifications.routing.pipelineStats': 'Статистика конвейера', + 'notifications.routing.total': 'Всего', + 'notifications.routing.unread': 'Непрочитано', + 'notifications.routing.unscored': 'Без оценок', + 'notifications.routing.intelligenceTitle': 'Аналитика уведомлений', + 'notifications.routing.intelligenceDesc': + 'Каждое уведомление из подключённых аккаунтов оценивается локальной моделью ИИ. Важные уведомления автоматически передаются агенту-оркестратору, чтобы ничто критическое не осталось незамеченным.', + 'notifications.routing.howItWorks': 'Как это работает', + 'notifications.routing.level.drop': 'Удаление', + 'notifications.routing.level.dropDesc': 'Шум/спам — сохраняется, но не отображается', + 'notifications.routing.level.acknowledge': 'Подтверждение', + 'notifications.routing.level.acknowledgeDesc': + 'Низкий приоритет — отображается в центре уведомлений', + 'notifications.routing.level.react': 'Реагировать', + 'notifications.routing.level.reactDesc': + 'Средний приоритет — запускает сфокусированный ответ агента', + 'notifications.routing.level.escalate': 'Эскалация', + 'notifications.routing.level.escalateDesc': 'Высокий приоритет — передаётся агенту-оркестратору', + 'notifications.routing.perProvider': 'Маршрутизация для каждого поставщика', + 'notifications.routing.threshold': 'Порог', + 'notifications.routing.routeToOrchestrator': 'Маршрут к оркестратору', + 'notifications.routing.loadSettingsError': + 'Не удалось загрузить настройки. Закройте и повторно откройте эту панель.', + 'common.reload': 'Перезагрузить', + 'common.skip': 'Пропустить', + 'common.disable': 'Отключить', + 'common.enable': 'Включить', + 'chat.safetyTimeout': + 'Агент не ответил в течение 2 минут. Попробуй снова или проверь соединение.', + 'chat.filter.all': 'Все', + 'chat.filter.work': 'Работа', + 'chat.filter.briefing': 'Брифинг', + 'chat.filter.notification': 'Уведомление', + 'chat.filter.workers': 'Воркеры', + 'chat.selectThread': 'Выбери чат', + 'chat.threads': 'Чаты', + 'chat.noThreads': 'Чатов пока нет', + 'chat.noLabelThreads': 'Нет чатов «{label}»', + 'chat.noWorkerThreads': 'Чатов воркеров пока нет', + 'chat.deleteThread': 'Удалить чат', + 'chat.deleteThreadConfirm': 'Удалить «{title}»?', + 'chat.untitledThread': 'Чат без названия', + 'chat.editThreadTitle': 'Изменить название ветки', + 'chat.hideSidebar': 'Скрыть боковую панель', + 'chat.showSidebar': 'Показать боковую панель', + 'chat.newThreadShortcut': 'Новый чат (/new)', + 'chat.new': 'Новый', + 'chat.failedToLoadMessages': 'Не удалось загрузить сообщения', + 'chat.thinkingIteration': 'Думаю... ({n})', + 'chat.thinkingDots': 'Думаю...', + 'chat.approachingLimit': 'Лимит использования близко', + 'chat.approachingLimitMsg': 'Ты использовал {pct}% доступной квоты.', + 'chat.upgrade': 'Улучшить', + 'chat.weeklyLimitHit': 'Ты достиг еженедельного лимита.', + 'chat.resets': 'Сбросится', + 'chat.topUpToContinue': 'Пополни баланс для продолжения.', + 'chat.budgetComplete': + 'Включённый бюджет исчерпан. Добавь кредиты или улучши план для продолжения.', + 'chat.topUp': 'Пополнить', + 'chat.cycle': 'Цикл', + 'chat.cycleSpent': 'Потрачено за цикл', + 'chat.cycleRemaining': 'Осталось', + 'chat.left': 'осталось', + 'chat.setup': 'Настроить', + 'chat.switchToText': 'Переключиться на текст', + 'chat.transcribing': 'Транскрипция...', + 'chat.stopAndSend': 'Остановить и отправить', + 'chat.startTalking': 'Начни говорить', + 'chat.playingVoiceReply': 'Воспроизведение голосового ответа', + 'chat.voiceHint': 'Используй микрофон для речи', + 'chat.micUnavailable': 'Микрофон недоступен', + 'chat.turn': 'ход', + 'chat.turns': 'ходов', + 'chat.openWorkerThread': 'Открыть чат воркера', + 'chat.attachment.attach': 'Прикрепить изображение', + 'chat.attachment.remove': 'Удалить {name}', + 'chat.attachment.tooMany': 'Максимум {max} изображений на сообщение', + 'chat.attachment.tooLarge': 'Изображение превышает ограничение размера {max}', + 'chat.attachment.unsupportedType': + 'Неподдерживаемый тип файла. Используйте PNG, JPEG, WebP, GIF или BMP.', + 'chat.attachment.readFailed': 'Не удалось прочитать файл', + 'memory.searchAria': 'Поиск в памяти', + 'memory.searchPlaceholder': 'Поиск записей памяти...', + 'memory.sourceFilter.all': 'Все источники', + 'memory.sourceFilter.email': 'Электронная почта', + 'memory.sourceFilter.calendar': 'Календарь', + 'memory.sourceFilter.telegram': 'Telegram', + 'memory.sourceFilter.aiInsight': 'AI-инсайт', + 'memory.sourceFilter.system': 'Система', + 'memory.sourceFilter.trading': 'Трейдинг', + 'memory.sourceFilter.security': 'Безопасность', + 'memory.ingestionActivity': 'Активность загрузки', + 'memory.events': 'событий', + 'memory.event': 'событие', + 'memory.overTheLast': 'за последние', + 'memory.months': 'месяцев', + 'memory.peak': 'Пик', + 'memory.perDay': '/день', + 'memory.less': 'Меньше', + 'memory.more': 'Больше', + 'memory.on': 'в', + 'memory.loading': 'Загрузка памяти', + 'memory.fetching': 'Получение записей памяти...', + 'memory.analyzing': 'Анализ памяти', + 'memory.analyzingHint': 'Обработка воспоминаний для извлечения инсайтов...', + 'memory.noMatches': 'Ничего не найдено', + 'memory.noMatchesHint': 'Попробуй изменить условия поиска или фильтры.', + 'memory.allCaughtUp': 'Всё просмотрено', + 'memory.allCaughtUpHint': 'Новых записей для обработки нет.', + 'memory.noAnalysis': 'Анализа ещё нет', + 'memory.noAnalysisHint': 'Запусти анализ, чтобы найти закономерности в воспоминаниях.', + 'memory.emptyHint': 'Начни общаться, чтобы создать первые воспоминания.', + 'mic.unavailable': 'Микрофон недоступен', + 'mic.permissionDenied': 'Доступ к микрофону запрещён', + 'mic.failedToStartRecorder': 'Не удалось запустить запись', + 'mic.transcribing': 'Транскрипция...', + 'mic.tapToSend': 'Нажми для отправки', + 'mic.waitingForAgent': 'Ожидание агента...', + 'mic.tapAndSpeak': 'Нажми и говори', + 'mic.stopRecording': 'Остановить запись и отправить', + 'mic.startRecording': 'Начать запись', + 'mic.deviceSelector': 'Микрофонное устройство', + 'mic.tapToSendCountdown': 'Нажми для отправки ({seconds}с)', + 'token.usageLimitReached': 'Лимит использования достигнут', + 'token.approachingLimit': 'Лимит близко', + 'token.planClickForDetails': 'план — нажми для подробностей', + 'token.sessionTokens': 'Вход: {in} | Выход: {out} | Ходов: {turns}', + 'token.limit': 'Лимит достигнут', + 'catalog.noCapabilityBinding': 'Нет привязки возможностей', + 'catalog.downloadFailed': 'Загрузка не удалась', + 'catalog.active': 'Активно', + 'catalog.installed': 'Установлено', + 'catalog.notDownloaded': 'Не загружено', + 'catalog.inUse': 'Используется', + 'catalog.use': 'Использовать', + 'catalog.deleteModel': 'Удалить модель', + 'catalog.download': 'Скачать', + 'navigator.recent': 'Недавние', + 'navigator.today': 'Сегодня', + 'navigator.thisWeek': 'На этой неделе', + 'navigator.sources': 'Источники', + 'navigator.email': 'Электронная почта', + 'navigator.slack': 'Slack', + 'navigator.chat': 'Чат', + 'navigator.documents': 'Документы', + 'navigator.people': 'Люди', + 'navigator.topics': 'Темы', + 'dreams.description': + 'Сны — это AI-отражения, которые синтезируют закономерности из твоих воспоминаний.', + 'dreams.comingSoon': 'Скоро', + 'assignment.memoryLlm': 'LLM памяти', + 'assignment.memoryLlmAria': 'Выбор Memory LLM', + 'assignment.embedder': 'Эмбеддер', + 'assignment.loaded': 'Загружено', + 'assignment.notDownloaded': 'Не загружено', + 'assignment.usedForExtractSummarise': 'Используется для извлечения и суммаризации', + 'insights.knownFacts': 'Известные факты', + 'insights.preferences': 'Предпочтения', + 'insights.relationships': 'Отношения', + 'insights.skills': 'Навыки', + 'insights.opinions': 'Мнения', + 'insights.other': 'Другое', + 'insights.title': 'Инсайты', + 'insights.empty': 'Инсайтов пока нет. Они появляются по мере роста памяти.', + 'insights.description': 'На основе {count} связей в твоём графе памяти.', + 'insights.items': 'элементов', + 'insights.more': 'ещё', + 'calls.joiningCall': 'Подключение к звонку', + 'calls.meetWindowOpening': 'Окно Meet открывается...', + 'calls.failedToStart': 'Не удалось начать звонок Meet', + 'calls.couldNotStart': 'Не удалось начать звонок', + 'calls.failedToClose': 'Не удалось завершить звонок', + 'calls.couldNotClose': 'Не удалось закрыть звонок', + 'calls.joinMeet': 'Подключиться к звонку Google Meet', + 'calls.joinMeetDescription': 'Введи ссылку Google Meet для подключения.', + 'calls.meetLink': 'Ссылка Meet', + 'calls.displayName': 'Отображаемое имя', + 'calls.openingMeet': 'Открытие Meet...', + 'calls.joinCall': 'Подключиться к звонку', + 'calls.activeCalls': 'Активные звонки', + 'calls.leave': 'Выйти', + 'workspace.wipeConfirm': 'Ты уверен, что хочешь очистить всю память? Это нельзя отменить.', + 'workspace.resetTreeConfirm': 'Ты уверен, что хочешь перестроить дерево памяти?', + 'workspace.wipeTitle': 'Очистить память', + 'workspace.resetting': 'Сброс...', + 'workspace.resetMemory': 'Сбросить память', + 'workspace.resetTreeTitle': 'Перестроить дерево памяти', + 'workspace.rebuilding': 'Перестройка...', + 'workspace.resetMemoryTree': 'Сбросить дерево памяти', + 'workspace.building': 'Построение...', + 'workspace.buildSummaryTrees': 'Построить деревья суммаризации', + 'workspace.viewVault': 'Открыть хранилище', + 'workspace.openingVaultTitle': 'Открытие хранилища в Obsidian', + 'workspace.openingVaultMessage': + 'Если Obsidian не открывается, установите его с obsidian.md или используйте «Показать папку». Путь к хранилищу:', + 'workspace.openVaultFailedTitle': 'Не удалось открыть хранилище в Obsidian', + 'workspace.openVaultFailedMessage': + 'Используйте Reveal Folder, чтобы напрямую открыть каталог хранилища. Путь к хранилищу:', + 'workspace.revealVaultFailed': 'Не удалось показать папку хранилища', + 'workspace.revealFolder': 'Показать папку', + 'workspace.checkingVault': 'Проверка…', + 'workspace.vaultNotRegisteredHelp': + 'Obsidian открывает только папки, добавленные как хранилище. В Obsidian выберите «Открыть папку как хранилище» и укажите папку ниже — это нужно сделать только один раз. Затем нажмите «Просмотр хранилища» снова.', + 'workspace.obsidianNotFoundHelp': + 'Obsidian не найден на этом устройстве. Установите его или — если он установлен в нестандартном месте — укажите папку конфигурации в разделе «Дополнительно».', + 'workspace.openAnyway': 'Всё равно открыть в Obsidian', + 'workspace.installObsidian': 'Установить Obsidian', + 'workspace.obsidianAdvanced': 'Obsidian установлен в другом месте?', + 'workspace.obsidianConfigDirLabel': 'Папка конфигурации Obsidian', + 'workspace.obsidianConfigDirHint': + 'Путь к папке, содержащей obsidian.json (например, ~/.config/obsidian). Оставьте пустым для автоопределения.', + 'workspace.obsidianConfigDirPlaceholder': '~/.config/obsidian', + 'workspace.graphLoadFailed': 'Не удалось загрузить граф памяти', + 'workspace.loadingGraph': 'Загрузка графа памяти...', + 'workspace.graphViewMode': 'Режим просмотра графа памяти', + 'workspace.trees': 'Деревья', + 'workspace.contacts': 'Контакты', + 'graph.noContactMentions': 'Нет упоминаний контактов', + 'graph.noMemory': 'Памяти нет', + 'graph.source': 'Источник', + 'graph.topic': 'Тема', + 'graph.global': 'Глобальное', + 'graph.document': 'Документ', + 'graph.contact': 'Контакт', + 'graph.nodes': 'узлов', + 'graph.parentChild': 'родитель-потомок', + 'graph.documentContact': 'документ-контакт', + 'graph.link': 'связь', + 'graph.links': 'связей', + 'graph.children': 'потомки', + 'graph.clickToOpenObsidian': 'Нажми, чтобы открыть в Obsidian', + 'graph.person': 'Человек', + 'modal.dontShowAgain': 'Не показывать похожие предложения', + 'reflections.loading': 'Загрузка рефлексий...', + 'reflections.empty': 'Рефлексий пока нет', + 'reflections.title': 'Рефлексии', + 'reflections.proposedAction': 'Предлагаемое действие', + 'reflections.act': 'Выполнить', + 'reflections.dismiss': 'Закрыть', + 'whatsapp.chatsSynced': 'чатов синхронизировано', + 'whatsapp.chatSynced': 'чат синхронизирован', + 'sync.active': 'Активно', + 'sync.recent': 'Недавние', + 'sync.idle': 'Ожидание', + 'sync.memorySources': 'Источники памяти', + 'sync.noConnectedSources': 'Нет подключённых источников', + 'sync.chunks': 'блоков', + 'sync.lastChunk': 'Последний блок:', + 'sync.pending': 'ожидает', + 'sync.processed': 'обработано', + 'sync.syncing': 'Синхронизация…', + 'sync.sync': 'Синхронизировать', + 'sync.failedToLoad': 'Не удалось загрузить статус синхронизации', + 'sync.noContent': 'Контент в память ещё не синхронизирован. Подключи интеграцию для начала.', + 'memorySources.title': 'Источники памяти', + 'memorySources.empty': 'Источников памяти пока нет. Добавьте один, чтобы начать кормить память.', + 'memorySources.customSources': 'Пользовательские источники', + 'memorySources.addSource': 'Добавить источник', + 'memorySources.noCustomSources': + 'Пользовательских источников пока нет. Для начала добавьте папку, репозиторий GitHub, канал RSS или веб-страницу.', + 'memorySources.loadingConnections': 'Загрузка подключений…', + 'memorySources.noConnections': + 'Активных соединений Composio не ​​найдено. Сначала подключите интеграцию.', + 'memorySources.pickConnection': 'Выберите соединение', + 'memorySources.selectConnection': '— Выберите соединение —', + 'memorySources.composioListFailed': 'Не удалось загрузить соединения Composio.', + 'memorySources.browse': 'Просматривать…', + 'memorySources.folderPathPlaceholder': '/Users/you/notes', + 'memorySources.globPatternPlaceholder': '**/*.md', + 'memorySources.repoUrlPlaceholder': 'https://github.com/org/repo', + 'memorySources.branchPlaceholder': 'main', + 'memorySources.feedUrlPlaceholder': 'https://example.com/feed.xml', + 'memorySources.pageUrlPlaceholder': 'https://example.com/article', + 'memorySources.cssSelectorPlaceholder': 'article', + 'memorySources.searchQueryPlaceholder': 'от:пользователь AI безопасность', + 'memorySources.kind.composio': 'Интеграция', + 'memorySources.kind.folder': 'Локальная папка', + 'memorySources.kind.github_repo': 'Репо GitHub', + 'memorySources.kind.twitter_query': 'Поиск в Твиттере', + 'memorySources.kind.rss_feed': 'RSS Лента', + 'memorySources.kind.web_page': 'Веб-страница', + 'memorySources.sync.successTitle': 'Синхронизация', + 'memorySources.sync.successMessage': 'Прогресс появится в ближайшее время.', + 'memorySources.sync.failedTitle': 'Синхронизация не удалась:', + 'time.justNow': 'только что', + 'time.secondsAgoSuffix': 'с назад', + 'time.minutesAgoSuffix': 'мин назад', + 'time.hoursAgoSuffix': 'ч назад', + 'time.daysAgoSuffix': 'д назад', + 'memorySources.pickKind': 'Какой источник вы хотите добавить?', + 'memorySources.backToKinds': 'Вернуться к типам источников', + 'memorySources.label': 'Этикетка', + 'memorySources.labelPlaceholder': 'Мои исследовательские заметки', + 'memorySources.add': 'Добавлять', + 'memorySources.adding': 'Добавление…', + 'memorySources.added': 'Источник добавлен', + 'memorySources.removed': 'Источник удален.', + 'memorySources.remove': 'Удалять', + 'memorySources.enable': 'Давать возможность', + 'memorySources.disable': 'Запрещать', + 'memorySources.toggleFailed': 'Переключить не удалось', + 'memorySources.removeFailed': 'Удалить не удалось', + 'memorySources.folderPath': 'Путь к папке', + 'memorySources.globPattern': 'Шаблон глобуса', + 'memorySources.repoUrl': 'Репозиторий URL', + 'memorySources.branch': 'Ветвь', + 'memorySources.feedUrl': 'Подача URL', + 'memorySources.pageUrl': 'Страница URL', + 'memorySources.cssSelector': 'Селектор CSS (опционально)', + 'memorySources.searchQuery': 'Поисковый запрос', + 'backend.aiBackend': 'AI-бэкенд', + 'backend.cloud': 'Облако', + 'backend.recommended': 'Рекомендуется', + 'backend.cloudDescription': + 'Быстрые и мощные модели на наших серверах. Готовы к использованию сразу.', + 'backend.privacyNote': + 'Личные данные, сообщения и ключи никогда не отправляются на наши серверы.', + 'backend.local': 'Локально', + 'backend.advanced': 'Дополнительно', + 'backend.localDescription': + 'Запускай модели на своём устройстве с помощью Ollama. Полная приватность, требует настройки.', + 'backend.ramRecommended': 'Рекомендуется 16 ГБ+ RAM', + 'subconscious.tasks': 'задач', + 'subconscious.ticks': 'тиков', + 'subconscious.last': 'Последний', + 'subconscious.failed': 'ошибка', + 'subconscious.tickInterval': 'Интервал тика', + 'subconscious.runNow': 'Запустить сейчас', + 'subconscious.providerUnavailableTitle': 'Подсознание приостановлено', + 'subconscious.providerSettings': 'Настройки ИИ', + 'subconscious.approvalNeeded': 'Требуется подтверждение', + 'subconscious.requiresApproval': 'Требует подтверждения', + 'subconscious.fixInConnections': 'Исправить в подключениях', + 'subconscious.goAhead': 'Продолжить', + 'subconscious.activeTasks': 'Активные задачи', + 'subconscious.noActiveTasks': 'Активных задач нет', + 'subconscious.default': 'По умолчанию', + 'subconscious.addTaskPlaceholder': 'Добавить новую задачу...', + 'subconscious.activityLog': 'Журнал активности', + 'subconscious.noActivity': 'Активности пока нет', + 'subconscious.decision.nothingNew': 'Ничего нового', + 'subconscious.decision.completed': 'Завершено', + 'subconscious.decision.evaluating': 'Оценка', + 'subconscious.decision.waitingApproval': 'Ожидание подтверждения', + 'subconscious.decision.failed': 'Ошибка', + 'subconscious.decision.cancelled': 'Отменено', + 'subconscious.decision.skipped': 'Пропущено', + 'actionable.complete': 'Выполнить', + 'actionable.dismiss': 'Закрыть', + 'actionable.snooze': 'Отложить', + 'actionable.new': 'Новое', + 'stats.storage': 'Хранилище', + 'stats.files': 'файлов', + 'stats.documents': 'Документы', + 'stats.today': 'сегодня', + 'stats.namespaces': 'Пространства имён', + 'stats.relations': 'Связи', + 'stats.firstMemory': 'Первое воспоминание', + 'stats.latest': 'Последнее', + 'stats.sessions': 'Сессии', + 'stats.tokens': 'токенов', + 'bootCheck.invalidUrl': 'Введи URL среды выполнения.', + 'bootCheck.urlMustStartWith': 'URL должен начинаться с http:// или https://', + 'bootCheck.validUrlRequired': + 'Похоже, это не корректный URL (попробуй https://core.example.com/rpc)', + 'bootCheck.tokenRequired': 'Для подключения нужен токен авторизации.', + 'bootCheck.chooseCoreMode': 'Выбрать среду выполнения', + 'bootCheck.connectToCore': 'Подключиться к среде выполнения', + 'bootCheck.desktopDescription': + 'OpenHuman нужна среда выполнения для работы. Выбери, где она должна находиться.', + 'bootCheck.webDescription': + 'В браузере OpenHuman подключается к среде выполнения под твоим управлением. Введи URL и токен авторизации, или скачай настольное приложение для локального запуска.', + 'bootCheck.preferDesktop': 'Хочешь держать всё на своём устройстве?', + 'bootCheck.downloadDesktop': 'Скачать настольное приложение', + 'bootCheck.localRecommended': 'Запустить локально (рекомендуется)', + 'bootCheck.localDescription': + 'Работает прямо на твоём компьютере. Быстро, полностью приватно, ничего настраивать не нужно.', + 'bootCheck.cloudMode': 'Запустить в облаке (сложно)', + 'bootCheck.cloudDescription': + 'Подключись к среде выполнения, которую ты размещаешь в другом месте. Работает 24×7, не нужно держать это устройство включённым.', + 'bootCheck.coreRpcUrl': 'URL среды выполнения', + 'bootCheck.rpcUrlPlaceholder': 'https://core.example.com/rpc', + 'bootCheck.authToken': 'Токен авторизации', + 'bootCheck.bearerTokenPlaceholder': 'Bearer-токен от твоей удалённой среды выполнения', + 'bootCheck.storedLocally': 'Хранится только на этом устройстве. Отправляется как ', + 'bootCheck.testing': 'Проверка…', + 'bootCheck.testConnection': 'Проверить соединение', + 'bootCheck.connectedOk': 'Подключено. Всё готово.', + 'bootCheck.authFailed': 'Токен не подошёл. Проверь его и попробуй снова.', + 'bootCheck.unreachablePrefix': 'Не удалось достучаться:', + 'bootCheck.checkingCore': 'Пробуждение среды выполнения…', + 'bootCheck.cannotReach': 'Нет доступа к среде выполнения', + 'bootCheck.cannotReachDesc': 'Не удалось подключиться к среде выполнения. Попробовать другую?', + 'bootCheck.switchMode': 'Выбрать другую среду', + 'bootCheck.quit': 'Выйти', + 'bootCheck.legacyDetected': 'Обнаружена устаревшая фоновая среда', + 'bootCheck.legacyDescription': + 'На этом устройстве уже запущен отдельно установленный демон OpenHuman. Нужно его убрать, прежде чем встроенная среда сможет взять управление.', + 'bootCheck.removing': 'Удаление…', + 'bootCheck.removeContinue': 'Удалить и продолжить', + 'bootCheck.localNeedsRestart': 'Требуется перезапуск локальной среды', + 'bootCheck.localNeedsRestartDesc': + 'Локальная среда выполнения и приложение используют разные версии. Быстрый перезапуск синхронизирует их.', + 'bootCheck.restarting': 'Перезапуск…', + 'bootCheck.restartCore': 'Перезапустить среду', + 'bootCheck.cloudNeedsUpdate': 'Требуется обновление облачной среды', + 'bootCheck.cloudNeedsUpdateDesc': + 'Облачная среда и приложение используют разные версии. Запусти обновление для синхронизации.', + 'bootCheck.updating': 'Обновление…', + 'bootCheck.updateCloudCore': 'Обновить облачную среду', + 'bootCheck.versionCheckFailed': 'Проверка версии среды не удалась', + 'bootCheck.versionCheckFailedDesc': + 'Среда работает, но не сообщает свою версию. Возможно, она устарела. Перезапусти или обнови её для продолжения.', + 'bootCheck.working': 'Работаю…', + 'bootCheck.restartUpdateCore': 'Перезапустить / обновить среду', + 'bootCheck.unexpectedError': 'Неожиданная ошибка при загрузке', + 'bootCheck.actionFailed': 'Что-то пошло не так. Попробуй ещё раз.', + 'bootCheck.portConflictTitle': 'Не удалось запустить движок приложения', + 'bootCheck.portConflictBody': + 'Другой процесс использует сетевой порт, необходимый OpenHuman. Попробуем устранить это автоматически.', + 'bootCheck.portConflictFixButton': 'Исправить автоматически', + 'bootCheck.portConflictFixing': 'Исправление…', + 'bootCheck.portConflictFixFailed': + 'Автоматическое исправление не сработало. Перезагрузите компьютер и попробуйте снова.', + 'notifications.justNow': 'только что', + 'notifications.minAgo': '{n} мин назад', + 'notifications.hrAgo': '{n} ч назад', + 'notifications.dayAgo': '{n} д назад', + 'notifications.category.messages': 'Сообщения', + 'notifications.category.agents': 'Агенты', + 'notifications.category.skills': 'Навыки', + 'notifications.category.system': 'Система', + 'notifications.category.meetings': 'Встречи', + 'notifications.category.reminders': 'Напоминания', + 'notifications.category.important': 'Важное', + 'about.update.status.checking': 'Проверка...', + 'about.update.status.available': 'доступна v{version}', + 'about.update.status.availableNoVersion': 'Доступно обновление', + 'about.update.status.downloading': 'Загрузка...', + 'about.update.status.readyToInstall': 'v{version} готова к установке', + 'about.update.status.readyToInstallNoVersion': + 'Новая версия загружена и готова. Перезапусти для применения.', + 'about.update.status.installing': 'Установка...', + 'about.update.status.restarting': 'Перезапуск...', + 'about.update.status.upToDate': 'У тебя установлена последняя версия.', + 'about.update.status.error': 'Ошибка проверки обновлений', + 'about.update.status.default': 'Проверить обновления', + 'welcome.connectionFailed': 'Ошибка подключения: {status} {statusText}', + 'welcome.connectionFailedMsg': 'Ошибка подключения: {message}', + 'welcome.continueLocally': 'Продолжить локально', 'welcome.continueLocallyExperimental': 'Продолжить локально (Экспериментально)', + 'welcome.localSessionStarting': 'Запуск локального сеанса...', + 'welcome.localSessionDesc': + 'Использует автономный локальный профиль и пропускает TinyHumans OAuth.', + 'chat.agentChatDesc': 'Открыть прямой чат с агентом.', + 'chat.modelPlaceholder': 'gpt-4o', + 'channels.activeRouteValue': '{channel} через {authMode}', + 'privacy.dataKind.messages': 'Сообщения', + 'privacy.dataKind.agents': 'Агенты', + 'privacy.dataKind.skills': 'Навыки', + 'privacy.dataKind.system': 'Система', + 'privacy.dataKind.meetings': 'Встречи', + 'privacy.dataKind.reminders': 'Напоминания', + 'privacy.dataKind.important': 'Важное', + 'onboarding.enableLocalAI': 'Включить локальный AI', + 'onboarding.skills.status.available': 'Доступно', + 'onboarding.skills.status.connected': 'Подключено', + 'onboarding.skills.status.connecting': 'Подключение', + 'onboarding.skills.status.error': 'Ошибка', + 'onboarding.skills.status.unavailable': 'Недоступно', + 'composio.statusUnavailable': 'Статус недоступен', + 'composio.authExpired': 'Срок авторизации истёк', + 'composio.reconnect': 'Переподключить', + 'composio.expiredAuthorization': 'Срок действия авторизации {name} истек', + 'composio.expiredDescription': + 'Повторно подключитесь, чтобы повторно включить инструменты {name}. OpenHuman будет держать эту интеграцию недоступной, пока вы не обновите доступ к OAuth.', + 'composio.envVarOverrides': 'задана, она переопределяет этот параметр.', + 'composio.previewBadge': 'Предварительный просмотр', + 'composio.previewTooltip': + 'Скоро интеграция агента — вы можете подключиться, но агент пока не может использовать этот набор инструментов.', + 'memory.day.sun': 'Вс', + 'memory.day.mon': 'Пн', + 'memory.day.tue': 'Вт', + 'memory.day.wed': 'Ср', + 'memory.day.thu': 'Чт', + 'memory.day.fri': 'Пт', + 'memory.day.sat': 'Сб', + 'memory.ingesting': 'Загрузка', + 'memory.ingestionQueued': 'В очереди', + 'memory.ingestingTitle': 'Загрузка {title}', + 'mic.noAudioCaptured': 'Аудио не захвачено', + 'mic.noSpeechDetected': 'Речь не обнаружена', + 'mic.lowConfidenceResult': 'Не удалось чётко распознать аудио — попробуйте ещё раз', + 'mic.failedToStopRecording': 'Не удалось остановить запись: {message}', + 'mic.transcriptionFailed': 'Ошибка транскрипции: {message}', + 'reflections.kind.retrospective': 'Ретроспектива', + 'reflections.kind.derivedFact': 'Выведенный факт', + 'reflections.kind.moodInsight': 'Инсайт о настроении', + 'reflections.kind.relationshipInsight': 'Инсайт об отношениях', + 'graph.tooltip.summary': 'Краткое содержание', + 'graph.tooltip.contact': 'Контакт', + 'localModel.usage.never': 'Никогда', + 'localModel.usage.mediumLoad': 'Средняя нагрузка', + 'localModel.usage.lowLoad': 'Низкая нагрузка', + 'localModel.usage.idleMode': 'Режим ожидания', + 'localModel.rebootstrapComplete': 'Повторная инициализация модели завершена.', + 'localModel.modelsVerified': 'Локальные модели проверены.', + 'accounts.addModal.allConnected': 'Все подключены', + 'accounts.addModal.title': 'Добавить аккаунт', + 'accounts.respondQueue.empty': 'Пусто', + 'accounts.respondQueue.hide': 'Скрыть очередь ответов', + 'accounts.respondQueue.loadFailed': 'Не удалось загрузить очередь ответов', + 'accounts.respondQueue.loading': 'Загрузка очереди…', + 'accounts.respondQueue.pending': 'Ожидает', + 'accounts.respondQueue.show': 'Показать очередь ответов', + 'accounts.respondQueue.title': 'Очередь ответов', + 'accounts.webviewHost.almostReady': 'Почти готово...', + 'accounts.webviewHost.loadTimeout': 'Таймаут загрузки', + 'accounts.webviewHost.loading': 'Загрузка {providerName}...', + 'accounts.webviewHost.loadingAccount': 'Загрузка аккаунта', + 'accounts.webviewHost.restoringSession': 'Восстановление сессии...', + 'accounts.webviewHost.retryLoading': 'Повторить загрузку', + 'accounts.webviewHost.takingLonger': '{providerName} загружается дольше обычного.', + 'accounts.webviewHost.timeoutHint': 'Подсказка по таймауту', + 'app.connectionBadge.composio': 'Composio', + 'app.connectionBadge.messaging': 'Мессенджеры', + 'app.connectionIndicator.connected': 'Подключено к OpenHuman AI 🚀', + 'app.connectionIndicator.connecting': 'Подключение', + 'app.connectionIndicator.coreOffline': 'Ядро офлайн', + 'app.connectionIndicator.disconnected': 'Отключено', + 'app.connectionIndicator.offline': 'Офлайн', + 'app.connectionIndicator.reconnecting': 'Переподключение…', + 'app.errorFallback.componentStack': 'Стек компонентов', + 'app.errorFallback.downloadLatest': 'Скачать последнюю версию', + 'app.errorFallback.heading': 'Заголовок', + 'app.errorFallback.hint': 'Подсказка', + 'app.errorFallback.reloadApp': 'Перезагрузить приложение', + 'app.errorFallback.subheading': 'Подзаголовок', + 'app.errorFallback.tryRecover': 'Попробовать восстановить', + 'app.localAiDownload.installing': 'Установка...', + 'app.localAiDownload.preparing': 'Подготовка...', + 'app.openhumanLink.accounts.continueWith': 'Продолжить со входом через {label}', + 'app.openhumanLink.accounts.done': 'Готово', + 'app.openhumanLink.accounts.intro': 'Введение', + 'app.openhumanLink.accounts.webviewNote': 'Примечание о Webview', + 'app.openhumanLink.billing.openDashboard': 'Открыть панель', + 'app.openhumanLink.billing.stayOnTrial': 'Остаться на пробном периоде', + 'app.openhumanLink.billing.trialCredit': 'Пробный кредит', + 'app.openhumanLink.billing.trialDesc': 'Описание пробного периода', + 'app.openhumanLink.defaultBody': + 'Ещё не готово во всплывающем окне. Откройте полную страницу настроек, когда понадобится.', + 'app.openhumanLink.discord.intro': 'Введение', + 'app.openhumanLink.discord.openInvite': 'Открыть приглашение', + 'app.openhumanLink.discord.perk1': 'Преимущество 1', + 'app.openhumanLink.discord.perk2': 'Преимущество 2', + 'app.openhumanLink.discord.perk3': 'Преимущество 3', + 'app.openhumanLink.discord.perk4': 'Преимущество 4', + 'app.openhumanLink.done': 'Готово', + 'app.openhumanLink.loadingChannelSetup': 'Загрузка настроек канала', + 'app.openhumanLink.maybeLater': 'Может, потом', + 'app.openhumanLink.notifications.asking': 'Запрос у ОС…', + 'app.openhumanLink.notifications.blocked': 'Заблокировано', + 'app.openhumanLink.notifications.blockedStep1': 'Заблокировано, шаг 1', + 'app.openhumanLink.notifications.blockedStep2': 'Заблокировано, шаг 2', + 'app.openhumanLink.notifications.blockedStep3': 'Заблокировано, шаг 3', + 'app.openhumanLink.notifications.intro': 'Введение', + 'app.openhumanLink.notifications.promptHint': 'Подсказка', + 'app.openhumanLink.notifications.retry': 'Повторить тестовое уведомление', + 'app.openhumanLink.notifications.send': 'Отправить тестовое уведомление', + 'app.openhumanLink.notifications.sendFailed': 'Не удалось отправить: {error}', + 'app.openhumanLink.notifications.sent': + 'Тестовое уведомление отправлено. Если вы его не получили, откройте «Системные настройки» → «Уведомления» → OpenHuman, включите «Разрешить уведомления» и установите стиль баннера «Постоянный».', + 'app.openhumanLink.skipForNow': 'Пропустить', + 'app.openhumanLink.telegramUnavailable': 'Telegram недоступен', + 'app.openhumanLink.title.accounts': 'Подключи свои приложения', + 'app.openhumanLink.title.billing': 'Оплата и кредиты', + 'app.openhumanLink.title.discord': 'Вступи в сообщество', + 'app.openhumanLink.title.messaging': 'Подключи канал связи', + 'app.openhumanLink.title.notifications': 'Разрешить уведомления', + 'app.persistRehydration.body': 'Текст', + 'app.persistRehydration.heading': 'Заголовок', + 'app.persistRehydration.resetCta': 'Сброс…', + 'app.persistRehydration.resetting': 'Сброс…', + 'app.routeLoading.initializing': 'Инициализация OpenHuman...', + 'app.update.currentlyOn': '{version}', + 'app.update.errorFallback': 'Что-то пошло не так при обновлении.', + 'app.update.header.default': 'Обновление', + 'app.update.header.error': 'Ошибка обновления', + 'app.update.header.installing': 'Установка обновления', + 'app.update.header.readyToInstall': 'Обновление готово к установке', + 'app.update.header.restarting': 'Перезапуск…', + 'app.update.later': 'Позже', + 'app.update.newVersionReady': 'Новая версия готова к установке.', + 'app.update.progress.downloaded': 'Загружено: {amount}', + 'app.update.progress.installing': 'Установка новой версии…', + 'app.update.progress.restarting': 'Перезапуск приложения…', + 'app.update.progress.working': '{percent}%', + 'app.update.restartNote': 'Примечание о перезапуске', + 'app.update.restartNow': 'Перезапустить сейчас', + 'app.update.versionReady': 'Версия {newVersion} готова к установке.', + 'channels.discord.accountLinked': 'Аккаунт привязан', + 'channels.discord.connect': 'Подключить', + 'channels.discord.linkTokenExpired': 'Токен привязки истёк. Попробуй ещё раз.', + 'channels.discord.linkTokenInstruction': '{token}', + 'channels.discord.linkTokenLabel': 'Метка токена привязки', + 'channels.discord.linkTokenOnce': 'Токен привязки (однократно)', + 'channels.discord.picker.allPermissionsOk': 'Бот имеет все необходимые права в этом канале.', + 'channels.discord.picker.botNotInServers': 'Бот не на серверах', + 'channels.discord.picker.category': 'Категория', + 'channels.discord.picker.channel': 'Канал', + 'channels.discord.picker.checkingPermissions': 'Проверка прав', + 'channels.discord.picker.loadingChannels': 'Загрузка каналов...', + 'channels.discord.picker.loadingServers': 'Загрузка серверов...', + 'channels.discord.picker.missingPermissions': 'Недостаточно прав', + 'channels.discord.picker.noChannels': 'Текстовые каналы не найдены', + 'channels.discord.picker.noServers': 'Серверы не найдены', + 'channels.discord.picker.selectChannel': 'Выбери канал', + 'channels.discord.picker.selectServer': 'Выбери сервер', + 'channels.discord.picker.server': 'Сервер', + 'channels.discord.picker.serverChannelSelection': 'Выбор сервера и канала', + 'channels.discord.savedRestartRequired': 'Канал сохранён. Перезапусти приложение для активации.', + 'channels.telegram.connect': 'Подключить', + 'channels.telegram.managedDmConnecting': 'Подключение управляемого DM', + 'channels.telegram.managedDmTimeout': 'Таймаут управляемого DM', + 'channels.telegram.reconnect': 'Переподключить', + 'channels.telegram.savedRestartRequired': 'Канал сохранён. Перезапусти приложение для активации.', + 'channels.web.alwaysAvailable': 'Всегда доступно', + 'chat.approval.approve': 'Утвердить', + 'chat.approval.alwaysAllow': 'Всегда разрешать', + 'chat.approval.alwaysAllowHint': + 'Перестаньте запрашивать этот инструмент — добавьте его в свой список «Всегда разрешено».', + 'chat.approval.deciding': 'Работающий…', + 'chat.approval.deny': 'Отрицать', + 'chat.approval.error': 'Не удалось записать свое решение — попробуйте еще раз.', + 'chat.approval.fallback': 'Агент хочет выполнить действие, требующее вашего одобрения.', + 'chat.approval.title': 'Требуется одобрение', + 'chat.approval.tool': 'Инструмент:', + 'channels.authMode.managed_dm': 'Войдите с помощью OpenHuman', + 'channels.authMode.oauth': 'OAuth Вход в систему', + 'channels.authMode.bot_token': 'Используйте свой собственный токен бота', + 'channels.authMode.api_key': 'Используйте свой собственный ключ API', + 'channels.fieldRequired': 'Требуется {field}', + 'channels.mcp.title': 'MCP Серверы', + 'channels.mcp.description': + 'Просматривайте серверы протокола контекста модели и управляйте ими — они расширяют возможности ИИ новыми инструментами.', + 'channels.discord.displayName': 'Discord', + 'channels.discord.description': 'Отправляйте и получайте сообщения через Discord.', + 'channels.discord.authMode.bot_token.description': + 'Предоставьте свой собственный токен бота Discord.', + 'channels.discord.authMode.oauth.description': + 'Установите бот OpenHuman на свой сервер Discord через OAuth.', + 'channels.discord.authMode.managed_dm.description': + 'Свяжите свою личную учетную запись Discord с ботом OpenHuman.', + 'channels.discord.fields.bot_token.label': 'Токен бота', + 'channels.discord.fields.bot_token.placeholder': 'Ваш токен бота Discord', + 'channels.discord.fields.guild_id.label': 'Идентификатор сервера (гильдии)', + 'channels.discord.fields.guild_id.placeholder': 'Необязательно: ограничить конкретным сервером', + 'channels.telegram.displayName': 'Telegram', + 'channels.telegram.description': 'Отправка и получение сообщений через Telegram.', + 'channels.telegram.authMode.managed_dm.description': + 'Отправьте сообщение боту OpenHuman Telegram напрямую.', + 'channels.telegram.authMode.bot_token.description': + 'Предоставьте свой собственный токен бота Telegram от @BotFather.', + 'channels.telegram.fields.bot_token.label': 'Токен бота', + 'channels.telegram.fields.bot_token.placeholder': '123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11', + 'channels.telegram.fields.allowed_users.label': 'Разрешенные пользователи', + 'channels.telegram.fields.allowed_users.placeholder': + 'Имена пользователей Telegram, разделенные запятыми', + 'channels.telegram.remoteControlTitle': 'Удаленное управление (Telegram)', + 'channels.telegram.remoteControlBody': + 'Из разрешенного чата Telegram отправьте /status, /sessions, /new или /help. В маршрутизации моделей по-прежнему используются /model и /models.', + 'channels.web.displayName': 'Интернет', + 'channels.web.description': 'Общайтесь через встроенный веб-интерфейс.', + 'channels.web.authMode.managed_dm.description': + 'Используйте встроенный веб-чат — настройка не требуется.', + 'channels.yuanbao.connect': 'Connect', + 'channels.yuanbao.connecting': 'Подключение…', + 'channels.yuanbao.fieldRequired': '{field} обязателен', + 'channels.yuanbao.reconnect': 'Reconnect', + 'channels.yuanbao.savedRestartRequired': + 'Канал сохранён. Перезапустите приложение для его активации.', + 'channels.yuanbao.unexpectedStatus': 'Неожиданный статус подключения: {status}', + 'chat.unsubscribeApproval.approve': 'Подтвердить и отписаться', + 'chat.unsubscribeApproval.approved': '✓ Подписка успешно отменена.', + 'chat.unsubscribeApproval.denied': '✕ Запрос отклонён.', + 'chat.unsubscribeApproval.deny': 'Отклонить', + 'chat.unsubscribeApproval.processing': 'Обработка...', + 'chat.unsubscribeApproval.title': 'Запрос на отписку', + 'commandPalette.ariaLabel': 'Палитра команд', + 'commandPalette.description': 'Описание', + 'commandPalette.label': 'Команды', + 'commandPalette.noResults': 'Ничего не найдено', + 'commandPalette.placeholder': 'Введи команду или поиск…', + 'commandPalette.searchAria': 'Поиск команд', + 'commandPalette.shortcutHint': 'Нажмите ?, чтобы увидеть все сочетания', + 'commandPalette.title': 'Палитра команд', + 'kbd.ariaLabel': 'Сочетание клавиш: {shortcut}', + 'iosMascot.connectedTo': 'Подключен к', + 'iosMascot.defaultPairedLabel': 'Рабочий стол', + 'iosMascot.disconnect': 'Отключиться', + 'iosMascot.error.generic': 'Что-то пошло не так. Пожалуйста, попробуйте еще раз.', + 'iosMascot.error.sendFailed': 'Не удалось отправить. Проверьте свое соединение.', + 'iosMascot.pushToTalk': 'Нажми и говори', + 'iosMascot.sendMessage': 'Отправить сообщение', + 'iosMascot.thinking': 'Думаю...', + 'iosMascot.typeMessage': 'Введите a сообщение...', + 'iosPair.connectedLoading': 'Подключено! Загрузка... Срок действия', + 'iosPair.connecting': 'Подключение к рабочему столу...', + 'iosPair.desktopLabel': 'Рабочий стол', + 'iosPair.error.camera': + 'Сканирование камерой не удалось. Проверьте разрешения камеры и повторите попытку.', + 'iosPair.error.connectionFailed': + 'Не удалось подключиться. Убедитесь, что десктопное приложение запущено, и повторите попытку.', + 'iosPair.error.invalidQr': + 'Неверный QR-код. Убедитесь, что вы сканируете код сопряжения OpenHuman.', + 'iosPair.error.unreachableDesktop': + 'Не удалось подключиться к рабочему столу. Убедитесь, что оба устройства в сети, и повторите попытку.', + 'iosPair.expired': 'QR code истек. Попросите рабочий стол повторно сгенерировать код.', + 'iosPair.instructions': + 'Откройте OpenHuman на рабочем столе, перейдите в Настройки > Устройства и нажмите «Привязать телефон», чтобы показать QR-код.', + 'iosPair.retryScan': 'Повторить сканирование', + 'iosPair.scanQrCode': 'Сканирование QR code', + 'iosPair.scannerOpening': 'Открытие сканера...', + 'iosPair.step.openDesktop': 'Откройте OpenHuman на рабочем столе', + 'iosPair.step.openSettings': 'Перейдите в «Настройки» > «Устройства»', + 'iosPair.step.showQr': 'Нажмите «Подключить телефон», чтобы отобразить QR', + 'iosPair.title': 'Сопряжение с рабочим столом', + 'composio.connect.additionalConfigRequired': 'Требуется дополнительная настройка', + 'composio.connect.atlassianSubdomainHint': 'acme', + 'composio.connect.atlassianSubdomainLabel': 'Поддомен Atlassian', + 'composio.connect.connect': 'Подключить', + 'composio.connect.dynamicsOrgNameHint': + 'Например, "myorg" для myorg.crm.dynamics.com. Введите только короткое название организации, а не полный URL.', + 'composio.connect.dynamicsOrgNameLabel': 'Название организации Dynamics 365', + 'composio.connect.connectionFailed': 'Не удалось подключиться (статус: {status}).', + 'composio.connect.disconnectFailed': 'Ошибка отключения: {msg}', + 'composio.connect.disconnecting': 'Отключение…', + 'composio.connect.idleDescription': 'Подключите свой', + 'composio.connect.idleDescriptionSuffix': + 'аккаунт. Мы откроем окно браузера, вы предоставите доступ там, и приложение автоматически обнаружит подключение.', + 'composio.connect.isConnected': 'подключён.', + 'composio.connect.manage': 'Управлять', + 'composio.connect.needsFieldsPrefix': 'Чтобы подключить', + 'composio.connect.needsFieldsSuffix': + 'нам нужно немного больше информации. Заполните недостающие поля ниже и повторите попытку.', + 'composio.connect.needsSubdomain': 'Чтобы подключить', + 'composio.connect.needsSubdomainSuffix': + 'введите ваш поддомен Atlassian (например, acme для acme.atlassian.net) и попробуйте снова.', + 'composio.connect.oauthComplete': 'Ожидание завершения OAuth…', + 'composio.connect.oauthTimeout': 'Таймаут OAuth', + 'composio.connect.permissions': 'Разрешения', + 'composio.connect.permissionsDefault': 'Чтение + запись включены по умолчанию', + 'composio.connect.permissionsNote': 'может раскрыть', + 'composio.connect.permissionsNoteSuffix': + 'Собственные права агента OpenHuman настраиваются ниже переключателями чтения, записи и администратора.', + 'composio.connect.reopenBrowser': 'Открыть браузер снова', + 'composio.connect.requestingUrl': 'Запрос URL подключения…', + 'composio.connect.requiredFieldEmpty': 'Это поле обязательно для заполнения.', + 'composio.connect.retryConnection': 'Повторить подключение', + 'composio.connect.scopeLoadError': 'Не удалось загрузить настройки области: {msg}', + 'composio.connect.scopeSaveError': 'Не удалось сохранить область {key}: {msg}', + 'composio.connect.scope.read': 'Чтение', + 'composio.connect.scope.readHint': 'Разрешить агенту читать данные из этого соединения.', + 'composio.connect.scope.write': 'Запись', + 'composio.connect.scope.writeHint': + 'Разрешить агенту создавать или изменять данные через это соединение.', + 'composio.connect.scope.admin': 'Администратор', + 'composio.connect.scope.adminHint': + 'Разрешить агенту управлять настройками, разрешениями или деструктивными действиями.', + 'composio.connect.subdomainInvalid': + 'Введите только короткий поддомен (например, "acme"), а не полный URL. Допустимы только буквы, цифры и дефисы.', + 'composio.connect.subdomainRequired': 'Введи свой поддомен Atlassian для продолжения.', + 'composio.connect.wabaIdHint': + 'Найдите его через GET /me/businesses, затем GET /{business_id}/owned_whatsapp_business_accounts, используя ваш токен доступа Meta.', + 'composio.connect.wabaIdLabel': 'ID аккаунта WhatsApp Business', + 'composio.connect.wabaIdRequired': + 'Введи ID аккаунта WhatsApp Business (WABA ID) для продолжения.', + 'composio.connect.waitingFor': 'Ожидание', + 'composio.connect.waitingHint': 'Подсказка ожидания', + 'composio.triggers.heading': 'Триггеры', + 'composio.triggers.listenFrom': 'Слушать события от', + 'composio.triggers.loadError': 'Не удалось загрузить триггеры', + 'composio.triggers.needsConfiguration': 'Требуется настройка', + 'composio.triggers.noneAvailable': 'Сейчас нет доступных триггеров для', + 'conversations.taskKanban.moveLeft': 'Переместить влево', + 'conversations.taskKanban.moveRight': 'Переместить вправо', + 'conversations.taskKanban.title': 'Задачи', + 'conversations.taskKanban.approval.default': 'По умолчанию', + 'conversations.taskKanban.approval.notRequired': 'Не требуется', + 'conversations.taskKanban.approval.notRequiredBadge': 'нет одобрения', + 'conversations.taskKanban.approval.required': 'Необходимый', + 'conversations.taskKanban.approval.requiredBadge': 'approval', + 'conversations.taskKanban.approval.requiredBeforeExecution': 'Требуется перед выполнением', + 'conversations.taskKanban.briefButton': 'Краткое описание задачи', + 'conversations.taskKanban.briefTitle': 'Краткое описание задачи', + 'conversations.taskKanban.closeBrief': 'Закрыть краткое описание задачи', + 'conversations.taskKanban.field.acceptanceCriteria': 'Критерии приемки', + 'conversations.taskKanban.field.allowedTools': 'Разрешенные инструменты', + 'conversations.taskKanban.field.approval': 'Одобрение', + 'conversations.taskKanban.field.assignedAgent': 'Назначенный агент', + 'conversations.taskKanban.field.blocker': 'Блокатор', + 'conversations.taskKanban.field.evidence': 'Доказательство', + 'conversations.taskKanban.field.notes': 'Примечания', + 'conversations.taskKanban.field.objective': 'Цель', + 'conversations.taskKanban.field.plan': 'План', + 'conversations.taskKanban.field.status': 'Статус', + 'conversations.taskKanban.field.title': 'Заголовок', + 'conversations.taskKanban.saveChanges': 'Сохранить изменения', + 'conversations.taskKanban.deleteCard': 'Удалить', + 'conversations.taskKanban.updateFailed': 'Не удалось обновить задачу; изменения не сохранились.', + 'conversations.toolTimeline.turn': 'ход', + 'conversations.toolTimeline.workerThread': 'чат воркера', + 'daemon.serviceBlockingGate.body': 'Текст', + 'daemon.serviceBlockingGate.downloadHint': 'Подсказка по загрузке', + 'daemon.serviceBlockingGate.downloadLatest': 'Скачать последнюю версию', + 'daemon.serviceBlockingGate.retryCore': 'Повторить запуск Core', + 'daemon.serviceBlockingGate.retryFailed': + 'Повтор не удался. Скачай последнюю версию и попробуй снова.', + 'daemon.serviceBlockingGate.retrying': 'Повтор...', + 'daemon.serviceBlockingGate.title': 'Ядро OpenHuman недоступно', + 'home.banners.discordSubtitle': 'Подзаголовок Discord', + 'home.banners.discordTitle': 'Вступи в наш Discord', + 'home.banners.earlyBirdDismiss': 'Закрыть баннер', + 'home.banners.earlyBirdFirstSub': 'первую подписку.', + 'home.banners.earlyBirdOn': 'Скидка раннего доступа на', + 'home.banners.earlyBirdTitle': 'Первые 1 000 пользователей получают скидку 60%.', + 'home.banners.earlyBirdUseCode': 'Используйте промокод для раннего доступа', + 'home.banners.getSubscription': 'оформить подписку', + 'home.banners.promoCreditsBody': 'Описание промо-кредитов', + 'home.banners.promoCreditsTitle': '{amount}', + 'home.banners.promoCreditsUsage': 'Использование промо-кредитов', + 'intelligence.memoryChunk.detail.chunk': 'Блок', + 'intelligence.memoryChunk.detail.copyChunkId': 'Скопировать ID блока', + 'intelligence.memoryChunk.detail.embeddingInfo': 'bge-m3 1024dim', + 'intelligence.memoryChunk.detail.noEmbedding': 'Векторного вложения нет', + 'intelligence.memoryChunk.letterhead.from': 'от', + 'intelligence.memoryChunk.letterhead.to': 'кому', + 'intelligence.memoryChunk.mentioned.chunkOne': '1 фрагмент', + 'intelligence.memoryChunk.mentioned.chunkOther': '{count} фрагментов', + 'intelligence.memoryChunk.mentioned.heading': 'у п о м я н у т о', + 'intelligence.memoryChunk.scoreBars.ariaScore': '{name} оценка {pct} процентов', + 'intelligence.memoryChunk.scoreBars.atThreshold': 'при {threshold}', + 'intelligence.memoryChunk.scoreBars.dropped': 'отброшено', + 'intelligence.memoryChunk.scoreBars.heading': 'п о ч е м у с о х р а н е н о', + 'intelligence.memoryChunk.scoreBars.kept': 'сохранено', + 'intelligence.diagram.title': 'Архитектурная диаграмма', + 'intelligence.diagram.description': + 'Последний локальный результат архитектуры с настроенного конечного точки диаграммы.', + 'intelligence.diagram.refresh': 'Refresh', + 'intelligence.diagram.refreshAria': 'Обновить диаграмму', + 'intelligence.diagram.emptyTitle': 'Диаграмма пока недоступна', + 'intelligence.diagram.emptyDescription': + 'Создайте архитектурную диаграмму из оркестратора, и эта панель обновится с настроенной локальной конечной точки.', + 'intelligence.diagram.skillInstallCommand': 'npx skills add yizhiyanhua-ai/fireworks-tech-graph', + 'intelligence.diagram.promptExample': + 'Создай архитектурную диаграмму текущего роя в тёмном терминальном стиле', + 'intelligence.diagram.imageAlt': 'Последняя сгенерированная архитектурная диаграмма OpenHuman', + 'intelligence.diagram.refreshesEvery': 'Обновляется каждые {seconds} с', + 'intelligence.memoryText.entityTypePrefix': 'Тип сущности', + 'intelligence.screenDebug.active': 'Активно', + 'intelligence.screenDebug.app': 'Приложение', + 'intelligence.screenDebug.bounds': 'Границы', + 'intelligence.screenDebug.captureAlt': 'Результат тестового захвата', + 'intelligence.screenDebug.captureFailed': 'Ошибка', + 'intelligence.screenDebug.captureSuccess': 'Успех', + 'intelligence.screenDebug.captureTest': 'Тест захвата', + 'intelligence.screenDebug.capturing': 'Захват', + 'intelligence.screenDebug.frames': 'Кадры', + 'intelligence.screenDebug.idle': 'Ожидание', + 'intelligence.screenDebug.lastApp': 'Последнее приложение', + 'intelligence.screenDebug.mode': 'Режим', + 'intelligence.screenDebug.permAccessibility': 'Доступность', + 'intelligence.screenDebug.permInput': 'Ввод', + 'intelligence.screenDebug.permScreen': 'Доступность', + 'intelligence.screenDebug.permissions': 'Разрешения', + 'intelligence.screenDebug.platformNotSupported': 'Платформа не поддерживается', + 'intelligence.screenDebug.recentVisionSummaries': 'Недавние визуальные резюме', + 'intelligence.screenDebug.session': 'Сессия', + 'intelligence.screenDebug.size': 'Размер', + 'intelligence.screenDebug.status': 'Статус', + 'intelligence.screenDebug.testCapture': 'Тестовый захват', + 'intelligence.screenDebug.time': 'Время', + 'intelligence.screenDebug.title': 'Заголовок', + 'intelligence.screenDebug.unknown': 'Неизвестно', + 'intelligence.screenDebug.visionQueue': 'Очередь обработки изображений', + 'intelligence.screenDebug.visionState': 'Состояние обработки изображений', + 'intelligence.tasks.activeBoardOne': '1 активная доска в разговорах', + 'intelligence.tasks.activeBoardOther': '{count} активных досок в разговорах', + 'intelligence.tasks.empty': 'Досок задач агента пока нет', + 'intelligence.tasks.emptyHint': 'Пусто', + 'intelligence.tasks.failedToLoad': 'Не удалось загрузить', + 'intelligence.tasks.live': 'в реальном времени', + 'intelligence.tasks.loadingBoards': 'Загрузка досок задач…', + 'intelligence.tasks.threadPrefix': 'Тред {thread}', + 'intelligence.tasks.subtitle': 'Ваши задачи и доски задач агентов в рабочей области.', + 'intelligence.tasks.newTask': 'Новая задача', + 'intelligence.tasks.personalBoardTitle': 'Задачи агента', + 'intelligence.tasks.personalEmpty': 'Личных задач пока нет', + 'intelligence.tasks.composer.title': 'Новая задача', + 'intelligence.tasks.composer.titleLabel': 'Заголовок', + 'intelligence.tasks.composer.titlePlaceholder': 'Что нужно сделать?', + 'intelligence.tasks.composer.statusLabel': 'Статус', + 'intelligence.tasks.composer.attachLabel': 'Прикрепить к беседе', + 'intelligence.tasks.composer.attachNone': 'Личное (без разговора)', + 'intelligence.tasks.composer.objectiveLabel': 'Цель', + 'intelligence.tasks.composer.objectivePlaceholder': 'Необязательно — желаемый результат', + 'intelligence.tasks.composer.notesLabel': 'Примечания', + 'intelligence.tasks.composer.notesPlaceholder': 'Дополнительные примечания', + 'intelligence.tasks.composer.create': 'Создать задачу', + 'intelligence.tasks.composer.creating': 'Создание…', + 'intelligence.tasks.composer.createFailed': 'Не удалось создать задачу', + 'notifications.card.dismiss': 'Закрыть уведомление', + 'notifications.card.importanceTitle': 'Важность: {pct}%', + 'notifications.center.empty': 'Уведомлений пока нет', + 'notifications.center.emptyHint': 'Пусто', + 'notifications.center.filterAll': 'Все', + 'notifications.center.markAllRead': 'Отметить всё прочитанным', + 'notifications.center.title': 'Уведомления', + 'oauth.button.connecting': 'Подключение...', + 'oauth.button.loopbackTimeout': + 'Время входа истекло — браузер не завершил перенаправление OAuth. Пожалуйста, попробуйте снова.', + 'oauth.login.continueWith': 'Продолжить через', + 'onboarding.contextGathering.buildingDesc': 'Сборка профиля', + 'onboarding.contextGathering.buildingProfile': 'Составление профиля...', + 'onboarding.contextGathering.continueToChat': 'Перейти в чат', + 'onboarding.contextGathering.coreAlive': 'Ядро доступно — первый запуск может занять минуту.', + 'onboarding.contextGathering.coreAliveProbing': 'Проверка соединения с ядром…', + 'onboarding.contextGathering.coreUnreachable': + 'Ядро не отвечает. Можно продолжить и попробовать позже.', + 'onboarding.contextGathering.errorDesc': + 'Мы не смогли построить ваш полный профиль прямо сейчас, но это нормально — вы можете продолжить, и профиль будет дополняться со временем.', + 'onboarding.contextGathering.stillWorkingDesc': + 'Первый запуск может занять 30–60 секунд, пока мы прогреваем локальную модель и инструменты. Вы можете перейти в чат в любой момент — построение профиля продолжится в фоне.', + 'onboarding.contextGathering.stillWorkingTitle': 'Профиль ещё составляется…', + 'onboarding.contextGathering.title': 'Сбор контекста', + 'openhuman.team_list_teams': 'Список команд', + 'overlay.ariaAttention': 'Сообщение', + 'overlay.ariaCompanion': 'Спутник активен', + 'overlay.ariaOrb': 'Оверлей OpenHuman', + 'overlay.ariaVoiceActive': 'Голосовой ввод активен', + 'overlay.companion.error': 'Ошибка', + 'overlay.companion.listening': 'Слушает…', + 'overlay.companion.pointing': 'Указывает…', + 'overlay.companion.speaking': 'Говорит…', + 'overlay.companion.thinking': 'Думает…', + 'overlay.orbTitle': 'Перетащи для перемещения · Двойной клик для сброса позиции', + 'pages.settings.account.connections': 'Подключения', + 'pages.settings.account.connectionsDesc': 'Описание подключений', + 'pages.settings.account.migration': 'Импорт из другого ассистента', + 'pages.settings.account.migrationDesc': + 'Перенесите память и заметки из OpenClaw (а вскоре и Hermes) в это рабочее пространство.', + 'pages.settings.account.privacy': 'Конфиденциальность', + 'pages.settings.account.privacyDesc': 'Описание конфиденциальности', + 'pages.settings.account.recoveryPhrase': 'Фраза восстановления', + 'pages.settings.account.recoveryPhraseDesc': 'Описание фразы восстановления', + 'pages.settings.account.team': 'Команда', + 'pages.settings.account.teamDesc': 'Описание команды', + 'pages.settings.accountSection.description': + 'Фраза восстановления, команда, подключения и настройки конфиденциальности.', + 'pages.settings.accountSection.title': 'Аккаунт', + 'pages.settings.ai.llm': 'LLM', + 'pages.settings.ai.llmDesc': 'Описание LLM', + 'pages.settings.ai.voice': 'Голос', + 'pages.settings.ai.voiceDesc': 'Описание голоса', + 'pages.settings.aiSection.description': 'Языковые модели, локальный Ollama и голос (STT / TTS).', + 'pages.settings.aiSection.title': 'ИИ', + 'pages.settings.composioSection.title': 'Composio', + 'pages.settings.composioSection.description': + 'Маршрутизация, триггеры и история интеграций на базе Composio.', + 'settings.developerMenu.composio.title': 'Composio', + 'settings.developerMenu.composio.desc': + 'Режим маршрутизации, триггеры интеграции и архив истории триггеров.', + 'pages.settings.features.desktopCompanion': 'Десктоп-спутник', + 'pages.settings.features.desktopCompanionDesc': + 'Голосовой ассистент с распознаванием экрана — слушает, видит, говорит, указывает', + 'pages.settings.features.messagingChannels': 'Каналы мессенджеров', + 'pages.settings.features.messagingChannelsDesc': 'Описание каналов сообщений', + 'pages.settings.features.notifications': 'Уведомления', + 'pages.settings.features.notificationsDesc': 'Описание уведомлений', + 'pages.settings.features.screenAwareness': 'Слежение за экраном', + 'pages.settings.features.screenAwarenessDesc': 'Описание распознавания экрана', + 'pages.settings.features.tools': 'Инструменты', + 'pages.settings.features.toolsDesc': 'Описание инструментов', + 'pages.settings.featuresSection.description': 'Слежение за экраном, мессенджеры и инструменты.', + 'pages.settings.featuresSection.title': 'Функции', + 'privacy.dataKind.credentials': 'Учётные данные', + 'privacy.dataKind.derived': 'Производные данные', + 'privacy.dataKind.diagnostics': 'Диагностика', + 'privacy.dataKind.metadata': 'Метаданные', + 'privacy.dataKind.raw': 'Необработанные данные', + 'privacy.whatLeaves.link.label': 'Что покидает мой компьютер?', + 'rewards.community.achievementsUnlocked': 'Открыто достижений: {unlocked} из {total}', + 'rewards.community.connectDiscord': 'Подключить Discord', + 'rewards.community.cumulativeTokens': 'Токенов всего', + 'rewards.community.currentStreak': 'Текущая серия', + 'rewards.community.discordLinkedNotInGuild': 'Discord привязан, но не в сервере', + 'rewards.community.discordMember': 'Присоединился к серверу', + 'rewards.community.discordNotLinked': 'Discord не привязан', + 'rewards.community.discordServer': 'Сервер Discord', + 'rewards.community.discordStatusUnavailable': 'Статус Discord недоступен', + 'rewards.community.discordWaiting': 'Ожидание Discord', + 'rewards.community.heroSubtitle': 'Подзаголовок', + 'rewards.community.heroTitle': 'Заголовок', + 'rewards.community.joinDiscord': 'Присоединиться к Discord', + 'rewards.community.loadingRewards': 'Загрузка наград…', + 'rewards.community.locked': 'Разблокировано', + 'rewards.community.retrying': 'Повтор…', + 'rewards.community.rolesAndRewards': 'Роли и награды', + 'rewards.community.streakDays': '{n}', + 'rewards.community.syncPending': 'Синхронизация наград ожидает', + 'rewards.community.syncPendingDesc': 'Ожидание синхронизации', + 'rewards.community.syncUnavailable': 'Синхронизация недоступна', + 'rewards.community.tryAgain': 'Повтор…', + 'rewards.community.unknown': 'Неизвестно', + 'rewards.community.unlocked': 'Разблокировано', + 'rewards.community.yourProgress': 'Твой прогресс', + 'rewards.coupon.colCode': 'Код', + 'rewards.coupon.colRedeemed': 'Активирован', + 'rewards.coupon.colReward': 'Награда', + 'rewards.coupon.colStatus': 'Статус', + 'rewards.coupon.loadingHistory': 'Загрузка истории наград…', + 'rewards.coupon.noCodes': 'Промокоды ещё не использованы.', + 'rewards.coupon.pending': 'Ожидает', + 'rewards.coupon.placeholder': 'Промокод', + 'rewards.coupon.promoCredits': 'Промокредиты', + 'rewards.coupon.recentRedemptions': 'Недавние активации', + 'rewards.coupon.redeemAccepted': + '{code} принят. {amount} разблокируется после выполнения требуемого действия.', + 'rewards.coupon.redeemButton': 'Использовать код', + 'rewards.coupon.redeemSuccess': '{code} применён. {amount} добавлено к вашим кредитам.', + 'rewards.coupon.redeemedCodes': 'Активированные коды', + 'rewards.coupon.redeeming': 'Активация...', + 'rewards.coupon.statusApplied': 'Применён', + 'rewards.coupon.statusPendingAction': 'Ожидает действия', + 'rewards.coupon.statusRedeemed': 'Использован', + 'rewards.coupon.subtitle': 'Подзаголовок', + 'rewards.coupon.title': 'Активировать промокод', + 'rewards.referralSection.activity': 'Реферальная активность', + 'rewards.referralSection.apply': 'Применение…', + 'rewards.referralSection.applying': 'Применение…', + 'rewards.referralSection.colReferredUser': 'Приглашённый пользователь', + 'rewards.referralSection.colReward': 'Награда', + 'rewards.referralSection.colStatus': 'Статус', + 'rewards.referralSection.colUpdated': 'Обновлено', + 'rewards.referralSection.completed': 'Завершено', + 'rewards.referralSection.copyCode': 'Скопировать код', + 'rewards.referralSection.copyFailed': 'Не удалось скопировать', + 'rewards.referralSection.haveCode': 'Есть реферальный код?', + 'rewards.referralSection.haveCodeDesc': 'Есть код', + 'rewards.referralSection.linked': 'Привязан', + 'rewards.referralSection.linkedCode': '(код {code})', + 'rewards.referralSection.loading': 'Загрузка реферальной программы…', + 'rewards.referralSection.retry': 'Повторить', + 'rewards.referralSection.noReferrals': 'Рефералов нет', + 'rewards.referralSection.pendingReferrals': 'Ожидающие рефералы', + 'rewards.referralSection.placeholder': 'Реферальный код', + 'rewards.referralSection.share': 'Поделиться', + 'rewards.referralSection.statusCompleted': 'Завершено', + 'rewards.referralSection.statusExpired': 'Истёк срок', + 'rewards.referralSection.statusJoined': 'Вступил', + 'rewards.referralSection.subtitle': 'Подзаголовок', + 'rewards.referralSection.title': 'Приглашай друзей, зарабатывай кредиты', + 'rewards.referralSection.totalEarned': 'Заработано всего', + 'rewards.referralSection.yourCode': 'Твой код', + 'settings.ai.addCloudProvider': 'Добавить облачного провайдера', + 'settings.ai.addProvider': 'Сохранение…', + 'settings.ai.apiKeyFieldLabel': 'Поле API-ключа', + 'settings.ai.apiKeyRequired': 'Вставь свой API-ключ для продолжения.', + 'settings.ai.apiKeyStoredEncrypted': 'API-ключ хранится в зашифрованном виде', + 'settings.ai.apiKeysEncrypted': 'auth-profiles.json', + 'settings.ai.clearStoredKey': 'Очистить сохранённый ключ', + 'settings.ai.connectProvider': 'Подключить провайдера', + 'settings.ai.customRouting': 'Пользовательская маршрутизация', + 'settings.ai.defaultResolvesTo': 'По умолчанию используется', + 'settings.ai.discard': 'Отменить', + 'settings.ai.editProvider': 'Изменить провайдера', + 'settings.ai.llmProviders': 'LLM-провайдеры', + 'settings.ai.llmProvidersDesc': 'Описание провайдеров LLM', + 'settings.ai.localOllama': 'Локально (Ollama)', + 'settings.ai.modelLabel': 'Модель', + 'settings.ai.noCustomProviders': 'Нет пользовательских провайдеров', + 'settings.ai.openAiCompat.authHeaderExample': 'Авторизация: Носитель <ваш ключ>', + 'settings.ai.openAiCompat.authHeaderLabel': 'Заголовок аутентификации', + 'settings.ai.openAiCompat.baseUrlLabel': 'База URL', + 'settings.ai.openAiCompat.baseUrlUnavailable': 'Недоступно', + 'settings.ai.openAiCompat.clearKey': 'Очистить ключ', + 'settings.ai.openAiCompat.description': + 'Направьте локальные жгуты на этот сервер /v1 для маршрутизации через поставщиков, настроенных ниже. Для аутентификации используется стабильный ключ, который вы здесь установили, а не внутренний основной носитель приложения.', + 'settings.ai.openAiCompat.keyConfigured': 'Ключ настроен', + 'settings.ai.openAiCompat.keyRequired': 'Требуется ключ', + 'settings.ai.openAiCompat.rotateKey': 'Повернуть ключ', + 'settings.ai.openAiCompat.setKey': 'Установить ключ', + 'settings.ai.openAiCompat.title': 'OpenAI-совместимая конечная точка', + 'settings.ai.providerLabel': 'Провайдер', + 'skills.mcpComingSoon.title': 'MCP Серверы', + 'skills.mcpComingSoon.description': + 'Управление MCP-серверами скоро появится. Этот раздел станет центром для обнаружения, подключения и мониторинга интеграций с MCP-серверами.', + 'settings.ai.routing': 'Маршрутизация', + 'settings.ai.routingCustom': 'Пользовательская маршрутизация', + 'settings.ai.routingDefault': 'По умолчанию', + 'settings.ai.routingDesc': 'Описание маршрутизации', + 'settings.ai.saveChanges': 'Сохранение…', + 'settings.ai.saving': 'Сохранение…', + 'settings.ai.unsavedChange': 'несохранённое изменение', + 'settings.ai.unsavedChanges': 'несохранённые изменения', + 'settings.ai.workloadGroupBackground': 'Фоновые задачи', + 'settings.ai.workloadGroupChat': 'Чат', + 'settings.ai.disconnectProvider': 'Отключить {label}', + 'settings.ai.connectProviderLabel': 'Подключить {label}', + 'settings.ai.defaultLocalEndpoint': 'http://localhost:11434/v1', + 'settings.ai.endpointUrlLabel': 'Конечная точка URL', + 'settings.ai.localRuntimeHelper': + 'Где доступен {label}. По умолчанию используется локальный хост; укажите это на удаленном хосте (например, http://10.0.0.4:11434/v1), чтобы использовать общий экземпляр.', + 'settings.ai.endpointUrlRequired': 'Требуется конечная точка URL.', + 'settings.ai.endpointProtocolRequired': + 'Конечная точка должна начинаться с http:// или https://..', + 'settings.ai.connectProviderDialog': 'Подключиться {label}', + 'settings.ai.or': 'Или', + 'settings.ai.openRouterOauthDescription': + 'Войдите в систему с помощью OpenRouter и импортируйте управляемый пользователем ключ API с помощью PKCE.', + 'settings.ai.connecting': 'Подключение...', + 'settings.ai.backgroundLoops': 'Фоновые циклы', + 'settings.ai.backgroundLoopsDesc': + 'Посмотрите, что выполняется без сообщения чата, приостановите работу Heartbeat и проверьте последние строки кредитной книги.', + 'settings.ai.heartbeatControls': 'Управление пульсом.', + 'settings.ai.heartbeatControlsDesc': + 'По умолчанию выключено. Включение запускает цикл; отключение прерывает выполняемую задачу.', + 'settings.ai.heartbeatLoop': 'Цикл Heartbeat', + 'settings.ai.heartbeatLoopDesc': + 'Главный планировщик для планировщика + дополнительный подсознательный вывод.', + 'settings.ai.subconsciousInference': 'Подсознательный вывод.', + 'settings.ai.subconsciousInferenceDesc': + 'Выполняет оценку task/reflection на основе модели по тактам пульса.', + 'settings.ai.calendarMeetingChecks': 'Проверка собраний в календаре.', + 'settings.ai.calendarMeetingChecksDesc': + 'Вызывает список событий календаря для активных соединений календаря Google.', + 'settings.ai.calendarCap': 'Окончание календаря', + 'settings.ai.connectionsPerTick': '{count} подкл./тик', + 'settings.ai.meetingLookahead': 'Предварительный просмотр собрания', + 'settings.ai.minutesShort': '{count} мин', + 'settings.ai.reminderLookahead': 'Предварительный просмотр напоминания', + 'settings.ai.cronReminderChecks': 'Проверка напоминаний Cron.', + 'settings.ai.cronReminderChecksDesc': + 'Сканирование включает задания cron для предстоящих элементов, похожих на напоминания.', + 'settings.ai.relevantNotificationChecks': 'Соответствующие проверки уведомлений.', + 'settings.ai.relevantNotificationChecksDesc': + 'Превращает срочные локальные уведомления в упреждающие оповещения.', + 'settings.ai.externalDelivery': 'Внешняя доставка.', + 'settings.ai.externalDeliveryDesc': + 'Позволяет оповещениям о пульсе отправлять упреждающие сообщения во внешние каналы.', + 'settings.ai.interval': 'Интервал', + 'settings.ai.running': 'Выполняется...', + 'settings.ai.plannerTickNow': 'Планировщик отметьте сейчас', + 'settings.ai.loadingHeartbeatControls': 'Загрузка элементов управления пульсом...', + 'settings.ai.heartbeatControlsUnavailable': 'Элементы управления пульсом недоступны.', + 'settings.ai.loopMap': 'Карта цикла', + 'settings.ai.plannerSummary': + 'Планировщик: исходные события {sourceEvents}, отправлено {sent}, дедуплицировано {deduped}.', + 'settings.ai.routeLabel': 'маршрут: {route}', + 'settings.ai.on': 'на', + 'settings.ai.off': 'выкл.', + 'settings.ai.recentUsageLedger': 'Журнал недавнего использования', + 'settings.ai.recentUsageLedgerDesc': + 'Внутренние строки сегодня предоставляют доступ к action/time; исходные теги нуждаются в внутренней поддержке.', + 'settings.ai.latestSpend': 'Последние расходы: {amount} в {time} ({action})', + 'settings.ai.topActions': 'Популярные действия', + 'settings.ai.noSpendRows': 'Строки расходов не загружены.', + 'settings.ai.topHours': 'Максимальное количество часов', + 'settings.ai.noHourlySpend': 'Почасовых затрат пока нет.', + 'settings.ai.openhumanDefault': 'OpenHuman (по умолчанию)', + 'settings.ai.localModelResolved': 'Ollama · {model}', + 'settings.ai.customRoutingForWorkload': 'Пользовательская маршрутизация для {label}', + 'settings.ai.loadingModels': 'Загрузка моделей...', + 'settings.ai.enterModelIdManually': 'или введите идентификатор модели вручную:', + 'settings.ai.modelIdPlaceholderForProvider': '{slug} идентификатор модели', + 'settings.ai.modelIdPlaceholder': 'model-id', + 'settings.ai.selectModel': 'Выберите модель...', + 'settings.ai.temperatureOverride': 'Переопределение температуры', + 'settings.ai.temperatureOverrideSlider': 'Переопределение температуры (ползунок)', + 'settings.ai.temperatureOverrideValue': 'Переопределение температуры (значение)', + 'settings.ai.temperatureOverrideDesc': + 'Ниже = более детерминированно. Оставьте флажок неактивным, чтобы использовать поставщика по умолчанию.', + 'settings.ai.testFailed': 'Тест не пройден.', + 'settings.ai.testingModel': 'Модель тестирования...', + 'settings.ai.modelResponse': 'Ответ модели', + 'settings.ai.providerWithValue': 'Поставщик: {value}', + 'settings.ai.noneDash': '—', + 'settings.ai.promptHelloWorld': 'Подсказка: Привет, мир.', + 'settings.ai.startedAt': 'Начало: {value}', + 'settings.ai.waitingForModelResponse': 'Ожидание ответа от выбранной модели...', + 'settings.ai.response': 'Ответ', + 'settings.ai.testing': 'Тестирование...', + 'settings.ai.test': 'Тест', + 'settings.ai.slugMissingError': 'Введите имя провайдера для создания пула.', + 'settings.ai.slugInUseError': 'Это имя провайдера уже используется.', + 'settings.ai.slugReservedError': 'Выберите другое имя провайдера.', + 'settings.ai.providerNamePlaceholder': 'Мой провайдер', + 'settings.ai.slugLabel': 'Слаг:', + 'settings.ai.openAiUrlLabel': 'URL OpenAI', + 'settings.ai.openAiUrlPlaceholder': 'https://api.openai.com/v1', + 'settings.ai.keepExistingKeyPlaceholder': 'Оставьте пустым, чтобы сохранить существующий ключ.', + 'settings.ai.reindexingMemory': 'Переиндексация памяти', + 'settings.ai.reindexingMemoryMessage': + 'Вложения перерабатываются. Элементы памяти {pending} повторно встраиваются в текущую модель — семантический вызов снижается до тех пор, пока это не завершится. Поиск по ключевым словам продолжает работать, и повторное встраивание продолжается в фоновом режиме, если вы закроете это.', + 'settings.ai.signInWithOpenRouter': 'Войдите с помощью OpenRouter', + 'settings.ai.weekBudget': 'Недельный бюджет', + 'settings.ai.cycleRemaining': 'Оставшийся цикл', + 'settings.ai.cycleTotalSpend': 'Общие расходы за цикл', + 'settings.ai.avgSpendRow': 'Строка средних расходов', + 'settings.ai.backgroundApiReads': 'Bg API читает', + 'settings.ai.backgroundWakeups': 'Bg пробуждения', + 'settings.ai.budgetMath': 'Математические расчеты бюджета', + 'settings.ai.rowsLeft': 'Осталось строк', + 'settings.ai.rowsPerFullWeekBudget': 'Строков на полную неделю бюджета', + 'settings.ai.sampleBurnRate': 'Скорость записи выборки', + 'settings.ai.projectedEmpty': 'Прогнозируемая пустая', + 'settings.ai.apiReadsPerDollarRemaining': 'API операций чтения на каждый оставшийся доллар', + 'settings.ai.loopCallBudget': 'Бюджет циклических вызовов', + 'settings.ai.heartbeatTicks': 'Тактов контрольного сигнала', + 'settings.ai.calendarPlannerCalls': 'Звонки планировщика календаря', + 'settings.ai.calendarFanoutCap': 'Крышка разветвления календаря', + 'settings.ai.subconsciousModelCalls': 'Звонки модели подсознания', + 'settings.ai.composioSyncScans': 'Composio синхронизируют сканирование', + 'settings.ai.totalBackgroundApiReadBudget': 'Общий бюджет чтения API', + 'settings.ai.memoryWorkerPolls': 'Опросы работников памяти', + 'settings.ai.defaultProviderName': 'OpenHuman', + 'settings.ai.routing.managed': 'Управляемый', + 'settings.ai.routing.managedDesc': + 'OpenHuman выполнит все логические выводы в облаке, выберет лучшую модель для задачи, оптимизирует затраты и сохранит самые безопасные настройки маршрутизации по умолчанию.', + 'settings.ai.routing.managedMsg': + 'OpenHuman будет обрабатывать все выводы для каждой рабочей нагрузки и автоматически выбирать лучший маршрут с точки зрения стоимости, качества и безопасности.', + 'settings.ai.routing.useYourOwn': 'Используйте свои собственные модели', + 'settings.ai.routing.useYourOwnDesc': + 'Выберите одного поставщика + модель и направляйте через него всю рабочую нагрузку. Это просто, но может быть неэффективно, поскольку легкий и тяжелый вывод используют один и тот же маршрут.', + 'settings.ai.routing.advanced': 'Расширенный', + 'settings.ai.routing.advancedDesc': + 'Выбирайте разные модели для разных задач. Это лучший вариант для жесткой оптимизации затрат и максимального контроля.', + 'settings.ai.routing.customDesc': + 'Детальная маршрутизация обеспечивает наилучшую оптимизацию затрат и максимальный контроль. Используйте строки ниже, чтобы решить, какие рабочие нагрузки остаются управляемыми, какие используют общие настройки по умолчанию и какие привязываются к конкретной модели.', + 'settings.ai.routing.chatAndConversations': 'Чат и беседы', + 'settings.ai.routing.chatDesc': + 'Модели, используемые во время прямого взаимодействия с пользователем, ответов, рассуждений, циклов агента и помощи в кодировании.', + 'settings.ai.routing.backgroundTasks': 'Фоновые задачи', + 'settings.ai.routing.bgTasksDesc': + 'Модели, используемые вне основного потока разговора для подведения итогов, сердцебиения, обучения и подсознательной оценки.', + 'settings.ai.routing.addCustomProvider': 'Добавить специального поставщика.', + 'settings.ai.globalModel.title': 'Выберите одну модель для всего.', + 'settings.ai.globalModel.desc': + 'Это направляет все выводы через одну модель. Это проще, но может оказаться неэффективным с точки зрения стоимости и качества, поскольку легкие и тяжелые задачи будут использовать один и тот же маршрут.', + 'settings.ai.globalModel.noProviders': + 'Сначала добавьте или подключите провайдера. Тогда вы сможете маршрутизировать каждую рабочую нагрузку через одну модель здесь.', + 'settings.ai.globalModel.provider': 'Поставщик', + 'settings.ai.globalModel.model': 'Модель', + 'settings.ai.globalModel.loadingModels': 'Загрузка моделей…', + 'settings.ai.globalModel.enterModelId': 'Введите идентификатор модели', + 'settings.ai.globalModel.appliesToAll': + 'Применяет один и тот же поставщик + модель к чату, рассуждениям, кодированию, памяти, сердцебиению, обучению и подсознанию. Вложения настраиваются отдельно. Изменения сохраняются при нажатии кнопки «Сохранить».', + 'settings.ai.globalModel.saving': 'Сохранение…', + 'settings.ai.globalModel.saved': 'Сохранено', + 'settings.ai.workload.noModel': 'Модель не выбрана', + 'settings.ai.workload.changeModel': 'Изменить модель', + 'settings.ai.workload.chooseModel': 'Выберите модель', + 'settings.ai.provider.ollama': 'Ollama', + 'settings.autocomplete.appFilter.acceptSuggestion': 'Принять предложение', + 'settings.autocomplete.appFilter.app': 'Приложение', + 'settings.autocomplete.appFilter.currentSuggestion': 'Текущее предложение', + 'settings.autocomplete.appFilter.contextOverride': 'Переопределение контекста (необязательно)', + 'settings.autocomplete.appFilter.debounce': 'Отладка', + 'settings.autocomplete.appFilter.debugFocus': 'Отладка фокуса', + 'settings.autocomplete.appFilter.enabled': 'Включено', + 'settings.autocomplete.appFilter.getSuggestion': 'Получить предложение', + 'settings.autocomplete.appFilter.lastError': 'Последняя ошибка', + 'settings.autocomplete.appFilter.liveLogs': 'Логи в реальном времени', + 'settings.autocomplete.appFilter.model': 'Модель', + 'settings.autocomplete.appFilter.noLogs': '):', + 'settings.autocomplete.appFilter.phase': 'Фаза', + 'settings.autocomplete.appFilter.platformSupported': 'Платформа поддерживается', + 'settings.autocomplete.appFilter.refreshStatus': 'Обновление…', + 'settings.autocomplete.appFilter.refreshing': 'Обновление…', + 'settings.autocomplete.appFilter.running': 'Выполняется', + 'settings.autocomplete.appFilter.runtime': 'Среда выполнения', + 'settings.autocomplete.appFilter.test': 'Тест', + 'settings.autocomplete.completionStyle.acceptedCompletion': + 'Сохранено {count} принятое автозаполнение — используется для персонализации будущих подсказок.', + 'settings.autocomplete.completionStyle.acceptedCompletions': + 'Сохранено {count} принятых автозаполнений — используется для персонализации будущих подсказок.', + 'settings.autocomplete.completionStyle.clearHistory': 'Очистка…', + 'settings.autocomplete.completionStyle.clearing': 'Очистка…', + 'settings.autocomplete.completionStyle.debounce': 'Задержка (ms)', + 'settings.autocomplete.completionStyle.enabled': 'Включено', + 'settings.autocomplete.completionStyle.maxChars': 'Макс. символов', + 'settings.autocomplete.completionStyle.noHistory': + 'Принятых предложений пока нет. Принимай предложения с помощью Tab, чтобы начать персонализацию.', + 'settings.autocomplete.completionStyle.overlayTtl': 'Время отображения (ms)', + 'settings.autocomplete.completionStyle.personalizationHistory': 'История персонализации', + 'settings.autocomplete.completionStyle.styleExamples': 'Примеры стиля (по одному на строку)', + 'settings.autocomplete.completionStyle.styleInstructions': 'Инструкции по стилю', + 'settings.autocomplete.debug.acceptedPrefix': 'Принято: {value}', + 'settings.autocomplete.debug.acceptFailed': 'Не удалось принять предложение', + 'settings.autocomplete.debug.alreadyRunning': 'Автозаполнение уже запущено.', + 'settings.autocomplete.debug.clearHistoryFailed': 'Не удалось очистить историю.', + 'settings.autocomplete.debug.didNotStart': 'Автозаполнение не запустилось.', + 'settings.autocomplete.debug.disabledInSettings': + 'Автозаполнение отключено в настройках. Включите его и сначала сохраните.', + 'settings.autocomplete.debug.fetchSuggestionFailed': 'Не удалось получить текущее предложение.', + 'settings.autocomplete.debug.inspectFocusedElementFailed': + 'Не удалось проверить элемент в фокусе.', + 'settings.autocomplete.debug.loadSettingsFailed': + 'Не удалось загрузить настройки автозаполнения.', + 'settings.autocomplete.debug.noSuggestionApplied': 'Предложение не было применено.', + 'settings.autocomplete.debug.noSuggestionReturned': 'Ни одно предложение не вернулось.', + 'settings.autocomplete.debug.refreshStatusFailed': 'Не удалось обновить статус автозаполнения.', + 'settings.autocomplete.debug.saveAdvancedSettingsFailed': + 'Не удалось сохранить дополнительные настройки.', + 'settings.autocomplete.debug.startFailed': 'Не удалось запустить автозаполнение.', + 'settings.autocomplete.debug.stopFailed': 'Не удалось остановить автозаполнение.', + 'settings.autocomplete.debug.suggestionPrefix': 'Предложение: {value}', + 'settings.autocomplete.shared.none': 'Нет', + 'settings.autocomplete.shared.notApplicable': 'н/д', + 'settings.autocomplete.shared.unknown': 'Неизвестно', + 'settings.billing.autoRecharge.addAmount': 'Добавить эту сумму', + 'settings.billing.autoRecharge.addCard': 'Добавить карту', + 'settings.billing.autoRecharge.amountHint': 'Подсказка по сумме', + 'settings.billing.autoRecharge.defaultCard': 'Карта по умолчанию', + 'settings.billing.autoRecharge.lastRechargeFailed': 'Последнее пополнение не удалось', + 'settings.billing.autoRecharge.lastRecharged': 'Последнее пополнение', + 'settings.billing.autoRecharge.expires': 'Срок действия истекает {date}', + 'settings.billing.autoRecharge.noCards': 'Нет карт', + 'settings.billing.autoRecharge.paymentMethods': 'Способы оплаты', + 'settings.billing.autoRecharge.rechargeInProgress': 'Пополнение в процессе', + 'settings.billing.autoRecharge.spentThisWeek': + '${spent} из ${limit}, использовано на этой неделе', + 'settings.billing.autoRecharge.rechargeWhen': 'Пополнять, когда баланс ниже', + 'settings.billing.autoRecharge.saveSettings': 'Сохранение…', + 'settings.billing.autoRecharge.saving': 'Сохранение…', + 'settings.billing.autoRecharge.setDefault': ':', + 'settings.billing.autoRecharge.subtitle': 'Подзаголовок', + 'settings.billing.autoRecharge.title': 'Включить автопополнение', + 'settings.billing.autoRecharge.toggleAriaLabel': 'Переключить автопополнение', + 'settings.billing.autoRecharge.weeklyLimit': 'Еженедельный лимит расходов', + 'settings.billing.history.desc': 'Описание', + 'settings.billing.history.empty': 'Пусто', + 'settings.billing.history.openPortal': 'Открыть портал', + 'settings.billing.history.posted': 'Проведено', + 'settings.billing.history.title': 'Заголовок', + 'settings.billing.inferenceBudget.cycleEnds': 'Цикл заканчивается', + 'settings.billing.inferenceBudget.exhausted': 'Исчерпан', + 'settings.billing.inferenceBudget.loadError': 'Ошибка загрузки', + 'settings.billing.inferenceBudget.noBudgetDesc': 'Бюджет не задан', + 'settings.billing.inferenceBudget.noRecurringBudget': 'Нет регулярного бюджета', + 'settings.billing.inferenceBudget.noRecurringPlanBudget': 'Нет повторяющегося бюджета плана.', + 'settings.billing.inferenceBudget.noRecurringWeeklyDesc': + 'Ваш текущий план не включает повторяющийся еженедельный бюджет вывода. Вместо этого использование оплачивается из имеющихся кредитов.', + 'settings.billing.inferenceBudget.remaining': 'Осталось', + 'settings.billing.inferenceBudget.remainingSummary': 'Осталось {remaining} / {budget}', + 'settings.billing.inferenceBudget.spentThisCycle': 'В этом цикле потрачено {amount}', + 'settings.billing.inferenceBudget.cycleEndsOn': 'Цикл заканчивается {date}', + 'settings.billing.inferenceBudget.exhaustedDesc': + 'Использование включенной подписки исчерпано. Пополняйте кредиты, чтобы продолжать использовать AI, не дожидаясь следующего цикла.', + 'settings.billing.inferenceBudget.discountVsPayg': + '{pct}% дешевле за звонок, чем при оплате по мере использования.', + 'settings.billing.inferenceBudget.cycleSpend': 'Циклические расходы', + 'settings.billing.inferenceBudget.totalAmount': '{amount} всего', + 'settings.billing.inferenceBudget.inference': 'Вывод', + 'settings.billing.inferenceBudget.integrations': 'Интеграции', + 'settings.billing.inferenceBudget.calls': '{count} вызовы', + 'settings.billing.inferenceBudget.dailySpend': 'Ежедневные расходы', + 'settings.billing.inferenceBudget.dailySpendPoint': '{date}: {amount}', + 'settings.billing.inferenceBudget.topModels': 'Лучшие модели', + 'settings.billing.inferenceBudget.noInferenceUsage': 'В этом цикле не используются выводы.', + 'settings.billing.inferenceBudget.topIntegrations': 'Топ интеграций', + 'settings.billing.inferenceBudget.noIntegrationUsage': 'В этом цикле интеграция не используется.', + 'settings.billing.inferenceBudget.tenHourCap': 'Ограничение 10 часов', + 'settings.billing.inferenceBudget.title': 'Заголовок', + 'settings.billing.inferenceBudget.unableToLoad': 'Невозможно загрузить данные об использовании.', + 'settings.billing.inferenceBudget.notAvailable': 'н/д', + 'settings.billing.payAsYouGo.available': 'Доступно', + 'settings.billing.payAsYouGo.chargeCustomAmount': 'Открытие…', + 'settings.billing.payAsYouGo.chooseTopUpDesc': 'Описание выбора пополнения', + 'settings.billing.payAsYouGo.chooseTopUpTitle': 'Выберите сумму пополнения', + 'settings.billing.payAsYouGo.creditBalanceDesc': 'Описание баланса кредитов', + 'settings.billing.payAsYouGo.creditBalanceTitle': 'Баланс кредитов', + 'settings.billing.payAsYouGo.customAmount': 'Произвольная сумма', + 'settings.billing.payAsYouGo.enterAmount': 'Введи сумму', + 'settings.billing.payAsYouGo.opening': 'Открытие', + 'settings.billing.payAsYouGo.promotionalCredits': 'Промокредиты', + 'settings.billing.payAsYouGo.topUpBalance': 'Пополнение баланса', + 'settings.billing.payAsYouGo.topUpCredits': 'Пополнить кредиты', + 'settings.billing.payAsYouGo.unableToLoad': 'Не удалось загрузить баланс.', + 'settings.billing.subscription.annual': 'Годовая', + 'settings.billing.subscription.billedAnnually': 'Оплата раз в год', + 'settings.billing.subscription.chooseSubtitle': 'Подзаголовок выбора', + 'settings.billing.subscription.chooseTitle': 'Заголовок выбора', + 'settings.billing.subscription.cryptoDesc': 'Описание крипто', + 'settings.billing.subscription.cryptoQuestion': 'Вопрос о крипто', + 'settings.billing.subscription.current': 'Текущий', + 'settings.billing.subscription.currentPlan': 'Текущий план', + 'settings.billing.subscription.monthly': 'Ежемесячная', + 'settings.billing.subscription.paymentConfirmed': 'Оплата подтверждена', + 'settings.billing.subscription.perMonth': 'В месяц', + 'settings.billing.subscription.popular': 'Популярное', + 'settings.billing.subscription.save': '{pct}', + 'settings.billing.subscription.upgrade': 'Улучшить', + 'settings.billing.subscription.waiting': 'Ожидание', + 'settings.billing.subscription.waitingPayment': 'Ожидание оплаты', + 'settings.composio.apiKeyDesc': 'API-ключ Composio сейчас сохранён на этом устройстве.', + 'settings.composio.apiKeyExamplePlaceholder': 'ck_live_xxxxxxxxxxxxxxxx', + 'settings.composio.apiKeyLabel': 'API-ключ Composio', + 'settings.composio.apiKeyStored': 'API-ключ сохранён', + 'settings.composio.apiKeyStoredPlaceholder': '•••••••••••••••', + 'settings.composio.clearedToBackend': 'Переключено в режим Backend', + 'settings.composio.confirmItem1': 'Аккаунт на app.composio.dev с API-ключом', + 'settings.composio.confirmItem2': + 'Заново привязать каждую интеграцию через ваш личный аккаунт Composio', + 'settings.composio.confirmItem3': + 'Примечание: триггеры Composio (вебхуки в реальном времени) пока не работают в прямом режиме — только синхронные вызовы инструментов', + 'settings.composio.confirmNeedItems': 'Вам понадобится:', + 'settings.composio.confirmSwitch': 'Понятно, переключить на «Прямой»', + 'settings.composio.confirmTitle': '⚠️ Переключение на прямой режим', + 'settings.composio.confirmWarning': + 'Ваши существующие интеграции (Gmail, Slack, GitHub и т. д., привязанные через OpenHuman) не будут видны — они находятся в управляемом OpenHuman тенанте Composio.', + 'settings.composio.intro': + 'Composio интегрирует 250+ внешних приложений как инструменты, которые может вызывать ваш агент. Выберите способ маршрутизации этих вызовов.', + 'settings.composio.title': 'Composio', + 'settings.composio.modeDirect': 'Прямой (собственный API-ключ)', + 'settings.composio.modeDirectDesc': + 'Вызовы идут напрямую на backend.composio.dev. Суверенно и подходит для офлайн. Выполнение инструментов работает синхронно; вебхуки триггеров в реальном времени пока не маршрутизируются в прямом режиме (см. отдельную задачу).', + 'settings.composio.modeManaged': 'Управляемый (OpenHuman управляет за тебя)', + 'settings.composio.modeManagedDesc': + 'OpenHuman проксирует вызовы инструментов через наш бэкенд (рекомендуется). Авторизация брокеруется; вам не нужно вставлять API-ключ Composio. Вебхуки полностью маршрутизируются.', + 'settings.composio.routingMode': 'Режим маршрутизации', + 'settings.composio.saveErrorNoKey': + 'Не удалось сохранить. Прямой режим требует непустой API-ключ.', + 'settings.composio.saving': 'Сохранение…', + 'settings.composio.switching': 'Переключение…', + 'settings.companion.title': 'Настольный компаньон', + 'settings.companion.session': 'Сеанс', + 'settings.companion.activeLabel': 'Активен', + 'settings.companion.inactiveStatus': 'Неактивен', + 'settings.companion.stopping': 'Остановка…', + 'settings.companion.stopSession': 'Остановить сеанс', + 'settings.companion.starting': 'Начало…', + 'settings.companion.startSession': 'Начало сеанса', + 'settings.companion.sessionId': 'Идентификатор сеанса', + 'settings.companion.turns': 'Выключает', + 'settings.companion.remaining': 'Оставшуюся', + 'settings.companion.configuration': 'конфигурацию', + 'settings.companion.hotkey': 'Горячая клавиша', + 'settings.companion.activationMode': 'Режим активации', + 'settings.companion.sessionTtl': 'TTL сеанса', + 'settings.companion.screenCapture': 'Снимок экрана', + 'settings.companion.appContext': 'Контекст приложения', + 'settings.cron.jobs.desc': 'Описание', + 'settings.cron.jobs.empty': 'Заданий по расписанию не найдено.', + 'settings.cron.jobs.lastStatus': 'Последний статус', + 'settings.cron.jobs.loading': 'Загрузка заданий...', + 'settings.cron.jobs.loadingRuns': 'Загрузка запусков', + 'settings.cron.jobs.nextRun': 'Следующий запуск', + 'settings.cron.jobs.pause': 'Приостановить', + 'settings.cron.jobs.paused': 'Приостановлено', + 'settings.cron.jobs.recentRuns': 'Последние запуски', + 'settings.cron.jobs.removing': 'Удаление', + 'settings.cron.jobs.resume': 'Возобновить', + 'settings.cron.jobs.runningNow': 'Выполняется сейчас', + 'settings.cron.jobs.saving': 'Сохранение…', + 'settings.cron.jobs.schedule': 'Расписание', + 'settings.cron.jobs.title': 'Задания ядра по расписанию', + 'settings.cron.jobs.viewRuns': 'Посмотреть запуски', + 'settings.localModel.deviceCapability.active': 'Активно', + 'settings.localModel.deviceCapability.appliedTier': 'Применённый уровень', + 'settings.localModel.deviceCapability.applying': 'Применение', + 'settings.localModel.deviceCapability.cores': '{count}', + 'settings.localModel.deviceCapability.couldNotLoadPresets': 'Не удалось загрузить пресеты', + 'settings.localModel.deviceCapability.cpu': 'CPU', + 'settings.localModel.deviceCapability.customModelIds': 'Пользовательские ID моделей', + 'settings.localModel.deviceCapability.detected': 'Обнаружено', + 'settings.localModel.deviceCapability.disabled': 'Отключено', + 'settings.localModel.deviceCapability.disabledDesc': 'Отключено', + 'settings.localModel.deviceCapability.downloadingModels': '(загрузка моделей)', + 'settings.localModel.deviceCapability.downloadingSetupDesc': + 'Загрузка установщика OllamaSetup (~2 ГБ) и распаковка. При первой установке это может занять минуту.', + 'settings.localModel.deviceCapability.failedToApplyPreset': 'Не удалось применить пресет', + 'settings.localModel.deviceCapability.gpu': 'GPU', + 'settings.localModel.deviceCapability.installFailed': 'Установка Ollama не удалась', + 'settings.localModel.deviceCapability.installFailedDesc': + 'Установщик завершил работу до того, как Ollama стала готова к использованию. Нажми «Повторить» или установи вручную с ollama.com.', + 'settings.localModel.deviceCapability.installFirst': 'Сначала запустите Ollama.', + 'settings.localModel.deviceCapability.installFirstDesc': + 'Локальные уровни зависят от внешне управляемого эндпоинта Ollama. Запустите его самостоятельно, загрузите нужные модели и используйте «Отключено (облачный fallback)», пока среда выполнения недоступна.', + 'settings.localModel.deviceCapability.installOllamaFirst': + 'Сначала запустите Ollama, чтобы использовать этот уровень', + 'settings.localModel.deviceCapability.installingOllama': 'Установка Ollama', + 'settings.localModel.deviceCapability.loadingDeviceInfo': 'Загрузка информации об устройстве', + 'settings.localModel.deviceCapability.localAiDisabled': + 'Локальный AI отключён — используется облачный резерв.', + 'settings.localModel.deviceCapability.modelTier': 'Уровень модели', + 'settings.localModel.deviceCapability.needsOllama': 'Требуется Ollama', + 'settings.localModel.deviceCapability.notDetected': 'Не обнаружено', + 'settings.localModel.deviceCapability.disabledLowercase': 'отключен', + 'settings.localModel.deviceCapability.presetDetails': + 'Чат: {chatModel} · Vision: {visionModel} · Целевая оперативная память: {targetRamGb} ГБ', + 'settings.localModel.deviceCapability.ram': 'RAM', + 'settings.localModel.deviceCapability.recommended': 'Рекомендуется', + 'settings.localModel.deviceCapability.retryInstall': 'Повтор…', + 'settings.localModel.deviceCapability.retrying': 'Повтор…', + 'settings.localModel.deviceCapability.starting': 'Запуск…', + 'settings.localModel.download.audioPathPlaceholder': 'Абсолютный путь к аудиофайлу', + 'settings.localModel.download.capabilityChat': 'Чат', + 'settings.localModel.download.capabilityEmbedding': 'Встраивание', + 'settings.localModel.download.capabilityAssets': 'Ресурсы возможностей', + 'settings.localModel.download.capabilityStt': 'STT', + 'settings.localModel.download.capabilityTts': 'TTS', + 'settings.localModel.download.capabilityVision': 'Зрение', + 'settings.localModel.download.downloading': 'Загрузка...', + 'settings.localModel.download.embeddingDimensions': 'Размеры: {dimensions}', + 'settings.localModel.download.embeddingModel': 'Модель: {modelId}', + 'settings.localModel.download.embeddingPlaceholder': 'По одной строке на вход...', + 'settings.localModel.download.embeddingVectors': 'Векторы: {count}', + 'settings.localModel.download.noThinkMode': 'Без режима обдумывания', + 'settings.localModel.download.notAvailable': 'н/д', + 'settings.localModel.download.promptPlaceholder': + 'Введи любой запрос для тестирования локальной модели...', + 'settings.localModel.download.quantizationPref': 'Предпочтения квантизации', + 'settings.localModel.download.runEmbeddingTest': 'Выполнение...', + 'settings.localModel.download.runPromptTest': 'Запустить тест промпта', + 'settings.localModel.download.runSummaryTest': 'Запустить тест сводки', + 'settings.localModel.download.runTranscriptionTest': 'Выполнение...', + 'settings.localModel.download.runTtsTest': 'Выполнение...', + 'settings.localModel.download.runVisionTest': 'Выполнение...', + 'settings.localModel.download.running': 'Выполнение...', + 'settings.localModel.download.runningPrompt': 'Выполнение запроса', + 'settings.localModel.download.summaryHelper': + 'Вызовы `openhuman.inference_summarize` через ядро Rust', + 'settings.localModel.download.summarizePlaceholder': + 'Вставь текст для суммаризации локальной моделью...', + 'settings.localModel.download.testCustomPrompt': 'Тест произвольного запроса', + 'settings.localModel.download.testEmbeddings': 'Тест векторных вложений', + 'settings.localModel.download.testSummarization': 'Тест суммаризации', + 'settings.localModel.download.testVisionPrompt': 'Тест визуального запроса', + 'settings.localModel.download.testVoiceInput': 'Тест голосового ввода (STT)', + 'settings.localModel.download.testVoiceOutput': 'Тест голосового вывода (TTS)', + 'settings.localModel.download.transcript': 'Расшифровка:', + 'settings.localModel.download.ttsOutput': 'Выход: {outputPath}', + 'settings.localModel.download.ttsOutputPlaceholder': 'Необязательный путь к выходному WAV-файлу', + 'settings.localModel.download.ttsPlaceholder': 'Введи текст для синтеза...', + 'settings.localModel.download.ttsVoice': 'Голос: {voiceId}', + 'settings.localModel.download.visionImagePlaceholder': + 'По одной ссылке на изображение на строку (data URI, URL или локальный маркер пути)', + 'settings.localModel.download.visionPromptPlaceholder': 'Введи запрос для визуальной модели...', + 'settings.localModel.status.allChecksPassed': 'Все проверки пройдены', + 'settings.localModel.status.artifact': 'Артефакт', + 'settings.localModel.status.backend': 'Бэкенд', + 'settings.localModel.status.binary': 'Бинарный файл', + 'settings.localModel.status.bootstrapResume': 'Инициализация / возобновление', + 'settings.localModel.status.checking': 'Проверка...', + 'settings.localModel.status.checkingOllama': 'Проверка Ollama', + 'settings.localModel.status.contextBelowMinimumBadge': + '{contextLength} ctx - ниже {required} мин.', + 'settings.localModel.status.contextBelowMinimumTitle': + 'Отклонено: количество токенов {contextLength} контекстного окна ниже минимального значения токена {required}, требуемого для уровня памяти. Напоминание будет повреждено молчаливым усечением.', + 'settings.localModel.status.contextOkBadge': '{contextLength} контекст ✓', + 'settings.localModel.status.contextOkTitle': + 'Токены контекстного окна {contextLength} соответствуют минимуму уровня памяти для токенов {required}.', + 'settings.localModel.status.contextUnknownBadge': 'ctx неизвестно', + 'settings.localModel.status.contextUnknownTitle': + 'Контекстное окно неизвестно; не удалось подтвердить, что он соответствует минимуму уровня памяти токена {required}.', + 'settings.localModel.status.customLocation': 'Пользовательский путь', + 'settings.localModel.status.customLocationDesc': 'Описание пользовательского расположения', + 'settings.localModel.status.diagnosticsHint': + 'Нажмите «Запустить диагностику», чтобы убедиться, что Ollama запущен и модели установлены.', + 'settings.localModel.status.downloadingUnknown': 'Загрузка (размер неизвестен)', + 'settings.localModel.status.eta': 'ETA', + 'settings.localModel.status.expectedModels': 'Ожидаемые модели', + 'settings.localModel.status.expectedChat': 'Чат: {model}', + 'settings.localModel.status.expectedEmbedding': 'Встраивание: {model}', + 'settings.localModel.status.expectedVision': 'Видение: {model}', + 'settings.localModel.status.externalProcess': 'Внешний процесс', + 'settings.localModel.status.forceRebootstrap': 'Принудительная переинициализация', + 'settings.localModel.status.generationTps': 'Скорость генерации (TPS)', + 'settings.localModel.status.hideErrorDetails': 'Скрыть детали ошибки', + 'settings.localModel.status.installManually': 'Установить вручную', + 'settings.localModel.status.installManuallyFrom': 'Установить вручную с', + 'settings.localModel.status.installOllama': 'Запуск…', + 'settings.localModel.status.installedModels': 'Установленные модели', + 'settings.localModel.status.installing': 'Установка...', + 'settings.localModel.status.installingOllama': 'Установка среды Ollama...', + 'settings.localModel.status.issues': 'Проблемы', + 'settings.localModel.status.issuesFound': 'Найдено проблем: {count}', + 'settings.localModel.status.lastLatency': 'Последняя задержка', + 'settings.localModel.status.model': 'Модель', + 'settings.localModel.status.notAvailable': 'н/д', + 'settings.localModel.status.notFound': 'Не найдено', + 'settings.localModel.status.notRunning': 'Не запущено', + 'settings.localModel.status.ollamaBinaryPath': 'Путь к бинарному файлу Ollama', + 'localModel.ollamaServer.helperText': 'Пример: http://192.168.1.5:11434', + 'localModel.ollamaServer.label': 'URL сервера Ollama', + 'localModel.ollamaServer.modelCount': 'моделей', + 'localModel.ollamaServer.placeholder': 'http://localhost:11434', + 'localModel.ollamaServer.reachable': 'Доступен', + 'localModel.ollamaServer.resetButton': 'Сбросить до значения по умолчанию', + 'localModel.ollamaServer.saveButton': 'Сохранить', + 'localModel.ollamaServer.testButton': 'Проверить соединение', + 'localModel.ollamaServer.unreachable': 'Недоступен', + 'localModel.ollamaServer.validationError': + 'Должен быть допустимым URL с протоколом http:// или https://', + 'settings.localModel.status.ollamaDiagnostics': 'Диагностика Ollama', + 'settings.localModel.status.ollamaNotInstalled': 'Среда выполнения Ollama недоступна', + 'settings.localModel.status.ollamaNotInstalledDesc': + 'OpenHuman теперь рассматривает Ollama как внешнюю среду инференса. Запустите собственный сервер Ollama, загрузите нужные модели и направьте маршрутизацию нагрузки на него.', + 'settings.localModel.status.progress': 'Прогресс', + 'settings.localModel.status.provider': 'Провайдер', + 'settings.localModel.status.retryBootstrap': 'Повторить Bootstrap', + 'settings.localModel.status.runDiagnostics': 'Проверка...', + 'settings.localModel.status.running': 'Работает', + 'settings.localModel.status.runningExternalProcess': 'Запущено через внешний процесс', + 'settings.localModel.status.runtimeStatus': 'Статус среды выполнения', + 'settings.localModel.status.server': 'Сервер', + 'settings.localModel.status.setPath': 'Установка...', + 'settings.localModel.status.setting': 'Установка...', + 'settings.localModel.status.showErrorDetails': 'Скрыть детали ошибки', + 'settings.localModel.status.showInstallErrorDetails': 'Скрыть детали ошибки', + 'settings.localModel.status.suggestedFixes': 'Предлагаемые исправления', + 'settings.localModel.status.thenSetPath': 'Затем укажи путь', + 'settings.localModel.status.triggering': 'Запуск...', + 'settings.localModel.status.unavailable': 'Недоступно', + 'settings.localModel.status.working': 'Работаю...', + 'settings.developerMenu.ai.title': 'Конфигурация ИИ', + 'settings.developerMenu.ai.desc': + 'Облачные провайдеры, локальные модели Ollama и маршрутизация по типам нагрузки', + 'settings.developerMenu.screenAwareness.title': 'Осведомленность об экране', + 'settings.developerMenu.screenAwareness.desc': + 'Разрешения на захват экрана, политика мониторинга и управление сессиями', + 'settings.developerMenu.messagingChannels.title': 'Каналы сообщений', + 'settings.developerMenu.messagingChannels.desc': + 'Настройка режимов аутентификации Telegram/Discord и маршрутизации канала по умолчанию', + 'settings.developerMenu.tools.title': 'Инструменты', + 'settings.developerMenu.tools.desc': + 'Включайте или отключайте возможности, которые OpenHuman может использовать от вашего имени', + 'settings.developerMenu.agentChat.title': 'Чат агента', + 'settings.developerMenu.agentChat.desc': + 'Тестируйте разговор агента с переопределениями модели и температуры', + 'settings.developerMenu.devWorkflow.title': 'Рабочий процесс разработки', + 'settings.developerMenu.devWorkflow.desc': + 'Автономный агент, который выбирает ваши проблемы с GitHub и поднимает PR по расписанию.', + 'settings.developerMenu.devWorkflow.panelDesc': + 'Настройте автономный агент разработчика, который выбирает назначенные вам проблемы GitHub и автоматически отправляет запросы на включение по расписанию.', + 'settings.developerMenu.skillsRunner.title': 'Навыки бегуна', + 'settings.developerMenu.skillsRunner.desc': + 'Запустите любой связанный навык в произвольном порядке — заполните его входные данные и запустите фоновый автономный запуск.', + 'settings.developerMenu.skillsRunner.panelDesc': + 'Выберите связанный навык, заполните его заявленные входные данные и запустите фоновый прогон по принципу «выстрелил и забыл». Вместо этого используйте Dev Workflow, если вам нужно повторяющееся задание, запланированное cron.', + 'settings.skillsRunner.skill': 'Навык', + 'settings.skillsRunner.selectSkill': 'Выберите навык…', + 'settings.skillsRunner.loadingSkills': 'Загрузка навыков…', + 'settings.skillsRunner.loadingDescription': 'Загрузка входных данных о навыках…', + 'settings.skillsRunner.noInputs': 'Этот навык не декларирует никаких входных данных.', + 'settings.skillsRunner.placeholder.required': 'необходимый', + 'settings.skillsRunner.runNow': 'Беги сейчас', + 'settings.skillsRunner.starting': 'Начало…', + 'settings.skillsRunner.started': 'Запущено — идентификатор запуска:', + 'settings.skillsRunner.logPath': 'Бревно:', + 'settings.skillsRunner.error.listSkills': 'Не удалось загрузить навыки:', + 'settings.skillsRunner.error.describe': 'Не удалось загрузить входные данные:', + 'settings.skillsRunner.error.missingRequired': 'Отсутствуют необходимые входные данные:', + 'settings.skillsRunner.error.run': 'Не удалось запустить запуск:', + 'settings.skillsRunner.error.preflightGate': 'Предполетный шлюз вышел из строя', + 'settings.skillsRunner.schedule.heading': 'Расписание (повторяющееся)', + 'settings.skillsRunner.schedule.help': + 'Сохраните этот навык + входные данные как повторяющееся задание cron. Агент будет вызывать run_skill при каждом тике.', + 'settings.skillsRunner.schedule.frequency': 'Частота', + 'settings.skillsRunner.schedule.every30min': 'Каждые 30 минут', + 'settings.skillsRunner.schedule.everyHour': 'Каждый час', + 'settings.skillsRunner.schedule.every2hours': 'Каждые 2 часа', + 'settings.skillsRunner.schedule.every6hours': 'Каждые 6 часов', + 'settings.skillsRunner.schedule.onceDaily': 'Один раз в день (9:00)', + 'settings.skillsRunner.schedule.save': 'Сохранить расписание', + 'settings.skillsRunner.schedule.saving': 'Сохранение…', + 'settings.skillsRunner.schedule.saved': 'Расписание сохранено.', + 'settings.skillsRunner.schedule.error': 'Не удалось сохранить расписание:', + 'settings.skillsRunner.schedule.loadingJobs': 'Загрузка существующих расписаний…', + 'settings.skillsRunner.schedule.noJobs': 'Для этого навыка пока не сохранено расписание.', + 'settings.skillsRunner.schedule.existing': 'Запланированные задания для этого навыка:', + 'settings.skillsRunner.schedule.runNow': 'Бегать', + 'settings.skillsRunner.schedule.remove': 'Удалять', + 'settings.skillsRunner.scheduleEnabled': 'Включено', + 'settings.skillsRunner.scheduleDisabled': 'Приостановлено', + 'settings.skillsRunner.scheduleToggleAria': 'Переключить расписание включено', + 'settings.skillsRunner.schedule.history': 'История', + 'settings.skillsRunner.schedule.historyLoading': 'Загрузка истории…', + 'settings.skillsRunner.schedule.historyEmpty': 'По этому расписанию пока нет запусков.', + 'settings.skillsRunner.schedule.historyNoOutput': 'Выходные данные не зафиксированы.', + 'settings.skillsRunner.schedule.active': 'Активный', + 'settings.skillsRunner.schedule.lastRunLabel': 'последний:', + 'settings.skillsRunner.recentRuns.headingForSkill': 'Недавние запуски этого навыка', + 'settings.skillsRunner.recentRuns.headingAll': 'Недавние прогоны навыков (все)', + 'settings.skillsRunner.recentRuns.refresh': 'Обновить', + 'settings.skillsRunner.recentRuns.loading': 'Загрузка последних запусков…', + 'settings.skillsRunner.recentRuns.empty': 'Нет недавних запусков.', + 'settings.skillsRunner.viewer.loading': 'Загрузка журнала…', + 'settings.skillsRunner.viewer.tailing': 'Живой хвостохранилище', + 'settings.skillsRunner.viewer.fetching': 'fetching', + 'settings.skillsRunner.viewer.error': 'Не удалось прочитать журнал:', + 'settings.skillsRunner.repoPicker.loading': 'Загрузка репозиториев…', + 'settings.skillsRunner.repoPicker.select': 'Выберите репозиторий…', + 'settings.skillsRunner.repoPicker.empty': + 'Ни один репозиторий не вернулся. Подключите GitHub через Composio, чтобы заполнить этот список.', + 'settings.skillsRunner.repoPicker.notConnected': + 'GitHub не ​​подключен через Composio. Сначала подключите его в разделе «Навыки» → Composio.', + 'settings.skillsRunner.repoPicker.privateTag': '(частный)', + 'settings.skillsRunner.branchPicker.needRepo': 'Сначала выберите репозиторий…', + 'settings.skillsRunner.branchPicker.loading': 'Загрузка веток…', + 'settings.skillsRunner.branchPicker.select': 'Выберите филиал…', + 'settings.devWorkflow.githubRepository': 'Репозиторий GitHub', + 'settings.devWorkflow.loadingRepositories': 'Загрузка репозиториев...', + 'settings.devWorkflow.selectRepository': 'Выберите репозиторий', + 'settings.devWorkflow.privateTag': '(частный)', + 'settings.devWorkflow.detectingForkInfo': 'Обнаружение информации о вилке...', + 'settings.devWorkflow.forkDetected': 'Обнаружена вилка', + 'settings.devWorkflow.upstream': 'Вверх по течению:', + 'settings.devWorkflow.forkPrNote': 'ОР будут выдвинуты против вышестоящего хранилища.', + 'settings.devWorkflow.notForkNote': + 'Не вилка. PR будут выдвинуты непосредственно против этого хранилища.', + 'settings.devWorkflow.targetBranch': 'Целевой филиал', + 'settings.devWorkflow.targetBranchNote': 'Против этой ветки будут подняты ПР', + 'settings.devWorkflow.loadingBranches': 'Загрузка веток...', + 'settings.devWorkflow.runFrequency': 'Частота запуска', + 'settings.devWorkflow.runFrequencyNote': + 'Как часто агент должен проверять наличие проблем и поднимать PR.', + 'settings.devWorkflow.updateConfiguration': 'Обновить конфигурацию', + 'settings.devWorkflow.saveConfiguration': 'Сохранить конфигурацию', + 'settings.devWorkflow.remove': 'Удалять', + 'settings.devWorkflow.saved': 'Сохранено', + 'settings.devWorkflow.activeConfiguration': 'Активная конфигурация', + 'settings.devWorkflow.activeConfigRepository': 'Репозиторий:', + 'settings.devWorkflow.activeConfigUpstream': 'Вверх по течению:', + 'settings.devWorkflow.activeConfigTargetBranch': 'Целевая ветка:', + 'settings.devWorkflow.activeConfigSchedule': 'Расписание:', + 'settings.devWorkflow.enabled': 'Включено', + 'settings.devWorkflow.paused': 'Приостановлено', + 'settings.devWorkflow.nextRun': 'Следующий запуск', + 'settings.devWorkflow.lastRun': 'Последний запуск', + 'settings.devWorkflow.runNow': 'Беги сейчас', + 'settings.devWorkflow.running': 'Бег…', + 'settings.devWorkflow.recentRuns': 'Недавние запуски', + 'settings.devWorkflow.cronSaveError': 'Не удалось сохранить конфигурацию.', + 'settings.devWorkflow.lastOutput': 'Последний вывод', + 'settings.devWorkflow.noOutput': 'Выходные данные не зафиксированы', + 'settings.devWorkflow.runningStatus': + 'Агент работает — выбирает проблему и работает над ее исправлением...', + 'settings.devWorkflow.errorNotConnected': + 'GitHub не ​​подключен. Сначала подключите GitHub через «Настройки» > «Дополнительно» > Composio.', + 'settings.devWorkflow.errorToolNotEnabled': + 'Инструмент GITHUB_LIST_REPOSITORIES_FOR_THE_AUTHENTICATED_USER не включён на этом сервере. Попросите своего администратора включить его в интеграции Composio (backend#842).', + 'settings.devWorkflow.errorNotAuthenticated': + 'Не аутентифицирован. Пожалуйста, сначала войдите в систему.', + 'settings.devWorkflow.errorNoRepositories': + 'Для этой учетной записи GitHub не ​​найдено репозиториев.', + 'settings.devWorkflow.schedule.every30min': 'Каждые 30 минут', + 'settings.devWorkflow.schedule.everyHour': 'Каждый час', + 'settings.devWorkflow.schedule.every2hours': 'Каждые 2 часа', + 'settings.devWorkflow.schedule.every6hours': 'Каждые 6 часов', + 'settings.devWorkflow.schedule.onceDaily': 'Один раз в день (9 утра)', + 'settings.developerMenu.cronJobs.title': 'Задачи cron', + 'settings.developerMenu.cronJobs.desc': + 'Просмотр и настройка запланированных задач для runtime-навыков', + 'settings.developerMenu.localModelDebug.title': 'Отладка локальной модели', + 'settings.developerMenu.localModelDebug.desc': + 'Конфигурация Ollama, загрузка ресурсов, тесты модели и диагностика', + 'settings.developerMenu.webhooks.title': 'Вебхуки', + 'settings.developerMenu.webhooks.desc': + 'Проверяйте регистрации runtime-вебхуков и журналы захваченных запросов', + 'settings.developerMenu.eventLog.title': 'Журнал событий', + 'settings.developerMenu.eventLog.desc': + 'Живой поток с цветовой кодировкой обо всех событиях агента, инструмента и системы.', + 'settings.developerMenu.eventLog.allTypes': 'Все типы', + 'settings.developerMenu.eventLog.filterAgent': 'Фильтр...', + 'settings.developerMenu.eventLog.download': 'Скачать', + 'settings.developerMenu.eventLog.events': 'events', + 'settings.developerMenu.eventLog.live': 'Жить', + 'settings.developerMenu.eventLog.disconnected': 'Отключено', + 'settings.developerMenu.eventLog.waiting': 'Ждем событий...', + 'settings.developerMenu.eventLog.notConnected': 'Не подключен к ядру', + 'settings.developerMenu.eventLog.jumpToLatest': 'Перейти к последней версии', + 'settings.developerMenu.eventLog.badge.tool': 'TOOL', + 'settings.developerMenu.eventLog.badge.agent': 'AGENT', + 'settings.developerMenu.eventLog.badge.info': 'INFO', + 'settings.developerMenu.eventLog.badge.mem': 'MEM', + 'settings.developerMenu.eventLog.badge.chan': 'CHAN', + 'settings.developerMenu.eventLog.badge.cron': 'CRON', + 'settings.developerMenu.eventLog.badge.hook': 'HOOK', + 'settings.developerMenu.eventLog.badge.warn': 'WARN', + 'settings.developerMenu.eventLog.badge.skill': 'SKILL', + 'settings.developerMenu.eventLog.badge.comp': 'COMP', + 'settings.developerMenu.eventLog.badge.mcp': 'MCP', + 'settings.developerMenu.intelligence.title': 'Интеллект', + 'settings.developerMenu.intelligence.desc': + 'Рабочая область памяти, подсознательный движок, сны и настройки', + 'settings.developerMenu.notificationRouting.title': 'Маршрутизация уведомлений', + 'settings.developerMenu.notificationRouting.desc': + 'Оценка важности ИИ и эскалация оркестратору для интеграционных оповещений', + 'settings.developerMenu.composeioTriggers.title': 'Триггеры ComposeIO', + 'settings.developerMenu.composeioTriggers.desc': 'Просмотр истории и архива триггеров ComposeIO', + 'settings.developerMenu.composioRouting.title': 'Маршрутизация Composio (прямой режим)', + 'settings.developerMenu.composioRouting.desc': + 'Используйте собственный API-ключ Composio и направляйте вызовы напрямую в backend.composio.dev', + 'settings.developerMenu.integrationTriggers.title': 'Триггеры интеграций', + 'settings.developerMenu.integrationTriggers.desc': + 'Настройка параметров AI-триажа для триггеров интеграций Composio', + 'settings.developerMenu.mcpServer.title': 'MCP Сервер', + 'settings.developerMenu.mcpServer.desc': + 'Настройка внешних клиентов MCP для подключения к серверу OpenHuman', + 'settings.developerMenu.autonomy.title': 'Автономия агента', + 'settings.developerMenu.autonomy.desc': + 'Ограничения частоты действий инструментов и пороги безопасности', + 'settings.mcpServer.title': 'MCP', + 'settings.mcpServer.toolsSectionTitle': 'Доступные инструменты', + 'settings.mcpServer.toolsSectionDesc': + 'Инструменты, предоставляемые через сервер MCP stdio при запуске openhuman-core mcp', + 'settings.mcpServer.configSectionTitle': 'Конфигурация клиента', + 'settings.mcpServer.configSectionDesc': + 'Выберите клиент MCP для создания правильного фрагмента конфигурации.', + 'settings.mcpServer.copySnippet': 'Копировать в буфер обмена', + 'settings.mcpServer.copied': 'Скопировано!', + 'settings.mcpServer.openConfigFile': 'Открыть файл конфигурации.', + 'settings.mcpServer.binaryPathNotFound': + 'Двоичный файл OpenHuman не найден. При запуске из исходного кода выполните сборку с помощью: Cargo build --bin openhuman-core', + 'settings.mcpServer.openConfigError': 'Не удалось открыть файл конфигурации', + 'settings.mcpServer.clientClaudeDesktop': 'Claude Рабочий стол', + 'settings.mcpServer.clientCursor': 'Курсор', + 'settings.mcpServer.clientCodex': 'Кодекс', + 'settings.mcpServer.clientZed': 'Зед', + 'settings.mcpServer.configFilePath': 'Файл конфигурации', + 'settings.mcpServer.clientSelectorAriaLabel': 'MCP селектор клиента', + 'settings.appearance.menuDesc': 'Выберите светлую, темную или системную тему', + 'settings.agentAccess.title': 'Доступ агента к ОС', + 'settings.agentAccess.menuDesc': + 'Контролируйте, где агент может использовать read/write и может ли он использовать оболочку.', + 'settings.agentAccess.loadError': 'Не удалось загрузить настройки доступа.', + 'settings.agentAccess.saveError': 'Не удалось сохранить настройки доступа.', + 'settings.agentAccess.saved': 'Сохранено — применяется к следующему сообщению.', + 'settings.agentAccess.desktopOnly': 'Настройки доступа доступны только в настольном приложении.', + 'settings.agentAccess.loading': 'Загрузка…', + 'settings.agentAccess.accessMode': 'Режим доступа', + 'settings.agentAccess.tier.readonly.title': 'Только чтение', + 'settings.agentAccess.tier.readonly.desc': + 'Читает файлы и запускает команды только для чтения для изучения, но никогда не записывает, не редактирует и не запускает ничего, что меняет состояние.', + 'settings.agentAccess.tier.supervised.title': 'Спросить перед редактированием', + 'settings.agentAccess.tier.supervised.desc': + 'Свободно создает новые файлы, но запрашивает ваше одобрение перед редактированием существующего файла, запуском команды, подключением к сети или установкой чего-либо.', + 'settings.agentAccess.tier.full.title': 'Полный доступ', + 'settings.agentAccess.tier.full.desc': + 'Выполняет команды с полным доступом к вашей учетной записи пользователя — read/write может работать где угодно, кроме учетных данных и системных хранилищ. Деструктивные команды, доступ к сети и установки по-прежнему требуют одобрения.', + 'settings.agentAccess.defaultTag': '(по умолчанию)', + 'settings.agentAccess.fullWarning': + '⚠ Полный доступ запускает команды с полным доступом к вашей учетной записи и не находится в изолированной программной среде. Включайте его только в том случае, если вы доверяете агенту эту машину. Каталоги учетных данных и системные каталоги остаются заблокированными, а деструктивные, сетевые действия и действия по установке по-прежнему требуют одобрения.', + 'settings.agentAccess.confine.label': 'Ограничить рабочее пространство', + 'settings.agentAccess.confine.desc': + 'Ограничьте агента каталогом рабочей области (плюс всеми предоставленными папками), независимо от выбранного режима доступа. Когда этот параметр отключен, он может получить доступ к любому месту, доступному вашему пользователю, за исключением всегда блокируемых учетных данных и системных каталогов.', + 'settings.agentAccess.requireTaskPlanApproval.label': 'Требовать утверждения плана задач', + 'settings.agentAccess.requireTaskPlanApproval.desc': + 'Сделайте паузу перед тем, как назначенный агент выполнит задание, созданное агентом.', + 'settings.agentAccess.grantedFolders': 'Предоставленные папки', + 'settings.agentAccess.alwaysAllow': 'Всегда разрешенные инструменты', + 'settings.agentAccess.alwaysAllowDesc': + 'Инструменты, которые вы отметили в чате как «Всегда разрешать», запускаются без запроса. Удалите один, чтобы запрос появился снова.', + 'settings.agentAccess.alwaysAllowNone': 'Всегда разрешенных инструментов пока нет.', + 'settings.agentAccess.grantedDesc': + 'Папки, которые агент может читать и записывать, помимо рабочей области. Хранилища учетных данных (~/.ssh, ~/.gnupg, ~/.aws, цепочки для ключей) и системные каталоги (/etc, /System, C:\\Windows,…) всегда блокируются, даже внутри предоставленной папки.', + 'settings.agentAccess.noneGranted': 'Папки не предоставлены.', + 'settings.agentAccess.readWrite': 'читать + писать', + 'settings.agentAccess.readOnly': 'read-only', + 'settings.agentAccess.remove': 'Удалять', + 'settings.agentAccess.pathPlaceholder': 'Абсолютный путь к папке', + 'settings.agentAccess.accessLevelLabel': 'Уровень доступа', + 'settings.agentAccess.add': 'Добавлять', + 'settings.agentAccess.saving': 'Сохранение…', + 'settings.agentAccess.changesApply': 'Изменения вступят в силу в следующем сообщении.', + 'settings.appearance.title': 'Внешний вид', + 'settings.appearance.themeHeading': 'Тема', + 'settings.appearance.themeAria': 'Тема', + 'settings.appearance.modeLight': 'Светлая', + 'settings.appearance.modeLightDesc': 'Яркие поверхности, темный текст.', + 'settings.appearance.modeDark': 'Темный', + 'settings.appearance.modeDarkDesc': + 'Тусклые поверхности, меньше раздражают глаза после наступления сумерек.', + 'settings.appearance.modeSystem': 'Система соответствия', + 'settings.appearance.modeSystemDesc': 'Следуйте настройкам внешнего вида вашей ОС.', + 'settings.appearance.helperText': + 'Темный режим переключает все приложение — чат, настройки, панели — на тусклую палитру. «Система сопоставления» следит за внешним видом вашей ОС и обновляет ее в реальном времени.', + 'settings.appearance.tabBarHeading': 'Нижняя панель вкладок', + 'settings.appearance.tabBarAlwaysShowLabels': 'Всегда показывать метки', + 'settings.appearance.tabBarAlwaysShowLabelsDesc': + 'Если этот параметр отключен, метки отображаются только при наведении курсора мыши или на активной вкладке.', + 'settings.mascot.active': 'Активно', + 'settings.mascot.characterDesc': 'Описание персонажа', + 'settings.mascot.characterHeading': 'Персонаж', + 'settings.mascot.customGifError': + 'Введите HTTPS .gif URL, петлевой путь HTTP .gif URL, file:// .gif URL или локальный путь .gif.', + 'settings.mascot.customGifHeading': 'Пользовательский аватар GIF', + 'settings.mascot.customGifLabel': 'Пользовательский аватар GIF URL', + 'settings.mascot.customGifPlaceholder': 'https://example.com/avatar.gif', + 'settings.mascot.characterPreview': 'Предварительный просмотр', + 'settings.mascot.characterStates': 'содержит', + 'settings.mascot.characterVisemes': 'виземы', + 'settings.mascot.colorAria': 'OpenHuman цвет', + 'settings.mascot.colorDesc': 'Описание цвета', + 'settings.mascot.colorHeading': 'Цвет', + 'settings.mascot.colorBlack': 'Черный', + 'settings.mascot.colorBurgundy': 'Бордовый', + 'settings.mascot.colorCustom': 'Обычай', + 'settings.mascot.colorNavy': 'Темно-синий', + 'settings.mascot.primaryColor': 'Основной цвет', + 'settings.mascot.secondaryColor': 'Вторичный цвет', + 'settings.mascot.colorYellow': 'Желтый', + 'settings.mascot.libraryUnavailable': 'OpenHuman библиотека недоступна', + 'settings.mascot.title': 'OpenHuman', + 'settings.mascot.loadingLibrary': 'Загрузка библиотеки OpenHuman…', + 'settings.mascot.loadDetailError': 'Не удалось загрузить талисман.', + 'settings.mascot.loadLibraryError': 'Не удалось загрузить библиотеку талисманов.', + 'settings.mascot.localDefault': 'Локальный OpenHuman (по умолчанию)', + 'settings.mascot.menuTitle': 'Маскот', + 'settings.mascot.menuDesc': 'Выберите цвет маскота, используемый во всем приложении', + 'settings.mascot.noCharacters': 'Персонажи OpenHuman пока недоступны', + 'settings.mascot.noColorVariants': 'Нет цветовых вариантов', + 'settings.mascot.voice.current': 'текущий', + 'settings.mascot.voice.customDesc': + 'Идентификаторы голосов можно найти на api.elevenlabs.io/v1/voices или в вашей панели ElevenLabs. Сохраняется только идентификатор — ваш API-ключ остаётся на бэкенде.', + 'settings.mascot.voice.customHeading': 'Пользовательский идентификатор голоса', + 'settings.mascot.voice.customOption': 'Другое (вставить идентификатор голоса)…', + 'settings.mascot.voice.customPlaceholder': 'например. 21m00Tcm4TlvDq8ikWAM', + 'settings.mascot.voice.desc': + 'Выберите голос ElevenLabs, который маскот использует для устных ответов. Фильтруйте по полу, выбирайте из подобранного списка, вставьте свой идентификатор или позвольте приложению выбрать голос, соответствующий языку интерфейса.', + 'settings.mascot.voice.genderFemale': 'Женский', + 'settings.mascot.voice.genderHeading': 'Пол голоса', + 'settings.mascot.voice.genderMale': 'Мужской', + 'settings.mascot.voice.heading': 'Голос', + 'settings.mascot.voice.preset': 'Предустановка голоса', + 'settings.mascot.voice.presetHeading': 'Предустановка голоса', + 'settings.mascot.voice.preview': 'Предпросмотр голоса', + 'settings.mascot.voice.previewError': 'Не удалось воспроизвести предпросмотр голоса', + 'settings.mascot.voice.previewText': + 'Привет, я твой помощник. Это голосовой предварительный просмотр.', + 'settings.mascot.voice.previewing': 'Воспроизведение предпросмотра…', + 'settings.mascot.voice.reset': 'Сбросить к значениям по умолчанию', + 'settings.mascot.voice.useLocaleDefault': 'Соответствовать языку приложения', + 'settings.mascot.voice.useLocaleDefaultDesc': + 'Автоматически выбрать голос для текущего языка интерфейса.', + 'settings.persona.title': 'Персона', + 'settings.persona.menuTitle': 'Персона', + 'settings.persona.menuDesc': 'Имя, личность, аватар и голос — ваш помощник как одна личность', + 'settings.persona.identityHeading': 'Личность', + 'settings.persona.identityDesc': + 'Отображаемое имя и краткое описание вашего помощника. Отображается в приложении; не меняет того, как рассуждает помощник.', + 'settings.persona.displayNameLabel': 'Отображаемое имя', + 'settings.persona.displayNamePlaceholder': 'например Новая звезда', + 'settings.persona.descriptionLabel': 'Описание', + 'settings.persona.descriptionPlaceholder': + 'например Спокойный, лаконичный помощник для моей команды.', + 'settings.persona.soul.heading': 'Личность (SOUL.md)', + 'settings.persona.soul.desc': + 'Личностные подсказки помощника следует в каждом разговоре. Изменения сохраняются в вашем рабочем пространстве и вступают в силу при следующем ответе.', + 'settings.persona.soul.editorLabel': 'Содержимое SOUL.md', + 'settings.persona.soul.reset': 'Сбросить настройки по умолчанию', + 'settings.persona.soul.usingDefault': 'Использование встроенного по умолчанию', + 'settings.persona.soul.loadError': 'Не удалось загрузить SOUL.md.', + 'settings.persona.soul.saveError': 'Не удалось сохранить SOUL.md.', + 'settings.persona.soul.resetError': 'Не удалось сбросить SOUL.md.', + 'settings.persona.appearanceHeading': 'Аватар и голос', + 'settings.persona.appearanceDesc': + 'Цвет талисмана, пользовательский аватар GIF и голос ответа настраиваются в настройках талисмана.', + 'settings.persona.openMascotSettings': 'Открыть настройки талисмана', + 'settings.memoryWindow.balanced.badge': 'Рекомендуется', + 'settings.memoryWindow.balanced.hint': + 'Разумное значение по умолчанию — хорошая непрерывность без лишних трат токенов на каждом запуске.', + 'settings.memoryWindow.balanced.label': 'Сбалансированный', + 'settings.memoryWindow.description': + 'Сколько запомненного контекста OpenHuman добавляет в каждый новый запуск агента. Более широкие окна дают ощущение лучшей памяти о прошлых разговорах, но используют больше токенов — и стоят дороже — на каждом запуске.', + 'settings.memoryWindow.extended.badge': 'Больше контекста', + 'settings.memoryWindow.extended.hint': + 'Больше долгосрочной памяти на каждый запуск. Выше расход токенов за ход.', + 'settings.memoryWindow.extended.label': 'Расширенный', + 'settings.memoryWindow.maximum.badge': 'Самый дорогой', + 'settings.memoryWindow.maximum.hint': + 'Самое большое безопасное окно. Лучшая непрерывность, заметно выше расход токенов на каждом запуске.', + 'settings.memoryWindow.maximum.label': 'Максимум', + 'settings.memoryWindow.minimal.badge': 'Самый дешёвый', + 'settings.memoryWindow.minimal.hint': + 'Самое маленькое окно памяти. Дешевле, быстрее, минимальная непрерывность между запусками.', + 'settings.memoryWindow.minimal.label': 'Минимальный', + 'settings.memoryWindow.title': 'Окно долгосрочной памяти', + 'settings.modelHealth.title': 'Модель здоровья', + 'settings.modelHealth.desc': + 'Качество каждой модели, уровень галлюцинаций и сравнение стоимости активных моделей.', + 'settings.modelHealth.allStatuses': 'Все статусы', + 'settings.modelHealth.models': 'models', + 'settings.modelHealth.loading': 'Загрузка данных модели...', + 'settings.modelHealth.empty': 'Ни одна модель не зарегистрирована', + 'settings.modelHealth.col.model': 'Модель', + 'settings.modelHealth.col.quality': 'Качество', + 'settings.modelHealth.col.halluc': 'Халлюк. Ставка', + 'settings.modelHealth.col.cost': 'Стоимость / выход 1 миллион', + 'settings.modelHealth.col.agents': 'Агенты', + 'settings.modelHealth.col.status': 'Статус', + 'settings.modelHealth.badge.keep': 'Держать', + 'settings.modelHealth.badge.replace': 'Заменять', + 'settings.modelHealth.badge.staging': 'Постановочный тест', + 'settings.modelHealth.badge.vision': 'Только видение', + 'settings.modelHealth.swap': 'Менять?', + 'settings.modelHealth.modal.title': 'Заменить модель?', + 'settings.modelHealth.modal.hallucRate': 'Частота галлюцинаций', + 'settings.modelHealth.modal.cancel': 'Отмена', + 'settings.modelHealth.modal.apply': 'Применить замену', + 'settings.modelHealth.tag.cheaper': 'CHEAPER', + 'settings.modelHealth.tag.better': 'BETTER', + 'settings.screenIntel.permissions.accessibility': 'Доступность', + 'settings.screenIntel.permissions.grantHint': 'Подсказка по предоставлению', + 'settings.screenIntel.permissions.inputMonitoring': 'Мониторинг ввода', + 'settings.screenIntel.permissions.macosAppliesPrivacy': 'macOS применяет конфиденциальность', + 'settings.screenIntel.permissions.openInputMonitoring': 'Запрос…', + 'settings.screenIntel.permissions.refreshStatus': 'Обновление…', + 'settings.screenIntel.permissions.refreshing': 'Обновление…', + 'settings.screenIntel.permissions.requestAccessibility': 'Запрос…', + 'settings.screenIntel.permissions.requestScreenRecording': 'Запрос…', + 'settings.screenIntel.permissions.requesting': 'Запрос…', + 'settings.screenIntel.permissions.restartRefresh': 'Перезапуск ядра…', + 'settings.screenIntel.permissions.restartingCore': 'Перезапуск ядра…', + 'settings.screenIntel.permissions.screenRecording': 'Запись экрана', + 'settings.screenIntel.permissions.title': 'Разрешения', + 'skills.card.moreActions': 'Ещё действия', + 'skills.channelIcon.discord': 'Discord', + 'skills.channelIcon.imessage': 'iMessage', + 'skills.channelIcon.telegram': 'Telegram', + 'skills.channelIcon.web': 'Интернет', + 'skills.channelIcon.yuanbao': 'Yuanbao', + 'skills.composio.poweredBy': 'Работает на Composio', + 'skills.composio.staleStatusTitle': 'Соединения показывают устаревший статус', + 'skills.create.allowedTools': 'Разрешённые инструменты', + 'skills.create.allowedToolsHelp': 'Отображается в SKILL.md как', + 'skills.create.allowedToolsPlaceholder': 'node_exec, fetch', + 'skills.create.author': 'Автор', + 'skills.create.authorPlaceholder': 'Твоё имя', + 'skills.create.commaSeparated': '(через запятую)', + 'skills.create.createBtn': 'Создать навык', + 'skills.create.createError': 'Не удалось создать навык', + 'skills.create.creating': 'Создание…', + 'skills.create.description': 'Описание', + 'skills.create.descriptionPlaceholder': 'Что делает этот навык?', + 'skills.create.optional': '(необязательно)', + 'skills.create.inputs.heading': 'Inputs', + 'skills.create.inputs.help': + 'Объявите параметры, необходимые навыку. Skills Runner сформирует форму для них во время выполнения.', + 'skills.create.inputs.add': 'Добавить входной параметр', + 'skills.create.inputs.row.name': 'Имя входного параметра', + 'skills.create.inputs.row.namePlaceholder': 'например, repo', + 'skills.create.inputs.row.nameError': + 'Только буквы, цифры, подчёркивания и дефисы; должно начинаться с буквы.', + 'skills.create.inputs.row.description': 'Описание входного параметра', + 'skills.create.inputs.row.descriptionPlaceholder': 'Что вводится в это поле?', + 'skills.create.inputs.row.type': 'Type', + 'skills.create.inputs.row.required': 'Required', + 'skills.create.inputs.row.remove': 'Удалить входной параметр', + 'skills.create.inputs.type.string': 'Text', + 'skills.create.inputs.type.integer': 'Number', + 'skills.create.inputs.type.boolean': 'Да / Нет', + 'skills.create.license': 'Лицензия', + 'skills.create.licensePlaceholder': 'MIT', + 'skills.create.name': 'Название', + 'skills.create.namePlaceholder': 'напр. Trade Journal', + 'skills.create.scope': 'Область', + 'skills.create.scopeProjectHint': '/.openhuman/skills/', + 'skills.create.scopeUserHint': + 'Записывается в ~/.openhuman/skills//SKILL.md — доступно во всех рабочих пространствах.', + 'skills.create.slugLabel': 'Slug', + 'skills.create.subtitle': 'SKILL.md', + 'skills.create.tags': 'Теги', + 'skills.create.tagsPlaceholder': 'торговля, исследование', + 'skills.create.title': 'Новый навык', + 'skills.detail.allowedTools': 'Разрешённые инструменты', + 'skills.detail.author': 'Автор', + 'skills.detail.bundledResources': 'Встроенные ресурсы', + 'skills.detail.closeAriaLabel': 'Закрыть детали навыка', + 'skills.detail.location': 'Расположение', + 'skills.detail.noBundledResources': 'Встроенных ресурсов нет.', + 'skills.detail.tags': 'Теги', + 'skills.detail.warnings': 'Предупреждения', + 'skills.install.errors.alreadyInstalledHint': + 'Навык работы с этим пулеметом уже существует в рабочей области. Сначала удалите его или измените заголовок `metadata.id`/`name`.', + 'skills.install.errors.alreadyInstalledTitle': 'Навык уже установлен.', + 'skills.install.errors.fetchFailedHint': + 'Запрос не выполнен успешно. Проверьте, что URL указывает на доступный общедоступный файл и что хост вернул ответ 2xx.', + 'skills.install.errors.fetchFailedTitle': 'Ошибка получения.', + 'skills.install.errors.fetchTimedOutHint': + 'Удаленный хост не ответил вовремя. Попробуйте еще раз или увеличьте таймаут (1–600 с).', + 'skills.install.errors.fetchTimedOutTitle': 'Время ожидания получения истекло', + 'skills.install.errors.fetchTooLargeHint': + 'Размер файла SKILL.md не должен превышать 1 МБ. Разделите связанные ресурсы на файлы `references/` или `scripts/` вместо их встраивания.', + 'skills.install.errors.fetchTooLargeTitle': 'SKILL.md слишком велик.', + 'skills.install.errors.genericHint': + 'Серверная часть вернула ошибку. Необработанное сообщение показано ниже.', + 'skills.install.errors.genericTitle': 'Не удалось установить навык.', + 'skills.install.errors.invalidSkillHint': + 'Вводный заголовок должен быть допустимым YAML с непустыми полями `name` и `description`, заканчивающимися `---`.', + 'skills.install.errors.invalidSkillTitle': 'SKILL.md не анализировал', + 'skills.install.errors.invalidUrlHint': + 'Разрешены только общедоступные HTTPS URL. Частные узлы, узлы обратной связи и узлы метаданных блокируются.', + 'skills.install.errors.invalidUrlTitle': 'URL отклонено', + 'skills.install.errors.unsupportedUrlHint': + 'Работают только прямые ссылки `.md`. Для GitHub ссылка на файл (github.com/owner/repo/blob/.../SKILL.md) — корни дерева и репо не установлены.', + 'skills.install.errors.unsupportedUrlTitle': 'Форма URL не поддерживается.', + 'skills.install.errors.writeFailedHint': + 'Каталог навыков рабочей области не был доступен для записи. Проверьте разрешения файловой системы для `/.openhuman/skills/`.', + 'skills.install.errors.writeFailedTitle': 'Не удалось записать SKILL.md.', + 'skills.install.fetchLog': 'Получить лог', + 'skills.install.fetchingPrefix': 'Получение', + 'skills.install.fetchingSuffix': 'может занять заданное вами время ожидания.', + 'skills.install.installBtn': 'Установка…', + 'skills.install.installComplete': 'Установка завершена', + 'skills.install.installing': 'Установка…', + 'skills.install.parseWarnings': 'Предупреждения парсинга', + 'skills.install.rawError': 'Необработанная ошибка', + 'skills.install.subtitleMiddle': 'поверх HTTPS и устанавливает его в', + 'skills.install.subtitlePrefix': 'Выбирает только один', + 'skills.install.subtitleSuffix': 'HTTPS; частные хосты и хосты обратной связи заблокированы.', + 'skills.install.successDiscovered': 'Обнаружил {count} новых навыков.', + 'skills.install.successNoNewIds': + 'Навык установлен, но новые идентификаторы навыков не появились — возможно, в каталоге уже есть навык с таким же ярлыком.', + 'skills.install.timeoutHint': '(секунды, необязательно)', + 'skills.install.timeoutHelp': + 'По умолчанию — 60 секунд. Значения за пределами 1–600 фиксируются на стороне сервера.', + 'skills.install.timeoutInvalid': 'Должно быть целым числом от 1 до 600.', + 'skills.install.timeoutLabel': 'Таймаут', + 'skills.install.timeoutPlaceholder': '60', + 'skills.install.title': 'Установить навык по URL', + 'skills.install.urlHelpMiddle': 'файл.', + 'skills.install.urlHelpPrefix': 'Прямая ссылка на', + 'skills.install.urlHelpSuffix': 'URLs автоматически перезаписывается на', + 'skills.install.urlInvalidPrefix': 'URL должен быть правильно сформированным', + 'skills.install.urlInvalidSuffix': 'связь.', + 'skills.install.urlLabel': 'URL навыка', + 'skills.install.urlPlaceholder': 'https://raw.githubusercontent.com/owner/repo/main/SKILL.md', + 'skills.meetingBots.bannerDesc': 'Описание баннера', + 'skills.meetingBots.bannerTitle': 'Заголовок баннера', + 'skills.meetingBots.busyTitle': 'OpenHuman занят', + 'skills.meetingBots.comingSoon': 'Скоро', + 'skills.meetingBots.couldNotStartTitle': 'Не удалось запустить OpenHuman', + 'skills.meetingBots.displayName': 'Отображаемое имя', + 'skills.meetingBots.failedToStart': 'Не удалось запустить OpenHuman.', + 'skills.meetingBots.joiningMessage': 'Он должен появиться как участник через несколько секунд.', + 'skills.meetingBots.joiningTitle': 'OpenHuman подключается к встрече', + 'skills.meetingBots.meetingLink': 'Ссылка на встречу', + 'skills.meetingBots.modalAriaLabel': 'Отправить OpenHuman на встречу', + 'skills.meetingBots.modalDesc': 'Описание окна', + 'skills.meetingBots.modalTitle': 'Отправить OpenHuman на встречу', + 'skills.meetingBots.newBadge': 'Новое', + 'skills.meetingBots.platformComingSoon': 'Поддержка {label} скоро появится.', + 'skills.meetingBots.platformHints.gmeet': 'meet.google.com/abc-defg-hij', + 'skills.meetingBots.platformHints.teams': 'Teams.microsoft.com/...', + 'skills.meetingBots.platformHints.zoom': 'Zoom.us/j/...', + 'skills.meetingBots.platforms.gmeet': 'Google Встречайте', + 'skills.meetingBots.platforms.teams': 'Microsoft Teams', + 'skills.meetingBots.platforms.zoom': 'Zoom', + 'skills.meetingBots.sendTo': 'Отправить', + 'skills.meetingBots.soonSuffix': 'скоро', + 'skills.meetingBots.starting': 'Запуск…', + 'skills.resource.preview.closeAriaLabel': 'Закрыть предпросмотр', + 'skills.resource.preview.failed': 'Не удалось показать превью', + 'skills.resource.preview.loading': 'Загрузка предпросмотра…', + 'skills.resource.tree.empty': 'Встроенных ресурсов нет.', + 'skills.search.placeholder': 'Поиск', + 'skills.setup.autocomplete.acceptKey': 'Клавиша принятия', + 'skills.setup.autocomplete.activeDesc': 'Активно', + 'skills.setup.autocomplete.activeTitle': 'Автодополнение активно', + 'skills.setup.autocomplete.customizeSettings': 'Настроить параметры', + 'skills.setup.autocomplete.debounce': 'Задержка', + 'skills.setup.autocomplete.description': 'Описание', + 'skills.setup.autocomplete.enableBtn': 'Включение...', + 'skills.setup.autocomplete.enableError': 'Не удалось включить автодополнение', + 'skills.setup.autocomplete.enabling': 'Включение...', + 'skills.setup.autocomplete.notSupported': 'Не поддерживается', + 'skills.setup.autocomplete.stepEnable': 'Включить встроенные подсказки', + 'skills.setup.autocomplete.stepSuccess': 'Готово к работе', + 'skills.setup.autocomplete.stylePreset': 'Пресет стиля', + 'skills.setup.autocomplete.stylePresetValue': 'Сбалансированный (можно изменить позже)', + 'skills.setup.autocomplete.title': 'Автодополнение текста', + 'skills.setup.screenIntel.activeDesc': 'Активно', + 'skills.setup.screenIntel.activeTitle': 'Интеллект экрана включён', + 'skills.setup.screenIntel.advancedSettings': 'Дополнительные настройки', + 'skills.setup.screenIntel.allGranted': 'Все разрешения предоставлены', + 'skills.setup.screenIntel.captureMode': 'Режим захвата', + 'skills.setup.screenIntel.captureModeValue': 'Все окна (можно изменить позже)', + 'skills.setup.screenIntel.deniedHint': + 'После предоставления разрешений в Системных настройках нажми ниже для перезапуска и применения изменений.', + 'skills.setup.screenIntel.enableBtn': 'Включение...', + 'skills.setup.screenIntel.enableDesc': + 'Видеть, что происходит на вашем экране, и передавать полезный контекст вашему агенту', + 'skills.setup.screenIntel.enableError': 'Не удалось включить интеллект экрана', + 'skills.setup.screenIntel.enabling': 'Включение...', + 'skills.setup.screenIntel.grant': 'Открытие...', + 'skills.setup.screenIntel.granted': 'Предоставлено', + 'skills.setup.screenIntel.macosOnly': 'Только macOS', + 'skills.setup.screenIntel.opening': 'Открытие...', + 'skills.setup.screenIntel.panicHotkey': 'Экстренная горячая клавиша', + 'skills.setup.screenIntel.permAccessibility': 'Доступность', + 'skills.setup.screenIntel.permInputMonitoring': 'Мониторинг ввода', + 'skills.setup.screenIntel.permScreenRecording': 'Запись экрана', + 'skills.setup.screenIntel.permissionsDesc': 'Описание разрешений', + 'skills.setup.screenIntel.permissionPathLabel': 'macOS применяет конфиденциальность к:', + 'skills.setup.screenIntel.refreshStatus': 'Обновить статус', + 'skills.setup.screenIntel.restartRefresh': 'Перезапуск...', + 'skills.setup.screenIntel.restarting': 'Перезапуск...', + 'skills.setup.screenIntel.stepEnable': 'Включить навык', + 'skills.setup.screenIntel.stepPermissions': 'Предоставить разрешения', + 'skills.setup.screenIntel.stepSuccess': 'Готово к работе', + 'skills.setup.screenIntel.title': 'Интеллект экрана', + 'skills.setup.screenIntel.visionModel': 'Визуальная модель', + 'skills.setup.voice.activation': 'Активация', + 'skills.setup.voice.activeDescPrefix': 'Fn', + 'skills.setup.voice.activeDescSuffix': 'Fn', + 'skills.setup.voice.activeTitle': 'Голосовой интеллект активен', + 'skills.setup.voice.customizeSettings': 'Настроить параметры', + 'skills.setup.voice.downloadSttBtn': 'Скачать STT-модель', + 'skills.setup.voice.enableDesc': 'Включить', + 'skills.setup.voice.hotkey': 'Горячая клавиша', + 'skills.setup.voice.startBtn': 'Запуск...', + 'skills.setup.voice.startError': 'Не удалось запустить голосовой сервер', + 'skills.setup.voice.starting': 'Запуск...', + 'skills.setup.voice.stepEnable': 'Запустить голосовой сервер', + 'skills.setup.voice.stepSetup': 'Требуется загрузка модели', + 'skills.setup.voice.stepSuccess': 'Готово к работе', + 'skills.setup.voice.sttNotReady': 'Модель распознавания речи не готова', + 'skills.setup.voice.sttNotReadyDesc': + 'Голосовой интеллект требует локальной модели Whisper для транскрипции. Скачай её в настройках локальной модели.', + 'skills.setup.voice.sttReady': 'Модель распознавания речи готова', + 'skills.setup.voice.sttReturnHint': 'Подсказка возврата STT', + 'skills.setup.voice.title': 'Голосовой интеллект', + 'skills.uninstall.couldNotUninstall': 'Не удалось удалить', + 'skills.uninstall.description': + 'Это навсегда удалит каталог навыка и все его ресурсы. Агент перестанет видеть его на следующем ходу.', + 'skills.uninstall.title': 'Удалить', + 'skills.uninstall.uninstallBtn': 'Удалить', + 'skills.uninstall.uninstalling': 'Удаление…', + 'upsell.global.limitMessage': 'Улучши план или пополни кредиты для продолжения', + 'upsell.global.limitTitle': 'Ты', + 'upsell.global.nearLimitMessage': + 'Ты использовал {pct}% лимита. Улучши план для увеличения лимитов.', + 'upsell.global.nearLimitTitle': 'Лимит использования близко', + 'upsell.usageLimit.bodyBudget': + 'Вы достигли недельного лимита.{reset} Обновите план или пополните кредиты, чтобы избежать ограничений.', + 'upsell.usageLimit.bodyRate': + 'Вы достигли 10-часового лимита частоты инференса.{reset} Обновите план для более высоких лимитов.', + 'upsell.usageLimit.heading': 'Лимит использования достигнут', + 'upsell.usageLimit.notNow': 'Не сейчас', + 'upsell.usageLimit.perWindow': '{amount}', + 'upsell.usageLimit.planIncludes': '{plan}', + 'upsell.usageLimit.resetsIn': 'Сбросится {time}.', + 'upsell.usageLimit.upgradePlan': 'Улучшить план', + 'upsell.usageLimit.weeklyInference': '{amount}', + 'walkthrough.tooltip.letsGo': 'Поехали!', + 'walkthrough.tooltip.next': 'Далее →', + 'walkthrough.tooltip.skip': 'Пропустить тур', + 'walkthrough.tooltip.stepCounter': '{n} из {total}', + 'webhooks.activity.empty': 'Пусто', + 'webhooks.activity.title': 'Последняя активность', + 'webhooks.composioHistory.empty': 'Пусто', + 'webhooks.composioHistory.metadataId': 'ID метаданных', + 'webhooks.composioHistory.metadataUuid': 'UUID метаданных', + 'webhooks.composioHistory.payload': 'Полезная нагрузка', + 'webhooks.composioHistory.title': 'История триггеров ComposeIO', + 'webhooks.tunnels.active': 'Активно', + 'webhooks.tunnels.createFailed': 'Не удалось создать туннель', + 'webhooks.tunnels.creating': 'Создание...', + 'webhooks.tunnels.deleteFailed': 'Не удалось удалить туннель', + 'webhooks.tunnels.descriptionPlaceholder': 'Описание (необязательно)', + 'webhooks.tunnels.echo': 'Эхо', + 'webhooks.tunnels.empty': 'Пусто', + 'webhooks.tunnels.enableEcho': 'Включить эхо', + 'webhooks.tunnels.inactive': 'Неактивно', + 'webhooks.tunnels.namePlaceholder': 'Название туннеля (напр. telegram-bot)', + 'webhooks.tunnels.newTunnel': 'Новый туннель', + 'webhooks.tunnels.removeEcho': 'Убрать эхо', + 'webhooks.tunnels.title': 'Вебхук-туннели', + 'webhooks.tunnels.toggleFailed': 'Не удалось переключить эхо', + 'composio.directModeRequiresKey': 'Не удалось сохранить. Прямой режим требует непустой API-ключ.', + 'composio.integrationSlugsHelp': 'Интеграция через запятую слизни, напр.', + 'composio.integrationSlugsExample': 'gmail, slack', + 'composio.integrationSlugsCaseInsensitive': 'Регистронезависим.', + 'composio.integrationSlugsPlaceholder': 'gmail, slack, ...', + 'composio.notYetRouted': 'пока не маршрутизируется', + 'composio.triggers.loading': 'Загрузка…', + 'conversations.taskKanban.todo': 'К выполнению', + 'chat.addReaction': 'Добавить реакцию', + 'chat.agentProfile.create': 'Создать профиль агента', + 'chat.agentProfile.createFailed': 'Не удалось создать профиль агента.', + 'chat.agentProfile.customDescription': 'Пользовательский профиль агента', + 'chat.agentProfile.defaultAgentLabel': 'Оркестратор', + 'chat.agentProfile.exists': 'Профиль агента «{name}» уже существует.', + 'chat.agentProfile.label': 'Профиль агента', + 'chat.agentProfile.namePlaceholder': 'Имя профиля', + 'chat.agentProfile.promptStylePlaceholder': 'Стиль подсказки', + 'chat.agentProfile.allowedToolsPlaceholder': 'Разрешенные инструменты', + 'chat.backToThread': 'вернуться к {title}', + 'chat.parentThread': 'родительский поток', + 'chat.removeReaction': 'Удалить {emoji}', + 'settings.composio.loading': 'Загрузка…', + 'settings.mascot.noCharactersAvailable': 'Персонажи OpenHuman пока недоступны', + 'skills.uninstall.confirmTitle': 'Удалить {name}?', + 'conversations.taskKanban.blocked': 'Заблокировано', + 'conversations.taskKanban.done': 'Готово', + 'conversations.taskKanban.pending': 'В ожидании', + 'conversations.taskKanban.working': 'Работающий', + 'conversations.taskKanban.awaitingApproval': 'Ожидает одобрения', + 'conversations.taskKanban.ready': 'Готовый', + 'conversations.taskKanban.rejected': 'Отклоненный', + 'conversations.taskKanban.inProgress': 'В работе', + 'intelligence.memoryChunk.detail.copiedHint': 'скопировано', + 'settings.composio.notYetRouted': 'пока не маршрутизируется', + 'settings.localModel.download.manageExternal': + 'Управляйте этой моделью во внешней среде выполнения.', + 'settings.localModel.status.manageOllamaExternal': + 'Управляйте процессом Ollama и загрузкой моделей вне OpenHuman, затем повторите диагностику.', + 'settings.localModel.status.ollamaDocs': 'Документация Ollama', + 'settings.localModel.status.thenRetry': + 'для инструкций по настройке, затем повторите, когда среда выполнения станет доступна.', + 'devOptions.menuAi': 'Конфигурация AI', + 'devOptions.menuAiDesc': + 'Облачные поставщики, локальные модели Ollama и маршрутизация для каждой рабочей нагрузки', + 'devOptions.menuScreenAware': 'Функция Screen Aware', + 'devOptions.menuScreenAwareDesc': + 'Разрешения на захват экрана, мониторинг политика и элементы управления сеансом', + 'devOptions.menuMessaging': 'Каналы обмена сообщениями', + 'devOptions.menuMessagingDesc': + 'Настройка режимов аутентификации Telegram/Discord и маршрутизации каналов по умолчанию', + 'devOptions.menuTools': 'Инструменты', + 'devOptions.menuToolsDesc': + 'Включение или отключение возможностей, которые OpenHuman может использовать от вашего имени', + 'devOptions.menuAgentChat': 'Чат агента', + 'devOptions.menuAgentChatDesc': + 'Диалог агента тестирования с переопределением модели и температуры', + 'devOptions.menuCronJobs': 'Задания Cron', + 'devOptions.menuCronJobsDesc': + 'Просмотр и настройка запланированных заданий для навыков выполнения', + 'devOptions.menuLocalModelDebug': 'Отладка локальной модели', + 'devOptions.menuLocalModelDebugDesc': + 'Конфигурация Ollama, загрузка ресурсов, тесты моделей и диагностика', + 'devOptions.menuWebhooksDebug': 'Веб-перехватчики', + 'devOptions.menuWebhooksDebugDesc': + 'Проверка регистрации веб-перехватчиков во время выполнения и записанные журналы запросов', + 'devOptions.menuIntelligence': 'Аналитика', + 'devOptions.menuIntelligenceDesc': + 'Рабочая область памяти, механизм подсознания, сны и настройки', + 'devOptions.menuNotificationRouting': 'Маршрутизация уведомлений', + 'devOptions.menuNotificationRoutingDesc': + 'Оценка важности ИИ и эскалация оркестратора для предупреждений интеграции', + 'devOptions.menuComposeIOTriggers': 'Триггеры ComposeIO', + 'devOptions.menuComposeIOTriggersDesc': 'Просмотр истории и архива триггеров ComposeIO.', + 'devOptions.menuComposioRouting': 'Composio Маршрутизация (прямой режим)', + 'devOptions.menuComposioRoutingDesc': + 'Используйте свой собственный ключ Composio API и направляйте вызовы непосредственно на backend.composio.dev', + 'devOptions.menuComposioTriggers': 'Интеграция Триггеры', + 'devOptions.menuComposioTriggersDesc': + 'Настройка параметров сортировки AI для триггеров интеграции Composio', + 'memory.sourceFilterAria': 'Фильтровать по источнику', + 'calls.comingSoonDescription': 'Звонки с поддержкой ИИ скоро появятся. Следите за обновлениями.', + 'vault.title': 'Хранилища знаний.', + 'vault.description': + 'Укажите локальную папку; файлы разбиваются на части и зеркалируются в память.', + 'vault.add': 'Добавить хранилище.', + 'vault.added': 'Хранилище добавлено.', + 'vault.createdMessage': 'Создано «{name}». Нажмите {sync}, чтобы принять.', + 'vault.couldNotAdd': 'Не удалось добавить хранилище.', + 'vault.syncFailed': 'Не удалось синхронизировать', + 'vault.syncFailedFor': 'Не удалось синхронизировать «{name}»', + 'vault.syncFailedFiles': 'Не удалось {count} файлов', + 'vault.syncedTitle': 'Синхронизировано "{name}"', + 'vault.syncSummary': 'Загружен {ingested}, без изменений {unchanged}, удален {removed}', + 'vault.syncSummaryFailed': ', не удалось {count}', + 'vault.syncSummarySkipped': ', пропущен {count}', + 'vault.syncSummaryDuration': ' · {seconds}s', + 'vault.confirmRemovePurge': + 'Удалить хранилище «{name}»?\n\nНажмите OK, чтобы также очистить его память (удалить все {count} загруженных документов).\nНажмите Отмена, чтобы сохранить документы в памяти.', + 'vault.confirmRemove': 'Действительно удалить хранилище «{name}»?', + 'vault.removed': 'Хранилище удалено.', + 'vault.removedPurgedMessage': 'Удален «{name}» и очищена его память.', + 'vault.removedKeptMessage': 'Удален «{name}». Документы хранятся в памяти.', + 'vault.couldNotRemove': 'Не удалось удалить хранилище.', + 'vault.name': 'Имя', + 'vault.namePlaceholder': 'Мои исследовательские заметки', + 'vault.folderPath': 'Путь к папке (абсолютный)', + 'vault.folderPathPlaceholder': '/Пользователи/вы/Документы/заметки', + 'vault.excludes': 'Исключает (подстроки, разделенные запятыми, необязательно)', + 'vault.excludesPlaceholder': 'черновики/, .secret', + 'vault.creating': 'Создание…', + 'vault.create': 'Создать хранилище', + 'vault.loading': 'Загрузка хранилища…', + 'vault.failedToLoad': 'Не удалось загрузить хранилища: {error}', + 'vault.empty': 'Хранилищ пока нет. Добавьте одно выше, чтобы начать загрузку папки.', + 'vault.fileCount': '{count} файлов', + 'vault.syncedRelative': 'синхронизировано {time}', + 'vault.neverSynced': 'никогда не синхронизировано', + 'vault.syncingProgress': 'Синхронизация… {ingested}/{total}', + 'vault.removing': 'Удаление…', + 'vault.relative.sec': '{count}s назад', + 'vault.relative.min': '{count}m назад', + 'vault.relative.hr': '{count}h назад', + 'vault.relative.day': '{count}d назад', + 'whatsapp.title': 'WhatsApp', + 'subconscious.interval.fiveMinutes': '5 минут', + 'subconscious.interval.tenMinutes': '10 минут', + 'subconscious.interval.fifteenMinutes': '15 минут', + 'subconscious.interval.thirtyMinutes': '30 минут', + 'subconscious.interval.oneHour': '1 час', + 'subconscious.interval.sixHours': '6 часов', + 'subconscious.interval.twelveHours': '12 часов', + 'subconscious.interval.oneDay': '1 день', + 'subconscious.priority.critical': 'критический', + 'subconscious.priority.important': 'важный', + 'subconscious.priority.normal': 'нормальный', + 'subconscious.durationSeconds': '{seconds} с', + 'subconscious.durationMilliseconds': '{milliseconds} мс', + 'settings.appearance': 'Внешний вид', + 'settings.appearanceDesc': 'Выберите светлую, темную или соответствующую теме вашей системы.', + 'settings.mascot': 'Талисман', + 'settings.mascotDesc': 'Выберите цвет талисмана, используемый в приложении.', + 'pages.settings.account.walletBalances': 'Баланс кошелька', + 'pages.settings.account.walletBalancesDesc': + 'Просмотр мультичейн-балансов вашего локального кошелька', + 'walletBalances.title': 'Баланс кошелька', + 'walletBalances.refresh': 'Refresh', + 'walletBalances.loading': 'Загрузка балансов…', + 'walletBalances.retry': 'Retry', + 'walletBalances.emptyState': + 'Аккаунтов кошелька пока нет — настройте кошелёк в разделе «Фраза восстановления».', + 'walletBalances.copyAddress': 'Копировать адрес', + 'walletBalances.providerMissing': 'провайдер недоступен', + 'walletBalances.rawBalance': 'Исходный: {raw}', + 'walletBalances.errorGeneric': + 'Не удалось загрузить балансы кошелька. Настройте кошелёк в разделе «Фраза восстановления» и повторите попытку.', + 'settings.taskSources.title': 'Источники задач', + 'settings.taskSources.subtitle': 'Переносите задачи из своих инструментов на доску задач агента.', + 'settings.taskSources.description': + 'Собирайте рабочие элементы из GitHub, Notion, Linear и ClickUp, обогащайте их и направляйте на доску задач агента.', + 'settings.taskSources.connectHint': + 'Источники задач используют ваши подключенные учетные записи. Сначала подключите их в разделе «Интеграции».', + 'settings.taskSources.disabledBanner': + 'Источники задач отключены в настройках. Разрешите им автоматически проводить опросы.', + 'settings.taskSources.loadError': 'Не удалось загрузить источники задач.', + 'settings.taskSources.addTitle': 'Добавить источник задачи', + 'settings.taskSources.provider': 'Поставщик', + 'settings.taskSources.name': 'Имя (необязательно)', + 'settings.taskSources.namePlaceholder': 'например Мои открытые вопросы', + 'settings.taskSources.github.repo': 'Репозиторий (владелец/имя, необязательно)', + 'settings.taskSources.github.labels': 'Ярлыки (через запятую)', + 'settings.taskSources.notion.database': 'Идентификатор базы данных (доски)', + 'settings.taskSources.linear.team': 'Идентификатор команды (необязательно)', + 'settings.taskSources.clickup.team': 'Идентификатор рабочей области (команды) (необязательно)', + 'settings.taskSources.assignedToMe': 'Только элементы, назначенные мне', + 'settings.taskSources.add': 'Добавить источник', + 'settings.taskSources.adding': 'Добавление…', + 'settings.taskSources.preview': 'Предварительный просмотр', + 'settings.taskSources.previewResult': 'Задачи {count} соответствуют этому фильтру', + 'settings.taskSources.fetchNow': 'Получить сейчас', + 'settings.taskSources.fetching': 'Получение…', + 'settings.taskSources.fetchResult': 'Маршрутизация {routed} из задач {fetched}', + 'settings.taskSources.configured': 'Настроенные источники', + 'settings.taskSources.empty': 'Источники задач пока не настроены.', + 'settings.taskSources.proactive': 'Проактивный', + 'settings.taskSources.lastFetch': 'Последняя выборка', + 'settings.taskSources.never': 'Никогда', + 'settings.taskSources.statusEnabled': 'Включено', + 'settings.taskSources.statusDisabled': 'Неполноценный', + 'settings.taskSources.enable': 'Давать возможность', + 'settings.taskSources.disable': 'Запрещать', + 'settings.taskSources.remove': 'Удалять', + 'settings.taskSources.removeConfirm': + 'Удалить этот источник задачи? Вся загруженная история задач будет удалена, и ее нельзя будет отменить.', + 'settings.taskSources.refresh': 'Обновить', + 'settings.taskSources.providers.github': 'GitHub', + 'settings.taskSources.providers.notion': 'Понятие', + 'settings.taskSources.providers.linear': 'Линейный', + 'settings.taskSources.providers.clickup': 'КликАп', + 'skills.dashboard.title': 'Skills', + 'skills.dashboard.scheduledHeading': 'Запланированные навыки', + 'skills.dashboard.emptyTitle': 'Нет запланированных навыков', + 'skills.dashboard.emptyBody': + 'Запустите встроенный навык однократно или сохраните расписание, чтобы увидеть его здесь.', + 'skills.dashboard.create': 'Создать навык', + 'skills.dashboard.run': 'Запустить навык', + 'skills.dashboard.enable': 'Включить запланированный навык', + 'skills.dashboard.disable': 'Отключить запланированный навык', + 'skills.dashboard.lastRun': 'Последний запуск', + 'skills.dashboard.nextRun': 'Следующий запуск', + 'skills.dashboard.cardOpenRunner': 'Открыть в исполнителе', + 'skills.dashboard.loadError': 'Не удалось загрузить запланированные навыки', + 'skills.new.title': 'Создать навык', + 'skills.new.placeholderBody': + 'Форма создания скоро появится. Пока используйте кнопку «Новый навык» на странице исполнителя.', + 'settings.agents.title': 'Агенты', + 'settings.agents.subtitle': + 'Управляйте агентами, доступными для делегирования — встроенными агентами по умолчанию и вашими собственными агентами.', + 'settings.agents.menuDesc': 'Управление встроенными и пользовательскими агентами', + 'settings.agents.newAgent': 'Новый агент', + 'settings.agents.loadError': 'Не удалось загрузить агенты', + 'settings.agents.empty': 'Агентов пока нет', + 'settings.agents.sourceDefault': 'Встроенный', + 'settings.agents.sourceCustom': 'Обычай', + 'settings.agents.enable': 'Включить агент', + 'settings.agents.disable': 'Отключить агент', + 'settings.agents.edit': 'Редактировать', + 'settings.agents.delete': 'Удалить', + 'settings.agents.reset': 'Сбросить настройки по умолчанию', + 'settings.agents.modelLabel': 'Модель', + 'settings.agents.toolsLabel': 'Инструменты', + 'settings.agents.toolsAll': 'Все инструменты', + 'settings.agents.toolsCount': '{count} инструменты', + 'settings.agents.actionFailed': 'Не удалось обновить агент', + 'settings.agents.orchestratorLocked': 'Оркестратор всегда включен.', + 'settings.agents.editor.createTitle': 'Новый агент', + 'settings.agents.editor.editTitle': 'Редактировать агента', + 'settings.agents.editor.id': 'ID', + 'settings.agents.editor.idHint': 'Только строчные буквы, цифры, _ и -.', + 'settings.agents.editor.name': 'Имя', + 'settings.agents.editor.description': 'Описание', + 'settings.agents.editor.model': 'Модель (необязательно)', + 'settings.agents.editor.modelPlaceholder': + 'например наследовать, подсказку: быстро или идентификатор модели', + 'settings.agents.editor.systemPrompt': 'Системное приглашение (необязательно)', + 'settings.agents.editor.tools': 'Разрешенные инструменты', + 'settings.agents.editor.toolsHint': + 'Одно имя инструмента в строке. Используйте * для всех инструментов.', + 'settings.agents.editor.defaultsNote': + 'При редактировании встроенного агента сохраняется переопределение, которое можно сбросить позже.', + 'settings.agents.editor.save': 'Сохранять', + 'settings.agents.editor.create': 'Создать агента', + 'settings.agents.editor.saving': 'Сохранение…', + 'settings.agentsSection.title': 'Agents', + 'settings.agentsSection.description': + 'Управляйте агентами, их автономностью и доступом к ресурсам компьютера.', + 'settings.agentsSection.menuDesc': 'Реестр, автономность и доступ к ОС', + 'settings.agents.editor.notFound': 'Агент не найден.', + 'settings.agents.editor.modelInherit': 'Унаследовать (системное по умолчанию)', + 'settings.agents.editor.modelHints': 'Подсказки маршрутизации', + 'settings.agents.editor.modelTiers': 'Уровни моделей', + 'settings.agents.editor.modelCustom': 'Идентификатор модели…', + 'settings.agents.editor.modelCustomPlaceholder': 'напр. anthropic/claude-sonnet-4', + 'settings.agents.editor.selectTools': 'Добавить инструменты', + 'settings.agents.editor.toolsAllSelected': 'Все инструменты', + 'settings.agents.editor.toolsNoneSelected': 'Инструменты не выбраны', + 'settings.agents.editor.removeToolAria': 'Удалить {tool}', + 'settings.agents.editor.toolsModalTitle': 'Разрешённые инструменты', + 'settings.agents.editor.toolsSelectedCount': 'Выбрано: {count}', + 'settings.agents.editor.toolsSearchPlaceholder': 'Поиск инструментов…', + 'settings.agents.editor.toolsAllowAll': 'Разрешить все инструменты (*)', + 'settings.agents.editor.toolsAllowAllHint': + 'Этот агент может использовать любой доступный инструмент.', + 'settings.agents.editor.toolsLoading': 'Загрузка инструментов…', + 'settings.agents.editor.toolsLoadError': 'Не удалось загрузить инструменты', + 'settings.agents.editor.toolsEmpty': 'Инструменты по вашему запросу не найдены.', + 'settings.agents.editor.toolsDone': 'Done', + 'settings.agents.editor.builtInReadonly': + 'Встроенные агенты нельзя редактировать. Вы можете включить, отключить или сбросить их в списке агентов.', }; -export default ru; +export default messages; diff --git a/app/src/lib/i18n/zh-CN.ts b/app/src/lib/i18n/zh-CN.ts index e30a4bf40..706d98607 100644 --- a/app/src/lib/i18n/zh-CN.ts +++ b/app/src/lib/i18n/zh-CN.ts @@ -1,30 +1,3885 @@ -import zhCN1 from './chunks/zh-CN-1'; -import zhCN2 from './chunks/zh-CN-2'; -import zhCN3 from './chunks/zh-CN-3'; -import zhCN4 from './chunks/zh-CN-4'; -import zhCN5 from './chunks/zh-CN-5'; import type { TranslationMap } from './types'; -// Simplified Chinese (简体中文) translations. Each chunk maps to chunks/en-N.ts. -// Missing keys fall back to English via I18nContext.resolveEn(). -const zhCN: TranslationMap = { - ...zhCN1, - ...zhCN2, - ...zhCN3, - ...zhCN4, - ...zhCN5, +// Simplified Chinese (简体中文) translations. Keys mirror en.ts; missing/ +// English-identical values fall back to English via I18nContext.resolveEn(). +const messages: TranslationMap = { + 'nav.home': '首页', + 'nav.human': '助手', + 'nav.chat': '对话', + 'nav.connections': '连接', + 'nav.memory': '记忆', + 'nav.alerts': '通知', + 'nav.rewards': '奖励', + 'nav.settings': '设置', + 'common.cancel': '取消', + 'common.save': '保存', + 'common.confirm': '确认', + 'common.delete': '删除', + 'common.edit': '编辑', + 'common.create': '创建', + 'common.search': '搜索', + 'common.loading': '加载中…', + 'common.error': '错误', + 'common.success': '成功', + 'common.back': '返回', + 'common.next': '下一步', + 'common.finish': '完成', + 'common.close': '关闭', + 'common.enabled': '已启用', + 'common.disabled': '已禁用', + 'common.on': '开', + 'common.off': '关', + 'common.yes': '是', + 'common.no': '否', + 'common.ok': '确定', + 'common.name': '名称', + 'common.retry': '重试', + 'common.copy': '复制', + 'common.copied': '已复制', + 'common.learnMore': '了解更多', + 'common.seeAll': '查看全部', + 'common.dismiss': '忽略', + 'common.clear': '清除', + 'common.reset': '重置', + 'common.refresh': '刷新', + 'common.export': '导出', + 'common.import': '导入', + 'common.upload': '上传', + 'common.download': '下载', + 'common.add': '添加', + 'common.remove': '移除', + 'common.showMore': '展开更多', + 'common.showLess': '收起', + 'common.submit': '提交', + 'common.continue': '继续', + 'common.comingSoon': '即将推出', + 'common.breadcrumb': '面包屑', + 'settings.general': '通用', + 'settings.featuresAndAI': '功能与 AI', + 'settings.billingAndRewards': '账单与奖励', + 'settings.support': '支持', + 'settings.advanced': '高级', + 'settings.dangerZone': '危险区域', + 'settings.account': '账户', + 'settings.accountDesc': '恢复短语、团队、连接与隐私', + 'settings.notifications': '通知', + 'settings.notificationsDesc': '免打扰模式与各账户通知控制', + 'settings.notifications.tabs.preferences': '偏好设置', + 'settings.notifications.tabs.routing': '路由', + 'settings.features': '功能', + 'settings.featuresDesc': '屏幕感知、消息与工具', + 'settings.aiModels': 'AI 与模型', + 'settings.aiModelsDesc': '本地 AI 模型设置、下载与 LLM 提供商', + 'settings.ai': 'AI', + 'settings.aiDesc': '云端提供商、本地 Ollama 模型以及按工作负载路由', + 'settings.billingUsage': '账单与用量', + 'settings.billingUsageDesc': '订阅方案、配额与支付方式', + 'settings.rewards': '奖励', + 'settings.rewardsDesc': '邀请、优惠券与获得的配额', + 'settings.restartTour': '重新开始导览', + 'settings.restartTourDesc': '从头开始回放产品导览', + 'settings.about': '关于', + 'settings.aboutDesc': '应用版本与软件更新', + 'settings.developerOptions': '开发者选项', + 'settings.developerOptionsDesc': '诊断、调试面板、Webhook 与记忆检查', + 'settings.clearAppData': '清除应用数据', + 'settings.clearAppDataDesc': '退出登录并永久清除所有本地应用数据', + 'settings.logOut': '退出登录', + 'settings.logOutDesc': '退出当前账户', + 'settings.exitLocalSession': '退出本地会话', + 'settings.exitLocalSessionDesc': '返回登录页面', + 'settings.language': '语言', + 'settings.betaBuild': '测试版本 - v{version}', + 'settings.languageDesc': '应用界面显示语言', + 'settings.alerts': '通知', + 'settings.alertsDesc': '查看收件箱中的最新通知和活动', + 'settings.account.recoveryPhrase': '恢复短语', + 'settings.account.recoveryPhraseDesc': '查看并备份你的账户恢复短语', + 'settings.account.team': '团队', + 'settings.account.teamDesc': '管理团队成员与权限', + 'settings.account.connections': '连接', + 'settings.account.connectionsDesc': '管理已关联的账户与服务', + 'settings.account.privacy': '隐私', + 'settings.account.privacyDesc': '控制哪些数据离开你的电脑', + 'migration.title': '从其他助手导入', + 'migration.description': + '将记忆和笔记从另一个本地助手迁移到此工作区。先点击「预览」查看将要变更的内容,然后点击「应用」复制数据。当前的记忆会先备份。', + 'migration.vendorLabel': '来源助手', + 'migration.vendor.openclaw': 'OpenClaw', + 'migration.vendor.hermes': 'Hermes Agent', + 'migration.sourceLabel': '来源工作区路径(可选)', + 'migration.sourcePlaceholder': '留空可自动检测(例如 ~/.openclaw/workspace)', + 'migration.sourcePlaceholderHermes': '留空以自动检测(例如 ~/.hermes)', + 'migration.sourceHint': + '留空时使用该助手的默认位置。如果你已将工作区移到其他位置,请填写明确路径。', + 'migration.previewAction': '预览', + 'migration.previewRunning': '正在预览…', + 'migration.applyAction': '应用导入', + 'migration.applyRunning': '正在导入…', + 'migration.applyDisclaimer': '只有对同一来源完成预览后才能应用。导入前会自动备份现有记忆。', + 'migration.reportTitlePreview': '预览 — 尚未导入任何数据', + 'migration.reportTitleApplied': '导入完成', + 'migration.report.source': '来源工作区', + 'migration.report.target': '目标工作区', + 'migration.report.fromSqlite': '来自 SQLite (brain.db)', + 'migration.report.fromMarkdown': '来自 Markdown', + 'migration.report.imported': '已导入', + 'migration.report.skippedUnchanged': '已跳过(未变更)', + 'migration.report.renamedConflicts': '冲突时已重命名', + 'migration.report.warnings': '警告', + 'migration.report.previewHint': '尚未导入任何数据。点击「应用导入」开始复制。', + 'migration.report.appliedHint': '导入的条目已加入你的记忆。如需再次比较,请重新运行预览。', + 'migration.confirmImport.singular': + '将 {count} 条数据导入当前工作区?\n\n来源:{source}\n目标:{target}\n\n导入前会先备份现有记忆。', + 'migration.confirmImport.plural': + '将 {count} 条数据导入当前工作区?\n\n来源:{source}\n目标:{target}\n\n导入前会先备份现有记忆。', + 'settings.notifications.doNotDisturb': '免打扰', + 'settings.notifications.doNotDisturbDesc': '在一定时间内暂停所有通知', + 'settings.notifications.channelControls': '各渠道控制', + 'settings.notifications.channelControlsDesc': '为每个渠道配置通知偏好', + 'settings.features.screenAwareness': '屏幕感知', + 'settings.features.screenAwarenessDesc': '让助手看到你的活动窗口', + 'settings.features.messaging': '消息', + 'settings.features.messagingDesc': '渠道与消息集成设置', + 'settings.features.tools': '工具', + 'settings.features.toolsDesc': '管理已连接的工具与集成', + 'settings.ai.localSetup': '本地 AI 设置', + 'settings.ai.localSetupDesc': '下载并配置本地 AI 模型', + 'settings.ai.llmProvider': 'LLM 提供商', + 'settings.ai.llmProviderDesc': '选择并配置你的 AI 提供商', + 'clearData.title': '清除应用数据', + 'clearData.warning': '这将退出你的账户并永久删除本地应用数据,包括:', + 'clearData.bulletSettings': '应用设置与对话', + 'clearData.bulletCache': '所有本地集成缓存数据', + 'clearData.bulletWorkspace': '工作空间数据', + 'clearData.bulletOther': '所有其他本地数据', + 'clearData.irreversible': '此操作不可撤销。', + 'clearData.clearing': '正在清除应用数据...', + 'clearData.failed': '清除数据失败,请重试。', + 'clearData.failedLogout': '退出登录失败,请重试。', + 'clearData.failedPersist': '清除持久化应用状态失败,请重试。', + 'welcome.title': '欢迎使用 OpenHuman', + 'welcome.subtitle': '你的私人 AI 超级智能。私密、简单、强大。', + 'welcome.connectPrompt': '输入 Core RPC 地址以开始使用', + 'welcome.selectRuntime': '选择运行时', + 'welcome.clearingAppData': '清除应用程序数据...', + 'welcome.clearAppDataAndRestart': '清除应用数据并重启', + 'welcome.clearAppDataWarning': + '此操作将清除此设备上本地存储的密钥和账户。您的云端账户不受影响——清除后可立即重新登录。', + 'welcome.resetErrorFallback': '无法清除应用数据。请退出并重新打开 OpenHuman,然后重试。', + 'welcome.signingIn': '正在为您签名...', + 'welcome.termsIntro': '继续即表示您同意', + 'welcome.termsOfUse': '条款', + 'welcome.termsJoiner': '和', + 'welcome.privacyPolicy': '隐私政策', + 'welcome.termsOutro': '.', + 'welcome.urlPlaceholder': 'http://localhost:8089', + 'welcome.invalidUrl': '请输入有效的 HTTP 或 HTTPS URL', + 'welcome.connecting': '连接中...', + 'welcome.connect': '连接', + 'home.greeting': '早上好', + 'home.greetingAfternoon': '下午好', + 'home.greetingEvening': '晚上好', + 'home.askAssistant': '向你的助手提问...', + 'home.statusOk': '你的设备已连接。保持应用运行以维持连接,通过下方按钮向你的智能体发送消息。', + 'home.statusBackendOnly': '正在重新连接后端…你的智能体很快将再次可用。', + 'home.statusCoreUnreachable': '本地核心 sidecar 无响应。OpenHuman 后台进程可能已崩溃或未能启动。', + 'home.statusInternetOffline': '你的设备当前处于离线状态。请检查网络或重启应用以重新连接。', + 'home.restartCore': '重启核心', + 'home.restartingCore': '正在重启核心…', + 'home.themeToggle.toLight': '切换到浅色模式', + 'home.themeToggle.toDark': '切换到深色模式', + 'home.usageExhaustedTitle': '您的使用额度已耗尽', + 'home.usageExhaustedBody': '您当前已用完包含的使用额度。开始订阅以解锁更多持续容量。', + 'home.usageExhaustedCta': '开始订阅', + 'home.routinesCard': '我的例程', + 'home.routinesActive': '{count} 个运行中', + 'routines.title': '你的例程', + 'routines.subtitle': '助手自动执行的事项', + 'routines.loading': '正在加载例程…', + 'routines.empty': '暂无例程', + 'routines.emptyHint': '你的助手可以按计划运行任务,例如晨间简报或每日摘要。', + 'routines.refresh': '刷新', + 'routines.nextRun': '下次运行', + 'routines.lastRunSuccess': '上次运行成功', + 'routines.lastRunFailed': '上次运行失败', + 'routines.notRunYet': '尚未运行', + 'routines.runNow': '立即运行', + 'routines.running': '运行中…', + 'routines.viewHistory': '查看历史', + 'routines.loadingHistory': '加载中…', + 'routines.noHistory': '暂无运行历史。', + 'routines.statusSuccess': '成功', + 'routines.statusError': '错误', + 'routines.showOutput': '显示输出', + 'routines.hideOutput': '隐藏输出', + 'routines.toggleEnabled': '启用或禁用此例程', + 'routines.typeAgent': '智能体', + 'routines.typeCommand': '命令', + 'nav.routines': 'Routines', + 'chat.newThread': '新对话', + 'chat.typeMessage': '输入消息...', + 'chat.send': '发送', + 'chat.thinking': '思考中...', + 'chat.noMessages': '暂无消息', + 'chat.startConversation': '开始对话', + 'chat.regenerate': '重新生成', + 'chat.copyResponse': '复制回复', + 'chat.citations': '引用', + 'chat.toolUsed': '已使用的工具', + 'scope.legacy': '旧版', + 'scope.user': '用户', + 'scope.project': '项目', + 'skills.title': '连接', + 'skills.search': '搜索连接...', + 'skills.noResults': '未找到连接', + 'skills.connect': '连接', + 'skills.disconnect': '断开', + 'skills.configure': '配置', + 'skills.connected': '已连接', + 'skills.available': '可用', + 'skills.addAccount': '添加账户', + 'skills.channels': '渠道', + 'skills.integrations': '集成', + 'skills.integrationsSubtitle': + '基于云端的 OAuth 连接——使用您的账户登录,Composio 代管令牌,让智能体能以您的名义读取数据并执行操作,无需管理 API 密钥。', 'skills.composio.noApiKeyTitle': '尚未配置 Composio API 密钥', 'skills.composio.noApiKeyDescription': '本地模式使用你自己的 Composio API 密钥。在此连接集成之前,请打开 设置 → 高级 → Composio 添加一个密钥。', 'skills.composio.noApiKeyCta': '在设置中打开', - 'channels.localManagedUnavailable': '本地用户无法使用托管频道。', + 'skills.tabs.composio': 'Composio', + 'skills.tabs.channels': '渠道', + 'skills.tabs.mcp': 'MCP 服务器', + 'skills.tabs.runners': 'Runners', + 'memory.title': '记忆', + 'memory.search': '搜索记忆...', + 'memory.noResults': '未找到记忆', + 'memory.empty': '暂无记忆。记忆将在你交互时自动创建。', + 'memory.tab.memory': '记忆', + 'memory.tab.tasks': '智能体任务', + 'memory.tab.tasksDescription': + '创建并跟踪任务——包括您自己的待办事项以及智能体在对话中创建的看板。', + 'memory.tab.subconscious': '潜意识', + 'memory.tab.dreams': '梦境', + 'memory.tab.calls': '调用记录', + 'memory.tab.diagram': 'Diagram', + 'memory.tab.centrality': 'Centrality', + 'memory.tab.settings': '设置', + 'memory.analyzeNow': '立即分析', + 'graphCentrality.title': '知识图谱中心性', + 'graphCentrality.intro': + '对你的记忆图谱运行 PageRank,可找出关键枢纽以及连接原本分离聚类的连接实体,这是单纯频次统计无法揭示的。', + 'graphCentrality.loading': '正在计算中心性…', + 'graphCentrality.errorPrefix': '无法加载图谱:', + 'graphCentrality.retry': '重试', + 'graphCentrality.empty': '暂无知识图谱。', + 'graphCentrality.emptyHint': '随着助手记录与你相关的事实,连接最多的实体会显示在这里。', + 'graphCentrality.namespaceLabel': '命名空间', + 'graphCentrality.namespaceAll': '所有命名空间', + 'graphCentrality.metricEntities': '实体', + 'graphCentrality.metricConnections': '连接', + 'graphCentrality.metricClusters': '聚类', + 'graphCentrality.clustersCaption': '{components} 个聚类 · 最大聚类包含 {largest}', + 'graphCentrality.approximateBadge': '近似', + 'graphCentrality.approximateTitle': '在完全收敛前达到迭代上限并停止', + 'graphCentrality.rankedHeading': '按影响力排名的热门实体', + 'graphCentrality.colRank': '#', + 'graphCentrality.colEntity': '实体', + 'graphCentrality.colInfluence': '影响力', + 'graphCentrality.colLinks': '链接', + 'graphCentrality.bridgeBadge': '连接点', + 'graphCentrality.bridgeTitle': '连接点,影响力高于其链接数量所暗示的程度', + 'graphCentrality.degreeTitle': '{in} 入 · {out} 出', + 'memoryTree.status.title': '记忆树', + 'memoryTree.status.autoSyncLabel': '自动同步', + 'memoryTree.status.autoSyncDescription': '暂停后将停止新的摄取。现有 wiki 仍可查询。', + 'memoryTree.status.statusTile': '状态', + 'memoryTree.status.lastSyncTile': '上次同步', + 'memoryTree.status.totalChunksTile': '分块总数', + 'memoryTree.status.wikiSizeTile': 'Wiki 大小', + 'memoryTree.status.statusRunning': '运行中', + 'memoryTree.status.statusPaused': '已暂停', + 'memoryTree.status.statusSyncing': '同步中', + 'memoryTree.status.statusError': '错误', + 'memoryTree.status.statusIdle': '空闲', + 'memoryTree.status.never': '从未', + 'memoryTree.status.fetchError': '无法获取记忆树状态', + 'memoryTree.status.retry': '重试', + 'memoryTree.status.toggleFailed': '无法切换自动同步', + 'memoryTree.status.justNow': '刚刚', + 'memoryTree.status.secondsAgo': '{count} 秒前', + 'memoryTree.status.minuteAgo': '1 分钟前', + 'memoryTree.status.minutesAgo': '{count} 分钟前', + 'memoryTree.status.hourAgo': '1 小时前', + 'memoryTree.status.hoursAgo': '{count} 小时前', + 'memoryTree.status.dayAgo': '1 天前', + 'memoryTree.status.daysAgo': '{count} 天前', + 'alerts.title': '通知', + 'alerts.empty': '暂无通知', + 'alerts.markAllRead': '全部标记为已读', + 'alerts.unread': '未读', + 'rewards.title': '奖励', + 'rewards.referrals': '邀请', + 'rewards.coupons': '优惠券', 'rewards.localUnavailable': '本地登录不会获得奖励、优惠券或推荐积分。若要累计奖励,请先登出,然后使用 OpenHuman 账号登录。', 'rewards.localUnavailableCta': '打开账户设置', + 'rewards.credits': '配额', + 'rewards.referralCode': '你的邀请码', + 'rewards.copyCode': '复制邀请码', + 'rewards.share': '分享', + 'onboarding.welcome': '欢迎使用 OpenHuman', + 'onboarding.welcomeDesc': '只需几步即可完成设置。', + 'onboarding.context': '上下文收集', + 'onboarding.contextDesc': '连接你日常使用的工具与服务。', + 'onboarding.localAI': '本地 AI', + 'onboarding.localAIDesc': '设置一个运行在你本机的 AI 模型。', + 'onboarding.chatProvider': '对话方式', + 'onboarding.chatProviderDesc': '选择你希望如何与助手交互。', + 'onboarding.referral': '邀请码', + 'onboarding.referralDesc': '如果你有邀请码,可以在此使用。', + 'onboarding.finish': '完成设置', + 'onboarding.finishDesc': '一切就绪!开始使用 OpenHuman。', + 'onboarding.skip': '跳过', + 'onboarding.getStarted': '开始使用', + 'onboarding.runtimeChoice.title': '你希望如何运行 OpenHuman?', + 'onboarding.runtimeChoice.subtitle': '选择最适合你的设置。之后可在设置中更改。', + 'onboarding.runtimeChoice.cloud.title': '简单模式', + 'onboarding.runtimeChoice.cloud.tagline': '让 OpenHuman 为你管理一切。', + 'onboarding.runtimeChoice.cloud.f1': '内置安全保护', + 'onboarding.runtimeChoice.cloud.f2': '令牌压缩,让用量更耐用', + 'onboarding.runtimeChoice.cloud.f3': '一个订阅,包含所有模型', + 'onboarding.runtimeChoice.cloud.f4': '无需管理 API 密钥', + 'onboarding.runtimeChoice.cloud.f5': '设置简单', + 'onboarding.runtimeChoice.custom.title': '自定义运行', + 'onboarding.runtimeChoice.custom.tagline': '使用你自己的密钥。完全掌控使用的服务。', + 'onboarding.runtimeChoice.custom.f1': '几乎所有功能都需要 API 密钥', + 'onboarding.runtimeChoice.custom.f2': '可复用你已经付费的服务', + 'onboarding.runtimeChoice.custom.f3': '如果全部本地运行,也可以免费', + 'onboarding.runtimeChoice.custom.f4': '更多设置,更多可调选项', + 'onboarding.runtimeChoice.custom.f5': '最适合高级用户和开发者', + 'onboarding.runtimeChoice.cloud.creditHighlight': '赠送 $1 额度用于试用', + 'onboarding.runtimeChoice.continueCloud': '继续使用简单模式', + 'onboarding.runtimeChoice.continueCustom': '继续使用自定义模式', + 'onboarding.runtimeChoice.recommended': '推荐', + 'onboarding.apiKeys.title': '添加你的 API 密钥', + 'onboarding.apiKeys.subtitle': + '你可以现在粘贴,也可以跳过并稍后在设置 › AI 中添加。密钥会加密存储在此设备上。', + 'onboarding.apiKeys.openaiLabel': 'OpenAI API 密钥', + 'onboarding.apiKeys.openaiPlaceholder': 'sk-...', + 'onboarding.apiKeys.openaiOauthHint': + '使用 ChatGPT Plus/Pro(订阅)或 OpenAI API 密钥 — 并非两者都需要。', + 'onboarding.apiKeys.openaiOauthOpening': '正在打开登录...', + 'onboarding.apiKeys.finishSignIn': '完成 ChatGPT 登录', + 'onboarding.apiKeys.orApiKey': '或 API 键', + 'onboarding.apiKeys.anthropicLabel': 'Anthropic API 密钥', + 'onboarding.apiKeys.anthropicPlaceholder': 'sk-ant-...', + 'onboarding.apiKeys.saveError': '无法保存该密钥。请仔细检查后重试。', + 'onboarding.apiKeys.skipForNow': '暂时跳过', + 'onboarding.apiKeys.continue': '保存并继续', + 'onboarding.apiKeys.saving': '保存中…', + 'onboarding.custom.stepperInference': '推理', + 'onboarding.custom.stepperVoice': '语音', + 'onboarding.custom.stepperOAuth': 'OAuth', + 'onboarding.custom.stepperSearch': '搜索', + 'onboarding.custom.stepperEmbeddings': 'Embeddings', + 'onboarding.custom.stepperMemory': '记忆', + 'onboarding.custom.stepCounter': '第 {n} 步,共 {total} 步', + 'onboarding.custom.defaultTitle': '默认', + 'onboarding.custom.defaultSubtitle': '让 OpenHuman 为你管理。', + 'onboarding.custom.configureTitle': '配置', + 'onboarding.custom.configureSubtitle': '我来选择使用什么。', + 'onboarding.custom.progressAriaLabel': '入门进度', + 'onboarding.custom.continue': '继续', + 'onboarding.custom.back': '返回', + 'onboarding.custom.finish': '完成设置', + 'onboarding.custom.configureLater': + '你可以在入门流程结束后继续配置。完成后,我们会带你前往对应的设置页面。', + 'onboarding.custom.openSettings': '在设置中打开', + 'onboarding.custom.inference.title': '推理(文本)', + 'onboarding.custom.inference.subtitle': '哪个语言模型应该回答你的问题并运行你的智能体?', + 'onboarding.custom.inference.defaultDesc': + 'OpenHuman 会为每种工作负载路由到合适的默认模型。无需密钥,无需设置。', + 'onboarding.custom.inference.configureDesc': + '使用你自己的 OpenAI 或 Anthropic 密钥。我们会将它用于所有文本类工作负载。', + 'onboarding.custom.voice.title': '语音', + 'onboarding.custom.voice.subtitle': '用于语音模式的语音转文本和文本转语音。', + 'onboarding.custom.voice.defaultDesc': 'OpenHuman 内置托管的 STT/TTS,开箱即用。无需额外配置。', + 'onboarding.custom.voice.configureDesc': + '使用你自己的 ElevenLabs、OpenAI Whisper 等服务。在设置 › 语音中配置。', + 'onboarding.custom.oauth.title': '连接(OAuth)', + 'onboarding.custom.oauth.subtitle': 'Gmail、Slack、Notion 以及其他需要 OAuth 的连接服务。', + 'onboarding.custom.oauth.defaultDesc': + 'OpenHuman 使用托管的 Composio 工作区。之后每个服务都可一键连接。', + 'onboarding.custom.oauth.configureDesc': + '使用你自己的 Composio 账户或 API 密钥。在设置 › 连接中配置。', + 'onboarding.custom.search.title': '网页搜索', + 'onboarding.custom.search.subtitle': 'OpenHuman 如何代表你搜索网页。', + 'onboarding.custom.search.defaultDesc': 'OpenHuman 使用托管搜索后端。无需密钥。', + 'onboarding.custom.search.configureDesc': + '使用你自己的搜索提供商密钥(Tavily、Brave 等)。在设置 › 工具中配置。', + 'onboarding.custom.embeddings.title': 'Embeddings', + 'onboarding.custom.embeddings.subtitle': 'OpenHuman 生成向量嵌入以实现语义记忆搜索的方式。', + 'onboarding.custom.embeddings.defaultDesc': 'OpenHuman 使用托管嵌入服务,无需 API 密钥。', + 'onboarding.custom.embeddings.configureDesc': + '使用您自己的嵌入服务提供商(OpenAI、Voyage、Ollama 等)。', + 'onboarding.custom.memory.title': '记忆', + 'onboarding.custom.memory.subtitle': 'OpenHuman 如何记住你的上下文、偏好和历史对话。', + 'onboarding.custom.memory.defaultDesc': 'OpenHuman 会自动管理记忆存储和检索。无需设置。', + 'onboarding.custom.memory.configureDesc': '你可以自行查看、导出或清除记忆。在设置 › 记忆中配置。', + 'accounts.addAccount': '添加账户', + 'accounts.manageAccounts': '管理账户', + 'accounts.noAccounts': '未连接任何账户', + 'accounts.connectAccount': '连接一个账户以开始使用', + 'accounts.agent': '助手', + 'accounts.respondQueue': '回复队列', + 'accounts.disconnect': '断开连接', + 'accounts.disconnectConfirm': '确定要断开此账户的连接吗?', + 'accounts.disconnectClearMemory': '同时删除来自此来源的记忆', + 'accounts.disconnectClearMemoryHint': '永久删除与此连接关联的本地记忆片段。', + 'accounts.searchAccounts': '搜索账户...', + 'channels.title': '渠道', + 'channels.configure': '配置渠道', + 'channels.setup': '设置渠道', + 'channels.noChannels': '未配置任何渠道', + 'channels.localManagedUnavailable': '本地用户无法使用托管频道。', + 'channels.addChannel': '添加渠道', + 'channels.status.connected': '已连接', + 'channels.status.disconnected': '已断开', + 'channels.status.error': '错误', + 'channels.status.configuring': '配置中', + 'channels.defaultMessaging': '默认消息渠道', + 'webhooks.title': 'Webhook', + 'webhooks.create': '创建 Webhook', + 'webhooks.noWebhooks': '未配置任何 Webhook', + 'webhooks.url': 'URL', + 'webhooks.secret': '密钥', + 'webhooks.events': '事件', + 'webhooks.archiveDirectory': '归档目录', + 'webhooks.todayFile': '今日文件', + 'invites.title': '邀请', + 'invites.create': '创建邀请', + 'invites.noInvites': '暂无待处理的邀请', + 'invites.code': '邀请码', + 'invites.copyLink': '复制链接', + 'invites.generate': '生成邀请', + 'invites.generating': '生成...', + 'invites.refreshing': '正在刷新邀请...', + 'invites.loading': '正在加载邀请...', + 'invites.copyCodeAria': '复制邀请码', + 'invites.revokeAria': '撤销邀请', + 'invites.usedUp': '用完', + 'invites.uses': '用途: {current}{max}', + 'invites.expiresOn': '过期 {date}', + 'invites.empty': '还没有邀请', + 'invites.emptyHint': '生成邀请码与他人分享', + 'invites.revokeTitle': '撤销邀请码', + 'invites.revokePromptPrefix': '您确定要撤销邀请码吗', + 'invites.revokeWarning': '此邀请码将失效,无法再用于加入团队。', + 'invites.revoking': '撤销...', + 'invites.revokeAction': '撤销邀请', + 'invites.failedGenerate': '生成邀请失败', + 'invites.failedRevoke': '撤销邀请失败', + 'team.refreshingMembers': '正在刷新会员...', + 'team.loadingMembers': '正在加载会员...', + 'team.memberCount': '{count} 成员', + 'team.memberCountPlural': '{count} 成员', + 'team.you': '(你)', + 'team.removeAria': '删除 {name}', + 'team.noMembers': '没有找到会员', + 'team.removeTitle': '删除团队成员', + 'team.removePromptPrefix': '您确定要删除吗', + 'team.removePromptSuffix': '来自团队?', + 'team.removeWarning': '他们将失去对团队及所有团队资源的访问权限。', + 'team.removing': '正在删除...', + 'team.removeAction': '删除会员', + 'team.changeRoleTitle': '更改成员角色', + 'team.changeRolePrompt': '将 {name} 的角色从 {oldRole} 更改为 {newRole}?', + 'team.changeRoleAdminGrant': '此操作将授予其完整管理员权限,包括管理团队成员的能力。', + 'team.changeRoleAdminRemove': '此操作将撤销其管理员权限,其将无法再管理团队。', + 'team.changing': '改变...', + 'team.changeRoleAction': '改变角色', + 'team.failedChangeRole': '角色变更失败', + 'team.failedRemoveMember': '删除会员失败', + 'devOptions.title': '开发者选项', + 'devOptions.diagnostics': '诊断', + 'devOptions.diagnosticsDesc': '系统健康、日志与性能指标', + 'devOptions.toolPolicyDiagnosticsDesc': '工具清单、策略态势、MCP 允许列表和近期拦截', + 'devOptions.toolPolicyDiagnostics.loading': '加载中…', + 'devOptions.toolPolicyDiagnostics.unavailable': '诊断不可用', + 'devOptions.toolPolicyDiagnostics.posture.title': '策略态势', + 'devOptions.toolPolicyDiagnostics.posture.autonomy': '自主性:', + 'devOptions.toolPolicyDiagnostics.posture.workspaceOnly': '仅工作区:', + 'devOptions.toolPolicyDiagnostics.posture.maxActionsPerHour': '最大操作数/小时:', + 'devOptions.toolPolicyDiagnostics.posture.approvalMediumRisk': '审批(中等风险):', + 'devOptions.toolPolicyDiagnostics.posture.blockHighRisk': '阻止高风险:', + 'devOptions.toolPolicyDiagnostics.inventory.title': '清单', + 'devOptions.toolPolicyDiagnostics.inventory.totalTools': '工具总数', + 'devOptions.toolPolicyDiagnostics.inventory.enabledTools': '已启用工具', + 'devOptions.toolPolicyDiagnostics.inventory.mcpStdioTools': 'MCP stdio 工具', + 'devOptions.toolPolicyDiagnostics.inventory.jsonRpcTools': 'JSON-RPC 工具', + 'devOptions.toolPolicyDiagnostics.mcpAllowlists.title': 'MCP 允许列表', + 'devOptions.toolPolicyDiagnostics.mcpAllowlists.summary': + '已启用:{enabled} · 服务器:{enabledCount}/{totalCount}', + 'devOptions.toolPolicyDiagnostics.mcpAllowlists.unnamed': '<未命名>', + 'devOptions.toolPolicyDiagnostics.mcpAllowlists.allowDeny': '允许={allowCount} 拒绝={denyCount}', + 'devOptions.toolPolicyDiagnostics.mcpWriteAudit.title': 'MCP 写入审计', + 'devOptions.toolPolicyDiagnostics.mcpWriteAudit.summary': + '已启用:{enabled} · 最近(24 小时):{recentRows}', + 'devOptions.toolPolicyDiagnostics.recentBlocked.title': '最近被拦截的调用', + 'devOptions.toolPolicyDiagnostics.recentBlocked.empty': '没有记录到被拦截的调用。', + 'devOptions.toolPolicyDiagnostics.redactedSurfaces.title': '已脱敏表面', + 'devOptions.toolPolicyDiagnostics.redactedSurfaces.summary': + '可写:{writeCount} · 策略表面:{policyCount}', + 'devOptions.debugPanels': '调试面板', + 'devOptions.debugPanelsDesc': '功能开关、状态检查与调试工具', + 'devOptions.webhooks': 'Webhook', + 'devOptions.webhooksDesc': '配置并测试 Webhook 集成', + 'devOptions.memoryInspection': '记忆检查', + 'devOptions.memoryInspectionDesc': '浏览、查询与管理记忆条目', + 'voice.pushToTalk': '按住说话', + 'voice.recording': '录音中...', + 'voice.processing': '处理中...', + 'voice.languageHint': '语言', + 'misc.rehydrating': '正在加载你的数据...', + 'misc.checkingServices': '正在检查服务...', + 'misc.serviceUnavailable': '服务不可用', + 'misc.somethingWentWrong': '出现了一些问题', + 'misc.tryAgainLater': '请稍后重试。', + 'misc.restartApp': '重启应用', + 'misc.updateAvailable': '发现新版本', + 'misc.updateNow': '立即更新', + 'misc.updateLater': '稍后再说', + 'misc.downloading': '下载中...', + 'misc.installing': '安装中...', + 'misc.beta': '测试版', + 'misc.betaFeedback': '发送反馈', + 'mnemonic.title': '恢复短语', + 'mnemonic.warning': '按顺序记下这些单词,并将其保存在安全的地方。', + 'mnemonic.copyWarning': '永远不要分享你的恢复短语。任何拥有这些单词的人都可以访问你的账户。', + 'mnemonic.copied': '恢复短语已复制到剪贴板', + 'mnemonic.reveal': '显示短语', + 'mnemonic.revealPhrase': '显示恢复助记词', + 'mnemonic.hidden': '恢复短语已隐藏', + 'privacy.title': '隐私与安全', + 'privacy.description': '发送到外部服务的数据透明度报告。', + 'privacy.empty': '未检测到外部数据传输。', + 'privacy.whatLeavesComputer': '离开你电脑的数据', + 'privacy.loading': '正在加载隐私详情...', + 'privacy.loadError': '无法加载实时隐私列表。下方的分析控件仍然可用。', + 'privacy.noCapabilities': '当前没有功能披露数据移动。', + 'privacy.sentTo': '发送至', + 'privacy.leavesDevice': '离开设备', + 'privacy.staysLocal': '留在本地', + 'privacy.anonymizedAnalytics': '匿名分析', + 'privacy.shareAnonymizedData': '分享匿名使用数据', + 'privacy.shareAnonymizedDataDesc': + '通过分享匿名崩溃报告和使用分析来帮助改进 OpenHuman。所有数据完全匿名——不会收集任何个人数据、消息、钱包密钥或会话信息。', + 'privacy.meetingFollowUps': '会议跟进', + 'privacy.autoHandoffMeet': '自动将 Google Meet 转录交给编排器', + 'privacy.autoHandoffMeetDesc': + '当 Google Meet 通话结束时,OpenHuman 的编排器可以阅读转录内容,并可能执行起草消息、安排跟进、或将摘要发布到已连接的 Slack 工作区等操作。默认关闭。', + 'privacy.analyticsDisclaimer': + '所有分析和错误报告完全匿名。启用后,我们仅收集崩溃信息、设备类型和错误的文件位置。我们永远不会访问你的消息、会话数据、钱包密钥、API 密钥或任何个人可识别信息。你可以随时更改此设置。', + 'settings.about.version': '版本', + 'settings.about.updateAvailable': '可用', + 'settings.about.softwareUpdates': '软件更新', + 'settings.about.lastChecked': '上次检查', + 'settings.about.checking': '检查中...', + 'settings.about.checkForUpdates': '检查更新', + 'settings.about.releases': '发布版本', + 'settings.about.releasesDesc': '在 GitHub 上浏览发布说明和早期版本。', + 'settings.about.openReleases': '打开 GitHub 发布', + 'settings.about.connection': '连接方式', + 'settings.about.connectionMode': '模式', + 'settings.about.connectionModeLocal': '本地', + 'settings.about.connectionModeCloud': '云', + 'settings.about.connectionModeUnset': '未选择', + 'settings.about.serverUrl': '服务器 URL', + 'settings.about.serverUrlUnavailable': '不可用', + 'settings.about.connectionHelperLocal': + '应用启动时由 Tauri shell 在进程内启动。端口会在启动时选择,因此此 URL 每次启动都可能变化。', + 'settings.about.connectionHelperCloud': '已连接到远程核心。可在 BootCheck 或云模式选择器中更改。', + 'settings.heartbeat.title': '心跳和循环', + 'settings.heartbeat.desc': '控制后台调度节奏并检查循环图。', + 'settings.ledgerUsage.title': '使用账本', + 'settings.ledgerUsage.desc': '最近的信贷支出、预算数学和背景 API 阅读预算。', + 'settings.costDashboard.title': '成本看板', + 'settings.costDashboard.desc': '查看集群过去 7 天的支出和 token 消耗,包括预算节奏和按模型拆分。', + 'settings.costDashboard.sevenDayCost': '7 天每日成本', + 'settings.costDashboard.sevenDayTokens': '7 天 token 用量', + 'settings.costDashboard.totalSpend': '7 天总计', + 'settings.costDashboard.monthlyPace': '月度节奏', + 'settings.costDashboard.budgetLimit': '预算上限', + 'settings.costDashboard.utilization': '利用率', + 'settings.costDashboard.modelBreakdown': '按模型拆分', + 'settings.costDashboard.model': '模型', + 'settings.costDashboard.provider': '提供商', + 'settings.costDashboard.cost': '成本', + 'settings.costDashboard.tokens': 'Token', + 'settings.costDashboard.requests': '请求', + 'settings.costDashboard.percentOfTotal': '占总量百分比', + 'settings.costDashboard.inputTokens': '输入', + 'settings.costDashboard.outputTokens': '输出', + 'settings.costDashboard.budgetNormal': '进度正常', + 'settings.costDashboard.budgetWarning': '警告', + 'settings.costDashboard.budgetExceeded': '超出预算', + 'settings.costDashboard.noBudget': '未设置上限', + 'settings.costDashboard.noData': '过去 7 天尚无成本记录。', + 'settings.costDashboard.noModels': '过去 7 天没有模型活动。', + 'settings.costDashboard.loading': '正在加载成本看板…', + 'settings.costDashboard.disabledHint': + '成本看板已在配置中禁用。请在 config.toml 中设置 [cost.dashboard] enabled = true 以重新启用。', + 'settings.costDashboard.subtitle': + '集群实时支出和 token 消耗。条形图每隔几秒自动刷新,无需重新加载页面。', + 'settings.costDashboard.summaryAriaLabel': '成本汇总指标', + 'settings.costDashboard.lastSevenDays': '过去 7 天', + 'settings.costDashboard.utilizationOf': '/', + 'settings.costDashboard.thisMonth': '本月', + 'settings.costDashboard.monthlyPaceHint': '按当前每日运行速率预计的月支出(平均值 × 30)。', + 'settings.costDashboard.budgetLimitHint': + '从 config.toml 的 cost.monthly_limit_usd 读取月度预算。', + 'settings.costDashboard.dailyTarget': '每日目标', + 'settings.costDashboard.today': '今天', + 'settings.costDashboard.todayBadge': '今天', + 'settings.costDashboard.unknownProvider': '—', + 'settings.costDashboard.justNow': '刚刚', + 'settings.costDashboard.secondsAgo': '{value} 秒前', + 'settings.costDashboard.minutesAgo': '{value} 分钟前', + 'settings.costDashboard.hoursAgo': '{value} 小时前', + 'settings.costDashboard.daysAgo': '{value} 天前', + 'settings.costDashboard.updated': '已更新', + 'settings.costDashboard.refresh': '刷新', + 'settings.costDashboard.utcNote': '按 UTC 日期分组', + 'settings.costDashboard.stackedNote': '输入 + 输出堆叠', + 'settings.costDashboard.modelBreakdownHint': '汇总过去 7 天。', + 'settings.costDashboard.noDataHint': + '发送一条智能体消息后,下一次提供商调用的 token 用量会在约 10 秒内填充图表。', + 'settings.search.title': '搜索引擎', + 'settings.search.menuDesc': '默认使用 OpenHuman 托管搜索,或用 API 密钥接入你自己的提供商。', + 'settings.search.description': + '选择智能体使用的搜索引擎。托管模式使用 OpenHuman 后端(无需设置)。Parallel、Brave 和 Querit 会用你的 API 密钥从本机直接调用。', + 'settings.search.engineAria': '搜索引擎', + 'settings.search.engineDisabledLabel': 'Disabled', + 'settings.search.engineDisabledDesc': '从智能体上下文和可用工具列表中移除搜索工具。', + 'settings.search.engineManagedLabel': 'OpenHuman 托管', + 'settings.search.engineManagedDesc': '默认选项。通过 OpenHuman 后端路由,无需 API 密钥。', 'settings.search.localManagedUnavailable': '本地用户无法使用 OpenHuman 托管搜索。请添加你自己的 Parallel、Brave 或 Querit API 密钥以启用网页搜索。', + 'settings.search.engineParallelLabel': 'Parallel', + 'settings.search.engineParallelDesc': + '直接调用 Parallel API:搜索、提取、聊天、研究、增强和数据集工具。', + 'settings.search.engineBraveLabel': 'Brave 搜索', + 'settings.search.engineBraveDesc': '直接Brave 搜索API:网络、新闻、图像和视频工具。', + 'settings.search.engineQueritLabel': 'Querit', + 'settings.search.engineQueritDesc': + '直接调用 Querit API:支持站点、时间范围、国家/地区和语言筛选的网页搜索。', + 'settings.search.statusConfigured': '已配置', + 'settings.search.statusNeedsKey': '需要 API 密钥', + 'settings.search.fallbackToManaged': '未配置密钥,保存密钥前搜索会回退到托管模式。', + 'settings.search.getApiKey': '获取 API 密钥', + 'settings.search.save': '保存', + 'settings.search.clear': '清除', + 'settings.search.show': '显示', + 'settings.search.hide': '隐藏', + 'settings.search.statusSaving': '正在保存...', + 'settings.search.statusSaved': '已保存。', + 'settings.search.statusError': '失败', + 'settings.search.parallelKeyLabel': 'Parallel API 键', + 'settings.search.braveKeyLabel': 'Brave 搜索 API 键', + 'settings.search.queritKeyLabel': 'Querit API 键', + 'settings.search.placeholderStored': '••••••••(已存储)', + 'settings.search.placeholderParallel': 'PK_...', + 'settings.search.placeholderBrave': 'BSA...', + 'settings.search.placeholderQuerit': 'Querit API 密钥', + 'settings.search.allowedSitesLabel': '允许的网站', + 'settings.search.allowedSitesHint': + '助手在研究时可以打开并阅读的网站(每行一个主机,例如 reuters.com)。主机也包含其子域名。留空将阻止所有网页访问。', + 'settings.search.allowedSitesAllOn': '助手可以打开任何公开网站。本地和私有地址仍会被阻止。', + 'settings.search.allowedSitesPlaceholder': 'reuters.com\napnews.com\ngithub.com', + 'settings.search.allowedSitesSave': '保存网站', + 'settings.search.accessModeAria': '网页访问模式', + 'settings.search.accessAllowAll': '全部允许', + 'settings.search.accessCustom': '自定义', + 'settings.search.accessBlockAll': '全部阻止', + 'settings.search.accessBlockAllHint': '所有网页访问都已阻止,助手无法打开或阅读任何网站。', + 'settings.embeddings.title': '向量嵌入', + 'settings.embeddings.description': + '选择将记忆转换为语义搜索向量的嵌入提供商。更改提供商、模型或维度会使已存储的向量无效,需要完全重置记忆。', + 'settings.embeddings.providerAria': '嵌入提供商', + 'settings.embeddings.statusConfigured': '已配置', + 'settings.embeddings.statusNeedsKey': '需要 API 密钥', + 'settings.embeddings.apiKeyLabel': '{provider} API 密钥', + 'settings.embeddings.placeholderStored': '••••••••(已存储)', + 'settings.embeddings.placeholderKey': '粘贴您的 API 密钥…', + 'settings.embeddings.keyStoredEncrypted': '您的 API 密钥已加密存储在此设备上。', + 'settings.embeddings.show': '显示', + 'settings.embeddings.hide': '隐藏', + 'settings.embeddings.save': '保存', + 'settings.embeddings.clear': '清除', + 'settings.embeddings.model': '模型', + 'settings.embeddings.dimensions': '维度', + 'settings.embeddings.customEndpoint': '自定义端点', + 'settings.embeddings.customModelPlaceholder': '模型名称', + 'settings.embeddings.customDimsPlaceholder': '维度', + 'settings.embeddings.applyCustom': '应用', + 'settings.embeddings.testConnection': '测试连接', + 'settings.embeddings.testing': '测试中…', + 'settings.embeddings.testSuccess': '已连接 — {dims} 维度', + 'settings.embeddings.testFailed': '失败:{error}', + 'settings.embeddings.saving': '保存中…', + 'settings.embeddings.saved': '已保存。', + 'settings.embeddings.errorPrefix': '失败', + 'settings.embeddings.wipeTitle': '重置记忆向量?', + 'settings.embeddings.wipeBody': + '更改嵌入提供商、模型或维度将删除所有已存储的记忆向量。记忆必须重新构建后检索才能再次工作。此操作无法撤消。', + 'settings.embeddings.cancel': '取消', + 'settings.embeddings.confirmWipe': '清除并应用', + 'settings.embeddings.setupTitle': '设置 {provider}', + 'settings.embeddings.saveAndSwitch': '保存并切换', + 'settings.embeddings.optional': '可选', + 'settings.embeddings.vectorSearchDisabled': + '向量搜索已禁用。记忆召回将只使用关键词匹配和时间新近度,不进行语义排序。', + 'settings.embeddings.clearKey': '清除 API 密钥', + 'pages.settings.ai.embeddings': '向量嵌入', + 'pages.settings.ai.embeddingsDesc': '用于记忆检索的向量编码模型', + 'mcp.alphaBadge': '阿尔法', + 'mcp.alphaBannerText': + 'MCP 服务器支持仍处于早期 alpha 阶段。Smithery 注册表、安装流程和工具接线在不同版本间可能异常或发生变化。', + 'mcp.toolList.noTools': '没有可用的工具。', + 'mcp.setup.secretDialog.title': 'MCP 设置 — 输入密码', + 'mcp.setup.secretDialog.bodyPrefix': 'MCP 设置代理需要', + 'mcp.setup.secretDialog.bodySuffix': '。你的值会直接发送到核心进程,绝不会进入 AI 对话。', + 'mcp.setup.secretDialog.inputLabel': '值', + 'mcp.setup.secretDialog.inputPlaceholder': '粘贴在这里', + 'mcp.setup.secretDialog.show': '显示', + 'mcp.setup.secretDialog.hide': '隐藏', + 'mcp.setup.secretDialog.submit': '提交', + 'mcp.setup.secretDialog.cancel': '取消', + 'mcp.setup.secretDialog.submitting': '正在提交...', + 'mcp.setup.secretDialog.errorPrefix': '提交失败:', + 'mcp.setup.secretDialog.privacyNote': + '会加密存储在本地 MCP 密钥表中。绝不记录到日志,也不会发送给模型。', + 'devices.betaBadge': '贝塔', + 'devices.betaText': '此功能目前处于测试阶段。将 iOS 手机与此 OpenHuman 配对,以用作远程客户端。', 'devices.comingSoonDescription': '设备配对即将推出。此页面将用于配对 iPhone 并管理已连接设备。', + 'devices.title': '设备', + 'devices.pairIphone': '配对 iPhone', + 'devices.noPaired': '没有配对的设备', + 'devices.emptyState': '扫描 iPhone 上的 QR code 将其连接到此 OpenHuman 会话。', + 'devices.devicePairedTitle': '设备已配对', + 'devices.devicePairedMessage': 'iPhone 连接成功。', + 'devices.deviceRevokedTitle': '设备已撤销', + 'devices.deviceRevokedMessage': '{label} 已删除。', + 'devices.revokeFailedTitle': '撤销失败', + 'devices.online': '在线', + 'devices.offline': '离线', + 'devices.lastSeenNever': '从来没有', + 'devices.lastSeenNow': '刚才', + 'devices.lastSeenMinutes': '{count}分钟前', + 'devices.lastSeenHours': '{count} 小时前', + 'devices.lastSeenDays': '{count} 天前', + 'devices.revoke': '撤销', + 'devices.revokeAria': '撤销 {label}', + 'devices.confirmRevokeTitle': '撤销设备?', + 'devices.confirmRevokeBody': '{label} 将无法再连接。此操作无法撤消。', + 'devices.loadFailed': '无法加载设备:{message}', + 'devices.pairModal.title': '配对 iPhone', + 'devices.pairModal.loading': '正在生成配对代码...', + 'devices.pairModal.instructions': '打开 iPhone 上的 OpenHuman 应用程序并扫描此代码。', + 'devices.pairModal.expiresIn': '代码将在 ~{count} 分钟后过期', + 'devices.pairModal.expiresInPlural': '代码将在 ~{count} 分钟后过期', + 'devices.pairModal.showDetails': '显示详情', + 'devices.pairModal.hideDetails': '隐藏详细信息', + 'devices.pairModal.channelId': '通道号', + 'devices.pairModal.pairingUrl': '配对URL', + 'devices.pairModal.expiredTitle': 'QR code 已过期', + 'devices.pairModal.expiredBody': '生成新代码以继续配对。', + 'devices.pairModal.generateNewCode': '生成新代码', + 'devices.pairModal.successTitle': '与 iPhone 配对', + 'devices.pairModal.autoClose': '自动关闭...', + 'devices.pairModal.errorPrefix': '无法创建配对:{message}', + 'devices.pairModal.errorTitle': '出了点问题', + 'devices.pairModal.copyUrl': '复制', + 'mcp.catalog.searchAria': '搜索锻造目录', + 'mcp.catalog.searchPlaceholder': '搜索锻造目录...', + 'mcp.catalog.loadFailed': '加载目录失败', + 'mcp.catalog.noResults': '未找到服务器。', + 'mcp.catalog.noResultsFor': '找不到“{query}”的服务器。', + 'mcp.catalog.loadMore': '加载更多', + 'mcp.configAssistant.title': '配置助手', + 'mcp.configAssistant.empty': '询问配置、所需的环境变量或设置步骤。', + 'mcp.configAssistant.suggestedValues': '建议值:', + 'mcp.configAssistant.valueHidden': '(隐藏值)', + 'mcp.configAssistant.applySuggested': '应用建议值', + 'mcp.configAssistant.reinstallHint': '使用这些值重新安装以应用它们。', + 'mcp.configAssistant.thinking': '想着……', + 'mcp.configAssistant.inputPlaceholder': '提出问题(Enter 发送,Shift+Enter 换行)', + 'mcp.configAssistant.send': '发送', + 'mcp.configAssistant.failedResponse': '未能得到回复', + 'mcp.toolList.availableSingular': '{count} 工具可用', + 'mcp.toolList.availablePlural': '{count} 可用工具', + 'mcp.toolList.tryTool': '试用', + 'mcp.toolList.tryToolAria': '打开 {name} 的执行试验场', + 'mcp.playground.title': '运行 {name}', + 'mcp.playground.close': '关闭试验场', + 'mcp.playground.inputSchema': '输入 schema', + 'mcp.playground.argsLabel': '参数(JSON)', + 'mcp.playground.argsHelp': '输入符合输入 schema 的 JSON。空输入会按 {} 处理。', + 'mcp.playground.runShortcut': '⌘/Ctrl + Enter 运行', + 'mcp.playground.format': '格式化', + 'mcp.playground.invalidJson': '无效 JSON', + 'mcp.playground.run': '运行工具', + 'mcp.playground.running': '运行中…', + 'mcp.playground.result': '结果', + 'mcp.playground.resultError': '工具返回错误', + 'mcp.playground.copyResult': '复制结果', + 'mcp.playground.copied': '已复制', + 'mcp.playground.history': '历史', + 'mcp.playground.historyEmpty': '此会话中尚无调用。', + 'mcp.playground.historyLoad': '加载', + 'mcp.playground.unexpectedError': '调用工具时出现意外错误。', + 'mcp.catalog.deployed': '已部署', + 'mcp.catalog.installCount': '{count} 安装', + 'app.update.dismissNotification': '关闭更新通知', + 'bootCheck.rpcAuthSuffix': '在每个 RPC 上。', + 'app.localAiDownload.expandAria': '展开下载进度', + 'app.localAiDownload.collapseAria': '折叠下载进度', + 'app.localAiDownload.dismissAria': '关闭下载通知', + 'mobile.nav.ariaLabel': '手机导航', + 'progress.stepsAria': '进度步骤', + 'progress.stepAria': '{total} 的步骤 {current}', + 'workspace.vaultsTitle': '知识库', + 'workspace.vaultsDesc': '指向本地文件夹;文件被分块并镜像到内存中。', + 'calls.title': '通话', + 'calls.comingSoonBody': '人工智能辅助通话即将推出。敬请关注。', + 'art.rotatingTetrahedronAria': '旋转倒四面体航天器', + 'mcp.installed.title': '已安装', + 'mcp.installed.browseCatalog': '浏览目录', + 'mcp.installed.empty': '尚未安装 MCP 服务器。', + 'mcp.installed.toolSingular': '{count} 工具', + 'mcp.installed.toolPlural': '{count} 工具', + 'mcp.health.title': '健康状态', + 'mcp.health.summaryAria': 'MCP 连接健康状态摘要', + 'mcp.health.connectedCount': '{count} 个已连接', + 'mcp.health.connectingCount': '{count} 个连接中', + 'mcp.health.errorCount': '{count} 个错误', + 'mcp.health.disconnectedCount': '{count} 个空闲', + 'mcp.health.retryAll': '全部重试({count})', + 'mcp.health.retryAllAria': '重试全部 {count} 个出错的 MCP 服务器', + 'mcp.health.disconnectAll': '全部断开({count})', + 'mcp.health.disconnectAllAria': '断开全部 {count} 个已连接的 MCP 服务器', + 'mcp.health.disconnectConfirm.title': '断开所有 MCP 服务器?', + 'mcp.health.disconnectConfirm.body': + '这会断开当前已连接的 {count} 个 MCP 服务器。已安装配置和密钥会保留,你之后可以重新连接任意服务器。', + 'mcp.health.disconnectConfirm.cancel': '取消', + 'mcp.health.disconnectConfirm.confirm': '全部断开', + 'mcp.health.opErrorGeneric': '批量操作失败。请查看日志。', + 'mcp.health.bulkPartialFailure': '{total} 个服务器中有 {failed} 个发生故障。请查看日志。', + 'mcp.installed.search.landmarkAria': '搜索已安装的 MCP 服务器', + 'mcp.installed.search.inputAria': '按名称筛选已安装的 MCP 服务器', + 'mcp.installed.search.placeholder': '筛选服务器…', + 'mcp.installed.search.clearAria': '清除筛选', + 'mcp.installed.search.countMatches': '{shown} / {total} 个服务器', + 'mcp.installed.search.noMatches': '没有服务器匹配“{query}”。', + 'mcp.inventory.openButton': '清单', + 'mcp.inventory.openAria': '打开可分享的 MCP 清单面板', + 'mcp.inventory.title': '可分享的 MCP 清单', + 'mcp.inventory.subtitle': + '将已安装的 MCP 服务器导出为可移植且不含密钥的 manifest,或从队友处导入。密钥环境值绝不会被包含或导入。', + 'mcp.inventory.close': '关闭清单面板', + 'mcp.inventory.tablistAria': '清单分区', + 'mcp.inventory.tab.export': '导出', + 'mcp.inventory.tab.import': '导入', + 'mcp.inventory.export.empty': '尚未安装 MCP 服务器,没有可导出的内容。请先从目录安装一个。', + 'mcp.inventory.export.privacyTitle': '此 manifest 包含的内容', + 'mcp.inventory.export.privacyBody': + '仅包含服务器名称、限定名称、环境变量 KEY 名称和非密钥配置。密钥值、机器标识符和每次安装的时间戳会被有意移除。', + 'mcp.inventory.export.serverCount': '此 manifest 中有 {count} 个服务器', + 'mcp.inventory.export.copy': '复制', + 'mcp.inventory.export.copied': '已复制', + 'mcp.inventory.export.copyAria': '将 manifest JSON 复制到剪贴板', + 'mcp.inventory.export.download': '下载', + 'mcp.inventory.export.downloadAria': '将 manifest 下载为 JSON 文件', + 'mcp.inventory.import.trustTitle': '将导入的 manifest 视为不可信代码', + 'mcp.inventory.import.trustBody': + 'MCP 服务器是你授权给智能体的工具。只导入来自可信来源的 manifest。每次安装都需要你明确点击,不会自动安装任何内容。', + 'mcp.inventory.import.pasteLabel': '粘贴 manifest JSON', + 'mcp.inventory.import.pastePlaceholder': '在此粘贴 manifest,或在下方上传 .json 文件。', + 'mcp.inventory.import.preview': '预览', + 'mcp.inventory.import.clear': '清除', + 'mcp.inventory.import.uploadFile': '或上传 .json 文件', + 'mcp.inventory.import.uploadFileAria': '上传 manifest .json 文件', + 'mcp.inventory.import.fileTooLarge': '文件过大(超过 1 MB)。已拒绝加载。', + 'mcp.inventory.import.fileReadFailed': '无法读取文件。', + 'mcp.inventory.import.parseErrorPrefix': '无法解析 manifest:', + 'mcp.inventory.import.previewHeading': '预览', + 'mcp.inventory.import.previewCounts': '{total} 个服务器,{newly} 个新增,{already} 个已安装', + 'mcp.inventory.import.previewEmpty': 'Manifest 中不包含服务器。', + 'mcp.inventory.import.exportedFrom': '导出自 {exporter}', + 'mcp.inventory.import.exportedAt': '时间:{when}', + 'mcp.inventory.import.statusNew': '新增', + 'mcp.inventory.import.statusAlreadyInstalled': '已安装', + 'mcp.inventory.import.envKeysLabel': '环境键', + 'mcp.inventory.import.install': '安装', + 'mcp.inventory.import.installAria': '从此 manifest 安装 {name}', + 'mcp.inventory.import.skipped': '已跳过', + 'mcp.inventory.parseError.empty': 'Manifest 为空。', + 'mcp.inventory.parseError.invalidJson': '无效 JSON。', + 'mcp.inventory.parseError.rootNotObject': 'Manifest 根级必须是 JSON 对象。', + 'mcp.inventory.parseError.unsupportedSchema': + '不支持的 manifest schema,此文件不是由兼容的导出器生成的。', + 'mcp.inventory.parseError.missingExportedAt': '缺少或无效的 `exported_at` 字段。', + 'mcp.inventory.parseError.missingExportedBy': '缺少或无效的 `exported_by` 字段。', + 'mcp.inventory.parseError.invalidServers': '缺少或无效的 `servers` 数组。', + 'mcp.inventory.parseError.serverNotObject': '某个服务器条目不是对象。', + 'mcp.inventory.parseError.serverMissingQualifiedName': '某个服务器条目缺少 qualified_name。', + 'mcp.inventory.parseError.serverMissingDisplayName': '某个服务器条目缺少 display_name。', + 'mcp.inventory.parseError.serverEnvKeysNotArray': + '某个服务器条目的 env_keys 字段不是字符串数组。', + 'mcp.inventory.parseError.serverContainsEnv': + '某个服务器条目包含 `env` 值映射。已拒绝导入,manifest 只能携带 env_keys(名称),绝不能包含密钥值。', + 'mcp.inventory.parseError.duplicateQualifiedName': + 'Manifest 中发现重复的 qualified_name。每个服务器最多只能出现一次。', + 'mcp.tab.loading': '正在加载 MCP 服务器...', + 'mcp.tab.emptyDetail': '选择服务器或浏览目录。', + 'mcp.install.loadingDetail': '正在加载服务器详细信息...', + 'mcp.install.back': '返回', + 'mcp.install.title': '安装 {name}', + 'mcp.install.requiredEnv': '所需的环境变量', + 'mcp.install.enterValue': '输入 {key}', + 'mcp.install.show': '显示', + 'mcp.install.hide': '隐藏', + 'mcp.install.configLabel': '配置(可选 JSON)', + 'mcp.install.configPlaceholder': '{"key": "value"}', + 'mcp.install.missingRequired': '“{key}”为必填项', + 'mcp.install.invalidJson': '配置 JSON 不是有效的 JSON', + 'mcp.install.failedDetail': '无法加载服务器详细信息', + 'mcp.install.failedInstall': '安装失败', + 'mcp.install.button': '安装', + 'mcp.install.installing': '正在安装...', + 'mcp.detail.suggestedEnvReady': '建议的环境值已准备好', + 'mcp.detail.suggestedEnvBody': '使用建议值重新安装此服务器以应用它们:{keys}', + 'mcp.detail.connect': '连接', + 'mcp.detail.connecting': '正在连接...', + 'mcp.detail.disconnect': '断开连接', + 'mcp.detail.hideAssistant': '隐藏助手', + 'mcp.detail.helpConfigure': '帮我配置一下', + 'mcp.detail.confirmUninstall': '确认卸载?', + 'mcp.detail.confirmUninstallAction': '是的,卸载', + 'mcp.detail.uninstall': '卸载', + 'mcp.detail.envVars': '环境变量', + 'mcp.detail.tools': '工具', + 'onboarding.skipForNow': '暂时跳过', + 'onboarding.localAI.continueWithCloud': '继续使用云', + 'onboarding.localAI.useLocalAnyway': '无论如何使用本地人工智能(不推荐用于您的设备)', + 'onboarding.localAI.useLocalInstead': '使用本地 AI 代替(现在连接 Ollama)', + 'onboarding.localAI.setupIssue': '本地 AI 设置遇到问题', + 'autonomy.title': '代理自主权', + 'autonomy.maxActionsLabel': '每小时最大动作数', + 'autonomy.maxActionsHelp': + '智能体每滚动小时内可执行的最大工具操作次数。新值将在下次对话时生效。定时任务和频道监听器将保持当前限制,直到重启 OpenHuman。', + 'autonomy.statusSaving': '正在保存...', + 'autonomy.statusSaved': '已保存。', + 'autonomy.statusFailed': '失败', + 'autonomy.unlimitedNote': '无限制 — 禁用速率限制。', + 'autonomy.invalidIntegerMsg': '必须为正整数(如需无限制,请使用「无限制」预设)。', + 'autonomy.presetUnlimited': '无限制(默认)', + 'triggers.toggleFailed': '{trigger} 的 {action} 失败:{message}', + 'settings.ai.overview': 'AI 系统概览', + 'settings.ai.configStatus': '配置状态', + 'settings.ai.fallbackMode': '回退模式', + 'settings.ai.loadedFromRuntime': '从运行时加载', + 'settings.ai.loadingDuration': '加载时长', + 'settings.ai.localRuntime': '本地模型运行时', + 'settings.ai.openManager': '打开管理器', + 'settings.ai.retryDownload': '重试下载', + 'settings.ai.state': '状态', + 'settings.ai.targetModel': '目标模型', + 'settings.ai.download': '下载', + 'settings.ai.localModelUnavailable': '本地模型状态不可用。', + 'settings.ai.soulConfig': 'SOUL 角色配置', + 'settings.ai.refreshing': '刷新中...', + 'settings.ai.refreshSoul': '刷新 SOUL', + 'settings.ai.loadingSoul': '正在加载 SOUL 配置...', + 'settings.ai.identity': '身份', + 'settings.ai.personality': '个性', + 'settings.ai.safetyRules': '安全规则', + 'settings.ai.source': '来源', + 'settings.ai.loaded': '已加载', + 'settings.ai.toolsConfig': 'TOOLS 配置', + 'settings.ai.refreshTools': '刷新 TOOLS', + 'settings.ai.toolsAvailable': '可用工具', + 'settings.ai.tools': '个工具', + 'settings.ai.activeSkills': '活跃技能', + 'settings.ai.skills': '个技能', + 'settings.ai.skillsOverview': '技能概览', + 'settings.ai.refreshingAll': '刷新全部中...', + 'settings.ai.refreshAll': '刷新所有 AI 配置', + 'settings.notifications.suppressAll': '抑制所有通知', + 'settings.notifications.suppressAllDesc': + '阻止来自嵌入式应用的所有操作系统通知弹窗,不受焦点状态影响。', + 'settings.notifications.toggleDnd': '切换免打扰', + 'settings.notifications.categories': '类别', + 'settings.notifications.categoryFooter': + '禁用一个类别后,该类新的通知将不再出现在通知中心。已有的通知在被清除前保持可见。', + 'settings.billing.movedToWeb': '账单已移至网页', + 'settings.billing.openDashboard': '打开账单面板', + 'settings.billing.movedToWebDesc': '订阅变更、支付方式、配额和发票现在在 TinyHumans 网页上管理。', + 'settings.billing.backToSettings': '返回设置', + 'settings.billing.openingBrowser': '正在打开浏览器...', + 'settings.billing.browserNotOpen': '如果浏览器未打开,请使用上方按钮。', + 'settings.billing.browserOpenFailed': '无法自动打开浏览器。请使用上方按钮。', + 'settings.tools.chooseCapabilities': '选择 OpenHuman 可代表你使用的能力。', + 'settings.tools.saveChanges': '保存更改', + 'settings.tools.preferencesSaved': '偏好设置已保存', + 'settings.tools.saveFailed': '保存偏好失败,请重试。', + 'settings.screenAwareness.mode': '模式', + 'settings.screenAwareness.allExceptBlacklist': '除黑名单外全部', + 'settings.screenAwareness.whitelistOnly': '仅白名单', + 'settings.screenAwareness.screenMonitoring': '屏幕监控', + 'settings.screenAwareness.saveSettings': '保存设置', + 'settings.screenAwareness.session': '会话', + 'settings.screenAwareness.status': '状态', + 'settings.screenAwareness.active': '活跃', + 'settings.screenAwareness.stopped': '已停止', + 'settings.screenAwareness.remaining': '剩余', + 'settings.screenAwareness.startSession': '开始会话', + 'settings.screenAwareness.stopSession': '停止会话', + 'settings.screenAwareness.analyzeNow': '立即分析', + 'settings.screenAwareness.macosOnly': '屏幕感知桌面捕获和权限控制目前仅在 macOS 上受支持。', + 'connections.comingSoon': '即将推出', + 'connections.setUp': '设置', + 'connections.configured': '已配置', + 'connections.unavailable': '不可用', + 'connections.checking': '检查中...', + 'connections.walletConfigured': '本地 EVM、BTC、Solana 和 Tron 身份已从你的恢复短语中配置。', + 'connections.walletReady': '通过一个恢复短语设置本地 EVM、BTC、Solana 和 Tron 身份。', + 'connections.walletError': '无法检查钱包状态。点击从恢复短语面板重试。', + 'connections.walletChecking': '正在检查钱包状态...', + 'connections.walletIdentities': '钱包身份', + 'connections.walletDerived': '从你的恢复短语本地派生,仅作为安全元数据存储。', + 'connections.privacySecurity': '隐私与安全', + 'connections.privacySecurityDesc': + '所有数据和凭据均存储在本地,采用零数据保留政策。你的信息经过加密,绝不会与第三方共享。', + 'channels.status.connecting': '连接中', + 'channels.status.notConfigured': '未配置', + 'channels.noActiveRoute': '无活跃路由', + 'channels.activeRoute': '活跃路由', + 'channels.loadingDefinitions': '正在加载渠道定义...', + 'channels.channelConnections': '渠道连接', + 'channels.configureAuthModes': '为每个消息渠道配置认证模式。', + 'channels.configNotAvailable': '配置', + 'channels.channel': '渠道', + 'devOptions.coreModeNotSet': '核心模式:未设置', + 'devOptions.coreModeNotSetDesc': '启动检查选择器尚未确认。使用选择器上的切换模式选择本地或云端。', + 'devOptions.local': '本地', + 'devOptions.embeddedCoreSidecar': '嵌入式核心侧车', + 'devOptions.sidecarSpawned': '由 Tauri shell 在应用启动时进程内启动。', + 'devOptions.cloud': '云端', + 'devOptions.remoteCoreRpc': '远程核心 RPC', + 'devOptions.token': '令牌', + 'devOptions.tokenNotSet': '未设置 — RPC 将返回 401', + 'devOptions.triggerSentryTest': '触发 Sentry 测试 (staging)', + 'devOptions.triggerSentryTestDesc': + '发送一个带有标签的错误以验证 Sentry 管道。Issue #1072 — 验证后移除。', + 'devOptions.sendTestEvent': '发送测试事件', + 'devOptions.sending': '发送中…', + 'devOptions.eventSent': '事件已发送', + 'devOptions.sentryDisabled': '(无 id — 哨兵在此版本中被禁用)', + 'devOptions.failed': '失败', + 'devOptions.appLogs': '应用日志', + 'devOptions.appLogsDesc': '打开包含滚动日志文件的文件夹。报告问题时请附上最近的文件。', + 'devOptions.openLogsFolder': '打开日志文件夹', + 'mnemonic.phraseSaved': '恢复短语已保存', + 'mnemonic.walletReady': '多链钱包身份已就绪。正在返回设置...', + 'mnemonic.writeDownWords': '按顺序记下这', + 'mnemonic.wordsInOrder': + '个单词,并将其保存在安全的地方。这个短语保护你的本地加密密钥以及你的 EVM、BTC、Solana 和 Tron 钱包身份。', + 'mnemonic.cannotRecover': '这个短语一旦丢失将无法恢复,应该完全保留在你的本地设备上。', + 'mnemonic.copyToClipboard': '复制到剪贴板', + 'mnemonic.alreadyHavePhrase': '我已经有恢复短语', + 'mnemonic.consentSaved': '我已保存此短语并同意将其用于本地钱包设置', + 'mnemonic.enterPhraseToRestore': + '在下面输入你的恢复短语以恢复本地钱包身份,或将完整的短语粘贴到任意字段中(新备份为 12 个单词;旧版本的 24 个单词短语仍然有效)。', + 'mnemonic.words': '单词数', + 'mnemonic.validPhrase': '有效的恢复短语', + 'mnemonic.generateNewPhrase': '改为生成新的恢复短语', + 'mnemonic.securingData': '正在保护你的数据...', + 'mnemonic.saveRecoveryPhrase': '保存恢复短语', + 'mnemonic.userNotLoaded': '用户未加载。请重新登录或刷新页面。', + 'mnemonic.invalidPhrase': '恢复短语无效。请检查你的单词后重试。', + 'mnemonic.somethingWentWrong': '出了点问题。请重试。', + 'team.failedToCreate': '创建团队失败', + 'team.invalidInviteCode': '无效或已过期的邀请码', + 'team.failedToSwitch': '切换团队失败', + 'team.failedToLeave': '离开团队失败', + 'team.role.owner': '拥有者', + 'team.role.admin': '管理员', + 'team.role.billingManager': '账单管理员', + 'team.role.member': '成员', + 'team.active': '活跃', + 'team.personalTeam': '个人团队', + 'team.manageTeam': '管理团队', + 'team.switching': '切换中...', + 'team.switch': '切换', + 'team.leaving': '离开中...', + 'team.leave': '离开', + 'team.yourTeams': '你的团队', + 'team.createNewTeam': '创建新团队', + 'team.teamName': '团队名称', + 'team.creating': '创建中...', + 'team.joinExistingTeam': '加入已有团队', + 'team.inviteCode': '邀请码', + 'team.joining': '加入中...', + 'team.join': '加入', + 'team.leaveTeam': '离开团队', + 'team.confirmLeave': '确定要离开', + 'team.leaveWarning': '你将失去对该团队及所有团队资源的访问权限。需要重新获得邀请才能重新加入。', + 'team.management': '团队管理', + 'team.notFound': '未找到团队', + 'team.accessDenied': '访问被拒绝', + 'team.members': '成员', + 'team.membersDesc': '管理团队成员和角色', + 'team.invites': '邀请', + 'team.invitesDesc': '生成和管理邀请码', + 'team.settings': '团队设置', + 'team.settingsDesc': '编辑团队名称和设置', + 'team.editSettings': '编辑团队设置', + 'team.enterName': '输入团队名称', + 'team.saving': '正在保存...', + 'team.saveChanges': '保存更改', + 'team.delete': '删除团队', + 'team.deleteDesc': '永久删除该团队', + 'team.deleting': '正在删除...', + 'team.failedToUpdate': '更新团队失败', + 'team.failedToDelete': '删除团队失败', + 'team.manageTitle': '管理 {name}', + 'team.planCreated': '{plan} 计划 • 创建 {date}', + 'team.confirmDelete': '您确定要删除 {name} 吗?', + 'team.deleteWarning': '此操作无法撤消。所有团队数据将被永久删除。', + 'voice.title': '语音听写', + 'voice.settings': '语音设置', + 'voice.settingsDesc': '按住快捷键进行语音听写,将文本插入到当前活动字段中。', + 'voice.hotkey': '快捷键', + 'voice.activationMode': '激活模式', + 'voice.tapToToggle': '点击切换', + 'voice.writingStyle': '书写风格', + 'voice.verbatimTranscription': '逐字转录', + 'voice.naturalCleanup': '自然清理', + 'voice.autoStart': '与核心一起自动启动语音服务', + 'voice.customDictionary': '自定义词典', + 'voice.customDictionaryDesc': '添加姓名、技术术语和领域词汇以提高识别准确率。', + 'voice.addWord': '添加词语...', + 'voice.sttDisabled': '语音听写功能在本地 STT 模型下载并准备好之前被禁用。', + 'voice.openLocalAiModel': '打开本地 AI 模型', + 'voice.serverRestarted': '语音服务已使用新设置重启。', + 'voice.settingsSaved': '语音设置已保存。', + 'voice.serverStarted': '语音服务已启动。', + 'voice.serverStopped': '语音服务已停止。', + 'voice.saveVoiceSettings': '保存语音设置', + 'voice.startVoiceServer': '启动语音服务', + 'voice.stopVoiceServer': '停止语音服务', + 'voice.debugTitle': '语音调试', + 'voice.failedToLoadSettings': '无法加载语音设置', + 'voice.failedToSaveSettings': '无法保存语音设置', + 'voice.failedToStartServer': '语音服务器启动失败', + 'voice.failedToStopServer': '停止语音服务器失败', + 'voice.sttDisabledPrefix': '语音听写已禁用,直到本地 STT 模型下载完成。请使用', + 'voice.sttDisabledSuffix': '上面的部分安装 Whisper。', + 'voice.debug.failedToLoadVoiceDebugData': '加载语音调试数据失败', + 'voice.debug.settingsSaved': '已保存调试设置。', + 'voice.debug.failedToSaveSettings': '无法保存语音设置', + 'voice.debug.runtimeStatus': '运行时状态', + 'voice.debug.runtimeStatusDesc': '语音服务器和语音转文字引擎的实时诊断信息。', + 'voice.debug.server': '服务器', + 'voice.debug.unavailable': '不可用', + 'voice.debug.ready': '准备好', + 'voice.debug.notReady': '还没准备好', + 'voice.debug.hotkey': '热键', + 'voice.debug.notAvailable': '不适用', + 'voice.debug.mode': '模式', + 'voice.debug.transcriptions': '转录', + 'voice.debug.serverError': '服务器错误', + 'voice.debug.advancedSettings': '高级设置', + 'voice.debug.advancedSettingsDesc': '用于录音和静音检测的底层调节参数。', + 'voice.debug.minimumRecordingSeconds': '最短录音秒数', + 'voice.debug.silenceThreshold': '静音阈值 (RMS)', + 'voice.debug.silenceThresholdDesc': '能量低于此值的录音将被视为静音并跳过。值越低,灵敏度越高。', + 'voice.providers.saved': '语音提供商已保存。', + 'voice.providers.failedToSave': '无法保存语音提供商', + 'voice.providers.ellipsis': '…', + 'voice.providers.installing': '安装中', + 'voice.providers.installingBusy': '正在安装...', + 'voice.providers.reinstallLocally': '本地重新安装', + 'voice.providers.repair': '修复', + 'voice.providers.retryLocally': '本地重试', + 'voice.providers.installLocally': '本地安装', + 'voice.providers.whisperReady': '耳语准备好了。', + 'voice.providers.whisperInstallStarted': '耳语安装开始', + 'voice.providers.queued': '排队', + 'voice.providers.failedToInstallWhisper': '安装耳语失败', + 'voice.providers.piperReady': '派珀准备好了。', + 'voice.providers.piperInstallStarted': 'Piper 安装开始', + 'voice.providers.failedToInstallPiper': '安装 Piper 失败', + 'voice.providers.title': '语音提供商', + 'voice.providers.desc': + '选择转录和合成的运行位置。使用「本地安装」按钮将二进制文件和模型下载到您的工作区。本地服务提供商可在安装完成前保存——无需手动配置 WHISPER_BIN 或 PIPER_BIN。', + 'voice.providers.sttProvider': '语音转文本提供商', + 'voice.providers.sttProviderAria': 'STT 提供商', + 'voice.providers.cloudWhisperProxy': '云(耳语代理)', + 'voice.providers.localWhisper': '本地耳语', + 'voice.providers.installRequired': ' (需要安装)', + 'voice.providers.whisperInstalledTitle': '耳语已安装。单击重新安装。', + 'voice.providers.whisperDownloadTitle': '将 whisper.cpp 和 GGML 模型下载到您的工作区。', + 'voice.providers.installed': '已安装', + 'voice.providers.installFailed': '安装失败', + 'voice.providers.notInstalled': '未安装', + 'voice.providers.whisperModel': '耳语模型', + 'voice.providers.whisperModelAria': '耳语模型', + 'voice.providers.whisperModelTiny': '很小(39 MB,最快)', + 'voice.providers.whisperModelBase': '基础 (74 MB)', + 'voice.providers.whisperModelSmall': '小 (244 MB)', + 'voice.providers.whisperModelMedium': '中型(769 MB,推荐)', + 'voice.providers.whisperModelLargeTurbo': '大型 v3 Turbo(1.5 GB,最佳精度)', + 'voice.providers.ttsProvider': '文本转语音提供商', + 'voice.providers.ttsProviderAria': 'TTS 提供商', + 'voice.providers.cloudElevenLabsProxy': '云(ElevenLabs 代理)', + 'voice.providers.localPiper': '当地风笛手', + 'voice.providers.piperInstalledTitle': 'Piper 已安装。单击重新安装。', + 'voice.providers.piperDownloadTitle': + '将 Piper 及内置的 en_US-lessac-medium 声音下载到您的工作区。', + 'voice.providers.piperVoice': '派珀之声', + 'voice.providers.piperVoiceAria': '吹笛者的声音', + 'voice.providers.customVoiceOption': '其他(在下面输入)...', + 'voice.providers.customVoiceAria': 'Piper 语音 ID(自定义)', + 'voice.providers.customVoicePlaceholder': 'en_US-lessac-medium', + 'voice.providers.piperVoicesDesc': + '声音来自 huggingface.co/rhasspy/piper-voices。切换声音后,可能需要点击「安装/重新安装」以下载新的 .onnx 文件。', + 'voice.providers.mascotVoice': '吉祥物声音', + 'voice.providers.mascotVoiceDescPrefix': + '吉祥物语音回复所使用的 ElevenLabs 声音,在以下位置配置:', + 'voice.providers.mascotSettings': '吉祥物设置', + 'voice.providers.mascotVoiceDescSuffix': '.', + 'voice.providers.hotkeyPlaceholder': 'Fn', + 'voice.providers.piperPreset.lessacMedium': '美国·Lessac(中性,推荐)', + 'voice.providers.piperPreset.lessacHigh': '美国·Lessac(更高品质,更大)', + 'voice.providers.piperPreset.ryanMedium': '美国·瑞安(男)', + 'voice.providers.piperPreset.amyMedium': '美国·艾米(女)', + 'voice.providers.piperPreset.librittsHigh': '美国·LibriTTS(多扬声器)', + 'voice.providers.piperPreset.alanMedium': 'GB·艾伦(男)', + 'voice.providers.piperPreset.jennyDiocoMedium': 'GB·珍妮·迪奥科(女)', + 'voice.providers.piperPreset.northernEnglishMaleMedium': 'GB·北方英语(男)', + 'voice.providers.chip.cloud': 'OpenHuman(托管)', + 'voice.providers.chip.cloudAria': 'OpenHuman 托管服务商始终启用', + 'voice.providers.chip.whisper': 'Whisper(本地)', + 'voice.providers.chip.enableWhisper': '启用本地 Whisper STT', + 'voice.providers.chip.disableWhisper': '禁用本地 Whisper STT', + 'voice.providers.chip.piper': 'Piper(本地)', + 'voice.providers.chip.enablePiper': '启用本地 Piper TTS', + 'voice.providers.chip.disablePiper': '禁用本地 Piper TTS', + 'voice.providers.chip.enableProvider': 'Enable', + 'voice.providers.chip.disableProvider': 'Disable', + 'voice.providers.chip.apiKeyLabel': 'API 密钥', + 'voice.providers.chip.apiKeyPlaceholder': 'sk-…', + 'voice.providers.chip.comingSoon': '即将推出', + 'voice.modal.title': 'Configure', + 'voice.modal.desc': '输入您的 API 密钥以启用此服务提供商。保存前可先测试连接。', + 'voice.modal.testKey': '测试密钥', + 'voice.modal.testing': '测试中…', + 'voice.modal.saveAndEnable': '保存并启用', + 'voice.modal.enable': 'Enable', + 'voice.modal.whisperDesc': + '选择模型大小并将 Whisper 二进制文件和 GGML 模型安装到您的工作区。模型越大,精度越高,但速度越慢。', + 'voice.modal.piperDesc': + '选择一个语音并将 Piper 二进制文件和 ONNX 模型安装到您的工作区。Piper 可完全离线运行,延迟极低。', + 'voice.routing.title': '语音路由', + 'voice.routing.desc': '选择由哪些已启用的服务提供商处理语音转文字和文字转语音。', + 'voice.routing.save': 'Save', + 'voice.routing.testStt': '测试 STT', + 'voice.routing.testTts': '测试 TTS', + 'voice.routing.elevenlabsVoice': 'ElevenLabs 声音', + 'voice.routing.elevenlabsVoiceAria': 'ElevenLabs 声音选择', + 'voice.routing.elevenlabsVoiceIdAria': 'ElevenLabs 声音 ID(自定义)', + 'voice.routing.elevenlabsVoiceDesc': + '选择精选声音,或粘贴来自 ElevenLabs 控制台的自定义声音 ID。', + 'voice.externalProviders.title': '外部语音服务提供商', + 'voice.externalProviders.desc': '直接接入第三方 STT/TTS API,如 Deepgram、ElevenLabs 或 OpenAI。', + 'voice.externalProviders.keySet': '密钥已设置', + 'voice.externalProviders.noKey': '无 API 密钥', + 'voice.externalProviders.test': 'Test', + 'voice.externalProviders.testing': '测试中…', + 'voice.externalProviders.remove': 'Remove', + 'voice.externalProviders.provider': 'Provider', + 'voice.externalProviders.selectProvider': '选择服务提供商…', + 'voice.externalProviders.apiKey': 'API 密钥', + 'voice.externalProviders.apiKeyPlaceholder': 'sk-…', + 'voice.externalProviders.add': 'Add', + 'autocomplete.title': '自动补全', + 'autocomplete.settings': '设置', + 'autocomplete.acceptWithTab': 'Tab 键接受', + 'autocomplete.stylePreset': '风格预设', + 'autocomplete.style.balanced': '均衡', + 'autocomplete.style.concise': '简洁', + 'autocomplete.style.formal': '正式', + 'autocomplete.style.casual': '随意', + 'autocomplete.style.custom': '自定义', + 'autocomplete.disabledApps': '禁用的应用(每行一个包名/应用令牌)', + 'autocomplete.saveSettings': '保存设置', + 'autocomplete.saving': '保存中…', + 'autocomplete.runtime': '运行时', + 'autocomplete.running': '运行中', + 'autocomplete.start': '启动', + 'autocomplete.stop': '停止', + 'autocomplete.settingsSaved': '自动补全设置已保存。', + 'autocomplete.started': '自动补全已启动。', + 'autocomplete.didNotStart': '自动补全未能启动。请检查是否已启用。', + 'autocomplete.stopped': '自动补全已停止。', + 'autocomplete.advancedSettings': '高级设置', + 'autocomplete.debugTitle': '自动补全调试', + 'chat.agentChat': '智能体对话', + 'chat.overrides': '覆盖设置', + 'chat.model': '模型', + 'chat.temperature': '温度', + 'chat.conversation': '对话', + 'chat.startAgentConversation': '开始与智能体对话。', + 'chat.you': '你', + 'chat.agent': '智能体', + 'chat.askAgent': '向智能体提问...', + 'chat.sendMessage': '发送消息', + 'composio.triageTitle': '集成触发器', + 'composio.triageDesc': + '启用时,每个传入的 Composio 触发器都会经过 AI 分类步骤,对事件进行分类并可能启动自动化操作——每个触发器使用一个本地 LLM 轮次。如果你更喜欢手动审查,可以全局或按集成禁用。如果环境变量', + 'composio.disableAllTriage': '禁用所有触发器的 AI 分类', + 'composio.triggersStillRecorded': '触发器仍记录到历史记录中——不运行 LLM 轮次。', + 'composio.disableSpecificIntegrations': '禁用特定集成的 AI 分类', + 'composio.settingsSaved': '设置已保存', + 'composio.saveFailed': '保存失败。请重试。', + 'cron.title': '定时任务', + 'cron.scheduledJobs': '计划任务', + 'cron.manageCronJobs': '管理核心调度器的定时任务。', + 'cron.refreshCronJobs': '刷新定时任务', + 'localModel.modelStatus': '模型状态', + 'localModel.downloadModels': '下载模型', + 'localModel.usage': '使用', + 'localModel.usageDesc': '选择哪些子系统在本地模型上运行。未勾选的将使用云端。', + 'localModel.enableRuntime': '启用本地 AI 运行时', + 'localModel.enableRuntimeDesc': + '总开关。默认关闭——Ollama 保持空闲。启用后,树摘要器、屏幕智能和自动补全始终使用本地模型。', + 'localModel.advancedSettings': '高级设置', + 'localModel.debugTitle': '本地模型调试', + 'screenAwareness.debugTitle': '屏幕感知调试', + 'screenAwareness.debug.debugAndDiagnostics': '调试与诊断', + 'screenAwareness.debug.collapse': '崩溃', + 'screenAwareness.debug.expand': '展开', + 'screenAwareness.debug.failedToSave': '保存屏幕情报失败', + 'screenAwareness.debug.policyTitle': '屏幕情报政策', + 'screenAwareness.debug.baselineFps': '基线 FPS', + 'screenAwareness.debug.useVisionModel': '使用视觉模型', + 'screenAwareness.debug.useVisionModelDesc': + '将截图发送给视觉 LLM 以获取更丰富的上下文。关闭时,仅使用 OCR 文本配合纯文本 LLM——速度更快且无需视觉模型。', + 'screenAwareness.debug.keepScreenshots': '保留截图', + 'screenAwareness.debug.keepScreenshotsDesc': '将捕获的截图保存到工作区,而非处理后删除', + 'screenAwareness.debug.allowlist': '允许列表(每行一条规则)', + 'screenAwareness.debug.denylist': '拒绝名单(每行一条规则)', + 'screenAwareness.debug.saveSettings': '保存屏幕智能设置', + 'screenAwareness.debug.sessionStats': '会话统计', + 'screenAwareness.debug.framesEphemeral': '框架(临时)', + 'screenAwareness.debug.panicStop': '紧急停止', + 'screenAwareness.debug.defaultPanicHotkey': 'Cmd+Shift+。', + 'screenAwareness.debug.vision': '愿景', + 'screenAwareness.debug.idle': '空闲', + 'screenAwareness.debug.visionQueue': '视觉队列', + 'screenAwareness.debug.lastVision': '最后的愿景', + 'screenAwareness.debug.notAvailable': '不适用', + 'screenAwareness.debug.visionSummaries': '愿景摘要', + 'screenAwareness.debug.refreshing': '清爽…', + 'screenAwareness.debug.noSummaries': '还没有总结。', + 'screenAwareness.debug.unknownApp': '未知应用程序', + 'screenAwareness.debug.macosOnly': 'Screen Intelligence V1 目前仅在 macOS 上受支持。', + 'memory.debugTitle': '记忆调试', + 'memory.documents': '文件', + 'memory.filterByNamespace': '按名称空间过滤...', + 'memory.refresh': '刷新', + 'memory.noDocumentsFound': '没有找到文件。', + 'memory.delete': '删除', + 'memory.rawResponse': '原始响应', + 'memory.namespaces': '命名空间', + 'memory.noNamespacesFound': '未找到名称空间。', + 'memory.queryRecall': '查询与召回', + 'memory.namespace': '命名空间', + 'memory.queryText': '查询文字...', + 'memory.defaultMaxChunks': '10', + 'memory.maxChunks': '最大块数', + 'memory.query': '查询', + 'memory.recall': '召回', + 'memory.queryLabel': '查询', + 'memory.recallLabel': '召回', + 'memory.queryResult': '查询结果', + 'memory.recallResult': '调用结果', + 'memory.clearNamespace': '清除命名空间', + 'memory.clearNamespaceDescription': '永久删除命名空间内的所有文档。', + 'memory.selectNamespace': '选择命名空间...', + 'memory.exampleNamespace': '例如技能:gmail:user@example.com', + 'memory.clear': '清除', + 'memory.deleteConfirm': '删除命名空间“{namespace}”中的文档“{documentId}”吗?', + 'memory.clearNamespaceConfirm': '此操作将永久删除命名空间「{namespace}」中的所有文档。是否继续?', + 'memory.clearNamespaceSuccess': '命名空间“{namespace}”已清除。', + 'memory.clearNamespaceEmpty': '“{namespace}”中没有需要清除的内容。', + 'webhooks.debugTitle': 'Webhook 调试', + 'webhooks.failedToLoadDebugData': '无法加载 webhook 调试数据', + 'webhooks.clearLogsConfirm': '清除所有捕获的 Webhook 调试日志吗?', + 'webhooks.failedToClearLogs': '无法清除 webhook 日志', + 'webhooks.loading': '正在加载...', + 'webhooks.refresh': '刷新', + 'webhooks.clearing': '清算...', + 'webhooks.clearLogs': '清除日志', + 'webhooks.registered': '已注册', + 'webhooks.captured': '被捕获', + 'webhooks.live': '直播', + 'webhooks.disconnected': '断开连接', + 'webhooks.lastEvent': '最后活动', + 'webhooks.at': '在', + 'webhooks.registeredWebhooks': '注册网络钩子', + 'webhooks.noActiveRegistrations': '没有活跃的注册。', + 'webhooks.resolvingBackendUrl': '正在解析后端 URL...', + 'webhooks.capturedRequests': '捕获的请求', + 'webhooks.noRequestsCaptured': '尚未捕获任何 Webhook 请求。', + 'webhooks.unrouted': '未布线的', + 'webhooks.pending': '待定', + 'webhooks.requestHeaders': '请求标头', + 'webhooks.queryParams': '查询参数', + 'webhooks.requestBody': '请求正文', + 'webhooks.responseHeaders': '响应头', + 'webhooks.responseBody': '响应体', + 'webhooks.rawPayload': '原始有效负载', + 'webhooks.empty': '[空]', + 'providerSetup.error.defaultDetails': '提供商设置失败。', + 'providerSetup.error.providerFallback': '提供者', + 'providerSetup.error.credentialsRejected': '{provider} 拒绝了此凭据。请检查 API 密钥后重试。', + 'providerSetup.error.endpointNotRecognized': '{provider} 无法识别该端点。请检查基础 URL 后重试。', + 'providerSetup.error.providerUnavailable': '{provider} 当前不可用。请稍后重试或查看服务商状态。', + 'providerSetup.error.unreachable': '无法连接到 {provider}。请检查端点 URL 和网络连接后重试。', + 'providerSetup.error.couldNotReachWithMessage': '无法到达 {provider}:{message}', + 'providerSetup.error.technicalDetails': '技术细节', + 'notifications.routingTitle': '通知路由', + 'notifications.routing.pipelineStats': '管道统计', + 'notifications.routing.total': '合计', + 'notifications.routing.unread': '未读', + 'notifications.routing.unscored': '未计分', + 'notifications.routing.intelligenceTitle': '通知情报', + 'notifications.routing.intelligenceDesc': + '来自已连接账户的每条通知都由本地 AI 模型进行评分。重要通知将自动路由至您的编排器智能体,确保关键信息不会遗漏。', + 'notifications.routing.howItWorks': '它是如何运作的', + 'notifications.routing.level.drop': '掉落', + 'notifications.routing.level.dropDesc': '噪音/垃圾邮件 - 已存储但未浮出水面', + 'notifications.routing.level.acknowledge': '确认', + 'notifications.routing.level.acknowledgeDesc': '低优先级 — 显示在通知中心', + 'notifications.routing.level.react': '反应', + 'notifications.routing.level.reactDesc': '中优先级 — 触发集中的座席响应', + 'notifications.routing.level.escalate': '升级', + 'notifications.routing.level.escalateDesc': '高优先级 — 转发给协调器代理', + 'notifications.routing.perProvider': '每个提供商的路由', + 'notifications.routing.threshold': '阈值', + 'notifications.routing.routeToOrchestrator': '路由到协调器', + 'notifications.routing.loadSettingsError': '无法加载设置。重新打开此面板以重试。', + 'common.reload': '重新加载', + 'common.skip': '跳过', + 'common.disable': '禁用', + 'common.enable': '启用', + 'chat.safetyTimeout': '助手 2 分钟内未响应。请重试或检查你的连接。', + 'chat.filter.all': '全部', + 'chat.filter.work': '工作', + 'chat.filter.briefing': '简报', + 'chat.filter.notification': '通知', + 'chat.filter.workers': '工作线程', + 'chat.selectThread': '选择一个对话', + 'chat.threads': '对话列表', + 'chat.noThreads': '暂无对话', + 'chat.noLabelThreads': '此标签下暂无对话', + 'chat.noWorkerThreads': '暂无工作线程', + 'chat.deleteThread': '删除对话', + 'chat.deleteThreadConfirm': '确定要删除"{title}"吗?', + 'chat.untitledThread': '未命名对话', + 'chat.editThreadTitle': '编辑会话标题', + 'chat.hideSidebar': '隐藏侧边栏', + 'chat.showSidebar': '显示侧边栏', + 'chat.newThreadShortcut': '新建对话', + 'chat.new': '新建', + 'chat.failedToLoadMessages': '加载消息失败', + 'chat.thinkingIteration': '思考中...({n})', + 'chat.thinkingDots': '思考中...', + 'chat.approachingLimit': '接近使用限制', + 'chat.approachingLimitMsg': '你已使用了可用配额的{pct}%。', + 'chat.upgrade': '升级', + 'chat.weeklyLimitHit': '已达到每周限制。', + 'chat.resets': '重置时间', + 'chat.topUpToContinue': '充值以继续使用。', + 'chat.budgetComplete': '预算已用完。', + 'chat.topUp': '充值', + 'chat.cycle': '周期', + 'chat.cycleSpent': '本周期已用', + 'chat.cycleRemaining': '剩余', + 'chat.left': '剩余', + 'chat.setup': '设置', + 'chat.switchToText': '切换到文本', + 'chat.transcribing': '转录中...', + 'chat.stopAndSend': '停止并发送', + 'chat.startTalking': '开始说话', + 'chat.playingVoiceReply': '正在播放语音回复', + 'chat.voiceHint': '使用麦克风说话', + 'chat.micUnavailable': '麦克风不可用', + 'chat.turn': '轮', + 'chat.turns': '轮', + 'chat.openWorkerThread': '打开工作线程', + 'chat.attachment.attach': '添加图片', + 'chat.attachment.remove': '移除 {name}', + 'chat.attachment.tooMany': '每条消息最多 {max} 张图片', + 'chat.attachment.tooLarge': '图片超过 {max} 大小限制', + 'chat.attachment.unsupportedType': '不支持的文件类型。请使用 PNG、JPEG、WebP、GIF 或 BMP。', + 'chat.attachment.readFailed': '无法读取文件', + 'memory.searchAria': '搜索记忆', + 'memory.searchPlaceholder': '搜索记忆条目...', + 'memory.sourceFilter.all': '所有来源', + 'memory.sourceFilter.email': '邮件', + 'memory.sourceFilter.calendar': '日历', + 'memory.sourceFilter.telegram': 'Telegram', + 'memory.sourceFilter.aiInsight': 'AI 洞察', + 'memory.sourceFilter.system': '系统', + 'memory.sourceFilter.trading': '交易', + 'memory.sourceFilter.security': '安全', + 'memory.ingestionActivity': '摄取活动', + 'memory.events': '个事件', + 'memory.event': '个事件', + 'memory.overTheLast': '过去', + 'memory.months': '个月', + 'memory.peak': '峰值', + 'memory.perDay': '/天', + 'memory.less': '较少', + 'memory.more': '较多', + 'memory.on': '于', + 'memory.loading': '正在加载记忆', + 'memory.fetching': '正在获取你的记忆条目...', + 'memory.analyzing': '正在分析记忆', + 'memory.analyzingHint': '正在处理你的记忆以提取洞察...', + 'memory.noMatches': '未找到匹配', + 'memory.noMatchesHint': '尝试更改搜索词或筛选条件。', + 'memory.allCaughtUp': '全部完成', + 'memory.allCaughtUpHint': '没有新的记忆条目需要处理。', + 'memory.noAnalysis': '暂无分析', + 'memory.noAnalysisHint': '运行分析以发现记忆中的模式。', + 'memory.emptyHint': '开始交互以创建你的第一条记忆。', + 'mic.unavailable': '麦克风不可用', + 'mic.permissionDenied': '麦克风权限被拒绝', + 'mic.failedToStartRecorder': '启动录音失败', + 'mic.transcribing': '转录中...', + 'mic.tapToSend': '点击发送', + 'mic.waitingForAgent': '等待助手...', + 'mic.tapAndSpeak': '点击说话', + 'mic.stopRecording': '停止录音', + 'mic.startRecording': '开始录音', + 'mic.deviceSelector': '麦克风装置', + 'mic.tapToSendCountdown': '点击发送 ({seconds}秒)', + 'token.usageLimitReached': '已达到使用限制', + 'token.approachingLimit': '接近限制', + 'token.planClickForDetails': '套餐 - 点击查看详情', + 'token.sessionTokens': '输入: {in} | 输出: {out} | 轮次: {turns}', + 'token.limit': '已达限制', + 'catalog.noCapabilityBinding': '无能力绑定', + 'catalog.downloadFailed': '下载失败', + 'catalog.active': '活跃', + 'catalog.installed': '已安装', + 'catalog.notDownloaded': '未下载', + 'catalog.inUse': '使用中', + 'catalog.use': '使用', + 'catalog.deleteModel': '删除模型', + 'catalog.download': '下载', + 'navigator.recent': '最近', + 'navigator.today': '今天', + 'navigator.thisWeek': '本周', + 'navigator.sources': '来源', + 'navigator.email': '邮件', + 'navigator.slack': 'Slack', + 'navigator.chat': '对话', + 'navigator.documents': '文档', + 'navigator.people': '联系人', + 'navigator.topics': '主题', + 'dreams.description': '梦境是 AI 生成的反思,综合了你记忆中的模式。', + 'dreams.comingSoon': '即将推出', + 'assignment.memoryLlm': '记忆 LLM', + 'assignment.memoryLlmAria': '选择记忆 LLM', + 'assignment.embedder': '嵌入模型', + 'assignment.loaded': '已加载', + 'assignment.notDownloaded': '未下载', + 'assignment.usedForExtractSummarise': '用于提取和摘要', + 'insights.knownFacts': '已知事实', + 'insights.preferences': '偏好', + 'insights.relationships': '关系', + 'insights.skills': '技能', + 'insights.opinions': '观点', + 'insights.other': '其他', + 'insights.title': '洞察', + 'insights.empty': '暂无洞察。随着你的记忆增长,洞察会自动生成。', + 'insights.description': '基于记忆图谱中的 {count} 个关系。', + 'insights.items': '条', + 'insights.more': '更多', + 'calls.joiningCall': '正在加入通话', + 'calls.meetWindowOpening': 'Meet 窗口正在打开...', + 'calls.failedToStart': '启动通话失败', + 'calls.couldNotStart': '无法启动通话', + 'calls.failedToClose': '关闭通话失败', + 'calls.couldNotClose': '无法关闭通话', + 'calls.joinMeet': '加入 Meet', + 'calls.joinMeetDescription': '输入 Google Meet 链接以加入。', + 'calls.meetLink': 'Meet 链接', + 'calls.displayName': '显示名称', + 'calls.openingMeet': '正在打开 Meet...', + 'calls.joinCall': '加入通话', + 'calls.activeCalls': '活跃通话', + 'calls.leave': '离开', + 'workspace.wipeConfirm': '确定要清除所有记忆吗?此操作不可撤销。', + 'workspace.resetTreeConfirm': '确定要重建记忆树吗?', + 'workspace.wipeTitle': '清除记忆', + 'workspace.resetting': '重置中...', + 'workspace.resetMemory': '重置记忆', + 'workspace.resetTreeTitle': '重建记忆树', + 'workspace.rebuilding': '重建中...', + 'workspace.resetMemoryTree': '重置记忆树', + 'workspace.building': '构建中...', + 'workspace.buildSummaryTrees': '构建摘要树', + 'workspace.viewVault': '查看存储库', + 'workspace.openingVaultTitle': '在 Obsidian 中打开存储库', + 'workspace.openingVaultMessage': + '如果 Obsidian 没有打开,请从 obsidian.md 安装或使用"显示文件夹"。存储库路径:', + 'workspace.openVaultFailedTitle': '无法在 Obsidian 中打开存储库', + 'workspace.openVaultFailedMessage': '使用"显示文件夹"直接打开存储库目录。存储库路径:', + 'workspace.revealVaultFailed': '无法显示存储库文件夹', + 'workspace.revealFolder': '显示文件夹', + 'workspace.checkingVault': '检查中…', + 'workspace.vaultNotRegisteredHelp': + 'Obsidian 只能打开您已添加为存储库的文件夹。在 Obsidian 中选择「以存储库方式打开文件夹」并选取下方文件夹——只需操作一次。然后再次点击「查看存储库」。', + 'workspace.obsidianNotFoundHelp': + '未能在此设备上找到 Obsidian。请安装它,或者如果安装在非标准位置,请在「高级」中设置其配置文件夹。', + 'workspace.openAnyway': '仍在 Obsidian 中打开', + 'workspace.installObsidian': '安装 Obsidian', + 'workspace.obsidianAdvanced': 'Obsidian 安装在其他位置?', + 'workspace.obsidianConfigDirLabel': 'Obsidian 配置文件夹', + 'workspace.obsidianConfigDirHint': + '包含 obsidian.json 的文件夹路径(例如 ~/.config/obsidian)。留空以自动检测。', + 'workspace.obsidianConfigDirPlaceholder': '~/.config/obsidian', + 'workspace.graphLoadFailed': '无法加载记忆图谱', + 'workspace.loadingGraph': '正在加载记忆图谱...', + 'workspace.graphViewMode': '记忆图谱视图模式', + 'workspace.trees': '树状视图', + 'workspace.contacts': '联系人', + 'graph.noContactMentions': '无联系人提及', + 'graph.noMemory': '无记忆', + 'graph.source': '来源', + 'graph.topic': '主题', + 'graph.global': '全局', + 'graph.document': '文档', + 'graph.contact': '联系人', + 'graph.nodes': '个节点', + 'graph.parentChild': '父子', + 'graph.documentContact': '文档-联系人', + 'graph.link': '条链接', + 'graph.links': '条链接', + 'graph.children': '个子节点', + 'graph.clickToOpenObsidian': '点击在 Obsidian 中打开', + 'graph.person': '人物', + 'modal.dontShowAgain': '不再显示', + 'reflections.loading': '正在加载反思...', + 'reflections.empty': '暂无反思', + 'reflections.title': '反思', + 'reflections.proposedAction': '建议操作', + 'reflections.act': '执行', + 'reflections.dismiss': '忽略', + 'whatsapp.chatsSynced': '个对话已同步', + 'whatsapp.chatSynced': '个对话已同步', + 'sync.active': '活跃', + 'sync.recent': '最近', + 'sync.idle': '空闲', + 'sync.memorySources': '记忆来源', + 'sync.noConnectedSources': '未连接任何来源', + 'sync.chunks': '个片段', + 'sync.lastChunk': '最后片段:', + 'sync.pending': '待处理', + 'sync.processed': '已处理', + 'sync.syncing': '同步中...', + 'sync.sync': '同步', + 'sync.failedToLoad': '加载失败', + 'sync.noContent': '无可用内容', + 'memorySources.title': '记忆来源', + 'memorySources.empty': '暂无记忆来源。添加一个来源即可开始注入记忆。', + 'memorySources.customSources': '自定义来源', + 'memorySources.addSource': '添加来源', + 'memorySources.noCustomSources': + '暂无自定义来源。添加文件夹、GitHub 仓库、RSS 订阅或网页即可开始。', + 'memorySources.loadingConnections': '正在加载连接…', + 'memorySources.noConnections': '未找到活跃的 Composio 连接。请先连接一个集成。', + 'memorySources.pickConnection': '选择连接', + 'memorySources.selectConnection': '— 选择连接 —', + 'memorySources.composioListFailed': '加载 Composio 连接失败。', + 'memorySources.browse': '浏览…', + 'memorySources.folderPathPlaceholder': '/Users/you/notes', + 'memorySources.globPatternPlaceholder': '**/*.md', + 'memorySources.repoUrlPlaceholder': 'https://github.com/org/repo', + 'memorySources.branchPlaceholder': 'main', + 'memorySources.feedUrlPlaceholder': 'https://example.com/feed.xml', + 'memorySources.pageUrlPlaceholder': 'https://example.com/article', + 'memorySources.cssSelectorPlaceholder': 'article', + 'memorySources.searchQueryPlaceholder': 'from:user AI safety', + 'memorySources.kind.composio': '集成', + 'memorySources.kind.folder': '本地文件夹', + 'memorySources.kind.github_repo': 'GitHub 仓库', + 'memorySources.kind.twitter_query': 'Twitter 搜索', + 'memorySources.kind.rss_feed': 'RSS 订阅', + 'memorySources.kind.web_page': '网页', + 'memorySources.sync.successTitle': '正在同步', + 'memorySources.sync.successMessage': '进度很快会显示。', + 'memorySources.sync.failedTitle': '同步失败:', + 'time.justNow': '刚刚', + 'time.secondsAgoSuffix': '秒前', + 'time.minutesAgoSuffix': '分钟前', + 'time.hoursAgoSuffix': '小时前', + 'time.daysAgoSuffix': '天前', + 'memorySources.pickKind': '要添加哪种来源?', + 'memorySources.backToKinds': '返回来源类型', + 'memorySources.label': '标签', + 'memorySources.labelPlaceholder': '我的研究笔记', + 'memorySources.add': '添加', + 'memorySources.adding': '正在添加…', + 'memorySources.added': '来源已添加', + 'memorySources.removed': '来源已移除', + 'memorySources.remove': '移除', + 'memorySources.enable': '启用', + 'memorySources.disable': '停用', + 'memorySources.toggleFailed': '切换失败', + 'memorySources.removeFailed': '移除失败', + 'memorySources.folderPath': '文件夹路径', + 'memorySources.globPattern': 'Glob 模式', + 'memorySources.repoUrl': '仓库 URL', + 'memorySources.branch': '分支', + 'memorySources.feedUrl': '订阅 URL', + 'memorySources.pageUrl': '页面 URL', + 'memorySources.cssSelector': 'CSS 选择器(可选)', + 'memorySources.searchQuery': '搜索查询', + 'backend.aiBackend': 'AI 后端', + 'backend.cloud': '云端', + 'backend.recommended': '推荐', + 'backend.cloudDescription': '快速、强大的模型托管在我们的服务器上。可立即使用。', + 'backend.privacyNote': '个人数据、消息或密钥绝不会发送到我们的服务器。', + 'backend.local': '本地', + 'backend.advanced': '高级', + 'backend.localDescription': '使用 Ollama 在本地运行模型。完全隐私,需要设置。', + 'backend.ramRecommended': '建议 16GB+ 内存', + 'subconscious.tasks': '个任务', + 'subconscious.ticks': '次滴答', + 'subconscious.last': '上次', + 'subconscious.failed': '失败', + 'subconscious.tickInterval': '滴答间隔', + 'subconscious.runNow': '立即运行', + 'subconscious.providerUnavailableTitle': '潜意识已暂停', + 'subconscious.providerSettings': 'AI 设置', + 'subconscious.approvalNeeded': '需要审批', + 'subconscious.requiresApproval': '需要审批', + 'subconscious.fixInConnections': '在连接中修复', + 'subconscious.goAhead': '继续执行', + 'subconscious.activeTasks': '活跃任务', + 'subconscious.noActiveTasks': '暂无活跃任务', + 'subconscious.default': '默认', + 'subconscious.addTaskPlaceholder': '添加新任务...', + 'subconscious.activityLog': '活动日志', + 'subconscious.noActivity': '暂无活动', + 'subconscious.decision.nothingNew': '无新内容', + 'subconscious.decision.completed': '已完成', + 'subconscious.decision.evaluating': '评估中', + 'subconscious.decision.waitingApproval': '等待审批', + 'subconscious.decision.failed': '失败', + 'subconscious.decision.cancelled': '已取消', + 'subconscious.decision.skipped': '已跳过', + 'actionable.complete': '完成', + 'actionable.dismiss': '忽略', + 'actionable.snooze': '稍后提醒', + 'actionable.new': '新', + 'stats.storage': '存储', + 'stats.files': '个文件', + 'stats.documents': '文档', + 'stats.today': '今天', + 'stats.namespaces': '命名空间', + 'stats.relations': '关系', + 'stats.firstMemory': '首条记忆', + 'stats.latest': '最新', + 'stats.sessions': '会话数', + 'stats.tokens': '个令牌', + 'bootCheck.invalidUrl': '请输入核心 URL。', + 'bootCheck.urlMustStartWith': 'URL 必须以 http:// 或 https:// 开头', + 'bootCheck.validUrlRequired': '请输入有效的 URL(例如 https://core.example.com/rpc)', + 'bootCheck.tokenRequired': '请输入核心认证令牌。', + 'bootCheck.chooseCoreMode': '选择核心模式', + 'bootCheck.connectToCore': '连接到你的核心', + 'bootCheck.desktopDescription': 'OpenHuman 需要一个运行中的核心才能工作。请选择连接方式。', + 'bootCheck.webDescription': + '网页版 OpenHuman 连接到由你控制的远程核心。请输入其 URL 和认证令牌,或安装桌面版在本地运行核心。', + 'bootCheck.preferDesktop': '更希望在自己的设备上运行一切?', + 'bootCheck.downloadDesktop': '下载桌面应用', + 'bootCheck.localRecommended': '本地(推荐)', + 'bootCheck.localDescription': '嵌入式核心在本设备上运行 — 最快,无需配置。', + 'bootCheck.cloudMode': '云端', + 'bootCheck.cloudDescription': '连接到自定义 URL 处的远程核心。', + 'bootCheck.coreRpcUrl': '核心 RPC URL', + 'bootCheck.rpcUrlPlaceholder': 'https://core.example.com/rpc', + 'bootCheck.authToken': '认证令牌', + 'bootCheck.bearerTokenPlaceholder': '远程核心上配置的 Bearer 令牌', + 'bootCheck.storedLocally': '仅存储在本设备上。远程核心必需 — 桌面版每次 RPC 都会以 ', + 'bootCheck.testing': '测试中…', + 'bootCheck.testConnection': '测试连接', + 'bootCheck.connectedOk': '已连接 ✓', + 'bootCheck.authFailed': '认证失败 — 请检查令牌(收到 401/403)。', + 'bootCheck.unreachablePrefix': '无法连接:', + 'bootCheck.checkingCore': '正在检查核心…', + 'bootCheck.cannotReach': '无法连接到核心', + 'bootCheck.cannotReachDesc': '核心进程无法访问。请尝试切换到其他模式。', + 'bootCheck.switchMode': '切换模式', + 'bootCheck.quit': '退出', + 'bootCheck.legacyDetected': '检测到旧版后台核心', + 'bootCheck.legacyDescription': + '此设备上正在运行一个单独安装的 OpenHuman 守护进程。必须先将其移除,嵌入式核心才能接管。', + 'bootCheck.removing': '正在移除…', + 'bootCheck.removeContinue': '移除并继续', + 'bootCheck.localNeedsRestart': '本地核心需要重启', + 'bootCheck.localNeedsRestartDesc': '本地核心版本与此应用构建版本不匹配。重启后将加载正确的版本。', + 'bootCheck.restarting': '正在重启…', + 'bootCheck.restartCore': '重启核心', + 'bootCheck.cloudNeedsUpdate': '云端核心需要更新', + 'bootCheck.cloudNeedsUpdateDesc': + '云端核心版本与此应用构建版本不匹配。请运行核心更新程序来解决此差异。', + 'bootCheck.updating': '正在更新…', + 'bootCheck.updateCloudCore': '更新云端核心', + 'bootCheck.versionCheckFailed': '核心版本检查失败', + 'bootCheck.versionCheckFailedDesc': + '核心正在运行但未暴露版本接口。它可能已过时。请重启或更新核心以继续。', + 'bootCheck.working': '正在执行…', + 'bootCheck.restartUpdateCore': '重启 / 更新核心', + 'bootCheck.unexpectedError': '意外的启动检查错误', + 'bootCheck.actionFailed': '操作失败 — 请重试。', + 'bootCheck.portConflictTitle': '无法启动应用引擎', + 'bootCheck.portConflictBody': + '另一个进程正在占用 OpenHuman 所需的网络端口。我们将尝试自动修复此问题。', + 'bootCheck.portConflictFixButton': '自动修复', + 'bootCheck.portConflictFixing': '修复中…', + 'bootCheck.portConflictFixFailed': '自动修复未成功。请重启您的计算机后重试。', + 'notifications.justNow': '刚刚', + 'notifications.minAgo': '{n} 分钟前', + 'notifications.hrAgo': '{n} 小时前', + 'notifications.dayAgo': '{n} 天前', + 'notifications.category.messages': '消息', + 'notifications.category.agents': '智能体', + 'notifications.category.skills': '技能', + 'notifications.category.system': '系统', + 'notifications.category.meetings': '会议', + 'notifications.category.reminders': '提醒', + 'notifications.category.important': '重要', + 'about.update.status.checking': '检查中...', + 'about.update.status.available': 'v{version} 可用', + 'about.update.status.availableNoVersion': '更新可用', + 'about.update.status.downloading': '下载中...', + 'about.update.status.readyToInstall': 'v{version} 已准备好安装', + 'about.update.status.readyToInstallNoVersion': '已准备好安装', + 'about.update.status.installing': '安装中...', + 'about.update.status.restarting': '重启中...', + 'about.update.status.upToDate': '已是最新版本', + 'about.update.status.error': '更新检查失败', + 'about.update.status.default': '检查更新', + 'welcome.connectionFailed': '连接失败: {status} {statusText}', + 'welcome.connectionFailedMsg': '连接失败: {message}', + 'welcome.continueLocally': '本地继续', 'welcome.continueLocallyExperimental': '本地继续(实验性)', + 'welcome.localSessionStarting': '正在启动本地会话...', + 'welcome.localSessionDesc': '使用离线本地配置文件,跳过 TinyHumans OAuth。', + 'chat.agentChatDesc': '与智能体进行直接对话。', + 'chat.modelPlaceholder': 'gpt-4o', + 'channels.activeRouteValue': '{channel} 通过 {authMode}', + 'privacy.dataKind.messages': '消息', + 'privacy.dataKind.agents': '智能体', + 'privacy.dataKind.skills': '技能', + 'privacy.dataKind.system': '系统', + 'privacy.dataKind.meetings': '会议', + 'privacy.dataKind.reminders': '提醒', + 'privacy.dataKind.important': '重要', + 'onboarding.enableLocalAI': '启用本地 AI', + 'onboarding.skills.status.available': '可用', + 'onboarding.skills.status.connected': '已连接', + 'onboarding.skills.status.connecting': '连接中', + 'onboarding.skills.status.error': '错误', + 'onboarding.skills.status.unavailable': '不可用', + 'composio.statusUnavailable': '状态不可用', + 'composio.authExpired': '授权已过期', + 'composio.reconnect': '重新连接', + 'composio.expiredAuthorization': '{name} 授权已过期', + 'composio.expiredDescription': + '重新连接以重新启用 {name} 工具。 OpenHuman 将保持此集成不可用,直到您刷新 OAuth 访问权限。', + 'composio.envVarOverrides': '已设置,将覆盖此设置。', + 'composio.previewBadge': '预览', + 'composio.previewTooltip': '代理集成即将推出 - 您可以连接,但代理尚无法使用此工具包。', + 'memory.day.sun': '日', + 'memory.day.mon': '一', + 'memory.day.tue': '二', + 'memory.day.wed': '三', + 'memory.day.thu': '四', + 'memory.day.fri': '五', + 'memory.day.sat': '六', + 'memory.ingesting': '摄取中', + 'memory.ingestionQueued': '排队中', + 'memory.ingestingTitle': '正在摄取 {title}', + 'mic.noAudioCaptured': '未捕获到音频', + 'mic.noSpeechDetected': '未检测到语音', + 'mic.lowConfidenceResult': '无法清楚地理解音频 — 请重试', + 'mic.failedToStopRecording': '停止录音失败: {message}', + 'mic.transcriptionFailed': '转录失败: {message}', + 'reflections.kind.retrospective': '回顾', + 'reflections.kind.derivedFact': '派生事实', + 'reflections.kind.moodInsight': '情绪洞察', + 'reflections.kind.relationshipInsight': '关系洞察', + 'graph.tooltip.summary': '摘要', + 'graph.tooltip.contact': '联系人', + 'localModel.usage.never': '从不', + 'localModel.usage.mediumLoad': '中等负载', + 'localModel.usage.lowLoad': '低负载', + 'localModel.usage.idleMode': '空闲模式', + 'localModel.rebootstrapComplete': '模型重新引导完成。', + 'localModel.modelsVerified': '本地模型已验证。', + 'accounts.addModal.allConnected': '全部已连接', + 'accounts.addModal.title': '添加账户', + 'accounts.respondQueue.empty': '队列为空', + 'accounts.respondQueue.hide': '隐藏回复队列', + 'accounts.respondQueue.loadFailed': '加载回复队列失败', + 'accounts.respondQueue.loading': '加载队列中…', + 'accounts.respondQueue.pending': '待处理', + 'accounts.respondQueue.show': '显示回复队列', + 'accounts.respondQueue.title': '回复队列', + 'accounts.webviewHost.almostReady': '即将就绪...', + 'accounts.webviewHost.loadTimeout': '网页视图加载超时', + 'accounts.webviewHost.loading': '正在加载 {providerName}...', + 'accounts.webviewHost.loadingAccount': '正在加载账户', + 'accounts.webviewHost.restoringSession': '正在恢复会话...', + 'accounts.webviewHost.retryLoading': '重试加载', + 'accounts.webviewHost.takingLonger': '{providerName} 加载时间比预期更长。', + 'accounts.webviewHost.timeoutHint': '超时提示', + 'app.connectionBadge.composio': 'Composio', + 'app.connectionBadge.messaging': '消息', + 'app.connectionIndicator.connected': '已连接到 OpenHuman AI', + 'app.connectionIndicator.connecting': '连接中', + 'app.connectionIndicator.coreOffline': '核心离线', + 'app.connectionIndicator.disconnected': '已断开', + 'app.connectionIndicator.offline': '离线', + 'app.connectionIndicator.reconnecting': '重新连接中…', + 'app.errorFallback.componentStack': '组件堆栈', + 'app.errorFallback.downloadLatest': '下载最新版本', + 'app.errorFallback.heading': '出现错误', + 'app.errorFallback.hint': '提示', + 'app.errorFallback.reloadApp': '重新加载应用', + 'app.errorFallback.subheading': '详情', + 'app.errorFallback.tryRecover': '尝试恢复', + 'app.localAiDownload.installing': '安装中...', + 'app.localAiDownload.preparing': '准备中...', + 'app.openhumanLink.accounts.continueWith': '使用 {label} 登录继续', + 'app.openhumanLink.accounts.done': '完成', + 'app.openhumanLink.accounts.intro': '简介', + 'app.openhumanLink.accounts.webviewNote': '网页视图说明', + 'app.openhumanLink.billing.openDashboard': '打开控制台', + 'app.openhumanLink.billing.stayOnTrial': '继续试用', + 'app.openhumanLink.billing.trialCredit': '试用配额', + 'app.openhumanLink.billing.trialDesc': '试用说明', + 'app.openhumanLink.defaultBody': '弹窗中尚未就绪。完成后打开完整设置页面', + 'app.openhumanLink.discord.intro': '简介', + 'app.openhumanLink.discord.openInvite': '打开邀请', + 'app.openhumanLink.discord.perk1': '福利 1', + 'app.openhumanLink.discord.perk2': '福利 2', + 'app.openhumanLink.discord.perk3': '福利 3', + 'app.openhumanLink.discord.perk4': '福利 4', + 'app.openhumanLink.done': '完成', + 'app.openhumanLink.loadingChannelSetup': '正在加载渠道设置', + 'app.openhumanLink.maybeLater': '稍后再说', + 'app.openhumanLink.notifications.asking': '正在请求系统权限…', + 'app.openhumanLink.notifications.blocked': '已被阻止', + 'app.openhumanLink.notifications.blockedStep1': '打开系统设置', + 'app.openhumanLink.notifications.blockedStep2': '找到 OpenHuman', + 'app.openhumanLink.notifications.blockedStep3': '开启通知权限', + 'app.openhumanLink.notifications.intro': '简介', + 'app.openhumanLink.notifications.promptHint': '提示', + 'app.openhumanLink.notifications.retry': '重试测试通知', + 'app.openhumanLink.notifications.send': '发送测试通知', + 'app.openhumanLink.notifications.sendFailed': '无法发送:{error}', + 'app.openhumanLink.notifications.sent': + '测试通知已发送。如果未收到,请前往「系统设置 → 通知 → OpenHuman」,开启「允许通知」并将横幅样式设置为「持续」。', + 'app.openhumanLink.skipForNow': '暂时跳过', + 'app.openhumanLink.telegramUnavailable': 'Telegram 不可用', + 'app.openhumanLink.title.accounts': '连接你的应用', + 'app.openhumanLink.title.billing': '账单与配额', + 'app.openhumanLink.title.discord': '加入社区', + 'app.openhumanLink.title.messaging': '连接聊天渠道', + 'app.openhumanLink.title.notifications': '允许通知', + 'app.persistRehydration.body': '正在恢复应用状态', + 'app.persistRehydration.heading': '加载中', + 'app.persistRehydration.resetCta': '重置中…', + 'app.persistRehydration.resetting': '重置中…', + 'app.routeLoading.initializing': '正在初始化 OpenHuman...', + 'app.update.currentlyOn': '{version}', + 'app.update.errorFallback': '更新时出现问题。', + 'app.update.header.default': '更新', + 'app.update.header.error': '更新失败', + 'app.update.header.installing': '正在安装更新', + 'app.update.header.readyToInstall': '更新已准备好安装', + 'app.update.header.restarting': '正在重启…', + 'app.update.later': '稍后', + 'app.update.newVersionReady': '新版本已准备好安装。', + 'app.update.progress.downloaded': '已下载', + 'app.update.progress.installing': '正在安装新版本…', + 'app.update.progress.restarting': '正在重新启动应用…', + 'app.update.progress.working': '{percent}%', + 'app.update.restartNote': '重启说明', + 'app.update.restartNow': '立即重启', + 'app.update.versionReady': '版本 {newVersion} 已准备好安装。', + 'channels.discord.accountLinked': '账户已关联', + 'channels.discord.connect': '连接', + 'channels.discord.linkTokenExpired': '关联令牌已过期,请重试。', + 'channels.discord.linkTokenInstruction': '{token}', + 'channels.discord.linkTokenLabel': '关联令牌', + 'channels.discord.linkTokenOnce': '一次性关联令牌', + 'channels.discord.picker.allPermissionsOk': '机器人在该频道拥有所有必要权限。', + 'channels.discord.picker.botNotInServers': '机器人未加入任何服务器', + 'channels.discord.picker.category': '分类', + 'channels.discord.picker.channel': '频道', + 'channels.discord.picker.checkingPermissions': '检查权限中', + 'channels.discord.picker.loadingChannels': '正在加载频道...', + 'channels.discord.picker.loadingServers': '正在加载服务器...', + 'channels.discord.picker.missingPermissions': '缺少权限', + 'channels.discord.picker.noChannels': '未找到文字频道', + 'channels.discord.picker.noServers': '未找到服务器', + 'channels.discord.picker.selectChannel': '选择频道', + 'channels.discord.picker.selectServer': '选择服务器', + 'channels.discord.picker.server': '服务器', + 'channels.discord.picker.serverChannelSelection': '服务器与频道选择', + 'channels.discord.savedRestartRequired': '频道已保存。重启应用以激活。', + 'channels.telegram.connect': '连接', + 'channels.telegram.managedDmConnecting': '正在连接私信', + 'channels.telegram.managedDmTimeout': '私信连接超时', + 'channels.telegram.reconnect': '重新连接', + 'channels.telegram.savedRestartRequired': '频道已保存。重启应用以激活。', + 'channels.web.alwaysAvailable': '始终可用', + 'chat.approval.approve': '批准', + 'chat.approval.alwaysAllow': '始终允许', + 'chat.approval.alwaysAllowHint': '不再询问此工具 — 将其加入始终允许列表', + 'chat.approval.deciding': '处理中…', + 'chat.approval.deny': '拒绝', + 'chat.approval.error': '无法记录你的决定 — 请重试。', + 'chat.approval.fallback': '智能体想要运行一项需要你批准的操作。', + 'chat.approval.title': '需要批准', + 'chat.approval.tool': '工具:', + 'channels.authMode.managed_dm': '使用 OpenHuman 登录', + 'channels.authMode.oauth': 'OAuth 登录', + 'channels.authMode.bot_token': '使用你自己的 Bot Token', + 'channels.authMode.api_key': '使用你自己的 API Key', + 'channels.fieldRequired': '{field} 是必填项', + 'channels.mcp.title': 'MCP 服务器', + 'channels.mcp.description': '浏览和管理扩展 AI 能力的 Model Context Protocol 服务器。', + 'channels.discord.displayName': 'Discord', + 'channels.discord.description': '通过 Discord 发送和接收消息。', + 'channels.discord.authMode.bot_token.description': '提供你自己的 Discord bot token。', + 'channels.discord.authMode.oauth.description': + '通过 OAuth 将 OpenHuman 机器人安装到你的 Discord 服务器。', + 'channels.discord.authMode.managed_dm.description': + '将你的个人 Discord 账户关联到 OpenHuman 机器人。', + 'channels.discord.fields.bot_token.label': '机器人代币', + 'channels.discord.fields.bot_token.placeholder': '你的 Discord bot token', + 'channels.discord.fields.guild_id.label': '服务器 (Guild) ID', + 'channels.discord.fields.guild_id.placeholder': '可选:限制到特定服务器', + 'channels.telegram.displayName': 'Telegram', + 'channels.telegram.description': '通过 Telegram 发送和接收消息。', + 'channels.telegram.authMode.managed_dm.description': '直接向 OpenHuman Telegram 机器人发送消息。', + 'channels.telegram.authMode.bot_token.description': + '从 @BotFather 获取你自己的 Telegram Bot token。', + 'channels.telegram.fields.bot_token.label': '机器人代币', + 'channels.telegram.fields.bot_token.placeholder': '123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11', + 'channels.telegram.fields.allowed_users.label': '允许的用户', + 'channels.telegram.fields.allowed_users.placeholder': '逗号分隔的 Telegram 用户名', + 'channels.telegram.remoteControlTitle': '远程控制 (Telegram)', + 'channels.telegram.remoteControlBody': + '从允许的 Telegram 聊天中,发送 /status、/sessions、/new 或 /help。模型路由仍然使用 /model 和 /models。', + 'channels.web.displayName': '网络', + 'channels.web.description': '通过内置的 Web UI 聊天。', + 'channels.web.authMode.managed_dm.description': '使用嵌入式 Web 聊天 — 无需设置。', + 'channels.yuanbao.connect': 'Connect', + 'channels.yuanbao.connecting': '连接中…', + 'channels.yuanbao.fieldRequired': '{field} 不能为空', + 'channels.yuanbao.reconnect': 'Reconnect', + 'channels.yuanbao.savedRestartRequired': '频道已保存。重启应用以激活。', + 'channels.yuanbao.unexpectedStatus': '意外的连接状态:{status}', + 'chat.unsubscribeApproval.approve': '批准并退订', + 'chat.unsubscribeApproval.approved': '✓ 已成功退订。', + 'chat.unsubscribeApproval.denied': '✕ 请求已拒绝。', + 'chat.unsubscribeApproval.deny': '拒绝', + 'chat.unsubscribeApproval.processing': '处理中...', + 'chat.unsubscribeApproval.title': '退订请求', + 'commandPalette.ariaLabel': '命令面板', + 'commandPalette.description': '描述', + 'commandPalette.label': '命令', + 'commandPalette.noResults': '无结果', + 'commandPalette.placeholder': '输入命令或搜索…', + 'commandPalette.searchAria': '搜索命令', + 'commandPalette.shortcutHint': '按 ? 查看所有快捷键', + 'commandPalette.title': '命令面板', + 'kbd.ariaLabel': '键盘快捷键:{shortcut}', + 'iosMascot.connectedTo': '连接到', + 'iosMascot.defaultPairedLabel': '桌面', + 'iosMascot.disconnect': '断开连接', + 'iosMascot.error.generic': '出了点问题。请再试一次。', + 'iosMascot.error.sendFailed': '发送失败。检查您的连接。', + 'iosMascot.pushToTalk': '一键通话', + 'iosMascot.sendMessage': '发送消息', + 'iosMascot.thinking': '想着……', + 'iosMascot.typeMessage': '输入消息...', + 'iosPair.connectedLoading': '已连接!正在加载...', + 'iosPair.connecting': '正在连接到桌面...', + 'iosPair.desktopLabel': '桌面', + 'iosPair.error.camera': '相机扫描失败。检查相机权限并重试。', + 'iosPair.error.connectionFailed': '连接失败。请确保桌面应用正在运行,然后重试。', + 'iosPair.error.invalidQr': '二维码无效。请确保您扫描的是 OpenHuman 配对码。', + 'iosPair.error.unreachableDesktop': '无法连接到桌面端。请确保两台设备均已联网,然后重试。', + 'iosPair.expired': 'QR code 已过期。要求桌面重新生成代码。', + 'iosPair.instructions': + '在桌面端打开 OpenHuman,前往「设置 > 设备」,点击「配对手机」以显示二维码。', + 'iosPair.retryScan': '重试扫描', + 'iosPair.scanQrCode': '扫描QR code', + 'iosPair.scannerOpening': '扫描仪打开...', + 'iosPair.step.openDesktop': '在桌面上打开 OpenHuman', + 'iosPair.step.openSettings': '转至设置 > 设备', + 'iosPair.step.showQr': '点击“配对手机”以显示 QR', + 'iosPair.title': '与您的桌面配对', + 'composio.connect.additionalConfigRequired': '需要额外配置', + 'composio.connect.atlassianSubdomainHint': '极致', + 'composio.connect.atlassianSubdomainLabel': 'Atlassian 子域名', + 'composio.connect.connect': '连接', + 'composio.connect.dynamicsOrgNameHint': + '例如,myorg.crm.dynamics.com 的组织名称为 "myorg"。仅输入简短的组织名称,而不是完整 URL。', + 'composio.connect.dynamicsOrgNameLabel': 'Dynamics 365 组织名称', + 'composio.connect.connectionFailed': '连接失败。', + 'composio.connect.disconnectFailed': '断开连接失败:{msg}', + 'composio.connect.disconnecting': '断开中…', + 'composio.connect.idleDescription': '连接你的', + 'composio.connect.idleDescriptionSuffix': + '账户。我们会打开浏览器窗口,你在其中授权后,应用会自动检测到该连接。', + 'composio.connect.isConnected': '已连接。', + 'composio.connect.manage': '管理', + 'composio.connect.needsFieldsPrefix': '若要连接', + 'composio.connect.needsFieldsSuffix': '我们需要一些额外信息。请填写下面缺失的字段并重试。', + 'composio.connect.needsSubdomain': '要连接', + 'composio.connect.needsSubdomainSuffix': + '请输入你的 Atlassian 子域名(例如 acme.atlassian.net 中的 acme),然后重试。', + 'composio.connect.oauthComplete': '等待完成 OAuth…', + 'composio.connect.oauthTimeout': 'OAuth 超时', + 'composio.connect.permissions': '权限', + 'composio.connect.permissionsDefault': '默认启用读写权限', + 'composio.connect.permissionsNote': '可暴露', + 'composio.connect.permissionsNoteSuffix': + 'OpenHuman 自身的智能体权限通过下方的读取、写入和管理员开关控制。', + 'composio.connect.reopenBrowser': '重新打开浏览器', + 'composio.connect.requestingUrl': '正在请求连接 URL…', + 'composio.connect.requiredFieldEmpty': '此字段为必填项。', + 'composio.connect.retryConnection': '重试连接', + 'composio.connect.scopeLoadError': '无法加载权限范围偏好:{msg}', + 'composio.connect.scopeSaveError': '无法保存 {key} 权限范围:{msg}', + 'composio.connect.scope.read': '阅读', + 'composio.connect.scope.readHint': '允许代理从此连接读取数据。', + 'composio.connect.scope.write': '写', + 'composio.connect.scope.writeHint': '允许代理通过此连接创建或修改数据。', + 'composio.connect.scope.admin': '管理员', + 'composio.connect.scope.adminHint': '允许代理管理设置、权限或破坏性操作。', + 'composio.connect.subdomainInvalid': + '仅输入短子域名(例如 "acme"),而非完整 URL。只能包含字母、数字和连字符。', + 'composio.connect.subdomainRequired': '请输入你的 Atlassian 子域名以继续。', + 'composio.connect.wabaIdHint': + '通过 Meta 访问令牌调用 GET /me/businesses,然后 GET /{business_id}/owned_whatsapp_business_accounts 获取。', + 'composio.connect.wabaIdLabel': 'WhatsApp 企业账户 ID', + 'composio.connect.wabaIdRequired': '请输入你的 WhatsApp 企业账户 ID(WABA ID)以继续。', + 'composio.connect.waitingFor': '等待中', + 'composio.connect.waitingHint': '请在浏览器中完成授权', + 'composio.triggers.heading': '触发器', + 'composio.triggers.listenFrom': '监听来自以下的事件', + 'composio.triggers.loadError': '无法加载触发器', + 'composio.triggers.needsConfiguration': '需要配置', + 'composio.triggers.noneAvailable': '当前没有可用的触发器:', + 'conversations.taskKanban.moveLeft': '向左移动', + 'conversations.taskKanban.moveRight': '向右移动', + 'conversations.taskKanban.title': '任务', + 'conversations.taskKanban.approval.default': '默认', + 'conversations.taskKanban.approval.notRequired': '无需审批', + 'conversations.taskKanban.approval.notRequiredBadge': '无需审批', + 'conversations.taskKanban.approval.required': '需要审批', + 'conversations.taskKanban.approval.requiredBadge': '需审批', + 'conversations.taskKanban.approval.requiredBeforeExecution': '执行前需要审批', + 'conversations.taskKanban.briefButton': '任务简报', + 'conversations.taskKanban.briefTitle': '任务简报', + 'conversations.taskKanban.closeBrief': '关闭任务简报', + 'conversations.taskKanban.field.acceptanceCriteria': '验收标准', + 'conversations.taskKanban.field.allowedTools': '允许的工具', + 'conversations.taskKanban.field.approval': '审批', + 'conversations.taskKanban.field.assignedAgent': '已分配智能体', + 'conversations.taskKanban.field.blocker': '阻碍项', + 'conversations.taskKanban.field.evidence': '证据', + 'conversations.taskKanban.field.notes': '备注', + 'conversations.taskKanban.field.objective': '目标', + 'conversations.taskKanban.field.plan': '计划', + 'conversations.taskKanban.field.status': '状态', + 'conversations.taskKanban.field.title': '标题', + 'conversations.taskKanban.saveChanges': '保存更改', + 'conversations.taskKanban.deleteCard': '删除', + 'conversations.taskKanban.updateFailed': '无法更新任务;更改未保存。', + 'conversations.toolTimeline.turn': '轮次', + 'conversations.toolTimeline.workerThread': '工作线程', + 'daemon.serviceBlockingGate.body': '核心服务不可用,请等待或下载最新版本。', + 'daemon.serviceBlockingGate.downloadHint': '下载最新版本', + 'daemon.serviceBlockingGate.downloadLatest': '下载最新版本', + 'daemon.serviceBlockingGate.retryCore': '重试 Core', + 'daemon.serviceBlockingGate.retryFailed': '重试失败。请下载最新应用版本后重试。', + 'daemon.serviceBlockingGate.retrying': '重试中...', + 'daemon.serviceBlockingGate.title': 'OpenHuman 核心不可用', + 'home.banners.discordSubtitle': '加入我们,获取最新资讯', + 'home.banners.discordTitle': '加入我们的 Discord', + 'home.banners.earlyBirdDismiss': '忽略早鸟横幅', + 'home.banners.earlyBirdFirstSub': '首次订阅。', + 'home.banners.earlyBirdOn': '早鸟优惠进行中', + 'home.banners.earlyBirdTitle': '前 1,000 名用户享 6 折优惠。', + 'home.banners.earlyBirdUseCode': '使用早鸟码', + 'home.banners.getSubscription': '获取订阅', + 'home.banners.promoCreditsBody': '你的促销配额已到账', + 'home.banners.promoCreditsTitle': '{amount}', + 'home.banners.promoCreditsUsage': '查看用量详情', + 'intelligence.memoryChunk.detail.chunk': '片段', + 'intelligence.memoryChunk.detail.copyChunkId': '复制片段 ID', + 'intelligence.memoryChunk.detail.embeddingInfo': 'bge-m3 1024 维', + 'intelligence.memoryChunk.detail.noEmbedding': '无嵌入', + 'intelligence.memoryChunk.letterhead.from': '来自', + 'intelligence.memoryChunk.letterhead.to': '至', + 'intelligence.memoryChunk.mentioned.chunkOne': '1 个片段', + 'intelligence.memoryChunk.mentioned.chunkOther': '{count} 个片段', + 'intelligence.memoryChunk.mentioned.heading': '提及', + 'intelligence.memoryChunk.scoreBars.ariaScore': '{name} 得分 {pct}%', + 'intelligence.memoryChunk.scoreBars.atThreshold': '阈值 {threshold}', + 'intelligence.memoryChunk.scoreBars.dropped': '已丢弃', + 'intelligence.memoryChunk.scoreBars.heading': '保留原因', + 'intelligence.memoryChunk.scoreBars.kept': '已保留', + 'intelligence.diagram.title': '架构图', + 'intelligence.diagram.description': '来自已配置图表端点的最新本地架构输出。', + 'intelligence.diagram.refresh': 'Refresh', + 'intelligence.diagram.refreshAria': '刷新图表', + 'intelligence.diagram.emptyTitle': '暂无可用图表', + 'intelligence.diagram.emptyDescription': '从编排器生成架构图,此面板将从已配置的本地端点刷新。', + 'intelligence.diagram.skillInstallCommand': 'npx skills add yizhiyanhua-ai/fireworks-tech-graph', + 'intelligence.diagram.promptExample': '以深色终端风格生成当前集群的架构图', + 'intelligence.diagram.imageAlt': '最新生成的 OpenHuman 架构图', + 'intelligence.diagram.refreshesEvery': '每 {seconds} 秒刷新', + 'intelligence.memoryText.entityTypePrefix': '实体类型', + 'intelligence.screenDebug.active': '活跃', + 'intelligence.screenDebug.app': '应用', + 'intelligence.screenDebug.bounds': '边界', + 'intelligence.screenDebug.captureAlt': '捕获测试结果', + 'intelligence.screenDebug.captureFailed': '失败', + 'intelligence.screenDebug.captureSuccess': '成功', + 'intelligence.screenDebug.captureTest': '捕获测试', + 'intelligence.screenDebug.capturing': '捕获中', + 'intelligence.screenDebug.frames': '帧数', + 'intelligence.screenDebug.idle': '空闲', + 'intelligence.screenDebug.lastApp': '上一个应用', + 'intelligence.screenDebug.mode': '模式', + 'intelligence.screenDebug.permAccessibility': '辅助功能权限', + 'intelligence.screenDebug.permInput': '输入监控权限', + 'intelligence.screenDebug.permScreen': '辅助功能', + 'intelligence.screenDebug.permissions': '权限', + 'intelligence.screenDebug.platformNotSupported': '平台不支持', + 'intelligence.screenDebug.recentVisionSummaries': '最近视觉摘要', + 'intelligence.screenDebug.session': '会话', + 'intelligence.screenDebug.size': '大小', + 'intelligence.screenDebug.status': '状态', + 'intelligence.screenDebug.testCapture': '测试捕获', + 'intelligence.screenDebug.time': '时间', + 'intelligence.screenDebug.title': '标题', + 'intelligence.screenDebug.unknown': '未知', + 'intelligence.screenDebug.visionQueue': '视觉队列', + 'intelligence.screenDebug.visionState': '视觉状态', + 'intelligence.tasks.activeBoardOne': '1 个跨对话的活跃看板', + 'intelligence.tasks.activeBoardOther': '{count} 个跨对话的活跃看板', + 'intelligence.tasks.empty': '暂无智能体任务看板', + 'intelligence.tasks.emptyHint': '完成一项对话后,任务看板将出现在这里。', + 'intelligence.tasks.failedToLoad': '加载失败', + 'intelligence.tasks.live': '实时', + 'intelligence.tasks.loadingBoards': '正在加载任务看板…', + 'intelligence.tasks.threadPrefix': '对话', + 'intelligence.tasks.subtitle': '整个工作区中的你的任务和智能体任务看板。', + 'intelligence.tasks.newTask': '新建任务', + 'intelligence.tasks.personalBoardTitle': '智能体任务', + 'intelligence.tasks.personalEmpty': '暂无个人任务', + 'intelligence.tasks.composer.title': '新建任务', + 'intelligence.tasks.composer.titleLabel': '标题', + 'intelligence.tasks.composer.titlePlaceholder': '需要完成什么?', + 'intelligence.tasks.composer.statusLabel': '状态', + 'intelligence.tasks.composer.attachLabel': '附加到对话', + 'intelligence.tasks.composer.attachNone': '个人(无对话)', + 'intelligence.tasks.composer.objectiveLabel': '目标', + 'intelligence.tasks.composer.objectivePlaceholder': '可选 — 期望的结果', + 'intelligence.tasks.composer.notesLabel': '备注', + 'intelligence.tasks.composer.notesPlaceholder': '可选备注', + 'intelligence.tasks.composer.create': '创建任务', + 'intelligence.tasks.composer.creating': '正在创建…', + 'intelligence.tasks.composer.createFailed': '无法创建任务', + 'notifications.card.dismiss': '忽略通知', + 'notifications.card.importanceTitle': '重要性', + 'notifications.center.empty': '暂无通知', + 'notifications.center.emptyHint': '新通知将出现在这里', + 'notifications.center.filterAll': '全部', + 'notifications.center.markAllRead': '全部标记已读', + 'notifications.center.title': '通知', + 'oauth.button.connecting': '连接中...', + 'oauth.button.loopbackTimeout': '登录超时 — 浏览器未完成 OAuth 跳转。请重试。', + 'oauth.login.continueWith': '继续使用', + 'onboarding.contextGathering.buildingDesc': '正在分析你的历史记录...', + 'onboarding.contextGathering.buildingProfile': '正在构建你的档案...', + 'onboarding.contextGathering.continueToChat': '前往对话', + 'onboarding.contextGathering.coreAlive': '核心可访问 — 首次启动可能需要一分钟。', + 'onboarding.contextGathering.coreAliveProbing': '正在检查核心连接…', + 'onboarding.contextGathering.coreUnreachable': '核心未响应。你可以继续,稍后再试。', + 'onboarding.contextGathering.errorDesc': + '我们暂时无法构建你的完整资料,但没关系——你可以继续,资料会随时间逐步完善。', + 'onboarding.contextGathering.stillWorkingDesc': + '我们正在预热本地模型与工具,首次启动可能需要 30–60 秒。你可以随时进入对话 — 档案构建会在后台继续进行。', + 'onboarding.contextGathering.stillWorkingTitle': '仍在生成你的档案…', + 'onboarding.contextGathering.title': '上下文收集', + 'openhuman.team_list_teams': '团队列表', + 'overlay.ariaAttention': '注意消息', + 'overlay.ariaCompanion': '伴侣已激活', + 'overlay.ariaOrb': 'OpenHuman 浮层', + 'overlay.ariaVoiceActive': '语音输入已激活', + 'overlay.companion.error': '错误', + 'overlay.companion.listening': '正在聆听…', + 'overlay.companion.pointing': '正在指向…', + 'overlay.companion.speaking': '正在说话…', + 'overlay.companion.thinking': '正在思考…', + 'overlay.orbTitle': '拖动以移动 · 双击重置位置', + 'pages.settings.account.connections': '连接', + 'pages.settings.account.connectionsDesc': '管理已连接的账户和服务', + 'pages.settings.account.migration': '从其他助手导入', + 'pages.settings.account.migrationDesc': + '将 OpenClaw(即将支持 Hermes)的记忆和笔记迁移到此工作区。', + 'pages.settings.account.privacy': '隐私', + 'pages.settings.account.privacyDesc': '控制哪些数据离开你的设备', + 'pages.settings.account.recoveryPhrase': '恢复短语', + 'pages.settings.account.recoveryPhraseDesc': '查看并备份你的恢复短语', + 'pages.settings.account.team': '团队', + 'pages.settings.account.teamDesc': '管理团队成员和权限', + 'pages.settings.accountSection.description': '恢复短语、团队、连接与隐私设置。', + 'pages.settings.accountSection.title': '账户', + 'pages.settings.ai.llm': '语言模型', + 'pages.settings.ai.llmDesc': '选择并配置语言模型提供商', + 'pages.settings.ai.voice': '语音', + 'pages.settings.ai.voiceDesc': '配置语音输入和输出', + 'pages.settings.aiSection.description': '语言模型提供商、本地 Ollama 以及语音(STT / TTS)。', + 'pages.settings.aiSection.title': 'AI', + 'pages.settings.composioSection.title': 'Composio', + 'pages.settings.composioSection.description': + '由 Composio 提供支持的集成的路由、触发器和历史记录。', + 'settings.developerMenu.composio.title': 'Composio', + 'settings.developerMenu.composio.desc': '路由模式、集成触发器和触发器历史存档。', + 'pages.settings.features.desktopCompanion': '桌面伴侣', + 'pages.settings.features.desktopCompanionDesc': + '具有屏幕感知能力的语音助手 — 倾听、观看、说话、指向', + 'pages.settings.features.messagingChannels': '消息渠道', + 'pages.settings.features.messagingChannelsDesc': '配置消息渠道和集成', + 'pages.settings.features.notifications': '通知', + 'pages.settings.features.notificationsDesc': '管理通知偏好', + 'pages.settings.features.screenAwareness': '屏幕感知', + 'pages.settings.features.screenAwarenessDesc': '让助手感知你的屏幕内容', + 'pages.settings.features.tools': '工具', + 'pages.settings.features.toolsDesc': '管理已连接的工具和集成', + 'pages.settings.featuresSection.description': '屏幕感知、消息和工具。', + 'pages.settings.featuresSection.title': '功能', + 'privacy.dataKind.credentials': '凭据', + 'privacy.dataKind.derived': '派生数据', + 'privacy.dataKind.diagnostics': '诊断信息', + 'privacy.dataKind.metadata': '元数据', + 'privacy.dataKind.raw': '原始数据', + 'privacy.whatLeaves.link.label': '哪些数据会离开我的电脑?', + 'rewards.community.achievementsUnlocked': '已解锁 {unlocked}/{total} 项成就', + 'rewards.community.connectDiscord': '连接 Discord', + 'rewards.community.cumulativeTokens': '累计令牌', + 'rewards.community.currentStreak': '当前连续天数', + 'rewards.community.discordLinkedNotInGuild': '已关联 Discord 但未加入服务器', + 'rewards.community.discordMember': '已加入服务器', + 'rewards.community.discordNotLinked': '未关联 Discord', + 'rewards.community.discordServer': 'Discord 服务器', + 'rewards.community.discordStatusUnavailable': 'Discord 状态不可用', + 'rewards.community.discordWaiting': '等待 Discord 验证', + 'rewards.community.heroSubtitle': '完成任务,赚取奖励', + 'rewards.community.heroTitle': '社区奖励', + 'rewards.community.joinDiscord': '加入 Discord', + 'rewards.community.loadingRewards': '正在加载奖励…', + 'rewards.community.locked': '已解锁', + 'rewards.community.retrying': '重试中…', + 'rewards.community.rolesAndRewards': '角色与奖励', + 'rewards.community.streakDays': '{n} 天', + 'rewards.community.syncPending': '奖励同步待处理', + 'rewards.community.syncPendingDesc': '奖励同步正在进行中,请稍后查看。', + 'rewards.community.syncUnavailable': '同步不可用', + 'rewards.community.tryAgain': '重试中…', + 'rewards.community.unknown': '未知', + 'rewards.community.unlocked': '已解锁', + 'rewards.community.yourProgress': '你的进度', + 'rewards.coupon.colCode': '代码', + 'rewards.coupon.colRedeemed': '兑换时间', + 'rewards.coupon.colReward': '奖励', + 'rewards.coupon.colStatus': '状态', + 'rewards.coupon.loadingHistory': '正在加载奖励历史…', + 'rewards.coupon.noCodes': '尚未兑换任何奖励码。', + 'rewards.coupon.pending': '处理中', + 'rewards.coupon.placeholder': '优惠码', + 'rewards.coupon.promoCredits': '促销配额', + 'rewards.coupon.recentRedemptions': '最近兑换', + 'rewards.coupon.redeemAccepted': '{code} 已接受。完成所需操作后将解锁 {amount}。', + 'rewards.coupon.redeemButton': '兑换码', + 'rewards.coupon.redeemSuccess': '{code} 已兑换。{amount} 已添加至你的额度。', + 'rewards.coupon.redeemedCodes': '已兑换代码', + 'rewards.coupon.redeeming': '兑换中...', + 'rewards.coupon.statusApplied': '已应用', + 'rewards.coupon.statusPendingAction': '待操作', + 'rewards.coupon.statusRedeemed': '已兑换', + 'rewards.coupon.subtitle': '输入优惠码以兑换奖励', + 'rewards.coupon.title': '兑换优惠码', + 'rewards.referralSection.activity': '邀请活动', + 'rewards.referralSection.apply': '应用中…', + 'rewards.referralSection.applying': '应用中…', + 'rewards.referralSection.colReferredUser': '被邀请用户', + 'rewards.referralSection.colReward': '奖励', + 'rewards.referralSection.colStatus': '状态', + 'rewards.referralSection.colUpdated': '更新时间', + 'rewards.referralSection.completed': '已完成', + 'rewards.referralSection.copyCode': '复制邀请码', + 'rewards.referralSection.copyFailed': '复制失败', + 'rewards.referralSection.haveCode': '有邀请码?', + 'rewards.referralSection.haveCodeDesc': '输入好友的邀请码,双方均可获得奖励。', + 'rewards.referralSection.linked': '已关联', + 'rewards.referralSection.linkedCode': '已关联邀请码', + 'rewards.referralSection.loading': '正在加载邀请计划…', + 'rewards.referralSection.retry': '重试', + 'rewards.referralSection.noReferrals': '暂无邀请记录', + 'rewards.referralSection.pendingReferrals': '待处理邀请', + 'rewards.referralSection.placeholder': '邀请码', + 'rewards.referralSection.share': '分享', + 'rewards.referralSection.statusCompleted': '已完成', + 'rewards.referralSection.statusExpired': '已过期', + 'rewards.referralSection.statusJoined': '已加入', + 'rewards.referralSection.subtitle': '邀请好友,双方均可获得配额奖励', + 'rewards.referralSection.title': '邀请好友,赚取配额', + 'rewards.referralSection.totalEarned': '总获得', + 'rewards.referralSection.yourCode': '你的邀请码', + 'settings.ai.addCloudProvider': '添加云端提供商', + 'settings.ai.addProvider': '保存中…', + 'settings.ai.apiKeyFieldLabel': 'API 密钥', + 'settings.ai.apiKeyRequired': '请粘贴你的 API 密钥以继续。', + 'settings.ai.apiKeyStoredEncrypted': 'API 密钥已加密存储', + 'settings.ai.apiKeysEncrypted': 'auth-profiles.json', + 'settings.ai.clearStoredKey': '清除已存储的密钥', + 'settings.ai.connectProvider': '连接 {label}', + 'settings.ai.customRouting': '自定义路由', + 'settings.ai.defaultResolvesTo': '默认解析为', + 'settings.ai.discard': '放弃', + 'settings.ai.editProvider': '编辑提供商', + 'settings.ai.llmProviders': 'LLM 提供商', + 'settings.ai.llmProvidersDesc': '配置你的语言模型提供商', + 'settings.ai.localOllama': '本地(Ollama)', + 'settings.ai.modelLabel': '模型', + 'settings.ai.noCustomProviders': '未配置自定义提供商', + 'settings.ai.openAiCompat.authHeaderExample': '授权:持有者<您的密钥>', + 'settings.ai.openAiCompat.authHeaderLabel': '验证标头', + 'settings.ai.openAiCompat.baseUrlLabel': '基础 URL', + 'settings.ai.openAiCompat.baseUrlUnavailable': '不可用', + 'settings.ai.openAiCompat.clearKey': '清除键', + 'settings.ai.openAiCompat.description': + '将本地测试工具指向此 /v1 服务器,即可通过下方配置的提供商进行路由。身份验证使用你在此处设置的稳定密钥,而不是应用内部的 core bearer。', + 'settings.ai.openAiCompat.keyConfigured': '按键已配置', + 'settings.ai.openAiCompat.keyRequired': '需要钥匙', + 'settings.ai.openAiCompat.rotateKey': '旋转钥匙', + 'settings.ai.openAiCompat.setKey': '设置键', + 'settings.ai.openAiCompat.title': 'OpenAI 兼容端点', + 'settings.ai.providerLabel': '提供商', + 'skills.mcpComingSoon.title': 'MCP 服务器', + 'skills.mcpComingSoon.description': + 'MCP 服务器管理即将推出。此标签页将成为发现、连接和监控 MCP 服务器集成的中心。', + 'settings.ai.routing': '路由', + 'settings.ai.routingCustom': '自定义路由', + 'settings.ai.routingDefault': '默认', + 'settings.ai.routingDesc': '为不同工作负载选择路由策略', + 'settings.ai.saveChanges': '保存中…', + 'settings.ai.saving': '保存中…', + 'settings.ai.unsavedChange': '未保存的更改', + 'settings.ai.unsavedChanges': '未保存的更改', + 'settings.ai.workloadGroupBackground': '后台工作负载', + 'settings.ai.workloadGroupChat': '对话工作负载', + 'settings.ai.disconnectProvider': '断开 {label}', + 'settings.ai.connectProviderLabel': '连接 {label}', + 'settings.ai.defaultLocalEndpoint': 'http://localhost:11434/v1', + 'settings.ai.endpointUrlLabel': '端点 URL', + 'settings.ai.localRuntimeHelper': + '{label} 可访问的位置。默认是 localhost;如需使用共享实例,可指向远程主机(例如 http://10.0.0.4:11434/v1)。', + 'settings.ai.endpointUrlRequired': '端点 URL 是必需的。', + 'settings.ai.endpointProtocolRequired': '端点必须以 http:// 或 https:// 开头。', + 'settings.ai.connectProviderDialog': '连接 {label}', + 'settings.ai.or': '或者', + 'settings.ai.openRouterOauthDescription': + '使用 OpenRouter 登录,并通过 PKCE 导入由用户控制的 API 密钥。', + 'settings.ai.connecting': '正在连接...', + 'settings.ai.backgroundLoops': '背景循环', + 'settings.ai.backgroundLoopsDesc': + '查看没有聊天消息时运行的内容,暂停心跳任务,并检查最近的额度账本行。', + 'settings.ai.heartbeatControls': '心跳控制', + 'settings.ai.heartbeatControlsDesc': '默认关闭。启用会启动循环;禁用会中止正在运行的任务。', + 'settings.ai.heartbeatLoop': '心跳循环', + 'settings.ai.heartbeatLoopDesc': '规划器和可选潜意识推理的主调度器。', + 'settings.ai.subconsciousInference': '潜意识推理', + 'settings.ai.subconsciousInferenceDesc': '在心跳 tick 上运行由模型支持的任务/反思评估。', + 'settings.ai.calendarMeetingChecks': '日历会议检查', + 'settings.ai.calendarMeetingChecksDesc': '为活跃的 Google Calendar 连接调用日历事件列表。', + 'settings.ai.calendarCap': '日历帽', + 'settings.ai.connectionsPerTick': '{count} 个连接/tick', + 'settings.ai.meetingLookahead': '会议前瞻', + 'settings.ai.minutesShort': '{count} 分钟', + 'settings.ai.reminderLookahead': '提醒前瞻', + 'settings.ai.cronReminderChecks': 'Cron 提醒检查', + 'settings.ai.cronReminderChecksDesc': '扫描启用的 cron 作业以查找类似提醒的即将发生的项目。', + 'settings.ai.relevantNotificationChecks': '相关通知检查', + 'settings.ai.relevantNotificationChecksDesc': '将紧急本地通知提升为主动提醒。', + 'settings.ai.externalDelivery': '外部交付', + 'settings.ai.externalDeliveryDesc': '允许心跳提醒向外部渠道发送主动消息。', + 'settings.ai.interval': '间隔', + 'settings.ai.running': '运行...', + 'settings.ai.plannerTickNow': '规划师立即勾选', + 'settings.ai.loadingHeartbeatControls': '正在加载心跳控制...', + 'settings.ai.heartbeatControlsUnavailable': '心跳控制不可用。', + 'settings.ai.loopMap': '循环地图', + 'settings.ai.plannerSummary': + '规划器:{sourceEvents} 源事件,{sent} 已发送,{deduped} 已删除重复数据。', + 'settings.ai.routeLabel': '路线: {route}', + 'settings.ai.on': '上', + 'settings.ai.off': '关闭', + 'settings.ai.recentUsageLedger': '最近使用分类账', + 'settings.ai.recentUsageLedgerDesc': '后端行会公开今天的操作/时间;来源标签需要后端支持。', + 'settings.ai.latestSpend': '最新支出:{amount},于 {time} ({action})', + 'settings.ai.topActions': '热门行动', + 'settings.ai.noSpendRows': '未加载支出行。', + 'settings.ai.topHours': '高峰时段', + 'settings.ai.noHourlySpend': '还没有每小时支出。', + 'settings.ai.openhumanDefault': 'OpenHuman(默认)', + 'settings.ai.localModelResolved': 'Ollama · {model}', + 'settings.ai.customRoutingForWorkload': '{label} 的自定义路由', + 'settings.ai.loadingModels': '正在加载模型...', + 'settings.ai.enterModelIdManually': '或手动输入型号 ID:', + 'settings.ai.modelIdPlaceholderForProvider': '{slug} 型号 ID', + 'settings.ai.modelIdPlaceholder': 'model-id', + 'settings.ai.selectModel': '选择型号...', + 'settings.ai.temperatureOverride': '温度超控', + 'settings.ai.temperatureOverrideSlider': '温度超控(滑块)', + 'settings.ai.temperatureOverrideValue': '温度超控(值)', + 'settings.ai.temperatureOverrideDesc': '值越低,结果越确定。保持未勾选则使用提供商默认值。', + 'settings.ai.testFailed': '测试失败', + 'settings.ai.testingModel': '测试模型...', + 'settings.ai.modelResponse': '模型响应', + 'settings.ai.providerWithValue': '提供者:{value}', + 'settings.ai.noneDash': '—', + 'settings.ai.promptHelloWorld': '提示:你好世界', + 'settings.ai.startedAt': '开始: {value}', + 'settings.ai.waitingForModelResponse': '正在等待所选型号的响应...', + 'settings.ai.response': '回应', + 'settings.ai.testing': '测试...', + 'settings.ai.test': '测试', + 'settings.ai.slugMissingError': '输入提供商名称以生成 slug。', + 'settings.ai.slugInUseError': '该提供商名称已被使用。', + 'settings.ai.slugReservedError': '选择不同的提供商名称。', + 'settings.ai.providerNamePlaceholder': '我的提供商', + 'settings.ai.slugLabel': '蛞蝓:', + 'settings.ai.openAiUrlLabel': 'OpenAI URL', + 'settings.ai.openAiUrlPlaceholder': 'https://api.openai.com/v1', + 'settings.ai.keepExistingKeyPlaceholder': '留空以保留现有密钥', + 'settings.ai.reindexingMemory': '重新索引内存', + 'settings.ai.reindexingMemoryMessage': + '嵌入正在重新处理。{pending} 个记忆项正使用当前模型重新嵌入;完成前语义召回会降低。关键词搜索仍可使用,即使关闭此页面,重新嵌入也会在后台继续。', + 'settings.ai.signInWithOpenRouter': '使用 OpenRouter 登录', + 'settings.ai.weekBudget': '周预算', + 'settings.ai.cycleRemaining': '剩余周期', + 'settings.ai.cycleTotalSpend': '周期总支出', + 'settings.ai.avgSpendRow': '平均支出行', + 'settings.ai.backgroundApiReads': '后台 API 读取', + 'settings.ai.backgroundWakeups': '背景唤醒', + 'settings.ai.budgetMath': '预算数学', + 'settings.ai.rowsLeft': '剩余行数', + 'settings.ai.rowsPerFullWeekBudget': '每整周预算的行数', + 'settings.ai.sampleBurnRate': '样品燃烧率', + 'settings.ai.projectedEmpty': '预计空', + 'settings.ai.apiReadsPerDollarRemaining': 'API 每 $ 剩余读取次数', + 'settings.ai.loopCallBudget': '循环呼叫预算', + 'settings.ai.heartbeatTicks': '心跳滴答声', + 'settings.ai.calendarPlannerCalls': '日历规划师来电', + 'settings.ai.calendarFanoutCap': '日历扇出帽', + 'settings.ai.subconsciousModelCalls': '潜意识模型调用', + 'settings.ai.composioSyncScans': 'Composio 同步扫描', + 'settings.ai.totalBackgroundApiReadBudget': '后台 API 读取总预算', + 'settings.ai.memoryWorkerPolls': '内存工作者民意调查', + 'settings.ai.defaultProviderName': 'OpenHuman', + 'settings.ai.routing.managed': '托管', + 'settings.ai.routing.managedDesc': + 'OpenHuman 会在云端运行所有推理,为任务选择最佳模型,优化成本,并保持最安全的路由默认值。', + 'settings.ai.routing.managedMsg': + 'OpenHuman 会处理每个工作负载的全部推理,并自动选择兼顾成本、质量和安全性的最佳路线。', + 'settings.ai.routing.useYourOwn': '使用您自己的模型', + 'settings.ai.routing.useYourOwnDesc': + '选择一个提供商 + 模型,并让每个工作负载都通过它路由。这样更简单,但轻量和重量级推理共用同一路由,可能效率较低。', + 'settings.ai.routing.advanced': '高级', + 'settings.ai.routing.advancedDesc': + '为不同任务选择不同模型。这是严格成本优化和最大控制力的最佳选项。', + 'settings.ai.routing.customDesc': + '细粒度路由可提供最佳成本优化和最高控制力。使用下方各行决定哪些工作负载保持托管、哪些使用共享默认值、哪些固定到特定模型。', + 'settings.ai.routing.chatAndConversations': '聊天和对话', + 'settings.ai.routing.chatDesc': '用于直接用户交互、回复、推理、智能体循环和编码帮助的模型。', + 'settings.ai.routing.backgroundTasks': '后台任务', + 'settings.ai.routing.bgTasksDesc': '在主对话流程之外用于总结、心跳、学习和潜意识评估的模型。', + 'settings.ai.routing.addCustomProvider': '添加自定义提供商', + 'settings.ai.globalModel.title': '为所有事情选择一种型号', + 'settings.ai.globalModel.desc': + '这会让所有推理都通过一个模型路由。它更简单,但轻量和重型任务都使用同一路由,可能不利于成本和质量。', + 'settings.ai.globalModel.noProviders': + '请先添加或连接提供商。然后你可以在此将每个工作负载路由到一个模型。', + 'settings.ai.globalModel.provider': '提供者', + 'settings.ai.globalModel.model': '型号', + 'settings.ai.globalModel.loadingModels': '正在加载模型...', + 'settings.ai.globalModel.enterModelId': '输入型号 ID', + 'settings.ai.globalModel.appliesToAll': + '将同一个提供商 + 模型应用于聊天、推理、编码、记忆、心跳、学习和潜意识。嵌入单独配置。点击保存后更改会保存。', + 'settings.ai.globalModel.saving': '正在保存...', + 'settings.ai.globalModel.saved': '已保存', + 'settings.ai.workload.noModel': '未选择型号', + 'settings.ai.workload.changeModel': '改变模型', + 'settings.ai.workload.chooseModel': '选择型号', + 'settings.ai.provider.ollama': 'Ollama', + 'settings.autocomplete.appFilter.acceptSuggestion': '接受建议', + 'settings.autocomplete.appFilter.app': '应用程序', + 'settings.autocomplete.appFilter.currentSuggestion': '当前建议', + 'settings.autocomplete.appFilter.contextOverride': '上下文覆盖(可选)', + 'settings.autocomplete.appFilter.debounce': '去抖动', + 'settings.autocomplete.appFilter.debugFocus': '调试焦点', + 'settings.autocomplete.appFilter.enabled': '启用', + 'settings.autocomplete.appFilter.getSuggestion': '获取建议', + 'settings.autocomplete.appFilter.lastError': '最后一个错误', + 'settings.autocomplete.appFilter.liveLogs': '实时日志', + 'settings.autocomplete.appFilter.model': '型号', + 'settings.autocomplete.appFilter.noLogs': '无日志', + 'settings.autocomplete.appFilter.phase': '阶段', + 'settings.autocomplete.appFilter.platformSupported': '支持平台', + 'settings.autocomplete.appFilter.refreshStatus': '刷新中…', + 'settings.autocomplete.appFilter.refreshing': '刷新中…', + 'settings.autocomplete.appFilter.running': '跑步', + 'settings.autocomplete.appFilter.runtime': '运行时', + 'settings.autocomplete.appFilter.test': '测试', + 'settings.autocomplete.completionStyle.acceptedCompletion': + '已存储接受的补全记录,用于个性化后续建议。', + 'settings.autocomplete.completionStyle.acceptedCompletions': + '已存储接受的补全记录,用于个性化后续建议。', + 'settings.autocomplete.completionStyle.clearHistory': '清除中…', + 'settings.autocomplete.completionStyle.clearing': '清除中…', + 'settings.autocomplete.completionStyle.debounce': '防抖(ms)', + 'settings.autocomplete.completionStyle.enabled': '已启用', + 'settings.autocomplete.completionStyle.maxChars': '最大字符数', + 'settings.autocomplete.completionStyle.noHistory': + '暂无接受的补全记录。用 Tab 键接受建议以开始个性化。', + 'settings.autocomplete.completionStyle.overlayTtl': '浮层显示时长(ms)', + 'settings.autocomplete.completionStyle.personalizationHistory': '个性化历史', + 'settings.autocomplete.completionStyle.styleExamples': '风格示例(每行一条)', + 'settings.autocomplete.completionStyle.styleInstructions': '风格说明', + 'settings.autocomplete.debug.acceptedPrefix': '已接受:{value}', + 'settings.autocomplete.debug.acceptFailed': '未能接受建议', + 'settings.autocomplete.debug.alreadyRunning': '自动完成功能已在运行。', + 'settings.autocomplete.debug.clearHistoryFailed': '清除历史记录失败', + 'settings.autocomplete.debug.didNotStart': '自动完成功能未启动。', + 'settings.autocomplete.debug.disabledInSettings': '设置中禁用自动完成功能。首先启用它并保存。', + 'settings.autocomplete.debug.fetchSuggestionFailed': '无法获取当前建议', + 'settings.autocomplete.debug.inspectFocusedElementFailed': '无法检查聚焦元素', + 'settings.autocomplete.debug.loadSettingsFailed': '无法加载自动完成设置', + 'settings.autocomplete.debug.noSuggestionApplied': '没有应用任何建议。', + 'settings.autocomplete.debug.noSuggestionReturned': '没有返回任何建议。', + 'settings.autocomplete.debug.refreshStatusFailed': '无法刷新自动完成状态', + 'settings.autocomplete.debug.saveAdvancedSettingsFailed': '无法保存高级设置', + 'settings.autocomplete.debug.startFailed': '无法启动自动完成', + 'settings.autocomplete.debug.stopFailed': '无法停止自动完成', + 'settings.autocomplete.debug.suggestionPrefix': '建议:{value}', + 'settings.autocomplete.shared.none': '无', + 'settings.autocomplete.shared.notApplicable': '不适用', + 'settings.autocomplete.shared.unknown': '未知', + 'settings.billing.autoRecharge.addAmount': '充入此金额', + 'settings.billing.autoRecharge.addCard': '添加银行卡', + 'settings.billing.autoRecharge.amountHint': '最低充值金额', + 'settings.billing.autoRecharge.defaultCard': '默认银行卡', + 'settings.billing.autoRecharge.lastRechargeFailed': '上次充值失败', + 'settings.billing.autoRecharge.lastRecharged': '上次充值时间', + 'settings.billing.autoRecharge.expires': '过期 {date}', + 'settings.billing.autoRecharge.noCards': '未添加银行卡', + 'settings.billing.autoRecharge.paymentMethods': '支付方式', + 'settings.billing.autoRecharge.rechargeInProgress': '充值进行中', + 'settings.billing.autoRecharge.spentThisWeek': '本周使用的 ${limit} 中的 ${spent}', + 'settings.billing.autoRecharge.rechargeWhen': '余额低于以下金额时自动充值', + 'settings.billing.autoRecharge.saveSettings': '保存中…', + 'settings.billing.autoRecharge.saving': '保存中…', + 'settings.billing.autoRecharge.setDefault': '设为默认', + 'settings.billing.autoRecharge.subtitle': '余额不足时自动充值,确保服务不中断', + 'settings.billing.autoRecharge.title': '启用自动充值', + 'settings.billing.autoRecharge.toggleAriaLabel': '切换自动充值', + 'settings.billing.autoRecharge.weeklyLimit': '每周消费限额', + 'settings.billing.history.desc': '查看你的账单历史', + 'settings.billing.history.empty': '暂无账单记录', + 'settings.billing.history.openPortal': '打开账单门户', + 'settings.billing.history.posted': '已记账', + 'settings.billing.history.title': '账单历史', + 'settings.billing.inferenceBudget.cycleEnds': '周期结束', + 'settings.billing.inferenceBudget.exhausted': '已用尽', + 'settings.billing.inferenceBudget.loadError': '无法加载预算信息', + 'settings.billing.inferenceBudget.noBudgetDesc': '暂无预算配置', + 'settings.billing.inferenceBudget.noRecurringBudget': '无周期性预算', + 'settings.billing.inferenceBudget.noRecurringPlanBudget': '无经常性计划预算', + 'settings.billing.inferenceBudget.noRecurringWeeklyDesc': + '你当前的方案不包含每周循环推理预算。用量将改从可用额度中支付。', + 'settings.billing.inferenceBudget.remaining': '剩余', + 'settings.billing.inferenceBudget.remainingSummary': '剩余 {remaining} / {budget}', + 'settings.billing.inferenceBudget.spentThisCycle': '本周期花费 {amount}', + 'settings.billing.inferenceBudget.cycleEndsOn': '循环结束 {date}', + 'settings.billing.inferenceBudget.exhaustedDesc': + '订阅包含的用量已耗尽。充值额度即可继续使用 AI,无需等待下个周期。', + 'settings.billing.inferenceBudget.discountVsPayg': '每次通话比即用即付便宜 {pct}%。', + 'settings.billing.inferenceBudget.cycleSpend': '周期支出', + 'settings.billing.inferenceBudget.totalAmount': '{amount} 总计', + 'settings.billing.inferenceBudget.inference': '推理', + 'settings.billing.inferenceBudget.integrations': '集成', + 'settings.billing.inferenceBudget.calls': '{count} 调用', + 'settings.billing.inferenceBudget.dailySpend': '日常消费', + 'settings.billing.inferenceBudget.dailySpendPoint': '{date}:{amount}', + 'settings.billing.inferenceBudget.topModels': '顶级模特', + 'settings.billing.inferenceBudget.noInferenceUsage': '本周期没有推理使用。', + 'settings.billing.inferenceBudget.topIntegrations': '顶级集成', + 'settings.billing.inferenceBudget.noIntegrationUsage': '本周期没有集成使用。', + 'settings.billing.inferenceBudget.tenHourCap': '10 小时上限', + 'settings.billing.inferenceBudget.title': '推理预算', + 'settings.billing.inferenceBudget.unableToLoad': '无法加载使用数据', + 'settings.billing.inferenceBudget.notAvailable': '不适用', + 'settings.billing.payAsYouGo.available': '可用余额', + 'settings.billing.payAsYouGo.chargeCustomAmount': '打开中…', + 'settings.billing.payAsYouGo.chooseTopUpDesc': '选择充值金额', + 'settings.billing.payAsYouGo.chooseTopUpTitle': '充值余额', + 'settings.billing.payAsYouGo.creditBalanceDesc': '你当前的配额余额', + 'settings.billing.payAsYouGo.creditBalanceTitle': '配额余额', + 'settings.billing.payAsYouGo.customAmount': '自定义金额', + 'settings.billing.payAsYouGo.enterAmount': '输入金额', + 'settings.billing.payAsYouGo.opening': '打开中…', + 'settings.billing.payAsYouGo.promotionalCredits': '促销配额', + 'settings.billing.payAsYouGo.topUpBalance': '充值余额', + 'settings.billing.payAsYouGo.topUpCredits': '充值配额', + 'settings.billing.payAsYouGo.unableToLoad': '无法加载余额。', + 'settings.billing.subscription.annual': '年付', + 'settings.billing.subscription.billedAnnually': '按年计费', + 'settings.billing.subscription.chooseSubtitle': '选择适合你的方案', + 'settings.billing.subscription.chooseTitle': '选择方案', + 'settings.billing.subscription.cryptoDesc': '支持加密货币支付', + 'settings.billing.subscription.cryptoQuestion': '想用加密货币支付?', + 'settings.billing.subscription.current': '当前', + 'settings.billing.subscription.currentPlan': '当前方案', + 'settings.billing.subscription.monthly': '月付', + 'settings.billing.subscription.paymentConfirmed': '支付已确认', + 'settings.billing.subscription.perMonth': '每月', + 'settings.billing.subscription.popular': '热门', + 'settings.billing.subscription.save': '{pct}', + 'settings.billing.subscription.upgrade': '升级', + 'settings.billing.subscription.waiting': '等待中', + 'settings.billing.subscription.waitingPayment': '等待支付', + 'settings.composio.apiKeyDesc': '当前此设备上已存储一个 Composio API 密钥。', + 'settings.composio.apiKeyExamplePlaceholder': 'ck_live_xxxxxxxxxxxxxxxxxx', + 'settings.composio.apiKeyLabel': 'Composio API 密钥', + 'settings.composio.apiKeyStored': 'API 密钥已存储', + 'settings.composio.apiKeyStoredPlaceholder': '••••••••••••••••', + 'settings.composio.clearedToBackend': '已切换到后端模式', + 'settings.composio.confirmItem1': '在 app.composio.dev 上拥有带 API 密钥的账户', + 'settings.composio.confirmItem2': '通过你的个人 Composio 账户重新关联每个集成', + 'settings.composio.confirmItem3': + '注意:Composio 触发器(实时 Webhook)在直连模式下尚不可用——仅支持同步工具调用', + 'settings.composio.confirmNeedItems': '你需要:', + 'settings.composio.confirmSwitch': '我已了解,切换到直连', + 'settings.composio.confirmTitle': '⚠️ 切换到直连模式', + 'settings.composio.confirmWarning': + '你现有的集成(通过 OpenHuman 关联的 Gmail、Slack、GitHub 等)将不可见——它们存放在 OpenHuman 托管的 Composio 租户中。', + 'settings.composio.intro': + 'Composio 集成了 250+ 外部应用作为智能体可调用的工具。请选择这些工具调用的路由方式。', + 'settings.composio.title': 'Composio', + 'settings.composio.modeDirect': '直连(自带 API 密钥)', + 'settings.composio.modeDirectDesc': + '调用直接发送到 backend.composio.dev。自主可控 / 适合离线场景。工具同步执行;实时触发器 Webhook 目前在直连模式下尚未路由(后续问题)。', + 'settings.composio.modeManaged': '托管(由 OpenHuman 管理)', + 'settings.composio.modeManagedDesc': + 'OpenHuman 通过我们的后端代理工具调用(推荐)。认证由我们处理,你无需粘贴 Composio API 密钥。Webhook 完全路由。', + 'settings.composio.routingMode': '路由模式', + 'settings.composio.saveErrorNoKey': '保存失败。直连模式需要非空的 API 密钥。', + 'settings.composio.saving': '保存中…', + 'settings.composio.switching': '切换中…', + 'settings.companion.title': '桌面伴侣', + 'settings.companion.session': '会议', + 'settings.companion.activeLabel': '活跃', + 'settings.companion.inactiveStatus': '不活跃', + 'settings.companion.stopping': '停止…', + 'settings.companion.stopSession': '停止会话', + 'settings.companion.starting': '开始…', + 'settings.companion.startSession': '开始会话', + 'settings.companion.sessionId': '会话ID', + 'settings.companion.turns': '转弯', + 'settings.companion.remaining': '剩余', + 'settings.companion.configuration': '配置', + 'settings.companion.hotkey': '热键', + 'settings.companion.activationMode': '激活模式', + 'settings.companion.sessionTtl': '会话生存时间', + 'settings.companion.screenCapture': '屏幕截图', + 'settings.companion.appContext': '应用程序上下文', + 'settings.cron.jobs.desc': '管理核心调度器中的定时任务', + 'settings.cron.jobs.empty': '未找到核心定时任务。', + 'settings.cron.jobs.lastStatus': '上次状态', + 'settings.cron.jobs.loading': '正在加载定时任务...', + 'settings.cron.jobs.loadingRuns': '加载运行记录中', + 'settings.cron.jobs.nextRun': '下次运行', + 'settings.cron.jobs.pause': '暂停', + 'settings.cron.jobs.paused': '已暂停', + 'settings.cron.jobs.recentRuns': '最近运行', + 'settings.cron.jobs.removing': '删除中', + 'settings.cron.jobs.resume': '恢复', + 'settings.cron.jobs.runningNow': '立即运行', + 'settings.cron.jobs.saving': '保存中…', + 'settings.cron.jobs.schedule': '计划', + 'settings.cron.jobs.title': '核心定时任务', + 'settings.cron.jobs.viewRuns': '查看运行记录', + 'settings.localModel.deviceCapability.active': '活跃', + 'settings.localModel.deviceCapability.appliedTier': '已应用档位', + 'settings.localModel.deviceCapability.applying': '应用中', + 'settings.localModel.deviceCapability.cores': '{count} 核', + 'settings.localModel.deviceCapability.couldNotLoadPresets': '无法加载预设', + 'settings.localModel.deviceCapability.cpu': 'CPU', + 'settings.localModel.deviceCapability.customModelIds': '自定义模型 ID', + 'settings.localModel.deviceCapability.detected': '已检测到', + 'settings.localModel.deviceCapability.disabled': '已禁用', + 'settings.localModel.deviceCapability.disabledDesc': '本地 AI 已禁用', + 'settings.localModel.deviceCapability.downloadingModels': '(正在下载模型)', + 'settings.localModel.deviceCapability.downloadingSetupDesc': + '正在下载 OllamaSetup 安装程序(约 2 GB)并解压。首次安装可能需要一分钟。', + 'settings.localModel.deviceCapability.failedToApplyPreset': '应用预设失败', + 'settings.localModel.deviceCapability.gpu': 'GPU', + 'settings.localModel.deviceCapability.installFailed': 'Ollama 安装失败', + 'settings.localModel.deviceCapability.installFailedDesc': + '安装程序在 Ollama 可用之前退出。点击重试,或从 ollama.com 手动安装。', + 'settings.localModel.deviceCapability.installFirst': '请先运行 Ollama。', + 'settings.localModel.deviceCapability.installFirstDesc': + '本地层级依赖外部托管的 Ollama 端点。请自行启动它,拉取所需模型,并在运行时可达前继续使用「已禁用(云端回退)」。', + 'settings.localModel.deviceCapability.installOllamaFirst': '请先运行 Ollama 以使用此层级', + 'settings.localModel.deviceCapability.installingOllama': '正在安装 Ollama', + 'settings.localModel.deviceCapability.loadingDeviceInfo': '正在加载设备信息', + 'settings.localModel.deviceCapability.localAiDisabled': '本地 AI 已禁用 — 使用云端回退。', + 'settings.localModel.deviceCapability.modelTier': '模型档位', + 'settings.localModel.deviceCapability.needsOllama': '需要安装 Ollama', + 'settings.localModel.deviceCapability.notDetected': '未检测到', + 'settings.localModel.deviceCapability.disabledLowercase': '残疾人', + 'settings.localModel.deviceCapability.presetDetails': + '聊天:{chatModel} · 愿景:{visionModel} · 目标 RAM:{targetRamGb} GB', + 'settings.localModel.deviceCapability.ram': 'RAM', + 'settings.localModel.deviceCapability.recommended': '推荐', + 'settings.localModel.deviceCapability.retryInstall': '重试中…', + 'settings.localModel.deviceCapability.retrying': '重试中…', + 'settings.localModel.deviceCapability.starting': '启动中…', + 'settings.localModel.download.audioPathPlaceholder': '音频文件的绝对路径', + 'settings.localModel.download.capabilityChat': '聊天', + 'settings.localModel.download.capabilityEmbedding': '嵌入', + 'settings.localModel.download.capabilityAssets': '能力资源', + 'settings.localModel.download.capabilityStt': 'STT', + 'settings.localModel.download.capabilityTts': 'TTS', + 'settings.localModel.download.capabilityVision': '愿景', + 'settings.localModel.download.downloading': '下载中...', + 'settings.localModel.download.embeddingDimensions': '尺寸:{dimensions}', + 'settings.localModel.download.embeddingModel': '型号:{modelId}', + 'settings.localModel.download.embeddingPlaceholder': '每行一个输入字符串...', + 'settings.localModel.download.embeddingVectors': '矢量: {count}', + 'settings.localModel.download.noThinkMode': '无思考模式', + 'settings.localModel.download.notAvailable': '不适用', + 'settings.localModel.download.promptPlaceholder': '输入任意提示词并在本地模型上运行...', + 'settings.localModel.download.quantizationPref': '量化偏好', + 'settings.localModel.download.runEmbeddingTest': '运行中...', + 'settings.localModel.download.runPromptTest': '运行提示测试', + 'settings.localModel.download.runSummaryTest': '运行摘要测试', + 'settings.localModel.download.runTranscriptionTest': '运行中...', + 'settings.localModel.download.runTtsTest': '运行中...', + 'settings.localModel.download.runVisionTest': '运行中...', + 'settings.localModel.download.running': '运行中...', + 'settings.localModel.download.runningPrompt': '正在运行提示词', + 'settings.localModel.download.summaryHelper': + '通过 Rust 核心调用 `open human.inference_summarize`', + 'settings.localModel.download.summarizePlaceholder': '粘贴文本以用本地模型进行摘要...', + 'settings.localModel.download.testCustomPrompt': '测试自定义提示词', + 'settings.localModel.download.testEmbeddings': '测试嵌入', + 'settings.localModel.download.testSummarization': '测试摘要', + 'settings.localModel.download.testVisionPrompt': '测试视觉提示词', + 'settings.localModel.download.testVoiceInput': '测试语音输入(STT)', + 'settings.localModel.download.testVoiceOutput': '测试语音输出(TTS)', + 'settings.localModel.download.transcript': '成绩单:', + 'settings.localModel.download.ttsOutput': '输出:{outputPath}', + 'settings.localModel.download.ttsOutputPlaceholder': '可选输出 WAV 路径', + 'settings.localModel.download.ttsPlaceholder': '输入要合成的文字...', + 'settings.localModel.download.ttsVoice': '声音:{voiceId}', + 'settings.localModel.download.visionImagePlaceholder': + '每行一个图像引用(data URI、URL 或本地路径标记)', + 'settings.localModel.download.visionPromptPlaceholder': '输入视觉模型的提示词...', + 'settings.localModel.status.allChecksPassed': '所有检查已通过', + 'settings.localModel.status.artifact': '构件', + 'settings.localModel.status.backend': '后端', + 'settings.localModel.status.binary': '二进制文件', + 'settings.localModel.status.bootstrapResume': '引导 / 恢复', + 'settings.localModel.status.checking': '检查中...', + 'settings.localModel.status.checkingOllama': '检查 Ollama', + 'settings.localModel.status.contextBelowMinimumBadge': + '{contextLength} ctx - 低于 {required} 分钟', + 'settings.localModel.status.contextBelowMinimumTitle': + '已拒绝:上下文窗口 {contextLength} 令牌低于内存层所需的 {required} 令牌最小值。回忆会因无声截断而被破坏。', + 'settings.localModel.status.contextOkBadge': '{contextLength} ctx ✓', + 'settings.localModel.status.contextOkTitle': + '上下文窗口 {contextLength} 令牌满足内存层最小值 {required} 令牌。', + 'settings.localModel.status.contextUnknownBadge': 'ctx 未知', + 'settings.localModel.status.contextUnknownTitle': + '上下文窗口未知;无法确认它满足 {required}-token 内存层最小值。', + 'settings.localModel.status.customLocation': '自定义位置', + 'settings.localModel.status.customLocationDesc': '自定义 Ollama 安装路径', + 'settings.localModel.status.diagnosticsHint': + '点击「运行诊断」以验证 Ollama 是否正在运行以及模型是否已安装。', + 'settings.localModel.status.downloadingUnknown': '下载中(大小未知)', + 'settings.localModel.status.eta': '预计完成时间', + 'settings.localModel.status.expectedModels': '预期模型', + 'settings.localModel.status.expectedChat': '聊天:{model}', + 'settings.localModel.status.expectedEmbedding': '嵌入:{model}', + 'settings.localModel.status.expectedVision': '愿景:{model}', + 'settings.localModel.status.externalProcess': '外部流程', + 'settings.localModel.status.forceRebootstrap': '强制重新引导', + 'settings.localModel.status.generationTps': '生成 TPS', + 'settings.localModel.status.hideErrorDetails': '隐藏错误详情', + 'settings.localModel.status.installManually': '手动安装', + 'settings.localModel.status.installManuallyFrom': '从以下地址手动安装', + 'settings.localModel.status.installOllama': '启动中…', + 'settings.localModel.status.installedModels': '已安装模型', + 'settings.localModel.status.installing': '安装中...', + 'settings.localModel.status.installingOllama': '正在安装 Ollama 运行时...', + 'settings.localModel.status.issues': '问题', + 'settings.localModel.status.issuesFound': '发现 {count} 个问题', + 'settings.localModel.status.lastLatency': '最近延迟', + 'settings.localModel.status.model': '模型', + 'settings.localModel.status.notAvailable': '不适用', + 'settings.localModel.status.notFound': '未找到', + 'settings.localModel.status.notRunning': '未运行', + 'settings.localModel.status.ollamaBinaryPath': 'Ollama 二进制路径', + 'localModel.ollamaServer.helperText': '示例:http://192.168.1.5:11434', + 'localModel.ollamaServer.label': 'Ollama 服务器 URL', + 'localModel.ollamaServer.modelCount': '个模型', + 'localModel.ollamaServer.placeholder': 'http://localhost:11434', + 'localModel.ollamaServer.reachable': '可访问', + 'localModel.ollamaServer.resetButton': '重置为默认值', + 'localModel.ollamaServer.saveButton': '保存', + 'localModel.ollamaServer.testButton': '测试连接', + 'localModel.ollamaServer.unreachable': '无法访问', + 'localModel.ollamaServer.validationError': '必须是有效的 http:// 或 https:// URL', + 'settings.localModel.status.ollamaDiagnostics': 'Ollama 诊断', + 'settings.localModel.status.ollamaNotInstalled': 'Ollama 运行时不可用', + 'settings.localModel.status.ollamaNotInstalledDesc': + 'OpenHuman 现在将 Ollama 视为外部推理运行时。请启动你自己的 Ollama 服务器,拉取所需模型,并将工作负载路由指向它。', + 'settings.localModel.status.progress': '进度', + 'settings.localModel.status.provider': '提供商', + 'settings.localModel.status.retryBootstrap': '重试引导', + 'settings.localModel.status.runDiagnostics': '检查中...', + 'settings.localModel.status.running': '运行中', + 'settings.localModel.status.runningExternalProcess': '通过外部进程运行', + 'settings.localModel.status.runtimeStatus': '运行时状态', + 'settings.localModel.status.server': '服务器', + 'settings.localModel.status.setPath': '设置中...', + 'settings.localModel.status.setting': '设置中...', + 'settings.localModel.status.showErrorDetails': '隐藏错误详情', + 'settings.localModel.status.showInstallErrorDetails': '隐藏错误详情', + 'settings.localModel.status.suggestedFixes': '建议修复方案', + 'settings.localModel.status.thenSetPath': '然后设置路径', + 'settings.localModel.status.triggering': '触发中...', + 'settings.localModel.status.unavailable': '不可用', + 'settings.localModel.status.working': '处理中...', + 'settings.developerMenu.ai.title': 'AI 配置', + 'settings.developerMenu.ai.desc': '云端提供商、本地 Ollama 模型和按工作负载路由', + 'settings.developerMenu.screenAwareness.title': '屏幕感知', + 'settings.developerMenu.screenAwareness.desc': '屏幕捕获权限、监控策略和会话控制', + 'settings.developerMenu.messagingChannels.title': '消息渠道', + 'settings.developerMenu.messagingChannels.desc': '配置 Telegram/Discord 认证模式和默认渠道路由', + 'settings.developerMenu.tools.title': '工具', + 'settings.developerMenu.tools.desc': '启用或停用 OpenHuman 可代表你使用的能力', + 'settings.developerMenu.agentChat.title': '智能体聊天', + 'settings.developerMenu.agentChat.desc': '使用模型和温度覆盖测试智能体对话', + 'settings.developerMenu.devWorkflow.title': '开发工作流', + 'settings.developerMenu.devWorkflow.desc': '自主选择你的 GitHub issue 并按计划发起 PR 的智能体', + 'settings.developerMenu.devWorkflow.panelDesc': + '配置一个自主开发智能体,按计划选择分配给你的 GitHub issue 并自动发起 pull request。', + 'settings.developerMenu.skillsRunner.title': '技能运行器', + 'settings.developerMenu.skillsRunner.desc': '临时运行任意内置技能 — 填写输入并启动后台自主运行', + 'settings.developerMenu.skillsRunner.panelDesc': + '选择内置技能,填写它声明的输入,并启动一次无需等待的后台运行。如果需要按 cron 计划重复运行,请使用开发工作流。', + 'settings.skillsRunner.skill': '技能', + 'settings.skillsRunner.selectSkill': '选择技能…', + 'settings.skillsRunner.loadingSkills': '正在加载技能…', + 'settings.skillsRunner.loadingDescription': '正在加载技能输入…', + 'settings.skillsRunner.noInputs': '此技能未声明输入。', + 'settings.skillsRunner.placeholder.required': '必填', + 'settings.skillsRunner.runNow': '立即运行', + 'settings.skillsRunner.starting': '启动中…', + 'settings.skillsRunner.started': '已启动 — 运行 ID:', + 'settings.skillsRunner.logPath': '日志:', + 'settings.skillsRunner.error.listSkills': '加载技能失败:', + 'settings.skillsRunner.error.describe': '加载输入失败:', + 'settings.skillsRunner.error.missingRequired': '缺少必填输入:', + 'settings.skillsRunner.error.run': '启动运行失败:', + 'settings.skillsRunner.error.preflightGate': '预检门禁失败', + 'settings.skillsRunner.schedule.heading': '计划(重复)', + 'settings.skillsRunner.schedule.help': + '将此技能和输入保存为重复 cron 任务。智能体会在每次触发时调用 run_skill。', + 'settings.skillsRunner.schedule.frequency': '频率', + 'settings.skillsRunner.schedule.every30min': '每 30 分钟', + 'settings.skillsRunner.schedule.everyHour': '每小时', + 'settings.skillsRunner.schedule.every2hours': '每 2 小时', + 'settings.skillsRunner.schedule.every6hours': '每 6 小时', + 'settings.skillsRunner.schedule.onceDaily': '每天一次(9:00)', + 'settings.skillsRunner.schedule.save': '保存计划', + 'settings.skillsRunner.schedule.saving': '保存中…', + 'settings.skillsRunner.schedule.saved': '计划已保存。', + 'settings.skillsRunner.schedule.error': '保存计划失败:', + 'settings.skillsRunner.schedule.loadingJobs': '正在加载现有计划…', + 'settings.skillsRunner.schedule.noJobs': '此技能尚未保存计划。', + 'settings.skillsRunner.schedule.existing': '此技能的计划任务:', + 'settings.skillsRunner.schedule.runNow': '运行', + 'settings.skillsRunner.schedule.remove': '移除', + 'settings.skillsRunner.scheduleEnabled': '已启用', + 'settings.skillsRunner.scheduleDisabled': '已暂停', + 'settings.skillsRunner.scheduleToggleAria': '切换计划启用状态', + 'settings.skillsRunner.schedule.history': '历史记录', + 'settings.skillsRunner.schedule.historyLoading': '正在加载历史记录…', + 'settings.skillsRunner.schedule.historyEmpty': '此计划还没有运行记录。', + 'settings.skillsRunner.schedule.historyNoOutput': '未捕获输出。', + 'settings.skillsRunner.schedule.active': '活跃', + 'settings.skillsRunner.schedule.lastRunLabel': '上次:', + 'settings.skillsRunner.recentRuns.headingForSkill': '此技能的最近运行', + 'settings.skillsRunner.recentRuns.headingAll': '最近技能运行(全部)', + 'settings.skillsRunner.recentRuns.refresh': '刷新', + 'settings.skillsRunner.recentRuns.loading': '正在加载最近运行…', + 'settings.skillsRunner.recentRuns.empty': '暂无最近运行。', + 'settings.skillsRunner.viewer.loading': '正在加载日志…', + 'settings.skillsRunner.viewer.tailing': '实时追踪', + 'settings.skillsRunner.viewer.fetching': '获取中', + 'settings.skillsRunner.viewer.error': '读取日志失败:', + 'settings.skillsRunner.repoPicker.loading': '正在加载仓库…', + 'settings.skillsRunner.repoPicker.select': '选择仓库…', + 'settings.skillsRunner.repoPicker.empty': '未返回仓库。通过 Composio 连接 GitHub 以填充此列表。', + 'settings.skillsRunner.repoPicker.notConnected': + 'GitHub 尚未通过 Composio 连接。请先在“技能 → Composio”下连接。', + 'settings.skillsRunner.repoPicker.privateTag': '(私有)', + 'settings.skillsRunner.branchPicker.needRepo': '请先选择仓库…', + 'settings.skillsRunner.branchPicker.loading': '正在加载分支…', + 'settings.skillsRunner.branchPicker.select': '选择分支…', + 'settings.devWorkflow.githubRepository': 'GitHub 仓库', + 'settings.devWorkflow.loadingRepositories': '正在加载仓库...', + 'settings.devWorkflow.selectRepository': '选择仓库', + 'settings.devWorkflow.privateTag': '(私有)', + 'settings.devWorkflow.detectingForkInfo': '正在检测 fork 信息...', + 'settings.devWorkflow.forkDetected': '检测到 fork', + 'settings.devWorkflow.upstream': '上游:', + 'settings.devWorkflow.forkPrNote': 'PR 将提交到上游仓库。', + 'settings.devWorkflow.notForkNote': '这不是 fork。PR 将直接提交到此仓库。', + 'settings.devWorkflow.targetBranch': '目标分支', + 'settings.devWorkflow.targetBranchNote': 'PR 将提交到此分支', + 'settings.devWorkflow.loadingBranches': '正在加载分支...', + 'settings.devWorkflow.runFrequency': '运行频率', + 'settings.devWorkflow.runFrequencyNote': '智能体检查 issue 并发起 PR 的频率。', + 'settings.devWorkflow.updateConfiguration': '更新配置', + 'settings.devWorkflow.saveConfiguration': '保存配置', + 'settings.devWorkflow.remove': '移除', + 'settings.devWorkflow.saved': '已保存', + 'settings.devWorkflow.activeConfiguration': '当前配置', + 'settings.devWorkflow.activeConfigRepository': '仓库:', + 'settings.devWorkflow.activeConfigUpstream': '上游:', + 'settings.devWorkflow.activeConfigTargetBranch': '目标分支:', + 'settings.devWorkflow.activeConfigSchedule': '计划:', + 'settings.devWorkflow.enabled': '已启用', + 'settings.devWorkflow.paused': '已暂停', + 'settings.devWorkflow.nextRun': '下次运行', + 'settings.devWorkflow.lastRun': '上次运行', + 'settings.devWorkflow.runNow': '立即运行', + 'settings.devWorkflow.running': '运行中…', + 'settings.devWorkflow.recentRuns': '最近运行', + 'settings.devWorkflow.cronSaveError': '保存配置失败', + 'settings.devWorkflow.lastOutput': '上次输出', + 'settings.devWorkflow.noOutput': '未捕获输出', + 'settings.devWorkflow.runningStatus': '智能体正在运行 — 正在选择 issue 并处理修复...', + 'settings.devWorkflow.errorNotConnected': + 'GitHub 未连接。请先通过“设置 > 高级 > Composio”连接 GitHub。', + 'settings.devWorkflow.errorToolNotEnabled': + '此后端未启用 GITHUB_LIST_REPOSITORIES_FOR_THE_AUTHENTICATED_USER 工具。请让管理员在 Composio 集成中启用它(backend#842)。', + 'settings.devWorkflow.errorNotAuthenticated': '未认证。请先登录。', + 'settings.devWorkflow.errorNoRepositories': '未找到此 GitHub 账户的仓库。', + 'settings.devWorkflow.schedule.every30min': '每 30 分钟', + 'settings.devWorkflow.schedule.everyHour': '每小时', + 'settings.devWorkflow.schedule.every2hours': '每 2 小时', + 'settings.devWorkflow.schedule.every6hours': '每 6 小时', + 'settings.devWorkflow.schedule.onceDaily': '每天一次(上午 9 点)', + 'settings.developerMenu.cronJobs.title': '定时任务', + 'settings.developerMenu.cronJobs.desc': '查看并配置运行时技能的计划任务', + 'settings.developerMenu.localModelDebug.title': '本地模型调试', + 'settings.developerMenu.localModelDebug.desc': 'Ollama 配置、资源下载、模型测试和诊断', + 'settings.developerMenu.webhooks.title': 'Webhook', + 'settings.developerMenu.webhooks.desc': '检查运行时 Webhook 注册和捕获的请求日志', + 'settings.developerMenu.eventLog.title': '事件日志', + 'settings.developerMenu.eventLog.desc': '实时显示所有智能体、工具和系统事件的彩色编码流', + 'settings.developerMenu.eventLog.allTypes': '所有类型', + 'settings.developerMenu.eventLog.filterAgent': '筛选...', + 'settings.developerMenu.eventLog.download': '下载', + 'settings.developerMenu.eventLog.events': '个事件', + 'settings.developerMenu.eventLog.live': '实时', + 'settings.developerMenu.eventLog.disconnected': '已断开连接', + 'settings.developerMenu.eventLog.waiting': '正在等待事件...', + 'settings.developerMenu.eventLog.notConnected': '未连接到核心', + 'settings.developerMenu.eventLog.jumpToLatest': '跳到最新', + 'settings.developerMenu.eventLog.badge.tool': '工具', + 'settings.developerMenu.eventLog.badge.agent': '智能体', + 'settings.developerMenu.eventLog.badge.info': '信息', + 'settings.developerMenu.eventLog.badge.mem': 'MEM', + 'settings.developerMenu.eventLog.badge.chan': 'CHAN', + 'settings.developerMenu.eventLog.badge.cron': 'CRON', + 'settings.developerMenu.eventLog.badge.hook': 'HOOK', + 'settings.developerMenu.eventLog.badge.warn': '警告', + 'settings.developerMenu.eventLog.badge.skill': '技能', + 'settings.developerMenu.eventLog.badge.comp': 'COMP', + 'settings.developerMenu.eventLog.badge.mcp': 'MCP', + 'settings.developerMenu.intelligence.title': '智能', + 'settings.developerMenu.intelligence.desc': '记忆工作区、潜意识引擎、梦境和设置', + 'settings.developerMenu.notificationRouting.title': '通知路由', + 'settings.developerMenu.notificationRouting.desc': '集成提醒的 AI 重要性评分和编排器升级', + 'settings.developerMenu.composeioTriggers.title': 'ComposeIO 触发器', + 'settings.developerMenu.composeioTriggers.desc': '查看 ComposeIO 触发器历史和归档', + 'settings.developerMenu.composioRouting.title': 'Composio 路由(直连模式)', + 'settings.developerMenu.composioRouting.desc': + '使用你自己的 Composio API 密钥并将调用直接路由到 backend.composio.dev', + 'settings.developerMenu.integrationTriggers.title': '集成触发器', + 'settings.developerMenu.integrationTriggers.desc': '配置 Composio 集成触发器的 AI 分流设置', + 'settings.developerMenu.mcpServer.title': 'MCP 服务器', + 'settings.developerMenu.mcpServer.desc': '配置外部 MCP 客户端以连接到 OpenHuman', + 'settings.developerMenu.autonomy.title': '智能体自主权', + 'settings.developerMenu.autonomy.desc': '工具操作速率限制和安全阈值', + 'settings.mcpServer.title': 'MCP 服务器', + 'settings.mcpServer.toolsSectionTitle': '可用工具', + 'settings.mcpServer.toolsSectionDesc': + '运行 openhuman-core mcp 时通过 MCP stdio 服务器暴露的工具', + 'settings.mcpServer.configSectionTitle': '客户端配置', + 'settings.mcpServer.configSectionDesc': '选择你的 MCP 客户端以生成对应的配置代码片段', + 'settings.mcpServer.copySnippet': '复制到剪贴板', + 'settings.mcpServer.copied': '已复制!', + 'settings.mcpServer.openConfigFile': '打开配置文件', + 'settings.mcpServer.binaryPathNotFound': + '未找到 OpenHuman 二进制文件。如果使用源码运行,请执行:cargo build --bin openhuman-core', + 'settings.mcpServer.openConfigError': '打开配置文件失败', + 'settings.mcpServer.clientClaudeDesktop': '克劳德桌面', + 'settings.mcpServer.clientCursor': '光标', + 'settings.mcpServer.clientCodex': '法典', + 'settings.mcpServer.clientZed': '泽德', + 'settings.mcpServer.configFilePath': '配置文件', + 'settings.mcpServer.clientSelectorAriaLabel': 'MCP 客户端选择器', + 'settings.appearance.menuDesc': '选择浅色、深色或跟随系统主题', + 'settings.agentAccess.title': '智能体系统访问', + 'settings.agentAccess.menuDesc': '控制智能体可读写的位置,以及是否可以使用 shell。', + 'settings.agentAccess.loadError': '无法加载访问设置', + 'settings.agentAccess.saveError': '无法保存访问设置', + 'settings.agentAccess.saved': '已保存 — 将在你的下一条消息后生效。', + 'settings.agentAccess.desktopOnly': '访问设置仅在桌面应用中可用。', + 'settings.agentAccess.loading': '加载中…', + 'settings.agentAccess.accessMode': '访问模式', + 'settings.agentAccess.tier.readonly.title': '只读', + 'settings.agentAccess.tier.readonly.desc': + '可读取文件并运行只读命令来探索 — 但绝不会写入、编辑或运行任何会更改状态的操作。', + 'settings.agentAccess.tier.supervised.title': '编辑前询问', + 'settings.agentAccess.tier.supervised.desc': + '可自由创建新文件,但在编辑现有文件、运行命令、访问网络或安装任何内容前会请求你的批准。', + 'settings.agentAccess.tier.full.title': '完全访问', + 'settings.agentAccess.tier.full.desc': + '使用你的完整用户账户权限运行命令 — 可在允许的位置读写,但凭据和系统存储除外。破坏性命令、网络访问和安装仍会请求批准。', + 'settings.agentAccess.defaultTag': '(默认)', + 'settings.agentAccess.fullWarning': + '⚠ 完全访问会使用你的完整账户权限运行命令,且没有沙盒。仅在你信任智能体可使用这台机器时启用。凭据和系统目录仍会被阻止,破坏性、网络和安装操作仍会请求批准。', + 'settings.agentAccess.confine.label': '限制在工作区', + 'settings.agentAccess.confine.desc': + '无论选择哪种访问模式,都将智能体限制在工作区目录(以及已授权文件夹)内。关闭后,它可访问你的用户可访问的任何位置 — 始终阻止的凭据和系统目录除外。', + 'settings.agentAccess.requireTaskPlanApproval.label': '要求批准任务计划', + 'settings.agentAccess.requireTaskPlanApproval.desc': + '在指定智能体执行由智能体编写的任务简报前暂停。', + 'settings.agentAccess.grantedFolders': '已授权文件夹', + 'settings.agentAccess.alwaysAllow': '始终允许的工具', + 'settings.agentAccess.alwaysAllowDesc': + '你在聊天中标记为“始终允许”的工具会直接运行且不再询问。移除后会重新提示。', + 'settings.agentAccess.alwaysAllowNone': '还没有始终允许的工具。', + 'settings.agentAccess.grantedDesc': + '除工作区外,智能体可读写的文件夹。凭据存储(~/.ssh、~/.gnupg、~/.aws、keychains)和系统目录(/etc、/System、C:\\Windows、…)始终被阻止,即使它们位于已授权文件夹内。', + 'settings.agentAccess.noneGranted': '未授权任何文件夹。', + 'settings.agentAccess.readWrite': '读写', + 'settings.agentAccess.readOnly': '只读', + 'settings.agentAccess.remove': '移除', + 'settings.agentAccess.pathPlaceholder': '文件夹的绝对路径', + 'settings.agentAccess.accessLevelLabel': '访问级别', + 'settings.agentAccess.add': '添加', + 'settings.agentAccess.saving': '保存中…', + 'settings.agentAccess.changesApply': '更改将在你的下一条消息后生效。', + 'settings.appearance.title': '外观', + 'settings.appearance.themeHeading': '主题', + 'settings.appearance.themeAria': '主题', + 'settings.appearance.modeLight': '浅色', + 'settings.appearance.modeLightDesc': '明亮界面,深色文字。', + 'settings.appearance.modeDark': '深色', + 'settings.appearance.modeDarkDesc': '暗色界面,夜间更护眼。', + 'settings.appearance.modeSystem': '跟随系统', + 'settings.appearance.modeSystemDesc': '跟随操作系统外观设置。', + 'settings.appearance.helperText': + '深色模式会将整个应用——聊天、设置、面板——切换为暗色调。"跟随系统"会同步你的操作系统外观并实时更新。', + 'settings.appearance.tabBarHeading': '底部标签栏', + 'settings.appearance.tabBarAlwaysShowLabels': '始终显示标签', + 'settings.appearance.tabBarAlwaysShowLabelsDesc': '关闭时,标签仅出现在悬停时或活动选项卡上。', + 'settings.mascot.active': '活跃', + 'settings.mascot.characterDesc': '选择你的 OpenHuman 角色', + 'settings.mascot.characterHeading': '角色', + 'settings.mascot.customGifError': + '输入 HTTPS .gif 链接、本地回环 HTTP .gif 链接、file:// .gif 链接或本地 .gif 路径。', + 'settings.mascot.customGifHeading': '自定义 GIF 头像', + 'settings.mascot.customGifLabel': '自定义 GIF 头像链接', + 'settings.mascot.customGifPlaceholder': 'https://example.com/avatar.gif', + 'settings.mascot.characterPreview': '预览', + 'settings.mascot.characterStates': '状态', + 'settings.mascot.characterVisemes': '视素', + 'settings.mascot.colorAria': 'OpenHuman 颜色', + 'settings.mascot.colorDesc': '选择颜色方案', + 'settings.mascot.colorHeading': '颜色', + 'settings.mascot.colorBlack': '黑色', + 'settings.mascot.colorBurgundy': '酒红色', + 'settings.mascot.colorCustom': '自定义', + 'settings.mascot.colorNavy': '深蓝色', + 'settings.mascot.primaryColor': '主色', + 'settings.mascot.secondaryColor': '辅助色', + 'settings.mascot.colorYellow': '黄色', + 'settings.mascot.libraryUnavailable': 'OpenHuman 资源库不可用', + 'settings.mascot.title': 'OpenHuman', + 'settings.mascot.loadingLibrary': '正在加载 OpenHuman 库…', + 'settings.mascot.loadDetailError': '无法加载吉祥物。', + 'settings.mascot.loadLibraryError': '无法加载吉祥物库。', + 'settings.mascot.localDefault': '本地 OpenHuman(默认)', + 'settings.mascot.menuTitle': '吉祥物', + 'settings.mascot.menuDesc': '选择应用内使用的吉祥物颜色', + 'settings.mascot.noCharacters': '暂无可用的 OpenHuman 角色', + 'settings.mascot.noColorVariants': '无颜色变体', + 'settings.mascot.voice.current': '当前', + 'settings.mascot.voice.customDesc': + '在 api.elevenlabs.io/v1/voices 或您的 ElevenLabs 仪表板中查找语音 ID。仅存储 ID — 您的 API 密钥保留在后端。', + 'settings.mascot.voice.customHeading': '自定义语音 ID', + 'settings.mascot.voice.customOption': '其他(粘贴语音 ID)…', + 'settings.mascot.voice.customPlaceholder': '例如21m00Tcm4TlvDq8ikWAM', + 'settings.mascot.voice.desc': + '选择吉祥物用于语音回复的 ElevenLabs 声音。按性别筛选,从精选列表中选择,粘贴自定义 ID,或让应用根据您的界面语言自动选择声音。', + 'settings.mascot.voice.genderFemale': '女声', + 'settings.mascot.voice.genderHeading': '声音性别', + 'settings.mascot.voice.genderMale': '男声', + 'settings.mascot.voice.heading': '声音', + 'settings.mascot.voice.preset': '声音预设', + 'settings.mascot.voice.presetHeading': '声音预设', + 'settings.mascot.voice.preview': '试听声音', + 'settings.mascot.voice.previewError': '声音试听失败', + 'settings.mascot.voice.previewText': '你好,我是你的助手。这是一段声音试听。', + 'settings.mascot.voice.previewing': '试听中…', + 'settings.mascot.voice.reset': '重置为默认值', + 'settings.mascot.voice.useLocaleDefault': '匹配应用语言', + 'settings.mascot.voice.useLocaleDefaultDesc': '为当前界面语言自动选择一个声音。', + 'settings.persona.title': '人格', + 'settings.persona.menuTitle': '人格', + 'settings.persona.menuDesc': '名称、性格、头像和声音 — 让你的助手成为统一身份', + 'settings.persona.identityHeading': '身份', + 'settings.persona.identityDesc': + '助手的显示名称和简短描述。会显示在应用中;不会改变助手的推理方式。', + 'settings.persona.displayNameLabel': '显示名称', + 'settings.persona.displayNamePlaceholder': '例如 Nova', + 'settings.persona.descriptionLabel': '描述', + 'settings.persona.descriptionPlaceholder': '例如 为我的团队服务的冷静、简洁助手。', + 'settings.persona.soul.heading': '性格(SOUL.md)', + 'settings.persona.soul.desc': + '助手在每次对话中遵循的性格提示词。编辑会保存到你的工作区,并在下次回复时生效。', + 'settings.persona.soul.editorLabel': 'SOUL.md 内容', + 'settings.persona.soul.reset': '重置为默认值', + 'settings.persona.soul.usingDefault': '正在使用内置默认值', + 'settings.persona.soul.loadError': '无法加载 SOUL.md', + 'settings.persona.soul.saveError': '无法保存 SOUL.md', + 'settings.persona.soul.resetError': '无法重置 SOUL.md', + 'settings.persona.appearanceHeading': '头像和声音', + 'settings.persona.appearanceDesc': '吉祥物颜色、自定义 GIF 头像和回复声音在吉祥物设置中配置。', + 'settings.persona.openMascotSettings': '打开吉祥物设置', + 'settings.memoryWindow.balanced.badge': '推荐', + 'settings.memoryWindow.balanced.hint': + '合理的默认值——在不为每次运行消耗额外 token 的情况下保持良好的连贯性。', + 'settings.memoryWindow.balanced.label': '均衡', + 'settings.memoryWindow.description': + 'OpenHuman 在每次新的智能体运行中注入多少记忆上下文。更大的窗口对过往对话更有感知,但每次运行会消耗更多 token,成本也更高。', + 'settings.memoryWindow.extended.badge': '更多上下文', + 'settings.memoryWindow.extended.hint': '向每次运行注入更多长期记忆。每轮 token 成本更高。', + 'settings.memoryWindow.extended.label': '扩展', + 'settings.memoryWindow.maximum.badge': '最高成本', + 'settings.memoryWindow.maximum.hint': '最大安全窗口。连贯性最佳,每次运行的 token 账单显著更高。', + 'settings.memoryWindow.maximum.label': '最大', + 'settings.memoryWindow.minimal.badge': '最便宜', + 'settings.memoryWindow.minimal.hint': '最小记忆窗口。最便宜、最快,但跨运行的连贯性最弱。', + 'settings.memoryWindow.minimal.label': '最小', + 'settings.memoryWindow.title': '长期记忆窗口', + 'settings.modelHealth.title': '模型健康', + 'settings.modelHealth.desc': '比较各活跃模型的单模型质量、幻觉率和成本', + 'settings.modelHealth.allStatuses': '所有状态', + 'settings.modelHealth.models': '个模型', + 'settings.modelHealth.loading': '正在加载模型数据...', + 'settings.modelHealth.empty': '未注册模型', + 'settings.modelHealth.col.model': '模型', + 'settings.modelHealth.col.quality': '质量', + 'settings.modelHealth.col.halluc': '幻觉率', + 'settings.modelHealth.col.cost': '每 100 万输出成本', + 'settings.modelHealth.col.agents': '智能体', + 'settings.modelHealth.col.status': '状态', + 'settings.modelHealth.badge.keep': '保留', + 'settings.modelHealth.badge.replace': '替换', + 'settings.modelHealth.badge.staging': '预发布测试', + 'settings.modelHealth.badge.vision': '仅视觉', + 'settings.modelHealth.swap': '替换?', + 'settings.modelHealth.modal.title': '替换模型?', + 'settings.modelHealth.modal.hallucRate': '幻觉率', + 'settings.modelHealth.modal.cancel': '取消', + 'settings.modelHealth.modal.apply': '应用替换', + 'settings.modelHealth.tag.cheaper': '更便宜', + 'settings.modelHealth.tag.better': '更好', + 'settings.screenIntel.permissions.accessibility': '辅助功能', + 'settings.screenIntel.permissions.grantHint': '在系统设置中授权后,点击下方刷新', + 'settings.screenIntel.permissions.inputMonitoring': '输入监控', + 'settings.screenIntel.permissions.macosAppliesPrivacy': 'macOS 会在所有窗口中应用隐私保护', + 'settings.screenIntel.permissions.openInputMonitoring': '请求中…', + 'settings.screenIntel.permissions.refreshStatus': '刷新中…', + 'settings.screenIntel.permissions.refreshing': '刷新中…', + 'settings.screenIntel.permissions.requestAccessibility': '请求中…', + 'settings.screenIntel.permissions.requestScreenRecording': '请求中…', + 'settings.screenIntel.permissions.requesting': '请求中…', + 'settings.screenIntel.permissions.restartRefresh': '正在重启核心…', + 'settings.screenIntel.permissions.restartingCore': '正在重启核心…', + 'settings.screenIntel.permissions.screenRecording': '屏幕录制', + 'settings.screenIntel.permissions.title': '权限', + 'skills.card.moreActions': '更多操作', + 'skills.channelIcon.discord': 'Discord', + 'skills.channelIcon.imessage': 'iMessage', + 'skills.channelIcon.telegram': 'Telegram', + 'skills.channelIcon.web': '网络', + 'skills.channelIcon.yuanbao': '元宝', + 'skills.composio.poweredBy': '由 Composio 提供支持', + 'skills.composio.staleStatusTitle': '连接显示陈旧状态', + 'skills.create.allowedTools': '允许的工具', + 'skills.create.allowedToolsHelp': '渲染到 SKILL.md frontmatter 中为', + 'skills.create.allowedToolsPlaceholder': '节点执行,获取', + 'skills.create.author': '作者', + 'skills.create.authorPlaceholder': '你的名字', + 'skills.create.commaSeparated': '(逗号分隔)', + 'skills.create.createBtn': '创建技能', + 'skills.create.createError': '无法创建技能', + 'skills.create.creating': '创建中…', + 'skills.create.description': '描述', + 'skills.create.descriptionPlaceholder': '这个技能做什么?', + 'skills.create.optional': '(可选)', + 'skills.create.inputs.heading': 'Inputs', + 'skills.create.inputs.help': '声明技能所需的参数。Skills Runner 将在运行时为这些参数渲染表单。', + 'skills.create.inputs.add': '添加输入', + 'skills.create.inputs.row.name': '输入名称', + 'skills.create.inputs.row.namePlaceholder': '例如 repo', + 'skills.create.inputs.row.nameError': '只能包含字母、数字、下划线和连字符,且必须以字母开头。', + 'skills.create.inputs.row.description': '输入描述', + 'skills.create.inputs.row.descriptionPlaceholder': '此字段用于输入什么?', + 'skills.create.inputs.row.type': 'Type', + 'skills.create.inputs.row.required': 'Required', + 'skills.create.inputs.row.remove': '删除输入', + 'skills.create.inputs.type.string': 'Text', + 'skills.create.inputs.type.integer': 'Number', + 'skills.create.inputs.type.boolean': '是 / 否', + 'skills.create.license': '许可证', + 'skills.create.licensePlaceholder': 'MIT', + 'skills.create.name': '名称', + 'skills.create.namePlaceholder': '例如:交易日志', + 'skills.create.scope': '范围', + 'skills.create.scopeProjectHint': '/.open human/技能/', + 'skills.create.scopeUserHint': + '写入 ~/.openhuman/skills//SKILL.md — 在所有工作空间中可用。', + 'skills.create.slugLabel': '标识符', + 'skills.create.subtitle': '技能.md', + 'skills.create.tags': '标签', + 'skills.create.tagsPlaceholder': '贸易、研究', + 'skills.create.title': '新建技能', + 'skills.detail.allowedTools': '允许的工具', + 'skills.detail.author': '作者', + 'skills.detail.bundledResources': '捆绑资源', + 'skills.detail.closeAriaLabel': '关闭技能详情', + 'skills.detail.location': '位置', + 'skills.detail.noBundledResources': '无捆绑资源。', + 'skills.detail.tags': '标签', + 'skills.detail.warnings': '警告', + 'skills.install.errors.alreadyInstalledHint': + '工作区中已存在此 slug 的技能。首先将其删除或更改 frontmatter `metadata.id` / `name`。', + 'skills.install.errors.alreadyInstalledTitle': '技能已安装', + 'skills.install.errors.fetchFailedHint': + '请求未成功完成。检查 URL 指向可访问的公共文件,并且主机返回 2xx 响应。', + 'skills.install.errors.fetchFailedTitle': '获取失败', + 'skills.install.errors.fetchTimedOutHint': '远程主机没有及时响应。请重试或提高超时(1-600 秒)。', + 'skills.install.errors.fetchTimedOutTitle': '获取超时', + 'skills.install.errors.fetchTooLargeHint': + 'SKILL.md 必须小于 1 MiB。将捆绑的资源拆分为“references/”或“scripts/”文件,而不是内联它们。', + 'skills.install.errors.fetchTooLargeTitle': 'SKILL.md 太大', + 'skills.install.errors.genericHint': '后端返回错误。原始消息如下所示。', + 'skills.install.errors.genericTitle': '无法安装技能', + 'skills.install.errors.invalidSkillHint': + 'frontmatter 必须是有效的 YAML,具有非空的“name”和“description”字段,并以“---”结尾。', + 'skills.install.errors.invalidSkillTitle': 'SKILL.md 未解析', + 'skills.install.errors.invalidUrlHint': '仅允许公共 HTTPS URL。私有、环回和元数据主机被阻止。', + 'skills.install.errors.invalidUrlTitle': 'URL 被拒绝', + 'skills.install.errors.unsupportedUrlHint': + '只有直接的“.md”链接才有效。对于 GitHub,链接到文件 (github.com/owner/repo/blob/.../SKILL.md) - 未安装树和存储库根。', + 'skills.install.errors.unsupportedUrlTitle': '不支持 URL 形式', + 'skills.install.errors.writeFailedHint': + '工作区技能目录不可写。检查“/.open human/skills/”的文件系统权限。', + 'skills.install.errors.writeFailedTitle': '无法写入 SKILL.md', + 'skills.install.fetchLog': '获取日志', + 'skills.install.fetchingPrefix': '抓取', + 'skills.install.fetchingSuffix': '这可能需要您配置的超时时间。', + 'skills.install.installBtn': '安装中…', + 'skills.install.installComplete': '安装完成', + 'skills.install.installing': '安装中…', + 'skills.install.parseWarnings': '解析警告', + 'skills.install.rawError': '原始错误', + 'skills.install.subtitleMiddle': 'over HTTPS 并将其安装在', + 'skills.install.subtitlePrefix': '获取单个', + 'skills.install.subtitleSuffix': '仅 HTTPS;私有和环回主机被阻止。', + 'skills.install.successDiscovered': '发现{count}新技能。', + 'skills.install.successNoNewIds': + '已安装技能,但没有出现新的技能 ID - 目录可能已包含具有相同 slug 的技能。', + 'skills.install.timeoutHint': '(秒,可选)', + 'skills.install.timeoutHelp': '默认为 60 秒。 1-600 之外的值在服务器端被限制。', + 'skills.install.timeoutInvalid': '必须是 1 到 600 之间的整数。', + 'skills.install.timeoutLabel': '超时', + 'skills.install.timeoutPlaceholder': '60', + 'skills.install.title': '从 URL 安装技能', + 'skills.install.urlHelpMiddle': '文件。', + 'skills.install.urlHelpPrefix': '直接链接到', + 'skills.install.urlHelpSuffix': 'URLs 自动重写为', + 'skills.install.urlInvalidPrefix': 'URL 必须是格式良好的', + 'skills.install.urlInvalidSuffix': '链接。', + 'skills.install.urlLabel': '技能 URL', + 'skills.install.urlPlaceholder': 'https://raw.githubusercontent.com/owner/repo/main/SKILL.md', + 'skills.meetingBots.bannerDesc': '让 OpenHuman 加入你的会议,自动记录摘要', + 'skills.meetingBots.bannerTitle': '会议机器人', + 'skills.meetingBots.busyTitle': 'OpenHuman 正忙', + 'skills.meetingBots.comingSoon': '即将推出', + 'skills.meetingBots.couldNotStartTitle': '无法启动 OpenHuman', + 'skills.meetingBots.displayName': '显示名称', + 'skills.meetingBots.failedToStart': '启动 OpenHuman 失败。', + 'skills.meetingBots.joiningMessage': '它应该在几秒钟内作为参会者出现。', + 'skills.meetingBots.joiningTitle': 'OpenHuman 正在加入会议', + 'skills.meetingBots.meetingLink': '会议链接', + 'skills.meetingBots.modalAriaLabel': '将 OpenHuman 发送到会议', + 'skills.meetingBots.modalDesc': '输入会议链接,让 OpenHuman 作为参会者加入并记录内容。', + 'skills.meetingBots.modalTitle': '将 OpenHuman 发送到会议', + 'skills.meetingBots.newBadge': '新', + 'skills.meetingBots.platformComingSoon': '{label} 支持即将推出。', + 'skills.meetingBots.platformHints.gmeet': 'meet.google.com/abc-defg-hij', + 'skills.meetingBots.platformHints.teams': 'team.microsoft.com/...', + 'skills.meetingBots.platformHints.zoom': 'Zoom.us/j/...', + 'skills.meetingBots.platforms.gmeet': 'Google 见面', + 'skills.meetingBots.platforms.teams': '微软团队', + 'skills.meetingBots.platforms.zoom': '变焦', + 'skills.meetingBots.sendTo': '发送到会议', + 'skills.meetingBots.soonSuffix': '很快', + 'skills.meetingBots.starting': '启动中…', + 'skills.resource.preview.closeAriaLabel': '关闭预览', + 'skills.resource.preview.failed': '预览失败', + 'skills.resource.preview.loading': '加载预览中…', + 'skills.resource.tree.empty': '无捆绑资源。', + 'skills.search.placeholder': '搜索技能...', + 'skills.setup.autocomplete.acceptKey': '接受键', + 'skills.setup.autocomplete.activeDesc': '自动补全已激活,正在为你提供智能建议', + 'skills.setup.autocomplete.activeTitle': '自动补全已激活', + 'skills.setup.autocomplete.customizeSettings': '自定义设置', + 'skills.setup.autocomplete.debounce': '防抖', + 'skills.setup.autocomplete.description': '在你输入时提供智能文本建议', + 'skills.setup.autocomplete.enableBtn': '启用中...', + 'skills.setup.autocomplete.enableError': '启用自动补全失败', + 'skills.setup.autocomplete.enabling': '启用中...', + 'skills.setup.autocomplete.notSupported': '不支持', + 'skills.setup.autocomplete.stepEnable': '启用内联补全', + 'skills.setup.autocomplete.stepSuccess': '准备就绪', + 'skills.setup.autocomplete.stylePreset': '风格预设', + 'skills.setup.autocomplete.stylePresetValue': '均衡(稍后可配置)', + 'skills.setup.autocomplete.title': '文本自动补全', + 'skills.setup.screenIntel.activeDesc': '屏幕智能已激活,正在感知你的屏幕', + 'skills.setup.screenIntel.activeTitle': '屏幕智能已启用', + 'skills.setup.screenIntel.advancedSettings': '高级设置', + 'skills.setup.screenIntel.allGranted': '所有权限已授予', + 'skills.setup.screenIntel.captureMode': '捕获模式', + 'skills.setup.screenIntel.captureModeValue': '所有窗口(稍后可配置)', + 'skills.setup.screenIntel.deniedHint': '在系统设置中授权后,点击下方重启以应用更改。', + 'skills.setup.screenIntel.enableBtn': '启用中...', + 'skills.setup.screenIntel.enableDesc': '检测屏幕上的内容并将有用的上下文提供给助手', + 'skills.setup.screenIntel.enableError': '启用屏幕智能失败', + 'skills.setup.screenIntel.enabling': '启用中...', + 'skills.setup.screenIntel.grant': '打开中...', + 'skills.setup.screenIntel.granted': '已授予', + 'skills.setup.screenIntel.macosOnly': '仅支持 macOS', + 'skills.setup.screenIntel.opening': '打开中...', + 'skills.setup.screenIntel.panicHotkey': '紧急热键', + 'skills.setup.screenIntel.permAccessibility': '辅助功能', + 'skills.setup.screenIntel.permInputMonitoring': '输入监控', + 'skills.setup.screenIntel.permScreenRecording': '屏幕录制', + 'skills.setup.screenIntel.permissionsDesc': '屏幕智能需要以下权限才能正常工作', + 'skills.setup.screenIntel.permissionPathLabel': 'macOS 将隐私应用于:', + 'skills.setup.screenIntel.refreshStatus': '刷新状态', + 'skills.setup.screenIntel.restartRefresh': '重启中...', + 'skills.setup.screenIntel.restarting': '重启中...', + 'skills.setup.screenIntel.stepEnable': '启用技能', + 'skills.setup.screenIntel.stepPermissions': '授予权限', + 'skills.setup.screenIntel.stepSuccess': '准备就绪', + 'skills.setup.screenIntel.title': '屏幕智能', + 'skills.setup.screenIntel.visionModel': '视觉模型', + 'skills.setup.voice.activation': '激活方式', + 'skills.setup.voice.activeDescPrefix': 'Fn', + 'skills.setup.voice.activeDescSuffix': 'Fn', + 'skills.setup.voice.activeTitle': '语音智能已激活', + 'skills.setup.voice.customizeSettings': '自定义设置', + 'skills.setup.voice.downloadSttBtn': '下载 STT 模型', + 'skills.setup.voice.enableDesc': '启用语音输入和输出功能', + 'skills.setup.voice.hotkey': '热键', + 'skills.setup.voice.startBtn': '启动中...', + 'skills.setup.voice.startError': '启动语音服务失败', + 'skills.setup.voice.starting': '启动中...', + 'skills.setup.voice.stepEnable': '启动语音服务', + 'skills.setup.voice.stepSetup': '需要下载模型', + 'skills.setup.voice.stepSuccess': '准备就绪', + 'skills.setup.voice.sttNotReady': '语音转文本模型未就绪', + 'skills.setup.voice.sttNotReadyDesc': + '语音智能需要本地 Whisper 模型进行转录。请从本地模型设置中下载。', + 'skills.setup.voice.sttReady': '语音转文本模型已就绪', + 'skills.setup.voice.sttReturnHint': '完成后将返回此页面', + 'skills.setup.voice.title': '语音智能', + 'skills.uninstall.couldNotUninstall': '无法卸载', + 'skills.uninstall.description': + '这将永久删除技能目录及其所有捆绑资源。智能体将在下一轮停止看到它。', + 'skills.uninstall.title': '卸载', + 'skills.uninstall.uninstallBtn': '卸载', + 'skills.uninstall.uninstalling': '卸载中…', + 'upsell.global.limitMessage': '升级方案或充值配额以继续使用', + 'upsell.global.limitTitle': '已达使用限制', + 'upsell.global.nearLimitMessage': '你已使用了 {pct}% 的使用限制。升级以获得更高限额。', + 'upsell.global.nearLimitTitle': '接近使用限制', + 'upsell.usageLimit.bodyBudget': '你已达到每周限制。', + 'upsell.usageLimit.bodyRate': '你已达到 10 小时推理速率限制。', + 'upsell.usageLimit.heading': '已达使用限制', + 'upsell.usageLimit.notNow': '暂不', + 'upsell.usageLimit.perWindow': '{amount}', + 'upsell.usageLimit.planIncludes': '{plan}', + 'upsell.usageLimit.resetsIn': '重置时间', + 'upsell.usageLimit.upgradePlan': '升级方案', + 'upsell.usageLimit.weeklyInference': '{amount}', + 'walkthrough.tooltip.letsGo': '出发吧!', + 'walkthrough.tooltip.next': '下一步 →', + 'walkthrough.tooltip.skip': '跳过引导', + 'walkthrough.tooltip.stepCounter': '{n} / {total}', + 'webhooks.activity.empty': '暂无活动', + 'webhooks.activity.title': '最近活动', + 'webhooks.composioHistory.empty': '暂无记录', + 'webhooks.composioHistory.metadataId': '元数据 ID', + 'webhooks.composioHistory.metadataUuid': '元数据 UUID', + 'webhooks.composioHistory.payload': '载荷', + 'webhooks.composioHistory.title': 'ComposeIO 触发器历史', + 'webhooks.tunnels.active': '活跃', + 'webhooks.tunnels.createFailed': '创建隧道失败', + 'webhooks.tunnels.creating': '创建中...', + 'webhooks.tunnels.deleteFailed': '删除隧道失败', + 'webhooks.tunnels.descriptionPlaceholder': '描述(可选)', + 'webhooks.tunnels.echo': '回显', + 'webhooks.tunnels.empty': '暂无隧道', + 'webhooks.tunnels.enableEcho': '启用回显', + 'webhooks.tunnels.inactive': '未激活', + 'webhooks.tunnels.namePlaceholder': '隧道名称(例如:telegram-bot)', + 'webhooks.tunnels.newTunnel': '新建隧道', + 'webhooks.tunnels.removeEcho': '移除回显', + 'webhooks.tunnels.title': 'Webhook 隧道', + 'webhooks.tunnels.toggleFailed': '切换回显失败', + 'composio.directModeRequiresKey': '保存失败。直连模式需要非空的 API 密钥。', + 'composio.integrationSlugsHelp': '以逗号分隔的集成段,例如', + 'composio.integrationSlugsExample': 'Gmail、松弛', + 'composio.integrationSlugsCaseInsensitive': '不区分大小写。', + 'composio.integrationSlugsPlaceholder': 'Gmail、松弛、...', + 'composio.notYetRouted': '尚未路由', + 'composio.triggers.loading': '加载中…', + 'conversations.taskKanban.todo': '待办', + 'chat.addReaction': '添加反应', + 'chat.agentProfile.create': '创建代理资料', + 'chat.agentProfile.createFailed': '无法创建代理配置文件。', + 'chat.agentProfile.customDescription': '定制代理资料', + 'chat.agentProfile.defaultAgentLabel': '协调者', + 'chat.agentProfile.exists': '代理配置文件“{name}”已存在。', + 'chat.agentProfile.label': '代理简介', + 'chat.agentProfile.namePlaceholder': '个人资料名称', + 'chat.agentProfile.promptStylePlaceholder': '提示风格', + 'chat.agentProfile.allowedToolsPlaceholder': '允许使用的工具', + 'chat.backToThread': '返回{title}', + 'chat.parentThread': '父线程', + 'chat.removeReaction': '删除 {emoji}', + 'settings.composio.loading': '加载中…', + 'settings.mascot.noCharactersAvailable': '暂无可用的 OpenHuman 角色', + 'skills.uninstall.confirmTitle': '卸载 {name}?', + 'conversations.taskKanban.blocked': '已阻塞', + 'conversations.taskKanban.done': '已完成', + 'conversations.taskKanban.pending': '待处理', + 'conversations.taskKanban.working': '处理中', + 'conversations.taskKanban.awaitingApproval': '等待批准', + 'conversations.taskKanban.ready': '就绪', + 'conversations.taskKanban.rejected': '已拒绝', + 'conversations.taskKanban.inProgress': '进行中', + 'intelligence.memoryChunk.detail.copiedHint': '已复制', + 'settings.composio.notYetRouted': '尚未路由', + 'settings.localModel.download.manageExternal': '在外部运行时中管理此模型。', + 'settings.localModel.status.manageOllamaExternal': + '请在 OpenHuman 之外管理 Ollama 进程和模型拉取,然后重新运行诊断。', + 'settings.localModel.status.ollamaDocs': 'Ollama 文档', + 'settings.localModel.status.thenRetry': '获取设置说明,待你的运行时可达后再重试。', + 'devOptions.menuAi': 'AI 配置', + 'devOptions.menuAiDesc': '云端提供商、本地 Ollama 模型与按工作负载路由', + 'devOptions.menuScreenAware': '屏幕感知', + 'devOptions.menuScreenAwareDesc': '屏幕捕获权限、监控策略与会话控制', + 'devOptions.menuMessaging': '消息通道', + 'devOptions.menuMessagingDesc': '配置 Telegram/Discord 认证模式与默认通道路由', + 'devOptions.menuTools': '工具', + 'devOptions.menuToolsDesc': '启用或禁用 OpenHuman 可代表你使用的能力', + 'devOptions.menuAgentChat': '代理对话', + 'devOptions.menuAgentChatDesc': '使用模型和温度覆盖测试代理对话', + 'devOptions.menuCronJobs': '定时任务', + 'devOptions.menuCronJobsDesc': '查看和配置运行时技能的定时任务', + 'devOptions.menuLocalModelDebug': '本地模型调试', + 'devOptions.menuLocalModelDebugDesc': 'Ollama 配置、资源下载、模型测试与诊断', + 'devOptions.menuWebhooksDebug': '网络钩子', + 'devOptions.menuWebhooksDebugDesc': '查看运行时 webhook 注册和已捕获的请求日志', + 'devOptions.menuIntelligence': '智能', + 'devOptions.menuIntelligenceDesc': '记忆工作区、潜意识引擎、梦境与设置', + 'devOptions.menuNotificationRouting': '通知路由', + 'devOptions.menuNotificationRoutingDesc': 'AI 重要性评分与集成警报的协调升级', + 'devOptions.menuComposeIOTriggers': 'ComposeIO 触发器', + 'devOptions.menuComposeIOTriggersDesc': '查看 ComposeIO 触发器历史与归档', + 'devOptions.menuComposioRouting': 'Composio 路由 (直连模式)', + 'devOptions.menuComposioRoutingDesc': + '使用你自己的 Composio API 密钥,将调用直接路由到 backend.composio.dev', + 'devOptions.menuComposioTriggers': '集成触发器', + 'devOptions.menuComposioTriggersDesc': '为 Composio 集成触发器配置 AI 分级设置', + 'memory.sourceFilterAria': '按来源过滤', + 'calls.comingSoonDescription': '人工智能辅助通话即将推出。敬请关注。', + 'vault.title': '知识库', + 'vault.description': '指向本地文件夹;文件被分块并镜像到内存中。', + 'vault.add': '添加保险库', + 'vault.added': '添加了保险库', + 'vault.createdMessage': '创建“{name}”。单击 {sync} 进行摄取。', + 'vault.couldNotAdd': '无法添加保管库', + 'vault.syncFailed': '同步失败', + 'vault.syncFailedFor': '“{name}”同步失败', + 'vault.syncFailedFiles': '{count} 文件失败', + 'vault.syncedTitle': '已同步“{name}”', + 'vault.syncSummary': '摄入 {ingested},未改变 {unchanged},移除 {removed}', + 'vault.syncSummaryFailed': ',失败 {count}', + 'vault.syncSummarySkipped': ',跳过 {count}', + 'vault.syncSummaryDuration': ' · {seconds}s', + 'vault.confirmRemovePurge': + '删除存储库「{name}」?\n\n点击确定将同时清除其记忆(删除全部 {count} 个已导入文档)。\n点击取消将保留记忆中的文档。', + 'vault.confirmRemove': '真的删除保险库“{name}”吗?', + 'vault.removed': '保险库已移除', + 'vault.removedPurgedMessage': '删除了“{name}”并清除了其内存。', + 'vault.removedKeptMessage': '删除了“{name}”。保存在内存中的文档。', + 'vault.couldNotRemove': '无法删除保管库', + 'vault.name': '名称', + 'vault.namePlaceholder': '我的研究笔记', + 'vault.folderPath': '文件夹路径(绝对)', + 'vault.folderPathPlaceholder': '/用户/您/文档/注释', + 'vault.excludes': '排除(逗号分隔的子字符串,可选)', + 'vault.excludesPlaceholder': '草稿/,.秘密', + 'vault.creating': '创造……', + 'vault.create': '创建保管库', + 'vault.loading': '正在加载金库...', + 'vault.failedToLoad': '无法加载保管库:{error}', + 'vault.empty': '还没有金库。在上面添加一个即可开始摄取文件夹。', + 'vault.fileCount': '{count} 文件', + 'vault.syncedRelative': '已同步 {time}', + 'vault.neverSynced': '从未同步过', + 'vault.syncingProgress': '正在同步... {ingested}/{total}', + 'vault.removing': '正在删除...', + 'vault.relative.sec': '{count} 秒前', + 'vault.relative.min': '{count}分钟前', + 'vault.relative.hr': '{count} 小时前', + 'vault.relative.day': '{count} 天前', + 'whatsapp.title': 'WhatsApp', + 'subconscious.interval.fiveMinutes': '5分钟', + 'subconscious.interval.tenMinutes': '10分钟', + 'subconscious.interval.fifteenMinutes': '15分钟', + 'subconscious.interval.thirtyMinutes': '30分钟', + 'subconscious.interval.oneHour': '1小时', + 'subconscious.interval.sixHours': '6小时', + 'subconscious.interval.twelveHours': '12小时', + 'subconscious.interval.oneDay': '1天', + 'subconscious.priority.critical': '批评的', + 'subconscious.priority.important': '重要的', + 'subconscious.priority.normal': '正常', + 'subconscious.durationSeconds': '{seconds}s', + 'subconscious.durationMilliseconds': '{milliseconds}毫秒', + 'settings.appearance': '外观', + 'settings.appearanceDesc': '选择浅色、深色或跟随系统主题', + 'settings.mascot': '吉祥物', + 'settings.mascotDesc': '选择应用中使用的吉祥物颜色', + 'pages.settings.account.walletBalances': '钱包余额', + 'pages.settings.account.walletBalancesDesc': '查看本地钱包的多链余额', + 'walletBalances.title': '钱包余额', + 'walletBalances.refresh': 'Refresh', + 'walletBalances.loading': '正在加载余额…', + 'walletBalances.retry': 'Retry', + 'walletBalances.emptyState': '暂无钱包账户——请在恢复助记词中设置钱包。', + 'walletBalances.copyAddress': '复制地址', + 'walletBalances.providerMissing': '服务商不可用', + 'walletBalances.rawBalance': '原始值:{raw}', + 'walletBalances.errorGeneric': '无法加载钱包余额。请在恢复助记词中设置钱包后重试。', + 'settings.taskSources.title': '任务来源', + 'settings.taskSources.subtitle': '从你的工具拉取任务到智能体待办板', + 'settings.taskSources.description': + '从 GitHub、Notion、Linear 和 ClickUp 收集工作项,补充信息后路由到智能体待办板。', + 'settings.taskSources.connectHint': '任务来源会使用你已连接的账户。请先在集成中连接它们。', + 'settings.taskSources.disabledBanner': '任务来源已在设置中禁用。启用后可自动轮询。', + 'settings.taskSources.loadError': '加载任务来源失败', + 'settings.taskSources.addTitle': '添加任务来源', + 'settings.taskSources.provider': '提供商', + 'settings.taskSources.name': '名称(可选)', + 'settings.taskSources.namePlaceholder': '例如 我的未解决 issue', + 'settings.taskSources.github.repo': '仓库(所有者/名称,可选)', + 'settings.taskSources.github.labels': '标签(逗号分隔)', + 'settings.taskSources.notion.database': '数据库(看板)ID', + 'settings.taskSources.linear.team': '团队 ID(可选)', + 'settings.taskSources.clickup.team': '工作区(团队)ID(可选)', + 'settings.taskSources.assignedToMe': '仅限分配给我的项目', + 'settings.taskSources.add': '添加来源', + 'settings.taskSources.adding': '添加中…', + 'settings.taskSources.preview': '预览', + 'settings.taskSources.previewResult': '{count} 个任务匹配此筛选器', + 'settings.taskSources.fetchNow': '立即获取', + 'settings.taskSources.fetching': '获取中…', + 'settings.taskSources.fetchResult': '已路由 {routed}/{fetched} 个任务', + 'settings.taskSources.configured': '已配置来源', + 'settings.taskSources.empty': '尚未配置任务来源。', + 'settings.taskSources.proactive': '主动', + 'settings.taskSources.lastFetch': '上次获取', + 'settings.taskSources.never': '从未', + 'settings.taskSources.statusEnabled': '已启用', + 'settings.taskSources.statusDisabled': '已禁用', + 'settings.taskSources.enable': '启用', + 'settings.taskSources.disable': '禁用', + 'settings.taskSources.remove': '移除', + 'settings.taskSources.removeConfirm': + '移除此任务来源?所有已摄取的任务历史都将被删除,且无法撤销。', + 'settings.taskSources.refresh': '刷新', + 'settings.taskSources.providers.github': 'GitHub', + 'settings.taskSources.providers.notion': 'Notion', + 'settings.taskSources.providers.linear': 'Linear', + 'settings.taskSources.providers.clickup': 'ClickUp', + 'skills.dashboard.title': 'Skills', + 'skills.dashboard.scheduledHeading': '定时技能', + 'skills.dashboard.emptyTitle': '暂无定时技能', + 'skills.dashboard.emptyBody': '运行一次内置技能或保存定期计划后,将在此处显示。', + 'skills.dashboard.create': '创建技能', + 'skills.dashboard.run': '运行技能', + 'skills.dashboard.enable': '启用定时技能', + 'skills.dashboard.disable': '禁用定时技能', + 'skills.dashboard.lastRun': '上次运行', + 'skills.dashboard.nextRun': '下次运行', + 'skills.dashboard.cardOpenRunner': '在运行器中打开', + 'skills.dashboard.loadError': '加载定时技能失败', + 'skills.new.title': '创建技能', + 'skills.new.placeholderBody': '编写表单即将上线。目前请使用运行器页面上的「新建技能」按钮。', + 'settings.agents.title': '智能体', + 'settings.agents.subtitle': '管理可委派的智能体,包括内置默认智能体和你自定义的智能体。', + 'settings.agents.menuDesc': '管理内置和自定义智能体', + 'settings.agents.newAgent': '新建智能体', + 'settings.agents.loadError': '无法加载智能体', + 'settings.agents.empty': '暂无智能体', + 'settings.agents.sourceDefault': '内置', + 'settings.agents.sourceCustom': '自定义', + 'settings.agents.enable': '启用智能体', + 'settings.agents.disable': '禁用智能体', + 'settings.agents.edit': '编辑', + 'settings.agents.delete': '删除', + 'settings.agents.reset': '恢复默认', + 'settings.agents.modelLabel': '模型', + 'settings.agents.toolsLabel': '工具', + 'settings.agents.toolsAll': '所有工具', + 'settings.agents.toolsCount': '{count} 个工具', + 'settings.agents.actionFailed': '无法更新智能体', + 'settings.agents.orchestratorLocked': '编排智能体始终启用。', + 'settings.agents.editor.createTitle': '新建智能体', + 'settings.agents.editor.editTitle': '编辑智能体', + 'settings.agents.editor.id': 'ID', + 'settings.agents.editor.idHint': '仅限小写字母、数字、_ 和 -。', + 'settings.agents.editor.name': '名称', + 'settings.agents.editor.description': '描述', + 'settings.agents.editor.model': '模型(可选)', + 'settings.agents.editor.modelPlaceholder': '例如 inherit、hint:fast 或模型 ID', + 'settings.agents.editor.systemPrompt': '系统提示词(可选)', + 'settings.agents.editor.tools': '允许的工具', + 'settings.agents.editor.toolsHint': '每行一个工具名称。使用 * 表示所有工具。', + 'settings.agents.editor.defaultsNote': '编辑内置智能体会保存一份覆盖配置,之后可重置。', + 'settings.agents.editor.save': '保存', + 'settings.agents.editor.create': '创建智能体', + 'settings.agents.editor.saving': '保存中…', + 'settings.agentsSection.title': 'Agents', + 'settings.agentsSection.description': '管理您的智能体、其自主权及其在本机上的访问权限。', + 'settings.agentsSection.menuDesc': '注册表、自主权与系统访问', + 'settings.agents.editor.notFound': '未找到智能体。', + 'settings.agents.editor.modelInherit': '继承(平台默认)', + 'settings.agents.editor.modelHints': '路由提示', + 'settings.agents.editor.modelTiers': '模型层级', + 'settings.agents.editor.modelCustom': '自定义模型 ID…', + 'settings.agents.editor.modelCustomPlaceholder': '例如 anthropic/claude-sonnet-4', + 'settings.agents.editor.selectTools': '添加工具', + 'settings.agents.editor.toolsAllSelected': '所有工具', + 'settings.agents.editor.toolsNoneSelected': '未选择工具', + 'settings.agents.editor.removeToolAria': '移除 {tool}', + 'settings.agents.editor.toolsModalTitle': '已允许的工具', + 'settings.agents.editor.toolsSelectedCount': '已选 {count} 个', + 'settings.agents.editor.toolsSearchPlaceholder': '搜索工具…', + 'settings.agents.editor.toolsAllowAll': '允许所有工具 (*)', + 'settings.agents.editor.toolsAllowAllHint': '该智能体可以使用所有可用工具。', + 'settings.agents.editor.toolsLoading': '正在加载工具…', + 'settings.agents.editor.toolsLoadError': '无法加载工具', + 'settings.agents.editor.toolsEmpty': '没有匹配的工具。', + 'settings.agents.editor.toolsDone': 'Done', + 'settings.agents.editor.builtInReadonly': + '内置智能体不可编辑。您可以在智能体列表中启用、禁用或重置它们。', }; -export default zhCN; +export default messages; diff --git a/package.json b/package.json index 0bcce005c..5eb28072c 100644 --- a/package.json +++ b/package.json @@ -51,6 +51,7 @@ "tauri:android:dev": "pnpm --filter openhuman-app tauri:android:dev", "tauri:android:build": "pnpm --filter openhuman-app tauri:android:build", "i18n:check": "tsx scripts/i18n-coverage.ts", + "i18n:english:check": "tsx scripts/i18n-find-english.ts", "i18n:react:check": "tsx scripts/i18n-react-audit.ts", "i18n:bundle:check": "node scripts/verify-i18n-bundle.mjs", "i18n:dump": "tsx scripts/i18n-coverage.ts --no-unused --out tmp/i18n-coverage" diff --git a/scripts/apply-i18n-translations.ts b/scripts/apply-i18n-translations.ts index 1ba990231..22f52814d 100644 --- a/scripts/apply-i18n-translations.ts +++ b/scripts/apply-i18n-translations.ts @@ -1,6 +1,6 @@ #!/usr/bin/env -S pnpm exec tsx /** - * apply-i18n-translations — merge a translations file into chunked locale files. + * apply-i18n-translations — merge a translations file into a single locale file. * * Input (one file per locale, default dir tmp/i18n-translations/): * { @@ -9,10 +9,11 @@ * } * * Behavior: - * - Loads the existing locale chunks (keeps current translations for keys not in input). - * - For each English chunk (1..5), writes -N.ts containing every key in en-N's - * order. Value precedence: new translation → existing translation → English fallback. - * - Single-quoted JS string literals with safe escaping. Header comment preserved per locale. + * - Loads the existing app/src/lib/i18n/.ts (keeps current values for keys + * not present in the input). + * - Rewrites .ts containing every English key in en.ts order. Value + * precedence: new translation → existing translation → English fallback. + * - Single-quoted JS string literals with safe escaping. Header comment preserved. * * Usage: * pnpm exec tsx scripts/apply-i18n-translations.ts [--dir tmp/i18n-translations] [--locale es] @@ -24,8 +25,7 @@ import { fileURLToPath, pathToFileURL } from "node:url"; const __filename = fileURLToPath(import.meta.url); const ROOT = path.resolve(path.dirname(__filename), ".."); -const CHUNKS_DIR = path.join(ROOT, "app/src/lib/i18n/chunks"); -const CHUNK_COUNT = 5; +const I18N_DIR = path.join(ROOT, "app/src/lib/i18n"); const LOCALE_HEADERS: Record = { "zh-CN": "Simplified Chinese (简体中文)", @@ -39,6 +39,8 @@ const LOCALE_HEADERS: Record = { ru: "Russian (Русский)", id: "Indonesian (Bahasa Indonesia)", it: "Italian (Italiano)", + ko: "Korean (한국어)", + pl: "Polish (Polski)", }; interface InputFile { @@ -69,17 +71,8 @@ function jsString(s: string): string { return "'" + escaped + "'"; } -function camelVar(locale: string, n: number): string { - // zh-CN → zhCN5, en → en5 - const safe = locale.replace(/-([a-z])/gi, (_, c: string) => c.toUpperCase()); - return `${safe}${n}`; -} - -async function loadChunk( - locale: string, - n: number, -): Promise> { - const p = path.join(CHUNKS_DIR, `${locale}-${n}.ts`); +async function loadLocale(locale: string): Promise> { + const p = path.join(I18N_DIR, `${locale}.ts`); const mod = await import(pathToFileURL(p).href); if (!mod.default || typeof mod.default !== "object") { throw new Error(`${p}: missing default export`); @@ -87,71 +80,62 @@ async function loadChunk( return mod.default as Record; } -async function loadEnChunkKeysInOrder(n: number): Promise { - // Object key insertion order is preserved in V8 for string keys, so importing en-N - // and reading Object.keys gives us source order. - const en = await loadChunk("en", n); - return Object.keys(en); -} - -async function writeChunk( +async function writeLocale( locale: string, - n: number, - keysInOrder: string[], + enKeysInOrder: string[], values: Record, ): Promise { const langLabel = LOCALE_HEADERS[locale] ?? locale; const lines: string[] = []; - lines.push(`import type { TranslationMap } from '../types';`); + lines.push(`import type { TranslationMap } from './types';`); lines.push(""); + lines.push(`// ${langLabel} translations. Keys mirror en.ts; missing/`); lines.push( - `// ${langLabel} chunk ${n}/${CHUNK_COUNT}. Translated from chunks/en-${n}.ts.`, + `// English-identical values fall back to English via I18nContext.resolveEn().`, ); - lines.push(`const ${camelVar(locale, n)}: TranslationMap = {`); - for (const k of keysInOrder) { + lines.push(`const messages: TranslationMap = {`); + for (const k of enKeysInOrder) { const v = values[k]; if (v === undefined) continue; // shouldn't happen — English fallback ensures coverage lines.push(` ${jsString(k)}: ${jsString(v)},`); } lines.push(`};`); lines.push(""); - lines.push(`export default ${camelVar(locale, n)};`); + lines.push(`export default messages;`); lines.push(""); - const file = path.join(CHUNKS_DIR, `${locale}-${n}.ts`); + const file = path.join(I18N_DIR, `${locale}.ts`); await fs.writeFile(file, lines.join("\n")); } async function applyLocale( input: InputFile, + enKeys: string[], + enValues: Record, ): Promise<{ updated: number; total: number }> { const { locale, translations } = input; if (locale === "en") throw new Error("refusing to overwrite English source"); let updated = 0; let total = 0; - for (let n = 1; n <= CHUNK_COUNT; n++) { - const enKeys = await loadEnChunkKeysInOrder(n); - const enValues = await loadChunk("en", n); - let existing: Record = {}; - try { - existing = await loadChunk(locale, n); - } catch { - existing = {}; - } - const merged: Record = {}; - for (const k of enKeys) { - total++; - if (Object.prototype.hasOwnProperty.call(translations, k)) { - const newVal = translations[k]; - if (newVal !== existing[k]) updated++; - merged[k] = newVal; - } else if (Object.prototype.hasOwnProperty.call(existing, k)) { - merged[k] = existing[k]; - } else { - merged[k] = enValues[k]; // shouldn't trigger if locale is in-sync - } - } - await writeChunk(locale, n, enKeys, merged); + let existing: Record = {}; + try { + existing = await loadLocale(locale); + } catch { + existing = {}; } + const merged: Record = {}; + for (const k of enKeys) { + total++; + if (Object.prototype.hasOwnProperty.call(translations, k)) { + const newVal = translations[k]; + if (newVal !== existing[k]) updated++; + merged[k] = newVal; + } else if (Object.prototype.hasOwnProperty.call(existing, k)) { + merged[k] = existing[k]; + } else { + merged[k] = enValues[k]; // shouldn't trigger if locale is in-sync + } + } + await writeLocale(locale, enKeys, merged); return { updated, total }; } @@ -172,6 +156,8 @@ async function main() { process.exit(2); } } + const enValues = await loadLocale("en"); + const enKeys = Object.keys(enValues); const entries = await fs.readdir(dir); for (const f of entries) { if (!f.endsWith(".json")) continue; @@ -185,7 +171,7 @@ async function main() { ); continue; } - const res = await applyLocale(input); + const res = await applyLocale(input, enKeys, enValues); console.log(`${locale}: ${res.updated}/${res.total} entries updated`); } } diff --git a/scripts/i18n-coverage.ts b/scripts/i18n-coverage.ts index add2f8964..11407dce5 100644 --- a/scripts/i18n-coverage.ts +++ b/scripts/i18n-coverage.ts @@ -1,17 +1,15 @@ #!/usr/bin/env -S pnpm exec tsx /** - * i18n-coverage — surface missing / incomplete / unused / drifted translation keys. + * i18n-coverage — surface missing / extra / unused / untranslated translation keys. * - * Source of truth: app/src/lib/i18n/chunks/en-{1..5}.ts (aggregated by app/src/lib/i18n/en.ts) - * Translations: app/src/lib/i18n/chunks/-{1..5}.ts (aggregated by .ts) + * Source of truth: app/src/lib/i18n/en.ts (single file, one flat key→string map) + * Translations: app/src/lib/i18n/.ts (single file per locale) * Locale list: app/src/lib/i18n/types.ts (Locale union) * * Reports, per locale: - * - missing chunk files - * - missing keys (in en, absent in locale) — overall + per chunk + * - missing keys (in en, absent in locale) * - extra keys (in locale, absent in en) * - placeholder/untranslated entries (value identical to English) - * - per-chunk drift (key belongs to en-N but locale put it in -M, M≠N) * * Repo-wide: * - unused keys (defined in en, never referenced via t('…') / t("…") in app/src) @@ -19,7 +17,7 @@ * Usage: pnpm exec tsx scripts/i18n-coverage.ts [--json] [--locale es,fr] [--no-unused] [--out ] * * With --out , writes one JSON per non-English locale (/.json) containing - * categorized work-lists for translators (missing, extra, drift, untranslated with en value). + * categorized work-lists for translators (missing, extra, untranslated with en value). */ import { promises as fs } from "node:fs"; @@ -29,9 +27,7 @@ import { fileURLToPath, pathToFileURL } from "node:url"; const __filename = fileURLToPath(import.meta.url); const ROOT = path.resolve(path.dirname(__filename), ".."); const I18N_DIR = path.join(ROOT, "app/src/lib/i18n"); -const CHUNKS_DIR = path.join(I18N_DIR, "chunks"); const APP_SRC = path.join(ROOT, "app/src"); -const CHUNK_COUNT = 5; const ALL_LOCALES = [ "en", @@ -46,6 +42,7 @@ const ALL_LOCALES = [ "ru", "id", "it", + "ko", "pl", ] as const; type Locale = (typeof ALL_LOCALES)[number]; @@ -113,21 +110,8 @@ function parseArgs(argv: string[]): CliOptions { return opts; } -async function fileExists(p: string): Promise { - try { - await fs.access(p); - return true; - } catch { - return false; - } -} - -async function loadChunk( - locale: Locale, - n: number, -): Promise | null> { - const p = path.join(CHUNKS_DIR, `${locale}-${n}.ts`); - if (!(await fileExists(p))) return null; +async function loadLocale(locale: Locale): Promise> { + const p = path.join(I18N_DIR, `${locale}.ts`); const mod = await import(pathToFileURL(p).href); const val = mod.default; if (!val || typeof val !== "object") { @@ -136,44 +120,10 @@ async function loadChunk( return val as Record; } -interface LocaleData { - chunks: Array | null>; // index 0..CHUNK_COUNT-1 - flat: Record; - keyToChunk: Map; // 1-indexed chunk number - missingChunks: number[]; // 1-indexed -} - -async function loadLocale(locale: Locale): Promise { - const chunks: Array | null> = []; - const flat: Record = {}; - const keyToChunk = new Map(); - const missingChunks: number[] = []; - - for (let n = 1; n <= CHUNK_COUNT; n++) { - const chunk = await loadChunk(locale, n); - chunks.push(chunk); - if (chunk === null) { - missingChunks.push(n); - continue; - } - for (const [k, v] of Object.entries(chunk)) { - // Last write wins (matches the runtime spread order in .ts). - flat[k] = v; - keyToChunk.set(k, n); - } - } - return { chunks, flat, keyToChunk, missingChunks }; -} - async function walkSourceFiles(dir: string, out: string[]): Promise { const entries = await fs.readdir(dir, { withFileTypes: true }); for (const e of entries) { - if ( - e.name === "node_modules" || - e.name === "__tests__" || - e.name === "lib/i18n" - ) - continue; + if (e.name === "node_modules" || e.name === "__tests__") continue; const p = path.join(dir, e.name); if (e.isDirectory()) { // Skip the i18n directory itself — we don't count the definitions as usages. @@ -206,25 +156,18 @@ async function collectUsedKeys(): Promise> { interface LocaleReport { locale: Locale; - missingChunks: number[]; totalKeys: number; missingKeys: string[]; extraKeys: string[]; - untranslatedKeys: string[]; // value === english value (excluding intentional brand strings) - driftedKeys: Array<{ - key: string; - expectedChunk: number; - actualChunk: number; - }>; - perChunk: Array<{ chunk: number; missing: number; total: number }>; + untranslatedKeys: string[]; // value === english value } function diffKeys( - en: LocaleData, - other: LocaleData, + en: Record, + other: Record, ): { missing: string[]; extra: string[] } { - const enKeys = new Set(Object.keys(en.flat)); - const otherKeys = new Set(Object.keys(other.flat)); + const enKeys = new Set(Object.keys(en)); + const otherKeys = new Set(Object.keys(other)); const missing: string[] = []; const extra: string[] = []; for (const k of enKeys) if (!otherKeys.has(k)) missing.push(k); @@ -234,10 +177,13 @@ function diffKeys( return { missing, extra }; } -function findUntranslated(en: LocaleData, other: LocaleData): string[] { +function findUntranslated( + en: Record, + other: Record, +): string[] { const out: string[] = []; - for (const [k, v] of Object.entries(other.flat)) { - const enV = en.flat[k]; + for (const [k, v] of Object.entries(other)) { + const enV = en[k]; if (enV === undefined) continue; if (v === enV && v.trim() !== "") out.push(k); } @@ -245,35 +191,6 @@ function findUntranslated(en: LocaleData, other: LocaleData): string[] { return out; } -function findDrift(en: LocaleData, other: LocaleData) { - const out: Array<{ - key: string; - expectedChunk: number; - actualChunk: number; - }> = []; - for (const [k, actual] of other.keyToChunk) { - const expected = en.keyToChunk.get(k); - if (expected !== undefined && expected !== actual) { - out.push({ key: k, expectedChunk: expected, actualChunk: actual }); - } - } - out.sort((a, b) => a.key.localeCompare(b.key)); - return out; -} - -function perChunkMissing(en: LocaleData, other: LocaleData) { - const out: Array<{ chunk: number; missing: number; total: number }> = []; - for (let n = 1; n <= CHUNK_COUNT; n++) { - const enChunk = en.chunks[n - 1] ?? {}; - const otherChunk = other.chunks[n - 1] ?? {}; - const enKeys = Object.keys(enChunk); - let missing = 0; - for (const k of enKeys) if (!(k in otherChunk)) missing++; - out.push({ chunk: n, missing, total: enKeys.length }); - } - return out; -} - function formatReport( reports: LocaleReport[], unusedKeys: string[] | null, @@ -283,23 +200,11 @@ function formatReport( lines.push(""); for (const r of reports) { lines.push(`## ${r.locale} (${r.totalKeys} keys)`); - if (r.missingChunks.length) { - lines.push( - ` ! missing chunk files: ${r.missingChunks.map((n) => `${r.locale}-${n}.ts`).join(", ")}`, - ); - } lines.push(` missing: ${r.missingKeys.length}`); lines.push(` extra: ${r.extraKeys.length}`); lines.push( ` untranslated: ${r.untranslatedKeys.length} (value identical to English)`, ); - lines.push( - ` drifted chunks: ${r.driftedKeys.length} (key in wrong chunk N)`, - ); - const pc = r.perChunk - .map((c) => `${c.chunk}:${c.total - c.missing}/${c.total}`) - .join(" "); - lines.push(` per-chunk: ${pc}`); if (r.missingKeys.length) { const preview = r.missingKeys.slice(0, 15).join(", "); const more = @@ -314,16 +219,6 @@ function formatReport( r.extraKeys.length > 15 ? `, … (+${r.extraKeys.length - 15} more)` : ""; lines.push(` extra[head]: ${preview}${more}`); } - if (r.driftedKeys.length) { - const sample = r.driftedKeys - .slice(0, 5) - .map( - (d) => - `${d.key} (en-${d.expectedChunk} → ${r.locale}-${d.actualChunk})`, - ) - .join("; "); - lines.push(` drift[head]: ${sample}`); - } lines.push(""); } if (unusedKeys) { @@ -343,30 +238,6 @@ async function main() { const opts = parseArgs(process.argv.slice(2)); const en = await loadLocale("en"); - if (en.missingChunks.length) { - console.error( - `! English chunks missing: ${en.missingChunks.join(", ")} — cannot continue.`, - ); - process.exit(2); - } - - // Guard against drift between en.ts (runtime source of truth) and the en-N.ts chunks. - // Both must agree key-for-key or downstream tests / translator workflows will diverge. - const enAggregateModule = (await import( - pathToFileURL(path.join(I18N_DIR, "en.ts")).href - )) as { default: Record }; - const enTsKeys = new Set(Object.keys(enAggregateModule.default)); - const enChunkKeys = new Set(Object.keys(en.flat)); - const inEnTsNotChunks = [...enTsKeys].filter((k) => !enChunkKeys.has(k)); - const inChunksNotEnTs = [...enChunkKeys].filter((k) => !enTsKeys.has(k)); - if (inEnTsNotChunks.length || inChunksNotEnTs.length) { - console.error( - `! Drift between en.ts and en-N.ts chunks:\n` + - ` in en.ts only: ${inEnTsNotChunks.join(", ") || "(none)"}\n` + - ` in chunks only: ${inChunksNotEnTs.join(", ") || "(none)"}`, - ); - process.exit(2); - } const reports: LocaleReport[] = []; for (const locale of opts.locales) { @@ -375,13 +246,10 @@ async function main() { const { missing, extra } = diffKeys(en, data); reports.push({ locale, - missingChunks: data.missingChunks, - totalKeys: Object.keys(data.flat).length, + totalKeys: Object.keys(data).length, missingKeys: missing, extraKeys: extra, untranslatedKeys: findUntranslated(en, data), - driftedKeys: findDrift(en, data), - perChunk: perChunkMissing(en, data), }); } @@ -391,25 +259,21 @@ async function main() { const data = await loadLocale(r.locale); const untranslated = r.untranslatedKeys.map((k) => ({ key: k, - en: en.flat[k], - current: data.flat[k], + en: en[k], + current: data[k], })); - const missing = r.missingKeys.map((k) => ({ key: k, en: en.flat[k] })); - const extra = r.extraKeys.map((k) => ({ key: k, current: data.flat[k] })); - const drift = r.driftedKeys; + const missing = r.missingKeys.map((k) => ({ key: k, en: en[k] })); + const extra = r.extraKeys.map((k) => ({ key: k, current: data[k] })); const out = { locale: r.locale, - generatedAt: new Date().toISOString(), counts: { total: r.totalKeys, missing: missing.length, extra: extra.length, - drift: drift.length, untranslated: untranslated.length, }, missing, extra, - drift, untranslated, }; const file = path.join(opts.outDir, `${r.locale}.json`); @@ -421,7 +285,7 @@ async function main() { let unused: string[] | null = null; if (opts.scanUnused) { const used = await collectUsedKeys(); - unused = Object.keys(en.flat) + unused = Object.keys(en) .filter((k) => !used.has(k)) .sort(); } @@ -430,7 +294,7 @@ async function main() { console.log( JSON.stringify( { - enKeyCount: Object.keys(en.flat).length, + enKeyCount: Object.keys(en).length, locales: reports, unusedKeys: unused, }, @@ -443,11 +307,7 @@ async function main() { } const localeFailure = reports.some( - (r) => - r.missingChunks.length || - r.missingKeys.length || - r.extraKeys.length || - r.driftedKeys.length, + (r) => r.missingKeys.length || r.extraKeys.length, ); const unusedFailure = opts.strictUnused && (unused?.length ?? 0) > 0; process.exit(localeFailure || unusedFailure ? 1 : 0); diff --git a/scripts/i18n-find-english.ts b/scripts/i18n-find-english.ts new file mode 100644 index 000000000..5f213aa2b --- /dev/null +++ b/scripts/i18n-find-english.ts @@ -0,0 +1,264 @@ +#!/usr/bin/env -S pnpm exec tsx +/** + * i18n-find-english — find locale values that are still (or have drifted back to) English. + * + * The coverage gate (i18n-coverage.ts) only flags values byte-identical to the current + * English string. It cannot see values that were translated from an OLD English string + * and never re-translated when the English copy changed ("stale English"), nor English + * prose that simply differs from the current en value. This tool detects both. + * + * Detection strategy (per locale): + * - Technical literals are skipped (pure placeholders, URLs, single-token identifiers, + * file paths, commands, values with no real word). + * - Non-Latin-script locales (zh-CN, hi, bn, ar, ru, ko): a non-technical value that + * contains NO character of the locale's native script is treated as English. + * (High recall — vocabulary-independent.) + * - Latin-script locales (de, es, fr, it, pt, id, pl): a non-technical value is flagged + * when it is identical to the current English value, OR when it contains >= 2 distinct + * English-only function words (the/and/while/may/your/…) that do not exist in any of + * these languages. (A vocabulary-ratio test is unreliable here because French/Spanish/ + * Italian/Portuguese share huge cognate vocabulary with English.) + * + * Usage: + * pnpm exec tsx scripts/i18n-find-english.ts # human report + * pnpm exec tsx scripts/i18n-find-english.ts --json # machine summary + * pnpm exec tsx scripts/i18n-find-english.ts --out # per-locale work-lists {locale, items:[{key,en}]} + * pnpm exec tsx scripts/i18n-find-english.ts --locale de,fr # subset + */ + +import { promises as fs } from "node:fs"; +import path from "node:path"; +import { fileURLToPath, pathToFileURL } from "node:url"; + +const __filename = fileURLToPath(import.meta.url); +const ROOT = path.resolve(path.dirname(__filename), ".."); +const I18N_DIR = path.join(ROOT, "app/src/lib/i18n"); + +const NATIVE_SCRIPT: Record = { + "zh-CN": /[㐀-䶿一-鿿豈-﫿]/, + hi: /[ऀ-ॿ]/, + bn: /[ঀ-৿]/, + ar: /[؀-ۿݐ-ݿࢠ-ࣿﭐ-﷿ﹰ-]/, + ru: /[Ѐ-ӿ]/, + ko: /[가-힯ᄀ-ᇿ㄰-㆏]/, +}; + +const LATIN_LOCALES = ["es", "fr", "pt", "de", "id", "it", "pl"] as const; +const ALL_LOCALES = [...Object.keys(NATIVE_SCRIPT), ...LATIN_LOCALES]; + +// Keys whose values are intentionally English in every locale: brand/product names, +// shell commands, file paths, glob patterns, code identifiers, example data, unit/technical +// tokens, pure placeholder patterns, and short labels that are valid cognates in the Latin +// locales. These are reviewed exceptions — a value flagged here is expected, not a bug. +// A key NOT in this set that the detector flags is a genuine untranslated string to fix. +const INTENTIONAL_ENGLISH = new Set([ + "app.connectionIndicator.coreOffline", + "channels.activeRouteValue", + "composio.integrationSlugsExample", + "composio.integrationSlugsPlaceholder", + "devOptions.toolPolicyDiagnostics.mcpAllowlists.allowDeny", + "intelligence.diagram.skillInstallCommand", + "intelligence.memoryChunk.detail.embeddingInfo", + "mcp.playground.argsLabel", + "memorySources.globPatternPlaceholder", + "memorySources.searchQueryPlaceholder", + "migration.vendor.hermes", + "screenAwareness.debug.defaultPanicHotkey", + "settings.ai.connectionsPerTick", + "settings.ai.localModelResolved", + "settings.ai.localOllama", + "settings.ai.minutesShort", + "settings.ai.openAiUrlLabel", + "settings.billing.inferenceBudget.dailySpendPoint", + "settings.localModel.download.embeddingModel", + "settings.localModel.download.ttsOutput", + "settings.localModel.status.contextOkBadge", + "settings.localModel.status.expectedChat", + "settings.localModel.status.expectedVision", + "settings.mcpServer.clientClaudeDesktop", + "settings.search.allowedSitesPlaceholder", + "settings.search.engineBraveLabel", + "settings.taskSources.name", + "skills.create.allowedToolsPlaceholder", + "skills.create.optional", + "skills.meetingBots.platforms.gmeet", + "skills.meetingBots.platforms.teams", + "subconscious.interval.fifteenMinutes", + "subconscious.interval.fiveMinutes", + "subconscious.interval.tenMinutes", + "subconscious.interval.thirtyMinutes", + "vault.excludesPlaceholder", + "vault.syncSummaryDuration", + "voice.providers.chip.piper", + "voice.providers.chip.whisper", + "voice.providers.whisperModelBase", + "walkthrough.tooltip.stepCounter", + "workspace.obsidianConfigDirPlaceholder", +]); + +// Distinctly-English function words that do NOT occur in es/fr/pt/de/id/it/pl. A Latin-script +// value carrying >= 2 of these is almost certainly English. Deliberately excludes ambiguous +// short words shared with those languages (a, in, is, no, to, or, of, on, as, by, an, so…). +const ENGLISH_FN = new Set( + ( + "the and you your this that these those with for will would shall should can cannot could " + + "may might must are were was have has had not they them their when which while from than " + + "then about after before without within into onto upon what who why how here there also " + + "only just very more most some any each both such please every between during through " + + "because however therefore otherwise whether doesn isn aren don won enabled disabled" + ).split(" "), +); + +interface CliOptions { + json: boolean; + outDir: string | null; + locales: string[]; +} + +function parseArgs(argv: string[]): CliOptions { + const opts: CliOptions = { + json: false, + outDir: null, + locales: [...ALL_LOCALES], + }; + for (let i = 0; i < argv.length; i++) { + const a = argv[i]; + if (a === "--json") opts.json = true; + else if (a === "--out") { + const v = argv[++i]; + if (!v || v.startsWith("--")) { + console.error("--out requires a directory path"); + process.exit(2); + } + opts.outDir = v; + } else if (a === "--locale" || a === "--locales") { + const raw = argv[++i]; + if (!raw) { + console.error("--locale requires a comma-separated list"); + process.exit(2); + } + opts.locales = raw + .split(",") + .map((s) => s.trim()) + .filter(Boolean); + const bad = opts.locales.filter((l) => !ALL_LOCALES.includes(l)); + if (bad.length) { + console.error(`Unknown locales: ${bad.join(", ")}`); + process.exit(2); + } + } else if (a === "-h" || a === "--help") { + console.log( + "Usage: pnpm exec tsx scripts/i18n-find-english.ts [--json] [--out ] [--locale de,fr]", + ); + process.exit(0); + } else { + console.error(`Unknown arg: ${a}`); + process.exit(2); + } + } + return opts; +} + +async function loadLocale(locale: string): Promise> { + const p = path.join(I18N_DIR, `${locale}.ts`); + const mod = await import(pathToFileURL(p).href); + return mod.default as Record; +} + +/** Strip placeholders {…}, URLs, and bracketed/parenthetical literals, then return lowercase words. */ +function contentWords(value: string): string[] { + const stripped = value + .replace(/\{[^}]*\}/g, " ") // placeholders + .replace(/https?:\/\/\S+/g, " ") // URLs + .replace(/[A-Z][A-Z0-9_]{3,}/g, " "); // SCREAMING_SNAKE constants + // Unicode-aware tokenization so accented words stay whole (e.g. "connecté" must not + // truncate to the English-looking stem "connect"). + return (stripped.toLowerCase().match(/\p{L}[\p{L}']*/gu) ?? []).filter( + (w) => w.length >= 2, + ); +} + +function isTechnical(value: string): boolean { + const s = value.trim(); + if (s === "") return true; + if (!/[A-Za-z]{2,}/.test(s)) return true; // only symbols/numbers/placeholders + if (/^\{[^}]*\}[%s]?$/.test(s)) return true; // pure placeholder + if (/^https?:\/\//.test(s)) return true; + // single token: identifier / path / command-ish / model id + if (!/\s/.test(s) && /^[A-Za-z0-9._:/@+%·✓•…#—–{}'-]+$/.test(s)) return true; + return false; +} + +function looksEnglish(value: string): boolean { + const distinct = new Set( + contentWords(value).filter((w) => ENGLISH_FN.has(w)), + ); + return distinct.size >= 2; +} + +async function main() { + const opts = parseArgs(process.argv.slice(2)); + const en = await loadLocale("en"); + + const perLocale: Record< + string, + Array<{ key: string; en: string; current: string }> + > = {}; + for (const locale of opts.locales) { + const map = await loadLocale(locale); + const native = NATIVE_SCRIPT[locale]; + const items: Array<{ key: string; en: string; current: string }> = []; + for (const [k, v] of Object.entries(map)) { + if (isTechnical(v)) continue; + if (INTENTIONAL_ENGLISH.has(k)) continue; + const flagged = native + ? !native.test(v) // non-Latin: no native char ⇒ English + : v === en[k] || looksEnglish(v); // Latin: identical or >=2 English-only function words + if (flagged) items.push({ key: k, en: en[k], current: v }); + } + items.sort((a, b) => a.key.localeCompare(b.key)); + perLocale[locale] = items; + } + + if (opts.outDir) { + await fs.mkdir(opts.outDir, { recursive: true }); + for (const [locale, items] of Object.entries(perLocale)) { + await fs.writeFile( + path.join(opts.outDir, `${locale}.json`), + JSON.stringify({ locale, count: items.length, items }, null, 2), + ); + } + } + + const counts = Object.fromEntries( + Object.entries(perLocale).map(([l, i]) => [l, i.length]), + ); + const total = Object.values(counts).reduce((a, b) => a + b, 0); + + if (opts.json) { + console.log(JSON.stringify({ counts, total }, null, 2)); + } else { + console.log("# i18n English-leftover report\n"); + for (const [l, items] of Object.entries(perLocale)) { + console.log(` ${l.padEnd(6)} ${items.length}`); + for (const it of items.slice(0, 20)) { + console.log( + ` ${it.key} ${JSON.stringify(it.current).slice(0, 60)}`, + ); + } + } + console.log(`\n total unexpected English: ${total}`); + if (total === 0) { + console.log( + " ✓ no unexpected untranslated English (intentional literals allowlisted)", + ); + } + } + // Non-zero ⇒ a non-allowlisted value is still English: fail so this can gate CI. + process.exit(total > 0 ? 1 : 0); +} + +main().catch((err) => { + console.error(err); + process.exit(2); +}); diff --git a/scripts/i18n-mirror-missing.mjs b/scripts/i18n-mirror-missing.mjs deleted file mode 100644 index 8f67380c7..000000000 --- a/scripts/i18n-mirror-missing.mjs +++ /dev/null @@ -1,70 +0,0 @@ -#!/usr/bin/env node -/** - * One-off: mirror keys present in en-N.ts but missing from -N.ts. - * Uses the English value as the fallback so the i18n coverage gate passes; - * actual translations can be filled in later. Run from repo root. - */ -import { promises as fs } from 'node:fs'; -import path from 'node:path'; -import { pathToFileURL } from 'node:url'; - -const CHUNK_DIR = path.resolve('app/src/lib/i18n/chunks'); -const LOCALES = ['zh-CN', 'hi', 'es', 'ar', 'fr', 'bn', 'pt', 'de', 'ru', 'id', 'it', 'ko']; -const CHUNK_COUNT = 5; - -async function loadChunk(locale, n) { - const file = path.join(CHUNK_DIR, `${locale}-${n}.ts`); - try { - const mod = await import(pathToFileURL(file).href); - return { file, table: mod.default ?? {} }; - } catch (err) { - if (err.code === 'ERR_MODULE_NOT_FOUND') return { file, table: null }; - throw err; - } -} - -function tsLiteral(value) { - // Always emit a fully escaped JS/TS string literal. The earlier - // single-quote branch left `\` untouched, so values containing a - // backslash (e.g. `'C:\Users\me'`) would be mis-parsed as escape - // sequences and silently drop the backslash. `JSON.stringify` handles - // every escape correctly. - return JSON.stringify(String(value)); -} - -async function appendMissing(locale, n, missing) { - const file = path.join(CHUNK_DIR, `${locale}-${n}.ts`); - const original = await fs.readFile(file, 'utf8'); - // Find the closing brace of the object literal — assumes the standard pattern - // `const xN: TranslationMap = { ... }; export default xN;`. - const closeIdx = original.lastIndexOf('};'); - if (closeIdx === -1) throw new Error(`No closing }; found in ${file}`); - const insertion = missing - .map(([k, v]) => ` ${tsLiteral(k)}: ${tsLiteral(v)},`) - .join('\n'); - const updated = `${original.slice(0, closeIdx)}${insertion}\n${original.slice(closeIdx)}`; - await fs.writeFile(file, updated); -} - -async function main() { - for (let n = 1; n <= CHUNK_COUNT; n++) { - const en = await loadChunk('en', n); - const enKeys = Object.entries(en.table); - for (const locale of LOCALES) { - const other = await loadChunk(locale, n); - if (other.table === null) { - console.warn(`skip missing chunk file: ${locale}-${n}.ts`); - continue; - } - const missing = enKeys.filter(([k]) => !(k in other.table)); - if (missing.length === 0) continue; - await appendMissing(locale, n, missing); - console.log(`+ ${locale}-${n}.ts (${missing.length} keys)`); - } - } -} - -main().catch(err => { - console.error(err); - process.exit(1); -});