mirror of
https://github.com/tinyhumansai/openhuman.git
synced 2026-07-27 21:08:00 +00:00
fix(i18n): translate locale fallback strings (#3004)
This commit is contained in:
+1
-1
@@ -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/<pid>/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/<locale>.ts` (`en.ts` is the source of truth; the old `chunks/<locale>-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)
|
||||
|
||||
@@ -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 `<locale>-{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/<locale>.ts` (`en.ts` is the source of truth; the chunked `chunks/<locale>-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`.
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -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 `<locale>-{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/<locale>.ts` (`en.ts` is the source of truth; the chunked `chunks/<locale>-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.
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -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<string, string>;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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<ChunkModule>('../chunks/*.ts', { eager: true });
|
||||
const localeModules = import.meta.glob<LocaleModule>('../*.ts', { eager: true });
|
||||
|
||||
function loadChunks(locale: string): Array<Record<string, string> | null> {
|
||||
const out: Array<Record<string, string> | 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<string, string> {
|
||||
const mod = localeModules[`../${locale}.ts`];
|
||||
if (!mod) throw new Error(`missing locale file: ${locale}.ts`);
|
||||
return mod.default;
|
||||
}
|
||||
|
||||
function flatten(chunks: Array<Record<string, string> | null>): Record<string, string> {
|
||||
const out: Record<string, string> = {};
|
||||
for (const c of chunks) {
|
||||
if (!c) continue;
|
||||
Object.assign(out, c);
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
function keyToChunk(chunks: Array<Record<string, string> | null>): Map<string, number> {
|
||||
const out = new Map<string, number>();
|
||||
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<string, string>;
|
||||
|
||||
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<string, string>));
|
||||
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([]);
|
||||
});
|
||||
});
|
||||
|
||||
+3994
-15
File diff suppressed because it is too large
Load Diff
+4066
-15
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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 <Ihr Schlüssel>',
|
||||
'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;
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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 <your key>',
|
||||
'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;
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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 <su clave>',
|
||||
'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;
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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 <votre clé>',
|
||||
'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;
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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 <kunci Anda>',
|
||||
'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;
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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 <la tua chiave>',
|
||||
'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;
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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 <your key>',
|
||||
'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;
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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 <Twój klucz>',
|
||||
'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;
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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 <sua chave>',
|
||||
'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;
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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/<slug>/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':
|
||||
'工作区技能目录不可写。检查“<workspace>/.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;
|
||||
+4177
-15
File diff suppressed because it is too large
Load Diff
+4143
-16
File diff suppressed because it is too large
Load Diff
+4160
-16
File diff suppressed because it is too large
Load Diff
+4073
-15
File diff suppressed because it is too large
Load Diff
+4083
-15
File diff suppressed because it is too large
Load Diff
+4138
-16
File diff suppressed because it is too large
Load Diff
+4049
-7
File diff suppressed because it is too large
Load Diff
+4139
-16
File diff suppressed because it is too large
Load Diff
+4138
-16
File diff suppressed because it is too large
Load Diff
+4107
-15
File diff suppressed because it is too large
Load Diff
+3870
-15
File diff suppressed because it is too large
Load Diff
@@ -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"
|
||||
|
||||
@@ -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 <locale>-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/<locale>.ts (keeps current values for keys
|
||||
* not present in the input).
|
||||
* - Rewrites <locale>.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<string, string> = {
|
||||
"zh-CN": "Simplified Chinese (简体中文)",
|
||||
@@ -39,6 +39,8 @@ const LOCALE_HEADERS: Record<string, string> = {
|
||||
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<Record<string, string>> {
|
||||
const p = path.join(CHUNKS_DIR, `${locale}-${n}.ts`);
|
||||
async function loadLocale(locale: string): Promise<Record<string, string>> {
|
||||
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<string, string>;
|
||||
}
|
||||
|
||||
async function loadEnChunkKeysInOrder(n: number): Promise<string[]> {
|
||||
// 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<string, string>,
|
||||
): Promise<void> {
|
||||
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<string, string>,
|
||||
): 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<string, string> = {};
|
||||
try {
|
||||
existing = await loadChunk(locale, n);
|
||||
} catch {
|
||||
existing = {};
|
||||
}
|
||||
const merged: Record<string, string> = {};
|
||||
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<string, string> = {};
|
||||
try {
|
||||
existing = await loadLocale(locale);
|
||||
} catch {
|
||||
existing = {};
|
||||
}
|
||||
const merged: Record<string, string> = {};
|
||||
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`);
|
||||
}
|
||||
}
|
||||
|
||||
+28
-168
@@ -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/<locale>-{1..5}.ts (aggregated by <locale>.ts)
|
||||
* Source of truth: app/src/lib/i18n/en.ts (single file, one flat key→string map)
|
||||
* Translations: app/src/lib/i18n/<locale>.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 <locale>-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 <dir>]
|
||||
*
|
||||
* With --out <dir>, writes one JSON per non-English locale (<dir>/<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<boolean> {
|
||||
try {
|
||||
await fs.access(p);
|
||||
return true;
|
||||
} catch {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
async function loadChunk(
|
||||
locale: Locale,
|
||||
n: number,
|
||||
): Promise<Record<string, string> | null> {
|
||||
const p = path.join(CHUNKS_DIR, `${locale}-${n}.ts`);
|
||||
if (!(await fileExists(p))) return null;
|
||||
async function loadLocale(locale: Locale): Promise<Record<string, string>> {
|
||||
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<string, string>;
|
||||
}
|
||||
|
||||
interface LocaleData {
|
||||
chunks: Array<Record<string, string> | null>; // index 0..CHUNK_COUNT-1
|
||||
flat: Record<string, string>;
|
||||
keyToChunk: Map<string, number>; // 1-indexed chunk number
|
||||
missingChunks: number[]; // 1-indexed
|
||||
}
|
||||
|
||||
async function loadLocale(locale: Locale): Promise<LocaleData> {
|
||||
const chunks: Array<Record<string, string> | null> = [];
|
||||
const flat: Record<string, string> = {};
|
||||
const keyToChunk = new Map<string, number>();
|
||||
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 <locale>.ts).
|
||||
flat[k] = v;
|
||||
keyToChunk.set(k, n);
|
||||
}
|
||||
}
|
||||
return { chunks, flat, keyToChunk, missingChunks };
|
||||
}
|
||||
|
||||
async function walkSourceFiles(dir: string, out: string[]): Promise<void> {
|
||||
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<Set<string>> {
|
||||
|
||||
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<string, string>,
|
||||
other: Record<string, string>,
|
||||
): { 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<string, string>,
|
||||
other: Record<string, string>,
|
||||
): 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<string, string> };
|
||||
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);
|
||||
|
||||
@@ -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 <dir> # 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<string, RegExp> = {
|
||||
"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 <dir>] [--locale de,fr]",
|
||||
);
|
||||
process.exit(0);
|
||||
} else {
|
||||
console.error(`Unknown arg: ${a}`);
|
||||
process.exit(2);
|
||||
}
|
||||
}
|
||||
return opts;
|
||||
}
|
||||
|
||||
async function loadLocale(locale: string): Promise<Record<string, string>> {
|
||||
const p = path.join(I18N_DIR, `${locale}.ts`);
|
||||
const mod = await import(pathToFileURL(p).href);
|
||||
return mod.default as Record<string, string>;
|
||||
}
|
||||
|
||||
/** 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);
|
||||
});
|
||||
@@ -1,70 +0,0 @@
|
||||
#!/usr/bin/env node
|
||||
/**
|
||||
* One-off: mirror keys present in en-N.ts but missing from <locale>-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);
|
||||
});
|
||||
Reference in New Issue
Block a user